@forthtilliath/forth-ui 0.2.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/LICENSE +21 -0
- package/README.md +279 -0
- package/dist/components/accordion/accordion-items.d.ts +3 -0
- package/dist/components/accordion/accordion-items.d.ts.map +1 -0
- package/dist/components/accordion/accordion-items.js +18 -0
- package/dist/components/accordion/accordion-multiple.d.ts +3 -0
- package/dist/components/accordion/accordion-multiple.d.ts.map +1 -0
- package/dist/components/accordion/accordion-multiple.js +8 -0
- package/dist/components/accordion/accordion-single.d.ts +3 -0
- package/dist/components/accordion/accordion-single.d.ts.map +1 -0
- package/dist/components/accordion/accordion-single.js +8 -0
- package/dist/components/accordion/accordion.d.ts +17 -0
- package/dist/components/accordion/accordion.d.ts.map +1 -0
- package/dist/components/accordion/accordion.js +23 -0
- package/dist/components/accordion/index.d.ts +2 -0
- package/dist/components/accordion/index.d.ts.map +1 -0
- package/dist/components/accordion/index.js +1 -0
- package/dist/components/accordion/types.d.ts +100 -0
- package/dist/components/accordion/types.d.ts.map +1 -0
- package/dist/components/accordion/types.js +1 -0
- package/dist/components/accordion/variants.d.ts +25 -0
- package/dist/components/accordion/variants.d.ts.map +1 -0
- package/dist/components/accordion/variants.js +96 -0
- package/dist/components/alert/alert.d.ts +38 -0
- package/dist/components/alert/alert.d.ts.map +1 -0
- package/dist/components/alert/alert.js +32 -0
- package/dist/components/alert/index.d.ts +5 -0
- package/dist/components/alert/index.d.ts.map +1 -0
- package/dist/components/alert/index.js +4 -0
- package/dist/components/alert/variants.d.ts +8 -0
- package/dist/components/alert/variants.d.ts.map +1 -0
- package/dist/components/alert/variants.js +110 -0
- package/dist/components/avatar/avatar-group.d.ts +26 -0
- package/dist/components/avatar/avatar-group.d.ts.map +1 -0
- package/dist/components/avatar/avatar-group.js +29 -0
- package/dist/components/avatar/avatar.d.ts +107 -0
- package/dist/components/avatar/avatar.d.ts.map +1 -0
- package/dist/components/avatar/avatar.js +26 -0
- package/dist/components/avatar/constants.d.ts +13 -0
- package/dist/components/avatar/constants.d.ts.map +1 -0
- package/dist/components/avatar/constants.js +8 -0
- package/dist/components/avatar/index.d.ts +5 -0
- package/dist/components/avatar/index.d.ts.map +1 -0
- package/dist/components/avatar/index.js +2 -0
- package/dist/components/avatar/variants.d.ts +31 -0
- package/dist/components/avatar/variants.d.ts.map +1 -0
- package/dist/components/avatar/variants.js +147 -0
- package/dist/components/badge/badge.d.ts +48 -0
- package/dist/components/badge/badge.d.ts.map +1 -0
- package/dist/components/badge/badge.js +33 -0
- package/dist/components/badge/index.d.ts +4 -0
- package/dist/components/badge/index.d.ts.map +1 -0
- package/dist/components/badge/index.js +1 -0
- package/dist/components/badge/variants.d.ts +12 -0
- package/dist/components/badge/variants.d.ts.map +1 -0
- package/dist/components/badge/variants.js +134 -0
- package/dist/components/banner/banner.d.ts +43 -0
- package/dist/components/banner/banner.d.ts.map +1 -0
- package/dist/components/banner/banner.js +44 -0
- package/dist/components/banner/index.d.ts +4 -0
- package/dist/components/banner/index.d.ts.map +1 -0
- package/dist/components/banner/index.js +1 -0
- package/dist/components/banner/variants.d.ts +9 -0
- package/dist/components/banner/variants.d.ts.map +1 -0
- package/dist/components/banner/variants.js +111 -0
- package/dist/components/bento-grid/bento-grid.d.ts +23 -0
- package/dist/components/bento-grid/bento-grid.d.ts.map +1 -0
- package/dist/components/bento-grid/bento-grid.js +30 -0
- package/dist/components/bento-grid/index.d.ts +3 -0
- package/dist/components/bento-grid/index.d.ts.map +1 -0
- package/dist/components/bento-grid/index.js +1 -0
- package/dist/components/breadcrumb/breadcrumb.d.ts +29 -0
- package/dist/components/breadcrumb/breadcrumb.d.ts.map +1 -0
- package/dist/components/breadcrumb/breadcrumb.js +28 -0
- package/dist/components/breadcrumb/index.d.ts +3 -0
- package/dist/components/breadcrumb/index.d.ts.map +1 -0
- package/dist/components/breadcrumb/index.js +1 -0
- package/dist/components/button/button-group.d.ts +16 -0
- package/dist/components/button/button-group.d.ts.map +1 -0
- package/dist/components/button/button-group.js +13 -0
- package/dist/components/button/button.d.ts +28 -0
- package/dist/components/button/button.d.ts.map +1 -0
- package/dist/components/button/button.js +20 -0
- package/dist/components/button/index.d.ts +6 -0
- package/dist/components/button/index.d.ts.map +1 -0
- package/dist/components/button/index.js +2 -0
- package/dist/components/button/variants.d.ts +7 -0
- package/dist/components/button/variants.d.ts.map +1 -0
- package/dist/components/button/variants.js +27 -0
- package/dist/components/checkbox/checkbox-group.d.ts +30 -0
- package/dist/components/checkbox/checkbox-group.d.ts.map +1 -0
- package/dist/components/checkbox/checkbox-group.js +32 -0
- package/dist/components/checkbox/index.d.ts +3 -0
- package/dist/components/checkbox/index.d.ts.map +1 -0
- package/dist/components/checkbox/index.js +1 -0
- package/dist/components/chip/chip.d.ts +27 -0
- package/dist/components/chip/chip.d.ts.map +1 -0
- package/dist/components/chip/chip.js +18 -0
- package/dist/components/chip/index.d.ts +3 -0
- package/dist/components/chip/index.d.ts.map +1 -0
- package/dist/components/chip/index.js +1 -0
- package/dist/components/code-block/code-block.d.ts +31 -0
- package/dist/components/code-block/code-block.d.ts.map +1 -0
- package/dist/components/code-block/code-block.js +57 -0
- package/dist/components/code-block/index.d.ts +3 -0
- package/dist/components/code-block/index.d.ts.map +1 -0
- package/dist/components/code-block/index.js +1 -0
- package/dist/components/collapsible/collapsible.d.ts +41 -0
- package/dist/components/collapsible/collapsible.d.ts.map +1 -0
- package/dist/components/collapsible/collapsible.js +50 -0
- package/dist/components/collapsible/index.d.ts +7 -0
- package/dist/components/collapsible/index.d.ts.map +1 -0
- package/dist/components/collapsible/index.js +3 -0
- package/dist/components/color-picker/color-picker.d.ts +24 -0
- package/dist/components/color-picker/color-picker.d.ts.map +1 -0
- package/dist/components/color-picker/color-picker.js +40 -0
- package/dist/components/color-picker/index.d.ts +3 -0
- package/dist/components/color-picker/index.d.ts.map +1 -0
- package/dist/components/color-picker/index.js +1 -0
- package/dist/components/combobox/combobox.d.ts +31 -0
- package/dist/components/combobox/combobox.d.ts.map +1 -0
- package/dist/components/combobox/combobox.js +30 -0
- package/dist/components/combobox/index.d.ts +5 -0
- package/dist/components/combobox/index.d.ts.map +1 -0
- package/dist/components/combobox/index.js +2 -0
- package/dist/components/combobox/multi-select.d.ts +30 -0
- package/dist/components/combobox/multi-select.d.ts.map +1 -0
- package/dist/components/combobox/multi-select.js +53 -0
- package/dist/components/command-palette/command-palette.d.ts +37 -0
- package/dist/components/command-palette/command-palette.d.ts.map +1 -0
- package/dist/components/command-palette/command-palette.js +46 -0
- package/dist/components/command-palette/index.d.ts +3 -0
- package/dist/components/command-palette/index.d.ts.map +1 -0
- package/dist/components/command-palette/index.js +1 -0
- package/dist/components/confirm-dialog/confirm-context.d.ts +15 -0
- package/dist/components/confirm-dialog/confirm-context.d.ts.map +1 -0
- package/dist/components/confirm-dialog/confirm-context.js +2 -0
- package/dist/components/confirm-dialog/confirm-dialog.d.ts +18 -0
- package/dist/components/confirm-dialog/confirm-dialog.d.ts.map +1 -0
- package/dist/components/confirm-dialog/confirm-dialog.js +40 -0
- package/dist/components/confirm-dialog/index.d.ts +4 -0
- package/dist/components/confirm-dialog/index.d.ts.map +1 -0
- package/dist/components/confirm-dialog/index.js +2 -0
- package/dist/components/confirm-dialog/use-confirm.d.ts +4 -0
- package/dist/components/confirm-dialog/use-confirm.d.ts.map +1 -0
- package/dist/components/confirm-dialog/use-confirm.js +10 -0
- package/dist/components/count-animation/count-animation.d.ts +20 -0
- package/dist/components/count-animation/count-animation.d.ts.map +1 -0
- package/dist/components/count-animation/count-animation.js +42 -0
- package/dist/components/count-animation/index.d.ts +3 -0
- package/dist/components/count-animation/index.d.ts.map +1 -0
- package/dist/components/count-animation/index.js +1 -0
- package/dist/components/date-picker/date-picker.d.ts +27 -0
- package/dist/components/date-picker/date-picker.d.ts.map +1 -0
- package/dist/components/date-picker/date-picker.js +37 -0
- package/dist/components/date-picker/index.d.ts +3 -0
- package/dist/components/date-picker/index.d.ts.map +1 -0
- package/dist/components/date-picker/index.js +1 -0
- package/dist/components/description-list/description-list.d.ts +16 -0
- package/dist/components/description-list/description-list.d.ts.map +1 -0
- package/dist/components/description-list/description-list.js +24 -0
- package/dist/components/description-list/index.d.ts +2 -0
- package/dist/components/description-list/index.d.ts.map +1 -0
- package/dist/components/description-list/index.js +1 -0
- package/dist/components/dropdrawer/dropdrawer.d.ts +27 -0
- package/dist/components/dropdrawer/dropdrawer.d.ts.map +1 -0
- package/dist/components/dropdrawer/dropdrawer.js +26 -0
- package/dist/components/dropdrawer/index.d.ts +3 -0
- package/dist/components/dropdrawer/index.d.ts.map +1 -0
- package/dist/components/dropdrawer/index.js +1 -0
- package/dist/components/dropzone/dropzone.d.ts +27 -0
- package/dist/components/dropzone/dropzone.d.ts.map +1 -0
- package/dist/components/dropzone/dropzone.js +83 -0
- package/dist/components/dropzone/index.d.ts +3 -0
- package/dist/components/dropzone/index.d.ts.map +1 -0
- package/dist/components/dropzone/index.js +1 -0
- package/dist/components/field/field.d.ts +41 -0
- package/dist/components/field/field.d.ts.map +1 -0
- package/dist/components/field/field.js +48 -0
- package/dist/components/field/index.d.ts +3 -0
- package/dist/components/field/index.d.ts.map +1 -0
- package/dist/components/field/index.js +1 -0
- package/dist/components/file-list/file-list.d.ts +29 -0
- package/dist/components/file-list/file-list.d.ts.map +1 -0
- package/dist/components/file-list/file-list.js +52 -0
- package/dist/components/file-list/index.d.ts +3 -0
- package/dist/components/file-list/index.d.ts.map +1 -0
- package/dist/components/file-list/index.js +1 -0
- package/dist/components/grid/context.d.ts +12 -0
- package/dist/components/grid/context.d.ts.map +1 -0
- package/dist/components/grid/context.js +5 -0
- package/dist/components/grid/grid-item.d.ts +14 -0
- package/dist/components/grid/grid-item.d.ts.map +1 -0
- package/dist/components/grid/grid-item.js +13 -0
- package/dist/components/grid/grid.d.ts +16 -0
- package/dist/components/grid/grid.d.ts.map +1 -0
- package/dist/components/grid/grid.js +19 -0
- package/dist/components/grid/index.d.ts +3 -0
- package/dist/components/grid/index.d.ts.map +1 -0
- package/dist/components/grid/index.js +2 -0
- package/dist/components/grid/variants.d.ts +16 -0
- package/dist/components/grid/variants.d.ts.map +1 -0
- package/dist/components/grid/variants.js +74 -0
- package/dist/components/image-input/image-input.d.ts +21 -0
- package/dist/components/image-input/image-input.d.ts.map +1 -0
- package/dist/components/image-input/image-input.js +45 -0
- package/dist/components/image-input/index.d.ts +3 -0
- package/dist/components/image-input/index.d.ts.map +1 -0
- package/dist/components/image-input/index.js +1 -0
- package/dist/components/infinite-scroll/index.d.ts +3 -0
- package/dist/components/infinite-scroll/index.d.ts.map +1 -0
- package/dist/components/infinite-scroll/index.js +1 -0
- package/dist/components/infinite-scroll/infinite-scroll.d.ts +20 -0
- package/dist/components/infinite-scroll/infinite-scroll.d.ts.map +1 -0
- package/dist/components/infinite-scroll/infinite-scroll.js +33 -0
- package/dist/components/kbd/index.d.ts +2 -0
- package/dist/components/kbd/index.d.ts.map +1 -0
- package/dist/components/kbd/index.js +1 -0
- package/dist/components/kbd/kbd.d.ts +15 -0
- package/dist/components/kbd/kbd.d.ts.map +1 -0
- package/dist/components/kbd/kbd.js +19 -0
- package/dist/components/link/index.d.ts +7 -0
- package/dist/components/link/index.d.ts.map +1 -0
- package/dist/components/link/index.js +3 -0
- package/dist/components/link/link-preview.d.ts +36 -0
- package/dist/components/link/link-preview.d.ts.map +1 -0
- package/dist/components/link/link-preview.js +27 -0
- package/dist/components/link/link.d.ts +27 -0
- package/dist/components/link/link.d.ts.map +1 -0
- package/dist/components/link/link.js +39 -0
- package/dist/components/link/variants.d.ts +8 -0
- package/dist/components/link/variants.d.ts.map +1 -0
- package/dist/components/link/variants.js +26 -0
- package/dist/components/marquee/index.d.ts +3 -0
- package/dist/components/marquee/index.d.ts.map +1 -0
- package/dist/components/marquee/index.js +1 -0
- package/dist/components/marquee/marquee.d.ts +22 -0
- package/dist/components/marquee/marquee.d.ts.map +1 -0
- package/dist/components/marquee/marquee.js +19 -0
- package/dist/components/multi-step-loader/index.d.ts +3 -0
- package/dist/components/multi-step-loader/index.d.ts.map +1 -0
- package/dist/components/multi-step-loader/index.js +1 -0
- package/dist/components/multi-step-loader/multi-step-loader.d.ts +41 -0
- package/dist/components/multi-step-loader/multi-step-loader.d.ts.map +1 -0
- package/dist/components/multi-step-loader/multi-step-loader.js +53 -0
- package/dist/components/navbar/index.d.ts +5 -0
- package/dist/components/navbar/index.d.ts.map +1 -0
- package/dist/components/navbar/index.js +2 -0
- package/dist/components/navbar/navbar-mobile-menu.d.ts +24 -0
- package/dist/components/navbar/navbar-mobile-menu.d.ts.map +1 -0
- package/dist/components/navbar/navbar-mobile-menu.js +18 -0
- package/dist/components/navbar/navbar.d.ts +24 -0
- package/dist/components/navbar/navbar.d.ts.map +1 -0
- package/dist/components/navbar/navbar.js +33 -0
- package/dist/components/notification-center/index.d.ts +3 -0
- package/dist/components/notification-center/index.d.ts.map +1 -0
- package/dist/components/notification-center/index.js +1 -0
- package/dist/components/notification-center/notification-center.d.ts +28 -0
- package/dist/components/notification-center/notification-center.d.ts.map +1 -0
- package/dist/components/notification-center/notification-center.js +24 -0
- package/dist/components/number-input/index.d.ts +3 -0
- package/dist/components/number-input/index.d.ts.map +1 -0
- package/dist/components/number-input/index.js +1 -0
- package/dist/components/number-input/number-input.d.ts +22 -0
- package/dist/components/number-input/number-input.d.ts.map +1 -0
- package/dist/components/number-input/number-input.js +37 -0
- package/dist/components/pagination/index.d.ts +5 -0
- package/dist/components/pagination/index.d.ts.map +1 -0
- package/dist/components/pagination/index.js +2 -0
- package/dist/components/pagination/pagination-range.d.ts +17 -0
- package/dist/components/pagination/pagination-range.d.ts.map +1 -0
- package/dist/components/pagination/pagination-range.js +30 -0
- package/dist/components/pagination/pagination.d.ts +26 -0
- package/dist/components/pagination/pagination.d.ts.map +1 -0
- package/dist/components/pagination/pagination.js +48 -0
- package/dist/components/password-input/index.d.ts +5 -0
- package/dist/components/password-input/index.d.ts.map +1 -0
- package/dist/components/password-input/index.js +2 -0
- package/dist/components/password-input/password-input.d.ts +15 -0
- package/dist/components/password-input/password-input.d.ts.map +1 -0
- package/dist/components/password-input/password-input.js +23 -0
- package/dist/components/password-input/password-strength-meter.d.ts +18 -0
- package/dist/components/password-input/password-strength-meter.d.ts.map +1 -0
- package/dist/components/password-input/password-strength-meter.js +40 -0
- package/dist/components/progress/index.d.ts +4 -0
- package/dist/components/progress/index.d.ts.map +1 -0
- package/dist/components/progress/index.js +1 -0
- package/dist/components/progress/progress.d.ts +25 -0
- package/dist/components/progress/progress.d.ts.map +1 -0
- package/dist/components/progress/progress.js +23 -0
- package/dist/components/progress/variants.d.ts +7 -0
- package/dist/components/progress/variants.d.ts.map +1 -0
- package/dist/components/progress/variants.js +25 -0
- package/dist/components/qr-code/index.d.ts +3 -0
- package/dist/components/qr-code/index.d.ts.map +1 -0
- package/dist/components/qr-code/index.js +1 -0
- package/dist/components/qr-code/qr-code.d.ts +28 -0
- package/dist/components/qr-code/qr-code.d.ts.map +1 -0
- package/dist/components/qr-code/qr-code.js +27 -0
- package/dist/components/radio/index.d.ts +3 -0
- package/dist/components/radio/index.d.ts.map +1 -0
- package/dist/components/radio/index.js +1 -0
- package/dist/components/radio/radio-card.d.ts +25 -0
- package/dist/components/radio/radio-card.d.ts.map +1 -0
- package/dist/components/radio/radio-card.js +24 -0
- package/dist/components/rating/index.d.ts +3 -0
- package/dist/components/rating/index.d.ts.map +1 -0
- package/dist/components/rating/index.js +1 -0
- package/dist/components/rating/rating.d.ts +23 -0
- package/dist/components/rating/rating.d.ts.map +1 -0
- package/dist/components/rating/rating.js +41 -0
- package/dist/components/relative-time/index.d.ts +3 -0
- package/dist/components/relative-time/index.d.ts.map +1 -0
- package/dist/components/relative-time/index.js +1 -0
- package/dist/components/relative-time/relative-time.d.ts +32 -0
- package/dist/components/relative-time/relative-time.d.ts.map +1 -0
- package/dist/components/relative-time/relative-time.js +62 -0
- package/dist/components/reparent/index.d.ts +3 -0
- package/dist/components/reparent/index.d.ts.map +1 -0
- package/dist/components/reparent/index.js +1 -0
- package/dist/components/reparent/reparent.d.ts +31 -0
- package/dist/components/reparent/reparent.d.ts.map +1 -0
- package/dist/components/reparent/reparent.js +51 -0
- package/dist/components/repeat/index.d.ts +2 -0
- package/dist/components/repeat/index.d.ts.map +1 -0
- package/dist/components/repeat/index.js +1 -0
- package/dist/components/repeat/repeat.d.ts +27 -0
- package/dist/components/repeat/repeat.d.ts.map +1 -0
- package/dist/components/repeat/repeat.js +15 -0
- package/dist/components/scroll-progress/index.d.ts +3 -0
- package/dist/components/scroll-progress/index.d.ts.map +1 -0
- package/dist/components/scroll-progress/index.js +1 -0
- package/dist/components/scroll-progress/scroll-progress.d.ts +19 -0
- package/dist/components/scroll-progress/scroll-progress.d.ts.map +1 -0
- package/dist/components/scroll-progress/scroll-progress.js +36 -0
- package/dist/components/scroll-shadow/index.d.ts +3 -0
- package/dist/components/scroll-shadow/index.d.ts.map +1 -0
- package/dist/components/scroll-shadow/index.js +1 -0
- package/dist/components/scroll-shadow/scroll-shadow.d.ts +20 -0
- package/dist/components/scroll-shadow/scroll-shadow.d.ts.map +1 -0
- package/dist/components/scroll-shadow/scroll-shadow.js +44 -0
- package/dist/components/scrollspy/index.d.ts +3 -0
- package/dist/components/scrollspy/index.d.ts.map +1 -0
- package/dist/components/scrollspy/index.js +1 -0
- package/dist/components/scrollspy/use-scrollspy.d.ts +30 -0
- package/dist/components/scrollspy/use-scrollspy.d.ts.map +1 -0
- package/dist/components/scrollspy/use-scrollspy.js +35 -0
- package/dist/components/separator/index.d.ts +3 -0
- package/dist/components/separator/index.d.ts.map +1 -0
- package/dist/components/separator/index.js +1 -0
- package/dist/components/separator/separator.d.ts +22 -0
- package/dist/components/separator/separator.d.ts.map +1 -0
- package/dist/components/separator/separator.js +21 -0
- package/dist/components/snippet/index.d.ts +3 -0
- package/dist/components/snippet/index.d.ts.map +1 -0
- package/dist/components/snippet/index.js +1 -0
- package/dist/components/snippet/snippet.d.ts +25 -0
- package/dist/components/snippet/snippet.d.ts.map +1 -0
- package/dist/components/snippet/snippet.js +33 -0
- package/dist/components/sortable/index.d.ts +3 -0
- package/dist/components/sortable/index.d.ts.map +1 -0
- package/dist/components/sortable/index.js +1 -0
- package/dist/components/sortable/sortable.d.ts +22 -0
- package/dist/components/sortable/sortable.d.ts.map +1 -0
- package/dist/components/sortable/sortable.js +47 -0
- package/dist/components/spacer/index.d.ts +3 -0
- package/dist/components/spacer/index.d.ts.map +1 -0
- package/dist/components/spacer/index.js +1 -0
- package/dist/components/spacer/spacer.d.ts +24 -0
- package/dist/components/spacer/spacer.d.ts.map +1 -0
- package/dist/components/spacer/spacer.js +23 -0
- package/dist/components/spinner/index.d.ts +4 -0
- package/dist/components/spinner/index.d.ts.map +1 -0
- package/dist/components/spinner/index.js +1 -0
- package/dist/components/spinner/spinner.d.ts +22 -0
- package/dist/components/spinner/spinner.d.ts.map +1 -0
- package/dist/components/spinner/spinner.js +19 -0
- package/dist/components/spinner/variants.d.ts +6 -0
- package/dist/components/spinner/variants.d.ts.map +1 -0
- package/dist/components/spinner/variants.js +13 -0
- package/dist/components/stepper/index.d.ts +3 -0
- package/dist/components/stepper/index.d.ts.map +1 -0
- package/dist/components/stepper/index.js +1 -0
- package/dist/components/stepper/stepper.d.ts +26 -0
- package/dist/components/stepper/stepper.d.ts.map +1 -0
- package/dist/components/stepper/stepper.js +27 -0
- package/dist/components/submit-button/index.d.ts +3 -0
- package/dist/components/submit-button/index.d.ts.map +1 -0
- package/dist/components/submit-button/index.js +1 -0
- package/dist/components/submit-button/submit-button.d.ts +19 -0
- package/dist/components/submit-button/submit-button.d.ts.map +1 -0
- package/dist/components/submit-button/submit-button.js +23 -0
- package/dist/components/tags-input/index.d.ts +3 -0
- package/dist/components/tags-input/index.d.ts.map +1 -0
- package/dist/components/tags-input/index.js +1 -0
- package/dist/components/tags-input/tags-input.d.ts +26 -0
- package/dist/components/tags-input/tags-input.d.ts.map +1 -0
- package/dist/components/tags-input/tags-input.js +61 -0
- package/dist/components/timeline/index.d.ts +3 -0
- package/dist/components/timeline/index.d.ts.map +1 -0
- package/dist/components/timeline/index.js +1 -0
- package/dist/components/timeline/timeline.d.ts +24 -0
- package/dist/components/timeline/timeline.d.ts.map +1 -0
- package/dist/components/timeline/timeline.js +21 -0
- package/dist/components/tree/index.d.ts +3 -0
- package/dist/components/tree/index.d.ts.map +1 -0
- package/dist/components/tree/index.js +1 -0
- package/dist/components/tree/tree.d.ts +26 -0
- package/dist/components/tree/tree.d.ts.map +1 -0
- package/dist/components/tree/tree.js +32 -0
- package/dist/globals.css +3004 -0
- package/package.json +63 -0
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { CalendarIcon } from "lucide-react";
|
|
5
|
+
import { Calendar } from "@forthtilliath/shadcn-ui/components/calendar";
|
|
6
|
+
import { Popover, PopoverContent, PopoverTrigger, } from "@forthtilliath/shadcn-ui/components/popover";
|
|
7
|
+
import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
|
|
8
|
+
import { Button } from "../button";
|
|
9
|
+
const DEFAULT_FORMAT_OPTIONS = {
|
|
10
|
+
dateStyle: "long",
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* A single-date picker — shadcn-ui's own docs describe this as a recipe
|
|
14
|
+
* (`Popover` + `Calendar`) rather than shipping a standalone primitive,
|
|
15
|
+
* one every consumer reassembles by hand. Wraps that recipe into a
|
|
16
|
+
* `value`/`onValueChange` component.
|
|
17
|
+
*
|
|
18
|
+
* _Inspired from multiple sources, to make a consistent and reusable component._
|
|
19
|
+
* @see https://ui.shadcn.com/docs/components/date-picker
|
|
20
|
+
* @see https://www.hextaui.com/docs/ui/components/date-picker
|
|
21
|
+
*
|
|
22
|
+
* @version 0.1.0
|
|
23
|
+
* @author Forth
|
|
24
|
+
* @copyright 2026 Forth
|
|
25
|
+
*/
|
|
26
|
+
export function DatePicker({ value, defaultValue, onValueChange, placeholder = "Pick a date", disabled = false, className, formatOptions = DEFAULT_FORMAT_OPTIONS, }) {
|
|
27
|
+
const [open, setOpen] = React.useState(false);
|
|
28
|
+
const [uncontrolledValue, setUncontrolledValue] = React.useState(defaultValue);
|
|
29
|
+
const selected = value ?? uncontrolledValue;
|
|
30
|
+
return (_jsxs(Popover, { open: open, onOpenChange: setOpen, children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs(Button, { type: "button", variant: "outline", disabled: disabled, className: cn("w-full justify-start text-left font-normal", selected === undefined && "text-muted-foreground", className), children: [_jsx(CalendarIcon, {}), selected !== undefined
|
|
31
|
+
? selected.toLocaleDateString(undefined, formatOptions)
|
|
32
|
+
: placeholder] }) }), _jsx(PopoverContent, { className: "w-auto p-0", align: "start", children: _jsx(Calendar, { mode: "single", selected: selected, onSelect: (date) => {
|
|
33
|
+
setUncontrolledValue(date);
|
|
34
|
+
onValueChange?.(date);
|
|
35
|
+
setOpen(false);
|
|
36
|
+
}, disabled: disabled }) })] }));
|
|
37
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/date-picker/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { DatePicker } from "./date-picker";
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type React from "react";
|
|
2
|
+
/**
|
|
3
|
+
* A description list, with terms and descriptions.
|
|
4
|
+
*
|
|
5
|
+
* _Inspired from multiple sources, to make a consistent and reusable component._
|
|
6
|
+
* @see https://ui-x.junwen-k.dev/docs/components/description-list
|
|
7
|
+
*
|
|
8
|
+
* @version 0.1.0
|
|
9
|
+
* @author Forth
|
|
10
|
+
* @copyright 2026 Forth
|
|
11
|
+
*/
|
|
12
|
+
export declare function DescriptionList({ className, ...props }: React.ComponentProps<"dl">): React.JSX.Element;
|
|
13
|
+
export declare function DescriptionGroup({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
|
|
14
|
+
export declare function DescriptionTerm({ className, ...props }: React.ComponentProps<"dt">): React.JSX.Element;
|
|
15
|
+
export declare function DescriptionDetail({ className, ...props }: React.ComponentProps<"dd">): React.JSX.Element;
|
|
16
|
+
//# sourceMappingURL=description-list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"description-list.d.ts","sourceRoot":"","sources":["../../../src/components/description-list/description-list.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,EAC9B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,qBAQ5B;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAW7B;AAED,wBAAgB,eAAe,CAAC,EAC9B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,qBAW5B;AAED,wBAAgB,iBAAiB,CAAC,EAChC,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,qBAQ5B"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
|
|
3
|
+
/**
|
|
4
|
+
* A description list, with terms and descriptions.
|
|
5
|
+
*
|
|
6
|
+
* _Inspired from multiple sources, to make a consistent and reusable component._
|
|
7
|
+
* @see https://ui-x.junwen-k.dev/docs/components/description-list
|
|
8
|
+
*
|
|
9
|
+
* @version 0.1.0
|
|
10
|
+
* @author Forth
|
|
11
|
+
* @copyright 2026 Forth
|
|
12
|
+
*/
|
|
13
|
+
export function DescriptionList({ className, ...props }) {
|
|
14
|
+
return (_jsx("dl", { "data-slot": "description-list", className: cn("divide-border divide-y", className), ...props }));
|
|
15
|
+
}
|
|
16
|
+
export function DescriptionGroup({ className, ...props }) {
|
|
17
|
+
return (_jsx("div", { "data-slot": "description-group", className: cn("flex flex-col gap-1 py-3 first:pt-0 last:pb-0 sm:flex-row sm:gap-4", className), ...props }));
|
|
18
|
+
}
|
|
19
|
+
export function DescriptionTerm({ className, ...props }) {
|
|
20
|
+
return (_jsx("dt", { "data-slot": "description-term", className: cn("text-muted-foreground text-sm font-medium sm:w-1/3 sm:shrink-0", className), ...props }));
|
|
21
|
+
}
|
|
22
|
+
export function DescriptionDetail({ className, ...props }) {
|
|
23
|
+
return (_jsx("dd", { "data-slot": "description-detail", className: cn("text-sm sm:flex-1", className), ...props }));
|
|
24
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/description-list/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,eAAe,GAChB,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { DescriptionDetail, DescriptionGroup, DescriptionList, DescriptionTerm, } from "./description-list";
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type React from "react";
|
|
2
|
+
export interface DropdrawerItem {
|
|
3
|
+
label: React.ReactNode;
|
|
4
|
+
icon?: React.ReactNode;
|
|
5
|
+
onSelect?: () => void;
|
|
6
|
+
variant?: "default" | "destructive";
|
|
7
|
+
}
|
|
8
|
+
export interface DropdrawerProps {
|
|
9
|
+
items: DropdrawerItem[];
|
|
10
|
+
trigger: React.ReactElement;
|
|
11
|
+
title?: React.ReactNode;
|
|
12
|
+
open?: boolean;
|
|
13
|
+
onOpenChange?: (open: boolean) => void;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* A menu that renders as a `DropdownMenu` on desktop and a bottom `Drawer`
|
|
17
|
+
* on mobile (via the existing `useIsMobile` hook) — the same items, the
|
|
18
|
+
* interaction pattern each platform's users actually expect.
|
|
19
|
+
*
|
|
20
|
+
* @see https://dropdrawer.jiawei.dev/
|
|
21
|
+
*
|
|
22
|
+
* @version 0.1.0
|
|
23
|
+
* @author Forth
|
|
24
|
+
* @copyright 2026 Forth
|
|
25
|
+
*/
|
|
26
|
+
export declare function Dropdrawer({ items, trigger, title, open, onOpenChange, }: DropdrawerProps): React.JSX.Element;
|
|
27
|
+
//# sourceMappingURL=dropdrawer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dropdrawer.d.ts","sourceRoot":"","sources":["../../../src/components/dropdrawer/dropdrawer.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAkB/B,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,OAAO,CAAC,EAAE,SAAS,GAAG,aAAa,CAAC;CACrC;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,OAAO,EAAE,KAAK,CAAC,YAAY,CAAC;IAC5B,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;CACxC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,OAAO,EACP,KAAK,EACL,IAAI,EACJ,YAAY,GACb,EAAE,eAAe,qBAqDjB"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { Drawer, DrawerContent, DrawerHeader, DrawerTitle, DrawerTrigger, } from "@forthtilliath/shadcn-ui/components/drawer";
|
|
4
|
+
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@forthtilliath/shadcn-ui/components/dropdown-menu";
|
|
5
|
+
import { useIsMobile } from "@forthtilliath/shadcn-ui/hooks/use-mobile";
|
|
6
|
+
import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
|
|
7
|
+
/**
|
|
8
|
+
* A menu that renders as a `DropdownMenu` on desktop and a bottom `Drawer`
|
|
9
|
+
* on mobile (via the existing `useIsMobile` hook) — the same items, the
|
|
10
|
+
* interaction pattern each platform's users actually expect.
|
|
11
|
+
*
|
|
12
|
+
* @see https://dropdrawer.jiawei.dev/
|
|
13
|
+
*
|
|
14
|
+
* @version 0.1.0
|
|
15
|
+
* @author Forth
|
|
16
|
+
* @copyright 2026 Forth
|
|
17
|
+
*/
|
|
18
|
+
export function Dropdrawer({ items, trigger, title, open, onOpenChange, }) {
|
|
19
|
+
const isMobile = useIsMobile();
|
|
20
|
+
if (isMobile) {
|
|
21
|
+
return (_jsxs(Drawer, { open: open, onOpenChange: onOpenChange, children: [_jsx(DrawerTrigger, { asChild: true, children: trigger }), _jsxs(DrawerContent, { children: [title !== undefined && (_jsx(DrawerHeader, { children: _jsx(DrawerTitle, { children: title }) })), _jsx("div", { className: "grid gap-1 p-4 pt-0", children: items.map((item, index) => (_jsxs("button", { type: "button", onClick: item.onSelect, className: cn("hover:bg-accent flex items-center gap-2 rounded-md px-3 py-2.5 text-left text-sm", item.variant === "destructive" && "text-destructive"), children: [item.icon, item.label] }, index))) })] })] }));
|
|
22
|
+
}
|
|
23
|
+
return (_jsxs(DropdownMenu, { open: open, onOpenChange: onOpenChange, children: [_jsx(DropdownMenuTrigger, { asChild: true, children: trigger }), _jsx(DropdownMenuContent, { children: items.map((item, index) => (_jsxs(DropdownMenuItem
|
|
24
|
+
// eslint-disable-next-line @eslint-react/no-array-index-key -- see above
|
|
25
|
+
, { onSelect: item.onSelect, variant: item.variant, children: [item.icon, item.label] }, index))) })] }));
|
|
26
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/dropdrawer/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Dropdrawer } from "./dropdrawer";
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export interface DropzoneProps {
|
|
3
|
+
value?: File[];
|
|
4
|
+
defaultValue?: File[];
|
|
5
|
+
onValueChange?: (files: File[]) => void;
|
|
6
|
+
accept?: string;
|
|
7
|
+
multiple?: boolean;
|
|
8
|
+
maxFiles?: number;
|
|
9
|
+
/** Maximum size per file, in bytes. Oversized files are silently dropped. */
|
|
10
|
+
maxSize?: number;
|
|
11
|
+
disabled?: boolean;
|
|
12
|
+
className?: string;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* A drag-and-drop file upload zone, listing accepted files below via
|
|
16
|
+
* `FileList`.
|
|
17
|
+
*
|
|
18
|
+
* _Inspired from multiple sources, to make a consistent and reusable component._
|
|
19
|
+
* @see https://www.kibo-ui.com/components/dropzone
|
|
20
|
+
* @see https://ui.aceternity.com/components/file-upload
|
|
21
|
+
*
|
|
22
|
+
* @version 0.1.0
|
|
23
|
+
* @author Forth
|
|
24
|
+
* @copyright 2026 Forth
|
|
25
|
+
*/
|
|
26
|
+
export declare function Dropzone({ value, defaultValue, onValueChange, accept, multiple, maxFiles, maxSize, disabled, className, }: DropzoneProps): React.JSX.Element;
|
|
27
|
+
//# sourceMappingURL=dropzone.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dropzone.d.ts","sourceRoot":"","sources":["../../../src/components/dropzone/dropzone.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAiB/B,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;IACf,YAAY,CAAC,EAAE,IAAI,EAAE,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6EAA6E;IAC7E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAkBD;;;;;;;;;;;GAWG;AACH,wBAAgB,QAAQ,CAAC,EACvB,KAAK,EACL,YAAY,EACZ,aAAa,EACb,MAAM,EACN,QAAe,EACf,QAAQ,EACR,OAAO,EACP,QAAgB,EAChB,SAAS,GACV,EAAE,aAAa,qBA8Hf"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { FileIcon, UploadIcon, XIcon } from "lucide-react";
|
|
5
|
+
import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
|
|
6
|
+
import { FileList, FileListAction, FileListActions, FileListDescription, FileListHeader, FileListIcon, FileListInfo, FileListItem, FileListName, } from "../file-list";
|
|
7
|
+
function formatBytes(bytes) {
|
|
8
|
+
if (bytes === 0) {
|
|
9
|
+
return "0 B";
|
|
10
|
+
}
|
|
11
|
+
const units = ["B", "KB", "MB", "GB"];
|
|
12
|
+
const exponent = Math.min(Math.floor(Math.log(bytes) / Math.log(1024)), units.length - 1);
|
|
13
|
+
return `${(bytes / 1024 ** exponent).toFixed(exponent === 0 ? 0 : 1)} ${units[exponent] ?? "B"}`;
|
|
14
|
+
}
|
|
15
|
+
function fileKey(file) {
|
|
16
|
+
return `${file.name}-${file.size.toString()}-${file.lastModified.toString()}`;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* A drag-and-drop file upload zone, listing accepted files below via
|
|
20
|
+
* `FileList`.
|
|
21
|
+
*
|
|
22
|
+
* _Inspired from multiple sources, to make a consistent and reusable component._
|
|
23
|
+
* @see https://www.kibo-ui.com/components/dropzone
|
|
24
|
+
* @see https://ui.aceternity.com/components/file-upload
|
|
25
|
+
*
|
|
26
|
+
* @version 0.1.0
|
|
27
|
+
* @author Forth
|
|
28
|
+
* @copyright 2026 Forth
|
|
29
|
+
*/
|
|
30
|
+
export function Dropzone({ value, defaultValue, onValueChange, accept, multiple = true, maxFiles, maxSize, disabled = false, className, }) {
|
|
31
|
+
const [uncontrolledValue, setUncontrolledValue] = React.useState(defaultValue ?? []);
|
|
32
|
+
const [isDragging, setIsDragging] = React.useState(false);
|
|
33
|
+
const inputRef = React.useRef(null);
|
|
34
|
+
const files = value ?? uncontrolledValue;
|
|
35
|
+
function update(next) {
|
|
36
|
+
setUncontrolledValue(next);
|
|
37
|
+
onValueChange?.(next);
|
|
38
|
+
}
|
|
39
|
+
function addFiles(incoming) {
|
|
40
|
+
let next = [...files, ...Array.from(incoming)];
|
|
41
|
+
if (maxSize !== undefined) {
|
|
42
|
+
next = next.filter((file) => file.size <= maxSize);
|
|
43
|
+
}
|
|
44
|
+
if (maxFiles !== undefined) {
|
|
45
|
+
next = next.slice(0, maxFiles);
|
|
46
|
+
}
|
|
47
|
+
update(next);
|
|
48
|
+
}
|
|
49
|
+
function removeFile(file) {
|
|
50
|
+
update(files.filter((f) => f !== file));
|
|
51
|
+
}
|
|
52
|
+
function openFileDialog() {
|
|
53
|
+
if (!disabled) {
|
|
54
|
+
inputRef.current?.click();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return (_jsxs("div", { "data-slot": "dropzone", className: "grid gap-3", children: [_jsxs("div", { role: "button", tabIndex: disabled ? -1 : 0, "data-dragging": isDragging, "aria-disabled": disabled, onClick: openFileDialog, onKeyDown: (e) => {
|
|
58
|
+
if (!disabled && (e.key === "Enter" || e.key === " ")) {
|
|
59
|
+
e.preventDefault();
|
|
60
|
+
openFileDialog();
|
|
61
|
+
}
|
|
62
|
+
}, onDragOver: (e) => {
|
|
63
|
+
e.preventDefault();
|
|
64
|
+
if (!disabled) {
|
|
65
|
+
setIsDragging(true);
|
|
66
|
+
}
|
|
67
|
+
}, onDragLeave: () => {
|
|
68
|
+
setIsDragging(false);
|
|
69
|
+
}, onDrop: (e) => {
|
|
70
|
+
e.preventDefault();
|
|
71
|
+
setIsDragging(false);
|
|
72
|
+
if (!disabled) {
|
|
73
|
+
addFiles(e.dataTransfer.files);
|
|
74
|
+
}
|
|
75
|
+
}, className: cn("border-input hover:bg-accent/50 flex cursor-pointer flex-col items-center justify-center gap-2 rounded-lg border border-dashed p-8 text-center transition-colors", "data-[dragging=true]:border-primary data-[dragging=true]:bg-accent/50", disabled && "pointer-events-none cursor-not-allowed opacity-50", className), children: [_jsx(UploadIcon, { className: "text-muted-foreground size-8" }), _jsx("p", { className: "text-sm font-medium", children: "Drag & drop files here, or click to select" }), maxSize !== undefined && (_jsxs("p", { className: "text-muted-foreground text-xs", children: ["Max file size: ", formatBytes(maxSize)] })), _jsx("input", { ref: inputRef, type: "file", accept: accept, multiple: multiple, disabled: disabled, className: "hidden", onChange: (e) => {
|
|
76
|
+
if (e.target.files !== null) {
|
|
77
|
+
addFiles(e.target.files);
|
|
78
|
+
}
|
|
79
|
+
e.target.value = "";
|
|
80
|
+
} })] }), files.length > 0 && (_jsx(FileList, { children: files.map((file) => (_jsx(FileListItem, { children: _jsxs(FileListHeader, { children: [_jsx(FileListIcon, { children: _jsx(FileIcon, {}) }), _jsxs(FileListInfo, { children: [_jsx(FileListName, { children: file.name }), _jsx(FileListDescription, { children: formatBytes(file.size) })] }), _jsx(FileListActions, { children: _jsx(FileListAction, { onClick: () => {
|
|
81
|
+
removeFile(file);
|
|
82
|
+
}, "aria-label": "Remove file", children: _jsx(XIcon, {}) }) })] }) }, fileKey(file)))) }))] }));
|
|
83
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/dropzone/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Dropzone } from "./dropzone";
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
interface FieldControlProps {
|
|
3
|
+
id?: string;
|
|
4
|
+
"aria-describedby"?: string;
|
|
5
|
+
"aria-invalid"?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface FieldProps {
|
|
8
|
+
label?: React.ReactNode;
|
|
9
|
+
description?: React.ReactNode;
|
|
10
|
+
error?: React.ReactNode;
|
|
11
|
+
required?: boolean;
|
|
12
|
+
/**
|
|
13
|
+
* `vertical` (label above the control, e.g. Input/Textarea/Select) or
|
|
14
|
+
* `horizontal` (control beside the label, e.g. Checkbox/Switch).
|
|
15
|
+
* @default "vertical"
|
|
16
|
+
*/
|
|
17
|
+
orientation?: "vertical" | "horizontal";
|
|
18
|
+
className?: string;
|
|
19
|
+
/** The form control — its `id`/`aria-describedby`/`aria-invalid` are wired up automatically. */
|
|
20
|
+
children: React.ReactElement<FieldControlProps>;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Wires a label, description and error message to a single form control —
|
|
24
|
+
* consolidates the "Checkbox Field" / "Input Field" / "Radio Field" /
|
|
25
|
+
* "Select Field" pattern (same label+control+description+error shape
|
|
26
|
+
* applied to every control type) into one control-agnostic component,
|
|
27
|
+
* independent of any form library.
|
|
28
|
+
*
|
|
29
|
+
* _Inspired from multiple sources, to make a consistent and reusable component._
|
|
30
|
+
* @see https://shuip.xyz/components/input-field
|
|
31
|
+
* @see https://shuip.xyz/components/checkbox-field
|
|
32
|
+
* @see https://shuip.xyz/components/radio-field
|
|
33
|
+
* @see https://shuip.xyz/components/select-field
|
|
34
|
+
*
|
|
35
|
+
* @version 0.1.0
|
|
36
|
+
* @author Forth
|
|
37
|
+
* @copyright 2026 Forth
|
|
38
|
+
*/
|
|
39
|
+
export declare function Field({ label, description, error, required, orientation, className, children, }: FieldProps): React.JSX.Element;
|
|
40
|
+
export {};
|
|
41
|
+
//# sourceMappingURL=field.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field.d.ts","sourceRoot":"","sources":["../../../src/components/field/field.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,UAAU,iBAAiB;IACzB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;OAIG;IACH,WAAW,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gGAAgG;IAChG,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC,iBAAiB,CAAC,CAAC;CACjD;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,KAAK,CAAC,EACpB,KAAK,EACL,WAAW,EACX,KAAK,EACL,QAAgB,EAChB,WAAwB,EACxB,SAAS,EACT,QAAQ,GACT,EAAE,UAAU,qBAiEZ"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
|
|
4
|
+
/**
|
|
5
|
+
* Wires a label, description and error message to a single form control —
|
|
6
|
+
* consolidates the "Checkbox Field" / "Input Field" / "Radio Field" /
|
|
7
|
+
* "Select Field" pattern (same label+control+description+error shape
|
|
8
|
+
* applied to every control type) into one control-agnostic component,
|
|
9
|
+
* independent of any form library.
|
|
10
|
+
*
|
|
11
|
+
* _Inspired from multiple sources, to make a consistent and reusable component._
|
|
12
|
+
* @see https://shuip.xyz/components/input-field
|
|
13
|
+
* @see https://shuip.xyz/components/checkbox-field
|
|
14
|
+
* @see https://shuip.xyz/components/radio-field
|
|
15
|
+
* @see https://shuip.xyz/components/select-field
|
|
16
|
+
*
|
|
17
|
+
* @version 0.1.0
|
|
18
|
+
* @author Forth
|
|
19
|
+
* @copyright 2026 Forth
|
|
20
|
+
*/
|
|
21
|
+
export function Field({ label, description, error, required = false, orientation = "vertical", className, children, }) {
|
|
22
|
+
const generatedId = React.useId();
|
|
23
|
+
const descriptionId = React.useId();
|
|
24
|
+
const errorId = React.useId();
|
|
25
|
+
const describedBy = [
|
|
26
|
+
description !== undefined ? descriptionId : null,
|
|
27
|
+
error !== undefined ? errorId : null,
|
|
28
|
+
]
|
|
29
|
+
.filter((value) => value !== null)
|
|
30
|
+
.join(" ") || undefined;
|
|
31
|
+
const controlId = children.props.id ?? generatedId;
|
|
32
|
+
// cloneElement is required here (not `Slot`) since we're injecting
|
|
33
|
+
// specific accessibility attributes (id/aria-describedby/aria-invalid)
|
|
34
|
+
// onto an arbitrary single control, not merging arbitrary DOM props.
|
|
35
|
+
// eslint-disable-next-line @eslint-react/no-clone-element
|
|
36
|
+
const control = React.cloneElement(children, {
|
|
37
|
+
id: controlId,
|
|
38
|
+
"aria-describedby": describedBy,
|
|
39
|
+
"aria-invalid": error !== undefined,
|
|
40
|
+
});
|
|
41
|
+
const labelNode = label !== undefined && (_jsxs("label", { htmlFor: controlId, className: "text-sm leading-none font-medium", children: [label, required && _jsx("span", { className: "text-destructive", children: " *" })] }));
|
|
42
|
+
const descriptionNode = description !== undefined && (_jsx("p", { id: descriptionId, className: "text-muted-foreground text-sm", children: description }));
|
|
43
|
+
const errorNode = error !== undefined && (_jsx("p", { id: errorId, role: "alert", className: "text-destructive text-sm", children: error }));
|
|
44
|
+
if (orientation === "horizontal") {
|
|
45
|
+
return (_jsxs("div", { "data-slot": "field", className: cn("flex items-start gap-2", className), children: [control, _jsxs("div", { className: "grid gap-1", children: [labelNode, descriptionNode, errorNode] })] }));
|
|
46
|
+
}
|
|
47
|
+
return (_jsxs("div", { "data-slot": "field", className: cn("grid gap-1.5", className), children: [labelNode, control, descriptionNode, errorNode] }));
|
|
48
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/field/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Field } from "./field";
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type React from "react";
|
|
2
|
+
import { Progress } from "@forthtilliath/shadcn-ui/components/progress";
|
|
3
|
+
/**
|
|
4
|
+
* Displays a list of files with details such as name, size, and upload
|
|
5
|
+
* progress — a composable set of primitives, not a single all-in-one prop
|
|
6
|
+
* API (matches the source's own composition style).
|
|
7
|
+
*
|
|
8
|
+
* _Inspired from multiple sources, to make a consistent and reusable component._
|
|
9
|
+
* @see https://ui-x.junwen-k.dev/docs/components/file-list
|
|
10
|
+
*
|
|
11
|
+
* @version 0.1.0
|
|
12
|
+
* @author Forth
|
|
13
|
+
* @copyright 2026 Forth
|
|
14
|
+
*/
|
|
15
|
+
export declare function FileList({ className, ...props }: React.ComponentProps<"ul">): React.JSX.Element;
|
|
16
|
+
export declare function FileListItem({ className, ...props }: React.ComponentProps<"li">): React.JSX.Element;
|
|
17
|
+
export declare function FileListHeader({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
|
|
18
|
+
export declare function FileListIcon({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
|
|
19
|
+
export declare function FileListInfo({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
|
|
20
|
+
export declare function FileListName({ className, ...props }: React.ComponentProps<"p">): React.JSX.Element;
|
|
21
|
+
export declare function FileListDescription({ className, ...props }: React.ComponentProps<"p">): React.JSX.Element;
|
|
22
|
+
export declare function FileListDescriptionSeparator({ className, ...props }: React.ComponentProps<"span">): React.JSX.Element;
|
|
23
|
+
export declare function FileListActions({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
|
|
24
|
+
export declare function FileListAction({ className, ...props }: React.ComponentProps<"button">): React.JSX.Element;
|
|
25
|
+
export declare function FileListContent({ className, ...props }: React.ComponentProps<"div">): React.JSX.Element;
|
|
26
|
+
export type FileListProgressProps = React.ComponentProps<typeof Progress>;
|
|
27
|
+
/** Wraps shadcn-ui's `Progress` for the upload-progress row. */
|
|
28
|
+
export declare function FileListProgress(props: FileListProgressProps): React.JSX.Element;
|
|
29
|
+
//# sourceMappingURL=file-list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-list.d.ts","sourceRoot":"","sources":["../../../src/components/file-list/file-list.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EAAE,QAAQ,EAAE,MAAM,8CAA8C,CAAC;AAGxE;;;;;;;;;;;GAWG;AACH,wBAAgB,QAAQ,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,qBAQ3E;AAED,wBAAgB,YAAY,CAAC,EAC3B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,qBAW5B;AAED,wBAAgB,cAAc,CAAC,EAC7B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQ7B;AAED,wBAAgB,YAAY,CAAC,EAC3B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAW7B;AAED,wBAAgB,YAAY,CAAC,EAC3B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQ7B;AAED,wBAAgB,YAAY,CAAC,EAC3B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,qBAQ3B;AAED,wBAAgB,mBAAmB,CAAC,EAClC,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,qBAW3B;AAED,wBAAgB,4BAA4B,CAAC,EAC3C,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,qBAW9B;AAED,wBAAgB,eAAe,CAAC,EAC9B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAQ7B;AAED,wBAAgB,cAAc,CAAC,EAC7B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,qBAYhC;AAED,wBAAgB,eAAe,CAAC,EAC9B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,qBAI7B;AAED,MAAM,MAAM,qBAAqB,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,QAAQ,CAAC,CAAC;AAE1E,gEAAgE;AAChE,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,qBAE5D"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { Progress } from "@forthtilliath/shadcn-ui/components/progress";
|
|
3
|
+
import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
|
|
4
|
+
/**
|
|
5
|
+
* Displays a list of files with details such as name, size, and upload
|
|
6
|
+
* progress — a composable set of primitives, not a single all-in-one prop
|
|
7
|
+
* API (matches the source's own composition style).
|
|
8
|
+
*
|
|
9
|
+
* _Inspired from multiple sources, to make a consistent and reusable component._
|
|
10
|
+
* @see https://ui-x.junwen-k.dev/docs/components/file-list
|
|
11
|
+
*
|
|
12
|
+
* @version 0.1.0
|
|
13
|
+
* @author Forth
|
|
14
|
+
* @copyright 2026 Forth
|
|
15
|
+
*/
|
|
16
|
+
export function FileList({ className, ...props }) {
|
|
17
|
+
return (_jsx("ul", { "data-slot": "file-list", className: cn("flex flex-col gap-2", className), ...props }));
|
|
18
|
+
}
|
|
19
|
+
export function FileListItem({ className, ...props }) {
|
|
20
|
+
return (_jsx("li", { "data-slot": "file-list-item", className: cn("border-border flex flex-col gap-2 rounded-lg border p-3", className), ...props }));
|
|
21
|
+
}
|
|
22
|
+
export function FileListHeader({ className, ...props }) {
|
|
23
|
+
return (_jsx("div", { "data-slot": "file-list-header", className: cn("flex items-center gap-3", className), ...props }));
|
|
24
|
+
}
|
|
25
|
+
export function FileListIcon({ className, ...props }) {
|
|
26
|
+
return (_jsx("div", { "data-slot": "file-list-icon", className: cn("text-muted-foreground flex size-8 shrink-0 items-center justify-center [&>svg]:size-5", className), ...props }));
|
|
27
|
+
}
|
|
28
|
+
export function FileListInfo({ className, ...props }) {
|
|
29
|
+
return (_jsx("div", { "data-slot": "file-list-info", className: cn("min-w-0 flex-1", className), ...props }));
|
|
30
|
+
}
|
|
31
|
+
export function FileListName({ className, ...props }) {
|
|
32
|
+
return (_jsx("p", { "data-slot": "file-list-name", className: cn("truncate text-sm font-medium", className), ...props }));
|
|
33
|
+
}
|
|
34
|
+
export function FileListDescription({ className, ...props }) {
|
|
35
|
+
return (_jsx("p", { "data-slot": "file-list-description", className: cn("text-muted-foreground flex items-center text-xs", className), ...props }));
|
|
36
|
+
}
|
|
37
|
+
export function FileListDescriptionSeparator({ className, ...props }) {
|
|
38
|
+
return (_jsx("span", { "data-slot": "file-list-description-separator", "aria-hidden": "true", className: cn("mx-1.5", className), ...props, children: "\u00B7" }));
|
|
39
|
+
}
|
|
40
|
+
export function FileListActions({ className, ...props }) {
|
|
41
|
+
return (_jsx("div", { "data-slot": "file-list-actions", className: cn("flex shrink-0 items-center gap-1", className), ...props }));
|
|
42
|
+
}
|
|
43
|
+
export function FileListAction({ className, ...props }) {
|
|
44
|
+
return (_jsx("button", { type: "button", "data-slot": "file-list-action", className: cn("text-muted-foreground hover:text-foreground rounded-sm p-1 transition-colors outline-none focus-visible:ring-2 focus-visible:ring-current [&>svg]:size-4", className), ...props }));
|
|
45
|
+
}
|
|
46
|
+
export function FileListContent({ className, ...props }) {
|
|
47
|
+
return (_jsx("div", { "data-slot": "file-list-content", className: cn(className), ...props }));
|
|
48
|
+
}
|
|
49
|
+
/** Wraps shadcn-ui's `Progress` for the upload-progress row. */
|
|
50
|
+
export function FileListProgress(props) {
|
|
51
|
+
return _jsx(Progress, { "data-slot": "file-list-progress", ...props });
|
|
52
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export type { FileListProgressProps } from "./file-list";
|
|
2
|
+
export { FileList, FileListAction, FileListActions, FileListContent, FileListDescription, FileListDescriptionSeparator, FileListHeader, FileListIcon, FileListInfo, FileListItem, FileListName, FileListProgress, } from "./file-list";
|
|
3
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/file-list/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EACL,QAAQ,EACR,cAAc,EACd,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,4BAA4B,EAC5B,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,gBAAgB,GACjB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { FileList, FileListAction, FileListActions, FileListContent, FileListDescription, FileListDescriptionSeparator, FileListHeader, FileListIcon, FileListInfo, FileListItem, FileListName, FileListProgress, } from "./file-list";
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
export declare const GridDebugContext: React.Context<{
|
|
3
|
+
/** If ``debug`` is enabled */
|
|
4
|
+
debug?: boolean;
|
|
5
|
+
isDebugActive: boolean;
|
|
6
|
+
}>;
|
|
7
|
+
export declare const useGridDebugContext: () => {
|
|
8
|
+
/** If ``debug`` is enabled */
|
|
9
|
+
debug?: boolean;
|
|
10
|
+
isDebugActive: boolean;
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/components/grid/context.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,eAAO,MAAM,gBAAgB;IAC3B,8BAA8B;YACtB,OAAO;mBACA,OAAO;EAGtB,CAAC;AAEH,eAAO,MAAM,mBAAmB;IAP9B,8BAA8B;YACtB,OAAO;mBACA,OAAO;CAK4C,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type React from "react";
|
|
2
|
+
import type { Prettify } from "@forthtilliath/types/object";
|
|
3
|
+
import { type GridItemVariants } from "./variants";
|
|
4
|
+
type Props = Prettify<GridItemVariants & React.ComponentProps<"div"> & {
|
|
5
|
+
children: React.ReactNode;
|
|
6
|
+
}>;
|
|
7
|
+
/**
|
|
8
|
+
* A GridItem is a component that represents an item inside a Grid.
|
|
9
|
+
*
|
|
10
|
+
* It receives the same props as a div and extends them with the GridItemVariants.
|
|
11
|
+
*/
|
|
12
|
+
export declare function GridItem({ children, className, ...props }: Props): React.JSX.Element;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=grid-item.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grid-item.d.ts","sourceRoot":"","sources":["../../../src/components/grid/grid-item.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAG5D,OAAO,EAEL,KAAK,gBAAgB,EAEtB,MAAM,YAAY,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CACnB,gBAAgB,GACd,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC5B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B,CACJ,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,EACvB,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAkB3B"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
|
|
3
|
+
import { useGridDebugContext } from "./context";
|
|
4
|
+
import { gridItemDebugVariants, gridItemVariants, } from "./variants";
|
|
5
|
+
/**
|
|
6
|
+
* A GridItem is a component that represents an item inside a Grid.
|
|
7
|
+
*
|
|
8
|
+
* It receives the same props as a div and extends them with the GridItemVariants.
|
|
9
|
+
*/
|
|
10
|
+
export function GridItem({ children, className, ...props }) {
|
|
11
|
+
const { debug, isDebugActive } = useGridDebugContext();
|
|
12
|
+
return (_jsxs("div", { className: cn(gridItemVariants({ debug }), className), "data-slot": "grid-item", ...props, children: [children, debug && (_jsx("div", { className: cn(gridItemDebugVariants({ active: isDebugActive })), "data-slot": "grid-item-debug" }))] }));
|
|
13
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type React from "react";
|
|
2
|
+
import { type ClassValue } from "@forthtilliath/shadcn-ui/lib/utils";
|
|
3
|
+
import { type Prettify } from "@forthtilliath/types/object";
|
|
4
|
+
import { GridItem } from "./grid-item";
|
|
5
|
+
import type { GridVariants } from "./variants";
|
|
6
|
+
export type GridProps = Prettify<{
|
|
7
|
+
children?: React.ReactNode;
|
|
8
|
+
debug?: boolean;
|
|
9
|
+
debugKey?: string;
|
|
10
|
+
className?: ClassValue;
|
|
11
|
+
} & GridVariants & Omit<React.HTMLAttributes<HTMLDivElement>, "className">>;
|
|
12
|
+
export declare function Grid({ children, className, debug, debugKey, cols, spacing, ...props }: GridProps): React.JSX.Element;
|
|
13
|
+
export declare namespace Grid {
|
|
14
|
+
var Item: typeof GridItem;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=grid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"grid.d.ts","sourceRoot":"","sources":["../../../src/components/grid/grid.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,OAAO,EAAE,KAAK,UAAU,EAAM,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAG5D,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAG/C,MAAM,MAAM,SAAS,GAAG,QAAQ,CAC9B;IACE,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,UAAU,CAAC;CACxB,GAAG,YAAY,GACd,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,WAAW,CAAC,CAC1D,CAAC;AAEF,wBAAgB,IAAI,CAAC,EACnB,QAAQ,EACR,SAAS,EACT,KAAK,EACL,QAAc,EACd,IAAI,EACJ,OAAO,EACP,GAAG,KAAK,EACT,EAAE,SAAS,qBAqBX;yBA7Be,IAAI"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo, useState } from "react";
|
|
3
|
+
import { useKeyListener } from "@forthtilliath/react-hooks/useKeyListener";
|
|
4
|
+
import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
|
|
5
|
+
import { GridDebugContext } from "./context";
|
|
6
|
+
import { GridItem } from "./grid-item";
|
|
7
|
+
import { gridVariants } from "./variants";
|
|
8
|
+
export function Grid({ children, className, debug, debugKey = "g", cols, spacing, ...props }) {
|
|
9
|
+
const [isDebugActive, setIsDebugActive] = useState(true);
|
|
10
|
+
const contextValue = useMemo(() => ({ debug, isDebugActive }), [debug, isDebugActive]);
|
|
11
|
+
useKeyListener({ key: debugKey }, () => {
|
|
12
|
+
if (debug)
|
|
13
|
+
setIsDebugActive((v) => !v);
|
|
14
|
+
});
|
|
15
|
+
return (_jsx("div", { className: cn(gridVariants({ cols, spacing }), className, {
|
|
16
|
+
relative: debug,
|
|
17
|
+
}), ...props, children: _jsx(GridDebugContext, { value: contextValue, children: children }) }));
|
|
18
|
+
}
|
|
19
|
+
Grid.Item = GridItem;
|