@puzzle-ui/ui 0.0.0-stage → 0.1.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 +16 -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/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 +120 -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 +120 -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 +190 -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 +190 -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 +155 -0
- package/dist/index.d.cts +85 -0
- package/dist/index.d.ts +85 -0
- package/dist/index.js +69 -0
- package/package.json +65 -4
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { getImageBlurDataURL, getImageDimensions, getImageSourceUrl, hasImageSource, resolveImageRadius } from "./image.utils.js";
|
|
3
|
+
import { useImageState } from "./use-image-state.js";
|
|
4
|
+
import "./image.css";
|
|
5
|
+
import { cn } from "@puzzle-ui/core";
|
|
6
|
+
import { createElement, useCallback, useEffect, useRef } from "react";
|
|
7
|
+
import { useThemeComponents } from "@puzzle-ui/theme/components-context";
|
|
8
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
9
|
+
import { preload } from "react-dom";
|
|
10
|
+
// src/components/data-display/image/index.tsx
|
|
11
|
+
const Image = ({ src, alt, width, height, fit = "cover", position = "center", aspectRatio, fill = false, radius, fallbackSrc, fallback, loadingPlaceholder, placeholder = "empty", blurDataURL, sources, component, componentProps, quality, preload: preload$1 = false, unoptimized, className, style, containerClassName, containerStyle, loading, fetchPriority, decoding, srcSet, sizes, crossOrigin, referrerPolicy, ref, onLoad, onError, ...rest }) => {
|
|
12
|
+
const configuredImage = useThemeComponents()?.image;
|
|
13
|
+
const Component = component ?? configuredImage ?? "img";
|
|
14
|
+
const isNativeImage = Component === "img";
|
|
15
|
+
const { activeSource, usingFallback, status, markLoaded, markError } = useImageState(src, fallbackSrc);
|
|
16
|
+
const hasActiveSource = hasImageSource(activeSource);
|
|
17
|
+
const sourceUrl = getImageSourceUrl(activeSource);
|
|
18
|
+
const sourceDimensions = getImageDimensions(activeSource);
|
|
19
|
+
const resolvedWidth = width ?? sourceDimensions?.width;
|
|
20
|
+
const resolvedHeight = height ?? sourceDimensions?.height;
|
|
21
|
+
const resolvedBlurDataURL = blurDataURL ?? getImageBlurDataURL(activeSource);
|
|
22
|
+
const imageRef = useRef(null);
|
|
23
|
+
/**
|
|
24
|
+
* Assigns the image element to both the internal and external refs.
|
|
25
|
+
*/
|
|
26
|
+
const setImageRef = useCallback((node) => {
|
|
27
|
+
imageRef.current = node;
|
|
28
|
+
if (typeof ref === "function") ref(node);
|
|
29
|
+
else if (ref) ref.current = node;
|
|
30
|
+
}, [ref]);
|
|
31
|
+
/**
|
|
32
|
+
* Handles successful image loading.
|
|
33
|
+
*/
|
|
34
|
+
const handleLoad = useCallback((event) => {
|
|
35
|
+
markLoaded();
|
|
36
|
+
onLoad?.(event);
|
|
37
|
+
}, [markLoaded, onLoad]);
|
|
38
|
+
/**
|
|
39
|
+
* Handles image loading failures.
|
|
40
|
+
*/
|
|
41
|
+
const handleError = useCallback((event) => {
|
|
42
|
+
markError();
|
|
43
|
+
onError?.(event);
|
|
44
|
+
}, [markError, onError]);
|
|
45
|
+
/**
|
|
46
|
+
* Handles images that were loaded before React attached its listeners.
|
|
47
|
+
*
|
|
48
|
+
* This is particularly useful for cached images during hydration.
|
|
49
|
+
*/
|
|
50
|
+
useEffect(() => {
|
|
51
|
+
const image = imageRef.current;
|
|
52
|
+
if (!image || !image.complete) return;
|
|
53
|
+
if (image.naturalWidth > 0) markLoaded();
|
|
54
|
+
}, [activeSource, markLoaded]);
|
|
55
|
+
/**
|
|
56
|
+
* Preloads native images using React DOM.
|
|
57
|
+
*
|
|
58
|
+
* Framework image components handle their own preload behavior.
|
|
59
|
+
*/
|
|
60
|
+
if (preload$1 && isNativeImage && sourceUrl) preload(sourceUrl, {
|
|
61
|
+
as: "image",
|
|
62
|
+
crossOrigin,
|
|
63
|
+
fetchPriority: fetchPriority ?? "high",
|
|
64
|
+
imageSrcSet: srcSet,
|
|
65
|
+
imageSizes: sizes,
|
|
66
|
+
referrerPolicy
|
|
67
|
+
});
|
|
68
|
+
const mediaStyle = {
|
|
69
|
+
...fill || aspectRatio ? {
|
|
70
|
+
width: "100%",
|
|
71
|
+
height: "100%"
|
|
72
|
+
} : {},
|
|
73
|
+
...fill ? {
|
|
74
|
+
position: "absolute",
|
|
75
|
+
inset: 0
|
|
76
|
+
} : {},
|
|
77
|
+
objectFit: fit,
|
|
78
|
+
objectPosition: position,
|
|
79
|
+
...style
|
|
80
|
+
};
|
|
81
|
+
const wrapperStyle = {
|
|
82
|
+
...aspectRatio ? {
|
|
83
|
+
aspectRatio,
|
|
84
|
+
width: "100%"
|
|
85
|
+
} : {},
|
|
86
|
+
...fill ? {
|
|
87
|
+
position: "relative",
|
|
88
|
+
display: "block",
|
|
89
|
+
width: "100%",
|
|
90
|
+
...aspectRatio ? {} : { height: "100%" }
|
|
91
|
+
} : {},
|
|
92
|
+
...radius ? { borderRadius: resolveImageRadius(radius) } : {},
|
|
93
|
+
...containerStyle
|
|
94
|
+
};
|
|
95
|
+
const isLoading = hasActiveSource && status === "loading";
|
|
96
|
+
const shouldShowFallback = fallback !== void 0 && (!hasActiveSource || status === "error");
|
|
97
|
+
if (!hasActiveSource && !shouldShowFallback) return null;
|
|
98
|
+
const renderedSource = isNativeImage ? sourceUrl : activeSource;
|
|
99
|
+
/**
|
|
100
|
+
* Framework-specific props are only forwarded to custom components.
|
|
101
|
+
* This prevents invalid attributes from leaking onto native img tags.
|
|
102
|
+
*/
|
|
103
|
+
const imageElement = createElement(Component, {
|
|
104
|
+
...!isNativeImage ? componentProps : {},
|
|
105
|
+
...rest,
|
|
106
|
+
key: usingFallback ? "fallback" : "source",
|
|
107
|
+
ref: setImageRef,
|
|
108
|
+
src: renderedSource,
|
|
109
|
+
alt,
|
|
110
|
+
width: resolvedWidth,
|
|
111
|
+
height: resolvedHeight,
|
|
112
|
+
loading,
|
|
113
|
+
fetchPriority,
|
|
114
|
+
decoding,
|
|
115
|
+
crossOrigin,
|
|
116
|
+
referrerPolicy,
|
|
117
|
+
srcSet,
|
|
118
|
+
sizes,
|
|
119
|
+
className: cn("puzzle-image__media", className),
|
|
120
|
+
style: mediaStyle,
|
|
121
|
+
onLoad: handleLoad,
|
|
122
|
+
onError: handleError,
|
|
123
|
+
...fill && !isNativeImage ? { fill: true } : {},
|
|
124
|
+
...preload$1 && !isNativeImage ? { preload: true } : {},
|
|
125
|
+
...quality !== void 0 && !isNativeImage ? { quality } : {},
|
|
126
|
+
...unoptimized !== void 0 && !isNativeImage ? { unoptimized } : {},
|
|
127
|
+
...!isNativeImage && placeholder === "blur" && resolvedBlurDataURL ? {
|
|
128
|
+
placeholder: "blur",
|
|
129
|
+
blurDataURL: resolvedBlurDataURL
|
|
130
|
+
} : {}
|
|
131
|
+
});
|
|
132
|
+
/**
|
|
133
|
+
* Picture sources allow art direction and responsive source selection.
|
|
134
|
+
*/
|
|
135
|
+
const media = sources?.length ? /* @__PURE__ */ jsxs("picture", {
|
|
136
|
+
className: "puzzle-image__picture",
|
|
137
|
+
children: [sources.map((source, index) => /* @__PURE__ */ jsx("source", {
|
|
138
|
+
srcSet: source.srcSet,
|
|
139
|
+
media: source.media,
|
|
140
|
+
type: source.type,
|
|
141
|
+
sizes: source.sizes
|
|
142
|
+
}, `${source.srcSet}-${index}`)), imageElement]
|
|
143
|
+
}) : imageElement;
|
|
144
|
+
const showLoadingPlaceholder = isLoading && loadingPlaceholder !== void 0;
|
|
145
|
+
const showBlurPlaceholder = isLoading && !loadingPlaceholder && isNativeImage && placeholder === "blur" && Boolean(resolvedBlurDataURL);
|
|
146
|
+
return /* @__PURE__ */ jsxs("div", {
|
|
147
|
+
className: cn("puzzle-image", containerClassName),
|
|
148
|
+
style: wrapperStyle,
|
|
149
|
+
"data-status": hasActiveSource ? status : "empty",
|
|
150
|
+
"data-image-fill": fill ? "true" : void 0,
|
|
151
|
+
"data-image-ratio": aspectRatio ? "true" : void 0,
|
|
152
|
+
children: [
|
|
153
|
+
showBlurPlaceholder ? /* @__PURE__ */ jsx("img", {
|
|
154
|
+
className: "puzzle-image__blur",
|
|
155
|
+
src: resolvedBlurDataURL,
|
|
156
|
+
alt: "",
|
|
157
|
+
"aria-hidden": "true"
|
|
158
|
+
}) : null,
|
|
159
|
+
showLoadingPlaceholder ? /* @__PURE__ */ jsx("div", {
|
|
160
|
+
className: "puzzle-image__placeholder",
|
|
161
|
+
"aria-hidden": "true",
|
|
162
|
+
children: loadingPlaceholder
|
|
163
|
+
}) : null,
|
|
164
|
+
shouldShowFallback ? /* @__PURE__ */ jsx("div", {
|
|
165
|
+
className: "puzzle-image__fallback",
|
|
166
|
+
role: alt ? "img" : void 0,
|
|
167
|
+
"aria-label": alt || void 0,
|
|
168
|
+
"aria-hidden": alt ? void 0 : true,
|
|
169
|
+
children: fallback
|
|
170
|
+
}) : media
|
|
171
|
+
]
|
|
172
|
+
});
|
|
173
|
+
};
|
|
174
|
+
export { Image };
|
|
175
|
+
|
|
176
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":["preload"],"sources":["../../../../src/components/data-display/image/index.tsx"],"sourcesContent":["\"use client\";\n\nimport {\n createElement,\n useCallback,\n useEffect,\n useRef,\n type CSSProperties,\n type ElementType,\n type RefCallback,\n} from \"react\";\n\nimport { preload as preloadImage } from \"react-dom\";\n\nimport { cn } from \"@puzzle-ui/core\";\nimport { useThemeComponents } from \"@puzzle-ui/theme/components-context\";\n\nimport type { ImageProps } from \"./image.types\";\n\nimport {\n getImageBlurDataURL,\n getImageDimensions,\n getImageSourceUrl,\n hasImageSource,\n resolveImageRadius,\n} from \"./image.utils\";\n\nimport { useImageState } from \"./use-image-state\";\n\nimport \"./image.css\";\n\nconst Image = ({\n src,\n alt,\n width,\n height,\n fit = \"cover\",\n position = \"center\",\n aspectRatio,\n fill = false,\n radius,\n fallbackSrc,\n fallback,\n loadingPlaceholder,\n placeholder = \"empty\",\n blurDataURL,\n sources,\n component,\n componentProps,\n quality,\n preload = false,\n unoptimized,\n className,\n style,\n containerClassName,\n containerStyle,\n loading,\n fetchPriority,\n decoding,\n srcSet,\n sizes,\n crossOrigin,\n referrerPolicy,\n ref,\n onLoad,\n onError,\n ...rest\n}: ImageProps) => {\n const configuredImage = useThemeComponents()?.image;\n\n const Component: ElementType = component ?? configuredImage ?? \"img\";\n\n const isNativeImage = Component === \"img\";\n\n const { activeSource, usingFallback, status, markLoaded, markError } =\n useImageState(src, fallbackSrc);\n\n const hasActiveSource = hasImageSource(activeSource);\n\n const sourceUrl = getImageSourceUrl(activeSource);\n\n const sourceDimensions = getImageDimensions(activeSource);\n\n const resolvedWidth = width ?? sourceDimensions?.width;\n const resolvedHeight = height ?? sourceDimensions?.height;\n\n const resolvedBlurDataURL = blurDataURL ?? getImageBlurDataURL(activeSource);\n\n const imageRef = useRef<HTMLImageElement | null>(null);\n\n /**\n * Assigns the image element to both the internal and external refs.\n */\n const setImageRef = useCallback<RefCallback<HTMLImageElement>>(\n (node) => {\n imageRef.current = node;\n\n if (typeof ref === \"function\") {\n ref(node);\n } else if (ref) {\n ref.current = node;\n }\n },\n [ref],\n );\n\n /**\n * Handles successful image loading.\n */\n const handleLoad: NonNullable<ImageProps[\"onLoad\"]> = useCallback(\n (event) => {\n markLoaded();\n onLoad?.(event);\n },\n [markLoaded, onLoad],\n );\n\n /**\n * Handles image loading failures.\n */\n const handleError: NonNullable<ImageProps[\"onError\"]> = useCallback(\n (event) => {\n markError();\n onError?.(event);\n },\n [markError, onError],\n );\n\n /**\n * Handles images that were loaded before React attached its listeners.\n *\n * This is particularly useful for cached images during hydration.\n */\n useEffect(() => {\n const image = imageRef.current;\n\n if (!image || !image.complete) {\n return;\n }\n\n if (image.naturalWidth > 0) {\n markLoaded();\n }\n }, [activeSource, markLoaded]);\n\n /**\n * Preloads native images using React DOM.\n *\n * Framework image components handle their own preload behavior.\n */\n if (preload && isNativeImage && sourceUrl) {\n preloadImage(sourceUrl, {\n as: \"image\",\n crossOrigin,\n fetchPriority: fetchPriority ?? \"high\",\n imageSrcSet: srcSet,\n imageSizes: sizes,\n referrerPolicy,\n });\n }\n\n const mediaStyle: CSSProperties = {\n ...(fill || aspectRatio\n ? {\n width: \"100%\",\n height: \"100%\",\n }\n : {}),\n ...(fill\n ? {\n position: \"absolute\",\n inset: 0,\n }\n : {}),\n objectFit: fit,\n objectPosition: position,\n ...style,\n };\n\n const wrapperStyle: CSSProperties = {\n ...(aspectRatio\n ? {\n aspectRatio,\n width: \"100%\",\n }\n : {}),\n ...(fill\n ? {\n position: \"relative\",\n display: \"block\",\n width: \"100%\",\n ...(aspectRatio ? {} : { height: \"100%\" }),\n }\n : {}),\n ...(radius\n ? {\n borderRadius: resolveImageRadius(radius),\n }\n : {}),\n ...containerStyle,\n };\n\n const isLoading = hasActiveSource && status === \"loading\";\n\n const shouldShowFallback =\n fallback !== undefined && (!hasActiveSource || status === \"error\");\n\n if (!hasActiveSource && !shouldShowFallback) {\n return null;\n }\n\n const renderedSource = isNativeImage ? sourceUrl : activeSource;\n\n /**\n * Framework-specific props are only forwarded to custom components.\n * This prevents invalid attributes from leaking onto native img tags.\n */\n const imageElement = createElement(Component, {\n ...(!isNativeImage ? componentProps : {}),\n ...rest,\n key: usingFallback ? \"fallback\" : \"source\",\n ref: setImageRef,\n src: renderedSource,\n alt,\n width: resolvedWidth,\n height: resolvedHeight,\n loading,\n fetchPriority,\n decoding,\n crossOrigin,\n referrerPolicy,\n srcSet,\n sizes,\n className: cn(\"puzzle-image__media\", className),\n style: mediaStyle,\n onLoad: handleLoad,\n onError: handleError,\n ...(fill && !isNativeImage ? { fill: true } : {}),\n ...(preload && !isNativeImage ? { preload: true } : {}),\n ...(quality !== undefined && !isNativeImage ? { quality } : {}),\n ...(unoptimized !== undefined && !isNativeImage ? { unoptimized } : {}),\n ...(!isNativeImage && placeholder === \"blur\" && resolvedBlurDataURL\n ? {\n placeholder: \"blur\",\n blurDataURL: resolvedBlurDataURL,\n }\n : {}),\n } as never);\n\n /**\n * Picture sources allow art direction and responsive source selection.\n */\n const media = sources?.length ? (\n <picture className=\"puzzle-image__picture\">\n {sources.map((source, index) => (\n <source\n key={`${source.srcSet}-${index}`}\n srcSet={source.srcSet}\n media={source.media}\n type={source.type}\n sizes={source.sizes}\n />\n ))}\n {imageElement}\n </picture>\n ) : (\n imageElement\n );\n\n const showLoadingPlaceholder = isLoading && loadingPlaceholder !== undefined;\n\n const showBlurPlaceholder =\n isLoading &&\n !loadingPlaceholder &&\n isNativeImage &&\n placeholder === \"blur\" &&\n Boolean(resolvedBlurDataURL);\n\n return (\n <div\n className={cn(\"puzzle-image\", containerClassName)}\n style={wrapperStyle}\n data-status={hasActiveSource ? status : \"empty\"}\n data-image-fill={fill ? \"true\" : undefined}\n data-image-ratio={aspectRatio ? \"true\" : undefined}\n >\n {showBlurPlaceholder ? (\n <img\n className=\"puzzle-image__blur\"\n src={resolvedBlurDataURL}\n alt=\"\"\n aria-hidden=\"true\"\n />\n ) : null}\n\n {showLoadingPlaceholder ? (\n <div className=\"puzzle-image__placeholder\" aria-hidden=\"true\">\n {loadingPlaceholder}\n </div>\n ) : null}\n\n {shouldShowFallback ? (\n <div\n className=\"puzzle-image__fallback\"\n role={alt ? \"img\" : undefined}\n aria-label={alt || undefined}\n aria-hidden={alt ? undefined : true}\n >\n {fallback}\n </div>\n ) : (\n media\n )}\n </div>\n );\n};\n\nexport { Image, type ImageProps };\n\nexport type {\n ImageSource,\n ImageSourceData,\n ImageSourceSet,\n ImageFit,\n ImageRadius,\n ImagePlaceholder,\n} from \"./image.types\";\n"],"mappings":";;;;;;;;;;AA+BA,MAAM,SAAS,EACb,KACA,KACA,OACA,QACA,MAAM,SACN,WAAW,UACX,aACA,OAAO,OACP,QACA,aACA,UACA,oBACA,cAAc,SACd,aACA,SACA,WACA,gBACA,SACA,SAAA,YAAU,OACV,aACA,WACA,OACA,oBACA,gBACA,SACA,eACA,UACA,QACA,OACA,aACA,gBACA,KACA,QACA,SACA,GAAG,WACa;CAChB,MAAM,kBAAkB,mBAAmB,CAAC,EAAE;CAE9C,MAAM,YAAyB,aAAa,mBAAmB;CAE/D,MAAM,gBAAgB,cAAc;CAEpC,MAAM,EAAE,cAAc,eAAe,QAAQ,YAAY,cACvD,cAAc,KAAK,WAAW;CAEhC,MAAM,kBAAkB,eAAe,YAAY;CAEnD,MAAM,YAAY,kBAAkB,YAAY;CAEhD,MAAM,mBAAmB,mBAAmB,YAAY;CAExD,MAAM,gBAAgB,SAAS,kBAAkB;CACjD,MAAM,iBAAiB,UAAU,kBAAkB;CAEnD,MAAM,sBAAsB,eAAe,oBAAoB,YAAY;CAE3E,MAAM,WAAW,OAAgC,IAAI;;;;CAKrD,MAAM,cAAc,aACjB,SAAS;EACR,SAAS,UAAU;EAEnB,IAAI,OAAO,QAAQ,YACjB,IAAI,IAAI;OACH,IAAI,KACT,IAAI,UAAU;CAElB,GACA,CAAC,GAAG,CACN;;;;CAKA,MAAM,aAAgD,aACnD,UAAU;EACT,WAAW;EACX,SAAS,KAAK;CAChB,GACA,CAAC,YAAY,MAAM,CACrB;;;;CAKA,MAAM,cAAkD,aACrD,UAAU;EACT,UAAU;EACV,UAAU,KAAK;CACjB,GACA,CAAC,WAAW,OAAO,CACrB;;;;;;CAOA,gBAAgB;EACd,MAAM,QAAQ,SAAS;EAEvB,IAAI,CAAC,SAAS,CAAC,MAAM,UACnB;EAGF,IAAI,MAAM,eAAe,GACvB,WAAW;CAEf,GAAG,CAAC,cAAc,UAAU,CAAC;;;;;;CAO7B,IAAIA,aAAW,iBAAiB,WAC9B,QAAa,WAAW;EACtB,IAAI;EACJ;EACA,eAAe,iBAAiB;EAChC,aAAa;EACb,YAAY;EACZ;CACF,CAAC;CAGH,MAAM,aAA4B;EAChC,GAAI,QAAQ,cACR;GACE,OAAO;GACP,QAAQ;EACV,IACA,CAAC;EACL,GAAI,OACA;GACE,UAAU;GACV,OAAO;EACT,IACA,CAAC;EACL,WAAW;EACX,gBAAgB;EAChB,GAAG;CACL;CAEA,MAAM,eAA8B;EAClC,GAAI,cACA;GACE;GACA,OAAO;EACT,IACA,CAAC;EACL,GAAI,OACA;GACE,UAAU;GACV,SAAS;GACT,OAAO;GACP,GAAI,cAAc,CAAC,IAAI,EAAE,QAAQ,OAAO;EAC1C,IACA,CAAC;EACL,GAAI,SACA,EACE,cAAc,mBAAmB,MAAM,EACzC,IACA,CAAC;EACL,GAAG;CACL;CAEA,MAAM,YAAY,mBAAmB,WAAW;CAEhD,MAAM,qBACJ,aAAa,KAAA,MAAc,CAAC,mBAAmB,WAAW;CAE5D,IAAI,CAAC,mBAAmB,CAAC,oBACvB,OAAO;CAGT,MAAM,iBAAiB,gBAAgB,YAAY;;;;;CAMnD,MAAM,eAAe,cAAc,WAAW;EAC5C,GAAI,CAAC,gBAAgB,iBAAiB,CAAC;EACvC,GAAG;EACH,KAAK,gBAAgB,aAAa;EAClC,KAAK;EACL,KAAK;EACL;EACA,OAAO;EACP,QAAQ;EACR;EACA;EACA;EACA;EACA;EACA;EACA;EACA,WAAW,GAAG,uBAAuB,SAAS;EAC9C,OAAO;EACP,QAAQ;EACR,SAAS;EACT,GAAI,QAAQ,CAAC,gBAAgB,EAAE,MAAM,KAAK,IAAI,CAAC;EAC/C,GAAIA,aAAW,CAAC,gBAAgB,EAAE,SAAS,KAAK,IAAI,CAAC;EACrD,GAAI,YAAY,KAAA,KAAa,CAAC,gBAAgB,EAAE,QAAQ,IAAI,CAAC;EAC7D,GAAI,gBAAgB,KAAA,KAAa,CAAC,gBAAgB,EAAE,YAAY,IAAI,CAAC;EACrE,GAAI,CAAC,iBAAiB,gBAAgB,UAAU,sBAC5C;GACE,aAAa;GACb,aAAa;EACf,IACA,CAAC;CACP,CAAU;;;;CAKV,MAAM,QAAQ,SAAS,SACrB,qBAAC,WAAD;EAAS,WAAU;EAAnB,UAAA,CACG,QAAQ,KAAK,QAAQ,UACpB,oBAAC,UAAD;GAEE,QAAQ,OAAO;GACf,OAAO,OAAO;GACd,MAAM,OAAO;GACb,OAAO,OAAO;EACf,GALM,GAAG,OAAO,OAAO,GAAG,OAK1B,CACF,GACA,YACM;CAET,CAAA,IAAA;CAGF,MAAM,yBAAyB,aAAa,uBAAuB,KAAA;CAEnE,MAAM,sBACJ,aACA,CAAC,sBACD,iBACA,gBAAgB,UAChB,QAAQ,mBAAmB;CAE7B,OACE,qBAAC,OAAD;EACE,WAAW,GAAG,gBAAgB,kBAAkB;EAChD,OAAO;EACP,eAAa,kBAAkB,SAAS;EACxC,mBAAiB,OAAO,SAAS,KAAA;EACjC,oBAAkB,cAAc,SAAS,KAAA;EAL3C,UAAA;GAOG,sBACC,oBAAC,OAAD;IACE,WAAU;IACV,KAAK;IACL,KAAI;IACJ,eAAY;GACb,CAAA,IACC;GAEH,yBACC,oBAAC,OAAD;IAAK,WAAU;IAA4B,eAAY;IACpD,UAAA;GACE,CAAA,IACH;GAEH,qBACC,oBAAC,OAAD;IACE,WAAU;IACV,MAAM,MAAM,QAAQ,KAAA;IACpB,cAAY,OAAO,KAAA;IACnB,eAAa,MAAM,KAAA,IAAY;IAE9B,UAAA;GACE,CAAA,IAEL;EAEC;;AAET"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
const require_image_utils = require("./image.utils.cjs");
|
|
2
|
+
let react = require("react");
|
|
3
|
+
// src/components/data-display/image/use-image-state.ts
|
|
4
|
+
const createImageState = (source, fallbackSource) => {
|
|
5
|
+
return {
|
|
6
|
+
source,
|
|
7
|
+
fallbackSource,
|
|
8
|
+
usingFallback: !require_image_utils.hasImageSource(source) && require_image_utils.hasImageSource(fallbackSource),
|
|
9
|
+
status: "loading"
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
const useImageState = (source, fallbackSource) => {
|
|
13
|
+
const [state, setState] = (0, react.useState)(() => createImageState(source, fallbackSource));
|
|
14
|
+
const isCurrentSource = Object.is(state.source, source) && Object.is(state.fallbackSource, fallbackSource);
|
|
15
|
+
const usingFallback = isCurrentSource ? state.usingFallback : !require_image_utils.hasImageSource(source) && require_image_utils.hasImageSource(fallbackSource);
|
|
16
|
+
const status = isCurrentSource ? state.status : "loading";
|
|
17
|
+
return {
|
|
18
|
+
activeSource: usingFallback ? fallbackSource : source,
|
|
19
|
+
usingFallback,
|
|
20
|
+
status,
|
|
21
|
+
markLoaded: (0, react.useCallback)(() => {
|
|
22
|
+
setState({
|
|
23
|
+
source,
|
|
24
|
+
fallbackSource,
|
|
25
|
+
usingFallback,
|
|
26
|
+
status: "loaded"
|
|
27
|
+
});
|
|
28
|
+
}, [
|
|
29
|
+
source,
|
|
30
|
+
fallbackSource,
|
|
31
|
+
usingFallback
|
|
32
|
+
]),
|
|
33
|
+
markError: (0, react.useCallback)(() => {
|
|
34
|
+
setState((current) => {
|
|
35
|
+
const currentUsesFallback = Object.is(current.source, source) && Object.is(current.fallbackSource, fallbackSource) ? current.usingFallback : !require_image_utils.hasImageSource(source) && require_image_utils.hasImageSource(fallbackSource);
|
|
36
|
+
if (!currentUsesFallback && require_image_utils.hasImageSource(fallbackSource)) return {
|
|
37
|
+
source,
|
|
38
|
+
fallbackSource,
|
|
39
|
+
usingFallback: true,
|
|
40
|
+
status: "loading"
|
|
41
|
+
};
|
|
42
|
+
return {
|
|
43
|
+
source,
|
|
44
|
+
fallbackSource,
|
|
45
|
+
usingFallback: currentUsesFallback,
|
|
46
|
+
status: "error"
|
|
47
|
+
};
|
|
48
|
+
});
|
|
49
|
+
}, [source, fallbackSource])
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
exports.useImageState = useImageState;
|
|
53
|
+
|
|
54
|
+
//# sourceMappingURL=use-image-state.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-image-state.cjs","names":["hasImageSource","useState","useCallback"],"sources":["../../../../src/components/data-display/image/use-image-state.ts"],"sourcesContent":["import { useCallback, useState } from \"react\";\n\nimport type { ImageSource } from \"./image.types\";\nimport { hasImageSource } from \"./image.utils\";\n\ntype ImageStatus = \"loading\" | \"loaded\" | \"error\";\n\ntype ImageState = {\n source: ImageSource | null | undefined;\n fallbackSource: ImageSource | null | undefined;\n usingFallback: boolean;\n status: ImageStatus;\n};\n\nconst createImageState = (\n source: ImageSource | null | undefined,\n fallbackSource: ImageSource | null | undefined,\n): ImageState => {\n const usingFallback =\n !hasImageSource(source) && hasImageSource(fallbackSource);\n\n return {\n source,\n fallbackSource,\n usingFallback,\n status: \"loading\",\n };\n};\n\nconst useImageState = (\n source: ImageSource | null | undefined,\n fallbackSource: ImageSource | null | undefined,\n) => {\n const [state, setState] = useState<ImageState>(() =>\n createImageState(source, fallbackSource),\n );\n\n const isCurrentSource =\n Object.is(state.source, source) &&\n Object.is(state.fallbackSource, fallbackSource);\n\n const usingFallback = isCurrentSource\n ? state.usingFallback\n : !hasImageSource(source) && hasImageSource(fallbackSource);\n\n const status: ImageStatus = isCurrentSource ? state.status : \"loading\";\n\n const activeSource = usingFallback ? fallbackSource : source;\n\n /**\n * Marks the currently rendered source as successfully loaded.\n */\n const markLoaded = useCallback(() => {\n setState({\n source,\n fallbackSource,\n usingFallback,\n status: \"loaded\",\n });\n }, [source, fallbackSource, usingFallback]);\n\n /**\n * Switches to the fallback source or marks the image as failed.\n */\n const markError = useCallback(() => {\n setState((current) => {\n const currentIsValid =\n Object.is(current.source, source) &&\n Object.is(current.fallbackSource, fallbackSource);\n\n const currentUsesFallback = currentIsValid\n ? current.usingFallback\n : !hasImageSource(source) && hasImageSource(fallbackSource);\n\n if (!currentUsesFallback && hasImageSource(fallbackSource)) {\n return {\n source,\n fallbackSource,\n usingFallback: true,\n status: \"loading\",\n };\n }\n\n return {\n source,\n fallbackSource,\n usingFallback: currentUsesFallback,\n status: \"error\",\n };\n });\n }, [source, fallbackSource]);\n\n return {\n activeSource,\n usingFallback,\n status,\n markLoaded,\n markError,\n };\n};\n\nexport { useImageState };\nexport type { ImageStatus };\n"],"mappings":";;;AAcA,MAAM,oBACJ,QACA,mBACe;CAIf,OAAO;EACL;EACA;EACA,eALA,CAACA,oBAAAA,eAAe,MAAM,KAAKA,oBAAAA,eAAe,cAAc;EAMxD,QAAQ;CACV;AACF;AAEA,MAAM,iBACJ,QACA,mBACG;CACH,MAAM,CAAC,OAAO,aAAA,GAAYC,MAAAA,SAAAA,OACxB,iBAAiB,QAAQ,cAAc,CACzC;CAEA,MAAM,kBACJ,OAAO,GAAG,MAAM,QAAQ,MAAM,KAC9B,OAAO,GAAG,MAAM,gBAAgB,cAAc;CAEhD,MAAM,gBAAgB,kBAClB,MAAM,gBACN,CAACD,oBAAAA,eAAe,MAAM,KAAKA,oBAAAA,eAAe,cAAc;CAE5D,MAAM,SAAsB,kBAAkB,MAAM,SAAS;CA+C7D,OAAO;EACL,cA9CmB,gBAAgB,iBAAiB;EA+CpD;EACA;EACA,aAAA,GA5CiBE,MAAAA,YAAAA,OAAkB;GACnC,SAAS;IACP;IACA;IACA;IACA,QAAQ;GACV,CAAC;EACH,GAAG;GAAC;GAAQ;GAAgB;EAAa,CAqC9B;EACT,YAAA,GAjCgBA,MAAAA,YAAAA,OAAkB;GAClC,UAAU,YAAY;IAKpB,MAAM,sBAHJ,OAAO,GAAG,QAAQ,QAAQ,MAAM,KAChC,OAAO,GAAG,QAAQ,gBAAgB,cAAc,IAG9C,QAAQ,gBACR,CAACF,oBAAAA,eAAe,MAAM,KAAKA,oBAAAA,eAAe,cAAc;IAE5D,IAAI,CAAC,uBAAuBA,oBAAAA,eAAe,cAAc,GACvD,OAAO;KACL;KACA;KACA,eAAe;KACf,QAAQ;IACV;IAGF,OAAO;KACL;KACA;KACA,eAAe;KACf,QAAQ;IACV;GACF,CAAC;EACH,GAAG,CAAC,QAAQ,cAAc,CAOhB;CACV;AACF"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { hasImageSource } from "./image.utils.js";
|
|
2
|
+
import { useCallback, useState } from "react";
|
|
3
|
+
// src/components/data-display/image/use-image-state.ts
|
|
4
|
+
const createImageState = (source, fallbackSource) => {
|
|
5
|
+
return {
|
|
6
|
+
source,
|
|
7
|
+
fallbackSource,
|
|
8
|
+
usingFallback: !hasImageSource(source) && hasImageSource(fallbackSource),
|
|
9
|
+
status: "loading"
|
|
10
|
+
};
|
|
11
|
+
};
|
|
12
|
+
const useImageState = (source, fallbackSource) => {
|
|
13
|
+
const [state, setState] = useState(() => createImageState(source, fallbackSource));
|
|
14
|
+
const isCurrentSource = Object.is(state.source, source) && Object.is(state.fallbackSource, fallbackSource);
|
|
15
|
+
const usingFallback = isCurrentSource ? state.usingFallback : !hasImageSource(source) && hasImageSource(fallbackSource);
|
|
16
|
+
const status = isCurrentSource ? state.status : "loading";
|
|
17
|
+
return {
|
|
18
|
+
activeSource: usingFallback ? fallbackSource : source,
|
|
19
|
+
usingFallback,
|
|
20
|
+
status,
|
|
21
|
+
markLoaded: useCallback(() => {
|
|
22
|
+
setState({
|
|
23
|
+
source,
|
|
24
|
+
fallbackSource,
|
|
25
|
+
usingFallback,
|
|
26
|
+
status: "loaded"
|
|
27
|
+
});
|
|
28
|
+
}, [
|
|
29
|
+
source,
|
|
30
|
+
fallbackSource,
|
|
31
|
+
usingFallback
|
|
32
|
+
]),
|
|
33
|
+
markError: useCallback(() => {
|
|
34
|
+
setState((current) => {
|
|
35
|
+
const currentUsesFallback = Object.is(current.source, source) && Object.is(current.fallbackSource, fallbackSource) ? current.usingFallback : !hasImageSource(source) && hasImageSource(fallbackSource);
|
|
36
|
+
if (!currentUsesFallback && hasImageSource(fallbackSource)) return {
|
|
37
|
+
source,
|
|
38
|
+
fallbackSource,
|
|
39
|
+
usingFallback: true,
|
|
40
|
+
status: "loading"
|
|
41
|
+
};
|
|
42
|
+
return {
|
|
43
|
+
source,
|
|
44
|
+
fallbackSource,
|
|
45
|
+
usingFallback: currentUsesFallback,
|
|
46
|
+
status: "error"
|
|
47
|
+
};
|
|
48
|
+
});
|
|
49
|
+
}, [source, fallbackSource])
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
export { useImageState };
|
|
53
|
+
|
|
54
|
+
//# sourceMappingURL=use-image-state.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-image-state.js","names":[],"sources":["../../../../src/components/data-display/image/use-image-state.ts"],"sourcesContent":["import { useCallback, useState } from \"react\";\n\nimport type { ImageSource } from \"./image.types\";\nimport { hasImageSource } from \"./image.utils\";\n\ntype ImageStatus = \"loading\" | \"loaded\" | \"error\";\n\ntype ImageState = {\n source: ImageSource | null | undefined;\n fallbackSource: ImageSource | null | undefined;\n usingFallback: boolean;\n status: ImageStatus;\n};\n\nconst createImageState = (\n source: ImageSource | null | undefined,\n fallbackSource: ImageSource | null | undefined,\n): ImageState => {\n const usingFallback =\n !hasImageSource(source) && hasImageSource(fallbackSource);\n\n return {\n source,\n fallbackSource,\n usingFallback,\n status: \"loading\",\n };\n};\n\nconst useImageState = (\n source: ImageSource | null | undefined,\n fallbackSource: ImageSource | null | undefined,\n) => {\n const [state, setState] = useState<ImageState>(() =>\n createImageState(source, fallbackSource),\n );\n\n const isCurrentSource =\n Object.is(state.source, source) &&\n Object.is(state.fallbackSource, fallbackSource);\n\n const usingFallback = isCurrentSource\n ? state.usingFallback\n : !hasImageSource(source) && hasImageSource(fallbackSource);\n\n const status: ImageStatus = isCurrentSource ? state.status : \"loading\";\n\n const activeSource = usingFallback ? fallbackSource : source;\n\n /**\n * Marks the currently rendered source as successfully loaded.\n */\n const markLoaded = useCallback(() => {\n setState({\n source,\n fallbackSource,\n usingFallback,\n status: \"loaded\",\n });\n }, [source, fallbackSource, usingFallback]);\n\n /**\n * Switches to the fallback source or marks the image as failed.\n */\n const markError = useCallback(() => {\n setState((current) => {\n const currentIsValid =\n Object.is(current.source, source) &&\n Object.is(current.fallbackSource, fallbackSource);\n\n const currentUsesFallback = currentIsValid\n ? current.usingFallback\n : !hasImageSource(source) && hasImageSource(fallbackSource);\n\n if (!currentUsesFallback && hasImageSource(fallbackSource)) {\n return {\n source,\n fallbackSource,\n usingFallback: true,\n status: \"loading\",\n };\n }\n\n return {\n source,\n fallbackSource,\n usingFallback: currentUsesFallback,\n status: \"error\",\n };\n });\n }, [source, fallbackSource]);\n\n return {\n activeSource,\n usingFallback,\n status,\n markLoaded,\n markError,\n };\n};\n\nexport { useImageState };\nexport type { ImageStatus };\n"],"mappings":";;;AAcA,MAAM,oBACJ,QACA,mBACe;CAIf,OAAO;EACL;EACA;EACA,eALA,CAAC,eAAe,MAAM,KAAK,eAAe,cAAc;EAMxD,QAAQ;CACV;AACF;AAEA,MAAM,iBACJ,QACA,mBACG;CACH,MAAM,CAAC,OAAO,YAAY,eACxB,iBAAiB,QAAQ,cAAc,CACzC;CAEA,MAAM,kBACJ,OAAO,GAAG,MAAM,QAAQ,MAAM,KAC9B,OAAO,GAAG,MAAM,gBAAgB,cAAc;CAEhD,MAAM,gBAAgB,kBAClB,MAAM,gBACN,CAAC,eAAe,MAAM,KAAK,eAAe,cAAc;CAE5D,MAAM,SAAsB,kBAAkB,MAAM,SAAS;CA+C7D,OAAO;EACL,cA9CmB,gBAAgB,iBAAiB;EA+CpD;EACA;EACA,YA5CiB,kBAAkB;GACnC,SAAS;IACP;IACA;IACA;IACA,QAAQ;GACV,CAAC;EACH,GAAG;GAAC;GAAQ;GAAgB;EAAa,CAqC9B;EACT,WAjCgB,kBAAkB;GAClC,UAAU,YAAY;IAKpB,MAAM,sBAHJ,OAAO,GAAG,QAAQ,QAAQ,MAAM,KAChC,OAAO,GAAG,QAAQ,gBAAgB,cAAc,IAG9C,QAAQ,gBACR,CAAC,eAAe,MAAM,KAAK,eAAe,cAAc;IAE5D,IAAI,CAAC,uBAAuB,eAAe,cAAc,GACvD,OAAO;KACL;KACA;KACA,eAAe;KACf,QAAQ;IACV;IAGF,OAAO;KACL;KACA;KACA,eAAe;KACf,QAAQ;IACV;GACF,CAAC;EACH,GAAG,CAAC,QAAQ,cAAc,CAOhB;CACV;AACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
;/* empty css */
|
|
2
|
+
let _puzzle_ui_core = require("@puzzle-ui/core");
|
|
3
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
4
|
+
// src/components/data-display/paper/index.tsx
|
|
5
|
+
const Paper = ({ as, elevation = 1, children, className, ...rest }) => {
|
|
6
|
+
const Component = as || "div";
|
|
7
|
+
const classes = (0, _puzzle_ui_core.cn)("puzzle-paper", `elevation-${elevation}`, className);
|
|
8
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Component, {
|
|
9
|
+
className: classes,
|
|
10
|
+
...rest,
|
|
11
|
+
children
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
exports.Paper = Paper;
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=index.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["cn"],"sources":["../../../../src/components/data-display/paper/index.tsx"],"sourcesContent":["import { cn } from \"@puzzle-ui/core\";\nimport type { ComponentPropsWithRef, ElementType } from \"react\";\nimport \"./paper.css\";\n\ntype PaperOwnProps<C extends ElementType> = {\n as?: C;\n elevation?: 1 | 2 | 3 | 4 | 6 | 8 | 12 | 16 | 24;\n};\n\ntype PaperProps<C extends ElementType> = PaperOwnProps<C> &\n Omit<ComponentPropsWithRef<C>, keyof PaperOwnProps<C>>;\n\nconst Paper = <C extends ElementType = \"div\">({\n as,\n elevation = 1,\n children,\n className,\n ...rest\n}: PaperProps<C>) => {\n const Component = as || \"div\";\n const classes = cn(\"puzzle-paper\", `elevation-${elevation}`, className);\n return (\n <Component className={classes} {...rest}>\n {children}\n </Component>\n );\n};\n\nexport { Paper, type PaperProps };\n"],"mappings":";;;;AAYA,MAAM,SAAwC,EAC5C,IACA,YAAY,GACZ,UACA,WACA,GAAG,WACgB;CACnB,MAAM,YAAY,MAAM;CACxB,MAAM,WAAA,GAAUA,gBAAAA,GAAAA,CAAG,gBAAgB,aAAa,aAAa,SAAS;CACtE,OACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,WAAD;EAAW,WAAW;EAAS,GAAI;EAChC;CACQ,CAAA;AAEf"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ComponentPropsWithRef, ElementType } from "react";
|
|
2
|
+
type PaperOwnProps<C extends ElementType> = {
|
|
3
|
+
as?: C;
|
|
4
|
+
elevation?: 1 | 2 | 3 | 4 | 6 | 8 | 12 | 16 | 24;
|
|
5
|
+
};
|
|
6
|
+
type PaperProps<C extends ElementType> = PaperOwnProps<C> & Omit<ComponentPropsWithRef<C>, keyof PaperOwnProps<C>>;
|
|
7
|
+
declare const Paper: <C extends ElementType = "div">({ as, elevation, children, className, ...rest }: PaperProps<C>) => import("react").JSX.Element;
|
|
8
|
+
export { Paper, type PaperProps };
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ComponentPropsWithRef, ElementType } from "react";
|
|
2
|
+
type PaperOwnProps<C extends ElementType> = {
|
|
3
|
+
as?: C;
|
|
4
|
+
elevation?: 1 | 2 | 3 | 4 | 6 | 8 | 12 | 16 | 24;
|
|
5
|
+
};
|
|
6
|
+
type PaperProps<C extends ElementType> = PaperOwnProps<C> & Omit<ComponentPropsWithRef<C>, keyof PaperOwnProps<C>>;
|
|
7
|
+
declare const Paper: <C extends ElementType = "div">({ as, elevation, children, className, ...rest }: PaperProps<C>) => import("react").JSX.Element;
|
|
8
|
+
export { Paper, type PaperProps };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import "./paper.css";
|
|
2
|
+
import { cn } from "@puzzle-ui/core";
|
|
3
|
+
import { jsx } from "react/jsx-runtime";
|
|
4
|
+
// src/components/data-display/paper/index.tsx
|
|
5
|
+
const Paper = ({ as, elevation = 1, children, className, ...rest }) => {
|
|
6
|
+
const Component = as || "div";
|
|
7
|
+
const classes = cn("puzzle-paper", `elevation-${elevation}`, className);
|
|
8
|
+
return /* @__PURE__ */ jsx(Component, {
|
|
9
|
+
className: classes,
|
|
10
|
+
...rest,
|
|
11
|
+
children
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
export { Paper };
|
|
15
|
+
|
|
16
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../../src/components/data-display/paper/index.tsx"],"sourcesContent":["import { cn } from \"@puzzle-ui/core\";\nimport type { ComponentPropsWithRef, ElementType } from \"react\";\nimport \"./paper.css\";\n\ntype PaperOwnProps<C extends ElementType> = {\n as?: C;\n elevation?: 1 | 2 | 3 | 4 | 6 | 8 | 12 | 16 | 24;\n};\n\ntype PaperProps<C extends ElementType> = PaperOwnProps<C> &\n Omit<ComponentPropsWithRef<C>, keyof PaperOwnProps<C>>;\n\nconst Paper = <C extends ElementType = \"div\">({\n as,\n elevation = 1,\n children,\n className,\n ...rest\n}: PaperProps<C>) => {\n const Component = as || \"div\";\n const classes = cn(\"puzzle-paper\", `elevation-${elevation}`, className);\n return (\n <Component className={classes} {...rest}>\n {children}\n </Component>\n );\n};\n\nexport { Paper, type PaperProps };\n"],"mappings":";;;;AAYA,MAAM,SAAwC,EAC5C,IACA,YAAY,GACZ,UACA,WACA,GAAG,WACgB;CACnB,MAAM,YAAY,MAAM;CACxB,MAAM,UAAU,GAAG,gBAAgB,aAAa,aAAa,SAAS;CACtE,OACE,oBAAC,WAAD;EAAW,WAAW;EAAS,GAAI;EAChC;CACQ,CAAA;AAEf"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
.puzzle-paper {
|
|
2
|
+
background: var(--puzzle-color-surface, #fff);
|
|
3
|
+
border-radius: var(--puzzle-radius-md, .5rem);
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
.puzzle-paper.elevation-1 {
|
|
7
|
+
box-shadow: var(--puzzle-elevation-1);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
.puzzle-paper.elevation-2 {
|
|
11
|
+
box-shadow: var(--puzzle-elevation-2);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
.puzzle-paper.elevation-3 {
|
|
15
|
+
box-shadow: var(--puzzle-elevation-3);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.puzzle-paper.elevation-4 {
|
|
19
|
+
box-shadow: var(--puzzle-elevation-4);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
.puzzle-paper.elevation-6 {
|
|
23
|
+
box-shadow: var(--puzzle-elevation-6);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
.puzzle-paper.elevation-8 {
|
|
27
|
+
box-shadow: var(--puzzle-elevation-8);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
.puzzle-paper.elevation-12 {
|
|
31
|
+
box-shadow: var(--puzzle-elevation-12);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
.puzzle-paper.elevation-16 {
|
|
35
|
+
box-shadow: var(--puzzle-elevation-16);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.puzzle-paper.elevation-24 {
|
|
39
|
+
box-shadow: var(--puzzle-elevation-24);
|
|
40
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
;/* empty css */
|
|
2
|
+
const require_utils = require("./utils.cjs");
|
|
3
|
+
let _puzzle_ui_core = require("@puzzle-ui/core");
|
|
4
|
+
require("react");
|
|
5
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
6
|
+
// src/components/data-display/progress/circular-progress.tsx
|
|
7
|
+
const getDimension = (size) => {
|
|
8
|
+
switch (size) {
|
|
9
|
+
case "sm": return 24 + 2 * getStrokeWidth(size);
|
|
10
|
+
case "md": return 44 + 2 * getStrokeWidth(size);
|
|
11
|
+
case "lg": return 64 + 2 * getStrokeWidth(size);
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
const getHalfDimension = (size) => {
|
|
15
|
+
return .5 * getDimension(size) - getStrokeWidth(size);
|
|
16
|
+
};
|
|
17
|
+
const getStrokeWidth = (size) => {
|
|
18
|
+
switch (size) {
|
|
19
|
+
case "sm": return 2;
|
|
20
|
+
case "md": return 3.6;
|
|
21
|
+
case "lg": return 4;
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
const getCenter = (size) => {
|
|
25
|
+
switch (size) {
|
|
26
|
+
case "sm": return 12 + getStrokeWidth(size);
|
|
27
|
+
case "md": return 22 + getStrokeWidth(size);
|
|
28
|
+
case "lg": return 32 + getStrokeWidth(size);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
const getStrokeDasharray = (size) => {
|
|
32
|
+
switch (size) {
|
|
33
|
+
case "sm": return 84;
|
|
34
|
+
case "md": return 128;
|
|
35
|
+
case "lg": return 192;
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
const CircularProgress = ({ color, className, "aria-label": ariaLabel = "Loading...", value: rawValue, size = "md", showTrack = true, ...props }) => {
|
|
39
|
+
const value = require_utils.normalizeProgressValue(rawValue);
|
|
40
|
+
const classes = (0, _puzzle_ui_core.cn)("puzzle-circular-progress", value === void 0 && "puzzle-circular-progress-indeterminate", className);
|
|
41
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
|
|
42
|
+
...props,
|
|
43
|
+
...require_utils.getProgressAriaProps(value),
|
|
44
|
+
className: classes,
|
|
45
|
+
"aria-label": ariaLabel,
|
|
46
|
+
color: color ?? "var(--puzzle-color-primary)",
|
|
47
|
+
width: getDimension(size),
|
|
48
|
+
height: getDimension(size),
|
|
49
|
+
viewBox: `0 0 ${getDimension(size)} ${getDimension(size)}`,
|
|
50
|
+
children: [showTrack && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("circle", {
|
|
51
|
+
className: "puzzle-circular-progress-track",
|
|
52
|
+
cx: getCenter(size),
|
|
53
|
+
cy: getCenter(size),
|
|
54
|
+
r: getHalfDimension(size),
|
|
55
|
+
fill: "none",
|
|
56
|
+
stroke: "currentColor",
|
|
57
|
+
strokeWidth: getStrokeWidth(size),
|
|
58
|
+
"aria-hidden": "true"
|
|
59
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("circle", {
|
|
60
|
+
className: "puzzle-circular-progress-circle",
|
|
61
|
+
cx: getCenter(size),
|
|
62
|
+
cy: getCenter(size),
|
|
63
|
+
r: getHalfDimension(size),
|
|
64
|
+
fill: "none",
|
|
65
|
+
stroke: "currentColor",
|
|
66
|
+
strokeWidth: getStrokeWidth(size),
|
|
67
|
+
strokeLinecap: "round",
|
|
68
|
+
strokeDasharray: getStrokeDasharray(size),
|
|
69
|
+
style: { strokeDashoffset: value !== void 0 ? `${getStrokeDasharray(size) - value / 100 * getStrokeDasharray(size)}px` : "32px" }
|
|
70
|
+
})]
|
|
71
|
+
});
|
|
72
|
+
};
|
|
73
|
+
exports.CircularProgress = CircularProgress;
|
|
74
|
+
|
|
75
|
+
//# sourceMappingURL=circular-progress.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"circular-progress.cjs","names":["normalizeProgressValue","cn","getProgressAriaProps"],"sources":["../../../../src/components/data-display/progress/circular-progress.tsx"],"sourcesContent":["import { type ComponentPropsWithRef } from \"react\";\nimport \"./circular-progress.css\";\nimport { cn } from \"@puzzle-ui/core\";\nimport type { ProgressProps } from \"./types\";\nimport { getProgressAriaProps, normalizeProgressValue } from \"./utils\";\n\ntype CircularProgressSize = \"sm\" | \"md\" | \"lg\";\n\ntype CircularProgressOwnProps = ProgressProps & {\n size?: CircularProgressSize;\n};\n\ntype CircularProgressProps = CircularProgressOwnProps &\n Omit<ComponentPropsWithRef<\"svg\">, keyof CircularProgressOwnProps>;\n\nconst getDimension = (size: CircularProgressSize) => {\n switch (size) {\n case \"sm\":\n return 24 + 2 * getStrokeWidth(size);\n case \"md\":\n return 44 + 2 * getStrokeWidth(size);\n case \"lg\":\n return 64 + 2 * getStrokeWidth(size);\n }\n};\n\nconst getHalfDimension = (size: CircularProgressSize) => {\n return 0.5 * getDimension(size) - getStrokeWidth(size);\n};\n\nconst getStrokeWidth = (size: CircularProgressSize) => {\n switch (size) {\n case \"sm\":\n return 2;\n case \"md\":\n return 3.6;\n case \"lg\":\n return 4;\n }\n};\n\nconst getCenter = (size: CircularProgressSize) => {\n switch (size) {\n case \"sm\":\n return 12 + getStrokeWidth(size);\n case \"md\":\n return 22 + getStrokeWidth(size);\n case \"lg\":\n return 32 + getStrokeWidth(size);\n }\n};\n\nconst getStrokeDasharray = (size: CircularProgressSize) => {\n switch (size) {\n case \"sm\":\n return 84;\n case \"md\":\n return 128;\n case \"lg\":\n return 192;\n }\n};\n\nconst CircularProgress = ({\n color,\n className,\n \"aria-label\": ariaLabel = \"Loading...\",\n value: rawValue,\n size = \"md\",\n showTrack = true,\n ...props\n}: CircularProgressProps) => {\n const value = normalizeProgressValue(rawValue);\n const classes = cn(\n \"puzzle-circular-progress\",\n value === undefined && \"puzzle-circular-progress-indeterminate\",\n className,\n );\n return (\n <svg\n {...props}\n {...getProgressAriaProps(value)}\n className={classes}\n aria-label={ariaLabel}\n color={color ?? \"var(--puzzle-color-primary)\"}\n width={getDimension(size)}\n height={getDimension(size)}\n viewBox={`0 0 ${getDimension(size)} ${getDimension(size)}`}\n >\n {showTrack && (\n <circle\n className=\"puzzle-circular-progress-track\"\n cx={getCenter(size)}\n cy={getCenter(size)}\n r={getHalfDimension(size)}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={getStrokeWidth(size)}\n aria-hidden=\"true\"\n />\n )}\n <circle\n className=\"puzzle-circular-progress-circle\"\n cx={getCenter(size)}\n cy={getCenter(size)}\n r={getHalfDimension(size)}\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={getStrokeWidth(size)}\n strokeLinecap=\"round\"\n strokeDasharray={getStrokeDasharray(size)}\n style={{\n strokeDashoffset:\n value !== undefined\n ? `${getStrokeDasharray(size) - (value / 100) * getStrokeDasharray(size)}px`\n : \"32px\",\n }}\n />\n </svg>\n );\n};\n\nexport {\n CircularProgress,\n type CircularProgressProps,\n type CircularProgressSize,\n};\n"],"mappings":";;;;;;AAeA,MAAM,gBAAgB,SAA+B;CACnD,QAAQ,MAAR;EACE,KAAK,MACH,OAAO,KAAK,IAAI,eAAe,IAAI;EACrC,KAAK,MACH,OAAO,KAAK,IAAI,eAAe,IAAI;EACrC,KAAK,MACH,OAAO,KAAK,IAAI,eAAe,IAAI;CACvC;AACF;AAEA,MAAM,oBAAoB,SAA+B;CACvD,OAAO,KAAM,aAAa,IAAI,IAAI,eAAe,IAAI;AACvD;AAEA,MAAM,kBAAkB,SAA+B;CACrD,QAAQ,MAAR;EACE,KAAK,MACH,OAAO;EACT,KAAK,MACH,OAAO;EACT,KAAK,MACH,OAAO;CACX;AACF;AAEA,MAAM,aAAa,SAA+B;CAChD,QAAQ,MAAR;EACE,KAAK,MACH,OAAO,KAAK,eAAe,IAAI;EACjC,KAAK,MACH,OAAO,KAAK,eAAe,IAAI;EACjC,KAAK,MACH,OAAO,KAAK,eAAe,IAAI;CACnC;AACF;AAEA,MAAM,sBAAsB,SAA+B;CACzD,QAAQ,MAAR;EACE,KAAK,MACH,OAAO;EACT,KAAK,MACH,OAAO;EACT,KAAK,MACH,OAAO;CACX;AACF;AAEA,MAAM,oBAAoB,EACxB,OACA,WACA,cAAc,YAAY,cAC1B,OAAO,UACP,OAAO,MACP,YAAY,MACZ,GAAG,YACwB;CAC3B,MAAM,QAAQA,cAAAA,uBAAuB,QAAQ;CAC7C,MAAM,WAAA,GAAUC,gBAAAA,GAAAA,CACd,4BACA,UAAU,KAAA,KAAa,0CACvB,SACF;CACA,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAC,OAAD;EACE,GAAI;EACJ,GAAIC,cAAAA,qBAAqB,KAAK;EAC9B,WAAW;EACX,cAAY;EACZ,OAAO,SAAS;EAChB,OAAO,aAAa,IAAI;EACxB,QAAQ,aAAa,IAAI;EACzB,SAAS,OAAO,aAAa,IAAI,EAAE,GAAG,aAAa,IAAI;EARzD,UAAA,CAUG,aACC,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;GACE,WAAU;GACV,IAAI,UAAU,IAAI;GAClB,IAAI,UAAU,IAAI;GAClB,GAAG,iBAAiB,IAAI;GACxB,MAAK;GACL,QAAO;GACP,aAAa,eAAe,IAAI;GAChC,eAAY;EACb,CAAA,GAEH,iBAAA,GAAA,kBAAA,IAAA,CAAC,UAAD;GACE,WAAU;GACV,IAAI,UAAU,IAAI;GAClB,IAAI,UAAU,IAAI;GAClB,GAAG,iBAAiB,IAAI;GACxB,MAAK;GACL,QAAO;GACP,aAAa,eAAe,IAAI;GAChC,eAAc;GACd,iBAAiB,mBAAmB,IAAI;GACxC,OAAO,EACL,kBACE,UAAU,KAAA,IACN,GAAG,mBAAmB,IAAI,IAAK,QAAQ,MAAO,mBAAmB,IAAI,EAAE,MACvE,OACR;EACD,CAAA,CACE;;AAET"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
.puzzle-circular-progress {
|
|
2
|
+
transform: rotate(-90deg);
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
.puzzle-circular-progress-indeterminate {
|
|
6
|
+
animation: 1s cubic-bezier(.5, 0, .5, 1) infinite puzzle-circular-progress-rotate;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.puzzle-circular-progress-track {
|
|
10
|
+
stroke: color-mix(in srgb, currentColor, transparent 80%);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
@keyframes puzzle-circular-progress-rotate {
|
|
14
|
+
0% {
|
|
15
|
+
transform: rotate(0);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
100% {
|
|
19
|
+
transform: rotate(360deg);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ProgressProps } from "./types.cjs";
|
|
2
|
+
import { ComponentPropsWithRef } from "react";
|
|
3
|
+
type CircularProgressSize = "sm" | "md" | "lg";
|
|
4
|
+
type CircularProgressOwnProps = ProgressProps & {
|
|
5
|
+
size?: CircularProgressSize;
|
|
6
|
+
};
|
|
7
|
+
type CircularProgressProps = CircularProgressOwnProps & Omit<ComponentPropsWithRef<"svg">, keyof CircularProgressOwnProps>;
|
|
8
|
+
declare const CircularProgress: ({ color, className, "aria-label": ariaLabel, value: rawValue, size, showTrack, ...props }: CircularProgressProps) => import("react").JSX.Element;
|
|
9
|
+
export { CircularProgress, type CircularProgressProps, type CircularProgressSize };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { ProgressProps } from "./types.js";
|
|
2
|
+
import { ComponentPropsWithRef } from "react";
|
|
3
|
+
type CircularProgressSize = "sm" | "md" | "lg";
|
|
4
|
+
type CircularProgressOwnProps = ProgressProps & {
|
|
5
|
+
size?: CircularProgressSize;
|
|
6
|
+
};
|
|
7
|
+
type CircularProgressProps = CircularProgressOwnProps & Omit<ComponentPropsWithRef<"svg">, keyof CircularProgressOwnProps>;
|
|
8
|
+
declare const CircularProgress: ({ color, className, "aria-label": ariaLabel, value: rawValue, size, showTrack, ...props }: CircularProgressProps) => import("react").JSX.Element;
|
|
9
|
+
export { CircularProgress, type CircularProgressProps, type CircularProgressSize };
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import "./circular-progress.css";
|
|
2
|
+
import { getProgressAriaProps, normalizeProgressValue } from "./utils.js";
|
|
3
|
+
import { cn } from "@puzzle-ui/core";
|
|
4
|
+
import "react";
|
|
5
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
6
|
+
// src/components/data-display/progress/circular-progress.tsx
|
|
7
|
+
const getDimension = (size) => {
|
|
8
|
+
switch (size) {
|
|
9
|
+
case "sm": return 24 + 2 * getStrokeWidth(size);
|
|
10
|
+
case "md": return 44 + 2 * getStrokeWidth(size);
|
|
11
|
+
case "lg": return 64 + 2 * getStrokeWidth(size);
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
const getHalfDimension = (size) => {
|
|
15
|
+
return .5 * getDimension(size) - getStrokeWidth(size);
|
|
16
|
+
};
|
|
17
|
+
const getStrokeWidth = (size) => {
|
|
18
|
+
switch (size) {
|
|
19
|
+
case "sm": return 2;
|
|
20
|
+
case "md": return 3.6;
|
|
21
|
+
case "lg": return 4;
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
const getCenter = (size) => {
|
|
25
|
+
switch (size) {
|
|
26
|
+
case "sm": return 12 + getStrokeWidth(size);
|
|
27
|
+
case "md": return 22 + getStrokeWidth(size);
|
|
28
|
+
case "lg": return 32 + getStrokeWidth(size);
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
const getStrokeDasharray = (size) => {
|
|
32
|
+
switch (size) {
|
|
33
|
+
case "sm": return 84;
|
|
34
|
+
case "md": return 128;
|
|
35
|
+
case "lg": return 192;
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
const CircularProgress = ({ color, className, "aria-label": ariaLabel = "Loading...", value: rawValue, size = "md", showTrack = true, ...props }) => {
|
|
39
|
+
const value = normalizeProgressValue(rawValue);
|
|
40
|
+
const classes = cn("puzzle-circular-progress", value === void 0 && "puzzle-circular-progress-indeterminate", className);
|
|
41
|
+
return /* @__PURE__ */ jsxs("svg", {
|
|
42
|
+
...props,
|
|
43
|
+
...getProgressAriaProps(value),
|
|
44
|
+
className: classes,
|
|
45
|
+
"aria-label": ariaLabel,
|
|
46
|
+
color: color ?? "var(--puzzle-color-primary)",
|
|
47
|
+
width: getDimension(size),
|
|
48
|
+
height: getDimension(size),
|
|
49
|
+
viewBox: `0 0 ${getDimension(size)} ${getDimension(size)}`,
|
|
50
|
+
children: [showTrack && /* @__PURE__ */ jsx("circle", {
|
|
51
|
+
className: "puzzle-circular-progress-track",
|
|
52
|
+
cx: getCenter(size),
|
|
53
|
+
cy: getCenter(size),
|
|
54
|
+
r: getHalfDimension(size),
|
|
55
|
+
fill: "none",
|
|
56
|
+
stroke: "currentColor",
|
|
57
|
+
strokeWidth: getStrokeWidth(size),
|
|
58
|
+
"aria-hidden": "true"
|
|
59
|
+
}), /* @__PURE__ */ jsx("circle", {
|
|
60
|
+
className: "puzzle-circular-progress-circle",
|
|
61
|
+
cx: getCenter(size),
|
|
62
|
+
cy: getCenter(size),
|
|
63
|
+
r: getHalfDimension(size),
|
|
64
|
+
fill: "none",
|
|
65
|
+
stroke: "currentColor",
|
|
66
|
+
strokeWidth: getStrokeWidth(size),
|
|
67
|
+
strokeLinecap: "round",
|
|
68
|
+
strokeDasharray: getStrokeDasharray(size),
|
|
69
|
+
style: { strokeDashoffset: value !== void 0 ? `${getStrokeDasharray(size) - value / 100 * getStrokeDasharray(size)}px` : "32px" }
|
|
70
|
+
})]
|
|
71
|
+
});
|
|
72
|
+
};
|
|
73
|
+
export { CircularProgress };
|
|
74
|
+
|
|
75
|
+
//# sourceMappingURL=circular-progress.js.map
|