From 5387bdb15ad9191c1eb2fab58a6bd3255a173661 Mon Sep 17 00:00:00 2001 From: GeneralJerel <85066839+GeneralJerel@users.noreply.github.com> Date: Sun, 19 Apr 2026 19:10:31 -0700 Subject: [PATCH 1/5] feat: port shadcn /create customizer into shadify with CopilotKit App mode Adds a /create route backed by the shadcn design-system customizer: 33 pickers driving URL-synced design params and an inline preview of the selected registry item. Integrates the CopilotKit agent via App mode so users can drive the pickers conversationally (e.g. "make it pink with a serif body font"). Chat at / remains unchanged. - Router: adds react-router-dom v7 with BrowserRouter wrapping / (chat) and /create - URL state: nuqs via its react-router v7 adapter; useDesignSystemSearchParams ported 1:1 with full preset encode/decode round-trip (?preset=b0) - Inline preview: replaces shadcn's iframe/postMessage flow with a scoped DesignSystemProvider that injects CSS vars under [data-design-system-root] so theme tokens do not leak to the chat chrome - Registry: bases/__index__ + all base/radix trees bulk-copied; api.ts ported without server-only; React.lazy chain preserved - Next.js shims: 7 runtime shims (image, link, script, form, navigation, dynamic, font/google) wired via Vite and tsconfig aliases so ~50 ported files do not need hand edits - Keyboard shortcuts preserved: R (randomize), Shift+R (reset), O (open preset), D (preview dark mode), Cmd+P (action menu), Cmd+Z / Cmd+Shift+Z (history) - Agent: AgentState extended with design_params; system prompt updated with full param vocabulary; useDesignSystemCoAgent hook exposes current params via useCopilotReadable and registers updateDesignSystem action that writes URL state; CopilotSidebar mounted on /create for inline chat Co-Authored-By: Claude Opus 4.7 (1M context) --- .gitignore | 3 + apps/agent/main.py | 12 +- apps/ui/package.json | 23 +- apps/ui/src/App.tsx | 38 +- apps/ui/src/components/copy-button.tsx | 120 + apps/ui/src/components/icons.tsx | 207 + apps/ui/src/components/theme-provider.tsx | 54 + apps/ui/src/hooks/use-config.ts | 18 + apps/ui/src/hooks/use-copy-to-clipboard.ts | 79 + apps/ui/src/hooks/use-media-query.tsx | 19 + apps/ui/src/hooks/use-meta-color.ts | 28 + apps/ui/src/hooks/use-mobile.ts | 24 +- apps/ui/src/hooks/use-mounted.ts | 11 + apps/ui/src/lib/config.ts | 42 + apps/ui/src/lib/events.ts | 11 + apps/ui/src/lib/font-definitions.ts | 331 + apps/ui/src/lib/utils.ts | 5 + apps/ui/src/registry/__blocks__.json | 143 + apps/ui/src/registry/base-colors.ts | 9 + apps/ui/src/registry/bases.ts | 29 + apps/ui/src/registry/bases/README.md | 15 + apps/ui/src/registry/bases/__index__.tsx | 9782 +++++++++++++++++ .../registry/bases/base/blocks/_registry.ts | 909 ++ .../dashboard-01/components/app-sidebar.tsx | 280 + .../components/chart-area-interactive.tsx | 299 + .../dashboard-01/components/data-table.tsx | 940 ++ .../dashboard-01/components/nav-documents.tsx | 114 + .../dashboard-01/components/nav-main.tsx | 68 + .../dashboard-01/components/nav-secondary.tsx | 38 + .../dashboard-01/components/nav-user.tsx | 133 + .../dashboard-01/components/section-cards.tsx | 158 + .../dashboard-01/components/site-header.tsx | 17 + .../bases/base/blocks/dashboard-01/data.json | 614 ++ .../bases/base/blocks/dashboard-01/page.tsx | 37 + .../blocks/login-01/components/login-form.tsx | 70 + .../bases/base/blocks/login-01/page.tsx | 11 + .../blocks/login-02/components/login-form.tsx | 65 + .../bases/base/blocks/login-02/page.tsx | 39 + .../blocks/login-03/components/login-form.tsx | 95 + .../bases/base/blocks/login-03/page.tsx | 26 + .../blocks/login-04/components/login-form.tsx | 105 + .../bases/base/blocks/login-04/page.tsx | 11 + .../blocks/login-05/components/login-form.tsx | 85 + .../bases/base/blocks/login-05/page.tsx | 11 + .../preview-02/cards/account-access.tsx | 101 + .../blocks/preview-02/cards/album-card.tsx | 49 + .../blocks/preview-02/cards/card-overview.tsx | 98 + .../preview-02/cards/catalog-toolbar.tsx | 46 + .../preview-02/cards/claimable-balance.tsx | 59 + .../preview-02/cards/contribution-history.tsx | 115 + .../blocks/preview-02/cards/cover-art.tsx | 61 + .../preview-02/cards/dividend-income.tsx | 142 + .../preview-02/cards/empty-connect-bank.tsx | 41 + .../cards/empty-distribute-track.tsx | 41 + .../cards/empty-explore-catalog.tsx | 41 + .../base/blocks/preview-02/cards/faq.tsx | 123 + .../blocks/preview-02/cards/front-door.tsx | 41 + .../preview-02/cards/index-investing.tsx | 37 + .../preview-02/cards/kitchen-island.tsx | 188 + .../blocks/preview-02/cards/loading-card.tsx | 25 + .../blocks/preview-02/cards/new-milestone.tsx | 53 + .../cards/notification-settings.tsx | 106 + .../base/blocks/preview-02/cards/payments.tsx | 175 + .../preview-02/cards/payout-threshold.tsx | 121 + .../blocks/preview-02/cards/power-usage.tsx | 99 + .../blocks/preview-02/cards/preferences.tsx | 109 + .../blocks/preview-02/cards/qr-connect.tsx | 39 + .../preview-02/cards/receiving-method.tsx | 99 + .../preview-02/cards/recent-transactions.tsx | 306 + .../preview-02/cards/release-catalog.tsx | 114 + .../blocks/preview-02/cards/roller-shades.tsx | 80 + .../preview-02/cards/savings-progress.tsx | 105 + .../preview-02/cards/savings-targets.tsx | 154 + .../blocks/preview-02/cards/sidebar-nav.tsx | 236 + .../blocks/preview-02/cards/social-links.tsx | 107 + .../preview-02/cards/stock-performance.tsx | 143 + .../blocks/preview-02/cards/syncing-state.tsx | 35 + .../preview-02/cards/transfer-funds.tsx | 138 + .../preview-02/cards/upcoming-payments.tsx | 68 + .../bases/base/blocks/preview-02/index.tsx | 98 + .../preview/cards/activate-agent-dialog.tsx | 104 + .../blocks/preview/cards/analytics-card.tsx | 76 + .../blocks/preview/cards/anomaly-alert.tsx | 31 + .../blocks/preview/cards/assign-issue.tsx | 127 + .../blocks/preview/cards/bar-chart-card.tsx | 132 + .../blocks/preview/cards/bar-visualizer.tsx | 512 + .../blocks/preview/cards/book-appointment.tsx | 55 + .../blocks/preview/cards/codespaces-card.tsx | 389 + .../preview/cards/contributions-activity.tsx | 64 + .../blocks/preview/cards/contributors.tsx | 64 + .../preview/cards/environment-variables.tsx | 42 + .../blocks/preview/cards/feedback-form.tsx | 69 + .../base/blocks/preview/cards/file-upload.tsx | 49 + .../blocks/preview/cards/github-profile.tsx | 78 + .../preview/cards/icon-preview-grid.tsx | 145 + .../base/blocks/preview/cards/invite-team.tsx | 106 + .../base/blocks/preview/cards/invoice.tsx | 114 + .../blocks/preview/cards/live-waveform.tsx | 555 + .../blocks/preview/cards/no-team-members.tsx | 62 + .../base/blocks/preview/cards/not-found.tsx | 53 + .../preview/cards/observability-card.tsx | 49 + .../blocks/preview/cards/pie-chart-card.tsx | 146 + .../base/blocks/preview/cards/report-bug.tsx | 112 + .../blocks/preview/cards/shipping-address.tsx | 114 + .../base/blocks/preview/cards/shortcuts.tsx | 55 + .../blocks/preview/cards/skeleton-loading.tsx | 28 + .../blocks/preview/cards/sleep-report.tsx | 103 + .../blocks/preview/cards/style-overview.tsx | 79 + .../preview/cards/typography-specimen.tsx | 139 + .../base/blocks/preview/cards/ui-elements.tsx | 201 + .../base/blocks/preview/cards/usage-card.tsx | 133 + .../base/blocks/preview/cards/visitors.tsx | 90 + .../preview/cards/weekly-fitness-summary.tsx | 58 + .../bases/base/blocks/preview/index.tsx | 96 + .../sidebar-01/components/app-sidebar.tsx | 183 + .../sidebar-01/components/search-form.tsx | 35 + .../components/version-switcher.tsx | 84 + .../bases/base/blocks/sidebar-01/page.tsx | 51 + .../sidebar-02/components/app-sidebar.tsx | 223 + .../sidebar-02/components/search-form.tsx | 35 + .../components/version-switcher.tsx | 84 + .../bases/base/blocks/sidebar-02/page.tsx | 51 + .../sidebar-03/components/app-sidebar.tsx | 216 + .../bases/base/blocks/sidebar-03/page.tsx | 55 + .../sidebar-04/components/app-sidebar.tsx | 214 + .../bases/base/blocks/sidebar-04/page.tsx | 57 + .../sidebar-05/components/app-sidebar.tsx | 245 + .../sidebar-05/components/search-form.tsx | 35 + .../bases/base/blocks/sidebar-05/page.tsx | 51 + .../sidebar-06/components/app-sidebar.tsx | 184 + .../blocks/sidebar-06/components/nav-main.tsx | 75 + .../components/sidebar-opt-in-form.tsx | 32 + .../bases/base/blocks/sidebar-06/page.tsx | 51 + .../sidebar-07/components/app-sidebar.tsx | 243 + .../blocks/sidebar-07/components/nav-main.tsx | 74 + .../sidebar-07/components/nav-projects.tsx | 117 + .../blocks/sidebar-07/components/nav-user.tsx | 142 + .../sidebar-07/components/team-switcher.tsx | 111 + .../bases/base/blocks/sidebar-07/page.tsx | 55 + .../sidebar-08/components/app-sidebar.tsx | 249 + .../blocks/sidebar-08/components/nav-main.tsx | 85 + .../sidebar-08/components/nav-projects.tsx | 116 + .../sidebar-08/components/nav-secondary.tsx | 38 + .../blocks/sidebar-08/components/nav-user.tsx | 142 + .../bases/base/blocks/sidebar-08/page.tsx | 55 + .../sidebar-09/components/app-sidebar.tsx | 308 + .../blocks/sidebar-09/components/nav-user.tsx | 143 + .../bases/base/blocks/sidebar-09/page.tsx | 57 + .../sidebar-10/components/app-sidebar.tsx | 359 + .../sidebar-10/components/nav-actions.tsx | 251 + .../sidebar-10/components/nav-favorites.tsx | 133 + .../blocks/sidebar-10/components/nav-main.tsx | 33 + .../sidebar-10/components/nav-secondary.tsx | 41 + .../sidebar-10/components/nav-workspaces.tsx | 98 + .../sidebar-10/components/team-switcher.tsx | 101 + .../bases/base/blocks/sidebar-10/page.tsx | 49 + .../sidebar-11/components/app-sidebar.tsx | 162 + .../bases/base/blocks/sidebar-11/page.tsx | 55 + .../sidebar-12/components/app-sidebar.tsx | 73 + .../sidebar-12/components/calendars.tsx | 84 + .../sidebar-12/components/date-picker.tsx | 26 + .../blocks/sidebar-12/components/nav-user.tsx | 142 + .../bases/base/blocks/sidebar-12/page.tsx | 44 + .../sidebar-13/components/settings-dialog.tsx | 244 + .../bases/base/blocks/sidebar-13/page.tsx | 9 + .../sidebar-14/components/app-sidebar.tsx | 196 + .../bases/base/blocks/sidebar-14/page.tsx | 46 + .../sidebar-15/components/calendars.tsx | 84 + .../sidebar-15/components/date-picker.tsx | 26 + .../sidebar-15/components/nav-favorites.tsx | 128 + .../blocks/sidebar-15/components/nav-main.tsx | 33 + .../sidebar-15/components/nav-secondary.tsx | 41 + .../blocks/sidebar-15/components/nav-user.tsx | 144 + .../sidebar-15/components/nav-workspaces.tsx | 98 + .../sidebar-15/components/sidebar-left.tsx | 361 + .../sidebar-15/components/sidebar-right.tsx | 78 + .../sidebar-15/components/team-switcher.tsx | 103 + .../bases/base/blocks/sidebar-15/page.tsx | 47 + .../sidebar-16/components/app-sidebar.tsx | 252 + .../blocks/sidebar-16/components/nav-main.tsx | 84 + .../sidebar-16/components/nav-projects.tsx | 116 + .../sidebar-16/components/nav-secondary.tsx | 38 + .../blocks/sidebar-16/components/nav-user.tsx | 147 + .../sidebar-16/components/search-form.tsx | 29 + .../sidebar-16/components/site-header.tsx | 55 + .../bases/base/blocks/sidebar-16/page.tsx | 30 + .../signup-01/components/signup-form.tsx | 76 + .../bases/base/blocks/signup-01/page.tsx | 11 + .../signup-02/components/signup-form.tsx | 92 + .../bases/base/blocks/signup-02/page.tsx | 39 + .../signup-03/components/signup-form.tsx | 80 + .../bases/base/blocks/signup-03/page.tsx | 26 + .../signup-04/components/signup-form.tsx | 114 + .../bases/base/blocks/signup-04/page.tsx | 11 + .../signup-05/components/signup-form.tsx | 85 + .../bases/base/blocks/signup-05/page.tsx | 11 + .../bases/base/components/_registry.ts | 15 + .../bases/base/components/example.tsx | 56 + .../registry/bases/base/examples/_registry.ts | 908 ++ .../bases/base/examples/accordion-example.tsx | 336 + .../base/examples/alert-dialog-example.tsx | 230 + .../bases/base/examples/alert-example.tsx | 227 + .../base/examples/aspect-ratio-example.tsx | 90 + .../bases/base/examples/avatar-example.tsx | 511 + .../bases/base/examples/badge-example.tsx | 339 + .../base/examples/breadcrumb-example.tsx | 118 + .../bases/base/examples/button-example.tsx | 1001 ++ .../base/examples/button-group-example.tsx | 752 ++ .../bases/base/examples/calendar-example.tsx | 541 + .../bases/base/examples/card-example.tsx | 367 + .../bases/base/examples/carousel-example.tsx | 99 + .../bases/base/examples/chart-example.tsx | 581 + .../bases/base/examples/checkbox-example.tsx | 259 + .../base/examples/collapsible-example.tsx | 240 + .../bases/base/examples/combobox-example.tsx | 1320 +++ .../bases/base/examples/command-example.tsx | 589 + .../bases/base/examples/component-example.tsx | 662 ++ .../base/examples/context-menu-example.tsx | 596 + .../src/registry/bases/base/examples/demo.tsx | 413 + .../bases/base/examples/dialog-example.tsx | 600 + .../bases/base/examples/drawer-example.tsx | 121 + .../base/examples/dropdown-menu-example.tsx | 992 ++ .../bases/base/examples/empty-example.tsx | 263 + .../bases/base/examples/field-example.tsx | 1018 ++ .../base/examples/hover-card-example.tsx | 103 + .../bases/base/examples/input-example.tsx | 268 + .../base/examples/input-group-example.tsx | 910 ++ .../bases/base/examples/input-otp-example.tsx | 291 + .../bases/base/examples/item-example.tsx | 2027 ++++ .../bases/base/examples/kbd-example.tsx | 192 + .../bases/base/examples/label-example.tsx | 64 + .../bases/base/examples/menubar-example.tsx | 773 ++ .../base/examples/native-select-example.tsx | 129 + .../base/examples/navigation-menu-example.tsx | 184 + .../base/examples/pagination-example.tsx | 127 + .../bases/base/examples/popover-example.tsx | 199 + .../bases/base/examples/progress-example.tsx | 141 + .../base/examples/radio-group-example.tsx | 222 + .../bases/base/examples/resizable-example.tsx | 157 + .../base/examples/scroll-area-example.tsx | 86 + .../bases/base/examples/select-example.tsx | 722 ++ .../bases/base/examples/separator-example.tsx | 100 + .../bases/base/examples/sheet-example.tsx | 138 + .../bases/base/examples/sidebar-example.tsx | 285 + .../examples/sidebar-floating-example.tsx | 274 + .../base/examples/sidebar-icon-example.tsx | 460 + .../base/examples/sidebar-inset-example.tsx | 286 + .../bases/base/examples/skeleton-example.tsx | 102 + .../bases/base/examples/slider-example.tsx | 102 + .../bases/base/examples/sonner-example.tsx | 49 + .../bases/base/examples/spinner-example.tsx | 150 + .../bases/base/examples/switch-example.tsx | 102 + .../bases/base/examples/table-example.tsx | 483 + .../bases/base/examples/tabs-example.tsx | 359 + .../bases/base/examples/textarea-example.tsx | 86 + .../bases/base/examples/toggle-example.tsx | 338 + .../base/examples/toggle-group-example.tsx | 555 + .../bases/base/examples/tooltip-example.tsx | 190 + .../registry/bases/base/hooks/_registry.ts | 14 + .../registry/bases/base/hooks/use-mobile.ts | 19 + .../registry/bases/base/internal/_registry.ts | 3 + .../src/registry/bases/base/internal/sink.tsx | 115 + .../src/registry/bases/base/lib/_registry.ts | 15 + apps/ui/src/registry/bases/base/lib/utils.ts | 6 + apps/ui/src/registry/bases/base/registry.ts | 57 + .../src/registry/bases/base/ui/_registry.ts | 1025 ++ .../src/registry/bases/base/ui/accordion.tsx | 88 + .../registry/bases/base/ui/alert-dialog.tsx | 174 + apps/ui/src/registry/bases/base/ui/alert.tsx | 72 + .../registry/bases/base/ui/aspect-ratio.tsx | 22 + apps/ui/src/registry/bases/base/ui/avatar.tsx | 109 + apps/ui/src/registry/bases/base/ui/badge.tsx | 48 + .../src/registry/bases/base/ui/breadcrumb.tsx | 137 + .../registry/bases/base/ui/button-group.tsx | 87 + apps/ui/src/registry/bases/base/ui/button.tsx | 51 + .../src/registry/bases/base/ui/calendar.tsx | 244 + apps/ui/src/registry/bases/base/ui/card.tsx | 94 + .../src/registry/bases/base/ui/carousel.tsx | 255 + apps/ui/src/registry/bases/base/ui/chart.tsx | 369 + .../src/registry/bases/base/ui/checkbox.tsx | 33 + .../registry/bases/base/ui/collapsible.tsx | 20 + .../src/registry/bases/base/ui/combobox.tsx | 322 + .../ui/src/registry/bases/base/ui/command.tsx | 203 + .../registry/bases/base/ui/context-menu.tsx | 284 + apps/ui/src/registry/bases/base/ui/dialog.tsx | 155 + .../src/registry/bases/base/ui/direction.tsx | 5 + apps/ui/src/registry/bases/base/ui/drawer.tsx | 124 + .../registry/bases/base/ui/dropdown-menu.tsx | 284 + apps/ui/src/registry/bases/base/ui/empty.tsx | 104 + apps/ui/src/registry/bases/base/ui/field.tsx | 223 + .../src/registry/bases/base/ui/hover-card.tsx | 50 + .../registry/bases/base/ui/input-group.tsx | 148 + .../src/registry/bases/base/ui/input-otp.tsx | 91 + apps/ui/src/registry/bases/base/ui/input.tsx | 20 + apps/ui/src/registry/bases/base/ui/item.tsx | 200 + apps/ui/src/registry/bases/base/ui/kbd.tsx | 26 + apps/ui/src/registry/bases/base/ui/label.tsx | 19 + .../ui/src/registry/bases/base/ui/menubar.tsx | 280 + .../registry/bases/base/ui/native-select.tsx | 70 + .../bases/base/ui/navigation-menu.tsx | 173 + .../src/registry/bases/base/ui/pagination.tsx | 156 + .../ui/src/registry/bases/base/ui/popover.tsx | 89 + .../src/registry/bases/base/ui/progress.tsx | 79 + .../registry/bases/base/ui/radio-group.tsx | 37 + .../src/registry/bases/base/ui/resizable.tsx | 49 + .../registry/bases/base/ui/scroll-area.tsx | 54 + apps/ui/src/registry/bases/base/ui/select.tsx | 219 + .../src/registry/bases/base/ui/separator.tsx | 24 + apps/ui/src/registry/bases/base/ui/sheet.tsx | 139 + .../ui/src/registry/bases/base/ui/sidebar.tsx | 728 ++ .../src/registry/bases/base/ui/skeleton.tsx | 13 + apps/ui/src/registry/bases/base/ui/slider.tsx | 52 + apps/ui/src/registry/bases/base/ui/sonner.tsx | 84 + .../ui/src/registry/bases/base/ui/spinner.tsx | 20 + apps/ui/src/registry/bases/base/ui/switch.tsx | 31 + apps/ui/src/registry/bases/base/ui/table.tsx | 100 + apps/ui/src/registry/bases/base/ui/tabs.tsx | 81 + .../src/registry/bases/base/ui/textarea.tsx | 18 + .../registry/bases/base/ui/toggle-group.tsx | 88 + apps/ui/src/registry/bases/base/ui/toggle.tsx | 43 + .../ui/src/registry/bases/base/ui/tooltip.tsx | 65 + .../registry/bases/radix/blocks/_registry.ts | 908 ++ .../dashboard-01/components/app-sidebar.tsx | 283 + .../components/chart-area-interactive.tsx | 290 + .../dashboard-01/components/data-table.tsx | 882 ++ .../dashboard-01/components/nav-documents.tsx | 115 + .../dashboard-01/components/nav-main.tsx | 68 + .../dashboard-01/components/nav-secondary.tsx | 40 + .../dashboard-01/components/nav-user.tsx | 133 + .../dashboard-01/components/section-cards.tsx | 158 + .../dashboard-01/components/site-header.tsx | 18 + .../bases/radix/blocks/dashboard-01/data.json | 614 ++ .../bases/radix/blocks/dashboard-01/page.tsx | 40 + .../blocks/login-01/components/login-form.tsx | 70 + .../bases/radix/blocks/login-01/page.tsx | 11 + .../blocks/login-02/components/login-form.tsx | 76 + .../bases/radix/blocks/login-02/page.tsx | 39 + .../blocks/login-03/components/login-form.tsx | 95 + .../bases/radix/blocks/login-03/page.tsx | 26 + .../blocks/login-04/components/login-form.tsx | 105 + .../bases/radix/blocks/login-04/page.tsx | 11 + .../blocks/login-05/components/login-form.tsx | 85 + .../bases/radix/blocks/login-05/page.tsx | 11 + .../preview-02/cards/account-access.tsx | 103 + .../blocks/preview-02/cards/album-card.tsx | 49 + .../blocks/preview-02/cards/card-overview.tsx | 98 + .../preview-02/cards/catalog-toolbar.tsx | 46 + .../preview-02/cards/claimable-balance.tsx | 59 + .../preview-02/cards/contribution-history.tsx | 115 + .../blocks/preview-02/cards/cover-art.tsx | 58 + .../preview-02/cards/dividend-income.tsx | 142 + .../preview-02/cards/empty-connect-bank.tsx | 41 + .../cards/empty-distribute-track.tsx | 41 + .../cards/empty-explore-catalog.tsx | 41 + .../radix/blocks/preview-02/cards/faq.tsx | 123 + .../blocks/preview-02/cards/front-door.tsx | 41 + .../preview-02/cards/index-investing.tsx | 37 + .../preview-02/cards/kitchen-island.tsx | 181 + .../blocks/preview-02/cards/loading-card.tsx | 25 + .../blocks/preview-02/cards/new-milestone.tsx | 53 + .../cards/notification-settings.tsx | 105 + .../blocks/preview-02/cards/payments.tsx | 183 + .../preview-02/cards/payout-threshold.tsx | 113 + .../blocks/preview-02/cards/power-usage.tsx | 99 + .../blocks/preview-02/cards/preferences.tsx | 103 + .../blocks/preview-02/cards/qr-connect.tsx | 39 + .../preview-02/cards/receiving-method.tsx | 99 + .../preview-02/cards/recent-transactions.tsx | 306 + .../preview-02/cards/release-catalog.tsx | 119 + .../blocks/preview-02/cards/roller-shades.tsx | 78 + .../preview-02/cards/savings-progress.tsx | 105 + .../preview-02/cards/savings-targets.tsx | 154 + .../blocks/preview-02/cards/sidebar-nav.tsx | 236 + .../blocks/preview-02/cards/social-links.tsx | 107 + .../preview-02/cards/stock-performance.tsx | 143 + .../blocks/preview-02/cards/syncing-state.tsx | 35 + .../preview-02/cards/transfer-funds.tsx | 130 + .../preview-02/cards/upcoming-payments.tsx | 68 + .../bases/radix/blocks/preview-02/index.tsx | 98 + .../preview/cards/activate-agent-dialog.tsx | 104 + .../blocks/preview/cards/analytics-card.tsx | 77 + .../blocks/preview/cards/anomaly-alert.tsx | 31 + .../blocks/preview/cards/assign-issue.tsx | 127 + .../blocks/preview/cards/bar-chart-card.tsx | 132 + .../blocks/preview/cards/bar-visualizer.tsx | 482 + .../blocks/preview/cards/book-appointment.tsx | 55 + .../blocks/preview/cards/codespaces-card.tsx | 389 + .../preview/cards/contributions-activity.tsx | 64 + .../blocks/preview/cards/contributors.tsx | 64 + .../preview/cards/environment-variables.tsx | 42 + .../blocks/preview/cards/feedback-form.tsx | 69 + .../blocks/preview/cards/file-upload.tsx | 49 + .../blocks/preview/cards/github-profile.tsx | 78 + .../preview/cards/icon-preview-grid.tsx | 145 + .../blocks/preview/cards/invite-team.tsx | 99 + .../radix/blocks/preview/cards/invoice.tsx | 114 + .../blocks/preview/cards/live-waveform.tsx | 555 + .../blocks/preview/cards/no-team-members.tsx | 62 + .../radix/blocks/preview/cards/not-found.tsx | 53 + .../preview/cards/observability-card.tsx | 49 + .../blocks/preview/cards/pie-chart-card.tsx | 146 + .../radix/blocks/preview/cards/report-bug.tsx | 96 + .../blocks/preview/cards/shipping-address.tsx | 100 + .../radix/blocks/preview/cards/shortcuts.tsx | 55 + .../blocks/preview/cards/skeleton-loading.tsx | 28 + .../blocks/preview/cards/sleep-report.tsx | 103 + .../blocks/preview/cards/style-overview.tsx | 79 + .../preview/cards/typography-specimen.tsx | 131 + .../blocks/preview/cards/ui-elements.tsx | 205 + .../radix/blocks/preview/cards/usage-card.tsx | 135 + .../radix/blocks/preview/cards/visitors.tsx | 90 + .../preview/cards/weekly-fitness-summary.tsx | 58 + .../bases/radix/blocks/preview/index.tsx | 96 + .../sidebar-01/components/app-sidebar.tsx | 182 + .../sidebar-01/components/search-form.tsx | 35 + .../components/version-switcher.tsx | 86 + .../bases/radix/blocks/sidebar-01/page.tsx | 51 + .../sidebar-02/components/app-sidebar.tsx | 223 + .../sidebar-02/components/search-form.tsx | 35 + .../components/version-switcher.tsx | 86 + .../bases/radix/blocks/sidebar-02/page.tsx | 51 + .../sidebar-03/components/app-sidebar.tsx | 216 + .../bases/radix/blocks/sidebar-03/page.tsx | 55 + .../sidebar-04/components/app-sidebar.tsx | 214 + .../bases/radix/blocks/sidebar-04/page.tsx | 57 + .../sidebar-05/components/app-sidebar.tsx | 250 + .../sidebar-05/components/search-form.tsx | 35 + .../bases/radix/blocks/sidebar-05/page.tsx | 51 + .../sidebar-06/components/app-sidebar.tsx | 187 + .../blocks/sidebar-06/components/nav-main.tsx | 71 + .../components/sidebar-opt-in-form.tsx | 32 + .../bases/radix/blocks/sidebar-06/page.tsx | 51 + .../sidebar-07/components/app-sidebar.tsx | 243 + .../blocks/sidebar-07/components/nav-main.tsx | 78 + .../sidebar-07/components/nav-projects.tsx | 118 + .../blocks/sidebar-07/components/nav-user.tsx | 142 + .../sidebar-07/components/team-switcher.tsx | 104 + .../bases/radix/blocks/sidebar-07/page.tsx | 55 + .../sidebar-08/components/app-sidebar.tsx | 252 + .../blocks/sidebar-08/components/nav-main.tsx | 82 + .../sidebar-08/components/nav-projects.tsx | 117 + .../sidebar-08/components/nav-secondary.tsx | 40 + .../blocks/sidebar-08/components/nav-user.tsx | 142 + .../bases/radix/blocks/sidebar-08/page.tsx | 55 + .../sidebar-09/components/app-sidebar.tsx | 308 + .../blocks/sidebar-09/components/nav-user.tsx | 142 + .../bases/radix/blocks/sidebar-09/page.tsx | 57 + .../sidebar-10/components/app-sidebar.tsx | 359 + .../sidebar-10/components/nav-actions.tsx | 252 + .../sidebar-10/components/nav-favorites.tsx | 129 + .../blocks/sidebar-10/components/nav-main.tsx | 32 + .../sidebar-10/components/nav-secondary.tsx | 43 + .../sidebar-10/components/nav-workspaces.tsx | 103 + .../sidebar-10/components/team-switcher.tsx | 96 + .../bases/radix/blocks/sidebar-10/page.tsx | 49 + .../sidebar-11/components/app-sidebar.tsx | 169 + .../bases/radix/blocks/sidebar-11/page.tsx | 55 + .../sidebar-12/components/app-sidebar.tsx | 73 + .../sidebar-12/components/calendars.tsx | 86 + .../sidebar-12/components/date-picker.tsx | 26 + .../blocks/sidebar-12/components/nav-user.tsx | 142 + .../bases/radix/blocks/sidebar-12/page.tsx | 44 + .../sidebar-13/components/settings-dialog.tsx | 247 + .../bases/radix/blocks/sidebar-13/page.tsx | 9 + .../sidebar-14/components/app-sidebar.tsx | 197 + .../bases/radix/blocks/sidebar-14/page.tsx | 46 + .../sidebar-15/components/calendars.tsx | 86 + .../sidebar-15/components/date-picker.tsx | 26 + .../sidebar-15/components/nav-favorites.tsx | 129 + .../blocks/sidebar-15/components/nav-main.tsx | 32 + .../sidebar-15/components/nav-secondary.tsx | 43 + .../blocks/sidebar-15/components/nav-user.tsx | 142 + .../sidebar-15/components/nav-workspaces.tsx | 103 + .../sidebar-15/components/sidebar-left.tsx | 361 + .../sidebar-15/components/sidebar-right.tsx | 78 + .../sidebar-15/components/team-switcher.tsx | 96 + .../bases/radix/blocks/sidebar-15/page.tsx | 47 + .../sidebar-16/components/app-sidebar.tsx | 255 + .../blocks/sidebar-16/components/nav-main.tsx | 82 + .../sidebar-16/components/nav-projects.tsx | 117 + .../sidebar-16/components/nav-secondary.tsx | 40 + .../blocks/sidebar-16/components/nav-user.tsx | 142 + .../sidebar-16/components/search-form.tsx | 29 + .../sidebar-16/components/site-header.tsx | 55 + .../bases/radix/blocks/sidebar-16/page.tsx | 33 + .../signup-01/components/signup-form.tsx | 76 + .../bases/radix/blocks/signup-01/page.tsx | 11 + .../signup-02/components/signup-form.tsx | 92 + .../bases/radix/blocks/signup-02/page.tsx | 39 + .../signup-03/components/signup-form.tsx | 80 + .../bases/radix/blocks/signup-03/page.tsx | 26 + .../signup-04/components/signup-form.tsx | 114 + .../bases/radix/blocks/signup-04/page.tsx | 11 + .../signup-05/components/signup-form.tsx | 85 + .../bases/radix/blocks/signup-05/page.tsx | 11 + .../bases/radix/components/_registry.ts | 15 + .../bases/radix/components/example.tsx | 55 + .../bases/radix/examples/_registry.ts | 908 ++ .../radix/examples/accordion-example.tsx | 345 + .../radix/examples/alert-dialog-example.tsx | 231 + .../bases/radix/examples/alert-example.tsx | 325 + .../radix/examples/aspect-ratio-example.tsx | 90 + .../bases/radix/examples/avatar-example.tsx | 511 + .../bases/radix/examples/badge-example.tsx | 354 + .../radix/examples/breadcrumb-example.tsx | 122 + .../bases/radix/examples/button-example.tsx | 998 ++ .../radix/examples/button-group-example.tsx | 736 ++ .../bases/radix/examples/calendar-example.tsx | 535 + .../bases/radix/examples/card-example.tsx | 367 + .../bases/radix/examples/carousel-example.tsx | 99 + .../bases/radix/examples/chart-example.tsx | 593 + .../bases/radix/examples/checkbox-example.tsx | 259 + .../radix/examples/collapsible-example.tsx | 238 + .../bases/radix/examples/combobox-example.tsx | 1248 +++ .../bases/radix/examples/command-example.tsx | 589 + .../radix/examples/component-example.tsx | 656 ++ .../radix/examples/context-menu-example.tsx | 634 ++ .../registry/bases/radix/examples/demo.tsx | 408 + .../bases/radix/examples/dialog-example.tsx | 585 + .../bases/radix/examples/drawer-example.tsx | 124 + .../radix/examples/dropdown-menu-example.tsx | 977 ++ .../bases/radix/examples/empty-example.tsx | 254 + .../bases/radix/examples/field-example.tsx | 968 ++ .../radix/examples/hover-card-example.tsx | 98 + .../bases/radix/examples/input-example.tsx | 268 + .../radix/examples/input-group-example.tsx | 886 ++ .../radix/examples/input-otp-example.tsx | 291 + .../bases/radix/examples/item-example.tsx | 2009 ++++ .../bases/radix/examples/kbd-example.tsx | 194 + .../bases/radix/examples/label-example.tsx | 64 + .../bases/radix/examples/menubar-example.tsx | 806 ++ .../radix/examples/native-select-example.tsx | 129 + .../examples/navigation-menu-example.tsx | 267 + .../radix/examples/pagination-example.tsx | 126 + .../bases/radix/examples/popover-example.tsx | 163 + .../bases/radix/examples/progress-example.tsx | 141 + .../radix/examples/radio-group-example.tsx | 222 + .../radix/examples/resizable-example.tsx | 157 + .../radix/examples/scroll-area-example.tsx | 86 + .../bases/radix/examples/select-example.tsx | 553 + .../radix/examples/separator-example.tsx | 100 + .../bases/radix/examples/sheet-example.tsx | 145 + .../bases/radix/examples/sidebar-example.tsx | 285 + .../examples/sidebar-floating-example.tsx | 274 + .../radix/examples/sidebar-icon-example.tsx | 460 + .../radix/examples/sidebar-inset-example.tsx | 291 + .../bases/radix/examples/skeleton-example.tsx | 102 + .../bases/radix/examples/slider-example.tsx | 102 + .../bases/radix/examples/sonner-example.tsx | 49 + .../bases/radix/examples/spinner-example.tsx | 147 + .../bases/radix/examples/switch-example.tsx | 102 + .../bases/radix/examples/table-example.tsx | 478 + .../bases/radix/examples/tabs-example.tsx | 361 + .../bases/radix/examples/textarea-example.tsx | 86 + .../bases/radix/examples/toggle-example.tsx | 344 + .../radix/examples/toggle-group-example.tsx | 574 + .../bases/radix/examples/tooltip-example.tsx | 194 + .../registry/bases/radix/hooks/_registry.ts | 14 + .../registry/bases/radix/hooks/use-mobile.ts | 19 + .../bases/radix/internal/_registry.ts | 3 + .../registry/bases/radix/internal/sink.tsx | 115 + .../src/registry/bases/radix/lib/_registry.ts | 15 + apps/ui/src/registry/bases/radix/lib/utils.ts | 6 + apps/ui/src/registry/bases/radix/registry.ts | 57 + .../src/registry/bases/radix/ui/_registry.ts | 1023 ++ .../src/registry/bases/radix/ui/accordion.tsx | 96 + .../registry/bases/radix/ui/alert-dialog.tsx | 183 + apps/ui/src/registry/bases/radix/ui/alert.tsx | 72 + .../registry/bases/radix/ui/aspect-ratio.tsx | 10 + .../ui/src/registry/bases/radix/ui/avatar.tsx | 112 + apps/ui/src/registry/bases/radix/ui/badge.tsx | 45 + .../registry/bases/radix/ui/breadcrumb.tsx | 134 + .../registry/bases/radix/ui/button-group.tsx | 83 + .../ui/src/registry/bases/radix/ui/button.tsx | 60 + .../src/registry/bases/radix/ui/calendar.tsx | 245 + apps/ui/src/registry/bases/radix/ui/card.tsx | 94 + .../src/registry/bases/radix/ui/carousel.tsx | 255 + apps/ui/src/registry/bases/radix/ui/chart.tsx | 369 + .../src/registry/bases/radix/ui/checkbox.tsx | 37 + .../registry/bases/radix/ui/collapsible.tsx | 32 + .../src/registry/bases/radix/ui/combobox.tsx | 324 + .../src/registry/bases/radix/ui/command.tsx | 202 + .../registry/bases/radix/ui/context-menu.tsx | 279 + .../ui/src/registry/bases/radix/ui/dialog.tsx | 159 + .../src/registry/bases/radix/ui/direction.tsx | 21 + .../ui/src/registry/bases/radix/ui/drawer.tsx | 124 + .../registry/bases/radix/ui/dropdown-menu.tsx | 285 + apps/ui/src/registry/bases/radix/ui/empty.tsx | 104 + apps/ui/src/registry/bases/radix/ui/field.tsx | 223 + .../registry/bases/radix/ui/hover-card.tsx | 43 + .../registry/bases/radix/ui/input-group.tsx | 146 + .../src/registry/bases/radix/ui/input-otp.tsx | 91 + apps/ui/src/registry/bases/radix/ui/input.tsx | 19 + apps/ui/src/registry/bases/radix/ui/item.tsx | 195 + apps/ui/src/registry/bases/radix/ui/kbd.tsx | 26 + apps/ui/src/registry/bases/radix/ui/label.tsx | 23 + .../src/registry/bases/radix/ui/menubar.tsx | 293 + .../registry/bases/radix/ui/native-select.tsx | 70 + .../bases/radix/ui/navigation-menu.tsx | 169 + .../registry/bases/radix/ui/pagination.tsx | 155 + .../src/registry/bases/radix/ui/popover.tsx | 88 + .../src/registry/bases/radix/ui/progress.tsx | 30 + .../registry/bases/radix/ui/radio-group.tsx | 43 + .../src/registry/bases/radix/ui/resizable.tsx | 49 + .../registry/bases/radix/ui/scroll-area.tsx | 54 + .../ui/src/registry/bases/radix/ui/select.tsx | 214 + .../src/registry/bases/radix/ui/separator.tsx | 27 + apps/ui/src/registry/bases/radix/ui/sheet.tsx | 144 + .../src/registry/bases/radix/ui/sidebar.tsx | 707 ++ .../src/registry/bases/radix/ui/skeleton.tsx | 13 + .../ui/src/registry/bases/radix/ui/slider.tsx | 58 + .../ui/src/registry/bases/radix/ui/sonner.tsx | 84 + .../src/registry/bases/radix/ui/spinner.tsx | 20 + .../ui/src/registry/bases/radix/ui/switch.tsx | 32 + apps/ui/src/registry/bases/radix/ui/table.tsx | 100 + apps/ui/src/registry/bases/radix/ui/tabs.tsx | 89 + .../src/registry/bases/radix/ui/textarea.tsx | 18 + .../registry/bases/radix/ui/toggle-group.tsx | 88 + .../ui/src/registry/bases/radix/ui/toggle.tsx | 45 + .../src/registry/bases/radix/ui/tooltip.tsx | 56 + apps/ui/src/registry/config.ts | 612 ++ apps/ui/src/registry/directory.json | 1207 ++ apps/ui/src/registry/fonts.ts | 34 + apps/ui/src/registry/icons/__hugeicons__.ts | 177 + apps/ui/src/registry/icons/__lucide__.ts | 173 + apps/ui/src/registry/icons/__phosphor__.ts | 147 + apps/ui/src/registry/icons/__remixicon__.ts | 145 + apps/ui/src/registry/icons/__tabler__.ts | 172 + .../src/registry/icons/create-icon-loader.tsx | 50 + apps/ui/src/registry/icons/icon-hugeicons.tsx | 3 + apps/ui/src/registry/icons/icon-lucide.tsx | 3 + apps/ui/src/registry/icons/icon-phosphor.tsx | 3 + apps/ui/src/registry/icons/icon-remixicon.tsx | 3 + apps/ui/src/registry/icons/icon-tabler.tsx | 3 + .../registry/new-york-v4/blocks/_registry.ts | 799 ++ .../dashboard-01/components/app-sidebar.tsx | 180 + .../components/chart-area-interactive.tsx | 290 + .../dashboard-01/components/data-table.tsx | 806 ++ .../dashboard-01/components/nav-documents.tsx | 91 + .../dashboard-01/components/nav-main.tsx | 57 + .../dashboard-01/components/nav-secondary.tsx | 41 + .../dashboard-01/components/nav-user.tsx | 109 + .../dashboard-01/components/section-cards.tsx | 102 + .../dashboard-01/components/site-header.tsx | 30 + .../new-york-v4/blocks/dashboard-01/data.json | 614 ++ .../new-york-v4/blocks/dashboard-01/page.tsx | 40 + .../blocks/login-01/components/login-form.tsx | 70 + .../new-york-v4/blocks/login-01/page.tsx | 11 + .../blocks/login-02/components/login-form.tsx | 65 + .../new-york-v4/blocks/login-02/page.tsx | 32 + .../blocks/login-03/components/login-form.tsx | 95 + .../new-york-v4/blocks/login-03/page.tsx | 19 + .../blocks/login-04/components/login-form.tsx | 105 + .../new-york-v4/blocks/login-04/page.tsx | 11 + .../blocks/login-05/components/login-form.tsx | 78 + .../new-york-v4/blocks/login-05/page.tsx | 11 + .../sidebar-01/components/app-sidebar.tsx | 182 + .../sidebar-01/components/search-form.tsx | 28 + .../components/version-switcher.tsx | 63 + .../new-york-v4/blocks/sidebar-01/page.tsx | 51 + .../sidebar-02/components/app-sidebar.tsx | 215 + .../sidebar-02/components/search-form.tsx | 28 + .../components/version-switcher.tsx | 63 + .../new-york-v4/blocks/sidebar-02/page.tsx | 48 + .../sidebar-03/components/app-sidebar.tsx | 208 + .../new-york-v4/blocks/sidebar-03/page.tsx | 52 + .../sidebar-04/components/app-sidebar.tsx | 206 + .../new-york-v4/blocks/sidebar-04/page.tsx | 57 + .../sidebar-05/components/app-sidebar.tsx | 228 + .../sidebar-05/components/search-form.tsx | 28 + .../new-york-v4/blocks/sidebar-05/page.tsx | 51 + .../sidebar-06/components/app-sidebar.tsx | 179 + .../blocks/sidebar-06/components/nav-main.tsx | 64 + .../components/sidebar-opt-in-form.tsx | 35 + .../new-york-v4/blocks/sidebar-06/page.tsx | 51 + .../sidebar-07/components/app-sidebar.tsx | 174 + .../blocks/sidebar-07/components/nav-main.tsx | 72 + .../sidebar-07/components/nav-projects.tsx | 88 + .../blocks/sidebar-07/components/nav-user.tsx | 113 + .../sidebar-07/components/team-switcher.tsx | 90 + .../new-york-v4/blocks/sidebar-07/page.tsx | 55 + .../sidebar-08/components/app-sidebar.tsx | 184 + .../blocks/sidebar-08/components/nav-main.tsx | 77 + .../sidebar-08/components/nav-projects.tsx | 88 + .../sidebar-08/components/nav-secondary.tsx | 40 + .../blocks/sidebar-08/components/nav-user.tsx | 113 + .../new-york-v4/blocks/sidebar-08/page.tsx | 55 + .../sidebar-09/components/app-sidebar.tsx | 261 + .../blocks/sidebar-09/components/nav-user.tsx | 113 + .../new-york-v4/blocks/sidebar-09/page.tsx | 57 + .../sidebar-10/components/app-sidebar.tsx | 275 + .../sidebar-10/components/nav-actions.tsx | 152 + .../sidebar-10/components/nav-favorites.tsx | 93 + .../blocks/sidebar-10/components/nav-main.tsx | 34 + .../sidebar-10/components/nav-secondary.tsx | 43 + .../sidebar-10/components/nav-workspaces.tsx | 85 + .../sidebar-10/components/team-switcher.tsx | 82 + .../new-york-v4/blocks/sidebar-10/page.tsx | 49 + .../sidebar-11/components/app-sidebar.tsx | 143 + .../new-york-v4/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 | 15 + .../blocks/sidebar-12/components/nav-user.tsx | 113 + .../new-york-v4/blocks/sidebar-12/page.tsx | 44 + .../sidebar-13/components/settings-dialog.tsx | 128 + .../new-york-v4/blocks/sidebar-13/page.tsx | 9 + .../sidebar-14/components/app-sidebar.tsx | 197 + .../new-york-v4/blocks/sidebar-14/page.tsx | 46 + .../sidebar-15/components/calendars.tsx | 71 + .../sidebar-15/components/date-picker.tsx | 15 + .../sidebar-15/components/nav-favorites.tsx | 93 + .../blocks/sidebar-15/components/nav-main.tsx | 34 + .../sidebar-15/components/nav-secondary.tsx | 43 + .../blocks/sidebar-15/components/nav-user.tsx | 113 + .../sidebar-15/components/nav-workspaces.tsx | 85 + .../sidebar-15/components/sidebar-left.tsx | 277 + .../sidebar-15/components/sidebar-right.tsx | 71 + .../sidebar-15/components/team-switcher.tsx | 82 + .../new-york-v4/blocks/sidebar-15/page.tsx | 47 + .../sidebar-16/components/app-sidebar.tsx | 187 + .../blocks/sidebar-16/components/nav-main.tsx | 77 + .../sidebar-16/components/nav-projects.tsx | 88 + .../sidebar-16/components/nav-secondary.tsx | 40 + .../blocks/sidebar-16/components/nav-user.tsx | 113 + .../sidebar-16/components/search-form.tsx | 22 + .../sidebar-16/components/site-header.tsx | 47 + .../new-york-v4/blocks/sidebar-16/page.tsx | 33 + .../signup-01/components/signup-form.tsx | 76 + .../new-york-v4/blocks/signup-01/page.tsx | 11 + .../signup-02/components/signup-form.tsx | 70 + .../new-york-v4/blocks/signup-02/page.tsx | 32 + .../signup-03/components/signup-form.tsx | 80 + .../new-york-v4/blocks/signup-03/page.tsx | 19 + .../signup-04/components/signup-form.tsx | 114 + .../new-york-v4/blocks/signup-04/page.tsx | 11 + .../signup-05/components/signup-form.tsx | 78 + .../new-york-v4/blocks/signup-05/page.tsx | 11 + .../registry/new-york-v4/charts/_registry.ts | 855 ++ .../new-york-v4/charts/chart-area-axes.tsx | 109 + .../new-york-v4/charts/chart-area-default.tsx | 93 + .../charts/chart-area-gradient.tsx | 129 + .../new-york-v4/charts/chart-area-icons.tsx | 111 + .../charts/chart-area-interactive.tsx | 265 + .../new-york-v4/charts/chart-area-legend.tsx | 109 + .../new-york-v4/charts/chart-area-linear.tsx | 93 + .../charts/chart-area-stacked-expand.tsx | 120 + .../new-york-v4/charts/chart-area-stacked.tsx | 106 + .../new-york-v4/charts/chart-area-step.tsx | 94 + .../new-york-v4/charts/chart-bar-active.tsx | 114 + .../new-york-v4/charts/chart-bar-default.tsx | 74 + .../charts/chart-bar-horizontal.tsx | 82 + .../charts/chart-bar-interactive.tsx | 220 + .../charts/chart-bar-label-custom.tsx | 106 + .../new-york-v4/charts/chart-bar-label.tsx | 87 + .../new-york-v4/charts/chart-bar-mixed.tsx | 102 + .../new-york-v4/charts/chart-bar-multiple.tsx | 79 + .../new-york-v4/charts/chart-bar-negative.tsx | 74 + .../new-york-v4/charts/chart-bar-stacked.tsx | 89 + .../new-york-v4/charts/chart-line-default.tsx | 87 + .../charts/chart-line-dots-colors.tsx | 117 + .../charts/chart-line-dots-custom.tsx | 109 + .../new-york-v4/charts/chart-line-dots.tsx | 96 + .../charts/chart-line-interactive.tsx | 226 + .../charts/chart-line-label-custom.tsx | 122 + .../new-york-v4/charts/chart-line-label.tsx | 104 + .../new-york-v4/charts/chart-line-linear.tsx | 87 + .../charts/chart-line-multiple.tsx | 99 + .../new-york-v4/charts/chart-line-step.tsx | 87 + .../charts/chart-pie-donut-active.tsx | 107 + .../charts/chart-pie-donut-text.tsx | 128 + .../new-york-v4/charts/chart-pie-donut.tsx | 92 + .../charts/chart-pie-interactive.tsx | 201 + .../charts/chart-pie-label-custom.tsx | 106 + .../charts/chart-pie-label-list.tsx | 96 + .../new-york-v4/charts/chart-pie-label.tsx | 84 + .../new-york-v4/charts/chart-pie-legend.tsx | 77 + .../charts/chart-pie-separator-none.tsx | 92 + .../new-york-v4/charts/chart-pie-simple.tsx | 87 + .../new-york-v4/charts/chart-pie-stacked.tsx | 118 + .../charts/chart-radar-default.tsx | 74 + .../new-york-v4/charts/chart-radar-dots.tsx | 78 + .../charts/chart-radar-grid-circle-fill.tsx | 77 + .../chart-radar-grid-circle-no-lines.tsx | 81 + .../charts/chart-radar-grid-circle.tsx | 81 + .../charts/chart-radar-grid-custom.tsx | 77 + .../charts/chart-radar-grid-fill.tsx | 77 + .../charts/chart-radar-grid-none.tsx | 80 + .../new-york-v4/charts/chart-radar-icons.tsx | 95 + .../charts/chart-radar-label-custom.tsx | 120 + .../new-york-v4/charts/chart-radar-legend.tsx | 93 + .../charts/chart-radar-lines-only.tsx | 90 + .../charts/chart-radar-multiple.tsx | 82 + .../new-york-v4/charts/chart-radar-radius.tsx | 95 + .../new-york-v4/charts/chart-radial-grid.tsx | 88 + .../new-york-v4/charts/chart-radial-label.tsx | 100 + .../new-york-v4/charts/chart-radial-shape.tsx | 110 + .../charts/chart-radial-simple.tsx | 87 + .../charts/chart-radial-stacked.tsx | 118 + .../new-york-v4/charts/chart-radial-text.tsx | 111 + .../charts/chart-tooltip-advanced.tsx | 122 + .../charts/chart-tooltip-default.tsx | 88 + .../charts/chart-tooltip-formatter.tsx | 99 + .../charts/chart-tooltip-icons.tsx | 86 + .../charts/chart-tooltip-indicator-line.tsx | 86 + .../charts/chart-tooltip-indicator-none.tsx | 83 + .../charts/chart-tooltip-label-custom.tsx | 90 + .../charts/chart-tooltip-label-formatter.tsx | 93 + .../charts/chart-tooltip-label-none.tsx | 83 + .../new-york-v4/examples/_registry.ts | 2651 +++++ .../new-york-v4/examples/accordion-demo.tsx | 61 + .../new-york-v4/examples/alert-demo.tsx | 39 + .../examples/alert-destructive.tsx | 19 + .../examples/alert-dialog-demo.tsx | 35 + .../examples/aspect-ratio-demo.tsx | 16 + .../new-york-v4/examples/avatar-demo.tsx | 43 + .../new-york-v4/examples/badge-demo.tsx | 40 + .../examples/badge-destructive.tsx | 5 + .../new-york-v4/examples/badge-outline.tsx | 5 + .../new-york-v4/examples/badge-secondary.tsx | 5 + .../new-york-v4/examples/breadcrumb-demo.tsx | 55 + .../examples/breadcrumb-dropdown.tsx | 53 + .../examples/breadcrumb-ellipsis.tsx | 39 + .../new-york-v4/examples/breadcrumb-link.tsx | 34 + .../examples/breadcrumb-responsive.tsx | 134 + .../examples/breadcrumb-separator.tsx | 39 + .../new-york-v4/examples/button-as-child.tsx | 11 + .../new-york-v4/examples/button-default.tsx | 5 + .../new-york-v4/examples/button-demo.tsx | 14 + .../examples/button-destructive.tsx | 5 + .../new-york-v4/examples/button-ghost.tsx | 5 + .../examples/button-group-demo.tsx | 113 + .../examples/button-group-dropdown.tsx | 72 + .../examples/button-group-input-group.tsx | 57 + .../examples/button-group-input.tsx | 16 + .../examples/button-group-nested.tsx | 37 + .../examples/button-group-orientation.tsx | 21 + .../examples/button-group-popover.tsx | 45 + .../examples/button-group-select.tsx | 56 + .../examples/button-group-separator.tsx | 19 + .../examples/button-group-size.tsx | 47 + .../examples/button-group-split.tsx | 19 + .../new-york-v4/examples/button-icon.tsx | 11 + .../new-york-v4/examples/button-link.tsx | 5 + .../new-york-v4/examples/button-loading.tsx | 11 + .../new-york-v4/examples/button-outline.tsx | 5 + .../new-york-v4/examples/button-rounded.tsx | 13 + .../new-york-v4/examples/button-secondary.tsx | 5 + .../new-york-v4/examples/button-size.tsx | 32 + .../new-york-v4/examples/button-with-icon.tsx | 11 + .../new-york-v4/examples/calendar-demo.tsx | 18 + .../new-york-v4/examples/calendar-hijri.tsx | 233 + .../new-york-v4/examples/card-demo.tsx | 63 + .../new-york-v4/examples/card-with-form.tsx | 59 + .../new-york-v4/examples/carousel-api.tsx | 54 + .../new-york-v4/examples/carousel-demo.tsx | 32 + .../examples/carousel-orientation.tsx | 38 + .../new-york-v4/examples/carousel-plugin.tsx | 43 + .../new-york-v4/examples/carousel-size.tsx | 37 + .../new-york-v4/examples/carousel-spacing.tsx | 32 + .../examples/chart-bar-demo-axis.tsx | 46 + .../examples/chart-bar-demo-grid.tsx | 39 + .../examples/chart-bar-demo-legend.tsx | 52 + .../examples/chart-bar-demo-tooltip.tsx | 49 + .../new-york-v4/examples/chart-bar-demo.tsx | 38 + .../examples/chart-tooltip-demo.tsx | 213 + .../new-york-v4/examples/checkbox-demo.tsx | 42 + .../examples/checkbox-disabled.tsx | 15 + .../examples/checkbox-with-text.tsx | 21 + .../new-york-v4/examples/collapsible-demo.tsx | 45 + .../new-york-v4/examples/combobox-demo.tsx | 93 + .../examples/combobox-dropdown-menu.tsx | 101 + .../new-york-v4/examples/combobox-popover.tsx | 90 + .../examples/combobox-responsive.tsx | 122 + .../new-york-v4/examples/command-demo.tsx | 62 + .../new-york-v4/examples/command-dialog.tsx | 86 + .../examples/context-menu-demo.tsx | 64 + .../new-york-v4/examples/data-table-demo.tsx | 311 + .../new-york-v4/examples/date-picker-demo.tsx | 42 + .../examples/date-picker-with-presets.tsx | 64 + .../examples/date-picker-with-range.tsx | 64 + .../examples/dialog-close-button.tsx | 50 + .../new-york-v4/examples/dialog-demo.tsx | 50 + .../new-york-v4/examples/drawer-demo.tsx | 135 + .../new-york-v4/examples/drawer-dialog.tsx | 89 + .../examples/dropdown-menu-checkboxes.tsx | 54 + .../examples/dropdown-menu-demo.tsx | 74 + .../examples/dropdown-menu-dialog.tsx | 114 + .../examples/dropdown-menu-radio-group.tsx | 34 + .../examples/empty-avatar-group.tsx | 57 + .../new-york-v4/examples/empty-avatar.tsx | 40 + .../new-york-v4/examples/empty-background.tsx | 34 + .../new-york-v4/examples/empty-demo.tsx | 45 + .../new-york-v4/examples/empty-icon.tsx | 68 + .../examples/empty-input-group.tsx | 43 + .../new-york-v4/examples/empty-outline.tsx | 32 + .../new-york-v4/examples/field-checkbox.tsx | 80 + .../examples/field-choice-card.tsx | 54 + .../new-york-v4/examples/field-demo.tsx | 151 + .../new-york-v4/examples/field-fieldset.tsx | 38 + .../new-york-v4/examples/field-group.tsx | 55 + .../new-york-v4/examples/field-input.tsx | 33 + .../new-york-v4/examples/field-radio.tsx | 43 + .../new-york-v4/examples/field-responsive.tsx | 61 + .../new-york-v4/examples/field-select.tsx | 40 + .../new-york-v4/examples/field-slider.tsx | 34 + .../new-york-v4/examples/field-switch.tsx | 24 + .../new-york-v4/examples/field-textarea.tsx | 30 + .../examples/form-next-complex-action.ts | 36 + .../examples/form-next-complex-schema.ts | 52 + .../examples/form-next-complex.tsx | 193 + .../examples/form-next-demo-action.ts | 34 + .../examples/form-next-demo-schema.ts | 18 + .../new-york-v4/examples/form-next-demo.tsx | 127 + .../new-york-v4/examples/form-rhf-array.tsx | 159 + .../examples/form-rhf-checkbox.tsx | 186 + .../new-york-v4/examples/form-rhf-complex.tsx | 306 + .../new-york-v4/examples/form-rhf-demo.tsx | 149 + .../new-york-v4/examples/form-rhf-input.tsx | 113 + .../examples/form-rhf-password.tsx | 223 + .../examples/form-rhf-radiogroup.tsx | 151 + .../new-york-v4/examples/form-rhf-select.tsx | 149 + .../new-york-v4/examples/form-rhf-switch.tsx | 113 + .../examples/form-rhf-textarea.tsx | 109 + .../examples/form-tanstack-array.tsx | 178 + .../examples/form-tanstack-checkbox.tsx | 209 + .../examples/form-tanstack-complex.tsx | 312 + .../examples/form-tanstack-demo.tsx | 164 + .../examples/form-tanstack-input.tsx | 126 + .../examples/form-tanstack-radiogroup.tsx | 159 + .../examples/form-tanstack-select.tsx | 158 + .../examples/form-tanstack-switch.tsx | 120 + .../examples/form-tanstack-textarea.tsx | 121 + .../new-york-v4/examples/hover-card-demo.tsx | 40 + .../new-york-v4/examples/input-demo.tsx | 5 + .../new-york-v4/examples/input-disabled.tsx | 5 + .../new-york-v4/examples/input-file.tsx | 11 + .../examples/input-group-button-group.tsx | 31 + .../examples/input-group-button.tsx | 85 + .../examples/input-group-custom.tsx | 27 + .../new-york-v4/examples/input-group-demo.tsx | 98 + .../examples/input-group-dropdown.tsx | 59 + .../new-york-v4/examples/input-group-icon.tsx | 49 + .../examples/input-group-label.tsx | 50 + .../examples/input-group-spinner.tsx | 46 + .../new-york-v4/examples/input-group-text.tsx | 46 + .../examples/input-group-textarea.tsx | 46 + .../examples/input-group-tooltip.tsx | 77 + .../examples/input-otp-controlled.tsx | 38 + .../new-york-v4/examples/input-otp-demo.tsx | 24 + .../examples/input-otp-pattern.tsx | 23 + .../examples/input-otp-separator.tsx | 29 + .../examples/input-with-button.tsx | 13 + .../new-york-v4/examples/input-with-label.tsx | 11 + .../new-york-v4/examples/input-with-text.tsx | 12 + .../new-york-v4/examples/item-avatar.tsx | 80 + .../new-york-v4/examples/item-demo.tsx | 44 + .../new-york-v4/examples/item-dropdown.tsx | 72 + .../new-york-v4/examples/item-group.tsx | 68 + .../new-york-v4/examples/item-header.tsx | 60 + .../new-york-v4/examples/item-icon.tsx | 34 + .../new-york-v4/examples/item-image.tsx | 65 + .../new-york-v4/examples/item-link.tsx | 42 + .../new-york-v4/examples/item-size.tsx | 44 + .../new-york-v4/examples/item-variant.tsx | 54 + .../new-york-v4/examples/kbd-button.tsx | 15 + .../new-york-v4/examples/kbd-demo.tsx | 19 + .../new-york-v4/examples/kbd-group.tsx | 16 + .../new-york-v4/examples/kbd-input-group.tsx | 25 + .../new-york-v4/examples/kbd-tooltip.tsx | 41 + .../new-york-v4/examples/label-demo.tsx | 13 + .../new-york-v4/examples/menubar-demo.tsx | 107 + .../new-york-v4/examples/mode-toggle.tsx | 39 + .../examples/native-select-demo.tsx | 16 + .../examples/native-select-disabled.tsx | 16 + .../examples/native-select-groups.tsx | 38 + .../examples/native-select-invalid.tsx | 16 + .../examples/navigation-menu-demo.tsx | 214 + .../new-york-v4/examples/pagination-demo.tsx | 38 + .../new-york-v4/examples/popover-demo.tsx | 62 + .../new-york-v4/examples/progress-demo.tsx | 15 + .../new-york-v4/examples/radio-group-demo.tsx | 24 + .../examples/resizable-demo-with-handle.tsx | 36 + .../new-york-v4/examples/resizable-demo.tsx | 36 + .../new-york-v4/examples/resizable-handle.tsx | 26 + .../examples/resizable-vertical.tsx | 26 + .../new-york-v4/examples/scroll-area-demo.tsx | 24 + .../examples/scroll-area-horizontal-demo.tsx | 53 + .../new-york-v4/examples/select-demo.tsx | 31 + .../examples/select-scrollable.tsx | 75 + .../new-york-v4/examples/separator-demo.tsx | 22 + .../new-york-v4/examples/sheet-demo.tsx | 47 + .../new-york-v4/examples/sheet-side.tsx | 60 + .../new-york-v4/examples/skeleton-card.tsx | 13 + .../new-york-v4/examples/skeleton-demo.tsx | 13 + .../new-york-v4/examples/slider-demo.tsx | 16 + .../new-york-v4/examples/sonner-demo.tsx | 23 + .../new-york-v4/examples/sonner-types.tsx | 60 + .../new-york-v4/examples/spinner-badge.tsx | 21 + .../new-york-v4/examples/spinner-basic.tsx | 9 + .../new-york-v4/examples/spinner-button.tsx | 21 + .../new-york-v4/examples/spinner-color.tsx | 13 + .../new-york-v4/examples/spinner-custom.tsx | 22 + .../new-york-v4/examples/spinner-demo.tsx | 25 + .../new-york-v4/examples/spinner-empty.tsx | 31 + .../examples/spinner-input-group.tsx | 33 + .../new-york-v4/examples/spinner-item.tsx | 36 + .../new-york-v4/examples/spinner-size.tsx | 12 + .../new-york-v4/examples/switch-demo.tsx | 11 + .../new-york-v4/examples/table-demo.tsx | 87 + .../new-york-v4/examples/tabs-demo.tsx | 80 + .../new-york-v4/examples/textarea-demo.tsx | 5 + .../examples/textarea-disabled.tsx | 5 + .../examples/textarea-with-button.tsx | 11 + .../examples/textarea-with-label.tsx | 11 + .../examples/textarea-with-text.tsx | 14 + .../new-york-v4/examples/toggle-demo.tsx | 17 + .../new-york-v4/examples/toggle-disabled.tsx | 11 + .../examples/toggle-group-demo.tsx | 22 + .../examples/toggle-group-disabled.tsx | 22 + .../new-york-v4/examples/toggle-group-lg.tsx | 22 + .../examples/toggle-group-outline.tsx | 22 + .../examples/toggle-group-single.tsx | 22 + .../new-york-v4/examples/toggle-group-sm.tsx | 22 + .../examples/toggle-group-spacing.tsx | 37 + .../new-york-v4/examples/toggle-lg.tsx | 11 + .../new-york-v4/examples/toggle-outline.tsx | 11 + .../new-york-v4/examples/toggle-sm.tsx | 11 + .../new-york-v4/examples/toggle-with-text.tsx | 12 + .../new-york-v4/examples/tooltip-demo.tsx | 19 + .../examples/typography-blockquote.tsx | 8 + .../new-york-v4/examples/typography-demo.tsx | 119 + .../new-york-v4/examples/typography-h1.tsx | 7 + .../new-york-v4/examples/typography-h2.tsx | 7 + .../new-york-v4/examples/typography-h3.tsx | 7 + .../new-york-v4/examples/typography-h4.tsx | 7 + .../examples/typography-inline-code.tsx | 7 + .../new-york-v4/examples/typography-large.tsx | 3 + .../new-york-v4/examples/typography-lead.tsx | 8 + .../new-york-v4/examples/typography-list.tsx | 9 + .../new-york-v4/examples/typography-muted.tsx | 5 + .../new-york-v4/examples/typography-p.tsx | 8 + .../new-york-v4/examples/typography-small.tsx | 5 + .../new-york-v4/examples/typography-table.tsx | 44 + .../registry/new-york-v4/hooks/_registry.ts | 14 + .../registry/new-york-v4/hooks/use-mobile.ts | 19 + .../new-york-v4/internal/_registry.ts | 135 + .../internal/sidebar-controlled.tsx | 95 + .../new-york-v4/internal/sidebar-demo.tsx | 84 + .../new-york-v4/internal/sidebar-footer.tsx | 65 + .../internal/sidebar-group-action.tsx | 70 + .../internal/sidebar-group-collapsible.tsx | 61 + .../new-york-v4/internal/sidebar-group.tsx | 44 + .../new-york-v4/internal/sidebar-header.tsx | 55 + .../internal/sidebar-menu-action.tsx | 103 + .../internal/sidebar-menu-badge.tsx | 86 + .../internal/sidebar-menu-collapsible.tsx | 195 + .../new-york-v4/internal/sidebar-menu-sub.tsx | 179 + .../new-york-v4/internal/sidebar-menu.tsx | 76 + .../new-york-v4/internal/sidebar-rsc.tsx | 110 + .../src/registry/new-york-v4/lib/_registry.ts | 15 + apps/ui/src/registry/new-york-v4/lib/utils.ts | 6 + apps/ui/src/registry/new-york-v4/registry.ts | 69 + .../src/registry/new-york-v4/ui/_registry.ts | 705 ++ .../src/registry/new-york-v4/ui/accordion.tsx | 65 + .../registry/new-york-v4/ui/alert-dialog.tsx | 195 + apps/ui/src/registry/new-york-v4/ui/alert.tsx | 66 + .../registry/new-york-v4/ui/aspect-ratio.tsx | 10 + .../ui/src/registry/new-york-v4/ui/avatar.tsx | 108 + apps/ui/src/registry/new-york-v4/ui/badge.tsx | 48 + .../registry/new-york-v4/ui/breadcrumb.tsx | 109 + .../registry/new-york-v4/ui/button-group.tsx | 83 + .../ui/src/registry/new-york-v4/ui/button.tsx | 64 + .../src/registry/new-york-v4/ui/calendar.tsx | 219 + apps/ui/src/registry/new-york-v4/ui/card.tsx | 92 + .../src/registry/new-york-v4/ui/carousel.tsx | 240 + apps/ui/src/registry/new-york-v4/ui/chart.tsx | 373 + .../src/registry/new-york-v4/ui/checkbox.tsx | 31 + .../registry/new-york-v4/ui/collapsible.tsx | 32 + .../src/registry/new-york-v4/ui/combobox.tsx | 309 + .../src/registry/new-york-v4/ui/command.tsx | 183 + .../registry/new-york-v4/ui/context-menu.tsx | 251 + .../ui/src/registry/new-york-v4/ui/dialog.tsx | 157 + .../src/registry/new-york-v4/ui/direction.tsx | 21 + .../ui/src/registry/new-york-v4/ui/drawer.tsx | 134 + .../registry/new-york-v4/ui/dropdown-menu.tsx | 256 + apps/ui/src/registry/new-york-v4/ui/empty.tsx | 104 + apps/ui/src/registry/new-york-v4/ui/field.tsx | 247 + apps/ui/src/registry/new-york-v4/ui/form.tsx | 166 + .../registry/new-york-v4/ui/hover-card.tsx | 43 + .../registry/new-york-v4/ui/input-group.tsx | 169 + .../src/registry/new-york-v4/ui/input-otp.tsx | 76 + apps/ui/src/registry/new-york-v4/ui/input.tsx | 21 + apps/ui/src/registry/new-york-v4/ui/item.tsx | 193 + apps/ui/src/registry/new-york-v4/ui/kbd.tsx | 28 + apps/ui/src/registry/new-york-v4/ui/label.tsx | 23 + .../src/registry/new-york-v4/ui/menubar.tsx | 275 + .../registry/new-york-v4/ui/native-select.tsx | 62 + .../new-york-v4/ui/navigation-menu.tsx | 168 + .../registry/new-york-v4/ui/pagination.tsx | 127 + .../src/registry/new-york-v4/ui/popover.tsx | 88 + .../src/registry/new-york-v4/ui/progress.tsx | 30 + .../registry/new-york-v4/ui/radio-group.tsx | 44 + .../src/registry/new-york-v4/ui/resizable.tsx | 52 + .../registry/new-york-v4/ui/scroll-area.tsx | 57 + .../ui/src/registry/new-york-v4/ui/select.tsx | 189 + .../src/registry/new-york-v4/ui/separator.tsx | 27 + apps/ui/src/registry/new-york-v4/ui/sheet.tsx | 142 + .../src/registry/new-york-v4/ui/sidebar.tsx | 725 ++ .../src/registry/new-york-v4/ui/skeleton.tsx | 13 + .../ui/src/registry/new-york-v4/ui/slider.tsx | 62 + .../ui/src/registry/new-york-v4/ui/sonner.tsx | 39 + .../src/registry/new-york-v4/ui/spinner.tsx | 16 + .../ui/src/registry/new-york-v4/ui/switch.tsx | 34 + apps/ui/src/registry/new-york-v4/ui/table.tsx | 115 + apps/ui/src/registry/new-york-v4/ui/tabs.tsx | 90 + .../src/registry/new-york-v4/ui/textarea.tsx | 18 + .../registry/new-york-v4/ui/toggle-group.tsx | 82 + .../ui/src/registry/new-york-v4/ui/toggle.tsx | 46 + .../src/registry/new-york-v4/ui/tooltip.tsx | 56 + apps/ui/src/registry/styles.tsx | 167 + apps/ui/src/registry/styles/style-luma.css | 1365 +++ apps/ui/src/registry/styles/style-lyra.css | 1344 +++ apps/ui/src/registry/styles/style-maia.css | 1365 +++ apps/ui/src/registry/styles/style-mira.css | 1371 +++ apps/ui/src/registry/styles/style-nova.css | 1365 +++ apps/ui/src/registry/styles/style-sera.css | 1357 +++ apps/ui/src/registry/styles/style-vega.css | 1361 +++ apps/ui/src/registry/themes.ts | 1086 ++ apps/ui/src/routes/chat/index.tsx | 22 + .../agent-bridge/use-design-system-coagent.ts | 48 + .../create/components/accent-picker.tsx | 103 + .../routes/create/components/action-menu.tsx | 87 + .../create/components/base-color-picker.tsx | 85 + .../routes/create/components/base-picker.tsx | 85 + .../create/components/chart-color-picker.tsx | 135 + .../routes/create/components/copy-preset.tsx | 44 + .../routes/create/components/customizer.tsx | 118 + .../components/design-system-provider.tsx | 180 + .../routes/create/components/font-picker.tsx | 157 + .../create/components/history-buttons.tsx | 77 + .../create/components/icon-library-picker.tsx | 170 + .../create/components/icon-placeholder.tsx | 74 + .../create/components/item-explorer.tsx | 107 + .../routes/create/components/lock-button.tsx | 43 + .../routes/create/components/main-menu.tsx | 87 + .../routes/create/components/menu-picker.tsx | 168 + .../create/components/mode-switcher.tsx | 86 + .../routes/create/components/open-preset.tsx | 199 + .../src/routes/create/components/picker.tsx | 292 + .../create/components/preset-handler.tsx | 37 + .../create/components/preset-picker.tsx | 124 + .../create/components/preview-style.tsx | 15 + .../create/components/preview-switcher.tsx | 36 + .../src/routes/create/components/preview.tsx | 38 + .../routes/create/components/project-form.tsx | 374 + .../create/components/radius-picker.tsx | 109 + .../create/components/random-button.tsx | 72 + .../routes/create/components/reset-button.tsx | 33 + .../routes/create/components/share-button.tsx | 56 + .../routes/create/components/style-picker.tsx | 95 + .../routes/create/components/theme-picker.tsx | 129 + .../routes/create/components/v0-button.tsx | 56 + .../create/components/welcome-dialog.tsx | 67 + .../routes/create/hooks/use-action-menu.ts | 141 + .../routes/create/hooks/use-design-system.ts | 10 + .../src/routes/create/hooks/use-history.tsx | 174 + .../routes/create/hooks/use-iframe-sync.tsx | 68 + apps/ui/src/routes/create/hooks/use-locks.tsx | 63 + .../routes/create/hooks/use-open-preset.tsx | 80 + .../ui/src/routes/create/hooks/use-random.tsx | 180 + apps/ui/src/routes/create/hooks/use-reset.tsx | 102 + .../routes/create/hooks/use-theme-toggle.tsx | 47 + apps/ui/src/routes/create/layout.tsx | 18 + apps/ui/src/routes/create/lib/api.ts | 71 + apps/ui/src/routes/create/lib/constants.ts | 3 + apps/ui/src/routes/create/lib/fonts.ts | 250 + apps/ui/src/routes/create/lib/merge-theme.ts | 32 + .../create/lib/parse-preset-input.test.ts | 17 + .../routes/create/lib/parse-preset-input.ts | 15 + apps/ui/src/routes/create/lib/preset-code.ts | 34 + .../routes/create/lib/preset-query.test.ts | 34 + apps/ui/src/routes/create/lib/preset-query.ts | 30 + .../src/routes/create/lib/randomize-biases.ts | 108 + .../ui/src/routes/create/lib/search-params.ts | 309 + apps/ui/src/routes/create/lib/templates.ts | 55 + apps/ui/src/routes/create/lib/utils.ts | 44 + apps/ui/src/routes/create/lib/v0.test.ts | 115 + apps/ui/src/routes/create/lib/v0.ts | 617 ++ apps/ui/src/routes/create/page.tsx | 77 + .../routes/create/preview/inline-preview.tsx | 66 + apps/ui/src/shims/next-dynamic.ts | 16 + apps/ui/src/shims/next-font-google.ts | 66 + apps/ui/src/shims/next-form.tsx | 30 + apps/ui/src/shims/next-image.tsx | 28 + apps/ui/src/shims/next-link.tsx | 26 + apps/ui/src/shims/next-navigation.ts | 55 + apps/ui/src/shims/next-script.tsx | 36 + apps/ui/tsconfig.json | 9 +- apps/ui/vite.config.ts | 7 + 1200 files changed, 178297 insertions(+), 42 deletions(-) create mode 100644 apps/ui/src/components/copy-button.tsx create mode 100644 apps/ui/src/components/icons.tsx create mode 100644 apps/ui/src/components/theme-provider.tsx create mode 100644 apps/ui/src/hooks/use-config.ts create mode 100644 apps/ui/src/hooks/use-copy-to-clipboard.ts create mode 100644 apps/ui/src/hooks/use-media-query.tsx create mode 100644 apps/ui/src/hooks/use-meta-color.ts create mode 100644 apps/ui/src/hooks/use-mounted.ts create mode 100644 apps/ui/src/lib/config.ts create mode 100644 apps/ui/src/lib/events.ts create mode 100644 apps/ui/src/lib/font-definitions.ts create mode 100644 apps/ui/src/registry/__blocks__.json create mode 100644 apps/ui/src/registry/base-colors.ts create mode 100644 apps/ui/src/registry/bases.ts create mode 100644 apps/ui/src/registry/bases/README.md create mode 100644 apps/ui/src/registry/bases/__index__.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/_registry.ts create mode 100644 apps/ui/src/registry/bases/base/blocks/dashboard-01/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/dashboard-01/components/chart-area-interactive.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/dashboard-01/components/data-table.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/dashboard-01/components/nav-documents.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/dashboard-01/components/nav-main.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/dashboard-01/components/nav-secondary.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/dashboard-01/components/nav-user.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/dashboard-01/components/section-cards.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/dashboard-01/components/site-header.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/dashboard-01/data.json create mode 100644 apps/ui/src/registry/bases/base/blocks/dashboard-01/page.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/login-01/components/login-form.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/login-01/page.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/login-02/components/login-form.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/login-02/page.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/login-03/components/login-form.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/login-03/page.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/login-04/components/login-form.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/login-04/page.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/login-05/components/login-form.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/login-05/page.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview-02/cards/account-access.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview-02/cards/album-card.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview-02/cards/card-overview.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview-02/cards/catalog-toolbar.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview-02/cards/claimable-balance.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview-02/cards/contribution-history.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview-02/cards/cover-art.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview-02/cards/dividend-income.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview-02/cards/empty-connect-bank.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview-02/cards/empty-distribute-track.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview-02/cards/empty-explore-catalog.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview-02/cards/faq.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview-02/cards/front-door.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview-02/cards/index-investing.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview-02/cards/kitchen-island.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview-02/cards/loading-card.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview-02/cards/new-milestone.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview-02/cards/notification-settings.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview-02/cards/payments.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview-02/cards/payout-threshold.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview-02/cards/power-usage.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview-02/cards/preferences.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview-02/cards/qr-connect.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview-02/cards/receiving-method.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview-02/cards/recent-transactions.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview-02/cards/release-catalog.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview-02/cards/roller-shades.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview-02/cards/savings-progress.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview-02/cards/savings-targets.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview-02/cards/sidebar-nav.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview-02/cards/social-links.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview-02/cards/stock-performance.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview-02/cards/syncing-state.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview-02/cards/transfer-funds.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview-02/cards/upcoming-payments.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview-02/index.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview/cards/activate-agent-dialog.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview/cards/analytics-card.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview/cards/anomaly-alert.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview/cards/assign-issue.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview/cards/bar-chart-card.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview/cards/bar-visualizer.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview/cards/book-appointment.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview/cards/codespaces-card.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview/cards/contributions-activity.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview/cards/contributors.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview/cards/environment-variables.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview/cards/feedback-form.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview/cards/file-upload.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview/cards/github-profile.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview/cards/icon-preview-grid.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview/cards/invite-team.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview/cards/invoice.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview/cards/live-waveform.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview/cards/no-team-members.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview/cards/not-found.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview/cards/observability-card.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview/cards/pie-chart-card.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview/cards/report-bug.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview/cards/shipping-address.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview/cards/shortcuts.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview/cards/skeleton-loading.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview/cards/sleep-report.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview/cards/style-overview.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview/cards/typography-specimen.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview/cards/ui-elements.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview/cards/usage-card.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview/cards/visitors.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview/cards/weekly-fitness-summary.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/preview/index.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-01/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-01/components/search-form.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-01/components/version-switcher.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-01/page.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-02/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-02/components/search-form.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-02/components/version-switcher.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-02/page.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-03/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-03/page.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-04/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-04/page.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-05/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-05/components/search-form.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-05/page.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-06/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-06/components/nav-main.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-06/components/sidebar-opt-in-form.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-06/page.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-07/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-07/components/nav-main.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-07/components/nav-projects.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-07/components/nav-user.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-07/components/team-switcher.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-07/page.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-08/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-08/components/nav-main.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-08/components/nav-projects.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-08/components/nav-secondary.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-08/components/nav-user.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-08/page.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-09/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-09/components/nav-user.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-09/page.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-10/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-10/components/nav-actions.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-10/components/nav-favorites.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-10/components/nav-main.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-10/components/nav-secondary.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-10/components/nav-workspaces.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-10/components/team-switcher.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-10/page.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-11/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-11/page.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-12/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-12/components/calendars.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-12/components/date-picker.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-12/components/nav-user.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-12/page.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-13/components/settings-dialog.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-13/page.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-14/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-14/page.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-15/components/calendars.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-15/components/date-picker.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-15/components/nav-favorites.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-15/components/nav-main.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-15/components/nav-secondary.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-15/components/nav-user.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-15/components/nav-workspaces.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-15/components/sidebar-left.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-15/components/sidebar-right.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-15/components/team-switcher.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-15/page.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-16/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-16/components/nav-main.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-16/components/nav-projects.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-16/components/nav-secondary.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-16/components/nav-user.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-16/components/search-form.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-16/components/site-header.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/sidebar-16/page.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/signup-01/components/signup-form.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/signup-01/page.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/signup-02/components/signup-form.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/signup-02/page.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/signup-03/components/signup-form.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/signup-03/page.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/signup-04/components/signup-form.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/signup-04/page.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/signup-05/components/signup-form.tsx create mode 100644 apps/ui/src/registry/bases/base/blocks/signup-05/page.tsx create mode 100644 apps/ui/src/registry/bases/base/components/_registry.ts create mode 100644 apps/ui/src/registry/bases/base/components/example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/_registry.ts create mode 100644 apps/ui/src/registry/bases/base/examples/accordion-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/alert-dialog-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/alert-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/aspect-ratio-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/avatar-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/badge-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/breadcrumb-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/button-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/button-group-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/calendar-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/card-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/carousel-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/chart-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/checkbox-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/collapsible-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/combobox-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/command-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/component-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/context-menu-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/demo.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/dialog-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/drawer-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/dropdown-menu-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/empty-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/field-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/hover-card-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/input-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/input-group-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/input-otp-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/item-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/kbd-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/label-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/menubar-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/native-select-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/navigation-menu-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/pagination-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/popover-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/progress-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/radio-group-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/resizable-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/scroll-area-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/select-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/separator-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/sheet-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/sidebar-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/sidebar-floating-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/sidebar-icon-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/sidebar-inset-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/skeleton-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/slider-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/sonner-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/spinner-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/switch-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/table-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/tabs-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/textarea-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/toggle-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/toggle-group-example.tsx create mode 100644 apps/ui/src/registry/bases/base/examples/tooltip-example.tsx create mode 100644 apps/ui/src/registry/bases/base/hooks/_registry.ts create mode 100644 apps/ui/src/registry/bases/base/hooks/use-mobile.ts create mode 100644 apps/ui/src/registry/bases/base/internal/_registry.ts create mode 100644 apps/ui/src/registry/bases/base/internal/sink.tsx create mode 100644 apps/ui/src/registry/bases/base/lib/_registry.ts create mode 100644 apps/ui/src/registry/bases/base/lib/utils.ts create mode 100644 apps/ui/src/registry/bases/base/registry.ts create mode 100644 apps/ui/src/registry/bases/base/ui/_registry.ts create mode 100644 apps/ui/src/registry/bases/base/ui/accordion.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/alert-dialog.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/alert.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/aspect-ratio.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/avatar.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/badge.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/breadcrumb.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/button-group.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/button.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/calendar.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/card.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/carousel.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/chart.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/checkbox.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/collapsible.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/combobox.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/command.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/context-menu.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/dialog.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/direction.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/drawer.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/dropdown-menu.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/empty.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/field.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/hover-card.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/input-group.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/input-otp.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/input.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/item.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/kbd.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/label.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/menubar.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/native-select.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/navigation-menu.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/pagination.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/popover.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/progress.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/radio-group.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/resizable.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/scroll-area.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/select.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/separator.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/sheet.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/sidebar.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/skeleton.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/slider.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/sonner.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/spinner.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/switch.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/table.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/tabs.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/textarea.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/toggle-group.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/toggle.tsx create mode 100644 apps/ui/src/registry/bases/base/ui/tooltip.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/_registry.ts create mode 100644 apps/ui/src/registry/bases/radix/blocks/dashboard-01/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/dashboard-01/components/chart-area-interactive.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/dashboard-01/components/data-table.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/dashboard-01/components/nav-documents.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/dashboard-01/components/nav-main.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/dashboard-01/components/nav-secondary.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/dashboard-01/components/nav-user.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/dashboard-01/components/section-cards.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/dashboard-01/components/site-header.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/dashboard-01/data.json create mode 100644 apps/ui/src/registry/bases/radix/blocks/dashboard-01/page.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/login-01/components/login-form.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/login-01/page.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/login-02/components/login-form.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/login-02/page.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/login-03/components/login-form.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/login-03/page.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/login-04/components/login-form.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/login-04/page.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/login-05/components/login-form.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/login-05/page.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview-02/cards/account-access.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview-02/cards/album-card.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview-02/cards/card-overview.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview-02/cards/catalog-toolbar.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview-02/cards/claimable-balance.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview-02/cards/contribution-history.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview-02/cards/cover-art.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview-02/cards/dividend-income.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview-02/cards/empty-connect-bank.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview-02/cards/empty-distribute-track.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview-02/cards/empty-explore-catalog.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview-02/cards/faq.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview-02/cards/front-door.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview-02/cards/index-investing.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview-02/cards/kitchen-island.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview-02/cards/loading-card.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview-02/cards/new-milestone.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview-02/cards/notification-settings.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview-02/cards/payments.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview-02/cards/payout-threshold.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview-02/cards/power-usage.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview-02/cards/preferences.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview-02/cards/qr-connect.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview-02/cards/receiving-method.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview-02/cards/recent-transactions.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview-02/cards/release-catalog.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview-02/cards/roller-shades.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview-02/cards/savings-progress.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview-02/cards/savings-targets.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview-02/cards/sidebar-nav.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview-02/cards/social-links.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview-02/cards/stock-performance.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview-02/cards/syncing-state.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview-02/cards/transfer-funds.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview-02/cards/upcoming-payments.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview-02/index.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview/cards/activate-agent-dialog.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview/cards/analytics-card.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview/cards/anomaly-alert.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview/cards/assign-issue.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview/cards/bar-chart-card.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview/cards/bar-visualizer.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview/cards/book-appointment.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview/cards/codespaces-card.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview/cards/contributions-activity.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview/cards/contributors.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview/cards/environment-variables.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview/cards/feedback-form.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview/cards/file-upload.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview/cards/github-profile.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview/cards/icon-preview-grid.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview/cards/invite-team.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview/cards/invoice.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview/cards/live-waveform.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview/cards/no-team-members.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview/cards/not-found.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview/cards/observability-card.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview/cards/pie-chart-card.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview/cards/report-bug.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview/cards/shipping-address.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview/cards/shortcuts.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview/cards/skeleton-loading.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview/cards/sleep-report.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview/cards/style-overview.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview/cards/typography-specimen.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview/cards/ui-elements.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview/cards/usage-card.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview/cards/visitors.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview/cards/weekly-fitness-summary.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/preview/index.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-01/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-01/components/search-form.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-01/components/version-switcher.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-01/page.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-02/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-02/components/search-form.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-02/components/version-switcher.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-02/page.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-03/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-03/page.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-04/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-04/page.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-05/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-05/components/search-form.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-05/page.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-06/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-06/components/nav-main.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-06/components/sidebar-opt-in-form.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-06/page.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-07/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-07/components/nav-main.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-07/components/nav-projects.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-07/components/nav-user.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-07/components/team-switcher.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-07/page.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-08/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-08/components/nav-main.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-08/components/nav-projects.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-08/components/nav-secondary.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-08/components/nav-user.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-08/page.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-09/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-09/components/nav-user.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-09/page.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-10/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-10/components/nav-actions.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-10/components/nav-favorites.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-10/components/nav-main.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-10/components/nav-secondary.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-10/components/nav-workspaces.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-10/components/team-switcher.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-10/page.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-11/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-11/page.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-12/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-12/components/calendars.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-12/components/date-picker.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-12/components/nav-user.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-12/page.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-13/components/settings-dialog.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-13/page.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-14/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-14/page.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-15/components/calendars.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-15/components/date-picker.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-15/components/nav-favorites.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-15/components/nav-main.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-15/components/nav-secondary.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-15/components/nav-user.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-15/components/nav-workspaces.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-15/components/sidebar-left.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-15/components/sidebar-right.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-15/components/team-switcher.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-15/page.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-16/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-16/components/nav-main.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-16/components/nav-projects.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-16/components/nav-secondary.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-16/components/nav-user.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-16/components/search-form.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-16/components/site-header.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/sidebar-16/page.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/signup-01/components/signup-form.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/signup-01/page.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/signup-02/components/signup-form.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/signup-02/page.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/signup-03/components/signup-form.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/signup-03/page.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/signup-04/components/signup-form.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/signup-04/page.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/signup-05/components/signup-form.tsx create mode 100644 apps/ui/src/registry/bases/radix/blocks/signup-05/page.tsx create mode 100644 apps/ui/src/registry/bases/radix/components/_registry.ts create mode 100644 apps/ui/src/registry/bases/radix/components/example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/_registry.ts create mode 100644 apps/ui/src/registry/bases/radix/examples/accordion-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/alert-dialog-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/alert-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/aspect-ratio-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/avatar-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/badge-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/breadcrumb-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/button-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/button-group-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/calendar-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/card-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/carousel-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/chart-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/checkbox-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/collapsible-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/combobox-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/command-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/component-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/context-menu-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/demo.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/dialog-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/drawer-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/dropdown-menu-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/empty-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/field-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/hover-card-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/input-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/input-group-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/input-otp-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/item-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/kbd-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/label-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/menubar-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/native-select-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/navigation-menu-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/pagination-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/popover-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/progress-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/radio-group-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/resizable-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/scroll-area-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/select-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/separator-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/sheet-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/sidebar-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/sidebar-floating-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/sidebar-icon-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/sidebar-inset-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/skeleton-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/slider-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/sonner-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/spinner-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/switch-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/table-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/tabs-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/textarea-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/toggle-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/toggle-group-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/examples/tooltip-example.tsx create mode 100644 apps/ui/src/registry/bases/radix/hooks/_registry.ts create mode 100644 apps/ui/src/registry/bases/radix/hooks/use-mobile.ts create mode 100644 apps/ui/src/registry/bases/radix/internal/_registry.ts create mode 100644 apps/ui/src/registry/bases/radix/internal/sink.tsx create mode 100644 apps/ui/src/registry/bases/radix/lib/_registry.ts create mode 100644 apps/ui/src/registry/bases/radix/lib/utils.ts create mode 100644 apps/ui/src/registry/bases/radix/registry.ts create mode 100644 apps/ui/src/registry/bases/radix/ui/_registry.ts create mode 100644 apps/ui/src/registry/bases/radix/ui/accordion.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/alert-dialog.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/alert.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/aspect-ratio.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/avatar.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/badge.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/breadcrumb.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/button-group.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/button.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/calendar.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/card.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/carousel.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/chart.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/checkbox.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/collapsible.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/combobox.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/command.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/context-menu.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/dialog.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/direction.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/drawer.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/dropdown-menu.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/empty.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/field.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/hover-card.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/input-group.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/input-otp.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/input.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/item.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/kbd.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/label.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/menubar.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/native-select.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/navigation-menu.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/pagination.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/popover.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/progress.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/radio-group.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/resizable.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/scroll-area.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/select.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/separator.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/sheet.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/sidebar.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/skeleton.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/slider.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/sonner.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/spinner.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/switch.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/table.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/tabs.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/textarea.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/toggle-group.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/toggle.tsx create mode 100644 apps/ui/src/registry/bases/radix/ui/tooltip.tsx create mode 100644 apps/ui/src/registry/config.ts create mode 100644 apps/ui/src/registry/directory.json create mode 100644 apps/ui/src/registry/fonts.ts create mode 100644 apps/ui/src/registry/icons/__hugeicons__.ts create mode 100644 apps/ui/src/registry/icons/__lucide__.ts create mode 100644 apps/ui/src/registry/icons/__phosphor__.ts create mode 100644 apps/ui/src/registry/icons/__remixicon__.ts create mode 100644 apps/ui/src/registry/icons/__tabler__.ts create mode 100644 apps/ui/src/registry/icons/create-icon-loader.tsx create mode 100644 apps/ui/src/registry/icons/icon-hugeicons.tsx create mode 100644 apps/ui/src/registry/icons/icon-lucide.tsx create mode 100644 apps/ui/src/registry/icons/icon-phosphor.tsx create mode 100644 apps/ui/src/registry/icons/icon-remixicon.tsx create mode 100644 apps/ui/src/registry/icons/icon-tabler.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/_registry.ts create mode 100644 apps/ui/src/registry/new-york-v4/blocks/dashboard-01/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/dashboard-01/components/chart-area-interactive.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/dashboard-01/components/data-table.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/dashboard-01/components/nav-documents.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/dashboard-01/components/nav-main.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/dashboard-01/components/nav-secondary.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/dashboard-01/components/nav-user.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/dashboard-01/components/section-cards.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/dashboard-01/components/site-header.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/dashboard-01/data.json create mode 100644 apps/ui/src/registry/new-york-v4/blocks/dashboard-01/page.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/login-01/components/login-form.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/login-01/page.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/login-02/components/login-form.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/login-02/page.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/login-03/components/login-form.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/login-03/page.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/login-04/components/login-form.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/login-04/page.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/login-05/components/login-form.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/login-05/page.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-01/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-01/components/search-form.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-01/components/version-switcher.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-01/page.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-02/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-02/components/search-form.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-02/components/version-switcher.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-02/page.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-03/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-03/page.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-04/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-04/page.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-05/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-05/components/search-form.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-05/page.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-06/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-06/components/nav-main.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-06/components/sidebar-opt-in-form.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-06/page.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-07/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-07/components/nav-main.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-07/components/nav-projects.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-07/components/nav-user.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-07/components/team-switcher.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-07/page.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-08/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-08/components/nav-main.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-08/components/nav-projects.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-08/components/nav-secondary.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-08/components/nav-user.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-08/page.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-09/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-09/components/nav-user.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-09/page.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-10/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-10/components/nav-actions.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-10/components/nav-favorites.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-10/components/nav-main.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-10/components/nav-secondary.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-10/components/nav-workspaces.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-10/components/team-switcher.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-10/page.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-11/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-11/page.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-12/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-12/components/calendars.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-12/components/date-picker.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-12/components/nav-user.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-12/page.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-13/components/settings-dialog.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-13/page.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-14/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-14/page.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-15/components/calendars.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-15/components/date-picker.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-15/components/nav-favorites.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-15/components/nav-main.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-15/components/nav-secondary.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-15/components/nav-user.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-15/components/nav-workspaces.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-15/components/sidebar-left.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-15/components/sidebar-right.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-15/components/team-switcher.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-15/page.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-16/components/app-sidebar.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-16/components/nav-main.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-16/components/nav-projects.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-16/components/nav-secondary.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-16/components/nav-user.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-16/components/search-form.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-16/components/site-header.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/sidebar-16/page.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/signup-01/components/signup-form.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/signup-01/page.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/signup-02/components/signup-form.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/signup-02/page.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/signup-03/components/signup-form.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/signup-03/page.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/signup-04/components/signup-form.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/signup-04/page.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/signup-05/components/signup-form.tsx create mode 100644 apps/ui/src/registry/new-york-v4/blocks/signup-05/page.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/_registry.ts create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-area-axes.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-area-default.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-area-gradient.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-area-icons.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-area-interactive.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-area-legend.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-area-linear.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-area-stacked-expand.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-area-stacked.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-area-step.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-bar-active.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-bar-default.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-bar-horizontal.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-bar-interactive.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-bar-label-custom.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-bar-label.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-bar-mixed.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-bar-multiple.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-bar-negative.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-bar-stacked.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-line-default.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-line-dots-colors.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-line-dots-custom.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-line-dots.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-line-interactive.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-line-label-custom.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-line-label.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-line-linear.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-line-multiple.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-line-step.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-pie-donut-active.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-pie-donut-text.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-pie-donut.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-pie-interactive.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-pie-label-custom.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-pie-label-list.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-pie-label.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-pie-legend.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-pie-separator-none.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-pie-simple.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-pie-stacked.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-radar-default.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-radar-dots.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-radar-grid-circle-fill.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-radar-grid-circle-no-lines.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-radar-grid-circle.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-radar-grid-custom.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-radar-grid-fill.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-radar-grid-none.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-radar-icons.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-radar-label-custom.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-radar-legend.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-radar-lines-only.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-radar-multiple.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-radar-radius.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-radial-grid.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-radial-label.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-radial-shape.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-radial-simple.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-radial-stacked.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-radial-text.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-tooltip-advanced.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-tooltip-default.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-tooltip-formatter.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-tooltip-icons.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-tooltip-indicator-line.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-tooltip-indicator-none.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-tooltip-label-custom.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-tooltip-label-formatter.tsx create mode 100644 apps/ui/src/registry/new-york-v4/charts/chart-tooltip-label-none.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/_registry.ts create mode 100644 apps/ui/src/registry/new-york-v4/examples/accordion-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/alert-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/alert-destructive.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/alert-dialog-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/aspect-ratio-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/avatar-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/badge-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/badge-destructive.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/badge-outline.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/badge-secondary.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/breadcrumb-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/breadcrumb-dropdown.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/breadcrumb-ellipsis.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/breadcrumb-link.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/breadcrumb-responsive.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/breadcrumb-separator.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/button-as-child.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/button-default.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/button-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/button-destructive.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/button-ghost.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/button-group-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/button-group-dropdown.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/button-group-input-group.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/button-group-input.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/button-group-nested.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/button-group-orientation.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/button-group-popover.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/button-group-select.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/button-group-separator.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/button-group-size.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/button-group-split.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/button-icon.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/button-link.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/button-loading.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/button-outline.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/button-rounded.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/button-secondary.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/button-size.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/button-with-icon.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/calendar-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/calendar-hijri.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/card-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/card-with-form.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/carousel-api.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/carousel-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/carousel-orientation.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/carousel-plugin.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/carousel-size.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/carousel-spacing.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/chart-bar-demo-axis.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/chart-bar-demo-grid.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/chart-bar-demo-legend.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/chart-bar-demo-tooltip.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/chart-bar-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/chart-tooltip-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/checkbox-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/checkbox-disabled.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/checkbox-with-text.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/collapsible-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/combobox-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/combobox-dropdown-menu.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/combobox-popover.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/combobox-responsive.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/command-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/command-dialog.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/context-menu-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/data-table-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/date-picker-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/date-picker-with-presets.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/date-picker-with-range.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/dialog-close-button.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/dialog-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/drawer-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/drawer-dialog.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/dropdown-menu-checkboxes.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/dropdown-menu-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/dropdown-menu-dialog.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/dropdown-menu-radio-group.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/empty-avatar-group.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/empty-avatar.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/empty-background.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/empty-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/empty-icon.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/empty-input-group.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/empty-outline.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/field-checkbox.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/field-choice-card.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/field-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/field-fieldset.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/field-group.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/field-input.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/field-radio.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/field-responsive.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/field-select.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/field-slider.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/field-switch.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/field-textarea.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/form-next-complex-action.ts create mode 100644 apps/ui/src/registry/new-york-v4/examples/form-next-complex-schema.ts create mode 100644 apps/ui/src/registry/new-york-v4/examples/form-next-complex.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/form-next-demo-action.ts create mode 100644 apps/ui/src/registry/new-york-v4/examples/form-next-demo-schema.ts create mode 100644 apps/ui/src/registry/new-york-v4/examples/form-next-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/form-rhf-array.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/form-rhf-checkbox.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/form-rhf-complex.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/form-rhf-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/form-rhf-input.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/form-rhf-password.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/form-rhf-radiogroup.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/form-rhf-select.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/form-rhf-switch.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/form-rhf-textarea.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/form-tanstack-array.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/form-tanstack-checkbox.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/form-tanstack-complex.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/form-tanstack-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/form-tanstack-input.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/form-tanstack-radiogroup.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/form-tanstack-select.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/form-tanstack-switch.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/form-tanstack-textarea.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/hover-card-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/input-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/input-disabled.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/input-file.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/input-group-button-group.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/input-group-button.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/input-group-custom.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/input-group-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/input-group-dropdown.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/input-group-icon.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/input-group-label.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/input-group-spinner.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/input-group-text.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/input-group-textarea.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/input-group-tooltip.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/input-otp-controlled.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/input-otp-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/input-otp-pattern.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/input-otp-separator.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/input-with-button.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/input-with-label.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/input-with-text.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/item-avatar.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/item-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/item-dropdown.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/item-group.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/item-header.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/item-icon.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/item-image.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/item-link.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/item-size.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/item-variant.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/kbd-button.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/kbd-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/kbd-group.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/kbd-input-group.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/kbd-tooltip.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/label-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/menubar-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/mode-toggle.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/native-select-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/native-select-disabled.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/native-select-groups.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/native-select-invalid.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/navigation-menu-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/pagination-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/popover-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/progress-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/radio-group-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/resizable-demo-with-handle.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/resizable-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/resizable-handle.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/resizable-vertical.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/scroll-area-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/scroll-area-horizontal-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/select-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/select-scrollable.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/separator-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/sheet-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/sheet-side.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/skeleton-card.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/skeleton-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/slider-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/sonner-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/sonner-types.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/spinner-badge.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/spinner-basic.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/spinner-button.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/spinner-color.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/spinner-custom.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/spinner-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/spinner-empty.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/spinner-input-group.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/spinner-item.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/spinner-size.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/switch-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/table-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/tabs-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/textarea-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/textarea-disabled.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/textarea-with-button.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/textarea-with-label.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/textarea-with-text.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/toggle-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/toggle-disabled.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/toggle-group-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/toggle-group-disabled.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/toggle-group-lg.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/toggle-group-outline.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/toggle-group-single.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/toggle-group-sm.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/toggle-group-spacing.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/toggle-lg.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/toggle-outline.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/toggle-sm.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/toggle-with-text.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/tooltip-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/typography-blockquote.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/typography-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/typography-h1.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/typography-h2.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/typography-h3.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/typography-h4.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/typography-inline-code.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/typography-large.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/typography-lead.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/typography-list.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/typography-muted.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/typography-p.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/typography-small.tsx create mode 100644 apps/ui/src/registry/new-york-v4/examples/typography-table.tsx create mode 100644 apps/ui/src/registry/new-york-v4/hooks/_registry.ts create mode 100644 apps/ui/src/registry/new-york-v4/hooks/use-mobile.ts create mode 100644 apps/ui/src/registry/new-york-v4/internal/_registry.ts create mode 100644 apps/ui/src/registry/new-york-v4/internal/sidebar-controlled.tsx create mode 100644 apps/ui/src/registry/new-york-v4/internal/sidebar-demo.tsx create mode 100644 apps/ui/src/registry/new-york-v4/internal/sidebar-footer.tsx create mode 100644 apps/ui/src/registry/new-york-v4/internal/sidebar-group-action.tsx create mode 100644 apps/ui/src/registry/new-york-v4/internal/sidebar-group-collapsible.tsx create mode 100644 apps/ui/src/registry/new-york-v4/internal/sidebar-group.tsx create mode 100644 apps/ui/src/registry/new-york-v4/internal/sidebar-header.tsx create mode 100644 apps/ui/src/registry/new-york-v4/internal/sidebar-menu-action.tsx create mode 100644 apps/ui/src/registry/new-york-v4/internal/sidebar-menu-badge.tsx create mode 100644 apps/ui/src/registry/new-york-v4/internal/sidebar-menu-collapsible.tsx create mode 100644 apps/ui/src/registry/new-york-v4/internal/sidebar-menu-sub.tsx create mode 100644 apps/ui/src/registry/new-york-v4/internal/sidebar-menu.tsx create mode 100644 apps/ui/src/registry/new-york-v4/internal/sidebar-rsc.tsx create mode 100644 apps/ui/src/registry/new-york-v4/lib/_registry.ts create mode 100644 apps/ui/src/registry/new-york-v4/lib/utils.ts create mode 100644 apps/ui/src/registry/new-york-v4/registry.ts create mode 100644 apps/ui/src/registry/new-york-v4/ui/_registry.ts create mode 100644 apps/ui/src/registry/new-york-v4/ui/accordion.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/alert-dialog.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/alert.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/aspect-ratio.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/avatar.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/badge.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/breadcrumb.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/button-group.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/button.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/calendar.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/card.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/carousel.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/chart.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/checkbox.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/collapsible.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/combobox.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/command.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/context-menu.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/dialog.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/direction.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/drawer.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/dropdown-menu.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/empty.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/field.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/form.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/hover-card.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/input-group.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/input-otp.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/input.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/item.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/kbd.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/label.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/menubar.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/native-select.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/navigation-menu.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/pagination.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/popover.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/progress.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/radio-group.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/resizable.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/scroll-area.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/select.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/separator.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/sheet.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/sidebar.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/skeleton.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/slider.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/sonner.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/spinner.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/switch.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/table.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/tabs.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/textarea.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/toggle-group.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/toggle.tsx create mode 100644 apps/ui/src/registry/new-york-v4/ui/tooltip.tsx create mode 100644 apps/ui/src/registry/styles.tsx create mode 100644 apps/ui/src/registry/styles/style-luma.css create mode 100644 apps/ui/src/registry/styles/style-lyra.css create mode 100644 apps/ui/src/registry/styles/style-maia.css create mode 100644 apps/ui/src/registry/styles/style-mira.css create mode 100644 apps/ui/src/registry/styles/style-nova.css create mode 100644 apps/ui/src/registry/styles/style-sera.css create mode 100644 apps/ui/src/registry/styles/style-vega.css create mode 100644 apps/ui/src/registry/themes.ts create mode 100644 apps/ui/src/routes/chat/index.tsx create mode 100644 apps/ui/src/routes/create/agent-bridge/use-design-system-coagent.ts create mode 100644 apps/ui/src/routes/create/components/accent-picker.tsx create mode 100644 apps/ui/src/routes/create/components/action-menu.tsx create mode 100644 apps/ui/src/routes/create/components/base-color-picker.tsx create mode 100644 apps/ui/src/routes/create/components/base-picker.tsx create mode 100644 apps/ui/src/routes/create/components/chart-color-picker.tsx create mode 100644 apps/ui/src/routes/create/components/copy-preset.tsx create mode 100644 apps/ui/src/routes/create/components/customizer.tsx create mode 100644 apps/ui/src/routes/create/components/design-system-provider.tsx create mode 100644 apps/ui/src/routes/create/components/font-picker.tsx create mode 100644 apps/ui/src/routes/create/components/history-buttons.tsx create mode 100644 apps/ui/src/routes/create/components/icon-library-picker.tsx create mode 100644 apps/ui/src/routes/create/components/icon-placeholder.tsx create mode 100644 apps/ui/src/routes/create/components/item-explorer.tsx create mode 100644 apps/ui/src/routes/create/components/lock-button.tsx create mode 100644 apps/ui/src/routes/create/components/main-menu.tsx create mode 100644 apps/ui/src/routes/create/components/menu-picker.tsx create mode 100644 apps/ui/src/routes/create/components/mode-switcher.tsx create mode 100644 apps/ui/src/routes/create/components/open-preset.tsx create mode 100644 apps/ui/src/routes/create/components/picker.tsx create mode 100644 apps/ui/src/routes/create/components/preset-handler.tsx create mode 100644 apps/ui/src/routes/create/components/preset-picker.tsx create mode 100644 apps/ui/src/routes/create/components/preview-style.tsx create mode 100644 apps/ui/src/routes/create/components/preview-switcher.tsx create mode 100644 apps/ui/src/routes/create/components/preview.tsx create mode 100644 apps/ui/src/routes/create/components/project-form.tsx create mode 100644 apps/ui/src/routes/create/components/radius-picker.tsx create mode 100644 apps/ui/src/routes/create/components/random-button.tsx create mode 100644 apps/ui/src/routes/create/components/reset-button.tsx create mode 100644 apps/ui/src/routes/create/components/share-button.tsx create mode 100644 apps/ui/src/routes/create/components/style-picker.tsx create mode 100644 apps/ui/src/routes/create/components/theme-picker.tsx create mode 100644 apps/ui/src/routes/create/components/v0-button.tsx create mode 100644 apps/ui/src/routes/create/components/welcome-dialog.tsx create mode 100644 apps/ui/src/routes/create/hooks/use-action-menu.ts create mode 100644 apps/ui/src/routes/create/hooks/use-design-system.ts create mode 100644 apps/ui/src/routes/create/hooks/use-history.tsx create mode 100644 apps/ui/src/routes/create/hooks/use-iframe-sync.tsx create mode 100644 apps/ui/src/routes/create/hooks/use-locks.tsx create mode 100644 apps/ui/src/routes/create/hooks/use-open-preset.tsx create mode 100644 apps/ui/src/routes/create/hooks/use-random.tsx create mode 100644 apps/ui/src/routes/create/hooks/use-reset.tsx create mode 100644 apps/ui/src/routes/create/hooks/use-theme-toggle.tsx create mode 100644 apps/ui/src/routes/create/layout.tsx create mode 100644 apps/ui/src/routes/create/lib/api.ts create mode 100644 apps/ui/src/routes/create/lib/constants.ts create mode 100644 apps/ui/src/routes/create/lib/fonts.ts create mode 100644 apps/ui/src/routes/create/lib/merge-theme.ts create mode 100644 apps/ui/src/routes/create/lib/parse-preset-input.test.ts create mode 100644 apps/ui/src/routes/create/lib/parse-preset-input.ts create mode 100644 apps/ui/src/routes/create/lib/preset-code.ts create mode 100644 apps/ui/src/routes/create/lib/preset-query.test.ts create mode 100644 apps/ui/src/routes/create/lib/preset-query.ts create mode 100644 apps/ui/src/routes/create/lib/randomize-biases.ts create mode 100644 apps/ui/src/routes/create/lib/search-params.ts create mode 100644 apps/ui/src/routes/create/lib/templates.ts create mode 100644 apps/ui/src/routes/create/lib/utils.ts create mode 100644 apps/ui/src/routes/create/lib/v0.test.ts create mode 100644 apps/ui/src/routes/create/lib/v0.ts create mode 100644 apps/ui/src/routes/create/page.tsx create mode 100644 apps/ui/src/routes/create/preview/inline-preview.tsx create mode 100644 apps/ui/src/shims/next-dynamic.ts create mode 100644 apps/ui/src/shims/next-font-google.ts create mode 100644 apps/ui/src/shims/next-form.tsx create mode 100644 apps/ui/src/shims/next-image.tsx create mode 100644 apps/ui/src/shims/next-link.tsx create mode 100644 apps/ui/src/shims/next-navigation.ts create mode 100644 apps/ui/src/shims/next-script.tsx diff --git a/.gitignore b/.gitignore index 14620ff..5e2480e 100644 --- a/.gitignore +++ b/.gitignore @@ -49,3 +49,6 @@ bun.lockb # LangGraph API .langgraph_api + +# local shadcn reference checkout (not a workspace) +shadcn/ diff --git a/apps/agent/main.py b/apps/agent/main.py index c9934f6..4dd5f5c 100644 --- a/apps/agent/main.py +++ b/apps/agent/main.py @@ -23,6 +23,7 @@ class AgentState(CopilotKitState): proverbs: List[str] + design_params: dict[str, Any] class AgentContext(TypedDict, total=False): output_schema: dict[str, Any] @@ -39,7 +40,16 @@ class AgentContext(TypedDict, total=False): "Only wrap UI components into cards. For Markdown, don't wrap it in this. Use rows for " "side-by-side layouts (2 columns max). Keep it clean and simple.\n" "When generating large components, reports, dashboards, etc. Make sure the entire thing is in a card. " - "Only use components when necessary. Like for example just showing text you probably don't need to. Use your judgment." + "Only use components when necessary. Like for example just showing text you probably don't need to. Use your judgment.\n\n" + "When the user is on the /create route (the design-system customizer), you can help them tailor their theme. " + "The frontend exposes the current design parameters via readable context and a tool named 'updateDesignSystem'. " + "Valid parameters: base (radix|base), style (vega|nova|maia|lyra|mira|luma|sera), baseColor (neutral|gray|zinc|slate|stone|taupe), " + "theme (same palette as baseColor), chartColor (same palette), radius (default|none|small|medium|large), " + "font (inter|geist|figtree|jetbrains-mono|noto-sans|...), fontHeading (inherit or a font value), " + "iconLibrary (lucide|tabler|phosphor|hugeicons|remixicon), menuAccent (subtle|bold), " + "menuColor (default|inverted|default-translucent|inverted-translucent). " + "When the user asks you to change the look (e.g. 'make it pink with a serif body font and rounded corners'), " + "call updateDesignSystem with the subset of fields you want to change. Only pass fields you are changing." ), ) diff --git a/apps/ui/package.json b/apps/ui/package.json index 1a82eeb..180b4ba 100644 --- a/apps/ui/package.json +++ b/apps/ui/package.json @@ -12,32 +12,53 @@ "@base-ui/react": "^1.2.0", "@copilotkit/react-core": "1.54.0", "@copilotkit/react-ui": "1.54.0", + "@fontsource/figtree": "^5.2.10", + "@fontsource/geist": "^5.2.8", + "@fontsource/inter": "^5.2.8", + "@fontsource/jetbrains-mono": "^5.2.8", + "@fontsource/noto-sans": "^5.2.10", + "@fontsource/playfair-display": "^5.2.8", "@frenchfryai/core": "0.1.1", "@frenchfryai/react": "0.1.1", "@frenchfryai/runtime": "0.1.1", "@hashbrownai/core": "0.5.0-beta.4", "@hashbrownai/react": "0.5.0-beta.4", "@hookform/resolvers": "^5.2.2", + "@hugeicons/core-free-icons": "^4.1.1", + "@hugeicons/react": "^1.1.6", + "@phosphor-icons/react": "^2.1.10", + "@remixicon/react": "^4.9.0", + "@tabler/icons-react": "^3.41.1", + "@tanstack/react-form": "^1.29.0", + "change-case": "^5.4.4", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "cmdk": "^1.1.1", "date-fns": "^4.1.0", + "dedent": "^1.7.2", "embla-carousel-react": "^8.6.0", "figma-squircle": "^1.1.0", "input-otp": "^1.4.2", + "jotai": "^2.19.1", "lucide-react": "^0.575.0", + "motion": "^12.38.0", "next-themes": "^0.4.6", + "nuqs": "^2.8.9", "prism-react-renderer": "^2.4.1", "radix-ui": "^1.4.3", "react": "^19.2.3", "react-day-picker": "^9.13.2", "react-dom": "^19.2.3", "react-hook-form": "^7.71.2", + "react-qr-code": "^2.0.18", "react-resizable-panels": "^4.6.5", + "react-router-dom": "^7.14.1", "recharts": "2.15.4", "sonner": "^2.0.7", "streamdown": "^2.1.0", + "swr": "^2.4.1", "tailwind-merge": "^3.5.0", + "ts-morph": "^28.0.0", "vaul": "^1.1.2", "zod": "^4.3.6" }, @@ -46,7 +67,7 @@ "@types/react": "^19", "@types/react-dom": "^19", "@vitejs/plugin-react": "^4", - "shadcn": "^3.8.5", + "shadcn": "^4.3.0", "tailwindcss": "^4", "tw-animate-css": "^1.4.0", "typescript": "^5", diff --git a/apps/ui/src/App.tsx b/apps/ui/src/App.tsx index 49e3c06..785518d 100644 --- a/apps/ui/src/App.tsx +++ b/apps/ui/src/App.tsx @@ -1,11 +1,9 @@ import { CopilotKit } from "@copilotkit/react-core"; -import { useAgentContext, CopilotChat } from "@copilotkit/react-core/v2"; +import { NuqsAdapter } from "nuqs/adapters/react-router/v7"; +import { BrowserRouter, Route, Routes } from "react-router-dom"; -import { AppHeader } from "@/components/app-header"; -import { useChatKit } from "@/components/chat/chat-kit"; -import { s } from "@hashbrownai/core"; -import { chatTheme } from "@/lib/chat-theme"; -import { useInitialSuggestions } from "./lib/suggestions"; +import { ChatRoute } from "@/routes/chat"; +import { CreateRoute } from "@/routes/create/page"; export function App() { return ( @@ -17,26 +15,14 @@ export function App() { } showDevConsole={false} > - + + + + } /> + } /> + + + ); } - -export function Page() { - const chatKit = useChatKit(); - useAgentContext({ description: "output_schema", value: s.toJsonSchema(chatKit.schema) }); - useInitialSuggestions(); - - return ; -} - -function Chat() { - return ( -
- -
- -
-
- ); -} diff --git a/apps/ui/src/components/copy-button.tsx b/apps/ui/src/components/copy-button.tsx new file mode 100644 index 0000000..0e81e8d --- /dev/null +++ b/apps/ui/src/components/copy-button.tsx @@ -0,0 +1,120 @@ + +import * as React from "react" +import { IconCheck, IconCopy } from "@tabler/icons-react" + +import { trackEvent, type Event } from "@/lib/events" +import { cn } from "@/lib/utils" +import { Button } from "@/registry/new-york-v4/ui/button" + +function legacyCopyToClipboard(value: string) { + const textArea = document.createElement("textarea") + textArea.value = value + textArea.setAttribute("readonly", "") + textArea.style.position = "fixed" + textArea.style.opacity = "0" + textArea.style.pointerEvents = "none" + + document.body.appendChild(textArea) + textArea.focus() + textArea.select() + textArea.setSelectionRange(0, value.length) + + let hasCopied = false + try { + hasCopied = document.execCommand("copy") + } catch { + hasCopied = false + } + + document.body.removeChild(textArea) + return hasCopied +} + +export async function copyToClipboardWithMeta(value: string, event?: Event) { + if (typeof window === "undefined") { + return false + } + + if (!value) { + return false + } + + let hasCopied = false + + if (navigator.clipboard?.writeText) { + try { + await navigator.clipboard.writeText(value) + hasCopied = true + } catch { + hasCopied = legacyCopyToClipboard(value) + } + } else { + hasCopied = legacyCopyToClipboard(value) + } + + if (!hasCopied) { + return false + } + + if (event) { + trackEvent(event) + } + + return true +} + +export function CopyButton({ + value, + className, + variant = "ghost", + event, + ...props +}: React.ComponentProps & { + value: string + src?: string + event?: Event["name"] + tooltip?: string +}) { + const [hasCopied, setHasCopied] = React.useState(false) + + React.useEffect(() => { + if (hasCopied) { + const timer = setTimeout(() => setHasCopied(false), 2000) + return () => clearTimeout(timer) + } + }, [hasCopied]) + + return ( + + ) +} diff --git a/apps/ui/src/components/icons.tsx b/apps/ui/src/components/icons.tsx new file mode 100644 index 0000000..214ace1 --- /dev/null +++ b/apps/ui/src/components/icons.tsx @@ -0,0 +1,207 @@ +import { FileIcon } from "lucide-react" + +type IconProps = React.HTMLAttributes + +export const Icons = { + logo: (props: IconProps) => ( + + + + + + ), + twitter: (props: IconProps) => ( + + + + ), + gitHub: (props: IconProps) => ( + + + + ), + radix: (props: IconProps) => ( + + + + + + ), + aria: (props: IconProps) => ( + + + + ), + npm: (props: IconProps) => ( + + + + ), + yarn: (props: IconProps) => ( + + + + ), + pnpm: (props: IconProps) => ( + + + + ), + react: (props: IconProps) => ( + + + + ), + tailwind: (props: IconProps) => ( + + + + ), + google: (props: IconProps) => ( + + + + ), + apple: (props: IconProps) => ( + + + + ), + paypal: (props: IconProps) => ( + + + + ), + spinner: (props: IconProps) => ( + + + + ), + json: (props: IconProps) => ( + + + + ), + ts: (props: IconProps) => ( + + + + ), + css: (props: IconProps) => ( + + + + ), + bash: (props: IconProps) => ( + + + + ), + v0: (props: IconProps) => ( + + + + + ), +} + +export function getIconForLanguageExtension(language: string) { + switch (language) { + case "json": + return + case "css": + return + case "js": + case "jsx": + case "ts": + case "tsx": + case "typescript": + return + default: + return + } +} diff --git a/apps/ui/src/components/theme-provider.tsx b/apps/ui/src/components/theme-provider.tsx new file mode 100644 index 0000000..aa1a205 --- /dev/null +++ b/apps/ui/src/components/theme-provider.tsx @@ -0,0 +1,54 @@ + +import * as React from "react" +import { ThemeProvider as NextThemesProvider, useTheme } from "next-themes" + +function ThemeShortcut() { + const { setTheme, resolvedTheme } = useTheme() + + React.useEffect(() => { + const down = (e: KeyboardEvent) => { + if ( + (e.key === "d" || e.key === "D") && + !e.metaKey && + !e.ctrlKey && + !e.altKey + ) { + if ( + (e.target instanceof HTMLElement && e.target.isContentEditable) || + e.target instanceof HTMLInputElement || + e.target instanceof HTMLTextAreaElement || + e.target instanceof HTMLSelectElement + ) { + return + } + + e.preventDefault() + setTheme(resolvedTheme === "dark" ? "light" : "dark") + } + } + + document.addEventListener("keydown", down) + return () => document.removeEventListener("keydown", down) + }, [resolvedTheme, setTheme]) + + return null +} + +export function ThemeProvider({ + children, + ...props +}: React.ComponentProps) { + return ( + + + {children} + + ) +} diff --git a/apps/ui/src/hooks/use-config.ts b/apps/ui/src/hooks/use-config.ts new file mode 100644 index 0000000..f607114 --- /dev/null +++ b/apps/ui/src/hooks/use-config.ts @@ -0,0 +1,18 @@ +import { useAtom } from "jotai" +import { atomWithStorage } from "jotai/utils" + +type Config = { + style: "new-york-v4" + packageManager: "npm" | "yarn" | "pnpm" | "bun" + installationType: "cli" | "manual" +} + +const configAtom = atomWithStorage("config", { + style: "new-york-v4", + packageManager: "pnpm", + installationType: "cli", +}) + +export function useConfig() { + return useAtom(configAtom) +} diff --git a/apps/ui/src/hooks/use-copy-to-clipboard.ts b/apps/ui/src/hooks/use-copy-to-clipboard.ts new file mode 100644 index 0000000..0a01ade --- /dev/null +++ b/apps/ui/src/hooks/use-copy-to-clipboard.ts @@ -0,0 +1,79 @@ + +import * as React from "react" + +function legacyCopyToClipboard(value: string) { + const textArea = document.createElement("textarea") + textArea.value = value + textArea.setAttribute("readonly", "") + textArea.style.position = "fixed" + textArea.style.opacity = "0" + textArea.style.pointerEvents = "none" + + document.body.appendChild(textArea) + textArea.focus() + textArea.select() + textArea.setSelectionRange(0, value.length) + + let hasCopied = false + try { + hasCopied = document.execCommand("copy") + } catch { + hasCopied = false + } + + document.body.removeChild(textArea) + return hasCopied +} + +export function useCopyToClipboard({ + timeout = 2000, + onCopy, +}: { + timeout?: number + onCopy?: () => void +} = {}) { + const [isCopied, setIsCopied] = React.useState(false) + + const copyToClipboard = async (value: string) => { + if (typeof window === "undefined") { + return false + } + + if (!value) { + return false + } + + let hasCopied = false + + if (navigator.clipboard?.writeText) { + try { + await navigator.clipboard.writeText(value) + hasCopied = true + } catch { + hasCopied = legacyCopyToClipboard(value) + } + } else { + hasCopied = legacyCopyToClipboard(value) + } + + if (!hasCopied) { + return false + } + + setIsCopied(true) + + if (onCopy) { + onCopy() + } + + if (timeout !== 0) { + setTimeout(() => { + setIsCopied(false) + }, timeout) + } + + return true + } + + return { isCopied, copyToClipboard } +} diff --git a/apps/ui/src/hooks/use-media-query.tsx b/apps/ui/src/hooks/use-media-query.tsx new file mode 100644 index 0000000..95e552c --- /dev/null +++ b/apps/ui/src/hooks/use-media-query.tsx @@ -0,0 +1,19 @@ +import * as React from "react" + +export function useMediaQuery(query: string) { + const [value, setValue] = React.useState(false) + + React.useEffect(() => { + function onChange(event: MediaQueryListEvent) { + setValue(event.matches) + } + + const result = matchMedia(query) + result.addEventListener("change", onChange) + setValue(result.matches) + + return () => result.removeEventListener("change", onChange) + }, [query]) + + return value +} diff --git a/apps/ui/src/hooks/use-meta-color.ts b/apps/ui/src/hooks/use-meta-color.ts new file mode 100644 index 0000000..2cfbd17 --- /dev/null +++ b/apps/ui/src/hooks/use-meta-color.ts @@ -0,0 +1,28 @@ +import * as React from "react" +import { useTheme } from "next-themes" + +export const META_THEME_COLORS = { + light: "#ffffff", + dark: "#0a0a0a", +} + +export function useMetaColor() { + const { resolvedTheme } = useTheme() + + const metaColor = React.useMemo(() => { + return resolvedTheme !== "dark" + ? META_THEME_COLORS.light + : META_THEME_COLORS.dark + }, [resolvedTheme]) + + const setMetaColor = React.useCallback((color: string) => { + document + .querySelector('meta[name="theme-color"]') + ?.setAttribute("content", color) + }, []) + + return { + metaColor, + setMetaColor, + } +} diff --git a/apps/ui/src/hooks/use-mobile.ts b/apps/ui/src/hooks/use-mobile.ts index 502fd32..29c7c87 100644 --- a/apps/ui/src/hooks/use-mobile.ts +++ b/apps/ui/src/hooks/use-mobile.ts @@ -1,19 +1,17 @@ -import * as React from "react"; +import * as React from "react" -const MOBILE_BREAKPOINT = 768; - -export function useIsMobile() { - const [isMobile, setIsMobile] = React.useState(undefined); +export function useIsMobile(mobileBreakpoint = 768) { + const [isMobile, setIsMobile] = React.useState(undefined) React.useEffect(() => { - const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`); + const mql = window.matchMedia(`(max-width: ${mobileBreakpoint - 1}px)`) const onChange = () => { - setIsMobile(window.innerWidth < MOBILE_BREAKPOINT); - }; - mql.addEventListener("change", onChange); - setIsMobile(window.innerWidth < MOBILE_BREAKPOINT); - return () => mql.removeEventListener("change", onChange); - }, []); + setIsMobile(window.innerWidth < mobileBreakpoint) + } + mql.addEventListener("change", onChange) + setIsMobile(window.innerWidth < mobileBreakpoint) + return () => mql.removeEventListener("change", onChange) + }, [mobileBreakpoint]) - return !!isMobile; + return !!isMobile } diff --git a/apps/ui/src/hooks/use-mounted.ts b/apps/ui/src/hooks/use-mounted.ts new file mode 100644 index 0000000..3a20c62 --- /dev/null +++ b/apps/ui/src/hooks/use-mounted.ts @@ -0,0 +1,11 @@ +import * as React from "react" + +export function useMounted() { + const [mounted, setMounted] = React.useState(false) + + React.useEffect(() => { + setMounted(true) + }, []) + + return mounted +} diff --git a/apps/ui/src/lib/config.ts b/apps/ui/src/lib/config.ts new file mode 100644 index 0000000..67a510f --- /dev/null +++ b/apps/ui/src/lib/config.ts @@ -0,0 +1,42 @@ +export const siteConfig = { + name: "shadcn/ui", + url: "https://ui.shadcn.com", + ogImage: "https://ui.shadcn.com/og.jpg", + description: + "A set of beautifully designed components that you can customize, extend, and build on. Start here then make it your own. Open Source. Open Code.", + links: { + twitter: "https://twitter.com/shadcn", + github: "https://github.com/shadcn-ui/ui", + }, + navItems: [ + { + href: "/docs/installation", + label: "Docs", + }, + { + href: "/docs/components", + label: "Components", + }, + { + href: "/blocks", + label: "Blocks", + }, + { + href: "/charts/area", + label: "Charts", + }, + { + href: "/docs/directory", + label: "Directory", + }, + { + href: "/create", + label: "Create", + }, + ], +} + +export const META_THEME_COLORS = { + light: "#ffffff", + dark: "#09090b", +} diff --git a/apps/ui/src/lib/events.ts b/apps/ui/src/lib/events.ts new file mode 100644 index 0000000..5298db7 --- /dev/null +++ b/apps/ui/src/lib/events.ts @@ -0,0 +1,11 @@ +export type Event = { + name: string; + properties?: Record; +}; + +export function trackEvent(event: Event): void { + if (import.meta.env.DEV) { + // eslint-disable-next-line no-console + console.debug("[event]", event.name, event.properties ?? {}); + } +} diff --git a/apps/ui/src/lib/font-definitions.ts b/apps/ui/src/lib/font-definitions.ts new file mode 100644 index 0000000..f585bcb --- /dev/null +++ b/apps/ui/src/lib/font-definitions.ts @@ -0,0 +1,331 @@ +export type FontDefinition = { + name: string + title: string + type: "sans" | "mono" | "serif" + family: string + registryVariable: "--font-sans" | "--font-mono" | "--font-serif" + previewVariable: string + provider: "google" + import: string + dependency: string + subsets: readonly string[] + weight?: readonly string[] +} + +export const FONT_DEFINITIONS = [ + { + name: "geist", + title: "Geist", + type: "sans", + family: "'Geist Variable', sans-serif", + registryVariable: "--font-sans", + previewVariable: "--font-geist-sans", + provider: "google", + import: "Geist", + dependency: "@fontsource-variable/geist", + subsets: ["latin"], + }, + { + name: "inter", + title: "Inter", + type: "sans", + family: "'Inter Variable', sans-serif", + registryVariable: "--font-sans", + previewVariable: "--font-inter", + provider: "google", + import: "Inter", + dependency: "@fontsource-variable/inter", + subsets: ["latin"], + }, + { + name: "noto-sans", + title: "Noto Sans", + type: "sans", + family: "'Noto Sans Variable', sans-serif", + registryVariable: "--font-sans", + previewVariable: "--font-noto-sans", + provider: "google", + import: "Noto_Sans", + dependency: "@fontsource-variable/noto-sans", + subsets: ["latin"], + }, + { + name: "nunito-sans", + title: "Nunito Sans", + type: "sans", + family: "'Nunito Sans Variable', sans-serif", + registryVariable: "--font-sans", + previewVariable: "--font-nunito-sans", + provider: "google", + import: "Nunito_Sans", + dependency: "@fontsource-variable/nunito-sans", + subsets: ["latin"], + }, + { + name: "figtree", + title: "Figtree", + type: "sans", + family: "'Figtree Variable', sans-serif", + registryVariable: "--font-sans", + previewVariable: "--font-figtree", + provider: "google", + import: "Figtree", + dependency: "@fontsource-variable/figtree", + subsets: ["latin"], + }, + { + name: "roboto", + title: "Roboto", + type: "sans", + family: "'Roboto Variable', sans-serif", + registryVariable: "--font-sans", + previewVariable: "--font-roboto", + provider: "google", + import: "Roboto", + dependency: "@fontsource-variable/roboto", + subsets: ["latin"], + }, + { + name: "raleway", + title: "Raleway", + type: "sans", + family: "'Raleway Variable', sans-serif", + registryVariable: "--font-sans", + previewVariable: "--font-raleway", + provider: "google", + import: "Raleway", + dependency: "@fontsource-variable/raleway", + subsets: ["latin"], + }, + { + name: "dm-sans", + title: "DM Sans", + type: "sans", + family: "'DM Sans Variable', sans-serif", + registryVariable: "--font-sans", + previewVariable: "--font-dm-sans", + provider: "google", + import: "DM_Sans", + dependency: "@fontsource-variable/dm-sans", + subsets: ["latin"], + }, + { + name: "public-sans", + title: "Public Sans", + type: "sans", + family: "'Public Sans Variable', sans-serif", + registryVariable: "--font-sans", + previewVariable: "--font-public-sans", + provider: "google", + import: "Public_Sans", + dependency: "@fontsource-variable/public-sans", + subsets: ["latin"], + }, + { + name: "outfit", + title: "Outfit", + type: "sans", + family: "'Outfit Variable', sans-serif", + registryVariable: "--font-sans", + previewVariable: "--font-outfit", + provider: "google", + import: "Outfit", + dependency: "@fontsource-variable/outfit", + subsets: ["latin"], + }, + { + name: "oxanium", + title: "Oxanium", + type: "sans", + family: "'Oxanium Variable', sans-serif", + registryVariable: "--font-sans", + previewVariable: "--font-oxanium", + provider: "google", + import: "Oxanium", + dependency: "@fontsource-variable/oxanium", + subsets: ["latin"], + }, + { + name: "manrope", + title: "Manrope", + type: "sans", + family: "'Manrope Variable', sans-serif", + registryVariable: "--font-sans", + previewVariable: "--font-manrope", + provider: "google", + import: "Manrope", + dependency: "@fontsource-variable/manrope", + subsets: ["latin"], + }, + { + name: "space-grotesk", + title: "Space Grotesk", + type: "sans", + family: "'Space Grotesk Variable', sans-serif", + registryVariable: "--font-sans", + previewVariable: "--font-space-grotesk", + provider: "google", + import: "Space_Grotesk", + dependency: "@fontsource-variable/space-grotesk", + subsets: ["latin"], + }, + { + name: "montserrat", + title: "Montserrat", + type: "sans", + family: "'Montserrat Variable', sans-serif", + registryVariable: "--font-sans", + previewVariable: "--font-montserrat", + provider: "google", + import: "Montserrat", + dependency: "@fontsource-variable/montserrat", + subsets: ["latin"], + }, + { + name: "ibm-plex-sans", + title: "IBM Plex Sans", + type: "sans", + family: "'IBM Plex Sans Variable', sans-serif", + registryVariable: "--font-sans", + previewVariable: "--font-ibm-plex-sans", + provider: "google", + import: "IBM_Plex_Sans", + dependency: "@fontsource-variable/ibm-plex-sans", + subsets: ["latin"], + }, + { + name: "source-sans-3", + title: "Source Sans 3", + type: "sans", + family: "'Source Sans 3 Variable', sans-serif", + registryVariable: "--font-sans", + previewVariable: "--font-source-sans-3", + provider: "google", + import: "Source_Sans_3", + dependency: "@fontsource-variable/source-sans-3", + subsets: ["latin"], + }, + { + name: "instrument-sans", + title: "Instrument Sans", + type: "sans", + family: "'Instrument Sans Variable', sans-serif", + registryVariable: "--font-sans", + previewVariable: "--font-instrument-sans", + provider: "google", + import: "Instrument_Sans", + dependency: "@fontsource-variable/instrument-sans", + subsets: ["latin"], + }, + { + name: "jetbrains-mono", + title: "JetBrains Mono", + type: "mono", + family: "'JetBrains Mono Variable', monospace", + registryVariable: "--font-mono", + previewVariable: "--font-jetbrains-mono", + provider: "google", + import: "JetBrains_Mono", + dependency: "@fontsource-variable/jetbrains-mono", + subsets: ["latin"], + }, + { + name: "geist-mono", + title: "Geist Mono", + type: "mono", + family: "'Geist Mono Variable', monospace", + registryVariable: "--font-mono", + previewVariable: "--font-geist-mono", + provider: "google", + import: "Geist_Mono", + dependency: "@fontsource-variable/geist-mono", + subsets: ["latin"], + }, + { + name: "noto-serif", + title: "Noto Serif", + type: "serif", + family: "'Noto Serif Variable', serif", + registryVariable: "--font-serif", + previewVariable: "--font-noto-serif", + provider: "google", + import: "Noto_Serif", + dependency: "@fontsource-variable/noto-serif", + subsets: ["latin"], + }, + { + name: "roboto-slab", + title: "Roboto Slab", + type: "serif", + family: "'Roboto Slab Variable', serif", + registryVariable: "--font-serif", + previewVariable: "--font-roboto-slab", + provider: "google", + import: "Roboto_Slab", + dependency: "@fontsource-variable/roboto-slab", + subsets: ["latin"], + }, + { + name: "merriweather", + title: "Merriweather", + type: "serif", + family: "'Merriweather Variable', serif", + registryVariable: "--font-serif", + previewVariable: "--font-merriweather", + provider: "google", + import: "Merriweather", + dependency: "@fontsource-variable/merriweather", + subsets: ["latin"], + }, + { + name: "lora", + title: "Lora", + type: "serif", + family: "'Lora Variable', serif", + registryVariable: "--font-serif", + previewVariable: "--font-lora", + provider: "google", + import: "Lora", + dependency: "@fontsource-variable/lora", + subsets: ["latin"], + }, + { + name: "playfair-display", + title: "Playfair Display", + type: "serif", + family: "'Playfair Display Variable', serif", + registryVariable: "--font-serif", + previewVariable: "--font-playfair-display", + provider: "google", + import: "Playfair_Display", + dependency: "@fontsource-variable/playfair-display", + subsets: ["latin"], + }, + { + name: "eb-garamond", + title: "EB Garamond", + type: "serif", + family: "'EB Garamond Variable', serif", + registryVariable: "--font-serif", + previewVariable: "--font-eb-garamond", + provider: "google", + import: "EB_Garamond", + dependency: "@fontsource-variable/eb-garamond", + subsets: ["latin"], + }, + { + name: "instrument-serif", + title: "Instrument Serif", + type: "serif", + family: "'Instrument Serif', serif", + registryVariable: "--font-serif", + previewVariable: "--font-instrument-serif", + provider: "google", + import: "Instrument_Serif", + dependency: "@fontsource/instrument-serif", + subsets: ["latin"], + weight: ["400"], + }, +] as const satisfies readonly FontDefinition[] + +export type FontName = (typeof FONT_DEFINITIONS)[number]["name"] diff --git a/apps/ui/src/lib/utils.ts b/apps/ui/src/lib/utils.ts index a5ef193..d305e3e 100644 --- a/apps/ui/src/lib/utils.ts +++ b/apps/ui/src/lib/utils.ts @@ -4,3 +4,8 @@ import { twMerge } from "tailwind-merge"; export function cn(...inputs: ClassValue[]) { return twMerge(clsx(inputs)); } + +export function absoluteUrl(path: string) { + const base = import.meta.env.VITE_APP_URL ?? window.location.origin; + return `${base}${path}`; +} diff --git a/apps/ui/src/registry/__blocks__.json b/apps/ui/src/registry/__blocks__.json new file mode 100644 index 0000000..a97a144 --- /dev/null +++ b/apps/ui/src/registry/__blocks__.json @@ -0,0 +1,143 @@ +[ + { + "name": "preview" + }, + { + "name": "preview-02" + }, + { + "name": "login-01", + "description": "A simple login form.", + "categories": ["authentication", "login"] + }, + { + "name": "login-02", + "description": "A two column login page with a cover image.", + "categories": ["authentication", "login"] + }, + { + "name": "login-03", + "description": "A login page with a muted background color.", + "categories": ["authentication", "login"] + }, + { + "name": "login-04", + "description": "A login page with form and image.", + "categories": ["authentication", "login"] + }, + { + "name": "login-05", + "description": "A simple email-only login page.", + "categories": ["authentication", "login"] + }, + { + "name": "signup-01", + "description": "A simple signup form.", + "categories": ["authentication", "signup"] + }, + { + "name": "signup-02", + "description": "A two column signup page with a cover image.", + "categories": ["authentication", "signup"] + }, + { + "name": "signup-03", + "description": "A signup page with a muted background color.", + "categories": ["authentication", "signup"] + }, + { + "name": "signup-04", + "description": "A signup page with form and image.", + "categories": ["authentication", "signup"] + }, + { + "name": "signup-05", + "description": "A simple signup form with social providers.", + "categories": ["authentication", "signup"] + }, + { + "name": "dashboard-01", + "description": "A dashboard with sidebar, charts and data table.", + "categories": ["dashboard"] + }, + { + "name": "sidebar-01", + "description": "A simple sidebar with navigation grouped by section.", + "categories": ["sidebar", "dashboard"] + }, + { + "name": "sidebar-02", + "description": "A sidebar with collapsible sections.", + "categories": ["sidebar", "dashboard"] + }, + { + "name": "sidebar-03", + "description": "A sidebar with submenus.", + "categories": ["sidebar", "dashboard"] + }, + { + "name": "sidebar-04", + "description": "A floating sidebar with submenus.", + "categories": ["sidebar", "dashboard"] + }, + { + "name": "sidebar-05", + "description": "A sidebar with collapsible submenus.", + "categories": ["sidebar", "dashboard"] + }, + { + "name": "sidebar-06", + "description": "A sidebar with submenus as dropdowns.", + "categories": ["sidebar", "dashboard"] + }, + { + "name": "sidebar-07", + "description": "A sidebar that collapses to icons.", + "categories": ["sidebar", "dashboard"] + }, + { + "name": "sidebar-08", + "description": "An inset sidebar with secondary navigation.", + "categories": ["sidebar", "dashboard"] + }, + { + "name": "sidebar-09", + "description": "Collapsible nested sidebars.", + "categories": ["sidebar", "dashboard"] + }, + { + "name": "sidebar-10", + "description": "A sidebar in a popover.", + "categories": ["sidebar", "dashboard"] + }, + { + "name": "sidebar-11", + "description": "A sidebar with a collapsible file tree.", + "categories": ["sidebar", "dashboard"] + }, + { + "name": "sidebar-12", + "description": "A sidebar with a calendar.", + "categories": ["sidebar", "dashboard"] + }, + { + "name": "sidebar-13", + "description": "A sidebar in a dialog.", + "categories": ["sidebar", "dashboard"] + }, + { + "name": "sidebar-14", + "description": "A sidebar on the right.", + "categories": ["sidebar", "dashboard"] + }, + { + "name": "sidebar-15", + "description": "A left and right sidebar.", + "categories": ["sidebar", "dashboard"] + }, + { + "name": "sidebar-16", + "description": "A sidebar with a sticky site header.", + "categories": ["sidebar", "dashboard"] + } +] diff --git a/apps/ui/src/registry/base-colors.ts b/apps/ui/src/registry/base-colors.ts new file mode 100644 index 0000000..3523db3 --- /dev/null +++ b/apps/ui/src/registry/base-colors.ts @@ -0,0 +1,9 @@ +import { THEMES } from "@/registry/themes" + +export const BASE_COLORS = THEMES.filter((theme) => + ["neutral", "stone", "zinc", "mauve", "olive", "mist", "taupe"].includes( + theme.name + ) +) + +export type BaseColor = (typeof BASE_COLORS)[number] diff --git a/apps/ui/src/registry/bases.ts b/apps/ui/src/registry/bases.ts new file mode 100644 index 0000000..49c3f99 --- /dev/null +++ b/apps/ui/src/registry/bases.ts @@ -0,0 +1,29 @@ +import { type registryItemSchema } from "shadcn/schema" +import { type z } from "zod" + +export const BASES: z.infer[] = [ + { + name: "radix", + type: "registry:style", + title: "Radix UI", + description: + "Optimized for fast development, easy maintenance, and accessibility.", + dependencies: ["radix-ui"], + meta: { + logo: "Radix UI", + }, + }, + { + name: "base", + type: "registry:style", + title: "Base UI", + description: + "Components for building accessible web apps and design systems.", + dependencies: ["@base-ui/react"], + meta: { + logo: "", + }, + }, +] + +export type Base = (typeof BASES)[number] diff --git a/apps/ui/src/registry/bases/README.md b/apps/ui/src/registry/bases/README.md new file mode 100644 index 0000000..752d0b1 --- /dev/null +++ b/apps/ui/src/registry/bases/README.md @@ -0,0 +1,15 @@ +# Registry bases (`base` and `radix`) + +This folder holds **two parallel registries**: + +- **`base/`** — Base UI–backed components and blocks +- **`radix/`** — Radix-backed components and blocks + +## Keep them in sync + +For any **shared** surface (same preview block, same card, same example intent), changes should be applied to **both** `base` and `radix` variants. + +- Adjust only what must differ: imports (`.../base/ui/...` vs `.../radix/ui/...`) and primitive APIs. +- Avoid editing only one tree unless the work is intentionally scoped to a single base. + +Project automation: see `.cursor/rules/registry-bases-parity.mdc` for the Cursor rule agents use when working under `apps/v4/registry/bases/`. diff --git a/apps/ui/src/registry/bases/__index__.tsx b/apps/ui/src/registry/bases/__index__.tsx new file mode 100644 index 0000000..bd732c6 --- /dev/null +++ b/apps/ui/src/registry/bases/__index__.tsx @@ -0,0 +1,9782 @@ +// @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> = { + radix: { + accordion: { + name: "accordion", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/accordion.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/accordion") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "accordion" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/accordion", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/accordion-example.tsx", + api: "https://www.radix-ui.com/primitives/docs/components/accordion.md", + }, + }, + }, + alert: { + name: "alert", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/alert.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/alert") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "alert" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/alert", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/alert-example.tsx", + }, + }, + }, + "alert-dialog": { + name: "alert-dialog", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: ["button"], + files: [ + { + path: "registry/bases/radix/ui/alert-dialog.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/alert-dialog") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "alert-dialog" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/alert-dialog", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/alert-dialog-example.tsx", + api: "https://www.radix-ui.com/primitives/docs/components/alert-dialog.md", + }, + }, + }, + "aspect-ratio": { + name: "aspect-ratio", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/aspect-ratio.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/aspect-ratio") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "aspect-ratio" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/aspect-ratio", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/aspect-ratio-example.tsx", + api: "https://www.radix-ui.com/primitives/docs/components/aspect-ratio.md", + }, + }, + }, + avatar: { + name: "avatar", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/avatar.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/avatar") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "avatar" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/avatar", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/avatar-example.tsx", + api: "https://www.radix-ui.com/primitives/docs/components/avatar.md", + }, + }, + }, + badge: { + name: "badge", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/badge.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/badge") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "badge" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/badge", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/badge-example.tsx", + }, + }, + }, + breadcrumb: { + name: "breadcrumb", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/breadcrumb.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/breadcrumb") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "breadcrumb" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/breadcrumb", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/breadcrumb-example.tsx", + }, + }, + }, + button: { + name: "button", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/button.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/button") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "button" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/button", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/button-example.tsx", + }, + }, + }, + "button-group": { + name: "button-group", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: ["separator"], + files: [ + { + path: "registry/bases/radix/ui/button-group.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/button-group") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "button-group" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/button-group", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/button-group-example.tsx", + }, + }, + }, + calendar: { + name: "calendar", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: ["button"], + files: [ + { + path: "registry/bases/radix/ui/calendar.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/calendar") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "calendar" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/calendar", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/calendar-example.tsx", + api: "https://react-day-picker.js.org", + }, + }, + }, + card: { + name: "card", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/card.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/card") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "card" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/card", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/card-example.tsx", + }, + }, + }, + carousel: { + name: "carousel", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: ["button"], + files: [ + { + path: "registry/bases/radix/ui/carousel.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/carousel") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "carousel" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/carousel", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/carousel-example.tsx", + api: "https://www.embla-carousel.com/get-started/react", + }, + }, + }, + chart: { + name: "chart", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/chart.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/chart") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "chart" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/chart", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/chart-example.tsx", + }, + }, + }, + checkbox: { + name: "checkbox", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/checkbox.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/checkbox") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "checkbox" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/checkbox", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/checkbox-example.tsx", + api: "https://www.radix-ui.com/docs/primitives/components/checkbox.md", + }, + }, + }, + collapsible: { + name: "collapsible", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/collapsible.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/collapsible") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "collapsible" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/collapsible", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/collapsible-example.tsx", + api: "https://www.radix-ui.com/docs/primitives/components/collapsible.md", + }, + }, + }, + combobox: { + name: "combobox", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: ["button", "input-group"], + files: [ + { + path: "registry/bases/radix/ui/combobox.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/combobox") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "combobox" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/combobox", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/combobox-example.tsx", + api: "https://base-ui.com/react/components/combobox", + }, + }, + }, + command: { + name: "command", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: ["dialog", "input-group"], + files: [ + { + path: "registry/bases/radix/ui/command.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/command") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "command" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/command", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/command-example.tsx", + api: "https://github.com/dip/cmdk", + }, + }, + }, + "context-menu": { + name: "context-menu", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/context-menu.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/context-menu") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "context-menu" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/context-menu", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/context-menu-example.tsx", + api: "https://www.radix-ui.com/docs/primitives/components/context-menu.md", + }, + }, + }, + dialog: { + name: "dialog", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: ["button"], + files: [ + { + path: "registry/bases/radix/ui/dialog.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/dialog") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "dialog" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/dialog", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/dialog-example.tsx", + api: "https://www.radix-ui.com/docs/primitives/components/dialog.md", + }, + }, + }, + drawer: { + name: "drawer", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/drawer.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/drawer") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "drawer" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/drawer", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/drawer-example.tsx", + api: "https://vaul.emilkowal.ski/getting-started", + }, + }, + }, + "dropdown-menu": { + name: "dropdown-menu", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/dropdown-menu.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/dropdown-menu") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "dropdown-menu" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/dropdown-menu", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/dropdown-menu-example.tsx", + api: "https://www.radix-ui.com/docs/primitives/components/dropdown-menu.md", + }, + }, + }, + empty: { + name: "empty", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/empty.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/empty") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "empty" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/empty", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/empty-example.tsx", + }, + }, + }, + field: { + name: "field", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: ["label", "separator"], + files: [ + { + path: "registry/bases/radix/ui/field.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/field") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "field" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/field", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/field-example.tsx", + }, + }, + }, + "hover-card": { + name: "hover-card", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/hover-card.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/hover-card") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "hover-card" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/hover-card", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/hover-card-example.tsx", + api: "https://www.radix-ui.com/docs/primitives/components/hover-card.md", + }, + }, + }, + input: { + name: "input", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/input.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/input") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "input" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/input", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/input-example.tsx", + }, + }, + }, + "input-group": { + name: "input-group", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: ["button", "input", "textarea"], + files: [ + { + path: "registry/bases/radix/ui/input-group.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/input-group") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "input-group" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/input-group", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/input-group-example.tsx", + }, + }, + }, + "input-otp": { + name: "input-otp", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/input-otp.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/input-otp") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "input-otp" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/input-otp", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/input-otp-example.tsx", + api: "https://input-otp.rodz.dev", + }, + }, + }, + item: { + name: "item", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: ["separator"], + files: [ + { + path: "registry/bases/radix/ui/item.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/item") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "item" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/item", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/item-example.tsx", + }, + }, + }, + label: { + name: "label", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/label.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/label") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "label" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/label", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/label-example.tsx", + api: "https://www.radix-ui.com/docs/primitives/components/label.md", + }, + }, + }, + menubar: { + name: "menubar", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/menubar.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/menubar") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "menubar" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/menubar", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/menubar-example.tsx", + api: "https://www.radix-ui.com/docs/primitives/components/menubar.md", + }, + }, + }, + "navigation-menu": { + name: "navigation-menu", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/navigation-menu.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/navigation-menu") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "navigation-menu" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/navigation-menu", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/navigation-menu-example.tsx", + api: "https://www.radix-ui.com/docs/primitives/components/navigation-menu.md", + }, + }, + }, + pagination: { + name: "pagination", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: ["button"], + files: [ + { + path: "registry/bases/radix/ui/pagination.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/pagination") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "pagination" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/pagination", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/pagination-example.tsx", + }, + }, + }, + popover: { + name: "popover", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/popover.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/popover") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "popover" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/popover", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/popover-example.tsx", + api: "https://www.radix-ui.com/docs/primitives/components/popover.md", + }, + }, + }, + progress: { + name: "progress", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/progress.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/progress") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "progress" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/progress", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/progress-example.tsx", + api: "https://www.radix-ui.com/docs/primitives/components/progress.md", + }, + }, + }, + "radio-group": { + name: "radio-group", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/radio-group.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/radio-group") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "radio-group" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/radio-group", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/radio-group-example.tsx", + api: "https://www.radix-ui.com/docs/primitives/components/radio-group.md", + }, + }, + }, + resizable: { + name: "resizable", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/resizable.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/resizable") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "resizable" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/resizable", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/resizable-example.tsx", + api: "https://github.com/bvaughn/react-resizable-panels", + }, + }, + }, + "scroll-area": { + name: "scroll-area", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/scroll-area.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/scroll-area") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "scroll-area" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/scroll-area", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/scroll-area-example.tsx", + api: "https://www.radix-ui.com/docs/primitives/components/scroll-area.md", + }, + }, + }, + select: { + name: "select", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/select.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/select") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "select" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/select", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/select-example.tsx", + api: "https://www.radix-ui.com/docs/primitives/components/select.md", + }, + }, + }, + separator: { + name: "separator", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/separator.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/separator") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "separator" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/separator", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/separator-example.tsx", + api: "https://www.radix-ui.com/docs/primitives/components/separator.md", + }, + }, + }, + sheet: { + name: "sheet", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: ["button"], + files: [ + { + path: "registry/bases/radix/ui/sheet.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/sheet") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sheet" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/sheet", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/sheet-example.tsx", + api: "https://www.radix-ui.com/docs/primitives/components/dialog.md", + }, + }, + }, + sidebar: { + name: "sidebar", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: [ + "button", + "separator", + "sheet", + "tooltip", + "input", + "use-mobile", + "skeleton", + ], + files: [ + { + path: "registry/bases/radix/ui/sidebar.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/sidebar") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/sidebar", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/sidebar-example.tsx", + }, + }, + }, + skeleton: { + name: "skeleton", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/skeleton.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/skeleton") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "skeleton" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/skeleton", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/skeleton-example.tsx", + }, + }, + }, + slider: { + name: "slider", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/slider.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/slider") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "slider" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/slider", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/slider-example.tsx", + api: "https://www.radix-ui.com/docs/primitives/components/slider.md", + }, + }, + }, + sonner: { + name: "sonner", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/sonner.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/sonner") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sonner" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/sonner", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/sonner-example.tsx", + api: "https://sonner.emilkowal.ski", + }, + }, + }, + spinner: { + name: "spinner", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/spinner.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/spinner") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "spinner" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/spinner", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/spinner-example.tsx", + }, + }, + }, + switch: { + name: "switch", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/switch.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/switch") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "switch" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/switch", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/switch-example.tsx", + api: "https://www.radix-ui.com/docs/primitives/components/switch.md", + }, + }, + }, + table: { + name: "table", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/table.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/table") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "table" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/table", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/table-example.tsx", + }, + }, + }, + tabs: { + name: "tabs", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/tabs.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/tabs") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "tabs" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/tabs", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/tabs-example.tsx", + api: "https://www.radix-ui.com/docs/primitives/components/tabs.md", + }, + }, + }, + textarea: { + name: "textarea", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/textarea.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/textarea") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "textarea" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/textarea", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/textarea-example.tsx", + }, + }, + }, + toggle: { + name: "toggle", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/toggle.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/toggle") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "toggle" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/toggle", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/toggle-example.tsx", + api: "https://www.radix-ui.com/docs/primitives/components/toggle.md", + }, + }, + }, + "toggle-group": { + name: "toggle-group", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: ["toggle"], + files: [ + { + path: "registry/bases/radix/ui/toggle-group.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/toggle-group") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "toggle-group" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/toggle-group", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/toggle-group-example.tsx", + api: "https://www.radix-ui.com/docs/primitives/components/toggle-group.md", + }, + }, + }, + tooltip: { + name: "tooltip", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/tooltip.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/tooltip") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "tooltip" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/tooltip", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/tooltip-example.tsx", + api: "https://www.radix-ui.com/docs/primitives/components/tooltip.md", + }, + }, + }, + kbd: { + name: "kbd", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/kbd.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/kbd") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "kbd" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/kbd", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/kbd-example.tsx", + }, + }, + }, + "native-select": { + name: "native-select", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/native-select.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/native-select") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "native-select" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/native-select", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/radix/examples/native-select-example.tsx", + }, + }, + }, + direction: { + name: "direction", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/ui/direction.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/ui/direction") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "direction" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/radix/direction", + api: "https://www.radix-ui.com/primitives/docs/utilities/direction-provider.md", + }, + }, + }, + "accordion-example": { + name: "accordion-example", + title: "Accordion", + description: "", + type: "registry:example", + registryDependencies: ["accordion", "button", "card", "example"], + files: [ + { + path: "registry/bases/radix/examples/accordion-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/accordion-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "accordion-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "alert-example": { + name: "alert-example", + title: "Alert", + description: "", + type: "registry:example", + registryDependencies: ["alert", "badge", "button", "example"], + files: [ + { + path: "registry/bases/radix/examples/alert-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/alert-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "alert-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "alert-dialog-example": { + name: "alert-dialog-example", + title: "Alert Dialog", + description: "", + type: "registry:example", + registryDependencies: ["alert-dialog", "button", "dialog", "example"], + files: [ + { + path: "registry/bases/radix/examples/alert-dialog-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/alert-dialog-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "alert-dialog-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "aspect-ratio-example": { + name: "aspect-ratio-example", + title: "Aspect Ratio", + description: "", + type: "registry:example", + registryDependencies: ["aspect-ratio", "example"], + files: [ + { + path: "registry/bases/radix/examples/aspect-ratio-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/aspect-ratio-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "aspect-ratio-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "avatar-example": { + name: "avatar-example", + title: "Avatar", + description: "", + type: "registry:example", + registryDependencies: ["avatar", "button", "empty", "example"], + files: [ + { + path: "registry/bases/radix/examples/avatar-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/avatar-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "avatar-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "badge-example": { + name: "badge-example", + title: "Badge", + description: "", + type: "registry:example", + registryDependencies: ["badge", "spinner", "example"], + files: [ + { + path: "registry/bases/radix/examples/badge-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/badge-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "badge-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "breadcrumb-example": { + name: "breadcrumb-example", + title: "Breadcrumb", + description: "", + type: "registry:example", + registryDependencies: ["breadcrumb", "dropdown-menu", "example"], + files: [ + { + path: "registry/bases/radix/examples/breadcrumb-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/breadcrumb-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "breadcrumb-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "button-example": { + name: "button-example", + title: "Button", + description: "", + type: "registry:example", + registryDependencies: ["button", "example"], + files: [ + { + path: "registry/bases/radix/examples/button-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/button-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "button-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "button-group-example": { + name: "button-group-example", + title: "Button Group", + description: "", + type: "registry:example", + registryDependencies: [ + "button", + "button-group", + "dropdown-menu", + "field", + "input", + "input-group", + "label", + "popover", + "select", + "tooltip", + "example", + ], + files: [ + { + path: "registry/bases/radix/examples/button-group-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/button-group-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "button-group-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "calendar-example": { + name: "calendar-example", + title: "Calendar", + description: "", + type: "registry:example", + registryDependencies: [ + "button", + "calendar", + "card", + "field", + "input", + "label", + "popover", + "example", + ], + files: [ + { + path: "registry/bases/radix/examples/calendar-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/calendar-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "calendar-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "card-example": { + name: "card-example", + title: "Card", + description: "", + type: "registry:example", + registryDependencies: [ + "avatar", + "button", + "card", + "field", + "input", + "example", + ], + files: [ + { + path: "registry/bases/radix/examples/card-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/examples/card-example") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "card-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "carousel-example": { + name: "carousel-example", + title: "Carousel", + description: "", + type: "registry:example", + registryDependencies: ["card", "carousel", "example"], + files: [ + { + path: "registry/bases/radix/examples/carousel-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/carousel-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "carousel-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "chart-example": { + name: "chart-example", + title: "Chart", + description: "", + type: "registry:example", + registryDependencies: ["chart", "card", "example"], + files: [ + { + path: "registry/bases/radix/examples/chart-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/chart-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "chart-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "checkbox-example": { + name: "checkbox-example", + title: "Checkbox", + description: "", + type: "registry:example", + registryDependencies: ["checkbox", "field", "table", "example"], + files: [ + { + path: "registry/bases/radix/examples/checkbox-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/checkbox-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "checkbox-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "collapsible-example": { + name: "collapsible-example", + title: "Collapsible", + description: "", + type: "registry:example", + registryDependencies: [ + "button", + "card", + "collapsible", + "field", + "input", + "tabs", + "example", + ], + files: [ + { + path: "registry/bases/radix/examples/collapsible-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/collapsible-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "collapsible-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "combobox-example": { + name: "combobox-example", + title: "Combobox", + description: "", + type: "registry:example", + registryDependencies: [ + "button", + "card", + "combobox", + "dialog", + "field", + "input", + "input-group", + "item", + "select", + "example", + ], + files: [ + { + path: "registry/bases/radix/examples/combobox-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/combobox-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "combobox-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "command-example": { + name: "command-example", + title: "Command", + description: "", + type: "registry:example", + registryDependencies: ["button", "command", "example"], + files: [ + { + path: "registry/bases/radix/examples/command-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/command-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "command-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "context-menu-example": { + name: "context-menu-example", + title: "Context Menu", + description: "", + type: "registry:example", + registryDependencies: ["button", "context-menu", "dialog", "example"], + files: [ + { + path: "registry/bases/radix/examples/context-menu-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/context-menu-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "context-menu-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "dialog-example": { + name: "dialog-example", + title: "Dialog", + description: "", + type: "registry:example", + registryDependencies: [ + "button", + "checkbox", + "dialog", + "field", + "input", + "input-group", + "kbd", + "native-select", + "select", + "switch", + "tabs", + "textarea", + "tooltip", + "example", + ], + files: [ + { + path: "registry/bases/radix/examples/dialog-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/dialog-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "dialog-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "drawer-example": { + name: "drawer-example", + title: "Drawer", + description: "", + type: "registry:example", + registryDependencies: ["drawer", "example"], + files: [ + { + path: "registry/bases/radix/examples/drawer-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/drawer-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "drawer-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "dropdown-menu-example": { + name: "dropdown-menu-example", + title: "Dropdown Menu", + description: "", + type: "registry:example", + registryDependencies: [ + "avatar", + "button", + "dialog", + "dropdown-menu", + "example", + ], + files: [ + { + path: "registry/bases/radix/examples/dropdown-menu-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/dropdown-menu-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "dropdown-menu-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "empty-example": { + name: "empty-example", + title: "Empty", + description: "", + type: "registry:example", + registryDependencies: [ + "button", + "empty", + "input-group", + "kbd", + "example", + ], + files: [ + { + path: "registry/bases/radix/examples/empty-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/empty-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "empty-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "field-example": { + name: "field-example", + title: "Field", + description: "", + type: "registry:example", + registryDependencies: [ + "badge", + "checkbox", + "field", + "input", + "input-otp", + "native-select", + "radio-group", + "select", + "slider", + "switch", + "textarea", + "example", + ], + files: [ + { + path: "registry/bases/radix/examples/field-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/field-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "field-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "hover-card-example": { + name: "hover-card-example", + title: "Hover Card", + description: "", + type: "registry:example", + registryDependencies: ["button", "dialog", "hover-card", "example"], + files: [ + { + path: "registry/bases/radix/examples/hover-card-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/hover-card-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "hover-card-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "input-example": { + name: "input-example", + title: "Input", + description: "", + type: "registry:example", + registryDependencies: [ + "button", + "field", + "input", + "native-select", + "select", + "example", + ], + files: [ + { + path: "registry/bases/radix/examples/input-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/input-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "input-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "input-group-example": { + name: "input-group-example", + title: "Input Group", + description: "", + type: "registry:example", + registryDependencies: [ + "button", + "button-group", + "card", + "dropdown-menu", + "field", + "input", + "input-group", + "kbd", + "popover", + "spinner", + "textarea", + "tooltip", + "example", + ], + files: [ + { + path: "registry/bases/radix/examples/input-group-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/input-group-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "input-group-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "input-otp-example": { + name: "input-otp-example", + title: "Input OTP", + description: "", + type: "registry:example", + registryDependencies: ["button", "card", "field", "input-otp", "example"], + files: [ + { + path: "registry/bases/radix/examples/input-otp-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/input-otp-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "input-otp-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "item-example": { + name: "item-example", + title: "Item", + description: "", + type: "registry:example", + registryDependencies: ["button", "item", "example"], + files: [ + { + path: "registry/bases/radix/examples/item-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/examples/item-example") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "item-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "kbd-example": { + name: "kbd-example", + title: "Kbd", + description: "", + type: "registry:example", + registryDependencies: [ + "button", + "input-group", + "kbd", + "tooltip", + "example", + ], + files: [ + { + path: "registry/bases/radix/examples/kbd-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/examples/kbd-example") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "kbd-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "label-example": { + name: "label-example", + title: "Label", + description: "", + type: "registry:example", + registryDependencies: [ + "checkbox", + "field", + "input", + "label", + "textarea", + "example", + ], + files: [ + { + path: "registry/bases/radix/examples/label-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/label-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "label-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "menubar-example": { + name: "menubar-example", + title: "Menubar", + description: "", + type: "registry:example", + registryDependencies: ["button", "dialog", "menubar", "example"], + files: [ + { + path: "registry/bases/radix/examples/menubar-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/menubar-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "menubar-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "native-select-example": { + name: "native-select-example", + title: "Native Select", + description: "", + type: "registry:example", + registryDependencies: ["field", "native-select", "example"], + files: [ + { + path: "registry/bases/radix/examples/native-select-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/native-select-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "native-select-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "navigation-menu-example": { + name: "navigation-menu-example", + title: "Navigation Menu", + description: "", + type: "registry:example", + registryDependencies: ["button", "dialog", "navigation-menu", "example"], + files: [ + { + path: "registry/bases/radix/examples/navigation-menu-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/navigation-menu-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "navigation-menu-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "pagination-example": { + name: "pagination-example", + title: "Pagination", + description: "", + type: "registry:example", + registryDependencies: ["field", "pagination", "select", "example"], + files: [ + { + path: "registry/bases/radix/examples/pagination-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/pagination-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "pagination-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "popover-example": { + name: "popover-example", + title: "Popover", + description: "", + type: "registry:example", + registryDependencies: [ + "button", + "dialog", + "field", + "input", + "popover", + "example", + ], + files: [ + { + path: "registry/bases/radix/examples/popover-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/popover-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "popover-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "progress-example": { + name: "progress-example", + title: "Progress", + description: "", + type: "registry:example", + registryDependencies: ["field", "item", "progress", "slider", "example"], + files: [ + { + path: "registry/bases/radix/examples/progress-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/progress-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "progress-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "radio-group-example": { + name: "radio-group-example", + title: "Radio Group", + description: "", + type: "registry:example", + registryDependencies: ["field", "radio-group", "example"], + files: [ + { + path: "registry/bases/radix/examples/radio-group-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/radio-group-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "radio-group-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "resizable-example": { + name: "resizable-example", + title: "Resizable", + description: "", + type: "registry:example", + registryDependencies: ["resizable", "example"], + files: [ + { + path: "registry/bases/radix/examples/resizable-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/resizable-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "resizable-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "scroll-area-example": { + name: "scroll-area-example", + title: "Scroll Area", + description: "", + type: "registry:example", + registryDependencies: ["scroll-area", "separator", "example"], + files: [ + { + path: "registry/bases/radix/examples/scroll-area-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/scroll-area-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "scroll-area-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "select-example": { + name: "select-example", + title: "Select", + description: "", + type: "registry:example", + registryDependencies: [ + "button", + "dialog", + "field", + "input", + "item", + "native-select", + "select", + "example", + ], + files: [ + { + path: "registry/bases/radix/examples/select-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/select-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "select-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "separator-example": { + name: "separator-example", + title: "Separator", + description: "", + type: "registry:example", + registryDependencies: ["separator", "example"], + files: [ + { + path: "registry/bases/radix/examples/separator-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/separator-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "separator-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "sheet-example": { + name: "sheet-example", + title: "Sheet", + description: "", + type: "registry:example", + registryDependencies: ["button", "field", "input", "sheet", "example"], + files: [ + { + path: "registry/bases/radix/examples/sheet-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/sheet-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sheet-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "sidebar-example": { + name: "sidebar-example", + title: "Sidebar", + description: "", + type: "registry:example", + registryDependencies: [ + "button", + "dropdown-menu", + "item", + "label", + "sidebar", + "example", + ], + files: [ + { + path: "registry/bases/radix/examples/sidebar-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/sidebar-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "sidebar-icon-example": { + name: "sidebar-icon-example", + title: "Sidebar (Icon)", + description: "", + type: "registry:example", + registryDependencies: [ + "avatar", + "button", + "collapsible", + "dropdown-menu", + "item", + "sidebar", + "example", + ], + files: [ + { + path: "registry/bases/radix/examples/sidebar-icon-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/sidebar-icon-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar-icon-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "sidebar-inset-example": { + name: "sidebar-inset-example", + title: "Sidebar (Inset)", + description: "", + type: "registry:example", + registryDependencies: ["collapsible", "sidebar", "example"], + files: [ + { + path: "registry/bases/radix/examples/sidebar-inset-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/sidebar-inset-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar-inset-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "sidebar-floating-example": { + name: "sidebar-floating-example", + title: "Sidebar (Floating)", + description: "", + type: "registry:example", + registryDependencies: [ + "button", + "card", + "dropdown-menu", + "field", + "item", + "sidebar", + "example", + ], + files: [ + { + path: "registry/bases/radix/examples/sidebar-floating-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/sidebar-floating-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar-floating-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "skeleton-example": { + name: "skeleton-example", + title: "Skeleton", + description: "", + type: "registry:example", + registryDependencies: ["skeleton", "example"], + files: [ + { + path: "registry/bases/radix/examples/skeleton-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/skeleton-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "skeleton-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "slider-example": { + name: "slider-example", + title: "Slider", + description: "", + type: "registry:example", + registryDependencies: ["label", "slider", "example"], + files: [ + { + path: "registry/bases/radix/examples/slider-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/slider-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "slider-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "sonner-example": { + name: "sonner-example", + title: "Sonner", + description: "", + type: "registry:example", + registryDependencies: ["sonner", "example"], + files: [ + { + path: "registry/bases/radix/examples/sonner-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/sonner-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sonner-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "spinner-example": { + name: "spinner-example", + title: "Spinner", + description: "", + type: "registry:example", + registryDependencies: [ + "badge", + "button", + "empty", + "field", + "input-group", + "spinner", + "example", + ], + files: [ + { + path: "registry/bases/radix/examples/spinner-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/spinner-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "spinner-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "switch-example": { + name: "switch-example", + title: "Switch", + description: "", + type: "registry:example", + registryDependencies: ["field", "label", "switch", "example"], + files: [ + { + path: "registry/bases/radix/examples/switch-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/switch-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "switch-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "table-example": { + name: "table-example", + title: "Table", + description: "", + type: "registry:example", + registryDependencies: [ + "button", + "dropdown-menu", + "input", + "select", + "table", + "example", + ], + files: [ + { + path: "registry/bases/radix/examples/table-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/table-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "table-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "tabs-example": { + name: "tabs-example", + title: "Tabs", + description: "", + type: "registry:example", + registryDependencies: ["button", "dropdown-menu", "tabs", "example"], + files: [ + { + path: "registry/bases/radix/examples/tabs-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/examples/tabs-example") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "tabs-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "textarea-example": { + name: "textarea-example", + title: "Textarea", + description: "", + type: "registry:example", + registryDependencies: ["field", "textarea", "example"], + files: [ + { + path: "registry/bases/radix/examples/textarea-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/textarea-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "textarea-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "toggle-example": { + name: "toggle-example", + title: "Toggle", + description: "", + type: "registry:example", + registryDependencies: ["toggle", "example"], + files: [ + { + path: "registry/bases/radix/examples/toggle-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/toggle-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "toggle-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "toggle-group-example": { + name: "toggle-group-example", + title: "Toggle Group", + description: "", + type: "registry:example", + registryDependencies: ["input", "select", "toggle-group", "example"], + files: [ + { + path: "registry/bases/radix/examples/toggle-group-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/toggle-group-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "toggle-group-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "tooltip-example": { + name: "tooltip-example", + title: "Tooltip", + description: "", + type: "registry:example", + registryDependencies: ["button", "kbd", "tooltip", "example"], + files: [ + { + path: "registry/bases/radix/examples/tooltip-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/tooltip-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "tooltip-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + demo: { + name: "demo", + title: "Demo", + description: "", + type: "registry:example", + registryDependencies: [ + "alert-dialog", + "badge", + "button", + "button-group", + "card", + "checkbox", + "dropdown-menu", + "field", + "input-group", + "item", + "radio-group", + "slider", + "switch", + "textarea", + ], + files: [ + { + path: "registry/bases/radix/examples/demo.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/examples/demo") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "demo" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "component-example": { + name: "component-example", + title: "Example", + description: "", + type: "registry:example", + registryDependencies: [ + "alert-dialog", + "badge", + "button", + "card", + "combobox", + "dropdown-menu", + "field", + "input", + "select", + "textarea", + "example", + ], + files: [ + { + path: "registry/bases/radix/examples/component-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/examples/component-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "component-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + utils: { + name: "utils", + title: "undefined", + description: "", + type: "registry:lib", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/lib/utils.ts", + type: "registry:lib", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/lib/utils") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "utils" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + example: { + name: "example", + title: "Example", + description: "", + type: "registry:component", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/components/example.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/components/example") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + preview: { + name: "preview", + title: "Preview", + description: "", + type: "registry:block", + registryDependencies: [ + "alert-dialog", + "avatar", + "badge", + "button", + "button-group", + "card", + "checkbox", + "combobox", + "dropdown-menu", + "empty", + "field", + "input", + "input-group", + "item", + "label", + "popover", + "radio-group", + "select", + "separator", + "sheet", + "slider", + "spinner", + "switch", + "textarea", + "tooltip", + "example", + ], + files: [ + { + path: "registry/bases/radix/blocks/preview/index.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/blocks/preview/index") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "preview" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "preview-02": { + name: "preview-02", + title: "Preview 02", + description: "", + type: "registry:block", + registryDependencies: [ + "accordion", + "badge", + "breadcrumb", + "button", + "calendar", + "card", + "chart", + "checkbox", + "combobox", + "dropdown-menu", + "empty", + "field", + "input", + "input-group", + "item", + "label", + "native-select", + "progress", + "radio-group", + "select", + "separator", + "sidebar", + "skeleton", + "slider", + "spinner", + "switch", + "table", + "tabs", + "textarea", + "toggle-group", + ], + files: [ + { + path: "registry/bases/radix/blocks/preview-02/index.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/blocks/preview-02/index" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "preview-02" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "login-01": { + name: "login-01", + title: "Login 01", + description: "A simple login form.", + type: "registry:block", + registryDependencies: ["button", "card", "input", "label", "field"], + files: [ + { + path: "registry/bases/radix/blocks/login-01/page.tsx", + type: "registry:page", + target: "app/login/page.tsx", + }, + { + path: "registry/bases/radix/blocks/login-01/components/login-form.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/blocks/login-01/page") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "login-01" + return { default: mod.default || mod[exportName] } + }), + categories: ["authentication", "login"], + meta: undefined, + }, + "login-02": { + name: "login-02", + title: "Login 02", + description: "A two column login page with a cover image.", + type: "registry:block", + registryDependencies: ["button", "input", "label", "field"], + files: [ + { + path: "registry/bases/radix/blocks/login-02/page.tsx", + type: "registry:page", + target: "app/login/page.tsx", + }, + { + path: "registry/bases/radix/blocks/login-02/components/login-form.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/blocks/login-02/page") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "login-02" + return { default: mod.default || mod[exportName] } + }), + categories: ["authentication", "login"], + meta: undefined, + }, + "login-03": { + name: "login-03", + title: "Login 03", + description: "A login page with a muted background color.", + type: "registry:block", + registryDependencies: ["button", "card", "input", "label", "field"], + files: [ + { + path: "registry/bases/radix/blocks/login-03/page.tsx", + type: "registry:page", + target: "app/login/page.tsx", + }, + { + path: "registry/bases/radix/blocks/login-03/components/login-form.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/blocks/login-03/page") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "login-03" + return { default: mod.default || mod[exportName] } + }), + categories: ["authentication", "login"], + meta: undefined, + }, + "login-04": { + name: "login-04", + title: "Login 04", + description: "A login page with form and image.", + type: "registry:block", + registryDependencies: ["button", "card", "input", "label", "field"], + files: [ + { + path: "registry/bases/radix/blocks/login-04/page.tsx", + type: "registry:page", + target: "app/login/page.tsx", + }, + { + path: "registry/bases/radix/blocks/login-04/components/login-form.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/blocks/login-04/page") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "login-04" + return { default: mod.default || mod[exportName] } + }), + categories: ["authentication", "login"], + meta: undefined, + }, + "login-05": { + name: "login-05", + title: "Login 05", + description: "A simple email-only login page.", + type: "registry:block", + registryDependencies: ["button", "input", "label", "field"], + files: [ + { + path: "registry/bases/radix/blocks/login-05/page.tsx", + type: "registry:page", + target: "app/login/page.tsx", + }, + { + path: "registry/bases/radix/blocks/login-05/components/login-form.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/blocks/login-05/page") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "login-05" + return { default: mod.default || mod[exportName] } + }), + categories: ["authentication", "login"], + meta: undefined, + }, + "signup-01": { + name: "signup-01", + title: "Signup 01", + description: "A simple signup form.", + type: "registry:block", + registryDependencies: ["button", "card", "input", "label"], + files: [ + { + path: "registry/bases/radix/blocks/signup-01/page.tsx", + type: "registry:page", + target: "app/signup/page.tsx", + }, + { + path: "registry/bases/radix/blocks/signup-01/components/signup-form.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/blocks/signup-01/page") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "signup-01" + return { default: mod.default || mod[exportName] } + }), + categories: ["authentication", "signup"], + meta: undefined, + }, + "signup-02": { + name: "signup-02", + title: "Signup 02", + description: "A two column signup page with a cover image.", + type: "registry:block", + registryDependencies: ["button", "input", "label", "field"], + files: [ + { + path: "registry/bases/radix/blocks/signup-02/page.tsx", + type: "registry:page", + target: "app/signup/page.tsx", + }, + { + path: "registry/bases/radix/blocks/signup-02/components/signup-form.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/blocks/signup-02/page") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "signup-02" + return { default: mod.default || mod[exportName] } + }), + categories: ["authentication", "signup"], + meta: undefined, + }, + "signup-03": { + name: "signup-03", + title: "Signup 03", + description: "A signup page with a muted background color.", + type: "registry:block", + registryDependencies: ["button", "card", "input", "label", "field"], + files: [ + { + path: "registry/bases/radix/blocks/signup-03/page.tsx", + type: "registry:page", + target: "app/signup/page.tsx", + }, + { + path: "registry/bases/radix/blocks/signup-03/components/signup-form.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/blocks/signup-03/page") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "signup-03" + return { default: mod.default || mod[exportName] } + }), + categories: ["authentication", "signup"], + meta: undefined, + }, + "signup-04": { + name: "signup-04", + title: "Signup 04", + description: "A signup page with form and image.", + type: "registry:block", + registryDependencies: ["button", "card", "input", "label", "field"], + files: [ + { + path: "registry/bases/radix/blocks/signup-04/page.tsx", + type: "registry:page", + target: "app/signup/page.tsx", + }, + { + path: "registry/bases/radix/blocks/signup-04/components/signup-form.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/blocks/signup-04/page") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "signup-04" + return { default: mod.default || mod[exportName] } + }), + categories: ["authentication", "signup"], + meta: undefined, + }, + "signup-05": { + name: "signup-05", + title: "Signup 05", + description: "A simple signup form with social providers.", + type: "registry:block", + registryDependencies: ["button", "input", "label"], + files: [ + { + path: "registry/bases/radix/blocks/signup-05/page.tsx", + type: "registry:page", + target: "app/signup/page.tsx", + }, + { + path: "registry/bases/radix/blocks/signup-05/components/signup-form.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/blocks/signup-05/page") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "signup-05" + return { default: mod.default || mod[exportName] } + }), + categories: ["authentication", "signup"], + meta: undefined, + }, + "dashboard-01": { + name: "dashboard-01", + title: "Dashboard 01", + description: "A dashboard with sidebar, charts and data table.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "label", + "chart", + "card", + "select", + "tabs", + "table", + "toggle-group", + "badge", + "button", + "checkbox", + "dropdown-menu", + "drawer", + "input", + "avatar", + "sheet", + "sonner", + ], + files: [ + { + path: "registry/bases/radix/blocks/dashboard-01/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/bases/radix/blocks/dashboard-01/data.json", + type: "registry:file", + target: "app/dashboard/data.json", + }, + { + path: "registry/bases/radix/blocks/dashboard-01/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/dashboard-01/components/chart-area-interactive.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/dashboard-01/components/data-table.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/dashboard-01/components/nav-documents.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/dashboard-01/components/nav-main.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/dashboard-01/components/nav-secondary.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/dashboard-01/components/nav-user.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/dashboard-01/components/section-cards.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/dashboard-01/components/site-header.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/blocks/dashboard-01/page" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "dashboard-01" + return { default: mod.default || mod[exportName] } + }), + categories: ["dashboard"], + meta: { iframeHeight: "1000px" }, + }, + "sidebar-01": { + name: "sidebar-01", + title: "Sidebar 01", + description: "A simple sidebar with navigation grouped by section.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "label", + "dropdown-menu", + ], + files: [ + { + path: "registry/bases/radix/blocks/sidebar-01/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/bases/radix/blocks/sidebar-01/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/sidebar-01/components/search-form.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/sidebar-01/components/version-switcher.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/blocks/sidebar-01/page" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar-01" + return { default: mod.default || mod[exportName] } + }), + categories: ["sidebar", "dashboard"], + meta: undefined, + }, + "sidebar-02": { + name: "sidebar-02", + title: "Sidebar 02", + description: "A sidebar with collapsible sections.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "label", + "dropdown-menu", + ], + files: [ + { + path: "registry/bases/radix/blocks/sidebar-02/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/bases/radix/blocks/sidebar-02/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/sidebar-02/components/search-form.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/sidebar-02/components/version-switcher.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/blocks/sidebar-02/page" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar-02" + return { default: mod.default || mod[exportName] } + }), + categories: ["sidebar", "dashboard"], + meta: undefined, + }, + "sidebar-03": { + name: "sidebar-03", + title: "Sidebar 03", + description: "A sidebar with submenus.", + type: "registry:block", + registryDependencies: ["sidebar", "breadcrumb"], + files: [ + { + path: "registry/bases/radix/blocks/sidebar-03/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/bases/radix/blocks/sidebar-03/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/blocks/sidebar-03/page" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar-03" + return { default: mod.default || mod[exportName] } + }), + categories: ["sidebar", "dashboard"], + meta: undefined, + }, + "sidebar-04": { + name: "sidebar-04", + title: "Sidebar 04", + description: "A floating sidebar with submenus.", + type: "registry:block", + registryDependencies: ["sidebar", "breadcrumb", "separator"], + files: [ + { + path: "registry/bases/radix/blocks/sidebar-04/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/bases/radix/blocks/sidebar-04/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/blocks/sidebar-04/page" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar-04" + return { default: mod.default || mod[exportName] } + }), + categories: ["sidebar", "dashboard"], + meta: undefined, + }, + "sidebar-05": { + name: "sidebar-05", + title: "Sidebar 05", + description: "A sidebar with collapsible submenus.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "label", + "collapsible", + ], + files: [ + { + path: "registry/bases/radix/blocks/sidebar-05/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/bases/radix/blocks/sidebar-05/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/sidebar-05/components/search-form.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/blocks/sidebar-05/page" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar-05" + return { default: mod.default || mod[exportName] } + }), + categories: ["sidebar", "dashboard"], + meta: undefined, + }, + "sidebar-06": { + name: "sidebar-06", + title: "Sidebar 06", + description: "A sidebar with submenus as dropdowns.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "card", + "dropdown-menu", + ], + files: [ + { + path: "registry/bases/radix/blocks/sidebar-06/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/bases/radix/blocks/sidebar-06/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/sidebar-06/components/nav-main.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/sidebar-06/components/sidebar-opt-in-form.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/blocks/sidebar-06/page" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar-06" + return { default: mod.default || mod[exportName] } + }), + categories: ["sidebar", "dashboard"], + meta: undefined, + }, + "sidebar-07": { + name: "sidebar-07", + title: "Sidebar 07", + description: "A sidebar that collapses to icons.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "collapsible", + "dropdown-menu", + "avatar", + ], + files: [ + { + path: "registry/bases/radix/blocks/sidebar-07/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/bases/radix/blocks/sidebar-07/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/sidebar-07/components/nav-main.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/sidebar-07/components/nav-projects.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/sidebar-07/components/nav-user.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/sidebar-07/components/team-switcher.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/blocks/sidebar-07/page" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar-07" + return { default: mod.default || mod[exportName] } + }), + categories: ["sidebar", "dashboard"], + meta: undefined, + }, + "sidebar-08": { + name: "sidebar-08", + title: "Sidebar 08", + description: "An inset sidebar with secondary navigation.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "collapsible", + "dropdown-menu", + "avatar", + ], + files: [ + { + path: "registry/bases/radix/blocks/sidebar-08/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/bases/radix/blocks/sidebar-08/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/sidebar-08/components/nav-main.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/sidebar-08/components/nav-projects.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/sidebar-08/components/nav-secondary.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/sidebar-08/components/nav-user.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/blocks/sidebar-08/page" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar-08" + return { default: mod.default || mod[exportName] } + }), + categories: ["sidebar", "dashboard"], + meta: undefined, + }, + "sidebar-09": { + name: "sidebar-09", + title: "Sidebar 09", + description: "Collapsible nested sidebars.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "collapsible", + "dropdown-menu", + "avatar", + "switch", + "label", + ], + files: [ + { + path: "registry/bases/radix/blocks/sidebar-09/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/bases/radix/blocks/sidebar-09/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/sidebar-09/components/nav-user.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/blocks/sidebar-09/page" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar-09" + return { default: mod.default || mod[exportName] } + }), + categories: ["sidebar", "dashboard"], + meta: undefined, + }, + "sidebar-10": { + name: "sidebar-10", + title: "Sidebar 10", + description: "A sidebar in a popover.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "popover", + "collapsible", + "dropdown-menu", + ], + files: [ + { + path: "registry/bases/radix/blocks/sidebar-10/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/bases/radix/blocks/sidebar-10/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/sidebar-10/components/nav-actions.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/sidebar-10/components/nav-favorites.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/sidebar-10/components/nav-main.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/sidebar-10/components/nav-secondary.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/sidebar-10/components/nav-workspaces.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/sidebar-10/components/team-switcher.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/blocks/sidebar-10/page" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar-10" + return { default: mod.default || mod[exportName] } + }), + categories: ["sidebar", "dashboard"], + meta: undefined, + }, + "sidebar-11": { + name: "sidebar-11", + title: "Sidebar 11", + description: "A sidebar with a collapsible file tree.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "collapsible", + ], + files: [ + { + path: "registry/bases/radix/blocks/sidebar-11/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/bases/radix/blocks/sidebar-11/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/blocks/sidebar-11/page" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar-11" + return { default: mod.default || mod[exportName] } + }), + categories: ["sidebar", "dashboard"], + meta: undefined, + }, + "sidebar-12": { + name: "sidebar-12", + title: "Sidebar 12", + description: "A sidebar with a calendar.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "collapsible", + "calendar", + "dropdown-menu", + "avatar", + ], + files: [ + { + path: "registry/bases/radix/blocks/sidebar-12/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/bases/radix/blocks/sidebar-12/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/sidebar-12/components/calendars.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/sidebar-12/components/date-picker.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/sidebar-12/components/nav-user.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/blocks/sidebar-12/page" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar-12" + return { default: mod.default || mod[exportName] } + }), + categories: ["sidebar", "dashboard"], + meta: undefined, + }, + "sidebar-13": { + name: "sidebar-13", + title: "Sidebar 13", + description: "A sidebar in a dialog.", + type: "registry:block", + registryDependencies: ["sidebar", "breadcrumb", "button", "dialog"], + files: [ + { + path: "registry/bases/radix/blocks/sidebar-13/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/bases/radix/blocks/sidebar-13/components/settings-dialog.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/blocks/sidebar-13/page" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar-13" + return { default: mod.default || mod[exportName] } + }), + categories: ["sidebar", "dashboard"], + meta: undefined, + }, + "sidebar-14": { + name: "sidebar-14", + title: "Sidebar 14", + description: "A sidebar on the right.", + type: "registry:block", + registryDependencies: ["sidebar", "breadcrumb"], + files: [ + { + path: "registry/bases/radix/blocks/sidebar-14/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/bases/radix/blocks/sidebar-14/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/blocks/sidebar-14/page" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar-14" + return { default: mod.default || mod[exportName] } + }), + categories: ["sidebar", "dashboard"], + meta: undefined, + }, + "sidebar-15": { + name: "sidebar-15", + title: "Sidebar 15", + description: "A left and right sidebar.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "popover", + "collapsible", + "dropdown-menu", + "calendar", + "avatar", + ], + files: [ + { + path: "registry/bases/radix/blocks/sidebar-15/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/bases/radix/blocks/sidebar-15/components/calendars.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/sidebar-15/components/date-picker.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/sidebar-15/components/nav-favorites.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/sidebar-15/components/nav-main.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/sidebar-15/components/nav-secondary.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/sidebar-15/components/nav-user.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/sidebar-15/components/nav-workspaces.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/sidebar-15/components/sidebar-left.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/sidebar-15/components/sidebar-right.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/sidebar-15/components/team-switcher.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/blocks/sidebar-15/page" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar-15" + return { default: mod.default || mod[exportName] } + }), + categories: ["sidebar", "dashboard"], + meta: undefined, + }, + "sidebar-16": { + name: "sidebar-16", + title: "Sidebar 16", + description: "A sidebar with a sticky site header.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "collapsible", + "dropdown-menu", + "avatar", + "button", + "label", + ], + files: [ + { + path: "registry/bases/radix/blocks/sidebar-16/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/bases/radix/blocks/sidebar-16/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/sidebar-16/components/nav-main.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/sidebar-16/components/nav-projects.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/sidebar-16/components/nav-secondary.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/sidebar-16/components/nav-user.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/sidebar-16/components/search-form.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/radix/blocks/sidebar-16/components/site-header.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/radix/blocks/sidebar-16/page" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar-16" + return { default: mod.default || mod[exportName] } + }), + categories: ["sidebar", "dashboard"], + meta: undefined, + }, + "use-mobile": { + name: "use-mobile", + title: "undefined", + description: "", + type: "registry:hook", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/radix/hooks/use-mobile.ts", + type: "registry:hook", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/radix/hooks/use-mobile") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "use-mobile" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + }, + base: { + accordion: { + name: "accordion", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/ui/accordion.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/accordion") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "accordion" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/accordion", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/accordion-example.tsx", + api: "https://base-ui.com/react/components/accordion.md", + }, + }, + }, + alert: { + name: "alert", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/ui/alert.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/alert") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "alert" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/alert", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/alert-example.tsx", + }, + }, + }, + "alert-dialog": { + name: "alert-dialog", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: ["button"], + files: [ + { + path: "registry/bases/base/ui/alert-dialog.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/alert-dialog") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "alert-dialog" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/alert-dialog", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/alert-dialog-example.tsx", + api: "https://base-ui.com/react/components/alert-dialog.md", + }, + }, + }, + "aspect-ratio": { + name: "aspect-ratio", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/ui/aspect-ratio.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/aspect-ratio") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "aspect-ratio" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/aspect-ratio", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/aspect-ratio-example.tsx", + }, + }, + }, + avatar: { + name: "avatar", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/ui/avatar.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/avatar") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "avatar" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/avatar", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/avatar-example.tsx", + api: "https://base-ui.com/react/components/avatar.md", + }, + }, + }, + badge: { + name: "badge", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/ui/badge.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/badge") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "badge" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/badge", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/badge-example.tsx", + }, + }, + }, + breadcrumb: { + name: "breadcrumb", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/ui/breadcrumb.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/breadcrumb") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "breadcrumb" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/breadcrumb", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/breadcrumb-example.tsx", + }, + }, + }, + button: { + name: "button", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/ui/button.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/button") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "button" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/button", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/button-example.tsx", + }, + }, + }, + "button-group": { + name: "button-group", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: ["separator"], + files: [ + { + path: "registry/bases/base/ui/button-group.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/button-group") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "button-group" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/button-group", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/button-group-example.tsx", + }, + }, + }, + calendar: { + name: "calendar", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: ["button"], + files: [ + { + path: "registry/bases/base/ui/calendar.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/calendar") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "calendar" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/calendar", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/calendar-example.tsx", + api: "https://react-day-picker.js.org", + }, + }, + }, + card: { + name: "card", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/ui/card.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/card") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "card" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/card", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/card-example.tsx", + }, + }, + }, + carousel: { + name: "carousel", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: ["button"], + files: [ + { + path: "registry/bases/base/ui/carousel.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/carousel") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "carousel" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/carousel", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/carousel-example.tsx", + api: "https://www.embla-carousel.com/get-started/react", + }, + }, + }, + chart: { + name: "chart", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: ["card"], + files: [ + { + path: "registry/bases/base/ui/chart.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/chart") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "chart" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/chart", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/chart-example.tsx", + }, + }, + }, + checkbox: { + name: "checkbox", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/ui/checkbox.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/checkbox") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "checkbox" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/checkbox", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/checkbox-example.tsx", + api: "https://base-ui.com/react/components/checkbox.md", + }, + }, + }, + collapsible: { + name: "collapsible", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/ui/collapsible.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/collapsible") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "collapsible" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/collapsible", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/collapsible-example.tsx", + api: "https://base-ui.com/react/components/collapsible.md", + }, + }, + }, + combobox: { + name: "combobox", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: ["button", "input-group"], + files: [ + { + path: "registry/bases/base/ui/combobox.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/combobox") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "combobox" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/combobox", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/combobox-example.tsx", + api: "https://base-ui.com/react/components/combobox.md", + }, + }, + }, + command: { + name: "command", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: ["dialog", "input-group"], + files: [ + { + path: "registry/bases/base/ui/command.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/command") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "command" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/command", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/command-example.tsx", + api: "https://github.com/dip/cmdk", + }, + }, + }, + "context-menu": { + name: "context-menu", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/ui/context-menu.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/context-menu") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "context-menu" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/context-menu", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/context-menu-example.tsx", + api: "https://base-ui.com/react/components/context-menu.md", + }, + }, + }, + dialog: { + name: "dialog", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: ["button"], + files: [ + { + path: "registry/bases/base/ui/dialog.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/dialog") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "dialog" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/dialog", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/dialog-example.tsx", + api: "https://base-ui.com/react/components/dialog.md", + }, + }, + }, + drawer: { + name: "drawer", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/ui/drawer.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/drawer") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "drawer" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/drawer", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/drawer-example.tsx", + api: "https://vaul.emilkowal.ski/getting-started", + }, + }, + }, + "dropdown-menu": { + name: "dropdown-menu", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/ui/dropdown-menu.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/dropdown-menu") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "dropdown-menu" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/dropdown-menu", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/dropdown-menu-example.tsx", + api: "https://base-ui.com/react/components/menu.md", + }, + }, + }, + empty: { + name: "empty", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/ui/empty.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/empty") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "empty" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/empty", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/empty-example.tsx", + }, + }, + }, + field: { + name: "field", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: ["label", "separator"], + files: [ + { + path: "registry/bases/base/ui/field.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/field") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "field" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/field", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/field-example.tsx", + }, + }, + }, + "hover-card": { + name: "hover-card", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/ui/hover-card.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/hover-card") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "hover-card" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/hover-card", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/hover-card-example.tsx", + api: "https://base-ui.com/react/components/hover-card.md", + }, + }, + }, + input: { + name: "input", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/ui/input.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/input") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "input" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/input", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/input-example.tsx", + }, + }, + }, + "input-group": { + name: "input-group", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: ["button", "input", "textarea"], + files: [ + { + path: "registry/bases/base/ui/input-group.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/input-group") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "input-group" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/input-group", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/input-group-example.tsx", + }, + }, + }, + "input-otp": { + name: "input-otp", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/ui/input-otp.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/input-otp") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "input-otp" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/input-otp", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/input-otp-example.tsx", + api: "https://input-otp.rodz.dev", + }, + }, + }, + item: { + name: "item", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: ["separator"], + files: [ + { + path: "registry/bases/base/ui/item.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/item") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "item" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/item", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/item-example.tsx", + }, + }, + }, + label: { + name: "label", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/ui/label.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/label") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "label" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/label", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/label-example.tsx", + api: "https://base-ui.com/react/components/label.md", + }, + }, + }, + menubar: { + name: "menubar", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: ["dropdown-menu"], + files: [ + { + path: "registry/bases/base/ui/menubar.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/menubar") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "menubar" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/menubar", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/menubar-example.tsx", + api: "https://base-ui.com/react/components/menubar.md", + }, + }, + }, + "navigation-menu": { + name: "navigation-menu", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/ui/navigation-menu.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/navigation-menu") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "navigation-menu" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/navigation-menu", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/navigation-menu-example.tsx", + api: "https://base-ui.com/react/components/navigation-menu.md", + }, + }, + }, + pagination: { + name: "pagination", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: ["button"], + files: [ + { + path: "registry/bases/base/ui/pagination.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/pagination") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "pagination" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/pagination", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/pagination-example.tsx", + }, + }, + }, + popover: { + name: "popover", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/ui/popover.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/popover") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "popover" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/popover", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/popover-example.tsx", + api: "https://base-ui.com/react/components/popover.md", + }, + }, + }, + progress: { + name: "progress", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/ui/progress.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/progress") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "progress" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/progress", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/progress-example.tsx", + api: "https://base-ui.com/react/components/progress.md", + }, + }, + }, + "radio-group": { + name: "radio-group", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/ui/radio-group.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/radio-group") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "radio-group" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/radio-group", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/radio-group-example.tsx", + api: "https://base-ui.com/react/components/radio-group.md", + }, + }, + }, + resizable: { + name: "resizable", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/ui/resizable.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/resizable") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "resizable" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/resizable", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/resizable-example.tsx", + api: "https://github.com/bvaughn/react-resizable-panels", + }, + }, + }, + "scroll-area": { + name: "scroll-area", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/ui/scroll-area.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/scroll-area") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "scroll-area" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/scroll-area", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/scroll-area-example.tsx", + api: "https://base-ui.com/react/components/scroll-area.md", + }, + }, + }, + select: { + name: "select", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/ui/select.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/select") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "select" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/select", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/select-example.tsx", + api: "https://base-ui.com/react/components/select.md", + }, + }, + }, + separator: { + name: "separator", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/ui/separator.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/separator") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "separator" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/separator", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/separator-example.tsx", + api: "https://base-ui.com/react/components/separator.md", + }, + }, + }, + sheet: { + name: "sheet", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: ["button"], + files: [ + { + path: "registry/bases/base/ui/sheet.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/sheet") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sheet" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/sheet", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/sheet-example.tsx", + api: "https://base-ui.com/react/components/dialog.md", + }, + }, + }, + sidebar: { + name: "sidebar", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: [ + "button", + "input", + "separator", + "sheet", + "skeleton", + "tooltip", + "use-mobile", + ], + files: [ + { + path: "registry/bases/base/ui/sidebar.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/sidebar") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/sidebar", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/sidebar-example.tsx", + }, + }, + }, + skeleton: { + name: "skeleton", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/ui/skeleton.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/skeleton") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "skeleton" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/skeleton", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/skeleton-example.tsx", + }, + }, + }, + slider: { + name: "slider", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/ui/slider.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/slider") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "slider" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/slider", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/slider-example.tsx", + api: "https://base-ui.com/react/components/slider.md", + }, + }, + }, + sonner: { + name: "sonner", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/ui/sonner.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/sonner") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sonner" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/sonner", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/sonner-example.tsx", + api: "https://sonner.emilkowal.ski", + }, + }, + }, + spinner: { + name: "spinner", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/ui/spinner.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/spinner") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "spinner" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/spinner", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/spinner-example.tsx", + }, + }, + }, + switch: { + name: "switch", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/ui/switch.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/switch") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "switch" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/switch", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/switch-example.tsx", + api: "https://base-ui.com/react/components/switch.md", + }, + }, + }, + table: { + name: "table", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/ui/table.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/table") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "table" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/table", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/table-example.tsx", + }, + }, + }, + tabs: { + name: "tabs", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/ui/tabs.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/tabs") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "tabs" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/tabs", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/tabs-example.tsx", + api: "https://base-ui.com/react/components/tabs.md", + }, + }, + }, + textarea: { + name: "textarea", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/ui/textarea.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/textarea") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "textarea" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/textarea", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/textarea-example.tsx", + }, + }, + }, + toggle: { + name: "toggle", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/ui/toggle.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/toggle") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "toggle" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/toggle", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/toggle-example.tsx", + api: "https://base-ui.com/react/components/toggle.md", + }, + }, + }, + "toggle-group": { + name: "toggle-group", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: ["toggle"], + files: [ + { + path: "registry/bases/base/ui/toggle-group.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/toggle-group") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "toggle-group" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/toggle-group", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/toggle-group-example.tsx", + api: "https://base-ui.com/react/components/toggle-group.md", + }, + }, + }, + tooltip: { + name: "tooltip", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/ui/tooltip.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/tooltip") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "tooltip" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/tooltip", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/tooltip-example.tsx", + api: "https://base-ui.com/react/components/tooltip.md", + }, + }, + }, + kbd: { + name: "kbd", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/ui/kbd.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/kbd") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "kbd" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/kbd", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/kbd-example.tsx", + }, + }, + }, + "native-select": { + name: "native-select", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/ui/native-select.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/native-select") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "native-select" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/native-select", + examples: + "https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/bases/base/examples/native-select-example.tsx", + }, + }, + }, + direction: { + name: "direction", + title: "undefined", + description: "", + type: "registry:ui", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/ui/direction.tsx", + type: "registry:ui", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/ui/direction") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "direction" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: { + links: { + docs: "https://ui.shadcn.com/docs/components/base/direction", + api: "https://base-ui.com/react/utils/direction-provider.md", + }, + }, + }, + "accordion-example": { + name: "accordion-example", + title: "Accordion", + description: "", + type: "registry:example", + registryDependencies: ["accordion", "button", "card", "example"], + files: [ + { + path: "registry/bases/base/examples/accordion-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/accordion-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "accordion-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "alert-example": { + name: "alert-example", + title: "Alert", + description: "", + type: "registry:example", + registryDependencies: ["alert", "badge", "example"], + files: [ + { + path: "registry/bases/base/examples/alert-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/examples/alert-example") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "alert-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "alert-dialog-example": { + name: "alert-dialog-example", + title: "Alert Dialog", + description: "", + type: "registry:example", + registryDependencies: ["alert-dialog", "button", "dialog", "example"], + files: [ + { + path: "registry/bases/base/examples/alert-dialog-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/alert-dialog-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "alert-dialog-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "aspect-ratio-example": { + name: "aspect-ratio-example", + title: "Aspect Ratio", + description: "", + type: "registry:example", + registryDependencies: ["aspect-ratio", "example"], + files: [ + { + path: "registry/bases/base/examples/aspect-ratio-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/aspect-ratio-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "aspect-ratio-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "avatar-example": { + name: "avatar-example", + title: "Avatar", + description: "", + type: "registry:example", + registryDependencies: ["avatar", "button", "empty", "example"], + files: [ + { + path: "registry/bases/base/examples/avatar-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/avatar-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "avatar-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "badge-example": { + name: "badge-example", + title: "Badge", + description: "", + type: "registry:example", + registryDependencies: ["badge", "spinner", "example"], + files: [ + { + path: "registry/bases/base/examples/badge-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/examples/badge-example") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "badge-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "breadcrumb-example": { + name: "breadcrumb-example", + title: "Breadcrumb", + description: "", + type: "registry:example", + registryDependencies: ["breadcrumb", "dropdown-menu", "example"], + files: [ + { + path: "registry/bases/base/examples/breadcrumb-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/breadcrumb-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "breadcrumb-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "button-example": { + name: "button-example", + title: "Button", + description: "", + type: "registry:example", + registryDependencies: ["button", "example"], + files: [ + { + path: "registry/bases/base/examples/button-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/button-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "button-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "button-group-example": { + name: "button-group-example", + title: "Button Group", + description: "", + type: "registry:example", + registryDependencies: [ + "button", + "button-group", + "dropdown-menu", + "field", + "input", + "input-group", + "label", + "popover", + "select", + "tooltip", + "example", + ], + files: [ + { + path: "registry/bases/base/examples/button-group-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/button-group-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "button-group-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "calendar-example": { + name: "calendar-example", + title: "Calendar", + description: "", + type: "registry:example", + registryDependencies: [ + "button", + "calendar", + "card", + "field", + "input", + "label", + "popover", + "example", + ], + files: [ + { + path: "registry/bases/base/examples/calendar-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/calendar-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "calendar-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "card-example": { + name: "card-example", + title: "Card", + description: "", + type: "registry:example", + registryDependencies: [ + "avatar", + "button", + "card", + "field", + "input", + "example", + ], + files: [ + { + path: "registry/bases/base/examples/card-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/examples/card-example") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "card-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "carousel-example": { + name: "carousel-example", + title: "Carousel", + description: "", + type: "registry:example", + registryDependencies: ["card", "carousel", "example"], + files: [ + { + path: "registry/bases/base/examples/carousel-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/carousel-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "carousel-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "chart-example": { + name: "chart-example", + title: "Chart", + description: "", + type: "registry:example", + registryDependencies: ["chart", "card", "example"], + files: [ + { + path: "registry/bases/base/examples/chart-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/examples/chart-example") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "chart-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "checkbox-example": { + name: "checkbox-example", + title: "Checkbox", + description: "", + type: "registry:example", + registryDependencies: ["checkbox", "field", "table", "example"], + files: [ + { + path: "registry/bases/base/examples/checkbox-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/checkbox-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "checkbox-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "collapsible-example": { + name: "collapsible-example", + title: "Collapsible", + description: "", + type: "registry:example", + registryDependencies: [ + "button", + "card", + "collapsible", + "field", + "input", + "tabs", + "example", + ], + files: [ + { + path: "registry/bases/base/examples/collapsible-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/collapsible-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "collapsible-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "combobox-example": { + name: "combobox-example", + title: "Combobox", + description: "", + type: "registry:example", + registryDependencies: [ + "button", + "card", + "combobox", + "dialog", + "field", + "input", + "input-group", + "item", + "select", + "example", + ], + files: [ + { + path: "registry/bases/base/examples/combobox-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/combobox-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "combobox-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "command-example": { + name: "command-example", + title: "Command", + description: "", + type: "registry:example", + registryDependencies: ["button", "command", "example"], + files: [ + { + path: "registry/bases/base/examples/command-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/command-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "command-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "context-menu-example": { + name: "context-menu-example", + title: "Context Menu", + description: "", + type: "registry:example", + registryDependencies: ["button", "context-menu", "dialog", "example"], + files: [ + { + path: "registry/bases/base/examples/context-menu-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/context-menu-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "context-menu-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "dialog-example": { + name: "dialog-example", + title: "Dialog", + description: "", + type: "registry:example", + registryDependencies: [ + "button", + "checkbox", + "dialog", + "field", + "input", + "input-group", + "kbd", + "native-select", + "select", + "switch", + "tabs", + "textarea", + "tooltip", + "example", + ], + files: [ + { + path: "registry/bases/base/examples/dialog-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/dialog-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "dialog-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "drawer-example": { + name: "drawer-example", + title: "Drawer", + description: "", + type: "registry:example", + registryDependencies: ["drawer", "example"], + files: [ + { + path: "registry/bases/base/examples/drawer-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/drawer-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "drawer-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "dropdown-menu-example": { + name: "dropdown-menu-example", + title: "Dropdown Menu", + description: "", + type: "registry:example", + registryDependencies: [ + "avatar", + "button", + "dialog", + "dropdown-menu", + "example", + ], + files: [ + { + path: "registry/bases/base/examples/dropdown-menu-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/dropdown-menu-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "dropdown-menu-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "empty-example": { + name: "empty-example", + title: "Empty", + description: "", + type: "registry:example", + registryDependencies: [ + "button", + "empty", + "input-group", + "kbd", + "example", + ], + files: [ + { + path: "registry/bases/base/examples/empty-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/examples/empty-example") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "empty-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "field-example": { + name: "field-example", + title: "Field", + description: "", + type: "registry:example", + registryDependencies: [ + "badge", + "checkbox", + "field", + "input", + "input-otp", + "native-select", + "radio-group", + "select", + "slider", + "switch", + "textarea", + "example", + ], + files: [ + { + path: "registry/bases/base/examples/field-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/examples/field-example") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "field-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "hover-card-example": { + name: "hover-card-example", + title: "Hover Card", + description: "", + type: "registry:example", + registryDependencies: ["button", "dialog", "hover-card", "example"], + files: [ + { + path: "registry/bases/base/examples/hover-card-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/hover-card-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "hover-card-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "input-example": { + name: "input-example", + title: "Input", + description: "", + type: "registry:example", + registryDependencies: [ + "button", + "field", + "input", + "native-select", + "select", + "example", + ], + files: [ + { + path: "registry/bases/base/examples/input-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/examples/input-example") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "input-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "input-group-example": { + name: "input-group-example", + title: "Input Group", + description: "", + type: "registry:example", + registryDependencies: [ + "button", + "button-group", + "card", + "dropdown-menu", + "field", + "input", + "input-group", + "kbd", + "popover", + "spinner", + "textarea", + "tooltip", + "example", + ], + files: [ + { + path: "registry/bases/base/examples/input-group-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/input-group-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "input-group-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "input-otp-example": { + name: "input-otp-example", + title: "Input OTP", + description: "", + type: "registry:example", + registryDependencies: ["button", "card", "field", "input-otp", "example"], + files: [ + { + path: "registry/bases/base/examples/input-otp-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/input-otp-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "input-otp-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "item-example": { + name: "item-example", + title: "Item", + description: "", + type: "registry:example", + registryDependencies: ["button", "item", "example"], + files: [ + { + path: "registry/bases/base/examples/item-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/examples/item-example") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "item-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "kbd-example": { + name: "kbd-example", + title: "Kbd", + description: "", + type: "registry:example", + registryDependencies: [ + "button", + "input-group", + "kbd", + "tooltip", + "example", + ], + files: [ + { + path: "registry/bases/base/examples/kbd-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/examples/kbd-example") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "kbd-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "label-example": { + name: "label-example", + title: "Label", + description: "", + type: "registry:example", + registryDependencies: [ + "checkbox", + "field", + "input", + "label", + "textarea", + "example", + ], + files: [ + { + path: "registry/bases/base/examples/label-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/examples/label-example") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "label-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "menubar-example": { + name: "menubar-example", + title: "Menubar", + description: "", + type: "registry:example", + registryDependencies: ["button", "dialog", "menubar", "example"], + files: [ + { + path: "registry/bases/base/examples/menubar-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/menubar-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "menubar-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "native-select-example": { + name: "native-select-example", + title: "Native Select", + description: "", + type: "registry:example", + registryDependencies: ["field", "native-select", "example"], + files: [ + { + path: "registry/bases/base/examples/native-select-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/native-select-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "native-select-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "navigation-menu-example": { + name: "navigation-menu-example", + title: "Navigation Menu", + description: "", + type: "registry:example", + registryDependencies: ["button", "dialog", "navigation-menu", "example"], + files: [ + { + path: "registry/bases/base/examples/navigation-menu-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/navigation-menu-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "navigation-menu-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "pagination-example": { + name: "pagination-example", + title: "Pagination", + description: "", + type: "registry:example", + registryDependencies: ["field", "pagination", "select", "example"], + files: [ + { + path: "registry/bases/base/examples/pagination-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/pagination-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "pagination-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "popover-example": { + name: "popover-example", + title: "Popover", + description: "", + type: "registry:example", + registryDependencies: [ + "button", + "dialog", + "field", + "input", + "popover", + "example", + ], + files: [ + { + path: "registry/bases/base/examples/popover-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/popover-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "popover-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "progress-example": { + name: "progress-example", + title: "Progress", + description: "", + type: "registry:example", + registryDependencies: ["field", "item", "progress", "slider", "example"], + files: [ + { + path: "registry/bases/base/examples/progress-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/progress-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "progress-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "radio-group-example": { + name: "radio-group-example", + title: "Radio Group", + description: "", + type: "registry:example", + registryDependencies: ["field", "radio-group", "example"], + files: [ + { + path: "registry/bases/base/examples/radio-group-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/radio-group-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "radio-group-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "resizable-example": { + name: "resizable-example", + title: "Resizable", + description: "", + type: "registry:example", + registryDependencies: ["resizable", "example"], + files: [ + { + path: "registry/bases/base/examples/resizable-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/resizable-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "resizable-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "scroll-area-example": { + name: "scroll-area-example", + title: "Scroll Area", + description: "", + type: "registry:example", + registryDependencies: ["scroll-area", "separator", "example"], + files: [ + { + path: "registry/bases/base/examples/scroll-area-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/scroll-area-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "scroll-area-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "select-example": { + name: "select-example", + title: "Select", + description: "", + type: "registry:example", + registryDependencies: [ + "button", + "dialog", + "field", + "input", + "item", + "native-select", + "select", + "example", + ], + files: [ + { + path: "registry/bases/base/examples/select-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/select-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "select-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "separator-example": { + name: "separator-example", + title: "Separator", + description: "", + type: "registry:example", + registryDependencies: ["separator", "example"], + files: [ + { + path: "registry/bases/base/examples/separator-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/separator-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "separator-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "sheet-example": { + name: "sheet-example", + title: "Sheet", + description: "", + type: "registry:example", + registryDependencies: ["button", "field", "input", "sheet", "example"], + files: [ + { + path: "registry/bases/base/examples/sheet-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/examples/sheet-example") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sheet-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "sidebar-example": { + name: "sidebar-example", + title: "Sidebar", + description: "", + type: "registry:example", + registryDependencies: [ + "button", + "dropdown-menu", + "item", + "label", + "sidebar", + "example", + ], + files: [ + { + path: "registry/bases/base/examples/sidebar-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/sidebar-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "sidebar-icon-example": { + name: "sidebar-icon-example", + title: "Sidebar (Icon)", + description: "", + type: "registry:example", + registryDependencies: [ + "avatar", + "button", + "collapsible", + "dropdown-menu", + "item", + "sidebar", + "example", + ], + files: [ + { + path: "registry/bases/base/examples/sidebar-icon-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/sidebar-icon-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar-icon-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "sidebar-inset-example": { + name: "sidebar-inset-example", + title: "Sidebar (Inset)", + description: "", + type: "registry:example", + registryDependencies: ["collapsible", "sidebar", "example"], + files: [ + { + path: "registry/bases/base/examples/sidebar-inset-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/sidebar-inset-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar-inset-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "sidebar-floating-example": { + name: "sidebar-floating-example", + title: "Sidebar (Floating)", + description: "", + type: "registry:example", + registryDependencies: [ + "button", + "card", + "dropdown-menu", + "field", + "item", + "sidebar", + "example", + ], + files: [ + { + path: "registry/bases/base/examples/sidebar-floating-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/sidebar-floating-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar-floating-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "skeleton-example": { + name: "skeleton-example", + title: "Skeleton", + description: "", + type: "registry:example", + registryDependencies: ["skeleton", "example"], + files: [ + { + path: "registry/bases/base/examples/skeleton-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/skeleton-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "skeleton-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "slider-example": { + name: "slider-example", + title: "Slider", + description: "", + type: "registry:example", + registryDependencies: ["label", "slider", "example"], + files: [ + { + path: "registry/bases/base/examples/slider-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/slider-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "slider-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "sonner-example": { + name: "sonner-example", + title: "Sonner", + description: "", + type: "registry:example", + registryDependencies: ["sonner", "example"], + files: [ + { + path: "registry/bases/base/examples/sonner-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/sonner-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sonner-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "spinner-example": { + name: "spinner-example", + title: "Spinner", + description: "", + type: "registry:example", + registryDependencies: [ + "badge", + "button", + "empty", + "field", + "input-group", + "spinner", + "example", + ], + files: [ + { + path: "registry/bases/base/examples/spinner-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/spinner-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "spinner-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "switch-example": { + name: "switch-example", + title: "Switch", + description: "", + type: "registry:example", + registryDependencies: ["field", "label", "switch", "example"], + files: [ + { + path: "registry/bases/base/examples/switch-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/switch-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "switch-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "table-example": { + name: "table-example", + title: "Table", + description: "", + type: "registry:example", + registryDependencies: [ + "button", + "dropdown-menu", + "input", + "select", + "table", + "example", + ], + files: [ + { + path: "registry/bases/base/examples/table-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/examples/table-example") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "table-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "tabs-example": { + name: "tabs-example", + title: "Tabs", + description: "", + type: "registry:example", + registryDependencies: ["button", "dropdown-menu", "tabs", "example"], + files: [ + { + path: "registry/bases/base/examples/tabs-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/examples/tabs-example") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "tabs-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "textarea-example": { + name: "textarea-example", + title: "Textarea", + description: "", + type: "registry:example", + registryDependencies: ["field", "textarea", "example"], + files: [ + { + path: "registry/bases/base/examples/textarea-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/textarea-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "textarea-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "toggle-example": { + name: "toggle-example", + title: "Toggle", + description: "", + type: "registry:example", + registryDependencies: ["toggle", "example"], + files: [ + { + path: "registry/bases/base/examples/toggle-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/toggle-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "toggle-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "toggle-group-example": { + name: "toggle-group-example", + title: "Toggle Group", + description: "", + type: "registry:example", + registryDependencies: ["input", "select", "toggle-group", "example"], + files: [ + { + path: "registry/bases/base/examples/toggle-group-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/toggle-group-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "toggle-group-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "tooltip-example": { + name: "tooltip-example", + title: "Tooltip", + description: "", + type: "registry:example", + registryDependencies: ["button", "kbd", "tooltip", "example"], + files: [ + { + path: "registry/bases/base/examples/tooltip-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/tooltip-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "tooltip-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + demo: { + name: "demo", + title: "Demo", + description: "", + type: "registry:example", + registryDependencies: [ + "alert-dialog", + "badge", + "button", + "button-group", + "card", + "checkbox", + "dropdown-menu", + "field", + "input-group", + "item", + "radio-group", + "slider", + "switch", + "textarea", + ], + files: [ + { + path: "registry/bases/base/examples/demo.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/examples/demo") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "demo" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "component-example": { + name: "component-example", + title: "Example", + description: "", + type: "registry:example", + registryDependencies: [ + "alert-dialog", + "badge", + "button", + "card", + "combobox", + "dropdown-menu", + "field", + "input", + "select", + "textarea", + "example", + ], + files: [ + { + path: "registry/bases/base/examples/component-example.tsx", + type: "registry:example", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/examples/component-example" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "component-example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + utils: { + name: "utils", + title: "undefined", + description: "", + type: "registry:lib", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/lib/utils.ts", + type: "registry:lib", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/lib/utils") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "utils" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + example: { + name: "example", + title: "Example", + description: "", + type: "registry:component", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/components/example.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/components/example") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "example" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + preview: { + name: "preview", + title: "Preview", + description: "", + type: "registry:block", + registryDependencies: [ + "alert-dialog", + "avatar", + "badge", + "button", + "button-group", + "card", + "chart", + "checkbox", + "combobox", + "dropdown-menu", + "empty", + "field", + "input", + "input-group", + "item", + "label", + "popover", + "radio-group", + "select", + "separator", + "sheet", + "slider", + "spinner", + "switch", + "textarea", + "tooltip", + "example", + ], + files: [ + { + path: "registry/bases/base/blocks/preview/index.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/blocks/preview/index") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "preview" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "preview-02": { + name: "preview-02", + title: "Preview 02", + description: "", + type: "registry:block", + registryDependencies: [ + "accordion", + "badge", + "breadcrumb", + "button", + "calendar", + "card", + "chart", + "checkbox", + "combobox", + "dropdown-menu", + "empty", + "field", + "input", + "input-group", + "item", + "label", + "native-select", + "progress", + "radio-group", + "select", + "separator", + "sidebar", + "skeleton", + "slider", + "spinner", + "switch", + "table", + "tabs", + "textarea", + "toggle-group", + ], + files: [ + { + path: "registry/bases/base/blocks/preview-02/index.tsx", + type: "registry:block", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/blocks/preview-02/index" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "preview-02" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + "login-01": { + name: "login-01", + title: "Login 01", + description: "A simple login form.", + type: "registry:block", + registryDependencies: ["button", "card", "input", "label", "field"], + files: [ + { + path: "registry/bases/base/blocks/login-01/page.tsx", + type: "registry:page", + target: "app/login/page.tsx", + }, + { + path: "registry/bases/base/blocks/login-01/components/login-form.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/blocks/login-01/page") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "login-01" + return { default: mod.default || mod[exportName] } + }), + categories: ["authentication", "login"], + meta: undefined, + }, + "login-02": { + name: "login-02", + title: "Login 02", + description: "A two column login page with a cover image.", + type: "registry:block", + registryDependencies: ["button", "input", "label", "field"], + files: [ + { + path: "registry/bases/base/blocks/login-02/page.tsx", + type: "registry:page", + target: "app/login/page.tsx", + }, + { + path: "registry/bases/base/blocks/login-02/components/login-form.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/blocks/login-02/page") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "login-02" + return { default: mod.default || mod[exportName] } + }), + categories: ["authentication", "login"], + meta: undefined, + }, + "login-03": { + name: "login-03", + title: "Login 03", + description: "A login page with a muted background color.", + type: "registry:block", + registryDependencies: ["button", "card", "input", "label", "field"], + files: [ + { + path: "registry/bases/base/blocks/login-03/page.tsx", + type: "registry:page", + target: "app/login/page.tsx", + }, + { + path: "registry/bases/base/blocks/login-03/components/login-form.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/blocks/login-03/page") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "login-03" + return { default: mod.default || mod[exportName] } + }), + categories: ["authentication", "login"], + meta: undefined, + }, + "login-04": { + name: "login-04", + title: "Login 04", + description: "A login page with form and image.", + type: "registry:block", + registryDependencies: ["button", "card", "input", "label", "field"], + files: [ + { + path: "registry/bases/base/blocks/login-04/page.tsx", + type: "registry:page", + target: "app/login/page.tsx", + }, + { + path: "registry/bases/base/blocks/login-04/components/login-form.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/blocks/login-04/page") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "login-04" + return { default: mod.default || mod[exportName] } + }), + categories: ["authentication", "login"], + meta: undefined, + }, + "login-05": { + name: "login-05", + title: "Login 05", + description: "A simple email-only login page.", + type: "registry:block", + registryDependencies: ["button", "input", "label", "field"], + files: [ + { + path: "registry/bases/base/blocks/login-05/page.tsx", + type: "registry:page", + target: "app/login/page.tsx", + }, + { + path: "registry/bases/base/blocks/login-05/components/login-form.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/blocks/login-05/page") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "login-05" + return { default: mod.default || mod[exportName] } + }), + categories: ["authentication", "login"], + meta: undefined, + }, + "signup-01": { + name: "signup-01", + title: "Signup 01", + description: "A simple signup form.", + type: "registry:block", + registryDependencies: ["button", "card", "input", "label"], + files: [ + { + path: "registry/bases/base/blocks/signup-01/page.tsx", + type: "registry:page", + target: "app/signup/page.tsx", + }, + { + path: "registry/bases/base/blocks/signup-01/components/signup-form.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/blocks/signup-01/page") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "signup-01" + return { default: mod.default || mod[exportName] } + }), + categories: ["authentication", "signup"], + meta: undefined, + }, + "signup-02": { + name: "signup-02", + title: "Signup 02", + description: "A two column signup page with a cover image.", + type: "registry:block", + registryDependencies: ["button", "input", "label", "field"], + files: [ + { + path: "registry/bases/base/blocks/signup-02/page.tsx", + type: "registry:page", + target: "app/signup/page.tsx", + }, + { + path: "registry/bases/base/blocks/signup-02/components/signup-form.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/blocks/signup-02/page") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "signup-02" + return { default: mod.default || mod[exportName] } + }), + categories: ["authentication", "signup"], + meta: undefined, + }, + "signup-03": { + name: "signup-03", + title: "Signup 03", + description: "A signup page with a muted background color.", + type: "registry:block", + registryDependencies: ["button", "card", "input", "label", "field"], + files: [ + { + path: "registry/bases/base/blocks/signup-03/page.tsx", + type: "registry:page", + target: "app/signup/page.tsx", + }, + { + path: "registry/bases/base/blocks/signup-03/components/signup-form.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/blocks/signup-03/page") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "signup-03" + return { default: mod.default || mod[exportName] } + }), + categories: ["authentication", "signup"], + meta: undefined, + }, + "signup-04": { + name: "signup-04", + title: "Signup 04", + description: "A signup page with form and image.", + type: "registry:block", + registryDependencies: ["button", "card", "input", "label", "field"], + files: [ + { + path: "registry/bases/base/blocks/signup-04/page.tsx", + type: "registry:page", + target: "app/signup/page.tsx", + }, + { + path: "registry/bases/base/blocks/signup-04/components/signup-form.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/blocks/signup-04/page") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "signup-04" + return { default: mod.default || mod[exportName] } + }), + categories: ["authentication", "signup"], + meta: undefined, + }, + "signup-05": { + name: "signup-05", + title: "Signup 05", + description: "A simple signup form with social providers.", + type: "registry:block", + registryDependencies: ["button", "input", "label"], + files: [ + { + path: "registry/bases/base/blocks/signup-05/page.tsx", + type: "registry:page", + target: "app/signup/page.tsx", + }, + { + path: "registry/bases/base/blocks/signup-05/components/signup-form.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/blocks/signup-05/page") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "signup-05" + return { default: mod.default || mod[exportName] } + }), + categories: ["authentication", "signup"], + meta: undefined, + }, + "dashboard-01": { + name: "dashboard-01", + title: "Dashboard 01", + description: "A dashboard with sidebar, charts and data table.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "label", + "chart", + "card", + "select", + "tabs", + "table", + "toggle-group", + "badge", + "button", + "checkbox", + "dropdown-menu", + "drawer", + "input", + "avatar", + "sheet", + "sonner", + ], + files: [ + { + path: "registry/bases/base/blocks/dashboard-01/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/bases/base/blocks/dashboard-01/data.json", + type: "registry:file", + target: "app/dashboard/data.json", + }, + { + path: "registry/bases/base/blocks/dashboard-01/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/dashboard-01/components/chart-area-interactive.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/dashboard-01/components/data-table.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/dashboard-01/components/nav-documents.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/dashboard-01/components/nav-main.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/dashboard-01/components/nav-secondary.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/dashboard-01/components/nav-user.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/dashboard-01/components/section-cards.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/dashboard-01/components/site-header.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import( + "@/registry/bases/base/blocks/dashboard-01/page" + ) + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "dashboard-01" + return { default: mod.default || mod[exportName] } + }), + categories: ["dashboard"], + meta: { iframeHeight: "1000px" }, + }, + "sidebar-01": { + name: "sidebar-01", + title: "Sidebar 01", + description: "A simple sidebar with navigation grouped by section.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "label", + "dropdown-menu", + ], + files: [ + { + path: "registry/bases/base/blocks/sidebar-01/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/bases/base/blocks/sidebar-01/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/sidebar-01/components/search-form.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/sidebar-01/components/version-switcher.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/blocks/sidebar-01/page") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar-01" + return { default: mod.default || mod[exportName] } + }), + categories: ["sidebar", "dashboard"], + meta: undefined, + }, + "sidebar-02": { + name: "sidebar-02", + title: "Sidebar 02", + description: "A sidebar with collapsible sections.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "label", + "dropdown-menu", + ], + files: [ + { + path: "registry/bases/base/blocks/sidebar-02/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/bases/base/blocks/sidebar-02/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/sidebar-02/components/search-form.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/sidebar-02/components/version-switcher.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/blocks/sidebar-02/page") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar-02" + return { default: mod.default || mod[exportName] } + }), + categories: ["sidebar", "dashboard"], + meta: undefined, + }, + "sidebar-03": { + name: "sidebar-03", + title: "Sidebar 03", + description: "A sidebar with submenus.", + type: "registry:block", + registryDependencies: ["sidebar", "breadcrumb"], + files: [ + { + path: "registry/bases/base/blocks/sidebar-03/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/bases/base/blocks/sidebar-03/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/blocks/sidebar-03/page") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar-03" + return { default: mod.default || mod[exportName] } + }), + categories: ["sidebar", "dashboard"], + meta: undefined, + }, + "sidebar-04": { + name: "sidebar-04", + title: "Sidebar 04", + description: "A floating sidebar with submenus.", + type: "registry:block", + registryDependencies: ["sidebar", "breadcrumb", "separator"], + files: [ + { + path: "registry/bases/base/blocks/sidebar-04/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/bases/base/blocks/sidebar-04/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/blocks/sidebar-04/page") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar-04" + return { default: mod.default || mod[exportName] } + }), + categories: ["sidebar", "dashboard"], + meta: undefined, + }, + "sidebar-05": { + name: "sidebar-05", + title: "Sidebar 05", + description: "A sidebar with collapsible submenus.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "label", + "collapsible", + ], + files: [ + { + path: "registry/bases/base/blocks/sidebar-05/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/bases/base/blocks/sidebar-05/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/sidebar-05/components/search-form.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/blocks/sidebar-05/page") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar-05" + return { default: mod.default || mod[exportName] } + }), + categories: ["sidebar", "dashboard"], + meta: undefined, + }, + "sidebar-06": { + name: "sidebar-06", + title: "Sidebar 06", + description: "A sidebar with submenus as dropdowns.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "card", + "dropdown-menu", + ], + files: [ + { + path: "registry/bases/base/blocks/sidebar-06/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/bases/base/blocks/sidebar-06/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/sidebar-06/components/nav-main.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/sidebar-06/components/sidebar-opt-in-form.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/blocks/sidebar-06/page") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar-06" + return { default: mod.default || mod[exportName] } + }), + categories: ["sidebar", "dashboard"], + meta: undefined, + }, + "sidebar-07": { + name: "sidebar-07", + title: "Sidebar 07", + description: "A sidebar that collapses to icons.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "collapsible", + "dropdown-menu", + "avatar", + ], + files: [ + { + path: "registry/bases/base/blocks/sidebar-07/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/bases/base/blocks/sidebar-07/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/sidebar-07/components/nav-main.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/sidebar-07/components/nav-projects.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/sidebar-07/components/nav-user.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/sidebar-07/components/team-switcher.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/blocks/sidebar-07/page") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar-07" + return { default: mod.default || mod[exportName] } + }), + categories: ["sidebar", "dashboard"], + meta: undefined, + }, + "sidebar-08": { + name: "sidebar-08", + title: "Sidebar 08", + description: "An inset sidebar with secondary navigation.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "collapsible", + "dropdown-menu", + "avatar", + ], + files: [ + { + path: "registry/bases/base/blocks/sidebar-08/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/bases/base/blocks/sidebar-08/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/sidebar-08/components/nav-main.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/sidebar-08/components/nav-projects.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/sidebar-08/components/nav-secondary.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/sidebar-08/components/nav-user.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/blocks/sidebar-08/page") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar-08" + return { default: mod.default || mod[exportName] } + }), + categories: ["sidebar", "dashboard"], + meta: undefined, + }, + "sidebar-09": { + name: "sidebar-09", + title: "Sidebar 09", + description: "Collapsible nested sidebars.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "collapsible", + "dropdown-menu", + "avatar", + "switch", + "label", + ], + files: [ + { + path: "registry/bases/base/blocks/sidebar-09/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/bases/base/blocks/sidebar-09/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/sidebar-09/components/nav-user.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/blocks/sidebar-09/page") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar-09" + return { default: mod.default || mod[exportName] } + }), + categories: ["sidebar", "dashboard"], + meta: undefined, + }, + "sidebar-10": { + name: "sidebar-10", + title: "Sidebar 10", + description: "A sidebar in a popover.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "popover", + "collapsible", + "dropdown-menu", + ], + files: [ + { + path: "registry/bases/base/blocks/sidebar-10/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/bases/base/blocks/sidebar-10/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/sidebar-10/components/nav-actions.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/sidebar-10/components/nav-favorites.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/sidebar-10/components/nav-main.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/sidebar-10/components/nav-secondary.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/sidebar-10/components/nav-workspaces.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/sidebar-10/components/team-switcher.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/blocks/sidebar-10/page") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar-10" + return { default: mod.default || mod[exportName] } + }), + categories: ["sidebar", "dashboard"], + meta: undefined, + }, + "sidebar-11": { + name: "sidebar-11", + title: "Sidebar 11", + description: "A sidebar with a collapsible file tree.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "collapsible", + ], + files: [ + { + path: "registry/bases/base/blocks/sidebar-11/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/bases/base/blocks/sidebar-11/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/blocks/sidebar-11/page") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar-11" + return { default: mod.default || mod[exportName] } + }), + categories: ["sidebar", "dashboard"], + meta: undefined, + }, + "sidebar-12": { + name: "sidebar-12", + title: "Sidebar 12", + description: "A sidebar with a calendar.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "collapsible", + "calendar", + "dropdown-menu", + "avatar", + ], + files: [ + { + path: "registry/bases/base/blocks/sidebar-12/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/bases/base/blocks/sidebar-12/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/sidebar-12/components/calendars.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/sidebar-12/components/date-picker.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/sidebar-12/components/nav-user.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/blocks/sidebar-12/page") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar-12" + return { default: mod.default || mod[exportName] } + }), + categories: ["sidebar", "dashboard"], + meta: undefined, + }, + "sidebar-13": { + name: "sidebar-13", + title: "Sidebar 13", + description: "A sidebar in a dialog.", + type: "registry:block", + registryDependencies: ["sidebar", "breadcrumb", "button", "dialog"], + files: [ + { + path: "registry/bases/base/blocks/sidebar-13/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/bases/base/blocks/sidebar-13/components/settings-dialog.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/blocks/sidebar-13/page") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar-13" + return { default: mod.default || mod[exportName] } + }), + categories: ["sidebar", "dashboard"], + meta: undefined, + }, + "sidebar-14": { + name: "sidebar-14", + title: "Sidebar 14", + description: "A sidebar on the right.", + type: "registry:block", + registryDependencies: ["sidebar", "breadcrumb"], + files: [ + { + path: "registry/bases/base/blocks/sidebar-14/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/bases/base/blocks/sidebar-14/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/blocks/sidebar-14/page") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar-14" + return { default: mod.default || mod[exportName] } + }), + categories: ["sidebar", "dashboard"], + meta: undefined, + }, + "sidebar-15": { + name: "sidebar-15", + title: "Sidebar 15", + description: "A left and right sidebar.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "popover", + "collapsible", + "dropdown-menu", + "calendar", + "avatar", + ], + files: [ + { + path: "registry/bases/base/blocks/sidebar-15/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/bases/base/blocks/sidebar-15/components/calendars.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/sidebar-15/components/date-picker.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/sidebar-15/components/nav-favorites.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/sidebar-15/components/nav-main.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/sidebar-15/components/nav-secondary.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/sidebar-15/components/nav-user.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/sidebar-15/components/nav-workspaces.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/sidebar-15/components/sidebar-left.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/sidebar-15/components/sidebar-right.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/sidebar-15/components/team-switcher.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/blocks/sidebar-15/page") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar-15" + return { default: mod.default || mod[exportName] } + }), + categories: ["sidebar", "dashboard"], + meta: undefined, + }, + "sidebar-16": { + name: "sidebar-16", + title: "Sidebar 16", + description: "A sidebar with a sticky site header.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "collapsible", + "dropdown-menu", + "avatar", + "button", + "label", + ], + files: [ + { + path: "registry/bases/base/blocks/sidebar-16/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "registry/bases/base/blocks/sidebar-16/components/app-sidebar.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/sidebar-16/components/nav-main.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/sidebar-16/components/nav-projects.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/sidebar-16/components/nav-secondary.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/sidebar-16/components/nav-user.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/sidebar-16/components/search-form.tsx", + type: "registry:component", + target: "", + }, + { + path: "registry/bases/base/blocks/sidebar-16/components/site-header.tsx", + type: "registry:component", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/blocks/sidebar-16/page") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "sidebar-16" + return { default: mod.default || mod[exportName] } + }), + categories: ["sidebar", "dashboard"], + meta: undefined, + }, + "use-mobile": { + name: "use-mobile", + title: "undefined", + description: "", + type: "registry:hook", + registryDependencies: undefined, + files: [ + { + path: "registry/bases/base/hooks/use-mobile.ts", + type: "registry:hook", + target: "", + }, + ], + component: React.lazy(async () => { + const mod = await import("@/registry/bases/base/hooks/use-mobile") + const exportName = + Object.keys(mod).find( + (key) => + typeof mod[key] === "function" || typeof mod[key] === "object" + ) || "use-mobile" + return { default: mod.default || mod[exportName] } + }), + categories: undefined, + meta: undefined, + }, + }, +} diff --git a/apps/ui/src/registry/bases/base/blocks/_registry.ts b/apps/ui/src/registry/bases/base/blocks/_registry.ts new file mode 100644 index 0000000..f6c37ad --- /dev/null +++ b/apps/ui/src/registry/bases/base/blocks/_registry.ts @@ -0,0 +1,909 @@ +import { type Registry } from "shadcn/schema" + +export const blocks: Registry["items"] = [ + { + name: "preview", + title: "Preview", + type: "registry:block", + registryDependencies: [ + "alert-dialog", + "avatar", + "badge", + "button", + "button-group", + "card", + "chart", + "checkbox", + "combobox", + "dropdown-menu", + "empty", + "field", + "input", + "input-group", + "item", + "label", + "popover", + "radio-group", + "select", + "separator", + "sheet", + "slider", + "spinner", + "switch", + "textarea", + "tooltip", + "example", + ], + files: [ + { + path: "blocks/preview/index.tsx", + type: "registry:block", + }, + ], + }, + { + name: "preview-02", + title: "Preview 02", + type: "registry:block", + dependencies: ["react-qr-code"], + registryDependencies: [ + "accordion", + "badge", + "breadcrumb", + "button", + "calendar", + "card", + "chart", + "checkbox", + "combobox", + "dropdown-menu", + "empty", + "field", + "input", + "input-group", + "item", + "label", + "native-select", + "progress", + "radio-group", + "select", + "separator", + "sidebar", + "skeleton", + "slider", + "spinner", + "switch", + "table", + "tabs", + "textarea", + "toggle-group", + ], + files: [ + { + path: "blocks/preview-02/index.tsx", + type: "registry:block", + }, + ], + }, + { + name: "login-01", + title: "Login 01", + description: "A simple login form.", + type: "registry:block", + registryDependencies: ["button", "card", "input", "label", "field"], + files: [ + { + path: "blocks/login-01/page.tsx", + target: "app/login/page.tsx", + type: "registry:page", + }, + { + path: "blocks/login-01/components/login-form.tsx", + type: "registry:component", + }, + ], + categories: ["authentication", "login"], + }, + { + name: "login-02", + title: "Login 02", + description: "A two column login page with a cover image.", + type: "registry:block", + registryDependencies: ["button", "input", "label", "field"], + files: [ + { + path: "blocks/login-02/page.tsx", + target: "app/login/page.tsx", + type: "registry:page", + }, + { + path: "blocks/login-02/components/login-form.tsx", + type: "registry:component", + }, + ], + categories: ["authentication", "login"], + }, + { + name: "login-03", + title: "Login 03", + description: "A login page with a muted background color.", + type: "registry:block", + registryDependencies: ["button", "card", "input", "label", "field"], + files: [ + { + path: "blocks/login-03/page.tsx", + target: "app/login/page.tsx", + type: "registry:page", + }, + { + path: "blocks/login-03/components/login-form.tsx", + type: "registry:component", + }, + ], + categories: ["authentication", "login"], + }, + { + name: "login-04", + title: "Login 04", + description: "A login page with form and image.", + type: "registry:block", + registryDependencies: ["button", "card", "input", "label", "field"], + files: [ + { + path: "blocks/login-04/page.tsx", + target: "app/login/page.tsx", + type: "registry:page", + }, + { + path: "blocks/login-04/components/login-form.tsx", + type: "registry:component", + }, + ], + categories: ["authentication", "login"], + }, + { + name: "login-05", + title: "Login 05", + description: "A simple email-only login page.", + type: "registry:block", + registryDependencies: ["button", "input", "label", "field"], + files: [ + { + path: "blocks/login-05/page.tsx", + target: "app/login/page.tsx", + type: "registry:page", + }, + { + path: "blocks/login-05/components/login-form.tsx", + type: "registry:component", + }, + ], + categories: ["authentication", "login"], + }, + { + name: "signup-01", + title: "Signup 01", + description: "A simple signup form.", + type: "registry:block", + registryDependencies: ["button", "card", "input", "label"], + files: [ + { + path: "blocks/signup-01/page.tsx", + target: "app/signup/page.tsx", + type: "registry:page", + }, + { + path: "blocks/signup-01/components/signup-form.tsx", + type: "registry:component", + }, + ], + categories: ["authentication", "signup"], + }, + { + name: "signup-02", + title: "Signup 02", + description: "A two column signup page with a cover image.", + type: "registry:block", + registryDependencies: ["button", "input", "label", "field"], + files: [ + { + path: "blocks/signup-02/page.tsx", + target: "app/signup/page.tsx", + type: "registry:page", + }, + { + path: "blocks/signup-02/components/signup-form.tsx", + type: "registry:component", + }, + ], + categories: ["authentication", "signup"], + }, + { + name: "signup-03", + title: "Signup 03", + description: "A signup page with a muted background color.", + type: "registry:block", + registryDependencies: ["button", "card", "input", "label", "field"], + files: [ + { + path: "blocks/signup-03/page.tsx", + target: "app/signup/page.tsx", + type: "registry:page", + }, + { + path: "blocks/signup-03/components/signup-form.tsx", + type: "registry:component", + }, + ], + categories: ["authentication", "signup"], + }, + { + name: "signup-04", + title: "Signup 04", + description: "A signup page with form and image.", + type: "registry:block", + registryDependencies: ["button", "card", "input", "label", "field"], + files: [ + { + path: "blocks/signup-04/page.tsx", + target: "app/signup/page.tsx", + type: "registry:page", + }, + { + path: "blocks/signup-04/components/signup-form.tsx", + type: "registry:component", + }, + ], + categories: ["authentication", "signup"], + }, + { + name: "signup-05", + title: "Signup 05", + description: "A simple signup form with social providers.", + type: "registry:block", + registryDependencies: ["button", "input", "label"], + files: [ + { + path: "blocks/signup-05/page.tsx", + target: "app/signup/page.tsx", + type: "registry:page", + }, + { + path: "blocks/signup-05/components/signup-form.tsx", + type: "registry:component", + }, + ], + categories: ["authentication", "signup"], + }, + { + name: "dashboard-01", + title: "Dashboard 01", + type: "registry:block", + description: "A dashboard with sidebar, charts and data table.", + dependencies: [ + "@dnd-kit/core", + "@dnd-kit/modifiers", + "@dnd-kit/sortable", + "@dnd-kit/utilities", + "@tanstack/react-table", + "zod", + ], + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "label", + "chart", + "card", + "select", + "tabs", + "table", + "toggle-group", + "badge", + "button", + "checkbox", + "dropdown-menu", + "drawer", + "input", + "avatar", + "sheet", + "sonner", + ], + files: [ + { + path: "blocks/dashboard-01/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "blocks/dashboard-01/data.json", + type: "registry:file", + target: "app/dashboard/data.json", + }, + { + path: "blocks/dashboard-01/components/app-sidebar.tsx", + type: "registry:component", + }, + { + path: "blocks/dashboard-01/components/chart-area-interactive.tsx", + type: "registry:component", + }, + { + path: "blocks/dashboard-01/components/data-table.tsx", + type: "registry:component", + }, + { + path: "blocks/dashboard-01/components/nav-documents.tsx", + type: "registry:component", + }, + { + path: "blocks/dashboard-01/components/nav-main.tsx", + type: "registry:component", + }, + { + path: "blocks/dashboard-01/components/nav-secondary.tsx", + type: "registry:component", + }, + { + path: "blocks/dashboard-01/components/nav-user.tsx", + type: "registry:component", + }, + { + path: "blocks/dashboard-01/components/section-cards.tsx", + type: "registry:component", + }, + { + path: "blocks/dashboard-01/components/site-header.tsx", + type: "registry:component", + }, + ], + categories: ["dashboard"], + meta: { + iframeHeight: "1000px", + }, + }, + { + name: "sidebar-01", + title: "Sidebar 01", + type: "registry:block", + description: "A simple sidebar with navigation grouped by section.", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "label", + "dropdown-menu", + ], + files: [ + { + path: "blocks/sidebar-01/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "blocks/sidebar-01/components/app-sidebar.tsx", + type: "registry:component", + }, + { + path: "blocks/sidebar-01/components/search-form.tsx", + type: "registry:component", + }, + { + path: "blocks/sidebar-01/components/version-switcher.tsx", + type: "registry:component", + }, + ], + categories: ["sidebar", "dashboard"], + }, + { + name: "sidebar-02", + title: "Sidebar 02", + description: "A sidebar with collapsible sections.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "label", + "dropdown-menu", + ], + files: [ + { + path: "blocks/sidebar-02/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "blocks/sidebar-02/components/app-sidebar.tsx", + type: "registry:component", + }, + { + path: "blocks/sidebar-02/components/search-form.tsx", + type: "registry:component", + }, + { + path: "blocks/sidebar-02/components/version-switcher.tsx", + type: "registry:component", + }, + ], + categories: ["sidebar", "dashboard"], + }, + { + name: "sidebar-03", + title: "Sidebar 03", + description: "A sidebar with submenus.", + type: "registry:block", + registryDependencies: ["sidebar", "breadcrumb"], + files: [ + { + path: "blocks/sidebar-03/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "blocks/sidebar-03/components/app-sidebar.tsx", + type: "registry:component", + }, + ], + categories: ["sidebar", "dashboard"], + }, + { + name: "sidebar-04", + title: "Sidebar 04", + description: "A floating sidebar with submenus.", + type: "registry:block", + registryDependencies: ["sidebar", "breadcrumb", "separator"], + files: [ + { + path: "blocks/sidebar-04/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "blocks/sidebar-04/components/app-sidebar.tsx", + type: "registry:component", + }, + ], + categories: ["sidebar", "dashboard"], + }, + { + name: "sidebar-05", + title: "Sidebar 05", + description: "A sidebar with collapsible submenus.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "label", + "collapsible", + ], + files: [ + { + path: "blocks/sidebar-05/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "blocks/sidebar-05/components/app-sidebar.tsx", + type: "registry:component", + }, + { + path: "blocks/sidebar-05/components/search-form.tsx", + type: "registry:component", + }, + ], + categories: ["sidebar", "dashboard"], + }, + { + name: "sidebar-06", + title: "Sidebar 06", + description: "A sidebar with submenus as dropdowns.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "card", + "dropdown-menu", + ], + files: [ + { + path: "blocks/sidebar-06/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "blocks/sidebar-06/components/app-sidebar.tsx", + type: "registry:component", + }, + { + path: "blocks/sidebar-06/components/nav-main.tsx", + type: "registry:component", + }, + { + path: "blocks/sidebar-06/components/sidebar-opt-in-form.tsx", + type: "registry:component", + }, + ], + categories: ["sidebar", "dashboard"], + }, + { + name: "sidebar-07", + title: "Sidebar 07", + type: "registry:block", + description: "A sidebar that collapses to icons.", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "collapsible", + "dropdown-menu", + "avatar", + ], + files: [ + { + path: "blocks/sidebar-07/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "blocks/sidebar-07/components/app-sidebar.tsx", + type: "registry:component", + }, + { + path: "blocks/sidebar-07/components/nav-main.tsx", + type: "registry:component", + }, + { + path: "blocks/sidebar-07/components/nav-projects.tsx", + type: "registry:component", + }, + { + path: "blocks/sidebar-07/components/nav-user.tsx", + type: "registry:component", + }, + { + path: "blocks/sidebar-07/components/team-switcher.tsx", + type: "registry:component", + }, + ], + categories: ["sidebar", "dashboard"], + }, + { + name: "sidebar-08", + title: "Sidebar 08", + description: "An inset sidebar with secondary navigation.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "collapsible", + "dropdown-menu", + "avatar", + ], + files: [ + { + path: "blocks/sidebar-08/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "blocks/sidebar-08/components/app-sidebar.tsx", + type: "registry:component", + }, + { + path: "blocks/sidebar-08/components/nav-main.tsx", + type: "registry:component", + }, + { + path: "blocks/sidebar-08/components/nav-projects.tsx", + type: "registry:component", + }, + { + path: "blocks/sidebar-08/components/nav-secondary.tsx", + type: "registry:component", + }, + { + path: "blocks/sidebar-08/components/nav-user.tsx", + type: "registry:component", + }, + ], + categories: ["sidebar", "dashboard"], + }, + { + name: "sidebar-09", + title: "Sidebar 09", + description: "Collapsible nested sidebars.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "collapsible", + "dropdown-menu", + "avatar", + "switch", + "label", + ], + files: [ + { + path: "blocks/sidebar-09/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "blocks/sidebar-09/components/app-sidebar.tsx", + type: "registry:component", + }, + { + path: "blocks/sidebar-09/components/nav-user.tsx", + type: "registry:component", + }, + ], + categories: ["sidebar", "dashboard"], + }, + { + name: "sidebar-10", + title: "Sidebar 10", + description: "A sidebar in a popover.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "popover", + "collapsible", + "dropdown-menu", + ], + files: [ + { + path: "blocks/sidebar-10/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "blocks/sidebar-10/components/app-sidebar.tsx", + type: "registry:component", + }, + { + path: "blocks/sidebar-10/components/nav-actions.tsx", + type: "registry:component", + }, + { + path: "blocks/sidebar-10/components/nav-favorites.tsx", + type: "registry:component", + }, + { + path: "blocks/sidebar-10/components/nav-main.tsx", + type: "registry:component", + }, + { + path: "blocks/sidebar-10/components/nav-secondary.tsx", + type: "registry:component", + }, + { + path: "blocks/sidebar-10/components/nav-workspaces.tsx", + type: "registry:component", + }, + { + path: "blocks/sidebar-10/components/team-switcher.tsx", + type: "registry:component", + }, + ], + categories: ["sidebar", "dashboard"], + }, + { + name: "sidebar-11", + title: "Sidebar 11", + description: "A sidebar with a collapsible file tree.", + type: "registry:block", + registryDependencies: ["sidebar", "breadcrumb", "separator", "collapsible"], + files: [ + { + path: "blocks/sidebar-11/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "blocks/sidebar-11/components/app-sidebar.tsx", + type: "registry:component", + }, + ], + categories: ["sidebar", "dashboard"], + }, + { + name: "sidebar-12", + title: "Sidebar 12", + description: "A sidebar with a calendar.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "collapsible", + "calendar", + "dropdown-menu", + "avatar", + ], + files: [ + { + path: "blocks/sidebar-12/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "blocks/sidebar-12/components/app-sidebar.tsx", + type: "registry:component", + }, + { + path: "blocks/sidebar-12/components/calendars.tsx", + type: "registry:component", + }, + { + path: "blocks/sidebar-12/components/date-picker.tsx", + type: "registry:component", + }, + { + path: "blocks/sidebar-12/components/nav-user.tsx", + type: "registry:component", + }, + ], + categories: ["sidebar", "dashboard"], + }, + { + name: "sidebar-13", + title: "Sidebar 13", + description: "A sidebar in a dialog.", + type: "registry:block", + registryDependencies: ["sidebar", "breadcrumb", "button", "dialog"], + files: [ + { + path: "blocks/sidebar-13/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "blocks/sidebar-13/components/settings-dialog.tsx", + type: "registry:component", + }, + ], + categories: ["sidebar", "dashboard"], + }, + { + name: "sidebar-14", + title: "Sidebar 14", + description: "A sidebar on the right.", + type: "registry:block", + registryDependencies: ["sidebar", "breadcrumb"], + files: [ + { + path: "blocks/sidebar-14/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "blocks/sidebar-14/components/app-sidebar.tsx", + type: "registry:component", + }, + ], + categories: ["sidebar", "dashboard"], + }, + { + name: "sidebar-15", + title: "Sidebar 15", + description: "A left and right sidebar.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "popover", + "collapsible", + "dropdown-menu", + "calendar", + "avatar", + ], + files: [ + { + path: "blocks/sidebar-15/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "blocks/sidebar-15/components/calendars.tsx", + type: "registry:component", + }, + { + path: "blocks/sidebar-15/components/date-picker.tsx", + type: "registry:component", + }, + { + path: "blocks/sidebar-15/components/nav-favorites.tsx", + type: "registry:component", + }, + { + path: "blocks/sidebar-15/components/nav-main.tsx", + type: "registry:component", + }, + { + path: "blocks/sidebar-15/components/nav-secondary.tsx", + type: "registry:component", + }, + { + path: "blocks/sidebar-15/components/nav-user.tsx", + type: "registry:component", + }, + { + path: "blocks/sidebar-15/components/nav-workspaces.tsx", + type: "registry:component", + }, + { + path: "blocks/sidebar-15/components/sidebar-left.tsx", + type: "registry:component", + }, + { + path: "blocks/sidebar-15/components/sidebar-right.tsx", + type: "registry:component", + }, + { + path: "blocks/sidebar-15/components/team-switcher.tsx", + type: "registry:component", + }, + ], + categories: ["sidebar", "dashboard"], + }, + { + name: "sidebar-16", + title: "Sidebar 16", + description: "A sidebar with a sticky site header.", + type: "registry:block", + registryDependencies: [ + "sidebar", + "breadcrumb", + "separator", + "collapsible", + "dropdown-menu", + "avatar", + "button", + "label", + ], + files: [ + { + path: "blocks/sidebar-16/page.tsx", + type: "registry:page", + target: "app/dashboard/page.tsx", + }, + { + path: "blocks/sidebar-16/components/app-sidebar.tsx", + type: "registry:component", + }, + { + path: "blocks/sidebar-16/components/nav-main.tsx", + type: "registry:component", + }, + { + path: "blocks/sidebar-16/components/nav-projects.tsx", + type: "registry:component", + }, + { + path: "blocks/sidebar-16/components/nav-secondary.tsx", + type: "registry:component", + }, + { + path: "blocks/sidebar-16/components/nav-user.tsx", + type: "registry:component", + }, + { + path: "blocks/sidebar-16/components/search-form.tsx", + type: "registry:component", + }, + { + path: "blocks/sidebar-16/components/site-header.tsx", + type: "registry:component", + }, + ], + categories: ["sidebar", "dashboard"], + }, +] diff --git a/apps/ui/src/registry/bases/base/blocks/dashboard-01/components/app-sidebar.tsx b/apps/ui/src/registry/bases/base/blocks/dashboard-01/components/app-sidebar.tsx new file mode 100644 index 0000000..1005b50 --- /dev/null +++ b/apps/ui/src/registry/bases/base/blocks/dashboard-01/components/app-sidebar.tsx @@ -0,0 +1,280 @@ + +import * as React from "react" + +import { NavDocuments } from "@/registry/bases/base/blocks/dashboard-01/components/nav-documents" +import { NavMain } from "@/registry/bases/base/blocks/dashboard-01/components/nav-main" +import { NavSecondary } from "@/registry/bases/base/blocks/dashboard-01/components/nav-secondary" +import { NavUser } from "@/registry/bases/base/blocks/dashboard-01/components/nav-user" +import { + Sidebar, + SidebarContent, + SidebarFooter, + SidebarHeader, + SidebarMenu, + SidebarMenuButton, + SidebarMenuItem, +} from "@/registry/bases/base/ui/sidebar" +import { IconPlaceholder } from "@/routes/create/components/icon-placeholder" + +const data = { + user: { + name: "shadcn", + email: "m@example.com", + avatar: "/avatars/shadcn.jpg", + }, + navMain: [ + { + title: "Dashboard", + url: "#", + icon: ( + + ), + }, + { + title: "Lifecycle", + url: "#", + icon: ( + + ), + }, + { + title: "Analytics", + url: "#", + icon: ( + + ), + }, + { + title: "Projects", + url: "#", + icon: ( + + ), + }, + { + title: "Team", + url: "#", + icon: ( + + ), + }, + ], + navClouds: [ + { + title: "Capture", + icon: ( + + ), + isActive: true, + url: "#", + items: [ + { + title: "Active Proposals", + url: "#", + }, + { + title: "Archived", + url: "#", + }, + ], + }, + { + title: "Proposal", + icon: ( + + ), + url: "#", + items: [ + { + title: "Active Proposals", + url: "#", + }, + { + title: "Archived", + url: "#", + }, + ], + }, + { + title: "Prompts", + icon: ( + + ), + url: "#", + items: [ + { + title: "Active Proposals", + url: "#", + }, + { + title: "Archived", + url: "#", + }, + ], + }, + ], + navSecondary: [ + { + title: "Settings", + url: "#", + icon: ( + + ), + }, + { + title: "Get Help", + url: "#", + icon: ( + + ), + }, + { + title: "Search", + url: "#", + icon: ( + + ), + }, + ], + documents: [ + { + name: "Data Library", + url: "#", + icon: ( + + ), + }, + { + name: "Reports", + url: "#", + icon: ( + + ), + }, + { + name: "Word Assistant", + url: "#", + icon: ( + + ), + }, + ], +} +export function AppSidebar({ ...props }: React.ComponentProps) { + return ( + + + + + } + > + + Acme Inc. + + + + + + + + + + + + + + ) +} diff --git a/apps/ui/src/registry/bases/base/blocks/dashboard-01/components/chart-area-interactive.tsx b/apps/ui/src/registry/bases/base/blocks/dashboard-01/components/chart-area-interactive.tsx new file mode 100644 index 0000000..e2acbd9 --- /dev/null +++ b/apps/ui/src/registry/bases/base/blocks/dashboard-01/components/chart-area-interactive.tsx @@ -0,0 +1,299 @@ + +import * as React from "react" +import { Area, AreaChart, CartesianGrid, XAxis } from "recharts" + +import { useIsMobile } from "@/registry/bases/base/hooks/use-mobile" +import { + Card, + CardAction, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/registry/bases/base/ui/card" +import { + ChartContainer, + ChartTooltip, + ChartTooltipContent, + type ChartConfig, +} from "@/registry/bases/base/ui/chart" +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/registry/bases/base/ui/select" +import { + ToggleGroup, + ToggleGroupItem, +} from "@/registry/bases/base/ui/toggle-group" + +export const description = "An interactive area chart" + +const chartData = [ + { date: "2024-04-01", desktop: 222, mobile: 150 }, + { date: "2024-04-02", desktop: 97, mobile: 180 }, + { date: "2024-04-03", desktop: 167, mobile: 120 }, + { date: "2024-04-04", desktop: 242, mobile: 260 }, + { date: "2024-04-05", desktop: 373, mobile: 290 }, + { date: "2024-04-06", desktop: 301, mobile: 340 }, + { date: "2024-04-07", desktop: 245, mobile: 180 }, + { date: "2024-04-08", desktop: 409, mobile: 320 }, + { date: "2024-04-09", desktop: 59, mobile: 110 }, + { date: "2024-04-10", desktop: 261, mobile: 190 }, + { date: "2024-04-11", desktop: 327, mobile: 350 }, + { date: "2024-04-12", desktop: 292, mobile: 210 }, + { date: "2024-04-13", desktop: 342, mobile: 380 }, + { date: "2024-04-14", desktop: 137, mobile: 220 }, + { date: "2024-04-15", desktop: 120, mobile: 170 }, + { date: "2024-04-16", desktop: 138, mobile: 190 }, + { date: "2024-04-17", desktop: 446, mobile: 360 }, + { date: "2024-04-18", desktop: 364, mobile: 410 }, + { date: "2024-04-19", desktop: 243, mobile: 180 }, + { date: "2024-04-20", desktop: 89, mobile: 150 }, + { date: "2024-04-21", desktop: 137, mobile: 200 }, + { date: "2024-04-22", desktop: 224, mobile: 170 }, + { date: "2024-04-23", desktop: 138, mobile: 230 }, + { date: "2024-04-24", desktop: 387, mobile: 290 }, + { date: "2024-04-25", desktop: 215, mobile: 250 }, + { date: "2024-04-26", desktop: 75, mobile: 130 }, + { date: "2024-04-27", desktop: 383, mobile: 420 }, + { date: "2024-04-28", desktop: 122, mobile: 180 }, + { date: "2024-04-29", desktop: 315, mobile: 240 }, + { date: "2024-04-30", desktop: 454, mobile: 380 }, + { date: "2024-05-01", desktop: 165, mobile: 220 }, + { date: "2024-05-02", desktop: 293, mobile: 310 }, + { date: "2024-05-03", desktop: 247, mobile: 190 }, + { date: "2024-05-04", desktop: 385, mobile: 420 }, + { date: "2024-05-05", desktop: 481, mobile: 390 }, + { date: "2024-05-06", desktop: 498, mobile: 520 }, + { date: "2024-05-07", desktop: 388, mobile: 300 }, + { date: "2024-05-08", desktop: 149, mobile: 210 }, + { date: "2024-05-09", desktop: 227, mobile: 180 }, + { date: "2024-05-10", desktop: 293, mobile: 330 }, + { date: "2024-05-11", desktop: 335, mobile: 270 }, + { date: "2024-05-12", desktop: 197, mobile: 240 }, + { date: "2024-05-13", desktop: 197, mobile: 160 }, + { date: "2024-05-14", desktop: 448, mobile: 490 }, + { date: "2024-05-15", desktop: 473, mobile: 380 }, + { date: "2024-05-16", desktop: 338, mobile: 400 }, + { date: "2024-05-17", desktop: 499, mobile: 420 }, + { date: "2024-05-18", desktop: 315, mobile: 350 }, + { date: "2024-05-19", desktop: 235, mobile: 180 }, + { date: "2024-05-20", desktop: 177, mobile: 230 }, + { date: "2024-05-21", desktop: 82, mobile: 140 }, + { date: "2024-05-22", desktop: 81, mobile: 120 }, + { date: "2024-05-23", desktop: 252, mobile: 290 }, + { date: "2024-05-24", desktop: 294, mobile: 220 }, + { date: "2024-05-25", desktop: 201, mobile: 250 }, + { date: "2024-05-26", desktop: 213, mobile: 170 }, + { date: "2024-05-27", desktop: 420, mobile: 460 }, + { date: "2024-05-28", desktop: 233, mobile: 190 }, + { date: "2024-05-29", desktop: 78, mobile: 130 }, + { date: "2024-05-30", desktop: 340, mobile: 280 }, + { date: "2024-05-31", desktop: 178, mobile: 230 }, + { date: "2024-06-01", desktop: 178, mobile: 200 }, + { date: "2024-06-02", desktop: 470, mobile: 410 }, + { date: "2024-06-03", desktop: 103, mobile: 160 }, + { date: "2024-06-04", desktop: 439, mobile: 380 }, + { date: "2024-06-05", desktop: 88, mobile: 140 }, + { date: "2024-06-06", desktop: 294, mobile: 250 }, + { date: "2024-06-07", desktop: 323, mobile: 370 }, + { date: "2024-06-08", desktop: 385, mobile: 320 }, + { date: "2024-06-09", desktop: 438, mobile: 480 }, + { date: "2024-06-10", desktop: 155, mobile: 200 }, + { date: "2024-06-11", desktop: 92, mobile: 150 }, + { date: "2024-06-12", desktop: 492, mobile: 420 }, + { date: "2024-06-13", desktop: 81, mobile: 130 }, + { date: "2024-06-14", desktop: 426, mobile: 380 }, + { date: "2024-06-15", desktop: 307, mobile: 350 }, + { date: "2024-06-16", desktop: 371, mobile: 310 }, + { date: "2024-06-17", desktop: 475, mobile: 520 }, + { date: "2024-06-18", desktop: 107, mobile: 170 }, + { date: "2024-06-19", desktop: 341, mobile: 290 }, + { date: "2024-06-20", desktop: 408, mobile: 450 }, + { date: "2024-06-21", desktop: 169, mobile: 210 }, + { date: "2024-06-22", desktop: 317, mobile: 270 }, + { date: "2024-06-23", desktop: 480, mobile: 530 }, + { date: "2024-06-24", desktop: 132, mobile: 180 }, + { date: "2024-06-25", desktop: 141, mobile: 190 }, + { date: "2024-06-26", desktop: 434, mobile: 380 }, + { date: "2024-06-27", desktop: 448, mobile: 490 }, + { date: "2024-06-28", desktop: 149, mobile: 200 }, + { date: "2024-06-29", desktop: 103, mobile: 160 }, + { date: "2024-06-30", desktop: 446, mobile: 400 }, +] + +const chartConfig = { + visitors: { + label: "Visitors", + }, + desktop: { + label: "Desktop", + color: "var(--primary)", + }, + mobile: { + label: "Mobile", + color: "var(--primary)", + }, +} satisfies ChartConfig + +export function ChartAreaInteractive() { + const isMobile = useIsMobile() + const [timeRange, setTimeRange] = React.useState("90d") + + React.useEffect(() => { + if (isMobile) { + setTimeRange("7d") + } + }, [isMobile]) + + const filteredData = chartData.filter((item) => { + const date = new Date(item.date) + const referenceDate = new Date("2024-06-30") + let daysToSubtract = 90 + if (timeRange === "30d") { + daysToSubtract = 30 + } else if (timeRange === "7d") { + daysToSubtract = 7 + } + const startDate = new Date(referenceDate) + startDate.setDate(startDate.getDate() - daysToSubtract) + return date >= startDate + }) + + return ( + + + Total Visitors + + + Total for the last 3 months + + Last 3 months + + + { + setTimeRange(value[0] ?? "90d") + }} + variant="outline" + className="hidden *:data-[slot=toggle-group-item]:px-4! @[767px]/card:flex" + > + Last 3 months + Last 30 days + Last 7 days + + + + + + + + + + + + + + + + + + + { + const date = new Date(value) + return date.toLocaleDateString("en-US", { + month: "short", + day: "numeric", + }) + }} + /> + { + return new Date(value).toLocaleDateString("en-US", { + month: "short", + day: "numeric", + }) + }} + indicator="dot" + /> + } + /> + + + + + + + ) +} diff --git a/apps/ui/src/registry/bases/base/blocks/dashboard-01/components/data-table.tsx b/apps/ui/src/registry/bases/base/blocks/dashboard-01/components/data-table.tsx new file mode 100644 index 0000000..c03cc08 --- /dev/null +++ b/apps/ui/src/registry/bases/base/blocks/dashboard-01/components/data-table.tsx @@ -0,0 +1,940 @@ + +import * as React from "react" +import { + closestCenter, + DndContext, + KeyboardSensor, + MouseSensor, + TouchSensor, + useSensor, + useSensors, + type DragEndEvent, + type UniqueIdentifier, +} from "@dnd-kit/core" +import { restrictToVerticalAxis } from "@dnd-kit/modifiers" +import { + arrayMove, + SortableContext, + useSortable, + verticalListSortingStrategy, +} from "@dnd-kit/sortable" +import { CSS } from "@dnd-kit/utilities" +import { + flexRender, + getCoreRowModel, + getFacetedRowModel, + getFacetedUniqueValues, + getFilteredRowModel, + getPaginationRowModel, + getSortedRowModel, + useReactTable, + type ColumnDef, + type ColumnFiltersState, + type Row, + type SortingState, + type VisibilityState, +} from "@tanstack/react-table" +import { Area, AreaChart, CartesianGrid, XAxis } from "recharts" +import { toast } from "sonner" +import { z } from "zod" + +import { useIsMobile } from "@/registry/bases/base/hooks/use-mobile" +import { Badge } from "@/registry/bases/base/ui/badge" +import { Button } from "@/registry/bases/base/ui/button" +import { + ChartContainer, + ChartTooltip, + ChartTooltipContent, + type ChartConfig, +} from "@/registry/bases/base/ui/chart" +import { Checkbox } from "@/registry/bases/base/ui/checkbox" +import { + Drawer, + DrawerClose, + DrawerContent, + DrawerDescription, + DrawerFooter, + DrawerHeader, + DrawerTitle, + DrawerTrigger, +} from "@/registry/bases/base/ui/drawer" +import { + DropdownMenu, + DropdownMenuCheckboxItem, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuSeparator, + DropdownMenuTrigger, +} from "@/registry/bases/base/ui/dropdown-menu" +import { Input } from "@/registry/bases/base/ui/input" +import { Label } from "@/registry/bases/base/ui/label" +import { + Select, + SelectContent, + SelectGroup, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/registry/bases/base/ui/select" +import { Separator } from "@/registry/bases/base/ui/separator" +import { + Table, + TableBody, + TableCell, + TableHead, + TableHeader, + TableRow, +} from "@/registry/bases/base/ui/table" +import { + Tabs, + TabsContent, + TabsList, + TabsTrigger, +} from "@/registry/bases/base/ui/tabs" +import { IconPlaceholder } from "@/routes/create/components/icon-placeholder" + +export const schema = z.object({ + id: z.number(), + header: z.string(), + type: z.string(), + status: z.string(), + target: z.string(), + limit: z.string(), + reviewer: z.string(), +}) + +// Create a separate component for the drag handle +function DragHandle({ id }: { id: number }) { + const { attributes, listeners } = useSortable({ + id, + }) + return ( + + ) +} +const columns: ColumnDef>[] = [ + { + id: "drag", + header: () => null, + cell: ({ row }) => , + }, + { + id: "select", + header: ({ table }) => ( +
+ table.toggleAllPageRowsSelected(!!value)} + aria-label="Select all" + /> +
+ ), + cell: ({ row }) => ( +
+ row.toggleSelected(!!value)} + aria-label="Select row" + /> +
+ ), + enableSorting: false, + enableHiding: false, + }, + { + accessorKey: "header", + header: "Header", + cell: ({ row }) => { + return + }, + enableHiding: false, + }, + { + accessorKey: "type", + header: "Section Type", + cell: ({ row }) => ( +
+ + {row.original.type} + +
+ ), + }, + { + accessorKey: "status", + header: "Status", + cell: ({ row }) => ( + + {row.original.status === "Done" ? ( + + ) : ( + + )} + {row.original.status} + + ), + }, + { + accessorKey: "target", + header: () =>
Target
, + cell: ({ row }) => ( +
{ + e.preventDefault() + toast.promise(new Promise((resolve) => setTimeout(resolve, 1000)), { + loading: `Saving ${row.original.header}`, + success: "Done", + error: "Error", + }) + }} + > + + +
+ ), + }, + { + accessorKey: "limit", + header: () =>
Limit
, + cell: ({ row }) => ( +
{ + e.preventDefault() + toast.promise(new Promise((resolve) => setTimeout(resolve, 1000)), { + loading: `Saving ${row.original.header}`, + success: "Done", + error: "Error", + }) + }} + > + + +
+ ), + }, + { + accessorKey: "reviewer", + header: "Reviewer", + cell: ({ row }) => { + const isAssigned = row.original.reviewer !== "Assign reviewer" + if (isAssigned) { + return row.original.reviewer + } + return ( + <> + + + + ) + }, + }, + { + id: "actions", + cell: () => ( + + + } + > + + Open menu + + + Edit + Make a copy + Favorite + + Delete + + + ), + }, +] +function DraggableRow({ row }: { row: Row> }) { + const { transform, transition, setNodeRef, isDragging } = useSortable({ + id: row.original.id, + }) + return ( + + {row.getVisibleCells().map((cell) => ( + + {flexRender(cell.column.columnDef.cell, cell.getContext())} + + ))} + + ) +} +export function DataTable({ + data: initialData, +}: { + data: z.infer[] +}) { + const [data, setData] = React.useState(() => initialData) + const [rowSelection, setRowSelection] = React.useState({}) + const [columnVisibility, setColumnVisibility] = + React.useState({}) + const [columnFilters, setColumnFilters] = React.useState( + [] + ) + const [sorting, setSorting] = React.useState([]) + const [pagination, setPagination] = React.useState({ + pageIndex: 0, + pageSize: 10, + }) + const sortableId = React.useId() + const sensors = useSensors( + useSensor(MouseSensor, {}), + useSensor(TouchSensor, {}), + useSensor(KeyboardSensor, {}) + ) + const dataIds = React.useMemo( + () => data?.map(({ id }) => id) || [], + [data] + ) + const table = useReactTable({ + data, + columns, + state: { + sorting, + columnVisibility, + rowSelection, + columnFilters, + pagination, + }, + getRowId: (row) => row.id.toString(), + enableRowSelection: true, + onRowSelectionChange: setRowSelection, + onSortingChange: setSorting, + onColumnFiltersChange: setColumnFilters, + onColumnVisibilityChange: setColumnVisibility, + onPaginationChange: setPagination, + getCoreRowModel: getCoreRowModel(), + getFilteredRowModel: getFilteredRowModel(), + getPaginationRowModel: getPaginationRowModel(), + getSortedRowModel: getSortedRowModel(), + getFacetedRowModel: getFacetedRowModel(), + getFacetedUniqueValues: getFacetedUniqueValues(), + }) + function handleDragEnd(event: DragEndEvent) { + const { active, over } = event + if (active && over && active.id !== over.id) { + setData((data) => { + const oldIndex = dataIds.indexOf(active.id) + const newIndex = dataIds.indexOf(over.id) + return arrayMove(data, oldIndex, newIndex) + }) + } + } + return ( + +
+ + + + Outline + + Past Performance 3 + + + Key Personnel 2 + + Focus Documents + +
+ + } + > + + Columns + + + + {table + .getAllColumns() + .filter( + (column) => + typeof column.accessorFn !== "undefined" && + column.getCanHide() + ) + .map((column) => { + return ( + + column.toggleVisibility(!!value) + } + > + {column.id} + + ) + })} + + + +
+
+ +
+ + + + {table.getHeaderGroups().map((headerGroup) => ( + + {headerGroup.headers.map((header) => { + return ( + + {header.isPlaceholder + ? null + : flexRender( + header.column.columnDef.header, + header.getContext() + )} + + ) + })} + + ))} + + + {table.getRowModel().rows?.length ? ( + + {table.getRowModel().rows.map((row) => ( + + ))} + + ) : ( + + + No results. + + + )} + +
+
+
+
+
+ {table.getFilteredSelectedRowModel().rows.length} of{" "} + {table.getFilteredRowModel().rows.length} row(s) selected. +
+
+
+ + +
+
+ Page {table.getState().pagination.pageIndex + 1} of{" "} + {table.getPageCount()} +
+
+ + + + +
+
+
+
+ +
+
+ +
+
+ +
+
+
+ ) +} +const chartData = [ + { + month: "January", + desktop: 186, + mobile: 80, + }, + { + month: "February", + desktop: 305, + mobile: 200, + }, + { + month: "March", + desktop: 237, + mobile: 120, + }, + { + month: "April", + desktop: 73, + mobile: 190, + }, + { + month: "May", + desktop: 209, + mobile: 130, + }, + { + month: "June", + desktop: 214, + mobile: 140, + }, +] +const chartConfig = { + desktop: { + label: "Desktop", + color: "var(--primary)", + }, + mobile: { + label: "Mobile", + color: "var(--primary)", + }, +} satisfies ChartConfig +function TableCellViewer({ item }: { item: z.infer }) { + const isMobile = useIsMobile() + return ( + + + + + + + {item.header} + + Showing total visitors for the last 6 months + + +
+ {!isMobile && ( + <> + + + + value.slice(0, 3)} + hide + /> + } + /> + + + + + +
+
+ Trending up by 5.2% this month{" "} + +
+
+ Showing total visitors for the last 6 months. This is just + some random text to test the layout. It spans multiple lines + and should wrap around. +
+
+ + + )} +
+
+ + +
+
+
+ + +
+
+ + +
+
+
+
+ + +
+
+ + +
+
+
+ + +
+
+
+ + + + + + + + {items.map((item) => ( + + + {item.icon} + {item.title} + + + ))} + + + + ) +} diff --git a/apps/ui/src/registry/bases/base/blocks/dashboard-01/components/nav-secondary.tsx b/apps/ui/src/registry/bases/base/blocks/dashboard-01/components/nav-secondary.tsx new file mode 100644 index 0000000..bd99dfa --- /dev/null +++ b/apps/ui/src/registry/bases/base/blocks/dashboard-01/components/nav-secondary.tsx @@ -0,0 +1,38 @@ + +import * as React from "react" + +import { + SidebarGroup, + SidebarGroupContent, + SidebarMenu, + SidebarMenuButton, + SidebarMenuItem, +} from "@/registry/bases/base/ui/sidebar" + +export function NavSecondary({ + items, + ...props +}: { + items: { + title: string + url: string + icon: React.ReactNode + }[] +} & React.ComponentPropsWithoutRef) { + return ( + + + + {items.map((item) => ( + + }> + {item.icon} + {item.title} + + + ))} + + + + ) +} diff --git a/apps/ui/src/registry/bases/base/blocks/dashboard-01/components/nav-user.tsx b/apps/ui/src/registry/bases/base/blocks/dashboard-01/components/nav-user.tsx new file mode 100644 index 0000000..56e764e --- /dev/null +++ b/apps/ui/src/registry/bases/base/blocks/dashboard-01/components/nav-user.tsx @@ -0,0 +1,133 @@ + +import { + Avatar, + AvatarFallback, + AvatarImage, +} from "@/registry/bases/base/ui/avatar" +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuGroup, + DropdownMenuItem, + DropdownMenuLabel, + DropdownMenuSeparator, + DropdownMenuTrigger, +} from "@/registry/bases/base/ui/dropdown-menu" +import { + SidebarMenu, + SidebarMenuButton, + SidebarMenuItem, + useSidebar, +} from "@/registry/bases/base/ui/sidebar" +import { IconPlaceholder } from "@/routes/create/components/icon-placeholder" + +export function NavUser({ + user, +}: { + user: { + name: string + email: string + avatar: string + } +}) { + const { isMobile } = useSidebar() + return ( + + + + + } + > + + + CN + +
+ {user.name} + + {user.email} + +
+ +
+ + + +
+ + + CN + +
+ {user.name} + + {user.email} + +
+
+
+
+ + + + + Account + + + + Billing + + + + Notifications + + + + + + Log out + +
+
+
+
+ ) +} diff --git a/apps/ui/src/registry/bases/base/blocks/dashboard-01/components/section-cards.tsx b/apps/ui/src/registry/bases/base/blocks/dashboard-01/components/section-cards.tsx new file mode 100644 index 0000000..e06abdb --- /dev/null +++ b/apps/ui/src/registry/bases/base/blocks/dashboard-01/components/section-cards.tsx @@ -0,0 +1,158 @@ + +import { Badge } from "@/registry/bases/base/ui/badge" +import { + Card, + CardAction, + CardDescription, + CardFooter, + CardHeader, + CardTitle, +} from "@/registry/bases/base/ui/card" +import { IconPlaceholder } from "@/routes/create/components/icon-placeholder" + +export function SectionCards() { + return ( +
+ + + Total Revenue + + $1,250.00 + + + + + +12.5% + + + + +
+ Trending up this month{" "} + +
+
+ Visitors for the last 6 months +
+
+
+ + + New Customers + + 1,234 + + + + + -20% + + + + +
+ Down 20% this period{" "} + +
+
+ Acquisition needs attention +
+
+
+ + + Active Accounts + + 45,678 + + + + + +12.5% + + + + +
+ Strong user retention{" "} + +
+
Engagement exceed targets
+
+
+ + + Growth Rate + + 4.5% + + + + + +4.5% + + + + +
+ Steady performance increase{" "} + +
+
Meets growth projections
+
+
+
+ ) +} diff --git a/apps/ui/src/registry/bases/base/blocks/dashboard-01/components/site-header.tsx b/apps/ui/src/registry/bases/base/blocks/dashboard-01/components/site-header.tsx new file mode 100644 index 0000000..22072ff --- /dev/null +++ b/apps/ui/src/registry/bases/base/blocks/dashboard-01/components/site-header.tsx @@ -0,0 +1,17 @@ +import { Separator } from "@/registry/bases/base/ui/separator" +import { SidebarTrigger } from "@/registry/bases/base/ui/sidebar" + +export function SiteHeader() { + return ( +
+
+ + +

Documents

+
+
+ ) +} diff --git a/apps/ui/src/registry/bases/base/blocks/dashboard-01/data.json b/apps/ui/src/registry/bases/base/blocks/dashboard-01/data.json new file mode 100644 index 0000000..ec08736 --- /dev/null +++ b/apps/ui/src/registry/bases/base/blocks/dashboard-01/data.json @@ -0,0 +1,614 @@ +[ + { + "id": 1, + "header": "Cover page", + "type": "Cover page", + "status": "In Process", + "target": "18", + "limit": "5", + "reviewer": "Eddie Lake" + }, + { + "id": 2, + "header": "Table of contents", + "type": "Table of contents", + "status": "Done", + "target": "29", + "limit": "24", + "reviewer": "Eddie Lake" + }, + { + "id": 3, + "header": "Executive summary", + "type": "Narrative", + "status": "Done", + "target": "10", + "limit": "13", + "reviewer": "Eddie Lake" + }, + { + "id": 4, + "header": "Technical approach", + "type": "Narrative", + "status": "Done", + "target": "27", + "limit": "23", + "reviewer": "Jamik Tashpulatov" + }, + { + "id": 5, + "header": "Design", + "type": "Narrative", + "status": "In Process", + "target": "2", + "limit": "16", + "reviewer": "Jamik Tashpulatov" + }, + { + "id": 6, + "header": "Capabilities", + "type": "Narrative", + "status": "In Process", + "target": "20", + "limit": "8", + "reviewer": "Jamik Tashpulatov" + }, + { + "id": 7, + "header": "Integration with existing systems", + "type": "Narrative", + "status": "In Process", + "target": "19", + "limit": "21", + "reviewer": "Jamik Tashpulatov" + }, + { + "id": 8, + "header": "Innovation and Advantages", + "type": "Narrative", + "status": "Done", + "target": "25", + "limit": "26", + "reviewer": "Assign reviewer" + }, + { + "id": 9, + "header": "Overview of EMR's Innovative Solutions", + "type": "Technical content", + "status": "Done", + "target": "7", + "limit": "23", + "reviewer": "Assign reviewer" + }, + { + "id": 10, + "header": "Advanced Algorithms and Machine Learning", + "type": "Narrative", + "status": "Done", + "target": "30", + "limit": "28", + "reviewer": "Assign reviewer" + }, + { + "id": 11, + "header": "Adaptive Communication Protocols", + "type": "Narrative", + "status": "Done", + "target": "9", + "limit": "31", + "reviewer": "Assign reviewer" + }, + { + "id": 12, + "header": "Advantages Over Current Technologies", + "type": "Narrative", + "status": "Done", + "target": "12", + "limit": "0", + "reviewer": "Assign reviewer" + }, + { + "id": 13, + "header": "Past Performance", + "type": "Narrative", + "status": "Done", + "target": "22", + "limit": "33", + "reviewer": "Assign reviewer" + }, + { + "id": 14, + "header": "Customer Feedback and Satisfaction Levels", + "type": "Narrative", + "status": "Done", + "target": "15", + "limit": "34", + "reviewer": "Assign reviewer" + }, + { + "id": 15, + "header": "Implementation Challenges and Solutions", + "type": "Narrative", + "status": "Done", + "target": "3", + "limit": "35", + "reviewer": "Assign reviewer" + }, + { + "id": 16, + "header": "Security Measures and Data Protection Policies", + "type": "Narrative", + "status": "In Process", + "target": "6", + "limit": "36", + "reviewer": "Assign reviewer" + }, + { + "id": 17, + "header": "Scalability and Future Proofing", + "type": "Narrative", + "status": "Done", + "target": "4", + "limit": "37", + "reviewer": "Assign reviewer" + }, + { + "id": 18, + "header": "Cost-Benefit Analysis", + "type": "Plain language", + "status": "Done", + "target": "14", + "limit": "38", + "reviewer": "Assign reviewer" + }, + { + "id": 19, + "header": "User Training and Onboarding Experience", + "type": "Narrative", + "status": "Done", + "target": "17", + "limit": "39", + "reviewer": "Assign reviewer" + }, + { + "id": 20, + "header": "Future Development Roadmap", + "type": "Narrative", + "status": "Done", + "target": "11", + "limit": "40", + "reviewer": "Assign reviewer" + }, + { + "id": 21, + "header": "System Architecture Overview", + "type": "Technical content", + "status": "In Process", + "target": "24", + "limit": "18", + "reviewer": "Maya Johnson" + }, + { + "id": 22, + "header": "Risk Management Plan", + "type": "Narrative", + "status": "Done", + "target": "15", + "limit": "22", + "reviewer": "Carlos Rodriguez" + }, + { + "id": 23, + "header": "Compliance Documentation", + "type": "Legal", + "status": "In Process", + "target": "31", + "limit": "27", + "reviewer": "Sarah Chen" + }, + { + "id": 24, + "header": "API Documentation", + "type": "Technical content", + "status": "Done", + "target": "8", + "limit": "12", + "reviewer": "Raj Patel" + }, + { + "id": 25, + "header": "User Interface Mockups", + "type": "Visual", + "status": "In Process", + "target": "19", + "limit": "25", + "reviewer": "Leila Ahmadi" + }, + { + "id": 26, + "header": "Database Schema", + "type": "Technical content", + "status": "Done", + "target": "22", + "limit": "20", + "reviewer": "Thomas Wilson" + }, + { + "id": 27, + "header": "Testing Methodology", + "type": "Technical content", + "status": "In Process", + "target": "17", + "limit": "14", + "reviewer": "Assign reviewer" + }, + { + "id": 28, + "header": "Deployment Strategy", + "type": "Narrative", + "status": "Done", + "target": "26", + "limit": "30", + "reviewer": "Eddie Lake" + }, + { + "id": 29, + "header": "Budget Breakdown", + "type": "Financial", + "status": "In Process", + "target": "13", + "limit": "16", + "reviewer": "Jamik Tashpulatov" + }, + { + "id": 30, + "header": "Market Analysis", + "type": "Research", + "status": "Done", + "target": "29", + "limit": "32", + "reviewer": "Sophia Martinez" + }, + { + "id": 31, + "header": "Competitor Comparison", + "type": "Research", + "status": "In Process", + "target": "21", + "limit": "19", + "reviewer": "Assign reviewer" + }, + { + "id": 32, + "header": "Maintenance Plan", + "type": "Technical content", + "status": "Done", + "target": "16", + "limit": "23", + "reviewer": "Alex Thompson" + }, + { + "id": 33, + "header": "User Personas", + "type": "Research", + "status": "In Process", + "target": "27", + "limit": "24", + "reviewer": "Nina Patel" + }, + { + "id": 34, + "header": "Accessibility Compliance", + "type": "Legal", + "status": "Done", + "target": "18", + "limit": "21", + "reviewer": "Assign reviewer" + }, + { + "id": 35, + "header": "Performance Metrics", + "type": "Technical content", + "status": "In Process", + "target": "23", + "limit": "26", + "reviewer": "David Kim" + }, + { + "id": 36, + "header": "Disaster Recovery Plan", + "type": "Technical content", + "status": "Done", + "target": "14", + "limit": "17", + "reviewer": "Jamik Tashpulatov" + }, + { + "id": 37, + "header": "Third-party Integrations", + "type": "Technical content", + "status": "In Process", + "target": "25", + "limit": "28", + "reviewer": "Eddie Lake" + }, + { + "id": 38, + "header": "User Feedback Summary", + "type": "Research", + "status": "Done", + "target": "20", + "limit": "15", + "reviewer": "Assign reviewer" + }, + { + "id": 39, + "header": "Localization Strategy", + "type": "Narrative", + "status": "In Process", + "target": "12", + "limit": "19", + "reviewer": "Maria Garcia" + }, + { + "id": 40, + "header": "Mobile Compatibility", + "type": "Technical content", + "status": "Done", + "target": "28", + "limit": "31", + "reviewer": "James Wilson" + }, + { + "id": 41, + "header": "Data Migration Plan", + "type": "Technical content", + "status": "In Process", + "target": "19", + "limit": "22", + "reviewer": "Assign reviewer" + }, + { + "id": 42, + "header": "Quality Assurance Protocols", + "type": "Technical content", + "status": "Done", + "target": "30", + "limit": "33", + "reviewer": "Priya Singh" + }, + { + "id": 43, + "header": "Stakeholder Analysis", + "type": "Research", + "status": "In Process", + "target": "11", + "limit": "14", + "reviewer": "Eddie Lake" + }, + { + "id": 44, + "header": "Environmental Impact Assessment", + "type": "Research", + "status": "Done", + "target": "24", + "limit": "27", + "reviewer": "Assign reviewer" + }, + { + "id": 45, + "header": "Intellectual Property Rights", + "type": "Legal", + "status": "In Process", + "target": "17", + "limit": "20", + "reviewer": "Sarah Johnson" + }, + { + "id": 46, + "header": "Customer Support Framework", + "type": "Narrative", + "status": "Done", + "target": "22", + "limit": "25", + "reviewer": "Jamik Tashpulatov" + }, + { + "id": 47, + "header": "Version Control Strategy", + "type": "Technical content", + "status": "In Process", + "target": "15", + "limit": "18", + "reviewer": "Assign reviewer" + }, + { + "id": 48, + "header": "Continuous Integration Pipeline", + "type": "Technical content", + "status": "Done", + "target": "26", + "limit": "29", + "reviewer": "Michael Chen" + }, + { + "id": 49, + "header": "Regulatory Compliance", + "type": "Legal", + "status": "In Process", + "target": "13", + "limit": "16", + "reviewer": "Assign reviewer" + }, + { + "id": 50, + "header": "User Authentication System", + "type": "Technical content", + "status": "Done", + "target": "28", + "limit": "31", + "reviewer": "Eddie Lake" + }, + { + "id": 51, + "header": "Data Analytics Framework", + "type": "Technical content", + "status": "In Process", + "target": "21", + "limit": "24", + "reviewer": "Jamik Tashpulatov" + }, + { + "id": 52, + "header": "Cloud Infrastructure", + "type": "Technical content", + "status": "Done", + "target": "16", + "limit": "19", + "reviewer": "Assign reviewer" + }, + { + "id": 53, + "header": "Network Security Measures", + "type": "Technical content", + "status": "In Process", + "target": "29", + "limit": "32", + "reviewer": "Lisa Wong" + }, + { + "id": 54, + "header": "Project Timeline", + "type": "Planning", + "status": "Done", + "target": "14", + "limit": "17", + "reviewer": "Eddie Lake" + }, + { + "id": 55, + "header": "Resource Allocation", + "type": "Planning", + "status": "In Process", + "target": "27", + "limit": "30", + "reviewer": "Assign reviewer" + }, + { + "id": 56, + "header": "Team Structure and Roles", + "type": "Planning", + "status": "Done", + "target": "20", + "limit": "23", + "reviewer": "Jamik Tashpulatov" + }, + { + "id": 57, + "header": "Communication Protocols", + "type": "Planning", + "status": "In Process", + "target": "15", + "limit": "18", + "reviewer": "Assign reviewer" + }, + { + "id": 58, + "header": "Success Metrics", + "type": "Planning", + "status": "Done", + "target": "30", + "limit": "33", + "reviewer": "Eddie Lake" + }, + { + "id": 59, + "header": "Internationalization Support", + "type": "Technical content", + "status": "In Process", + "target": "23", + "limit": "26", + "reviewer": "Jamik Tashpulatov" + }, + { + "id": 60, + "header": "Backup and Recovery Procedures", + "type": "Technical content", + "status": "Done", + "target": "18", + "limit": "21", + "reviewer": "Assign reviewer" + }, + { + "id": 61, + "header": "Monitoring and Alerting System", + "type": "Technical content", + "status": "In Process", + "target": "25", + "limit": "28", + "reviewer": "Daniel Park" + }, + { + "id": 62, + "header": "Code Review Guidelines", + "type": "Technical content", + "status": "Done", + "target": "12", + "limit": "15", + "reviewer": "Eddie Lake" + }, + { + "id": 63, + "header": "Documentation Standards", + "type": "Technical content", + "status": "In Process", + "target": "27", + "limit": "30", + "reviewer": "Jamik Tashpulatov" + }, + { + "id": 64, + "header": "Release Management Process", + "type": "Planning", + "status": "Done", + "target": "22", + "limit": "25", + "reviewer": "Assign reviewer" + }, + { + "id": 65, + "header": "Feature Prioritization Matrix", + "type": "Planning", + "status": "In Process", + "target": "19", + "limit": "22", + "reviewer": "Emma Davis" + }, + { + "id": 66, + "header": "Technical Debt Assessment", + "type": "Technical content", + "status": "Done", + "target": "24", + "limit": "27", + "reviewer": "Eddie Lake" + }, + { + "id": 67, + "header": "Capacity Planning", + "type": "Planning", + "status": "In Process", + "target": "21", + "limit": "24", + "reviewer": "Jamik Tashpulatov" + }, + { + "id": 68, + "header": "Service Level Agreements", + "type": "Legal", + "status": "Done", + "target": "26", + "limit": "29", + "reviewer": "Assign reviewer" + } +] diff --git a/apps/ui/src/registry/bases/base/blocks/dashboard-01/page.tsx b/apps/ui/src/registry/bases/base/blocks/dashboard-01/page.tsx new file mode 100644 index 0000000..2f68629 --- /dev/null +++ b/apps/ui/src/registry/bases/base/blocks/dashboard-01/page.tsx @@ -0,0 +1,37 @@ +import { AppSidebar } from "@/registry/bases/base/blocks/dashboard-01/components/app-sidebar" +import { ChartAreaInteractive } from "@/registry/bases/base/blocks/dashboard-01/components/chart-area-interactive" +import { DataTable } from "@/registry/bases/base/blocks/dashboard-01/components/data-table" +import { SectionCards } from "@/registry/bases/base/blocks/dashboard-01/components/section-cards" +import { SiteHeader } from "@/registry/bases/base/blocks/dashboard-01/components/site-header" +import { SidebarInset, SidebarProvider } from "@/registry/bases/base/ui/sidebar" + +import data from "./data.json" + +export default function Page() { + return ( + + + + +
+
+
+ +
+ +
+ +
+
+
+
+
+ ) +} diff --git a/apps/ui/src/registry/bases/base/blocks/login-01/components/login-form.tsx b/apps/ui/src/registry/bases/base/blocks/login-01/components/login-form.tsx new file mode 100644 index 0000000..6687495 --- /dev/null +++ b/apps/ui/src/registry/bases/base/blocks/login-01/components/login-form.tsx @@ -0,0 +1,70 @@ +import { cn } from "@/registry/bases/base/lib/utils" +import { Button } from "@/registry/bases/base/ui/button" +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/registry/bases/base/ui/card" +import { + Field, + FieldDescription, + FieldGroup, + FieldLabel, +} from "@/registry/bases/base/ui/field" +import { Input } from "@/registry/bases/base/ui/input" + +export function LoginForm({ + className, + ...props +}: React.ComponentProps<"div">) { + return ( +
+ + + Login to your account + + Enter your email below to login to your account + + + +
+ + + Email + + + + + + + + + + + Don't have an account? Sign up + + + +
+
+
+
+ ) +} diff --git a/apps/ui/src/registry/bases/base/blocks/login-01/page.tsx b/apps/ui/src/registry/bases/base/blocks/login-01/page.tsx new file mode 100644 index 0000000..853e8b5 --- /dev/null +++ b/apps/ui/src/registry/bases/base/blocks/login-01/page.tsx @@ -0,0 +1,11 @@ +import { LoginForm } from "@/registry/bases/base/blocks/login-01/components/login-form" + +export default function Page() { + return ( +
+
+ +
+
+ ) +} diff --git a/apps/ui/src/registry/bases/base/blocks/login-02/components/login-form.tsx b/apps/ui/src/registry/bases/base/blocks/login-02/components/login-form.tsx new file mode 100644 index 0000000..18862dd --- /dev/null +++ b/apps/ui/src/registry/bases/base/blocks/login-02/components/login-form.tsx @@ -0,0 +1,65 @@ +import { cn } from "@/registry/bases/base/lib/utils" +import { Button } from "@/registry/bases/base/ui/button" +import { + Field, + FieldDescription, + FieldGroup, + FieldLabel, + FieldSeparator, +} from "@/registry/bases/base/ui/field" +import { Input } from "@/registry/bases/base/ui/input" + +export function LoginForm({ + className, + ...props +}: React.ComponentProps<"form">) { + return ( +
+ +
+

Login to your account

+

+ Enter your email below to login to your account +

+
+ + Email + + + + + + + + + + Or continue with + + + + Don't have an account?{" "} + + Sign up + + + +
+
+ ) +} diff --git a/apps/ui/src/registry/bases/base/blocks/login-02/page.tsx b/apps/ui/src/registry/bases/base/blocks/login-02/page.tsx new file mode 100644 index 0000000..2b5ddde --- /dev/null +++ b/apps/ui/src/registry/bases/base/blocks/login-02/page.tsx @@ -0,0 +1,39 @@ + +import { LoginForm } from "@/registry/bases/base/blocks/login-02/components/login-form" +import { IconPlaceholder } from "@/routes/create/components/icon-placeholder" + +export default function LoginPage() { + return ( +
+
+ +
+
+ +
+
+
+
+ Image +
+
+ ) +} diff --git a/apps/ui/src/registry/bases/base/blocks/login-03/components/login-form.tsx b/apps/ui/src/registry/bases/base/blocks/login-03/components/login-form.tsx new file mode 100644 index 0000000..b2f5ee6 --- /dev/null +++ b/apps/ui/src/registry/bases/base/blocks/login-03/components/login-form.tsx @@ -0,0 +1,95 @@ +import { cn } from "@/registry/bases/base/lib/utils" +import { Button } from "@/registry/bases/base/ui/button" +import { + Card, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/registry/bases/base/ui/card" +import { + Field, + FieldDescription, + FieldGroup, + FieldLabel, + FieldSeparator, +} from "@/registry/bases/base/ui/field" +import { Input } from "@/registry/bases/base/ui/input" + +export function LoginForm({ + className, + ...props +}: React.ComponentProps<"div">) { + return ( +
+ + + Welcome back + + Login with your Apple or Google account + + + +
+ + + + + + + Or continue with + + + Email + + + + + + + + + + Don't have an account? Sign up + + + +
+
+
+ + By clicking continue, you agree to our Terms of Service{" "} + and Privacy Policy. + +
+ ) +} diff --git a/apps/ui/src/registry/bases/base/blocks/login-03/page.tsx b/apps/ui/src/registry/bases/base/blocks/login-03/page.tsx new file mode 100644 index 0000000..0650aa3 --- /dev/null +++ b/apps/ui/src/registry/bases/base/blocks/login-03/page.tsx @@ -0,0 +1,26 @@ + +import { LoginForm } from "@/registry/bases/base/blocks/login-03/components/login-form" +import { IconPlaceholder } from "@/routes/create/components/icon-placeholder" + +export default function LoginPage() { + return ( + + ) +} diff --git a/apps/ui/src/registry/bases/base/blocks/login-04/components/login-form.tsx b/apps/ui/src/registry/bases/base/blocks/login-04/components/login-form.tsx new file mode 100644 index 0000000..6f05df1 --- /dev/null +++ b/apps/ui/src/registry/bases/base/blocks/login-04/components/login-form.tsx @@ -0,0 +1,105 @@ +import { cn } from "@/registry/bases/base/lib/utils" +import { Button } from "@/registry/bases/base/ui/button" +import { Card, CardContent } from "@/registry/bases/base/ui/card" +import { + Field, + FieldDescription, + FieldGroup, + FieldLabel, + FieldSeparator, +} from "@/registry/bases/base/ui/field" +import { Input } from "@/registry/bases/base/ui/input" + +export function LoginForm({ + className, + ...props +}: React.ComponentProps<"div">) { + return ( +
+ + +
+ +
+

Welcome back

+

+ Login to your Acme Inc account +

+
+ + Email + + + + + + + + + + + Or continue with + + + + + + + + Don't have an account? Sign up + +
+
+
+ Image +
+
+
+ + By clicking continue, you agree to our Terms of Service{" "} + and Privacy Policy. + +
+ ) +} diff --git a/apps/ui/src/registry/bases/base/blocks/login-04/page.tsx b/apps/ui/src/registry/bases/base/blocks/login-04/page.tsx new file mode 100644 index 0000000..4684095 --- /dev/null +++ b/apps/ui/src/registry/bases/base/blocks/login-04/page.tsx @@ -0,0 +1,11 @@ +import { LoginForm } from "@/registry/bases/base/blocks/login-04/components/login-form" + +export default function LoginPage() { + return ( +
+
+ +
+
+ ) +} diff --git a/apps/ui/src/registry/bases/base/blocks/login-05/components/login-form.tsx b/apps/ui/src/registry/bases/base/blocks/login-05/components/login-form.tsx new file mode 100644 index 0000000..483f14f --- /dev/null +++ b/apps/ui/src/registry/bases/base/blocks/login-05/components/login-form.tsx @@ -0,0 +1,85 @@ + +import { cn } from "@/registry/bases/base/lib/utils" +import { Button } from "@/registry/bases/base/ui/button" +import { + Field, + FieldDescription, + FieldGroup, + FieldLabel, + FieldSeparator, +} from "@/registry/bases/base/ui/field" +import { Input } from "@/registry/bases/base/ui/input" +import { IconPlaceholder } from "@/routes/create/components/icon-placeholder" + +export function LoginForm({ + className, + ...props +}: React.ComponentProps<"div">) { + return ( +
+
+ +
+ +
+ +
+ Acme Inc. +
+

Welcome to Acme Inc.

+ + Don't have an account? Sign up + +
+ + Email + + + + + + Or + + + + +
+
+ + By clicking continue, you agree to our Terms of Service{" "} + and Privacy Policy. + +
+ ) +} diff --git a/apps/ui/src/registry/bases/base/blocks/login-05/page.tsx b/apps/ui/src/registry/bases/base/blocks/login-05/page.tsx new file mode 100644 index 0000000..9a50159 --- /dev/null +++ b/apps/ui/src/registry/bases/base/blocks/login-05/page.tsx @@ -0,0 +1,11 @@ +import { LoginForm } from "@/registry/bases/base/blocks/login-05/components/login-form" + +export default function LoginPage() { + return ( +
+
+ +
+
+ ) +} diff --git a/apps/ui/src/registry/bases/base/blocks/preview-02/cards/account-access.tsx b/apps/ui/src/registry/bases/base/blocks/preview-02/cards/account-access.tsx new file mode 100644 index 0000000..6dda362 --- /dev/null +++ b/apps/ui/src/registry/bases/base/blocks/preview-02/cards/account-access.tsx @@ -0,0 +1,101 @@ + +import { Button } from "@/registry/bases/base/ui/button" +import { + Card, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle, +} from "@/registry/bases/base/ui/card" +import { Field, FieldGroup, FieldLabel } from "@/registry/bases/base/ui/field" +import { Input } from "@/registry/bases/base/ui/input" +import { + Item, + ItemContent, + ItemDescription, + ItemMedia, + ItemTitle, +} from "@/registry/bases/base/ui/item" +import { IconPlaceholder } from "@/routes/create/components/icon-placeholder" + +export function AccountAccess() { + return ( + + + Account Access + + Update your credentials or re-authenticate. + + + + + + Email Address + + + +
+ + Current Password + + + Forgot? + +
+ +
+
+
+ + + }> + + + + + Danger Zone + + Archive account and remove catalog + + + + + +
+ ) +} diff --git a/apps/ui/src/registry/bases/base/blocks/preview-02/cards/album-card.tsx b/apps/ui/src/registry/bases/base/blocks/preview-02/cards/album-card.tsx new file mode 100644 index 0000000..a7fccf7 --- /dev/null +++ b/apps/ui/src/registry/bases/base/blocks/preview-02/cards/album-card.tsx @@ -0,0 +1,49 @@ +import { Badge } from "@/registry/bases/base/ui/badge" +import { + Card, + CardContent, + CardDescription, + CardFooter, + CardTitle, +} from "@/registry/bases/base/ui/card" +import { Separator } from "@/registry/bases/base/ui/separator" + +export function AlbumCard() { + return ( + + +
+ Synthetic Horizons EP cover art + $26,033.79 +
+
+ Synthetic Horizons EP + + Released Aug 14, 2023 + +
+
+ + +
+
+ + Tracks + + 6 Tracks +
+
+ + Cumulative Streams + + 6,198,524 +
+
+
+
+ ) +} diff --git a/apps/ui/src/registry/bases/base/blocks/preview-02/cards/card-overview.tsx b/apps/ui/src/registry/bases/base/blocks/preview-02/cards/card-overview.tsx new file mode 100644 index 0000000..e311d49 --- /dev/null +++ b/apps/ui/src/registry/bases/base/blocks/preview-02/cards/card-overview.tsx @@ -0,0 +1,98 @@ + +import { Bar, BarChart, XAxis } from "recharts" + +import { Badge } from "@/registry/bases/base/ui/badge" +import { Button } from "@/registry/bases/base/ui/button" +import { + Card, + CardContent, + CardDescription, + CardTitle, +} from "@/registry/bases/base/ui/card" +import { + ChartContainer, + ChartTooltip, + ChartTooltipContent, + type ChartConfig, +} from "@/registry/bases/base/ui/chart" + +const activityData = [ + { month: "Jan", amount: 40 }, + { month: "Feb", amount: 55 }, + { month: "Mar", amount: 35 }, + { month: "Apr", amount: 60 }, + { month: "May", amount: 45 }, + { month: "Jun", amount: 50 }, + { month: "Jul", amount: 65 }, + { month: "Aug", amount: 40 }, + { month: "Sep", amount: 55 }, + { month: "Oct", amount: 70 }, + { month: "Nov", amount: 45 }, + { month: "Dec", amount: 80 }, +] + +const chartConfig = { + amount: { + label: "Activity", + color: "var(--chart-2)", + }, +} satisfies ChartConfig + +export function CardOverview() { + return ( +
+ + + Card Balance + US$12.94 + + US$11,337.06 Available + + + + + +
+ Payment Due + 1 Apr +
+ +
+
+ + +
+ Yearly Activity + +US$0.25 Daily Cash +
+ + + String(v).slice(0, 1)} + className="text-[10px]" + /> + } + /> + + + +
+
+
+ ) +} diff --git a/apps/ui/src/registry/bases/base/blocks/preview-02/cards/catalog-toolbar.tsx b/apps/ui/src/registry/bases/base/blocks/preview-02/cards/catalog-toolbar.tsx new file mode 100644 index 0000000..b8f3d51 --- /dev/null +++ b/apps/ui/src/registry/bases/base/blocks/preview-02/cards/catalog-toolbar.tsx @@ -0,0 +1,46 @@ + +import { Button } from "@/registry/bases/base/ui/button" +import { + InputGroup, + InputGroupAddon, + InputGroupInput, +} from "@/registry/bases/base/ui/input-group" +import { + ToggleGroup, + ToggleGroupItem, +} from "@/registry/bases/base/ui/toggle-group" +import { IconPlaceholder } from "@/routes/create/components/icon-placeholder" + +export function CatalogToolbar() { + return ( +
+ + + + + + + + + All Tracks + Releases + Top Earners + +
+ ) +} diff --git a/apps/ui/src/registry/bases/base/blocks/preview-02/cards/claimable-balance.tsx b/apps/ui/src/registry/bases/base/blocks/preview-02/cards/claimable-balance.tsx new file mode 100644 index 0000000..16571ec --- /dev/null +++ b/apps/ui/src/registry/bases/base/blocks/preview-02/cards/claimable-balance.tsx @@ -0,0 +1,59 @@ +import { Badge } from "@/registry/bases/base/ui/badge" +import { + Card, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle, +} from "@/registry/bases/base/ui/card" +import { Item, ItemContent } from "@/registry/bases/base/ui/item" +import { Separator } from "@/registry/bases/base/ui/separator" + +export function ClaimableBalance() { + return ( + + + Claimable Balance + $0.00 + + + Pending Setup + + + + + +
+ + Net Royalties + + $0.00 +
+
+ + Processing Fee + + -$0.00 +
+ +
+ + Total Ready to Claim + + + $0.00 USD + +
+
+
+
+ + + Once your bank is connected, balances over $10.00 are automatically + eligible for monthly distribution on the 15th of each month. + + +
+ ) +} diff --git a/apps/ui/src/registry/bases/base/blocks/preview-02/cards/contribution-history.tsx b/apps/ui/src/registry/bases/base/blocks/preview-02/cards/contribution-history.tsx new file mode 100644 index 0000000..cd53e01 --- /dev/null +++ b/apps/ui/src/registry/bases/base/blocks/preview-02/cards/contribution-history.tsx @@ -0,0 +1,115 @@ + +import { Bar, BarChart, XAxis } from "recharts" + +import { Badge } from "@/registry/bases/base/ui/badge" +import { Button } from "@/registry/bases/base/ui/button" +import { + Card, + CardAction, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle, +} from "@/registry/bases/base/ui/card" +import { + ChartContainer, + ChartTooltip, + ChartTooltipContent, + type ChartConfig, +} from "@/registry/bases/base/ui/chart" +import { + Item, + ItemContent, + ItemDescription, +} from "@/registry/bases/base/ui/item" +import { useDesignSystemSearchParams } from "@/routes/create/lib/search-params" + +const chartData = [ + { month: "Dec", amount: 800 }, + { month: "Jan", amount: 1100 }, + { month: "Feb", amount: 900 }, + { month: "Mar", amount: 1300 }, + { month: "Apr", amount: 750 }, + { month: "May", amount: 1400 }, +] + +const chartConfig = { + amount: { + label: "Contribution", + color: "var(--chart-2)", + }, +} satisfies ChartConfig + +export function ContributionHistory() { + const [params] = useDesignSystemSearchParams() + const isRounded = !["lyra", "sera"].includes(params.style) + + return ( + + + Contribution History + Last 6 months of activity + + + + + + } + /> + + + + + +
+ + + + Upcoming + + + May 25, 2024 + + + $1,000 scheduled + + + + + + + Auto-Save Plan + + + Accelerated + + + Recurring weekly + + + +
+
+ + + +
+ ) +} diff --git a/apps/ui/src/registry/bases/base/blocks/preview-02/cards/cover-art.tsx b/apps/ui/src/registry/bases/base/blocks/preview-02/cards/cover-art.tsx new file mode 100644 index 0000000..d25ab85 --- /dev/null +++ b/apps/ui/src/registry/bases/base/blocks/preview-02/cards/cover-art.tsx @@ -0,0 +1,61 @@ +import { Button } from "@/registry/bases/base/ui/button" +import { + Card, + CardContent, + CardDescription, + CardFooter, +} from "@/registry/bases/base/ui/card" +import { Item } from "@/registry/bases/base/ui/item" +import { Label } from "@/registry/bases/base/ui/label" +import { IconPlaceholder } from "@/routes/create/components/icon-placeholder" + +export function CoverArt() { + return ( + + + + + + + + + + + + Minimum 3000 × 3000px +
+ JPEG or PNG only +
+
+
+ ) +} diff --git a/apps/ui/src/registry/bases/base/blocks/preview-02/cards/dividend-income.tsx b/apps/ui/src/registry/bases/base/blocks/preview-02/cards/dividend-income.tsx new file mode 100644 index 0000000..218a031 --- /dev/null +++ b/apps/ui/src/registry/bases/base/blocks/preview-02/cards/dividend-income.tsx @@ -0,0 +1,142 @@ + +import { Bar, BarChart, XAxis } from "recharts" + +import { Button } from "@/registry/bases/base/ui/button" +import { + Card, + CardAction, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/registry/bases/base/ui/card" +import { + ChartContainer, + ChartTooltip, + ChartTooltipContent, + type ChartConfig, +} from "@/registry/bases/base/ui/chart" +import { + Item, + ItemContent, + ItemDescription, + ItemGroup, + ItemTitle, +} from "@/registry/bases/base/ui/item" +import { useDesignSystemSearchParams } from "@/routes/create/lib/search-params" +import { IconPlaceholder } from "@/routes/create/components/icon-placeholder" + +const HOLDINGS = [ + { + name: "Vanguard VIG", + shares: "450 Shares", + amount: "$1,842.10", + data: [ + { q: "Q1", value: 380 }, + { q: "Q2", value: 420 }, + { q: "Q3", value: 390 }, + { q: "Q4", value: 652 }, + ], + }, + { + name: "S&P 500 VOO", + shares: "112 Shares", + amount: "$928.40", + data: [ + { q: "Q1", value: 180 }, + { q: "Q2", value: 210 }, + { q: "Q3", value: 320 }, + { q: "Q4", value: 218 }, + ], + }, + { + name: "Apple AAPL", + shares: "85 Shares", + amount: "$340.00", + data: [ + { q: "Q1", value: 60 }, + { q: "Q2", value: 70 }, + { q: "Q3", value: 120 }, + { q: "Q4", value: 90 }, + ], + }, + { + name: "Realty Income", + shares: "320 Shares", + amount: "$1,139.50", + data: [ + { q: "Q1", value: 240 }, + { q: "Q2", value: 260 }, + { q: "Q3", value: 280 }, + { q: "Q4", value: 360 }, + ], + }, +] + +const miniChartConfig = { + value: { + label: "Dividend", + color: "var(--chart-2)", + }, +} satisfies ChartConfig + +export function DividendIncome() { + const [params] = useDesignSystemSearchParams() + const isRounded = !["lyra", "sera"].includes(params.style) + + return ( + + + Q2 Dividend Income + + Quarterly dividend payouts across your portfolio holdings. + + + + + + + + {HOLDINGS.map((holding) => ( + + + {holding.name} + {holding.shares} + + + + } + /> + + + + + {holding.amount} + + + ))} + + + + ) +} diff --git a/apps/ui/src/registry/bases/base/blocks/preview-02/cards/empty-connect-bank.tsx b/apps/ui/src/registry/bases/base/blocks/preview-02/cards/empty-connect-bank.tsx new file mode 100644 index 0000000..6b9e2db --- /dev/null +++ b/apps/ui/src/registry/bases/base/blocks/preview-02/cards/empty-connect-bank.tsx @@ -0,0 +1,41 @@ +import { Button } from "@/registry/bases/base/ui/button" +import { Card, CardContent } from "@/registry/bases/base/ui/card" +import { + Empty, + EmptyContent, + EmptyDescription, + EmptyHeader, + EmptyMedia, + EmptyTitle, +} from "@/registry/bases/base/ui/empty" +import { IconPlaceholder } from "@/routes/create/components/icon-placeholder" + +export function EmptyConnectBank() { + return ( + + + + + + + + Connect Bank + + Link your payout method to receive monthly royalty distributions + automatically. + + + + + + + + + ) +} diff --git a/apps/ui/src/registry/bases/base/blocks/preview-02/cards/empty-distribute-track.tsx b/apps/ui/src/registry/bases/base/blocks/preview-02/cards/empty-distribute-track.tsx new file mode 100644 index 0000000..e03b3ed --- /dev/null +++ b/apps/ui/src/registry/bases/base/blocks/preview-02/cards/empty-distribute-track.tsx @@ -0,0 +1,41 @@ +import { Button } from "@/registry/bases/base/ui/button" +import { Card, CardContent } from "@/registry/bases/base/ui/card" +import { + Empty, + EmptyContent, + EmptyDescription, + EmptyHeader, + EmptyMedia, + EmptyTitle, +} from "@/registry/bases/base/ui/empty" +import { IconPlaceholder } from "@/routes/create/components/icon-placeholder" + +export function EmptyDistributeTrack() { + return ( + + + + + + + + Distribute Track + + Upload your first master to start reaching listeners on Spotify, + Apple Music, and more. + + + + + + + + + ) +} diff --git a/apps/ui/src/registry/bases/base/blocks/preview-02/cards/empty-explore-catalog.tsx b/apps/ui/src/registry/bases/base/blocks/preview-02/cards/empty-explore-catalog.tsx new file mode 100644 index 0000000..f1aa048 --- /dev/null +++ b/apps/ui/src/registry/bases/base/blocks/preview-02/cards/empty-explore-catalog.tsx @@ -0,0 +1,41 @@ +import { Button } from "@/registry/bases/base/ui/button" +import { Card, CardContent } from "@/registry/bases/base/ui/card" +import { + Empty, + EmptyContent, + EmptyDescription, + EmptyHeader, + EmptyMedia, + EmptyTitle, +} from "@/registry/bases/base/ui/empty" +import { IconPlaceholder } from "@/routes/create/components/icon-placeholder" + +export function EmptyExploreCatalog() { + return ( + + + + + + + + Explore Catalog + + Check your ISRC codes, metadata, and visual assets before going + live. + + + + + + + + + ) +} diff --git a/apps/ui/src/registry/bases/base/blocks/preview-02/cards/faq.tsx b/apps/ui/src/registry/bases/base/blocks/preview-02/cards/faq.tsx new file mode 100644 index 0000000..cf31851 --- /dev/null +++ b/apps/ui/src/registry/bases/base/blocks/preview-02/cards/faq.tsx @@ -0,0 +1,123 @@ + +import { + Accordion, + AccordionContent, + AccordionItem, + AccordionTrigger, +} from "@/registry/bases/base/ui/accordion" +import { Button } from "@/registry/bases/base/ui/button" +import { + Card, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle, +} from "@/registry/bases/base/ui/card" +import { + Tabs, + TabsContent, + TabsList, + TabsTrigger, +} from "@/registry/bases/base/ui/tabs" + +const GENERAL_QUESTIONS = [ + { + q: "How secure is my financial data with Ledger?", + a: "We use bank-level AES-256 encryption, SOC 2 Type II certified infrastructure, and never store your credentials. All connections use read-only access tokens. We are a SEC registered investment advisor.", + }, + { + q: "How do I connect my bank or investment accounts?", + a: "Go to Settings > Linked Accounts and search for your institution. We support over 12,000 banks and brokerages via Plaid and MX.", + }, + { + q: "Can I export my data for tax purposes?", + a: "Yes. Navigate to Reports > Tax Export to download a CSV or PDF summary of your transactions, dividends, and capital gains for any tax year.", + }, +] + +const BILLING_QUESTIONS = [ + { + q: "What is the difference between Basic and Pro pricing tiers?", + a: "Basic includes budgeting, goal tracking, and up to 3 linked accounts. Pro adds unlimited accounts, dividend tracking, portfolio analysis, and priority support.", + }, + { + q: "How do I cancel my subscription?", + a: "Go to Settings > Billing > Manage Plan and click Cancel. Your access continues until the end of your current billing period.", + }, + { + q: "Do you offer a free trial?", + a: "Yes. All new accounts start with a 14-day Pro trial. No credit card required.", + }, +] + +const GOALS_QUESTIONS = [ + { + q: "How do I set up a custom financial goal?", + a: "Click New Goal from the Savings Targets card. Choose a category, set a target amount and date, and we'll calculate the monthly contribution needed.", + }, + { + q: "Can I track multiple goals at once?", + a: "Yes. Pro accounts can track unlimited goals. Basic accounts support up to 3 active goals.", + }, + { + q: "How are monthly contributions calculated?", + a: "We divide the remaining amount by the number of months until your target date, adjusted for your current savings rate and any auto-transfer schedules.", + }, +] + +function QuestionList({ + questions, +}: { + questions: { q: string; a: string }[] +}) { + return ( + + {questions.map((item, index) => ( + + {item.q} + {item.a} + + ))} + + ) +} + +export function Faq() { + return ( + + + + + + General + + + Billing + + + Goals + + + + + + + + + + + + + + + + + + + ) +} diff --git a/apps/ui/src/registry/bases/base/blocks/preview-02/cards/front-door.tsx b/apps/ui/src/registry/bases/base/blocks/preview-02/cards/front-door.tsx new file mode 100644 index 0000000..52a49b7 --- /dev/null +++ b/apps/ui/src/registry/bases/base/blocks/preview-02/cards/front-door.tsx @@ -0,0 +1,41 @@ +import { Badge } from "@/registry/bases/base/ui/badge" +import { + Card, + CardAction, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/registry/bases/base/ui/card" +import { IconPlaceholder } from "@/routes/create/components/icon-placeholder" + +export function FrontDoor() { + return ( + + + Front Door + Smart Lock Pro + +
+ Locked + +
+
+
+ +
+ + Live + +
+
+
+ ) +} diff --git a/apps/ui/src/registry/bases/base/blocks/preview-02/cards/index-investing.tsx b/apps/ui/src/registry/bases/base/blocks/preview-02/cards/index-investing.tsx new file mode 100644 index 0000000..4139028 --- /dev/null +++ b/apps/ui/src/registry/bases/base/blocks/preview-02/cards/index-investing.tsx @@ -0,0 +1,37 @@ +import { Button } from "@/registry/bases/base/ui/button" +import { + Card, + CardAction, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/registry/bases/base/ui/card" +import { IconPlaceholder } from "@/routes/create/components/icon-placeholder" + +export function IndexInvesting() { + return ( + + + Dollar-Cost Averaging + + A strategy for building wealth over time. + + + + + + Over time + + , this smooths out the average cost of your investments. When prices + drop, your fixed amount buys more shares. When prices rise, you buy + fewer. The result is a lower average cost per share compared to + lump-sum investing during volatile periods. + + + + ) +} diff --git a/apps/ui/src/registry/bases/base/blocks/preview-02/cards/kitchen-island.tsx b/apps/ui/src/registry/bases/base/blocks/preview-02/cards/kitchen-island.tsx new file mode 100644 index 0000000..735cb52 --- /dev/null +++ b/apps/ui/src/registry/bases/base/blocks/preview-02/cards/kitchen-island.tsx @@ -0,0 +1,188 @@ + +import * as React from "react" + +import { + Card, + CardAction, + CardContent, + CardDescription, + CardHeader, + CardTitle, +} from "@/registry/bases/base/ui/card" +import { + Item, + ItemActions, + ItemContent, + ItemGroup, + ItemMedia, + ItemTitle, +} from "@/registry/bases/base/ui/item" +import { Slider } from "@/registry/bases/base/ui/slider" +import { Switch } from "@/registry/bases/base/ui/switch" +import { + ToggleGroup, + ToggleGroupItem, +} from "@/registry/bases/base/ui/toggle-group" +import { IconPlaceholder } from "@/routes/create/components/icon-placeholder" + +const SCENES = { + cooking: { brightness: [90], colorTemp: [70], volume: [30], fade: [0] }, + dining: { brightness: [50], colorTemp: [40], volume: [20], fade: [60] }, + nightlight: { brightness: [15], colorTemp: [20], volume: [0], fade: [80] }, + focus: { brightness: [100], colorTemp: [85], volume: [0], fade: [0] }, +} as const + +export function KitchenIsland() { + const [enabled, setEnabled] = React.useState(true) + const [scene, setScene] = React.useState("cooking") + const [brightness, setBrightness] = React.useState([90]) + const [colorTemp, setColorTemp] = React.useState([70]) + const [volume, setVolume] = React.useState([30]) + const [fade, setFade] = React.useState([0]) + + const handleSceneChange = (value: string) => { + if (!value) return + setScene(value) + const preset = SCENES[value as keyof typeof SCENES] + setBrightness([...preset.brightness]) + setColorTemp([...preset.colorTemp]) + setVolume([...preset.volume]) + setFade([...preset.fade]) + } + + return ( + + + Kitchen Island + Hue Color Ambient + + + + + +
+ Scenes + handleSceneChange(value[0] ?? "cooking")} + variant="outline" + spacing={1} + className="flex-wrap" + > + + Cooking + + + Dining + + + Nightlight + + + Focus + + +
+ + + + + + + Brightness + + + + setBrightness(Array.isArray(value) ? [...value] : [value]) + } + max={100} + disabled={!enabled} + className="w-full" + /> + + + + + + + + Color Temp + + + + setColorTemp(Array.isArray(value) ? [...value] : [value]) + } + max={100} + disabled={!enabled} + /> + + + + + + + + Volume + + + + setVolume(Array.isArray(value) ? [...value] : [value]) + } + max={100} + disabled={!enabled} + /> + + + + + + + + Fade + + + + setFade(Array.isArray(value) ? [...value] : [value]) + } + max={100} + disabled={!enabled} + /> + + + +
+
+ ) +} diff --git a/apps/ui/src/registry/bases/base/blocks/preview-02/cards/loading-card.tsx b/apps/ui/src/registry/bases/base/blocks/preview-02/cards/loading-card.tsx new file mode 100644 index 0000000..556ca87 --- /dev/null +++ b/apps/ui/src/registry/bases/base/blocks/preview-02/cards/loading-card.tsx @@ -0,0 +1,25 @@ +import { Card, CardContent, CardHeader } from "@/registry/bases/base/ui/card" +import { Skeleton } from "@/registry/bases/base/ui/skeleton" + +export function LoadingCard() { + return ( + + + + + + + +
+ + + +
+
+ + +
+
+
+ ) +} diff --git a/apps/ui/src/registry/bases/base/blocks/preview-02/cards/new-milestone.tsx b/apps/ui/src/registry/bases/base/blocks/preview-02/cards/new-milestone.tsx new file mode 100644 index 0000000..be2db04 --- /dev/null +++ b/apps/ui/src/registry/bases/base/blocks/preview-02/cards/new-milestone.tsx @@ -0,0 +1,53 @@ + +import { Button } from "@/registry/bases/base/ui/button" +import { + Card, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle, +} from "@/registry/bases/base/ui/card" +import { Field, FieldGroup, FieldLabel } from "@/registry/bases/base/ui/field" +import { Input } from "@/registry/bases/base/ui/input" + +export function NewMilestone() { + return ( + + + Set a new milestone + + Define your financial target and we'll help you pace your + savings. + + + + + + Goal Name + + +
+ + Target Amount + + + + Target Date + + +
+
+
+ + + + +
+ ) +} diff --git a/apps/ui/src/registry/bases/base/blocks/preview-02/cards/notification-settings.tsx b/apps/ui/src/registry/bases/base/blocks/preview-02/cards/notification-settings.tsx new file mode 100644 index 0000000..4090d66 --- /dev/null +++ b/apps/ui/src/registry/bases/base/blocks/preview-02/cards/notification-settings.tsx @@ -0,0 +1,106 @@ + +import * as React from "react" + +import { Button } from "@/registry/bases/base/ui/button" +import { + Card, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle, +} from "@/registry/bases/base/ui/card" +import { Checkbox } from "@/registry/bases/base/ui/checkbox" +import { + Field, + FieldContent, + FieldDescription, + FieldGroup, + FieldLabel, +} from "@/registry/bases/base/ui/field" + +const NOTIFICATIONS = [ + { + id: "transactions", + label: "Transaction alerts", + description: "Deposits, withdrawals, and transfers.", + defaultChecked: true, + }, + { + id: "security", + label: "Security alerts", + description: "Login attempts and account changes.", + defaultChecked: true, + }, + { + id: "goals", + label: "Goal milestones", + description: "Updates at 25%, 50%, 75%, and 100%.", + defaultChecked: false, + }, + { + id: "market", + label: "Market updates", + description: "Daily portfolio summary and price alerts.", + defaultChecked: false, + }, +] + +export function NotificationSettings() { + const [checked, setChecked] = React.useState>( + Object.fromEntries(NOTIFICATIONS.map((n) => [n.id, n.defaultChecked])) + ) + + const allChecked = NOTIFICATIONS.every((n) => checked[n.id]) + const someChecked = NOTIFICATIONS.some((n) => checked[n.id]) && !allChecked + + const handleSelectAll = (value: boolean) => { + setChecked(Object.fromEntries(NOTIFICATIONS.map((n) => [n.id, value]))) + } + + const handleToggle = (id: string, value: boolean) => { + setChecked((prev) => ({ ...prev, [id]: value })) + } + + return ( + + + Notifications + + Choose what you want to be notified about. + + + + + + handleSelectAll(!!v)} + /> + + Select all + + + {NOTIFICATIONS.map((n) => ( + + handleToggle(n.id, !!v)} + /> + + {n.label} + {n.description} + + + ))} + + + + + + + ) +} diff --git a/apps/ui/src/registry/bases/base/blocks/preview-02/cards/payments.tsx b/apps/ui/src/registry/bases/base/blocks/preview-02/cards/payments.tsx new file mode 100644 index 0000000..b26ba30 --- /dev/null +++ b/apps/ui/src/registry/bases/base/blocks/preview-02/cards/payments.tsx @@ -0,0 +1,175 @@ + +import { + Breadcrumb, + BreadcrumbItem, + BreadcrumbLink, + BreadcrumbList, + BreadcrumbPage, + BreadcrumbSeparator, +} from "@/registry/bases/base/ui/breadcrumb" +import { Button } from "@/registry/bases/base/ui/button" +import { Card, CardContent, CardHeader } from "@/registry/bases/base/ui/card" +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuGroup, + DropdownMenuItem, + DropdownMenuTrigger, +} from "@/registry/bases/base/ui/dropdown-menu" +import { + Item, + ItemContent, + ItemDescription, + ItemGroup, + ItemMedia, + ItemTitle, +} from "@/registry/bases/base/ui/item" +import { IconPlaceholder } from "@/routes/create/components/icon-placeholder" + +export function Payments() { + return ( + + + + + + Home + + + + + } + > + + Account options + + + + Profile + Statements + Documents + + + + + + + Payments + + + + + + + }> + + + + + Change transfer limit + + Adjust how much you can send from your balance. + + + + + }> + + + + + Scheduled transfers + + Set up a transfer to send at a later date. + + + + + }> + + + + + Direct Debits + + Set up and manage regular payments. + + + + + }> + + + + + Recurring card payments + + Manage your repeated card transactions. + + + + + + + + ) +} diff --git a/apps/ui/src/registry/bases/base/blocks/preview-02/cards/payout-threshold.tsx b/apps/ui/src/registry/bases/base/blocks/preview-02/cards/payout-threshold.tsx new file mode 100644 index 0000000..059ccc7 --- /dev/null +++ b/apps/ui/src/registry/bases/base/blocks/preview-02/cards/payout-threshold.tsx @@ -0,0 +1,121 @@ + +import * as React from "react" + +import { Button } from "@/registry/bases/base/ui/button" +import { + Card, + CardAction, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle, +} from "@/registry/bases/base/ui/card" +import { + Field, + FieldDescription, + FieldGroup, + FieldLabel, +} from "@/registry/bases/base/ui/field" +import { + Select, + SelectContent, + SelectGroup, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/registry/bases/base/ui/select" +import { Slider } from "@/registry/bases/base/ui/slider" +import { Textarea } from "@/registry/bases/base/ui/textarea" +import { IconPlaceholder } from "@/routes/create/components/icon-placeholder" + +const CURRENCIES = [ + { label: "USD — United States Dollar", value: "usd" }, + { label: "EUR — Euro", value: "eur" }, + { label: "GBP — British Pound", value: "gbp" }, + { label: "JPY — Japanese Yen", value: "jpy" }, +] + +export function PayoutThreshold() { + const [amount, setAmount] = React.useState([2500]) + + return ( + + + Payout Threshold + + Set the minimum balance required before a payout is triggered. + + + + + + + + + + Preferred Currency + + + + +
+ + Minimum Payout Amount + + + ${amount[0].toFixed(2)} + +
+ + setAmount(Array.isArray(value) ? [...value] : [value]) + } + min={50} + max={10000} + step={50} + /> +
+ $50 (MIN) + $10,000 (MAX) +
+
+ + Notes +