solid-tom-ui 1.0.8 → 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/dist/README.md +246 -0
- package/dist/components/avatar/index.d.ts +3 -0
- package/{components → dist/components}/avatar/index.d.ts.map +1 -1
- package/dist/components/button/index.d.ts +3 -0
- package/{components → dist/components}/button/index.d.ts.map +1 -1
- package/dist/components/collapse/index.d.ts +3 -0
- package/{components → dist/components}/collapse/index.d.ts.map +1 -1
- 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/input/index.d.ts +3 -0
- package/dist/components/input/index.d.ts.map +1 -0
- package/dist/components/menu/index.d.ts +4 -0
- package/{components → dist/components}/menu/index.d.ts.map +1 -1
- 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/rating/index.d.ts +3 -0
- package/{components → dist/components}/rating/index.d.ts.map +1 -1
- package/dist/components/slider/index.d.ts +3 -0
- package/{components → dist/components}/slider/index.d.ts.map +1 -1
- package/{components → dist/components}/tour/tour.d.ts.map +1 -1
- package/{components → dist/components}/tour/tour.js +1 -1
- package/{components → dist/components}/tour/tour.js.map +1 -1
- package/{components → dist/components}/z-index/z-index.types.js.map +1 -1
- 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/package.json +97 -9
- package/components/avatar/index.d.ts +0 -2
- package/components/button/index.d.ts +0 -2
- package/components/collapse/index.d.ts +0 -2
- package/components/float-button/index.d.ts +0 -2
- package/components/input/index.d.ts +0 -2
- package/components/input/index.d.ts.map +0 -1
- package/components/menu/index.d.ts +0 -4
- package/components/rating/index.d.ts +0 -2
- package/components/slider/index.d.ts +0 -2
- package/macos.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.js.map +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.js.map +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/breadcrumb.js.map +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.js.map +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.js.map +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.js.map +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/checkbox.js.map +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.js.map +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.js.map +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.store.js.map +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.js.map +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.js.map +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.store.js.map +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.js.map +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/hover-3d-image.js.map +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/image-preview.js.map +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.js.map +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/input.utils.js.map +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-color.js.map +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-date.js.map +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-number.js.map +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-otp.js.map +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-password.js.map +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-radio.js.map +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-range.js.map +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-text.js.map +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}/input/variants/input-textarea.js.map +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}/loading/loading.js.map +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.js.map +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}/menu/menu.js.map +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/modal.js.map +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}/modal/modalContext.js.map +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.js.map +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.js.map +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.js.map +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.js.map +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.js.map +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}/skeleton/skeleton.js.map +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.js.map +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.js.map +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}/steps/steps.js.map +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}/swap/swap.js.map +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.js.map +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.js.map +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.js.map +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.js.map +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/ErrorIcon.js.map +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/IconCircle.js.map +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/InfoIcon.js.map +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/LoaderIcon.js.map +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/SuccessIcon.js.map +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/WarningIcon.js.map +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.js.map +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.store.js.map +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.js.map +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.js.map +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.context.js.map +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.js.map +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.store.js.map +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}/cn.js.map +0 -0
- /package/{utils → dist/utils}/element-tracker.js +0 -0
- /package/{utils → dist/utils}/element-tracker.js.map +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}/helper.js.map +0 -0
- /package/{utils → dist/utils}/hoc.js +0 -0
- /package/{utils → dist/utils}/hoc.js.map +0 -0
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
## COMPONENT IDENTITY
|
|
2
|
+
- **Import**: `import { Skeleton } from 'solid-tom-ui';`
|
|
3
|
+
- **Export**: `Skeleton` (named export), `SkeletonProps` (type export)
|
|
4
|
+
- **Framework**: SolidJS
|
|
5
|
+
- **Purpose**: Loading placeholder that replaces real content with an animated shimmer block; when `enabled` is `false`, transparently renders `children`
|
|
6
|
+
|
|
7
|
+
> Always **wrap** the real content inside `<Skeleton>` — do not render them side-by-side.
|
|
8
|
+
|
|
9
|
+
## Props — Discriminated Union
|
|
10
|
+
|
|
11
|
+
`SkeletonProps` is a **discriminated union** on the `type` field. The `type` prop is **required** and determines which other props are available.
|
|
12
|
+
|
|
13
|
+
### `type="layout"` — Preset complex layouts
|
|
14
|
+
|
|
15
|
+
```ts
|
|
16
|
+
{
|
|
17
|
+
type: 'layout';
|
|
18
|
+
variant?: LayoutVariant;
|
|
19
|
+
enabled: boolean;
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
### `type="shape"` — Preset simple shapes
|
|
24
|
+
|
|
25
|
+
```ts
|
|
26
|
+
{
|
|
27
|
+
type: 'shape';
|
|
28
|
+
variant?: ShapeVariant;
|
|
29
|
+
enabled: boolean;
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### `type="custom"` — Fully custom via class
|
|
34
|
+
|
|
35
|
+
```ts
|
|
36
|
+
{
|
|
37
|
+
type: 'custom';
|
|
38
|
+
enabled: boolean;
|
|
39
|
+
class: string; // required — defines size, shape, and border radius
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
> **Note:** `class` is only available on `type="custom"`. `variant` is only available on `type="layout"` and `type="shape"`.
|
|
44
|
+
|
|
45
|
+
## `enabled` Prop
|
|
46
|
+
|
|
47
|
+
`enabled` is the loading toggle:
|
|
48
|
+
|
|
49
|
+
- `enabled={true}` → renders the skeleton placeholder
|
|
50
|
+
- `enabled={false}` → renders `children` (real content)
|
|
51
|
+
|
|
52
|
+
## Layout Variants
|
|
53
|
+
|
|
54
|
+
Used with `type="layout"`. Each variant renders a multi-element composition:
|
|
55
|
+
|
|
56
|
+
| Variant | Description |
|
|
57
|
+
| ----------------- | ---------------------------------------------------- |
|
|
58
|
+
| `cardImage` | Image block on top + title + 3 text lines below |
|
|
59
|
+
| `cardHorizontal` | Square thumbnail on the left + text lines on the right |
|
|
60
|
+
| `profile` | Circular avatar (centered) + name + description lines |
|
|
61
|
+
| `article` | Large title + subtitle + 5-line paragraph |
|
|
62
|
+
| `feedItem` | Small circular avatar on the left + 2 text lines |
|
|
63
|
+
| `stat` | Small label + large number + small sublabel |
|
|
64
|
+
|
|
65
|
+
## Shape Variants
|
|
66
|
+
|
|
67
|
+
Used with `type="shape"`. Each variant renders a single skeleton block:
|
|
68
|
+
|
|
69
|
+
| Variant | Dimensions |
|
|
70
|
+
| --------------- | --------------------------------- |
|
|
71
|
+
| `rectangle` | `h-32 w-full rounded-lg` |
|
|
72
|
+
| `square` | `size-32 rounded-lg` |
|
|
73
|
+
| `circle` | `size-16 rounded-full` |
|
|
74
|
+
| `textLine` | `h-4 w-full rounded` |
|
|
75
|
+
| `textParagraph` | 4 lines of varying width |
|
|
76
|
+
|
|
77
|
+
## Usage Examples
|
|
78
|
+
|
|
79
|
+
### Layout skeleton
|
|
80
|
+
|
|
81
|
+
```tsx
|
|
82
|
+
<Skeleton type="layout" variant="cardImage" enabled={isLoading()}>
|
|
83
|
+
{/* Real content rendered when enabled=false */}
|
|
84
|
+
<div class="flex flex-col gap-2">
|
|
85
|
+
<img src={post.image} class="h-40 w-full rounded-lg object-cover" />
|
|
86
|
+
<h2 class="font-semibold">{post.title}</h2>
|
|
87
|
+
<p class="text-sm text-base-content/70">{post.description}</p>
|
|
88
|
+
</div>
|
|
89
|
+
</Skeleton>
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Shape skeleton
|
|
93
|
+
|
|
94
|
+
```tsx
|
|
95
|
+
<Skeleton type="shape" variant="circle" enabled={isLoading()}>
|
|
96
|
+
<img src={user.avatar} class="size-16 rounded-full" alt={user.name} />
|
|
97
|
+
</Skeleton>
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Custom skeleton
|
|
101
|
+
|
|
102
|
+
The `class` prop is applied directly to a `<div class="skeleton ...">`. Define size, shape, and rounding:
|
|
103
|
+
|
|
104
|
+
```tsx
|
|
105
|
+
<Skeleton type="custom" enabled={isLoading()} class="h-6 w-32 rounded-full">
|
|
106
|
+
<span class="text-sm font-medium">{label}</span>
|
|
107
|
+
</Skeleton>
|
|
108
|
+
|
|
109
|
+
<Skeleton type="custom" enabled={isLoading()} class="size-20 rounded-2xl">
|
|
110
|
+
<img src={thumbnail} class="size-20 rounded-2xl" />
|
|
111
|
+
</Skeleton>
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
### Async data loading pattern
|
|
115
|
+
|
|
116
|
+
```tsx
|
|
117
|
+
const [data, setData] = createSignal(null);
|
|
118
|
+
const [loading, setLoading] = createSignal(true);
|
|
119
|
+
|
|
120
|
+
onMount(async () => {
|
|
121
|
+
const result = await fetchUser();
|
|
122
|
+
setData(result);
|
|
123
|
+
setLoading(false);
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
// In JSX:
|
|
127
|
+
<Skeleton type="layout" variant="profile" enabled={loading()}>
|
|
128
|
+
<Show when={data()}>
|
|
129
|
+
{user => (
|
|
130
|
+
<div class="flex flex-col items-center gap-2">
|
|
131
|
+
<img src={user().avatar} class="size-20 rounded-full" />
|
|
132
|
+
<p class="font-semibold">{user().name}</p>
|
|
133
|
+
</div>
|
|
134
|
+
)}
|
|
135
|
+
</Show>
|
|
136
|
+
</Skeleton>
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Feed list with multiple skeleton items
|
|
140
|
+
|
|
141
|
+
```tsx
|
|
142
|
+
<For each={loading() ? Array(5).fill(null) : posts()}>
|
|
143
|
+
{(post, i) => (
|
|
144
|
+
<Skeleton type="layout" variant="feedItem" enabled={loading()}>
|
|
145
|
+
<FeedItem post={post} />
|
|
146
|
+
</Skeleton>
|
|
147
|
+
)}
|
|
148
|
+
</For>
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
## Animation & Styling
|
|
152
|
+
|
|
153
|
+
The `.skeleton` class (from `skeleton.daisy.css`) applies:
|
|
154
|
+
- Background: `var(--color-base-300)`
|
|
155
|
+
- Animated sweep: a `105deg` gradient from `base-100` that slides across via `background-position-x` at `1.8s ease-in-out infinite`
|
|
156
|
+
- Respects `prefers-reduced-motion`: slows animation to `15s` transition duration when reduced motion is preferred
|
|
157
|
+
- Default border radius: `var(--radius-box)`
|
|
158
|
+
|
|
159
|
+
The animation is purely CSS — no JavaScript timers involved.
|
|
160
|
+
|
|
161
|
+
## Render Structure
|
|
162
|
+
|
|
163
|
+
```
|
|
164
|
+
<Show when={enabled} fallback={children}>
|
|
165
|
+
{type === 'custom'
|
|
166
|
+
? <div class={cn('skeleton', class)} />
|
|
167
|
+
: <SkeletonDisplay type variant />
|
|
168
|
+
}
|
|
169
|
+
</Show>
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
When `enabled=true`, `children` are never mounted. When `enabled=false`, the skeleton is never mounted. There is no overlap.
|
|
173
|
+
|
|
174
|
+
## Class Slots
|
|
175
|
+
|
|
176
|
+
`Skeleton` uses `class` only for `type="custom"` (defines size + shape of the placeholder div). For `type="layout"` and `type="shape"`, there is no `class` prop — the shape is fully determined by `variant`.
|
|
177
|
+
|
|
178
|
+
No `Partial<Record<...>>` slot object — this component renders preset layouts without sub-element targeting.
|
|
179
|
+
|
|
180
|
+
> **CSS encoding**: internal CSS classes use short encoded names (e.g. `sk01`, `sk02`) per project convention.
|
|
181
|
+
|
|
182
|
+
## Common Mistakes
|
|
183
|
+
|
|
184
|
+
| Mistake | Fix |
|
|
185
|
+
| --- | --- |
|
|
186
|
+
| Using `type="custom"` without `class` | `class` is required for `type="custom"` — TypeScript will error |
|
|
187
|
+
| Placing real content alongside Skeleton | Wrap real content **inside** Skeleton as `children` |
|
|
188
|
+
| Omitting `type` prop | `type` is required — one of `'layout'`, `'shape'`, `'custom'` |
|
|
189
|
+
| Using `variant` with `type="custom"` | `variant` is not available on `type="custom"` — use `class` instead |
|
|
190
|
+
| Expecting skeleton animation in reduced-motion mode | Animation slows to ~15s; design should still look acceptable statically |
|
|
191
|
+
|
|
192
|
+
> **Unique IDs**: if this component needs to generate HTML `id` attributes, always use `createUniqueId()` from `solid-js` — never `Math.random()` or `Date.now()`.
|
|
@@ -0,0 +1,404 @@
|
|
|
1
|
+
## COMPONENT IDENTITY
|
|
2
|
+
- **Import**: `import { Slider } from 'solid-tom-ui';`
|
|
3
|
+
- **Exports**: `Slider` (named export), `SliderProps`, `SliderTooltipProps` (type exports)
|
|
4
|
+
- **Framework**: SolidJS
|
|
5
|
+
- **Purpose**: Range slider input with optional tooltip, marks, step control, and controlled/uncontrolled modes
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## PROP REFERENCE (`SliderProps`)
|
|
10
|
+
|
|
11
|
+
| Prop | Type | Default | Description |
|
|
12
|
+
| -------------- | --------------------------------------------------------------------------------------------------- | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
13
|
+
| `value` | `number \| [number, number]` | — | Controlled value. Single number for normal mode; `[min, max]` tuple for range mode. Must update via `onChange` to reflect changes. |
|
|
14
|
+
| `defaultValue` | `number \| [number, number]` | `min` or `[min, max]` | Initial value for uncontrolled mode. |
|
|
15
|
+
| `min` | `number` | `0` | Minimum value of the slider. |
|
|
16
|
+
| `max` | `number` | `100` | Maximum value of the slider. |
|
|
17
|
+
| `step` | `number \| null` | `1` | Step increment. Set to `null` to disable stepping — value snaps to nearest `marks` key instead. |
|
|
18
|
+
| `range` | `boolean` | `false` | Enable range mode. Renders two thumbs. Value becomes `[number, number]`. |
|
|
19
|
+
| `color` | `BaseColorProps` | `'primary'` | Color theme applied via CSS custom property `--color`. |
|
|
20
|
+
| `disabled` | `boolean` | `false` | Disable all interactions. Adds `sui-slider-disabled` class; `opacity: 0.5`, cursor `not-allowed`. |
|
|
21
|
+
| `reverse` | `boolean` | `false` | Reverse the direction (right-to-left for horizontal, top-to-bottom for vertical). |
|
|
22
|
+
| `orientation` | `'horizontal' \| 'vertical'` | `'horizontal'` | Layout axis. Vertical slider has `min-height: 200px` and `width: 32px`. |
|
|
23
|
+
| `dots` | `boolean` | `false` | Show step dot markers on the rail at every `step` interval. Requires `step` to be a positive number. |
|
|
24
|
+
| `included` | `boolean` | `true` | If `true`, renders a colored track between `min` and current value (or between the two thumbs in range mode). If `false`, hides the track. |
|
|
25
|
+
| `marks` | `Record<number, string \| { label: string; style?: JSX.CSSProperties }>` | — | Tick marks at specific values. Each key is a value (number), each value is a label string or `{ label, style }` object. |
|
|
26
|
+
| `tooltip` | `SliderTooltipProps` | `{ hidden: false }` | Tooltip configuration for thumb(s). |
|
|
27
|
+
| `onChange` | `(value: number \| [number\| [number, number]) => void` | — | Fires on every value change during drag, click, and keyboard interaction. In range mode, always receives `[number, number]`. |
|
|
28
|
+
| `class` | `Partial<Record<'root' \| 'dot' \| 'handle' \| 'mark' \| 'markText' \| 'rail' \| 'track', string>>` | — | Merge custom classes onto specific structural elements. |
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## `SliderTooltipProps`
|
|
33
|
+
|
|
34
|
+
Extends `Partial<Omit<TooltipProps, 'children' | 'content'>>` with:
|
|
35
|
+
|
|
36
|
+
| Field | Type | Default | Description |
|
|
37
|
+
| ----------- | ----------------------------------------------- | -------------------------- | ----------------------------------------------------------------------------------------------- |
|
|
38
|
+
| `hidden` | `boolean` | `false` | Hide the tooltip entirely for all thumbs. |
|
|
39
|
+
| `forceOpen` | `boolean` | — | `true` → always show tooltip; `false` → always hide; `undefined` → show on hover/drag/focus. |
|
|
40
|
+
| `formatter` | `((value: number) => string \| number) \| null` | — | Custom formatter for the tooltip label. `null` → renders empty string (effectively hides text). |
|
|
41
|
+
| `position` | `TooltipVariantsProps['position']` | `'top'` (H), `'right'` (V) | Tooltip placement. Overridden automatically based on orientation if not set. |
|
|
42
|
+
| `color` | `BaseColorProps` | — | Tooltip color theme. |
|
|
43
|
+
| `class` | `{ root?: string; content?: string }` | — | Custom classes on tooltip root and content. |
|
|
44
|
+
|
|
45
|
+
> `forceOpen` on `SliderTooltipProps` maps to the Tooltip's `forceOpen` prop, **not** to a visibility signal. `hidden` takes precedence over `forceOpen`.
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## BEHAVIORAL RULES (inferred from implementation)
|
|
50
|
+
|
|
51
|
+
### Controlled vs Uncontrolled
|
|
52
|
+
|
|
53
|
+
- **Uncontrolled**: omit `value`. Internal `internalValue` signal manages state. `defaultValue` sets initial state once.
|
|
54
|
+
- **Controlled**: supply `value`. Component syncs `internalValue` reactively via `createEffect` on `p.value`. **You must update `value` in `onChange`** to reflect user interactions.
|
|
55
|
+
- `currentValue` memo always reads `p.value` when defined, falling back to `internalValue`.
|
|
56
|
+
|
|
57
|
+
### Range Mode
|
|
58
|
+
|
|
59
|
+
- Enabled via `range={true}`.
|
|
60
|
+
- `value` and `defaultValue` must be `[number, number]` tuples.
|
|
61
|
+
- Two thumbs rendered (index `0` = left/bottom, index `1` = right/top).
|
|
62
|
+
- Thumbs cannot cross: dragging thumb 0 past thumb 1 clamps it to thumb 1's value, and vice versa.
|
|
63
|
+
- Rail click snaps to the **closest** thumb.
|
|
64
|
+
- In non-range mode, only thumb index `1` is rendered; thumb index `0` is hidden via `<Show when={isRange()}>`.
|
|
65
|
+
|
|
66
|
+
### Value Computation
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
percent → value:
|
|
70
|
+
actualPercent = reverse ? 100 - percent : percent
|
|
71
|
+
rawValue = min + (actualPercent / 100) * (max - min)
|
|
72
|
+
if step !== null → snap: Math.round(rawValue / step) * step
|
|
73
|
+
if step === null → snap to nearest marks key (or min/max)
|
|
74
|
+
clamp to [min, max]
|
|
75
|
+
|
|
76
|
+
value → percent:
|
|
77
|
+
percent = ((value - min) / (max - min)) * 100
|
|
78
|
+
if reverse → 100 - percent
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### Step = null (mark-only snapping)
|
|
82
|
+
|
|
83
|
+
- When `step={null}`, value only snaps to defined `marks` keys plus `min` and `max`.
|
|
84
|
+
- `dots` prop is ignored when `step` is `null` or `<= 0`.
|
|
85
|
+
|
|
86
|
+
### Track rendering (`included`)
|
|
87
|
+
|
|
88
|
+
```
|
|
89
|
+
included=true + non-range: track starts at 0% (or 100% if reversed) and ends at value%
|
|
90
|
+
included=true + range: track spans from v0% to v1%
|
|
91
|
+
included=false: <Show when={p.included !== false}> → no track rendered
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
### Tooltip visibility logic
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
tooltip.hidden === true → always hidden (Tooltip hidden prop)
|
|
98
|
+
tooltip.forceOpen === true → always shown
|
|
99
|
+
tooltip.forceOpen === false → always hidden
|
|
100
|
+
tooltip.forceOpen undefined → shown when: activeThumb === thumbIndex OR hoveredThumb === thumbIndex
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Hover triggers: `onMouseEnter` / `onFocus` → `setHoveredThumb(index)`.
|
|
104
|
+
Drag triggers: `onMouseDown` / `onTouchStart` → `setActiveThumb(index)`.
|
|
105
|
+
|
|
106
|
+
### Drag mechanics
|
|
107
|
+
|
|
108
|
+
- `onMouseDown` / `onTouchStart` on a thumb attaches global `mousemove` / `touchmove` listeners to `document`.
|
|
109
|
+
- Listeners removed on `mouseup` / `touchend`.
|
|
110
|
+
- `activeThumb` signal is set during drag, cleared on release.
|
|
111
|
+
- Prevents default to stop text selection during drag.
|
|
112
|
+
|
|
113
|
+
### Vertical orientation
|
|
114
|
+
|
|
115
|
+
- Rail and track swap `width`/`height` roles.
|
|
116
|
+
- Position uses `bottom: %` instead of `left: %`.
|
|
117
|
+
- Tooltip defaults to `position="right"`.
|
|
118
|
+
- Handle wrapper uses `transform: translate(-50%, 50%)` (vs `translate(-50%, -50%)` horizontal).
|
|
119
|
+
- Container: `width: 32px`, `min-height: 200px`, `flex-direction: column`.
|
|
120
|
+
|
|
121
|
+
### Marks rendering
|
|
122
|
+
|
|
123
|
+
- Each mark renders two elements: a tick `div.sui-slider-mark` and a label `span.sui-slider-mark-text`.
|
|
124
|
+
- Active styling (colored tick + label) applied when the mark value falls within `isInRange(value)`.
|
|
125
|
+
- Custom `style` from mark object is merged with position style on the label span.
|
|
126
|
+
|
|
127
|
+
### Dots rendering
|
|
128
|
+
|
|
129
|
+
- Dots generated from `min` to `max` stepping by `step`.
|
|
130
|
+
- Each dot is a `div.sui-slider-dot` positioned absolutely on the rail.
|
|
131
|
+
- Active dot (colored border) when the dot value is within the current range (`isInRange`).
|
|
132
|
+
- Dots are not rendered if `dots=false`, `step=null`, or `step <= 0`.
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## USAGE PATTERNS
|
|
137
|
+
|
|
138
|
+
### 1. Minimal uncontrolled
|
|
139
|
+
|
|
140
|
+
```tsx
|
|
141
|
+
<Slider />
|
|
142
|
+
// Renders horizontal slider, 0–100, default value = 0
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### 2. Controlled with state
|
|
146
|
+
|
|
147
|
+
```tsx
|
|
148
|
+
const [val, setVal] = createSignal(40);
|
|
149
|
+
|
|
150
|
+
<Slider value={val()} onChange={v => setVal(v as number)} />;
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### 3. Range slider (two thumbs)
|
|
154
|
+
|
|
155
|
+
```tsx
|
|
156
|
+
const [range, setRange] = createSignal<[number, number]>([20, 70]);
|
|
157
|
+
|
|
158
|
+
<Slider range value={range()} onChange={v => setRange(v as [number, number])} />;
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### 4. Custom min / max / step
|
|
162
|
+
|
|
163
|
+
```tsx
|
|
164
|
+
<Slider min={0} max={1000} step={50} defaultValue={200} />
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
### 5. With marks
|
|
168
|
+
|
|
169
|
+
```tsx
|
|
170
|
+
<Slider
|
|
171
|
+
min={0}
|
|
172
|
+
max={100}
|
|
173
|
+
marks={{
|
|
174
|
+
0: '0°C',
|
|
175
|
+
25: '25°C',
|
|
176
|
+
50: { label: '50°C', style: { color: 'orange' } },
|
|
177
|
+
100: { label: '100°C', style: { color: 'red', fontWeight: 'bold' } },
|
|
178
|
+
}}
|
|
179
|
+
/>
|
|
180
|
+
```
|
|
181
|
+
|
|
182
|
+
### 6. Marks-only snapping (`step={null}`)
|
|
183
|
+
|
|
184
|
+
```tsx
|
|
185
|
+
<Slider step={null} marks={{ 0: 'Low', 50: 'Mid', 100: 'High' }} defaultValue={50} />
|
|
186
|
+
// Value only snaps to 0, 50, or 100
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
### 7. Show step dots
|
|
190
|
+
|
|
191
|
+
```tsx
|
|
192
|
+
<Slider min={0} max={10} step={1} dots />
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
### 8. Vertical orientation
|
|
196
|
+
|
|
197
|
+
```tsx
|
|
198
|
+
<div style={{ height: '300px' }}>
|
|
199
|
+
<Slider orientation="vertical" defaultValue={60} />
|
|
200
|
+
</div>
|
|
201
|
+
// Container must have explicit height for vertical slider to be visible
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
### 9. Reversed direction
|
|
205
|
+
|
|
206
|
+
```tsx
|
|
207
|
+
// Horizontal: value increases right-to-left
|
|
208
|
+
<Slider reverse defaultValue={30} />
|
|
209
|
+
|
|
210
|
+
// Vertical: value increases top-to-bottom
|
|
211
|
+
<Slider orientation="vertical" reverse defaultValue={30} />
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### 10. Always-visible tooltip
|
|
215
|
+
|
|
216
|
+
```tsx
|
|
217
|
+
<Slider defaultValue={50} tooltip={{ forceOpen: true }} />
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### 11. Custom tooltip formatter
|
|
221
|
+
|
|
222
|
+
```tsx
|
|
223
|
+
<Slider
|
|
224
|
+
min={0}
|
|
225
|
+
max={1}
|
|
226
|
+
step={0.01}
|
|
227
|
+
defaultValue={0.5}
|
|
228
|
+
tooltip={{ formatter: v => `${(v * 100).toFixed(0)}%` }}
|
|
229
|
+
/>
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
### 12. Hide tooltip
|
|
233
|
+
|
|
234
|
+
```tsx
|
|
235
|
+
// Method 1: hide via hidden
|
|
236
|
+
<Slider tooltip={{ hidden: true }} />
|
|
237
|
+
|
|
238
|
+
// Method 2: always-hidden via forceOpen=false
|
|
239
|
+
<Slider tooltip={{ forceOpen: false }} />
|
|
240
|
+
|
|
241
|
+
// Method 3: formatter returns empty (text hidden but tooltip still renders)
|
|
242
|
+
<Slider tooltip={{ formatter: null }} />
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
### 13. No track (included=false)
|
|
246
|
+
|
|
247
|
+
```tsx
|
|
248
|
+
<Slider included={false} defaultValue={40} />
|
|
249
|
+
// Only rail and thumb shown; no colored fill
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
### 14. Custom colors
|
|
253
|
+
|
|
254
|
+
```tsx
|
|
255
|
+
<Slider color="success" defaultValue={70} />
|
|
256
|
+
<Slider color="warning" defaultValue={50} />
|
|
257
|
+
<Slider color="error" defaultValue={30} />
|
|
258
|
+
```
|
|
259
|
+
|
|
260
|
+
### 15. Custom classes on elements
|
|
261
|
+
|
|
262
|
+
```tsx
|
|
263
|
+
<Slider
|
|
264
|
+
defaultValue={50}
|
|
265
|
+
class={{
|
|
266
|
+
root: 'my-4',
|
|
267
|
+
rail: 'rounded-full',
|
|
268
|
+
track: 'bg-linear-to-r from-green-400 to-blue-500',
|
|
269
|
+
handle: 'border-4',
|
|
270
|
+
mark: 'h-3',
|
|
271
|
+
markText: 'text-xs font-bold',
|
|
272
|
+
dot: 'border-2',
|
|
273
|
+
}}
|
|
274
|
+
/>
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
### 16. Disabled
|
|
278
|
+
|
|
279
|
+
```tsx
|
|
280
|
+
<Slider defaultValue={40} disabled />
|
|
281
|
+
// All interactions blocked; opacity 0.5; cursor not-allowed
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
### 17. Full-featured example
|
|
285
|
+
|
|
286
|
+
```tsx
|
|
287
|
+
const [val, setVal] = createSignal<[number, number]>([20, 80]);
|
|
288
|
+
|
|
289
|
+
<Slider
|
|
290
|
+
range
|
|
291
|
+
value={val()}
|
|
292
|
+
onChange={v => setVal(v as [number, number])}
|
|
293
|
+
min={0}
|
|
294
|
+
max={100}
|
|
295
|
+
step={5}
|
|
296
|
+
dots
|
|
297
|
+
marks={{ 0: 'Start', 50: 'Mid', 100: 'End' }}
|
|
298
|
+
tooltip={{ formatter: v => `${v}%`, forceOpen: true }}
|
|
299
|
+
color="primary"
|
|
300
|
+
class={{ root: 'my-6' }}
|
|
301
|
+
/>;
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
---
|
|
305
|
+
|
|
306
|
+
## CSS CLASSES (public API for customization)
|
|
307
|
+
|
|
308
|
+
| Class | Applied to |
|
|
309
|
+
| ----------------------------- | -------------------------------------------------- |
|
|
310
|
+
| `sui-slider` | Root `<div>` |
|
|
311
|
+
| `sui-slider-vertical` | Root `<div>` when `orientation='vertical'` |
|
|
312
|
+
| `sui-slider-disabled` | Root `<div>` when `disabled=true` |
|
|
313
|
+
| `sui-slider-rail` | Rail `<div>` (full track background) |
|
|
314
|
+
| `sui-slider-track` | Colored fill `<div>` (inside rail) |
|
|
315
|
+
| `sui-slider-handle-wrapper` | Absolutely-positioned wrapper per thumb |
|
|
316
|
+
| `sui-slider-handle` | Circular thumb `<div>` |
|
|
317
|
+
| `sui-slider-handle-active` | Thumb when being dragged (`activeThumb === index`) |
|
|
318
|
+
| `sui-slider-dot` | Step dot `<div>` |
|
|
319
|
+
| `sui-slider-dot-active` | Dot within the active range |
|
|
320
|
+
| `sui-slider-mark` | Mark tick `<div>` |
|
|
321
|
+
| `sui-slider-mark-active` | Tick within the active range |
|
|
322
|
+
| `sui-slider-mark-text` | Mark label `<span>` |
|
|
323
|
+
| `sui-slider-mark-text-active` | Label within the active range |
|
|
324
|
+
|
|
325
|
+
Use `class={{ root, rail, track, handle, dot, mark, markText }}` prop to append custom classes.
|
|
326
|
+
|
|
327
|
+
---
|
|
328
|
+
|
|
329
|
+
## CSS CUSTOM PROPERTIES (theming)
|
|
330
|
+
|
|
331
|
+
All set on `.sui-slider` and overridable via CSS:
|
|
332
|
+
|
|
333
|
+
| Variable | Default | Role |
|
|
334
|
+
| ---------------------------- | ---------------------------------------------- | -------------------------- |
|
|
335
|
+
| `--slider-rail-bg` | `oklch(0.9 0 0)` | Rail background color |
|
|
336
|
+
| `--slider-track-bg` | `var(--color)` | Track fill color |
|
|
337
|
+
| `--slider-track-bg-hover` | `color-mix(in oklch, var(--color) 80%, black)` | Track + handle hover color |
|
|
338
|
+
| `--slider-handle-bg` | `#fff` | Thumb background |
|
|
339
|
+
| `--slider-handle-border` | `var(--color)` | Thumb border color |
|
|
340
|
+
| `--slider-handle-size` | `14px` | Thumb diameter |
|
|
341
|
+
| `--slider-rail-height` | `4px` | Rail/track thickness |
|
|
342
|
+
| `--slider-dot-size` | `8px` | Dot diameter |
|
|
343
|
+
| `--slider-mark-color` | `oklch(0.6 0 0)` | Inactive mark text color |
|
|
344
|
+
| `--slider-mark-active-color` | `var(--color)` | Active mark text color |
|
|
345
|
+
|
|
346
|
+
`--color` is injected by `getColor(p.color)` utility from the design system color palette.
|
|
347
|
+
|
|
348
|
+
---
|
|
349
|
+
|
|
350
|
+
## ACCESSIBILITY
|
|
351
|
+
|
|
352
|
+
- Each thumb renders as `role="slider"` with:
|
|
353
|
+
- `aria-valuemin={min}`
|
|
354
|
+
- `aria-valuemax={max}`
|
|
355
|
+
- `aria-valuenow={currentThumbValue}`
|
|
356
|
+
- `aria-disabled={disabled}`
|
|
357
|
+
- `tabIndex={0}` on enabled thumbs; `tabIndex={-1}` when disabled.
|
|
358
|
+
- Focus triggers `setHoveredThumb` → shows tooltip.
|
|
359
|
+
- No built-in keyboard arrow-key value change. Consumers must implement keyboard handlers if needed.
|
|
360
|
+
|
|
361
|
+
---
|
|
362
|
+
|
|
363
|
+
## CONSTRAINTS & EDGE CASES
|
|
364
|
+
|
|
365
|
+
- `value` prop does NOT auto-initialize `internalValue` at mount if different from `defaultValue` — `getInitialValue()` runs once at creation time. Always set `defaultValue` for uncontrolled initial state; use `value` for controlled.
|
|
366
|
+
- In range mode, the `onChange` callback always fires with `[number, number]` — cast via `v as [number, number]`.
|
|
367
|
+
- In non-range mode, `onChange` always fires with `number` — cast via `v as number`.
|
|
368
|
+
- `valuesArray` always returns `[number, number]` internally. For non-range: `[min, currentValue]`. This means the track always starts at `min` in the non-reversed, non-range case.
|
|
369
|
+
- `step={null}` requires `marks` to be defined; without marks, value snaps to `min` or `max` only.
|
|
370
|
+
- Vertical slider container **must have explicit height** — the slider uses `height: 100%` and the default `min-height: 200px` applies only to `.sui-slider-vertical` itself.
|
|
371
|
+
- `tooltip.formatter = null` renders an empty string (`''`) as tooltip content — the tooltip element still renders, just with no visible text.
|
|
372
|
+
- `getTooltipProps()` only passes `position`, `color`, and `class` from `SliderTooltipProps` to `<Tooltip>`. Other `TooltipProps` fields (`minScreen`, `maxScreen`) are stripped.
|
|
373
|
+
- `dots` renders one dot per step from `min` to `max`. For large ranges with small steps, this can generate many DOM nodes — use with care (e.g., avoid `min=0 max=1000 step=1 dots`).
|
|
374
|
+
- Range mode clamps but does not swap thumbs: dragging thumb 0 past thumb 1 stops it at thumb 1's current value (and vice versa). Values never invert.
|
|
375
|
+
|
|
376
|
+
---
|
|
377
|
+
|
|
378
|
+
## DO / DON'T
|
|
379
|
+
|
|
380
|
+
**DO**
|
|
381
|
+
|
|
382
|
+
- Always pair `value` with `onChange` for controlled usage — update state inside `onChange`.
|
|
383
|
+
- Use `range` + `[number, number]` tuple together — they are semantically coupled.
|
|
384
|
+
- Set `step={null}` together with `marks` when you want mark-only snapping.
|
|
385
|
+
- Wrap vertical slider in a container with explicit height: `<div style={{ height: '300px' }}>`.
|
|
386
|
+
- Use `tooltip={{ forceOpen: true }}` for always-visible value labels (e.g., in settings panels).
|
|
387
|
+
- Use `class={{ root: 'my-4' }}` for spacing without touching internal structure.
|
|
388
|
+
- Import from the barrel: `import { Slider } from 'solid-tom-ui'`.
|
|
389
|
+
|
|
390
|
+
**DON'T**
|
|
391
|
+
|
|
392
|
+
- Don't use `value` as a number in range mode or as `[number, number]` in non-range mode — types mismatch silently.
|
|
393
|
+
- Don't set `dots={true}` with `step={null}` — dots will not render.
|
|
394
|
+
- Don't set `dots={true}` with extremely small step values over large ranges — generates excessive DOM nodes.
|
|
395
|
+
- Don't rely on keyboard arrow keys to change value — they are not implemented; add `onKeyDown` manually if needed.
|
|
396
|
+
- Don't apply `height` on the slider root directly for vertical layout — set height on the **parent** container instead.
|
|
397
|
+
- Don't pass `content` or `customContent` inside `tooltip` prop — those fields are omitted from `SliderTooltipProps`; use `formatter` to customize the displayed value.
|
|
398
|
+
---
|
|
399
|
+
|
|
400
|
+
## Component Conventions
|
|
401
|
+
|
|
402
|
+
> **CSS encoding**: internal CSS classes use short encoded names (e.g. `sd01`, `sd02`) per project convention.
|
|
403
|
+
|
|
404
|
+
> **Unique IDs**: if this component needs to generate HTML `id` attributes, always use `createUniqueId()` from `solid-js` — never `Math.random()` or `Date.now()`.
|