├── .github └── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── .gitignore ├── .nvmrc ├── .prettierignore ├── .prettierrc.json ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── app ├── (home) │ ├── blog │ │ ├── [slug] │ │ │ ├── page.client.tsx │ │ │ └── page.tsx │ │ └── page.tsx │ ├── layout.tsx │ └── page.tsx ├── api │ └── search │ │ └── route.ts ├── blog-og │ └── [...slug] │ │ └── route.tsx ├── docs-banners.tsx ├── docs-og │ └── [...slug] │ │ └── route.tsx ├── docs │ ├── [[...slug]] │ │ └── page.tsx │ └── layout.tsx ├── favicon.ico ├── fonts │ ├── GeistMonoVF.woff │ └── GeistVF.woff ├── global.css ├── layout.config.tsx ├── layout.tsx ├── opengraph-image.jpg ├── opengraph-image.txt ├── preview │ └── [[...slug]] │ │ └── page.tsx ├── sitemap.ts ├── twitter-image-alt.txt └── twitter-image.jpg ├── cli.json ├── components.json ├── components ├── commerce-ui │ ├── blocks │ │ ├── banners │ │ │ ├── banner-01.tsx │ │ │ ├── banner-02.tsx │ │ │ ├── banner-03.tsx │ │ │ ├── banner-04.tsx │ │ │ ├── banner-05.tsx │ │ │ ├── banner-06.tsx │ │ │ ├── banner-07.tsx │ │ │ ├── banner-08.tsx │ │ │ ├── banner-09.tsx │ │ │ ├── banner-10.tsx │ │ │ ├── banner-11.tsx │ │ │ └── banner-12.tsx │ │ ├── carts │ │ │ ├── cart-01-ex.tsx │ │ │ └── cart-01.tsx │ │ ├── product-card │ │ │ ├── product-card-01.tsx │ │ │ ├── product-card-02.tsx │ │ │ ├── product-card-03.tsx │ │ │ ├── product-card-04.tsx │ │ │ ├── product-card-05.tsx │ │ │ ├── product-card-06.tsx │ │ │ ├── product-card-07.tsx │ │ │ ├── product-card-08.tsx │ │ │ ├── product-card-09.tsx │ │ │ ├── product-card-10.tsx │ │ │ ├── product-card-11.tsx │ │ │ ├── product-card-12.tsx │ │ │ └── product-card-13.tsx │ │ ├── product-cards │ │ │ ├── product-cards-01.tsx │ │ │ ├── product-cards-03.tsx │ │ │ ├── product-cards-04.tsx │ │ │ ├── product-cards-10.tsx │ │ │ ├── product-cards-11.tsx │ │ │ └── product-cards-12.tsx │ │ ├── product-variants │ │ │ ├── product-variants-01-ex.tsx │ │ │ ├── product-variants-01.tsx │ │ │ ├── product-variants-02-ex.tsx │ │ │ ├── product-variants-02.tsx │ │ │ ├── product-variants-03-ex.tsx │ │ │ ├── product-variants-03.tsx │ │ │ ├── product-variants-04-ex.tsx │ │ │ ├── product-variants-04.tsx │ │ │ ├── product-variants-05-ex.tsx │ │ │ └── product-variants-05.tsx │ │ └── reviews │ │ │ ├── review-01.tsx │ │ │ ├── review-02.tsx │ │ │ ├── review-03.tsx │ │ │ ├── review-04.tsx │ │ │ ├── review-05.tsx │ │ │ ├── review-06.tsx │ │ │ ├── review-07.tsx │ │ │ ├── review-08.tsx │ │ │ ├── review-09.tsx │ │ │ └── review-10.tsx │ ├── components │ │ ├── face-rating │ │ │ ├── basic │ │ │ │ ├── face-rating-basic-ex-01.tsx │ │ │ │ ├── face-rating-basic-ex-02.tsx │ │ │ │ ├── face-rating-basic-ex-03.tsx │ │ │ │ └── face-rating-basic.tsx │ │ │ └── gradient │ │ │ │ ├── face-rating-gradient-ex-01.tsx │ │ │ │ └── face-rating-gradient.tsx │ │ ├── image-carousel │ │ │ └── basic │ │ │ │ ├── image-carousel-basic-ex-01.tsx │ │ │ │ ├── image-carousel-basic-ex-02.tsx │ │ │ │ ├── image-carousel-basic-ex-03.tsx │ │ │ │ ├── image-carousel-basic-ex-04.tsx │ │ │ │ └── image-carousel-basic.tsx │ │ ├── image-viewer │ │ │ ├── basic │ │ │ │ ├── image-viewer-basic-ex-01.tsx │ │ │ │ ├── image-viewer-basic-ex-02.tsx │ │ │ │ └── image-viewer-basic.tsx │ │ │ └── motion │ │ │ │ ├── image-viewer-motion-ex-01.tsx │ │ │ │ └── image-viewer-motion.tsx │ │ ├── like-rating │ │ │ └── basic │ │ │ │ ├── like-rating-basic.tsx │ │ │ │ └── like-rating-ex-01.tsx │ │ ├── price-format │ │ │ ├── basic │ │ │ │ ├── price-format-basic-ex-01.tsx │ │ │ │ └── price-format-basic.tsx │ │ │ └── sale │ │ │ │ ├── price-format-sale-ex-01.tsx │ │ │ │ ├── price-format-sale-ex-02.tsx │ │ │ │ ├── price-format-sale-ex-03.tsx │ │ │ │ └── price-format-sale.tsx │ │ ├── quantity-input │ │ │ └── basic │ │ │ │ ├── quantity-input-basic.tsx │ │ │ │ ├── quantity-input-ex-01.tsx │ │ │ │ ├── quantity-input-ex-02.tsx │ │ │ │ └── quantity-input-ex-03.tsx │ │ ├── star-rating │ │ │ ├── basic │ │ │ │ ├── star-rating-basic-ex-01.tsx │ │ │ │ ├── star-rating-basic-ex-02.tsx │ │ │ │ ├── star-rating-basic-ex-03.tsx │ │ │ │ └── star-rating-basic.tsx │ │ │ └── fractions │ │ │ │ ├── star-rating-fractions-ex-01.tsx │ │ │ │ ├── star-rating-fractions-ex-02.tsx │ │ │ │ ├── star-rating-fractions-ex-03.tsx │ │ │ │ └── star-rating-fractions.tsx │ │ ├── upvote-rating │ │ │ ├── animated │ │ │ │ ├── upvote-rating-animated-ex-01.tsx │ │ │ │ ├── upvote-rating-animated-ex-02.tsx │ │ │ │ └── upvote-rating-animated.tsx │ │ │ └── basic │ │ │ │ ├── upvote-rating-basic-ex-01.tsx │ │ │ │ ├── upvote-rating-basic-ex-02.tsx │ │ │ │ └── upvote-rating-basic.tsx │ │ ├── variant-color-selector │ │ │ ├── basic │ │ │ │ ├── variant-color-selector-basic-ex-01.tsx │ │ │ │ └── variant-color-selector-basic.tsx │ │ │ ├── example.tsx │ │ │ └── variant-color-selector-01.tsx │ │ └── variant-selector │ │ │ ├── animated │ │ │ └── variant-selector-animated.tsx │ │ │ ├── basic │ │ │ ├── variant-selector-basic-ex-01.tsx │ │ │ ├── variant-selector-basic-ex-02.tsx │ │ │ ├── variant-selector-basic-ex-03.tsx │ │ │ ├── variant-selector-basic-ex-04.tsx │ │ │ ├── variant-selector-basic-ex-05.tsx │ │ │ └── variant-selector-basic.tsx │ │ │ ├── images │ │ │ ├── variant-selector-images-ex-01.tsx │ │ │ └── variant-selector-images.tsx │ │ │ └── multiple │ │ │ ├── variant-selector-multiple-ex-01.tsx │ │ │ ├── variant-selector-multiple-ex-02.tsx │ │ │ └── variant-selector-multiple.tsx │ └── pages │ │ └── product-01 │ │ ├── components │ │ ├── product-info.tsx │ │ ├── product.tsx │ │ ├── store-header.tsx │ │ └── store-navigation.tsx │ │ └── page.tsx ├── docs │ ├── code-renderer.tsx │ ├── component-loader.tsx │ ├── component-props-table.tsx │ ├── copy-btn.tsx │ ├── mdx-components.tsx │ ├── preview │ │ ├── component-base.tsx │ │ ├── component-collapse.tsx │ │ ├── component-preview-code.tsx │ │ ├── component-preview.tsx │ │ ├── component-source.tsx │ │ ├── components-install.tsx │ │ ├── page-preview-code.tsx │ │ └── page-preview.tsx │ ├── scroll-progress.tsx │ ├── shared.tsx │ └── sidebar.tsx ├── landing │ ├── components-showcase.tsx │ ├── footer.tsx │ ├── header-custom-links.tsx │ ├── hero.tsx │ └── tech-stack.tsx ├── layout │ ├── language-toggle.tsx │ ├── nav.tsx │ ├── root-toggle.tsx │ ├── search-toggle.tsx │ └── theme-toggle.tsx ├── links.tsx ├── magicui │ ├── grid-pattern.tsx │ ├── line-shadow-text.tsx │ └── shimmer-button.tsx ├── notebook.client.tsx ├── notebook.tsx ├── shared.tsx └── ui │ ├── accordion.tsx │ ├── badge.tsx │ ├── breadcrumb.tsx │ ├── button.tsx │ ├── collapsible.tsx │ ├── dropdown-menu.tsx │ ├── icons.tsx │ ├── input.tsx │ ├── label.tsx │ ├── page-header.tsx │ ├── popover.tsx │ ├── progress.tsx │ ├── references.tsx │ ├── resizable.tsx │ ├── scroll-area.tsx │ ├── separator.tsx │ ├── sheet.tsx │ ├── slider.tsx │ ├── switch.tsx │ ├── table.tsx │ ├── tabs.tsx │ └── tooltip.tsx ├── config ├── sidebar-badges.ts ├── sidebar-rename.ts └── site.ts ├── content ├── blog │ ├── blog-number-input.mdx │ ├── create-animated-upvote-rating-component.mdx │ ├── create-star-rating-component.mdx │ └── create-star-rating-components-fractions.mdx └── docs │ ├── blocks │ ├── banners.mdx │ ├── carts.mdx │ ├── meta.json │ ├── product-card.mdx │ ├── product-variants.mdx │ └── reviews.mdx │ ├── cli.mdx │ ├── components │ ├── image-carousel │ │ ├── horizontal.mdx │ │ └── meta.json │ ├── image-viewer │ │ ├── basic.mdx │ │ ├── meta.json │ │ └── motion.mdx │ ├── price-format │ │ ├── basic.mdx │ │ ├── meta.json │ │ └── sale.mdx │ ├── quantity-input │ │ ├── basic.mdx │ │ └── meta.json │ ├── rating-face │ │ ├── basic.mdx │ │ ├── gradient.mdx │ │ └── meta.json │ ├── rating-like │ │ ├── like-rating.mdx │ │ └── meta.json │ ├── rating-star │ │ ├── basic.mdx │ │ ├── fractions.mdx │ │ └── meta.json │ ├── rating-upvote │ │ ├── animated.mdx │ │ ├── basic.mdx │ │ └── meta.json │ ├── variant-color-selector │ │ ├── basic.mdx │ │ └── meta.json │ └── variant-selector │ │ ├── basic.mdx │ │ ├── images.mdx │ │ ├── meta.json │ │ └── mutliple.mdx │ ├── index.mdx │ ├── installation.mdx │ ├── meta.json │ ├── pages │ ├── meta.json │ └── products.mdx │ └── test.mdx ├── eslint.config.mjs ├── hooks ├── use-auto-resize-textarea.ts ├── use-mobile.tsx └── use-registry-counts.ts ├── lib ├── cn.ts ├── code.ts ├── fonts.ts ├── generateOGImage.tsx ├── is-active.ts ├── metadata.ts ├── shiki.ts ├── source.ts └── utils.ts ├── next.config.mjs ├── package.json ├── pnpm-lock.yaml ├── postcss.config.js ├── public ├── cover.jpeg ├── fonts │ ├── Geist-Medium.otf │ └── Redaction_35-Regular.woff2 ├── logo.svg ├── placeholders │ ├── backpack.jpg │ ├── bike-01.jpg │ ├── camera-01.jpg │ ├── cat-cyberpunk.webp │ ├── cat-default.webp │ ├── cat-steampunk.webp │ ├── charger-01.jpg │ ├── coffee-cups-01.jpg │ ├── coffee-filter-01.jpg │ ├── coffee-machine-01.jpg │ ├── coffee-machine-02.jpg │ ├── essential-oil-01.jpg │ ├── family-01.jpg │ ├── hand-cream-01.jpg │ ├── hand-cream-02.jpg │ ├── hand-cream-03.jpg │ ├── hand-cream-04.jpg │ ├── handcream-01.jpg │ ├── headphone-1-thumb.jpg │ ├── headphone-1.jpg │ ├── headphone-2.jpg │ ├── headphone-3.jpg │ ├── headphone-4.jpg │ ├── hotel-01.jpg │ ├── hotel-02.jpg │ ├── laurel-leaf.svg │ ├── logo-01.png │ ├── logo-02.png │ ├── logo-03.png │ ├── logo-04.png │ ├── logo-05.png │ ├── logo-06.png │ ├── shoes-01.jpg │ ├── shoes-02.jpg │ ├── smartwatch-01.jpg │ ├── smartwatch-02.jpg │ ├── speaker-01.jpg │ ├── speaker-02.jpg │ ├── speaker-03.jpg │ ├── speaker-04.jpg │ ├── speaker-05.jpg │ ├── tablet-01.jpg │ ├── user-01.jpg │ ├── user-02.jpg │ ├── user-03.jpg │ ├── user-04.jpg │ ├── user-05.jpg │ ├── user-06.jpg │ └── user-07.jpg ├── r │ ├── banner-01-block.json │ ├── banner-02-block.json │ ├── banner-03-block.json │ ├── banner-04-block.json │ ├── banner-05-block.json │ ├── banner-06-block.json │ ├── banner-07-block.json │ ├── banner-08-block.json │ ├── banner-09-block.json │ ├── banner-10-block.json │ ├── banner-11-block.json │ ├── banner-12-block.json │ ├── cart-01-block-ex.json │ ├── cart-01-block.json │ ├── example-block.json │ ├── face-rating-basic-ex-01.json │ ├── face-rating-basic-ex-02.json │ ├── face-rating-basic-ex-03.json │ ├── face-rating-basic.json │ ├── face-rating-gradient-ex-01.json │ ├── face-rating-gradient.json │ ├── image-carousel-basic-ex-01.json │ ├── image-carousel-basic-ex-02.json │ ├── image-carousel-basic-ex-03.json │ ├── image-carousel-basic-ex-04.json │ ├── image-carousel-basic.json │ ├── image-viewer-basic-ex-01.json │ ├── image-viewer-basic-ex-02.json │ ├── image-viewer-basic.json │ ├── image-viewer-motion-ex-01.json │ ├── image-viewer-motion.json │ ├── like-rating-basic-ex-01.json │ ├── like-rating-basic.json │ ├── price-format-basic-ex-01.json │ ├── price-format-basic.json │ ├── price-format-sale-ex-01.json │ ├── price-format-sale-ex-02.json │ ├── price-format-sale-ex-03.json │ ├── price-format-sale.json │ ├── product-01-page.json │ ├── product-card-01-block.json │ ├── product-card-02-block.json │ ├── product-card-03-block.json │ ├── product-card-04-block.json │ ├── product-card-05-block.json │ ├── product-card-06-block.json │ ├── product-card-07-block.json │ ├── product-card-08-block.json │ ├── product-card-09-block.json │ ├── product-card-10-block.json │ ├── product-card-11-block.json │ ├── product-card-12-block.json │ ├── product-card-13-block.json │ ├── product-variant-01-block-ex.json │ ├── product-variant-01-block.json │ ├── product-variant-02-block-ex.json │ ├── product-variant-02-block.json │ ├── product-variant-03-block-ex.json │ ├── product-variant-03-block.json │ ├── product-variant-04-block-ex.json │ ├── product-variant-04-block.json │ ├── product-variant-05-block-ex.json │ ├── product-variant-05-block.json │ ├── quantity-input-basic-ex-01.json │ ├── quantity-input-basic-ex-02.json │ ├── quantity-input-basic-ex-03.json │ ├── quantity-input-basic.json │ ├── rating-upvote-animated.json │ ├── rating-upvote-basic-ex-01.json │ ├── rating-upvote-basic.json │ ├── review-01-block.json │ ├── review-02-block.json │ ├── review-03-block.json │ ├── review-04-block.json │ ├── review-05-block.json │ ├── review-06-block.json │ ├── review-07-block.json │ ├── review-08-block.json │ ├── review-09-block.json │ ├── review-10-block.json │ ├── star-rating-basic-ex-01.json │ ├── star-rating-basic-ex-02.json │ ├── star-rating-basic-ex-03.json │ ├── star-rating-basic.json │ ├── star-rating-fractions-ex-01.json │ ├── star-rating-fractions-ex-02.json │ ├── star-rating-fractions-ex-03.json │ ├── star-rating-fractions.json │ ├── upvote-rating-animated-ex-01.json │ ├── upvote-rating-animated-ex-02.json │ ├── upvote-rating-animated.json │ ├── upvote-rating-basic-ex-01.json │ ├── upvote-rating-basic-ex-02.json │ ├── upvote-rating-basic.json │ ├── utils.json │ ├── variant-color-selector-basic-ex-01.json │ ├── variant-color-selector-basic.json │ ├── variant-selector-basic-ex-01.json │ ├── variant-selector-basic-ex-02.json │ ├── variant-selector-basic-ex-03.json │ ├── variant-selector-basic-ex-04.json │ ├── variant-selector-basic-ex-05.json │ ├── variant-selector-basic.json │ ├── variant-selector-images-ex-01.json │ ├── variant-selector-images.json │ ├── variant-selector-multiple-ex-01.json │ ├── variant-selector-multiple-ex-02.json │ └── variant-selector-multiple.json ├── registry.json └── stackzero_commerce_ui_logo.svg ├── registry ├── index.ts ├── registry-blocks.ts ├── registry-components.ts ├── registry-examples.ts ├── registry-hooks.ts ├── registry-lib.ts ├── registry-pages.ts └── schema.ts ├── scripts ├── build-registry.ts └── sort-registry.ts ├── source.config.ts ├── tsconfig.json └── types └── component.ts /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Desktop (please complete the following information):** 27 | - OS: [e.g. iOS] 28 | - Browser [e.g. chrome, safari] 29 | - Version [e.g. 22] 30 | 31 | **Smartphone (please complete the following information):** 32 | - Device: [e.g. iPhone6] 33 | - OS: [e.g. iOS8.1] 34 | - Browser [e.g. stock browser, safari] 35 | - Version [e.g. 22] 36 | 37 | **Additional context** 38 | Add any other context about the problem here. 39 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # deps 2 | /node_modules 3 | 4 | # generated content 5 | .contentlayer 6 | .content-collections 7 | .source 8 | 9 | # test & build 10 | /coverage 11 | /.next/ 12 | /out/ 13 | /build 14 | *.tsbuildinfo 15 | 16 | # misc 17 | .DS_Store 18 | *.pem 19 | /.pnp 20 | .pnp.js 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | 25 | # others 26 | .env*.local 27 | .vercel 28 | next-env.d.ts -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 22.13.1 -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | # deps 2 | /node_modules 3 | 4 | # generated content 5 | .contentlayer 6 | .content-collections 7 | .source 8 | 9 | # test & build 10 | /coverage 11 | /.next/ 12 | /out/ 13 | /build 14 | *.tsbuildinfo 15 | 16 | # misc 17 | .DS_Store 18 | *.pem 19 | /.pnp 20 | .pnp.js 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | 25 | # others 26 | .env*.local 27 | .vercel 28 | next-env.d.ts 29 | 30 | pnpm-lock.yaml 31 | content 32 | 33 | # registry 34 | public/r -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "es5", 3 | "semi": true, 4 | "tabWidth": 2, 5 | "singleQuote": false, 6 | "jsxSingleQuote": false, 7 | "plugins": ["prettier-plugin-tailwindcss"] 8 | } 9 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 Stackzero Labs 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /app/(home)/blog/page.tsx: -------------------------------------------------------------------------------- 1 | import { blog } from "@/lib/source"; 2 | import Link from "next/link"; 3 | 4 | export default function Page(): React.ReactElement { 5 | const posts = [...blog.getPages()].sort( 6 | (a, b) => 7 | new Date(b.data.date ?? b.file.name).getTime() - 8 | new Date(a.data.date ?? a.file.name).getTime() 9 | ); 10 | 11 | return ( 12 |
13 |
14 | {posts.map((post) => ( 15 | 20 |

{post.data.title}

21 |

22 | {post.data.description} 23 |

24 | 25 |

26 | {new Date(post.data.date ?? post.file.name).toDateString()} 27 |

28 | 29 |
30 | {post.data.tags?.map((tag) => ( 31 | 35 | {tag} 36 | 37 | ))} 38 |
39 | 40 | ))} 41 |
42 |
43 | ); 44 | } 45 | -------------------------------------------------------------------------------- /app/(home)/layout.tsx: -------------------------------------------------------------------------------- 1 | import type { ReactNode } from "react"; 2 | import { HomeLayout } from "fumadocs-ui/layouts/home"; 3 | import { baseOptions } from "@/app/layout.config"; 4 | import Footer from "@/components/landing/footer"; 5 | 6 | export default function Layout({ children }: { children: ReactNode }) { 7 | return ( 8 | <> 9 |
10 | {children} 11 |
12 |
13 |
15 | 16 | ); 17 | } 18 | -------------------------------------------------------------------------------- /app/(home)/page.tsx: -------------------------------------------------------------------------------- 1 | import ComponentsShowcase from "@/components/landing/components-showcase"; 2 | import { HeroSection } from "@/components/landing/hero"; 3 | import { GridPattern } from "@/components/magicui/grid-pattern"; 4 | import { Button } from "@/components/ui/button"; 5 | import { cn } from "@/lib/utils"; 6 | import { ArrowRight } from "lucide-react"; 7 | import Link from "next/link"; 8 | 9 | export default function HomePage() { 10 | return ( 11 |
12 | 13 | 14 | 15 | 16 |
17 |
18 | 28 |

29 | And many more 30 |

31 | 32 |
33 | 43 |
44 |

45 | 100% free and Open Source 46 |

47 |
48 |
49 |
50 |
51 |
52 | ); 53 | } 54 | -------------------------------------------------------------------------------- /app/api/search/route.ts: -------------------------------------------------------------------------------- 1 | // import { source } from '@/lib/source'; 2 | // import { createFromSource } from 'fumadocs-core/search/server'; 3 | 4 | // export const { GET } = createFromSource(source); 5 | 6 | import { source } from "@/lib/source"; 7 | import { createFromSource } from "fumadocs-core/search/server"; 8 | 9 | // it should be cached forever 10 | export const revalidate = false; 11 | 12 | export const { staticGET: GET } = createFromSource(source); 13 | -------------------------------------------------------------------------------- /app/blog-og/[...slug]/route.tsx: -------------------------------------------------------------------------------- 1 | // import { generateOGImage } from "fumadocs-ui/og"; 2 | import { generateOGImage } from "@/lib/generateOGImage"; 3 | import { metadataImage, metadataImageBlog } from "@/lib/metadata"; 4 | 5 | export const GET = metadataImageBlog.createAPI(async (page) => { 6 | return generateOGImage({ 7 | // description: page.data.description, 8 | site: "stackzero/commerce-ui", 9 | title: page.data.title, 10 | primaryColor: "#8940ff34", 11 | primaryTextColor: "rgb(240, 228, 247)", 12 | }); 13 | }); 14 | 15 | export function generateStaticParams() { 16 | return metadataImageBlog.generateParams(); 17 | } 18 | -------------------------------------------------------------------------------- /app/docs-banners.tsx: -------------------------------------------------------------------------------- 1 | import { Button } from "@/components/ui/button"; 2 | import { Banner } from "fumadocs-ui/components/banner"; 3 | import Link from "next/link"; 4 | 5 | export const DocsBanners = () => { 6 | return ( 7 | <> 8 | 9 | 10 | 11 | 12 | 13 |

