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,21 +0,0 @@
|
|
|
1
|
-
import * as React from "react"
|
|
2
|
-
|
|
3
|
-
import { cn } from "@/lib/utils"
|
|
4
|
-
|
|
5
|
-
export type AffixProps = React.ComponentProps<"div"> & {
|
|
6
|
-
offsetTop?: number
|
|
7
|
-
zIndex?: number
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
function Affix({ offsetTop = 0, zIndex = 30, className, style, ...props }: AffixProps) {
|
|
11
|
-
return (
|
|
12
|
-
<div
|
|
13
|
-
data-slot="affix"
|
|
14
|
-
className={cn("sticky", className)}
|
|
15
|
-
style={{ top: offsetTop, zIndex, ...style }}
|
|
16
|
-
{...props}
|
|
17
|
-
/>
|
|
18
|
-
)
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export { Affix }
|
|
@@ -1,443 +0,0 @@
|
|
|
1
|
-
import * as React from "react"
|
|
2
|
-
import type { Control, FieldPath, FieldValues } from "react-hook-form"
|
|
3
|
-
|
|
4
|
-
import { Button } from "@/components/ui/button"
|
|
5
|
-
import { FormInput, type FormInputProps } from "@/components/form/form-input"
|
|
6
|
-
import { FormTextarea, type FormTextareaProps } from "@/components/form/form-textarea"
|
|
7
|
-
import { FormSelect, type FormSelectProps } from "@/components/form/form-select"
|
|
8
|
-
import { FormAsyncSelect, type FormAsyncSelectProps } from "@/components/form/form-async-select"
|
|
9
|
-
import { FormSwitch, type FormSwitchProps } from "@/components/form/form-switch"
|
|
10
|
-
import { FormNumberInput, type FormNumberInputProps } from "@/components/form/form-number-input"
|
|
11
|
-
import { FormPhoneInput, type FormPhoneInputProps } from "@/components/form/form-phone-input"
|
|
12
|
-
import { FormDateInput, type FormDateInputProps } from "@/components/form/form-date-input"
|
|
13
|
-
import {
|
|
14
|
-
FormDateRangeInput,
|
|
15
|
-
type FormDateRangeInputProps,
|
|
16
|
-
} from "@/components/form/form-date-range-input"
|
|
17
|
-
import { cn } from "@/lib/utils"
|
|
18
|
-
|
|
19
|
-
export type FormBuilderLayout = "grid" | "stack"
|
|
20
|
-
export type FormBuilderDensity = "compact" | "default" | "comfortable"
|
|
21
|
-
|
|
22
|
-
export type FormBuilderFieldRenderContext<TFieldValues extends FieldValues> = {
|
|
23
|
-
control: Control<TFieldValues>
|
|
24
|
-
disabled?: boolean
|
|
25
|
-
readOnly?: boolean
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
type BaseFormBuilderField = {
|
|
29
|
-
id: string
|
|
30
|
-
hidden?: boolean
|
|
31
|
-
className?: string
|
|
32
|
-
colSpan?: 1 | 2 | 3 | 4 | "full"
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
export type FormBuilderCustomField<TFieldValues extends FieldValues> = BaseFormBuilderField & {
|
|
36
|
-
type: "custom"
|
|
37
|
-
render: (context: FormBuilderFieldRenderContext<TFieldValues>) => React.ReactNode
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
export type FormBuilderInputField<
|
|
41
|
-
TFieldValues extends FieldValues,
|
|
42
|
-
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
|
|
43
|
-
> = BaseFormBuilderField & {
|
|
44
|
-
type: "input"
|
|
45
|
-
props: Omit<FormInputProps<TFieldValues, TName>, "control">
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export type FormBuilderTextareaField<
|
|
49
|
-
TFieldValues extends FieldValues,
|
|
50
|
-
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
|
|
51
|
-
> = BaseFormBuilderField & {
|
|
52
|
-
type: "textarea"
|
|
53
|
-
props: Omit<FormTextareaProps<TFieldValues, TName>, "control">
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
export type FormBuilderSelectField<
|
|
57
|
-
TFieldValues extends FieldValues,
|
|
58
|
-
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
|
|
59
|
-
> = BaseFormBuilderField & {
|
|
60
|
-
type: "select"
|
|
61
|
-
props: Omit<FormSelectProps<TFieldValues, TName>, "control">
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
export type FormBuilderAsyncSelectField<
|
|
65
|
-
TFieldValues extends FieldValues,
|
|
66
|
-
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
|
|
67
|
-
> = BaseFormBuilderField & {
|
|
68
|
-
type: "async-select"
|
|
69
|
-
props: Omit<FormAsyncSelectProps<TFieldValues, TName>, "control">
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
export type FormBuilderSwitchField<
|
|
73
|
-
TFieldValues extends FieldValues,
|
|
74
|
-
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
|
|
75
|
-
> = BaseFormBuilderField & {
|
|
76
|
-
type: "switch"
|
|
77
|
-
props: Omit<FormSwitchProps<TFieldValues, TName>, "control">
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
export type FormBuilderNumberField<
|
|
81
|
-
TFieldValues extends FieldValues,
|
|
82
|
-
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
|
|
83
|
-
> = BaseFormBuilderField & {
|
|
84
|
-
type: "number"
|
|
85
|
-
props: Omit<FormNumberInputProps<TFieldValues, TName>, "control">
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
export type FormBuilderPhoneField<
|
|
89
|
-
TFieldValues extends FieldValues,
|
|
90
|
-
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
|
|
91
|
-
> = BaseFormBuilderField & {
|
|
92
|
-
type: "phone"
|
|
93
|
-
props: Omit<FormPhoneInputProps<TFieldValues, TName>, "control">
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
export type FormBuilderDateField<
|
|
97
|
-
TFieldValues extends FieldValues,
|
|
98
|
-
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
|
|
99
|
-
> = BaseFormBuilderField & {
|
|
100
|
-
type: "date"
|
|
101
|
-
props: Omit<FormDateInputProps<TFieldValues, TName>, "control">
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
export type FormBuilderDateRangeField<
|
|
105
|
-
TFieldValues extends FieldValues,
|
|
106
|
-
TFromName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
|
|
107
|
-
TToName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
|
|
108
|
-
> = BaseFormBuilderField & {
|
|
109
|
-
type: "date-range"
|
|
110
|
-
props: Omit<FormDateRangeInputProps<TFieldValues, TFromName, TToName>, "control">
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
export type FormBuilderField<TFieldValues extends FieldValues> =
|
|
114
|
-
| FormBuilderCustomField<TFieldValues>
|
|
115
|
-
| FormBuilderInputField<TFieldValues>
|
|
116
|
-
| FormBuilderTextareaField<TFieldValues>
|
|
117
|
-
| FormBuilderSelectField<TFieldValues>
|
|
118
|
-
| FormBuilderAsyncSelectField<TFieldValues>
|
|
119
|
-
| FormBuilderSwitchField<TFieldValues>
|
|
120
|
-
| FormBuilderNumberField<TFieldValues>
|
|
121
|
-
| FormBuilderPhoneField<TFieldValues>
|
|
122
|
-
| FormBuilderDateField<TFieldValues>
|
|
123
|
-
| FormBuilderDateRangeField<TFieldValues>
|
|
124
|
-
|
|
125
|
-
export type FormBuilderSection<TFieldValues extends FieldValues> = {
|
|
126
|
-
id: string
|
|
127
|
-
title?: React.ReactNode
|
|
128
|
-
description?: React.ReactNode
|
|
129
|
-
actions?: React.ReactNode
|
|
130
|
-
hidden?: boolean
|
|
131
|
-
className?: string
|
|
132
|
-
fields: FormBuilderField<TFieldValues>[]
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
export type FormBuilderProps<TFieldValues extends FieldValues> = Omit<
|
|
136
|
-
React.ComponentProps<"form">,
|
|
137
|
-
"children"
|
|
138
|
-
> & {
|
|
139
|
-
control: Control<TFieldValues>
|
|
140
|
-
fields?: FormBuilderField<TFieldValues>[]
|
|
141
|
-
sections?: FormBuilderSection<TFieldValues>[]
|
|
142
|
-
layout?: FormBuilderLayout
|
|
143
|
-
density?: FormBuilderDensity
|
|
144
|
-
columns?: 1 | 2 | 3 | 4
|
|
145
|
-
disabled?: boolean
|
|
146
|
-
readOnly?: boolean
|
|
147
|
-
footer?: React.ReactNode
|
|
148
|
-
submitLabel?: React.ReactNode
|
|
149
|
-
resetLabel?: React.ReactNode
|
|
150
|
-
onResetClick?: () => void
|
|
151
|
-
isSubmitting?: boolean
|
|
152
|
-
sectionClassName?: string
|
|
153
|
-
fieldClassName?: string
|
|
154
|
-
footerClassName?: string
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
const densityClassName: Record<FormBuilderDensity, string> = {
|
|
158
|
-
compact: "gap-3",
|
|
159
|
-
default: "gap-4",
|
|
160
|
-
comfortable: "gap-6",
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
const columnsClassName: Record<1 | 2 | 3 | 4, string> = {
|
|
164
|
-
1: "grid-cols-1",
|
|
165
|
-
2: "grid-cols-1 md:grid-cols-2",
|
|
166
|
-
3: "grid-cols-1 md:grid-cols-2 xl:grid-cols-3",
|
|
167
|
-
4: "grid-cols-1 md:grid-cols-2 xl:grid-cols-4",
|
|
168
|
-
}
|
|
169
|
-
|
|
170
|
-
const colSpanClassName: Record<NonNullable<BaseFormBuilderField["colSpan"]>, string> = {
|
|
171
|
-
1: "col-span-1",
|
|
172
|
-
2: "md:col-span-2",
|
|
173
|
-
3: "xl:col-span-3",
|
|
174
|
-
4: "xl:col-span-4",
|
|
175
|
-
full: "col-span-full",
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
type FieldPresetOptions<TProps> = BaseFormBuilderField & {
|
|
179
|
-
props: TProps
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
function splitFieldOptions<TProps>(options: FieldPresetOptions<TProps>) {
|
|
183
|
-
const { id, hidden, className, colSpan, props } = options
|
|
184
|
-
return { base: { id, hidden, className, colSpan }, props }
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
function inputField<
|
|
188
|
-
TFieldValues extends FieldValues,
|
|
189
|
-
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
|
|
190
|
-
>(options: FieldPresetOptions<FormBuilderInputField<TFieldValues, TName>["props"]>): FormBuilderInputField<TFieldValues, TName> {
|
|
191
|
-
const { base, props } = splitFieldOptions(options)
|
|
192
|
-
return { ...base, type: "input", props }
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
function textareaField<
|
|
196
|
-
TFieldValues extends FieldValues,
|
|
197
|
-
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
|
|
198
|
-
>(options: FieldPresetOptions<FormBuilderTextareaField<TFieldValues, TName>["props"]>): FormBuilderTextareaField<TFieldValues, TName> {
|
|
199
|
-
const { base, props } = splitFieldOptions(options)
|
|
200
|
-
return { ...base, type: "textarea", props }
|
|
201
|
-
}
|
|
202
|
-
|
|
203
|
-
function selectField<
|
|
204
|
-
TFieldValues extends FieldValues,
|
|
205
|
-
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
|
|
206
|
-
>(options: FieldPresetOptions<FormBuilderSelectField<TFieldValues, TName>["props"]>): FormBuilderSelectField<TFieldValues, TName> {
|
|
207
|
-
const { base, props } = splitFieldOptions(options)
|
|
208
|
-
return { ...base, type: "select", props }
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
function asyncSelectField<
|
|
212
|
-
TFieldValues extends FieldValues,
|
|
213
|
-
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
|
|
214
|
-
>(options: FieldPresetOptions<FormBuilderAsyncSelectField<TFieldValues, TName>["props"]>): FormBuilderAsyncSelectField<TFieldValues, TName> {
|
|
215
|
-
const { base, props } = splitFieldOptions(options)
|
|
216
|
-
return { ...base, type: "async-select", props }
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
function switchField<
|
|
220
|
-
TFieldValues extends FieldValues,
|
|
221
|
-
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
|
|
222
|
-
>(options: FieldPresetOptions<FormBuilderSwitchField<TFieldValues, TName>["props"]>): FormBuilderSwitchField<TFieldValues, TName> {
|
|
223
|
-
const { base, props } = splitFieldOptions(options)
|
|
224
|
-
return { ...base, type: "switch", props }
|
|
225
|
-
}
|
|
226
|
-
|
|
227
|
-
function numberField<
|
|
228
|
-
TFieldValues extends FieldValues,
|
|
229
|
-
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
|
|
230
|
-
>(options: FieldPresetOptions<FormBuilderNumberField<TFieldValues, TName>["props"]>): FormBuilderNumberField<TFieldValues, TName> {
|
|
231
|
-
const { base, props } = splitFieldOptions(options)
|
|
232
|
-
return { ...base, type: "number", props }
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
function phoneField<
|
|
236
|
-
TFieldValues extends FieldValues,
|
|
237
|
-
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
|
|
238
|
-
>(options: FieldPresetOptions<FormBuilderPhoneField<TFieldValues, TName>["props"]>): FormBuilderPhoneField<TFieldValues, TName> {
|
|
239
|
-
const { base, props } = splitFieldOptions(options)
|
|
240
|
-
return { ...base, type: "phone", props }
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
function dateField<
|
|
244
|
-
TFieldValues extends FieldValues,
|
|
245
|
-
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
|
|
246
|
-
>(options: FieldPresetOptions<FormBuilderDateField<TFieldValues, TName>["props"]>): FormBuilderDateField<TFieldValues, TName> {
|
|
247
|
-
const { base, props } = splitFieldOptions(options)
|
|
248
|
-
return { ...base, type: "date", props }
|
|
249
|
-
}
|
|
250
|
-
|
|
251
|
-
function dateRangeField<
|
|
252
|
-
TFieldValues extends FieldValues,
|
|
253
|
-
TFromName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
|
|
254
|
-
TToName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
|
|
255
|
-
>(options: FieldPresetOptions<FormBuilderDateRangeField<TFieldValues, TFromName, TToName>["props"]>): FormBuilderDateRangeField<TFieldValues, TFromName, TToName> {
|
|
256
|
-
const { base, props } = splitFieldOptions(options)
|
|
257
|
-
return { ...base, type: "date-range", props }
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
function customField<TFieldValues extends FieldValues>(
|
|
261
|
-
options: BaseFormBuilderField & Pick<FormBuilderCustomField<TFieldValues>, "render">
|
|
262
|
-
): FormBuilderCustomField<TFieldValues> {
|
|
263
|
-
const { id, hidden, className, colSpan, render } = options
|
|
264
|
-
return { id, hidden, className, colSpan, type: "custom", render }
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
function formSection<TFieldValues extends FieldValues>(
|
|
268
|
-
section: FormBuilderSection<TFieldValues>
|
|
269
|
-
): FormBuilderSection<TFieldValues> {
|
|
270
|
-
return section
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
function renderFormBuilderField<TFieldValues extends FieldValues>(
|
|
274
|
-
field: FormBuilderField<TFieldValues>,
|
|
275
|
-
context: FormBuilderFieldRenderContext<TFieldValues>
|
|
276
|
-
) {
|
|
277
|
-
const FormInputComponent = FormInput as unknown as React.ComponentType<Record<string, unknown>>
|
|
278
|
-
const FormSelectComponent = FormSelect as unknown as React.ComponentType<Record<string, unknown>>
|
|
279
|
-
|
|
280
|
-
switch (field.type) {
|
|
281
|
-
case "custom":
|
|
282
|
-
return field.render(context)
|
|
283
|
-
case "input":
|
|
284
|
-
return React.createElement(FormInputComponent, {
|
|
285
|
-
control: context.control,
|
|
286
|
-
disabled: context.disabled,
|
|
287
|
-
readOnly: context.readOnly,
|
|
288
|
-
...(field.props as Omit<FormInputProps<TFieldValues, FieldPath<TFieldValues>>, "control">),
|
|
289
|
-
})
|
|
290
|
-
case "textarea":
|
|
291
|
-
return <FormTextarea control={context.control} disabled={context.disabled} readOnly={context.readOnly} {...field.props} />
|
|
292
|
-
case "select":
|
|
293
|
-
return React.createElement(FormSelectComponent, {
|
|
294
|
-
control: context.control,
|
|
295
|
-
disabled: context.disabled,
|
|
296
|
-
...(field.props as Omit<FormSelectProps<TFieldValues, FieldPath<TFieldValues>>, "control">),
|
|
297
|
-
})
|
|
298
|
-
case "async-select":
|
|
299
|
-
return <FormAsyncSelect control={context.control} disabled={context.disabled} {...field.props} />
|
|
300
|
-
case "switch":
|
|
301
|
-
return <FormSwitch control={context.control} disabled={context.disabled} {...field.props} />
|
|
302
|
-
case "number":
|
|
303
|
-
return <FormNumberInput control={context.control} disabled={context.disabled} readOnly={context.readOnly} {...field.props} />
|
|
304
|
-
case "phone":
|
|
305
|
-
return <FormPhoneInput control={context.control} disabled={context.disabled} readOnly={context.readOnly} {...field.props} />
|
|
306
|
-
case "date":
|
|
307
|
-
return <FormDateInput control={context.control} disabled={context.disabled} readOnly={context.readOnly} {...field.props} />
|
|
308
|
-
case "date-range":
|
|
309
|
-
return (
|
|
310
|
-
<FormDateRangeInput
|
|
311
|
-
control={context.control}
|
|
312
|
-
fromInputProps={{ disabled: context.disabled, readOnly: context.readOnly }}
|
|
313
|
-
toInputProps={{ disabled: context.disabled, readOnly: context.readOnly }}
|
|
314
|
-
{...field.props}
|
|
315
|
-
/>
|
|
316
|
-
)
|
|
317
|
-
default:
|
|
318
|
-
return null
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
|
|
322
|
-
function normalizeSections<TFieldValues extends FieldValues>({
|
|
323
|
-
fields,
|
|
324
|
-
sections,
|
|
325
|
-
}: Pick<FormBuilderProps<TFieldValues>, "fields" | "sections">): FormBuilderSection<TFieldValues>[] {
|
|
326
|
-
if (sections?.length) return sections
|
|
327
|
-
return [{ id: "default", fields: fields ?? [] }]
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
function FormBuilder<TFieldValues extends FieldValues>({
|
|
331
|
-
className,
|
|
332
|
-
control,
|
|
333
|
-
fields,
|
|
334
|
-
sections,
|
|
335
|
-
layout = "grid",
|
|
336
|
-
density = "default",
|
|
337
|
-
columns = 2,
|
|
338
|
-
disabled,
|
|
339
|
-
readOnly,
|
|
340
|
-
footer,
|
|
341
|
-
submitLabel,
|
|
342
|
-
resetLabel,
|
|
343
|
-
onResetClick,
|
|
344
|
-
isSubmitting,
|
|
345
|
-
sectionClassName,
|
|
346
|
-
fieldClassName,
|
|
347
|
-
footerClassName,
|
|
348
|
-
...props
|
|
349
|
-
}: FormBuilderProps<TFieldValues>) {
|
|
350
|
-
const normalizedSections = normalizeSections({ fields, sections })
|
|
351
|
-
const context = React.useMemo(
|
|
352
|
-
() => ({ control, disabled, readOnly }),
|
|
353
|
-
[control, disabled, readOnly]
|
|
354
|
-
)
|
|
355
|
-
|
|
356
|
-
return (
|
|
357
|
-
<form data-slot="form-builder" className={cn("grid", densityClassName[density], className)} {...props}>
|
|
358
|
-
{normalizedSections
|
|
359
|
-
.filter((section) => !section.hidden)
|
|
360
|
-
.map((section) => (
|
|
361
|
-
<section
|
|
362
|
-
key={section.id}
|
|
363
|
-
data-slot="form-builder-section"
|
|
364
|
-
className={cn("grid gap-4", section.className, sectionClassName)}
|
|
365
|
-
>
|
|
366
|
-
{(section.title || section.description || section.actions) && (
|
|
367
|
-
<div
|
|
368
|
-
data-slot="form-builder-section-header"
|
|
369
|
-
className="flex flex-col gap-3 sm:flex-row sm:items-start sm:justify-between"
|
|
370
|
-
>
|
|
371
|
-
<div className="min-w-0 space-y-1">
|
|
372
|
-
{section.title && <h2 className="text-base font-semibold leading-none tracking-tight">{section.title}</h2>}
|
|
373
|
-
{section.description && <p className="text-sm text-muted-foreground">{section.description}</p>}
|
|
374
|
-
</div>
|
|
375
|
-
{section.actions && <div className="flex shrink-0 flex-wrap items-center gap-2">{section.actions}</div>}
|
|
376
|
-
</div>
|
|
377
|
-
)}
|
|
378
|
-
|
|
379
|
-
<div
|
|
380
|
-
data-slot="form-builder-fields"
|
|
381
|
-
data-layout={layout}
|
|
382
|
-
className={cn(
|
|
383
|
-
"grid",
|
|
384
|
-
densityClassName[density],
|
|
385
|
-
layout === "grid" ? columnsClassName[columns] : "grid-cols-1"
|
|
386
|
-
)}
|
|
387
|
-
>
|
|
388
|
-
{section.fields
|
|
389
|
-
.filter((field) => !field.hidden)
|
|
390
|
-
.map((field) => (
|
|
391
|
-
<div
|
|
392
|
-
key={field.id}
|
|
393
|
-
data-slot="form-builder-field"
|
|
394
|
-
className={cn(
|
|
395
|
-
field.colSpan && colSpanClassName[field.colSpan],
|
|
396
|
-
field.className,
|
|
397
|
-
fieldClassName
|
|
398
|
-
)}
|
|
399
|
-
>
|
|
400
|
-
{renderFormBuilderField(field, context)}
|
|
401
|
-
</div>
|
|
402
|
-
))}
|
|
403
|
-
</div>
|
|
404
|
-
</section>
|
|
405
|
-
))}
|
|
406
|
-
|
|
407
|
-
{(footer || submitLabel || resetLabel) && (
|
|
408
|
-
<div data-slot="form-builder-footer" className={cn("flex flex-wrap items-center justify-end gap-2", footerClassName)}>
|
|
409
|
-
{footer ?? (
|
|
410
|
-
<>
|
|
411
|
-
{resetLabel && (
|
|
412
|
-
<Button type="button" variant="outline" disabled={disabled || isSubmitting} onClick={onResetClick}>
|
|
413
|
-
{resetLabel}
|
|
414
|
-
</Button>
|
|
415
|
-
)}
|
|
416
|
-
{submitLabel && (
|
|
417
|
-
<Button type="submit" disabled={disabled || isSubmitting}>
|
|
418
|
-
{submitLabel}
|
|
419
|
-
</Button>
|
|
420
|
-
)}
|
|
421
|
-
</>
|
|
422
|
-
)}
|
|
423
|
-
</div>
|
|
424
|
-
)}
|
|
425
|
-
</form>
|
|
426
|
-
)
|
|
427
|
-
}
|
|
428
|
-
|
|
429
|
-
export {
|
|
430
|
-
FormBuilder,
|
|
431
|
-
asyncSelectField,
|
|
432
|
-
customField,
|
|
433
|
-
dateField,
|
|
434
|
-
dateRangeField,
|
|
435
|
-
formSection,
|
|
436
|
-
inputField,
|
|
437
|
-
numberField,
|
|
438
|
-
phoneField,
|
|
439
|
-
renderFormBuilderField,
|
|
440
|
-
selectField,
|
|
441
|
-
switchField,
|
|
442
|
-
textareaField,
|
|
443
|
-
}
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import type { ComponentDemoMock } from "../types"
|
|
2
|
-
|
|
3
|
-
export const affixMock: ComponentDemoMock = {
|
|
4
|
-
code: `import { Affix } from "@/index"
|
|
5
|
-
|
|
6
|
-
export function Example() {
|
|
7
|
-
return (
|
|
8
|
-
<div className="relative h-48 overflow-y-auto border p-3">
|
|
9
|
-
<Affix offsetTop={12} zIndex={40} className="bg-primary text-primary-foreground px-3 py-2">
|
|
10
|
-
Sticky header
|
|
11
|
-
</Affix>
|
|
12
|
-
<p className="pt-10">Scroll inside container to test sticky placement.</p>
|
|
13
|
-
</div>
|
|
14
|
-
)
|
|
15
|
-
}`,
|
|
16
|
-
cliCommand: "npx tembro add affix",
|
|
17
|
-
highlights: [
|
|
18
|
-
"Pin content to an offset within a scrollable container",
|
|
19
|
-
"Simple API with top and z-index control",
|
|
20
|
-
],
|
|
21
|
-
scenarios: [
|
|
22
|
-
{ title: "Toolbar", description: "Keep action buttons visible while users scroll long forms." },
|
|
23
|
-
{ title: "Quick filters", description: "Keep filters always reachable in long list pages." },
|
|
24
|
-
],
|
|
25
|
-
}
|
|
26
|
-
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import * as React from "react"
|
|
2
|
-
|
|
3
|
-
import { Affix } from "@/index"
|
|
4
|
-
|
|
5
|
-
export function AffixShowcase() {
|
|
6
|
-
const [offsetTop, setOffsetTop] = React.useState(0)
|
|
7
|
-
const [zIndex, setZIndex] = React.useState(40)
|
|
8
|
-
|
|
9
|
-
return (
|
|
10
|
-
<div className="space-y-4">
|
|
11
|
-
<div className="flex flex-wrap gap-2">
|
|
12
|
-
<button type="button" className="rounded-md border px-2.5 py-1 text-sm" onClick={() => setOffsetTop((value) => Math.max(0, value - 8))}>
|
|
13
|
-
Offset -8
|
|
14
|
-
</button>
|
|
15
|
-
<button type="button" className="rounded-md border px-2.5 py-1 text-sm" onClick={() => setOffsetTop((value) => value + 8)}>
|
|
16
|
-
Offset +8
|
|
17
|
-
</button>
|
|
18
|
-
<button type="button" className="rounded-md border px-2.5 py-1 text-sm" onClick={() => setZIndex((value) => (value === 30 ? 80 : 30))}>
|
|
19
|
-
Toggle z-index
|
|
20
|
-
</button>
|
|
21
|
-
</div>
|
|
22
|
-
<p className="text-sm text-muted-foreground">Current settings: offsetTop={offsetTop}, zIndex={zIndex}</p>
|
|
23
|
-
<div className="relative h-48 overflow-y-auto rounded-lg border bg-muted/20 p-3">
|
|
24
|
-
<div className="h-80 space-y-2">
|
|
25
|
-
<Affix offsetTop={offsetTop} zIndex={zIndex} className="mb-3 bg-primary/95 rounded-md px-3 py-2 text-primary-foreground">
|
|
26
|
-
Sticky anchor bar
|
|
27
|
-
</Affix>
|
|
28
|
-
<p>Scroll this area to verify sticky behavior.</p>
|
|
29
|
-
<p>Affix stays visible at the selected top offset.</p>
|
|
30
|
-
<p>Useful in dashboard toolbars and contextual quick actions.</p>
|
|
31
|
-
<p className="h-64" />
|
|
32
|
-
</div>
|
|
33
|
-
</div>
|
|
34
|
-
</div>
|
|
35
|
-
)
|
|
36
|
-
}
|
|
37
|
-
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import type { ComponentDemoMock } from "../types"
|
|
2
|
-
|
|
3
|
-
export const aspectRatioMock: ComponentDemoMock = {
|
|
4
|
-
code: `import { AspectRatio } from "@/index"
|
|
5
|
-
|
|
6
|
-
export function Example() {
|
|
7
|
-
return (
|
|
8
|
-
<AspectRatio ratio={16 / 9} className="rounded-xl border bg-muted">
|
|
9
|
-
<div className="grid size-full place-items-center text-sm font-medium text-foreground">
|
|
10
|
-
16:9 media slot
|
|
11
|
-
</div>
|
|
12
|
-
</AspectRatio>
|
|
13
|
-
)
|
|
14
|
-
}`,
|
|
15
|
-
cliCommand: "npx tembro add aspect-ratio",
|
|
16
|
-
highlights: [
|
|
17
|
-
"Controls media card proportions in one place",
|
|
18
|
-
"Works for images, iframes, and any fixed-ratio container",
|
|
19
|
-
"Stable in dashboard and content-heavy layouts",
|
|
20
|
-
],
|
|
21
|
-
scenarios: [
|
|
22
|
-
{ title: "Media hero", description: "Reserve consistent 16:9 ratio for previews." },
|
|
23
|
-
{ title: "Card media", description: "Keep media and text alignment predictable." },
|
|
24
|
-
{ title: "Document preview", description: "Prevent jumpy layouts while content loads." },
|
|
25
|
-
],
|
|
26
|
-
}
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import * as React from "react"
|
|
2
|
-
|
|
3
|
-
const ratioLabels: Array<{ label: string; ratio: number }> = [
|
|
4
|
-
{ label: "16:9", ratio: 16 / 9 },
|
|
5
|
-
{ label: "4:3", ratio: 4 / 3 },
|
|
6
|
-
{ label: "1:1", ratio: 1 },
|
|
7
|
-
{ label: "3:4", ratio: 3 / 4 },
|
|
8
|
-
]
|
|
9
|
-
|
|
10
|
-
import { Button, AspectRatio } from "@/index"
|
|
11
|
-
export function AspectRatioShowcase() {
|
|
12
|
-
const [active, setActive] = React.useState(0)
|
|
13
|
-
|
|
14
|
-
return (
|
|
15
|
-
<div className="space-y-5">
|
|
16
|
-
<section className="flex flex-wrap gap-3">
|
|
17
|
-
{ratioLabels.map((item, index) => (
|
|
18
|
-
<Button
|
|
19
|
-
key={item.label}
|
|
20
|
-
variant={active === index ? "default" : "outline"}
|
|
21
|
-
size="sm"
|
|
22
|
-
onClick={() => setActive(index)}
|
|
23
|
-
>
|
|
24
|
-
{item.label}
|
|
25
|
-
</Button>
|
|
26
|
-
))}
|
|
27
|
-
</section>
|
|
28
|
-
|
|
29
|
-
<AspectRatio ratio={ratioLabels[active].ratio} className="rounded-2xl border border-border bg-card">
|
|
30
|
-
<div className="grid h-full place-items-center bg-[linear-gradient(135deg,color-mix(in_oklch,var(--aui-page-bg),transparent_75%),transparent)] p-6 text-center">
|
|
31
|
-
<p className="text-sm text-muted-foreground">{ratioLabels[active].label}</p>
|
|
32
|
-
<p className="text-xl font-semibold text-foreground">Adaptive ratio surface</p>
|
|
33
|
-
</div>
|
|
34
|
-
</AspectRatio>
|
|
35
|
-
</div>
|
|
36
|
-
)
|
|
37
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import type { ComponentDemoMock } from "../types"
|
|
2
|
-
|
|
3
|
-
export const cascaderMock: ComponentDemoMock = {
|
|
4
|
-
code: `import { Cascader } from "@/index"
|
|
5
|
-
|
|
6
|
-
const options = [{ value: "eu", label: "Europe", children: [{ value: "uk", label: "United Kingdom", children: [{ value: "london", label: "London" }] }] }]
|
|
7
|
-
|
|
8
|
-
export function Example() {
|
|
9
|
-
const [value, setValue] = useState<string[]>([])
|
|
10
|
-
|
|
11
|
-
return <Cascader options={options} value={value} onValueChange={setValue} />
|
|
12
|
-
}`,
|
|
13
|
-
cliCommand: "npx tembro add cascader",
|
|
14
|
-
highlights: [
|
|
15
|
-
"Three-level dependency selects",
|
|
16
|
-
"Controlled by string path value",
|
|
17
|
-
"Disabled states for unavailable levels",
|
|
18
|
-
],
|
|
19
|
-
scenarios: [
|
|
20
|
-
{ title: "Location selector", description: "Choose region / country / city in one compact control." },
|
|
21
|
-
{ title: "Category trees", description: "Pick nested taxonomy in forms." },
|
|
22
|
-
],
|
|
23
|
-
}
|
|
24
|
-
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import * as React from "react"
|
|
2
|
-
|
|
3
|
-
import { Cascader, type CascaderOption } from "@/index"
|
|
4
|
-
|
|
5
|
-
const locations: CascaderOption[] = [
|
|
6
|
-
{ value: "eu", label: "Europe", children: [{ value: "uk", label: "United Kingdom", children: [{ value: "london", label: "London" }] }] },
|
|
7
|
-
{ value: "us", label: "United States", children: [{ value: "ca", label: "California", children: [{ value: "sf", label: "San Francisco" }] }] },
|
|
8
|
-
]
|
|
9
|
-
|
|
10
|
-
export function CascaderShowcase() {
|
|
11
|
-
const [value, setValue] = React.useState<string[]>([])
|
|
12
|
-
|
|
13
|
-
return (
|
|
14
|
-
<div className="space-y-3">
|
|
15
|
-
<Cascader options={locations} value={value} onValueChange={setValue} />
|
|
16
|
-
<p className="text-sm text-muted-foreground">Selected path: {value.length ? value.join(" / ") : "Not selected"}</p>
|
|
17
|
-
</div>
|
|
18
|
-
)
|
|
19
|
-
}
|
|
20
|
-
|