@puzzle-ui/ui 0.0.0-stage → 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/README.md +97 -2
- package/dist/LICENSE +21 -0
- package/dist/components/actions/button/button-content.cjs +41 -0
- package/dist/components/actions/button/button-content.cjs.map +1 -0
- package/dist/components/actions/button/button-content.js +41 -0
- package/dist/components/actions/button/button-content.js.map +1 -0
- package/dist/components/actions/button/button.css +191 -0
- package/dist/components/actions/button/button.types.d.cts +30 -0
- package/dist/components/actions/button/button.types.d.ts +30 -0
- package/dist/components/actions/button/index.cjs +80 -0
- package/dist/components/actions/button/index.cjs.map +1 -0
- package/dist/components/actions/button/index.d.cts +3 -0
- package/dist/components/actions/button/index.d.ts +3 -0
- package/dist/components/actions/button/index.js +80 -0
- package/dist/components/actions/button/index.js.map +1 -0
- package/dist/components/actions/button-group/button-group.css +64 -0
- package/dist/components/actions/button-group/index.cjs +25 -0
- package/dist/components/actions/button-group/index.cjs.map +1 -0
- package/dist/components/actions/button-group/index.d.cts +14 -0
- package/dist/components/actions/button-group/index.d.ts +14 -0
- package/dist/components/actions/button-group/index.js +25 -0
- package/dist/components/actions/button-group/index.js.map +1 -0
- package/dist/components/actions/toggle-group/index.cjs +124 -0
- package/dist/components/actions/toggle-group/index.cjs.map +1 -0
- package/dist/components/actions/toggle-group/index.d.cts +10 -0
- package/dist/components/actions/toggle-group/index.d.ts +10 -0
- package/dist/components/actions/toggle-group/index.js +124 -0
- package/dist/components/actions/toggle-group/index.js.map +1 -0
- package/dist/components/actions/toggle-group/toggle-group.css +67 -0
- package/dist/components/actions/toggle-group/toggle-group.types.d.cts +54 -0
- package/dist/components/actions/toggle-group/toggle-group.types.d.ts +54 -0
- package/dist/components/data-display/alert/alert.css +128 -0
- package/dist/components/data-display/alert/alert.types.d.cts +14 -0
- package/dist/components/data-display/alert/alert.types.d.ts +14 -0
- package/dist/components/data-display/alert/alert.utils.cjs +11 -0
- package/dist/components/data-display/alert/alert.utils.cjs.map +1 -0
- package/dist/components/data-display/alert/alert.utils.js +11 -0
- package/dist/components/data-display/alert/alert.utils.js.map +1 -0
- package/dist/components/data-display/alert/index.cjs +103 -0
- package/dist/components/data-display/alert/index.cjs.map +1 -0
- package/dist/components/data-display/alert/index.d.cts +3 -0
- package/dist/components/data-display/alert/index.d.ts +3 -0
- package/dist/components/data-display/alert/index.js +103 -0
- package/dist/components/data-display/alert/index.js.map +1 -0
- package/dist/components/data-display/avatar/avatar.css +30 -0
- package/dist/components/data-display/avatar/index.cjs +42 -0
- package/dist/components/data-display/avatar/index.cjs.map +1 -0
- package/dist/components/data-display/avatar/index.d.cts +10 -0
- package/dist/components/data-display/avatar/index.d.ts +10 -0
- package/dist/components/data-display/avatar/index.js +42 -0
- package/dist/components/data-display/avatar/index.js.map +1 -0
- package/dist/components/data-display/badge/badge.css +91 -0
- package/dist/components/data-display/badge/index.cjs +31 -0
- package/dist/components/data-display/badge/index.cjs.map +1 -0
- package/dist/components/data-display/badge/index.d.cts +18 -0
- package/dist/components/data-display/badge/index.d.ts +18 -0
- package/dist/components/data-display/badge/index.js +31 -0
- package/dist/components/data-display/badge/index.js.map +1 -0
- package/dist/components/data-display/card/card.css +164 -0
- package/dist/components/data-display/card/index.cjs +42 -0
- package/dist/components/data-display/card/index.cjs.map +1 -0
- package/dist/components/data-display/card/index.d.cts +29 -0
- package/dist/components/data-display/card/index.d.ts +29 -0
- package/dist/components/data-display/card/index.js +35 -0
- package/dist/components/data-display/card/index.js.map +1 -0
- package/dist/components/data-display/image/image.css +80 -0
- package/dist/components/data-display/image/image.types.d.cts +154 -0
- package/dist/components/data-display/image/image.types.d.ts +154 -0
- package/dist/components/data-display/image/image.utils.cjs +55 -0
- package/dist/components/data-display/image/image.utils.cjs.map +1 -0
- package/dist/components/data-display/image/image.utils.js +51 -0
- package/dist/components/data-display/image/image.utils.js.map +1 -0
- package/dist/components/data-display/image/index.cjs +176 -0
- package/dist/components/data-display/image/index.cjs.map +1 -0
- package/dist/components/data-display/image/index.d.cts +3 -0
- package/dist/components/data-display/image/index.d.ts +3 -0
- package/dist/components/data-display/image/index.js +176 -0
- package/dist/components/data-display/image/index.js.map +1 -0
- package/dist/components/data-display/image/use-image-state.cjs +54 -0
- package/dist/components/data-display/image/use-image-state.cjs.map +1 -0
- package/dist/components/data-display/image/use-image-state.js +54 -0
- package/dist/components/data-display/image/use-image-state.js.map +1 -0
- package/dist/components/data-display/paper/index.cjs +16 -0
- package/dist/components/data-display/paper/index.cjs.map +1 -0
- package/dist/components/data-display/paper/index.d.cts +8 -0
- package/dist/components/data-display/paper/index.d.ts +8 -0
- package/dist/components/data-display/paper/index.js +16 -0
- package/dist/components/data-display/paper/index.js.map +1 -0
- package/dist/components/data-display/paper/paper.css +40 -0
- package/dist/components/data-display/progress/circular-progress.cjs +75 -0
- package/dist/components/data-display/progress/circular-progress.cjs.map +1 -0
- package/dist/components/data-display/progress/circular-progress.css +21 -0
- package/dist/components/data-display/progress/circular-progress.d.cts +9 -0
- package/dist/components/data-display/progress/circular-progress.d.ts +9 -0
- package/dist/components/data-display/progress/circular-progress.js +75 -0
- package/dist/components/data-display/progress/circular-progress.js.map +1 -0
- package/dist/components/data-display/progress/linear-progress.cjs +32 -0
- package/dist/components/data-display/progress/linear-progress.cjs.map +1 -0
- package/dist/components/data-display/progress/linear-progress.css +39 -0
- package/dist/components/data-display/progress/linear-progress.d.cts +5 -0
- package/dist/components/data-display/progress/linear-progress.d.ts +5 -0
- package/dist/components/data-display/progress/linear-progress.js +32 -0
- package/dist/components/data-display/progress/linear-progress.js.map +1 -0
- package/dist/components/data-display/progress/types.d.cts +5 -0
- package/dist/components/data-display/progress/types.d.ts +5 -0
- package/dist/components/data-display/progress/utils.cjs +16 -0
- package/dist/components/data-display/progress/utils.cjs.map +1 -0
- package/dist/components/data-display/progress/utils.js +15 -0
- package/dist/components/data-display/progress/utils.js.map +1 -0
- package/dist/components/data-display/skeleton/index.cjs +18 -0
- package/dist/components/data-display/skeleton/index.cjs.map +1 -0
- package/dist/components/data-display/skeleton/index.d.cts +10 -0
- package/dist/components/data-display/skeleton/index.d.ts +10 -0
- package/dist/components/data-display/skeleton/index.js +18 -0
- package/dist/components/data-display/skeleton/index.js.map +1 -0
- package/dist/components/data-display/skeleton/skeleton.css +47 -0
- package/dist/components/editors/text-editor/editor.cjs +620 -0
- package/dist/components/editors/text-editor/editor.cjs.map +1 -0
- package/dist/components/editors/text-editor/editor.d.cts +1 -0
- package/dist/components/editors/text-editor/editor.d.ts +1 -0
- package/dist/components/editors/text-editor/editor.js +620 -0
- package/dist/components/editors/text-editor/editor.js.map +1 -0
- package/dist/components/editors/text-editor/index.cjs +39 -0
- package/dist/components/editors/text-editor/index.cjs.map +1 -0
- package/dist/components/editors/text-editor/index.d.cts +13 -0
- package/dist/components/editors/text-editor/index.d.ts +13 -0
- package/dist/components/editors/text-editor/index.js +38 -0
- package/dist/components/editors/text-editor/index.js.map +1 -0
- package/dist/components/editors/text-editor/text-document.cjs +406 -0
- package/dist/components/editors/text-editor/text-document.cjs.map +1 -0
- package/dist/components/editors/text-editor/text-document.js +391 -0
- package/dist/components/editors/text-editor/text-document.js.map +1 -0
- package/dist/components/editors/text-editor/text-editor-toolbar.cjs +251 -0
- package/dist/components/editors/text-editor/text-editor-toolbar.cjs.map +1 -0
- package/dist/components/editors/text-editor/text-editor-toolbar.css +16 -0
- package/dist/components/editors/text-editor/text-editor-toolbar.d.cts +7 -0
- package/dist/components/editors/text-editor/text-editor-toolbar.d.ts +7 -0
- package/dist/components/editors/text-editor/text-editor-toolbar.js +251 -0
- package/dist/components/editors/text-editor/text-editor-toolbar.js.map +1 -0
- package/dist/components/editors/text-editor/text-editor.css +116 -0
- package/dist/components/editors/text-editor/text-editor.types.d.cts +37 -0
- package/dist/components/editors/text-editor/text-editor.types.d.ts +37 -0
- package/dist/components/editors/text-editor/text-parser.cjs +262 -0
- package/dist/components/editors/text-editor/text-parser.cjs.map +1 -0
- package/dist/components/editors/text-editor/text-parser.js +261 -0
- package/dist/components/editors/text-editor/text-parser.js.map +1 -0
- package/dist/components/editors/text-editor/text-renderer.cjs +85 -0
- package/dist/components/editors/text-editor/text-renderer.cjs.map +1 -0
- package/dist/components/editors/text-editor/text-renderer.d.cts +7 -0
- package/dist/components/editors/text-editor/text-renderer.d.ts +7 -0
- package/dist/components/editors/text-editor/text-renderer.js +85 -0
- package/dist/components/editors/text-editor/text-renderer.js.map +1 -0
- package/dist/components/forms/autocomplete/autocomplete.css +384 -0
- package/dist/components/forms/autocomplete/autocomplete.types.d.cts +86 -0
- package/dist/components/forms/autocomplete/autocomplete.types.d.ts +86 -0
- package/dist/components/forms/autocomplete/autocomplete.utils.cjs +47 -0
- package/dist/components/forms/autocomplete/autocomplete.utils.cjs.map +1 -0
- package/dist/components/forms/autocomplete/autocomplete.utils.js +44 -0
- package/dist/components/forms/autocomplete/autocomplete.utils.js.map +1 -0
- package/dist/components/forms/autocomplete/index.cjs +532 -0
- package/dist/components/forms/autocomplete/index.cjs.map +1 -0
- package/dist/components/forms/autocomplete/index.d.cts +3 -0
- package/dist/components/forms/autocomplete/index.d.ts +3 -0
- package/dist/components/forms/autocomplete/index.js +532 -0
- package/dist/components/forms/autocomplete/index.js.map +1 -0
- package/dist/components/forms/checkbox/checkbox.css +146 -0
- package/dist/components/forms/checkbox/index.cjs +80 -0
- package/dist/components/forms/checkbox/index.cjs.map +1 -0
- package/dist/components/forms/checkbox/index.d.cts +20 -0
- package/dist/components/forms/checkbox/index.d.ts +20 -0
- package/dist/components/forms/checkbox/index.js +80 -0
- package/dist/components/forms/checkbox/index.js.map +1 -0
- package/dist/components/forms/date-picker/date-picker.css +478 -0
- package/dist/components/forms/date-picker/date-picker.types.d.cts +75 -0
- package/dist/components/forms/date-picker/date-picker.types.d.ts +75 -0
- package/dist/components/forms/date-picker/date-picker.utils.cjs +76 -0
- package/dist/components/forms/date-picker/date-picker.utils.cjs.map +1 -0
- package/dist/components/forms/date-picker/date-picker.utils.js +64 -0
- package/dist/components/forms/date-picker/date-picker.utils.js.map +1 -0
- package/dist/components/forms/date-picker/index.cjs +572 -0
- package/dist/components/forms/date-picker/index.cjs.map +1 -0
- package/dist/components/forms/date-picker/index.d.cts +3 -0
- package/dist/components/forms/date-picker/index.d.ts +3 -0
- package/dist/components/forms/date-picker/index.js +572 -0
- package/dist/components/forms/date-picker/index.js.map +1 -0
- package/dist/components/forms/file-upload/file-upload.css +290 -0
- package/dist/components/forms/file-upload/file-upload.types.d.cts +51 -0
- package/dist/components/forms/file-upload/file-upload.types.d.ts +51 -0
- package/dist/components/forms/file-upload/file-upload.utils.cjs +76 -0
- package/dist/components/forms/file-upload/file-upload.utils.cjs.map +1 -0
- package/dist/components/forms/file-upload/file-upload.utils.js +72 -0
- package/dist/components/forms/file-upload/file-upload.utils.js.map +1 -0
- package/dist/components/forms/file-upload/index.cjs +346 -0
- package/dist/components/forms/file-upload/index.cjs.map +1 -0
- package/dist/components/forms/file-upload/index.d.cts +3 -0
- package/dist/components/forms/file-upload/index.d.ts +3 -0
- package/dist/components/forms/file-upload/index.js +346 -0
- package/dist/components/forms/file-upload/index.js.map +1 -0
- package/dist/components/forms/form-field/form-field-state.cjs +25 -0
- package/dist/components/forms/form-field/form-field-state.cjs.map +1 -0
- package/dist/components/forms/form-field/form-field-state.js +25 -0
- package/dist/components/forms/form-field/form-field-state.js.map +1 -0
- package/dist/components/forms/form-field/form-field.css +44 -0
- package/dist/components/forms/form-field/index.cjs +61 -0
- package/dist/components/forms/form-field/index.cjs.map +1 -0
- package/dist/components/forms/form-field/index.d.cts +23 -0
- package/dist/components/forms/form-field/index.d.ts +23 -0
- package/dist/components/forms/form-field/index.js +61 -0
- package/dist/components/forms/form-field/index.js.map +1 -0
- package/dist/components/forms/input/index.d.cts +4 -0
- package/dist/components/forms/input/index.d.ts +4 -0
- package/dist/components/forms/input/input.css +153 -0
- package/dist/components/forms/input/number-input.cjs +192 -0
- package/dist/components/forms/input/number-input.cjs.map +1 -0
- package/dist/components/forms/input/number-input.d.cts +20 -0
- package/dist/components/forms/input/number-input.d.ts +20 -0
- package/dist/components/forms/input/number-input.js +192 -0
- package/dist/components/forms/input/number-input.js.map +1 -0
- package/dist/components/forms/input/text-area-input.cjs +47 -0
- package/dist/components/forms/input/text-area-input.cjs.map +1 -0
- package/dist/components/forms/input/text-area-input.d.cts +8 -0
- package/dist/components/forms/input/text-area-input.d.ts +8 -0
- package/dist/components/forms/input/text-area-input.js +47 -0
- package/dist/components/forms/input/text-area-input.js.map +1 -0
- package/dist/components/forms/input/text-input.cjs +47 -0
- package/dist/components/forms/input/text-input.cjs.map +1 -0
- package/dist/components/forms/input/text-input.d.cts +9 -0
- package/dist/components/forms/input/text-input.d.ts +9 -0
- package/dist/components/forms/input/text-input.js +47 -0
- package/dist/components/forms/input/text-input.js.map +1 -0
- package/dist/components/forms/label/index.cjs +26 -0
- package/dist/components/forms/label/index.cjs.map +1 -0
- package/dist/components/forms/label/index.d.cts +8 -0
- package/dist/components/forms/label/index.d.ts +8 -0
- package/dist/components/forms/label/index.js +26 -0
- package/dist/components/forms/label/index.js.map +1 -0
- package/dist/components/forms/label/label.css +22 -0
- package/dist/components/forms/radio-group/index.cjs +226 -0
- package/dist/components/forms/radio-group/index.cjs.map +1 -0
- package/dist/components/forms/radio-group/index.d.cts +5 -0
- package/dist/components/forms/radio-group/index.d.ts +5 -0
- package/dist/components/forms/radio-group/index.js +225 -0
- package/dist/components/forms/radio-group/index.js.map +1 -0
- package/dist/components/forms/radio-group/radio-group.css +222 -0
- package/dist/components/forms/radio-group/radio-group.types.d.cts +51 -0
- package/dist/components/forms/radio-group/radio-group.types.d.ts +51 -0
- package/dist/components/forms/radio-group/radio-group.utils.cjs +22 -0
- package/dist/components/forms/radio-group/radio-group.utils.cjs.map +1 -0
- package/dist/components/forms/radio-group/radio-group.utils.js +21 -0
- package/dist/components/forms/radio-group/radio-group.utils.js.map +1 -0
- package/dist/components/forms/select/index.cjs +468 -0
- package/dist/components/forms/select/index.cjs.map +1 -0
- package/dist/components/forms/select/index.d.cts +112 -0
- package/dist/components/forms/select/index.d.ts +112 -0
- package/dist/components/forms/select/index.js +468 -0
- package/dist/components/forms/select/index.js.map +1 -0
- package/dist/components/forms/select/select.css +363 -0
- package/dist/components/forms/slider/index.cjs +93 -0
- package/dist/components/forms/slider/index.cjs.map +1 -0
- package/dist/components/forms/slider/index.d.cts +37 -0
- package/dist/components/forms/slider/index.d.ts +37 -0
- package/dist/components/forms/slider/index.js +93 -0
- package/dist/components/forms/slider/index.js.map +1 -0
- package/dist/components/forms/slider/slider.css +202 -0
- package/dist/components/forms/stepper/index.cjs +113 -0
- package/dist/components/forms/stepper/index.cjs.map +1 -0
- package/dist/components/forms/stepper/index.d.cts +48 -0
- package/dist/components/forms/stepper/index.d.ts +48 -0
- package/dist/components/forms/stepper/index.js +113 -0
- package/dist/components/forms/stepper/index.js.map +1 -0
- package/dist/components/forms/stepper/stepper.css +241 -0
- package/dist/components/forms/switch/index.cjs +45 -0
- package/dist/components/forms/switch/index.cjs.map +1 -0
- package/dist/components/forms/switch/index.d.cts +11 -0
- package/dist/components/forms/switch/index.d.ts +11 -0
- package/dist/components/forms/switch/index.js +45 -0
- package/dist/components/forms/switch/index.js.map +1 -0
- package/dist/components/forms/switch/switch.css +142 -0
- package/dist/components/layout/app-bar/app-bar.css +197 -0
- package/dist/components/layout/app-bar/index.cjs +150 -0
- package/dist/components/layout/app-bar/index.cjs.map +1 -0
- package/dist/components/layout/app-bar/index.d.cts +21 -0
- package/dist/components/layout/app-bar/index.d.ts +21 -0
- package/dist/components/layout/app-bar/index.js +150 -0
- package/dist/components/layout/app-bar/index.js.map +1 -0
- package/dist/components/layout/background/background.css +160 -0
- package/dist/components/layout/background/index.cjs +34 -0
- package/dist/components/layout/background/index.cjs.map +1 -0
- package/dist/components/layout/background/index.d.cts +23 -0
- package/dist/components/layout/background/index.d.ts +23 -0
- package/dist/components/layout/background/index.js +34 -0
- package/dist/components/layout/background/index.js.map +1 -0
- package/dist/components/layout/bottom-navigation/bottom-navigation.css +108 -0
- package/dist/components/layout/bottom-navigation/index.cjs +51 -0
- package/dist/components/layout/bottom-navigation/index.cjs.map +1 -0
- package/dist/components/layout/bottom-navigation/index.d.cts +19 -0
- package/dist/components/layout/bottom-navigation/index.d.ts +19 -0
- package/dist/components/layout/bottom-navigation/index.js +50 -0
- package/dist/components/layout/bottom-navigation/index.js.map +1 -0
- package/dist/components/layout/breadcrumbs/breadcrumbs.css +80 -0
- package/dist/components/layout/breadcrumbs/index.cjs +38 -0
- package/dist/components/layout/breadcrumbs/index.cjs.map +1 -0
- package/dist/components/layout/breadcrumbs/index.d.cts +18 -0
- package/dist/components/layout/breadcrumbs/index.d.ts +18 -0
- package/dist/components/layout/breadcrumbs/index.js +38 -0
- package/dist/components/layout/breadcrumbs/index.js.map +1 -0
- package/dist/components/layout/collapsable-sidebar/collapsable-sidebar.css +240 -0
- package/dist/components/layout/collapsable-sidebar/index.cjs +107 -0
- package/dist/components/layout/collapsable-sidebar/index.cjs.map +1 -0
- package/dist/components/layout/collapsable-sidebar/index.d.cts +35 -0
- package/dist/components/layout/collapsable-sidebar/index.d.ts +35 -0
- package/dist/components/layout/collapsable-sidebar/index.js +107 -0
- package/dist/components/layout/collapsable-sidebar/index.js.map +1 -0
- package/dist/components/layout/container/container.css +24 -0
- package/dist/components/layout/container/container.utils.cjs +11 -0
- package/dist/components/layout/container/container.utils.cjs.map +1 -0
- package/dist/components/layout/container/container.utils.d.cts +1 -0
- package/dist/components/layout/container/container.utils.d.ts +1 -0
- package/dist/components/layout/container/container.utils.js +11 -0
- package/dist/components/layout/container/container.utils.js.map +1 -0
- package/dist/components/layout/container/index.cjs +17 -0
- package/dist/components/layout/container/index.cjs.map +1 -0
- package/dist/components/layout/container/index.d.cts +11 -0
- package/dist/components/layout/container/index.d.ts +11 -0
- package/dist/components/layout/container/index.js +17 -0
- package/dist/components/layout/container/index.js.map +1 -0
- package/dist/components/layout/page-layout/index.cjs +80 -0
- package/dist/components/layout/page-layout/index.cjs.map +1 -0
- package/dist/components/layout/page-layout/index.d.cts +61 -0
- package/dist/components/layout/page-layout/index.d.ts +61 -0
- package/dist/components/layout/page-layout/index.js +80 -0
- package/dist/components/layout/page-layout/index.js.map +1 -0
- package/dist/components/layout/page-layout/page-layout.css +88 -0
- package/dist/components/layout/resizable-panels/index.cjs +226 -0
- package/dist/components/layout/resizable-panels/index.cjs.map +1 -0
- package/dist/components/layout/resizable-panels/index.d.cts +59 -0
- package/dist/components/layout/resizable-panels/index.d.ts +59 -0
- package/dist/components/layout/resizable-panels/index.js +224 -0
- package/dist/components/layout/resizable-panels/index.js.map +1 -0
- package/dist/components/layout/resizable-panels/resizable-panels.css +121 -0
- package/dist/components/layout/resizable-panels/resizable-panels.utils.cjs +107 -0
- package/dist/components/layout/resizable-panels/resizable-panels.utils.cjs.map +1 -0
- package/dist/components/layout/resizable-panels/resizable-panels.utils.js +105 -0
- package/dist/components/layout/resizable-panels/resizable-panels.utils.js.map +1 -0
- package/dist/components/layout/section/index.cjs +15 -0
- package/dist/components/layout/section/index.cjs.map +1 -0
- package/dist/components/layout/section/index.d.cts +2 -0
- package/dist/components/layout/section/index.d.ts +2 -0
- package/dist/components/layout/section/index.js +15 -0
- package/dist/components/layout/section/index.js.map +1 -0
- package/dist/components/layout/section/section.css +71 -0
- package/dist/components/layout/section/types.d.cts +13 -0
- package/dist/components/layout/section/types.d.ts +13 -0
- package/dist/components/layout/section-stack/index.cjs +29 -0
- package/dist/components/layout/section-stack/index.cjs.map +1 -0
- package/dist/components/layout/section-stack/index.d.cts +8 -0
- package/dist/components/layout/section-stack/index.d.ts +8 -0
- package/dist/components/layout/section-stack/index.js +29 -0
- package/dist/components/layout/section-stack/index.js.map +1 -0
- package/dist/components/layout/sidebar/index.cjs +16 -0
- package/dist/components/layout/sidebar/index.cjs.map +1 -0
- package/dist/components/layout/sidebar/index.d.cts +7 -0
- package/dist/components/layout/sidebar/index.d.ts +7 -0
- package/dist/components/layout/sidebar/index.js +16 -0
- package/dist/components/layout/sidebar/index.js.map +1 -0
- package/dist/components/layout/sidebar/sidebar.css +21 -0
- package/dist/components/layout/stack/index.cjs +30 -0
- package/dist/components/layout/stack/index.cjs.map +1 -0
- package/dist/components/layout/stack/index.d.cts +31 -0
- package/dist/components/layout/stack/index.d.ts +31 -0
- package/dist/components/layout/stack/index.js +30 -0
- package/dist/components/layout/stack/index.js.map +1 -0
- package/dist/components/layout/stack/stack.css +303 -0
- package/dist/components/navigation/accordion/accordion.css +97 -0
- package/dist/components/navigation/accordion/index.cjs +107 -0
- package/dist/components/navigation/accordion/index.cjs.map +1 -0
- package/dist/components/navigation/accordion/index.d.cts +48 -0
- package/dist/components/navigation/accordion/index.d.ts +48 -0
- package/dist/components/navigation/accordion/index.js +107 -0
- package/dist/components/navigation/accordion/index.js.map +1 -0
- package/dist/components/navigation/carousel/carousel.css +283 -0
- package/dist/components/navigation/carousel/controller.cjs +46 -0
- package/dist/components/navigation/carousel/controller.cjs.map +1 -0
- package/dist/components/navigation/carousel/controller.d.cts +16 -0
- package/dist/components/navigation/carousel/controller.d.ts +16 -0
- package/dist/components/navigation/carousel/controller.js +45 -0
- package/dist/components/navigation/carousel/controller.js.map +1 -0
- package/dist/components/navigation/carousel/index.cjs +494 -0
- package/dist/components/navigation/carousel/index.cjs.map +1 -0
- package/dist/components/navigation/carousel/index.d.cts +27 -0
- package/dist/components/navigation/carousel/index.d.ts +27 -0
- package/dist/components/navigation/carousel/index.js +494 -0
- package/dist/components/navigation/carousel/index.js.map +1 -0
- package/dist/components/navigation/link/index.cjs +40 -0
- package/dist/components/navigation/link/index.cjs.map +1 -0
- package/dist/components/navigation/link/index.d.cts +3 -0
- package/dist/components/navigation/link/index.d.ts +3 -0
- package/dist/components/navigation/link/index.js +40 -0
- package/dist/components/navigation/link/index.js.map +1 -0
- package/dist/components/navigation/link/link.css +31 -0
- package/dist/components/navigation/link/types.d.cts +12 -0
- package/dist/components/navigation/link/types.d.ts +12 -0
- package/dist/components/navigation/tabs/index.cjs +111 -0
- package/dist/components/navigation/tabs/index.cjs.map +1 -0
- package/dist/components/navigation/tabs/index.d.cts +30 -0
- package/dist/components/navigation/tabs/index.d.ts +30 -0
- package/dist/components/navigation/tabs/index.js +110 -0
- package/dist/components/navigation/tabs/index.js.map +1 -0
- package/dist/components/navigation/tabs/tabs.css +216 -0
- package/dist/components/navigation/tree-view/index.cjs +455 -0
- package/dist/components/navigation/tree-view/index.cjs.map +1 -0
- package/dist/components/navigation/tree-view/index.d.cts +96 -0
- package/dist/components/navigation/tree-view/index.d.ts +96 -0
- package/dist/components/navigation/tree-view/index.js +455 -0
- package/dist/components/navigation/tree-view/index.js.map +1 -0
- package/dist/components/navigation/tree-view/tree-view.css +258 -0
- package/dist/components/overlays/backdrop/backdrop.css +10 -0
- package/dist/components/overlays/backdrop/index.cjs +70 -0
- package/dist/components/overlays/backdrop/index.cjs.map +1 -0
- package/dist/components/overlays/backdrop/index.d.cts +12 -0
- package/dist/components/overlays/backdrop/index.d.ts +12 -0
- package/dist/components/overlays/backdrop/index.js +70 -0
- package/dist/components/overlays/backdrop/index.js.map +1 -0
- package/dist/components/overlays/command/command.css +154 -0
- package/dist/components/overlays/command/command.types.d.cts +36 -0
- package/dist/components/overlays/command/command.types.d.ts +36 -0
- package/dist/components/overlays/command/command.utils.cjs +39 -0
- package/dist/components/overlays/command/command.utils.cjs.map +1 -0
- package/dist/components/overlays/command/command.utils.js +35 -0
- package/dist/components/overlays/command/command.utils.js.map +1 -0
- package/dist/components/overlays/command/index.cjs +274 -0
- package/dist/components/overlays/command/index.cjs.map +1 -0
- package/dist/components/overlays/command/index.d.cts +4 -0
- package/dist/components/overlays/command/index.d.ts +4 -0
- package/dist/components/overlays/command/index.js +273 -0
- package/dist/components/overlays/command/index.js.map +1 -0
- package/dist/components/overlays/dialog/dialog.css +121 -0
- package/dist/components/overlays/dialog/index.cjs +80 -0
- package/dist/components/overlays/dialog/index.cjs.map +1 -0
- package/dist/components/overlays/dialog/index.d.cts +35 -0
- package/dist/components/overlays/dialog/index.d.ts +35 -0
- package/dist/components/overlays/dialog/index.js +80 -0
- package/dist/components/overlays/dialog/index.js.map +1 -0
- package/dist/components/overlays/drawer/drawer.css +133 -0
- package/dist/components/overlays/drawer/index.cjs +90 -0
- package/dist/components/overlays/drawer/index.cjs.map +1 -0
- package/dist/components/overlays/drawer/index.d.cts +11 -0
- package/dist/components/overlays/drawer/index.d.ts +11 -0
- package/dist/components/overlays/drawer/index.js +90 -0
- package/dist/components/overlays/drawer/index.js.map +1 -0
- package/dist/components/overlays/drawer/use-resize-bar.cjs +152 -0
- package/dist/components/overlays/drawer/use-resize-bar.cjs.map +1 -0
- package/dist/components/overlays/drawer/use-resize-bar.js +152 -0
- package/dist/components/overlays/drawer/use-resize-bar.js.map +1 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-content.cjs +132 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-content.cjs.map +1 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-content.d.cts +3 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-content.d.ts +3 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-content.js +132 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-content.js.map +1 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-items.cjs +136 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-items.cjs.map +1 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-items.d.cts +7 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-items.d.ts +7 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-items.js +132 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-items.js.map +1 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-radio.cjs +76 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-radio.cjs.map +1 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-radio.d.cts +4 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-radio.d.ts +4 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-radio.js +75 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-radio.js.map +1 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-trigger.cjs +96 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-trigger.cjs.map +1 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-trigger.d.cts +3 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-trigger.d.ts +3 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-trigger.js +96 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu-trigger.js.map +1 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu.cjs +111 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu.cjs.map +1 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu.context.cjs +21 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu.context.cjs.map +1 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu.context.js +18 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu.context.js.map +1 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu.css +127 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu.d.cts +3 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu.d.ts +3 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu.js +111 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu.js.map +1 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu.types.d.cts +66 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu.types.d.ts +66 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu.utils.cjs +44 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu.utils.cjs.map +1 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu.utils.js +39 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu.utils.js.map +1 -0
- package/dist/components/overlays/dropdown-menu/index.cjs +31 -0
- package/dist/components/overlays/dropdown-menu/index.cjs.map +1 -0
- package/dist/components/overlays/dropdown-menu/index.d.cts +19 -0
- package/dist/components/overlays/dropdown-menu/index.d.ts +19 -0
- package/dist/components/overlays/dropdown-menu/index.js +22 -0
- package/dist/components/overlays/dropdown-menu/index.js.map +1 -0
- package/dist/components/overlays/floating-position/calculate-position.cjs +94 -0
- package/dist/components/overlays/floating-position/calculate-position.cjs.map +1 -0
- package/dist/components/overlays/floating-position/calculate-position.js +89 -0
- package/dist/components/overlays/floating-position/calculate-position.js.map +1 -0
- package/dist/components/overlays/floating-position/use-floating-position.cjs +89 -0
- package/dist/components/overlays/floating-position/use-floating-position.cjs.map +1 -0
- package/dist/components/overlays/floating-position/use-floating-position.js +89 -0
- package/dist/components/overlays/floating-position/use-floating-position.js.map +1 -0
- package/dist/components/overlays/notification/index.cjs +142 -0
- package/dist/components/overlays/notification/index.cjs.map +1 -0
- package/dist/components/overlays/notification/index.d.cts +16 -0
- package/dist/components/overlays/notification/index.d.ts +16 -0
- package/dist/components/overlays/notification/index.js +139 -0
- package/dist/components/overlays/notification/index.js.map +1 -0
- package/dist/components/overlays/notification/notification-provider.cjs +69 -0
- package/dist/components/overlays/notification/notification-provider.cjs.map +1 -0
- package/dist/components/overlays/notification/notification-provider.d.cts +3 -0
- package/dist/components/overlays/notification/notification-provider.d.ts +3 -0
- package/dist/components/overlays/notification/notification-provider.js +68 -0
- package/dist/components/overlays/notification/notification-provider.js.map +1 -0
- package/dist/components/overlays/notification/notification.css +172 -0
- package/dist/components/overlays/notification/notification.types.d.cts +41 -0
- package/dist/components/overlays/notification/notification.types.d.ts +41 -0
- package/dist/components/overlays/notification/notification.utils.cjs +23 -0
- package/dist/components/overlays/notification/notification.utils.cjs.map +1 -0
- package/dist/components/overlays/notification/notification.utils.js +22 -0
- package/dist/components/overlays/notification/notification.utils.js.map +1 -0
- package/dist/components/overlays/notification/use-notification.cjs +12 -0
- package/dist/components/overlays/notification/use-notification.cjs.map +1 -0
- package/dist/components/overlays/notification/use-notification.d.cts +3 -0
- package/dist/components/overlays/notification/use-notification.d.ts +3 -0
- package/dist/components/overlays/notification/use-notification.js +12 -0
- package/dist/components/overlays/notification/use-notification.js.map +1 -0
- package/dist/components/overlays/overlay-stack/index.cjs +195 -0
- package/dist/components/overlays/overlay-stack/index.cjs.map +1 -0
- package/dist/components/overlays/overlay-stack/index.js +193 -0
- package/dist/components/overlays/overlay-stack/index.js.map +1 -0
- package/dist/components/overlays/popout/index.cjs +196 -0
- package/dist/components/overlays/popout/index.cjs.map +1 -0
- package/dist/components/overlays/popout/index.d.cts +26 -0
- package/dist/components/overlays/popout/index.d.ts +26 -0
- package/dist/components/overlays/popout/index.js +195 -0
- package/dist/components/overlays/popout/index.js.map +1 -0
- package/dist/components/overlays/popout/popout.css +15 -0
- package/dist/components/overlays/popover/index.cjs +163 -0
- package/dist/components/overlays/popover/index.cjs.map +1 -0
- package/dist/components/overlays/popover/index.d.cts +28 -0
- package/dist/components/overlays/popover/index.d.ts +28 -0
- package/dist/components/overlays/popover/index.js +163 -0
- package/dist/components/overlays/popover/index.js.map +1 -0
- package/dist/components/overlays/popover/popover.css +56 -0
- package/dist/components/overlays/portal/index.cjs +33 -0
- package/dist/components/overlays/portal/index.cjs.map +1 -0
- package/dist/components/overlays/portal/index.d.cts +15 -0
- package/dist/components/overlays/portal/index.d.ts +15 -0
- package/dist/components/overlays/portal/index.js +33 -0
- package/dist/components/overlays/portal/index.js.map +1 -0
- package/dist/components/overlays/portal/target.cjs +17 -0
- package/dist/components/overlays/portal/target.cjs.map +1 -0
- package/dist/components/overlays/portal/target.css +3 -0
- package/dist/components/overlays/portal/target.d.cts +7 -0
- package/dist/components/overlays/portal/target.d.ts +7 -0
- package/dist/components/overlays/portal/target.js +17 -0
- package/dist/components/overlays/portal/target.js.map +1 -0
- package/dist/components/overlays/tooltip/index.cjs +71 -0
- package/dist/components/overlays/tooltip/index.cjs.map +1 -0
- package/dist/components/overlays/tooltip/index.d.cts +24 -0
- package/dist/components/overlays/tooltip/index.d.ts +24 -0
- package/dist/components/overlays/tooltip/index.js +71 -0
- package/dist/components/overlays/tooltip/index.js.map +1 -0
- package/dist/components/overlays/tooltip/tooltip.css +67 -0
- package/dist/components/typography/heading.cjs +14 -0
- package/dist/components/typography/heading.cjs.map +1 -0
- package/dist/components/typography/heading.d.cts +11 -0
- package/dist/components/typography/heading.d.ts +11 -0
- package/dist/components/typography/heading.js +14 -0
- package/dist/components/typography/heading.js.map +1 -0
- package/dist/components/typography/text.cjs +14 -0
- package/dist/components/typography/text.cjs.map +1 -0
- package/dist/components/typography/text.d.cts +12 -0
- package/dist/components/typography/text.d.ts +12 -0
- package/dist/components/typography/text.js +14 -0
- package/dist/components/typography/text.js.map +1 -0
- package/dist/components/utilities/preview/highlight.cjs +79 -0
- package/dist/components/utilities/preview/highlight.cjs.map +1 -0
- package/dist/components/utilities/preview/highlight.js +79 -0
- package/dist/components/utilities/preview/highlight.js.map +1 -0
- package/dist/components/utilities/preview/index.cjs +391 -0
- package/dist/components/utilities/preview/index.cjs.map +1 -0
- package/dist/components/utilities/preview/index.d.cts +20 -0
- package/dist/components/utilities/preview/index.d.ts +20 -0
- package/dist/components/utilities/preview/index.js +391 -0
- package/dist/components/utilities/preview/index.js.map +1 -0
- package/dist/components/utilities/preview/preview.css +268 -0
- package/dist/components/utilities/scroll-lock/index.cjs +124 -0
- package/dist/components/utilities/scroll-lock/index.cjs.map +1 -0
- package/dist/components/utilities/scroll-lock/index.d.cts +6 -0
- package/dist/components/utilities/scroll-lock/index.d.ts +6 -0
- package/dist/components/utilities/scroll-lock/index.js +124 -0
- package/dist/components/utilities/scroll-lock/index.js.map +1 -0
- package/dist/components/utilities/transition/index.cjs +171 -0
- package/dist/components/utilities/transition/index.cjs.map +1 -0
- package/dist/components/utilities/transition/index.d.cts +27 -0
- package/dist/components/utilities/transition/index.d.ts +27 -0
- package/dist/components/utilities/transition/index.js +171 -0
- package/dist/components/utilities/transition/index.js.map +1 -0
- package/dist/components/utilities/transition/transition.css +130 -0
- package/dist/index.cjs +159 -0
- package/dist/index.d.cts +86 -0
- package/dist/index.d.ts +86 -0
- package/dist/index.js +70 -0
- package/package.json +65 -4
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import "./slider.css";
|
|
3
|
+
import { cn } from "@puzzle-ui/core";
|
|
4
|
+
import { useId, useState } from "react";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
// src/components/forms/slider/index.tsx
|
|
7
|
+
const getPrecision = (value) => {
|
|
8
|
+
const [coefficient, exponent = "0"] = String(value).toLowerCase().split("e");
|
|
9
|
+
const decimals = coefficient.split(".")[1]?.length ?? 0;
|
|
10
|
+
return Math.min(12, Math.max(0, decimals - Number(exponent)));
|
|
11
|
+
};
|
|
12
|
+
const normalizeSliderValue = (value, min, max, step) => {
|
|
13
|
+
if (max <= min) return min;
|
|
14
|
+
const boundedValue = Math.min(max, Math.max(min, value));
|
|
15
|
+
if (step === "any") return boundedValue;
|
|
16
|
+
const factor = 10 ** Math.max(getPrecision(min), getPrecision(step));
|
|
17
|
+
const steppedValue = min + Math.round((boundedValue - min) / step) * step;
|
|
18
|
+
return Math.min(max, Math.max(min, Math.round(steppedValue * factor) / factor));
|
|
19
|
+
};
|
|
20
|
+
const Slider = ({ value, defaultValue, onChange, min = 0, max = 100, step = 1, size = "md", marks, showValue = false, formatValue, className, id, ref, disabled = false, style, "aria-invalid": ariaInvalid, "aria-valuetext": ariaValueText, ...inputProps }) => {
|
|
21
|
+
const generatedId = useId();
|
|
22
|
+
const inputId = id ?? generatedId;
|
|
23
|
+
const resolvedMin = Number.isFinite(min) ? min : 0;
|
|
24
|
+
const resolvedMax = Math.max(resolvedMin, Number.isFinite(max) ? max : 100);
|
|
25
|
+
const resolvedStep = step === "any" ? "any" : Number.isFinite(step) && step > 0 ? step : 1;
|
|
26
|
+
const isControlled = value !== void 0;
|
|
27
|
+
const [internalValue, setInternalValue] = useState(() => normalizeSliderValue(defaultValue ?? (resolvedMin + resolvedMax) / 2, resolvedMin, resolvedMax, resolvedStep));
|
|
28
|
+
const currentValue = normalizeSliderValue(isControlled ? value : internalValue, resolvedMin, resolvedMax, resolvedStep);
|
|
29
|
+
const progress = resolvedMax > resolvedMin ? (currentValue - resolvedMin) / (resolvedMax - resolvedMin) * 100 : 0;
|
|
30
|
+
const formattedValue = formatValue?.(currentValue);
|
|
31
|
+
const isInvalid = ariaInvalid === true || ariaInvalid === "true";
|
|
32
|
+
const resolvedMarks = (marks ?? []).filter((mark) => Number.isFinite(mark.value) && mark.value >= resolvedMin && mark.value <= resolvedMax).slice().sort((a, b) => a.value - b.value);
|
|
33
|
+
const hasMarkLabels = resolvedMarks.some((mark) => mark.label != null);
|
|
34
|
+
const handleChange = (event) => {
|
|
35
|
+
const nextValue = normalizeSliderValue(event.currentTarget.valueAsNumber, resolvedMin, resolvedMax, resolvedStep);
|
|
36
|
+
if (!isControlled) setInternalValue(nextValue);
|
|
37
|
+
onChange?.(nextValue);
|
|
38
|
+
};
|
|
39
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
40
|
+
className: cn("puzzle-slider", className),
|
|
41
|
+
"data-size": size,
|
|
42
|
+
"data-disabled": disabled || void 0,
|
|
43
|
+
"data-invalid": isInvalid || void 0,
|
|
44
|
+
children: [
|
|
45
|
+
showValue && /* @__PURE__ */ jsx("output", {
|
|
46
|
+
htmlFor: inputId,
|
|
47
|
+
className: "puzzle-slider__value",
|
|
48
|
+
children: formattedValue ?? currentValue
|
|
49
|
+
}),
|
|
50
|
+
/* @__PURE__ */ jsx("input", {
|
|
51
|
+
...inputProps,
|
|
52
|
+
ref,
|
|
53
|
+
id: inputId,
|
|
54
|
+
className: "puzzle-slider__input",
|
|
55
|
+
type: "range",
|
|
56
|
+
min: resolvedMin,
|
|
57
|
+
max: resolvedMax,
|
|
58
|
+
step: resolvedStep,
|
|
59
|
+
value: currentValue,
|
|
60
|
+
disabled,
|
|
61
|
+
"aria-invalid": ariaInvalid,
|
|
62
|
+
"aria-valuetext": ariaValueText ?? formattedValue,
|
|
63
|
+
style: {
|
|
64
|
+
...style,
|
|
65
|
+
"--puzzle-slider-progress": `${progress}%`
|
|
66
|
+
},
|
|
67
|
+
onChange: handleChange
|
|
68
|
+
}),
|
|
69
|
+
resolvedMarks.length > 0 && /* @__PURE__ */ jsx("div", {
|
|
70
|
+
className: "puzzle-slider__marks",
|
|
71
|
+
"data-has-labels": hasMarkLabels || void 0,
|
|
72
|
+
children: resolvedMarks.map((mark, index) => {
|
|
73
|
+
const position = resolvedMax > resolvedMin ? (mark.value - resolvedMin) / (resolvedMax - resolvedMin) * 100 : 0;
|
|
74
|
+
return /* @__PURE__ */ jsxs("span", {
|
|
75
|
+
className: "puzzle-slider__mark",
|
|
76
|
+
"data-edge": index === 0 ? "start" : index === resolvedMarks.length - 1 ? "end" : void 0,
|
|
77
|
+
style: { insetInlineStart: `${position}%` },
|
|
78
|
+
children: [/* @__PURE__ */ jsx("span", {
|
|
79
|
+
className: "puzzle-slider__mark-tick",
|
|
80
|
+
"aria-hidden": "true"
|
|
81
|
+
}), mark.label != null && /* @__PURE__ */ jsx("span", {
|
|
82
|
+
className: "puzzle-slider__mark-label",
|
|
83
|
+
children: mark.label
|
|
84
|
+
})]
|
|
85
|
+
}, `${mark.value}-${index}`);
|
|
86
|
+
})
|
|
87
|
+
})
|
|
88
|
+
]
|
|
89
|
+
});
|
|
90
|
+
};
|
|
91
|
+
export { Slider };
|
|
92
|
+
|
|
93
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/forms/slider/index.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n useId,\n useState,\n type ChangeEvent,\n type ComponentPropsWithRef,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\n\nimport { cn } from \"@puzzle-ui/core\";\n\nimport \"./slider.css\";\n\ntype SliderSize = \"sm\" | \"md\" | \"lg\";\n\ntype SliderMark = {\n /** Numeric position of the mark. */\n value: number;\n\n /** Optional visible label below the mark. */\n label?: ReactNode;\n};\n\ntype SliderProps = Omit<\n ComponentPropsWithRef<\"input\">,\n | \"type\"\n | \"value\"\n | \"defaultValue\"\n | \"onChange\"\n | \"min\"\n | \"max\"\n | \"step\"\n | \"size\"\n | \"className\"\n> & {\n /** Controlled numeric value. */\n value?: number;\n\n /** Initial value for uncontrolled usage. Defaults to the range midpoint. */\n defaultValue?: number;\n\n /** Called whenever the selected value changes. */\n onChange?: (value: number) => void;\n\n /** Minimum selectable value. Defaults to 0. */\n min?: number;\n\n /** Maximum selectable value. Defaults to 100. */\n max?: number;\n\n /** Allowed increment. Use \"any\" to disable step rounding. */\n step?: number | \"any\";\n\n /** Visual size of the slider. */\n size?: SliderSize;\n\n /** Optional marks displayed below the track. */\n marks?: readonly SliderMark[];\n\n /** Displays the current value above the slider. */\n showValue?: boolean;\n\n /**\n * Formats the visible value and supplies aria-valuetext.\n * An explicitly supplied aria-valuetext takes precedence.\n */\n formatValue?: (value: number) => string;\n\n /** Class applied to the outer slider element. */\n className?: string;\n};\n\nconst getPrecision = (value: number) => {\n const [coefficient, exponent = \"0\"] = String(value).toLowerCase().split(\"e\");\n\n const decimals = coefficient.split(\".\")[1]?.length ?? 0;\n\n return Math.min(12, Math.max(0, decimals - Number(exponent)));\n};\n\nconst normalizeSliderValue = (\n value: number,\n min: number,\n max: number,\n step: number | \"any\",\n) => {\n if (max <= min) {\n return min;\n }\n\n const boundedValue = Math.min(max, Math.max(min, value));\n\n if (step === \"any\") {\n return boundedValue;\n }\n\n const precision = Math.max(getPrecision(min), getPrecision(step));\n const factor = 10 ** precision;\n\n const steppedValue = min + Math.round((boundedValue - min) / step) * step;\n\n return Math.min(\n max,\n Math.max(min, Math.round(steppedValue * factor) / factor),\n );\n};\n\nconst Slider = ({\n value,\n defaultValue,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n size = \"md\",\n marks,\n showValue = false,\n formatValue,\n className,\n id,\n ref,\n disabled = false,\n style,\n \"aria-invalid\": ariaInvalid,\n \"aria-valuetext\": ariaValueText,\n ...inputProps\n}: SliderProps) => {\n const generatedId = useId();\n const inputId = id ?? generatedId;\n\n const resolvedMin = Number.isFinite(min) ? min : 0;\n\n const requestedMax = Number.isFinite(max) ? max : 100;\n const resolvedMax = Math.max(resolvedMin, requestedMax);\n\n const resolvedStep =\n step === \"any\" ? \"any\" : Number.isFinite(step) && step > 0 ? step : 1;\n\n const isControlled = value !== undefined;\n\n const [internalValue, setInternalValue] = useState(() =>\n normalizeSliderValue(\n defaultValue ?? (resolvedMin + resolvedMax) / 2,\n resolvedMin,\n resolvedMax,\n resolvedStep,\n ),\n );\n\n const currentValue = normalizeSliderValue(\n isControlled ? value : internalValue,\n resolvedMin,\n resolvedMax,\n resolvedStep,\n );\n\n const progress =\n resolvedMax > resolvedMin\n ? ((currentValue - resolvedMin) / (resolvedMax - resolvedMin)) * 100\n : 0;\n\n const formattedValue = formatValue?.(currentValue);\n\n const isInvalid = ariaInvalid === true || ariaInvalid === \"true\";\n\n const resolvedMarks = (marks ?? [])\n .filter(\n (mark) =>\n Number.isFinite(mark.value) &&\n mark.value >= resolvedMin &&\n mark.value <= resolvedMax,\n )\n .slice()\n .sort((a, b) => a.value - b.value);\n\n const hasMarkLabels = resolvedMarks.some((mark) => mark.label != null);\n\n const handleChange = (event: ChangeEvent<HTMLInputElement>) => {\n const nextValue = normalizeSliderValue(\n event.currentTarget.valueAsNumber,\n resolvedMin,\n resolvedMax,\n resolvedStep,\n );\n\n if (!isControlled) {\n setInternalValue(nextValue);\n }\n\n onChange?.(nextValue);\n };\n\n return (\n <div\n className={cn(\"puzzle-slider\", className)}\n data-size={size}\n data-disabled={disabled || undefined}\n data-invalid={isInvalid || undefined}\n >\n {showValue && (\n <output htmlFor={inputId} className=\"puzzle-slider__value\">\n {formattedValue ?? currentValue}\n </output>\n )}\n\n <input\n {...inputProps}\n ref={ref}\n id={inputId}\n className=\"puzzle-slider__input\"\n type=\"range\"\n min={resolvedMin}\n max={resolvedMax}\n step={resolvedStep}\n value={currentValue}\n disabled={disabled}\n aria-invalid={ariaInvalid}\n aria-valuetext={ariaValueText ?? formattedValue}\n style={\n {\n ...style,\n \"--puzzle-slider-progress\": `${progress}%`,\n } as CSSProperties\n }\n onChange={handleChange}\n />\n\n {resolvedMarks.length > 0 && (\n <div\n className=\"puzzle-slider__marks\"\n data-has-labels={hasMarkLabels || undefined}\n >\n {resolvedMarks.map((mark, index) => {\n const position =\n resolvedMax > resolvedMin\n ? ((mark.value - resolvedMin) / (resolvedMax - resolvedMin)) *\n 100\n : 0;\n\n return (\n <span\n key={`${mark.value}-${index}`}\n className=\"puzzle-slider__mark\"\n data-edge={\n index === 0\n ? \"start\"\n : index === resolvedMarks.length - 1\n ? \"end\"\n : undefined\n }\n style={{\n insetInlineStart: `${position}%`,\n }}\n >\n <span className=\"puzzle-slider__mark-tick\" aria-hidden=\"true\" />\n\n {mark.label != null && (\n <span className=\"puzzle-slider__mark-label\">\n {mark.label}\n </span>\n )}\n </span>\n );\n })}\n </div>\n )}\n </div>\n );\n};\n\nexport { Slider, type SliderProps, type SliderMark, type SliderSize };\n"],"mappings":"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"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
.puzzle-slider {
|
|
2
|
+
--puzzle-slider-thumb-size: 1.125rem;
|
|
3
|
+
--puzzle-slider-track-height: .375rem;
|
|
4
|
+
--puzzle-slider-fill: var(--puzzle-color-primary);
|
|
5
|
+
gap: var(--puzzle-space-1, .25rem);
|
|
6
|
+
width: 100%;
|
|
7
|
+
min-width: 0;
|
|
8
|
+
color: var(--puzzle-color-text);
|
|
9
|
+
font-family: var(--puzzle-font-family-body, inherit);
|
|
10
|
+
flex-direction: column;
|
|
11
|
+
display: flex;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.puzzle-slider[data-size="sm"] {
|
|
15
|
+
--puzzle-slider-thumb-size: .875rem;
|
|
16
|
+
--puzzle-slider-track-height: .25rem;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.puzzle-slider[data-size="md"] {
|
|
20
|
+
--puzzle-slider-thumb-size: 1.125rem;
|
|
21
|
+
--puzzle-slider-track-height: .375rem;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.puzzle-slider[data-size="lg"] {
|
|
25
|
+
--puzzle-slider-thumb-size: 1.375rem;
|
|
26
|
+
--puzzle-slider-track-height: .5rem;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
.puzzle-slider__value {
|
|
30
|
+
color: var(--puzzle-color-text);
|
|
31
|
+
font-size: var(--puzzle-font-size-sm, .875rem);
|
|
32
|
+
font-weight: var(--puzzle-font-weight-medium, 500);
|
|
33
|
+
font-variant-numeric: tabular-nums;
|
|
34
|
+
line-height: var(--puzzle-font-line-height-normal, 1.5);
|
|
35
|
+
align-self: flex-end;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.puzzle-slider__input {
|
|
39
|
+
-webkit-appearance: none;
|
|
40
|
+
appearance: none;
|
|
41
|
+
cursor: pointer;
|
|
42
|
+
touch-action: pan-y;
|
|
43
|
+
-webkit-tap-highlight-color: transparent;
|
|
44
|
+
background: none;
|
|
45
|
+
border: 0;
|
|
46
|
+
width: 100%;
|
|
47
|
+
min-width: 0;
|
|
48
|
+
height: 2rem;
|
|
49
|
+
margin: 0;
|
|
50
|
+
padding: 0;
|
|
51
|
+
display: block;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
.puzzle-slider__input::-webkit-slider-runnable-track {
|
|
55
|
+
width: 100%;
|
|
56
|
+
height: var(--puzzle-slider-track-height);
|
|
57
|
+
background: linear-gradient(to right,
|
|
58
|
+
var(--puzzle-slider-fill) 0,
|
|
59
|
+
var(--puzzle-slider-fill) var(--puzzle-slider-progress, 50%),
|
|
60
|
+
var(--puzzle-color-border) var(--puzzle-slider-progress, 50%),
|
|
61
|
+
var(--puzzle-color-border) 100%);
|
|
62
|
+
border-radius: 9999px;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
.puzzle-slider__input::-webkit-slider-thumb {
|
|
66
|
+
-webkit-appearance: none;
|
|
67
|
+
appearance: none;
|
|
68
|
+
box-sizing: border-box;
|
|
69
|
+
width: var(--puzzle-slider-thumb-size);
|
|
70
|
+
height: var(--puzzle-slider-thumb-size);
|
|
71
|
+
margin-top: calc((var(--puzzle-slider-track-height) - var(--puzzle-slider-thumb-size)) / 2);
|
|
72
|
+
border: 2px solid var(--puzzle-slider-fill);
|
|
73
|
+
background: var(--puzzle-color-surface);
|
|
74
|
+
transition: border-color var(--puzzle-duration-fast, .15s) ease,
|
|
75
|
+
box-shadow var(--puzzle-duration-fast, .15s) ease,
|
|
76
|
+
background-color var(--puzzle-duration-fast, .15s) ease;
|
|
77
|
+
border-radius: 50%;
|
|
78
|
+
box-shadow: 0 1px 3px #0000001f;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
.puzzle-slider__input::-moz-range-track {
|
|
82
|
+
height: var(--puzzle-slider-track-height);
|
|
83
|
+
background: var(--puzzle-color-border);
|
|
84
|
+
border-radius: 9999px;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
.puzzle-slider__input::-moz-range-progress {
|
|
88
|
+
height: var(--puzzle-slider-track-height);
|
|
89
|
+
background: var(--puzzle-slider-fill);
|
|
90
|
+
border-radius: 9999px;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.puzzle-slider__input::-moz-range-thumb {
|
|
94
|
+
box-sizing: border-box;
|
|
95
|
+
width: var(--puzzle-slider-thumb-size);
|
|
96
|
+
height: var(--puzzle-slider-thumb-size);
|
|
97
|
+
border: 2px solid var(--puzzle-slider-fill);
|
|
98
|
+
background: var(--puzzle-color-surface);
|
|
99
|
+
transition: border-color var(--puzzle-duration-fast, .15s) ease,
|
|
100
|
+
box-shadow var(--puzzle-duration-fast, .15s) ease,
|
|
101
|
+
background-color var(--puzzle-duration-fast, .15s) ease;
|
|
102
|
+
border-radius: 50%;
|
|
103
|
+
box-shadow: 0 1px 3px #0000001f;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
:dir(rtl) .puzzle-slider__input::-webkit-slider-runnable-track {
|
|
107
|
+
background: linear-gradient(to left,
|
|
108
|
+
var(--puzzle-slider-fill) 0,
|
|
109
|
+
var(--puzzle-slider-fill) var(--puzzle-slider-progress, 50%),
|
|
110
|
+
var(--puzzle-color-border) var(--puzzle-slider-progress, 50%),
|
|
111
|
+
var(--puzzle-color-border) 100%);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.puzzle-slider__input:hover:not(:disabled)::-webkit-slider-thumb, .puzzle-slider__input:hover:not(:disabled)::-moz-range-thumb {
|
|
115
|
+
border-color: var(--puzzle-color-primary);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
.puzzle-slider__input:focus-visible::-webkit-slider-thumb, .puzzle-slider__input:focus-visible::-moz-range-thumb {
|
|
119
|
+
box-shadow: 0 0 0 3px color-mix(in srgb, var(--puzzle-slider-fill), transparent 78%);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.puzzle-slider__marks {
|
|
123
|
+
height: .375rem;
|
|
124
|
+
margin-inline: calc(var(--puzzle-slider-thumb-size) / 2);
|
|
125
|
+
position: relative;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
.puzzle-slider__marks[data-has-labels="true"] {
|
|
129
|
+
height: 1.5rem;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
.puzzle-slider__mark {
|
|
133
|
+
align-items: center;
|
|
134
|
+
gap: var(--puzzle-space-1, .25rem);
|
|
135
|
+
flex-direction: column;
|
|
136
|
+
display: flex;
|
|
137
|
+
position: absolute;
|
|
138
|
+
top: 0;
|
|
139
|
+
transform: translateX(-50%);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
.puzzle-slider__mark[data-edge="start"] {
|
|
143
|
+
transform: translateX(0);
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
.puzzle-slider__mark[data-edge="end"], :dir(rtl) .puzzle-slider__mark[data-edge="start"] {
|
|
147
|
+
transform: translateX(-100%);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
:dir(rtl) .puzzle-slider__mark[data-edge="end"] {
|
|
151
|
+
transform: translateX(0);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
.puzzle-slider__mark-tick {
|
|
155
|
+
background: var(--puzzle-color-border-strong, var(--puzzle-color-border));
|
|
156
|
+
flex: none;
|
|
157
|
+
width: 1px;
|
|
158
|
+
height: .375rem;
|
|
159
|
+
display: block;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
.puzzle-slider__mark-label {
|
|
163
|
+
color: var(--puzzle-color-text-muted);
|
|
164
|
+
font-size: var(--puzzle-font-size-xs, .75rem);
|
|
165
|
+
line-height: var(--puzzle-font-line-height-normal, 1.5);
|
|
166
|
+
white-space: nowrap;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.puzzle-slider[data-disabled="true"] {
|
|
170
|
+
opacity: .55;
|
|
171
|
+
cursor: not-allowed;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
.puzzle-slider__input:disabled {
|
|
175
|
+
cursor: not-allowed;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
.puzzle-slider[data-invalid="true"] {
|
|
179
|
+
--puzzle-slider-fill: var(--puzzle-color-danger);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
@media (forced-colors: active) {
|
|
183
|
+
.puzzle-slider__input:focus-visible {
|
|
184
|
+
outline-offset: 3px;
|
|
185
|
+
outline: 2px solid highlight;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
.puzzle-slider__input::-webkit-slider-thumb, .puzzle-slider__input::-moz-range-thumb {
|
|
189
|
+
background: canvas;
|
|
190
|
+
border-color: buttontext;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
.puzzle-slider__mark-tick {
|
|
194
|
+
background: buttontext;
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
@media (prefers-reduced-motion: reduce) {
|
|
199
|
+
.puzzle-slider__input::-webkit-slider-thumb, .puzzle-slider__input::-moz-range-thumb {
|
|
200
|
+
transition: none;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
;/* empty css */
|
|
3
|
+
let _puzzle_ui_core = require("@puzzle-ui/core");
|
|
4
|
+
let react = require("react");
|
|
5
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
6
|
+
let _puzzle_ui_hooks = require("@puzzle-ui/hooks");
|
|
7
|
+
// src/components/forms/stepper/index.tsx
|
|
8
|
+
const StepperStep = (_props) => null;
|
|
9
|
+
const isStepperStep = (child) => (0, react.isValidElement)(child) && child.type === StepperStep;
|
|
10
|
+
const StepperRoot = ({ activeStep, activeStepId, defaultActiveStep = 0, defaultActiveStepId, onStepChange, onStepIdChange, orientation = "horizontal", clickable = false, linear = true, children, className, ...rootProps }) => {
|
|
11
|
+
const [uncontrolledActiveStep, setUncontrolledActiveStep] = (0, react.useState)(defaultActiveStep);
|
|
12
|
+
const [uncontrolledActiveStepId, setUncontrolledActiveStepId] = (0, react.useState)(defaultActiveStepId);
|
|
13
|
+
const orientations = (0, _puzzle_ui_core.resolveResponsiveValue)(orientation);
|
|
14
|
+
const steps = react.Children.toArray(children).filter(isStepperStep);
|
|
15
|
+
const isIdSelection = activeStepId !== void 0 || defaultActiveStepId !== void 0;
|
|
16
|
+
const requestedActiveStepId = activeStepId ?? uncontrolledActiveStepId;
|
|
17
|
+
if (isIdSelection) {
|
|
18
|
+
const stepIds = /* @__PURE__ */ new Set();
|
|
19
|
+
for (const step of steps) {
|
|
20
|
+
const id = step.props.id;
|
|
21
|
+
if (id === void 0) throw new Error("Stepper ID-based selection requires an id on every step.");
|
|
22
|
+
const key = `${typeof id}:${id}`;
|
|
23
|
+
if (stepIds.has(key)) throw new Error("Stepper step IDs must be unique.");
|
|
24
|
+
stepIds.add(key);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
const requestedActiveStep = activeStep ?? uncontrolledActiveStep;
|
|
28
|
+
const requestedActiveStepIndex = isIdSelection ? steps.findIndex((step) => step.props.id === requestedActiveStepId) : void 0;
|
|
29
|
+
if (isIdSelection && steps.length > 0 && requestedActiveStepIndex === -1) throw new Error("Stepper activeStepId must match an available step ID.");
|
|
30
|
+
const currentActiveStep = isIdSelection ? requestedActiveStepIndex ?? -1 : steps.length === 0 ? -1 : Number.isFinite(requestedActiveStep) ? Math.min(steps.length - 1, Math.max(0, Math.trunc(requestedActiveStep))) : 0;
|
|
31
|
+
const direction = rootProps.dir === "rtl" ? "rtl" : "ltr";
|
|
32
|
+
const focusItems = steps.map((step, index) => {
|
|
33
|
+
const selectable = clickable && !step.props.disabled && (!linear || index <= currentActiveStep);
|
|
34
|
+
return {
|
|
35
|
+
id: step.props.id === void 0 ? `index:${index}` : `${typeof step.props.id}:${step.props.id}`,
|
|
36
|
+
disabled: !selectable
|
|
37
|
+
};
|
|
38
|
+
});
|
|
39
|
+
const activeFocusId = currentActiveStep >= 0 ? focusItems[currentActiveStep]?.id : void 0;
|
|
40
|
+
const rovingFocus = (0, _puzzle_ui_hooks.useRovingFocus)({
|
|
41
|
+
items: focusItems,
|
|
42
|
+
orientation: "both",
|
|
43
|
+
dir: direction,
|
|
44
|
+
initialActiveId: activeFocusId
|
|
45
|
+
});
|
|
46
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ol", {
|
|
47
|
+
...rootProps,
|
|
48
|
+
className: (0, _puzzle_ui_core.cn)("puzzle-stepper", className),
|
|
49
|
+
"data-orientation-mobile": orientations.mobile,
|
|
50
|
+
"data-orientation-tablet": orientations.tablet,
|
|
51
|
+
"data-orientation-desktop": orientations.desktop,
|
|
52
|
+
children: steps.map((step, index) => {
|
|
53
|
+
const { id, label, description, icon, completed: completedProp, error, disabled = false, optional, className: stepClassName } = step.props;
|
|
54
|
+
const state = error ? "error" : completedProp ?? index < currentActiveStep ? "completed" : index === currentActiveStep ? "active" : "upcoming";
|
|
55
|
+
const selectable = !disabled && (!linear || index <= currentActiveStep);
|
|
56
|
+
const focusId = id === void 0 ? `index:${index}` : `${typeof id}:${id}`;
|
|
57
|
+
const handleClick = () => {
|
|
58
|
+
if (!selectable || index === currentActiveStep) return;
|
|
59
|
+
if (isIdSelection) {
|
|
60
|
+
if (activeStepId === void 0) setUncontrolledActiveStepId(id);
|
|
61
|
+
} else if (activeStep === void 0) setUncontrolledActiveStep(index);
|
|
62
|
+
onStepChange?.(index);
|
|
63
|
+
if (isIdSelection && id !== void 0) onStepIdChange?.(id);
|
|
64
|
+
};
|
|
65
|
+
const content = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
66
|
+
className: "puzzle-stepper__indicator",
|
|
67
|
+
"data-has-icon": icon != null ? "true" : "false",
|
|
68
|
+
"aria-hidden": "true",
|
|
69
|
+
children: icon ?? (state === "completed" || state === "error" ? null : index + 1)
|
|
70
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
71
|
+
className: "puzzle-stepper__label",
|
|
72
|
+
children: [
|
|
73
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
74
|
+
className: "puzzle-stepper__label-text",
|
|
75
|
+
children: label
|
|
76
|
+
}),
|
|
77
|
+
description != null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
78
|
+
className: "puzzle-stepper__description",
|
|
79
|
+
children: description
|
|
80
|
+
}),
|
|
81
|
+
optional != null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
82
|
+
className: "puzzle-stepper__optional",
|
|
83
|
+
children: optional
|
|
84
|
+
})
|
|
85
|
+
]
|
|
86
|
+
})] });
|
|
87
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", {
|
|
88
|
+
className: (0, _puzzle_ui_core.cn)("puzzle-stepper__item", stepClassName),
|
|
89
|
+
"data-state": state,
|
|
90
|
+
"data-disabled": disabled || clickable && !selectable ? "true" : void 0,
|
|
91
|
+
"aria-current": index === currentActiveStep ? "step" : void 0,
|
|
92
|
+
children: clickable ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
|
|
93
|
+
type: "button",
|
|
94
|
+
className: "puzzle-stepper__step",
|
|
95
|
+
disabled: !selectable,
|
|
96
|
+
ref: rovingFocus.getItemRef(focusId),
|
|
97
|
+
tabIndex: rovingFocus.getItemTabIndex(focusId, !selectable),
|
|
98
|
+
onFocus: () => rovingFocus.onItemFocus(focusId),
|
|
99
|
+
onKeyDown: (event) => rovingFocus.onItemKeyDown(event, focusId),
|
|
100
|
+
onClick: handleClick,
|
|
101
|
+
children: content
|
|
102
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
103
|
+
className: "puzzle-stepper__step",
|
|
104
|
+
children: content
|
|
105
|
+
})
|
|
106
|
+
}, id === void 0 ? step.key ?? index : `${typeof id}:${id}`);
|
|
107
|
+
})
|
|
108
|
+
});
|
|
109
|
+
};
|
|
110
|
+
const Stepper = Object.assign(StepperRoot, { Step: StepperStep });
|
|
111
|
+
exports.Stepper = Stepper;
|
|
112
|
+
|
|
113
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["isValidElement","useState","resolveResponsiveValue","Children","useRovingFocus","cn"],"sources":["../../../../src/components/forms/stepper/index.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n cn,\n resolveResponsiveValue,\n type ResponsiveValue,\n} from \"@puzzle-ui/core\";\nimport { useRovingFocus } from \"@puzzle-ui/hooks\";\nimport {\n Children,\n isValidElement,\n useState,\n type ComponentPropsWithoutRef,\n type ReactElement,\n type ReactNode,\n} from \"react\";\nimport \"./stepper.css\";\n\ntype StepperOrientation = \"horizontal\" | \"vertical\";\n\ntype StepperStepProps = {\n /** Stable identifier, useful when steps are reordered. */\n id?: string | number;\n\n /** Visible label of the step. */\n label: ReactNode;\n\n /** Optional supporting text below the label. */\n description?: ReactNode;\n\n /** Custom indicator content. */\n icon?: ReactNode;\n\n /** Overrides the automatically calculated completed state. */\n completed?: boolean;\n\n /** Displays the step as an error. */\n error?: boolean;\n\n /** Prevents navigation to this step. */\n disabled?: boolean;\n\n /** Optional content displayed below the label. */\n optional?: ReactNode;\n\n /** Class applied to the step item. */\n className?: string;\n};\n\ntype StepperProps = Omit<ComponentPropsWithoutRef<\"ol\">, \"children\"> & {\n /** Active step index. Values are clamped to available steps. Defaults to 0. */\n activeStep?: number;\n\n /** Active step ID. Enables controlled ID-based selection. */\n activeStepId?: string | number;\n\n /** Initial active step for uncontrolled usage. Defaults to 0. */\n defaultActiveStep?: number;\n\n /** Initial active step ID for uncontrolled ID-based selection. */\n defaultActiveStepId?: string | number;\n\n /** Called when the active step changes. */\n onStepChange?: (step: number) => void;\n\n /** Called when an ID-based active step changes. */\n onStepIdChange?: (stepId: string | number) => void;\n\n /** Layout direction, optionally responsive. */\n orientation?: ResponsiveValue<StepperOrientation>;\n\n /** Allows users to select steps. Defaults to false. */\n clickable?: boolean;\n\n /** Prevents selecting steps ahead of the active step. Defaults to true. */\n linear?: boolean;\n\n children: ReactNode;\n};\n\nconst StepperStep = (_props: StepperStepProps) => null;\n\ntype StepperStepElement = ReactElement<StepperStepProps, typeof StepperStep>;\n\nconst isStepperStep = (child: ReactNode): child is StepperStepElement =>\n isValidElement<StepperStepProps>(child) && child.type === StepperStep;\n\nconst StepperRoot = ({\n activeStep,\n activeStepId,\n defaultActiveStep = 0,\n defaultActiveStepId,\n onStepChange,\n onStepIdChange,\n orientation = \"horizontal\",\n clickable = false,\n linear = true,\n children,\n className,\n ...rootProps\n}: StepperProps) => {\n const [uncontrolledActiveStep, setUncontrolledActiveStep] =\n useState(defaultActiveStep);\n const [uncontrolledActiveStepId, setUncontrolledActiveStepId] =\n useState(defaultActiveStepId);\n\n const orientations = resolveResponsiveValue(orientation);\n const steps = Children.toArray(children).filter(isStepperStep);\n const isIdSelection =\n activeStepId !== undefined || defaultActiveStepId !== undefined;\n const requestedActiveStepId = activeStepId ?? uncontrolledActiveStepId;\n\n if (isIdSelection) {\n const stepIds = new Set<string>();\n\n for (const step of steps) {\n const id = step.props.id;\n\n if (id === undefined) {\n throw new Error(\n \"Stepper ID-based selection requires an id on every step.\",\n );\n }\n\n const key = `${typeof id}:${id}`;\n\n if (stepIds.has(key)) {\n throw new Error(\"Stepper step IDs must be unique.\");\n }\n\n stepIds.add(key);\n }\n }\n\n const requestedActiveStep = activeStep ?? uncontrolledActiveStep;\n const requestedActiveStepIndex = isIdSelection\n ? steps.findIndex((step) => step.props.id === requestedActiveStepId)\n : undefined;\n\n if (\n isIdSelection &&\n steps.length > 0 &&\n requestedActiveStepIndex === -1\n ) {\n throw new Error(\"Stepper activeStepId must match an available step ID.\");\n }\n\n const currentActiveStep = isIdSelection\n ? (requestedActiveStepIndex ?? -1)\n : steps.length === 0\n ? -1\n : Number.isFinite(requestedActiveStep)\n ? Math.min(\n steps.length - 1,\n Math.max(0, Math.trunc(requestedActiveStep)),\n )\n : 0;\n const direction = rootProps.dir === \"rtl\" ? \"rtl\" : \"ltr\";\n\n const focusItems = steps.map((step, index) => {\n const selectable =\n clickable &&\n !step.props.disabled &&\n (!linear || index <= currentActiveStep);\n\n return {\n id:\n step.props.id === undefined\n ? `index:${index}`\n : `${typeof step.props.id}:${step.props.id}`,\n disabled: !selectable,\n };\n });\n\n const activeFocusId =\n currentActiveStep >= 0\n ? focusItems[currentActiveStep]?.id\n : undefined;\n const rovingFocus = useRovingFocus<HTMLButtonElement>({\n items: focusItems,\n orientation: \"both\",\n dir: direction,\n initialActiveId: activeFocusId,\n });\n\n return (\n <ol\n {...rootProps}\n className={cn(\"puzzle-stepper\", className)}\n data-orientation-mobile={orientations.mobile}\n data-orientation-tablet={orientations.tablet}\n data-orientation-desktop={orientations.desktop}\n >\n {steps.map((step, index) => {\n const {\n id,\n label,\n description,\n icon,\n completed: completedProp,\n error,\n disabled = false,\n optional,\n className: stepClassName,\n } = step.props;\n\n const completed = completedProp ?? index < currentActiveStep;\n\n const state = error\n ? \"error\"\n : completed\n ? \"completed\"\n : index === currentActiveStep\n ? \"active\"\n : \"upcoming\";\n\n const selectable = !disabled && (!linear || index <= currentActiveStep);\n const focusId =\n id === undefined ? `index:${index}` : `${typeof id}:${id}`;\n\n const handleClick = () => {\n if (!selectable || index === currentActiveStep) {\n return;\n }\n\n if (isIdSelection) {\n if (activeStepId === undefined) {\n setUncontrolledActiveStepId(id);\n }\n } else if (activeStep === undefined) {\n setUncontrolledActiveStep(index);\n }\n\n onStepChange?.(index);\n if (isIdSelection && id !== undefined) {\n onStepIdChange?.(id);\n }\n };\n\n const content = (\n <>\n <span\n className=\"puzzle-stepper__indicator\"\n data-has-icon={icon != null ? \"true\" : \"false\"}\n aria-hidden=\"true\"\n >\n {icon ??\n (state === \"completed\" || state === \"error\" ? null : index + 1)}\n </span>\n\n <span className=\"puzzle-stepper__label\">\n <span className=\"puzzle-stepper__label-text\">{label}</span>\n\n {description != null && (\n <span className=\"puzzle-stepper__description\">\n {description}\n </span>\n )}\n\n {optional != null && (\n <span className=\"puzzle-stepper__optional\">{optional}</span>\n )}\n </span>\n </>\n );\n\n return (\n <li\n key={\n id === undefined ? (step.key ?? index) : `${typeof id}:${id}`\n }\n className={cn(\"puzzle-stepper__item\", stepClassName)}\n data-state={state}\n data-disabled={\n disabled || (clickable && !selectable) ? \"true\" : undefined\n }\n aria-current={index === currentActiveStep ? \"step\" : undefined}\n >\n {clickable ? (\n <button\n type=\"button\"\n className=\"puzzle-stepper__step\"\n disabled={!selectable}\n ref={rovingFocus.getItemRef(focusId)}\n tabIndex={rovingFocus.getItemTabIndex(focusId, !selectable)}\n onFocus={() => rovingFocus.onItemFocus(focusId)}\n onKeyDown={(event) =>\n rovingFocus.onItemKeyDown(event, focusId)\n }\n onClick={handleClick}\n >\n {content}\n </button>\n ) : (\n <div className=\"puzzle-stepper__step\">{content}</div>\n )}\n </li>\n );\n })}\n </ol>\n );\n};\n\nconst Stepper = Object.assign(StepperRoot, {\n Step: StepperStep,\n});\n\nexport {\n Stepper,\n type StepperProps,\n type StepperStepProps,\n type StepperOrientation,\n};\n"],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { ComponentPropsWithoutRef, ReactNode } from "react";
|
|
2
|
+
import { ResponsiveValue } from "@puzzle-ui/core";
|
|
3
|
+
type StepperOrientation = "horizontal" | "vertical";
|
|
4
|
+
type StepperStepProps = {
|
|
5
|
+
/** Stable identifier, useful when steps are reordered. */
|
|
6
|
+
id?: string | number;
|
|
7
|
+
/** Visible label of the step. */
|
|
8
|
+
label: ReactNode;
|
|
9
|
+
/** Optional supporting text below the label. */
|
|
10
|
+
description?: ReactNode;
|
|
11
|
+
/** Custom indicator content. */
|
|
12
|
+
icon?: ReactNode;
|
|
13
|
+
/** Overrides the automatically calculated completed state. */
|
|
14
|
+
completed?: boolean;
|
|
15
|
+
/** Displays the step as an error. */
|
|
16
|
+
error?: boolean;
|
|
17
|
+
/** Prevents navigation to this step. */
|
|
18
|
+
disabled?: boolean;
|
|
19
|
+
/** Optional content displayed below the label. */
|
|
20
|
+
optional?: ReactNode;
|
|
21
|
+
/** Class applied to the step item. */
|
|
22
|
+
className?: string;
|
|
23
|
+
};
|
|
24
|
+
type StepperProps = Omit<ComponentPropsWithoutRef<"ol">, "children"> & {
|
|
25
|
+
/** Active step index. Values are clamped to available steps. Defaults to 0. */
|
|
26
|
+
activeStep?: number;
|
|
27
|
+
/** Active step ID. Enables controlled ID-based selection. */
|
|
28
|
+
activeStepId?: string | number;
|
|
29
|
+
/** Initial active step for uncontrolled usage. Defaults to 0. */
|
|
30
|
+
defaultActiveStep?: number;
|
|
31
|
+
/** Initial active step ID for uncontrolled ID-based selection. */
|
|
32
|
+
defaultActiveStepId?: string | number;
|
|
33
|
+
/** Called when the active step changes. */
|
|
34
|
+
onStepChange?: (step: number) => void;
|
|
35
|
+
/** Called when an ID-based active step changes. */
|
|
36
|
+
onStepIdChange?: (stepId: string | number) => void;
|
|
37
|
+
/** Layout direction, optionally responsive. */
|
|
38
|
+
orientation?: ResponsiveValue<StepperOrientation>;
|
|
39
|
+
/** Allows users to select steps. Defaults to false. */
|
|
40
|
+
clickable?: boolean;
|
|
41
|
+
/** Prevents selecting steps ahead of the active step. Defaults to true. */
|
|
42
|
+
linear?: boolean;
|
|
43
|
+
children: ReactNode;
|
|
44
|
+
};
|
|
45
|
+
declare const Stepper: (({ activeStep, activeStepId, defaultActiveStep, defaultActiveStepId, onStepChange, onStepIdChange, orientation, clickable, linear, children, className, ...rootProps }: StepperProps) => import("react").JSX.Element) & {
|
|
46
|
+
Step: (_props: StepperStepProps) => null;
|
|
47
|
+
};
|
|
48
|
+
export { Stepper, type StepperOrientation, type StepperProps, type StepperStepProps };
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { ResponsiveValue } from "@puzzle-ui/core";
|
|
2
|
+
import { ComponentPropsWithoutRef, ReactNode } from "react";
|
|
3
|
+
type StepperOrientation = "horizontal" | "vertical";
|
|
4
|
+
type StepperStepProps = {
|
|
5
|
+
/** Stable identifier, useful when steps are reordered. */
|
|
6
|
+
id?: string | number;
|
|
7
|
+
/** Visible label of the step. */
|
|
8
|
+
label: ReactNode;
|
|
9
|
+
/** Optional supporting text below the label. */
|
|
10
|
+
description?: ReactNode;
|
|
11
|
+
/** Custom indicator content. */
|
|
12
|
+
icon?: ReactNode;
|
|
13
|
+
/** Overrides the automatically calculated completed state. */
|
|
14
|
+
completed?: boolean;
|
|
15
|
+
/** Displays the step as an error. */
|
|
16
|
+
error?: boolean;
|
|
17
|
+
/** Prevents navigation to this step. */
|
|
18
|
+
disabled?: boolean;
|
|
19
|
+
/** Optional content displayed below the label. */
|
|
20
|
+
optional?: ReactNode;
|
|
21
|
+
/** Class applied to the step item. */
|
|
22
|
+
className?: string;
|
|
23
|
+
};
|
|
24
|
+
type StepperProps = Omit<ComponentPropsWithoutRef<"ol">, "children"> & {
|
|
25
|
+
/** Active step index. Values are clamped to available steps. Defaults to 0. */
|
|
26
|
+
activeStep?: number;
|
|
27
|
+
/** Active step ID. Enables controlled ID-based selection. */
|
|
28
|
+
activeStepId?: string | number;
|
|
29
|
+
/** Initial active step for uncontrolled usage. Defaults to 0. */
|
|
30
|
+
defaultActiveStep?: number;
|
|
31
|
+
/** Initial active step ID for uncontrolled ID-based selection. */
|
|
32
|
+
defaultActiveStepId?: string | number;
|
|
33
|
+
/** Called when the active step changes. */
|
|
34
|
+
onStepChange?: (step: number) => void;
|
|
35
|
+
/** Called when an ID-based active step changes. */
|
|
36
|
+
onStepIdChange?: (stepId: string | number) => void;
|
|
37
|
+
/** Layout direction, optionally responsive. */
|
|
38
|
+
orientation?: ResponsiveValue<StepperOrientation>;
|
|
39
|
+
/** Allows users to select steps. Defaults to false. */
|
|
40
|
+
clickable?: boolean;
|
|
41
|
+
/** Prevents selecting steps ahead of the active step. Defaults to true. */
|
|
42
|
+
linear?: boolean;
|
|
43
|
+
children: ReactNode;
|
|
44
|
+
};
|
|
45
|
+
declare const Stepper: (({ activeStep, activeStepId, defaultActiveStep, defaultActiveStepId, onStepChange, onStepIdChange, orientation, clickable, linear, children, className, ...rootProps }: StepperProps) => import("react").JSX.Element) & {
|
|
46
|
+
Step: (_props: StepperStepProps) => null;
|
|
47
|
+
};
|
|
48
|
+
export { Stepper, type StepperOrientation, type StepperProps, type StepperStepProps };
|