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":"toast.js","names":["X","Component","For","JSX","Show","createEffect","createMemo","onCleanup","onMount","render","Error","Loader","Success","Info","Warning","toastStore","Message","PromiseOptions","ToastAPI","ToastData","ToastOptions","ToastPosition","ToastType","ToasterProps","ValueOrFunction","getToastYDirection","toast","defaultPos","position","top","includes","resolveValue","valOrFn","TValue","TArg","arg","getToastIcon","Element","icon","undefined","type","_$createComponent","_$mergeProps","iconTheme","CloseIcon","onClick","isRight","props","_el$","_tmpl$","$$click","e","stopPropagation","_$insert","size","_$effect","_$className","ToastBar","isCloseOnRight","handleClose","removeToast","id","_el$2","_tmpl$2","_el$3","firstChild","when","showCloseIcon","children","message","_p$","_v$","class","_v$2","style","_v$3","ariaProps","role","_v$4","t","_$style","a","_$setAttribute","o","ToastWrapper","dismissTimer","ReturnType","setTimeout","removeTimer","wrapperRef","HTMLDivElement","remainingTime","duration","timerStartTime","isPaused","startDismissTimer","Infinity","visible","Date","now","dismissToast","pauseDismissTimer","clearTimeout","elapsed","Math","max","handleMouseEnter","canPause","handleMouseLeave","addEventListener","handleVisibilityChange","unmountDelay","direction","animate","transform","opacity","fill","easing","cleanupToastTimersAndListeners","removeEventListener","renderContent","_el$4","_tmpl$3","_ref$","_$use","PositionContainer","toasts","gutter","getPositionStyles","CSSProperties","pos","styles","gap","bottom","left","right","length","_el$5","_tmpl$4","each","_$p","ToasterInternal","toastsByPosition","currentToasts","groups","Record","push","positions","toastsForPos","containerMounted","containerEl","ensureContainer","document","createElement","body","appendChild","Toaster","createHandler","options","toastData","createToast","upsertToast","success","error","info","warning","loading","custom","dismiss","toastId","remove","pop","removePop","dismissPop","shift","removeShift","dismissShift","promise","Promise","T","promiseOptions","toastOptions","result","successMessage","updateToast","errorMessage","_$delegateEvents"],"sources":["../../../src/components/toast/toast.tsx"],"sourcesContent":["import X from 'lucide-solid/icons/x';\r\nimport { Component, For, JSX, Show, createEffect, createMemo, onCleanup, onMount } from 'solid-js';\r\nimport { render } from 'solid-js/web';\r\nimport { Error, Loader, Success } from './icons';\r\nimport { Info } from './icons/InfoIcon';\r\nimport { Warning } from './icons/WarningIcon';\r\nimport { toastStore } from './toast.store';\r\nimport type {\r\n Message,\r\n PromiseOptions,\r\n ToastAPI,\r\n ToastData,\r\n ToastOptions,\r\n ToastPosition,\r\n ToastType,\r\n ToasterProps,\r\n ValueOrFunction,\r\n} from './toast.type';\r\n\r\nexport const getToastYDirection = (toast: ToastData, defaultPos: ToastPosition) => {\r\n const position = toast.position || defaultPos;\r\n const top = position.includes('top');\r\n return top ? 1 : -1;\r\n};\r\n// Helper to resolve value or function\r\nconst resolveValue = <TValue, TArg>(valOrFn: ValueOrFunction<TValue, TArg>, arg: TArg): TValue => {\r\n return typeof valOrFn === 'function' ? (valOrFn as (arg: TArg) => TValue)(arg) : valOrFn;\r\n};\r\n\r\nconst getToastIcon = (toast: ToastData): JSX.Element | null => {\r\n if (toast.icon !== undefined) {\r\n return toast.icon as Element;\r\n }\r\n switch (toast.type) {\r\n case 'success':\r\n return <Success {...toast.iconTheme} />;\r\n case 'error':\r\n return <Error {...toast.iconTheme} />;\r\n case 'info':\r\n return <Info {...toast.iconTheme} />;\r\n case 'warning':\r\n return <Warning {...toast.iconTheme} />;\r\n case 'loading':\r\n return <Loader {...toast.iconTheme} />;\r\n default:\r\n return null;\r\n }\r\n};\r\n\r\nconst CloseIcon: Component<{ onClick: () => void; isRight: boolean }> = props => {\r\n return (\r\n <div\r\n class={`toa03 ${props.isRight ? 'toa04' : 'toa05'}`}\r\n onClick={e => {\r\n e.stopPropagation();\r\n props.onClick();\r\n }}\r\n aria-label=\"Close\"\r\n >\r\n <X size={10} stroke-width={4} />\r\n </div>\r\n );\r\n};\r\n\r\nconst ToastBar: Component<{ toast: ToastData; position: ToastPosition }> = props => {\r\n const icon = createMemo(() => getToastIcon(props.toast));\r\n\r\n const isCloseOnRight = createMemo(() => !props.position.includes('right'));\r\n\r\n const handleClose = () => {\r\n toastStore.removeToast(props.toast.id);\r\n };\r\n\r\n return (\r\n <div\r\n class={`toa01 ${props.toast.class || ''}`}\r\n style={props.toast.style}\r\n role={props.toast.ariaProps.role}\r\n aria-live={props.toast.ariaProps['aria-live']}\r\n >\r\n <Show when={props.toast.showCloseIcon}>\r\n <CloseIcon onClick={handleClose} isRight={isCloseOnRight()} />\r\n </Show>\r\n <Show when={icon()}>{icon()}</Show>\r\n <div class=\"flex-1 text-sm\">{props.toast.message as Element}</div>\r\n </div>\r\n );\r\n};\r\n\r\n// Individual toast wrapper with animations\r\nconst ToastWrapper: Component<{ toast: ToastData; position: ToastPosition }> = props => {\r\n let dismissTimer: ReturnType<typeof setTimeout> | undefined;\r\n let removeTimer: ReturnType<typeof setTimeout> | undefined;\r\n let wrapperRef: HTMLDivElement | undefined;\r\n\r\n // Theo dõi thời gian còn lại và thời điểm bắt đầu timer\r\n let remainingTime = props.toast.duration;\r\n let timerStartTime = 0;\r\n let isPaused = false;\r\n\r\n // Bắt đầu timer với thời gian còn lại\r\n const startDismissTimer = (duration: number) => {\r\n if (duration === Infinity || !props.toast.visible) return;\r\n\r\n timerStartTime = Date.now();\r\n dismissTimer = setTimeout(() => {\r\n toastStore.dismissToast(props.toast.id);\r\n }, duration);\r\n };\r\n\r\n // Dừng timer và lưu thời gian còn lại\r\n const pauseDismissTimer = () => {\r\n if (dismissTimer) {\r\n clearTimeout(dismissTimer);\r\n dismissTimer = undefined;\r\n // Tính thời gian còn lại\r\n const elapsed = Date.now() - timerStartTime;\r\n remainingTime = Math.max(0, remainingTime - elapsed);\r\n }\r\n };\r\n\r\n // Event handlers cho pause on hover\r\n const handleMouseEnter = () => {\r\n if (!props.toast.canPause || isPaused) return;\r\n isPaused = true;\r\n pauseDismissTimer();\r\n };\r\n\r\n const handleMouseLeave = () => {\r\n if (!props.toast.canPause || !isPaused) return;\r\n isPaused = false;\r\n startDismissTimer(remainingTime);\r\n };\r\n\r\n // Setup auto dismiss timer on mount\r\n onMount(() => {\r\n startDismissTimer(props.toast.duration);\r\n\r\n // Thêm event listeners nếu canPause = true\r\n if (props.toast.canPause && wrapperRef) {\r\n wrapperRef.addEventListener('mouseenter', handleMouseEnter);\r\n wrapperRef.addEventListener('mouseleave', handleMouseLeave);\r\n }\r\n });\r\n\r\n // Watch for visible change to schedule removal\r\n createEffect(function handleVisibilityChange() {\r\n const visible = props.toast.visible;\r\n if (!visible) {\r\n // Clear dismiss timer if exists\r\n if (dismissTimer) {\r\n clearTimeout(dismissTimer);\r\n dismissTimer = undefined;\r\n }\r\n // Schedule removal after animation\r\n removeTimer = setTimeout(() => {\r\n toastStore.removeToast(props.toast.id);\r\n }, props.toast.unmountDelay);\r\n }\r\n\r\n // run animate open/close\r\n if (!wrapperRef) return;\r\n const direction = getToastYDirection(props.toast, props.position);\r\n if (visible) {\r\n wrapperRef.animate(\r\n [\r\n { transform: `translate3d(0,${direction * -200}%,0) scale(.6)`, opacity: 0.5 },\r\n { transform: 'translate3d(0,0,0) scale(1)', opacity: 1 },\r\n ],\r\n {\r\n duration: 350,\r\n fill: 'forwards',\r\n easing: 'cubic-bezier(.21,1.02,.73,1)',\r\n },\r\n );\r\n } else {\r\n wrapperRef.animate(\r\n [\r\n { transform: 'translate3d(0,0,-1px) scale(1)', opacity: 1 },\r\n { transform: `translate3d(0,${direction * -150}%,-1px) scale(.4)`, opacity: 0 },\r\n ],\r\n {\r\n duration: 400,\r\n fill: 'forwards',\r\n easing: 'cubic-bezier(.06,.71,.55,1)',\r\n },\r\n );\r\n }\r\n });\r\n\r\n onCleanup(function cleanupToastTimersAndListeners() {\r\n if (dismissTimer) clearTimeout(dismissTimer);\r\n if (removeTimer) clearTimeout(removeTimer);\r\n // Gỡ event listeners\r\n if (props.toast.canPause && wrapperRef) {\r\n wrapperRef.removeEventListener('mouseenter', handleMouseEnter);\r\n wrapperRef.removeEventListener('mouseleave', handleMouseLeave);\r\n }\r\n });\r\n\r\n // Custom toast render\r\n const renderContent = () => {\r\n if (props.toast.type === 'custom' && typeof props.toast.message === 'function') {\r\n return (props.toast.message as (t: ToastData) => Element)(props.toast);\r\n }\r\n return <ToastBar toast={props.toast} position={props.position} />;\r\n };\r\n\r\n return (\r\n <div ref={wrapperRef} class=\"w-fit max-w-[350px]\">\r\n {renderContent()}\r\n </div>\r\n );\r\n};\r\n\r\n// Position container\r\nconst PositionContainer: Component<{\r\n position: ToastPosition;\r\n toasts: ToastData[];\r\n gutter: number;\r\n}> = props => {\r\n const getPositionStyles = (): JSX.CSSProperties => {\r\n const pos = props.position;\r\n const styles: JSX.CSSProperties = {\r\n gap: `${props.gutter}px`,\r\n };\r\n\r\n if (pos.includes('top')) {\r\n styles.top = '0';\r\n } else {\r\n styles.bottom = '0';\r\n styles['flex-direction'] = 'column-reverse';\r\n }\r\n\r\n if (pos.includes('left')) {\r\n styles.left = '0';\r\n styles['align-items'] = 'flex-start';\r\n } else if (pos.includes('right')) {\r\n styles.right = '0';\r\n styles['align-items'] = 'flex-end';\r\n } else {\r\n styles.left = '50%';\r\n styles.transform = 'translateX(-50%)';\r\n styles['align-items'] = 'center';\r\n }\r\n\r\n return styles;\r\n };\r\n\r\n return (\r\n <Show when={props.toasts.length > 0}>\r\n <div class=\"fixed z-9999 flex flex-col p-4\" style={getPositionStyles()}>\r\n <For each={props.toasts}>\r\n {toast => <ToastWrapper toast={toast} position={props.position} />}\r\n </For>\r\n </div>\r\n </Show>\r\n );\r\n};\r\n\r\n// Internal Toaster component\r\nconst ToasterInternal: Component<ToasterProps> = props => {\r\n const position = () => props.position || 'top-right';\r\n const gutter = () => props.gutter ?? 10;\r\n\r\n // Group toasts by position\r\n const toastsByPosition = createMemo(() => {\r\n const currentToasts = toastStore.toasts();\r\n const groups: Record<ToastPosition, ToastData[]> = {\r\n 'top-left': [],\r\n 'top-center': [],\r\n 'top-right': [],\r\n 'bottom-left': [],\r\n 'bottom-center': [],\r\n 'bottom-right': [],\r\n };\r\n\r\n for (const t of currentToasts) {\r\n const pos = t.position || position();\r\n groups[pos].push(t);\r\n }\r\n\r\n return groups;\r\n });\r\n\r\n const positions: ToastPosition[] = [\r\n 'top-left',\r\n 'top-center',\r\n 'top-right',\r\n 'bottom-left',\r\n 'bottom-center',\r\n 'bottom-right',\r\n ];\r\n\r\n return (\r\n <>\r\n <For each={positions}>\r\n {pos => {\r\n const toastsForPos = createMemo(() => toastsByPosition()[pos]);\r\n return <PositionContainer position={pos} toasts={toastsForPos()} gutter={gutter()} />;\r\n }}\r\n </For>\r\n </>\r\n );\r\n};\r\n\r\n// Auto-mount toast container\r\nlet containerMounted = false;\r\nlet containerEl: HTMLDivElement | null = null;\r\n\r\nconst ensureContainer = () => {\r\n if (containerMounted) return;\r\n\r\n containerEl = document.createElement('div');\r\n containerEl.id = 'sui-toast-container';\r\n document.body.appendChild(containerEl);\r\n\r\n render(() => <ToasterInternal />, containerEl);\r\n containerMounted = true;\r\n};\r\n\r\n// Optional Toaster component for custom configuration\r\nexport const Toaster: Component<ToasterProps> = props => {\r\n onMount(() => {\r\n // If user adds Toaster, use their config\r\n if (!containerMounted) {\r\n containerEl = document.createElement('div');\r\n containerEl.id = 'sui-toast-container';\r\n document.body.appendChild(containerEl);\r\n\r\n render(() => <ToasterInternal {...props} />, containerEl);\r\n containerMounted = true;\r\n }\r\n });\r\n\r\n return null;\r\n};\r\n\r\n// Toast API\r\nconst createHandler =\r\n (type: ToastType) =>\r\n (message: Message, options?: ToastOptions): string => {\r\n ensureContainer();\r\n const toastData = toastStore.createToast(message, type, options);\r\n toastStore.upsertToast(toastData);\r\n return toastData.id;\r\n };\r\n\r\n// Main toast function\r\nconst toast = ((message: Message, options?: ToastOptions): string => {\r\n return createHandler('blank')(message, options);\r\n}) as ToastAPI;\r\n\r\ntoast.success = createHandler('success');\r\ntoast.error = createHandler('error');\r\ntoast.info = createHandler('info');\r\ntoast.warning = createHandler('warning');\r\ntoast.loading = createHandler('loading');\r\n\r\ntoast.custom = (message: (toast: ToastData) => JSX.Element, options?: ToastOptions): string => {\r\n ensureContainer();\r\n const toastData = toastStore.createToast(message as any, 'custom', options);\r\n toastStore.upsertToast(toastData);\r\n return toastData.id;\r\n};\r\n\r\ntoast.dismiss = (toastId?: string) => {\r\n toastStore.dismissToast(toastId);\r\n};\r\n\r\ntoast.remove = (toastId?: string) => {\r\n toastStore.removeToast(toastId);\r\n};\r\n\r\ntoast.pop = (options?: { animate?: boolean }) => {\r\n if (options?.animate === false) {\r\n toastStore.removePop();\r\n } else {\r\n toastStore.dismissPop();\r\n }\r\n};\r\n\r\ntoast.shift = (options?: { animate?: boolean }) => {\r\n if (options?.animate === false) {\r\n toastStore.removeShift();\r\n } else {\r\n toastStore.dismissShift();\r\n }\r\n};\r\n\r\ntoast.promise = async <T,>(\r\n promise: Promise<T>,\r\n promiseOptions: PromiseOptions<T>,\r\n toastOptions?: ToastOptions,\r\n): Promise<T> => {\r\n const id = toast.loading(promiseOptions.loading, toastOptions);\r\n\r\n try {\r\n const result = await promise;\r\n const successMessage = resolveValue(promiseOptions.success, result);\r\n toastStore.updateToast(id, {\r\n type: 'success',\r\n message: successMessage as any,\r\n icon: undefined, // Reset icon to use default success icon\r\n });\r\n // Schedule dismiss after showing success\r\n setTimeout(() => {\r\n toastStore.dismissToast(id);\r\n }, toastOptions?.duration ?? 3000);\r\n return result;\r\n } catch (error) {\r\n const errorMessage = resolveValue(promiseOptions.error, error);\r\n toastStore.updateToast(id, {\r\n type: 'error',\r\n message: errorMessage as any,\r\n icon: undefined, // Reset icon to use default error icon\r\n });\r\n // Schedule dismiss after showing error\r\n setTimeout(() => {\r\n toastStore.dismissToast(id);\r\n }, toastOptions?.duration ?? 3000);\r\n throw error;\r\n }\r\n};\r\n\r\nexport { toast };\r\n"],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { JSX } from 'solid-js';
|
|
2
|
+
import { ToastData, ToastOptions, ToastType, Message } from './toast.type';
|
|
3
|
+
export declare const toastStore: {
|
|
4
|
+
toasts: import('solid-js').Accessor<ToastData[]>;
|
|
5
|
+
createToast: (message: Message | ((toast: ToastData) => JSX.Element), type: ToastType, options?: ToastOptions) => ToastData;
|
|
6
|
+
upsertToast: (toast: ToastData) => void;
|
|
7
|
+
dismissToast: (toastId?: string) => void;
|
|
8
|
+
removeToast: (toastId?: string) => void;
|
|
9
|
+
updateToast: (toastId: string, updates: Partial<ToastData>) => void;
|
|
10
|
+
pauseToast: (toastId: string) => void;
|
|
11
|
+
resumeToast: (toastId: string) => void;
|
|
12
|
+
dismissPop: () => void;
|
|
13
|
+
removePop: () => void;
|
|
14
|
+
dismissShift: () => void;
|
|
15
|
+
removeShift: () => void;
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=toast.store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toast.store.d.ts","sourceRoot":"","sources":["../../../src/components/toast/toast.store.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,GAAG,EAAkB,MAAM,UAAU,CAAC;AACzE,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,SAAS,EAAiB,OAAO,EAAE,MAAM,cAAc,CAAC;AAsL/F,eAAO,MAAM,UAAU;;2BA/JV,OAAO,GAAG,CAAC,CAAC,KAAK,EAAE,SAAS,KAAK,GAAG,CAAC,OAAO,CAAC,QAChD,SAAS,YACL,YAAY,KACrB,SAAS;yBA6BgB,SAAS;6BAmBL,MAAM;4BAWP,MAAM;2BAuDP,MAAM,WAAW,OAAO,CAAC,SAAS,CAAC;0BAMpC,MAAM;2BAKL,MAAM;;;;;CA+BgB,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{createRoot as e,createSignal as t,createUniqueId as n}from"solid-js";var r={blank:3e3,success:3e3,error:3e3,info:3e3,warning:3e3,loading:1/0,custom:3e3},i=`top-right`,a=400,o=10;function s(){let[e,s]=t([]),[c,l]=t(null);return{toasts:e,createToast:(t,o,s)=>{let c=n(),l=e().find(e=>e.id===c);return{id:c,type:o,message:t,icon:s?.icon,duration:s?.duration??r[o],pauseDuration:l?.pauseDuration??0,paused:!1,position:s?.position??i,ariaProps:s?.ariaProps??{role:`status`,"aria-live":`polite`},style:s?.style,class:s?.class,iconTheme:s?.iconTheme,createdAt:l?.createdAt??Date.now(),visible:!0,unmountDelay:s?.unmountDelay??a,canPause:s?.canPause??!0,showCloseIcon:s?.showCloseIcon??!0}},upsertToast:e=>{s(t=>{let n=t.findIndex(t=>t.id===e.id);if(n!==-1){let r=[...t];return r[n]={...t[n],...e,updatedAt:Date.now()},r}else{let n=[e,...t];return n.length>o&&(n=n.slice(0,o)),n}})},dismissToast:e=>{s(t=>e?t.map(t=>t.id===e?{...t,visible:!1}:t):t.map(e=>({...e,visible:!1})))},removeToast:e=>{s(t=>e?t.filter(t=>t.id!==e):[])},updateToast:(e,t)=>{s(n=>n.map(n=>n.id===e?{...n,...t,updatedAt:Date.now()}:n))},pauseToast:e=>{s(t=>t.map(t=>t.id===e&&!t.paused?{...t,paused:!0}:t)),l(Date.now())},resumeToast:e=>{let t=c();t&&s(n=>n.map(n=>n.id===e&&n.paused?{...n,paused:!1,pauseDuration:n.pauseDuration+(Date.now()-t)}:n)),l(null)},dismissPop:()=>{s(e=>{for(let t=e.length-1;t>=0;t--)if(e[t].visible)return e.map((e,n)=>n===t?{...e,visible:!1}:e);return e})},removePop:()=>{s(e=>{for(let t=e.length-1;t>=0;t--)if(e[t].visible)return[...e.slice(0,t),...e.slice(t+1)];return e})},dismissShift:()=>{s(e=>{for(let t=0;t<e.length;t++)if(e[t].visible)return e.map((e,n)=>n===t?{...e,visible:!1}:e);return e})},removeShift:()=>{s(e=>{for(let t=0;t<e.length;t++)if(e[t].visible)return[...e.slice(0,t),...e.slice(t+1)];return e})}}}var c=e(s);export{c as toastStore};
|
|
2
|
+
//# sourceMappingURL=toast.store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toast.store.js","names":[],"sources":["../../../src/components/toast/toast.store.ts"],"sourcesContent":["import { createSignal, createRoot, JSX, createUniqueId } from 'solid-js';\r\nimport type { ToastData, ToastOptions, ToastType, ToastPosition, Message } from './toast.type';\r\n\r\n// Default values\r\nconst DEFAULT_DURATION: Record<ToastType, number> = {\r\n blank: 3000,\r\n success: 3000,\r\n error: 3000,\r\n info: 3000,\r\n warning: 3000,\r\n loading: Infinity,\r\n custom: 3000,\r\n};\r\n\r\nconst DEFAULT_POSITION: ToastPosition = 'top-right';\r\nconst DEFAULT_UNMOUNT_DELAY = 400;\r\nconst MAX_TOASTS = 10;\r\n\r\n// Toast store using signals\r\nfunction createToastStore() {\r\n const [toasts, setToasts] = createSignal<ToastData[]>([]);\r\n const [pausedAt, setPausedAt] = createSignal<number | null>(null);\r\n\r\n const createToast = (\r\n message: Message | ((toast: ToastData) => JSX.Element),\r\n type: ToastType,\r\n options?: ToastOptions,\r\n ): ToastData => {\r\n const id = createUniqueId();\r\n const existingToast = toasts().find(t => t.id === id);\r\n const toast: ToastData = {\r\n id,\r\n type,\r\n message: message as Message,\r\n icon: options?.icon,\r\n duration: options?.duration ?? DEFAULT_DURATION[type],\r\n pauseDuration: existingToast?.pauseDuration ?? 0,\r\n paused: false,\r\n position: options?.position ?? DEFAULT_POSITION,\r\n ariaProps: options?.ariaProps ?? {\r\n role: 'status',\r\n 'aria-live': 'polite',\r\n },\r\n style: options?.style,\r\n class: options?.class,\r\n iconTheme: options?.iconTheme,\r\n createdAt: existingToast?.createdAt ?? Date.now(),\r\n visible: true,\r\n unmountDelay: options?.unmountDelay ?? DEFAULT_UNMOUNT_DELAY,\r\n canPause: options?.canPause ?? true,\r\n showCloseIcon: options?.showCloseIcon ?? true,\r\n };\r\n\r\n return toast;\r\n };\r\n\r\n const upsertToast = (toast: ToastData) => {\r\n setToasts(prev => {\r\n const index = prev.findIndex(t => t.id === toast.id);\r\n if (index !== -1) {\r\n // Update existing toast\r\n const newToasts = [...prev];\r\n newToasts[index] = { ...prev[index], ...toast, updatedAt: Date.now() };\r\n return newToasts;\r\n } else {\r\n // Add new toast at the beginning and enforce max limit\r\n let newToasts = [toast, ...prev];\r\n if (newToasts.length > MAX_TOASTS) {\r\n newToasts = newToasts.slice(0, MAX_TOASTS);\r\n }\r\n return newToasts;\r\n }\r\n });\r\n };\r\n\r\n const dismissToast = (toastId?: string) => {\r\n setToasts(prev => {\r\n if (toastId) {\r\n return prev.map(t => (t.id === toastId ? { ...t, visible: false } : t));\r\n } else {\r\n // Dismiss all\r\n return prev.map(t => ({ ...t, visible: false }));\r\n }\r\n });\r\n };\r\n\r\n const removeToast = (toastId?: string) => {\r\n setToasts(prev => {\r\n if (toastId) {\r\n return prev.filter(t => t.id !== toastId);\r\n } else {\r\n // Remove all\r\n return [];\r\n }\r\n });\r\n };\r\n\r\n const dismissPop = () => {\r\n setToasts(prev => {\r\n for (let i = prev.length - 1; i >= 0; i--) {\r\n if (prev[i].visible) {\r\n return prev.map((t, idx) => (idx === i ? { ...t, visible: false } : t));\r\n }\r\n }\r\n return prev;\r\n });\r\n };\r\n\r\n const removePop = () => {\r\n setToasts(prev => {\r\n for (let i = prev.length - 1; i >= 0; i--) {\r\n if (prev[i].visible) {\r\n return [...prev.slice(0, i), ...prev.slice(i + 1)];\r\n }\r\n }\r\n return prev;\r\n });\r\n };\r\n\r\n const dismissShift = () => {\r\n setToasts(prev => {\r\n for (let i = 0; i < prev.length; i++) {\r\n if (prev[i].visible) {\r\n return prev.map((t, idx) => (idx === i ? { ...t, visible: false } : t));\r\n }\r\n }\r\n return prev;\r\n });\r\n };\r\n\r\n const removeShift = () => {\r\n setToasts(prev => {\r\n for (let i = 0; i < prev.length; i++) {\r\n if (prev[i].visible) {\r\n return [...prev.slice(0, i), ...prev.slice(i + 1)];\r\n }\r\n }\r\n return prev;\r\n });\r\n };\r\n\r\n const updateToast = (toastId: string, updates: Partial<ToastData>) => {\r\n setToasts(prev =>\r\n prev.map(t => (t.id === toastId ? { ...t, ...updates, updatedAt: Date.now() } : t)),\r\n );\r\n };\r\n\r\n const pauseToast = (toastId: string) => {\r\n setToasts(prev => prev.map(t => (t.id === toastId && !t.paused ? { ...t, paused: true } : t)));\r\n setPausedAt(Date.now());\r\n };\r\n\r\n const resumeToast = (toastId: string) => {\r\n const pauseTime = pausedAt();\r\n if (pauseTime) {\r\n setToasts(prev =>\r\n prev.map(t =>\r\n t.id === toastId && t.paused\r\n ? { ...t, paused: false, pauseDuration: t.pauseDuration + (Date.now() - pauseTime) }\r\n : t,\r\n ),\r\n );\r\n }\r\n setPausedAt(null);\r\n };\r\n\r\n return {\r\n toasts,\r\n createToast,\r\n upsertToast,\r\n dismissToast,\r\n removeToast,\r\n updateToast,\r\n pauseToast,\r\n resumeToast,\r\n dismissPop,\r\n removePop,\r\n dismissShift,\r\n removeShift,\r\n };\r\n}\r\n\r\n// Create singleton store\r\nexport const toastStore = createRoot(createToastStore);\r\n"],"mappings":"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"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { SolidComponent } from '../../type';
|
|
2
|
+
import { JSX, JSXElement } from 'solid-js';
|
|
3
|
+
export type ValueFunction<TValue, TArg> = (arg: TArg) => TValue;
|
|
4
|
+
export type ValueOrFunction<TValue, TArg> = TValue | ValueFunction<TValue, TArg>;
|
|
5
|
+
export type ToastType = 'success' | 'error' | 'info' | 'warning' | 'loading' | 'blank' | 'custom';
|
|
6
|
+
export type ToastPosition = 'top-left' | 'top-center' | 'top-right' | 'bottom-left' | 'bottom-center' | 'bottom-right';
|
|
7
|
+
export interface IconTheme {
|
|
8
|
+
primary?: string;
|
|
9
|
+
secondary?: string;
|
|
10
|
+
}
|
|
11
|
+
export type IconProps = Partial<IconTheme>;
|
|
12
|
+
export interface ToastData {
|
|
13
|
+
type: ToastType;
|
|
14
|
+
id: string;
|
|
15
|
+
message: Message;
|
|
16
|
+
icon?: SolidComponent;
|
|
17
|
+
duration: number;
|
|
18
|
+
pauseDuration: number;
|
|
19
|
+
paused: boolean;
|
|
20
|
+
position: ToastPosition;
|
|
21
|
+
ariaProps: {
|
|
22
|
+
role: 'status' | 'alert';
|
|
23
|
+
'aria-live': 'assertive' | 'off' | 'polite';
|
|
24
|
+
};
|
|
25
|
+
style?: JSX.CSSProperties;
|
|
26
|
+
class?: string;
|
|
27
|
+
iconTheme?: IconTheme;
|
|
28
|
+
createdAt: number;
|
|
29
|
+
updatedAt?: number;
|
|
30
|
+
visible: boolean;
|
|
31
|
+
height?: number;
|
|
32
|
+
unmountDelay?: number;
|
|
33
|
+
canPause: boolean;
|
|
34
|
+
showCloseIcon: boolean;
|
|
35
|
+
}
|
|
36
|
+
export type ToastOptions = Partial<Pick<ToastData, 'icon' | 'duration' | 'ariaProps' | 'class' | 'style' | 'position' | 'unmountDelay' | 'iconTheme' | 'canPause' | 'showCloseIcon'>>;
|
|
37
|
+
export type DefaultToastOptions = ToastOptions & {
|
|
38
|
+
[key in ToastType]?: ToastOptions;
|
|
39
|
+
};
|
|
40
|
+
export type Message = ValueOrFunction<SolidComponent, ToastData>;
|
|
41
|
+
export type ToastHandler = (message: Message, options?: ToastOptions) => string;
|
|
42
|
+
export interface ToasterProps {
|
|
43
|
+
position?: ToastPosition;
|
|
44
|
+
toastOptions?: DefaultToastOptions;
|
|
45
|
+
gutter?: number;
|
|
46
|
+
containerStyle?: JSX.CSSProperties;
|
|
47
|
+
containerClassName?: string;
|
|
48
|
+
maxToasts?: number;
|
|
49
|
+
}
|
|
50
|
+
export interface PromiseOptions<T> {
|
|
51
|
+
loading: SolidComponent;
|
|
52
|
+
success: ValueOrFunction<SolidComponent, T>;
|
|
53
|
+
error: ValueOrFunction<SolidComponent, any>;
|
|
54
|
+
}
|
|
55
|
+
export interface PopShiftOptions {
|
|
56
|
+
animate?: boolean;
|
|
57
|
+
}
|
|
58
|
+
export interface ToastAPI {
|
|
59
|
+
(message: Message, options?: ToastOptions): string;
|
|
60
|
+
success: (message: Message, options?: ToastOptions) => string;
|
|
61
|
+
error: (message: Message, options?: ToastOptions) => string;
|
|
62
|
+
info: (message: Message, options?: ToastOptions) => string;
|
|
63
|
+
warning: (message: Message, options?: ToastOptions) => string;
|
|
64
|
+
loading: (message: Message, options?: ToastOptions) => string;
|
|
65
|
+
custom: (message: (toast: ToastData) => JSXElement, options?: ToastOptions) => string;
|
|
66
|
+
dismiss: (toastId?: string) => void;
|
|
67
|
+
remove: (toastId?: string) => void;
|
|
68
|
+
pop: (options?: PopShiftOptions) => void;
|
|
69
|
+
shift: (options?: PopShiftOptions) => void;
|
|
70
|
+
promise: <T>(promise: Promise<T>, options: PromiseOptions<T>, toastOptions?: ToastOptions) => Promise<T>;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=toast.type.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toast.type.d.ts","sourceRoot":"","sources":["../../../src/components/toast/toast.type.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/tooltip/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACtD,YAAY,EACV,YAAY,EACZ,kBAAkB,EAClB,mBAAmB,EACnB,eAAe,GAChB,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { VariantProps } from 'class-variance-authority';
|
|
2
|
+
import { Component } from 'solid-js';
|
|
3
|
+
import { TooltipProps } from './tooltip.types';
|
|
4
|
+
declare const tooltipVariants: (props?: ({
|
|
5
|
+
color?: "primary" | "neutral" | "secondary" | "accent" | "info" | "success" | "warning" | "error" | null | undefined;
|
|
6
|
+
position?: "top" | "bottom" | "left" | "right" | null | undefined;
|
|
7
|
+
} & import('class-variance-authority/types').ClassProp) | undefined) => string;
|
|
8
|
+
export type TooltipVariantsProps = VariantProps<typeof tooltipVariants>;
|
|
9
|
+
export declare const Tooltip: Component<TooltipProps>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=tooltip.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tooltip.d.ts","sourceRoot":"","sources":["../../../src/components/tooltip/tooltip.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAO,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EACL,SAAS,EAUV,MAAM,UAAU,CAAC;AAClB,OAAO,KAAK,EAAsB,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAIxE,QAAA,MAAM,eAAe;;;8EAmBnB,CAAC;AACH,MAAM,MAAM,oBAAoB,GAAG,YAAY,CAAC,OAAO,eAAe,CAAC,CAAC;AAwLxE,eAAO,MAAM,OAAO,EAAE,SAAS,CAAC,YAAY,CAU3C,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{cn as e}from"../../utils/cn.js";import{getColor as t}from"../../utils/helper.js";import{acquire as n,release as r}from"../z-index/z-index.store.js";import{ZIndexType as i}from"../z-index/z-index.types.js";import{OFFSET as a,ZIndex as o}from"../z-index/z-index.js";import{className as s,createComponent as c,effect as l,insert as u,memo as d,mergeProps as f,setAttribute as p,spread as m,template as h,use as g}from"solid-js/web";import{cva as _}from"class-variance-authority";import{Match as v,Show as y,Switch as b,createSignal as x,createUniqueId as S,mergeProps as C,onCleanup as w,onMount as T}from"solid-js";var E=h(`<div><div class=too08>`),D=h(`<div class=hidden>`),O=h(`<div>`),k=_(``,{variants:{color:{neutral:`tooltip-neutral`,primary:`tooltip-primary`,secondary:`tooltip-secondary`,accent:`tooltip-accent`,info:`tooltip-info`,success:`tooltip-success`,warning:`tooltip-warning`,error:`tooltip-error`},position:{top:`tooltip-top`,bottom:`tooltip-bottom`,right:`tooltip-right`,left:`tooltip-left`}}}),A=new Map,j=new Map,M=0,N=null;function P(e,t){return t===`top`?{left:`${e.left+e.width/2}px`,top:`${e.top-8}px`,transform:`translateX(-50%) translateY(-100%)`}:t===`bottom`?{left:`${e.left+e.width/2}px`,top:`${e.bottom+8}px`,transform:`translateX(-50%)`}:t===`left`?{left:`${e.left-8}px`,top:`${e.top+e.height/2}px`,transform:`translateX(-100%) translateY(-50%)`}:{left:`${e.right+8}px`,top:`${e.top+e.height/2}px`,transform:`translateY(-50%)`}}function F(t,r,o,s,c,l,u,d){if(A.has(t))return;let f=P(r.getBoundingClientRect(),c),p=document.createElement(`div`);p.className=e(`too06`,l,u),Object.assign(p.style,{position:`fixed`,pointerEvents:`auto`},f);let m,h,g;if(d!==void 0)g=d,m=``,h=-1;else{let e=n(i.TOOLTIP,a[i.TOOLTIP]);g=e.zIndex,m=e.registryKey,h=e.offset}p.style.zIndex=String(g),o?p.textContent=o:s&&p.appendChild(s.cloneNode(!0));let _={node:p,registryKey:m,offset:h,bubbleHovered:!1,position:c};A.set(t,_),p.addEventListener(`mouseenter`,function(){_.bubbleHovered=!0}),p.addEventListener(`mouseleave`,function(){_.bubbleHovered=!1,L(t)}),document.body.appendChild(p)}var I=new Set;function L(e){let t=A.get(e);t&&(I.has(e)||t.bubbleHovered||(t.node.remove(),t.offset>=0&&r(t.registryKey,t.offset),A.delete(e)))}function R(e){I.delete(e),L(e)}function z(){return N||=new IntersectionObserver(e=>{for(let t of e){let e=t.target,n=e.dataset.id??``,r=e.dataset.tip,i=e.dataset.position??`top`,a=e.dataset.colorClass??``,o=e.dataset.extraClass,s=e.dataset.customZIndex?Number(e.dataset.customZIndex):void 0;if(t.isIntersecting){I.add(n);let t=e.closest(`[data-tt]`);if(!t)continue;F(n,t,r,j.get(n),i,a,o,s)}else R(n)}},{threshold:0}),N}var B=e=>c(y,{get when(){return!e.hidden},get fallback(){return d(()=>e.children)},get children(){return c(b,{get fallback(){return c(V,e)},get children(){return c(v,{get when(){return e.type===`portal`||`containerId`in e},get children(){return c(Z,e)}})}})}}),V=n=>{n=C({position:`top`,color:`neutral`},n);let r=S(),i,a;return T(()=>{M++,i.dataset.id=r,i.dataset.tip=n.content??``,i.dataset.position=n.position,i.dataset.colorClass=t(n.color),n.class?.content&&(i.dataset.extraClass=n.class.content),n.zIndex!==void 0&&(i.dataset.customZIndex=String(n.zIndex)),n.customContent&&a?.firstElementChild&&j.set(r,a.firstElementChild),z().observe(i)}),w(function(){N?.unobserve(i),R(r),j.delete(r),M--,M===0&&N&&(N.disconnect(),N=null)}),(()=>{var t=E(),r=t.firstChild;g(e=>e.dataset.tt=``,t);var o=i;return typeof o==`function`?g(o,r):i=r,u(t,()=>n.children,null),u(t,(()=>{var e=d(()=>!!n.customContent);return()=>e()&&(()=>{var e=D(),t=a;return typeof t==`function`?g(t,e):a=e,u(e,()=>n.customContent),e})()})(),null),l(r=>{var i=e(`too07`,n.class?.root),a=n.position??`top`;return i!==r.e&&s(t,r.e=i),a!==r.t&&p(t,`data-pos`,r.t=a),r},{e:void 0,t:void 0}),t})()},[H,U]=x({}),W=new WeakMap,G=new WeakMap;function K(e){return t=>{let n=t.target.closest(`[tt]`);if(!n)return;let r=n.getAttribute(`tt`),i=e.entries.get(r);i&&(i.updateCoords(),i.setHovered(!0))}}function q(e){return t=>{let n=t.target.closest(`[tt]`);if(!n)return;let r=n.getAttribute(`tt`),i=t.relatedTarget;if(i&&n.contains(i))return;let a=e.entries.get(r);a&&a.setHovered(!1)}}function J(e,t){let n=K(t),r=q(t);G.set(e,{over:n,out:r}),e.addEventListener(`mouseover`,n,{passive:!0}),e.addEventListener(`mouseout`,r,{passive:!0})}function Y(e){let t=G.get(e);t&&(e.removeEventListener(`mouseover`,t.over),e.removeEventListener(`mouseout`,t.out),G.delete(e))}function X(e,t){let n=e.getBoundingClientRect();return t===`top`?{left:`${n.left+n.width/2}px`,top:`${n.top-8}px`,transform:`translateX(-50%) translateY(-100%)`}:t===`bottom`?{left:`${n.left+n.width/2}px`,top:`${n.bottom+8}px`,transform:`translateX(-50%)`}:t===`left`?{left:`${n.left-8}px`,top:`${n.top+n.height/2}px`,transform:`translateX(-100%) translateY(-50%)`}:{left:`${n.right+8}px`,top:`${n.top+n.height/2}px`,transform:`translateY(-50%)`}}var Z=n=>{let r=S();n=C({position:`top`,color:`neutral`},n);let[a,s]=x(!1),l=e=>{let t=n.position??`top`,i=()=>U(X(e,t));e.setAttribute(`tt`,r);let a={cancelled:!1,doCleanup:void 0};queueMicrotask(()=>{if(a.cancelled)return;let t=document.getElementById(n.containerId);if(!t)return;let o=W.get(t);o||(o={count:0,entries:new Map},W.set(t,o)),o.entries.set(r,{setHovered:s,updateCoords:i}),o.count+=1,o.count===1&&J(t,o),a.doCleanup=()=>{let n=W.get(t);n&&(n.entries.delete(r),--n.count,e.removeAttribute(`tt`),n.count===0&&(Y(t),W.delete(t)))}}),w(function(){a.cancelled=!0,a.doCleanup?.()})};return(()=>{var r=O();return g(l,r),m(r,f({get class(){return e(`too01`,k({color:n.color,position:n.position}),t(n.color),`too04`,n.class?.root)}},()=>n.content&&!n.customContent&&{"data-tip":n.content}),!1,!0),u(r,c(b,{get children(){return[c(v,{get when(){return n.content},get children(){return c(o,{get type(){return i.TOOLTIP},get open(){return a()},get position(){return H()},get class(){return e(`too05`,t(n.color),n.class?.content)},blockScroll:!1,get customValue(){return n.zIndex},get children(){return n.content}})}}),c(v,{get when(){return n.customContent},get children(){return c(o,{get type(){return i.TOOLTIP},get open(){return a()},get position(){return H()},get class(){return e(`too05`,n.class?.content)},get customValue(){return n.zIndex},get children(){return n.customContent}})}})]}}),null),u(r,()=>n.children,null),r})()};export{B as Tooltip};
|
|
2
|
+
//# sourceMappingURL=tooltip.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tooltip.js","names":["cn","getColor","acquire","OFFSET","release","ZIndex","ZIndexType","cva","VariantProps","Component","createSignal","createUniqueId","JSX","Match","mergeProps","onCleanup","onMount","Show","Switch","TooltipPortalProps","TooltipProps","tooltipVariants","variants","color","neutral","primary","secondary","accent","info","success","warning","error","position","top","bottom","right","left","TooltipVariantsProps","ActiveEntry","node","HTMLDivElement","registryKey","offset","bubbleHovered","activeMap","Map","customContentRegistry","Element","refCount","observer","IntersectionObserver","calcStyle","r","DOMRect","Record","OFFSET_PX","width","transform","height","showTooltip","id","triggerEl","HTMLElement","content","customContent","colorClass","extraClass","customZIndex","has","getBoundingClientRect","style","document","createElement","className","Object","assign","pointerEvents","zIndexOffset","zIndex","undefined","acquired","TOOLTIP","String","textContent","appendChild","cloneNode","entry","set","addEventListener","onBubbleEnter","onBubbleLeave","removeTooltipIfIdle","body","sentinelActiveSet","Set","get","remove","delete","removeTooltip","getOrCreateObserver","entries","el","target","dataset","tip","pos","Number","isIntersecting","add","closest","threshold","Tooltip","p","_$createComponent","when","hidden","fallback","_$memo","children","TooltipDefaultMain","type","TooltipPortalMain","const","sentinelRef","customContentRef","class","firstElementChild","observe","cleanupTooltipRegistration","unobserve","disconnect","_el$","_tmpl$","_el$2","firstChild","_$use","tt","_ref$","_$insert","_c$","_el$3","_tmpl$2","_ref$2","_$effect","_p$","_v$","root","_v$2","e","_$className","t","_$setAttribute","portalBubbleStyle","setPortalBubbleStyle","CSSProperties","TooltipEntry","setHovered","v","updateCoords","ContainerState","count","containerMap","WeakMap","ListenerPair","over","Event","out","listenerMap","makeMouseOver","state","getAttribute","makeMouseOut","related","MouseEvent","relatedTarget","contains","attachToContainer","passive","detachFromContainer","pair","removeEventListener","calcPortalStyle","isHovered","setIsHovered","onTriggerMount","setAttribute","handle","cancelled","doCleanup","register","getElementById","containerId","s","removeAttribute","queueMicrotask","cancelAndDetachTrigger","_el$4","_tmpl$3","_$spread","_$mergeProps","open","blockScroll","customValue"],"sources":["../../../src/components/tooltip/tooltip.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport { getColor } from '@/utils/helper';\r\nimport { acquire, OFFSET, release, ZIndex, ZIndexType } from '@components/z-index';\r\nimport { cva, VariantProps } from 'class-variance-authority';\r\nimport {\r\n Component,\r\n createSignal,\r\n createUniqueId,\r\n JSX,\r\n Match,\r\n mergeProps,\r\n onCleanup,\r\n onMount,\r\n Show,\r\n Switch,\r\n} from 'solid-js';\r\nimport type { TooltipPortalProps, TooltipProps } from './tooltip.types';\r\n\r\n// ─── CVA variants (dùng cho TooltipPortal) ────────────────────────────────\r\n\r\nconst tooltipVariants = cva('', {\r\n variants: {\r\n color: {\r\n neutral: 'tooltip-neutral',\r\n primary: 'tooltip-primary',\r\n secondary: 'tooltip-secondary',\r\n accent: 'tooltip-accent',\r\n info: 'tooltip-info',\r\n success: 'tooltip-success',\r\n warning: 'tooltip-warning',\r\n error: 'tooltip-error',\r\n },\r\n position: {\r\n top: 'tooltip-top',\r\n bottom: 'tooltip-bottom',\r\n right: 'tooltip-right',\r\n left: 'tooltip-left',\r\n },\r\n },\r\n});\r\nexport type TooltipVariantsProps = VariantProps<typeof tooltipVariants>;\r\n\r\n// ═══════════════════════════════════════════════════════════════════════════\r\n// TOOLTIP — IO-based (không bị clip bởi overflow)\r\n// ═══════════════════════════════════════════════════════════════════════════\r\n\r\n// --- Global scope (IO mechanism) ---\r\ntype ActiveEntry = {\r\n node: HTMLDivElement;\r\n registryKey: string;\r\n offset: number;\r\n /** true khi chuột đang ở trên bubble — giữ tooltip không bị remove */\r\n bubbleHovered: boolean;\r\n /** position của trigger để tính bridge */\r\n position: 'top' | 'bottom' | 'left' | 'right';\r\n};\r\n\r\nconst activeMap = new Map<string, ActiveEntry>();\r\n\r\n/** Registry cho customContent: id → rendered DOM node */\r\nconst customContentRegistry = new Map<string, Element>();\r\n\r\nlet refCount = 0;\r\nlet observer: IntersectionObserver | null = null;\r\n\r\nfunction calcStyle(\r\n r: DOMRect,\r\n position: 'top' | 'bottom' | 'left' | 'right',\r\n): Record<string, string> {\r\n const OFFSET_PX = 8;\r\n if (position === 'top') {\r\n return {\r\n left: `${r.left + r.width / 2}px`,\r\n top: `${r.top - OFFSET_PX}px`,\r\n transform: 'translateX(-50%) translateY(-100%)',\r\n };\r\n } else if (position === 'bottom') {\r\n return {\r\n left: `${r.left + r.width / 2}px`,\r\n top: `${r.bottom + OFFSET_PX}px`,\r\n transform: 'translateX(-50%)',\r\n };\r\n } else if (position === 'left') {\r\n return {\r\n left: `${r.left - OFFSET_PX}px`,\r\n top: `${r.top + r.height / 2}px`,\r\n transform: 'translateX(-100%) translateY(-50%)',\r\n };\r\n } else {\r\n return {\r\n left: `${r.right + OFFSET_PX}px`,\r\n top: `${r.top + r.height / 2}px`,\r\n transform: 'translateY(-50%)',\r\n };\r\n }\r\n}\r\n\r\nfunction showTooltip(\r\n id: string,\r\n triggerEl: HTMLElement,\r\n content: string | undefined,\r\n customContent: Element | undefined,\r\n position: 'top' | 'bottom' | 'left' | 'right',\r\n colorClass: string,\r\n extraClass: string | undefined,\r\n customZIndex: number | undefined,\r\n) {\r\n if (activeMap.has(id)) return;\r\n\r\n const r = triggerEl.getBoundingClientRect();\r\n const style = calcStyle(r, position);\r\n\r\n const node = document.createElement('div');\r\n node.className = cn('too06', colorClass, extraClass);\r\n\r\n Object.assign(node.style, { position: 'fixed', pointerEvents: 'auto' }, style);\r\n\r\n let registryKey: string;\r\n let zIndexOffset: number;\r\n let zIndex: number;\r\n\r\n if (customZIndex !== undefined) {\r\n zIndex = customZIndex;\r\n registryKey = '';\r\n zIndexOffset = -1;\r\n } else {\r\n const acquired = acquire(ZIndexType.TOOLTIP, OFFSET[ZIndexType.TOOLTIP]);\r\n zIndex = acquired.zIndex;\r\n registryKey = acquired.registryKey;\r\n zIndexOffset = acquired.offset;\r\n }\r\n\r\n node.style.zIndex = String(zIndex);\r\n\r\n if (content) {\r\n node.textContent = content;\r\n } else if (customContent) {\r\n node.appendChild(customContent.cloneNode(true));\r\n }\r\n\r\n const entry: ActiveEntry = { node, registryKey, offset: zIndexOffset, bubbleHovered: false, position };\r\n activeMap.set(id, entry);\r\n\r\n node.addEventListener('mouseenter', function onBubbleEnter() {\r\n entry.bubbleHovered = true;\r\n });\r\n node.addEventListener('mouseleave', function onBubbleLeave() {\r\n entry.bubbleHovered = false;\r\n // Nếu sentinel đã không còn visible (chuột đã rời trigger), xóa tooltip\r\n removeTooltipIfIdle(id);\r\n });\r\n\r\n document.body.appendChild(node);\r\n}\r\n\r\n/** sentinelActive = true khi IO đang thấy sentinel (chuột trên trigger/bridge) */\r\nconst sentinelActiveSet = new Set<string>();\r\n\r\nfunction removeTooltipIfIdle(id: string) {\r\n const entry = activeMap.get(id);\r\n if (!entry) return;\r\n // Chỉ remove nếu cả sentinel lẫn bubble đều không có hover\r\n if (sentinelActiveSet.has(id) || entry.bubbleHovered) return;\r\n entry.node.remove();\r\n if (entry.offset >= 0) {\r\n release(entry.registryKey, entry.offset);\r\n }\r\n activeMap.delete(id);\r\n}\r\n\r\nfunction removeTooltip(id: string) {\r\n sentinelActiveSet.delete(id);\r\n removeTooltipIfIdle(id);\r\n}\r\n\r\n/**\r\n * Trick kết hợp CSS: sentinel element 1×1px ẩn bên trong wrapper.\r\n * Khi `:hover` CSS làm sentinel hiển thị (`display: block`), IntersectionObserver\r\n * phát hiện nó intersect viewport và gọi `showTooltip()`.\r\n * Không dùng JS event listener trên trigger — zero overhead.\r\n */\r\nfunction getOrCreateObserver(): IntersectionObserver {\r\n if (!observer) {\r\n observer = new IntersectionObserver(\r\n entries => {\r\n for (const entry of entries) {\r\n const el = entry.target as HTMLElement;\r\n const id = el.dataset.id ?? '';\r\n const content = el.dataset.tip;\r\n const pos = (el.dataset.position ?? 'top') as 'top' | 'bottom' | 'left' | 'right';\r\n const colorClass = el.dataset.colorClass ?? '';\r\n const extraClass = el.dataset.extraClass;\r\n const customZIndex = el.dataset.customZIndex\r\n ? Number(el.dataset.customZIndex)\r\n : undefined;\r\n\r\n if (entry.isIntersecting) {\r\n sentinelActiveSet.add(id);\r\n const triggerEl = el.closest('[data-tt]') as HTMLElement | null;\r\n if (!triggerEl) continue;\r\n const customContent = customContentRegistry.get(id);\r\n showTooltip(\r\n id,\r\n triggerEl,\r\n content,\r\n customContent,\r\n pos,\r\n colorClass,\r\n extraClass,\r\n customZIndex,\r\n );\r\n } else {\r\n removeTooltip(id);\r\n }\r\n }\r\n },\r\n { threshold: 0 },\r\n );\r\n }\r\n return observer;\r\n}\r\n\r\n// ─── Tooltip — unified entry point ──────────────────────────────────────────\r\n\r\nexport const Tooltip: Component<TooltipProps> = p => {\r\n return (\r\n <Show when={!p.hidden} fallback={<>{p.children}</>}>\r\n <Switch fallback={<TooltipDefaultMain {...p} />}>\r\n <Match when={p.type === 'portal' || 'containerId' in p}>\r\n <TooltipPortalMain {...(p as TooltipPortalProps)} />\r\n </Match>\r\n </Switch>\r\n </Show>\r\n );\r\n};\r\n\r\n// ─── Default (IO-based) impl ─────────────────────────────────────────────────\r\n\r\nconst TooltipDefaultMain: Component<TooltipProps> = p => {\r\n p = mergeProps(\r\n {\r\n position: 'top' as const,\r\n color: 'neutral' as const,\r\n },\r\n p,\r\n );\r\n const id = createUniqueId();\r\n let sentinelRef!: HTMLDivElement;\r\n let customContentRef!: HTMLDivElement;\r\n\r\n onMount(() => {\r\n refCount++;\r\n sentinelRef.dataset.id = id;\r\n sentinelRef.dataset.tip = p.content ?? '';\r\n sentinelRef.dataset.position = p.position;\r\n sentinelRef.dataset.colorClass = getColor(p.color);\r\n if (p.class?.content) sentinelRef.dataset.extraClass = p.class.content;\r\n if (p.zIndex !== undefined) sentinelRef.dataset.customZIndex = String(p.zIndex);\r\n if (p.customContent && customContentRef?.firstElementChild) {\r\n customContentRegistry.set(id, customContentRef.firstElementChild);\r\n }\r\n getOrCreateObserver().observe(sentinelRef);\r\n });\r\n\r\n onCleanup(function cleanupTooltipRegistration() {\r\n observer?.unobserve(sentinelRef);\r\n removeTooltip(id);\r\n customContentRegistry.delete(id);\r\n refCount--;\r\n if (refCount === 0 && observer) {\r\n observer.disconnect();\r\n observer = null;\r\n }\r\n });\r\n\r\n return (\r\n <div\r\n ref={el => (el.dataset.tt = '')}\r\n class={cn('too07', p.class?.root)}\r\n data-pos={p.position ?? 'top'}\r\n >\r\n <div ref={sentinelRef} class=\"too08\" />\r\n {p.children as JSX.Element}\r\n {p.customContent && (\r\n <div ref={customContentRef} class=\"hidden\">\r\n {p.customContent}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\n// ═══════════════════════════════════════════════════════════════════════════\r\n// TOOLTIP PORTAL — Event-delegation mode\r\n// ═══════════════════════════════════════════════════════════════════════════\r\n\r\n/**\r\n * SINGLETON PORTAL BUBBLE — Thiết kế có chủ đích.\r\n * Signal ở module scope vì toàn bộ hệ thống tooltip portal chỉ có\r\n * DUY NHẤT 1 bubble tồn tại trong DOM tại bất kỳ thời điểm nào.\r\n */\r\nconst [portalBubbleStyle, setPortalBubbleStyle] = createSignal<\r\n import('solid-js').JSX.CSSProperties\r\n>({});\r\n\r\ntype TooltipEntry = {\r\n setHovered: (v: boolean) => void;\r\n updateCoords: () => void;\r\n};\r\n\r\ntype ContainerState = {\r\n count: number;\r\n entries: Map<string, TooltipEntry>;\r\n};\r\n\r\nconst containerMap = new WeakMap<Element, ContainerState>();\r\n\r\ntype ListenerPair = { over: (e: Event) => void; out: (e: Event) => void };\r\nconst listenerMap = new WeakMap<Element, ListenerPair>();\r\n\r\nfunction makeMouseOver(state: ContainerState) {\r\n return (e: Event) => {\r\n const el = (e.target as Element).closest('[tt]');\r\n if (!el) return;\r\n const tt = el.getAttribute('tt')!;\r\n const entry = state.entries.get(tt);\r\n if (entry) {\r\n entry.updateCoords();\r\n entry.setHovered(true);\r\n }\r\n };\r\n}\r\n\r\nfunction makeMouseOut(state: ContainerState) {\r\n return (e: Event) => {\r\n const el = (e.target as Element).closest('[tt]');\r\n if (!el) return;\r\n const tt = el.getAttribute('tt')!;\r\n const related = (e as MouseEvent).relatedTarget as Element | null;\r\n if (related && el.contains(related)) return;\r\n const entry = state.entries.get(tt);\r\n if (entry) entry.setHovered(false);\r\n };\r\n}\r\n\r\nfunction attachToContainer(root: Element, state: ContainerState) {\r\n const over = makeMouseOver(state);\r\n const out = makeMouseOut(state);\r\n listenerMap.set(root, { over, out });\r\n root.addEventListener('mouseover', over, { passive: true });\r\n root.addEventListener('mouseout', out, { passive: true });\r\n}\r\n\r\nfunction detachFromContainer(root: Element) {\r\n const pair = listenerMap.get(root);\r\n if (!pair) return;\r\n root.removeEventListener('mouseover', pair.over);\r\n root.removeEventListener('mouseout', pair.out);\r\n listenerMap.delete(root);\r\n}\r\n\r\nfunction calcPortalStyle(\r\n el: HTMLElement,\r\n position: 'top' | 'bottom' | 'left' | 'right',\r\n): import('solid-js').JSX.CSSProperties {\r\n const r = el.getBoundingClientRect();\r\n const OFFSET_PX = 8;\r\n\r\n if (position === 'top') {\r\n return {\r\n left: `${r.left + r.width / 2}px`,\r\n top: `${r.top - OFFSET_PX}px`,\r\n transform: 'translateX(-50%) translateY(-100%)',\r\n };\r\n } else if (position === 'bottom') {\r\n return {\r\n left: `${r.left + r.width / 2}px`,\r\n top: `${r.bottom + OFFSET_PX}px`,\r\n transform: 'translateX(-50%)',\r\n };\r\n } else if (position === 'left') {\r\n return {\r\n left: `${r.left - OFFSET_PX}px`,\r\n top: `${r.top + r.height / 2}px`,\r\n transform: 'translateX(-100%) translateY(-50%)',\r\n };\r\n } else {\r\n return {\r\n left: `${r.right + OFFSET_PX}px`,\r\n top: `${r.top + r.height / 2}px`,\r\n transform: 'translateY(-50%)',\r\n };\r\n }\r\n}\r\n\r\nconst TooltipPortalMain: Component<TooltipPortalProps> = p => {\r\n const id = createUniqueId();\r\n p = mergeProps(\r\n {\r\n position: 'top' as const,\r\n color: 'neutral' as const,\r\n },\r\n p,\r\n );\r\n\r\n const [isHovered, setIsHovered] = createSignal(false);\r\n\r\n const onTriggerMount = (el: HTMLDivElement) => {\r\n const position = p.position ?? 'top';\r\n const updateCoords = () => setPortalBubbleStyle(calcPortalStyle(el, position));\r\n el.setAttribute('tt', id);\r\n\r\n const handle = { cancelled: false, doCleanup: undefined as (() => void) | undefined };\r\n\r\n const register = () => {\r\n if (handle.cancelled) return;\r\n\r\n const root = document.getElementById(p.containerId);\r\n if (!root) return;\r\n\r\n let state = containerMap.get(root);\r\n if (!state) {\r\n state = { count: 0, entries: new Map() };\r\n containerMap.set(root, state);\r\n }\r\n state.entries.set(id, { setHovered: setIsHovered, updateCoords });\r\n state.count += 1;\r\n if (state.count === 1) attachToContainer(root, state);\r\n\r\n handle.doCleanup = () => {\r\n const s = containerMap.get(root);\r\n if (!s) return;\r\n s.entries.delete(id);\r\n s.count -= 1;\r\n el.removeAttribute('tt');\r\n if (s.count === 0) {\r\n detachFromContainer(root);\r\n containerMap.delete(root);\r\n }\r\n };\r\n };\r\n\r\n queueMicrotask(register);\r\n onCleanup(function cancelAndDetachTrigger() {\r\n handle.cancelled = true;\r\n handle.doCleanup?.();\r\n });\r\n };\r\n\r\n return (\r\n <div\r\n ref={onTriggerMount}\r\n class={cn(\r\n 'too01',\r\n tooltipVariants({ color: p.color, position: p.position }),\r\n getColor(p.color),\r\n 'too04',\r\n p.class?.root,\r\n )}\r\n {...(p.content && !p.customContent && { ['data-tip']: p.content })}\r\n >\r\n <Switch>\r\n <Match when={p.content}>\r\n <ZIndex\r\n type={ZIndexType.TOOLTIP}\r\n open={isHovered()}\r\n position={portalBubbleStyle()}\r\n class={cn('too05', getColor(p.color), p.class?.content)}\r\n blockScroll={false}\r\n customValue={p.zIndex}\r\n >\r\n {p.content}\r\n </ZIndex>\r\n </Match>\r\n <Match when={p.customContent}>\r\n <ZIndex\r\n type={ZIndexType.TOOLTIP}\r\n open={isHovered()}\r\n position={portalBubbleStyle()}\r\n class={cn('too05', p.class?.content)}\r\n customValue={p.zIndex}\r\n >\r\n {p.customContent}\r\n </ZIndex>\r\n </Match>\r\n </Switch>\r\n {p.children as JSX.Element}\r\n </div>\r\n );\r\n};\r\n"],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { BaseColorProps, SolidComponent } from '../../type';
|
|
2
|
+
import { JSX } from 'solid-js';
|
|
3
|
+
export type TooltipPosition = 'top' | 'bottom' | 'left' | 'right';
|
|
4
|
+
type TooltipSharedBase = {
|
|
5
|
+
hidden?: boolean;
|
|
6
|
+
position?: TooltipPosition;
|
|
7
|
+
color?: BaseColorProps;
|
|
8
|
+
zIndex?: number;
|
|
9
|
+
class?: {
|
|
10
|
+
root?: string;
|
|
11
|
+
content?: string;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
type WithContent = {
|
|
15
|
+
content: string;
|
|
16
|
+
customContent?: never;
|
|
17
|
+
};
|
|
18
|
+
type WithCustomContent = {
|
|
19
|
+
content?: never;
|
|
20
|
+
customContent: JSX.Element;
|
|
21
|
+
};
|
|
22
|
+
type TooltipDefaultBase = TooltipSharedBase & {
|
|
23
|
+
type?: 'default';
|
|
24
|
+
children: JSX.Element;
|
|
25
|
+
};
|
|
26
|
+
export type TooltipDefaultProps = TooltipDefaultBase & (WithContent | WithCustomContent);
|
|
27
|
+
type TooltipPortalBase = TooltipSharedBase & {
|
|
28
|
+
type?: 'portal';
|
|
29
|
+
children: SolidComponent;
|
|
30
|
+
/**
|
|
31
|
+
* `id` của element cha đang có overflow-hidden gây che khuất tooltip.
|
|
32
|
+
* Event listener sẽ được gán trên element đó thay vì document.
|
|
33
|
+
*/
|
|
34
|
+
containerId: string;
|
|
35
|
+
};
|
|
36
|
+
export type TooltipPortalProps = TooltipPortalBase & (WithContent | WithCustomContent);
|
|
37
|
+
export type TooltipProps = TooltipDefaultProps | TooltipPortalProps;
|
|
38
|
+
export {};
|
|
39
|
+
//# sourceMappingURL=tooltip.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tooltip.types.d.ts","sourceRoot":"","sources":["../../../src/components/tooltip/tooltip.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AACxD,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,MAAM,MAAM,eAAe,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;AAIlE,KAAK,iBAAiB,GAAG;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,eAAe,CAAC;IAC3B,KAAK,CAAC,EAAE,cAAc,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE;QACN,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;CACH,CAAC;AAEF,KAAK,WAAW,GAAG;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,KAAK,CAAC;CACvB,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,OAAO,CAAC,EAAE,KAAK,CAAC;IAChB,aAAa,EAAE,GAAG,CAAC,OAAO,CAAC;CAC5B,CAAC;AAIF,KAAK,kBAAkB,GAAG,iBAAiB,GAAG;IAC5C,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,kBAAkB,GAAG,CAAC,WAAW,GAAG,iBAAiB,CAAC,CAAC;AAIzF,KAAK,iBAAiB,GAAG,iBAAiB,GAAG;IAC3C,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,QAAQ,EAAE,cAAc,CAAC;IACzB;;;OAGG;IACH,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,iBAAiB,GAAG,CAAC,WAAW,GAAG,iBAAiB,CAAC,CAAC;AAIvF,MAAM,MAAM,YAAY,GAAG,mBAAmB,GAAG,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/tour/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tour.d.ts","sourceRoot":"","sources":["../../../src/components/tour/tour.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAiB,SAAS,EAAY,MAAM,cAAc,CAAC;AA+R3E,wBAAgB,UAAU,CAAC,SAAS,EAAE,SAAS,GAAG,CAAC,OAAO,EAAE,MAAM,OAAO,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC,CAyEhG"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import{cn as e}from"../../utils/cn.js";import{createThrottle 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{addEventListener as i,className as a,createComponent as o,delegateEvents as s,effect as c,insert as l,memo as u,mergeProps as d,setAttribute as f,style as p,template as m,use as h}from"solid-js/web";import{For as g,Show as _,createEffect as v,createSignal as y,mergeProps as b,onCleanup as x,onMount as S}from"solid-js";import C from"lucide-solid/icons/x";var w=m(`<div>`),T=m(`<button class=tr04-close aria-label="Close tour">`),E=m(`<button class="btn btn-sm btn-ghost">`),D=m(`<div><div class="ml-auto flex gap-2"><button class="btn btn-sm btn-primary">`),O=m(`<div><div><span class=tr04-title>`),k=m(`<span>`);function A(e,t){let n=document.getElementById(e);if(!n)return null;let r=n.getBoundingClientRect();return{top:r.top-t,left:r.left-t,width:r.width+t*2,height:r.height+t*2}}function j(e){let{top:t,left:n,width:r,height:i}=e,a=n+r,o=t+i;return`polygon(
|
|
2
|
+
0% 0%, 100% 0%, 100% 100%, 0% 100%, 0% 0%,
|
|
3
|
+
${n}px ${t}px,
|
|
4
|
+
${n}px ${o}px,
|
|
5
|
+
${a}px ${o}px,
|
|
6
|
+
${a}px ${t}px,
|
|
7
|
+
${n}px ${t}px
|
|
8
|
+
)`}var M=12,N=340;function P(e,t,n){let r=window.innerWidth,i=window.innerHeight,{top:a,left:o,width:s,height:c}=e,l=0,u=0,d=`50%`,f=o+s/2,p=a+c/2;switch(t){case`bottom`:case`bottom-start`:case`bottom-end`:l=a+c+M,u=t===`bottom-start`?o:t===`bottom-end`?o+s-N:f-N/2,d=`${f-Math.max(16,Math.min(u,u))}px`;break;case`top`:case`top-start`:case`top-end`:l=a-n-M,u=t===`top-start`?o:t===`top-end`?o+s-N:f-N/2,d=`${f-Math.max(16,Math.min(u,u))}px`;break;case`left`:case`left-start`:case`left-end`:l=t===`left-start`?a:t===`left-end`?a+c-n:p-n/2,u=o-N-M,d=`${p-l}px`;break;case`right`:case`right-start`:case`right-end`:l=t===`right-start`?a:t===`right-end`?a+c-n:p-n/2,u=o+s+M,d=`${p-l}px`;break}return u=Math.max(16,Math.min(u,r-N-16)),l=Math.max(16,Math.min(l,i-n-16)),{top:l,left:u,arrowOffset:d}}var F=s=>{let d=b({showClose:!0,showProgress:!0,maskClosable:!1,prevLabel:`Prev`,nextLabel:`Next`,doneLabel:`Done`},s),[m,M]=y({top:0,left:0,width:0,height:0}),[F,I]=y({top:0,left:0,arrowOffset:`50%`}),[L,R]=y(200),z,B=()=>d.steps[d.activeStep()],V=()=>d.activeStep()===d.steps.length-1;function H(){let e=B();if(!e)return;let t=e.spotlightPadding??8,n=e.placement??`bottom`,r=z?.offsetHeight??L(),i=A(e.target,t);i&&(M(i),I(P(i,n,r)))}let U=t(H,60);v(function(){if(!d.visible())return;d.activeStep();let e=B();e?.target&&document.getElementById(e.target)?.scrollIntoView({block:`nearest`,behavior:`smooth`});let t=setTimeout(()=>{t=void 0,z&&R(z.offsetHeight),H()},80);x(function(){t!==void 0&&(clearTimeout(t),t=void 0)})}),S(function(){window.addEventListener(`resize`,U),window.addEventListener(`scroll`,U,!0),x(function(){window.removeEventListener(`resize`,U),window.removeEventListener(`scroll`,U,!0),U.cancel()})});let W=()=>({"clip-path":j(m())}),G=()=>{let{top:e,left:t,arrowOffset:n}=F();return{top:`${e}px`,left:`${t}px`,width:`${N}px`,"--arrow-offset":n}},K=()=>{d.maskClosable&&d.onClose()};return o(r,{get type(){return n.OVERLAY},get open(){return d.visible()},blockScroll:!0,get children(){return[(()=>{var t=w();return t.$$click=K,c(()=>a(t,e(`tr01`,d.class?.mask))),t})(),(()=>{var t=w();return c(n=>{var r=e(`tr02`,d.class?.spotlight),i=W();return r!==n.e&&a(t,n.e=r),n.t=p(t,i,n.t),n},{e:void 0,t:void 0}),t})(),(()=>{var t=O(),n=t.firstChild,r=n.firstChild,s=z;return typeof s==`function`?h(s,t):z=t,l(r,()=>B()?.title),l(n,o(_,{get when(){return d.showClose},get children(){var e=T();return i(e,`click`,d.onClose,!0),l(e,o(C,{size:14})),e}}),null),l(t,o(_,{get when(){return B()?.content},get children(){var t=w();return l(t,()=>B()?.content),c(()=>a(t,e(`tr05`,d.class?.body))),t}}),null),l(t,o(_,{get when(){return!B()?.footer},get fallback(){return(()=>{var t=w();return l(t,()=>B()?.footer),c(()=>a(t,e(`tr06`,d.class?.footer))),t})()},get children(){var t=D(),n=t.firstChild,r=n.firstChild;return l(t,o(_,{get when(){return d.showProgress},get children(){var t=w();return l(t,o(g,{get each(){return d.steps},children:(t,n)=>(()=>{var t=k();return c(()=>a(t,e(`tr07-dot`,n()===d.activeStep()&&`active`))),t})()})),c(()=>a(t,e(`tr07`,d.class?.progress))),t}}),n),l(n,o(_,{get when(){return d.activeStep()>0},get children(){var e=E();return i(e,`click`,d.onPrev,!0),l(e,()=>d.prevLabel),e}}),r),i(r,`click`,V()?d.onClose:d.onNext,!0),l(r,(()=>{var e=u(()=>!!V());return()=>e()?d.doneLabel:d.nextLabel})()),c(()=>a(t,e(`tr06`,d.class?.footer))),t}}),null),c(r=>{var i=e(`tr03`,d.class?.popup),o=G(),s=B()?.placement??`bottom`,c=e(`tr04`,d.class?.header);return i!==r.e&&a(t,r.e=i),r.t=p(t,o,r.t),s!==r.a&&f(t,`data-placement`,r.a=s),c!==r.o&&a(n,r.o=c),r},{e:void 0,t:void 0,a:void 0,o:void 0}),t})()]}})};function I(e){let[t,n]=y(0),[r,i]=y(!1);function a(t=0){n(t),i(!0),e.steps[t]?.onEnter?.(t),e.onStepChange?.(t)}function s(){let n=t();e.steps[n]?.onLeave?.(n),i(!1),e.onClose?.(n)}function c(){let r=t();e.steps[r]?.onLeave?.(r);let a=r+1;if(a>=e.steps.length){i(!1),e.onFinish?.();return}n(a),e.steps[a]?.onEnter?.(a),e.onStepChange?.(a)}function l(){let r=t();if(r<=0)return;e.steps[r]?.onLeave?.(r);let i=r-1;n(i),e.steps[i]?.onEnter?.(i),e.onStepChange?.(i)}function u(r){if(r<0||r>=e.steps.length)return;let i=t();e.steps[i]?.onLeave?.(i),n(r),e.steps[r]?.onEnter?.(r),e.onStepChange?.(r)}return[{start:a,stop:s,next:c,prev:l,goTo:u,isActive:r,currentStep:t},()=>o(F,d(e,{activeStep:t,visible:r,onClose:s,onNext:c,onPrev:l}))]}s([`click`]);export{I as createTour};
|
|
9
|
+
//# sourceMappingURL=tour.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tour.js","names":["ZIndex","ZIndexType","cn","createThrottle","X","createEffect","createSignal","For","mergeProps","onCleanup","onMount","Show","TourAPI","TourPlacement","TourProps","TourStep","SpotlightRect","top","left","width","height","getElementRect","targetId","padding","el","document","getElementById","rect","getBoundingClientRect","buildClipPath","right","bottom","PopupPosition","arrowOffset","POPUP_MARGIN","POPUP_WIDTH","computePopupPosition","spotRect","placement","popupHeight","vw","window","innerWidth","vh","innerHeight","pTop","pLeft","centerX","centerY","Math","max","min","InternalTourProps","activeStep","visible","onClose","onNext","onPrev","TourComponent","rawProps","props","showClose","showProgress","maskClosable","prevLabel","nextLabel","doneLabel","setSpotRect","popupPos","setPopupPos","setPopupHeight","popupRef","HTMLDivElement","currentStep","steps","isLastStep","length","recalculate","step","spotlightPadding","ph","offsetHeight","target","throttledRecalc","trackStepChange","_step","scrollIntoView","block","behavior","timer","ReturnType","setTimeout","undefined","cancelStepTimer","clearTimeout","registerResizeListener","addEventListener","removeResizeListener","removeEventListener","cancel","maskStyle","popupStyle","handleMaskClick","_$createComponent","type","OVERLAY","open","blockScroll","children","_el$","_tmpl$","$$click","_$effect","_$className","class","mask","_el$2","_p$","_v$","spotlight","_v$2","e","t","_$style","_el$3","_tmpl$5","_el$4","firstChild","_el$5","_ref$","_$use","_$insert","title","when","_el$6","_tmpl$2","_$addEventListener","size","content","_el$7","body","footer","fallback","_el$11","_el$8","_tmpl$4","_el$0","_el$10","_el$9","each","_","i","_el$12","_tmpl$6","progress","_el$1","_tmpl$3","_c$","_$memo","_v$3","popup","_v$4","_v$5","_v$6","header","a","_$setAttribute","o","createTour","tourProps","JSX","Element","setActiveStep","setVisible","start","stepIndex","onEnter","onStepChange","stop","onLeave","next","cur","nextStep","onFinish","prev","prevStep","goTo","api","isActive","TourRenderer","_$mergeProps","_$delegateEvents"],"sources":["../../../src/components/tour/tour.tsx"],"sourcesContent":["import { ZIndex, ZIndexType } from '@components/z-index';\r\nimport { cn } from '@utils/cn';\r\nimport { createThrottle } from '@utils/helper';\r\nimport X from 'lucide-solid/icons/x';\r\nimport { createEffect, createSignal, For, mergeProps, onCleanup, onMount, Show } from 'solid-js';\r\nimport { TourAPI, TourPlacement, TourProps, TourStep } from './tour.types';\r\n\r\ninterface SpotlightRect {\r\n top: number;\r\n left: number;\r\n width: number;\r\n height: number;\r\n}\r\n\r\nfunction getElementRect(targetId: string, padding: number): SpotlightRect | null {\r\n const el = document.getElementById(targetId);\r\n if (!el) return null;\r\n const rect = el.getBoundingClientRect();\r\n return {\r\n top: rect.top - padding,\r\n left: rect.left - padding,\r\n width: rect.width + padding * 2,\r\n height: rect.height + padding * 2,\r\n };\r\n}\r\n\r\nfunction buildClipPath(rect: SpotlightRect): string {\r\n const { top, left, width, height } = rect;\r\n const right = left + width;\r\n const bottom = top + height;\r\n\r\n return `polygon(\r\n 0% 0%, 100% 0%, 100% 100%, 0% 100%, 0% 0%,\r\n ${left}px ${top}px,\r\n ${left}px ${bottom}px,\r\n ${right}px ${bottom}px,\r\n ${right}px ${top}px,\r\n ${left}px ${top}px\r\n )`;\r\n}\r\n\r\ninterface PopupPosition {\r\n top: number;\r\n left: number;\r\n arrowOffset: string;\r\n}\r\n\r\nconst POPUP_MARGIN = 12;\r\nconst POPUP_WIDTH = 340;\r\n\r\nfunction computePopupPosition(\r\n spotRect: SpotlightRect,\r\n placement: TourPlacement,\r\n popupHeight: number,\r\n): PopupPosition {\r\n const vw = window.innerWidth;\r\n const vh = window.innerHeight;\r\n\r\n const { top, left, width, height } = spotRect;\r\n let pTop = 0;\r\n let pLeft = 0;\r\n let arrowOffset = '50%';\r\n\r\n const centerX = left + width / 2;\r\n const centerY = top + height / 2;\r\n\r\n switch (placement) {\r\n case 'bottom':\r\n case 'bottom-start':\r\n case 'bottom-end':\r\n pTop = top + height + POPUP_MARGIN;\r\n pLeft =\r\n placement === 'bottom-start'\r\n ? left\r\n : placement === 'bottom-end'\r\n ? left + width - POPUP_WIDTH\r\n : centerX - POPUP_WIDTH / 2;\r\n arrowOffset = `${centerX - Math.max(16, Math.min(pLeft, pLeft))}px`;\r\n break;\r\n\r\n case 'top':\r\n case 'top-start':\r\n case 'top-end':\r\n pTop = top - popupHeight - POPUP_MARGIN;\r\n pLeft =\r\n placement === 'top-start'\r\n ? left\r\n : placement === 'top-end'\r\n ? left + width - POPUP_WIDTH\r\n : centerX - POPUP_WIDTH / 2;\r\n arrowOffset = `${centerX - Math.max(16, Math.min(pLeft, pLeft))}px`;\r\n break;\r\n\r\n case 'left':\r\n case 'left-start':\r\n case 'left-end':\r\n pTop =\r\n placement === 'left-start'\r\n ? top\r\n : placement === 'left-end'\r\n ? top + height - popupHeight\r\n : centerY - popupHeight / 2;\r\n pLeft = left - POPUP_WIDTH - POPUP_MARGIN;\r\n arrowOffset = `${centerY - pTop}px`;\r\n break;\r\n\r\n case 'right':\r\n case 'right-start':\r\n case 'right-end':\r\n pTop =\r\n placement === 'right-start'\r\n ? top\r\n : placement === 'right-end'\r\n ? top + height - popupHeight\r\n : centerY - popupHeight / 2;\r\n pLeft = left + width + POPUP_MARGIN;\r\n arrowOffset = `${centerY - pTop}px`;\r\n break;\r\n }\r\n\r\n pLeft = Math.max(16, Math.min(pLeft, vw - POPUP_WIDTH - 16));\r\n pTop = Math.max(16, Math.min(pTop, vh - popupHeight - 16));\r\n\r\n return { top: pTop, left: pLeft, arrowOffset };\r\n}\r\n\r\ninterface InternalTourProps extends TourProps {\r\n activeStep: () => number;\r\n visible: () => boolean;\r\n onClose: () => void;\r\n onNext: () => void;\r\n onPrev: () => void;\r\n}\r\n\r\nconst TourComponent = (rawProps: InternalTourProps) => {\r\n const props = mergeProps(\r\n {\r\n showClose: true,\r\n showProgress: true,\r\n maskClosable: false,\r\n prevLabel: 'Prev',\r\n nextLabel: 'Next',\r\n doneLabel: 'Done',\r\n },\r\n rawProps,\r\n );\r\n\r\n const [spotRect, setSpotRect] = createSignal<SpotlightRect>({\r\n top: 0,\r\n left: 0,\r\n width: 0,\r\n height: 0,\r\n });\r\n const [popupPos, setPopupPos] = createSignal<PopupPosition>({\r\n top: 0,\r\n left: 0,\r\n arrowOffset: '50%',\r\n });\r\n const [popupHeight, setPopupHeight] = createSignal(200);\r\n\r\n let popupRef: HTMLDivElement | undefined;\r\n\r\n const currentStep = (): TourStep | undefined => props.steps[props.activeStep()];\r\n const isLastStep = () => props.activeStep() === props.steps.length - 1;\r\n\r\n function recalculate() {\r\n const step = currentStep();\r\n if (!step) return;\r\n\r\n const padding = step.spotlightPadding ?? 8;\r\n const placement = step.placement ?? 'bottom';\r\n const ph = popupRef?.offsetHeight ?? popupHeight();\r\n\r\n const rect = getElementRect(step.target, padding);\r\n if (!rect) return;\r\n setSpotRect(rect);\r\n setPopupPos(computePopupPosition(rect, placement, ph));\r\n }\r\n\r\n const throttledRecalc = createThrottle(recalculate, 60);\r\n\r\n createEffect(function trackStepChange() {\r\n if (!props.visible()) return;\r\n\r\n const _step = props.activeStep();\r\n void _step;\r\n\r\n const step = currentStep();\r\n if (step?.target) {\r\n const el = document.getElementById(step.target);\r\n el?.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\r\n }\r\n\r\n let timer: ReturnType<typeof setTimeout> | undefined = setTimeout(() => {\r\n timer = undefined;\r\n if (popupRef) setPopupHeight(popupRef.offsetHeight);\r\n recalculate();\r\n }, 80);\r\n onCleanup(function cancelStepTimer() {\r\n if (timer !== undefined) {\r\n clearTimeout(timer);\r\n timer = undefined;\r\n }\r\n });\r\n });\r\n\r\n onMount(function registerResizeListener() {\r\n window.addEventListener('resize', throttledRecalc);\r\n window.addEventListener('scroll', throttledRecalc, true);\r\n onCleanup(function removeResizeListener() {\r\n window.removeEventListener('resize', throttledRecalc);\r\n window.removeEventListener('scroll', throttledRecalc, true);\r\n throttledRecalc.cancel();\r\n });\r\n });\r\n\r\n const maskStyle = () => ({ 'clip-path': buildClipPath(spotRect()) });\r\n\r\n const popupStyle = () => {\r\n const { top, left, arrowOffset } = popupPos();\r\n return {\r\n top: `${top}px`,\r\n left: `${left}px`,\r\n width: `${POPUP_WIDTH}px`,\r\n '--arrow-offset': arrowOffset,\r\n };\r\n };\r\n\r\n const handleMaskClick = () => {\r\n if (props.maskClosable) props.onClose();\r\n };\r\n\r\n return (\r\n <ZIndex type={ZIndexType.OVERLAY} open={props.visible()} blockScroll>\r\n <div class={cn('tr01', props.class?.mask)} onClick={handleMaskClick} />\r\n\r\n <div class={cn('tr02', props.class?.spotlight)} style={maskStyle()} />\r\n\r\n <div\r\n ref={popupRef}\r\n class={cn('tr03', props.class?.popup)}\r\n style={popupStyle()}\r\n data-placement={currentStep()?.placement ?? 'bottom'}\r\n >\r\n <div class={cn('tr04', props.class?.header)}>\r\n <span class=\"tr04-title\">{currentStep()?.title}</span>\r\n <Show when={props.showClose}>\r\n <button class=\"tr04-close\" onClick={props.onClose} aria-label=\"Close tour\">\r\n <X size={14} />\r\n </button>\r\n </Show>\r\n </div>\r\n\r\n <Show when={currentStep()?.content}>\r\n <div class={cn('tr05', props.class?.body)}>{currentStep()?.content}</div>\r\n </Show>\r\n\r\n <Show\r\n when={!currentStep()?.footer}\r\n fallback={<div class={cn('tr06', props.class?.footer)}>{currentStep()?.footer}</div>}\r\n >\r\n <div class={cn('tr06', props.class?.footer)}>\r\n <Show when={props.showProgress}>\r\n <div class={cn('tr07', props.class?.progress)}>\r\n <For each={props.steps}>\r\n {(_, i) => (\r\n <span class={cn('tr07-dot', i() === props.activeStep() && 'active')} />\r\n )}\r\n </For>\r\n </div>\r\n </Show>\r\n\r\n <div class=\"ml-auto flex gap-2\">\r\n <Show when={props.activeStep() > 0}>\r\n <button class=\"btn btn-sm btn-ghost\" onClick={props.onPrev}>\r\n {props.prevLabel}\r\n </button>\r\n </Show>\r\n <button\r\n class=\"btn btn-sm btn-primary\"\r\n onClick={isLastStep() ? props.onClose : props.onNext}\r\n >\r\n {isLastStep() ? props.doneLabel : props.nextLabel}\r\n </button>\r\n </div>\r\n </div>\r\n </Show>\r\n </div>\r\n </ZIndex>\r\n );\r\n};\r\n\r\nexport function createTour(tourProps: TourProps): [TourAPI, () => import('solid-js').JSX.Element] {\r\n const [activeStep, setActiveStep] = createSignal(0);\r\n const [visible, setVisible] = createSignal(false);\r\n\r\n function start(stepIndex = 0) {\r\n setActiveStep(stepIndex);\r\n setVisible(true);\r\n tourProps.steps[stepIndex]?.onEnter?.(stepIndex);\r\n tourProps.onStepChange?.(stepIndex);\r\n }\r\n\r\n function stop() {\r\n const step = activeStep();\r\n tourProps.steps[step]?.onLeave?.(step);\r\n setVisible(false);\r\n tourProps.onClose?.(step);\r\n }\r\n\r\n function next() {\r\n const cur = activeStep();\r\n tourProps.steps[cur]?.onLeave?.(cur);\r\n const nextStep = cur + 1;\r\n if (nextStep >= tourProps.steps.length) {\r\n setVisible(false);\r\n tourProps.onFinish?.();\r\n return;\r\n }\r\n setActiveStep(nextStep);\r\n tourProps.steps[nextStep]?.onEnter?.(nextStep);\r\n tourProps.onStepChange?.(nextStep);\r\n }\r\n\r\n function prev() {\r\n const cur = activeStep();\r\n if (cur <= 0) return;\r\n tourProps.steps[cur]?.onLeave?.(cur);\r\n const prevStep = cur - 1;\r\n setActiveStep(prevStep);\r\n tourProps.steps[prevStep]?.onEnter?.(prevStep);\r\n tourProps.onStepChange?.(prevStep);\r\n }\r\n\r\n function goTo(stepIndex: number) {\r\n if (stepIndex < 0 || stepIndex >= tourProps.steps.length) return;\r\n const cur = activeStep();\r\n tourProps.steps[cur]?.onLeave?.(cur);\r\n setActiveStep(stepIndex);\r\n tourProps.steps[stepIndex]?.onEnter?.(stepIndex);\r\n tourProps.onStepChange?.(stepIndex);\r\n }\r\n\r\n const api: TourAPI = {\r\n start,\r\n stop,\r\n next,\r\n prev,\r\n goTo,\r\n isActive: visible,\r\n currentStep: activeStep,\r\n };\r\n\r\n const TourRenderer = () => (\r\n <TourComponent\r\n {...tourProps}\r\n activeStep={activeStep}\r\n visible={visible}\r\n onClose={stop}\r\n onNext={next}\r\n onPrev={prev}\r\n />\r\n );\r\n\r\n return [api, TourRenderer];\r\n}\r\n"],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { JSX } from 'solid-js';
|
|
2
|
+
export type TourPlacement = 'top' | 'top-start' | 'top-end' | 'bottom' | 'bottom-start' | 'bottom-end' | 'left' | 'left-start' | 'left-end' | 'right' | 'right-start' | 'right-end';
|
|
3
|
+
export interface TourStep {
|
|
4
|
+
target: string;
|
|
5
|
+
title?: JSX.Element;
|
|
6
|
+
content?: JSX.Element;
|
|
7
|
+
footer?: JSX.Element;
|
|
8
|
+
placement?: TourPlacement;
|
|
9
|
+
spotlightPadding?: number;
|
|
10
|
+
onEnter?: (step: number) => void;
|
|
11
|
+
onLeave?: (step: number) => void;
|
|
12
|
+
}
|
|
13
|
+
export interface TourProps {
|
|
14
|
+
steps: TourStep[];
|
|
15
|
+
onFinish?: () => void;
|
|
16
|
+
onClose?: (currentStep: number) => void;
|
|
17
|
+
onStepChange?: (step: number) => void;
|
|
18
|
+
showClose?: boolean;
|
|
19
|
+
prevLabel?: string;
|
|
20
|
+
nextLabel?: string;
|
|
21
|
+
doneLabel?: string;
|
|
22
|
+
showProgress?: boolean;
|
|
23
|
+
maskClosable?: boolean;
|
|
24
|
+
class?: Partial<Record<'root' | 'mask' | 'spotlight' | 'popup' | 'header' | 'body' | 'footer' | 'progress', string>>;
|
|
25
|
+
}
|
|
26
|
+
export interface TourAPI {
|
|
27
|
+
start: (stepIndex?: number) => void;
|
|
28
|
+
stop: () => void;
|
|
29
|
+
next: () => void;
|
|
30
|
+
prev: () => void;
|
|
31
|
+
goTo: (stepIndex: number) => void;
|
|
32
|
+
isActive: () => boolean;
|
|
33
|
+
currentStep: () => number;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=tour.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tour.types.d.ts","sourceRoot":"","sources":["../../../src/components/tour/tour.types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,MAAM,MAAM,aAAa,GACrB,KAAK,GACL,WAAW,GACX,SAAS,GACT,QAAQ,GACR,cAAc,GACd,YAAY,GACZ,MAAM,GACN,YAAY,GACZ,UAAU,GACV,OAAO,GACP,aAAa,GACb,WAAW,CAAC;AAEhB,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,CAAC;IAEf,KAAK,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IAEpB,OAAO,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IAEtB,MAAM,CAAC,EAAE,GAAG,CAAC,OAAO,CAAC;IAErB,SAAS,CAAC,EAAE,aAAa,CAAC;IAE1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAEjC,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,QAAQ,EAAE,CAAC;IAElB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IAEtB,OAAO,CAAC,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IAExC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAEtC,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,KAAK,CAAC,EAAE,OAAO,CACb,MAAM,CACJ,MAAM,GAAG,MAAM,GAAG,WAAW,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,EACnF,MAAM,CACP,CACF,CAAC;CACH;AAED,MAAM,WAAW,OAAO;IACtB,KAAK,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IAEpC,IAAI,EAAE,MAAM,IAAI,CAAC;IAEjB,IAAI,EAAE,MAAM,IAAI,CAAC;IAEjB,IAAI,EAAE,MAAM,IAAI,CAAC;IAEjB,IAAI,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;IAElC,QAAQ,EAAE,MAAM,OAAO,CAAC;IAExB,WAAW,EAAE,MAAM,MAAM,CAAC;CAC3B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/upload/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EACV,eAAe,EACf,kBAAkB,EAClB,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,mBAAmB,GACpB,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../src/components/upload/upload.tsx"],"names":[],"mappings":"AA0BA,OAAO,EAGL,eAAe,EAKhB,MAAM,gBAAgB,CAAC;AA+3BxB,eAAO,MAAM,MAAM,EAAiB,eAAe,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{cn as e}from"../../utils/cn.js";import{ImagePreview as t}from"../image-preview/image-preview.js";import{Spinner as n}from"../loading/loading.js";import{Tooltip as r}from"../tooltip/tooltip.js";import{addEventListener as i,className as a,createComponent as o,delegateEvents as s,effect as c,insert as l,memo as u,mergeProps as d,setAttribute as f,setStyleProperty as p,spread as m,template as h,use as g}from"solid-js/web";import{For as _,Match as v,Show as y,Switch as b,createSignal as x,createUniqueId as S,mergeProps as C}from"solid-js";import w from"lucide-solid/icons/x";import T from"lucide-solid/icons/zoom-in";import E from"lucide-solid/icons/circle-check";import D from"lucide-solid/icons/circle-x";import O from"lucide-solid/icons/cloud-upload";import k from"lucide-solid/icons/eye";import A from"lucide-solid/icons/file";import j from"lucide-solid/icons/file-image";import ee from"lucide-solid/icons/file-text";import te from"lucide-solid/icons/film";import ne from"lucide-solid/icons/music";import M from"lucide-solid/icons/trash-2";var N=h(`<div><div>`),re=h(`<div class=up62><div class=up63><span class="loading loading-spinner loading-sm text-white"></span><span class=up64>%`),ie=h(`<div class=up51><span class="loading loading-spinner loading-xs text-white">`),P=h(`<div><span> files</span><button title="Remove all">Clear all`),ae=h(`<div><ul class="flex flex-col gap-2">`),oe=h(`<li>`),se=h(`<span>`),ce=h(`<div><div class="flex min-w-0 flex-1 items-center gap-2"><div></div><div></div><button title=Remove>`),le=h(`<div><ul class=up48>`),F=h(`<img>`),ue=h(`<button class=up52 title=Preview>`),de=h(`<span class=up37> × <!> px`),I=h(`<span class=up24>Uploaded`),L=h(`<span class=up23>Upload failed`),R=h(`<button title=Preview>`),z=h(`<li><div></div><div><div class=up36><span class=up21></span><span class=up39></span></div></div><div><button title=Remove>`),B=h(`<div><span>`),V=h(`<button title="Upload file"><span class=up69>Upload`),H=h(`<div>`),fe=h(`<div class=up65><button title=Remove>`),pe=h(`<div class="w-fit cursor-pointer">`),U=h(`<div><input type=file class=hidden>`),me=h(`<p>Click or drag file to this area to upload`),he=h(`<p>`);function W(t,n,r){return!t||typeof t==`string`?r??``:e(t[n],r)}function G(t,n){return t?typeof t==`string`?e(n,t):e(n,t.wrapper):n}function ge(e){return e.startsWith(`image/`)?`text-violet-500`:e.startsWith(`video/`)?`text-rose-500`:e.startsWith(`audio/`)?`text-amber-500`:e===`application/pdf`?`text-red-500`:e.includes(`text`)||e.includes(`document`)?`text-blue-500`:e.includes(`spreadsheet`)||e.includes(`excel`)?`text-emerald-500`:`text-base-content/40`}function _e(e){return e.startsWith(`image/`)?`bg-violet-500/10`:e.startsWith(`video/`)?`bg-rose-500/10`:e.startsWith(`audio/`)?`bg-amber-500/10`:e===`application/pdf`?`bg-red-500/10`:e.includes(`text`)||e.includes(`document`)?`bg-blue-500/10`:e.includes(`spreadsheet`)||e.includes(`excel`)?`bg-emerald-500/10`:`bg-base-content/5`}function K(e,t=16){return e.startsWith(`image/`)?o(j,{size:t}):e.startsWith(`video/`)?o(te,{size:t}):e.startsWith(`audio/`)?o(ne,{size:t}):e===`application/pdf`||e.includes(`text`)?o(ee,{size:t}):o(A,{size:t})}function ve(e,t){return e===`application/pdf`?{label:`PDF`,colorClass:`bg-red-500`}:e.startsWith(`image/`)?{label:t.split(`.`).pop()?.toUpperCase().slice(0,3)??`IMG`,colorClass:`bg-violet-500`}:e.startsWith(`video/`)?{label:`VID`,colorClass:`bg-rose-500`}:e.startsWith(`audio/`)?{label:`AUD`,colorClass:`bg-amber-500`}:e.includes(`spreadsheet`)||e.includes(`excel`)?{label:`XLS`,colorClass:`bg-emerald-500`}:e.includes(`document`)||e.includes(`word`)?{label:`DOC`,colorClass:`bg-blue-500`}:e.includes(`text`)?{label:`TXT`,colorClass:`bg-blue-500`}:{label:t.split(`.`).pop()?.toUpperCase().slice(0,4)??`FILE`,colorClass:`bg-slate-400`}}function q(e){return e===0?`0 B`:e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} KB`:`${(e/(1024*1024)).toFixed(1)} MB`}function ye(e){return e.startsWith(`image/`)}function be(e){let t=!1,n=0,r=()=>{if(t)return;let i=Math.random()*10+8;n=Math.min(n+i,95),e.onProgress(Math.round(n)),n<95?setTimeout(r,100+Math.random()*80):setTimeout(()=>{t||(e.onProgress(100),e.onSuccess())},400+Math.random()*300)};return setTimeout(r,50),()=>{t=!0}}function J(e){let[t,n]=x([]),r=new Map,i=new Map,a=new Map,o=e=>r.get(e)?.[0]??(()=>0),s=(e,t)=>{i.get(e)?.(),i.delete(e),r.delete(e);let n=a.get(e);n&&(n.onload=null,n.src=``,a.delete(e)),t&&URL.revokeObjectURL(t)};return{fileList:t,processFiles:o=>{let s=Array.from(o),c=e.maxCount,l=e.maxFileSize,u=e.maxTotalSize,d=t();for(let t of s)if(l&&t.size>l){e.onError?.({type:`maxFileSize`,file:t,message:`"${t.name}" vượt quá dung lượng cho phép (${q(l)})`});return}if(c&&d.length+s.length>c){e.onError?.({type:`maxCount`,file:s[0],message:`Đã đạt số lượng file tối đa (${c})`});return}if(u&&d.reduce((e,t)=>e+t.size,0)+s.reduce((e,t)=>e+t.size,0)>u){e.onError?.({type:`maxTotalSize`,file:s[0],message:`Tổng dung lượng vượt quá giới hạn (${q(u)})`});return}s.forEach(o=>{let s=S(),c=ye(o.type)?URL.createObjectURL(o):void 0,[l,u]=x(0);r.set(s,[l,u]);let d={uid:s,name:o.name,size:o.size,type:o.type,status:`uploading`,originFile:o,thumbUrl:c};if(c){let e=new Image;a.set(s,e),e.onload=()=>{a.delete(s),n(t=>t.map(t=>t.uid===s?{...t,dimensions:{width:e.naturalWidth,height:e.naturalHeight}}:t))},e.src=c}n(t=>{let n=e.multiple===!1?[d]:[...t,d];return e.onChange?.({file:d,fileList:n}),n});let f=(e.customRequest??be)({file:o,onSuccess:()=>{u(100),n(t=>{let n=t.map(e=>e.uid===s?{...e,status:`done`}:e),r=n.find(e=>e.uid===s);return r&&e.onChange?.({file:r,fileList:n}),n}),i.delete(s),r.delete(s)},onError:t=>{n(n=>{let r=n.map(e=>e.uid===s?{...e,status:`error`}:e),i=r.find(e=>e.uid===s);return i&&e.onChange?.({file:{...i,error:t},fileList:r}),r}),i.delete(s),r.delete(s)},onProgress:n=>{u(n);let r=t(),i=r.findIndex(e=>e.uid===s);i!==-1&&e.onChange?.({file:{...r[i],percent:n},fileList:r})}});typeof f==`function`&&i.set(s,f)})},removeFile:t=>{n(n=>{let r=n.find(e=>e.uid===t);s(t,r?.thumbUrl);let i=n.filter(e=>e.uid!==t);return r&&e.onChange?.({file:{...r,status:`removed`},fileList:i}),i})},clearAll:()=>{n(e=>(e.forEach(e=>s(e.uid,e.thumbUrl)),[]))},getProgress:o}}function xe(t){return(()=>{var n=N(),r=n.firstChild;return c(i=>{var o=e(`up26`,t.trackClass),s=e(`up27`,t.fillClass),c=`${t.percent()}%`;return o!==i.e&&a(n,i.e=o),s!==i.t&&a(r,i.t=s),c!==i.a&&p(r,`width`,i.a=c),i},{e:void 0,t:void 0,a:void 0}),n})()}function Se(e){return(()=>{var t=re(),n=t.firstChild.firstChild.nextSibling,r=n.firstChild;return l(n,()=>e.percent(),r),t})()}function Ce(){return ie()}function Y(t){let n=S();return(()=>{var r=ae(),s=r.firstChild;return f(r,`id`,n),l(r,o(y,{get when(){return u(()=>!!t.showClearAll)()&&t.files.length>1},get children(){var n=P(),r=n.firstChild,s=r.firstChild,u=r.nextSibling,d=u.firstChild;return l(r,()=>t.files.length,s),i(u,`click`,t.onClearAll,!0),l(u,o(M,{size:12}),d),c(i=>{var o=e(`up44`,W(t.classConfig,`listHeader`)),s=e(`up45`,W(t.classConfig,`listCount`)),c=e(`up46`,W(t.classConfig,`clearBtn`));return o!==i.e&&a(n,i.e=o),s!==i.t&&a(r,i.t=s),c!==i.a&&a(u,i.a=c),i},{e:void 0,t:void 0,a:void 0}),n}}),s),l(s,o(_,{get each(){return t.files},children:e=>{let n=ve(e.type,e.name);return(()=>{var r=oe();return l(r,o(X,{file:e,badge:n,get onRemove(){return t.onRemove},get classConfig(){return t.classConfig},get showTooltip(){return t.showTooltip}})),r})()}})),c(()=>a(r,e(`up06`,W(t.classConfig,`textList`)))),r})()}function X(t){let i=()=>t.file.status===`uploading`;return(()=>{var s=ce(),u=s.firstChild,d=u.firstChild,f=d.nextSibling,p=f.nextSibling;return l(d,()=>t.badge.label),l(u,o(r,{get content(){return t.file.name},get hidden(){return!t.showTooltip},class:{root:`up09`},type:`default`,get children(){var n=se();return l(n,()=>t.file.name),c(()=>a(n,e(`up09`,W(t.classConfig,`textName`)))),n}}),f),l(f,()=>q(t.file.size)),l(u,o(b,{get children(){return[o(v,{get when(){return i()},get children(){return o(n,{class:`size-5`})}}),o(v,{get when(){return t.file.status===`done`},get children(){return o(E,{size:16,class:`text-success`})}}),o(v,{get when(){return t.file.status===`error`},get children(){return o(D,{size:16,class:`text-error`})}})]}}),p),p.$$click=()=>t.onRemove(t.file.uid),l(p,o(w,{size:16})),c(n=>{var r=e(`up07`,W(t.classConfig,`textItem`)),i=e(`up08`,t.badge.colorClass,W(t.classConfig,`textBadge`)),o=e(`up10`,W(t.classConfig,`textSize`)),c=e(`up57`,W(t.classConfig,`removeBtn`));return r!==n.e&&a(s,n.e=r),i!==n.t&&a(d,n.t=i),o!==n.a&&a(f,n.a=o),c!==n.o&&a(p,n.o=c),n},{e:void 0,t:void 0,a:void 0,o:void 0}),s})()}function Z(n){let[r,s]=x(null);return[(()=>{var t=le(),r=t.firstChild;return l(t,o(y,{get when(){return u(()=>!!n.showClearAll)()&&n.files.length>1},get children(){var t=P(),r=t.firstChild,s=r.firstChild,u=r.nextSibling,d=u.firstChild;return l(r,()=>n.files.length,s),i(u,`click`,n.onClearAll,!0),l(u,o(M,{size:12}),d),c(i=>{var o=e(`up44`,W(n.classConfig,`listHeader`)),s=e(`up45`,W(n.classConfig,`listCount`)),c=e(`up46`,W(n.classConfig,`clearBtn`));return o!==i.e&&a(t,i.e=o),s!==i.t&&a(r,i.t=s),c!==i.a&&a(u,i.a=c),i},{e:void 0,t:void 0,a:void 0}),t}}),r),l(r,o(_,{get each(){return n.files},children:t=>(()=>{var r=z(),i=r.firstChild,d=i.nextSibling,p=d.firstChild,m=p.firstChild,h=m.nextSibling,g=d.nextSibling,_=g.firstChild;return l(i,o(y,{get when(){return t.thumbUrl},get fallback(){return(()=>{var r=B(),i=r.firstChild;return l(i,()=>K(t.type,20)),c(o=>{var s=e(`up53`,_e(t.type),W(n.classConfig,`pictureIcon`)),c=ge(t.type);return s!==o.e&&a(r,o.e=s),c!==o.t&&a(i,o.t=c),o},{e:void 0,t:void 0}),r})()},get children(){return[(()=>{var e=F();return c(n=>{var r=t.thumbUrl,i=t.name;return r!==n.e&&f(e,`src`,n.e=r),i!==n.t&&f(e,`alt`,n.t=i),n},{e:void 0,t:void 0}),e})(),o(y,{get when(){return t.status===`uploading`},get children(){return o(Ce,{})}}),o(y,{get when(){return t.status===`done`},get children(){var e=ue();return e.$$click=()=>s(t),l(e,o(T,{size:14})),e}})]}})),l(m,()=>t.name),l(p,o(y,{get when(){return t.dimensions},get children(){var e=de(),n=e.firstChild,r=n.nextSibling;return r.nextSibling,l(e,()=>t.dimensions.width,n),l(e,()=>t.dimensions.height,r),e}}),h),l(h,()=>q(t.size)),l(d,o(y,{get when(){return t.status===`uploading`},get children(){return o(xe,{get percent(){return n.getProgress(t.uid)},get trackClass(){return W(n.classConfig,`progressTrack`)},get fillClass(){return W(n.classConfig,`progressFill`)}})}}),null),l(d,o(y,{get when(){return t.status===`done`},get children(){var e=I(),t=e.firstChild;return l(e,o(E,{size:11}),t),e}}),null),l(d,o(y,{get when(){return t.status===`error`},get children(){return L()}}),null),l(g,o(y,{get when(){return u(()=>t.status===`done`)()&&t.thumbUrl},get children(){var r=R();return r.$$click=()=>s(t),l(r,o(k,{size:14})),c(()=>a(r,e(`up56`,W(n.classConfig,`actionBtn`)))),r}}),_),_.$$click=()=>n.onRemove(t.uid),l(_,o(w,{size:14,class:`shrink-0`})),c(o=>{var s=e(`up49`,t.status===`uploading`&&`up49a`,t.status===`error`&&`up49b`,W(n.classConfig,`pictureItem`)),c=e(`up50`,W(n.classConfig,`pictureThumb`)),l=e(`up54`,W(n.classConfig,`pictureInfo`)),u=t.name,p=e(`up55`,W(n.classConfig,`pictureActions`)),h=e(`up57`,W(n.classConfig,`removeBtn`));return s!==o.e&&a(r,o.e=s),c!==o.t&&a(i,o.t=c),l!==o.a&&a(d,o.a=l),u!==o.o&&f(m,`title`,o.o=u),p!==o.i&&a(g,o.i=p),h!==o.n&&a(_,o.n=h),o},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0}),r})()})),c(()=>a(t,e(`up47`,W(n.classConfig,`pictureList`)))),t})(),o(y,{get when(){return r()},get children(){return o(t,{get src(){return r().thumbUrl},get imageName(){return r().name},get size(){return q(r().size)},onClose:()=>s(null)})}})]}function Q(n){let[r,s]=x(null);return[o(y,{get when(){return u(()=>!!n.showClearAll)()&&n.files.length>1},get children(){var t=P(),r=t.firstChild,s=r.firstChild,u=r.nextSibling,d=u.firstChild;return l(r,()=>n.files.length,s),i(u,`click`,n.onClearAll,!0),l(u,o(M,{size:12}),d),c(i=>{var o=e(`up44`,W(n.classConfig,`listHeader`)),s=e(`up45`,W(n.classConfig,`listCount`)),c=e(`up46`,W(n.classConfig,`clearBtn`));return o!==i.e&&a(t,i.e=o),s!==i.t&&a(r,i.t=s),c!==i.a&&a(u,i.a=c),i},{e:void 0,t:void 0,a:void 0}),t}}),(()=>{var t=H();return l(t,o(_,{get each(){return n.files},children:t=>(()=>{var r=H();return l(r,o(y,{get when(){return t.thumbUrl},get fallback(){return(()=>{var r=H();return l(r,()=>K(t.type,24)),c(()=>a(r,e(`up61`,W(n.classConfig,`cardIcon`)))),r})()},get children(){var r=F();return c(i=>{var o=t.thumbUrl,s=t.name,c=e(`up60`,W(n.classConfig,`cardImg`));return o!==i.e&&f(r,`src`,i.e=o),s!==i.t&&f(r,`alt`,i.t=s),c!==i.a&&a(r,i.a=c),i},{e:void 0,t:void 0,a:void 0}),r}}),null),l(r,o(y,{get when(){return t.status===`uploading`},get children(){return o(Se,{get percent(){return n.getProgress(t.uid)}})}}),null),l(r,o(y,{get when(){return t.status!==`uploading`},get children(){var r=fe(),i=r.firstChild;return l(r,o(y,{get when(){return t.thumbUrl},get children(){var r=R();return r.$$click=()=>s(t),l(r,o(k,{size:13})),c(()=>a(r,e(`up66`,W(n.classConfig,`actionBtn`)))),r}}),i),i.$$click=()=>n.onRemove(t.uid),l(i,o(M,{size:13})),c(()=>a(i,e(`up67`,W(n.classConfig,`removeBtn`)))),r}}),null),c(()=>a(r,e(`up59`,t.status===`error`&&`up59a`,W(n.classConfig,`card`)))),r})()}),null),l(t,o(y,{get when(){return n.showAddButton},get children(){var t=V(),r=t.firstChild;return i(t,`click`,n.onAdd,!0),l(t,o(O,{size:20,class:`opacity-40`}),r),c(()=>a(t,e(`up68`,W(n.classConfig,`cardAdd`)))),t}}),null),c(()=>a(t,e(`up58`,W(n.classConfig,`cardGrid`)))),t})(),o(y,{get when(){return r()},get children(){return o(t,{get src(){return r().thumbUrl},get imageName(){return r().name},get size(){return q(r().size)},onClose:()=>s(null)})}})]}function we(t){t=C({multiple:!0,listType:`text`,showUploadList:!0,showTooltip:!1},t);let n,{fileList:r,processFiles:s,removeFile:f,clearAll:p,getProgress:h}=J(t),_=()=>n.click(),x=e=>{let t=e.currentTarget;t.files?.length&&s(t.files),t.value=``},S=()=>!(!t.multiple&&r().length>=1||t.maxCount&&r().length>=t.maxCount),w=()=>t.showClearAll??t.multiple!==!1;return(()=>{var s=U(),C=s.firstChild,T=n;return typeof T==`function`?g(T,C):n=C,m(C,d({get multiple(){return t.multiple},get accept(){return t.accept}},()=>t.directory?{webkitdirectory:``}:{},{onChange:x}),!1,!1),l(s,o(b,{get children(){return[o(v,{get when(){return t.listType===`picture-card`},get children(){return[o(y,{get when(){return t.showUploadList},get children(){return o(Q,{get files(){return r()},onRemove:f,onAdd:_,onClearAll:p,get showAddButton(){return S()},get showClearAll(){return w()},getProgress:h,get classConfig(){return t.class}})}}),o(y,{get when(){return!t.showUploadList},get children(){var e=pe();return e.$$click=_,l(e,()=>t.children),e}})]}}),o(v,{get when(){return t.listType!==`picture-card`},get children(){return[(()=>{var e=H();return i(e,`click`,S()?_:void 0,!0),l(e,()=>t.children),c(()=>a(e,S()?`w-fit cursor-pointer`:``)),e})(),o(y,{get when(){return u(()=>!!t.showUploadList)()&&r().length>0},get children(){return o(b,{get children(){return[o(v,{get when(){return t.listType===`picture`},get children(){return o(Z,{get files(){return r()},onRemove:f,onClearAll:p,get showClearAll(){return w()},getProgress:h,get classConfig(){return t.class}})}}),o(v,{get when(){return t.listType===`text`},get children(){return o(Y,{get files(){return r()},onRemove:f,onClearAll:p,get showClearAll(){return w()},get classConfig(){return t.class},get showTooltip(){return t.showTooltip}})}})]}})}})]}})]}}),null),l(s,o(y,{get when(){return t.errorMessage},get children(){var n=H();return l(n,()=>t.errorMessage),c(()=>a(n,e(`up76`,W(t.class,`errorMessage`)))),n}}),null),c(()=>a(s,G(t.class,`up01`))),s})()}function Te(t){t=C({multiple:!0,listType:`text`,showUploadList:!0,hint:`Support for a single or bulk upload`,showTooltip:!1},t);let n,[r,i]=x(!1),{fileList:s,processFiles:f,removeFile:p,clearAll:h,getProgress:_}=J(t),S=()=>t.showClearAll??t.multiple!==!1,w=()=>n.click(),T=e=>{let t=e.currentTarget;t.files?.length&&f(t.files),t.value=``},E=e=>{e.preventDefault(),i(!0)},D=e=>{e.preventDefault(),i(!1)},k=e=>{e.preventDefault(),i(!1);let t=e.dataTransfer?.files;t?.length&&f(t)},A=()=>!(!t.multiple&&s().length>=1||t.maxCount&&s().length>=t.maxCount);return(()=>{var i=U(),f=i.firstChild,x=n;return typeof x==`function`?g(x,f):n=f,m(f,d({get multiple(){return t.multiple},get accept(){return t.accept}},()=>t.directory?{webkitdirectory:``}:{},{onChange:T}),!1,!1),l(i,o(y,{get when(){return t.listType===`picture-card`},get children(){return o(y,{get when(){return t.showUploadList},get children(){return o(Q,{get files(){return s()},onRemove:p,onAdd:w,onClearAll:h,get showAddButton(){return A()},get showClearAll(){return S()},getProgress:_,get classConfig(){return t.class}})}})}}),null),l(i,o(y,{get when(){return t.listType!==`picture-card`},get children(){return[o(y,{get when(){return A()},get children(){var n=N(),i=n.firstChild;return n.addEventListener(`drop`,k),n.addEventListener(`dragleave`,D),n.addEventListener(`dragover`,E),n.$$click=w,l(i,o(y,{get when(){return t.icon},get fallback(){return o(O,{size:48,strokeWidth:1.5})},get children(){return t.icon}})),l(n,o(y,{get when(){return t.children},get fallback(){return[(()=>{var n=me();return c(()=>a(n,e(`up04`,W(t.class,`draggerTitle`)))),n})(),(()=>{var n=he();return l(n,()=>t.hint),c(()=>a(n,e(`up05`,W(t.class,`draggerHint`)))),n})()]},get children(){return t.children}}),null),c(o=>{var s=e(`up02`,r()&&`up02a`,W(t.class,`dragger`)),c=e(`up03`,W(t.class,`draggerIcon`));return s!==o.e&&a(n,o.e=s),c!==o.t&&a(i,o.t=c),o},{e:void 0,t:void 0}),n}}),o(y,{get when(){return u(()=>!!t.showUploadList)()&&s().length>0},get children(){return o(b,{get children(){return[o(v,{get when(){return t.listType===`picture`},get children(){return o(Z,{get files(){return s()},onRemove:p,onClearAll:h,get showClearAll(){return S()},getProgress:_,get classConfig(){return t.class}})}}),o(v,{get when(){return t.listType===`text`},get children(){return o(Y,{get files(){return s()},onRemove:p,onClearAll:h,get showClearAll(){return S()},get classConfig(){return t.class},get showTooltip(){return t.showTooltip}})}})]}})}})]}}),null),l(i,o(y,{get when(){return t.errorMessage},get children(){var n=H();return l(n,()=>t.errorMessage),c(()=>a(n,e(`up76`,W(t.class,`errorMessage`)))),n}}),null),c(()=>a(i,G(t.class,`up01`))),i})()}var $=we;$.Dragger=Te,s([`click`]);export{$ as Upload};
|
|
2
|
+
//# sourceMappingURL=upload.js.map
|