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,255 @@
|
|
|
1
|
+
## COMPONENT IDENTITY
|
|
2
|
+
- **Import**: `import { Avatar } from 'solid-tom-ui';`
|
|
3
|
+
- **Exports**: `Avatar` (main), `Avatar.Group` (sub-component)
|
|
4
|
+
- **Framework**: SolidJS
|
|
5
|
+
- **Purpose**: Display user profile images, initials, or icon placeholders; supports groups
|
|
6
|
+
|
|
7
|
+
## TYPE SIGNATURES
|
|
8
|
+
|
|
9
|
+
### Avatar (single)
|
|
10
|
+
```typescript
|
|
11
|
+
import { Avatar } from 'solid-tom-ui';
|
|
12
|
+
|
|
13
|
+
type AvatarProps = {
|
|
14
|
+
width: string | number; // REQUIRED: size in px (number) or CSS units (string)
|
|
15
|
+
image?: string; // Image URL — if provided, renders <img>
|
|
16
|
+
placeholder?: SolidComponent; // Fallback JSX shown when no image (initials, icon, etc.)
|
|
17
|
+
mask?: 'heart' | 'squircle' | 'hexagon'; // Shape mask; omit for default circle
|
|
18
|
+
status?: 'online' | 'offline'; // Status indicator dot; omit for no indicator
|
|
19
|
+
class?: {
|
|
20
|
+
avatar?: string; // Extra classes on the avatar container div
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
### Avatar.Group
|
|
26
|
+
```typescript
|
|
27
|
+
type AvatarGroup = {
|
|
28
|
+
width: string | number; // REQUIRED: uniform size for all avatars in group
|
|
29
|
+
avatars: Omit<AvatarProps, 'width' | 'status'>[]; // REQUIRED: array of avatar configs
|
|
30
|
+
counter?: number; // Show "+N" badge at end of group
|
|
31
|
+
class?: string; // Extra classes on the group container
|
|
32
|
+
};
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
## KEY RULES
|
|
36
|
+
- `width` is **always required** on both `Avatar` and `Avatar.Group`
|
|
37
|
+
- `image` and `placeholder` are mutually exclusive in intent — if `image` is set and loads, `placeholder` is not shown
|
|
38
|
+
- `Avatar.Group` does **not** support per-avatar `status` — statuses are stripped in the group type
|
|
39
|
+
- In `Avatar.Group`, the `width` prop applies uniformly to all avatars; individual avatar items cannot override it
|
|
40
|
+
|
|
41
|
+
## WIDTH SPECIFICATION
|
|
42
|
+
```tsx
|
|
43
|
+
// Number → interpreted as pixels
|
|
44
|
+
<Avatar width={48} image={url} /> // 48px × 48px
|
|
45
|
+
|
|
46
|
+
// String → any valid CSS unit
|
|
47
|
+
<Avatar width="3rem" image={url} />
|
|
48
|
+
<Avatar width="5rem" image={url} />
|
|
49
|
+
<Avatar width="100px" image={url} />
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## MASK (SHAPE) OPTIONS
|
|
53
|
+
| `mask` value | Shape |
|
|
54
|
+
|-------------|-------|
|
|
55
|
+
| `undefined` (omit) | Circle (default) |
|
|
56
|
+
| `"squircle"` | Rounded square |
|
|
57
|
+
| `"hexagon"` | Hexagonal |
|
|
58
|
+
| `"heart"` | Heart shape |
|
|
59
|
+
|
|
60
|
+
## STATUS INDICATOR
|
|
61
|
+
| `status` value | Indicator |
|
|
62
|
+
|---------------|-----------|
|
|
63
|
+
| `undefined` (omit) | None |
|
|
64
|
+
| `"online"` | Green dot |
|
|
65
|
+
| `"offline"` | Gray dot |
|
|
66
|
+
|
|
67
|
+
## USAGE PATTERNS
|
|
68
|
+
|
|
69
|
+
### Basic image avatar (circle, no status)
|
|
70
|
+
```tsx
|
|
71
|
+
<Avatar image="https://example.com/user.jpg" width={48} />
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Sized avatar
|
|
75
|
+
```tsx
|
|
76
|
+
// Common sizes: 32, 48, 64, 80, 96 (pixels)
|
|
77
|
+
<Avatar image={userPhotoUrl} width={32} /> // small (e.g., in list rows)
|
|
78
|
+
<Avatar image={userPhotoUrl} width={48} /> // medium (e.g., comment threads)
|
|
79
|
+
<Avatar image={userPhotoUrl} width={64} /> // large (e.g., profile cards)
|
|
80
|
+
<Avatar image={userPhotoUrl} width={96} /> // xl (e.g., profile page header)
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### With online/offline status
|
|
84
|
+
```tsx
|
|
85
|
+
<Avatar image={userPhotoUrl} width={48} status="online" />
|
|
86
|
+
<Avatar image={userPhotoUrl} width={48} status="offline" />
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### With mask (non-circle shape)
|
|
90
|
+
```tsx
|
|
91
|
+
<Avatar image={userPhotoUrl} width={64} mask="squircle" />
|
|
92
|
+
<Avatar image={userPhotoUrl} width={64} mask="hexagon" />
|
|
93
|
+
<Avatar image={userPhotoUrl} width={64} mask="heart" />
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Placeholder — initials (when no image)
|
|
97
|
+
```tsx
|
|
98
|
+
<Avatar
|
|
99
|
+
width={64}
|
|
100
|
+
placeholder={
|
|
101
|
+
<div class="bg-neutral text-neutral-content flex h-16 w-16 items-center justify-center rounded-full">
|
|
102
|
+
<span class="text-xl">AB</span>
|
|
103
|
+
</div>
|
|
104
|
+
}
|
|
105
|
+
/>
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Placeholder — icon (generic user silhouette)
|
|
109
|
+
```tsx
|
|
110
|
+
<Avatar
|
|
111
|
+
width={64}
|
|
112
|
+
placeholder={
|
|
113
|
+
<div class="bg-primary text-primary-content flex h-16 w-16 items-center justify-center rounded-full">
|
|
114
|
+
<DynamicIcon name="user" size={32} />
|
|
115
|
+
</div>
|
|
116
|
+
}
|
|
117
|
+
/>
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Placeholder with status
|
|
121
|
+
```tsx
|
|
122
|
+
<Avatar
|
|
123
|
+
width={64}
|
|
124
|
+
status="online"
|
|
125
|
+
placeholder={
|
|
126
|
+
<div class="bg-accent text-accent-content flex h-16 w-16 items-center justify-center rounded-full">
|
|
127
|
+
<span class="text-xl">JD</span>
|
|
128
|
+
</div>
|
|
129
|
+
}
|
|
130
|
+
/>
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### Avatar.Group — basic group
|
|
134
|
+
```tsx
|
|
135
|
+
const users = [
|
|
136
|
+
{ image: 'https://example.com/user1.jpg' },
|
|
137
|
+
{ image: 'https://example.com/user2.jpg' },
|
|
138
|
+
{ image: 'https://example.com/user3.jpg' },
|
|
139
|
+
];
|
|
140
|
+
|
|
141
|
+
<Avatar.Group width={48} avatars={users} />
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
### Avatar.Group — with overflow counter
|
|
145
|
+
```tsx
|
|
146
|
+
// Shows avatars + "+12" badge at the end
|
|
147
|
+
<Avatar.Group
|
|
148
|
+
width={48}
|
|
149
|
+
avatars={[
|
|
150
|
+
{ image: url1 },
|
|
151
|
+
{ image: url2 },
|
|
152
|
+
{ image: url3 },
|
|
153
|
+
]}
|
|
154
|
+
counter={12}
|
|
155
|
+
/>
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Avatar.Group — with custom masks
|
|
159
|
+
```tsx
|
|
160
|
+
<Avatar.Group
|
|
161
|
+
width={48}
|
|
162
|
+
avatars={[
|
|
163
|
+
{ image: url1, mask: 'squircle' },
|
|
164
|
+
{ image: url2, mask: 'squircle' },
|
|
165
|
+
{ image: url3, mask: 'squircle' },
|
|
166
|
+
]}
|
|
167
|
+
counter={5}
|
|
168
|
+
/>
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### Avatar.Group — with placeholder avatars
|
|
172
|
+
```tsx
|
|
173
|
+
<Avatar.Group
|
|
174
|
+
width={40}
|
|
175
|
+
avatars={[
|
|
176
|
+
{ image: url1 },
|
|
177
|
+
{
|
|
178
|
+
placeholder: (
|
|
179
|
+
<div class="bg-neutral text-neutral-content flex items-center justify-center rounded-full" style={{ width: '40px', height: '40px' }}>
|
|
180
|
+
<span class="text-sm">AB</span>
|
|
181
|
+
</div>
|
|
182
|
+
)
|
|
183
|
+
},
|
|
184
|
+
{ image: url3 },
|
|
185
|
+
]}
|
|
186
|
+
counter={8}
|
|
187
|
+
/>
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
## DECISION RULES
|
|
191
|
+
|
|
192
|
+
**Single Avatar vs Avatar.Group:**
|
|
193
|
+
- One user → `Avatar`
|
|
194
|
+
- Multiple users shown together (team, participants, collaborators) → `Avatar.Group`
|
|
195
|
+
|
|
196
|
+
**Image vs placeholder:**
|
|
197
|
+
- User has a profile photo → use `image`
|
|
198
|
+
- No profile photo → use `placeholder` with initials derived from user's name
|
|
199
|
+
- Unknown user → use `placeholder` with a generic user icon
|
|
200
|
+
|
|
201
|
+
**Width selection:**
|
|
202
|
+
- Navigation bar / list row → `32` or `40`
|
|
203
|
+
- Comment / chat UI → `48`
|
|
204
|
+
- Card / profile preview → `64`
|
|
205
|
+
- Full profile page header → `80` or `96`
|
|
206
|
+
- Group avatars → smaller size (e.g., `40` or `48`) since they overlap
|
|
207
|
+
|
|
208
|
+
**Mask selection:**
|
|
209
|
+
- Standard user avatar → no mask (circle)
|
|
210
|
+
- App/bot/system avatar → `squircle` or `hexagon`
|
|
211
|
+
- Decorative / brand avatar → `heart` or any mask
|
|
212
|
+
|
|
213
|
+
**Status dots:**
|
|
214
|
+
- Real-time presence system → use `status`
|
|
215
|
+
- Static display (profile page without live data) → omit `status`
|
|
216
|
+
|
|
217
|
+
**Counter in Avatar.Group:**
|
|
218
|
+
- Total participants count is known → set `counter` to (total - displayed) or total count
|
|
219
|
+
- If all participants are shown → omit `counter`
|
|
220
|
+
|
|
221
|
+
## PLACEHOLDER SIZING NOTE
|
|
222
|
+
When using `placeholder`, the inner element's dimensions must match the `width` prop manually:
|
|
223
|
+
```tsx
|
|
224
|
+
// width={64} → inner element must be 64px × 64px
|
|
225
|
+
<Avatar
|
|
226
|
+
width={64}
|
|
227
|
+
placeholder={
|
|
228
|
+
<div class="flex h-16 w-16 items-center justify-center rounded-full bg-primary text-primary-content">
|
|
229
|
+
{/* h-16 = 64px, w-16 = 64px */}
|
|
230
|
+
<span>AB</span>
|
|
231
|
+
</div>
|
|
232
|
+
}
|
|
233
|
+
/>
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
## ANTI-PATTERNS
|
|
237
|
+
```tsx
|
|
238
|
+
// ❌ Missing required width
|
|
239
|
+
<Avatar image={url} /> // TypeScript error
|
|
240
|
+
|
|
241
|
+
// ❌ Setting status on Avatar.Group items (not supported — stripped from type)
|
|
242
|
+
<Avatar.Group width={48} avatars={[{ image: url, status: 'online' }]} /> // TypeScript error
|
|
243
|
+
|
|
244
|
+
// ❌ Mismatched placeholder size vs width prop
|
|
245
|
+
<Avatar width={96} placeholder={<div class="h-8 w-8 rounded-full bg-gray-300" />} />
|
|
246
|
+
// ✅ Match placeholder dimensions to width
|
|
247
|
+
<Avatar width={96} placeholder={<div class="h-24 w-24 rounded-full bg-gray-300" />} />
|
|
248
|
+
```
|
|
249
|
+
---
|
|
250
|
+
|
|
251
|
+
## Component Conventions
|
|
252
|
+
|
|
253
|
+
> **CSS encoding**: internal CSS classes use short encoded names (e.g. `av01`, `av02`) per project convention.
|
|
254
|
+
|
|
255
|
+
> **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,223 @@
|
|
|
1
|
+
## COMPONENT IDENTITY
|
|
2
|
+
|
|
3
|
+
- **Import**: `import { Badge } from 'solid-tom-ui';`
|
|
4
|
+
- **Export**: `Badge` (named export), `BadgeVariantsProps` (type export)
|
|
5
|
+
- **Framework**: SolidJS
|
|
6
|
+
- **Purpose**: Small label/tag for status, category, count, or metadata display
|
|
7
|
+
|
|
8
|
+
## TYPE SIGNATURE
|
|
9
|
+
|
|
10
|
+
```typescript
|
|
11
|
+
import { Badge } from 'solid-tom-ui';
|
|
12
|
+
|
|
13
|
+
interface BadgeProps {
|
|
14
|
+
content?: SolidComponent; // Text string or JSXElement (default: "lorem")
|
|
15
|
+
size?: '3xs' | '2xs' | 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | '3xl';
|
|
16
|
+
color?: 'neutral' | 'primary' | 'secondary' | 'accent' | 'info' | 'success' | 'warning' | 'error';
|
|
17
|
+
variants?: 'outline' | 'soft' | 'dashed';
|
|
18
|
+
class?: string; // Append additional Tailwind classes
|
|
19
|
+
overrideClass?: string; // Completely replace all variant classes
|
|
20
|
+
customColor?: string; // Custom CSS color string
|
|
21
|
+
}
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## CLASS SLOTS
|
|
25
|
+
|
|
26
|
+
`Badge` is a single-element component. Use `class` to append classes and `overrideClass` to fully replace all variant classes. No named sub-element slots.
|
|
27
|
+
|
|
28
|
+
> **CSS encoding**: internal CSS classes use short encoded names (e.g. `bg01`, `bg02`) per project convention.
|
|
29
|
+
|
|
30
|
+
## DEFAULTS
|
|
31
|
+
|
|
32
|
+
| Prop | Default |
|
|
33
|
+
| ---------- | ----------- |
|
|
34
|
+
| `size` | `"md"` |
|
|
35
|
+
| `color` | `"primary"` |
|
|
36
|
+
| `variants` | `"soft"` |
|
|
37
|
+
| `content` | `"lorem"` |
|
|
38
|
+
|
|
39
|
+
## SIZE REFERENCE
|
|
40
|
+
|
|
41
|
+
| Size | Height | Font size |
|
|
42
|
+
| ----- | ------ | ----------------- |
|
|
43
|
+
| `3xs` | h-3.5 | text-[10px] |
|
|
44
|
+
| `2xs` | h-4 | text-xs |
|
|
45
|
+
| `xs` | h-4.5 | text-sm |
|
|
46
|
+
| `sm` | h-5 | text-sm |
|
|
47
|
+
| `md` | h-5.5 | text-sm (default) |
|
|
48
|
+
| `lg` | h-6 | text-base |
|
|
49
|
+
| `xl` | h-6.5 | text-base |
|
|
50
|
+
| `2xl` | h-7 | text-base |
|
|
51
|
+
| `3xl` | h-7.5 | text-base |
|
|
52
|
+
|
|
53
|
+
## VARIANT SEMANTICS
|
|
54
|
+
|
|
55
|
+
| Variant | Visual appearance | Use case |
|
|
56
|
+
| --------- | ------------------------------- | ---------------------------------- |
|
|
57
|
+
| `soft` | Filled background (low opacity) | Default — status labels, tags |
|
|
58
|
+
| `outline` | Transparent bg, colored border | Category tags, filters |
|
|
59
|
+
| `dashed` | Dashed border, white bg | Draft / temporary / pending states |
|
|
60
|
+
|
|
61
|
+
## COLOR SEMANTICS
|
|
62
|
+
|
|
63
|
+
| Color | Semantic meaning |
|
|
64
|
+
| ----------- | ---------------------------- |
|
|
65
|
+
| `primary` | Brand / highlight (default) |
|
|
66
|
+
| `secondary` | Secondary brand |
|
|
67
|
+
| `accent` | Special highlight |
|
|
68
|
+
| `neutral` | Gray, no meaning, draft |
|
|
69
|
+
| `info` | Informational |
|
|
70
|
+
| `success` | Positive / active / complete |
|
|
71
|
+
| `warning` | Caution / pending |
|
|
72
|
+
| `error` | Negative / failed / critical |
|
|
73
|
+
|
|
74
|
+
## USAGE PATTERNS
|
|
75
|
+
|
|
76
|
+
### Simple text badge
|
|
77
|
+
|
|
78
|
+
```tsx
|
|
79
|
+
<Badge content="Active" color="success" variants="soft" size="sm" />
|
|
80
|
+
<Badge content="Pending" color="warning" variants="soft" size="sm" />
|
|
81
|
+
<Badge content="Failed" color="error" variants="soft" size="sm" />
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Status indicators
|
|
85
|
+
|
|
86
|
+
```tsx
|
|
87
|
+
// Active/inactive status
|
|
88
|
+
<Badge color="success" variants="soft" size="xs" content="Active" />
|
|
89
|
+
<Badge color="error" variants="soft" size="xs" content="Inactive" />
|
|
90
|
+
<Badge color="warning" variants="soft" size="xs" content="Pending" />
|
|
91
|
+
<Badge color="info" variants="soft" size="xs" content="Processing" />
|
|
92
|
+
<Badge color="neutral" variants="soft" size="xs" content="Draft" />
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Category / filter tags
|
|
96
|
+
|
|
97
|
+
```tsx
|
|
98
|
+
<Badge color="primary" variants="outline" size="xs" content="Technology" />
|
|
99
|
+
<Badge color="secondary" variants="outline" size="xs" content="Design" />
|
|
100
|
+
<Badge color="accent" variants="outline" size="xs" content="Marketing" />
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### Notification count badges
|
|
104
|
+
|
|
105
|
+
```tsx
|
|
106
|
+
// Small number counts — use tiny sizes
|
|
107
|
+
<Badge color="error" variants="soft" size="3xs" content="5" />
|
|
108
|
+
<Badge color="primary" variants="soft" size="3xs" content="12" />
|
|
109
|
+
<Badge color="success" variants="soft" size="3xs" content="99+" />
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### Priority levels
|
|
113
|
+
|
|
114
|
+
```tsx
|
|
115
|
+
<Badge color="error" variants="dashed" size="xs" content="Critical" />
|
|
116
|
+
<Badge color="warning" variants="dashed" size="xs" content="High" />
|
|
117
|
+
<Badge color="info" variants="dashed" size="xs" content="Medium" />
|
|
118
|
+
<Badge color="neutral" variants="dashed" size="xs" content="Low" />
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Badge with icon (JSX content)
|
|
122
|
+
|
|
123
|
+
```tsx
|
|
124
|
+
import { Icon } from 'lucide-solid';
|
|
125
|
+
|
|
126
|
+
// Completed badge with checkmark
|
|
127
|
+
<Badge
|
|
128
|
+
color="success"
|
|
129
|
+
variants="soft"
|
|
130
|
+
size="sm"
|
|
131
|
+
content={() => (
|
|
132
|
+
<div class="flex items-center gap-1">
|
|
133
|
+
<Icon name="check" size={12} />
|
|
134
|
+
<span class="-translate-y-px">Completed</span>
|
|
135
|
+
</div>
|
|
136
|
+
)}
|
|
137
|
+
/>
|
|
138
|
+
|
|
139
|
+
// Closable badge (close button inside content)
|
|
140
|
+
<Badge
|
|
141
|
+
color="neutral"
|
|
142
|
+
variants="soft"
|
|
143
|
+
size="sm"
|
|
144
|
+
content={() => (
|
|
145
|
+
<div class="flex items-center gap-1">
|
|
146
|
+
<span class="-translate-y-px">Tag Label</span>
|
|
147
|
+
<Icon name="x" size={10} class="cursor-pointer hover:opacity-70" onClick={handleRemove} />
|
|
148
|
+
</div>
|
|
149
|
+
)}
|
|
150
|
+
/>
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Custom Tailwind classes (append)
|
|
154
|
+
|
|
155
|
+
```tsx
|
|
156
|
+
// Append extra styles — does not remove defaults
|
|
157
|
+
<Badge content="Amber" class="h-5 bg-amber-200 text-sm text-amber-900/80" />
|
|
158
|
+
<Badge content="Gradient" class="h-5 bg-linear-to-r from-purple-400 to-pink-400 text-sm text-white" />
|
|
159
|
+
<Badge content="Pill shape" class="h-5 rounded-full px-3" />
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
### Full class override
|
|
163
|
+
|
|
164
|
+
```tsx
|
|
165
|
+
// Completely replace component classes
|
|
166
|
+
<Badge
|
|
167
|
+
content="Custom"
|
|
168
|
+
overrideClass="inline-flex items-center px-2 py-1 rounded text-xs font-bold bg-purple-600 text-white"
|
|
169
|
+
/>
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
## DECISION RULES
|
|
173
|
+
|
|
174
|
+
**Choosing `variants`:**
|
|
175
|
+
|
|
176
|
+
- Status / label → `soft` (default, most readable)
|
|
177
|
+
- Filter chip / selectable tag → `outline`
|
|
178
|
+
- Unconfirmed / draft / temporary → `dashed`
|
|
179
|
+
|
|
180
|
+
**Choosing `size`:**
|
|
181
|
+
|
|
182
|
+
- Inline with body text → `xs` or `sm`
|
|
183
|
+
- Standalone label → `md` (default)
|
|
184
|
+
- Notification dot / count → `3xs` or `2xs`
|
|
185
|
+
- Headline-level badge → `lg` or `xl`
|
|
186
|
+
|
|
187
|
+
**Choosing `color`:**
|
|
188
|
+
|
|
189
|
+
- Boolean positive state (active, online, success) → `success`
|
|
190
|
+
- Boolean negative state (inactive, offline, error) → `error`
|
|
191
|
+
- Transitional state (loading, pending) → `warning`
|
|
192
|
+
- Informational only → `info`
|
|
193
|
+
- Neutral tags with no semantic meaning → `neutral`
|
|
194
|
+
- Primary brand label → `primary`
|
|
195
|
+
|
|
196
|
+
**Rich content (icons, buttons inside badge):**
|
|
197
|
+
|
|
198
|
+
- Pass a function `() => JSX` or a JSX element to `content`
|
|
199
|
+
- Keep content minimal — badge is meant to be small
|
|
200
|
+
|
|
201
|
+
**Text truncation:**
|
|
202
|
+
|
|
203
|
+
- Long text auto-truncates with ellipsis
|
|
204
|
+
- Wrap badge in a width-constrained container if truncation is needed
|
|
205
|
+
|
|
206
|
+
## ANTI-PATTERNS
|
|
207
|
+
|
|
208
|
+
```tsx
|
|
209
|
+
// ❌ Missing content — shows "lorem" placeholder
|
|
210
|
+
<Badge color="success" />
|
|
211
|
+
|
|
212
|
+
// ❌ Using overrideClass for minor adjustments — use class instead
|
|
213
|
+
<Badge content="X" overrideClass="rounded px-2 text-xs bg-blue-500 text-white flex items-center" />
|
|
214
|
+
// ✅ Prefer class for additive changes
|
|
215
|
+
<Badge content="X" color="info" variants="soft" class="rounded-full px-3" />
|
|
216
|
+
|
|
217
|
+
// ❌ Nesting complex interactive UIs inside Badge content
|
|
218
|
+
// Badge is display-only — avoid heavy interaction inside content
|
|
219
|
+
|
|
220
|
+
// ✅ For notification bubbles over avatars/icons, compose Badge with the parent container
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
> **Unique IDs**: if this component needs to generate HTML `id` attributes, always use `createUniqueId()` from `solid-js` — never `Math.random()` or `Date.now()`.
|
|
File without changes
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
## COMPONENT IDENTITY
|
|
2
|
+
- **Import**: `import { Breadcrumb } from 'solid-tom-ui';`
|
|
3
|
+
- **Export**: `Breadcrumb` (named export)
|
|
4
|
+
- **Framework**: SolidJS
|
|
5
|
+
- **Purpose**: Navigation trail showing hierarchy of current page location
|
|
6
|
+
|
|
7
|
+
## TYPE SIGNATURE
|
|
8
|
+
|
|
9
|
+
```typescript
|
|
10
|
+
import { Breadcrumb } from 'solid-tom-ui';
|
|
11
|
+
|
|
12
|
+
type BreadcrumbProps = {
|
|
13
|
+
items: SolidComponent[]; // REQUIRED: array of items (string | JSXElement | () => JSX)
|
|
14
|
+
separate?: SolidComponent; // Custom separator between items (default: CSS chevron arrow)
|
|
15
|
+
class?: Partial<Record<'root' | 'item', string>>; // Scoped custom classes
|
|
16
|
+
onItemClick?: (e: MouseEvent) => void; // Click handler for any item
|
|
17
|
+
};
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## KEY RULES
|
|
21
|
+
- `items` is the **only required prop**
|
|
22
|
+
- Items are rendered in order: `items[0]` → separator → `items[1]` → ... → `items[n-1]`
|
|
23
|
+
- Separator is inserted **between** items, **not after the last** item
|
|
24
|
+
- Each item can be a plain string or any JSXElement (supports icons, links, styled content)
|
|
25
|
+
- `onItemClick` fires for **every** item clicked — use the event target to identify which item
|
|
26
|
+
|
|
27
|
+
## USAGE PATTERNS
|
|
28
|
+
|
|
29
|
+
### Minimal — plain text items
|
|
30
|
+
```tsx
|
|
31
|
+
<Breadcrumb items={['Home', 'Products', 'Electronics', 'Laptops']} />
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Custom separator
|
|
35
|
+
```tsx
|
|
36
|
+
// Text separator
|
|
37
|
+
<Breadcrumb
|
|
38
|
+
items={['Home', 'Settings', 'Profile']}
|
|
39
|
+
separate={<span class="mx-2 text-gray-400">/</span>}
|
|
40
|
+
/>
|
|
41
|
+
|
|
42
|
+
// Icon separator
|
|
43
|
+
<Breadcrumb
|
|
44
|
+
items={['Home', 'Settings', 'Profile']}
|
|
45
|
+
separate={<DynamicIcon name="chevron-right" size={14} class="mx-1 text-gray-400" />}
|
|
46
|
+
/>
|
|
47
|
+
|
|
48
|
+
// Dash separator
|
|
49
|
+
<Breadcrumb
|
|
50
|
+
items={['Section 1', 'Section 2', 'Section 3']}
|
|
51
|
+
separate={<div class="mx-2">-</div>}
|
|
52
|
+
/>
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### With icons in items
|
|
56
|
+
```tsx
|
|
57
|
+
import { DynamicIcon } from 'solid-tom-ui';
|
|
58
|
+
|
|
59
|
+
<Breadcrumb
|
|
60
|
+
items={[
|
|
61
|
+
<div class="flex items-center gap-2">
|
|
62
|
+
<DynamicIcon name="home" size={16} />
|
|
63
|
+
Home
|
|
64
|
+
</div>,
|
|
65
|
+
<div class="flex items-center gap-2">
|
|
66
|
+
<DynamicIcon name="folder" size={16} />
|
|
67
|
+
Documents
|
|
68
|
+
</div>,
|
|
69
|
+
<div class="flex items-center gap-2">
|
|
70
|
+
<DynamicIcon name="file" size={16} />
|
|
71
|
+
report.pdf
|
|
72
|
+
</div>,
|
|
73
|
+
]}
|
|
74
|
+
/>
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
### With click handler
|
|
78
|
+
```tsx
|
|
79
|
+
const [activePath, setActivePath] = createSignal<string[]>(['Home', 'Products']);
|
|
80
|
+
|
|
81
|
+
<Breadcrumb
|
|
82
|
+
items={activePath()}
|
|
83
|
+
onItemClick={(e) => {
|
|
84
|
+
const clickedText = (e.target as HTMLElement).textContent;
|
|
85
|
+
console.log('Clicked breadcrumb item:', clickedText);
|
|
86
|
+
// Handle navigation here
|
|
87
|
+
}}
|
|
88
|
+
/>
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Custom CSS classes
|
|
92
|
+
```tsx
|
|
93
|
+
<Breadcrumb
|
|
94
|
+
items={['Home', 'Library', 'Data']}
|
|
95
|
+
class={{
|
|
96
|
+
root: 'bg-gray-100 rounded-lg px-4 py-2',
|
|
97
|
+
item: 'text-blue-600 hover:text-blue-800 font-medium',
|
|
98
|
+
}}
|
|
99
|
+
/>
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Clickable items as anchor tags
|
|
103
|
+
```tsx
|
|
104
|
+
<Breadcrumb
|
|
105
|
+
items={[
|
|
106
|
+
<a href="/" class="hover:underline">Home</a>,
|
|
107
|
+
<a href="/products" class="hover:underline">Products</a>,
|
|
108
|
+
<span class="text-gray-500">Current Page</span>,
|
|
109
|
+
]}
|
|
110
|
+
/>
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## DECISION RULES
|
|
114
|
+
|
|
115
|
+
**When to use a custom separator:**
|
|
116
|
+
- Default: use the built-in CSS chevron (no `separate` prop needed)
|
|
117
|
+
- Brand-specific style: pass a custom icon or character via `separate`
|
|
118
|
+
- Minimal/flat UI: use `<span class="mx-2">/</span>`
|
|
119
|
+
|
|
120
|
+
**Item content strategy:**
|
|
121
|
+
- Plain navigation labels → plain strings
|
|
122
|
+
- Route with icon → JSXElement with icon + label
|
|
123
|
+
- Clickable items → wrap in `<a>` tags inside the JSX items, OR use `onItemClick`
|
|
124
|
+
- Last item (current page) → typically rendered non-clickable / different style
|
|
125
|
+
|
|
126
|
+
**When NOT to use Breadcrumb:**
|
|
127
|
+
- If hierarchy depth is always 1 level → use a back button instead
|
|
128
|
+
- If items are dynamic and represent tabs or steps → use a stepper or tabs component
|
|
129
|
+
|
|
130
|
+
## COMMON PATTERNS IN APPS
|
|
131
|
+
|
|
132
|
+
### Dynamic breadcrumb from route
|
|
133
|
+
```tsx
|
|
134
|
+
const routes = () => [
|
|
135
|
+
{ label: 'Home', href: '/' },
|
|
136
|
+
{ label: 'Products', href: '/products' },
|
|
137
|
+
{ label: currentProduct().name, href: null },
|
|
138
|
+
];
|
|
139
|
+
|
|
140
|
+
<Breadcrumb
|
|
141
|
+
items={routes().map(r =>
|
|
142
|
+
r.href
|
|
143
|
+
? <a href={r.href} class="hover:underline">{r.label}</a>
|
|
144
|
+
: <span>{r.label}</span>
|
|
145
|
+
)}
|
|
146
|
+
/>
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### File path navigator
|
|
150
|
+
```tsx
|
|
151
|
+
const pathParts = () => currentPath().split('/').filter(Boolean);
|
|
152
|
+
|
|
153
|
+
<Breadcrumb
|
|
154
|
+
items={['Root', ...pathParts()]}
|
|
155
|
+
separate={<span class="mx-1 text-gray-400">/</span>}
|
|
156
|
+
onItemClick={(e) => navigateToSegment(e)}
|
|
157
|
+
/>
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
## ANTI-PATTERNS
|
|
161
|
+
```tsx
|
|
162
|
+
// ❌ Empty items array — renders nothing useful
|
|
163
|
+
<Breadcrumb items={[]} />
|
|
164
|
+
|
|
165
|
+
// ❌ Passing a separator that includes the chevron logic itself when default works fine
|
|
166
|
+
<Breadcrumb items={items} separate={<span>›</span>} /> // redundant if default style fits
|
|
167
|
+
|
|
168
|
+
// ✅ Use default separator when it fits the design system
|
|
169
|
+
<Breadcrumb items={items} />
|
|
170
|
+
```
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## Component Conventions
|
|
174
|
+
|
|
175
|
+
> **CSS encoding**: internal CSS classes use short encoded names (e.g. `bc01`, `bc02`) per project convention.
|
|
176
|
+
|
|
177
|
+
> **Unique IDs**: if this component needs to generate HTML `id` attributes, always use `createUniqueId()` from `solid-js` — never `Math.random()` or `Date.now()`.
|