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,10 +1,11 @@
|
|
|
1
|
-
import * as React from "react"
|
|
2
|
-
import { AlertTriangleIcon } from "lucide-react"
|
|
3
|
-
|
|
4
|
-
import { Button } from "@/components/ui/button"
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import * as React from "react"
|
|
2
|
+
import { AlertTriangleIcon } from "lucide-react"
|
|
3
|
+
|
|
4
|
+
import { Button } from "@/components/ui/button"
|
|
5
|
+
import { Input } from "@/components/ui/input"
|
|
6
|
+
import {
|
|
7
|
+
Dialog,
|
|
8
|
+
DialogClose,
|
|
8
9
|
DialogContent,
|
|
9
10
|
DialogDescription,
|
|
10
11
|
DialogFooter,
|
|
@@ -19,27 +20,104 @@ export type AlertDialogProps = Omit<React.ComponentProps<typeof Dialog>, "childr
|
|
|
19
20
|
cancelLabel?: React.ReactNode
|
|
20
21
|
actionLabel?: React.ReactNode
|
|
21
22
|
actionTone?: "default" | "destructive"
|
|
23
|
+
cancelVariant?: React.ComponentProps<typeof Button>["variant"]
|
|
22
24
|
loading?: boolean
|
|
25
|
+
closeOnAction?: boolean
|
|
26
|
+
confirmValue?: string
|
|
27
|
+
confirmLabel?: React.ReactNode
|
|
28
|
+
confirmPlaceholder?: string
|
|
29
|
+
confirmDescription?: React.ReactNode
|
|
30
|
+
confirmCaseSensitive?: boolean
|
|
31
|
+
severityNote?: React.ReactNode
|
|
32
|
+
errorMessage?: React.ReactNode
|
|
33
|
+
onActionError?: (error: unknown) => void
|
|
23
34
|
onAction?: () => void | Promise<void>
|
|
24
35
|
children?: React.ReactNode
|
|
36
|
+
preventCloseWhileLoading?: boolean
|
|
37
|
+
actionButtonProps?: Omit<React.ComponentProps<typeof Button>, "type" | "variant" | "loading" | "disabled" | "onClick" | "children">
|
|
38
|
+
cancelButtonProps?: Omit<React.ComponentProps<typeof Button>, "type" | "variant" | "disabled" | "children">
|
|
25
39
|
}
|
|
26
40
|
|
|
27
41
|
function AlertDialog({
|
|
28
42
|
title = "Are you sure?",
|
|
29
43
|
description,
|
|
30
44
|
icon = <AlertTriangleIcon />,
|
|
31
|
-
cancelLabel = "Cancel",
|
|
32
|
-
actionLabel = "Continue",
|
|
33
|
-
actionTone = "destructive",
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
45
|
+
cancelLabel = "Cancel",
|
|
46
|
+
actionLabel = "Continue",
|
|
47
|
+
actionTone = "destructive",
|
|
48
|
+
cancelVariant = "outline",
|
|
49
|
+
loading = false,
|
|
50
|
+
closeOnAction = true,
|
|
51
|
+
confirmValue,
|
|
52
|
+
confirmLabel = "Type to confirm",
|
|
53
|
+
confirmPlaceholder,
|
|
54
|
+
confirmDescription,
|
|
55
|
+
confirmCaseSensitive = true,
|
|
56
|
+
severityNote,
|
|
57
|
+
errorMessage = "Action could not be completed. Try again.",
|
|
58
|
+
onActionError,
|
|
59
|
+
onAction,
|
|
60
|
+
children,
|
|
61
|
+
preventCloseWhileLoading = true,
|
|
62
|
+
actionButtonProps,
|
|
63
|
+
cancelButtonProps,
|
|
64
|
+
onOpenChange,
|
|
65
|
+
...props
|
|
66
|
+
}: AlertDialogProps) {
|
|
67
|
+
const [pending, setPending] = React.useState(false)
|
|
68
|
+
const [confirmationInput, setConfirmationInput] = React.useState("")
|
|
69
|
+
const [actionError, setActionError] = React.useState<React.ReactNode | null>(null)
|
|
70
|
+
const resolvedLoading = loading || pending
|
|
71
|
+
const requiresTypedConfirmation = Boolean(confirmValue?.trim())
|
|
72
|
+
const expectedConfirmation = confirmCaseSensitive ? confirmValue?.trim() : confirmValue?.trim().toLowerCase()
|
|
73
|
+
const actualConfirmation = confirmCaseSensitive ? confirmationInput.trim() : confirmationInput.trim().toLowerCase()
|
|
74
|
+
const canConfirm = !requiresTypedConfirmation || actualConfirmation === expectedConfirmation
|
|
75
|
+
|
|
76
|
+
React.useEffect(() => {
|
|
77
|
+
if (!props.open) {
|
|
78
|
+
setConfirmationInput("")
|
|
79
|
+
setActionError(null)
|
|
80
|
+
}
|
|
81
|
+
}, [props.open])
|
|
82
|
+
|
|
83
|
+
const handleOpenChange = React.useCallback(
|
|
84
|
+
(nextOpen: boolean, eventDetails: unknown) => {
|
|
85
|
+
if (!nextOpen && preventCloseWhileLoading && resolvedLoading) {
|
|
86
|
+
return
|
|
87
|
+
}
|
|
88
|
+
onOpenChange?.(nextOpen, eventDetails as never)
|
|
89
|
+
},
|
|
90
|
+
[onOpenChange, preventCloseWhileLoading, resolvedLoading]
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
const closeDialog = () => {
|
|
94
|
+
handleOpenChange(false, undefined)
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
const handleAction = async () => {
|
|
98
|
+
if (!canConfirm || resolvedLoading) return
|
|
99
|
+
setActionError(null)
|
|
100
|
+
if (!onAction) {
|
|
101
|
+
if (closeOnAction) closeDialog()
|
|
102
|
+
return
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
try {
|
|
106
|
+
setPending(true)
|
|
107
|
+
await onAction()
|
|
108
|
+
if (closeOnAction) closeDialog()
|
|
109
|
+
} catch (error) {
|
|
110
|
+
setActionError(errorMessage)
|
|
111
|
+
onActionError?.(error)
|
|
112
|
+
} finally {
|
|
113
|
+
setPending(false)
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
return (
|
|
118
|
+
<Dialog onOpenChange={handleOpenChange} {...props}>
|
|
119
|
+
{children}
|
|
120
|
+
<DialogContent>
|
|
43
121
|
<DialogHeader>
|
|
44
122
|
<div className="mb-3 inline-flex size-11 items-center justify-center rounded-2xl border border-destructive/20 bg-destructive/10 text-destructive [&_svg]:size-5">
|
|
45
123
|
{icon}
|
|
@@ -47,19 +125,65 @@ function AlertDialog({
|
|
|
47
125
|
<DialogTitle>{title}</DialogTitle>
|
|
48
126
|
{description ? <DialogDescription>{description}</DialogDescription> : null}
|
|
49
127
|
</DialogHeader>
|
|
128
|
+
{requiresTypedConfirmation ? (
|
|
129
|
+
<div className="grid gap-2.5">
|
|
130
|
+
<div className="space-y-1">
|
|
131
|
+
<p className="text-sm font-medium text-foreground">{confirmLabel}</p>
|
|
132
|
+
<p className="text-xs leading-5 text-muted-foreground">
|
|
133
|
+
{confirmDescription ?? (
|
|
134
|
+
<>
|
|
135
|
+
Type <span className="font-semibold text-foreground">{confirmValue}</span> to continue.
|
|
136
|
+
</>
|
|
137
|
+
)}
|
|
138
|
+
</p>
|
|
139
|
+
</div>
|
|
140
|
+
<Input
|
|
141
|
+
value={confirmationInput}
|
|
142
|
+
onValueChange={setConfirmationInput}
|
|
143
|
+
placeholder={confirmPlaceholder ?? confirmValue}
|
|
144
|
+
autoComplete="off"
|
|
145
|
+
autoCapitalize="off"
|
|
146
|
+
spellCheck={false}
|
|
147
|
+
aria-invalid={actionError ? true : undefined}
|
|
148
|
+
aria-describedby={actionError ? "alert-dialog-error" : undefined}
|
|
149
|
+
/>
|
|
150
|
+
</div>
|
|
151
|
+
) : null}
|
|
152
|
+
{severityNote ? (
|
|
153
|
+
<div className="rounded-2xl border border-border/70 bg-muted/35 px-3.5 py-3 text-sm leading-6 text-muted-foreground">
|
|
154
|
+
{severityNote}
|
|
155
|
+
</div>
|
|
156
|
+
) : null}
|
|
157
|
+
{actionError ? (
|
|
158
|
+
<div
|
|
159
|
+
id="alert-dialog-error"
|
|
160
|
+
role="alert"
|
|
161
|
+
aria-live="polite"
|
|
162
|
+
className="rounded-2xl border border-destructive/20 bg-destructive/8 px-3.5 py-3 text-sm leading-6 text-destructive"
|
|
163
|
+
>
|
|
164
|
+
{actionError}
|
|
165
|
+
</div>
|
|
166
|
+
) : null}
|
|
50
167
|
<DialogFooter>
|
|
51
168
|
<DialogClose render={() => (
|
|
52
|
-
<Button type="button" variant=
|
|
169
|
+
<Button type="button" variant={cancelVariant} disabled={resolvedLoading} {...cancelButtonProps}>
|
|
53
170
|
{cancelLabel}
|
|
54
171
|
</Button>
|
|
55
172
|
)} />
|
|
56
|
-
<Button
|
|
173
|
+
<Button
|
|
174
|
+
type="button"
|
|
175
|
+
variant={actionTone === "destructive" ? "destructive" : "default"}
|
|
176
|
+
loading={resolvedLoading}
|
|
177
|
+
disabled={!canConfirm && !resolvedLoading}
|
|
178
|
+
onClick={() => void handleAction()}
|
|
179
|
+
{...actionButtonProps}
|
|
180
|
+
>
|
|
57
181
|
{actionLabel}
|
|
58
182
|
</Button>
|
|
59
183
|
</DialogFooter>
|
|
60
184
|
</DialogContent>
|
|
61
|
-
</Dialog>
|
|
62
|
-
)
|
|
63
|
-
}
|
|
185
|
+
</Dialog>
|
|
186
|
+
)
|
|
187
|
+
}
|
|
64
188
|
|
|
65
189
|
export { AlertDialog }
|
|
@@ -3,8 +3,8 @@ import * as React from "react"
|
|
|
3
3
|
import { Button } from "@/components/ui/button"
|
|
4
4
|
import {
|
|
5
5
|
Dialog,
|
|
6
|
-
DialogClose,
|
|
7
|
-
DialogContent,
|
|
6
|
+
DialogClose,
|
|
7
|
+
DialogContent,
|
|
8
8
|
DialogDescription,
|
|
9
9
|
DialogHeader,
|
|
10
10
|
DialogTitle,
|
|
@@ -20,51 +20,63 @@ export type DrawerProps = Omit<React.ComponentProps<typeof Dialog>, "children">
|
|
|
20
20
|
description?: React.ReactNode
|
|
21
21
|
side?: DrawerSide
|
|
22
22
|
footer?: React.ReactNode
|
|
23
|
+
headerClassName?: string
|
|
24
|
+
bodyClassName?: string
|
|
25
|
+
footerClassName?: string
|
|
23
26
|
contentClassName?: string
|
|
24
27
|
showCloseButton?: boolean
|
|
25
28
|
children?: React.ReactNode
|
|
26
29
|
}
|
|
27
30
|
|
|
28
|
-
const sideClassName: Record<DrawerSide, string> = {
|
|
29
|
-
right: "left-auto right-0 top-0 h-dvh max-h-dvh w-full max-w-md translate-x-0 translate-y-0 rounded-none rounded-l-[var(--radius-3xl)] sm:max-w-lg",
|
|
30
|
-
left: "left-0 top-0 h-dvh max-h-dvh w-full max-w-md translate-x-0 translate-y-0 rounded-none rounded-r-[var(--radius-3xl)] sm:max-w-lg",
|
|
31
|
-
top: "left-0 top-0 h-auto max-h-[85dvh] w-full max-w-none translate-x-0 translate-y-0 rounded-none rounded-b-[var(--radius-3xl)]",
|
|
32
|
-
bottom: "bottom-0 left-0 top-auto h-auto max-h-[85dvh] w-full max-w-none translate-x-0 translate-y-0 rounded-none rounded-t-[var(--radius-3xl)]",
|
|
33
|
-
}
|
|
31
|
+
const sideClassName: Record<DrawerSide, string> = {
|
|
32
|
+
right: "left-auto right-0 top-0 h-dvh max-h-dvh w-full max-w-md translate-x-0 translate-y-0 rounded-none rounded-l-[var(--radius-3xl)] data-open:slide-in-from-right data-closed:slide-out-to-right sm:max-w-lg",
|
|
33
|
+
left: "left-0 top-0 h-dvh max-h-dvh w-full max-w-md translate-x-0 translate-y-0 rounded-none rounded-r-[var(--radius-3xl)] data-open:slide-in-from-left data-closed:slide-out-to-left sm:max-w-lg",
|
|
34
|
+
top: "left-0 top-0 h-auto max-h-[85dvh] w-full max-w-none translate-x-0 translate-y-0 rounded-none rounded-b-[var(--radius-3xl)] data-open:slide-in-from-top data-closed:slide-out-to-top",
|
|
35
|
+
bottom: "bottom-0 left-0 top-auto h-auto max-h-[85dvh] w-full max-w-none translate-x-0 translate-y-0 rounded-none rounded-t-[var(--radius-3xl)] data-open:slide-in-from-bottom data-closed:slide-out-to-bottom",
|
|
36
|
+
}
|
|
34
37
|
|
|
35
38
|
function Drawer({
|
|
36
39
|
trigger,
|
|
37
40
|
title,
|
|
38
|
-
description,
|
|
39
|
-
side = "right",
|
|
40
|
-
footer,
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
description,
|
|
42
|
+
side = "right",
|
|
43
|
+
footer,
|
|
44
|
+
headerClassName,
|
|
45
|
+
bodyClassName,
|
|
46
|
+
footerClassName,
|
|
47
|
+
contentClassName,
|
|
48
|
+
showCloseButton = true,
|
|
49
|
+
children,
|
|
44
50
|
...props
|
|
45
51
|
}: DrawerProps) {
|
|
46
52
|
return (
|
|
47
53
|
<Dialog {...props}>
|
|
48
54
|
{trigger ? <DialogTrigger render={trigger as React.ReactElement} /> : null}
|
|
49
|
-
<DialogContent
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}
|
|
55
|
+
<DialogContent
|
|
56
|
+
size="full"
|
|
57
|
+
showCloseButton={showCloseButton}
|
|
58
|
+
className={cn("fixed grid grid-rows-[auto_minmax(0,1fr)_auto] gap-0 p-0", sideClassName[side], contentClassName)}
|
|
59
|
+
>
|
|
60
|
+
{(title || description) && (
|
|
61
|
+
<DialogHeader className={cn("border-b border-border/70 p-6", headerClassName)}>
|
|
62
|
+
{title ? <DialogTitle>{title}</DialogTitle> : null}
|
|
63
|
+
{description ? <DialogDescription>{description}</DialogDescription> : null}
|
|
64
|
+
</DialogHeader>
|
|
65
|
+
)}
|
|
66
|
+
<div data-slot="drawer-body" className={cn("min-h-0 flex-1 overflow-y-auto p-6", bodyClassName)}>
|
|
67
|
+
{children}
|
|
68
|
+
</div>
|
|
69
|
+
{footer ? <div data-slot="drawer-footer" className={cn("border-t border-border/70 p-5", footerClassName)}>{footer}</div> : null}
|
|
70
|
+
</DialogContent>
|
|
71
|
+
</Dialog>
|
|
72
|
+
)
|
|
73
|
+
}
|
|
64
74
|
|
|
65
75
|
function DrawerCloseButton({ children = "Close", ...props }: React.ComponentProps<typeof Button>) {
|
|
66
76
|
return (
|
|
67
|
-
<DialogClose render={
|
|
77
|
+
<DialogClose render={<Button type="button" variant="outline" {...props} />}>
|
|
78
|
+
{children}
|
|
79
|
+
</DialogClose>
|
|
68
80
|
)
|
|
69
81
|
}
|
|
70
82
|
|
|
@@ -40,26 +40,30 @@ const buttonVariants = cva(
|
|
|
40
40
|
}
|
|
41
41
|
)
|
|
42
42
|
|
|
43
|
-
export type ButtonProps = ButtonPrimitive.Props &
|
|
44
|
-
VariantProps<typeof buttonVariants> & {
|
|
45
|
-
loading?: boolean
|
|
46
|
-
loadingLabel?: string
|
|
47
|
-
leftIcon?: React.ReactNode
|
|
48
|
-
rightIcon?: React.ReactNode
|
|
49
|
-
|
|
43
|
+
export type ButtonProps = ButtonPrimitive.Props &
|
|
44
|
+
VariantProps<typeof buttonVariants> & {
|
|
45
|
+
loading?: boolean
|
|
46
|
+
loadingLabel?: string
|
|
47
|
+
leftIcon?: React.ReactNode
|
|
48
|
+
rightIcon?: React.ReactNode
|
|
49
|
+
fullWidth?: boolean
|
|
50
|
+
pressed?: boolean
|
|
51
|
+
}
|
|
50
52
|
|
|
51
53
|
function Button({
|
|
52
54
|
className,
|
|
53
55
|
variant = "default",
|
|
54
56
|
size = "default",
|
|
55
57
|
disabled,
|
|
56
|
-
loading = false,
|
|
57
|
-
loadingLabel = "Loading",
|
|
58
|
-
leftIcon,
|
|
59
|
-
rightIcon,
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
58
|
+
loading = false,
|
|
59
|
+
loadingLabel = "Loading",
|
|
60
|
+
leftIcon,
|
|
61
|
+
rightIcon,
|
|
62
|
+
fullWidth = false,
|
|
63
|
+
pressed = false,
|
|
64
|
+
children,
|
|
65
|
+
...props
|
|
66
|
+
}: ButtonProps) {
|
|
63
67
|
const isDisabled = disabled || loading
|
|
64
68
|
|
|
65
69
|
return (
|
|
@@ -68,11 +72,17 @@ function Button({
|
|
|
68
72
|
data-variant={variant ?? "default"}
|
|
69
73
|
data-size={size ?? "default"}
|
|
70
74
|
data-loading={loading || undefined}
|
|
75
|
+
data-pressed={pressed || undefined}
|
|
71
76
|
disabled={isDisabled}
|
|
72
77
|
aria-busy={loading || undefined}
|
|
73
|
-
|
|
74
|
-
{
|
|
75
|
-
|
|
78
|
+
aria-pressed={pressed || undefined}
|
|
79
|
+
className={cn(
|
|
80
|
+
buttonVariants({ variant, size, className }),
|
|
81
|
+
fullWidth && "w-full",
|
|
82
|
+
pressed && "shadow-[var(--aui-control-shadow,0_1px_2px_rgba(15,23,42,0.04)),0_0_0_1px_var(--aui-focus-ring,var(--ring))]"
|
|
83
|
+
)}
|
|
84
|
+
{...props}
|
|
85
|
+
>
|
|
76
86
|
{loading ? (
|
|
77
87
|
<span
|
|
78
88
|
data-slot="button-spinner"
|
|
@@ -12,10 +12,20 @@ export type CheckboxProps = Omit<
|
|
|
12
12
|
checked?: CheckboxCheckedState
|
|
13
13
|
defaultChecked?: CheckboxCheckedState
|
|
14
14
|
onCheckedChange?: (checked: boolean) => void
|
|
15
|
+
onCheckedStateChange?: (checked: CheckboxCheckedState) => void
|
|
16
|
+
size?: "sm" | "md" | "lg"
|
|
17
|
+
invalid?: boolean
|
|
18
|
+
allowIndeterminate?: boolean
|
|
15
19
|
}
|
|
16
20
|
|
|
17
|
-
function getNextCheckedState(checked: CheckboxCheckedState) {
|
|
18
|
-
|
|
21
|
+
function getNextCheckedState(checked: CheckboxCheckedState, allowIndeterminate: boolean) {
|
|
22
|
+
if (!allowIndeterminate) {
|
|
23
|
+
return checked === true ? false : true
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
if (checked === false) return "indeterminate"
|
|
27
|
+
if (checked === "indeterminate") return true
|
|
28
|
+
return false
|
|
19
29
|
}
|
|
20
30
|
|
|
21
31
|
const Checkbox = React.forwardRef<HTMLButtonElement, CheckboxProps>(
|
|
@@ -25,6 +35,10 @@ const Checkbox = React.forwardRef<HTMLButtonElement, CheckboxProps>(
|
|
|
25
35
|
checked,
|
|
26
36
|
defaultChecked = false,
|
|
27
37
|
onCheckedChange,
|
|
38
|
+
onCheckedStateChange,
|
|
39
|
+
size = "md",
|
|
40
|
+
invalid = false,
|
|
41
|
+
allowIndeterminate = false,
|
|
28
42
|
disabled,
|
|
29
43
|
onClick,
|
|
30
44
|
children,
|
|
@@ -38,13 +52,14 @@ const Checkbox = React.forwardRef<HTMLButtonElement, CheckboxProps>(
|
|
|
38
52
|
const dataState = currentChecked === "indeterminate" ? "indeterminate" : currentChecked ? "checked" : "unchecked"
|
|
39
53
|
|
|
40
54
|
const handleClick: React.MouseEventHandler<HTMLButtonElement> = (event) => {
|
|
41
|
-
const nextChecked = getNextCheckedState(currentChecked)
|
|
55
|
+
const nextChecked = getNextCheckedState(currentChecked, allowIndeterminate)
|
|
42
56
|
|
|
43
57
|
if (!isControlled) {
|
|
44
58
|
setInternalChecked(nextChecked)
|
|
45
59
|
}
|
|
46
60
|
|
|
47
|
-
|
|
61
|
+
onCheckedStateChange?.(nextChecked)
|
|
62
|
+
onCheckedChange?.(nextChecked === true)
|
|
48
63
|
onClick?.(event)
|
|
49
64
|
}
|
|
50
65
|
|
|
@@ -55,10 +70,12 @@ const Checkbox = React.forwardRef<HTMLButtonElement, CheckboxProps>(
|
|
|
55
70
|
role="checkbox"
|
|
56
71
|
aria-checked={currentChecked === "indeterminate" ? "mixed" : currentChecked}
|
|
57
72
|
data-state={dataState}
|
|
73
|
+
data-size={size}
|
|
58
74
|
data-slot="checkbox"
|
|
59
75
|
disabled={disabled}
|
|
76
|
+
aria-invalid={invalid || undefined}
|
|
60
77
|
className={cn(
|
|
61
|
-
"peer flex
|
|
78
|
+
"peer flex shrink-0 items-center justify-center rounded-[10px] border border-input/88 bg-background text-primary-foreground shadow-[inset_0_1px_0_rgba(255,255,255,0.10)] outline-none transition-[background-color,border-color,box-shadow,color,transform] hover:border-ring/30 hover:bg-background focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/45 disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/25 data-[size=sm]:size-4 data-[size=md]:size-5 data-[size=lg]:size-6 data-[state=checked]:border-primary/28 data-[state=checked]:bg-primary data-[state=checked]:shadow-[0_10px_24px_color-mix(in_oklch,var(--primary),transparent_82%)] data-[state=indeterminate]:border-primary/28 data-[state=indeterminate]:bg-primary data-[state=indeterminate]:shadow-[0_10px_24px_color-mix(in_oklch,var(--primary),transparent_82%)] dark:border-white/12 dark:bg-white/[0.04] dark:hover:bg-white/[0.08]",
|
|
62
79
|
className
|
|
63
80
|
)}
|
|
64
81
|
onClick={handleClick}
|
|
@@ -7,9 +7,21 @@ export type CollapseProps = React.ComponentProps<"details"> & {
|
|
|
7
7
|
defaultOpen?: boolean
|
|
8
8
|
open?: boolean
|
|
9
9
|
onOpenChange?: (open: boolean) => void
|
|
10
|
+
variant?: "default" | "soft" | "ghost"
|
|
11
|
+
size?: "sm" | "md" | "lg"
|
|
10
12
|
}
|
|
11
13
|
|
|
12
|
-
function Collapse({
|
|
14
|
+
function Collapse({
|
|
15
|
+
open,
|
|
16
|
+
defaultOpen,
|
|
17
|
+
onOpenChange,
|
|
18
|
+
onToggle,
|
|
19
|
+
className,
|
|
20
|
+
children,
|
|
21
|
+
variant = "default",
|
|
22
|
+
size = "md",
|
|
23
|
+
...props
|
|
24
|
+
}: CollapseProps) {
|
|
13
25
|
const isControlled = open !== undefined
|
|
14
26
|
const [internalOpen, setInternalOpen] = React.useState(defaultOpen ?? false)
|
|
15
27
|
const currentOpen = isControlled ? open : internalOpen
|
|
@@ -17,8 +29,10 @@ function Collapse({ open, defaultOpen, onOpenChange, onToggle, className, childr
|
|
|
17
29
|
return (
|
|
18
30
|
<details
|
|
19
31
|
data-slot="collapse"
|
|
32
|
+
data-variant={variant}
|
|
33
|
+
data-size={size}
|
|
20
34
|
className={cn(
|
|
21
|
-
"group rounded-[var(--aui-card-radius,var(--radius-xl))] border border-[color:var(--aui-card-border,var(--border))] bg-card text-card-foreground shadow-[var(--aui-card-shadow,var(--aui-control-shadow,none))] transition-[background-color,border-color,box-shadow] open:border-[color:var(--aui-control-hover-border,var(--ring))]",
|
|
35
|
+
"group overflow-hidden rounded-[var(--aui-card-radius,var(--radius-xl))] border border-[color:var(--aui-card-border,var(--border))] bg-card text-card-foreground shadow-[var(--aui-card-shadow,var(--aui-control-shadow,none))] transition-[background-color,border-color,box-shadow] hover:border-[color:var(--aui-control-hover-border,var(--ring))] open:border-[color:var(--aui-control-hover-border,var(--ring))] data-[variant=soft]:bg-[color:color-mix(in_oklch,var(--muted),transparent_58%)] data-[variant=soft]:shadow-none data-[variant=ghost]:border-transparent data-[variant=ghost]:bg-transparent data-[variant=ghost]:shadow-none",
|
|
22
36
|
className
|
|
23
37
|
)}
|
|
24
38
|
onToggle={(event) => {
|
|
@@ -26,6 +40,8 @@ function Collapse({ open, defaultOpen, onOpenChange, onToggle, className, childr
|
|
|
26
40
|
const nextOpen = event.currentTarget.open
|
|
27
41
|
if (!isControlled) {
|
|
28
42
|
setInternalOpen(nextOpen)
|
|
43
|
+
} else if (nextOpen !== currentOpen) {
|
|
44
|
+
event.currentTarget.open = currentOpen
|
|
29
45
|
}
|
|
30
46
|
onOpenChange?.(nextOpen)
|
|
31
47
|
}}
|
|
@@ -40,24 +56,51 @@ function Collapse({ open, defaultOpen, onOpenChange, onToggle, className, childr
|
|
|
40
56
|
export type CollapseTriggerProps = React.ComponentProps<"summary"> & {
|
|
41
57
|
icon?: React.ReactNode
|
|
42
58
|
hideIcon?: boolean
|
|
59
|
+
size?: "sm" | "md" | "lg"
|
|
60
|
+
inset?: boolean
|
|
61
|
+
indicatorPosition?: "start" | "end"
|
|
43
62
|
}
|
|
44
63
|
|
|
45
|
-
function CollapseTrigger({
|
|
64
|
+
function CollapseTrigger({
|
|
65
|
+
icon,
|
|
66
|
+
hideIcon = false,
|
|
67
|
+
size = "md",
|
|
68
|
+
inset = false,
|
|
69
|
+
indicatorPosition = "end",
|
|
70
|
+
className,
|
|
71
|
+
children,
|
|
72
|
+
onClick,
|
|
73
|
+
...props
|
|
74
|
+
}: CollapseTriggerProps) {
|
|
75
|
+
const indicator = !hideIcon ? (
|
|
76
|
+
<span className="shrink-0 rounded-md text-muted-foreground transition-[color,transform] group-open:rotate-180 group-open:text-foreground">
|
|
77
|
+
{icon ?? <ChevronDownIcon className="size-4" />}
|
|
78
|
+
</span>
|
|
79
|
+
) : null
|
|
80
|
+
|
|
46
81
|
return (
|
|
47
82
|
<summary
|
|
48
83
|
data-slot="collapse-trigger"
|
|
84
|
+
data-size={size}
|
|
85
|
+
data-inset={inset || undefined}
|
|
86
|
+
data-indicator-position={indicatorPosition}
|
|
49
87
|
className={cn(
|
|
50
|
-
"
|
|
88
|
+
"rounded-[calc(var(--aui-card-radius,var(--radius-xl))-1px)] group-open:rounded-b-none flex cursor-pointer list-none items-start gap-3 px-4 text-sm font-semibold outline-none transition-[background-color,color,box-shadow,border-radius] hover:bg-[color:var(--aui-control-surface-hover,var(--muted))] focus-visible:bg-[color:var(--aui-control-surface-hover,var(--muted))] focus-visible:shadow-[0_0_0_1px_var(--aui-focus-ring,var(--ring)),0_0_0_5px_var(--aui-focus-ring-soft,transparent)] group-open:text-foreground data-[indicator-position=end]:justify-between data-[indicator-position=start]:justify-start data-[size=sm]:py-2.5 data-[size=md]:py-3.5 data-[size=lg]:py-4.5 data-[inset=true]:px-5 [&::-webkit-details-marker]:hidden",
|
|
89
|
+
props["aria-disabled"] && "cursor-not-allowed opacity-75 hover:bg-transparent",
|
|
51
90
|
className
|
|
52
91
|
)}
|
|
92
|
+
onClick={(event) => {
|
|
93
|
+
if (props["aria-disabled"]) {
|
|
94
|
+
event.preventDefault()
|
|
95
|
+
return
|
|
96
|
+
}
|
|
97
|
+
onClick?.(event)
|
|
98
|
+
}}
|
|
53
99
|
{...props}
|
|
54
100
|
>
|
|
101
|
+
{indicatorPosition === "start" ? indicator : null}
|
|
55
102
|
<span className="min-w-0 flex-1">{children}</span>
|
|
56
|
-
{
|
|
57
|
-
<span className="shrink-0 rounded-md text-muted-foreground transition-[color,transform] group-open:rotate-180 group-open:text-foreground">
|
|
58
|
-
{icon ?? <ChevronDownIcon className="size-4" />}
|
|
59
|
-
</span>
|
|
60
|
-
)}
|
|
103
|
+
{indicatorPosition === "end" ? indicator : null}
|
|
61
104
|
</summary>
|
|
62
105
|
)
|
|
63
106
|
}
|
|
@@ -67,7 +110,7 @@ function CollapseContent({ className, ...props }: React.ComponentProps<"div">) {
|
|
|
67
110
|
<div
|
|
68
111
|
data-slot="collapse-content"
|
|
69
112
|
className={cn(
|
|
70
|
-
"border-t border-[color:var(--aui-card-border,var(--border))] px-4 py-3 text-sm leading-6 text-muted-foreground",
|
|
113
|
+
"border-t border-[color:var(--aui-card-border,var(--border))] bg-[color:color-mix(in_oklch,var(--muted),transparent_70%)] px-4 py-3.5 text-sm leading-6 text-muted-foreground",
|
|
71
114
|
className
|
|
72
115
|
)}
|
|
73
116
|
{...props}
|
|
@@ -80,7 +123,14 @@ export type CollapseItem = {
|
|
|
80
123
|
title: React.ReactNode
|
|
81
124
|
content: React.ReactNode
|
|
82
125
|
description?: React.ReactNode
|
|
126
|
+
meta?: React.ReactNode
|
|
127
|
+
badge?: React.ReactNode
|
|
83
128
|
disabled?: boolean
|
|
129
|
+
disabledReason?: React.ReactNode
|
|
130
|
+
icon?: React.ReactNode
|
|
131
|
+
indicatorPosition?: CollapseTriggerProps["indicatorPosition"]
|
|
132
|
+
triggerClassName?: string
|
|
133
|
+
contentClassName?: string
|
|
84
134
|
}
|
|
85
135
|
|
|
86
136
|
export type CollapseGroupProps = React.ComponentProps<"div"> & {
|
|
@@ -89,9 +139,21 @@ export type CollapseGroupProps = React.ComponentProps<"div"> & {
|
|
|
89
139
|
value?: string | string[]
|
|
90
140
|
defaultValue?: string | string[]
|
|
91
141
|
onValueChange?: (value: string | string[]) => void
|
|
142
|
+
variant?: CollapseProps["variant"]
|
|
143
|
+
size?: CollapseTriggerProps["size"]
|
|
92
144
|
}
|
|
93
145
|
|
|
94
|
-
function CollapseGroup({
|
|
146
|
+
function CollapseGroup({
|
|
147
|
+
items,
|
|
148
|
+
type = "multiple",
|
|
149
|
+
value,
|
|
150
|
+
defaultValue,
|
|
151
|
+
onValueChange,
|
|
152
|
+
variant = "default",
|
|
153
|
+
size = "md",
|
|
154
|
+
className,
|
|
155
|
+
...props
|
|
156
|
+
}: CollapseGroupProps) {
|
|
95
157
|
const initialValue = React.useMemo(() => {
|
|
96
158
|
if (value !== undefined) return value
|
|
97
159
|
if (defaultValue !== undefined) return defaultValue
|
|
@@ -119,16 +181,35 @@ function CollapseGroup({ items, type = "multiple", value, defaultValue, onValueC
|
|
|
119
181
|
<Collapse
|
|
120
182
|
key={item.key}
|
|
121
183
|
open={isOpen(item.key)}
|
|
122
|
-
onOpenChange={(open) =>
|
|
184
|
+
onOpenChange={(open) => {
|
|
185
|
+
if (item.disabled) return
|
|
186
|
+
updateValue(item.key, open)
|
|
187
|
+
}}
|
|
188
|
+
variant={variant}
|
|
189
|
+
size={size}
|
|
123
190
|
className={cn(item.disabled && "pointer-events-none opacity-60")}
|
|
124
191
|
>
|
|
125
|
-
<CollapseTrigger
|
|
126
|
-
|
|
127
|
-
|
|
192
|
+
<CollapseTrigger
|
|
193
|
+
size={size}
|
|
194
|
+
icon={item.icon}
|
|
195
|
+
indicatorPosition={item.indicatorPosition}
|
|
196
|
+
className={item.triggerClassName}
|
|
197
|
+
aria-disabled={item.disabled || undefined}
|
|
198
|
+
title={typeof item.disabledReason === "string" ? item.disabledReason : undefined}
|
|
199
|
+
>
|
|
200
|
+
<span className="grid min-w-0 gap-0.5">
|
|
201
|
+
<span className="flex min-w-0 items-center gap-2">
|
|
202
|
+
<span className="truncate">{item.title}</span>
|
|
203
|
+
{item.badge ? <span className="shrink-0">{item.badge}</span> : null}
|
|
204
|
+
{item.meta ? <span className="ml-auto shrink-0 text-[11px] font-medium text-muted-foreground">{item.meta}</span> : null}
|
|
205
|
+
</span>
|
|
128
206
|
{item.description && <span className="text-xs font-normal text-muted-foreground">{item.description}</span>}
|
|
207
|
+
{item.disabled && item.disabledReason ? (
|
|
208
|
+
<span className="text-[11px] font-medium text-muted-foreground">{item.disabledReason}</span>
|
|
209
|
+
) : null}
|
|
129
210
|
</span>
|
|
130
211
|
</CollapseTrigger>
|
|
131
|
-
<CollapseContent>{item.content}</CollapseContent>
|
|
212
|
+
<CollapseContent className={item.contentClassName}>{item.content}</CollapseContent>
|
|
132
213
|
</Collapse>
|
|
133
214
|
))}
|
|
134
215
|
</div>
|