From e6b37b0213a34ba644de61eee48b4d7898872a81 Mon Sep 17 00:00:00 2001 From: David Dias Date: Mon, 10 Feb 2025 18:59:01 -0500 Subject: [PATCH] feat: add featured pictures for patterns --- app/_components/pattern-preview.tsx | 23 ++++++++++++++++++ content/en/patterns/forms/button.mdx | 7 ++++++ content/en/patterns/navigation/pagination.mdx | 4 +++ middleware.ts | 2 +- next.config.ts | 5 ++++ public/covers/patterns/button.png | Bin 0 -> 8974 bytes public/covers/patterns/pagination.png | Bin 0 -> 7346 bytes styles/globals.css | 14 +++++++++++ 8 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 app/_components/pattern-preview.tsx create mode 100644 public/covers/patterns/button.png create mode 100644 public/covers/patterns/pagination.png diff --git a/app/_components/pattern-preview.tsx b/app/_components/pattern-preview.tsx new file mode 100644 index 0000000..64a0abe --- /dev/null +++ b/app/_components/pattern-preview.tsx @@ -0,0 +1,23 @@ +'use client' + +import Image from "next/image" +import { usePathname } from "next/navigation" + +export const PatternPreview = ({ alt }: { alt: string }) => { + const pathname = usePathname() + const segments = pathname.split('/') + const patternName = segments[segments.length - 1] + + return ( +
+ {alt +
+ ) +} diff --git a/content/en/patterns/forms/button.mdx b/content/en/patterns/forms/button.mdx index 873a95c..66cc4e0 100644 --- a/content/en/patterns/forms/button.mdx +++ b/content/en/patterns/forms/button.mdx @@ -2,15 +2,22 @@ summary: "Trigger actions and submit forms" description: "Learn how to implement accessible and user-friendly buttons in your web applications. Discover best practices for button design, states, accessibility, and implementation with code examples and guidelines." icon: MousePointerClick +ogImage: /covers/patterns/button.png status: complete --- import { BrowserSupport } from "@app/_components/browser-support"; import { BuildEffort } from "@app/_components/build-effort"; import { FaqStructuredData } from "@app/_components/faq-structured-data"; +import { PatternPreview } from "@app/_components/pattern-preview"; # Button + + ## Overview **Buttons** are interactive elements that trigger actions or events when clicked or interacted with. diff --git a/content/en/patterns/navigation/pagination.mdx b/content/en/patterns/navigation/pagination.mdx index 0d231bf..c46b596 100644 --- a/content/en/patterns/navigation/pagination.mdx +++ b/content/en/patterns/navigation/pagination.mdx @@ -2,18 +2,22 @@ summary: "Navigate through multiple pages of content" description: "Master pagination implementation in web applications. Learn best practices for building accessible, user-friendly page navigation with clear guidelines for design, accessibility, and performance." icon: Route +ogImage: /covers/patterns/pagination.png status: complete --- import { BrowserSupport } from "@app/_components/browser-support"; import { BuildEffort } from "@app/_components/build-effort"; import { FaqStructuredData } from "@app/_components/faq-structured-data"; +import { PatternPreview } from "@app/_components/pattern-preview"; import { StepsPagination } from "@app/_components/seo/steps-pagination.tsx"; # Pagination + + ## Overview **[Pagination](/glossary/pagination)** is a navigation pattern used to divide large collections of content into manageable chunks or pages. diff --git a/middleware.ts b/middleware.ts index 692ec41..51cce3a 100755 --- a/middleware.ts +++ b/middleware.ts @@ -3,6 +3,6 @@ export { middleware } from 'nextra/locales' export const config = { // Matcher ignoring `/_next/` and `/api/` matcher: [ - '/((?!api/mdx|api/email|api/patterns/random|api/og|_next/static|_next/image|favicon.ico|robots.txt|og/opengraph-image.png|twitter-image|sitemap.xml|6ba7b811-9dad-11d1-80b4.txt|43mg4ybv6sxxanu24g7dngawd9up5w93.txt|apple-icon.png|manifest|_pagefind|examples).*)' + '/((?!api/mdx|api/email|api/patterns/random|api/og|_next/static|_next/image|favicon.ico|robots.txt|og/opengraph-image.png|covers|twitter-image|sitemap.xml|6ba7b811-9dad-11d1-80b4.txt|43mg4ybv6sxxanu24g7dngawd9up5w93.txt|apple-icon.png|manifest|_pagefind|examples).*)' ] } diff --git a/next.config.ts b/next.config.ts index 061b229..3b0d52a 100755 --- a/next.config.ts +++ b/next.config.ts @@ -41,6 +41,11 @@ const nextConfig = withBundleAnalyzer( source: '/patterns', destination: '/patterns/getting-started', statusCode: 302 + }, + { + source: '/patterns/docs/navigation/breadcrumb', + destination: '/patterns/navigation/breadcrumb', + statusCode: 302 } ], async rewrites() { diff --git a/public/covers/patterns/button.png b/public/covers/patterns/button.png new file mode 100644 index 0000000000000000000000000000000000000000..68c4ad33bf2d65d7fb470e10ad0599ed87256544 GIT binary patch literal 8974 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 literal 0 HcmV?d00001 diff --git a/public/covers/patterns/pagination.png b/public/covers/patterns/pagination.png new file mode 100644 index 0000000000000000000000000000000000000000..a44d9cd41c698aebdc6067a25c1a7084cf18263d GIT binary patch literal 7346 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