solid-tom-ui 1.0.7 → 1.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +246 -246
- package/dist/README.md +246 -0
- package/dist/components/avatar/avatar.js.map +1 -0
- package/dist/components/avatar/index.d.ts +3 -0
- package/{components → dist/components}/avatar/index.d.ts.map +1 -1
- package/dist/components/badge/badge.js.map +1 -0
- package/dist/components/breadcrumb/breadcrumb.js.map +1 -0
- package/dist/components/button/button.js.map +1 -0
- package/dist/components/button/index.d.ts +3 -0
- package/{components → dist/components}/button/index.d.ts.map +1 -1
- package/dist/components/carousel/carousel.js.map +1 -0
- package/dist/components/chat-bubble/chatBubble.js.map +1 -0
- package/dist/components/checkbox/checkbox.js.map +1 -0
- package/dist/components/collapse/collapse.js.map +1 -0
- package/dist/components/collapse/index.d.ts +3 -0
- package/{components → dist/components}/collapse/index.d.ts.map +1 -1
- package/dist/components/context-menu/context-menu.js.map +1 -0
- package/dist/components/context-menu/context-menu.store.js.map +1 -0
- package/dist/components/divider/divider.js.map +1 -0
- package/dist/components/dropdown/dropdown.js.map +1 -0
- package/dist/components/dropdown/dropdown.store.js.map +1 -0
- package/dist/components/float-button/float-button.js.map +1 -0
- package/dist/components/float-button/index.d.ts +3 -0
- package/{components → dist/components}/float-button/index.d.ts.map +1 -1
- package/dist/components/hover-3d-image/hover-3d-image.js.map +1 -0
- package/dist/components/image-preview/image-preview.js.map +1 -0
- package/dist/components/input/index.d.ts +3 -0
- package/dist/components/input/index.d.ts.map +1 -0
- package/dist/components/input/input.js.map +1 -0
- package/dist/components/input/input.utils.js.map +1 -0
- package/dist/components/input/variants/input-color.js.map +1 -0
- package/dist/components/input/variants/input-date.js.map +1 -0
- package/dist/components/input/variants/input-number.js.map +1 -0
- package/dist/components/input/variants/input-otp.js.map +1 -0
- package/dist/components/input/variants/input-password.js.map +1 -0
- package/dist/components/input/variants/input-radio.js.map +1 -0
- package/dist/components/input/variants/input-range.js.map +1 -0
- package/dist/components/input/variants/input-text.js.map +1 -0
- package/dist/components/input/variants/input-textarea.js.map +1 -0
- package/dist/components/loading/loading.js.map +1 -0
- package/dist/components/mansory/mansory.js.map +1 -0
- package/dist/components/menu/index.d.ts +4 -0
- package/{components → dist/components}/menu/index.d.ts.map +1 -1
- package/dist/components/menu/menu.js.map +1 -0
- package/{components → dist/components}/menu/menu.types.d.ts +7 -7
- package/{components → dist/components}/menu/menu.types.d.ts.map +1 -1
- package/dist/components/modal/modal.js.map +1 -0
- package/dist/components/modal/modalContext.js.map +1 -0
- package/dist/components/pagination/pagination.js.map +1 -0
- package/dist/components/progress-bar/progress-bar.js.map +1 -0
- package/dist/components/qr-code/qr-code.js.map +1 -0
- package/dist/components/rating/index.d.ts +3 -0
- package/{components → dist/components}/rating/index.d.ts.map +1 -1
- package/dist/components/select/select.js.map +1 -0
- package/dist/components/select-zone/select-zone.js.map +1 -0
- package/dist/components/skeleton/skeleton.js.map +1 -0
- package/dist/components/slider/index.d.ts +3 -0
- package/{components → dist/components}/slider/index.d.ts.map +1 -1
- package/dist/components/slider/slider.js.map +1 -0
- package/dist/components/splitter/splitter.js.map +1 -0
- package/dist/components/steps/steps.js.map +1 -0
- package/dist/components/swap/swap.js.map +1 -0
- package/dist/components/switch/switch.js.map +1 -0
- package/dist/components/tab/tab.js.map +1 -0
- package/dist/components/table/table.js.map +1 -0
- package/dist/components/timeline/timeline.js.map +1 -0
- package/dist/components/toast/icons/ErrorIcon.js.map +1 -0
- package/dist/components/toast/icons/IconCircle.js.map +1 -0
- package/dist/components/toast/icons/InfoIcon.js.map +1 -0
- package/dist/components/toast/icons/LoaderIcon.js.map +1 -0
- package/dist/components/toast/icons/SuccessIcon.js.map +1 -0
- package/dist/components/toast/icons/WarningIcon.js.map +1 -0
- package/dist/components/toast/toast.js.map +1 -0
- package/dist/components/toast/toast.store.js.map +1 -0
- package/dist/components/tooltip/tooltip.js.map +1 -0
- package/{components → dist/components}/tour/tour.d.ts.map +1 -1
- package/{components → dist/components}/tour/tour.js +1 -1
- package/dist/components/tour/tour.js.map +1 -0
- package/dist/components/upload/upload.js.map +1 -0
- package/dist/components/z-index/z-index.context.js.map +1 -0
- package/dist/components/z-index/z-index.js.map +1 -0
- package/dist/components/z-index/z-index.store.js.map +1 -0
- package/dist/components/z-index/z-index.types.js.map +1 -0
- package/dist/package.json +45 -0
- package/dist/skill/avatar.skill.md.txt +255 -0
- package/dist/skill/badge.skill.md.txt +223 -0
- package/dist/skill/blank.skill.md.txt +0 -0
- package/dist/skill/breadcrumb.skill.md.txt +177 -0
- package/dist/skill/button.skill.md.txt +198 -0
- package/dist/skill/carousel.skill.md.txt +406 -0
- package/dist/skill/chat-bubble.skill.md.txt +342 -0
- package/dist/skill/checkbox.skill.md.txt +326 -0
- package/dist/skill/code-preview.skill.md.txt +240 -0
- package/dist/skill/collapse.skill.md.txt +329 -0
- package/dist/skill/context-menu.skill.md.txt +233 -0
- package/dist/skill/diff.skill.md.txt +244 -0
- package/dist/skill/divider.skill.md.txt +151 -0
- package/dist/skill/doc.skill.md.txt +191 -0
- package/dist/skill/drawer.skill.md.txt +157 -0
- package/dist/skill/dropdown.skill.md.txt +198 -0
- package/dist/skill/float-button.skill.md.txt +315 -0
- package/dist/skill/hover-3d-image.skill.md.txt +120 -0
- package/dist/skill/iframe.skill.md.txt +114 -0
- package/dist/skill/image-preview.skill.md.txt +162 -0
- package/dist/skill/indicator.skill.md.txt +60 -0
- package/dist/skill/input.skill.md.txt +489 -0
- package/dist/skill/loading.skill.md.txt +127 -0
- package/dist/skill/mansory.skill.md.txt +0 -0
- package/dist/skill/menu.skill.md.txt +476 -0
- package/dist/skill/modal.skill.md.txt +359 -0
- package/dist/skill/pagination.skill.md.txt +405 -0
- package/dist/skill/progress-bar.skill.md.txt +207 -0
- package/dist/skill/qr-code.skill.md.txt +136 -0
- package/dist/skill/rating.skill.md.txt +167 -0
- package/dist/skill/select-zone.skill.md.txt +93 -0
- package/dist/skill/select.skill.md.txt +663 -0
- package/dist/skill/skeleton.skill.md.txt +192 -0
- package/dist/skill/slider.skill.md.txt +404 -0
- package/dist/skill/splitter.skill.md.txt +411 -0
- package/dist/skill/steps.skill.md.txt +264 -0
- package/dist/skill/swap.skill.md.txt +139 -0
- package/dist/skill/switch.skill.md.txt +191 -0
- package/dist/skill/tab.skill.md.txt +484 -0
- package/dist/skill/table.example.header.md.txt +667 -0
- package/dist/skill/table.skill.md.txt +1407 -0
- package/dist/skill/text-rotate.skill.md.txt +186 -0
- package/dist/skill/timeline.skill.md.txt +247 -0
- package/dist/skill/toast.skill.md.txt +531 -0
- package/dist/skill/tooltip.skill.md.txt +222 -0
- package/dist/skill/tour.skill.md.txt +156 -0
- package/dist/skill/upload.skill.md.txt +358 -0
- package/dist/skill/z-index.skill.md.txt +0 -0
- package/{solid-ui.css → dist/solid-ui.css} +2 -2
- package/dist/utils/cn.js.map +1 -0
- package/dist/utils/element-tracker.js.map +1 -0
- package/dist/utils/helper.js.map +1 -0
- package/dist/utils/hoc.js.map +1 -0
- package/package.json +101 -7
- package/components/avatar/avatar.js.map +0 -1
- package/components/avatar/index.d.ts +0 -2
- package/components/badge/badge.js.map +0 -1
- package/components/breadcrumb/breadcrumb.js.map +0 -1
- package/components/button/button.js.map +0 -1
- package/components/button/index.d.ts +0 -2
- package/components/carousel/carousel.js.map +0 -1
- package/components/chat-bubble/chatBubble.js.map +0 -1
- package/components/checkbox/checkbox.js.map +0 -1
- package/components/collapse/collapse.js.map +0 -1
- package/components/collapse/index.d.ts +0 -2
- package/components/context-menu/context-menu.js.map +0 -1
- package/components/context-menu/context-menu.store.js.map +0 -1
- package/components/divider/divider.js.map +0 -1
- package/components/dropdown/dropdown.js.map +0 -1
- package/components/dropdown/dropdown.store.js.map +0 -1
- package/components/float-button/float-button.js.map +0 -1
- package/components/float-button/index.d.ts +0 -2
- package/components/hover-3d-image/hover-3d-image.js.map +0 -1
- package/components/image-preview/image-preview.js.map +0 -1
- package/components/input/index.d.ts +0 -2
- package/components/input/index.d.ts.map +0 -1
- package/components/input/input.js.map +0 -1
- package/components/input/input.utils.js.map +0 -1
- package/components/input/variants/input-color.js.map +0 -1
- package/components/input/variants/input-date.js.map +0 -1
- package/components/input/variants/input-number.js.map +0 -1
- package/components/input/variants/input-otp.js.map +0 -1
- package/components/input/variants/input-password.js.map +0 -1
- package/components/input/variants/input-radio.js.map +0 -1
- package/components/input/variants/input-range.js.map +0 -1
- package/components/input/variants/input-text.js.map +0 -1
- package/components/input/variants/input-textarea.js.map +0 -1
- package/components/loading/loading.js.map +0 -1
- package/components/mansory/mansory.js.map +0 -1
- package/components/menu/index.d.ts +0 -4
- package/components/menu/menu.js.map +0 -1
- package/components/modal/modal.js.map +0 -1
- package/components/modal/modalContext.js.map +0 -1
- package/components/pagination/pagination.js.map +0 -1
- package/components/progress-bar/progress-bar.js.map +0 -1
- package/components/qr-code/qr-code.js.map +0 -1
- package/components/rating/index.d.ts +0 -2
- package/components/select/select.js.map +0 -1
- package/components/select-zone/select-zone.js.map +0 -1
- package/components/skeleton/skeleton.js.map +0 -1
- package/components/slider/index.d.ts +0 -2
- package/components/slider/slider.js.map +0 -1
- package/components/splitter/splitter.js.map +0 -1
- package/components/steps/steps.js.map +0 -1
- package/components/swap/swap.js.map +0 -1
- package/components/switch/switch.js.map +0 -1
- package/components/tab/tab.js.map +0 -1
- package/components/table/table.js.map +0 -1
- package/components/timeline/timeline.js.map +0 -1
- package/components/toast/icons/ErrorIcon.js.map +0 -1
- package/components/toast/icons/IconCircle.js.map +0 -1
- package/components/toast/icons/InfoIcon.js.map +0 -1
- package/components/toast/icons/LoaderIcon.js.map +0 -1
- package/components/toast/icons/SuccessIcon.js.map +0 -1
- package/components/toast/icons/WarningIcon.js.map +0 -1
- package/components/toast/toast.js.map +0 -1
- package/components/toast/toast.store.js.map +0 -1
- package/components/tooltip/tooltip.js.map +0 -1
- package/components/tour/tour.js.map +0 -1
- package/components/upload/upload.js.map +0 -1
- package/components/z-index/z-index.context.js.map +0 -1
- package/components/z-index/z-index.js.map +0 -1
- package/components/z-index/z-index.store.js.map +0 -1
- package/components/z-index/z-index.types.js.map +0 -1
- package/utils/cn.js.map +0 -1
- package/utils/element-tracker.js.map +0 -1
- package/utils/helper.js.map +0 -1
- package/utils/hoc.js.map +0 -1
- package/workspace.code-workspace +0 -8
- /package/{components → dist/components}/avatar/avatar.d.ts +0 -0
- /package/{components → dist/components}/avatar/avatar.d.ts.map +0 -0
- /package/{components → dist/components}/avatar/avatar.js +0 -0
- /package/{components → dist/components}/avatar/avatar.types.d.ts +0 -0
- /package/{components → dist/components}/avatar/avatar.types.d.ts.map +0 -0
- /package/{components → dist/components}/badge/badge.d.ts +0 -0
- /package/{components → dist/components}/badge/badge.d.ts.map +0 -0
- /package/{components → dist/components}/badge/badge.js +0 -0
- /package/{components → dist/components}/badge/badge.types.d.ts +0 -0
- /package/{components → dist/components}/badge/badge.types.d.ts.map +0 -0
- /package/{components → dist/components}/badge/index.d.ts +0 -0
- /package/{components → dist/components}/badge/index.d.ts.map +0 -0
- /package/{components → dist/components}/blank/blank.d.ts +0 -0
- /package/{components → dist/components}/blank/blank.d.ts.map +0 -0
- /package/{components → dist/components}/blank/index.d.ts +0 -0
- /package/{components → dist/components}/blank/index.d.ts.map +0 -0
- /package/{components → dist/components}/breadcrumb/breadcrumb.d.ts +0 -0
- /package/{components → dist/components}/breadcrumb/breadcrumb.d.ts.map +0 -0
- /package/{components → dist/components}/breadcrumb/breadcrumb.js +0 -0
- /package/{components → dist/components}/breadcrumb/index.d.ts +0 -0
- /package/{components → dist/components}/breadcrumb/index.d.ts.map +0 -0
- /package/{components → dist/components}/button/button.d.ts +0 -0
- /package/{components → dist/components}/button/button.d.ts.map +0 -0
- /package/{components → dist/components}/button/button.js +0 -0
- /package/{components → dist/components}/button/button.types.d.ts +0 -0
- /package/{components → dist/components}/button/button.types.d.ts.map +0 -0
- /package/{components → dist/components}/carousel/carousel.d.ts +0 -0
- /package/{components → dist/components}/carousel/carousel.d.ts.map +0 -0
- /package/{components → dist/components}/carousel/carousel.js +0 -0
- /package/{components → dist/components}/carousel/carousel.types.d.ts +0 -0
- /package/{components → dist/components}/carousel/carousel.types.d.ts.map +0 -0
- /package/{components → dist/components}/carousel/index.d.ts +0 -0
- /package/{components → dist/components}/carousel/index.d.ts.map +0 -0
- /package/{components → dist/components}/chat-bubble/chatBubble.d.ts +0 -0
- /package/{components → dist/components}/chat-bubble/chatBubble.d.ts.map +0 -0
- /package/{components → dist/components}/chat-bubble/chatBubble.js +0 -0
- /package/{components → dist/components}/chat-bubble/chatBubble.type.d.ts +0 -0
- /package/{components → dist/components}/chat-bubble/chatBubble.type.d.ts.map +0 -0
- /package/{components → dist/components}/chat-bubble/index.d.ts +0 -0
- /package/{components → dist/components}/chat-bubble/index.d.ts.map +0 -0
- /package/{components → dist/components}/checkbox/checkbox.d.ts +0 -0
- /package/{components → dist/components}/checkbox/checkbox.d.ts.map +0 -0
- /package/{components → dist/components}/checkbox/checkbox.js +0 -0
- /package/{components → dist/components}/checkbox/index.d.ts +0 -0
- /package/{components → dist/components}/checkbox/index.d.ts.map +0 -0
- /package/{components → dist/components}/collapse/collapse.d.ts +0 -0
- /package/{components → dist/components}/collapse/collapse.d.ts.map +0 -0
- /package/{components → dist/components}/collapse/collapse.js +0 -0
- /package/{components → dist/components}/collapse/collapse.types.d.ts +0 -0
- /package/{components → dist/components}/collapse/collapse.types.d.ts.map +0 -0
- /package/{components → dist/components}/context-menu/context-menu.d.ts +0 -0
- /package/{components → dist/components}/context-menu/context-menu.d.ts.map +0 -0
- /package/{components → dist/components}/context-menu/context-menu.js +0 -0
- /package/{components → dist/components}/context-menu/context-menu.store.d.ts +0 -0
- /package/{components → dist/components}/context-menu/context-menu.store.d.ts.map +0 -0
- /package/{components → dist/components}/context-menu/context-menu.store.js +0 -0
- /package/{components → dist/components}/context-menu/context-menu.types.d.ts +0 -0
- /package/{components → dist/components}/context-menu/context-menu.types.d.ts.map +0 -0
- /package/{components → dist/components}/context-menu/index.d.ts +0 -0
- /package/{components → dist/components}/context-menu/index.d.ts.map +0 -0
- /package/{components → dist/components}/diff/diff.d.ts +0 -0
- /package/{components → dist/components}/diff/diff.d.ts.map +0 -0
- /package/{components → dist/components}/diff/diff.js +0 -0
- /package/{components → dist/components}/diff/diff.js.map +0 -0
- /package/{components → dist/components}/diff/index.d.ts +0 -0
- /package/{components → dist/components}/diff/index.d.ts.map +0 -0
- /package/{components → dist/components}/divider/divider.d.ts +0 -0
- /package/{components → dist/components}/divider/divider.d.ts.map +0 -0
- /package/{components → dist/components}/divider/divider.js +0 -0
- /package/{components → dist/components}/divider/divider.types.d.ts +0 -0
- /package/{components → dist/components}/divider/divider.types.d.ts.map +0 -0
- /package/{components → dist/components}/divider/index.d.ts +0 -0
- /package/{components → dist/components}/divider/index.d.ts.map +0 -0
- /package/{components → dist/components}/drawer/drawer.d.ts +0 -0
- /package/{components → dist/components}/drawer/drawer.d.ts.map +0 -0
- /package/{components → dist/components}/drawer/drawer.js +0 -0
- /package/{components → dist/components}/drawer/drawer.js.map +0 -0
- /package/{components → dist/components}/drawer/drawer.types.d.ts +0 -0
- /package/{components → dist/components}/drawer/drawer.types.d.ts.map +0 -0
- /package/{components → dist/components}/drawer/index.d.ts +0 -0
- /package/{components → dist/components}/drawer/index.d.ts.map +0 -0
- /package/{components → dist/components}/dropdown/dropdown.d.ts +0 -0
- /package/{components → dist/components}/dropdown/dropdown.d.ts.map +0 -0
- /package/{components → dist/components}/dropdown/dropdown.js +0 -0
- /package/{components → dist/components}/dropdown/dropdown.store.d.ts +0 -0
- /package/{components → dist/components}/dropdown/dropdown.store.d.ts.map +0 -0
- /package/{components → dist/components}/dropdown/dropdown.store.js +0 -0
- /package/{components → dist/components}/dropdown/dropdown.types.d.ts +0 -0
- /package/{components → dist/components}/dropdown/dropdown.types.d.ts.map +0 -0
- /package/{components → dist/components}/dropdown/index.d.ts +0 -0
- /package/{components → dist/components}/dropdown/index.d.ts.map +0 -0
- /package/{components → dist/components}/float-button/float-button.d.ts +0 -0
- /package/{components → dist/components}/float-button/float-button.d.ts.map +0 -0
- /package/{components → dist/components}/float-button/float-button.js +0 -0
- /package/{components → dist/components}/float-button/float-button.types.d.ts +0 -0
- /package/{components → dist/components}/float-button/float-button.types.d.ts.map +0 -0
- /package/{components → dist/components}/hover-3d-image/hover-3d-example.d.ts +0 -0
- /package/{components → dist/components}/hover-3d-image/hover-3d-example.d.ts.map +0 -0
- /package/{components → dist/components}/hover-3d-image/hover-3d-image.d.ts +0 -0
- /package/{components → dist/components}/hover-3d-image/hover-3d-image.d.ts.map +0 -0
- /package/{components → dist/components}/hover-3d-image/hover-3d-image.js +0 -0
- /package/{components → dist/components}/hover-3d-image/index.d.ts +0 -0
- /package/{components → dist/components}/hover-3d-image/index.d.ts.map +0 -0
- /package/{components → dist/components}/image-preview/image-preview.d.ts +0 -0
- /package/{components → dist/components}/image-preview/image-preview.d.ts.map +0 -0
- /package/{components → dist/components}/image-preview/image-preview.js +0 -0
- /package/{components → dist/components}/image-preview/index.d.ts +0 -0
- /package/{components → dist/components}/image-preview/index.d.ts.map +0 -0
- /package/{components → dist/components}/indicator/index.d.ts +0 -0
- /package/{components → dist/components}/indicator/index.d.ts.map +0 -0
- /package/{components → dist/components}/indicator/indicator.d.ts +0 -0
- /package/{components → dist/components}/indicator/indicator.d.ts.map +0 -0
- /package/{components → dist/components}/indicator/indicator.js +0 -0
- /package/{components → dist/components}/indicator/indicator.js.map +0 -0
- /package/{components → dist/components}/indicator/indicator.types.d.ts +0 -0
- /package/{components → dist/components}/indicator/indicator.types.d.ts.map +0 -0
- /package/{components → dist/components}/input/input.d.ts +0 -0
- /package/{components → dist/components}/input/input.d.ts.map +0 -0
- /package/{components → dist/components}/input/input.js +0 -0
- /package/{components → dist/components}/input/input.types.d.ts +0 -0
- /package/{components → dist/components}/input/input.types.d.ts.map +0 -0
- /package/{components → dist/components}/input/input.utils.d.ts +0 -0
- /package/{components → dist/components}/input/input.utils.d.ts.map +0 -0
- /package/{components → dist/components}/input/input.utils.js +0 -0
- /package/{components → dist/components}/input/variants/input-color.d.ts +0 -0
- /package/{components → dist/components}/input/variants/input-color.d.ts.map +0 -0
- /package/{components → dist/components}/input/variants/input-color.js +0 -0
- /package/{components → dist/components}/input/variants/input-date.d.ts +0 -0
- /package/{components → dist/components}/input/variants/input-date.d.ts.map +0 -0
- /package/{components → dist/components}/input/variants/input-date.js +0 -0
- /package/{components → dist/components}/input/variants/input-number.d.ts +0 -0
- /package/{components → dist/components}/input/variants/input-number.d.ts.map +0 -0
- /package/{components → dist/components}/input/variants/input-number.js +0 -0
- /package/{components → dist/components}/input/variants/input-otp.d.ts +0 -0
- /package/{components → dist/components}/input/variants/input-otp.d.ts.map +0 -0
- /package/{components → dist/components}/input/variants/input-otp.js +0 -0
- /package/{components → dist/components}/input/variants/input-password.d.ts +0 -0
- /package/{components → dist/components}/input/variants/input-password.d.ts.map +0 -0
- /package/{components → dist/components}/input/variants/input-password.js +0 -0
- /package/{components → dist/components}/input/variants/input-radio.d.ts +0 -0
- /package/{components → dist/components}/input/variants/input-radio.d.ts.map +0 -0
- /package/{components → dist/components}/input/variants/input-radio.js +0 -0
- /package/{components → dist/components}/input/variants/input-range.d.ts +0 -0
- /package/{components → dist/components}/input/variants/input-range.d.ts.map +0 -0
- /package/{components → dist/components}/input/variants/input-range.js +0 -0
- /package/{components → dist/components}/input/variants/input-text.d.ts +0 -0
- /package/{components → dist/components}/input/variants/input-text.d.ts.map +0 -0
- /package/{components → dist/components}/input/variants/input-text.js +0 -0
- /package/{components → dist/components}/input/variants/input-textarea.d.ts +0 -0
- /package/{components → dist/components}/input/variants/input-textarea.d.ts.map +0 -0
- /package/{components → dist/components}/input/variants/input-textarea.js +0 -0
- /package/{components → dist/components}/loading/index.d.ts +0 -0
- /package/{components → dist/components}/loading/index.d.ts.map +0 -0
- /package/{components → dist/components}/loading/loading.d.ts +0 -0
- /package/{components → dist/components}/loading/loading.d.ts.map +0 -0
- /package/{components → dist/components}/loading/loading.js +0 -0
- /package/{components → dist/components}/mansory/index.d.ts +0 -0
- /package/{components → dist/components}/mansory/index.d.ts.map +0 -0
- /package/{components → dist/components}/mansory/mansory.d.ts +0 -0
- /package/{components → dist/components}/mansory/mansory.d.ts.map +0 -0
- /package/{components → dist/components}/mansory/mansory.js +0 -0
- /package/{components → dist/components}/mansory/mansory.types.d.ts +0 -0
- /package/{components → dist/components}/mansory/mansory.types.d.ts.map +0 -0
- /package/{components → dist/components}/menu/menu.d.ts +0 -0
- /package/{components → dist/components}/menu/menu.d.ts.map +0 -0
- /package/{components → dist/components}/menu/menu.data-example.d.ts +0 -0
- /package/{components → dist/components}/menu/menu.data-example.d.ts.map +0 -0
- /package/{components → dist/components}/menu/menu.js +0 -0
- /package/{components → dist/components}/modal/index.d.ts +0 -0
- /package/{components → dist/components}/modal/index.d.ts.map +0 -0
- /package/{components → dist/components}/modal/modal.d.ts +0 -0
- /package/{components → dist/components}/modal/modal.d.ts.map +0 -0
- /package/{components → dist/components}/modal/modal.js +0 -0
- /package/{components → dist/components}/modal/modalContext.d.ts +0 -0
- /package/{components → dist/components}/modal/modalContext.d.ts.map +0 -0
- /package/{components → dist/components}/modal/modalContext.js +0 -0
- /package/{components → dist/components}/pagination/index.d.ts +0 -0
- /package/{components → dist/components}/pagination/index.d.ts.map +0 -0
- /package/{components → dist/components}/pagination/pagination.d.ts +0 -0
- /package/{components → dist/components}/pagination/pagination.d.ts.map +0 -0
- /package/{components → dist/components}/pagination/pagination.js +0 -0
- /package/{components → dist/components}/pagination/pagination.types.d.ts +0 -0
- /package/{components → dist/components}/pagination/pagination.types.d.ts.map +0 -0
- /package/{components → dist/components}/progress-bar/index.d.ts +0 -0
- /package/{components → dist/components}/progress-bar/index.d.ts.map +0 -0
- /package/{components → dist/components}/progress-bar/progress-bar.d.ts +0 -0
- /package/{components → dist/components}/progress-bar/progress-bar.d.ts.map +0 -0
- /package/{components → dist/components}/progress-bar/progress-bar.js +0 -0
- /package/{components → dist/components}/progress-bar/progress-bar.types.d.ts +0 -0
- /package/{components → dist/components}/progress-bar/progress-bar.types.d.ts.map +0 -0
- /package/{components → dist/components}/qr-code/index.d.ts +0 -0
- /package/{components → dist/components}/qr-code/index.d.ts.map +0 -0
- /package/{components → dist/components}/qr-code/qr-code.d.ts +0 -0
- /package/{components → dist/components}/qr-code/qr-code.d.ts.map +0 -0
- /package/{components → dist/components}/qr-code/qr-code.js +0 -0
- /package/{components → dist/components}/qr-code/qr-code.types.d.ts +0 -0
- /package/{components → dist/components}/qr-code/qr-code.types.d.ts.map +0 -0
- /package/{components → dist/components}/rating/rating.d.ts +0 -0
- /package/{components → dist/components}/rating/rating.d.ts.map +0 -0
- /package/{components → dist/components}/rating/rating.js +0 -0
- /package/{components → dist/components}/rating/rating.js.map +0 -0
- /package/{components → dist/components}/rating/rating.types.d.ts +0 -0
- /package/{components → dist/components}/rating/rating.types.d.ts.map +0 -0
- /package/{components → dist/components}/select/index.d.ts +0 -0
- /package/{components → dist/components}/select/index.d.ts.map +0 -0
- /package/{components → dist/components}/select/select.d.ts +0 -0
- /package/{components → dist/components}/select/select.d.ts.map +0 -0
- /package/{components → dist/components}/select/select.js +0 -0
- /package/{components → dist/components}/select/select.types.d.ts +0 -0
- /package/{components → dist/components}/select/select.types.d.ts.map +0 -0
- /package/{components → dist/components}/select-zone/index.d.ts +0 -0
- /package/{components → dist/components}/select-zone/index.d.ts.map +0 -0
- /package/{components → dist/components}/select-zone/select-zone.d.ts +0 -0
- /package/{components → dist/components}/select-zone/select-zone.d.ts.map +0 -0
- /package/{components → dist/components}/select-zone/select-zone.js +0 -0
- /package/{components → dist/components}/select-zone/select-zone.types.d.ts +0 -0
- /package/{components → dist/components}/select-zone/select-zone.types.d.ts.map +0 -0
- /package/{components → dist/components}/skeleton/index.d.ts +0 -0
- /package/{components → dist/components}/skeleton/index.d.ts.map +0 -0
- /package/{components → dist/components}/skeleton/skeleton.d.ts +0 -0
- /package/{components → dist/components}/skeleton/skeleton.d.ts.map +0 -0
- /package/{components → dist/components}/skeleton/skeleton.js +0 -0
- /package/{components → dist/components}/slider/slider.d.ts +0 -0
- /package/{components → dist/components}/slider/slider.d.ts.map +0 -0
- /package/{components → dist/components}/slider/slider.js +0 -0
- /package/{components → dist/components}/slider/slider.types.d.ts +0 -0
- /package/{components → dist/components}/slider/slider.types.d.ts.map +0 -0
- /package/{components → dist/components}/splitter/index.d.ts +0 -0
- /package/{components → dist/components}/splitter/index.d.ts.map +0 -0
- /package/{components → dist/components}/splitter/splitter.d.ts +0 -0
- /package/{components → dist/components}/splitter/splitter.d.ts.map +0 -0
- /package/{components → dist/components}/splitter/splitter.js +0 -0
- /package/{components → dist/components}/splitter/splitter.types.d.ts +0 -0
- /package/{components → dist/components}/splitter/splitter.types.d.ts.map +0 -0
- /package/{components → dist/components}/steps/index.d.ts +0 -0
- /package/{components → dist/components}/steps/index.d.ts.map +0 -0
- /package/{components → dist/components}/steps/steps.d.ts +0 -0
- /package/{components → dist/components}/steps/steps.d.ts.map +0 -0
- /package/{components → dist/components}/steps/steps.js +0 -0
- /package/{components → dist/components}/swap/index.d.ts +0 -0
- /package/{components → dist/components}/swap/index.d.ts.map +0 -0
- /package/{components → dist/components}/swap/swap.d.ts +0 -0
- /package/{components → dist/components}/swap/swap.d.ts.map +0 -0
- /package/{components → dist/components}/swap/swap.js +0 -0
- /package/{components → dist/components}/switch/index.d.ts +0 -0
- /package/{components → dist/components}/switch/index.d.ts.map +0 -0
- /package/{components → dist/components}/switch/switch.d.ts +0 -0
- /package/{components → dist/components}/switch/switch.d.ts.map +0 -0
- /package/{components → dist/components}/switch/switch.js +0 -0
- /package/{components → dist/components}/switch/switch.types.d.ts +0 -0
- /package/{components → dist/components}/switch/switch.types.d.ts.map +0 -0
- /package/{components → dist/components}/tab/index.d.ts +0 -0
- /package/{components → dist/components}/tab/index.d.ts.map +0 -0
- /package/{components → dist/components}/tab/tab.d.ts +0 -0
- /package/{components → dist/components}/tab/tab.d.ts.map +0 -0
- /package/{components → dist/components}/tab/tab.js +0 -0
- /package/{components → dist/components}/tab/tab.types.d.ts +0 -0
- /package/{components → dist/components}/tab/tab.types.d.ts.map +0 -0
- /package/{components → dist/components}/table/index.d.ts +0 -0
- /package/{components → dist/components}/table/index.d.ts.map +0 -0
- /package/{components → dist/components}/table/index.js +0 -0
- /package/{components → dist/components}/table/table.d.ts +0 -0
- /package/{components → dist/components}/table/table.d.ts.map +0 -0
- /package/{components → dist/components}/table/table.js +0 -0
- /package/{components → dist/components}/table/table.types.d.ts +0 -0
- /package/{components → dist/components}/table/table.types.d.ts.map +0 -0
- /package/{components → dist/components}/text-rotate/index.d.ts +0 -0
- /package/{components → dist/components}/text-rotate/index.d.ts.map +0 -0
- /package/{components → dist/components}/text-rotate/text-rotate.d.ts +0 -0
- /package/{components → dist/components}/text-rotate/text-rotate.d.ts.map +0 -0
- /package/{components → dist/components}/text-rotate/text-rotate.js +0 -0
- /package/{components → dist/components}/text-rotate/text-rotate.js.map +0 -0
- /package/{components → dist/components}/timeline/index.d.ts +0 -0
- /package/{components → dist/components}/timeline/index.d.ts.map +0 -0
- /package/{components → dist/components}/timeline/timeline.d.ts +0 -0
- /package/{components → dist/components}/timeline/timeline.d.ts.map +0 -0
- /package/{components → dist/components}/timeline/timeline.js +0 -0
- /package/{components → dist/components}/timeline/timeline.types.d.ts +0 -0
- /package/{components → dist/components}/timeline/timeline.types.d.ts.map +0 -0
- /package/{components → dist/components}/toast/icons/ErrorIcon.d.ts +0 -0
- /package/{components → dist/components}/toast/icons/ErrorIcon.d.ts.map +0 -0
- /package/{components → dist/components}/toast/icons/ErrorIcon.js +0 -0
- /package/{components → dist/components}/toast/icons/IconCircle.d.ts +0 -0
- /package/{components → dist/components}/toast/icons/IconCircle.d.ts.map +0 -0
- /package/{components → dist/components}/toast/icons/IconCircle.js +0 -0
- /package/{components → dist/components}/toast/icons/InfoIcon.d.ts +0 -0
- /package/{components → dist/components}/toast/icons/InfoIcon.d.ts.map +0 -0
- /package/{components → dist/components}/toast/icons/InfoIcon.js +0 -0
- /package/{components → dist/components}/toast/icons/LoaderIcon.d.ts +0 -0
- /package/{components → dist/components}/toast/icons/LoaderIcon.d.ts.map +0 -0
- /package/{components → dist/components}/toast/icons/LoaderIcon.js +0 -0
- /package/{components → dist/components}/toast/icons/SuccessIcon.d.ts +0 -0
- /package/{components → dist/components}/toast/icons/SuccessIcon.d.ts.map +0 -0
- /package/{components → dist/components}/toast/icons/SuccessIcon.js +0 -0
- /package/{components → dist/components}/toast/icons/WarningIcon.d.ts +0 -0
- /package/{components → dist/components}/toast/icons/WarningIcon.d.ts.map +0 -0
- /package/{components → dist/components}/toast/icons/WarningIcon.js +0 -0
- /package/{components → dist/components}/toast/icons/index.d.ts +0 -0
- /package/{components → dist/components}/toast/icons/index.d.ts.map +0 -0
- /package/{components → dist/components}/toast/index.d.ts +0 -0
- /package/{components → dist/components}/toast/index.d.ts.map +0 -0
- /package/{components → dist/components}/toast/toast.d.ts +0 -0
- /package/{components → dist/components}/toast/toast.d.ts.map +0 -0
- /package/{components → dist/components}/toast/toast.js +0 -0
- /package/{components → dist/components}/toast/toast.store.d.ts +0 -0
- /package/{components → dist/components}/toast/toast.store.d.ts.map +0 -0
- /package/{components → dist/components}/toast/toast.store.js +0 -0
- /package/{components → dist/components}/toast/toast.type.d.ts +0 -0
- /package/{components → dist/components}/toast/toast.type.d.ts.map +0 -0
- /package/{components → dist/components}/tooltip/index.d.ts +0 -0
- /package/{components → dist/components}/tooltip/index.d.ts.map +0 -0
- /package/{components → dist/components}/tooltip/tooltip.d.ts +0 -0
- /package/{components → dist/components}/tooltip/tooltip.d.ts.map +0 -0
- /package/{components → dist/components}/tooltip/tooltip.js +0 -0
- /package/{components → dist/components}/tooltip/tooltip.types.d.ts +0 -0
- /package/{components → dist/components}/tooltip/tooltip.types.d.ts.map +0 -0
- /package/{components → dist/components}/tour/index.d.ts +0 -0
- /package/{components → dist/components}/tour/index.d.ts.map +0 -0
- /package/{components → dist/components}/tour/tour.d.ts +0 -0
- /package/{components → dist/components}/tour/tour.types.d.ts +0 -0
- /package/{components → dist/components}/tour/tour.types.d.ts.map +0 -0
- /package/{components → dist/components}/upload/index.d.ts +0 -0
- /package/{components → dist/components}/upload/index.d.ts.map +0 -0
- /package/{components → dist/components}/upload/upload.d.ts +0 -0
- /package/{components → dist/components}/upload/upload.d.ts.map +0 -0
- /package/{components → dist/components}/upload/upload.js +0 -0
- /package/{components → dist/components}/upload/upload.types.d.ts +0 -0
- /package/{components → dist/components}/upload/upload.types.d.ts.map +0 -0
- /package/{components → dist/components}/z-index/index.d.ts +0 -0
- /package/{components → dist/components}/z-index/index.d.ts.map +0 -0
- /package/{components → dist/components}/z-index/z-index.context.d.ts +0 -0
- /package/{components → dist/components}/z-index/z-index.context.d.ts.map +0 -0
- /package/{components → dist/components}/z-index/z-index.context.js +0 -0
- /package/{components → dist/components}/z-index/z-index.d.ts +0 -0
- /package/{components → dist/components}/z-index/z-index.d.ts.map +0 -0
- /package/{components → dist/components}/z-index/z-index.js +0 -0
- /package/{components → dist/components}/z-index/z-index.store.d.ts +0 -0
- /package/{components → dist/components}/z-index/z-index.store.d.ts.map +0 -0
- /package/{components → dist/components}/z-index/z-index.store.js +0 -0
- /package/{components → dist/components}/z-index/z-index.types.d.ts +0 -0
- /package/{components → dist/components}/z-index/z-index.types.d.ts.map +0 -0
- /package/{components → dist/components}/z-index/z-index.types.js +0 -0
- /package/{lib.d.ts → dist/lib.d.ts} +0 -0
- /package/{lib.d.ts.map → dist/lib.d.ts.map} +0 -0
- /package/{lib.js → dist/lib.js} +0 -0
- /package/{type.d.ts → dist/type.d.ts} +0 -0
- /package/{type.d.ts.map → dist/type.d.ts.map} +0 -0
- /package/{utils → dist/utils}/cn.d.ts +0 -0
- /package/{utils → dist/utils}/cn.d.ts.map +0 -0
- /package/{utils → dist/utils}/cn.js +0 -0
- /package/{utils → dist/utils}/element-tracker.js +0 -0
- /package/{utils → dist/utils}/helper.d.ts +0 -0
- /package/{utils → dist/utils}/helper.d.ts.map +0 -0
- /package/{utils → dist/utils}/helper.js +0 -0
- /package/{utils → dist/utils}/hoc.js +0 -0
|
@@ -0,0 +1,476 @@
|
|
|
1
|
+
## COMPONENT IDENTITY
|
|
2
|
+
- **Import**: `import { Menu } from 'solid-tom-ui';`
|
|
3
|
+
- **Export**: `Menu` (named export), `MenuVariantsProps`, `MenuProps` (type exports)
|
|
4
|
+
- **Framework**: SolidJS
|
|
5
|
+
- **Purpose**: Hierarchical navigation menu with nested folders, active highlighting, and horizontal/vertical orientation
|
|
6
|
+
|
|
7
|
+
## TYPE REFERENCE
|
|
8
|
+
|
|
9
|
+
### `MenuProps`
|
|
10
|
+
|
|
11
|
+
| Prop | Type | Default | Description |
|
|
12
|
+
|---|---|---|---|
|
|
13
|
+
| `id` | `string` | — | HTML `id` on the root `<ul>` element. |
|
|
14
|
+
| `color` | `BaseColorProps` | `'secondary'` | Color theme applied via `getColor()`. |
|
|
15
|
+
| `size` | `'xs' \| 'sm' \| 'md' \| 'lg' \| 'xl'` | `'md'` | Visual size variant via CVA. |
|
|
16
|
+
| `direction` | `'vertical' \| 'horizontal'` | `'vertical'` | Layout direction. Horizontal collapses sibling root folders on expand. |
|
|
17
|
+
| `highlightActive` | `boolean` | `true` | Add `_6ca32a` active class to the clicked item and its ancestor path. |
|
|
18
|
+
| `defaultExpanded` | `boolean` | `false` | Default expand state for all folders that do not specify their own `defaultExpanded`. |
|
|
19
|
+
| `class` | `Partial<Record<'root' \| 'itemWrap' \| 'itemHeader', string>>` | — | Merge custom classes onto specific structural elements. |
|
|
20
|
+
| `onItemClick` | `(info: ItemClickInfo) => void` | — | Fires on any item click (file, folder, title). |
|
|
21
|
+
| `onError` | `(info: MenuErrorInfo) => void` | — | Fires when any lazy load fails (root or folder). `info.source` distinguishes the two cases. |
|
|
22
|
+
| `setMenuFunction` | `Setter<MenuFunction \| undefined>` | — | Receives the imperative API object after mount. Pass a signal setter to gain external control. |
|
|
23
|
+
| `items` | `MenuItem[]` | — | **Sync mode**: static array of menu items. Mutually exclusive with `lazyItems`. |
|
|
24
|
+
| `lazyItems` | `() => Promise<MenuItem[]>` | — | **Async mode**: async loader for root-level items. Runs immediately on mount. Mutually exclusive with `items`. |
|
|
25
|
+
|
|
26
|
+
> `MenuProps` is a discriminated union: you must provide either `items` OR `lazyItems`, not both.
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
### `MenuItem` — Item Types
|
|
31
|
+
|
|
32
|
+
`MenuItem = FileItem | FolderItem | TitleItem`
|
|
33
|
+
|
|
34
|
+
#### `FileItem`
|
|
35
|
+
|
|
36
|
+
```ts
|
|
37
|
+
type FileItem = {
|
|
38
|
+
type: 'file';
|
|
39
|
+
id?: string;
|
|
40
|
+
content: SolidComponent; // string | JSX.Element | () => JSX.Element
|
|
41
|
+
disabled?: boolean;
|
|
42
|
+
data?: Record<string, any>;
|
|
43
|
+
};
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
- Rendered as `<li class="file">` with a `<div>` wrapper.
|
|
47
|
+
- Clickable; fires `onItemClick` with `type: 'file'`.
|
|
48
|
+
|
|
49
|
+
#### `FolderItem` (Sync or Lazy)
|
|
50
|
+
|
|
51
|
+
```ts
|
|
52
|
+
// Sync folder
|
|
53
|
+
type SyncFolder = {
|
|
54
|
+
type: 'folder';
|
|
55
|
+
id?: string;
|
|
56
|
+
content: SolidComponent;
|
|
57
|
+
disabled?: boolean;
|
|
58
|
+
data?: Record<string, any>;
|
|
59
|
+
defaultExpanded?: boolean;
|
|
60
|
+
items: MenuItem[]; // preloaded children
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
// Lazy folder
|
|
64
|
+
type LazyFolder = {
|
|
65
|
+
type: 'folder';
|
|
66
|
+
id?: string;
|
|
67
|
+
content: SolidComponent;
|
|
68
|
+
disabled?: boolean;
|
|
69
|
+
data?: Record<string, any>;
|
|
70
|
+
defaultExpanded?: boolean;
|
|
71
|
+
lazyItems: () => Promise<MenuItem[]>; // async loader
|
|
72
|
+
};
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
- Rendered as `<li class="folder">` containing a `<details>`/`<summary>` pair.
|
|
76
|
+
- Toggle opens/closes the folder; `onItemClick` fires with `type: 'folder'` and `isExpanded`.
|
|
77
|
+
- Lazy folders show a loading spinner while fetching; on error, show a `toast.error` and collapse.
|
|
78
|
+
|
|
79
|
+
#### `TitleItem`
|
|
80
|
+
|
|
81
|
+
```ts
|
|
82
|
+
type TitleItem = {
|
|
83
|
+
type: 'title';
|
|
84
|
+
id?: string;
|
|
85
|
+
content: SolidComponent;
|
|
86
|
+
disabled?: boolean;
|
|
87
|
+
data?: Record<string, any>;
|
|
88
|
+
items: (FileItem | TitleItem | SyncFolder)[]; // no lazy folders allowed in title children
|
|
89
|
+
};
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
- Rendered as `<li class="title">` with an `<h4 class="menu-title">` header.
|
|
93
|
+
- Clicking the header toggles active highlight; fires `onItemClick` with `type: 'title'`.
|
|
94
|
+
- Children are always sync — `LazyFolder` is **not** allowed as a `TitleItem` child.
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
### `ItemClickInfo`
|
|
99
|
+
|
|
100
|
+
```ts
|
|
101
|
+
type ItemClickInfo = {
|
|
102
|
+
id: string; // item's resolved id (auto-generated if not set)
|
|
103
|
+
path: string[]; // ancestor id chain from root to this item
|
|
104
|
+
type: 'file' | 'folder' | 'title';
|
|
105
|
+
isExpanded?: boolean; // only present for folder clicks
|
|
106
|
+
data?: Record<string, any>; // item's data field, if set
|
|
107
|
+
};
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
### `MenuErrorInfo`
|
|
111
|
+
|
|
112
|
+
```ts
|
|
113
|
+
type MenuErrorInfo = {
|
|
114
|
+
source: 'root' | 'folder'; // 'root' = root lazyItems failed; 'folder' = lazy folder children failed
|
|
115
|
+
itemId?: string; // folder id (only when source = 'folder')
|
|
116
|
+
path?: string[]; // ancestor path to the folder (only when source = 'folder')
|
|
117
|
+
error: unknown; // the raw caught error
|
|
118
|
+
message: string; // normalized error message string
|
|
119
|
+
};
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
### `MenuFunction` — Imperative API
|
|
125
|
+
|
|
126
|
+
Obtained via `setMenuFunction` prop. All methods operate on the DOM directly via id lookup.
|
|
127
|
+
|
|
128
|
+
| Method | Signature | Description |
|
|
129
|
+
|---|---|---|
|
|
130
|
+
| `focusById` | `(id: string) => void` | Expand all ancestors of the node and apply active highlight to its full path. |
|
|
131
|
+
| `collapseById` | `(id: string) => void` | Close the folder's `<details>` and remove active highlight from it and its descendants. |
|
|
132
|
+
| `refreshById` | `(id: string) => void` | Force-reload a lazy folder's children (re-calls `lazyItems`). Only works on mounted (previously expanded) lazy folders. |
|
|
133
|
+
| `refreshAll` | `() => void` | Force-reload all mounted lazy folders simultaneously. |
|
|
134
|
+
| `collapseAll` | `() => void` | Close all `<details>` elements in the menu tree. |
|
|
135
|
+
| `expandedAll` | `() => void` | Open all `<details>` elements in the menu tree. |
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## BEHAVIORAL RULES (inferred from implementation)
|
|
140
|
+
|
|
141
|
+
### Sync vs Lazy (root level)
|
|
142
|
+
|
|
143
|
+
- **Sync** (`items`): items rendered immediately; reactive — updating `items` prop re-renders the whole tree and clears both registries.
|
|
144
|
+
- **Lazy** (`lazyItems`): `lazyItems()` is called once on mount; result cached in `rootItems` signal. Shows a full-screen spinner while loading. On error, shows "No menu items available" with a "Try again" button.
|
|
145
|
+
|
|
146
|
+
### Lazy Folder Loading
|
|
147
|
+
|
|
148
|
+
- Children are loaded on first expand (`shouldLoad` signal transitions to `true`).
|
|
149
|
+
- Already-loaded items are **not** re-fetched on subsequent expands (cached in `loadedItems` signal).
|
|
150
|
+
- `refreshById` / `refreshAll` bypass the cache and force a re-fetch.
|
|
151
|
+
- While loading: `<details>` toggle is blocked (`e.preventDefault()`); spinner replaces the `summary` arrow indicator.
|
|
152
|
+
- On load error: `toast.error(message)` fires, folder collapses automatically.
|
|
153
|
+
|
|
154
|
+
### Node Registry
|
|
155
|
+
|
|
156
|
+
- Every item gets a unique id: use the `id` prop if provided, otherwise `createUniqueId()` is assigned internally.
|
|
157
|
+
- `NodeRegistry` maps each id → parent id, enabling `getPath(id)` to return the full ancestor chain.
|
|
158
|
+
- Registry is cleared when `items` prop changes (sync mode) or on component cleanup.
|
|
159
|
+
|
|
160
|
+
### Active Highlight
|
|
161
|
+
|
|
162
|
+
- Controlled by `highlightActive` prop (default `true`).
|
|
163
|
+
- Active CSS class `_6ca32a` is added to every node in the path from root to the clicked item.
|
|
164
|
+
- Clicking a new item removes all existing `_6ca32a` classes first, then applies to the new path.
|
|
165
|
+
- Clicking a `title` item toggles: if already active, removes highlight; otherwise applies it.
|
|
166
|
+
- `focusById` triggers the same active highlight logic programmatically.
|
|
167
|
+
|
|
168
|
+
### Horizontal Direction
|
|
169
|
+
|
|
170
|
+
- In horizontal mode, expanding a root-level folder (`parentId === null`) automatically collapses all other root-level folders (accordion behavior).
|
|
171
|
+
- Nested folders inside a horizontal root folder behave normally (no auto-collapse).
|
|
172
|
+
|
|
173
|
+
### `defaultExpanded`
|
|
174
|
+
|
|
175
|
+
```
|
|
176
|
+
item.defaultExpanded → per-item override
|
|
177
|
+
p.defaultExpanded → global fallback
|
|
178
|
+
effective = item.defaultExpanded ?? p.defaultExpanded ?? false
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### Content rendering
|
|
182
|
+
|
|
183
|
+
`content` is typed as `SolidComponent = string | JSX.Element | (() => JSX.Element)`. Pass a function `() => <JSX>` to defer evaluation and enable reactivity inside the item content.
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## USAGE PATTERNS
|
|
188
|
+
|
|
189
|
+
### 1. Minimal sync menu
|
|
190
|
+
|
|
191
|
+
```tsx
|
|
192
|
+
import { Menu } from 'solid-tom-ui';
|
|
193
|
+
|
|
194
|
+
<Menu
|
|
195
|
+
items={[
|
|
196
|
+
{ type: 'file', content: 'README.md' },
|
|
197
|
+
{
|
|
198
|
+
type: 'folder',
|
|
199
|
+
content: 'src',
|
|
200
|
+
items: [
|
|
201
|
+
{ type: 'file', content: 'App.tsx' },
|
|
202
|
+
{ type: 'file', content: 'index.tsx' },
|
|
203
|
+
],
|
|
204
|
+
},
|
|
205
|
+
]}
|
|
206
|
+
/>
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### 2. Handling item clicks
|
|
210
|
+
|
|
211
|
+
```tsx
|
|
212
|
+
<Menu
|
|
213
|
+
items={menuItems}
|
|
214
|
+
onItemClick={(info) => {
|
|
215
|
+
console.log(info.type); // 'file' | 'folder' | 'title'
|
|
216
|
+
console.log(info.id); // item id
|
|
217
|
+
console.log(info.path); // ['root-id', 'parent-id', 'item-id']
|
|
218
|
+
console.log(info.isExpanded); // boolean | undefined (folder only)
|
|
219
|
+
console.log(info.data); // custom data payload
|
|
220
|
+
}}
|
|
221
|
+
/>
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
### 3. Using `data` for routing
|
|
225
|
+
|
|
226
|
+
```tsx
|
|
227
|
+
const items: MenuItem[] = [
|
|
228
|
+
{ type: 'file', id: 'dashboard', content: 'Dashboard', data: { route: '/dashboard' } },
|
|
229
|
+
{ type: 'file', id: 'settings', content: 'Settings', data: { route: '/settings' } },
|
|
230
|
+
];
|
|
231
|
+
|
|
232
|
+
<Menu
|
|
233
|
+
items={items}
|
|
234
|
+
onItemClick={(info) => {
|
|
235
|
+
if (info.data?.route) navigate(info.data.route);
|
|
236
|
+
}}
|
|
237
|
+
/>
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### 4. Title items (non-collapsible section headers)
|
|
241
|
+
|
|
242
|
+
```tsx
|
|
243
|
+
<Menu
|
|
244
|
+
items={[
|
|
245
|
+
{
|
|
246
|
+
type: 'title',
|
|
247
|
+
content: 'Configuration',
|
|
248
|
+
items: [
|
|
249
|
+
{ type: 'file', content: 'tsconfig.json' },
|
|
250
|
+
{ type: 'file', content: 'vite.config.ts' },
|
|
251
|
+
],
|
|
252
|
+
},
|
|
253
|
+
]}
|
|
254
|
+
/>
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
### 5. Lazy folder (async children)
|
|
258
|
+
|
|
259
|
+
```tsx
|
|
260
|
+
const items: MenuItem[] = [
|
|
261
|
+
{
|
|
262
|
+
type: 'folder',
|
|
263
|
+
id: 'api-folder',
|
|
264
|
+
content: 'api',
|
|
265
|
+
lazyItems: async () => {
|
|
266
|
+
const res = await fetch('/api/files');
|
|
267
|
+
return await res.json(); // must return MenuItem[]
|
|
268
|
+
},
|
|
269
|
+
},
|
|
270
|
+
];
|
|
271
|
+
|
|
272
|
+
<Menu items={items} />
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
### 6. Root-level async menu (`lazyItems` prop)
|
|
276
|
+
|
|
277
|
+
```tsx
|
|
278
|
+
<Menu
|
|
279
|
+
lazyItems={async () => {
|
|
280
|
+
const data = await fetchRootFiles();
|
|
281
|
+
return data; // MenuItem[]
|
|
282
|
+
}}
|
|
283
|
+
onItemClick={handleClick}
|
|
284
|
+
/>
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
### 7. Imperative control via `setMenuFunction`
|
|
288
|
+
|
|
289
|
+
```tsx
|
|
290
|
+
const [menuFn, setMenuFn] = createSignal<MenuFunction>();
|
|
291
|
+
|
|
292
|
+
<Menu items={items} setMenuFunction={setMenuFn} />
|
|
293
|
+
|
|
294
|
+
// Later, from event handlers or effects:
|
|
295
|
+
menuFn()?.focusById('settings-file');
|
|
296
|
+
menuFn()?.collapseAll();
|
|
297
|
+
menuFn()?.expandedAll();
|
|
298
|
+
menuFn()?.collapseById('src-folder');
|
|
299
|
+
menuFn()?.refreshById('api-lazy-folder'); // lazy folders only
|
|
300
|
+
menuFn()?.refreshAll();
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
### 8. All folders expanded by default
|
|
304
|
+
|
|
305
|
+
```tsx
|
|
306
|
+
<Menu items={items} defaultExpanded={true} />
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
### 9. Per-folder expand override
|
|
310
|
+
|
|
311
|
+
```tsx
|
|
312
|
+
const items: MenuItem[] = [
|
|
313
|
+
{ type: 'folder', content: 'always-open', defaultExpanded: true, items: [...] },
|
|
314
|
+
{ type: 'folder', content: 'always-closed', defaultExpanded: false, items: [...] },
|
|
315
|
+
];
|
|
316
|
+
// Global defaultExpanded is overridden per item
|
|
317
|
+
<Menu items={items} defaultExpanded={true} />
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
### 10. Horizontal menu (top nav style)
|
|
321
|
+
|
|
322
|
+
```tsx
|
|
323
|
+
<Menu
|
|
324
|
+
items={navItems}
|
|
325
|
+
direction="horizontal"
|
|
326
|
+
class={{ root: 'rounded-box bg-base-100 border h-fit w-fit flex-nowrap' }}
|
|
327
|
+
/>
|
|
328
|
+
// Root-level folders auto-collapse when another is expanded (accordion)
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
### 11. Icon-only sidebar
|
|
332
|
+
|
|
333
|
+
```tsx
|
|
334
|
+
<Menu
|
|
335
|
+
items={[
|
|
336
|
+
{ type: 'file', content: <HomeIcon /> },
|
|
337
|
+
{ type: 'file', content: <BellIcon /> },
|
|
338
|
+
{ type: 'file', content: <SettingsIcon /> },
|
|
339
|
+
]}
|
|
340
|
+
direction="vertical"
|
|
341
|
+
class={{
|
|
342
|
+
root: 'bg-base-100 rounded-box border h-fit',
|
|
343
|
+
itemWrap: 'w-fit',
|
|
344
|
+
itemHeader: 'aspect-square w-12 place-content-center',
|
|
345
|
+
}}
|
|
346
|
+
/>
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
### 12. Custom class on elements
|
|
350
|
+
|
|
351
|
+
```tsx
|
|
352
|
+
<Menu
|
|
353
|
+
items={items}
|
|
354
|
+
class={{
|
|
355
|
+
root: 'bg-base-100 border border-base-300 rounded-lg min-w-[260px]',
|
|
356
|
+
itemWrap: 'my-custom-item',
|
|
357
|
+
itemHeader: 'font-semibold text-primary',
|
|
358
|
+
}}
|
|
359
|
+
/>
|
|
360
|
+
```
|
|
361
|
+
|
|
362
|
+
### 13. Mixed sync + lazy tree
|
|
363
|
+
|
|
364
|
+
```tsx
|
|
365
|
+
const items: MenuItem[] = [
|
|
366
|
+
{ type: 'file', content: 'README.md' },
|
|
367
|
+
{
|
|
368
|
+
type: 'folder',
|
|
369
|
+
content: 'src',
|
|
370
|
+
items: [
|
|
371
|
+
{ type: 'file', content: 'App.tsx' },
|
|
372
|
+
{
|
|
373
|
+
type: 'folder',
|
|
374
|
+
id: 'api-lazy-folder',
|
|
375
|
+
content: 'api',
|
|
376
|
+
lazyItems: loadApiItems, // async only for this subtree
|
|
377
|
+
},
|
|
378
|
+
],
|
|
379
|
+
},
|
|
380
|
+
];
|
|
381
|
+
<Menu items={items} />
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
### 14. Disabled items
|
|
385
|
+
|
|
386
|
+
```tsx
|
|
387
|
+
const items: MenuItem[] = [
|
|
388
|
+
{ type: 'file', content: 'Active file' },
|
|
389
|
+
{ type: 'file', content: 'Disabled file', disabled: true },
|
|
390
|
+
{ type: 'folder', content: 'Disabled folder', disabled: true, items: [] },
|
|
391
|
+
];
|
|
392
|
+
<Menu items={items} />
|
|
393
|
+
// Disabled items get 'menu-disabled' class; folder toggle is blocked when disabled
|
|
394
|
+
```
|
|
395
|
+
|
|
396
|
+
### 15. Reactive items (update from outside)
|
|
397
|
+
|
|
398
|
+
```tsx
|
|
399
|
+
const [items, setItems] = createSignal<MenuItem[]>(initialItems);
|
|
400
|
+
|
|
401
|
+
<Menu items={items()} />
|
|
402
|
+
|
|
403
|
+
// Later:
|
|
404
|
+
setItems(newItems); // Registry clears and re-renders the entire tree
|
|
405
|
+
```
|
|
406
|
+
|
|
407
|
+
---
|
|
408
|
+
|
|
409
|
+
## CSS CLASSES (public API for customization)
|
|
410
|
+
|
|
411
|
+
| Class | Applied to |
|
|
412
|
+
|---|---|
|
|
413
|
+
| `menu` | Root `<ul>` |
|
|
414
|
+
| `menu-vertical` | Root `<ul>` when `direction='vertical'` |
|
|
415
|
+
| `menu-horizontal` | Root `<ul>` when `direction='horizontal'` |
|
|
416
|
+
| `menu-xs/sm/md/lg/xl` | Root `<ul>` size modifier |
|
|
417
|
+
| `menu-title` | `<h4>` inside title items |
|
|
418
|
+
| `menu-disabled` | `<li>` for disabled items or loading lazy folders |
|
|
419
|
+
| `file` | `<li>` for file items |
|
|
420
|
+
| `folder` | `<li>` for folder items |
|
|
421
|
+
| `title` | `<li>` for title items |
|
|
422
|
+
| `_6ca32a` | Active highlight — applied to items in the selected path |
|
|
423
|
+
|
|
424
|
+
Use `class={{ root, itemWrap, itemHeader }}` prop to append classes to:
|
|
425
|
+
- `root` → `<ul>` (root list)
|
|
426
|
+
- `itemWrap` → each `<li>` item
|
|
427
|
+
- `itemHeader` → `<summary>` inside folder items
|
|
428
|
+
|
|
429
|
+
---
|
|
430
|
+
|
|
431
|
+
## ANIMATION
|
|
432
|
+
|
|
433
|
+
- All menu elements transition via `transition: all 0.3s cubic-bezier(0, 0, 0.2, 1)` applied globally under `@utility menu`.
|
|
434
|
+
- Folder open/close uses the native `<details>` browser animation (no JS animation).
|
|
435
|
+
- Active highlight class `_6ca32a` transitions smoothly due to the global CSS transition rule.
|
|
436
|
+
|
|
437
|
+
---
|
|
438
|
+
|
|
439
|
+
## CONSTRAINTS & EDGE CASES
|
|
440
|
+
|
|
441
|
+
- `items` and `lazyItems` are mutually exclusive at every level. Do not mix them on the same item; they are discriminated by TypeScript.
|
|
442
|
+
- `TitleItem.items` cannot contain `LazyFolder` — the type system enforces `MenuTitleItems = FileItem | TitleItem | SyncFolder`.
|
|
443
|
+
- `refreshById` / `refreshAll` only work on lazy folders that have been **mounted** (expanded at least once). Calling them on un-expanded folders is a no-op with a console warning.
|
|
444
|
+
- `focusById` / `collapseById` log a console warning and return early if the given `id` is not in the registry.
|
|
445
|
+
- When `items` prop changes reactively, **both** `NodeRegistry` and `LazyFolderRegistry` are fully cleared and rebuilt — all loaded lazy folder data is lost.
|
|
446
|
+
- In horizontal mode, `collapseOtherRootFolders` only affects **direct children** of the root `<ul>` (`li.folder > details`). Nested folders inside a root folder are unaffected.
|
|
447
|
+
- `content` rendered inside a `title` item's `<h4>` is clickable for highlight toggle but does **not** collapse/expand children (title items are non-collapsible).
|
|
448
|
+
- Lazy folder errors collapse the folder, reset `shouldLoad`, and fire `onError` with `source: 'folder'`. The next expand attempt will re-trigger `lazyItems`.
|
|
449
|
+
- Root lazy load errors fire `onError` with `source: 'root'`. The menu shows "No menu items available" with a "Try again" button.
|
|
450
|
+
- `id` prop on `Menu` is only set on the root `<ul>` (not on the wrapper fragment).
|
|
451
|
+
- `setMenuFunction` is called **synchronously** during render (not in an effect). The returned `MenuFunction` object is available immediately after the signal setter is called.
|
|
452
|
+
|
|
453
|
+
---
|
|
454
|
+
|
|
455
|
+
## DO / DON'T
|
|
456
|
+
|
|
457
|
+
**DO**
|
|
458
|
+
- Always provide `id` on items you intend to control via `MenuFunction` (focusById, collapseById, refreshById).
|
|
459
|
+
- Use `data` field to attach routing info, metadata, or any payload — accessible in `onItemClick`.
|
|
460
|
+
- Use `setMenuFunction` + a signal to get the imperative API for programmatic control.
|
|
461
|
+
- Pass `content` as `() => <JSX>` for reactive or expensive content inside items.
|
|
462
|
+
- Use `lazyItems` at the folder level for deep trees where loading all data upfront is expensive.
|
|
463
|
+
- Import from the barrel: `import { Menu } from 'solid-tom-ui'`.
|
|
464
|
+
|
|
465
|
+
**DON'T**
|
|
466
|
+
- Don't mix `items` and `lazyItems` on the same `MenuProps` or `FolderItem` — they are exclusive.
|
|
467
|
+
- Don't put `LazyFolder` inside a `TitleItem.items` — it's not allowed by the type system.
|
|
468
|
+
- Don't call `refreshById` on a lazy folder that has never been expanded — it will warn and do nothing.
|
|
469
|
+
- Don't rely on `focusById` without a `defaultExpanded` or prior expansion — the node must be in the registry, which happens on render (all items register regardless of expand state, but DOM manipulation requires the element to exist).
|
|
470
|
+
- Don't import `MenuExample` or `menu.data-example` in production — they are demo utilities only.
|
|
471
|
+
- Don't update `items` prop frequently if you rely on lazy folder loaded state — every change clears all registries and reloads the tree from scratch.
|
|
472
|
+
---
|
|
473
|
+
|
|
474
|
+
## Component Conventions
|
|
475
|
+
|
|
476
|
+
> **CSS encoding**: internal CSS classes use short encoded names (e.g. `mn01`, `mn02`) per project convention.
|