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
|
@@ -15,14 +15,12 @@ import {
|
|
|
15
15
|
CodeBlock,
|
|
16
16
|
ColorInput,
|
|
17
17
|
CopyButton,
|
|
18
|
-
CopyField,
|
|
19
|
-
DataState,
|
|
20
|
-
Descriptions,
|
|
21
|
-
Divider,
|
|
22
|
-
DualListPicker,
|
|
23
|
-
|
|
24
|
-
EntityCard,
|
|
25
|
-
FilterChips,
|
|
18
|
+
CopyField,
|
|
19
|
+
DataState,
|
|
20
|
+
Descriptions,
|
|
21
|
+
Divider,
|
|
22
|
+
DualListPicker,
|
|
23
|
+
FilterBar,
|
|
26
24
|
Heading,
|
|
27
25
|
Input,
|
|
28
26
|
JsonInput,
|
|
@@ -482,31 +480,29 @@ function renderGenericPreviewSurface(
|
|
|
482
480
|
)
|
|
483
481
|
}
|
|
484
482
|
|
|
485
|
-
if (item.slug === "
|
|
486
|
-
return (
|
|
487
|
-
<div className="grid gap-3">
|
|
488
|
-
<
|
|
489
|
-
chips={[
|
|
490
|
-
{ key: "status", label: "Status", value: "Active", tone: "success" },
|
|
491
|
-
{ key: "owner", label: "Owner", value: "Azamat", tone: "default" },
|
|
492
|
-
{ key: "region", label: "Region", value: "APAC", tone: "info" },
|
|
493
|
-
]}
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
/>
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
)
|
|
509
|
-
}
|
|
483
|
+
if (item.slug === "data-table-saved-filters") {
|
|
484
|
+
return (
|
|
485
|
+
<div className="grid gap-3">
|
|
486
|
+
<FilterBar
|
|
487
|
+
chips={[
|
|
488
|
+
{ key: "status", label: "Status", value: "Active", tone: "success" },
|
|
489
|
+
{ key: "owner", label: "Owner", value: "Azamat", tone: "default" },
|
|
490
|
+
{ key: "region", label: "Region", value: "APAC", tone: "info" },
|
|
491
|
+
]}
|
|
492
|
+
onRemoveChip={() => undefined}
|
|
493
|
+
onReset={() => undefined}
|
|
494
|
+
/>
|
|
495
|
+
<ButtonGroup
|
|
496
|
+
attached={false}
|
|
497
|
+
items={[
|
|
498
|
+
{ key: "default", label: "Default", variant: "secondary" },
|
|
499
|
+
{ key: "billing", label: "Billing" },
|
|
500
|
+
{ key: "ops", label: "Operations" },
|
|
501
|
+
]}
|
|
502
|
+
/>
|
|
503
|
+
</div>
|
|
504
|
+
)
|
|
505
|
+
}
|
|
510
506
|
|
|
511
507
|
if (item.slug === "anchor-nav") {
|
|
512
508
|
return (
|
|
@@ -564,16 +560,6 @@ function renderGenericPreviewSurface(
|
|
|
564
560
|
)
|
|
565
561
|
}
|
|
566
562
|
|
|
567
|
-
if (item.slug === "empty-search-state") {
|
|
568
|
-
return (
|
|
569
|
-
<EmptyState
|
|
570
|
-
title="No matching components"
|
|
571
|
-
description="Try a shorter keyword or switch to a broader family."
|
|
572
|
-
action={<Button size="sm">Clear search</Button>}
|
|
573
|
-
/>
|
|
574
|
-
)
|
|
575
|
-
}
|
|
576
|
-
|
|
577
563
|
if (item.slug === "data-list" || item.slug === "list") {
|
|
578
564
|
return (
|
|
579
565
|
<List
|
|
@@ -586,18 +572,6 @@ function renderGenericPreviewSurface(
|
|
|
586
572
|
)
|
|
587
573
|
}
|
|
588
574
|
|
|
589
|
-
if (item.slug === "entity-card" || item.slug === "file-card") {
|
|
590
|
-
return (
|
|
591
|
-
<EntityCard
|
|
592
|
-
title={item.slug === "file-card" ? "Design-spec.pdf" : "Azamat Workspace"}
|
|
593
|
-
description={item.slug === "file-card" ? "Shared with 4 reviewers." : "Admin console and live dashboard route."}
|
|
594
|
-
status={<Badge variant="secondary">Live</Badge>}
|
|
595
|
-
meta={item.slug === "file-card" ? "2.4 MB" : "Updated 8 min ago"}
|
|
596
|
-
actions={<Button size="sm" variant="outline">Open</Button>}
|
|
597
|
-
/>
|
|
598
|
-
)
|
|
599
|
-
}
|
|
600
|
-
|
|
601
575
|
if (item.slug === "status-legend") {
|
|
602
576
|
return (
|
|
603
577
|
<StatusLegend
|
|
@@ -625,26 +599,6 @@ function renderGenericPreviewSurface(
|
|
|
625
599
|
)
|
|
626
600
|
}
|
|
627
601
|
|
|
628
|
-
if (item.slug === "entity-header") {
|
|
629
|
-
return (
|
|
630
|
-
<Card>
|
|
631
|
-
<CardContent className="flex flex-col gap-4 p-5 sm:flex-row sm:items-start sm:justify-between">
|
|
632
|
-
<div className="space-y-2">
|
|
633
|
-
<Badge variant="outline">Customer</Badge>
|
|
634
|
-
<div>
|
|
635
|
-
<h3 className="text-xl font-semibold">Acme Holdings</h3>
|
|
636
|
-
<p className="text-sm text-muted-foreground">Enterprise account with billing and admin ownership.</p>
|
|
637
|
-
</div>
|
|
638
|
-
</div>
|
|
639
|
-
<div className="flex gap-2">
|
|
640
|
-
<Button variant="outline" size="sm">Archive</Button>
|
|
641
|
-
<Button size="sm">Edit</Button>
|
|
642
|
-
</div>
|
|
643
|
-
</CardContent>
|
|
644
|
-
</Card>
|
|
645
|
-
)
|
|
646
|
-
}
|
|
647
|
-
|
|
648
602
|
if (item.slug === "notification-center") {
|
|
649
603
|
return (
|
|
650
604
|
<List
|
|
@@ -831,30 +785,57 @@ function renderGenericPreviewSurface(
|
|
|
831
785
|
)
|
|
832
786
|
}
|
|
833
787
|
|
|
834
|
-
if (item.category === "Overlay") {
|
|
835
|
-
return (
|
|
836
|
-
<div className="rounded-2xl border border-
|
|
837
|
-
<
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
|
|
845
|
-
|
|
846
|
-
|
|
847
|
-
|
|
848
|
-
|
|
849
|
-
|
|
850
|
-
<
|
|
851
|
-
<
|
|
852
|
-
</div>
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
788
|
+
if (item.category === "Overlay") {
|
|
789
|
+
return (
|
|
790
|
+
<div className="grid gap-4 rounded-2xl border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] p-5">
|
|
791
|
+
<div className="flex items-center justify-between gap-4">
|
|
792
|
+
<div>
|
|
793
|
+
<p className="text-sm font-semibold text-[color:var(--aui-page-foreground)]">{item.title}</p>
|
|
794
|
+
<p className="mt-2 max-w-xl text-sm leading-6 text-[color:var(--aui-page-muted)]">
|
|
795
|
+
Overlay surfaces should stay compact, focused, and secondary to the route behind them.
|
|
796
|
+
</p>
|
|
797
|
+
</div>
|
|
798
|
+
<Badge variant="outline">Overlay</Badge>
|
|
799
|
+
</div>
|
|
800
|
+
|
|
801
|
+
<div className="rounded-2xl border border-dashed border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg-alt)] p-4">
|
|
802
|
+
<div className="flex flex-wrap items-center justify-end gap-2">
|
|
803
|
+
<Button variant="ghost">Cancel</Button>
|
|
804
|
+
<Button variant="outline">Save draft</Button>
|
|
805
|
+
<Button>Confirm</Button>
|
|
806
|
+
</div>
|
|
807
|
+
</div>
|
|
808
|
+
</div>
|
|
809
|
+
)
|
|
810
|
+
}
|
|
811
|
+
|
|
812
|
+
if (item.category === "Data Display") {
|
|
813
|
+
return (
|
|
814
|
+
<div className="grid gap-4 rounded-2xl border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] p-5">
|
|
815
|
+
<div className="flex items-center justify-between gap-4">
|
|
816
|
+
<div>
|
|
817
|
+
<p className="text-lg font-semibold">{item.title}</p>
|
|
818
|
+
<p className="mt-1 text-sm text-muted-foreground">Display surfaces should prioritize readable values, compact metadata, and clear scanning order.</p>
|
|
819
|
+
</div>
|
|
820
|
+
<Badge variant="outline">{mode}</Badge>
|
|
821
|
+
</div>
|
|
822
|
+
|
|
823
|
+
<div className="grid gap-3 md:grid-cols-3">
|
|
824
|
+
{[
|
|
825
|
+
{ label: "Primary value", value: "84.2k", note: "Strong first read" },
|
|
826
|
+
{ label: "Supporting meta", value: "12 teams", note: "Context stays secondary" },
|
|
827
|
+
{ label: "Status", value: "Live", note: "One concise badge or tone" },
|
|
828
|
+
].map((entry) => (
|
|
829
|
+
<div key={entry.label} className="rounded-2xl border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg-alt)] px-4 py-3">
|
|
830
|
+
<p className="text-xs uppercase tracking-[0.18em] text-muted-foreground">{entry.label}</p>
|
|
831
|
+
<p className="mt-2 text-lg font-semibold text-[color:var(--aui-page-foreground)]">{entry.value}</p>
|
|
832
|
+
<p className="mt-1 text-sm text-muted-foreground">{entry.note}</p>
|
|
833
|
+
</div>
|
|
834
|
+
))}
|
|
835
|
+
</div>
|
|
836
|
+
</div>
|
|
837
|
+
)
|
|
838
|
+
}
|
|
858
839
|
|
|
859
840
|
return (
|
|
860
841
|
<div className="rounded-2xl border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] p-5">
|
|
@@ -8,12 +8,14 @@ const docsItems = [
|
|
|
8
8
|
{
|
|
9
9
|
key: "tokens",
|
|
10
10
|
title: "Theme tokens stay in one place",
|
|
11
|
+
meta: "P0",
|
|
11
12
|
description: "Radius, color and shadow should not be redefined per route.",
|
|
12
13
|
content: "Use shared CSS tokens so consumers can adapt the system without fighting deeply nested component styles.",
|
|
13
14
|
},
|
|
14
15
|
{
|
|
15
16
|
key: "surface",
|
|
16
17
|
title: "One canonical public surface",
|
|
18
|
+
badge: <Badge variant="secondary">Core</Badge>,
|
|
17
19
|
description: "Teach one entry point before helper members.",
|
|
18
20
|
content: "Start with Input, Select, DataTable, Card and Badge. Move aliases and advanced members lower in the docs hierarchy.",
|
|
19
21
|
},
|
|
@@ -21,6 +23,7 @@ const docsItems = [
|
|
|
21
23
|
key: "demo",
|
|
22
24
|
title: "Real demos beat placeholder previews",
|
|
23
25
|
description: "Each route should prove the actual component behavior.",
|
|
26
|
+
meta: "Docs",
|
|
24
27
|
content: "A docs page should show the real installed component with interactive state, not a generic substitute card.",
|
|
25
28
|
},
|
|
26
29
|
] as const
|
|
@@ -29,12 +32,14 @@ const releaseItems = [
|
|
|
29
32
|
{
|
|
30
33
|
key: "docs",
|
|
31
34
|
title: "Docs updated",
|
|
35
|
+
badge: <Badge variant="secondary">Done</Badge>,
|
|
32
36
|
description: "Public route and CLI snippet verified",
|
|
33
37
|
content: "Component detail page, API notes, and install snippet were reviewed together before release.",
|
|
34
38
|
},
|
|
35
39
|
{
|
|
36
40
|
key: "tokens",
|
|
37
41
|
title: "Visual tokens synced",
|
|
42
|
+
meta: "Review",
|
|
38
43
|
description: "No stray radius, border, or surface overrides",
|
|
39
44
|
content: "The route uses package tokens directly so the result matches what consumers install.",
|
|
40
45
|
},
|
|
@@ -42,6 +47,8 @@ const releaseItems = [
|
|
|
42
47
|
key: "qa",
|
|
43
48
|
title: "QA preview checked",
|
|
44
49
|
description: "Build and interactive preview passed",
|
|
50
|
+
disabled: true,
|
|
51
|
+
disabledReason: "Blocked until release candidate is built.",
|
|
45
52
|
content: "The component was verified with type-check and production build before push.",
|
|
46
53
|
},
|
|
47
54
|
] as const
|
|
@@ -49,6 +56,7 @@ const releaseItems = [
|
|
|
49
56
|
export function AccordionShowcase() {
|
|
50
57
|
const [singleValue, setSingleValue] = React.useState<string | string[]>("surface")
|
|
51
58
|
const [multiValue, setMultiValue] = React.useState<string | string[]>(["docs"])
|
|
59
|
+
const [variant, setVariant] = React.useState<"default" | "soft" | "ghost">("soft")
|
|
52
60
|
|
|
53
61
|
return (
|
|
54
62
|
<div className="space-y-0">
|
|
@@ -61,13 +69,25 @@ export function AccordionShowcase() {
|
|
|
61
69
|
</section>
|
|
62
70
|
|
|
63
71
|
<section className={panelClass}>
|
|
72
|
+
<div className="mb-5 flex flex-wrap gap-2">
|
|
73
|
+
{(["soft", "default", "ghost"] as const).map((item) => (
|
|
74
|
+
<button
|
|
75
|
+
key={item}
|
|
76
|
+
type="button"
|
|
77
|
+
className={`rounded-full border px-3 py-1.5 text-xs font-medium ${variant === item ? "border-primary bg-primary/10 text-foreground" : "border-[color:var(--aui-divider)] text-muted-foreground"}`}
|
|
78
|
+
onClick={() => setVariant(item)}
|
|
79
|
+
>
|
|
80
|
+
{item}
|
|
81
|
+
</button>
|
|
82
|
+
))}
|
|
83
|
+
</div>
|
|
64
84
|
<div className="grid gap-6 xl:grid-cols-[1.1fr_0.9fr]">
|
|
65
85
|
<div>
|
|
66
86
|
<p className="text-lg font-semibold aui-text-strong">Documentation flow</p>
|
|
67
87
|
<p className="mt-2 max-w-xl text-sm leading-6 aui-text-muted">
|
|
68
88
|
Single-open mode keeps the user focused on one explanation at a time.
|
|
69
89
|
</p>
|
|
70
|
-
<Accordion className="mt-5" type="single" value={singleValue} onValueChange={setSingleValue} items={[...docsItems]} />
|
|
90
|
+
<Accordion className="mt-5" type="single" variant={variant} size="lg" value={singleValue} onValueChange={setSingleValue} items={[...docsItems]} />
|
|
71
91
|
</div>
|
|
72
92
|
|
|
73
93
|
<div className="rounded-xl border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg-alt)] p-4">
|
|
@@ -100,7 +120,17 @@ export function AccordionShowcase() {
|
|
|
100
120
|
</div>
|
|
101
121
|
</div>
|
|
102
122
|
|
|
103
|
-
<Accordion
|
|
123
|
+
<Accordion
|
|
124
|
+
className="xl:mt-8"
|
|
125
|
+
type="multiple"
|
|
126
|
+
variant={variant}
|
|
127
|
+
value={multiValue}
|
|
128
|
+
onValueChange={setMultiValue}
|
|
129
|
+
items={releaseItems.map((item, index) => ({
|
|
130
|
+
...item,
|
|
131
|
+
indicatorPosition: index === 0 ? "start" : "end",
|
|
132
|
+
}))}
|
|
133
|
+
/>
|
|
104
134
|
</div>
|
|
105
135
|
</section>
|
|
106
136
|
</div>
|
|
@@ -10,6 +10,7 @@ const panelClass =
|
|
|
10
10
|
|
|
11
11
|
export function ActionMenuShowcase({ mode }: ComponentDemoProps) {
|
|
12
12
|
const [lastAction, setLastAction] = React.useState("No action selected")
|
|
13
|
+
const [pinOpen, setPinOpen] = React.useState(false)
|
|
13
14
|
|
|
14
15
|
return (
|
|
15
16
|
<div className="space-y-5">
|
|
@@ -38,10 +39,11 @@ export function ActionMenuShowcase({ mode }: ComponentDemoProps) {
|
|
|
38
39
|
</div>
|
|
39
40
|
<ActionMenu
|
|
40
41
|
label="Invoice actions"
|
|
42
|
+
closeOnSelect={!pinOpen}
|
|
41
43
|
actions={[
|
|
42
|
-
{ key: "open", label: "Open details", icon: <ExternalLinkIcon className="size-4" />, onSelect: async () => setLastAction("Opened invoice details") },
|
|
43
|
-
{ key: "duplicate", label: "Duplicate", icon: <CopyIcon className="size-4" />, onSelect: async () => setLastAction("Duplicated invoice workflow") },
|
|
44
|
-
{ key: "archive", label: "Archive", icon: <ArchiveIcon className="size-4" />, destructive: true, onSelect: async () => setLastAction("Archived invoice workflow") },
|
|
44
|
+
{ key: "open", section: "Primary", label: "Open details", description: "Jump into the full invoice route", icon: <ExternalLinkIcon className="size-4" />, shortcut: "↵", onSelect: async () => setLastAction("Opened invoice details") },
|
|
45
|
+
{ key: "duplicate", section: "Primary", label: "Duplicate", description: "Create a new workflow from this one", icon: <CopyIcon className="size-4" />, keepOpen: pinOpen, onSelect: async () => setLastAction("Duplicated invoice workflow") },
|
|
46
|
+
{ key: "archive", section: "Danger zone", label: "Archive", description: "Hide it from active operational queues", icon: <ArchiveIcon className="size-4" />, destructive: true, onSelect: async () => setLastAction("Archived invoice workflow") },
|
|
45
47
|
]}
|
|
46
48
|
/>
|
|
47
49
|
</div>
|
|
@@ -49,6 +51,13 @@ export function ActionMenuShowcase({ mode }: ComponentDemoProps) {
|
|
|
49
51
|
<section className={panelClass}>
|
|
50
52
|
<p className="text-sm font-medium aui-text-muted">Last action</p>
|
|
51
53
|
<p className="mt-3 text-base font-medium aui-text-strong">{lastAction}</p>
|
|
54
|
+
<button
|
|
55
|
+
type="button"
|
|
56
|
+
className="mt-4 rounded-full border border-[color:var(--aui-divider)] px-3 py-1.5 text-xs font-medium"
|
|
57
|
+
onClick={() => setPinOpen((value) => !value)}
|
|
58
|
+
>
|
|
59
|
+
{pinOpen ? "Close on select off" : "Close on select on"}
|
|
60
|
+
</button>
|
|
52
61
|
</section>
|
|
53
62
|
</div>
|
|
54
63
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from "react"
|
|
2
2
|
|
|
3
|
-
import { ActivityFeed } from "@/index"
|
|
3
|
+
import { ActivityFeed, Badge, Button } from "@/index"
|
|
4
4
|
|
|
5
5
|
import type { ComponentDemoProps } from "../types"
|
|
6
6
|
|
|
@@ -18,6 +18,7 @@ type ToneFilter = (typeof toneFilters)[number]
|
|
|
18
18
|
export function ActivityFeedShowcase({ mode }: ComponentDemoProps) {
|
|
19
19
|
const [compact, setCompact] = React.useState(mode === "playground")
|
|
20
20
|
const [filter, setFilter] = React.useState<ToneFilter>("all")
|
|
21
|
+
const [selectedId, setSelectedId] = React.useState<string | null>(null)
|
|
21
22
|
|
|
22
23
|
const visibleItems = React.useMemo(() => {
|
|
23
24
|
if (filter === "all") {
|
|
@@ -55,10 +56,22 @@ export function ActivityFeedShowcase({ mode }: ComponentDemoProps) {
|
|
|
55
56
|
<ActivityFeed
|
|
56
57
|
title="Recent activity"
|
|
57
58
|
description="System and team events are grouped into one lightweight feed."
|
|
58
|
-
items={visibleItems
|
|
59
|
+
items={visibleItems.map((item, index) => ({
|
|
60
|
+
...item,
|
|
61
|
+
unread: index === 0,
|
|
62
|
+
badge: index === 0 ? <Badge variant="secondary">Unread</Badge> : undefined,
|
|
63
|
+
interactive: true,
|
|
64
|
+
onSelect: () => setSelectedId(item.id),
|
|
65
|
+
actions: (
|
|
66
|
+
<Button size="xs" variant="ghost" onClick={() => setSelectedId(item.id)}>
|
|
67
|
+
Review
|
|
68
|
+
</Button>
|
|
69
|
+
),
|
|
70
|
+
}))}
|
|
59
71
|
compact={compact}
|
|
60
72
|
empty={<span className="aui-text-muted text-sm">No matching activity for selected tone.</span>}
|
|
61
73
|
/>
|
|
74
|
+
<div className="aui-text-muted text-sm">Selected item: {selectedId ?? "none"}</div>
|
|
62
75
|
</div>
|
|
63
76
|
)
|
|
64
77
|
}
|
|
@@ -12,6 +12,7 @@ const tones = ["info", "success", "warning", "destructive"] as const
|
|
|
12
12
|
export function AlertShowcase({ mode }: ComponentDemoProps) {
|
|
13
13
|
const [toneIndex, setToneIndex] = React.useState(2)
|
|
14
14
|
const [resolvedCount, setResolvedCount] = React.useState(0)
|
|
15
|
+
const [visible, setVisible] = React.useState(true)
|
|
15
16
|
|
|
16
17
|
const tone = tones[toneIndex] ?? "warning"
|
|
17
18
|
|
|
@@ -33,24 +34,35 @@ export function AlertShowcase({ mode }: ComponentDemoProps) {
|
|
|
33
34
|
</div>
|
|
34
35
|
</section>
|
|
35
36
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
37
|
+
{visible ? (
|
|
38
|
+
<Alert
|
|
39
|
+
tone={tone}
|
|
40
|
+
dismissible
|
|
41
|
+
onDismiss={() => setVisible(false)}
|
|
42
|
+
title={tone === "success" ? "Workspace synced" : tone === "destructive" ? "Action blocked" : tone === "info" ? "Heads up" : "Review needed"}
|
|
43
|
+
description={
|
|
44
|
+
tone === "success"
|
|
45
|
+
? "Changes were saved and the team can continue safely."
|
|
46
|
+
: tone === "destructive"
|
|
47
|
+
? "The release cannot continue until billing permissions are restored."
|
|
48
|
+
: tone === "info"
|
|
49
|
+
? "Usage data refreshed and one metric changed since your last visit."
|
|
50
|
+
: "Billing rules changed and one approval is pending before publish."
|
|
51
|
+
}
|
|
52
|
+
action={
|
|
53
|
+
<Button size="sm" variant={tone === "destructive" ? "destructive" : "default"} onClick={() => setResolvedCount((value) => value + 1)}>
|
|
54
|
+
{tone === "success" ? "Continue" : tone === "destructive" ? "Fix access" : tone === "info" ? "Open details" : "Open review"}
|
|
55
|
+
</Button>
|
|
56
|
+
}
|
|
57
|
+
/>
|
|
58
|
+
) : (
|
|
59
|
+
<section className={panelClass}>
|
|
60
|
+
<p className="text-sm font-medium aui-text-muted">Alert dismissed</p>
|
|
61
|
+
<Button className="mt-4" size="sm" variant="outline" onClick={() => setVisible(true)}>
|
|
62
|
+
Restore alert
|
|
51
63
|
</Button>
|
|
52
|
-
|
|
53
|
-
|
|
64
|
+
</section>
|
|
65
|
+
)}
|
|
54
66
|
|
|
55
67
|
<div className="grid gap-4 xl:grid-cols-[0.9fr_1.1fr]">
|
|
56
68
|
<section className={panelClass}>
|
|
@@ -83,6 +95,9 @@ export function AlertShowcase({ mode }: ComponentDemoProps) {
|
|
|
83
95
|
<Button size="sm" variant="outline" onClick={() => setResolvedCount(0)}>
|
|
84
96
|
Reset counter
|
|
85
97
|
</Button>
|
|
98
|
+
<Button size="sm" variant="outline" onClick={() => setVisible(true)}>
|
|
99
|
+
Show alert
|
|
100
|
+
</Button>
|
|
86
101
|
</div>
|
|
87
102
|
</section>
|
|
88
103
|
) : null}
|
|
@@ -11,6 +11,9 @@ export function AlertDialogShowcase({ mode }: ComponentDemoProps) {
|
|
|
11
11
|
const [open, setOpen] = React.useState(false)
|
|
12
12
|
const [loading, setLoading] = React.useState(false)
|
|
13
13
|
const [lastResult, setLastResult] = React.useState("No action confirmed yet")
|
|
14
|
+
const [strictMode, setStrictMode] = React.useState(true)
|
|
15
|
+
const [caseSensitive, setCaseSensitive] = React.useState(true)
|
|
16
|
+
const [shouldFail, setShouldFail] = React.useState(false)
|
|
14
17
|
|
|
15
18
|
return (
|
|
16
19
|
<div className="space-y-5">
|
|
@@ -36,9 +39,20 @@ export function AlertDialogShowcase({ mode }: ComponentDemoProps) {
|
|
|
36
39
|
<p className="text-sm font-medium aui-text-muted">Live destructive flow</p>
|
|
37
40
|
<p className="mt-2 text-sm leading-6 aui-text-muted">Open the dialog and confirm a risky workspace action.</p>
|
|
38
41
|
</div>
|
|
39
|
-
<
|
|
40
|
-
|
|
41
|
-
|
|
42
|
+
<div className="flex flex-wrap gap-2">
|
|
43
|
+
<Button variant={caseSensitive ? "secondary" : "outline"} onClick={() => setCaseSensitive((value) => !value)}>
|
|
44
|
+
{caseSensitive ? "Case sensitive" : "Case insensitive"}
|
|
45
|
+
</Button>
|
|
46
|
+
<Button variant={strictMode ? "secondary" : "outline"} onClick={() => setStrictMode((value) => !value)}>
|
|
47
|
+
{strictMode ? "Typed confirm on" : "Typed confirm off"}
|
|
48
|
+
</Button>
|
|
49
|
+
<Button variant={shouldFail ? "warning" : "outline"} onClick={() => setShouldFail((value) => !value)}>
|
|
50
|
+
{shouldFail ? "Failure mode on" : "Failure mode off"}
|
|
51
|
+
</Button>
|
|
52
|
+
<Button variant="destructive" onClick={() => setOpen(true)}>
|
|
53
|
+
Delete workspace
|
|
54
|
+
</Button>
|
|
55
|
+
</div>
|
|
42
56
|
</div>
|
|
43
57
|
</section>
|
|
44
58
|
|
|
@@ -62,13 +76,24 @@ export function AlertDialogShowcase({ mode }: ComponentDemoProps) {
|
|
|
62
76
|
title="Delete workspace?"
|
|
63
77
|
description="This removes active billing rules, API tokens, and member access from the selected workspace."
|
|
64
78
|
actionLabel="Delete workspace"
|
|
79
|
+
confirmValue={strictMode ? "DELETE" : undefined}
|
|
80
|
+
confirmCaseSensitive={caseSensitive}
|
|
81
|
+
confirmLabel="High-risk confirmation"
|
|
82
|
+
confirmDescription="Type DELETE to confirm you want to remove this workspace and its active access."
|
|
83
|
+
severityNote="Deleting a workspace clears active access, billing rules, and route-level secrets for the current team."
|
|
84
|
+
errorMessage="Workspace could not be deleted right now. Check dependent billing or retry."
|
|
65
85
|
onAction={async () => {
|
|
66
86
|
setLoading(true)
|
|
67
87
|
await new Promise((resolve) => window.setTimeout(resolve, 450))
|
|
88
|
+
if (shouldFail) {
|
|
89
|
+
setLoading(false)
|
|
90
|
+
throw new Error("dependent billing")
|
|
91
|
+
}
|
|
68
92
|
setLoading(false)
|
|
69
93
|
setOpen(false)
|
|
70
94
|
setLastResult("Workspace deletion confirmed")
|
|
71
95
|
}}
|
|
96
|
+
onActionError={() => setLastResult("Workspace deletion failed")}
|
|
72
97
|
/>
|
|
73
98
|
|
|
74
99
|
{mode === "playground" ? (
|
|
@@ -2,7 +2,7 @@ import type { ComponentDemoMock } from "../types"
|
|
|
2
2
|
|
|
3
3
|
export const asyncMultiSelectMock: ComponentDemoMock = {
|
|
4
4
|
code: `import { useState } from "react"
|
|
5
|
-
import {
|
|
5
|
+
import { AsyncSelect } from "tembro"
|
|
6
6
|
|
|
7
7
|
const projectOptions = [
|
|
8
8
|
{ value: "analytics", label: "Analytics", description: "Dashboards and reports" },
|
|
@@ -25,7 +25,8 @@ export function Example() {
|
|
|
25
25
|
|
|
26
26
|
return (
|
|
27
27
|
<div className="space-y-3">
|
|
28
|
-
<
|
|
28
|
+
<AsyncSelect
|
|
29
|
+
isMulti
|
|
29
30
|
value={selected}
|
|
30
31
|
onValueChange={(values) => setSelected(values)}
|
|
31
32
|
loadOptions={loadProjectOptions}
|
|
@@ -43,8 +44,8 @@ export function Example() {
|
|
|
43
44
|
}`
|
|
44
45
|
,
|
|
45
46
|
htmlCode: `<button data-slot="async-multiselect-trigger">Choose modules</button>`,
|
|
46
|
-
cliCommand: "npx tembro add async-
|
|
47
|
-
highlights: ["
|
|
47
|
+
cliCommand: "npx tembro add async-select",
|
|
48
|
+
highlights: ["Multi-value remote tags", "maxSelected guard", "select-all action", "canonical isMulti flow"],
|
|
48
49
|
relatedBlockSlugs: ["users-table", "crm-dashboard", "settings-form"],
|
|
49
50
|
scenarios: [
|
|
50
51
|
{ title: "Project scope", description: "Attach multiple modules to one workspace or permission set." },
|
|
@@ -53,7 +54,7 @@ export function Example() {
|
|
|
53
54
|
{ title: "Async updates", description: "Keep tags synced with changing remote data." },
|
|
54
55
|
],
|
|
55
56
|
capabilityNotes: [
|
|
56
|
-
"
|
|
57
|
+
"Prefer `AsyncSelect isMulti` for sparse multi-select forms where dataset changes over time.",
|
|
57
58
|
"Show clear limits with `maxSelected` and help text from validation.",
|
|
58
59
|
"`onValueChange` returns both ids and resolved options when custom payloads are needed.",
|
|
59
60
|
"Disable close-on-select when users are likely to make batch picks.",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { useState } from "react"
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { AsyncSelect, type AsyncSelectOption } from "@/index"
|
|
4
4
|
|
|
5
5
|
const moduleOptions: AsyncSelectOption[] = [
|
|
6
6
|
{ value: "inbox", label: "Inbox" },
|
|
@@ -21,12 +21,13 @@ export function AsyncMultiSelectShowcase() {
|
|
|
21
21
|
return (
|
|
22
22
|
<div className="space-y-4">
|
|
23
23
|
<div className="rounded-[20px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg-alt)] p-4">
|
|
24
|
-
<p className="text-sm font-medium aui-text-strong">
|
|
24
|
+
<p className="text-sm font-medium aui-text-strong">Use AsyncSelect with isMulti for remote multi-value flows</p>
|
|
25
25
|
<p className="mt-2 text-sm leading-6 aui-text-muted">
|
|
26
|
-
|
|
26
|
+
Keep the Select family centered on one remote surface. This route documents the multi-value mode, but new code should stay on AsyncSelect.
|
|
27
27
|
</p>
|
|
28
28
|
</div>
|
|
29
|
-
<
|
|
29
|
+
<AsyncSelect
|
|
30
|
+
isMulti
|
|
30
31
|
value={selected}
|
|
31
32
|
onValueChange={(values) => setSelected(values)}
|
|
32
33
|
loadOptions={loadModules}
|
|
@@ -2,7 +2,7 @@ import type { ComponentDemoMock } from "../types"
|
|
|
2
2
|
|
|
3
3
|
export const asyncSelectMock: ComponentDemoMock = {
|
|
4
4
|
code: `import { useState } from "react"
|
|
5
|
-
import { AsyncSelect, type AsyncSelectOption } from "
|
|
5
|
+
import { AsyncSelect, type AsyncSelectOption } from "tembro"
|
|
6
6
|
|
|
7
7
|
const seedOptions: AsyncSelectOption[] = [
|
|
8
8
|
{ value: "acme", label: "ACME", description: "Core product line" },
|