solid-tom-ui 0.1.0
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 +247 -0
- package/dist/components/avatar/avatar.d.ts +14 -0
- package/dist/components/avatar/avatar.d.ts.map +1 -0
- package/dist/components/avatar/avatar.js +2 -0
- package/dist/components/avatar/avatar.js.map +1 -0
- package/dist/components/avatar/avatar.types.d.ts +18 -0
- package/dist/components/avatar/avatar.types.d.ts.map +1 -0
- package/dist/components/avatar/index.d.ts +2 -0
- package/dist/components/avatar/index.d.ts.map +1 -0
- package/dist/components/badge/badge.d.ts +12 -0
- package/dist/components/badge/badge.d.ts.map +1 -0
- package/dist/components/badge/badge.js +2 -0
- package/dist/components/badge/badge.js.map +1 -0
- package/dist/components/badge/badge.types.d.ts +10 -0
- package/dist/components/badge/badge.types.d.ts.map +1 -0
- package/dist/components/badge/index.d.ts +3 -0
- package/dist/components/badge/index.d.ts.map +1 -0
- package/dist/components/blank/blank.d.ts +5 -0
- package/dist/components/blank/blank.d.ts.map +1 -0
- package/dist/components/blank/blank.js +2 -0
- package/dist/components/blank/blank.js.map +1 -0
- package/dist/components/blank/index.d.ts +2 -0
- package/dist/components/blank/index.d.ts.map +1 -0
- package/dist/components/breadcrumb/breadcrumb.d.ts +11 -0
- package/dist/components/breadcrumb/breadcrumb.d.ts.map +1 -0
- package/dist/components/breadcrumb/breadcrumb.js +2 -0
- package/dist/components/breadcrumb/breadcrumb.js.map +1 -0
- package/dist/components/breadcrumb/index.d.ts +2 -0
- package/dist/components/breadcrumb/index.d.ts.map +1 -0
- package/dist/components/button/button.d.ts +19 -0
- package/dist/components/button/button.d.ts.map +1 -0
- package/dist/components/button/button.js +2 -0
- package/dist/components/button/button.js.map +1 -0
- package/dist/components/button/button.types.d.ts +30 -0
- package/dist/components/button/button.types.d.ts.map +1 -0
- package/dist/components/button/index.d.ts +2 -0
- package/dist/components/button/index.d.ts.map +1 -0
- package/dist/components/carousel/carousel.d.ts +4 -0
- package/dist/components/carousel/carousel.d.ts.map +1 -0
- package/dist/components/carousel/carousel.js +2 -0
- package/dist/components/carousel/carousel.js.map +1 -0
- package/dist/components/carousel/carousel.types.d.ts +36 -0
- package/dist/components/carousel/carousel.types.d.ts.map +1 -0
- package/dist/components/carousel/index.d.ts +3 -0
- package/dist/components/carousel/index.d.ts.map +1 -0
- package/dist/components/chat-bubble/chatBubble.d.ts +11 -0
- package/dist/components/chat-bubble/chatBubble.d.ts.map +1 -0
- package/dist/components/chat-bubble/chatBubble.js +2 -0
- package/dist/components/chat-bubble/chatBubble.js.map +1 -0
- package/dist/components/chat-bubble/chatBubble.type.d.ts +12 -0
- package/dist/components/chat-bubble/chatBubble.type.d.ts.map +1 -0
- package/dist/components/chat-bubble/index.d.ts +2 -0
- package/dist/components/chat-bubble/index.d.ts.map +1 -0
- package/dist/components/checkbox/checkbox.d.ts +22 -0
- package/dist/components/checkbox/checkbox.d.ts.map +1 -0
- package/dist/components/checkbox/checkbox.js +2 -0
- package/dist/components/checkbox/checkbox.js.map +1 -0
- package/dist/components/checkbox/index.d.ts +3 -0
- package/dist/components/checkbox/index.d.ts.map +1 -0
- package/dist/components/collapse/collapse.d.ts +12 -0
- package/dist/components/collapse/collapse.d.ts.map +1 -0
- package/dist/components/collapse/collapse.js +2 -0
- package/dist/components/collapse/collapse.js.map +1 -0
- package/dist/components/collapse/collapse.types.d.ts +17 -0
- package/dist/components/collapse/collapse.types.d.ts.map +1 -0
- package/dist/components/collapse/index.d.ts +2 -0
- package/dist/components/collapse/index.d.ts.map +1 -0
- package/dist/components/context-menu/context-menu.d.ts +4 -0
- package/dist/components/context-menu/context-menu.d.ts.map +1 -0
- package/dist/components/context-menu/context-menu.js +2 -0
- package/dist/components/context-menu/context-menu.js.map +1 -0
- package/dist/components/context-menu/context-menu.store.d.ts +14 -0
- package/dist/components/context-menu/context-menu.store.d.ts.map +1 -0
- package/dist/components/context-menu/context-menu.store.js +2 -0
- package/dist/components/context-menu/context-menu.store.js.map +1 -0
- package/dist/components/context-menu/context-menu.types.d.ts +51 -0
- package/dist/components/context-menu/context-menu.types.d.ts.map +1 -0
- package/dist/components/context-menu/index.d.ts +4 -0
- package/dist/components/context-menu/index.d.ts.map +1 -0
- package/dist/components/diff/diff.d.ts +9 -0
- package/dist/components/diff/diff.d.ts.map +1 -0
- package/dist/components/diff/diff.js +2 -0
- package/dist/components/diff/diff.js.map +1 -0
- package/dist/components/diff/index.d.ts +2 -0
- package/dist/components/diff/index.d.ts.map +1 -0
- package/dist/components/divider/divider.d.ts +5 -0
- package/dist/components/divider/divider.d.ts.map +1 -0
- package/dist/components/divider/divider.js +2 -0
- package/dist/components/divider/divider.js.map +1 -0
- package/dist/components/divider/divider.types.d.ts +16 -0
- package/dist/components/divider/divider.types.d.ts.map +1 -0
- package/dist/components/divider/index.d.ts +3 -0
- package/dist/components/divider/index.d.ts.map +1 -0
- package/dist/components/drawer/drawer.d.ts +6 -0
- package/dist/components/drawer/drawer.d.ts.map +1 -0
- package/dist/components/drawer/drawer.js +2 -0
- package/dist/components/drawer/drawer.js.map +1 -0
- package/dist/components/drawer/drawer.types.d.ts +19 -0
- package/dist/components/drawer/drawer.types.d.ts.map +1 -0
- package/dist/components/drawer/index.d.ts +3 -0
- package/dist/components/drawer/index.d.ts.map +1 -0
- package/dist/components/dropdown/dropdown.d.ts +11 -0
- package/dist/components/dropdown/dropdown.d.ts.map +1 -0
- package/dist/components/dropdown/dropdown.js +2 -0
- package/dist/components/dropdown/dropdown.js.map +1 -0
- package/dist/components/dropdown/dropdown.store.d.ts +8 -0
- package/dist/components/dropdown/dropdown.store.d.ts.map +1 -0
- package/dist/components/dropdown/dropdown.store.js +2 -0
- package/dist/components/dropdown/dropdown.store.js.map +1 -0
- package/dist/components/dropdown/dropdown.types.d.ts +15 -0
- package/dist/components/dropdown/dropdown.types.d.ts.map +1 -0
- package/dist/components/dropdown/index.d.ts +3 -0
- package/dist/components/dropdown/index.d.ts.map +1 -0
- package/dist/components/dynamic-icon/DynamicIcon.d.ts +8 -0
- package/dist/components/dynamic-icon/DynamicIcon.d.ts.map +1 -0
- package/dist/components/dynamic-icon/index.d.ts +2 -0
- package/dist/components/dynamic-icon/index.d.ts.map +1 -0
- package/dist/components/float-button/float-button.d.ts +5 -0
- package/dist/components/float-button/float-button.d.ts.map +1 -0
- package/dist/components/float-button/float-button.js +2 -0
- package/dist/components/float-button/float-button.js.map +1 -0
- package/dist/components/float-button/float-button.types.d.ts +42 -0
- package/dist/components/float-button/float-button.types.d.ts.map +1 -0
- package/dist/components/float-button/index.d.ts +2 -0
- package/dist/components/float-button/index.d.ts.map +1 -0
- package/dist/components/hover-3d-image/hover-3d-example.d.ts +3 -0
- package/dist/components/hover-3d-image/hover-3d-example.d.ts.map +1 -0
- package/dist/components/hover-3d-image/hover-3d-image.d.ts +13 -0
- package/dist/components/hover-3d-image/hover-3d-image.d.ts.map +1 -0
- package/dist/components/hover-3d-image/hover-3d-image.js +2 -0
- package/dist/components/hover-3d-image/hover-3d-image.js.map +1 -0
- package/dist/components/hover-3d-image/index.d.ts +2 -0
- package/dist/components/hover-3d-image/index.d.ts.map +1 -0
- package/dist/components/iframe/index.d.ts +7 -0
- package/dist/components/iframe/index.d.ts.map +1 -0
- package/dist/components/image-preview/image-preview.d.ts +25 -0
- package/dist/components/image-preview/image-preview.d.ts.map +1 -0
- package/dist/components/image-preview/image-preview.js +2 -0
- package/dist/components/image-preview/image-preview.js.map +1 -0
- package/dist/components/image-preview/index.d.ts +3 -0
- package/dist/components/image-preview/index.d.ts.map +1 -0
- package/dist/components/indicator/index.d.ts +3 -0
- package/dist/components/indicator/index.d.ts.map +1 -0
- package/dist/components/indicator/indicator.d.ts +4 -0
- package/dist/components/indicator/indicator.d.ts.map +1 -0
- package/dist/components/indicator/indicator.js +2 -0
- package/dist/components/indicator/indicator.js.map +1 -0
- package/dist/components/indicator/indicator.types.d.ts +18 -0
- package/dist/components/indicator/indicator.types.d.ts.map +1 -0
- package/dist/components/input/index.d.ts +2 -0
- package/dist/components/input/index.d.ts.map +1 -0
- package/dist/components/input/input.d.ts +17 -0
- package/dist/components/input/input.d.ts.map +1 -0
- package/dist/components/input/input.js +2 -0
- package/dist/components/input/input.js.map +1 -0
- package/dist/components/input/input.types.d.ts +76 -0
- package/dist/components/input/input.types.d.ts.map +1 -0
- package/dist/components/input/input.utils.d.ts +16 -0
- package/dist/components/input/input.utils.d.ts.map +1 -0
- package/dist/components/input/input.utils.js +2 -0
- package/dist/components/input/input.utils.js.map +1 -0
- package/dist/components/input/variants/input-color.d.ts +4 -0
- package/dist/components/input/variants/input-color.d.ts.map +1 -0
- package/dist/components/input/variants/input-color.js +2 -0
- package/dist/components/input/variants/input-color.js.map +1 -0
- package/dist/components/input/variants/input-date.d.ts +4 -0
- package/dist/components/input/variants/input-date.d.ts.map +1 -0
- package/dist/components/input/variants/input-date.js +2 -0
- package/dist/components/input/variants/input-date.js.map +1 -0
- package/dist/components/input/variants/input-number.d.ts +4 -0
- package/dist/components/input/variants/input-number.d.ts.map +1 -0
- package/dist/components/input/variants/input-number.js +2 -0
- package/dist/components/input/variants/input-number.js.map +1 -0
- package/dist/components/input/variants/input-otp.d.ts +5 -0
- package/dist/components/input/variants/input-otp.d.ts.map +1 -0
- package/dist/components/input/variants/input-otp.js +2 -0
- package/dist/components/input/variants/input-otp.js.map +1 -0
- package/dist/components/input/variants/input-password.d.ts +4 -0
- package/dist/components/input/variants/input-password.d.ts.map +1 -0
- package/dist/components/input/variants/input-password.js +2 -0
- package/dist/components/input/variants/input-password.js.map +1 -0
- package/dist/components/input/variants/input-radio.d.ts +22 -0
- package/dist/components/input/variants/input-radio.d.ts.map +1 -0
- package/dist/components/input/variants/input-radio.js +2 -0
- package/dist/components/input/variants/input-radio.js.map +1 -0
- package/dist/components/input/variants/input-range.d.ts +4 -0
- package/dist/components/input/variants/input-range.d.ts.map +1 -0
- package/dist/components/input/variants/input-range.js +2 -0
- package/dist/components/input/variants/input-range.js.map +1 -0
- package/dist/components/input/variants/input-text.d.ts +4 -0
- package/dist/components/input/variants/input-text.d.ts.map +1 -0
- package/dist/components/input/variants/input-text.js +2 -0
- package/dist/components/input/variants/input-text.js.map +1 -0
- package/dist/components/input/variants/input-textarea.d.ts +4 -0
- package/dist/components/input/variants/input-textarea.d.ts.map +1 -0
- package/dist/components/input/variants/input-textarea.js +2 -0
- package/dist/components/input/variants/input-textarea.js.map +1 -0
- package/dist/components/loading/index.d.ts +3 -0
- package/dist/components/loading/index.d.ts.map +1 -0
- package/dist/components/loading/loading.d.ts +32 -0
- package/dist/components/loading/loading.d.ts.map +1 -0
- package/dist/components/loading/loading.js +2 -0
- package/dist/components/loading/loading.js.map +1 -0
- package/dist/components/mansory/index.d.ts +3 -0
- package/dist/components/mansory/index.d.ts.map +1 -0
- package/dist/components/mansory/mansory.d.ts +4 -0
- package/dist/components/mansory/mansory.d.ts.map +1 -0
- package/dist/components/mansory/mansory.js +2 -0
- package/dist/components/mansory/mansory.js.map +1 -0
- package/dist/components/mansory/mansory.types.d.ts +27 -0
- package/dist/components/mansory/mansory.types.d.ts.map +1 -0
- package/dist/components/menu/index.d.ts +4 -0
- package/dist/components/menu/index.d.ts.map +1 -0
- package/dist/components/menu/menu.d.ts +11 -0
- package/dist/components/menu/menu.d.ts.map +1 -0
- package/dist/components/menu/menu.data-example.d.ts +7 -0
- package/dist/components/menu/menu.data-example.d.ts.map +1 -0
- package/dist/components/menu/menu.js +2 -0
- package/dist/components/menu/menu.js.map +1 -0
- package/dist/components/menu/menu.types.d.ts +74 -0
- package/dist/components/menu/menu.types.d.ts.map +1 -0
- package/dist/components/modal/index.d.ts +3 -0
- package/dist/components/modal/index.d.ts.map +1 -0
- package/dist/components/modal/modal.d.ts +28 -0
- package/dist/components/modal/modal.d.ts.map +1 -0
- package/dist/components/modal/modal.js +2 -0
- package/dist/components/modal/modal.js.map +1 -0
- package/dist/components/modal/modalContext.d.ts +8 -0
- package/dist/components/modal/modalContext.d.ts.map +1 -0
- package/dist/components/modal/modalContext.js +2 -0
- package/dist/components/modal/modalContext.js.map +1 -0
- package/dist/components/pagination/index.d.ts +3 -0
- package/dist/components/pagination/index.d.ts.map +1 -0
- package/dist/components/pagination/pagination.d.ts +4 -0
- package/dist/components/pagination/pagination.d.ts.map +1 -0
- package/dist/components/pagination/pagination.js +2 -0
- package/dist/components/pagination/pagination.js.map +1 -0
- package/dist/components/pagination/pagination.types.d.ts +88 -0
- package/dist/components/pagination/pagination.types.d.ts.map +1 -0
- package/dist/components/progress-bar/index.d.ts +4 -0
- package/dist/components/progress-bar/index.d.ts.map +1 -0
- package/dist/components/progress-bar/progress-bar.d.ts +8 -0
- package/dist/components/progress-bar/progress-bar.d.ts.map +1 -0
- package/dist/components/progress-bar/progress-bar.js +2 -0
- package/dist/components/progress-bar/progress-bar.js.map +1 -0
- package/dist/components/progress-bar/progress-bar.types.d.ts +20 -0
- package/dist/components/progress-bar/progress-bar.types.d.ts.map +1 -0
- package/dist/components/qr-code/index.d.ts +3 -0
- package/dist/components/qr-code/index.d.ts.map +1 -0
- package/dist/components/qr-code/qr-code.d.ts +4 -0
- package/dist/components/qr-code/qr-code.d.ts.map +1 -0
- package/dist/components/qr-code/qr-code.js +2 -0
- package/dist/components/qr-code/qr-code.js.map +1 -0
- package/dist/components/qr-code/qr-code.types.d.ts +42 -0
- package/dist/components/qr-code/qr-code.types.d.ts.map +1 -0
- package/dist/components/rating/index.d.ts +2 -0
- package/dist/components/rating/index.d.ts.map +1 -0
- package/dist/components/rating/rating.d.ts +4 -0
- package/dist/components/rating/rating.d.ts.map +1 -0
- package/dist/components/rating/rating.js +2 -0
- package/dist/components/rating/rating.js.map +1 -0
- package/dist/components/rating/rating.types.d.ts +33 -0
- package/dist/components/rating/rating.types.d.ts.map +1 -0
- package/dist/components/select/index.d.ts +3 -0
- package/dist/components/select/index.d.ts.map +1 -0
- package/dist/components/select/select.d.ts +12 -0
- package/dist/components/select/select.d.ts.map +1 -0
- package/dist/components/select/select.js +2 -0
- package/dist/components/select/select.js.map +1 -0
- package/dist/components/select/select.types.d.ts +134 -0
- package/dist/components/select/select.types.d.ts.map +1 -0
- package/dist/components/select-zone/index.d.ts +3 -0
- package/dist/components/select-zone/index.d.ts.map +1 -0
- package/dist/components/select-zone/select-zone.d.ts +5 -0
- package/dist/components/select-zone/select-zone.d.ts.map +1 -0
- package/dist/components/select-zone/select-zone.js +2 -0
- package/dist/components/select-zone/select-zone.js.map +1 -0
- package/dist/components/select-zone/select-zone.types.d.ts +58 -0
- package/dist/components/select-zone/select-zone.types.d.ts.map +1 -0
- package/dist/components/skeleton/index.d.ts +3 -0
- package/dist/components/skeleton/index.d.ts.map +1 -0
- package/dist/components/skeleton/skeleton.d.ts +25 -0
- package/dist/components/skeleton/skeleton.d.ts.map +1 -0
- package/dist/components/skeleton/skeleton.js +2 -0
- package/dist/components/skeleton/skeleton.js.map +1 -0
- package/dist/components/slider/index.d.ts +2 -0
- package/dist/components/slider/index.d.ts.map +1 -0
- package/dist/components/slider/slider.d.ts +4 -0
- package/dist/components/slider/slider.d.ts.map +1 -0
- package/dist/components/slider/slider.js +2 -0
- package/dist/components/slider/slider.js.map +1 -0
- package/dist/components/slider/slider.types.d.ts +32 -0
- package/dist/components/slider/slider.types.d.ts.map +1 -0
- package/dist/components/splitter/index.d.ts +3 -0
- package/dist/components/splitter/index.d.ts.map +1 -0
- package/dist/components/splitter/splitter.d.ts +7 -0
- package/dist/components/splitter/splitter.d.ts.map +1 -0
- package/dist/components/splitter/splitter.js +2 -0
- package/dist/components/splitter/splitter.js.map +1 -0
- package/dist/components/splitter/splitter.types.d.ts +64 -0
- package/dist/components/splitter/splitter.types.d.ts.map +1 -0
- package/dist/components/steps/index.d.ts +3 -0
- package/dist/components/steps/index.d.ts.map +1 -0
- package/dist/components/steps/steps.d.ts +29 -0
- package/dist/components/steps/steps.d.ts.map +1 -0
- package/dist/components/steps/steps.js +2 -0
- package/dist/components/steps/steps.js.map +1 -0
- package/dist/components/swap/index.d.ts +2 -0
- package/dist/components/swap/index.d.ts.map +1 -0
- package/dist/components/swap/swap.d.ts +11 -0
- package/dist/components/swap/swap.d.ts.map +1 -0
- package/dist/components/swap/swap.js +2 -0
- package/dist/components/swap/swap.js.map +1 -0
- package/dist/components/switch/index.d.ts +3 -0
- package/dist/components/switch/index.d.ts.map +1 -0
- package/dist/components/switch/switch.d.ts +11 -0
- package/dist/components/switch/switch.d.ts.map +1 -0
- package/dist/components/switch/switch.js +2 -0
- package/dist/components/switch/switch.js.map +1 -0
- package/dist/components/switch/switch.types.d.ts +23 -0
- package/dist/components/switch/switch.types.d.ts.map +1 -0
- package/dist/components/tab/index.d.ts +3 -0
- package/dist/components/tab/index.d.ts.map +1 -0
- package/dist/components/tab/tab.d.ts +4 -0
- package/dist/components/tab/tab.d.ts.map +1 -0
- package/dist/components/tab/tab.js +2 -0
- package/dist/components/tab/tab.js.map +1 -0
- package/dist/components/tab/tab.types.d.ts +51 -0
- package/dist/components/tab/tab.types.d.ts.map +1 -0
- package/dist/components/table/index.d.ts +4 -0
- package/dist/components/table/index.d.ts.map +1 -0
- package/dist/components/table/index.js +1 -0
- package/dist/components/table/table.d.ts +10 -0
- package/dist/components/table/table.d.ts.map +1 -0
- package/dist/components/table/table.js +2 -0
- package/dist/components/table/table.js.map +1 -0
- package/dist/components/table/table.types.d.ts +155 -0
- package/dist/components/table/table.types.d.ts.map +1 -0
- package/dist/components/text-rotate/index.d.ts +3 -0
- package/dist/components/text-rotate/index.d.ts.map +1 -0
- package/dist/components/text-rotate/text-rotate.d.ts +12 -0
- package/dist/components/text-rotate/text-rotate.d.ts.map +1 -0
- package/dist/components/text-rotate/text-rotate.js +2 -0
- package/dist/components/text-rotate/text-rotate.js.map +1 -0
- package/dist/components/timeline/index.d.ts +3 -0
- package/dist/components/timeline/index.d.ts.map +1 -0
- package/dist/components/timeline/timeline.d.ts +4 -0
- package/dist/components/timeline/timeline.d.ts.map +1 -0
- package/dist/components/timeline/timeline.js +2 -0
- package/dist/components/timeline/timeline.js.map +1 -0
- package/dist/components/timeline/timeline.types.d.ts +55 -0
- package/dist/components/timeline/timeline.types.d.ts.map +1 -0
- package/dist/components/toast/icons/ErrorIcon.d.ts +4 -0
- package/dist/components/toast/icons/ErrorIcon.d.ts.map +1 -0
- package/dist/components/toast/icons/ErrorIcon.js +2 -0
- package/dist/components/toast/icons/ErrorIcon.js.map +1 -0
- package/dist/components/toast/icons/IconCircle.d.ts +9 -0
- package/dist/components/toast/icons/IconCircle.d.ts.map +1 -0
- package/dist/components/toast/icons/IconCircle.js +2 -0
- package/dist/components/toast/icons/IconCircle.js.map +1 -0
- package/dist/components/toast/icons/InfoIcon.d.ts +4 -0
- package/dist/components/toast/icons/InfoIcon.d.ts.map +1 -0
- package/dist/components/toast/icons/InfoIcon.js +2 -0
- package/dist/components/toast/icons/InfoIcon.js.map +1 -0
- package/dist/components/toast/icons/LoaderIcon.d.ts +4 -0
- package/dist/components/toast/icons/LoaderIcon.d.ts.map +1 -0
- package/dist/components/toast/icons/LoaderIcon.js +2 -0
- package/dist/components/toast/icons/LoaderIcon.js.map +1 -0
- package/dist/components/toast/icons/SuccessIcon.d.ts +4 -0
- package/dist/components/toast/icons/SuccessIcon.d.ts.map +1 -0
- package/dist/components/toast/icons/SuccessIcon.js +2 -0
- package/dist/components/toast/icons/SuccessIcon.js.map +1 -0
- package/dist/components/toast/icons/WarningIcon.d.ts +4 -0
- package/dist/components/toast/icons/WarningIcon.d.ts.map +1 -0
- package/dist/components/toast/icons/WarningIcon.js +2 -0
- package/dist/components/toast/icons/WarningIcon.js.map +1 -0
- package/dist/components/toast/icons/index.d.ts +4 -0
- package/dist/components/toast/icons/index.d.ts.map +1 -0
- package/dist/components/toast/index.d.ts +3 -0
- package/dist/components/toast/index.d.ts.map +1 -0
- package/dist/components/toast/toast.d.ts +7 -0
- package/dist/components/toast/toast.d.ts.map +1 -0
- package/dist/components/toast/toast.js +2 -0
- package/dist/components/toast/toast.js.map +1 -0
- package/dist/components/toast/toast.store.d.ts +17 -0
- package/dist/components/toast/toast.store.d.ts.map +1 -0
- package/dist/components/toast/toast.store.js +2 -0
- package/dist/components/toast/toast.store.js.map +1 -0
- package/dist/components/toast/toast.type.d.ts +72 -0
- package/dist/components/toast/toast.type.d.ts.map +1 -0
- package/dist/components/tooltip/index.d.ts +4 -0
- package/dist/components/tooltip/index.d.ts.map +1 -0
- package/dist/components/tooltip/tooltip.d.ts +11 -0
- package/dist/components/tooltip/tooltip.d.ts.map +1 -0
- package/dist/components/tooltip/tooltip.js +2 -0
- package/dist/components/tooltip/tooltip.js.map +1 -0
- package/dist/components/tooltip/tooltip.types.d.ts +39 -0
- package/dist/components/tooltip/tooltip.types.d.ts.map +1 -0
- package/dist/components/tour/index.d.ts +3 -0
- package/dist/components/tour/index.d.ts.map +1 -0
- package/dist/components/tour/tour.d.ts +3 -0
- package/dist/components/tour/tour.d.ts.map +1 -0
- package/dist/components/tour/tour.js +9 -0
- package/dist/components/tour/tour.js.map +1 -0
- package/dist/components/tour/tour.types.d.ts +35 -0
- package/dist/components/tour/tour.types.d.ts.map +1 -0
- package/dist/components/upload/index.d.ts +3 -0
- package/dist/components/upload/index.d.ts.map +1 -0
- package/dist/components/upload/upload.d.ts +3 -0
- package/dist/components/upload/upload.d.ts.map +1 -0
- package/dist/components/upload/upload.js +2 -0
- package/dist/components/upload/upload.js.map +1 -0
- package/dist/components/upload/upload.types.d.ts +95 -0
- package/dist/components/upload/upload.types.d.ts.map +1 -0
- package/dist/components/z-index/index.d.ts +4 -0
- package/dist/components/z-index/index.d.ts.map +1 -0
- package/dist/components/z-index/z-index.context.d.ts +17 -0
- package/dist/components/z-index/z-index.context.d.ts.map +1 -0
- package/dist/components/z-index/z-index.context.js +2 -0
- package/dist/components/z-index/z-index.context.js.map +1 -0
- package/dist/components/z-index/z-index.d.ts +20 -0
- package/dist/components/z-index/z-index.d.ts.map +1 -0
- package/dist/components/z-index/z-index.js +2 -0
- package/dist/components/z-index/z-index.js.map +1 -0
- package/dist/components/z-index/z-index.store.d.ts +14 -0
- package/dist/components/z-index/z-index.store.d.ts.map +1 -0
- package/dist/components/z-index/z-index.store.js +2 -0
- package/dist/components/z-index/z-index.store.js.map +1 -0
- package/dist/components/z-index/z-index.types.d.ts +51 -0
- package/dist/components/z-index/z-index.types.d.ts.map +1 -0
- package/dist/components/z-index/z-index.types.js +2 -0
- package/dist/components/z-index/z-index.types.js.map +1 -0
- package/dist/lib.d.ts +48 -0
- package/dist/lib.d.ts.map +1 -0
- package/dist/lib.js +1 -0
- package/dist/solid-ui.css +94 -0
- package/dist/type.d.ts +4 -0
- package/dist/type.d.ts.map +1 -0
- package/dist/utils/cn.d.ts +3 -0
- package/dist/utils/cn.d.ts.map +1 -0
- package/dist/utils/cn.js +2 -0
- package/dist/utils/cn.js.map +1 -0
- package/dist/utils/element-tracker.js +2 -0
- package/dist/utils/element-tracker.js.map +1 -0
- package/dist/utils/helper.d.ts +32 -0
- package/dist/utils/helper.d.ts.map +1 -0
- package/dist/utils/helper.js +2 -0
- package/dist/utils/helper.js.map +1 -0
- package/dist/utils/hoc.js +2 -0
- package/dist/utils/hoc.js.map +1 -0
- package/package.json +131 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loading.js","names":["cn","BaseColorProps","cva","VariantProps","Component","createUniqueId","mergeProps","Switch","Match","Loader","daisy_variants","variants","variant","spinner","dots","ring","ball","bars","infinity","size","xs","sm","md","lg","xl","svg_size_map","const","base_color_vars","Record","primary","secondary","accent","neutral","info","success","warning","error","resolveColor","color","undefined","DaisyVariant","SvgVariant","SizeKey","LoadingProps","class","LoadingVariantsProps","Loading","props","p","isDaisy","includes","resolvedColor","svgClass","_$createComponent","children","when","_el$","_tmpl$","_$effect","_p$","_v$","_v$2","e","_$className","t","_$style","LoadingSpinner3","LoadingSpinner4","LoadingSpinner5","LoadingSpinner6","Spinner","id","_el$2","_tmpl$2","_el$3","firstChild","_el$4","_el$5","nextSibling","_el$6","_el$7","_el$8","_el$9","_el$0","_$setAttribute","_v$3","_v$4","_v$5","_v$6","_v$7","a","o","i","_el$1","_tmpl$3","_v$8","_v$9","_$setStyleProperty","_el$10","_tmpl$4","_v$0","_v$1","_el$11","_tmpl$5","_el$12","_el$13","_el$14","_v$10","_v$11"],"sources":["../../../src/components/loading/loading.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport { BaseColorProps } from '@/type';\r\nimport { cva, VariantProps } from 'class-variance-authority';\r\nimport { Component, createUniqueId, mergeProps, Switch, Match } from 'solid-js';\r\nimport Loader from 'lucide-solid/icons/loader';\r\n\r\n// Variants dùng DaisyUI classes (spinner, spinner-2, dots, ring, ball, bars, infinity)\r\nconst daisy_variants = cva('loading', {\r\n variants: {\r\n variant: {\r\n spinner: 'loading-spinner',\r\n 'spinner-2': 'loading-spinner-2',\r\n dots: 'loading-dots',\r\n ring: 'loading-ring',\r\n ball: 'loading-ball',\r\n bars: 'loading-bars',\r\n infinity: 'loading-infinity',\r\n },\r\n size: {\r\n xs: 'loading-xs',\r\n sm: 'loading-sm',\r\n md: 'loading-md',\r\n lg: 'loading-lg',\r\n xl: 'loading-xl',\r\n },\r\n },\r\n});\r\n\r\n// Map size → CSS class cho SVG-based spinners\r\nconst svg_size_map = {\r\n xs: 'loading-svg-xs',\r\n sm: 'loading-svg-sm',\r\n md: 'loading-svg-md',\r\n lg: 'loading-svg-lg',\r\n xl: 'loading-svg-xl',\r\n} as const;\r\n\r\n// Map BaseColorProps → CSS variable của DaisyUI/Tailwind\r\nconst base_color_vars: Record<BaseColorProps, string> = {\r\n primary: 'var(--color-primary)',\r\n secondary: 'var(--color-secondary)',\r\n accent: 'var(--color-accent)',\r\n neutral: 'var(--color-neutral)',\r\n info: 'var(--color-info)',\r\n success: 'var(--color-success)',\r\n warning: 'var(--color-warning)',\r\n error: 'var(--color-error)',\r\n};\r\n\r\n/** Resolve color prop: nếu là BaseColorProps key thì map sang CSS var, còn lại dùng trực tiếp */\r\nfunction resolveColor(color: string | undefined): string | undefined {\r\n if (!color) return undefined;\r\n return color in base_color_vars ? base_color_vars[color as BaseColorProps] : color;\r\n}\r\n\r\ntype DaisyVariant = 'spinner' | 'spinner-2' | 'dots' | 'ring' | 'ball' | 'bars' | 'infinity';\r\ntype SvgVariant = 'spinner-3' | 'spinner-4' | 'spinner-5' | 'spinner-6';\r\ntype SizeKey = keyof typeof svg_size_map;\r\n\r\ntype LoadingProps = {\r\n variant?: DaisyVariant | SvgVariant;\r\n size?: SizeKey;\r\n /** Nhận BaseColorProps ('primary', 'error', ...) hoặc bất kỳ giá trị CSS color nào */\r\n color?: BaseColorProps | string;\r\n class?: string;\r\n};\r\n\r\nexport type LoadingVariantsProps = VariantProps<typeof daisy_variants>;\r\n\r\nexport const Loading: Component<LoadingProps> = props => {\r\n const p = mergeProps({ variant: 'spinner' as const, size: 'sm' as const }, props);\r\n\r\n const isDaisy = () =>\r\n !['spinner-3', 'spinner-4', 'spinner-5', 'spinner-6'].includes(p.variant as string);\r\n\r\n const resolvedColor = () => resolveColor(p.color);\r\n const svgClass = () => cn(svg_size_map[p.size as SizeKey], p.class);\r\n\r\n return (\r\n <Switch>\r\n <Match when={isDaisy()}>\r\n <div\r\n class={cn(\r\n daisy_variants({\r\n variant: p.variant as DaisyVariant,\r\n size: p.size,\r\n }),\r\n p.class,\r\n )}\r\n style={resolvedColor() ? { color: resolvedColor() } : undefined}\r\n />\r\n </Match>\r\n <Match when={p.variant === 'spinner-3'}>\r\n <LoadingSpinner3 class={svgClass()} color={resolvedColor()} />\r\n </Match>\r\n <Match when={p.variant === 'spinner-4'}>\r\n <LoadingSpinner4 class={svgClass()} color={resolvedColor()} />\r\n </Match>\r\n <Match when={p.variant === 'spinner-5'}>\r\n <LoadingSpinner5 class={svgClass()} color={resolvedColor()} />\r\n </Match>\r\n <Match when={p.variant === 'spinner-6'}>\r\n <LoadingSpinner6 class={svgClass()} color={resolvedColor()} />\r\n </Match>\r\n </Switch>\r\n );\r\n};\r\nexport const Spinner: Component<{ class?: string; color?: string }> = p => {\r\n const id = createUniqueId();\r\n\r\n p = mergeProps({ color: '#6E56CF' } as const, p);\r\n\r\n return (\r\n <div class={cn('size-3 animate-spin', p.class)}>\r\n <svg\r\n width=\"inherit\"\r\n height=\"inherit\"\r\n viewBox=\"0 0 20 20\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <ellipse\r\n cx=\"9.99995\"\r\n cy=\"9.99995\"\r\n rx=\"7.31001\"\r\n ry=\"7.31001\"\r\n stroke={p.color}\r\n stroke-opacity=\"0.25\"\r\n stroke-width=\"4\"\r\n />\r\n <path\r\n d=\"M9.94939 2.69013C11.8881 2.67671 13.7527 3.43398 15.133 4.79535C16.5134 6.15671 17.2964 8.01067 17.3098 9.94936\"\r\n stroke={`url(#${id})`}\r\n stroke-width=\"4\"\r\n stroke-linecap=\"round\"\r\n stroke-dasharray=\"1.23 1.23\"\r\n />\r\n <defs>\r\n <linearGradient\r\n id={id}\r\n x1=\"16.3108\"\r\n y1=\"13.6892\"\r\n x2=\"3.68922\"\r\n y2=\"6.31075\"\r\n gradientUnits=\"userSpaceOnUse\"\r\n >\r\n <stop stop-color={p.color} />\r\n <stop offset=\"0.5\" stop-color={p.color} stop-opacity=\"0.01\" />\r\n <stop offset=\"1\" stop-color={p.color} stop-opacity=\"0\" />\r\n </linearGradient>\r\n </defs>\r\n </svg>\r\n </div>\r\n );\r\n};\r\nconst LoadingSpinner3: Component<{ class?: string; color?: string }> = p => {\r\n p = mergeProps({ color: 'currentColor' } as const, p);\r\n return (\r\n <div class={cn('size-7 p-0', p.class)} style={{ color: p.color }}>\r\n <svg fill=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g>\r\n <circle cx=\"12\" cy=\"3\" r=\"1\">\r\n <animate\r\n id=\"_dcbb18\"\r\n begin=\"0;_84a13e.end-0.5s\"\r\n attributeName=\"r\"\r\n calcMode=\"spline\"\r\n dur=\"0.6s\"\r\n values=\"1;2;1\"\r\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\r\n />\r\n </circle>\r\n <circle cx=\"16.50\" cy=\"4.21\" r=\"1\">\r\n <animate\r\n id=\"_92c238\"\r\n begin=\"_dcbb18.begin+0.1s\"\r\n attributeName=\"r\"\r\n calcMode=\"spline\"\r\n dur=\"0.6s\"\r\n values=\"1;2;1\"\r\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\r\n />\r\n </circle>\r\n <circle cx=\"7.50\" cy=\"4.21\" r=\"1\">\r\n <animate\r\n id=\"_84a13e\"\r\n begin=\"_5abc3e.begin+0.1s\"\r\n attributeName=\"r\"\r\n calcMode=\"spline\"\r\n dur=\"0.6s\"\r\n values=\"1;2;1\"\r\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\r\n />\r\n </circle>\r\n <circle cx=\"19.79\" cy=\"7.50\" r=\"1\">\r\n <animate\r\n id=\"_9d19c8\"\r\n begin=\"_92c238.begin+0.1s\"\r\n attributeName=\"r\"\r\n calcMode=\"spline\"\r\n dur=\"0.6s\"\r\n values=\"1;2;1\"\r\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\r\n />\r\n </circle>\r\n <circle cx=\"4.21\" cy=\"7.50\" r=\"1\">\r\n <animate\r\n id=\"_5abc3e\"\r\n begin=\"_dcfbb2.begin+0.1s\"\r\n attributeName=\"r\"\r\n calcMode=\"spline\"\r\n dur=\"0.6s\"\r\n values=\"1;2;1\"\r\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\r\n />\r\n </circle>\r\n <circle cx=\"21.00\" cy=\"12.00\" r=\"1\">\r\n <animate\r\n id=\"_cf88a3\"\r\n begin=\"_9d19c8.begin+0.1s\"\r\n attributeName=\"r\"\r\n calcMode=\"spline\"\r\n dur=\"0.6s\"\r\n values=\"1;2;1\"\r\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\r\n />\r\n </circle>\r\n <circle cx=\"3.00\" cy=\"12.00\" r=\"1\">\r\n <animate\r\n id=\"_dcfbb2\"\r\n begin=\"_514e98.begin+0.1s\"\r\n attributeName=\"r\"\r\n calcMode=\"spline\"\r\n dur=\"0.6s\"\r\n values=\"1;2;1\"\r\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\r\n />\r\n </circle>\r\n <circle cx=\"19.79\" cy=\"16.50\" r=\"1\">\r\n <animate\r\n id=\"_2fecf8\"\r\n begin=\"_cf88a3.begin+0.1s\"\r\n attributeName=\"r\"\r\n calcMode=\"spline\"\r\n dur=\"0.6s\"\r\n values=\"1;2;1\"\r\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\r\n />\r\n </circle>\r\n <circle cx=\"4.21\" cy=\"16.50\" r=\"1\">\r\n <animate\r\n id=\"_514e98\"\r\n begin=\"_c4d048.begin+0.1s\"\r\n attributeName=\"r\"\r\n calcMode=\"spline\"\r\n dur=\"0.6s\"\r\n values=\"1;2;1\"\r\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\r\n />\r\n </circle>\r\n <circle cx=\"16.50\" cy=\"19.79\" r=\"1\">\r\n <animate\r\n id=\"_033759\"\r\n begin=\"_2fecf8.begin+0.1s\"\r\n attributeName=\"r\"\r\n calcMode=\"spline\"\r\n dur=\"0.6s\"\r\n values=\"1;2;1\"\r\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\r\n />\r\n </circle>\r\n <circle cx=\"7.50\" cy=\"19.79\" r=\"1\">\r\n <animate\r\n id=\"_c4d048\"\r\n begin=\"_3ec8bd.begin+0.1s\"\r\n attributeName=\"r\"\r\n calcMode=\"spline\"\r\n dur=\"0.6s\"\r\n values=\"1;2;1\"\r\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\r\n />\r\n </circle>\r\n <circle cx=\"12\" cy=\"21\" r=\"1\">\r\n <animate\r\n id=\"_3ec8bd\"\r\n begin=\"_033759.begin+0.1s\"\r\n attributeName=\"r\"\r\n calcMode=\"spline\"\r\n dur=\"0.6s\"\r\n values=\"1;2;1\"\r\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\r\n />\r\n </circle>\r\n <animateTransform\r\n attributeName=\"transform\"\r\n type=\"rotate\"\r\n dur=\"6s\"\r\n values=\"360 12 12;0 12 12\"\r\n repeatCount=\"indefinite\"\r\n />\r\n </g>\r\n </svg>\r\n </div>\r\n );\r\n};\r\nconst LoadingSpinner4: Component<{ class?: string; color?: string }> = p => {\r\n return <Loader class={cn('animate-spin', p.class)} color={p.color} />;\r\n};\r\nconst LoadingSpinner5: Component<{ class?: string; color?: string }> = p => {\r\n p = mergeProps({ class: 'size-6' } as const, p);\r\n return (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n x=\"0px\"\r\n y=\"0px\"\r\n viewBox=\"0 0 2400 2400\"\r\n class={p.class}\r\n style={{ color: p.color }}\r\n >\r\n <g stroke-width=\"200\" stroke-linecap=\"round\" stroke=\"currentColor\" fill=\"none\" id=\"spinner\">\r\n <line x1=\"1200\" y1=\"600\" x2=\"1200\" y2=\"100\" />\r\n <line opacity=\"0.5\" x1=\"1200\" y1=\"2300\" x2=\"1200\" y2=\"1800\" />\r\n <line opacity=\"0.917\" x1=\"900\" y1=\"680.4\" x2=\"650\" y2=\"247.4\" />\r\n <line opacity=\"0.417\" x1=\"1750\" y1=\"2152.6\" x2=\"1500\" y2=\"1719.6\" />\r\n <line opacity=\"0.833\" x1=\"680.4\" y1=\"900\" x2=\"247.4\" y2=\"650\" />\r\n <line opacity=\"0.333\" x1=\"2152.6\" y1=\"1750\" x2=\"1719.6\" y2=\"1500\" />\r\n <line opacity=\"0.75\" x1=\"600\" y1=\"1200\" x2=\"100\" y2=\"1200\" />\r\n <line opacity=\"0.25\" x1=\"2300\" y1=\"1200\" x2=\"1800\" y2=\"1200\" />\r\n <line opacity=\"0.667\" x1=\"680.4\" y1=\"1500\" x2=\"247.4\" y2=\"1750\" />\r\n <line opacity=\"0.167\" x1=\"2152.6\" y1=\"650\" x2=\"1719.6\" y2=\"900\" />\r\n <line opacity=\"0.583\" x1=\"900\" y1=\"1719.6\" x2=\"650\" y2=\"2152.6\" />\r\n <line opacity=\"0.083\" x1=\"1750\" y1=\"247.4\" x2=\"1500\" y2=\"680.4\" />\r\n <animateTransform\r\n attributeName=\"transform\"\r\n attributeType=\"XML\"\r\n type=\"rotate\"\r\n keyTimes=\"0;0.08333;0.16667;0.25;0.33333;0.41667;0.5;0.58333;0.66667;0.75;0.83333;0.91667\"\r\n values=\"0 1199 1199;30 1199 1199;60 1199 1199;90 1199 1199;120 1199 1199;150 1199 1199;180 1199 1199;210 1199 1199;240 1199 1199;270 1199 1199;300 1199 1199;330 1199 1199\"\r\n dur=\"0.83333s\"\r\n begin=\"0s\"\r\n repeatCount=\"indefinite\"\r\n calcMode=\"discrete\"\r\n />\r\n </g>\r\n </svg>\r\n );\r\n};\r\nconst LoadingSpinner6: Component<{ class?: string; color?: string }> = p => {\r\n p = mergeProps({ class: 'size-6' } as const, p);\r\n const id = createUniqueId();\r\n return (\r\n <svg\r\n fill=\"none\"\r\n viewBox=\"0 0 20 20\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n class={p.class}\r\n style={{ color: p.color }}\r\n >\r\n <defs>\r\n <linearGradient id={id}>\r\n <stop offset=\"0%\" stop-color=\"currentColor\" stop-opacity=\"1\" />\r\n <stop offset=\"100%\" stop-color=\"currentColor\" stop-opacity=\"0.25\" />\r\n </linearGradient>\r\n </defs>\r\n <circle\r\n cx=\"10\"\r\n cy=\"10\"\r\n r=\"8\"\r\n stroke-width=\"2\"\r\n class=\"animate-spin\"\r\n stroke={`url(#${id})`}\r\n fill=\"none\"\r\n style={{ 'transform-origin': '50% 50%' }}\r\n />\r\n </svg>\r\n );\r\n};\r\n"],"mappings":"o7JAOMU,EAAiBR,EAAI,UAAW,CACpCS,SAAU,CACRC,QAAS,CACPC,QAAS,kBACT,YAAa,oBACbC,KAAM,eACNC,KAAM,eACNC,KAAM,eACNC,KAAM,eACNC,SAAU,mBACX,CACDC,KAAM,CACJC,GAAI,aACJC,GAAI,aACJC,GAAI,aACJC,GAAI,aACJC,GAAI,aACN,CACF,CACD,CAAC,CAGIC,EAAe,CACnBL,GAAI,iBACJC,GAAI,iBACJC,GAAI,iBACJC,GAAI,iBACJC,GAAI,iBACL,CAGKG,EAAkD,CACtDE,QAAS,uBACTC,UAAW,yBACXC,OAAQ,sBACRC,QAAS,uBACTC,KAAM,oBACNC,QAAS,uBACTC,QAAS,uBACTC,MAAO,qBACR,CAGD,SAASC,EAAaC,EAA+C,CAC9DA,KACL,OAAOA,KAASX,EAAkBA,EAAgBW,GAA2BA,EAiB/E,IAAaQ,EAAmCC,GAAS,CACvD,IAAMC,EAAI1C,EAAW,CAAEM,QAAS,UAAoBO,KAAM,KAAe,CAAE4B,EAAM,CAE3EE,MACJ,CAAC,CAAC,YAAa,YAAa,YAAa,YAAY,CAACC,SAASF,EAAEpC,QAAkB,CAE/EuC,MAAsBd,EAAaW,EAAEV,MAAM,CAC3Cc,MAAiBpD,EAAGyB,EAAauB,EAAE7B,MAAkB6B,EAAEJ,MAAM,CAEnE,OAAAS,EACG9C,EAAM,CAAA,IAAA+C,UAAA,CAAA,MAAA,CAAAD,EACJ7C,EAAK,CAAA,IAAC+C,MAAI,CAAA,OAAEN,GAAS,EAAA,IAAAK,UAAA,CAAA,IAAAE,EAAAC,GAAA,CAS6C,OAT7CC,EAAAC,GAAA,CAAA,IAAAC,EAEX5D,EACLU,EAAe,CACbE,QAASoC,EAAEpC,QACXO,KAAM6B,EAAE7B,KACT,CAAC,CACF6B,EAAEJ,MACH,CAAAiB,EACMV,GAAe,CAAG,CAAEb,MAAOa,GAAc,CAAG,CAAGZ,IAAAA,GAAS,OAAAqB,IAAAD,EAAAG,GAAAC,EAAAP,EAAAG,EAAAG,EAAAF,EAAA,CAAAD,EAAAK,EAAAC,EAAAT,EAAAK,EAAAF,EAAAK,EAAA,CAAAL,GAAA,CAAAG,EAAAvB,IAAAA,GAAAyB,EAAAzB,IAAAA,GAAA,CAAA,CAAAiB,GAAA,CAAA,CAAAH,EAGlE7C,EAAK,CAAA,IAAC+C,MAAI,CAAA,OAAEP,EAAEpC,UAAY,aAAW,IAAA0C,UAAA,CAAA,OAAAD,EACnCa,EAAe,CAAA,IAAA,OAAA,CAAA,OAAQd,GAAU,EAAA,IAAEd,OAAK,CAAA,OAAEa,GAAe,EAAA,CAAA,EAAA,CAAA,CAAAE,EAE3D7C,EAAK,CAAA,IAAC+C,MAAI,CAAA,OAAEP,EAAEpC,UAAY,aAAW,IAAA0C,UAAA,CAAA,OAAAD,EACnCc,EAAe,CAAA,IAAA,OAAA,CAAA,OAAQf,GAAU,EAAA,IAAEd,OAAK,CAAA,OAAEa,GAAe,EAAA,CAAA,EAAA,CAAA,CAAAE,EAE3D7C,EAAK,CAAA,IAAC+C,MAAI,CAAA,OAAEP,EAAEpC,UAAY,aAAW,IAAA0C,UAAA,CAAA,OAAAD,EACnCe,EAAe,CAAA,IAAA,OAAA,CAAA,OAAQhB,GAAU,EAAA,IAAEd,OAAK,CAAA,OAAEa,GAAe,EAAA,CAAA,EAAA,CAAA,CAAAE,EAE3D7C,EAAK,CAAA,IAAC+C,MAAI,CAAA,OAAEP,EAAEpC,UAAY,aAAW,IAAA0C,UAAA,CAAA,OAAAD,EACnCgB,EAAe,CAAA,IAAA,OAAA,CAAA,OAAQjB,GAAU,EAAA,IAAEd,OAAK,CAAA,OAAEa,GAAe,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA,CAAA,EAKrDmB,EAAyDtB,GAAK,CACzE,IAAMuB,EAAKlE,GAAgB,CAI3B,MAFA2C,GAAI1C,EAAW,CAAEgC,MAAO,UAAW,CAAWU,EAAE,MAEhD,CAAA,IAAAwB,EAAAC,GAAA,CAAAG,EAAAJ,EAAAG,WAAAA,WAAAE,EAAAD,EAAAE,YAAAE,EAAAH,EAAAC,YAAAH,WAAAM,EAAAD,EAAAL,WAAAO,EAAAD,EAAAH,YAAAK,EAAAD,EAAAJ,YAoC8C,OApC9CM,EAAAP,EAAA,SAoBgB,QAAQN,EAAE,GAAG,CAAAa,EAAAJ,EAAA,KAOfT,EAAE,CAAAb,EAAAC,GAAA,CAAA,IAAA0B,EA1BFrF,EAAG,sBAAuBgD,EAAEJ,MAAM,CAAA0C,EAahCtC,EAAEV,MAAKiD,EAoBKvC,EAAEV,MAAKkD,EACMxC,EAAEV,MAAKmD,EACTzC,EAAEV,MAAK,OAAA+C,IAAA1B,EAAAG,GAAAC,EAAAS,EAAAb,EAAAG,EAAAuB,EAAA,CAAAC,IAAA3B,EAAAK,GAAAoB,EAAAR,EAAA,SAAAjB,EAAAK,EAAAsB,EAAA,CAAAC,IAAA5B,EAAA+B,GAAAN,EAAAH,EAAA,aAAAtB,EAAA+B,EAAAH,EAAA,CAAAC,IAAA7B,EAAAgC,GAAAP,EAAAF,EAAA,aAAAvB,EAAAgC,EAAAH,EAAA,CAAAC,IAAA9B,EAAAiC,GAAAR,EAAAD,EAAA,aAAAxB,EAAAiC,EAAAH,EAAA,CAAA9B,GAAA,CAAAG,EAAAvB,IAAAA,GAAAyB,EAAAzB,IAAAA,GAAAmD,EAAAnD,IAAAA,GAAAoD,EAAApD,IAAAA,GAAAqD,EAAArD,IAAAA,GAAA,CAAA,CAAAiC,KAAA,EAO1CN,EAAiElB,IACrEA,EAAI1C,EAAW,CAAEgC,MAAO,eAAgB,CAAWU,EAAE,MACrD,CAAA,IAAA6C,EAAAC,GAAA,CACgE,OADhEpC,EAAAC,GAAA,CAAA,IAAAoC,EACc/F,EAAG,aAAcgD,EAAEJ,MAAM,CAAAoD,EAAkBhD,EAAEV,MAAK,OAAAyD,IAAApC,EAAAG,GAAAC,EAAA8B,EAAAlC,EAAAG,EAAAiC,EAAA,CAAAC,IAAArC,EAAAK,GAAAiC,EAAAJ,EAAA,QAAAlC,EAAAK,EAAAgC,EAAA,CAAArC,GAAA,CAAAG,EAAAvB,IAAAA,GAAAyB,EAAAzB,IAAAA,GAAA,CAAA,CAAAsD,KAAA,EAmJ5D1B,EAAiEnB,GACrEK,EAAQ5C,EAAM,CAAA,IAAA,OAAA,CAAA,OAAQT,EAAG,eAAgBgD,EAAEJ,MAAM,EAAA,IAAEN,OAAK,CAAA,OAAEU,EAAEV,OAAK,CAAA,CAE7D8B,EAAiEpB,IACrEA,EAAI1C,EAAW,CAAEsC,MAAO,SAAU,CAAWI,EAAE,MAC/C,CAAA,IAAAkD,EAAAC,GAAA,CAQ2B,OAR3BzC,EAAAC,GAAA,CAAA,IAAAyC,EAOWpD,EAAEJ,MAAKyD,EACErD,EAAEV,MAAK,OAAA8D,IAAAzC,EAAAG,GAAAsB,EAAAc,EAAA,QAAAvC,EAAAG,EAAAsC,EAAA,CAAAC,IAAA1C,EAAAK,GAAAiC,EAAAC,EAAA,QAAAvC,EAAAK,EAAAqC,EAAA,CAAA1C,GAAA,CAAAG,EAAAvB,IAAAA,GAAAyB,EAAAzB,IAAAA,GAAA,CAAA,CAAA2D,KAAA,EA8BvB7B,EAAiErB,GAAK,CAC1EA,EAAI1C,EAAW,CAAEsC,MAAO,SAAU,CAAWI,EAAE,CAC/C,IAAMuB,EAAKlE,GAAgB,CAC3B,WAAA,CAAA,IAAAiG,EAAAC,GAAA,CAAAC,EAAAF,EAAA3B,WAAA8B,EAAAD,EAAA7B,WAAA+B,EAAAF,EAAA1B,YAM2B,OAN3BM,EAAAqB,EAAA,KAS0BlC,EAAE,CAAAa,EAAAsB,EAAA,SAWd,QAAQnC,EAAE,GAAG,CAAAb,EAAAC,GAAA,CAAA,IAAAgD,EAfhB3D,EAAEJ,MAAKgE,EACE5D,EAAEV,MAAK,OAAAqE,IAAAhD,EAAAG,GAAAsB,EAAAkB,EAAA,QAAA3C,EAAAG,EAAA6C,EAAA,CAAAC,IAAAjD,EAAAK,GAAAiC,EAAAK,EAAA,QAAA3C,EAAAK,EAAA4C,EAAA,CAAAjD,GAAA,CAAAG,EAAAvB,IAAAA,GAAAyB,EAAAzB,IAAAA,GAAA,CAAA,CAAA+D,KAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/mansory/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EACV,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mansory.d.ts","sourceRoot":"","sources":["../../../src/components/mansory/mansory.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,SAAS,EAYV,MAAM,UAAU,CAAC;AAGlB,OAAO,KAAK,EAGV,YAAY,EAGb,MAAM,iBAAiB,CAAC;AAkKzB,eAAO,MAAM,OAAO,EAAE,SAAS,CAAC,YAAY,CAiW3C,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{cn as e}from"../../utils/cn.js";import{createThrottle as t}from"../../utils/helper.js";import{addEventListener as n,className as r,createComponent as i,effect as a,insert as o,setAttribute as s,setStyleProperty as c,style as l,template as u,use as d}from"solid-js/web";import{For as f,Show as p,createEffect as m,createMemo as h,createRoot as g,createSignal as _,mergeProps as ee,on as v,onCleanup as y,onMount as te,untrack as b}from"solid-js";var x=u(`<div>`),S=u(`<div class=ma08>No items`),C=u(`<div><div class=ma02>`),w={sm:640,md:768,lg:1024,xl:1280,"2xl":1536},T=[`sm`,`md`,`lg`,`xl`,`2xl`],E={default:1,sm:2,md:3,lg:4},D=`gap-4`,O=50,k=new Map;function A(e,t){if(typeof e!=`object`||!e||Array.isArray(e))return e;let n=e;for(let e=T.length-1;e>=0;e--){let r=T[e];if(t>=w[r]&&n[r]!==void 0)return n[r]}return n.default??(typeof e==`object`?void 0:e)}function j(e,t){let n=document.createElement(`div`);n.className=`ma06 ${e}`,n.style.display=`grid`,n.style.gridTemplateColumns=`1fr 1fr`,n.appendChild(document.createElement(`div`)),n.appendChild(document.createElement(`div`)),t.appendChild(n);let r=getComputedStyle(n),i=parseFloat(r.columnGap||r.gap||`0`);return t.removeChild(n),i}function M(e,t){if(k.has(e))return k.get(e);let n=j(e,t);if(k.size>=O){let e=k.keys().next().value;e!==void 0&&k.delete(e)}return k.set(e,n),n}function ne(e,t,n,r){let i=Math.max(1,t),a=(n-r*(i-1))/i,o=Array(i).fill(0),s=[],c=[];for(let t=0;t<e.length;t++){let n=0;for(let e=1;e<i;e++)o[e]<o[n]&&(n=e);let l=n*(a+r),u=o[n],d=e[t]??0,f={index:t,top:u,left:l,width:a,height:d};s.push(f);let p=c.length-1;for(;p>=0&&c[p].top>u;)p--;c.splice(p+1,0,f),o[n]=u+d+r}let l=0;for(let e=0;e<o.length;e++)o[e]>l&&(l=o[e]);return{layouts:s,totalHeight:l>0?l-r:0,sortedByTop:c}}function re(e,t){let n=0,r=e.length;for(;n<r;){let i=n+r>>1;e[i].top+e[i].height<t?n=i+1:r=i}return n}var ie=t=>{let n=t.getLayoutAccessor(t.index),i=h(()=>{let e=n();if(!e)return{wrapper:{},child:{}};let t=`${e.width}px`;return{wrapper:{width:t,transform:`translate3d(${e.left}px, ${e.top}px, 0)`},child:{width:t}}});return(()=>{var n=x();return d(e=>{t.onRegister(t.index,e),y(function(){t.onUnregister(t.index)})},n),o(n,()=>t.children(t.items[t.index],()=>t.index,i().child)),a(a=>{var o=t.index,c=e(`ma03 ma04`,t.itemClass),u=i().wrapper;return o!==a.e&&s(n,`data-mansory-idx`,a.e=o),c!==a.t&&r(n,a.t=c),a.a=l(n,u,a.a),a},{e:void 0,t:void 0,a:void 0}),n})()},N=s=>{let l=ee({columns:E,gap:D,virtual:!1,estimateItemHeight:200,loadMoreThreshold:200},s),u,x,[w,T]=_(0),[O,k]=_([]),j=h(()=>{let e=A(l.columns,w());return Math.max(1,e??1)}),N=h(()=>A(l.gap,w())??`gap-4`),[ae,oe]=_(16);m(function(){N(),u&&oe(M(N(),u))});let P=h(()=>ne(O(),j(),w(),ae())),se=h(()=>P().totalHeight),F=new Map,I=new Map,L=new Map;function R(e){return F.has(e)||g(function(t){L.set(e,t);let[n,r]=_(b(()=>P().layouts[e]),{equals:(e,t)=>e===t?!0:!e||!t?!1:e.top===t.top&&e.left===t.left&&e.width===t.width&&e.height===t.height});F.set(e,n),I.set(e,r)}),F.get(e)}function z(e){L.get(e)?.(),L.delete(e),F.delete(e),I.delete(e)}y(function(){for(let e of L.values())e();L.clear(),F.clear(),I.clear(),$.clear()}),m(function(){let e=P().layouts;for(let[t,n]of I)n(e[t])});let B=h(()=>{let e=l.virtual;return e?e===!0?{overscan:5}:{overscan:e.overscan??5}:null}),V=h(()=>B()!==null),[H,U]=_(0),W=null,G=0,K=!1,q=null,J=new Map,Y=t(function(){if(J.size===0)return;let e=new Map(J);J.clear(),k(t=>{let n=!1;for(let[r,i]of e)if(t[r]!==i){n=!0;break}if(!n)return t;let r=[...t];for(let[t,n]of e)r[t]=n;return r})},100);y(function(){Y.cancel()});let X=new ResizeObserver(e=>{for(let t of e){let e=t.target,n=parseInt(e.dataset.mansoryIdx??`-1`,10);if(n<0)continue;let r=t.contentBoxSize?.[0]?.blockSize??t.contentRect.height;J.set(n,r)}Y()});y(function(){X.disconnect()}),te(()=>{let e=t(function(e){T(e)},100),n=new ResizeObserver(t=>{for(let n of t)e(n.contentBoxSize?.[0]?.inlineSize??n.contentRect.width)});n.observe(u),y(function(){e.cancel(),n.disconnect()})});let Z=new Map;function ce(e,t){Z.set(e,t),X.observe(t)}function le(e){let t=Z.get(e);t&&(X.unobserve(t),Z.delete(e))}m(v(()=>l.items.length,e=>{k(t=>{let n=t.length;if(n===e)return t;if(e>n){let r=[...t];for(let t=n;t<e;t++)r.push(l.estimateItemHeight);return r}for(let t=e;t<n;t++)z(t);return t.slice(0,e)})}));function ue(e){if(!l.onLoadMore||K)return;let{scrollHeight:t,clientHeight:n}=u;e+n>=t-l.loadMoreThreshold&&(K=!0,q&&clearTimeout(q),q=setTimeout(()=>{K=!1,q=null},1e4),l.onLoadMore())}m(v(()=>l.items.length,()=>{q&&=(clearTimeout(q),null),K=!1})),y(function(){q&&clearTimeout(q)}),y(function(){W!==null&&cancelAnimationFrame(W)});function Q(){G=u.scrollTop,W===null&&(W=requestAnimationFrame(()=>{W=null,U(G),ue(G)}))}let de=h((e=[])=>{let t=l.items.length;if(t===e.length)return e;if(t>e.length){let n=[...e];for(let r=e.length;r<t;r++)n.push(r);return n}return e.slice(0,t)}),fe=h(()=>{if(!V())return de();if(w()===0)return[];let e=H(),t=u.clientHeight,n=(B()?.overscan??5)*l.estimateItemHeight,r=e-n,i=e+t+n,a=P().sortedByTop,o=re(a,r),s=[];for(let e=o;e<a.length&&!(a[e].top>i);e++)s.push(a[e].index);return s}),$=new Map,pe=h(()=>{let e=fe();if(!l.getItemKey)return e;let t=new Set,n=e.map(e=>{let n=l.getItemKey(l.items[e],e);t.add(n);let r=$.get(n);return r?r.index=e:(r={key:n,index:e},$.set(n,r)),r});for(let e of $.keys())t.has(e)||$.delete(e);return n});return(()=>{var t=C(),s=t.firstChild;n(t,`scroll`,V()||l.onLoadMore?Q:void 0);var m=u;typeof m==`function`?d(m,t):u=t;var h=x;return typeof h==`function`?d(h,s):x=s,o(s,i(f,{get each(){return pe()},children:e=>i(ie,{index:typeof e==`number`?e:e.index,getLayoutAccessor:R,get items(){return l.items},get itemClass(){return l.itemClass},onRegister:ce,onUnregister:le,get children(){return l.children}})})),o(t,i(p,{get when(){return l.items.length===0},get children(){return S()}}),null),a(n=>{var i=e(`ma01`,V()&&`ma05`,l.class),a=`${se()}px`;return i!==n.e&&r(t,n.e=i),a!==n.t&&c(s,`height`,n.t=a),n},{e:void 0,t:void 0}),t})()};export{N as Mansory};
|
|
2
|
+
//# sourceMappingURL=mansory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mansory.js","names":["Accessor","Component","createEffect","createMemo","createRoot","createSignal","For","mergeProps","on","onCleanup","onMount","Show","untrack","cn","createThrottle","MansoryBreakpoint","MansoryItemLayout","MansoryProps","MansoryResponsive","MansoryVirtualOptions","BREAKPOINTS","Record","Exclude","sm","md","lg","xl","BP_KEYS","const","DEFAULT_COLUMNS","default","DEFAULT_GAP","GAP_CACHE_MAX","gapCache","Map","resolveResponsive","config","T","containerWidth","Array","isArray","map","i","length","key","undefined","measureGapPx","gapClass","container","HTMLElement","probe","document","createElement","className","style","display","gridTemplateColumns","appendChild","computed","getComputedStyle","gap","parseFloat","columnGap","removeChild","measureGapPxCached","has","get","value","size","firstKey","keys","next","delete","set","computeLayout","itemHeights","columns","gapPx","layouts","totalHeight","sortedByTop","cols","Math","max","totalGap","colWidth","colHeights","fill","minCol","c","left","top","height","item","index","width","push","j","splice","maxH","findFirstVisible","sorted","visTop","lo","hi","mid","MansoryItemProps","getLayoutAccessor","items","itemClass","children","onRegister","el","HTMLDivElement","onUnregister","MansoryItem","props","itemLayout","styles","l","wrapper","child","widthPx","transform","_el$","_tmpl$","_$use","unregisterItem","_$insert","_$effect","_p$","_v$","_v$2","_v$3","e","_$setAttribute","t","_$className","a","_$style","Mansory","rawProps","virtual","estimateItemHeight","loadMoreThreshold","containerEl","innerEl","setContainerWidth","setItemHeights","currentColumns","resolved","currentGapClass","setGapPx","trackGapClass","_","layout","layoutAccessors","layoutSetters","v","layoutDisposers","getOrCreateLayoutAccessor","layoutSignalRoot","dispose","initialValue","equals","b","disposeLayoutSignal","disposeAllLayoutSignals","values","clear","keyEntryCache","syncLayoutSetters","newLayouts","setter","virtualOpts","overscan","isVirtual","scrollTop","setScrollTop","rafId","pendingScrollTop","loadMoreCooldown","loadMoreTimer","ReturnType","setTimeout","pendingItemChanges","flushItemHeights","applyItemHeightChanges","snapshot","prev","hasChange","idx","h","cancelFlushItemHeights","cancel","itemRO","ResizeObserver","entries","entry","target","parseInt","dataset","mansoryIdx","contentBoxSize","blockSize","contentRect","disconnectItemResizeObserver","disconnect","applyContainerWidth","applyContainerWidthChange","containerRO","inlineSize","observe","disconnectContainerResizeObserver","itemElMap","registerItem","unobserve","len","prevLen","slice","checkLoadMore","currentScrollTop","onLoadMore","scrollHeight","clientHeight","clearTimeout","clearLoadMoreTimer","cancelPendingRaf","cancelAnimationFrame","handleScroll","requestAnimationFrame","allIndices","renderedIndices","viewportHeight","overscanPx","visBottom","start","indices","renderedKeys","getItemKey","activeKeys","Set","add","k","_el$2","_tmpl$3","_el$3","firstChild","_$addEventListener","_ref$","_ref$2","_$createComponent","each","when","_tmpl$2","_v$4","class","_v$5","_$setStyleProperty"],"sources":["../../../src/components/mansory/mansory.tsx"],"sourcesContent":["import {\r\n Accessor,\r\n Component,\r\n createEffect,\r\n createMemo,\r\n createRoot,\r\n createSignal,\r\n For,\r\n mergeProps,\r\n on,\r\n onCleanup,\r\n onMount,\r\n Show,\r\n untrack,\r\n} from 'solid-js';\r\nimport { cn } from '@utils/cn';\r\nimport { createThrottle } from '@utils/helper';\r\nimport type {\r\n MansoryBreakpoint,\r\n MansoryItemLayout,\r\n MansoryProps,\r\n MansoryResponsive,\r\n MansoryVirtualOptions,\r\n} from './mansory.types';\r\n\r\nconst BREAKPOINTS: Record<Exclude<MansoryBreakpoint, 'default'>, number> = {\r\n sm: 640,\r\n md: 768,\r\n lg: 1024,\r\n xl: 1280,\r\n '2xl': 1536,\r\n};\r\n\r\nconst BP_KEYS = ['sm', 'md', 'lg', 'xl', '2xl'] as const;\r\n\r\nconst DEFAULT_COLUMNS: MansoryResponsive<number> = {\r\n default: 1,\r\n sm: 2,\r\n md: 3,\r\n lg: 4,\r\n};\r\n\r\nconst DEFAULT_GAP = 'gap-4';\r\n\r\nconst GAP_CACHE_MAX = 50;\r\nconst gapCache = new Map<string, number>();\r\n\r\nfunction resolveResponsive<T>(config: T | MansoryResponsive<T>, containerWidth: number): T {\r\n if (typeof config !== 'object' || config === null || Array.isArray(config)) {\r\n return config as T;\r\n }\r\n\r\n const map = config as MansoryResponsive<T>;\r\n\r\n for (let i = BP_KEYS.length - 1; i >= 0; i--) {\r\n const key = BP_KEYS[i];\r\n if (containerWidth >= BREAKPOINTS[key] && map[key] !== undefined) {\r\n return map[key] as T;\r\n }\r\n }\r\n\r\n return (map.default ?? (typeof config === 'object' ? undefined : config)) as T;\r\n}\r\n\r\nfunction measureGapPx(gapClass: string, container: HTMLElement): number {\r\n const probe = document.createElement('div');\r\n probe.className = `ma06 ${gapClass}`;\r\n probe.style.display = 'grid';\r\n probe.style.gridTemplateColumns = '1fr 1fr';\r\n\r\n probe.appendChild(document.createElement('div'));\r\n probe.appendChild(document.createElement('div'));\r\n container.appendChild(probe);\r\n const computed = getComputedStyle(probe);\r\n const gap = parseFloat(computed.columnGap || computed.gap || '0');\r\n container.removeChild(probe);\r\n return gap;\r\n}\r\n\r\nfunction measureGapPxCached(gapClass: string, container: HTMLElement): number {\r\n if (gapCache.has(gapClass)) return gapCache.get(gapClass)!;\r\n const value = measureGapPx(gapClass, container);\r\n\r\n if (gapCache.size >= GAP_CACHE_MAX) {\r\n const firstKey = gapCache.keys().next().value;\r\n if (firstKey !== undefined) gapCache.delete(firstKey);\r\n }\r\n gapCache.set(gapClass, value);\r\n return value;\r\n}\r\n\r\nfunction computeLayout(\r\n itemHeights: number[],\r\n columns: number,\r\n containerWidth: number,\r\n gapPx: number,\r\n): { layouts: MansoryItemLayout[]; totalHeight: number; sortedByTop: MansoryItemLayout[] } {\r\n const cols = Math.max(1, columns);\r\n const totalGap = gapPx * (cols - 1);\r\n const colWidth = (containerWidth - totalGap) / cols;\r\n\r\n const colHeights = new Array<number>(cols).fill(0);\r\n const layouts: MansoryItemLayout[] = [];\r\n\r\n const sortedByTop: MansoryItemLayout[] = [];\r\n\r\n for (let i = 0; i < itemHeights.length; i++) {\r\n let minCol = 0;\r\n for (let c = 1; c < cols; c++) {\r\n if (colHeights[c] < colHeights[minCol]) minCol = c;\r\n }\r\n\r\n const left = minCol * (colWidth + gapPx);\r\n const top = colHeights[minCol];\r\n const height = itemHeights[i] ?? 0;\r\n\r\n const item: MansoryItemLayout = { index: i, top, left, width: colWidth, height };\r\n layouts.push(item);\r\n\r\n let j = sortedByTop.length - 1;\r\n while (j >= 0 && sortedByTop[j].top > top) j--;\r\n sortedByTop.splice(j + 1, 0, item);\r\n\r\n colHeights[minCol] = top + height + gapPx;\r\n }\r\n\r\n let maxH = 0;\r\n for (let i = 0; i < colHeights.length; i++) {\r\n if (colHeights[i] > maxH) maxH = colHeights[i];\r\n }\r\n\r\n return { layouts, totalHeight: maxH > 0 ? maxH - gapPx : 0, sortedByTop };\r\n}\r\n\r\nfunction findFirstVisible(sorted: MansoryItemLayout[], visTop: number): number {\r\n let lo = 0,\r\n hi = sorted.length;\r\n while (lo < hi) {\r\n const mid = (lo + hi) >> 1;\r\n if (sorted[mid].top + sorted[mid].height < visTop) lo = mid + 1;\r\n else hi = mid;\r\n }\r\n return lo;\r\n}\r\n\r\ninterface MansoryItemProps {\r\n index: number;\r\n getLayoutAccessor: (index: number) => Accessor<MansoryItemLayout | undefined>;\r\n items: unknown[];\r\n itemClass?: string;\r\n children: MansoryProps['children'];\r\n onRegister: (index: number, el: HTMLDivElement) => void;\r\n onUnregister: (index: number) => void;\r\n}\r\n\r\nconst MansoryItem: Component<MansoryItemProps> = props => {\r\n const itemLayout = props.getLayoutAccessor(props.index);\r\n\r\n const styles = createMemo(() => {\r\n const l = itemLayout();\r\n if (!l) return { wrapper: {} as Record<string, string>, child: {} as Record<string, string> };\r\n const widthPx = `${l.width}px`;\r\n return {\r\n wrapper: { width: widthPx, transform: `translate3d(${l.left}px, ${l.top}px, 0)` },\r\n child: { width: widthPx },\r\n };\r\n });\r\n\r\n return (\r\n <div\r\n ref={el => {\r\n props.onRegister(props.index, el);\r\n onCleanup(function unregisterItem() {\r\n props.onUnregister(props.index);\r\n });\r\n }}\r\n data-mansory-idx={props.index}\r\n class={cn('ma03 ma04', props.itemClass)}\r\n style={styles().wrapper}\r\n >\r\n {props.children(props.items[props.index], () => props.index, styles().child)}\r\n </div>\r\n );\r\n};\r\n\r\nexport const Mansory: Component<MansoryProps> = rawProps => {\r\n const props = mergeProps(\r\n {\r\n columns: DEFAULT_COLUMNS,\r\n gap: DEFAULT_GAP,\r\n virtual: false as boolean | MansoryVirtualOptions,\r\n estimateItemHeight: 200,\r\n loadMoreThreshold: 200,\r\n },\r\n rawProps,\r\n );\r\n\r\n let containerEl!: HTMLDivElement;\r\n let innerEl!: HTMLDivElement;\r\n\r\n const [containerWidth, setContainerWidth] = createSignal(0);\r\n const [itemHeights, setItemHeights] = createSignal<number[]>([]);\r\n\r\n const currentColumns = createMemo(() => {\r\n const resolved = resolveResponsive<number>(props.columns as number, containerWidth());\r\n return Math.max(1, resolved ?? 1);\r\n });\r\n\r\n const currentGapClass = createMemo(() => {\r\n const resolved = resolveResponsive<string>(props.gap as string, containerWidth());\r\n return resolved ?? 'gap-4';\r\n });\r\n\r\n const [gapPx, setGapPx] = createSignal(16);\r\n\r\n createEffect(function trackGapClass() {\r\n const _ = currentGapClass();\r\n if (containerEl) {\r\n setGapPx(measureGapPxCached(currentGapClass(), containerEl));\r\n }\r\n });\r\n\r\n const layout = createMemo(() =>\r\n computeLayout(itemHeights(), currentColumns(), containerWidth(), gapPx()),\r\n );\r\n\r\n const totalHeight = createMemo(() => layout().totalHeight);\r\n\r\n const layoutAccessors = new Map<number, Accessor<MansoryItemLayout | undefined>>();\r\n const layoutSetters = new Map<number, (v: MansoryItemLayout | undefined) => void>();\r\n const layoutDisposers = new Map<number, () => void>();\r\n\r\n function getOrCreateLayoutAccessor(index: number): Accessor<MansoryItemLayout | undefined> {\r\n if (!layoutAccessors.has(index)) {\r\n\r\n createRoot(function layoutSignalRoot(dispose) {\r\n layoutDisposers.set(index, dispose);\r\n const initialValue = untrack(() => layout().layouts[index]);\r\n const [get, set] = createSignal<MansoryItemLayout | undefined>(initialValue, {\r\n equals: (a, b) => {\r\n if (a === b) return true;\r\n if (!a || !b) return false;\r\n return (\r\n a.top === b.top && a.left === b.left && a.width === b.width && a.height === b.height\r\n );\r\n },\r\n });\r\n layoutAccessors.set(index, get);\r\n layoutSetters.set(index, set);\r\n });\r\n }\r\n return layoutAccessors.get(index)!;\r\n }\r\n\r\n function disposeLayoutSignal(index: number) {\r\n layoutDisposers.get(index)?.();\r\n layoutDisposers.delete(index);\r\n layoutAccessors.delete(index);\r\n layoutSetters.delete(index);\r\n }\r\n\r\n onCleanup(function disposeAllLayoutSignals() {\r\n for (const dispose of layoutDisposers.values()) dispose();\r\n layoutDisposers.clear();\r\n layoutAccessors.clear();\r\n layoutSetters.clear();\r\n keyEntryCache.clear();\r\n });\r\n\r\n createEffect(function syncLayoutSetters() {\r\n const newLayouts = layout().layouts;\r\n\r\n for (const [index, setter] of layoutSetters) {\r\n setter(newLayouts[index]);\r\n }\r\n });\r\n\r\n const virtualOpts = createMemo<MansoryVirtualOptions | null>(() => {\r\n const v = props.virtual;\r\n if (!v) return null;\r\n if (v === true) return { overscan: 5 };\r\n return { overscan: v.overscan ?? 5 };\r\n });\r\n\r\n const isVirtual = createMemo(() => virtualOpts() !== null);\r\n\r\n const [scrollTop, setScrollTop] = createSignal(0);\r\n\r\n let rafId: number | null = null;\r\n let pendingScrollTop = 0;\r\n\r\n let loadMoreCooldown = false;\r\n let loadMoreTimer: ReturnType<typeof setTimeout> | null = null;\r\n\r\n const pendingItemChanges = new Map<number, number>();\r\n\r\n const flushItemHeights = createThrottle(function applyItemHeightChanges() {\r\n if (pendingItemChanges.size === 0) return;\r\n const snapshot = new Map(pendingItemChanges);\r\n pendingItemChanges.clear();\r\n\r\n setItemHeights(prev => {\r\n let hasChange = false;\r\n for (const [idx, h] of snapshot) {\r\n if (prev[idx] !== h) {\r\n hasChange = true;\r\n break;\r\n }\r\n }\r\n if (!hasChange) return prev;\r\n\r\n const next = [...prev];\r\n for (const [idx, h] of snapshot) next[idx] = h;\r\n return next;\r\n });\r\n }, 100);\r\n\r\n onCleanup(function cancelFlushItemHeights() {\r\n flushItemHeights.cancel();\r\n });\r\n\r\n const itemRO = new ResizeObserver(entries => {\r\n for (const entry of entries) {\r\n const el = entry.target as HTMLDivElement;\r\n const idx = parseInt(el.dataset.mansoryIdx ?? '-1', 10);\r\n if (idx < 0) continue;\r\n\r\n const h = entry.contentBoxSize?.[0]?.blockSize ?? entry.contentRect.height;\r\n pendingItemChanges.set(idx, h);\r\n }\r\n\r\n flushItemHeights();\r\n });\r\n\r\n onCleanup(function disconnectItemResizeObserver() {\r\n itemRO.disconnect();\r\n });\r\n\r\n onMount(() => {\r\n const applyContainerWidth = createThrottle(function applyContainerWidthChange(width: number) {\r\n setContainerWidth(width);\r\n }, 100);\r\n\r\n const containerRO = new ResizeObserver(entries => {\r\n for (const entry of entries) {\r\n const width = entry.contentBoxSize?.[0]?.inlineSize ?? entry.contentRect.width;\r\n applyContainerWidth(width);\r\n }\r\n });\r\n containerRO.observe(containerEl);\r\n onCleanup(function disconnectContainerResizeObserver() {\r\n applyContainerWidth.cancel();\r\n containerRO.disconnect();\r\n });\r\n });\r\n\r\n const itemElMap = new Map<number, HTMLDivElement>();\r\n\r\n function registerItem(index: number, el: HTMLDivElement) {\r\n itemElMap.set(index, el);\r\n itemRO.observe(el);\r\n }\r\n\r\n function unregisterItem(index: number) {\r\n const el = itemElMap.get(index);\r\n if (el) {\r\n itemRO.unobserve(el);\r\n itemElMap.delete(index);\r\n }\r\n }\r\n\r\n createEffect(\r\n on(\r\n () => props.items.length,\r\n len => {\r\n setItemHeights(prev => {\r\n const prevLen = prev.length;\r\n if (prevLen === len) return prev;\r\n\r\n if (len > prevLen) {\r\n const next = [...prev];\r\n for (let i = prevLen; i < len; i++) next.push(props.estimateItemHeight);\r\n return next;\r\n }\r\n\r\n for (let i = len; i < prevLen; i++) {\r\n disposeLayoutSignal(i);\r\n }\r\n return prev.slice(0, len);\r\n });\r\n },\r\n ),\r\n );\r\n\r\n function checkLoadMore(currentScrollTop: number) {\r\n if (!props.onLoadMore || loadMoreCooldown) return;\r\n const { scrollHeight, clientHeight } = containerEl;\r\n if (currentScrollTop + clientHeight >= scrollHeight - props.loadMoreThreshold) {\r\n loadMoreCooldown = true;\r\n\r\n if (loadMoreTimer) clearTimeout(loadMoreTimer);\r\n loadMoreTimer = setTimeout(() => {\r\n loadMoreCooldown = false;\r\n loadMoreTimer = null;\r\n }, 10_000);\r\n props.onLoadMore();\r\n }\r\n }\r\n\r\n createEffect(\r\n on(\r\n () => props.items.length,\r\n () => {\r\n if (loadMoreTimer) {\r\n clearTimeout(loadMoreTimer);\r\n loadMoreTimer = null;\r\n }\r\n loadMoreCooldown = false;\r\n },\r\n ),\r\n );\r\n\r\n onCleanup(function clearLoadMoreTimer() {\r\n if (loadMoreTimer) clearTimeout(loadMoreTimer);\r\n });\r\n\r\n onCleanup(function cancelPendingRaf() {\r\n if (rafId !== null) cancelAnimationFrame(rafId);\r\n });\r\n\r\n function handleScroll() {\r\n pendingScrollTop = containerEl.scrollTop;\r\n\r\n if (rafId === null) {\r\n rafId = requestAnimationFrame(() => {\r\n rafId = null;\r\n setScrollTop(pendingScrollTop);\r\n checkLoadMore(pendingScrollTop);\r\n });\r\n }\r\n }\r\n\r\n const allIndices = createMemo<number[]>((prev = []) => {\r\n const len = props.items.length;\r\n if (len === prev.length) return prev;\r\n if (len > prev.length) {\r\n const next = [...prev];\r\n for (let i = prev.length; i < len; i++) next.push(i);\r\n return next;\r\n }\r\n return prev.slice(0, len);\r\n });\r\n\r\n const renderedIndices = createMemo(() => {\r\n if (!isVirtual()) {\r\n return allIndices();\r\n }\r\n\r\n if (containerWidth() === 0) return [];\r\n\r\n const currentScrollTop = scrollTop();\r\n const viewportHeight = containerEl.clientHeight;\r\n const overscan = virtualOpts()?.overscan ?? 5;\r\n const overscanPx = overscan * props.estimateItemHeight;\r\n const visTop = currentScrollTop - overscanPx;\r\n const visBottom = currentScrollTop + viewportHeight + overscanPx;\r\n\r\n const sorted = layout().sortedByTop;\r\n const start = findFirstVisible(sorted, visTop);\r\n const indices: number[] = [];\r\n for (let i = start; i < sorted.length; i++) {\r\n if (sorted[i].top > visBottom) break;\r\n indices.push(sorted[i].index);\r\n }\r\n return indices;\r\n });\r\n\r\n const keyEntryCache = new Map<string | number, { key: string | number; index: number }>();\r\n\r\n const renderedKeys = createMemo(() => {\r\n const indices = renderedIndices();\r\n if (!props.getItemKey) return indices;\r\n\r\n const activeKeys = new Set<string | number>();\r\n\r\n const entries = indices.map(i => {\r\n const key = props.getItemKey!(props.items[i], i);\r\n activeKeys.add(key);\r\n\r\n let entry = keyEntryCache.get(key);\r\n if (!entry) {\r\n entry = { key, index: i };\r\n keyEntryCache.set(key, entry);\r\n } else {\r\n\r\n entry.index = i;\r\n }\r\n return entry;\r\n });\r\n\r\n for (const k of keyEntryCache.keys()) {\r\n if (!activeKeys.has(k)) keyEntryCache.delete(k);\r\n }\r\n\r\n return entries;\r\n });\r\n\r\n return (\r\n <div\r\n ref={containerEl}\r\n class={cn('ma01', isVirtual() && 'ma05', props.class)}\r\n onScroll={isVirtual() || props.onLoadMore ? handleScroll : undefined}\r\n >\r\n <div ref={innerEl} class=\"ma02\" style={{ height: `${totalHeight()}px` }}>\r\n <For each={renderedKeys()}>\r\n {entry => {\r\n const index = typeof entry === 'number' ? entry : entry.index;\r\n return (\r\n <MansoryItem\r\n index={index}\r\n getLayoutAccessor={getOrCreateLayoutAccessor}\r\n items={props.items}\r\n itemClass={props.itemClass}\r\n onRegister={registerItem}\r\n onUnregister={unregisterItem}\r\n >\r\n {props.children}\r\n </MansoryItem>\r\n );\r\n }}\r\n </For>\r\n </div>\r\n\r\n <Show when={props.items.length === 0}>\r\n <div class=\"ma08\">No items</div>\r\n </Show>\r\n </div>\r\n );\r\n};"],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { JSX, Accessor } from 'solid-js';
|
|
2
|
+
export type MansoryBreakpoint = 'default' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
|
|
3
|
+
export type MansoryResponsive<T> = Partial<Record<MansoryBreakpoint, T>>;
|
|
4
|
+
export interface MansoryVirtualOptions {
|
|
5
|
+
overscan?: number;
|
|
6
|
+
}
|
|
7
|
+
export interface MansoryProps<T = any> {
|
|
8
|
+
items: T[];
|
|
9
|
+
children: (item: T, index: Accessor<number>, style: JSX.CSSProperties) => JSX.Element;
|
|
10
|
+
columns?: number | MansoryResponsive<number>;
|
|
11
|
+
gap?: string | MansoryResponsive<string>;
|
|
12
|
+
virtual?: boolean | MansoryVirtualOptions;
|
|
13
|
+
estimateItemHeight?: number;
|
|
14
|
+
onLoadMore?: () => void;
|
|
15
|
+
loadMoreThreshold?: number;
|
|
16
|
+
class?: string;
|
|
17
|
+
itemClass?: string;
|
|
18
|
+
getItemKey?: (item: T, index: number) => string | number;
|
|
19
|
+
}
|
|
20
|
+
export interface MansoryItemLayout {
|
|
21
|
+
index: number;
|
|
22
|
+
top: number;
|
|
23
|
+
left: number;
|
|
24
|
+
width: number;
|
|
25
|
+
height: number;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=mansory.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mansory.types.d.ts","sourceRoot":"","sources":["../../../src/components/mansory/mansory.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC;AAE9E,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAC,CAAC,CAAC,CAAC;AAEzE,MAAM,WAAW,qBAAqB;IAEpC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,GAAG;IAEnC,KAAK,EAAE,CAAC,EAAE,CAAC;IAEX,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,GAAG,CAAC,aAAa,KAAK,GAAG,CAAC,OAAO,CAAC;IAEtF,OAAO,CAAC,EAAE,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAE7C,GAAG,CAAC,EAAE,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;IAEzC,OAAO,CAAC,EAAE,OAAO,GAAG,qBAAqB,CAAC;IAE1C,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAE5B,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IAExB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM,CAAC;CAC1D;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/menu/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAC9B,YAAY,EAAE,iBAAiB,EAAE,MAAM,QAAQ,CAAC;AAChD,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { VariantProps } from 'class-variance-authority';
|
|
2
|
+
import { Component } from 'solid-js';
|
|
3
|
+
import { MenuProps } from './menu.types';
|
|
4
|
+
declare const menuVariants: (props?: ({
|
|
5
|
+
size?: "xs" | "sm" | "md" | "lg" | "xl" | null | undefined;
|
|
6
|
+
direction?: "horizontal" | "vertical" | null | undefined;
|
|
7
|
+
} & import('class-variance-authority/types').ClassProp) | undefined) => string;
|
|
8
|
+
export type MenuVariantsProps = VariantProps<typeof menuVariants>;
|
|
9
|
+
export declare const Menu: Component<MenuProps>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=menu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../../src/components/menu/menu.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAElE,OAAO,EAEL,SAAS,EAaV,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,EAAsD,SAAS,EAAE,MAAM,cAAc,CAAC;AAElG,QAAA,MAAM,YAAY;;;8EAKhB,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,YAAY,CAAC,OAAO,YAAY,CAAC,CAAC;AAiGlE,eAAO,MAAM,IAAI,EAAE,SAAS,CAAC,SAAS,CAyWrC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { MenuItem } from './menu.types';
|
|
2
|
+
export declare const loadNodeModulesItems: () => Promise<MenuItem[]>;
|
|
3
|
+
export declare const loadApiItems: () => Promise<MenuItem[]>;
|
|
4
|
+
export declare const loadWithError: () => Promise<MenuItem[]>;
|
|
5
|
+
export declare const createSyncMenuItems: (suffix?: string) => MenuItem[];
|
|
6
|
+
export declare const createMixedMenuItems: () => MenuItem[];
|
|
7
|
+
//# sourceMappingURL=menu.data-example.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu.data-example.d.ts","sourceRoot":"","sources":["../../../src/components/menu/menu.data-example.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAKxC,eAAO,MAAM,oBAAoB,QAAO,OAAO,CAAC,QAAQ,EAAE,CA8CzD,CAAC;AACF,eAAO,MAAM,YAAY,QAAO,OAAO,CAAC,QAAQ,EAAE,CA6BjD,CAAC;AACF,eAAO,MAAM,aAAa,QAAO,OAAO,CAAC,QAAQ,EAAE,CAIlD,CAAC;AACF,eAAO,MAAM,mBAAmB,GAAI,SAAQ,MAAW,KAAG,QAAQ,EA0EjE,CAAC;AACF,eAAO,MAAM,oBAAoB,QAAO,QAAQ,EA+B/C,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{cn as e}from"../../utils/cn.js";import{getColor as t}from"../../utils/helper.js";import{Button as n}from"../button/button.js";import{className as r,createComponent as i,delegateEvents as a,effect as o,insert as s,memo as c,mergeProps as l,setAttribute as u,spread as d,template as f,use as p}from"solid-js/web";import{cva as m}from"class-variance-authority";import{For as h,Show as g,createEffect as _,createMemo as v,createSignal as y,createUniqueId as b,mergeProps as x,on as S,onCleanup as C,onMount as w}from"solid-js";import T from"lucide-solid/icons/refresh-cw";var E=f(`<span class="loading loading-spinner loading-xs">`),D=f(`<li><details><summary></summary><ul>`),O=f(`<li tabindex=0><div>`),k=f(`<li><h4 class=menu-title></h4><ul>`),A=f(`<div><span class="loading loading-spinner loading-md m-auto">`),j=f(`<ul>`),M=f(`<div class="text-base-content/50 flex flex-col items-center justify-center gap-2 p-4 text-center text-sm italic"><span>No menu items available.`),N=m(`menu`,{variants:{size:{xs:`menu-xs`,sm:`menu-sm`,md:`menu-md`,lg:`menu-lg`,xl:`menu-xl`},direction:{vertical:`menu-vertical`,horizontal:`menu-horizontal`}}}),P=class{parentMap=new Map;register(e,t){this.parentMap.set(e,t)}getPath(e){let t=[],n=e;for(;n!=null;)t.unshift(n),n=this.parentMap.get(n);return t}has(e){return this.parentMap.has(e)}clear(){this.parentMap.clear()}},F=class{refreshFns=new Map;register(e,t){this.refreshFns.set(e,t)}unregister(e){this.refreshFns.delete(e)}refresh(e){let t=this.refreshFns.get(e);t&&t()}refreshAll(){this.refreshFns.forEach(e=>e())}has(e){return this.refreshFns.has(e)}clear(){this.refreshFns.clear()}},I=e=>{let[t,n]=y(null),r=async(r=!1)=>{if(!e.isLoading()&&!(t()!==null&&!r)&&e.item.lazyItems){e.setIsLoading(!0);try{n(await e.item.lazyItems())}catch(t){e.onLoadError(t)}finally{e.setIsLoading(!1)}}},a=()=>{r(!0)};return w(()=>{e.onRegisterRefresh(a)}),_(S(()=>e.shouldLoad(),e=>{e&&t()===null&&r()},{defer:!0})),i(g,{get when(){return t()},get children(){return i(h,{get each(){return t()},children:t=>e.renderItems(t,e.parentId)})}})},L=`_6ca32a`,R=a=>{a=x({size:`md`,direction:`vertical`,color:`secondary`,highlightActive:!0},a);let f,m=new P,w=new F;function R(e){if(!f||!a.highlightActive)return;let t=m.getPath(e);if(t.length===0)return;let n=Array.from(f.getElementsByClassName(L));for(let e of n)e.classList.remove(L);for(let e of t)document.getElementById(e)?.classList?.add(L)}function z(e){let t=m.getPath(e);for(let e of t){let t=document.getElementById(e);if(!t)continue;let n=t.querySelector(`:scope > details`);n&&!n.open&&(n.open=!0)}}function B(e){if(!m.has(e)){console.warn(`Menu.focusById: Node with id "${e}" not found in registry`);return}z(e),R(e)}function V(e){let t=document.getElementById(e);if(!t){console.warn(`Menu.collapseById: Element with id "${e}" not found`);return}let n=t.querySelector(`:scope > details`);if(n){n.open=!1;let e=n.getElementsByClassName(L);for(let t of e)t.classList.remove(L);t.classList.remove(L)}}function H(e){if(!w.has(e)){console.warn(`Menu.refreshById: Lazy folder with id "${e}" not found`);return}w.refresh(e)}function U(){w.refreshAll()}function W(){f&&f.querySelectorAll(`details`).forEach(e=>e.open=!1)}function G(){f&&f.querySelectorAll(`details`).forEach(e=>e.open=!0)}function ee(e){f&&f.querySelectorAll(`:scope > li.folder > details`).forEach(t=>{let n=t.parentElement;n&&n.id!==e&&t.open&&(t.open=!1)})}function K(t,n=null){let c=t.id??b();if(m.register(c,n),t.type===`folder`){let l=x({defaultExpanded:t.defaultExpanded??a.defaultExpanded??!1},t,{id:c}),d=l.lazyItems!==void 0,[f,_]=y(l.defaultExpanded),[v,b]=y(!1),S,C=e=>{let t=e.currentTarget.open;if(v()){e.preventDefault();return}d&&_(t)},T=e=>{if(S&&(S.open=!1),_(!1),a.onError){let t={source:`folder`,itemId:c,path:m.getPath(c),error:e,message:e instanceof Error?e.message:`Failed to load folder items`};a.onError(t)}},O=e=>{if(e.stopPropagation(),v()||t.disabled){e.preventDefault();return}let r=!(S?.open??l.defaultExpanded);if(a.direction===`horizontal`&&n===null&&r&&ee(c),S?.open===!1?R(c):setTimeout(()=>{V(c)}),a.onItemClick){let e=r,n={id:c,path:m.getPath(c),type:`folder`,isExpanded:e,data:t.data};a.onItemClick(n)}};return(()=>{var t=D(),n=t.firstChild,m=n.firstChild,_=m.nextSibling;u(t,`id`,c),n.addEventListener(`toggle`,C);var y=S;return typeof y==`function`?p(y,n):S=n,m.$$click=O,s(m,()=>l.content,null),s(m,i(g,{get when(){return v()},get children(){return E()}}),null),s(_,i(g,{when:d,get fallback(){return i(h,{get each(){return l.items},children:e=>K(e,c)})},get children(){return i(I,{renderItems:K,shouldLoad:f,isLoading:v,setIsLoading:b,item:l,parentId:c,onLoadError:T,onRegisterRefresh:e=>w.register(c,e)})}})),o(i=>{var o=e(`folder`,(l.disabled||v())&&`menu-disabled`,a.class?.itemWrap),s=l.defaultExpanded,c=e(v()&&`after:hidden`,a.class?.itemHeader);return o!==i.e&&r(t,i.e=o),s!==i.t&&(n.open=i.t=s),c!==i.a&&r(m,i.a=c),i},{e:void 0,t:void 0,a:void 0}),t})()}if(t.type===`file`){let n=e=>{if(e.stopPropagation(),R(c),a.onItemClick){let e={id:c,path:m.getPath(c),type:`file`,...t.data&&{data:t.data}};a.onItemClick(e)}};return(()=>{var i=O(),l=i.firstChild;return i.$$click=n,u(i,`id`,c),s(l,()=>t.content),o(()=>r(i,e(`file`,t.disabled&&`menu-disabled`,a.class?.itemWrap))),i})()}if(t.type===`title`){let n=e=>{e.stopPropagation();let n=document.getElementById(c);if(n&&n.classList.contains(L)){let e=n.getElementsByClassName(L);for(let t of e)t.classList.remove(L);n.classList.remove(L)}else R(c);if(a.onItemClick){let e={id:c,path:m.getPath(c),type:`title`,...t.data&&{data:t.data}};a.onItemClick(e)}};return(()=>{var l=k(),d=l.firstChild,f=d.nextSibling;return u(l,`id`,c),d.$$click=n,s(d,()=>t.content),s(f,i(h,{get each(){return t.items},children:e=>K(e,c)})),o(()=>r(l,e(`title`,t.disabled&&`menu-disabled`,a.class?.itemWrap))),l})()}}let q=a.lazyItems!==void 0,[J,Y]=y(q?null:a.items??[]),[X,Z]=y(!1);_(S(()=>a.items,e=>{!q&&e&&(m.clear(),w.clear(),Y(e))},{defer:!0})),C(function(){m.clear(),w.clear()});let Q=async()=>{if(!(!a.lazyItems||J()!==null||X())){Z(!0);try{Y(await a.lazyItems())}catch(e){if(a.onError){let t={source:`root`,error:e,message:e instanceof Error?e.message:`Failed to load menu items`};a.onError(t)}}finally{Z(!1)}}};q&&Q();let $=v(()=>e(N({size:a.size,direction:a.direction}),t(a.color),a.class?.root));return a.setMenuFunction&&a.setMenuFunction({focusById:B,collapseById:V,refreshById:H,refreshAll:U,collapseAll:W,expandedAll:G}),[i(g,{get when(){return X()},get children(){var t=A();return o(()=>r(t,e($(),`flex size-full justify-center p-4`))),t}}),i(g,{get when(){return!X()},get children(){return i(g,{get when(){return c(()=>!!J())()&&J().length>0},get fallback(){return(()=>{var e=M();return e.firstChild,s(e,i(n,{get icon(){return i(T,{size:10})},variant:`default`,size:`4xs`,class:`w-fit px-1.5`,onClick:Q,children:`Try again`}),null),e})()},get children(){var e=j();return p(e=>f=e,e),d(e,l({get class(){return $()}},()=>a.id&&{id:a.id}),!1,!0),s(e,i(h,{get each(){return J()},children:e=>K(e)})),e}})}})]};a([`click`]);export{R as Menu};
|
|
2
|
+
//# sourceMappingURL=menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu.js","names":["cn","getColor","cva","VariantProps","RefreshCw","Accessor","Component","createEffect","createMemo","createSignal","createUniqueId","For","JSXElement","mergeProps","on","onCleanup","onMount","Setter","Show","Button","FolderItem","ItemClickInfo","MenuErrorInfo","MenuItem","MenuProps","menuVariants","variants","size","xs","sm","md","lg","xl","direction","vertical","horizontal","MenuVariantsProps","NodeRegistry","parentMap","Map","register","id","parentId","set","getPath","path","currentId","unshift","get","has","clear","LazyFolderRegistry","refreshFns","refreshFn","unregister","delete","refresh","fn","refreshAll","forEach","LazyFolderContent","item","renderItems","shouldLoad","isLoading","setIsLoading","onLoadError","error","onRegisterRefresh","props","loadedItems","setLoadedItems","loadItems","force","lazyItems","items","e","defer","_$createComponent","when","children","each","subItem","ACTIVE_CLASSNAME","Menu","p","color","highlightActive","const","ulRootRef","HTMLUListElement","nodeRegistry","lazyFolderRegistry","addActiveClassForId","length","elements","Array","from","getElementsByClassName","el","classList","remove","nodeId","document","getElementById","add","expandPathToId","element","details","querySelector","HTMLDetailsElement","open","focusById","console","warn","collapseById","refreshById","collapseAll","detailsList","querySelectorAll","d","expandedAll","collapseOtherRootFolders","exceptId","rootFolders","li","parentElement","itemId","type","folderItem","defaultExpanded","isLazyFolder","undefined","setShouldLoad","detailsRef","handleToggle","Event","currentTarget","isExpanded","preventDefault","handleLoadError","onError","errorInfo","source","message","Error","handleFolderClick","MouseEvent","stopPropagation","disabled","currentIsExpanded","willExpand","setTimeout","onItemClick","info","data","_el$","_tmpl$2","_el$2","firstChild","_el$3","_el$5","nextSibling","_$setAttribute","addEventListener","_ref$","_$use","$$click","_$insert","content","Element","_tmpl$","fallback","_$effect","_p$","_v$","class","itemWrap","_v$2","_v$3","itemHeader","_$className","t","a","handleFileClick","_el$6","_tmpl$3","_el$7","handleTitleClick","contains","_el$8","_tmpl$4","_el$9","_el$0","isLazyRoot","rootItems","setRootItems","isRootLoading","setIsRootLoading","clearMenuRegistries","loadRootItems","menuClass","root","setMenuFunction","_el$1","_tmpl$5","_$memo","_el$11","_tmpl$7","_el$12","icon","variant","onClick","_el$10","_tmpl$6","ele","_$spread","_$mergeProps","_$delegateEvents"],"sources":["../../../src/components/menu/menu.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport { getColor } from '@/utils/helper';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport RefreshCw from 'lucide-solid/icons/refresh-cw';\r\nimport {\r\n Accessor,\r\n Component,\r\n createEffect,\r\n createMemo,\r\n createSignal,\r\n createUniqueId,\r\n For,\r\n JSXElement,\r\n mergeProps,\r\n on,\r\n onCleanup,\r\n onMount,\r\n Setter,\r\n Show,\r\n} from 'solid-js';\r\nimport { Button } from '../button';\r\nimport type { FolderItem, ItemClickInfo, MenuErrorInfo, MenuItem, MenuProps } from './menu.types';\r\n\r\nconst menuVariants = cva('menu', {\r\n variants: {\r\n size: { xs: 'menu-xs', sm: 'menu-sm', md: 'menu-md', lg: 'menu-lg', xl: 'menu-xl' },\r\n direction: { vertical: 'menu-vertical', horizontal: 'menu-horizontal' },\r\n },\r\n});\r\n\r\nexport type MenuVariantsProps = VariantProps<typeof menuVariants>;\r\n\r\nclass NodeRegistry {\r\n private parentMap = new Map<string, string | null>();\r\n register(id: string, parentId: string | null) {\r\n this.parentMap.set(id, parentId);\r\n }\r\n getPath(id: string): string[] {\r\n const path: string[] = [];\r\n let currentId: string | null | undefined = id;\r\n while (currentId != null) {\r\n path.unshift(currentId);\r\n currentId = this.parentMap.get(currentId);\r\n }\r\n return path;\r\n }\r\n has(id: string): boolean {\r\n return this.parentMap.has(id);\r\n }\r\n clear() {\r\n this.parentMap.clear();\r\n }\r\n}\r\n\r\nclass LazyFolderRegistry {\r\n private refreshFns = new Map<string, () => void>();\r\n register(id: string, refreshFn: () => void) {\r\n this.refreshFns.set(id, refreshFn);\r\n }\r\n unregister(id: string) {\r\n this.refreshFns.delete(id);\r\n }\r\n refresh(id: string) {\r\n const fn = this.refreshFns.get(id);\r\n if (fn) fn();\r\n }\r\n refreshAll() {\r\n this.refreshFns.forEach(fn => fn());\r\n }\r\n has(id: string): boolean {\r\n return this.refreshFns.has(id);\r\n }\r\n clear() {\r\n this.refreshFns.clear();\r\n }\r\n}\r\n\r\nconst LazyFolderContent: Component<{\r\n item: FolderItem;\r\n renderItems: (item: MenuItem, parentId: string | null) => JSXElement;\r\n parentId: string | null;\r\n shouldLoad: Accessor<boolean>;\r\n isLoading: Accessor<boolean>;\r\n setIsLoading: Setter<boolean>;\r\n onLoadError: (error: unknown) => void;\r\n onRegisterRefresh: (refreshFn: () => void) => void;\r\n}> = props => {\r\n const [loadedItems, setLoadedItems] = createSignal<MenuItem[] | null>(null);\r\n const loadItems = async (force = false) => {\r\n if (props.isLoading()) return;\r\n if (loadedItems() !== null && !force) return;\r\n if (!props.item.lazyItems) return;\r\n props.setIsLoading(true);\r\n try {\r\n const items = await props.item.lazyItems();\r\n setLoadedItems(items);\r\n } catch (e) {\r\n props.onLoadError(e);\r\n } finally {\r\n props.setIsLoading(false);\r\n }\r\n };\r\n const refresh = () => {\r\n loadItems(true);\r\n };\r\n onMount(() => {\r\n props.onRegisterRefresh(refresh);\r\n });\r\n createEffect(\r\n on(\r\n () => props.shouldLoad(),\r\n shouldLoad => {\r\n if (shouldLoad && loadedItems() === null) {\r\n loadItems();\r\n }\r\n },\r\n { defer: true },\r\n ),\r\n );\r\n return (\r\n <Show when={loadedItems()}>\r\n <For each={loadedItems()!}>{subItem => props.renderItems(subItem, props.parentId)}</For>\r\n </Show>\r\n );\r\n};\r\n\r\nconst ACTIVE_CLASSNAME = '_6ca32a';\r\nexport const Menu: Component<MenuProps> = p => {\r\n p = mergeProps(\r\n { size: 'md', direction: 'vertical', color: 'secondary', highlightActive: true } as const,\r\n p,\r\n );\r\n let ulRootRef: HTMLUListElement;\r\n const nodeRegistry = new NodeRegistry();\r\n const lazyFolderRegistry = new LazyFolderRegistry();\r\n function addActiveClassForId(id: string) {\r\n if (!ulRootRef || !p.highlightActive) return;\r\n const path = nodeRegistry.getPath(id);\r\n if (path.length === 0) return;\r\n\r\n const elements = Array.from(ulRootRef.getElementsByClassName(ACTIVE_CLASSNAME));\r\n\r\n for (const el of elements) el.classList.remove(ACTIVE_CLASSNAME);\r\n for (const nodeId of path) document.getElementById(nodeId)?.classList?.add(ACTIVE_CLASSNAME);\r\n }\r\n function expandPathToId(id: string) {\r\n const path = nodeRegistry.getPath(id);\r\n for (const nodeId of path) {\r\n const element = document.getElementById(nodeId);\r\n if (!element) continue;\r\n const details = element.querySelector(':scope > details') as HTMLDetailsElement | null;\r\n if (details && !details.open) {\r\n details.open = true;\r\n }\r\n }\r\n }\r\n function focusById(id: string) {\r\n if (!nodeRegistry.has(id)) {\r\n console.warn(`Menu.focusById: Node with id \"${id}\" not found in registry`);\r\n return;\r\n }\r\n expandPathToId(id);\r\n addActiveClassForId(id);\r\n }\r\n function collapseById(id: string) {\r\n const element = document.getElementById(id);\r\n if (!element) {\r\n console.warn(`Menu.collapseById: Element with id \"${id}\" not found`);\r\n return;\r\n }\r\n const details = element.querySelector(':scope > details') as HTMLDetailsElement | null;\r\n if (details) {\r\n details.open = false;\r\n const elements = details.getElementsByClassName(ACTIVE_CLASSNAME);\r\n for (const el of elements) el.classList.remove(ACTIVE_CLASSNAME);\r\n element.classList.remove(ACTIVE_CLASSNAME);\r\n }\r\n }\r\n function refreshById(id: string) {\r\n if (!lazyFolderRegistry.has(id)) {\r\n console.warn(`Menu.refreshById: Lazy folder with id \"${id}\" not found`);\r\n return;\r\n }\r\n lazyFolderRegistry.refresh(id);\r\n }\r\n function refreshAll() {\r\n lazyFolderRegistry.refreshAll();\r\n }\r\n function collapseAll() {\r\n if (!ulRootRef) return;\r\n const detailsList = ulRootRef.querySelectorAll('details');\r\n detailsList.forEach(d => (d.open = false));\r\n }\r\n function expandedAll() {\r\n if (!ulRootRef) return;\r\n const detailsList = ulRootRef.querySelectorAll('details');\r\n detailsList.forEach(d => (d.open = true));\r\n }\r\n function collapseOtherRootFolders(exceptId: string) {\r\n if (!ulRootRef) return;\r\n // Only collapse direct children (level 1 folders)\r\n const rootFolders = ulRootRef.querySelectorAll(':scope > li.folder > details');\r\n rootFolders.forEach(details => {\r\n const li = details.parentElement;\r\n if (li && li.id !== exceptId && (details as HTMLDetailsElement).open) {\r\n (details as HTMLDetailsElement).open = false;\r\n }\r\n });\r\n }\r\n function renderItems(item: MenuItem, parentId: string | null = null) {\r\n const itemId = item.id ?? createUniqueId();\r\n nodeRegistry.register(itemId, parentId);\r\n\r\n if (item.type === 'folder') {\r\n const folderItem = mergeProps(\r\n { defaultExpanded: item.defaultExpanded ?? p.defaultExpanded ?? false },\r\n item,\r\n { id: itemId },\r\n );\r\n const isLazyFolder = folderItem.lazyItems !== undefined;\r\n const [shouldLoad, setShouldLoad] = createSignal(folderItem.defaultExpanded);\r\n const [isLoading, setIsLoading] = createSignal(false);\r\n let detailsRef: HTMLDetailsElement | undefined;\r\n\r\n const handleToggle = (e: Event) => {\r\n const details = e.currentTarget as HTMLDetailsElement;\r\n const isExpanded = details.open;\r\n if (isLoading()) {\r\n e.preventDefault();\r\n return;\r\n }\r\n if (isLazyFolder) {\r\n setShouldLoad(isExpanded);\r\n }\r\n };\r\n\r\n const handleLoadError = (error: unknown) => {\r\n if (detailsRef) {\r\n detailsRef.open = false;\r\n }\r\n setShouldLoad(false);\r\n if (p.onError) {\r\n const errorInfo: MenuErrorInfo = {\r\n source: 'folder',\r\n itemId,\r\n path: nodeRegistry.getPath(itemId),\r\n error,\r\n message: error instanceof Error ? error.message : 'Failed to load folder items',\r\n };\r\n p.onError(errorInfo);\r\n }\r\n };\r\n\r\n const handleFolderClick = (e: MouseEvent) => {\r\n e.stopPropagation();\r\n if (isLoading() || item.disabled) {\r\n e.preventDefault();\r\n return;\r\n }\r\n\r\n const currentIsExpanded = detailsRef?.open ?? folderItem.defaultExpanded;\r\n const willExpand = !currentIsExpanded;\r\n\r\n // In horizontal mode, collapse other root folders when expanding a root folder\r\n if (p.direction === 'horizontal' && parentId === null && willExpand) {\r\n collapseOtherRootFolders(itemId);\r\n }\r\n\r\n if (detailsRef?.open === false) {\r\n addActiveClassForId(itemId);\r\n } else {\r\n setTimeout(() => {\r\n collapseById(itemId);\r\n });\r\n }\r\n\r\n if (p.onItemClick) {\r\n const isExpanded = willExpand;\r\n const info: ItemClickInfo = {\r\n id: itemId,\r\n path: nodeRegistry.getPath(itemId),\r\n type: 'folder',\r\n isExpanded,\r\n data: item.data,\r\n };\r\n p.onItemClick(info);\r\n }\r\n };\r\n return (\r\n <li\r\n class={cn(\r\n 'folder',\r\n (folderItem.disabled || isLoading()) && 'menu-disabled',\r\n p.class?.itemWrap,\r\n )}\r\n id={itemId}\r\n >\r\n <details ref={detailsRef} open={folderItem.defaultExpanded} onToggle={handleToggle}>\r\n <summary\r\n class={cn(isLoading() && 'after:hidden', p.class?.itemHeader)}\r\n onClick={handleFolderClick}\r\n >\r\n {folderItem.content as Element}\r\n <Show when={isLoading()}>\r\n <span class=\"loading loading-spinner loading-xs\"></span>\r\n </Show>\r\n </summary>\r\n <ul>\r\n <Show\r\n when={isLazyFolder}\r\n fallback={\r\n <For each={(folderItem as { items: MenuItem[] }).items}>\r\n {subItem => renderItems(subItem, itemId)}\r\n </For>\r\n }\r\n >\r\n <LazyFolderContent\r\n {...{\r\n renderItems,\r\n shouldLoad,\r\n isLoading,\r\n setIsLoading,\r\n item: folderItem,\r\n parentId: itemId,\r\n onLoadError: handleLoadError,\r\n onRegisterRefresh: refreshFn => lazyFolderRegistry.register(itemId, refreshFn),\r\n }}\r\n />\r\n </Show>\r\n </ul>\r\n </details>\r\n </li>\r\n );\r\n }\r\n if (item.type === 'file') {\r\n const handleFileClick = (e: MouseEvent) => {\r\n e.stopPropagation();\r\n addActiveClassForId(itemId);\r\n\r\n if (p.onItemClick) {\r\n const info: ItemClickInfo = {\r\n id: itemId,\r\n path: nodeRegistry.getPath(itemId),\r\n type: 'file',\r\n ...(item.data && { data: item.data }),\r\n };\r\n p.onItemClick(info);\r\n }\r\n };\r\n return (\r\n <li\r\n class={cn('file', item.disabled && 'menu-disabled', p.class?.itemWrap)}\r\n id={itemId}\r\n tabindex=\"0\"\r\n onClick={handleFileClick}\r\n >\r\n <div>{item.content as Element}</div>\r\n </li>\r\n );\r\n }\r\n if (item.type === 'title') {\r\n const handleTitleClick = (e: MouseEvent) => {\r\n e.stopPropagation();\r\n\r\n const li = document.getElementById(itemId);\r\n if (li && li.classList.contains(ACTIVE_CLASSNAME)) {\r\n const elements = li.getElementsByClassName(ACTIVE_CLASSNAME);\r\n for (const el of elements) el.classList.remove(ACTIVE_CLASSNAME);\r\n li.classList.remove(ACTIVE_CLASSNAME);\r\n } else {\r\n addActiveClassForId(itemId);\r\n }\r\n\r\n if (p.onItemClick) {\r\n const info: ItemClickInfo = {\r\n id: itemId,\r\n path: nodeRegistry.getPath(itemId),\r\n type: 'title',\r\n ...(item.data && { data: item.data }),\r\n };\r\n p.onItemClick(info);\r\n }\r\n };\r\n return (\r\n <li class={cn('title', item.disabled && 'menu-disabled', p.class?.itemWrap)} id={itemId}>\r\n <h4 class=\"menu-title\" onClick={handleTitleClick}>\r\n {item.content as Element}\r\n </h4>\r\n <ul>\r\n <For each={item.items}>{subItem => renderItems(subItem, itemId)}</For>\r\n </ul>\r\n </li>\r\n );\r\n }\r\n }\r\n const isLazyRoot = p.lazyItems !== undefined;\r\n const [rootItems, setRootItems] = createSignal<MenuItem[] | null>(\r\n isLazyRoot ? null : (p.items ?? []),\r\n );\r\n const [isRootLoading, setIsRootLoading] = createSignal(false);\r\n\r\n createEffect(\r\n on(\r\n () => p.items,\r\n items => {\r\n if (!isLazyRoot && items) {\r\n nodeRegistry.clear();\r\n lazyFolderRegistry.clear();\r\n setRootItems(items);\r\n }\r\n },\r\n { defer: true },\r\n ),\r\n );\r\n\r\n onCleanup(function clearMenuRegistries() {\r\n nodeRegistry.clear();\r\n lazyFolderRegistry.clear();\r\n });\r\n\r\n const loadRootItems = async () => {\r\n if (!p.lazyItems || rootItems() !== null || isRootLoading()) return;\r\n setIsRootLoading(true);\r\n try {\r\n const items = await p.lazyItems();\r\n setRootItems(items);\r\n } catch (e) {\r\n if (p.onError) {\r\n const errorInfo: MenuErrorInfo = {\r\n source: 'root',\r\n error: e,\r\n message: e instanceof Error ? e.message : 'Failed to load menu items',\r\n };\r\n p.onError(errorInfo);\r\n }\r\n } finally {\r\n setIsRootLoading(false);\r\n }\r\n };\r\n if (isLazyRoot) {\r\n loadRootItems();\r\n }\r\n const menuClass = createMemo(() =>\r\n cn(menuVariants({ size: p.size, direction: p.direction }), getColor(p.color), p.class?.root),\r\n );\r\n\r\n if (p.setMenuFunction) {\r\n p.setMenuFunction({\r\n focusById,\r\n collapseById,\r\n refreshById,\r\n refreshAll,\r\n collapseAll,\r\n expandedAll,\r\n });\r\n }\r\n return (\r\n <>\r\n <Show when={isRootLoading()}>\r\n <div class={cn(menuClass(), 'flex size-full justify-center p-4')}>\r\n <span class=\"loading loading-spinner loading-md m-auto\"></span>\r\n </div>\r\n </Show>\r\n <Show when={!isRootLoading()}>\r\n <Show\r\n when={rootItems() && rootItems()!.length > 0}\r\n fallback={\r\n <div class=\"text-base-content/50 flex flex-col items-center justify-center gap-2 p-4 text-center text-sm italic\">\r\n <span>No menu items available.</span>\r\n <Button\r\n icon={<RefreshCw size={10} />}\r\n variant={'default'}\r\n size={'4xs'}\r\n class=\"w-fit px-1.5\"\r\n onClick={loadRootItems}\r\n >\r\n Try again\r\n </Button>\r\n </div>\r\n }\r\n >\r\n <ul class={menuClass()} ref={ele => (ulRootRef = ele)} {...(p.id && { id: p.id })}>\r\n <For each={rootItems()!}>{item => renderItems(item)}</For>\r\n </ul>\r\n </Show>\r\n </Show>\r\n </>\r\n );\r\n};\r\n"],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { BaseColorProps, SolidComponent } from '../../type';
|
|
2
|
+
import { MenuVariantsProps } from './menu';
|
|
3
|
+
import { Setter } from 'solid-js';
|
|
4
|
+
export type MenuErrorInfo = {
|
|
5
|
+
/** 'root' = lỗi load root lazyItems; 'folder' = lỗi load lazy folder children */
|
|
6
|
+
source: 'root' | 'folder';
|
|
7
|
+
/** id của folder bị lỗi (chỉ có khi source = 'folder') */
|
|
8
|
+
itemId?: string;
|
|
9
|
+
/** path từ root đến folder bị lỗi (chỉ có khi source = 'folder') */
|
|
10
|
+
path?: string[];
|
|
11
|
+
error: unknown;
|
|
12
|
+
message: string;
|
|
13
|
+
};
|
|
14
|
+
export type MenuProps = {
|
|
15
|
+
id?: string;
|
|
16
|
+
color?: BaseColorProps;
|
|
17
|
+
size?: MenuVariantsProps['size'];
|
|
18
|
+
direction?: MenuVariantsProps['direction'];
|
|
19
|
+
highlightActive?: boolean;
|
|
20
|
+
class?: Partial<Record<'root' | 'itemWrap' | 'itemHeader', string>>;
|
|
21
|
+
defaultExpanded?: boolean;
|
|
22
|
+
onItemClick?: (info: ItemClickInfo) => void;
|
|
23
|
+
onError?: (info: MenuErrorInfo) => void;
|
|
24
|
+
setMenuFunction?: Setter<MenuFunction | undefined>;
|
|
25
|
+
} & (SyncItem | AsyncItem);
|
|
26
|
+
export type MenuFunction = {
|
|
27
|
+
focusById: (id: string) => void;
|
|
28
|
+
collapseById: (id: string) => void;
|
|
29
|
+
refreshById: (id: string) => void;
|
|
30
|
+
refreshAll: () => void;
|
|
31
|
+
collapseAll: () => void;
|
|
32
|
+
expandedAll: () => void;
|
|
33
|
+
};
|
|
34
|
+
export type ItemClickInfo = {
|
|
35
|
+
id: string;
|
|
36
|
+
path: string[];
|
|
37
|
+
type: 'file' | 'folder' | 'title';
|
|
38
|
+
isExpanded?: boolean | undefined;
|
|
39
|
+
data?: Record<string, any>;
|
|
40
|
+
};
|
|
41
|
+
type BaseItem = {
|
|
42
|
+
id?: string;
|
|
43
|
+
content: SolidComponent;
|
|
44
|
+
disabled?: boolean;
|
|
45
|
+
data?: Record<string, any>;
|
|
46
|
+
};
|
|
47
|
+
export type FileItem = BaseItem & {
|
|
48
|
+
type: 'file';
|
|
49
|
+
};
|
|
50
|
+
type BaseFolderItem = BaseItem & {
|
|
51
|
+
type: 'folder';
|
|
52
|
+
defaultExpanded?: boolean;
|
|
53
|
+
};
|
|
54
|
+
type BaseTitleItem = BaseItem & {
|
|
55
|
+
type: 'title';
|
|
56
|
+
};
|
|
57
|
+
type SyncFolder = BaseFolderItem & SyncItem;
|
|
58
|
+
type LazyFolder = BaseFolderItem & AsyncItem;
|
|
59
|
+
type TitleItem = BaseTitleItem & {
|
|
60
|
+
items: MenuTitleItems[];
|
|
61
|
+
};
|
|
62
|
+
type MenuTitleItems = FileItem | TitleItem | SyncFolder;
|
|
63
|
+
type SyncItem = {
|
|
64
|
+
items: MenuItem[];
|
|
65
|
+
lazyItems?: never;
|
|
66
|
+
};
|
|
67
|
+
type AsyncItem = {
|
|
68
|
+
items?: never;
|
|
69
|
+
lazyItems: () => Promise<MenuItem[]>;
|
|
70
|
+
};
|
|
71
|
+
export type FolderItem = SyncFolder | LazyFolder;
|
|
72
|
+
export type MenuItem = FileItem | FolderItem | TitleItem;
|
|
73
|
+
export {};
|
|
74
|
+
//# sourceMappingURL=menu.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu.types.d.ts","sourceRoot":"","sources":["../../../src/components/menu/menu.types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/modal/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { SolidComponent } from '../../type';
|
|
2
|
+
import { AnimationConfig } from '../../utils/helper';
|
|
3
|
+
import { Component } from 'solid-js';
|
|
4
|
+
export type ModalType = {
|
|
5
|
+
onClose: () => void;
|
|
6
|
+
width?: string;
|
|
7
|
+
closeOnOutsideClick?: boolean;
|
|
8
|
+
closeOnEsc?: boolean;
|
|
9
|
+
closable?: boolean;
|
|
10
|
+
header?: SolidComponent;
|
|
11
|
+
body?: SolidComponent;
|
|
12
|
+
footer?: SolidComponent;
|
|
13
|
+
open?: boolean;
|
|
14
|
+
mask?: boolean | {
|
|
15
|
+
enabled: boolean;
|
|
16
|
+
blur: boolean;
|
|
17
|
+
};
|
|
18
|
+
class?: Partial<Record<'wrapper' | 'modal' | 'header' | 'body' | 'footer' | 'closeButton', string>>;
|
|
19
|
+
preRender?: boolean;
|
|
20
|
+
animate?: Omit<AnimationConfig, 'name'> & {
|
|
21
|
+
name: AnimateType;
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
type AnimateType = 'none' | 'lightSpeedInRight' | 'lightSpeedInLeft' | 'fadeIn' | 'fadeInLeft' | 'fadeInRight' | 'fadeInDown' | 'fadeInUp' | 'bounceIn' | 'scaleInCenter' | 'slideInFwdCenter' | 'slideInBck' | 'tiltIn' | 'swingInRightBck' | 'puffInCenter' | 'scaleInBl';
|
|
25
|
+
declare const ComponentModal: Component<ModalType>;
|
|
26
|
+
export declare const Modal: (p: ModalType) => import("solid-js").JSX.Element;
|
|
27
|
+
export { ComponentModal };
|
|
28
|
+
//# sourceMappingURL=modal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modal.d.ts","sourceRoot":"","sources":["../../../src/components/modal/modal.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAExC,OAAO,EAAE,eAAe,EAAsB,MAAM,gBAAgB,CAAC;AAIrE,OAAO,EACL,SAAS,EAQV,MAAM,UAAU,CAAC;AAGlB,MAAM,MAAM,SAAS,GAAG;IACtB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,OAAO,CAAA;KAAE,CAAC;IACrD,KAAK,CAAC,EAAE,OAAO,CACb,MAAM,CAAC,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,aAAa,EAAE,MAAM,CAAC,CACnF,CAAC;IACF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG;QACxC,IAAI,EAAE,WAAW,CAAC;KACnB,CAAC;CACH,CAAC;AAMF,KAAK,WAAW,GACZ,MAAM,GACN,mBAAmB,GACnB,kBAAkB,GAClB,QAAQ,GACR,YAAY,GACZ,aAAa,GACb,YAAY,GACZ,UAAU,GACV,UAAU,GACV,eAAe,GACf,kBAAkB,GAClB,YAAY,GACZ,QAAQ,GACR,iBAAiB,GACjB,cAAc,GACd,WAAW,CAAC;AAqDhB,QAAA,MAAM,cAAc,EAAE,SAAS,CAAC,SAAS,CA2LxC,CAAC;AAEF,eAAO,MAAM,KAAK,kDAA8E,CAAC;AAEjG,OAAO,EAAE,cAAc,EAAE,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{cn as e}from"../../utils/cn.js";import{renderCSSAnimation as t}from"../../utils/helper.js";import{ZIndexType as n}from"../z-index/z-index.types.js";import{ZIndex as r}from"../z-index/z-index.js";import{conditionalRender as i}from"../../utils/hoc.js";import{addEventListener as a,className as o,createComponent as s,delegateEvents as c,effect as l,insert as u,memo as d,style as f,template as p}from"solid-js/web";import{Show as m,createEffect as h,createSignal as g,createUniqueId as _,mergeProps as v,on as y,onCleanup as b}from"solid-js";import x from"lucide-solid/icons/x";var S=p(`<div>`),C=p(`<div class=mo02>`),w=p(`<div aria-hidden=true>`),T=p(`<div class=mo03><div><div></div><div>`),E=p(`<button aria-label=Close>`),D=p(`<div class=mo07>Modal ID: `),O=new Set([`lightSpeedInRight`,`lightSpeedInLeft`,`fadeInLeft`,`fadeInRight`,`fadeInDown`,`fadeInUp`,`bounceIn`,`scaleInCenter`,`slideInFwdCenter`,`slideInBck`,`tiltIn`,`swingInRightBck`,`puffInCenter`,`scaleInBl`]),[k,A]=g([]);function j(){let e=k().slice();e.pop(),A(e)}var M=new Map;function N(e){if(e.key!==`Escape`)return;let t=k().at(-1);t&&M.get(t)?.()}function P(e,t){M.size===0&&document.addEventListener(`keydown`,N),M.set(e,t)}function F(e){M.delete(e),M.size===0&&document.removeEventListener(`keydown`,N)}var I=i=>{i=v({closeOnOutsideClick:!0,closeOnEsc:!0,open:!0,onClose:()=>{},closable:!0,preRender:!1,animate:{name:`puffInCenter`,duration:`300ms`},mask:!0},i);let c=_();b(function(){F(c),c===k().at(-1)&&j()}),h(y(()=>i.open,e=>{e?(c!==k().at(-1)&&A([...k(),c]),P(c,()=>{i.closeOnEsc&&i.onClose()})):(F(c),c===k().at(-1)&&j())}));let p=()=>!(!i.open||c!==k().at(-1)||i.mask===!1||typeof i.mask==`object`&&i.mask?.enabled===!1),M=()=>typeof i.mask==`object`&&i.mask?.blur===!1?`bg-modal-overlay`:`bg-modal-overlay backdrop-blur-[5px]`,N=()=>i.animate?.name??`none`,I=()=>O.has(N()),L=()=>!I()&&N()!==`none`?{animation:t(i.animate)}:{},R=()=>I()?{animation:t(i.animate)}:{},z=()=>{let e={};return i.width&&(e.width=i.width,e[`min-width`]=i.width),e},[B,V]=g(!1),H=()=>V(!0);h(y(()=>i.open,e=>{e&&V(!1)}));let U=()=>!I()||B(),W=()=>{i.closeOnOutsideClick&&i.onClose()};return s(r,{get type(){return n.MODAL},get open(){return i.open??!1},blockScroll:!0,get preRender(){return i.preRender},position:{inset:`0`},get class(){return e(`mo01`,i.class?.wrapper)},get children(){return[s(m,{get when(){return p()},get children(){var t=S();return t.$$click=W,l(()=>o(t,e(`mo02`,M()))),t}}),s(m,{get when(){return d(()=>!p())()&&i.closeOnOutsideClick},get children(){var e=C();return e.$$click=W,e}}),(()=>{var t=T(),n=t.firstChild,r=n.firstChild,p=r.nextSibling;return t.$$click=e=>e.stopPropagation(),u(t,s(m,{get when(){return d(()=>!!I())()&&!B()},get children(){var t=w();return t.addEventListener(`animationend`,H),l(n=>{var r=e(`mo04`,i.class?.modal),a={...z(),...R()};return r!==n.e&&o(t,n.e=r),n.t=f(t,a,n.t),n},{e:void 0,t:void 0}),t}}),n),u(n,(()=>{var t=d(()=>!!i.closable);return()=>t()&&(()=>{var t=E();return a(t,`click`,i.onClose,!0),u(t,s(x,{size:16})),l(()=>o(t,e(`mo06`,i.class?.closeButton))),t})()})(),r),u(r,s(m,{get when(){return i.header},get fallback(){return(()=>{var e=D();return e.firstChild,u(e,c,null),e})()},get children(){return i.header}})),u(p,s(m,{get when(){return i.body},get children(){return i.body}})),u(n,s(m,{get when(){return i.footer},get children(){var t=S();return u(t,()=>i.footer),l(()=>o(t,e(`mo-footer`,i.class?.footer))),t}}),null),l(t=>{var a=e(`mo05`,i.class?.modal),s={...L(),...z(),visibility:U()?`visible`:`hidden`},c=e(`mo-header`,i.class?.header),l=e(`mo08`,i.class?.body);return a!==t.e&&o(n,t.e=a),t.t=f(n,s,t.t),c!==t.a&&o(r,t.a=c),l!==t.o&&o(p,t.o=l),t},{e:void 0,t:void 0,a:void 0,o:void 0}),t})()]}})},L=i(I,{preRender:`preRender`,when:`open`});c([`click`]);export{I as ComponentModal,L as Modal};
|
|
2
|
+
//# sourceMappingURL=modal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modal.js","names":["SolidComponent","cn","AnimationConfig","renderCSSAnimation","conditionalRender","X","Component","createEffect","createSignal","createUniqueId","mergeProps","on","onCleanup","Show","ZIndex","ZIndexType","ModalType","onClose","width","closeOnOutsideClick","closeOnEsc","closable","header","body","footer","open","mask","enabled","blur","class","Partial","Record","preRender","animate","Omit","name","AnimateType","TRANSFORM_ANIMATIONS","Set","modalIds","setModalIds","popModalId","newArr","slice","pop","modalCloseCallbacks","Map","globalKeyDownHandler","e","KeyboardEvent","key","topId","at","get","registerModalCallback","id","cb","size","document","addEventListener","set","unregisterModalCallback","delete","removeEventListener","ComponentModal","p","duration","modalId","unregisterModal","renderMaskEnabled","renderMaskClass","animName","isTransformAnim","has","renderModalBoxAnim","animation","renderOverlayAnim","renderBoxStyle","style","overlayDone","setOverlayDone","handleOverlayAnimEnd","boxVisible","handleBackdropClick","_$createComponent","type","MODAL","blockScroll","position","inset","wrapper","children","when","_el$","_tmpl$","$$click","_$effect","_$className","_$memo","_el$2","_tmpl$2","_el$3","_tmpl$4","_el$5","firstChild","_el$6","_el$7","nextSibling","stopPropagation","_$insert","_el$4","_tmpl$3","_p$","_v$","modal","_v$2","t","_$style","undefined","_c$","_el$9","_tmpl$5","_$addEventListener","closeButton","fallback","_el$0","_tmpl$6","_el$1","Element","_el$8","_v$3","_v$4","visibility","_v$5","_v$6","a","o","Modal","_$delegateEvents"],"sources":["../../../src/components/modal/modal.tsx"],"sourcesContent":["import { SolidComponent } from '@/type';\nimport { cn } from '@/utils/cn';\nimport { AnimationConfig, renderCSSAnimation } from '@/utils/helper';\nimport { conditionalRender } from '@/utils/hoc';\nimport X from 'lucide-solid/icons/x';\n\nimport {\n Component,\n createEffect,\n createSignal,\n createUniqueId,\n mergeProps,\n on,\n onCleanup,\n Show,\n} from 'solid-js';\nimport { ZIndex, ZIndexType } from '../z-index';\n\nexport type ModalType = {\n onClose: () => void;\n width?: string;\n closeOnOutsideClick?: boolean;\n closeOnEsc?: boolean;\n closable?: boolean;\n header?: SolidComponent;\n body?: SolidComponent;\n footer?: SolidComponent;\n open?: boolean;\n mask?: boolean | { enabled: boolean; blur: boolean };\n class?: Partial<\n Record<'wrapper' | 'modal' | 'header' | 'body' | 'footer' | 'closeButton', string>\n >;\n preRender?: boolean;\n animate?: Omit<AnimationConfig, 'name'> & {\n name: AnimateType;\n };\n};\n\n// Only opacity-based animations are safe to use on the modal box directly\n// because transform-based animations create a new containing block for\n// position:fixed descendants, which breaks fixed positioning inside body slots.\n// Transform animations are applied on a sibling overlay div instead.\ntype AnimateType =\n | 'none'\n | 'lightSpeedInRight'\n | 'lightSpeedInLeft'\n | 'fadeIn'\n | 'fadeInLeft'\n | 'fadeInRight'\n | 'fadeInDown'\n | 'fadeInUp'\n | 'bounceIn'\n | 'scaleInCenter'\n | 'slideInFwdCenter'\n | 'slideInBck'\n | 'tiltIn'\n | 'swingInRightBck'\n | 'puffInCenter'\n | 'scaleInBl';\n\n// Animations that use transform in their keyframes — these create a containing\n// block for position:fixed elements during the animation. They must NOT be\n// placed on any ancestor of body content.\nconst TRANSFORM_ANIMATIONS = new Set<AnimateType>([\n 'lightSpeedInRight',\n 'lightSpeedInLeft',\n 'fadeInLeft',\n 'fadeInRight',\n 'fadeInDown',\n 'fadeInUp',\n 'bounceIn',\n 'scaleInCenter',\n 'slideInFwdCenter',\n 'slideInBck',\n 'tiltIn',\n 'swingInRightBck',\n 'puffInCenter',\n 'scaleInBl',\n]);\n\n// Track active modals for overlay logic (only topmost modal shows mask)\nconst [modalIds, setModalIds] = createSignal<string[]>([]);\nfunction popModalId() {\n const newArr = modalIds().slice();\n newArr.pop();\n setModalIds(newArr);\n}\n\n// Global ESC key handler — single listener shared across all modal instances\nconst modalCloseCallbacks = new Map<string, () => void>();\n\nfunction globalKeyDownHandler(e: KeyboardEvent) {\n if (e.key !== 'Escape') return;\n const topId = modalIds().at(-1);\n if (topId) modalCloseCallbacks.get(topId)?.();\n}\n\nfunction registerModalCallback(id: string, cb: () => void) {\n if (modalCloseCallbacks.size === 0) {\n document.addEventListener('keydown', globalKeyDownHandler);\n }\n modalCloseCallbacks.set(id, cb);\n}\n\nfunction unregisterModalCallback(id: string) {\n modalCloseCallbacks.delete(id);\n if (modalCloseCallbacks.size === 0) {\n document.removeEventListener('keydown', globalKeyDownHandler);\n }\n}\n\nconst ComponentModal: Component<ModalType> = p => {\n p = mergeProps(\n {\n closeOnOutsideClick: true,\n closeOnEsc: true,\n open: true,\n onClose: () => {},\n closable: true,\n preRender: false,\n animate: {\n name: 'puffInCenter',\n duration: '300ms',\n },\n mask: true,\n } as ModalType,\n p,\n );\n\n const modalId = createUniqueId();\n\n onCleanup(function unregisterModal() {\n unregisterModalCallback(modalId);\n if (modalId === modalIds().at(-1)) {\n popModalId();\n }\n });\n\n // Manage modalIds stack for overlay logic\n createEffect(\n on(\n () => p.open,\n open => {\n if (open) {\n if (modalId !== modalIds().at(-1)) {\n setModalIds([...modalIds(), modalId]);\n }\n registerModalCallback(modalId, () => { if (p.closeOnEsc) p.onClose(); });\n } else {\n unregisterModalCallback(modalId);\n if (modalId === modalIds().at(-1)) {\n popModalId();\n }\n }\n },\n ),\n );\n\n const renderMaskEnabled = (): boolean => {\n if (!p.open) return false;\n if (modalId !== modalIds().at(-1)) return false;\n if (p.mask === false) return false;\n if (typeof p.mask === 'object' && p.mask?.enabled === false) return false;\n return true;\n };\n\n const renderMaskClass = (): string => {\n if (typeof p.mask === 'object' && p.mask?.blur === false) {\n return 'bg-modal-overlay';\n }\n return 'bg-modal-overlay backdrop-blur-[5px]';\n };\n\n const animName = (): AnimateType => p.animate?.name ?? 'none';\n const isTransformAnim = () => TRANSFORM_ANIMATIONS.has(animName());\n\n // For transform-based animations: rendered on a sibling absolutely-positioned\n // overlay div that visually matches the modal box but is NOT an ancestor of\n // body content. This completely avoids the containing-block issue.\n // For opacity-only animations (fadeIn): applied directly on the modal box.\n const renderModalBoxAnim = () => {\n if (!isTransformAnim() && animName() !== 'none') {\n return { animation: renderCSSAnimation(p.animate!) };\n }\n return {};\n };\n\n const renderOverlayAnim = () => {\n if (isTransformAnim()) {\n return { animation: renderCSSAnimation(p.animate!) };\n }\n return {};\n };\n\n const renderBoxStyle = () => {\n const style: Record<string, any> = {};\n if (p.width) {\n style['width'] = p.width;\n style['min-width'] = p.width;\n }\n return style;\n };\n\n // Overlay: a visually identical copy of the modal box that carries the\n // transform animation. It sits on top of the real modal box via absolute\n // positioning. Once animation ends it is hidden and the real box is shown.\n const [overlayDone, setOverlayDone] = createSignal(false);\n const handleOverlayAnimEnd = () => setOverlayDone(true);\n\n // Reset overlayDone each time modal re-opens so transform animation replays.\n createEffect(\n on(\n () => p.open,\n open => {\n if (open) setOverlayDone(false);\n },\n ),\n );\n\n // Real modal box becomes visible only after transform animation finishes\n // (to avoid showing both simultaneously).\n const boxVisible = () => !isTransformAnim() || overlayDone();\n\n const handleBackdropClick = () => {\n if (p.closeOnOutsideClick) {\n p.onClose();\n }\n };\n\n return (\n <ZIndex\n type={ZIndexType.MODAL}\n open={p.open ?? false}\n blockScroll\n preRender={p.preRender}\n position={{ inset: '0' }}\n class={cn('mo01', p.class?.wrapper)}\n >\n {/* Backdrop overlay — only for topmost modal */}\n <Show when={renderMaskEnabled()}>\n <div class={cn('mo02', renderMaskClass())} onClick={handleBackdropClick} />\n </Show>\n\n {/* Invisible hit area for outside-click when mask is disabled */}\n <Show when={!renderMaskEnabled() && p.closeOnOutsideClick}>\n <div class=\"mo02\" onClick={handleBackdropClick} />\n </Show>\n\n {/* Wrapper: flex item căn giữa bởi parent. Kích thước khớp real box.\n Overlay absolute bên trong → luôn cùng vị trí & kích thước với real box. */}\n <div class=\"mo03\" onClick={e => e.stopPropagation()}>\n {/* === Transform animation approach ===\n Overlay là visual clone với animation transform, positioned absolute\n bên trong wrapper → khớp 100% kích thước/vị trí với real box.\n Giữ body content thoát khỏi transform ancestor. */}\n <Show when={isTransformAnim() && !overlayDone()}>\n <div\n class={cn('mo04', p.class?.modal)}\n style={{ ...renderBoxStyle(), ...renderOverlayAnim() }}\n onAnimationEnd={handleOverlayAnimEnd}\n aria-hidden=\"true\"\n />\n </Show>\n\n {/* === Real modal box ===\n Dùng opacity animation (an toàn) hoặc không animation.\n Body content luôn thoát khỏi transform ancestor. */}\n <div\n class={cn('mo05', p.class?.modal)}\n style={{\n ...renderModalBoxAnim(),\n ...renderBoxStyle(),\n visibility: boxVisible() ? 'visible' : 'hidden',\n }}\n >\n {p.closable && (\n <button class={cn('mo06', p.class?.closeButton)} onClick={p.onClose} aria-label=\"Close\">\n <X size={16} />\n </button>\n )}\n\n <div class={cn('mo-header', p.class?.header)}>\n <Show when={p.header} fallback={<div class=\"mo07\">Modal ID: {modalId}</div>}>\n {p.header as Element}\n </Show>\n </div>\n\n <div class={cn('mo08', p.class?.body)}>\n <Show when={p.body}>{p.body as Element}</Show>\n </div>\n\n <Show when={p.footer}>\n <div class={cn('mo-footer', p.class?.footer)}>{p.footer as Element}</div>\n </Show>\n </div>\n </div>\n </ZIndex>\n );\n};\n\nexport const Modal = conditionalRender(ComponentModal, { preRender: 'preRender', when: 'open' });\n\nexport { ComponentModal };\n"],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ModalType } from './modal';
|
|
2
|
+
type ModalInstance = {
|
|
3
|
+
destroy: () => void;
|
|
4
|
+
};
|
|
5
|
+
export declare function createModal(options: Omit<ModalType, 'open' | 'preRender'>): ModalInstance;
|
|
6
|
+
export declare function closeAllModals(): void;
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=modalContext.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modalContext.d.ts","sourceRoot":"","sources":["../../../src/components/modal/modalContext.tsx"],"names":[],"mappings":"AACA,OAAO,EAAkB,SAAS,EAAE,MAAM,SAAS,CAAC;AAIpD,KAAK,aAAa,GAAG;IACnB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF,wBAAgB,WAAW,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,CAAC,GAAG,aAAa,CA4CzF;AAED,wBAAgB,cAAc,SAG7B"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{ComponentModal as e}from"./modal.js";import{createComponent as t,createRoot as n,createSignal as r}from"solid-js";var i=[];function a(a){let o=null,s=null,c=!1,l=e=>{if(c)return;c=!0,s?.(!1),e&&a.onClose?.();let t=i.indexOf(u);t>-1&&i.splice(t,1),setTimeout(()=>{o?.()},150)};n(n=>{o=n;let[i,c]=r(!0);s=c,t(e,{...a,get open(){return i()},preRender:!1,onClose:()=>l(!0)})});let u={destroy:()=>l(!1)};return i.push(u),u}function o(){[...i].forEach(e=>e.destroy())}export{o as closeAllModals,a as createModal};
|
|
2
|
+
//# sourceMappingURL=modalContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modalContext.js","names":["createComponent","createRoot","createSignal","ComponentModal","ModalType","activeModalInstances","ModalInstance","destroy","createModal","options","Omit","disposeRoot","setIsOpen","v","disposed","doClose","callOnClose","onClose","index","indexOf","instance","splice","setTimeout","root","isOpen","_setIsOpen","open","preRender","push","closeAllModals","instances","forEach"],"sources":["../../../src/components/modal/modalContext.tsx"],"sourcesContent":["import { createComponent, createRoot, createSignal } from 'solid-js';\nimport { ComponentModal, ModalType } from './modal';\n\nconst activeModalInstances: ModalInstance[] = [];\n\ntype ModalInstance = {\n destroy: () => void;\n};\n\nexport function createModal(options: Omit<ModalType, 'open' | 'preRender'>): ModalInstance {\n let disposeRoot: (() => void) | null = null;\n let setIsOpen: ((v: boolean) => void) | null = null;\n let disposed = false;\n\n const doClose = (callOnClose: boolean) => {\n if (disposed) return;\n disposed = true;\n\n setIsOpen?.(false);\n if (callOnClose) options.onClose?.();\n\n const index = activeModalInstances.indexOf(instance);\n if (index > -1) {\n activeModalInstances.splice(index, 1);\n }\n\n setTimeout(() => {\n disposeRoot?.();\n }, 150);\n };\n\n createRoot(root => {\n disposeRoot = root;\n const [isOpen, _setIsOpen] = createSignal(true);\n setIsOpen = _setIsOpen;\n\n // ComponentModal renders via Portal (ZIndex → Portal) — it mounts itself\n // into document.body internally. We only need to call it inside a reactive\n // root so its signals/effects run; we don't need to insert it anywhere.\n createComponent(ComponentModal, {\n ...options,\n get open() { return isOpen(); },\n preRender: false,\n onClose: () => doClose(true),\n });\n });\n\n const instance: ModalInstance = {\n destroy: () => doClose(false),\n };\n\n activeModalInstances.push(instance);\n return instance;\n}\n\nexport function closeAllModals() {\n const instances = [...activeModalInstances];\n instances.forEach(instance => instance.destroy());\n}\n"],"mappings":"yHAGA,IAAMK,EAAwC,EAAE,CAMhD,SAAgBG,EAAYC,EAA+D,CACzF,IAAIE,EAAmC,KACnCC,EAA2C,KAC3CE,EAAW,GAETC,EAAWC,GAAyB,CACxC,GAAIF,EAAU,OACdA,EAAW,GAEXF,IAAY,GAAM,CACdI,GAAaP,EAAQQ,WAAW,CAEpC,IAAMC,EAAQb,EAAqBc,QAAQC,EAAS,CAChDF,EAAQ,IACVb,EAAqBgB,OAAOH,EAAO,EAAE,CAGvCI,eAAiB,CACfX,KAAe,EACd,IAAI,EAGTV,EAAWsB,GAAQ,CACjBZ,EAAcY,EACd,GAAM,CAACC,EAAQC,GAAcvB,EAAa,GAAK,CAC/CU,EAAYa,EAKZzB,EAAgBG,EAAgB,CAC9B,GAAGM,EACH,IAAIiB,MAAO,CAAE,OAAOF,GAAQ,EAC5BG,UAAW,GACXV,YAAeF,EAAQ,GAAI,CAC5B,CAAC,EACF,CAEF,IAAMK,EAA0B,CAC9Bb,YAAeQ,EAAQ,GAAK,CAC7B,CAGD,OADAV,EAAqBuB,KAAKR,EAAS,CAC5BA,EAGT,SAAgBS,GAAiB,CACb,CAAC,GAAGxB,EAAqB,CACjC0B,QAAQX,GAAYA,EAASb,SAAS,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/pagination/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,YAAY,EACV,sBAAsB,EACtB,oBAAoB,EACpB,eAAe,EACf,qBAAqB,GACtB,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../../src/components/pagination/pagination.tsx"],"names":[],"mappings":"AAKA,OAAO,EACL,SAAS,EASV,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAGV,eAAe,EAEhB,MAAM,oBAAoB,CAAC;AA6f5B,eAAO,MAAM,UAAU,EAAE,SAAS,CAAC,eAAe,CAWjD,CAAC"}
|