tembro 2.0.5 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/calendar/calendar.cjs +1 -1
- package/dist/components/calendar/calendar.d.ts +2 -1
- package/dist/components/calendar/calendar.js +126 -122
- package/dist/components/calendar/date-range-picker.cjs +1 -1
- package/dist/components/calendar/date-range-picker.d.ts +2 -1
- package/dist/components/calendar/date-range-picker.js +39 -39
- package/dist/components/charts/charts.cjs +1 -1
- package/dist/components/charts/charts.d.ts +13 -4
- package/dist/components/charts/charts.js +76 -46
- package/dist/components/charts/progress-ring.cjs +1 -1
- package/dist/components/charts/progress-ring.d.ts +3 -1
- package/dist/components/charts/progress-ring.js +11 -10
- package/dist/components/data-table/data-table-column-visibility-menu.cjs +1 -1
- package/dist/components/data-table/data-table-column-visibility-menu.d.ts +4 -1
- package/dist/components/data-table/data-table-column-visibility-menu.js +36 -8
- package/dist/components/data-table/data-table-pagination.cjs +1 -1
- package/dist/components/data-table/data-table-pagination.js +4 -4
- package/dist/components/data-table/data-table-toolbar.cjs +1 -1
- package/dist/components/data-table/data-table-toolbar.js +12 -13
- package/dist/components/data-table/data-table.cjs +1 -1
- package/dist/components/data-table/data-table.d.ts +2 -2
- package/dist/components/data-table/data-table.js +2 -1
- package/dist/components/display/carousel.cjs +1 -1
- package/dist/components/display/carousel.d.ts +15 -1
- package/dist/components/display/carousel.js +128 -86
- package/dist/components/display/code-block.cjs +2 -2
- package/dist/components/display/code-block.d.ts +2 -1
- package/dist/components/display/code-block.js +17 -12
- package/dist/components/display/delta-badge.cjs +1 -1
- package/dist/components/display/delta-badge.d.ts +2 -1
- package/dist/components/display/delta-badge.js +11 -7
- package/dist/components/display/kanban.cjs +1 -1
- package/dist/components/display/kanban.d.ts +4 -1
- package/dist/components/display/kanban.js +60 -33
- package/dist/components/display/metric-grid.cjs +1 -1
- package/dist/components/display/metric-grid.d.ts +1 -0
- package/dist/components/display/metric-grid.js +1 -1
- package/dist/components/display/qr-code.cjs +1 -1
- package/dist/components/display/qr-code.d.ts +2 -1
- package/dist/components/display/qr-code.js +19 -16
- package/dist/components/display/smart-card.d.ts +1 -1
- package/dist/components/display/status-legend.d.ts +1 -1
- package/dist/components/display/tag.cjs +1 -1
- package/dist/components/display/tag.d.ts +2 -1
- package/dist/components/display/tag.js +28 -22
- package/dist/components/display/tree-view.cjs +1 -1
- package/dist/components/display/tree-view.d.ts +9 -1
- package/dist/components/display/tree-view.js +104 -40
- package/dist/components/display/trend-card.cjs +1 -1
- package/dist/components/display/trend-card.js +27 -41
- package/dist/components/feedback/alert.cjs +1 -1
- package/dist/components/feedback/alert.d.ts +2 -1
- package/dist/components/feedback/alert.js +6 -6
- package/dist/components/feedback/loading-state.cjs +1 -1
- package/dist/components/feedback/loading-state.d.ts +3 -1
- package/dist/components/feedback/loading-state.js +23 -10
- package/dist/components/feedback/page-state.cjs +1 -1
- package/dist/components/feedback/page-state.d.ts +2 -1
- package/dist/components/feedback/page-state.js +7 -4
- package/dist/components/form/form-field-shell.cjs +1 -1
- package/dist/components/form/form-field-shell.d.ts +4 -2
- package/dist/components/form/form-field-shell.js +57 -41
- package/dist/components/form/form-input.cjs +1 -1
- package/dist/components/form/form-input.d.ts +3 -4
- package/dist/components/form/form-input.js +259 -257
- package/dist/components/form/form-select.cjs +1 -1
- package/dist/components/form/form-select.d.ts +2 -2
- package/dist/components/form/form-select.js +8 -6
- package/dist/components/form/form-switch.cjs +1 -1
- package/dist/components/form/form-switch.d.ts +1 -1
- package/dist/components/form/form-switch.js +58 -54
- package/dist/components/form/form-textarea.cjs +1 -1
- package/dist/components/form/form-textarea.d.ts +1 -1
- package/dist/components/form/form-textarea.js +29 -27
- package/dist/components/inputs/async-select.d.ts +3 -0
- package/dist/components/inputs/search-input.d.ts +3 -0
- package/dist/components/inputs/simple-select.cjs +1 -1
- package/dist/components/inputs/simple-select.d.ts +10 -32
- package/dist/components/inputs/simple-select.js +5 -101
- package/dist/components/layout/app-sidebar.cjs +1 -1
- package/dist/components/layout/app-sidebar.d.ts +1 -0
- package/dist/components/layout/app-sidebar.js +36 -36
- package/dist/components/layout/breadcrumbs.cjs +1 -1
- package/dist/components/layout/breadcrumbs.d.ts +2 -1
- package/dist/components/layout/breadcrumbs.js +7 -7
- package/dist/components/modern/calendar-scheduler.cjs +1 -1
- package/dist/components/modern/calendar-scheduler.d.ts +5 -1
- package/dist/components/modern/calendar-scheduler.js +47 -28
- package/dist/components/modern/dual-list-picker.cjs +1 -1
- package/dist/components/modern/dual-list-picker.d.ts +5 -1
- package/dist/components/modern/dual-list-picker.js +81 -23
- package/dist/components/modern/rich-text-editor.cjs +1 -1
- package/dist/components/modern/rich-text-editor.d.ts +3 -1
- package/dist/components/modern/rich-text-editor.js +12 -9
- package/dist/components/modern/tour.cjs +1 -1
- package/dist/components/modern/tour.d.ts +5 -1
- package/dist/components/modern/tour.js +57 -35
- package/dist/components/navigation/command-bar.cjs +1 -1
- package/dist/components/navigation/command-bar.d.ts +3 -1
- package/dist/components/navigation/command-bar.js +10 -7
- package/dist/components/navigation/demo.cjs +1 -1
- package/dist/components/navigation/demo.js +0 -1
- package/dist/components/navigation/nav-tabs.cjs +1 -1
- package/dist/components/navigation/nav-tabs.js +39 -27
- package/dist/components/navigation/page-tabs.cjs +1 -1
- package/dist/components/navigation/page-tabs.js +41 -30
- package/dist/components/navigation/pagination.cjs +1 -1
- package/dist/components/navigation/pagination.d.ts +7 -1
- package/dist/components/navigation/pagination.js +48 -25
- package/dist/components/notifications/notification-center.cjs +1 -1
- package/dist/components/notifications/notification-center.d.ts +3 -1
- package/dist/components/notifications/notification-center.js +56 -38
- package/dist/components/notifications/toast.cjs +1 -1
- package/dist/components/notifications/toast.d.ts +1 -0
- package/dist/components/notifications/toast.js +4 -0
- package/dist/components/overlay/alert-dialog.cjs +1 -1
- package/dist/components/overlay/alert-dialog.js +1 -1
- package/dist/components/overlay/confirm-dialog.cjs +1 -1
- package/dist/components/overlay/confirm-dialog.d.ts +4 -2
- package/dist/components/overlay/confirm-dialog.js +31 -22
- package/dist/components/overlay/drawer.cjs +1 -1
- package/dist/components/overlay/drawer.d.ts +3 -1
- package/dist/components/overlay/drawer.js +24 -16
- package/dist/components/ui/accordion/index.d.ts +4 -0
- package/dist/components/ui/badge/index.cjs +1 -1
- package/dist/components/ui/badge/index.d.ts +1 -1
- package/dist/components/ui/badge/index.js +2 -1
- package/dist/components/ui/button/index.cjs +1 -1
- package/dist/components/ui/button/index.d.ts +2 -1
- package/dist/components/ui/button/index.js +13 -10
- package/dist/components/ui/card/index.cjs +1 -1
- package/dist/components/ui/card/index.d.ts +13 -2
- package/dist/components/ui/card/index.js +74 -49
- package/dist/components/ui/dialog/index.cjs +1 -1
- package/dist/components/ui/dialog/index.js +2 -1
- package/dist/components/ui/hover-card.cjs +1 -1
- package/dist/components/ui/hover-card.d.ts +11 -3
- package/dist/components/ui/hover-card.js +29 -24
- package/dist/components/ui/input/index.cjs +1 -1
- package/dist/components/ui/input/index.d.ts +9 -1
- package/dist/components/ui/input/index.js +63 -30
- package/dist/components/ui/popover/index.cjs +1 -1
- package/dist/components/ui/popover/index.d.ts +2 -2
- package/dist/components/ui/popover/index.js +6 -5
- package/dist/components/ui/radio-group/index.cjs +1 -1
- package/dist/components/ui/radio-group/index.d.ts +5 -1
- package/dist/components/ui/radio-group/index.js +50 -16
- package/dist/components/ui/right-click-menu/index.cjs +1 -1
- package/dist/components/ui/right-click-menu/index.d.ts +5 -1
- package/dist/components/ui/right-click-menu/index.js +77 -23
- package/dist/components/ui/segmented-control/index.cjs +1 -1
- package/dist/components/ui/segmented-control/index.d.ts +2 -1
- package/dist/components/ui/segmented-control/index.js +23 -11
- package/dist/components/ui/select/index.cjs +1 -1
- package/dist/components/ui/select/index.d.ts +40 -1
- package/dist/components/ui/select/index.js +159 -48
- package/dist/components/ui/switch/index.cjs +1 -1
- package/dist/components/ui/switch/index.d.ts +18 -0
- package/dist/components/ui/switch/index.js +47 -17
- package/dist/components/ui/tabs/index.cjs +1 -1
- package/dist/components/ui/tabs/index.d.ts +14 -4
- package/dist/components/ui/tabs/index.js +11 -8
- package/dist/components/ui/textarea/index.cjs +1 -1
- package/dist/components/ui/textarea/index.d.ts +10 -2
- package/dist/components/ui/textarea/index.js +37 -8
- package/dist/components/ui/textarea.cjs +1 -0
- package/dist/components/ui/textarea.d.ts +1 -0
- package/dist/components/ui/textarea.js +2 -0
- package/dist/components/ui/tooltip/index.cjs +1 -1
- package/dist/components/ui/tooltip/index.d.ts +11 -3
- package/dist/components/ui/tooltip/index.js +41 -20
- package/dist/components/upload/file-upload.cjs +1 -1
- package/dist/components/upload/file-upload.d.ts +8 -1
- package/dist/components/upload/file-upload.js +132 -100
- package/dist/components/upload/image-upload.cjs +1 -1
- package/dist/components/upload/image-upload.d.ts +5 -1
- package/dist/components/upload/image-upload.js +34 -9
- package/dist/index.cjs +1 -1
- package/dist/index.js +31 -31
- package/dist/public-component-surface.cjs +1 -1
- package/dist/public-component-surface.js +15 -0
- package/dist/showcase/component-api-schema.cjs +1 -1
- package/dist/showcase/component-api-schema.js +187 -10
- package/dist/showcase/create-demo.cjs +5 -4
- package/dist/showcase/create-demo.js +2 -2
- package/dist/showcase/fallback.cjs +3 -3
- package/dist/showcase/fallback.js +221 -243
- package/dist/showcase/premium/alert/showcase.cjs +1 -1
- package/dist/showcase/premium/alert/showcase.js +1 -0
- package/dist/showcase/premium/app-sidebar/showcase.cjs +1 -1
- package/dist/showcase/premium/app-sidebar/showcase.js +1 -0
- package/dist/showcase/premium/badge/showcase.cjs +1 -1
- package/dist/showcase/premium/badge/showcase.js +7 -0
- package/dist/showcase/premium/badge/types.d.ts +1 -1
- package/dist/showcase/premium/breadcrumbs/showcase.cjs +1 -1
- package/dist/showcase/premium/breadcrumbs/showcase.js +12 -1
- package/dist/showcase/premium/button/mock.cjs +1 -4
- package/dist/showcase/premium/button/mock.js +1 -1
- package/dist/showcase/premium/button/showcase.cjs +1 -1
- package/dist/showcase/premium/button/showcase.js +2 -2
- package/dist/showcase/premium/card/showcase.cjs +1 -1
- package/dist/showcase/premium/card/showcase.js +96 -47
- package/dist/showcase/premium/carousel/showcase.cjs +1 -1
- package/dist/showcase/premium/carousel/showcase.js +76 -49
- package/dist/showcase/premium/command-bar/showcase.cjs +1 -1
- package/dist/showcase/premium/command-bar/showcase.js +2 -0
- package/dist/showcase/premium/data-table/mock.cjs +12 -11
- package/dist/showcase/premium/data-table/mock.js +1 -1
- package/dist/showcase/premium/data-table/showcase.cjs +1 -1
- package/dist/showcase/premium/data-table/showcase.js +1 -1
- package/dist/showcase/premium/data-table-parts/showcase.cjs +1 -1
- package/dist/showcase/premium/data-table-parts/showcase.js +3 -1
- package/dist/showcase/premium/file-upload/showcase.cjs +1 -1
- package/dist/showcase/premium/file-upload/showcase.js +25 -4
- package/dist/showcase/premium/image-upload/showcase.cjs +1 -1
- package/dist/showcase/premium/image-upload/showcase.js +4 -1
- package/dist/showcase/premium/index.cjs +1 -1
- package/dist/showcase/premium/index.js +396 -402
- package/dist/showcase/premium/loading-state/showcase.cjs +1 -1
- package/dist/showcase/premium/loading-state/showcase.js +3 -1
- package/dist/showcase/premium/metric-grid/showcase.cjs +1 -1
- package/dist/showcase/premium/metric-grid/showcase.js +96 -28
- package/dist/showcase/premium/notification-center/showcase.cjs +1 -1
- package/dist/showcase/premium/notification-center/showcase.js +7 -3
- package/dist/showcase/premium/page-state/showcase.cjs +1 -1
- package/dist/showcase/premium/page-state/showcase.js +5 -1
- package/dist/showcase/premium/pagination/showcase.cjs +1 -1
- package/dist/showcase/premium/pagination/showcase.js +15 -2
- package/dist/showcase/premium/popover/showcase.cjs +1 -1
- package/dist/showcase/premium/popover/showcase.js +85 -50
- package/dist/showcase/premium/radio-group/showcase.cjs +1 -1
- package/dist/showcase/premium/radio-group/showcase.js +27 -4
- package/dist/showcase/premium/right-click-menu/showcase.cjs +1 -1
- package/dist/showcase/premium/right-click-menu/showcase.js +56 -43
- package/dist/showcase/premium/segmented-control/showcase.cjs +1 -1
- package/dist/showcase/premium/segmented-control/showcase.js +1 -0
- package/dist/showcase/premium/select/data.cjs +1 -1
- package/dist/showcase/premium/select/data.js +69 -34
- package/dist/showcase/premium/select/mock.cjs +20 -8
- package/dist/showcase/premium/select/mock.js +3 -2
- package/dist/showcase/premium/select/showcase.cjs +1 -1
- package/dist/showcase/premium/select/showcase.js +101 -86
- package/dist/showcase/premium/select/types.d.ts +3 -0
- package/dist/showcase/premium/statistic/showcase.cjs +1 -1
- package/dist/showcase/premium/statistic/showcase.js +57 -25
- package/dist/showcase/premium/switch/showcase.cjs +1 -1
- package/dist/showcase/premium/switch/showcase.js +25 -14
- package/dist/showcase/premium/tabs/showcase.cjs +1 -1
- package/dist/showcase/premium/tabs/showcase.js +171 -48
- package/dist/showcase/premium/textarea/mock.cjs +12 -4
- package/dist/showcase/premium/textarea/mock.js +1 -1
- package/dist/showcase/premium/textarea/showcase.cjs +1 -1
- package/dist/showcase/premium/textarea/showcase.js +8 -3
- package/dist/showcase/premium/toast/showcase.cjs +1 -1
- package/dist/showcase/premium/toast/showcase.js +32 -6
- package/dist/showcase/premium/types.d.ts +1 -1
- package/dist/showcase/registry-quality.cjs +1 -1
- package/dist/showcase/registry-quality.js +1 -0
- package/dist/showcase/registry-specific.cjs +1 -1
- package/dist/showcase/registry-specific.js +78 -74
- package/dist/showcase/render-registry-preview.cjs +1 -1
- package/dist/showcase/render-registry-preview.js +90 -108
- package/dist/showcase/site-data.cjs +1 -1
- package/dist/showcase/site-data.js +60 -21
- package/dist/showcase/tembro-registry.json.cjs +1 -1
- package/dist/showcase/tembro-registry.json.js +34 -20
- package/dist/showcase/types.d.ts +1 -1
- package/package.json +1 -1
- package/packages/cli/dist/index.cjs +31 -31
- package/packages/cli/vendor/src/components/calendar/calendar.tsx +59 -50
- package/packages/cli/vendor/src/components/calendar/date-range-picker.tsx +7 -4
- package/packages/cli/vendor/src/components/charts/charts.tsx +109 -66
- package/packages/cli/vendor/src/components/charts/progress-ring.tsx +37 -26
- package/packages/cli/vendor/src/components/data-table/data-table-column-visibility-menu.tsx +41 -22
- package/packages/cli/vendor/src/components/data-table/data-table-pagination.tsx +7 -7
- package/packages/cli/vendor/src/components/data-table/data-table-toolbar.tsx +8 -6
- package/packages/cli/vendor/src/components/data-table/data-table.tsx +21 -20
- package/packages/cli/vendor/src/components/display/carousel.tsx +102 -9
- package/packages/cli/vendor/src/components/display/code-block.tsx +22 -2
- package/packages/cli/vendor/src/components/display/delta-badge.tsx +11 -11
- package/packages/cli/vendor/src/components/display/kanban.tsx +103 -57
- package/packages/cli/vendor/src/components/display/metric-grid.tsx +16 -13
- package/packages/cli/vendor/src/components/display/qr-code.tsx +17 -15
- package/packages/cli/vendor/src/components/display/smart-card.tsx +1 -1
- package/packages/cli/vendor/src/components/display/status-legend.tsx +1 -1
- package/packages/cli/vendor/src/components/display/tag.tsx +39 -21
- package/packages/cli/vendor/src/components/display/tree-view.tsx +221 -84
- package/packages/cli/vendor/src/components/display/trend-card.tsx +6 -40
- package/packages/cli/vendor/src/components/feedback/alert.tsx +3 -1
- package/packages/cli/vendor/src/components/feedback/loading-state.tsx +33 -17
- package/packages/cli/vendor/src/components/feedback/page-state.tsx +8 -7
- package/packages/cli/vendor/src/components/form/form-field-shell.tsx +37 -8
- package/packages/cli/vendor/src/components/form/form-input.tsx +11 -12
- package/packages/cli/vendor/src/components/form/form-select.tsx +6 -4
- package/packages/cli/vendor/src/components/form/form-switch.tsx +9 -3
- package/packages/cli/vendor/src/components/form/form-textarea.tsx +6 -2
- package/packages/cli/vendor/src/components/inputs/async-select.tsx +11 -8
- package/packages/cli/vendor/src/components/inputs/search-input.tsx +5 -2
- package/packages/cli/vendor/src/components/inputs/simple-select.tsx +20 -190
- package/packages/cli/vendor/src/components/layout/app-sidebar.tsx +3 -1
- package/packages/cli/vendor/src/components/layout/breadcrumbs.tsx +3 -1
- package/packages/cli/vendor/src/components/modern/calendar-scheduler.tsx +28 -13
- package/packages/cli/vendor/src/components/modern/dual-list-picker.tsx +103 -35
- package/packages/cli/vendor/src/components/modern/rich-text-editor.tsx +25 -22
- package/packages/cli/vendor/src/components/modern/tour.tsx +47 -29
- package/packages/cli/vendor/src/components/navigation/command-bar.tsx +6 -0
- package/packages/cli/vendor/src/components/navigation/demo.tsx +0 -1
- package/packages/cli/vendor/src/components/navigation/nav-tabs.tsx +38 -29
- package/packages/cli/vendor/src/components/navigation/page-tabs.tsx +35 -23
- package/packages/cli/vendor/src/components/navigation/pagination.tsx +65 -31
- package/packages/cli/vendor/src/components/notifications/notification-center.tsx +64 -39
- package/packages/cli/vendor/src/components/notifications/toast.tsx +23 -21
- package/packages/cli/vendor/src/components/overlay/alert-dialog.tsx +1 -1
- package/packages/cli/vendor/src/components/overlay/confirm-dialog.tsx +45 -22
- package/packages/cli/vendor/src/components/overlay/drawer.tsx +18 -5
- package/packages/cli/vendor/src/components/ui/accordion/index.tsx +4 -0
- package/packages/cli/vendor/src/components/ui/badge/index.tsx +2 -1
- package/packages/cli/vendor/src/components/ui/button/index.tsx +11 -5
- package/packages/cli/vendor/src/components/ui/card/index.tsx +95 -25
- package/packages/cli/vendor/src/components/ui/dialog/index.tsx +2 -1
- package/packages/cli/vendor/src/components/ui/hover-card.tsx +54 -28
- package/packages/cli/vendor/src/components/ui/input/index.tsx +98 -0
- package/packages/cli/vendor/src/components/ui/popover/index.tsx +10 -8
- package/packages/cli/vendor/src/components/ui/radio-group/index.tsx +55 -6
- package/packages/cli/vendor/src/components/ui/right-click-menu/index.tsx +120 -9
- package/packages/cli/vendor/src/components/ui/segmented-control/index.tsx +29 -3
- package/packages/cli/vendor/src/components/ui/select/index.tsx +260 -34
- package/packages/cli/vendor/src/components/ui/switch/index.tsx +71 -6
- package/packages/cli/vendor/src/components/ui/tabs/index.tsx +22 -6
- package/packages/cli/vendor/src/components/ui/textarea/index.tsx +105 -15
- package/packages/cli/vendor/src/components/ui/textarea.tsx +2 -0
- package/packages/cli/vendor/src/components/ui/tooltip/index.tsx +67 -22
- package/packages/cli/vendor/src/components/upload/file-upload.tsx +120 -57
- package/packages/cli/vendor/src/components/upload/image-upload.tsx +71 -24
- package/packages/cli/vendor/src/public-component-surface.ts +3 -0
- package/packages/cli/vendor/src/showcase/component-api-schema.ts +79 -41
- package/packages/cli/vendor/src/showcase/create-demo.tsx +16 -15
- package/packages/cli/vendor/src/showcase/fallback.tsx +4 -19
- package/packages/cli/vendor/src/showcase/premium/alert/showcase.tsx +1 -0
- package/packages/cli/vendor/src/showcase/premium/app-sidebar/showcase.tsx +1 -0
- package/packages/cli/vendor/src/showcase/premium/badge/showcase.tsx +4 -2
- package/packages/cli/vendor/src/showcase/premium/badge/types.ts +1 -1
- package/packages/cli/vendor/src/showcase/premium/breadcrumbs/showcase.tsx +3 -1
- package/packages/cli/vendor/src/showcase/premium/button/mock.ts +2 -5
- package/packages/cli/vendor/src/showcase/premium/button/showcase.tsx +2 -2
- package/packages/cli/vendor/src/showcase/premium/card/showcase.tsx +26 -1
- package/packages/cli/vendor/src/showcase/premium/carousel/showcase.tsx +19 -3
- package/packages/cli/vendor/src/showcase/premium/command-bar/showcase.tsx +1 -1
- package/packages/cli/vendor/src/showcase/premium/data-table/mock.ts +26 -25
- package/packages/cli/vendor/src/showcase/premium/data-table/showcase.tsx +3 -3
- package/packages/cli/vendor/src/showcase/premium/data-table-parts/showcase.tsx +3 -3
- package/packages/cli/vendor/src/showcase/premium/file-upload/showcase.tsx +21 -1
- package/packages/cli/vendor/src/showcase/premium/image-upload/showcase.tsx +4 -1
- package/packages/cli/vendor/src/showcase/premium/index.ts +0 -2
- package/packages/cli/vendor/src/showcase/premium/loading-state/showcase.tsx +1 -1
- package/packages/cli/vendor/src/showcase/premium/metric-grid/showcase.tsx +36 -4
- package/packages/cli/vendor/src/showcase/premium/notification-center/showcase.tsx +4 -3
- package/packages/cli/vendor/src/showcase/premium/page-state/showcase.tsx +1 -0
- package/packages/cli/vendor/src/showcase/premium/pagination/showcase.tsx +13 -1
- package/packages/cli/vendor/src/showcase/premium/popover/showcase.tsx +27 -11
- package/packages/cli/vendor/src/showcase/premium/radio-group/showcase.tsx +13 -1
- package/packages/cli/vendor/src/showcase/premium/right-click-menu/showcase.tsx +8 -5
- package/packages/cli/vendor/src/showcase/premium/segmented-control/showcase.tsx +1 -0
- package/packages/cli/vendor/src/showcase/premium/select/data.ts +12 -3
- package/packages/cli/vendor/src/showcase/premium/select/mock.ts +4 -4
- package/packages/cli/vendor/src/showcase/premium/select/showcase.tsx +35 -22
- package/packages/cli/vendor/src/showcase/premium/select/types.ts +3 -0
- package/packages/cli/vendor/src/showcase/premium/statistic/showcase.tsx +10 -1
- package/packages/cli/vendor/src/showcase/premium/switch/showcase.tsx +15 -6
- package/packages/cli/vendor/src/showcase/premium/tabs/showcase.tsx +48 -1
- package/packages/cli/vendor/src/showcase/premium/textarea/mock.ts +12 -4
- package/packages/cli/vendor/src/showcase/premium/textarea/showcase.tsx +5 -0
- package/packages/cli/vendor/src/showcase/premium/toast/showcase.tsx +17 -1
- package/packages/cli/vendor/src/showcase/premium/types.ts +1 -1
- package/packages/cli/vendor/src/showcase/registry-quality.ts +3 -2
- package/packages/cli/vendor/src/showcase/registry-specific.tsx +7 -8
- package/packages/cli/vendor/src/showcase/render-registry-preview.tsx +5 -21
- package/packages/cli/vendor/src/showcase/site-data.tsx +21 -15
- package/packages/cli/vendor/src/showcase/tembro-registry.json +42 -20
- package/packages/cli/vendor/src/showcase/types.ts +1 -1
- package/registry.json +18 -6
|
@@ -11,9 +11,10 @@ export type PageStateProps = Omit<React.ComponentProps<"div">, "title"> & {
|
|
|
11
11
|
title?: React.ReactNode
|
|
12
12
|
description?: React.ReactNode
|
|
13
13
|
icon?: React.ReactNode
|
|
14
|
-
action?: React.ReactNode
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
action?: React.ReactNode
|
|
15
|
+
extra?: React.ReactNode
|
|
16
|
+
compact?: boolean
|
|
17
|
+
}
|
|
17
18
|
|
|
18
19
|
function defaultPageStateIcon(tone: PageStateTone) {
|
|
19
20
|
switch (tone) {
|
|
@@ -30,7 +31,7 @@ function defaultPageStateIcon(tone: PageStateTone) {
|
|
|
30
31
|
}
|
|
31
32
|
}
|
|
32
33
|
|
|
33
|
-
function PageState({ tone = "empty", title, description, icon, action, compact = false, className, ...props }: PageStateProps) {
|
|
34
|
+
function PageState({ tone = "empty", title, description, icon, action, extra, compact = false, className, ...props }: PageStateProps) {
|
|
34
35
|
return (
|
|
35
36
|
<div
|
|
36
37
|
data-slot="page-state"
|
|
@@ -49,10 +50,10 @@ function PageState({ tone = "empty", title, description, icon, action, compact =
|
|
|
49
50
|
{title && <div className="text-base font-semibold tracking-tight text-foreground">{title}</div>}
|
|
50
51
|
{description && <div className="max-w-md text-sm leading-6 text-muted-foreground">{description}</div>}
|
|
51
52
|
</div>
|
|
52
|
-
{action
|
|
53
|
+
{(action || extra) ? <div className="flex flex-wrap items-center justify-center gap-2">{action}{extra}</div> : null}
|
|
53
54
|
</div>
|
|
54
|
-
)
|
|
55
|
-
}
|
|
55
|
+
)
|
|
56
|
+
}
|
|
56
57
|
|
|
57
58
|
export type InlineStateProps = Omit<PageStateProps, "compact"> & {
|
|
58
59
|
retryLabel?: React.ReactNode
|
|
@@ -10,6 +10,8 @@ export type FormFieldShellProps = React.ComponentProps<"div"> & {
|
|
|
10
10
|
label?: React.ReactNode
|
|
11
11
|
description?: React.ReactNode
|
|
12
12
|
error?: React.ReactNode
|
|
13
|
+
success?: React.ReactNode
|
|
14
|
+
loading?: boolean
|
|
13
15
|
required?: boolean
|
|
14
16
|
htmlFor?: string
|
|
15
17
|
labelId?: string
|
|
@@ -34,6 +36,8 @@ export type FormFieldShellControlProps = Pick<
|
|
|
34
36
|
FormFieldShellProps,
|
|
35
37
|
| "label"
|
|
36
38
|
| "description"
|
|
39
|
+
| "success"
|
|
40
|
+
| "loading"
|
|
37
41
|
| "required"
|
|
38
42
|
| "className"
|
|
39
43
|
| "htmlFor"
|
|
@@ -89,6 +93,8 @@ function FormFieldShell({
|
|
|
89
93
|
label,
|
|
90
94
|
description,
|
|
91
95
|
error,
|
|
96
|
+
success,
|
|
97
|
+
loading = false,
|
|
92
98
|
required = false,
|
|
93
99
|
htmlFor,
|
|
94
100
|
labelId,
|
|
@@ -181,13 +187,30 @@ function FormFieldShell({
|
|
|
181
187
|
{showErrorIcon && <span className="mt-1 shrink-0">{resolvedErrorIcon}</span>}
|
|
182
188
|
<span className="min-w-0">{error}</span>
|
|
183
189
|
</p>
|
|
184
|
-
) : null
|
|
185
|
-
|
|
186
|
-
|
|
190
|
+
) : null
|
|
191
|
+
|
|
192
|
+
const successNode = success && !error ? (
|
|
193
|
+
<p
|
|
194
|
+
data-slot="form-field-success"
|
|
195
|
+
className="rounded-[min(var(--radius-xl),16px)] border border-emerald-500/18 bg-emerald-500/8 px-3 py-2 text-sm font-medium leading-6 text-emerald-700 dark:text-emerald-300"
|
|
196
|
+
>
|
|
197
|
+
{success}
|
|
198
|
+
</p>
|
|
199
|
+
) : null
|
|
200
|
+
|
|
201
|
+
const loadingNode = loading ? (
|
|
202
|
+
<p data-slot="form-field-loading" className="text-sm leading-6 text-muted-foreground">
|
|
203
|
+
Loading...
|
|
204
|
+
</p>
|
|
205
|
+
) : null
|
|
206
|
+
|
|
207
|
+
return (
|
|
187
208
|
<div
|
|
188
209
|
data-slot="form-field-shell"
|
|
189
210
|
data-layout={layout}
|
|
190
211
|
data-invalid={Boolean(error) || undefined}
|
|
212
|
+
data-success={Boolean(success && !error) || undefined}
|
|
213
|
+
data-loading={loading || undefined}
|
|
191
214
|
data-disabled={disabled || undefined}
|
|
192
215
|
data-readonly={readOnly || undefined}
|
|
193
216
|
aria-disabled={disabled || undefined}
|
|
@@ -202,7 +225,9 @@ function FormFieldShell({
|
|
|
202
225
|
</div>
|
|
203
226
|
<div className="grid min-w-0 gap-2">
|
|
204
227
|
{content}
|
|
228
|
+
{loadingNode}
|
|
205
229
|
{hasDescriptionBottom && descriptionNode}
|
|
230
|
+
{successNode}
|
|
206
231
|
{errorNode}
|
|
207
232
|
</div>
|
|
208
233
|
</>
|
|
@@ -212,17 +237,21 @@ function FormFieldShell({
|
|
|
212
237
|
<div className="grid min-w-0 flex-1 gap-2">
|
|
213
238
|
{hasDescriptionTop && descriptionNode}
|
|
214
239
|
{content}
|
|
240
|
+
{loadingNode}
|
|
215
241
|
{hasDescriptionBottom && descriptionNode}
|
|
216
|
-
{
|
|
242
|
+
{successNode}
|
|
243
|
+
{errorNode}
|
|
217
244
|
</div>
|
|
218
245
|
</>
|
|
219
246
|
) : (
|
|
220
247
|
<>
|
|
221
248
|
{header}
|
|
222
|
-
{hasDescriptionTop && descriptionNode}
|
|
223
|
-
{content}
|
|
224
|
-
{
|
|
225
|
-
{
|
|
249
|
+
{hasDescriptionTop && descriptionNode}
|
|
250
|
+
{content}
|
|
251
|
+
{loadingNode}
|
|
252
|
+
{hasDescriptionBottom && descriptionNode}
|
|
253
|
+
{successNode}
|
|
254
|
+
{errorNode}
|
|
226
255
|
</>
|
|
227
256
|
)}
|
|
228
257
|
</div>
|
|
@@ -8,7 +8,7 @@ import {
|
|
|
8
8
|
type DateRangeValue,
|
|
9
9
|
} from "@/components/inputs/date-range-input"
|
|
10
10
|
import { DateInput, type DateInputProps } from "@/components/inputs/date-input"
|
|
11
|
-
import { Input, type InputTextProps } from "@/components/ui/input"
|
|
11
|
+
import { Input, type InputClearableProps, type InputSearchProps, type InputTextProps } from "@/components/ui/input"
|
|
12
12
|
import { MaskedInput, type MaskedInputProps } from "@/components/inputs/masked-input"
|
|
13
13
|
import { MoneyInput, type MoneyInputProps } from "@/components/inputs/money-input"
|
|
14
14
|
import { NumberInput, type NumberInputProps } from "@/components/inputs/number-input"
|
|
@@ -18,11 +18,6 @@ import {
|
|
|
18
18
|
type PhoneInputProps,
|
|
19
19
|
} from "@/components/inputs/phone-input"
|
|
20
20
|
import { QuantityInput, type QuantityInputProps } from "@/components/inputs/quantity-input"
|
|
21
|
-
import { SearchInput, type SearchInputProps } from "@/components/inputs/search-input"
|
|
22
|
-
import {
|
|
23
|
-
ClearableInput,
|
|
24
|
-
type ClearableInputProps,
|
|
25
|
-
} from "@/components/inputs/clearable-input"
|
|
26
21
|
import {
|
|
27
22
|
FormFieldShell,
|
|
28
23
|
type FormFieldShellControlProps,
|
|
@@ -76,7 +71,7 @@ export type FormTextInputProps<
|
|
|
76
71
|
export type FormInputSearchVariantProps<
|
|
77
72
|
TFieldValues extends FieldValues = FieldValues,
|
|
78
73
|
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
|
|
79
|
-
> = Omit<
|
|
74
|
+
> = Omit<InputSearchProps, "name" | "value" | "defaultValue" | "onValueChange" | "kind"> &
|
|
80
75
|
FormControlledFieldProps<TFieldValues, TName> & {
|
|
81
76
|
kind: "search"
|
|
82
77
|
onValueChange?: (value: string) => void
|
|
@@ -134,7 +129,7 @@ export type FormInputDateRangeVariantProps<
|
|
|
134
129
|
export type FormInputClearableVariantProps<
|
|
135
130
|
TFieldValues extends FieldValues = FieldValues,
|
|
136
131
|
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
|
|
137
|
-
> = Omit<
|
|
132
|
+
> = Omit<InputClearableProps, "name" | "value" | "defaultValue" | "onValueChange" | "kind"> &
|
|
138
133
|
FormControlledFieldProps<TFieldValues, TName> & {
|
|
139
134
|
kind: "clearable"
|
|
140
135
|
emptyValue?: unknown
|
|
@@ -197,6 +192,8 @@ function buildShellProps<
|
|
|
197
192
|
return {
|
|
198
193
|
label: props.label,
|
|
199
194
|
description: props.description,
|
|
195
|
+
success: props.success,
|
|
196
|
+
loading: props.loading,
|
|
200
197
|
required: props.required,
|
|
201
198
|
className: props.className,
|
|
202
199
|
htmlFor: props.id ?? props.name,
|
|
@@ -275,8 +272,9 @@ function FormInput<
|
|
|
275
272
|
error={error}
|
|
276
273
|
htmlFor={id ?? inputId}
|
|
277
274
|
>
|
|
278
|
-
<
|
|
279
|
-
{...searchProps}
|
|
275
|
+
<Input
|
|
276
|
+
{...(searchProps as Omit<InputSearchProps, "kind">)}
|
|
277
|
+
type="search"
|
|
280
278
|
id={id ?? inputId}
|
|
281
279
|
name={field.name}
|
|
282
280
|
ref={field.ref}
|
|
@@ -605,8 +603,9 @@ function FormInput<
|
|
|
605
603
|
error={error}
|
|
606
604
|
htmlFor={id ?? inputId}
|
|
607
605
|
>
|
|
608
|
-
<
|
|
609
|
-
{...clearableProps}
|
|
606
|
+
<Input
|
|
607
|
+
{...(clearableProps as Omit<InputClearableProps, "kind">)}
|
|
608
|
+
clearable
|
|
610
609
|
id={id ?? inputId}
|
|
611
610
|
name={field.name}
|
|
612
611
|
ref={field.ref}
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
type AsyncSelectOption,
|
|
7
7
|
type AsyncSelectProps,
|
|
8
8
|
} from "@/components/inputs/async-select"
|
|
9
|
-
import {
|
|
9
|
+
import { Select, type SelectProps } from "@/components/ui/select"
|
|
10
10
|
import {
|
|
11
11
|
FormFieldShell,
|
|
12
12
|
type FormFieldShellControlProps,
|
|
@@ -27,7 +27,7 @@ type FormSelectBaseProps<
|
|
|
27
27
|
export type FormSimpleSelectProps<
|
|
28
28
|
TFieldValues extends FieldValues = FieldValues,
|
|
29
29
|
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
|
|
30
|
-
> = Omit<
|
|
30
|
+
> = Omit<SelectProps, "children" | "value" | "onValueChange" | "disabled"> &
|
|
31
31
|
FormSelectBaseProps<TFieldValues, TName> & {
|
|
32
32
|
kind?: "simple"
|
|
33
33
|
emptyValue?: unknown
|
|
@@ -67,6 +67,8 @@ function buildShellProps<
|
|
|
67
67
|
return {
|
|
68
68
|
label: props.label,
|
|
69
69
|
description: props.description,
|
|
70
|
+
success: props.success,
|
|
71
|
+
loading: props.loading,
|
|
70
72
|
required: props.required,
|
|
71
73
|
className: props.className,
|
|
72
74
|
htmlFor: props.name,
|
|
@@ -196,9 +198,9 @@ function FormSelect<
|
|
|
196
198
|
errorId={resolvedIds.errorId}
|
|
197
199
|
error={error}
|
|
198
200
|
>
|
|
199
|
-
<
|
|
201
|
+
<Select
|
|
200
202
|
{...simpleProps}
|
|
201
|
-
value={field.value == null ?
|
|
203
|
+
value={field.value == null ? undefined : String(field.value)}
|
|
202
204
|
disabled={disabled || readOnly}
|
|
203
205
|
aria-describedby={resolvedIds.describedBy}
|
|
204
206
|
aria-errormessage={error ? resolvedIds.errorId : undefined}
|
|
@@ -29,9 +29,11 @@ function FormSwitch<
|
|
|
29
29
|
>({
|
|
30
30
|
control,
|
|
31
31
|
name,
|
|
32
|
-
label,
|
|
33
|
-
description,
|
|
34
|
-
|
|
32
|
+
label,
|
|
33
|
+
description,
|
|
34
|
+
success,
|
|
35
|
+
loading,
|
|
36
|
+
required,
|
|
35
37
|
className,
|
|
36
38
|
layout,
|
|
37
39
|
descriptionPosition,
|
|
@@ -96,6 +98,8 @@ function FormSwitch<
|
|
|
96
98
|
<FormFieldShell
|
|
97
99
|
label={label}
|
|
98
100
|
description={description}
|
|
101
|
+
success={success}
|
|
102
|
+
loading={loading}
|
|
99
103
|
required={required}
|
|
100
104
|
error={error}
|
|
101
105
|
htmlFor={switchId}
|
|
@@ -122,6 +126,8 @@ function FormSwitch<
|
|
|
122
126
|
) : (
|
|
123
127
|
<FormFieldShell
|
|
124
128
|
error={error}
|
|
129
|
+
success={success}
|
|
130
|
+
loading={loading}
|
|
125
131
|
className={className}
|
|
126
132
|
descriptionId={resolvedIds.descriptionId}
|
|
127
133
|
errorId={resolvedIds.errorId}
|
|
@@ -29,8 +29,10 @@ function FormTextarea<
|
|
|
29
29
|
name,
|
|
30
30
|
rules,
|
|
31
31
|
label,
|
|
32
|
-
description,
|
|
33
|
-
|
|
32
|
+
description,
|
|
33
|
+
success,
|
|
34
|
+
loading,
|
|
35
|
+
required,
|
|
34
36
|
className,
|
|
35
37
|
layout,
|
|
36
38
|
descriptionPosition,
|
|
@@ -68,6 +70,8 @@ function FormTextarea<
|
|
|
68
70
|
<FormFieldShell
|
|
69
71
|
label={label}
|
|
70
72
|
description={description}
|
|
73
|
+
success={success}
|
|
74
|
+
loading={loading}
|
|
71
75
|
required={required}
|
|
72
76
|
error={error}
|
|
73
77
|
htmlFor={textareaId}
|
|
@@ -109,11 +109,11 @@ export type AsyncSelectMultiModeProps<
|
|
|
109
109
|
isMulti: true
|
|
110
110
|
}
|
|
111
111
|
|
|
112
|
-
export type AsyncMultiSelectProps<
|
|
113
|
-
TValue extends string = string,
|
|
114
|
-
TData = unknown,
|
|
115
|
-
TOption extends AsyncSelectOption<TValue, TData> = AsyncSelectOption<TValue, TData>,
|
|
116
|
-
> = Omit<React.ComponentProps<"div">, "onChange"> & {
|
|
112
|
+
export type AsyncMultiSelectProps<
|
|
113
|
+
TValue extends string = string,
|
|
114
|
+
TData = unknown,
|
|
115
|
+
TOption extends AsyncSelectOption<TValue, TData> = AsyncSelectOption<TValue, TData>,
|
|
116
|
+
> = Omit<React.ComponentProps<"div">, "onChange"> & {
|
|
117
117
|
value?: TValue[]
|
|
118
118
|
selectedOptions?: TOption[]
|
|
119
119
|
onValueChange?: (value: TValue[], options: TOption[]) => void
|
|
@@ -148,8 +148,8 @@ export type AsyncMultiSelectProps<
|
|
|
148
148
|
searchClassName?: string
|
|
149
149
|
optionClassName?: string
|
|
150
150
|
tagClassName?: string
|
|
151
|
-
invalid?: boolean
|
|
152
|
-
}
|
|
151
|
+
invalid?: boolean
|
|
152
|
+
}
|
|
153
153
|
|
|
154
154
|
type AsyncSelectCacheEntry<
|
|
155
155
|
TValue extends string,
|
|
@@ -778,7 +778,10 @@ function AsyncSelect<
|
|
|
778
778
|
)
|
|
779
779
|
}
|
|
780
780
|
|
|
781
|
-
|
|
781
|
+
/**
|
|
782
|
+
* @deprecated Prefer `AsyncSelect` with `isMulti` for new usage.
|
|
783
|
+
*/
|
|
784
|
+
function AsyncMultiSelect<
|
|
782
785
|
TValue extends string = string,
|
|
783
786
|
TData = unknown,
|
|
784
787
|
TOption extends AsyncSelectOption<TValue, TData> = AsyncSelectOption<TValue, TData>,
|
|
@@ -14,8 +14,11 @@ export type SearchInputProps = Omit<ClearableInputProps, "leadingIcon" | "type"
|
|
|
14
14
|
onValueChange?: (value: string) => void
|
|
15
15
|
onDebouncedValueChange?: (value: string) => void
|
|
16
16
|
}
|
|
17
|
-
|
|
18
|
-
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* @deprecated Prefer `Input` with `type="search"` and search-related props for new usage.
|
|
20
|
+
*/
|
|
21
|
+
const SearchInput = React.forwardRef<HTMLInputElement, SearchInputProps>(
|
|
19
22
|
(
|
|
20
23
|
{
|
|
21
24
|
searchIcon,
|
|
@@ -1,193 +1,23 @@
|
|
|
1
|
-
import * as React from "react"
|
|
2
|
-
import { CheckIcon, LoaderCircleIcon, SearchIcon, XIcon } from "lucide-react"
|
|
3
|
-
|
|
4
1
|
import {
|
|
5
2
|
Select,
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
SelectTrigger,
|
|
9
|
-
SelectValue,
|
|
3
|
+
type SelectOption,
|
|
4
|
+
type SelectProps,
|
|
10
5
|
} from "@/components/ui/select"
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
searchPlaceholder?: string
|
|
30
|
-
emptyLabel?: React.ReactNode
|
|
31
|
-
clearLabel?: string
|
|
32
|
-
size?: "sm" | "default" | "lg"
|
|
33
|
-
clearable?: boolean
|
|
34
|
-
searchable?: boolean
|
|
35
|
-
loading?: boolean
|
|
36
|
-
loadingLabel?: React.ReactNode
|
|
37
|
-
disabled?: boolean
|
|
38
|
-
showSelectedDescription?: boolean
|
|
39
|
-
triggerClassName?: string
|
|
40
|
-
contentClassName?: string
|
|
41
|
-
itemClassName?: string
|
|
42
|
-
searchClassName?: string
|
|
43
|
-
renderOption?: (option: SimpleSelectOption, state: { selected: boolean }) => React.ReactNode
|
|
44
|
-
invalid?: boolean
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
function optionMatchesSearch(option: SimpleSelectOption, search: string) {
|
|
48
|
-
const normalized = search.trim().toLowerCase()
|
|
49
|
-
if (!normalized) return true
|
|
50
|
-
|
|
51
|
-
const labelText = typeof option.label === "string" || typeof option.label === "number" ? String(option.label) : option.value
|
|
52
|
-
const haystack = [labelText, option.value, ...(option.keywords ?? [])].join(" ").toLowerCase()
|
|
53
|
-
return haystack.includes(normalized)
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
function SimpleSelect({
|
|
57
|
-
value,
|
|
58
|
-
onValueChange,
|
|
59
|
-
options,
|
|
60
|
-
placeholder = "Select",
|
|
61
|
-
searchPlaceholder = "Search options...",
|
|
62
|
-
emptyLabel = "No options found",
|
|
63
|
-
clearLabel = "Clear selection",
|
|
64
|
-
size = "default",
|
|
65
|
-
clearable = false,
|
|
66
|
-
searchable = false,
|
|
67
|
-
loading = false,
|
|
68
|
-
loadingLabel = "Loading options...",
|
|
69
|
-
disabled = false,
|
|
70
|
-
showSelectedDescription = true,
|
|
71
|
-
triggerClassName,
|
|
72
|
-
contentClassName,
|
|
73
|
-
itemClassName,
|
|
74
|
-
searchClassName,
|
|
75
|
-
renderOption,
|
|
76
|
-
invalid,
|
|
77
|
-
onOpenChange,
|
|
78
|
-
...props
|
|
79
|
-
}: SimpleSelectProps) {
|
|
80
|
-
const [search, setSearch] = React.useState("")
|
|
81
|
-
const selectedOption = options.find((option) => option.value === value)
|
|
82
|
-
const filteredOptions = options.filter((option) => optionMatchesSearch(option, search))
|
|
83
|
-
|
|
84
|
-
return (
|
|
85
|
-
<Select
|
|
86
|
-
value={value}
|
|
87
|
-
onValueChange={(val) => onValueChange?.(val as string)}
|
|
88
|
-
disabled={disabled || loading}
|
|
89
|
-
onOpenChange={(open, eventDetails) => {
|
|
90
|
-
if (!open) setSearch("")
|
|
91
|
-
onOpenChange?.(open, eventDetails)
|
|
92
|
-
}}
|
|
93
|
-
{...props}
|
|
94
|
-
>
|
|
95
|
-
<SelectTrigger
|
|
96
|
-
size={size}
|
|
97
|
-
aria-invalid={invalid || undefined}
|
|
98
|
-
className={cn(
|
|
99
|
-
"w-full",
|
|
100
|
-
triggerClassName
|
|
101
|
-
)}
|
|
102
|
-
>
|
|
103
|
-
<SelectValue placeholder={placeholder}>
|
|
104
|
-
{selectedOption ? (
|
|
105
|
-
<span className="flex min-w-0 flex-col items-start">
|
|
106
|
-
<span className="truncate">{selectedOption.label}</span>
|
|
107
|
-
{showSelectedDescription && selectedOption.description ? (
|
|
108
|
-
<span className="truncate text-[11px] font-medium text-muted-foreground">{selectedOption.description}</span>
|
|
109
|
-
) : null}
|
|
110
|
-
</span>
|
|
111
|
-
) : null}
|
|
112
|
-
</SelectValue>
|
|
113
|
-
{loading ? <LoaderCircleIcon className="size-4 animate-spin text-muted-foreground" /> : null}
|
|
114
|
-
{clearable && value && !disabled && !loading ? (
|
|
115
|
-
<span
|
|
116
|
-
role="button"
|
|
117
|
-
tabIndex={0}
|
|
118
|
-
aria-label={clearLabel}
|
|
119
|
-
className="ml-1 rounded-[var(--radius-sm)] border border-border/65 p-1 text-muted-foreground transition-colors hover:border-border hover:bg-muted/55 hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
|
|
120
|
-
onClick={(event) => {
|
|
121
|
-
event.preventDefault()
|
|
122
|
-
stopInteractivePropagation(event)
|
|
123
|
-
onValueChange?.(undefined)
|
|
124
|
-
}}
|
|
125
|
-
onMouseDown={stopInteractivePropagation}
|
|
126
|
-
onDoubleClick={stopInteractivePropagation}
|
|
127
|
-
onKeyDown={(event) => {
|
|
128
|
-
if (event.key === "Enter" || event.key === " ") {
|
|
129
|
-
event.preventDefault()
|
|
130
|
-
onValueChange?.(undefined)
|
|
131
|
-
}
|
|
132
|
-
}}
|
|
133
|
-
>
|
|
134
|
-
<XIcon className="size-3.5" />
|
|
135
|
-
</span>
|
|
136
|
-
) : null}
|
|
137
|
-
</SelectTrigger>
|
|
138
|
-
<SelectContent
|
|
139
|
-
className={cn(
|
|
140
|
-
"w-(--anchor-width)",
|
|
141
|
-
contentClassName
|
|
142
|
-
)}
|
|
143
|
-
>
|
|
144
|
-
{searchable ? (
|
|
145
|
-
<div data-slot="select-search" className="sticky top-0 z-10 mb-1 flex items-center gap-2 rounded-[var(--radius-md)] border border-[color:var(--aui-card-border,var(--border))] bg-popover px-2.5 py-2 text-sm">
|
|
146
|
-
<SearchIcon className="size-4 text-muted-foreground" />
|
|
147
|
-
<input
|
|
148
|
-
value={search}
|
|
149
|
-
onChange={(event) => setSearch(event.target.value)}
|
|
150
|
-
placeholder={searchPlaceholder}
|
|
151
|
-
className={cn("min-w-0 flex-1 bg-transparent outline-none placeholder:text-muted-foreground", searchClassName)}
|
|
152
|
-
/>
|
|
153
|
-
</div>
|
|
154
|
-
) : null}
|
|
155
|
-
|
|
156
|
-
{loading ? (
|
|
157
|
-
<div data-slot="select-state" className="flex items-center gap-2 rounded-[var(--radius-md)] border border-[color:var(--aui-card-border,var(--border))] bg-[color:color-mix(in_oklch,var(--muted),transparent_55%)] px-3 py-2.5 text-sm text-muted-foreground">
|
|
158
|
-
<LoaderCircleIcon className="size-4 animate-spin" />
|
|
159
|
-
{loadingLabel}
|
|
160
|
-
</div>
|
|
161
|
-
) : filteredOptions.length === 0 ? (
|
|
162
|
-
<div data-slot="select-state" className="rounded-[var(--radius-md)] border border-[color:var(--aui-card-border,var(--border))] bg-[color:color-mix(in_oklch,var(--muted),transparent_55%)] px-3 py-2.5 text-sm text-muted-foreground">{emptyLabel}</div>
|
|
163
|
-
) : (
|
|
164
|
-
filteredOptions.map((option) => {
|
|
165
|
-
const selected = option.value === value
|
|
166
|
-
return (
|
|
167
|
-
<SelectItem
|
|
168
|
-
key={option.value}
|
|
169
|
-
value={option.value}
|
|
170
|
-
disabled={option.disabled}
|
|
171
|
-
className={cn("rounded-[var(--radius-md)]", itemClassName)}
|
|
172
|
-
>
|
|
173
|
-
{renderOption ? (
|
|
174
|
-
renderOption(option, { selected })
|
|
175
|
-
) : (
|
|
176
|
-
<span className="flex min-w-0 flex-1 flex-col">
|
|
177
|
-
<span className="flex min-w-0 items-center gap-2">
|
|
178
|
-
<span className="truncate">{option.label}</span>
|
|
179
|
-
{selected ? <CheckIcon className="ml-auto size-3.5 text-primary" /> : null}
|
|
180
|
-
</span>
|
|
181
|
-
{option.description && <span className="truncate text-xs text-muted-foreground">{option.description}</span>}
|
|
182
|
-
</span>
|
|
183
|
-
)}
|
|
184
|
-
</SelectItem>
|
|
185
|
-
)
|
|
186
|
-
})
|
|
187
|
-
)}
|
|
188
|
-
</SelectContent>
|
|
189
|
-
</Select>
|
|
190
|
-
)
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
export { SimpleSelect }
|
|
6
|
+
|
|
7
|
+
export type SimpleSelectOption = SelectOption
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* @deprecated Prefer `Select` with `options` for new usage.
|
|
11
|
+
*/
|
|
12
|
+
export type SimpleSelectProps = Omit<SelectProps, "children"> & {
|
|
13
|
+
options: SimpleSelectOption[]
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* @deprecated Prefer `Select` with `options` for new usage.
|
|
18
|
+
*/
|
|
19
|
+
function SimpleSelect(props: SimpleSelectProps) {
|
|
20
|
+
return <Select {...props} />
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export { SimpleSelect }
|
|
@@ -59,6 +59,7 @@ export type AppSidebarProps = React.ComponentProps<"aside"> & {
|
|
|
59
59
|
mobileToggleClassName?: string
|
|
60
60
|
mobilePanelClassName?: string
|
|
61
61
|
mobileOverlayClassName?: string
|
|
62
|
+
footerClassName?: string
|
|
62
63
|
renderMobileToggle?: (state: { open: boolean; setOpen: (open: boolean) => void }) => React.ReactNode
|
|
63
64
|
onItemSelect?: (item: AppSidebarNavItem) => void
|
|
64
65
|
renderItem?: (item: AppSidebarNavItem, state: { collapsed: boolean }) => React.ReactNode
|
|
@@ -433,6 +434,7 @@ function SidebarSurface({
|
|
|
433
434
|
footerAccount,
|
|
434
435
|
secondaryActions = [],
|
|
435
436
|
footerSecondary,
|
|
437
|
+
footerClassName,
|
|
436
438
|
tooltipOnCollapsed,
|
|
437
439
|
onItemSelect,
|
|
438
440
|
renderItem,
|
|
@@ -531,7 +533,7 @@ function SidebarSurface({
|
|
|
531
533
|
</nav>
|
|
532
534
|
|
|
533
535
|
{(footerAccount || footerSecondary || footer || visibleSecondaryActions.length > 0 || (collapsed && (collapsedRail || visibleRailItems.length > 0))) && (
|
|
534
|
-
<div data-slot="app-sidebar-footer" className="shrink-0 border-t p-3">
|
|
536
|
+
<div data-slot="app-sidebar-footer" className={cn("shrink-0 border-t p-3", footerClassName)}>
|
|
535
537
|
{collapsed ? (
|
|
536
538
|
<>
|
|
537
539
|
{visibleRailItems.length > 0 ? (
|
|
@@ -19,6 +19,7 @@ export type BreadcrumbsProps = React.ComponentProps<"nav"> & {
|
|
|
19
19
|
collapseLabel?: React.ReactNode
|
|
20
20
|
separator?: React.ReactNode
|
|
21
21
|
wrap?: boolean
|
|
22
|
+
currentItemLabel?: React.AriaAttributes["aria-current"]
|
|
22
23
|
renderLink?: (props: React.ComponentProps<"a"> & { item: BreadcrumbItem; [key: `data-${string}`]: string | boolean | undefined }) => React.ReactNode
|
|
23
24
|
}
|
|
24
25
|
|
|
@@ -46,6 +47,7 @@ function Breadcrumbs({
|
|
|
46
47
|
collapseLabel = "…",
|
|
47
48
|
separator = <ChevronRightIcon className="size-3.5" />,
|
|
48
49
|
wrap = false,
|
|
50
|
+
currentItemLabel,
|
|
49
51
|
renderLink,
|
|
50
52
|
...props
|
|
51
53
|
}: BreadcrumbsProps) {
|
|
@@ -106,7 +108,7 @@ function Breadcrumbs({
|
|
|
106
108
|
) : (
|
|
107
109
|
<span
|
|
108
110
|
data-slot="breadcrumbs-current"
|
|
109
|
-
aria-current={isCurrent ? (item.currentLabel ?? "page") : undefined}
|
|
111
|
+
aria-current={isCurrent ? ((item.currentLabel ?? currentItemLabel ?? "page") as React.AriaAttributes["aria-current"]) : undefined}
|
|
110
112
|
className={cn(
|
|
111
113
|
"inline-flex min-w-0 items-center gap-1.5 truncate rounded-[var(--radius-sm)] px-1 py-0.5",
|
|
112
114
|
isCurrent && "bg-accent/45 font-medium text-foreground"
|