tembro 2.0.3 → 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 -8
- package/dist/components/display/index.js +21 -29
- 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/demo.cjs +1 -1
- package/dist/components/form/demo.js +1 -2
- 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.d.ts +0 -1
- package/dist/components/form/index.js +11 -12
- package/dist/components/form/public.cjs +1 -1
- package/dist/components/form/public.d.ts +0 -9
- package/dist/components/form/public.js +7 -16
- 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/index.cjs +1 -1
- package/dist/components/inputs/index.d.ts +0 -2
- package/dist/components/inputs/index.js +3 -5
- package/dist/components/inputs/public.cjs +1 -1
- package/dist/components/inputs/public.d.ts +0 -2
- package/dist/components/inputs/public.js +3 -5
- 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.d.ts +0 -1
- package/dist/components/layout/index.js +4 -5
- package/dist/components/layout/public.cjs +1 -1
- package/dist/components/layout/public.d.ts +0 -1
- package/dist/components/layout/public.js +2 -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/modern/index.cjs +1 -1
- package/dist/components/modern/index.d.ts +0 -4
- package/dist/components/modern/index.js +12 -16
- 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 +145 -177
- package/dist/public-component-surface.cjs +1 -1
- package/dist/public-component-surface.js +0 -80
- 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 +287 -451
- 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 +467 -574
- 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 -24
- 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 -59
- 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 -8
- 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/demo.tsx +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/index.ts +0 -1
- package/packages/cli/vendor/src/components/form/public.ts +0 -11
- 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/index.ts +0 -2
- package/packages/cli/vendor/src/components/inputs/public.ts +0 -2
- 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/index.ts +0 -1
- package/packages/cli/vendor/src/components/layout/public.ts +0 -1
- 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/modern/index.ts +1 -5
- 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 -16
- 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 +83 -263
- 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 -46
- 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 -30
- 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 +206 -280
- package/registry.json +251 -329
- package/dist/components/display/aspect-ratio.cjs +0 -1
- package/dist/components/display/aspect-ratio.d.ts +0 -6
- package/dist/components/display/aspect-ratio.js +0 -21
- 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/display/float-button.cjs +0 -1
- package/dist/components/display/float-button.d.ts +0 -6
- package/dist/components/display/float-button.js +0 -20
- package/dist/components/display/key-value-card.cjs +0 -1
- package/dist/components/display/key-value-card.d.ts +0 -16
- package/dist/components/display/key-value-card.js +0 -35
- package/dist/components/display/keyboard-shortcut.cjs +0 -1
- package/dist/components/display/keyboard-shortcut.d.ts +0 -7
- package/dist/components/display/keyboard-shortcut.js +0 -18
- package/dist/components/display/skeleton-form.cjs +0 -1
- package/dist/components/display/skeleton-form.d.ts +0 -9
- package/dist/components/display/skeleton-form.js +0 -31
- package/dist/components/display/skeleton-table.cjs +0 -1
- package/dist/components/display/skeleton-table.d.ts +0 -9
- package/dist/components/display/skeleton-table.js +0 -42
- package/dist/components/display/tag-list.cjs +0 -1
- package/dist/components/display/tag-list.d.ts +0 -17
- package/dist/components/display/tag-list.js +0 -30
- package/dist/components/display/watermark.cjs +0 -1
- package/dist/components/display/watermark.d.ts +0 -6
- package/dist/components/display/watermark.js +0 -23
- 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/form/repeater-field.cjs +0 -1
- package/dist/components/form/repeater-field.d.ts +0 -16
- package/dist/components/form/repeater-field.js +0 -48
- package/dist/components/inputs/cascader.cjs +0 -1
- package/dist/components/inputs/cascader.d.ts +0 -13
- package/dist/components/inputs/cascader.js +0 -58
- package/dist/components/inputs/mention-input.cjs +0 -1
- package/dist/components/inputs/mention-input.d.ts +0 -18
- package/dist/components/inputs/mention-input.js +0 -96
- package/dist/components/layout/stack.cjs +0 -1
- package/dist/components/layout/stack.d.ts +0 -23
- package/dist/components/layout/stack.js +0 -57
- package/dist/components/modern/affix.cjs +0 -1
- package/dist/components/modern/affix.d.ts +0 -7
- package/dist/components/modern/affix.js +0 -18
- 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/affix/index.cjs +0 -1
- package/dist/showcase/premium/affix/index.d.ts +0 -2
- package/dist/showcase/premium/affix/index.js +0 -3
- package/dist/showcase/premium/affix/mock.cjs +0 -12
- package/dist/showcase/premium/affix/mock.d.ts +0 -2
- package/dist/showcase/premium/affix/mock.js +0 -15
- package/dist/showcase/premium/affix/showcase.cjs +0 -1
- package/dist/showcase/premium/affix/showcase.d.ts +0 -2
- package/dist/showcase/premium/affix/showcase.js +0 -64
- package/dist/showcase/premium/aspect-ratio/index.cjs +0 -1
- package/dist/showcase/premium/aspect-ratio/index.d.ts +0 -2
- package/dist/showcase/premium/aspect-ratio/index.js +0 -3
- package/dist/showcase/premium/aspect-ratio/mock.cjs +0 -11
- package/dist/showcase/premium/aspect-ratio/mock.d.ts +0 -2
- package/dist/showcase/premium/aspect-ratio/mock.js +0 -26
- package/dist/showcase/premium/aspect-ratio/showcase.cjs +0 -1
- package/dist/showcase/premium/aspect-ratio/showcase.d.ts +0 -2
- package/dist/showcase/premium/aspect-ratio/showcase.js +0 -53
- package/dist/showcase/premium/cascader/index.cjs +0 -1
- package/dist/showcase/premium/cascader/index.d.ts +0 -2
- package/dist/showcase/premium/cascader/index.js +0 -3
- package/dist/showcase/premium/cascader/mock.cjs +0 -9
- package/dist/showcase/premium/cascader/mock.d.ts +0 -2
- package/dist/showcase/premium/cascader/mock.js +0 -19
- package/dist/showcase/premium/cascader/showcase.cjs +0 -1
- package/dist/showcase/premium/cascader/showcase.d.ts +0 -2
- package/dist/showcase/premium/cascader/showcase.js +0 -43
- 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/float-button/index.cjs +0 -1
- package/dist/showcase/premium/float-button/index.d.ts +0 -2
- package/dist/showcase/premium/float-button/index.js +0 -3
- package/dist/showcase/premium/float-button/mock.cjs +0 -10
- package/dist/showcase/premium/float-button/mock.d.ts +0 -2
- package/dist/showcase/premium/float-button/mock.js +0 -15
- package/dist/showcase/premium/float-button/showcase.cjs +0 -1
- package/dist/showcase/premium/float-button/showcase.d.ts +0 -2
- package/dist/showcase/premium/float-button/showcase.js +0 -28
- 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/dist/showcase/premium/keyboard-shortcut/index.cjs +0 -1
- package/dist/showcase/premium/keyboard-shortcut/index.d.ts +0 -2
- package/dist/showcase/premium/keyboard-shortcut/index.js +0 -3
- package/dist/showcase/premium/keyboard-shortcut/mock.cjs +0 -5
- package/dist/showcase/premium/keyboard-shortcut/mock.d.ts +0 -2
- package/dist/showcase/premium/keyboard-shortcut/mock.js +0 -26
- package/dist/showcase/premium/keyboard-shortcut/showcase.cjs +0 -1
- package/dist/showcase/premium/keyboard-shortcut/showcase.d.ts +0 -1
- package/dist/showcase/premium/keyboard-shortcut/showcase.js +0 -64
- package/dist/showcase/premium/mention-input/index.cjs +0 -1
- package/dist/showcase/premium/mention-input/index.d.ts +0 -2
- package/dist/showcase/premium/mention-input/index.js +0 -3
- package/dist/showcase/premium/mention-input/mock.cjs +0 -11
- package/dist/showcase/premium/mention-input/mock.d.ts +0 -2
- package/dist/showcase/premium/mention-input/mock.js +0 -19
- package/dist/showcase/premium/mention-input/showcase.cjs +0 -1
- package/dist/showcase/premium/mention-input/showcase.d.ts +0 -2
- package/dist/showcase/premium/mention-input/showcase.js +0 -35
- package/dist/showcase/premium/skeleton-form/index.cjs +0 -1
- package/dist/showcase/premium/skeleton-form/index.d.ts +0 -2
- package/dist/showcase/premium/skeleton-form/index.js +0 -3
- package/dist/showcase/premium/skeleton-form/mock.cjs +0 -5
- package/dist/showcase/premium/skeleton-form/mock.d.ts +0 -2
- package/dist/showcase/premium/skeleton-form/mock.js +0 -19
- package/dist/showcase/premium/skeleton-form/showcase.cjs +0 -1
- package/dist/showcase/premium/skeleton-form/showcase.d.ts +0 -2
- package/dist/showcase/premium/skeleton-form/showcase.js +0 -52
- package/dist/showcase/premium/skeleton-table/index.cjs +0 -1
- package/dist/showcase/premium/skeleton-table/index.d.ts +0 -2
- package/dist/showcase/premium/skeleton-table/index.js +0 -3
- package/dist/showcase/premium/skeleton-table/mock.cjs +0 -5
- package/dist/showcase/premium/skeleton-table/mock.d.ts +0 -2
- package/dist/showcase/premium/skeleton-table/mock.js +0 -19
- package/dist/showcase/premium/skeleton-table/showcase.cjs +0 -1
- package/dist/showcase/premium/skeleton-table/showcase.d.ts +0 -2
- package/dist/showcase/premium/skeleton-table/showcase.js +0 -59
- package/dist/showcase/premium/stack/index.cjs +0 -1
- package/dist/showcase/premium/stack/index.d.ts +0 -2
- package/dist/showcase/premium/stack/index.js +0 -3
- package/dist/showcase/premium/stack/mock.cjs +0 -10
- package/dist/showcase/premium/stack/mock.d.ts +0 -2
- package/dist/showcase/premium/stack/mock.js +0 -26
- package/dist/showcase/premium/stack/showcase.cjs +0 -1
- package/dist/showcase/premium/stack/showcase.d.ts +0 -1
- package/dist/showcase/premium/stack/showcase.js +0 -47
- package/dist/showcase/premium/tag-list/index.cjs +0 -1
- package/dist/showcase/premium/tag-list/index.d.ts +0 -2
- package/dist/showcase/premium/tag-list/index.js +0 -3
- package/dist/showcase/premium/tag-list/mock.cjs +0 -12
- package/dist/showcase/premium/tag-list/mock.d.ts +0 -2
- package/dist/showcase/premium/tag-list/mock.js +0 -26
- package/dist/showcase/premium/tag-list/showcase.cjs +0 -1
- package/dist/showcase/premium/tag-list/showcase.d.ts +0 -2
- package/dist/showcase/premium/tag-list/showcase.js +0 -83
- package/dist/showcase/premium/watermark/index.cjs +0 -1
- package/dist/showcase/premium/watermark/index.d.ts +0 -2
- package/dist/showcase/premium/watermark/index.js +0 -3
- package/dist/showcase/premium/watermark/mock.cjs +0 -11
- package/dist/showcase/premium/watermark/mock.d.ts +0 -2
- package/dist/showcase/premium/watermark/mock.js +0 -26
- package/dist/showcase/premium/watermark/showcase.cjs +0 -1
- package/dist/showcase/premium/watermark/showcase.d.ts +0 -2
- package/dist/showcase/premium/watermark/showcase.js +0 -34
- package/packages/cli/vendor/src/components/display/aspect-ratio.tsx +0 -22
- 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/display/float-button.tsx +0 -27
- package/packages/cli/vendor/src/components/display/key-value-card.tsx +0 -50
- package/packages/cli/vendor/src/components/display/keyboard-shortcut.tsx +0 -31
- package/packages/cli/vendor/src/components/display/skeleton-form.tsx +0 -51
- package/packages/cli/vendor/src/components/display/skeleton-table.tsx +0 -59
- package/packages/cli/vendor/src/components/display/tag-list.tsx +0 -52
- package/packages/cli/vendor/src/components/display/watermark.tsx +0 -20
- 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/form/repeater-field.tsx +0 -93
- package/packages/cli/vendor/src/components/inputs/cascader.tsx +0 -41
- package/packages/cli/vendor/src/components/inputs/mention-input.tsx +0 -162
- package/packages/cli/vendor/src/components/layout/stack.tsx +0 -106
- package/packages/cli/vendor/src/components/modern/affix.tsx +0 -21
- 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/affix/index.ts +0 -3
- package/packages/cli/vendor/src/showcase/premium/affix/mock.ts +0 -26
- package/packages/cli/vendor/src/showcase/premium/affix/showcase.tsx +0 -37
- package/packages/cli/vendor/src/showcase/premium/aspect-ratio/index.ts +0 -2
- package/packages/cli/vendor/src/showcase/premium/aspect-ratio/mock.ts +0 -26
- package/packages/cli/vendor/src/showcase/premium/aspect-ratio/showcase.tsx +0 -37
- package/packages/cli/vendor/src/showcase/premium/cascader/index.ts +0 -3
- package/packages/cli/vendor/src/showcase/premium/cascader/mock.ts +0 -24
- package/packages/cli/vendor/src/showcase/premium/cascader/showcase.tsx +0 -20
- 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/float-button/index.ts +0 -3
- package/packages/cli/vendor/src/showcase/premium/float-button/mock.ts +0 -24
- package/packages/cli/vendor/src/showcase/premium/float-button/showcase.tsx +0 -21
- 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
- package/packages/cli/vendor/src/showcase/premium/keyboard-shortcut/index.ts +0 -2
- package/packages/cli/vendor/src/showcase/premium/keyboard-shortcut/mock.ts +0 -20
- package/packages/cli/vendor/src/showcase/premium/keyboard-shortcut/showcase.tsx +0 -42
- package/packages/cli/vendor/src/showcase/premium/mention-input/index.ts +0 -3
- package/packages/cli/vendor/src/showcase/premium/mention-input/mock.ts +0 -26
- package/packages/cli/vendor/src/showcase/premium/mention-input/showcase.tsx +0 -27
- package/packages/cli/vendor/src/showcase/premium/skeleton-form/index.ts +0 -3
- package/packages/cli/vendor/src/showcase/premium/skeleton-form/mock.ts +0 -20
- package/packages/cli/vendor/src/showcase/premium/skeleton-form/showcase.tsx +0 -34
- package/packages/cli/vendor/src/showcase/premium/skeleton-table/index.ts +0 -3
- package/packages/cli/vendor/src/showcase/premium/skeleton-table/mock.ts +0 -20
- package/packages/cli/vendor/src/showcase/premium/skeleton-table/showcase.tsx +0 -37
- package/packages/cli/vendor/src/showcase/premium/stack/index.ts +0 -2
- package/packages/cli/vendor/src/showcase/premium/stack/mock.ts +0 -25
- package/packages/cli/vendor/src/showcase/premium/stack/showcase.tsx +0 -22
- package/packages/cli/vendor/src/showcase/premium/tag-list/index.ts +0 -2
- package/packages/cli/vendor/src/showcase/premium/tag-list/mock.ts +0 -27
- package/packages/cli/vendor/src/showcase/premium/tag-list/showcase.tsx +0 -55
- package/packages/cli/vendor/src/showcase/premium/watermark/index.ts +0 -2
- package/packages/cli/vendor/src/showcase/premium/watermark/mock.ts +0 -26
- package/packages/cli/vendor/src/showcase/premium/watermark/showcase.tsx +0 -26
|
@@ -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" },
|
|
@@ -17,7 +17,9 @@ const loadOptions = async (query: string): Promise<typeof workspaceOptions> => {
|
|
|
17
17
|
|
|
18
18
|
export function AsyncSelectShowcase() {
|
|
19
19
|
const [value, setValue] = useState("")
|
|
20
|
+
const [teamValues, setTeamValues] = useState<string[]>(["north", "west"])
|
|
20
21
|
const activeOption = routeWorkspaceOptions.find((item) => item.value === value)
|
|
22
|
+
const selectedTeams = routeWorkspaceOptions.filter((item) => teamValues.includes(String(item.value)))
|
|
21
23
|
|
|
22
24
|
return (
|
|
23
25
|
<div className="space-y-5">
|
|
@@ -49,9 +51,39 @@ export function AsyncSelectShowcase() {
|
|
|
49
51
|
defaultOptions={workspaceOptions}
|
|
50
52
|
minSearchLength={1}
|
|
51
53
|
clearable
|
|
54
|
+
showSelectedDescription
|
|
52
55
|
debounceMs={220}
|
|
56
|
+
labels={{
|
|
57
|
+
placeholder: "Choose service region",
|
|
58
|
+
searchPlaceholder: "Search regions...",
|
|
59
|
+
}}
|
|
53
60
|
/>
|
|
54
61
|
</div>
|
|
62
|
+
<div className="mt-5">
|
|
63
|
+
<p className="text-sm font-medium aui-text-muted">Multi select uses the same component</p>
|
|
64
|
+
<div className="mt-3">
|
|
65
|
+
<AsyncSelect
|
|
66
|
+
isMulti
|
|
67
|
+
value={teamValues}
|
|
68
|
+
onValueChange={(nextValue) => setTeamValues(nextValue)}
|
|
69
|
+
loadOptions={loadOptions}
|
|
70
|
+
defaultOptions={workspaceOptions}
|
|
71
|
+
minSearchLength={1}
|
|
72
|
+
clearable
|
|
73
|
+
showSelectAll
|
|
74
|
+
maxSelected={3}
|
|
75
|
+
maxVisibleTags={2}
|
|
76
|
+
showSelectedDescription
|
|
77
|
+
debounceMs={220}
|
|
78
|
+
labels={{
|
|
79
|
+
multiPlaceholder: "Choose team coverage",
|
|
80
|
+
searchPlaceholder: "Search team regions...",
|
|
81
|
+
selectedCount: (count) => `${count} regions selected`,
|
|
82
|
+
hiddenSelected: (count) => `+${count} more`,
|
|
83
|
+
}}
|
|
84
|
+
/>
|
|
85
|
+
</div>
|
|
86
|
+
</div>
|
|
55
87
|
<div className="mt-4 grid gap-3 md:grid-cols-3">
|
|
56
88
|
<div className="rounded-[18px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg-alt)] px-4 py-3 text-sm">
|
|
57
89
|
<p className="font-medium aui-text-strong">Type to query</p>
|
|
@@ -83,6 +115,10 @@ export function AsyncSelectShowcase() {
|
|
|
83
115
|
<p className="text-xs uppercase tracking-[0.2em] aui-text-muted">Team</p>
|
|
84
116
|
<p className="mt-2 text-sm font-medium aui-text-strong">{activeOption ? routeWorkspaceOptions.find((item) => item.value === activeOption.value)?.team : "No team"}</p>
|
|
85
117
|
</div>
|
|
118
|
+
<div className="rounded-[18px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg-alt)] px-4 py-3">
|
|
119
|
+
<p className="text-xs uppercase tracking-[0.2em] aui-text-muted">Multi mode</p>
|
|
120
|
+
<p className="mt-2 text-sm font-medium aui-text-strong">{selectedTeams.length ? selectedTeams.map((item) => item.label).join(", ") : "No teams selected"}</p>
|
|
121
|
+
</div>
|
|
86
122
|
</div>
|
|
87
123
|
</div>
|
|
88
124
|
</div>
|
|
@@ -55,11 +55,12 @@ function StateButton({
|
|
|
55
55
|
}
|
|
56
56
|
|
|
57
57
|
return (
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
58
|
+
<Button
|
|
59
|
+
variant={variant}
|
|
60
|
+
pressed={state === "Focus"}
|
|
61
|
+
disabled={state === "Disabled"}
|
|
62
|
+
className={state === "Focus" ? "ring-2 ring-[color:var(--aui-ring)] ring-offset-2 ring-offset-[color:var(--aui-page-bg)]" : undefined}
|
|
63
|
+
>
|
|
63
64
|
{state}
|
|
64
65
|
</Button>
|
|
65
66
|
)
|
|
@@ -127,6 +128,7 @@ export function ButtonShowcase() {
|
|
|
127
128
|
<Button variant="outline">Preview</Button>
|
|
128
129
|
<Button
|
|
129
130
|
variant={selectedVariant}
|
|
131
|
+
fullWidth
|
|
130
132
|
loading={approvalState === "saving"}
|
|
131
133
|
loadingLabel="Approving"
|
|
132
134
|
onClick={approveInvoice}
|
|
@@ -136,6 +138,25 @@ export function ButtonShowcase() {
|
|
|
136
138
|
</div>
|
|
137
139
|
</div>
|
|
138
140
|
</div>
|
|
141
|
+
|
|
142
|
+
<div className="mt-6 grid gap-3 md:grid-cols-4">
|
|
143
|
+
<div className="rounded-[18px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg-alt)] px-4 py-3 text-sm">
|
|
144
|
+
<p className="font-medium aui-text-strong">Primary</p>
|
|
145
|
+
<p className="mt-2 leading-6 aui-text-muted">Main action with filled emphasis.</p>
|
|
146
|
+
</div>
|
|
147
|
+
<div className="rounded-[18px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg-alt)] px-4 py-3 text-sm">
|
|
148
|
+
<p className="font-medium aui-text-strong">Secondary</p>
|
|
149
|
+
<p className="mt-2 leading-6 aui-text-muted">Alternative action without stealing focus.</p>
|
|
150
|
+
</div>
|
|
151
|
+
<div className="rounded-[18px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg-alt)] px-4 py-3 text-sm">
|
|
152
|
+
<p className="font-medium aui-text-strong">Outline</p>
|
|
153
|
+
<p className="mt-2 leading-6 aui-text-muted">Low-emphasis action for previews and neutral workflows.</p>
|
|
154
|
+
</div>
|
|
155
|
+
<div className="rounded-[18px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg-alt)] px-4 py-3 text-sm">
|
|
156
|
+
<p className="font-medium aui-text-strong">Destructive</p>
|
|
157
|
+
<p className="mt-2 leading-6 aui-text-muted">Reserved for archive, delete, or dangerous transitions.</p>
|
|
158
|
+
</div>
|
|
159
|
+
</div>
|
|
139
160
|
</section>
|
|
140
161
|
|
|
141
162
|
<section className={panelClass}>
|
|
@@ -9,6 +9,7 @@ const panelClass =
|
|
|
9
9
|
|
|
10
10
|
export function ButtonGroupShowcase({ mode }: ComponentDemoProps) {
|
|
11
11
|
const [view, setView] = React.useState<"list" | "board" | "timeline">("list")
|
|
12
|
+
const [density, setDensity] = React.useState<"compact" | "comfortable">("comfortable")
|
|
12
13
|
|
|
13
14
|
return (
|
|
14
15
|
<div className="space-y-5">
|
|
@@ -31,16 +32,32 @@ export function ButtonGroupShowcase({ mode }: ComponentDemoProps) {
|
|
|
31
32
|
<div className="grid gap-4 xl:grid-cols-2">
|
|
32
33
|
<section className={panelClass}>
|
|
33
34
|
<ButtonGroup
|
|
35
|
+
value={view}
|
|
36
|
+
onValueChange={(next) => setView(next as typeof view)}
|
|
34
37
|
items={[
|
|
35
|
-
{ key: "list", label: "List",
|
|
36
|
-
{ key: "board", label: "Board",
|
|
37
|
-
{ key: "timeline", label: "Timeline",
|
|
38
|
+
{ key: "list", label: "List", description: "Rows first" },
|
|
39
|
+
{ key: "board", label: "Board", description: "Kanban view" },
|
|
40
|
+
{ key: "timeline", label: "Timeline", description: "Chronology" },
|
|
38
41
|
]}
|
|
39
42
|
/>
|
|
43
|
+
<div className="mt-4">
|
|
44
|
+
<ButtonGroup
|
|
45
|
+
value={density}
|
|
46
|
+
onValueChange={(next) => setDensity(next as typeof density)}
|
|
47
|
+
size="xs"
|
|
48
|
+
activeVariant="secondary"
|
|
49
|
+
allowDeselect
|
|
50
|
+
items={[
|
|
51
|
+
{ key: "comfortable", label: "Comfortable" },
|
|
52
|
+
{ key: "compact", label: "Compact" },
|
|
53
|
+
]}
|
|
54
|
+
/>
|
|
55
|
+
</div>
|
|
40
56
|
</section>
|
|
41
57
|
<section className={panelClass}>
|
|
42
58
|
<p className="text-sm font-medium aui-text-muted">Selected view</p>
|
|
43
59
|
<p className="mt-3 text-base font-medium aui-text-strong">{view}</p>
|
|
60
|
+
<p className="mt-2 text-sm aui-text-muted">Density: {density || "none"}</p>
|
|
44
61
|
</section>
|
|
45
62
|
</div>
|
|
46
63
|
|
|
@@ -48,6 +48,9 @@ export function CalendarShowcase({ mode }: ComponentDemoProps) {
|
|
|
48
48
|
disabledDates={blockedDates}
|
|
49
49
|
numberOfMonths={monthCount}
|
|
50
50
|
pagedNavigation
|
|
51
|
+
showClearShortcut
|
|
52
|
+
showTodayShortcut
|
|
53
|
+
showSelectionSummary
|
|
51
54
|
/>
|
|
52
55
|
</div>
|
|
53
56
|
</section>
|
|
@@ -63,6 +66,8 @@ export function CalendarShowcase({ mode }: ComponentDemoProps) {
|
|
|
63
66
|
min="2026-07-01"
|
|
64
67
|
max="2026-07-31"
|
|
65
68
|
disabledDates={blockedDates}
|
|
69
|
+
showClearShortcut
|
|
70
|
+
showSelectionSummary
|
|
66
71
|
/>
|
|
67
72
|
</div>
|
|
68
73
|
</section>
|
|
@@ -3,15 +3,17 @@ import * as React from "react"
|
|
|
3
3
|
import { Button, Carousel, CarouselItem } from "@/index"
|
|
4
4
|
|
|
5
5
|
const steps = [
|
|
6
|
-
{ title: "Onboarding", text: "Guide quickly from first login." },
|
|
7
|
-
{ title: "Components", text: "Review ready-made dashboard patterns." },
|
|
8
|
-
{ title: "Release", text: "Publish, test, and iterate faster." },
|
|
6
|
+
{ title: "Onboarding", text: "Guide quickly from first login.", tone: "Launch" },
|
|
7
|
+
{ title: "Components", text: "Review ready-made dashboard patterns.", tone: "Library" },
|
|
8
|
+
{ title: "Release", text: "Publish, test, and iterate faster.", tone: "Ship" },
|
|
9
9
|
]
|
|
10
10
|
|
|
11
11
|
export function CarouselShowcase() {
|
|
12
12
|
const [showArrows, setShowArrows] = React.useState(true)
|
|
13
13
|
const [showDots, setShowDots] = React.useState(true)
|
|
14
|
+
const [autoplay, setAutoplay] = React.useState(false)
|
|
14
15
|
const [index, setIndex] = React.useState(0)
|
|
16
|
+
const [playing, setPlaying] = React.useState(false)
|
|
15
17
|
|
|
16
18
|
return (
|
|
17
19
|
<div className="space-y-5">
|
|
@@ -22,6 +24,23 @@ export function CarouselShowcase() {
|
|
|
22
24
|
<Button size="sm" variant={showDots ? "default" : "outline"} onClick={() => setShowDots((value) => !value)}>
|
|
23
25
|
{showDots ? "Hide" : "Show"} dots
|
|
24
26
|
</Button>
|
|
27
|
+
<Button size="sm" variant={autoplay ? "default" : "outline"} onClick={() => setAutoplay((value) => !value)}>
|
|
28
|
+
{autoplay ? "Stop" : "Start"} autoplay
|
|
29
|
+
</Button>
|
|
30
|
+
</div>
|
|
31
|
+
|
|
32
|
+
<div className="grid gap-3 md:grid-cols-3">
|
|
33
|
+
{steps.map((step, slideIndex) => (
|
|
34
|
+
<Button
|
|
35
|
+
key={step.title}
|
|
36
|
+
type="button"
|
|
37
|
+
variant={index === slideIndex ? "default" : "outline"}
|
|
38
|
+
className="justify-start"
|
|
39
|
+
onClick={() => setIndex(slideIndex)}
|
|
40
|
+
>
|
|
41
|
+
{slideIndex + 1}. {step.title}
|
|
42
|
+
</Button>
|
|
43
|
+
))}
|
|
25
44
|
</div>
|
|
26
45
|
|
|
27
46
|
<Carousel
|
|
@@ -29,24 +48,33 @@ export function CarouselShowcase() {
|
|
|
29
48
|
loop
|
|
30
49
|
showArrows={showArrows}
|
|
31
50
|
showDots={showDots}
|
|
51
|
+
autoplay={autoplay}
|
|
52
|
+
autoplayInterval={2200}
|
|
53
|
+
showPlaybackControl
|
|
32
54
|
onIndexChange={(next) => setIndex(next)}
|
|
55
|
+
onAutoplayChange={setPlaying}
|
|
33
56
|
previousLabel="Previous slide"
|
|
34
57
|
nextLabel="Next slide"
|
|
35
58
|
>
|
|
36
59
|
{steps.map((step, slideIndex) => (
|
|
37
60
|
<CarouselItem key={step.title}>
|
|
38
|
-
<div className="rounded-xl border border-border bg-card p-8">
|
|
39
|
-
|
|
61
|
+
<div className="min-h-56 rounded-xl border border-border bg-card p-8">
|
|
62
|
+
<div className="flex items-start justify-between gap-3">
|
|
40
63
|
<div className="grid gap-2">
|
|
64
|
+
<p className="text-[11px] font-semibold uppercase tracking-[0.24em] text-primary">{step.tone}</p>
|
|
41
65
|
<p className="text-xs font-semibold uppercase tracking-[0.2em] text-muted-foreground">{`Slide ${slideIndex + 1}`}</p>
|
|
42
66
|
<h3 className="text-lg font-semibold text-foreground">{step.title}</h3>
|
|
43
67
|
<p className="text-sm text-muted-foreground">{step.text}</p>
|
|
44
68
|
</div>
|
|
69
|
+
<div className="rounded-full border border-border/70 px-3 py-1 text-xs text-muted-foreground">
|
|
70
|
+
{slideIndex + 1}/{steps.length}
|
|
71
|
+
</div>
|
|
45
72
|
</div>
|
|
46
73
|
</div>
|
|
47
74
|
</CarouselItem>
|
|
48
75
|
))}
|
|
49
76
|
</Carousel>
|
|
77
|
+
<div className="text-sm text-muted-foreground">Playback: {playing || autoplay ? "active" : "paused"}</div>
|
|
50
78
|
</div>
|
|
51
79
|
)
|
|
52
80
|
}
|
|
@@ -8,6 +8,8 @@ const panelClass =
|
|
|
8
8
|
"rounded-[22px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] p-5"
|
|
9
9
|
|
|
10
10
|
export function CheckboxShowcase({ state, setState }: ComponentDemoProps) {
|
|
11
|
+
const triState = state.checked ? "checked" : state.textValue === "mixed" ? "mixed" : "unchecked"
|
|
12
|
+
|
|
11
13
|
return (
|
|
12
14
|
<div className="space-y-5">
|
|
13
15
|
<section className="rounded-[24px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] p-5 sm:p-6">
|
|
@@ -27,13 +29,51 @@ export function CheckboxShowcase({ state, setState }: ComponentDemoProps) {
|
|
|
27
29
|
</div>
|
|
28
30
|
</div>
|
|
29
31
|
|
|
30
|
-
<div className="mt-6 grid gap-3">
|
|
32
|
+
<div className="mt-6 grid gap-3 md:grid-cols-3">
|
|
33
|
+
<div className={`${panelClass} flex items-start gap-3`}>
|
|
34
|
+
<Checkbox
|
|
35
|
+
size="lg"
|
|
36
|
+
allowIndeterminate
|
|
37
|
+
checked={triState === "mixed" ? "indeterminate" : triState === "checked"}
|
|
38
|
+
onCheckedStateChange={(checked) => {
|
|
39
|
+
if (checked === "indeterminate") {
|
|
40
|
+
setState({ checked: false, textValue: "mixed" })
|
|
41
|
+
} else if (checked) {
|
|
42
|
+
setState({ checked: true, textValue: "checked" })
|
|
43
|
+
} else {
|
|
44
|
+
setState({ checked: false, textValue: "unchecked" })
|
|
45
|
+
}
|
|
46
|
+
}}
|
|
47
|
+
/>
|
|
48
|
+
<div>
|
|
49
|
+
<p className="text-sm font-medium aui-text-strong">Approval state</p>
|
|
50
|
+
<p className="mt-1 text-sm aui-text-muted">Use `indeterminate` when not all child tasks are complete.</p>
|
|
51
|
+
</div>
|
|
52
|
+
</div>
|
|
53
|
+
<div className={`${panelClass} flex items-start gap-3`}>
|
|
54
|
+
<Checkbox size="lg" checked="indeterminate" />
|
|
55
|
+
<div>
|
|
56
|
+
<p className="text-sm font-medium aui-text-strong">Indeterminate</p>
|
|
57
|
+
<p className="mt-1 text-sm aui-text-muted">Useful for parent rows and bulk selection summaries.</p>
|
|
58
|
+
</div>
|
|
59
|
+
</div>
|
|
60
|
+
<div className={`${panelClass} flex items-start gap-3`}>
|
|
61
|
+
<Checkbox size="lg" checked disabled />
|
|
62
|
+
<div>
|
|
63
|
+
<p className="text-sm font-medium aui-text-strong">Disabled selected</p>
|
|
64
|
+
<p className="mt-1 text-sm aui-text-muted">Shows permission-locked completion without becoming clickable.</p>
|
|
65
|
+
</div>
|
|
66
|
+
</div>
|
|
67
|
+
</div>
|
|
68
|
+
|
|
69
|
+
<div className="mt-3 grid gap-3">
|
|
31
70
|
{checkboxDemoItems.map((item, index) => (
|
|
32
71
|
<label key={item.label} htmlFor={item.id} className={`${panelClass} flex items-start gap-3`}>
|
|
33
72
|
<Checkbox
|
|
34
73
|
id={item.id}
|
|
35
74
|
checked={index === 0 ? state.checked : item.checked}
|
|
36
75
|
disabled={item.disabled}
|
|
76
|
+
invalid={index === 0 && triState === "unchecked"}
|
|
37
77
|
onCheckedChange={index === 0 ? (checked) => setState({ checked: Boolean(checked) }) : undefined}
|
|
38
78
|
defaultChecked={index > 0 ? item.checked : undefined}
|
|
39
79
|
/>
|
|
@@ -51,10 +91,10 @@ export function CheckboxShowcase({ state, setState }: ComponentDemoProps) {
|
|
|
51
91
|
<div>
|
|
52
92
|
<p className="text-xs font-semibold uppercase tracking-[0.24em] aui-text-muted">Live state</p>
|
|
53
93
|
<h4 className="mt-2 text-lg font-semibold aui-text-strong">
|
|
54
|
-
Release checklist is {
|
|
94
|
+
Release checklist is {triState}
|
|
55
95
|
</h4>
|
|
56
96
|
<p className="mt-2 text-sm leading-6 aui-text-muted">
|
|
57
|
-
Toggle the first row or use these actions to verify controlled checkbox behavior.
|
|
97
|
+
Toggle the first row or use these actions to verify controlled tri-state checkbox behavior.
|
|
58
98
|
</p>
|
|
59
99
|
</div>
|
|
60
100
|
<div className="flex flex-wrap gap-2">
|
|
@@ -64,6 +104,9 @@ export function CheckboxShowcase({ state, setState }: ComponentDemoProps) {
|
|
|
64
104
|
<Button type="button" size="sm" variant="secondary" onClick={() => setState({ checked: false })}>
|
|
65
105
|
Disable
|
|
66
106
|
</Button>
|
|
107
|
+
<Button type="button" size="sm" variant="outline" onClick={() => setState({ checked: false, textValue: "mixed" })}>
|
|
108
|
+
Set mixed
|
|
109
|
+
</Button>
|
|
67
110
|
</div>
|
|
68
111
|
</div>
|
|
69
112
|
</section>
|
|
@@ -2,20 +2,22 @@ import type { ComponentDemoMock } from "../types"
|
|
|
2
2
|
|
|
3
3
|
export const clearableInputMock: ComponentDemoMock = {
|
|
4
4
|
code: `import * as React from "react"
|
|
5
|
-
import {
|
|
5
|
+
import { Input } from "tembro"
|
|
6
6
|
|
|
7
7
|
export function Example() {
|
|
8
8
|
const [value, setValue] = React.useState("workspace token")
|
|
9
9
|
|
|
10
10
|
return (
|
|
11
|
-
<
|
|
11
|
+
<Input
|
|
12
12
|
value={value}
|
|
13
13
|
onValueChange={setValue}
|
|
14
14
|
placeholder="Filter or paste value..."
|
|
15
|
+
clearable
|
|
15
16
|
clearOnEscape
|
|
16
17
|
/>
|
|
17
18
|
)
|
|
18
19
|
}`,
|
|
20
|
+
cliCommand: "npx tembro add input",
|
|
19
21
|
highlights: ["Inline clear action", "Escape-to-clear support", "Focus restore after clearing", "Small but high-frequency utility input"],
|
|
20
22
|
scenarios: [
|
|
21
23
|
{ title: "Filter reset", description: "Let users clear a short filter without hunting for an extra reset button." },
|
|
@@ -23,7 +25,7 @@ export function Example() {
|
|
|
23
25
|
{ title: "Toolbar utility", description: "Use in dense admin bars where compact cleanup matters." },
|
|
24
26
|
],
|
|
25
27
|
capabilityNotes: [
|
|
26
|
-
"
|
|
28
|
+
"Prefer `Input clearable` for short-lived values like filters and quick entry.",
|
|
27
29
|
"Escape clear is useful only when the input is frequently changed.",
|
|
28
30
|
"Keep the field visually quiet so the clear action feels secondary.",
|
|
29
31
|
],
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as React from "react"
|
|
2
2
|
|
|
3
|
-
import { Badge,
|
|
3
|
+
import { Badge, Input } from "@/index"
|
|
4
4
|
|
|
5
5
|
import type { ComponentDemoProps } from "../types"
|
|
6
6
|
|
|
@@ -29,11 +29,14 @@ export function ClearableInputShowcase({ mode }: ComponentDemoProps) {
|
|
|
29
29
|
</section>
|
|
30
30
|
|
|
31
31
|
<section className={panelClass}>
|
|
32
|
-
<
|
|
32
|
+
<Input
|
|
33
33
|
value={value}
|
|
34
34
|
onValueChange={setValue}
|
|
35
35
|
placeholder="Filter or paste value..."
|
|
36
|
+
clearable
|
|
36
37
|
clearOnEscape
|
|
38
|
+
trailingAction={<span className="text-xs aui-text-muted">Live filter</span>}
|
|
39
|
+
replaceTrailingWhenClear={false}
|
|
37
40
|
/>
|
|
38
41
|
</section>
|
|
39
42
|
|
|
@@ -9,6 +9,7 @@ const collapseItems = [
|
|
|
9
9
|
{
|
|
10
10
|
key: "permissions",
|
|
11
11
|
title: "Permissions",
|
|
12
|
+
badge: <Badge variant="secondary">Core</Badge>,
|
|
12
13
|
description: "Who can publish, archive, and rename library surfaces.",
|
|
13
14
|
content: "Owners can publish. Editors can update docs. Reviewers can inspect previews and comment on API shape.",
|
|
14
15
|
},
|
|
@@ -16,12 +17,15 @@ const collapseItems = [
|
|
|
16
17
|
key: "release",
|
|
17
18
|
title: "Release notes",
|
|
18
19
|
description: "What changed in the current package cycle.",
|
|
20
|
+
meta: "July",
|
|
19
21
|
content: "This release opened more public docs coverage for interactive form and overlay surfaces.",
|
|
20
22
|
},
|
|
21
23
|
{
|
|
22
24
|
key: "handoff",
|
|
23
25
|
title: "Handoff checklist",
|
|
24
26
|
description: "What must be checked before a public release.",
|
|
27
|
+
disabled: true,
|
|
28
|
+
disabledReason: "Unlock after release branch is cut.",
|
|
25
29
|
content: "Typecheck, lint, build, smoke routes, verify copy feedback, and confirm component docs route integrity.",
|
|
26
30
|
},
|
|
27
31
|
] as const
|