+13 New Product Cards Released!

14 | 17 |
18 | 19 | ); 20 | }; 21 | -------------------------------------------------------------------------------- /app/docs-og/[...slug]/route.tsx: -------------------------------------------------------------------------------- 1 | // import { generateOGImage } from "fumadocs-ui/og"; 2 | import { generateOGImage } from "@/lib/generateOGImage"; 3 | import { metadataImage } from "@/lib/metadata"; 4 | 5 | export const GET = metadataImage.createAPI(async (page) => { 6 | return generateOGImage({ 7 | description: page.data.description, 8 | site: "stackzero/commerce-ui", 9 | title: page.data.title, 10 | primaryColor: "#8940ff34", 11 | primaryTextColor: "rgb(240, 228, 247)", 12 | }); 13 | }); 14 | 15 | export function generateStaticParams() { 16 | return metadataImage.generateParams(); 17 | } 18 | -------------------------------------------------------------------------------- /app/docs/layout.tsx: -------------------------------------------------------------------------------- 1 | // import { DocsLayout, type DocsLayoutProps } from "fumadocs-ui/layouts/notebook"; 2 | import type { ReactNode } from "react"; 3 | import { baseOptions, linkItems } from "@/app/layout.config"; 4 | import { source } from "@/lib/source"; 5 | import { DocsLayout, DocsLayoutProps } from "@/components/notebook"; 6 | 7 | const docsOptions: DocsLayoutProps = { 8 | ...baseOptions, 9 | links: linkItems, 10 | tree: source.pageTree, 11 | i18n: false, 12 | }; 13 | 14 | export default function Layout({ children }: { children: ReactNode }) { 15 | return {children}; 16 | } 17 | -------------------------------------------------------------------------------- /app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stackzero-labs/ui/7dec626f7def18a062676113bc9dbccd92c23cc4/app/favicon.ico -------------------------------------------------------------------------------- /app/fonts/GeistMonoVF.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stackzero-labs/ui/7dec626f7def18a062676113bc9dbccd92c23cc4/app/fonts/GeistMonoVF.woff -------------------------------------------------------------------------------- /app/fonts/GeistVF.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stackzero-labs/ui/7dec626f7def18a062676113bc9dbccd92c23cc4/app/fonts/GeistVF.woff -------------------------------------------------------------------------------- /app/layout.tsx: -------------------------------------------------------------------------------- 1 | import { cn } from "@/lib/utils"; 2 | import { RootProvider } from "fumadocs-ui/provider"; 3 | import { GeistSans } from "geist/font/sans"; 4 | import { Metadata } from "next"; 5 | import localFont from "next/font/local"; 6 | import Script from "next/script"; 7 | import type { ReactNode } from "react"; 8 | import { DocsBanners } from "./docs-banners"; 9 | import "./global.css"; 10 | 11 | const geistSans = localFont({ 12 | src: "./fonts/GeistVF.woff", 13 | variable: "--font-geist-sans", 14 | weight: "100 900", 15 | }); 16 | 17 | export default function Layout({ children }: { children: ReactNode }) { 18 | const isDev = process.env.NODE_ENV === "development"; 19 | 20 | return ( 21 | 26 | {!isDev ? ( 27 |