solid-tom-ui 1.0.8 → 1.0.11
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 +9 -10
- 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,198 @@
|
|
|
1
|
+
## COMPONENT IDENTITY
|
|
2
|
+
|
|
3
|
+
- **Import**: `import { Button } from 'solid-tom-ui';`
|
|
4
|
+
- **Export**: `Button` (default named export)
|
|
5
|
+
- **Framework**: SolidJS
|
|
6
|
+
- **Runtime**: This is a client-side interactive component
|
|
7
|
+
|
|
8
|
+
## TYPE SIGNATURE
|
|
9
|
+
|
|
10
|
+
```typescript
|
|
11
|
+
import { Button } from 'solid-tom-ui';
|
|
12
|
+
|
|
13
|
+
// variant is REQUIRED. All other props are optional.
|
|
14
|
+
<Button
|
|
15
|
+
variant="default" | "simple" | "solid" | "outline" | "dashed" | "filled" | "text" | "link"
|
|
16
|
+
color?="neutral" | "primary" | "secondary" | "accent" | "info" | "success" | "warning" | "error"
|
|
17
|
+
size?="4xs" | "3xs" | "2xs" | "xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "3xl" | "4xl"
|
|
18
|
+
shape?="circle" | "square" // MUTEX with children — if set, do NOT pass children
|
|
19
|
+
icon?={JSXElement} // SolidJS component/JSX for icon
|
|
20
|
+
iconPlacement?="start" | "end" // default: "start"
|
|
21
|
+
loading?={boolean} // default: false; disables button while true
|
|
22
|
+
loadingOptions?={{ type?: "spinner"|"dots"|"ring"|"ball"|"bars"|"infinity", size?: number }}
|
|
23
|
+
animate?="none" | "translate" | "ripple" // default: "ripple"
|
|
24
|
+
disabled?={boolean} // default: false
|
|
25
|
+
onClick?={(e: MouseEvent) => void}
|
|
26
|
+
class?={string}
|
|
27
|
+
>
|
|
28
|
+
{children} // NOT allowed when shape is set
|
|
29
|
+
</Button>
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## CLASS SLOTS
|
|
33
|
+
|
|
34
|
+
`Button` is a single-element component — `class` appends to the root `<button>`. No named sub-element slots.
|
|
35
|
+
|
|
36
|
+
> **CSS encoding**: internal CSS classes use short encoded names (e.g. `bu01`, `bu02`) per project convention.
|
|
37
|
+
|
|
38
|
+
## DEFAULTS
|
|
39
|
+
|
|
40
|
+
| Prop | Default |
|
|
41
|
+
| --------------------- | ------------- |
|
|
42
|
+
| `color` | `"secondary"` |
|
|
43
|
+
| `size` | `"sm"` |
|
|
44
|
+
| `iconPlacement` | `"start"` |
|
|
45
|
+
| `loading` | `false` |
|
|
46
|
+
| `disabled` | `false` |
|
|
47
|
+
| `animate` | `"ripple"` |
|
|
48
|
+
| `loadingOptions.type` | `"spinner"` |
|
|
49
|
+
| `loadingOptions.size` | `20` |
|
|
50
|
+
|
|
51
|
+
## CONSTRAINT: shape vs children
|
|
52
|
+
|
|
53
|
+
- `shape="circle"` or `shape="square"` → icon-only button → **children MUST be omitted**
|
|
54
|
+
- No `shape` → text button → children are allowed
|
|
55
|
+
|
|
56
|
+
## VARIANT SEMANTICS
|
|
57
|
+
|
|
58
|
+
| Variant | Visual style | Use case |
|
|
59
|
+
| --------- | ---------------------------- | ----------------------- |
|
|
60
|
+
| `default` | DaisyUI default button style | General neutral action |
|
|
61
|
+
| `simple` | Minimal, no background | Subtle secondary action |
|
|
62
|
+
| `solid` | Filled solid background | Primary CTA |
|
|
63
|
+
| `outline` | Border, transparent bg | Secondary action |
|
|
64
|
+
| `dashed` | Dashed border | Draft / pending action |
|
|
65
|
+
| `filled` | Filled with lighter tone | Highlighted secondary |
|
|
66
|
+
| `text` | No border, no bg, text only | Inline or low-emphasis |
|
|
67
|
+
| `link` | Looks like hyperlink | Navigation action |
|
|
68
|
+
|
|
69
|
+
## COLOR SEMANTICS
|
|
70
|
+
|
|
71
|
+
| Color | Semantic meaning |
|
|
72
|
+
| ----------- | ------------------------- |
|
|
73
|
+
| `neutral` | Gray / no meaning |
|
|
74
|
+
| `primary` | Brand primary |
|
|
75
|
+
| `secondary` | Brand secondary (default) |
|
|
76
|
+
| `accent` | Accent highlight |
|
|
77
|
+
| `info` | Informational |
|
|
78
|
+
| `success` | Positive / confirmed |
|
|
79
|
+
| `warning` | Caution |
|
|
80
|
+
| `error` | Destructive / danger |
|
|
81
|
+
|
|
82
|
+
## USAGE PATTERNS
|
|
83
|
+
|
|
84
|
+
### Basic button
|
|
85
|
+
|
|
86
|
+
```tsx
|
|
87
|
+
<Button variant="solid" color="primary" onClick={handleClick}>
|
|
88
|
+
Submit
|
|
89
|
+
</Button>
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### With icon (text + icon)
|
|
93
|
+
|
|
94
|
+
```tsx
|
|
95
|
+
import Trash from 'lucide-solid/icons/trash';
|
|
96
|
+
|
|
97
|
+
<Button variant="outline" color="error" icon={<Trash size={16} />} onClick={handleDelete}>
|
|
98
|
+
Delete
|
|
99
|
+
</Button>
|
|
100
|
+
|
|
101
|
+
// Icon at end
|
|
102
|
+
<Button variant="solid" color="primary" icon={<DynamicIcon name="arrow-right" size={16} />} iconPlacement="end">
|
|
103
|
+
Continue
|
|
104
|
+
</Button>
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### Icon-only button (circle/square shape)
|
|
108
|
+
|
|
109
|
+
```tsx
|
|
110
|
+
// CORRECT: shape set → no children
|
|
111
|
+
<Button variant="solid" color="primary" shape="circle" size="md" icon={<DynamicIcon name="plus" size={16} />} />
|
|
112
|
+
<Button variant="outline" color="neutral" shape="square" size="sm" icon={<Trash size={14} />} />
|
|
113
|
+
|
|
114
|
+
// WRONG: shape + children → TypeScript error
|
|
115
|
+
<Button variant="solid" shape="circle" icon={...}>Label</Button> // ❌ children not allowed with shape
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Loading state
|
|
119
|
+
|
|
120
|
+
```tsx
|
|
121
|
+
<Button variant="solid" color="primary" loading={isLoading()}>
|
|
122
|
+
Save
|
|
123
|
+
</Button>
|
|
124
|
+
|
|
125
|
+
// Custom loading indicator
|
|
126
|
+
<Button variant="solid" color="primary" loading={isLoading()} loadingOptions={{ type: 'dots', size: 16 }}>
|
|
127
|
+
Processing
|
|
128
|
+
</Button>
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
### Disabled
|
|
132
|
+
|
|
133
|
+
```tsx
|
|
134
|
+
<Button variant="solid" color="primary" disabled={!isValid()}>
|
|
135
|
+
Submit
|
|
136
|
+
</Button>
|
|
137
|
+
// Note: loading=true also disables the button automatically
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
### Animation control
|
|
141
|
+
|
|
142
|
+
```tsx
|
|
143
|
+
<Button variant="solid" color="primary" animate="none">No animation</Button>
|
|
144
|
+
<Button variant="solid" color="primary" animate="translate">Translate on hover</Button>
|
|
145
|
+
<Button variant="solid" color="primary" animate="ripple">Ripple on click (default)</Button>
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
### Size progression (smallest → largest)
|
|
149
|
+
|
|
150
|
+
```
|
|
151
|
+
4xs → 3xs → 2xs → xs → sm(default) → md → lg → xl → 2xl → 3xl → 4xl
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
## DECISION RULES
|
|
155
|
+
|
|
156
|
+
**Choosing variant:**
|
|
157
|
+
|
|
158
|
+
- User performs the main action → `solid` with `primary`
|
|
159
|
+
- Secondary/cancel action next to primary → `outline` with `neutral` or `secondary`
|
|
160
|
+
- Destructive action (delete, remove) → `solid` or `outline` with `error`
|
|
161
|
+
- Navigation/link-like → `link` or `text`
|
|
162
|
+
- Icon-only toolbar button → `simple` or `text` with appropriate `shape`
|
|
163
|
+
|
|
164
|
+
**Choosing color:**
|
|
165
|
+
|
|
166
|
+
- Confirm / save / create → `primary` or `success`
|
|
167
|
+
- Cancel / back → `neutral`
|
|
168
|
+
- Delete / remove → `error`
|
|
169
|
+
- Warning / irreversible → `warning`
|
|
170
|
+
- Info action → `info`
|
|
171
|
+
|
|
172
|
+
**Choosing size:**
|
|
173
|
+
|
|
174
|
+
- Default UI → `sm` (default)
|
|
175
|
+
- Inside tight spaces (table cells, sidebars) → `xs` or `2xs`
|
|
176
|
+
- Hero CTA → `lg` or `xl`
|
|
177
|
+
|
|
178
|
+
## ANTI-PATTERNS
|
|
179
|
+
|
|
180
|
+
```tsx
|
|
181
|
+
// ❌ Missing required `variant` prop
|
|
182
|
+
<Button color="primary">Click</Button>
|
|
183
|
+
|
|
184
|
+
// ❌ Using shape with children
|
|
185
|
+
<Button variant="solid" shape="circle" icon={<Icon />}>Text</Button>
|
|
186
|
+
|
|
187
|
+
// ❌ Redundant: loading already disables, no need for disabled too
|
|
188
|
+
<Button loading={true} disabled={true}>Save</Button>
|
|
189
|
+
|
|
190
|
+
// ✅ Correct: just use loading
|
|
191
|
+
<Button loading={true}>Save</Button>
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
## ADDITIONAL NATIVE PROPS
|
|
195
|
+
|
|
196
|
+
The `Button` component forwards all standard `HTMLButtonElement` attributes except `onClick`, `class`, `disabled`, and `children` (which are controlled by the component). You can pass `type="submit"`, `form`, `aria-*`, `data-*`, etc.
|
|
197
|
+
|
|
198
|
+
> **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,406 @@
|
|
|
1
|
+
## COMPONENT IDENTITY
|
|
2
|
+
- **Import**: `import { Carousel } from 'solid-tom-ui';`
|
|
3
|
+
- **Export**: `Carousel` (named export), `CarouselFunction`, `CarouselProps` (type exports)
|
|
4
|
+
- **Framework**: SolidJS
|
|
5
|
+
- **Purpose**: Image-only carousel component; NOT a `ParentComponent` — images passed via props
|
|
6
|
+
- **CSS custom properties**: `--carousel-transition-duration`, `--carousel-autoplay-speed`
|
|
7
|
+
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## TYPE SIGNATURE
|
|
11
|
+
|
|
12
|
+
```ts
|
|
13
|
+
// Image item shape (from @/utils/helper)
|
|
14
|
+
type Image = {
|
|
15
|
+
src: string;
|
|
16
|
+
alt?: string;
|
|
17
|
+
class?: string; // extra class on <img> element
|
|
18
|
+
// any other standard <img> HTML attributes
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
// Discriminated union on `direction`
|
|
22
|
+
type CarouselProps = HorizontalCarouselProps | VerticalCarouselProps;
|
|
23
|
+
|
|
24
|
+
type CarouselBaseProps = {
|
|
25
|
+
images: Image[]; // REQUIRED — array of image objects
|
|
26
|
+
class?: {
|
|
27
|
+
root?: string; // classes on root .sui-carousel div
|
|
28
|
+
item?: string; // classes on each .sui-carousel-item div
|
|
29
|
+
};
|
|
30
|
+
arrows?: boolean; // default: true
|
|
31
|
+
autoplay?: boolean | { dotDuration?: boolean }; // default: true
|
|
32
|
+
autoplaySpeed?: number; // ms between slides; default: 3000
|
|
33
|
+
dots?: boolean; // default: true
|
|
34
|
+
infinite?: boolean; // default: true
|
|
35
|
+
effect?: 'scrollx' | 'fade'; // default: 'scrollx'
|
|
36
|
+
afterChange?: (current: number) => void; // fires after slide changes; index is 0-based
|
|
37
|
+
beforeChange?: (current: number, next: number) => void; // fires before transition
|
|
38
|
+
onClickSlide?: (index: number) => void; // fires only when clicking the ACTIVE slide
|
|
39
|
+
setCarouselFunction?: Setter<CarouselFunction | undefined>; // imperative API hook
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
type HorizontalCarouselProps = CarouselBaseProps & {
|
|
43
|
+
direction?: 'horizontal'; // default when omitted
|
|
44
|
+
dotPlacement?: 'top' | 'bottom'; // default: 'bottom'
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
type VerticalCarouselProps = CarouselBaseProps & {
|
|
48
|
+
direction: 'vertical'; // must be explicit
|
|
49
|
+
dotPlacement?: 'start' | 'end'; // default: 'end'
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
// Imperative API object exposed via setCarouselFunction
|
|
53
|
+
type CarouselFunction = {
|
|
54
|
+
next: () => void;
|
|
55
|
+
prev: () => void;
|
|
56
|
+
moveTo: (index: number) => void; // 0-based index
|
|
57
|
+
pause: () => {};
|
|
58
|
+
play: () => {};
|
|
59
|
+
};
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## DEFAULT VALUES (via `mergeProps`)
|
|
65
|
+
|
|
66
|
+
| Prop | Default |
|
|
67
|
+
|-----------------|--------------|
|
|
68
|
+
| `arrows` | `true` |
|
|
69
|
+
| `autoplay` | `true` |
|
|
70
|
+
| `autoplaySpeed` | `3000` (ms) |
|
|
71
|
+
| `dots` | `true` |
|
|
72
|
+
| `infinite` | `true` |
|
|
73
|
+
| `effect` | `'scrollx'` |
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## PROP REFERENCE
|
|
78
|
+
|
|
79
|
+
| Prop | Type | Required | Description |
|
|
80
|
+
|-----------------------|---------------------------------------------|----------|------------------------------------------------------------------------------------------------|
|
|
81
|
+
| `images` | `Image[]` | ✅ YES | Array of image objects with `src`, optional `alt`, `class` |
|
|
82
|
+
| `direction` | `'horizontal' \| 'vertical'` | ❌ NO | Slide direction. Omit for horizontal (default). Must be `'vertical'` for vertical mode |
|
|
83
|
+
| `effect` | `'scrollx' \| 'fade'` | ❌ NO | Transition animation between slides |
|
|
84
|
+
| `arrows` | `boolean` | ❌ NO | Show prev/next arrow buttons |
|
|
85
|
+
| `dots` | `boolean` | ❌ NO | Show dot indicators. Hidden when `images.length <= 1` |
|
|
86
|
+
| `dotPlacement` | `'top'\|'bottom'` (h) / `'start'\|'end'` (v) | ❌ NO | Position of dot indicators — valid values differ by `direction` |
|
|
87
|
+
| `autoplay` | `boolean \| { dotDuration?: boolean }` | ❌ NO | `true` = auto-advance; `{ dotDuration: true }` = also show progress bar in active dot |
|
|
88
|
+
| `autoplaySpeed` | `number` | ❌ NO | Milliseconds per slide during autoplay |
|
|
89
|
+
| `infinite` | `boolean` | ❌ NO | Loop from last→first and first→last. When `false`, arrows hide at boundaries |
|
|
90
|
+
| `afterChange` | `(current: number) => void` | ❌ NO | Called after slide transition completes; receives new 0-based index |
|
|
91
|
+
| `beforeChange` | `(current: number, next: number) => void` | ❌ NO | Called before transition; receives current and next 0-based indexes |
|
|
92
|
+
| `onClickSlide` | `(index: number) => void` | ❌ NO | Fires only when clicking the **currently active** slide (not inactive slides) |
|
|
93
|
+
| `setCarouselFunction` | `Setter<CarouselFunction \| undefined>` | ❌ NO | SolidJS setter to receive the imperative API object |
|
|
94
|
+
| `class.root` | `string` | ❌ NO | Extra classes on root `<div class="sui-carousel">` — use for size, border-radius, etc. |
|
|
95
|
+
| `class.item` | `string` | ❌ NO | Extra classes on each `.sui-carousel-item` slide wrapper div |
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## DIRECTION × DOT PLACEMENT CONSTRAINT
|
|
100
|
+
|
|
101
|
+
`dotPlacement` valid values are **constrained by `direction`** — mixing them has no effect (falls through to default):
|
|
102
|
+
|
|
103
|
+
| `direction` | Valid `dotPlacement` values | Default | Visual position |
|
|
104
|
+
|----------------|-----------------------------|--------------|------------------------|
|
|
105
|
+
| `'horizontal'` (or omitted) | `'top'`, `'bottom'` | `'bottom'` | Above or below slides |
|
|
106
|
+
| `'vertical'` | `'start'`, `'end'` | `'end'` | Left or right of slides |
|
|
107
|
+
|
|
108
|
+
> ⚠️ Passing `dotPlacement="start"` with `direction="horizontal"` is silently ignored — defaults to `'bottom'`.
|
|
109
|
+
> Passing `dotPlacement="top"` with `direction="vertical"` is silently ignored — defaults to `'end'`.
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## AUTOPLAY MODES
|
|
114
|
+
|
|
115
|
+
### `autoplay={true}` — basic autoplay
|
|
116
|
+
- Slides advance every `autoplaySpeed` ms
|
|
117
|
+
- No progress indicator on dots
|
|
118
|
+
|
|
119
|
+
### `autoplay={false}` — no autoplay
|
|
120
|
+
- Manual navigation only via arrows, dots, or imperative API
|
|
121
|
+
- `play()` via imperative API has no effect
|
|
122
|
+
|
|
123
|
+
### `autoplay={{ dotDuration: true }}` — autoplay with progress bar
|
|
124
|
+
- Same as `true` but adds animated progress fill inside the active dot
|
|
125
|
+
- Progress bar animates from 0→100% over `autoplaySpeed` ms
|
|
126
|
+
- Progress resets when slide changes (including manual navigation)
|
|
127
|
+
- Progress direction: horizontal for `dots-bottom`/`dots-top`, vertical for `dots-start`/`dots-end`
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## IMPERATIVE API — `setCarouselFunction`
|
|
132
|
+
|
|
133
|
+
To control the carousel programmatically, pass a SolidJS signal setter:
|
|
134
|
+
|
|
135
|
+
```tsx
|
|
136
|
+
import { createSignal } from 'solid-js';
|
|
137
|
+
import { Carousel, CarouselFunction } from 'solid-tom-ui';
|
|
138
|
+
|
|
139
|
+
const [carouselApi, setCarouselApi] = createSignal<CarouselFunction>();
|
|
140
|
+
|
|
141
|
+
<Carousel
|
|
142
|
+
images={images}
|
|
143
|
+
setCarouselFunction={setCarouselApi}
|
|
144
|
+
afterChange={current => console.log('Now on slide:', current)}
|
|
145
|
+
/>
|
|
146
|
+
|
|
147
|
+
// Use the API:
|
|
148
|
+
carouselApi()?.next();
|
|
149
|
+
carouselApi()?.prev();
|
|
150
|
+
carouselApi()?.moveTo(2); // 0-based index
|
|
151
|
+
carouselApi()?.pause();
|
|
152
|
+
carouselApi()?.play();
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
### API method details
|
|
156
|
+
| Method | Description |
|
|
157
|
+
|---------------|------------------------------------------------------------------------------------|
|
|
158
|
+
| `next()` | Go to next slide; wraps to first if `infinite=true`, clamps if `infinite=false` |
|
|
159
|
+
| `prev()` | Go to previous slide; wraps to last if `infinite=true`, clamps if `infinite=false`|
|
|
160
|
+
| `moveTo(n)` | Jump to 0-based index `n` directly; respects `infinite` boundary logic |
|
|
161
|
+
| `pause()` | Stops autoplay timer; sets `isPlaying=false` |
|
|
162
|
+
| `play()` | Resumes autoplay only if `autoplay` prop is truthy; no-op if `autoplay={false}` |
|
|
163
|
+
|
|
164
|
+
> ℹ️ The API object is re-created and set via `createEffect` on every render — always call through the signal accessor `carouselApi()?.method()` rather than caching the object.
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## `onClickSlide` BEHAVIOR
|
|
169
|
+
|
|
170
|
+
`onClickSlide` fires **only when clicking the currently active/visible slide**:
|
|
171
|
+
|
|
172
|
+
```tsx
|
|
173
|
+
// Inside component:
|
|
174
|
+
const handleSlideClick = (index: number) => {
|
|
175
|
+
if (index === currentIndex()) {
|
|
176
|
+
p.onClickSlide?.(index); // only fires for the active slide
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
Clicking an inactive slide (one that is positioned off-screen) triggers no callback. This is intentional — only the visible slide is interactive.
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## `infinite` — ARROW VISIBILITY BEHAVIOR
|
|
186
|
+
|
|
187
|
+
When `infinite={false}`:
|
|
188
|
+
- `showPrevArrow` → `currentIndex() > 0` — hides prev arrow on first slide
|
|
189
|
+
- `showNextArrow` → `currentIndex() < totalSlides() - 1` — hides next arrow on last slide
|
|
190
|
+
|
|
191
|
+
When `infinite={true}`:
|
|
192
|
+
- Both arrows always shown (when `arrows={true}`)
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## ANIMATION — INTERNAL MECHANISM
|
|
197
|
+
|
|
198
|
+
### `effect="scrollx"` (default)
|
|
199
|
+
- Uses pixel-based `translateX` / `translateY` (vertical) CSS transforms
|
|
200
|
+
- 1px overlap on slide positioning to eliminate sub-pixel gaps
|
|
201
|
+
- Detects wrap-around (first↔last) and reverses direction for natural wrap animation
|
|
202
|
+
- Transition duration: hardcoded `400ms` via `--carousel-transition-duration` CSS var
|
|
203
|
+
|
|
204
|
+
### `effect="fade"`
|
|
205
|
+
- Uses `opacity` CSS transitions between slides
|
|
206
|
+
- All slides stacked absolutely; `z-index` swaps between from/to slides
|
|
207
|
+
- Same 400ms duration
|
|
208
|
+
|
|
209
|
+
### Animation guard (`isAnimating`)
|
|
210
|
+
- While a transition is running, `goToSlide` calls are ignored (except `skipAnimation=true`)
|
|
211
|
+
- Autoplay skips ticks while animating
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## INTERNAL DOM STRUCTURE
|
|
216
|
+
|
|
217
|
+
```
|
|
218
|
+
<div class="sui-carousel [vertical] [dots-bottom|dots-top|dots-start|dots-end] [class.root]"
|
|
219
|
+
style="--carousel-transition-duration:400ms; --carousel-autoplay-speed:{autoplaySpeed}ms">
|
|
220
|
+
│
|
|
221
|
+
├── <div class="sui-carousel-slides">
|
|
222
|
+
│ <For each={images}>
|
|
223
|
+
│ <div class="sui-carousel-item [class.item]" onClick={handleSlideClick}>
|
|
224
|
+
│ <img src={...} alt={...} class="sui-carousel-image [image.class]" draggable={false} />
|
|
225
|
+
│ </div>
|
|
226
|
+
│ </For>
|
|
227
|
+
│ </div>
|
|
228
|
+
│
|
|
229
|
+
├── <Show when={arrows}>
|
|
230
|
+
│ <Show when={showPrevArrow()}>
|
|
231
|
+
│ <button class="sui-carousel-arrow arrow-prev" aria-label="Previous slide">
|
|
232
|
+
│ <DynamicIcon name="chevron-left" />
|
|
233
|
+
│ </button>
|
|
234
|
+
│ </Show>
|
|
235
|
+
│ <Show when={showNextArrow()}>
|
|
236
|
+
│ <button class="sui-carousel-arrow arrow-next" aria-label="Next slide">
|
|
237
|
+
│ <DynamicIcon name="chevron-right" />
|
|
238
|
+
│ </button>
|
|
239
|
+
│ </Show>
|
|
240
|
+
│ </Show>
|
|
241
|
+
│
|
|
242
|
+
└── <Show when={dots && totalSlides() > 1}>
|
|
243
|
+
<div class="sui-carousel-dots">
|
|
244
|
+
<For each={images}>
|
|
245
|
+
<button class="sui-carousel-dot [active] [has-progress]"
|
|
246
|
+
aria-label="Go to slide {n}">
|
|
247
|
+
<Show when={hasDotDuration()}>
|
|
248
|
+
<div class="dot-progress" />
|
|
249
|
+
</Show>
|
|
250
|
+
</button>
|
|
251
|
+
</For>
|
|
252
|
+
</div>
|
|
253
|
+
</Show>
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
---
|
|
257
|
+
|
|
258
|
+
## SIZING — ALWAYS REQUIRED
|
|
259
|
+
|
|
260
|
+
The component has `width: 100%` and fills its container's height. **Always set explicit height** on `class.root`:
|
|
261
|
+
|
|
262
|
+
```tsx
|
|
263
|
+
// ✅ Correct — explicit height
|
|
264
|
+
<Carousel class={{ root: 'h-[400px] rounded-xl' }} images={images} />
|
|
265
|
+
|
|
266
|
+
// ✅ Fixed width + height
|
|
267
|
+
<Carousel class={{ root: 'h-[150px] w-[200px] rounded-xl' }} images={images} />
|
|
268
|
+
|
|
269
|
+
// ❌ Wrong — no height = carousel collapses to 0px
|
|
270
|
+
<Carousel images={images} />
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
---
|
|
274
|
+
|
|
275
|
+
## BEHAVIOR NOTES FOR AGENTS
|
|
276
|
+
|
|
277
|
+
1. **`images` items only render `<img>` tags** — the component does not support arbitrary JSX slides. Only image-based slides via the `Image` type are supported.
|
|
278
|
+
|
|
279
|
+
2. **`direction` changes arrow orientation** — in `'vertical'` mode, arrows move to top/bottom center (rotated 90°) instead of left/right. This is CSS-driven automatically.
|
|
280
|
+
|
|
281
|
+
3. **`autoplaySpeed` is used for both the timer interval AND the CSS progress animation** — it is set as `--carousel-autoplay-speed` CSS custom property. Changing it reactively will update both simultaneously.
|
|
282
|
+
|
|
283
|
+
4. **Dots are hidden when `images.length <= 1`** — `<Show when={p.dots && totalSlides() > 1}>` — single-image carousels never show dots regardless of `dots` prop.
|
|
284
|
+
|
|
285
|
+
5. **`setCarouselFunction` setter is called inside `createEffect`** — the API object is always fresh. Do not cache the returned object; always call via `carouselApi()?.method()`.
|
|
286
|
+
|
|
287
|
+
6. **`onClickSlide` only fires on the active slide** — clicking a slide that is not `currentIndex()` does nothing, even if partially visible during transition.
|
|
288
|
+
|
|
289
|
+
7. **Transition is blocked during animation** — `isAnimating()` guard prevents overlapping transitions. Rapid clicking or autoplay ticks during a 400ms transition are silently ignored.
|
|
290
|
+
|
|
291
|
+
8. **Autoplay resets on manual navigation** — calling `next()`, `prev()`, `moveTo()`, or clicking arrows/dots clears and restarts the autoplay timer, preventing near-simultaneous auto+manual transitions.
|
|
292
|
+
|
|
293
|
+
9. **`play()` is a no-op when `autoplay={false}`** — the prop check `if (!p.autoplay) return {}` exits immediately. `pause()`/`play()` only work when `autoplay` was originally truthy.
|
|
294
|
+
|
|
295
|
+
---
|
|
296
|
+
|
|
297
|
+
## COMMON MISTAKES TO AVOID
|
|
298
|
+
|
|
299
|
+
| Mistake | Correct approach |
|
|
300
|
+
|---|---|
|
|
301
|
+
| Omitting height on `class.root` | Always set `h-[Npx]` or similar — carousel collapses without explicit height |
|
|
302
|
+
| Using `dotPlacement="start"` with horizontal direction | `start`/`end` are only for `direction="vertical"` — use `top`/`bottom` for horizontal |
|
|
303
|
+
| Using `dotPlacement="top"` with `direction="vertical"` | `top`/`bottom` are only for horizontal — use `start`/`end` for vertical |
|
|
304
|
+
| Calling `carouselApi()?.play()` when `autoplay={false}` | `play()` is a no-op when `autoplay` prop is false |
|
|
305
|
+
| Caching `carouselApi()` object directly | Always call via signal accessor — the API object is recreated each render |
|
|
306
|
+
| Expecting `onClickSlide` for any slide click | Only fires for the currently active/visible slide |
|
|
307
|
+
| Passing JSX as image slides | `images` accepts `Image[]` only — `src`, `alt`, `class` — no arbitrary JSX |
|
|
308
|
+
| Expecting dots with single image | Dots are hidden automatically when `images.length <= 1` |
|
|
309
|
+
|
|
310
|
+
---
|
|
311
|
+
|
|
312
|
+
## FULL EXAMPLE — Common configurations
|
|
313
|
+
|
|
314
|
+
```tsx
|
|
315
|
+
import { Carousel, CarouselFunction } from 'solid-tom-ui';
|
|
316
|
+
import { createSignal } from 'solid-js';
|
|
317
|
+
|
|
318
|
+
const images = [
|
|
319
|
+
{ src: '/slides/1.webp', alt: 'Slide 1' },
|
|
320
|
+
{ src: '/slides/2.webp', alt: 'Slide 2' },
|
|
321
|
+
{ src: '/slides/3.webp', alt: 'Slide 3' },
|
|
322
|
+
{ src: '/slides/4.webp', alt: 'Slide 4' },
|
|
323
|
+
];
|
|
324
|
+
|
|
325
|
+
// 1. Basic with autoplay + progress dots
|
|
326
|
+
<Carousel
|
|
327
|
+
class={{ root: 'h-[400px] rounded-xl' }}
|
|
328
|
+
images={images}
|
|
329
|
+
autoplay={{ dotDuration: true }}
|
|
330
|
+
autoplaySpeed={4000}
|
|
331
|
+
/>
|
|
332
|
+
|
|
333
|
+
// 2. Fade effect, no autoplay
|
|
334
|
+
<Carousel
|
|
335
|
+
class={{ root: 'h-[400px] rounded-xl' }}
|
|
336
|
+
images={images}
|
|
337
|
+
effect="fade"
|
|
338
|
+
autoplay={false}
|
|
339
|
+
dots={true}
|
|
340
|
+
arrows={true}
|
|
341
|
+
/>
|
|
342
|
+
|
|
343
|
+
// 3. Vertical direction, dots on end (right)
|
|
344
|
+
<Carousel
|
|
345
|
+
class={{ root: 'h-[350px] rounded-xl' }}
|
|
346
|
+
images={images}
|
|
347
|
+
direction="vertical"
|
|
348
|
+
autoplay={{ dotDuration: true }}
|
|
349
|
+
dotPlacement="end"
|
|
350
|
+
/>
|
|
351
|
+
|
|
352
|
+
// 4. Non-infinite (arrows hide at boundaries)
|
|
353
|
+
<Carousel
|
|
354
|
+
class={{ root: 'h-[400px] rounded-xl' }}
|
|
355
|
+
images={images}
|
|
356
|
+
autoplay={false}
|
|
357
|
+
infinite={false}
|
|
358
|
+
/>
|
|
359
|
+
|
|
360
|
+
// 5. Imperative API control
|
|
361
|
+
const [api, setApi] = createSignal<CarouselFunction>();
|
|
362
|
+
const [slide, setSlide] = createSignal(0);
|
|
363
|
+
|
|
364
|
+
<div class="flex gap-2 mb-2">
|
|
365
|
+
<button onClick={() => api()?.prev()}>Prev</button>
|
|
366
|
+
<button onClick={() => api()?.next()}>Next</button>
|
|
367
|
+
<button onClick={() => api()?.moveTo(0)}>First</button>
|
|
368
|
+
<button onClick={() => api()?.pause()}>Pause</button>
|
|
369
|
+
<button onClick={() => api()?.play()}>Play</button>
|
|
370
|
+
</div>
|
|
371
|
+
<p>Slide: {slide() + 1} / {images.length}</p>
|
|
372
|
+
<Carousel
|
|
373
|
+
class={{ root: 'h-[400px] rounded-xl' }}
|
|
374
|
+
images={images}
|
|
375
|
+
autoplay={{ dotDuration: true }}
|
|
376
|
+
setCarouselFunction={setApi}
|
|
377
|
+
afterChange={i => setSlide(i)}
|
|
378
|
+
beforeChange={(cur, next) => console.log(cur, '->', next)}
|
|
379
|
+
onClickSlide={i => console.log('clicked slide', i)}
|
|
380
|
+
/>
|
|
381
|
+
|
|
382
|
+
// 6. Dots only, no arrows
|
|
383
|
+
<Carousel
|
|
384
|
+
class={{ root: 'h-[300px] rounded-xl' }}
|
|
385
|
+
images={images}
|
|
386
|
+
arrows={false}
|
|
387
|
+
dots={true}
|
|
388
|
+
autoplay={{ dotDuration: true }}
|
|
389
|
+
/>
|
|
390
|
+
|
|
391
|
+
// 7. Arrows only, no dots
|
|
392
|
+
<Carousel
|
|
393
|
+
class={{ root: 'h-[300px] rounded-xl' }}
|
|
394
|
+
images={images}
|
|
395
|
+
arrows={true}
|
|
396
|
+
dots={false}
|
|
397
|
+
autoplay={true}
|
|
398
|
+
/>
|
|
399
|
+
```
|
|
400
|
+
---
|
|
401
|
+
|
|
402
|
+
## Component Conventions
|
|
403
|
+
|
|
404
|
+
> **CSS encoding**: internal CSS classes use short encoded names (e.g. `cr01`, `cr02`) per project convention.
|
|
405
|
+
|
|
406
|
+
> **Unique IDs**: if this component needs to generate HTML `id` attributes, always use `createUniqueId()` from `solid-js` — never `Math.random()` or `Date.now()`.
|