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":"qr-code.js","names":["cn","getColor","QRCode","RefreshCw","CheckCircle","Loader","Component","createEffect","createUniqueId","mergeProps","onCleanup","Show","QrCodeProps","DEFAULT_PROPS","size","color","bgColor","errorLevel","const","status","expiredText","accentColor","drawQr","canvas","HTMLCanvasElement","value","opts","Promise","toCanvas","width","margin","dark","light","errorCorrectionLevel","drawLogo","logo","NonNullable","ctx","getContext","img","Image","crossOrigin","onload","onLogoLoad","logoW","logoH","height","pad","padding","radius","borderRadius","bg","background","bgW","bgH","x","y","beginPath","moveTo","lineTo","quadraticCurveTo","closePath","fillStyle","fill","drawImage","src","QrCode","props","p","id","canvasRef","renderQrCode","then","onQrDrawn","_el$","_tmpl$3","_el$2","firstChild","_$setAttribute","_ref$","_$use","_$insert","_$createComponent","when","children","_el$3","_tmpl$","class","overlayIcon","_$effect","_$className","overlay","_el$4","_tmpl$2","_el$5","_el$6","nextSibling","_$addEventListener","onRefresh","_p$","_v$","_v$2","_v$3","overlayText","e","t","a","undefined","_el$7","_v$4","root","_v$5","_v$6","_v$7","_v$8","_v$9","_v$0","_$setStyleProperty","o","i","n","s","_$delegateEvents"],"sources":["../../../src/components/qr-code/qr-code.tsx"],"sourcesContent":["import { cn } from '@utils/cn';\r\nimport { getColor } from '@utils/helper';\r\nimport QRCode from 'qrcode';\r\nimport RefreshCw from 'lucide-solid/icons/refresh-cw';\r\nimport CheckCircle from 'lucide-solid/icons/check-circle';\r\nimport Loader from 'lucide-solid/icons/loader';\r\nimport { Component, createEffect, createUniqueId, mergeProps, onCleanup, Show } from 'solid-js';\r\nimport type { QrCodeProps } from './qr-code.types';\r\n\r\nconst DEFAULT_PROPS = {\r\n size: 160,\r\n color: '#000000',\r\n bgColor: '#ffffff',\r\n errorLevel: 'M' as const,\r\n status: 'active' as const,\r\n expiredText: 'QR code expired',\r\n accentColor: 'primary' as const,\r\n};\r\n\r\nasync function drawQr(\r\n canvas: HTMLCanvasElement,\r\n value: string,\r\n opts: {\r\n size: number;\r\n color: string;\r\n bgColor: string;\r\n errorLevel: 'L' | 'M' | 'Q' | 'H';\r\n },\r\n): Promise<void> {\r\n await QRCode.toCanvas(canvas, value || ' ', {\r\n width: opts.size,\r\n margin: 2,\r\n color: {\r\n dark: opts.color,\r\n light: opts.bgColor,\r\n },\r\n errorCorrectionLevel: opts.errorLevel,\r\n });\r\n}\r\n\r\nfunction drawLogo(\r\n canvas: HTMLCanvasElement,\r\n logo: NonNullable<QrCodeProps['logo']>,\r\n size: number,\r\n): void {\r\n const ctx = canvas.getContext('2d');\r\n if (!ctx) return;\r\n\r\n const img = new Image();\r\n img.crossOrigin = 'anonymous';\r\n img.onload = function onLogoLoad() {\r\n const logoW = logo.width ?? size * 0.2;\r\n const logoH = logo.height ?? logoW;\r\n const pad = logo.padding ?? 4;\r\n const radius = logo.borderRadius ?? 4;\r\n const bg = logo.background ?? '#ffffff';\r\n\r\n const bgW = logoW + pad * 2;\r\n const bgH = logoH + pad * 2;\r\n const x = (size - bgW) / 2;\r\n const y = (size - bgH) / 2;\r\n\r\n // Draw background rect with rounded corners\r\n ctx.beginPath();\r\n ctx.moveTo(x + radius, y);\r\n ctx.lineTo(x + bgW - radius, y);\r\n ctx.quadraticCurveTo(x + bgW, y, x + bgW, y + radius);\r\n ctx.lineTo(x + bgW, y + bgH - radius);\r\n ctx.quadraticCurveTo(x + bgW, y + bgH, x + bgW - radius, y + bgH);\r\n ctx.lineTo(x + radius, y + bgH);\r\n ctx.quadraticCurveTo(x, y + bgH, x, y + bgH - radius);\r\n ctx.lineTo(x, y + radius);\r\n ctx.quadraticCurveTo(x, y, x + radius, y);\r\n ctx.closePath();\r\n ctx.fillStyle = bg;\r\n ctx.fill();\r\n\r\n // Draw logo image centered inside background\r\n ctx.drawImage(img, x + pad, y + pad, logoW, logoH);\r\n };\r\n img.src = logo.src;\r\n}\r\n\r\nexport const QrCode: Component<QrCodeProps> = props => {\r\n const p = mergeProps(DEFAULT_PROPS, props);\r\n const id = createUniqueId();\r\n let canvasRef: HTMLCanvasElement | undefined;\r\n\r\n createEffect(function renderQrCode() {\r\n if (!canvasRef) return;\r\n\r\n // Snapshot all reactive values synchronously — reads inside .then() would\r\n // occur outside the reactive computation and throw \"Effects is null\".\r\n const canvas = canvasRef;\r\n const value = p.value;\r\n const size = p.size;\r\n const color = p.color;\r\n const bgColor = p.bgColor;\r\n const errorLevel = p.errorLevel;\r\n const logo = p.logo;\r\n\r\n drawQr(canvas, value, { size, color, bgColor, errorLevel }).then(function onQrDrawn() {\r\n if (logo) {\r\n drawLogo(canvas, logo, size);\r\n }\r\n });\r\n });\r\n\r\n return (\r\n <div\r\n id={id}\r\n class={cn('qr01', p.class?.root)}\r\n style={{ width: `${p.size}px`, height: `${p.size}px` }}\r\n >\r\n {/* The QR canvas */}\r\n <canvas\r\n ref={canvasRef}\r\n class={cn('qr02', p.class?.canvas)}\r\n width={p.size}\r\n height={p.size}\r\n aria-label={`QR code for: ${p.value}`}\r\n />\r\n\r\n {/* Loading overlay */}\r\n <Show when={p.status === 'loading'}>\r\n <div class={cn('qr03', getColor(p.accentColor), p.class?.overlay)}>\r\n <Loader class={cn('qr04 animate-spin', p.class?.overlayIcon)} size={p.size * 0.22} />\r\n </div>\r\n </Show>\r\n\r\n {/* Expired overlay */}\r\n <Show when={p.status === 'expired'}>\r\n <div class={cn('qr03 qr05', getColor(p.accentColor), p.class?.overlay)}>\r\n <button\r\n class={cn('qr06', p.class?.overlayIcon)}\r\n onClick={p.onRefresh}\r\n aria-label=\"Refresh QR code\"\r\n >\r\n <RefreshCw size={p.size * 0.22} />\r\n </button>\r\n <span class={cn('qr07', p.class?.overlayText)}>{p.expiredText}</span>\r\n </div>\r\n </Show>\r\n\r\n {/* Scanned overlay */}\r\n <Show when={p.status === 'scanned'}>\r\n <div class={cn('qr03', getColor('success'), p.class?.overlay)}>\r\n <CheckCircle class={cn('qr04', p.class?.overlayIcon)} size={p.size * 0.22} />\r\n </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":"select.js","names":["SolidComponent","cn","getColor","createVirtualizer","cva","VariantProps","Check","ChevronDown","Search","X","createEffect","createMemo","createSignal","For","mergeProps","on","Show","Component","JSXElement","Dropdown","FlattenOptionData","LabeledValue","OptGroupType","SelectBaseProps","SelectFieldNames","SelectOptionType","SelectProps","SelectValue","ShowSearchConfig","TagRenderProps","selectVariants","variants","variant","outline","filled","borderless","underlined","size","lg","md","sm","color","neutral","primary","secondary","accent","info","success","warning","error","SelectVariantsProps","SelectTagProps","tag","value","label","closable","removeIcon","tagRender","props","onRemove","e","MouseEvent","SelectTag","onClose","_el$","_tmpl$2","_el$2","firstChild","_$insert","Element","_$createComponent","when","children","_el$3","_tmpl$","$$click","_c$","_$memo","InnerTooltip","content","_el$4","_tmpl$3","_el$5","_el$6","resolveFieldNames","fn","options","groupLabel","getField","option","field","FlatOption","disabled","class","title","raw","flattenOptions","fieldNames","ReturnType","result","opt","subOptions","Array","isArray","sub","push","undefined","OptionGroup","items","regroupFlatOptions","flatOptions","groups","last","length","extractValue","v","extractValues","map","item","filter","x","single","Select","p","const","loading","placement","listHeight","virtual","defaultActiveFirstOption","notFoundContent","labelInValue","placeholder","blockScroll","isMultiple","mode","allowCustomValue","showSearchEnabled","showSearch","searchConfig","base","autoClearSearchValue","filterOption","optionFilterProp","internalValue","setInternalValue","defaultValue","isOpen","setIsOpen","defaultOpen","searchText","setSearchText","activeIndex","setActiveIndex","selectedValues","dropdownOpen","open","controlledSearchValue","cfg","searchValue","currentSearchText","inputRef","HTMLInputElement","selectRootRef","HTMLDivElement","triggerRef","listRef","setListRef","allFlatOptions","allOptionsWithCustom","flat","existingValues","Set","o","customOpts","val","has","String","optionMap","Map","set","filteredOptions","all","text","filtered","Function","filterProps","lowerText","toLowerCase","some","prop","includes","filterSort","sortFn","sort","a","b","groupedForRender","RenderItem","type","flatIdx","flatRenderList","group","ITEM_HEIGHT","GROUP_LABEL_HEIGHT","virtualizer","count","getScrollElement","estimateSize","index","overscan","selectedValuesSet","isSelected","isMaxReached","max","maxCount","suppressBlurUntil","openDropdown","performance","now","onOpenChange","closeDropdown","onSearch","toggleDropdown","buildOutputValue","values","get","buildOutputOption","handleSelect","optValue","rawOpt","current","newValues","deselectVal","onDeselect","selectVal","onSelect","onChange","handleClear","stopPropagation","preventDefault","onClear","handleRemoveTag","handleKeyDown","KeyboardEvent","onInputKeyDown","opts","key","next","onActive","scrollActiveIntoView","prev","idx","trim","focus","vals","list","renderIdx","findIndex","scrollToIndex","align","el","querySelectorAll","HTMLElement","scrollIntoView","block","scrollToFirstSelected","firstSelectedValue","querySelector","handleSearchInput","InputEvent","target","handleFocus","FocusEvent","scrollX","window","scrollY","restoreScroll","requestAnimationFrame","scrollTo","addEventListener","once","passive","setTimeout","removeEventListener","onFocus","handleBlur","related","relatedTarget","contains","closest","onBlur","selectedLabel","labelRender","TagInfo","visibleTags","visible","omitted","maxTagCount","maxTextLen","maxTagTextLength","tags","slice","showClear","allowClear","handleTriggerClick","findOptionIndex","EventTarget","dataset","optionIndex","Number","classList","parentElement","handleListClick","renderOptionItem","selected","isActive","isDisabledOpt","flattenData","optionRender","_el$7","_tmpl$5","_el$8","_$setAttribute","_el$9","_tmpl$4","_c$2","menuItemSelectedIcon","_$effect","_p$","_v$","_v$2","_$className","t","dropdownContent","renderList","_el$0","_tmpl$6","_el$1","_tmpl$7","_el$10","_$use","each","getVirtualItems","virtualRow","_el$11","_tmpl$8","_c$3","_el$12","_tmpl$9","_v$6","_v$7","start","_$setStyleProperty","_v$3","_v$4","_v$5","getTotalSize","_el$13","_tmpl$0","_el$14","_$p","renderTag","measure","queueMicrotask","preventScroll","ref","position","trigger","triggerElement","_el$18","_tmpl$17","_el$20","_el$24","nextSibling","$$keydown","prefix","_el$19","_tmpl$11","fallback","_el$27","_tmpl$19","_el$29","_tmpl$13","_el$28","_tmpl$18","_el$21","_tmpl$14","_el$22","_tmpl$12","maxTagPlaceholder","omittedValues","_el$23","_el$25","_tmpl$15","_tmpl$20","_el$26","_tmpl$16","_c$5","suffixIcon","_v$0","root","_v$1","_v$10","_el$15","_tmpl$10","$$mousedown","tagName","_el$16","_tmpl$1","_el$17","$$input","_v$8","_v$9","_c$4","popupRender","_$delegateEvents"],"sources":["../../../src/components/select/select.tsx"],"sourcesContent":["import type { SolidComponent } from '@/type';\r\nimport { cn } from '@/utils/cn';\r\nimport { getColor } from '@/utils/helper';\r\nimport { createVirtualizer } from '@tanstack/solid-virtual';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport Check from 'lucide-solid/icons/check';\r\nimport ChevronDown from 'lucide-solid/icons/chevron-down';\r\nimport Search from 'lucide-solid/icons/search';\r\nimport X from 'lucide-solid/icons/x';\r\nimport {\r\n createEffect,\r\n createMemo,\r\n createSignal,\r\n For,\r\n mergeProps,\r\n on,\r\n Show,\r\n type Component,\r\n type JSXElement,\r\n} from 'solid-js';\r\nimport { Dropdown } from '../dropdown';\r\nimport type {\r\n FlattenOptionData,\r\n LabeledValue,\r\n OptGroupType,\r\n SelectBaseProps,\r\n SelectFieldNames,\r\n SelectOptionType,\r\n SelectProps,\r\n SelectValue,\r\n ShowSearchConfig,\r\n TagRenderProps,\r\n} from './select.types';\r\n\r\nconst selectVariants = cva('sel01', {\r\n variants: {\r\n variant: {\r\n outline: 'sel07',\r\n filled: 'sel09',\r\n borderless: 'sel08',\r\n underlined: 'sel10',\r\n },\r\n size: {\r\n lg: 'sel06',\r\n md: 'sel05',\r\n sm: 'sel04',\r\n },\r\n color: {\r\n neutral: 'input-neutral',\r\n primary: 'input-primary',\r\n secondary: 'input-secondary',\r\n accent: 'input-accent',\r\n info: 'input-info',\r\n success: 'input-success',\r\n warning: 'input-warning',\r\n error: 'input-error',\r\n },\r\n },\r\n});\r\nexport type SelectVariantsProps = VariantProps<typeof selectVariants>;\r\n\r\ntype SelectTagProps = {\r\n tag: { value: string | number; label: SolidComponent; closable: boolean };\r\n removeIcon?: JSXElement;\r\n tagRender?: (props: TagRenderProps) => JSXElement;\r\n onRemove: (value: string | number, e: MouseEvent) => void;\r\n};\r\n\r\nconst SelectTag: Component<SelectTagProps> = props => {\r\n if (props.tagRender) {\r\n return props.tagRender({\r\n label: props.tag.label,\r\n value: props.tag.value,\r\n closable: props.tag.closable,\r\n onClose: () => props.onRemove(props.tag.value, new MouseEvent('click')),\r\n }) as JSXElement;\r\n }\r\n\r\n return (\r\n <span class=\"sel17\">\r\n <span class=\"sel18\">{props.tag.label as Element}</span>\r\n <Show when={props.tag.closable}>\r\n <span class=\"sel19\" onClick={e => props.onRemove(props.tag.value, e)}>\r\n {props.removeIcon ? (\r\n (props.removeIcon as Element)\r\n ) : (\r\n <X class=\"m-auto\" size={12} stroke-width={3} />\r\n )}\r\n </span>\r\n </Show>\r\n </span>\r\n );\r\n};\r\n\r\nconst InnerTooltip: Component<{ content: JSXElement; children: JSXElement }> = props => {\r\n return (\r\n <span class=\"sel42\">\r\n {props.children}\r\n <span class=\"sel43\">\r\n <span class=\"sel44\">{props.content}</span>\r\n </span>\r\n </span>\r\n );\r\n};\r\n\r\nfunction resolveFieldNames(fn?: SelectFieldNames) {\r\n return {\r\n label: fn?.label ?? 'label',\r\n value: fn?.value ?? 'value',\r\n options: fn?.options ?? 'options',\r\n groupLabel: fn?.groupLabel ?? 'label',\r\n };\r\n}\r\n\r\nfunction getField(option: any, field: string): any {\r\n return option?.[field];\r\n}\r\n\r\ninterface FlatOption {\r\n label: SolidComponent;\r\n value: string | number;\r\n disabled?: boolean;\r\n class?: string;\r\n title?: string;\r\n groupLabel?: SolidComponent;\r\n raw: any;\r\n}\r\n\r\nfunction flattenOptions(\r\n options: (SelectOptionType | OptGroupType)[] | undefined,\r\n fieldNames: ReturnType<typeof resolveFieldNames>,\r\n): FlatOption[] {\r\n if (!options) return [];\r\n const result: FlatOption[] = [];\r\n for (const opt of options) {\r\n const subOptions = getField(opt, fieldNames.options) as SelectOptionType[] | undefined;\r\n if (subOptions && Array.isArray(subOptions)) {\r\n const groupLabel = getField(opt, fieldNames.groupLabel) as SolidComponent;\r\n for (const sub of subOptions) {\r\n result.push({\r\n label: getField(sub, fieldNames.label) as SolidComponent,\r\n value: getField(sub, fieldNames.value) as string | number,\r\n disabled: sub.disabled,\r\n class: sub.class,\r\n title: sub.title,\r\n groupLabel,\r\n raw: sub,\r\n });\r\n }\r\n } else {\r\n result.push({\r\n label: getField(opt, fieldNames.label) as SolidComponent,\r\n value: getField(opt, fieldNames.value) as string | number,\r\n disabled: (opt as SelectOptionType).disabled,\r\n class: (opt as SelectOptionType).class,\r\n title: (opt as SelectOptionType).title,\r\n groupLabel: undefined,\r\n raw: opt,\r\n });\r\n }\r\n }\r\n return result;\r\n}\r\n\r\ninterface OptionGroup {\r\n groupLabel?: SolidComponent;\r\n items: FlatOption[];\r\n}\r\n\r\nfunction regroupFlatOptions(flatOptions: FlatOption[]): OptionGroup[] {\r\n const groups: OptionGroup[] = [];\r\n for (const opt of flatOptions) {\r\n const last = groups[groups.length - 1];\r\n if (last && last.groupLabel === opt.groupLabel) {\r\n last.items.push(opt);\r\n } else {\r\n groups.push({ groupLabel: opt.groupLabel, items: [opt] });\r\n }\r\n }\r\n return groups;\r\n}\r\n\r\nfunction extractValue(v: string | number | LabeledValue | undefined): string | number | undefined {\r\n if (v === undefined || v === null) return undefined;\r\n if (typeof v === 'object' && 'value' in v) return v.value;\r\n return v as string | number;\r\n}\r\n\r\nfunction extractValues(\r\n v: string | string[] | number | number[] | LabeledValue | LabeledValue[] | undefined,\r\n): (string | number)[] {\r\n if (v === undefined || v === null) return [];\r\n if (Array.isArray(v)) {\r\n return v.map(item => extractValue(item)!).filter(x => x !== undefined);\r\n }\r\n const single = extractValue(v as string | number | LabeledValue);\r\n return single !== undefined ? [single] : [];\r\n}\r\n\r\nexport const Select: Component<SelectProps> = p => {\r\n p = mergeProps(\r\n {\r\n color: 'error' as const,\r\n size: 'md' as const,\r\n variant: 'outline' as const,\r\n disabled: false,\r\n loading: false,\r\n placement: 'bottom' as const,\r\n listHeight: 256,\r\n virtual: false,\r\n defaultActiveFirstOption: false,\r\n notFoundContent: 'Not Found' as SolidComponent,\r\n labelInValue: false,\r\n placeholder: 'Select...',\r\n blockScroll: true,\r\n } as SelectBaseProps,\r\n p,\r\n );\r\n\r\n const fieldNames = createMemo(() => resolveFieldNames(p.fieldNames));\r\n\r\n const isMultiple = createMemo(() => p.mode === 'multiple');\r\n const allowCustomValue = createMemo(() => isMultiple() && !!(p as any).allowCustomValue);\r\n\r\n const showSearchEnabled = createMemo(() => {\r\n if (typeof p.showSearch === 'boolean') return p.showSearch;\r\n if (typeof p.showSearch === 'object') return true;\r\n\r\n return isMultiple();\r\n });\r\n\r\n const searchConfig = createMemo((): ShowSearchConfig => {\r\n const base: ShowSearchConfig = {\r\n autoClearSearchValue: true,\r\n filterOption: true,\r\n optionFilterProp: 'value',\r\n };\r\n if (typeof p.showSearch === 'object') {\r\n return { ...base, ...p.showSearch };\r\n }\r\n return base;\r\n });\r\n\r\n const [internalValue, setInternalValue] = createSignal<(string | number)[]>(\r\n extractValues(p.defaultValue),\r\n );\r\n const [isOpen, setIsOpen] = createSignal(p.defaultOpen ?? false);\r\n const [searchText, setSearchText] = createSignal('');\r\n const [activeIndex, setActiveIndex] = createSignal(-1);\r\n\r\n const selectedValues = createMemo(() => {\r\n if (p.value !== undefined) {\r\n return extractValues(p.value);\r\n }\r\n return internalValue();\r\n });\r\n\r\n const dropdownOpen = createMemo(() => {\r\n if (p.open !== undefined) {\r\n return p.open as boolean;\r\n }\r\n return isOpen();\r\n });\r\n\r\n const controlledSearchValue = createMemo(() => {\r\n const cfg = searchConfig();\r\n if (cfg.searchValue !== undefined) return cfg.searchValue;\r\n return undefined;\r\n });\r\n\r\n const currentSearchText = createMemo(() => {\r\n return controlledSearchValue() ?? searchText();\r\n });\r\n\r\n let inputRef: HTMLInputElement | undefined;\r\n let selectRootRef: HTMLDivElement | undefined;\r\n let triggerRef: HTMLDivElement | undefined;\r\n const [listRef, setListRef] = createSignal<HTMLDivElement | null>(null);\r\n\r\n const allFlatOptions = createMemo(() => flattenOptions(p.options, fieldNames()));\r\n\r\n const allOptionsWithCustom = createMemo(() => {\r\n const flat = allFlatOptions();\r\n if (!allowCustomValue()) return flat;\r\n const existingValues = new Set(flat.map(o => o.value));\r\n const customOpts: FlatOption[] = [];\r\n for (const val of selectedValues()) {\r\n if (!existingValues.has(val)) {\r\n customOpts.push({\r\n label: String(val),\r\n value: val,\r\n disabled: false,\r\n class: undefined,\r\n title: undefined,\r\n groupLabel: undefined,\r\n raw: { label: String(val), value: val },\r\n });\r\n }\r\n }\r\n return [...flat, ...customOpts];\r\n });\r\n\r\n const optionMap = createMemo(() => {\r\n const map = new Map<string | number, FlatOption>();\r\n for (const opt of allOptionsWithCustom()) {\r\n map.set(opt.value, opt);\r\n }\r\n return map;\r\n });\r\n\r\n const filteredOptions = createMemo(() => {\r\n const all = allOptionsWithCustom();\r\n const text = currentSearchText();\r\n if (!text || !showSearchEnabled()) return all;\r\n\r\n const cfg = searchConfig();\r\n if (cfg.filterOption === false) return all;\r\n\r\n let filtered: FlatOption[];\r\n if (typeof cfg.filterOption === 'function') {\r\n filtered = all.filter(opt =>\r\n (cfg.filterOption as Function)(text, opt.raw as SelectOptionType),\r\n );\r\n } else {\r\n const filterProps = Array.isArray(cfg.optionFilterProp)\r\n ? cfg.optionFilterProp\r\n : [cfg.optionFilterProp ?? 'value'];\r\n const lowerText = text.toLowerCase();\r\n filtered = all.filter(opt => {\r\n return filterProps.some(prop => {\r\n const val = getField(opt.raw, prop) ?? (prop === 'label' ? opt.label : opt.value);\r\n return String(val ?? '')\r\n .toLowerCase()\r\n .includes(lowerText);\r\n });\r\n });\r\n }\r\n\r\n if (cfg.filterSort) {\r\n const sortFn = cfg.filterSort;\r\n filtered.sort((a, b) =>\r\n sortFn(a.raw as SelectOptionType, b.raw as SelectOptionType, { searchValue: text }),\r\n );\r\n }\r\n\r\n return filtered;\r\n });\r\n\r\n const groupedForRender = createMemo(() => {\r\n const text = currentSearchText();\r\n if (text && showSearchEnabled()) {\r\n return [{ groupLabel: undefined, items: filteredOptions() }] as OptionGroup[];\r\n }\r\n return regroupFlatOptions(allOptionsWithCustom());\r\n });\r\n\r\n type RenderItem =\r\n | { type: 'group'; groupLabel: SolidComponent }\r\n | { type: 'option'; option: FlatOption; flatIdx: number };\r\n\r\n const flatRenderList = createMemo((): RenderItem[] => {\r\n const groups = groupedForRender();\r\n const result: RenderItem[] = [];\r\n let flatIdx = 0;\r\n for (const group of groups) {\r\n if (group.groupLabel !== undefined) {\r\n result.push({ type: 'group', groupLabel: group.groupLabel });\r\n }\r\n for (const item of group.items) {\r\n result.push({ type: 'option', option: item, flatIdx });\r\n flatIdx++;\r\n }\r\n }\r\n return result;\r\n });\r\n\r\n const ITEM_HEIGHT = 32;\r\n const GROUP_LABEL_HEIGHT = 28;\r\n\r\n const virtualizer = createVirtualizer({\r\n get count() {\r\n return flatRenderList().length;\r\n },\r\n getScrollElement: () => listRef(),\r\n estimateSize: (index: number) => {\r\n const item = flatRenderList()[index];\r\n return item?.type === 'group' ? GROUP_LABEL_HEIGHT : ITEM_HEIGHT;\r\n },\r\n overscan: 2,\r\n });\r\n\r\n const selectedValuesSet = createMemo(() => new Set(selectedValues()));\r\n\r\n const isSelected = (val: string | number) => {\r\n return selectedValuesSet().has(val);\r\n };\r\n\r\n const isMaxReached = createMemo(() => {\r\n if (!isMultiple()) return false;\r\n const max = p.maxCount as number | undefined;\r\n if (max === undefined) return false;\r\n return selectedValues().length >= max;\r\n });\r\n\r\n // Set for a brief window after openDropdown() to suppress spurious focusout events\r\n // that fire when SolidJS re-renders the DOM (inserting dropdown content causes\r\n // the focused trigger div to receive a focusout with relatedTarget=null before\r\n // the search input is mounted and re-focused via queueMicrotask).\r\n let suppressBlurUntil = 0;\r\n\r\n const openDropdown = () => {\r\n if (p.disabled) return;\r\n suppressBlurUntil = performance.now() + 150;\r\n if (p.open === undefined) {\r\n setIsOpen(true);\r\n }\r\n p.onOpenChange?.(true);\r\n };\r\n\r\n const closeDropdown = () => {\r\n if (p.open === undefined) {\r\n setIsOpen(false);\r\n }\r\n setListRef(null);\r\n p.onOpenChange?.(false);\r\n\r\n if (showSearchEnabled()) {\r\n setSearchText('');\r\n searchConfig().onSearch?.('');\r\n }\r\n };\r\n\r\n const toggleDropdown = () => {\r\n if (dropdownOpen()) {\r\n closeDropdown();\r\n } else {\r\n openDropdown();\r\n }\r\n };\r\n\r\n const buildOutputValue = (values: (string | number)[]): SelectValue => {\r\n const map = optionMap();\r\n if (isMultiple()) {\r\n if (p.labelInValue) {\r\n return values.map(v => {\r\n const opt = map.get(v);\r\n return {\r\n value: v,\r\n label: opt?.label ?? String(v),\r\n } as LabeledValue;\r\n });\r\n }\r\n return values as string[] | number[];\r\n }\r\n\r\n const val = values[0];\r\n if (val === undefined) return undefined as any;\r\n if (p.labelInValue) {\r\n const opt = map.get(val);\r\n return {\r\n value: val,\r\n label: opt?.label ?? String(val),\r\n } as LabeledValue;\r\n }\r\n return val;\r\n };\r\n\r\n const buildOutputOption = (\r\n values: (string | number)[],\r\n ): SelectOptionType | SelectOptionType[] => {\r\n const map = optionMap();\r\n if (isMultiple()) {\r\n return values.map(v => {\r\n const opt = map.get(v);\r\n return (opt?.raw as SelectOptionType) ?? { value: v, label: String(v) };\r\n });\r\n }\r\n const val = values[0];\r\n const opt = map.get(val);\r\n return (opt?.raw as SelectOptionType) ?? { value: val, label: String(val) };\r\n };\r\n\r\n const handleSelect = (optValue: string | number) => {\r\n const opt = optionMap().get(optValue);\r\n const rawOpt = (opt?.raw as SelectOptionType) ?? {\r\n value: optValue,\r\n label: String(optValue),\r\n };\r\n\r\n if (isMultiple()) {\r\n const current = selectedValues();\r\n let newValues: (string | number)[];\r\n\r\n if (current.includes(optValue)) {\r\n newValues = current.filter(v => v !== optValue);\r\n const deselectVal = p.labelInValue\r\n ? ({ value: optValue, label: opt?.label ?? String(optValue) } as LabeledValue)\r\n : optValue;\r\n p.onDeselect?.(deselectVal);\r\n } else {\r\n if (isMaxReached()) return;\r\n newValues = [...current, optValue];\r\n const selectVal = p.labelInValue\r\n ? ({ value: optValue, label: opt?.label ?? String(optValue) } as LabeledValue)\r\n : optValue;\r\n p.onSelect?.(selectVal, rawOpt);\r\n }\r\n\r\n if (p.value === undefined) {\r\n setInternalValue(newValues);\r\n }\r\n p.onChange?.(buildOutputValue(newValues), buildOutputOption(newValues));\r\n\r\n if (searchConfig().autoClearSearchValue !== false) {\r\n setSearchText('');\r\n searchConfig().onSearch?.('');\r\n }\r\n } else {\r\n const newValues = [optValue];\r\n const selectVal = p.labelInValue\r\n ? ({ value: optValue, label: opt?.label ?? String(optValue) } as LabeledValue)\r\n : optValue;\r\n p.onSelect?.(selectVal, rawOpt);\r\n\r\n if (p.value === undefined) {\r\n setInternalValue(newValues);\r\n }\r\n p.onChange?.(buildOutputValue(newValues), buildOutputOption(newValues));\r\n closeDropdown();\r\n setSearchText('');\r\n }\r\n };\r\n\r\n const handleClear = (e: MouseEvent) => {\r\n e.stopPropagation();\r\n e.preventDefault();\r\n if (p.value === undefined) {\r\n setInternalValue([]);\r\n }\r\n p.onClear?.();\r\n p.onChange?.(isMultiple() ? [] : (undefined as any), isMultiple() ? [] : (undefined as any));\r\n setSearchText('');\r\n };\r\n\r\n const handleRemoveTag = (val: string | number, e?: MouseEvent) => {\r\n e?.stopPropagation();\r\n e?.preventDefault();\r\n const current = selectedValues();\r\n const newValues = current.filter(v => v !== val);\r\n\r\n const opt = optionMap().get(val);\r\n const deselectVal = p.labelInValue\r\n ? ({ value: val, label: opt?.label ?? String(val) } as LabeledValue)\r\n : val;\r\n p.onDeselect?.(deselectVal);\r\n\r\n if (p.value === undefined) {\r\n setInternalValue(newValues);\r\n }\r\n p.onChange?.(buildOutputValue(newValues), buildOutputOption(newValues));\r\n };\r\n\r\n const handleKeyDown = (e: KeyboardEvent) => {\r\n if (p.disabled) return;\r\n p.onInputKeyDown?.(e);\r\n\r\n const opts = filteredOptions();\r\n\r\n switch (e.key) {\r\n case 'ArrowDown': {\r\n e.preventDefault();\r\n if (!dropdownOpen()) {\r\n openDropdown();\r\n return;\r\n }\r\n let next = activeIndex() + 1;\r\n while (next < opts.length) {\r\n const opt = opts[next];\r\n if (!opt.disabled && (!isMaxReached() || isSelected(opt.value))) {\r\n break;\r\n }\r\n next++;\r\n }\r\n if (next < opts.length) {\r\n setActiveIndex(next);\r\n const val = p.labelInValue\r\n ? ({ value: opts[next].value, label: opts[next].label } as LabeledValue)\r\n : opts[next].value;\r\n p.onActive?.(val);\r\n scrollActiveIntoView(next);\r\n }\r\n break;\r\n }\r\n case 'ArrowUp': {\r\n e.preventDefault();\r\n if (!dropdownOpen()) {\r\n openDropdown();\r\n return;\r\n }\r\n let prev = activeIndex() === -1 ? opts.length - 1 : activeIndex() - 1;\r\n while (prev >= 0) {\r\n const opt = opts[prev];\r\n if (!opt.disabled && (!isMaxReached() || isSelected(opt.value))) {\r\n break;\r\n }\r\n prev--;\r\n }\r\n if (prev >= 0) {\r\n setActiveIndex(prev);\r\n const val = p.labelInValue\r\n ? ({ value: opts[prev].value, label: opts[prev].label } as LabeledValue)\r\n : opts[prev].value;\r\n p.onActive?.(val);\r\n scrollActiveIntoView(prev);\r\n }\r\n break;\r\n }\r\n case 'Enter':\r\n case ' ': {\r\n e.preventDefault();\r\n if (!dropdownOpen()) {\r\n openDropdown();\r\n return;\r\n }\r\n if (e.key === ' ' && showSearchEnabled()) break;\r\n const idx = activeIndex();\r\n if (idx >= 0 && idx < opts.length) {\r\n const opt = opts[idx];\r\n if (!opt.disabled) {\r\n handleSelect(opt.value);\r\n }\r\n } else if (allowCustomValue() && currentSearchText().trim()) {\r\n const tag = currentSearchText().trim();\r\n handleSelect(tag);\r\n }\r\n break;\r\n }\r\n case 'Escape': {\r\n e.preventDefault();\r\n closeDropdown();\r\n triggerRef?.focus();\r\n break;\r\n }\r\n case 'Backspace': {\r\n if (isMultiple() && currentSearchText() === '') {\r\n const vals = selectedValues();\r\n if (vals.length > 0) {\r\n handleRemoveTag(vals[vals.length - 1]);\r\n }\r\n }\r\n break;\r\n }\r\n case 'Tab': {\r\n closeDropdown();\r\n break;\r\n }\r\n }\r\n };\r\n\r\n const scrollActiveIntoView = (flatIdx: number) => {\r\n if (p.virtual) {\r\n const list = flatRenderList();\r\n const renderIdx = list.findIndex(item => item.type === 'option' && item.flatIdx === flatIdx);\r\n if (renderIdx >= 0) {\r\n virtualizer.scrollToIndex(renderIdx, { align: 'auto' });\r\n }\r\n return;\r\n }\r\n\r\n const el = listRef();\r\n if (!el) return;\r\n const items = el.querySelectorAll('[data-option-index]');\r\n const item = items[flatIdx] as HTMLElement | undefined;\r\n if (item) {\r\n item.scrollIntoView({ block: 'nearest' });\r\n }\r\n };\r\n\r\n const scrollToFirstSelected = () => {\r\n const vals = selectedValues();\r\n if (vals.length === 0) return;\r\n\r\n const firstSelectedValue = vals[0];\r\n const opts = filteredOptions();\r\n const flatIdx = opts.findIndex(o => o.value === firstSelectedValue);\r\n if (flatIdx < 0) return;\r\n\r\n if (p.virtual) {\r\n const list = flatRenderList();\r\n const renderIdx = list.findIndex(item => item.type === 'option' && item.flatIdx === flatIdx);\r\n if (renderIdx >= 0) {\r\n virtualizer.scrollToIndex(renderIdx, { align: 'start' });\r\n }\r\n } else {\r\n const el = listRef();\r\n if (!el) return;\r\n const item = el.querySelector(`[data-option-index=\"${flatIdx}\"]`) as HTMLElement | null;\r\n if (item) {\r\n item.scrollIntoView({ block: 'nearest' });\r\n }\r\n }\r\n };\r\n\r\n const handleSearchInput = (e: InputEvent) => {\r\n const target = e.target as HTMLInputElement;\r\n const val = target.value;\r\n\r\n if (controlledSearchValue() === undefined) {\r\n setSearchText(val);\r\n }\r\n searchConfig().onSearch?.(val);\r\n\r\n if (!dropdownOpen()) {\r\n openDropdown();\r\n }\r\n };\r\n\r\n const handleFocus = (e: FocusEvent) => {\r\n // Only fix scroll when the trigger div (not the search input) receives focus.\r\n // The trigger div has offsetTop=0 relative to .dropdown (position:relative), which\r\n // causes Chromium to scroll the page to 0 when focusing it (a browser quirk).\r\n // We listen for the next scroll event and immediately restore the position.\r\n if (e.target === triggerRef) {\r\n const scrollX = window.scrollX;\r\n const scrollY = window.scrollY;\r\n // Chromium scrolls the page when focusing triggerRef because its offsetTop=0\r\n // relative to the .dropdown positioned parent (a browser quirk). We restore after\r\n // the focus-scroll completes by waiting for the scroll event, then deferring one rAF\r\n // so the browser's internal focus-scroll is truly done before we override it.\r\n const restoreScroll = () =>\r\n requestAnimationFrame(() => requestAnimationFrame(() => window.scrollTo(scrollX, scrollY)));\r\n window.addEventListener('scroll', restoreScroll, { once: true, passive: false });\r\n setTimeout(() => window.removeEventListener('scroll', restoreScroll), 200);\r\n }\r\n p.onFocus?.(e);\r\n };\r\n\r\n const handleBlur = (e: FocusEvent) => {\r\n const related = e.relatedTarget as HTMLElement | null;\r\n if (related && selectRootRef?.contains(related)) return;\r\n if (related?.closest('.nd-content')) return;\r\n // Suppress spurious focusout that fires immediately after openDropdown() while\r\n // SolidJS is re-rendering the DOM (before the search input is mounted and focused).\r\n if (performance.now() < suppressBlurUntil) return;\r\n p.onBlur?.(e);\r\n closeDropdown();\r\n };\r\n\r\n const selectedLabel = createMemo((): JSXElement => {\r\n if (isMultiple()) return null;\r\n const vals = selectedValues();\r\n if (vals.length === 0) return null;\r\n const val = vals[0];\r\n const opt = optionMap().get(val);\r\n\r\n if (p.labelRender) {\r\n return p.labelRender({\r\n value: val,\r\n label: opt?.label ?? String(val),\r\n key: String(val),\r\n });\r\n }\r\n\r\n return (opt?.label as Element) ?? String(val);\r\n });\r\n\r\n interface TagInfo {\r\n value: string | number;\r\n label: SolidComponent;\r\n closable: boolean;\r\n }\r\n const visibleTags = createMemo((): { visible: TagInfo[]; omitted: TagInfo[] } => {\r\n if (!isMultiple()) return { visible: [], omitted: [] };\r\n const vals = selectedValues();\r\n const map = optionMap();\r\n const maxTagCount = p.maxTagCount as number | 'responsive' | undefined;\r\n const maxTextLen = p.maxTagTextLength as number | undefined;\r\n\r\n const tags: TagInfo[] = vals.map(val => {\r\n const opt = map.get(val);\r\n let label: SolidComponent = opt?.label ?? String(val);\r\n if (maxTextLen && typeof label === 'string' && label.length > maxTextLen) {\r\n label = label.slice(0, maxTextLen) + '...';\r\n }\r\n return { value: val, label, closable: !p.disabled };\r\n });\r\n\r\n if (typeof maxTagCount === 'number' && tags.length > maxTagCount) {\r\n return { visible: tags.slice(0, maxTagCount), omitted: tags.slice(maxTagCount) };\r\n }\r\n\r\n return { visible: tags, omitted: [] };\r\n });\r\n\r\n const showClear = createMemo(() => {\r\n if (!p.allowClear) return false;\r\n if (p.disabled) return false;\r\n return selectedValues().length > 0;\r\n });\r\n\r\n const handleTriggerClick = (e: MouseEvent) => {\r\n if (p.disabled || p.loading) return;\r\n e.preventDefault();\r\n toggleDropdown();\r\n };\r\n\r\n const findOptionIndex = (target: EventTarget | null): number | null => {\r\n let el = target as HTMLElement | null;\r\n while (el) {\r\n const idx = el.dataset?.optionIndex;\r\n if (idx !== undefined) return Number(idx);\r\n\r\n if (el.classList?.contains('sel30')) return null;\r\n el = el.parentElement;\r\n }\r\n return null;\r\n };\r\n\r\n const handleListClick = (e: MouseEvent) => {\r\n const flatIdx = findOptionIndex(e.target);\r\n if (flatIdx === null) return;\r\n const opts = filteredOptions();\r\n const opt = opts[flatIdx];\r\n if (!opt || opt.disabled || (isMaxReached() && !isSelected(opt.value))) return;\r\n // In multiple mode, selecting an option re-renders the tag list (DOM mutation)\r\n // which can cause a spurious focusout. Suppress blur handling briefly.\r\n if (isMultiple()) suppressBlurUntil = performance.now() + 150;\r\n handleSelect(opt.value);\r\n };\r\n\r\n const renderOptionItem = (opt: FlatOption, flatIdx: number) => {\r\n const selected = () => isSelected(opt.value);\r\n const isActive = () => activeIndex() === flatIdx;\r\n const isDisabledOpt = () => opt.disabled || (isMaxReached() && !selected());\r\n\r\n const flattenData: FlattenOptionData = {\r\n label: opt.label,\r\n value: opt.value,\r\n disabled: opt.disabled,\r\n key: opt.value,\r\n groupLabel: opt.groupLabel,\r\n };\r\n\r\n const content = p.optionRender\r\n ? p.optionRender(flattenData, { index: flatIdx })\r\n : (opt.label as Element);\r\n\r\n return (\r\n <div\r\n data-option-index={flatIdx}\r\n class={cn(\r\n 'sel31',\r\n selected() && 'sel33',\r\n isActive() && 'sel32',\r\n isDisabledOpt() && 'sel34',\r\n opt.groupLabel !== undefined && 'sel38',\r\n opt.class,\r\n )}\r\n title={opt.title}\r\n >\r\n <span class=\"sel35\">{content}</span>\r\n <Show when={selected()}>\r\n <span class=\"sel36\">\r\n {p.menuItemSelectedIcon ? (\r\n (p.menuItemSelectedIcon as Element)\r\n ) : (\r\n <Check size={14} color=\"var(--color)\" stroke-width={3} />\r\n )}\r\n </span>\r\n </Show>\r\n </div>\r\n );\r\n };\r\n\r\n const dropdownContent = () => {\r\n const renderList = flatRenderList();\r\n\r\n if (renderList.length === 0) {\r\n return <div class=\"sel39\">{p.notFoundContent as Element}</div>;\r\n }\r\n\r\n if (p.virtual) {\r\n return (\r\n <div\r\n ref={el => {\r\n requestAnimationFrame(() => setListRef(el));\r\n }}\r\n class={cn('sel30', getColor(p.color))}\r\n style={{ 'max-height': `${p.listHeight}px`, 'overflow-y': 'auto' }}\r\n onClick={handleListClick}\r\n >\r\n <div\r\n style={{\r\n height: `${virtualizer.getTotalSize()}px`,\r\n width: '100%',\r\n position: 'relative',\r\n }}\r\n >\r\n <For each={virtualizer.getVirtualItems()}>\r\n {virtualRow => {\r\n const item = renderList[virtualRow.index];\r\n return (\r\n <div\r\n data-index={virtualRow.index}\r\n style={{\r\n position: 'absolute',\r\n top: 0,\r\n left: 0,\r\n width: '100%',\r\n transform: `translateY(${virtualRow.start}px)`,\r\n }}\r\n >\r\n {item.type === 'group' ? (\r\n <div class=\"sel37\">{item.groupLabel as Element}</div>\r\n ) : (\r\n renderOptionItem(item.option, item.flatIdx)\r\n )}\r\n </div>\r\n );\r\n }}\r\n </For>\r\n </div>\r\n </div>\r\n );\r\n }\r\n\r\n return (\r\n <div\r\n ref={el => setListRef(el)}\r\n class=\"sel30\"\r\n style={{ 'max-height': `${p.listHeight}px` }}\r\n onClick={handleListClick}\r\n >\r\n <For each={renderList}>\r\n {item =>\r\n item.type === 'group' ? (\r\n <div class=\"sel37\">{item.groupLabel as Element}</div>\r\n ) : (\r\n renderOptionItem(item.option, item.flatIdx)\r\n )\r\n }\r\n </For>\r\n </div>\r\n );\r\n };\r\n\r\n const renderTag = (tag: { value: string | number; label: SolidComponent; closable: boolean }) => (\r\n <SelectTag\r\n tag={tag}\r\n removeIcon={p.removeIcon as JSXElement}\r\n tagRender={p.tagRender as ((props: TagRenderProps) => JSXElement) | undefined}\r\n onRemove={handleRemoveTag}\r\n />\r\n );\r\n\r\n createEffect(\r\n on(dropdownOpen, open => {\r\n if (open && p.defaultActiveFirstOption) {\r\n const opts = filteredOptions();\r\n const idx = opts.findIndex(o => !o.disabled && (!isMaxReached() || isSelected(o.value)));\r\n setActiveIndex(idx >= 0 ? idx : -1);\r\n }\r\n if (!open) {\r\n setActiveIndex(-1);\r\n }\r\n }),\r\n );\r\n\r\n createEffect(\r\n on(\r\n () => currentSearchText(),\r\n () => {\r\n if (dropdownOpen() && p.defaultActiveFirstOption) {\r\n const opts = filteredOptions();\r\n const idx = opts.findIndex(o => !o.disabled && (!isMaxReached() || isSelected(o.value)));\r\n setActiveIndex(idx >= 0 ? idx : -1);\r\n }\r\n },\r\n ),\r\n );\r\n\r\n createEffect(\r\n on(listRef, el => {\r\n if (el && dropdownOpen()) {\r\n requestAnimationFrame(() => {\r\n if (p.virtual) virtualizer.measure();\r\n scrollToFirstSelected();\r\n });\r\n }\r\n }),\r\n );\r\n\r\n createEffect(\r\n on(\r\n () => dropdownOpen(),\r\n open => {\r\n if (open && showSearchEnabled()) {\r\n queueMicrotask(() => inputRef?.focus({ preventScroll: true }));\r\n }\r\n },\r\n ),\r\n );\r\n\r\n return (\r\n <Dropdown\r\n ref={el => (selectRootRef = el)}\r\n open={dropdownOpen()}\r\n blockScroll={p.blockScroll}\r\n position={p.placement === 'top' ? 'top' : 'bottom'}\r\n class={{\r\n trigger: `${p.disabled ? 'pointer-events-none' : ''} w-full`,\r\n content: cn(\r\n 'border-c3 bg-base-100 rounded-box menu p-0',\r\n p.placement === 'bottom' ? 'mt-1 shadow-md' : 'shadow-md-top mb-1',\r\n p.class?.dropdownContent,\r\n ),\r\n }}\r\n triggerElement={\r\n <div\r\n ref={el => (triggerRef = el)}\r\n class={cn(\r\n selectVariants({ size: p.size, variant: p.variant }),\r\n getColor(p.color),\r\n dropdownOpen() && 'sel41 sel02',\r\n isMultiple() && 'sel40',\r\n p.class?.root,\r\n p.disabled && 'sel03',\r\n )}\r\n tabIndex={p.disabled ? -1 : 0}\r\n onClick={handleTriggerClick}\r\n onKeyDown={handleKeyDown}\r\n onFocus={handleFocus}\r\n onBlur={handleBlur}\r\n role=\"combobox\"\r\n aria-expanded={dropdownOpen()}\r\n aria-haspopup=\"listbox\"\r\n >\r\n <Show when={p.prefix}>\r\n <span class=\"sel11\">{p.prefix as Element}</span>\r\n </Show>\r\n\r\n <div class=\"sel12\">\r\n <Show\r\n when={isMultiple()}\r\n fallback={\r\n <div class=\"sel13\">\r\n <Show\r\n when={selectedValues().length > 0}\r\n fallback={\r\n <span\r\n class=\"sel15\"\r\n style={{\r\n visibility: currentSearchText() ? 'hidden' : undefined,\r\n }}\r\n >\r\n {p.placeholder}\r\n </span>\r\n }\r\n >\r\n <span\r\n class=\"sel14\"\r\n style={{\r\n visibility:\r\n currentSearchText() && showSearchEnabled() ? 'hidden' : undefined,\r\n }}\r\n >\r\n {selectedLabel()}\r\n </span>\r\n </Show>\r\n </div>\r\n }\r\n >\r\n <div class=\"sel16\">\r\n <For each={visibleTags().visible}>{tag => renderTag(tag)}</For>\r\n\r\n <Show when={visibleTags().omitted.length > 0}>\r\n <InnerTooltip\r\n content={\r\n <For each={visibleTags().omitted}>\r\n {tag => (\r\n <SelectTag\r\n tag={tag}\r\n removeIcon={p.removeIcon as JSXElement}\r\n tagRender={\r\n p.tagRender as ((props: TagRenderProps) => JSXElement) | undefined\r\n }\r\n onRemove={handleRemoveTag}\r\n />\r\n )}\r\n </For>\r\n }\r\n >\r\n <span class=\"sel17 sel20\">\r\n {(() => {\r\n const placeholder = p.maxTagPlaceholder;\r\n if (typeof placeholder === 'function') {\r\n const omittedValues = visibleTags().omitted.map(t => ({\r\n value: t.value,\r\n label: t.label,\r\n })) as LabeledValue[];\r\n return placeholder(omittedValues) as Element;\r\n }\r\n if (placeholder) return placeholder;\r\n return `+${visibleTags().omitted.length} more...`;\r\n })()}\r\n </span>\r\n </InnerTooltip>\r\n </Show>\r\n\r\n <Show when={selectedValues().length === 0}>\r\n <span class=\"sel15\">{p.placeholder}</span>\r\n </Show>\r\n </div>\r\n </Show>\r\n </div>\r\n\r\n <div class=\"sel22\">\r\n <Show when={showClear()}>\r\n <span class=\"sel26\" onClick={handleClear}>\r\n <X class=\"m-auto\" size={14} />\r\n </span>\r\n </Show>\r\n <Show when={!p.loading} fallback={<span class=\"sel25\"></span>}>\r\n <span class={cn('sel23', dropdownOpen() && 'sel24')}>\r\n {p.suffixIcon ? (p.suffixIcon as Element) : <ChevronDown size={16} />}\r\n </span>\r\n </Show>\r\n </div>\r\n </div>\r\n }\r\n >\r\n <div\r\n role=\"listbox\"\r\n class={getColor(p.color)}\r\n onMouseDown={e => {\r\n if ((e.target as HTMLElement)?.tagName !== 'INPUT') {\r\n e.preventDefault();\r\n }\r\n }}\r\n >\r\n <Show when={showSearchEnabled()}>\r\n <div class=\"flex items-center px-3 shadow-2xs\">\r\n <Search size={14} />\r\n <input\r\n ref={ref => (inputRef = ref)}\r\n class=\"sel29\"\r\n value={currentSearchText()}\r\n onInput={handleSearchInput}\r\n onKeyDown={handleKeyDown}\r\n onFocus={handleFocus}\r\n onBlur={handleBlur}\r\n disabled={p.disabled}\r\n autocomplete=\"off\"\r\n role=\"combobox\"\r\n aria-expanded={dropdownOpen()}\r\n aria-haspopup=\"listbox\"\r\n aria-autocomplete=\"list\"\r\n placeholder=\"Search...\"\r\n />\r\n </div>\r\n </Show>\r\n {p.popupRender ? p.popupRender(dropdownContent()) : dropdownContent()}\r\n </div>\r\n </Dropdown>\r\n );\r\n};\r\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"select-zone.js","names":["Component","createContext","createEffect","createSignal","mergeProps","onCleanup","useContext","Portal","cn","SelectZoneItemProps","SelectZoneProps","SelectZoneContextValue","registerItem","key","el","HTMLElement","unregisterItem","isSelected","SelectZoneContext","DEFAULT_PROPS","additive","scrollThreshold","scrollSpeed","disabled","SelectZone","props","p","itemMap","Map","selectedKeys","setSelectedKeys","Set","overlayRect","setOverlayRect","x","y","w","h","rootEl","HTMLDivElement","intersects","selLeft","selTop","selRight","selBottom","r","getBoundingClientRect","docLeft","left","window","scrollX","docTop","top","scrollY","docRight","right","docBottom","bottom","computeSelection","startPageX","startPageY","currPageX","currPageY","Math","min","max","hit","forEach","checkItem","add","isDragging","isAdditive","prevKeys","rafId","lastClientX","lastClientY","scrollLoop","threshold","speed","vw","innerWidth","vh","innerHeight","cx","cy","dx","dy","scrollBy","updateOverlay","requestAnimationFrame","currClientX","currClientY","abs","next","k","has","delete","onMouseDown","e","MouseEvent","button","target","closest","clientX","clientY","shiftKey","ctrlKey","metaKey","document","addEventListener","onMouseMove","onMouseUp","removeEventListener","cancelAnimationFrame","onSelect","item","contextValue","set","syncControlledValue","v","value","undefined","mountListeners","unmountListeners","_$createComponent","Provider","children","_el$","_tmpl$","_ref$","_$use","_$insert","_c$","_$memo","mount","body","_el$2","_$effect","_p$","_v$","class","overlay","_v$2","_v$3","_v$4","_v$5","_$className","t","_$setStyleProperty","a","o","i","root","SelectZoneItem","ctx","Error","registerOnMount","itemKey","unregisterOnUnmount","_el$3","_ref$2","_v$6","_v$7","_$setAttribute"],"sources":["../../../src/components/select-zone/select-zone.tsx"],"sourcesContent":["import {\r\n Component,\r\n createContext,\r\n createEffect,\r\n createSignal,\r\n mergeProps,\r\n onCleanup,\r\n useContext,\r\n} from 'solid-js';\r\nimport { Portal } from 'solid-js/web';\r\nimport { cn } from '@utils/cn';\r\nimport { SelectZoneItemProps, SelectZoneProps } from './select-zone.types';\r\n\r\n// ─── Context ──────────────────────────────────────────────────────────────────\r\n\r\ninterface SelectZoneContextValue {\r\n registerItem: (key: string, el: HTMLElement) => void;\r\n unregisterItem: (key: string) => void;\r\n isSelected: (key: string) => boolean;\r\n}\r\n\r\nconst SelectZoneContext = createContext<SelectZoneContextValue>();\r\n\r\n// ─── SelectZone ───────────────────────────────────────────────────────────────\r\n\r\nconst DEFAULT_PROPS = {\r\n additive: true,\r\n scrollThreshold: 40,\r\n scrollSpeed: 12,\r\n disabled: false,\r\n};\r\n\r\nexport const SelectZone: Component<SelectZoneProps> = props => {\r\n const p = mergeProps(DEFAULT_PROPS, props);\r\n\r\n // Map từ itemKey → DOM element (đăng ký bởi SelectZoneItem)\r\n const itemMap = new Map<string, HTMLElement>();\r\n\r\n // Tập hợp các key đang được chọn\r\n const [selectedKeys, setSelectedKeys] = createSignal<Set<string>>(new Set());\r\n\r\n // Overlay rect: null = ẩn, có giá trị = đang kéo\r\n const [overlayRect, setOverlayRect] = createSignal<{\r\n x: number;\r\n y: number;\r\n w: number;\r\n h: number;\r\n } | null>(null);\r\n\r\n let rootEl!: HTMLDivElement;\r\n\r\n // ── Helpers ─────────────────────────────────────────────────────────────────\r\n\r\n /**\r\n * Tính giao nhau AABB.\r\n * selLeft/Top/Right/Bottom: document coordinates (pageX/Y).\r\n * el.getBoundingClientRect(): viewport coordinates → convert sang document.\r\n */\r\n function intersects(\r\n selLeft: number,\r\n selTop: number,\r\n selRight: number,\r\n selBottom: number,\r\n el: HTMLElement,\r\n ): boolean {\r\n const r = el.getBoundingClientRect();\r\n const docLeft = r.left + window.scrollX;\r\n const docTop = r.top + window.scrollY;\r\n const docRight = r.right + window.scrollX;\r\n const docBottom = r.bottom + window.scrollY;\r\n return docRight > selLeft && docLeft < selRight && docBottom > selTop && docTop < selBottom;\r\n }\r\n\r\n /**\r\n * Tính selection.\r\n * startPageX/Y, currPageX/Y: document coordinates.\r\n */\r\n function computeSelection(\r\n startPageX: number,\r\n startPageY: number,\r\n currPageX: number,\r\n currPageY: number,\r\n ): Set<string> {\r\n const selLeft = Math.min(startPageX, currPageX);\r\n const selTop = Math.min(startPageY, currPageY);\r\n const selRight = Math.max(startPageX, currPageX);\r\n const selBottom = Math.max(startPageY, currPageY);\r\n\r\n const hit = new Set<string>();\r\n itemMap.forEach(function checkItem(el, key) {\r\n if (intersects(selLeft, selTop, selRight, selBottom, el)) {\r\n hit.add(key);\r\n }\r\n });\r\n return hit;\r\n }\r\n\r\n // ── Drag state ───────────────────────────────────────────────────────────────\r\n\r\n // startPageX/Y: document coordinates — cố định suốt drag, không bị ảnh hưởng bởi scroll\r\n let startPageX = 0;\r\n let startPageY = 0;\r\n let isDragging = false;\r\n let isAdditive = false;\r\n let prevKeys: Set<string> = new Set();\r\n let rafId = 0;\r\n let lastClientX = 0;\r\n let lastClientY = 0;\r\n\r\n // ── Auto-scroll loop ─────────────────────────────────────────────────────────\r\n\r\n function scrollLoop() {\r\n if (!isDragging) return;\r\n\r\n const threshold = p.scrollThreshold;\r\n const speed = p.scrollSpeed;\r\n const vw = window.innerWidth;\r\n const vh = window.innerHeight;\r\n const cx = lastClientX;\r\n const cy = lastClientY;\r\n\r\n let dx = 0;\r\n let dy = 0;\r\n\r\n if (cx < threshold) dx = -speed * (1 - cx / threshold);\r\n else if (cx > vw - threshold) dx = speed * (1 - (vw - cx) / threshold);\r\n\r\n if (cy < threshold) dy = -speed * (1 - cy / threshold);\r\n else if (cy > vh - threshold) dy = speed * (1 - (vh - cy) / threshold);\r\n\r\n if (dx !== 0 || dy !== 0) {\r\n window.scrollBy(dx, dy);\r\n // startPageX/Y KHÔNG thay đổi — nó là điểm neo trong document space\r\n }\r\n\r\n // Cập nhật overlay sau mỗi frame (kể cả khi chỉ scroll mà chuột đứng yên)\r\n updateOverlay(cx, cy);\r\n\r\n rafId = requestAnimationFrame(scrollLoop);\r\n }\r\n\r\n // ── Overlay update ───────────────────────────────────────────────────────────\r\n\r\n function updateOverlay(currClientX: number, currClientY: number) {\r\n // Convert cursor về document coordinates\r\n const currPageX = currClientX + window.scrollX;\r\n const currPageY = currClientY + window.scrollY;\r\n\r\n // Overlay rect tính trong document space\r\n const docLeft = Math.min(startPageX, currPageX);\r\n const docTop = Math.min(startPageY, currPageY);\r\n const w = Math.abs(currPageX - startPageX);\r\n const h = Math.abs(currPageY - startPageY);\r\n\r\n // Convert sang viewport để render (position: fixed dùng viewport coords)\r\n setOverlayRect({\r\n x: docLeft - window.scrollX,\r\n y: docTop - window.scrollY,\r\n w,\r\n h,\r\n });\r\n\r\n // Selection dùng document coordinates\r\n const hit = computeSelection(startPageX, startPageY, currPageX, currPageY);\r\n\r\n let next: Set<string>;\r\n if (isAdditive) {\r\n // Toggle per-item: item trong prevKeys bị drag đè → deselect; item mới → select\r\n next = new Set(prevKeys);\r\n hit.forEach(k => {\r\n if (prevKeys.has(k)) next.delete(k);\r\n else next.add(k);\r\n });\r\n } else {\r\n next = hit;\r\n }\r\n setSelectedKeys(next);\r\n }\r\n\r\n // ── Event handlers ───────────────────────────────────────────────────────────\r\n\r\n function onMouseDown(e: MouseEvent) {\r\n if (p.disabled) return;\r\n // Chỉ xử lý click trái, không xử lý trên scrollbar, input, button, a\r\n if (e.button !== 0) return;\r\n const target = e.target as HTMLElement;\r\n if (target.closest('input, button, a, textarea, select, [data-no-select]')) return;\r\n\r\n isDragging = false;\r\n // Lưu điểm bắt đầu trong document space — bất biến suốt drag\r\n startPageX = e.clientX + window.scrollX;\r\n startPageY = e.clientY + window.scrollY;\r\n lastClientX = e.clientX;\r\n lastClientY = e.clientY;\r\n isAdditive = e.shiftKey || e.ctrlKey || e.metaKey;\r\n prevKeys = isAdditive ? new Set(selectedKeys()) : new Set();\r\n\r\n document.addEventListener('mousemove', onMouseMove);\r\n document.addEventListener('mouseup', onMouseUp);\r\n }\r\n\r\n function onMouseMove(e: MouseEvent) {\r\n lastClientX = e.clientX;\r\n lastClientY = e.clientY;\r\n\r\n // So sánh trong document space để tránh nhiễu từ scroll\r\n const dx = e.clientX + window.scrollX - startPageX;\r\n const dy = e.clientY + window.scrollY - startPageY;\r\n\r\n if (!isDragging) {\r\n // Chỉ bắt đầu drag khi kéo ít nhất 4px để tránh nhầm với click\r\n if (Math.abs(dx) < 4 && Math.abs(dy) < 4) return;\r\n isDragging = true;\r\n rafId = requestAnimationFrame(scrollLoop);\r\n }\r\n\r\n updateOverlay(e.clientX, e.clientY);\r\n }\r\n\r\n function onMouseUp(e: MouseEvent) {\r\n document.removeEventListener('mousemove', onMouseMove);\r\n document.removeEventListener('mouseup', onMouseUp);\r\n\r\n cancelAnimationFrame(rafId);\r\n isDragging = false;\r\n\r\n if (overlayRect() !== null) {\r\n setOverlayRect(null);\r\n // Thông báo selection cuối cùng\r\n p.onSelect?.(new Set(selectedKeys()));\r\n } else {\r\n // Không drag → click đơn → deselect tất cả (nếu không additive)\r\n if (!isAdditive) {\r\n const target = e.target as HTMLElement;\r\n const item = target.closest('[data-select-key]') as HTMLElement | null;\r\n if (!item) {\r\n setSelectedKeys(new Set<string>());\r\n p.onSelect?.(new Set<string>());\r\n }\r\n }\r\n }\r\n }\r\n\r\n // ── Context value ────────────────────────────────────────────────────────────\r\n\r\n const contextValue: SelectZoneContextValue = {\r\n registerItem(key, el) {\r\n itemMap.set(key, el);\r\n },\r\n unregisterItem(key) {\r\n itemMap.delete(key);\r\n },\r\n isSelected(key) {\r\n return selectedKeys().has(key);\r\n },\r\n };\r\n\r\n // ── Đồng bộ controlled value ─────────────────────────────────────────────────\r\n\r\n createEffect(function syncControlledValue() {\r\n const v = p.value;\r\n if (v !== undefined) setSelectedKeys(new Set(v));\r\n });\r\n\r\n // ── Cleanup khi unmount ──────────────────────────────────────────────────────\r\n\r\n createEffect(function mountListeners() {\r\n rootEl.addEventListener('mousedown', onMouseDown);\r\n onCleanup(function unmountListeners() {\r\n rootEl.removeEventListener('mousedown', onMouseDown);\r\n document.removeEventListener('mousemove', onMouseMove);\r\n document.removeEventListener('mouseup', onMouseUp);\r\n cancelAnimationFrame(rafId);\r\n });\r\n });\r\n\r\n // ── Render ───────────────────────────────────────────────────────────────────\r\n\r\n return (\r\n <SelectZoneContext.Provider value={contextValue}>\r\n <div ref={rootEl} class={cn('sz01', p.class?.root)}>\r\n {p.children}\r\n\r\n {/* Selection overlay — render qua Portal để tránh ảnh hưởng layout */}\r\n {overlayRect() && (\r\n <Portal mount={document.body}>\r\n <div\r\n class={cn('sz02', p.class?.overlay)}\r\n style={{\r\n left: `${overlayRect()!.x}px`,\r\n top: `${overlayRect()!.y}px`,\r\n width: `${overlayRect()!.w}px`,\r\n height: `${overlayRect()!.h}px`,\r\n }}\r\n />\r\n </Portal>\r\n )}\r\n </div>\r\n </SelectZoneContext.Provider>\r\n );\r\n};\r\n\r\n// ─── SelectZoneItem ───────────────────────────────────────────────────────────\r\n\r\nexport const SelectZoneItem: Component<SelectZoneItemProps> = props => {\r\n const ctx = useContext(SelectZoneContext);\r\n if (!ctx) throw new Error('SelectZoneItem must be used inside <SelectZone>');\r\n\r\n let el!: HTMLDivElement;\r\n\r\n createEffect(function registerOnMount() {\r\n ctx.registerItem(props.itemKey, el);\r\n onCleanup(function unregisterOnUnmount() {\r\n ctx.unregisterItem(props.itemKey);\r\n });\r\n });\r\n\r\n const isSelected = () => ctx.isSelected(props.itemKey);\r\n\r\n return (\r\n <div ref={el} data-select-key={props.itemKey} class={cn('sz03', props.class)}>\r\n {props.children(isSelected)}\r\n </div>\r\n );\r\n};\r\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"skeleton.js","names":["cn","Component","mergeProps","ParentComponent","Show","Switch","LayoutVariant","ShapeVariant","LayoutSkeletonProps","type","variant","enabled","ShapeSkeletonProps","CustomSkeletonProps","class","SkeletonProps","Skeleton","rawProps","p","const","_$createComponent","when","fallback","children","_$memo","_el$","_tmpl$","_$effect","_$className","SkeletonDisplay","SkeletonDisplayProps","ShapeSkeleton","LayoutSkeleton","_tmpl$2","_tmpl$3","_tmpl$4","_tmpl$5","_tmpl$6","_tmpl$7","_tmpl$8","_tmpl$9","_tmpl$0","_tmpl$1","_tmpl$10","_tmpl$11"],"sources":["../../../src/components/skeleton/skeleton.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport { Component, mergeProps, ParentComponent, Show, Switch } from 'solid-js';\r\n// No custom CSS needed — uses DaisyUI's built-in .skeleton class\r\n\r\n// ─── Type definitions ─────────────────────────────────────────────────────────\r\n\r\n/** Layout skeleton: giao diện phức tạp gồm nhiều element */\r\ntype LayoutVariant =\r\n | 'cardImage' // Card với ảnh trên + text dưới\r\n | 'cardHorizontal' // Card nằm ngang: ảnh trái, nội dung phải\r\n | 'profile' // Avatar tròn + tên + mô tả\r\n | 'article' // Tiêu đề + đoạn văn nhiều dòng\r\n | 'feedItem' // Item list: avatar trái + text dọc\r\n | 'stat'; // Khối thống kê: label + số lớn + sublabel\r\n\r\n/** Shape skeleton: hình khối đơn giản với kích thước preset */\r\ntype ShapeVariant =\r\n | 'rectangle' // Hình chữ nhật (mặc định w-full)\r\n | 'square' // Hình vuông (w = h)\r\n | 'circle' // Hình tròn\r\n | 'textLine' // Một dòng text\r\n | 'textParagraph'; // Đoạn text 3–4 dòng\r\n\r\ntype LayoutSkeletonProps = {\r\n type: 'layout';\r\n variant?: LayoutVariant;\r\n enabled: boolean;\r\n};\r\n\r\ntype ShapeSkeletonProps = {\r\n type: 'shape';\r\n variant?: ShapeVariant;\r\n enabled: boolean;\r\n};\r\n\r\n/** Custom skeleton: user toàn quyền cấu hình — class áp thẳng lên element skeleton */\r\ntype CustomSkeletonProps = {\r\n type: 'custom';\r\n enabled: boolean;\r\n class: string; // bắt buộc — định nghĩa hình dạng, kích thước, bo góc\r\n};\r\n\r\nexport type SkeletonProps = LayoutSkeletonProps | ShapeSkeletonProps | CustomSkeletonProps;\r\n\r\n// ─── Main component ───────────────────────────────────────────────────────────\r\n\r\nexport const Skeleton: ParentComponent<SkeletonProps> = rawProps => {\r\n const p = mergeProps({ variant: 'card-image' } as const, rawProps);\r\n\r\n return (\r\n <Show when={p.enabled} fallback={p.children}>\r\n {p.type === 'custom' ? (\r\n <div class={cn('skeleton', p.class)} />\r\n ) : (\r\n <SkeletonDisplay\r\n type={p.type}\r\n variant={(p as LayoutSkeletonProps | ShapeSkeletonProps).variant as never}\r\n />\r\n )}\r\n </Show>\r\n );\r\n};\r\n\r\n// ─── Display switcher ─────────────────────────────────────────────────────────\r\n\r\ntype SkeletonDisplayProps = {\r\n type: 'layout' | 'shape';\r\n variant: LayoutVariant | ShapeVariant;\r\n class?: string;\r\n};\r\n\r\nconst SkeletonDisplay: Component<SkeletonDisplayProps> = p => {\r\n if (p.type === 'shape') {\r\n return <ShapeSkeleton variant={p.variant as ShapeVariant} />;\r\n }\r\n return <LayoutSkeleton variant={p.variant as LayoutVariant} />;\r\n};\r\n\r\n// ─── Layout Skeletons ─────────────────────────────────────────────────────────\r\n\r\nconst LayoutSkeleton: Component<{ variant?: LayoutVariant }> = p => {\r\n switch (p.variant) {\r\n case 'cardImage':\r\n return (\r\n <div class=\"flex flex-col gap-3\">\r\n <div class=\"skeleton h-40 w-full rounded-lg\" />\r\n <div class=\"skeleton h-5 w-3/4 rounded\" />\r\n <div class=\"skeleton h-3.5 w-full rounded\" />\r\n <div class=\"skeleton h-3.5 w-5/6 rounded\" />\r\n <div class=\"skeleton h-3.5 w-4/5 rounded\" />\r\n </div>\r\n );\r\n\r\n case 'cardHorizontal':\r\n return (\r\n <div class=\"flex flex-row items-start gap-4\">\r\n <div class=\"skeleton size-24 shrink-0 rounded-lg\" />\r\n <div class=\"flex flex-1 flex-col gap-2.5\">\r\n <div class=\"skeleton h-5 w-2/3 rounded\" />\r\n <div class=\"skeleton h-3.5 w-full rounded\" />\r\n <div class=\"skeleton h-3.5 w-4/5 rounded\" />\r\n <div class=\"skeleton h-3.5 w-3/4 rounded\" />\r\n </div>\r\n </div>\r\n );\r\n\r\n case 'profile':\r\n return (\r\n <div class=\"flex flex-col items-center gap-3\">\r\n <div class=\"skeleton size-20 shrink-0 rounded-full\" />\r\n <div class=\"skeleton h-5 w-36 rounded\" />\r\n <div class=\"skeleton h-3.5 w-48 rounded\" />\r\n <div class=\"skeleton h-3.5 w-40 rounded\" />\r\n </div>\r\n );\r\n\r\n case 'article':\r\n return (\r\n <div class=\"flex flex-col gap-3\">\r\n <div class=\"skeleton h-7 w-3/4 rounded\" />\r\n <div class=\"skeleton h-4 w-1/3 rounded\" />\r\n <div class=\"mt-1 flex flex-col gap-2\">\r\n <div class=\"skeleton h-3.5 w-full rounded\" />\r\n <div class=\"skeleton h-3.5 w-full rounded\" />\r\n <div class=\"skeleton h-3.5 w-11/12 rounded\" />\r\n <div class=\"skeleton h-3.5 w-full rounded\" />\r\n <div class=\"skeleton h-3.5 w-4/5 rounded\" />\r\n </div>\r\n </div>\r\n );\r\n\r\n case 'feedItem':\r\n return (\r\n <div class=\"flex flex-row items-start gap-3\">\r\n <div class=\"skeleton size-10 shrink-0 rounded-full\" />\r\n <div class=\"flex flex-1 flex-col gap-2\">\r\n <div class=\"skeleton h-4 w-1/3 rounded\" />\r\n <div class=\"skeleton h-3.5 w-full rounded\" />\r\n <div class=\"skeleton h-3.5 w-5/6 rounded\" />\r\n </div>\r\n </div>\r\n );\r\n\r\n case 'stat':\r\n return (\r\n <div class=\"flex flex-col gap-2\">\r\n <div class=\"skeleton h-3.5 w-24 rounded\" />\r\n <div class=\"skeleton h-9 w-32 rounded\" />\r\n <div class=\"skeleton h-3 w-20 rounded\" />\r\n </div>\r\n );\r\n\r\n default:\r\n return (\r\n <div class=\"flex flex-col gap-3\">\r\n <div class=\"skeleton h-40 w-full rounded-lg\" />\r\n <div class=\"skeleton h-5 w-3/4 rounded\" />\r\n <div class=\"skeleton h-3.5 w-full rounded\" />\r\n </div>\r\n );\r\n }\r\n};\r\n\r\n// ─── Shape Skeletons ──────────────────────────────────────────────────────────\r\n\r\nconst ShapeSkeleton: Component<{ variant?: ShapeVariant }> = p => {\r\n switch (p.variant) {\r\n case 'rectangle':\r\n return <div class=\"skeleton h-32 w-full rounded-lg\" />;\r\n\r\n case 'square':\r\n return <div class=\"skeleton size-32 rounded-lg\" />;\r\n\r\n case 'circle':\r\n return <div class=\"skeleton size-16 rounded-full\" />;\r\n\r\n case 'textLine':\r\n return <div class=\"skeleton h-4 w-full rounded\" />;\r\n\r\n case 'textParagraph':\r\n return (\r\n <div class=\"flex flex-col gap-2\">\r\n <div class=\"skeleton h-4 w-full rounded\" />\r\n <div class=\"skeleton h-4 w-11/12 rounded\" />\r\n <div class=\"skeleton h-4 w-4/5 rounded\" />\r\n <div class=\"skeleton h-4 w-5/6 rounded\" />\r\n </div>\r\n );\r\n\r\n default:\r\n return <div class=\"skeleton h-32 w-full rounded-lg\" />;\r\n }\r\n};\r\n"],"mappings":"u+EA8CagB,EAA2CC,GAAY,CAClE,IAAMC,EAAIhB,EAAW,CAAEQ,QAAS,aAAc,CAAWO,EAAS,CAElE,OAAAG,EACGhB,EAAI,CAAA,IAACiB,MAAI,CAAA,OAAEH,EAAEP,SAAO,IAAEW,UAAQ,CAAA,OAAEJ,EAAEK,UAAQ,IAAAA,UAAA,CAAA,OACxCC,MAAAN,EAAET,OAAS,SAAQ,EAAA,MAAA,CAAA,IAAAgB,EAAAC,GAAA,CACiB,OADjBC,MAAAC,EAAAH,EACNzB,EAAG,WAAYkB,EAAEJ,MAAM,CAAA,CAAA,CAAAW,KAAA,CAAAL,EAElCS,EAAe,CAAA,IACdpB,MAAI,CAAA,OAAES,EAAET,MAAI,IACZC,SAAO,CAAA,OAAGQ,EAA+CR,SAAgB,CAE5E,EAAA,CAAA,EAaDmB,EAAmDX,GACnDA,EAAET,OAAS,QACbW,EAAQW,EAAa,CAAA,IAACrB,SAAO,CAAA,OAAEQ,EAAER,SAAuB,CAAA,CAE1DU,EAAQY,EAAc,CAAA,IAACtB,SAAO,CAAA,OAAEQ,EAAER,SAAwB,CAAA,CAKtDsB,EAAyDd,GAAK,CAClE,OAAQA,EAAER,QAAV,CACE,IAAK,YACH,OAAAuB,GAAA,CAUF,IAAK,iBACH,OAAAC,GAAA,CAYF,IAAK,UACH,OAAAC,GAAA,CASF,IAAK,UACH,OAAAC,GAAA,CAcF,IAAK,WACH,OAAAC,GAAA,CAWF,IAAK,OACH,OAAAC,GAAA,CAQF,QACE,OAAAC,GAAA,GAYAR,EAAuDb,GAAK,CAChE,OAAQA,EAAER,QAAV,CACE,IAAK,YACH,OAAA8B,GAAA,CAEF,IAAK,SACH,OAAAC,GAAA,CAEF,IAAK,SACH,OAAAC,GAAA,CAEF,IAAK,WACH,OAAAC,GAAA,CAEF,IAAK,gBACH,OAAAC,GAAA,CASF,QACE,OAAAJ,GAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"slider.js","names":["cn","getColor","Component","createEffect","createMemo","createSignal","For","mergeProps","on","Show","ParentComponent","SliderProps","SliderTooltipProps","SliderTooltipInternalProps","content","open","SliderTooltip","p","_el$","_tmpl$","_$insert","children","_$effect","_p$","_v$","position","color","class","_v$2","e","_$className","t","_$setAttribute","undefined","DEFAULT_PROPS","Partial","min","max","step","disabled","reverse","orientation","dots","included","tooltip","hidden","Slider","activeThumb","setActiveThumb","hoveredThumb","setHoveredThumb","railRef","HTMLDivElement","isRange","range","getInitialValue","value","defaultValue","internalValue","setInternalValue","newValue","currentValue","valuesArray","val","Array","isArray","valueToPercent","percent","percentToValue","actualPercent","Math","round","marks","markValues","Object","keys","map","Number","push","reduce","prev","curr","abs","getPositionFromEvent","event","MouseEvent","TouchEvent","rect","getBoundingClientRect","isVertical","clientPos","touches","clientY","clientX","bottom","height","left","width","updateValue","thumbIndex","finalValue","current","newValues","onChange","handleThumbMouseDown","preventDefault","stopPropagation","handleMove","handleEnd","document","removeEventListener","addEventListener","handleRailClick","clickedValue","v0","v1","dist0","dist1","closestThumb","marksList","entries","key","numKey","markData","label","style","dotsList","v","isInRange","trackStyle","start","length","p0","p1","thumbPositions","formatTooltip","formatter","String","shouldShowTooltip","forceOpen","getTooltipProps","rest","_el$2","_tmpl$4","_el$3","firstChild","_el$7","$$click","_ref$","_$use","_$createComponent","when","_el$4","_v$3","track","_v$4","_$style","each","dot","_el$9","_v$19","_v$20","mark","_el$0","_v$21","_v$22","_el$1","_tmpl$5","_v$23","markText","_v$24","_el$5","_tmpl$3","fallback","_el$10","_tmpl$2","$$touchstart","$$mousedown","_v$25","handle","_v$26","_v$27","_v$28","_v$29","_v$30","a","o","i","n","_$mergeProps","_el$6","_v$5","_v$6","_v$7","_v$8","_v$9","_v$0","_$p","_el$11","_v$31","_v$32","_v$33","_v$34","_v$35","_v$36","_el$8","_v$1","_v$10","_v$11","_v$12","_v$13","_v$14","_v$15","root","_v$16","_v$17","rail","_v$18","_$delegateEvents"],"sources":["../../../src/components/slider/slider.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport { getColor } from '@/utils/helper';\r\nimport {\r\n Component,\r\n createEffect,\r\n createMemo,\r\n createSignal,\r\n For,\r\n mergeProps,\r\n on,\r\n Show,\r\n type ParentComponent,\r\n} from 'solid-js';\r\nimport type { SliderProps, SliderTooltipProps } from './slider.types';\r\n\r\ntype SliderTooltipInternalProps = SliderTooltipProps & {\r\n content: string;\r\n open: boolean;\r\n};\r\n\r\nconst SliderTooltip: ParentComponent<SliderTooltipInternalProps> = p => (\r\n <div\r\n class={cn(\r\n 'tooltip',\r\n p.position === 'bottom' && 'tooltip-bottom',\r\n p.position === 'left' && 'tooltip-left',\r\n p.position === 'right' && 'tooltip-right',\r\n p.color && `tooltip-${p.color}`,\r\n p.open && 'tooltip-open',\r\n p.class,\r\n )}\r\n data-tip={p.content}\r\n >\r\n {p.children}\r\n </div>\r\n);\r\n\r\nconst DEFAULT_PROPS: Partial<SliderProps> = {\r\n color: 'primary',\r\n min: 0,\r\n max: 100,\r\n step: 1,\r\n disabled: false,\r\n reverse: false,\r\n orientation: 'horizontal',\r\n dots: false,\r\n included: true,\r\n tooltip: {\r\n hidden: false,\r\n },\r\n};\r\n\r\nexport const Slider: Component<SliderProps> = p => {\r\n p = mergeProps(DEFAULT_PROPS, p);\r\n\r\n // Internal state\r\n const [activeThumb, setActiveThumb] = createSignal<0 | 1 | null>(null);\r\n const [hoveredThumb, setHoveredThumb] = createSignal<0 | 1 | null>(null);\r\n\r\n // Refs\r\n let railRef: HTMLDivElement | undefined;\r\n\r\n // Determine if range mode\r\n const isRange = createMemo(() => p.range === true);\r\n\r\n // Internal value state (for uncontrolled mode)\r\n const getInitialValue = (): number | [number, number] => {\r\n if (p.value !== undefined) return p.value;\r\n if (p.defaultValue !== undefined) return p.defaultValue;\r\n return isRange() ? ([p.min!, p.max!] as [number, number]) : p.min!;\r\n };\r\n\r\n const [internalValue, setInternalValue] = createSignal<number | [number, number]>(\r\n getInitialValue(),\r\n );\r\n\r\n // Sync with controlled value\r\n createEffect(\r\n on(\r\n () => p.value,\r\n newValue => {\r\n if (newValue !== undefined) {\r\n setInternalValue(newValue);\r\n }\r\n },\r\n ),\r\n );\r\n\r\n // Current value getter\r\n const currentValue = createMemo(() => {\r\n return p.value !== undefined ? p.value : internalValue();\r\n });\r\n\r\n // Get values as array for easy handling\r\n const valuesArray = createMemo<[number, number]>(() => {\r\n const val = currentValue();\r\n if (Array.isArray(val)) {\r\n return val as [number, number];\r\n }\r\n return [p.min!, val] as [number, number];\r\n });\r\n\r\n // Calculate percentage from value\r\n const valueToPercent = (value: number): number => {\r\n const { min, max } = p;\r\n const percent = ((value - min!) / (max! - min!)) * 100;\r\n return p.reverse ? 100 - percent : percent;\r\n };\r\n\r\n // Calculate value from percentage\r\n const percentToValue = (percent: number): number => {\r\n const { min, max, step } = p;\r\n const actualPercent = p.reverse ? 100 - percent : percent;\r\n let value = min! + (actualPercent / 100) * (max! - min!);\r\n\r\n // Snap to step if defined\r\n if (step !== null && step !== undefined) {\r\n value = Math.round(value / step) * step;\r\n }\r\n\r\n // Snap to marks if step is null\r\n if (step === null && p.marks) {\r\n const markValues = Object.keys(p.marks).map(Number);\r\n markValues.push(min!, max!);\r\n value = markValues.reduce((prev, curr) =>\r\n Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev,\r\n );\r\n }\r\n\r\n return Math.max(min!, Math.min(max!, value));\r\n };\r\n\r\n // Get position from mouse/touch event\r\n const getPositionFromEvent = (event: MouseEvent | TouchEvent): number => {\r\n if (!railRef) return 0;\r\n\r\n const rect = railRef.getBoundingClientRect();\r\n const isVertical = p.orientation === 'vertical';\r\n\r\n let clientPos: number;\r\n if ('touches' in event) {\r\n clientPos = isVertical ? event.touches[0].clientY : event.touches[0].clientX;\r\n } else {\r\n clientPos = isVertical ? event.clientY : event.clientX;\r\n }\r\n\r\n let percent: number;\r\n if (isVertical) {\r\n percent = ((rect.bottom - clientPos) / rect.height) * 100;\r\n } else {\r\n percent = ((clientPos - rect.left) / rect.width) * 100;\r\n }\r\n\r\n return Math.max(0, Math.min(100, percent));\r\n };\r\n\r\n // Update value\r\n const updateValue = (newValue: number, thumbIndex: 0 | 1) => {\r\n let finalValue: number | [number, number];\r\n\r\n if (isRange()) {\r\n const current = valuesArray();\r\n const newValues: [number, number] = [...current];\r\n newValues[thumbIndex] = newValue;\r\n\r\n // Ensure min <= max for range\r\n if (thumbIndex === 0 && newValue > newValues[1]) {\r\n newValues[0] = newValues[1];\r\n } else if (thumbIndex === 1 && newValue < newValues[0]) {\r\n newValues[1] = newValues[0];\r\n }\r\n\r\n finalValue = newValues;\r\n } else {\r\n finalValue = newValue;\r\n }\r\n\r\n // Update internal state (for uncontrolled mode)\r\n if (p.value === undefined) {\r\n setInternalValue(finalValue);\r\n }\r\n\r\n // Call onChange callback\r\n p.onChange?.(finalValue);\r\n };\r\n\r\n // Handle mouse/touch start on thumb\r\n const handleThumbMouseDown = (event: MouseEvent | TouchEvent, thumbIndex: 0 | 1) => {\r\n if (p.disabled) return;\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n setActiveThumb(thumbIndex);\r\n\r\n const handleMove = (e: MouseEvent | TouchEvent) => {\r\n const percent = getPositionFromEvent(e);\r\n const value = percentToValue(percent);\r\n updateValue(value, thumbIndex);\r\n };\r\n\r\n const handleEnd = () => {\r\n setActiveThumb(null);\r\n document.removeEventListener('mousemove', handleMove);\r\n document.removeEventListener('mouseup', handleEnd);\r\n document.removeEventListener('touchmove', handleMove);\r\n document.removeEventListener('touchend', handleEnd);\r\n };\r\n\r\n document.addEventListener('mousemove', handleMove);\r\n document.addEventListener('mouseup', handleEnd);\r\n document.addEventListener('touchmove', handleMove);\r\n document.addEventListener('touchend', handleEnd);\r\n };\r\n\r\n // Handle click on rail\r\n const handleRailClick = (event: MouseEvent) => {\r\n if (p.disabled) return;\r\n\r\n const percent = getPositionFromEvent(event);\r\n const clickedValue = percentToValue(percent);\r\n\r\n if (isRange()) {\r\n // Find closest thumb\r\n const [v0, v1] = valuesArray();\r\n const dist0 = Math.abs(clickedValue - v0);\r\n const dist1 = Math.abs(clickedValue - v1);\r\n const closestThumb: 0 | 1 = dist0 <= dist1 ? 0 : 1;\r\n updateValue(clickedValue, closestThumb);\r\n } else {\r\n updateValue(clickedValue, 1);\r\n }\r\n };\r\n\r\n // Calculate marks\r\n const marksList = createMemo(() => {\r\n if (!p.marks) return [];\r\n return Object.entries(p.marks).map(([key, value]) => {\r\n const numKey = Number(key);\r\n const percent = valueToPercent(numKey);\r\n const markData = typeof value === 'string' ? { label: value, style: undefined } : value;\r\n return {\r\n value: numKey,\r\n percent,\r\n ...markData,\r\n };\r\n });\r\n });\r\n\r\n // Calculate dots\r\n const dotsList = createMemo(() => {\r\n if (!p.dots) return [];\r\n const { min, max, step } = p;\r\n if (!step || step <= 0) return [];\r\n\r\n const dots: { value: number; percent: number }[] = [];\r\n for (let v = min!; v <= max!; v += step) {\r\n dots.push({\r\n value: v,\r\n percent: valueToPercent(v),\r\n });\r\n }\r\n return dots;\r\n });\r\n\r\n // Check if value is in range (for included styling)\r\n const isInRange = (value: number): boolean => {\r\n if (!p.included) return false;\r\n const [v0, v1] = valuesArray();\r\n if (isRange()) {\r\n return value >= v0 && value <= v1;\r\n }\r\n return value >= p.min! && value <= v1;\r\n };\r\n\r\n // Track styles\r\n const trackStyle = createMemo(() => {\r\n const [v0, v1] = valuesArray();\r\n const isVertical = p.orientation === 'vertical';\r\n\r\n let start: number, length: number;\r\n\r\n if (isRange()) {\r\n const p0 = valueToPercent(v0);\r\n const p1 = valueToPercent(v1);\r\n start = Math.min(p0, p1);\r\n length = Math.abs(p1 - p0);\r\n } else {\r\n if (p.reverse) {\r\n const p1 = valueToPercent(v1);\r\n start = p1;\r\n length = 100 - p1;\r\n } else {\r\n start = 0;\r\n length = valueToPercent(v1);\r\n }\r\n }\r\n\r\n if (isVertical) {\r\n return { bottom: `${start}%`, height: `${length}%` };\r\n }\r\n return { left: `${start}%`, width: `${length}%` };\r\n });\r\n\r\n // Thumb positions\r\n const thumbPositions = createMemo(() => {\r\n const [v0, v1] = valuesArray();\r\n const isVertical = p.orientation === 'vertical';\r\n\r\n const p0 = valueToPercent(v0);\r\n const p1 = valueToPercent(v1);\r\n\r\n if (isVertical) {\r\n return [{ bottom: `${p0}%` }, { bottom: `${p1}%` }];\r\n }\r\n return [{ left: `${p0}%` }, { left: `${p1}%` }];\r\n });\r\n\r\n // Tooltip formatter\r\n const formatTooltip = (value: number): string => {\r\n if (p.tooltip?.formatter === null) return '';\r\n if (typeof p.tooltip?.formatter === 'function') {\r\n return String(p.tooltip.formatter(value));\r\n }\r\n return String(value);\r\n };\r\n\r\n // Should show tooltip\r\n const shouldShowTooltip = (thumbIndex: 0 | 1): boolean => {\r\n if (p.tooltip?.forceOpen === false) return false;\r\n if (p.tooltip?.forceOpen === true) return true;\r\n return activeThumb() === thumbIndex || hoveredThumb() === thumbIndex;\r\n };\r\n\r\n // Get tooltip props excluding internal ones\r\n const getTooltipProps = () => {\r\n if (!p.tooltip) return {};\r\n const { forceOpen, formatter, hidden, ...rest } = p.tooltip;\r\n return rest;\r\n };\r\n\r\n const isVertical = () => p.orientation === 'vertical';\r\n\r\n return (\r\n <div\r\n class={cn(\r\n 'sli01',\r\n getColor(p.color!),\r\n isVertical() && 'sli02',\r\n p.disabled && 'sli03',\r\n p.class?.root,\r\n )}\r\n data-disabled={p.disabled || undefined}\r\n >\r\n {/* Rail */}\r\n <div ref={railRef} class={cn('sli04', p.class?.rail)} onClick={handleRailClick}>\r\n {/* Track */}\r\n <Show when={p.included !== false}>\r\n <div class={cn('sli05', p.class?.track)} style={trackStyle()} />\r\n </Show>\r\n\r\n {/* Dots */}\r\n <For each={dotsList()}>\r\n {dot => (\r\n <div\r\n class={cn('sli09', isInRange(dot.value) && 'sli10', p.class?.dot)}\r\n style={isVertical() ? { bottom: `${dot.percent}%` } : { left: `${dot.percent}%` }}\r\n />\r\n )}\r\n </For>\r\n\r\n {/* Marks */}\r\n <For each={marksList()}>\r\n {mark => (\r\n <>\r\n <div\r\n class={cn('sli11', isInRange(mark.value) && 'sli12', p.class?.mark)}\r\n style={isVertical() ? { bottom: `${mark.percent}%` } : { left: `${mark.percent}%` }}\r\n />\r\n <span\r\n class={cn('sli13', isInRange(mark.value) && 'sli14', p.class?.markText)}\r\n style={{\r\n ...(isVertical() ? { bottom: `${mark.percent}%` } : { left: `${mark.percent}%` }),\r\n ...mark.style,\r\n }}\r\n >\r\n {mark.label}\r\n </span>\r\n </>\r\n )}\r\n </For>\r\n\r\n {/* Thumbs */}\r\n <Show when={isRange()}>\r\n <div class=\"sli06\" style={thumbPositions()[0]}>\r\n <Show\r\n when={!p.tooltip?.hidden}\r\n fallback={\r\n <div\r\n class={cn('sli07', activeThumb() === 0 && 'sli08', p.class?.handle)}\r\n tabIndex={p.disabled ? -1 : 0}\r\n role=\"slider\"\r\n aria-valuemin={p.min}\r\n aria-valuemax={p.max}\r\n aria-valuenow={valuesArray()[0]}\r\n aria-disabled={p.disabled}\r\n onMouseDown={e => handleThumbMouseDown(e, 0)}\r\n onTouchStart={e => handleThumbMouseDown(e, 0)}\r\n onMouseEnter={() => setHoveredThumb(0)}\r\n onMouseLeave={() => setHoveredThumb(null)}\r\n onFocus={() => setHoveredThumb(0)}\r\n onBlur={() => setHoveredThumb(null)}\r\n />\r\n }\r\n >\r\n <SliderTooltip\r\n content={formatTooltip(valuesArray()[0])}\r\n open={shouldShowTooltip(0)}\r\n position={isVertical() ? 'right' : 'top'}\r\n {...getTooltipProps()}\r\n >\r\n <div\r\n class={cn('sli07', activeThumb() === 0 && 'sli08', p.class?.handle)}\r\n tabIndex={p.disabled ? -1 : 0}\r\n role=\"slider\"\r\n aria-valuemin={p.min}\r\n aria-valuemax={p.max}\r\n aria-valuenow={valuesArray()[0]}\r\n aria-disabled={p.disabled}\r\n onMouseDown={e => handleThumbMouseDown(e, 0)}\r\n onTouchStart={e => handleThumbMouseDown(e, 0)}\r\n onMouseEnter={() => setHoveredThumb(0)}\r\n onMouseLeave={() => setHoveredThumb(null)}\r\n onFocus={() => setHoveredThumb(0)}\r\n onBlur={() => setHoveredThumb(null)}\r\n />\r\n </SliderTooltip>\r\n </Show>\r\n </div>\r\n </Show>\r\n\r\n <div class=\"sli06\" style={thumbPositions()[1]}>\r\n <Show\r\n when={!p.tooltip?.hidden}\r\n fallback={\r\n <div\r\n class={cn('sli07', activeThumb() === 1 && 'sli08', p.class?.handle)}\r\n tabIndex={p.disabled ? -1 : 0}\r\n role=\"slider\"\r\n aria-valuemin={p.min}\r\n aria-valuemax={p.max}\r\n aria-valuenow={valuesArray()[1]}\r\n aria-disabled={p.disabled}\r\n onMouseDown={e => handleThumbMouseDown(e, 1)}\r\n onTouchStart={e => handleThumbMouseDown(e, 1)}\r\n onMouseEnter={() => setHoveredThumb(1)}\r\n onMouseLeave={() => setHoveredThumb(null)}\r\n onFocus={() => setHoveredThumb(1)}\r\n onBlur={() => setHoveredThumb(null)}\r\n />\r\n }\r\n >\r\n <SliderTooltip\r\n content={formatTooltip(valuesArray()[1])}\r\n open={shouldShowTooltip(1)}\r\n position={isVertical() ? 'right' : 'top'}\r\n {...getTooltipProps()}\r\n >\r\n <div\r\n class={cn('sli07', activeThumb() === 1 && 'sli08', p.class?.handle)}\r\n tabIndex={p.disabled ? -1 : 0}\r\n role=\"slider\"\r\n aria-valuemin={p.min}\r\n aria-valuemax={p.max}\r\n aria-valuenow={valuesArray()[1]}\r\n aria-disabled={p.disabled}\r\n onMouseDown={e => handleThumbMouseDown(e, 1)}\r\n onTouchStart={e => handleThumbMouseDown(e, 1)}\r\n onMouseEnter={() => setHoveredThumb(1)}\r\n onMouseLeave={() => setHoveredThumb(null)}\r\n onFocus={() => setHoveredThumb(1)}\r\n onBlur={() => setHoveredThumb(null)}\r\n />\r\n </SliderTooltip>\r\n </Show>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"splitter.js","names":["cn","getColor","children","Component","createContext","createEffect","createMemo","createSignal","createUniqueId","For","JSX","mergeProps","on","onCleanup","Show","useContext","CollapsibleConfig","PanelProps","SplitterContextValue","SplitterOrientation","SplitterProps","SplitterContext","orientation","PanelRegistration","id","props","PanelRegistryContextValue","register","reg","unregister","PanelRegistryContext","renderIcon","icon","Element","CollapseLeft","_tmpl$","CollapseRight","_tmpl$2","CollapseUp","_tmpl$3","CollapseDown","_tmpl$4","clamp","v","min","max","Math","redistributeSizes","sizes","draggerIdx","delta","panelMetas","collapsed","leftIdx","rightIdx","length","next","leftMeta","rightMeta","leftMin","leftMax","rightMin","rightMax","totalAvail","newLeft","newRight","SplitterPanel","rawProps","registry","unregisterPanel","DraggerItemProps","dIdx","getPanelList","getCollapsed","getDraggingIdx","draggerIcon","showCollapsibleIcon","collapsibleIcon","collapse","expand","collapsedControlled","class","onMouseDown","idx","e","MouseEvent","onDblClick","onCollapse","panelIdx","DraggerItem","p","leftResizable","resizable","rightResizable","canResize","isDragging","leftCollapsible","collapsible","rightCollapsible","hasCollapse","isLeftCollapsed","isRightCollapsed","iconAlwaysShow","isH","showBtnNext","cfg","showBtnPrevFull","_el$5","_tmpl$6","_el$6","firstChild","$$dblclick","$$mousedown","_$insert","_c$","_$memo","_$createComponent","when","_el$7","_tmpl$5","$$click","stopPropagation","_c$2","_$effect","_p$","_v$","collapseBtn","_v$2","_$className","t","_$setAttribute","undefined","_el$8","_c$3","_v$3","_v$4","_v$5","dragger","_v$6","draggerBar","Splitter","Panel","lazy","color","const","vertical","setPanelMetas","prev","findIndex","r","filter","resolvedChildren","Provider","value","initSizes","metas","n","size","raw","map","m","defaultSize","hasAll","every","total","reduce","s","definedTotal","undefinedCount","eachUndefined","isCollapsedControlled","Array","isArray","setSizes","collapsedInternal","setCollapsedInternal","draggingIdx","setDraggingIdx","setCollapsed","lazyGhostPos","setLazyGhostPos","controlled","containerRef","HTMLDivElement","cachedContainerSize","observeContainerSize","observer","ResizeObserver","entries","entry","contentRect","width","height","observe","disconnectContainerObserver","disconnect","getContainerSize","getNormalizedSizes","col","visibleTotal","sum","i","dragStartPos","dragStartSizes","dragStartCollapsed","onDraggerMouseDown","preventDefault","clientX","clientY","onResizeStart","index","document","addEventListener","onMouseMove","onMouseUp","applyNewSizes","newSizes","changed","pos","containerSize","deltaPct","leftSumPct","slice","onResize","onResizeEnd","removeEventListener","removeDragListeners","collapsePanel","currentCollapsed","newCollapsed","ghostStyle","CSSProperties","display","left","top","_el$9","_tmpl$7","_el$0","_tmpl$9","_ref$","_$use","each","meta","isCollapsed","panelStyle","rawSizes","normalized","showDragger","hasVisibleLeft","hasVisibleRight","_el$10","_v$7","panel","_v$8","_v$9","_$style","a","onDraggerDoubleClick","_el$1","_tmpl$8","_$p","root","_$delegateEvents"],"sources":["../../../src/components/splitter/splitter.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport { getColor } from '@utils/helper';\r\nimport {\r\n children,\r\n Component,\r\n createContext,\r\n createEffect,\r\n createMemo,\r\n createSignal,\r\n createUniqueId,\r\n For,\r\n JSX,\r\n mergeProps,\r\n on,\r\n onCleanup,\r\n Show,\r\n useContext,\r\n} from 'solid-js';\r\nimport type {\r\n CollapsibleConfig,\r\n PanelProps,\r\n SplitterContextValue,\r\n SplitterOrientation,\r\n SplitterProps,\r\n} from './splitter.types';\r\n\r\nconst SplitterContext = createContext<SplitterContextValue>({ orientation: 'horizontal' });\r\n\r\ntype PanelRegistration = {\r\n id: string;\r\n props: PanelProps;\r\n};\r\n\r\ntype PanelRegistryContextValue = {\r\n register: (reg: PanelRegistration) => void;\r\n unregister: (id: string) => void;\r\n};\r\n\r\nconst PanelRegistryContext = createContext<PanelRegistryContextValue | null>(null);\r\n\r\nfunction renderIcon(icon: JSX.Element | (() => JSX.Element) | undefined): JSX.Element {\r\n if (typeof icon === 'function') return (icon as () => JSX.Element)();\r\n return icon as JSX.Element;\r\n}\r\n\r\nconst CollapseLeft = () => (\r\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"currentColor\">\r\n <path d=\"M6 2L3 5l3 3V2z\" />\r\n </svg>\r\n);\r\n\r\nconst CollapseRight = () => (\r\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"currentColor\">\r\n <path d=\"M4 2l3 3-3 3V2z\" />\r\n </svg>\r\n);\r\n\r\nconst CollapseUp = () => (\r\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"currentColor\">\r\n <path d=\"M2 6l3-3 3 3H2z\" />\r\n </svg>\r\n);\r\n\r\nconst CollapseDown = () => (\r\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"currentColor\">\r\n <path d=\"M2 4l3 3 3-3H2z\" />\r\n </svg>\r\n);\r\n\r\nfunction clamp(v: number, min: number, max: number) {\r\n return Math.min(Math.max(v, min), max);\r\n}\r\n\r\nfunction redistributeSizes(\r\n sizes: number[],\r\n draggerIdx: number,\r\n delta: number,\r\n panelMetas: PanelRegistration[],\r\n collapsed: boolean[],\r\n): number[] {\r\n // Tìm panel visible thực sự ở hai phía của dragger.\r\n // Bỏ qua các panel đang collapsed vì chúng bị CSS force về 0 và không\r\n // đóng góp vào tổng width thực tế — redistribute vào chúng sẽ tạo gap.\r\n let leftIdx = draggerIdx;\r\n while (leftIdx >= 0 && collapsed[leftIdx]) leftIdx--;\r\n\r\n let rightIdx = draggerIdx + 1;\r\n while (rightIdx < sizes.length && collapsed[rightIdx]) rightIdx++;\r\n\r\n if (leftIdx < 0 || rightIdx >= sizes.length) return sizes;\r\n\r\n const next = [...sizes];\r\n\r\n const leftMeta = panelMetas[leftIdx]?.props;\r\n const rightMeta = panelMetas[rightIdx]?.props;\r\n\r\n const leftMin = leftMeta?.min ?? 0;\r\n const leftMax = leftMeta?.max ?? 100;\r\n const rightMin = rightMeta?.min ?? 0;\r\n const rightMax = rightMeta?.max ?? 100;\r\n\r\n const totalAvail = next[leftIdx] + next[rightIdx];\r\n\r\n // Clamp newLeft trong khoảng [leftMin, leftMax] và đảm bảo right có đủ chỗ tối thiểu\r\n let newLeft = clamp(next[leftIdx] + delta, leftMin, Math.min(leftMax, totalAvail - rightMin));\r\n let newRight = totalAvail - newLeft;\r\n\r\n // Nếu right vượt quá rightMax, clamp right lại và tính lại left\r\n if (newRight > rightMax) {\r\n newRight = rightMax;\r\n newLeft = totalAvail - newRight;\r\n if (newLeft < leftMin || newLeft > leftMax) return sizes;\r\n }\r\n\r\n if (newRight < rightMin) return sizes;\r\n\r\n next[leftIdx] = newLeft;\r\n next[rightIdx] = newRight;\r\n return next;\r\n}\r\n\r\nexport const SplitterPanel: Component<PanelProps> = rawProps => {\r\n const registry = useContext(PanelRegistryContext);\r\n const id = createUniqueId();\r\n\r\n if (registry) {\r\n registry.register({ id, props: rawProps });\r\n onCleanup(function unregisterPanel() {\r\n registry.unregister(id);\r\n });\r\n }\r\n return null;\r\n};\r\n\r\ntype DraggerItemProps = {\r\n dIdx: number;\r\n getPanelList: () => PanelRegistration[];\r\n getCollapsed: () => boolean[];\r\n getDraggingIdx: () => number | null;\r\n orientation: () => SplitterOrientation;\r\n draggerIcon?: JSX.Element | (() => JSX.Element);\r\n showCollapsibleIcon: () => CollapsibleConfig;\r\n collapsibleIcon?: {\r\n collapse?: JSX.Element | (() => JSX.Element);\r\n expand?: JSX.Element | (() => JSX.Element);\r\n };\r\n collapsedControlled: () => boolean;\r\n class?: SplitterProps['class'];\r\n onMouseDown: (idx: number, e: MouseEvent) => void;\r\n onDblClick: (idx: number) => void;\r\n onCollapse: (panelIdx: number) => void;\r\n};\r\n\r\nconst DraggerItem: Component<DraggerItemProps> = p => {\r\n const dIdx = p.dIdx;\r\n\r\n const leftResizable = createMemo(() => p.getPanelList()[dIdx]?.props.resizable !== false);\r\n const rightResizable = createMemo(() => p.getPanelList()[dIdx + 1]?.props.resizable !== false);\r\n const canResize = createMemo(() => leftResizable() && rightResizable());\r\n const isDragging = createMemo(() => p.getDraggingIdx() === dIdx);\r\n\r\n const leftCollapsible = createMemo(() => p.getPanelList()[dIdx]?.props.collapsible ?? false);\r\n const rightCollapsible = createMemo(() => p.getPanelList()[dIdx + 1]?.props.collapsible ?? false);\r\n const hasCollapse = createMemo(() => leftCollapsible() || rightCollapsible());\r\n\r\n const isLeftCollapsed = createMemo(() => p.getCollapsed()[dIdx] ?? false);\r\n const isRightCollapsed = createMemo(() => p.getCollapsed()[dIdx + 1] ?? false);\r\n\r\n const iconAlwaysShow = createMemo(() => p.showCollapsibleIcon() === true);\r\n const isH = createMemo(() => p.orientation() === 'horizontal');\r\n\r\n const showBtnNext = createMemo(() => {\r\n if (p.collapsedControlled()) return false;\r\n const cfg = p.showCollapsibleIcon();\r\n if (cfg === false) return false;\r\n if (!hasCollapse()) return false;\r\n\r\n return rightCollapsible() || isLeftCollapsed();\r\n });\r\n\r\n const showBtnPrevFull = createMemo(() => {\r\n if (p.collapsedControlled()) return false;\r\n const cfg = p.showCollapsibleIcon();\r\n if (cfg === false) return false;\r\n if (!hasCollapse()) return false;\r\n return leftCollapsible() || isRightCollapsed();\r\n });\r\n\r\n return (\r\n <div\r\n class={cn('sp06', !canResize() && 'sp07', isDragging() && 'sp08', p.class?.dragger)}\r\n onMouseDown={e => p.onMouseDown(dIdx, e)}\r\n onDblClick={() => p.onDblClick(dIdx)}\r\n >\r\n <div class={cn('sp15', p.class?.draggerBar)}>\r\n {p.draggerIcon ? renderIcon(p.draggerIcon) : null}\r\n </div>\r\n\r\n <Show when={showBtnPrevFull()}>\r\n <button\r\n class={cn(\r\n 'sp10',\r\n 'sp11',\r\n iconAlwaysShow() && 'sp13',\r\n\r\n (isLeftCollapsed() || isRightCollapsed()) && 'sp14',\r\n p.class?.collapseBtn,\r\n )}\r\n title={isLeftCollapsed() || isRightCollapsed() ? 'Expand' : 'Collapse'}\r\n onClick={e => {\r\n e.stopPropagation();\r\n\r\n if (isRightCollapsed()) p.onCollapse(dIdx + 1);\r\n else p.onCollapse(dIdx);\r\n }}\r\n >\r\n {isLeftCollapsed()\r\n ? renderIcon(\r\n p.collapsibleIcon?.expand ?? (isH() ? <CollapseRight /> : <CollapseDown />),\r\n )\r\n : isRightCollapsed()\r\n ? renderIcon(p.collapsibleIcon?.expand ?? (isH() ? <CollapseLeft /> : <CollapseUp />))\r\n : renderIcon(\r\n p.collapsibleIcon?.collapse ?? (isH() ? <CollapseLeft /> : <CollapseUp />),\r\n )}\r\n </button>\r\n </Show>\r\n\r\n <Show when={showBtnNext()}>\r\n <button\r\n class={cn(\r\n 'sp10',\r\n 'sp12',\r\n iconAlwaysShow() && 'sp13',\r\n\r\n (isRightCollapsed() || isLeftCollapsed()) && 'sp14',\r\n p.class?.collapseBtn,\r\n )}\r\n title={isRightCollapsed() ? 'Collapse' : 'Expand'}\r\n onClick={e => {\r\n e.stopPropagation();\r\n\r\n if (isLeftCollapsed()) p.onCollapse(dIdx);\r\n else p.onCollapse(dIdx + 1);\r\n }}\r\n >\r\n {isRightCollapsed()\r\n ? renderIcon(p.collapsibleIcon?.expand ?? (isH() ? <CollapseLeft /> : <CollapseUp />))\r\n : isLeftCollapsed()\r\n ? renderIcon(\r\n p.collapsibleIcon?.expand ?? (isH() ? <CollapseRight /> : <CollapseDown />),\r\n )\r\n : renderIcon(\r\n p.collapsibleIcon?.collapse ?? (isH() ? <CollapseRight /> : <CollapseDown />),\r\n )}\r\n </button>\r\n </Show>\r\n </div>\r\n );\r\n};\r\n\r\nexport const Splitter: Component<SplitterProps> & { Panel: Component<PanelProps> } = rawProps => {\r\n const p = mergeProps(\r\n {\r\n orientation: 'horizontal' as SplitterOrientation,\r\n lazy: false,\r\n color: 'primary' as const,\r\n },\r\n rawProps,\r\n );\r\n\r\n const orientation = createMemo<SplitterOrientation>(() =>\r\n p.vertical ? 'vertical' : (p.orientation ?? 'horizontal'),\r\n );\r\n\r\n const [panelMetas, setPanelMetas] = createSignal<PanelRegistration[]>([]);\r\n\r\n const registry: PanelRegistryContextValue = {\r\n register(reg) {\r\n setPanelMetas(prev => {\r\n const idx = prev.findIndex(r => r.id === reg.id);\r\n if (idx >= 0) {\r\n const next = [...prev];\r\n next[idx] = reg;\r\n return next;\r\n }\r\n return [...prev, reg];\r\n });\r\n },\r\n unregister(id) {\r\n setPanelMetas(prev => prev.filter(r => r.id !== id));\r\n },\r\n };\r\n\r\n const resolvedChildren = children(() => (\r\n <PanelRegistryContext.Provider value={registry}>{p.children}</PanelRegistryContext.Provider>\r\n ));\r\n\r\n function initSizes(metas: PanelRegistration[]): number[] {\r\n const n = metas.length;\r\n if (n === 0) return [];\r\n if (p.size && p.size.length === n) return [...p.size];\r\n\r\n const raw = metas.map(m => m.props.size ?? m.props.defaultSize);\r\n const hasAll = raw.every(v => v !== undefined);\r\n if (hasAll) {\r\n const total = raw.reduce((s, v) => s + v!, 0);\r\n return raw.map(v => (v! / total) * 100);\r\n }\r\n\r\n const definedTotal = (raw.filter(v => v !== undefined) as number[]).reduce((s, v) => s + v, 0);\r\n const undefinedCount = raw.filter(v => v === undefined).length;\r\n const eachUndefined = undefinedCount > 0 ? Math.max(0, 100 - definedTotal) / undefinedCount : 0;\r\n return raw.map(v => (v !== undefined ? v : eachUndefined));\r\n }\r\n\r\n const isCollapsedControlled = createMemo(() => Array.isArray(p.collapsed));\r\n\r\n const [sizes, setSizes] = createSignal<number[]>([]);\r\n const [collapsedInternal, setCollapsedInternal] = createSignal<boolean[]>([]);\r\n const [draggingIdx, setDraggingIdx] = createSignal<number | null>(null);\r\n\r\n const collapsed = createMemo(() =>\r\n isCollapsedControlled() ? (p.collapsed as boolean[]) : collapsedInternal(),\r\n );\r\n const setCollapsed = (next: boolean[]) => {\r\n if (!isCollapsedControlled()) setCollapsedInternal(next);\r\n };\r\n\r\n const [lazyGhostPos, setLazyGhostPos] = createSignal<number | null>(null);\r\n\r\n createEffect(\r\n on(panelMetas, metas => {\r\n if (metas.length === 0) return;\r\n setSizes(initSizes(metas));\r\n setCollapsedInternal(metas.map(() => false));\r\n }),\r\n );\r\n\r\n createEffect(\r\n on(\r\n () => p.size,\r\n controlled => {\r\n if (!controlled) return;\r\n if (controlled.length === panelMetas().length) setSizes([...controlled]);\r\n },\r\n ),\r\n );\r\n\r\n let containerRef: HTMLDivElement | undefined;\r\n let cachedContainerSize = 0;\r\n\r\n createEffect(function observeContainerSize() {\r\n if (!containerRef) return;\r\n const isH = orientation() === 'horizontal';\r\n const observer = new ResizeObserver(entries => {\r\n const entry = entries[0];\r\n if (!entry) return;\r\n cachedContainerSize = isH ? entry.contentRect.width : entry.contentRect.height;\r\n });\r\n observer.observe(containerRef);\r\n onCleanup(function disconnectContainerObserver() {\r\n observer.disconnect();\r\n });\r\n });\r\n\r\n function getContainerSize(): number {\r\n return cachedContainerSize;\r\n }\r\n\r\n // Trả về sizes đã normalize: tổng 100% chỉ tính trên panel visible\r\n function getNormalizedSizes(): number[] {\r\n const col = collapsed();\r\n const raw = sizes();\r\n const visibleTotal = raw.reduce((sum, s, i) => sum + (col[i] ? 0 : s), 0);\r\n if (visibleTotal === 0) return raw.map(() => 0);\r\n return raw.map((s, i) => (col[i] ? s : (s / visibleTotal) * 100));\r\n }\r\n\r\n let dragStartPos = 0;\r\n let dragStartSizes: number[] = [];\r\n let dragStartCollapsed: boolean[] = [];\r\n\r\n function onDraggerMouseDown(idx: number, e: MouseEvent) {\r\n const metas = panelMetas();\r\n if (metas[idx]?.props.resizable === false) return;\r\n if (metas[idx + 1]?.props.resizable === false) return;\r\n\r\n e.preventDefault();\r\n setDraggingIdx(idx);\r\n dragStartPos = orientation() === 'horizontal' ? e.clientX : e.clientY;\r\n dragStartSizes = getNormalizedSizes();\r\n dragStartCollapsed = [...collapsed()];\r\n p.onResizeStart?.({ sizes: dragStartSizes, index: idx });\r\n\r\n document.addEventListener('mousemove', onMouseMove);\r\n document.addEventListener('mouseup', onMouseUp);\r\n }\r\n\r\n function applyNewSizes(newSizes: number[], idx: number) {\r\n const col = [...collapsed()];\r\n let changed = false;\r\n if (col[idx] && newSizes[idx] > 0) {\r\n col[idx] = false;\r\n changed = true;\r\n }\r\n if (col[idx + 1] && newSizes[idx + 1] > 0) {\r\n col[idx + 1] = false;\r\n changed = true;\r\n }\r\n if (changed) setCollapsed(col);\r\n setSizes(newSizes);\r\n }\r\n\r\n function onMouseMove(e: MouseEvent) {\r\n const idx = draggingIdx();\r\n if (idx === null) return;\r\n\r\n const pos = orientation() === 'horizontal' ? e.clientX : e.clientY;\r\n const containerSize = getContainerSize();\r\n if (containerSize === 0) return;\r\n\r\n const deltaPct = ((pos - dragStartPos) / containerSize) * 100;\r\n const newSizes = redistributeSizes(\r\n dragStartSizes,\r\n idx,\r\n deltaPct,\r\n panelMetas(),\r\n dragStartCollapsed,\r\n );\r\n\r\n if (p.lazy) {\r\n const leftSumPct = newSizes.slice(0, idx + 1).reduce((s, v) => s + v, 0);\r\n setLazyGhostPos((leftSumPct / 100) * containerSize);\r\n } else {\r\n applyNewSizes(newSizes, idx);\r\n p.onResize?.({ sizes: newSizes, index: idx });\r\n }\r\n }\r\n\r\n function onMouseUp(e: MouseEvent) {\r\n const idx = draggingIdx();\r\n if (idx === null) return;\r\n\r\n if (p.lazy) {\r\n const pos = orientation() === 'horizontal' ? e.clientX : e.clientY;\r\n const containerSize = getContainerSize();\r\n if (containerSize > 0) {\r\n const deltaPct = ((pos - dragStartPos) / containerSize) * 100;\r\n const newSizes = redistributeSizes(\r\n dragStartSizes,\r\n idx,\r\n deltaPct,\r\n panelMetas(),\r\n dragStartCollapsed,\r\n );\r\n applyNewSizes(newSizes, idx);\r\n p.onResize?.({ sizes: newSizes, index: idx });\r\n p.onResizeEnd?.({ sizes: newSizes, index: idx });\r\n }\r\n setLazyGhostPos(null);\r\n } else {\r\n p.onResizeEnd?.({ sizes: sizes(), index: idx });\r\n }\r\n\r\n setDraggingIdx(null);\r\n document.removeEventListener('mousemove', onMouseMove);\r\n document.removeEventListener('mouseup', onMouseUp);\r\n }\r\n\r\n onCleanup(function removeDragListeners() {\r\n document.removeEventListener('mousemove', onMouseMove);\r\n document.removeEventListener('mouseup', onMouseUp);\r\n });\r\n\r\n function collapsePanel(panelIdx: number) {\r\n const metas = panelMetas();\r\n if (!metas[panelIdx]?.props.collapsible) return;\r\n\r\n const currentCollapsed = collapsed();\r\n const newCollapsed = [...currentCollapsed];\r\n\r\n if (currentCollapsed[panelIdx]) {\r\n // Expand: chỉ bỏ collapsed flag — render tự normalize sizes\r\n newCollapsed[panelIdx] = false;\r\n setCollapsed(newCollapsed);\r\n p.onCollapse?.({ sizes: sizes(), collapsed: newCollapsed, index: panelIdx });\r\n } else {\r\n // Collapse: chỉ đánh dấu collapsed — render tự normalize sizes\r\n newCollapsed[panelIdx] = true;\r\n setCollapsed(newCollapsed);\r\n p.onCollapse?.({ sizes: sizes(), collapsed: newCollapsed, index: panelIdx });\r\n }\r\n }\r\n\r\n const ghostStyle = createMemo<JSX.CSSProperties>(() => {\r\n const pos = lazyGhostPos();\r\n\r\n if (pos === null) return { display: 'none' };\r\n return orientation() === 'horizontal'\r\n ? { display: 'block', left: `${pos}px` }\r\n : { display: 'block', top: `${pos}px` };\r\n });\r\n\r\n return (\r\n <SplitterContext.Provider value={{ orientation: orientation() }}>\r\n <div class=\"hidden\">{resolvedChildren()}</div>\r\n\r\n <div\r\n ref={containerRef}\r\n class={cn(\r\n 'sp01',\r\n orientation() === 'vertical' ? 'sp02' : 'sp03',\r\n getColor(p.color),\r\n p.class?.root,\r\n )}\r\n >\r\n <For each={panelMetas()}>\r\n {(meta, idx) => {\r\n const isCollapsed = createMemo(() => collapsed()[idx()] ?? false);\r\n\r\n // Tính normalized size: chia đều 100% cho các panel visible\r\n const panelStyle = createMemo<JSX.CSSProperties>(() => {\r\n if (isCollapsed()) return { display: 'none' };\r\n\r\n const col = collapsed();\r\n const rawSizes = sizes();\r\n\r\n // Tính tổng size của các panel visible\r\n const visibleTotal = rawSizes.reduce((sum, s, i) => sum + (col[i] ? 0 : s), 0);\r\n\r\n const s = rawSizes[idx()] ?? 0;\r\n const normalized = visibleTotal > 0 ? (s / visibleTotal) * 100 : 0;\r\n\r\n return orientation() === 'horizontal'\r\n ? { 'flex-basis': `${normalized}%`, 'min-width': `${meta.props.min ?? 0}%` }\r\n : { 'flex-basis': `${normalized}%`, 'min-height': `${meta.props.min ?? 0}%` };\r\n });\r\n\r\n // Dragger sau panel idx() — ẩn chỉ khi cả hai phía đều không có panel visible.\r\n // Trong controlled mode: ẩn dragger nếu một trong hai panel kề trực tiếp bị ẩn,\r\n // vì nút collapse/expand đã bị tắt và thanh chỉ còn dùng để resize (vô nghĩa khi\r\n // một bên không hiển thị).\r\n const showDragger = createMemo(() => {\r\n if (idx() >= panelMetas().length - 1) return false;\r\n const col = collapsed();\r\n\r\n if (isCollapsedControlled()) {\r\n return !col[idx()] && !(col[idx() + 1] ?? false);\r\n }\r\n\r\n // Tìm panel visible gần nhất bên trái (bao gồm idx())\r\n let hasVisibleLeft = false;\r\n for (let i = idx(); i >= 0; i--) {\r\n if (!col[i]) {\r\n hasVisibleLeft = true;\r\n break;\r\n }\r\n }\r\n // Tìm panel visible gần nhất bên phải (idx()+1 trở đi)\r\n let hasVisibleRight = false;\r\n for (let i = idx() + 1; i < panelMetas().length; i++) {\r\n if (!col[i]) {\r\n hasVisibleRight = true;\r\n break;\r\n }\r\n }\r\n return hasVisibleLeft || hasVisibleRight;\r\n });\r\n\r\n return (\r\n <>\r\n <div\r\n class={cn('sp04', isCollapsed() && 'sp05', meta.props.class, p.class?.panel)}\r\n style={panelStyle()}\r\n data-panel-id={meta.id}\r\n >\r\n {meta.props.children}\r\n </div>\r\n\r\n <Show when={showDragger()}>\r\n <DraggerItem\r\n dIdx={idx()}\r\n getPanelList={panelMetas}\r\n getCollapsed={collapsed}\r\n getDraggingIdx={draggingIdx}\r\n orientation={orientation}\r\n draggerIcon={p.draggerIcon}\r\n showCollapsibleIcon={() => p.showCollapsibleIcon ?? 'auto'}\r\n collapsibleIcon={p.collapsibleIcon}\r\n collapsedControlled={isCollapsedControlled}\r\n class={p.class}\r\n onMouseDown={onDraggerMouseDown}\r\n onDblClick={dIdx => p.onDraggerDoubleClick?.(dIdx, sizes())}\r\n onCollapse={collapsePanel}\r\n />\r\n </Show>\r\n </>\r\n );\r\n }}\r\n </For>\r\n\r\n <Show when={p.lazy}>\r\n <div class=\"sp09\" style={ghostStyle()} />\r\n </Show>\r\n </div>\r\n </SplitterContext.Provider>\r\n );\r\n};\r\n\r\nSplitter.Panel = SplitterPanel;\r\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"steps.js","names":["BaseColorProps","cn","getColor","ArrowRight","Check","Accessor","Component","createMemo","For","JSX","mergeProps","Setter","Show","StepItem","title","Element","description","icon","StepsProps","type","color","orientation","total","items","current","setCurrent","onChange","index","disabled","activeIndex","class","root","step","connector","StepStatus","getStepStatus","includes","StepIconProps","status","StepIconContent","p","_el$","_tmpl$","_$insert","_$createComponent","when","_$memo","fallback","_el$2","_tmpl$2","children","size","_$effect","_$className","InternalProps","isVertical","colorClass","onStepClick","TypeDefault","_el$3","each","item","i","_el$4","_el$5","_tmpl$4","_el$8","firstChild","$$click","_el$6","_tmpl$3","length","_el$7","_el$9","_el$0","_p$","_v$","_v$2","e","t","_$setAttribute","undefined","TypeNavigation","_el$1","_el$10","_tmpl$5","_el$11","_tmpl$6","_el$12","_el$13","_el$14","_el$15","_v$3","_v$4","TypeDot","_el$16","_el$17","_el$18","_el$23","_el$19","_tmpl$7","_el$20","_el$21","_el$22","_el$24","_el$25","_v$5","_v$6","Steps","resolvedItems","Array","from","_","handleClick","shared","_$mergeProps","_$delegateEvents"],"sources":["../../../src/components/steps/steps.tsx"],"sourcesContent":["import { BaseColorProps } from '@/type';\r\nimport { cn } from '@/utils/cn';\r\nimport { getColor } from '@/utils/helper';\r\nimport ArrowRight from 'lucide-solid/icons/arrow-right';\r\nimport Check from 'lucide-solid/icons/check';\r\nimport { Accessor, Component, createMemo, For, JSX, mergeProps, Setter, Show } from 'solid-js';\r\n\r\n// ─── Types ────────────────────────────────────────────────────────────────────\r\n\r\nexport type StepItem = {\r\n title?: JSX.Element;\r\n description?: JSX.Element;\r\n icon?: JSX.Element;\r\n};\r\n\r\nexport type StepsProps = {\r\n type?: 'default' | 'navigation' | 'dot';\r\n color?: BaseColorProps;\r\n orientation?: 'horizontal' | 'vertical';\r\n total?: number;\r\n items?: StepItem[];\r\n current?: Accessor<number>;\r\n setCurrent?: Setter<number>;\r\n onChange?: (index: number) => void;\r\n disabled?: number[];\r\n activeIndex?: number[];\r\n class?: {\r\n root?: string;\r\n step?: string;\r\n icon?: string;\r\n title?: string;\r\n description?: string;\r\n connector?: string;\r\n };\r\n};\r\n\r\n// ─── Helpers ──────────────────────────────────────────────────────────────────\r\n\r\ntype StepStatus = 'active' | 'done' | 'upcoming' | 'disabled';\r\n\r\nconst getStepStatus = (\r\n index: number,\r\n current: number,\r\n disabled: number[],\r\n activeIndex?: number[],\r\n): StepStatus => {\r\n if (disabled.includes(index)) return 'disabled';\r\n if (activeIndex?.includes(index)) return 'active';\r\n if (index === current) return 'active';\r\n if (index < current) return 'done';\r\n return 'upcoming';\r\n};\r\n\r\n// ─── StepIcon — reusable icon renderer ───────────────────────────────────────\r\n// Renders: checkmark (done, no custom icon) | custom icon | step number\r\n\r\ntype StepIconProps = {\r\n index: number;\r\n status: StepStatus;\r\n icon?: JSX.Element;\r\n class?: string;\r\n};\r\n\r\nconst StepIconContent: Component<StepIconProps> = p => (\r\n <div class={cn('ste15', p.class)}>\r\n <Show\r\n when={p.status === 'done' && !p.icon}\r\n fallback={\r\n <Show when={p.icon} fallback={<span class=\"ste17\">{p.index + 1}</span>}>\r\n {p.icon}\r\n </Show>\r\n }\r\n >\r\n <Check size={16} stroke-width={3} />\r\n </Show>\r\n </div>\r\n);\r\n\r\n// ─── Internal props shared across sub-components ──────────────────────────────\r\n\r\ntype InternalProps = {\r\n items: StepItem[];\r\n current: number;\r\n disabled: number[];\r\n activeIndex?: number[];\r\n isVertical: boolean;\r\n colorClass: string;\r\n onStepClick: (index: number) => void;\r\n class?: StepsProps['class'];\r\n};\r\n\r\n// ─── Sub-component: Default ───────────────────────────────────────────────────\r\n\r\nconst TypeDefault: Component<InternalProps> = p => (\r\n <div class={cn('ste01 ste02', p.colorClass, p.isVertical ? 'ste06' : 'ste05', p.class?.root)}>\r\n <For each={p.items}>\r\n {(item, i) => {\r\n const status = () => getStepStatus(i(), p.current, p.disabled, p.activeIndex);\r\n\r\n return (\r\n <>\r\n {/* Connector nằm giữa hai step (horizontal), trước mỗi step từ index 1 */}\r\n <Show when={!p.isVertical && i() > 0}>\r\n <div class={cn('ste21 ste22', `ste-s-${status()}`, p.class?.connector)} />\r\n </Show>\r\n\r\n <div\r\n class={cn('ste07 ste08', `ste-s-${status()}`, p.class?.step)}\r\n data-status={status()}\r\n onClick={() => status() !== 'disabled' && p.onStepClick(i())}\r\n >\r\n {/* ── Vertical: icon col + connector ── */}\r\n <Show when={p.isVertical}>\r\n <div class=\"ste16\">\r\n <StepIconContent\r\n index={i()}\r\n status={status()}\r\n icon={item.icon}\r\n class={p.class?.icon}\r\n />\r\n <Show when={i() < p.items.length - 1}>\r\n <div class={cn('ste21 ste23', p.class?.connector)} />\r\n </Show>\r\n </div>\r\n </Show>\r\n\r\n {/* ── Horizontal: chỉ icon (connector đã là sibling bên ngoài) ── */}\r\n <Show when={!p.isVertical}>\r\n <StepIconContent\r\n index={i()}\r\n status={status()}\r\n icon={item.icon}\r\n class={p.class?.icon}\r\n />\r\n </Show>\r\n\r\n {/* ── Content ── */}\r\n <div class=\"ste18\">\r\n <Show when={item.title}>\r\n <div class={cn('ste19', p.class?.title)}>{item.title}</div>\r\n </Show>\r\n <Show when={item.description}>\r\n <div class={cn('ste20', p.class?.description)}>{item.description}</div>\r\n </Show>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n }}\r\n </For>\r\n </div>\r\n);\r\n\r\n// ─── Sub-component: Navigation ────────────────────────────────────────────────\r\n\r\nconst TypeNavigation: Component<InternalProps> = p => (\r\n <div class={cn('ste01 ste03', p.colorClass, p.isVertical ? 'ste06' : 'ste05', p.class?.root)}>\r\n <For each={p.items}>\r\n {(item, i) => {\r\n const status = () => getStepStatus(i(), p.current, p.disabled, p.activeIndex);\r\n\r\n return (\r\n <>\r\n {/* Separator giữa các step — horizontal only */}\r\n <Show when={!p.isVertical && i() > 0}>\r\n <span class=\"ste11\" aria-hidden=\"true\">\r\n <ArrowRight\r\n size={14}\r\n stroke-width={3}\r\n color={\r\n status() === 'active' || status() === 'done' ? 'var(--color)' : 'currentColor'\r\n }\r\n />\r\n </span>\r\n </Show>\r\n\r\n <div\r\n class={cn('ste07 ste09', `ste-s-${status()}`, p.class?.step)}\r\n data-status={status()}\r\n onClick={() => status() !== 'disabled' && p.onStepClick(i())}\r\n >\r\n <div class=\"ste10\">\r\n <StepIconContent\r\n index={i()}\r\n status={status()}\r\n icon={item.icon}\r\n class={p.class?.icon}\r\n />\r\n <div class=\"ste18\">\r\n <Show when={item.title}>\r\n <div class={cn('ste19', p.class?.title)}>{item.title}</div>\r\n </Show>\r\n <Show when={item.description}>\r\n <div class={cn('ste20', p.class?.description)}>{item.description}</div>\r\n </Show>\r\n </div>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n }}\r\n </For>\r\n </div>\r\n);\r\n\r\n// ─── Sub-component: Dot ───────────────────────────────────────────────────────\r\n\r\nconst TypeDot: Component<InternalProps> = p => (\r\n <div class={cn('ste01 ste04', p.colorClass, p.isVertical ? 'ste06' : 'ste05', p.class?.root)}>\r\n <For each={p.items}>\r\n {(item, i) => {\r\n const status = () => getStepStatus(i(), p.current, p.disabled, p.activeIndex);\r\n\r\n return (\r\n <>\r\n {/* Connector sibling — horizontal only, trước mỗi step từ index 1 */}\r\n <Show when={!p.isVertical && i() > 0}>\r\n <div class={cn('ste21 ste22 ste24', `ste-s-${status()}`, p.class?.connector)} />\r\n </Show>\r\n\r\n <div\r\n class={cn('ste07 ste12', `ste-s-${status()}`, p.class?.step)}\r\n data-status={status()}\r\n onClick={() => status() !== 'disabled' && p.onStepClick(i())}\r\n >\r\n {/* ── Vertical: dot col + connector ── */}\r\n <Show when={p.isVertical}>\r\n <div class=\"ste13\">\r\n <div class={cn('ste14', p.class?.icon)} />\r\n <Show when={i() < p.items.length - 1}>\r\n <div class={cn('ste21 ste23', p.class?.connector)} />\r\n </Show>\r\n </div>\r\n </Show>\r\n\r\n {/* ── Horizontal: chỉ dot (connector là sibling bên ngoài) ── */}\r\n <Show when={!p.isVertical}>\r\n <div class={cn('ste14', p.class?.icon)} />\r\n </Show>\r\n\r\n {/* Content */}\r\n <div class=\"ste18\">\r\n <Show when={item.title}>\r\n <div class={cn('ste19', p.class?.title)}>{item.title}</div>\r\n </Show>\r\n <Show when={item.description}>\r\n <div class={cn('ste20', p.class?.description)}>{item.description}</div>\r\n </Show>\r\n </div>\r\n </div>\r\n </>\r\n );\r\n }}\r\n </For>\r\n </div>\r\n);\r\n\r\n// ─── Main Component ───────────────────────────────────────────────────────────\r\n\r\nexport const Steps: Component<StepsProps> = p => {\r\n p = mergeProps(\r\n {\r\n type: 'default',\r\n orientation: 'horizontal',\r\n color: 'primary',\r\n disabled: [],\r\n items: [],\r\n } as StepsProps,\r\n p,\r\n );\r\n\r\n const current = () => p.current?.() ?? 0;\r\n\r\n const resolvedItems = createMemo((): StepItem[] => {\r\n if (p.items && p.items.length > 0) return p.items;\r\n if (p.total && p.total > 0)\r\n return Array.from({ length: p.total }, (_, i) => ({ title: `Step ${i + 1}` }));\r\n return [];\r\n });\r\n\r\n const handleClick = (index: number) => {\r\n p.setCurrent?.(index);\r\n p.onChange?.(index);\r\n };\r\n\r\n const shared = createMemo(\r\n (): InternalProps => ({\r\n items: resolvedItems(),\r\n current: current(),\r\n disabled: p.disabled ?? [],\r\n activeIndex: p.activeIndex,\r\n isVertical: p.orientation === 'vertical',\r\n colorClass: getColor(p.color, 'color-primary'),\r\n onStepClick: handleClick,\r\n class: p.class,\r\n }),\r\n );\r\n\r\n return (\r\n <Show\r\n when={p.type === 'navigation'}\r\n fallback={\r\n <Show when={p.type === 'dot'} fallback={<TypeDefault {...shared()} />}>\r\n <TypeDot {...shared()} />\r\n </Show>\r\n }\r\n >\r\n <TypeNavigation {...shared()} />\r\n </Show>\r\n );\r\n};\r\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"swap.js","names":["SolidComponent","cn","Component","SwapType","item1","item2","effect","onChange","value","Swap","p","_el$","_tmpl$","_el$2","firstChild","_el$3","nextSibling","_el$4","addEventListener","e","target","checked","_$insert","Element","_$effect","_$className"],"sources":["../../../src/components/swap/swap.tsx"],"sourcesContent":["import { SolidComponent } from '@/type';\r\nimport { cn } from '@/utils/cn';\r\nimport { Component } from 'solid-js';\r\n\r\ntype SwapType = {\r\n item1: SolidComponent;\r\n item2: SolidComponent;\r\n effect?: 'rotate' | 'flip' | 'none';\r\n onChange?: (value: boolean) => void;\r\n};\r\nexport const Swap: Component<SwapType> = p => {\r\n return (\r\n <label\r\n class={cn(\r\n 'swap',\r\n p.effect === 'flip' ? 'swap-flip' : p.effect === 'rotate' ? 'swap-rotate' : '',\r\n )}\r\n >\r\n <input\r\n type=\"checkbox\"\r\n onChange={e => {\r\n p?.onChange?.(e.target.checked);\r\n }}\r\n />\r\n <div class=\"swap-on\">{p.item1 as Element}</div>\r\n <div class=\"swap-off\">{p.item2 as Element}</div>\r\n <div class=\"swap-indeterminate\"></div>\r\n </label>\r\n );\r\n};\r\n"],"mappings":"+OAUaS,EAA4BC,QACvC,CAAA,IAAAC,EAAAC,GAAA,CAAAC,EAAAF,EAAAG,WAAAC,EAAAF,EAAAG,YAAAC,EAAAF,EAAAC,YAKK,OALLH,EAAAK,iBAAA,SASgBC,GAAK,CACbT,GAAGH,WAAWY,EAAEC,OAAOC,QAAQ,EAChC,CAAAC,EAAAP,MAEmBL,EAAEN,MAAgB,CAAAkB,EAAAL,MACjBP,EAAEL,MAAgB,CAAAmB,MAAAC,EAAAd,EAZlCV,EACL,OACAS,EAAEJ,SAAW,OAAS,YAAcI,EAAEJ,SAAW,SAAW,cAAgB,GAC7E,CAAA,CAAA,CAAAK,KAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"switch.js","names":["cn","cva","VariantProps","Component","createEffect","createSignal","mergeProps","Show","SwitchProps","variants","size","xs","sm","md","lg","xl","color","primary","secondary","accent","neutral","info","success","warning","error","SwitchVariantProps","Switch","props","p","className","defaultChecked","disabled","loading","const","internalChecked","setInternalChecked","isControlled","checked","undefined","syncControlledChecked","mergedDisabled","handleClick","e","MouseEvent","newChecked","onClick","onChange","_el$","_tmpl$2","_el$2","firstChild","$$click","_$insert","_$createComponent","when","children","_el$3","_tmpl$","IconLoading","_$effect","_p$","_v$","_v$2","_v$3","class","root","_v$4","_$setAttribute","t","a","_$className","o","_tmpl$3","_$delegateEvents"],"sources":["../../../src/components/switch/switch.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport { Component, createEffect, createSignal, mergeProps, Show } from 'solid-js';\r\nimport type { SwitchProps } from './switch.types';\r\n\r\nconst variants = cva('', {\r\n variants: {\r\n size: {\r\n xs: 'h-4 w-7',\r\n sm: 'h-5 w-9',\r\n md: 'h-6 w-11',\r\n lg: 'h-7 w-14',\r\n xl: 'h-8 w-16',\r\n },\r\n color: {\r\n primary: 'bg-primary text-primary',\r\n secondary: 'bg-secondary text-secondary',\r\n accent: 'bg-accent text-accent',\r\n neutral: 'bg-neutral text-neutral',\r\n info: 'bg-info text-info',\r\n success: 'bg-success text-success',\r\n warning: 'bg-warning text-warning',\r\n error: 'bg-error text-error',\r\n },\r\n },\r\n});\r\n\r\nexport type SwitchVariantProps = VariantProps<typeof variants>;\r\n\r\nexport const Switch: Component<SwitchProps> = props => {\r\n const p = mergeProps(\r\n {\r\n className: '',\r\n defaultChecked: false,\r\n disabled: false,\r\n loading: false,\r\n size: 'md' as const,\r\n color: 'primary' as const,\r\n },\r\n props,\r\n );\r\n\r\n const [internalChecked, setInternalChecked] = createSignal(p.defaultChecked);\r\n\r\n const isControlled = () => p.checked !== undefined;\r\n const checked = () => (isControlled() ? p.checked! : internalChecked());\r\n\r\n createEffect(function syncControlledChecked() {\r\n if (isControlled()) {\r\n setInternalChecked(p.checked!);\r\n }\r\n });\r\n\r\n const mergedDisabled = () => p.disabled || p.loading;\r\n\r\n const handleClick = (e: MouseEvent) => {\r\n if (mergedDisabled()) return;\r\n\r\n const newChecked = !checked();\r\n\r\n if (!isControlled()) {\r\n setInternalChecked(newChecked);\r\n }\r\n\r\n p.onClick?.(newChecked);\r\n p.onChange?.(newChecked);\r\n };\r\n\r\n return (\r\n <button\r\n type=\"button\"\r\n role=\"switch\"\r\n aria-checked={checked()}\r\n disabled={mergedDisabled()}\r\n class={cn(\r\n 'sui_switch @container relative flex cursor-pointer items-center rounded-full border-2 border-transparent p-px',\r\n variants({ size: p.size, color: p.color }),\r\n 'transition duration-400',\r\n !checked() && 'bg-gray-300',\r\n mergedDisabled() && 'cursor-not-allowed opacity-50',\r\n p.class?.root,\r\n )}\r\n onClick={handleClick}\r\n >\r\n <div\r\n class={cn(\r\n 'sui_thumb aspect-square h-full rounded-full bg-white transition-transform duration-400 ease-in-out',\r\n\r\n checked() && 'translate-x-[calc(100cqw-100%)]',\r\n )}\r\n >\r\n <Show when={p.loading}>\r\n <span class=\"flex size-full animate-spin\">\r\n <IconLoading />\r\n </span>\r\n </Show>\r\n </div>\r\n </button>\r\n );\r\n};\r\n\r\nconst IconLoading = () => {\r\n return (\r\n <svg class=\"size-full\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\r\n <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"#ccc\" stroke-width=\"4\"></circle>\r\n <path\r\n class=\"opacity-90\"\r\n fill=\"currentColor\"\r\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\r\n ></path>\r\n </svg>\r\n );\r\n};\r\n"],"mappings":"8tBAKMS,EAAWR,EAAI,GAAI,CACvBQ,SAAU,CACRC,KAAM,CACJC,GAAI,UACJC,GAAI,UACJC,GAAI,WACJC,GAAI,WACJC,GAAI,WACL,CACDC,MAAO,CACLC,QAAS,0BACTC,UAAW,8BACXC,OAAQ,wBACRC,QAAS,0BACTC,KAAM,oBACNC,QAAS,0BACTC,QAAS,0BACTC,MAAO,sBACT,CACF,CACD,CAAC,CAIWE,EAAiCC,GAAS,CACrD,IAAMC,EAAItB,EACR,CACEuB,UAAW,GACXC,eAAgB,GAChBC,SAAU,GACVC,QAAS,GACTtB,KAAM,KACNM,MAAO,UACR,CACDW,EACD,CAEK,CAACO,EAAiBC,GAAsB9B,EAAauB,EAAEE,eAAe,CAEtEM,MAAqBR,EAAES,UAAYC,IAAAA,GACnCD,MAAiBD,GAAc,CAAGR,EAAES,QAAWH,GAAkB,CAEvE9B,EAAa,UAAiC,CACxCgC,GAAc,EAChBD,EAAmBP,EAAES,QAAS,EAEhC,CAEF,IAAMG,MAAuBZ,EAAEG,UAAYH,EAAEI,QAEvCS,EAAeC,GAAkB,CACrC,GAAIF,GAAgB,CAAE,OAEtB,IAAMI,EAAa,CAACP,GAAS,CAExBD,GAAc,EACjBD,EAAmBS,EAAW,CAGhChB,EAAEiB,UAAUD,EAAW,CACvBhB,EAAEkB,WAAWF,EAAW,EAG1B,WAAA,CAAA,IAAAG,EAAAC,GAAA,CAAAC,EAAAF,EAAAG,WAqBO,MArBPH,GAAAI,QAcaV,EAAWW,EAAAH,EAAAI,EASjB9C,EAAI,CAAA,IAAC+C,MAAI,CAAA,OAAE1B,EAAEI,SAAO,IAAAuB,UAAA,CAAA,IAAAC,EAAAC,GAAA,CAEL,OAFKL,EAAAI,EAAAH,EAEhBK,EAAW,EAAA,CAAA,CAAA,CAAAF,GAAA,CAAA,CAAA,CAAAG,EAAAC,GAAA,CAAA,IAAAC,EArBJxB,GAAS,CAAAyB,EACbtB,GAAgB,CAAAuB,EACnB/D,EACL,gHACAS,EAAS,CAAEC,KAAMkB,EAAElB,KAAMM,MAAOY,EAAEZ,MAAO,CAAC,CAC1C,0BACA,CAACqB,GAAS,EAAI,cACdG,GAAgB,EAAI,gCACpBZ,EAAEoC,OAAOC,KACV,CAAAC,EAIQlE,EACL,qGAEAqC,GAAS,EAAI,kCACd,CAAA,OAAAwB,IAAAD,EAAAlB,GAAAyB,EAAApB,EAAA,eAAAa,EAAAlB,EAAAmB,EAAA,CAAAC,IAAAF,EAAAQ,IAAArB,EAAAhB,SAAA6B,EAAAQ,EAAAN,GAAAC,IAAAH,EAAAS,GAAAC,EAAAvB,EAAAa,EAAAS,EAAAN,EAAA,CAAAG,IAAAN,EAAAW,GAAAD,EAAArB,EAAAW,EAAAW,EAAAL,EAAA,CAAAN,GAAA,CAAAlB,EAAAJ,IAAAA,GAAA8B,EAAA9B,IAAAA,GAAA+B,EAAA/B,IAAAA,GAAAiC,EAAAjC,IAAAA,GAAA,CAAA,CAAAS,KAAA,EAYHW,MACJc,GAAA,CAUAC,EAAA,CAAA,QAAA,CAAA"}
|