@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,41 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export interface LoadingState {
|
|
3
|
+
text: string;
|
|
4
|
+
}
|
|
5
|
+
export interface MultiStepLoaderProps {
|
|
6
|
+
/** The sequence of messages to display, one at a time. */
|
|
7
|
+
loadingStates: LoadingState[];
|
|
8
|
+
/** Whether the overlay is shown at all. */
|
|
9
|
+
loading: boolean;
|
|
10
|
+
/**
|
|
11
|
+
* Milliseconds between each state transition.
|
|
12
|
+
* @default 2000
|
|
13
|
+
*/
|
|
14
|
+
duration?: number;
|
|
15
|
+
/**
|
|
16
|
+
* Restarts from the first state after reaching the last one.
|
|
17
|
+
* @default true
|
|
18
|
+
*/
|
|
19
|
+
loop?: boolean;
|
|
20
|
+
/**
|
|
21
|
+
* Controls which state is active by index, instead of advancing on a
|
|
22
|
+
* timer — pairs with real progress you're already tracking (e.g. one
|
|
23
|
+
* state per upload/step actually completing).
|
|
24
|
+
*/
|
|
25
|
+
value?: number;
|
|
26
|
+
className?: string;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* A full-screen overlay stepping through a sequence of loading messages —
|
|
30
|
+
* for operations that take long enough that a single spinner reads as
|
|
31
|
+
* stuck (multi-stage setup wizards, long uploads, batch processing).
|
|
32
|
+
*
|
|
33
|
+
* _Inspired from multiple sources, to make a consistent and reusable component._
|
|
34
|
+
* @see https://ui.aceternity.com/components/multi-step-loader
|
|
35
|
+
*
|
|
36
|
+
* @version 0.1.0
|
|
37
|
+
* @author Forth
|
|
38
|
+
* @copyright 2026 Forth
|
|
39
|
+
*/
|
|
40
|
+
export declare function MultiStepLoader({ loadingStates, loading, duration, loop, value, className, }: MultiStepLoaderProps): React.JSX.Element | null;
|
|
41
|
+
//# sourceMappingURL=multi-step-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"multi-step-loader.d.ts","sourceRoot":"","sources":["../../../src/components/multi-step-loader/multi-step-loader.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAO/B,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,oBAAoB;IACnC,0DAA0D;IAC1D,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,2CAA2C;IAC3C,OAAO,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,IAAI,CAAC,EAAE,OAAO,CAAC;IACf;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAAC,EAC9B,aAAa,EACb,OAAO,EACP,QAAe,EACf,IAAW,EACX,KAAK,EACL,SAAS,GACV,EAAE,oBAAoB,4BAuEtB"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { CheckIcon } from "lucide-react";
|
|
5
|
+
import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
|
|
6
|
+
import { Spinner } from "../spinner";
|
|
7
|
+
/**
|
|
8
|
+
* A full-screen overlay stepping through a sequence of loading messages —
|
|
9
|
+
* for operations that take long enough that a single spinner reads as
|
|
10
|
+
* stuck (multi-stage setup wizards, long uploads, batch processing).
|
|
11
|
+
*
|
|
12
|
+
* _Inspired from multiple sources, to make a consistent and reusable component._
|
|
13
|
+
* @see https://ui.aceternity.com/components/multi-step-loader
|
|
14
|
+
*
|
|
15
|
+
* @version 0.1.0
|
|
16
|
+
* @author Forth
|
|
17
|
+
* @copyright 2026 Forth
|
|
18
|
+
*/
|
|
19
|
+
export function MultiStepLoader({ loadingStates, loading, duration = 2000, loop = true, value, className, }) {
|
|
20
|
+
const [currentState, setCurrentState] = React.useState(0);
|
|
21
|
+
const isControlled = value !== undefined;
|
|
22
|
+
// Reset to the first state whenever `loading` flips, adjusted during
|
|
23
|
+
// render (React's documented pattern for this) rather than in an effect,
|
|
24
|
+
// which would cause an extra cascading render.
|
|
25
|
+
const [prevLoading, setPrevLoading] = React.useState(loading);
|
|
26
|
+
if (loading !== prevLoading) {
|
|
27
|
+
setPrevLoading(loading);
|
|
28
|
+
if (loading) {
|
|
29
|
+
setCurrentState(0);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
React.useEffect(() => {
|
|
33
|
+
if (!loading || isControlled) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const interval = setInterval(() => {
|
|
37
|
+
setCurrentState((previous) => {
|
|
38
|
+
if (previous === loadingStates.length - 1) {
|
|
39
|
+
return loop ? 0 : previous;
|
|
40
|
+
}
|
|
41
|
+
return previous + 1;
|
|
42
|
+
});
|
|
43
|
+
}, duration);
|
|
44
|
+
return () => {
|
|
45
|
+
clearInterval(interval);
|
|
46
|
+
};
|
|
47
|
+
}, [loading, isControlled, duration, loop, loadingStates.length]);
|
|
48
|
+
if (!loading) {
|
|
49
|
+
return null;
|
|
50
|
+
}
|
|
51
|
+
const activeIndex = value ?? currentState;
|
|
52
|
+
return (_jsx("div", { role: "status", "aria-live": "polite", className: cn("bg-background/80 fixed inset-0 z-50 flex items-center justify-center backdrop-blur-sm", className), children: _jsx("div", { className: "flex flex-col gap-3", children: loadingStates.map((state, index) => (_jsxs("div", { className: cn("flex items-center gap-2 text-sm", index < activeIndex && "text-muted-foreground line-through", index === activeIndex && "text-foreground font-medium", index > activeIndex && "text-muted-foreground/50"), children: [index < activeIndex ? (_jsx(CheckIcon, { className: "size-4 text-green-600" })) : index === activeIndex ? (_jsx(Spinner, { size: "sm" })) : (_jsx("span", { className: "size-4" })), state.text] }, state.text))) }) }));
|
|
53
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/navbar/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EACV,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type * as React from "react";
|
|
2
|
+
export interface NavbarMobileMenuItem {
|
|
3
|
+
label: React.ReactNode;
|
|
4
|
+
href: string;
|
|
5
|
+
}
|
|
6
|
+
export interface NavbarMobileMenuProps {
|
|
7
|
+
items: NavbarMobileMenuItem[];
|
|
8
|
+
/** Extra content rendered below the links (e.g. auth buttons). */
|
|
9
|
+
footer?: React.ReactNode;
|
|
10
|
+
className?: string;
|
|
11
|
+
/** Visible only below this breakpoint's prefix (Tailwind's `md` by default). @default "md" */
|
|
12
|
+
hideFrom?: "sm" | "md" | "lg";
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* A hamburger-triggered slide-down panel for a `Navbar`'s links on small
|
|
16
|
+
* screens — pairs with `Navbar`, consolidating aceternity's
|
|
17
|
+
* MobileNavToggle/MobileNavMenu pair into one component.
|
|
18
|
+
*
|
|
19
|
+
* @version 0.1.0
|
|
20
|
+
* @author Forth
|
|
21
|
+
* @copyright 2026 Forth
|
|
22
|
+
*/
|
|
23
|
+
export declare function NavbarMobileMenu({ items, footer, className, hideFrom, }: NavbarMobileMenuProps): React.JSX.Element;
|
|
24
|
+
//# sourceMappingURL=navbar-mobile-menu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navbar-mobile-menu.d.ts","sourceRoot":"","sources":["../../../src/components/navbar/navbar-mobile-menu.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAWpC,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,oBAAoB,EAAE,CAAC;IAC9B,kEAAkE;IAClE,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8FAA8F;IAC9F,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;CAC/B;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,MAAM,EACN,SAAS,EACT,QAAe,GAChB,EAAE,qBAAqB,qBAkCvB"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { MenuIcon } from "lucide-react";
|
|
4
|
+
import { Button } from "@forthtilliath/shadcn-ui/components/button";
|
|
5
|
+
import { Sheet, SheetContent, SheetTrigger, } from "@forthtilliath/shadcn-ui/components/sheet";
|
|
6
|
+
import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
|
|
7
|
+
/**
|
|
8
|
+
* A hamburger-triggered slide-down panel for a `Navbar`'s links on small
|
|
9
|
+
* screens — pairs with `Navbar`, consolidating aceternity's
|
|
10
|
+
* MobileNavToggle/MobileNavMenu pair into one component.
|
|
11
|
+
*
|
|
12
|
+
* @version 0.1.0
|
|
13
|
+
* @author Forth
|
|
14
|
+
* @copyright 2026 Forth
|
|
15
|
+
*/
|
|
16
|
+
export function NavbarMobileMenu({ items, footer, className, hideFrom = "md", }) {
|
|
17
|
+
return (_jsxs(Sheet, { children: [_jsx(SheetTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "icon", "aria-label": "Toggle menu", className: cn(hideFrom === "sm" && "sm:hidden", hideFrom === "md" && "md:hidden", hideFrom === "lg" && "lg:hidden", className), children: _jsx(MenuIcon, {}) }) }), _jsxs(SheetContent, { side: "top", children: [_jsx("nav", { className: "flex flex-col gap-1 pt-8", children: items.map((item) => (_jsx("a", { href: item.href, className: "hover:bg-accent hover:text-accent-foreground rounded-md px-3 py-2 text-sm", children: item.label }, item.href))) }), footer] })] }));
|
|
18
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export type NavbarProps = React.ComponentProps<"header"> & {
|
|
3
|
+
/**
|
|
4
|
+
* Scroll distance (px) past which the "scrolled" styling (border,
|
|
5
|
+
* blurred background, shrunk width) kicks in.
|
|
6
|
+
* @default 20
|
|
7
|
+
*/
|
|
8
|
+
shrinkOffset?: number;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* A fixed, floating page header that visually shrinks and gains a
|
|
12
|
+
* background/border once the page scrolls — style the `data-scrolled`
|
|
13
|
+
* attribute to customize the transition (a default is provided).
|
|
14
|
+
*
|
|
15
|
+
* _Inspired from multiple sources, to make a consistent and reusable component._
|
|
16
|
+
* @see https://ui.shadcn.com/docs/components/navigation-menu
|
|
17
|
+
* @see https://ui.aceternity.com/components/resizable-navbar
|
|
18
|
+
*
|
|
19
|
+
* @version 0.1.0
|
|
20
|
+
* @author Forth
|
|
21
|
+
* @copyright 2026 Forth
|
|
22
|
+
*/
|
|
23
|
+
export declare function Navbar({ shrinkOffset, className, children, ...props }: NavbarProps): React.JSX.Element;
|
|
24
|
+
//# sourceMappingURL=navbar.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navbar.d.ts","sourceRoot":"","sources":["../../../src/components/navbar/navbar.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAI/B,MAAM,MAAM,WAAW,GAAG,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,GAAG;IACzD;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAIF;;;;;;;;;;;;GAYG;AACH,wBAAgB,MAAM,CAAC,EACrB,YAAoC,EACpC,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,WAAW,qBA6Bb"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
|
|
5
|
+
const DEFAULT_SHRINK_OFFSET = 20;
|
|
6
|
+
/**
|
|
7
|
+
* A fixed, floating page header that visually shrinks and gains a
|
|
8
|
+
* background/border once the page scrolls — style the `data-scrolled`
|
|
9
|
+
* attribute to customize the transition (a default is provided).
|
|
10
|
+
*
|
|
11
|
+
* _Inspired from multiple sources, to make a consistent and reusable component._
|
|
12
|
+
* @see https://ui.shadcn.com/docs/components/navigation-menu
|
|
13
|
+
* @see https://ui.aceternity.com/components/resizable-navbar
|
|
14
|
+
*
|
|
15
|
+
* @version 0.1.0
|
|
16
|
+
* @author Forth
|
|
17
|
+
* @copyright 2026 Forth
|
|
18
|
+
*/
|
|
19
|
+
export function Navbar({ shrinkOffset = DEFAULT_SHRINK_OFFSET, className, children, ...props }) {
|
|
20
|
+
const [scrolled, setScrolled] = React.useState(false);
|
|
21
|
+
React.useEffect(() => {
|
|
22
|
+
function onScroll() {
|
|
23
|
+
// eslint-disable-next-line @eslint-react/set-state-in-effect -- initial synchronous read of the external scroll position, unavoidable for a subscription with no server-renderable equivalent
|
|
24
|
+
setScrolled(window.scrollY > shrinkOffset);
|
|
25
|
+
}
|
|
26
|
+
onScroll();
|
|
27
|
+
window.addEventListener("scroll", onScroll, { passive: true });
|
|
28
|
+
return () => {
|
|
29
|
+
window.removeEventListener("scroll", onScroll);
|
|
30
|
+
};
|
|
31
|
+
}, [shrinkOffset]);
|
|
32
|
+
return (_jsx("header", { "data-slot": "navbar", "data-scrolled": scrolled, className: cn("fixed inset-x-0 top-4 z-50 mx-auto flex w-[calc(100%-2rem)] max-w-5xl items-center justify-between rounded-full border border-transparent px-4 py-2 transition-all duration-300", "data-[scrolled=true]:bg-background/80 data-[scrolled=true]:border-border data-[scrolled=true]:max-w-3xl data-[scrolled=true]:shadow-md data-[scrolled=true]:backdrop-blur-md", className), ...props, children: children }));
|
|
33
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/notification-center/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,uBAAuB,EACvB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { NotificationCenter } from "./notification-center";
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type React from "react";
|
|
2
|
+
export interface NotificationItem {
|
|
3
|
+
id: string;
|
|
4
|
+
title: React.ReactNode;
|
|
5
|
+
description?: React.ReactNode;
|
|
6
|
+
date?: React.ReactNode;
|
|
7
|
+
read?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export interface NotificationCenterProps {
|
|
10
|
+
notifications: NotificationItem[];
|
|
11
|
+
onNotificationClick?: (id: string) => void;
|
|
12
|
+
onMarkAllRead?: () => void;
|
|
13
|
+
emptyMessage?: string;
|
|
14
|
+
className?: string;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* A bell-icon trigger with an unread-count badge, opening a popover list
|
|
18
|
+
* of notifications — a presentational shell only (no push/realtime
|
|
19
|
+
* transport), since that's inherently app-specific.
|
|
20
|
+
*
|
|
21
|
+
* @see https://www.rigidui.com/docs/components/notification-center
|
|
22
|
+
*
|
|
23
|
+
* @version 0.1.0
|
|
24
|
+
* @author Forth
|
|
25
|
+
* @copyright 2026 Forth
|
|
26
|
+
*/
|
|
27
|
+
export declare function NotificationCenter({ notifications, onNotificationClick, onMarkAllRead, emptyMessage, className, }: NotificationCenterProps): React.JSX.Element;
|
|
28
|
+
//# sourceMappingURL=notification-center.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notification-center.d.ts","sourceRoot":"","sources":["../../../src/components/notification-center/notification-center.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAa/B,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,WAAW,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC9B,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,uBAAuB;IACtC,aAAa,EAAE,gBAAgB,EAAE,CAAC;IAClC,mBAAmB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3C,aAAa,CAAC,EAAE,MAAM,IAAI,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,aAAa,EACb,mBAAmB,EACnB,aAAa,EACb,YAAiC,EACjC,SAAS,GACV,EAAE,uBAAuB,qBA2EzB"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { BellIcon } from "lucide-react";
|
|
4
|
+
import { Popover, PopoverContent, PopoverTrigger, } from "@forthtilliath/shadcn-ui/components/popover";
|
|
5
|
+
import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
|
|
6
|
+
import { Badge } from "../badge";
|
|
7
|
+
import { Button } from "../button";
|
|
8
|
+
/**
|
|
9
|
+
* A bell-icon trigger with an unread-count badge, opening a popover list
|
|
10
|
+
* of notifications — a presentational shell only (no push/realtime
|
|
11
|
+
* transport), since that's inherently app-specific.
|
|
12
|
+
*
|
|
13
|
+
* @see https://www.rigidui.com/docs/components/notification-center
|
|
14
|
+
*
|
|
15
|
+
* @version 0.1.0
|
|
16
|
+
* @author Forth
|
|
17
|
+
* @copyright 2026 Forth
|
|
18
|
+
*/
|
|
19
|
+
export function NotificationCenter({ notifications, onNotificationClick, onMarkAllRead, emptyMessage = "No notifications", className, }) {
|
|
20
|
+
const unreadCount = notifications.filter((notification) => notification.read !== true).length;
|
|
21
|
+
return (_jsxs(Popover, { children: [_jsx(PopoverTrigger, { asChild: true, children: _jsxs(Button, { variant: "ghost", size: "icon", className: "relative", "aria-label": "Notifications", children: [_jsx(BellIcon, {}), unreadCount > 0 && (_jsx(Badge, { variant: "destructive", size: "sm", className: "absolute -top-1 -right-1 size-4 justify-center rounded-full p-0", children: unreadCount > 9 ? "9+" : unreadCount }))] }) }), _jsxs(PopoverContent, { className: cn("w-80 p-0", className), align: "end", children: [_jsxs("div", { className: "flex items-center justify-between border-b p-3", children: [_jsx("p", { className: "text-sm font-medium", children: "Notifications" }), unreadCount > 0 && onMarkAllRead !== undefined && (_jsx("button", { type: "button", onClick: onMarkAllRead, className: "text-muted-foreground hover:text-foreground text-xs", children: "Mark all as read" }))] }), _jsx("div", { className: "max-h-80 overflow-y-auto", children: notifications.length === 0 ? (_jsx("p", { className: "text-muted-foreground p-6 text-center text-sm", children: emptyMessage })) : (notifications.map((notification) => (_jsxs("button", { type: "button", onClick: () => {
|
|
22
|
+
onNotificationClick?.(notification.id);
|
|
23
|
+
}, className: cn("hover:bg-accent flex w-full flex-col gap-0.5 border-b p-3 text-left last:border-0", notification.read !== true && "bg-accent/40"), children: [_jsx("p", { className: "text-sm font-medium", children: notification.title }), notification.description !== undefined && (_jsx("p", { className: "text-muted-foreground text-xs", children: notification.description })), notification.date !== undefined && (_jsx("p", { className: "text-muted-foreground text-xs", children: notification.date }))] }, notification.id)))) })] })] }));
|
|
24
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/number-input/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { NumberInput } from "./number-input";
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export type NumberInputProps = Omit<React.ComponentProps<"input">, "type" | "value" | "defaultValue" | "onChange"> & {
|
|
3
|
+
value?: number;
|
|
4
|
+
defaultValue?: number;
|
|
5
|
+
onValueChange?: (value: number) => void;
|
|
6
|
+
min?: number;
|
|
7
|
+
max?: number;
|
|
8
|
+
step?: number;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* A numeric input with increment/decrement stepper buttons, clamped to
|
|
12
|
+
* `min`/`max`.
|
|
13
|
+
*
|
|
14
|
+
* _Inspired from multiple sources, to make a consistent and reusable component._
|
|
15
|
+
* @see https://www.heroui.com/docs/components/number-input
|
|
16
|
+
*
|
|
17
|
+
* @version 0.1.0
|
|
18
|
+
* @author Forth
|
|
19
|
+
* @copyright 2026 Forth
|
|
20
|
+
*/
|
|
21
|
+
export declare function NumberInput({ className, value, defaultValue, onValueChange, min, max, step, disabled, ...props }: NumberInputProps): React.JSX.Element;
|
|
22
|
+
//# sourceMappingURL=number-input.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"number-input.d.ts","sourceRoot":"","sources":["../../../src/components/number-input/number-input.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,MAAM,MAAM,gBAAgB,GAAG,IAAI,CACjC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,EAC7B,MAAM,GAAG,OAAO,GAAG,cAAc,GAAG,UAAU,CAC/C,GAAG;IACF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,KAAK,EACL,YAAgB,EAChB,aAAa,EACb,GAAe,EACf,GAAc,EACd,IAAQ,EACR,QAAgB,EAChB,GAAG,KAAK,EACT,EAAE,gBAAgB,qBA6DlB"}
|
|
@@ -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 { MinusIcon, PlusIcon } from "lucide-react";
|
|
5
|
+
import { Input } from "@forthtilliath/shadcn-ui/components/input";
|
|
6
|
+
import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
|
|
7
|
+
import { Button } from "../button";
|
|
8
|
+
/**
|
|
9
|
+
* A numeric input with increment/decrement stepper buttons, clamped to
|
|
10
|
+
* `min`/`max`.
|
|
11
|
+
*
|
|
12
|
+
* _Inspired from multiple sources, to make a consistent and reusable component._
|
|
13
|
+
* @see https://www.heroui.com/docs/components/number-input
|
|
14
|
+
*
|
|
15
|
+
* @version 0.1.0
|
|
16
|
+
* @author Forth
|
|
17
|
+
* @copyright 2026 Forth
|
|
18
|
+
*/
|
|
19
|
+
export function NumberInput({ className, value, defaultValue = 0, onValueChange, min = -Infinity, max = Infinity, step = 1, disabled = false, ...props }) {
|
|
20
|
+
const [uncontrolledValue, setUncontrolledValue] = React.useState(defaultValue);
|
|
21
|
+
const current = value ?? uncontrolledValue;
|
|
22
|
+
function commit(next) {
|
|
23
|
+
const clamped = Math.min(max, Math.max(min, next));
|
|
24
|
+
setUncontrolledValue(clamped);
|
|
25
|
+
onValueChange?.(clamped);
|
|
26
|
+
}
|
|
27
|
+
return (_jsxs("div", { "data-slot": "number-input", className: cn("flex w-fit items-stretch", className), children: [_jsx(Button, { type: "button", variant: "outline", size: "icon", disabled: disabled || current <= min, onClick: () => {
|
|
28
|
+
commit(current - step);
|
|
29
|
+
}, "aria-label": "Decrement", className: "rounded-r-none", children: _jsx(MinusIcon, {}) }), _jsx(Input, { type: "number", inputMode: "numeric", value: current, min: min === -Infinity ? undefined : min, max: max === Infinity ? undefined : max, step: step, disabled: disabled, onChange: (e) => {
|
|
30
|
+
const parsed = Number(e.target.value);
|
|
31
|
+
if (!Number.isNaN(parsed)) {
|
|
32
|
+
commit(parsed);
|
|
33
|
+
}
|
|
34
|
+
}, className: "w-16 rounded-none text-center [appearance:textfield] [&::-webkit-inner-spin-button]:appearance-none [&::-webkit-outer-spin-button]:appearance-none", ...props }), _jsx(Button, { type: "button", variant: "outline", size: "icon", disabled: disabled || current >= max, onClick: () => {
|
|
35
|
+
commit(current + step);
|
|
36
|
+
}, "aria-label": "Increment", className: "rounded-l-none", children: _jsx(PlusIcon, {}) })] }));
|
|
37
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export type { PaginationProps } from "./pagination";
|
|
2
|
+
export { Pagination } from "./pagination";
|
|
3
|
+
export type { PaginationRangeItem, PaginationRangeOptions, } from "./pagination-range";
|
|
4
|
+
export { getPaginationRange } from "./pagination-range";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/pagination/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EACV,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface PaginationRangeOptions {
|
|
2
|
+
page: number;
|
|
3
|
+
totalPages: number;
|
|
4
|
+
/** Pages shown on each side of the current page. @default 1 */
|
|
5
|
+
siblingCount?: number;
|
|
6
|
+
/** Pages always shown at the start and end. @default 1 */
|
|
7
|
+
boundaryCount?: number;
|
|
8
|
+
}
|
|
9
|
+
export type PaginationRangeItem = number | "ellipsis-start" | "ellipsis-end";
|
|
10
|
+
/**
|
|
11
|
+
* Computes which page numbers (and where ellipses go) to render for a
|
|
12
|
+
* given current page / total page count — the piece every shadcn-ui
|
|
13
|
+
* Pagination consumer ends up re-implementing by hand, since the
|
|
14
|
+
* vendored primitives are unopinionated markup only.
|
|
15
|
+
*/
|
|
16
|
+
export declare function getPaginationRange({ page, totalPages, siblingCount, boundaryCount, }: PaginationRangeOptions): PaginationRangeItem[];
|
|
17
|
+
//# sourceMappingURL=pagination-range.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagination-range.d.ts","sourceRoot":"","sources":["../../../src/components/pagination/pagination-range.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,+DAA+D;IAC/D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,0DAA0D;IAC1D,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,mBAAmB,GAAG,MAAM,GAAG,gBAAgB,GAAG,cAAc,CAAC;AAM7E;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,EACjC,IAAI,EACJ,UAAU,EACV,YAAgB,EAChB,aAAiB,GAClB,EAAE,sBAAsB,GAAG,mBAAmB,EAAE,CAgChD"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
function range(start, end) {
|
|
2
|
+
return Array.from({ length: end - start + 1 }, (_, i) => start + i);
|
|
3
|
+
}
|
|
4
|
+
/**
|
|
5
|
+
* Computes which page numbers (and where ellipses go) to render for a
|
|
6
|
+
* given current page / total page count — the piece every shadcn-ui
|
|
7
|
+
* Pagination consumer ends up re-implementing by hand, since the
|
|
8
|
+
* vendored primitives are unopinionated markup only.
|
|
9
|
+
*/
|
|
10
|
+
export function getPaginationRange({ page, totalPages, siblingCount = 1, boundaryCount = 1, }) {
|
|
11
|
+
const totalVisible = boundaryCount * 2 + siblingCount * 2 + 3;
|
|
12
|
+
if (totalPages <= totalVisible) {
|
|
13
|
+
return range(1, totalPages);
|
|
14
|
+
}
|
|
15
|
+
const leftSibling = Math.max(page - siblingCount, boundaryCount + 2);
|
|
16
|
+
const rightSibling = Math.min(page + siblingCount, totalPages - boundaryCount - 1);
|
|
17
|
+
const items = range(1, boundaryCount);
|
|
18
|
+
items.push(leftSibling > boundaryCount + 2 ? "ellipsis-start" : boundaryCount + 1);
|
|
19
|
+
items.push(...range(leftSibling, rightSibling));
|
|
20
|
+
items.push(rightSibling < totalPages - boundaryCount - 1
|
|
21
|
+
? "ellipsis-end"
|
|
22
|
+
: totalPages - boundaryCount);
|
|
23
|
+
items.push(...range(totalPages - boundaryCount + 1, totalPages));
|
|
24
|
+
return [...new Set(items)].filter((item) => {
|
|
25
|
+
if (item === "ellipsis-start" || item === "ellipsis-end") {
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
return item >= 1 && item <= totalPages;
|
|
29
|
+
});
|
|
30
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { PaginationRangeOptions } from "./pagination-range";
|
|
2
|
+
export type PaginationProps = Omit<PaginationRangeOptions, "page"> & {
|
|
3
|
+
/** The current page, 1-indexed. */
|
|
4
|
+
page: number;
|
|
5
|
+
onPageChange: (page: number) => void;
|
|
6
|
+
/** Adds buttons that jump straight to the first/last page. @default false */
|
|
7
|
+
showFirstLast?: boolean;
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
className?: string;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Navigates between pages of a paginated set, computing the visible page
|
|
13
|
+
* numbers and ellipses itself from `page`/`totalPages` — shadcn-ui's own
|
|
14
|
+
* Pagination is unopinionated markup only and leaves that range
|
|
15
|
+
* computation to every consumer, so this wraps it with the missing piece.
|
|
16
|
+
*
|
|
17
|
+
* _Inspired from multiple sources, to make a consistent and reusable component._
|
|
18
|
+
* @see https://ui.shadcn.com/docs/components/pagination
|
|
19
|
+
* @see https://ktui.io/docs/pagination
|
|
20
|
+
*
|
|
21
|
+
* @version 0.1.0
|
|
22
|
+
* @author Forth
|
|
23
|
+
* @copyright 2026 Forth
|
|
24
|
+
*/
|
|
25
|
+
export declare function Pagination({ page, totalPages, siblingCount, boundaryCount, onPageChange, showFirstLast, disabled, className, }: PaginationProps): import("react").JSX.Element;
|
|
26
|
+
//# sourceMappingURL=pagination.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../../src/components/pagination/pagination.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAGjE,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,sBAAsB,EAAE,MAAM,CAAC,GAAG;IACnE,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,6EAA6E;IAC7E,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,UAAU,EACV,YAAY,EACZ,aAAa,EACb,YAAY,EACZ,aAAqB,EACrB,QAAgB,EAChB,SAAS,GACV,EAAE,eAAe,+BAyGjB"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { ChevronsLeftIcon, ChevronsRightIcon } from "lucide-react";
|
|
3
|
+
import { Pagination as PaginationPrimitive, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, } from "@forthtilliath/shadcn-ui/components/pagination";
|
|
4
|
+
import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
|
|
5
|
+
import { getPaginationRange } from "./pagination-range";
|
|
6
|
+
/**
|
|
7
|
+
* Navigates between pages of a paginated set, computing the visible page
|
|
8
|
+
* numbers and ellipses itself from `page`/`totalPages` — shadcn-ui's own
|
|
9
|
+
* Pagination is unopinionated markup only and leaves that range
|
|
10
|
+
* computation to every consumer, so this wraps it with the missing piece.
|
|
11
|
+
*
|
|
12
|
+
* _Inspired from multiple sources, to make a consistent and reusable component._
|
|
13
|
+
* @see https://ui.shadcn.com/docs/components/pagination
|
|
14
|
+
* @see https://ktui.io/docs/pagination
|
|
15
|
+
*
|
|
16
|
+
* @version 0.1.0
|
|
17
|
+
* @author Forth
|
|
18
|
+
* @copyright 2026 Forth
|
|
19
|
+
*/
|
|
20
|
+
export function Pagination({ page, totalPages, siblingCount, boundaryCount, onPageChange, showFirstLast = false, disabled = false, className, }) {
|
|
21
|
+
const items = getPaginationRange({
|
|
22
|
+
page,
|
|
23
|
+
totalPages,
|
|
24
|
+
siblingCount,
|
|
25
|
+
boundaryCount,
|
|
26
|
+
});
|
|
27
|
+
function goTo(target) {
|
|
28
|
+
if (!disabled && target >= 1 && target <= totalPages && target !== page) {
|
|
29
|
+
onPageChange(target);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
return (_jsx(PaginationPrimitive, { "data-slot": "pagination-root", className: cn(disabled && "pointer-events-none opacity-50", className), children: _jsxs(PaginationContent, { children: [showFirstLast && (_jsx(PaginationItem, { children: _jsx(PaginationLink, { href: "#", "aria-label": "Go to first page", size: "icon", "aria-disabled": page <= 1, className: cn(page <= 1 && "pointer-events-none opacity-50"), onClick: (e) => {
|
|
33
|
+
e.preventDefault();
|
|
34
|
+
goTo(1);
|
|
35
|
+
}, children: _jsx(ChevronsLeftIcon, {}) }) })), _jsx(PaginationItem, { children: _jsx(PaginationPrevious, { href: "#", "aria-disabled": page <= 1, className: cn(page <= 1 && "pointer-events-none opacity-50"), onClick: (e) => {
|
|
36
|
+
e.preventDefault();
|
|
37
|
+
goTo(page - 1);
|
|
38
|
+
} }) }), items.map((item) => item === "ellipsis-start" || item === "ellipsis-end" ? (_jsx(PaginationItem, { children: _jsx(PaginationEllipsis, {}) }, item)) : (_jsx(PaginationItem, { children: _jsx(PaginationLink, { href: "#", isActive: item === page, onClick: (e) => {
|
|
39
|
+
e.preventDefault();
|
|
40
|
+
goTo(item);
|
|
41
|
+
}, children: item }) }, item))), _jsx(PaginationItem, { children: _jsx(PaginationNext, { href: "#", "aria-disabled": page >= totalPages, className: cn(page >= totalPages && "pointer-events-none opacity-50"), onClick: (e) => {
|
|
42
|
+
e.preventDefault();
|
|
43
|
+
goTo(page + 1);
|
|
44
|
+
} }) }), showFirstLast && (_jsx(PaginationItem, { children: _jsx(PaginationLink, { href: "#", "aria-label": "Go to last page", size: "icon", "aria-disabled": page >= totalPages, className: cn(page >= totalPages && "pointer-events-none opacity-50"), onClick: (e) => {
|
|
45
|
+
e.preventDefault();
|
|
46
|
+
goTo(totalPages);
|
|
47
|
+
}, children: _jsx(ChevronsRightIcon, {}) }) }))] }) }));
|
|
48
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export type { PasswordInputProps } from "./password-input";
|
|
2
|
+
export { PasswordInput } from "./password-input";
|
|
3
|
+
export type { PasswordStrengthMeterProps } from "./password-strength-meter";
|
|
4
|
+
export { PasswordStrengthMeter } from "./password-strength-meter";
|
|
5
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/password-input/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAC;AAC5E,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
export type PasswordInputProps = Omit<React.ComponentProps<"input">, "type">;
|
|
3
|
+
/**
|
|
4
|
+
* A password `Input` with a show/hide visibility toggle.
|
|
5
|
+
*
|
|
6
|
+
* _Inspired from multiple sources, to make a consistent and reusable component._
|
|
7
|
+
* @see https://ui-x.junwen-k.dev/docs/components/password-input
|
|
8
|
+
* @see https://ktui.io/docs/toggle-password
|
|
9
|
+
*
|
|
10
|
+
* @version 0.1.0
|
|
11
|
+
* @author Forth
|
|
12
|
+
* @copyright 2026 Forth
|
|
13
|
+
*/
|
|
14
|
+
export declare function PasswordInput({ className, ...props }: PasswordInputProps): React.JSX.Element;
|
|
15
|
+
//# sourceMappingURL=password-input.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password-input.d.ts","sourceRoot":"","sources":["../../../src/components/password-input/password-input.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAM/B,MAAM,MAAM,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC;AAE7E;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,kBAAkB,qBA0BxE"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
3
|
+
import * as React from "react";
|
|
4
|
+
import { EyeIcon, EyeOffIcon } from "lucide-react";
|
|
5
|
+
import { Input } from "@forthtilliath/shadcn-ui/components/input";
|
|
6
|
+
import { cn } from "@forthtilliath/shadcn-ui/lib/utils";
|
|
7
|
+
/**
|
|
8
|
+
* A password `Input` with a show/hide visibility toggle.
|
|
9
|
+
*
|
|
10
|
+
* _Inspired from multiple sources, to make a consistent and reusable component._
|
|
11
|
+
* @see https://ui-x.junwen-k.dev/docs/components/password-input
|
|
12
|
+
* @see https://ktui.io/docs/toggle-password
|
|
13
|
+
*
|
|
14
|
+
* @version 0.1.0
|
|
15
|
+
* @author Forth
|
|
16
|
+
* @copyright 2026 Forth
|
|
17
|
+
*/
|
|
18
|
+
export function PasswordInput({ className, ...props }) {
|
|
19
|
+
const [visible, setVisible] = React.useState(false);
|
|
20
|
+
return (_jsxs("div", { className: cn("relative", className), children: [_jsx(Input, { type: visible ? "text" : "password", className: "w-full pr-9", ...props }), _jsx("button", { type: "button", onClick: () => {
|
|
21
|
+
setVisible((prev) => !prev);
|
|
22
|
+
}, "aria-label": visible ? "Hide password" : "Show password", className: "text-muted-foreground hover:text-foreground absolute inset-y-0 right-0 flex items-center px-3", children: visible ? (_jsx(EyeOffIcon, { className: "size-4" })) : (_jsx(EyeIcon, { className: "size-4" })) })] }));
|
|
23
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface PasswordStrengthMeterProps {
|
|
2
|
+
password: string;
|
|
3
|
+
className?: string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* A visual strength meter for a password, pairs with `PasswordInput` —
|
|
7
|
+
* scores against four common heuristics (length, case mix, digit, symbol)
|
|
8
|
+
* rather than a full password-strength library, since those checks are
|
|
9
|
+
* what every reference source actually surfaces to the user anyway.
|
|
10
|
+
*
|
|
11
|
+
* @see https://www.rigidui.com/docs/components/strength-meter
|
|
12
|
+
*
|
|
13
|
+
* @version 0.1.0
|
|
14
|
+
* @author Forth
|
|
15
|
+
* @copyright 2026 Forth
|
|
16
|
+
*/
|
|
17
|
+
export declare function PasswordStrengthMeter({ password, className, }: PasswordStrengthMeterProps): import("react").JSX.Element;
|
|
18
|
+
//# sourceMappingURL=password-strength-meter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"password-strength-meter.d.ts","sourceRoot":"","sources":["../../../src/components/password-input/password-strength-meter.tsx"],"names":[],"mappings":"AAEA,MAAM,WAAW,0BAA0B;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAwBD;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,QAAQ,EACR,SAAS,GACV,EAAE,0BAA0B,+BA6B5B"}
|