Full Code of magicuidesign/magicui for AI

main 243b835167e1 cached
863 files
7.0 MB
1.9M tokens
642 symbols
1 requests
Download .txt
Showing preview only (7,480K chars total). Download the full file or copy to clipboard to get everything.
Repository: magicuidesign/magicui
Branch: main
Commit: 243b835167e1
Files: 863
Total size: 7.0 MB

Directory structure:
gitextract_qvmhi0l2/

├── .cursor/
│   └── mcp.json
├── .editorconfig
├── .gitattributes
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.yml
│   │   └── feature_request.yml
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── scripts/
│   │   ├── publish-articles.cjs
│   │   └── submit-sitemap.mjs
│   └── workflows/
│       ├── code-check.yml
│       ├── publish-article.yml
│       └── submit-sitemap.yml
├── .gitignore
├── .prettierignore
├── AGENTS.md
├── CONTRIBUTING.md
├── LICENSE.md
├── README.md
├── apps/
│   └── www/
│       ├── .env.example
│       ├── .gitignore
│       ├── .prettierignore
│       ├── app/
│       │   ├── (blog)/
│       │   │   └── blog/
│       │   │       ├── [...slug]/
│       │   │       │   └── page.tsx
│       │   │       ├── layout.tsx
│       │   │       └── page.tsx
│       │   ├── (docs)/
│       │   │   ├── docs/
│       │   │   │   ├── [[...slug]]/
│       │   │   │   │   └── page.tsx
│       │   │   │   ├── layout.tsx
│       │   │   │   ├── loading.tsx
│       │   │   │   └── not-found.tsx
│       │   │   └── layout.tsx
│       │   ├── (marketing)/
│       │   │   ├── layout.tsx
│       │   │   ├── page.tsx
│       │   │   └── showcase/
│       │   │       ├── [...slug]/
│       │   │       │   └── page.tsx
│       │   │       └── page.tsx
│       │   ├── api/
│       │   │   └── blog-webhook/
│       │   │       └── route.ts
│       │   ├── layout.tsx
│       │   ├── llm/
│       │   │   └── [[...slug]]/
│       │   │       └── route.ts
│       │   ├── not-found.tsx
│       │   ├── og/
│       │   │   ├── geist-regular-otf.json
│       │   │   ├── geist-semibold-otf.json
│       │   │   ├── geistmono-regular-otf.json
│       │   │   └── route.tsx
│       │   ├── robots.ts
│       │   └── sitemap.ts
│       ├── components/
│       │   ├── analytics.tsx
│       │   ├── blog/
│       │   │   ├── mobile-toc.tsx
│       │   │   └── table-of-contents.tsx
│       │   ├── blur-image.tsx
│       │   ├── callout.tsx
│       │   ├── code-block-command.tsx
│       │   ├── code-block-wrapper.tsx
│       │   ├── code-collapsible-wrapper.tsx
│       │   ├── code-tabs.tsx
│       │   ├── command-menu.tsx
│       │   ├── component-preview-tabs.tsx
│       │   ├── component-preview.tsx
│       │   ├── component-source.tsx
│       │   ├── components-list.tsx
│       │   ├── contribute.tsx
│       │   ├── copy-button.tsx
│       │   ├── deal-banner.tsx
│       │   ├── discord-link.tsx
│       │   ├── docs-copy-page.tsx
│       │   ├── docs-sidebar.tsx
│       │   ├── docs-toc.tsx
│       │   ├── github-link.tsx
│       │   ├── gradient-blur.tsx
│       │   ├── icons.tsx
│       │   ├── logo-button.tsx
│       │   ├── main-nav.tsx
│       │   ├── mobile-nav.tsx
│       │   ├── mode-toggle.tsx
│       │   ├── open-in-v0-button.tsx
│       │   ├── ping-dot.tsx
│       │   ├── posthog-provider.tsx
│       │   ├── sections/
│       │   │   ├── component-demos.tsx
│       │   │   ├── cta.tsx
│       │   │   ├── expandable-masonary-section.tsx
│       │   │   ├── hero.tsx
│       │   │   ├── showcase.tsx
│       │   │   ├── testimonial-tweet-link.tsx
│       │   │   ├── testimonials.tsx
│       │   │   └── video-testimonials.tsx
│       │   ├── sidebar-cta.tsx
│       │   ├── site-banner.tsx
│       │   ├── site-footer.tsx
│       │   ├── site-header.tsx
│       │   ├── tech-stack.tsx
│       │   ├── template-open.tsx
│       │   ├── template-preview.tsx
│       │   ├── theme-provider.tsx
│       │   ├── ui/
│       │   │   ├── accordion.tsx
│       │   │   ├── alert.tsx
│       │   │   ├── avatar.tsx
│       │   │   ├── badge.tsx
│       │   │   ├── button.tsx
│       │   │   ├── calendar.tsx
│       │   │   ├── card.tsx
│       │   │   ├── collapsible.tsx
│       │   │   ├── command.tsx
│       │   │   ├── context-menu.tsx
│       │   │   ├── dialog.tsx
│       │   │   ├── dropdown-menu.tsx
│       │   │   ├── form.tsx
│       │   │   ├── input.tsx
│       │   │   ├── label.tsx
│       │   │   ├── popover.tsx
│       │   │   ├── scroll-area.tsx
│       │   │   ├── select.tsx
│       │   │   ├── separator.tsx
│       │   │   ├── sheet.tsx
│       │   │   ├── sidebar.tsx
│       │   │   ├── skeleton.tsx
│       │   │   ├── sonner.tsx
│       │   │   ├── switch.tsx
│       │   │   ├── table.tsx
│       │   │   ├── tabs.tsx
│       │   │   └── tooltip.tsx
│       │   └── version-select.tsx
│       ├── components.json
│       ├── config/
│       │   ├── docs.ts
│       │   └── site.ts
│       ├── content/
│       │   ├── blog/
│       │   │   ├── animated-landing-page.mdx
│       │   │   ├── animation-libraries.mdx
│       │   │   ├── animation-on-scroll-css.mdx
│       │   │   ├── ant-design-alternatives.mdx
│       │   │   ├── ant-design-vs-material-ui.mdx
│       │   │   ├── app-landing-page.mdx
│       │   │   ├── best-react-component-library.mdx
│       │   │   ├── best-react-native-ui-library.mdx
│       │   │   ├── best-react-ui-framework.mdx
│       │   │   ├── best-saas-landing-pages.mdx
│       │   │   ├── best-web-design-tools.mdx
│       │   │   ├── best-web-developer-portfolios.mdx
│       │   │   ├── bootstrap-vs-react.mdx
│       │   │   ├── cards-ui-design.mdx
│       │   │   ├── carousel-user-interface.mdx
│       │   │   ├── chakra-ui-vs-material-ui.mdx
│       │   │   ├── color-theory-for-web-design.mdx
│       │   │   ├── component-libraries.mdx
│       │   │   ├── component-library-examples.mdx
│       │   │   ├── cool-css-animations.mdx
│       │   │   ├── cool-react-components.mdx
│       │   │   ├── create-next-js-app.mdx
│       │   │   ├── create-nextjs-app.mdx
│       │   │   ├── create-react-component-library.mdx
│       │   │   ├── creating-next-js-app.mdx
│       │   │   ├── creative-landing-page-design.mdx
│       │   │   ├── css-animation-on-scroll.mdx
│       │   │   ├── css-buttons-hover.mdx
│       │   │   ├── css-loader-animation.mdx
│       │   │   ├── css-loading-animation.mdx
│       │   │   ├── cta-design.mdx
│       │   │   ├── dashboard-design-ui.mdx
│       │   │   ├── disable-textarea-resize.mdx
│       │   │   ├── drop-down-menu-in-js.mdx
│       │   │   ├── dropdown-in-react-js.mdx
│       │   │   ├── faq-template.mdx
│       │   │   ├── framer-motion-react.mdx
│       │   │   ├── free-react-components.mdx
│       │   │   ├── hero-section-design.mdx
│       │   │   ├── how-to-add-animation-to-website.mdx
│       │   │   ├── how-to-build-a-landing-page.mdx
│       │   │   ├── how-to-choose-tech-stack.mdx
│       │   │   ├── how-to-create-a-landing-page.mdx
│       │   │   ├── how-to-create-drop-down-menu.mdx
│       │   │   ├── how-to-create-navigation-bar-in-html.mdx
│       │   │   ├── how-to-design-a-landing-page.mdx
│       │   │   ├── how-to-display-testimonials-on-website.mdx
│       │   │   ├── how-to-improve-website-conversion-rates.mdx
│       │   │   ├── how-to-improve-website-loading-speed.mdx
│       │   │   ├── how-to-improve-website-performance.mdx
│       │   │   ├── how-to-learn-react.mdx
│       │   │   ├── how-to-make-an-animated-website.mdx
│       │   │   ├── how-to-make-an-interactive-website.mdx
│       │   │   ├── how-to-make-backgrounds-for-animation.mdx
│       │   │   ├── how-to-optimize-images-for-web.mdx
│       │   │   ├── infinite-scroll-react.mdx
│       │   │   ├── install-tailwind-css.mdx
│       │   │   ├── install-tailwind-react.mdx
│       │   │   ├── installing-tailwind-css.mdx
│       │   │   ├── interactive-landing-page.mdx
│       │   │   ├── landing-page-call-to-action.mdx
│       │   │   ├── landing-page-copywriting.mdx
│       │   │   ├── landing-page-design-templates.mdx
│       │   │   ├── landing-page-examples.mdx
│       │   │   ├── landing-page-sections.mdx
│       │   │   ├── landing-page-ui.mdx
│       │   │   ├── mantine-vs-chakra.mdx
│       │   │   ├── material-ui-alternatives.mdx
│       │   │   ├── material-ui-react.mdx
│       │   │   ├── material-ui-vs-joy-ui.mdx
│       │   │   ├── mui-box.mdx
│       │   │   ├── mui-card.mdx
│       │   │   ├── mui-react.mdx
│       │   │   ├── mui-table.mdx
│       │   │   ├── mui-transitions.mdx
│       │   │   ├── navbar-in-react-js.mdx
│       │   │   ├── navbar-react-js.mdx
│       │   │   ├── navigation-bar-for-website.mdx
│       │   │   ├── next-js-app.mdx
│       │   │   ├── next-js-create-app.mdx
│       │   │   ├── next-js-getting-started.mdx
│       │   │   ├── next-js-layout.mdx
│       │   │   ├── next-js-project-structure.mdx
│       │   │   ├── next-js-tailwind.mdx
│       │   │   ├── next-js.mdx
│       │   │   ├── nextjs-landing-page.mdx
│       │   │   ├── nextjs-portfolio-template.mdx
│       │   │   ├── nextjs-website-template.mdx
│       │   │   ├── nextjs.mdx
│       │   │   ├── portfolio-landing-page.mdx
│       │   │   ├── pricing-page-examples.mdx
│       │   │   ├── react-animation-examples.mdx
│       │   │   ├── react-animation-libraries.mdx
│       │   │   ├── react-best-practices.mdx
│       │   │   ├── react-bootstrap.mdx
│       │   │   ├── react-component-best-practices.mdx
│       │   │   ├── react-css-framework.mdx
│       │   │   ├── react-design-patterns.mdx
│       │   │   ├── react-frameworks.mdx
│       │   │   ├── react-header.mdx
│       │   │   ├── react-hero-component.mdx
│       │   │   ├── react-infinite-scroll.mdx
│       │   │   ├── react-js-file-upload.mdx
│       │   │   ├── react-js-form-validation.mdx
│       │   │   ├── react-js-navbar.mdx
│       │   │   ├── react-js-navigation-bar.mdx
│       │   │   ├── react-landing-page.mdx
│       │   │   ├── react-libraries.mdx
│       │   │   ├── react-native-libraries.mdx
│       │   │   ├── react-portfolio-template.mdx
│       │   │   ├── react-projects-for-beginners.mdx
│       │   │   ├── react-tips.mdx
│       │   │   ├── react-ui-framework.mdx
│       │   │   ├── react-ux.mdx
│       │   │   ├── responsive-web-design-templates.mdx
│       │   │   ├── saas-landing-page-best-practices.mdx
│       │   │   ├── search-input-with-icon.mdx
│       │   │   ├── semantic-ui-vs-material-ui.mdx
│       │   │   ├── shadcn-ui.mdx
│       │   │   ├── sidebar-for-website.mdx
│       │   │   ├── social-proof-on-website.mdx
│       │   │   ├── startup-landing-page.mdx
│       │   │   ├── tailwind-border-radius.mdx
│       │   │   ├── tailwind-cdn-html.mdx
│       │   │   ├── tailwind-css-button.mdx
│       │   │   ├── tailwind-css-component-library.mdx
│       │   │   ├── tailwind-css-grid.mdx
│       │   │   ├── tailwind-css-install.mdx
│       │   │   ├── tailwind-css-react.mdx
│       │   │   ├── tailwind-css-template.mdx
│       │   │   ├── tailwind-css-templates-free.mdx
│       │   │   ├── tailwind-css-themes.mdx
│       │   │   ├── tailwind-dark-mode.mdx
│       │   │   ├── tailwind-font-size.mdx
│       │   │   ├── tailwind-landing-page-templates.mdx
│       │   │   ├── tailwind-landing-page.mdx
│       │   │   ├── tailwind-portfolio-template.mdx
│       │   │   ├── tailwind-vs-bootstrap.mdx
│       │   │   ├── text-animation-css.mdx
│       │   │   ├── text-loading-bar.mdx
│       │   │   ├── time-and-date-picker.mdx
│       │   │   ├── typescript-vs-javascript-differences.mdx
│       │   │   ├── ui-animation.mdx
│       │   │   ├── ui-card-design.mdx
│       │   │   ├── ui-framework-for-react.mdx
│       │   │   ├── ui-frameworks.mdx
│       │   │   ├── ui-libraries.mdx
│       │   │   ├── user-interface-design-patterns.mdx
│       │   │   ├── user-interface-themes.mdx
│       │   │   ├── visual-hierarchy-in-web-design.mdx
│       │   │   ├── waitlist-landing-page.mdx
│       │   │   ├── web-animation-tools.mdx
│       │   │   ├── web-application-design.mdx
│       │   │   ├── web-design-best-practices.mdx
│       │   │   ├── web-design-trends.mdx
│       │   │   ├── website-animation-examples.mdx
│       │   │   ├── website-footer.mdx
│       │   │   ├── website-header-examples.mdx
│       │   │   ├── website-logo-examples.mdx
│       │   │   ├── websites-with-great-ui.mdx
│       │   │   ├── what-are-ui-components.mdx
│       │   │   ├── what-is-a-component-library.mdx
│       │   │   ├── what-is-mobile-first-design.mdx
│       │   │   └── what-is-nextjs.mdx
│       │   ├── docs/
│       │   │   ├── components/
│       │   │   │   ├── android.mdx
│       │   │   │   ├── animated-beam.mdx
│       │   │   │   ├── animated-circular-progress-bar.mdx
│       │   │   │   ├── animated-gradient-text.mdx
│       │   │   │   ├── animated-grid-pattern.mdx
│       │   │   │   ├── animated-list.mdx
│       │   │   │   ├── animated-shiny-text.mdx
│       │   │   │   ├── animated-theme-toggler.mdx
│       │   │   │   ├── aurora-text.mdx
│       │   │   │   ├── avatar-circles.mdx
│       │   │   │   ├── bento-grid.mdx
│       │   │   │   ├── blur-fade.mdx
│       │   │   │   ├── border-beam.mdx
│       │   │   │   ├── code-comparison.mdx
│       │   │   │   ├── comic-text.mdx
│       │   │   │   ├── confetti.mdx
│       │   │   │   ├── cool-mode.mdx
│       │   │   │   ├── dock.mdx
│       │   │   │   ├── dot-pattern.mdx
│       │   │   │   ├── dotted-map.mdx
│       │   │   │   ├── file-tree.mdx
│       │   │   │   ├── flickering-grid.mdx
│       │   │   │   ├── globe.mdx
│       │   │   │   ├── grid-pattern.mdx
│       │   │   │   ├── hero-video-dialog.mdx
│       │   │   │   ├── highlighter.mdx
│       │   │   │   ├── hyper-text.mdx
│       │   │   │   ├── icon-cloud.mdx
│       │   │   │   ├── index.mdx
│       │   │   │   ├── interactive-grid-pattern.mdx
│       │   │   │   ├── interactive-hover-button.mdx
│       │   │   │   ├── iphone.mdx
│       │   │   │   ├── lens.mdx
│       │   │   │   ├── light-rays.mdx
│       │   │   │   ├── line-shadow-text.mdx
│       │   │   │   ├── magic-card.mdx
│       │   │   │   ├── marquee.mdx
│       │   │   │   ├── meteors.mdx
│       │   │   │   ├── morphing-text.mdx
│       │   │   │   ├── neon-gradient-card.mdx
│       │   │   │   ├── number-ticker.mdx
│       │   │   │   ├── orbiting-circles.mdx
│       │   │   │   ├── particles.mdx
│       │   │   │   ├── pixel-image.mdx
│       │   │   │   ├── pointer.mdx
│       │   │   │   ├── progressive-blur.mdx
│       │   │   │   ├── pulsating-button.mdx
│       │   │   │   ├── rainbow-button.mdx
│       │   │   │   ├── retro-grid.mdx
│       │   │   │   ├── ripple-button.mdx
│       │   │   │   ├── ripple.mdx
│       │   │   │   ├── safari.mdx
│       │   │   │   ├── scroll-based-velocity.mdx
│       │   │   │   ├── scroll-progress.mdx
│       │   │   │   ├── shimmer-button.mdx
│       │   │   │   ├── shine-border.mdx
│       │   │   │   ├── shiny-button.mdx
│       │   │   │   ├── smooth-cursor.mdx
│       │   │   │   ├── sparkles-text.mdx
│       │   │   │   ├── spinning-text.mdx
│       │   │   │   ├── striped-pattern.mdx
│       │   │   │   ├── terminal.mdx
│       │   │   │   ├── text-animate.mdx
│       │   │   │   ├── text-reveal.mdx
│       │   │   │   ├── tweet-card.mdx
│       │   │   │   ├── typing-animation.mdx
│       │   │   │   ├── video-text.mdx
│       │   │   │   ├── warp-background.mdx
│       │   │   │   └── word-rotate.mdx
│       │   │   ├── index.mdx
│       │   │   ├── installation/
│       │   │   │   └── index.mdx
│       │   │   ├── legacy.mdx
│       │   │   ├── mcp.mdx
│       │   │   ├── story.mdx
│       │   │   └── templates/
│       │   │       ├── agent.mdx
│       │   │       ├── blog.mdx
│       │   │       ├── changelog.mdx
│       │   │       ├── codeforge.mdx
│       │   │       ├── devtool.mdx
│       │   │       ├── mobile.mdx
│       │   │       ├── portfolio.mdx
│       │   │       ├── saas.mdx
│       │   │       └── startup.mdx
│       │   └── showcase/
│       │       ├── anara.mdx
│       │       ├── anisvsc.mdx
│       │       ├── aomni.mdx
│       │       ├── aryankarma.mdx
│       │       ├── cognosys.mdx
│       │       ├── elhussary.mdx
│       │       ├── gitme.mdx
│       │       ├── guarahooks.mdx
│       │       ├── infisical.mdx
│       │       ├── langfuse.mdx
│       │       ├── llmreport.mdx
│       │       ├── lyra.mdx
│       │       ├── million.mdx
│       │       ├── nativeexpress.mdx
│       │       ├── pulpsense.mdx
│       │       ├── querylab.mdx
│       │       ├── roammoon.mdx
│       │       ├── sherpa.mdx
│       │       ├── undrstnd.mdx
│       │       ├── writora.mdx
│       │       ├── zen-browser.mdx
│       │       └── zzzzshawn.mdx
│       ├── eslint.config.mjs
│       ├── hooks/
│       │   ├── use-config.ts
│       │   ├── use-copy-to-clipboard.ts
│       │   ├── use-is-mac.ts
│       │   ├── use-meta-color.ts
│       │   ├── use-mobile.ts
│       │   ├── use-mounted.ts
│       │   └── use-mutation-observer.ts
│       ├── lib/
│       │   ├── docs.ts
│       │   ├── events.ts
│       │   ├── fonts.ts
│       │   ├── github.ts
│       │   ├── highlight-code.ts
│       │   ├── posthog.ts
│       │   ├── registry.ts
│       │   ├── rehype-component.ts
│       │   ├── rehype-npm-command.ts
│       │   ├── source.ts
│       │   ├── types.ts
│       │   └── utils.ts
│       ├── mdx-components.tsx
│       ├── middleware.ts
│       ├── next.config.mjs
│       ├── package.json
│       ├── postcss.config.mjs
│       ├── public/
│       │   ├── llms-full.txt
│       │   ├── llms.txt
│       │   ├── mcp.json
│       │   ├── r/
│       │   │   ├── android-demo-2.json
│       │   │   ├── android-demo-3.json
│       │   │   ├── android-demo.json
│       │   │   ├── android.json
│       │   │   ├── animated-beam-bidirectional.json
│       │   │   ├── animated-beam-demo.json
│       │   │   ├── animated-beam-multiple-inputs.json
│       │   │   ├── animated-beam-multiple-outputs.json
│       │   │   ├── animated-beam-unidirectional.json
│       │   │   ├── animated-beam.json
│       │   │   ├── animated-circular-progress-bar-demo.json
│       │   │   ├── animated-circular-progress-bar.json
│       │   │   ├── animated-gradient-text-demo-2.json
│       │   │   ├── animated-gradient-text-demo.json
│       │   │   ├── animated-gradient-text.json
│       │   │   ├── animated-grid-pattern-demo.json
│       │   │   ├── animated-grid-pattern.json
│       │   │   ├── animated-list-demo.json
│       │   │   ├── animated-list.json
│       │   │   ├── animated-shiny-text-demo.json
│       │   │   ├── animated-shiny-text.json
│       │   │   ├── animated-theme-toggler-demo.json
│       │   │   ├── animated-theme-toggler.json
│       │   │   ├── aurora-text-demo.json
│       │   │   ├── aurora-text.json
│       │   │   ├── avatar-circles-demo.json
│       │   │   ├── avatar-circles.json
│       │   │   ├── bento-demo-vertical.json
│       │   │   ├── bento-demo.json
│       │   │   ├── bento-grid.json
│       │   │   ├── blur-fade-demo.json
│       │   │   ├── blur-fade-text-demo.json
│       │   │   ├── blur-fade.json
│       │   │   ├── border-beam-demo-2.json
│       │   │   ├── border-beam-demo-3.json
│       │   │   ├── border-beam-demo-4.json
│       │   │   ├── border-beam-demo.json
│       │   │   ├── border-beam.json
│       │   │   ├── client-tweet-card.json
│       │   │   ├── code-comparison-demo.json
│       │   │   ├── code-comparison.json
│       │   │   ├── comic-text-demo.json
│       │   │   ├── comic-text.json
│       │   │   ├── confetti-basic-cannon.json
│       │   │   ├── confetti-custom-shapes.json
│       │   │   ├── confetti-demo.json
│       │   │   ├── confetti-emoji.json
│       │   │   ├── confetti-fireworks.json
│       │   │   ├── confetti-random-direction.json
│       │   │   ├── confetti-side-cannons.json
│       │   │   ├── confetti-stars.json
│       │   │   ├── confetti.json
│       │   │   ├── cool-mode-custom.json
│       │   │   ├── cool-mode-demo.json
│       │   │   ├── cool-mode.json
│       │   │   ├── dock-demo-2.json
│       │   │   ├── dock-demo-3.json
│       │   │   ├── dock-demo.json
│       │   │   ├── dock.json
│       │   │   ├── dot-pattern-demo.json
│       │   │   ├── dot-pattern-linear-gradient.json
│       │   │   ├── dot-pattern-with-glow-effect.json
│       │   │   ├── dot-pattern.json
│       │   │   ├── dotted-map-demo-2.json
│       │   │   ├── dotted-map-demo-3.json
│       │   │   ├── dotted-map-demo.json
│       │   │   ├── dotted-map.json
│       │   │   ├── file-tree-demo.json
│       │   │   ├── file-tree.json
│       │   │   ├── flickering-grid-demo.json
│       │   │   ├── flickering-grid-rounded-demo.json
│       │   │   ├── flickering-grid.json
│       │   │   ├── globe-demo.json
│       │   │   ├── globe.json
│       │   │   ├── grid-pattern-dashed.json
│       │   │   ├── grid-pattern-demo.json
│       │   │   ├── grid-pattern-linear-gradient.json
│       │   │   ├── grid-pattern.json
│       │   │   ├── hero-video-dialog-demo-top-in-bottom-out.json
│       │   │   ├── hero-video-dialog-demo.json
│       │   │   ├── hero-video-dialog.json
│       │   │   ├── highlighter-demo.json
│       │   │   ├── highlighter.json
│       │   │   ├── hyper-text-demo.json
│       │   │   ├── hyper-text.json
│       │   │   ├── icon-cloud-demo-2.json
│       │   │   ├── icon-cloud-demo-3.json
│       │   │   ├── icon-cloud-demo.json
│       │   │   ├── icon-cloud.json
│       │   │   ├── index.json
│       │   │   ├── interactive-grid-pattern-demo-2.json
│       │   │   ├── interactive-grid-pattern-demo.json
│       │   │   ├── interactive-grid-pattern.json
│       │   │   ├── interactive-hover-button-demo.json
│       │   │   ├── interactive-hover-button.json
│       │   │   ├── iphone-demo-2.json
│       │   │   ├── iphone-demo-3.json
│       │   │   ├── iphone-demo.json
│       │   │   ├── iphone.json
│       │   │   ├── lens-demo-2.json
│       │   │   ├── lens-demo-3.json
│       │   │   ├── lens-demo.json
│       │   │   ├── lens.json
│       │   │   ├── light-rays-demo.json
│       │   │   ├── light-rays.json
│       │   │   ├── line-shadow-text-demo.json
│       │   │   ├── line-shadow-text.json
│       │   │   ├── magic-card-demo-2.json
│       │   │   ├── magic-card-demo.json
│       │   │   ├── magic-card.json
│       │   │   ├── marquee-3d.json
│       │   │   ├── marquee-demo-vertical.json
│       │   │   ├── marquee-demo.json
│       │   │   ├── marquee-logos.json
│       │   │   ├── marquee.json
│       │   │   ├── meteors-demo.json
│       │   │   ├── meteors.json
│       │   │   ├── morphing-text-demo.json
│       │   │   ├── morphing-text.json
│       │   │   ├── neon-gradient-card-demo.json
│       │   │   ├── neon-gradient-card.json
│       │   │   ├── number-ticker-decimal-demo.json
│       │   │   ├── number-ticker-demo-2.json
│       │   │   ├── number-ticker-demo.json
│       │   │   ├── number-ticker.json
│       │   │   ├── orbiting-circles-demo.json
│       │   │   ├── orbiting-circles.json
│       │   │   ├── particles-demo.json
│       │   │   ├── particles.json
│       │   │   ├── pixel-image-demo.json
│       │   │   ├── pixel-image.json
│       │   │   ├── pointer-demo-1.json
│       │   │   ├── pointer.json
│       │   │   ├── progressive-blur-demo.json
│       │   │   ├── progressive-blur.json
│       │   │   ├── pulsating-button-demo.json
│       │   │   ├── pulsating-button.json
│       │   │   ├── rainbow-button-demo-2.json
│       │   │   ├── rainbow-button-demo.json
│       │   │   ├── rainbow-button.json
│       │   │   ├── registry.json
│       │   │   ├── retro-grid-demo.json
│       │   │   ├── retro-grid.json
│       │   │   ├── ripple-button-demo.json
│       │   │   ├── ripple-button.json
│       │   │   ├── ripple-demo.json
│       │   │   ├── ripple.json
│       │   │   ├── safari-demo-2.json
│       │   │   ├── safari-demo-3.json
│       │   │   ├── safari-demo-4.json
│       │   │   ├── safari-demo.json
│       │   │   ├── safari.json
│       │   │   ├── scroll-based-velocity-demo.json
│       │   │   ├── scroll-based-velocity-images-demo.json
│       │   │   ├── scroll-based-velocity.json
│       │   │   ├── scroll-progress-demo.json
│       │   │   ├── scroll-progress.json
│       │   │   ├── shimmer-button-demo.json
│       │   │   ├── shimmer-button.json
│       │   │   ├── shine-border-demo-2.json
│       │   │   ├── shine-border-demo.json
│       │   │   ├── shine-border.json
│       │   │   ├── shiny-button-demo.json
│       │   │   ├── shiny-button.json
│       │   │   ├── smooth-cursor-demo.json
│       │   │   ├── smooth-cursor.json
│       │   │   ├── sparkles-text-demo.json
│       │   │   ├── sparkles-text.json
│       │   │   ├── spinning-text-demo-2.json
│       │   │   ├── spinning-text-demo.json
│       │   │   ├── spinning-text.json
│       │   │   ├── striped-pattern-colored.json
│       │   │   ├── striped-pattern-dashed.json
│       │   │   ├── striped-pattern-demo.json
│       │   │   ├── striped-pattern-left.json
│       │   │   ├── striped-pattern-right.json
│       │   │   ├── striped-pattern.json
│       │   │   ├── terminal-demo-2.json
│       │   │   ├── terminal-demo.json
│       │   │   ├── terminal.json
│       │   │   ├── text-animate-demo-2.json
│       │   │   ├── text-animate-demo-3.json
│       │   │   ├── text-animate-demo-4.json
│       │   │   ├── text-animate-demo-5.json
│       │   │   ├── text-animate-demo-6.json
│       │   │   ├── text-animate-demo-7.json
│       │   │   ├── text-animate-demo-8.json
│       │   │   ├── text-animate-demo-9.json
│       │   │   ├── text-animate-demo.json
│       │   │   ├── text-animate.json
│       │   │   ├── text-reveal-demo.json
│       │   │   ├── text-reveal.json
│       │   │   ├── theme-toggler-demo.json
│       │   │   ├── tweet-card-demo.json
│       │   │   ├── tweet-card-images.json
│       │   │   ├── tweet-card-meta-preview.json
│       │   │   ├── tweet-card.json
│       │   │   ├── typing-animation-demo-2.json
│       │   │   ├── typing-animation-demo-3.json
│       │   │   ├── typing-animation-demo-4.json
│       │   │   ├── typing-animation-demo-5.json
│       │   │   ├── typing-animation-demo-6.json
│       │   │   ├── typing-animation-demo-7.json
│       │   │   ├── typing-animation-demo-8.json
│       │   │   ├── typing-animation-demo.json
│       │   │   ├── typing-animation.json
│       │   │   ├── utils.json
│       │   │   ├── video-text-demo.json
│       │   │   ├── video-text.json
│       │   │   ├── warp-background-demo.json
│       │   │   ├── warp-background.json
│       │   │   ├── word-rotate-demo.json
│       │   │   └── word-rotate.json
│       │   ├── registry.json
│       │   └── site.webmanifest
│       ├── registry/
│       │   ├── __index__.tsx
│       │   ├── example/
│       │   │   ├── android-demo-2.tsx
│       │   │   ├── android-demo-3.tsx
│       │   │   ├── android-demo.tsx
│       │   │   ├── animated-beam-bidirectional.tsx
│       │   │   ├── animated-beam-demo.tsx
│       │   │   ├── animated-beam-multiple-inputs.tsx
│       │   │   ├── animated-beam-multiple-outputs.tsx
│       │   │   ├── animated-beam-unidirectional.tsx
│       │   │   ├── animated-circular-progress-bar-demo.tsx
│       │   │   ├── animated-gradient-text-demo-2.tsx
│       │   │   ├── animated-gradient-text-demo.tsx
│       │   │   ├── animated-grid-pattern-demo.tsx
│       │   │   ├── animated-list-demo.tsx
│       │   │   ├── animated-shiny-text-demo.tsx
│       │   │   ├── animated-theme-toggler-demo.tsx
│       │   │   ├── aurora-text-demo.tsx
│       │   │   ├── avatar-circles-demo.tsx
│       │   │   ├── bento-demo-vertical.tsx
│       │   │   ├── bento-demo.tsx
│       │   │   ├── blur-fade-demo.tsx
│       │   │   ├── blur-fade-text-demo.tsx
│       │   │   ├── border-beam-demo-2.tsx
│       │   │   ├── border-beam-demo-3.tsx
│       │   │   ├── border-beam-demo-4.tsx
│       │   │   ├── border-beam-demo.tsx
│       │   │   ├── code-comparison-demo.tsx
│       │   │   ├── comic-text-demo.tsx
│       │   │   ├── confetti-basic-cannon.tsx
│       │   │   ├── confetti-custom-shapes.tsx
│       │   │   ├── confetti-demo.tsx
│       │   │   ├── confetti-emoji.tsx
│       │   │   ├── confetti-fireworks.tsx
│       │   │   ├── confetti-random-direction.tsx
│       │   │   ├── confetti-side-cannons.tsx
│       │   │   ├── confetti-stars.tsx
│       │   │   ├── cool-mode-custom.tsx
│       │   │   ├── cool-mode-demo.tsx
│       │   │   ├── dock-demo-2.tsx
│       │   │   ├── dock-demo-3.tsx
│       │   │   ├── dock-demo.tsx
│       │   │   ├── dot-pattern-demo.tsx
│       │   │   ├── dot-pattern-linear-gradient.tsx
│       │   │   ├── dot-pattern-with-glow-effect.tsx
│       │   │   ├── dotted-map-demo-2.tsx
│       │   │   ├── dotted-map-demo-3.tsx
│       │   │   ├── dotted-map-demo.tsx
│       │   │   ├── file-tree-demo.tsx
│       │   │   ├── flickering-grid-demo.tsx
│       │   │   ├── flickering-grid-rounded-demo.tsx
│       │   │   ├── globe-demo.tsx
│       │   │   ├── grid-pattern-dashed.tsx
│       │   │   ├── grid-pattern-demo.tsx
│       │   │   ├── grid-pattern-linear-gradient.tsx
│       │   │   ├── hero-video-dialog-demo-top-in-bottom-out.tsx
│       │   │   ├── hero-video-dialog-demo.tsx
│       │   │   ├── highlighter-demo.tsx
│       │   │   ├── hyper-text-demo.tsx
│       │   │   ├── icon-cloud-demo-2.tsx
│       │   │   ├── icon-cloud-demo-3.tsx
│       │   │   ├── icon-cloud-demo.tsx
│       │   │   ├── interactive-grid-pattern-demo-2.tsx
│       │   │   ├── interactive-grid-pattern-demo.tsx
│       │   │   ├── interactive-hover-button-demo.tsx
│       │   │   ├── iphone-demo-2.tsx
│       │   │   ├── iphone-demo-3.tsx
│       │   │   ├── iphone-demo.tsx
│       │   │   ├── lens-demo-2.tsx
│       │   │   ├── lens-demo-3.tsx
│       │   │   ├── lens-demo.tsx
│       │   │   ├── light-rays-demo.tsx
│       │   │   ├── line-shadow-text-demo.tsx
│       │   │   ├── magic-card-demo.tsx
│       │   │   ├── magic-card-demo2.tsx
│       │   │   ├── marquee-3d.tsx
│       │   │   ├── marquee-demo-vertical.tsx
│       │   │   ├── marquee-demo.tsx
│       │   │   ├── marquee-logos.tsx
│       │   │   ├── meteors-demo.tsx
│       │   │   ├── morphing-text-demo.tsx
│       │   │   ├── neon-gradient-card-demo.tsx
│       │   │   ├── number-ticker-decimal-demo.tsx
│       │   │   ├── number-ticker-demo-2.tsx
│       │   │   ├── number-ticker-demo.tsx
│       │   │   ├── orbiting-circles-demo.tsx
│       │   │   ├── particles-demo.tsx
│       │   │   ├── pixel-image-demo.tsx
│       │   │   ├── pointer-demo-1.tsx
│       │   │   ├── progressive-blur-demo.tsx
│       │   │   ├── pulsating-button-demo.tsx
│       │   │   ├── rainbow-button-demo-2.tsx
│       │   │   ├── rainbow-button-demo.tsx
│       │   │   ├── retro-grid-demo.tsx
│       │   │   ├── ripple-button-demo.tsx
│       │   │   ├── ripple-demo.tsx
│       │   │   ├── safari-demo-2.tsx
│       │   │   ├── safari-demo-3.tsx
│       │   │   ├── safari-demo-4.tsx
│       │   │   ├── safari-demo.tsx
│       │   │   ├── scroll-based-velocity-demo.tsx
│       │   │   ├── scroll-based-velocity-images-demo.tsx
│       │   │   ├── scroll-progress-demo.tsx
│       │   │   ├── shimmer-button-demo.tsx
│       │   │   ├── shine-border-demo-2.tsx
│       │   │   ├── shine-border-demo.tsx
│       │   │   ├── shiny-button-demo.tsx
│       │   │   ├── smooth-cursor-demo.tsx
│       │   │   ├── sparkles-text-demo.tsx
│       │   │   ├── spinning-text-demo-2.tsx
│       │   │   ├── spinning-text-demo.tsx
│       │   │   ├── striped-pattern-dashed.tsx
│       │   │   ├── striped-pattern-demo.tsx
│       │   │   ├── striped-pattern-right.tsx
│       │   │   ├── terminal-demo-2.tsx
│       │   │   ├── terminal-demo.tsx
│       │   │   ├── text-animate-demo-2.tsx
│       │   │   ├── text-animate-demo-3.tsx
│       │   │   ├── text-animate-demo-4.tsx
│       │   │   ├── text-animate-demo-5.tsx
│       │   │   ├── text-animate-demo-6.tsx
│       │   │   ├── text-animate-demo-7.tsx
│       │   │   ├── text-animate-demo-8.tsx
│       │   │   ├── text-animate-demo-9.tsx
│       │   │   ├── text-animate-demo.tsx
│       │   │   ├── text-reveal-demo.tsx
│       │   │   ├── tweet-card-demo.tsx
│       │   │   ├── tweet-card-images.tsx
│       │   │   ├── tweet-card-meta-preview.tsx
│       │   │   ├── typing-animation-demo-2.tsx
│       │   │   ├── typing-animation-demo-3.tsx
│       │   │   ├── typing-animation-demo-4.tsx
│       │   │   ├── typing-animation-demo-5.tsx
│       │   │   ├── typing-animation-demo-6.tsx
│       │   │   ├── typing-animation-demo-7.tsx
│       │   │   ├── typing-animation-demo-8.tsx
│       │   │   ├── typing-animation-demo.tsx
│       │   │   ├── video-text-demo.tsx
│       │   │   ├── warp-background-demo.tsx
│       │   │   └── word-rotate-demo.tsx
│       │   ├── index.ts
│       │   ├── lib/
│       │   │   └── utils.ts
│       │   ├── magicui/
│       │   │   ├── android.tsx
│       │   │   ├── animated-beam.tsx
│       │   │   ├── animated-circular-progress-bar.tsx
│       │   │   ├── animated-gradient-text.tsx
│       │   │   ├── animated-grid-pattern.tsx
│       │   │   ├── animated-list.tsx
│       │   │   ├── animated-shiny-text.tsx
│       │   │   ├── animated-subscribe-button.tsx
│       │   │   ├── animated-theme-toggler.tsx
│       │   │   ├── aurora-text.tsx
│       │   │   ├── avatar-circles.tsx
│       │   │   ├── bento-grid.tsx
│       │   │   ├── blur-fade.tsx
│       │   │   ├── border-beam.tsx
│       │   │   ├── client-tweet-card.tsx
│       │   │   ├── code-comparison.tsx
│       │   │   ├── comic-text.tsx
│       │   │   ├── confetti.tsx
│       │   │   ├── cool-mode.tsx
│       │   │   ├── dock.tsx
│       │   │   ├── dot-pattern.tsx
│       │   │   ├── dotted-map.tsx
│       │   │   ├── file-tree.tsx
│       │   │   ├── flickering-grid.tsx
│       │   │   ├── globe.tsx
│       │   │   ├── grid-pattern.tsx
│       │   │   ├── hero-video-dialog.tsx
│       │   │   ├── highlighter.tsx
│       │   │   ├── hyper-text.tsx
│       │   │   ├── icon-cloud.tsx
│       │   │   ├── interactive-grid-pattern.tsx
│       │   │   ├── interactive-hover-button.tsx
│       │   │   ├── iphone.tsx
│       │   │   ├── lens.tsx
│       │   │   ├── light-rays.tsx
│       │   │   ├── line-shadow-text.tsx
│       │   │   ├── magic-card.tsx
│       │   │   ├── marquee.tsx
│       │   │   ├── meteors.tsx
│       │   │   ├── morphing-text.tsx
│       │   │   ├── neon-gradient-card.tsx
│       │   │   ├── number-ticker.tsx
│       │   │   ├── orbiting-circles.tsx
│       │   │   ├── particles.tsx
│       │   │   ├── pixel-image.tsx
│       │   │   ├── pointer.tsx
│       │   │   ├── progressive-blur.tsx
│       │   │   ├── pulsating-button.tsx
│       │   │   ├── rainbow-button.tsx
│       │   │   ├── retro-grid.tsx
│       │   │   ├── ripple-button.tsx
│       │   │   ├── ripple.tsx
│       │   │   ├── safari.tsx
│       │   │   ├── scroll-based-velocity.tsx
│       │   │   ├── scroll-progress.tsx
│       │   │   ├── shimmer-button.tsx
│       │   │   ├── shine-border.tsx
│       │   │   ├── shiny-button.tsx
│       │   │   ├── smooth-cursor.tsx
│       │   │   ├── sparkles-text.tsx
│       │   │   ├── spinning-text.tsx
│       │   │   ├── striped-pattern.tsx
│       │   │   ├── terminal.tsx
│       │   │   ├── text-animate.tsx
│       │   │   ├── text-reveal.tsx
│       │   │   ├── tweet-card.tsx
│       │   │   ├── typing-animation.tsx
│       │   │   ├── video-text.tsx
│       │   │   ├── warp-background.tsx
│       │   │   └── word-rotate.tsx
│       │   ├── registry-examples.ts
│       │   ├── registry-lib.ts
│       │   └── registry-ui.ts
│       ├── registry.json
│       ├── scripts/
│       │   ├── build-registry.mts
│       │   └── sync-example-registry-dependencies.mts
│       ├── source.config.ts
│       ├── styles/
│       │   └── globals.css
│       ├── tsconfig.json
│       ├── tsconfig.scripts.json
│       └── types/
│           ├── index.d.ts
│           └── unist.ts
├── lefthook.yml
├── package.json
├── pnpm-workspace.yaml
├── registry.json
├── skills/
│   └── magic-ui/
│       ├── SKILL.md
│       └── references/
│           ├── components.md
│           └── recipes.md
└── turbo.json

================================================
FILE CONTENTS
================================================

================================================
FILE: .cursor/mcp.json
================================================
{
  "mcpServers": {
    "shadcn": {
      "command": "npx",
      "args": ["shadcn@latest", "mcp"]
    }
  }
}


================================================
FILE: .editorconfig
================================================
# editorconfig.org
root = true

[*]
charset = utf-8
end_of_line = lf
indent_size = 2
indent_style = space
insert_final_newline = true
trim_trailing_whitespace = true

================================================
FILE: .gitattributes
================================================
* text=auto eol=lf

================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yml
================================================
name: "Bug report"
description: Report an issue with Magic UI
title: "[bug]: "
labels: ["bug"]
body:
  - type: markdown
    attributes:
      value: |
        ### Thanks for taking the time to create a bug report. Please search open/closed issues before submitting, as the issue may have already been reported/addressed.

  - type: markdown
    attributes:
      value: |
        #### If you aren't sure this is a bug or not, please open a discussion instead:
        - [Discussions](https://github.com/magicuidesign/magicui/discussions/new?category=general)

  - type: textarea
    id: bug-description
    attributes:
      label: Describe the bug
      description: A clear and concise description of what the bug is. If you intend to submit a PR for this issue, tell us how in the description. Thanks!
      placeholder: Bug description
    validations:
      required: true

  - type: input
    id: components-affected
    attributes:
      label: Affected component/components
      description: Which Magic UI components are affected?
      placeholder: ex. Rainbow Button, Terminal...
    validations:
      required: true

  - type: textarea
    id: reproduction
    attributes:
      label: How to reproduce
      description: A step-by-step description of how to reproduce the bug.
      placeholder: |
        1. Go to '...'
        2. Click on '....'
        3. See error
    validations:
      required: true

  - type: input
    id: codesandbox-stackblitz
    attributes:
      label: Codesandbox/StackBlitz link
      description: |
        A link to a CodeSandbox or StackBlitz that includes a minimal reproduction of the problem. In rare cases when not applicable, you can link to a GitHub repository that we can easily run to recreate the issue. If a report is vague and does not have a reproduction, it will be closed without warning. 

        > [!CAUTION]
        > If you skip this step, this issue might be **labeled** with `please add a reproduction` and **closed**.
    validations:
      required: false

  - type: textarea
    id: logs
    attributes:
      label: Logs
      description: "Please include browser console and server logs around the time this bug occurred. Optional if provided reproduction. Please try not to insert an image but copy paste the log text."
      render: bash

  - type: textarea
    id: system-info
    attributes:
      label: System Info
      description: Information about browsers, system or binaries that's relevant.
      render: bash
      placeholder: System, Binaries, Browsers
    validations:
      required: true

  - type: checkboxes
    id: terms
    attributes:
      label: Before submitting
      description: By submitting this issue, you agree to follow our [Contributing Guidelines](https://github.com/magicuidesign/magicui/blob/main/CONTRIBUTING.md).
      options:
        - label: I've made research efforts and searched the documentation
          required: true
        - label: I've searched for existing issues
          required: true


================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.yml
================================================
name: "Feature request"
description: Create a feature request for Magic UI
title: "[feat]: "
labels: ["area: request"]
body:
  - type: markdown
    attributes:
      value: |
        ### Thanks for taking the time to create a feature request! Please search open/closed issues before submitting, as the issue may have already been reported/addressed.

  - type: markdown
    attributes:
      value: |
        #### If you aren't sure this is a bug or not, please open a discussion instead:
        - [Discussions](https://github.com/magicuidesign/magicui/discussions/new?category=general)

  - type: textarea
    id: feature-description
    attributes:
      label: Feature description
      description: Tell us about your feature request
      placeholder: "I think this feature would be great because..."
      value: "Describe your feature request..."
    validations:
      required: true

  - type: input
    id: components-affected
    attributes:
      label: Affected component/components
      description: Is this feature request relevant to any of the already existing components?
      placeholder: ex. Button, Checkbox...
    validations:
      required: false

  - type: textarea
    id: context
    attributes:
      label: Additional Context
      description: Add any other context about the feature here.
      placeholder: ex. screenshots, Stack Overflow links, forum links, etc.
      value: "Additional details here..."
    validations:
      required: false

  - type: checkboxes
    id: terms
    attributes:
      label: Before submitting
      description: By submitting this issue, you agree to follow our [Contributing Guidelines](https://github.com/magicuidesign/magicui/blob/main/CONTRIBUTING.md).
      options:
        - label: I've made research efforts and searched the documentation
          required: true
        - label: I've searched for existing issues and PRs
          required: true


================================================
FILE: .github/PULL_REQUEST_TEMPLATE.md
================================================
## Description
<!-- Summarize what this PR changes in 2-4 lines. -->

## Changes
<!-- List concrete changes by item (e.g., feature, refactor, bug fix). -->

## Motivation
<!-- Briefly explain why this change is needed and what problem it solves. -->

## Breaking Changes
<!-- If this affects compatibility, describe impact and migration steps. If not, write None. -->

## Screenshots
<!-- For UI changes, attach Before/After screenshots and device/browser info. -->
<!-- Optional for UI changes -->
> Device / Browser / Viewport:

| Before | After |
| --- | --- |
|  |  |


================================================
FILE: .github/scripts/publish-articles.cjs
================================================
#!/usr/bin/env node
"use strict";

const fs = require("fs");
const path = require("path");
const yaml = require("js-yaml");

const payload = JSON.parse(fs.readFileSync("payload.json", "utf8"));
const articles = (payload && payload.data && payload.data.articles) || [];
if (!Array.isArray(articles) || articles.length === 0) process.exit(0);

const folder = path.join("apps", "www", "content", "blog");
fs.mkdirSync(folder, { recursive: true });

for (const a of articles) {
  const fmObj = {
    title: a.title || "",
    description: a.meta_description || "",
    image: a.image_url || "",
    author: "Dillion Verma",
    tags: Array.isArray(a.tags) ? a.tags : [],
    publishedOn: a.created_at || "",
    featured: true,
  };
  const fm =
    "---\n" + yaml.dump(fmObj, { noRefs: true, lineWidth: 0 }) + "---\n";
  const body = String(a.content_markdown || "");
  const file = path.join(folder, `${a.slug}.mdx`);
  fs.writeFileSync(file, fm + body, "utf8");
  console.log(`Wrote ${file}`);
}


================================================
FILE: .github/scripts/submit-sitemap.mjs
================================================
import { JWT } from "google-auth-library";
import { google } from "googleapis";

const { SITE_URL, SITEMAP_URL, GOOGLE_SEARCH_CONSOLE_JSON_KEY } = process.env;

if (!SITE_URL || !SITEMAP_URL || !GOOGLE_SEARCH_CONSOLE_JSON_KEY) {
  throw new Error("Missing required environment variables");
}

const keys = JSON.parse(
  Buffer.from(GOOGLE_SEARCH_CONSOLE_JSON_KEY, "base64").toString("utf-8"),
);

const client = new JWT({
  email: keys.client_email,
  key: keys.private_key,
  scopes: [
    "https://www.googleapis.com/auth/webmasters",
    "https://www.googleapis.com/auth/webmasters.readonly",
  ],
});

google.options({ auth: client });

const searchconsole = google.searchconsole("v1");

(async () => {
  try {
    await searchconsole.sitemaps.submit({
      feedpath: SITEMAP_URL,
      siteUrl: SITE_URL,
    });
  } catch (e) {
    console.log(e);
    process.exit(1);
  } finally {
    process.exit(0);
  }
})();


================================================
FILE: .github/workflows/code-check.yml
================================================
name: Code check

on:
  pull_request:
    branches: ["*"]

jobs:
  lint:
    runs-on: ubuntu-latest
    name: pnpm lint
    steps:
      - uses: actions/checkout@v6
        with:
          fetch-depth: 0

      - name: Install Node.js
        uses: actions/setup-node@v3
        with:
          node-version: 22

      - uses: pnpm/action-setup@v4
        name: Install pnpm
        id: pnpm-install
        with:
          version: 9.15.0
          run_install: false

      - name: Get pnpm store directory
        id: pnpm-cache
        run: |
          echo "pnpm_cache_dir=$(pnpm store path)" >> $GITHUB_OUTPUT
      - uses: actions/cache@v3
        name: Setup pnpm cache
        with:
          path: ${{ steps.pnpm-cache.outputs.pnpm_cache_dir }}
          key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
          restore-keys: |
            ${{ runner.os }}-pnpm-store-
      - name: Install dependencies
        run: pnpm install

      - run: pnpm lint

  format:
    runs-on: ubuntu-latest
    name: pnpm format:check
    steps:
      - uses: actions/checkout@v6
        with:
          fetch-depth: 0

      - name: Install Node.js
        uses: actions/setup-node@v3
        with:
          node-version: 22

      - uses: pnpm/action-setup@v4
        name: Install pnpm
        id: pnpm-install
        with:
          version: 9.15.0
          run_install: false

      - name: Get pnpm store directory
        id: pnpm-cache
        run: |
          echo "pnpm_cache_dir=$(pnpm store path)" >> $GITHUB_OUTPUT

      - uses: actions/cache@v3
        name: Setup pnpm cache
        with:
          path: ${{ steps.pnpm-cache.outputs.pnpm_cache_dir }}
          key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
          restore-keys: |
            ${{ runner.os }}-pnpm-store-

      - name: Install dependencies
        run: pnpm install

      - run: pnpm format:check

  tsc:
    runs-on: ubuntu-latest
    name: pnpm typecheck
    steps:
      - uses: actions/checkout@v6
        with:
          fetch-depth: 0

      - name: Install Node.js
        uses: actions/setup-node@v3
        with:
          node-version: 22

      - uses: pnpm/action-setup@v4
        name: Install pnpm
        id: pnpm-install
        with:
          version: 9.15.0
          run_install: false

      - name: Get pnpm store directory
        id: pnpm-cache
        run: |
          echo "pnpm_cache_dir=$(pnpm store path)" >> $GITHUB_OUTPUT
      - uses: actions/cache@v3
        name: Setup pnpm cache
        with:
          path: ${{ steps.pnpm-cache.outputs.pnpm_cache_dir }}
          key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
          restore-keys: |
            ${{ runner.os }}-pnpm-store-
      - name: Install dependencies
        run: pnpm install

      - run: pnpm typecheck

  registry-deps:
    runs-on: ubuntu-latest
    name: pnpm registry-deps:check
    steps:
      - uses: actions/checkout@v6
        with:
          fetch-depth: 0

      - name: Install Node.js
        uses: actions/setup-node@v3
        with:
          node-version: 22

      - uses: pnpm/action-setup@v4
        name: Install pnpm
        id: pnpm-install
        with:
          version: 9.15.0
          run_install: false

      - name: Get pnpm store directory
        id: pnpm-cache
        run: |
          echo "pnpm_cache_dir=$(pnpm store path)" >> $GITHUB_OUTPUT
      - uses: actions/cache@v3
        name: Setup pnpm cache
        with:
          path: ${{ steps.pnpm-cache.outputs.pnpm_cache_dir }}
          key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
          restore-keys: |
            ${{ runner.os }}-pnpm-store-
      - name: Install dependencies
        run: pnpm install

      - run: pnpm registry-deps:check

  registry-drift:
    runs-on: ubuntu-latest
    name: registry artifact drift check
    steps:
      - uses: actions/checkout@v6
        with:
          fetch-depth: 0

      - name: Install Node.js
        uses: actions/setup-node@v3
        with:
          node-version: 22

      - uses: pnpm/action-setup@v4
        name: Install pnpm
        id: pnpm-install
        with:
          version: 9.15.0
          run_install: false

      - name: Get pnpm store directory
        id: pnpm-cache
        run: |
          echo "pnpm_cache_dir=$(pnpm store path)" >> $GITHUB_OUTPUT
      - uses: actions/cache@v3
        name: Setup pnpm cache
        with:
          path: ${{ steps.pnpm-cache.outputs.pnpm_cache_dir }}
          key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
          restore-keys: |
            ${{ runner.os }}-pnpm-store-
      - name: Install dependencies
        run: pnpm install

      - name: Build registry artifacts
        run: pnpm build:registry

      - name: Verify registry artifacts are committed
        run: |
          CHANGED_FILES="$(git status --porcelain --untracked-files=all -- \
            apps/www/registry.json \
            apps/www/registry/__index__.tsx \
            apps/www/public/registry.json \
            apps/www/public/r \
            apps/www/public/llms.txt \
            apps/www/public/llms-full.txt)"

          if [ -n "$CHANGED_FILES" ]; then
            echo "Registry artifacts are out of date."
            echo "Changed files:"
            printf '%s\n' "$CHANGED_FILES"
            echo "Run: pnpm build:registry"
            echo "Then commit generated files."
            exit 1
          fi


================================================
FILE: .github/workflows/publish-article.yml
================================================
name: Publish Blog Article

on:
  workflow_dispatch:
    inputs:
      payload:
        description: "JSON payload from webhook"
        required: true

permissions:
  contents: write

jobs:
  publish-article:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v5
        with:
          ref: ${{ github.head_ref }}

      - uses: pnpm/action-setup@v4
        with:
          version: 9.15.0
          run_install: false

      - name: Setup Node
        uses: actions/setup-node@v4
        with:
          node-version: 22
          cache: pnpm
      - name: Install dependencies
        run: pnpm install

      - name: Save payload
        run: node -e "require('fs').writeFileSync('payload.json', process.env.PAYLOAD)"
        env:
          PAYLOAD: ${{ github.event.inputs.payload }}

      - name: Write blog posts
        run: node .github/scripts/publish-articles.cjs

      - name: Delete payload
        run: rm -f payload.json

      - name: Format code
        run: pnpm format:fix

      - name: Commit & push
        run: |
          git config user.name "github-actions[bot]"
          git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
          git add .
          git commit -m "Add blog article from webhook" || echo "No changes"
          git push


================================================
FILE: .github/workflows/submit-sitemap.yml
================================================
name: Submit Sitemap to Google

on:
  workflow_run:
    workflows:
      - Publish Blog Article
    types:
      - completed
  workflow_dispatch:
    inputs:
      sitemap_url:
        description: "Override sitemap URL (optional)"
        required: false

permissions: {}

env:
  SITEMAP_URL: https://magicui.design/sitemap.xml
  SITE_URL: sc-domain:magicui.design

jobs:
  submit-sitemap:
    if: ${{ github.event_name == 'workflow_dispatch' || github.event.workflow_run.conclusion == 'success' }}
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v5

      - name: Setup Node
        uses: actions/setup-node@v4
        with:
          node-version: 22

      - name: Install dependencies
        run: npm install --no-save googleapis google-auth-library

      - name: Publish Sitemap
        run: node .github/scripts/submit-sitemap.mjs
        env:
          GOOGLE_SEARCH_CONSOLE_JSON_KEY: ${{ secrets.GOOGLE_SEARCH_CONSOLE_JSON_KEY }}
          SITE_URL: ${{ env.SITE_URL }}
          SITEMAP_URL: ${{ inputs.sitemap_url || env.SITEMAP_URL }}


================================================
FILE: .gitignore
================================================
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
/node_modules
/.pnp
.pnp.js

# testing
/coverage

# next.js
/.next/
/out/

# production
/build

# misc
.DS_Store
*.pem

# IDE Files
.idea

# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# local env files
.env*
.env*.local
!.env.example

# vercel
.vercel

# typescript
*.tsbuildinfo
next-env.d.ts


# turbo cache
.turbo


================================================
FILE: .prettierignore
================================================
yarn.lock
node_modules
.next
.source


================================================
FILE: AGENTS.md
================================================
# Project Context
Ultracite enforces strict type safety, accessibility standards, and consistent code quality for JavaScript/TypeScript projects using Biome's lightning-fast formatter and linter.

## Key Principles
- Zero configuration required
- Subsecond performance
- Maximum type safety
- AI-friendly code generation

## Before Writing Code
1. Analyze existing patterns in the codebase
2. Consider edge cases and error scenarios
3. Follow the rules below strictly
4. Validate accessibility requirements

## Rules

### Accessibility (a11y)
- Don't use `accessKey` attribute on any HTML element.
- Don't set `aria-hidden="true"` on focusable elements.
- Don't add ARIA roles, states, and properties to elements that don't support them.
- Don't use distracting elements like `<marquee>` or `<blink>`.
- Only use the `scope` prop on `<th>` elements.
- Don't assign non-interactive ARIA roles to interactive HTML elements.
- Make sure label elements have text content and are associated with an input.
- Don't assign interactive ARIA roles to non-interactive HTML elements.
- Don't assign `tabIndex` to non-interactive HTML elements.
- Don't use positive integers for `tabIndex` property.
- Don't include "image", "picture", or "photo" in img alt prop.
- Don't use explicit role property that's the same as the implicit/default role.
- Make static elements with click handlers use a valid role attribute.
- Always include a `title` element for SVG elements.
- Give all elements requiring alt text meaningful information for screen readers.
- Make sure anchors have content that's accessible to screen readers.
- Assign `tabIndex` to non-interactive HTML elements with `aria-activedescendant`.
- Include all required ARIA attributes for elements with ARIA roles.
- Make sure ARIA properties are valid for the element's supported roles.
- Always include a `type` attribute for button elements.
- Make elements with interactive roles and handlers focusable.
- Give heading elements content that's accessible to screen readers (not hidden with `aria-hidden`).
- Always include a `lang` attribute on the html element.
- Always include a `title` attribute for iframe elements.
- Accompany `onClick` with at least one of: `onKeyUp`, `onKeyDown`, or `onKeyPress`.
- Accompany `onMouseOver`/`onMouseOut` with `onFocus`/`onBlur`.
- Include caption tracks for audio and video elements.
- Use semantic elements instead of role attributes in JSX.
- Make sure all anchors are valid and navigable.
- Ensure all ARIA properties (`aria-*`) are valid.
- Use valid, non-abstract ARIA roles for elements with ARIA roles.
- Use valid ARIA state and property values.
- Use valid values for the `autocomplete` attribute on input elements.
- Use correct ISO language/country codes for the `lang` attribute.

### Code Complexity and Quality
- Don't use consecutive spaces in regular expression literals.
- Don't use the `arguments` object.
- Don't use primitive type aliases or misleading types.
- Don't use the comma operator.
- Don't use empty type parameters in type aliases and interfaces.
- Don't write functions that exceed a given Cognitive Complexity score.
- Don't nest describe() blocks too deeply in test files.
- Don't use unnecessary boolean casts.
- Don't use unnecessary callbacks with flatMap.
- Use for...of statements instead of Array.forEach.
- Don't create classes that only have static members (like a static namespace).
- Don't use this and super in static contexts.
- Don't use unnecessary catch clauses.
- Don't use unnecessary constructors.
- Don't use unnecessary continue statements.
- Don't export empty modules that don't change anything.
- Don't use unnecessary escape sequences in regular expression literals.
- Don't use unnecessary fragments.
- Don't use unnecessary labels.
- Don't use unnecessary nested block statements.
- Don't rename imports, exports, and destructured assignments to the same name.
- Don't use unnecessary string or template literal concatenation.
- Don't use String.raw in template literals when there are no escape sequences.
- Don't use useless case statements in switch statements.
- Don't use ternary operators when simpler alternatives exist.
- Don't use useless `this` aliasing.
- Don't use any or unknown as type constraints.
- Don't initialize variables to undefined.
- Don't use the void operators (they're not familiar).
- Use arrow functions instead of function expressions.
- Use Date.now() to get milliseconds since the Unix Epoch.
- Use .flatMap() instead of map().flat() when possible.
- Use literal property access instead of computed property access.
- Don't use parseInt() or Number.parseInt() when binary, octal, or hexadecimal literals work.
- Use concise optional chaining instead of chained logical expressions.
- Use regular expression literals instead of the RegExp constructor when possible.
- Don't use number literal object member names that aren't base 10 or use underscore separators.
- Remove redundant terms from logical expressions.
- Use while loops instead of for loops when you don't need initializer and update expressions.
- Don't pass children as props.
- Don't reassign const variables.
- Don't use constant expressions in conditions.
- Don't use `Math.min` and `Math.max` to clamp values when the result is constant.
- Don't return a value from a constructor.
- Don't use empty character classes in regular expression literals.
- Don't use empty destructuring patterns.
- Don't call global object properties as functions.
- Don't declare functions and vars that are accessible outside their block.
- Make sure builtins are correctly instantiated.
- Don't use super() incorrectly inside classes. Also check that super() is called in classes that extend other constructors.
- Don't use variables and function parameters before they're declared.
- Don't use 8 and 9 escape sequences in string literals.
- Don't use literal numbers that lose precision.

### React and JSX Best Practices
- Don't use the return value of React.render.
- Make sure all dependencies are correctly specified in React hooks.
- Make sure all React hooks are called from the top level of component functions.
- Don't forget key props in iterators and collection literals.
- Don't destructure props inside JSX components in Solid projects.
- Don't define React components inside other components.
- Don't use event handlers on non-interactive elements.
- Don't assign to React component props.
- Don't use both `children` and `dangerouslySetInnerHTML` props on the same element.
- Don't use dangerous JSX props.
- Don't use Array index in keys.
- Don't insert comments as text nodes.
- Don't assign JSX properties multiple times.
- Don't add extra closing tags for components without children.
- Use `<>...</>` instead of `<Fragment>...</Fragment>`.
- Watch out for possible "wrong" semicolons inside JSX elements.

### Correctness and Safety
- Don't assign a value to itself.
- Don't return a value from a setter.
- Don't compare expressions that modify string case with non-compliant values.
- Don't use lexical declarations in switch clauses.
- Don't use variables that haven't been declared in the document.
- Don't write unreachable code.
- Make sure super() is called exactly once on every code path in a class constructor before this is accessed if the class has a superclass.
- Don't use control flow statements in finally blocks.
- Don't use optional chaining where undefined values aren't allowed.
- Don't have unused function parameters.
- Don't have unused imports.
- Don't have unused labels.
- Don't have unused private class members.
- Don't have unused variables.
- Make sure void (self-closing) elements don't have children.
- Don't return a value from a function with the return type 'void'
- Use isNaN() when checking for NaN.
- Make sure "for" loop update clauses move the counter in the right direction.
- Make sure typeof expressions are compared to valid values.
- Make sure generator functions contain yield.
- Don't use await inside loops.
- Don't use bitwise operators.
- Don't use expressions where the operation doesn't change the value.
- Make sure Promise-like statements are handled appropriately.
- Don't use __dirname and __filename in the global scope.
- Prevent import cycles.
- Don't use configured elements.
- Don't hardcode sensitive data like API keys and tokens.
- Don't let variable declarations shadow variables from outer scopes.
- Don't use the TypeScript directive @ts-ignore.
- Prevent duplicate polyfills from Polyfill.io.
- Don't use useless backreferences in regular expressions that always match empty strings.
- Don't use unnecessary escapes in string literals.
- Don't use useless undefined.
- Make sure getters and setters for the same property are next to each other in class and object definitions.
- Make sure object literals are declared consistently (defaults to explicit definitions).
- Use static Response methods instead of new Response() constructor when possible.
- Make sure switch-case statements are exhaustive.
- Make sure the `preconnect` attribute is used when using Google Fonts.
- Use `Array#{indexOf,lastIndexOf}()` instead of `Array#{findIndex,findLastIndex}()` when looking for the index of an item.
- Make sure iterable callbacks return consistent values.
- Use `with { type: "json" }` for JSON module imports.
- Use numeric separators in numeric literals.
- Use object spread instead of `Object.assign()` when constructing new objects.
- Always use the radix argument when using `parseInt()`.
- Make sure JSDoc comment lines start with a single asterisk, except for the first one.
- Include a description parameter for `Symbol()`.
- Don't use spread (`...`) syntax on accumulators.
- Don't use the `delete` operator.
- Don't access namespace imports dynamically.
- Don't use namespace imports.
- Declare regex literals at the top level.
- Don't use `target="_blank"` without `rel="noopener"`.

### TypeScript Best Practices
- Don't use TypeScript enums.
- Don't export imported variables.
- Don't add type annotations to variables, parameters, and class properties that are initialized with literal expressions.
- Don't use TypeScript namespaces.
- Don't use non-null assertions with the `!` postfix operator.
- Don't use parameter properties in class constructors.
- Don't use user-defined types.
- Use `as const` instead of literal types and type annotations.
- Use either `T[]` or `Array<T>` consistently.
- Initialize each enum member value explicitly.
- Use `export type` for types.
- Use `import type` for types.
- Make sure all enum members are literal values.
- Don't use TypeScript const enum.
- Don't declare empty interfaces.
- Don't let variables evolve into any type through reassignments.
- Don't use the any type.
- Don't misuse the non-null assertion operator (!) in TypeScript files.
- Don't use implicit any type on variable declarations.
- Don't merge interfaces and classes unsafely.
- Don't use overload signatures that aren't next to each other.
- Use the namespace keyword instead of the module keyword to declare TypeScript namespaces.

### Style and Consistency
- Don't use global `eval()`.
- Don't use callbacks in asynchronous tests and hooks.
- Don't use negation in `if` statements that have `else` clauses.
- Don't use nested ternary expressions.
- Don't reassign function parameters.
- This rule lets you specify global variable names you don't want to use in your application.
- Don't use specified modules when loaded by import or require.
- Don't use constants whose value is the upper-case version of their name.
- Use `String.slice()` instead of `String.substr()` and `String.substring()`.
- Don't use template literals if you don't need interpolation or special-character handling.
- Don't use `else` blocks when the `if` block breaks early.
- Don't use yoda expressions.
- Don't use Array constructors.
- Use `at()` instead of integer index access.
- Follow curly brace conventions.
- Use `else if` instead of nested `if` statements in `else` clauses.
- Use single `if` statements instead of nested `if` clauses.
- Use `new` for all builtins except `String`, `Number`, and `Boolean`.
- Use consistent accessibility modifiers on class properties and methods.
- Use `const` declarations for variables that are only assigned once.
- Put default function parameters and optional function parameters last.
- Include a `default` clause in switch statements.
- Use the `**` operator instead of `Math.pow`.
- Use `for-of` loops when you need the index to extract an item from the iterated array.
- Use `node:assert/strict` over `node:assert`.
- Use the `node:` protocol for Node.js builtin modules.
- Use Number properties instead of global ones.
- Use assignment operator shorthand where possible.
- Use function types instead of object types with call signatures.
- Use template literals over string concatenation.
- Use `new` when throwing an error.
- Don't throw non-Error values.
- Use `String.trimStart()` and `String.trimEnd()` over `String.trimLeft()` and `String.trimRight()`.
- Use standard constants instead of approximated literals.
- Don't assign values in expressions.
- Don't use async functions as Promise executors.
- Don't reassign exceptions in catch clauses.
- Don't reassign class members.
- Don't compare against -0.
- Don't use labeled statements that aren't loops.
- Don't use void type outside of generic or return types.
- Don't use console.
- Don't use control characters and escape sequences that match control characters in regular expression literals.
- Don't use debugger.
- Don't assign directly to document.cookie.
- Use `===` and `!==`.
- Don't use duplicate case labels.
- Don't use duplicate class members.
- Don't use duplicate conditions in if-else-if chains.
- Don't use two keys with the same name inside objects.
- Don't use duplicate function parameter names.
- Don't have duplicate hooks in describe blocks.
- Don't use empty block statements and static blocks.
- Don't let switch clauses fall through.
- Don't reassign function declarations.
- Don't allow assignments to native objects and read-only global variables.
- Use Number.isFinite instead of global isFinite.
- Use Number.isNaN instead of global isNaN.
- Don't assign to imported bindings.
- Don't use irregular whitespace characters.
- Don't use labels that share a name with a variable.
- Don't use characters made with multiple code points in character class syntax.
- Make sure to use new and constructor properly.
- Don't use shorthand assign when the variable appears on both sides.
- Don't use octal escape sequences in string literals.
- Don't use Object.prototype builtins directly.
- Don't redeclare variables, functions, classes, and types in the same scope.
- Don't have redundant "use strict".
- Don't compare things where both sides are exactly the same.
- Don't let identifiers shadow restricted names.
- Don't use sparse arrays (arrays with holes).
- Don't use template literal placeholder syntax in regular strings.
- Don't use the then property.
- Don't use unsafe negation.
- Don't use var.
- Don't use with statements in non-strict contexts.
- Make sure async functions actually use await.
- Make sure default clauses in switch statements come last.
- Make sure to pass a message value when creating a built-in error.
- Make sure get methods always return a value.
- Use a recommended display strategy with Google Fonts.
- Make sure for-in loops include an if statement.
- Use Array.isArray() instead of instanceof Array.
- Make sure to use the digits argument with Number#toFixed().
- Make sure to use the "use strict" directive in script files.

### Next.js Specific Rules
- Don't use `<img>` elements in Next.js projects.
- Don't use `<head>` elements in Next.js projects.
- Don't import next/document outside of pages/_document.jsx in Next.js projects.
- Don't use the next/head module in pages/_document.js on Next.js projects.

### Testing Best Practices
- Don't use export or module.exports in test files.
- Don't use focused tests.
- Make sure the assertion function, like expect, is placed inside an it() function call.
- Don't use disabled tests.

## Common Tasks
- `npx ultracite init` - Initialize Ultracite in your project
- `npx ultracite fix` - Format and fix code automatically
- `npx ultracite check` - Check for issues without fixing

## Example: Error Handling
```typescript
// ✅ Good: Comprehensive error handling
try {
  const result = await fetchData();
  return { success: true, data: result };
} catch (error) {
  console.error('API call failed:', error);
  return { success: false, error: error.message };
}

// ❌ Bad: Swallowing errors
try {
  return await fetchData();
} catch (e) {
  console.log(e);
}
```

================================================
FILE: CONTRIBUTING.md
================================================
# Contributing to MagicUI

Thank you for your interest in contributing to MagicUI! We appreciate your support and look forward to your contributions. This guide will help you understand the directory structure and provide detailed instructions on how to add a new component to MagicUI.

Read the [example PR](https://github.com/magicuidesign/magicui/pull/780) to learn which files you need to add. **You only need to change 5 files to add a new component or effect** and it only takes around 10 minutes of work!

Once done, open a pull request from your forked repo to the main repo [here](https://github.com/magicuidesign/magicui/compare).

## Getting Started

### Fork and Clone the Repository

1. **Fork this repository**  
   Click [here](https://github.com/magicuidesign/magicui/fork) to fork the repository.

2. **Clone your forked repository to your local machine**

   ```bash
   git clone https://github.com/<YOUR_USERNAME>/magicui.git
   ```

3. **Navigate to the project directory**

   ```bash
   cd magicui
   ```

4. **Create a new branch for your changes**

   ```bash
   git checkout -b my-new-branch
   ```

5. **Install dependencies**

   ```bash
   pnpm i
   ```

6. **Create a `.env.local` file**

   ```bash
   touch .env.local && echo "NEXT_PUBLIC_APP_URL=http://localhost:3000" > .env.local
   ```

7. **Run the project**
   ```bash
   pnpm dev
   ```

## Adding a New Component

To add a new component to MagicUI, you will need to modify several files. Follow these steps:

### 1. Create Component

Create the main component in `registry/magicui/example-component.tsx`

```typescript
import React from 'react'

export default function ExampleComponent() {
  return (
    <div>
      This is your component.
    </div>
  )
}
```

### 2. Create Component Demo

Provide a basic example to showcase your component in `registry/example/example-component-demo.tsx`

```typescript
import ExampleComponent from '@/registry/magicui/example-component'

export default function ExampleComponentDemo() {
  return (
    <div className="relative justify-center">
      <ExampleComponent />
    </div>
  )
}
```

### 3. Update Sidebar

Add your component to the sidebar in `config/docs.ts`

```typescript
{
    title: "Example Component",
    href: `/docs/components/example-component`,
    items: [],
    label: "New",
}
```

### 4. Create docs

Create an MDX file for documenting your component in `content/docs/components/example-component.mdx`

````md
---
title: Example Component
date: 2024-06-01
description: Example component for Magic UI
author: magicui
published: true
---

<ComponentPreview name="example-component-demo" />

## Installation

<Tabs defaultValue="cli">

<TabsList>
  <TabsTrigger value="cli">CLI</TabsTrigger>
  <TabsTrigger value="manual">Manual</TabsTrigger>
</TabsList>
<TabsContent value="cli">

```bash
npx shadcn@latest add @magicui/example-component
```

</TabsContent>

<TabsContent value="manual">

<Steps>

<Step>Copy and paste the following code into your project.</Step>

<ComponentSource name="example-component" />

<Step>Update the import paths to match your project setup.</Step>

<Step>Add the required CSS animations</Step>

<Step>Add the following animations to your global CSS file inside the `@theme inline` block (e.g., `app/globals.css` or similar)</Step>

```css title="app/globals.css" {1-2,4-18}
--animate-example: example var(--duration) infinite linear;

@keyframes example {
  from {
    transform: translateX(0);
  }
  to {
    transform: translateX(calc(-100% - var(--gap)));
  }
}
```

</Steps>

</TabsContent>

</Tabs>

## Props

| Prop    | Type     | Default  | Description                |
| ------- | -------- | -------- | -------------------------- |
| `color` | `String` | `"blue"` | The color of the component |
````

### 5. Update Registry

Export your component and example in the registry files:

In `registry/registry-ui.ts`:

```typescript
export const ui: Registry = [
  // ... existing components ...
  {
    name: "example-component",
    type: "registry:ui",
    title: "Example Component",
    description:
      "A versatile component that can be used to display various types of content such as text, images, or videos.",
    dependencies: ["motion"],
    files: [
      {
        path: "registry/magicui/example-component.tsx",
        type: "registry:ui",
      },
    ],
    // Add CSS variables for the component
    cssVars: {
      theme: {
        "animate-example": "example var(--duration) infinite linear",
      },
    },
    // Add CSS keyframes for the component
    css: {
      "@keyframes example": {
        from: {
          transform: "translateX(0)",
        },
        to: {
          transform: "translateX(calc(-100% - var(--gap)))",
        },
      },
    },
  },
];
```

In `registry/registry-examples.ts`:

```typescript
export const examples: Registry = [
  // ... existing examples ...
  {
    name: "example-component-demo",
    description: "An example of the example-component",
    type: "registry:example",
    registryDependencies: ["example-component"],
    files: [
      {
        path: "registry/example/example-component-demo.tsx",
        type: "registry:example",
      },
    ],
  },
];
```

Make sure to add any necessary dependencies, tailwind configurations, or other properties as needed for your specific component.

### 6. Build registry

```bash
pnpm build:registry
```

## Adding to the showcase

### 1. Create your showcase as a MDX file

Create your showcase in `content/showcase/website-name.mdx`

```mdx
---
title: website-name.com
description: Website description
image: /showcase/website-name.png
href: https://website-name.com
featured: true
affiliation: YC S25, raised $10M
---
```

### 2. Create an image

Upload an image of your site to `public/showcase/website-name.png`

## Ask for Help

For any help or questions, please open a new GitHub issue.


================================================
FILE: LICENSE.md
================================================
MIT License

Copyright (c) Magic UI

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.


================================================
FILE: README.md
================================================
<img alt="Magic UI - UI Library for Design Engineers" src="https://cdn.magicui.design/bento-grid.gif" width="100%">
<h3 align="center">Magic UI</h3>
<p align="center">
    UI Library for Design Engineers
</p>
<div align="center">
  <a href="https://github.com/magicuidesign/magicui/stargazers"><img alt="GitHub Repo stars" src="https://img.shields.io/github/stars/magicuidesign/magicui"></a>
  <a href="https://twitter.com/magicuidesign"><img alt="Twitter Follow" src="https://img.shields.io/twitter/follow/magicuidesign"></a>
  <a href="https://github.com/magicuidesign/magicui/blob/main/LICENSE.md"><img alt="License" src="https://img.shields.io/badge/License-MIT-yellow.svg"></a>
  <a href="https://discord.com/invite/87p2vpsat5"><img alt="Discord" src="https://img.shields.io/discord/1151315619246002176"></a>
  
</div>

## Documentation

Visit https://magicui.design/docs to view the documentation.

## Contributing

Visit our [contributing guide](https://github.com/magicuidesign/magicui/blob/main/CONTRIBUTING.md) to learn how to contribute. It only takes ~5 minutes to add your own!

## Community

Have questions, comments or feedback? [Join our discord](http://magicui.design/discord).

## Authors

<a href="https://github.com/magicuidesign/magicui/graphs/contributors">
  <img src="https://contrib.rocks/image?repo=magicuidesign/magicui" />
</a>

## Stats

![Alt](https://repobeats.axiom.co/api/embed/38b63c4514a8a4cd7d1307985af2889c78d67bcc.svg "Repobeats analytics image")

## Star History

[![Star History Chart](https://api.star-history.com/svg?repos=magicuidesign/magicui&type=Date)](https://www.star-history.com/#magicuidesign/magicui&Date)

## License

Licensed under the [MIT license](https://github.com/magicuidesign/magicui/blob/main/LICENSE.md).


================================================
FILE: apps/www/.env.example
================================================
NEXT_PUBLIC_APP_URL=http://localhost:3000


================================================
FILE: apps/www/.gitignore
================================================
# App-specific ignores
.next
out
build
node_modules
.turbo
.vercel
*.tsbuildinfo
next-env.d.ts
.source


================================================
FILE: apps/www/.prettierignore
================================================
registry/__index__.tsx


================================================
FILE: apps/www/app/(blog)/blog/[...slug]/page.tsx
================================================
/* eslint-disable @next/next/no-img-element */
import type { Metadata } from "next"
import Link from "next/link"
import { notFound } from "next/navigation"
import { mdxComponents } from "@/mdx-components"
import { ArrowLeftIcon } from "lucide-react"
import type { BlogPosting, BreadcrumbList, WithContext } from "schema-dts"

import { siteConfig } from "@/config/site"
import { blogSource } from "@/lib/source"
import { absoluteUrl, calculateReadingTime, formatDate } from "@/lib/utils"
import { Badge } from "@/components/ui/badge"
import { buttonVariants } from "@/components/ui/button"
import { MobileTOC } from "@/components/blog/mobile-toc"
import { BlogTableOfContents } from "@/components/blog/table-of-contents"
import { SidebarCTA } from "@/components/sidebar-cta"

export const revalidate = false
export const dynamic = "force-static"
export const dynamicParams = false

interface PageProps {
  params: Promise<{
    slug: string[]
  }>
}

export function generateStaticParams() {
  return blogSource.generateParams()
}

async function getDocFromParams({ params }: PageProps) {
  const { slug } = await params
  const page = blogSource.getPage(slug)
  if (!page) notFound()
  const doc = page.data
  if (!doc.title || !doc.description) {
    notFound()
  }

  return { doc, page }
}

export async function generateMetadata({
  params,
}: PageProps): Promise<Metadata> {
  const { doc, page } = await getDocFromParams({ params })

  if (!page) {
    return {}
  }

  return {
    title: `${doc.title} | ${siteConfig.name}`,
    description: doc.description,
    openGraph: {
      title: doc.title,
      description: doc.description,
      type: "article",
      url: absoluteUrl(page.url),
      images: [
        {
          url: doc.image ?? "",
          width: 1200,
          height: 630,
        },
      ],
    },
    twitter: {
      card: "summary_large_image",
      title: doc.title,
      description: doc.description,

      images: [doc.image ?? ""],
      creator: "@dillionverma",
    },
  }
}

export default async function BlogPage({ params }: PageProps) {
  const { doc, page } = await getDocFromParams({ params })
  const content = await doc.getText("raw")
  const MDX = doc.body

  const toBreadcrumbLabel = (segment: string) =>
    segment
      .split("-")
      .filter(Boolean)
      .map((part) => part.slice(0, 1).toUpperCase() + part.slice(1))
      .join(" ") || segment

  const slugSegments = page.url
    .replace(/^\/blog\/?/, "")
    .split("/")
    .filter(Boolean)
  const intermediateCrumbs = slugSegments
    .slice(0, -1)
    .map((segment, index) => ({
      name: toBreadcrumbLabel(segment),
      url: `/blog/${slugSegments.slice(0, index + 1).join("/")}`,
    }))
  const breadcrumbs = [
    { name: "Home", url: "/" },
    { name: "Blog", url: "/blog" },
    ...intermediateCrumbs,
    { name: doc.title, url: page.url },
  ] as const

  // Generate structured data for individual blog post
  const structuredData: WithContext<BlogPosting> = {
    "@context": "https://schema.org",
    "@type": "BlogPosting",
    headline: doc.title,
    description: doc.description,
    url: absoluteUrl(page.url),
    datePublished: doc.publishedOn,
    dateModified: doc.publishedOn,
    author: {
      "@type": "Person",
      name: doc.author ?? "Magic UI Team",
      url: siteConfig.links?.twitter,
    },
    image: doc.image ? [doc.image] : undefined,
    publisher: {
      "@type": "Organization",
      name: siteConfig.name,
      url: siteConfig.url,
      logo: {
        "@type": "ImageObject",
        url: `${siteConfig.url}/logo.png`,
      },
    },
    mainEntityOfPage: {
      "@type": "WebPage",
      "@id": absoluteUrl(page.url),
    },
    wordCount: content ? content.split(/\s+/).length : 0,
    timeRequired: `PT${calculateReadingTime(content || "")}M`,
    keywords: (() => {
      const docTag = doc.tags
      if (!docTag) return undefined
      return Array.isArray(docTag) ? docTag : [docTag]
    })(),
    inLanguage: "en-US",
  }

  const breadcrumbStructuredData: WithContext<BreadcrumbList> = {
    "@context": "https://schema.org",
    "@type": "BreadcrumbList",
    itemListElement: breadcrumbs.map((breadcrumb, index) => ({
      "@type": "ListItem",
      position: index + 1,
      name: breadcrumb.name,
      item: absoluteUrl(breadcrumb.url),
    })),
  }

  const serializedStructuredData = JSON.stringify(structuredData).replace(
    /</g,
    "\\u003c"
  )
  const serializedBreadcrumbStructuredData = JSON.stringify(
    breadcrumbStructuredData
  ).replace(/</g, "\\u003c")

  return (
    <>
      <script
        type="application/ld+json"
        dangerouslySetInnerHTML={{ __html: serializedStructuredData }}
      />
      <script
        type="application/ld+json"
        dangerouslySetInnerHTML={{
          __html: serializedBreadcrumbStructuredData,
        }}
      />
      <div className="mx-auto mt-5 max-w-6xl px-5 xl:px-0">
        <div className="mb-4">
          <Link href="/blog" className={buttonVariants({ variant: "link" })}>
            <ArrowLeftIcon className="mr-2 h-4 w-4" />
            Back to Blog
          </Link>
        </div>
        <article className="mx-auto mt-5 max-w-6xl rounded-xl">
          {doc && (
            <div>
              <div className="relative overflow-hidden rounded-xl p-5">
                <img
                  src={doc.image}
                  alt={doc.title}
                  className="border-border size-full rounded-xl border object-cover object-left"
                />
              </div>
              <div className="mx-auto flex flex-col items-center justify-center gap-y-2 p-5">
                <div className="mx-auto flex max-w-3xl flex-col items-center justify-center gap-y-4">
                  <h1 className="text-center text-3xl font-semibold tracking-tighter text-balance md:text-5xl">
                    {doc.title}
                  </h1>
                  <p className="text-secondary-foreground text-center text-balance md:text-lg">
                    {doc.description}
                  </p>
                  <div className="text-secondary-foreground flex items-center justify-center gap-x-2 text-sm">
                    {doc.publishedOn && (
                      <time>{formatDate(doc.publishedOn)}</time>
                    )}
                    {doc.publishedOn && <span>·</span>}
                    <span>{calculateReadingTime(content)} min read</span>
                  </div>
                </div>
              </div>
              <div className="text-secondary-foreground flex items-center justify-center gap-x-2 p-3 text-sm">
                {(() => {
                  const docTag = doc.tags
                  const tags = docTag
                    ? Array.isArray(docTag)
                      ? docTag
                      : [docTag]
                    : []

                  return (
                    tags.length > 0 && (
                      <div className="flex flex-wrap items-center justify-center gap-1">
                        {tags.map((tag) => (
                          <Link
                            key={tag}
                            href={`/blog?tag=${encodeURIComponent(tag)}`}
                          >
                            <Badge
                              variant="secondary"
                              className="border-border border text-xs"
                            >
                              {tag}
                            </Badge>
                          </Link>
                        ))}
                      </div>
                    )
                  )
                })()}
              </div>
            </div>
          )}
          <div className="grid grid-cols-1 gap-x-1 lg:grid-cols-7">
            <div className="article-content col-span-5 p-5 lg:p-10">
              <MDX components={mdxComponents} />
            </div>
            <div className="text-primary sticky top-16 col-span-2 hidden h-fit w-full flex-col items-start justify-start p-5 lg:flex">
              <BlogTableOfContents />
              <div className="h-10" />
              <SidebarCTA />
            </div>
          </div>
        </article>
        <MobileTOC />
      </div>
    </>
  )
}


================================================
FILE: apps/www/app/(blog)/blog/layout.tsx
================================================
import { SiteFooter } from "@/components/site-footer"
import { SiteHeader } from "@/components/site-header"

export default function Layout({ children }: { children: React.ReactNode }) {
  return (
    <>
      <SiteHeader />
      <main className="min-h-screen w-full">{children}</main>
      <SiteFooter />
    </>
  )
}


================================================
FILE: apps/www/app/(blog)/blog/page.tsx
================================================
/* eslint-disable @next/next/no-img-element */
import type { Metadata } from "next"
import Link from "next/link"
import type { Blog, BreadcrumbList, WithContext } from "schema-dts"

import { siteConfig } from "@/config/site"
import { blogSource } from "@/lib/source"
import {
  absoluteUrl,
  calculateReadingTime,
  constructMetadata,
  formatDate,
  normalizeTag,
  pluralize,
} from "@/lib/utils"
import { Badge } from "@/components/ui/badge"

export const revalidate = false
export const dynamic = "force-static"
export const dynamicParams = false

export function generateStaticParams() {
  return []
}

const BLOG_DESCRIPTION =
  "Latest articles about UI components, animations, and web development best practices."

export const metadata: Metadata = constructMetadata({
  title: `Blog | ${siteConfig.name}`,
  description: BLOG_DESCRIPTION,
})

export default async function Page({
  searchParams,
}: {
  searchParams?: Promise<{ tag?: string }>
}) {
  const params = await searchParams
  const selectedTag = params?.tag ?? ""

  const posts = blogSource.getPages().sort((a, b) => {
    const dateA = new Date(a.data?.publishedOn || 0).getTime()
    const dateB = new Date(b.data?.publishedOn || 0).getTime()
    return dateB - dateA
  })

  const filteredPosts = selectedTag
    ? posts.filter((p) => normalizeTag(p.data?.tags).includes(selectedTag))
    : posts

  const breadcrumbs = [
    { name: "Home", url: "/" },
    { name: "Blog", url: "/blog" },
  ] as const

  const breadcrumbStructuredData: WithContext<BreadcrumbList> = {
    "@context": "https://schema.org",
    "@type": "BreadcrumbList",
    itemListElement: breadcrumbs.map((breadcrumb, index) => ({
      "@type": "ListItem",
      position: index + 1,
      name: breadcrumb.name,
      item: absoluteUrl(breadcrumb.url),
    })),
  }

  // Generate structured data
  const structuredData: WithContext<Blog> = {
    "@context": "https://schema.org",
    "@type": "Blog",
    name: `${siteConfig.name} Blog`,
    description: BLOG_DESCRIPTION,
    url: `${siteConfig.url}/blog`,
    inLanguage: "en-US",
    publisher: {
      "@type": "Organization",
      name: siteConfig.name,
      url: siteConfig.url,
      logo: {
        "@type": "ImageObject",
        url: `${siteConfig.url}/icon.png`,
      },
    },
    blogPost: filteredPosts.slice(0, 10).map((post) => ({
      "@type": "BlogPosting",
      headline: post.data?.title,
      description: post.data?.description,
      url: `${siteConfig.url}${post.url}`,
      datePublished: post.data?.publishedOn,
      dateModified: post.data?.publishedOn,
      author: {
        "@type": "Person",
        name: post.data?.author,
        url: siteConfig.links?.twitter,
      },
      image: post.data?.image ? [post.data?.image] : undefined,
      keywords:
        normalizeTag(post.data?.tags).length > 0
          ? normalizeTag(post.data?.tags)
          : undefined,
      publisher: {
        "@type": "Organization",
        name: siteConfig.name,
        url: siteConfig.url,
      },
    })),
  }

  const serializedStructuredData = JSON.stringify(structuredData).replace(
    /</g,
    "\\u003c"
  )
  const serializedBreadcrumbStructuredData = JSON.stringify(
    breadcrumbStructuredData
  ).replace(/</g, "\\u003c")

  return (
    <>
      <script
        type="application/ld+json"
        dangerouslySetInnerHTML={{ __html: serializedStructuredData }}
      />
      <script
        type="application/ld+json"
        dangerouslySetInnerHTML={{
          __html: serializedBreadcrumbStructuredData,
        }}
      />
      <main className="container mx-auto px-10 py-10 md:py-14">
        <header className="mb-12 space-y-3">
          <div>
            <h1 className="text-3xl font-semibold tracking-tight">Blog</h1>
            <p className="text-muted-foreground mt-2 text-lg">
              {BLOG_DESCRIPTION}
            </p>
          </div>

          {filteredPosts.length > 0 && (
            <Badge variant="default" className="text-xs shadow-none">
              {selectedTag
                ? `${pluralize(filteredPosts.length, "article")} tagged with "${selectedTag}"`
                : `${pluralize(filteredPosts.length, "article")} total`}
            </Badge>
          )}
        </header>

        {/* {tags.length > 0 && (
          <nav className="mb-8">
            <div className="flex flex-wrap gap-2">
              <Link
                href="/blog"
                className={`rounded-full border px-3 py-1.5 text-sm font-medium transition-colors ${
                  !selectedTag
                    ? "bg-primary text-primary-foreground"
                    : "text-muted-foreground hover:bg-muted hover:text-foreground"
                }`}
              >
                All
              </Link>
              {tags.map((tag) => (
                <Link
                  key={tag}
                  href={`/blog?tag=${encodeURIComponent(tag)}`}
                  className={`rounded-full border px-3 py-1.5 text-sm font-medium transition-colors ${
                    selectedTag === tag
                      ? "bg-primary text-primary-foreground"
                      : "text-muted-foreground hover:bg-muted hover:text-foreground"
                  }`}
                >
                  {tag}
                </Link>
              ))}
            </div>
          </nav>
        )} */}

        {filteredPosts.length === 0 ? (
          <div className="py-16 text-center">
            <p className="text-muted-foreground text-lg">
              {selectedTag
                ? `No articles found for "${selectedTag}".`
                : "No posts yet."}
            </p>
            {selectedTag && (
              <Link
                href="/blog"
                className="text-primary mt-4 inline-flex items-center hover:underline"
              >
                View all articles
              </Link>
            )}
          </div>
        ) : (
          <div className="grid gap-8 sm:grid-cols-2 lg:grid-cols-3">
            {filteredPosts.map(async (post) => {
              const content = await post.data?.getText("raw")
              return (
                <article
                  key={post.url}
                  className="group flex flex-col rounded-lg border"
                >
                  <Link href={post.url} className="flex h-full flex-col">
                    {post.data?.image && (
                      <div className="overflow-hidden rounded-t-lg border-b">
                        <img
                          src={post.data.image}
                          alt={post.data?.title ?? post.url}
                          width={640}
                          height={360}
                          className="h-auto w-full object-contain transition-transform duration-300 group-hover:scale-[1.02]"
                        />
                      </div>
                    )}

                    <div className="flex flex-1 flex-col space-y-3 p-6">
                      <div className="flex-1 space-y-2">
                        <h2 className="group-hover:text-primary line-clamp-2 text-xl leading-tight font-semibold transition-colors">
                          {post.data?.title ?? post.url}
                        </h2>
                        {post.data?.description && (
                          <p className="text-muted-foreground line-clamp-2 text-sm leading-relaxed">
                            {post.data.description}
                          </p>
                        )}
                      </div>

                      <div className="text-muted-foreground flex items-center gap-2 text-xs">
                        {post.data?.publishedOn && (
                          <time dateTime={post.data.publishedOn}>
                            {formatDate(post.data.publishedOn)}
                          </time>
                        )}
                        {post.data?.publishedOn && <span>·</span>}
                        <span>
                          {calculateReadingTime(content ?? "")} min read
                        </span>
                      </div>

                      {normalizeTag(post.data?.tags).length > 0 && (
                        <div className="flex flex-wrap gap-1.5">
                          {normalizeTag(post.data.tags)
                            .slice(0, 3)
                            .map((tag) => (
                              <Badge
                                key={tag}
                                variant="secondary"
                                className="border-border border text-xs"
                              >
                                {tag}
                              </Badge>
                            ))}
                        </div>
                      )}
                    </div>
                  </Link>
                </article>
              )
            })}
          </div>
        )}
      </main>
    </>
  )
}


================================================
FILE: apps/www/app/(docs)/docs/[[...slug]]/page.tsx
================================================
import type { Metadata } from "next"
import Link from "next/link"
import { notFound } from "next/navigation"
import { mdxComponents } from "@/mdx-components"
import { IconArrowLeft, IconArrowRight } from "@tabler/icons-react"
import type { BreadcrumbItem } from "fumadocs-core/breadcrumb"
import { getBreadcrumbItems } from "fumadocs-core/breadcrumb"
import { findNeighbour } from "fumadocs-core/server"
import type { BreadcrumbList, TechArticle, WithContext } from "schema-dts"

import { getNeighboursFromConfig } from "@/config/docs"
import { siteConfig } from "@/config/site"
import { replaceComponentSource } from "@/lib/docs"
import { source } from "@/lib/source"
import { absoluteUrl } from "@/lib/utils"
import { Button } from "@/components/ui/button"
import { Contribute } from "@/components/contribute"
import { DocsCopyPage } from "@/components/docs-copy-page"
import { DocsTableOfContents } from "@/components/docs-toc"
import { SidebarCTA } from "@/components/sidebar-cta"

export const revalidate = false
export const dynamic = "force-static"
export const dynamicParams = false

export function generateStaticParams() {
  return source.generateParams()
}

interface DocPageProps {
  params: Promise<{
    slug: string[]
  }>
}

async function getDocFromParams({ params }: DocPageProps) {
  const { slug } = await params
  const page = source.getPage(slug)
  if (!page) notFound()
  const doc = page.data
  if (!doc.title || !doc.description) {
    notFound()
  }

  return { doc, page }
}

export async function generateMetadata({
  params,
}: DocPageProps): Promise<Metadata> {
  const { doc, page } = await getDocFromParams({ params })

  if (!doc) {
    return {}
  }

  const ogUrl = new URL(absoluteUrl("/og"))
  ogUrl.searchParams.set("title", doc.title ?? "")
  ogUrl.searchParams.set("description", doc.description ?? "")

  return {
    title: `${doc.title} | React Components & Templates`,
    description: doc.description,
    openGraph: {
      title: doc.title,
      description: doc.description,
      type: "article",
      url: absoluteUrl(page.url),
      images: [
        {
          url: ogUrl.toString(),
          width: 1200,
          height: 630,
        },
      ],
    },
    twitter: {
      card: "summary_large_image",
      title: doc.title,
      description: doc.description,
      images: [ogUrl.toString()],
      creator: "@dillionverma",
    },
  }
}

export default async function DocPage({ params }: DocPageProps) {
  const { doc, page } = await getDocFromParams({ params })
  const MDX = doc.body
  const content = await doc.getText("raw")
  const configNeighbours = getNeighboursFromConfig(page.url)
  const treeNeighbours = findNeighbour(source.pageTree, page.url)
  const neighbours = {
    previous: configNeighbours.previous ?? treeNeighbours.previous,
    next: configNeighbours.next ?? treeNeighbours.next,
  }
  const breadcrumbs = getBreadcrumbItems(page.url, source.pageTree, {
    includeRoot: { url: "/docs" },
    includePage: true,
  })
  const lastBreadcrumb = breadcrumbs.at(-1)

  const resolveBreadcrumbName = (item: BreadcrumbItem): string => {
    if (typeof item.name === "string") {
      return item.name
    }

    if (typeof item.name === "number") {
      return `${item.name}`
    }

    return doc.title
  }

  const breadcrumbStructuredData: WithContext<BreadcrumbList> = {
    "@context": "https://schema.org",
    "@type": "BreadcrumbList",
    itemListElement: breadcrumbs.map((item, index) => ({
      "@type": "ListItem",
      position: index + 1,
      name: resolveBreadcrumbName(item),
      item: absoluteUrl(item.url ?? page.url),
    })),
  }

  const docStructuredData: WithContext<TechArticle> = {
    "@context": "https://schema.org",
    "@type": "TechArticle",
    headline: doc.title,
    name: doc.title,
    description: doc.description,
    url: absoluteUrl(page.url),
    inLanguage: "en-US",
    datePublished: doc.date?.toString(),
    dateModified: doc.lastModified?.toString(),
    mainEntityOfPage: absoluteUrl(page.url),
    publisher: {
      "@type": "Organization",
      name: siteConfig.name,
      url: siteConfig.url,
      logo: {
        "@type": "ImageObject",
        url: `${siteConfig.url}/logo.png`,
      },
    },
    author: {
      "@type": "Organization",
      name: siteConfig.name,
      url: siteConfig.url,
    },
    isPartOf: {
      "@type": "CreativeWorkSeries",
      name: "Magic UI Documentation",
      url: absoluteUrl("/docs"),
    },
    wordCount: content ? content.split(/\s+/).length : 0,
  }

  const serializedDocStructuredData = JSON.stringify(docStructuredData).replace(
    /</g,
    "\\u003c"
  )
  const serializedBreadcrumbStructuredData = JSON.stringify(
    breadcrumbStructuredData
  ).replace(/</g, "\\u003c")

  return (
    <>
      <script
        type="application/ld+json"
        dangerouslySetInnerHTML={{ __html: serializedDocStructuredData }}
      />
      <script
        type="application/ld+json"
        dangerouslySetInnerHTML={{
          __html: serializedBreadcrumbStructuredData,
        }}
      />
      <div
        data-slot="docs"
        className="flex items-stretch text-[1.05rem] sm:text-[15px] xl:w-full"
      >
        <div className="flex min-w-0 flex-1 flex-col">
          <div className="mx-auto flex w-full max-w-3xl min-w-0 flex-1 flex-col gap-8 px-4 py-6 text-neutral-800 md:px-0 lg:py-8 dark:text-neutral-300">
            <div className="flex flex-col gap-2">
              <div className="flex flex-col gap-2">
                {breadcrumbs.length > 1 ? (
                  <nav
                    aria-label="Breadcrumb"
                    className="text-muted-foreground"
                  >
                    <ol className="flex flex-wrap items-center gap-1 text-sm">
                      {breadcrumbs.map((item) => {
                        const label = resolveBreadcrumbName(item)
                        const key = item.url ?? label
                        const isLast = item === lastBreadcrumb

                        return (
                          <li key={key} className="flex items-center gap-1">
                            {isLast ? (
                              <span
                                aria-current="page"
                                className="text-foreground font-medium"
                              >
                                {label}
                              </span>
                            ) : item.url ? (
                              <Link
                                href={item.url}
                                className="hover:text-foreground transition-colors"
                              >
                                {label}
                              </Link>
                            ) : (
                              <span>{label}</span>
                            )}
                            {!isLast ? <span aria-hidden="true">/</span> : null}
                          </li>
                        )
                      })}
                    </ol>
                  </nav>
                ) : null}
                <div className="flex items-start justify-between">
                  <h1 className="scroll-m-20 text-4xl font-semibold tracking-tight sm:text-3xl xl:text-4xl">
                    {doc.title}
                  </h1>
                  <div className="docs-nav bg-background/80 border-border/50 fixed inset-x-0 bottom-0 isolate z-50 flex items-center gap-2 border-t px-6 py-4 backdrop-blur-sm sm:static sm:z-0 sm:border-t-0 sm:bg-transparent sm:px-0 sm:pt-1.5 sm:backdrop-blur-none">
                    <DocsCopyPage
                      page={await replaceComponentSource(content)}
                      url={absoluteUrl(page.url)}
                    />
                    {neighbours.previous && (
                      <Button
                        variant="secondary"
                        size="icon"
                        className="extend-touch-target ml-auto size-8 shadow-none md:size-7"
                        asChild
                      >
                        <Link href={neighbours.previous.url}>
                          <IconArrowLeft />
                          <span className="sr-only">Previous</span>
                        </Link>
                      </Button>
                    )}
                    {neighbours.next && (
                      <Button
                        variant="secondary"
                        size="icon"
                        className="extend-touch-target size-8 shadow-none md:size-7"
                        asChild
                      >
                        <Link href={neighbours.next.url}>
                          <span className="sr-only">Next</span>
                          <IconArrowRight />
                        </Link>
                      </Button>
                    )}
                  </div>
                </div>
                {doc.description && (
                  <p className="text-muted-foreground text-[1.05rem] text-balance sm:text-base">
                    {doc.description}
                  </p>
                )}
              </div>
            </div>
            <div className="w-full flex-1 *:data-[slot=alert]:first:mt-0">
              <MDX components={mdxComponents} />
            </div>
          </div>
          <div className="mx-auto hidden h-16 w-full max-w-3xl items-center gap-2 px-4 sm:flex md:px-0">
            {neighbours.previous && (
              <Button
                variant="secondary"
                size="sm"
                asChild
                className="shadow-none"
              >
                <Link href={neighbours.previous.url}>
                  <IconArrowLeft /> {neighbours.previous.name}
                </Link>
              </Button>
            )}
            {neighbours.next && (
              <Button
                variant="secondary"
                size="sm"
                className="ml-auto shadow-none"
                asChild
              >
                <Link href={neighbours.next.url}>
                  {neighbours.next.name} <IconArrowRight />
                </Link>
              </Button>
            )}
          </div>
        </div>
        <div className="sticky top-[calc(var(--header-height)+1px)] z-30 ml-auto hidden h-[calc(100svh-var(--footer-height)+2rem)] w-84 flex-col gap-4 overflow-hidden overscroll-none xl:flex">
          <div className="h-(--top-spacing) shrink-0" />
          {doc.toc?.length ? (
            <div className="no-scrollbar overflow-y-auto px-8">
              <DocsTableOfContents toc={doc.toc} />
              <Contribute page={page} />
              <div className="h-8" />
              <SidebarCTA />
            </div>
          ) : null}
        </div>
      </div>
    </>
  )
}


================================================
FILE: apps/www/app/(docs)/docs/layout.tsx
================================================
import { Suspense } from "react"

import { SidebarProvider } from "@/components/ui/sidebar"
import { DocsSidebar } from "@/components/docs-sidebar"

export default function DocsLayout({
  children,
}: {
  children: React.ReactNode
}) {
  return (
    <div className="container-wrapper flex flex-1 flex-col px-2">
      <SidebarProvider className="3xl:fixed:container 3xl:fixed:px-3 min-h-min flex-1 items-start px-0 [--sidebar-width:220px] [--top-spacing:0] lg:grid lg:grid-cols-[var(--sidebar-width)_minmax(0,1fr)] lg:[--sidebar-width:240px] lg:[--top-spacing:calc(var(--spacing)*4)]">
        <DocsSidebar />
        <Suspense>
          <div className="h-full w-full">{children}</div>
        </Suspense>
      </SidebarProvider>
    </div>
  )
}


================================================
FILE: apps/www/app/(docs)/docs/loading.tsx
================================================
import { Skeleton } from "@/components/ui/skeleton"

export default function Loading() {
  return (
    <div className="flex items-stretch text-[1.05rem] sm:text-[15px] xl:w-full">
      <div className="flex min-w-0 flex-1 flex-col">
        <div className="mx-auto w-full max-w-3xl px-4 py-8 md:px-0">
          <div className="flex flex-col gap-8">
            {/* Breadcrumb skeleton */}
            <div className="flex items-center gap-2">
              <Skeleton className="h-4 w-16" />
              <Skeleton className="h-4 w-24" />
              <Skeleton className="h-4 w-24" />
            </div>

            {/* Title and description skeleton */}
            <div className="flex flex-col gap-4">
              <Skeleton className="h-16 w-full" />
            </div>

            {/* Content skeleton */}
            <div className="flex flex-col gap-4">
              <div className="my-4">
                <Skeleton className="h-64 w-full" />
              </div>

              <Skeleton className="h-4 w-full" />
              <Skeleton className="h-4 w-5/6" />
              <Skeleton className="h-4 w-full" />
              <Skeleton className="h-4 w-4/5" />
            </div>
          </div>
        </div>
      </div>
      {/* Right sidebar skeleton */}
      <div className="sticky top-[calc(var(--header-height)+1px)] z-30 ml-auto hidden h-[calc(100svh-var(--footer-height)+2rem)] w-84 flex-col gap-4 overflow-hidden overscroll-none xl:flex">
        <div className="h-(--top-spacing) shrink-0" />
        <div className="no-scrollbar overflow-y-auto px-8">
          {/* Table of contents skeleton */}
          <div className="flex flex-col gap-3">
            <Skeleton className="h-4 w-24" />
            <Skeleton className="h-3 w-32" />
            <Skeleton className="h-3 w-28" />
            <Skeleton className="h-3 w-36" />
            <Skeleton className="h-3 w-30" />
            <Skeleton className="h-3 w-34" />
            <Skeleton className="h-3 w-26" />
            <div className="h-6 w-full" />
            <Skeleton className="h-3 w-38" />
            <Skeleton className="h-3 w-32" />
            <Skeleton className="h-3 w-28" />
          </div>
          <div className="h-8" />
          {/* CTA block skeleton */}
          <Skeleton className="h-64 w-full" />
        </div>
      </div>
    </div>
  )
}


================================================
FILE: apps/www/app/(docs)/docs/not-found.tsx
================================================
"use client"

import Link from "next/link"
import { useRouter } from "next/navigation"

import { Button, buttonVariants } from "@/components/ui/button"
import { Icons } from "@/components/icons"

export default function NotFound() {
  const router = useRouter()
  return (
    <section>
      <div className="container mx-auto flex min-h-[calc(100vh-8rem)] items-center px-6 py-12">
        <div className="mx-auto flex max-w-sm flex-col items-center text-center">
          <p className="rounded-full bg-blue-50 p-3 text-sm font-medium dark:bg-gray-800">
            <Icons.warning className="size-6" />
          </p>
          <h1 className="mt-3 text-2xl font-semibold text-gray-800 md:text-3xl dark:text-white">
            Page not found
          </h1>
          <p className="mt-4 text-gray-500 dark:text-gray-400">
            The page you are looking for doesn&apos;t exist.
          </p>

          <div className="group mt-6 flex w-full shrink-0 items-center gap-x-3 sm:w-auto">
            <Button
              onClick={() => router.back()}
              className={buttonVariants({ variant: "secondary" })}
            >
              <Icons.chevronLeft className="size-4 transition-transform group-hover:-translate-x-1" />
              <span>Go back</span>
            </Button>

            <Link href="/" className={buttonVariants({ variant: "default" })}>
              Take me home
            </Link>
          </div>
        </div>
      </div>
    </section>
  )
}


================================================
FILE: apps/www/app/(docs)/layout.tsx
================================================
import { SiteBanner } from "@/components/site-banner"
import { SiteFooter } from "@/components/site-footer"
import { SiteHeader } from "@/components/site-header"

interface MarketingLayoutProps {
  children: React.ReactNode
}

export default async function MarketingLayout({
  children,
}: MarketingLayoutProps) {
  return (
    <>
      <SiteBanner />
      <SiteHeader />
      <main className="flex-1">{children}</main>
      <SiteFooter />
    </>
  )
}


================================================
FILE: apps/www/app/(marketing)/layout.tsx
================================================
import { SiteBanner } from "@/components/site-banner"
import { SiteFooter } from "@/components/site-footer"
import { SiteHeader } from "@/components/site-header"

interface MarketingLayoutProps {
  children: React.ReactNode
}

export default async function MarketingLayout({
  children,
}: MarketingLayoutProps) {
  return (
    <>
      <SiteBanner />
      <SiteHeader />
      <main className="flex-1">{children}</main>
      <SiteFooter />
      <div className="before:animate-rainbow pointer-events-none absolute inset-0 h-24 w-full before:absolute before:bottom-[-20%] before:left-1/2 before:z-0 before:h-4/5 before:w-3/5 before:-translate-x-1/2 before:bg-[linear-gradient(90deg,var(--color-1),var(--color-5),var(--color-3),var(--color-4),var(--color-2))] before:bg-size-[200%] before:opacity-20 before:filter-[blur(calc(4*1rem))]" />
    </>
  )
}


================================================
FILE: apps/www/app/(marketing)/page.tsx
================================================
import { Hero } from "@/components/sections/hero"
import { Showcase } from "@/components/sections/showcase"
import { Testimonials } from "@/components/sections/testimonials"
import { VideoTestimonials } from "@/components/sections/video-testimonials"

export default function Home() {
  return (
    <>
      <Hero />
      <Showcase />
      <Testimonials />
      <VideoTestimonials />
    </>
  )
}


================================================
FILE: apps/www/app/(marketing)/showcase/[...slug]/page.tsx
================================================
import { Metadata } from "next"
import { notFound } from "next/navigation"

import { showcaseSource } from "@/lib/source"
import { absoluteUrl } from "@/lib/utils"
import { ShowcaseCard } from "@/components/sections/showcase"

export const revalidate = false
export const dynamic = "force-static"
export const dynamicParams = false

export function generateStaticParams() {
  return showcaseSource.generateParams()
}

interface PageProps {
  params: Promise<{
    slug: string[]
  }>
}

async function getDocFromParams({ params }: PageProps) {
  const { slug } = await params
  const page = showcaseSource.getPage(slug)
  if (!page) notFound()
  const doc = page.data
  if (!doc.title || !doc.description) {
    notFound()
  }

  return { doc, page }
}

export async function generateMetadata({
  params,
}: PageProps): Promise<Metadata> {
  const { doc, page } = await getDocFromParams({ params })

  if (!page) {
    return {}
  }

  const ogUrl = new URL(absoluteUrl("/og"))
  ogUrl.searchParams.set("title", doc.title ?? "")
  ogUrl.searchParams.set("description", doc.description ?? "")

  return {
    title: doc.title,
    description: doc.description,
    openGraph: {
      title: doc.title,
      description: doc.description,
      type: "article",
      url: absoluteUrl(page.url),
      images: [
        {
          url: ogUrl.toString(),
          width: 1200,
          height: 630,
        },
      ],
    },
    twitter: {
      card: "summary_large_image",
      title: doc.title,
      description: doc.description,
      images: [ogUrl.toString()],
    },
  }
}

export default async function PagePage({ params }: PageProps) {
  const { doc, page } = await getDocFromParams({ params })

  return (
    <article className="container max-w-2xl py-14">
      <h2 className="text-foreground mb-4 text-center text-5xl leading-[1.2] font-bold tracking-tighter">
        {doc.title}
      </h2>
      <h3 className="text-foreground/80 mx-auto mb-8 text-center text-lg font-medium tracking-tight text-balance">
        {doc.title} uses Magic UI to build their landing page.
      </h3>
      <ShowcaseCard
        title={doc.title ?? ""}
        href={doc.href ?? page.url}
        image={doc.image ?? ""}
        affiliation={doc.affiliation ?? ""}
      />
    </article>
  )
}


================================================
FILE: apps/www/app/(marketing)/showcase/page.tsx
================================================
import { showcaseSource } from "@/lib/source"
import { ShowcaseCard } from "@/components/sections/showcase"
import { BlurFade } from "@/registry/magicui/blur-fade"

export default function Page() {
  const showcases = showcaseSource.getPages()
  return (
    <article className="container max-w-[120ch] py-14">
      <h2 className="text-foreground mb-2 text-center text-5xl leading-[1.2] font-bold tracking-tighter">
        Showcase
      </h2>
      <h3 className="text-foreground/80 mx-auto mb-8 text-center text-lg font-medium tracking-tight text-balance">
        Companies choose Magic UI to build their landing pages.
      </h3>
      <div className="grid grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-3">
        {showcases.map((showcase, idx) => (
          <BlurFade key={idx} delay={0.25 + idx * 0.05}>
            <ShowcaseCard
              {...showcase}
              href={showcase.url}
              title={showcase.data.title ?? ""}
              image={showcase.data.image ?? ""}
              affiliation={showcase.data.affiliation ?? ""}
            />
          </BlurFade>
        ))}
      </div>
    </article>
  )
}


================================================
FILE: apps/www/app/api/blog-webhook/route.ts
================================================
import { NextRequest, NextResponse } from "next/server"

const REPO_OWNER = "magicuidesign"
const REPO_NAME = "magicui"
const BRANCH = "main"
const WORKFLOW_FILE = "publish-article.yml"

export async function POST(request: NextRequest) {
  const auth = request.headers.get("authorization")
  if (!auth || auth !== `Bearer ${process.env.BLOG_WEBHOOK_ACCESS_TOKEN}`) {
    return NextResponse.json({ error: "Unauthorized" }, { status: 401 })
  }

  // Get the raw payload from the incoming webhook
  const body = await request.json()
  const payload = JSON.stringify(body)

  // Call GitHub Actions workflow_dispatch
  const ghResp = await fetch(
    `https://api.github.com/repos/${REPO_OWNER}/${REPO_NAME}/actions/workflows/${WORKFLOW_FILE}/dispatches`,
    {
      method: "POST",
      headers: {
        Accept: "application/vnd.github+json",
        Authorization: `Bearer ${process.env.GITHUB_TOKEN}`,
        "Content-Type": "application/json",
      },
      body: JSON.stringify({
        ref: BRANCH,
        inputs: { payload },
      }),
    }
  )

  const text = await ghResp.text()

  if (!ghResp.ok) {
    return NextResponse.json(
      { error: "GitHub error", details: text },
      { status: 500 }
    )
  }

  return NextResponse.json({ message: "Workflow dispatched", details: text })
}


================================================
FILE: apps/www/app/layout.tsx
================================================
import type { Viewport } from "next"
import { Metadata } from "next"
import { Provider as JotaiProvider } from "jotai"

import { fontVariables } from "@/lib/fonts"
import { absoluteUrl, cn, constructMetadata } from "@/lib/utils"
import { Toaster } from "@/components/ui/sonner"
import { TooltipProvider } from "@/components/ui/tooltip"
import { Analytics } from "@/components/analytics"
import { PHProvider } from "@/components/posthog-provider"
import { ThemeProvider } from "@/components/theme-provider"

import "@/styles/globals.css"

export const metadata: Metadata = constructMetadata({
  title: "Magic UI",
  description:
    "Beautiful UI components and templates to make your landing page look stunning.",
  image: absoluteUrl("/og"),
})

export const viewport: Viewport = {
  colorScheme: "dark",
  themeColor: [
    { media: "(prefers-color-scheme: light)", color: "white" },
    { media: "(prefers-color-scheme: dark)", color: "black" },
  ],
}

export default function RootLayout({
  children,
}: {
  children: React.ReactNode
}) {
  return (
    <html lang="en" suppressHydrationWarning className="layout-fixed">
      <head />
      <body
        className={cn(
          "text-foreground group/body overscroll-none font-sans antialiased [--footer-height:calc(var(--spacing)*14)] [--header-height:calc(var(--spacing)*14)] xl:[--footer-height:calc(var(--spacing)*24)]",
          fontVariables
        )}
      >
        <JotaiProvider>
          <PHProvider>
            <ThemeProvider attribute="class" defaultTheme="light">
              <TooltipProvider>
                {children}
                <Toaster position="top-center" richColors toastOptions={{}} />
                <Analytics />
              </TooltipProvider>
            </ThemeProvider>
          </PHProvider>
        </JotaiProvider>
      </body>
    </html>
  )
}


================================================
FILE: apps/www/app/llm/[[...slug]]/route.ts
================================================
import { notFound } from "next/navigation"
import { NextResponse, type NextRequest } from "next/server"

import { replaceComponentSource } from "@/lib/docs"
import { source } from "@/lib/source"

export const revalidate = false

export async function GET(
  _req: NextRequest,
  { params }: { params: Promise<{ slug?: string[] }> }
) {
  const slug = (await params).slug
  const page = source.getPage(slug)

  if (!page) {
    notFound()
  }

  let mdx = await page.data.getText("raw")

  // Replace component tags with actual source code
  mdx = await replaceComponentSource(mdx)

  return new NextResponse(mdx, {
    headers: {
      "Content-Type": "text/markdown; charset=utf-8",
      "Cache-Control": "public, s-maxage=60, stale-while-revalidate=300",
    },
  })
}

export function generateStaticParams() {
  return source.generateParams()
}


================================================
FILE: apps/www/app/not-found.tsx
================================================
"use client"

import Link from "next/link"
import { useRouter } from "next/navigation"

import { Button, buttonVariants } from "@/components/ui/button"
import { Icons } from "@/components/icons"

export default function NotFound() {
  const router = useRouter()
  return (
    <section>
      <div className="container mx-auto flex min-h-[calc(100vh-8rem)] items-center px-6 py-12">
        <div className="mx-auto flex max-w-sm flex-col items-center text-center">
          <p className="rounded-full bg-blue-50 p-3 text-sm font-medium dark:bg-gray-800">
            <Icons.warning className="size-6" />
          </p>
          <h1 className="mt-3 text-2xl font-semibold text-gray-800 md:text-3xl dark:text-white">
            Page not found
          </h1>
          <p className="mt-4 text-gray-500 dark:text-gray-400">
            The page you are looking for doesn&apos;t exist.
          </p>

          <div className="group mt-6 flex w-full shrink-0 items-center gap-x-3 sm:w-auto">
            <Button
              onClick={() => router.back()}
              className={buttonVariants({ variant: "secondary" })}
            >
              <Icons.chevronLeft className="size-4 transition-transform group-hover:-translate-x-1" />
              <span>Go back</span>
            </Button>

            <Link href="/" className={buttonVariants({ variant: "default" })}>
              Take me home
            </Link>
          </div>
        </div>
      </div>
    </section>
  )
}


================================================
FILE: apps/www/app/og/geist-regular-otf.json
================================================
{"base64Font":"T1RUTwAMAIAAAwBAQ0ZGIN9uOmAAABXMAACeZkdERUZBTj+sAAC0NAAAAT5HUE9Ttn3F0QAAtXQAABvSR1NVQpIcrgQAANFIAAASlE9TLzJPyiLTAAAL3AAAAGBjbWFwrm6KhgAADtQAAAbWaGVhZCrsuiMAAADUAAAANmhoZWEM9AjIAAALuAAAACRobXR487+RWAAAAQwAAAqqbWF4cAKrUAAAAADMAAAABm5hbWU8hhcjAAAMPAAAApdwb3N0/58AMgAAFawAAAAgAABQAAKrAAAAAQAAAAEAg2zs2StfDzz1AAMD6AAAAADhcDrwAAAAAOFwOvD/0/8kCSIDuAAAAAcAAgAAAAAAAAGuAFAA+gAAAqAAFQKgABUCoAAVAqAAFQKgABUCoAAVAqAAFQKgABUCwwAVAqAAFQKgABUD0QAVAqkAXAK+ADECvgAxAr4AMQK+ADECvgAxAr4AMQK/AFwDFwAxAr8AXAMXADECXABcAlwAXAJcAFwCXABcAlwAXAJcAFwCXABcAlwAXAJcAFwCXABcAtIAMQJZADICWQAyAk8AXALFADECxQAxAsUAMQLFADECxQAxAsUAMQLFADEC8wAxAsAAXANkAFwCwABcARAAXAMSAFwBEABcARD//QEQABABEABbARAADgEQAAgBEAAwARD/4AJWAEMCVgBDAlYAQwKNAFwCjQBcAo0AXAJFAFwCRQBcAh4AXAJFAFwCaAAWA24AXALjAFwC4wBcAuMAXALjAFwC4wBcAuMAXALsADEC7AAxAuwAMQLsADEC7AAxAuwAMQLsADEC8QAxAuwAMQQ+ADECiwBcAm0AXALmADECoQBcAqEAXAKhAFwCoQBcAokAOwKJADsAvAAxAokAOwKJADsCiQA7AokAOwK2AFwCQgAZAkIAGQJCABkCQgAZAkIAGQKyAE0CsgBNArIATQKyAE0CsgBNArIATQKyAE0CsgBNArIATQKyAE0CsgBNAp4AFQOQABUDkAAVA5AAFQOQABUDkAAVAnUAGwJ3ABUCdwAVAncAFQJ3ABUCdwAVAncAFQIfABsCHwAbAh8AGwIfABsCRQBcAuMAXAKnAFwCpwBcAqcAXAKnAFwBtgAxAbYAMQG2ADEBtgAxAbYAMQG2ADEBtgAxAbYAMQG2ADECvgAxAr4AMQK+ADECvgAxAr4AMQK+ADECoAAVAr4AMQJcAFwCXABcAsUAMQEQAAEBEABTAuwAMQKyAE0DkAAVAncAFQIfABsBtgAxAbYAMQK+ADEEVgAVBGgATQJAAC8CQAAvAkAALwJAAC8CQAAvAkAALwJAAC8CQAAvAkAALwJAAC8CQAAvA6QALwJXAFACKQAvAikALwIpAC8CKQAvAikALwIpAC8CVwAvAlMALwL4AC8CjAAvAjgALwI4AC8COAAvAjgALwI4AC8COAAvAjgALwI4AC8COAAvAjgALwI4AC8CWQAyAlkAMgGPADwCVgAvAlYALwJWAC8CVgAvAlYALwJWAC8CVgAvAnoALwJGAFACPAAZAkb/8AD2AE4A9gBQAPYAUAD2//AA9gADAPYATgD2AAEB8QBOAPb/+wD2ACIA9v/TAQX/+wEF//sBBf/7AQX/+wJPAFACT//tAk8AUAEcAFABHABQAZoAUAEcAEYBegBQA24AUAJGAFACRgBQAkYAUAJGAFACRgBQAkYAUAJEAC8CRAAvAkQALwJEAC8CRAAvAkQALwJEAC8CNgAMAkQALwPEAC8CVwBQAlcAUAJXAC8BfwBQAX8AUAF/ADcBfwAbAhMALwITAC8AvAAxAhMALwITAC8CEwAvAhMALwJPAFABjQA3AY0ANwHGADcBjQA3AY0ANwJAAFACQABQAkAAUAJAAFACQABQAkAAUAJAAFACQABQAkAAUAJAAFACQABQAhoAFgM0ABYDNAAWAzQAFgM0ABYDNAAWAksALwIaABYCGgAWAhoAFgIaABYCGgAWAhoAFgImADkCJgA5AiYAOQImADkBHABGAkYAUAIyACoCMgAqAjIAKgIyACoCMgAqAjIAKgIyACoCMgAqAjIAKgIyACoCMgAqAlcALwJXAC8CVwAvAlcALwJXAC8CVwAvAlcALwJXAC8CVwAvAlcALwJXAC8BDgBcAQ4AXAGeAFABDgAnAXoAUAJAAC8CKQAvAjgALwI4AC8CVgAvAPYARgD2//QA9gBGAfEARgD2ACIBBf/7AkQALwJAAFADNAAWAhoAFgImADkCMgAqAlcALwKwADwCvQA3AoUAPAKXADwCQAAvAkQALwKgABUC5AAxAj0AFQKUADcCZQAyAqAANgGBACgCawA8AmUAMgJ8ADICcgA8AnAAPAJJACgCXAAoAnAAPANAAC8DQAAvA0AALwNAAC8DQAAvA0AALwNAAC8DQAAvA0AALwNAAC8DQAAvA0AALwNAAC8DQAAvA0AALwNAAC8DQAAvA0AALwNAAC8DQAAvAqAANgGzABkCWAAUAlgAfgJYADsCWAAqAlgAMAJYADkCWAA4AlgAOwJYABoCWAA4AlgADQPQADEDwgAxA7oAMQO9ADEDzQAxA7cAMQPAADED0AAxA8sAMQSwAKYCWACVAlgAsgJYAKACWACgAlgAhAJYAKUCWAClAlgApgJYAJ8CWACoAlgAlQJYALICWACgAlgAoAJYAIQCWAClAlgApQJYAKYCWACfAlgAqAD6AAABYgAvCWAAPgcIAD4EsAA+AMsALwDLAC8BJQBcASUAXAI9AC8A2QA2ANkANgI3AC8CNwAvAMsALwEpAC8BtAAvAXgALwHe//YB4wAoAd4AMgKCACgBtAAvA44ALwHeADIAywAvAMsALwEUADYB3v/2AwIALwDLAC8CNwAvAWQALwC4AC8AywAvAeMAKADSAC8BLABcAS0AXAJFAC8A0gAvANIALwI3AC8CNwAvANIALwI0AC8A0gAvARQALwDSAC8CNwAvANMALwGqAC8BsAAvAlYALwOSAC8CNAAvA1sALwLQAC8BOQAvATkALwGoAC8BqAAvAVEALwFRAC8BZwAvAWcALwFxAC8BcQAvAagALwGoAC8BjQAvAY0ALwIOAC8CDgAvAY8ALwGPAC8BjQAvAY0ALwFnAC8BZwAvAVEALwFRAC8BOQAvATkALwDPADEBdgAxAXYAMQF2ADEAzwAxAM8AMQIaAC8CGgAvAVAALwFQAC8BaAAxALwAMQIDADwCgQBcBLAAPgcIAD4JYAA+BwcAPgNAAC8DQAAvA5IAMQJuACgCUQAjAi4AOwNEADECWgAxAloAMQN6AFwBjAAvAPwALwF3AC8BCABcAQgAXAI7AFwCOwBcBEQAXAJYAE8DWQAxAlgANAIpAC8CSwAxAokAOwLgADsCogA7AtEALgKoAFwDBwBcAmgAOwJ3ABUCOgAvAjoALwHnAC8COgAvApQAXAI6AC8CKQAxAiUALwI6AC8COgAvAjoALwIaAC8CGgAvAeUALwGSAC8DSQAvAXsAAAKMABUCaAAZAhIAGwJjABYCVQAvAlIAWgMCAC8ESAAvAtAAMQJ2ADEDKAAxAnYAMQLQADECdgAxAygAMQJ2ADEEFgAx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Ai4CLwHIAjACJwGcAZ0BoAJdAlcCWQJbAl8CYAJeAlgCWgJcAlECPwJHAkYCMwIxAnoCfgJ7An8CfAKAAn0CgQJ5AncCeAG6AcoB+QH6AgECAgH/AgACBQIGAfsB/AIDAgQCBwIIAGEBDwHUAdkB1QHWAc4B2gILAgwBzwHTAfIB1wHcAdIB2wHYAdACCQHRAgoAAAADAAAAAAAA/5wAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAQAEAgABAQEOR2Vpc3QtUmVndWxhcgABAQEp+BEA+eMB+eQC+BgE+xEMA177cBwJIvpMBRwrGg8cLhIRqR0AAI1CEgHKAgABAAcADgAVABwAIgAoADMAPQBDAEkATwBZAGAAZwBuAHUAfACDAIkAjwCaAKEAqwCyALkAvQDIAMoA1ADbAOIA6ADzAP4BBQEMARIBGAEfASUBKwEyATUBQgFJAU8BVQFcAWIBaQFxAXwBgwGKAY4BlAGbAaIBqAG1AbwBwwHIAc4B1AHfAegB7gH5Af8CBgIMAhYCJQI0AjoCRQJQAlwCYgJtAn0CiwKaAqUCsQK9AsgCzgLZAukC9QMEAxADHgMtAzsDSgNZA2cDdgOEA5IDoAOuA70D0APkA/gEAAQIBA4EFQQcBCMEKQQvBDoERARKBFAEVgRgBGcEbgR1BHwEgwSKBJAElgShBKgEsgS5BMAExATPBNgE2gThBOgE7gT1BQAFCwUSBRkFHwUlBSwFMgU4BT8FQgVPBVYFXAViBWkFbwV2BX4FiQWQBZQFmgWhBagFrgW7BcIFyQXOBdQF2gXlBe4F9AX/BgUGDAYSBhwGKwY6BkAGSwZWBmIGcgaABosGlwajBq0GuAa+BskG1AbgBvAG/gcJBxUHIQcrBzYHPAdHB1IHXgdpB3cHhgeUB6MHsge4B8YH1AfbB+cH7Qf7CAkIFwglCDQIRwhaCGIIaghxCHgIfgiFCIsIjQiUCJsIogipCLAItwi+CMUIzAjTCNoI4QjoCO8I9gj9CQQJCwkSCRkJIAkpCTEJOAk+CUQJTAlTCVoJYAloCXAJdwl+CYUJjAmTCZoJoQmoCa8Jtgm9CcQJywnSCdkJ4AnnCe4J9Qn8CgMKCgoRChgKHwomCkcKYQp0CnsKggqJCpAKlwqeCqUKrAqzCroKwQrICs8K1grdCuQK7wr5CwcLFAsfCy4LOwtMC18LZgtyC34LiguWC6ILqQuwC7cLvgvFC8wL0wvaC+EL6AvvC/YL/QwEDAsMEgwZDCAMJwwuDDUMPAxDDEoMWgxxDI8MpwyuDLcMvgzEDMoM0QzYDN8M5gzqDPEM+Az/DQYNDg0aDSMNLg02DT4NRQ1MDVUNXA1nDW4NdQ18DYYNjQ2WDZ0Npg2tDbYNvw3GDc0N1A3bDeIN6Q3wDfcN/g4MDhMOHw4rDjoORg5UDmAObg56DogOlg6dDqMOqg6xDrgOvw7GDs0O1A7bDuIO6Q7wDvcPAA8JDxAPGw8iDykPMA83D0APRw9OD1UPXA9jD2oPeQ+FD5EPng+sD7MPug/BD8sP1w/pD/oQB0FicmV2ZXVuaTAxQ0RBbWFjcm9uQW9nb25la0NhY3V0ZUNjYXJvbkNjaXJjdW1mbGV4Q2RvdGFjY2VudERjYXJvbkRjcm9hdEVjYXJvbkVkb3RhY2NlbnRFbWFjcm9uRW9nb25la3VuaTFFQkN1bmkwMThGdW5pMDFCN3VuaTAxRUVHYnJldmVHY2Fyb25HY2lyY3VtZmxleHVuaTAxMjJHZG90YWNjZW50dW5pMUUyMHVuaTAxRTRIYmFySGNpcmN1bWZsZXhJSklkb3RhY2NlbnRJbWFjcm9uSW9nb25la0l0aWxkZXVuaTAwNEEwMzAxSmNpcmN1bWZsZXh1bmkwMUU4dW5pMDEzNkxhY3V0ZUxjYXJvbnVuaTAxM0JOYWN1dGVOY2Fyb251bmkwMTQ1RW5nT2h1bmdhcnVtbGF1dE9tYWNyb25SYWN1dGVSY2Fyb251bmkwMTU2U2FjdXRldW5pQTc4QlNjZWRpbGxhU2NpcmN1bWZsZXh1bmkwMjE4dW5pMUU5RVRiYXJUY2Fyb251bmkwMTYydW5pMDIxQVVicmV2ZVVodW5nYXJ1bWxhdXRVbWFjcm9uVW9nb25la1VyaW5nVXRpbGRlV2FjdXRlV2NpcmN1bWZsZXhXZGllcmVzaXNXZ3JhdmVZY2lyY3VtZmxleFlncmF2ZXVuaTFFRjhaYWN1dGVaZG90YWNjZW50dW5pMDEzQi5sb2NsTUFIdW5pMDE0NS5sb2NsTUFIUi5zczA0UmFjdXRlLnNzMDRSY2Fyb24uc3MwNHVuaTAxNTYuc3MwNEkuc3MwNUlhY3V0ZS5zczA1SWNpcmN1bWZsZXguc3MwNUlkaWVyZXNpcy5zczA1SWRvdGFjY2VudC5zczA1SWdyYXZlLnNzMDVJbWFjcm9uLnNzMDVJb2dvbmVrLnNzMDVJdGlsZGUuc3MwNUcuc3MwNkdicmV2ZS5zczA2R2NpcmN1bWZsZXguc3MwNnVuaTAxMjIuc3MwNkdkb3RhY2NlbnQuc3MwNnVuaTFFMjAuc3MwNkFkaWVyZXNpcy5zczA4Q2RvdGFjY2VudC5zczA4RWRpZXJlc2lzLnNzMDhFZG90YWNjZW50LnNzMDhHZG90YWNjZW50LnNzMDhJZGllcmVzaXMuc3MwOElkb3RhY2NlbnQuc3MwOE9kaWVyZXNpcy5zczA4VWRpZXJlc2lzLnNzMDhXZGllcmVzaXMuc3MwOFlkaWVyZXNpcy5zczA4WmRvdGFjY2VudC5zczA4SWRpZXJlc2lzLnNzMDUuc3MwOElkb3RhY2NlbnQuc3MwNS5zczA4R2RvdGFjY2VudC5zczA2LnNzMDhBX0kuZGxpZ1VfSS5kbGlnYWJyZXZldW5pMDFDRWFtYWNyb25hb2dvbmVrY2FjdXRlY2Nhcm9uY2NpcmN1bWZsZXhjZG90YWNjZW50ZGNhcm9uZGNyb2F0ZWNhcm9uZWRvdGFjY2VudGVtYWNyb25lb2dvbmVrdW5pMUVCRHVuaTAyNTl1bmkwMjkydW5pMDFFRmdicmV2ZWdjYXJvbmdjaXJjdW1mbGV4dW5pMDEyM2dkb3RhY2NlbnR1bmkxRTIxdW5pMDFFNWhiYXJoY2lyY3VtZmxleGkubG9jbFRSS2lqaW1hY3JvbmlvZ29uZWtpdGlsZGV1bmkwMjM3dW5pMDA2QTAzMDFqY2lyY3VtZmxleHVuaTAxRTl1bmkwMTM3bGFjdXRlbGNhcm9udW5pMDEzQ25hY3V0ZW5jYXJvbnVuaTAxNDZlbmdvaHVuZ2FydW1sYXV0b21hY3JvbnJhY3V0ZXJjYXJvbnVuaTAxNTdzYWN1dGV1bmlBNzhDc2NlZGlsbGFzY2lyY3VtZmxleHVuaTAyMTl0YmFydGNhcm9udW5pMDE2M3VuaTAyMUJ1YnJldmV1aHVuZ2FydW1sYXV0dW1hY3JvbnVvZ29uZWt1cmluZ3V0aWxkZXdhY3V0ZXdjaXJjdW1mbGV4d2RpZXJlc2lzd2dyYXZleWNpcmN1bWZsZXh5Z3JhdmV1bmkxRUY5emFjdXRlemRvdGFjY2VudHVuaTAxM0MubG9jbE1BSHVuaTAxNDYubG9jbE1BSGEuc3MwMWFhY3V0ZS5zczAxYWJyZXZlLnNzMDF1bmkwMUNFLnNzMDFhY2lyY3VtZmxleC5zczAxYWRpZXJlc2lzLnNzMDFhZ3JhdmUuc3MwMWFtYWNyb24uc3MwMWFvZ29uZWsuc3MwMWFyaW5nLnNzMDFhdGlsZGUuc3MwMWEuc3MwMmFhY3V0ZS5zczAyYWJyZXZlLnNzMDJ1bmkwMUNFLnNzMDJhY2lyY3VtZmxleC5zczAyYWRpZXJlc2lzLnNzMDJhZ3JhdmUuc3MwMmFtYWNyb24uc3MwMmFvZ29uZWsuc3MwMmFyaW5nLnNzMDJhdGlsZGUuc3MwMmwuc3MwM2xhY3V0ZS5zczAzbGNhcm9uLnNzMDN1bmkwMTNDLnNzMDNsc2xhc2guc3MwM2FkaWVyZXNpcy5zczA4Y2RvdGFjY2VudC5zczA4ZWRpZXJlc2lzLnNzMDhlZG90YWNjZW50LnNzMDhnZG90YWNjZW50LnNzMDhpLnNzMDhpZGllcmVzaXMuc3MwOGkubG9jbFRSSy5zczA4aWouc3MwOGlvZ29uZWsuc3MwOGouc3MwOG9kaWVyZXNpcy5zczA4dWRpZXJlc2lzLnNzMDh3ZGllcmVzaXMuc3MwOHlkaWVyZXNpcy5zczA4emRvdGFjY2VudC5zczA4YWRpZXJlc2lzLnNzMDEuc3MwOGFkaWVyZXNpcy5zczAyLnNzMDhmX2YubGlnYXRfdC5saWdhZmkubGlnYWZsLmxpZ2FMYW1iZGF1bmkwM0E5bGFtYmRhcGl1bmkyMTA3dW5pMjRGRnVuaTI3NzZ1bmkyNzc3dW5pMjc3OHVuaTI3Nzl1bmkyNzdBdW5pMjc3QnVuaTI3N0N1bmkyNzdEdW5pMjc3RXVuaTI0RUF1bmkyNDYwdW5pMjQ2MXVuaTI0NjJ1bmkyNDYzdW5pMjQ2NHVuaTI0NjV1bmkyNDY2dW5pMjQ2N3VuaTI0Njh6ZXJvLnNzMDlvbmUuc3MwOXplcm8udGZvbmUudGZ0d28udGZ0aHJlZS50ZmZvdXIudGZmaXZlLnRmc2l4LnRmc2V2ZW4udGZlaWdodC50Zm5pbmUudGZ1bmkyMTUzdW5pMjE1NHVuaTIxNTV1bmkyMDgwdW5pMjA4MXVuaTIwODJ1bmkyMDgzdW5pMjA4NHVuaTIwODV1bmkyMDg2dW5pMjA4N3VuaTIwODh1bmkyMDg5dW5pMjA3MHVuaTAwQjl1bmkwMEIydW5pMDBCM3VuaTIwNzR1bmkyMDc1dW5pMjA3NnVuaTIwNzd1bmkyMDc4dW5pMjA3OXVuaTAwQTB1bmkzMDAyaHlwaGVuX2h5cGhlbl9oeXBoZW5fZ3JlYXRlci5saWdhaHlwaGVuX2h5cGhlbl9ncmVhdGVyLmxpZ2FoeXBoZW5fZ3JlYXRlci5saWdhdW5pMzAwM3VuaUZGMDZ1bmlGRjBBdW5pRkYyMHVuaUZGM0N1bmlGRjFBdW5pRkYwQ3VuaUZGMDF1bmlGRjAzdW5pRkYwNXVuaUZGMEV1bmlGRjFGdW5pRkYwMnVuaUZGMDd1bmlGRjFCdW5pRkYwRnBlcmlvZC5zczA4Y29sb24uc3MwOHNlbWljb2xvbi5zczA4ZWxsaXBzaXMuc3MwOGV4Y2xhbS5zczA4ZXhjbGFtZG93bi5zczA4cXVlc3Rpb24uc3MwOHF1ZXN0aW9uZG93bi5zczA4cGVyaW9kY2VudGVyZWQuc3MwOHVuaUZGM0Z1bmlGRjFBLnNzMDh1bmlGRjAxLnNzMDh1bmlGRjBFLnNzMDh1bmlGRjFGLnNzMDh1bmlGRjFCLnNzMDh1bmkwMEFEdW5pMzAxQ3VuaUZGMER1bmkzMDA4dW5pMzAwOXVuaTMwMTB1bmkzMDExdW5pRkY1QnVuaUZGNUR1bmkzMDBDdW5pMzAwRHVuaTMwMEF1bmkzMDBCdW5pMzAxNHVuaTMwMTV1bmkzMDBFdW5pMzAwRnVuaTMwMTZ1bmkzMDE3dW5pRkYzQnVuaUZGM0R1bmlGRjA4dW5pRkYwOXVuaTBFM0ZsZXNzX2h5cGhlbi5saWdhbGVzc19oeXBoZW5faHlwaGVuLmxpZ2FsZXNzX2h5cGhlbl9oeXBoZW5faHlwaGVuLmxpZ2FsZXNzX2h5cGhlbl9ncmVhdGVyLmxpZ2F1bmkyNjM5c21pbGVmYWNldW5pMjExN21pbnV0ZXNlY29uZHVuaTIxMTZ1bmkyNDBDdW5pMjNDRXVuaTI0MEJFdXJvdW5pMjBCNHVuaTIwQkR1bmkyMEI5dW5pMjBBQW5vdGVxdWFsZ3JlYXRlcmVxdWFsbGVzc2VxdWFsYXBwcm94ZXF1YWxpbmZpbml0eWludGVncmFsdW5pMjIwNnByb2R1Y3RzdW1tYXRpb25yYWRpY2FscGFydGlhbGRpZmZ1bmkwMEI1YXJyb3d1cHVuaTIxOTdhcnJvd3JpZ2h0dW5pMjE5OGFycm93ZG93bnVuaTIxOTlhcnJvd2xlZnR1bmkyMTk2YXJyb3dib3RoYXJyb3d1cGRudW5pMjE5RHVuaTIxRTR1bmkyMUU1dW5pMjFBOXVuaTIxQUF1bmkyMUIwdW5pMjFCMXVuaTIxQjN1bmkyMUI0Y2FycmlhZ2VyZXR1cm51bmkyMUU3YXJyb3d1cC5zczA3dW5pMjE5Ny5zczA3YXJyb3dyaWdodC5zczA3dW5pMjE5OC5zczA3YXJyb3dkb3duLnNzMDd1bmkyMTk5LnNzMDdhcnJvd2xlZnQuc3MwN3VuaTIxOTYuc3MwN2Fycm93Ym90aC5zczA3YXJyb3d1cGRuLnNzMDd1bmkyNUNGY2lyY2xldW5pMjVDQ2xvemVuZ2V0cmlhZ3VwdW5pMjVCNnRyaWFnZG51bmkyNUMwdW5pMjVCM3VuaTI1Qjd1bmkyNUJEdW5pMjVDMXVuaTAzMDh1bmkwMzA3Z3JhdmVjb21iYWN1dGVjb21idW5pMDMwQnVuaTAzMEMuYWx0dW5pMDMwMnVuaTAzMEN1bmkwMzA2dW5pMDMwQXRpbGRlY29tYnVuaTAzMDR1bmkwMzEydW5pMDMyNnVuaTAzMjd1bmkwMzI4dW5pMDMzNXVuaTAzMjYubG9jbE1BSHVuaTAzMDguc3MwOHVuaTAzMDcuc3MwOGRpZXJlc2lzLnNzMDhkb3RhY2NlbnQuc3MwOHVuaTAyQkN1bmkwMkI5dW5pMDJDOE51ZXZvR2xpZm9ibGFja0NpcmNsZWRibGFja0NpcmNsZWRTdHJva2Vjb3B5cmlnaHQgbWlzc2luZ0dlaXN0IFJlZ3VsYXIBAQIAAQAFABAAFgAcACIAKAA2AD4ARABrAHUAfgCHAJ8AogCvALoAwQDJANEA1gDkAO8A+wECAVABZQF7AYUBjgGTAZoBpgGwAbMBwwHLAdUB3QHkAeoCBAIQAisCRAJWAmUCcAJ4AoECjwKWAp8CpwKtArICwwLOAtsC6wLwAwYD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AAAAAAAAAAD/9gAAAAD/7AAA/+IAAP/2AAAAAP/YAAAAAP/x/+L/7AAA/9j/5//s/+z/7AAAAAAAAAAAAAAAAP+wAAAAAAAAAAD/5wAA/+cAAAAAAAD/9gAA/7oAAAAAAAAAAAAA//YAAAAAAAAAAAAAAAD/8QAA//H/9gAA/+IAAAAA//EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP9+/+wAFAAAABn/2P/s/7oAAAAAAAD/0//2AAAAAP/sAAAAAP+c//b/nP/i/+IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/8f+w/+IAAAAAAAr/7AAA/84AAAAAAAAAAAAA/7oAAAAAAAAAAP+wAAD/sP/nAAAAAAAAAAD/7AAA/9gAAAAAAAD/9gAA/84AAAAAAAAAAP/iAAAAAAAAAAAAAAAA/+wAAAAAAAAAAAAAAAAAAAAA/+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAA//EAAAAAAAAAAAAAAAAAAP/YAAD/7AAAAAD/9gAAAAD/4gAA//EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/7AAA/+IAAAAAAAAAAAAA/9j/2AAAAAAAAAAAAAAAAAAAAAD/7AAAAAAAAAAAAAAAAAAAAAAAAAAA//b/7P/OAAD/9v/nAAAAAAAAAAAAAAAA//gAFAAAAAAAAAAAAAAAAAAAAAD/2AAA/+wAAP/x//EAAP/nAAD/8f/sAAAAAP/2//YAAAAA/+wAAAAAAAD/8QAAAAAAAAAAAAD/ugAA/84ABf/sAAD/2P/iAAD/9v/n//b/9v/OAAD/7AAA//sAAAAAAAAAAP/xAAAAAAAAAAAAAAAAAAD/7P/2/+IAAP/xAAAAAAAA/+L/7AAAAAAAAP/E/+L/xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/+IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/sAAAAAP/sAAAAAAAAAAAAAAAAAAD/8QAAAAAAAAAAAAAAAAAAAAAAAAAA//H/9gAAAAD/7AAA/+cAAAAAAAAAAAAA/84AAAAAAAAAAP/OAAD/xAAAAAAAAAAAAAAAAAAA//b/7AAAAAD/9v/T/84AAP/sAAD/7AAAAAD/9gAAAAAAAAAAAAAAAAAAAAD/5wAAAAAAAAAAAAAAAAAAAAAAAAAA//EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/ugAA/84AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEATQACAA4ADwAVABkAJAAmACcALwAyADwAPwBCAEcASABNAE4AWABaAFsAXwBnAGwAdwB4AH0AfgCEAIoArgC6ALsAwQDFANIA2wDeAOkA7QDwAPUA9gD7APwBBgEIAQkBDQEVARYBGgElASYBKwEsATIBOAFDAU4BWAFdAWUBZgFrAW0BbwFwAXEBcwF5AY4BzAHNAhkCIgIlAmsAAgBCAA4ADgABAA8ADwACABUAFQAIABkAGQADACQAJAAXACYAJgAEACcAJwAFAC8ALwAQADIAMgAQADwAPAAMAD8APwAOAEIAQgAHAEcASAAGAE0ATQAGAE4ATgAIAFgAWAAJAFoAWgAIAFsAWwAKAF8AXwAIAGcAZwALAGwAbAAMAHcAeAANAH0AfQAOAH4AfgANAIQAhAAPAIoAigAKAK4ArgASALoAuwAUAMEAwQAQAMUAxQAUANIA0gARANsA2wATAN4A3gAQAOkA6QAQAO0A7QAaAPAA8AASAPUA9gATAPsA+wATAPwA/AAUAQYBBgAUAQgBCAAQAQkBCQAVAQ0BDQAUARUBFgAWARoBGgAYASUBJgAZASsBKwAaASwBLAAZATIBMgAbATgBOAATAUMBQwATAU4BTgAQAVgBWAAQAV0BXQAQAWUBZQARAWYBZgAWAW8BbwAXAXABcAAIAXEBcQAGAXMBcwAXAXkBeQAIAY4BjgAIAcwBzAANAhkCGQARAiICIgAcAiUCJQAIAAIATgACAAIADwAOAA4AAQAPAA8AAwAVABUAAQAZABkAAQAkACQADAAmACYAEwAnACcAAwAvAC8AEwAyADIAEwA8ADwAAgA/AD8AAQBCAEIAAQBHAEgAAQBNAE0AAQBOAE4AAwBYAFgAAQBaAFoAAwBbAFsAAQBfAF8AAwBnAGcABABsAGwABQB3AHgABgB9AH0AEgB+AH4ABgCKAIoAAQCuAK4ABwC6ALoAEwC7ALsACQDBAMEACQDFAMUACQDSANIACADTANMACQDbANsAFQDeAN4AEwDpAOkAEADtAO0AFQDwAPAAGQD1APYAFQD7APsAFQD8APwACQEGAQYAFQEIAQgACQEJAQkAFQENAQ0ACQEVARYACwEaARoADQElASYADgErASsAEQEsASwADgEyATIAGgE4ATgABwFDAUMACQFOAU4AEwFYAVgAFQFdAV0AEAFlAWUACAFmAWYACwFrAWsADwFtAW0ADwFvAW8ADAFwAXAAAwFzAXMADAF0AXQAGAF2AXYAAwF3AXcABAGOAY4AAwG+Ab4AFgG/Ab8AFAHFAcUACgHMAcwADwHNAc0ABgHdAd0AFgHjAeMACgIZAhkACAIiAiIAFwIlAiUAAwJrAmsADwAEAAAAAQAIAAEMrgAMAAMAVACiAAEAIgHAAcEBwwHEAccByAHSAdQB2wHeAd8B4AHhAeIB4wHkAeUB5wHoAeoB6wIRAhICKAIpAjACNAI1AjYCPQJBAlQCdgJ3ABMAAA2+AAANxAAADcoAAA3QAAAN1gAADdwAAA3iAAAN6AAADegAAA3uAAAN9AAADfoAAA4AAAEMzgABDMIAAgzIAAEMzgAADgYAAA4MACIAzgAAAAAAzgAAAAAA4AAAAAAAAADUAAAA5gAAAAAA2gAAAAAA5gAAAAAA4AAAAAAA5gAAAAANoAAAAAAA7AAAAAAA8gAAAAABFgAAAAABFgD4AAABEAAAAAAA/gEEAAABFgAAAAABCgAAAAABFgAAAAABEAAAAAABFgAAAAABHAAAAAANyAAAAAABIgAAAAABKAAAAAABLgE0AAAL7AvyAAABOgAAAAAKHgpIAAAKigqQAAABQAAAAAAAAAAAAUYBTAAAAAABTAAAAAAAAQCMAhIAAQBqABIAAQCIAhIAAQBqAhIAAQBfAhIAAQCPAhIAAQEbAhIAAQBiABIAAQEYAhIAAQEmACIAAQBgAhIAAQERAhIAAQBiAhIAAQBKAhIAAQHHAhIAAQC4AhIAAQFcAsYAAQFbAAAAAQEXAhIAAQCCAhIAAQH6AAAAAQGqAhIABAAAAAEACAABC8IADAABC9gAEgABAAEBugABAAQAAQCOAB8ABAAAAAEACAABCo4ADAADCqgAmgACABcAAgAMAAAADwAiAAsAJAAlAB8AJwAtACEALwAvACgAMQBGACkASABMAD8ATgBWAEQAWgBgAE0AYgBlAFQAZwB2AFgAeAB8AGgAfgCrAG0ArgC5AJsAuwDAAKcAxQDRAK0A0wEFALoBCQEOAO0BEAETAPMBFQEkAPcBJgEqAQcBLAFkAQwBaQFqAUUBRwqECooAAAqECooAAAqECooAAAqECooAAAqECooAAAqECooAAAqECooAAAqECooAAAqECooAAAqECooAAAqECooAAAAACJwIogAACJwIogAACJwIogAACJwIogAACJwIogAACJwIogAAB6wHsgAAB7gHvgAAB6wHsgAAB7gHvgg2CDwIQgg2CDwIQgg2CDwIQgg2CDwIQgg2CDwIQgg2CDwIQgg2CDwIQgg2CDwIQgg2CDwIQgg2CDwIQgAAB8QAAAAAB8QAAAAACJwIogAACJwIogAACJwIogAACJwIogAACJwIogAACJwIogAACJwIogAAB8oAAAAAB8oAAAhICE4IVAhIB9AIVAhICE4IVAhICE4IVAhICE4IVAhICE4IVAhICE4IVAhICE4IVAhICE4IVAhICE4IVAAAB9YAAAAAB9YAAAAAB9YAAAAAB9wH6AAAB9wH6AAAB9wH6AAACE4IGAAACE4IGAAACE4IGAAACE4IGAAAB+IH6AAACB4IJAAACB4IJAAACB4IJAAACB4IJAAACB4IJAAACFoIYAAACFoIYAAACFoIYAAACFoIYAAACFoIYAAACFoIYAAACFoIYAAAB+4H9AAACFoIYAAACJwIogAAB/oIAAAAB/oIAAAAB/oIAAAAB/oIAAAACAYIMAAACAYIMAAACAYIMAAACAYIMAAACAYIMAAACAYIMAAACAwIEgAACAwIEgAACAwIEgAACAwIEgAACAwIEgqwCrYKvAqwCrYKvAqwCrYKvAqwCrYKvAqwCrYKvAqwCrYKvAqwCrYKvAqwCrYKvAqwCrYKvAqwCrYKvAqwCrYKvAAACGYIbAAACGYIbAAACGYIbAAACGYIbAAACGYIbAAACHIIeAAACHIIeAAACHIIeAAACHIIeAAACHIIeAAACHIIeAAACH4IhAAACH4IhAAACH4IhAAACH4IhAAACE4IGAAACB4IJAAACCoIMAAACCoIMAAACCoIMAAACCoIMAiKCJAIlgiKCJAIlgiKCJAIlgiKCJAIlgiKCJAIlgiKCJAIlgiKCJAIlgiKCJAIlgiKCJAIlgAACJwIogAACJwIogAACJwIogAACJwIogAACJwIogAACJwIogqECooAAAAACJwIogg2CDwIQgg2CDwIQgAACJwIoghICE4IVAhICE4IVAAACFoIYAqwCrYKvAAACGYIbAAACHIIeAAACH4IhAiKCJAIlgiKCJAIlgAACJwIognCCcgJzgnCCcgJzgnCCcgJzgnCCcgJzgnCCcgJzgnCCcgJzgnCCcgJzgnCCcgJzgnCCcgJzgnCCcgJzgnCCcgJzgioCK4ItAAACdQJ2gAACdQJ2gAACdQJ2gAACdQJ2gAACdQJ2gAACdQJ2glECUoJ2glECUoJ2glECUoJ2glECUoJ2glECUoJ2glECUoJ2glECUoJ2glECUoJ2glECUoJ2glECUoJ2gi6CMAIxgAACMwAAAAACMwAAAAACVAAAAAACVAAAAAACVAAAAAACVAAAAAACVAAAAAACVAAAAAACVAAAAAACVAAAAAACSAAAAAACSAAAAAACSAAAAlcCWIAAAlcCWIAAAlcCWIAAAlcCWIAAAlcCWIAAAlcCWIAAAlcCWIAAAlcCVYAAAlcCWIAAAlcCWIAAAlcCWIAAAAACWgAAAAACWgAAAAACWgAAAAACWgAAAAACSAI0gAACSAI0gAACSAI0gAACQ4JXAAACQ4JXAAACQ4JXAAACQ4JXAAACTgI2AAACN4I5AAACRQJGgAACRQJGgAACRQJGgAACRQJGgAACRQJGgAACRQJGgAACdQJ2gAACdQJ2gAACdQJ2gAACdQJ2gAACdQJ2gAACdQJ2gAACdQJ2gAACdQJ2gAACdQJ2gjqCPAI9gAACPwJJgAACPwJJgAACPwJJgAACPwJJgAACQIJCAAACQIJCAAACQIJCAAACQIJCAAACQIJCAAACQIJCAAAAAAK4gAAAAAK4gAAAAAK4gAAAAAK4gAAAAAK4gluCXQJegluCXQJegluCXQJegluCXQJegluCXQJegluCXQJegluCXQJegluCXQJegluCXQJegluCXQJegluCXQJegAACYAJhgAACYAJhgAACYAJhgAACYAJhgAACYAJhgAACYwAAAAACYwAAAAACYwAAAAACYwAAAAACYwAAAAACYwAAAAACZIJmAAACZIJmAAACZIJmAAACZIJmAAACQ4JXAAACRQJGgmeCaQJqgmeCaQJqgmeCaQJqgmeCaQJqgmeCaQJqgmeCaQJqgmeCaQJqgmeCaQJqgmeCaQJqgmeCaQJqgmeCaQJqgmwCbYJvAmwCbYJvAmwCbYJvAmwCbYJvAmwCbYJvAmwCbYJvAmwCbYJvAmwCbYJvAmwCbYJvAmwCbYJvAmwCbYJvAAACSwJMgAACSwJMgAACSAJJgAACSwJMgAACTgJPgnCCcgJzgAACdQJ2glECUoJ2glECUoJ2gAACVAAAAlcCWIAAAlcCWIAAAlcCWIAAAlcCVYAAAlcCWIAAAAACWgAAAAACdQJ2gluCXQJegAACYAJhgAACYwAAAAACZIJmAmeCaQJqgmwCbYJvAnCCcgJzgAACdQJ2gABAUICxgABAUgAAAABAZoCxgABAaAAAAABAScCxgABAWACxgABApoCxgABAd4CxgABAUgCxgABAKsCxgABAVwAAAABAXsCxgABAXsAAAABAVECxgABAV8AAAABAUsCxgABASECxgABASEAAAABATkAAAABAXICxgABAXEAAAABAUwCxgABAUwAAAABAiMAAAABAT0CxwABAT8AAAABALQAAAABAIgCxgABAIgAAAABAXYCxgABAXYAAAABAcgCxgABAcgAAAABATwCxgABATwAAAABARcCxgABARcAAAABAYUAAAABANsCxgABANsAAAABAXMCxgABAXMAAAABAtoAAAABAo4CEAABAo4AAAABAMoCEgABARYCEgABARYAAgABAScCEgABASoAAAABAPQAAAABAbcCEgABAbcAAAABAvoAAAABAq4CEAABAq4AAAABAMUCEgABAQkCEgABAQwAAAABAHoCxgABASMCEgABASMAAAABAHsCxgABAHsAAAABAIcCxgABAIcAAAABAMgCxgABAMgAAAABAW4AAAABASICEAABAR4CEgABAXYCEgABAKYAAAABAHsCEgABAIoCEgABAfAAAAABARwCEgABARwAAAABAZsCEgABAZsAAAABAQ0CEgABARQCEgABARQAAAABAeIAAAABAQwCEgABAQoAAAABAgcAAAABASECEgABAR4AAAABAh0AAwABARoCEgABARkAAAABASICEgABASIAAAAFAAAAAQAIAAEADAAcAAMAJgCGAAIAAgKCApEAAAKTApUAEAABAAMArACtAWYAEwABAUoAAQFQAAEBVgABAVwAAQFiAAEBaAABAW4AAQF0AAEBdAABAXoAAQGAAAEBhgABAYwAAgBaAAIATgAAAFQAAgBaAAEBkgABAZgAAQCrAAAAAQCzAAAAAQCPAAAAAwAIADQAZgACAA4AFAAAABoAIAAmAAECiwAAAAEBUALGAAEEJQAAAAEDewLGAAEDewAAAAIADgAUABoAIAAmACwAAQG9AAAAAQFZAsYAAQFZAAAAAQQ3AAAAAQONAsYAAQONAAAAAgAAAAAADgAAAAAAFAABAOoAAAABAhoAAAAGABAAAQAKAAAAAQAMABwAAQAiALQAAgACAoICjgAAApQClQANAAEAAQKlAA8AAAA+AAAARAAAAEoAAABQAAAAVgAAAFwAAABiAAAAaAAAAGgAAABuAAAAdAAAAHoAAACAAAAAhgAAAIwAAQCnAhIAAQBcAhIAAQCpAhIAAQBTAhIAAQCJAhIAAQBBAhIAAQC6AhIAAQC9AhIAAQCNAhIAAQDXAhIAAQCvAhIAAQBeAhIAAQC2AhIAAQBkAhIAAQAEAAEAbQISAAAAAQAAAAoCsAmaAAJERkxUAA5sYXRuAHoACgABTUFIIAA6AAD//wAVAAAADAAYACQAMAA8AFIAXgBqAHYAggCOAJoApgCyAL4AygDWAOIA7gD6AAD//wAWAAEADQAZACUAMQA9AEgAUwBfAGsAdwCDAI8AmwCnALMAvwDLANcA4wDvAPsAOgAJQVpFIABqQ1JUIACcS0FaIADOTUFIIAEATU9MIAEyTkxEIAFkUk9NIAGWVEFUIAHIVFJLIAH6AAD//wAVAAIADgAaACYAMgA+AFQAYABsAHgAhACQAJwAqAC0AMAAzADYAOQA8AD8AAD//wAWAAMADwAbACcAMwA/AEkAVQBhAG0AeQCFAJEAnQCpALUAwQDNANkA5QDxAP0AAP//ABYABAAQABwAKAA0AEAASgBWAGIAbgB6AIYAkgCeAKoAtgDCAM4A2gDmAPIA/gAA//8AFgAFABEAHQApADUAQQBLAFcAYwBvAHsAhwCTAJ8AqwC3AMMAzwDbAOcA8wD/AAD//wAWAAYAEgAeACoANgBCAEwAWABkAHAAfACIAJQAoACsALgAxADQANwA6AD0AQAAAP//ABYABwATAB8AKwA3AEMATQBZAGUAcQB9AIkAlQChAK0AuQDFANEA3QDpAPUBAQAA//8AFgAIABQAIAAsADgARABOAFoAZgByAH4AigCWAKIArgC6AMYA0gDeAOoA9gECAAD//wAWAAkAFQAhAC0AOQBFAE8AWwBnAHMAfwCLAJcAowCvALsAxwDTAN8A6wD3AQMAAP//ABYACgAWACIALgA6AEYAUABcAGgAdACAAIwAmACkALAAvADIANQA4ADsAPgBBAAA//8AFgALABcAIwAvADsARwBRAF0AaQB1AIEAjQCZAKUAsQC9AMkA1QDhAO0A+QEFAQZhYWx0BiZhYWx0BiZhYWx0BiZhYWx0BiZhYWx0BiZhYWx0BiZhYWx0BiZhYWx0BiZhYWx0BiZhYWx0BiZhYWx0BiZhYWx0BiZjY21wBi5jY21wBi5jY21wBi5jY21wBi5jY21wBi5jY21wBi5jY21wBi5jY21wBi5jY21wBi5jY21wBi5jY21wBi5jY21wBi5kbGlnBjRkbGlnBjRkbGlnBjRkbGlnBjRkbGlnBjRkbGlnBjRkbGlnBjRkbGlnBjRkbGlnBjRkbGlnBjRkbGlnBjRkbGlnBjRmcmFjBjpmcmFjBjpmcmFjBjpmcmFjBjpmcmFjBjpmcmFjBjpmcmFjBjpmcmFjBjpmcmFjBjpmcmFjBjpmcmFjBjpmcmFjBjpmd2lkBkBmd2lkBkBmd2lkBkBmd2lkBkBmd2lkBkBmd2lkBkBmd2lkBkBmd2lkBkBmd2lkBkBmd2lkBkBmd2lkBkBmd2lkBkBsaWdhBkZsaWdhBkZsaWdhBkZsaWdhBkZsaWdhBkZsaWdhBkZsaWdhBkZsaWdhBkZsaWdhBkZsaWdhBkZsaWdhBkZsaWdhBkZsb2NsBkxsb2NsBmRsb2NsBmRsb2NsBmRsb2NsBlJsb2NsBl5sb2NsBlhsb2NsBl5sb2NsBmRsb2NsBmRvcmRuBmpvcmRuBmpvcmRuBmpvcmRuBmpvcmRuBmpvcmRuBmpvcmRuBmpvcmRuBmpvcmRuBmpvcmRuBmpvcmRuBmpvcmRuBmpwbnVtBnJwbnVtBnJwbnVtBnJwbnVtBnJwbnVtBnJwbnVtBnJwbnVtBnJwbnVtBnJwbnVtBnJwbnVtBnJwbnVtBnJwbnVtBnJzaW5mBnhzaW5mBnhzaW5mBnhzaW5mBnhzaW5mBnhzaW5mBnhzaW5mBnhzaW5mBnhzaW5mBnhzaW5mBnhzaW5mBnhzaW5mBnhzczAxBn5zczAxBn5zczAxBn5zczAxBn5zczAxBn5zczAxBn5zczAxBn5zczAxBn5zczAxBn5zczAxBn5zczAxBn5zczAxBn5zczAyBohzczAyBohzczAyBohzczAyBohzczAyBohzczAyBohzczAyBohzczAyBohzczAyBohzczAyBohzczAyBohzczAyBohzczAzBpJzczAzBpJzczAzBpJzczAzBpJzczAzBpJzczAzBpJzczAzBpJzczAzBpJzczAzBpJzczAzBpJzczAzBpJzczAzBpJzczA0BpxzczA0BpxzczA0BpxzczA0BpxzczA0BpxzczA0BpxzczA0BpxzczA0BpxzczA0BpxzczA0BpxzczA0BpxzczA0BpxzczA1BqZzczA1BqZzczA1BqZzczA1BqZzczA1BqZzczA1BqZzczA1BqZzczA1BqZzczA1BqZzczA1BqZzczA1BqZzczA1BqZzczA2BrBzczA2BrBzczA2BrBzczA2BrBzczA2BrBzczA2BrBzczA2BrBzczA2BrBzczA2BrBzczA2BrBzczA2BrBzczA2BrBzczA3BrpzczA3BrpzczA3BrpzczA3BrpzczA3BrpzczA3BrpzczA3BrpzczA3BrpzczA3BrpzczA3BrpzczA3BrpzczA3BrpzczA4BsRzczA4BsRzczA4BsRzczA4BsRzczA4BsRzczA4BsRzczA4BsRzczA4BsRzczA4BsRzczA4BsRzczA4BsRzczA4BsRzczA5Bs5zczA5Bs5zczA5Bs5zczA5Bs5zczA5Bs5zczA5Bs5zczA5Bs5zczA5Bs5zczA5Bs5zczA5Bs5zczA5Bs5zczA5Bs5zdWJzBthzdWJzBthzdWJzBthzdWJzBthzdWJzBthzdWJzBthzdWJzBthzdWJzBthzdWJzBthzdWJzBthzdWJzBthzdWJzBthzdXBzBt5zdXBzBt5zdXBzBt5zdXBzBt5zdXBzBt5zdXBzBt5zdXBzBt5zdXBzBt5zdXBzBt5zdXBzBt5zdXBzBt5zdXBzBt50bnVtBuR0bnVtBuR0bnVtBuR0bnVtBuR0bnVtBuR0bnVt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"}

================================================
FILE: apps/www/app/og/geist-semibold-otf.json
================================================
{"base64Font":"T1RUTwAMAIAAAwBAQ0ZGIHIR/08AABlsAAC8I0dERUZznnHMAADVkAAAAdZHUE9TY4mY0QAA12gAACqMR1NVQsbFMjAAAQH0AAANHE9TLzI+rl/YAAANbAAAAGBjbWFwVC6iugAAEUQAAAgGaGVhZCxmteIAAADUAAAANmhoZWENAAmoAAANSAAAACRobXR4MmWPlAAAAQwAAAw8bWF4cAMPUAAAAADMAAAABm5hbWVgE49UAAANzAAAA3Zwb3N0/58AMgAAGUwAAAAgAABQAAMPAAAAAQAAAAEzMy4X/pdfDzz1AAMD6AAAAADiJx99AAAAAOInH33/3/8ZCSIDuAAAAAcAAgAAAAAAAAHbAFgA7AAAAs4AFwLOABcCzgAXAs4AFwLOABcCzgAXAs4AFwLOABcCzgAXAs4AFwLOABcEAAAXArcAUALVACsC1QArAtUAKwLVACsC1QArAtUAKwLJAFACyQBQAxkAKwMZACsCZwBQAmcAUAJnAFACZwBQAmcAUAJnAFACZwBQAmcAUAJnAFACZwBQAugAKwJYAFAC1gArAtYAKwLWACsC1gArAtYAKwLWACsC1gArAwEAKwLOAFADBwAeAs4AUAEiAFADiwBQASIAUAEi//MBIv/uASIATgEiAAwBIgAAASIAKgEi/+kCaQA3AmkANwJpADcCrwBQAq8AUAKvAFACSgBQAkoAUAJKAFACSgBQAmwABQOGAFAC7ABQAuwAUALsAFAC7ABQAuwAUALpAFAC/AArAvwAKwL8ACsC/AArAvwAKwL8ACsC/AArAv8ALQL8ACsEUAArApgAUAJ6AFAC9gArArEAUAKxAFACsQBQArEAUAKcADUCnAA1ApwANQKcADUCnAA1ApwANQLVAFACZgAbAmYAGwJmABsCZgAbAmYAGwK7AEECuwBBArsAQQK7AEECuwBBArsAQQK7AEECuwBBArsAQQK7AEECuwBBAs0AFwPEABcDxAAXA8QAFwPEABcDxAAXArIAHAKhABcCoQAXAqEAFwKhABcCoQAXAqEAFwJCABwCQwAcAkIAHAJCABwAwAArAkoAUALsAFACugBQAroAUAK6AFACugBQAcoAKwHKACsBygArAcoAKwHKACsBygArAcoAKwHKACsBygArAs4AKwLOACsCzgArAs4AKwLOACsCzgArAs4AFwLVACsCZwBQAmcAUALWACsBIv/xASIATgL8ACsCuwBBA8QAFwKhABcCQgAcAcoAKwHKACsCzgArBJcAFwSEAEECVgApAlYAKQJWACkCVgApAlYAKQJWACkCVgApAlYAKQJWACkCVgApAlYAKQO6ACkCbwBGAkkAKQJJACkCSQApAkkAKQJJACkCSQApAm8AKQKLACkCpgApAl8AKQJTACkCUwApAlMAKQJTACkCUwApAlMAKQJTACkCUwApAlMAKQJTACkCUwApAbAAMgJvACkCbwApAm8AKQJvACkCbwApAm8AKQJvACkCkQApAlkARgJ1ADICWf/oAQ0ARAENAEYBDQBGAQ3/6AEN/+MBDQBEAQ0AAgEN//YBDQAfAQ3/3wI3AEQBNP/9ATT//QE0//0BNP/9AnQARgJ0/+gCdABGAToARgE6AEYBQABGAToARgFAAAADfABGAlkARgJZAEYCWQBGAlkARgJZAEYCWQBGAl8AKQJfACkCXwApAl8AKQJfACkCXwApAl8AKQJQABoCXwApA+AAKQJvAEYCaABGAm8AKQGcAEYBnABGAZwAPQGcAEECMAApAjAAKQIwACkCMAApAjAAKQIwACkCewBGAa0ALQGtAC0BrQAtAa0ALQGtAC0CVQBGAlUARgJVAEYCVQBGAlUARgJVAEYCVQBGAlUARgJVAEYCVQBGAlUARgJJABYDRwAWA0cAFgNHABYDRwAWA0cAFgJ1AC8COgAWAjoAFgI6ABYCOgAWAjoAFgI6ABYCRAA5AkQAOQJEADkCRAA5AMEAKwE6AEYCWQBGAkoAJAJKACQCSgAkAkoAJAJKACQCSgAkAkoAJAJKACQCSgAkAkoAJAJKACQCbwApAm8AKQJvACkCbwApAm8AKQJvACkCbwApAm8AKQJvACkCbwApAm8AKQEgAFABIABQATcATgEgAEoBlQBGAlYAKQJJACkCUwApAlMAKQJvACkBDQBEAQ3/5wENAEQBDQAfAioARAE0//0CXwApAlUARgNHABYCOgAWAkQAOQJKACQCbwApAwAAMgK9ADIC2AAyAwoALQGuACsBrgArAs4AFwKiAFACtwBQAmUAUAJlAFACMwBQApoAPANHADICZwBQAmcAUAJnAFAEAAAcAqUALwLpAE0C6QBNAq0AUAKtAFADCAA3A4YAUALJAFAC/AArAskAUAKYAFACzwArAmYAGwJUABcCVAAXA1kAKwKxABwCmQAlAx0AUAO4AFAECgBQAskAUAKiAFADhwBQAu4APASIADcESQBQApwANQLyACwC8gArASIAUAEi/+8CaQA3AxoAGwQIAFACugA1Ax0AGwLrADIC8gAcAvwAKwL8ABcEHwAcAtYAUAMIAFACoQAXAqIAFwLgABwC2QAlApkAUAEiAFAC6AArAukATQL8ACsCVAAXAlwAKQJxACsCYgBGAfAARgHwAEYBxwBGAh8AMgLUACUCVAApAlQAKQJUACkDtAAvAioAHgJMAEYCTABGAkwARgJ4AEYCeABGAqcAMgLjAEYCUgBGAl8AKQJbAEYCbwBGAkkAKQJDACkCOgAWAjoAFgK8ACkCdQAvAnkARgK0AEYDRgBGA5gARgJbAEYCWgBGA00ARgKaADID9AAyA58ARgIwACkCVwApAlcAKQENAEQBDf/lATT//QJ1ADIDRwBGAmUARgKAADICswAyAuMALwJfACkCbwAWA8EALwKOAEYCqQBGAkkAFgJJABYCmwAvAr4ARgJZAEYBIABQAlMAKQJMAEYCXwApAjoAFgLIABcC9AArAnAAFwKbAC0CVQAlArAAMAGrACYCggA7An8ALwKZAC8CkAA5AogAOQJQACUChgAlAosAOQM1ACkDNQApAzUAKQM1ACkDNQApAzUAKQM1ACkDNQApAzUAKQM1ACkDSQApA0kAKQNJACkDSQApA0kAKQNJACkDSQApA0kAKQNJACkDSQApArAAMAHoABsCdQAWAnUAcQJ1AEACdQArAnUAKwJ1ADkCdQA7AnUAQAJ1ABMCdQA5AlgADANFACsDLQArA2gAKwMNACsDOgArA2AAKwM3ACsDagArA1kAKwM0ACsBkwAtAQ4AHgFqAC0BfAAtAX8AKwFtAC0BawAtAUsAHgF/AC0BcAAtAZMALQEOAB4BagAtAXwALQF/ACsBbQAtAWsALQFLAB4BfwAtAXAALQDsAAAJYAA+BwgAPgSwAD4A5QApAOUAKQEyAFABMgBQApIAKQDzADAA8wAwAkkAKQJJACkA5QApAUIAKQGtACkBhwApAij//wH8ACIB+gArAOMAKQEwAFABNwBQAn4AKQDnAC4A5wAuAkkAKQJJACkA4wApAaYAKQJWACkDkgApAjQAKQNgACkBQgAsAUIAHAGhACsBoQAcAYcAUAGHABwBfwApAX8AKgFrACoBawApAYQAKQGEACkCVgApAlYAKgGKACoBigApAYIAKQGCACoBcwApAXMAKQDnACoBsAArAbAAKwGvACsA6QArAOcAKgJoACoCaAApAXQAKgF0ACkBdwArAMIAKwIMADIClgBQBLAAPgcIAD4JYAA+BwcAPgNJACkDSQApAlgACAOxACsCqAAlAnkAIwJLADUDOQArAk8AKwJPACsDdgBQAZgAKQEBACkBtAAqARwAUAEcAFACQABQAkMAUAROAFACWABMA3YAKwJYADECSQApAkMAKwKcADUC4QA1Ar0ANQLWACoCuwBQA0YAUAJ8ADUCoQAXAi8AKQIvACkB8AAqAi8AKQJ8AFACLwApAiEAKwIdACkCLwApAi8AKgJAACkCDgApAg4AKQHaACkBnQApA1gAKQGrAAkCkwAXAqkAGwIkABwCmgAWAmQAKQJoAFMDMAApBHwAKQLFACsCeQArAx0AKwJ6ACwCxQArAnoAKwMdACwCeQAsBCwAKwLFACwCiQArApwAKwKcACsCkwArApMAKwKWACsClgArApYAKwKYACsClgArA14AFwHOACsCYQAsAvsAKwJhACwBzgArAmEAKwL7ACsCYQAsA1wAKwHOACwDSQArA0kAKwNJACsCPgArA2IAFwMuAFADYgAXAy4AFwNiABcDLgBQA2IAFwMuABcAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAA3AAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAAApAAAAKQAAACkAAABsAAAAKQAAACkBmQApANgAKQEQACkBEAApAbIAKQGOACkBjgApAYEAKQEZACkBoAApAXQAKQFJACkBHgApAY4AKQDXACkA5gA3AQEAKQC+ACkDNQApA0kAKQABAAADmP8kAGQJYP/f/hQJIgABAAAAAAAAAAAAAAAAAAADDwAEAmoCWAAFAAgCigJYAAAASwKKAlgAAAFeADIBCQAAAAAAAAAAAAAAAKEAAv9AAeX7AAAAAAAAAABWUkNMAMAAIPsCA5j/JABkA9ABBiAAAJcAAAAAAhYCxgAAACAABAAAABUBAgADAAEECQABABwAAAADAAEECQACAA4AHAADAAEECQADADIAKgADAAEECQAEABwAAAADAAEECQAFAD4AXAAD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AAAAAAAAAAAD6AAAAAAAAAAAAAAD4AAAA+AAAAAAAAAD3APeA+AD4gPkAAAAAAAAAAAD4APyAAAD9gAAAAAAAAABAkMCegJLApoCuQKGAnsCXAJdAkkCogI/AlcCPgJMAkACQQKpAqYCqAJFAoUAAgAOAA8AFQAZACQAJQAtADAAOgA9AEAARQBGAEwAVgBYAFkAXQBkAGkAdAB1AHoAewCBAmACTQJhArACWgL9AKwAuAC5AL8AwwDOAM8A1wDaAOUA6QDsAPEA8gD4AQIBBAEFAQkBEAEVASABIQEmAScBLQJeApACXwKuAjoCRAKYAqACmQKhApECiAL7AokBZQJ2Aq8CigMFAo0CrAIyAjMC/gK4AocCRwMGAjEBZgJ3Ah8CHAIgAkYACAADAAYADAAHAAsADQASAB8AGgAcAB0ANgAyADMANAAYAEoAUABNAE4AVABPAqQAUwBuAGoAbABtAHwAVwEPALIArQCwALYAsQC1ALcAvADJAMQAxgDHAOAA3ADdAN4AwgD2APwA+QD6AQAA+wKlAP8BGgEWARgBGQEoAQMBKgAJALMABACuAAoAtAAQALoAEwC9ABQAvgARALsAFgDAABcAwQAgAMoAHgDIACEAywAbAMUAKADSACYA0AAqANQAKQDTAC8A2QAuANgAOQDjADcA4QA4AOIANQDbADEA5AA8AOgAPwDrAEEA7QBDAO8AQgDuAEQA8ABHAPMASQD1AEgA9ABLAPcAUgD+AFEA/QBVAQEAWgEGAFwBCABbAQcAXgEKAGEBDQBgAQwAXwELAGcBEwBmARIAZQERAHMBHwBwARwAawEXAHIBHgBvARsAcQEdAHcBIwB9ASkAfgCCAS4AhAEwAIMBLwAFAK8ALADWACcA0QA+AOoAYgEOAGgBFAMAAwEDDAMCAvwDAwMHAwQC/wLpAuoC7QLxAvIC7wLoAucC8ALrAu4BcAFxAZcBawGPAY4BkQGSAZMBjAGNAZQBdwGBAYgBZwFoAWkBagFuAW8BcgFzAXQBdQF2AYIBgwGFAYQBhgGHAYsBigGJAZABlQGWAbABsQG5AcUBxgHIAccByQHKAc4BzQHMAdMB2AHZAbIBswHaAa0B0gHRAdQB1QHWAc8B0AHXAboBuAHEAcsBmAHbAZkB3AGaAd0BmwHeAWwBrgFtAa8BnAHfAZ0B4AGeAeEBnwHi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aHVuZ2FydW1sYXV0VW1hY3JvblVvZ29uZWtVcmluZ1V0aWxkZVdhY3V0ZVdjaXJjdW1mbGV4V2RpZXJlc2lzV2dyYXZlWWNpcmN1bWZsZXhZZ3JhdmV1bmkxRUY4WmFjdXRlWmRvdGFjY2VudHVuaUE3OEJ1bmkwMTNCLmxvY2xNQUh1bmkwMTQ1LmxvY2xNQUhSLnNzMDRSYWN1dGUuc3MwNFJjYXJvbi5zczA0dW5pMDE1Ni5zczA0SS5zczA1SWFjdXRlLnNzMDVJY2lyY3VtZmxleC5zczA1SWRpZXJlc2lzLnNzMDVJZG90YWNjZW50LnNzMDVJZ3JhdmUuc3MwNUltYWNyb24uc3MwNUlvZ29uZWsuc3MwNUl0aWxkZS5zczA1Ry5zczA2R2JyZXZlLnNzMDZHY2lyY3VtZmxleC5zczA2dW5pMDEyMi5zczA2R2RvdGFjY2VudC5zczA2dW5pMUUyMC5zczA2QWRpZXJlc2lzLnNzMDhDZG90YWNjZW50LnNzMDhFZGllcmVzaXMuc3MwOEVkb3RhY2NlbnQuc3MwOEdkb3RhY2NlbnQuc3MwOElkaWVyZXNpcy5zczA4SWRvdGFjY2VudC5zczA4T2RpZXJlc2lzLnNzMDhVZGllcmVzaXMuc3MwOFdkaWVyZXNpcy5zczA4WWRpZXJlc2lzLnNzMDhaZG90YWNjZW50LnNzMDhJZGllcmVzaXMuc3MwNS5zczA4SWRvdGFjY2VudC5zczA1LnNzMDhHZG90YWNjZW50LnNzMDYuc3MwOEFfSS5kbGlnVV9JLmRsaWdhYnJldmV1bmkwMUNFYW1hY3JvbmFvZ29uZWtjYWN1dGVjY2Fyb25jY2lyY3VtZmxleGNkb3RhY2NlbnRkY2Fyb25kY3JvYXRlY2Fyb25lZG90YWNjZW50ZW1hY3JvbmVvZ29uZWt1bmkxRUJEdW5pMDI1OWdicmV2ZWdjYXJvbmdjaXJjdW1mbGV4dW5pMDEyM2dkb3RhY2NlbnR1bmkxRTIxdW5pMDFFNWhiYXJoY2lyY3VtZmxleGkubG9jbFRSS2ltYWNyb25pb2dvbmVraXRpbGRlaWp1bmkwMjM3dW5pMDA2QTAzMDFqY2lyY3VtZmxleHVuaTAxRTl1bmkwMTM3bGFjdXRlbGNhcm9udW5pMDEzQ25hY3V0ZW5jYXJvbnVuaTAxNDZlbmdvaHVuZ2FydW1sYXV0b21hY3JvbnJhY3V0ZXJjYXJvbnVuaTAxNTdzYWN1dGVzY2VkaWxsYXNjaXJjdW1mbGV4dW5pMDIxOXRiYXJ0Y2Fyb251bmkwMTYzdW5pMDIxQnVicmV2ZXVodW5nYXJ1bWxhdXR1bWFjcm9udW9nb25la3VyaW5ndXRpbGRld2FjdXRld2NpcmN1bWZsZXh3ZGllcmVzaXN3Z3JhdmV5Y2lyY3VtZmxleHlncmF2ZXVuaTFFRjl6YWN1dGV6ZG90YWNjZW50dW5pQTc4Q3VuaTAxM0MubG9jbE1BSHVuaTAxNDYubG9jbE1BSGEuc3MwMWFhY3V0ZS5zczAxYWJyZXZlLnNzMDF1bmkwMUNFLnNzMDFhY2lyY3VtZmxleC5zczAxYWRpZXJlc2lzLnNzMDFhZ3JhdmUuc3MwMWFtYWNyb24uc3MwMWFvZ29uZWsuc3MwMWFyaW5nLnNzMDFhdGlsZGUuc3MwMWEuc3MwMmFhY3V0ZS5zczAyYWJyZXZlLnNzMDJ1bmkwMUNFLnNzMDJhY2lyY3VtZmxleC5zczAyYWRpZXJlc2lzLnNzMDJhZ3JhdmUuc3MwMmFtYWNyb24uc3MwMmFvZ29uZWsuc3MwMmFyaW5nLnNzMDJhdGlsZGUuc3MwMmwuc3MwM2xhY3V0ZS5zczAzbGNhcm9uLnNzMDN1bmkwMTNDLnNzMDNsc2xhc2guc3MwM2FkaWVyZXNpcy5zczA4Y2RvdGFjY2VudC5zczA4ZWRpZXJlc2lzLnNzMDhlZG90YWNjZW50LnNzMDhnZG90YWNjZW50LnNzMDhpLnNzMDhpZGllcmVzaXMuc3MwOGkubG9jbFRSSy5zczA4aW9nb25lay5zczA4aWouc3MwOGouc3MwOG9kaWVyZXNpcy5zczA4dWRpZXJlc2lzLnNzMDh3ZGllcmVzaXMuc3MwOHlkaWVyZXNpcy5zczA4emRvdGFjY2VudC5zczA4YWRpZXJlc2lzLnNzMDEuc3MwOGFkaWVyZXNpcy5zczAyLnNzMDhmX2YubGlnYXRfdC5saWdhdW5pMDQxMHVuaTA0MTF1bmkwNDEydW5pMDQxM3VuaTA0MDN1bmkwNDkwdW5pMDQ5MnVuaTA0MTR1bmkwNDE1dW5pMDQwMHVuaTA0MDF1bmkwNDE2dW5pMDQxN3VuaTA0MTh1bmkwNDE5dW5pMDQxQXVuaTA0MEN1bmkwNDFCdW5pMDQxQ3VuaTA0MUR1bmkwNDFFdW5pMDQxRnVuaTA0MjB1bmkwNDIxdW5pMDQyMnVuaTA0MjN1bmkwNDBFdW5pMDQyNHVuaTA0MjV1bmkwNDI3dW5pMDQyNnVuaTA0Mjh1bmkwNDI5dW5pMDQwRnVuaTA0MkN1bmkwNDJCdW5pMDQyQXVuaTA0MDl1bmkwNDBBdW5pMDQwNXVuaTA0MDR1bmkwNDJEdW5pMDQwNnVuaTA0MDd1bmkwNDA4dW5pMDQwQnVuaTA0MkV1bmkwNDJGdW5pMDQwMnVuaTA0NjJ1bmkwNDZBdW5pMDQ3MnVuaTA0NzR1bmkwNDk2dW5pMDQ5QXVuaTA0QTJ1bmkwNEFFdW5pMDRCMHVuaTA0QjJ1bmkwNEI2dW5pMDRCQXVuaTA0QzB1bmkwNEQ4dW5pMDRFMnVuaTA0RTh1bmkwNEVFdW5pMDQzMHVuaTA0MzF1bmkwNDMydW5pMDQzM3VuaTA0NTN1bmkwNDkxdW5pMDQ5M3VuaTA0MzR1bmkwNDM1dW5pMDQ1MHVuaTA0NTF1bmkwNDM2dW5pMDQzN3VuaTA0Mzh1bmkwNDM5dW5pMDQ1RHVuaTA0M0F1bmkwNDVDdW5pMDQzQnVuaTA0M0N1bmkwNDNEdW5pMDQzRXVuaTA0M0Z1bmkwNDQwdW5pMDQ0MXVuaTA0NDJ1bmkwNDQzdW5pMDQ1RXVuaTA0NDR1bmkwNDQ1dW5pMDQ0N3VuaTA0NDZ1bmkwNDQ4dW5pMDQ0OXVuaTA0NUZ1bmkwNDRDdW5pMDQ0QnVuaTA0NEF1bmkwNDU5dW5pMDQ1QXVuaTA0NTV1bmkwNDU0dW5pMDQ0RHVuaTA0NTZ1bmkwNDU3dW5pMDQ1OHVuaTA0NUJ1bmkwNDRFdW5pMDQ0RnVuaTA0NTJ1bmkwNDYzdW5pMDQ2QnVuaTA0NzN1bmkwNDc1dW5pMDQ5N3VuaTA0OUJ1bmkwNEEzdW5pMDRBRnVuaTA0QjF1bmkwNEIzdW5pMDRCN3VuaTA0QkJ1bmkwNENGdW5pMDREOXVuaTA0RTN1bmkwNEU5dW5pMDRFRkxhbWJkYXVuaTAzQTlsYW1iZGFwaXVuaTIxMDd1bmkyNEZGdW5pMjc3NnVuaTI3Nzd1bmkyNzc4dW5pMjc3OXVuaTI3N0F1bmkyNzdCdW5pMjc3Q3VuaTI3N0R1bmkyNzdFdW5pMjRFQXVuaTI0NjB1bmkyNDYxdW5pMjQ2MnVuaTI0NjN1bmkyNDY0dW5pMjQ2NXVuaTI0NjZ1bmkyNDY3dW5pMjQ2OHplcm8uc3MwOW9uZS5zczA5emVyby50Zm9uZS50ZnR3by50ZnRocmVlLnRmZm91ci50ZmZpdmUudGZzaXgudGZzZXZlbi50ZmVpZ2h0LnRmbmluZS50ZnVuaTIxNTN1bmkyMTU0dW5pMjE1NXVuaTIwODB1bmkyMDgxdW5pMjA4MnVuaTIwODN1bmkyMDg0dW5pMjA4NXVuaTIwODZ1bmkyMDg3dW5pMjA4OHVuaTIwODl1bmkyMDcwdW5pMDBCOXVuaTAwQjJ1bmkwMEIzdW5pMjA3NHVuaTIwNzV1bmkyMDc2dW5pMjA3N3VuaTIwNzh1bmkyMDc5dW5pMDBBMGh5cGhlbl9oeXBoZW5faHlwaGVuX2dyZWF0ZXIubGlnYWh5cGhlbl9oeXBoZW5fZ3JlYXRlci5saWdhaHlwaGVuX2dyZWF0ZXIubGlnYXVuaTMwMDNwZXJpb2Quc3MwOGNvbG9uLnNzMDhzZW1pY29sb24uc3MwOGVsbGlwc2lzLnNzMDhleGNsYW0uc3MwOGV4Y2xhbWRvd24uc3MwOHF1ZXN0aW9uLnNzMDhxdWVzdGlvbmRvd24uc3MwOHBlcmlvZGNlbnRlcmVkLnNzMDh1bmkzMDFDdW5pMzAwOHVuaTMwMDl1bmkzMDEwdW5pMzAxMXVuaTMwMEN1bmkzMDBEdW5pMzAwQXVuaTMwMEJ1bmkzMDE0dW5pMzAxNXVuaTMwMEV1bmkzMDBGdW5pMzAxNnVuaTMwMTd1bmkwRTNGbGVzc19oeXBoZW4ubGlnYWxlc3NfaHlwaGVuX2h5cGhlbi5saWdhbGVzc19oeXBoZW5faHlwaGVuX2h5cGhlbi5saWdhbGVzc19oeXBoZW5fZ3JlYXRlci5saWdhdW5pMjYzOXNtaWxlZmFjZXVuaUY4RkZ1bmkyMTE3bWludXRlc2Vjb25kdW5pMjExNnVuaTI0MEN1bmkyM0NFdW5pMjQwQkV1cm91bmkyMEI0dW5pMjBCRHVuaTIwQjl1bmkyMEFBbm90ZXF1YWxncmVhdGVyZXF1YWxsZXNzZXF1YWxhcHByb3hlcXVhbGluZmluaXR5aW50ZWdyYWx1bmkyMjA2cHJvZHVjdHN1bW1hdGlvbnJhZGljYWxwYXJ0aWFsZGlmZnVuaTAwQjVhcnJvd3VwdW5pMjE5N2Fycm93cmlnaHR1bmkyMTk4YXJyb3dkb3dudW5pMjE5OWFycm93bGVmdHVuaTIxOTZhcnJvd2JvdGhhcnJvd3VwZG51bmkyMTlEdW5pMjFFNHVuaTIxRTV1bmkyMUE5dW5pMjFBQXVuaTIxQjB1bmkyMUIxdW5pMjFCM3VuaTIxQjRjYXJyaWFnZXJldHVybnVuaTIxRTdhcnJvd3VwLnNzMDd1bmkyMTk3LnNzMDdhcnJvd3JpZ2h0LnNzMDd1bmkyMTk4LnNzMDdhcnJvd2Rvd24uc3MwN3VuaTIxOTkuc3MwN2Fycm93bGVmdC5zczA3dW5pMjE5Ni5zczA3YXJyb3dib3RoLnNzMDdhcnJvd3VwZG4uc3MwN3VuaTI1Q0ZjaXJjbGV1bmkyNUNDbG96ZW5nZXRyaWFndXB1bmkyNUI2dHJpYWdkbnVuaTI1QzB1bmkyNUIzdW5pMjVCN3VuaTI1QkR1bmkyNUMxdW5pMDMwNi5jeXVuaTAzMDh1bmkwMzA3Z3JhdmVjb21iYWN1dGVjb21idW5pMDMwQnVuaTAzMEMuYWx0dW5pMDMwMnVuaTAzMEN1bmkwMzA2dW5pMDMwQXRpbGRlY29tYnVuaTAzMDR1bmkwMzEydW5pMDMyNnVuaTAzMjYubG9jbE1BSHVuaTAzMjd1bmkwMzI4dW5pMDMzNXVuaTAzMDguc3MwOHVuaTAzMDcuc3MwOGRpZXJlc2lzLnNzMDhkb3RhY2NlbnQuc3MwOHVuaTAyQkN1bmkwMkI5dW5pMDJDOGJsYWNrQ2lyY2xlZGJsYWNrQ2lyY2xlZFN0cm9rZTAwMS4yMDBjb3B5cmlnaHQgbWlzc2luZ0dlaXN0IFNlbWlCb2xkU2VtaUJvbGQA6QIAAQAMABEAFgAcADEAPABEAEgATgB1AH4AgQCHAIwAkQCUAJkAngC0ALgAwwEMARMBGwEgASgBMAFcAWABdQGCAYoBkQGYAaIBqwH2AhUCLwJFAk8CVAJbAmECkAKpAsAC0QLcAuYC7QL0AwADBgMlAysDLwNBA04D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
Download .txt
gitextract_qvmhi0l2/

├── .cursor/
│   └── mcp.json
├── .editorconfig
├── .gitattributes
├── .github/
│   ├── ISSUE_TEMPLATE/
│   │   ├── bug_report.yml
│   │   └── feature_request.yml
│   ├── PULL_REQUEST_TEMPLATE.md
│   ├── scripts/
│   │   ├── publish-articles.cjs
│   │   └── submit-sitemap.mjs
│   └── workflows/
│       ├── code-check.yml
│       ├── publish-article.yml
│       └── submit-sitemap.yml
├── .gitignore
├── .prettierignore
├── AGENTS.md
├── CONTRIBUTING.md
├── LICENSE.md
├── README.md
├── apps/
│   └── www/
│       ├── .env.example
│       ├── .gitignore
│       ├── .prettierignore
│       ├── app/
│       │   ├── (blog)/
│       │   │   └── blog/
│       │   │       ├── [...slug]/
│       │   │       │   └── page.tsx
│       │   │       ├── layout.tsx
│       │   │       └── page.tsx
│       │   ├── (docs)/
│       │   │   ├── docs/
│       │   │   │   ├── [[...slug]]/
│       │   │   │   │   └── page.tsx
│       │   │   │   ├── layout.tsx
│       │   │   │   ├── loading.tsx
│       │   │   │   └── not-found.tsx
│       │   │   └── layout.tsx
│       │   ├── (marketing)/
│       │   │   ├── layout.tsx
│       │   │   ├── page.tsx
│       │   │   └── showcase/
│       │   │       ├── [...slug]/
│       │   │       │   └── page.tsx
│       │   │       └── page.tsx
│       │   ├── api/
│       │   │   └── blog-webhook/
│       │   │       └── route.ts
│       │   ├── layout.tsx
│       │   ├── llm/
│       │   │   └── [[...slug]]/
│       │   │       └── route.ts
│       │   ├── not-found.tsx
│       │   ├── og/
│       │   │   ├── geist-regular-otf.json
│       │   │   ├── geist-semibold-otf.json
│       │   │   ├── geistmono-regular-otf.json
│       │   │   └── route.tsx
│       │   ├── robots.ts
│       │   └── sitemap.ts
│       ├── components/
│       │   ├── analytics.tsx
│       │   ├── blog/
│       │   │   ├── mobile-toc.tsx
│       │   │   └── table-of-contents.tsx
│       │   ├── blur-image.tsx
│       │   ├── callout.tsx
│       │   ├── code-block-command.tsx
│       │   ├── code-block-wrapper.tsx
│       │   ├── code-collapsible-wrapper.tsx
│       │   ├── code-tabs.tsx
│       │   ├── command-menu.tsx
│       │   ├── component-preview-tabs.tsx
│       │   ├── component-preview.tsx
│       │   ├── component-source.tsx
│       │   ├── components-list.tsx
│       │   ├── contribute.tsx
│       │   ├── copy-button.tsx
│       │   ├── deal-banner.tsx
│       │   ├── discord-link.tsx
│       │   ├── docs-copy-page.tsx
│       │   ├── docs-sidebar.tsx
│       │   ├── docs-toc.tsx
│       │   ├── github-link.tsx
│       │   ├── gradient-blur.tsx
│       │   ├── icons.tsx
│       │   ├── logo-button.tsx
│       │   ├── main-nav.tsx
│       │   ├── mobile-nav.tsx
│       │   ├── mode-toggle.tsx
│       │   ├── open-in-v0-button.tsx
│       │   ├── ping-dot.tsx
│       │   ├── posthog-provider.tsx
│       │   ├── sections/
│       │   │   ├── component-demos.tsx
│       │   │   ├── cta.tsx
│       │   │   ├── expandable-masonary-section.tsx
│       │   │   ├── hero.tsx
│       │   │   ├── showcase.tsx
│       │   │   ├── testimonial-tweet-link.tsx
│       │   │   ├── testimonials.tsx
│       │   │   └── video-testimonials.tsx
│       │   ├── sidebar-cta.tsx
│       │   ├── site-banner.tsx
│       │   ├── site-footer.tsx
│       │   ├── site-header.tsx
│       │   ├── tech-stack.tsx
│       │   ├── template-open.tsx
│       │   ├── template-preview.tsx
│       │   ├── theme-provider.tsx
│       │   ├── ui/
│       │   │   ├── accordion.tsx
│       │   │   ├── alert.tsx
│       │   │   ├── avatar.tsx
│       │   │   ├── badge.tsx
│       │   │   ├── button.tsx
│       │   │   ├── calendar.tsx
│       │   │   ├── card.tsx
│       │   │   ├── collapsible.tsx
│       │   │   ├── command.tsx
│       │   │   ├── context-menu.tsx
│       │   │   ├── dialog.tsx
│       │   │   ├── dropdown-menu.tsx
│       │   │   ├── form.tsx
│       │   │   ├── input.tsx
│       │   │   ├── label.tsx
│       │   │   ├── popover.tsx
│       │   │   ├── scroll-area.tsx
│       │   │   ├── select.tsx
│       │   │   ├── separator.tsx
│       │   │   ├── sheet.tsx
│       │   │   ├── sidebar.tsx
│       │   │   ├── skeleton.tsx
│       │   │   ├── sonner.tsx
│       │   │   ├── switch.tsx
│       │   │   ├── table.tsx
│       │   │   ├── tabs.tsx
│       │   │   └── tooltip.tsx
│       │   └── version-select.tsx
│       ├── components.json
│       ├── config/
│       │   ├── docs.ts
│       │   └── site.ts
│       ├── content/
│       │   ├── blog/
│       │   │   ├── animated-landing-page.mdx
│       │   │   ├── animation-libraries.mdx
│       │   │   ├── animation-on-scroll-css.mdx
│       │   │   ├── ant-design-alternatives.mdx
│       │   │   ├── ant-design-vs-material-ui.mdx
│       │   │   ├── app-landing-page.mdx
│       │   │   ├── best-react-component-library.mdx
│       │   │   ├── best-react-native-ui-library.mdx
│       │   │   ├── best-react-ui-framework.mdx
│       │   │   ├── best-saas-landing-pages.mdx
│       │   │   ├── best-web-design-tools.mdx
│       │   │   ├── best-web-developer-portfolios.mdx
│       │   │   ├── bootstrap-vs-react.mdx
│       │   │   ├── cards-ui-design.mdx
│       │   │   ├── carousel-user-interface.mdx
│       │   │   ├── chakra-ui-vs-material-ui.mdx
│       │   │   ├── color-theory-for-web-design.mdx
│       │   │   ├── component-libraries.mdx
│       │   │   ├── component-library-examples.mdx
│       │   │   ├── cool-css-animations.mdx
│       │   │   ├── cool-react-components.mdx
│       │   │   ├── create-next-js-app.mdx
│       │   │   ├── create-nextjs-app.mdx
│       │   │   ├── create-react-component-library.mdx
│       │   │   ├── creating-next-js-app.mdx
│       │   │   ├── creative-landing-page-design.mdx
│       │   │   ├── css-animation-on-scroll.mdx
│       │   │   ├── css-buttons-hover.mdx
│       │   │   ├── css-loader-animation.mdx
│       │   │   ├── css-loading-animation.mdx
│       │   │   ├── cta-design.mdx
│       │   │   ├── dashboard-design-ui.mdx
│       │   │   ├── disable-textarea-resize.mdx
│       │   │   ├── drop-down-menu-in-js.mdx
│       │   │   ├── dropdown-in-react-js.mdx
│       │   │   ├── faq-template.mdx
│       │   │   ├── framer-motion-react.mdx
│       │   │   ├── free-react-components.mdx
│       │   │   ├── hero-section-design.mdx
│       │   │   ├── how-to-add-animation-to-website.mdx
│       │   │   ├── how-to-build-a-landing-page.mdx
│       │   │   ├── how-to-choose-tech-stack.mdx
│       │   │   ├── how-to-create-a-landing-page.mdx
│       │   │   ├── how-to-create-drop-down-menu.mdx
│       │   │   ├── how-to-create-navigation-bar-in-html.mdx
│       │   │   ├── how-to-design-a-landing-page.mdx
│       │   │   ├── how-to-display-testimonials-on-website.mdx
│       │   │   ├── how-to-improve-website-conversion-rates.mdx
│       │   │   ├── how-to-improve-website-loading-speed.mdx
│       │   │   ├── how-to-improve-website-performance.mdx
│       │   │   ├── how-to-learn-react.mdx
│       │   │   ├── how-to-make-an-animated-website.mdx
│       │   │   ├── how-to-make-an-interactive-website.mdx
│       │   │   ├── how-to-make-backgrounds-for-animation.mdx
│       │   │   ├── how-to-optimize-images-for-web.mdx
│       │   │   ├── infinite-scroll-react.mdx
│       │   │   ├── install-tailwind-css.mdx
│       │   │   ├── install-tailwind-react.mdx
│       │   │   ├── installing-tailwind-css.mdx
│       │   │   ├── interactive-landing-page.mdx
│       │   │   ├── landing-page-call-to-action.mdx
│       │   │   ├── landing-page-copywriting.mdx
│       │   │   ├── landing-page-design-templates.mdx
│       │   │   ├── landing-page-examples.mdx
│       │   │   ├── landing-page-sections.mdx
│       │   │   ├── landing-page-ui.mdx
│       │   │   ├── mantine-vs-chakra.mdx
│       │   │   ├── material-ui-alternatives.mdx
│       │   │   ├── material-ui-react.mdx
│       │   │   ├── material-ui-vs-joy-ui.mdx
│       │   │   ├── mui-box.mdx
│       │   │   ├── mui-card.mdx
│       │   │   ├── mui-react.mdx
│       │   │   ├── mui-table.mdx
│       │   │   ├── mui-transitions.mdx
│       │   │   ├── navbar-in-react-js.mdx
│       │   │   ├── navbar-react-js.mdx
│       │   │   ├── navigation-bar-for-website.mdx
│       │   │   ├── next-js-app.mdx
│       │   │   ├── next-js-create-app.mdx
│       │   │   ├── next-js-getting-started.mdx
│       │   │   ├── next-js-layout.mdx
│       │   │   ├── next-js-project-structure.mdx
│       │   │   ├── next-js-tailwind.mdx
│       │   │   ├── next-js.mdx
│       │   │   ├── nextjs-landing-page.mdx
│       │   │   ├── nextjs-portfolio-template.mdx
│       │   │   ├── nextjs-website-template.mdx
│       │   │   ├── nextjs.mdx
│       │   │   ├── portfolio-landing-page.mdx
│       │   │   ├── pricing-page-examples.mdx
│       │   │   ├── react-animation-examples.mdx
│       │   │   ├── react-animation-libraries.mdx
│       │   │   ├── react-best-practices.mdx
│       │   │   ├── react-bootstrap.mdx
│       │   │   ├── react-component-best-practices.mdx
│       │   │   ├── react-css-framework.mdx
│       │   │   ├── react-design-patterns.mdx
│       │   │   ├── react-frameworks.mdx
│       │   │   ├── react-header.mdx
│       │   │   ├── react-hero-component.mdx
│       │   │   ├── react-infinite-scroll.mdx
│       │   │   ├── react-js-file-upload.mdx
│       │   │   ├── react-js-form-validation.mdx
│       │   │   ├── react-js-navbar.mdx
│       │   │   ├── react-js-navigation-bar.mdx
│       │   │   ├── react-landing-page.mdx
│       │   │   ├── react-libraries.mdx
│       │   │   ├── react-native-libraries.mdx
│       │   │   ├── react-portfolio-template.mdx
│       │   │   ├── react-projects-for-beginners.mdx
│       │   │   ├── react-tips.mdx
│       │   │   ├── react-ui-framework.mdx
│       │   │   ├── react-ux.mdx
│       │   │   ├── responsive-web-design-templates.mdx
│       │   │   ├── saas-landing-page-best-practices.mdx
│       │   │   ├── search-input-with-icon.mdx
│       │   │   ├── semantic-ui-vs-material-ui.mdx
│       │   │   ├── shadcn-ui.mdx
│       │   │   ├── sidebar-for-website.mdx
│       │   │   ├── social-proof-on-website.mdx
│       │   │   ├── startup-landing-page.mdx
│       │   │   ├── tailwind-border-radius.mdx
│       │   │   ├── tailwind-cdn-html.mdx
│       │   │   ├── tailwind-css-button.mdx
│       │   │   ├── tailwind-css-component-library.mdx
│       │   │   ├── tailwind-css-grid.mdx
│       │   │   ├── tailwind-css-install.mdx
│       │   │   ├── tailwind-css-react.mdx
│       │   │   ├── tailwind-css-template.mdx
│       │   │   ├── tailwind-css-templates-free.mdx
│       │   │   ├── tailwind-css-themes.mdx
│       │   │   ├── tailwind-dark-mode.mdx
│       │   │   ├── tailwind-font-size.mdx
│       │   │   ├── tailwind-landing-page-templates.mdx
│       │   │   ├── tailwind-landing-page.mdx
│       │   │   ├── tailwind-portfolio-template.mdx
│       │   │   ├── tailwind-vs-bootstrap.mdx
│       │   │   ├── text-animation-css.mdx
│       │   │   ├── text-loading-bar.mdx
│       │   │   ├── time-and-date-picker.mdx
│       │   │   ├── typescript-vs-javascript-differences.mdx
│       │   │   ├── ui-animation.mdx
│       │   │   ├── ui-card-design.mdx
│       │   │   ├── ui-framework-for-react.mdx
│       │   │   ├── ui-frameworks.mdx
│       │   │   ├── ui-libraries.mdx
│       │   │   ├── user-interface-design-patterns.mdx
│       │   │   ├── user-interface-themes.mdx
│       │   │   ├── visual-hierarchy-in-web-design.mdx
│       │   │   ├── waitlist-landing-page.mdx
│       │   │   ├── web-animation-tools.mdx
│       │   │   ├── web-application-design.mdx
│       │   │   ├── web-design-best-practices.mdx
│       │   │   ├── web-design-trends.mdx
│       │   │   ├── website-animation-examples.mdx
│       │   │   ├── website-footer.mdx
│       │   │   ├── website-header-examples.mdx
│       │   │   ├── website-logo-examples.mdx
│       │   │   ├── websites-with-great-ui.mdx
│       │   │   ├── what-are-ui-components.mdx
│       │   │   ├── what-is-a-component-library.mdx
│       │   │   ├── what-is-mobile-first-design.mdx
│       │   │   └── what-is-nextjs.mdx
│       │   ├── docs/
│       │   │   ├── components/
│       │   │   │   ├── android.mdx
│       │   │   │   ├── animated-beam.mdx
│       │   │   │   ├── animated-circular-progress-bar.mdx
│       │   │   │   ├── animated-gradient-text.mdx
│       │   │   │   ├── animated-grid-pattern.mdx
│       │   │   │   ├── animated-list.mdx
│       │   │   │   ├── animated-shiny-text.mdx
│       │   │   │   ├── animated-theme-toggler.mdx
│       │   │   │   ├── aurora-text.mdx
│       │   │   │   ├── avatar-circles.mdx
│       │   │   │   ├── bento-grid.mdx
│       │   │   │   ├── blur-fade.mdx
│       │   │   │   ├── border-beam.mdx
│       │   │   │   ├── code-comparison.mdx
│       │   │   │   ├── comic-text.mdx
│       │   │   │   ├── confetti.mdx
│       │   │   │   ├── cool-mode.mdx
│       │   │   │   ├── dock.mdx
│       │   │   │   ├── dot-pattern.mdx
│       │   │   │   ├── dotted-map.mdx
│       │   │   │   ├── file-tree.mdx
│       │   │   │   ├── flickering-grid.mdx
│       │   │   │   ├── globe.mdx
│       │   │   │   ├── grid-pattern.mdx
│       │   │   │   ├── hero-video-dialog.mdx
│       │   │   │   ├── highlighter.mdx
│       │   │   │   ├── hyper-text.mdx
│       │   │   │   ├── icon-cloud.mdx
│       │   │   │   ├── index.mdx
│       │   │   │   ├── interactive-grid-pattern.mdx
│       │   │   │   ├── interactive-hover-button.mdx
│       │   │   │   ├── iphone.mdx
│       │   │   │   ├── lens.mdx
│       │   │   │   ├── light-rays.mdx
│       │   │   │   ├── line-shadow-text.mdx
│       │   │   │   ├── magic-card.mdx
│       │   │   │   ├── marquee.mdx
│       │   │   │   ├── meteors.mdx
│       │   │   │   ├── morphing-text.mdx
│       │   │   │   ├── neon-gradient-card.mdx
│       │   │   │   ├── number-ticker.mdx
│       │   │   │   ├── orbiting-circles.mdx
│       │   │   │   ├── particles.mdx
│       │   │   │   ├── pixel-image.mdx
│       │   │   │   ├── pointer.mdx
│       │   │   │   ├── progressive-blur.mdx
│       │   │   │   ├── pulsating-button.mdx
│       │   │   │   ├── rainbow-button.mdx
│       │   │   │   ├── retro-grid.mdx
│       │   │   │   ├── ripple-button.mdx
│       │   │   │   ├── ripple.mdx
│       │   │   │   ├── safari.mdx
│       │   │   │   ├── scroll-based-velocity.mdx
│       │   │   │   ├── scroll-progress.mdx
│       │   │   │   ├── shimmer-button.mdx
│       │   │   │   ├── shine-border.mdx
│       │   │   │   ├── shiny-button.mdx
│       │   │   │   ├── smooth-cursor.mdx
│       │   │   │   ├── sparkles-text.mdx
│       │   │   │   ├── spinning-text.mdx
│       │   │   │   ├── striped-pattern.mdx
│       │   │   │   ├── terminal.mdx
│       │   │   │   ├── text-animate.mdx
│       │   │   │   ├── text-reveal.mdx
│       │   │   │   ├── tweet-card.mdx
│       │   │   │   ├── typing-animation.mdx
│       │   │   │   ├── video-text.mdx
│       │   │   │   ├── warp-background.mdx
│       │   │   │   └── word-rotate.mdx
│       │   │   ├── index.mdx
│       │   │   ├── installation/
│       │   │   │   └── index.mdx
│       │   │   ├── legacy.mdx
│       │   │   ├── mcp.mdx
│       │   │   ├── story.mdx
│       │   │   └── templates/
│       │   │       ├── agent.mdx
│       │   │       ├── blog.mdx
│       │   │       ├── changelog.mdx
│       │   │       ├── codeforge.mdx
│       │   │       ├── devtool.mdx
│       │   │       ├── mobile.mdx
│       │   │       ├── portfolio.mdx
│       │   │       ├── saas.mdx
│       │   │       └── startup.mdx
│       │   └── showcase/
│       │       ├── anara.mdx
│       │       ├── anisvsc.mdx
│       │       ├── aomni.mdx
│       │       ├── aryankarma.mdx
│       │       ├── cognosys.mdx
│       │       ├── elhussary.mdx
│       │       ├── gitme.mdx
│       │       ├── guarahooks.mdx
│       │       ├── infisical.mdx
│       │       ├── langfuse.mdx
│       │       ├── llmreport.mdx
│       │       ├── lyra.mdx
│       │       ├── million.mdx
│       │       ├── nativeexpress.mdx
│       │       ├── pulpsense.mdx
│       │       ├── querylab.mdx
│       │       ├── roammoon.mdx
│       │       ├── sherpa.mdx
│       │       ├── undrstnd.mdx
│       │       ├── writora.mdx
│       │       ├── zen-browser.mdx
│       │       └── zzzzshawn.mdx
│       ├── eslint.config.mjs
│       ├── hooks/
│       │   ├── use-config.ts
│       │   ├── use-copy-to-clipboard.ts
│       │   ├── use-is-mac.ts
│       │   ├── use-meta-color.ts
│       │   ├── use-mobile.ts
│       │   ├── use-mounted.ts
│       │   └── use-mutation-observer.ts
│       ├── lib/
│       │   ├── docs.ts
│       │   ├── events.ts
│       │   ├── fonts.ts
│       │   ├── github.ts
│       │   ├── highlight-code.ts
│       │   ├── posthog.ts
│       │   ├── registry.ts
│       │   ├── rehype-component.ts
│       │   ├── rehype-npm-command.ts
│       │   ├── source.ts
│       │   ├── types.ts
│       │   └── utils.ts
│       ├── mdx-components.tsx
│       ├── middleware.ts
│       ├── next.config.mjs
│       ├── package.json
│       ├── postcss.config.mjs
│       ├── public/
│       │   ├── llms-full.txt
│       │   ├── llms.txt
│       │   ├── mcp.json
│       │   ├── r/
│       │   │   ├── android-demo-2.json
│       │   │   ├── android-demo-3.json
│       │   │   ├── android-demo.json
│       │   │   ├── android.json
│       │   │   ├── animated-beam-bidirectional.json
│       │   │   ├── animated-beam-demo.json
│       │   │   ├── animated-beam-multiple-inputs.json
│       │   │   ├── animated-beam-multiple-outputs.json
│       │   │   ├── animated-beam-unidirectional.json
│       │   │   ├── animated-beam.json
│       │   │   ├── animated-circular-progress-bar-demo.json
│       │   │   ├── animated-circular-progress-bar.json
│       │   │   ├── animated-gradient-text-demo-2.json
│       │   │   ├── animated-gradient-text-demo.json
│       │   │   ├── animated-gradient-text.json
│       │   │   ├── animated-grid-pattern-demo.json
│       │   │   ├── animated-grid-pattern.json
│       │   │   ├── animated-list-demo.json
│       │   │   ├── animated-list.json
│       │   │   ├── animated-shiny-text-demo.json
│       │   │   ├── animated-shiny-text.json
│       │   │   ├── animated-theme-toggler-demo.json
│       │   │   ├── animated-theme-toggler.json
│       │   │   ├── aurora-text-demo.json
│       │   │   ├── aurora-text.json
│       │   │   ├── avatar-circles-demo.json
│       │   │   ├── avatar-circles.json
│       │   │   ├── bento-demo-vertical.json
│       │   │   ├── bento-demo.json
│       │   │   ├── bento-grid.json
│       │   │   ├── blur-fade-demo.json
│       │   │   ├── blur-fade-text-demo.json
│       │   │   ├── blur-fade.json
│       │   │   ├── border-beam-demo-2.json
│       │   │   ├── border-beam-demo-3.json
│       │   │   ├── border-beam-demo-4.json
│       │   │   ├── border-beam-demo.json
│       │   │   ├── border-beam.json
│       │   │   ├── client-tweet-card.json
│       │   │   ├── code-comparison-demo.json
│       │   │   ├── code-comparison.json
│       │   │   ├── comic-text-demo.json
│       │   │   ├── comic-text.json
│       │   │   ├── confetti-basic-cannon.json
│       │   │   ├── confetti-custom-shapes.json
│       │   │   ├── confetti-demo.json
│       │   │   ├── confetti-emoji.json
│       │   │   ├── confetti-fireworks.json
│       │   │   ├── confetti-random-direction.json
│       │   │   ├── confetti-side-cannons.json
│       │   │   ├── confetti-stars.json
│       │   │   ├── confetti.json
│       │   │   ├── cool-mode-custom.json
│       │   │   ├── cool-mode-demo.json
│       │   │   ├── cool-mode.json
│       │   │   ├── dock-demo-2.json
│       │   │   ├── dock-demo-3.json
│       │   │   ├── dock-demo.json
│       │   │   ├── dock.json
│       │   │   ├── dot-pattern-demo.json
│       │   │   ├── dot-pattern-linear-gradient.json
│       │   │   ├── dot-pattern-with-glow-effect.json
│       │   │   ├── dot-pattern.json
│       │   │   ├── dotted-map-demo-2.json
│       │   │   ├── dotted-map-demo-3.json
│       │   │   ├── dotted-map-demo.json
│       │   │   ├── dotted-map.json
│       │   │   ├── file-tree-demo.json
│       │   │   ├── file-tree.json
│       │   │   ├── flickering-grid-demo.json
│       │   │   ├── flickering-grid-rounded-demo.json
│       │   │   ├── flickering-grid.json
│       │   │   ├── globe-demo.json
│       │   │   ├── globe.json
│       │   │   ├── grid-pattern-dashed.json
│       │   │   ├── grid-pattern-demo.json
│       │   │   ├── grid-pattern-linear-gradient.json
│       │   │   ├── grid-pattern.json
│       │   │   ├── hero-video-dialog-demo-top-in-bottom-out.json
│       │   │   ├── hero-video-dialog-demo.json
│       │   │   ├── hero-video-dialog.json
│       │   │   ├── highlighter-demo.json
│       │   │   ├── highlighter.json
│       │   │   ├── hyper-text-demo.json
│       │   │   ├── hyper-text.json
│       │   │   ├── icon-cloud-demo-2.json
│       │   │   ├── icon-cloud-demo-3.json
│       │   │   ├── icon-cloud-demo.json
│       │   │   ├── icon-cloud.json
│       │   │   ├── index.json
│       │   │   ├── interactive-grid-pattern-demo-2.json
│       │   │   ├── interactive-grid-pattern-demo.json
│       │   │   ├── interactive-grid-pattern.json
│       │   │   ├── interactive-hover-button-demo.json
│       │   │   ├── interactive-hover-button.json
│       │   │   ├── iphone-demo-2.json
│       │   │   ├── iphone-demo-3.json
│       │   │   ├── iphone-demo.json
│       │   │   ├── iphone.json
│       │   │   ├── lens-demo-2.json
│       │   │   ├── lens-demo-3.json
│       │   │   ├── lens-demo.json
│       │   │   ├── lens.json
│       │   │   ├── light-rays-demo.json
│       │   │   ├── light-rays.json
│       │   │   ├── line-shadow-text-demo.json
│       │   │   ├── line-shadow-text.json
│       │   │   ├── magic-card-demo-2.json
│       │   │   ├── magic-card-demo.json
│       │   │   ├── magic-card.json
│       │   │   ├── marquee-3d.json
│       │   │   ├── marquee-demo-vertical.json
│       │   │   ├── marquee-demo.json
│       │   │   ├── marquee-logos.json
│       │   │   ├── marquee.json
│       │   │   ├── meteors-demo.json
│       │   │   ├── meteors.json
│       │   │   ├── morphing-text-demo.json
│       │   │   ├── morphing-text.json
│       │   │   ├── neon-gradient-card-demo.json
│       │   │   ├── neon-gradient-card.json
│       │   │   ├── number-ticker-decimal-demo.json
│       │   │   ├── number-ticker-demo-2.json
│       │   │   ├── number-ticker-demo.json
│       │   │   ├── number-ticker.json
│       │   │   ├── orbiting-circles-demo.json
│       │   │   ├── orbiting-circles.json
│       │   │   ├── particles-demo.json
│       │   │   ├── particles.json
│       │   │   ├── pixel-image-demo.json
│       │   │   ├── pixel-image.json
│       │   │   ├── pointer-demo-1.json
│       │   │   ├── pointer.json
│       │   │   ├── progressive-blur-demo.json
│       │   │   ├── progressive-blur.json
│       │   │   ├── pulsating-button-demo.json
│       │   │   ├── pulsating-button.json
│       │   │   ├── rainbow-button-demo-2.json
│       │   │   ├── rainbow-button-demo.json
│       │   │   ├── rainbow-button.json
│       │   │   ├── registry.json
│       │   │   ├── retro-grid-demo.json
│       │   │   ├── retro-grid.json
│       │   │   ├── ripple-button-demo.json
│       │   │   ├── ripple-button.json
│       │   │   ├── ripple-demo.json
│       │   │   ├── ripple.json
│       │   │   ├── safari-demo-2.json
│       │   │   ├── safari-demo-3.json
│       │   │   ├── safari-demo-4.json
│       │   │   ├── safari-demo.json
│       │   │   ├── safari.json
│       │   │   ├── scroll-based-velocity-demo.json
│       │   │   ├── scroll-based-velocity-images-demo.json
│       │   │   ├── scroll-based-velocity.json
│       │   │   ├── scroll-progress-demo.json
│       │   │   ├── scroll-progress.json
│       │   │   ├── shimmer-button-demo.json
│       │   │   ├── shimmer-button.json
│       │   │   ├── shine-border-demo-2.json
│       │   │   ├── shine-border-demo.json
│       │   │   ├── shine-border.json
│       │   │   ├── shiny-button-demo.json
│       │   │   ├── shiny-button.json
│       │   │   ├── smooth-cursor-demo.json
│       │   │   ├── smooth-cursor.json
│       │   │   ├── sparkles-text-demo.json
│       │   │   ├── sparkles-text.json
│       │   │   ├── spinning-text-demo-2.json
│       │   │   ├── spinning-text-demo.json
│       │   │   ├── spinning-text.json
│       │   │   ├── striped-pattern-colored.json
│       │   │   ├── striped-pattern-dashed.json
│       │   │   ├── striped-pattern-demo.json
│       │   │   ├── striped-pattern-left.json
│       │   │   ├── striped-pattern-right.json
│       │   │   ├── striped-pattern.json
│       │   │   ├── terminal-demo-2.json
│       │   │   ├── terminal-demo.json
│       │   │   ├── terminal.json
│       │   │   ├── text-animate-demo-2.json
│       │   │   ├── text-animate-demo-3.json
│       │   │   ├── text-animate-demo-4.json
│       │   │   ├── text-animate-demo-5.json
│       │   │   ├── text-animate-demo-6.json
│       │   │   ├── text-animate-demo-7.json
│       │   │   ├── text-animate-demo-8.json
│       │   │   ├── text-animate-demo-9.json
│       │   │   ├── text-animate-demo.json
│       │   │   ├── text-animate.json
│       │   │   ├── text-reveal-demo.json
│       │   │   ├── text-reveal.json
│       │   │   ├── theme-toggler-demo.json
│       │   │   ├── tweet-card-demo.json
│       │   │   ├── tweet-card-images.json
│       │   │   ├── tweet-card-meta-preview.json
│       │   │   ├── tweet-card.json
│       │   │   ├── typing-animation-demo-2.json
│       │   │   ├── typing-animation-demo-3.json
│       │   │   ├── typing-animation-demo-4.json
│       │   │   ├── typing-animation-demo-5.json
│       │   │   ├── typing-animation-demo-6.json
│       │   │   ├── typing-animation-demo-7.json
│       │   │   ├── typing-animation-demo-8.json
│       │   │   ├── typing-animation-demo.json
│       │   │   ├── typing-animation.json
│       │   │   ├── utils.json
│       │   │   ├── video-text-demo.json
│       │   │   ├── video-text.json
│       │   │   ├── warp-background-demo.json
│       │   │   ├── warp-background.json
│       │   │   ├── word-rotate-demo.json
│       │   │   └── word-rotate.json
│       │   ├── registry.json
│       │   └── site.webmanifest
│       ├── registry/
│       │   ├── __index__.tsx
│       │   ├── example/
│       │   │   ├── android-demo-2.tsx
│       │   │   ├── android-demo-3.tsx
│       │   │   ├── android-demo.tsx
│       │   │   ├── animated-beam-bidirectional.tsx
│       │   │   ├── animated-beam-demo.tsx
│       │   │   ├── animated-beam-multiple-inputs.tsx
│       │   │   ├── animated-beam-multiple-outputs.tsx
│       │   │   ├── animated-beam-unidirectional.tsx
│       │   │   ├── animated-circular-progress-bar-demo.tsx
│       │   │   ├── animated-gradient-text-demo-2.tsx
│       │   │   ├── animated-gradient-text-demo.tsx
│       │   │   ├── animated-grid-pattern-demo.tsx
│       │   │   ├── animated-list-demo.tsx
│       │   │   ├── animated-shiny-text-demo.tsx
│       │   │   ├── animated-theme-toggler-demo.tsx
│       │   │   ├── aurora-text-demo.tsx
│       │   │   ├── avatar-circles-demo.tsx
│       │   │   ├── bento-demo-vertical.tsx
│       │   │   ├── bento-demo.tsx
│       │   │   ├── blur-fade-demo.tsx
│       │   │   ├── blur-fade-text-demo.tsx
│       │   │   ├── border-beam-demo-2.tsx
│       │   │   ├── border-beam-demo-3.tsx
│       │   │   ├── border-beam-demo-4.tsx
│       │   │   ├── border-beam-demo.tsx
│       │   │   ├── code-comparison-demo.tsx
│       │   │   ├── comic-text-demo.tsx
│       │   │   ├── confetti-basic-cannon.tsx
│       │   │   ├── confetti-custom-shapes.tsx
│       │   │   ├── confetti-demo.tsx
│       │   │   ├── confetti-emoji.tsx
│       │   │   ├── confetti-fireworks.tsx
│       │   │   ├── confetti-random-direction.tsx
│       │   │   ├── confetti-side-cannons.tsx
│       │   │   ├── confetti-stars.tsx
│       │   │   ├── cool-mode-custom.tsx
│       │   │   ├── cool-mode-demo.tsx
│       │   │   ├── dock-demo-2.tsx
│       │   │   ├── dock-demo-3.tsx
│       │   │   ├── dock-demo.tsx
│       │   │   ├── dot-pattern-demo.tsx
│       │   │   ├── dot-pattern-linear-gradient.tsx
│       │   │   ├── dot-pattern-with-glow-effect.tsx
│       │   │   ├── dotted-map-demo-2.tsx
│       │   │   ├── dotted-map-demo-3.tsx
│       │   │   ├── dotted-map-demo.tsx
│       │   │   ├── file-tree-demo.tsx
│       │   │   ├── flickering-grid-demo.tsx
│       │   │   ├── flickering-grid-rounded-demo.tsx
│       │   │   ├── globe-demo.tsx
│       │   │   ├── grid-pattern-dashed.tsx
│       │   │   ├── grid-pattern-demo.tsx
│       │   │   ├── grid-pattern-linear-gradient.tsx
│       │   │   ├── hero-video-dialog-demo-top-in-bottom-out.tsx
│       │   │   ├── hero-video-dialog-demo.tsx
│       │   │   ├── highlighter-demo.tsx
│       │   │   ├── hyper-text-demo.tsx
│       │   │   ├── icon-cloud-demo-2.tsx
│       │   │   ├── icon-cloud-demo-3.tsx
│       │   │   ├── icon-cloud-demo.tsx
│       │   │   ├── interactive-grid-pattern-demo-2.tsx
│       │   │   ├── interactive-grid-pattern-demo.tsx
│       │   │   ├── interactive-hover-button-demo.tsx
│       │   │   ├── iphone-demo-2.tsx
│       │   │   ├── iphone-demo-3.tsx
│       │   │   ├── iphone-demo.tsx
│       │   │   ├── lens-demo-2.tsx
│       │   │   ├── lens-demo-3.tsx
│       │   │   ├── lens-demo.tsx
│       │   │   ├── light-rays-demo.tsx
│       │   │   ├── line-shadow-text-demo.tsx
│       │   │   ├── magic-card-demo.tsx
│       │   │   ├── magic-card-demo2.tsx
│       │   │   ├── marquee-3d.tsx
│       │   │   ├── marquee-demo-vertical.tsx
│       │   │   ├── marquee-demo.tsx
│       │   │   ├── marquee-logos.tsx
│       │   │   ├── meteors-demo.tsx
│       │   │   ├── morphing-text-demo.tsx
│       │   │   ├── neon-gradient-card-demo.tsx
│       │   │   ├── number-ticker-decimal-demo.tsx
│       │   │   ├── number-ticker-demo-2.tsx
│       │   │   ├── number-ticker-demo.tsx
│       │   │   ├── orbiting-circles-demo.tsx
│       │   │   ├── particles-demo.tsx
│       │   │   ├── pixel-image-demo.tsx
│       │   │   ├── pointer-demo-1.tsx
│       │   │   ├── progressive-blur-demo.tsx
│       │   │   ├── pulsating-button-demo.tsx
│       │   │   ├── rainbow-button-demo-2.tsx
│       │   │   ├── rainbow-button-demo.tsx
│       │   │   ├── retro-grid-demo.tsx
│       │   │   ├── ripple-button-demo.tsx
│       │   │   ├── ripple-demo.tsx
│       │   │   ├── safari-demo-2.tsx
│       │   │   ├── safari-demo-3.tsx
│       │   │   ├── safari-demo-4.tsx
│       │   │   ├── safari-demo.tsx
│       │   │   ├── scroll-based-velocity-demo.tsx
│       │   │   ├── scroll-based-velocity-images-demo.tsx
│       │   │   ├── scroll-progress-demo.tsx
│       │   │   ├── shimmer-button-demo.tsx
│       │   │   ├── shine-border-demo-2.tsx
│       │   │   ├── shine-border-demo.tsx
│       │   │   ├── shiny-button-demo.tsx
│       │   │   ├── smooth-cursor-demo.tsx
│       │   │   ├── sparkles-text-demo.tsx
│       │   │   ├── spinning-text-demo-2.tsx
│       │   │   ├── spinning-text-demo.tsx
│       │   │   ├── striped-pattern-dashed.tsx
│       │   │   ├── striped-pattern-demo.tsx
│       │   │   ├── striped-pattern-right.tsx
│       │   │   ├── terminal-demo-2.tsx
│       │   │   ├── terminal-demo.tsx
│       │   │   ├── text-animate-demo-2.tsx
│       │   │   ├── text-animate-demo-3.tsx
│       │   │   ├── text-animate-demo-4.tsx
│       │   │   ├── text-animate-demo-5.tsx
│       │   │   ├── text-animate-demo-6.tsx
│       │   │   ├── text-animate-demo-7.tsx
│       │   │   ├── text-animate-demo-8.tsx
│       │   │   ├── text-animate-demo-9.tsx
│       │   │   ├── text-animate-demo.tsx
│       │   │   ├── text-reveal-demo.tsx
│       │   │   ├── tweet-card-demo.tsx
│       │   │   ├── tweet-card-images.tsx
│       │   │   ├── tweet-card-meta-preview.tsx
│       │   │   ├── typing-animation-demo-2.tsx
│       │   │   ├── typing-animation-demo-3.tsx
│       │   │   ├── typing-animation-demo-4.tsx
│       │   │   ├── typing-animation-demo-5.tsx
│       │   │   ├── typing-animation-demo-6.tsx
│       │   │   ├── typing-animation-demo-7.tsx
│       │   │   ├── typing-animation-demo-8.tsx
│       │   │   ├── typing-animation-demo.tsx
│       │   │   ├── video-text-demo.tsx
│       │   │   ├── warp-background-demo.tsx
│       │   │   └── word-rotate-demo.tsx
│       │   ├── index.ts
│       │   ├── lib/
│       │   │   └── utils.ts
│       │   ├── magicui/
│       │   │   ├── android.tsx
│       │   │   ├── animated-beam.tsx
│       │   │   ├── animated-circular-progress-bar.tsx
│       │   │   ├── animated-gradient-text.tsx
│       │   │   ├── animated-grid-pattern.tsx
│       │   │   ├── animated-list.tsx
│       │   │   ├── animated-shiny-text.tsx
│       │   │   ├── animated-subscribe-button.tsx
│       │   │   ├── animated-theme-toggler.tsx
│       │   │   ├── aurora-text.tsx
│       │   │   ├── avatar-circles.tsx
│       │   │   ├── bento-grid.tsx
│       │   │   ├── blur-fade.tsx
│       │   │   ├── border-beam.tsx
│       │   │   ├── client-tweet-card.tsx
│       │   │   ├── code-comparison.tsx
│       │   │   ├── comic-text.tsx
│       │   │   ├── confetti.tsx
│       │   │   ├── cool-mode.tsx
│       │   │   ├── dock.tsx
│       │   │   ├── dot-pattern.tsx
│       │   │   ├── dotted-map.tsx
│       │   │   ├── file-tree.tsx
│       │   │   ├── flickering-grid.tsx
│       │   │   ├── globe.tsx
│       │   │   ├── grid-pattern.tsx
│       │   │   ├── hero-video-dialog.tsx
│       │   │   ├── highlighter.tsx
│       │   │   ├── hyper-text.tsx
│       │   │   ├── icon-cloud.tsx
│       │   │   ├── interactive-grid-pattern.tsx
│       │   │   ├── interactive-hover-button.tsx
│       │   │   ├── iphone.tsx
│       │   │   ├── lens.tsx
│       │   │   ├── light-rays.tsx
│       │   │   ├── line-shadow-text.tsx
│       │   │   ├── magic-card.tsx
│       │   │   ├── marquee.tsx
│       │   │   ├── meteors.tsx
│       │   │   ├── morphing-text.tsx
│       │   │   ├── neon-gradient-card.tsx
│       │   │   ├── number-ticker.tsx
│       │   │   ├── orbiting-circles.tsx
│       │   │   ├── particles.tsx
│       │   │   ├── pixel-image.tsx
│       │   │   ├── pointer.tsx
│       │   │   ├── progressive-blur.tsx
│       │   │   ├── pulsating-button.tsx
│       │   │   ├── rainbow-button.tsx
│       │   │   ├── retro-grid.tsx
│       │   │   ├── ripple-button.tsx
│       │   │   ├── ripple.tsx
│       │   │   ├── safari.tsx
│       │   │   ├── scroll-based-velocity.tsx
│       │   │   ├── scroll-progress.tsx
│       │   │   ├── shimmer-button.tsx
│       │   │   ├── shine-border.tsx
│       │   │   ├── shiny-button.tsx
│       │   │   ├── smooth-cursor.tsx
│       │   │   ├── sparkles-text.tsx
│       │   │   ├── spinning-text.tsx
│       │   │   ├── striped-pattern.tsx
│       │   │   ├── terminal.tsx
│       │   │   ├── text-animate.tsx
│       │   │   ├── text-reveal.tsx
│       │   │   ├── tweet-card.tsx
│       │   │   ├── typing-animation.tsx
│       │   │   ├── video-text.tsx
│       │   │   ├── warp-background.tsx
│       │   │   └── word-rotate.tsx
│       │   ├── registry-examples.ts
│       │   ├── registry-lib.ts
│       │   └── registry-ui.ts
│       ├── registry.json
│       ├── scripts/
│       │   ├── build-registry.mts
│       │   └── sync-example-registry-dependencies.mts
│       ├── source.config.ts
│       ├── styles/
│       │   └── globals.css
│       ├── tsconfig.json
│       ├── tsconfig.scripts.json
│       └── types/
│           ├── index.d.ts
│           └── unist.ts
├── lefthook.yml
├── package.json
├── pnpm-workspace.yaml
├── registry.json
├── skills/
│   └── magic-ui/
│       ├── SKILL.md
│       └── references/
│           ├── components.md
│           └── recipes.md
└── turbo.json
Download .txt
SYMBOL INDEX (642 symbols across 311 files)

FILE: apps/www/app/(blog)/blog/[...slug]/page.tsx
  type PageProps (line 22) | interface PageProps {
  function generateStaticParams (line 28) | function generateStaticParams() {
  function getDocFromParams (line 32) | async function getDocFromParams({ params }: PageProps) {
  function generateMetadata (line 44) | async function generateMetadata({
  function BlogPage (line 80) | async function BlogPage({ params }: PageProps) {

FILE: apps/www/app/(blog)/blog/layout.tsx
  function Layout (line 4) | function Layout({ children }: { children: React.ReactNode }) {

FILE: apps/www/app/(blog)/blog/page.tsx
  function generateStaticParams (line 22) | function generateStaticParams() {
  constant BLOG_DESCRIPTION (line 26) | const BLOG_DESCRIPTION =
  function Page (line 34) | async function Page({

FILE: apps/www/app/(docs)/docs/[[...slug]]/page.tsx
  function generateStaticParams (line 26) | function generateStaticParams() {
  type DocPageProps (line 30) | interface DocPageProps {
  function getDocFromParams (line 36) | async function getDocFromParams({ params }: DocPageProps) {
  function generateMetadata (line 48) | async function generateMetadata({
  function DocPage (line 87) | async function DocPage({ params }: DocPageProps) {

FILE: apps/www/app/(docs)/docs/layout.tsx
  function DocsLayout (line 6) | function DocsLayout({

FILE: apps/www/app/(docs)/docs/loading.tsx
  function Loading (line 3) | function Loading() {

FILE: apps/www/app/(docs)/docs/not-found.tsx
  function NotFound (line 9) | function NotFound() {

FILE: apps/www/app/(docs)/layout.tsx
  type MarketingLayoutProps (line 5) | interface MarketingLayoutProps {
  function MarketingLayout (line 9) | async function MarketingLayout({

FILE: apps/www/app/(marketing)/layout.tsx
  type MarketingLayoutProps (line 5) | interface MarketingLayoutProps {
  function MarketingLayout (line 9) | async function MarketingLayout({

FILE: apps/www/app/(marketing)/page.tsx
  function Home (line 6) | function Home() {

FILE: apps/www/app/(marketing)/showcase/[...slug]/page.tsx
  function generateStaticParams (line 12) | function generateStaticParams() {
  type PageProps (line 16) | interface PageProps {
  function getDocFromParams (line 22) | async function getDocFromParams({ params }: PageProps) {
  function generateMetadata (line 34) | async function generateMetadata({
  function PagePage (line 72) | async function PagePage({ params }: PageProps) {

FILE: apps/www/app/(marketing)/showcase/page.tsx
  function Page (line 5) | function Page() {

FILE: apps/www/app/api/blog-webhook/route.ts
  constant REPO_OWNER (line 3) | const REPO_OWNER = "magicuidesign"
  constant REPO_NAME (line 4) | const REPO_NAME = "magicui"
  constant BRANCH (line 5) | const BRANCH = "main"
  constant WORKFLOW_FILE (line 6) | const WORKFLOW_FILE = "publish-article.yml"
  function POST (line 8) | async function POST(request: NextRequest) {

FILE: apps/www/app/layout.tsx
  function RootLayout (line 30) | function RootLayout({

FILE: apps/www/app/llm/[[...slug]]/route.ts
  function GET (line 9) | async function GET(
  function generateStaticParams (line 33) | function generateStaticParams() {

FILE: apps/www/app/not-found.tsx
  function NotFound (line 9) | function NotFound() {

FILE: apps/www/app/og/route.tsx
  function loadAssets (line 5) | async function loadAssets(): Promise<
  function GET (line 40) | async function GET(request: Request) {

FILE: apps/www/app/robots.ts
  function robots (line 3) | function robots(): MetadataRoute.Robots {

FILE: apps/www/app/sitemap.ts
  function sitemap (line 6) | async function sitemap(): Promise<MetadataRoute.Sitemap> {

FILE: apps/www/components/analytics.tsx
  function Analytics (line 5) | function Analytics() {

FILE: apps/www/components/blog/mobile-toc.tsx
  function MobileTOC (line 17) | function MobileTOC() {

FILE: apps/www/components/blog/table-of-contents.tsx
  function BlogTableOfContents (line 19) | function BlogTableOfContents({

FILE: apps/www/components/blur-image.tsx
  function BlurImage (line 6) | function BlurImage(props: ImageProps) {

FILE: apps/www/components/callout.tsx
  function Callout (line 4) | function Callout({

FILE: apps/www/components/code-block-command.tsx
  function CodeBlockCommand (line 16) | function CodeBlockCommand({

FILE: apps/www/components/code-block-wrapper.tsx
  type CodeBlockProps (line 13) | interface CodeBlockProps extends React.HTMLAttributes<HTMLDivElement> {
  function CodeBlockWrapper (line 17) | function CodeBlockWrapper({

FILE: apps/www/components/code-collapsible-wrapper.tsx
  function CodeCollapsibleWrapper (line 14) | function CodeCollapsibleWrapper({

FILE: apps/www/components/code-tabs.tsx
  function CodeTabs (line 8) | function CodeTabs({ children }: React.ComponentProps<typeof Tabs>) {

FILE: apps/www/components/command-menu.tsx
  function CommandMenu (line 28) | function CommandMenu({ ...props }: DialogProps) {

FILE: apps/www/components/component-preview-tabs.tsx
  function ComponentPreviewTabs (line 11) | function ComponentPreviewTabs({

FILE: apps/www/components/component-preview.tsx
  type ComponentPreviewProps (line 7) | interface ComponentPreviewProps extends React.HTMLAttributes<HTMLDivElem...
  function ComponentPreview (line 14) | function ComponentPreview({

FILE: apps/www/components/component-source.tsx
  function ComponentSource (line 12) | async function ComponentSource({
  function ComponentCode (line 72) | function ComponentCode({

FILE: apps/www/components/components-list.tsx
  function ComponentsList (line 5) | function ComponentsList() {

FILE: apps/www/components/contribute.tsx
  function Contribute (line 7) | function Contribute({ page }: { page: Page<PageData> }) {

FILE: apps/www/components/copy-button.tsx
  function copyToClipboardWithMeta (line 15) | async function copyToClipboardWithMeta(value: string, event?: Event) {
  function CopyButton (line 22) | function CopyButton({

FILE: apps/www/components/deal-banner.tsx
  function DealBanner (line 4) | function DealBanner() {

FILE: apps/www/components/discord-link.tsx
  function DiscordLink (line 56) | function DiscordLink({ className }: { className?: string }) {
  function ActiveMembersCount (line 88) | async function ActiveMembersCount({

FILE: apps/www/components/docs-copy-page.tsx
  function getPromptUrl (line 21) | function getPromptUrl(baseURL: string, url: string) {
  function DocsCopyPage (line 28) | function DocsCopyPage({ page, url }: { page: string; url: string }) {

FILE: apps/www/components/docs-sidebar.tsx
  type DocsSidebarNavItemsProps (line 21) | interface DocsSidebarNavItemsProps {
  function DocsSidebarNavItems (line 27) | function DocsSidebarNavItems({
  function DocsSidebar (line 94) | function DocsSidebar({

FILE: apps/www/components/docs-toc.tsx
  function useActiveItem (line 15) | function useActiveItem(itemIds: string[]) {
  function DocsTableOfContents (line 50) | function DocsTableOfContents({

FILE: apps/www/components/github-link.tsx
  function GitHubLink (line 55) | function GitHubLink({ className }: { className?: string }) {
  function StarsCount (line 82) | async function StarsCount() {

FILE: apps/www/components/gradient-blur.tsx
  type GradientBlurProps (line 5) | interface GradientBlurProps {

FILE: apps/www/components/icons.tsx
  type IconProps (line 28) | type IconProps = React.SVGProps<SVGSVGElement>
  function getIconForLanguageExtension (line 669) | function getIconForLanguageExtension(language: string) {

FILE: apps/www/components/logo-button.tsx
  function LogoButton (line 15) | function LogoButton() {

FILE: apps/www/components/main-nav.tsx
  function MainNav (line 11) | function MainNav({

FILE: apps/www/components/mobile-nav.tsx
  function MobileNav (line 16) | function MobileNav({ className }: { className?: string }) {
  function MobileLink (line 136) | function MobileLink({

FILE: apps/www/components/mode-toggle.tsx
  function ModeToggle (line 9) | function ModeToggle() {

FILE: apps/www/components/open-in-v0-button.tsx
  function OpenInV0Button (line 3) | function OpenInV0Button({ url }: { url: string }) {

FILE: apps/www/components/ping-dot.tsx
  function PingDot (line 1) | function PingDot() {

FILE: apps/www/components/posthog-provider.tsx
  function PostHogPageview (line 16) | function PostHogPageview(): React.ReactNode {
  function PHProvider (line 38) | function PHProvider({ children }: { children: React.ReactNode }) {

FILE: apps/www/components/sections/component-demos.tsx
  constant PAGE (line 6) | const PAGE = "home"
  function ComponentDemos (line 8) | function ComponentDemos() {

FILE: apps/www/components/sections/cta.tsx
  function CTASection (line 6) | function CTASection() {

FILE: apps/www/components/sections/expandable-masonary-section.tsx
  type ExpandableMasonarySectionProps (line 13) | interface ExpandableMasonarySectionProps {
  function ExpandableMasonarySection (line 17) | function ExpandableMasonarySection({

FILE: apps/www/components/sections/hero.tsx
  function Hero (line 10) | function Hero() {

FILE: apps/www/components/sections/showcase.tsx
  function isExternalHref (line 8) | function isExternalHref(href: string) {
  type ShowcaseCardProps (line 17) | interface ShowcaseCardProps {
  function ShowcaseCard (line 23) | function ShowcaseCard({
  function Showcase (line 57) | function Showcase() {

FILE: apps/www/components/sections/testimonial-tweet-link.tsx
  type TestimonialTweetLinkProps (line 9) | interface TestimonialTweetLinkProps {
  function TestimonialTweetLink (line 30) | function TestimonialTweetLink({

FILE: apps/www/components/sections/testimonials.tsx
  function Testimonials (line 56) | function Testimonials() {

FILE: apps/www/components/sections/video-testimonials.tsx
  constant YOUTUBE_THUMBNAIL_BASE_URL (line 8) | const YOUTUBE_THUMBNAIL_BASE_URL = "https://img.youtube.com/vi"
  constant VIDEO_EMBEDS (line 9) | const VIDEO_EMBEDS = [
  function extractVideoId (line 17) | function extractVideoId(url: string) {
  function buildEmbedSrc (line 31) | function buildEmbedSrc(url: string, shouldAutoplay: boolean) {
  function PlayIcon (line 39) | function PlayIcon(props: SVGProps<SVGSVGElement>) {
  function VideoTestimonials (line 55) | function VideoTestimonials() {

FILE: apps/www/components/sidebar-cta.tsx
  function ProCTA (line 14) | function ProCTA() {
  function ProductHuntCTA (line 113) | function ProductHuntCTA() {
  function SidebarCTA (line 141) | function SidebarCTA() {

FILE: apps/www/components/site-banner.tsx
  function ProBanner (line 8) | function ProBanner() {
  function ProductHuntBanner (line 33) | function ProductHuntBanner() {
  function SiteBanner (line 58) | function SiteBanner() {

FILE: apps/www/components/site-footer.tsx
  function SiteFooter (line 3) | function SiteFooter() {

FILE: apps/www/components/site-header.tsx
  function SiteHeader (line 11) | function SiteHeader() {

FILE: apps/www/components/tech-stack.tsx
  type TechComponentType (line 8) | type TechComponentType = {
  type TechComponents (line 13) | type TechComponents = Record<string, TechComponentType>
  function TechStack (line 139) | function TechStack({

FILE: apps/www/components/template-open.tsx
  type TemplateOpenProps (line 10) | interface TemplateOpenProps {
  function TemplateOpen (line 15) | function TemplateOpen({ url, free = false }: TemplateOpenProps) {

FILE: apps/www/components/template-preview.tsx
  function TemplatePreview (line 8) | function TemplatePreview({

FILE: apps/www/components/theme-provider.tsx
  function ThemeProvider (line 8) | function ThemeProvider({ children, ...props }: ThemeProviderProps) {

FILE: apps/www/components/ui/accordion.tsx
  function Accordion (line 9) | function Accordion({
  function AccordionItem (line 15) | function AccordionItem({
  function AccordionTrigger (line 28) | function AccordionTrigger({
  function AccordionContent (line 50) | function AccordionContent({

FILE: apps/www/components/ui/badge.tsx
  type BadgeProps (line 26) | interface BadgeProps
  function Badge (line 31) | function Badge({ className, variant, ...props }: BadgeProps) {

FILE: apps/www/components/ui/button.tsx
  function Button (line 42) | function Button({

FILE: apps/www/components/ui/calendar.tsx
  function Calendar (line 14) | function Calendar({
  function CalendarDayButton (line 175) | function CalendarDayButton({

FILE: apps/www/components/ui/command.tsx
  function Command (line 16) | function Command({
  function CommandDialog (line 32) | function CommandDialog({
  function CommandInput (line 63) | function CommandInput({
  function CommandList (line 85) | function CommandList({
  function CommandEmpty (line 101) | function CommandEmpty({
  function CommandGroup (line 113) | function CommandGroup({
  function CommandSeparator (line 129) | function CommandSeparator({
  function CommandItem (line 142) | function CommandItem({
  function CommandShortcut (line 158) | function CommandShortcut({

FILE: apps/www/components/ui/dialog.tsx
  function Dialog (line 9) | function Dialog({
  function DialogTrigger (line 15) | function DialogTrigger({
  function DialogPortal (line 21) | function DialogPortal({
  function DialogClose (line 27) | function DialogClose({
  function DialogOverlay (line 33) | function DialogOverlay({
  function DialogContent (line 49) | function DialogContent({
  function DialogHeader (line 83) | function DialogHeader({ className, ...props }: React.ComponentProps<"div...
  function DialogFooter (line 93) | function DialogFooter({ className, ...props }: React.ComponentProps<"div...
  function DialogTitle (line 106) | function DialogTitle({
  function DialogDescription (line 119) | function DialogDescription({

FILE: apps/www/components/ui/dropdown-menu.tsx
  function DropdownMenu (line 9) | function DropdownMenu({
  function DropdownMenuPortal (line 15) | function DropdownMenuPortal({
  function DropdownMenuTrigger (line 23) | function DropdownMenuTrigger({
  function DropdownMenuContent (line 34) | function DropdownMenuContent({
  function DropdownMenuGroup (line 54) | function DropdownMenuGroup({
  function DropdownMenuItem (line 62) | function DropdownMenuItem({
  function DropdownMenuCheckboxItem (line 85) | function DropdownMenuCheckboxItem({
  function DropdownMenuRadioGroup (line 111) | function DropdownMenuRadioGroup({
  function DropdownMenuRadioItem (line 122) | function DropdownMenuRadioItem({
  function DropdownMenuLabel (line 146) | function DropdownMenuLabel({
  function DropdownMenuSeparator (line 166) | function DropdownMenuSeparator({
  function DropdownMenuShortcut (line 179) | function DropdownMenuShortcut({
  function DropdownMenuSub (line 195) | function DropdownMenuSub({
  function DropdownMenuSubTrigger (line 201) | function DropdownMenuSubTrigger({
  function DropdownMenuSubContent (line 225) | function DropdownMenuSubContent({

FILE: apps/www/components/ui/form.tsx
  type FormFieldContextValue (line 20) | type FormFieldContextValue<
  type FormItemContextValue (line 67) | type FormItemContextValue = {

FILE: apps/www/components/ui/sheet.tsx
  type SheetContentProps (line 52) | interface SheetContentProps

FILE: apps/www/components/ui/sidebar.tsx
  constant SIDEBAR_COOKIE_NAME (line 28) | const SIDEBAR_COOKIE_NAME = "sidebar_state"
  constant SIDEBAR_COOKIE_MAX_AGE (line 29) | const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7
  constant SIDEBAR_WIDTH (line 30) | const SIDEBAR_WIDTH = "16rem"
  constant SIDEBAR_WIDTH_MOBILE (line 31) | const SIDEBAR_WIDTH_MOBILE = "18rem"
  constant SIDEBAR_WIDTH_ICON (line 32) | const SIDEBAR_WIDTH_ICON = "3rem"
  constant SIDEBAR_KEYBOARD_SHORTCUT (line 33) | const SIDEBAR_KEYBOARD_SHORTCUT = "b"
  type SidebarContextProps (line 35) | type SidebarContextProps = {
  function useSidebar (line 47) | function useSidebar() {
  function SidebarProvider (line 56) | function SidebarProvider({
  function Sidebar (line 154) | function Sidebar({
  function SidebarTrigger (line 256) | function SidebarTrigger({
  function SidebarRail (line 282) | function SidebarRail({ className, ...props }: React.ComponentProps<"butt...
  function SidebarInset (line 307) | function SidebarInset({ className, ...props }: React.ComponentProps<"mai...
  function SidebarInput (line 321) | function SidebarInput({
  function SidebarHeader (line 335) | function SidebarHeader({ className, ...props }: React.ComponentProps<"di...
  function SidebarFooter (line 346) | function SidebarFooter({ className, ...props }: React.ComponentProps<"di...
  function SidebarSeparator (line 357) | function SidebarSeparator({
  function SidebarContent (line 371) | function SidebarContent({ className, ...props }: React.ComponentProps<"d...
  function SidebarGroup (line 385) | function SidebarGroup({ className, ...props }: React.ComponentProps<"div...
  function SidebarGroupLabel (line 396) | function SidebarGroupLabel({
  function SidebarGroupAction (line 417) | function SidebarGroupAction({
  function SidebarGroupContent (line 440) | function SidebarGroupContent({
  function SidebarMenu (line 454) | function SidebarMenu({ className, ...props }: React.ComponentProps<"ul">) {
  function SidebarMenuItem (line 465) | function SidebarMenuItem({ className, ...props }: React.ComponentProps<"...
  function SidebarMenuButton (line 498) | function SidebarMenuButton({
  function SidebarMenuAction (line 548) | function SidebarMenuAction({
  function SidebarMenuBadge (line 580) | function SidebarMenuBadge({
  function SidebarMenuSkeleton (line 602) | function SidebarMenuSkeleton({
  function SidebarMenuSub (line 640) | function SidebarMenuSub({ className, ...props }: React.ComponentProps<"u...
  function SidebarMenuSubItem (line 655) | function SidebarMenuSubItem({
  function SidebarMenuSubButton (line 669) | function SidebarMenuSubButton({

FILE: apps/www/components/ui/skeleton.tsx
  function Skeleton (line 3) | function Skeleton({

FILE: apps/www/components/ui/sonner.tsx
  type ToasterProps (line 6) | type ToasterProps = React.ComponentProps<typeof Sonner>

FILE: apps/www/components/ui/tabs.tsx
  function Tabs (line 8) | function Tabs({
  function TabsList (line 21) | function TabsList({
  function TabsTrigger (line 37) | function TabsTrigger({
  function TabsContent (line 53) | function TabsContent({

FILE: apps/www/components/ui/tooltip.tsx
  function TooltipProvider (line 8) | function TooltipProvider({
  function Tooltip (line 21) | function Tooltip({
  function TooltipTrigger (line 31) | function TooltipTrigger({
  function TooltipContent (line 37) | function TooltipContent({

FILE: apps/www/components/version-select.tsx
  constant DOMAINS (line 14) | const DOMAINS = {
  function VersionSelect (line 19) | function VersionSelect({ className }: { className?: string }) {

FILE: apps/www/config/docs.ts
  type DocsConfig (line 3) | interface DocsConfig {
  type DocNavLink (line 8) | interface DocNavLink {
  function flattenSidebarItems (line 13) | function flattenSidebarItems(
  function getFlattenedDocsNav (line 28) | function getFlattenedDocsNav(): DocNavLink[] {
  function getNeighboursFromConfig (line 38) | function getNeighboursFromConfig(currentUrl: string): {

FILE: apps/www/config/site.ts
  type SiteConfig (line 23) | type SiteConfig = typeof siteConfig

FILE: apps/www/hooks/use-config.ts
  type Config (line 4) | type Config = {
  function useConfig (line 14) | function useConfig() {

FILE: apps/www/hooks/use-copy-to-clipboard.ts
  function useCopyToClipboard (line 5) | function useCopyToClipboard({

FILE: apps/www/hooks/use-is-mac.ts
  function useIsMac (line 3) | function useIsMac() {

FILE: apps/www/hooks/use-meta-color.ts
  constant META_THEME_COLORS (line 4) | const META_THEME_COLORS = {
  function useMetaColor (line 9) | function useMetaColor() {

FILE: apps/www/hooks/use-mobile.ts
  constant MOBILE_BREAKPOINT (line 3) | const MOBILE_BREAKPOINT = 768
  function useIsMobile (line 5) | function useIsMobile() {

FILE: apps/www/hooks/use-mounted.ts
  function useMounted (line 3) | function useMounted() {

FILE: apps/www/lib/events.ts
  type Event (line 35) | type Event = z.infer<typeof eventSchema>
  function trackEvent (line 37) | function trackEvent(input: Event): void {

FILE: apps/www/lib/github.ts
  type GitHubIssueUrlParams (line 1) | interface GitHubIssueUrlParams {
  function getGitHubIssueUrl (line 29) | function getGitHubIssueUrl(params: GitHubIssueUrlParams): string {
  type GithubFileUrlParams (line 45) | interface GithubFileUrlParams {
  function getGithubFileUrl (line 51) | function getGithubFileUrl(params: GithubFileUrlParams) {

FILE: apps/www/lib/highlight-code.ts
  method code (line 6) | code(node) {
  function highlightCode (line 59) | async function highlightCode(code: string, language: string = "tsx") {

FILE: apps/www/lib/posthog.ts
  type PostHogPropertyValue (line 3) | type PostHogPropertyValue = string | number | boolean | null
  type PostHogEventProperties (line 5) | type PostHogEventProperties = Record<string, PostHogPropertyValue>
  function initPostHog (line 13) | function initPostHog(): void {
  function capturePostHogEvent (line 38) | function capturePostHogEvent(

FILE: apps/www/lib/registry.ts
  type RegistryItemFile (line 10) | interface RegistryItemFile {
  function getRegistryComponent (line 17) | function getRegistryComponent(name: string) {
  function getRegistryItem (line 21) | async function getRegistryItem(name: string) {
  function getFileContent (line 68) | async function getFileContent(file: RegistryItemFile) {
  function getFileTarget (line 100) | function getFileTarget(file: RegistryItemFile) {
  function createTempSourceFile (line 129) | async function createTempSourceFile(filename: string) {
  function fixFilePaths (line 134) | function fixFilePaths(files: RegistryItemFile[]) {
  function fixImport (line 152) | function fixImport(content: string) {
  type FileTree (line 177) | type FileTree = {
  function createFileTreeForRegistryItemFiles (line 183) | function createFileTreeForRegistryItemFiles(

FILE: apps/www/lib/rehype-component.ts
  function rehypeComponent (line 9) | function rehypeComponent() {
  function getNodeAttributeByName (line 148) | function getNodeAttributeByName(node: UnistNode, name: string) {

FILE: apps/www/lib/rehype-npm-command.ts
  function rehypeNpmCommand (line 4) | function rehypeNpmCommand() {

FILE: apps/www/lib/types.ts
  type SiteConfig (line 1) | type SiteConfig = {
  type MDXFrontMatter (line 16) | type MDXFrontMatter = {

FILE: apps/www/lib/utils.ts
  function cn (line 8) | function cn(...inputs: ClassValue[]) {
  function humanize (line 15) | function humanize(name: string): string {
  function formatDate (line 49) | function formatDate(input: string | number): string {
  function absoluteUrl (line 89) | function absoluteUrl(path: string) {
  function constructMetadata (line 94) | function constructMetadata({

FILE: apps/www/middleware.ts
  function middleware (line 5) | async function middleware() {}

FILE: apps/www/next.config.mjs
  method redirects (line 21) | async redirects() {
  method rewrites (line 55) | rewrites() {

FILE: apps/www/registry/example/android-demo-2.tsx
  function AndroidDemo (line 3) | function AndroidDemo() {

FILE: apps/www/registry/example/android-demo-3.tsx
  function AndroidDemo (line 3) | function AndroidDemo() {

FILE: apps/www/registry/example/android-demo.tsx
  function AndroidDemo (line 3) | function AndroidDemo() {

FILE: apps/www/registry/example/animated-beam-bidirectional.tsx
  function AnimatedBeamDemo (line 27) | function AnimatedBeamDemo() {

FILE: apps/www/registry/example/animated-beam-demo.tsx
  function AnimatedBeamDemo (line 27) | function AnimatedBeamDemo() {

FILE: apps/www/registry/example/animated-beam-multiple-inputs.tsx
  function AnimatedBeamMultipleOutputDemo (line 27) | function AnimatedBeamMultipleOutputDemo({

FILE: apps/www/registry/example/animated-beam-multiple-outputs.tsx
  function AnimatedBeamMultipleOutputDemo (line 27) | function AnimatedBeamMultipleOutputDemo({

FILE: apps/www/registry/example/animated-beam-unidirectional.tsx
  function AnimatedBeamDemo (line 27) | function AnimatedBeamDemo() {

FILE: apps/www/registry/example/animated-circular-progress-bar-demo.tsx
  function AnimatedCircularProgressBarDemo (line 7) | function AnimatedCircularProgressBarDemo() {

FILE: apps/www/registry/example/animated-gradient-text-demo-2.tsx
  function AnimatedGradientTextDemo (line 3) | function AnimatedGradientTextDemo() {

FILE: apps/www/registry/example/animated-gradient-text-demo.tsx
  function AnimatedGradientTextDemo (line 6) | function AnimatedGradientTextDemo() {

FILE: apps/www/registry/example/animated-grid-pattern-demo.tsx
  function AnimatedGridPatternDemo (line 4) | function AnimatedGridPatternDemo() {

FILE: apps/www/registry/example/animated-list-demo.tsx
  type Item (line 6) | interface Item {
  function AnimatedListDemo (line 85) | function AnimatedListDemo({

FILE: apps/www/registry/example/animated-shiny-text-demo.tsx
  function AnimatedShinyTextDemo (line 6) | function AnimatedShinyTextDemo() {

FILE: apps/www/registry/example/animated-theme-toggler-demo.tsx
  function AnimatedThemeTogglerDemo (line 3) | function AnimatedThemeTogglerDemo() {

FILE: apps/www/registry/example/aurora-text-demo.tsx
  function AuroraTextDemo (line 3) | function AuroraTextDemo() {

FILE: apps/www/registry/example/avatar-circles-demo.tsx
  function AvatarCirclesDemo (line 30) | function AvatarCirclesDemo() {

FILE: apps/www/registry/example/bento-demo-vertical.tsx
  function BentoDemo (line 70) | function BentoDemo() {

FILE: apps/www/registry/example/bento-demo.tsx
  function BentoDemo (line 109) | function BentoDemo() {

FILE: apps/www/registry/example/blur-fade-demo.tsx
  function BlurFadeDemo (line 10) | function BlurFadeDemo() {

FILE: apps/www/registry/example/blur-fade-text-demo.tsx
  function BlurFadeTextDemo (line 3) | function BlurFadeTextDemo() {

FILE: apps/www/registry/example/border-beam-demo-2.tsx
  function MusicPlayer (line 14) | function MusicPlayer() {

FILE: apps/www/registry/example/border-beam-demo-3.tsx
  function LoginForm (line 14) | function LoginForm() {

FILE: apps/www/registry/example/border-beam-demo-4.tsx
  function Component (line 4) | function Component() {

FILE: apps/www/registry/example/border-beam-demo.tsx
  function Component (line 14) | function Component() {

FILE: apps/www/registry/example/code-comparison-demo.tsx
  function CodeComparisonDemo (line 56) | function CodeComparisonDemo() {

FILE: apps/www/registry/example/comic-text-demo.tsx
  function ComicTextDemo (line 3) | function ComicTextDemo() {

FILE: apps/www/registry/example/confetti-basic-cannon.tsx
  function ConfettiButtonDemo (line 3) | function ConfettiButtonDemo() {

FILE: apps/www/registry/example/confetti-custom-shapes.tsx
  function ConfettiCustomShapes (line 7) | function ConfettiCustomShapes() {

FILE: apps/www/registry/example/confetti-demo.tsx
  function ConfettiDemo (line 7) | function ConfettiDemo() {

FILE: apps/www/registry/example/confetti-emoji.tsx
  function ConfettiEmoji (line 7) | function ConfettiEmoji() {

FILE: apps/www/registry/example/confetti-fireworks.tsx
  function ConfettiFireworks (line 7) | function ConfettiFireworks() {

FILE: apps/www/registry/example/confetti-random-direction.tsx
  function ConfettiButtonDemo (line 3) | function ConfettiButtonDemo() {

FILE: apps/www/registry/example/confetti-side-cannons.tsx
  function ConfettiSideCannons (line 7) | function ConfettiSideCannons() {

FILE: apps/www/registry/example/confetti-stars.tsx
  function ConfettiStars (line 7) | function ConfettiStars() {

FILE: apps/www/registry/example/cool-mode-custom.tsx
  function CoolModeCustom (line 4) | function CoolModeCustom() {

FILE: apps/www/registry/example/cool-mode-demo.tsx
  function CoolModeDemo (line 4) | function CoolModeDemo() {

FILE: apps/www/registry/example/dock-demo-2.tsx
  type IconProps (line 7) | type IconProps = React.HTMLAttributes<SVGElement>
  function DockDemo (line 9) | function DockDemo() {

FILE: apps/www/registry/example/dock-demo-3.tsx
  type IconProps (line 7) | type IconProps = React.HTMLAttributes<SVGElement>
  function DockDemo (line 9) | function DockDemo() {

FILE: apps/www/registry/example/dock-demo.tsx
  type IconProps (line 18) | type IconProps = React.HTMLAttributes<SVGElement>
  constant DATA (line 64) | const DATA = {
  function DockDemo (line 95) | function DockDemo() {

FILE: apps/www/registry/example/dot-pattern-demo.tsx
  function DotPatternDemo (line 6) | function DotPatternDemo() {

FILE: apps/www/registry/example/dot-pattern-linear-gradient.tsx
  function DotPatternLinearGradient (line 6) | function DotPatternLinearGradient() {

FILE: apps/www/registry/example/dot-pattern-with-glow-effect.tsx
  function DotPatternWithGlowEffectDemo (line 6) | function DotPatternWithGlowEffectDemo() {

FILE: apps/www/registry/example/dotted-map-demo-2.tsx
  function Component (line 3) | function Component() {

FILE: apps/www/registry/example/dotted-map-demo-3.tsx
  function Component (line 18) | function Component() {

FILE: apps/www/registry/example/dotted-map-demo.tsx
  type CountryCode (line 7) | type CountryCode = Lowercase<TCountryCode>
  type MyMarker (line 9) | type MyMarker = Marker & {
  function Component (line 31) | function Component() {

FILE: apps/www/registry/example/file-tree-demo.tsx
  function FileTreeDemo (line 4) | function FileTreeDemo() {
  constant ELEMENTS (line 17) | const ELEMENTS: TreeViewElement[] = [

FILE: apps/www/registry/example/flickering-grid-demo.tsx
  function FlickeringGridDemo (line 3) | function FlickeringGridDemo() {

FILE: apps/www/registry/example/flickering-grid-rounded-demo.tsx
  function FlickeringGridRoundedDemo (line 3) | function FlickeringGridRoundedDemo() {

FILE: apps/www/registry/example/globe-demo.tsx
  function GlobeDemo (line 3) | function GlobeDemo() {

FILE: apps/www/registry/example/grid-pattern-dashed.tsx
  function GridPatternDashed (line 6) | function GridPatternDashed() {

FILE: apps/www/registry/example/grid-pattern-demo.tsx
  function GridPatternDemo (line 6) | function GridPatternDemo() {

FILE: apps/www/registry/example/grid-pattern-linear-gradient.tsx
  function GridPatternLinearGradient (line 6) | function GridPatternLinearGradient() {

FILE: apps/www/registry/example/hero-video-dialog-demo-top-in-bottom-out.tsx
  function HeroVideoDialogDemoTopInBottomOut (line 3) | function HeroVideoDialogDemoTopInBottomOut() {

FILE: apps/www/registry/example/hero-video-dialog-demo.tsx
  function HeroVideoDialogDemo (line 3) | function HeroVideoDialogDemo() {

FILE: apps/www/registry/example/highlighter-demo.tsx
  function HighlighterDemo (line 3) | function HighlighterDemo() {

FILE: apps/www/registry/example/hyper-text-demo.tsx
  function HyperTextDemo (line 3) | function HyperTextDemo() {

FILE: apps/www/registry/example/icon-cloud-demo-2.tsx
  function IconCloudDemo (line 21) | function IconCloudDemo() {

FILE: apps/www/registry/example/icon-cloud-demo-3.tsx
  function IconCloudDemo (line 132) | function IconCloudDemo() {

FILE: apps/www/registry/example/icon-cloud-demo.tsx
  function IconCloudDemo (line 36) | function IconCloudDemo() {

FILE: apps/www/registry/example/interactive-grid-pattern-demo-2.tsx
  function InteractiveGridPatternDemo (line 6) | function InteractiveGridPatternDemo() {

FILE: apps/www/registry/example/interactive-grid-pattern-demo.tsx
  function InteractiveGridPatternDemo (line 6) | function InteractiveGridPatternDemo() {

FILE: apps/www/registry/example/interactive-hover-button-demo.tsx
  function InteractiveHoverButtonDemo (line 3) | function InteractiveHoverButtonDemo() {

FILE: apps/www/registry/example/iphone-demo-2.tsx
  function Demo (line 3) | function Demo() {

FILE: apps/www/registry/example/iphone-demo-3.tsx
  function Demo (line 3) | function Demo() {

FILE: apps/www/registry/example/iphone-demo.tsx
  function Demo (line 3) | function Demo() {

FILE: apps/www/registry/example/lens-demo-2.tsx
  function LensDemo (line 12) | function LensDemo() {

FILE: apps/www/registry/example/lens-demo-3.tsx
  function LensDemo (line 12) | function LensDemo() {

FILE: apps/www/registry/example/lens-demo.tsx
  function LensDemo (line 14) | function LensDemo() {

FILE: apps/www/registry/example/light-rays-demo.tsx
  function Component (line 3) | function Component() {

FILE: apps/www/registry/example/line-shadow-text-demo.tsx
  function LineShadowTextDemo (line 7) | function LineShadowTextDemo() {

FILE: apps/www/registry/example/magic-card-demo.tsx
  function MagicCardDemo (line 18) | function MagicCardDemo() {

FILE: apps/www/registry/example/magic-card-demo2.tsx
  function MagicCardDemo (line 19) | function MagicCardDemo() {

FILE: apps/www/registry/example/marquee-3d.tsx
  function Marquee3D (line 65) | function Marquee3D() {

FILE: apps/www/registry/example/marquee-demo-vertical.tsx
  function MarqueeDemoVertical (line 63) | function MarqueeDemoVertical() {

FILE: apps/www/registry/example/marquee-demo.tsx
  function MarqueeDemo (line 81) | function MarqueeDemo() {

FILE: apps/www/registry/example/marquee-logos.tsx
  function MarqueeLogos (line 39) | function MarqueeLogos() {

FILE: apps/www/registry/example/meteors-demo.tsx
  function MeteorDemo (line 3) | function MeteorDemo() {

FILE: apps/www/registry/example/morphing-text-demo.tsx
  function MorphingTextDemo (line 15) | function MorphingTextDemo() {

FILE: apps/www/registry/example/neon-gradient-card-demo.tsx
  function NeonGradientCardDemo (line 3) | function NeonGradientCardDemo() {

FILE: apps/www/registry/example/number-ticker-decimal-demo.tsx
  function NumberTickerDemo (line 3) | function NumberTickerDemo() {

FILE: apps/www/registry/example/number-ticker-demo-2.tsx
  function NumberTickerDemo (line 3) | function NumberTickerDemo() {

FILE: apps/www/registry/example/number-ticker-demo.tsx
  function NumberTickerDemo (line 3) | function NumberTickerDemo() {

FILE: apps/www/registry/example/orbiting-circles-demo.tsx
  function OrbitingCirclesDemo (line 3) | function OrbitingCirclesDemo() {

FILE: apps/www/registry/example/particles-demo.tsx
  function ParticlesDemo (line 8) | function ParticlesDemo() {

FILE: apps/www/registry/example/pixel-image-demo.tsx
  function Home (line 3) | function Home() {

FILE: apps/www/registry/example/pointer-demo-1.tsx
  function PointerDemo1 (line 7) | function PointerDemo1() {

FILE: apps/www/registry/example/progressive-blur-demo.tsx
  function ProgressiveBlurDemo (line 6) | function ProgressiveBlurDemo() {

FILE: apps/www/registry/example/pulsating-button-demo.tsx
  function PulsatingButtonDemo (line 3) | function PulsatingButtonDemo() {

FILE: apps/www/registry/example/rainbow-button-demo-2.tsx
  function RainbowButtonDemo (line 3) | function RainbowButtonDemo() {

FILE: apps/www/registry/example/rainbow-button-demo.tsx
  function RainbowButtonDemo (line 3) | function RainbowButtonDemo() {

FILE: apps/www/registry/example/retro-grid-demo.tsx
  function RetroGridDemo (line 5) | function RetroGridDemo() {

FILE: apps/www/registry/example/ripple-button-demo.tsx
  function RippleButtonDemo (line 3) | function RippleButtonDemo() {

FILE: apps/www/registry/example/ripple-demo.tsx
  function RippleDemo (line 3) | function RippleDemo() {

FILE: apps/www/registry/example/safari-demo-2.tsx
  function SafariDemo (line 3) | function SafariDemo() {

FILE: apps/www/registry/example/safari-demo-3.tsx
  function SafariDemo (line 3) | function SafariDemo() {

FILE: apps/www/registry/example/safari-demo-4.tsx
  function SafariDemo (line 3) | function SafariDemo() {

FILE: apps/www/registry/example/safari-demo.tsx
  function SafariDemo (line 3) | function SafariDemo() {

FILE: apps/www/registry/example/scroll-based-velocity-demo.tsx
  function ScrollBasedVelocityDemo (line 6) | function ScrollBasedVelocityDemo() {

FILE: apps/www/registry/example/scroll-based-velocity-images-demo.tsx
  constant IMAGES_ROW_A (line 6) | const IMAGES_ROW_A = [
  constant IMAGES_ROW_B (line 11) | const IMAGES_ROW_B = [
  function ScrollBasedVelocityImagesDemo (line 16) | function ScrollBasedVelocityImagesDemo() {

FILE: apps/www/registry/example/scroll-progress-demo.tsx
  function ScrollProgressDemo (line 3) | function ScrollProgressDemo() {

FILE: apps/www/registry/example/shimmer-button-demo.tsx
  function ShimmerButtonDemo (line 3) | function ShimmerButtonDemo() {

FILE: apps/www/registry/example/shine-border-demo-2.tsx
  function ShineBorderDemo2 (line 18) | function ShineBorderDemo2() {

FILE: apps/www/registry/example/shine-border-demo.tsx
  function ShineBorderDemo (line 14) | function ShineBorderDemo() {

FILE: apps/www/registry/example/shiny-button-demo.tsx
  function ShinyButtonDemo (line 3) | function ShinyButtonDemo() {

FILE: apps/www/registry/example/smooth-cursor-demo.tsx
  function SmoothCursorDemo (line 3) | function SmoothCursorDemo() {

FILE: apps/www/registry/example/sparkles-text-demo.tsx
  function SparklesTextDemo (line 3) | function SparklesTextDemo() {

FILE: apps/www/registry/example/spinning-text-demo-2.tsx
  function SpinningTextBasic (line 3) | function SpinningTextBasic() {

FILE: apps/www/registry/example/spinning-text-demo.tsx
  function SpinningTextBasic (line 3) | function SpinningTextBasic() {

FILE: apps/www/registry/example/striped-pattern-dashed.tsx
  function Component (line 3) | function Component() {

FILE: apps/www/registry/example/striped-pattern-demo.tsx
  function StripedPatternDemo (line 3) | function StripedPatternDemo() {

FILE: apps/www/registry/example/striped-pattern-right.tsx
  function StripedPatternRight (line 3) | function StripedPatternRight() {

FILE: apps/www/registry/example/terminal-demo-2.tsx
  function TerminalDemo2 (line 7) | function TerminalDemo2() {

FILE: apps/www/registry/example/terminal-demo.tsx
  function TerminalDemo (line 7) | function TerminalDemo() {

FILE: apps/www/registry/example/text-animate-demo-2.tsx
  function TextAnimateDemo2 (line 3) | function TextAnimateDemo2() {

FILE: apps/www/registry/example/text-animate-demo-3.tsx
  function TextAnimateDemo3 (line 3) | function TextAnimateDemo3() {

FILE: apps/www/registry/example/text-animate-demo-4.tsx
  function TextAnimateDemo4 (line 3) | function TextAnimateDemo4() {

FILE: apps/www/registry/example/text-animate-demo-5.tsx
  function TextAnimateDemo5 (line 3) | function TextAnimateDemo5() {

FILE: apps/www/registry/example/text-animate-demo-6.tsx
  function TextAnimateDemo6 (line 3) | function TextAnimateDemo6() {

FILE: apps/www/registry/example/text-animate-demo-7.tsx
  function TextAnimateDemo7 (line 3) | function TextAnimateDemo7() {

FILE: apps/www/registry/example/text-animate-demo-8.tsx
  function TextAnimateDemo8 (line 3) | function TextAnimateDemo8() {

FILE: apps/www/registry/example/text-animate-demo-9.tsx
  function TextAnimateDemo9 (line 5) | function TextAnimateDemo9() {

FILE: apps/www/registry/example/text-animate-demo.tsx
  function TextAnimateDemo (line 3) | function TextAnimateDemo() {

FILE: apps/www/registry/example/text-reveal-demo.tsx
  function TextRevealDemo (line 3) | function TextRevealDemo() {

FILE: apps/www/registry/example/tweet-card-demo.tsx
  function TweetDemo (line 7) | function TweetDemo() {

FILE: apps/www/registry/example/tweet-card-images.tsx
  function TweetImages (line 3) | function TweetImages() {

FILE: apps/www/registry/example/tweet-card-meta-preview.tsx
  function TweetMetaPreview (line 3) | function TweetMetaPreview() {

FILE: apps/www/registry/example/typing-animation-demo-2.tsx
  function Component (line 3) | function Component() {

FILE: apps/www/registry/example/typing-animation-demo-3.tsx
  function Component (line 3) | function Component() {

FILE: apps/www/registry/example/typing-animation-demo-4.tsx
  function Component (line 3) | function Component() {

FILE: apps/www/registry/example/typing-animation-demo-5.tsx
  function Component (line 3) | function Component() {

FILE: apps/www/registry/example/typing-animation-demo-6.tsx
  function Component (line 3) | function Component() {

FILE: apps/www/registry/example/typing-animation-demo-7.tsx
  function Component (line 3) | function Component() {

FILE: apps/www/registry/example/typing-animation-demo-8.tsx
  function Component (line 3) | function Component() {

FILE: apps/www/registry/example/typing-animation-demo.tsx
  function Component (line 3) | function Component() {

FILE: apps/www/registry/example/video-text-demo.tsx
  function VideoTextDemo (line 3) | function VideoTextDemo() {

FILE: apps/www/registry/example/warp-background-demo.tsx
  function ExampleComponentDemo (line 9) | function ExampleComponentDemo() {

FILE: apps/www/registry/example/word-rotate-demo.tsx
  function WordRotateDemo (line 3) | function WordRotateDemo() {

FILE: apps/www/registry/index.ts
  constant DEPRECATED_ITEMS (line 7) | const DEPRECATED_ITEMS = [""]
  constant DEFAULT (line 9) | const DEFAULT: RegistryItem = {

FILE: apps/www/registry/lib/utils.ts
  function cn (line 4) | function cn(...inputs: ClassValue[]) {

FILE: apps/www/registry/magicui/android.tsx
  type AndroidProps (line 3) | interface AndroidProps extends SVGProps<SVGSVGElement> {
  function Android (line 10) | function Android({

FILE: apps/www/registry/magicui/animated-beam.tsx
  type AnimatedBeamProps (line 8) | interface AnimatedBeamProps {

FILE: apps/www/registry/magicui/animated-circular-progress-bar.tsx
  type AnimatedCircularProgressBarProps (line 3) | interface AnimatedCircularProgressBarProps {
  function AnimatedCircularProgressBar (line 12) | function AnimatedCircularProgressBar({

FILE: apps/www/registry/magicui/animated-gradient-text.tsx
  type AnimatedGradientTextProps (line 5) | interface AnimatedGradientTextProps extends ComponentPropsWithoutRef<"di...
  function AnimatedGradientText (line 11) | function AnimatedGradientText({

FILE: apps/www/registry/magicui/animated-grid-pattern.tsx
  type AnimatedGridPatternProps (line 15) | interface AnimatedGridPatternProps extends ComponentPropsWithoutRef<"svg...
  type Square (line 27) | type Square = {
  function AnimatedGridPattern (line 33) | function AnimatedGridPattern({

FILE: apps/www/registry/magicui/animated-list.tsx
  function AnimatedListItem (line 13) | function AnimatedListItem({ children }: { children: React.ReactNode }) {
  type AnimatedListProps (line 28) | interface AnimatedListProps extends ComponentPropsWithoutRef<"div"> {

FILE: apps/www/registry/magicui/animated-shiny-text.tsx
  type AnimatedShinyTextProps (line 9) | interface AnimatedShinyTextProps extends ComponentPropsWithoutRef<"span"> {

FILE: apps/www/registry/magicui/animated-subscribe-button.tsx
  type AnimatedSubscribeButtonProps (line 8) | interface AnimatedSubscribeButtonProps extends Omit<

FILE: apps/www/registry/magicui/animated-theme-toggler.tsx
  type AnimatedThemeTogglerProps (line 9) | interface AnimatedThemeTogglerProps extends React.ComponentPropsWithoutR...

FILE: apps/www/registry/magicui/aurora-text.tsx
  type AuroraTextProps (line 5) | interface AuroraTextProps {

FILE: apps/www/registry/magicui/avatar-circles.tsx
  type Avatar (line 5) | interface Avatar {
  type AvatarCirclesProps (line 9) | interface AvatarCirclesProps {

FILE: apps/www/registry/magicui/bento-grid.tsx
  type BentoGridProps (line 7) | interface BentoGridProps extends ComponentPropsWithoutRef<"div"> {
  type BentoCardProps (line 12) | interface BentoCardProps extends ComponentPropsWithoutRef<"div"> {

FILE: apps/www/registry/magicui/blur-fade.tsx
  type MarginType (line 13) | type MarginType = UseInViewOptions["margin"]
  type BlurFadeProps (line 15) | interface BlurFadeProps extends MotionProps {
  function BlurFade (line 34) | function BlurFade({

FILE: apps/www/registry/magicui/border-beam.tsx
  type BorderBeamProps (line 7) | interface BorderBeamProps {

FILE: apps/www/registry/magicui/code-comparison.tsx
  type CodeComparisonProps (line 13) | interface CodeComparisonProps {
  function CodeComparison (line 23) | function CodeComparison({

FILE: apps/www/registry/magicui/comic-text.tsx
  type ComicTextProps (line 8) | type ComicTextProps = {
  function ComicText (line 15) | function ComicText({

FILE: apps/www/registry/magicui/confetti.tsx
  type Api (line 22) | type Api = {
  type Props (line 26) | type Props = React.ComponentPropsWithRef<"canvas"> & {
  type ConfettiRef (line 33) | type ConfettiRef = Api | null
  type ConfettiButtonProps (line 112) | interface ConfettiButtonProps extends React.ComponentProps<"button"> {

FILE: apps/www/registry/magicui/cool-mode.tsx
  type BaseParticle (line 5) | interface BaseParticle {
  type BaseParticleOptions (line 12) | interface BaseParticleOptions {
  type CoolParticle (line 17) | interface CoolParticle extends BaseParticle {
  type CoolParticleOptions (line 25) | interface CoolParticleOptions extends BaseParticleOptions {
  function generateParticle (line 71) | function generateParticle() {
  function refreshParticles (line 133) | function refreshParticles() {
  function loop (line 166) | function loop() {
  type CoolModeProps (line 234) | interface CoolModeProps {

FILE: apps/www/registry/magicui/dock.tsx
  type DockProps (line 16) | interface DockProps extends VariantProps<typeof dockVariants> {
  constant DEFAULT_SIZE (line 26) | const DEFAULT_SIZE = 40
  constant DEFAULT_MAGNIFICATION (line 27) | const DEFAULT_MAGNIFICATION = 60
  constant DEFAULT_DISTANCE (line 28) | const DEFAULT_DISTANCE = 140
  constant DEFAULT_DISABLEMAGNIFICATION (line 29) | const DEFAULT_DISABLEMAGNIFICATION = false
  type DockIconProps (line 90) | interface DockIconProps extends Omit<

FILE: apps/www/registry/magicui/dot-pattern.tsx
  type DotPatternProps (line 21) | interface DotPatternProps extends React.SVGProps<SVGSVGElement> {
  function DotPattern (line 64) | function DotPattern({

FILE: apps/www/registry/magicui/dotted-map.tsx
  type Marker (line 6) | interface Marker {
  type MapMarker (line 14) | type MapMarker<M extends Marker> = Omit<M, "lat" | "lng"> & {
  type DottedMapProps (line 19) | interface DottedMapProps<
  function DottedMap (line 41) | function DottedMap<M extends Marker = Marker>({

FILE: apps/www/registry/magicui/file-tree.tsx
  type TreeViewElement (line 18) | type TreeViewElement = {
  type TreeSortMode (line 26) | type TreeSortMode =
  type TreeContextProps (line 31) | type TreeContextProps = {
  type Direction (line 53) | type Direction = "rtl" | "ltr" | undefined
  type TreeViewProps (line 151) | type TreeViewProps = {
  type FolderProps (line 306) | type FolderProps = {

FILE: apps/www/registry/magicui/flickering-grid.tsx
  type FlickeringGridProps (line 7) | interface FlickeringGridProps extends React.HTMLAttributes<HTMLDivElemen...

FILE: apps/www/registry/magicui/globe.tsx
  constant MOVEMENT_DAMPING (line 9) | const MOVEMENT_DAMPING = 1400
  constant GLOBE_CONFIG (line 11) | const GLOBE_CONFIG: COBEOptions = {
  function Globe (line 39) | function Globe({

FILE: apps/www/registry/magicui/grid-pattern.tsx
  type GridPatternProps (line 5) | interface GridPatternProps extends React.SVGProps<SVGSVGElement> {
  function GridPattern (line 16) | function GridPattern({

FILE: apps/www/registry/magicui/hero-video-dialog.tsx
  type AnimationStyle (line 9) | type AnimationStyle =
  type HeroVideoProps (line 19) | interface HeroVideoProps {
  function HeroVideoDialog (line 70) | function HeroVideoDialog({

FILE: apps/www/registry/magicui/highlighter.tsx
  type AnnotationAction (line 9) | type AnnotationAction =
  type HighlighterProps (line 18) | interface HighlighterProps {
  function Highlighter (line 30) | function Highlighter({

FILE: apps/www/registry/magicui/hyper-text.tsx
  type CharacterSet (line 20) | type CharacterSet = string[] | readonly string[]
  type MotionElementType (line 37) | type MotionElementType = Extract<
  type HyperTextMotionComponent (line 41) | type HyperTextMotionComponent = ComponentType<
  type HyperTextProps (line 45) | interface HyperTextProps extends Omit<MotionProps, "children"> {
  constant DEFAULT_CHARACTER_SET (line 64) | const DEFAULT_CHARACTER_SET = Object.freeze(
  function HyperText (line 70) | function HyperText({

FILE: apps/www/registry/magicui/icon-cloud.tsx
  type Icon (line 6) | interface Icon {
  type IconCloudProps (line 15) | interface IconCloudProps {
  function easeOutCubic (line 20) | function easeOutCubic(t: number): number {
  function IconCloud (line 24) | function IconCloud({ icons, images }: IconCloudProps) {

FILE: apps/www/registry/magicui/interactive-grid-pattern.tsx
  type InteractiveGridPatternProps (line 16) | interface InteractiveGridPatternProps extends React.SVGProps<SVGSVGEleme...
  function InteractiveGridPattern (line 30) | function InteractiveGridPattern({

FILE: apps/www/registry/magicui/interactive-hover-button.tsx
  function InteractiveHoverButton (line 5) | function InteractiveHoverButton({

FILE: apps/www/registry/magicui/iphone.tsx
  constant PHONE_WIDTH (line 3) | const PHONE_WIDTH = 433
  constant PHONE_HEIGHT (line 4) | const PHONE_HEIGHT = 882
  constant SCREEN_X (line 5) | const SCREEN_X = 21.25
  constant SCREEN_Y (line 6) | const SCREEN_Y = 19.25
  constant SCREEN_WIDTH (line 7) | const SCREEN_WIDTH = 389.5
  constant SCREEN_HEIGHT (line 8) | const SCREEN_HEIGHT = 843.5
  constant SCREEN_RADIUS (line 9) | const SCREEN_RADIUS = 55.75
  constant LEFT_PCT (line 12) | const LEFT_PCT = (SCREEN_X / PHONE_WIDTH) * 100
  constant TOP_PCT (line 13) | const TOP_PCT = (SCREEN_Y / PHONE_HEIGHT) * 100
  constant WIDTH_PCT (line 14) | const WIDTH_PCT = (SCREEN_WIDTH / PHONE_WIDTH) * 100
  constant HEIGHT_PCT (line 15) | const HEIGHT_PCT = (SCREEN_HEIGHT / PHONE_HEIGHT) * 100
  constant RADIUS_H (line 16) | const RADIUS_H = (SCREEN_RADIUS / SCREEN_WIDTH) * 100
  constant RADIUS_V (line 17) | const RADIUS_V = (SCREEN_RADIUS / SCREEN_HEIGHT) * 100
  type IphoneProps (line 19) | interface IphoneProps extends HTMLAttributes<HTMLDivElement> {
  function Iphone (line 24) | function Iphone({

FILE: apps/www/registry/magicui/lens.tsx
  type Position (line 6) | interface Position {
  type LensProps (line 13) | interface LensProps {
  function Lens (line 34) | function Lens({

FILE: apps/www/registry/magicui/light-rays.tsx
  type LightRaysProps (line 8) | interface LightRaysProps extends React.HTMLAttributes<HTMLDivElement> {
  type LightRay (line 17) | type LightRay = {
  function LightRays (line 87) | function LightRays({

FILE: apps/www/registry/magicui/line-shadow-text.tsx
  type MotionElementType (line 27) | type MotionElementType = Extract<
  type LineShadowTextProps (line 32) | interface LineShadowTextProps
  function LineShadowText (line 39) | function LineShadowText({

FILE: apps/www/registry/magicui/magic-card.tsx
  type MagicCardBaseProps (line 14) | interface MagicCardBaseProps {
  type MagicCardGradientProps (line 22) | interface MagicCardGradientProps extends MagicCardBaseProps {
  type MagicCardOrbProps (line 36) | interface MagicCardOrbProps extends MagicCardBaseProps {
  type MagicCardProps (line 50) | type MagicCardProps = MagicCardGradientProps | MagicCardOrbProps
  type ResetReason (line 51) | type ResetReason = "enter" | "leave" | "global" | "init"
  function isOrbMode (line 53) | function isOrbMode(props: MagicCardProps): props is MagicCardOrbProps {
  function MagicCard (line 57) | function MagicCard(props: MagicCardProps) {

FILE: apps/www/registry/magicui/marquee.tsx
  type MarqueeProps (line 5) | interface MarqueeProps extends ComponentPropsWithoutRef<"div"> {
  function Marquee (line 36) | function Marquee({

FILE: apps/www/registry/magicui/meteors.tsx
  type MeteorsProps (line 7) | interface MeteorsProps {

FILE: apps/www/registry/magicui/morphing-text.tsx
  type MorphingTextProps (line 94) | interface MorphingTextProps {

FILE: apps/www/registry/magicui/neon-gradient-card.tsx
  type NeonColorsProps (line 14) | interface NeonColorsProps {
  type NeonGradientCardProps (line 19) | interface NeonGradientCardProps extends React.HTMLAttributes<HTMLDivElem...

FILE: apps/www/registry/magicui/number-ticker.tsx
  type NumberTickerProps (line 8) | interface NumberTickerProps extends ComponentPropsWithoutRef<"span"> {
  function NumberTicker (line 16) | function NumberTicker({

FILE: apps/www/registry/magicui/orbiting-circles.tsx
  type OrbitingCirclesProps (line 5) | interface OrbitingCirclesProps extends React.HTMLAttributes<HTMLDivEleme...
  function OrbitingCircles (line 17) | function OrbitingCircles({

FILE: apps/www/registry/magicui/particles.tsx
  type MousePosition (line 12) | interface MousePosition {
  function MousePosition (line 17) | function MousePosition(): MousePosition {
  type ParticlesProps (line 38) | interface ParticlesProps extends ComponentPropsWithoutRef<"div"> {
  function hexToRgb (line 50) | function hexToRgb(hex: string): number[] {
  type Circle (line 67) | type Circle = {

FILE: apps/www/registry/magicui/pixel-image.tsx
  type Grid (line 7) | type Grid = {
  constant DEFAULT_GRIDS (line 12) | const DEFAULT_GRIDS: Record<string, Grid> = {
  type PredefinedGridKey (line 20) | type PredefinedGridKey = keyof typeof DEFAULT_GRIDS
  type PixelImageProps (line 22) | interface PixelImageProps {

FILE: apps/www/registry/magicui/pointer.tsx
  function Pointer (line 21) | function Pointer({

FILE: apps/www/registry/magicui/progressive-blur.tsx
  type ProgressiveBlurProps (line 7) | interface ProgressiveBlurProps {
  function ProgressiveBlur (line 15) | function ProgressiveBlur({

FILE: apps/www/registry/magicui/pulsating-button.tsx
  type PulsatingButtonProps (line 5) | interface PulsatingButtonProps extends React.ButtonHTMLAttributes<HTMLBu...

FILE: apps/www/registry/magicui/rainbow-button.tsx
  type RainbowButtonProps (line 38) | interface RainbowButtonProps

FILE: apps/www/registry/magicui/retro-grid.tsx
  constant ANIMATION_DURATION_SECONDS (line 8) | const ANIMATION_DURATION_SECONDS = 15
  constant GRID_HEIGHT_RATIO (line 9) | const GRID_HEIGHT_RATIO = 3
  constant GRID_LINE_ALIGNMENT_OFFSET_PX (line 10) | const GRID_LINE_ALIGNMENT_OFFSET_PX = 0.5
  constant GRID_LINE_ANTIALIAS_MULTIPLIER (line 11) | const GRID_LINE_ANTIALIAS_MULTIPLIER = 0.9
  constant GRID_LINE_WIDTH_PX (line 12) | const GRID_LINE_WIDTH_PX = 0.92
  constant GRID_START_OFFSET_RATIO (line 13) | const GRID_START_OFFSET_RATIO = -0.5
  constant GRID_WIDTH_RATIO (line 14) | const GRID_WIDTH_RATIO = 6
  constant GRID_X_OFFSET_RATIO (line 15) | const GRID_X_OFFSET_RATIO = -2
  constant MAX_ANGLE (line 16) | const MAX_ANGLE = 89
  constant MAX_DEVICE_PIXEL_RATIO (line 17) | const MAX_DEVICE_PIXEL_RATIO = 2
  constant MIN_ANGLE (line 18) | const MIN_ANGLE = 1
  constant PERSPECTIVE_PX (line 19) | const PERSPECTIVE_PX = 200
  constant FALLBACK_ANIMATION_NAME (line 20) | const FALLBACK_ANIMATION_NAME = "retro-grid-fallback-scroll"
  constant FALLBACK_STYLES (line 21) | const FALLBACK_STYLES = `
  constant VERTEX_SHADER_SOURCE (line 40) | const VERTEX_SHADER_SOURCE = `
  constant FRAGMENT_SHADER_SOURCE (line 48) | const FRAGMENT_SHADER_SOURCE = `
  type RetroGridProps (line 251) | interface RetroGridProps extends HTMLAttributes<HTMLDivElement> {
  type ProgramInfo (line 283) | interface ProgramInfo {
  function clamp (line 299) | function clamp(value: number, min: number, max: number) {
  function createShader (line 303) | function createShader(gl: WebGLRenderingContext, type: number, source: s...
  function createProgram (line 321) | function createProgram(gl: WebGLRenderingContext) {
  function getProgramInfo (line 355) | function getProgramInfo(
  function isDarkMode (line 399) | function isDarkMode(colorScheme: MediaQueryList) {
  function getColorResolveContext (line 413) | function getColorResolveContext() {
  function resolveLineColor (line 428) | function resolveLineColor(color: string, element: HTMLElement) {
  function createFallbackGridStyle (line 457) | function createFallbackGridStyle(
  function RetroGrid (line 470) | function RetroGrid({

FILE: apps/www/registry/magicui/ripple-button.tsx
  type RippleButtonProps (line 7) | interface RippleButtonProps extends React.ButtonHTMLAttributes<HTMLButto...

FILE: apps/www/registry/magicui/ripple.tsx
  type RippleProps (line 5) | interface RippleProps extends ComponentPropsWithoutRef<"div"> {

FILE: apps/www/registry/magicui/safari.tsx
  constant SAFARI_WIDTH (line 3) | const SAFARI_WIDTH = 1203
  constant SAFARI_HEIGHT (line 4) | const SAFARI_HEIGHT = 753
  constant SCREEN_X (line 5) | const SCREEN_X = 1
  constant SCREEN_Y (line 6) | const SCREEN_Y = 52
  constant SCREEN_WIDTH (line 7) | const SCREEN_WIDTH = 1200
  constant SCREEN_HEIGHT (line 8) | const SCREEN_HEIGHT = 700
  constant LEFT_PCT (line 11) | const LEFT_PCT = (SCREEN_X / SAFARI_WIDTH) * 100
  constant TOP_PCT (line 12) | const TOP_PCT = (SCREEN_Y / SAFARI_HEIGHT) * 100
  constant WIDTH_PCT (line 13) | const WIDTH_PCT = (SCREEN_WIDTH / SAFARI_WIDTH) * 100
  constant HEIGHT_PCT (line 14) | const HEIGHT_PCT = (SCREEN_HEIGHT / SAFARI_HEIGHT) * 100
  type SafariMode (line 16) | type SafariMode = "default" | "simple"
  type SafariProps (line 18) | interface SafariProps extends HTMLAttributes<HTMLDivElement> {
  function Safari (line 25) | function Safari({

FILE: apps/www/registry/magicui/scroll-based-velocity.tsx
  type ScrollVelocityRowProps (line 17) | interface ScrollVelocityRowProps extends React.HTMLAttributes<HTMLDivEle...
  function ScrollVelocityContainer (line 33) | function ScrollVelocityContainer({
  function ScrollVelocityRow (line 59) | function ScrollVelocityRow(props: ScrollVelocityRowProps) {
  type ScrollVelocityRowImplProps (line 69) | interface ScrollVelocityRowImplProps extends ScrollVelocityRowProps {
  function ScrollVelocityRowImpl (line 73) | function ScrollVelocityRowImpl({
  function ScrollVelocityRowLocal (line 205) | function ScrollVelocityRowLocal(props: ScrollVelocityRowProps) {

FILE: apps/www/registry/magicui/scroll-progress.tsx
  type ScrollProgressProps (line 7) | interface ScrollProgressProps extends Omit<
  function ScrollProgress (line 14) | function ScrollProgress({

FILE: apps/www/registry/magicui/shimmer-button.tsx
  type ShimmerButtonProps (line 5) | interface ShimmerButtonProps extends ComponentPropsWithoutRef<"button"> {

FILE: apps/www/registry/magicui/shine-border.tsx
  type ShineBorderProps (line 7) | interface ShineBorderProps extends React.HTMLAttributes<HTMLDivElement> {
  function ShineBorder (line 30) | function ShineBorder({

FILE: apps/www/registry/magicui/shiny-button.tsx
  type ShinyButtonProps (line 29) | interface ShinyButtonProps

FILE: apps/www/registry/magicui/smooth-cursor.tsx
  type Position (line 6) | interface Position {
  type SmoothCursorProps (line 11) | interface SmoothCursorProps {
  constant DESKTOP_POINTER_QUERY (line 21) | const DESKTOP_POINTER_QUERY = "(any-hover: hover) and (any-pointer: fine)"
  function isTrackablePointer (line 23) | function isTrackablePointer(pointerType: string) {
  function SmoothCursor (line 89) | function SmoothCursor({

FILE: apps/www/registry/magicui/sparkles-text.tsx
  type Sparkle (line 8) | interface Sparkle {
  type SparklesTextProps (line 42) | interface SparklesTextProps {

FILE: apps/www/registry/magicui/spinning-text.tsx
  type SpinningTextProps (line 8) | interface SpinningTextProps extends ComponentPropsWithoutRef<"div"> {
  constant BASE_TRANSITION (line 20) | const BASE_TRANSITION: Transition = {
  constant BASE_ITEM_VARIANTS (line 25) | const BASE_ITEM_VARIANTS: Variants = {
  function SpinningText (line 34) | function SpinningText({

FILE: apps/www/registry/magicui/striped-pattern.tsx
  type StripedPatternProps (line 5) | interface StripedPatternProps extends React.SVGProps<SVGSVGElement> {
  function StripedPattern (line 9) | function StripedPattern({

FILE: apps/www/registry/magicui/terminal.tsx
  type SequenceContextValue (line 24) | interface SequenceContextValue {
  type MotionElementType (line 52) | type MotionElementType = Extract<
  type TerminalTypingMotionComponent (line 56) | type TerminalTypingMotionComponent = ComponentType<
  type AnimatedSpanProps (line 60) | interface AnimatedSpanProps extends MotionProps {
  type TypingAnimationProps (line 113) | interface TypingAnimationProps extends Omit<MotionProps, "children"> {
  type TerminalProps (line 229) | interface TerminalProps {

FILE: apps/www/registry/magicui/text-animate.tsx
  type AnimationType (line 14) | type AnimationType = "text" | "word" | "character" | "line"
  type AnimationVariant (line 15) | type AnimationVariant =
  type MotionElementType (line 42) | type MotionElementType = Extract<
  type TextAnimateProps (line 47) | interface TextAnimateProps extends Omit<MotionProps, "children"> {

FILE: apps/www/registry/magicui/text-reveal.tsx
  type TextRevealProps (line 13) | interface TextRevealProps extends ComponentPropsWithoutRef<"div"> {
  type WordProps (line 56) | interface WordProps {

FILE: apps/www/registry/magicui/tweet-card.tsx
  type TwitterIconProps (line 7) | interface TwitterIconProps {

FILE: apps/www/registry/magicui/typing-animation.tsx
  type MotionElementType (line 37) | type MotionElementType = Extract<
  type TypingAnimationMotionComponent (line 41) | type TypingAnimationMotionComponent = ComponentType<
  type TypingAnimationProps (line 45) | interface TypingAnimationProps extends Omit<MotionProps, "children"> {
  function TypingAnimation (line 62) | function TypingAnimation({

FILE: apps/www/registry/magicui/video-text.tsx
  type VideoTextProps (line 7) | interface VideoTextProps {
  function VideoText (line 68) | function VideoText({

FILE: apps/www/registry/magicui/warp-background.tsx
  type WarpBackgroundProps (line 8) | interface WarpBackgroundProps extends HTMLAttributes<HTMLDivElement> {

FILE: apps/www/registry/magicui/word-rotate.tsx
  type WordRotateProps (line 8) | interface WordRotateProps {
  function WordRotate (line 15) | function WordRotate({

FILE: apps/www/types/index.d.ts
  type NavItem (line 3) | interface NavItem {
  type NavItemWithChildren (line 14) | interface NavItemWithChildren extends NavItem {
  type DashboardConfig (line 18) | type DashboardConfig = {

FILE: apps/www/types/unist.ts
  type UnistNode (line 3) | interface UnistNode extends Node {
  type UnistTree (line 22) | interface UnistTree extends UnistNode {
  type NpmCommands (line 26) | interface NpmCommands {
Condensed preview — 863 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (7,618K chars).
[
  {
    "path": ".cursor/mcp.json",
    "chars": 111,
    "preview": "{\n  \"mcpServers\": {\n    \"shadcn\": {\n      \"command\": \"npx\",\n      \"args\": [\"shadcn@latest\", \"mcp\"]\n    }\n  }\n}\n"
  },
  {
    "path": ".editorconfig",
    "chars": 165,
    "preview": "# editorconfig.org\nroot = true\n\n[*]\ncharset = utf-8\nend_of_line = lf\nindent_size = 2\nindent_style = space\ninsert_final_n"
  },
  {
    "path": ".gitattributes",
    "chars": 18,
    "preview": "* text=auto eol=lf"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/bug_report.yml",
    "chars": 3022,
    "preview": "name: \"Bug report\"\ndescription: Report an issue with Magic UI\ntitle: \"[bug]: \"\nlabels: [\"bug\"]\nbody:\n  - type: markdown\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/feature_request.yml",
    "chars": 1926,
    "preview": "name: \"Feature request\"\ndescription: Create a feature request for Magic UI\ntitle: \"[feat]: \"\nlabels: [\"area: request\"]\nb"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "chars": 572,
    "preview": "## Description\n<!-- Summarize what this PR changes in 2-4 lines. -->\n\n## Changes\n<!-- List concrete changes by item (e.g"
  },
  {
    "path": ".github/scripts/publish-articles.cjs",
    "chars": 995,
    "preview": "#!/usr/bin/env node\n\"use strict\";\n\nconst fs = require(\"fs\");\nconst path = require(\"path\");\nconst yaml = require(\"js-yaml"
  },
  {
    "path": ".github/scripts/submit-sitemap.mjs",
    "chars": 921,
    "preview": "import { JWT } from \"google-auth-library\";\nimport { google } from \"googleapis\";\n\nconst { SITE_URL, SITEMAP_URL, GOOGLE_S"
  },
  {
    "path": ".github/workflows/code-check.yml",
    "chars": 5520,
    "preview": "name: Code check\n\non:\n  pull_request:\n    branches: [\"*\"]\n\njobs:\n  lint:\n    runs-on: ubuntu-latest\n    name: pnpm lint\n"
  },
  {
    "path": ".github/workflows/publish-article.yml",
    "chars": 1314,
    "preview": "name: Publish Blog Article\n\non:\n  workflow_dispatch:\n    inputs:\n      payload:\n        description: \"JSON payload from "
  },
  {
    "path": ".github/workflows/submit-sitemap.yml",
    "chars": 1093,
    "preview": "name: Submit Sitemap to Google\n\non:\n  workflow_run:\n    workflows:\n      - Publish Blog Article\n    types:\n      - compl"
  },
  {
    "path": ".gitignore",
    "chars": 430,
    "preview": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\n/node_modules\n/.pn"
  },
  {
    "path": ".prettierignore",
    "chars": 37,
    "preview": "yarn.lock\nnode_modules\n.next\n.source\n"
  },
  {
    "path": "AGENTS.md",
    "chars": 16702,
    "preview": "# Project Context\nUltracite enforces strict type safety, accessibility standards, and consistent code quality for JavaSc"
  },
  {
    "path": "CONTRIBUTING.md",
    "chars": 5896,
    "preview": "# Contributing to MagicUI\n\nThank you for your interest in contributing to MagicUI! We appreciate your support and look f"
  },
  {
    "path": "LICENSE.md",
    "chars": 1060,
    "preview": "MIT License\n\nCopyright (c) Magic UI\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof thi"
  },
  {
    "path": "README.md",
    "chars": 1767,
    "preview": "<img alt=\"Magic UI - UI Library for Design Engineers\" src=\"https://cdn.magicui.design/bento-grid.gif\" width=\"100%\">\n<h3 "
  },
  {
    "path": "apps/www/.env.example",
    "chars": 42,
    "preview": "NEXT_PUBLIC_APP_URL=http://localhost:3000\n"
  },
  {
    "path": "apps/www/.gitignore",
    "chars": 103,
    "preview": "# App-specific ignores\n.next\nout\nbuild\nnode_modules\n.turbo\n.vercel\n*.tsbuildinfo\nnext-env.d.ts\n.source\n"
  },
  {
    "path": "apps/www/.prettierignore",
    "chars": 23,
    "preview": "registry/__index__.tsx\n"
  },
  {
    "path": "apps/www/app/(blog)/blog/[...slug]/page.tsx",
    "chars": 8258,
    "preview": "/* eslint-disable @next/next/no-img-element */\nimport type { Metadata } from \"next\"\nimport Link from \"next/link\"\nimport "
  },
  {
    "path": "apps/www/app/(blog)/blog/layout.tsx",
    "chars": 323,
    "preview": "import { SiteFooter } from \"@/components/site-footer\"\nimport { SiteHeader } from \"@/components/site-header\"\n\nexport defa"
  },
  {
    "path": "apps/www/app/(blog)/blog/page.tsx",
    "chars": 8965,
    "preview": "/* eslint-disable @next/next/no-img-element */\nimport type { Metadata } from \"next\"\nimport Link from \"next/link\"\nimport "
  },
  {
    "path": "apps/www/app/(docs)/docs/[[...slug]]/page.tsx",
    "chars": 10845,
    "preview": "import type { Metadata } from \"next\"\nimport Link from \"next/link\"\nimport { notFound } from \"next/navigation\"\nimport { md"
  },
  {
    "path": "apps/www/app/(docs)/docs/layout.tsx",
    "chars": 750,
    "preview": "import { Suspense } from \"react\"\n\nimport { SidebarProvider } from \"@/components/ui/sidebar\"\nimport { DocsSidebar } from "
  },
  {
    "path": "apps/www/app/(docs)/docs/loading.tsx",
    "chars": 2361,
    "preview": "import { Skeleton } from \"@/components/ui/skeleton\"\n\nexport default function Loading() {\n  return (\n    <div className=\""
  },
  {
    "path": "apps/www/app/(docs)/docs/not-found.tsx",
    "chars": 1490,
    "preview": "\"use client\"\n\nimport Link from \"next/link\"\nimport { useRouter } from \"next/navigation\"\n\nimport { Button, buttonVariants "
  },
  {
    "path": "apps/www/app/(docs)/layout.tsx",
    "chars": 458,
    "preview": "import { SiteBanner } from \"@/components/site-banner\"\nimport { SiteFooter } from \"@/components/site-footer\"\nimport { Sit"
  },
  {
    "path": "apps/www/app/(marketing)/layout.tsx",
    "chars": 855,
    "preview": "import { SiteBanner } from \"@/components/site-banner\"\nimport { SiteFooter } from \"@/components/site-footer\"\nimport { Sit"
  },
  {
    "path": "apps/www/app/(marketing)/page.tsx",
    "chars": 402,
    "preview": "import { Hero } from \"@/components/sections/hero\"\nimport { Showcase } from \"@/components/sections/showcase\"\nimport { Tes"
  },
  {
    "path": "apps/www/app/(marketing)/showcase/[...slug]/page.tsx",
    "chars": 2293,
    "preview": "import { Metadata } from \"next\"\nimport { notFound } from \"next/navigation\"\n\nimport { showcaseSource } from \"@/lib/source"
  },
  {
    "path": "apps/www/app/(marketing)/showcase/page.tsx",
    "chars": 1142,
    "preview": "import { showcaseSource } from \"@/lib/source\"\nimport { ShowcaseCard } from \"@/components/sections/showcase\"\nimport { Blu"
  },
  {
    "path": "apps/www/app/api/blog-webhook/route.ts",
    "chars": 1307,
    "preview": "import { NextRequest, NextResponse } from \"next/server\"\n\nconst REPO_OWNER = \"magicuidesign\"\nconst REPO_NAME = \"magicui\"\n"
  },
  {
    "path": "apps/www/app/layout.tsx",
    "chars": 1851,
    "preview": "import type { Viewport } from \"next\"\nimport { Metadata } from \"next\"\nimport { Provider as JotaiProvider } from \"jotai\"\n\n"
  },
  {
    "path": "apps/www/app/llm/[[...slug]]/route.ts",
    "chars": 849,
    "preview": "import { notFound } from \"next/navigation\"\nimport { NextResponse, type NextRequest } from \"next/server\"\n\nimport { replac"
  },
  {
    "path": "apps/www/app/not-found.tsx",
    "chars": 1490,
    "preview": "\"use client\"\n\nimport Link from \"next/link\"\nimport { useRouter } from \"next/navigation\"\n\nimport { Button, buttonVariants "
  },
  {
    "path": "apps/www/app/og/geist-regular-otf.json",
    "chars": 77793,
    "preview": "{\"base64Font\":\"T1RUTwAMAIAAAwBAQ0ZGIN9uOmAAABXMAACeZkdERUZBTj+sAAC0NAAAAT5HUE9Ttn3F0QAAtXQAABvSR1NVQpIcrgQAANFIAAASlE9TL"
  },
  {
    "path": "apps/www/app/og/geist-semibold-otf.json",
    "chars": 92541,
    "preview": "{\"base64Font\":\"T1RUTwAMAIAAAwBAQ0ZGIHIR/08AABlsAAC8I0dERUZznnHMAADVkAAAAdZHUE9TY4mY0QAA12gAACqMR1NVQsbFMjAAAQH0AAANHE9TL"
  },
  {
    "path": "apps/www/app/og/geistmono-regular-otf.json",
    "chars": 89273,
    "preview": "{\"base64Font\":\"T1RUTwAMAIAAAwBAQ0ZGINMvNaQAABocAADLSkdERUaOgIu5AADlaAAAAgJHUE9TaW4+HAAA52wAABCMR1NVQtVEIxcAAPf4AAANhE9TL"
  },
  {
    "path": "apps/www/app/og/route.tsx",
    "chars": 3464,
    "preview": "import { ImageResponse } from \"next/og\"\n\nimport { Icons } from \"@/components/icons\"\n\nasync function loadAssets(): Promis"
  },
  {
    "path": "apps/www/app/robots.ts",
    "chars": 273,
    "preview": "import { MetadataRoute } from \"next\"\n\nexport default function robots(): MetadataRoute.Robots {\n  return {\n    rules: {\n "
  },
  {
    "path": "apps/www/app/sitemap.ts",
    "chars": 761,
    "preview": "import type { MetadataRoute } from \"next\"\nimport { headers } from \"next/headers\"\n\nimport { blogSource, source } from \"@/"
  },
  {
    "path": "apps/www/components/analytics.tsx",
    "chars": 439,
    "preview": "\"use client\"\n\nimport Script from \"next/script\"\n\nexport function Analytics() {\n  return (\n    <>\n      <Script\n        as"
  },
  {
    "path": "apps/www/components/blog/mobile-toc.tsx",
    "chars": 1739,
    "preview": "\"use client\"\n\nimport { useState } from \"react\"\nimport { Menu } from \"lucide-react\"\n\nimport { Button } from \"@/components"
  },
  {
    "path": "apps/www/components/blog/table-of-contents.tsx",
    "chars": 4058,
    "preview": "\"use client\"\n\nimport { useEffect, useState } from \"react\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Skeleton } from \"@/"
  },
  {
    "path": "apps/www/components/blur-image.tsx",
    "chars": 745,
    "preview": "\"use client\"\n\nimport { useEffect, useState } from \"react\"\nimport Image, { ImageProps } from \"next/image\"\n\nexport default"
  },
  {
    "path": "apps/www/components/callout.tsx",
    "chars": 619,
    "preview": "import { cn } from \"@/lib/utils\"\nimport { Alert, AlertDescription, AlertTitle } from \"@/components/ui/alert\"\n\nexport fun"
  },
  {
    "path": "apps/www/components/code-block-command.tsx",
    "chars": 3764,
    "preview": "\"use client\"\n\nimport * as React from \"react\"\nimport { CheckIcon, ClipboardIcon, TerminalIcon } from \"lucide-react\"\n\nimpo"
  },
  {
    "path": "apps/www/components/code-block-wrapper.tsx",
    "chars": 1616,
    "preview": "\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/b"
  },
  {
    "path": "apps/www/components/code-collapsible-wrapper.tsx",
    "chars": 1620,
    "preview": "\"use client\"\n\nimport * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button } from \"@/components/ui/b"
  },
  {
    "path": "apps/www/components/code-tabs.tsx",
    "chars": 616,
    "preview": "\"use client\"\n\nimport * as React from \"react\"\n\nimport { useConfig } from \"@/hooks/use-config\"\nimport { Tabs } from \"@/com"
  },
  {
    "path": "apps/www/components/command-menu.tsx",
    "chars": 4389,
    "preview": "\"use client\"\n\nimport * as React from \"react\"\nimport { useRouter } from \"next/navigation\"\nimport { type DialogProps } fro"
  },
  {
    "path": "apps/www/components/component-preview-tabs.tsx",
    "chars": 3251,
    "preview": "\"use client\"\n\nimport * as React from \"react\"\nimport { RotateCcw } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\n"
  },
  {
    "path": "apps/www/components/component-preview.tsx",
    "chars": 1135,
    "preview": "import * as React from \"react\"\n\nimport { getRegistryComponent } from \"@/lib/registry\"\nimport { ComponentPreviewTabs } fr"
  },
  {
    "path": "apps/www/components/component-source.tsx",
    "chars": 2336,
    "preview": "import fs from \"node:fs/promises\"\nimport path from \"node:path\"\nimport * as React from \"react\"\n\nimport { highlightCode } "
  },
  {
    "path": "apps/www/components/components-list.tsx",
    "chars": 724,
    "preview": "import Link from \"next/link\"\n\nimport { source } from \"@/lib/source\"\n\nexport function ComponentsList() {\n  const componen"
  },
  {
    "path": "apps/www/components/contribute.tsx",
    "chars": 1747,
    "preview": "import Link from \"next/link\"\nimport { Page, PageData } from \"fumadocs-core/source\"\nimport { BugIcon, LightbulbIcon, Penc"
  },
  {
    "path": "apps/www/components/copy-button.tsx",
    "chars": 1809,
    "preview": "\"use client\"\n\nimport * as React from \"react\"\nimport { CheckIcon, ClipboardIcon } from \"lucide-react\"\n\nimport { Event, tr"
  },
  {
    "path": "apps/www/components/deal-banner.tsx",
    "chars": 1083,
    "preview": "import Link from \"next/link\"\nimport { ExternalLink } from \"lucide-react\"\n\nexport function DealBanner() {\n  return (\n    "
  },
  {
    "path": "apps/www/components/discord-link.tsx",
    "chars": 2607,
    "preview": "import * as React from \"react\"\nimport Link from \"next/link\"\n\nimport { siteConfig } from \"@/config/site\"\nimport { cn } fr"
  },
  {
    "path": "apps/www/components/docs-copy-page.tsx",
    "chars": 8142,
    "preview": "\"use client\"\n\nimport { IconCheck, IconChevronDown, IconCopy } from \"@tabler/icons-react\"\n\nimport { useCopyToClipboard } "
  },
  {
    "path": "apps/www/components/docs-sidebar.tsx",
    "chars": 4288,
    "preview": "\"use client\"\n\nimport Link from \"next/link\"\nimport { usePathname } from \"next/navigation\"\nimport { NavItemWithChildren } "
  },
  {
    "path": "apps/www/components/docs-toc.tsx",
    "chars": 3146,
    "preview": "\"use client\"\n\nimport * as React from \"react\"\nimport { IconMenu3 } from \"@tabler/icons-react\"\n\nimport { cn } from \"@/lib/"
  },
  {
    "path": "apps/www/components/github-link.tsx",
    "chars": 2253,
    "preview": "import * as React from \"react\"\nimport Link from \"next/link\"\n\nimport { siteConfig } from \"@/config/site\"\nimport { Button "
  },
  {
    "path": "apps/www/components/gradient-blur.tsx",
    "chars": 2061,
    "preview": "import React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\ninterface GradientBlurProps {\n  numberOfLayers?: number\n  c"
  },
  {
    "path": "apps/www/components/icons.tsx",
    "chars": 53004,
    "preview": "import { DiscordLogoIcon, InstagramLogoIcon } from \"@radix-ui/react-icons\"\nimport {\n  AlertTriangle,\n  ArrowRight,\n  Che"
  },
  {
    "path": "apps/www/components/logo-button.tsx",
    "chars": 2001,
    "preview": "\"use client\"\n\nimport Link from \"next/link\"\nimport { toast } from \"sonner\"\n\nimport { siteConfig } from \"@/config/site\"\nim"
  },
  {
    "path": "apps/www/components/main-nav.tsx",
    "chars": 939,
    "preview": "\"use client\"\n\nimport Link from \"next/link\"\nimport { usePathname } from \"next/navigation\"\nimport { NavItem } from \"@/type"
  },
  {
    "path": "apps/www/components/mobile-nav.tsx",
    "chars": 5820,
    "preview": "\"use client\"\n\nimport * as React from \"react\"\nimport Link, { LinkProps } from \"next/link\"\nimport { useRouter } from \"next"
  },
  {
    "path": "apps/www/components/mode-toggle.tsx",
    "chars": 1385,
    "preview": "\"use client\"\n\nimport * as React from \"react\"\nimport { useTheme } from \"next-themes\"\n\nimport { useMetaColor } from \"@/hoo"
  },
  {
    "path": "apps/www/components/open-in-v0-button.tsx",
    "chars": 1370,
    "preview": "import { Button } from \"@/components/ui/button\"\n\nexport function OpenInV0Button({ url }: { url: string }) {\n  return (\n "
  },
  {
    "path": "apps/www/components/ping-dot.tsx",
    "chars": 283,
    "preview": "export function PingDot() {\n  return (\n    <div className=\"relative inline-flex\">\n      <span className=\"absolute size-2"
  },
  {
    "path": "apps/www/components/posthog-provider.tsx",
    "chars": 978,
    "preview": "\"use client\"\n\nimport { useEffect } from \"react\"\nimport { usePathname, useSearchParams } from \"next/navigation\"\nimport po"
  },
  {
    "path": "apps/www/components/sections/component-demos.tsx",
    "chars": 852,
    "preview": "import { notFound } from \"next/navigation\"\nimport { mdxComponents } from \"@/mdx-components\"\n\nimport { source } from \"@/l"
  },
  {
    "path": "apps/www/components/sections/cta.tsx",
    "chars": 1556,
    "preview": "import { ChevronRight, HeartHandshake } from \"lucide-react\"\n\nimport { cn } from \"@/lib/utils\"\nimport { buttonVariants } "
  },
  {
    "path": "apps/www/components/sections/expandable-masonary-section.tsx",
    "chars": 1673,
    "preview": "\"use client\"\n\nimport { useRef, useState } from \"react\"\nimport dynamic from \"next/dynamic\"\nimport { AnimatePresence, moti"
  },
  {
    "path": "apps/www/components/sections/hero.tsx",
    "chars": 4472,
    "preview": "import Link from \"next/link\"\nimport { ChevronRight } from \"lucide-react\"\n\nimport { source } from \"@/lib/source\"\nimport {"
  },
  {
    "path": "apps/www/components/sections/showcase.tsx",
    "chars": 3007,
    "preview": "import Image from \"next/image\"\nimport Link from \"next/link\"\nimport { ChevronRightIcon } from \"@radix-ui/react-icons\"\n\nim"
  },
  {
    "path": "apps/www/components/sections/testimonial-tweet-link.tsx",
    "chars": 2187,
    "preview": "\"use client\"\n\nimport type { KeyboardEvent, MouseEvent, ReactNode } from \"react\"\nimport Link from \"next/link\"\nimport { Ar"
  },
  {
    "path": "apps/www/components/sections/testimonials.tsx",
    "chars": 3938,
    "preview": "import { ExpandableMasonarySection } from \"@/components/sections/expandable-masonary-section\"\nimport { TestimonialTweetL"
  },
  {
    "path": "apps/www/components/sections/video-testimonials.tsx",
    "chars": 5157,
    "preview": "\"use client\"\n\nimport type { SVGProps } from \"react\"\nimport { useState } from \"react\"\nimport Image from \"next/image\"\nimpo"
  },
  {
    "path": "apps/www/components/sidebar-cta.tsx",
    "chars": 5361,
    "preview": "\"use client\"\n\nimport Link from \"next/link\"\nimport { CheckIcon, ChevronRight } from \"lucide-react\"\n\nimport { trackEvent }"
  },
  {
    "path": "apps/www/components/site-banner.tsx",
    "chars": 2330,
    "preview": "\"use client\"\n\nimport Link from \"next/link\"\nimport { ChevronRight } from \"lucide-react\"\n\nimport { trackEvent } from \"@/li"
  },
  {
    "path": "apps/www/components/site-footer.tsx",
    "chars": 1149,
    "preview": "import { siteConfig } from \"@/config/site\"\n\nexport function SiteFooter() {\n  return (\n    <footer className=\"group-has-["
  },
  {
    "path": "apps/www/components/site-header.tsx",
    "chars": 1658,
    "preview": "import { docsConfig } from \"@/config/docs\"\nimport { Separator } from \"@/components/ui/separator\"\nimport { CommandMenu } "
  },
  {
    "path": "apps/www/components/tech-stack.tsx",
    "chars": 9121,
    "preview": "import { cn } from \"@/lib/utils\"\nimport {\n  Tooltip,\n  TooltipContent,\n  TooltipTrigger,\n} from \"@/components/ui/tooltip"
  },
  {
    "path": "apps/www/components/template-open.tsx",
    "chars": 1095,
    "preview": "\"use client\"\n\nimport Link from \"next/link\"\nimport { GitHubLogoIcon } from \"@radix-ui/react-icons\"\nimport { ArrowRightIco"
  },
  {
    "path": "apps/www/components/template-preview.tsx",
    "chars": 612,
    "preview": "import { ReactNode } from \"react\"\nimport Link from \"next/link\"\nimport { ExternalLinkIcon } from \"@radix-ui/react-icons\"\n"
  },
  {
    "path": "apps/www/components/theme-provider.tsx",
    "chars": 256,
    "preview": "\"use client\"\n\nimport {\n  ThemeProvider as NextThemesProvider,\n  ThemeProviderProps,\n} from \"next-themes\"\n\nexport functio"
  },
  {
    "path": "apps/www/components/ui/accordion.tsx",
    "chars": 2053,
    "preview": "\"use client\"\n\nimport * as React from \"react\"\nimport * as AccordionPrimitive from \"@radix-ui/react-accordion\"\nimport { Ch"
  },
  {
    "path": "apps/www/components/ui/alert.tsx",
    "chars": 1598,
    "preview": "import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/"
  },
  {
    "path": "apps/www/components/ui/avatar.tsx",
    "chars": 1419,
    "preview": "\"use client\"\n\nimport * as React from \"react\"\nimport * as AvatarPrimitive from \"@radix-ui/react-avatar\"\n\nimport { cn } fr"
  },
  {
    "path": "apps/www/components/ui/badge.tsx",
    "chars": 1144,
    "preview": "import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/"
  },
  {
    "path": "apps/www/components/ui/button.tsx",
    "chars": 4027,
    "preview": "import * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, type VariantProps } from \"class"
  },
  {
    "path": "apps/www/components/ui/calendar.tsx",
    "chars": 7569,
    "preview": "\"use client\"\n\nimport * as React from \"react\"\nimport {\n  ChevronDownIcon,\n  ChevronLeftIcon,\n  ChevronRightIcon,\n} from \""
  },
  {
    "path": "apps/www/components/ui/card.tsx",
    "chars": 1828,
    "preview": "import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Card = React.forwardRef<\n  HTMLDivElement,\n  Rea"
  },
  {
    "path": "apps/www/components/ui/collapsible.tsx",
    "chars": 329,
    "preview": "\"use client\"\n\nimport * as CollapsiblePrimitive from \"@radix-ui/react-collapsible\"\n\nconst Collapsible = CollapsiblePrimit"
  },
  {
    "path": "apps/www/components/ui/command.tsx",
    "chars": 4818,
    "preview": "\"use client\"\n\nimport * as React from \"react\"\nimport { Command as CommandPrimitive } from \"cmdk\"\nimport { SearchIcon } fr"
  },
  {
    "path": "apps/www/components/ui/context-menu.tsx",
    "chars": 7420,
    "preview": "\"use client\"\n\nimport * as React from \"react\"\nimport * as ContextMenuPrimitive from \"@radix-ui/react-context-menu\"\nimport"
  },
  {
    "path": "apps/www/components/ui/dialog.tsx",
    "chars": 3982,
    "preview": "\"use client\"\n\nimport * as React from \"react\"\nimport * as DialogPrimitive from \"@radix-ui/react-dialog\"\nimport { XIcon } "
  },
  {
    "path": "apps/www/components/ui/dropdown-menu.tsx",
    "chars": 8284,
    "preview": "\"use client\"\n\nimport * as React from \"react\"\nimport * as DropdownMenuPrimitive from \"@radix-ui/react-dropdown-menu\"\nimpo"
  },
  {
    "path": "apps/www/components/ui/form.tsx",
    "chars": 4134,
    "preview": "\"use client\"\n\nimport * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { Slot } fro"
  },
  {
    "path": "apps/www/components/ui/input.tsx",
    "chars": 758,
    "preview": "import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Input = React.forwardRef<HTMLInputElement, React"
  },
  {
    "path": "apps/www/components/ui/label.tsx",
    "chars": 724,
    "preview": "\"use client\"\n\nimport * as React from \"react\"\nimport * as LabelPrimitive from \"@radix-ui/react-label\"\nimport { cva, type "
  },
  {
    "path": "apps/www/components/ui/popover.tsx",
    "chars": 1356,
    "preview": "\"use client\"\n\nimport * as React from \"react\"\nimport * as PopoverPrimitive from \"@radix-ui/react-popover\"\n\nimport { cn } "
  },
  {
    "path": "apps/www/components/ui/scroll-area.tsx",
    "chars": 1656,
    "preview": "\"use client\"\n\nimport * as React from \"react\"\nimport * as ScrollAreaPrimitive from \"@radix-ui/react-scroll-area\"\n\nimport "
  },
  {
    "path": "apps/www/components/ui/select.tsx",
    "chars": 5735,
    "preview": "\"use client\"\n\nimport * as React from \"react\"\nimport * as SelectPrimitive from \"@radix-ui/react-select\"\nimport { Check, C"
  },
  {
    "path": "apps/www/components/ui/separator.tsx",
    "chars": 770,
    "preview": "\"use client\"\n\nimport * as React from \"react\"\nimport * as SeparatorPrimitive from \"@radix-ui/react-separator\"\n\nimport { c"
  },
  {
    "path": "apps/www/components/ui/sheet.tsx",
    "chars": 4283,
    "preview": "\"use client\"\n\nimport * as React from \"react\"\nimport * as SheetPrimitive from \"@radix-ui/react-dialog\"\nimport { cva, type"
  },
  {
    "path": "apps/www/components/ui/sidebar.tsx",
    "chars": 21633,
    "preview": "\"use client\"\n\nimport * as React from \"react\"\nimport { Slot } from \"@radix-ui/react-slot\"\nimport { cva, VariantProps } fr"
  },
  {
    "path": "apps/www/components/ui/skeleton.tsx",
    "chars": 266,
    "preview": "import { cn } from \"@/lib/utils\"\n\nfunction Skeleton({\n  className,\n  ...props\n}: React.HTMLAttributes<HTMLDivElement>) {"
  },
  {
    "path": "apps/www/components/ui/sonner.tsx",
    "chars": 894,
    "preview": "\"use client\"\n\nimport { useTheme } from \"next-themes\"\nimport { Toaster as Sonner } from \"sonner\"\n\ntype ToasterProps = Rea"
  },
  {
    "path": "apps/www/components/ui/switch.tsx",
    "chars": 1152,
    "preview": "\"use client\"\n\nimport * as React from \"react\"\nimport * as SwitchPrimitives from \"@radix-ui/react-switch\"\n\nimport { cn } f"
  },
  {
    "path": "apps/www/components/ui/table.tsx",
    "chars": 2859,
    "preview": "import * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst Table = React.forwardRef<\n  HTMLTableElement,\n  "
  },
  {
    "path": "apps/www/components/ui/tabs.tsx",
    "chars": 1969,
    "preview": "\"use client\"\n\nimport * as React from \"react\"\nimport * as TabsPrimitive from \"@radix-ui/react-tabs\"\n\nimport { cn } from \""
  },
  {
    "path": "apps/www/components/ui/tooltip.tsx",
    "chars": 1890,
    "preview": "\"use client\"\n\nimport * as React from \"react\"\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\"\n\nimport { cn } "
  },
  {
    "path": "apps/www/components/version-select.tsx",
    "chars": 2017,
    "preview": "\"use client\"\n\nimport * as React from \"react\"\nimport { CheckIcon, ChevronDownIcon } from \"@radix-ui/react-icons\"\n\nimport "
  },
  {
    "path": "apps/www/components.json",
    "chars": 448,
    "preview": "{\n  \"$schema\": \"https://ui.shadcn.com/schema.json\",\n  \"style\": \"new-york\",\n  \"rsc\": true,\n  \"tsx\": true,\n  \"tailwind\": {"
  },
  {
    "path": "apps/www/config/docs.ts",
    "chars": 14256,
    "preview": "import { NavItem, NavItemWithChildren } from \"@/types\"\n\ninterface DocsConfig {\n  mainNav: NavItem[]\n  sidebarNav: NavIte"
  },
  {
    "path": "apps/www/config/site.ts",
    "chars": 608,
    "preview": "export const siteConfig = {\n  name: \"Magic UI\",\n  url: \"https://magicui.design\",\n  ogImage: \"https://magicui.design/og\","
  },
  {
    "path": "apps/www/content/blog/animated-landing-page.mdx",
    "chars": 23952,
    "preview": "---\ntitle: \"How To Create A Responsive Animated Landing Page (With Examples)\"\ndescription: \"Create your animated landing"
  },
  {
    "path": "apps/www/content/blog/animation-libraries.mdx",
    "chars": 31170,
    "preview": "---\ntitle: \"10 Best Animation Libraries to Get Your Web Design Project Started\"\ndescription: \"Discover the 10 best anima"
  },
  {
    "path": "apps/www/content/blog/animation-on-scroll-css.mdx",
    "chars": 22276,
    "preview": "---\ntitle: Mastering Animation on Scroll CSS for Dynamic Web Design\ndescription: >-\n  Learn how to implement stunning an"
  },
  {
    "path": "apps/www/content/blog/ant-design-alternatives.mdx",
    "chars": 23548,
    "preview": "---\ntitle: \"22 Best Ant Design Alternatives For React Development\"\ndescription: \"With so many Ant Design alternatives av"
  },
  {
    "path": "apps/www/content/blog/ant-design-vs-material-ui.mdx",
    "chars": 23149,
    "preview": "---\ntitle: \"The Ultimate Comparison Between Ant Design Vs Material UI\"\ndescription: \"Ant Design vs Material UI: This com"
  },
  {
    "path": "apps/www/content/blog/app-landing-page.mdx",
    "chars": 31381,
    "preview": "---\ntitle: \"20 Best App Landing Page Examples For Design Inspiration\"\ndescription: \"Get inspired with these 20 outstandi"
  },
  {
    "path": "apps/www/content/blog/best-react-component-library.mdx",
    "chars": 23688,
    "preview": "---\ntitle: \"What Is The Best React Component Library For Your Project?\"\ndescription: \"Find out which is the best React c"
  },
  {
    "path": "apps/www/content/blog/best-react-native-ui-library.mdx",
    "chars": 19459,
    "preview": "---\ntitle: \"Best React Native UI Library? 17 Top Libraries To Choose From\"\ndescription: \"Best React Native UI Library? 1"
  },
  {
    "path": "apps/www/content/blog/best-react-ui-framework.mdx",
    "chars": 24351,
    "preview": "---\ntitle: \"How To Select The Best React UI Framework For Your Project\"\ndescription: \"Choosing the best React UI framewo"
  },
  {
    "path": "apps/www/content/blog/best-saas-landing-pages.mdx",
    "chars": 28468,
    "preview": "---\ntitle: \"25 Best SaaS Landing Pages & Why They Boost Conversions\"\ndescription: \"Discover the best SaaS landing pages "
  },
  {
    "path": "apps/www/content/blog/best-web-design-tools.mdx",
    "chars": 30384,
    "preview": "---\ntitle: \"15 of The Best Web Design Tools to Take Your Website to The Next Level\"\ndescription: \"Discover 15 best web d"
  },
  {
    "path": "apps/www/content/blog/best-web-developer-portfolios.mdx",
    "chars": 27018,
    "preview": "---\ntitle: \"32 Examples Of Best Web Developer Portfolios For Design Inspiration\"\ndescription: \"Create a standout web dev"
  },
  {
    "path": "apps/www/content/blog/bootstrap-vs-react.mdx",
    "chars": 31621,
    "preview": "---\ntitle: \"Bootstrap Vs React, Which Is The Right Frontend Framework?\"\ndescription: \"Bootstrap vs React: two popular fr"
  },
  {
    "path": "apps/www/content/blog/cards-ui-design.mdx",
    "chars": 27301,
    "preview": "---\ntitle: A Guide to Modern Cards UI Design\ndescription: >-\n  Explore our complete guide to cards UI design. Learn core"
  },
  {
    "path": "apps/www/content/blog/carousel-user-interface.mdx",
    "chars": 25058,
    "preview": "---\ntitle: Build a Modern Carousel User Interface with React\ndescription: >-\n  Learn how to build a responsive and acces"
  },
  {
    "path": "apps/www/content/blog/chakra-ui-vs-material-ui.mdx",
    "chars": 18194,
    "preview": "---\ntitle: \"Ultimate Comparison Of Chakra UI Vs Material UI\"\ndescription: \"Chakra UI vs Material UI: Which one is right "
  },
  {
    "path": "apps/www/content/blog/color-theory-for-web-design.mdx",
    "chars": 24507,
    "preview": "---\ntitle: Color Theory for Web Design Made Simple\ndescription: >-\n  Master color theory for web design. Learn how color"
  },
  {
    "path": "apps/www/content/blog/component-libraries.mdx",
    "chars": 35017,
    "preview": "---\ntitle: \"27 Easy To Use & Amazing React Component Libraries\"\ndescription: \"Looking for user-friendly React component "
  },
  {
    "path": "apps/www/content/blog/component-library-examples.mdx",
    "chars": 36636,
    "preview": "---\ntitle: \"27 Component Library Examples Every Designer Must Know\"\ndescription: \"Looking for design inspiration? Check "
  },
  {
    "path": "apps/www/content/blog/cool-css-animations.mdx",
    "chars": 28223,
    "preview": "---\ntitle: \"12 Cool CSS Animations Your Website Must Have Right Now\"\ndescription: \"Discover 12 cool CSS animations that "
  },
  {
    "path": "apps/www/content/blog/cool-react-components.mdx",
    "chars": 20940,
    "preview": "---\ntitle: \"19 Really Cool React Components For Your Next Project\"\ndescription: \"Get inspired with these cool React comp"
  },
  {
    "path": "apps/www/content/blog/create-next-js-app.mdx",
    "chars": 25659,
    "preview": "---\ntitle: \"Create (create next js app) from Scratch: A Practical Guide\"\ndescription: >-\n  Learn how to create next js a"
  },
  {
    "path": "apps/www/content/blog/create-nextjs-app.mdx",
    "chars": 24120,
    "preview": "---\ntitle: \"Create NextJS App: How to create nextjs app from scratch\"\ndescription: >-\n  Learn how to create nextjs app f"
  },
  {
    "path": "apps/www/content/blog/create-react-component-library.mdx",
    "chars": 13359,
    "preview": "---\ntitle: \"How To Create React Component Library With Typescript & Publish It\"\ndescription: \"Learn how to create React "
  },
  {
    "path": "apps/www/content/blog/creating-next-js-app.mdx",
    "chars": 21348,
    "preview": "---\ntitle: Creating Next JS App A Practical Guide\ndescription: >-\n  A practical guide to creating Next JS app projects. "
  },
  {
    "path": "apps/www/content/blog/creative-landing-page-design.mdx",
    "chars": 51477,
    "preview": "---\ntitle: \"45 Examples Of Creative Landing Page Design To Inspire Your Creation\"\ndescription: \"Find the 45 innovative l"
  },
  {
    "path": "apps/www/content/blog/css-animation-on-scroll.mdx",
    "chars": 24707,
    "preview": "---\ntitle: A Modern Guide to CSS Animation on Scroll\ndescription: >-\n  Create smooth, performant CSS animation on scroll"
  },
  {
    "path": "apps/www/content/blog/css-buttons-hover.mdx",
    "chars": 24159,
    "preview": "---\ntitle: Mastering CSS Buttons Hover Effects\ndescription: >-\n  Learn to create stunning CSS buttons hover effects. A p"
  },
  {
    "path": "apps/www/content/blog/css-loader-animation.mdx",
    "chars": 25168,
    "preview": "---\ntitle: Crafting the Perfect CSS Loader Animation\ndescription: >-\n  A practical guide to creating beautiful and perfo"
  },
  {
    "path": "apps/www/content/blog/css-loading-animation.mdx",
    "chars": 23285,
    "preview": "---\ntitle: \"css loading animation: Master Smooth CSS Spinners in Minutes\"\ndescription: >-\n  Learn to craft a captivating"
  },
  {
    "path": "apps/www/content/blog/cta-design.mdx",
    "chars": 25484,
    "preview": "---\ntitle: \"21 Best Practices For A Compelling CTA Design & Why They Work\"\ndescription: \"Learn 21 best practices for cre"
  },
  {
    "path": "apps/www/content/blog/dashboard-design-ui.mdx",
    "chars": 30580,
    "preview": "---\ntitle: Top Dashboard Design UI Tips for Engaging Data Visuals\ndescription: >-\n  Master dashboard design UI with expe"
  },
  {
    "path": "apps/www/content/blog/disable-textarea-resize.mdx",
    "chars": 18764,
    "preview": "---\ntitle: A Developer Guide to Disable Textarea Resize\ndescription: >-\n  Learn how to disable textarea resize with CSS "
  },
  {
    "path": "apps/www/content/blog/drop-down-menu-in-js.mdx",
    "chars": 16570,
    "preview": "---\ntitle: Build a Modern Drop Down Menu in JS\ndescription: >-\n  Learn to build a responsive and accessible drop down me"
  },
  {
    "path": "apps/www/content/blog/dropdown-in-react-js.mdx",
    "chars": 25449,
    "preview": "---\ntitle: Build a Dropdown in React JS From Scratch\ndescription: >-\n  Learn to build a dropdown in React JS with this g"
  },
  {
    "path": "apps/www/content/blog/faq-template.mdx",
    "chars": 21029,
    "preview": "---\ntitle: \"10 Best Practices To Create An FAQ Template & Examples For Inspiration\"\ndescription: \"Level up your FAQs! Us"
  },
  {
    "path": "apps/www/content/blog/framer-motion-react.mdx",
    "chars": 23871,
    "preview": "---\ntitle: A Guide to Framer Motion React Animation\ndescription: >-\n  Create stunning web animations with this complete "
  },
  {
    "path": "apps/www/content/blog/free-react-components.mdx",
    "chars": 23680,
    "preview": "---\ntitle: \"21 Best Free React Components Libraries To Kickstart Projects\"\ndescription: \"Boost your productivity and cre"
  },
  {
    "path": "apps/www/content/blog/hero-section-design.mdx",
    "chars": 20539,
    "preview": "---\ntitle: \"Hero Section Design Best Practices & Best Examples For Inspiration\"\ndescription: \"Learn the best practices f"
  },
  {
    "path": "apps/www/content/blog/how-to-add-animation-to-website.mdx",
    "chars": 21691,
    "preview": "---\ntitle: \"How To Add Animation To Website Without Slowing Down Performance (2024)\"\ndescription: \"Learn how to add anim"
  },
  {
    "path": "apps/www/content/blog/how-to-build-a-landing-page.mdx",
    "chars": 25174,
    "preview": "---\ntitle: How to Build a Landing Page That Converts\ndescription: >-\n  Learn how to build a landing page that drives res"
  },
  {
    "path": "apps/www/content/blog/how-to-choose-tech-stack.mdx",
    "chars": 25614,
    "preview": "---\ntitle: How to Choose a Tech Stack for Your Business Success\ndescription: >-\n  how to choose tech stack: Align goals,"
  },
  {
    "path": "apps/www/content/blog/how-to-create-a-landing-page.mdx",
    "chars": 19886,
    "preview": "---\ntitle: \"How To Create a Landing Page in 8 Simple Steps\"\ndescription: \"Learn how to create a landing page in 8 simple"
  },
  {
    "path": "apps/www/content/blog/how-to-create-drop-down-menu.mdx",
    "chars": 21670,
    "preview": "---\ntitle: \"How to Create Drop Down Menu: Step-by-Step Guide\"\ndescription: >-\n  Learn how to create a drop down menu wit"
  },
  {
    "path": "apps/www/content/blog/how-to-create-navigation-bar-in-html.mdx",
    "chars": 19270,
    "preview": "---\ntitle: \"How to Create Navigation Bar in HTML: Step-by-Step Guide\"\ndescription: >-\n  Learn how to create navigation b"
  },
  {
    "path": "apps/www/content/blog/how-to-design-a-landing-page.mdx",
    "chars": 24476,
    "preview": "---\ntitle: \"A Complete Guide On How To Design A Landing Page & Best Practices\"\ndescription: \"Learn how to design a landi"
  },
  {
    "path": "apps/www/content/blog/how-to-display-testimonials-on-website.mdx",
    "chars": 32561,
    "preview": "---\ntitle: \"How To Display Testimonials On Website (With Examples)\"\ndescription: \"Learn how to display testimonials. Boo"
  },
  {
    "path": "apps/www/content/blog/how-to-improve-website-conversion-rates.mdx",
    "chars": 23427,
    "preview": "---\ntitle: \"How to Improve Website Conversion Rates: Proven Tips\"\ndescription: >-\n  Learn how to improve website convers"
  },
  {
    "path": "apps/www/content/blog/how-to-improve-website-loading-speed.mdx",
    "chars": 26513,
    "preview": "---\ntitle: \"How to Improve Website Loading Speed: Fast & Easy Tips\"\ndescription: >-\n  Learn how to improve website loadi"
  },
  {
    "path": "apps/www/content/blog/how-to-improve-website-performance.mdx",
    "chars": 24664,
    "preview": "---\ntitle: \"How to Improve Website Performance: Essential Tips & Tricks\"\ndescription: >-\n  Learn how to improve website "
  },
  {
    "path": "apps/www/content/blog/how-to-learn-react.mdx",
    "chars": 28104,
    "preview": "---\ntitle: \"How to Learn React: Your Ultimate Beginner's Guide\"\ndescription: >-\n  Wondering how to learn React? Discover"
  },
  {
    "path": "apps/www/content/blog/how-to-make-an-animated-website.mdx",
    "chars": 28981,
    "preview": "---\ntitle: \"How To Make An Animated Website: A Comprehensive Guide\"\ndescription: \"Captivate your audience with an animat"
  },
  {
    "path": "apps/www/content/blog/how-to-make-an-interactive-website.mdx",
    "chars": 27054,
    "preview": "---\ntitle: \"11 Best Tips on How To Make An Interactive Website\"\ndescription: \"Learn 11 essential tips on how to make an "
  },
  {
    "path": "apps/www/content/blog/how-to-make-backgrounds-for-animation.mdx",
    "chars": 25142,
    "preview": "---\ntitle: \"How to Make Backgrounds for Animation: Complete Step-by-Step Guide\"\ndescription: >-\n  Learn how to make back"
  },
  {
    "path": "apps/www/content/blog/how-to-optimize-images-for-web.mdx",
    "chars": 16929,
    "preview": "---\ntitle: How to Optimize Images for Web Performance\ndescription: >-\n  Learn how to optimize images for web to boost si"
  },
  {
    "path": "apps/www/content/blog/infinite-scroll-react.mdx",
    "chars": 22684,
    "preview": "---\ntitle: Create a Flawless infinite scroll react UI\ndescription: >-\n  Learn how to implement infinite scroll react in "
  },
  {
    "path": "apps/www/content/blog/install-tailwind-css.mdx",
    "chars": 23995,
    "preview": "---\ntitle: Install Tailwind CSS A Modern Guide for Any Project\ndescription: >-\n  Learn how to install Tailwind CSS in an"
  },
  {
    "path": "apps/www/content/blog/install-tailwind-react.mdx",
    "chars": 6974,
    "preview": "---\ntitle: \"How to Install and Configure Tailwind CSS in React and Typescript [Updated 2024]\"\ndescription: \"Learn how to"
  },
  {
    "path": "apps/www/content/blog/installing-tailwind-css.mdx",
    "chars": 22791,
    "preview": "---\ntitle: A Developer's Guide to Installing Tailwind CSS\ndescription: >-\n  Master installing Tailwind CSS in any projec"
  },
  {
    "path": "apps/www/content/blog/interactive-landing-page.mdx",
    "chars": 17309,
    "preview": "---\ntitle: \"The Ultimate Guide On Creating An Interactive Landing Page\"\ndescription: \"Learn how to create an engaging in"
  },
  {
    "path": "apps/www/content/blog/landing-page-call-to-action.mdx",
    "chars": 30627,
    "preview": "---\ntitle: \"Crafting the Perfect Landing Page Call to Action\"\ndescription: \"Craft compelling landing page call to action"
  },
  {
    "path": "apps/www/content/blog/landing-page-copywriting.mdx",
    "chars": 29075,
    "preview": "---\ntitle: \"12 Landing Page Copywriting Tips To Boost Conversions (With Examples)\"\ndescription: \"Boost conversions with "
  },
  {
    "path": "apps/www/content/blog/landing-page-design-templates.mdx",
    "chars": 30764,
    "preview": "---\ntitle: Using Landing Page Design Templates to Boost Conversions\ndescription: >-\n  Discover how landing page design t"
  },
  {
    "path": "apps/www/content/blog/landing-page-examples.mdx",
    "chars": 24362,
    "preview": "---\ntitle: \"43 Best Landing Page Examples For Design Inspiration\"\ndescription: \"Need ideas for your landing page design?"
  },
  {
    "path": "apps/www/content/blog/landing-page-sections.mdx",
    "chars": 30006,
    "preview": "---\ntitle: \"13 Essential Landing Page Sections For A High Converting Design\"\ndescription: \"Learn how to structure your l"
  },
  {
    "path": "apps/www/content/blog/landing-page-ui.mdx",
    "chars": 22255,
    "preview": "---\ntitle: \"How To Design a User-Friendly Landing Page UI & Useful Tips\"\ndescription: \"Learn essential tips for designin"
  },
  {
    "path": "apps/www/content/blog/mantine-vs-chakra.mdx",
    "chars": 20942,
    "preview": "---\ntitle: \"A Straightforward Comparison Of Mantine Vs Chakra\"\ndescription: \"Mantine vs Chakra: Which one is right for y"
  },
  {
    "path": "apps/www/content/blog/material-ui-alternatives.mdx",
    "chars": 21753,
    "preview": "---\ntitle: \"15 Material UI Alternatives & Companions To Complement Your Project\"\ndescription: \"Enhance your project with"
  },
  {
    "path": "apps/www/content/blog/material-ui-react.mdx",
    "chars": 18485,
    "preview": "---\ntitle: \"The Complete Material UI React Guide\"\ndescription: \"Discover Material UI React with this guide, packed with "
  },
  {
    "path": "apps/www/content/blog/material-ui-vs-joy-ui.mdx",
    "chars": 17685,
    "preview": "---\ntitle: \"The Ultimate Comparison Between Material UI Vs Joy UI\"\ndescription: \"Material UI vs Joy UI: Which one is rig"
  },
  {
    "path": "apps/www/content/blog/mui-box.mdx",
    "chars": 13535,
    "preview": "---\ntitle: \"A Complete Guide On Working With MUI Box Component\"\ndescription: \"The MUI Box component is a versatile tool "
  },
  {
    "path": "apps/www/content/blog/mui-card.mdx",
    "chars": 19013,
    "preview": "---\ntitle: \"How To Create A Functional MUI Card\"\ndescription: \"Learn how to design and implement MUI cards with ease usi"
  },
  {
    "path": "apps/www/content/blog/mui-react.mdx",
    "chars": 15778,
    "preview": "---\ntitle: \"What Is MUI? How To Access MUI React For Projects\"\ndescription: \"Get started with MUI React and elevate your"
  },
  {
    "path": "apps/www/content/blog/mui-table.mdx",
    "chars": 20384,
    "preview": "---\ntitle: \"How To Create A Basic MUI Table In React\"\ndescription: \"Build a basic MUI Table in React with this easy-to-f"
  },
  {
    "path": "apps/www/content/blog/mui-transitions.mdx",
    "chars": 21281,
    "preview": "---\ntitle: \"How to Create and Use MUI Transitions\"\ndescription: \"Learn how to create and use MUI transitions effectively"
  },
  {
    "path": "apps/www/content/blog/navbar-in-react-js.mdx",
    "chars": 23861,
    "preview": "---\ntitle: Build a Responsive Navbar in React JS\ndescription: >-\n  A practical guide to building a responsive navbar in "
  },
  {
    "path": "apps/www/content/blog/navbar-react-js.mdx",
    "chars": 23378,
    "preview": "---\ntitle: Build a Modern Navbar React JS Component\ndescription: >-\n  Learn to build a stunning, responsive navbar react"
  },
  {
    "path": "apps/www/content/blog/navigation-bar-for-website.mdx",
    "chars": 23994,
    "preview": "---\ntitle: Build a High-Converting Navigation Bar for Website\ndescription: >-\n  Learn how to build a high-converting nav"
  },
  {
    "path": "apps/www/content/blog/next-js-app.mdx",
    "chars": 18762,
    "preview": "---\ntitle: \"How To Create A Next JS App With React\"\ndescription: \"Combine the features of React with the benefits of Nex"
  },
  {
    "path": "apps/www/content/blog/next-js-create-app.mdx",
    "chars": 22090,
    "preview": "---\ntitle: Next Js Create App Complete Guide With TypeScript Tailwind CSS And Magic UI\ndescription: >-\n  Learn how to ne"
  }
]

// ... and 663 more files (download for full content)

About this extraction

This page contains the full source code of the magicuidesign/magicui GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 863 files (7.0 MB), approximately 1.9M tokens, and a symbol index with 642 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!