@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,30 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
|
|
3
|
+
export function BentoGrid({ className, ...props }) {
|
|
4
|
+
return (_jsx("div", { "data-slot": "bento-grid", className: cn("grid auto-rows-[12rem] grid-cols-3 gap-4", className), ...props }));
|
|
5
|
+
}
|
|
6
|
+
const COL_SPAN_CLASSES = {
|
|
7
|
+
1: "",
|
|
8
|
+
2: "col-span-2",
|
|
9
|
+
3: "col-span-3",
|
|
10
|
+
};
|
|
11
|
+
const ROW_SPAN_CLASSES = {
|
|
12
|
+
1: "",
|
|
13
|
+
2: "row-span-2",
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* A CSS-grid layout for unevenly-sized cards ("bento box" layouts) — a
|
|
17
|
+
* lightweight layout helper (`grid`+`col-span`/`row-span`), not a
|
|
18
|
+
* dependency-driven masonry/packing algorithm.
|
|
19
|
+
*
|
|
20
|
+
* _Inspired from multiple sources, to make a consistent and reusable component._
|
|
21
|
+
* @see https://ui.aceternity.com/components/bento-grid
|
|
22
|
+
* @see https://blocks.mvp-subha.me/docs/grids/bento
|
|
23
|
+
*
|
|
24
|
+
* @version 0.1.0
|
|
25
|
+
* @author Forth
|
|
26
|
+
* @copyright 2026 Forth
|
|
27
|
+
*/
|
|
28
|
+
export function BentoGridItem({ colSpan = 1, rowSpan = 1, className, ...props }) {
|
|
29
|
+
return (_jsx("div", { "data-slot": "bento-grid-item", className: cn("border-border rounded-xl border p-4", COL_SPAN_CLASSES[colSpan], ROW_SPAN_CLASSES[rowSpan], className), ...props }));
|
|
30
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/bento-grid/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { BentoGrid, BentoGridItem } from "./bento-grid";
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type React from "react";
|
|
2
|
+
export interface BreadcrumbEntry {
|
|
3
|
+
label: React.ReactNode;
|
|
4
|
+
href?: string;
|
|
5
|
+
icon?: React.ReactNode;
|
|
6
|
+
}
|
|
7
|
+
export interface BreadcrumbProps {
|
|
8
|
+
items: BreadcrumbEntry[];
|
|
9
|
+
/**
|
|
10
|
+
* Collapses items between the first and last into a dropdown "…" once
|
|
11
|
+
* there are more than this many — shadcn-ui's own `BreadcrumbEllipsis` is
|
|
12
|
+
* purely decorative (no dropdown behavior), unlike ktui's.
|
|
13
|
+
*/
|
|
14
|
+
maxItems?: number;
|
|
15
|
+
className?: string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Displays the path to the current resource using a hierarchy of links.
|
|
19
|
+
*
|
|
20
|
+
* _Inspired from multiple sources, to make a consistent and reusable component._
|
|
21
|
+
* @see https://ui.shadcn.com/docs/components/breadcrumb
|
|
22
|
+
* @see https://ktui.io/docs/breadcrumb
|
|
23
|
+
*
|
|
24
|
+
* @version 0.1.0
|
|
25
|
+
* @author Forth
|
|
26
|
+
* @copyright 2026 Forth
|
|
27
|
+
*/
|
|
28
|
+
export declare function Breadcrumb({ items, maxItems, className }: BreadcrumbProps): React.JSX.Element;
|
|
29
|
+
//# sourceMappingURL=breadcrumb.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"breadcrumb.d.ts","sourceRoot":"","sources":["../../../src/components/breadcrumb/breadcrumb.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAiB/B,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CACxB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,eAAe,EAAE,CAAC;IACzB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAWD;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,eAAe,qBAyFzE"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsxs as _jsxs, jsx as _jsx, Fragment as _Fragment } from "react/jsx-runtime";
|
|
3
|
+
import { Breadcrumb as BreadcrumbPrimitive, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, } from "@forthtilliath/shadcn-ui/components/breadcrumb";
|
|
4
|
+
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@forthtilliath/shadcn-ui/components/dropdown-menu";
|
|
5
|
+
function EntryLink({ item }) {
|
|
6
|
+
return (_jsxs("span", { className: "inline-flex items-center gap-1.5", children: [item.icon, item.label] }));
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Displays the path to the current resource using a hierarchy of links.
|
|
10
|
+
*
|
|
11
|
+
* _Inspired from multiple sources, to make a consistent and reusable component._
|
|
12
|
+
* @see https://ui.shadcn.com/docs/components/breadcrumb
|
|
13
|
+
* @see https://ktui.io/docs/breadcrumb
|
|
14
|
+
*
|
|
15
|
+
* @version 0.1.0
|
|
16
|
+
* @author Forth
|
|
17
|
+
* @copyright 2026 Forth
|
|
18
|
+
*/
|
|
19
|
+
export function Breadcrumb({ items, maxItems, className }) {
|
|
20
|
+
const shouldCollapse = maxItems !== undefined && items.length > maxItems;
|
|
21
|
+
const firstItem = items[0];
|
|
22
|
+
const lastItem = items.at(-1);
|
|
23
|
+
const hiddenItems = shouldCollapse ? items.slice(1, -1) : [];
|
|
24
|
+
const visibleMiddleItems = shouldCollapse ? [] : items.slice(1, -1);
|
|
25
|
+
return (_jsx(BreadcrumbPrimitive, { className: className, children: _jsxs(BreadcrumbList, { children: [firstItem && (_jsx(BreadcrumbItem, { children: firstItem.href ? (_jsx(BreadcrumbLink, { href: firstItem.href, children: _jsx(EntryLink, { item: firstItem }) })) : (_jsx(BreadcrumbPage, { children: _jsx(EntryLink, { item: firstItem }) })) })), items.length > 1 && _jsx(BreadcrumbSeparator, {}), shouldCollapse && (_jsxs(_Fragment, { children: [_jsx(BreadcrumbItem, { children: _jsxs(DropdownMenu, { children: [_jsx(DropdownMenuTrigger, { className: "hover:text-foreground flex items-center transition-colors", "aria-label": "Show hidden breadcrumb items", children: "\u2026" }), _jsx(DropdownMenuContent, { align: "start", children: hiddenItems.map((item, index) => (
|
|
26
|
+
// eslint-disable-next-line @eslint-react/no-array-index-key -- `label` is an arbitrary ReactNode and `href` is optional, so index is the only stable fallback
|
|
27
|
+
_jsx(DropdownMenuItem, { asChild: true, children: item.href ? (_jsx("a", { href: item.href, children: _jsx(EntryLink, { item: item }) })) : (_jsx("span", { children: _jsx(EntryLink, { item: item }) })) }, item.href ?? index))) })] }) }), _jsx(BreadcrumbSeparator, {})] })), visibleMiddleItems.map((item, index) => (_jsxs("span", { className: "inline-flex items-center gap-1.5 sm:gap-2.5", children: [_jsx(BreadcrumbItem, { children: item.href ? (_jsx(BreadcrumbLink, { href: item.href, children: _jsx(EntryLink, { item: item }) })) : (_jsx(BreadcrumbPage, { children: _jsx(EntryLink, { item: item }) })) }), _jsx(BreadcrumbSeparator, {})] }, item.href ?? index))), lastItem && items.length > 1 && (_jsx(BreadcrumbItem, { children: _jsx(BreadcrumbPage, { children: _jsx(EntryLink, { item: lastItem }) }) }))] }) }));
|
|
28
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/breadcrumb/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACrE,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Breadcrumb } from "./breadcrumb";
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type React from "react";
|
|
2
|
+
export type ButtonGroupProps = React.ComponentProps<"div"> & {
|
|
3
|
+
/**
|
|
4
|
+
* Stack the buttons vertically instead of horizontally.
|
|
5
|
+
* @default false
|
|
6
|
+
*/
|
|
7
|
+
vertical?: boolean;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Groups buttons into a single, visually connected row (or column), joining
|
|
11
|
+
* their borders and radii — for segmented controls / toolbars.
|
|
12
|
+
*
|
|
13
|
+
* @see https://ui.shadcn.com/docs/components/button#button-group
|
|
14
|
+
*/
|
|
15
|
+
export declare function ButtonGroup({ className, vertical, ...props }: ButtonGroupProps): React.JSX.Element;
|
|
16
|
+
//# sourceMappingURL=button-group.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"button-group.d.ts","sourceRoot":"","sources":["../../../src/components/button/button-group.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,MAAM,gBAAgB,GAAG,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG;IAC3D;;;OAGG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,QAAgB,EAChB,GAAG,KAAK,EACT,EAAE,gBAAgB,qBAgBlB"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
|
|
3
|
+
/**
|
|
4
|
+
* Groups buttons into a single, visually connected row (or column), joining
|
|
5
|
+
* their borders and radii — for segmented controls / toolbars.
|
|
6
|
+
*
|
|
7
|
+
* @see https://ui.shadcn.com/docs/components/button#button-group
|
|
8
|
+
*/
|
|
9
|
+
export function ButtonGroup({ className, vertical = false, ...props }) {
|
|
10
|
+
return (_jsx("div", { role: "group", "data-slot": "button-group", className: cn("flex w-fit", vertical
|
|
11
|
+
? "flex-col [&>*:not(:first-child)]:-mt-px [&>*:not(:first-child)]:rounded-t-none [&>*:not(:last-child)]:rounded-b-none"
|
|
12
|
+
: "flex-row [&>*:not(:first-child)]:-ml-px [&>*:not(:first-child)]:rounded-l-none [&>*:not(:last-child)]:rounded-r-none", "[&>*]:relative [&>*]:focus-visible:z-10", className), ...props }));
|
|
13
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type * as React from "react";
|
|
2
|
+
import { Button as ButtonPrimitive } from "@forthtilliath/shadcn-ui/components/button";
|
|
3
|
+
import type { ButtonSizeVariants } from "./variants";
|
|
4
|
+
export type ButtonProps = Omit<React.ComponentProps<typeof ButtonPrimitive>, "size"> & ButtonSizeVariants & {
|
|
5
|
+
/**
|
|
6
|
+
* Shows a spinner before the content and disables the button.
|
|
7
|
+
*
|
|
8
|
+
* Controlled by the caller (pairs with your own mutation/submit state)
|
|
9
|
+
* rather than an internal idle/loading/success animation — the more
|
|
10
|
+
* flexible pattern when the loading source is already a promise your
|
|
11
|
+
* app is tracking (React Query, a form library, etc).
|
|
12
|
+
*/
|
|
13
|
+
loading?: boolean;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Displays a button or a component that looks like a button.
|
|
17
|
+
*
|
|
18
|
+
* _Inspired from multiple sources, to make a consistent and reusable component._
|
|
19
|
+
* @see https://ui.shadcn.com/docs/components/button
|
|
20
|
+
* @see https://ktui.io/docs/button
|
|
21
|
+
* @see https://ui.aceternity.com/components/stateful-button
|
|
22
|
+
*
|
|
23
|
+
* @version 0.1.0
|
|
24
|
+
* @author Forth
|
|
25
|
+
* @copyright 2026 Forth
|
|
26
|
+
*/
|
|
27
|
+
export declare function Button({ className, size, shape, loading, disabled, children, ...props }: ButtonProps): React.JSX.Element;
|
|
28
|
+
//# sourceMappingURL=button.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../src/components/button/button.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAGpC,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,4CAA4C,CAAC;AAGvF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGrD,MAAM,MAAM,WAAW,GAAG,IAAI,CAC5B,KAAK,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,EAC5C,MAAM,CACP,GACC,kBAAkB,GAAG;IACnB;;;;;;;OAOG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEJ;;;;;;;;;;;GAWG;AACH,wBAAgB,MAAM,CAAC,EACrB,SAAS,EACT,IAAI,EACJ,KAAK,EACL,OAAe,EACf,QAAQ,EACR,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,WAAW,qBAYb"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Loader2Icon } from "lucide-react";
|
|
3
|
+
import { Button as ButtonPrimitive } from "@forthtilliath/shadcn-ui/components/button";
|
|
4
|
+
import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
|
|
5
|
+
import { buttonSizeVariants } from "./variants";
|
|
6
|
+
/**
|
|
7
|
+
* Displays a button or a component that looks like a button.
|
|
8
|
+
*
|
|
9
|
+
* _Inspired from multiple sources, to make a consistent and reusable component._
|
|
10
|
+
* @see https://ui.shadcn.com/docs/components/button
|
|
11
|
+
* @see https://ktui.io/docs/button
|
|
12
|
+
* @see https://ui.aceternity.com/components/stateful-button
|
|
13
|
+
*
|
|
14
|
+
* @version 0.1.0
|
|
15
|
+
* @author Forth
|
|
16
|
+
* @copyright 2026 Forth
|
|
17
|
+
*/
|
|
18
|
+
export function Button({ className, size, shape, loading = false, disabled, children, ...props }) {
|
|
19
|
+
return (_jsxs(ButtonPrimitive, { className: cn(buttonSizeVariants({ size, shape }), className), disabled: disabled ?? loading, "aria-busy": loading, ...props, children: [loading && _jsx(Loader2Icon, { className: "animate-spin" }), children] }));
|
|
20
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export type { ButtonProps } from "./button";
|
|
2
|
+
export { Button } from "./button";
|
|
3
|
+
export type { ButtonGroupProps } from "./button-group";
|
|
4
|
+
export { ButtonGroup } from "./button-group";
|
|
5
|
+
export type { ButtonSizeVariants } from "./variants";
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/button/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,YAAY,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { VariantProps } from "class-variance-authority";
|
|
2
|
+
export declare const buttonSizeVariants: (props?: ({
|
|
3
|
+
size?: "default" | "sm" | "lg" | "icon" | "xs" | "icon-xs" | "icon-sm" | "icon-lg" | null | undefined;
|
|
4
|
+
shape?: "default" | "pill" | null | undefined;
|
|
5
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
6
|
+
export type ButtonSizeVariants = VariantProps<typeof buttonSizeVariants>;
|
|
7
|
+
//# sourceMappingURL=variants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variants.d.ts","sourceRoot":"","sources":["../../../src/components/button/variants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAO7D,eAAO,MAAM,kBAAkB;;;8EAqB7B,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,YAAY,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { cva } from "class-variance-authority";
|
|
2
|
+
// shadcn-ui's own Button only exposes size: default | sm | lg | icon.
|
|
3
|
+
// forth-ui owns the full size scale itself (applied via className on top
|
|
4
|
+
// of the underlying primitive) rather than trying to extend a cva that
|
|
5
|
+
// isn't ours to extend.
|
|
6
|
+
export const buttonSizeVariants = cva("", {
|
|
7
|
+
variants: {
|
|
8
|
+
size: {
|
|
9
|
+
xs: "h-7 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5",
|
|
10
|
+
sm: "h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5",
|
|
11
|
+
default: "h-9 px-4 py-2 has-[>svg]:px-3",
|
|
12
|
+
lg: "h-10 rounded-md px-6 has-[>svg]:px-4",
|
|
13
|
+
icon: "size-9",
|
|
14
|
+
"icon-xs": "size-7",
|
|
15
|
+
"icon-sm": "size-8",
|
|
16
|
+
"icon-lg": "size-10",
|
|
17
|
+
},
|
|
18
|
+
shape: {
|
|
19
|
+
default: "",
|
|
20
|
+
pill: "rounded-full",
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
defaultVariants: {
|
|
24
|
+
size: "default",
|
|
25
|
+
shape: "default",
|
|
26
|
+
},
|
|
27
|
+
});
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export interface CheckboxGroupOption {
|
|
3
|
+
label: React.ReactNode;
|
|
4
|
+
value: string;
|
|
5
|
+
disabled?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface CheckboxGroupProps {
|
|
8
|
+
options: CheckboxGroupOption[];
|
|
9
|
+
value?: string[];
|
|
10
|
+
defaultValue?: string[];
|
|
11
|
+
onValueChange?: (value: string[]) => void;
|
|
12
|
+
disabled?: boolean;
|
|
13
|
+
orientation?: "vertical" | "horizontal";
|
|
14
|
+
className?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* A group of `Checkbox`es sharing a single array value — shadcn-ui's own
|
|
18
|
+
* `Checkbox` is a standalone control with no grouped-value management, the
|
|
19
|
+
* gap heroui's Checkbox Group fills.
|
|
20
|
+
*
|
|
21
|
+
* _Inspired from multiple sources, to make a consistent and reusable component._
|
|
22
|
+
* @see https://ui.shadcn.com/docs/components/checkbox
|
|
23
|
+
* @see https://www.heroui.com/docs/components/checkbox-group
|
|
24
|
+
*
|
|
25
|
+
* @version 0.1.0
|
|
26
|
+
* @author Forth
|
|
27
|
+
* @copyright 2026 Forth
|
|
28
|
+
*/
|
|
29
|
+
export declare function CheckboxGroup({ options, value, defaultValue, onValueChange, disabled, orientation, className, }: CheckboxGroupProps): React.JSX.Element;
|
|
30
|
+
//# sourceMappingURL=checkbox-group.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkbox-group.d.ts","sourceRoot":"","sources":["../../../src/components/checkbox/checkbox-group.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,mBAAmB,EAAE,CAAC;IAC/B,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,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,UAAU,GAAG,YAAY,CAAC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,aAAa,CAAC,EAC5B,OAAO,EACP,KAAK,EACL,YAAY,EACZ,aAAa,EACb,QAAgB,EAChB,WAAwB,EACxB,SAAS,GACV,EAAE,kBAAkB,qBA2CpB"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { Checkbox } from "@forthtilliath/shadcn-ui/components/checkbox";
|
|
5
|
+
import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
|
|
6
|
+
/**
|
|
7
|
+
* A group of `Checkbox`es sharing a single array value — shadcn-ui's own
|
|
8
|
+
* `Checkbox` is a standalone control with no grouped-value management, the
|
|
9
|
+
* gap heroui's Checkbox Group fills.
|
|
10
|
+
*
|
|
11
|
+
* _Inspired from multiple sources, to make a consistent and reusable component._
|
|
12
|
+
* @see https://ui.shadcn.com/docs/components/checkbox
|
|
13
|
+
* @see https://www.heroui.com/docs/components/checkbox-group
|
|
14
|
+
*
|
|
15
|
+
* @version 0.1.0
|
|
16
|
+
* @author Forth
|
|
17
|
+
* @copyright 2026 Forth
|
|
18
|
+
*/
|
|
19
|
+
export function CheckboxGroup({ options, value, defaultValue, onValueChange, disabled = false, orientation = "vertical", className, }) {
|
|
20
|
+
const [uncontrolledValue, setUncontrolledValue] = React.useState(defaultValue ?? []);
|
|
21
|
+
const selected = value ?? uncontrolledValue;
|
|
22
|
+
function toggle(optionValue, checked) {
|
|
23
|
+
const next = checked
|
|
24
|
+
? [...selected, optionValue]
|
|
25
|
+
: selected.filter((v) => v !== optionValue);
|
|
26
|
+
setUncontrolledValue(next);
|
|
27
|
+
onValueChange?.(next);
|
|
28
|
+
}
|
|
29
|
+
return (_jsx("div", { role: "group", "data-slot": "checkbox-group", className: cn(orientation === "horizontal" ? "flex flex-wrap gap-4" : "grid gap-3", className), children: options.map((option) => (_jsxs("label", { className: cn("flex items-center gap-2 text-sm", (disabled || option.disabled) && "cursor-not-allowed opacity-50"), children: [_jsx(Checkbox, { checked: selected.includes(option.value), disabled: disabled || option.disabled, onCheckedChange: (checked) => {
|
|
30
|
+
toggle(option.value, checked === true);
|
|
31
|
+
} }), option.label] }, option.value))) }));
|
|
32
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/checkbox/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { CheckboxGroup } from "./checkbox-group";
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { AvatarProps } from "../avatar";
|
|
2
|
+
import type { BadgeProps } from "../badge";
|
|
3
|
+
export type ChipProps = BadgeProps & {
|
|
4
|
+
/**
|
|
5
|
+
* Renders a small `Avatar` before the content — for "person/entity chip"
|
|
6
|
+
* patterns (e.g. an assignee or a mentioned user).
|
|
7
|
+
*/
|
|
8
|
+
avatar?: Pick<AvatarProps, "src" | "alt" | "fallback">;
|
|
9
|
+
/**
|
|
10
|
+
* Prevents interaction and dims the chip.
|
|
11
|
+
* @default false
|
|
12
|
+
*/
|
|
13
|
+
isDisabled?: boolean;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* A compact, interactive element for displaying status, categories, or
|
|
17
|
+
* filters — `Badge` with an optional avatar slot for tagging people/entities.
|
|
18
|
+
*
|
|
19
|
+
* _Inspired from multiple sources, to make a consistent and reusable component._
|
|
20
|
+
* @see https://v2.heroui.com/docs/components/chip
|
|
21
|
+
*
|
|
22
|
+
* @version 0.1.0
|
|
23
|
+
* @author Forth
|
|
24
|
+
* @copyright 2026 Forth
|
|
25
|
+
*/
|
|
26
|
+
export declare function Chip({ avatar, isDisabled, className, children, ...props }: ChipProps): import("react").JSX.Element;
|
|
27
|
+
//# sourceMappingURL=chip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chip.d.ts","sourceRoot":"","sources":["../../../src/components/chip/chip.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAE7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAG3C,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG;IACnC;;;OAGG;IACH,MAAM,CAAC,EAAE,IAAI,CAAC,WAAW,EAAE,KAAK,GAAG,KAAK,GAAG,UAAU,CAAC,CAAC;IACvD;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,IAAI,CAAC,EACnB,MAAM,EACN,UAAkB,EAClB,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,SAAS,+BAWX"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
|
|
3
|
+
import { Avatar } from "../avatar";
|
|
4
|
+
import { Badge } from "../badge";
|
|
5
|
+
/**
|
|
6
|
+
* A compact, interactive element for displaying status, categories, or
|
|
7
|
+
* filters — `Badge` with an optional avatar slot for tagging people/entities.
|
|
8
|
+
*
|
|
9
|
+
* _Inspired from multiple sources, to make a consistent and reusable component._
|
|
10
|
+
* @see https://v2.heroui.com/docs/components/chip
|
|
11
|
+
*
|
|
12
|
+
* @version 0.1.0
|
|
13
|
+
* @author Forth
|
|
14
|
+
* @copyright 2026 Forth
|
|
15
|
+
*/
|
|
16
|
+
export function Chip({ avatar, isDisabled = false, className, children, ...props }) {
|
|
17
|
+
return (_jsxs(Badge, { className: cn(isDisabled && "pointer-events-none opacity-50", className), "aria-disabled": isDisabled, ...props, children: [avatar && _jsx(Avatar, { size: "xs", className: { root: "-ml-1" }, ...avatar }), children] }));
|
|
18
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/chip/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { Chip } from "./chip";
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import type { BundledLanguage, BundledTheme, SpecialLanguage } from "shiki";
|
|
3
|
+
export interface CodeBlockProps {
|
|
4
|
+
code: string;
|
|
5
|
+
language?: BundledLanguage | SpecialLanguage;
|
|
6
|
+
/** Shown in the header, before the language badge. */
|
|
7
|
+
filename?: string;
|
|
8
|
+
/**
|
|
9
|
+
* @default { light: "github-light", dark: "github-dark" }
|
|
10
|
+
*/
|
|
11
|
+
theme?: {
|
|
12
|
+
light: BundledTheme;
|
|
13
|
+
dark: BundledTheme;
|
|
14
|
+
};
|
|
15
|
+
showLineNumbers?: boolean;
|
|
16
|
+
className?: string;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* A syntax-highlighted code block with a copy-to-clipboard button, an
|
|
20
|
+
* optional filename/language header, and optional line numbers.
|
|
21
|
+
*
|
|
22
|
+
* _Inspired from multiple sources, to make a consistent and reusable component._
|
|
23
|
+
* @see https://www.kibo-ui.com/components/code-block
|
|
24
|
+
* @see https://ui.aceternity.com/components/code-block
|
|
25
|
+
*
|
|
26
|
+
* @version 0.1.0
|
|
27
|
+
* @author Forth
|
|
28
|
+
* @copyright 2026 Forth
|
|
29
|
+
*/
|
|
30
|
+
export declare function CodeBlock({ code, language, filename, theme, showLineNumbers, className, }: CodeBlockProps): React.JSX.Element;
|
|
31
|
+
//# sourceMappingURL=code-block.d.ts.map
|
|
@@ -0,0 +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;CACpB;AAKD;;;;;;;;;;;GAWG;AACH,wBAAgB,SAAS,CAAC,EACxB,IAAI,EACJ,QAAiB,EACjB,QAAQ,EACR,KAAqB,EACrB,eAAuB,EACvB,SAAS,GACV,EAAE,cAAc,qBAkFhB"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { CheckIcon, CopyIcon } from "lucide-react";
|
|
5
|
+
import { codeToHtml } from "shiki";
|
|
6
|
+
import { Badge } from "@forthtilliath/shadcn-ui/components/badge";
|
|
7
|
+
import { Button } from "@forthtilliath/shadcn-ui/components/button";
|
|
8
|
+
import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
|
|
9
|
+
const DEFAULT_THEME = { light: "github-light", dark: "github-dark" };
|
|
10
|
+
const COPY_FEEDBACK_MS = 2000;
|
|
11
|
+
/**
|
|
12
|
+
* A syntax-highlighted code block with a copy-to-clipboard button, an
|
|
13
|
+
* optional filename/language header, and optional line numbers.
|
|
14
|
+
*
|
|
15
|
+
* _Inspired from multiple sources, to make a consistent and reusable component._
|
|
16
|
+
* @see https://www.kibo-ui.com/components/code-block
|
|
17
|
+
* @see https://ui.aceternity.com/components/code-block
|
|
18
|
+
*
|
|
19
|
+
* @version 0.1.0
|
|
20
|
+
* @author Forth
|
|
21
|
+
* @copyright 2026 Forth
|
|
22
|
+
*/
|
|
23
|
+
export function CodeBlock({ code, language = "text", filename, theme = DEFAULT_THEME, showLineNumbers = false, className, }) {
|
|
24
|
+
const [html, setHtml] = React.useState(null);
|
|
25
|
+
const [copied, setCopied] = React.useState(false);
|
|
26
|
+
React.useEffect(() => {
|
|
27
|
+
let cancelled = false;
|
|
28
|
+
void codeToHtml(code, {
|
|
29
|
+
lang: language,
|
|
30
|
+
themes: theme,
|
|
31
|
+
defaultColor: false,
|
|
32
|
+
}).then((result) => {
|
|
33
|
+
if (!cancelled) {
|
|
34
|
+
setHtml(result);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
return () => {
|
|
38
|
+
cancelled = true;
|
|
39
|
+
};
|
|
40
|
+
}, [code, language, theme]);
|
|
41
|
+
function handleCopy() {
|
|
42
|
+
void navigator.clipboard.writeText(code).then(() => {
|
|
43
|
+
setCopied(true);
|
|
44
|
+
setTimeout(() => {
|
|
45
|
+
setCopied(false);
|
|
46
|
+
}, COPY_FEEDBACK_MS);
|
|
47
|
+
});
|
|
48
|
+
}
|
|
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 ? "Copied" : "Copy code", 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
|
+
"[&_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
|
+
// Shiki generates static markup from the given `code` string
|
|
52
|
+
// server-side-safe (no user input reaches this beyond the
|
|
53
|
+
// developer-supplied `code` prop), same trust boundary as
|
|
54
|
+
// ChartStyle's dangerouslySetInnerHTML elsewhere in this repo.
|
|
55
|
+
// eslint-disable-next-line @eslint-react/dom-no-dangerously-set-innerhtml
|
|
56
|
+
dangerouslySetInnerHTML: { __html: html } })) : (_jsx("pre", { className: "overflow-x-auto p-4", children: _jsx("code", { children: code }) }))] })] }));
|
|
57
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/code-block/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { CodeBlock } from "./code-block";
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import type { LucideProps } from "lucide-react";
|
|
3
|
+
import { Collapsible as CollapsiblePrimitive, CollapsibleContent as CollapsibleContentPrimitive, CollapsibleTrigger as CollapsibleTriggerPrimitive } from "@forthtilliath/shadcn-ui/components/collapsible";
|
|
4
|
+
export type CollapsibleProps = React.ComponentProps<typeof CollapsiblePrimitive>;
|
|
5
|
+
/**
|
|
6
|
+
* An interactive component which expands/collapses a single panel — the
|
|
7
|
+
* single-item primitive `Accordion` is built on top of. Reach for
|
|
8
|
+
* `Accordion` instead when you have several mutually-exclusive sections.
|
|
9
|
+
*
|
|
10
|
+
* _Inspired from multiple sources, to make a consistent and reusable component._
|
|
11
|
+
* @see https://ui.shadcn.com/docs/components/collapsible
|
|
12
|
+
* @see https://ktui.io/docs/collapse
|
|
13
|
+
*
|
|
14
|
+
* @version 0.1.0
|
|
15
|
+
* @author Forth
|
|
16
|
+
* @copyright 2026 Forth
|
|
17
|
+
*/
|
|
18
|
+
export declare function Collapsible(props: CollapsibleProps): React.JSX.Element;
|
|
19
|
+
export type CollapsibleTriggerProps = React.ComponentProps<typeof CollapsibleTriggerPrimitive> & {
|
|
20
|
+
/** Hides the chevron icon entirely. */
|
|
21
|
+
hideChevron?: boolean;
|
|
22
|
+
/** Renders this icon instead of the default chevron. */
|
|
23
|
+
customChevron?: React.ReactElement<LucideProps>;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* A trigger with a chevron that rotates 180° when the panel is open —
|
|
27
|
+
* shadcn-ui's own `CollapsibleTrigger` renders no icon at all, matching
|
|
28
|
+
* `AccordionTrigger`'s `hideChevron`/`customChevron` API for consistency.
|
|
29
|
+
*/
|
|
30
|
+
export declare function CollapsibleTrigger({ className, hideChevron, customChevron, children, ...props }: CollapsibleTriggerProps): React.JSX.Element;
|
|
31
|
+
export type CollapsibleContentProps = React.ComponentProps<typeof CollapsibleContentPrimitive>;
|
|
32
|
+
/**
|
|
33
|
+
* A height-animated content panel — shadcn-ui's own `CollapsibleContent`
|
|
34
|
+
* has no animation at all (an instant show/hide via Radix's `data-state`).
|
|
35
|
+
* Uses the `animate-collapsible-down`/`-up` keyframes `tw-animate-css`
|
|
36
|
+
* already ships (mirroring `accordion-down`/`-up`, keyed to Radix
|
|
37
|
+
* Collapsible's own `--radix-collapsible-content-height` variable) but
|
|
38
|
+
* that nothing in this repo used yet.
|
|
39
|
+
*/
|
|
40
|
+
export declare function CollapsibleContent({ className, ...props }: CollapsibleContentProps): React.JSX.Element;
|
|
41
|
+
//# sourceMappingURL=collapsible.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"collapsible.d.ts","sourceRoot":"","sources":["../../../src/components/collapsible/collapsible.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,OAAO,EACL,WAAW,IAAI,oBAAoB,EACnC,kBAAkB,IAAI,2BAA2B,EACjD,kBAAkB,IAAI,2BAA2B,EAClD,MAAM,iDAAiD,CAAC;AAGzD,MAAM,MAAM,gBAAgB,GAAG,KAAK,CAAC,cAAc,CACjD,OAAO,oBAAoB,CAC5B,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,gBAAgB,qBAElD;AAED,MAAM,MAAM,uBAAuB,GAAG,KAAK,CAAC,cAAc,CACxD,OAAO,2BAA2B,CACnC,GAAG;IACF,uCAAuC;IACvC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,wDAAwD;IACxD,aAAa,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;CACjD,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,SAAS,EACT,WAAmB,EACnB,aAAa,EACb,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,uBAAuB,qBA6BzB;AAED,MAAM,MAAM,uBAAuB,GAAG,KAAK,CAAC,cAAc,CACxD,OAAO,2BAA2B,CACnC,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,SAAS,EACT,GAAG,KAAK,EACT,EAAE,uBAAuB,qBAUzB"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { ChevronDownIcon } from "lucide-react";
|
|
5
|
+
import { Collapsible as CollapsiblePrimitive, CollapsibleContent as CollapsibleContentPrimitive, CollapsibleTrigger as CollapsibleTriggerPrimitive, } from "@forthtilliath/shadcn-ui/components/collapsible";
|
|
6
|
+
import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
|
|
7
|
+
/**
|
|
8
|
+
* An interactive component which expands/collapses a single panel — the
|
|
9
|
+
* single-item primitive `Accordion` is built on top of. Reach for
|
|
10
|
+
* `Accordion` instead when you have several mutually-exclusive sections.
|
|
11
|
+
*
|
|
12
|
+
* _Inspired from multiple sources, to make a consistent and reusable component._
|
|
13
|
+
* @see https://ui.shadcn.com/docs/components/collapsible
|
|
14
|
+
* @see https://ktui.io/docs/collapse
|
|
15
|
+
*
|
|
16
|
+
* @version 0.1.0
|
|
17
|
+
* @author Forth
|
|
18
|
+
* @copyright 2026 Forth
|
|
19
|
+
*/
|
|
20
|
+
export function Collapsible(props) {
|
|
21
|
+
return _jsx(CollapsiblePrimitive, { "data-slot": "collapsible", ...props });
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* A trigger with a chevron that rotates 180° when the panel is open —
|
|
25
|
+
* shadcn-ui's own `CollapsibleTrigger` renders no icon at all, matching
|
|
26
|
+
* `AccordionTrigger`'s `hideChevron`/`customChevron` API for consistency.
|
|
27
|
+
*/
|
|
28
|
+
export function CollapsibleTrigger({ className, hideChevron = false, customChevron, children, ...props }) {
|
|
29
|
+
const chevronProps = {
|
|
30
|
+
...customChevron?.props,
|
|
31
|
+
className: cn("text-muted-foreground pointer-events-none size-4 shrink-0 transition-transform duration-200", customChevron?.props.className),
|
|
32
|
+
};
|
|
33
|
+
return (_jsxs(CollapsibleTriggerPrimitive, { className: cn("flex flex-1 items-center justify-between gap-4 text-left text-sm font-medium [&[data-state=open]>svg]:rotate-180", className), ...props, children: [children, !hideChevron && React.isValidElement(customChevron) ? (
|
|
34
|
+
// cloneElement is required here (not the `Slot` pattern) so the merged
|
|
35
|
+
// className goes through `cn()`'s tailwind-merge dedup, and the icon
|
|
36
|
+
// stays the trigger's direct child for the `>svg` CSS selector above.
|
|
37
|
+
// eslint-disable-next-line @eslint-react/no-clone-element
|
|
38
|
+
React.cloneElement(customChevron, chevronProps)) : (_jsx(ChevronDownIcon, { ...chevronProps }))] }));
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* A height-animated content panel — shadcn-ui's own `CollapsibleContent`
|
|
42
|
+
* has no animation at all (an instant show/hide via Radix's `data-state`).
|
|
43
|
+
* Uses the `animate-collapsible-down`/`-up` keyframes `tw-animate-css`
|
|
44
|
+
* already ships (mirroring `accordion-down`/`-up`, keyed to Radix
|
|
45
|
+
* Collapsible's own `--radix-collapsible-content-height` variable) but
|
|
46
|
+
* that nothing in this repo used yet.
|
|
47
|
+
*/
|
|
48
|
+
export function CollapsibleContent({ className, ...props }) {
|
|
49
|
+
return (_jsx(CollapsibleContentPrimitive, { className: cn("data-[state=closed]:animate-collapsible-up data-[state=open]:animate-collapsible-down overflow-hidden text-sm", className), ...props }));
|
|
50
|
+
}
|