tembro 2.0.4 → 2.0.5
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/actions/action-menu.cjs +1 -1
- package/dist/components/actions/action-menu.d.ts +13 -1
- package/dist/components/actions/action-menu.js +87 -61
- package/dist/components/actions/button-group.cjs +1 -1
- package/dist/components/actions/button-group.d.ts +9 -1
- package/dist/components/actions/button-group.js +58 -14
- package/dist/components/actions/copy-button.cjs +1 -1
- package/dist/components/actions/copy-button.d.ts +2 -1
- package/dist/components/actions/copy-button.js +13 -11
- package/dist/components/calendar/calendar.cjs +1 -1
- package/dist/components/calendar/calendar.d.ts +14 -1
- package/dist/components/calendar/calendar.js +207 -128
- package/dist/components/calendar/date-picker.cjs +1 -1
- package/dist/components/calendar/date-picker.d.ts +3 -1
- package/dist/components/calendar/date-picker.js +57 -27
- package/dist/components/calendar/date-range-picker.cjs +1 -1
- package/dist/components/calendar/date-range-picker.d.ts +10 -1
- package/dist/components/calendar/date-range-picker.js +149 -64
- package/dist/components/data-table/data-table-toolbar.cjs +1 -1
- package/dist/components/data-table/data-table-toolbar.d.ts +5 -1
- package/dist/components/data-table/data-table-toolbar.js +36 -23
- package/dist/components/data-table/data-table.cjs +1 -1
- package/dist/components/data-table/data-table.d.ts +6 -4
- package/dist/components/data-table/data-table.js +87 -79
- package/dist/components/data-table/demo.cjs +1 -1
- package/dist/components/data-table/demo.js +3 -13
- package/dist/components/data-table/index.cjs +1 -1
- package/dist/components/data-table/index.js +5 -5
- package/dist/components/data-table/public.cjs +1 -1
- package/dist/components/data-table/public.d.ts +1 -6
- package/dist/components/data-table/public.js +7 -12
- package/dist/components/display/activity-feed.cjs +1 -1
- package/dist/components/display/activity-feed.d.ts +12 -1
- package/dist/components/display/activity-feed.js +69 -47
- package/dist/components/display/carousel.cjs +1 -1
- package/dist/components/display/carousel.d.ts +10 -1
- package/dist/components/display/carousel.js +68 -23
- package/dist/components/display/code-block.cjs +2 -1
- package/dist/components/display/code-block.d.ts +3 -1
- package/dist/components/display/code-block.js +33 -19
- package/dist/components/display/comparison-card.cjs +1 -1
- package/dist/components/display/comparison-card.d.ts +3 -3
- package/dist/components/display/comparison-card.js +14 -38
- package/dist/components/display/data-state.cjs +1 -1
- package/dist/components/display/data-state.d.ts +12 -2
- package/dist/components/display/data-state.js +80 -42
- package/dist/components/display/demo.cjs +1 -1
- package/dist/components/display/demo.js +1 -5
- package/dist/components/display/index.cjs +1 -1
- package/dist/components/display/index.d.ts +0 -3
- package/dist/components/display/index.js +21 -24
- package/dist/components/feedback/alert.cjs +1 -1
- package/dist/components/feedback/alert.d.ts +6 -1
- package/dist/components/feedback/alert.js +49 -19
- package/dist/components/feedback/index.cjs +1 -1
- package/dist/components/feedback/index.d.ts +0 -2
- package/dist/components/feedback/index.js +3 -5
- package/dist/components/filters/demo.cjs +1 -1
- package/dist/components/filters/demo.js +1 -5
- package/dist/components/filters/filter-bar.cjs +1 -1
- package/dist/components/filters/filter-bar.d.ts +15 -1
- package/dist/components/filters/filter-bar.js +94 -50
- package/dist/components/filters/index.cjs +1 -1
- package/dist/components/filters/index.d.ts +0 -1
- package/dist/components/filters/index.js +3 -4
- package/dist/components/form/form-field-shell.cjs +1 -1
- package/dist/components/form/form-field-shell.d.ts +17 -3
- package/dist/components/form/form-field-shell.js +54 -40
- package/dist/components/form/form-input.cjs +1 -1
- package/dist/components/form/form-input.js +278 -217
- package/dist/components/form/form-select.cjs +1 -1
- package/dist/components/form/form-select.js +47 -33
- package/dist/components/form/form-switch.cjs +1 -1
- package/dist/components/form/form-switch.js +79 -66
- package/dist/components/form/form-textarea.cjs +1 -1
- package/dist/components/form/form-textarea.js +59 -48
- package/dist/components/form/index.cjs +1 -1
- package/dist/components/form/index.js +14 -14
- package/dist/components/form/public.cjs +1 -1
- package/dist/components/form/public.d.ts +0 -8
- package/dist/components/form/public.js +7 -15
- package/dist/components/inputs/async-select.cjs +1 -1
- package/dist/components/inputs/async-select.d.ts +11 -2
- package/dist/components/inputs/async-select.js +278 -270
- package/dist/components/inputs/combobox.cjs +1 -1
- package/dist/components/inputs/combobox.d.ts +5 -1
- package/dist/components/inputs/combobox.js +52 -19
- package/dist/components/inputs/simple-select.cjs +1 -1
- package/dist/components/inputs/simple-select.d.ts +2 -1
- package/dist/components/inputs/simple-select.js +32 -16
- package/dist/components/layout/app-sidebar.cjs +1 -1
- package/dist/components/layout/app-sidebar.d.ts +4 -1
- package/dist/components/layout/app-sidebar.js +152 -132
- package/dist/components/layout/breadcrumbs.cjs +1 -1
- package/dist/components/layout/breadcrumbs.d.ts +2 -1
- package/dist/components/layout/breadcrumbs.js +10 -10
- package/dist/components/layout/index.cjs +1 -1
- package/dist/components/layout/index.js +3 -3
- package/dist/components/layout/stat-card.cjs +1 -1
- package/dist/components/layout/stat-card.d.ts +8 -1
- package/dist/components/layout/stat-card.js +33 -11
- package/dist/components/modern/calendar-scheduler.cjs +1 -1
- package/dist/components/modern/calendar-scheduler.d.ts +2 -1
- package/dist/components/modern/calendar-scheduler.js +21 -12
- package/dist/components/overlay/alert-dialog.cjs +1 -1
- package/dist/components/overlay/alert-dialog.d.ts +15 -1
- package/dist/components/overlay/alert-dialog.js +102 -27
- package/dist/components/overlay/drawer.cjs +1 -1
- package/dist/components/overlay/drawer.d.ts +4 -1
- package/dist/components/overlay/drawer.js +20 -17
- package/dist/components/patterns/index.cjs +1 -1
- package/dist/components/patterns/index.d.ts +0 -1
- package/dist/components/patterns/index.js +1 -2
- package/dist/components/patterns/public.cjs +1 -1
- package/dist/components/patterns/public.d.ts +0 -1
- package/dist/components/patterns/public.js +1 -2
- package/dist/components/ui/button/index.cjs +1 -1
- package/dist/components/ui/button/index.d.ts +3 -1
- package/dist/components/ui/button/index.js +7 -5
- package/dist/components/ui/checkbox/index.cjs +1 -1
- package/dist/components/ui/checkbox/index.d.ts +8 -0
- package/dist/components/ui/checkbox/index.js +16 -14
- package/dist/components/ui/collapse/index.cjs +1 -1
- package/dist/components/ui/collapse/index.d.ts +17 -3
- package/dist/components/ui/collapse/index.js +88 -33
- package/dist/components/ui/dialog/index.cjs +1 -1
- package/dist/components/ui/dialog/index.d.ts +2 -1
- package/dist/components/ui/dialog/index.js +6 -4
- package/dist/components/ui/dropdown-menu/index.cjs +1 -1
- package/dist/components/ui/dropdown-menu/index.d.ts +9 -4
- package/dist/components/ui/dropdown-menu/index.js +87 -62
- package/dist/index.cjs +1 -1
- package/dist/index.js +137 -156
- package/dist/public-component-surface.cjs +1 -1
- package/dist/public-component-surface.js +0 -15
- package/dist/showcase/component-api-schema.cjs +1 -1
- package/dist/showcase/component-api-schema.js +2 -2
- package/dist/showcase/create-demo.cjs +20 -34
- package/dist/showcase/create-demo.js +15 -16
- package/dist/showcase/fallback.cjs +3 -3
- package/dist/showcase/fallback.js +275 -265
- package/dist/showcase/premium/accordion/showcase.cjs +1 -1
- package/dist/showcase/premium/accordion/showcase.js +36 -5
- package/dist/showcase/premium/action-menu/showcase.cjs +1 -1
- package/dist/showcase/premium/action-menu/showcase.js +26 -8
- package/dist/showcase/premium/activity-feed/showcase.cjs +1 -1
- package/dist/showcase/premium/activity-feed/showcase.js +60 -36
- package/dist/showcase/premium/alert/showcase.cjs +1 -1
- package/dist/showcase/premium/alert/showcase.js +41 -18
- package/dist/showcase/premium/alert-dialog/showcase.cjs +1 -1
- package/dist/showcase/premium/alert-dialog/showcase.js +35 -7
- package/dist/showcase/premium/async-multi-select/mock.cjs +4 -3
- package/dist/showcase/premium/async-multi-select/mock.js +5 -5
- package/dist/showcase/premium/async-multi-select/showcase.cjs +1 -1
- package/dist/showcase/premium/async-multi-select/showcase.js +4 -3
- package/dist/showcase/premium/async-select/mock.cjs +1 -1
- package/dist/showcase/premium/async-select/mock.js +1 -1
- package/dist/showcase/premium/async-select/showcase.cjs +1 -1
- package/dist/showcase/premium/async-select/showcase.js +69 -22
- package/dist/showcase/premium/button/showcase.cjs +1 -1
- package/dist/showcase/premium/button/showcase.js +49 -3
- package/dist/showcase/premium/button-group/showcase.cjs +1 -1
- package/dist/showcase/premium/button-group/showcase.js +53 -29
- package/dist/showcase/premium/calendar/showcase.cjs +1 -1
- package/dist/showcase/premium/calendar/showcase.js +7 -2
- package/dist/showcase/premium/carousel/showcase.cjs +1 -1
- package/dist/showcase/premium/carousel/showcase.js +95 -47
- package/dist/showcase/premium/checkbox/showcase.cjs +1 -1
- package/dist/showcase/premium/checkbox/showcase.js +143 -67
- package/dist/showcase/premium/clearable-input/mock.cjs +4 -3
- package/dist/showcase/premium/clearable-input/mock.js +3 -2
- package/dist/showcase/premium/clearable-input/showcase.cjs +1 -1
- package/dist/showcase/premium/clearable-input/showcase.js +8 -2
- package/dist/showcase/premium/collapse/showcase.cjs +1 -1
- package/dist/showcase/premium/collapse/showcase.js +7 -0
- package/dist/showcase/premium/combobox/showcase.cjs +1 -1
- package/dist/showcase/premium/combobox/showcase.d.ts +2 -1
- package/dist/showcase/premium/combobox/showcase.js +56 -47
- package/dist/showcase/premium/data-table/showcase.cjs +1 -1
- package/dist/showcase/premium/data-table/showcase.js +138 -46
- package/dist/showcase/premium/data-table-parts/showcase.cjs +1 -1
- package/dist/showcase/premium/data-table-parts/showcase.js +13 -13
- package/dist/showcase/premium/date-input/mock.cjs +1 -1
- package/dist/showcase/premium/date-input/mock.js +1 -1
- package/dist/showcase/premium/date-range-picker/showcase.cjs +1 -1
- package/dist/showcase/premium/date-range-picker/showcase.js +32 -1
- package/dist/showcase/premium/dropdown-menu/showcase.cjs +1 -1
- package/dist/showcase/premium/dropdown-menu/showcase.js +88 -54
- package/dist/showcase/premium/form-wrapper/mock.cjs +41 -15
- package/dist/showcase/premium/form-wrapper/mock.js +4 -4
- package/dist/showcase/premium/form-wrapper/showcase.cjs +1 -1
- package/dist/showcase/premium/form-wrapper/showcase.js +77 -28
- package/dist/showcase/premium/index.cjs +1 -1
- package/dist/showcase/premium/index.js +426 -467
- package/dist/showcase/premium/input/mock.cjs +4 -1
- package/dist/showcase/premium/input/mock.js +1 -1
- package/dist/showcase/premium/masked-input/mock.cjs +1 -1
- package/dist/showcase/premium/masked-input/mock.js +1 -1
- package/dist/showcase/premium/money-input/mock.cjs +1 -1
- package/dist/showcase/premium/money-input/mock.js +1 -1
- package/dist/showcase/premium/number-input/mock.cjs +1 -1
- package/dist/showcase/premium/number-input/mock.js +1 -1
- package/dist/showcase/premium/phone-input/mock.cjs +1 -1
- package/dist/showcase/premium/phone-input/mock.js +1 -1
- package/dist/showcase/premium/quantity-input/mock.cjs +1 -1
- package/dist/showcase/premium/quantity-input/mock.js +1 -1
- package/dist/showcase/premium/simple-select/mock.cjs +1 -1
- package/dist/showcase/premium/simple-select/mock.js +1 -1
- package/dist/showcase/premium/simple-select/showcase.cjs +1 -1
- package/dist/showcase/premium/simple-select/showcase.js +4 -2
- package/dist/showcase/preview-catalog.cjs +7 -10
- package/dist/showcase/preview-catalog.js +7 -7
- package/dist/showcase/registry-quality.cjs +1 -1
- package/dist/showcase/registry-quality.js +0 -23
- package/dist/showcase/registry-specific.cjs +1 -1
- package/dist/showcase/registry-specific.js +149 -383
- package/dist/showcase/render-registry-preview.cjs +1 -1
- package/dist/showcase/render-registry-preview.js +163 -195
- package/dist/showcase/site-data.cjs +1 -1
- package/dist/showcase/site-data.js +197 -941
- package/dist/showcase/supplemental.cjs +1 -1
- package/dist/showcase/supplemental.js +1 -1
- package/dist/showcase/tembro-registry.json.cjs +1 -1
- package/dist/showcase/tembro-registry.json.js +33 -51
- package/package.json +1 -1
- package/packages/cli/dist/index.cjs +2 -2
- package/packages/cli/vendor/src/components/actions/action-menu.tsx +149 -83
- package/packages/cli/vendor/src/components/actions/button-group.tsx +141 -33
- package/packages/cli/vendor/src/components/actions/copy-button.tsx +21 -16
- package/packages/cli/vendor/src/components/calendar/calendar.tsx +223 -88
- package/packages/cli/vendor/src/components/calendar/date-picker.tsx +73 -29
- package/packages/cli/vendor/src/components/calendar/date-range-picker.tsx +154 -49
- package/packages/cli/vendor/src/components/data-table/data-table-toolbar.tsx +71 -50
- package/packages/cli/vendor/src/components/data-table/data-table.tsx +65 -53
- package/packages/cli/vendor/src/components/data-table/demo.tsx +2 -12
- package/packages/cli/vendor/src/components/data-table/public.ts +1 -6
- package/packages/cli/vendor/src/components/display/activity-feed.tsx +98 -40
- package/packages/cli/vendor/src/components/display/carousel.tsx +88 -2
- package/packages/cli/vendor/src/components/display/code-block.tsx +58 -26
- package/packages/cli/vendor/src/components/display/comparison-card.tsx +15 -41
- package/packages/cli/vendor/src/components/display/data-state.tsx +119 -50
- package/packages/cli/vendor/src/components/display/demo.tsx +0 -4
- package/packages/cli/vendor/src/components/display/index.ts +0 -3
- package/packages/cli/vendor/src/components/feedback/alert.tsx +86 -28
- package/packages/cli/vendor/src/components/feedback/index.ts +0 -2
- package/packages/cli/vendor/src/components/filters/demo.tsx +0 -1
- package/packages/cli/vendor/src/components/filters/filter-bar.tsx +126 -54
- package/packages/cli/vendor/src/components/filters/index.ts +0 -1
- package/packages/cli/vendor/src/components/form/form-field-shell.tsx +72 -34
- package/packages/cli/vendor/src/components/form/form-input.tsx +118 -11
- package/packages/cli/vendor/src/components/form/form-select.tsx +26 -3
- package/packages/cli/vendor/src/components/form/form-switch.tsx +77 -58
- package/packages/cli/vendor/src/components/form/form-textarea.tsx +65 -51
- package/packages/cli/vendor/src/components/form/public.ts +0 -9
- package/packages/cli/vendor/src/components/inputs/async-select.tsx +126 -82
- package/packages/cli/vendor/src/components/inputs/combobox.tsx +66 -9
- package/packages/cli/vendor/src/components/inputs/simple-select.tsx +52 -24
- package/packages/cli/vendor/src/components/layout/app-sidebar.tsx +42 -1
- package/packages/cli/vendor/src/components/layout/breadcrumbs.tsx +17 -8
- package/packages/cli/vendor/src/components/layout/stat-card.tsx +63 -23
- package/packages/cli/vendor/src/components/modern/calendar-scheduler.tsx +32 -22
- package/packages/cli/vendor/src/components/overlay/alert-dialog.tsx +148 -24
- package/packages/cli/vendor/src/components/overlay/drawer.tsx +42 -30
- package/packages/cli/vendor/src/components/patterns/index.ts +0 -1
- package/packages/cli/vendor/src/components/patterns/public.ts +0 -1
- package/packages/cli/vendor/src/components/ui/button/index.tsx +27 -17
- package/packages/cli/vendor/src/components/ui/checkbox/index.tsx +22 -5
- package/packages/cli/vendor/src/components/ui/collapse/index.tsx +97 -16
- package/packages/cli/vendor/src/components/ui/dialog/index.tsx +12 -8
- package/packages/cli/vendor/src/components/ui/dropdown-menu/index.tsx +82 -28
- package/packages/cli/vendor/src/public-component-surface.ts +0 -3
- package/packages/cli/vendor/src/showcase/component-api-schema.ts +2 -2
- package/packages/cli/vendor/src/showcase/create-demo.tsx +31 -46
- package/packages/cli/vendor/src/showcase/fallback.tsx +80 -99
- package/packages/cli/vendor/src/showcase/premium/accordion/showcase.tsx +32 -2
- package/packages/cli/vendor/src/showcase/premium/action-menu/showcase.tsx +12 -3
- package/packages/cli/vendor/src/showcase/premium/activity-feed/showcase.tsx +15 -2
- package/packages/cli/vendor/src/showcase/premium/alert/showcase.tsx +32 -17
- package/packages/cli/vendor/src/showcase/premium/alert-dialog/showcase.tsx +28 -3
- package/packages/cli/vendor/src/showcase/premium/async-multi-select/mock.ts +6 -5
- package/packages/cli/vendor/src/showcase/premium/async-multi-select/showcase.tsx +5 -4
- package/packages/cli/vendor/src/showcase/premium/async-select/mock.ts +1 -1
- package/packages/cli/vendor/src/showcase/premium/async-select/showcase.tsx +36 -0
- package/packages/cli/vendor/src/showcase/premium/button/showcase.tsx +26 -5
- package/packages/cli/vendor/src/showcase/premium/button-group/showcase.tsx +20 -3
- package/packages/cli/vendor/src/showcase/premium/calendar/showcase.tsx +5 -0
- package/packages/cli/vendor/src/showcase/premium/carousel/showcase.tsx +33 -5
- package/packages/cli/vendor/src/showcase/premium/checkbox/showcase.tsx +46 -3
- package/packages/cli/vendor/src/showcase/premium/clearable-input/mock.ts +5 -3
- package/packages/cli/vendor/src/showcase/premium/clearable-input/showcase.tsx +5 -2
- package/packages/cli/vendor/src/showcase/premium/collapse/showcase.tsx +4 -0
- package/packages/cli/vendor/src/showcase/premium/combobox/showcase.tsx +8 -0
- package/packages/cli/vendor/src/showcase/premium/data-table/showcase.tsx +77 -27
- package/packages/cli/vendor/src/showcase/premium/data-table-parts/showcase.tsx +11 -11
- package/packages/cli/vendor/src/showcase/premium/date-input/mock.ts +1 -1
- package/packages/cli/vendor/src/showcase/premium/date-range-picker/showcase.tsx +7 -0
- package/packages/cli/vendor/src/showcase/premium/dropdown-menu/showcase.tsx +46 -3
- package/packages/cli/vendor/src/showcase/premium/form-wrapper/mock.ts +70 -44
- package/packages/cli/vendor/src/showcase/premium/form-wrapper/showcase.tsx +129 -12
- package/packages/cli/vendor/src/showcase/premium/index.ts +7 -24
- package/packages/cli/vendor/src/showcase/premium/input/mock.ts +2 -2
- package/packages/cli/vendor/src/showcase/premium/masked-input/mock.ts +1 -1
- package/packages/cli/vendor/src/showcase/premium/money-input/mock.ts +1 -1
- package/packages/cli/vendor/src/showcase/premium/number-input/mock.ts +1 -1
- package/packages/cli/vendor/src/showcase/premium/phone-input/mock.ts +1 -1
- package/packages/cli/vendor/src/showcase/premium/quantity-input/mock.ts +1 -1
- package/packages/cli/vendor/src/showcase/premium/simple-select/mock.ts +1 -1
- package/packages/cli/vendor/src/showcase/premium/simple-select/showcase.tsx +2 -1
- package/packages/cli/vendor/src/showcase/preview-catalog.tsx +7 -7
- package/packages/cli/vendor/src/showcase/registry-quality.ts +4 -28
- package/packages/cli/vendor/src/showcase/registry-specific.tsx +3 -178
- package/packages/cli/vendor/src/showcase/render-registry-preview.tsx +18 -51
- package/packages/cli/vendor/src/showcase/site-data.tsx +2443 -2761
- package/packages/cli/vendor/src/showcase/supplemental.tsx +2 -42
- package/packages/cli/vendor/src/showcase/tembro-registry.json +11 -58
- package/registry.json +11 -61
- package/dist/components/display/entity-card.cjs +0 -1
- package/dist/components/display/entity-card.d.ts +0 -18
- package/dist/components/display/entity-card.js +0 -61
- package/dist/components/display/entity-header.cjs +0 -1
- package/dist/components/display/entity-header.d.ts +0 -13
- package/dist/components/display/entity-header.js +0 -52
- package/dist/components/display/file-card.cjs +0 -1
- package/dist/components/display/file-card.d.ts +0 -14
- package/dist/components/display/file-card.js +0 -59
- package/dist/components/feedback/empty-search-state.cjs +0 -1
- package/dist/components/feedback/empty-search-state.d.ts +0 -11
- package/dist/components/feedback/empty-search-state.js +0 -45
- package/dist/components/feedback/empty-state.cjs +0 -1
- package/dist/components/feedback/empty-state.d.ts +0 -11
- package/dist/components/feedback/empty-state.js +0 -38
- package/dist/components/filters/filter-chips.cjs +0 -1
- package/dist/components/filters/filter-chips.d.ts +0 -18
- package/dist/components/filters/filter-chips.js +0 -61
- package/dist/components/patterns/form-builder-presets.cjs +0 -1
- package/dist/components/patterns/form-builder-presets.d.ts +0 -1
- package/dist/components/patterns/form-builder-presets.js +0 -2
- package/dist/components/patterns/form-builder.cjs +0 -1
- package/dist/components/patterns/form-builder.d.ts +0 -109
- package/dist/components/patterns/form-builder.js +0 -263
- package/dist/showcase/premium/empty-state/index.cjs +0 -1
- package/dist/showcase/premium/empty-state/index.d.ts +0 -2
- package/dist/showcase/premium/empty-state/index.js +0 -3
- package/dist/showcase/premium/empty-state/mock.cjs +0 -14
- package/dist/showcase/premium/empty-state/mock.d.ts +0 -2
- package/dist/showcase/premium/empty-state/mock.js +0 -31
- package/dist/showcase/premium/empty-state/showcase.cjs +0 -1
- package/dist/showcase/premium/empty-state/showcase.d.ts +0 -3
- package/dist/showcase/premium/empty-state/showcase.js +0 -99
- package/dist/showcase/premium/form-builder/index.cjs +0 -1
- package/dist/showcase/premium/form-builder/index.d.ts +0 -2
- package/dist/showcase/premium/form-builder/index.js +0 -3
- package/dist/showcase/premium/form-builder/mock.cjs +0 -57
- package/dist/showcase/premium/form-builder/mock.d.ts +0 -2
- package/dist/showcase/premium/form-builder/mock.js +0 -40
- package/dist/showcase/premium/form-builder/showcase.cjs +0 -1
- package/dist/showcase/premium/form-builder/showcase.d.ts +0 -3
- package/dist/showcase/premium/form-builder/showcase.js +0 -69
- package/packages/cli/vendor/src/components/display/entity-card.tsx +0 -80
- package/packages/cli/vendor/src/components/display/entity-header.tsx +0 -80
- package/packages/cli/vendor/src/components/display/file-card.tsx +0 -61
- package/packages/cli/vendor/src/components/feedback/empty-search-state.tsx +0 -65
- package/packages/cli/vendor/src/components/feedback/empty-state.tsx +0 -56
- package/packages/cli/vendor/src/components/filters/filter-chips.tsx +0 -89
- package/packages/cli/vendor/src/components/patterns/form-builder-presets.ts +0 -13
- package/packages/cli/vendor/src/components/patterns/form-builder.tsx +0 -443
- package/packages/cli/vendor/src/showcase/premium/empty-state/index.ts +0 -2
- package/packages/cli/vendor/src/showcase/premium/empty-state/mock.ts +0 -30
- package/packages/cli/vendor/src/showcase/premium/empty-state/showcase.tsx +0 -65
- package/packages/cli/vendor/src/showcase/premium/form-builder/index.ts +0 -2
- package/packages/cli/vendor/src/showcase/premium/form-builder/mock.ts +0 -79
- package/packages/cli/vendor/src/showcase/premium/form-builder/showcase.tsx +0 -55
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import * as React from "react"
|
|
2
2
|
import { Controller, type Control, type FieldPath, type FieldValues } from "react-hook-form"
|
|
3
3
|
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
FormFieldShell,
|
|
6
|
+
type FormFieldShellControlProps,
|
|
7
|
+
resolveFormFieldIds,
|
|
8
|
+
} from "@/components/form/form-field-shell"
|
|
5
9
|
import { Switch } from "@/components/ui/switch"
|
|
6
10
|
import { cn } from "@/lib/utils"
|
|
7
11
|
|
|
@@ -47,33 +51,40 @@ function FormSwitch<
|
|
|
47
51
|
id,
|
|
48
52
|
onCheckedChange,
|
|
49
53
|
...props
|
|
50
|
-
}: FormSwitchProps<TFieldValues, TName>) {
|
|
51
|
-
const switchId = id ?? name
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
{
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
54
|
+
}: FormSwitchProps<TFieldValues, TName>) {
|
|
55
|
+
const switchId = id ?? name
|
|
56
|
+
|
|
57
|
+
return (
|
|
58
|
+
<Controller
|
|
59
|
+
control={control}
|
|
60
|
+
name={name}
|
|
61
|
+
render={({ field, fieldState }) => {
|
|
62
|
+
const error = fieldState.error?.message
|
|
63
|
+
const resolvedIds = resolveFormFieldIds(switchId, { description, error })
|
|
64
|
+
const labelContent = label ? (
|
|
65
|
+
<label
|
|
66
|
+
id={resolvedIds.labelId}
|
|
67
|
+
htmlFor={switchId}
|
|
68
|
+
className={cn("text-sm font-medium leading-none", disabled && "opacity-60", labelClassName)}
|
|
69
|
+
>
|
|
70
|
+
{label}
|
|
71
|
+
{required && (requiredIndicator ?? <span className="ml-1 text-destructive">*</span>)}
|
|
72
|
+
</label>
|
|
73
|
+
) : null
|
|
74
|
+
|
|
75
|
+
const switchControl = (
|
|
76
|
+
<Switch
|
|
77
|
+
id={switchId}
|
|
78
|
+
ref={field.ref}
|
|
79
|
+
checked={Boolean(field.value)}
|
|
80
|
+
disabled={disabled || readOnly}
|
|
81
|
+
aria-invalid={fieldState.invalid || undefined}
|
|
82
|
+
aria-labelledby={label ? resolvedIds.labelId : undefined}
|
|
83
|
+
aria-describedby={resolvedIds.describedBy}
|
|
84
|
+
aria-errormessage={error ? resolvedIds.errorId : undefined}
|
|
85
|
+
className={fieldClassName}
|
|
86
|
+
onBlur={field.onBlur}
|
|
87
|
+
onCheckedChange={(checked) => {
|
|
77
88
|
field.onChange(checked)
|
|
78
89
|
onCheckedChange?.(checked)
|
|
79
90
|
}}
|
|
@@ -81,19 +92,22 @@ function FormSwitch<
|
|
|
81
92
|
/>
|
|
82
93
|
)
|
|
83
94
|
|
|
84
|
-
return labelPlacement === "start" ? (
|
|
85
|
-
<FormFieldShell
|
|
86
|
-
label={label}
|
|
87
|
-
description={description}
|
|
88
|
-
required={required}
|
|
89
|
-
error={
|
|
90
|
-
htmlFor={switchId}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
95
|
+
return labelPlacement === "start" ? (
|
|
96
|
+
<FormFieldShell
|
|
97
|
+
label={label}
|
|
98
|
+
description={description}
|
|
99
|
+
required={required}
|
|
100
|
+
error={error}
|
|
101
|
+
htmlFor={switchId}
|
|
102
|
+
labelId={resolvedIds.labelId}
|
|
103
|
+
descriptionId={resolvedIds.descriptionId}
|
|
104
|
+
errorId={resolvedIds.errorId}
|
|
105
|
+
className={className}
|
|
106
|
+
layout={layout}
|
|
107
|
+
descriptionPosition={descriptionPosition}
|
|
108
|
+
labelAction={labelAction}
|
|
109
|
+
requiredIndicator={requiredIndicator}
|
|
110
|
+
errorIcon={errorIcon}
|
|
97
111
|
showErrorIcon={showErrorIcon}
|
|
98
112
|
disabled={disabled}
|
|
99
113
|
readOnly={readOnly}
|
|
@@ -106,12 +120,14 @@ function FormSwitch<
|
|
|
106
120
|
{switchControl}
|
|
107
121
|
</FormFieldShell>
|
|
108
122
|
) : (
|
|
109
|
-
<FormFieldShell
|
|
110
|
-
error={
|
|
111
|
-
className={className}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
123
|
+
<FormFieldShell
|
|
124
|
+
error={error}
|
|
125
|
+
className={className}
|
|
126
|
+
descriptionId={resolvedIds.descriptionId}
|
|
127
|
+
errorId={resolvedIds.errorId}
|
|
128
|
+
errorIcon={errorIcon}
|
|
129
|
+
showErrorIcon={showErrorIcon}
|
|
130
|
+
disabled={disabled}
|
|
115
131
|
readOnly={readOnly}
|
|
116
132
|
errorClassName={errorClassName}
|
|
117
133
|
contentClassName={contentClassName}
|
|
@@ -121,17 +137,20 @@ function FormSwitch<
|
|
|
121
137
|
|
|
122
138
|
{(label || description || labelAction) && (
|
|
123
139
|
<div className="grid min-w-0 gap-1">
|
|
124
|
-
{(label || labelAction) && (
|
|
125
|
-
<div className={cn("flex items-center justify-between gap-2", labelRowClassName)}>
|
|
126
|
-
{labelContent}
|
|
127
|
-
{labelAction && <div className="shrink-0 text-sm">{labelAction}</div>}
|
|
128
|
-
</div>
|
|
129
|
-
)}
|
|
130
|
-
{description && (
|
|
131
|
-
<p
|
|
132
|
-
{
|
|
133
|
-
|
|
134
|
-
|
|
140
|
+
{(label || labelAction) && (
|
|
141
|
+
<div className={cn("flex items-center justify-between gap-2", labelRowClassName)}>
|
|
142
|
+
{labelContent}
|
|
143
|
+
{labelAction && <div className="shrink-0 text-sm">{labelAction}</div>}
|
|
144
|
+
</div>
|
|
145
|
+
)}
|
|
146
|
+
{description && (
|
|
147
|
+
<p
|
|
148
|
+
id={resolvedIds.descriptionId}
|
|
149
|
+
className={cn("text-xs text-muted-foreground", descriptionClassName)}
|
|
150
|
+
>
|
|
151
|
+
{description}
|
|
152
|
+
</p>
|
|
153
|
+
)}
|
|
135
154
|
</div>
|
|
136
155
|
)}
|
|
137
156
|
</div>
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import * as React from "react"
|
|
2
2
|
import { Controller, type Control, type FieldPath, type FieldValues, type RegisterOptions } from "react-hook-form"
|
|
3
3
|
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
FormFieldShell,
|
|
6
|
+
type FormFieldShellControlProps,
|
|
7
|
+
resolveFormFieldIds,
|
|
8
|
+
} from "@/components/form/form-field-shell"
|
|
5
9
|
import { Textarea } from "@/components/ui/textarea"
|
|
6
10
|
|
|
7
11
|
export type FormTextareaProps<
|
|
@@ -48,59 +52,69 @@ function FormTextarea<
|
|
|
48
52
|
onChange,
|
|
49
53
|
onBlur,
|
|
50
54
|
...props
|
|
51
|
-
}: FormTextareaProps<TFieldValues, TName>) {
|
|
52
|
-
const textareaId = id ?? name
|
|
53
|
-
|
|
54
|
-
return (
|
|
55
|
+
}: FormTextareaProps<TFieldValues, TName>) {
|
|
56
|
+
const textareaId = id ?? name
|
|
57
|
+
|
|
58
|
+
return (
|
|
55
59
|
<Controller
|
|
56
60
|
control={control}
|
|
57
61
|
name={name}
|
|
58
62
|
rules={rules}
|
|
59
|
-
render={({ field, fieldState }) =>
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
}
|
|
63
|
+
render={({ field, fieldState }) => {
|
|
64
|
+
const error = fieldState.error?.message
|
|
65
|
+
const resolvedIds = resolveFormFieldIds(textareaId, { description, error })
|
|
66
|
+
|
|
67
|
+
return (
|
|
68
|
+
<FormFieldShell
|
|
69
|
+
label={label}
|
|
70
|
+
description={description}
|
|
71
|
+
required={required}
|
|
72
|
+
error={error}
|
|
73
|
+
htmlFor={textareaId}
|
|
74
|
+
labelId={resolvedIds.labelId}
|
|
75
|
+
descriptionId={resolvedIds.descriptionId}
|
|
76
|
+
errorId={resolvedIds.errorId}
|
|
77
|
+
className={className}
|
|
78
|
+
layout={layout}
|
|
79
|
+
descriptionPosition={descriptionPosition}
|
|
80
|
+
labelAction={labelAction}
|
|
81
|
+
requiredIndicator={requiredIndicator}
|
|
82
|
+
errorIcon={errorIcon}
|
|
83
|
+
showErrorIcon={showErrorIcon}
|
|
84
|
+
disabled={disabled}
|
|
85
|
+
readOnly={readOnly}
|
|
86
|
+
labelClassName={labelClassName}
|
|
87
|
+
labelRowClassName={labelRowClassName}
|
|
88
|
+
descriptionClassName={descriptionClassName}
|
|
89
|
+
errorClassName={errorClassName}
|
|
90
|
+
contentClassName={contentClassName}
|
|
91
|
+
>
|
|
92
|
+
<Textarea
|
|
93
|
+
id={textareaId}
|
|
94
|
+
ref={field.ref}
|
|
95
|
+
name={field.name}
|
|
96
|
+
value={transformIn ? transformIn(field.value) : field.value ?? ""}
|
|
97
|
+
disabled={disabled}
|
|
98
|
+
readOnly={readOnly}
|
|
99
|
+
onBlur={(event) => {
|
|
100
|
+
field.onBlur()
|
|
101
|
+
onBlur?.(event)
|
|
102
|
+
}}
|
|
103
|
+
onChange={(event) => {
|
|
104
|
+
field.onChange(transformOut ? transformOut(event) : event)
|
|
105
|
+
onChange?.(event)
|
|
106
|
+
}}
|
|
107
|
+
aria-invalid={fieldState.invalid || undefined}
|
|
108
|
+
aria-describedby={resolvedIds.describedBy}
|
|
109
|
+
aria-errormessage={error ? resolvedIds.errorId : undefined}
|
|
110
|
+
className={fieldClassName}
|
|
111
|
+
{...props}
|
|
112
|
+
/>
|
|
113
|
+
</FormFieldShell>
|
|
114
|
+
)
|
|
115
|
+
}}
|
|
116
|
+
/>
|
|
117
|
+
)
|
|
118
|
+
}
|
|
105
119
|
|
|
106
120
|
export { FormTextarea }
|
|
@@ -4,13 +4,4 @@ export * from "./form-input"
|
|
|
4
4
|
export * from "./form-select"
|
|
5
5
|
export * from "./form-switch"
|
|
6
6
|
export * from "./form-textarea"
|
|
7
|
-
export * from "./form-date-picker"
|
|
8
|
-
export * from "./form-date-range-picker"
|
|
9
|
-
// Compatibility aliases
|
|
10
7
|
export * from "./form-async-select"
|
|
11
|
-
export * from "./form-date-input"
|
|
12
|
-
export * from "./form-date-range-input"
|
|
13
|
-
export * from "./form-number-input"
|
|
14
|
-
export * from "./form-password-input"
|
|
15
|
-
export * from "./form-phone-input"
|
|
16
|
-
export * from "./form-search-input"
|
|
@@ -48,9 +48,10 @@ export type AsyncSelectStateRenderer<
|
|
|
48
48
|
TOption extends AsyncSelectOption<TValue, TData> = AsyncSelectOption<TValue, TData>,
|
|
49
49
|
> = (state: AsyncSelectRenderState<TValue, TData, TOption>) => React.ReactNode
|
|
50
50
|
|
|
51
|
-
export type AsyncSelectLabels = {
|
|
52
|
-
placeholder?: string
|
|
53
|
-
|
|
51
|
+
export type AsyncSelectLabels = {
|
|
52
|
+
placeholder?: string
|
|
53
|
+
multiPlaceholder?: string
|
|
54
|
+
searchPlaceholder?: string
|
|
54
55
|
loading?: string
|
|
55
56
|
creating?: string
|
|
56
57
|
empty?: string
|
|
@@ -59,18 +60,20 @@ export type AsyncSelectLabels = {
|
|
|
59
60
|
clearAll?: string
|
|
60
61
|
selectAll?: string
|
|
61
62
|
minSearchLength?: (minSearchLength: number) => string
|
|
62
|
-
maxSelected?: (maxSelected: number) => string
|
|
63
|
-
selectedCount?: (count: number) => string
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
63
|
+
maxSelected?: (maxSelected: number) => string
|
|
64
|
+
selectedCount?: (count: number) => string
|
|
65
|
+
hiddenSelected?: (count: number) => string
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export type AsyncSelectProps<
|
|
69
|
+
TValue extends string = string,
|
|
70
|
+
TData = unknown,
|
|
71
|
+
TOption extends AsyncSelectOption<TValue, TData> = AsyncSelectOption<TValue, TData>,
|
|
72
|
+
> = Omit<React.ComponentProps<"div">, "onChange"> & {
|
|
73
|
+
isMulti?: false
|
|
74
|
+
value?: TValue
|
|
75
|
+
selectedOption?: TOption | null
|
|
76
|
+
onValueChange?: (value: TValue | undefined, option?: TOption) => void
|
|
74
77
|
loadOptions: (search: string, signal?: AbortSignal) => Promise<AsyncSelectOptionsResult<TValue, TData, TOption>>
|
|
75
78
|
loadSelectedOption?: (value: TValue, signal?: AbortSignal) => Promise<TOption | null | undefined>
|
|
76
79
|
defaultOptions?: AsyncSelectOptionsResult<TValue, TData, TOption>
|
|
@@ -87,15 +90,24 @@ export type AsyncSelectProps<
|
|
|
87
90
|
renderEmpty?: AsyncSelectStateRenderer<TValue, TData, TOption>
|
|
88
91
|
renderError?: AsyncSelectStateRenderer<TValue, TData, TOption>
|
|
89
92
|
renderMinSearch?: AsyncSelectStateRenderer<TValue, TData, TOption>
|
|
90
|
-
onCreateOption?: (search: string) => Promise<TOption> | TOption
|
|
91
|
-
createOptionLabel?: (search: string) => React.ReactNode
|
|
92
|
-
showCreateOption?: (search: string, options: TOption[]) => boolean
|
|
93
|
-
|
|
93
|
+
onCreateOption?: (search: string) => Promise<TOption> | TOption
|
|
94
|
+
createOptionLabel?: (search: string) => React.ReactNode
|
|
95
|
+
showCreateOption?: (search: string, options: TOption[]) => boolean
|
|
96
|
+
showSelectedDescription?: boolean
|
|
97
|
+
triggerClassName?: string
|
|
94
98
|
contentClassName?: string
|
|
95
99
|
searchClassName?: string
|
|
96
100
|
optionClassName?: string
|
|
97
|
-
invalid?: boolean
|
|
98
|
-
}
|
|
101
|
+
invalid?: boolean
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export type AsyncSelectMultiModeProps<
|
|
105
|
+
TValue extends string = string,
|
|
106
|
+
TData = unknown,
|
|
107
|
+
TOption extends AsyncSelectOption<TValue, TData> = AsyncSelectOption<TValue, TData>,
|
|
108
|
+
> = AsyncMultiSelectProps<TValue, TData, TOption> & {
|
|
109
|
+
isMulti: true
|
|
110
|
+
}
|
|
99
111
|
|
|
100
112
|
export type AsyncMultiSelectProps<
|
|
101
113
|
TValue extends string = string,
|
|
@@ -115,8 +127,9 @@ export type AsyncMultiSelectProps<
|
|
|
115
127
|
closeOnSelect?: boolean
|
|
116
128
|
debounceMs?: number
|
|
117
129
|
minSearchLength?: number
|
|
118
|
-
maxSelected?: number
|
|
119
|
-
|
|
130
|
+
maxSelected?: number
|
|
131
|
+
maxVisibleTags?: number
|
|
132
|
+
showSelectAll?: boolean
|
|
120
133
|
labels?: AsyncSelectLabels
|
|
121
134
|
renderOption?: (option: TOption, state: { selected: boolean }) => React.ReactNode
|
|
122
135
|
renderValue?: (option: TOption) => React.ReactNode
|
|
@@ -126,10 +139,11 @@ export type AsyncMultiSelectProps<
|
|
|
126
139
|
renderError?: AsyncSelectStateRenderer<TValue, TData, TOption>
|
|
127
140
|
renderMinSearch?: AsyncSelectStateRenderer<TValue, TData, TOption>
|
|
128
141
|
renderMaxSelected?: AsyncSelectStateRenderer<TValue, TData, TOption>
|
|
129
|
-
onCreateOption?: (search: string) => Promise<TOption> | TOption
|
|
130
|
-
createOptionLabel?: (search: string) => React.ReactNode
|
|
131
|
-
showCreateOption?: (search: string, options: TOption[]) => boolean
|
|
132
|
-
|
|
142
|
+
onCreateOption?: (search: string) => Promise<TOption> | TOption
|
|
143
|
+
createOptionLabel?: (search: string) => React.ReactNode
|
|
144
|
+
showCreateOption?: (search: string, options: TOption[]) => boolean
|
|
145
|
+
showSelectedDescription?: boolean
|
|
146
|
+
triggerClassName?: string
|
|
133
147
|
contentClassName?: string
|
|
134
148
|
searchClassName?: string
|
|
135
149
|
optionClassName?: string
|
|
@@ -410,14 +424,21 @@ function AsyncCreateButton({
|
|
|
410
424
|
)
|
|
411
425
|
}
|
|
412
426
|
|
|
413
|
-
function AsyncSelect<
|
|
414
|
-
TValue extends string = string,
|
|
415
|
-
TData = unknown,
|
|
416
|
-
TOption extends AsyncSelectOption<TValue, TData> = AsyncSelectOption<TValue, TData>,
|
|
417
|
-
>({
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
427
|
+
function AsyncSelect<
|
|
428
|
+
TValue extends string = string,
|
|
429
|
+
TData = unknown,
|
|
430
|
+
TOption extends AsyncSelectOption<TValue, TData> = AsyncSelectOption<TValue, TData>,
|
|
431
|
+
>(props: AsyncSelectProps<TValue, TData, TOption> | AsyncSelectMultiModeProps<TValue, TData, TOption>) {
|
|
432
|
+
if ("isMulti" in props && props.isMulti) {
|
|
433
|
+
const multiProps = { ...props }
|
|
434
|
+
delete (multiProps as { isMulti?: true }).isMulti
|
|
435
|
+
return <AsyncMultiSelect {...multiProps} />
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
const {
|
|
439
|
+
className,
|
|
440
|
+
value,
|
|
441
|
+
selectedOption,
|
|
421
442
|
onValueChange,
|
|
422
443
|
loadOptions,
|
|
423
444
|
loadSelectedOption,
|
|
@@ -434,17 +455,18 @@ function AsyncSelect<
|
|
|
434
455
|
renderLoading,
|
|
435
456
|
renderEmpty,
|
|
436
457
|
renderError,
|
|
437
|
-
renderMinSearch,
|
|
438
|
-
onCreateOption,
|
|
439
|
-
createOptionLabel,
|
|
440
|
-
showCreateOption,
|
|
441
|
-
|
|
458
|
+
renderMinSearch,
|
|
459
|
+
onCreateOption,
|
|
460
|
+
createOptionLabel,
|
|
461
|
+
showCreateOption,
|
|
462
|
+
showSelectedDescription = true,
|
|
463
|
+
triggerClassName,
|
|
442
464
|
contentClassName,
|
|
443
|
-
searchClassName,
|
|
444
|
-
optionClassName,
|
|
445
|
-
invalid,
|
|
446
|
-
...
|
|
447
|
-
}
|
|
465
|
+
searchClassName,
|
|
466
|
+
optionClassName,
|
|
467
|
+
invalid,
|
|
468
|
+
...rootProps
|
|
469
|
+
} = props as AsyncSelectProps<TValue, TData, TOption>
|
|
448
470
|
const resolvedDefaultGroups = React.useMemo(() => normalizeOptionGroups(defaultOptions), [defaultOptions])
|
|
449
471
|
const defaultFlatOptions = React.useMemo(() => flattenOptionGroups(resolvedDefaultGroups), [resolvedDefaultGroups])
|
|
450
472
|
const [open, setOpen] = React.useState(false)
|
|
@@ -613,7 +635,7 @@ function AsyncSelect<
|
|
|
613
635
|
}
|
|
614
636
|
|
|
615
637
|
return (
|
|
616
|
-
<div data-slot="async-select" className={cn("w-full", className)} {...
|
|
638
|
+
<div data-slot="async-select" className={cn("w-full", className)} {...rootProps}>
|
|
617
639
|
<Popover open={open} onOpenChange={setOpen}>
|
|
618
640
|
<PopoverTrigger
|
|
619
641
|
render={
|
|
@@ -633,16 +655,18 @@ function AsyncSelect<
|
|
|
633
655
|
}
|
|
634
656
|
>
|
|
635
657
|
<span className="min-w-0 flex-1 text-left">
|
|
636
|
-
{currentOption ? (
|
|
658
|
+
{currentOption ? (
|
|
637
659
|
<span className="flex min-w-0 flex-col gap-0.5">
|
|
638
660
|
<span className="truncate font-semibold">
|
|
639
|
-
{renderValue?.(currentOption) ?? currentOption.label}
|
|
640
|
-
</span>
|
|
641
|
-
{currentOption.disabled && currentOption.disabledReason
|
|
642
|
-
<span className="truncate text-xs text-muted-foreground">
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
661
|
+
{renderValue?.(currentOption) ?? currentOption.label}
|
|
662
|
+
</span>
|
|
663
|
+
{showSelectedDescription && (currentOption.description || (currentOption.disabled && currentOption.disabledReason)) ? (
|
|
664
|
+
<span className="truncate text-xs text-muted-foreground">
|
|
665
|
+
{currentOption.description ?? currentOption.disabledReason}
|
|
666
|
+
</span>
|
|
667
|
+
) : null}
|
|
668
|
+
</span>
|
|
669
|
+
) : (
|
|
646
670
|
<span className="truncate text-muted-foreground">{labels?.placeholder ?? "Select"}</span>
|
|
647
671
|
)}
|
|
648
672
|
</span>
|
|
@@ -773,8 +797,9 @@ function AsyncMultiSelect<
|
|
|
773
797
|
closeOnSelect = false,
|
|
774
798
|
debounceMs = 250,
|
|
775
799
|
minSearchLength = 0,
|
|
776
|
-
maxSelected,
|
|
777
|
-
|
|
800
|
+
maxSelected,
|
|
801
|
+
maxVisibleTags,
|
|
802
|
+
showSelectAll = false,
|
|
778
803
|
labels,
|
|
779
804
|
renderOption,
|
|
780
805
|
renderValue,
|
|
@@ -783,11 +808,12 @@ function AsyncMultiSelect<
|
|
|
783
808
|
renderEmpty,
|
|
784
809
|
renderError,
|
|
785
810
|
renderMinSearch,
|
|
786
|
-
renderMaxSelected,
|
|
787
|
-
onCreateOption,
|
|
788
|
-
createOptionLabel,
|
|
789
|
-
showCreateOption,
|
|
790
|
-
|
|
811
|
+
renderMaxSelected,
|
|
812
|
+
onCreateOption,
|
|
813
|
+
createOptionLabel,
|
|
814
|
+
showCreateOption,
|
|
815
|
+
showSelectedDescription = true,
|
|
816
|
+
triggerClassName,
|
|
791
817
|
contentClassName,
|
|
792
818
|
searchClassName,
|
|
793
819
|
optionClassName,
|
|
@@ -825,17 +851,20 @@ function AsyncMultiSelect<
|
|
|
825
851
|
() => ({ search, minSearchLength, options: flatOptions, selectedCount: values.length, maxSelected }),
|
|
826
852
|
[flatOptions, maxSelected, minSearchLength, search, values.length]
|
|
827
853
|
)
|
|
828
|
-
const hasValue = values.length > 0
|
|
829
|
-
const canClear = clearable && hasValue && !disabled
|
|
830
|
-
const isMaxReached = typeof maxSelected === "number" && values.length >= maxSelected
|
|
831
|
-
const
|
|
854
|
+
const hasValue = values.length > 0
|
|
855
|
+
const canClear = clearable && hasValue && !disabled
|
|
856
|
+
const isMaxReached = typeof maxSelected === "number" && values.length >= maxSelected
|
|
857
|
+
const resolvedMaxVisibleTags = Math.max(maxVisibleTags ?? values.length, 1)
|
|
858
|
+
const searchTooShort = searchKey.length < minSearchLength
|
|
832
859
|
const canCreate =
|
|
833
860
|
!searchTooShort &&
|
|
834
861
|
Boolean(onCreateOption) &&
|
|
835
862
|
(showCreateOption ?? defaultShowCreateOption)(search, flatOptions)
|
|
836
863
|
const visibleSelectableOptions = flatOptions.filter((option) => !option.disabled)
|
|
837
864
|
const unselectedVisibleOptions = visibleSelectableOptions.filter((option) => !selectedSet.has(option.value))
|
|
838
|
-
const canSelectAll = showSelectAll && unselectedVisibleOptions.length > 0 && !isMaxReached
|
|
865
|
+
const canSelectAll = showSelectAll && unselectedVisibleOptions.length > 0 && !isMaxReached
|
|
866
|
+
const visibleTagOptions = currentOptions.slice(0, resolvedMaxVisibleTags)
|
|
867
|
+
const hiddenTagCount = Math.max(currentOptions.length - visibleTagOptions.length, 0)
|
|
839
868
|
|
|
840
869
|
React.useEffect(() => {
|
|
841
870
|
cacheRef.current.clear()
|
|
@@ -1051,11 +1080,12 @@ function AsyncMultiSelect<
|
|
|
1051
1080
|
}
|
|
1052
1081
|
>
|
|
1053
1082
|
<span className="flex min-w-0 flex-1 flex-wrap gap-1 text-left">
|
|
1054
|
-
{currentOptions.length > 0 ? (
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1083
|
+
{currentOptions.length > 0 ? (
|
|
1084
|
+
<>
|
|
1085
|
+
{visibleTagOptions.map((option) => (
|
|
1086
|
+
<span
|
|
1087
|
+
key={option.value}
|
|
1088
|
+
data-slot="async-select-tag"
|
|
1059
1089
|
className={cn(
|
|
1060
1090
|
"inline-flex max-w-full items-center gap-1.5 rounded-[var(--radius-sm)] border border-[color:color-mix(in_oklch,var(--primary),transparent_70%)] bg-[color:color-mix(in_oklch,var(--primary),transparent_92%)] px-2 py-1 text-xs font-medium text-foreground",
|
|
1061
1091
|
tagClassName
|
|
@@ -1067,9 +1097,11 @@ function AsyncMultiSelect<
|
|
|
1067
1097
|
renderValue?.(option) ??
|
|
1068
1098
|
option.label}
|
|
1069
1099
|
</span>
|
|
1070
|
-
{option.disabled && option.disabledReason
|
|
1071
|
-
<span className="truncate text-[11px] text-muted-foreground">
|
|
1072
|
-
|
|
1100
|
+
{showSelectedDescription && (option.description || (option.disabled && option.disabledReason)) ? (
|
|
1101
|
+
<span className="truncate text-[11px] text-muted-foreground">
|
|
1102
|
+
{option.description ?? option.disabledReason}
|
|
1103
|
+
</span>
|
|
1104
|
+
) : null}
|
|
1073
1105
|
</span>
|
|
1074
1106
|
{!disabled && (
|
|
1075
1107
|
<span
|
|
@@ -1086,14 +1118,26 @@ function AsyncMultiSelect<
|
|
|
1086
1118
|
>
|
|
1087
1119
|
<XIcon className="size-3" />
|
|
1088
1120
|
</span>
|
|
1089
|
-
)}
|
|
1090
|
-
</span>
|
|
1091
|
-
))
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
1121
|
+
)}
|
|
1122
|
+
</span>
|
|
1123
|
+
))}
|
|
1124
|
+
{hiddenTagCount > 0 ? (
|
|
1125
|
+
<span
|
|
1126
|
+
data-slot="async-select-tag-overflow"
|
|
1127
|
+
className={cn(
|
|
1128
|
+
"inline-flex max-w-full items-center rounded-[var(--radius-sm)] border border-dashed border-[color:var(--aui-card-border,var(--border))] bg-[color:color-mix(in_oklch,var(--muted),transparent_58%)] px-2 py-1 text-xs font-medium text-muted-foreground",
|
|
1129
|
+
tagClassName
|
|
1130
|
+
)}
|
|
1131
|
+
>
|
|
1132
|
+
{labels?.hiddenSelected?.(hiddenTagCount) ?? `+${hiddenTagCount} more`}
|
|
1133
|
+
</span>
|
|
1134
|
+
) : null}
|
|
1135
|
+
</>
|
|
1136
|
+
) : (
|
|
1137
|
+
<span className="truncate text-muted-foreground">
|
|
1138
|
+
{labels?.multiPlaceholder ?? labels?.placeholder ?? "Select"}
|
|
1139
|
+
</span>
|
|
1140
|
+
)}
|
|
1097
1141
|
</span>
|
|
1098
1142
|
<span className="ml-2 flex shrink-0 items-center gap-1">
|
|
1099
1143
|
{canClear && (
|