solid-tom-ui 1.0.7 → 1.0.10
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 +246 -246
- package/dist/README.md +246 -0
- package/dist/components/avatar/avatar.js.map +1 -0
- package/dist/components/avatar/index.d.ts +3 -0
- package/{components → dist/components}/avatar/index.d.ts.map +1 -1
- package/dist/components/badge/badge.js.map +1 -0
- package/dist/components/breadcrumb/breadcrumb.js.map +1 -0
- package/dist/components/button/button.js.map +1 -0
- package/dist/components/button/index.d.ts +3 -0
- package/{components → dist/components}/button/index.d.ts.map +1 -1
- package/dist/components/carousel/carousel.js.map +1 -0
- package/dist/components/chat-bubble/chatBubble.js.map +1 -0
- package/dist/components/checkbox/checkbox.js.map +1 -0
- package/dist/components/collapse/collapse.js.map +1 -0
- package/dist/components/collapse/index.d.ts +3 -0
- package/{components → dist/components}/collapse/index.d.ts.map +1 -1
- package/dist/components/context-menu/context-menu.js.map +1 -0
- package/dist/components/context-menu/context-menu.store.js.map +1 -0
- package/dist/components/divider/divider.js.map +1 -0
- package/dist/components/dropdown/dropdown.js.map +1 -0
- package/dist/components/dropdown/dropdown.store.js.map +1 -0
- package/dist/components/float-button/float-button.js.map +1 -0
- package/dist/components/float-button/index.d.ts +3 -0
- package/{components → dist/components}/float-button/index.d.ts.map +1 -1
- package/dist/components/hover-3d-image/hover-3d-image.js.map +1 -0
- package/dist/components/image-preview/image-preview.js.map +1 -0
- package/dist/components/input/index.d.ts +3 -0
- package/dist/components/input/index.d.ts.map +1 -0
- package/dist/components/input/input.js.map +1 -0
- package/dist/components/input/input.utils.js.map +1 -0
- package/dist/components/input/variants/input-color.js.map +1 -0
- package/dist/components/input/variants/input-date.js.map +1 -0
- package/dist/components/input/variants/input-number.js.map +1 -0
- package/dist/components/input/variants/input-otp.js.map +1 -0
- package/dist/components/input/variants/input-password.js.map +1 -0
- package/dist/components/input/variants/input-radio.js.map +1 -0
- package/dist/components/input/variants/input-range.js.map +1 -0
- package/dist/components/input/variants/input-text.js.map +1 -0
- package/dist/components/input/variants/input-textarea.js.map +1 -0
- package/dist/components/loading/loading.js.map +1 -0
- package/dist/components/mansory/mansory.js.map +1 -0
- package/dist/components/menu/index.d.ts +4 -0
- package/{components → dist/components}/menu/index.d.ts.map +1 -1
- package/dist/components/menu/menu.js.map +1 -0
- package/{components → dist/components}/menu/menu.types.d.ts +7 -7
- package/{components → dist/components}/menu/menu.types.d.ts.map +1 -1
- package/dist/components/modal/modal.js.map +1 -0
- package/dist/components/modal/modalContext.js.map +1 -0
- package/dist/components/pagination/pagination.js.map +1 -0
- package/dist/components/progress-bar/progress-bar.js.map +1 -0
- package/dist/components/qr-code/qr-code.js.map +1 -0
- package/dist/components/rating/index.d.ts +3 -0
- package/{components → dist/components}/rating/index.d.ts.map +1 -1
- package/dist/components/select/select.js.map +1 -0
- package/dist/components/select-zone/select-zone.js.map +1 -0
- package/dist/components/skeleton/skeleton.js.map +1 -0
- package/dist/components/slider/index.d.ts +3 -0
- package/{components → dist/components}/slider/index.d.ts.map +1 -1
- package/dist/components/slider/slider.js.map +1 -0
- package/dist/components/splitter/splitter.js.map +1 -0
- package/dist/components/steps/steps.js.map +1 -0
- package/dist/components/swap/swap.js.map +1 -0
- package/dist/components/switch/switch.js.map +1 -0
- package/dist/components/tab/tab.js.map +1 -0
- package/dist/components/table/table.js.map +1 -0
- package/dist/components/timeline/timeline.js.map +1 -0
- package/dist/components/toast/icons/ErrorIcon.js.map +1 -0
- package/dist/components/toast/icons/IconCircle.js.map +1 -0
- package/dist/components/toast/icons/InfoIcon.js.map +1 -0
- package/dist/components/toast/icons/LoaderIcon.js.map +1 -0
- package/dist/components/toast/icons/SuccessIcon.js.map +1 -0
- package/dist/components/toast/icons/WarningIcon.js.map +1 -0
- package/dist/components/toast/toast.js.map +1 -0
- package/dist/components/toast/toast.store.js.map +1 -0
- package/dist/components/tooltip/tooltip.js.map +1 -0
- package/{components → dist/components}/tour/tour.d.ts.map +1 -1
- package/{components → dist/components}/tour/tour.js +1 -1
- package/dist/components/tour/tour.js.map +1 -0
- package/dist/components/upload/upload.js.map +1 -0
- package/dist/components/z-index/z-index.context.js.map +1 -0
- package/dist/components/z-index/z-index.js.map +1 -0
- package/dist/components/z-index/z-index.store.js.map +1 -0
- package/dist/components/z-index/z-index.types.js.map +1 -0
- package/dist/package.json +45 -0
- package/dist/skill/avatar.skill.md.txt +255 -0
- package/dist/skill/badge.skill.md.txt +223 -0
- package/dist/skill/blank.skill.md.txt +0 -0
- package/dist/skill/breadcrumb.skill.md.txt +177 -0
- package/dist/skill/button.skill.md.txt +198 -0
- package/dist/skill/carousel.skill.md.txt +406 -0
- package/dist/skill/chat-bubble.skill.md.txt +342 -0
- package/dist/skill/checkbox.skill.md.txt +326 -0
- package/dist/skill/code-preview.skill.md.txt +240 -0
- package/dist/skill/collapse.skill.md.txt +329 -0
- package/dist/skill/context-menu.skill.md.txt +233 -0
- package/dist/skill/diff.skill.md.txt +244 -0
- package/dist/skill/divider.skill.md.txt +151 -0
- package/dist/skill/doc.skill.md.txt +191 -0
- package/dist/skill/drawer.skill.md.txt +157 -0
- package/dist/skill/dropdown.skill.md.txt +198 -0
- package/dist/skill/float-button.skill.md.txt +315 -0
- package/dist/skill/hover-3d-image.skill.md.txt +120 -0
- package/dist/skill/iframe.skill.md.txt +114 -0
- package/dist/skill/image-preview.skill.md.txt +162 -0
- package/dist/skill/indicator.skill.md.txt +60 -0
- package/dist/skill/input.skill.md.txt +489 -0
- package/dist/skill/loading.skill.md.txt +127 -0
- package/dist/skill/mansory.skill.md.txt +0 -0
- package/dist/skill/menu.skill.md.txt +476 -0
- package/dist/skill/modal.skill.md.txt +359 -0
- package/dist/skill/pagination.skill.md.txt +405 -0
- package/dist/skill/progress-bar.skill.md.txt +207 -0
- package/dist/skill/qr-code.skill.md.txt +136 -0
- package/dist/skill/rating.skill.md.txt +167 -0
- package/dist/skill/select-zone.skill.md.txt +93 -0
- package/dist/skill/select.skill.md.txt +663 -0
- package/dist/skill/skeleton.skill.md.txt +192 -0
- package/dist/skill/slider.skill.md.txt +404 -0
- package/dist/skill/splitter.skill.md.txt +411 -0
- package/dist/skill/steps.skill.md.txt +264 -0
- package/dist/skill/swap.skill.md.txt +139 -0
- package/dist/skill/switch.skill.md.txt +191 -0
- package/dist/skill/tab.skill.md.txt +484 -0
- package/dist/skill/table.example.header.md.txt +667 -0
- package/dist/skill/table.skill.md.txt +1407 -0
- package/dist/skill/text-rotate.skill.md.txt +186 -0
- package/dist/skill/timeline.skill.md.txt +247 -0
- package/dist/skill/toast.skill.md.txt +531 -0
- package/dist/skill/tooltip.skill.md.txt +222 -0
- package/dist/skill/tour.skill.md.txt +156 -0
- package/dist/skill/upload.skill.md.txt +358 -0
- package/dist/skill/z-index.skill.md.txt +0 -0
- package/{solid-ui.css → dist/solid-ui.css} +2 -2
- package/dist/utils/cn.js.map +1 -0
- package/dist/utils/element-tracker.js.map +1 -0
- package/dist/utils/helper.js.map +1 -0
- package/dist/utils/hoc.js.map +1 -0
- package/package.json +101 -7
- package/components/avatar/avatar.js.map +0 -1
- package/components/avatar/index.d.ts +0 -2
- package/components/badge/badge.js.map +0 -1
- package/components/breadcrumb/breadcrumb.js.map +0 -1
- package/components/button/button.js.map +0 -1
- package/components/button/index.d.ts +0 -2
- package/components/carousel/carousel.js.map +0 -1
- package/components/chat-bubble/chatBubble.js.map +0 -1
- package/components/checkbox/checkbox.js.map +0 -1
- package/components/collapse/collapse.js.map +0 -1
- package/components/collapse/index.d.ts +0 -2
- package/components/context-menu/context-menu.js.map +0 -1
- package/components/context-menu/context-menu.store.js.map +0 -1
- package/components/divider/divider.js.map +0 -1
- package/components/dropdown/dropdown.js.map +0 -1
- package/components/dropdown/dropdown.store.js.map +0 -1
- package/components/float-button/float-button.js.map +0 -1
- package/components/float-button/index.d.ts +0 -2
- package/components/hover-3d-image/hover-3d-image.js.map +0 -1
- package/components/image-preview/image-preview.js.map +0 -1
- package/components/input/index.d.ts +0 -2
- package/components/input/index.d.ts.map +0 -1
- package/components/input/input.js.map +0 -1
- package/components/input/input.utils.js.map +0 -1
- package/components/input/variants/input-color.js.map +0 -1
- package/components/input/variants/input-date.js.map +0 -1
- package/components/input/variants/input-number.js.map +0 -1
- package/components/input/variants/input-otp.js.map +0 -1
- package/components/input/variants/input-password.js.map +0 -1
- package/components/input/variants/input-radio.js.map +0 -1
- package/components/input/variants/input-range.js.map +0 -1
- package/components/input/variants/input-text.js.map +0 -1
- package/components/input/variants/input-textarea.js.map +0 -1
- package/components/loading/loading.js.map +0 -1
- package/components/mansory/mansory.js.map +0 -1
- package/components/menu/index.d.ts +0 -4
- package/components/menu/menu.js.map +0 -1
- package/components/modal/modal.js.map +0 -1
- package/components/modal/modalContext.js.map +0 -1
- package/components/pagination/pagination.js.map +0 -1
- package/components/progress-bar/progress-bar.js.map +0 -1
- package/components/qr-code/qr-code.js.map +0 -1
- package/components/rating/index.d.ts +0 -2
- package/components/select/select.js.map +0 -1
- package/components/select-zone/select-zone.js.map +0 -1
- package/components/skeleton/skeleton.js.map +0 -1
- package/components/slider/index.d.ts +0 -2
- package/components/slider/slider.js.map +0 -1
- package/components/splitter/splitter.js.map +0 -1
- package/components/steps/steps.js.map +0 -1
- package/components/swap/swap.js.map +0 -1
- package/components/switch/switch.js.map +0 -1
- package/components/tab/tab.js.map +0 -1
- package/components/table/table.js.map +0 -1
- package/components/timeline/timeline.js.map +0 -1
- package/components/toast/icons/ErrorIcon.js.map +0 -1
- package/components/toast/icons/IconCircle.js.map +0 -1
- package/components/toast/icons/InfoIcon.js.map +0 -1
- package/components/toast/icons/LoaderIcon.js.map +0 -1
- package/components/toast/icons/SuccessIcon.js.map +0 -1
- package/components/toast/icons/WarningIcon.js.map +0 -1
- package/components/toast/toast.js.map +0 -1
- package/components/toast/toast.store.js.map +0 -1
- package/components/tooltip/tooltip.js.map +0 -1
- package/components/tour/tour.js.map +0 -1
- package/components/upload/upload.js.map +0 -1
- package/components/z-index/z-index.context.js.map +0 -1
- package/components/z-index/z-index.js.map +0 -1
- package/components/z-index/z-index.store.js.map +0 -1
- package/components/z-index/z-index.types.js.map +0 -1
- package/utils/cn.js.map +0 -1
- package/utils/element-tracker.js.map +0 -1
- package/utils/helper.js.map +0 -1
- package/utils/hoc.js.map +0 -1
- package/workspace.code-workspace +0 -8
- /package/{components → dist/components}/avatar/avatar.d.ts +0 -0
- /package/{components → dist/components}/avatar/avatar.d.ts.map +0 -0
- /package/{components → dist/components}/avatar/avatar.js +0 -0
- /package/{components → dist/components}/avatar/avatar.types.d.ts +0 -0
- /package/{components → dist/components}/avatar/avatar.types.d.ts.map +0 -0
- /package/{components → dist/components}/badge/badge.d.ts +0 -0
- /package/{components → dist/components}/badge/badge.d.ts.map +0 -0
- /package/{components → dist/components}/badge/badge.js +0 -0
- /package/{components → dist/components}/badge/badge.types.d.ts +0 -0
- /package/{components → dist/components}/badge/badge.types.d.ts.map +0 -0
- /package/{components → dist/components}/badge/index.d.ts +0 -0
- /package/{components → dist/components}/badge/index.d.ts.map +0 -0
- /package/{components → dist/components}/blank/blank.d.ts +0 -0
- /package/{components → dist/components}/blank/blank.d.ts.map +0 -0
- /package/{components → dist/components}/blank/index.d.ts +0 -0
- /package/{components → dist/components}/blank/index.d.ts.map +0 -0
- /package/{components → dist/components}/breadcrumb/breadcrumb.d.ts +0 -0
- /package/{components → dist/components}/breadcrumb/breadcrumb.d.ts.map +0 -0
- /package/{components → dist/components}/breadcrumb/breadcrumb.js +0 -0
- /package/{components → dist/components}/breadcrumb/index.d.ts +0 -0
- /package/{components → dist/components}/breadcrumb/index.d.ts.map +0 -0
- /package/{components → dist/components}/button/button.d.ts +0 -0
- /package/{components → dist/components}/button/button.d.ts.map +0 -0
- /package/{components → dist/components}/button/button.js +0 -0
- /package/{components → dist/components}/button/button.types.d.ts +0 -0
- /package/{components → dist/components}/button/button.types.d.ts.map +0 -0
- /package/{components → dist/components}/carousel/carousel.d.ts +0 -0
- /package/{components → dist/components}/carousel/carousel.d.ts.map +0 -0
- /package/{components → dist/components}/carousel/carousel.js +0 -0
- /package/{components → dist/components}/carousel/carousel.types.d.ts +0 -0
- /package/{components → dist/components}/carousel/carousel.types.d.ts.map +0 -0
- /package/{components → dist/components}/carousel/index.d.ts +0 -0
- /package/{components → dist/components}/carousel/index.d.ts.map +0 -0
- /package/{components → dist/components}/chat-bubble/chatBubble.d.ts +0 -0
- /package/{components → dist/components}/chat-bubble/chatBubble.d.ts.map +0 -0
- /package/{components → dist/components}/chat-bubble/chatBubble.js +0 -0
- /package/{components → dist/components}/chat-bubble/chatBubble.type.d.ts +0 -0
- /package/{components → dist/components}/chat-bubble/chatBubble.type.d.ts.map +0 -0
- /package/{components → dist/components}/chat-bubble/index.d.ts +0 -0
- /package/{components → dist/components}/chat-bubble/index.d.ts.map +0 -0
- /package/{components → dist/components}/checkbox/checkbox.d.ts +0 -0
- /package/{components → dist/components}/checkbox/checkbox.d.ts.map +0 -0
- /package/{components → dist/components}/checkbox/checkbox.js +0 -0
- /package/{components → dist/components}/checkbox/index.d.ts +0 -0
- /package/{components → dist/components}/checkbox/index.d.ts.map +0 -0
- /package/{components → dist/components}/collapse/collapse.d.ts +0 -0
- /package/{components → dist/components}/collapse/collapse.d.ts.map +0 -0
- /package/{components → dist/components}/collapse/collapse.js +0 -0
- /package/{components → dist/components}/collapse/collapse.types.d.ts +0 -0
- /package/{components → dist/components}/collapse/collapse.types.d.ts.map +0 -0
- /package/{components → dist/components}/context-menu/context-menu.d.ts +0 -0
- /package/{components → dist/components}/context-menu/context-menu.d.ts.map +0 -0
- /package/{components → dist/components}/context-menu/context-menu.js +0 -0
- /package/{components → dist/components}/context-menu/context-menu.store.d.ts +0 -0
- /package/{components → dist/components}/context-menu/context-menu.store.d.ts.map +0 -0
- /package/{components → dist/components}/context-menu/context-menu.store.js +0 -0
- /package/{components → dist/components}/context-menu/context-menu.types.d.ts +0 -0
- /package/{components → dist/components}/context-menu/context-menu.types.d.ts.map +0 -0
- /package/{components → dist/components}/context-menu/index.d.ts +0 -0
- /package/{components → dist/components}/context-menu/index.d.ts.map +0 -0
- /package/{components → dist/components}/diff/diff.d.ts +0 -0
- /package/{components → dist/components}/diff/diff.d.ts.map +0 -0
- /package/{components → dist/components}/diff/diff.js +0 -0
- /package/{components → dist/components}/diff/diff.js.map +0 -0
- /package/{components → dist/components}/diff/index.d.ts +0 -0
- /package/{components → dist/components}/diff/index.d.ts.map +0 -0
- /package/{components → dist/components}/divider/divider.d.ts +0 -0
- /package/{components → dist/components}/divider/divider.d.ts.map +0 -0
- /package/{components → dist/components}/divider/divider.js +0 -0
- /package/{components → dist/components}/divider/divider.types.d.ts +0 -0
- /package/{components → dist/components}/divider/divider.types.d.ts.map +0 -0
- /package/{components → dist/components}/divider/index.d.ts +0 -0
- /package/{components → dist/components}/divider/index.d.ts.map +0 -0
- /package/{components → dist/components}/drawer/drawer.d.ts +0 -0
- /package/{components → dist/components}/drawer/drawer.d.ts.map +0 -0
- /package/{components → dist/components}/drawer/drawer.js +0 -0
- /package/{components → dist/components}/drawer/drawer.js.map +0 -0
- /package/{components → dist/components}/drawer/drawer.types.d.ts +0 -0
- /package/{components → dist/components}/drawer/drawer.types.d.ts.map +0 -0
- /package/{components → dist/components}/drawer/index.d.ts +0 -0
- /package/{components → dist/components}/drawer/index.d.ts.map +0 -0
- /package/{components → dist/components}/dropdown/dropdown.d.ts +0 -0
- /package/{components → dist/components}/dropdown/dropdown.d.ts.map +0 -0
- /package/{components → dist/components}/dropdown/dropdown.js +0 -0
- /package/{components → dist/components}/dropdown/dropdown.store.d.ts +0 -0
- /package/{components → dist/components}/dropdown/dropdown.store.d.ts.map +0 -0
- /package/{components → dist/components}/dropdown/dropdown.store.js +0 -0
- /package/{components → dist/components}/dropdown/dropdown.types.d.ts +0 -0
- /package/{components → dist/components}/dropdown/dropdown.types.d.ts.map +0 -0
- /package/{components → dist/components}/dropdown/index.d.ts +0 -0
- /package/{components → dist/components}/dropdown/index.d.ts.map +0 -0
- /package/{components → dist/components}/float-button/float-button.d.ts +0 -0
- /package/{components → dist/components}/float-button/float-button.d.ts.map +0 -0
- /package/{components → dist/components}/float-button/float-button.js +0 -0
- /package/{components → dist/components}/float-button/float-button.types.d.ts +0 -0
- /package/{components → dist/components}/float-button/float-button.types.d.ts.map +0 -0
- /package/{components → dist/components}/hover-3d-image/hover-3d-example.d.ts +0 -0
- /package/{components → dist/components}/hover-3d-image/hover-3d-example.d.ts.map +0 -0
- /package/{components → dist/components}/hover-3d-image/hover-3d-image.d.ts +0 -0
- /package/{components → dist/components}/hover-3d-image/hover-3d-image.d.ts.map +0 -0
- /package/{components → dist/components}/hover-3d-image/hover-3d-image.js +0 -0
- /package/{components → dist/components}/hover-3d-image/index.d.ts +0 -0
- /package/{components → dist/components}/hover-3d-image/index.d.ts.map +0 -0
- /package/{components → dist/components}/image-preview/image-preview.d.ts +0 -0
- /package/{components → dist/components}/image-preview/image-preview.d.ts.map +0 -0
- /package/{components → dist/components}/image-preview/image-preview.js +0 -0
- /package/{components → dist/components}/image-preview/index.d.ts +0 -0
- /package/{components → dist/components}/image-preview/index.d.ts.map +0 -0
- /package/{components → dist/components}/indicator/index.d.ts +0 -0
- /package/{components → dist/components}/indicator/index.d.ts.map +0 -0
- /package/{components → dist/components}/indicator/indicator.d.ts +0 -0
- /package/{components → dist/components}/indicator/indicator.d.ts.map +0 -0
- /package/{components → dist/components}/indicator/indicator.js +0 -0
- /package/{components → dist/components}/indicator/indicator.js.map +0 -0
- /package/{components → dist/components}/indicator/indicator.types.d.ts +0 -0
- /package/{components → dist/components}/indicator/indicator.types.d.ts.map +0 -0
- /package/{components → dist/components}/input/input.d.ts +0 -0
- /package/{components → dist/components}/input/input.d.ts.map +0 -0
- /package/{components → dist/components}/input/input.js +0 -0
- /package/{components → dist/components}/input/input.types.d.ts +0 -0
- /package/{components → dist/components}/input/input.types.d.ts.map +0 -0
- /package/{components → dist/components}/input/input.utils.d.ts +0 -0
- /package/{components → dist/components}/input/input.utils.d.ts.map +0 -0
- /package/{components → dist/components}/input/input.utils.js +0 -0
- /package/{components → dist/components}/input/variants/input-color.d.ts +0 -0
- /package/{components → dist/components}/input/variants/input-color.d.ts.map +0 -0
- /package/{components → dist/components}/input/variants/input-color.js +0 -0
- /package/{components → dist/components}/input/variants/input-date.d.ts +0 -0
- /package/{components → dist/components}/input/variants/input-date.d.ts.map +0 -0
- /package/{components → dist/components}/input/variants/input-date.js +0 -0
- /package/{components → dist/components}/input/variants/input-number.d.ts +0 -0
- /package/{components → dist/components}/input/variants/input-number.d.ts.map +0 -0
- /package/{components → dist/components}/input/variants/input-number.js +0 -0
- /package/{components → dist/components}/input/variants/input-otp.d.ts +0 -0
- /package/{components → dist/components}/input/variants/input-otp.d.ts.map +0 -0
- /package/{components → dist/components}/input/variants/input-otp.js +0 -0
- /package/{components → dist/components}/input/variants/input-password.d.ts +0 -0
- /package/{components → dist/components}/input/variants/input-password.d.ts.map +0 -0
- /package/{components → dist/components}/input/variants/input-password.js +0 -0
- /package/{components → dist/components}/input/variants/input-radio.d.ts +0 -0
- /package/{components → dist/components}/input/variants/input-radio.d.ts.map +0 -0
- /package/{components → dist/components}/input/variants/input-radio.js +0 -0
- /package/{components → dist/components}/input/variants/input-range.d.ts +0 -0
- /package/{components → dist/components}/input/variants/input-range.d.ts.map +0 -0
- /package/{components → dist/components}/input/variants/input-range.js +0 -0
- /package/{components → dist/components}/input/variants/input-text.d.ts +0 -0
- /package/{components → dist/components}/input/variants/input-text.d.ts.map +0 -0
- /package/{components → dist/components}/input/variants/input-text.js +0 -0
- /package/{components → dist/components}/input/variants/input-textarea.d.ts +0 -0
- /package/{components → dist/components}/input/variants/input-textarea.d.ts.map +0 -0
- /package/{components → dist/components}/input/variants/input-textarea.js +0 -0
- /package/{components → dist/components}/loading/index.d.ts +0 -0
- /package/{components → dist/components}/loading/index.d.ts.map +0 -0
- /package/{components → dist/components}/loading/loading.d.ts +0 -0
- /package/{components → dist/components}/loading/loading.d.ts.map +0 -0
- /package/{components → dist/components}/loading/loading.js +0 -0
- /package/{components → dist/components}/mansory/index.d.ts +0 -0
- /package/{components → dist/components}/mansory/index.d.ts.map +0 -0
- /package/{components → dist/components}/mansory/mansory.d.ts +0 -0
- /package/{components → dist/components}/mansory/mansory.d.ts.map +0 -0
- /package/{components → dist/components}/mansory/mansory.js +0 -0
- /package/{components → dist/components}/mansory/mansory.types.d.ts +0 -0
- /package/{components → dist/components}/mansory/mansory.types.d.ts.map +0 -0
- /package/{components → dist/components}/menu/menu.d.ts +0 -0
- /package/{components → dist/components}/menu/menu.d.ts.map +0 -0
- /package/{components → dist/components}/menu/menu.data-example.d.ts +0 -0
- /package/{components → dist/components}/menu/menu.data-example.d.ts.map +0 -0
- /package/{components → dist/components}/menu/menu.js +0 -0
- /package/{components → dist/components}/modal/index.d.ts +0 -0
- /package/{components → dist/components}/modal/index.d.ts.map +0 -0
- /package/{components → dist/components}/modal/modal.d.ts +0 -0
- /package/{components → dist/components}/modal/modal.d.ts.map +0 -0
- /package/{components → dist/components}/modal/modal.js +0 -0
- /package/{components → dist/components}/modal/modalContext.d.ts +0 -0
- /package/{components → dist/components}/modal/modalContext.d.ts.map +0 -0
- /package/{components → dist/components}/modal/modalContext.js +0 -0
- /package/{components → dist/components}/pagination/index.d.ts +0 -0
- /package/{components → dist/components}/pagination/index.d.ts.map +0 -0
- /package/{components → dist/components}/pagination/pagination.d.ts +0 -0
- /package/{components → dist/components}/pagination/pagination.d.ts.map +0 -0
- /package/{components → dist/components}/pagination/pagination.js +0 -0
- /package/{components → dist/components}/pagination/pagination.types.d.ts +0 -0
- /package/{components → dist/components}/pagination/pagination.types.d.ts.map +0 -0
- /package/{components → dist/components}/progress-bar/index.d.ts +0 -0
- /package/{components → dist/components}/progress-bar/index.d.ts.map +0 -0
- /package/{components → dist/components}/progress-bar/progress-bar.d.ts +0 -0
- /package/{components → dist/components}/progress-bar/progress-bar.d.ts.map +0 -0
- /package/{components → dist/components}/progress-bar/progress-bar.js +0 -0
- /package/{components → dist/components}/progress-bar/progress-bar.types.d.ts +0 -0
- /package/{components → dist/components}/progress-bar/progress-bar.types.d.ts.map +0 -0
- /package/{components → dist/components}/qr-code/index.d.ts +0 -0
- /package/{components → dist/components}/qr-code/index.d.ts.map +0 -0
- /package/{components → dist/components}/qr-code/qr-code.d.ts +0 -0
- /package/{components → dist/components}/qr-code/qr-code.d.ts.map +0 -0
- /package/{components → dist/components}/qr-code/qr-code.js +0 -0
- /package/{components → dist/components}/qr-code/qr-code.types.d.ts +0 -0
- /package/{components → dist/components}/qr-code/qr-code.types.d.ts.map +0 -0
- /package/{components → dist/components}/rating/rating.d.ts +0 -0
- /package/{components → dist/components}/rating/rating.d.ts.map +0 -0
- /package/{components → dist/components}/rating/rating.js +0 -0
- /package/{components → dist/components}/rating/rating.js.map +0 -0
- /package/{components → dist/components}/rating/rating.types.d.ts +0 -0
- /package/{components → dist/components}/rating/rating.types.d.ts.map +0 -0
- /package/{components → dist/components}/select/index.d.ts +0 -0
- /package/{components → dist/components}/select/index.d.ts.map +0 -0
- /package/{components → dist/components}/select/select.d.ts +0 -0
- /package/{components → dist/components}/select/select.d.ts.map +0 -0
- /package/{components → dist/components}/select/select.js +0 -0
- /package/{components → dist/components}/select/select.types.d.ts +0 -0
- /package/{components → dist/components}/select/select.types.d.ts.map +0 -0
- /package/{components → dist/components}/select-zone/index.d.ts +0 -0
- /package/{components → dist/components}/select-zone/index.d.ts.map +0 -0
- /package/{components → dist/components}/select-zone/select-zone.d.ts +0 -0
- /package/{components → dist/components}/select-zone/select-zone.d.ts.map +0 -0
- /package/{components → dist/components}/select-zone/select-zone.js +0 -0
- /package/{components → dist/components}/select-zone/select-zone.types.d.ts +0 -0
- /package/{components → dist/components}/select-zone/select-zone.types.d.ts.map +0 -0
- /package/{components → dist/components}/skeleton/index.d.ts +0 -0
- /package/{components → dist/components}/skeleton/index.d.ts.map +0 -0
- /package/{components → dist/components}/skeleton/skeleton.d.ts +0 -0
- /package/{components → dist/components}/skeleton/skeleton.d.ts.map +0 -0
- /package/{components → dist/components}/skeleton/skeleton.js +0 -0
- /package/{components → dist/components}/slider/slider.d.ts +0 -0
- /package/{components → dist/components}/slider/slider.d.ts.map +0 -0
- /package/{components → dist/components}/slider/slider.js +0 -0
- /package/{components → dist/components}/slider/slider.types.d.ts +0 -0
- /package/{components → dist/components}/slider/slider.types.d.ts.map +0 -0
- /package/{components → dist/components}/splitter/index.d.ts +0 -0
- /package/{components → dist/components}/splitter/index.d.ts.map +0 -0
- /package/{components → dist/components}/splitter/splitter.d.ts +0 -0
- /package/{components → dist/components}/splitter/splitter.d.ts.map +0 -0
- /package/{components → dist/components}/splitter/splitter.js +0 -0
- /package/{components → dist/components}/splitter/splitter.types.d.ts +0 -0
- /package/{components → dist/components}/splitter/splitter.types.d.ts.map +0 -0
- /package/{components → dist/components}/steps/index.d.ts +0 -0
- /package/{components → dist/components}/steps/index.d.ts.map +0 -0
- /package/{components → dist/components}/steps/steps.d.ts +0 -0
- /package/{components → dist/components}/steps/steps.d.ts.map +0 -0
- /package/{components → dist/components}/steps/steps.js +0 -0
- /package/{components → dist/components}/swap/index.d.ts +0 -0
- /package/{components → dist/components}/swap/index.d.ts.map +0 -0
- /package/{components → dist/components}/swap/swap.d.ts +0 -0
- /package/{components → dist/components}/swap/swap.d.ts.map +0 -0
- /package/{components → dist/components}/swap/swap.js +0 -0
- /package/{components → dist/components}/switch/index.d.ts +0 -0
- /package/{components → dist/components}/switch/index.d.ts.map +0 -0
- /package/{components → dist/components}/switch/switch.d.ts +0 -0
- /package/{components → dist/components}/switch/switch.d.ts.map +0 -0
- /package/{components → dist/components}/switch/switch.js +0 -0
- /package/{components → dist/components}/switch/switch.types.d.ts +0 -0
- /package/{components → dist/components}/switch/switch.types.d.ts.map +0 -0
- /package/{components → dist/components}/tab/index.d.ts +0 -0
- /package/{components → dist/components}/tab/index.d.ts.map +0 -0
- /package/{components → dist/components}/tab/tab.d.ts +0 -0
- /package/{components → dist/components}/tab/tab.d.ts.map +0 -0
- /package/{components → dist/components}/tab/tab.js +0 -0
- /package/{components → dist/components}/tab/tab.types.d.ts +0 -0
- /package/{components → dist/components}/tab/tab.types.d.ts.map +0 -0
- /package/{components → dist/components}/table/index.d.ts +0 -0
- /package/{components → dist/components}/table/index.d.ts.map +0 -0
- /package/{components → dist/components}/table/index.js +0 -0
- /package/{components → dist/components}/table/table.d.ts +0 -0
- /package/{components → dist/components}/table/table.d.ts.map +0 -0
- /package/{components → dist/components}/table/table.js +0 -0
- /package/{components → dist/components}/table/table.types.d.ts +0 -0
- /package/{components → dist/components}/table/table.types.d.ts.map +0 -0
- /package/{components → dist/components}/text-rotate/index.d.ts +0 -0
- /package/{components → dist/components}/text-rotate/index.d.ts.map +0 -0
- /package/{components → dist/components}/text-rotate/text-rotate.d.ts +0 -0
- /package/{components → dist/components}/text-rotate/text-rotate.d.ts.map +0 -0
- /package/{components → dist/components}/text-rotate/text-rotate.js +0 -0
- /package/{components → dist/components}/text-rotate/text-rotate.js.map +0 -0
- /package/{components → dist/components}/timeline/index.d.ts +0 -0
- /package/{components → dist/components}/timeline/index.d.ts.map +0 -0
- /package/{components → dist/components}/timeline/timeline.d.ts +0 -0
- /package/{components → dist/components}/timeline/timeline.d.ts.map +0 -0
- /package/{components → dist/components}/timeline/timeline.js +0 -0
- /package/{components → dist/components}/timeline/timeline.types.d.ts +0 -0
- /package/{components → dist/components}/timeline/timeline.types.d.ts.map +0 -0
- /package/{components → dist/components}/toast/icons/ErrorIcon.d.ts +0 -0
- /package/{components → dist/components}/toast/icons/ErrorIcon.d.ts.map +0 -0
- /package/{components → dist/components}/toast/icons/ErrorIcon.js +0 -0
- /package/{components → dist/components}/toast/icons/IconCircle.d.ts +0 -0
- /package/{components → dist/components}/toast/icons/IconCircle.d.ts.map +0 -0
- /package/{components → dist/components}/toast/icons/IconCircle.js +0 -0
- /package/{components → dist/components}/toast/icons/InfoIcon.d.ts +0 -0
- /package/{components → dist/components}/toast/icons/InfoIcon.d.ts.map +0 -0
- /package/{components → dist/components}/toast/icons/InfoIcon.js +0 -0
- /package/{components → dist/components}/toast/icons/LoaderIcon.d.ts +0 -0
- /package/{components → dist/components}/toast/icons/LoaderIcon.d.ts.map +0 -0
- /package/{components → dist/components}/toast/icons/LoaderIcon.js +0 -0
- /package/{components → dist/components}/toast/icons/SuccessIcon.d.ts +0 -0
- /package/{components → dist/components}/toast/icons/SuccessIcon.d.ts.map +0 -0
- /package/{components → dist/components}/toast/icons/SuccessIcon.js +0 -0
- /package/{components → dist/components}/toast/icons/WarningIcon.d.ts +0 -0
- /package/{components → dist/components}/toast/icons/WarningIcon.d.ts.map +0 -0
- /package/{components → dist/components}/toast/icons/WarningIcon.js +0 -0
- /package/{components → dist/components}/toast/icons/index.d.ts +0 -0
- /package/{components → dist/components}/toast/icons/index.d.ts.map +0 -0
- /package/{components → dist/components}/toast/index.d.ts +0 -0
- /package/{components → dist/components}/toast/index.d.ts.map +0 -0
- /package/{components → dist/components}/toast/toast.d.ts +0 -0
- /package/{components → dist/components}/toast/toast.d.ts.map +0 -0
- /package/{components → dist/components}/toast/toast.js +0 -0
- /package/{components → dist/components}/toast/toast.store.d.ts +0 -0
- /package/{components → dist/components}/toast/toast.store.d.ts.map +0 -0
- /package/{components → dist/components}/toast/toast.store.js +0 -0
- /package/{components → dist/components}/toast/toast.type.d.ts +0 -0
- /package/{components → dist/components}/toast/toast.type.d.ts.map +0 -0
- /package/{components → dist/components}/tooltip/index.d.ts +0 -0
- /package/{components → dist/components}/tooltip/index.d.ts.map +0 -0
- /package/{components → dist/components}/tooltip/tooltip.d.ts +0 -0
- /package/{components → dist/components}/tooltip/tooltip.d.ts.map +0 -0
- /package/{components → dist/components}/tooltip/tooltip.js +0 -0
- /package/{components → dist/components}/tooltip/tooltip.types.d.ts +0 -0
- /package/{components → dist/components}/tooltip/tooltip.types.d.ts.map +0 -0
- /package/{components → dist/components}/tour/index.d.ts +0 -0
- /package/{components → dist/components}/tour/index.d.ts.map +0 -0
- /package/{components → dist/components}/tour/tour.d.ts +0 -0
- /package/{components → dist/components}/tour/tour.types.d.ts +0 -0
- /package/{components → dist/components}/tour/tour.types.d.ts.map +0 -0
- /package/{components → dist/components}/upload/index.d.ts +0 -0
- /package/{components → dist/components}/upload/index.d.ts.map +0 -0
- /package/{components → dist/components}/upload/upload.d.ts +0 -0
- /package/{components → dist/components}/upload/upload.d.ts.map +0 -0
- /package/{components → dist/components}/upload/upload.js +0 -0
- /package/{components → dist/components}/upload/upload.types.d.ts +0 -0
- /package/{components → dist/components}/upload/upload.types.d.ts.map +0 -0
- /package/{components → dist/components}/z-index/index.d.ts +0 -0
- /package/{components → dist/components}/z-index/index.d.ts.map +0 -0
- /package/{components → dist/components}/z-index/z-index.context.d.ts +0 -0
- /package/{components → dist/components}/z-index/z-index.context.d.ts.map +0 -0
- /package/{components → dist/components}/z-index/z-index.context.js +0 -0
- /package/{components → dist/components}/z-index/z-index.d.ts +0 -0
- /package/{components → dist/components}/z-index/z-index.d.ts.map +0 -0
- /package/{components → dist/components}/z-index/z-index.js +0 -0
- /package/{components → dist/components}/z-index/z-index.store.d.ts +0 -0
- /package/{components → dist/components}/z-index/z-index.store.d.ts.map +0 -0
- /package/{components → dist/components}/z-index/z-index.store.js +0 -0
- /package/{components → dist/components}/z-index/z-index.types.d.ts +0 -0
- /package/{components → dist/components}/z-index/z-index.types.d.ts.map +0 -0
- /package/{components → dist/components}/z-index/z-index.types.js +0 -0
- /package/{lib.d.ts → dist/lib.d.ts} +0 -0
- /package/{lib.d.ts.map → dist/lib.d.ts.map} +0 -0
- /package/{lib.js → dist/lib.js} +0 -0
- /package/{type.d.ts → dist/type.d.ts} +0 -0
- /package/{type.d.ts.map → dist/type.d.ts.map} +0 -0
- /package/{utils → dist/utils}/cn.d.ts +0 -0
- /package/{utils → dist/utils}/cn.d.ts.map +0 -0
- /package/{utils → dist/utils}/cn.js +0 -0
- /package/{utils → dist/utils}/element-tracker.js +0 -0
- /package/{utils → dist/utils}/helper.d.ts +0 -0
- /package/{utils → dist/utils}/helper.d.ts.map +0 -0
- /package/{utils → dist/utils}/helper.js +0 -0
- /package/{utils → dist/utils}/hoc.js +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"input-color.js","names":["normalizeHexColor","Component","createSignal","splitProps","InputColorProps","InputText","InputColor","props","p","otherProps","initialValue","value","colorValue","setColorValue","colorPickerLabel","_el$","_tmpl$","_el$2","firstChild","addEventListener","e","newValue","currentTarget","onChange","_$effect","_$createComponent","_$mergeProps","type","typeOrigin","maskOptions","prefixIcon","onInput","normalizedValue","onBlur"],"sources":["../../../../src/components/input/variants/input-color.tsx"],"sourcesContent":["import { normalizeHexColor } from '@/utils/helper';\r\nimport { Component, createSignal, splitProps } from 'solid-js';\r\nimport type { InputColorProps } from '../input.types';\r\nimport { InputText } from './input-text';\r\n\r\nexport const InputColor: Component<InputColorProps> = (props => {\r\n const [p, otherProps] = splitProps(props, ['value', 'onChange', 'onBlur', 'onInput']);\r\n const initialValue = normalizeHexColor(p.value);\r\n const [colorValue, setColorValue] = createSignal(initialValue);\r\n\r\n const colorPickerLabel = (\r\n <label class=\"flex cursor-pointer\">\r\n <input\r\n type=\"color\"\r\n value={colorValue()}\r\n class=\"my-auto size-5 cursor-pointer\"\r\n onChange={e => {\r\n const newValue = normalizeHexColor(e.currentTarget.value);\r\n setColorValue(newValue);\r\n if (p.onChange) {\r\n p.onChange(newValue, e);\r\n }\r\n }}\r\n />\r\n </label>\r\n );\r\n\r\n return (\r\n <InputText\r\n {...otherProps}\r\n type={'text'}\r\n typeOrigin=\"color\"\r\n value={colorValue()}\r\n maskOptions={void 0}\r\n prefixIcon={colorPickerLabel}\r\n onInput={(value, e) => {\r\n setColorValue(value);\r\n if (p.onInput) {\r\n p.onInput(value, e);\r\n }\r\n }}\r\n onChange={(value, e) => {\r\n const normalizedValue = normalizeHexColor(value);\r\n setColorValue(normalizedValue);\r\n if (p.onChange) {\r\n p.onChange(normalizedValue, e);\r\n }\r\n }}\r\n onBlur={(value, e) => {\r\n const normalizedValue = normalizeHexColor(value);\r\n setColorValue(normalizedValue);\r\n if (p.onBlur) {\r\n p.onBlur(normalizedValue, e);\r\n }\r\n }}\r\n />\r\n );\r\n}) as Component<InputColorProps>;\r\n"],"mappings":"iWAKaM,GAA0CC,GAAS,CAC9D,GAAM,CAACC,EAAGC,GAAcN,EAAWI,EAAO,CAAC,QAAS,WAAY,SAAU,UAAU,CAAC,CAE/E,CAACK,EAAYC,GAAiBX,EADfF,EAAkBQ,EAAEG,MAAM,CACe,CAmB9D,OAAAc,EACGpB,EAASqB,EACJjB,EAAU,CACdkB,KAAM,OACNC,WAAU,QAAA,IACVjB,OAAK,CAAA,OAAEC,GAAY,EACnBiB,YAAa,IAAK,GAClBC,gBAxBkB,CAAA,IAAAf,EAAAC,GAAA,CAAAC,EAAAF,EAAAG,WAIG,OAJHD,EAAAE,iBAAA,SAMNC,GAAK,CACb,IAAMC,EAAWrB,EAAkBoB,EAAEE,cAAcX,MAAM,CACzDE,EAAcQ,EAAS,CACnBb,EAAEe,UACJf,EAAEe,SAASF,EAAUD,EAAE,EAE1B,CAAAI,MAAAP,EAAAN,MARMC,GAAY,CAAA,CAAAG,KAWxB,CAUGgB,SAAUpB,EAAOS,IAAM,CACrBP,EAAcF,EAAM,CAChBH,EAAEuB,SACJvB,EAAEuB,QAAQpB,EAAOS,EAAE,EAGvBG,UAAWZ,EAAOS,IAAM,CACtB,IAAMY,EAAkBhC,EAAkBW,EAAM,CAChDE,EAAcmB,EAAgB,CAC1BxB,EAAEe,UACJf,EAAEe,SAASS,EAAiBZ,EAAE,EAGlCa,QAAStB,EAAOS,IAAM,CACpB,IAAMY,EAAkBhC,EAAkBW,EAAM,CAChDE,EAAcmB,EAAgB,CAC1BxB,EAAEyB,QACJzB,EAAEyB,OAAOD,EAAiBZ,EAAE,EAE/B,CAAA,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"input-date.js","names":["Component","createUniqueId","mergeProps","InputDateProps","DEFAULT_PROPS","InputText","InputDate","p","id","_$createComponent","_$mergeProps","type","typeOrigin","maskOptions","allowClear"],"sources":["../../../../src/components/input/variants/input-date.tsx"],"sourcesContent":["import { Component, createUniqueId, mergeProps } from 'solid-js';\r\nimport type { InputDateProps } from '../input.types';\r\nimport { DEFAULT_PROPS } from '../input.utils';\r\nimport { InputText } from './input-text';\r\n\r\nexport const InputDate: Component<InputDateProps> = (p => {\r\n const id = createUniqueId();\r\n p = mergeProps({ ...DEFAULT_PROPS, id }, p);\r\n return (\r\n <InputText\r\n {...p}\r\n type={'date' as 'text'}\r\n typeOrigin=\"date\"\r\n maskOptions={void 0}\r\n allowClear={false}\r\n />\r\n );\r\n}) as Component<InputDateProps>;\r\n"],"mappings":"uNAKA,IAAaM,GAAwCC,GAAK,CACxD,IAAMC,EAAKP,GAAgB,CAE3B,MADAM,GAAIL,EAAW,CAAE,GAAGE,EAAeI,KAAI,CAAED,EAAE,CAC3CE,EACGJ,EAASK,EACJH,EAAC,CACLI,KAAM,OACNC,WAAU,OACVC,YAAa,IAAK,GAClBC,WAAY,GAAK,CAAA,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"input-number.js","names":["cn","createThrottle","FactoryArg","InputMask","IMask","X","Component","createEffect","createUniqueId","mergeProps","on","onCleanup","onMount","Show","InputNumberProps","DEFAULT_PROPS","inputTextVariants","InputNumber","p","id","offset","wheel","keyboard","maskInstance","inputRef","HTMLInputElement","options","min","Number","NEGATIVE_INFINITY","max","POSITIVE_INFINITY","thousandsSeparator","radix","padFractionalZeros","normalizeZeros","maskOptions","mask","focusInput","focus","maskAcceptEvent","updateValue","delta","currentValue","unmaskedValue","numericValue","parseFloat","newValue","Math","String","onChange","value","Event","onInput","onAccept","handleKeyDown","e","KeyboardEvent","key","preventDefault","handleWheel","WheelEvent","deltaY","updateOptions","defer","InputEvent","destroyNumberMask","off","destroy","handleClear","MouseEvent","stopPropagation","undefined","_el$","_tmpl$2","_el$2","firstChild","$$click","_$insert","prefixIcon","addEventListener","document","activeElement","$$keydown","keyCode","onPressEnter","currentTarget","$$input","onBlur","_ref$","_$use","_$createComponent","when","allowClear","suffixIcon","children","_el$3","_tmpl$","_c$","_$memo","_el$4","_tmpl$3","_c$2","_el$5","_tmpl$4","_$effect","_p$","_v$","color","size","variant","class","input","disabled","_v$2","_v$3","placeholder","_v$4","_$className","t","_$setAttribute","a","o","_$delegateEvents"],"sources":["../../../../src/components/input/variants/input-number.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport { createThrottle } from '@/utils/helper';\r\nimport type { FactoryArg, InputMask } from 'imask';\r\nimport IMask from 'imask/holder';\r\nimport 'imask/masked/number';\r\nimport X from 'lucide-solid/icons/x';\r\nimport {\r\n Component,\r\n createEffect,\r\n createUniqueId,\r\n mergeProps,\r\n on,\r\n onCleanup,\r\n onMount,\r\n Show,\r\n} from 'solid-js';\r\nimport type { InputNumberProps } from '../input.types';\r\nimport { DEFAULT_PROPS, inputTextVariants } from '../input.utils';\r\n\r\nexport const InputNumber: Component<InputNumberProps> = (p => {\r\n const id = createUniqueId();\r\n p = mergeProps({ ...DEFAULT_PROPS, id, offset: 1, wheel: false, keyboard: true }, p);\r\n let maskInstance: InputMask<FactoryArg> | undefined;\r\n let inputRef: HTMLInputElement | undefined;\r\n\r\n const options = () => ({\r\n min: Number.NEGATIVE_INFINITY,\r\n max: Number.POSITIVE_INFINITY,\r\n thousandsSeparator: '_',\r\n radix: '.',\r\n padFractionalZeros: false,\r\n normalizeZeros: true,\r\n ...p.maskOptions,\r\n mask: Number,\r\n });\r\n\r\n const focusInput = () => {\r\n inputRef?.focus();\r\n };\r\n\r\n let maskAcceptEvent: any = null;\r\n\r\n const updateValue = (delta: number) => {\r\n if (!maskInstance) return;\r\n\r\n const currentValue = maskInstance.unmaskedValue;\r\n const numericValue = currentValue === '' ? 0 : parseFloat(currentValue);\r\n let newValue = numericValue + delta;\r\n\r\n const min = p.maskOptions?.min ?? Number.NEGATIVE_INFINITY;\r\n const max = p.maskOptions?.max ?? Number.POSITIVE_INFINITY;\r\n newValue = Math.max(min, Math.min(max, newValue));\r\n\r\n maskInstance.unmaskedValue = String(newValue);\r\n maskInstance.updateValue();\r\n\r\n p.onChange?.(maskInstance.value, new Event('change'));\r\n p.onInput?.(maskInstance.value, new Event('input'));\r\n p.maskOptions?.onAccept?.(maskInstance.value, maskInstance.unmaskedValue);\r\n };\r\n\r\n const handleKeyDown = (e: KeyboardEvent) => {\r\n if (!p.keyboard) return;\r\n\r\n const offset = p.offset ?? 1;\r\n\r\n if (e.key === 'ArrowUp') {\r\n e.preventDefault();\r\n updateValue(offset);\r\n } else if (e.key === 'ArrowDown') {\r\n e.preventDefault();\r\n updateValue(-offset);\r\n }\r\n };\r\n\r\n const handleWheel = createThrottle((e: WheelEvent) => {\r\n if (!p.wheel) return;\r\n\r\n e.preventDefault();\r\n const offset = p.offset ?? 1;\r\n const delta = e.deltaY < 0 ? offset : -offset;\r\n updateValue(delta);\r\n }, 50);\r\n\r\n createEffect(\r\n on(\r\n () => options(),\r\n value => maskInstance && value && maskInstance.updateOptions(value),\r\n { defer: true },\r\n ),\r\n );\r\n\r\n onMount(() => {\r\n if (inputRef) {\r\n maskInstance = IMask(inputRef, options());\r\n\r\n maskAcceptEvent = (e: InputEvent) => {\r\n p.onChange?.(maskInstance?.value ?? '', e);\r\n p.maskOptions?.onAccept?.(maskInstance?.value, maskInstance?.unmaskedValue);\r\n };\r\n maskInstance.on('accept', maskAcceptEvent);\r\n }\r\n });\r\n\r\n onCleanup(function destroyNumberMask() {\r\n if (maskInstance) {\r\n maskAcceptEvent && maskInstance.off('accept', maskAcceptEvent);\r\n maskInstance.destroy();\r\n }\r\n });\r\n\r\n const handleClear = (e: MouseEvent) => {\r\n e.stopPropagation();\r\n if (maskInstance) {\r\n maskInstance.value = '';\r\n maskInstance.updateValue();\r\n } else if (inputRef) {\r\n inputRef.value = '';\r\n }\r\n p.onInput?.('', undefined as any);\r\n p.onChange?.('', undefined as any);\r\n inputRef?.focus();\r\n };\r\n\r\n return (\r\n <div\r\n tabIndex={-1}\r\n class={cn(\r\n 'it01',\r\n inputTextVariants({ color: p.color, size: p.size, variant: p.variant }),\r\n p.class?.input,\r\n p.disabled && 'border-c5 pointer-events-none',\r\n )}\r\n onClick={focusInput}\r\n >\r\n {p.prefixIcon}\r\n <input\r\n id={p.id}\r\n ref={inputRef}\r\n type=\"text\"\r\n data-type=\"number\"\r\n value={p.value ?? ''}\r\n placeholder={p.placeholder}\r\n class=\"text-c2 grow\"\r\n onBlur={e => p.onBlur?.(e.currentTarget.value, e)}\r\n onChange={e => p.onChange?.(e.currentTarget.value, e)}\r\n onInput={e => p.onInput?.(e.currentTarget.value, e)}\r\n onKeyDown={e => {\r\n if (e.key === 'Enter' || e.keyCode === 13) {\r\n e.preventDefault();\r\n p.onPressEnter?.(e.currentTarget.value, e);\r\n }\r\n handleKeyDown(e);\r\n }}\r\n onWheel={e => {\r\n if (p.wheel && document.activeElement === inputRef) {\r\n handleWheel(e);\r\n }\r\n }}\r\n disabled={p.disabled}\r\n />\r\n <Show when={p.allowClear || p.suffixIcon}>\r\n <div class=\"it05\">\r\n {p.allowClear && (\r\n <div class=\"it03\" onClick={handleClear}>\r\n <X class=\"m-auto size-2\" />\r\n </div>\r\n )}\r\n {p.suffixIcon && <div class=\"it04\">{p.suffixIcon}</div>}\r\n </div>\r\n </Show>\r\n </div>\r\n );\r\n}) as Component<InputNumberProps>;\r\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"input-otp.js","names":["cn","Component","createEffect","createSignal","For","mergeProps","on","InputOTPProps","getColor","InputOTP","p","color","length","inputMode","allowedChars","disabled","values","setValues","Array","fill","focusedIndex","setFocusedIndex","inputRefs","HTMLInputElement","value","undefined","chars","split","slice","newValues","forEach","char","i","getCombinedValue","join","notifyChange","combined","onChange","every","v","onComplete","updateValue","index","focusInput","focus","getNextIndex","currentIndex","nextIndex","allFilled","handleInput","e","InputEvent","input","target","inputValue","test","blur","handlePaste","ClipboardEvent","preventDefault","pasteData","clipboardData","getData","validChars","filter","lastFilledIndex","nextEmptyIndex","findIndex","handleKeyDown","KeyboardEvent","key","shiftKey","prevIndex","handleFocus","select","handleBlur","_index","FocusEvent","relatedTarget","HTMLElement","isInternalFocus","some","ref","onBlur","handleContainerClick","_el$","_tmpl$","_$insert","_$createComponent","each","children","_","_el$2","_tmpl$2","_el$3","firstChild","$$click","addEventListener","$$keydown","$$input","_$use","el","_$effect","_p$","_v$","class","inputWrap","_v$2","_v$3","_v$4","_v$5","_$className","t","_$setAttribute","a","o","_$memo","separator","_el$4","_tmpl$3","Element","root","_$delegateEvents"],"sources":["../../../../src/components/input/variants/input-otp.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport { Component, createEffect, createSignal, For, mergeProps, on } from 'solid-js';\r\nimport type { InputOTPProps } from '../input.types';\r\nimport { getColor } from '@/utils/helper';\r\n\r\nexport const InputOTP: Component<InputOTPProps> = p => {\r\n p = mergeProps(\r\n {\r\n color: 'info',\r\n length: 6,\r\n inputMode: 'numeric',\r\n allowedChars: /^[0-9]$/,\r\n disabled: false,\r\n } as InputOTPProps,\r\n p,\r\n );\r\n\r\n const length = () => p.length || 6;\r\n const allowedChars = () => p.allowedChars || /^[0-9]$/;\r\n\r\n const [values, setValues] = createSignal<string[]>(Array(length()).fill(''));\r\n const [focusedIndex, setFocusedIndex] = createSignal<number | null>(null);\r\n\r\n let inputRefs: HTMLInputElement[] = [];\r\n\r\n createEffect(\r\n on(\r\n () => p.value,\r\n value => {\r\n if (value !== undefined) {\r\n const chars = value.split('').slice(0, length());\r\n const newValues = Array(length()).fill('');\r\n chars.forEach((char, i) => {\r\n newValues[i] = char;\r\n });\r\n setValues(newValues);\r\n }\r\n },\r\n ),\r\n );\r\n\r\n const getCombinedValue = () => values().join('');\r\n\r\n const notifyChange = (newValues: string[]) => {\r\n const combined = newValues.join('');\r\n p.onChange?.(combined);\r\n\r\n if (combined.length === length() && newValues.every(v => v !== '')) {\r\n p.onComplete?.(combined);\r\n }\r\n };\r\n\r\n const updateValue = (index: number, char: string) => {\r\n const newValues = [...values()];\r\n newValues[index] = char;\r\n setValues(newValues);\r\n notifyChange(newValues);\r\n };\r\n\r\n const focusInput = (index: number) => {\r\n if (index >= 0 && index < length() && inputRefs[index]) {\r\n inputRefs[index].focus();\r\n }\r\n };\r\n\r\n const getNextIndex = (currentIndex: number): number => {\r\n let nextIndex = (currentIndex + 1) % length();\r\n if (nextIndex === 0 && currentIndex === length() - 1) {\r\n const allFilled = values().every(v => v !== '');\r\n if (allFilled) {\r\n return -1;\r\n }\r\n }\r\n return nextIndex;\r\n };\r\n\r\n const handleInput = (index: number, e: InputEvent) => {\r\n const input = e.target as HTMLInputElement;\r\n const inputValue = input.value;\r\n input.value = '';\r\n\r\n if (!inputValue) return;\r\n const char = inputValue[inputValue.length - 1];\r\n\r\n if (!allowedChars().test(char)) return;\r\n\r\n updateValue(index, char);\r\n\r\n const nextIndex = getNextIndex(index);\r\n if (nextIndex === -1) {\r\n inputRefs[index]?.blur();\r\n } else {\r\n focusInput(nextIndex);\r\n }\r\n };\r\n\r\n const handlePaste = (index: number, e: ClipboardEvent) => {\r\n e.preventDefault();\r\n\r\n const pasteData = e.clipboardData?.getData('text') || '';\r\n if (!pasteData) return;\r\n\r\n const validChars = pasteData.split('').filter(char => allowedChars().test(char));\r\n if (validChars.length === 0) return;\r\n\r\n const newValues = [...values()];\r\n let lastFilledIndex = index;\r\n\r\n for (let i = 0; i < validChars.length && index + i < length(); i++) {\r\n newValues[index + i] = validChars[i];\r\n lastFilledIndex = index + i;\r\n }\r\n\r\n setValues(newValues);\r\n notifyChange(newValues);\r\n\r\n const allFilled = newValues.every(v => v !== '');\r\n if (allFilled) {\r\n inputRefs[lastFilledIndex]?.blur();\r\n } else {\r\n const nextEmptyIndex = newValues.findIndex((v, i) => i > lastFilledIndex && v === '');\r\n if (nextEmptyIndex !== -1) {\r\n focusInput(nextEmptyIndex);\r\n } else {\r\n focusInput(lastFilledIndex);\r\n }\r\n }\r\n };\r\n\r\n const handleKeyDown = (index: number, e: KeyboardEvent) => {\r\n switch (e.key) {\r\n case 'Backspace':\r\n e.preventDefault();\r\n if (values()[index]) {\r\n updateValue(index, '');\r\n } else if (index > 0) {\r\n updateValue(index - 1, '');\r\n focusInput(index - 1);\r\n }\r\n break;\r\n\r\n case 'Delete':\r\n e.preventDefault();\r\n updateValue(index, '');\r\n break;\r\n\r\n case 'ArrowLeft':\r\n e.preventDefault();\r\n if (index > 0) focusInput(index - 1);\r\n break;\r\n\r\n case 'ArrowRight':\r\n e.preventDefault();\r\n if (index < length() - 1) focusInput(index + 1);\r\n break;\r\n\r\n case 'Tab':\r\n e.preventDefault();\r\n if (e.shiftKey) {\r\n const prevIndex = index === 0 ? length() - 1 : index - 1;\r\n focusInput(prevIndex);\r\n } else {\r\n const nextIndex = (index + 1) % length();\r\n focusInput(nextIndex);\r\n }\r\n break;\r\n\r\n case 'ArrowUp':\r\n case 'ArrowDown':\r\n e.preventDefault();\r\n break;\r\n }\r\n };\r\n\r\n const handleFocus = (index: number) => {\r\n setFocusedIndex(index);\r\n inputRefs[index]?.select();\r\n };\r\n\r\n const handleBlur = (_index: number, e: FocusEvent) => {\r\n const relatedTarget = e.relatedTarget as HTMLElement;\r\n const isInternalFocus = inputRefs.some(ref => ref === relatedTarget);\r\n\r\n if (!isInternalFocus) {\r\n setFocusedIndex(null);\r\n p.onBlur?.(getCombinedValue());\r\n }\r\n };\r\n\r\n const handleContainerClick = (index: number) => {\r\n if (!p.disabled) focusInput(index);\r\n };\r\n\r\n return (\r\n <div\r\n class={cn(\r\n 'op01',\r\n getColor(p.color!),\r\n p.class?.root,\r\n p.disabled && 'pointer-events-none opacity-50',\r\n )}\r\n role=\"group\"\r\n aria-label=\"OTP Input\"\r\n >\r\n <For each={Array(length()).fill(0)}>\r\n {(_, i) => (\r\n <>\r\n <div\r\n class={cn(\r\n 'op04',\r\n focusedIndex() === i() ? 'op02' : 'border-c3 hover:border-c4',\r\n p.class?.inputWrap,\r\n p.disabled && 'border-c3',\r\n )}\r\n onClick={() => handleContainerClick(i())}\r\n >\r\n <input\r\n ref={el => (inputRefs[i()] = el)}\r\n type=\"text\"\r\n inputMode={p.inputMode}\r\n maxLength={2}\r\n disabled={p.disabled}\r\n class={cn('op03', p.class?.input, p.disabled && 'cursor-not-allowed bg-gray-200')}\r\n autocomplete=\"one-time-code\"\r\n aria-label={`OTP digit ${i() + 1}`}\r\n value={values()[i()] || ''}\r\n onInput={e => handleInput(i(), e)}\r\n onKeyDown={e => handleKeyDown(i(), e)}\r\n onPaste={e => handlePaste(i(), e)}\r\n onFocus={() => handleFocus(i())}\r\n onBlur={e => handleBlur(i(), e)}\r\n />\r\n </div>\r\n {p.separator && <div class=\"my-auto\">{p.separator as Element}</div>}\r\n </>\r\n )}\r\n </For>\r\n </div>\r\n );\r\n};\r\n\r\nexport default InputOTP;\r\n"],"mappings":"yeAKaS,EAAqCC,GAAK,CACrDA,EAAIL,EACF,CACEM,MAAO,OACPC,OAAQ,EACRC,UAAW,UACXC,aAAc,UACdC,SAAU,GACX,CACDL,EACD,CAED,IAAME,MAAeF,EAAEE,QAAU,EAC3BE,MAAqBJ,EAAEI,cAAgB,UAEvC,CAACE,EAAQC,GAAad,EAAuBe,MAAMN,GAAQ,CAAC,CAACO,KAAK,GAAG,CAAC,CACtE,CAACC,EAAcC,GAAmBlB,EAA4B,KAAK,CAErEmB,EAAgC,EAAE,CAEtCpB,EACEI,MACQI,EAAEc,MACRA,GAAS,CACP,GAAIA,IAAUC,IAAAA,GAAW,CACvB,IAAMC,EAAQF,EAAMG,MAAM,GAAG,CAACC,MAAM,EAAGhB,GAAQ,CAAC,CAC1CiB,EAAYX,MAAMN,GAAQ,CAAC,CAACO,KAAK,GAAG,CAC1CO,EAAMI,SAASC,EAAMC,IAAM,CACzBH,EAAUG,GAAKD,GACf,CACFd,EAAUY,EAAU,GAI5B,CAAC,CAED,IAAMI,MAAyBjB,GAAQ,CAACkB,KAAK,GAAG,CAE1CC,EAAgBN,GAAwB,CAC5C,IAAMO,EAAWP,EAAUK,KAAK,GAAG,CACnCxB,EAAE2B,WAAWD,EAAS,CAElBA,EAASxB,SAAWA,GAAQ,EAAIiB,EAAUS,MAAMC,GAAKA,IAAM,GAAG,EAChE7B,EAAE8B,aAAaJ,EAAS,EAItBK,GAAeC,EAAeX,IAAiB,CACnD,IAAMF,EAAY,CAAC,GAAGb,GAAQ,CAAC,CAC/Ba,EAAUa,GAASX,EACnBd,EAAUY,EAAU,CACpBM,EAAaN,EAAU,EAGnBc,EAAcD,GAAkB,CAChCA,GAAS,GAAKA,EAAQ9B,GAAQ,EAAIU,EAAUoB,IAC9CpB,EAAUoB,GAAOE,OAAO,EAItBC,EAAgBC,GAAiC,CACrD,IAAIC,GAAaD,EAAe,GAAKlC,GAAQ,CAO7C,OANImC,IAAc,GAAKD,IAAiBlC,GAAQ,CAAG,GAC/BI,GAAQ,CAACsB,MAAMC,GAAKA,IAAM,GAAG,CAEtC,GAGJQ,GAGHE,GAAeP,EAAeQ,IAAkB,CACpD,IAAME,EAAQF,EAAEG,OACVC,EAAaF,EAAM5B,MAGzB,GAFA4B,EAAM5B,MAAQ,GAEV,CAAC8B,EAAY,OACjB,IAAMvB,EAAOuB,EAAWA,EAAW1C,OAAS,GAE5C,GAAI,CAACE,GAAc,CAACyC,KAAKxB,EAAK,CAAE,OAEhCU,EAAYC,EAAOX,EAAK,CAExB,IAAMgB,EAAYF,EAAaH,EAAM,CACjCK,IAAc,GAChBzB,EAAUoB,IAAQc,MAAM,CAExBb,EAAWI,EAAU,EAInBU,GAAef,EAAeQ,IAAsB,CACxDA,EAAES,gBAAgB,CAElB,IAAMC,EAAYV,EAAEW,eAAeC,QAAQ,OAAO,EAAI,GACtD,GAAI,CAACF,EAAW,OAEhB,IAAMG,EAAaH,EAAUjC,MAAM,GAAG,CAACqC,OAAOjC,GAAQjB,GAAc,CAACyC,KAAKxB,EAAK,CAAC,CAChF,GAAIgC,EAAWnD,SAAW,EAAG,OAE7B,IAAMiB,EAAY,CAAC,GAAGb,GAAQ,CAAC,CAC3BiD,EAAkBvB,EAEtB,IAAK,IAAIV,EAAI,EAAGA,EAAI+B,EAAWnD,QAAU8B,EAAQV,EAAIpB,GAAQ,CAAEoB,IAC7DH,EAAUa,EAAQV,GAAK+B,EAAW/B,GAClCiC,EAAkBvB,EAAQV,EAO5B,GAJAf,EAAUY,EAAU,CACpBM,EAAaN,EAAU,CAELA,EAAUS,MAAMC,GAAKA,IAAM,GAAG,CAE9CjB,EAAU2C,IAAkBT,MAAM,KAC7B,CACL,IAAMU,EAAiBrC,EAAUsC,WAAW5B,EAAGP,IAAMA,EAAIiC,GAAmB1B,IAAM,GAAG,CAInFI,EAHEuB,IAAmB,GAGVD,EAFAC,EAEgB,GAK3BE,GAAiB1B,EAAeQ,IAAqB,CACzD,OAAQA,EAAEoB,IAAV,CACE,IAAK,YACHpB,EAAES,gBAAgB,CACd3C,GAAQ,CAAC0B,GACXD,EAAYC,EAAO,GAAG,CACbA,EAAQ,IACjBD,EAAYC,EAAQ,EAAG,GAAG,CAC1BC,EAAWD,EAAQ,EAAE,EAEvB,MAEF,IAAK,SACHQ,EAAES,gBAAgB,CAClBlB,EAAYC,EAAO,GAAG,CACtB,MAEF,IAAK,YACHQ,EAAES,gBAAgB,CACdjB,EAAQ,GAAGC,EAAWD,EAAQ,EAAE,CACpC,MAEF,IAAK,aACHQ,EAAES,gBAAgB,CACdjB,EAAQ9B,GAAQ,CAAG,GAAG+B,EAAWD,EAAQ,EAAE,CAC/C,MAEF,IAAK,MACHQ,EAAES,gBAAgB,CACdT,EAAEqB,SAEJ5B,EADkBD,IAAU,EAAI9B,GAAQ,CAAG,EAAI8B,EAAQ,EAClC,CAGrBC,GADmBD,EAAQ,GAAK9B,GAAQ,CACnB,CAEvB,MAEF,IAAK,UACL,IAAK,YACHsC,EAAES,gBAAgB,CAClB,QAIAc,EAAe/B,GAAkB,CACrCrB,EAAgBqB,EAAM,CACtBpB,EAAUoB,IAAQgC,QAAQ,EAGtBC,GAAcC,EAAgB1B,IAAkB,CACpD,IAAM4B,EAAgB5B,EAAE4B,cACAxD,EAAU2D,KAAKC,GAAOA,IAAQJ,EAAc,GAGlEzD,EAAgB,KAAK,CACrBX,EAAEyE,SAASlD,GAAkB,CAAC,GAI5BmD,EAAwB1C,GAAkB,CACzChC,EAAEK,UAAU4B,EAAWD,EAAM,EAGpC,WAAA,CAAA,IAAA2C,EAAAC,GAAA,CAOK,OAPLC,EAAAF,EAAAG,EAWKpF,EAAG,CAAA,IAACqF,MAAI,CAAA,OAAEvE,MAAMN,GAAQ,CAAC,CAACO,KAAK,EAAE,EAAAuE,UAC9BC,EAAG3D,IAAC,MAAA,CAAA,IAAA4D,EAAAC,GAAA,CAAAC,EAAAF,EAAAG,WAoB4B,MApB5BH,GAAAI,YASeZ,EAAqBpD,GAAG,CAAC,CAAA8D,EAAAG,iBAAA,OAgB9B/C,GAAKyB,EAAW3C,GAAG,CAAEkB,EAAE,CAAA,CAAA4C,EAAAG,iBAAA,YADhBxB,EAAYzC,GAAG,CAAC,CAAA,CAAA8D,EAAAG,iBAAA,QADtB/C,GAAKO,EAAYzB,GAAG,CAAEkB,EAAE,CAAA,CAAA4C,EAAAI,UADtBhD,GAAKkB,EAAcpC,GAAG,CAAEkB,EAAE,CAAA4C,EAAAK,QAD5BjD,GAAKD,EAAYjB,GAAG,CAAEkB,EAAE,CAAAkD,EAT5BC,GAAO/E,EAAUU,GAAG,EAAIqE,EAAGP,EAAA,CAAAQ,EAAAC,GAAA,CAAA,IAAAC,EAT3BxG,EACL,OACAoB,GAAc,GAAKY,GAAG,CAAG,OAAS,4BAClCtB,EAAE+F,OAAOC,UACThG,EAAEK,UAAY,YACf,CAAA4F,EAMYjG,EAAEG,UAAS+F,EAEZlG,EAAEK,SAAQ8F,EACb7G,EAAG,OAAQU,EAAE+F,OAAOrD,MAAO1C,EAAEK,UAAY,iCAAiC,CAAA+F,EAErE,aAAa9E,GAAG,CAAG,IAAG,OAAAwE,IAAAD,EAAArD,GAAA6D,EAAAnB,EAAAW,EAAArD,EAAAsD,EAAA,CAAAG,IAAAJ,EAAAS,GAAAC,EAAAnB,EAAA,YAAAS,EAAAS,EAAAL,EAAA,CAAAC,IAAAL,EAAAW,IAAApB,EAAA/E,SAAAwF,EAAAW,EAAAN,GAAAC,IAAAN,EAAAY,GAAAJ,EAAAjB,EAAAS,EAAAY,EAAAN,EAAA,CAAAC,IAAAP,EAAAvE,GAAAiF,EAAAnB,EAAA,aAAAS,EAAAvE,EAAA8E,EAAA,CAAAP,GAAA,CAAArD,EAAAzB,IAAAA,GAAAuF,EAAAvF,IAAAA,GAAAyF,EAAAzF,IAAAA,GAAA0F,EAAA1F,IAAAA,GAAAO,EAAAP,IAAAA,GAAA,CAAA,CAAA6E,MAAAR,EAAAtE,MAC3BR,GAAQ,CAACgB,GAAG,GAAK,GAAE,CAAA4D,KAAA,CAAAwB,MAQ7BA,MAAA,CAAA,CAAA1G,EAAE2G,UAAS,EAAA,OAAA,CAAA,IAAAC,EAAAC,GAAA,CAAgD,OAAhDhC,EAAA+B,MAA0B5G,EAAE2G,UAAoB,CAAAC,KAAO,CAAA,CAAA,CAEtE,CAAA,CAAA,CAAAhB,MAAAS,EAAA1B,EAxCIrF,EACL,OACAQ,EAASE,EAAEC,MAAO,CAClBD,EAAE+F,OAAOgB,KACT/G,EAAEK,UAAY,iCACf,CAAA,CAAA,CAAAsE,KAAA,EAyCiBqC,EAAA,CAAA,QAAA,QAAA,UAAA,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"input-password.js","names":["cn","Eye","EyeOff","Component","createSignal","createUniqueId","mergeProps","InputPasswordProps","DEFAULT_PROPS","InputText","InputPassword","p","id","showPassword","setShowPassword","timeoutId","ReturnType","setTimeout","togglePasswordVisibility","e","MouseEvent","stopPropagation","undefined","clearTimeout","next","_$createComponent","_$mergeProps","type","typeOrigin","maskOptions","suffixIcon","_el$","_tmpl$","$$click","_$insert","class","_$delegateEvents"],"sources":["../../../../src/components/input/variants/input-password.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport Eye from 'lucide-solid/icons/eye';\r\nimport EyeOff from 'lucide-solid/icons/eye-off';\r\nimport { Component, createSignal, createUniqueId, mergeProps } from 'solid-js';\r\nimport type { InputPasswordProps } from '../input.types';\r\nimport { DEFAULT_PROPS } from '../input.utils';\r\nimport { InputText } from './input-text';\r\n\r\nexport const InputPassword: Component<InputPasswordProps> = (p => {\r\n p = mergeProps({ ...DEFAULT_PROPS, id: createUniqueId() }, p);\r\n\r\n const [showPassword, setShowPassword] = createSignal(false);\r\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\r\n\r\n const togglePasswordVisibility = (e: MouseEvent) => {\r\n e.stopPropagation();\r\n if (timeoutId !== undefined) {\r\n clearTimeout(timeoutId);\r\n timeoutId = undefined;\r\n }\r\n const next = !showPassword();\r\n setShowPassword(next);\r\n if (next) {\r\n timeoutId = setTimeout(() => {\r\n setShowPassword(false);\r\n timeoutId = undefined;\r\n }, 1000);\r\n }\r\n };\r\n\r\n return (\r\n <InputText\r\n {...p}\r\n type={(showPassword() ? 'text' : 'password') as 'text'}\r\n typeOrigin=\"password\"\r\n maskOptions={void 0}\r\n suffixIcon={\r\n <div class=\"ipa01\" onClick={togglePasswordVisibility}>\r\n <EyeOff class={cn('ipa02', showPassword() ? 'opacity-100' : 'opacity-0')} />\r\n <Eye class={cn('ipa03', !showPassword() ? 'opacity-100' : 'opacity-0')} />\r\n </div>\r\n }\r\n />\r\n );\r\n}) as Component<InputPasswordProps>;\r\n"],"mappings":"8aAQaU,GAAgDC,GAAK,CAChEA,EAAIL,EAAW,CAAE,GAAGE,EAAeI,GAAIP,GAAe,CAAG,CAAEM,EAAE,CAE7D,GAAM,CAACE,EAAcC,GAAmBV,EAAa,GAAM,CACvDW,EAEEG,EAA4BC,GAAkB,CAClDA,EAAEE,iBAAiB,CACfN,IAAcO,IAAAA,KAChBC,aAAaR,EAAU,CACvBA,EAAYO,IAAAA,IAEd,IAAME,EAAO,CAACX,GAAc,CAC5BC,EAAgBU,EAAK,CACjBA,IACFT,EAAYE,eAAiB,CAC3BH,EAAgB,GAAM,CACtBC,EAAYO,IAAAA,IACX,IAAK,GAIZ,OAAAG,EACGhB,EAASiB,EACJf,EAAC,CAAA,IACLgB,MAAI,CAAA,OAAGd,GAAc,CAAG,OAAS,YACjCe,WAAU,WACVC,YAAa,IAAK,GAAC,IACnBC,YAAU,CAAA,WAAA,CAAA,IAAAC,EAAAC,GAAA,CAGgE,MAHhED,GAAAE,QACoBf,EAAwBgB,EAAAH,EAAAN,EACjDvB,EAAM,CAAA,IAAA,OAAA,CAAA,OAAQF,EAAG,QAASa,GAAc,CAAG,cAAgB,YAAY,EAAA,CAAA,CAAA,KAAA,CAAAqB,EAAAH,EAAAN,EACvExB,EAAG,CAAA,IAAA,OAAA,CAAA,OAAQD,EAAG,QAAUa,GAAc,CAAmB,YAAhB,cAA4B,EAAA,CAAA,CAAA,KAAA,CAAAkB,KAAA,EAAA,CAAA,CAAA,GAK5CK,EAAA,CAAA,QAAA,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"input-radio.js","names":["cn","cva","VariantProps","Component","createUniqueId","mergeProps","InputRadioProps","type","size","RadioVariantsProps","color","id","name","value","checked","disabled","onChange","class","variants","xs","sm","md","lg","xl","neutral","primary","secondary","accent","info","success","warning","error","InputRadio","p","const","_el$","_tmpl$","addEventListener","e","currentTarget","_$effect","_p$","_v$","_v$2","_v$3","_v$4","_$className","t","_$setAttribute","a","o","undefined"],"sources":["../../../../src/components/input/variants/input-radio.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport { cva, VariantProps } from 'class-variance-authority';\r\nimport { Component, createUniqueId, mergeProps } from 'solid-js';\r\n\r\nexport type InputRadioProps = {\r\n type: 'radio';\r\n size?: RadioVariantsProps['size'];\r\n color?: RadioVariantsProps['color'];\r\n id?: string;\r\n name: string;\r\n value: string;\r\n checked?: boolean;\r\n disabled?: boolean;\r\n onChange?: (value: string) => void;\r\n class?: string;\r\n};\r\nconst variants = cva('radio', {\r\n variants: {\r\n size: {\r\n xs: 'radio-xs',\r\n sm: 'radio-sm',\r\n md: 'radio-md',\r\n lg: 'radio-lg',\r\n xl: 'radio-xl',\r\n },\r\n color: {\r\n neutral: 'radio-neutral',\r\n primary: 'radio-primary',\r\n secondary: 'radio-secondary',\r\n accent: 'radio-accent',\r\n info: 'radio-info',\r\n success: 'radio-success',\r\n warning: 'radio-warning',\r\n error: 'radio-error',\r\n },\r\n },\r\n});\r\n\r\nexport type RadioVariantsProps = VariantProps<typeof variants>;\r\n\r\nexport const InputRadio: Component<InputRadioProps> = p => {\r\n p = mergeProps({ size: 'md' as const, id: createUniqueId() }, p);\r\n return (\r\n <input\r\n type=\"radio\"\r\n class={cn(variants({ color: p.color, size: p.size }), p.class)}\r\n id={p.id}\r\n name={p.name}\r\n value={p.value}\r\n checked={p.checked}\r\n disabled={p.disabled}\r\n onChange={e => p.onChange?.(e.currentTarget.value)}\r\n />\r\n );\r\n};\r\n"],"mappings":"sQAgBMkB,EAAWjB,EAAI,QAAS,CAC5BiB,SAAU,CACRV,KAAM,CACJW,GAAI,WACJC,GAAI,WACJC,GAAI,WACJC,GAAI,WACJC,GAAI,WACL,CACDb,MAAO,CACLc,QAAS,gBACTC,QAAS,gBACTC,UAAW,kBACXC,OAAQ,eACRC,KAAM,aACNC,QAAS,gBACTC,QAAS,gBACTC,MAAO,cACT,CACF,CACD,CAAC,CAIWC,EAAyCC,IACpDA,EAAI5B,EAAW,CAAEG,KAAM,KAAeG,GAAIP,GAAe,CAAG,CAAE6B,EAAE,MAChE,CAAA,IAAAE,EAAAC,GAAA,CAOsB,OAPtBD,EAAAE,iBAAA,SAScC,GAAKL,EAAEjB,WAAWsB,EAAEC,cAAc1B,MAAM,CAAA,CAAA2B,EAAAC,GAAA,CAAA,IAAAC,EAN3C1C,EAAGkB,EAAS,CAAER,MAAOuB,EAAEvB,MAAOF,KAAMyB,EAAEzB,KAAM,CAAC,CAAEyB,EAAEhB,MAAM,CAAA0B,EAC1DV,EAAEtB,GAAEiC,EACFX,EAAErB,KAAIiC,EAGFZ,EAAElB,SAAQ,OAAA2B,IAAAD,EAAAH,GAAAQ,EAAAX,EAAAM,EAAAH,EAAAI,EAAA,CAAAC,IAAAF,EAAAM,GAAAC,EAAAb,EAAA,KAAAM,EAAAM,EAAAJ,EAAA,CAAAC,IAAAH,EAAAQ,GAAAD,EAAAb,EAAA,OAAAM,EAAAQ,EAAAL,EAAA,CAAAC,IAAAJ,EAAAS,IAAAf,EAAApB,SAAA0B,EAAAS,EAAAL,GAAAJ,GAAA,CAAAH,EAAAa,IAAAA,GAAAJ,EAAAI,IAAAA,GAAAF,EAAAE,IAAAA,GAAAD,EAAAC,IAAAA,GAAA,CAAA,CAAAX,MAAAL,EAAAtB,MAFboB,EAAEpB,MAAK,CAAA2B,MAAAL,EAAArB,QACLmB,EAAEnB,QAAO,CAAAqB,KAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"input-range.js","names":["Component","splitProps","Slider","InputRangeProps","InputRange","props","sliderProps","_$createComponent"],"sources":["../../../../src/components/input/variants/input-range.tsx"],"sourcesContent":["import { Component, splitProps } from 'solid-js';\r\nimport { Slider } from '../../slider/slider';\r\nimport type { InputRangeProps } from '../input.types';\r\n\r\nexport const InputRange: Component<InputRangeProps> = (props => {\r\n const [, sliderProps] = splitProps(props, ['type']);\r\n return <Slider {...sliderProps} />;\r\n}) as Component<InputRangeProps>;\r\n"],"mappings":"qIAIA,IAAaI,GAA0CC,GAAS,CAC9D,GAAM,EAAGC,GAAeL,EAAWI,EAAO,CAAC,OAAO,CAAC,CACnD,OAAAE,EAAQL,EAAWI,EAAW"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"input-text.js","names":["cn","FactoryArg","InputMask","IMask","X","Component","createEffect","createUniqueId","mergeProps","on","onCleanup","onMount","Show","InputTextProps","DEFAULT_PROPS","inputTextVariants","InputText","p","id","maskInstance","inputRef","HTMLInputElement","focusInput","focus","maskAcceptEvent","maskOptions","value","updateOptions","defer","e","InputEvent","onChange","onAccept","unmaskedValue","destroyTextMask","off","destroy","handleClear","MouseEvent","stopPropagation","updateValue","onInput","undefined","_el$","_tmpl$2","_el$2","firstChild","$$click","_$insert","prefixIcon","$$keydown","key","keyCode","preventDefault","onPressEnter","currentTarget","$$input","addEventListener","onBlur","_ref$","_$use","_$createComponent","when","allowClear","suffixIcon","children","_el$3","_tmpl$","_c$","_$memo","_el$4","_tmpl$3","_c$2","_el$5","_tmpl$4","_$effect","_p$","_v$","type","color","size","variant","class","root","disabled","_v$2","_v$3","_v$4","typeOrigin","_v$5","placeholder","_v$6","input","_v$7","_$className","t","_$setAttribute","a","o","i","n","s","_$delegateEvents"],"sources":["../../../../src/components/input/variants/input-text.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport type { FactoryArg, InputMask } from 'imask';\r\nimport IMask from 'imask/holder';\r\nimport 'imask/masked/number';\r\nimport 'imask/masked/pattern';\r\nimport X from 'lucide-solid/icons/x';\r\nimport {\r\n Component,\r\n createEffect,\r\n createUniqueId,\r\n mergeProps,\r\n on,\r\n onCleanup,\r\n onMount,\r\n Show,\r\n} from 'solid-js';\r\nimport type { InputTextProps } from '../input.types';\r\nimport { DEFAULT_PROPS, inputTextVariants } from '../input.utils';\r\n\r\nexport const InputText: Component<InputTextProps> = (p => {\r\n p = mergeProps({ ...DEFAULT_PROPS, id: createUniqueId() }, p);\r\n let maskInstance: InputMask<FactoryArg> | undefined;\r\n let inputRef: HTMLInputElement | undefined;\r\n const focusInput = () => {\r\n inputRef?.focus();\r\n };\r\n let maskAcceptEvent: any = null;\r\n createEffect(\r\n on(\r\n () => p.maskOptions,\r\n value => maskInstance && value && maskInstance.updateOptions(value),\r\n { defer: true },\r\n ),\r\n );\r\n onMount(() => {\r\n if (inputRef && p.maskOptions) {\r\n maskInstance = IMask(inputRef, p.maskOptions);\r\n\r\n maskAcceptEvent = (e: InputEvent) => {\r\n p.onChange && p.onChange(maskInstance?.value ?? '', e);\r\n p.maskOptions?.onAccept &&\r\n p.maskOptions?.onAccept(maskInstance?.value, maskInstance?.unmaskedValue);\r\n };\r\n maskInstance.on('accept', maskAcceptEvent);\r\n if (typeof p.maskOptions.onAccept === 'function') {\r\n }\r\n }\r\n });\r\n onCleanup(function destroyTextMask() {\r\n if (maskInstance) {\r\n maskAcceptEvent && maskInstance.off('accept', maskAcceptEvent);\r\n maskInstance.destroy();\r\n }\r\n });\r\n const handleClear = (e: MouseEvent) => {\r\n e.stopPropagation();\r\n if (maskInstance) {\r\n maskInstance.value = '';\r\n maskInstance.updateValue();\r\n } else if (inputRef) {\r\n inputRef.value = '';\r\n }\r\n p.onInput?.('', undefined as any);\r\n p.onChange?.('', undefined as any);\r\n inputRef?.focus();\r\n };\r\n return (\r\n <div\r\n tabIndex={-1}\r\n class={cn(\r\n 'it01',\r\n `input-${p.type}`,\r\n inputTextVariants({ color: p.color, size: p.size, variant: p.variant }),\r\n p.class?.root,\r\n p.disabled && 'border-c5 pointer-events-none',\r\n )}\r\n onClick={focusInput}\r\n >\r\n {p.prefixIcon}\r\n <input\r\n id={p.id}\r\n ref={inputRef}\r\n type={p.type || 'text'}\r\n data-type={p.typeOrigin}\r\n value={p.value ?? ''}\r\n placeholder={p.placeholder}\r\n class={cn('text-c2 grow', p.class?.input)}\r\n onBlur={e => p.onBlur?.(e.currentTarget.value, e)}\r\n onChange={e => p.onChange?.(e.currentTarget.value, e)}\r\n onInput={e => p.onInput?.(e.currentTarget.value, e)}\r\n onKeyDown={e => {\r\n if (e.key === 'Enter' || e.keyCode === 13) {\r\n e.preventDefault();\r\n p.onPressEnter?.(e.currentTarget.value, e);\r\n }\r\n }}\r\n disabled={p.disabled}\r\n />\r\n <Show when={p.allowClear || p.suffixIcon}>\r\n <div class=\"it05\">\r\n {p.allowClear && (\r\n <div class=\"it03\" onClick={handleClear}>\r\n <X class=\"m-auto size-2\" />\r\n </div>\r\n )}\r\n {p.suffixIcon && <div class=\"it04\">{p.suffixIcon}</div>}\r\n </div>\r\n </Show>\r\n </div>\r\n );\r\n}) as Component<InputTextProps>;\r\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"input-textarea.js","names":["cn","X","Component","createUniqueId","mergeProps","InputTextAreaProps","DEFAULT_PROPS","textareaVariants","InputTextArea","p","size","const","id","textareaRef","HTMLTextAreaElement","handleClear","e","MouseEvent","preventDefault","stopPropagation","value","onInput","undefined","onChange","focus","_el$","_tmpl$","_el$2","firstChild","$$input","currentTarget","addEventListener","onBlur","_ref$","_$use","_$insert","_c$","_$memo","allowClear","_el$3","_tmpl$2","$$mousedown","_$createComponent","_$effect","_p$","_v$","color","variant","class","root","disabled","_v$2","_v$3","placeholder","_v$4","input","_v$5","_$className","t","_$setAttribute","a","o","i","_$delegateEvents"],"sources":["../../../../src/components/input/variants/input-textarea.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport X from 'lucide-solid/icons/x';\r\nimport { Component, createUniqueId, mergeProps } from 'solid-js';\r\nimport type { InputTextAreaProps } from '../input.types';\r\nimport { DEFAULT_PROPS, textareaVariants } from '../input.utils';\r\n\r\nexport const InputTextArea: Component<InputTextAreaProps> = (p => {\r\n p = mergeProps({ ...DEFAULT_PROPS, size: 'md' as const, id: createUniqueId() }, p);\r\n let textareaRef: HTMLTextAreaElement | undefined;\r\n\r\n const handleClear = (e: MouseEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (textareaRef) {\r\n textareaRef.value = '';\r\n }\r\n p.onInput?.('', undefined as any);\r\n p.onChange?.('', undefined as any);\r\n textareaRef?.focus();\r\n };\r\n\r\n return (\r\n <div\r\n class={cn(\r\n 'ta01',\r\n textareaVariants({ color: p.color, variant: p.variant, size: p.size }),\r\n p.class?.root,\r\n p.disabled && 'border-c5 pointer-events-none',\r\n )}\r\n >\r\n <textarea\r\n id={p.id}\r\n placeholder={p.placeholder}\r\n ref={textareaRef}\r\n value={p.value ?? ''}\r\n class={cn('text-c2 grow resize-y', p.class?.input)}\r\n onBlur={e => p.onBlur?.(e.currentTarget.value, e)}\r\n onChange={e => p.onChange?.(e.currentTarget.value, e)}\r\n onInput={e => p.onInput?.(e.currentTarget.value, e)}\r\n disabled={p.disabled}\r\n />\r\n {p.allowClear && (\r\n <div class=\"ta02\" onMouseDown={handleClear}>\r\n <X class=\"m-auto size-2\" />\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}) as Component<InputTextAreaProps>;\r\n"],"mappings":"gaAMaQ,GAAgDC,GAAK,CAChEA,EAAIL,EAAW,CAAE,GAAGE,EAAeI,KAAM,KAAeE,GAAIT,GAAe,CAAG,CAAEM,EAAE,CAClF,IAAII,EAEEE,EAAeC,GAAkB,CACrCA,EAAEE,gBAAgB,CAClBF,EAAEG,iBAAiB,CACfN,IACFA,EAAYO,MAAQ,IAEtBX,EAAEY,UAAU,GAAIC,IAAAA,GAAiB,CACjCb,EAAEc,WAAW,GAAID,IAAAA,GAAiB,CAClCT,GAAaW,OAAO,EAGtB,WAAA,CAAA,IAAAC,EAAAC,GAAA,CAAAC,EAAAF,EAAAG,WAAAD,EAAAE,QAiBeb,GAAKP,EAAEY,UAAUL,EAAEc,cAAcV,MAAOJ,EAAE,CAAAW,EAAAI,iBAAA,SADzCf,GAAKP,EAAEc,WAAWP,EAAEc,cAAcV,MAAOJ,EAAE,CAAA,CAAAW,EAAAI,iBAAA,OAD7Cf,GAAKP,EAAEuB,SAAShB,EAAEc,cAAcV,MAAOJ,EAAE,CAAA,CAAA,IAAAiB,EAH5CpB,EACe,OADJ,OAAAoB,GAAA,WAAAC,EAAAD,EAAAN,EAAA,CAAXd,EAAWc,EAAAQ,EAAAV,OAAA,CAAA,IAAAW,EAAAC,MAAA,CAAA,CAQjB5B,EAAE6B,WAAU,CAAA,UAAZF,GAAA,OAAA,CAAA,IAAAG,EAAAC,GAAA,CAEK,MAFLD,GAAAE,YACgC1B,EAAWoB,EAAAI,EAAAG,EACvCzC,EAAC,CAAA,MAAA,gBAAA,CAAA,CAAA,CAAAsC,KAEL,IAAA,CAAA,KAAA,CAAAI,EAAAC,GAAA,CAAA,IAAAC,EAtBM7C,EACL,OACAO,EAAiB,CAAEuC,MAAOrC,EAAEqC,MAAOC,QAAStC,EAAEsC,QAASrC,KAAMD,EAAEC,KAAM,CAAC,CACtED,EAAEuC,OAAOC,KACTxC,EAAEyC,UAAY,gCACf,CAAAC,EAGK1C,EAAEG,GAAEwC,EACK3C,EAAE4C,YAAWC,EAGnBtD,EAAG,wBAAyBS,EAAEuC,OAAOO,MAAM,CAAAC,EAIxC/C,EAAEyC,SAAQ,OAAAL,IAAAD,EAAA5B,GAAAyC,EAAAhC,EAAAmB,EAAA5B,EAAA6B,EAAA,CAAAM,IAAAP,EAAAc,GAAAC,EAAAhC,EAAA,KAAAiB,EAAAc,EAAAP,EAAA,CAAAC,IAAAR,EAAAgB,GAAAD,EAAAhC,EAAA,cAAAiB,EAAAgB,EAAAR,EAAA,CAAAE,IAAAV,EAAAiB,GAAAJ,EAAA9B,EAAAiB,EAAAiB,EAAAP,EAAA,CAAAE,IAAAZ,EAAAkB,IAAAnC,EAAAuB,SAAAN,EAAAkB,EAAAN,GAAAZ,GAAA,CAAA5B,EAAAM,IAAAA,GAAAoC,EAAApC,IAAAA,GAAAsC,EAAAtC,IAAAA,GAAAuC,EAAAvC,IAAAA,GAAAwC,EAAAxC,IAAAA,GAAA,CAAA,CAAAqB,MAAAhB,EAAAP,MALbX,EAAEW,OAAS,GAAE,CAAAK,KAAA,GAcQsC,EAAA,CAAA,QAAA,YAAA,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"loading.js","names":["cn","BaseColorProps","cva","VariantProps","Component","createUniqueId","mergeProps","Switch","Match","Loader","daisy_variants","variants","variant","spinner","dots","ring","ball","bars","infinity","size","xs","sm","md","lg","xl","svg_size_map","const","base_color_vars","Record","primary","secondary","accent","neutral","info","success","warning","error","resolveColor","color","undefined","DaisyVariant","SvgVariant","SizeKey","LoadingProps","class","LoadingVariantsProps","Loading","props","p","isDaisy","includes","resolvedColor","svgClass","_$createComponent","children","when","_el$","_tmpl$","_$effect","_p$","_v$","_v$2","e","_$className","t","_$style","LoadingSpinner3","LoadingSpinner4","LoadingSpinner5","LoadingSpinner6","Spinner","id","_el$2","_tmpl$2","_el$3","firstChild","_el$4","_el$5","nextSibling","_el$6","_el$7","_el$8","_el$9","_el$0","_$setAttribute","_v$3","_v$4","_v$5","_v$6","_v$7","a","o","i","_el$1","_tmpl$3","_v$8","_v$9","_$setStyleProperty","_el$10","_tmpl$4","_v$0","_v$1","_el$11","_tmpl$5","_el$12","_el$13","_el$14","_v$10","_v$11"],"sources":["../../../src/components/loading/loading.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport { BaseColorProps } from '@/type';\r\nimport { cva, VariantProps } from 'class-variance-authority';\r\nimport { Component, createUniqueId, mergeProps, Switch, Match } from 'solid-js';\r\nimport Loader from 'lucide-solid/icons/loader';\r\n\r\n// Variants dùng DaisyUI classes (spinner, spinner-2, dots, ring, ball, bars, infinity)\r\nconst daisy_variants = cva('loading', {\r\n variants: {\r\n variant: {\r\n spinner: 'loading-spinner',\r\n 'spinner-2': 'loading-spinner-2',\r\n dots: 'loading-dots',\r\n ring: 'loading-ring',\r\n ball: 'loading-ball',\r\n bars: 'loading-bars',\r\n infinity: 'loading-infinity',\r\n },\r\n size: {\r\n xs: 'loading-xs',\r\n sm: 'loading-sm',\r\n md: 'loading-md',\r\n lg: 'loading-lg',\r\n xl: 'loading-xl',\r\n },\r\n },\r\n});\r\n\r\n// Map size → CSS class cho SVG-based spinners\r\nconst svg_size_map = {\r\n xs: 'loading-svg-xs',\r\n sm: 'loading-svg-sm',\r\n md: 'loading-svg-md',\r\n lg: 'loading-svg-lg',\r\n xl: 'loading-svg-xl',\r\n} as const;\r\n\r\n// Map BaseColorProps → CSS variable của DaisyUI/Tailwind\r\nconst base_color_vars: Record<BaseColorProps, string> = {\r\n primary: 'var(--color-primary)',\r\n secondary: 'var(--color-secondary)',\r\n accent: 'var(--color-accent)',\r\n neutral: 'var(--color-neutral)',\r\n info: 'var(--color-info)',\r\n success: 'var(--color-success)',\r\n warning: 'var(--color-warning)',\r\n error: 'var(--color-error)',\r\n};\r\n\r\n/** Resolve color prop: nếu là BaseColorProps key thì map sang CSS var, còn lại dùng trực tiếp */\r\nfunction resolveColor(color: string | undefined): string | undefined {\r\n if (!color) return undefined;\r\n return color in base_color_vars ? base_color_vars[color as BaseColorProps] : color;\r\n}\r\n\r\ntype DaisyVariant = 'spinner' | 'spinner-2' | 'dots' | 'ring' | 'ball' | 'bars' | 'infinity';\r\ntype SvgVariant = 'spinner-3' | 'spinner-4' | 'spinner-5' | 'spinner-6';\r\ntype SizeKey = keyof typeof svg_size_map;\r\n\r\ntype LoadingProps = {\r\n variant?: DaisyVariant | SvgVariant;\r\n size?: SizeKey;\r\n /** Nhận BaseColorProps ('primary', 'error', ...) hoặc bất kỳ giá trị CSS color nào */\r\n color?: BaseColorProps | string;\r\n class?: string;\r\n};\r\n\r\nexport type LoadingVariantsProps = VariantProps<typeof daisy_variants>;\r\n\r\nexport const Loading: Component<LoadingProps> = props => {\r\n const p = mergeProps({ variant: 'spinner' as const, size: 'sm' as const }, props);\r\n\r\n const isDaisy = () =>\r\n !['spinner-3', 'spinner-4', 'spinner-5', 'spinner-6'].includes(p.variant as string);\r\n\r\n const resolvedColor = () => resolveColor(p.color);\r\n const svgClass = () => cn(svg_size_map[p.size as SizeKey], p.class);\r\n\r\n return (\r\n <Switch>\r\n <Match when={isDaisy()}>\r\n <div\r\n class={cn(\r\n daisy_variants({\r\n variant: p.variant as DaisyVariant,\r\n size: p.size,\r\n }),\r\n p.class,\r\n )}\r\n style={resolvedColor() ? { color: resolvedColor() } : undefined}\r\n />\r\n </Match>\r\n <Match when={p.variant === 'spinner-3'}>\r\n <LoadingSpinner3 class={svgClass()} color={resolvedColor()} />\r\n </Match>\r\n <Match when={p.variant === 'spinner-4'}>\r\n <LoadingSpinner4 class={svgClass()} color={resolvedColor()} />\r\n </Match>\r\n <Match when={p.variant === 'spinner-5'}>\r\n <LoadingSpinner5 class={svgClass()} color={resolvedColor()} />\r\n </Match>\r\n <Match when={p.variant === 'spinner-6'}>\r\n <LoadingSpinner6 class={svgClass()} color={resolvedColor()} />\r\n </Match>\r\n </Switch>\r\n );\r\n};\r\nexport const Spinner: Component<{ class?: string; color?: string }> = p => {\r\n const id = createUniqueId();\r\n\r\n p = mergeProps({ color: '#6E56CF' } as const, p);\r\n\r\n return (\r\n <div class={cn('size-3 animate-spin', p.class)}>\r\n <svg\r\n width=\"inherit\"\r\n height=\"inherit\"\r\n viewBox=\"0 0 20 20\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <ellipse\r\n cx=\"9.99995\"\r\n cy=\"9.99995\"\r\n rx=\"7.31001\"\r\n ry=\"7.31001\"\r\n stroke={p.color}\r\n stroke-opacity=\"0.25\"\r\n stroke-width=\"4\"\r\n />\r\n <path\r\n d=\"M9.94939 2.69013C11.8881 2.67671 13.7527 3.43398 15.133 4.79535C16.5134 6.15671 17.2964 8.01067 17.3098 9.94936\"\r\n stroke={`url(#${id})`}\r\n stroke-width=\"4\"\r\n stroke-linecap=\"round\"\r\n stroke-dasharray=\"1.23 1.23\"\r\n />\r\n <defs>\r\n <linearGradient\r\n id={id}\r\n x1=\"16.3108\"\r\n y1=\"13.6892\"\r\n x2=\"3.68922\"\r\n y2=\"6.31075\"\r\n gradientUnits=\"userSpaceOnUse\"\r\n >\r\n <stop stop-color={p.color} />\r\n <stop offset=\"0.5\" stop-color={p.color} stop-opacity=\"0.01\" />\r\n <stop offset=\"1\" stop-color={p.color} stop-opacity=\"0\" />\r\n </linearGradient>\r\n </defs>\r\n </svg>\r\n </div>\r\n );\r\n};\r\nconst LoadingSpinner3: Component<{ class?: string; color?: string }> = p => {\r\n p = mergeProps({ color: 'currentColor' } as const, p);\r\n return (\r\n <div class={cn('size-7 p-0', p.class)} style={{ color: p.color }}>\r\n <svg fill=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g>\r\n <circle cx=\"12\" cy=\"3\" r=\"1\">\r\n <animate\r\n id=\"_dcbb18\"\r\n begin=\"0;_84a13e.end-0.5s\"\r\n attributeName=\"r\"\r\n calcMode=\"spline\"\r\n dur=\"0.6s\"\r\n values=\"1;2;1\"\r\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\r\n />\r\n </circle>\r\n <circle cx=\"16.50\" cy=\"4.21\" r=\"1\">\r\n <animate\r\n id=\"_92c238\"\r\n begin=\"_dcbb18.begin+0.1s\"\r\n attributeName=\"r\"\r\n calcMode=\"spline\"\r\n dur=\"0.6s\"\r\n values=\"1;2;1\"\r\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\r\n />\r\n </circle>\r\n <circle cx=\"7.50\" cy=\"4.21\" r=\"1\">\r\n <animate\r\n id=\"_84a13e\"\r\n begin=\"_5abc3e.begin+0.1s\"\r\n attributeName=\"r\"\r\n calcMode=\"spline\"\r\n dur=\"0.6s\"\r\n values=\"1;2;1\"\r\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\r\n />\r\n </circle>\r\n <circle cx=\"19.79\" cy=\"7.50\" r=\"1\">\r\n <animate\r\n id=\"_9d19c8\"\r\n begin=\"_92c238.begin+0.1s\"\r\n attributeName=\"r\"\r\n calcMode=\"spline\"\r\n dur=\"0.6s\"\r\n values=\"1;2;1\"\r\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\r\n />\r\n </circle>\r\n <circle cx=\"4.21\" cy=\"7.50\" r=\"1\">\r\n <animate\r\n id=\"_5abc3e\"\r\n begin=\"_dcfbb2.begin+0.1s\"\r\n attributeName=\"r\"\r\n calcMode=\"spline\"\r\n dur=\"0.6s\"\r\n values=\"1;2;1\"\r\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\r\n />\r\n </circle>\r\n <circle cx=\"21.00\" cy=\"12.00\" r=\"1\">\r\n <animate\r\n id=\"_cf88a3\"\r\n begin=\"_9d19c8.begin+0.1s\"\r\n attributeName=\"r\"\r\n calcMode=\"spline\"\r\n dur=\"0.6s\"\r\n values=\"1;2;1\"\r\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\r\n />\r\n </circle>\r\n <circle cx=\"3.00\" cy=\"12.00\" r=\"1\">\r\n <animate\r\n id=\"_dcfbb2\"\r\n begin=\"_514e98.begin+0.1s\"\r\n attributeName=\"r\"\r\n calcMode=\"spline\"\r\n dur=\"0.6s\"\r\n values=\"1;2;1\"\r\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\r\n />\r\n </circle>\r\n <circle cx=\"19.79\" cy=\"16.50\" r=\"1\">\r\n <animate\r\n id=\"_2fecf8\"\r\n begin=\"_cf88a3.begin+0.1s\"\r\n attributeName=\"r\"\r\n calcMode=\"spline\"\r\n dur=\"0.6s\"\r\n values=\"1;2;1\"\r\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\r\n />\r\n </circle>\r\n <circle cx=\"4.21\" cy=\"16.50\" r=\"1\">\r\n <animate\r\n id=\"_514e98\"\r\n begin=\"_c4d048.begin+0.1s\"\r\n attributeName=\"r\"\r\n calcMode=\"spline\"\r\n dur=\"0.6s\"\r\n values=\"1;2;1\"\r\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\r\n />\r\n </circle>\r\n <circle cx=\"16.50\" cy=\"19.79\" r=\"1\">\r\n <animate\r\n id=\"_033759\"\r\n begin=\"_2fecf8.begin+0.1s\"\r\n attributeName=\"r\"\r\n calcMode=\"spline\"\r\n dur=\"0.6s\"\r\n values=\"1;2;1\"\r\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\r\n />\r\n </circle>\r\n <circle cx=\"7.50\" cy=\"19.79\" r=\"1\">\r\n <animate\r\n id=\"_c4d048\"\r\n begin=\"_3ec8bd.begin+0.1s\"\r\n attributeName=\"r\"\r\n calcMode=\"spline\"\r\n dur=\"0.6s\"\r\n values=\"1;2;1\"\r\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\r\n />\r\n </circle>\r\n <circle cx=\"12\" cy=\"21\" r=\"1\">\r\n <animate\r\n id=\"_3ec8bd\"\r\n begin=\"_033759.begin+0.1s\"\r\n attributeName=\"r\"\r\n calcMode=\"spline\"\r\n dur=\"0.6s\"\r\n values=\"1;2;1\"\r\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\r\n />\r\n </circle>\r\n <animateTransform\r\n attributeName=\"transform\"\r\n type=\"rotate\"\r\n dur=\"6s\"\r\n values=\"360 12 12;0 12 12\"\r\n repeatCount=\"indefinite\"\r\n />\r\n </g>\r\n </svg>\r\n </div>\r\n );\r\n};\r\nconst LoadingSpinner4: Component<{ class?: string; color?: string }> = p => {\r\n return <Loader class={cn('animate-spin', p.class)} color={p.color} />;\r\n};\r\nconst LoadingSpinner5: Component<{ class?: string; color?: string }> = p => {\r\n p = mergeProps({ class: 'size-6' } as const, p);\r\n return (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n x=\"0px\"\r\n y=\"0px\"\r\n viewBox=\"0 0 2400 2400\"\r\n class={p.class}\r\n style={{ color: p.color }}\r\n >\r\n <g stroke-width=\"200\" stroke-linecap=\"round\" stroke=\"currentColor\" fill=\"none\" id=\"spinner\">\r\n <line x1=\"1200\" y1=\"600\" x2=\"1200\" y2=\"100\" />\r\n <line opacity=\"0.5\" x1=\"1200\" y1=\"2300\" x2=\"1200\" y2=\"1800\" />\r\n <line opacity=\"0.917\" x1=\"900\" y1=\"680.4\" x2=\"650\" y2=\"247.4\" />\r\n <line opacity=\"0.417\" x1=\"1750\" y1=\"2152.6\" x2=\"1500\" y2=\"1719.6\" />\r\n <line opacity=\"0.833\" x1=\"680.4\" y1=\"900\" x2=\"247.4\" y2=\"650\" />\r\n <line opacity=\"0.333\" x1=\"2152.6\" y1=\"1750\" x2=\"1719.6\" y2=\"1500\" />\r\n <line opacity=\"0.75\" x1=\"600\" y1=\"1200\" x2=\"100\" y2=\"1200\" />\r\n <line opacity=\"0.25\" x1=\"2300\" y1=\"1200\" x2=\"1800\" y2=\"1200\" />\r\n <line opacity=\"0.667\" x1=\"680.4\" y1=\"1500\" x2=\"247.4\" y2=\"1750\" />\r\n <line opacity=\"0.167\" x1=\"2152.6\" y1=\"650\" x2=\"1719.6\" y2=\"900\" />\r\n <line opacity=\"0.583\" x1=\"900\" y1=\"1719.6\" x2=\"650\" y2=\"2152.6\" />\r\n <line opacity=\"0.083\" x1=\"1750\" y1=\"247.4\" x2=\"1500\" y2=\"680.4\" />\r\n <animateTransform\r\n attributeName=\"transform\"\r\n attributeType=\"XML\"\r\n type=\"rotate\"\r\n keyTimes=\"0;0.08333;0.16667;0.25;0.33333;0.41667;0.5;0.58333;0.66667;0.75;0.83333;0.91667\"\r\n values=\"0 1199 1199;30 1199 1199;60 1199 1199;90 1199 1199;120 1199 1199;150 1199 1199;180 1199 1199;210 1199 1199;240 1199 1199;270 1199 1199;300 1199 1199;330 1199 1199\"\r\n dur=\"0.83333s\"\r\n begin=\"0s\"\r\n repeatCount=\"indefinite\"\r\n calcMode=\"discrete\"\r\n />\r\n </g>\r\n </svg>\r\n );\r\n};\r\nconst LoadingSpinner6: Component<{ class?: string; color?: string }> = p => {\r\n p = mergeProps({ class: 'size-6' } as const, p);\r\n const id = createUniqueId();\r\n return (\r\n <svg\r\n fill=\"none\"\r\n viewBox=\"0 0 20 20\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n class={p.class}\r\n style={{ color: p.color }}\r\n >\r\n <defs>\r\n <linearGradient id={id}>\r\n <stop offset=\"0%\" stop-color=\"currentColor\" stop-opacity=\"1\" />\r\n <stop offset=\"100%\" stop-color=\"currentColor\" stop-opacity=\"0.25\" />\r\n </linearGradient>\r\n </defs>\r\n <circle\r\n cx=\"10\"\r\n cy=\"10\"\r\n r=\"8\"\r\n stroke-width=\"2\"\r\n class=\"animate-spin\"\r\n stroke={`url(#${id})`}\r\n fill=\"none\"\r\n style={{ 'transform-origin': '50% 50%' }}\r\n />\r\n </svg>\r\n );\r\n};\r\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mansory.js","names":["Accessor","Component","createEffect","createMemo","createRoot","createSignal","For","mergeProps","on","onCleanup","onMount","Show","untrack","cn","createThrottle","MansoryBreakpoint","MansoryItemLayout","MansoryProps","MansoryResponsive","MansoryVirtualOptions","BREAKPOINTS","Record","Exclude","sm","md","lg","xl","BP_KEYS","const","DEFAULT_COLUMNS","default","DEFAULT_GAP","GAP_CACHE_MAX","gapCache","Map","resolveResponsive","config","T","containerWidth","Array","isArray","map","i","length","key","undefined","measureGapPx","gapClass","container","HTMLElement","probe","document","createElement","className","style","display","gridTemplateColumns","appendChild","computed","getComputedStyle","gap","parseFloat","columnGap","removeChild","measureGapPxCached","has","get","value","size","firstKey","keys","next","delete","set","computeLayout","itemHeights","columns","gapPx","layouts","totalHeight","sortedByTop","cols","Math","max","totalGap","colWidth","colHeights","fill","minCol","c","left","top","height","item","index","width","push","j","splice","maxH","findFirstVisible","sorted","visTop","lo","hi","mid","MansoryItemProps","getLayoutAccessor","items","itemClass","children","onRegister","el","HTMLDivElement","onUnregister","MansoryItem","props","itemLayout","styles","l","wrapper","child","widthPx","transform","_el$","_tmpl$","_$use","unregisterItem","_$insert","_$effect","_p$","_v$","_v$2","_v$3","e","_$setAttribute","t","_$className","a","_$style","Mansory","rawProps","virtual","estimateItemHeight","loadMoreThreshold","containerEl","innerEl","setContainerWidth","setItemHeights","currentColumns","resolved","currentGapClass","setGapPx","trackGapClass","_","layout","layoutAccessors","layoutSetters","v","layoutDisposers","getOrCreateLayoutAccessor","layoutSignalRoot","dispose","initialValue","equals","b","disposeLayoutSignal","disposeAllLayoutSignals","values","clear","keyEntryCache","syncLayoutSetters","newLayouts","setter","virtualOpts","overscan","isVirtual","scrollTop","setScrollTop","rafId","pendingScrollTop","loadMoreCooldown","loadMoreTimer","ReturnType","setTimeout","pendingItemChanges","flushItemHeights","applyItemHeightChanges","snapshot","prev","hasChange","idx","h","cancelFlushItemHeights","cancel","itemRO","ResizeObserver","entries","entry","target","parseInt","dataset","mansoryIdx","contentBoxSize","blockSize","contentRect","disconnectItemResizeObserver","disconnect","applyContainerWidth","applyContainerWidthChange","containerRO","inlineSize","observe","disconnectContainerResizeObserver","itemElMap","registerItem","unobserve","len","prevLen","slice","checkLoadMore","currentScrollTop","onLoadMore","scrollHeight","clientHeight","clearTimeout","clearLoadMoreTimer","cancelPendingRaf","cancelAnimationFrame","handleScroll","requestAnimationFrame","allIndices","renderedIndices","viewportHeight","overscanPx","visBottom","start","indices","renderedKeys","getItemKey","activeKeys","Set","add","k","_el$2","_tmpl$3","_el$3","firstChild","_$addEventListener","_ref$","_ref$2","_$createComponent","each","when","_tmpl$2","_v$4","class","_v$5","_$setStyleProperty"],"sources":["../../../src/components/mansory/mansory.tsx"],"sourcesContent":["import {\r\n Accessor,\r\n Component,\r\n createEffect,\r\n createMemo,\r\n createRoot,\r\n createSignal,\r\n For,\r\n mergeProps,\r\n on,\r\n onCleanup,\r\n onMount,\r\n Show,\r\n untrack,\r\n} from 'solid-js';\r\nimport { cn } from '@utils/cn';\r\nimport { createThrottle } from '@utils/helper';\r\nimport type {\r\n MansoryBreakpoint,\r\n MansoryItemLayout,\r\n MansoryProps,\r\n MansoryResponsive,\r\n MansoryVirtualOptions,\r\n} from './mansory.types';\r\n\r\nconst BREAKPOINTS: Record<Exclude<MansoryBreakpoint, 'default'>, number> = {\r\n sm: 640,\r\n md: 768,\r\n lg: 1024,\r\n xl: 1280,\r\n '2xl': 1536,\r\n};\r\n\r\nconst BP_KEYS = ['sm', 'md', 'lg', 'xl', '2xl'] as const;\r\n\r\nconst DEFAULT_COLUMNS: MansoryResponsive<number> = {\r\n default: 1,\r\n sm: 2,\r\n md: 3,\r\n lg: 4,\r\n};\r\n\r\nconst DEFAULT_GAP = 'gap-4';\r\n\r\nconst GAP_CACHE_MAX = 50;\r\nconst gapCache = new Map<string, number>();\r\n\r\nfunction resolveResponsive<T>(config: T | MansoryResponsive<T>, containerWidth: number): T {\r\n if (typeof config !== 'object' || config === null || Array.isArray(config)) {\r\n return config as T;\r\n }\r\n\r\n const map = config as MansoryResponsive<T>;\r\n\r\n for (let i = BP_KEYS.length - 1; i >= 0; i--) {\r\n const key = BP_KEYS[i];\r\n if (containerWidth >= BREAKPOINTS[key] && map[key] !== undefined) {\r\n return map[key] as T;\r\n }\r\n }\r\n\r\n return (map.default ?? (typeof config === 'object' ? undefined : config)) as T;\r\n}\r\n\r\nfunction measureGapPx(gapClass: string, container: HTMLElement): number {\r\n const probe = document.createElement('div');\r\n probe.className = `ma06 ${gapClass}`;\r\n probe.style.display = 'grid';\r\n probe.style.gridTemplateColumns = '1fr 1fr';\r\n\r\n probe.appendChild(document.createElement('div'));\r\n probe.appendChild(document.createElement('div'));\r\n container.appendChild(probe);\r\n const computed = getComputedStyle(probe);\r\n const gap = parseFloat(computed.columnGap || computed.gap || '0');\r\n container.removeChild(probe);\r\n return gap;\r\n}\r\n\r\nfunction measureGapPxCached(gapClass: string, container: HTMLElement): number {\r\n if (gapCache.has(gapClass)) return gapCache.get(gapClass)!;\r\n const value = measureGapPx(gapClass, container);\r\n\r\n if (gapCache.size >= GAP_CACHE_MAX) {\r\n const firstKey = gapCache.keys().next().value;\r\n if (firstKey !== undefined) gapCache.delete(firstKey);\r\n }\r\n gapCache.set(gapClass, value);\r\n return value;\r\n}\r\n\r\nfunction computeLayout(\r\n itemHeights: number[],\r\n columns: number,\r\n containerWidth: number,\r\n gapPx: number,\r\n): { layouts: MansoryItemLayout[]; totalHeight: number; sortedByTop: MansoryItemLayout[] } {\r\n const cols = Math.max(1, columns);\r\n const totalGap = gapPx * (cols - 1);\r\n const colWidth = (containerWidth - totalGap) / cols;\r\n\r\n const colHeights = new Array<number>(cols).fill(0);\r\n const layouts: MansoryItemLayout[] = [];\r\n\r\n const sortedByTop: MansoryItemLayout[] = [];\r\n\r\n for (let i = 0; i < itemHeights.length; i++) {\r\n let minCol = 0;\r\n for (let c = 1; c < cols; c++) {\r\n if (colHeights[c] < colHeights[minCol]) minCol = c;\r\n }\r\n\r\n const left = minCol * (colWidth + gapPx);\r\n const top = colHeights[minCol];\r\n const height = itemHeights[i] ?? 0;\r\n\r\n const item: MansoryItemLayout = { index: i, top, left, width: colWidth, height };\r\n layouts.push(item);\r\n\r\n let j = sortedByTop.length - 1;\r\n while (j >= 0 && sortedByTop[j].top > top) j--;\r\n sortedByTop.splice(j + 1, 0, item);\r\n\r\n colHeights[minCol] = top + height + gapPx;\r\n }\r\n\r\n let maxH = 0;\r\n for (let i = 0; i < colHeights.length; i++) {\r\n if (colHeights[i] > maxH) maxH = colHeights[i];\r\n }\r\n\r\n return { layouts, totalHeight: maxH > 0 ? maxH - gapPx : 0, sortedByTop };\r\n}\r\n\r\nfunction findFirstVisible(sorted: MansoryItemLayout[], visTop: number): number {\r\n let lo = 0,\r\n hi = sorted.length;\r\n while (lo < hi) {\r\n const mid = (lo + hi) >> 1;\r\n if (sorted[mid].top + sorted[mid].height < visTop) lo = mid + 1;\r\n else hi = mid;\r\n }\r\n return lo;\r\n}\r\n\r\ninterface MansoryItemProps {\r\n index: number;\r\n getLayoutAccessor: (index: number) => Accessor<MansoryItemLayout | undefined>;\r\n items: unknown[];\r\n itemClass?: string;\r\n children: MansoryProps['children'];\r\n onRegister: (index: number, el: HTMLDivElement) => void;\r\n onUnregister: (index: number) => void;\r\n}\r\n\r\nconst MansoryItem: Component<MansoryItemProps> = props => {\r\n const itemLayout = props.getLayoutAccessor(props.index);\r\n\r\n const styles = createMemo(() => {\r\n const l = itemLayout();\r\n if (!l) return { wrapper: {} as Record<string, string>, child: {} as Record<string, string> };\r\n const widthPx = `${l.width}px`;\r\n return {\r\n wrapper: { width: widthPx, transform: `translate3d(${l.left}px, ${l.top}px, 0)` },\r\n child: { width: widthPx },\r\n };\r\n });\r\n\r\n return (\r\n <div\r\n ref={el => {\r\n props.onRegister(props.index, el);\r\n onCleanup(function unregisterItem() {\r\n props.onUnregister(props.index);\r\n });\r\n }}\r\n data-mansory-idx={props.index}\r\n class={cn('ma03 ma04', props.itemClass)}\r\n style={styles().wrapper}\r\n >\r\n {props.children(props.items[props.index], () => props.index, styles().child)}\r\n </div>\r\n );\r\n};\r\n\r\nexport const Mansory: Component<MansoryProps> = rawProps => {\r\n const props = mergeProps(\r\n {\r\n columns: DEFAULT_COLUMNS,\r\n gap: DEFAULT_GAP,\r\n virtual: false as boolean | MansoryVirtualOptions,\r\n estimateItemHeight: 200,\r\n loadMoreThreshold: 200,\r\n },\r\n rawProps,\r\n );\r\n\r\n let containerEl!: HTMLDivElement;\r\n let innerEl!: HTMLDivElement;\r\n\r\n const [containerWidth, setContainerWidth] = createSignal(0);\r\n const [itemHeights, setItemHeights] = createSignal<number[]>([]);\r\n\r\n const currentColumns = createMemo(() => {\r\n const resolved = resolveResponsive<number>(props.columns as number, containerWidth());\r\n return Math.max(1, resolved ?? 1);\r\n });\r\n\r\n const currentGapClass = createMemo(() => {\r\n const resolved = resolveResponsive<string>(props.gap as string, containerWidth());\r\n return resolved ?? 'gap-4';\r\n });\r\n\r\n const [gapPx, setGapPx] = createSignal(16);\r\n\r\n createEffect(function trackGapClass() {\r\n const _ = currentGapClass();\r\n if (containerEl) {\r\n setGapPx(measureGapPxCached(currentGapClass(), containerEl));\r\n }\r\n });\r\n\r\n const layout = createMemo(() =>\r\n computeLayout(itemHeights(), currentColumns(), containerWidth(), gapPx()),\r\n );\r\n\r\n const totalHeight = createMemo(() => layout().totalHeight);\r\n\r\n const layoutAccessors = new Map<number, Accessor<MansoryItemLayout | undefined>>();\r\n const layoutSetters = new Map<number, (v: MansoryItemLayout | undefined) => void>();\r\n const layoutDisposers = new Map<number, () => void>();\r\n\r\n function getOrCreateLayoutAccessor(index: number): Accessor<MansoryItemLayout | undefined> {\r\n if (!layoutAccessors.has(index)) {\r\n createRoot(function layoutSignalRoot(dispose) {\r\n layoutDisposers.set(index, dispose);\r\n const initialValue = untrack(() => layout().layouts[index]);\r\n const [get, set] = createSignal<MansoryItemLayout | undefined>(initialValue, {\r\n equals: (a, b) => {\r\n if (a === b) return true;\r\n if (!a || !b) return false;\r\n return (\r\n a.top === b.top && a.left === b.left && a.width === b.width && a.height === b.height\r\n );\r\n },\r\n });\r\n layoutAccessors.set(index, get);\r\n layoutSetters.set(index, set);\r\n });\r\n }\r\n return layoutAccessors.get(index)!;\r\n }\r\n\r\n function disposeLayoutSignal(index: number) {\r\n layoutDisposers.get(index)?.();\r\n layoutDisposers.delete(index);\r\n layoutAccessors.delete(index);\r\n layoutSetters.delete(index);\r\n }\r\n\r\n onCleanup(function disposeAllLayoutSignals() {\r\n for (const dispose of layoutDisposers.values()) dispose();\r\n layoutDisposers.clear();\r\n layoutAccessors.clear();\r\n layoutSetters.clear();\r\n keyEntryCache.clear();\r\n });\r\n\r\n createEffect(function syncLayoutSetters() {\r\n const newLayouts = layout().layouts;\r\n\r\n for (const [index, setter] of layoutSetters) {\r\n setter(newLayouts[index]);\r\n }\r\n });\r\n\r\n const virtualOpts = createMemo<MansoryVirtualOptions | null>(() => {\r\n const v = props.virtual;\r\n if (!v) return null;\r\n if (v === true) return { overscan: 5 };\r\n return { overscan: v.overscan ?? 5 };\r\n });\r\n\r\n const isVirtual = createMemo(() => virtualOpts() !== null);\r\n\r\n const [scrollTop, setScrollTop] = createSignal(0);\r\n\r\n let rafId: number | null = null;\r\n let pendingScrollTop = 0;\r\n\r\n let loadMoreCooldown = false;\r\n let loadMoreTimer: ReturnType<typeof setTimeout> | null = null;\r\n\r\n const pendingItemChanges = new Map<number, number>();\r\n\r\n const flushItemHeights = createThrottle(function applyItemHeightChanges() {\r\n if (pendingItemChanges.size === 0) return;\r\n const snapshot = new Map(pendingItemChanges);\r\n pendingItemChanges.clear();\r\n\r\n setItemHeights(prev => {\r\n let hasChange = false;\r\n for (const [idx, h] of snapshot) {\r\n if (prev[idx] !== h) {\r\n hasChange = true;\r\n break;\r\n }\r\n }\r\n if (!hasChange) return prev;\r\n\r\n const next = [...prev];\r\n for (const [idx, h] of snapshot) next[idx] = h;\r\n return next;\r\n });\r\n }, 100);\r\n\r\n onCleanup(function cancelFlushItemHeights() {\r\n flushItemHeights.cancel();\r\n });\r\n\r\n const itemRO = new ResizeObserver(entries => {\r\n for (const entry of entries) {\r\n const el = entry.target as HTMLDivElement;\r\n const idx = parseInt(el.dataset.mansoryIdx ?? '-1', 10);\r\n if (idx < 0) continue;\r\n\r\n const h = entry.contentBoxSize?.[0]?.blockSize ?? entry.contentRect.height;\r\n pendingItemChanges.set(idx, h);\r\n }\r\n\r\n flushItemHeights();\r\n });\r\n\r\n onCleanup(function disconnectItemResizeObserver() {\r\n itemRO.disconnect();\r\n });\r\n\r\n onMount(() => {\r\n const applyContainerWidth = createThrottle(function applyContainerWidthChange(width: number) {\r\n setContainerWidth(width);\r\n }, 100);\r\n\r\n const containerRO = new ResizeObserver(entries => {\r\n for (const entry of entries) {\r\n const width = entry.contentBoxSize?.[0]?.inlineSize ?? entry.contentRect.width;\r\n applyContainerWidth(width);\r\n }\r\n });\r\n containerRO.observe(containerEl);\r\n onCleanup(function disconnectContainerResizeObserver() {\r\n applyContainerWidth.cancel();\r\n containerRO.disconnect();\r\n });\r\n });\r\n\r\n const itemElMap = new Map<number, HTMLDivElement>();\r\n\r\n function registerItem(index: number, el: HTMLDivElement) {\r\n itemElMap.set(index, el);\r\n itemRO.observe(el);\r\n }\r\n\r\n function unregisterItem(index: number) {\r\n const el = itemElMap.get(index);\r\n if (el) {\r\n itemRO.unobserve(el);\r\n itemElMap.delete(index);\r\n }\r\n }\r\n\r\n createEffect(\r\n on(\r\n () => props.items.length,\r\n len => {\r\n setItemHeights(prev => {\r\n const prevLen = prev.length;\r\n if (prevLen === len) return prev;\r\n\r\n if (len > prevLen) {\r\n const next = [...prev];\r\n for (let i = prevLen; i < len; i++) next.push(props.estimateItemHeight);\r\n return next;\r\n }\r\n\r\n for (let i = len; i < prevLen; i++) {\r\n disposeLayoutSignal(i);\r\n }\r\n return prev.slice(0, len);\r\n });\r\n },\r\n ),\r\n );\r\n\r\n function checkLoadMore(currentScrollTop: number) {\r\n if (!props.onLoadMore || loadMoreCooldown) return;\r\n const { scrollHeight, clientHeight } = containerEl;\r\n if (currentScrollTop + clientHeight >= scrollHeight - props.loadMoreThreshold) {\r\n loadMoreCooldown = true;\r\n\r\n if (loadMoreTimer) clearTimeout(loadMoreTimer);\r\n loadMoreTimer = setTimeout(() => {\r\n loadMoreCooldown = false;\r\n loadMoreTimer = null;\r\n }, 10_000);\r\n props.onLoadMore();\r\n }\r\n }\r\n\r\n createEffect(\r\n on(\r\n () => props.items.length,\r\n () => {\r\n if (loadMoreTimer) {\r\n clearTimeout(loadMoreTimer);\r\n loadMoreTimer = null;\r\n }\r\n loadMoreCooldown = false;\r\n },\r\n ),\r\n );\r\n\r\n onCleanup(function clearLoadMoreTimer() {\r\n if (loadMoreTimer) clearTimeout(loadMoreTimer);\r\n });\r\n\r\n onCleanup(function cancelPendingRaf() {\r\n if (rafId !== null) cancelAnimationFrame(rafId);\r\n });\r\n\r\n function handleScroll() {\r\n pendingScrollTop = containerEl.scrollTop;\r\n\r\n if (rafId === null) {\r\n rafId = requestAnimationFrame(() => {\r\n rafId = null;\r\n setScrollTop(pendingScrollTop);\r\n checkLoadMore(pendingScrollTop);\r\n });\r\n }\r\n }\r\n\r\n const allIndices = createMemo<number[]>((prev = []) => {\r\n const len = props.items.length;\r\n if (len === prev.length) return prev;\r\n if (len > prev.length) {\r\n const next = [...prev];\r\n for (let i = prev.length; i < len; i++) next.push(i);\r\n return next;\r\n }\r\n return prev.slice(0, len);\r\n });\r\n\r\n const renderedIndices = createMemo(() => {\r\n if (!isVirtual()) {\r\n return allIndices();\r\n }\r\n\r\n if (containerWidth() === 0) return [];\r\n\r\n const currentScrollTop = scrollTop();\r\n const viewportHeight = containerEl.clientHeight;\r\n const overscan = virtualOpts()?.overscan ?? 5;\r\n const overscanPx = overscan * props.estimateItemHeight;\r\n const visTop = currentScrollTop - overscanPx;\r\n const visBottom = currentScrollTop + viewportHeight + overscanPx;\r\n\r\n const sorted = layout().sortedByTop;\r\n const start = findFirstVisible(sorted, visTop);\r\n const indices: number[] = [];\r\n for (let i = start; i < sorted.length; i++) {\r\n if (sorted[i].top > visBottom) break;\r\n indices.push(sorted[i].index);\r\n }\r\n return indices;\r\n });\r\n\r\n const keyEntryCache = new Map<string | number, { key: string | number; index: number }>();\r\n\r\n const renderedKeys = createMemo(() => {\r\n const indices = renderedIndices();\r\n if (!props.getItemKey) return indices;\r\n\r\n const activeKeys = new Set<string | number>();\r\n\r\n const entries = indices.map(i => {\r\n const key = props.getItemKey!(props.items[i], i);\r\n activeKeys.add(key);\r\n\r\n let entry = keyEntryCache.get(key);\r\n if (!entry) {\r\n entry = { key, index: i };\r\n keyEntryCache.set(key, entry);\r\n } else {\r\n entry.index = i;\r\n }\r\n return entry;\r\n });\r\n\r\n for (const k of keyEntryCache.keys()) {\r\n if (!activeKeys.has(k)) keyEntryCache.delete(k);\r\n }\r\n\r\n return entries;\r\n });\r\n\r\n return (\r\n <div\r\n ref={containerEl}\r\n class={cn('ma01', isVirtual() && 'ma05', props.class)}\r\n onScroll={isVirtual() || props.onLoadMore ? handleScroll : undefined}\r\n >\r\n <div ref={innerEl} class=\"ma02\" style={{ height: `${totalHeight()}px` }}>\r\n <For each={renderedKeys()}>\r\n {entry => {\r\n const index = typeof entry === 'number' ? entry : entry.index;\r\n return (\r\n <MansoryItem\r\n index={index}\r\n getLayoutAccessor={getOrCreateLayoutAccessor}\r\n items={props.items}\r\n itemClass={props.itemClass}\r\n onRegister={registerItem}\r\n onUnregister={unregisterItem}\r\n >\r\n {props.children}\r\n </MansoryItem>\r\n );\r\n }}\r\n </For>\r\n </div>\r\n\r\n <Show when={props.items.length === 0}>\r\n <div class=\"ma08\">No items</div>\r\n </Show>\r\n </div>\r\n );\r\n};\r\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"menu.js","names":["cn","getColor","cva","VariantProps","RefreshCw","Accessor","Component","createEffect","createMemo","createSignal","createUniqueId","For","JSXElement","mergeProps","on","onCleanup","onMount","Setter","Show","Button","FolderItem","ItemClickInfo","MenuErrorInfo","MenuItem","MenuProps","menuVariants","variants","size","xs","sm","md","lg","xl","direction","vertical","horizontal","MenuVariantsProps","NodeRegistry","parentMap","Map","register","id","parentId","set","getPath","path","currentId","unshift","get","has","clear","LazyFolderRegistry","refreshFns","refreshFn","unregister","delete","refresh","fn","refreshAll","forEach","LazyFolderContent","item","renderItems","shouldLoad","isLoading","setIsLoading","onLoadError","error","onRegisterRefresh","props","loadedItems","setLoadedItems","loadItems","force","lazyItems","items","e","defer","_$createComponent","when","children","each","subItem","ACTIVE_CLASSNAME","Menu","p","color","highlightActive","const","ulRootRef","HTMLUListElement","nodeRegistry","lazyFolderRegistry","addActiveClassForId","length","elements","Array","from","getElementsByClassName","el","classList","remove","nodeId","document","getElementById","add","expandPathToId","element","details","querySelector","HTMLDetailsElement","open","focusById","console","warn","collapseById","refreshById","collapseAll","detailsList","querySelectorAll","d","expandedAll","collapseOtherRootFolders","exceptId","rootFolders","li","parentElement","itemId","type","folderItem","defaultExpanded","isLazyFolder","undefined","setShouldLoad","detailsRef","handleToggle","Event","currentTarget","isExpanded","preventDefault","handleLoadError","onError","errorInfo","source","message","Error","handleFolderClick","MouseEvent","stopPropagation","disabled","currentIsExpanded","willExpand","setTimeout","onItemClick","info","data","_el$","_tmpl$2","_el$2","firstChild","_el$3","_el$5","nextSibling","_$setAttribute","addEventListener","_ref$","_$use","$$click","_$insert","content","Element","_tmpl$","fallback","_$effect","_p$","_v$","class","itemWrap","_v$2","_v$3","itemHeader","_$className","t","a","handleFileClick","_el$6","_tmpl$3","_el$7","handleTitleClick","contains","_el$8","_tmpl$4","_el$9","_el$0","isLazyRoot","rootItems","setRootItems","isRootLoading","setIsRootLoading","clearMenuRegistries","loadRootItems","menuClass","root","setMenuFunction","_el$1","_tmpl$5","_$memo","_el$11","_tmpl$7","_el$12","icon","variant","onClick","_el$10","_tmpl$6","ele","_$spread","_$mergeProps","_$delegateEvents"],"sources":["../../../src/components/menu/menu.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport { getColor } from '@/utils/helper';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport RefreshCw from 'lucide-solid/icons/refresh-cw';\r\nimport {\r\n Accessor,\r\n Component,\r\n createEffect,\r\n createMemo,\r\n createSignal,\r\n createUniqueId,\r\n For,\r\n JSXElement,\r\n mergeProps,\r\n on,\r\n onCleanup,\r\n onMount,\r\n Setter,\r\n Show,\r\n} from 'solid-js';\r\nimport { Button } from '../button';\r\nimport type { FolderItem, ItemClickInfo, MenuErrorInfo, MenuItem, MenuProps } from './menu.types';\r\n\r\nconst menuVariants = cva('menu', {\r\n variants: {\r\n size: { xs: 'menu-xs', sm: 'menu-sm', md: 'menu-md', lg: 'menu-lg', xl: 'menu-xl' },\r\n direction: { vertical: 'menu-vertical', horizontal: 'menu-horizontal' },\r\n },\r\n});\r\n\r\nexport type MenuVariantsProps = VariantProps<typeof menuVariants>;\r\n\r\nclass NodeRegistry {\r\n private parentMap = new Map<string, string | null>();\r\n register(id: string, parentId: string | null) {\r\n this.parentMap.set(id, parentId);\r\n }\r\n getPath(id: string): string[] {\r\n const path: string[] = [];\r\n let currentId: string | null | undefined = id;\r\n while (currentId != null) {\r\n path.unshift(currentId);\r\n currentId = this.parentMap.get(currentId);\r\n }\r\n return path;\r\n }\r\n has(id: string): boolean {\r\n return this.parentMap.has(id);\r\n }\r\n clear() {\r\n this.parentMap.clear();\r\n }\r\n}\r\n\r\nclass LazyFolderRegistry {\r\n private refreshFns = new Map<string, () => void>();\r\n register(id: string, refreshFn: () => void) {\r\n this.refreshFns.set(id, refreshFn);\r\n }\r\n unregister(id: string) {\r\n this.refreshFns.delete(id);\r\n }\r\n refresh(id: string) {\r\n const fn = this.refreshFns.get(id);\r\n if (fn) fn();\r\n }\r\n refreshAll() {\r\n this.refreshFns.forEach(fn => fn());\r\n }\r\n has(id: string): boolean {\r\n return this.refreshFns.has(id);\r\n }\r\n clear() {\r\n this.refreshFns.clear();\r\n }\r\n}\r\n\r\nconst LazyFolderContent: Component<{\r\n item: FolderItem;\r\n renderItems: (item: MenuItem, parentId: string | null) => JSXElement;\r\n parentId: string | null;\r\n shouldLoad: Accessor<boolean>;\r\n isLoading: Accessor<boolean>;\r\n setIsLoading: Setter<boolean>;\r\n onLoadError: (error: unknown) => void;\r\n onRegisterRefresh: (refreshFn: () => void) => void;\r\n}> = props => {\r\n const [loadedItems, setLoadedItems] = createSignal<MenuItem[] | null>(null);\r\n const loadItems = async (force = false) => {\r\n if (props.isLoading()) return;\r\n if (loadedItems() !== null && !force) return;\r\n if (!props.item.lazyItems) return;\r\n props.setIsLoading(true);\r\n try {\r\n const items = await props.item.lazyItems();\r\n setLoadedItems(items);\r\n } catch (e) {\r\n props.onLoadError(e);\r\n } finally {\r\n props.setIsLoading(false);\r\n }\r\n };\r\n const refresh = () => {\r\n loadItems(true);\r\n };\r\n onMount(() => {\r\n props.onRegisterRefresh(refresh);\r\n });\r\n createEffect(\r\n on(\r\n () => props.shouldLoad(),\r\n shouldLoad => {\r\n if (shouldLoad && loadedItems() === null) {\r\n loadItems();\r\n }\r\n },\r\n { defer: true },\r\n ),\r\n );\r\n return (\r\n <Show when={loadedItems()}>\r\n <For each={loadedItems()!}>{subItem => props.renderItems(subItem, props.parentId)}</For>\r\n </Show>\r\n );\r\n};\r\n\r\nconst ACTIVE_CLASSNAME = '_6ca32a';\r\nexport const Menu: Component<MenuProps> = p => {\r\n p = mergeProps(\r\n { size: 'md', direction: 'vertical', color: 'secondary', highlightActive: true } as const,\r\n p,\r\n );\r\n let ulRootRef: HTMLUListElement;\r\n const nodeRegistry = new NodeRegistry();\r\n const lazyFolderRegistry = new LazyFolderRegistry();\r\n function addActiveClassForId(id: string) {\r\n if (!ulRootRef || !p.highlightActive) return;\r\n const path = nodeRegistry.getPath(id);\r\n if (path.length === 0) return;\r\n\r\n const elements = Array.from(ulRootRef.getElementsByClassName(ACTIVE_CLASSNAME));\r\n\r\n for (const el of elements) el.classList.remove(ACTIVE_CLASSNAME);\r\n for (const nodeId of path) document.getElementById(nodeId)?.classList?.add(ACTIVE_CLASSNAME);\r\n }\r\n function expandPathToId(id: string) {\r\n const path = nodeRegistry.getPath(id);\r\n for (const nodeId of path) {\r\n const element = document.getElementById(nodeId);\r\n if (!element) continue;\r\n const details = element.querySelector(':scope > details') as HTMLDetailsElement | null;\r\n if (details && !details.open) {\r\n details.open = true;\r\n }\r\n }\r\n }\r\n function focusById(id: string) {\r\n if (!nodeRegistry.has(id)) {\r\n console.warn(`Menu.focusById: Node with id \"${id}\" not found in registry`);\r\n return;\r\n }\r\n expandPathToId(id);\r\n addActiveClassForId(id);\r\n }\r\n function collapseById(id: string) {\r\n const element = document.getElementById(id);\r\n if (!element) {\r\n console.warn(`Menu.collapseById: Element with id \"${id}\" not found`);\r\n return;\r\n }\r\n const details = element.querySelector(':scope > details') as HTMLDetailsElement | null;\r\n if (details) {\r\n details.open = false;\r\n const elements = details.getElementsByClassName(ACTIVE_CLASSNAME);\r\n for (const el of elements) el.classList.remove(ACTIVE_CLASSNAME);\r\n element.classList.remove(ACTIVE_CLASSNAME);\r\n }\r\n }\r\n function refreshById(id: string) {\r\n if (!lazyFolderRegistry.has(id)) {\r\n console.warn(`Menu.refreshById: Lazy folder with id \"${id}\" not found`);\r\n return;\r\n }\r\n lazyFolderRegistry.refresh(id);\r\n }\r\n function refreshAll() {\r\n lazyFolderRegistry.refreshAll();\r\n }\r\n function collapseAll() {\r\n if (!ulRootRef) return;\r\n const detailsList = ulRootRef.querySelectorAll('details');\r\n detailsList.forEach(d => (d.open = false));\r\n }\r\n function expandedAll() {\r\n if (!ulRootRef) return;\r\n const detailsList = ulRootRef.querySelectorAll('details');\r\n detailsList.forEach(d => (d.open = true));\r\n }\r\n function collapseOtherRootFolders(exceptId: string) {\r\n if (!ulRootRef) return;\r\n // Only collapse direct children (level 1 folders)\r\n const rootFolders = ulRootRef.querySelectorAll(':scope > li.folder > details');\r\n rootFolders.forEach(details => {\r\n const li = details.parentElement;\r\n if (li && li.id !== exceptId && (details as HTMLDetailsElement).open) {\r\n (details as HTMLDetailsElement).open = false;\r\n }\r\n });\r\n }\r\n function renderItems(item: MenuItem, parentId: string | null = null) {\r\n const itemId = item.id ?? createUniqueId();\r\n nodeRegistry.register(itemId, parentId);\r\n\r\n if (item.type === 'folder') {\r\n const folderItem = mergeProps(\r\n { defaultExpanded: item.defaultExpanded ?? p.defaultExpanded ?? false },\r\n item,\r\n { id: itemId },\r\n );\r\n const isLazyFolder = folderItem.lazyItems !== undefined;\r\n const [shouldLoad, setShouldLoad] = createSignal(folderItem.defaultExpanded);\r\n const [isLoading, setIsLoading] = createSignal(false);\r\n let detailsRef: HTMLDetailsElement | undefined;\r\n\r\n const handleToggle = (e: Event) => {\r\n const details = e.currentTarget as HTMLDetailsElement;\r\n const isExpanded = details.open;\r\n if (isLoading()) {\r\n e.preventDefault();\r\n return;\r\n }\r\n if (isLazyFolder) {\r\n setShouldLoad(isExpanded);\r\n }\r\n };\r\n\r\n const handleLoadError = (error: unknown) => {\r\n if (detailsRef) {\r\n detailsRef.open = false;\r\n }\r\n setShouldLoad(false);\r\n if (p.onError) {\r\n const errorInfo: MenuErrorInfo = {\r\n source: 'folder',\r\n itemId,\r\n path: nodeRegistry.getPath(itemId),\r\n error,\r\n message: error instanceof Error ? error.message : 'Failed to load folder items',\r\n };\r\n p.onError(errorInfo);\r\n }\r\n };\r\n\r\n const handleFolderClick = (e: MouseEvent) => {\r\n e.stopPropagation();\r\n if (isLoading() || item.disabled) {\r\n e.preventDefault();\r\n return;\r\n }\r\n\r\n const currentIsExpanded = detailsRef?.open ?? folderItem.defaultExpanded;\r\n const willExpand = !currentIsExpanded;\r\n\r\n // In horizontal mode, collapse other root folders when expanding a root folder\r\n if (p.direction === 'horizontal' && parentId === null && willExpand) {\r\n collapseOtherRootFolders(itemId);\r\n }\r\n\r\n if (detailsRef?.open === false) {\r\n addActiveClassForId(itemId);\r\n } else {\r\n setTimeout(() => {\r\n collapseById(itemId);\r\n });\r\n }\r\n\r\n if (p.onItemClick) {\r\n const isExpanded = willExpand;\r\n const info: ItemClickInfo = {\r\n id: itemId,\r\n path: nodeRegistry.getPath(itemId),\r\n type: 'folder',\r\n isExpanded,\r\n data: item.data,\r\n };\r\n p.onItemClick(info);\r\n }\r\n };\r\n return (\r\n <li\r\n class={cn(\r\n 'folder',\r\n (folderItem.disabled || isLoading()) && 'menu-disabled',\r\n p.class?.itemWrap,\r\n )}\r\n id={itemId}\r\n >\r\n <details ref={detailsRef} open={folderItem.defaultExpanded} onToggle={handleToggle}>\r\n <summary\r\n class={cn(isLoading() && 'after:hidden', p.class?.itemHeader)}\r\n onClick={handleFolderClick}\r\n >\r\n {folderItem.content as Element}\r\n <Show when={isLoading()}>\r\n <span class=\"loading loading-spinner loading-xs\"></span>\r\n </Show>\r\n </summary>\r\n <ul>\r\n <Show\r\n when={isLazyFolder}\r\n fallback={\r\n <For each={(folderItem as { items: MenuItem[] }).items}>\r\n {subItem => renderItems(subItem, itemId)}\r\n </For>\r\n }\r\n >\r\n <LazyFolderContent\r\n {...{\r\n renderItems,\r\n shouldLoad,\r\n isLoading,\r\n setIsLoading,\r\n item: folderItem,\r\n parentId: itemId,\r\n onLoadError: handleLoadError,\r\n onRegisterRefresh: refreshFn => lazyFolderRegistry.register(itemId, refreshFn),\r\n }}\r\n />\r\n </Show>\r\n </ul>\r\n </details>\r\n </li>\r\n );\r\n }\r\n if (item.type === 'file') {\r\n const handleFileClick = (e: MouseEvent) => {\r\n e.stopPropagation();\r\n addActiveClassForId(itemId);\r\n\r\n if (p.onItemClick) {\r\n const info: ItemClickInfo = {\r\n id: itemId,\r\n path: nodeRegistry.getPath(itemId),\r\n type: 'file',\r\n ...(item.data && { data: item.data }),\r\n };\r\n p.onItemClick(info);\r\n }\r\n };\r\n return (\r\n <li\r\n class={cn('file', item.disabled && 'menu-disabled', p.class?.itemWrap)}\r\n id={itemId}\r\n tabindex=\"0\"\r\n onClick={handleFileClick}\r\n >\r\n <div>{item.content as Element}</div>\r\n </li>\r\n );\r\n }\r\n if (item.type === 'title') {\r\n const handleTitleClick = (e: MouseEvent) => {\r\n e.stopPropagation();\r\n\r\n const li = document.getElementById(itemId);\r\n if (li && li.classList.contains(ACTIVE_CLASSNAME)) {\r\n const elements = li.getElementsByClassName(ACTIVE_CLASSNAME);\r\n for (const el of elements) el.classList.remove(ACTIVE_CLASSNAME);\r\n li.classList.remove(ACTIVE_CLASSNAME);\r\n } else {\r\n addActiveClassForId(itemId);\r\n }\r\n\r\n if (p.onItemClick) {\r\n const info: ItemClickInfo = {\r\n id: itemId,\r\n path: nodeRegistry.getPath(itemId),\r\n type: 'title',\r\n ...(item.data && { data: item.data }),\r\n };\r\n p.onItemClick(info);\r\n }\r\n };\r\n return (\r\n <li class={cn('title', item.disabled && 'menu-disabled', p.class?.itemWrap)} id={itemId}>\r\n <h4 class=\"menu-title\" onClick={handleTitleClick}>\r\n {item.content as Element}\r\n </h4>\r\n <ul>\r\n <For each={item.items}>{subItem => renderItems(subItem, itemId)}</For>\r\n </ul>\r\n </li>\r\n );\r\n }\r\n }\r\n const isLazyRoot = p.lazyItems !== undefined;\r\n const [rootItems, setRootItems] = createSignal<MenuItem[] | null>(\r\n isLazyRoot ? null : (p.items ?? []),\r\n );\r\n const [isRootLoading, setIsRootLoading] = createSignal(false);\r\n\r\n createEffect(\r\n on(\r\n () => p.items,\r\n items => {\r\n if (!isLazyRoot && items) {\r\n nodeRegistry.clear();\r\n lazyFolderRegistry.clear();\r\n setRootItems(items);\r\n }\r\n },\r\n { defer: true },\r\n ),\r\n );\r\n\r\n onCleanup(function clearMenuRegistries() {\r\n nodeRegistry.clear();\r\n lazyFolderRegistry.clear();\r\n });\r\n\r\n const loadRootItems = async () => {\r\n if (!p.lazyItems || rootItems() !== null || isRootLoading()) return;\r\n setIsRootLoading(true);\r\n try {\r\n const items = await p.lazyItems();\r\n setRootItems(items);\r\n } catch (e) {\r\n if (p.onError) {\r\n const errorInfo: MenuErrorInfo = {\r\n source: 'root',\r\n error: e,\r\n message: e instanceof Error ? e.message : 'Failed to load menu items',\r\n };\r\n p.onError(errorInfo);\r\n }\r\n } finally {\r\n setIsRootLoading(false);\r\n }\r\n };\r\n if (isLazyRoot) {\r\n loadRootItems();\r\n }\r\n const menuClass = createMemo(() =>\r\n cn(menuVariants({ size: p.size, direction: p.direction }), getColor(p.color), p.class?.root),\r\n );\r\n\r\n if (p.setMenuFunction) {\r\n p.setMenuFunction({\r\n focusById,\r\n collapseById,\r\n refreshById,\r\n refreshAll,\r\n collapseAll,\r\n expandedAll,\r\n });\r\n }\r\n return (\r\n <>\r\n <Show when={isRootLoading()}>\r\n <div class={cn(menuClass(), 'flex size-full justify-center p-4')}>\r\n <span class=\"loading loading-spinner loading-md m-auto\"></span>\r\n </div>\r\n </Show>\r\n <Show when={!isRootLoading()}>\r\n <Show\r\n when={rootItems() && rootItems()!.length > 0}\r\n fallback={\r\n <div class=\"text-base-content/50 flex flex-col items-center justify-center gap-2 p-4 text-center text-sm italic\">\r\n <span>No menu items available.</span>\r\n <Button\r\n icon={<RefreshCw size={10} />}\r\n variant={'default'}\r\n size={'4xs'}\r\n class=\"w-fit px-1.5\"\r\n onClick={loadRootItems}\r\n >\r\n Try again\r\n </Button>\r\n </div>\r\n }\r\n >\r\n <ul class={menuClass()} ref={ele => (ulRootRef = ele)} {...(p.id && { id: p.id })}>\r\n <For each={rootItems()!}>{item => renderItems(item)}</For>\r\n </ul>\r\n </Show>\r\n </Show>\r\n </>\r\n );\r\n};\r\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"modal.js","names":["SolidComponent","cn","AnimationConfig","renderCSSAnimation","conditionalRender","X","Component","createEffect","createSignal","createUniqueId","mergeProps","on","onCleanup","Show","ZIndex","ZIndexType","ModalType","onClose","width","closeOnOutsideClick","closeOnEsc","closable","header","body","footer","open","mask","enabled","blur","class","Partial","Record","preRender","animate","Omit","name","AnimateType","TRANSFORM_ANIMATIONS","Set","modalIds","setModalIds","popModalId","newArr","slice","pop","modalCloseCallbacks","Map","globalKeyDownHandler","e","KeyboardEvent","key","topId","at","get","registerModalCallback","id","cb","size","document","addEventListener","set","unregisterModalCallback","delete","removeEventListener","ComponentModal","p","duration","modalId","unregisterModal","renderMaskEnabled","renderMaskClass","animName","isTransformAnim","has","renderModalBoxAnim","animation","renderOverlayAnim","renderBoxStyle","style","overlayDone","setOverlayDone","handleOverlayAnimEnd","boxVisible","handleBackdropClick","_$createComponent","type","MODAL","blockScroll","position","inset","wrapper","children","when","_el$","_tmpl$","$$click","_$effect","_$className","_$memo","_el$2","_tmpl$2","_el$3","_tmpl$4","_el$5","firstChild","_el$6","_el$7","nextSibling","stopPropagation","_$insert","_el$4","_tmpl$3","_p$","_v$","modal","_v$2","t","_$style","undefined","_c$","_el$9","_tmpl$5","_$addEventListener","closeButton","fallback","_el$0","_tmpl$6","_el$1","Element","_el$8","_v$3","_v$4","visibility","_v$5","_v$6","a","o","Modal","_$delegateEvents"],"sources":["../../../src/components/modal/modal.tsx"],"sourcesContent":["import { SolidComponent } from '@/type';\r\nimport { cn } from '@/utils/cn';\r\nimport { AnimationConfig, renderCSSAnimation } from '@/utils/helper';\r\nimport { conditionalRender } from '@/utils/hoc';\r\nimport X from 'lucide-solid/icons/x';\r\n\r\nimport {\r\n Component,\r\n createEffect,\r\n createSignal,\r\n createUniqueId,\r\n mergeProps,\r\n on,\r\n onCleanup,\r\n Show,\r\n} from 'solid-js';\r\nimport { ZIndex, ZIndexType } from '../z-index';\r\n\r\nexport type ModalType = {\r\n onClose: () => void;\r\n width?: string;\r\n closeOnOutsideClick?: boolean;\r\n closeOnEsc?: boolean;\r\n closable?: boolean;\r\n header?: SolidComponent;\r\n body?: SolidComponent;\r\n footer?: SolidComponent;\r\n open?: boolean;\r\n mask?: boolean | { enabled: boolean; blur: boolean };\r\n class?: Partial<\r\n Record<'wrapper' | 'modal' | 'header' | 'body' | 'footer' | 'closeButton', string>\r\n >;\r\n preRender?: boolean;\r\n animate?: Omit<AnimationConfig, 'name'> & {\r\n name: AnimateType;\r\n };\r\n};\r\n\r\n// Only opacity-based animations are safe to use on the modal box directly\r\n// because transform-based animations create a new containing block for\r\n// position:fixed descendants, which breaks fixed positioning inside body slots.\r\n// Transform animations are applied on a sibling overlay div instead.\r\ntype AnimateType =\r\n | 'none'\r\n | 'lightSpeedInRight'\r\n | 'lightSpeedInLeft'\r\n | 'fadeIn'\r\n | 'fadeInLeft'\r\n | 'fadeInRight'\r\n | 'fadeInDown'\r\n | 'fadeInUp'\r\n | 'bounceIn'\r\n | 'scaleInCenter'\r\n | 'slideInFwdCenter'\r\n | 'slideInBck'\r\n | 'tiltIn'\r\n | 'swingInRightBck'\r\n | 'puffInCenter'\r\n | 'scaleInBl';\r\n\r\n// Animations that use transform in their keyframes — these create a containing\r\n// block for position:fixed elements during the animation. They must NOT be\r\n// placed on any ancestor of body content.\r\nconst TRANSFORM_ANIMATIONS = new Set<AnimateType>([\r\n 'lightSpeedInRight',\r\n 'lightSpeedInLeft',\r\n 'fadeInLeft',\r\n 'fadeInRight',\r\n 'fadeInDown',\r\n 'fadeInUp',\r\n 'bounceIn',\r\n 'scaleInCenter',\r\n 'slideInFwdCenter',\r\n 'slideInBck',\r\n 'tiltIn',\r\n 'swingInRightBck',\r\n 'puffInCenter',\r\n 'scaleInBl',\r\n]);\r\n\r\n// Track active modals for overlay logic (only topmost modal shows mask)\r\nconst [modalIds, setModalIds] = createSignal<string[]>([]);\r\nfunction popModalId() {\r\n const newArr = modalIds().slice();\r\n newArr.pop();\r\n setModalIds(newArr);\r\n}\r\n\r\n// Global ESC key handler — single listener shared across all modal instances\r\nconst modalCloseCallbacks = new Map<string, () => void>();\r\n\r\nfunction globalKeyDownHandler(e: KeyboardEvent) {\r\n if (e.key !== 'Escape') return;\r\n const topId = modalIds().at(-1);\r\n if (topId) modalCloseCallbacks.get(topId)?.();\r\n}\r\n\r\nfunction registerModalCallback(id: string, cb: () => void) {\r\n if (modalCloseCallbacks.size === 0) {\r\n document.addEventListener('keydown', globalKeyDownHandler);\r\n }\r\n modalCloseCallbacks.set(id, cb);\r\n}\r\n\r\nfunction unregisterModalCallback(id: string) {\r\n modalCloseCallbacks.delete(id);\r\n if (modalCloseCallbacks.size === 0) {\r\n document.removeEventListener('keydown', globalKeyDownHandler);\r\n }\r\n}\r\n\r\nconst ComponentModal: Component<ModalType> = p => {\r\n p = mergeProps(\r\n {\r\n closeOnOutsideClick: true,\r\n closeOnEsc: true,\r\n open: true,\r\n onClose: () => {},\r\n closable: true,\r\n preRender: false,\r\n animate: {\r\n name: 'puffInCenter',\r\n duration: '300ms',\r\n },\r\n mask: true,\r\n } as ModalType,\r\n p,\r\n );\r\n\r\n const modalId = createUniqueId();\r\n\r\n onCleanup(function unregisterModal() {\r\n unregisterModalCallback(modalId);\r\n if (modalId === modalIds().at(-1)) {\r\n popModalId();\r\n }\r\n });\r\n\r\n // Manage modalIds stack for overlay logic\r\n createEffect(\r\n on(\r\n () => p.open,\r\n open => {\r\n if (open) {\r\n if (modalId !== modalIds().at(-1)) {\r\n setModalIds([...modalIds(), modalId]);\r\n }\r\n registerModalCallback(modalId, () => {\r\n if (p.closeOnEsc) p.onClose();\r\n });\r\n } else {\r\n unregisterModalCallback(modalId);\r\n if (modalId === modalIds().at(-1)) {\r\n popModalId();\r\n }\r\n }\r\n },\r\n ),\r\n );\r\n\r\n const renderMaskEnabled = (): boolean => {\r\n if (!p.open) return false;\r\n if (modalId !== modalIds().at(-1)) return false;\r\n if (p.mask === false) return false;\r\n if (typeof p.mask === 'object' && p.mask?.enabled === false) return false;\r\n return true;\r\n };\r\n\r\n const renderMaskClass = (): string => {\r\n if (typeof p.mask === 'object' && p.mask?.blur === false) {\r\n return 'bg-modal-overlay';\r\n }\r\n return 'bg-modal-overlay backdrop-blur-[5px]';\r\n };\r\n\r\n const animName = (): AnimateType => p.animate?.name ?? 'none';\r\n const isTransformAnim = () => TRANSFORM_ANIMATIONS.has(animName());\r\n\r\n // For transform-based animations: rendered on a sibling absolutely-positioned\r\n // overlay div that visually matches the modal box but is NOT an ancestor of\r\n // body content. This completely avoids the containing-block issue.\r\n // For opacity-only animations (fadeIn): applied directly on the modal box.\r\n const renderModalBoxAnim = () => {\r\n if (!isTransformAnim() && animName() !== 'none') {\r\n return { animation: renderCSSAnimation(p.animate!) };\r\n }\r\n return {};\r\n };\r\n\r\n const renderOverlayAnim = () => {\r\n if (isTransformAnim()) {\r\n return { animation: renderCSSAnimation(p.animate!) };\r\n }\r\n return {};\r\n };\r\n\r\n const renderBoxStyle = () => {\r\n const style: Record<string, any> = {};\r\n if (p.width) {\r\n style['width'] = p.width;\r\n style['min-width'] = p.width;\r\n }\r\n return style;\r\n };\r\n\r\n // Overlay: a visually identical copy of the modal box that carries the\r\n // transform animation. It sits on top of the real modal box via absolute\r\n // positioning. Once animation ends it is hidden and the real box is shown.\r\n const [overlayDone, setOverlayDone] = createSignal(false);\r\n const handleOverlayAnimEnd = () => setOverlayDone(true);\r\n\r\n // Reset overlayDone each time modal re-opens so transform animation replays.\r\n createEffect(\r\n on(\r\n () => p.open,\r\n open => {\r\n if (open) setOverlayDone(false);\r\n },\r\n ),\r\n );\r\n\r\n // Real modal box becomes visible only after transform animation finishes\r\n // (to avoid showing both simultaneously).\r\n const boxVisible = () => !isTransformAnim() || overlayDone();\r\n\r\n const handleBackdropClick = () => {\r\n if (p.closeOnOutsideClick) {\r\n p.onClose();\r\n }\r\n };\r\n\r\n return (\r\n <ZIndex\r\n type={ZIndexType.MODAL}\r\n open={p.open ?? false}\r\n blockScroll\r\n preRender={p.preRender}\r\n position={{ inset: '0' }}\r\n class={cn('mo01', p.class?.wrapper)}\r\n >\r\n {/* Backdrop overlay — only for topmost modal */}\r\n <Show when={renderMaskEnabled()}>\r\n <div class={cn('mo02', renderMaskClass())} onClick={handleBackdropClick} />\r\n </Show>\r\n\r\n {/* Invisible hit area for outside-click when mask is disabled */}\r\n <Show when={!renderMaskEnabled() && p.closeOnOutsideClick}>\r\n <div class=\"mo02\" onClick={handleBackdropClick} />\r\n </Show>\r\n\r\n {/* Wrapper: flex item căn giữa bởi parent. Kích thước khớp real box.\r\n Overlay absolute bên trong → luôn cùng vị trí & kích thước với real box. */}\r\n <div class=\"mo03\" onClick={e => e.stopPropagation()}>\r\n {/* === Transform animation approach ===\r\n Overlay là visual clone với animation transform, positioned absolute\r\n bên trong wrapper → khớp 100% kích thước/vị trí với real box.\r\n Giữ body content thoát khỏi transform ancestor. */}\r\n <Show when={isTransformAnim() && !overlayDone()}>\r\n <div\r\n class={cn('mo04', p.class?.modal)}\r\n style={{ ...renderBoxStyle(), ...renderOverlayAnim() }}\r\n onAnimationEnd={handleOverlayAnimEnd}\r\n aria-hidden=\"true\"\r\n />\r\n </Show>\r\n\r\n {/* === Real modal box ===\r\n Dùng opacity animation (an toàn) hoặc không animation.\r\n Body content luôn thoát khỏi transform ancestor. */}\r\n <div\r\n class={cn('mo05', p.class?.modal)}\r\n style={{\r\n ...renderModalBoxAnim(),\r\n ...renderBoxStyle(),\r\n visibility: boxVisible() ? 'visible' : 'hidden',\r\n }}\r\n >\r\n {p.closable && (\r\n <button class={cn('mo06', p.class?.closeButton)} onClick={p.onClose} aria-label=\"Close\">\r\n <X size={16} />\r\n </button>\r\n )}\r\n\r\n <div class={cn('mo-header', p.class?.header)}>\r\n <Show when={p.header} fallback={<div class=\"mo07\">Modal ID: {modalId}</div>}>\r\n {p.header as Element}\r\n </Show>\r\n </div>\r\n\r\n <div class={cn('mo08', p.class?.body)}>\r\n <Show when={p.body}>{p.body as Element}</Show>\r\n </div>\r\n\r\n <Show when={p.footer}>\r\n <div class={cn('mo-footer', p.class?.footer)}>{p.footer as Element}</div>\r\n </Show>\r\n </div>\r\n </div>\r\n </ZIndex>\r\n );\r\n};\r\n\r\nexport const Modal = conditionalRender(ComponentModal, { preRender: 'preRender', when: 'open' });\r\n\r\nexport { ComponentModal };\r\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"modalContext.js","names":["createComponent","createRoot","createSignal","ComponentModal","ModalType","activeModalInstances","ModalInstance","destroy","createModal","options","Omit","disposeRoot","setIsOpen","v","disposed","doClose","callOnClose","onClose","index","indexOf","instance","splice","setTimeout","root","isOpen","_setIsOpen","open","preRender","push","closeAllModals","instances","forEach"],"sources":["../../../src/components/modal/modalContext.tsx"],"sourcesContent":["import { createComponent, createRoot, createSignal } from 'solid-js';\r\nimport { ComponentModal, ModalType } from './modal';\r\n\r\nconst activeModalInstances: ModalInstance[] = [];\r\n\r\ntype ModalInstance = {\r\n destroy: () => void;\r\n};\r\n\r\nexport function createModal(options: Omit<ModalType, 'open' | 'preRender'>): ModalInstance {\r\n let disposeRoot: (() => void) | null = null;\r\n let setIsOpen: ((v: boolean) => void) | null = null;\r\n let disposed = false;\r\n\r\n const doClose = (callOnClose: boolean) => {\r\n if (disposed) return;\r\n disposed = true;\r\n\r\n setIsOpen?.(false);\r\n if (callOnClose) options.onClose?.();\r\n\r\n const index = activeModalInstances.indexOf(instance);\r\n if (index > -1) {\r\n activeModalInstances.splice(index, 1);\r\n }\r\n\r\n setTimeout(() => {\r\n disposeRoot?.();\r\n }, 150);\r\n };\r\n\r\n createRoot(root => {\r\n disposeRoot = root;\r\n const [isOpen, _setIsOpen] = createSignal(true);\r\n setIsOpen = _setIsOpen;\r\n\r\n // ComponentModal renders via Portal (ZIndex → Portal) — it mounts itself\r\n // into document.body internally. We only need to call it inside a reactive\r\n // root so its signals/effects run; we don't need to insert it anywhere.\r\n createComponent(ComponentModal, {\r\n ...options,\r\n get open() {\r\n return isOpen();\r\n },\r\n preRender: false,\r\n onClose: () => doClose(true),\r\n });\r\n });\r\n\r\n const instance: ModalInstance = {\r\n destroy: () => doClose(false),\r\n };\r\n\r\n activeModalInstances.push(instance);\r\n return instance;\r\n}\r\n\r\nexport function closeAllModals() {\r\n const instances = [...activeModalInstances];\r\n instances.forEach(instance => instance.destroy());\r\n}\r\n"],"mappings":"yHAGA,IAAMK,EAAwC,EAAE,CAMhD,SAAgBG,EAAYC,EAA+D,CACzF,IAAIE,EAAmC,KACnCC,EAA2C,KAC3CE,EAAW,GAETC,EAAWC,GAAyB,CACxC,GAAIF,EAAU,OACdA,EAAW,GAEXF,IAAY,GAAM,CACdI,GAAaP,EAAQQ,WAAW,CAEpC,IAAMC,EAAQb,EAAqBc,QAAQC,EAAS,CAChDF,EAAQ,IACVb,EAAqBgB,OAAOH,EAAO,EAAE,CAGvCI,eAAiB,CACfX,KAAe,EACd,IAAI,EAGTV,EAAWsB,GAAQ,CACjBZ,EAAcY,EACd,GAAM,CAACC,EAAQC,GAAcvB,EAAa,GAAK,CAC/CU,EAAYa,EAKZzB,EAAgBG,EAAgB,CAC9B,GAAGM,EACH,IAAIiB,MAAO,CACT,OAAOF,GAAQ,EAEjBG,UAAW,GACXV,YAAeF,EAAQ,GAAI,CAC5B,CAAC,EACF,CAEF,IAAMK,EAA0B,CAC9Bb,YAAeQ,EAAQ,GAAK,CAC7B,CAGD,OADAV,EAAqBuB,KAAKR,EAAS,CAC5BA,EAGT,SAAgBS,GAAiB,CACb,CAAC,GAAGxB,EAAqB,CACjC0B,QAAQX,GAAYA,EAASb,SAAS,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pagination.js","names":["Select","cn","getColor","ChevronLeft","ChevronRight","Component","createEffect","createMemo","createSignal","For","Match","mergeProps","Show","Switch","PaginationDefaultProps","PaginationFullyProps","PaginationProps","PaginationSimpleProps","DEFAULT_PROPS","defaultCurrent","defaultPageSize","total","align","const","size","color","hideOnSinglePage","showLessItems","showQuickJumper","showTitle","disabled","pageSizeOptions","totalBoundaryShowSizeChanger","buildSizeClass","buildAlignClass","mapSizeToSelect","buildPageItems","totalPages","current","sibling","Array","from","length","_","i","items","push","leftBound","Math","max","rightBound","min","PaginationDefault","props","p","internalCurrent","setInternalCurrent","internalPageSize","setInternalPageSize","jumpValue","setJumpValue","pageSize","ceil","showSizeChanger","shouldHide","changePage","page","clamped","onChange","changePageSize","newTotal","newCurrent","onShowSizeChange","pageItems","handleJump","val","parseInt","isNaN","range","start","end","pageSizeSelectOpts","map","opt","label","value","_$createComponent","when","children","_el$","_tmpl$5","_$insert","showTotal","_el$2","_tmpl$","_$effect","_$className","class","btn","_el$8","_tmpl$6","$$click","_p$","_v$6","prev","btnDisabled","_v$7","e","t","undefined","itemRender","each","item","_el$9","_tmpl$7","jump","_$setAttribute","_v$8","ellipsis","_v$9","pageBtn","_el$0","_tmpl$8","_v$0","itemActive","_v$1","_v$10","a","_el$1","_tmpl$9","_v$11","next","_v$12","_el$3","_tmpl$2","options","placement","root","sizeChanger","_el$4","_tmpl$4","_el$5","firstChild","_el$6","nextSibling","$$keydown","key","currentTarget","blur","$$input","_$memo","goButton","fallback","_el$7","_tmpl$3","_v$","jumper","_v$2","jumperLabel","_v$3","jumperInput","_v$4","_v$5","o","PaginationSimple","_el$10","_tmpl$0","_el$11","_el$12","_el$13","_el$14","_el$15","_el$16","addEventListener","v","target","HTMLInputElement","select","_v$13","_v$14","_v$15","_v$16","simplePager","_v$17","simpleInput","_v$18","_v$19","_v$20","slash","_v$21","_v$22","n","s","h","r","d","PaginationFully","modernPageInput","setModernPageInput","String","syncPageInput","commitPageInput","num","_el$17","_tmpl$1","_el$18","_el$19","_el$20","_el$21","_el$22","_el$23","_el$26","_el$24","_el$27","_el$25","_el$28","_el$29","_el$30","_el$31","_el$33","_el$32","_el$34","_el$35","Number","_el$36","_tmpl$10","_v$23","_v$24","fullyLeft","_v$25","fullyLabel","_v$26","_v$27","_v$28","fullyRange","_v$29","fullyRight","_v$30","fullyPageInput","_v$31","_v$32","_v$33","_v$34","fullyPages","_v$35","_v$36","_v$37","_v$38","l","_$setStyleProperty","u","c","w","m","f","Pagination","mode","_$delegateEvents"],"sources":["../../../src/components/pagination/pagination.tsx"],"sourcesContent":["import { Select } from '@/components/select';\r\nimport { cn } from '@/utils/cn';\r\nimport { getColor } from '@/utils/helper';\r\nimport ChevronLeft from 'lucide-solid/icons/chevron-left';\r\nimport ChevronRight from 'lucide-solid/icons/chevron-right';\r\nimport {\r\n Component,\r\n createEffect,\r\n createMemo,\r\n createSignal,\r\n For,\r\n Match,\r\n mergeProps,\r\n Show,\r\n Switch,\r\n} from 'solid-js';\r\nimport type {\r\n PaginationDefaultProps,\r\n PaginationFullyProps,\r\n PaginationProps,\r\n PaginationSimpleProps,\r\n} from './pagination.types';\r\n\r\nconst DEFAULT_PROPS = {\r\n defaultCurrent: 1,\r\n defaultPageSize: 10,\r\n total: 0,\r\n align: 'start' as const,\r\n size: 'md' as const,\r\n color: 'neutral' as const,\r\n hideOnSinglePage: false,\r\n showLessItems: false,\r\n showQuickJumper: false,\r\n showTitle: true,\r\n disabled: false,\r\n pageSizeOptions: [10, 20, 50, 100],\r\n totalBoundaryShowSizeChanger: 50,\r\n};\r\n\r\n// ─── Shared helpers ─────────────────────────────────────────────────────────\r\n\r\nfunction buildSizeClass(size: string) {\r\n switch (size) {\r\n case 'xs':\r\n return 'pag26';\r\n case 'sm':\r\n return 'pag27';\r\n case 'lg':\r\n return 'pag29';\r\n case 'xl':\r\n return 'pag30';\r\n default:\r\n return 'pag28';\r\n }\r\n}\r\n\r\nfunction buildAlignClass(align: string) {\r\n switch (align) {\r\n case 'center':\r\n return 'justify-center';\r\n case 'end':\r\n return 'justify-end';\r\n default:\r\n return 'justify-start';\r\n }\r\n}\r\n\r\nfunction mapSizeToSelect(size: string): 'sm' | 'md' | 'lg' {\r\n if (size === 'lg' || size === 'xl') return 'lg';\r\n if (size === 'md') return 'md';\r\n return 'sm';\r\n}\r\n\r\n// Build page list with ellipsis algorithm\r\nfunction buildPageItems(totalPages: number, current: number, showLessItems: boolean) {\r\n const sibling = showLessItems ? 1 : 2;\r\n\r\n if (totalPages <= (showLessItems ? 7 : 9)) {\r\n return Array.from({ length: totalPages }, (_, i) => i + 1);\r\n }\r\n\r\n const items: (number | 'prev-ellipsis' | 'next-ellipsis')[] = [];\r\n\r\n items.push(1);\r\n\r\n const leftBound = Math.max(2, current - sibling);\r\n const rightBound = Math.min(totalPages - 1, current + sibling);\r\n\r\n if (leftBound > 2) items.push('prev-ellipsis');\r\n for (let i = leftBound; i <= rightBound; i++) items.push(i);\r\n if (rightBound < totalPages - 1) items.push('next-ellipsis');\r\n\r\n items.push(totalPages);\r\n\r\n return items;\r\n}\r\n\r\n// ─── Mode: default ──────────────────────────────────────────────────────────\r\n\r\nconst PaginationDefault: Component<PaginationDefaultProps> = props => {\r\n const p = mergeProps(DEFAULT_PROPS, props);\r\n\r\n const [internalCurrent, setInternalCurrent] = createSignal(p.defaultCurrent);\r\n const [internalPageSize, setInternalPageSize] = createSignal(p.defaultPageSize);\r\n const [jumpValue, setJumpValue] = createSignal('');\r\n\r\n const current = createMemo(() => p.current ?? internalCurrent());\r\n const pageSize = createMemo(() => p.pageSize ?? internalPageSize());\r\n const totalPages = createMemo(() => Math.max(1, Math.ceil((p.total ?? 0) / pageSize())));\r\n\r\n const showSizeChanger = createMemo(() => {\r\n if (typeof p.showSizeChanger === 'boolean') return p.showSizeChanger;\r\n if (typeof p.showSizeChanger === 'object') return true;\r\n return (p.total ?? 0) > (p.totalBoundaryShowSizeChanger ?? 50);\r\n });\r\n\r\n const shouldHide = createMemo(() => p.hideOnSinglePage && totalPages() <= 1);\r\n\r\n const changePage = (page: number) => {\r\n const clamped = Math.min(Math.max(1, page), totalPages());\r\n if (clamped === current()) return;\r\n setInternalCurrent(clamped);\r\n p.onChange?.(clamped, pageSize());\r\n };\r\n\r\n const changePageSize = (size: number) => {\r\n const newTotal = Math.max(1, Math.ceil((p.total ?? 0) / size));\r\n const newCurrent = Math.min(current(), newTotal);\r\n setInternalPageSize(size);\r\n setInternalCurrent(newCurrent);\r\n p.onShowSizeChange?.(newCurrent, size);\r\n p.onChange?.(newCurrent, size);\r\n };\r\n\r\n const pageItems = createMemo(() => buildPageItems(totalPages(), current(), p.showLessItems));\r\n\r\n const handleJump = () => {\r\n const val = parseInt(jumpValue(), 10);\r\n if (!isNaN(val)) {\r\n changePage(val);\r\n setJumpValue('');\r\n }\r\n };\r\n\r\n const range = createMemo<[number, number]>(() => {\r\n const start = (current() - 1) * pageSize() + 1;\r\n const end = Math.min(current() * pageSize(), p.total ?? 0);\r\n return [start, end];\r\n });\r\n\r\n const pageSizeSelectOpts = createMemo(() =>\r\n p.pageSizeOptions.map(opt => ({ label: `${opt} / page`, value: opt as number })),\r\n );\r\n\r\n return (\r\n <Show when={!shouldHide()}>\r\n <div\r\n class={cn(\r\n 'pag01 pag02',\r\n buildSizeClass(p.size),\r\n buildAlignClass(p.align),\r\n getColor(p.color),\r\n p.disabled && 'pag05',\r\n p.class?.root,\r\n )}\r\n >\r\n {/* Show total */}\r\n <Show when={p.showTotal}>\r\n <span class={cn('pag13', p.class?.total)}>{p.showTotal!(p.total ?? 0, range())}</span>\r\n </Show>\r\n\r\n {/* Prev button */}\r\n {(() => {\r\n const btn = (\r\n <button\r\n class={cn(\r\n 'pag06 pag08',\r\n p.class?.btn,\r\n p.class?.prev,\r\n current() <= 1 && 'pag07',\r\n current() <= 1 && p.class?.btnDisabled,\r\n )}\r\n disabled={p.disabled || current() <= 1}\r\n onClick={() => changePage(current() - 1)}\r\n title=\"Previous Page\"\r\n >\r\n <ChevronLeft size={16} />\r\n </button>\r\n );\r\n return p.itemRender ? p.itemRender(current() - 1, 'prev', btn) : btn;\r\n })()}\r\n\r\n {/* Page items */}\r\n <For each={pageItems()}>\r\n {item => {\r\n if (item === 'prev-ellipsis' || item === 'next-ellipsis') {\r\n return (\r\n <button\r\n class={cn('pag06 pag10', p.class?.btn, p.class?.ellipsis)}\r\n disabled={p.disabled}\r\n onClick={() => {\r\n const jump =\r\n item === 'prev-ellipsis'\r\n ? Math.max(1, current() - (p.showLessItems ? 3 : 5))\r\n : Math.min(totalPages(), current() + (p.showLessItems ? 3 : 5));\r\n changePage(jump);\r\n }}\r\n title={item === 'prev-ellipsis' ? 'Previous 5 pages' : 'Next 5 pages'}\r\n >\r\n •••\r\n </button>\r\n );\r\n }\r\n const pageBtn = (\r\n <button\r\n class={cn(\r\n 'pag06',\r\n item === current() && 'pag11',\r\n item === current() && p.class?.itemActive,\r\n p.class?.btn,\r\n )}\r\n disabled={p.disabled}\r\n onClick={() => changePage(item)}\r\n title={p.showTitle ? `Page ${item}` : undefined}\r\n >\r\n {item}\r\n </button>\r\n );\r\n return p.itemRender ? p.itemRender(item, 'page', pageBtn) : pageBtn;\r\n }}\r\n </For>\r\n\r\n {/* Next button */}\r\n {(() => {\r\n const btn = (\r\n <button\r\n class={cn(\r\n 'pag06 pag09',\r\n current() >= totalPages() && 'pag07',\r\n current() >= totalPages() && p.class?.btnDisabled,\r\n p.class?.btn,\r\n p.class?.next,\r\n )}\r\n disabled={p.disabled || current() >= totalPages()}\r\n onClick={() => changePage(current() + 1)}\r\n title=\"Next Page\"\r\n >\r\n <ChevronRight size={16} />\r\n </button>\r\n );\r\n return p.itemRender ? p.itemRender(current() + 1, 'next', btn) : btn;\r\n })()}\r\n\r\n {/* Size changer */}\r\n <Show when={showSizeChanger()}>\r\n <div class=\"w-fit\">\r\n <Select\r\n options={pageSizeSelectOpts()}\r\n value={pageSize()}\r\n onChange={val => changePageSize(val as number)}\r\n disabled={p.disabled}\r\n size={mapSizeToSelect(p.size)}\r\n color={p.color}\r\n placement=\"top\"\r\n class={{ root: p.class?.sizeChanger }}\r\n />\r\n </div>\r\n </Show>\r\n\r\n {/* Quick jumper */}\r\n <Show when={p.showQuickJumper}>\r\n <span\r\n class={cn(\r\n 'pag14',\r\n p.align === 'end' && 'order-first mr-auto',\r\n p.align === 'start' && 'ml-auto',\r\n p.class?.jumper,\r\n )}\r\n >\r\n <span class={cn('pag15', p.class?.jumperLabel)}>Go to</span>\r\n <input\r\n class={cn('pag16', p.class?.jumperInput)}\r\n type=\"number\"\r\n min={1}\r\n max={totalPages()}\r\n value={jumpValue()}\r\n disabled={p.disabled}\r\n onInput={e => setJumpValue(e.currentTarget.value)}\r\n onKeyDown={e => {\r\n if (e.key === 'Enter') {\r\n handleJump();\r\n e.currentTarget.blur();\r\n }\r\n }}\r\n />\r\n <Show\r\n when={typeof p.showQuickJumper === 'object' && p.showQuickJumper.goButton}\r\n fallback={null}\r\n >\r\n <span onClick={() => handleJump()} class=\"cursor-pointer\">\r\n {(p.showQuickJumper as { goButton: any }).goButton}\r\n </span>\r\n </Show>\r\n </span>\r\n </Show>\r\n </div>\r\n </Show>\r\n );\r\n};\r\n\r\n// ─── Mode: simple ────────────────────────────────────────────────────────────\r\n\r\nconst PaginationSimple: Component<PaginationSimpleProps> = props => {\r\n const p = mergeProps(DEFAULT_PROPS, props);\r\n\r\n const [internalCurrent, setInternalCurrent] = createSignal(p.defaultCurrent);\r\n const [internalPageSize, setInternalPageSize] = createSignal(p.defaultPageSize);\r\n\r\n const current = createMemo(() => p.current ?? internalCurrent());\r\n const pageSize = createMemo(() => p.pageSize ?? internalPageSize());\r\n const totalPages = createMemo(() => Math.max(1, Math.ceil((p.total ?? 0) / pageSize())));\r\n const shouldHide = createMemo(() => p.hideOnSinglePage && totalPages() <= 1);\r\n\r\n const changePage = (page: number) => {\r\n const clamped = Math.min(Math.max(1, page), totalPages());\r\n if (clamped === current()) return;\r\n setInternalCurrent(clamped);\r\n p.onChange?.(clamped, pageSize());\r\n };\r\n\r\n return (\r\n <Show when={!shouldHide()}>\r\n <div\r\n class={cn(\r\n 'pag01 pag03',\r\n buildSizeClass(p.size),\r\n buildAlignClass(p.align),\r\n getColor(p.color),\r\n p.disabled && 'pag05',\r\n p.class?.root,\r\n )}\r\n >\r\n <button\r\n class={cn(\r\n 'pag06 pag08',\r\n p.class?.btn,\r\n p.class?.prev,\r\n current() <= 1 && 'pag07',\r\n current() <= 1 && p.class?.btnDisabled,\r\n )}\r\n disabled={p.disabled || current() <= 1}\r\n onClick={() => changePage(current() - 1)}\r\n title=\"Previous\"\r\n >\r\n <ChevronLeft size={16} />\r\n </button>\r\n <span class={cn('pag17', p.class?.simplePager)}>\r\n <input\r\n class={cn('pag18', p.class?.simpleInput)}\r\n type=\"number\"\r\n min={1}\r\n max={totalPages()}\r\n value={current()}\r\n disabled={p.disabled}\r\n onFocus={e => e.currentTarget.select()}\r\n onKeyDown={e => {\r\n if (e.key === 'Enter') {\r\n const v = parseInt((e.target as HTMLInputElement).value, 10);\r\n if (!isNaN(v)) changePage(v);\r\n }\r\n }}\r\n onBlur={e => {\r\n const v = parseInt(e.currentTarget.value, 10);\r\n if (!isNaN(v)) changePage(v);\r\n }}\r\n />\r\n <span class={cn('pag19', p.class?.slash)}>/</span>\r\n <span>{totalPages()}</span>\r\n </span>\r\n <button\r\n class={cn(\r\n 'pag06 pag09',\r\n p.class?.btn,\r\n p.class?.next,\r\n current() >= totalPages() && 'pag07',\r\n current() >= totalPages() && p.class?.btnDisabled,\r\n )}\r\n disabled={p.disabled || current() >= totalPages()}\r\n onClick={() => changePage(current() + 1)}\r\n title=\"Next\"\r\n >\r\n <ChevronRight size={16} />\r\n </button>\r\n </div>\r\n </Show>\r\n );\r\n};\r\n\r\n// ─── Mode: fully ─────────────────────────────────────────────────────────────\r\n\r\nconst PaginationFully: Component<PaginationFullyProps> = props => {\r\n const p = mergeProps(DEFAULT_PROPS, props);\r\n\r\n const [internalCurrent, setInternalCurrent] = createSignal(p.defaultCurrent);\r\n const [internalPageSize, setInternalPageSize] = createSignal(p.defaultPageSize);\r\n const [modernPageInput, setModernPageInput] = createSignal(String(p.defaultCurrent ?? 1));\r\n\r\n const current = createMemo(() => p.current ?? internalCurrent());\r\n const pageSize = createMemo(() => p.pageSize ?? internalPageSize());\r\n const totalPages = createMemo(() => Math.max(1, Math.ceil((p.total ?? 0) / pageSize())));\r\n const shouldHide = createMemo(() => p.hideOnSinglePage && totalPages() <= 1);\r\n\r\n createEffect(function syncPageInput() {\r\n setModernPageInput(String(current()));\r\n });\r\n\r\n const changePage = (page: number) => {\r\n const clamped = Math.min(Math.max(1, page), totalPages());\r\n if (clamped === current()) return;\r\n setInternalCurrent(clamped);\r\n p.onChange?.(clamped, pageSize());\r\n };\r\n\r\n const changePageSize = (size: number) => {\r\n const newTotal = Math.max(1, Math.ceil((p.total ?? 0) / size));\r\n const newCurrent = Math.min(current(), newTotal);\r\n setInternalPageSize(size);\r\n setInternalCurrent(newCurrent);\r\n p.onShowSizeChange?.(newCurrent, size);\r\n p.onChange?.(newCurrent, size);\r\n };\r\n\r\n const range = createMemo<[number, number]>(() => {\r\n const start = (current() - 1) * pageSize() + 1;\r\n const end = Math.min(current() * pageSize(), p.total ?? 0);\r\n return [start, end];\r\n });\r\n\r\n const commitPageInput = (value: string) => {\r\n const num = parseInt(value, 10);\r\n const clamped = !isNaN(num) ? Math.min(Math.max(1, num), totalPages()) : current();\r\n changePage(clamped);\r\n setModernPageInput(String(clamped));\r\n };\r\n\r\n return (\r\n <Show when={!shouldHide()}>\r\n <div\r\n class={cn(\r\n 'pag01 pag04',\r\n buildSizeClass(p.size),\r\n getColor(p.color),\r\n p.disabled && 'pag05',\r\n p.class?.root,\r\n )}\r\n >\r\n {/* Left: items-per-page dropdown + range */}\r\n <div class={cn('pag20', p.class?.fullyLeft)}>\r\n <span class={cn('pag22', p.class?.fullyLabel)}>Items per page:</span>\r\n <select\r\n class={cn('pag12', p.class?.sizeChanger)}\r\n disabled={p.disabled}\r\n value={pageSize()}\r\n onChange={e => changePageSize(Number(e.currentTarget.value))}\r\n >\r\n <For each={p.pageSizeOptions}>{opt => <option value={opt}>{opt}</option>}</For>\r\n </select>\r\n <div class=\"bg-c3/50 w-px self-stretch\"></div>\r\n <span class={cn('pag23', p.class?.fullyRange)}>\r\n {range()[0]}–{range()[1]} of {p.total ?? 0} items\r\n </span>\r\n </div>\r\n\r\n {/* Right: page input + prev/next buttons */}\r\n <div class={cn('pag21', p.class?.fullyRight)}>\r\n <input\r\n class={cn('pag25', p.class?.fullyPageInput)}\r\n type=\"number\"\r\n min={1}\r\n max={totalPages()}\r\n value={modernPageInput()}\r\n disabled={p.disabled}\r\n style={{ width: `${Math.max(2, modernPageInput().length) + 0.5}ch` }}\r\n onFocus={e => e.currentTarget.select()}\r\n onInput={e => setModernPageInput(e.currentTarget.value)}\r\n onBlur={e => commitPageInput(e.currentTarget.value)}\r\n onKeyDown={e => {\r\n if (e.key === 'Enter') {\r\n commitPageInput((e.currentTarget as HTMLInputElement).value);\r\n e.currentTarget.blur();\r\n }\r\n }}\r\n />\r\n <span class={cn('pag24', p.class?.fullyPages)}>of {totalPages()} pages</span>\r\n <button\r\n class={cn(\r\n 'pag06',\r\n p.class?.btn,\r\n p.class?.prev,\r\n current() <= 1 && 'pag07',\r\n current() <= 1 && p.class?.btnDisabled,\r\n )}\r\n disabled={p.disabled || current() <= 1}\r\n onClick={() => changePage(current() - 1)}\r\n title=\"Previous Page\"\r\n >\r\n <ChevronLeft size={16} />\r\n </button>\r\n <button\r\n class={cn(\r\n 'pag06',\r\n p.class?.btn,\r\n p.class?.next,\r\n current() >= totalPages() && 'pag07',\r\n current() >= totalPages() && p.class?.btnDisabled,\r\n )}\r\n disabled={p.disabled || current() >= totalPages()}\r\n onClick={() => changePage(current() + 1)}\r\n title=\"Next Page\"\r\n >\r\n <ChevronRight size={16} />\r\n </button>\r\n </div>\r\n </div>\r\n </Show>\r\n );\r\n};\r\n\r\n// ─── Public component ────────────────────────────────────────────────────────\r\n\r\nexport const Pagination: Component<PaginationProps> = p => {\r\n return (\r\n <Switch fallback={<PaginationDefault {...(p as PaginationDefaultProps)} />}>\r\n <Match when={p.mode === 'simple'}>\r\n <PaginationSimple {...(p as PaginationSimpleProps)} />\r\n </Match>\r\n <Match when={p.mode === 'fully'}>\r\n <PaginationFully {...(p as PaginationFullyProps)} />\r\n </Match>\r\n </Switch>\r\n );\r\n};\r\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"progress-bar.js","names":["render","createSignal","onCleanup","cn","getColor","ProgressBarOptions","BarProps","Required","instanceId","onDone","ProgressBarInner","props","progress","setProgress","opacity","setOpacity","rafId","startTime","INITIAL_SPEED","DECAY","MAX_PROGRESS","animate","timestamp","elapsed","speed","Math","pow","delta","prev","next","requestAnimationFrame","completeAndFade","cancelAnimationFrame","setTimeout","fadeOutDuration","completionHandlers","set","cancelProgressAnimation","delete","isRtl","direction","barStyle","width","height","transition","rounded","undefined","containerStyle","zIndex","position","const","left","right","_el$","_tmpl$","_el$2","firstChild","_$insert","_c$","_$memo","shimmer","_el$3","_tmpl$2","_$effect","_$className","_p$","_v$","_v$2","color","_v$3","e","_$style","t","a","Map","activeDisposers","containerEl","HTMLDivElement","ensureContainer","document","createElement","id","body","appendChild","disposeAll","dispose","values","clear","ProgressBarAPI","start","options","dismiss","DEFAULT_OPTIONS","progressBar","random","toString","slice","mergedOptions","slot","_$createComponent","_$mergeProps","remove","size","ids","keys","handler","get"],"sources":["../../../src/components/progress-bar/progress-bar.tsx"],"sourcesContent":["import { render } from 'solid-js/web';\r\nimport { createSignal, onCleanup } from 'solid-js';\r\nimport { cn } from '@/utils/cn';\r\nimport { getColor } from '@/utils/helper';\r\nimport type { ProgressBarOptions } from './progress-bar.types';\r\n\r\n// ─── Internal Bar Component ───────────────────────────────────────────────────\r\n\r\ninterface BarProps extends Required<ProgressBarOptions> {\r\n instanceId: string;\r\n onDone: () => void;\r\n}\r\n\r\nconst ProgressBarInner = (props: BarProps) => {\r\n const [progress, setProgress] = createSignal(0);\r\n const [opacity, setOpacity] = createSignal(1);\r\n\r\n let rafId: number;\r\n let startTime: number | null = null;\r\n\r\n // Tốc độ ban đầu (% mỗi giây), giảm dần theo hàm mũ\r\n const INITIAL_SPEED = 28;\r\n const DECAY = 0.88; // mỗi giây speed *= DECAY\r\n const MAX_PROGRESS = 99;\r\n\r\n const animate = (timestamp: number) => {\r\n if (startTime === null) startTime = timestamp;\r\n const elapsed = (timestamp - startTime) / 1000; // giây\r\n\r\n const speed = INITIAL_SPEED * Math.pow(DECAY, elapsed * 2.5);\r\n const delta = speed / 60; // per frame (60fps)\r\n\r\n setProgress(prev => {\r\n const next = prev + delta;\r\n return next >= MAX_PROGRESS ? MAX_PROGRESS : next;\r\n });\r\n\r\n if (progress() < MAX_PROGRESS) {\r\n rafId = requestAnimationFrame(animate);\r\n }\r\n };\r\n\r\n rafId = requestAnimationFrame(animate);\r\n\r\n // dismiss() gọi hàm này — jump lên 100% rồi fade out\r\n const completeAndFade = () => {\r\n cancelAnimationFrame(rafId);\r\n setProgress(100);\r\n setTimeout(() => {\r\n setOpacity(0);\r\n setTimeout(() => props.onDone(), props.fadeOutDuration);\r\n }, 80);\r\n };\r\n\r\n completionHandlers.set(props.instanceId, completeAndFade);\r\n\r\n onCleanup(function cancelProgressAnimation() {\r\n cancelAnimationFrame(rafId);\r\n completionHandlers.delete(props.instanceId);\r\n });\r\n\r\n const isRtl = () => props.direction === 'rightToLeft';\r\n\r\n const barStyle = () => ({\r\n width: `${progress()}%`,\r\n height: `${props.height}px`,\r\n transition: 'width 0.06s linear',\r\n 'border-radius': props.rounded ? (isRtl() ? '9999px 0 0 9999px' : '0 9999px 9999px 0') : '0',\r\n 'margin-left': isRtl() ? 'auto' : undefined,\r\n });\r\n\r\n const containerStyle = () => ({\r\n opacity: opacity(),\r\n transition: `opacity ${props.fadeOutDuration}ms ease`,\r\n 'z-index': props.zIndex,\r\n position: 'fixed' as const,\r\n [props.position === 'bottom' ? 'bottom' : 'top']: '0',\r\n left: '0',\r\n right: '0',\r\n 'pointer-events': 'none' as const,\r\n });\r\n\r\n return (\r\n <div style={containerStyle()}>\r\n <div\r\n class={cn('relative overflow-hidden', getColor(props.color), 'bg-(--color)')}\r\n style={barStyle()}\r\n >\r\n {props.shimmer && (\r\n <div\r\n class={cn(\r\n 'absolute inset-0',\r\n 'animate-[shimmer_1.2s_ease-in-out_infinite]',\r\n 'bg-linear-to-r from-transparent via-white/40 to-transparent',\r\n )}\r\n />\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\n// ─── Global state ─────────────────────────────────────────────────────────────\r\n\r\nconst completionHandlers = new Map<string, () => void>();\r\n\r\n// Track tất cả instances đang tồn tại (có thể nhiều hơn 1 trong khoảng thời gian ngắn)\r\nconst activeDisposers = new Map<string, () => void>();\r\n\r\nlet containerEl: HTMLDivElement | null = null;\r\n\r\nconst ensureContainer = () => {\r\n if (containerEl) return;\r\n containerEl = document.createElement('div');\r\n containerEl.id = 'sui-progress-bar-container';\r\n document.body.appendChild(containerEl);\r\n};\r\n\r\n// Xóa tất cả instances ngay lập tức (không animate)\r\nconst disposeAll = () => {\r\n for (const dispose of activeDisposers.values()) {\r\n dispose();\r\n }\r\n activeDisposers.clear();\r\n};\r\n\r\n// ─── Public API ───────────────────────────────────────────────────────────────\r\n\r\nexport interface ProgressBarAPI {\r\n start: (options?: ProgressBarOptions) => void;\r\n dismiss: () => void;\r\n}\r\n\r\nconst DEFAULT_OPTIONS: Required<ProgressBarOptions> = {\r\n color: 'primary',\r\n height: 3,\r\n shimmer: true,\r\n rounded: true,\r\n zIndex: 9999,\r\n fadeOutDuration: 300,\r\n position: 'top',\r\n direction: 'leftToRight',\r\n};\r\n\r\nconst progressBar: ProgressBarAPI = {\r\n start(options?: ProgressBarOptions) {\r\n ensureContainer();\r\n\r\n // Xóa tất cả instances cũ ngay lập tức\r\n disposeAll();\r\n\r\n const instanceId = Math.random().toString(36).slice(2);\r\n\r\n const mergedOptions: Required<ProgressBarOptions> = {\r\n ...DEFAULT_OPTIONS,\r\n ...options,\r\n };\r\n\r\n const slot = document.createElement('div');\r\n containerEl!.appendChild(slot);\r\n\r\n const dispose = render(\r\n () => (\r\n <ProgressBarInner\r\n {...mergedOptions}\r\n instanceId={instanceId}\r\n onDone={() => {\r\n dispose();\r\n slot.remove();\r\n activeDisposers.delete(instanceId);\r\n }}\r\n />\r\n ),\r\n slot,\r\n );\r\n\r\n activeDisposers.set(instanceId, () => {\r\n dispose();\r\n slot.remove();\r\n });\r\n },\r\n\r\n dismiss() {\r\n if (activeDisposers.size === 0) return;\r\n\r\n // Lấy tất cả instanceIds hiện tại\r\n const ids = [...activeDisposers.keys()];\r\n\r\n for (const id of ids) {\r\n const handler = completionHandlers.get(id);\r\n if (handler) {\r\n // Animate lên 100% rồi fade out\r\n activeDisposers.delete(id);\r\n handler();\r\n } else {\r\n // Fallback: xóa ngay\r\n const dispose = activeDisposers.get(id);\r\n activeDisposers.delete(id);\r\n dispose?.();\r\n }\r\n }\r\n },\r\n};\r\n\r\nexport { progressBar };\r\n"],"mappings":"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"}
|