From e516481394dbf13b3e98d9b262957cd822489260 Mon Sep 17 00:00:00 2001 From: shadcn Date: Wed, 5 Feb 2025 00:15:07 +0400 Subject: [PATCH] (5/n) shadcn: migrate all components and blocks (#6567) * feat: add v3 * feat: upgrade lucide-react * feat: upgrade components to Tailwind v4 * feat(v3): add dark mode * wip * feat: components upgrade * style: format * feat: add select * feat: more components * feat: more components * fix: shadow * feat: upgrade sidebar * refactor: registry * refactor: internal * fix: registry * fix: charts * chore: build registry * fix: charts * feat: form * feat: clean up * fix: icons * fix: command demo * chore: add new-york-v4 to registry * fix: revert command in www registry * fix * chore: fix tests * fix: types * fix: lint errors * chore: build v4 registry * fix * fix: types --- .vscode/settings.json | 6 +- apps/v4/.gitignore | 41 + apps/v4/.prettierignore | 6 + apps/v4/README.md | 1 + apps/v4/__registry__/.autogenerated | 1 + apps/v4/__registry__/.gitkeep | 0 apps/v4/__registry__/README.md | 1 + apps/v4/__registry__/index.tsx | 3588 +++++ apps/v4/app/(app)/charts/charts.tsx | 76 + apps/v4/app/(app)/charts/page.tsx | 20 + apps/v4/app/(app)/layout.tsx | 57 + apps/v4/app/(app)/page.tsx | 196 + apps/v4/app/(view)/view/[name]/page.tsx | 96 + apps/v4/app/favicon.ico | Bin 0 -> 25931 bytes apps/v4/app/globals.css | 144 + apps/v4/app/layout.tsx | 116 + apps/v4/components.json | 21 + apps/v4/components/accordion-demo.tsx | 72 + apps/v4/components/alert-demo.tsx | 109 + apps/v4/components/alert-dialog-demo.tsx | 35 + apps/v4/components/app-sidebar.tsx | 185 + apps/v4/components/aspect-ratio-demo.tsx | 26 + apps/v4/components/avatar-demo.tsx | 77 + apps/v4/components/badge-demo.tsx | 49 + apps/v4/components/breadcrumb-demo.tsx | 49 + apps/v4/components/button-demo.tsx | 23 + apps/v4/components/calendar-demo.tsx | 35 + apps/v4/components/card-demo.tsx | 139 + apps/v4/components/carousel-demo.tsx | 74 + apps/v4/components/chart-area-demo.tsx | 94 + apps/v4/components/chart-bar-demo.tsx | 80 + apps/v4/components/chart-demo.tsx | 13 + apps/v4/components/chart-line-demo.tsx | 100 + apps/v4/components/checkbox-demo.tsx | 43 + apps/v4/components/collapsible-demo.tsx | 46 + apps/v4/components/combobox-demo.tsx | 336 + apps/v4/components/command-demo.tsx | 87 + apps/v4/components/component-wrapper.tsx | 66 + apps/v4/components/context-menu-demo.tsx | 79 + apps/v4/components/date-picker-demo.tsx | 95 + apps/v4/components/dialog-demo.tsx | 129 + apps/v4/components/drawer-demo.tsx | 228 + apps/v4/components/dropdown-menu-demo.tsx | 356 + apps/v4/components/form-demo.tsx | 388 + apps/v4/components/hover-card-demo.tsx | 39 + apps/v4/components/input-demo.tsx | 22 + apps/v4/components/input-otp-demo.tsx | 109 + apps/v4/components/label-demo.tsx | 27 + apps/v4/components/menubar-demo.tsx | 130 + apps/v4/components/mode-switcher.tsx | 34 + apps/v4/components/mode-toggle.tsx | 27 + apps/v4/components/nav-main.tsx | 73 + apps/v4/components/nav-projects.tsx | 89 + apps/v4/components/nav-user.tsx | 110 + apps/v4/components/navigation-menu-demo.tsx | 201 + apps/v4/components/pagination-demo.tsx | 40 + apps/v4/components/popover-demo.tsx | 58 + apps/v4/components/progress-demo.tsx | 16 + apps/v4/components/radio-group-demo.tsx | 59 + apps/v4/components/resizable-demo.tsx | 70 + apps/v4/components/scroll-area-demo.tsx | 80 + apps/v4/components/select-demo.tsx | 93 + apps/v4/components/separator-demo.tsx | 22 + apps/v4/components/sheet-demo.tsx | 95 + apps/v4/components/skeleton-demo.tsx | 29 + apps/v4/components/slider-demo.tsx | 44 + apps/v4/components/sonner-demo.tsx | 24 + apps/v4/components/switch-demo.tsx | 34 + apps/v4/components/table-demo.tsx | 87 + apps/v4/components/tabs-demo.tsx | 101 + apps/v4/components/team-switcher.tsx | 89 + apps/v4/components/textarea-demo.tsx | 39 + apps/v4/components/theme-provider.tsx | 11 + apps/v4/components/toggle-demo.tsx | 35 + apps/v4/components/toggle-group-demo.tsx | 72 + apps/v4/components/tooltip-demo.tsx | 45 + apps/v4/eslint.config.mjs | 21 + apps/v4/hooks/use-meta-color.ts | 28 + apps/v4/lib/registry.ts | 226 + apps/v4/lib/utils.ts | 10 + apps/v4/next.config.ts | 21 + apps/v4/package.json | 134 + apps/v4/postcss.config.mjs | 6 + apps/v4/public/avatars/shadcn.jpg | Bin 0 -> 23707 bytes apps/v4/public/file.svg | 1 + apps/v4/public/globe.svg | 1 + apps/v4/public/next.svg | 1 + apps/v4/public/placeholder.svg | 1 + apps/v4/public/vercel.svg | 1 + apps/v4/public/window.svg | 1 + apps/v4/registry.json | 2691 ++++ .../blocks/login-01/components/login-form.tsx | 70 + apps/v4/registry/blocks/login-01/page.tsx | 11 + .../blocks/login-02/components/login-form.tsx | 61 + apps/v4/registry/blocks/login-02/page.tsx | 32 + .../blocks/login-03/components/login-form.tsx | 96 + apps/v4/registry/blocks/login-03/page.tsx | 19 + .../blocks/login-04/components/login-form.tsx | 104 + apps/v4/registry/blocks/login-04/page.tsx | 11 + .../blocks/login-05/components/login-form.tsx | 81 + apps/v4/registry/blocks/login-05/page.tsx | 11 + .../sidebar-01/components/app-sidebar.tsx | 182 + .../sidebar-01/components/search-form.tsx | 28 + .../components/version-switcher.tsx | 64 + apps/v4/registry/blocks/sidebar-01/page.tsx | 53 + .../sidebar-02/components/app-sidebar.tsx | 215 + .../sidebar-02/components/search-form.tsx | 28 + .../components/version-switcher.tsx | 64 + apps/v4/registry/blocks/sidebar-02/page.tsx | 50 + .../sidebar-03/components/app-sidebar.tsx | 208 + apps/v4/registry/blocks/sidebar-03/page.tsx | 52 + .../sidebar-04/components/app-sidebar.tsx | 206 + apps/v4/registry/blocks/sidebar-04/page.tsx | 59 + .../sidebar-05/components/app-sidebar.tsx | 228 + .../sidebar-05/components/search-form.tsx | 28 + apps/v4/registry/blocks/sidebar-05/page.tsx | 53 + .../sidebar-06/components/app-sidebar.tsx | 179 + .../blocks/sidebar-06/components/nav-main.tsx | 65 + .../components/sidebar-opt-in-form.tsx | 33 + apps/v4/registry/blocks/sidebar-06/page.tsx | 53 + .../sidebar-07/components/app-sidebar.tsx | 175 + .../blocks/sidebar-07/components/nav-main.tsx | 73 + .../sidebar-07/components/nav-projects.tsx | 89 + .../blocks/sidebar-07/components/nav-user.tsx | 110 + .../sidebar-07/components/team-switcher.tsx | 89 + apps/v4/registry/blocks/sidebar-07/page.tsx | 55 + .../sidebar-08/components/app-sidebar.tsx | 185 + .../blocks/sidebar-08/components/nav-main.tsx | 78 + .../sidebar-08/components/nav-projects.tsx | 89 + .../sidebar-08/components/nav-secondary.tsx | 40 + .../blocks/sidebar-08/components/nav-user.tsx | 110 + apps/v4/registry/blocks/sidebar-08/page.tsx | 55 + .../sidebar-09/components/app-sidebar.tsx | 262 + .../blocks/sidebar-09/components/nav-user.tsx | 110 + apps/v4/registry/blocks/sidebar-09/page.tsx | 57 + .../sidebar-10/components/app-sidebar.tsx | 276 + .../sidebar-10/components/nav-actions.tsx | 149 + .../sidebar-10/components/nav-favorites.tsx | 94 + .../blocks/sidebar-10/components/nav-main.tsx | 35 + .../sidebar-10/components/nav-secondary.tsx | 43 + .../sidebar-10/components/nav-workspaces.tsx | 85 + .../sidebar-10/components/team-switcher.tsx | 79 + apps/v4/registry/blocks/sidebar-10/page.tsx | 49 + .../sidebar-11/components/app-sidebar.tsx | 141 + apps/v4/registry/blocks/sidebar-11/page.tsx | 55 + .../sidebar-12/components/app-sidebar.tsx | 66 + .../sidebar-12/components/calendars.tsx | 71 + .../sidebar-12/components/date-picker.tsx | 12 + .../blocks/sidebar-12/components/nav-user.tsx | 110 + apps/v4/registry/blocks/sidebar-12/page.tsx | 44 + .../sidebar-13/components/settings-dialog.tsx | 129 + apps/v4/registry/blocks/sidebar-13/page.tsx | 9 + .../sidebar-14/components/app-sidebar.tsx | 197 + apps/v4/registry/blocks/sidebar-14/page.tsx | 48 + .../sidebar-15/components/calendars.tsx | 71 + .../sidebar-15/components/date-picker.tsx | 12 + .../sidebar-15/components/nav-favorites.tsx | 94 + .../blocks/sidebar-15/components/nav-main.tsx | 35 + .../sidebar-15/components/nav-secondary.tsx | 43 + .../blocks/sidebar-15/components/nav-user.tsx | 110 + .../sidebar-15/components/nav-workspaces.tsx | 85 + .../sidebar-15/components/sidebar-left.tsx | 278 + .../sidebar-15/components/sidebar-right.tsx | 71 + .../sidebar-15/components/team-switcher.tsx | 79 + apps/v4/registry/blocks/sidebar-15/page.tsx | 47 + .../sidebar-16/components/app-sidebar.tsx | 188 + .../blocks/sidebar-16/components/nav-main.tsx | 78 + .../sidebar-16/components/nav-projects.tsx | 89 + .../sidebar-16/components/nav-secondary.tsx | 40 + .../blocks/sidebar-16/components/nav-user.tsx | 110 + .../sidebar-16/components/search-form.tsx | 22 + .../sidebar-16/components/site-header.tsx | 50 + apps/v4/registry/blocks/sidebar-16/page.tsx | 30 + apps/v4/registry/charts/chart-area-axes.tsx | 110 + .../v4/registry/charts/chart-area-default.tsx | 94 + .../registry/charts/chart-area-gradient.tsx | 130 + apps/v4/registry/charts/chart-area-icons.tsx | 112 + .../charts/chart-area-interactive.tsx | 266 + apps/v4/registry/charts/chart-area-legend.tsx | 110 + apps/v4/registry/charts/chart-area-linear.tsx | 94 + .../charts/chart-area-stacked-expand.tsx | 121 + .../v4/registry/charts/chart-area-stacked.tsx | 107 + apps/v4/registry/charts/chart-area-step.tsx | 95 + apps/v4/registry/charts/chart-bar-active.tsx | 111 + apps/v4/registry/charts/chart-bar-default.tsx | 75 + .../registry/charts/chart-bar-horizontal.tsx | 83 + .../registry/charts/chart-bar-interactive.tsx | 221 + .../charts/chart-bar-label-custom.tsx | 112 + apps/v4/registry/charts/chart-bar-label.tsx | 88 + apps/v4/registry/charts/chart-bar-mixed.tsx | 103 + .../v4/registry/charts/chart-bar-multiple.tsx | 80 + .../v4/registry/charts/chart-bar-negative.tsx | 75 + apps/v4/registry/charts/chart-bar-stacked.tsx | 90 + .../v4/registry/charts/chart-line-default.tsx | 88 + .../charts/chart-line-dots-colors.tsx | 118 + .../charts/chart-line-dots-custom.tsx | 105 + apps/v4/registry/charts/chart-line-dots.tsx | 97 + .../charts/chart-line-interactive.tsx | 227 + .../charts/chart-line-label-custom.tsx | 123 + apps/v4/registry/charts/chart-line-label.tsx | 105 + apps/v4/registry/charts/chart-line-linear.tsx | 88 + .../registry/charts/chart-line-multiple.tsx | 100 + apps/v4/registry/charts/chart-line-step.tsx | 88 + .../charts/chart-pie-donut-active.tsx | 102 + .../registry/charts/chart-pie-donut-text.tsx | 129 + apps/v4/registry/charts/chart-pie-donut.tsx | 93 + .../registry/charts/chart-pie-interactive.tsx | 192 + .../charts/chart-pie-label-custom.tsx | 107 + .../registry/charts/chart-pie-label-list.tsx | 97 + apps/v4/registry/charts/chart-pie-label.tsx | 85 + apps/v4/registry/charts/chart-pie-legend.tsx | 78 + .../charts/chart-pie-separator-none.tsx | 93 + apps/v4/registry/charts/chart-pie-simple.tsx | 88 + apps/v4/registry/charts/chart-pie-stacked.tsx | 119 + .../registry/charts/chart-radar-default.tsx | 75 + apps/v4/registry/charts/chart-radar-dots.tsx | 79 + .../charts/chart-radar-grid-circle-fill.tsx | 78 + .../chart-radar-grid-circle-no-lines.tsx | 82 + .../charts/chart-radar-grid-circle.tsx | 82 + .../charts/chart-radar-grid-custom.tsx | 78 + .../registry/charts/chart-radar-grid-fill.tsx | 78 + .../registry/charts/chart-radar-grid-none.tsx | 81 + apps/v4/registry/charts/chart-radar-icons.tsx | 94 + .../charts/chart-radar-label-custom.tsx | 120 + .../v4/registry/charts/chart-radar-legend.tsx | 92 + .../charts/chart-radar-lines-only.tsx | 91 + .../registry/charts/chart-radar-multiple.tsx | 83 + .../v4/registry/charts/chart-radar-radius.tsx | 96 + apps/v4/registry/charts/chart-radial-grid.tsx | 89 + .../v4/registry/charts/chart-radial-label.tsx | 101 + .../v4/registry/charts/chart-radial-shape.tsx | 108 + .../registry/charts/chart-radial-simple.tsx | 88 + .../registry/charts/chart-radial-stacked.tsx | 113 + apps/v4/registry/charts/chart-radial-text.tsx | 109 + .../charts/chart-tooltip-advanced.tsx | 123 + .../registry/charts/chart-tooltip-default.tsx | 89 + .../charts/chart-tooltip-formatter.tsx | 100 + .../registry/charts/chart-tooltip-icons.tsx | 87 + .../charts/chart-tooltip-indicator-line.tsx | 87 + .../charts/chart-tooltip-indicator-none.tsx | 84 + .../charts/chart-tooltip-label-custom.tsx | 91 + .../charts/chart-tooltip-label-formatter.tsx | 94 + .../charts/chart-tooltip-label-none.tsx | 84 + apps/v4/registry/hooks/use-mobile.ts | 19 + apps/v4/registry/lib/utils.ts | 6 + apps/v4/registry/ui/accordion.tsx | 66 + apps/v4/registry/ui/alert-dialog.tsx | 157 + apps/v4/registry/ui/alert.tsx | 66 + apps/v4/registry/ui/aspect-ratio.tsx | 11 + apps/v4/registry/ui/avatar.tsx | 53 + apps/v4/registry/ui/badge.tsx | 46 + apps/v4/registry/ui/breadcrumb.tsx | 109 + apps/v4/registry/ui/button.tsx | 58 + apps/v4/registry/ui/calendar.tsx | 73 + apps/v4/registry/ui/card.tsx | 68 + apps/v4/registry/ui/carousel.tsx | 241 + apps/v4/registry/ui/chart.tsx | 366 + apps/v4/registry/ui/checkbox.tsx | 32 + apps/v4/registry/ui/collapsible.tsx | 33 + apps/v4/registry/ui/command.tsx | 177 + apps/v4/registry/ui/context-menu.tsx | 252 + apps/v4/registry/ui/dialog.tsx | 138 + apps/v4/registry/ui/drawer.tsx | 132 + apps/v4/registry/ui/dropdown-menu.tsx | 257 + apps/v4/registry/ui/form.tsx | 167 + apps/v4/registry/ui/hover-card.tsx | 42 + apps/v4/registry/ui/input-otp.tsx | 77 + apps/v4/registry/ui/input.tsx | 19 + apps/v4/registry/ui/label.tsx | 24 + apps/v4/registry/ui/menubar.tsx | 276 + apps/v4/registry/ui/navigation-menu.tsx | 170 + apps/v4/registry/ui/pagination.tsx | 127 + apps/v4/registry/ui/popover.tsx | 48 + apps/v4/registry/ui/progress.tsx | 31 + apps/v4/registry/ui/radio-group.tsx | 45 + apps/v4/registry/ui/resizable.tsx | 56 + apps/v4/registry/ui/scroll-area.tsx | 57 + apps/v4/registry/ui/select.tsx | 181 + apps/v4/registry/ui/separator.tsx | 28 + apps/v4/registry/ui/sheet.tsx | 139 + apps/v4/registry/ui/sidebar.tsx | 738 ++ apps/v4/registry/ui/skeleton.tsx | 13 + apps/v4/registry/ui/slider.tsx | 63 + apps/v4/registry/ui/sonner.tsx | 29 + apps/v4/registry/ui/switch.tsx | 31 + apps/v4/registry/ui/table.tsx | 113 + apps/v4/registry/ui/tabs.tsx | 60 + apps/v4/registry/ui/textarea.tsx | 18 + apps/v4/registry/ui/toggle-group.tsx | 73 + apps/v4/registry/ui/toggle.tsx | 47 + apps/v4/registry/ui/tooltip.tsx | 61 + apps/v4/scripts/build-registry.mts | 144 + apps/v4/tsconfig.json | 37 + apps/v4/tsconfig.scripts.json | 14 + apps/www/public/r/facebook.json | 20 - .../styles/new-york-v4/accordion.json | 45 + .../styles/new-york-v4/alert-dialog.json | 18 + .../registry/styles/new-york-v4/alert.json | 12 + .../styles/new-york-v4/aspect-ratio.json | 15 + .../registry/styles/new-york-v4/avatar.json | 15 + .../registry/styles/new-york-v4/badge.json | 12 + .../styles/new-york-v4/breadcrumb.json | 15 + .../registry/styles/new-york-v4/button.json | 15 + .../registry/styles/new-york-v4/calendar.json | 19 + .../registry/styles/new-york-v4/card.json | 12 + .../registry/styles/new-york-v4/carousel.json | 18 + .../styles/new-york-v4/chart-area-axes.json | 20 + .../new-york-v4/chart-area-default.json | 20 + .../new-york-v4/chart-area-gradient.json | 20 + .../styles/new-york-v4/chart-area-icons.json | 20 + .../new-york-v4/chart-area-interactive.json | 21 + .../styles/new-york-v4/chart-area-legend.json | 20 + .../styles/new-york-v4/chart-area-linear.json | 20 + .../chart-area-stacked-expand.json | 20 + .../new-york-v4/chart-area-stacked.json | 20 + .../styles/new-york-v4/chart-area-step.json | 20 + .../styles/new-york-v4/chart-bar-active.json | 20 + .../styles/new-york-v4/chart-bar-default.json | 20 + .../new-york-v4/chart-bar-horizontal.json | 20 + .../new-york-v4/chart-bar-interactive.json | 20 + .../new-york-v4/chart-bar-label-custom.json | 20 + .../styles/new-york-v4/chart-bar-label.json | 20 + .../styles/new-york-v4/chart-bar-mixed.json | 20 + .../new-york-v4/chart-bar-multiple.json | 20 + .../new-york-v4/chart-bar-negative.json | 20 + .../styles/new-york-v4/chart-bar-stacked.json | 20 + .../new-york-v4/chart-line-default.json | 20 + .../new-york-v4/chart-line-dots-colors.json | 20 + .../new-york-v4/chart-line-dots-custom.json | 20 + .../styles/new-york-v4/chart-line-dots.json | 20 + .../new-york-v4/chart-line-interactive.json | 20 + .../new-york-v4/chart-line-label-custom.json | 20 + .../styles/new-york-v4/chart-line-label.json | 20 + .../styles/new-york-v4/chart-line-linear.json | 20 + .../new-york-v4/chart-line-multiple.json | 20 + .../styles/new-york-v4/chart-line-step.json | 20 + .../new-york-v4/chart-pie-donut-active.json | 20 + .../new-york-v4/chart-pie-donut-text.json | 20 + .../styles/new-york-v4/chart-pie-donut.json | 20 + .../new-york-v4/chart-pie-interactive.json | 20 + .../new-york-v4/chart-pie-label-custom.json | 20 + .../new-york-v4/chart-pie-label-list.json | 20 + .../styles/new-york-v4/chart-pie-label.json | 20 + .../styles/new-york-v4/chart-pie-legend.json | 20 + .../new-york-v4/chart-pie-separator-none.json | 20 + .../styles/new-york-v4/chart-pie-simple.json | 20 + .../styles/new-york-v4/chart-pie-stacked.json | 20 + .../new-york-v4/chart-radar-default.json | 20 + .../styles/new-york-v4/chart-radar-dots.json | 20 + .../chart-radar-grid-circle-fill.json | 20 + .../chart-radar-grid-circle-no-lines.json | 20 + .../new-york-v4/chart-radar-grid-circle.json | 20 + .../new-york-v4/chart-radar-grid-custom.json | 20 + .../new-york-v4/chart-radar-grid-fill.json | 20 + .../new-york-v4/chart-radar-grid-none.json | 20 + .../styles/new-york-v4/chart-radar-icons.json | 20 + .../new-york-v4/chart-radar-label-custom.json | 20 + .../new-york-v4/chart-radar-legend.json | 20 + .../new-york-v4/chart-radar-lines-only.json | 20 + .../new-york-v4/chart-radar-multiple.json | 20 + .../new-york-v4/chart-radar-radius.json | 20 + .../styles/new-york-v4/chart-radial-grid.json | 20 + .../new-york-v4/chart-radial-label.json | 20 + .../new-york-v4/chart-radial-shape.json | 20 + .../new-york-v4/chart-radial-simple.json | 20 + .../new-york-v4/chart-radial-stacked.json | 20 + .../styles/new-york-v4/chart-radial-text.json | 20 + .../new-york-v4/chart-tooltip-advanced.json | 20 + .../new-york-v4/chart-tooltip-default.json | 20 + .../new-york-v4/chart-tooltip-formatter.json | 20 + .../new-york-v4/chart-tooltip-icons.json | 20 + .../chart-tooltip-indicator-line.json | 20 + .../chart-tooltip-indicator-none.json | 20 + .../chart-tooltip-label-custom.json | 20 + .../chart-tooltip-label-formatter.json | 20 + .../new-york-v4/chart-tooltip-label-none.json | 20 + .../registry/styles/new-york-v4/chart.json | 19 + .../registry/styles/new-york-v4/checkbox.json | 15 + .../styles/new-york-v4/collapsible.json | 15 + .../registry/styles/new-york-v4/command.json | 18 + .../styles/new-york-v4/context-menu.json | 15 + .../registry/styles/new-york-v4/dialog.json | 15 + .../registry/styles/new-york-v4/drawer.json | 16 + .../styles/new-york-v4/dropdown-menu.json | 15 + .../registry/styles/new-york-v4/form.json | 23 + .../styles/new-york-v4/hover-card.json | 15 + .../styles/new-york-v4/input-otp.json | 15 + .../registry/styles/new-york-v4/input.json | 12 + .../registry/styles/new-york-v4/label.json | 15 + .../registry/styles/new-york-v4/login-01.json | 29 + .../registry/styles/new-york-v4/login-02.json | 29 + .../registry/styles/new-york-v4/login-03.json | 29 + .../registry/styles/new-york-v4/login-04.json | 29 + .../registry/styles/new-york-v4/login-05.json | 29 + .../registry/styles/new-york-v4/menubar.json | 15 + .../styles/new-york-v4/navigation-menu.json | 15 + .../styles/new-york-v4/pagination.json | 15 + .../registry/styles/new-york-v4/popover.json | 15 + .../registry/styles/new-york-v4/progress.json | 15 + .../styles/new-york-v4/radio-group.json | 15 + .../styles/new-york-v4/resizable.json | 15 + .../styles/new-york-v4/scroll-area.json | 15 + .../registry/styles/new-york-v4/select.json | 15 + .../styles/new-york-v4/separator.json | 15 + .../registry/styles/new-york-v4/sheet.json | 15 + .../styles/new-york-v4/sidebar-01.json | 40 + .../styles/new-york-v4/sidebar-02.json | 40 + .../styles/new-york-v4/sidebar-03.json | 27 + .../styles/new-york-v4/sidebar-04.json | 28 + .../styles/new-york-v4/sidebar-05.json | 35 + .../styles/new-york-v4/sidebar-06.json | 40 + .../styles/new-york-v4/sidebar-07.json | 51 + .../styles/new-york-v4/sidebar-08.json | 51 + .../styles/new-york-v4/sidebar-09.json | 37 + .../styles/new-york-v4/sidebar-10.json | 61 + .../styles/new-york-v4/sidebar-11.json | 29 + .../styles/new-york-v4/sidebar-12.json | 47 + .../styles/new-york-v4/sidebar-13.json | 29 + .../styles/new-york-v4/sidebar-14.json | 27 + .../styles/new-york-v4/sidebar-15.json | 78 + .../styles/new-york-v4/sidebar-16.json | 62 + .../registry/styles/new-york-v4/sidebar.json | 68 + .../registry/styles/new-york-v4/skeleton.json | 12 + .../registry/styles/new-york-v4/slider.json | 15 + .../registry/styles/new-york-v4/sonner.json | 16 + .../registry/styles/new-york-v4/switch.json | 15 + .../registry/styles/new-york-v4/table.json | 12 + .../registry/styles/new-york-v4/tabs.json | 15 + .../registry/styles/new-york-v4/textarea.json | 12 + .../styles/new-york-v4/toggle-group.json | 18 + .../registry/styles/new-york-v4/toggle.json | 15 + .../registry/styles/new-york-v4/tooltip.json | 15 + .../styles/new-york-v4/use-mobile.json | 12 + apps/www/registry/default/ui/menubar.tsx | 30 +- apps/www/registry/new-york/ui/menubar.tsx | 30 +- package.json | 3 + packages/cli/vitest.config.ts | 18 + packages/shadcn/vitest.config.ts | 18 + pnpm-lock.yaml | 10884 ++++++++++------ prettier.config.cjs | 1 + 440 files changed, 42054 insertions(+), 4190 deletions(-) create mode 100644 apps/v4/.gitignore create mode 100644 apps/v4/.prettierignore create mode 100644 apps/v4/README.md create mode 100644 apps/v4/__registry__/.autogenerated create mode 100644 apps/v4/__registry__/.gitkeep create mode 100644 apps/v4/__registry__/README.md create mode 100644 apps/v4/__registry__/index.tsx create mode 100644 apps/v4/app/(app)/charts/charts.tsx create mode 100644 apps/v4/app/(app)/charts/page.tsx create mode 100644 apps/v4/app/(app)/layout.tsx create mode 100644 apps/v4/app/(app)/page.tsx create mode 100644 apps/v4/app/(view)/view/[name]/page.tsx create mode 100644 apps/v4/app/favicon.ico create mode 100644 apps/v4/app/globals.css create mode 100644 apps/v4/app/layout.tsx create mode 100644 apps/v4/components.json create mode 100644 apps/v4/components/accordion-demo.tsx create mode 100644 apps/v4/components/alert-demo.tsx create mode 100644 apps/v4/components/alert-dialog-demo.tsx create mode 100644 apps/v4/components/app-sidebar.tsx create mode 100644 apps/v4/components/aspect-ratio-demo.tsx create mode 100644 apps/v4/components/avatar-demo.tsx create mode 100644 apps/v4/components/badge-demo.tsx create mode 100644 apps/v4/components/breadcrumb-demo.tsx create mode 100644 apps/v4/components/button-demo.tsx create mode 100644 apps/v4/components/calendar-demo.tsx create mode 100644 apps/v4/components/card-demo.tsx create mode 100644 apps/v4/components/carousel-demo.tsx create mode 100644 apps/v4/components/chart-area-demo.tsx create mode 100644 apps/v4/components/chart-bar-demo.tsx create mode 100644 apps/v4/components/chart-demo.tsx create mode 100644 apps/v4/components/chart-line-demo.tsx create mode 100644 apps/v4/components/checkbox-demo.tsx create mode 100644 apps/v4/components/collapsible-demo.tsx create mode 100644 apps/v4/components/combobox-demo.tsx create mode 100644 apps/v4/components/command-demo.tsx create mode 100644 apps/v4/components/component-wrapper.tsx create mode 100644 apps/v4/components/context-menu-demo.tsx create mode 100644 apps/v4/components/date-picker-demo.tsx create mode 100644 apps/v4/components/dialog-demo.tsx create mode 100644 apps/v4/components/drawer-demo.tsx create mode 100644 apps/v4/components/dropdown-menu-demo.tsx create mode 100644 apps/v4/components/form-demo.tsx create mode 100644 apps/v4/components/hover-card-demo.tsx create mode 100644 apps/v4/components/input-demo.tsx create mode 100644 apps/v4/components/input-otp-demo.tsx create mode 100644 apps/v4/components/label-demo.tsx create mode 100644 apps/v4/components/menubar-demo.tsx create mode 100644 apps/v4/components/mode-switcher.tsx create mode 100644 apps/v4/components/mode-toggle.tsx create mode 100644 apps/v4/components/nav-main.tsx create mode 100644 apps/v4/components/nav-projects.tsx create mode 100644 apps/v4/components/nav-user.tsx create mode 100644 apps/v4/components/navigation-menu-demo.tsx create mode 100644 apps/v4/components/pagination-demo.tsx create mode 100644 apps/v4/components/popover-demo.tsx create mode 100644 apps/v4/components/progress-demo.tsx create mode 100644 apps/v4/components/radio-group-demo.tsx create mode 100644 apps/v4/components/resizable-demo.tsx create mode 100644 apps/v4/components/scroll-area-demo.tsx create mode 100644 apps/v4/components/select-demo.tsx create mode 100644 apps/v4/components/separator-demo.tsx create mode 100644 apps/v4/components/sheet-demo.tsx create mode 100644 apps/v4/components/skeleton-demo.tsx create mode 100644 apps/v4/components/slider-demo.tsx create mode 100644 apps/v4/components/sonner-demo.tsx create mode 100644 apps/v4/components/switch-demo.tsx create mode 100644 apps/v4/components/table-demo.tsx create mode 100644 apps/v4/components/tabs-demo.tsx create mode 100644 apps/v4/components/team-switcher.tsx create mode 100644 apps/v4/components/textarea-demo.tsx create mode 100644 apps/v4/components/theme-provider.tsx create mode 100644 apps/v4/components/toggle-demo.tsx create mode 100644 apps/v4/components/toggle-group-demo.tsx create mode 100644 apps/v4/components/tooltip-demo.tsx create mode 100644 apps/v4/eslint.config.mjs create mode 100644 apps/v4/hooks/use-meta-color.ts create mode 100644 apps/v4/lib/registry.ts create mode 100644 apps/v4/lib/utils.ts create mode 100644 apps/v4/next.config.ts create mode 100644 apps/v4/package.json create mode 100644 apps/v4/postcss.config.mjs create mode 100644 apps/v4/public/avatars/shadcn.jpg create mode 100644 apps/v4/public/file.svg create mode 100644 apps/v4/public/globe.svg create mode 100644 apps/v4/public/next.svg create mode 100644 apps/v4/public/placeholder.svg create mode 100644 apps/v4/public/vercel.svg create mode 100644 apps/v4/public/window.svg create mode 100644 apps/v4/registry.json create mode 100644 apps/v4/registry/blocks/login-01/components/login-form.tsx create mode 100644 apps/v4/registry/blocks/login-01/page.tsx create mode 100644 apps/v4/registry/blocks/login-02/components/login-form.tsx create mode 100644 apps/v4/registry/blocks/login-02/page.tsx create mode 100644 apps/v4/registry/blocks/login-03/components/login-form.tsx create mode 100644 apps/v4/registry/blocks/login-03/page.tsx create mode 100644 apps/v4/registry/blocks/login-04/components/login-form.tsx create mode 100644 apps/v4/registry/blocks/login-04/page.tsx create mode 100644 apps/v4/registry/blocks/login-05/components/login-form.tsx create mode 100644 apps/v4/registry/blocks/login-05/page.tsx create mode 100644 apps/v4/registry/blocks/sidebar-01/components/app-sidebar.tsx create mode 100644 apps/v4/registry/blocks/sidebar-01/components/search-form.tsx create mode 100644 apps/v4/registry/blocks/sidebar-01/components/version-switcher.tsx create mode 100644 apps/v4/registry/blocks/sidebar-01/page.tsx create mode 100644 apps/v4/registry/blocks/sidebar-02/components/app-sidebar.tsx create mode 100644 apps/v4/registry/blocks/sidebar-02/components/search-form.tsx create mode 100644 apps/v4/registry/blocks/sidebar-02/components/version-switcher.tsx create mode 100644 apps/v4/registry/blocks/sidebar-02/page.tsx create mode 100644 apps/v4/registry/blocks/sidebar-03/components/app-sidebar.tsx create mode 100644 apps/v4/registry/blocks/sidebar-03/page.tsx create mode 100644 apps/v4/registry/blocks/sidebar-04/components/app-sidebar.tsx create mode 100644 apps/v4/registry/blocks/sidebar-04/page.tsx create mode 100644 apps/v4/registry/blocks/sidebar-05/components/app-sidebar.tsx create mode 100644 apps/v4/registry/blocks/sidebar-05/components/search-form.tsx create mode 100644 apps/v4/registry/blocks/sidebar-05/page.tsx create mode 100644 apps/v4/registry/blocks/sidebar-06/components/app-sidebar.tsx create mode 100644 apps/v4/registry/blocks/sidebar-06/components/nav-main.tsx create mode 100644 apps/v4/registry/blocks/sidebar-06/components/sidebar-opt-in-form.tsx create mode 100644 apps/v4/registry/blocks/sidebar-06/page.tsx create mode 100644 apps/v4/registry/blocks/sidebar-07/components/app-sidebar.tsx create mode 100644 apps/v4/registry/blocks/sidebar-07/components/nav-main.tsx create mode 100644 apps/v4/registry/blocks/sidebar-07/components/nav-projects.tsx create mode 100644 apps/v4/registry/blocks/sidebar-07/components/nav-user.tsx create mode 100644 apps/v4/registry/blocks/sidebar-07/components/team-switcher.tsx create mode 100644 apps/v4/registry/blocks/sidebar-07/page.tsx create mode 100644 apps/v4/registry/blocks/sidebar-08/components/app-sidebar.tsx create mode 100644 apps/v4/registry/blocks/sidebar-08/components/nav-main.tsx create mode 100644 apps/v4/registry/blocks/sidebar-08/components/nav-projects.tsx create mode 100644 apps/v4/registry/blocks/sidebar-08/components/nav-secondary.tsx create mode 100644 apps/v4/registry/blocks/sidebar-08/components/nav-user.tsx create mode 100644 apps/v4/registry/blocks/sidebar-08/page.tsx create mode 100644 apps/v4/registry/blocks/sidebar-09/components/app-sidebar.tsx create mode 100644 apps/v4/registry/blocks/sidebar-09/components/nav-user.tsx create mode 100644 apps/v4/registry/blocks/sidebar-09/page.tsx create mode 100644 apps/v4/registry/blocks/sidebar-10/components/app-sidebar.tsx create mode 100644 apps/v4/registry/blocks/sidebar-10/components/nav-actions.tsx create mode 100644 apps/v4/registry/blocks/sidebar-10/components/nav-favorites.tsx create mode 100644 apps/v4/registry/blocks/sidebar-10/components/nav-main.tsx create mode 100644 apps/v4/registry/blocks/sidebar-10/components/nav-secondary.tsx create mode 100644 apps/v4/registry/blocks/sidebar-10/components/nav-workspaces.tsx create mode 100644 apps/v4/registry/blocks/sidebar-10/components/team-switcher.tsx create mode 100644 apps/v4/registry/blocks/sidebar-10/page.tsx create mode 100644 apps/v4/registry/blocks/sidebar-11/components/app-sidebar.tsx create mode 100644 apps/v4/registry/blocks/sidebar-11/page.tsx create mode 100644 apps/v4/registry/blocks/sidebar-12/components/app-sidebar.tsx create mode 100644 apps/v4/registry/blocks/sidebar-12/components/calendars.tsx create mode 100644 apps/v4/registry/blocks/sidebar-12/components/date-picker.tsx create mode 100644 apps/v4/registry/blocks/sidebar-12/components/nav-user.tsx create mode 100644 apps/v4/registry/blocks/sidebar-12/page.tsx create mode 100644 apps/v4/registry/blocks/sidebar-13/components/settings-dialog.tsx create mode 100644 apps/v4/registry/blocks/sidebar-13/page.tsx create mode 100644 apps/v4/registry/blocks/sidebar-14/components/app-sidebar.tsx create mode 100644 apps/v4/registry/blocks/sidebar-14/page.tsx create mode 100644 apps/v4/registry/blocks/sidebar-15/components/calendars.tsx create mode 100644 apps/v4/registry/blocks/sidebar-15/components/date-picker.tsx create mode 100644 apps/v4/registry/blocks/sidebar-15/components/nav-favorites.tsx create mode 100644 apps/v4/registry/blocks/sidebar-15/components/nav-main.tsx create mode 100644 apps/v4/registry/blocks/sidebar-15/components/nav-secondary.tsx create mode 100644 apps/v4/registry/blocks/sidebar-15/components/nav-user.tsx create mode 100644 apps/v4/registry/blocks/sidebar-15/components/nav-workspaces.tsx create mode 100644 apps/v4/registry/blocks/sidebar-15/components/sidebar-left.tsx create mode 100644 apps/v4/registry/blocks/sidebar-15/components/sidebar-right.tsx create mode 100644 apps/v4/registry/blocks/sidebar-15/components/team-switcher.tsx create mode 100644 apps/v4/registry/blocks/sidebar-15/page.tsx create mode 100644 apps/v4/registry/blocks/sidebar-16/components/app-sidebar.tsx create mode 100644 apps/v4/registry/blocks/sidebar-16/components/nav-main.tsx create mode 100644 apps/v4/registry/blocks/sidebar-16/components/nav-projects.tsx create mode 100644 apps/v4/registry/blocks/sidebar-16/components/nav-secondary.tsx create mode 100644 apps/v4/registry/blocks/sidebar-16/components/nav-user.tsx create mode 100644 apps/v4/registry/blocks/sidebar-16/components/search-form.tsx create mode 100644 apps/v4/registry/blocks/sidebar-16/components/site-header.tsx create mode 100644 apps/v4/registry/blocks/sidebar-16/page.tsx create mode 100644 apps/v4/registry/charts/chart-area-axes.tsx create mode 100644 apps/v4/registry/charts/chart-area-default.tsx create mode 100644 apps/v4/registry/charts/chart-area-gradient.tsx create mode 100644 apps/v4/registry/charts/chart-area-icons.tsx create mode 100644 apps/v4/registry/charts/chart-area-interactive.tsx create mode 100644 apps/v4/registry/charts/chart-area-legend.tsx create mode 100644 apps/v4/registry/charts/chart-area-linear.tsx create mode 100644 apps/v4/registry/charts/chart-area-stacked-expand.tsx create mode 100644 apps/v4/registry/charts/chart-area-stacked.tsx create mode 100644 apps/v4/registry/charts/chart-area-step.tsx create mode 100644 apps/v4/registry/charts/chart-bar-active.tsx create mode 100644 apps/v4/registry/charts/chart-bar-default.tsx create mode 100644 apps/v4/registry/charts/chart-bar-horizontal.tsx create mode 100644 apps/v4/registry/charts/chart-bar-interactive.tsx create mode 100644 apps/v4/registry/charts/chart-bar-label-custom.tsx create mode 100644 apps/v4/registry/charts/chart-bar-label.tsx create mode 100644 apps/v4/registry/charts/chart-bar-mixed.tsx create mode 100644 apps/v4/registry/charts/chart-bar-multiple.tsx create mode 100644 apps/v4/registry/charts/chart-bar-negative.tsx create mode 100644 apps/v4/registry/charts/chart-bar-stacked.tsx create mode 100644 apps/v4/registry/charts/chart-line-default.tsx create mode 100644 apps/v4/registry/charts/chart-line-dots-colors.tsx create mode 100644 apps/v4/registry/charts/chart-line-dots-custom.tsx create mode 100644 apps/v4/registry/charts/chart-line-dots.tsx create mode 100644 apps/v4/registry/charts/chart-line-interactive.tsx create mode 100644 apps/v4/registry/charts/chart-line-label-custom.tsx create mode 100644 apps/v4/registry/charts/chart-line-label.tsx create mode 100644 apps/v4/registry/charts/chart-line-linear.tsx create mode 100644 apps/v4/registry/charts/chart-line-multiple.tsx create mode 100644 apps/v4/registry/charts/chart-line-step.tsx create mode 100644 apps/v4/registry/charts/chart-pie-donut-active.tsx create mode 100644 apps/v4/registry/charts/chart-pie-donut-text.tsx create mode 100644 apps/v4/registry/charts/chart-pie-donut.tsx create mode 100644 apps/v4/registry/charts/chart-pie-interactive.tsx create mode 100644 apps/v4/registry/charts/chart-pie-label-custom.tsx create mode 100644 apps/v4/registry/charts/chart-pie-label-list.tsx create mode 100644 apps/v4/registry/charts/chart-pie-label.tsx create mode 100644 apps/v4/registry/charts/chart-pie-legend.tsx create mode 100644 apps/v4/registry/charts/chart-pie-separator-none.tsx create mode 100644 apps/v4/registry/charts/chart-pie-simple.tsx create mode 100644 apps/v4/registry/charts/chart-pie-stacked.tsx create mode 100644 apps/v4/registry/charts/chart-radar-default.tsx create mode 100644 apps/v4/registry/charts/chart-radar-dots.tsx create mode 100644 apps/v4/registry/charts/chart-radar-grid-circle-fill.tsx create mode 100644 apps/v4/registry/charts/chart-radar-grid-circle-no-lines.tsx create mode 100644 apps/v4/registry/charts/chart-radar-grid-circle.tsx create mode 100644 apps/v4/registry/charts/chart-radar-grid-custom.tsx create mode 100644 apps/v4/registry/charts/chart-radar-grid-fill.tsx create mode 100644 apps/v4/registry/charts/chart-radar-grid-none.tsx create mode 100644 apps/v4/registry/charts/chart-radar-icons.tsx create mode 100644 apps/v4/registry/charts/chart-radar-label-custom.tsx create mode 100644 apps/v4/registry/charts/chart-radar-legend.tsx create mode 100644 apps/v4/registry/charts/chart-radar-lines-only.tsx create mode 100644 apps/v4/registry/charts/chart-radar-multiple.tsx create mode 100644 apps/v4/registry/charts/chart-radar-radius.tsx create mode 100644 apps/v4/registry/charts/chart-radial-grid.tsx create mode 100644 apps/v4/registry/charts/chart-radial-label.tsx create mode 100644 apps/v4/registry/charts/chart-radial-shape.tsx create mode 100644 apps/v4/registry/charts/chart-radial-simple.tsx create mode 100644 apps/v4/registry/charts/chart-radial-stacked.tsx create mode 100644 apps/v4/registry/charts/chart-radial-text.tsx create mode 100644 apps/v4/registry/charts/chart-tooltip-advanced.tsx create mode 100644 apps/v4/registry/charts/chart-tooltip-default.tsx create mode 100644 apps/v4/registry/charts/chart-tooltip-formatter.tsx create mode 100644 apps/v4/registry/charts/chart-tooltip-icons.tsx create mode 100644 apps/v4/registry/charts/chart-tooltip-indicator-line.tsx create mode 100644 apps/v4/registry/charts/chart-tooltip-indicator-none.tsx create mode 100644 apps/v4/registry/charts/chart-tooltip-label-custom.tsx create mode 100644 apps/v4/registry/charts/chart-tooltip-label-formatter.tsx create mode 100644 apps/v4/registry/charts/chart-tooltip-label-none.tsx create mode 100644 apps/v4/registry/hooks/use-mobile.ts create mode 100644 apps/v4/registry/lib/utils.ts create mode 100644 apps/v4/registry/ui/accordion.tsx create mode 100644 apps/v4/registry/ui/alert-dialog.tsx create mode 100644 apps/v4/registry/ui/alert.tsx create mode 100644 apps/v4/registry/ui/aspect-ratio.tsx create mode 100644 apps/v4/registry/ui/avatar.tsx create mode 100644 apps/v4/registry/ui/badge.tsx create mode 100644 apps/v4/registry/ui/breadcrumb.tsx create mode 100644 apps/v4/registry/ui/button.tsx create mode 100644 apps/v4/registry/ui/calendar.tsx create mode 100644 apps/v4/registry/ui/card.tsx create mode 100644 apps/v4/registry/ui/carousel.tsx create mode 100644 apps/v4/registry/ui/chart.tsx create mode 100644 apps/v4/registry/ui/checkbox.tsx create mode 100644 apps/v4/registry/ui/collapsible.tsx create mode 100644 apps/v4/registry/ui/command.tsx create mode 100644 apps/v4/registry/ui/context-menu.tsx create mode 100644 apps/v4/registry/ui/dialog.tsx create mode 100644 apps/v4/registry/ui/drawer.tsx create mode 100644 apps/v4/registry/ui/dropdown-menu.tsx create mode 100644 apps/v4/registry/ui/form.tsx create mode 100644 apps/v4/registry/ui/hover-card.tsx create mode 100644 apps/v4/registry/ui/input-otp.tsx create mode 100644 apps/v4/registry/ui/input.tsx create mode 100644 apps/v4/registry/ui/label.tsx create mode 100644 apps/v4/registry/ui/menubar.tsx create mode 100644 apps/v4/registry/ui/navigation-menu.tsx create mode 100644 apps/v4/registry/ui/pagination.tsx create mode 100644 apps/v4/registry/ui/popover.tsx create mode 100644 apps/v4/registry/ui/progress.tsx create mode 100644 apps/v4/registry/ui/radio-group.tsx create mode 100644 apps/v4/registry/ui/resizable.tsx create mode 100644 apps/v4/registry/ui/scroll-area.tsx create mode 100644 apps/v4/registry/ui/select.tsx create mode 100644 apps/v4/registry/ui/separator.tsx create mode 100644 apps/v4/registry/ui/sheet.tsx create mode 100644 apps/v4/registry/ui/sidebar.tsx create mode 100644 apps/v4/registry/ui/skeleton.tsx create mode 100644 apps/v4/registry/ui/slider.tsx create mode 100644 apps/v4/registry/ui/sonner.tsx create mode 100644 apps/v4/registry/ui/switch.tsx create mode 100644 apps/v4/registry/ui/table.tsx create mode 100644 apps/v4/registry/ui/tabs.tsx create mode 100644 apps/v4/registry/ui/textarea.tsx create mode 100644 apps/v4/registry/ui/toggle-group.tsx create mode 100644 apps/v4/registry/ui/toggle.tsx create mode 100644 apps/v4/registry/ui/tooltip.tsx create mode 100644 apps/v4/scripts/build-registry.mts create mode 100644 apps/v4/tsconfig.json create mode 100644 apps/v4/tsconfig.scripts.json delete mode 100644 apps/www/public/r/facebook.json create mode 100644 apps/www/public/registry/styles/new-york-v4/accordion.json create mode 100644 apps/www/public/registry/styles/new-york-v4/alert-dialog.json create mode 100644 apps/www/public/registry/styles/new-york-v4/alert.json create mode 100644 apps/www/public/registry/styles/new-york-v4/aspect-ratio.json create mode 100644 apps/www/public/registry/styles/new-york-v4/avatar.json create mode 100644 apps/www/public/registry/styles/new-york-v4/badge.json create mode 100644 apps/www/public/registry/styles/new-york-v4/breadcrumb.json create mode 100644 apps/www/public/registry/styles/new-york-v4/button.json create mode 100644 apps/www/public/registry/styles/new-york-v4/calendar.json create mode 100644 apps/www/public/registry/styles/new-york-v4/card.json create mode 100644 apps/www/public/registry/styles/new-york-v4/carousel.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-area-axes.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-area-default.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-area-gradient.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-area-icons.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-area-interactive.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-area-legend.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-area-linear.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-area-stacked-expand.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-area-stacked.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-area-step.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-bar-active.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-bar-default.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-bar-horizontal.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-bar-interactive.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-bar-label-custom.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-bar-label.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-bar-mixed.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-bar-multiple.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-bar-negative.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-bar-stacked.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-line-default.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-line-dots-colors.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-line-dots-custom.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-line-dots.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-line-interactive.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-line-label-custom.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-line-label.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-line-linear.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-line-multiple.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-line-step.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-pie-donut-active.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-pie-donut-text.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-pie-donut.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-pie-interactive.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-pie-label-custom.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-pie-label-list.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-pie-label.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-pie-legend.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-pie-separator-none.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-pie-simple.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-pie-stacked.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-radar-default.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-radar-dots.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-radar-grid-circle-fill.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-radar-grid-circle-no-lines.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-radar-grid-circle.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-radar-grid-custom.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-radar-grid-fill.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-radar-grid-none.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-radar-icons.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-radar-label-custom.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-radar-legend.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-radar-lines-only.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-radar-multiple.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-radar-radius.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-radial-grid.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-radial-label.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-radial-shape.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-radial-simple.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-radial-stacked.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-radial-text.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-tooltip-advanced.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-tooltip-default.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-tooltip-formatter.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-tooltip-icons.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-tooltip-indicator-line.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-tooltip-indicator-none.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-tooltip-label-custom.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-tooltip-label-formatter.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart-tooltip-label-none.json create mode 100644 apps/www/public/registry/styles/new-york-v4/chart.json create mode 100644 apps/www/public/registry/styles/new-york-v4/checkbox.json create mode 100644 apps/www/public/registry/styles/new-york-v4/collapsible.json create mode 100644 apps/www/public/registry/styles/new-york-v4/command.json create mode 100644 apps/www/public/registry/styles/new-york-v4/context-menu.json create mode 100644 apps/www/public/registry/styles/new-york-v4/dialog.json create mode 100644 apps/www/public/registry/styles/new-york-v4/drawer.json create mode 100644 apps/www/public/registry/styles/new-york-v4/dropdown-menu.json create mode 100644 apps/www/public/registry/styles/new-york-v4/form.json create mode 100644 apps/www/public/registry/styles/new-york-v4/hover-card.json create mode 100644 apps/www/public/registry/styles/new-york-v4/input-otp.json create mode 100644 apps/www/public/registry/styles/new-york-v4/input.json create mode 100644 apps/www/public/registry/styles/new-york-v4/label.json create mode 100644 apps/www/public/registry/styles/new-york-v4/login-01.json create mode 100644 apps/www/public/registry/styles/new-york-v4/login-02.json create mode 100644 apps/www/public/registry/styles/new-york-v4/login-03.json create mode 100644 apps/www/public/registry/styles/new-york-v4/login-04.json create mode 100644 apps/www/public/registry/styles/new-york-v4/login-05.json create mode 100644 apps/www/public/registry/styles/new-york-v4/menubar.json create mode 100644 apps/www/public/registry/styles/new-york-v4/navigation-menu.json create mode 100644 apps/www/public/registry/styles/new-york-v4/pagination.json create mode 100644 apps/www/public/registry/styles/new-york-v4/popover.json create mode 100644 apps/www/public/registry/styles/new-york-v4/progress.json create mode 100644 apps/www/public/registry/styles/new-york-v4/radio-group.json create mode 100644 apps/www/public/registry/styles/new-york-v4/resizable.json create mode 100644 apps/www/public/registry/styles/new-york-v4/scroll-area.json create mode 100644 apps/www/public/registry/styles/new-york-v4/select.json create mode 100644 apps/www/public/registry/styles/new-york-v4/separator.json create mode 100644 apps/www/public/registry/styles/new-york-v4/sheet.json create mode 100644 apps/www/public/registry/styles/new-york-v4/sidebar-01.json create mode 100644 apps/www/public/registry/styles/new-york-v4/sidebar-02.json create mode 100644 apps/www/public/registry/styles/new-york-v4/sidebar-03.json create mode 100644 apps/www/public/registry/styles/new-york-v4/sidebar-04.json create mode 100644 apps/www/public/registry/styles/new-york-v4/sidebar-05.json create mode 100644 apps/www/public/registry/styles/new-york-v4/sidebar-06.json create mode 100644 apps/www/public/registry/styles/new-york-v4/sidebar-07.json create mode 100644 apps/www/public/registry/styles/new-york-v4/sidebar-08.json create mode 100644 apps/www/public/registry/styles/new-york-v4/sidebar-09.json create mode 100644 apps/www/public/registry/styles/new-york-v4/sidebar-10.json create mode 100644 apps/www/public/registry/styles/new-york-v4/sidebar-11.json create mode 100644 apps/www/public/registry/styles/new-york-v4/sidebar-12.json create mode 100644 apps/www/public/registry/styles/new-york-v4/sidebar-13.json create mode 100644 apps/www/public/registry/styles/new-york-v4/sidebar-14.json create mode 100644 apps/www/public/registry/styles/new-york-v4/sidebar-15.json create mode 100644 apps/www/public/registry/styles/new-york-v4/sidebar-16.json create mode 100644 apps/www/public/registry/styles/new-york-v4/sidebar.json create mode 100644 apps/www/public/registry/styles/new-york-v4/skeleton.json create mode 100644 apps/www/public/registry/styles/new-york-v4/slider.json create mode 100644 apps/www/public/registry/styles/new-york-v4/sonner.json create mode 100644 apps/www/public/registry/styles/new-york-v4/switch.json create mode 100644 apps/www/public/registry/styles/new-york-v4/table.json create mode 100644 apps/www/public/registry/styles/new-york-v4/tabs.json create mode 100644 apps/www/public/registry/styles/new-york-v4/textarea.json create mode 100644 apps/www/public/registry/styles/new-york-v4/toggle-group.json create mode 100644 apps/www/public/registry/styles/new-york-v4/toggle.json create mode 100644 apps/www/public/registry/styles/new-york-v4/tooltip.json create mode 100644 apps/www/public/registry/styles/new-york-v4/use-mobile.json create mode 100644 packages/cli/vitest.config.ts create mode 100644 packages/shadcn/vitest.config.ts diff --git a/.vscode/settings.json b/.vscode/settings.json index 48a495a6a0..b9b8873c90 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -4,8 +4,10 @@ { "pattern": "packages/*/" } ], "tailwindCSS.experimental.classRegex": [ - ["cva\\(([^)]*)\\)", "[\"'`]([^\"'`]*).*?[\"'`]"], - ["cn\\(([^)]*)\\)", "[\"'`]([^\"'`]*).*?[\"'`]"] + ["cva\\(((?:[^()]|\\([^()]*\\))*)\\)", "[\"'`]?([^\"'`]+)[\"'`]?"], + ["cn\\(((?:[^()]|\\([^()]*\\))*)\\)", "(?:'|\"|`)([^']*)(?:'|\"|`)"] + // "cva\\(([^)]*)\\)", + // "[\"'`]([^\"'`]*).*?[\"'`]" ], "vitest.debugExclude": [ "/**", diff --git a/apps/v4/.gitignore b/apps/v4/.gitignore new file mode 100644 index 0000000000..5ef6a52078 --- /dev/null +++ b/apps/v4/.gitignore @@ -0,0 +1,41 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/versions + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# env files (can opt-in for committing if needed) +.env* + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/apps/v4/.prettierignore b/apps/v4/.prettierignore new file mode 100644 index 0000000000..21825d3542 --- /dev/null +++ b/apps/v4/.prettierignore @@ -0,0 +1,6 @@ +dist +node_modules +.next +build +.contentlayer +registry/__index__.tsx diff --git a/apps/v4/README.md b/apps/v4/README.md new file mode 100644 index 0000000000..cb8a74abed --- /dev/null +++ b/apps/v4/README.md @@ -0,0 +1 @@ +This is a wip registry for the `shadcn` canary version. It has React 19 and Tailwind v4 components. diff --git a/apps/v4/__registry__/.autogenerated b/apps/v4/__registry__/.autogenerated new file mode 100644 index 0000000000..0055c2a3e0 --- /dev/null +++ b/apps/v4/__registry__/.autogenerated @@ -0,0 +1 @@ +// The content of this directory is autogenerated by the registry server. diff --git a/apps/v4/__registry__/.gitkeep b/apps/v4/__registry__/.gitkeep new file mode 100644 index 0000000000..e69de29bb2 diff --git a/apps/v4/__registry__/README.md b/apps/v4/__registry__/README.md new file mode 100644 index 0000000000..5621ceace4 --- /dev/null +++ b/apps/v4/__registry__/README.md @@ -0,0 +1 @@ +> Files inside this directory is autogenerated by `./scripts/build-registry.ts`. **Do not edit them manually.** - shadcn diff --git a/apps/v4/__registry__/index.tsx b/apps/v4/__registry__/index.tsx new file mode 100644 index 0000000000..14126108de --- /dev/null +++ b/apps/v4/__registry__/index.tsx @@ -0,0 +1,3588 @@ +/* eslint-disable @typescript-eslint/ban-ts-comment */ +/* eslint-disable @typescript-eslint/no-explicit-any */ +// @ts-nocheck +// This file is autogenerated by scripts/build-registry.ts +// Do not edit this file directly. +import * as React from "react" + +export const Index: Record = { + accordion: { + name: "accordion", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/accordion.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/accordion.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + alert: { + name: "alert", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/alert.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/alert.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "alert-dialog": { + name: "alert-dialog", + description: "", + type: "registry:ui", + registryDependencies: ["button"], + files: [ + { + path: "registry/ui/alert-dialog.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/alert-dialog.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "aspect-ratio": { + name: "aspect-ratio", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/aspect-ratio.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/aspect-ratio.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + avatar: { + name: "avatar", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/avatar.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/avatar.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + badge: { + name: "badge", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/badge.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/badge.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + breadcrumb: { + name: "breadcrumb", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/breadcrumb.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/breadcrumb.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + button: { + name: "button", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/button.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/button.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + calendar: { + name: "calendar", + description: "", + type: "registry:ui", + registryDependencies: ["button"], + files: [ + { + path: "registry/ui/calendar.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/calendar.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + card: { + name: "card", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/card.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/card.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + carousel: { + name: "carousel", + description: "", + type: "registry:ui", + registryDependencies: ["button"], + files: [ + { + path: "registry/ui/carousel.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/carousel.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + chart: { + name: "chart", + description: "", + type: "registry:ui", + registryDependencies: ["card"], + files: [ + { + path: "registry/ui/chart.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/chart.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + checkbox: { + name: "checkbox", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/checkbox.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/checkbox.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + collapsible: { + name: "collapsible", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/collapsible.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/collapsible.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + command: { + name: "command", + description: "", + type: "registry:ui", + registryDependencies: ["dialog"], + files: [ + { + path: "registry/ui/command.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/command.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "context-menu": { + name: "context-menu", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/context-menu.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/context-menu.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + dialog: { + name: "dialog", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/dialog.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/dialog.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + drawer: { + name: "drawer", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/drawer.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/drawer.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "dropdown-menu": { + name: "dropdown-menu", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/dropdown-menu.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/dropdown-menu.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + form: { + name: "form", + description: "", + type: "registry:ui", + registryDependencies: ["button", "label"], + files: [ + { + path: "registry/ui/form.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/form.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "hover-card": { + name: "hover-card", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/hover-card.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/hover-card.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + input: { + name: "input", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/input.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/input.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "input-otp": { + name: "input-otp", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/input-otp.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/input-otp.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + label: { + name: "label", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/label.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/label.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + menubar: { + name: "menubar", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/menubar.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/menubar.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "navigation-menu": { + name: "navigation-menu", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/navigation-menu.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/navigation-menu.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + pagination: { + name: "pagination", + description: "", + type: "registry:ui", + registryDependencies: ["button"], + files: [ + { + path: "registry/ui/pagination.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/pagination.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + popover: { + name: "popover", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/popover.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/popover.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + progress: { + name: "progress", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/progress.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/progress.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "radio-group": { + name: "radio-group", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/radio-group.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/radio-group.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + resizable: { + name: "resizable", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/resizable.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/resizable.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "scroll-area": { + name: "scroll-area", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/scroll-area.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/scroll-area.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + select: { + name: "select", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/select.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/select.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + separator: { + name: "separator", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/separator.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/separator.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + sheet: { + name: "sheet", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/sheet.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/sheet.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + sidebar: { + name: "sidebar", + description: "", + type: "registry:ui", + registryDependencies: [ + "button", + "separator", + "sheet", + "tooltip", + "input", + "use-mobile", + "skeleton", + ], + files: [ + { + path: "registry/ui/sidebar.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/sidebar.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + skeleton: { + name: "skeleton", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/skeleton.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/skeleton.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + slider: { + name: "slider", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/slider.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/slider.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + sonner: { + name: "sonner", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/sonner.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/sonner.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + switch: { + name: "switch", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/switch.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/switch.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + table: { + name: "table", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/table.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/table.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + tabs: { + name: "tabs", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/tabs.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/tabs.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + textarea: { + name: "textarea", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/textarea.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/textarea.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + toggle: { + name: "toggle", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/toggle.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/toggle.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "toggle-group": { + name: "toggle-group", + description: "", + type: "registry:ui", + registryDependencies: ["toggle"], + files: [ + { + path: "registry/ui/toggle-group.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/toggle-group.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + tooltip: { + name: "tooltip", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/ui/tooltip.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/ui/tooltip.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "sidebar-01": { + name: "sidebar-01", + description: "A simple sidebar with navigation grouped by section.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "label", + "dropdown-menu", + ], + files: [ + { + path: "registry/blocks/sidebar-01/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/blocks/sidebar-01/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-01/components/search-form.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-01/components/version-switcher.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/sidebar-01/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "sidebar-02": { + name: "sidebar-02", + description: "A sidebar with collapsible sections.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "label", + "dropdown-menu", + ], + files: [ + { + path: "registry/blocks/sidebar-02/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/blocks/sidebar-02/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-02/components/search-form.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-02/components/version-switcher.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/sidebar-02/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "sidebar-03": { + name: "sidebar-03", + description: "A sidebar with submenus.", + type: "registry:block", + registryDependencies: ["sidebar", "breadcrumb"], + files: [ + { + path: "registry/blocks/sidebar-03/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/blocks/sidebar-03/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/sidebar-03/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "sidebar-04": { + name: "sidebar-04", + description: "A floating sidebar with submenus.", + type: "registry:block", + registryDependencies: ["sidebar", "breadcrumb", "separator"], + files: [ + { + path: "registry/blocks/sidebar-04/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/blocks/sidebar-04/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/sidebar-04/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "sidebar-05": { + name: "sidebar-05", + description: "A sidebar with collapsible submenus.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "label", + "collapsible", + ], + files: [ + { + path: "registry/blocks/sidebar-05/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/blocks/sidebar-05/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-05/components/search-form.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/sidebar-05/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "sidebar-06": { + name: "sidebar-06", + description: "A sidebar with submenus as dropdowns.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "card", + "dropdown-menu", + ], + files: [ + { + path: "registry/blocks/sidebar-06/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/blocks/sidebar-06/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-06/components/nav-main.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-06/components/sidebar-opt-in-form.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/sidebar-06/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "sidebar-07": { + name: "sidebar-07", + description: "A sidebar that collapses to icons.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "collapsible", + "dropdown-menu", + "avatar", + ], + files: [ + { + path: "registry/blocks/sidebar-07/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/blocks/sidebar-07/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-07/components/nav-main.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-07/components/nav-projects.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-07/components/nav-user.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-07/components/team-switcher.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/sidebar-07/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "sidebar-08": { + name: "sidebar-08", + description: "An inset sidebar with secondary navigation.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "collapsible", + "dropdown-menu", + "avatar", + ], + files: [ + { + path: "registry/blocks/sidebar-08/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/blocks/sidebar-08/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-08/components/nav-main.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-08/components/nav-projects.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-08/components/nav-secondary.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-08/components/nav-user.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/sidebar-08/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "sidebar-09": { + name: "sidebar-09", + description: "Collapsible nested sidebars.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "collapsible", + "dropdown-menu", + "avatar", + "switch", + ], + files: [ + { + path: "registry/blocks/sidebar-09/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/blocks/sidebar-09/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-09/components/nav-user.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/sidebar-09/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "sidebar-10": { + name: "sidebar-10", + description: "A sidebar in a popover.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "popover", + "collapsible", + "dropdown-menu", + ], + files: [ + { + path: "registry/blocks/sidebar-10/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/blocks/sidebar-10/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-10/components/nav-actions.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-10/components/nav-favorites.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-10/components/nav-main.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-10/components/nav-secondary.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-10/components/nav-workspaces.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-10/components/team-switcher.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/sidebar-10/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "sidebar-11": { + name: "sidebar-11", + description: "A sidebar with a collapsible file tree.", + type: "registry:block", + registryDependencies: ["sidebar", "breadcrumb", "separator", "collapsible"], + files: [ + { + path: "registry/blocks/sidebar-11/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/blocks/sidebar-11/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/sidebar-11/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "sidebar-12": { + name: "sidebar-12", + description: "A sidebar with a calendar.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "collapsible", + "calendar", + "dropdown-menu", + "avatar", + ], + files: [ + { + path: "registry/blocks/sidebar-12/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/blocks/sidebar-12/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-12/components/calendars.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-12/components/date-picker.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-12/components/nav-user.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/sidebar-12/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "sidebar-13": { + name: "sidebar-13", + description: "A sidebar in a dialog.", + type: "registry:block", + registryDependencies: ["sidebar", "breadcrumb", "button", "dialog"], + files: [ + { + path: "registry/blocks/sidebar-13/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/blocks/sidebar-13/components/settings-dialog.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/sidebar-13/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "sidebar-14": { + name: "sidebar-14", + description: "A sidebar on the right.", + type: "registry:block", + registryDependencies: ["sidebar", "breadcrumb"], + files: [ + { + path: "registry/blocks/sidebar-14/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/blocks/sidebar-14/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/sidebar-14/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "sidebar-15": { + name: "sidebar-15", + description: "A left and right sidebar.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "popover", + "collapsible", + "dropdown-menu", + "calendar", + "avatar", + ], + files: [ + { + path: "registry/blocks/sidebar-15/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/blocks/sidebar-15/components/calendars.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-15/components/date-picker.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-15/components/nav-favorites.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-15/components/nav-main.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-15/components/nav-secondary.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-15/components/nav-user.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-15/components/nav-workspaces.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-15/components/sidebar-left.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-15/components/sidebar-right.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-15/components/team-switcher.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/sidebar-15/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "sidebar-16": { + name: "sidebar-16", + description: "A sidebar with a sticky site header.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "collapsible", + "dropdown-menu", + "avatar", + "button", + ], + files: [ + { + path: "registry/blocks/sidebar-16/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/blocks/sidebar-16/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-16/components/nav-main.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-16/components/nav-projects.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-16/components/nav-secondary.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-16/components/nav-user.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-16/components/search-form.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/blocks/sidebar-16/components/site-header.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/sidebar-16/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "login-01": { + name: "login-01", + description: "A simple login form.", + type: "registry:block", + registryDependencies: ["button", "card", "input", "label"], + files: [ + { + path: "registry/blocks/login-01/page.tsx", + type: "registry:page", + target: "app/login/page.tsx", + }, + { + path: "registry/blocks/login-01/components/login-form.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/login-01/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "login-02": { + name: "login-02", + description: "A two column login page with a cover image.", + type: "registry:block", + registryDependencies: ["button", "card", "input", "label"], + files: [ + { + path: "registry/blocks/login-02/page.tsx", + type: "registry:page", + target: "app/login/page.tsx", + }, + { + path: "registry/blocks/login-02/components/login-form.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/login-02/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "login-03": { + name: "login-03", + description: "A login page with a muted background color.", + type: "registry:block", + registryDependencies: ["button", "card", "input", "label"], + files: [ + { + path: "registry/blocks/login-03/page.tsx", + type: "registry:page", + target: "app/login/page.tsx", + }, + { + path: "registry/blocks/login-03/components/login-form.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/login-03/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "login-04": { + name: "login-04", + description: "A login page with form and image.", + type: "registry:block", + registryDependencies: ["button", "card", "input", "label"], + files: [ + { + path: "registry/blocks/login-04/page.tsx", + type: "registry:page", + target: "app/login/page.tsx", + }, + { + path: "registry/blocks/login-04/components/login-form.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/login-04/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "login-05": { + name: "login-05", + description: "A simple email-only login page.", + type: "registry:block", + registryDependencies: ["button", "card", "input", "label"], + files: [ + { + path: "registry/blocks/login-05/page.tsx", + type: "registry:page", + target: "app/login/page.tsx", + }, + { + path: "registry/blocks/login-05/components/login-form.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/blocks/login-05/page.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-area-axes": { + name: "chart-area-axes", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-area-axes.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-area-axes.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-area-default": { + name: "chart-area-default", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-area-default.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-area-default.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-area-gradient": { + name: "chart-area-gradient", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-area-gradient.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-area-gradient.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-area-icons": { + name: "chart-area-icons", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-area-icons.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-area-icons.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-area-interactive": { + name: "chart-area-interactive", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart", "select"], + files: [ + { + path: "registry/charts/chart-area-interactive.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-area-interactive.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-area-legend": { + name: "chart-area-legend", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-area-legend.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-area-legend.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-area-linear": { + name: "chart-area-linear", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-area-linear.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-area-linear.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-area-stacked-expand": { + name: "chart-area-stacked-expand", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-area-stacked-expand.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/charts/chart-area-stacked-expand.tsx" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-area-stacked": { + name: "chart-area-stacked", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-area-stacked.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-area-stacked.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-area-step": { + name: "chart-area-step", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-area-step.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-area-step.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-bar-active": { + name: "chart-bar-active", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-bar-active.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-bar-active.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-bar-default": { + name: "chart-bar-default", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-bar-default.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-bar-default.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-bar-horizontal": { + name: "chart-bar-horizontal", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-bar-horizontal.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-bar-horizontal.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-bar-interactive": { + name: "chart-bar-interactive", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-bar-interactive.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-bar-interactive.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-bar-label-custom": { + name: "chart-bar-label-custom", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-bar-label-custom.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-bar-label-custom.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-bar-label": { + name: "chart-bar-label", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-bar-label.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-bar-label.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-bar-mixed": { + name: "chart-bar-mixed", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-bar-mixed.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-bar-mixed.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-bar-multiple": { + name: "chart-bar-multiple", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-bar-multiple.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-bar-multiple.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-bar-negative": { + name: "chart-bar-negative", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-bar-negative.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-bar-negative.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-bar-stacked": { + name: "chart-bar-stacked", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-bar-stacked.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-bar-stacked.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-line-default": { + name: "chart-line-default", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-line-default.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-line-default.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-line-dots-colors": { + name: "chart-line-dots-colors", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-line-dots-colors.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-line-dots-colors.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-line-dots-custom": { + name: "chart-line-dots-custom", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-line-dots-custom.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-line-dots-custom.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-line-dots": { + name: "chart-line-dots", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-line-dots.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-line-dots.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-line-interactive": { + name: "chart-line-interactive", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-line-interactive.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-line-interactive.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-line-label-custom": { + name: "chart-line-label-custom", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-line-label-custom.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-line-label-custom.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-line-label": { + name: "chart-line-label", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-line-label.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-line-label.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-line-linear": { + name: "chart-line-linear", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-line-linear.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-line-linear.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-line-multiple": { + name: "chart-line-multiple", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-line-multiple.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-line-multiple.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-line-step": { + name: "chart-line-step", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-line-step.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-line-step.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-pie-donut-active": { + name: "chart-pie-donut-active", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-pie-donut-active.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-pie-donut-active.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-pie-donut-text": { + name: "chart-pie-donut-text", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-pie-donut-text.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-pie-donut-text.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-pie-donut": { + name: "chart-pie-donut", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-pie-donut.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-pie-donut.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-pie-interactive": { + name: "chart-pie-interactive", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-pie-interactive.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-pie-interactive.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-pie-label-custom": { + name: "chart-pie-label-custom", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-pie-label-custom.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-pie-label-custom.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-pie-label-list": { + name: "chart-pie-label-list", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-pie-label-list.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-pie-label-list.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-pie-label": { + name: "chart-pie-label", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-pie-label.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-pie-label.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-pie-legend": { + name: "chart-pie-legend", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-pie-legend.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-pie-legend.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-pie-separator-none": { + name: "chart-pie-separator-none", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-pie-separator-none.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-pie-separator-none.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-pie-simple": { + name: "chart-pie-simple", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-pie-simple.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-pie-simple.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-pie-stacked": { + name: "chart-pie-stacked", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-pie-stacked.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-pie-stacked.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-radar-default": { + name: "chart-radar-default", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-radar-default.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-radar-default.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-radar-dots": { + name: "chart-radar-dots", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-radar-dots.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-radar-dots.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-radar-grid-circle-fill": { + name: "chart-radar-grid-circle-fill", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-radar-grid-circle-fill.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/charts/chart-radar-grid-circle-fill.tsx" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-radar-grid-circle-no-lines": { + name: "chart-radar-grid-circle-no-lines", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-radar-grid-circle-no-lines.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/charts/chart-radar-grid-circle-no-lines.tsx" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-radar-grid-circle": { + name: "chart-radar-grid-circle", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-radar-grid-circle.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-radar-grid-circle.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-radar-grid-custom": { + name: "chart-radar-grid-custom", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-radar-grid-custom.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-radar-grid-custom.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-radar-grid-fill": { + name: "chart-radar-grid-fill", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-radar-grid-fill.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-radar-grid-fill.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-radar-grid-none": { + name: "chart-radar-grid-none", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-radar-grid-none.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-radar-grid-none.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-radar-icons": { + name: "chart-radar-icons", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-radar-icons.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-radar-icons.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-radar-label-custom": { + name: "chart-radar-label-custom", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-radar-label-custom.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-radar-label-custom.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-radar-legend": { + name: "chart-radar-legend", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-radar-legend.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-radar-legend.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-radar-lines-only": { + name: "chart-radar-lines-only", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-radar-lines-only.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-radar-lines-only.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-radar-multiple": { + name: "chart-radar-multiple", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-radar-multiple.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-radar-multiple.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-radar-radius": { + name: "chart-radar-radius", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-radar-radius.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-radar-radius.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-radial-grid": { + name: "chart-radial-grid", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-radial-grid.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-radial-grid.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-radial-label": { + name: "chart-radial-label", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-radial-label.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-radial-label.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-radial-shape": { + name: "chart-radial-shape", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-radial-shape.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-radial-shape.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-radial-simple": { + name: "chart-radial-simple", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-radial-simple.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-radial-simple.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-radial-stacked": { + name: "chart-radial-stacked", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-radial-stacked.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-radial-stacked.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-radial-text": { + name: "chart-radial-text", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-radial-text.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-radial-text.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-tooltip-default": { + name: "chart-tooltip-default", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-tooltip-default.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-tooltip-default.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-tooltip-indicator-line": { + name: "chart-tooltip-indicator-line", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-tooltip-indicator-line.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/charts/chart-tooltip-indicator-line.tsx" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-tooltip-indicator-none": { + name: "chart-tooltip-indicator-none", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-tooltip-indicator-none.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/charts/chart-tooltip-indicator-none.tsx" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-tooltip-label-none": { + name: "chart-tooltip-label-none", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-tooltip-label-none.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-tooltip-label-none.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-tooltip-label-custom": { + name: "chart-tooltip-label-custom", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-tooltip-label-custom.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/charts/chart-tooltip-label-custom.tsx" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-tooltip-label-formatter": { + name: "chart-tooltip-label-formatter", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-tooltip-label-formatter.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/charts/chart-tooltip-label-formatter.tsx" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-tooltip-formatter": { + name: "chart-tooltip-formatter", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-tooltip-formatter.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-tooltip-formatter.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-tooltip-icons": { + name: "chart-tooltip-icons", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-tooltip-icons.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-tooltip-icons.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "chart-tooltip-advanced": { + name: "chart-tooltip-advanced", + description: "", + type: "registry:block", + registryDependencies: ["card", "chart"], + files: [ + { + path: "registry/charts/chart-tooltip-advanced.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/charts/chart-tooltip-advanced.tsx") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, + "use-mobile": { + name: "use-mobile", + description: "", + type: "registry:hook", + registryDependencies: undefined, + files: [ + { + path: "registry/hooks/use-mobile.ts", + type: "registry:hook", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/hooks/use-mobile.ts") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || item.name + return { default: mod.default || mod[exportName] } + }), + meta: undefined, + }, +} diff --git a/apps/v4/app/(app)/charts/charts.tsx b/apps/v4/app/(app)/charts/charts.tsx new file mode 100644 index 0000000000..589f5b87d8 --- /dev/null +++ b/apps/v4/app/(app)/charts/charts.tsx @@ -0,0 +1,76 @@ +export { ChartAreaDefault } from "@/registry/charts/chart-area-default" +export { ChartAreaLinear } from "@/registry/charts/chart-area-linear" +export { ChartAreaStep } from "@/registry/charts/chart-area-step" +export { ChartAreaLegend } from "@/registry/charts/chart-area-legend" +export { ChartAreaStacked } from "@/registry/charts/chart-area-stacked" +export { ChartAreaStackedExpand } from "@/registry/charts/chart-area-stacked-expand" +export { ChartAreaIcons } from "@/registry/charts/chart-area-icons" +export { ChartAreaGradient } from "@/registry/charts/chart-area-gradient" +export { ChartAreaAxes } from "@/registry/charts/chart-area-axes" +export { ChartAreaInteractive } from "@/registry/charts/chart-area-interactive" + +export { ChartBarDefault } from "@/registry/charts/chart-bar-default" +export { ChartBarHorizontal } from "@/registry/charts/chart-bar-horizontal" +export { ChartBarMultiple } from "@/registry/charts/chart-bar-multiple" +export { ChartBarStacked } from "@/registry/charts/chart-bar-stacked" +export { ChartBarLabel } from "@/registry/charts/chart-bar-label" +export { ChartBarLabelCustom } from "@/registry/charts/chart-bar-label-custom" +export { ChartBarMixed } from "@/registry/charts/chart-bar-mixed" +export { ChartBarActive } from "@/registry/charts/chart-bar-active" +export { ChartBarNegative } from "@/registry/charts/chart-bar-negative" +export { ChartBarInteractive } from "@/registry/charts/chart-bar-interactive" + +export { ChartLineDefault } from "@/registry/charts/chart-line-default" +export { ChartLineLinear } from "@/registry/charts/chart-line-linear" +export { ChartLineStep } from "@/registry/charts/chart-line-step" +export { ChartLineMultiple } from "@/registry/charts/chart-line-multiple" +export { ChartLineDots } from "@/registry/charts/chart-line-dots" +export { ChartLineDotsCustom } from "@/registry/charts/chart-line-dots-custom" +export { ChartLineDotsColors } from "@/registry/charts/chart-line-dots-colors" +export { ChartLineLabel } from "@/registry/charts/chart-line-label" +export { ChartLineLabelCustom } from "@/registry/charts/chart-line-label-custom" +export { ChartLineInteractive } from "@/registry/charts/chart-line-interactive" + +export { ChartPieSimple } from "@/registry/charts/chart-pie-simple" +export { ChartPieSeparatorNone } from "@/registry/charts/chart-pie-separator-none" +export { ChartPieLabel } from "@/registry/charts/chart-pie-label" +export { ChartPieLabelCustom } from "@/registry/charts/chart-pie-label-custom" +export { ChartPieLabelList } from "@/registry/charts/chart-pie-label-list" +export { ChartPieLegend } from "@/registry/charts/chart-pie-legend" +export { ChartPieDonut } from "@/registry/charts/chart-pie-donut" +export { ChartPieDonutActive } from "@/registry/charts/chart-pie-donut-active" +export { ChartPieDonutText } from "@/registry/charts/chart-pie-donut-text" +export { ChartPieStacked } from "@/registry/charts/chart-pie-stacked" +export { ChartPieInteractive } from "@/registry/charts/chart-pie-interactive" + +export { ChartRadarDefault } from "@/registry/charts/chart-radar-default" +export { ChartRadarDots } from "@/registry/charts/chart-radar-dots" +export { ChartRadarLinesOnly } from "@/registry/charts/chart-radar-lines-only" +export { ChartRadarLabelCustom } from "@/registry/charts/chart-radar-label-custom" +export { ChartRadarGridCustom } from "@/registry/charts/chart-radar-grid-custom" +export { ChartRadarGridNone } from "@/registry/charts/chart-radar-grid-none" +export { ChartRadarGridCircle } from "@/registry/charts/chart-radar-grid-circle" +export { ChartRadarGridCircleNoLines } from "@/registry/charts/chart-radar-grid-circle-no-lines" +export { ChartRadarGridCircleFill } from "@/registry/charts/chart-radar-grid-circle-fill" +export { ChartRadarGridFill } from "@/registry/charts/chart-radar-grid-fill" +export { ChartRadarMultiple } from "@/registry/charts/chart-radar-multiple" +export { ChartRadarLegend } from "@/registry/charts/chart-radar-legend" +export { ChartRadarIcons } from "@/registry/charts/chart-radar-icons" +export { ChartRadarRadius } from "@/registry/charts/chart-radar-radius" + +export { ChartRadialSimple } from "@/registry/charts/chart-radial-simple" +export { ChartRadialLabel } from "@/registry/charts/chart-radial-label" +export { ChartRadialGrid } from "@/registry/charts/chart-radial-grid" +export { ChartRadialText } from "@/registry/charts/chart-radial-text" +export { ChartRadialShape } from "@/registry/charts/chart-radial-shape" +export { ChartRadialStacked } from "@/registry/charts/chart-radial-stacked" + +export { ChartTooltipDefault } from "@/registry/charts/chart-tooltip-default" +export { ChartTooltipIndicatorLine } from "@/registry/charts/chart-tooltip-indicator-line" +export { ChartTooltipIndicatorNone } from "@/registry/charts/chart-tooltip-indicator-none" +export { ChartTooltipLabelCustom } from "@/registry/charts/chart-tooltip-label-custom" +export { ChartTooltipLabelFormatter } from "@/registry/charts/chart-tooltip-label-formatter" +export { ChartTooltipLabelNone } from "@/registry/charts/chart-tooltip-label-none" +export { ChartTooltipFormatter } from "@/registry/charts/chart-tooltip-formatter" +export { ChartTooltipIcons } from "@/registry/charts/chart-tooltip-icons" +export { ChartTooltipAdvanced } from "@/registry/charts/chart-tooltip-advanced" diff --git a/apps/v4/app/(app)/charts/page.tsx b/apps/v4/app/(app)/charts/page.tsx new file mode 100644 index 0000000000..b1dba32bb8 --- /dev/null +++ b/apps/v4/app/(app)/charts/page.tsx @@ -0,0 +1,20 @@ +import { ComponentWrapper } from "@/components/component-wrapper" +import * as Charts from "@/app/(app)/charts/charts" + +export default function ChartsPage() { + return ( +
+ {Object.entries(Charts) + .sort() + .map(([key, Component]) => ( + + + + ))} +
+ ) +} diff --git a/apps/v4/app/(app)/layout.tsx b/apps/v4/app/(app)/layout.tsx new file mode 100644 index 0000000000..27db48a725 --- /dev/null +++ b/apps/v4/app/(app)/layout.tsx @@ -0,0 +1,57 @@ +import Link from "next/link" + +import { AppSidebar } from "@/components/app-sidebar" +import { ModeSwitcher } from "@/components/mode-switcher" +import { + NavigationMenu, + NavigationMenuItem, + NavigationMenuLink, + NavigationMenuList, +} from "@/registry/ui/navigation-menu" +import { Separator } from "@/registry/ui/separator" +import { + SidebarInset, + SidebarProvider, + SidebarTrigger, +} from "@/registry/ui/sidebar" + +export default function AppLayout({ + children, +}: Readonly<{ + children: React.ReactNode +}>) { + return ( + +
+
+ + + + + + + Home + + + + + Charts + + + + +
+ +
+
+
+
+ + {children} +
+
+ ) +} diff --git a/apps/v4/app/(app)/page.tsx b/apps/v4/app/(app)/page.tsx new file mode 100644 index 0000000000..cccd184bb3 --- /dev/null +++ b/apps/v4/app/(app)/page.tsx @@ -0,0 +1,196 @@ +import { AccordionDemo } from "@/components/accordion-demo" +import { AlertDemo } from "@/components/alert-demo" +import { AlertDialogDemo } from "@/components/alert-dialog-demo" +import { AspectRatioDemo } from "@/components/aspect-ratio-demo" +import { AvatarDemo } from "@/components/avatar-demo" +import { BadgeDemo } from "@/components/badge-demo" +import { BreadcrumbDemo } from "@/components/breadcrumb-demo" +import { ButtonDemo } from "@/components/button-demo" +import { CalendarDemo } from "@/components/calendar-demo" +import { CardDemo } from "@/components/card-demo" +import { CarouselDemo } from "@/components/carousel-demo" +import { ChartDemo } from "@/components/chart-demo" +import { CheckboxDemo } from "@/components/checkbox-demo" +import { CollapsibleDemo } from "@/components/collapsible-demo" +import { ComboboxDemo } from "@/components/combobox-demo" +import { CommandDemo } from "@/components/command-demo" +import { ComponentWrapper } from "@/components/component-wrapper" +import { ContextMenuDemo } from "@/components/context-menu-demo" +import { DatePickerDemo } from "@/components/date-picker-demo" +import { DialogDemo } from "@/components/dialog-demo" +import { DrawerDemo } from "@/components/drawer-demo" +import { DropdownMenuDemo } from "@/components/dropdown-menu-demo" +import { FormDemo } from "@/components/form-demo" +import { HoverCardDemo } from "@/components/hover-card-demo" +import { InputDemo } from "@/components/input-demo" +import { InputOTPDemo } from "@/components/input-otp-demo" +import { LabelDemo } from "@/components/label-demo" +import { MenubarDemo } from "@/components/menubar-demo" +import { NavigationMenuDemo } from "@/components/navigation-menu-demo" +import { PaginationDemo } from "@/components/pagination-demo" +import { PopoverDemo } from "@/components/popover-demo" +import { ProgressDemo } from "@/components/progress-demo" +import { RadioGroupDemo } from "@/components/radio-group-demo" +import { ResizableDemo } from "@/components/resizable-demo" +import { ScrollAreaDemo } from "@/components/scroll-area-demo" +import { SelectDemo } from "@/components/select-demo" +import { SeparatorDemo } from "@/components/separator-demo" +import { SheetDemo } from "@/components/sheet-demo" +import { SkeletonDemo } from "@/components/skeleton-demo" +import { SliderDemo } from "@/components/slider-demo" +import { SonnerDemo } from "@/components/sonner-demo" +import { SwitchDemo } from "@/components/switch-demo" +import { TableDemo } from "@/components/table-demo" +import { TabsDemo } from "@/components/tabs-demo" +import { TextareaDemo } from "@/components/textarea-demo" +import { ToggleDemo } from "@/components/toggle-demo" +import { ToggleGroupDemo } from "@/components/toggle-group-demo" +import { TooltipDemo } from "@/components/tooltip-demo" + +export default function SinkPage() { + return ( +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ ) +} diff --git a/apps/v4/app/(view)/view/[name]/page.tsx b/apps/v4/app/(view)/view/[name]/page.tsx new file mode 100644 index 0000000000..2edeb2516c --- /dev/null +++ b/apps/v4/app/(view)/view/[name]/page.tsx @@ -0,0 +1,96 @@ +import * as React from "react" +import { Metadata } from "next" +import { notFound } from "next/navigation" +import { registryItemSchema } from "shadcn/registry" +import { z } from "zod" + +import { getRegistryComponent, getRegistryItem } from "@/lib/registry" +import { absoluteUrl, cn } from "@/lib/utils" +import { siteConfig } from "@/www/config/site" + +const getCachedRegistryItem = React.cache(async (name: string) => { + return await getRegistryItem(name) +}) + +export async function generateMetadata({ + params, +}: { + params: Promise<{ + name: string + }> +}): Promise { + const { name } = await params + const item = await getCachedRegistryItem(name) + + if (!item) { + return {} + } + + const title = item.name + const description = item.description + + return { + title: `${item.name}${item.description ? ` - ${item.description}` : ""}`, + description, + openGraph: { + title, + description, + type: "article", + url: absoluteUrl(`/blocks/${item.name}`), + images: [ + { + url: siteConfig.ogImage, + width: 1200, + height: 630, + alt: siteConfig.name, + }, + ], + }, + twitter: { + card: "summary_large_image", + title, + description, + images: [siteConfig.ogImage], + creator: "@shadcn", + }, + } +} + +export const dynamicParams = false + +export async function generateStaticParams() { + const { Index } = await import("@/__registry__") + const index = z.record(registryItemSchema).parse(Index) + + return Object.values(index) + .filter((block) => + ["registry:block", "registry:component"].includes(block.type) + ) + .map((block) => ({ + name: block.name, + })) +} + +export default async function BlockPage({ + params, +}: { + params: Promise<{ + name: string + }> +}) { + const { name } = await params + const item = await getCachedRegistryItem(name) + const Component = getRegistryComponent(name) + + if (!item || !Component) { + return notFound() + } + + return ( + <> +
+ +
+ + ) +} diff --git a/apps/v4/app/favicon.ico b/apps/v4/app/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..718d6fea4835ec2d246af9800eddb7ffb276240c GIT binary patch literal 25931 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 LrJugUA?W`A8`#=m literal 0 HcmV?d00001 diff --git a/apps/v4/app/globals.css b/apps/v4/app/globals.css new file mode 100644 index 0000000000..b1df394a45 --- /dev/null +++ b/apps/v4/app/globals.css @@ -0,0 +1,144 @@ +@import "tailwindcss"; + +@plugin "tailwindcss-animate"; + +@custom-variant dark (&:is(.dark *)); + +:root { + --background: hsl(0 0% 100%); + --foreground: hsl(240 10% 3.9%); + --card: hsl(0 0% 100%); + --card-foreground: hsl(240 10% 3.9%); + --popover: hsl(0 0% 100%); + --popover-foreground: hsl(240 10% 3.9%); + --primary: hsl(240 5.9% 10%); + --primary-foreground: hsl(0 0% 98%); + --secondary: hsl(240 4.8% 95.9%); + --secondary-foreground: hsl(240 5.9% 10%); + --muted: hsl(240 4.8% 95.9%); + --muted-foreground: hsl(240 3.8% 46.1%); + --accent: hsl(240 4.8% 95.9%); + --accent-foreground: hsl(240 5.9% 10%); + --destructive: hsl(0 84.2% 60.2%); + --destructive-foreground: hsl(0 0% 98%); + --border: hsl(240 5.9% 90%); + --input: hsl(240 5.9% 90%); + --ring: hsl(240 10% 3.9%); + --chart-1: hsl(12 76% 61%); + --chart-2: hsl(173 58% 39%); + --chart-3: hsl(197 37% 24%); + --chart-4: hsl(43 74% 66%); + --chart-5: hsl(27 87% 67%); + --radius: 0.65rem; + --sidebar-background: hsl(0 0% 98%); + --sidebar-foreground: hsl(240 5.3% 26.1%); + --sidebar-primary: hsl(240 5.9% 10%); + --sidebar-primary-foreground: hsl(0 0% 98%); + --sidebar-accent: hsl(240 4.8% 95.9%); + --sidebar-accent-foreground: hsl(240 5.9% 10%); + --sidebar-border: hsl(220 13% 91%); + --sidebar-ring: hsl(217.2 91.2% 59.8%); +} + +.dark { + --background: hsl(240 10% 3.9%); + --foreground: hsl(0 0% 98%); + --card: hsl(240 10% 3.9%); + --card-foreground: hsl(0 0% 98%); + --popover: hsl(240 10% 3.9%); + --popover-foreground: hsl(0 0% 98%); + --primary: hsl(0 0% 98%); + --primary-foreground: hsl(240 5.9% 10%); + --secondary: hsl(240 3.7% 15.9%); + --secondary-foreground: hsl(0 0% 98%); + --muted: hsl(240 3.7% 15.9%); + --muted-foreground: hsl(240 5% 64.9%); + --accent: hsl(240 3.7% 15.9%); + --accent-foreground: hsl(0 0% 98%); + --destructive: hsl(0 62.8% 30.6%); + --destructive-foreground: hsl(0 0% 98%); + --border: hsl(240 3.7% 15.9%); + --input: hsl(240 3.7% 15.9%); + --ring: hsl(240 4.9% 83.9%); + --chart-1: hsl(220 70% 50%); + --chart-2: hsl(160 60% 45%); + --chart-3: hsl(30 80% 55%); + --chart-4: hsl(280 65% 60%); + --chart-5: hsl(340 75% 55%); + --sidebar-background: hsl(240 5.9% 10%); + --sidebar-foreground: hsl(240 4.8% 95.9%); + --sidebar-primary: hsl(224.3 76.3% 48%); + --sidebar-primary-foreground: hsl(0 0% 100%); + --sidebar-accent: hsl(240 3.7% 15.9%); + --sidebar-accent-foreground: hsl(240 4.8% 95.9%); + --sidebar-border: hsl(240 3.7% 15.9%); + --sidebar-ring: hsl(217.2 91.2% 59.8%); +} + +@theme inline { + --color-background: var(--background); + --color-foreground: var(--foreground); + --color-card: var(--card); + --color-card-foreground: var(--card-foreground); + --color-popover: var(--popover); + --color-popover-foreground: var(--popover-foreground); + --color-primary: var(--primary); + --color-primary-foreground: var(--primary-foreground); + --color-secondary: var(--secondary); + --color-secondary-foreground: var(--secondary-foreground); + --color-muted: var(--muted); + --color-muted-foreground: var(--muted-foreground); + --color-accent: var(--accent); + --color-accent-foreground: var(--accent-foreground); + --color-destructive: var(--destructive); + --color-destructive-foreground: var(--destructive-foreground); + --color-border: var(--border); + --color-input: var(--input); + --color-ring: var(--ring); + --color-chart-1: var(--chart-1); + --color-chart-2: var(--chart-2); + --color-chart-3: var(--chart-3); + --color-chart-4: var(--chart-4); + --color-chart-5: var(--chart-5); + --radius-sm: calc(var(--radius) - 4px); + --radius-md: calc(var(--radius) - 2px); + --radius-lg: var(--radius); + --radius-xl: calc(var(--radius) + 4px); + --color-sidebar-ring: var(--sidebar-ring); + --color-sidebar-border: var(--sidebar-border); + --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); + --color-sidebar-accent: var(--sidebar-accent); + --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); + --color-sidebar-primary: var(--sidebar-primary); + --color-sidebar-foreground: var(--sidebar-foreground); + --color-sidebar: var(--sidebar-background); + --animate-accordion-down: accordion-down 0.2s ease-out; + --animate-accordion-up: accordion-up 0.2s ease-out; + + @keyframes accordion-down { + from { + height: 0; + } + to { + height: var(--radix-accordion-content-height); + } + } + + @keyframes accordion-up { + from { + height: var(--radix-accordion-content-height); + } + to { + height: 0; + } + } +} + +@layer base { + * { + @apply border-border; + } + body { + @apply bg-background text-foreground; + } +} diff --git a/apps/v4/app/layout.tsx b/apps/v4/app/layout.tsx new file mode 100644 index 0000000000..f779a134ee --- /dev/null +++ b/apps/v4/app/layout.tsx @@ -0,0 +1,116 @@ +import type { Metadata, Viewport } from "next" +import { GeistMono } from "geist/font/mono" +import { GeistSans } from "geist/font/sans" + +import { cn } from "@/lib/utils" +import { ThemeProvider } from "@/components/theme-provider" +import { Toaster } from "@/registry/ui/sonner" +import { siteConfig } from "@/www/config/site" + +import "./globals.css" + +const fontSans = GeistSans + +const fontMono = GeistMono + +const META_THEME_COLORS = { + light: "#ffffff", + dark: "#09090b", +} + +export const metadata: Metadata = { + title: { + default: siteConfig.name, + template: `%s - ${siteConfig.name}`, + }, + metadataBase: new URL(siteConfig.url), + description: siteConfig.description, + keywords: [ + "Next.js", + "React", + "Tailwind CSS", + "Server Components", + "Radix UI", + ], + authors: [ + { + name: "shadcn", + url: "https://shadcn.com", + }, + ], + creator: "shadcn", + openGraph: { + type: "website", + locale: "en_US", + url: siteConfig.url, + title: siteConfig.name, + description: siteConfig.description, + siteName: siteConfig.name, + images: [ + { + url: siteConfig.ogImage, + width: 1200, + height: 630, + alt: siteConfig.name, + }, + ], + }, + twitter: { + card: "summary_large_image", + title: siteConfig.name, + description: siteConfig.description, + images: [siteConfig.ogImage], + creator: "@shadcn", + }, + icons: { + icon: "/favicon.ico", + shortcut: "/favicon-16x16.png", + apple: "/apple-touch-icon.png", + }, + manifest: `${siteConfig.url}/site.webmanifest`, +} + +export const viewport: Viewport = { + themeColor: META_THEME_COLORS.light, +} + +export default function RootLayout({ + children, +}: Readonly<{ + children: React.ReactNode +}>) { + return ( + + +