@forthtilliath/forth-ui 0.2.5 → 0.4.0
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/README.md +91 -34
- package/dist/components/accordion/accordion-items.d.ts +1 -1
- package/dist/components/accordion/accordion-items.d.ts.map +1 -1
- package/dist/components/accordion/accordion-items.js +3 -2
- package/dist/components/accordion/accordion-multiple.d.ts +1 -1
- package/dist/components/accordion/accordion-multiple.d.ts.map +1 -1
- package/dist/components/accordion/accordion-multiple.js +2 -2
- package/dist/components/accordion/accordion-single.d.ts +1 -1
- package/dist/components/accordion/accordion-single.d.ts.map +1 -1
- package/dist/components/accordion/accordion-single.js +2 -2
- package/dist/components/accordion/accordion-trigger.d.ts +15 -0
- package/dist/components/accordion/accordion-trigger.d.ts.map +1 -0
- package/dist/components/accordion/accordion-trigger.js +25 -0
- package/dist/components/accordion/accordion.d.ts +1 -1
- package/dist/components/accordion/accordion.d.ts.map +1 -1
- package/dist/components/accordion/accordion.js +2 -2
- package/dist/components/accordion/index.d.ts +1 -1
- package/dist/components/accordion/index.d.ts.map +1 -1
- package/dist/components/accordion/index.js +1 -1
- package/dist/components/accordion/types.d.ts +1 -1
- package/dist/components/accordion/types.d.ts.map +1 -1
- package/dist/components/alert/alert.d.ts +8 -2
- package/dist/components/alert/alert.d.ts.map +1 -1
- package/dist/components/alert/alert.js +5 -3
- package/dist/components/alert/index.d.ts +3 -3
- package/dist/components/alert/index.d.ts.map +1 -1
- package/dist/components/alert/index.js +1 -1
- package/dist/components/alert/variants.d.ts.map +1 -1
- package/dist/components/alert/variants.js +11 -4
- package/dist/components/avatar/avatar-group.d.ts +1 -1
- package/dist/components/avatar/avatar-group.d.ts.map +1 -1
- package/dist/components/avatar/avatar-group.js +1 -1
- package/dist/components/avatar/avatar.d.ts +9 -3
- package/dist/components/avatar/avatar.d.ts.map +1 -1
- package/dist/components/avatar/avatar.js +7 -4
- package/dist/components/avatar/index.d.ts +4 -4
- package/dist/components/avatar/index.d.ts.map +1 -1
- package/dist/components/avatar/index.js +2 -2
- package/dist/components/avatar/variants.d.ts.map +1 -1
- package/dist/components/avatar/variants.js +39 -39
- package/dist/components/badge/badge.d.ts +8 -2
- package/dist/components/badge/badge.d.ts.map +1 -1
- package/dist/components/badge/badge.js +5 -3
- package/dist/components/badge/index.d.ts +3 -3
- package/dist/components/badge/index.d.ts.map +1 -1
- package/dist/components/badge/index.js +1 -1
- package/dist/components/badge/variants.d.ts.map +1 -1
- package/dist/components/badge/variants.js +8 -4
- package/dist/components/banner/banner.d.ts +8 -2
- package/dist/components/banner/banner.d.ts.map +1 -1
- package/dist/components/banner/banner.js +5 -3
- package/dist/components/banner/index.d.ts +3 -3
- package/dist/components/banner/index.d.ts.map +1 -1
- package/dist/components/banner/index.js +1 -1
- package/dist/components/bento-grid/index.d.ts +2 -2
- package/dist/components/bento-grid/index.d.ts.map +1 -1
- package/dist/components/bento-grid/index.js +1 -1
- package/dist/components/breadcrumb/breadcrumb.d.ts +8 -2
- package/dist/components/breadcrumb/breadcrumb.d.ts.map +1 -1
- package/dist/components/breadcrumb/breadcrumb.js +8 -3
- package/dist/components/breadcrumb/index.d.ts +2 -2
- package/dist/components/breadcrumb/index.d.ts.map +1 -1
- package/dist/components/breadcrumb/index.js +1 -1
- package/dist/components/button/button.d.ts +1 -1
- package/dist/components/button/button.d.ts.map +1 -1
- package/dist/components/button/button.js +1 -1
- package/dist/components/button/index.d.ts +5 -5
- package/dist/components/button/index.d.ts.map +1 -1
- package/dist/components/button/index.js +2 -2
- package/dist/components/checkbox/index.d.ts +2 -2
- package/dist/components/checkbox/index.d.ts.map +1 -1
- package/dist/components/checkbox/index.js +1 -1
- package/dist/components/chip/chip.d.ts +2 -2
- package/dist/components/chip/chip.d.ts.map +1 -1
- package/dist/components/chip/chip.js +2 -2
- package/dist/components/chip/index.d.ts +2 -2
- package/dist/components/chip/index.d.ts.map +1 -1
- package/dist/components/chip/index.js +1 -1
- package/dist/components/code-block/code-block.d.ts +7 -1
- package/dist/components/code-block/code-block.d.ts.map +1 -1
- package/dist/components/code-block/code-block.js +4 -2
- package/dist/components/code-block/index.d.ts +2 -2
- package/dist/components/code-block/index.d.ts.map +1 -1
- package/dist/components/code-block/index.js +1 -1
- package/dist/components/collapsible/index.d.ts +6 -6
- package/dist/components/collapsible/index.d.ts.map +1 -1
- package/dist/components/collapsible/index.js +3 -3
- package/dist/components/color-picker/color-picker.d.ts +7 -1
- package/dist/components/color-picker/color-picker.d.ts.map +1 -1
- package/dist/components/color-picker/color-picker.js +5 -3
- package/dist/components/color-picker/index.d.ts +2 -2
- package/dist/components/color-picker/index.d.ts.map +1 -1
- package/dist/components/color-picker/index.js +1 -1
- package/dist/components/column-menu/column-menu.d.ts +39 -0
- package/dist/components/column-menu/column-menu.d.ts.map +1 -0
- package/dist/components/column-menu/column-menu.js +74 -0
- package/dist/components/column-menu/index.d.ts +6 -0
- package/dist/components/column-menu/index.d.ts.map +1 -0
- package/dist/components/column-menu/index.js +3 -0
- package/dist/components/column-menu/sortable-column-row.d.ts +13 -0
- package/dist/components/column-menu/sortable-column-row.d.ts.map +1 -0
- package/dist/components/column-menu/sortable-column-row.js +22 -0
- package/dist/components/column-menu/types.d.ts +21 -0
- package/dist/components/column-menu/types.d.ts.map +1 -0
- package/dist/components/column-menu/types.js +7 -0
- package/dist/components/column-menu/use-dnd-sensors.d.ts +6 -0
- package/dist/components/column-menu/use-dnd-sensors.d.ts.map +1 -0
- package/dist/components/column-menu/use-dnd-sensors.js +14 -0
- package/dist/components/combobox/combobox.d.ts +16 -1
- package/dist/components/combobox/combobox.d.ts.map +1 -1
- package/dist/components/combobox/combobox.js +7 -3
- package/dist/components/combobox/index.d.ts +4 -4
- package/dist/components/combobox/index.d.ts.map +1 -1
- package/dist/components/combobox/index.js +2 -2
- package/dist/components/combobox/multi-select.d.ts +17 -2
- package/dist/components/combobox/multi-select.d.ts.map +1 -1
- package/dist/components/combobox/multi-select.js +8 -4
- package/dist/components/command-palette/command-palette.d.ts +7 -1
- package/dist/components/command-palette/command-palette.d.ts.map +1 -1
- package/dist/components/command-palette/command-palette.js +6 -2
- package/dist/components/command-palette/index.d.ts +2 -2
- package/dist/components/command-palette/index.d.ts.map +1 -1
- package/dist/components/command-palette/index.js +1 -1
- package/dist/components/confirm-dialog/confirm-dialog.d.ts +7 -1
- package/dist/components/confirm-dialog/confirm-dialog.d.ts.map +1 -1
- package/dist/components/confirm-dialog/confirm-dialog.js +12 -6
- package/dist/components/confirm-dialog/index.d.ts +3 -3
- package/dist/components/confirm-dialog/index.d.ts.map +1 -1
- package/dist/components/confirm-dialog/index.js +2 -2
- package/dist/components/confirm-dialog/use-confirm.d.ts +1 -1
- package/dist/components/confirm-dialog/use-confirm.d.ts.map +1 -1
- package/dist/components/confirm-dialog/use-confirm.js +1 -1
- package/dist/components/copy-menu-item/copy-menu-item.d.ts +18 -0
- package/dist/components/copy-menu-item/copy-menu-item.d.ts.map +1 -0
- package/dist/components/copy-menu-item/copy-menu-item.js +23 -0
- package/dist/components/copy-menu-item/index.d.ts +3 -0
- package/dist/components/copy-menu-item/index.d.ts.map +1 -0
- package/dist/components/copy-menu-item/index.js +1 -0
- package/dist/components/count-animation/index.d.ts +2 -2
- package/dist/components/count-animation/index.d.ts.map +1 -1
- package/dist/components/count-animation/index.js +1 -1
- package/dist/components/date-picker/date-picker.d.ts +7 -1
- package/dist/components/date-picker/date-picker.d.ts.map +1 -1
- package/dist/components/date-picker/date-picker.js +6 -3
- package/dist/components/date-picker/index.d.ts +2 -2
- package/dist/components/date-picker/index.d.ts.map +1 -1
- package/dist/components/date-picker/index.js +1 -1
- package/dist/components/description-list/index.d.ts +1 -1
- package/dist/components/description-list/index.d.ts.map +1 -1
- package/dist/components/description-list/index.js +1 -1
- package/dist/components/dropdrawer/index.d.ts +2 -2
- package/dist/components/dropdrawer/index.d.ts.map +1 -1
- package/dist/components/dropdrawer/index.js +1 -1
- package/dist/components/dropzone/dropzone.d.ts +7 -1
- package/dist/components/dropzone/dropzone.d.ts.map +1 -1
- package/dist/components/dropzone/dropzone.js +5 -3
- package/dist/components/dropzone/index.d.ts +2 -2
- package/dist/components/dropzone/index.d.ts.map +1 -1
- package/dist/components/dropzone/index.js +1 -1
- package/dist/components/field/index.d.ts +2 -2
- package/dist/components/field/index.d.ts.map +1 -1
- package/dist/components/field/index.js +1 -1
- package/dist/components/file-list/file-list.d.ts +4 -1
- package/dist/components/file-list/file-list.d.ts.map +1 -1
- package/dist/components/file-list/file-list.js +4 -1
- package/dist/components/file-list/index.d.ts +2 -2
- package/dist/components/file-list/index.d.ts.map +1 -1
- package/dist/components/file-list/index.js +1 -1
- package/dist/components/gradient-frame/gradient-frame.d.ts +27 -0
- package/dist/components/gradient-frame/gradient-frame.d.ts.map +1 -0
- package/dist/components/gradient-frame/gradient-frame.js +16 -0
- package/dist/components/gradient-frame/index.d.ts +3 -0
- package/dist/components/gradient-frame/index.d.ts.map +1 -0
- package/dist/components/gradient-frame/index.js +1 -0
- package/dist/components/grid/context.d.ts.map +1 -1
- package/dist/components/grid/context.js +1 -0
- package/dist/components/grid/grid-item.d.ts +1 -1
- package/dist/components/grid/grid-item.d.ts.map +1 -1
- package/dist/components/grid/grid-item.js +3 -2
- package/dist/components/grid/grid.d.ts +3 -3
- package/dist/components/grid/grid.d.ts.map +1 -1
- package/dist/components/grid/grid.js +4 -3
- package/dist/components/grid/index.d.ts +2 -2
- package/dist/components/grid/index.d.ts.map +1 -1
- package/dist/components/grid/index.js +2 -2
- package/dist/components/grid/variants.d.ts +2 -2
- package/dist/components/icon-bubble/icon-bubble.d.ts +21 -0
- package/dist/components/icon-bubble/icon-bubble.d.ts.map +1 -0
- package/dist/components/icon-bubble/icon-bubble.js +16 -0
- package/dist/components/icon-bubble/index.d.ts +4 -0
- package/dist/components/icon-bubble/index.d.ts.map +1 -0
- package/dist/components/icon-bubble/index.js +1 -0
- package/dist/components/icon-bubble/variants.d.ts +12 -0
- package/dist/components/icon-bubble/variants.d.ts.map +1 -0
- package/dist/components/icon-bubble/variants.js +19 -0
- package/dist/components/image-input/image-input.d.ts +7 -1
- package/dist/components/image-input/image-input.d.ts.map +1 -1
- package/dist/components/image-input/image-input.js +4 -2
- package/dist/components/image-input/index.d.ts +2 -2
- package/dist/components/image-input/index.d.ts.map +1 -1
- package/dist/components/image-input/index.js +1 -1
- package/dist/components/infinite-scroll/index.d.ts +2 -2
- package/dist/components/infinite-scroll/index.d.ts.map +1 -1
- package/dist/components/infinite-scroll/index.js +1 -1
- package/dist/components/kbd/index.d.ts +1 -1
- package/dist/components/kbd/index.d.ts.map +1 -1
- package/dist/components/kbd/index.js +1 -1
- package/dist/components/link/index.d.ts +6 -6
- package/dist/components/link/index.d.ts.map +1 -1
- package/dist/components/link/index.js +3 -3
- package/dist/components/link/link.d.ts +1 -1
- package/dist/components/link/link.d.ts.map +1 -1
- package/dist/components/link/link.js +1 -1
- package/dist/components/marquee/index.d.ts +2 -2
- package/dist/components/marquee/index.d.ts.map +1 -1
- package/dist/components/marquee/index.js +1 -1
- package/dist/components/mode-toggle/index.d.ts +4 -0
- package/dist/components/mode-toggle/index.d.ts.map +1 -0
- package/dist/components/mode-toggle/index.js +2 -0
- package/dist/components/mode-toggle/mode-toggle.d.ts +22 -0
- package/dist/components/mode-toggle/mode-toggle.d.ts.map +1 -0
- package/dist/components/mode-toggle/mode-toggle.js +26 -0
- package/dist/components/mode-toggle/theme-provider.d.ts +13 -0
- package/dist/components/mode-toggle/theme-provider.d.ts.map +1 -0
- package/dist/components/mode-toggle/theme-provider.js +15 -0
- package/dist/components/multi-step-loader/index.d.ts +2 -2
- package/dist/components/multi-step-loader/index.d.ts.map +1 -1
- package/dist/components/multi-step-loader/index.js +1 -1
- package/dist/components/multi-step-loader/multi-step-loader.js +2 -2
- package/dist/components/navbar/index.d.ts +4 -4
- package/dist/components/navbar/index.d.ts.map +1 -1
- package/dist/components/navbar/index.js +2 -2
- package/dist/components/navbar/navbar-mobile-menu.d.ts +7 -1
- package/dist/components/navbar/navbar-mobile-menu.d.ts.map +1 -1
- package/dist/components/navbar/navbar-mobile-menu.js +5 -3
- package/dist/components/notification-center/index.d.ts +2 -2
- package/dist/components/notification-center/index.d.ts.map +1 -1
- package/dist/components/notification-center/index.js +1 -1
- package/dist/components/notification-center/notification-center.d.ts +7 -1
- package/dist/components/notification-center/notification-center.d.ts.map +1 -1
- package/dist/components/notification-center/notification-center.js +7 -4
- package/dist/components/number-input/index.d.ts +2 -2
- package/dist/components/number-input/index.d.ts.map +1 -1
- package/dist/components/number-input/index.js +1 -1
- package/dist/components/number-input/number-input.d.ts +7 -1
- package/dist/components/number-input/number-input.d.ts.map +1 -1
- package/dist/components/number-input/number-input.js +6 -4
- package/dist/components/pagination/index.d.ts +4 -4
- package/dist/components/pagination/index.d.ts.map +1 -1
- package/dist/components/pagination/index.js +2 -2
- package/dist/components/pagination/pagination.d.ts +8 -2
- package/dist/components/pagination/pagination.d.ts.map +1 -1
- package/dist/components/pagination/pagination.js +12 -9
- package/dist/components/password-input/index.d.ts +4 -4
- package/dist/components/password-input/index.d.ts.map +1 -1
- package/dist/components/password-input/index.js +2 -2
- package/dist/components/password-input/password-input.d.ts +9 -2
- package/dist/components/password-input/password-input.d.ts.map +1 -1
- package/dist/components/password-input/password-input.js +4 -2
- package/dist/components/progress/index.d.ts +3 -3
- package/dist/components/progress/index.d.ts.map +1 -1
- package/dist/components/progress/index.js +1 -1
- package/dist/components/progress/progress.d.ts +5 -2
- package/dist/components/progress/progress.d.ts.map +1 -1
- package/dist/components/progress/progress.js +5 -3
- package/dist/components/qr-code/index.d.ts +2 -2
- package/dist/components/qr-code/index.d.ts.map +1 -1
- package/dist/components/qr-code/index.js +1 -1
- package/dist/components/qr-code/qr-code.d.ts +7 -1
- package/dist/components/qr-code/qr-code.d.ts.map +1 -1
- package/dist/components/qr-code/qr-code.js +5 -2
- package/dist/components/radio/index.d.ts +2 -2
- package/dist/components/radio/index.d.ts.map +1 -1
- package/dist/components/radio/index.js +1 -1
- package/dist/components/rating/index.d.ts +2 -2
- package/dist/components/rating/index.d.ts.map +1 -1
- package/dist/components/rating/index.js +1 -1
- package/dist/components/rating/rating.d.ts +7 -1
- package/dist/components/rating/rating.d.ts.map +1 -1
- package/dist/components/rating/rating.js +23 -2
- package/dist/components/relative-time/index.d.ts +2 -2
- package/dist/components/relative-time/index.d.ts.map +1 -1
- package/dist/components/relative-time/index.js +1 -1
- package/dist/components/reparent/index.d.ts +2 -2
- package/dist/components/reparent/index.d.ts.map +1 -1
- package/dist/components/reparent/index.js +1 -1
- package/dist/components/repeat/index.d.ts +1 -1
- package/dist/components/repeat/index.d.ts.map +1 -1
- package/dist/components/repeat/index.js +1 -1
- package/dist/components/scroll-progress/index.d.ts +2 -2
- package/dist/components/scroll-progress/index.d.ts.map +1 -1
- package/dist/components/scroll-progress/index.js +1 -1
- package/dist/components/scroll-shadow/index.d.ts +2 -2
- package/dist/components/scroll-shadow/index.d.ts.map +1 -1
- package/dist/components/scroll-shadow/index.js +1 -1
- package/dist/components/scroll-shadow/scroll-shadow.d.ts.map +1 -1
- package/dist/components/scroll-shadow/scroll-shadow.js +3 -1
- package/dist/components/scrollspy/index.d.ts +2 -2
- package/dist/components/scrollspy/index.d.ts.map +1 -1
- package/dist/components/scrollspy/index.js +1 -1
- package/dist/components/separator/index.d.ts +2 -2
- package/dist/components/separator/index.d.ts.map +1 -1
- package/dist/components/separator/index.js +1 -1
- package/dist/components/snippet/index.d.ts +2 -2
- package/dist/components/snippet/index.d.ts.map +1 -1
- package/dist/components/snippet/index.js +1 -1
- package/dist/components/snippet/snippet.d.ts +7 -1
- package/dist/components/snippet/snippet.d.ts.map +1 -1
- package/dist/components/snippet/snippet.js +6 -2
- package/dist/components/sortable/index.d.ts +2 -2
- package/dist/components/sortable/index.d.ts.map +1 -1
- package/dist/components/sortable/index.js +1 -1
- package/dist/components/spacer/index.d.ts +2 -2
- package/dist/components/spacer/index.d.ts.map +1 -1
- package/dist/components/spacer/index.js +1 -1
- package/dist/components/spinner/index.d.ts +3 -3
- package/dist/components/spinner/index.d.ts.map +1 -1
- package/dist/components/spinner/index.js +1 -1
- package/dist/components/spinner/spinner.d.ts +8 -2
- package/dist/components/spinner/spinner.d.ts.map +1 -1
- package/dist/components/spinner/spinner.js +6 -3
- package/dist/components/stepper/index.d.ts +2 -2
- package/dist/components/stepper/index.d.ts.map +1 -1
- package/dist/components/stepper/index.js +1 -1
- package/dist/components/submit-button/index.d.ts +2 -2
- package/dist/components/submit-button/index.d.ts.map +1 -1
- package/dist/components/submit-button/index.js +1 -1
- package/dist/components/submit-button/submit-button.d.ts +1 -1
- package/dist/components/submit-button/submit-button.d.ts.map +1 -1
- package/dist/components/submit-button/submit-button.js +1 -1
- package/dist/components/tags-input/index.d.ts +2 -2
- package/dist/components/tags-input/index.d.ts.map +1 -1
- package/dist/components/tags-input/index.js +1 -1
- package/dist/components/tags-input/tags-input.d.ts +14 -1
- package/dist/components/tags-input/tags-input.d.ts.map +1 -1
- package/dist/components/tags-input/tags-input.js +7 -4
- package/dist/components/theme-image/index.d.ts +3 -0
- package/dist/components/theme-image/index.d.ts.map +1 -0
- package/dist/components/theme-image/index.js +1 -0
- package/dist/components/theme-image/theme-image.d.ts +25 -0
- package/dist/components/theme-image/theme-image.d.ts.map +1 -0
- package/dist/components/theme-image/theme-image.js +19 -0
- package/dist/components/timeline/index.d.ts +2 -2
- package/dist/components/timeline/index.d.ts.map +1 -1
- package/dist/components/timeline/index.js +1 -1
- package/dist/components/toggle-switch/index.d.ts +4 -0
- package/dist/components/toggle-switch/index.d.ts.map +1 -0
- package/dist/components/toggle-switch/index.js +1 -0
- package/dist/components/toggle-switch/toggle-switch.d.ts +37 -0
- package/dist/components/toggle-switch/toggle-switch.d.ts.map +1 -0
- package/dist/components/toggle-switch/toggle-switch.js +25 -0
- package/dist/components/toggle-switch/variants.d.ts +9 -0
- package/dist/components/toggle-switch/variants.d.ts.map +1 -0
- package/dist/components/toggle-switch/variants.js +30 -0
- package/dist/components/tree/index.d.ts +2 -2
- package/dist/components/tree/index.d.ts.map +1 -1
- package/dist/components/tree/index.js +1 -1
- package/dist/components/tree/tree.js +1 -1
- package/dist/globals.css +1509 -121
- package/dist/locale/UiLocaleProvider.d.ts +19 -0
- package/dist/locale/UiLocaleProvider.d.ts.map +1 -0
- package/dist/locale/UiLocaleProvider.js +17 -0
- package/dist/locale/index.d.ts +4 -0
- package/dist/locale/index.d.ts.map +1 -0
- package/dist/locale/index.js +3 -0
- package/dist/locale/locale.d.ts +15 -0
- package/dist/locale/locale.d.ts.map +1 -0
- package/dist/locale/locale.js +19 -0
- package/dist/locale/messages.d.ts +98 -0
- package/dist/locale/messages.d.ts.map +1 -0
- package/dist/locale/messages.js +99 -0
- package/package.json +34 -15
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import type { BundledLanguage, BundledTheme, SpecialLanguage } from "shiki";
|
|
3
|
+
import { type UiLocale } from "../../locale/locale.js";
|
|
3
4
|
export interface CodeBlockProps {
|
|
4
5
|
code: string;
|
|
5
6
|
language?: BundledLanguage | SpecialLanguage;
|
|
@@ -14,6 +15,11 @@ export interface CodeBlockProps {
|
|
|
14
15
|
};
|
|
15
16
|
showLineNumbers?: boolean;
|
|
16
17
|
className?: string;
|
|
18
|
+
/**
|
|
19
|
+
* Language of the built-in labels — French by default, or the nearest
|
|
20
|
+
* `UiLocaleProvider`'s. Explicit text props still win.
|
|
21
|
+
*/
|
|
22
|
+
locale?: UiLocale;
|
|
17
23
|
}
|
|
18
24
|
/**
|
|
19
25
|
* A syntax-highlighted code block with a copy-to-clipboard button, an
|
|
@@ -27,5 +33,5 @@ export interface CodeBlockProps {
|
|
|
27
33
|
* @author Forth
|
|
28
34
|
* @copyright 2026 Forth
|
|
29
35
|
*/
|
|
30
|
-
export declare function CodeBlock({ code, language, filename, theme, showLineNumbers, className, }: CodeBlockProps): React.JSX.Element;
|
|
36
|
+
export declare function CodeBlock({ code, language, filename, theme, showLineNumbers, className, locale, }: CodeBlockProps): React.JSX.Element;
|
|
31
37
|
//# sourceMappingURL=code-block.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-block.d.ts","sourceRoot":"","sources":["../../../src/components/code-block/code-block.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAO5E,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,eAAe,GAAG,eAAe,CAAC;IAC7C,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,YAAY,CAAC;QAAC,IAAI,EAAE,YAAY,CAAA;KAAE,CAAC;IACpD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"code-block.d.ts","sourceRoot":"","sources":["../../../src/components/code-block/code-block.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,OAAO,CAAC;AAO5E,OAAO,EAAE,KAAK,QAAQ,EAAiB,MAAM,wBAAwB,CAAC;AAEtE,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,eAAe,GAAG,eAAe,CAAC;IAC7C,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,KAAK,CAAC,EAAE;QAAE,KAAK,EAAE,YAAY,CAAC;QAAC,IAAI,EAAE,YAAY,CAAA;KAAE,CAAC;IACpD,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,MAAM,CAAC,EAAE,QAAQ,CAAC;CACnB;AAKD;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,QAAiB,EACjB,QAAQ,EACR,KAAqB,EACrB,eAAuB,EACvB,SAAS,EACT,MAAM,GACP,EAAE,cAAc,qBAqFhB"}
|
|
@@ -6,6 +6,7 @@ import { codeToHtml } from "shiki";
|
|
|
6
6
|
import { Badge } from "@forthtilliath/shadcn-ui/components/badge";
|
|
7
7
|
import { Button } from "@forthtilliath/shadcn-ui/components/button";
|
|
8
8
|
import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
|
|
9
|
+
import { useUiMessages } from "../../locale/locale.js";
|
|
9
10
|
const DEFAULT_THEME = { light: "github-light", dark: "github-dark" };
|
|
10
11
|
const COPY_FEEDBACK_MS = 2000;
|
|
11
12
|
/**
|
|
@@ -20,7 +21,8 @@ const COPY_FEEDBACK_MS = 2000;
|
|
|
20
21
|
* @author Forth
|
|
21
22
|
* @copyright 2026 Forth
|
|
22
23
|
*/
|
|
23
|
-
export function CodeBlock({ code, language = "text", filename, theme = DEFAULT_THEME, showLineNumbers = false, className, }) {
|
|
24
|
+
export function CodeBlock({ code, language = "text", filename, theme = DEFAULT_THEME, showLineNumbers = false, className, locale, }) {
|
|
25
|
+
const messages = useUiMessages(locale);
|
|
24
26
|
const [html, setHtml] = React.useState(null);
|
|
25
27
|
const [copied, setCopied] = React.useState(false);
|
|
26
28
|
React.useEffect(() => {
|
|
@@ -46,7 +48,7 @@ export function CodeBlock({ code, language = "text", filename, theme = DEFAULT_T
|
|
|
46
48
|
}, COPY_FEEDBACK_MS);
|
|
47
49
|
});
|
|
48
50
|
}
|
|
49
|
-
return (_jsxs("div", { className: cn("border-border bg-card overflow-hidden rounded-lg border text-sm", className), children: [(filename ?? language !== "text") && (_jsx("div", { className: "border-border bg-muted/40 flex items-center justify-between border-b px-3 py-1.5", children: _jsxs("div", { className: "flex items-center gap-2", children: [filename && (_jsx("span", { className: "text-muted-foreground font-mono text-xs", children: filename })), _jsx(Badge, { variant: "outline", className: "font-mono text-[10px]", children: language })] }) })), _jsxs("div", { className: "group relative", children: [_jsx(Button, { variant: "ghost", size: "icon", onClick: handleCopy, "aria-label": copied ?
|
|
51
|
+
return (_jsxs("div", { className: cn("border-border bg-card overflow-hidden rounded-lg border text-sm", className), children: [(filename ?? language !== "text") && (_jsx("div", { className: "border-border bg-muted/40 flex items-center justify-between border-b px-3 py-1.5", children: _jsxs("div", { className: "flex items-center gap-2", children: [filename && (_jsx("span", { className: "text-muted-foreground font-mono text-xs", children: filename })), _jsx(Badge, { variant: "outline", className: "font-mono text-[10px]", children: language })] }) })), _jsxs("div", { className: "group relative", children: [_jsx(Button, { variant: "ghost", size: "icon", onClick: handleCopy, "aria-label": copied ? messages.codeBlock.copied : messages.codeBlock.copy, className: "absolute top-2 right-2 size-7 opacity-0 transition-opacity group-hover:opacity-100", children: copied ? _jsx(CheckIcon, {}) : _jsx(CopyIcon, {}) }), html ? (_jsx("div", { className: cn("[&_pre]:overflow-x-auto [&_pre]:p-4", showLineNumbers &&
|
|
50
52
|
"[&_code]:[counter-reset:line] [&_.line]:[counter-increment:line] [&_.line]:before:text-muted-foreground [&_.line]:before:mr-4 [&_.line]:before:inline-block [&_.line]:before:w-4 [&_.line]:before:text-right [&_.line]:before:content-[counter(line)]"),
|
|
51
53
|
// Shiki generates static markup from the given `code` string
|
|
52
54
|
// server-side-safe (no user input reaches this beyond the
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export type { CodeBlockProps } from "./code-block";
|
|
2
|
-
export { CodeBlock } from "./code-block";
|
|
1
|
+
export type { CodeBlockProps } from "./code-block.js";
|
|
2
|
+
export { CodeBlock } from "./code-block.js";
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/code-block/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/code-block/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { CodeBlock } from "./code-block";
|
|
1
|
+
export { CodeBlock } from "./code-block.js";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export type { CollapsibleProps } from "./collapsible";
|
|
2
|
-
export type { CollapsibleContentProps } from "./collapsible";
|
|
3
|
-
export type { CollapsibleTriggerProps } from "./collapsible";
|
|
4
|
-
export { Collapsible } from "./collapsible";
|
|
5
|
-
export { CollapsibleContent } from "./collapsible";
|
|
6
|
-
export { CollapsibleTrigger } from "./collapsible";
|
|
1
|
+
export type { CollapsibleProps } from "./collapsible.js";
|
|
2
|
+
export type { CollapsibleContentProps } from "./collapsible.js";
|
|
3
|
+
export type { CollapsibleTriggerProps } from "./collapsible.js";
|
|
4
|
+
export { Collapsible } from "./collapsible.js";
|
|
5
|
+
export { CollapsibleContent } from "./collapsible.js";
|
|
6
|
+
export { CollapsibleTrigger } from "./collapsible.js";
|
|
7
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/collapsible/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,gBAAgB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/collapsible/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,YAAY,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAChE,YAAY,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { Collapsible } from "./collapsible";
|
|
2
|
-
export { CollapsibleContent } from "./collapsible";
|
|
3
|
-
export { CollapsibleTrigger } from "./collapsible";
|
|
1
|
+
export { Collapsible } from "./collapsible.js";
|
|
2
|
+
export { CollapsibleContent } from "./collapsible.js";
|
|
3
|
+
export { CollapsibleTrigger } from "./collapsible.js";
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
+
import { type UiLocale } from "../../locale/locale.js";
|
|
2
3
|
export interface ColorPickerProps {
|
|
3
4
|
value?: string;
|
|
4
5
|
defaultValue?: string;
|
|
@@ -7,6 +8,11 @@ export interface ColorPickerProps {
|
|
|
7
8
|
className?: string;
|
|
8
9
|
/** Accessible name for the color swatch, which otherwise has no visible text. */
|
|
9
10
|
ariaLabel?: string;
|
|
11
|
+
/**
|
|
12
|
+
* Language of the built-in labels — French by default, or the nearest
|
|
13
|
+
* `UiLocaleProvider`'s. Explicit text props still win.
|
|
14
|
+
*/
|
|
15
|
+
locale?: UiLocale;
|
|
10
16
|
}
|
|
11
17
|
/**
|
|
12
18
|
* A color swatch + hex text input, kept in sync — built on the browser's
|
|
@@ -22,5 +28,5 @@ export interface ColorPickerProps {
|
|
|
22
28
|
* @author Forth
|
|
23
29
|
* @copyright 2026 Forth
|
|
24
30
|
*/
|
|
25
|
-
export declare function ColorPicker({ value, defaultValue, onValueChange, disabled, className, ariaLabel, }: ColorPickerProps): React.JSX.Element;
|
|
31
|
+
export declare function ColorPicker({ value, defaultValue, onValueChange, disabled, className, ariaLabel, locale, }: ColorPickerProps): React.JSX.Element;
|
|
26
32
|
//# sourceMappingURL=color-picker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"color-picker.d.ts","sourceRoot":"","sources":["../../../src/components/color-picker/color-picker.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"color-picker.d.ts","sourceRoot":"","sources":["../../../src/components/color-picker/color-picker.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EAAE,KAAK,QAAQ,EAAiB,MAAM,wBAAwB,CAAC;AAEtE,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,MAAM,CAAC,EAAE,QAAQ,CAAC;CACnB;AAID;;;;;;;;;;;;;GAaG;AACH,wBAAgB,WAAW,CAAC,EAC1B,KAAK,EACL,YAAwB,EACxB,aAAa,EACb,QAAgB,EAChB,SAAS,EACT,SAAS,EACT,MAAM,GACP,EAAE,gBAAgB,qBAsDlB"}
|
|
@@ -3,6 +3,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
3
3
|
import * as React from "react";
|
|
4
4
|
import { Input } from "@forthtilliath/shadcn-ui/components/input";
|
|
5
5
|
import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
|
|
6
|
+
import { useUiMessages } from "../../locale/locale.js";
|
|
6
7
|
const HEX_PATTERN = /^#[0-9a-f]{6}$/i;
|
|
7
8
|
/**
|
|
8
9
|
* A color swatch + hex text input, kept in sync — built on the browser's
|
|
@@ -18,7 +19,8 @@ const HEX_PATTERN = /^#[0-9a-f]{6}$/i;
|
|
|
18
19
|
* @author Forth
|
|
19
20
|
* @copyright 2026 Forth
|
|
20
21
|
*/
|
|
21
|
-
export function ColorPicker({ value, defaultValue = "#000000", onValueChange, disabled = false, className, ariaLabel
|
|
22
|
+
export function ColorPicker({ value, defaultValue = "#000000", onValueChange, disabled = false, className, ariaLabel, locale, }) {
|
|
23
|
+
const messages = useUiMessages(locale);
|
|
22
24
|
const [uncontrolledValue, setUncontrolledValue] = React.useState(defaultValue);
|
|
23
25
|
const [textValue, setTextValue] = React.useState(defaultValue);
|
|
24
26
|
const color = value ?? uncontrolledValue;
|
|
@@ -27,9 +29,9 @@ export function ColorPicker({ value, defaultValue = "#000000", onValueChange, di
|
|
|
27
29
|
setTextValue(next);
|
|
28
30
|
onValueChange?.(next);
|
|
29
31
|
}
|
|
30
|
-
return (_jsxs("div", { "data-slot": "color-picker", className: cn("flex items-center gap-2", className), children: [_jsx("label", { "aria-label": ariaLabel, className: cn("border-input size-9 shrink-0 overflow-hidden rounded-md border shadow-xs", disabled && "pointer-events-none opacity-50"), style: { backgroundColor: color }, children: _jsx("input", { type: "color", value: color, disabled: disabled, onChange: (e) => {
|
|
32
|
+
return (_jsxs("div", { "data-slot": "color-picker", className: cn("flex items-center gap-2", className), children: [_jsx("label", { "aria-label": ariaLabel ?? messages.colorPicker.choose, className: cn("border-input size-9 shrink-0 overflow-hidden rounded-md border shadow-xs", disabled && "pointer-events-none opacity-50"), style: { backgroundColor: color }, children: _jsx("input", { type: "color", value: color, disabled: disabled, onChange: (e) => {
|
|
31
33
|
commit(e.target.value);
|
|
32
|
-
}, className: "size-full cursor-pointer opacity-0" }) }), _jsx(Input, { value: textValue, disabled: disabled, onChange: (e) => {
|
|
34
|
+
}, className: "size-full cursor-pointer opacity-0" }) }), _jsx(Input, { value: textValue, "aria-label": messages.colorPicker.hex, disabled: disabled, onChange: (e) => {
|
|
33
35
|
setTextValue(e.target.value);
|
|
34
36
|
if (HEX_PATTERN.test(e.target.value)) {
|
|
35
37
|
commit(e.target.value);
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export type { ColorPickerProps } from "./color-picker";
|
|
2
|
-
export { ColorPicker } from "./color-picker";
|
|
1
|
+
export type { ColorPickerProps } from "./color-picker.js";
|
|
2
|
+
export { ColorPicker } from "./color-picker.js";
|
|
3
3
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/color-picker/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,gBAAgB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/color-picker/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { ColorPicker } from "./color-picker";
|
|
1
|
+
export { ColorPicker } from "./color-picker.js";
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { ColumnMenuColumn, ColumnMenuLabels } from "./types.js";
|
|
2
|
+
export interface ColumnMenuProps<C extends ColumnMenuColumn> {
|
|
3
|
+
columns: C[];
|
|
4
|
+
/** Restored by the reset button. */
|
|
5
|
+
defaultColumns: C[];
|
|
6
|
+
/** Receives an updater, so a `useState` setter can be passed directly. */
|
|
7
|
+
onColumnsChange: (update: (prev: C[]) => C[]) => void;
|
|
8
|
+
/** Overrides some or all of the displayed texts. */
|
|
9
|
+
labels?: Partial<ColumnMenuLabels>;
|
|
10
|
+
/** Side of the trigger the dropdown is aligned to (default: `"end"`). */
|
|
11
|
+
align?: "start" | "end";
|
|
12
|
+
/**
|
|
13
|
+
* Custom classes for each part of the component.
|
|
14
|
+
*
|
|
15
|
+
* - `root` wraps the trigger and the dropdown.
|
|
16
|
+
* - `trigger` is the toggle button.
|
|
17
|
+
* - `badge` is the "visible / total" counter inside the trigger.
|
|
18
|
+
* - `content` is the dropdown panel.
|
|
19
|
+
* - `header` is the title + reset bar.
|
|
20
|
+
* - `hint` is the usage hint under the header.
|
|
21
|
+
* - `list` wraps the rows.
|
|
22
|
+
* - `row` is applied to every column row.
|
|
23
|
+
*/
|
|
24
|
+
className?: Partial<Record<"root" | "trigger" | "badge" | "content" | "header" | "hint" | "list" | "row", string>>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* A dropdown to show/hide and reorder (drag and drop, touch and keyboard
|
|
28
|
+
* included) the columns of a table, with a "visible / total" counter and a
|
|
29
|
+
* reset button. Closes on outside click and `Escape`.
|
|
30
|
+
*
|
|
31
|
+
* Pair it with `createColumnStorage` from `@forthtilliath/ts-kit` to persist
|
|
32
|
+
* the user's layout.
|
|
33
|
+
*
|
|
34
|
+
* @version 0.1.0
|
|
35
|
+
* @author Forth
|
|
36
|
+
* @copyright 2026 Forth
|
|
37
|
+
*/
|
|
38
|
+
export declare function ColumnMenu<C extends ColumnMenuColumn>({ columns, defaultColumns, onColumnsChange, labels, align, className, }: ColumnMenuProps<C>): import("react").JSX.Element;
|
|
39
|
+
//# sourceMappingURL=column-menu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column-menu.d.ts","sourceRoot":"","sources":["../../../src/components/column-menu/column-menu.tsx"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAIrE,MAAM,WAAW,eAAe,CAAC,CAAC,SAAS,gBAAgB;IACzD,OAAO,EAAE,CAAC,EAAE,CAAC;IACb,oCAAoC;IACpC,cAAc,EAAE,CAAC,EAAE,CAAC;IACpB,0EAA0E;IAC1E,eAAe,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC;IACtD,oDAAoD;IACpD,MAAM,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACnC,yEAAyE;IACzE,KAAK,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IACxB;;;;;;;;;;;OAWG;IACH,SAAS,CAAC,EAAE,OAAO,CACjB,MAAM,CACF,MAAM,GACN,SAAS,GACT,OAAO,GACP,SAAS,GACT,QAAQ,GACR,MAAM,GACN,MAAM,GACN,KAAK,EACP,MAAM,CACP,CACF,CAAC;CACH;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,UAAU,CAAC,CAAC,SAAS,gBAAgB,EAAE,EACrD,OAAO,EACP,cAAc,EACd,eAAe,EACf,MAAM,EACN,KAAa,EACb,SAAS,GACV,EAAE,eAAe,CAAC,CAAC,CAAC,+BAyJpB"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useId, useRef, useState } from "react";
|
|
4
|
+
import { closestCenter, DndContext } from "@dnd-kit/core";
|
|
5
|
+
import { arrayMove, SortableContext, verticalListSortingStrategy, } from "@dnd-kit/sortable";
|
|
6
|
+
import { ChevronDown, RotateCcw } from "lucide-react";
|
|
7
|
+
import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
|
|
8
|
+
import { SortableColumnRow } from "./sortable-column-row.js";
|
|
9
|
+
import { DEFAULT_COLUMN_MENU_LABELS } from "./types.js";
|
|
10
|
+
import { useDndSensors } from "./use-dnd-sensors.js";
|
|
11
|
+
/**
|
|
12
|
+
* A dropdown to show/hide and reorder (drag and drop, touch and keyboard
|
|
13
|
+
* included) the columns of a table, with a "visible / total" counter and a
|
|
14
|
+
* reset button. Closes on outside click and `Escape`.
|
|
15
|
+
*
|
|
16
|
+
* Pair it with `createColumnStorage` from `@forthtilliath/ts-kit` to persist
|
|
17
|
+
* the user's layout.
|
|
18
|
+
*
|
|
19
|
+
* @version 0.1.0
|
|
20
|
+
* @author Forth
|
|
21
|
+
* @copyright 2026 Forth
|
|
22
|
+
*/
|
|
23
|
+
export function ColumnMenu({ columns, defaultColumns, onColumnsChange, labels, align = "end", className, }) {
|
|
24
|
+
const text = { ...DEFAULT_COLUMN_MENU_LABELS, ...labels };
|
|
25
|
+
// Stable id: avoids a hydration mismatch on dnd-kit's aria-describedby
|
|
26
|
+
const dndId = useId();
|
|
27
|
+
const contentId = useId();
|
|
28
|
+
const rootRef = useRef(null);
|
|
29
|
+
const [open, setOpen] = useState(false);
|
|
30
|
+
const sensors = useDndSensors();
|
|
31
|
+
const visibleCount = columns.filter((c) => c.visible).length;
|
|
32
|
+
const allVisible = visibleCount === columns.length;
|
|
33
|
+
useEffect(() => {
|
|
34
|
+
if (!open)
|
|
35
|
+
return;
|
|
36
|
+
function handlePointerDown(event) {
|
|
37
|
+
if (!rootRef.current?.contains(event.target))
|
|
38
|
+
setOpen(false);
|
|
39
|
+
}
|
|
40
|
+
function handleKeyDown(event) {
|
|
41
|
+
if (event.key === "Escape")
|
|
42
|
+
setOpen(false);
|
|
43
|
+
}
|
|
44
|
+
document.addEventListener("pointerdown", handlePointerDown);
|
|
45
|
+
document.addEventListener("keydown", handleKeyDown);
|
|
46
|
+
return () => {
|
|
47
|
+
document.removeEventListener("pointerdown", handlePointerDown);
|
|
48
|
+
document.removeEventListener("keydown", handleKeyDown);
|
|
49
|
+
};
|
|
50
|
+
}, [open]);
|
|
51
|
+
function handleDragEnd({ active, over }) {
|
|
52
|
+
if (!over || active.id === over.id)
|
|
53
|
+
return;
|
|
54
|
+
onColumnsChange((prev) => {
|
|
55
|
+
const oldIndex = prev.findIndex((c) => c.key === active.id);
|
|
56
|
+
const newIndex = prev.findIndex((c) => c.key === over.id);
|
|
57
|
+
return arrayMove(prev, oldIndex, newIndex);
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
function toggleColumn(key) {
|
|
61
|
+
onColumnsChange((prev) => prev.map((c) => (c.key === key ? { ...c, visible: !c.visible } : c)));
|
|
62
|
+
}
|
|
63
|
+
function reset() {
|
|
64
|
+
onColumnsChange(() => defaultColumns);
|
|
65
|
+
setOpen(false);
|
|
66
|
+
}
|
|
67
|
+
return (_jsxs("div", { ref: rootRef, "data-slot": "column-menu", className: cn("relative", className?.root), children: [_jsxs("button", { type: "button", "aria-expanded": open, "aria-controls": contentId, onClick: () => {
|
|
68
|
+
setOpen((v) => !v);
|
|
69
|
+
}, className: cn("flex items-center gap-1.5 rounded-lg border px-2.5 py-1.5 text-sm transition-all", open
|
|
70
|
+
? "border-primary bg-primary/10 text-primary"
|
|
71
|
+
: "border-border text-foreground/60 hover:border-primary hover:text-foreground", className?.trigger), children: [_jsx("span", { className: "hidden sm:inline", children: text.trigger }), _jsxs("span", { className: cn("rounded-full px-1.5 py-0.5 text-xs font-medium", allVisible
|
|
72
|
+
? "bg-foreground/10 text-foreground/40"
|
|
73
|
+
: "bg-primary text-primary-foreground", className?.badge), children: [visibleCount, "/", columns.length] }), _jsx(ChevronDown, { className: cn("size-3.5 opacity-60 transition-transform", open && "rotate-180"), "aria-hidden": "true" })] }), open && (_jsxs("div", { id: contentId, "data-slot": "column-menu-content", className: cn("bg-background border-border absolute top-full z-20 mt-2 w-64 overflow-hidden rounded-xl border shadow-xl", align === "end" ? "right-0" : "left-0", className?.content), children: [_jsxs("div", { className: cn("border-border bg-muted flex items-center justify-between border-b px-4 py-3", className?.header), children: [_jsx("p", { className: "text-foreground text-xs font-medium", children: text.title }), _jsxs("button", { type: "button", onClick: reset, className: "text-foreground/50 hover:text-primary flex items-center gap-1 text-xs transition-colors", children: [_jsx(RotateCcw, { className: "size-3", "aria-hidden": "true" }), text.reset] })] }), _jsx("p", { className: cn("border-border bg-muted/50 text-foreground/50 border-b px-4 py-2 text-xs", className?.hint), children: text.hint }), _jsx("div", { className: cn("p-2", className?.list), children: _jsx(DndContext, { id: dndId, sensors: sensors, collisionDetection: closestCenter, onDragEnd: handleDragEnd, children: _jsx(SortableContext, { items: columns.map((c) => c.key), strategy: verticalListSortingStrategy, children: columns.map((column, index) => (_jsx(SortableColumnRow, { column: column, index: index, total: columns.length, dragHandleLabel: text.dragHandle(column.label), onToggle: toggleColumn, className: className?.row }, column.key))) }) }) })] }))] }));
|
|
74
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type { ColumnMenuProps } from "./column-menu.js";
|
|
2
|
+
export { ColumnMenu } from "./column-menu.js";
|
|
3
|
+
export type { ColumnMenuColumn, ColumnMenuLabels } from "./types.js";
|
|
4
|
+
export { DEFAULT_COLUMN_MENU_LABELS } from "./types.js";
|
|
5
|
+
export { useDndSensors } from "./use-dnd-sensors.js";
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/column-menu/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AACrE,OAAO,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ColumnMenuColumn } from "./types.js";
|
|
2
|
+
export interface SortableColumnRowProps<K extends string> {
|
|
3
|
+
column: ColumnMenuColumn<K>;
|
|
4
|
+
index: number;
|
|
5
|
+
total: number;
|
|
6
|
+
dragHandleLabel: string;
|
|
7
|
+
onToggle: (key: K) => void;
|
|
8
|
+
/** Carries `data-dragging` while the row is being dragged. */
|
|
9
|
+
className?: string;
|
|
10
|
+
}
|
|
11
|
+
/** One row of `ColumnMenu`: drag handle, visibility switch, position. */
|
|
12
|
+
export declare function SortableColumnRow<K extends string>({ column, index, total, dragHandleLabel, onToggle, className, }: SortableColumnRowProps<K>): import("react").JSX.Element;
|
|
13
|
+
//# sourceMappingURL=sortable-column-row.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sortable-column-row.d.ts","sourceRoot":"","sources":["../../../src/components/column-menu/sortable-column-row.tsx"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEnD,MAAM,WAAW,sBAAsB,CAAC,CAAC,SAAS,MAAM;IACtD,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC;IAC3B,8DAA8D;IAC9D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,yEAAyE;AACzE,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,EAAE,EAClD,MAAM,EACN,KAAK,EACL,KAAK,EACL,eAAe,EACf,QAAQ,EACR,SAAS,GACV,EAAE,sBAAsB,CAAC,CAAC,CAAC,+BAuD3B"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useSortable } from "@dnd-kit/sortable";
|
|
4
|
+
import { CSS } from "@dnd-kit/utilities";
|
|
5
|
+
import { GripVertical } from "lucide-react";
|
|
6
|
+
import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
|
|
7
|
+
import { ToggleSwitch } from "../toggle-switch/index.js";
|
|
8
|
+
/** One row of `ColumnMenu`: drag handle, visibility switch, position. */
|
|
9
|
+
export function SortableColumnRow({ column, index, total, dragHandleLabel, onToggle, className, }) {
|
|
10
|
+
const { attributes, listeners, setNodeRef, transform, transition, isDragging, } = useSortable({ id: column.key });
|
|
11
|
+
return (_jsxs("div", { ref: setNodeRef, "data-slot": "column-menu-row", "data-dragging": isDragging || undefined, style: {
|
|
12
|
+
transform: CSS.Transform.toString(transform),
|
|
13
|
+
transition,
|
|
14
|
+
opacity: isDragging ? 0.5 : 1,
|
|
15
|
+
zIndex: isDragging ? 10 : undefined,
|
|
16
|
+
}, className: cn("flex items-center gap-3 rounded-lg px-3 py-2 transition-colors", isDragging ? "bg-primary/5 border-primary/20 border" : "hover:bg-muted", className), children: [_jsx("button", { type: "button", ...attributes, ...listeners, "aria-label": dragHandleLabel, title: dragHandleLabel, className: "text-foreground/30 hover:text-foreground/60 shrink-0 cursor-grab touch-none transition-colors active:cursor-grabbing", children: _jsx(GripVertical, { className: "size-4", "aria-hidden": "true" }) }), _jsx(ToggleSwitch, { size: "sm", checked: column.visible, onCheckedChange: () => {
|
|
17
|
+
onToggle(column.key);
|
|
18
|
+
}, label: column.label, className: {
|
|
19
|
+
root: "flex-1 gap-3",
|
|
20
|
+
label: "text-foreground/40 group-data-[state=checked]/toggle-switch:text-foreground flex-1 text-left transition-colors",
|
|
21
|
+
} }), _jsxs("span", { className: "text-foreground/30 shrink-0 font-mono text-xs", children: [index + 1, "/", total] })] }));
|
|
22
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** A table column the user can show/hide and reorder. */
|
|
2
|
+
export interface ColumnMenuColumn<K extends string = string> {
|
|
3
|
+
key: K;
|
|
4
|
+
label: string;
|
|
5
|
+
visible: boolean;
|
|
6
|
+
}
|
|
7
|
+
/** Texts displayed by `ColumnMenu` (English by default). */
|
|
8
|
+
export interface ColumnMenuLabels {
|
|
9
|
+
/** Trigger button text (hidden on small screens). */
|
|
10
|
+
trigger: string;
|
|
11
|
+
/** Menu title. */
|
|
12
|
+
title: string;
|
|
13
|
+
/** Reset button text. */
|
|
14
|
+
reset: string;
|
|
15
|
+
/** Usage hint under the title. */
|
|
16
|
+
hint: string;
|
|
17
|
+
/** Tooltip / accessible name of a row's drag handle. */
|
|
18
|
+
dragHandle: (label: string) => string;
|
|
19
|
+
}
|
|
20
|
+
export declare const DEFAULT_COLUMN_MENU_LABELS: ColumnMenuLabels;
|
|
21
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/components/column-menu/types.ts"],"names":[],"mappings":"AAAA,yDAAyD;AACzD,MAAM,WAAW,gBAAgB,CAAC,CAAC,SAAS,MAAM,GAAG,MAAM;IACzD,GAAG,EAAE,CAAC,CAAC;IACP,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,4DAA4D;AAC5D,MAAM,WAAW,gBAAgB;IAC/B,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,kBAAkB;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;CACvC;AAED,eAAO,MAAM,0BAA0B,EAAE,gBAMxC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mouse (5px threshold, so clicks still work), touch (250ms long press, so
|
|
3
|
+
* the list still scrolls) and keyboard sensors for a sortable list.
|
|
4
|
+
*/
|
|
5
|
+
export declare function useDndSensors(): import("@dnd-kit/core").SensorDescriptor<import("@dnd-kit/core").SensorOptions>[];
|
|
6
|
+
//# sourceMappingURL=use-dnd-sensors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-dnd-sensors.d.ts","sourceRoot":"","sources":["../../../src/components/column-menu/use-dnd-sensors.ts"],"names":[],"mappings":"AAWA;;;GAGG;AACH,wBAAgB,aAAa,sFAU5B"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { KeyboardSensor, MouseSensor, TouchSensor, useSensor, useSensors, } from "@dnd-kit/core";
|
|
3
|
+
import { sortableKeyboardCoordinates } from "@dnd-kit/sortable";
|
|
4
|
+
/**
|
|
5
|
+
* Mouse (5px threshold, so clicks still work), touch (250ms long press, so
|
|
6
|
+
* the list still scrolls) and keyboard sensors for a sortable list.
|
|
7
|
+
*/
|
|
8
|
+
export function useDndSensors() {
|
|
9
|
+
return useSensors(useSensor(MouseSensor, { activationConstraint: { distance: 5 } }), useSensor(TouchSensor, {
|
|
10
|
+
activationConstraint: { delay: 250, tolerance: 5 },
|
|
11
|
+
}), useSensor(KeyboardSensor, {
|
|
12
|
+
coordinateGetter: sortableKeyboardCoordinates,
|
|
13
|
+
}));
|
|
14
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
+
import { type UiLocale } from "../../locale/locale.js";
|
|
2
3
|
export interface ComboboxOption {
|
|
3
4
|
label: string;
|
|
4
5
|
value: string;
|
|
@@ -12,6 +13,20 @@ export interface ComboboxProps {
|
|
|
12
13
|
emptyMessage?: string;
|
|
13
14
|
disabled?: boolean;
|
|
14
15
|
className?: string;
|
|
16
|
+
/** `id` of the trigger — set by `Field`, or for a `<label htmlFor>`. */
|
|
17
|
+
id?: string;
|
|
18
|
+
/**
|
|
19
|
+
* Accessible name of the trigger (a combobox takes no name from its text).
|
|
20
|
+
* Defaults to the placeholder, unless a `<label>` targets `id`.
|
|
21
|
+
*/
|
|
22
|
+
ariaLabel?: string;
|
|
23
|
+
"aria-describedby"?: string;
|
|
24
|
+
"aria-invalid"?: boolean;
|
|
25
|
+
/**
|
|
26
|
+
* Language of the built-in labels — French by default, or the nearest
|
|
27
|
+
* `UiLocaleProvider`'s. Explicit text props still win.
|
|
28
|
+
*/
|
|
29
|
+
locale?: UiLocale;
|
|
15
30
|
}
|
|
16
31
|
/**
|
|
17
32
|
* An autocomplete/searchable select — shadcn-ui doesn't ship a standalone
|
|
@@ -27,5 +42,5 @@ export interface ComboboxProps {
|
|
|
27
42
|
* @author Forth
|
|
28
43
|
* @copyright 2026 Forth
|
|
29
44
|
*/
|
|
30
|
-
export declare function Combobox({ options, value, onValueChange, placeholder, emptyMessage, disabled, className, }: ComboboxProps): React.JSX.Element;
|
|
45
|
+
export declare function Combobox({ options, value, onValueChange, placeholder, emptyMessage, disabled, className, locale, id, ariaLabel, "aria-describedby": ariaDescribedBy, "aria-invalid": ariaInvalid, }: ComboboxProps): React.JSX.Element;
|
|
31
46
|
//# sourceMappingURL=combobox.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"combobox.d.ts","sourceRoot":"","sources":["../../../src/components/combobox/combobox.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"combobox.d.ts","sourceRoot":"","sources":["../../../src/components/combobox/combobox.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAkB/B,OAAO,EAAE,KAAK,QAAQ,EAAiB,MAAM,wBAAwB,CAAC;AAGtE,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,MAAM,CAAC,EAAE,QAAQ,CAAC;CACnB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,QAAQ,CAAC,EACvB,OAAO,EACP,KAAK,EACL,aAAa,EACb,WAAW,EACX,YAAY,EACZ,QAAgB,EAChB,SAAS,EACT,MAAM,EACN,EAAE,EACF,SAAS,EACT,kBAAkB,EAAE,eAAe,EACnC,cAAc,EAAE,WAAW,GAC5B,EAAE,aAAa,qBA8Df"}
|
|
@@ -5,7 +5,8 @@ import { CheckIcon, ChevronsUpDownIcon } from "lucide-react";
|
|
|
5
5
|
import { Command, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, } from "@forthtilliath/shadcn-ui/components/command";
|
|
6
6
|
import { Popover, PopoverContent, PopoverTrigger, } from "@forthtilliath/shadcn-ui/components/popover";
|
|
7
7
|
import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
|
|
8
|
-
import {
|
|
8
|
+
import { useUiMessages } from "../../locale/locale.js";
|
|
9
|
+
import { Button } from "../button/index.js";
|
|
9
10
|
/**
|
|
10
11
|
* An autocomplete/searchable select — shadcn-ui doesn't ship a standalone
|
|
11
12
|
* Combobox primitive, only a docs recipe combining `Popover` + `Command`
|
|
@@ -20,10 +21,13 @@ import { Button } from "../button";
|
|
|
20
21
|
* @author Forth
|
|
21
22
|
* @copyright 2026 Forth
|
|
22
23
|
*/
|
|
23
|
-
export function Combobox({ options, value, onValueChange, placeholder
|
|
24
|
+
export function Combobox({ options, value, onValueChange, placeholder, emptyMessage, disabled = false, className, locale, id, ariaLabel, "aria-describedby": ariaDescribedBy, "aria-invalid": ariaInvalid, }) {
|
|
25
|
+
const messages = useUiMessages(locale);
|
|
26
|
+
const emptyMessageText = emptyMessage ?? messages.emptyResults;
|
|
27
|
+
const placeholderText = placeholder ?? messages.combobox.placeholder;
|
|
24
28
|
const [open, setOpen] = React.useState(false);
|
|
25
29
|
const selected = options.find((option) => option.value === value);
|
|
26
|
-
return (_jsxs(Popover, { open: open, onOpenChange: setOpen, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs(Button, { type: "button", variant: "outline", role: "combobox", "aria-expanded": open, disabled: disabled, className: cn("w-full justify-between font-normal", className), children: [selected?.label ??
|
|
30
|
+
return (_jsxs(Popover, { open: open, onOpenChange: setOpen, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs(Button, { type: "button", variant: "outline", id: id, role: "combobox", "aria-expanded": open, "aria-label": ariaLabel ?? (id === undefined ? placeholderText : undefined), "aria-describedby": ariaDescribedBy, "aria-invalid": ariaInvalid, disabled: disabled, className: cn("w-full justify-between font-normal", className), children: [selected?.label ?? placeholderText, _jsx(ChevronsUpDownIcon, { className: "opacity-50" })] }) }), _jsx(PopoverContent, { "aria-label": ariaLabel ?? placeholderText, className: "w-(--radix-popover-trigger-width) p-0", children: _jsxs(Command, { children: [_jsx(CommandInput, { placeholder: placeholderText }), _jsxs(CommandList, { children: [_jsx(CommandEmpty, { children: emptyMessageText }), _jsx(CommandGroup, { children: options.map((option) => (_jsxs(CommandItem, { value: option.label, disabled: option.disabled, onSelect: () => {
|
|
27
31
|
onValueChange?.(option.value === value ? "" : option.value);
|
|
28
32
|
setOpen(false);
|
|
29
33
|
}, children: [_jsx(CheckIcon, { className: cn("size-4", option.value === value ? "opacity-100" : "opacity-0") }), option.label] }, option.value))) })] })] }) })] }));
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
export type { ComboboxOption, ComboboxProps } from "./combobox";
|
|
2
|
-
export { Combobox } from "./combobox";
|
|
3
|
-
export type { MultiSelectOption, MultiSelectProps } from "./multi-select";
|
|
4
|
-
export { MultiSelect } from "./multi-select";
|
|
1
|
+
export type { ComboboxOption, ComboboxProps } from "./combobox.js";
|
|
2
|
+
export { Combobox } from "./combobox.js";
|
|
3
|
+
export type { MultiSelectOption, MultiSelectProps } from "./multi-select.js";
|
|
4
|
+
export { MultiSelect } from "./multi-select.js";
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/combobox/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/combobox/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,YAAY,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { Combobox } from "./combobox";
|
|
2
|
-
export { MultiSelect } from "./multi-select";
|
|
1
|
+
export { Combobox } from "./combobox.js";
|
|
2
|
+
export { MultiSelect } from "./multi-select.js";
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import type
|
|
2
|
+
import { type UiLocale } from "../../locale/locale.js";
|
|
3
|
+
import type { ComboboxOption } from "./combobox.js";
|
|
3
4
|
export type MultiSelectOption = ComboboxOption;
|
|
4
5
|
export interface MultiSelectProps {
|
|
5
6
|
options: MultiSelectOption[];
|
|
@@ -10,6 +11,20 @@ export interface MultiSelectProps {
|
|
|
10
11
|
emptyMessage?: string;
|
|
11
12
|
disabled?: boolean;
|
|
12
13
|
className?: string;
|
|
14
|
+
/** `id` of the trigger — set by `Field`, or for a `<label htmlFor>`. */
|
|
15
|
+
id?: string;
|
|
16
|
+
/**
|
|
17
|
+
* Accessible name of the trigger (a combobox takes no name from its text).
|
|
18
|
+
* Defaults to the placeholder, unless a `<label>` targets `id`.
|
|
19
|
+
*/
|
|
20
|
+
ariaLabel?: string;
|
|
21
|
+
"aria-describedby"?: string;
|
|
22
|
+
"aria-invalid"?: boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Language of the built-in labels — French by default, or the nearest
|
|
25
|
+
* `UiLocaleProvider`'s. Explicit text props still win.
|
|
26
|
+
*/
|
|
27
|
+
locale?: UiLocale;
|
|
13
28
|
}
|
|
14
29
|
/**
|
|
15
30
|
* `Combobox`'s multi-value sibling — selected options render as removable
|
|
@@ -26,5 +41,5 @@ export interface MultiSelectProps {
|
|
|
26
41
|
* @author Forth
|
|
27
42
|
* @copyright 2026 Forth
|
|
28
43
|
*/
|
|
29
|
-
export declare function MultiSelect({ options, value, defaultValue, onValueChange, placeholder, emptyMessage, disabled, className, }: MultiSelectProps): React.JSX.Element;
|
|
44
|
+
export declare function MultiSelect({ options, value, defaultValue, onValueChange, placeholder, emptyMessage, disabled, className, locale, id, ariaLabel, "aria-describedby": ariaDescribedBy, "aria-invalid": ariaInvalid, }: MultiSelectProps): React.JSX.Element;
|
|
30
45
|
//# sourceMappingURL=multi-select.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"multi-select.d.ts","sourceRoot":"","sources":["../../../src/components/combobox/multi-select.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"multi-select.d.ts","sourceRoot":"","sources":["../../../src/components/combobox/multi-select.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAmB/B,OAAO,EAAE,KAAK,QAAQ,EAAiB,MAAM,wBAAwB,CAAC;AAGtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEpD,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAC;AAE/C,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;IAC1C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wEAAwE;IACxE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,MAAM,CAAC,EAAE,QAAQ,CAAC;CACnB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EACP,KAAK,EACL,YAAY,EACZ,aAAa,EACb,WAAW,EACX,YAAY,EACZ,QAAgB,EAChB,SAAS,EACT,MAAM,EACN,EAAE,EACF,SAAS,EACT,kBAAkB,EAAE,eAAe,EACnC,cAAc,EAAE,WAAW,GAC5B,EAAE,gBAAgB,qBA4HlB"}
|