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
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import type { ComponentDemoMock } from "../types"
|
|
2
|
-
|
|
3
|
-
export const emptyStateMock: ComponentDemoMock = {
|
|
4
|
-
code: `import { EmptyState } from "tembro"
|
|
5
|
-
|
|
6
|
-
export function Example() {
|
|
7
|
-
return (
|
|
8
|
-
<EmptyState
|
|
9
|
-
title="No results yet"
|
|
10
|
-
description="Create your first item to unlock actions and charts."
|
|
11
|
-
actionLabel="Create item"
|
|
12
|
-
onAction={() => {
|
|
13
|
-
console.log("Create action triggered")
|
|
14
|
-
}}
|
|
15
|
-
/>
|
|
16
|
-
)
|
|
17
|
-
}`,
|
|
18
|
-
highlights: ["No-content user messaging", "Built-in action callback", "Lightweight onboarding placeholder", "Reusable for any resource list"],
|
|
19
|
-
scenarios: [
|
|
20
|
-
{ title: "First launch", description: "Guide users to create first entity in a clean state." },
|
|
21
|
-
{ title: "Filtered empty", description: "Tell users what changed filters removed all items." },
|
|
22
|
-
{ title: "Error fallback", description: "Use with loading and retry controls when data fetch fails." },
|
|
23
|
-
],
|
|
24
|
-
capabilityNotes: [
|
|
25
|
-
"Always provide a clear next action to recover from empty state.",
|
|
26
|
-
"Keep titles short and outcome oriented.",
|
|
27
|
-
"Prefer one primary action + short explanation for fastest user decision.",
|
|
28
|
-
],
|
|
29
|
-
}
|
|
30
|
-
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import * as React from "react"
|
|
2
|
-
|
|
3
|
-
import { Badge, Button, EmptyState } from "@/index"
|
|
4
|
-
|
|
5
|
-
import type { ComponentDemoProps } from "../types"
|
|
6
|
-
|
|
7
|
-
const panelClass =
|
|
8
|
-
"rounded-[22px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] p-5"
|
|
9
|
-
|
|
10
|
-
export function EmptyStateShowcase({ mode }: ComponentDemoProps) {
|
|
11
|
-
const [actionCount, setActionCount] = React.useState(0)
|
|
12
|
-
const [showEmptyFeedback, setShowEmptyFeedback] = React.useState(true)
|
|
13
|
-
|
|
14
|
-
return (
|
|
15
|
-
<div className="space-y-5">
|
|
16
|
-
<section className="rounded-[24px] border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg)] p-5 sm:p-6">
|
|
17
|
-
<div className="flex flex-col gap-6 xl:flex-row xl:items-start xl:justify-between">
|
|
18
|
-
<div className="max-w-xl">
|
|
19
|
-
<p className="text-xs font-semibold uppercase tracking-[0.26em] aui-text-muted">No-content state</p>
|
|
20
|
-
<h3 className="mt-3 text-2xl font-semibold tracking-tight aui-text-strong">Empty state should unblock the next step</h3>
|
|
21
|
-
<p className="mt-3 max-w-lg text-sm leading-6 aui-text-muted">
|
|
22
|
-
The preview should show a clear title, short explanation, and one meaningful next action. Empty state is not decorative whitespace.
|
|
23
|
-
</p>
|
|
24
|
-
</div>
|
|
25
|
-
<div className="flex flex-wrap gap-2">
|
|
26
|
-
<Badge variant="outline" className="rounded-full">No data</Badge>
|
|
27
|
-
<Badge variant="outline" className="rounded-full">One next action</Badge>
|
|
28
|
-
</div>
|
|
29
|
-
</div>
|
|
30
|
-
</section>
|
|
31
|
-
|
|
32
|
-
{showEmptyFeedback ? (
|
|
33
|
-
<EmptyState
|
|
34
|
-
title="No results found"
|
|
35
|
-
description="There is nothing to show yet. Create one item to continue."
|
|
36
|
-
actionLabel="Create first item"
|
|
37
|
-
onAction={() => setActionCount((value) => value + 1)}
|
|
38
|
-
/>
|
|
39
|
-
) : (
|
|
40
|
-
<EmptyState title="Empty state intentionally hidden" description="Use a custom fallback only when needed." />
|
|
41
|
-
)}
|
|
42
|
-
|
|
43
|
-
<div className="grid gap-4 xl:grid-cols-[0.9fr_1.1fr]">
|
|
44
|
-
<section className={panelClass}>
|
|
45
|
-
<p className="text-sm font-medium aui-text-muted">Interaction count</p>
|
|
46
|
-
<p className="mt-3 text-2xl font-semibold tracking-tight aui-text-strong">{actionCount}</p>
|
|
47
|
-
<p className="mt-2 text-sm leading-6 aui-text-muted">Use the primary CTA only for the most direct recovery path.</p>
|
|
48
|
-
</section>
|
|
49
|
-
{mode === "playground" ? (
|
|
50
|
-
<section className={panelClass}>
|
|
51
|
-
<p className="text-sm font-medium aui-text-muted">Preview controls</p>
|
|
52
|
-
<div className="mt-4 flex flex-wrap gap-2">
|
|
53
|
-
<Button size="sm" variant={showEmptyFeedback ? "default" : "outline"} onClick={() => setShowEmptyFeedback((value) => !value)}>
|
|
54
|
-
Toggle feedback
|
|
55
|
-
</Button>
|
|
56
|
-
<Button size="sm" variant="outline" onClick={() => setActionCount(0)}>
|
|
57
|
-
Reset actions
|
|
58
|
-
</Button>
|
|
59
|
-
</div>
|
|
60
|
-
</section>
|
|
61
|
-
) : null}
|
|
62
|
-
</div>
|
|
63
|
-
</div>
|
|
64
|
-
)
|
|
65
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import type { ComponentDemoMock } from "../types"
|
|
2
|
-
|
|
3
|
-
export const floatButtonMock: ComponentDemoMock = {
|
|
4
|
-
code: `import { FloatButton } from "@/index"
|
|
5
|
-
import { Plus } from "lucide-react"
|
|
6
|
-
|
|
7
|
-
export function Example() {
|
|
8
|
-
return (
|
|
9
|
-
<FloatButton placement="bottom-right">
|
|
10
|
-
<Plus className="size-4" />
|
|
11
|
-
</FloatButton>
|
|
12
|
-
)
|
|
13
|
-
}`,
|
|
14
|
-
cliCommand: "npx tembro add float-button",
|
|
15
|
-
highlights: [
|
|
16
|
-
"Fixed-position shortcut button",
|
|
17
|
-
"Placement variants across corners",
|
|
18
|
-
],
|
|
19
|
-
scenarios: [
|
|
20
|
-
{ title: "Quick action", description: "Keep add/create action always reachable." },
|
|
21
|
-
{ title: "Chat widgets", description: "Mount floating controls without complex absolute layout." },
|
|
22
|
-
],
|
|
23
|
-
}
|
|
24
|
-
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import * as React from "react"
|
|
2
|
-
|
|
3
|
-
import { FloatButton } from "@/index"
|
|
4
|
-
import { PlusIcon } from "lucide-react"
|
|
5
|
-
|
|
6
|
-
const placements = ["bottom-right", "bottom-left", "top-right", "top-left"] as const
|
|
7
|
-
|
|
8
|
-
export function FloatButtonShowcase() {
|
|
9
|
-
const [index, setIndex] = React.useState(0)
|
|
10
|
-
const placement = placements[index % placements.length]
|
|
11
|
-
|
|
12
|
-
return (
|
|
13
|
-
<div className="relative h-48 rounded-lg border bg-muted/20 p-6">
|
|
14
|
-
<p className="mb-3 text-sm text-muted-foreground">Current placement: {placement}</p>
|
|
15
|
-
<FloatButton onClick={() => setIndex((value) => value + 1)} aria-label="Open quick actions" placement={placement}>
|
|
16
|
-
<PlusIcon className="size-5" />
|
|
17
|
-
</FloatButton>
|
|
18
|
-
</div>
|
|
19
|
-
)
|
|
20
|
-
}
|
|
21
|
-
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
import type { ComponentDemoMock } from "../types"
|
|
2
|
-
|
|
3
|
-
export const formBuilderMock: ComponentDemoMock = {
|
|
4
|
-
code: `import { useForm } from "react-hook-form"
|
|
5
|
-
import {
|
|
6
|
-
FormBuilder,
|
|
7
|
-
formSection,
|
|
8
|
-
inputField,
|
|
9
|
-
phoneField,
|
|
10
|
-
switchField,
|
|
11
|
-
textareaField,
|
|
12
|
-
} from "tembro"
|
|
13
|
-
|
|
14
|
-
type DemoValues = {
|
|
15
|
-
workspace: string
|
|
16
|
-
ownerPhone: string
|
|
17
|
-
notes: string
|
|
18
|
-
isLive: boolean
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
const sections = [
|
|
22
|
-
formSection<DemoValues>({
|
|
23
|
-
id: "main",
|
|
24
|
-
title: "Workspace settings",
|
|
25
|
-
description: "Field schema, sections and disabled/readOnly behavior all live in FormBuilder config.",
|
|
26
|
-
fields: [
|
|
27
|
-
inputField<DemoValues>({ id: "workspace", props: { name: "workspace", label: "Workspace name", required: true } }),
|
|
28
|
-
phoneField<DemoValues>({ id: "ownerPhone", props: { name: "ownerPhone", label: "Owner phone" } }),
|
|
29
|
-
textareaField<DemoValues>({ id: "notes", colSpan: "full", props: { name: "notes", label: "Notes", rows: 3 } }),
|
|
30
|
-
switchField<DemoValues>({
|
|
31
|
-
id: "isLive",
|
|
32
|
-
colSpan: "full",
|
|
33
|
-
props: { name: "isLive", label: "Publish workspace", description: "Toggle public availability" },
|
|
34
|
-
}),
|
|
35
|
-
],
|
|
36
|
-
}),
|
|
37
|
-
]
|
|
38
|
-
|
|
39
|
-
export function Example() {
|
|
40
|
-
const form = useForm<DemoValues>({
|
|
41
|
-
defaultValues: {
|
|
42
|
-
workspace: "Azamat UI",
|
|
43
|
-
ownerPhone: "+998 90 123 45 67",
|
|
44
|
-
notes: "Connected form sections with submit and reset lifecycle.",
|
|
45
|
-
isLive: true,
|
|
46
|
-
},
|
|
47
|
-
})
|
|
48
|
-
|
|
49
|
-
return (
|
|
50
|
-
<FormBuilder
|
|
51
|
-
control={form.control}
|
|
52
|
-
sections={sections}
|
|
53
|
-
columns={1}
|
|
54
|
-
submitLabel="Save"
|
|
55
|
-
resetLabel="Reset"
|
|
56
|
-
disabled={false}
|
|
57
|
-
readOnly={false}
|
|
58
|
-
/>
|
|
59
|
-
)
|
|
60
|
-
}`
|
|
61
|
-
,
|
|
62
|
-
htmlCode: `<form><label for="workspace">Workspace</label><input id="workspace" value="Azamat UI" /></form>`,
|
|
63
|
-
cliCommand: "npx tembro add form-builder",
|
|
64
|
-
highlights: ["Field schema", "Sections and presets", "submitLabel / resetLabel wiring", "Disabled/readOnly passthrough", "Reusable field helpers"],
|
|
65
|
-
relatedBlockSlugs: ["settings-form", "crm-dashboard"],
|
|
66
|
-
scenarios: [
|
|
67
|
-
{ title: "Field schema validation", description: "Use typed `formSection` and helper fields for deterministic layout." },
|
|
68
|
-
{ title: "Submit + reset", description: "Pass submitLabel/resetLabel and rely on RHF formState for disabled transitions." },
|
|
69
|
-
{ title: "Custom render", description: "Inject custom field-level props through helper factories." },
|
|
70
|
-
{ title: "Read-only mode", description: "Toggle readOnly for inspect-only workflows without changing schema." },
|
|
71
|
-
],
|
|
72
|
-
capabilityNotes: [
|
|
73
|
-
"`sections` gives a single source of truth for layout and required validations.",
|
|
74
|
-
"Use `fields` for precise schema-driven field composition.",
|
|
75
|
-
"Expose submit and reset labels directly from component props so UX can match product language.",
|
|
76
|
-
"Combine `disabled` + `readOnly` for different page states like locked records and review modes.",
|
|
77
|
-
],
|
|
78
|
-
}
|
|
79
|
-
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
import * as React from "react"
|
|
2
|
-
import { useForm } from "react-hook-form"
|
|
3
|
-
|
|
4
|
-
import { Button } from "@/index"
|
|
5
|
-
import { FormBuilder, formSection, inputField, phoneField, switchField, textareaField } from "@/components/patterns/form-builder"
|
|
6
|
-
|
|
7
|
-
import type { ComponentDemoProps } from "../types"
|
|
8
|
-
|
|
9
|
-
type DemoValues = {
|
|
10
|
-
workspace: string
|
|
11
|
-
ownerPhone: string
|
|
12
|
-
notes: string
|
|
13
|
-
isLive: boolean
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export function FormBuilderShowcase({ mode }: ComponentDemoProps) {
|
|
17
|
-
const form = useForm<DemoValues>({
|
|
18
|
-
defaultValues: {
|
|
19
|
-
workspace: "Azamat UI",
|
|
20
|
-
ownerPhone: "+998 90 123 45 67",
|
|
21
|
-
notes: "Connected sections and submit/reset wiring.",
|
|
22
|
-
isLive: true,
|
|
23
|
-
},
|
|
24
|
-
})
|
|
25
|
-
|
|
26
|
-
const sections = React.useMemo(
|
|
27
|
-
() => [
|
|
28
|
-
formSection<DemoValues>({
|
|
29
|
-
id: "main",
|
|
30
|
-
title: "Workspace settings",
|
|
31
|
-
description: "Schema-driven form builder with explicit submit and reset controls.",
|
|
32
|
-
fields: [
|
|
33
|
-
inputField<DemoValues>({ id: "workspace", props: { name: "workspace", label: "Workspace", required: true } }),
|
|
34
|
-
phoneField<DemoValues>({ id: "ownerPhone", props: { name: "ownerPhone", label: "Owner phone" } }),
|
|
35
|
-
textareaField<DemoValues>({ id: "notes", colSpan: "full", props: { name: "notes", label: "Notes", rows: 3 } }),
|
|
36
|
-
switchField<DemoValues>({
|
|
37
|
-
id: "isLive",
|
|
38
|
-
colSpan: "full",
|
|
39
|
-
props: { name: "isLive", label: "Publish workspace", description: "Visible only when record is active." },
|
|
40
|
-
}),
|
|
41
|
-
],
|
|
42
|
-
}),
|
|
43
|
-
],
|
|
44
|
-
[]
|
|
45
|
-
)
|
|
46
|
-
|
|
47
|
-
return (
|
|
48
|
-
<div className="space-y-4">
|
|
49
|
-
<FormBuilder control={form.control} sections={sections} columns={1} submitLabel={mode === "playground" ? "Save workspace" : undefined} />
|
|
50
|
-
<Button type="button" variant="outline" onClick={() => form.reset()}>
|
|
51
|
-
Reset form
|
|
52
|
-
</Button>
|
|
53
|
-
</div>
|
|
54
|
-
)
|
|
55
|
-
}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import type { ComponentDemoMock } from "../types"
|
|
2
|
-
|
|
3
|
-
export const keyboardShortcutMock: ComponentDemoMock = {
|
|
4
|
-
code: `import { KeyboardShortcut } from "@/index"
|
|
5
|
-
|
|
6
|
-
export function Example() {
|
|
7
|
-
return <KeyboardShortcut keys={["Ctrl", "K"]} />
|
|
8
|
-
}`,
|
|
9
|
-
cliCommand: "npx tembro add keyboard-shortcut",
|
|
10
|
-
highlights: [
|
|
11
|
-
"Compact visual hint for one or many keys",
|
|
12
|
-
"Accepts key arrays or raw children",
|
|
13
|
-
"Useful inside command palette, docs hints and action toolbars",
|
|
14
|
-
],
|
|
15
|
-
scenarios: [
|
|
16
|
-
{ title: "Search hint", description: "Show the command palette trigger beside a search action." },
|
|
17
|
-
{ title: "Editor help", description: "Reveal save or publish shortcuts close to the action." },
|
|
18
|
-
{ title: "Docs legend", description: "Document power-user flows without adding a heavy table." },
|
|
19
|
-
],
|
|
20
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { Button, KeyboardShortcut } from "@/index"
|
|
2
|
-
|
|
3
|
-
const panelClass = "border-t border-[color:var(--aui-divider)] py-6"
|
|
4
|
-
|
|
5
|
-
export function KeyboardShortcutShowcase() {
|
|
6
|
-
return (
|
|
7
|
-
<div className="space-y-0">
|
|
8
|
-
<section className="pb-6">
|
|
9
|
-
<p className="text-xs font-semibold uppercase tracking-[0.24em] aui-text-muted">Installed display primitive</p>
|
|
10
|
-
<h3 className="mt-3 text-2xl font-semibold tracking-tight aui-text-strong">KeyboardShortcut shows power-user hints without noise</h3>
|
|
11
|
-
<p className="mt-3 max-w-2xl text-sm leading-6 aui-text-muted">
|
|
12
|
-
Keep shortcut chips short and nearby to the action they describe. They should reinforce real behavior, not decorative text.
|
|
13
|
-
</p>
|
|
14
|
-
</section>
|
|
15
|
-
|
|
16
|
-
<section className={panelClass}>
|
|
17
|
-
<div className="grid gap-6 xl:grid-cols-[1fr_360px]">
|
|
18
|
-
<div className="rounded-xl border border-[color:var(--aui-divider)] bg-[color:var(--aui-page-bg-alt)] p-4">
|
|
19
|
-
<div className="flex flex-wrap items-center gap-3">
|
|
20
|
-
<Button variant="outline">Search routes</Button>
|
|
21
|
-
<KeyboardShortcut keys={["Ctrl", "K"]} />
|
|
22
|
-
</div>
|
|
23
|
-
<div className="mt-4 flex flex-wrap items-center gap-3">
|
|
24
|
-
<Button variant="secondary">Save draft</Button>
|
|
25
|
-
<KeyboardShortcut keys={["Ctrl", "S"]} />
|
|
26
|
-
<Button>Publish</Button>
|
|
27
|
-
<KeyboardShortcut keys={["Shift", "Enter"]} />
|
|
28
|
-
</div>
|
|
29
|
-
</div>
|
|
30
|
-
|
|
31
|
-
<div className="rounded-xl border border-[color:var(--aui-divider)] p-4">
|
|
32
|
-
<p className="text-sm font-semibold aui-text-strong">Guidance</p>
|
|
33
|
-
<div className="mt-3 space-y-3 text-sm leading-6 aui-text-muted">
|
|
34
|
-
<p>Show shortcuts only where the action is relevant. Repeating the same hint everywhere weakens it.</p>
|
|
35
|
-
<p>Use concise labels like `Ctrl`, `Cmd`, `Shift`, `Enter`, not long prose inside the chip.</p>
|
|
36
|
-
</div>
|
|
37
|
-
</div>
|
|
38
|
-
</div>
|
|
39
|
-
</section>
|
|
40
|
-
</div>
|
|
41
|
-
)
|
|
42
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import type { ComponentDemoMock } from "../types"
|
|
2
|
-
|
|
3
|
-
export const mentionInputMock: ComponentDemoMock = {
|
|
4
|
-
code: `import { MentionInput } from "@/index"
|
|
5
|
-
|
|
6
|
-
export function Example() {
|
|
7
|
-
return (
|
|
8
|
-
<MentionInput
|
|
9
|
-
value="Assign @alice and @bob."
|
|
10
|
-
options={[{ label: "Alice", value: "alice" }, { label: "Bob", value: "bob" }]}
|
|
11
|
-
onValueChange={(value) => console.log(value)}
|
|
12
|
-
/>
|
|
13
|
-
)
|
|
14
|
-
}`,
|
|
15
|
-
cliCommand: "npx tembro add mention-input",
|
|
16
|
-
highlights: [
|
|
17
|
-
"Trigger-based suggestion filtering",
|
|
18
|
-
"Keyboard navigation for suggestions",
|
|
19
|
-
"Auto insert with controlled value",
|
|
20
|
-
],
|
|
21
|
-
scenarios: [
|
|
22
|
-
{ title: "Comments", description: "Mention teammates in internal notes." },
|
|
23
|
-
{ title: "Chat input", description: "Add quick user references while composing." },
|
|
24
|
-
],
|
|
25
|
-
}
|
|
26
|
-
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import * as React from "react"
|
|
2
|
-
|
|
3
|
-
import { MentionInput } from "@/index"
|
|
4
|
-
|
|
5
|
-
const defaultOptions = [
|
|
6
|
-
{ label: "Alice", value: "alice" },
|
|
7
|
-
{ label: "Bob", value: "bob" },
|
|
8
|
-
{ label: "Charlie", value: "charlie" },
|
|
9
|
-
]
|
|
10
|
-
|
|
11
|
-
export function MentionInputShowcase() {
|
|
12
|
-
const [value, setValue] = React.useState("Hi @alice, please review this task.")
|
|
13
|
-
const [mentions, setMentions] = React.useState<string[]>([])
|
|
14
|
-
|
|
15
|
-
return (
|
|
16
|
-
<div className="space-y-3">
|
|
17
|
-
<MentionInput
|
|
18
|
-
value={value}
|
|
19
|
-
options={defaultOptions}
|
|
20
|
-
onValueChange={setValue}
|
|
21
|
-
onMentionSelect={(selected) => setMentions((current) => [...new Set([...current, selected])])}
|
|
22
|
-
/>
|
|
23
|
-
<p className="text-sm text-muted-foreground">Inserted mentions: {mentions.join(", ") || "None"}</p>
|
|
24
|
-
</div>
|
|
25
|
-
)
|
|
26
|
-
}
|
|
27
|
-
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import type { ComponentDemoMock } from "../types"
|
|
2
|
-
|
|
3
|
-
export const skeletonFormMock: ComponentDemoMock = {
|
|
4
|
-
code: `import { SkeletonForm } from "@/index"
|
|
5
|
-
|
|
6
|
-
export function Example() {
|
|
7
|
-
return <SkeletonForm fields={3} showTitle columns={2} />
|
|
8
|
-
}`,
|
|
9
|
-
cliCommand: "npx tembro add skeleton-form",
|
|
10
|
-
highlights: [
|
|
11
|
-
"Form-first loading states that preserve field rhythm",
|
|
12
|
-
"Supports one- or two-column layouts",
|
|
13
|
-
"Optional title and action skeleton areas",
|
|
14
|
-
],
|
|
15
|
-
scenarios: [
|
|
16
|
-
{ title: "Settings", description: "Keep form layout stable while waiting for data." },
|
|
17
|
-
{ title: "Create form", description: "Match final structure without exposing layout jitter." },
|
|
18
|
-
],
|
|
19
|
-
}
|
|
20
|
-
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import * as React from "react"
|
|
2
|
-
|
|
3
|
-
import { Button, SkeletonForm } from "@/index"
|
|
4
|
-
|
|
5
|
-
export function SkeletonFormShowcase() {
|
|
6
|
-
const [fields, setFields] = React.useState(4)
|
|
7
|
-
const [columns, setColumns] = React.useState<1 | 2>(1)
|
|
8
|
-
const [showActions, setShowActions] = React.useState(true)
|
|
9
|
-
|
|
10
|
-
return (
|
|
11
|
-
<div className="space-y-3">
|
|
12
|
-
<div className="flex flex-wrap gap-2">
|
|
13
|
-
<Button size="sm" variant={fields === 3 ? "default" : "outline"} onClick={() => setFields(3)}>
|
|
14
|
-
3 fields
|
|
15
|
-
</Button>
|
|
16
|
-
<Button size="sm" variant={fields === 4 ? "default" : "outline"} onClick={() => setFields(4)}>
|
|
17
|
-
4 fields
|
|
18
|
-
</Button>
|
|
19
|
-
<Button size="sm" variant={columns === 1 ? "default" : "outline"} onClick={() => setColumns(1)}>
|
|
20
|
-
1 column
|
|
21
|
-
</Button>
|
|
22
|
-
<Button size="sm" variant={columns === 2 ? "default" : "outline"} onClick={() => setColumns(2)}>
|
|
23
|
-
2 columns
|
|
24
|
-
</Button>
|
|
25
|
-
<Button size="sm" variant={showActions ? "default" : "outline"} onClick={() => setShowActions((value) => !value)}>
|
|
26
|
-
{showActions ? "Actions" : "No actions"}
|
|
27
|
-
</Button>
|
|
28
|
-
</div>
|
|
29
|
-
|
|
30
|
-
<SkeletonForm fields={fields} columns={columns} showActions={showActions} />
|
|
31
|
-
</div>
|
|
32
|
-
)
|
|
33
|
-
}
|
|
34
|
-
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import type { ComponentDemoMock } from "../types"
|
|
2
|
-
|
|
3
|
-
export const skeletonTableMock: ComponentDemoMock = {
|
|
4
|
-
code: `import { SkeletonTable } from "@/index"
|
|
5
|
-
|
|
6
|
-
export function Example() {
|
|
7
|
-
return <SkeletonTable rows={4} columns={4} showHeader showToolbar />
|
|
8
|
-
}`,
|
|
9
|
-
cliCommand: "npx tembro add skeleton-table",
|
|
10
|
-
highlights: [
|
|
11
|
-
"Compact placeholder for async table loading",
|
|
12
|
-
"Supports header and action bar variants",
|
|
13
|
-
"Good fit during first-load and refetch states",
|
|
14
|
-
],
|
|
15
|
-
scenarios: [
|
|
16
|
-
{ title: "Data pages", description: "Replace with table body after fetch completes." },
|
|
17
|
-
{ title: "Search results", description: "Keep layout stable while filters run." },
|
|
18
|
-
],
|
|
19
|
-
}
|
|
20
|
-
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import * as React from "react"
|
|
2
|
-
|
|
3
|
-
import { Button, SkeletonTable } from "@/index"
|
|
4
|
-
|
|
5
|
-
export function SkeletonTableShowcase() {
|
|
6
|
-
const [showToolbar, setShowToolbar] = React.useState(true)
|
|
7
|
-
const [columns, setColumns] = React.useState(4)
|
|
8
|
-
const [rows, setRows] = React.useState(4)
|
|
9
|
-
|
|
10
|
-
return (
|
|
11
|
-
<div className="space-y-3">
|
|
12
|
-
<div className="flex flex-wrap gap-2">
|
|
13
|
-
<Button size="sm" variant={showToolbar ? "default" : "outline"} onClick={() => setShowToolbar((value) => !value)}>
|
|
14
|
-
Toolbar
|
|
15
|
-
</Button>
|
|
16
|
-
<Button size="sm" onClick={() => setColumns(3)} variant="outline">
|
|
17
|
-
3 cols
|
|
18
|
-
</Button>
|
|
19
|
-
<Button size="sm" onClick={() => setColumns(4)} variant="outline">
|
|
20
|
-
4 cols
|
|
21
|
-
</Button>
|
|
22
|
-
<Button size="sm" onClick={() => setColumns(5)} variant="outline">
|
|
23
|
-
5 cols
|
|
24
|
-
</Button>
|
|
25
|
-
<Button size="sm" onClick={() => setRows(3)} variant="outline">
|
|
26
|
-
3 rows
|
|
27
|
-
</Button>
|
|
28
|
-
<Button size="sm" onClick={() => setRows(6)} variant="outline">
|
|
29
|
-
6 rows
|
|
30
|
-
</Button>
|
|
31
|
-
</div>
|
|
32
|
-
|
|
33
|
-
<SkeletonTable rows={rows} columns={columns} showHeader showToolbar={showToolbar} />
|
|
34
|
-
</div>
|
|
35
|
-
)
|
|
36
|
-
}
|
|
37
|
-
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import type { ComponentDemoMock } from "../types"
|
|
2
|
-
|
|
3
|
-
export const stackMock: ComponentDemoMock = {
|
|
4
|
-
code: `import { Button, Stack } from "@/index"
|
|
5
|
-
|
|
6
|
-
export function Example() {
|
|
7
|
-
return (
|
|
8
|
-
<Stack gap="lg" splitAfter={<Button size="sm">Secondary</Button>}>
|
|
9
|
-
<div className="text-sm">Primary action</div>
|
|
10
|
-
<div className="text-sm">Status line</div>
|
|
11
|
-
</Stack>
|
|
12
|
-
)
|
|
13
|
-
}`,
|
|
14
|
-
cliCommand: "npx tembro add stack",
|
|
15
|
-
highlights: [
|
|
16
|
-
"Flexible vertical layout helper",
|
|
17
|
-
"Split insert points without extra wrappers",
|
|
18
|
-
"Consistent spacing with simple gap presets",
|
|
19
|
-
],
|
|
20
|
-
scenarios: [
|
|
21
|
-
{ title: "Form stack", description: "Stable form section spacing." },
|
|
22
|
-
{ title: "Card body", description: "Build readable content groups quickly." },
|
|
23
|
-
{ title: "Settings page", description: "Keep labels and controls in order." },
|
|
24
|
-
],
|
|
25
|
-
}
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { Button, Divider, Stack } from "@/index"
|
|
2
|
-
|
|
3
|
-
export function StackShowcase() {
|
|
4
|
-
return (
|
|
5
|
-
<div className="space-y-4">
|
|
6
|
-
<Stack gap="sm">
|
|
7
|
-
<p className="text-sm text-muted-foreground">Small gap stack keeps controls close.</p>
|
|
8
|
-
<Button size="sm">Primary</Button>
|
|
9
|
-
<Button size="sm" variant="outline">
|
|
10
|
-
Secondary
|
|
11
|
-
</Button>
|
|
12
|
-
</Stack>
|
|
13
|
-
|
|
14
|
-
<Divider />
|
|
15
|
-
|
|
16
|
-
<Stack gap="xl" splitAfter={<p className="text-sm text-muted-foreground">Action barrier</p>}>
|
|
17
|
-
<p className="text-sm">Large gap for grouped blocks.</p>
|
|
18
|
-
<p className="text-sm">SplitAfter inserts a stable divider point without nested wrappers.</p>
|
|
19
|
-
</Stack>
|
|
20
|
-
</div>
|
|
21
|
-
)
|
|
22
|
-
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import type { ComponentDemoMock } from "../types"
|
|
2
|
-
|
|
3
|
-
export const tagListMock: ComponentDemoMock = {
|
|
4
|
-
code: `import * as React from "react"
|
|
5
|
-
import { TagList } from "@/index"
|
|
6
|
-
|
|
7
|
-
export function Example() {
|
|
8
|
-
const [items, setItems] = React.useState([
|
|
9
|
-
{ key: "react", label: "React" },
|
|
10
|
-
{ key: "typescript", label: "TypeScript" },
|
|
11
|
-
{ key: "design-system", label: "Design system" },
|
|
12
|
-
])
|
|
13
|
-
|
|
14
|
-
return <TagList items={items} removable onRemove={(item) => setItems((list) => list.filter((entry) => entry.key !== item.key))} />
|
|
15
|
-
}`,
|
|
16
|
-
cliCommand: "npx tembro add tag-list",
|
|
17
|
-
highlights: [
|
|
18
|
-
"Compact badge-based collection of labels",
|
|
19
|
-
"Optional remove actions for editable taxonomies",
|
|
20
|
-
"Useful for skills, filters, product areas, and metadata chips",
|
|
21
|
-
],
|
|
22
|
-
scenarios: [
|
|
23
|
-
{ title: "Skill chips", description: "Show categorized labels without building a full tag input field." },
|
|
24
|
-
{ title: "Selected filters", description: "Summarize active states at the top of a page." },
|
|
25
|
-
{ title: "Editable metadata", description: "Allow small remove actions on existing labels." },
|
|
26
|
-
],
|
|
27
|
-
}
|