solid-tom-ui 0.2.3 → 1.0.1
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 +237 -237
- package/dist/components/badge/badge.d.ts +0 -1
- package/dist/components/badge/badge.d.ts.map +1 -1
- package/dist/components/carousel/carousel.d.ts.map +1 -1
- package/dist/components/context-menu/context-menu.store.d.ts.map +1 -1
- package/dist/components/context-menu/context-menu.types.d.ts.map +1 -1
- package/dist/components/divider/divider.d.ts.map +1 -1
- package/dist/components/divider/divider.types.d.ts.map +1 -1
- package/dist/components/divider/index.d.ts +1 -1
- package/dist/components/divider/index.d.ts.map +1 -1
- package/dist/components/drawer/drawer.types.d.ts.map +1 -1
- package/dist/components/mansory/mansory.d.ts.map +1 -1
- package/dist/components/mansory/mansory.types.d.ts.map +1 -1
- package/dist/components/modal/modal.d.ts.map +1 -1
- package/dist/components/modal/modalContext.d.ts.map +1 -1
- package/dist/components/progress-bar/progress-bar.d.ts.map +1 -1
- package/dist/components/qr-code/qr-code.d.ts.map +1 -1
- package/dist/components/splitter/splitter.d.ts.map +1 -1
- package/dist/components/timeline/timeline.d.ts.map +1 -1
- package/dist/components/tooltip/tooltip.d.ts.map +1 -1
- package/dist/components/upload/upload.d.ts.map +1 -1
- package/dist/components/upload/upload.types.d.ts.map +1 -1
- package/dist/components/z-index/z-index.d.ts.map +1 -1
- package/dist/solid-ui.css +1 -1
- package/dist/src/components/avatar/avatar.js.map +1 -0
- package/dist/src/components/badge/badge.js +2 -0
- package/dist/src/components/badge/badge.js.map +1 -0
- package/dist/src/components/breadcrumb/breadcrumb.js.map +1 -0
- package/dist/{components → src/components}/button/button.js +1 -1
- package/dist/src/components/button/button.js.map +1 -0
- package/dist/src/components/carousel/carousel.js +2 -0
- package/dist/src/components/carousel/carousel.js.map +1 -0
- package/dist/src/components/chat-bubble/chatBubble.js.map +1 -0
- package/dist/src/components/checkbox/checkbox.js.map +1 -0
- package/dist/src/components/code-preview/code-preview.js +2 -0
- package/dist/src/components/code-preview/code-preview.js.map +1 -0
- package/dist/src/components/collapse/collapse.js.map +1 -0
- package/dist/src/components/context-menu/context-menu.js +2 -0
- package/dist/src/components/context-menu/context-menu.js.map +1 -0
- package/dist/src/components/context-menu/context-menu.store.js.map +1 -0
- package/dist/src/components/diff/diff.js.map +1 -0
- package/dist/src/components/divider/divider.js.map +1 -0
- package/dist/src/components/drawer/drawer.js +2 -0
- package/dist/src/components/drawer/drawer.js.map +1 -0
- package/dist/src/components/dropdown/dropdown.js.map +1 -0
- package/dist/src/components/dropdown/dropdown.store.js.map +1 -0
- package/dist/src/components/float-button/float-button.js.map +1 -0
- package/dist/src/components/hover-3d-image/hover-3d-image.js.map +1 -0
- package/dist/src/components/image-preview/image-preview.js +2 -0
- package/dist/src/components/image-preview/image-preview.js.map +1 -0
- package/dist/src/components/indicator/indicator.js.map +1 -0
- package/dist/src/components/input/input.js.map +1 -0
- package/dist/src/components/input/input.utils.js.map +1 -0
- package/dist/src/components/input/variants/input-color.js.map +1 -0
- package/dist/src/components/input/variants/input-date.js.map +1 -0
- package/dist/src/components/input/variants/input-number.js +2 -0
- package/dist/src/components/input/variants/input-number.js.map +1 -0
- package/dist/src/components/input/variants/input-otp.js.map +1 -0
- package/dist/src/components/input/variants/input-password.js +2 -0
- package/dist/src/components/input/variants/input-password.js.map +1 -0
- package/dist/src/components/input/variants/input-radio.js.map +1 -0
- package/dist/src/components/input/variants/input-range.js.map +1 -0
- package/dist/src/components/input/variants/input-text.js +2 -0
- package/dist/src/components/input/variants/input-text.js.map +1 -0
- package/dist/src/components/input/variants/input-textarea.js +2 -0
- package/dist/src/components/input/variants/input-textarea.js.map +1 -0
- package/dist/src/components/loading/loading.js +2 -0
- package/dist/src/components/loading/loading.js.map +1 -0
- package/dist/src/components/mansory/mansory.js.map +1 -0
- package/dist/src/components/menu/menu.js +2 -0
- package/dist/src/components/menu/menu.js.map +1 -0
- package/dist/src/components/modal/modal.js +2 -0
- package/dist/src/components/modal/modal.js.map +1 -0
- package/dist/src/components/modal/modalContext.js.map +1 -0
- package/dist/src/components/pagination/pagination.js +2 -0
- package/dist/src/components/pagination/pagination.js.map +1 -0
- package/dist/src/components/progress-bar/progress-bar.js.map +1 -0
- package/dist/src/components/qr-code/qr-code.js +2 -0
- package/dist/src/components/qr-code/qr-code.js.map +1 -0
- package/dist/src/components/rating/rating.js.map +1 -0
- package/dist/src/components/select/select.js +2 -0
- package/dist/src/components/select/select.js.map +1 -0
- package/dist/src/components/select-zone/select-zone.js.map +1 -0
- package/dist/src/components/skeleton/skeleton.js.map +1 -0
- package/dist/src/components/slider/slider.js.map +1 -0
- package/dist/src/components/splitter/splitter.js.map +1 -0
- package/dist/src/components/steps/steps.js +2 -0
- package/dist/src/components/steps/steps.js.map +1 -0
- package/dist/src/components/swap/swap.js.map +1 -0
- package/dist/src/components/switch/switch.js.map +1 -0
- package/dist/src/components/tab/tab.js +2 -0
- package/dist/src/components/tab/tab.js.map +1 -0
- package/dist/src/components/table/table.js +2 -0
- package/dist/src/components/table/table.js.map +1 -0
- package/dist/src/components/text-rotate/text-rotate.js.map +1 -0
- package/dist/src/components/timeline/timeline.js +2 -0
- package/dist/src/components/timeline/timeline.js.map +1 -0
- package/dist/src/components/toast/icons/ErrorIcon.js.map +1 -0
- package/dist/src/components/toast/icons/IconCircle.js.map +1 -0
- package/dist/src/components/toast/icons/InfoIcon.js.map +1 -0
- package/dist/src/components/toast/icons/LoaderIcon.js.map +1 -0
- package/dist/src/components/toast/icons/SuccessIcon.js.map +1 -0
- package/dist/src/components/toast/icons/WarningIcon.js.map +1 -0
- package/dist/src/components/toast/toast.js +2 -0
- package/dist/src/components/toast/toast.js.map +1 -0
- package/dist/src/components/toast/toast.store.js.map +1 -0
- package/dist/src/components/tooltip/tooltip.js.map +1 -0
- package/dist/{components → src/components}/tour/tour.js +1 -1
- package/dist/src/components/tour/tour.js.map +1 -0
- package/dist/src/components/upload/upload.js +2 -0
- package/dist/src/components/upload/upload.js.map +1 -0
- package/dist/src/components/z-index/z-index.context.js.map +1 -0
- package/dist/src/components/z-index/z-index.js.map +1 -0
- package/dist/src/components/z-index/z-index.store.js.map +1 -0
- package/dist/src/components/z-index/z-index.types.js.map +1 -0
- package/dist/src/utils/cn.js.map +1 -0
- package/dist/src/utils/element-tracker.js.map +1 -0
- package/dist/src/utils/helper.js.map +1 -0
- package/dist/src/utils/hoc.js.map +1 -0
- package/dist/src/utils/shiki-highlight.js +2 -0
- package/dist/src/utils/shiki-highlight.js.map +1 -0
- package/package.json +120 -120
- package/dist/components/avatar/avatar.js.map +0 -1
- package/dist/components/badge/badge.js +0 -2
- package/dist/components/badge/badge.js.map +0 -1
- package/dist/components/breadcrumb/breadcrumb.js.map +0 -1
- package/dist/components/button/button.js.map +0 -1
- package/dist/components/carousel/carousel.js +0 -2
- package/dist/components/carousel/carousel.js.map +0 -1
- package/dist/components/chat-bubble/chatBubble.js.map +0 -1
- package/dist/components/checkbox/checkbox.js.map +0 -1
- package/dist/components/code-preview/code-preview.js +0 -2
- package/dist/components/code-preview/code-preview.js.map +0 -1
- package/dist/components/collapse/collapse.js.map +0 -1
- package/dist/components/context-menu/context-menu.js +0 -2
- package/dist/components/context-menu/context-menu.js.map +0 -1
- package/dist/components/context-menu/context-menu.store.js.map +0 -1
- package/dist/components/diff/diff.js.map +0 -1
- package/dist/components/divider/divider.js.map +0 -1
- package/dist/components/drawer/drawer.js +0 -2
- package/dist/components/drawer/drawer.js.map +0 -1
- package/dist/components/dropdown/dropdown.js.map +0 -1
- package/dist/components/dropdown/dropdown.store.js.map +0 -1
- package/dist/components/float-button/float-button.js.map +0 -1
- package/dist/components/hover-3d-image/hover-3d-image.js.map +0 -1
- package/dist/components/image-preview/image-preview.js +0 -2
- package/dist/components/image-preview/image-preview.js.map +0 -1
- package/dist/components/indicator/indicator.js.map +0 -1
- package/dist/components/input/input.js.map +0 -1
- package/dist/components/input/input.utils.js.map +0 -1
- package/dist/components/input/variants/input-color.js.map +0 -1
- package/dist/components/input/variants/input-date.js.map +0 -1
- package/dist/components/input/variants/input-number.js +0 -2
- package/dist/components/input/variants/input-number.js.map +0 -1
- package/dist/components/input/variants/input-otp.js.map +0 -1
- package/dist/components/input/variants/input-password.js +0 -2
- package/dist/components/input/variants/input-password.js.map +0 -1
- package/dist/components/input/variants/input-radio.js.map +0 -1
- package/dist/components/input/variants/input-range.js.map +0 -1
- package/dist/components/input/variants/input-text.js +0 -2
- package/dist/components/input/variants/input-text.js.map +0 -1
- package/dist/components/input/variants/input-textarea.js +0 -2
- package/dist/components/input/variants/input-textarea.js.map +0 -1
- package/dist/components/loading/loading.js +0 -2
- package/dist/components/loading/loading.js.map +0 -1
- package/dist/components/mansory/mansory.js.map +0 -1
- package/dist/components/menu/menu.js +0 -2
- package/dist/components/menu/menu.js.map +0 -1
- package/dist/components/modal/modal.js +0 -2
- package/dist/components/modal/modal.js.map +0 -1
- package/dist/components/modal/modalContext.js.map +0 -1
- package/dist/components/pagination/pagination.js +0 -2
- package/dist/components/pagination/pagination.js.map +0 -1
- package/dist/components/progress-bar/progress-bar.js.map +0 -1
- package/dist/components/qr-code/qr-code.js +0 -2
- package/dist/components/qr-code/qr-code.js.map +0 -1
- package/dist/components/rating/rating.js.map +0 -1
- package/dist/components/select/select.js +0 -2
- package/dist/components/select/select.js.map +0 -1
- package/dist/components/select-zone/select-zone.js.map +0 -1
- package/dist/components/skeleton/skeleton.js.map +0 -1
- package/dist/components/slider/slider.js.map +0 -1
- package/dist/components/splitter/splitter.js.map +0 -1
- package/dist/components/steps/steps.js +0 -2
- package/dist/components/steps/steps.js.map +0 -1
- package/dist/components/swap/swap.js.map +0 -1
- package/dist/components/switch/switch.js.map +0 -1
- package/dist/components/tab/tab.js +0 -2
- package/dist/components/tab/tab.js.map +0 -1
- package/dist/components/table/table.js +0 -2
- package/dist/components/table/table.js.map +0 -1
- package/dist/components/text-rotate/text-rotate.js.map +0 -1
- package/dist/components/timeline/timeline.js +0 -2
- package/dist/components/timeline/timeline.js.map +0 -1
- package/dist/components/toast/icons/ErrorIcon.js.map +0 -1
- package/dist/components/toast/icons/IconCircle.js.map +0 -1
- package/dist/components/toast/icons/InfoIcon.js.map +0 -1
- package/dist/components/toast/icons/LoaderIcon.js.map +0 -1
- package/dist/components/toast/icons/SuccessIcon.js.map +0 -1
- package/dist/components/toast/icons/WarningIcon.js.map +0 -1
- package/dist/components/toast/toast.js +0 -2
- package/dist/components/toast/toast.js.map +0 -1
- package/dist/components/toast/toast.store.js.map +0 -1
- package/dist/components/tooltip/tooltip.js.map +0 -1
- package/dist/components/tour/tour.js.map +0 -1
- package/dist/components/upload/upload.js +0 -2
- package/dist/components/upload/upload.js.map +0 -1
- package/dist/components/z-index/z-index.context.js.map +0 -1
- package/dist/components/z-index/z-index.js.map +0 -1
- package/dist/components/z-index/z-index.store.js.map +0 -1
- package/dist/components/z-index/z-index.types.js.map +0 -1
- package/dist/utils/cn.js.map +0 -1
- package/dist/utils/element-tracker.js.map +0 -1
- package/dist/utils/helper.js.map +0 -1
- package/dist/utils/hoc.js.map +0 -1
- package/dist/utils/shiki-highlight.js +0 -2
- package/dist/utils/shiki-highlight.js.map +0 -1
- /package/dist/{components → src/components}/avatar/avatar.js +0 -0
- /package/dist/{components → src/components}/breadcrumb/breadcrumb.js +0 -0
- /package/dist/{components → src/components}/chat-bubble/chatBubble.js +0 -0
- /package/dist/{components → src/components}/checkbox/checkbox.js +0 -0
- /package/dist/{components → src/components}/collapse/collapse.js +0 -0
- /package/dist/{components → src/components}/context-menu/context-menu.store.js +0 -0
- /package/dist/{components → src/components}/diff/diff.js +0 -0
- /package/dist/{components → src/components}/divider/divider.js +0 -0
- /package/dist/{components → src/components}/dropdown/dropdown.js +0 -0
- /package/dist/{components → src/components}/dropdown/dropdown.store.js +0 -0
- /package/dist/{components → src/components}/float-button/float-button.js +0 -0
- /package/dist/{components → src/components}/hover-3d-image/hover-3d-image.js +0 -0
- /package/dist/{components → src/components}/indicator/indicator.js +0 -0
- /package/dist/{components → src/components}/input/input.js +0 -0
- /package/dist/{components → src/components}/input/input.utils.js +0 -0
- /package/dist/{components → src/components}/input/variants/input-color.js +0 -0
- /package/dist/{components → src/components}/input/variants/input-date.js +0 -0
- /package/dist/{components → src/components}/input/variants/input-otp.js +0 -0
- /package/dist/{components → src/components}/input/variants/input-radio.js +0 -0
- /package/dist/{components → src/components}/input/variants/input-range.js +0 -0
- /package/dist/{components → src/components}/mansory/mansory.js +0 -0
- /package/dist/{components → src/components}/modal/modalContext.js +0 -0
- /package/dist/{components → src/components}/progress-bar/progress-bar.js +0 -0
- /package/dist/{components → src/components}/rating/rating.js +0 -0
- /package/dist/{components → src/components}/select-zone/select-zone.js +0 -0
- /package/dist/{components → src/components}/skeleton/skeleton.js +0 -0
- /package/dist/{components → src/components}/slider/slider.js +0 -0
- /package/dist/{components → src/components}/splitter/splitter.js +0 -0
- /package/dist/{components → src/components}/swap/swap.js +0 -0
- /package/dist/{components → src/components}/switch/switch.js +0 -0
- /package/dist/{components → src/components}/table/index.js +0 -0
- /package/dist/{components → src/components}/text-rotate/text-rotate.js +0 -0
- /package/dist/{components → src/components}/toast/icons/ErrorIcon.js +0 -0
- /package/dist/{components → src/components}/toast/icons/IconCircle.js +0 -0
- /package/dist/{components → src/components}/toast/icons/InfoIcon.js +0 -0
- /package/dist/{components → src/components}/toast/icons/LoaderIcon.js +0 -0
- /package/dist/{components → src/components}/toast/icons/SuccessIcon.js +0 -0
- /package/dist/{components → src/components}/toast/icons/WarningIcon.js +0 -0
- /package/dist/{components → src/components}/toast/toast.store.js +0 -0
- /package/dist/{components → src/components}/tooltip/tooltip.js +0 -0
- /package/dist/{components → src/components}/z-index/z-index.context.js +0 -0
- /package/dist/{components → src/components}/z-index/z-index.js +0 -0
- /package/dist/{components → src/components}/z-index/z-index.store.js +0 -0
- /package/dist/{components → src/components}/z-index/z-index.types.js +0 -0
- /package/dist/{lib.js → src/lib.js} +0 -0
- /package/dist/{utils → src/utils}/cn.js +0 -0
- /package/dist/{utils → src/utils}/element-tracker.js +0 -0
- /package/dist/{utils → src/utils}/helper.js +0 -0
- /package/dist/{utils → src/utils}/hoc.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-color.js","names":["normalizeHexColor","Component","createSignal","splitProps","InputColorProps","InputText","InputColor","props","p","otherProps","initialValue","value","colorValue","setColorValue","colorPickerLabel","_el$","_tmpl$","_el$2","firstChild","addEventListener","e","newValue","currentTarget","onChange","_$effect","_$createComponent","_$mergeProps","type","typeOrigin","maskOptions","prefixIcon","onInput","normalizedValue","onBlur"],"sources":["../../../../../src/components/input/variants/input-color.tsx"],"sourcesContent":["import { normalizeHexColor } from '@/utils/helper';\r\nimport { Component, createSignal, splitProps } from 'solid-js';\r\nimport type { InputColorProps } from '../input.types';\r\nimport { InputText } from './input-text';\r\n\r\nexport const InputColor: Component<InputColorProps> = (props => {\r\n const [p, otherProps] = splitProps(props, ['value', 'onChange', 'onBlur', 'onInput']);\r\n const initialValue = normalizeHexColor(p.value);\r\n const [colorValue, setColorValue] = createSignal(initialValue);\r\n\r\n const colorPickerLabel = (\r\n <label class=\"flex cursor-pointer\">\r\n <input\r\n type=\"color\"\r\n value={colorValue()}\r\n class=\"my-auto size-5 cursor-pointer\"\r\n onChange={e => {\r\n const newValue = normalizeHexColor(e.currentTarget.value);\r\n setColorValue(newValue);\r\n if (p.onChange) {\r\n p.onChange(newValue, e);\r\n }\r\n }}\r\n />\r\n </label>\r\n );\r\n\r\n return (\r\n <InputText\r\n {...otherProps}\r\n type={'text'}\r\n typeOrigin=\"color\"\r\n value={colorValue()}\r\n maskOptions={void 0}\r\n prefixIcon={colorPickerLabel}\r\n onInput={(value, e) => {\r\n setColorValue(value);\r\n if (p.onInput) {\r\n p.onInput(value, e);\r\n }\r\n }}\r\n onChange={(value, e) => {\r\n const normalizedValue = normalizeHexColor(value);\r\n setColorValue(normalizedValue);\r\n if (p.onChange) {\r\n p.onChange(normalizedValue, e);\r\n }\r\n }}\r\n onBlur={(value, e) => {\r\n const normalizedValue = normalizeHexColor(value);\r\n setColorValue(normalizedValue);\r\n if (p.onBlur) {\r\n p.onBlur(normalizedValue, e);\r\n }\r\n }}\r\n />\r\n );\r\n}) as Component<InputColorProps>;\r\n"],"mappings":"iWAKaM,GAA0CC,GAAS,CAC9D,GAAM,CAACC,EAAGC,GAAcN,EAAWI,EAAO,CAAC,QAAS,WAAY,SAAU,UAAU,CAAC,CAE/E,CAACK,EAAYC,GAAiBX,EADfF,EAAkBQ,EAAEG,MAAM,CACe,CAmB9D,OAAAc,EACGpB,EAASqB,EACJjB,EAAU,CACdkB,KAAM,OACNC,WAAU,QAAA,IACVjB,OAAK,CAAA,OAAEC,GAAY,EACnBiB,YAAa,IAAK,GAClBC,gBAxBkB,CAAA,IAAAf,EAAAC,GAAA,CAAAC,EAAAF,EAAAG,WAIG,OAJHD,EAAAE,iBAAA,SAMNC,GAAK,CACb,IAAMC,EAAWrB,EAAkBoB,EAAEE,cAAcX,MAAM,CACzDE,EAAcQ,EAAS,CACnBb,EAAEe,UACJf,EAAEe,SAASF,EAAUD,EAAE,EAE1B,CAAAI,MAAAP,EAAAN,MARMC,GAAY,CAAA,CAAAG,KAWxB,CAUGgB,SAAUpB,EAAOS,IAAM,CACrBP,EAAcF,EAAM,CAChBH,EAAEuB,SACJvB,EAAEuB,QAAQpB,EAAOS,EAAE,EAGvBG,UAAWZ,EAAOS,IAAM,CACtB,IAAMY,EAAkBhC,EAAkBW,EAAM,CAChDE,EAAcmB,EAAgB,CAC1BxB,EAAEe,UACJf,EAAEe,SAASS,EAAiBZ,EAAE,EAGlCa,QAAStB,EAAOS,IAAM,CACpB,IAAMY,EAAkBhC,EAAkBW,EAAM,CAChDE,EAAcmB,EAAgB,CAC1BxB,EAAEyB,QACJzB,EAAEyB,OAAOD,EAAiBZ,EAAE,EAE/B,CAAA,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-date.js","names":["Component","createUniqueId","mergeProps","InputDateProps","DEFAULT_PROPS","InputText","InputDate","p","id","_$createComponent","_$mergeProps","type","typeOrigin","maskOptions","allowClear"],"sources":["../../../../../src/components/input/variants/input-date.tsx"],"sourcesContent":["import { Component, createUniqueId, mergeProps } from 'solid-js';\r\nimport type { InputDateProps } from '../input.types';\r\nimport { DEFAULT_PROPS } from '../input.utils';\r\nimport { InputText } from './input-text';\r\n\r\nexport const InputDate: Component<InputDateProps> = (p => {\r\n const id = createUniqueId();\r\n p = mergeProps({ ...DEFAULT_PROPS, id }, p);\r\n return (\r\n <InputText\r\n {...p}\r\n type={'date' as 'text'}\r\n typeOrigin=\"date\"\r\n maskOptions={void 0}\r\n allowClear={false}\r\n />\r\n );\r\n}) as Component<InputDateProps>;\r\n"],"mappings":"uNAKA,IAAaM,GAAwCC,GAAK,CACxD,IAAMC,EAAKP,GAAgB,CAE3B,MADAM,GAAIL,EAAW,CAAE,GAAGE,EAAeI,KAAI,CAAED,EAAE,CAC3CE,EACGJ,EAASK,EACJH,EAAC,CACLI,KAAM,OACNC,WAAU,OACVC,YAAa,IAAK,GAClBC,WAAY,GAAK,CAAA,CAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{cn as e}from"../../../utils/cn.js";import{createThrottle as t}from"../../../utils/helper.js";import{x_default as n}from"../../../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/x.js";import{DEFAULT_PROPS as r,inputTextVariants as i}from"../input.utils.js";import{className as a,createComponent as o,delegateEvents as s,effect as c,insert as l,memo as u,setAttribute as d,template as f,use as p}from"solid-js/web";import{Show as m,createEffect as h,createUniqueId as g,mergeProps as _,on as v,onCleanup as y,onMount as b}from"solid-js";import x from"imask/holder";import"imask/masked/number";var S=f(`<div class=it05>`),C=f(`<div tabindex=-1><input type=text data-type=number class="text-c2 grow">`),w=f(`<div class=it03>`),T=f(`<div class=it04>`),E=(s=>{let f=g();s=_({...r,id:f,offset:1,wheel:!1,keyboard:!0},s);let E,D,O=()=>({min:-1/0,max:1/0,thousandsSeparator:`_`,radix:`.`,padFractionalZeros:!1,normalizeZeros:!0,...s.maskOptions,mask:Number}),k=()=>{D?.focus()},A=null,j=e=>{if(!E)return;let t=E.unmaskedValue,n=(t===``?0:parseFloat(t))+e,r=s.maskOptions?.min??-1/0,i=s.maskOptions?.max??1/0;n=Math.max(r,Math.min(i,n)),E.unmaskedValue=String(n),E.updateValue(),s.onChange?.(E.value,new Event(`change`)),s.onInput?.(E.value,new Event(`input`)),s.maskOptions?.onAccept?.(E.value,E.unmaskedValue)},M=e=>{if(!s.keyboard)return;let t=s.offset??1;e.key===`ArrowUp`?(e.preventDefault(),j(t)):e.key===`ArrowDown`&&(e.preventDefault(),j(-t))},N=t(e=>{if(!s.wheel)return;e.preventDefault();let t=s.offset??1;j(e.deltaY<0?t:-t)},50);h(v(()=>O(),e=>E&&e&&E.updateOptions(e),{defer:!0})),b(()=>{D&&(E=x(D,O()),A=e=>{s.onChange?.(E?.value??``,e),s.maskOptions?.onAccept?.(E?.value,E?.unmaskedValue)},E.on(`accept`,A))}),y(function(){E&&(A&&E.off(`accept`,A),E.destroy())});let P=e=>{e.stopPropagation(),E?(E.value=``,E.updateValue()):D&&(D.value=``),s.onInput?.(``,void 0),s.onChange?.(``,void 0),D?.focus()};return(()=>{var t=C(),r=t.firstChild;t.$$click=k,l(t,()=>s.prefixIcon,r),r.addEventListener(`wheel`,e=>{s.wheel&&document.activeElement===D&&N(e)}),r.$$keydown=e=>{(e.key===`Enter`||e.keyCode===13)&&(e.preventDefault(),s.onPressEnter?.(e.currentTarget.value,e)),M(e)},r.$$input=e=>s.onInput?.(e.currentTarget.value,e),r.addEventListener(`change`,e=>s.onChange?.(e.currentTarget.value,e)),r.addEventListener(`blur`,e=>s.onBlur?.(e.currentTarget.value,e));var f=D;return typeof f==`function`?p(f,r):D=r,l(t,o(m,{get when(){return s.allowClear||s.suffixIcon},get children(){var e=S();return l(e,(()=>{var e=u(()=>!!s.allowClear);return()=>e()&&(()=>{var e=w();return e.$$click=P,l(e,o(n,{class:`m-auto size-2`})),e})()})(),null),l(e,(()=>{var e=u(()=>!!s.suffixIcon);return()=>e()&&(()=>{var e=T();return l(e,()=>s.suffixIcon),e})()})(),null),e}}),null),c(n=>{var o=e(`it01`,i({color:s.color,size:s.size,variant:s.variant}),s.class?.input,s.disabled&&`border-c5 pointer-events-none`),c=s.id,l=s.placeholder,u=s.disabled;return o!==n.e&&a(t,n.e=o),c!==n.t&&d(r,`id`,n.t=c),l!==n.a&&d(r,`placeholder`,n.a=l),u!==n.o&&(r.disabled=n.o=u),n},{e:void 0,t:void 0,a:void 0,o:void 0}),c(()=>r.value=s.value??``),t})()});s([`click`,`input`,`keydown`]);export{E as InputNumber};
|
|
2
|
+
//# sourceMappingURL=input-number.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-number.js","names":["cn","createThrottle","FactoryArg","InputMask","IMask","X","Component","createEffect","createUniqueId","mergeProps","on","onCleanup","onMount","Show","InputNumberProps","DEFAULT_PROPS","inputTextVariants","InputNumber","p","id","offset","wheel","keyboard","maskInstance","inputRef","HTMLInputElement","options","min","Number","NEGATIVE_INFINITY","max","POSITIVE_INFINITY","thousandsSeparator","radix","padFractionalZeros","normalizeZeros","maskOptions","mask","focusInput","focus","maskAcceptEvent","updateValue","delta","currentValue","unmaskedValue","numericValue","parseFloat","newValue","Math","String","onChange","value","Event","onInput","onAccept","handleKeyDown","e","KeyboardEvent","key","preventDefault","handleWheel","WheelEvent","deltaY","updateOptions","defer","InputEvent","destroyNumberMask","off","destroy","handleClear","MouseEvent","stopPropagation","undefined","_el$","_tmpl$2","_el$2","firstChild","$$click","_$insert","prefixIcon","addEventListener","document","activeElement","$$keydown","keyCode","onPressEnter","currentTarget","$$input","onBlur","_ref$","_$use","_$createComponent","when","allowClear","suffixIcon","children","_el$3","_tmpl$","_c$","_$memo","_el$4","_tmpl$3","_c$2","_el$5","_tmpl$4","_$effect","_p$","_v$","color","size","variant","class","input","disabled","_v$2","_v$3","placeholder","_v$4","_$className","t","_$setAttribute","a","o","_$delegateEvents"],"sources":["../../../../../src/components/input/variants/input-number.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport { createThrottle } from '@/utils/helper';\r\nimport type { FactoryArg, InputMask } from 'imask';\r\nimport IMask from 'imask/holder';\r\nimport 'imask/masked/number';\r\nimport X from 'lucide-solid/icons/x';\r\nimport {\r\n Component,\r\n createEffect,\r\n createUniqueId,\r\n mergeProps,\r\n on,\r\n onCleanup,\r\n onMount,\r\n Show,\r\n} from 'solid-js';\r\nimport type { InputNumberProps } from '../input.types';\r\nimport { DEFAULT_PROPS, inputTextVariants } from '../input.utils';\r\n\r\nexport const InputNumber: Component<InputNumberProps> = (p => {\r\n const id = createUniqueId();\r\n p = mergeProps({ ...DEFAULT_PROPS, id, offset: 1, wheel: false, keyboard: true }, p);\r\n let maskInstance: InputMask<FactoryArg> | undefined;\r\n let inputRef: HTMLInputElement | undefined;\r\n\r\n const options = () => ({\r\n min: Number.NEGATIVE_INFINITY,\r\n max: Number.POSITIVE_INFINITY,\r\n thousandsSeparator: '_',\r\n radix: '.',\r\n padFractionalZeros: false,\r\n normalizeZeros: true,\r\n ...p.maskOptions,\r\n mask: Number,\r\n });\r\n\r\n const focusInput = () => {\r\n inputRef?.focus();\r\n };\r\n\r\n let maskAcceptEvent: any = null;\r\n\r\n const updateValue = (delta: number) => {\r\n if (!maskInstance) return;\r\n\r\n const currentValue = maskInstance.unmaskedValue;\r\n const numericValue = currentValue === '' ? 0 : parseFloat(currentValue);\r\n let newValue = numericValue + delta;\r\n\r\n const min = p.maskOptions?.min ?? Number.NEGATIVE_INFINITY;\r\n const max = p.maskOptions?.max ?? Number.POSITIVE_INFINITY;\r\n newValue = Math.max(min, Math.min(max, newValue));\r\n\r\n maskInstance.unmaskedValue = String(newValue);\r\n maskInstance.updateValue();\r\n\r\n p.onChange?.(maskInstance.value, new Event('change'));\r\n p.onInput?.(maskInstance.value, new Event('input'));\r\n p.maskOptions?.onAccept?.(maskInstance.value, maskInstance.unmaskedValue);\r\n };\r\n\r\n const handleKeyDown = (e: KeyboardEvent) => {\r\n if (!p.keyboard) return;\r\n\r\n const offset = p.offset ?? 1;\r\n\r\n if (e.key === 'ArrowUp') {\r\n e.preventDefault();\r\n updateValue(offset);\r\n } else if (e.key === 'ArrowDown') {\r\n e.preventDefault();\r\n updateValue(-offset);\r\n }\r\n };\r\n\r\n const handleWheel = createThrottle((e: WheelEvent) => {\r\n if (!p.wheel) return;\r\n\r\n e.preventDefault();\r\n const offset = p.offset ?? 1;\r\n const delta = e.deltaY < 0 ? offset : -offset;\r\n updateValue(delta);\r\n }, 50);\r\n\r\n createEffect(\r\n on(\r\n () => options(),\r\n value => maskInstance && value && maskInstance.updateOptions(value),\r\n { defer: true },\r\n ),\r\n );\r\n\r\n onMount(() => {\r\n if (inputRef) {\r\n maskInstance = IMask(inputRef, options());\r\n\r\n maskAcceptEvent = (e: InputEvent) => {\r\n p.onChange?.(maskInstance?.value ?? '', e);\r\n p.maskOptions?.onAccept?.(maskInstance?.value, maskInstance?.unmaskedValue);\r\n };\r\n maskInstance.on('accept', maskAcceptEvent);\r\n }\r\n });\r\n\r\n onCleanup(function destroyNumberMask() {\r\n if (maskInstance) {\r\n maskAcceptEvent && maskInstance.off('accept', maskAcceptEvent);\r\n maskInstance.destroy();\r\n }\r\n });\r\n\r\n const handleClear = (e: MouseEvent) => {\r\n e.stopPropagation();\r\n if (maskInstance) {\r\n maskInstance.value = '';\r\n maskInstance.updateValue();\r\n } else if (inputRef) {\r\n inputRef.value = '';\r\n }\r\n p.onInput?.('', undefined as any);\r\n p.onChange?.('', undefined as any);\r\n inputRef?.focus();\r\n };\r\n\r\n return (\r\n <div\r\n tabIndex={-1}\r\n class={cn(\r\n 'it01',\r\n inputTextVariants({ color: p.color, size: p.size, variant: p.variant }),\r\n p.class?.input,\r\n p.disabled && 'border-c5 pointer-events-none',\r\n )}\r\n onClick={focusInput}\r\n >\r\n {p.prefixIcon}\r\n <input\r\n id={p.id}\r\n ref={inputRef}\r\n type=\"text\"\r\n data-type=\"number\"\r\n value={p.value ?? ''}\r\n placeholder={p.placeholder}\r\n class=\"text-c2 grow\"\r\n onBlur={e => p.onBlur?.(e.currentTarget.value, e)}\r\n onChange={e => p.onChange?.(e.currentTarget.value, e)}\r\n onInput={e => p.onInput?.(e.currentTarget.value, e)}\r\n onKeyDown={e => {\r\n if (e.key === 'Enter' || e.keyCode === 13) {\r\n e.preventDefault();\r\n p.onPressEnter?.(e.currentTarget.value, e);\r\n }\r\n handleKeyDown(e);\r\n }}\r\n onWheel={e => {\r\n if (p.wheel && document.activeElement === inputRef) {\r\n handleWheel(e);\r\n }\r\n }}\r\n disabled={p.disabled}\r\n />\r\n <Show when={p.allowClear || p.suffixIcon}>\r\n <div class=\"it05\">\r\n {p.allowClear && (\r\n <div class=\"it03\" onClick={handleClear}>\r\n <X class=\"m-auto size-2\" />\r\n </div>\r\n )}\r\n {p.suffixIcon && <div class=\"it04\">{p.suffixIcon}</div>}\r\n </div>\r\n </Show>\r\n </div>\r\n );\r\n}) as Component<InputNumberProps>;\r\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-otp.js","names":["cn","Component","createEffect","createSignal","For","mergeProps","on","InputOTPProps","getColor","InputOTP","p","color","length","inputMode","allowedChars","disabled","values","setValues","Array","fill","focusedIndex","setFocusedIndex","inputRefs","HTMLInputElement","value","undefined","chars","split","slice","newValues","forEach","char","i","getCombinedValue","join","notifyChange","combined","onChange","every","v","onComplete","updateValue","index","focusInput","focus","getNextIndex","currentIndex","nextIndex","allFilled","handleInput","e","InputEvent","input","target","inputValue","test","blur","handlePaste","ClipboardEvent","preventDefault","pasteData","clipboardData","getData","validChars","filter","lastFilledIndex","nextEmptyIndex","findIndex","handleKeyDown","KeyboardEvent","key","shiftKey","prevIndex","handleFocus","select","handleBlur","_index","FocusEvent","relatedTarget","HTMLElement","isInternalFocus","some","ref","onBlur","handleContainerClick","_el$","_tmpl$","_$insert","_$createComponent","each","children","_","_el$2","_tmpl$2","_el$3","firstChild","$$click","addEventListener","$$keydown","$$input","_$use","el","_$effect","_p$","_v$","class","inputWrap","_v$2","_v$3","_v$4","_v$5","_$className","t","_$setAttribute","a","o","_$memo","separator","_el$4","_tmpl$3","Element","root","_$delegateEvents"],"sources":["../../../../../src/components/input/variants/input-otp.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport { Component, createEffect, createSignal, For, mergeProps, on } from 'solid-js';\r\nimport type { InputOTPProps } from '../input.types';\r\nimport { getColor } from '@/utils/helper';\r\n\r\nexport const InputOTP: Component<InputOTPProps> = p => {\r\n p = mergeProps(\r\n {\r\n color: 'info',\r\n length: 6,\r\n inputMode: 'numeric',\r\n allowedChars: /^[0-9]$/,\r\n disabled: false,\r\n } as InputOTPProps,\r\n p,\r\n );\r\n\r\n const length = () => p.length || 6;\r\n const allowedChars = () => p.allowedChars || /^[0-9]$/;\r\n\r\n const [values, setValues] = createSignal<string[]>(Array(length()).fill(''));\r\n const [focusedIndex, setFocusedIndex] = createSignal<number | null>(null);\r\n\r\n let inputRefs: HTMLInputElement[] = [];\r\n\r\n createEffect(\r\n on(\r\n () => p.value,\r\n value => {\r\n if (value !== undefined) {\r\n const chars = value.split('').slice(0, length());\r\n const newValues = Array(length()).fill('');\r\n chars.forEach((char, i) => {\r\n newValues[i] = char;\r\n });\r\n setValues(newValues);\r\n }\r\n },\r\n ),\r\n );\r\n\r\n const getCombinedValue = () => values().join('');\r\n\r\n const notifyChange = (newValues: string[]) => {\r\n const combined = newValues.join('');\r\n p.onChange?.(combined);\r\n\r\n if (combined.length === length() && newValues.every(v => v !== '')) {\r\n p.onComplete?.(combined);\r\n }\r\n };\r\n\r\n const updateValue = (index: number, char: string) => {\r\n const newValues = [...values()];\r\n newValues[index] = char;\r\n setValues(newValues);\r\n notifyChange(newValues);\r\n };\r\n\r\n const focusInput = (index: number) => {\r\n if (index >= 0 && index < length() && inputRefs[index]) {\r\n inputRefs[index].focus();\r\n }\r\n };\r\n\r\n const getNextIndex = (currentIndex: number): number => {\r\n let nextIndex = (currentIndex + 1) % length();\r\n if (nextIndex === 0 && currentIndex === length() - 1) {\r\n const allFilled = values().every(v => v !== '');\r\n if (allFilled) {\r\n return -1;\r\n }\r\n }\r\n return nextIndex;\r\n };\r\n\r\n const handleInput = (index: number, e: InputEvent) => {\r\n const input = e.target as HTMLInputElement;\r\n const inputValue = input.value;\r\n input.value = '';\r\n\r\n if (!inputValue) return;\r\n const char = inputValue[inputValue.length - 1];\r\n\r\n if (!allowedChars().test(char)) return;\r\n\r\n updateValue(index, char);\r\n\r\n const nextIndex = getNextIndex(index);\r\n if (nextIndex === -1) {\r\n inputRefs[index]?.blur();\r\n } else {\r\n focusInput(nextIndex);\r\n }\r\n };\r\n\r\n const handlePaste = (index: number, e: ClipboardEvent) => {\r\n e.preventDefault();\r\n\r\n const pasteData = e.clipboardData?.getData('text') || '';\r\n if (!pasteData) return;\r\n\r\n const validChars = pasteData.split('').filter(char => allowedChars().test(char));\r\n if (validChars.length === 0) return;\r\n\r\n const newValues = [...values()];\r\n let lastFilledIndex = index;\r\n\r\n for (let i = 0; i < validChars.length && index + i < length(); i++) {\r\n newValues[index + i] = validChars[i];\r\n lastFilledIndex = index + i;\r\n }\r\n\r\n setValues(newValues);\r\n notifyChange(newValues);\r\n\r\n const allFilled = newValues.every(v => v !== '');\r\n if (allFilled) {\r\n inputRefs[lastFilledIndex]?.blur();\r\n } else {\r\n const nextEmptyIndex = newValues.findIndex((v, i) => i > lastFilledIndex && v === '');\r\n if (nextEmptyIndex !== -1) {\r\n focusInput(nextEmptyIndex);\r\n } else {\r\n focusInput(lastFilledIndex);\r\n }\r\n }\r\n };\r\n\r\n const handleKeyDown = (index: number, e: KeyboardEvent) => {\r\n switch (e.key) {\r\n case 'Backspace':\r\n e.preventDefault();\r\n if (values()[index]) {\r\n updateValue(index, '');\r\n } else if (index > 0) {\r\n updateValue(index - 1, '');\r\n focusInput(index - 1);\r\n }\r\n break;\r\n\r\n case 'Delete':\r\n e.preventDefault();\r\n updateValue(index, '');\r\n break;\r\n\r\n case 'ArrowLeft':\r\n e.preventDefault();\r\n if (index > 0) focusInput(index - 1);\r\n break;\r\n\r\n case 'ArrowRight':\r\n e.preventDefault();\r\n if (index < length() - 1) focusInput(index + 1);\r\n break;\r\n\r\n case 'Tab':\r\n e.preventDefault();\r\n if (e.shiftKey) {\r\n const prevIndex = index === 0 ? length() - 1 : index - 1;\r\n focusInput(prevIndex);\r\n } else {\r\n const nextIndex = (index + 1) % length();\r\n focusInput(nextIndex);\r\n }\r\n break;\r\n\r\n case 'ArrowUp':\r\n case 'ArrowDown':\r\n e.preventDefault();\r\n break;\r\n }\r\n };\r\n\r\n const handleFocus = (index: number) => {\r\n setFocusedIndex(index);\r\n inputRefs[index]?.select();\r\n };\r\n\r\n const handleBlur = (_index: number, e: FocusEvent) => {\r\n const relatedTarget = e.relatedTarget as HTMLElement;\r\n const isInternalFocus = inputRefs.some(ref => ref === relatedTarget);\r\n\r\n if (!isInternalFocus) {\r\n setFocusedIndex(null);\r\n p.onBlur?.(getCombinedValue());\r\n }\r\n };\r\n\r\n const handleContainerClick = (index: number) => {\r\n if (!p.disabled) focusInput(index);\r\n };\r\n\r\n return (\r\n <div\r\n class={cn(\r\n 'op01',\r\n getColor(p.color!),\r\n p.class?.root,\r\n p.disabled && 'pointer-events-none opacity-50',\r\n )}\r\n role=\"group\"\r\n aria-label=\"OTP Input\"\r\n >\r\n <For each={Array(length()).fill(0)}>\r\n {(_, i) => (\r\n <>\r\n <div\r\n class={cn(\r\n 'op04',\r\n focusedIndex() === i() ? 'op02' : 'border-c3 hover:border-c4',\r\n p.class?.inputWrap,\r\n p.disabled && 'border-c3',\r\n )}\r\n onClick={() => handleContainerClick(i())}\r\n >\r\n <input\r\n ref={el => (inputRefs[i()] = el)}\r\n type=\"text\"\r\n inputMode={p.inputMode}\r\n maxLength={2}\r\n disabled={p.disabled}\r\n class={cn('op03', p.class?.input, p.disabled && 'cursor-not-allowed bg-gray-200')}\r\n autocomplete=\"one-time-code\"\r\n aria-label={`OTP digit ${i() + 1}`}\r\n value={values()[i()] || ''}\r\n onInput={e => handleInput(i(), e)}\r\n onKeyDown={e => handleKeyDown(i(), e)}\r\n onPaste={e => handlePaste(i(), e)}\r\n onFocus={() => handleFocus(i())}\r\n onBlur={e => handleBlur(i(), e)}\r\n />\r\n </div>\r\n {p.separator && <div class=\"my-auto\">{p.separator as Element}</div>}\r\n </>\r\n )}\r\n </For>\r\n </div>\r\n );\r\n};\r\n\r\nexport default InputOTP;\r\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{cn as e}from"../../../utils/cn.js";import{eye_default as t}from"../../../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/eye.js";import{DEFAULT_PROPS as n}from"../input.utils.js";import{InputText as r}from"./input-text.js";import{eye_off_default as i}from"../../../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/eye-off.js";import{createComponent as a,delegateEvents as o,insert as s,mergeProps as c,template as l}from"solid-js/web";import{createSignal as u,createUniqueId as d,mergeProps as f}from"solid-js";var p=l(`<div class=ipa01>`),m=(o=>{o=f({...n,id:d()},o);let[l,m]=u(!1),h,g=e=>{e.stopPropagation(),h!==void 0&&(clearTimeout(h),h=void 0);let t=!l();m(t),t&&(h=setTimeout(()=>{m(!1),h=void 0},1e3))};return a(r,c(o,{get type(){return l()?`text`:`password`},typeOrigin:`password`,maskOptions:void 0,get suffixIcon(){return(()=>{var n=p();return n.$$click=g,s(n,a(i,{get class(){return e(`ipa02`,l()?`opacity-100`:`opacity-0`)}}),null),s(n,a(t,{get class(){return e(`ipa03`,l()?`opacity-0`:`opacity-100`)}}),null),n})()}}))});o([`click`]);export{m as InputPassword};
|
|
2
|
+
//# sourceMappingURL=input-password.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-password.js","names":["cn","Eye","EyeOff","Component","createSignal","createUniqueId","mergeProps","InputPasswordProps","DEFAULT_PROPS","InputText","InputPassword","p","id","showPassword","setShowPassword","timeoutId","ReturnType","setTimeout","togglePasswordVisibility","e","MouseEvent","stopPropagation","undefined","clearTimeout","next","_$createComponent","_$mergeProps","type","typeOrigin","maskOptions","suffixIcon","_el$","_tmpl$","$$click","_$insert","class","_$delegateEvents"],"sources":["../../../../../src/components/input/variants/input-password.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport Eye from 'lucide-solid/icons/eye';\r\nimport EyeOff from 'lucide-solid/icons/eye-off';\r\nimport { Component, createSignal, createUniqueId, mergeProps } from 'solid-js';\r\nimport type { InputPasswordProps } from '../input.types';\r\nimport { DEFAULT_PROPS } from '../input.utils';\r\nimport { InputText } from './input-text';\r\n\r\nexport const InputPassword: Component<InputPasswordProps> = (p => {\r\n p = mergeProps({ ...DEFAULT_PROPS, id: createUniqueId() }, p);\r\n\r\n const [showPassword, setShowPassword] = createSignal(false);\r\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\r\n\r\n const togglePasswordVisibility = (e: MouseEvent) => {\r\n e.stopPropagation();\r\n if (timeoutId !== undefined) {\r\n clearTimeout(timeoutId);\r\n timeoutId = undefined;\r\n }\r\n const next = !showPassword();\r\n setShowPassword(next);\r\n if (next) {\r\n timeoutId = setTimeout(() => {\r\n setShowPassword(false);\r\n timeoutId = undefined;\r\n }, 1000);\r\n }\r\n };\r\n\r\n return (\r\n <InputText\r\n {...p}\r\n type={(showPassword() ? 'text' : 'password') as 'text'}\r\n typeOrigin=\"password\"\r\n maskOptions={void 0}\r\n suffixIcon={\r\n <div class=\"ipa01\" onClick={togglePasswordVisibility}>\r\n <EyeOff class={cn('ipa02', showPassword() ? 'opacity-100' : 'opacity-0')} />\r\n <Eye class={cn('ipa03', !showPassword() ? 'opacity-100' : 'opacity-0')} />\r\n </div>\r\n }\r\n />\r\n );\r\n}) as Component<InputPasswordProps>;\r\n"],"mappings":"4oBAQaU,GAAgDC,GAAK,CAChEA,EAAIL,EAAW,CAAE,GAAGE,EAAeI,GAAIP,GAAe,CAAG,CAAEM,EAAE,CAE7D,GAAM,CAACE,EAAcC,GAAmBV,EAAa,GAAM,CACvDW,EAEEG,EAA4BC,GAAkB,CAClDA,EAAEE,iBAAiB,CACfN,IAAcO,IAAAA,KAChBC,aAAaR,EAAU,CACvBA,EAAYO,IAAAA,IAEd,IAAME,EAAO,CAACX,GAAc,CAC5BC,EAAgBU,EAAK,CACjBA,IACFT,EAAYE,eAAiB,CAC3BH,EAAgB,GAAM,CACtBC,EAAYO,IAAAA,IACX,IAAK,GAIZ,OAAAG,EACGhB,EAASiB,EACJf,EAAC,CAAA,IACLgB,MAAI,CAAA,OAAGd,GAAc,CAAG,OAAS,YACjCe,WAAU,WACVC,YAAa,IAAK,GAAC,IACnBC,YAAU,CAAA,WAAA,CAAA,IAAAC,EAAAC,GAAA,CAGgE,MAHhED,GAAAE,QACoBf,EAAwBgB,EAAAH,EAAAN,EACjDvB,EAAM,CAAA,IAAA,OAAA,CAAA,OAAQF,EAAG,QAASa,GAAc,CAAG,cAAgB,YAAY,EAAA,CAAA,CAAA,KAAA,CAAAqB,EAAAH,EAAAN,EACvExB,EAAG,CAAA,IAAA,OAAA,CAAA,OAAQD,EAAG,QAAUa,GAAc,CAAmB,YAAhB,cAA4B,EAAA,CAAA,CAAA,KAAA,CAAAkB,KAAA,EAAA,CAAA,CAAA,GAK5CK,EAAA,CAAA,QAAA,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-radio.js","names":["cn","cva","VariantProps","Component","createUniqueId","mergeProps","InputRadioProps","type","size","RadioVariantsProps","color","id","name","value","checked","disabled","onChange","class","variants","xs","sm","md","lg","xl","neutral","primary","secondary","accent","info","success","warning","error","InputRadio","p","const","_el$","_tmpl$","addEventListener","e","currentTarget","_$effect","_p$","_v$","_v$2","_v$3","_v$4","_$className","t","_$setAttribute","a","o","undefined"],"sources":["../../../../../src/components/input/variants/input-radio.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport { cva, VariantProps } from 'class-variance-authority';\r\nimport { Component, createUniqueId, mergeProps } from 'solid-js';\r\n\r\nexport type InputRadioProps = {\r\n type: 'radio';\r\n size?: RadioVariantsProps['size'];\r\n color?: RadioVariantsProps['color'];\r\n id?: string;\r\n name: string;\r\n value: string;\r\n checked?: boolean;\r\n disabled?: boolean;\r\n onChange?: (value: string) => void;\r\n class?: string;\r\n};\r\nconst variants = cva('radio', {\r\n variants: {\r\n size: {\r\n xs: 'radio-xs',\r\n sm: 'radio-sm',\r\n md: 'radio-md',\r\n lg: 'radio-lg',\r\n xl: 'radio-xl',\r\n },\r\n color: {\r\n neutral: 'radio-neutral',\r\n primary: 'radio-primary',\r\n secondary: 'radio-secondary',\r\n accent: 'radio-accent',\r\n info: 'radio-info',\r\n success: 'radio-success',\r\n warning: 'radio-warning',\r\n error: 'radio-error',\r\n },\r\n },\r\n});\r\n\r\nexport type RadioVariantsProps = VariantProps<typeof variants>;\r\n\r\nexport const InputRadio: Component<InputRadioProps> = p => {\r\n p = mergeProps({ size: 'md' as const, id: createUniqueId() }, p);\r\n return (\r\n <input\r\n type=\"radio\"\r\n class={cn(variants({ color: p.color, size: p.size }), p.class)}\r\n id={p.id}\r\n name={p.name}\r\n value={p.value}\r\n checked={p.checked}\r\n disabled={p.disabled}\r\n onChange={e => p.onChange?.(e.currentTarget.value)}\r\n />\r\n );\r\n};\r\n"],"mappings":"sQAgBMkB,EAAWjB,EAAI,QAAS,CAC5BiB,SAAU,CACRV,KAAM,CACJW,GAAI,WACJC,GAAI,WACJC,GAAI,WACJC,GAAI,WACJC,GAAI,WACL,CACDb,MAAO,CACLc,QAAS,gBACTC,QAAS,gBACTC,UAAW,kBACXC,OAAQ,eACRC,KAAM,aACNC,QAAS,gBACTC,QAAS,gBACTC,MAAO,cACT,CACF,CACD,CAAC,CAIWC,EAAyCC,IACpDA,EAAI5B,EAAW,CAAEG,KAAM,KAAeG,GAAIP,GAAe,CAAG,CAAE6B,EAAE,MAChE,CAAA,IAAAE,EAAAC,GAAA,CAOsB,OAPtBD,EAAAE,iBAAA,SAScC,GAAKL,EAAEjB,WAAWsB,EAAEC,cAAc1B,MAAM,CAAA,CAAA2B,EAAAC,GAAA,CAAA,IAAAC,EAN3C1C,EAAGkB,EAAS,CAAER,MAAOuB,EAAEvB,MAAOF,KAAMyB,EAAEzB,KAAM,CAAC,CAAEyB,EAAEhB,MAAM,CAAA0B,EAC1DV,EAAEtB,GAAEiC,EACFX,EAAErB,KAAIiC,EAGFZ,EAAElB,SAAQ,OAAA2B,IAAAD,EAAAH,GAAAQ,EAAAX,EAAAM,EAAAH,EAAAI,EAAA,CAAAC,IAAAF,EAAAM,GAAAC,EAAAb,EAAA,KAAAM,EAAAM,EAAAJ,EAAA,CAAAC,IAAAH,EAAAQ,GAAAD,EAAAb,EAAA,OAAAM,EAAAQ,EAAAL,EAAA,CAAAC,IAAAJ,EAAAS,IAAAf,EAAApB,SAAA0B,EAAAS,EAAAL,GAAAJ,GAAA,CAAAH,EAAAa,IAAAA,GAAAJ,EAAAI,IAAAA,GAAAF,EAAAE,IAAAA,GAAAD,EAAAC,IAAAA,GAAA,CAAA,CAAAX,MAAAL,EAAAtB,MAFboB,EAAEpB,MAAK,CAAA2B,MAAAL,EAAArB,QACLmB,EAAEnB,QAAO,CAAAqB,KAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-range.js","names":["Component","splitProps","Slider","InputRangeProps","InputRange","props","sliderProps","_$createComponent"],"sources":["../../../../../src/components/input/variants/input-range.tsx"],"sourcesContent":["import { Component, splitProps } from 'solid-js';\r\nimport { Slider } from '../../slider/slider';\r\nimport type { InputRangeProps } from '../input.types';\r\n\r\nexport const InputRange: Component<InputRangeProps> = (props => {\r\n const [, sliderProps] = splitProps(props, ['type']);\r\n return <Slider {...sliderProps} />;\r\n}) as Component<InputRangeProps>;\r\n"],"mappings":"qIAIA,IAAaI,GAA0CC,GAAS,CAC9D,GAAM,EAAGC,GAAeL,EAAWI,EAAO,CAAC,OAAO,CAAC,CACnD,OAAAE,EAAQL,EAAWI,EAAW"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{cn as e}from"../../../utils/cn.js";import{x_default as t}from"../../../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/x.js";import{DEFAULT_PROPS as n,inputTextVariants as r}from"../input.utils.js";import{className as i,createComponent as a,delegateEvents as o,effect as s,insert as c,memo as l,setAttribute as u,template as d,use as f}from"solid-js/web";import{Show as p,createEffect as m,createUniqueId as h,mergeProps as g,on as _,onCleanup as v,onMount as y}from"solid-js";import b from"imask/holder";import"imask/masked/number";import"imask/masked/pattern";var x=d(`<div class=it05>`),S=d(`<div tabindex=-1><input>`),C=d(`<div class=it03>`),w=d(`<div class=it04>`),T=(o=>{o=g({...n,id:h()},o);let d,T,E=()=>{T?.focus()},D=null;m(_(()=>o.maskOptions,e=>d&&e&&d.updateOptions(e),{defer:!0})),y(()=>{T&&o.maskOptions&&(d=b(T,o.maskOptions),D=e=>{o.onChange&&o.onChange(d?.value??``,e),o.maskOptions?.onAccept&&o.maskOptions?.onAccept(d?.value,d?.unmaskedValue)},d.on(`accept`,D),o.maskOptions.onAccept)}),v(function(){d&&(D&&d.off(`accept`,D),d.destroy())});let O=e=>{e.stopPropagation(),d?(d.value=``,d.updateValue()):T&&(T.value=``),o.onInput?.(``,void 0),o.onChange?.(``,void 0),T?.focus()};return(()=>{var n=S(),d=n.firstChild;n.$$click=E,c(n,()=>o.prefixIcon,d),d.$$keydown=e=>{(e.key===`Enter`||e.keyCode===13)&&(e.preventDefault(),o.onPressEnter?.(e.currentTarget.value,e))},d.$$input=e=>o.onInput?.(e.currentTarget.value,e),d.addEventListener(`change`,e=>o.onChange?.(e.currentTarget.value,e)),d.addEventListener(`blur`,e=>o.onBlur?.(e.currentTarget.value,e));var m=T;return typeof m==`function`?f(m,d):T=d,c(n,a(p,{get when(){return o.allowClear||o.suffixIcon},get children(){var e=x();return c(e,(()=>{var e=l(()=>!!o.allowClear);return()=>e()&&(()=>{var e=C();return e.$$click=O,c(e,a(t,{class:`m-auto size-2`})),e})()})(),null),c(e,(()=>{var e=l(()=>!!o.suffixIcon);return()=>e()&&(()=>{var e=w();return c(e,()=>o.suffixIcon),e})()})(),null),e}}),null),s(t=>{var a=e(`it01`,`input-${o.type}`,r({color:o.color,size:o.size,variant:o.variant}),o.class?.root,o.disabled&&`border-c5 pointer-events-none`),s=o.id,c=o.type||`text`,l=o.typeOrigin,f=o.placeholder,p=e(`text-c2 grow`,o.class?.input),m=o.disabled;return a!==t.e&&i(n,t.e=a),s!==t.t&&u(d,`id`,t.t=s),c!==t.a&&u(d,`type`,t.a=c),l!==t.o&&u(d,`data-type`,t.o=l),f!==t.i&&u(d,`placeholder`,t.i=f),p!==t.n&&i(d,t.n=p),m!==t.s&&(d.disabled=t.s=m),t},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0}),s(()=>d.value=o.value??``),n})()});o([`click`,`input`,`keydown`]);export{T as InputText};
|
|
2
|
+
//# sourceMappingURL=input-text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-text.js","names":["cn","FactoryArg","InputMask","IMask","X","Component","createEffect","createUniqueId","mergeProps","on","onCleanup","onMount","Show","InputTextProps","DEFAULT_PROPS","inputTextVariants","InputText","p","id","maskInstance","inputRef","HTMLInputElement","focusInput","focus","maskAcceptEvent","maskOptions","value","updateOptions","defer","e","InputEvent","onChange","onAccept","unmaskedValue","destroyTextMask","off","destroy","handleClear","MouseEvent","stopPropagation","updateValue","onInput","undefined","_el$","_tmpl$2","_el$2","firstChild","$$click","_$insert","prefixIcon","$$keydown","key","keyCode","preventDefault","onPressEnter","currentTarget","$$input","addEventListener","onBlur","_ref$","_$use","_$createComponent","when","allowClear","suffixIcon","children","_el$3","_tmpl$","_c$","_$memo","_el$4","_tmpl$3","_c$2","_el$5","_tmpl$4","_$effect","_p$","_v$","type","color","size","variant","class","root","disabled","_v$2","_v$3","_v$4","typeOrigin","_v$5","placeholder","_v$6","input","_v$7","_$className","t","_$setAttribute","a","o","i","n","s","_$delegateEvents"],"sources":["../../../../../src/components/input/variants/input-text.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport type { FactoryArg, InputMask } from 'imask';\r\nimport IMask from 'imask/holder';\r\nimport 'imask/masked/number';\r\nimport 'imask/masked/pattern';\r\nimport X from 'lucide-solid/icons/x';\r\nimport {\r\n Component,\r\n createEffect,\r\n createUniqueId,\r\n mergeProps,\r\n on,\r\n onCleanup,\r\n onMount,\r\n Show,\r\n} from 'solid-js';\r\nimport type { InputTextProps } from '../input.types';\r\nimport { DEFAULT_PROPS, inputTextVariants } from '../input.utils';\r\n\r\nexport const InputText: Component<InputTextProps> = (p => {\r\n p = mergeProps({ ...DEFAULT_PROPS, id: createUniqueId() }, p);\r\n let maskInstance: InputMask<FactoryArg> | undefined;\r\n let inputRef: HTMLInputElement | undefined;\r\n const focusInput = () => {\r\n inputRef?.focus();\r\n };\r\n let maskAcceptEvent: any = null;\r\n createEffect(\r\n on(\r\n () => p.maskOptions,\r\n value => maskInstance && value && maskInstance.updateOptions(value),\r\n { defer: true },\r\n ),\r\n );\r\n onMount(() => {\r\n if (inputRef && p.maskOptions) {\r\n maskInstance = IMask(inputRef, p.maskOptions);\r\n\r\n maskAcceptEvent = (e: InputEvent) => {\r\n p.onChange && p.onChange(maskInstance?.value ?? '', e);\r\n p.maskOptions?.onAccept &&\r\n p.maskOptions?.onAccept(maskInstance?.value, maskInstance?.unmaskedValue);\r\n };\r\n maskInstance.on('accept', maskAcceptEvent);\r\n if (typeof p.maskOptions.onAccept === 'function') {\r\n }\r\n }\r\n });\r\n onCleanup(function destroyTextMask() {\r\n if (maskInstance) {\r\n maskAcceptEvent && maskInstance.off('accept', maskAcceptEvent);\r\n maskInstance.destroy();\r\n }\r\n });\r\n const handleClear = (e: MouseEvent) => {\r\n e.stopPropagation();\r\n if (maskInstance) {\r\n maskInstance.value = '';\r\n maskInstance.updateValue();\r\n } else if (inputRef) {\r\n inputRef.value = '';\r\n }\r\n p.onInput?.('', undefined as any);\r\n p.onChange?.('', undefined as any);\r\n inputRef?.focus();\r\n };\r\n return (\r\n <div\r\n tabIndex={-1}\r\n class={cn(\r\n 'it01',\r\n `input-${p.type}`,\r\n inputTextVariants({ color: p.color, size: p.size, variant: p.variant }),\r\n p.class?.root,\r\n p.disabled && 'border-c5 pointer-events-none',\r\n )}\r\n onClick={focusInput}\r\n >\r\n {p.prefixIcon}\r\n <input\r\n id={p.id}\r\n ref={inputRef}\r\n type={p.type || 'text'}\r\n data-type={p.typeOrigin}\r\n value={p.value ?? ''}\r\n placeholder={p.placeholder}\r\n class={cn('text-c2 grow', p.class?.input)}\r\n onBlur={e => p.onBlur?.(e.currentTarget.value, e)}\r\n onChange={e => p.onChange?.(e.currentTarget.value, e)}\r\n onInput={e => p.onInput?.(e.currentTarget.value, e)}\r\n onKeyDown={e => {\r\n if (e.key === 'Enter' || e.keyCode === 13) {\r\n e.preventDefault();\r\n p.onPressEnter?.(e.currentTarget.value, e);\r\n }\r\n }}\r\n disabled={p.disabled}\r\n />\r\n <Show when={p.allowClear || p.suffixIcon}>\r\n <div class=\"it05\">\r\n {p.allowClear && (\r\n <div class=\"it03\" onClick={handleClear}>\r\n <X class=\"m-auto size-2\" />\r\n </div>\r\n )}\r\n {p.suffixIcon && <div class=\"it04\">{p.suffixIcon}</div>}\r\n </div>\r\n </Show>\r\n </div>\r\n );\r\n}) as Component<InputTextProps>;\r\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{cn as e}from"../../../utils/cn.js";import{x_default as t}from"../../../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/x.js";import{DEFAULT_PROPS as n,textareaVariants as r}from"../input.utils.js";import{className as i,createComponent as a,delegateEvents as o,effect as s,insert as c,memo as l,setAttribute as u,template as d,use as f}from"solid-js/web";import{createUniqueId as p,mergeProps as m}from"solid-js";var h=d(`<div><textarea>`),g=d(`<div class=ta02>`),_=(o=>{o=m({...n,size:`md`,id:p()},o);let d,_=e=>{e.preventDefault(),e.stopPropagation(),d&&(d.value=``),o.onInput?.(``,void 0),o.onChange?.(``,void 0),d?.focus()};return(()=>{var n=h(),p=n.firstChild;p.$$input=e=>o.onInput?.(e.currentTarget.value,e),p.addEventListener(`change`,e=>o.onChange?.(e.currentTarget.value,e)),p.addEventListener(`blur`,e=>o.onBlur?.(e.currentTarget.value,e));var m=d;return typeof m==`function`?f(m,p):d=p,c(n,(()=>{var e=l(()=>!!o.allowClear);return()=>e()&&(()=>{var e=g();return e.$$mousedown=_,c(e,a(t,{class:`m-auto size-2`})),e})()})(),null),s(t=>{var a=e(`ta01`,r({color:o.color,variant:o.variant,size:o.size}),o.class?.root,o.disabled&&`border-c5 pointer-events-none`),s=o.id,c=o.placeholder,l=e(`text-c2 grow resize-y`,o.class?.input),d=o.disabled;return a!==t.e&&i(n,t.e=a),s!==t.t&&u(p,`id`,t.t=s),c!==t.a&&u(p,`placeholder`,t.a=c),l!==t.o&&i(p,t.o=l),d!==t.i&&(p.disabled=t.i=d),t},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),s(()=>p.value=o.value??``),n})()});o([`input`,`mousedown`]);export{_ as InputTextArea};
|
|
2
|
+
//# sourceMappingURL=input-textarea.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-textarea.js","names":["cn","X","Component","createUniqueId","mergeProps","InputTextAreaProps","DEFAULT_PROPS","textareaVariants","InputTextArea","p","size","const","id","textareaRef","HTMLTextAreaElement","handleClear","e","MouseEvent","preventDefault","stopPropagation","value","onInput","undefined","onChange","focus","_el$","_tmpl$","_el$2","firstChild","$$input","currentTarget","addEventListener","onBlur","_ref$","_$use","_$insert","_c$","_$memo","allowClear","_el$3","_tmpl$2","$$mousedown","_$createComponent","_$effect","_p$","_v$","color","variant","class","root","disabled","_v$2","_v$3","placeholder","_v$4","input","_v$5","_$className","t","_$setAttribute","a","o","i","_$delegateEvents"],"sources":["../../../../../src/components/input/variants/input-textarea.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport X from 'lucide-solid/icons/x';\r\nimport { Component, createUniqueId, mergeProps } from 'solid-js';\r\nimport type { InputTextAreaProps } from '../input.types';\r\nimport { DEFAULT_PROPS, textareaVariants } from '../input.utils';\r\n\r\nexport const InputTextArea: Component<InputTextAreaProps> = (p => {\r\n p = mergeProps({ ...DEFAULT_PROPS, size: 'md' as const, id: createUniqueId() }, p);\r\n let textareaRef: HTMLTextAreaElement | undefined;\r\n\r\n const handleClear = (e: MouseEvent) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (textareaRef) {\r\n textareaRef.value = '';\r\n }\r\n p.onInput?.('', undefined as any);\r\n p.onChange?.('', undefined as any);\r\n textareaRef?.focus();\r\n };\r\n\r\n return (\r\n <div\r\n class={cn(\r\n 'ta01',\r\n textareaVariants({ color: p.color, variant: p.variant, size: p.size }),\r\n p.class?.root,\r\n p.disabled && 'border-c5 pointer-events-none',\r\n )}\r\n >\r\n <textarea\r\n id={p.id}\r\n placeholder={p.placeholder}\r\n ref={textareaRef}\r\n value={p.value ?? ''}\r\n class={cn('text-c2 grow resize-y', p.class?.input)}\r\n onBlur={e => p.onBlur?.(e.currentTarget.value, e)}\r\n onChange={e => p.onChange?.(e.currentTarget.value, e)}\r\n onInput={e => p.onInput?.(e.currentTarget.value, e)}\r\n disabled={p.disabled}\r\n />\r\n {p.allowClear && (\r\n <div class=\"ta02\" onMouseDown={handleClear}>\r\n <X class=\"m-auto size-2\" />\r\n </div>\r\n )}\r\n </div>\r\n );\r\n}) as Component<InputTextAreaProps>;\r\n"],"mappings":"2gBAMaQ,GAAgDC,GAAK,CAChEA,EAAIL,EAAW,CAAE,GAAGE,EAAeI,KAAM,KAAeE,GAAIT,GAAe,CAAG,CAAEM,EAAE,CAClF,IAAII,EAEEE,EAAeC,GAAkB,CACrCA,EAAEE,gBAAgB,CAClBF,EAAEG,iBAAiB,CACfN,IACFA,EAAYO,MAAQ,IAEtBX,EAAEY,UAAU,GAAIC,IAAAA,GAAiB,CACjCb,EAAEc,WAAW,GAAID,IAAAA,GAAiB,CAClCT,GAAaW,OAAO,EAGtB,WAAA,CAAA,IAAAC,EAAAC,GAAA,CAAAC,EAAAF,EAAAG,WAAAD,EAAAE,QAiBeb,GAAKP,EAAEY,UAAUL,EAAEc,cAAcV,MAAOJ,EAAE,CAAAW,EAAAI,iBAAA,SADzCf,GAAKP,EAAEc,WAAWP,EAAEc,cAAcV,MAAOJ,EAAE,CAAA,CAAAW,EAAAI,iBAAA,OAD7Cf,GAAKP,EAAEuB,SAAShB,EAAEc,cAAcV,MAAOJ,EAAE,CAAA,CAAA,IAAAiB,EAH5CpB,EACe,OADJ,OAAAoB,GAAA,WAAAC,EAAAD,EAAAN,EAAA,CAAXd,EAAWc,EAAAQ,EAAAV,OAAA,CAAA,IAAAW,EAAAC,MAAA,CAAA,CAQjB5B,EAAE6B,WAAU,CAAA,UAAZF,GAAA,OAAA,CAAA,IAAAG,EAAAC,GAAA,CAEK,MAFLD,GAAAE,YACgC1B,EAAWoB,EAAAI,EAAAG,EACvCzC,EAAC,CAAA,MAAA,gBAAA,CAAA,CAAA,CAAAsC,KAEL,IAAA,CAAA,KAAA,CAAAI,EAAAC,GAAA,CAAA,IAAAC,EAtBM7C,EACL,OACAO,EAAiB,CAAEuC,MAAOrC,EAAEqC,MAAOC,QAAStC,EAAEsC,QAASrC,KAAMD,EAAEC,KAAM,CAAC,CACtED,EAAEuC,OAAOC,KACTxC,EAAEyC,UAAY,gCACf,CAAAC,EAGK1C,EAAEG,GAAEwC,EACK3C,EAAE4C,YAAWC,EAGnBtD,EAAG,wBAAyBS,EAAEuC,OAAOO,MAAM,CAAAC,EAIxC/C,EAAEyC,SAAQ,OAAAL,IAAAD,EAAA5B,GAAAyC,EAAAhC,EAAAmB,EAAA5B,EAAA6B,EAAA,CAAAM,IAAAP,EAAAc,GAAAC,EAAAhC,EAAA,KAAAiB,EAAAc,EAAAP,EAAA,CAAAC,IAAAR,EAAAgB,GAAAD,EAAAhC,EAAA,cAAAiB,EAAAgB,EAAAR,EAAA,CAAAE,IAAAV,EAAAiB,GAAAJ,EAAA9B,EAAAiB,EAAAiB,EAAAP,EAAA,CAAAE,IAAAZ,EAAAkB,IAAAnC,EAAAuB,SAAAN,EAAAkB,EAAAN,GAAAZ,GAAA,CAAA5B,EAAAM,IAAAA,GAAAoC,EAAApC,IAAAA,GAAAsC,EAAAtC,IAAAA,GAAAuC,EAAAvC,IAAAA,GAAAwC,EAAAxC,IAAAA,GAAA,CAAA,CAAAqB,MAAAhB,EAAAP,MALbX,EAAEW,OAAS,GAAE,CAAAK,KAAA,GAcQsC,EAAA,CAAA,QAAA,YAAA,CAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{cn as e}from"../../utils/cn.js";import{loader_default as t}from"../../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/loader.js";import{className as n,createComponent as r,effect as i,setAttribute as a,setStyleProperty as o,style as s,template as c}from"solid-js/web";import{cva as l}from"class-variance-authority";import{Match as u,Switch as d,createUniqueId as f,mergeProps as p}from"solid-js";var m=c(`<div>`),h=c(`<div><svg width=inherit height=inherit viewBox="0 0 20 20"fill=none xmlns=http://www.w3.org/2000/svg><ellipse cx=9.99995 cy=9.99995 rx=7.31001 ry=7.31001 stroke-opacity=0.25 stroke-width=4></ellipse><path d="M9.94939 2.69013C11.8881 2.67671 13.7527 3.43398 15.133 4.79535C16.5134 6.15671 17.2964 8.01067 17.3098 9.94936"stroke-width=4 stroke-linecap=round stroke-dasharray="1.23 1.23"></path><defs><linearGradient x1=16.3108 y1=13.6892 x2=3.68922 y2=6.31075 gradientUnits=userSpaceOnUse><stop></stop><stop offset=0.5 stop-opacity=0.01></stop><stop offset=1 stop-opacity=0>`),g=c(`<div><svg fill=currentColor viewBox="0 0 24 24"xmlns=http://www.w3.org/2000/svg><g><circle cx=12 cy=3 r=1><animate id=_dcbb18 begin=0;_84a13e.end-0.5s attributeName=r calcMode=spline dur=0.6s values=1;2;1 keySplines=.27,.42,.37,.99;.53,0,.61,.73></animate></circle><circle cx=16.50 cy=4.21 r=1><animate id=_92c238 begin=_dcbb18.begin+0.1s attributeName=r calcMode=spline dur=0.6s values=1;2;1 keySplines=.27,.42,.37,.99;.53,0,.61,.73></animate></circle><circle cx=7.50 cy=4.21 r=1><animate id=_84a13e begin=_5abc3e.begin+0.1s attributeName=r calcMode=spline dur=0.6s values=1;2;1 keySplines=.27,.42,.37,.99;.53,0,.61,.73></animate></circle><circle cx=19.79 cy=7.50 r=1><animate id=_9d19c8 begin=_92c238.begin+0.1s attributeName=r calcMode=spline dur=0.6s values=1;2;1 keySplines=.27,.42,.37,.99;.53,0,.61,.73></animate></circle><circle cx=4.21 cy=7.50 r=1><animate id=_5abc3e begin=_dcfbb2.begin+0.1s attributeName=r calcMode=spline dur=0.6s values=1;2;1 keySplines=.27,.42,.37,.99;.53,0,.61,.73></animate></circle><circle cx=21.00 cy=12.00 r=1><animate id=_cf88a3 begin=_9d19c8.begin+0.1s attributeName=r calcMode=spline dur=0.6s values=1;2;1 keySplines=.27,.42,.37,.99;.53,0,.61,.73></animate></circle><circle cx=3.00 cy=12.00 r=1><animate id=_dcfbb2 begin=_514e98.begin+0.1s attributeName=r calcMode=spline dur=0.6s values=1;2;1 keySplines=.27,.42,.37,.99;.53,0,.61,.73></animate></circle><circle cx=19.79 cy=16.50 r=1><animate id=_2fecf8 begin=_cf88a3.begin+0.1s attributeName=r calcMode=spline dur=0.6s values=1;2;1 keySplines=.27,.42,.37,.99;.53,0,.61,.73></animate></circle><circle cx=4.21 cy=16.50 r=1><animate id=_514e98 begin=_c4d048.begin+0.1s attributeName=r calcMode=spline dur=0.6s values=1;2;1 keySplines=.27,.42,.37,.99;.53,0,.61,.73></animate></circle><circle cx=16.50 cy=19.79 r=1><animate id=_033759 begin=_2fecf8.begin+0.1s attributeName=r calcMode=spline dur=0.6s values=1;2;1 keySplines=.27,.42,.37,.99;.53,0,.61,.73></animate></circle><circle cx=7.50 cy=19.79 r=1><animate id=_c4d048 begin=_3ec8bd.begin+0.1s attributeName=r calcMode=spline dur=0.6s values=1;2;1 keySplines=.27,.42,.37,.99;.53,0,.61,.73></animate></circle><circle cx=12 cy=21 r=1><animate id=_3ec8bd begin=_033759.begin+0.1s attributeName=r calcMode=spline dur=0.6s values=1;2;1 keySplines=.27,.42,.37,.99;.53,0,.61,.73></animate></circle><animateTransform attributeName=transform type=rotate dur=6s values="360 12 12;0 12 12"repeatCount=indefinite>`),_=c(`<svg xmlns=http://www.w3.org/2000/svg xmlns:xlink=http://www.w3.org/1999/xlink x=0px y=0px viewBox="0 0 2400 2400"><g stroke-width=200 stroke-linecap=round stroke=currentColor fill=none id=spinner><line x1=1200 y1=600 x2=1200 y2=100></line><line opacity=0.5 x1=1200 y1=2300 x2=1200 y2=1800></line><line opacity=0.917 x1=900 y1=680.4 x2=650 y2=247.4></line><line opacity=0.417 x1=1750 y1=2152.6 x2=1500 y2=1719.6></line><line opacity=0.833 x1=680.4 y1=900 x2=247.4 y2=650></line><line opacity=0.333 x1=2152.6 y1=1750 x2=1719.6 y2=1500></line><line opacity=0.75 x1=600 y1=1200 x2=100 y2=1200></line><line opacity=0.25 x1=2300 y1=1200 x2=1800 y2=1200></line><line opacity=0.667 x1=680.4 y1=1500 x2=247.4 y2=1750></line><line opacity=0.167 x1=2152.6 y1=650 x2=1719.6 y2=900></line><line opacity=0.583 x1=900 y1=1719.6 x2=650 y2=2152.6></line><line opacity=0.083 x1=1750 y1=247.4 x2=1500 y2=680.4></line><animateTransform attributeName=transform attributeType=XML type=rotate keyTimes=0;0.08333;0.16667;0.25;0.33333;0.41667;0.5;0.58333;0.66667;0.75;0.83333;0.91667 values="0 1199 1199;30 1199 1199;60 1199 1199;90 1199 1199;120 1199 1199;150 1199 1199;180 1199 1199;210 1199 1199;240 1199 1199;270 1199 1199;300 1199 1199;330 1199 1199"dur=0.83333s begin=0s repeatCount=indefinite calcMode=discrete>`),v=c(`<svg fill=none viewBox="0 0 20 20"xmlns=http://www.w3.org/2000/svg><defs><linearGradient><stop offset=0% stop-color=currentColor stop-opacity=1></stop><stop offset=100% stop-color=currentColor stop-opacity=0.25></stop></linearGradient></defs><circle cx=10 cy=10 r=8 stroke-width=2 class=animate-spin fill=none style="transform-origin:50% 50%">`),y=l(`loading`,{variants:{variant:{spinner:`loading-spinner`,"spinner-2":`loading-spinner-2`,dots:`loading-dots`,ring:`loading-ring`,ball:`loading-ball`,bars:`loading-bars`,infinity:`loading-infinity`},size:{xs:`loading-xs`,sm:`loading-sm`,md:`loading-md`,lg:`loading-lg`,xl:`loading-xl`}}}),b={xs:`loading-svg-xs`,sm:`loading-svg-sm`,md:`loading-svg-md`,lg:`loading-svg-lg`,xl:`loading-svg-xl`},x={primary:`var(--color-primary)`,secondary:`var(--color-secondary)`,accent:`var(--color-accent)`,neutral:`var(--color-neutral)`,info:`var(--color-info)`,success:`var(--color-success)`,warning:`var(--color-warning)`,error:`var(--color-error)`};function S(e){if(e)return e in x?x[e]:e}var C=t=>{let a=p({variant:`spinner`,size:`sm`},t),o=()=>![`spinner-3`,`spinner-4`,`spinner-5`,`spinner-6`].includes(a.variant),c=()=>S(a.color),l=()=>e(b[a.size],a.class);return r(d,{get children(){return[r(u,{get when(){return o()},get children(){var t=m();return i(r=>{var i=e(y({variant:a.variant,size:a.size}),a.class),o=c()?{color:c()}:void 0;return i!==r.e&&n(t,r.e=i),r.t=s(t,o,r.t),r},{e:void 0,t:void 0}),t}}),r(u,{get when(){return a.variant===`spinner-3`},get children(){return r(T,{get class(){return l()},get color(){return c()}})}}),r(u,{get when(){return a.variant===`spinner-4`},get children(){return r(E,{get class(){return l()},get color(){return c()}})}}),r(u,{get when(){return a.variant===`spinner-5`},get children(){return r(D,{get class(){return l()},get color(){return c()}})}}),r(u,{get when(){return a.variant===`spinner-6`},get children(){return r(O,{get class(){return l()},get color(){return c()}})}})]}})},w=t=>{let r=f();return t=p({color:`#6E56CF`},t),(()=>{var o=h(),s=o.firstChild.firstChild,c=s.nextSibling,l=c.nextSibling.firstChild,u=l.firstChild,d=u.nextSibling,f=d.nextSibling;return a(c,`stroke`,`url(#${r})`),a(l,`id`,r),i(r=>{var i=e(`size-3 animate-spin`,t.class),c=t.color,l=t.color,p=t.color,m=t.color;return i!==r.e&&n(o,r.e=i),c!==r.t&&a(s,`stroke`,r.t=c),l!==r.a&&a(u,`stop-color`,r.a=l),p!==r.o&&a(d,`stop-color`,r.o=p),m!==r.i&&a(f,`stop-color`,r.i=m),r},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),o})()},T=t=>(t=p({color:`currentColor`},t),(()=>{var r=g();return i(i=>{var a=e(`size-7 p-0`,t.class),s=t.color;return a!==i.e&&n(r,i.e=a),s!==i.t&&o(r,`color`,i.t=s),i},{e:void 0,t:void 0}),r})()),E=n=>r(t,{get class(){return e(`animate-spin`,n.class)},get color(){return n.color}}),D=e=>(e=p({class:`size-6`},e),(()=>{var t=_();return i(n=>{var r=e.class,i=e.color;return r!==n.e&&a(t,`class`,n.e=r),i!==n.t&&o(t,`color`,n.t=i),n},{e:void 0,t:void 0}),t})()),O=e=>{e=p({class:`size-6`},e);let t=f();return(()=>{var n=v(),r=n.firstChild,s=r.firstChild,c=r.nextSibling;return a(s,`id`,t),a(c,`stroke`,`url(#${t})`),i(t=>{var r=e.class,i=e.color;return r!==t.e&&a(n,`class`,t.e=r),i!==t.t&&o(n,`color`,t.t=i),t},{e:void 0,t:void 0}),n})()};export{C as Loading,w as Spinner};
|
|
2
|
+
//# sourceMappingURL=loading.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loading.js","names":["cn","BaseColorProps","cva","VariantProps","Component","createUniqueId","mergeProps","Switch","Match","Loader","daisy_variants","variants","variant","spinner","dots","ring","ball","bars","infinity","size","xs","sm","md","lg","xl","svg_size_map","const","base_color_vars","Record","primary","secondary","accent","neutral","info","success","warning","error","resolveColor","color","undefined","DaisyVariant","SvgVariant","SizeKey","LoadingProps","class","LoadingVariantsProps","Loading","props","p","isDaisy","includes","resolvedColor","svgClass","_$createComponent","children","when","_el$","_tmpl$","_$effect","_p$","_v$","_v$2","e","_$className","t","_$style","LoadingSpinner3","LoadingSpinner4","LoadingSpinner5","LoadingSpinner6","Spinner","id","_el$2","_tmpl$2","_el$3","firstChild","_el$4","_el$5","nextSibling","_el$6","_el$7","_el$8","_el$9","_el$0","_$setAttribute","_v$3","_v$4","_v$5","_v$6","_v$7","a","o","i","_el$1","_tmpl$3","_v$8","_v$9","_$setStyleProperty","_el$10","_tmpl$4","_v$0","_v$1","_el$11","_tmpl$5","_el$12","_el$13","_el$14","_v$10","_v$11"],"sources":["../../../../src/components/loading/loading.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport { BaseColorProps } from '@/type';\r\nimport { cva, VariantProps } from 'class-variance-authority';\r\nimport { Component, createUniqueId, mergeProps, Switch, Match } from 'solid-js';\r\nimport Loader from 'lucide-solid/icons/loader';\r\n\r\n// Variants dùng DaisyUI classes (spinner, spinner-2, dots, ring, ball, bars, infinity)\r\nconst daisy_variants = cva('loading', {\r\n variants: {\r\n variant: {\r\n spinner: 'loading-spinner',\r\n 'spinner-2': 'loading-spinner-2',\r\n dots: 'loading-dots',\r\n ring: 'loading-ring',\r\n ball: 'loading-ball',\r\n bars: 'loading-bars',\r\n infinity: 'loading-infinity',\r\n },\r\n size: {\r\n xs: 'loading-xs',\r\n sm: 'loading-sm',\r\n md: 'loading-md',\r\n lg: 'loading-lg',\r\n xl: 'loading-xl',\r\n },\r\n },\r\n});\r\n\r\n// Map size → CSS class cho SVG-based spinners\r\nconst svg_size_map = {\r\n xs: 'loading-svg-xs',\r\n sm: 'loading-svg-sm',\r\n md: 'loading-svg-md',\r\n lg: 'loading-svg-lg',\r\n xl: 'loading-svg-xl',\r\n} as const;\r\n\r\n// Map BaseColorProps → CSS variable của DaisyUI/Tailwind\r\nconst base_color_vars: Record<BaseColorProps, string> = {\r\n primary: 'var(--color-primary)',\r\n secondary: 'var(--color-secondary)',\r\n accent: 'var(--color-accent)',\r\n neutral: 'var(--color-neutral)',\r\n info: 'var(--color-info)',\r\n success: 'var(--color-success)',\r\n warning: 'var(--color-warning)',\r\n error: 'var(--color-error)',\r\n};\r\n\r\n/** Resolve color prop: nếu là BaseColorProps key thì map sang CSS var, còn lại dùng trực tiếp */\r\nfunction resolveColor(color: string | undefined): string | undefined {\r\n if (!color) return undefined;\r\n return color in base_color_vars ? base_color_vars[color as BaseColorProps] : color;\r\n}\r\n\r\ntype DaisyVariant = 'spinner' | 'spinner-2' | 'dots' | 'ring' | 'ball' | 'bars' | 'infinity';\r\ntype SvgVariant = 'spinner-3' | 'spinner-4' | 'spinner-5' | 'spinner-6';\r\ntype SizeKey = keyof typeof svg_size_map;\r\n\r\ntype LoadingProps = {\r\n variant?: DaisyVariant | SvgVariant;\r\n size?: SizeKey;\r\n /** Nhận BaseColorProps ('primary', 'error', ...) hoặc bất kỳ giá trị CSS color nào */\r\n color?: BaseColorProps | string;\r\n class?: string;\r\n};\r\n\r\nexport type LoadingVariantsProps = VariantProps<typeof daisy_variants>;\r\n\r\nexport const Loading: Component<LoadingProps> = props => {\r\n const p = mergeProps({ variant: 'spinner' as const, size: 'sm' as const }, props);\r\n\r\n const isDaisy = () =>\r\n !['spinner-3', 'spinner-4', 'spinner-5', 'spinner-6'].includes(p.variant as string);\r\n\r\n const resolvedColor = () => resolveColor(p.color);\r\n const svgClass = () => cn(svg_size_map[p.size as SizeKey], p.class);\r\n\r\n return (\r\n <Switch>\r\n <Match when={isDaisy()}>\r\n <div\r\n class={cn(\r\n daisy_variants({\r\n variant: p.variant as DaisyVariant,\r\n size: p.size,\r\n }),\r\n p.class,\r\n )}\r\n style={resolvedColor() ? { color: resolvedColor() } : undefined}\r\n />\r\n </Match>\r\n <Match when={p.variant === 'spinner-3'}>\r\n <LoadingSpinner3 class={svgClass()} color={resolvedColor()} />\r\n </Match>\r\n <Match when={p.variant === 'spinner-4'}>\r\n <LoadingSpinner4 class={svgClass()} color={resolvedColor()} />\r\n </Match>\r\n <Match when={p.variant === 'spinner-5'}>\r\n <LoadingSpinner5 class={svgClass()} color={resolvedColor()} />\r\n </Match>\r\n <Match when={p.variant === 'spinner-6'}>\r\n <LoadingSpinner6 class={svgClass()} color={resolvedColor()} />\r\n </Match>\r\n </Switch>\r\n );\r\n};\r\nexport const Spinner: Component<{ class?: string; color?: string }> = p => {\r\n const id = createUniqueId();\r\n\r\n p = mergeProps({ color: '#6E56CF' } as const, p);\r\n\r\n return (\r\n <div class={cn('size-3 animate-spin', p.class)}>\r\n <svg\r\n width=\"inherit\"\r\n height=\"inherit\"\r\n viewBox=\"0 0 20 20\"\r\n fill=\"none\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n >\r\n <ellipse\r\n cx=\"9.99995\"\r\n cy=\"9.99995\"\r\n rx=\"7.31001\"\r\n ry=\"7.31001\"\r\n stroke={p.color}\r\n stroke-opacity=\"0.25\"\r\n stroke-width=\"4\"\r\n />\r\n <path\r\n d=\"M9.94939 2.69013C11.8881 2.67671 13.7527 3.43398 15.133 4.79535C16.5134 6.15671 17.2964 8.01067 17.3098 9.94936\"\r\n stroke={`url(#${id})`}\r\n stroke-width=\"4\"\r\n stroke-linecap=\"round\"\r\n stroke-dasharray=\"1.23 1.23\"\r\n />\r\n <defs>\r\n <linearGradient\r\n id={id}\r\n x1=\"16.3108\"\r\n y1=\"13.6892\"\r\n x2=\"3.68922\"\r\n y2=\"6.31075\"\r\n gradientUnits=\"userSpaceOnUse\"\r\n >\r\n <stop stop-color={p.color} />\r\n <stop offset=\"0.5\" stop-color={p.color} stop-opacity=\"0.01\" />\r\n <stop offset=\"1\" stop-color={p.color} stop-opacity=\"0\" />\r\n </linearGradient>\r\n </defs>\r\n </svg>\r\n </div>\r\n );\r\n};\r\nconst LoadingSpinner3: Component<{ class?: string; color?: string }> = p => {\r\n p = mergeProps({ color: 'currentColor' } as const, p);\r\n return (\r\n <div class={cn('size-7 p-0', p.class)} style={{ color: p.color }}>\r\n <svg fill=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\r\n <g>\r\n <circle cx=\"12\" cy=\"3\" r=\"1\">\r\n <animate\r\n id=\"_dcbb18\"\r\n begin=\"0;_84a13e.end-0.5s\"\r\n attributeName=\"r\"\r\n calcMode=\"spline\"\r\n dur=\"0.6s\"\r\n values=\"1;2;1\"\r\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\r\n />\r\n </circle>\r\n <circle cx=\"16.50\" cy=\"4.21\" r=\"1\">\r\n <animate\r\n id=\"_92c238\"\r\n begin=\"_dcbb18.begin+0.1s\"\r\n attributeName=\"r\"\r\n calcMode=\"spline\"\r\n dur=\"0.6s\"\r\n values=\"1;2;1\"\r\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\r\n />\r\n </circle>\r\n <circle cx=\"7.50\" cy=\"4.21\" r=\"1\">\r\n <animate\r\n id=\"_84a13e\"\r\n begin=\"_5abc3e.begin+0.1s\"\r\n attributeName=\"r\"\r\n calcMode=\"spline\"\r\n dur=\"0.6s\"\r\n values=\"1;2;1\"\r\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\r\n />\r\n </circle>\r\n <circle cx=\"19.79\" cy=\"7.50\" r=\"1\">\r\n <animate\r\n id=\"_9d19c8\"\r\n begin=\"_92c238.begin+0.1s\"\r\n attributeName=\"r\"\r\n calcMode=\"spline\"\r\n dur=\"0.6s\"\r\n values=\"1;2;1\"\r\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\r\n />\r\n </circle>\r\n <circle cx=\"4.21\" cy=\"7.50\" r=\"1\">\r\n <animate\r\n id=\"_5abc3e\"\r\n begin=\"_dcfbb2.begin+0.1s\"\r\n attributeName=\"r\"\r\n calcMode=\"spline\"\r\n dur=\"0.6s\"\r\n values=\"1;2;1\"\r\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\r\n />\r\n </circle>\r\n <circle cx=\"21.00\" cy=\"12.00\" r=\"1\">\r\n <animate\r\n id=\"_cf88a3\"\r\n begin=\"_9d19c8.begin+0.1s\"\r\n attributeName=\"r\"\r\n calcMode=\"spline\"\r\n dur=\"0.6s\"\r\n values=\"1;2;1\"\r\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\r\n />\r\n </circle>\r\n <circle cx=\"3.00\" cy=\"12.00\" r=\"1\">\r\n <animate\r\n id=\"_dcfbb2\"\r\n begin=\"_514e98.begin+0.1s\"\r\n attributeName=\"r\"\r\n calcMode=\"spline\"\r\n dur=\"0.6s\"\r\n values=\"1;2;1\"\r\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\r\n />\r\n </circle>\r\n <circle cx=\"19.79\" cy=\"16.50\" r=\"1\">\r\n <animate\r\n id=\"_2fecf8\"\r\n begin=\"_cf88a3.begin+0.1s\"\r\n attributeName=\"r\"\r\n calcMode=\"spline\"\r\n dur=\"0.6s\"\r\n values=\"1;2;1\"\r\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\r\n />\r\n </circle>\r\n <circle cx=\"4.21\" cy=\"16.50\" r=\"1\">\r\n <animate\r\n id=\"_514e98\"\r\n begin=\"_c4d048.begin+0.1s\"\r\n attributeName=\"r\"\r\n calcMode=\"spline\"\r\n dur=\"0.6s\"\r\n values=\"1;2;1\"\r\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\r\n />\r\n </circle>\r\n <circle cx=\"16.50\" cy=\"19.79\" r=\"1\">\r\n <animate\r\n id=\"_033759\"\r\n begin=\"_2fecf8.begin+0.1s\"\r\n attributeName=\"r\"\r\n calcMode=\"spline\"\r\n dur=\"0.6s\"\r\n values=\"1;2;1\"\r\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\r\n />\r\n </circle>\r\n <circle cx=\"7.50\" cy=\"19.79\" r=\"1\">\r\n <animate\r\n id=\"_c4d048\"\r\n begin=\"_3ec8bd.begin+0.1s\"\r\n attributeName=\"r\"\r\n calcMode=\"spline\"\r\n dur=\"0.6s\"\r\n values=\"1;2;1\"\r\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\r\n />\r\n </circle>\r\n <circle cx=\"12\" cy=\"21\" r=\"1\">\r\n <animate\r\n id=\"_3ec8bd\"\r\n begin=\"_033759.begin+0.1s\"\r\n attributeName=\"r\"\r\n calcMode=\"spline\"\r\n dur=\"0.6s\"\r\n values=\"1;2;1\"\r\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\r\n />\r\n </circle>\r\n <animateTransform\r\n attributeName=\"transform\"\r\n type=\"rotate\"\r\n dur=\"6s\"\r\n values=\"360 12 12;0 12 12\"\r\n repeatCount=\"indefinite\"\r\n />\r\n </g>\r\n </svg>\r\n </div>\r\n );\r\n};\r\nconst LoadingSpinner4: Component<{ class?: string; color?: string }> = p => {\r\n return <Loader class={cn('animate-spin', p.class)} color={p.color} />;\r\n};\r\nconst LoadingSpinner5: Component<{ class?: string; color?: string }> = p => {\r\n p = mergeProps({ class: 'size-6' } as const, p);\r\n return (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\r\n x=\"0px\"\r\n y=\"0px\"\r\n viewBox=\"0 0 2400 2400\"\r\n class={p.class}\r\n style={{ color: p.color }}\r\n >\r\n <g stroke-width=\"200\" stroke-linecap=\"round\" stroke=\"currentColor\" fill=\"none\" id=\"spinner\">\r\n <line x1=\"1200\" y1=\"600\" x2=\"1200\" y2=\"100\" />\r\n <line opacity=\"0.5\" x1=\"1200\" y1=\"2300\" x2=\"1200\" y2=\"1800\" />\r\n <line opacity=\"0.917\" x1=\"900\" y1=\"680.4\" x2=\"650\" y2=\"247.4\" />\r\n <line opacity=\"0.417\" x1=\"1750\" y1=\"2152.6\" x2=\"1500\" y2=\"1719.6\" />\r\n <line opacity=\"0.833\" x1=\"680.4\" y1=\"900\" x2=\"247.4\" y2=\"650\" />\r\n <line opacity=\"0.333\" x1=\"2152.6\" y1=\"1750\" x2=\"1719.6\" y2=\"1500\" />\r\n <line opacity=\"0.75\" x1=\"600\" y1=\"1200\" x2=\"100\" y2=\"1200\" />\r\n <line opacity=\"0.25\" x1=\"2300\" y1=\"1200\" x2=\"1800\" y2=\"1200\" />\r\n <line opacity=\"0.667\" x1=\"680.4\" y1=\"1500\" x2=\"247.4\" y2=\"1750\" />\r\n <line opacity=\"0.167\" x1=\"2152.6\" y1=\"650\" x2=\"1719.6\" y2=\"900\" />\r\n <line opacity=\"0.583\" x1=\"900\" y1=\"1719.6\" x2=\"650\" y2=\"2152.6\" />\r\n <line opacity=\"0.083\" x1=\"1750\" y1=\"247.4\" x2=\"1500\" y2=\"680.4\" />\r\n <animateTransform\r\n attributeName=\"transform\"\r\n attributeType=\"XML\"\r\n type=\"rotate\"\r\n keyTimes=\"0;0.08333;0.16667;0.25;0.33333;0.41667;0.5;0.58333;0.66667;0.75;0.83333;0.91667\"\r\n values=\"0 1199 1199;30 1199 1199;60 1199 1199;90 1199 1199;120 1199 1199;150 1199 1199;180 1199 1199;210 1199 1199;240 1199 1199;270 1199 1199;300 1199 1199;330 1199 1199\"\r\n dur=\"0.83333s\"\r\n begin=\"0s\"\r\n repeatCount=\"indefinite\"\r\n calcMode=\"discrete\"\r\n />\r\n </g>\r\n </svg>\r\n );\r\n};\r\nconst LoadingSpinner6: Component<{ class?: string; color?: string }> = p => {\r\n p = mergeProps({ class: 'size-6' } as const, p);\r\n const id = createUniqueId();\r\n return (\r\n <svg\r\n fill=\"none\"\r\n viewBox=\"0 0 20 20\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n class={p.class}\r\n style={{ color: p.color }}\r\n >\r\n <defs>\r\n <linearGradient id={id}>\r\n <stop offset=\"0%\" stop-color=\"currentColor\" stop-opacity=\"1\" />\r\n <stop offset=\"100%\" stop-color=\"currentColor\" stop-opacity=\"0.25\" />\r\n </linearGradient>\r\n </defs>\r\n <circle\r\n cx=\"10\"\r\n cy=\"10\"\r\n r=\"8\"\r\n stroke-width=\"2\"\r\n class=\"animate-spin\"\r\n stroke={`url(#${id})`}\r\n fill=\"none\"\r\n style={{ 'transform-origin': '50% 50%' }}\r\n />\r\n </svg>\r\n );\r\n};\r\n"],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mansory.js","names":["Accessor","Component","createEffect","createMemo","createRoot","createSignal","For","mergeProps","on","onCleanup","onMount","Show","untrack","cn","createThrottle","MansoryBreakpoint","MansoryItemLayout","MansoryProps","MansoryResponsive","MansoryVirtualOptions","BREAKPOINTS","Record","Exclude","sm","md","lg","xl","BP_KEYS","const","DEFAULT_COLUMNS","default","DEFAULT_GAP","GAP_CACHE_MAX","gapCache","Map","resolveResponsive","config","T","containerWidth","Array","isArray","map","i","length","key","undefined","measureGapPx","gapClass","container","HTMLElement","probe","document","createElement","className","style","display","gridTemplateColumns","appendChild","computed","getComputedStyle","gap","parseFloat","columnGap","removeChild","measureGapPxCached","has","get","value","size","firstKey","keys","next","delete","set","computeLayout","itemHeights","columns","gapPx","layouts","totalHeight","sortedByTop","cols","Math","max","totalGap","colWidth","colHeights","fill","minCol","c","left","top","height","item","index","width","push","j","splice","maxH","findFirstVisible","sorted","visTop","lo","hi","mid","MansoryItemProps","getLayoutAccessor","items","itemClass","children","onRegister","el","HTMLDivElement","onUnregister","MansoryItem","props","itemLayout","styles","l","wrapper","child","widthPx","transform","_el$","_tmpl$","_$use","unregisterItem","_$insert","_$effect","_p$","_v$","_v$2","_v$3","e","_$setAttribute","t","_$className","a","_$style","Mansory","rawProps","virtual","estimateItemHeight","loadMoreThreshold","containerEl","innerEl","setContainerWidth","setItemHeights","currentColumns","resolved","currentGapClass","setGapPx","trackGapClass","_","layout","layoutAccessors","layoutSetters","v","layoutDisposers","getOrCreateLayoutAccessor","layoutSignalRoot","dispose","initialValue","equals","b","disposeLayoutSignal","disposeAllLayoutSignals","values","clear","keyEntryCache","syncLayoutSetters","newLayouts","setter","virtualOpts","overscan","isVirtual","scrollTop","setScrollTop","rafId","pendingScrollTop","loadMoreCooldown","loadMoreTimer","ReturnType","setTimeout","pendingItemChanges","flushItemHeights","applyItemHeightChanges","snapshot","prev","hasChange","idx","h","cancelFlushItemHeights","cancel","itemRO","ResizeObserver","entries","entry","target","parseInt","dataset","mansoryIdx","contentBoxSize","blockSize","contentRect","disconnectItemResizeObserver","disconnect","applyContainerWidth","applyContainerWidthChange","containerRO","inlineSize","observe","disconnectContainerResizeObserver","itemElMap","registerItem","unobserve","len","prevLen","slice","checkLoadMore","currentScrollTop","onLoadMore","scrollHeight","clientHeight","clearTimeout","clearLoadMoreTimer","cancelPendingRaf","cancelAnimationFrame","handleScroll","requestAnimationFrame","allIndices","renderedIndices","viewportHeight","overscanPx","visBottom","start","indices","renderedKeys","getItemKey","activeKeys","Set","add","k","_el$2","_tmpl$3","_el$3","firstChild","_$addEventListener","_ref$","_ref$2","_$createComponent","each","when","_tmpl$2","_v$4","class","_v$5","_$setStyleProperty"],"sources":["../../../../src/components/mansory/mansory.tsx"],"sourcesContent":["import {\r\n Accessor,\r\n Component,\r\n createEffect,\r\n createMemo,\r\n createRoot,\r\n createSignal,\r\n For,\r\n mergeProps,\r\n on,\r\n onCleanup,\r\n onMount,\r\n Show,\r\n untrack,\r\n} from 'solid-js';\r\nimport { cn } from '@utils/cn';\r\nimport { createThrottle } from '@utils/helper';\r\nimport type {\r\n MansoryBreakpoint,\r\n MansoryItemLayout,\r\n MansoryProps,\r\n MansoryResponsive,\r\n MansoryVirtualOptions,\r\n} from './mansory.types';\r\n\r\nconst BREAKPOINTS: Record<Exclude<MansoryBreakpoint, 'default'>, number> = {\r\n sm: 640,\r\n md: 768,\r\n lg: 1024,\r\n xl: 1280,\r\n '2xl': 1536,\r\n};\r\n\r\nconst BP_KEYS = ['sm', 'md', 'lg', 'xl', '2xl'] as const;\r\n\r\nconst DEFAULT_COLUMNS: MansoryResponsive<number> = {\r\n default: 1,\r\n sm: 2,\r\n md: 3,\r\n lg: 4,\r\n};\r\n\r\nconst DEFAULT_GAP = 'gap-4';\r\n\r\nconst GAP_CACHE_MAX = 50;\r\nconst gapCache = new Map<string, number>();\r\n\r\nfunction resolveResponsive<T>(config: T | MansoryResponsive<T>, containerWidth: number): T {\r\n if (typeof config !== 'object' || config === null || Array.isArray(config)) {\r\n return config as T;\r\n }\r\n\r\n const map = config as MansoryResponsive<T>;\r\n\r\n for (let i = BP_KEYS.length - 1; i >= 0; i--) {\r\n const key = BP_KEYS[i];\r\n if (containerWidth >= BREAKPOINTS[key] && map[key] !== undefined) {\r\n return map[key] as T;\r\n }\r\n }\r\n\r\n return (map.default ?? (typeof config === 'object' ? undefined : config)) as T;\r\n}\r\n\r\nfunction measureGapPx(gapClass: string, container: HTMLElement): number {\r\n const probe = document.createElement('div');\r\n probe.className = `ma06 ${gapClass}`;\r\n probe.style.display = 'grid';\r\n probe.style.gridTemplateColumns = '1fr 1fr';\r\n\r\n probe.appendChild(document.createElement('div'));\r\n probe.appendChild(document.createElement('div'));\r\n container.appendChild(probe);\r\n const computed = getComputedStyle(probe);\r\n const gap = parseFloat(computed.columnGap || computed.gap || '0');\r\n container.removeChild(probe);\r\n return gap;\r\n}\r\n\r\nfunction measureGapPxCached(gapClass: string, container: HTMLElement): number {\r\n if (gapCache.has(gapClass)) return gapCache.get(gapClass)!;\r\n const value = measureGapPx(gapClass, container);\r\n\r\n if (gapCache.size >= GAP_CACHE_MAX) {\r\n const firstKey = gapCache.keys().next().value;\r\n if (firstKey !== undefined) gapCache.delete(firstKey);\r\n }\r\n gapCache.set(gapClass, value);\r\n return value;\r\n}\r\n\r\nfunction computeLayout(\r\n itemHeights: number[],\r\n columns: number,\r\n containerWidth: number,\r\n gapPx: number,\r\n): { layouts: MansoryItemLayout[]; totalHeight: number; sortedByTop: MansoryItemLayout[] } {\r\n const cols = Math.max(1, columns);\r\n const totalGap = gapPx * (cols - 1);\r\n const colWidth = (containerWidth - totalGap) / cols;\r\n\r\n const colHeights = new Array<number>(cols).fill(0);\r\n const layouts: MansoryItemLayout[] = [];\r\n\r\n const sortedByTop: MansoryItemLayout[] = [];\r\n\r\n for (let i = 0; i < itemHeights.length; i++) {\r\n let minCol = 0;\r\n for (let c = 1; c < cols; c++) {\r\n if (colHeights[c] < colHeights[minCol]) minCol = c;\r\n }\r\n\r\n const left = minCol * (colWidth + gapPx);\r\n const top = colHeights[minCol];\r\n const height = itemHeights[i] ?? 0;\r\n\r\n const item: MansoryItemLayout = { index: i, top, left, width: colWidth, height };\r\n layouts.push(item);\r\n\r\n let j = sortedByTop.length - 1;\r\n while (j >= 0 && sortedByTop[j].top > top) j--;\r\n sortedByTop.splice(j + 1, 0, item);\r\n\r\n colHeights[minCol] = top + height + gapPx;\r\n }\r\n\r\n let maxH = 0;\r\n for (let i = 0; i < colHeights.length; i++) {\r\n if (colHeights[i] > maxH) maxH = colHeights[i];\r\n }\r\n\r\n return { layouts, totalHeight: maxH > 0 ? maxH - gapPx : 0, sortedByTop };\r\n}\r\n\r\nfunction findFirstVisible(sorted: MansoryItemLayout[], visTop: number): number {\r\n let lo = 0,\r\n hi = sorted.length;\r\n while (lo < hi) {\r\n const mid = (lo + hi) >> 1;\r\n if (sorted[mid].top + sorted[mid].height < visTop) lo = mid + 1;\r\n else hi = mid;\r\n }\r\n return lo;\r\n}\r\n\r\ninterface MansoryItemProps {\r\n index: number;\r\n getLayoutAccessor: (index: number) => Accessor<MansoryItemLayout | undefined>;\r\n items: unknown[];\r\n itemClass?: string;\r\n children: MansoryProps['children'];\r\n onRegister: (index: number, el: HTMLDivElement) => void;\r\n onUnregister: (index: number) => void;\r\n}\r\n\r\nconst MansoryItem: Component<MansoryItemProps> = props => {\r\n const itemLayout = props.getLayoutAccessor(props.index);\r\n\r\n const styles = createMemo(() => {\r\n const l = itemLayout();\r\n if (!l) return { wrapper: {} as Record<string, string>, child: {} as Record<string, string> };\r\n const widthPx = `${l.width}px`;\r\n return {\r\n wrapper: { width: widthPx, transform: `translate3d(${l.left}px, ${l.top}px, 0)` },\r\n child: { width: widthPx },\r\n };\r\n });\r\n\r\n return (\r\n <div\r\n ref={el => {\r\n props.onRegister(props.index, el);\r\n onCleanup(function unregisterItem() {\r\n props.onUnregister(props.index);\r\n });\r\n }}\r\n data-mansory-idx={props.index}\r\n class={cn('ma03 ma04', props.itemClass)}\r\n style={styles().wrapper}\r\n >\r\n {props.children(props.items[props.index], () => props.index, styles().child)}\r\n </div>\r\n );\r\n};\r\n\r\nexport const Mansory: Component<MansoryProps> = rawProps => {\r\n const props = mergeProps(\r\n {\r\n columns: DEFAULT_COLUMNS,\r\n gap: DEFAULT_GAP,\r\n virtual: false as boolean | MansoryVirtualOptions,\r\n estimateItemHeight: 200,\r\n loadMoreThreshold: 200,\r\n },\r\n rawProps,\r\n );\r\n\r\n let containerEl!: HTMLDivElement;\r\n let innerEl!: HTMLDivElement;\r\n\r\n const [containerWidth, setContainerWidth] = createSignal(0);\r\n const [itemHeights, setItemHeights] = createSignal<number[]>([]);\r\n\r\n const currentColumns = createMemo(() => {\r\n const resolved = resolveResponsive<number>(props.columns as number, containerWidth());\r\n return Math.max(1, resolved ?? 1);\r\n });\r\n\r\n const currentGapClass = createMemo(() => {\r\n const resolved = resolveResponsive<string>(props.gap as string, containerWidth());\r\n return resolved ?? 'gap-4';\r\n });\r\n\r\n const [gapPx, setGapPx] = createSignal(16);\r\n\r\n createEffect(function trackGapClass() {\r\n const _ = currentGapClass();\r\n if (containerEl) {\r\n setGapPx(measureGapPxCached(currentGapClass(), containerEl));\r\n }\r\n });\r\n\r\n const layout = createMemo(() =>\r\n computeLayout(itemHeights(), currentColumns(), containerWidth(), gapPx()),\r\n );\r\n\r\n const totalHeight = createMemo(() => layout().totalHeight);\r\n\r\n const layoutAccessors = new Map<number, Accessor<MansoryItemLayout | undefined>>();\r\n const layoutSetters = new Map<number, (v: MansoryItemLayout | undefined) => void>();\r\n const layoutDisposers = new Map<number, () => void>();\r\n\r\n function getOrCreateLayoutAccessor(index: number): Accessor<MansoryItemLayout | undefined> {\r\n if (!layoutAccessors.has(index)) {\r\n createRoot(function layoutSignalRoot(dispose) {\r\n layoutDisposers.set(index, dispose);\r\n const initialValue = untrack(() => layout().layouts[index]);\r\n const [get, set] = createSignal<MansoryItemLayout | undefined>(initialValue, {\r\n equals: (a, b) => {\r\n if (a === b) return true;\r\n if (!a || !b) return false;\r\n return (\r\n a.top === b.top && a.left === b.left && a.width === b.width && a.height === b.height\r\n );\r\n },\r\n });\r\n layoutAccessors.set(index, get);\r\n layoutSetters.set(index, set);\r\n });\r\n }\r\n return layoutAccessors.get(index)!;\r\n }\r\n\r\n function disposeLayoutSignal(index: number) {\r\n layoutDisposers.get(index)?.();\r\n layoutDisposers.delete(index);\r\n layoutAccessors.delete(index);\r\n layoutSetters.delete(index);\r\n }\r\n\r\n onCleanup(function disposeAllLayoutSignals() {\r\n for (const dispose of layoutDisposers.values()) dispose();\r\n layoutDisposers.clear();\r\n layoutAccessors.clear();\r\n layoutSetters.clear();\r\n keyEntryCache.clear();\r\n });\r\n\r\n createEffect(function syncLayoutSetters() {\r\n const newLayouts = layout().layouts;\r\n\r\n for (const [index, setter] of layoutSetters) {\r\n setter(newLayouts[index]);\r\n }\r\n });\r\n\r\n const virtualOpts = createMemo<MansoryVirtualOptions | null>(() => {\r\n const v = props.virtual;\r\n if (!v) return null;\r\n if (v === true) return { overscan: 5 };\r\n return { overscan: v.overscan ?? 5 };\r\n });\r\n\r\n const isVirtual = createMemo(() => virtualOpts() !== null);\r\n\r\n const [scrollTop, setScrollTop] = createSignal(0);\r\n\r\n let rafId: number | null = null;\r\n let pendingScrollTop = 0;\r\n\r\n let loadMoreCooldown = false;\r\n let loadMoreTimer: ReturnType<typeof setTimeout> | null = null;\r\n\r\n const pendingItemChanges = new Map<number, number>();\r\n\r\n const flushItemHeights = createThrottle(function applyItemHeightChanges() {\r\n if (pendingItemChanges.size === 0) return;\r\n const snapshot = new Map(pendingItemChanges);\r\n pendingItemChanges.clear();\r\n\r\n setItemHeights(prev => {\r\n let hasChange = false;\r\n for (const [idx, h] of snapshot) {\r\n if (prev[idx] !== h) {\r\n hasChange = true;\r\n break;\r\n }\r\n }\r\n if (!hasChange) return prev;\r\n\r\n const next = [...prev];\r\n for (const [idx, h] of snapshot) next[idx] = h;\r\n return next;\r\n });\r\n }, 100);\r\n\r\n onCleanup(function cancelFlushItemHeights() {\r\n flushItemHeights.cancel();\r\n });\r\n\r\n const itemRO = new ResizeObserver(entries => {\r\n for (const entry of entries) {\r\n const el = entry.target as HTMLDivElement;\r\n const idx = parseInt(el.dataset.mansoryIdx ?? '-1', 10);\r\n if (idx < 0) continue;\r\n\r\n const h = entry.contentBoxSize?.[0]?.blockSize ?? entry.contentRect.height;\r\n pendingItemChanges.set(idx, h);\r\n }\r\n\r\n flushItemHeights();\r\n });\r\n\r\n onCleanup(function disconnectItemResizeObserver() {\r\n itemRO.disconnect();\r\n });\r\n\r\n onMount(() => {\r\n const applyContainerWidth = createThrottle(function applyContainerWidthChange(width: number) {\r\n setContainerWidth(width);\r\n }, 100);\r\n\r\n const containerRO = new ResizeObserver(entries => {\r\n for (const entry of entries) {\r\n const width = entry.contentBoxSize?.[0]?.inlineSize ?? entry.contentRect.width;\r\n applyContainerWidth(width);\r\n }\r\n });\r\n containerRO.observe(containerEl);\r\n onCleanup(function disconnectContainerResizeObserver() {\r\n applyContainerWidth.cancel();\r\n containerRO.disconnect();\r\n });\r\n });\r\n\r\n const itemElMap = new Map<number, HTMLDivElement>();\r\n\r\n function registerItem(index: number, el: HTMLDivElement) {\r\n itemElMap.set(index, el);\r\n itemRO.observe(el);\r\n }\r\n\r\n function unregisterItem(index: number) {\r\n const el = itemElMap.get(index);\r\n if (el) {\r\n itemRO.unobserve(el);\r\n itemElMap.delete(index);\r\n }\r\n }\r\n\r\n createEffect(\r\n on(\r\n () => props.items.length,\r\n len => {\r\n setItemHeights(prev => {\r\n const prevLen = prev.length;\r\n if (prevLen === len) return prev;\r\n\r\n if (len > prevLen) {\r\n const next = [...prev];\r\n for (let i = prevLen; i < len; i++) next.push(props.estimateItemHeight);\r\n return next;\r\n }\r\n\r\n for (let i = len; i < prevLen; i++) {\r\n disposeLayoutSignal(i);\r\n }\r\n return prev.slice(0, len);\r\n });\r\n },\r\n ),\r\n );\r\n\r\n function checkLoadMore(currentScrollTop: number) {\r\n if (!props.onLoadMore || loadMoreCooldown) return;\r\n const { scrollHeight, clientHeight } = containerEl;\r\n if (currentScrollTop + clientHeight >= scrollHeight - props.loadMoreThreshold) {\r\n loadMoreCooldown = true;\r\n\r\n if (loadMoreTimer) clearTimeout(loadMoreTimer);\r\n loadMoreTimer = setTimeout(() => {\r\n loadMoreCooldown = false;\r\n loadMoreTimer = null;\r\n }, 10_000);\r\n props.onLoadMore();\r\n }\r\n }\r\n\r\n createEffect(\r\n on(\r\n () => props.items.length,\r\n () => {\r\n if (loadMoreTimer) {\r\n clearTimeout(loadMoreTimer);\r\n loadMoreTimer = null;\r\n }\r\n loadMoreCooldown = false;\r\n },\r\n ),\r\n );\r\n\r\n onCleanup(function clearLoadMoreTimer() {\r\n if (loadMoreTimer) clearTimeout(loadMoreTimer);\r\n });\r\n\r\n onCleanup(function cancelPendingRaf() {\r\n if (rafId !== null) cancelAnimationFrame(rafId);\r\n });\r\n\r\n function handleScroll() {\r\n pendingScrollTop = containerEl.scrollTop;\r\n\r\n if (rafId === null) {\r\n rafId = requestAnimationFrame(() => {\r\n rafId = null;\r\n setScrollTop(pendingScrollTop);\r\n checkLoadMore(pendingScrollTop);\r\n });\r\n }\r\n }\r\n\r\n const allIndices = createMemo<number[]>((prev = []) => {\r\n const len = props.items.length;\r\n if (len === prev.length) return prev;\r\n if (len > prev.length) {\r\n const next = [...prev];\r\n for (let i = prev.length; i < len; i++) next.push(i);\r\n return next;\r\n }\r\n return prev.slice(0, len);\r\n });\r\n\r\n const renderedIndices = createMemo(() => {\r\n if (!isVirtual()) {\r\n return allIndices();\r\n }\r\n\r\n if (containerWidth() === 0) return [];\r\n\r\n const currentScrollTop = scrollTop();\r\n const viewportHeight = containerEl.clientHeight;\r\n const overscan = virtualOpts()?.overscan ?? 5;\r\n const overscanPx = overscan * props.estimateItemHeight;\r\n const visTop = currentScrollTop - overscanPx;\r\n const visBottom = currentScrollTop + viewportHeight + overscanPx;\r\n\r\n const sorted = layout().sortedByTop;\r\n const start = findFirstVisible(sorted, visTop);\r\n const indices: number[] = [];\r\n for (let i = start; i < sorted.length; i++) {\r\n if (sorted[i].top > visBottom) break;\r\n indices.push(sorted[i].index);\r\n }\r\n return indices;\r\n });\r\n\r\n const keyEntryCache = new Map<string | number, { key: string | number; index: number }>();\r\n\r\n const renderedKeys = createMemo(() => {\r\n const indices = renderedIndices();\r\n if (!props.getItemKey) return indices;\r\n\r\n const activeKeys = new Set<string | number>();\r\n\r\n const entries = indices.map(i => {\r\n const key = props.getItemKey!(props.items[i], i);\r\n activeKeys.add(key);\r\n\r\n let entry = keyEntryCache.get(key);\r\n if (!entry) {\r\n entry = { key, index: i };\r\n keyEntryCache.set(key, entry);\r\n } else {\r\n entry.index = i;\r\n }\r\n return entry;\r\n });\r\n\r\n for (const k of keyEntryCache.keys()) {\r\n if (!activeKeys.has(k)) keyEntryCache.delete(k);\r\n }\r\n\r\n return entries;\r\n });\r\n\r\n return (\r\n <div\r\n ref={containerEl}\r\n class={cn('ma01', isVirtual() && 'ma05', props.class)}\r\n onScroll={isVirtual() || props.onLoadMore ? handleScroll : undefined}\r\n >\r\n <div ref={innerEl} class=\"ma02\" style={{ height: `${totalHeight()}px` }}>\r\n <For each={renderedKeys()}>\r\n {entry => {\r\n const index = typeof entry === 'number' ? entry : entry.index;\r\n return (\r\n <MansoryItem\r\n index={index}\r\n getLayoutAccessor={getOrCreateLayoutAccessor}\r\n items={props.items}\r\n itemClass={props.itemClass}\r\n onRegister={registerItem}\r\n onUnregister={unregisterItem}\r\n >\r\n {props.children}\r\n </MansoryItem>\r\n );\r\n }}\r\n </For>\r\n </div>\r\n\r\n <Show when={props.items.length === 0}>\r\n <div class=\"ma08\">No items</div>\r\n </Show>\r\n </div>\r\n );\r\n};\r\n"],"mappings":"khBAyBMoB,EAAqE,CACzEG,GAAI,IACJC,GAAI,IACJC,GAAI,KACJC,GAAI,KACJ,MAAO,KACR,CAEKC,EAAU,CAAC,KAAM,KAAM,KAAM,KAAM,MAAM,CAEzCE,EAA6C,CACjDC,QAAS,EACTP,GAAI,EACJC,GAAI,EACJC,GAAI,EACL,CAEKM,EAAc,QAEdC,EAAgB,GAChBC,EAAW,IAAIC,IAErB,SAASC,EAAqBC,EAAkCE,EAA2B,CACzF,GAAI,OAAOF,GAAW,WAAYA,GAAmBG,MAAMC,QAAQJ,EAAO,CACxE,OAAOA,EAGT,IAAMK,EAAML,EAEZ,IAAK,IAAIM,EAAIf,EAAQgB,OAAS,EAAGD,GAAK,EAAGA,IAAK,CAC5C,IAAME,EAAMjB,EAAQe,GACpB,GAAIJ,GAAkBlB,EAAYwB,IAAQH,EAAIG,KAASC,IAAAA,GACrD,OAAOJ,EAAIG,GAIf,OAAQH,EAAIX,UAAY,OAAOM,GAAW,SAAWS,IAAAA,GAAYT,GAGnE,SAASU,EAAaC,EAAkBC,EAAgC,CACtE,IAAME,EAAQC,SAASC,cAAc,MAAM,CAC3CF,EAAMG,UAAY,QAAQN,IAC1BG,EAAMI,MAAMC,QAAU,OACtBL,EAAMI,MAAME,oBAAsB,UAElCN,EAAMO,YAAYN,SAASC,cAAc,MAAM,CAAC,CAChDF,EAAMO,YAAYN,SAASC,cAAc,MAAM,CAAC,CAChDJ,EAAUS,YAAYP,EAAM,CAC5B,IAAMQ,EAAWC,iBAAiBT,EAAM,CAClCU,EAAMC,WAAWH,EAASI,WAAaJ,EAASE,KAAO,IAAI,CAEjE,OADAZ,EAAUe,YAAYb,EAAM,CACrBU,EAGT,SAASI,EAAmBjB,EAAkBC,EAAgC,CAC5E,GAAIf,EAASgC,IAAIlB,EAAS,CAAE,OAAOd,EAASiC,IAAInB,EAAS,CACzD,IAAMoB,EAAQrB,EAAaC,EAAUC,EAAU,CAE/C,GAAIf,EAASmC,MAAQpC,EAAe,CAClC,IAAMqC,EAAWpC,EAASqC,MAAM,CAACC,MAAM,CAACJ,MACpCE,IAAaxB,IAAAA,IAAWZ,EAASuC,OAAOH,EAAS,CAGvD,OADApC,EAASwC,IAAI1B,EAAUoB,EAAM,CACtBA,EAGT,SAASO,GACPC,EACAC,EACAtC,EACAuC,EACyF,CACzF,IAAMI,EAAOC,KAAKC,IAAI,EAAGP,EAAQ,CAE3BS,GAAY/C,EADDuC,GAASI,EAAO,IACcA,EAEzCK,EAAiB/C,MAAc0C,EAAK,CAACM,KAAK,EAAE,CAC5CT,EAA+B,EAAE,CAEjCE,EAAmC,EAAE,CAE3C,IAAK,IAAItC,EAAI,EAAGA,EAAIiC,EAAYhC,OAAQD,IAAK,CAC3C,IAAI8C,EAAS,EACb,IAAK,IAAIC,EAAI,EAAGA,EAAIR,EAAMQ,IACpBH,EAAWG,GAAKH,EAAWE,KAASA,EAASC,GAGnD,IAAMC,EAAOF,GAAUH,EAAWR,GAC5Bc,EAAML,EAAWE,GACjBI,EAASjB,EAAYjC,IAAM,EAE3BmD,EAA0B,CAAEC,MAAOpD,EAAGiD,MAAKD,OAAMK,MAAOV,EAAUO,SAAQ,CAChFd,EAAQkB,KAAKH,EAAK,CAElB,IAAII,EAAIjB,EAAYrC,OAAS,EAC7B,KAAOsD,GAAK,GAAKjB,EAAYiB,GAAGN,IAAMA,GAAKM,IAC3CjB,EAAYkB,OAAOD,EAAI,EAAG,EAAGJ,EAAK,CAElCP,EAAWE,GAAUG,EAAMC,EAASf,EAGtC,IAAIsB,EAAO,EACX,IAAK,IAAIzD,EAAI,EAAGA,EAAI4C,EAAW3C,OAAQD,IACjC4C,EAAW5C,GAAKyD,IAAMA,EAAOb,EAAW5C,IAG9C,MAAO,CAAEoC,UAASC,YAAaoB,EAAO,EAAIA,EAAOtB,EAAQ,EAAGG,cAAa,CAG3E,SAASoB,GAAiBC,EAA6BC,EAAwB,CAC7E,IAAIC,EAAK,EACPC,EAAKH,EAAO1D,OACd,KAAO4D,EAAKC,GAAI,CACd,IAAMC,EAAOF,EAAKC,GAAO,EACrBH,EAAOI,GAAKd,IAAMU,EAAOI,GAAKb,OAASU,EAAQC,EAAKE,EAAM,EACzDD,EAAKC,EAEZ,OAAOF,EAaT,IAAMY,GAA2CC,GAAS,CACxD,IAAMC,EAAaD,EAAMT,kBAAkBS,EAAMtB,MAAM,CAEjDwB,EAASnH,MAAiB,CAC9B,IAAMoH,EAAIF,GAAY,CACtB,GAAI,CAACE,EAAG,MAAO,CAAEC,QAAS,EAAE,CAA4BC,MAAO,EAAE,CAA4B,CAC7F,IAAMC,EAAU,GAAGH,EAAExB,MAAK,IAC1B,MAAO,CACLyB,QAAS,CAAEzB,MAAO2B,EAASC,UAAW,eAAeJ,EAAE7B,KAAI,MAAO6B,EAAE5B,IAAG,QAAU,CACjF8B,MAAO,CAAE1B,MAAO2B,EAAQ,CACzB,EACD,CAEF,WAAA,CAAA,IAAAE,EAAAC,GAAA,CAU2B,OAV3BC,EAESd,GAAM,CACTI,EAAML,WAAWK,EAAMtB,MAAOkB,EAAG,CACjCvG,EAAU,UAA0B,CAClC2G,EAAMF,aAAaE,EAAMtB,MAAM,EAC/B,EACH8B,EAAA,CAAAI,EAAAJ,MAKAR,EAAMN,SAASM,EAAMR,MAAMQ,EAAMtB,WAAcsB,EAAMtB,MAAOwB,GAAQ,CAACG,MAAM,CAAA,CAAAQ,EAAAC,GAAA,CAAA,IAAAC,EAJ1Df,EAAMtB,MAAKsC,EACtBvH,EAAG,YAAauG,EAAMP,UAAU,CAAAwB,EAChCf,GAAQ,CAACE,QAAO,OAAAW,IAAAD,EAAAI,GAAAC,EAAAX,EAAA,mBAAAM,EAAAI,EAAAH,EAAA,CAAAC,IAAAF,EAAAM,GAAAC,EAAAb,EAAAM,EAAAM,EAAAJ,EAAA,CAAAF,EAAAQ,EAAAC,EAAAf,EAAAS,EAAAH,EAAAQ,EAAA,CAAAR,GAAA,CAAAI,EAAAzF,IAAAA,GAAA2F,EAAA3F,IAAAA,GAAA6F,EAAA7F,IAAAA,GAAA,CAAA,CAAA+E,KAAA,EAOhBgB,EAAmCC,GAAY,CAC1D,IAAMzB,EAAQ7G,GACZ,CACEqE,QAAS/C,EACT+B,IAAK7B,EACL+G,QAAS,GACTC,mBAAoB,IACpBC,kBAAmB,IACpB,CACDH,EACD,CAEGI,EACAC,EAEE,CAAC5G,EAAgB6G,GAAqB9I,EAAa,EAAE,CACrD,CAACsE,EAAayE,GAAkB/I,EAAuB,EAAE,CAAC,CAE1DgJ,EAAiBlJ,MAAiB,CACtC,IAAMmJ,EAAWnH,EAA0BiF,EAAMxC,QAAmBtC,GAAgB,CAAC,CACrF,OAAO4C,KAAKC,IAAI,EAAGmE,GAAY,EAAE,EACjC,CAEIC,EAAkBpJ,MACLgC,EAA0BiF,EAAMxD,IAAetB,GAAgB,CAAC,EAC9D,QACnB,CAEI,CAACuC,GAAO2E,IAAYnJ,EAAa,GAAG,CAE1CH,EAAa,UAAyB,CAC1BqJ,GAAiB,CACvBN,GACFO,GAASxF,EAAmBuF,GAAiB,CAAEN,EAAY,CAAC,EAE9D,CAEF,IAAMU,EAASxJ,MACbuE,GAAcC,GAAa,CAAE0E,GAAgB,CAAE/G,GAAgB,CAAEuC,IAAO,CAC1E,CAAC,CAEKE,GAAc5E,MAAiBwJ,GAAQ,CAAC5E,YAAY,CAEpD6E,EAAkB,IAAI1H,IACtB2H,EAAgB,IAAI3H,IACpB6H,EAAkB,IAAI7H,IAE5B,SAAS8H,EAA0BlE,EAAwD,CAkBzF,OAjBK8D,EAAgB3F,IAAI6B,EAAM,EAC7B1F,EAAW,SAA0B8J,EAAS,CAC5CH,EAAgBtF,IAAIqB,EAAOoE,EAAQ,CAEnC,GAAM,CAAChG,EAAKO,GAAOpE,EADEO,MAAc+I,GAAQ,CAAC7E,QAAQgB,GAAO,CACkB,CAC3EsE,QAAS1B,EAAG2B,IACN3B,IAAM2B,EAAU,GAChB,CAAC3B,GAAK,CAAC2B,EAAU,GAEnB3B,EAAE/C,MAAQ0E,EAAE1E,KAAO+C,EAAEhD,OAAS2E,EAAE3E,MAAQgD,EAAE3C,QAAUsE,EAAEtE,OAAS2C,EAAE9C,SAAWyE,EAAEzE,OAGnF,CAAC,CACFgE,EAAgBnF,IAAIqB,EAAO5B,EAAI,CAC/B2F,EAAcpF,IAAIqB,EAAOrB,EAAI,EAC7B,CAEGmF,EAAgB1F,IAAI4B,EAAM,CAGnC,SAASwE,EAAoBxE,EAAe,CAC1CiE,EAAgB7F,IAAI4B,EAAM,IAAI,CAC9BiE,EAAgBvF,OAAOsB,EAAM,CAC7B8D,EAAgBpF,OAAOsB,EAAM,CAC7B+D,EAAcrF,OAAOsB,EAAM,CAG7BrF,EAAU,UAAmC,CAC3C,IAAK,IAAMyJ,KAAWH,EAAgBS,QAAQ,CAAEN,GAAS,CACzDH,EAAgBU,OAAO,CACvBb,EAAgBa,OAAO,CACvBZ,EAAcY,OAAO,CACrBC,EAAcD,OAAO,EACrB,CAEFvK,EAAa,UAA6B,CACxC,IAAM0K,EAAajB,GAAQ,CAAC7E,QAE5B,IAAK,GAAM,CAACgB,EAAO+E,KAAWhB,EAC5BgB,EAAOD,EAAW9E,GAAO,EAE3B,CAEF,IAAMgF,EAAc3K,MAA+C,CACjE,IAAM2J,EAAI1C,EAAM0B,QAGhB,OAFKgB,EACDA,IAAM,GAAa,CAAEiB,SAAU,EAAG,CAC/B,CAAEA,SAAUjB,EAAEiB,UAAY,EAAG,CAFrB,MAGf,CAEIC,EAAY7K,MAAiB2K,GAAa,GAAK,KAAK,CAEpD,CAACG,EAAWC,GAAgB7K,EAAa,EAAE,CAE7C8K,EAAuB,KACvBC,EAAmB,EAEnBC,EAAmB,GACnBC,EAAsD,KAEpDG,EAAqB,IAAIvJ,IAEzBwJ,EAAmB5K,EAAe,UAAkC,CACxE,GAAI2K,EAAmBrH,OAAS,EAAG,OACnC,IAAMwH,EAAW,IAAI1J,IAAIuJ,EAAmB,CAC5CA,EAAmBhB,OAAO,CAE1BrB,EAAeyC,GAAQ,CACrB,IAAIC,EAAY,GAChB,IAAK,GAAM,CAACC,EAAKC,KAAMJ,EACrB,GAAIC,EAAKE,KAASC,EAAG,CACnBF,EAAY,GACZ,MAGJ,GAAI,CAACA,EAAW,OAAOD,EAEvB,IAAMtH,EAAO,CAAC,GAAGsH,EAAK,CACtB,IAAK,GAAM,CAACE,EAAKC,KAAMJ,EAAUrH,EAAKwH,GAAOC,EAC7C,OAAOzH,GACP,EACD,IAAI,CAEP9D,EAAU,UAAkC,CAC1CiL,EAAiBQ,QAAQ,EACzB,CAEF,IAAMC,EAAS,IAAIC,eAAeC,GAAW,CAC3C,IAAK,IAAMC,KAASD,EAAS,CAC3B,IAAMrF,EAAKsF,EAAMC,OACXR,EAAMS,SAASxF,EAAGyF,QAAQC,YAAc,KAAM,GAAG,CACvD,GAAIX,EAAM,EAAG,SAEb,IAAMC,EAAIM,EAAMK,iBAAiB,IAAIC,WAAaN,EAAMO,YAAYjH,OACpE6F,EAAmBhH,IAAIsH,EAAKC,EAAE,CAGhCN,GAAkB,EAClB,CAEFjL,EAAU,UAAwC,CAChD0L,EAAOY,YAAY,EACnB,CAEFrM,OAAc,CACZ,IAAMsM,EAAsBlM,EAAe,SAAmCiF,EAAe,CAC3FoD,EAAkBpD,EAAM,EACvB,IAAI,CAEDmH,EAAc,IAAId,eAAeC,GAAW,CAChD,IAAK,IAAMC,KAASD,EAElBW,EADcV,EAAMK,iBAAiB,IAAIQ,YAAcb,EAAMO,YAAY9G,MAC/C,EAE5B,CACFmH,EAAYE,QAAQnE,EAAY,CAChCxI,EAAU,UAA6C,CACrDuM,EAAoBd,QAAQ,CAC5BgB,EAAYH,YAAY,EACxB,EACF,CAEF,IAAMO,EAAY,IAAIpL,IAEtB,SAASqL,GAAazH,EAAekB,EAAoB,CACvDsG,EAAU7I,IAAIqB,EAAOkB,EAAG,CACxBmF,EAAOiB,QAAQpG,EAAG,CAGpB,SAASe,GAAejC,EAAe,CACrC,IAAMkB,EAAKsG,EAAUpJ,IAAI4B,EAAM,CAC3BkB,IACFmF,EAAOqB,UAAUxG,EAAG,CACpBsG,EAAU9I,OAAOsB,EAAM,EAI3B5F,EACEM,MACQ4G,EAAMR,MAAMjE,OAClB8K,GAAO,CACLrE,EAAeyC,GAAQ,CACrB,IAAM6B,EAAU7B,EAAKlJ,OACrB,GAAI+K,IAAYD,EAAK,OAAO5B,EAE5B,GAAI4B,EAAMC,EAAS,CACjB,IAAMnJ,EAAO,CAAC,GAAGsH,EAAK,CACtB,IAAK,IAAInJ,EAAIgL,EAAShL,EAAI+K,EAAK/K,IAAK6B,EAAKyB,KAAKoB,EAAM2B,mBAAmB,CACvE,OAAOxE,EAGT,IAAK,IAAI7B,EAAI+K,EAAK/K,EAAIgL,EAAShL,IAC7B4H,EAAoB5H,EAAE,CAExB,OAAOmJ,EAAK8B,MAAM,EAAGF,EAAI,EACzB,EAGR,CAAC,CAED,SAASG,GAAcC,EAA0B,CAC/C,GAAI,CAACzG,EAAM0G,YAAczC,EAAkB,OAC3C,GAAM,CAAE0C,eAAcC,gBAAiB/E,EACnC4E,EAAmBG,GAAgBD,EAAe3G,EAAM4B,oBAC1DqC,EAAmB,GAEfC,GAAe2C,aAAa3C,EAAc,CAC9CA,EAAgBE,eAAiB,CAC/BH,EAAmB,GACnBC,EAAgB,MACf,IAAO,CACVlE,EAAM0G,YAAY,EAItB5N,EACEM,MACQ4G,EAAMR,MAAMjE,WACZ,CACJ,AAEE2I,KADA2C,aAAa3C,EAAc,CACX,MAElBD,EAAmB,IAGzB,CAAC,CAED5K,EAAU,UAA8B,CAClC6K,GAAe2C,aAAa3C,EAAc,EAC9C,CAEF7K,EAAU,UAA4B,CAChC0K,IAAU,MAAMiD,qBAAqBjD,EAAM,EAC/C,CAEF,SAASkD,GAAe,CACtBjD,EAAmBnC,EAAYgC,UAE3BE,IAAU,OACZA,EAAQmD,0BAA4B,CAClCnD,EAAQ,KACRD,EAAaE,EAAiB,CAC9BwC,GAAcxC,EAAiB,EAC/B,EAIN,IAAMmD,GAAapO,GAAsB0L,EAAO,EAAE,GAAK,CACrD,IAAM4B,EAAMrG,EAAMR,MAAMjE,OACxB,GAAI8K,IAAQ5B,EAAKlJ,OAAQ,OAAOkJ,EAChC,GAAI4B,EAAM5B,EAAKlJ,OAAQ,CACrB,IAAM4B,EAAO,CAAC,GAAGsH,EAAK,CACtB,IAAK,IAAInJ,EAAImJ,EAAKlJ,OAAQD,EAAI+K,EAAK/K,IAAK6B,EAAKyB,KAAKtD,EAAE,CACpD,OAAO6B,EAET,OAAOsH,EAAK8B,MAAM,EAAGF,EAAI,EACzB,CAEIe,GAAkBrO,MAAiB,CACvC,GAAI,CAAC6K,GAAW,CACd,OAAOuD,IAAY,CAGrB,GAAIjM,GAAgB,GAAK,EAAG,MAAO,EAAE,CAErC,IAAMuL,EAAmB5C,GAAW,CAC9BwD,EAAiBxF,EAAY+E,aAE7BU,GADW5D,GAAa,EAAEC,UAAY,GACd3D,EAAM2B,mBAC9BzC,EAASuH,EAAmBa,EAC5BC,EAAYd,EAAmBY,EAAiBC,EAEhDrI,EAASsD,GAAQ,CAAC3E,YAClB4J,EAAQxI,GAAiBC,EAAQC,EAAO,CACxCuI,EAAoB,EAAE,CAC5B,IAAK,IAAInM,EAAIkM,EAAOlM,EAAI2D,EAAO1D,QACzB0D,IAAO3D,GAAGiD,IAAMgJ,GADiBjM,IAErCmM,EAAQ7I,KAAKK,EAAO3D,GAAGoD,MAAM,CAE/B,OAAO+I,GACP,CAEInE,EAAgB,IAAIxI,IAEpB4M,GAAe3O,MAAiB,CACpC,IAAM0O,EAAUL,IAAiB,CACjC,GAAI,CAACpH,EAAM2H,WAAY,OAAOF,EAE9B,IAAMG,EAAa,IAAIC,IAEjB5C,EAAUwC,EAAQpM,IAAIC,GAAK,CAC/B,IAAME,EAAMwE,EAAM2H,WAAY3H,EAAMR,MAAMlE,GAAIA,EAAE,CAChDsM,EAAWE,IAAItM,EAAI,CAEnB,IAAI0J,EAAQ5B,EAAcxG,IAAItB,EAAI,CAOlC,OANK0J,EAIHA,EAAMxG,MAAQpD,GAHd4J,EAAQ,CAAE1J,MAAKkD,MAAOpD,EAAG,CACzBgI,EAAcjG,IAAI7B,EAAK0J,EAAM,EAIxBA,GACP,CAEF,IAAK,IAAM6C,KAAKzE,EAAcpG,MAAM,CAC7B0K,EAAW/K,IAAIkL,EAAE,EAAEzE,EAAclG,OAAO2K,EAAE,CAGjD,OAAO9C,GACP,CAEF,WAAA,CAAA,IAAA+C,EAAAC,GAAA,CAAAC,EAAAF,EAAAG,WAAAC,EAAAJ,EAAA,SAIcpE,GAAW,EAAI5D,EAAM0G,WAAaO,EAAexL,IAAAA,GAAS,CAAA,IAAA4M,EAF/DxG,EAAW,OAAAwG,GAAA,WAAA3H,EAAA2H,EAAAL,EAAA,CAAXnG,EAAWmG,EAAA,IAAAM,EAINxG,EAA2D,OAApD,OAAAwG,GAAA,WAAA5H,EAAA4H,EAAAJ,EAAA,CAAPpG,EAAOoG,EAAAtH,EAAAsH,EAAAK,EACdrP,EAAG,CAAA,IAACsP,MAAI,CAAA,OAAEd,IAAc,EAAAhI,SACtBwF,GAECqD,EACGxI,GAAW,CACHrB,MAHG,OAAOwG,GAAU,SAAWA,EAAQA,EAAMxG,MAIpDa,kBAAmBqD,EAAyB,IAC5CpD,OAAK,CAAA,OAAEQ,EAAMR,OAAK,IAClBC,WAAS,CAAA,OAAEO,EAAMP,WACjBE,WAAYwG,GACZrG,aAAca,GAAc,IAAAjB,UAAA,CAAA,OAE3BM,EAAMN,UAAQ,CAAA,CAGpB,CAAA,CAAA,CAAAkB,EAAAoH,EAAAO,EAIJhP,EAAI,CAAA,IAACkP,MAAI,CAAA,OAAEzI,EAAMR,MAAMjE,SAAW,GAAC,IAAAmE,UAAA,CAAA,OAAAgJ,GAAA,EAAA,CAAA,CAAA,KAAA,CAAA7H,EAAAC,GAAA,CAAA,IAAA6H,EAvB7BlP,EAAG,OAAQmK,GAAW,EAAI,OAAQ5D,EAAM4I,MAAM,CAAAC,EAGJ,GAAGlL,IAAa,CAAA,IAAI,OAAAgL,IAAA7H,EAAAI,GAAAG,EAAA2G,EAAAlH,EAAAI,EAAAyH,EAAA,CAAAE,IAAA/H,EAAAM,GAAA0H,EAAAZ,EAAA,SAAApH,EAAAM,EAAAyH,EAAA,CAAA/H,GAAA,CAAAI,EAAAzF,IAAAA,GAAA2F,EAAA3F,IAAAA,GAAA,CAAA,CAAAuM,KAAA"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{cn as e}from"../../utils/cn.js";import{getColor as t}from"../../utils/helper.js";import{Button as n}from"../button/button.js";import{refresh_cw_default as r}from"../../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/refresh-cw.js";import{className as i,createComponent as a,delegateEvents as o,effect as s,insert as c,memo as l,mergeProps as u,setAttribute as d,spread as f,template as p,use as m}from"solid-js/web";import{cva as h}from"class-variance-authority";import{For as g,Show as _,createEffect as v,createMemo as y,createSignal as b,createUniqueId as x,mergeProps as S,on as C,onCleanup as w,onMount as T}from"solid-js";var E=p(`<span class="loading loading-spinner loading-xs">`),ee=p(`<li><details><summary></summary><ul>`),D=p(`<li tabindex=0><div>`),O=p(`<li><h4 class=menu-title></h4><ul>`),k=p(`<div><span class="loading loading-spinner loading-md m-auto">`),A=p(`<ul>`),j=p(`<div class="text-base-content/50 flex flex-col items-center justify-center gap-2 p-4 text-center text-sm italic"><span>No menu items available.`),M=h(`menu`,{variants:{size:{xs:`menu-xs`,sm:`menu-sm`,md:`menu-md`,lg:`menu-lg`,xl:`menu-xl`},direction:{vertical:`menu-vertical`,horizontal:`menu-horizontal`}}}),N=class{parentMap=new Map;register(e,t){this.parentMap.set(e,t)}getPath(e){let t=[],n=e;for(;n!=null;)t.unshift(n),n=this.parentMap.get(n);return t}has(e){return this.parentMap.has(e)}clear(){this.parentMap.clear()}},P=class{refreshFns=new Map;register(e,t){this.refreshFns.set(e,t)}unregister(e){this.refreshFns.delete(e)}refresh(e){let t=this.refreshFns.get(e);t&&t()}refreshAll(){this.refreshFns.forEach(e=>e())}has(e){return this.refreshFns.has(e)}clear(){this.refreshFns.clear()}},F=e=>{let[t,n]=b(null),r=async(r=!1)=>{if(!e.isLoading()&&!(t()!==null&&!r)&&e.item.lazyItems){e.setIsLoading(!0);try{n(await e.item.lazyItems())}catch(t){e.onLoadError(t)}finally{e.setIsLoading(!1)}}},i=()=>{r(!0)};return T(()=>{e.onRegisterRefresh(i)}),v(C(()=>e.shouldLoad(),e=>{e&&t()===null&&r()},{defer:!0})),a(_,{get when(){return t()},get children(){return a(g,{get each(){return t()},children:t=>e.renderItems(t,e.parentId)})}})},I=`_6ca32a`,L=o=>{o=S({size:`md`,direction:`vertical`,color:`secondary`,highlightActive:!0},o);let p,h=new N,T=new P;function L(e){if(!p||!o.highlightActive)return;let t=h.getPath(e);if(t.length===0)return;let n=Array.from(p.getElementsByClassName(I));for(let e of n)e.classList.remove(I);for(let e of t)document.getElementById(e)?.classList?.add(I)}function R(e){let t=h.getPath(e);for(let e of t){let t=document.getElementById(e);if(!t)continue;let n=t.querySelector(`:scope > details`);n&&!n.open&&(n.open=!0)}}function z(e){if(!h.has(e)){console.warn(`Menu.focusById: Node with id "${e}" not found in registry`);return}R(e),L(e)}function B(e){let t=document.getElementById(e);if(!t){console.warn(`Menu.collapseById: Element with id "${e}" not found`);return}let n=t.querySelector(`:scope > details`);if(n){n.open=!1;let e=n.getElementsByClassName(I);for(let t of e)t.classList.remove(I);t.classList.remove(I)}}function V(e){if(!T.has(e)){console.warn(`Menu.refreshById: Lazy folder with id "${e}" not found`);return}T.refresh(e)}function H(){T.refreshAll()}function U(){p&&p.querySelectorAll(`details`).forEach(e=>e.open=!1)}function W(){p&&p.querySelectorAll(`details`).forEach(e=>e.open=!0)}function G(e){p&&p.querySelectorAll(`:scope > li.folder > details`).forEach(t=>{let n=t.parentElement;n&&n.id!==e&&t.open&&(t.open=!1)})}function K(t,n=null){let r=t.id??x();if(h.register(r,n),t.type===`folder`){let l=S({defaultExpanded:t.defaultExpanded??o.defaultExpanded??!1},t,{id:r}),u=l.lazyItems!==void 0,[f,p]=b(l.defaultExpanded),[v,y]=b(!1),x,C=e=>{let t=e.currentTarget.open;if(v()){e.preventDefault();return}u&&p(t)},w=e=>{if(x&&(x.open=!1),p(!1),o.onError){let t={source:`folder`,itemId:r,path:h.getPath(r),error:e,message:e instanceof Error?e.message:`Failed to load folder items`};o.onError(t)}},D=e=>{if(e.stopPropagation(),v()||t.disabled){e.preventDefault();return}let i=!(x?.open??l.defaultExpanded);if(o.direction===`horizontal`&&n===null&&i&&G(r),x?.open===!1?L(r):setTimeout(()=>{B(r)}),o.onItemClick){let e=i,n={id:r,path:h.getPath(r),type:`folder`,isExpanded:e,data:t.data};o.onItemClick(n)}};return(()=>{var t=ee(),n=t.firstChild,p=n.firstChild,h=p.nextSibling;d(t,`id`,r),n.addEventListener(`toggle`,C);var b=x;return typeof b==`function`?m(b,n):x=n,p.$$click=D,c(p,()=>l.content,null),c(p,a(_,{get when(){return v()},get children(){return E()}}),null),c(h,a(_,{when:u,get fallback(){return a(g,{get each(){return l.items},children:e=>K(e,r)})},get children(){return a(F,{renderItems:K,shouldLoad:f,isLoading:v,setIsLoading:y,item:l,parentId:r,onLoadError:w,onRegisterRefresh:e=>T.register(r,e)})}})),s(r=>{var a=e(`folder`,(l.disabled||v())&&`menu-disabled`,o.class?.itemWrap),s=l.defaultExpanded,c=e(v()&&`after:hidden`,o.class?.itemHeader);return a!==r.e&&i(t,r.e=a),s!==r.t&&(n.open=r.t=s),c!==r.a&&i(p,r.a=c),r},{e:void 0,t:void 0,a:void 0}),t})()}if(t.type===`file`){let n=e=>{if(e.stopPropagation(),L(r),o.onItemClick){let e={id:r,path:h.getPath(r),type:`file`,...t.data&&{data:t.data}};o.onItemClick(e)}};return(()=>{var a=D(),l=a.firstChild;return a.$$click=n,d(a,`id`,r),c(l,()=>t.content),s(()=>i(a,e(`file`,t.disabled&&`menu-disabled`,o.class?.itemWrap))),a})()}if(t.type===`title`){let n=e=>{e.stopPropagation();let n=document.getElementById(r);if(n&&n.classList.contains(I)){let e=n.getElementsByClassName(I);for(let t of e)t.classList.remove(I);n.classList.remove(I)}else L(r);if(o.onItemClick){let e={id:r,path:h.getPath(r),type:`title`,...t.data&&{data:t.data}};o.onItemClick(e)}};return(()=>{var l=O(),u=l.firstChild,f=u.nextSibling;return d(l,`id`,r),u.$$click=n,c(u,()=>t.content),c(f,a(g,{get each(){return t.items},children:e=>K(e,r)})),s(()=>i(l,e(`title`,t.disabled&&`menu-disabled`,o.class?.itemWrap))),l})()}}let q=o.lazyItems!==void 0,[J,Y]=b(q?null:o.items??[]),[X,Z]=b(!1);v(C(()=>o.items,e=>{!q&&e&&(h.clear(),T.clear(),Y(e))},{defer:!0})),w(function(){h.clear(),T.clear()});let Q=async()=>{if(!(!o.lazyItems||J()!==null||X())){Z(!0);try{Y(await o.lazyItems())}catch(e){if(o.onError){let t={source:`root`,error:e,message:e instanceof Error?e.message:`Failed to load menu items`};o.onError(t)}}finally{Z(!1)}}};q&&Q();let $=y(()=>e(M({size:o.size,direction:o.direction}),t(o.color),o.class?.root));return o.setMenuFunction&&o.setMenuFunction({focusById:z,collapseById:B,refreshById:V,refreshAll:H,collapseAll:U,expandedAll:W}),[a(_,{get when(){return X()},get children(){var t=k();return s(()=>i(t,e($(),`flex size-full justify-center p-4`))),t}}),a(_,{get when(){return!X()},get children(){return a(_,{get when(){return l(()=>!!J())()&&J().length>0},get fallback(){return(()=>{var e=j();return e.firstChild,c(e,a(n,{get icon(){return a(r,{size:10})},variant:`default`,size:`4xs`,class:`w-fit px-1.5`,onClick:Q,children:`Try again`}),null),e})()},get children(){var e=A();return m(e=>p=e,e),f(e,u({get class(){return $()}},()=>o.id&&{id:o.id}),!1,!0),c(e,a(g,{get each(){return J()},children:e=>K(e)})),e}})}})]};o([`click`]);export{L as Menu};
|
|
2
|
+
//# sourceMappingURL=menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"menu.js","names":["cn","getColor","cva","VariantProps","RefreshCw","Accessor","Component","createEffect","createMemo","createSignal","createUniqueId","For","JSXElement","mergeProps","on","onCleanup","onMount","Setter","Show","Button","FolderItem","ItemClickInfo","MenuErrorInfo","MenuItem","MenuProps","menuVariants","variants","size","xs","sm","md","lg","xl","direction","vertical","horizontal","MenuVariantsProps","NodeRegistry","parentMap","Map","register","id","parentId","set","getPath","path","currentId","unshift","get","has","clear","LazyFolderRegistry","refreshFns","refreshFn","unregister","delete","refresh","fn","refreshAll","forEach","LazyFolderContent","item","renderItems","shouldLoad","isLoading","setIsLoading","onLoadError","error","onRegisterRefresh","props","loadedItems","setLoadedItems","loadItems","force","lazyItems","items","e","defer","_$createComponent","when","children","each","subItem","ACTIVE_CLASSNAME","Menu","p","color","highlightActive","const","ulRootRef","HTMLUListElement","nodeRegistry","lazyFolderRegistry","addActiveClassForId","length","elements","Array","from","getElementsByClassName","el","classList","remove","nodeId","document","getElementById","add","expandPathToId","element","details","querySelector","HTMLDetailsElement","open","focusById","console","warn","collapseById","refreshById","collapseAll","detailsList","querySelectorAll","d","expandedAll","collapseOtherRootFolders","exceptId","rootFolders","li","parentElement","itemId","type","folderItem","defaultExpanded","isLazyFolder","undefined","setShouldLoad","detailsRef","handleToggle","Event","currentTarget","isExpanded","preventDefault","handleLoadError","onError","errorInfo","source","message","Error","handleFolderClick","MouseEvent","stopPropagation","disabled","currentIsExpanded","willExpand","setTimeout","onItemClick","info","data","_el$","_tmpl$2","_el$2","firstChild","_el$3","_el$5","nextSibling","_$setAttribute","addEventListener","_ref$","_$use","$$click","_$insert","content","Element","_tmpl$","fallback","_$effect","_p$","_v$","class","itemWrap","_v$2","_v$3","itemHeader","_$className","t","a","handleFileClick","_el$6","_tmpl$3","_el$7","handleTitleClick","contains","_el$8","_tmpl$4","_el$9","_el$0","isLazyRoot","rootItems","setRootItems","isRootLoading","setIsRootLoading","clearMenuRegistries","loadRootItems","menuClass","root","setMenuFunction","_el$1","_tmpl$5","_$memo","_el$11","_tmpl$7","_el$12","icon","variant","onClick","_el$10","_tmpl$6","ele","_$spread","_$mergeProps","_$delegateEvents"],"sources":["../../../../src/components/menu/menu.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\r\nimport { getColor } from '@/utils/helper';\r\nimport { cva, type VariantProps } from 'class-variance-authority';\r\nimport RefreshCw from 'lucide-solid/icons/refresh-cw';\r\nimport {\r\n Accessor,\r\n Component,\r\n createEffect,\r\n createMemo,\r\n createSignal,\r\n createUniqueId,\r\n For,\r\n JSXElement,\r\n mergeProps,\r\n on,\r\n onCleanup,\r\n onMount,\r\n Setter,\r\n Show,\r\n} from 'solid-js';\r\nimport { Button } from '../button';\r\nimport type { FolderItem, ItemClickInfo, MenuErrorInfo, MenuItem, MenuProps } from './menu.types';\r\n\r\nconst menuVariants = cva('menu', {\r\n variants: {\r\n size: { xs: 'menu-xs', sm: 'menu-sm', md: 'menu-md', lg: 'menu-lg', xl: 'menu-xl' },\r\n direction: { vertical: 'menu-vertical', horizontal: 'menu-horizontal' },\r\n },\r\n});\r\n\r\nexport type MenuVariantsProps = VariantProps<typeof menuVariants>;\r\n\r\nclass NodeRegistry {\r\n private parentMap = new Map<string, string | null>();\r\n register(id: string, parentId: string | null) {\r\n this.parentMap.set(id, parentId);\r\n }\r\n getPath(id: string): string[] {\r\n const path: string[] = [];\r\n let currentId: string | null | undefined = id;\r\n while (currentId != null) {\r\n path.unshift(currentId);\r\n currentId = this.parentMap.get(currentId);\r\n }\r\n return path;\r\n }\r\n has(id: string): boolean {\r\n return this.parentMap.has(id);\r\n }\r\n clear() {\r\n this.parentMap.clear();\r\n }\r\n}\r\n\r\nclass LazyFolderRegistry {\r\n private refreshFns = new Map<string, () => void>();\r\n register(id: string, refreshFn: () => void) {\r\n this.refreshFns.set(id, refreshFn);\r\n }\r\n unregister(id: string) {\r\n this.refreshFns.delete(id);\r\n }\r\n refresh(id: string) {\r\n const fn = this.refreshFns.get(id);\r\n if (fn) fn();\r\n }\r\n refreshAll() {\r\n this.refreshFns.forEach(fn => fn());\r\n }\r\n has(id: string): boolean {\r\n return this.refreshFns.has(id);\r\n }\r\n clear() {\r\n this.refreshFns.clear();\r\n }\r\n}\r\n\r\nconst LazyFolderContent: Component<{\r\n item: FolderItem;\r\n renderItems: (item: MenuItem, parentId: string | null) => JSXElement;\r\n parentId: string | null;\r\n shouldLoad: Accessor<boolean>;\r\n isLoading: Accessor<boolean>;\r\n setIsLoading: Setter<boolean>;\r\n onLoadError: (error: unknown) => void;\r\n onRegisterRefresh: (refreshFn: () => void) => void;\r\n}> = props => {\r\n const [loadedItems, setLoadedItems] = createSignal<MenuItem[] | null>(null);\r\n const loadItems = async (force = false) => {\r\n if (props.isLoading()) return;\r\n if (loadedItems() !== null && !force) return;\r\n if (!props.item.lazyItems) return;\r\n props.setIsLoading(true);\r\n try {\r\n const items = await props.item.lazyItems();\r\n setLoadedItems(items);\r\n } catch (e) {\r\n props.onLoadError(e);\r\n } finally {\r\n props.setIsLoading(false);\r\n }\r\n };\r\n const refresh = () => {\r\n loadItems(true);\r\n };\r\n onMount(() => {\r\n props.onRegisterRefresh(refresh);\r\n });\r\n createEffect(\r\n on(\r\n () => props.shouldLoad(),\r\n shouldLoad => {\r\n if (shouldLoad && loadedItems() === null) {\r\n loadItems();\r\n }\r\n },\r\n { defer: true },\r\n ),\r\n );\r\n return (\r\n <Show when={loadedItems()}>\r\n <For each={loadedItems()!}>{subItem => props.renderItems(subItem, props.parentId)}</For>\r\n </Show>\r\n );\r\n};\r\n\r\nconst ACTIVE_CLASSNAME = '_6ca32a';\r\nexport const Menu: Component<MenuProps> = p => {\r\n p = mergeProps(\r\n { size: 'md', direction: 'vertical', color: 'secondary', highlightActive: true } as const,\r\n p,\r\n );\r\n let ulRootRef: HTMLUListElement;\r\n const nodeRegistry = new NodeRegistry();\r\n const lazyFolderRegistry = new LazyFolderRegistry();\r\n function addActiveClassForId(id: string) {\r\n if (!ulRootRef || !p.highlightActive) return;\r\n const path = nodeRegistry.getPath(id);\r\n if (path.length === 0) return;\r\n\r\n const elements = Array.from(ulRootRef.getElementsByClassName(ACTIVE_CLASSNAME));\r\n\r\n for (const el of elements) el.classList.remove(ACTIVE_CLASSNAME);\r\n for (const nodeId of path) document.getElementById(nodeId)?.classList?.add(ACTIVE_CLASSNAME);\r\n }\r\n function expandPathToId(id: string) {\r\n const path = nodeRegistry.getPath(id);\r\n for (const nodeId of path) {\r\n const element = document.getElementById(nodeId);\r\n if (!element) continue;\r\n const details = element.querySelector(':scope > details') as HTMLDetailsElement | null;\r\n if (details && !details.open) {\r\n details.open = true;\r\n }\r\n }\r\n }\r\n function focusById(id: string) {\r\n if (!nodeRegistry.has(id)) {\r\n console.warn(`Menu.focusById: Node with id \"${id}\" not found in registry`);\r\n return;\r\n }\r\n expandPathToId(id);\r\n addActiveClassForId(id);\r\n }\r\n function collapseById(id: string) {\r\n const element = document.getElementById(id);\r\n if (!element) {\r\n console.warn(`Menu.collapseById: Element with id \"${id}\" not found`);\r\n return;\r\n }\r\n const details = element.querySelector(':scope > details') as HTMLDetailsElement | null;\r\n if (details) {\r\n details.open = false;\r\n const elements = details.getElementsByClassName(ACTIVE_CLASSNAME);\r\n for (const el of elements) el.classList.remove(ACTIVE_CLASSNAME);\r\n element.classList.remove(ACTIVE_CLASSNAME);\r\n }\r\n }\r\n function refreshById(id: string) {\r\n if (!lazyFolderRegistry.has(id)) {\r\n console.warn(`Menu.refreshById: Lazy folder with id \"${id}\" not found`);\r\n return;\r\n }\r\n lazyFolderRegistry.refresh(id);\r\n }\r\n function refreshAll() {\r\n lazyFolderRegistry.refreshAll();\r\n }\r\n function collapseAll() {\r\n if (!ulRootRef) return;\r\n const detailsList = ulRootRef.querySelectorAll('details');\r\n detailsList.forEach(d => (d.open = false));\r\n }\r\n function expandedAll() {\r\n if (!ulRootRef) return;\r\n const detailsList = ulRootRef.querySelectorAll('details');\r\n detailsList.forEach(d => (d.open = true));\r\n }\r\n function collapseOtherRootFolders(exceptId: string) {\r\n if (!ulRootRef) return;\r\n // Only collapse direct children (level 1 folders)\r\n const rootFolders = ulRootRef.querySelectorAll(':scope > li.folder > details');\r\n rootFolders.forEach(details => {\r\n const li = details.parentElement;\r\n if (li && li.id !== exceptId && (details as HTMLDetailsElement).open) {\r\n (details as HTMLDetailsElement).open = false;\r\n }\r\n });\r\n }\r\n function renderItems(item: MenuItem, parentId: string | null = null) {\r\n const itemId = item.id ?? createUniqueId();\r\n nodeRegistry.register(itemId, parentId);\r\n\r\n if (item.type === 'folder') {\r\n const folderItem = mergeProps(\r\n { defaultExpanded: item.defaultExpanded ?? p.defaultExpanded ?? false },\r\n item,\r\n { id: itemId },\r\n );\r\n const isLazyFolder = folderItem.lazyItems !== undefined;\r\n const [shouldLoad, setShouldLoad] = createSignal(folderItem.defaultExpanded);\r\n const [isLoading, setIsLoading] = createSignal(false);\r\n let detailsRef: HTMLDetailsElement | undefined;\r\n\r\n const handleToggle = (e: Event) => {\r\n const details = e.currentTarget as HTMLDetailsElement;\r\n const isExpanded = details.open;\r\n if (isLoading()) {\r\n e.preventDefault();\r\n return;\r\n }\r\n if (isLazyFolder) {\r\n setShouldLoad(isExpanded);\r\n }\r\n };\r\n\r\n const handleLoadError = (error: unknown) => {\r\n if (detailsRef) {\r\n detailsRef.open = false;\r\n }\r\n setShouldLoad(false);\r\n if (p.onError) {\r\n const errorInfo: MenuErrorInfo = {\r\n source: 'folder',\r\n itemId,\r\n path: nodeRegistry.getPath(itemId),\r\n error,\r\n message: error instanceof Error ? error.message : 'Failed to load folder items',\r\n };\r\n p.onError(errorInfo);\r\n }\r\n };\r\n\r\n const handleFolderClick = (e: MouseEvent) => {\r\n e.stopPropagation();\r\n if (isLoading() || item.disabled) {\r\n e.preventDefault();\r\n return;\r\n }\r\n\r\n const currentIsExpanded = detailsRef?.open ?? folderItem.defaultExpanded;\r\n const willExpand = !currentIsExpanded;\r\n\r\n // In horizontal mode, collapse other root folders when expanding a root folder\r\n if (p.direction === 'horizontal' && parentId === null && willExpand) {\r\n collapseOtherRootFolders(itemId);\r\n }\r\n\r\n if (detailsRef?.open === false) {\r\n addActiveClassForId(itemId);\r\n } else {\r\n setTimeout(() => {\r\n collapseById(itemId);\r\n });\r\n }\r\n\r\n if (p.onItemClick) {\r\n const isExpanded = willExpand;\r\n const info: ItemClickInfo = {\r\n id: itemId,\r\n path: nodeRegistry.getPath(itemId),\r\n type: 'folder',\r\n isExpanded,\r\n data: item.data,\r\n };\r\n p.onItemClick(info);\r\n }\r\n };\r\n return (\r\n <li\r\n class={cn(\r\n 'folder',\r\n (folderItem.disabled || isLoading()) && 'menu-disabled',\r\n p.class?.itemWrap,\r\n )}\r\n id={itemId}\r\n >\r\n <details ref={detailsRef} open={folderItem.defaultExpanded} onToggle={handleToggle}>\r\n <summary\r\n class={cn(isLoading() && 'after:hidden', p.class?.itemHeader)}\r\n onClick={handleFolderClick}\r\n >\r\n {folderItem.content as Element}\r\n <Show when={isLoading()}>\r\n <span class=\"loading loading-spinner loading-xs\"></span>\r\n </Show>\r\n </summary>\r\n <ul>\r\n <Show\r\n when={isLazyFolder}\r\n fallback={\r\n <For each={(folderItem as { items: MenuItem[] }).items}>\r\n {subItem => renderItems(subItem, itemId)}\r\n </For>\r\n }\r\n >\r\n <LazyFolderContent\r\n {...{\r\n renderItems,\r\n shouldLoad,\r\n isLoading,\r\n setIsLoading,\r\n item: folderItem,\r\n parentId: itemId,\r\n onLoadError: handleLoadError,\r\n onRegisterRefresh: refreshFn => lazyFolderRegistry.register(itemId, refreshFn),\r\n }}\r\n />\r\n </Show>\r\n </ul>\r\n </details>\r\n </li>\r\n );\r\n }\r\n if (item.type === 'file') {\r\n const handleFileClick = (e: MouseEvent) => {\r\n e.stopPropagation();\r\n addActiveClassForId(itemId);\r\n\r\n if (p.onItemClick) {\r\n const info: ItemClickInfo = {\r\n id: itemId,\r\n path: nodeRegistry.getPath(itemId),\r\n type: 'file',\r\n ...(item.data && { data: item.data }),\r\n };\r\n p.onItemClick(info);\r\n }\r\n };\r\n return (\r\n <li\r\n class={cn('file', item.disabled && 'menu-disabled', p.class?.itemWrap)}\r\n id={itemId}\r\n tabindex=\"0\"\r\n onClick={handleFileClick}\r\n >\r\n <div>{item.content as Element}</div>\r\n </li>\r\n );\r\n }\r\n if (item.type === 'title') {\r\n const handleTitleClick = (e: MouseEvent) => {\r\n e.stopPropagation();\r\n\r\n const li = document.getElementById(itemId);\r\n if (li && li.classList.contains(ACTIVE_CLASSNAME)) {\r\n const elements = li.getElementsByClassName(ACTIVE_CLASSNAME);\r\n for (const el of elements) el.classList.remove(ACTIVE_CLASSNAME);\r\n li.classList.remove(ACTIVE_CLASSNAME);\r\n } else {\r\n addActiveClassForId(itemId);\r\n }\r\n\r\n if (p.onItemClick) {\r\n const info: ItemClickInfo = {\r\n id: itemId,\r\n path: nodeRegistry.getPath(itemId),\r\n type: 'title',\r\n ...(item.data && { data: item.data }),\r\n };\r\n p.onItemClick(info);\r\n }\r\n };\r\n return (\r\n <li class={cn('title', item.disabled && 'menu-disabled', p.class?.itemWrap)} id={itemId}>\r\n <h4 class=\"menu-title\" onClick={handleTitleClick}>\r\n {item.content as Element}\r\n </h4>\r\n <ul>\r\n <For each={item.items}>{subItem => renderItems(subItem, itemId)}</For>\r\n </ul>\r\n </li>\r\n );\r\n }\r\n }\r\n const isLazyRoot = p.lazyItems !== undefined;\r\n const [rootItems, setRootItems] = createSignal<MenuItem[] | null>(\r\n isLazyRoot ? null : (p.items ?? []),\r\n );\r\n const [isRootLoading, setIsRootLoading] = createSignal(false);\r\n\r\n createEffect(\r\n on(\r\n () => p.items,\r\n items => {\r\n if (!isLazyRoot && items) {\r\n nodeRegistry.clear();\r\n lazyFolderRegistry.clear();\r\n setRootItems(items);\r\n }\r\n },\r\n { defer: true },\r\n ),\r\n );\r\n\r\n onCleanup(function clearMenuRegistries() {\r\n nodeRegistry.clear();\r\n lazyFolderRegistry.clear();\r\n });\r\n\r\n const loadRootItems = async () => {\r\n if (!p.lazyItems || rootItems() !== null || isRootLoading()) return;\r\n setIsRootLoading(true);\r\n try {\r\n const items = await p.lazyItems();\r\n setRootItems(items);\r\n } catch (e) {\r\n if (p.onError) {\r\n const errorInfo: MenuErrorInfo = {\r\n source: 'root',\r\n error: e,\r\n message: e instanceof Error ? e.message : 'Failed to load menu items',\r\n };\r\n p.onError(errorInfo);\r\n }\r\n } finally {\r\n setIsRootLoading(false);\r\n }\r\n };\r\n if (isLazyRoot) {\r\n loadRootItems();\r\n }\r\n const menuClass = createMemo(() =>\r\n cn(menuVariants({ size: p.size, direction: p.direction }), getColor(p.color), p.class?.root),\r\n );\r\n\r\n if (p.setMenuFunction) {\r\n p.setMenuFunction({\r\n focusById,\r\n collapseById,\r\n refreshById,\r\n refreshAll,\r\n collapseAll,\r\n expandedAll,\r\n });\r\n }\r\n return (\r\n <>\r\n <Show when={isRootLoading()}>\r\n <div class={cn(menuClass(), 'flex size-full justify-center p-4')}>\r\n <span class=\"loading loading-spinner loading-md m-auto\"></span>\r\n </div>\r\n </Show>\r\n <Show when={!isRootLoading()}>\r\n <Show\r\n when={rootItems() && rootItems()!.length > 0}\r\n fallback={\r\n <div class=\"text-base-content/50 flex flex-col items-center justify-center gap-2 p-4 text-center text-sm italic\">\r\n <span>No menu items available.</span>\r\n <Button\r\n icon={<RefreshCw size={10} />}\r\n variant={'default'}\r\n size={'4xs'}\r\n class=\"w-fit px-1.5\"\r\n onClick={loadRootItems}\r\n >\r\n Try again\r\n </Button>\r\n </div>\r\n }\r\n >\r\n <ul class={menuClass()} ref={ele => (ulRootRef = ele)} {...(p.id && { id: p.id })}>\r\n <For each={rootItems()!}>{item => renderItems(item)}</For>\r\n </ul>\r\n </Show>\r\n </Show>\r\n </>\r\n );\r\n};\r\n"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{cn as e}from"../../utils/cn.js";import{renderCSSAnimation as t}from"../../utils/helper.js";import{ZIndexType as n}from"../z-index/z-index.types.js";import{ZIndex as r}from"../z-index/z-index.js";import{x_default as i}from"../../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/x.js";import{conditionalRender as a}from"../../utils/hoc.js";import{addEventListener as o,className as s,createComponent as c,delegateEvents as l,effect as u,insert as d,memo as f,style as p,template as m}from"solid-js/web";import{Show as h,createEffect as g,createSignal as _,createUniqueId as v,mergeProps as y,on as b,onCleanup as x}from"solid-js";var S=m(`<div>`),C=m(`<div class=mo02>`),w=m(`<div aria-hidden=true>`),T=m(`<div class=mo03><div><div></div><div>`),E=m(`<button aria-label=Close>`),D=m(`<div class=mo07>Modal ID: `),O=new Set([`lightSpeedInRight`,`lightSpeedInLeft`,`fadeInLeft`,`fadeInRight`,`fadeInDown`,`fadeInUp`,`bounceIn`,`scaleInCenter`,`slideInFwdCenter`,`slideInBck`,`tiltIn`,`swingInRightBck`,`puffInCenter`,`scaleInBl`]),[k,A]=_([]);function j(){let e=k().slice();e.pop(),A(e)}var M=new Map;function N(e){if(e.key!==`Escape`)return;let t=k().at(-1);t&&M.get(t)?.()}function P(e,t){M.size===0&&document.addEventListener(`keydown`,N),M.set(e,t)}function F(e){M.delete(e),M.size===0&&document.removeEventListener(`keydown`,N)}var I=a=>{a=y({closeOnOutsideClick:!0,closeOnEsc:!0,open:!0,onClose:()=>{},closable:!0,preRender:!1,animate:{name:`puffInCenter`,duration:`300ms`},mask:!0},a);let l=v();x(function(){F(l),l===k().at(-1)&&j()}),g(b(()=>a.open,e=>{e?(l!==k().at(-1)&&A([...k(),l]),P(l,()=>{a.closeOnEsc&&a.onClose()})):(F(l),l===k().at(-1)&&j())}));let m=()=>!(!a.open||l!==k().at(-1)||a.mask===!1||typeof a.mask==`object`&&a.mask?.enabled===!1),M=()=>typeof a.mask==`object`&&a.mask?.blur===!1?`bg-modal-overlay`:`bg-modal-overlay backdrop-blur-[5px]`,N=()=>a.animate?.name??`none`,I=()=>O.has(N()),L=()=>!I()&&N()!==`none`?{animation:t(a.animate)}:{},R=()=>I()?{animation:t(a.animate)}:{},z=()=>{let e={};return a.width&&(e.width=a.width,e[`min-width`]=a.width),e},[B,V]=_(!1),H=()=>V(!0);g(b(()=>a.open,e=>{e&&V(!1)}));let U=()=>!I()||B(),W=()=>{a.closeOnOutsideClick&&a.onClose()};return c(r,{get type(){return n.MODAL},get open(){return a.open??!1},blockScroll:!0,get preRender(){return a.preRender},position:{inset:`0`},get class(){return e(`mo01`,a.class?.wrapper)},get children(){return[c(h,{get when(){return m()},get children(){var t=S();return t.$$click=W,u(()=>s(t,e(`mo02`,M()))),t}}),c(h,{get when(){return f(()=>!m())()&&a.closeOnOutsideClick},get children(){var e=C();return e.$$click=W,e}}),(()=>{var t=T(),n=t.firstChild,r=n.firstChild,m=r.nextSibling;return t.$$click=e=>e.stopPropagation(),d(t,c(h,{get when(){return f(()=>!!I())()&&!B()},get children(){var t=w();return t.addEventListener(`animationend`,H),u(n=>{var r=e(`mo04`,a.class?.modal),i={...z(),...R()};return r!==n.e&&s(t,n.e=r),n.t=p(t,i,n.t),n},{e:void 0,t:void 0}),t}}),n),d(n,(()=>{var t=f(()=>!!a.closable);return()=>t()&&(()=>{var t=E();return o(t,`click`,a.onClose,!0),d(t,c(i,{size:16})),u(()=>s(t,e(`mo06`,a.class?.closeButton))),t})()})(),r),d(r,c(h,{get when(){return a.header},get fallback(){return(()=>{var e=D();return e.firstChild,d(e,l,null),e})()},get children(){return a.header}})),d(m,c(h,{get when(){return a.body},get children(){return a.body}})),d(n,c(h,{get when(){return a.footer},get children(){var t=S();return d(t,()=>a.footer),u(()=>s(t,e(`mo-footer`,a.class?.footer))),t}}),null),u(t=>{var i=e(`mo05`,a.class?.modal),o={...L(),...z(),visibility:U()?`visible`:`hidden`},c=e(`mo-header`,a.class?.header),l=e(`mo08`,a.class?.body);return i!==t.e&&s(n,t.e=i),t.t=p(n,o,t.t),c!==t.a&&s(r,t.a=c),l!==t.o&&s(m,t.o=l),t},{e:void 0,t:void 0,a:void 0,o:void 0}),t})()]}})},L=a(I,{preRender:`preRender`,when:`open`});l([`click`]);export{I as ComponentModal,L as Modal};
|
|
2
|
+
//# sourceMappingURL=modal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modal.js","names":["SolidComponent","cn","AnimationConfig","renderCSSAnimation","conditionalRender","X","Component","createEffect","createSignal","createUniqueId","mergeProps","on","onCleanup","Show","ZIndex","ZIndexType","ModalType","onClose","width","closeOnOutsideClick","closeOnEsc","closable","header","body","footer","open","mask","enabled","blur","class","Partial","Record","preRender","animate","Omit","name","AnimateType","TRANSFORM_ANIMATIONS","Set","modalIds","setModalIds","popModalId","newArr","slice","pop","modalCloseCallbacks","Map","globalKeyDownHandler","e","KeyboardEvent","key","topId","at","get","registerModalCallback","id","cb","size","document","addEventListener","set","unregisterModalCallback","delete","removeEventListener","ComponentModal","p","duration","modalId","unregisterModal","renderMaskEnabled","renderMaskClass","animName","isTransformAnim","has","renderModalBoxAnim","animation","renderOverlayAnim","renderBoxStyle","style","overlayDone","setOverlayDone","handleOverlayAnimEnd","boxVisible","handleBackdropClick","_$createComponent","type","MODAL","blockScroll","position","inset","wrapper","children","when","_el$","_tmpl$","$$click","_$effect","_$className","_$memo","_el$2","_tmpl$2","_el$3","_tmpl$4","_el$5","firstChild","_el$6","_el$7","nextSibling","stopPropagation","_$insert","_el$4","_tmpl$3","_p$","_v$","modal","_v$2","t","_$style","undefined","_c$","_el$9","_tmpl$5","_$addEventListener","closeButton","fallback","_el$0","_tmpl$6","_el$1","Element","_el$8","_v$3","_v$4","visibility","_v$5","_v$6","a","o","Modal","_$delegateEvents"],"sources":["../../../../src/components/modal/modal.tsx"],"sourcesContent":["import { SolidComponent } from '@/type';\r\nimport { cn } from '@/utils/cn';\r\nimport { AnimationConfig, renderCSSAnimation } from '@/utils/helper';\r\nimport { conditionalRender } from '@/utils/hoc';\r\nimport X from 'lucide-solid/icons/x';\r\n\r\nimport {\r\n Component,\r\n createEffect,\r\n createSignal,\r\n createUniqueId,\r\n mergeProps,\r\n on,\r\n onCleanup,\r\n Show,\r\n} from 'solid-js';\r\nimport { ZIndex, ZIndexType } from '../z-index';\r\n\r\nexport type ModalType = {\r\n onClose: () => void;\r\n width?: string;\r\n closeOnOutsideClick?: boolean;\r\n closeOnEsc?: boolean;\r\n closable?: boolean;\r\n header?: SolidComponent;\r\n body?: SolidComponent;\r\n footer?: SolidComponent;\r\n open?: boolean;\r\n mask?: boolean | { enabled: boolean; blur: boolean };\r\n class?: Partial<\r\n Record<'wrapper' | 'modal' | 'header' | 'body' | 'footer' | 'closeButton', string>\r\n >;\r\n preRender?: boolean;\r\n animate?: Omit<AnimationConfig, 'name'> & {\r\n name: AnimateType;\r\n };\r\n};\r\n\r\n// Only opacity-based animations are safe to use on the modal box directly\r\n// because transform-based animations create a new containing block for\r\n// position:fixed descendants, which breaks fixed positioning inside body slots.\r\n// Transform animations are applied on a sibling overlay div instead.\r\ntype AnimateType =\r\n | 'none'\r\n | 'lightSpeedInRight'\r\n | 'lightSpeedInLeft'\r\n | 'fadeIn'\r\n | 'fadeInLeft'\r\n | 'fadeInRight'\r\n | 'fadeInDown'\r\n | 'fadeInUp'\r\n | 'bounceIn'\r\n | 'scaleInCenter'\r\n | 'slideInFwdCenter'\r\n | 'slideInBck'\r\n | 'tiltIn'\r\n | 'swingInRightBck'\r\n | 'puffInCenter'\r\n | 'scaleInBl';\r\n\r\n// Animations that use transform in their keyframes — these create a containing\r\n// block for position:fixed elements during the animation. They must NOT be\r\n// placed on any ancestor of body content.\r\nconst TRANSFORM_ANIMATIONS = new Set<AnimateType>([\r\n 'lightSpeedInRight',\r\n 'lightSpeedInLeft',\r\n 'fadeInLeft',\r\n 'fadeInRight',\r\n 'fadeInDown',\r\n 'fadeInUp',\r\n 'bounceIn',\r\n 'scaleInCenter',\r\n 'slideInFwdCenter',\r\n 'slideInBck',\r\n 'tiltIn',\r\n 'swingInRightBck',\r\n 'puffInCenter',\r\n 'scaleInBl',\r\n]);\r\n\r\n// Track active modals for overlay logic (only topmost modal shows mask)\r\nconst [modalIds, setModalIds] = createSignal<string[]>([]);\r\nfunction popModalId() {\r\n const newArr = modalIds().slice();\r\n newArr.pop();\r\n setModalIds(newArr);\r\n}\r\n\r\n// Global ESC key handler — single listener shared across all modal instances\r\nconst modalCloseCallbacks = new Map<string, () => void>();\r\n\r\nfunction globalKeyDownHandler(e: KeyboardEvent) {\r\n if (e.key !== 'Escape') return;\r\n const topId = modalIds().at(-1);\r\n if (topId) modalCloseCallbacks.get(topId)?.();\r\n}\r\n\r\nfunction registerModalCallback(id: string, cb: () => void) {\r\n if (modalCloseCallbacks.size === 0) {\r\n document.addEventListener('keydown', globalKeyDownHandler);\r\n }\r\n modalCloseCallbacks.set(id, cb);\r\n}\r\n\r\nfunction unregisterModalCallback(id: string) {\r\n modalCloseCallbacks.delete(id);\r\n if (modalCloseCallbacks.size === 0) {\r\n document.removeEventListener('keydown', globalKeyDownHandler);\r\n }\r\n}\r\n\r\nconst ComponentModal: Component<ModalType> = p => {\r\n p = mergeProps(\r\n {\r\n closeOnOutsideClick: true,\r\n closeOnEsc: true,\r\n open: true,\r\n onClose: () => {},\r\n closable: true,\r\n preRender: false,\r\n animate: {\r\n name: 'puffInCenter',\r\n duration: '300ms',\r\n },\r\n mask: true,\r\n } as ModalType,\r\n p,\r\n );\r\n\r\n const modalId = createUniqueId();\r\n\r\n onCleanup(function unregisterModal() {\r\n unregisterModalCallback(modalId);\r\n if (modalId === modalIds().at(-1)) {\r\n popModalId();\r\n }\r\n });\r\n\r\n // Manage modalIds stack for overlay logic\r\n createEffect(\r\n on(\r\n () => p.open,\r\n open => {\r\n if (open) {\r\n if (modalId !== modalIds().at(-1)) {\r\n setModalIds([...modalIds(), modalId]);\r\n }\r\n registerModalCallback(modalId, () => {\r\n if (p.closeOnEsc) p.onClose();\r\n });\r\n } else {\r\n unregisterModalCallback(modalId);\r\n if (modalId === modalIds().at(-1)) {\r\n popModalId();\r\n }\r\n }\r\n },\r\n ),\r\n );\r\n\r\n const renderMaskEnabled = (): boolean => {\r\n if (!p.open) return false;\r\n if (modalId !== modalIds().at(-1)) return false;\r\n if (p.mask === false) return false;\r\n if (typeof p.mask === 'object' && p.mask?.enabled === false) return false;\r\n return true;\r\n };\r\n\r\n const renderMaskClass = (): string => {\r\n if (typeof p.mask === 'object' && p.mask?.blur === false) {\r\n return 'bg-modal-overlay';\r\n }\r\n return 'bg-modal-overlay backdrop-blur-[5px]';\r\n };\r\n\r\n const animName = (): AnimateType => p.animate?.name ?? 'none';\r\n const isTransformAnim = () => TRANSFORM_ANIMATIONS.has(animName());\r\n\r\n // For transform-based animations: rendered on a sibling absolutely-positioned\r\n // overlay div that visually matches the modal box but is NOT an ancestor of\r\n // body content. This completely avoids the containing-block issue.\r\n // For opacity-only animations (fadeIn): applied directly on the modal box.\r\n const renderModalBoxAnim = () => {\r\n if (!isTransformAnim() && animName() !== 'none') {\r\n return { animation: renderCSSAnimation(p.animate!) };\r\n }\r\n return {};\r\n };\r\n\r\n const renderOverlayAnim = () => {\r\n if (isTransformAnim()) {\r\n return { animation: renderCSSAnimation(p.animate!) };\r\n }\r\n return {};\r\n };\r\n\r\n const renderBoxStyle = () => {\r\n const style: Record<string, any> = {};\r\n if (p.width) {\r\n style['width'] = p.width;\r\n style['min-width'] = p.width;\r\n }\r\n return style;\r\n };\r\n\r\n // Overlay: a visually identical copy of the modal box that carries the\r\n // transform animation. It sits on top of the real modal box via absolute\r\n // positioning. Once animation ends it is hidden and the real box is shown.\r\n const [overlayDone, setOverlayDone] = createSignal(false);\r\n const handleOverlayAnimEnd = () => setOverlayDone(true);\r\n\r\n // Reset overlayDone each time modal re-opens so transform animation replays.\r\n createEffect(\r\n on(\r\n () => p.open,\r\n open => {\r\n if (open) setOverlayDone(false);\r\n },\r\n ),\r\n );\r\n\r\n // Real modal box becomes visible only after transform animation finishes\r\n // (to avoid showing both simultaneously).\r\n const boxVisible = () => !isTransformAnim() || overlayDone();\r\n\r\n const handleBackdropClick = () => {\r\n if (p.closeOnOutsideClick) {\r\n p.onClose();\r\n }\r\n };\r\n\r\n return (\r\n <ZIndex\r\n type={ZIndexType.MODAL}\r\n open={p.open ?? false}\r\n blockScroll\r\n preRender={p.preRender}\r\n position={{ inset: '0' }}\r\n class={cn('mo01', p.class?.wrapper)}\r\n >\r\n {/* Backdrop overlay — only for topmost modal */}\r\n <Show when={renderMaskEnabled()}>\r\n <div class={cn('mo02', renderMaskClass())} onClick={handleBackdropClick} />\r\n </Show>\r\n\r\n {/* Invisible hit area for outside-click when mask is disabled */}\r\n <Show when={!renderMaskEnabled() && p.closeOnOutsideClick}>\r\n <div class=\"mo02\" onClick={handleBackdropClick} />\r\n </Show>\r\n\r\n {/* Wrapper: flex item căn giữa bởi parent. Kích thước khớp real box.\r\n Overlay absolute bên trong → luôn cùng vị trí & kích thước với real box. */}\r\n <div class=\"mo03\" onClick={e => e.stopPropagation()}>\r\n {/* === Transform animation approach ===\r\n Overlay là visual clone với animation transform, positioned absolute\r\n bên trong wrapper → khớp 100% kích thước/vị trí với real box.\r\n Giữ body content thoát khỏi transform ancestor. */}\r\n <Show when={isTransformAnim() && !overlayDone()}>\r\n <div\r\n class={cn('mo04', p.class?.modal)}\r\n style={{ ...renderBoxStyle(), ...renderOverlayAnim() }}\r\n onAnimationEnd={handleOverlayAnimEnd}\r\n aria-hidden=\"true\"\r\n />\r\n </Show>\r\n\r\n {/* === Real modal box ===\r\n Dùng opacity animation (an toàn) hoặc không animation.\r\n Body content luôn thoát khỏi transform ancestor. */}\r\n <div\r\n class={cn('mo05', p.class?.modal)}\r\n style={{\r\n ...renderModalBoxAnim(),\r\n ...renderBoxStyle(),\r\n visibility: boxVisible() ? 'visible' : 'hidden',\r\n }}\r\n >\r\n {p.closable && (\r\n <button class={cn('mo06', p.class?.closeButton)} onClick={p.onClose} aria-label=\"Close\">\r\n <X size={16} />\r\n </button>\r\n )}\r\n\r\n <div class={cn('mo-header', p.class?.header)}>\r\n <Show when={p.header} fallback={<div class=\"mo07\">Modal ID: {modalId}</div>}>\r\n {p.header as Element}\r\n </Show>\r\n </div>\r\n\r\n <div class={cn('mo08', p.class?.body)}>\r\n <Show when={p.body}>{p.body as Element}</Show>\r\n </div>\r\n\r\n <Show when={p.footer}>\r\n <div class={cn('mo-footer', p.class?.footer)}>{p.footer as Element}</div>\r\n </Show>\r\n </div>\r\n </div>\r\n </ZIndex>\r\n );\r\n};\r\n\r\nexport const Modal = conditionalRender(ComponentModal, { preRender: 'preRender', when: 'open' });\r\n\r\nexport { ComponentModal };\r\n"],"mappings":"s2BA+DMqC,EAAuB,IAAIC,IAAiB,CAChD,oBACA,mBACA,aACA,cACA,aACA,WACA,WACA,gBACA,mBACA,aACA,SACA,kBACA,eACA,YACD,CAAC,CAGI,CAACC,EAAUC,GAAehC,EAAuB,EAAE,CAAC,CAC1D,SAASiC,GAAa,CACpB,IAAMC,EAASH,GAAU,CAACI,OAAO,CACjCD,EAAOE,KAAK,CACZJ,EAAYE,EAAO,CAIrB,IAAMG,EAAsB,IAAIC,IAEhC,SAASC,EAAqBC,EAAkB,CAC9C,GAAIA,EAAEE,MAAQ,SAAU,OACxB,IAAMC,EAAQZ,GAAU,CAACa,GAAG,GAAG,CAC3BD,GAAON,EAAoBQ,IAAIF,EAAM,IAAI,CAG/C,SAASG,EAAsBC,EAAYC,EAAgB,CACrDX,EAAoBY,OAAS,GAC/BC,SAASC,iBAAiB,UAAWZ,EAAqB,CAE5DF,EAAoBe,IAAIL,EAAIC,EAAG,CAGjC,SAASK,EAAwBN,EAAY,CAC3CV,EAAoBiB,OAAOP,EAAG,CAC1BV,EAAoBY,OAAS,GAC/BC,SAASK,oBAAoB,UAAWhB,EAAqB,CAIjE,IAAMiB,EAAuCC,GAAK,CAChDA,EAAIvD,EACF,CACES,oBAAqB,GACrBC,WAAY,GACZK,KAAM,GACNR,YAAe,GACfI,SAAU,GACVW,UAAW,GACXC,QAAS,CACPE,KAAM,eACN+B,SAAU,QACX,CACDxC,KAAM,GACP,CACDuC,EACD,CAED,IAAME,EAAU1D,GAAgB,CAEhCG,EAAU,UAA2B,CACnCiD,EAAwBM,EAAQ,CAC5BA,IAAY5B,GAAU,CAACa,GAAG,GAAG,EAC/BX,GAAY,EAEd,CAGFlC,EACEI,MACQsD,EAAExC,KACRA,GAAQ,CACFA,GACE0C,IAAY5B,GAAU,CAACa,GAAG,GAAG,EAC/BZ,EAAY,CAAC,GAAGD,GAAU,CAAE4B,EAAQ,CAAC,CAEvCb,EAAsBa,MAAe,CAC/BF,EAAE7C,YAAY6C,EAAEhD,SAAS,EAC7B,GAEF4C,EAAwBM,EAAQ,CAC5BA,IAAY5B,GAAU,CAACa,GAAG,GAAG,EAC/BX,GAAY,GAKtB,CAAC,CAED,IAAM4B,MAIJ,EAHI,CAACJ,EAAExC,MACH0C,IAAY5B,GAAU,CAACa,GAAG,GAAG,EAC7Ba,EAAEvC,OAAS,IACX,OAAOuC,EAAEvC,MAAS,UAAYuC,EAAEvC,MAAMC,UAAY,IAIlD2C,MACA,OAAOL,EAAEvC,MAAS,UAAYuC,EAAEvC,MAAME,OAAS,GAC1C,mBAEF,uCAGH2C,MAA8BN,EAAEhC,SAASE,MAAQ,OACjDqC,MAAwBnC,EAAqBoC,IAAIF,GAAU,CAAC,CAM5DG,MACA,CAACF,GAAiB,EAAID,GAAU,GAAK,OAChC,CAAEI,UAAWxE,EAAmB8D,EAAEhC,QAAQ,CAAG,CAE/C,EAAE,CAGL2C,MACAJ,GAAiB,CACZ,CAAEG,UAAWxE,EAAmB8D,EAAEhC,QAAQ,CAAG,CAE/C,EAAE,CAGL4C,MAAuB,CAC3B,IAAMC,EAA6B,EAAE,CAKrC,OAJIb,EAAE/C,QACJ4D,EAAM,MAAWb,EAAE/C,MACnB4D,EAAM,aAAeb,EAAE/C,OAElB4D,GAMH,CAACC,EAAaC,GAAkBxE,EAAa,GAAM,CACnDyE,MAA6BD,EAAe,GAAK,CAGvDzE,EACEI,MACQsD,EAAExC,KACRA,GAAQ,CACFA,GAAMuD,EAAe,GAAM,EAGrC,CAAC,CAID,IAAME,MAAmB,CAACV,GAAiB,EAAIO,GAAa,CAEtDI,MAA4B,CAC5BlB,EAAE9C,qBACJ8C,EAAEhD,SAAS,EAIf,OAAAmE,EACGtE,EAAM,CAAA,IACLuE,MAAI,CAAA,OAAEtE,EAAWuE,OAAK,IACtB7D,MAAI,CAAA,OAAEwC,EAAExC,MAAQ,IAChB8D,YAAW,GAAA,IACXvD,WAAS,CAAA,OAAEiC,EAAEjC,WACbwD,SAAU,CAAEC,MAAO,IAAK,CAAA,IAAA,OAAA,CAAA,OACjBxF,EAAG,OAAQgE,EAAEpC,OAAO6D,QAAQ,EAAA,IAAAC,UAAA,CAAA,MAAA,CAAAP,EAGlCvE,EAAI,CAAA,IAAC+E,MAAI,CAAA,OAAEvB,GAAmB,EAAA,IAAAsB,UAAA,CAAA,IAAAE,EAAAC,GAAA,CACY,MADZD,GAAAE,QACuBZ,EAAmBa,MAAAC,EAAAJ,EAA3D5F,EAAG,OAAQqE,GAAiB,CAAC,CAAA,CAAA,CAAAuB,GAAA,CAAA,CAAAT,EAI1CvE,EAAI,CAAA,IAAC+E,MAAI,CAAA,OAAEM,MAAA,CAAC7B,GAAmB,CAAA,EAAA,EAAIJ,EAAE9C,qBAAmB,IAAAwE,UAAA,CAAA,IAAAQ,EAAAC,GAAA,CACT,MADSD,GAAAJ,QAC5BZ,EAAmBgB,GAAA,CAAA,MAAA,CAAA,IAAAE,EAAAC,GAAA,CAAAC,EAAAF,EAAAG,WAAAC,EAAAF,EAAAC,WAAAE,EAAAD,EAAAE,YA0CP,MA1CON,GAAAN,QAKrB/C,GAAKA,EAAE4D,iBAAiB,CAAAC,EAAAR,EAAAjB,EAKhDvE,EAAI,CAAA,IAAC+E,MAAI,CAAA,OAAEM,MAAA,CAAA,CAAA1B,GAAiB,CAAA,EAAA,EAAI,CAACO,GAAa,EAAA,IAAAY,UAAA,CAAA,IAAAmB,EAAAC,GAAA,CAGW,OAHXD,EAAAnD,iBAAA,eAI3BsB,EAAoB,CAAAe,EAAAgB,GAAA,CAAA,IAAAC,EAF7BhH,EAAG,OAAQgE,EAAEpC,OAAOqF,MAAM,CAAAC,EAC1B,CAAE,GAAGtC,GAAgB,CAAE,GAAGD,GAAkB,CAAG,CAAA,OAAAqC,IAAAD,EAAAhE,GAAAiD,EAAAa,EAAAE,EAAAhE,EAAAiE,EAAA,CAAAD,EAAAI,EAAAC,EAAAP,EAAAK,EAAAH,EAAAI,EAAA,CAAAJ,GAAA,CAAAhE,EAAAsE,IAAAA,GAAAF,EAAAE,IAAAA,GAAA,CAAA,CAAAR,GAAA,CAAA,CAAAP,EAAA,CAAAM,EAAAN,OAAA,CAAA,IAAAgB,EAAArB,MAAA,CAAA,CAiBvDjC,EAAE5C,SAAQ,CAAA,UAAVkG,GAAA,OAAA,CAAA,IAAAC,EAAAC,GAAA,CACgD,OADhDC,EAAAF,EAAA,QAC2DvD,EAAEhD,QAAO,GAAA,CAAA4F,EAAAW,EAAApC,EAChE/E,EAAC,CAACoD,KAAM,GAAE,CAAA,CAAA,CAAAuC,MAAAC,EAAAuB,EADEvH,EAAG,OAAQgE,EAAEpC,OAAO8F,YAAY,CAAA,CAAA,CAAAH,KAGhD,IAAA,CAAAf,EAAA,CAAAI,EAAAJ,EAAArB,EAGEvE,EAAI,CAAA,IAAC+E,MAAI,CAAA,OAAE3B,EAAE3C,QAAM,IAAEsG,UAAQ,CAAA,WAAA,CAAA,IAAAC,EAAAC,GAAA,CAAsC,OAAtCD,EAAArB,WAAAK,EAAAgB,EAA+B1D,EAAO,KAAA,CAAA0D,KAAA,EAAA,IAAAlC,UAAA,CAAA,OACjE1B,EAAE3C,QAAiB,CAAA,CAAA,CAAAuF,EAAAH,EAAAtB,EAKrBvE,EAAI,CAAA,IAAC+E,MAAI,CAAA,OAAE3B,EAAE1C,MAAI,IAAAoE,UAAA,CAAA,OAAG1B,EAAE1C,MAAe,CAAA,CAAA,CAAAsF,EAAAN,EAAAnB,EAGvCvE,EAAI,CAAA,IAAC+E,MAAI,CAAA,OAAE3B,EAAEzC,QAAM,IAAAmE,UAAA,CAAA,IAAAsC,EAAAnC,GAAA,CAC0B,OAD1Be,EAAAoB,MAC6BhE,EAAEzC,OAAiB,CAAAwE,MAAAC,EAAAgC,EAAtDhI,EAAG,YAAagE,EAAEpC,OAAOL,OAAO,CAAA,CAAA,CAAAyG,GAAA,CAAA,CAAA,KAAA,CAAAjC,EAAAgB,GAAA,CAAA,IAAAkB,EAxBvCjI,EAAG,OAAQgE,EAAEpC,OAAOqF,MAAM,CAAAiB,EAC1B,CACL,GAAGzD,GAAoB,CACvB,GAAGG,GAAgB,CACnBuD,WAAYlD,GAAY,CAAG,UAAY,SACxC,CAAAmD,EAQWpI,EAAG,YAAagE,EAAEpC,OAAOP,OAAO,CAAAgH,EAMhCrI,EAAG,OAAQgE,EAAEpC,OAAON,KAAK,CAAA,OAAA2G,IAAAlB,EAAAhE,GAAAiD,EAAAM,EAAAS,EAAAhE,EAAAkF,EAAA,CAAAlB,EAAAI,EAAAC,EAAAd,EAAA4B,EAAAnB,EAAAI,EAAA,CAAAiB,IAAArB,EAAAuB,GAAAtC,EAAAQ,EAAAO,EAAAuB,EAAAF,EAAA,CAAAC,IAAAtB,EAAAwB,GAAAvC,EAAAS,EAAAM,EAAAwB,EAAAF,EAAA,CAAAtB,GAAA,CAAAhE,EAAAsE,IAAAA,GAAAF,EAAAE,IAAAA,GAAAiB,EAAAjB,IAAAA,GAAAkB,EAAAlB,IAAAA,GAAA,CAAA,CAAAjB,KAAA,CAAA,EAAA,CAAA,EAalCoC,EAAQrI,EAAkB4D,EAAgB,CAAEhC,UAAW,YAAa4D,KAAM,OAAQ,CAAC,CAEtE8C,EAAA,CAAA,QAAA,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"modalContext.js","names":["createComponent","createRoot","createSignal","ComponentModal","ModalType","activeModalInstances","ModalInstance","destroy","createModal","options","Omit","disposeRoot","setIsOpen","v","disposed","doClose","callOnClose","onClose","index","indexOf","instance","splice","setTimeout","root","isOpen","_setIsOpen","open","preRender","push","closeAllModals","instances","forEach"],"sources":["../../../../src/components/modal/modalContext.tsx"],"sourcesContent":["import { createComponent, createRoot, createSignal } from 'solid-js';\r\nimport { ComponentModal, ModalType } from './modal';\r\n\r\nconst activeModalInstances: ModalInstance[] = [];\r\n\r\ntype ModalInstance = {\r\n destroy: () => void;\r\n};\r\n\r\nexport function createModal(options: Omit<ModalType, 'open' | 'preRender'>): ModalInstance {\r\n let disposeRoot: (() => void) | null = null;\r\n let setIsOpen: ((v: boolean) => void) | null = null;\r\n let disposed = false;\r\n\r\n const doClose = (callOnClose: boolean) => {\r\n if (disposed) return;\r\n disposed = true;\r\n\r\n setIsOpen?.(false);\r\n if (callOnClose) options.onClose?.();\r\n\r\n const index = activeModalInstances.indexOf(instance);\r\n if (index > -1) {\r\n activeModalInstances.splice(index, 1);\r\n }\r\n\r\n setTimeout(() => {\r\n disposeRoot?.();\r\n }, 150);\r\n };\r\n\r\n createRoot(root => {\r\n disposeRoot = root;\r\n const [isOpen, _setIsOpen] = createSignal(true);\r\n setIsOpen = _setIsOpen;\r\n\r\n // ComponentModal renders via Portal (ZIndex → Portal) — it mounts itself\r\n // into document.body internally. We only need to call it inside a reactive\r\n // root so its signals/effects run; we don't need to insert it anywhere.\r\n createComponent(ComponentModal, {\r\n ...options,\r\n get open() {\r\n return isOpen();\r\n },\r\n preRender: false,\r\n onClose: () => doClose(true),\r\n });\r\n });\r\n\r\n const instance: ModalInstance = {\r\n destroy: () => doClose(false),\r\n };\r\n\r\n activeModalInstances.push(instance);\r\n return instance;\r\n}\r\n\r\nexport function closeAllModals() {\r\n const instances = [...activeModalInstances];\r\n instances.forEach(instance => instance.destroy());\r\n}\r\n"],"mappings":"yHAGA,IAAMK,EAAwC,EAAE,CAMhD,SAAgBG,EAAYC,EAA+D,CACzF,IAAIE,EAAmC,KACnCC,EAA2C,KAC3CE,EAAW,GAETC,EAAWC,GAAyB,CACxC,GAAIF,EAAU,OACdA,EAAW,GAEXF,IAAY,GAAM,CACdI,GAAaP,EAAQQ,WAAW,CAEpC,IAAMC,EAAQb,EAAqBc,QAAQC,EAAS,CAChDF,EAAQ,IACVb,EAAqBgB,OAAOH,EAAO,EAAE,CAGvCI,eAAiB,CACfX,KAAe,EACd,IAAI,EAGTV,EAAWsB,GAAQ,CACjBZ,EAAcY,EACd,GAAM,CAACC,EAAQC,GAAcvB,EAAa,GAAK,CAC/CU,EAAYa,EAKZzB,EAAgBG,EAAgB,CAC9B,GAAGM,EACH,IAAIiB,MAAO,CACT,OAAOF,GAAQ,EAEjBG,UAAW,GACXV,YAAeF,EAAQ,GAAI,CAC5B,CAAC,EACF,CAEF,IAAMK,EAA0B,CAC9Bb,YAAeQ,EAAQ,GAAK,CAC7B,CAGD,OADAV,EAAqBuB,KAAKR,EAAS,CAC5BA,EAGT,SAAgBS,GAAiB,CACb,CAAC,GAAGxB,EAAqB,CACjC0B,QAAQX,GAAYA,EAASb,SAAS,CAAC"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{cn as e}from"../../utils/cn.js";import{getColor as t}from"../../utils/helper.js";import{chevron_left_default as n}from"../../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/chevron-left.js";import{chevron_right_default as r}from"../../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/chevron-right.js";import{Select as i}from"../select/select.js";import{className as a,createComponent as o,delegateEvents as s,effect as c,insert as l,memo as u,setAttribute as d,setStyleProperty as f,template as p}from"solid-js/web";import{For as m,Match as h,Show as g,Switch as _,createEffect as v,createMemo as y,createSignal as b,mergeProps as x}from"solid-js";var S=p(`<span>`),C=p(`<div class=w-fit>`),w=p(`<span class=cursor-pointer>`),T=p(`<span><span>Go to</span><input type=number min=1>`),E=p(`<div>`),D=p(`<button title="Previous Page">`),O=p(`<button>•••`),k=p(`<button>`),A=p(`<button title="Next Page">`),j=p(`<div><button title=Previous></button><span><input type=number min=1><span>/</span><span></span></span><button title=Next>`),M=p(`<div><div><span>Items per page:</span><select></select><div class="bg-c3/50 w-px self-stretch"></div><span>–<!> of <!> items</span></div><div><input type=number min=1><span>of <!> pages</span><button title="Previous Page"></button><button title="Next Page">`),N=p(`<option>`),P={defaultCurrent:1,defaultPageSize:10,total:0,align:`start`,size:`md`,color:`neutral`,hideOnSinglePage:!1,showLessItems:!1,showQuickJumper:!1,showTitle:!0,disabled:!1,pageSizeOptions:[10,20,50,100],totalBoundaryShowSizeChanger:50};function F(e){switch(e){case`xs`:return`pag26`;case`sm`:return`pag27`;case`lg`:return`pag29`;case`xl`:return`pag30`;default:return`pag28`}}function I(e){switch(e){case`center`:return`justify-center`;case`end`:return`justify-end`;default:return`justify-start`}}function L(e){return e===`lg`||e===`xl`?`lg`:e===`md`?`md`:`sm`}function R(e,t,n){let r=n?1:2;if(e<=(n?7:9))return Array.from({length:e},(e,t)=>t+1);let i=[];i.push(1);let a=Math.max(2,t-r),o=Math.min(e-1,t+r);a>2&&i.push(`prev-ellipsis`);for(let e=a;e<=o;e++)i.push(e);return o<e-1&&i.push(`next-ellipsis`),i.push(e),i}var z=s=>{let f=x(P,s),[p,h]=b(f.defaultCurrent),[_,v]=b(f.defaultPageSize),[j,M]=b(``),N=y(()=>f.current??p()),z=y(()=>f.pageSize??_()),B=y(()=>Math.max(1,Math.ceil((f.total??0)/z()))),V=y(()=>typeof f.showSizeChanger==`boolean`?f.showSizeChanger:typeof f.showSizeChanger==`object`?!0:(f.total??0)>(f.totalBoundaryShowSizeChanger??50)),H=y(()=>f.hideOnSinglePage&&B()<=1),U=e=>{let t=Math.min(Math.max(1,e),B());t!==N()&&(h(t),f.onChange?.(t,z()))},W=e=>{let t=Math.max(1,Math.ceil((f.total??0)/e)),n=Math.min(N(),t);v(e),h(n),f.onShowSizeChange?.(n,e),f.onChange?.(n,e)},G=y(()=>R(B(),N(),f.showLessItems)),K=()=>{let e=parseInt(j(),10);isNaN(e)||(U(e),M(``))},q=y(()=>[(N()-1)*z()+1,Math.min(N()*z(),f.total??0)]),J=y(()=>f.pageSizeOptions.map(e=>({label:`${e} / page`,value:e})));return o(g,{get when(){return!H()},get children(){var s=E();return l(s,o(g,{get when(){return f.showTotal},get children(){var t=S();return l(t,()=>f.showTotal(f.total??0,q())),c(()=>a(t,e(`pag13`,f.class?.total))),t}}),null),l(s,()=>{let t=(()=>{var t=D();return t.$$click=()=>U(N()-1),l(t,o(n,{size:16})),c(n=>{var r=e(`pag06 pag08`,f.class?.btn,f.class?.prev,N()<=1&&`pag07`,N()<=1&&f.class?.btnDisabled),i=f.disabled||N()<=1;return r!==n.e&&a(t,n.e=r),i!==n.t&&(t.disabled=n.t=i),n},{e:void 0,t:void 0}),t})();return f.itemRender?f.itemRender(N()-1,`prev`,t):t},null),l(s,o(m,{get each(){return G()},children:t=>{if(t===`prev-ellipsis`||t===`next-ellipsis`)return(()=>{var n=O();return n.$$click=()=>{U(t===`prev-ellipsis`?Math.max(1,N()-(f.showLessItems?3:5)):Math.min(B(),N()+(f.showLessItems?3:5)))},d(n,`title`,t===`prev-ellipsis`?`Previous 5 pages`:`Next 5 pages`),c(t=>{var r=e(`pag06 pag10`,f.class?.btn,f.class?.ellipsis),i=f.disabled;return r!==t.e&&a(n,t.e=r),i!==t.t&&(n.disabled=t.t=i),t},{e:void 0,t:void 0}),n})();let n=(()=>{var n=k();return n.$$click=()=>U(t),l(n,t),c(r=>{var i=e(`pag06`,t===N()&&`pag11`,t===N()&&f.class?.itemActive,f.class?.btn),o=f.disabled,s=f.showTitle?`Page ${t}`:void 0;return i!==r.e&&a(n,r.e=i),o!==r.t&&(n.disabled=r.t=o),s!==r.a&&d(n,`title`,r.a=s),r},{e:void 0,t:void 0,a:void 0}),n})();return f.itemRender?f.itemRender(t,`page`,n):n}}),null),l(s,()=>{let t=(()=>{var t=A();return t.$$click=()=>U(N()+1),l(t,o(r,{size:16})),c(n=>{var r=e(`pag06 pag09`,N()>=B()&&`pag07`,N()>=B()&&f.class?.btnDisabled,f.class?.btn,f.class?.next),i=f.disabled||N()>=B();return r!==n.e&&a(t,n.e=r),i!==n.t&&(t.disabled=n.t=i),n},{e:void 0,t:void 0}),t})();return f.itemRender?f.itemRender(N()+1,`next`,t):t},null),l(s,o(g,{get when(){return V()},get children(){var e=C();return l(e,o(i,{get options(){return J()},get value(){return z()},onChange:e=>W(e),get disabled(){return f.disabled},get size(){return L(f.size)},get color(){return f.color},placement:`top`,get class(){return{root:f.class?.sizeChanger}}})),e}}),null),l(s,o(g,{get when(){return f.showQuickJumper},get children(){var t=T(),n=t.firstChild,r=n.nextSibling;return r.$$keydown=e=>{e.key===`Enter`&&(K(),e.currentTarget.blur())},r.$$input=e=>M(e.currentTarget.value),l(t,o(g,{get when(){return u(()=>typeof f.showQuickJumper==`object`)()&&f.showQuickJumper.goButton},fallback:null,get children(){var e=w();return e.$$click=()=>K(),l(e,()=>f.showQuickJumper.goButton),e}}),null),c(i=>{var o=e(`pag14`,f.align===`end`&&`order-first mr-auto`,f.align===`start`&&`ml-auto`,f.class?.jumper),s=e(`pag15`,f.class?.jumperLabel),c=e(`pag16`,f.class?.jumperInput),l=B(),u=f.disabled;return o!==i.e&&a(t,i.e=o),s!==i.t&&a(n,i.t=s),c!==i.a&&a(r,i.a=c),l!==i.o&&d(r,`max`,i.o=l),u!==i.i&&(r.disabled=i.i=u),i},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0}),c(()=>r.value=j()),t}}),null),c(()=>a(s,e(`pag01 pag02`,F(f.size),I(f.align),t(f.color),f.disabled&&`pag05`,f.class?.root))),s}})},B=i=>{let s=x(P,i),[u,f]=b(s.defaultCurrent),[p,m]=b(s.defaultPageSize),h=y(()=>s.current??u()),_=y(()=>s.pageSize??p()),v=y(()=>Math.max(1,Math.ceil((s.total??0)/_()))),S=y(()=>s.hideOnSinglePage&&v()<=1),C=e=>{let t=Math.min(Math.max(1,e),v());t!==h()&&(f(t),s.onChange?.(t,_()))};return o(g,{get when(){return!S()},get children(){var i=j(),u=i.firstChild,f=u.nextSibling,p=f.firstChild,m=p.nextSibling,g=m.nextSibling,_=f.nextSibling;return u.$$click=()=>C(h()-1),l(u,o(n,{size:16})),p.addEventListener(`blur`,e=>{let t=parseInt(e.currentTarget.value,10);isNaN(t)||C(t)}),p.$$keydown=e=>{if(e.key===`Enter`){let t=parseInt(e.target.value,10);isNaN(t)||C(t)}},p.addEventListener(`focus`,e=>e.currentTarget.select()),l(g,v),_.$$click=()=>C(h()+1),l(_,o(r,{size:16})),c(n=>{var r=e(`pag01 pag03`,F(s.size),I(s.align),t(s.color),s.disabled&&`pag05`,s.class?.root),o=e(`pag06 pag08`,s.class?.btn,s.class?.prev,h()<=1&&`pag07`,h()<=1&&s.class?.btnDisabled),c=s.disabled||h()<=1,l=e(`pag17`,s.class?.simplePager),g=e(`pag18`,s.class?.simpleInput),y=v(),b=s.disabled,x=e(`pag19`,s.class?.slash),S=e(`pag06 pag09`,s.class?.btn,s.class?.next,h()>=v()&&`pag07`,h()>=v()&&s.class?.btnDisabled),C=s.disabled||h()>=v();return r!==n.e&&a(i,n.e=r),o!==n.t&&a(u,n.t=o),c!==n.a&&(u.disabled=n.a=c),l!==n.o&&a(f,n.o=l),g!==n.i&&a(p,n.i=g),y!==n.n&&d(p,`max`,n.n=y),b!==n.s&&(p.disabled=n.s=b),x!==n.h&&a(m,n.h=x),S!==n.r&&a(_,n.r=S),C!==n.d&&(_.disabled=n.d=C),n},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0}),c(()=>p.value=h()),i}})},V=i=>{let s=x(P,i),[u,p]=b(s.defaultCurrent),[h,_]=b(s.defaultPageSize),[S,C]=b(String(s.defaultCurrent??1)),w=y(()=>s.current??u()),T=y(()=>s.pageSize??h()),E=y(()=>Math.max(1,Math.ceil((s.total??0)/T()))),D=y(()=>s.hideOnSinglePage&&E()<=1);v(function(){C(String(w()))});let O=e=>{let t=Math.min(Math.max(1,e),E());t!==w()&&(p(t),s.onChange?.(t,T()))},k=e=>{let t=Math.max(1,Math.ceil((s.total??0)/e)),n=Math.min(w(),t);_(e),p(n),s.onShowSizeChange?.(n,e),s.onChange?.(n,e)},A=y(()=>[(w()-1)*T()+1,Math.min(w()*T(),s.total??0)]),j=e=>{let t=parseInt(e,10),n=isNaN(t)?w():Math.min(Math.max(1,t),E());O(n),C(String(n))};return o(g,{get when(){return!D()},get children(){var i=M(),u=i.firstChild,p=u.firstChild,h=p.nextSibling,g=h.nextSibling.nextSibling,_=g.firstChild,v=_.nextSibling,y=v.nextSibling.nextSibling;y.nextSibling;var b=u.nextSibling,x=b.firstChild,D=x.nextSibling,P=D.firstChild.nextSibling;P.nextSibling;var I=D.nextSibling,L=I.nextSibling;return h.addEventListener(`change`,e=>k(Number(e.currentTarget.value))),l(h,o(m,{get each(){return s.pageSizeOptions},children:e=>(()=>{var t=N();return t.value=e,l(t,e),t})()})),l(g,()=>A()[0],_),l(g,()=>A()[1],v),l(g,()=>s.total??0,y),x.$$keydown=e=>{e.key===`Enter`&&(j(e.currentTarget.value),e.currentTarget.blur())},x.addEventListener(`blur`,e=>j(e.currentTarget.value)),x.$$input=e=>C(e.currentTarget.value),x.addEventListener(`focus`,e=>e.currentTarget.select()),l(D,E,P),I.$$click=()=>O(w()-1),l(I,o(n,{size:16})),L.$$click=()=>O(w()+1),l(L,o(r,{size:16})),c(n=>{var r=e(`pag01 pag04`,F(s.size),t(s.color),s.disabled&&`pag05`,s.class?.root),o=e(`pag20`,s.class?.fullyLeft),c=e(`pag22`,s.class?.fullyLabel),l=e(`pag12`,s.class?.sizeChanger),m=s.disabled,_=e(`pag23`,s.class?.fullyRange),v=e(`pag21`,s.class?.fullyRight),y=e(`pag25`,s.class?.fullyPageInput),C=E(),T=s.disabled,O=`${Math.max(2,S().length)+.5}ch`,k=e(`pag24`,s.class?.fullyPages),A=e(`pag06`,s.class?.btn,s.class?.prev,w()<=1&&`pag07`,w()<=1&&s.class?.btnDisabled),j=s.disabled||w()<=1,M=e(`pag06`,s.class?.btn,s.class?.next,w()>=E()&&`pag07`,w()>=E()&&s.class?.btnDisabled),N=s.disabled||w()>=E();return r!==n.e&&a(i,n.e=r),o!==n.t&&a(u,n.t=o),c!==n.a&&a(p,n.a=c),l!==n.o&&a(h,n.o=l),m!==n.i&&(h.disabled=n.i=m),_!==n.n&&a(g,n.n=_),v!==n.s&&a(b,n.s=v),y!==n.h&&a(x,n.h=y),C!==n.r&&d(x,`max`,n.r=C),T!==n.d&&(x.disabled=n.d=T),O!==n.l&&f(x,`width`,n.l=O),k!==n.u&&a(D,n.u=k),A!==n.c&&a(I,n.c=A),j!==n.w&&(I.disabled=n.w=j),M!==n.m&&a(L,n.m=M),N!==n.f&&(L.disabled=n.f=N),n},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0,h:void 0,r:void 0,d:void 0,l:void 0,u:void 0,c:void 0,w:void 0,m:void 0,f:void 0}),c(()=>h.value=T()),c(()=>x.value=S()),i}})},H=e=>o(_,{get fallback(){return o(z,e)},get children(){return[o(h,{get when(){return e.mode===`simple`},get children(){return o(B,e)}}),o(h,{get when(){return e.mode===`fully`},get children(){return o(V,e)}})]}});s([`input`,`keydown`,`click`]);export{H as Pagination};
|
|
2
|
+
//# sourceMappingURL=pagination.js.map
|