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.
Files changed (266) hide show
  1. package/README.md +237 -237
  2. package/dist/components/badge/badge.d.ts +0 -1
  3. package/dist/components/badge/badge.d.ts.map +1 -1
  4. package/dist/components/carousel/carousel.d.ts.map +1 -1
  5. package/dist/components/context-menu/context-menu.store.d.ts.map +1 -1
  6. package/dist/components/context-menu/context-menu.types.d.ts.map +1 -1
  7. package/dist/components/divider/divider.d.ts.map +1 -1
  8. package/dist/components/divider/divider.types.d.ts.map +1 -1
  9. package/dist/components/divider/index.d.ts +1 -1
  10. package/dist/components/divider/index.d.ts.map +1 -1
  11. package/dist/components/drawer/drawer.types.d.ts.map +1 -1
  12. package/dist/components/mansory/mansory.d.ts.map +1 -1
  13. package/dist/components/mansory/mansory.types.d.ts.map +1 -1
  14. package/dist/components/modal/modal.d.ts.map +1 -1
  15. package/dist/components/modal/modalContext.d.ts.map +1 -1
  16. package/dist/components/progress-bar/progress-bar.d.ts.map +1 -1
  17. package/dist/components/qr-code/qr-code.d.ts.map +1 -1
  18. package/dist/components/splitter/splitter.d.ts.map +1 -1
  19. package/dist/components/timeline/timeline.d.ts.map +1 -1
  20. package/dist/components/tooltip/tooltip.d.ts.map +1 -1
  21. package/dist/components/upload/upload.d.ts.map +1 -1
  22. package/dist/components/upload/upload.types.d.ts.map +1 -1
  23. package/dist/components/z-index/z-index.d.ts.map +1 -1
  24. package/dist/solid-ui.css +1 -1
  25. package/dist/src/components/avatar/avatar.js.map +1 -0
  26. package/dist/src/components/badge/badge.js +2 -0
  27. package/dist/src/components/badge/badge.js.map +1 -0
  28. package/dist/src/components/breadcrumb/breadcrumb.js.map +1 -0
  29. package/dist/{components → src/components}/button/button.js +1 -1
  30. package/dist/src/components/button/button.js.map +1 -0
  31. package/dist/src/components/carousel/carousel.js +2 -0
  32. package/dist/src/components/carousel/carousel.js.map +1 -0
  33. package/dist/src/components/chat-bubble/chatBubble.js.map +1 -0
  34. package/dist/src/components/checkbox/checkbox.js.map +1 -0
  35. package/dist/src/components/code-preview/code-preview.js +2 -0
  36. package/dist/src/components/code-preview/code-preview.js.map +1 -0
  37. package/dist/src/components/collapse/collapse.js.map +1 -0
  38. package/dist/src/components/context-menu/context-menu.js +2 -0
  39. package/dist/src/components/context-menu/context-menu.js.map +1 -0
  40. package/dist/src/components/context-menu/context-menu.store.js.map +1 -0
  41. package/dist/src/components/diff/diff.js.map +1 -0
  42. package/dist/src/components/divider/divider.js.map +1 -0
  43. package/dist/src/components/drawer/drawer.js +2 -0
  44. package/dist/src/components/drawer/drawer.js.map +1 -0
  45. package/dist/src/components/dropdown/dropdown.js.map +1 -0
  46. package/dist/src/components/dropdown/dropdown.store.js.map +1 -0
  47. package/dist/src/components/float-button/float-button.js.map +1 -0
  48. package/dist/src/components/hover-3d-image/hover-3d-image.js.map +1 -0
  49. package/dist/src/components/image-preview/image-preview.js +2 -0
  50. package/dist/src/components/image-preview/image-preview.js.map +1 -0
  51. package/dist/src/components/indicator/indicator.js.map +1 -0
  52. package/dist/src/components/input/input.js.map +1 -0
  53. package/dist/src/components/input/input.utils.js.map +1 -0
  54. package/dist/src/components/input/variants/input-color.js.map +1 -0
  55. package/dist/src/components/input/variants/input-date.js.map +1 -0
  56. package/dist/src/components/input/variants/input-number.js +2 -0
  57. package/dist/src/components/input/variants/input-number.js.map +1 -0
  58. package/dist/src/components/input/variants/input-otp.js.map +1 -0
  59. package/dist/src/components/input/variants/input-password.js +2 -0
  60. package/dist/src/components/input/variants/input-password.js.map +1 -0
  61. package/dist/src/components/input/variants/input-radio.js.map +1 -0
  62. package/dist/src/components/input/variants/input-range.js.map +1 -0
  63. package/dist/src/components/input/variants/input-text.js +2 -0
  64. package/dist/src/components/input/variants/input-text.js.map +1 -0
  65. package/dist/src/components/input/variants/input-textarea.js +2 -0
  66. package/dist/src/components/input/variants/input-textarea.js.map +1 -0
  67. package/dist/src/components/loading/loading.js +2 -0
  68. package/dist/src/components/loading/loading.js.map +1 -0
  69. package/dist/src/components/mansory/mansory.js.map +1 -0
  70. package/dist/src/components/menu/menu.js +2 -0
  71. package/dist/src/components/menu/menu.js.map +1 -0
  72. package/dist/src/components/modal/modal.js +2 -0
  73. package/dist/src/components/modal/modal.js.map +1 -0
  74. package/dist/src/components/modal/modalContext.js.map +1 -0
  75. package/dist/src/components/pagination/pagination.js +2 -0
  76. package/dist/src/components/pagination/pagination.js.map +1 -0
  77. package/dist/src/components/progress-bar/progress-bar.js.map +1 -0
  78. package/dist/src/components/qr-code/qr-code.js +2 -0
  79. package/dist/src/components/qr-code/qr-code.js.map +1 -0
  80. package/dist/src/components/rating/rating.js.map +1 -0
  81. package/dist/src/components/select/select.js +2 -0
  82. package/dist/src/components/select/select.js.map +1 -0
  83. package/dist/src/components/select-zone/select-zone.js.map +1 -0
  84. package/dist/src/components/skeleton/skeleton.js.map +1 -0
  85. package/dist/src/components/slider/slider.js.map +1 -0
  86. package/dist/src/components/splitter/splitter.js.map +1 -0
  87. package/dist/src/components/steps/steps.js +2 -0
  88. package/dist/src/components/steps/steps.js.map +1 -0
  89. package/dist/src/components/swap/swap.js.map +1 -0
  90. package/dist/src/components/switch/switch.js.map +1 -0
  91. package/dist/src/components/tab/tab.js +2 -0
  92. package/dist/src/components/tab/tab.js.map +1 -0
  93. package/dist/src/components/table/table.js +2 -0
  94. package/dist/src/components/table/table.js.map +1 -0
  95. package/dist/src/components/text-rotate/text-rotate.js.map +1 -0
  96. package/dist/src/components/timeline/timeline.js +2 -0
  97. package/dist/src/components/timeline/timeline.js.map +1 -0
  98. package/dist/src/components/toast/icons/ErrorIcon.js.map +1 -0
  99. package/dist/src/components/toast/icons/IconCircle.js.map +1 -0
  100. package/dist/src/components/toast/icons/InfoIcon.js.map +1 -0
  101. package/dist/src/components/toast/icons/LoaderIcon.js.map +1 -0
  102. package/dist/src/components/toast/icons/SuccessIcon.js.map +1 -0
  103. package/dist/src/components/toast/icons/WarningIcon.js.map +1 -0
  104. package/dist/src/components/toast/toast.js +2 -0
  105. package/dist/src/components/toast/toast.js.map +1 -0
  106. package/dist/src/components/toast/toast.store.js.map +1 -0
  107. package/dist/src/components/tooltip/tooltip.js.map +1 -0
  108. package/dist/{components → src/components}/tour/tour.js +1 -1
  109. package/dist/src/components/tour/tour.js.map +1 -0
  110. package/dist/src/components/upload/upload.js +2 -0
  111. package/dist/src/components/upload/upload.js.map +1 -0
  112. package/dist/src/components/z-index/z-index.context.js.map +1 -0
  113. package/dist/src/components/z-index/z-index.js.map +1 -0
  114. package/dist/src/components/z-index/z-index.store.js.map +1 -0
  115. package/dist/src/components/z-index/z-index.types.js.map +1 -0
  116. package/dist/src/utils/cn.js.map +1 -0
  117. package/dist/src/utils/element-tracker.js.map +1 -0
  118. package/dist/src/utils/helper.js.map +1 -0
  119. package/dist/src/utils/hoc.js.map +1 -0
  120. package/dist/src/utils/shiki-highlight.js +2 -0
  121. package/dist/src/utils/shiki-highlight.js.map +1 -0
  122. package/package.json +120 -120
  123. package/dist/components/avatar/avatar.js.map +0 -1
  124. package/dist/components/badge/badge.js +0 -2
  125. package/dist/components/badge/badge.js.map +0 -1
  126. package/dist/components/breadcrumb/breadcrumb.js.map +0 -1
  127. package/dist/components/button/button.js.map +0 -1
  128. package/dist/components/carousel/carousel.js +0 -2
  129. package/dist/components/carousel/carousel.js.map +0 -1
  130. package/dist/components/chat-bubble/chatBubble.js.map +0 -1
  131. package/dist/components/checkbox/checkbox.js.map +0 -1
  132. package/dist/components/code-preview/code-preview.js +0 -2
  133. package/dist/components/code-preview/code-preview.js.map +0 -1
  134. package/dist/components/collapse/collapse.js.map +0 -1
  135. package/dist/components/context-menu/context-menu.js +0 -2
  136. package/dist/components/context-menu/context-menu.js.map +0 -1
  137. package/dist/components/context-menu/context-menu.store.js.map +0 -1
  138. package/dist/components/diff/diff.js.map +0 -1
  139. package/dist/components/divider/divider.js.map +0 -1
  140. package/dist/components/drawer/drawer.js +0 -2
  141. package/dist/components/drawer/drawer.js.map +0 -1
  142. package/dist/components/dropdown/dropdown.js.map +0 -1
  143. package/dist/components/dropdown/dropdown.store.js.map +0 -1
  144. package/dist/components/float-button/float-button.js.map +0 -1
  145. package/dist/components/hover-3d-image/hover-3d-image.js.map +0 -1
  146. package/dist/components/image-preview/image-preview.js +0 -2
  147. package/dist/components/image-preview/image-preview.js.map +0 -1
  148. package/dist/components/indicator/indicator.js.map +0 -1
  149. package/dist/components/input/input.js.map +0 -1
  150. package/dist/components/input/input.utils.js.map +0 -1
  151. package/dist/components/input/variants/input-color.js.map +0 -1
  152. package/dist/components/input/variants/input-date.js.map +0 -1
  153. package/dist/components/input/variants/input-number.js +0 -2
  154. package/dist/components/input/variants/input-number.js.map +0 -1
  155. package/dist/components/input/variants/input-otp.js.map +0 -1
  156. package/dist/components/input/variants/input-password.js +0 -2
  157. package/dist/components/input/variants/input-password.js.map +0 -1
  158. package/dist/components/input/variants/input-radio.js.map +0 -1
  159. package/dist/components/input/variants/input-range.js.map +0 -1
  160. package/dist/components/input/variants/input-text.js +0 -2
  161. package/dist/components/input/variants/input-text.js.map +0 -1
  162. package/dist/components/input/variants/input-textarea.js +0 -2
  163. package/dist/components/input/variants/input-textarea.js.map +0 -1
  164. package/dist/components/loading/loading.js +0 -2
  165. package/dist/components/loading/loading.js.map +0 -1
  166. package/dist/components/mansory/mansory.js.map +0 -1
  167. package/dist/components/menu/menu.js +0 -2
  168. package/dist/components/menu/menu.js.map +0 -1
  169. package/dist/components/modal/modal.js +0 -2
  170. package/dist/components/modal/modal.js.map +0 -1
  171. package/dist/components/modal/modalContext.js.map +0 -1
  172. package/dist/components/pagination/pagination.js +0 -2
  173. package/dist/components/pagination/pagination.js.map +0 -1
  174. package/dist/components/progress-bar/progress-bar.js.map +0 -1
  175. package/dist/components/qr-code/qr-code.js +0 -2
  176. package/dist/components/qr-code/qr-code.js.map +0 -1
  177. package/dist/components/rating/rating.js.map +0 -1
  178. package/dist/components/select/select.js +0 -2
  179. package/dist/components/select/select.js.map +0 -1
  180. package/dist/components/select-zone/select-zone.js.map +0 -1
  181. package/dist/components/skeleton/skeleton.js.map +0 -1
  182. package/dist/components/slider/slider.js.map +0 -1
  183. package/dist/components/splitter/splitter.js.map +0 -1
  184. package/dist/components/steps/steps.js +0 -2
  185. package/dist/components/steps/steps.js.map +0 -1
  186. package/dist/components/swap/swap.js.map +0 -1
  187. package/dist/components/switch/switch.js.map +0 -1
  188. package/dist/components/tab/tab.js +0 -2
  189. package/dist/components/tab/tab.js.map +0 -1
  190. package/dist/components/table/table.js +0 -2
  191. package/dist/components/table/table.js.map +0 -1
  192. package/dist/components/text-rotate/text-rotate.js.map +0 -1
  193. package/dist/components/timeline/timeline.js +0 -2
  194. package/dist/components/timeline/timeline.js.map +0 -1
  195. package/dist/components/toast/icons/ErrorIcon.js.map +0 -1
  196. package/dist/components/toast/icons/IconCircle.js.map +0 -1
  197. package/dist/components/toast/icons/InfoIcon.js.map +0 -1
  198. package/dist/components/toast/icons/LoaderIcon.js.map +0 -1
  199. package/dist/components/toast/icons/SuccessIcon.js.map +0 -1
  200. package/dist/components/toast/icons/WarningIcon.js.map +0 -1
  201. package/dist/components/toast/toast.js +0 -2
  202. package/dist/components/toast/toast.js.map +0 -1
  203. package/dist/components/toast/toast.store.js.map +0 -1
  204. package/dist/components/tooltip/tooltip.js.map +0 -1
  205. package/dist/components/tour/tour.js.map +0 -1
  206. package/dist/components/upload/upload.js +0 -2
  207. package/dist/components/upload/upload.js.map +0 -1
  208. package/dist/components/z-index/z-index.context.js.map +0 -1
  209. package/dist/components/z-index/z-index.js.map +0 -1
  210. package/dist/components/z-index/z-index.store.js.map +0 -1
  211. package/dist/components/z-index/z-index.types.js.map +0 -1
  212. package/dist/utils/cn.js.map +0 -1
  213. package/dist/utils/element-tracker.js.map +0 -1
  214. package/dist/utils/helper.js.map +0 -1
  215. package/dist/utils/hoc.js.map +0 -1
  216. package/dist/utils/shiki-highlight.js +0 -2
  217. package/dist/utils/shiki-highlight.js.map +0 -1
  218. /package/dist/{components → src/components}/avatar/avatar.js +0 -0
  219. /package/dist/{components → src/components}/breadcrumb/breadcrumb.js +0 -0
  220. /package/dist/{components → src/components}/chat-bubble/chatBubble.js +0 -0
  221. /package/dist/{components → src/components}/checkbox/checkbox.js +0 -0
  222. /package/dist/{components → src/components}/collapse/collapse.js +0 -0
  223. /package/dist/{components → src/components}/context-menu/context-menu.store.js +0 -0
  224. /package/dist/{components → src/components}/diff/diff.js +0 -0
  225. /package/dist/{components → src/components}/divider/divider.js +0 -0
  226. /package/dist/{components → src/components}/dropdown/dropdown.js +0 -0
  227. /package/dist/{components → src/components}/dropdown/dropdown.store.js +0 -0
  228. /package/dist/{components → src/components}/float-button/float-button.js +0 -0
  229. /package/dist/{components → src/components}/hover-3d-image/hover-3d-image.js +0 -0
  230. /package/dist/{components → src/components}/indicator/indicator.js +0 -0
  231. /package/dist/{components → src/components}/input/input.js +0 -0
  232. /package/dist/{components → src/components}/input/input.utils.js +0 -0
  233. /package/dist/{components → src/components}/input/variants/input-color.js +0 -0
  234. /package/dist/{components → src/components}/input/variants/input-date.js +0 -0
  235. /package/dist/{components → src/components}/input/variants/input-otp.js +0 -0
  236. /package/dist/{components → src/components}/input/variants/input-radio.js +0 -0
  237. /package/dist/{components → src/components}/input/variants/input-range.js +0 -0
  238. /package/dist/{components → src/components}/mansory/mansory.js +0 -0
  239. /package/dist/{components → src/components}/modal/modalContext.js +0 -0
  240. /package/dist/{components → src/components}/progress-bar/progress-bar.js +0 -0
  241. /package/dist/{components → src/components}/rating/rating.js +0 -0
  242. /package/dist/{components → src/components}/select-zone/select-zone.js +0 -0
  243. /package/dist/{components → src/components}/skeleton/skeleton.js +0 -0
  244. /package/dist/{components → src/components}/slider/slider.js +0 -0
  245. /package/dist/{components → src/components}/splitter/splitter.js +0 -0
  246. /package/dist/{components → src/components}/swap/swap.js +0 -0
  247. /package/dist/{components → src/components}/switch/switch.js +0 -0
  248. /package/dist/{components → src/components}/table/index.js +0 -0
  249. /package/dist/{components → src/components}/text-rotate/text-rotate.js +0 -0
  250. /package/dist/{components → src/components}/toast/icons/ErrorIcon.js +0 -0
  251. /package/dist/{components → src/components}/toast/icons/IconCircle.js +0 -0
  252. /package/dist/{components → src/components}/toast/icons/InfoIcon.js +0 -0
  253. /package/dist/{components → src/components}/toast/icons/LoaderIcon.js +0 -0
  254. /package/dist/{components → src/components}/toast/icons/SuccessIcon.js +0 -0
  255. /package/dist/{components → src/components}/toast/icons/WarningIcon.js +0 -0
  256. /package/dist/{components → src/components}/toast/toast.store.js +0 -0
  257. /package/dist/{components → src/components}/tooltip/tooltip.js +0 -0
  258. /package/dist/{components → src/components}/z-index/z-index.context.js +0 -0
  259. /package/dist/{components → src/components}/z-index/z-index.js +0 -0
  260. /package/dist/{components → src/components}/z-index/z-index.store.js +0 -0
  261. /package/dist/{components → src/components}/z-index/z-index.types.js +0 -0
  262. /package/dist/{lib.js → src/lib.js} +0 -0
  263. /package/dist/{utils → src/utils}/cn.js +0 -0
  264. /package/dist/{utils → src/utils}/element-tracker.js +0 -0
  265. /package/dist/{utils → src/utils}/helper.js +0 -0
  266. /package/dist/{utils → src/utils}/hoc.js +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"dropdown.js","names":["cn","trackElement","untrackElement","ZIndex","ZIndexType","cva","VariantProps","createContext","createEffect","createSignal","createUniqueId","mergeProps","onCleanup","ParentComponent","useContext","dropdownStore","DropdownProps","CloseAllContext","variants","position","top","bottom","left","right","align","start","center","end","DropdownVariantsProps","TriggerRect","width","height","Dropdown","props","p","const","blockScroll","closeAll","parentCloseAll","shouldCloseAll","id","isControlled","open","undefined","triggerRef","HTMLDivElement","rect","setRect","captureRect","r","getBoundingClientRect","isOpen","trackTrigger","untrackTrigger","handleControlledOpen","close","closeDropdownOnUnmount","toggle","anchorStyle","Record","_el$","_tmpl$","_$addEventListener","_$use","el","ref","_$insert","triggerElement","Element","_$effect","_$className","class","trigger","_$createComponent","type","DROPDOWN","customValue","zIndex","children","_$memo","_el$4","_tmpl$3","$$click","_el$2","_tmpl$2","_el$3","firstChild","Provider","value","_p$","_v$","anchor","_v$2","_v$3","_v$4","_v$5","content","e","t","_$setAttribute","a","o","_$style","i","_$delegateEvents"],"sources":["../../../src/components/dropdown/dropdown.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\nimport { trackElement, untrackElement } from '@/utils/element-tracker';\nimport { ZIndex, ZIndexType } from '@components/z-index';\nimport { cva, VariantProps } from 'class-variance-authority';\nimport {\n createContext,\n createEffect,\n createSignal,\n createUniqueId,\n mergeProps,\n onCleanup,\n ParentComponent,\n useContext,\n} from 'solid-js';\nimport { dropdownStore } from './dropdown.store';\nimport { DropdownProps } from './dropdown.types';\n\n/** Context truyền `closeAll` từ dropdown root xuống tất cả dropdown con */\nconst CloseAllContext = createContext(false);\n\nconst variants = cva('', {\n variants: {\n position: {\n top: 'dropdown-top',\n bottom: 'dropdown-bottom',\n left: 'dropdown-left',\n right: 'dropdown-right',\n },\n align: {\n start: 'dropdown-start',\n center: 'dropdown-center',\n end: 'dropdown-end',\n },\n },\n});\nexport type DropdownVariantsProps = VariantProps<typeof variants>;\n\ntype TriggerRect = {\n top: number;\n left: number;\n width: number;\n height: number;\n};\n\nexport const Dropdown: ParentComponent<DropdownProps> = props => {\n const p = mergeProps(\n {\n position: 'bottom' as const,\n align: 'start' as const,\n blockScroll: true,\n closeAll: false,\n },\n props,\n );\n\n // Kế thừa closeAll từ dropdown cha nếu có\n const parentCloseAll = useContext(CloseAllContext);\n const shouldCloseAll = () => p.closeAll || parentCloseAll;\n\n const id = createUniqueId();\n const isControlled = () => p.open !== undefined;\n\n let triggerRef!: HTMLDivElement;\n const [rect, setRect] = createSignal<TriggerRect | null>(null);\n\n const captureRect = () => {\n const r = triggerRef.getBoundingClientRect();\n setRect({ top: r.top, left: r.left, width: r.width, height: r.height });\n };\n\n const isOpen = () => {\n if (isControlled()) return !!p.open;\n return dropdownStore.isOpen(id);\n };\n\n createEffect(function trackTrigger() {\n if (!isOpen()) {\n untrackElement(triggerRef);\n return;\n }\n trackElement(triggerRef, r => setRect(r));\n onCleanup(function untrackTrigger() {\n untrackElement(triggerRef);\n });\n });\n\n createEffect(function handleControlledOpen() {\n if (!isControlled()) return;\n if (p.open) {\n captureRect();\n dropdownStore.open(id);\n } else {\n dropdownStore.close(id);\n }\n });\n\n onCleanup(function closeDropdownOnUnmount() {\n dropdownStore.close(id);\n untrackElement(triggerRef);\n });\n\n const toggle = () => {\n if (dropdownStore.isOpen(id)) {\n dropdownStore.close(id);\n } else {\n captureRect();\n dropdownStore.open(id);\n }\n };\n\n const close = () => (shouldCloseAll() ? dropdownStore.closeAll() : dropdownStore.close(id));\n\n const anchorStyle = () => {\n const r = rect();\n if (!r) return {};\n return {\n '--nd-t': `${r.top}px`,\n '--nd-l': `${r.left}px`,\n '--nd-w': `${r.width}px`,\n '--nd-h': `${r.height}px`,\n } as Record<string, string>;\n };\n return (\n <>\n <div\n ref={el => {\n triggerRef = el;\n const ref = p.ref;\n if (typeof ref === 'function') ref(el);\n }}\n class={cn('dp01', p.class?.trigger)}\n onClick={isControlled() ? undefined : toggle}\n >\n {p.triggerElement as Element}\n </div>\n\n <ZIndex\n open={isOpen()}\n type={ZIndexType.DROPDOWN}\n blockScroll={p.blockScroll}\n class={cn('inset-0', parentCloseAll && 'pointer-events-none')}\n customValue={p.zIndex}\n >\n {!parentCloseAll && <div class=\"dp02\" onClick={close} />}\n\n <div\n class={cn('dp03', p.class?.anchor)}\n data-pos={p.position}\n data-align={p.align}\n style={anchorStyle()}\n >\n <div class={cn('dp04', p.class?.content)}>\n <CloseAllContext.Provider value={shouldCloseAll()}>\n {p.children}\n </CloseAllContext.Provider>\n </div>\n </div>\n </ZIndex>\n </>\n );\n};\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"dropdown.store.js","names":[],"sources":["../../../src/components/dropdown/dropdown.store.ts"],"sourcesContent":["import { createSignal } from 'solid-js';\n\nconst [openIds, setOpenIds] = createSignal<ReadonlySet<string>>(new Set(), { equals: false });\n\nexport const dropdownStore = {\n openIds,\n open: (id: string) =>\n setOpenIds(prev => {\n if (prev.has(id)) return prev;\n const next = new Set(prev);\n next.add(id);\n return next;\n }),\n close: (id: string) =>\n setOpenIds(prev => {\n if (!prev.has(id)) return prev;\n const next = new Set(prev);\n next.delete(id);\n return next;\n }),\n closeAll: () => setOpenIds(new Set<string>()),\n isOpen: (id: string) => openIds().has(id),\n};"],"mappings":"wCAEA,GAAM,CAAC,EAAS,GAAc,EAAkC,IAAI,IAAO,CAAE,OAAQ,GAAO,CAAC,CAEhF,EAAgB,CAC3B,UACA,KAAO,GACL,EAAW,GAAQ,CACjB,GAAI,EAAK,IAAI,EAAG,CAAE,OAAO,EACzB,IAAM,EAAO,IAAI,IAAI,EAAK,CAE1B,OADA,EAAK,IAAI,EAAG,CACL,GACP,CACJ,MAAQ,GACN,EAAW,GAAQ,CACjB,GAAI,CAAC,EAAK,IAAI,EAAG,CAAE,OAAO,EAC1B,IAAM,EAAO,IAAI,IAAI,EAAK,CAE1B,OADA,EAAK,OAAO,EAAG,CACR,GACP,CACJ,aAAgB,EAAW,IAAI,IAAc,CAC7C,OAAS,GAAe,GAAS,CAAC,IAAI,EAAG,CAC1C"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"float-button.js","names":["cn","For","Match","mergeProps","Show","Switch","Component","Button","FloatButtonProps","DEFAULT_PROPS","type","color","size","animate","closeIcon","label","icon","renderAnimateClass","AnimateInfinite","Record","ripple","pulse","bounce","heartBeat","headShake","swing","jello","renderBadgeWidth","count","FloatButtonBadge","badge","p","_el$","_tmpl$","_el$2","firstChild","_$insert","_c$","_$memo","_el$3","_tmpl$2","_$effect","_$className","class","FloatButton","props","_$createComponent","children","when","_el$4","_tmpl$3","_el$5","_$addEventListener","onClickOpen","variant","shape","tabIndex","style","width","height","_el$6","_tmpl$5","_el$7","_el$8","nextSibling","_el$9","_c$2","onClickClose","_$setStyleProperty","Element","_el$0","_tmpl$4","each","actions","item","_el$1","_tmpl$6","index","console","warn","_$delegateEvents"],"sources":["../../../src/components/float-button/float-button.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\nimport { For, Match, mergeProps, Show, Switch, type Component } from 'solid-js';\nimport { Button } from '../button';\nimport type { FloatButtonProps } from './float-button.types';\n\nconst DEFAULT_PROPS: FloatButtonProps = {\n type: 'default',\n color: 'var(--color-warning)',\n size: 24,\n animate: 'none',\n closeIcon: {\n label: 'Close',\n icon: 'X',\n },\n};\n\nexport function renderAnimateClass(animate: string | undefined) {\n const AnimateInfinite: Record<string, string> = {\n ripple: 'animate-ripple',\n pulse: 'animate-pulse',\n bounce: 'animate-bounce',\n heartBeat: 'animate-heartBeat',\n headShake: 'animate-headShake',\n swing: 'animate-swing',\n jello: 'animate-jello',\n };\n return animate ? AnimateInfinite[animate] : '';\n}\nfunction renderBadgeWidth(count: number): string {\n if (count >= 10_000) return 'px-1 translate-x-2';\n if (count >= 1000) return 'px-1 translate-x-1 -translate-y-1';\n if (count >= 100) return 'px-1';\n return 'w-5';\n}\nconst FloatButtonBadge: Component<{\n badge?: FloatButtonProps['badge'];\n}> = p => {\n return (\n <div class=\"absolute -top-2 -right-2\">\n <div\n class={cn(\n 'bg-error flex h-5 cursor-pointer rounded-full text-xs text-white *:m-auto',\n renderBadgeWidth(p.badge?.count!),\n p.badge?.animate && `animate-${p.badge?.animate}`,\n p.badge?.class,\n )}\n >\n {p.badge?.count && <div>{p.badge?.count}</div>}\n </div>\n </div>\n );\n};\n\nexport const FloatButton: Component<FloatButtonProps> = props => {\n const p = mergeProps(DEFAULT_PROPS, props);\n const size = `${p.size}px`;\n\n return (\n <Switch>\n <Match when={p.type === 'single'}>\n <div class={cn('fab pointer-events-auto', p.class)} onClick={p.onClickOpen}>\n <div class=\"relative\">\n <Button\n icon={p.icon}\n variant=\"solid\"\n shape=\"circle\"\n class={cn('fab-open border-0', renderAnimateClass(p.animate))}\n tabIndex={0}\n style={{\n 'background-color': p.color,\n width: size,\n height: size,\n ['--innner-color']: p.color,\n ['--btn-color']: p.color,\n }}\n />\n <Show when={p.badge?.count}>\n <FloatButtonBadge badge={p.badge} />\n </Show>\n </div>\n </div>\n </Match>\n <Match when={p.type !== 'single'}>\n <div class={cn('fab', p.type === 'flower' && 'fab-flower', p.class)}>\n <div class=\"relative\" tabIndex={0}>\n <Button\n icon={p.icon}\n variant=\"solid\"\n shape=\"circle\"\n class={cn('fab-open border-0', renderAnimateClass(p.animate))}\n style={{\n 'background-color': p.color,\n width: size,\n height: size,\n ['--innner-color']: p.color,\n }}\n />\n <Show when={p.badge?.count}>\n <FloatButtonBadge badge={p.badge} />\n </Show>\n </div>\n\n <div class=\"fab-close\">\n {p.type === 'default' && p.closeIcon?.label}\n <div\n class=\"float-close btn btn-circle btn-error\"\n style={{ width: size, height: size }}\n onClick={p.closeIcon?.onClickClose}\n >\n {(p.closeIcon?.icon as Element) ?? 'orange'}\n </div>\n </div>\n <Switch>\n <Match when={p.type === 'default'}>\n <div class=\"float-menu flex flex-col items-end\">\n <For each={p.actions}>\n {item => {\n return <div class=\"flex gap-2\">{item as Element}</div>;\n }}\n </For>\n </div>\n </Match>\n <Match when={p.type === 'flower'}>\n <For each={p.actions}>\n {(item, index) => {\n if (index() > 3) {\n console.warn(\n 'Chỉ có thể nhận tối đa 4 component. Cần xóa các Component sau: ',\n item,\n );\n return;\n }\n return <>{item}</>;\n }}\n </For>\n </Match>\n </Switch>\n </div>\n </Match>\n </Switch>\n );\n};\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"hover-3d-image.js","names":["cn","Image","ImagePreview","Component","createSignal","Show","ImagePreviewProps","Hover3DImage","image","preview","enabled","previewOptions","class","Partial","Record","p","open","setOpen","previewEnabled","_el$","_tmpl$","_el$2","firstChild","_el$3","$$click","_$spread","_$mergeProps","_$effect","_p$","_v$","root","_v$2","figure","e","_$className","t","undefined","_$createComponent","when","children","src","imageName","_$memo","alt","onClose","_$delegateEvents"],"sources":["../../../src/components/hover-3d-image/hover-3d-image.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\nimport { Image } from '@/utils/helper';\nimport { ImagePreview } from '@components/image-preview';\nimport { Component, createSignal, Show } from 'solid-js';\nimport { ImagePreviewProps } from '../image-preview/image-preview';\n\nexport const Hover3DImage: Component<{\n image: Image;\n /** Bật/tắt tính năng click để preview ảnh. @default true */\n preview?: boolean | { enabled: true; previewOptions?: ImagePreviewProps };\n class?: Partial<Record<'root' | 'figure' | 'image', string>>;\n}> = p => {\n const [open, setOpen] = createSignal(false);\n const previewEnabled = () => p.preview !== false;\n\n return (\n <>\n <div\n class={cn('hover-3d', previewEnabled() && 'cursor-zoom-in', p.class?.root)}\n onClick={() => previewEnabled() && setOpen(true)}\n >\n <figure class={cn('rounded-2xl', p.class?.figure)}>\n <img {...p.image} />\n </figure>\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n <div></div>\n </div>\n\n <Show when={open()}>\n <ImagePreview\n src={p.image.src}\n imageName={typeof p.image.alt === 'string' ? p.image.alt : undefined}\n onClose={() => setOpen(false)}\n {...(typeof p.preview === 'object' ? p.preview.previewOptions : undefined)}\n />\n </Show>\n </>\n );\n};\n"],"mappings":"qaAMaO,EAKRQ,GAAK,CACR,GAAM,CAACC,EAAMC,GAAWb,EAAa,GAAM,CACrCc,MAAuBH,EAAEN,UAAY,GAE3C,MAAA,MAAA,CAAA,IAAAU,EAAAC,GAAA,CAAAC,EAAAF,EAAAG,WAAAC,EAAAF,EAAAC,WAMuD,MANvDH,GAAAK,YAIqBN,GAAgB,EAAID,EAAQ,GAAK,CAAAQ,EAAAF,EAAAG,MAGrCX,EAAEP,MAAK,CAAA,GAAA,GAAA,CAAAmB,EAAAC,GAAA,CAAA,IAAAC,EAJX7B,EAAG,WAAYkB,GAAgB,EAAI,iBAAkBH,EAAEH,OAAOkB,KAAK,CAAAC,EAG3D/B,EAAG,cAAee,EAAEH,OAAOoB,OAAO,CAAA,OAAAH,IAAAD,EAAAK,GAAAC,EAAAf,EAAAS,EAAAK,EAAAJ,EAAA,CAAAE,IAAAH,EAAAO,GAAAD,EAAAb,EAAAO,EAAAO,EAAAJ,EAAA,CAAAH,GAAA,CAAAK,EAAAG,IAAAA,GAAAD,EAAAC,IAAAA,GAAA,CAAA,CAAAjB,KAAA,CAAAkB,EAalDhC,EAAI,CAAA,IAACiC,MAAI,CAAA,OAAEtB,GAAM,EAAA,IAAAuB,UAAA,CAAA,OAAAF,EACfnC,EAAYwB,EAAA,CAAA,IACXc,KAAG,CAAA,OAAEzB,EAAEP,MAAMgC,KAAG,IAChBC,WAAS,CAAA,OAAEC,MAAA,OAAO3B,EAAEP,MAAMmC,KAAQ,SAAQ,EAAA,CAAG5B,EAAEP,MAAMmC,IAAMP,IAAAA,IAC3DQ,YAAe3B,EAAQ,GAAK,CAAC,KACxB,OAAOF,EAAEN,SAAY,SAAWM,EAAEN,QAAQE,eAAiByB,IAAAA,GAAS,CAAA,EAAA,CAAA,CAAA,EAKjFS,EAAA,CAAA,QAAA,CAAA"}
@@ -1,2 +0,0 @@
1
- import{cn as e}from"../../utils/cn.js";import{ZIndexType as t}from"../z-index/z-index.types.js";import{ZIndex as n}from"../z-index/z-index.js";import{x_default as r}from"../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/x.js";import{flip_horizontal_2_default as i}from"../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/flip-horizontal-2.js";import{flip_vertical_2_default as a}from"../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/flip-vertical-2.js";import{info_default as o}from"../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/info.js";import{maximize_2_default as s}from"../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/maximize-2.js";import{rotate_ccw_default as c}from"../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/rotate-ccw.js";import{rotate_cw_default as l}from"../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/rotate-cw.js";import{zoom_in_default as u}from"../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/zoom-in.js";import{zoom_out_default as d}from"../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/zoom-out.js";import{addEventListener as f,className as p,createComponent as m,delegateEvents as h,effect as g,insert as _,memo as v,setAttribute as y,setStyleProperty as ee,template as b,use as x}from"solid-js/web";import{Show as S,createSignal as C,mergeProps as w,onCleanup as T,onMount as E}from"solid-js";var D=b(`<div class="flex items-start gap-2"><span class="w-24 shrink-0 text-white/40"></span><span class="min-w-0 break-all text-white/90">`),O=b(`<div class=img07>`),k=b(`<div><p class="mb-2 text-xs font-semibold tracking-wide text-white/50 uppercase">Image Info</p><div class="flex flex-col gap-1.5 text-xs">`),A=b(`<div class=relative><button title="Image info">`),j=b(`<div><button></button><div><img></div><div><button title="Flip vertically"></button><button title="Flip horizontally"></button><div class=img07></div><button title="Rotate counter-clockwise"></button><button title="Rotate clockwise"></button><div class=img07></div><button title="Zoom out"></button><span>%</span><button title="Zoom in"></button><div class=img07></div><button title="Reset to 100%">`),M=.25,N=.25,P=4;function F(e){if(!e)return;let t=e instanceof Date?e:new Date(e);return isNaN(t.getTime())?String(e):t.toLocaleString(`en-US`,{day:`2-digit`,month:`2-digit`,year:`numeric`,hour:`2-digit`,minute:`2-digit`})}function I(e){return m(S,{get when(){return e.value},get children(){var t=D(),n=t.firstChild,r=n.nextSibling;return _(n,()=>e.label),_(r,()=>e.value),t}})}function L(h){h=w({closeOnBackdrop:!1,closeOnEsc:!0},h);let[b,D]=C(0),[L,R]=C(!1),[z,B]=C(!1),[V,H]=C(1),[U,W]=C(0),[te,G]=C(0),[K,ne]=C(!1),[q,re]=C(!1),[J,ie]=C(null),Y=0,ae=0,oe=0,se=0,ce=()=>V()>1,le=()=>{let e=L()?-V():V(),t=z()?-V():V();return`translate(${U()}px, ${te()}px) rotate(${b()}deg) scale(${e}, ${t})`},ue=()=>H(e=>Math.min(+(e+M).toFixed(2),P)),de=()=>{let e=Math.max(+(V()-M).toFixed(2),N);H(e),e<=1&&(W(0),G(0))},fe=()=>{H(1),W(0),G(0)},pe=()=>{D(e=>e+90),W(0),G(0)},me=()=>{D(e=>e-90),W(0),G(0)},he=()=>R(e=>!e),ge=()=>B(e=>!e),_e=e=>{ce()&&(e.preventDefault(),e.currentTarget.setPointerCapture(e.pointerId),ne(!0),Y=e.clientX,ae=e.clientY,oe=U(),se=te())},ve=e=>{K()&&(W(oe+e.clientX-Y),G(se+e.clientY-ae))},ye=()=>ne(!1),X,Z,Q,$;E(()=>{let e=e=>{e.preventDefault();let t=e.deltaY<0?M:-M,n=V(),r=Math.min(Math.max(+(n+t).toFixed(2),N),P);if(r===n)return;let i=Z.getBoundingClientRect(),a=e.clientX-i.left-i.width/2,o=e.clientY-i.top-i.height/2,s=r/n-1;H(r),W(e=>e-(a-e)*s),G(e=>e-(o-e)*s),r<=1&&(W(0),G(0))},t=e=>{e.key===`Escape`&&(h.closeOnEsc??!0)&&(e.stopImmediatePropagation(),h.onClose())},n=e=>{if(!q())return;let t=e.target;!Q?.contains(t)&&!$?.contains(t)&&re(!1)},r=e=>e.preventDefault();X.addEventListener(`wheel`,r,{passive:!1}),Z.addEventListener(`wheel`,e,{passive:!1}),document.addEventListener(`pointerdown`,n),document.addEventListener(`keydown`,t,{capture:!0}),T(function(){X.removeEventListener(`wheel`,r),Z.removeEventListener(`wheel`,e),document.removeEventListener(`pointerdown`,n),document.removeEventListener(`keydown`,t,{capture:!0})})});let be=()=>!!(h.imageName||h.size||h.createdAt||h.modifiedAt);return m(n,{open:!0,get type(){return t.MODAL},blockScroll:!0,positioning:`fixed`,preRender:!1,get customValue(){return h.zIndex},class:`inset-0`,get children(){var t=j(),n=t.firstChild,b=n.nextSibling,C=b.firstChild,w=b.nextSibling,T=w.firstChild,E=T.nextSibling,D=E.nextSibling.nextSibling,M=D.nextSibling,L=M.nextSibling.nextSibling,R=L.nextSibling,z=R.firstChild,B=R.nextSibling,H=B.nextSibling.nextSibling;f(t,`click`,h.closeOnBackdrop?h.onClose:void 0,!0);var U=X;typeof U==`function`?x(U,t):X=t,f(n,`click`,h.onClose,!0),_(n,m(r,{size:20})),b.addEventListener(`pointercancel`,ye),b.$$pointerup=ye,b.$$pointermove=ve,b.$$pointerdown=_e,b.$$click=e=>e.stopPropagation();var W=Z;return typeof W==`function`?x(W,b):Z=b,C.addEventListener(`load`,e=>{let t=e.currentTarget;ie({w:t.naturalWidth,h:t.naturalHeight})}),y(C,`draggable`,!1),w.$$click=e=>e.stopPropagation(),T.$$click=ge,_(T,m(a,{size:16})),E.$$click=he,_(E,m(i,{size:16})),D.$$click=me,_(D,m(c,{size:16})),M.$$click=pe,_(M,m(l,{size:16})),L.$$click=de,_(L,m(d,{size:16})),_(R,()=>Math.round(V()*100),z),B.$$click=ue,_(B,m(u,{size:16})),H.$$click=fe,_(H,m(s,{size:16})),_(w,m(S,{get when(){return be()},get children(){return[O(),(()=>{var t=A(),n=t.firstChild;n.$$click=()=>re(e=>!e);var r=$;return typeof r==`function`?x(r,n):$=n,_(n,m(o,{size:16})),_(t,m(S,{get when(){return q()},get children(){var t=k(),n=t.firstChild.nextSibling,r=Q;return typeof r==`function`?x(r,t):Q=t,_(n,m(I,{label:`File name`,get value(){return h.imageName}}),null),_(n,m(I,{label:`Size`,get value(){return h.size}}),null),_(n,m(I,{label:`Dimension`,get value(){return v(()=>!!J())()?`${J().w} × ${J().h} px`:void 0}}),null),_(n,m(I,{label:`Created`,get value(){return F(h.createdAt)}}),null),_(n,m(I,{label:`Modified`,get value(){return F(h.modifiedAt)}}),null),g(()=>p(t,e(`img09`,h.class?.infoPopup))),t}}),null),g(()=>p(n,e(`img06`,q()&&`bg-white/20 text-white`,h.class?.toolBtn))),t})()]}}),null),g(r=>{var i=e(`img01`,h.class?.backdrop),a=e(`img02`,h.class?.close),o=e(`img03`,ce()&&(K()?`cursor-grabbing`:`cursor-grab`),h.class?.box),s=h.src,c=h.imageName,l=e(`img04`,K()&&`img04--drag`,h.class?.img),u=le(),d=e(`img05`,h.class?.toolbar),f=e(`img06`,h.class?.toolBtn),m=e(`img06`,h.class?.toolBtn),g=e(`img06`,h.class?.toolBtn),_=e(`img06`,h.class?.toolBtn),v=e(`img06`,h.class?.toolBtn),x=V()<=N,S=e(`img08`,h.class?.zoomLabel),O=e(`img06`,h.class?.toolBtn),k=V()>=P,A=e(`img06`,h.class?.toolBtn),j=V()===1;return i!==r.e&&p(t,r.e=i),a!==r.t&&p(n,r.t=a),o!==r.a&&p(b,r.a=o),s!==r.o&&y(C,`src`,r.o=s),c!==r.i&&y(C,`alt`,r.i=c),l!==r.n&&p(C,r.n=l),u!==r.s&&ee(C,`transform`,r.s=u),d!==r.h&&p(w,r.h=d),f!==r.r&&p(T,r.r=f),m!==r.d&&p(E,r.d=m),g!==r.l&&p(D,r.l=g),_!==r.u&&p(M,r.u=_),v!==r.c&&p(L,r.c=v),x!==r.w&&(L.disabled=r.w=x),S!==r.m&&p(R,r.m=S),O!==r.f&&p(B,r.f=O),k!==r.y&&(B.disabled=r.y=k),A!==r.g&&p(H,r.g=A),j!==r.p&&(H.disabled=r.p=j),r},{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,y:void 0,g:void 0,p:void 0}),t}})}h([`click`,`pointerdown`,`pointermove`,`pointerup`]);export{L as ImagePreview};
2
- //# sourceMappingURL=image-preview.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"image-preview.js","names":["cn","ZIndex","ZIndexType","FlipHorizontal2","FlipVertical2","Info","Maximize2","RotateCcw","RotateCw","X","ZoomIn","ZoomOut","createSignal","mergeProps","onCleanup","onMount","Show","ImagePreviewClassProps","backdrop","close","box","img","toolbar","toolBtn","zoomLabel","infoPopup","ImagePreviewProps","src","imageName","size","createdAt","Date","modifiedAt","onClose","closeOnBackdrop","closeOnEsc","class","zIndex","ZOOM_STEP","ZOOM_MIN","ZOOM_MAX","formatDate","value","undefined","d","isNaN","getTime","String","toLocaleString","day","month","year","hour","minute","InfoRow","props","label","_$createComponent","when","children","_el$","_tmpl$","_el$2","firstChild","_el$3","nextSibling","_$insert","ImagePreview","p","rotate","setRotate","flipH","setFlipH","flipV","setFlipV","scale","setScale","offsetX","setOffsetX","offsetY","setOffsetY","isDragging","setIsDragging","showInfo","setShowInfo","naturalSize","setNaturalSize","w","h","dragStartX","dragStartY","dragStartOffsetX","dragStartOffsetY","canPan","imgTransform","sx","sy","zoomIn","s","Math","min","toFixed","zoomOut","next","max","resetView","rotateCw","r","rotateCcw","doFlipH","v","doFlipV","onPointerDown","e","PointerEvent","preventDefault","currentTarget","HTMLElement","setPointerCapture","pointerId","clientX","clientY","onPointerMove","onPointerUp","backdropRef","HTMLDivElement","boxRef","infoPopupRef","infoBtnRef","HTMLButtonElement","onWheel","WheelEvent","delta","deltaY","oldScale","newScale","rect","getBoundingClientRect","cx","left","width","cy","top","height","ratio","ox","oy","onKeyDown","KeyboardEvent","key","stopImmediatePropagation","onDocPointerDown","target","Node","contains","preventScroll","addEventListener","passive","document","capture","removePreviewEventListeners","removeEventListener","hasInfo","open","type","MODAL","blockScroll","positioning","preRender","customValue","_el$4","_tmpl$5","_el$5","_el$6","_el$7","_el$8","_el$9","_el$0","_el$1","_el$10","_el$11","_el$12","_el$13","_el$14","_el$15","_el$16","_el$17","_el$18","_$addEventListener","_ref$","_$use","$$pointerup","$$pointermove","$$pointerdown","$$click","stopPropagation","_ref$2","HTMLImageElement","naturalWidth","naturalHeight","_$setAttribute","round","_tmpl$2","_el$20","_tmpl$4","_el$21","_ref$3","_el$22","_tmpl$3","_el$23","_el$24","_ref$4","_$memo","_$effect","_$className","_p$","_v$","_v$2","_v$3","_v$4","_v$5","_v$6","_v$7","_v$8","_v$9","_v$0","_v$1","_v$10","_v$11","_v$12","_v$13","_v$14","_v$15","_v$16","_v$17","t","a","o","i","n","_$setStyleProperty","l","u","c","disabled","m","f","y","g","_$delegateEvents"],"sources":["../../../src/components/image-preview/image-preview.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\nimport { ZIndex, ZIndexType } from '@components/z-index';\nimport FlipHorizontal2 from 'lucide-solid/icons/flip-horizontal-2';\nimport FlipVertical2 from 'lucide-solid/icons/flip-vertical-2';\nimport Info from 'lucide-solid/icons/info';\nimport Maximize2 from 'lucide-solid/icons/maximize-2';\nimport RotateCcw from 'lucide-solid/icons/rotate-ccw';\nimport RotateCw from 'lucide-solid/icons/rotate-cw';\nimport X from 'lucide-solid/icons/x';\nimport ZoomIn from 'lucide-solid/icons/zoom-in';\nimport ZoomOut from 'lucide-solid/icons/zoom-out';\nimport { createSignal, mergeProps, onCleanup, onMount, Show } from 'solid-js';\n\ntype ImagePreviewClassProps = {\n backdrop?: string;\n close?: string;\n box?: string;\n img?: string;\n toolbar?: string;\n toolBtn?: string;\n zoomLabel?: string;\n infoPopup?: string;\n};\n\nexport type ImagePreviewProps = {\n src: string;\n imageName?: string;\n size?: string;\n createdAt?: Date | string;\n modifiedAt?: Date | string;\n onClose: () => void;\n closeOnBackdrop?: boolean;\n closeOnEsc?: boolean;\n class?: ImagePreviewClassProps;\n zIndex?: number;\n};\n\nconst ZOOM_STEP = 0.25;\nconst ZOOM_MIN = 0.25;\nconst ZOOM_MAX = 4;\n\nfunction formatDate(value: Date | string | undefined): string | undefined {\n if (!value) return undefined;\n const d = value instanceof Date ? value : new Date(value);\n if (isNaN(d.getTime())) return String(value);\n return d.toLocaleString('en-US', {\n day: '2-digit',\n month: '2-digit',\n year: 'numeric',\n hour: '2-digit',\n minute: '2-digit',\n });\n}\n\nfunction InfoRow(props: { label: string; value: string | undefined }) {\n return (\n <Show when={props.value}>\n <div class=\"flex items-start gap-2\">\n <span class=\"w-24 shrink-0 text-white/40\">{props.label}</span>\n <span class=\"min-w-0 break-all text-white/90\">{props.value}</span>\n </div>\n </Show>\n );\n}\n\nexport function ImagePreview(p: ImagePreviewProps) {\n p = mergeProps({ closeOnBackdrop: false, closeOnEsc: true }, p);\n const [rotate, setRotate] = createSignal(0);\n const [flipH, setFlipH] = createSignal(false);\n const [flipV, setFlipV] = createSignal(false);\n const [scale, setScale] = createSignal(1);\n const [offsetX, setOffsetX] = createSignal(0);\n const [offsetY, setOffsetY] = createSignal(0);\n const [isDragging, setIsDragging] = createSignal(false);\n const [showInfo, setShowInfo] = createSignal(false);\n const [naturalSize, setNaturalSize] = createSignal<{ w: number; h: number } | null>(null);\n\n let dragStartX = 0;\n let dragStartY = 0;\n let dragStartOffsetX = 0;\n let dragStartOffsetY = 0;\n\n const canPan = () => scale() > 1;\n\n const imgTransform = () => {\n const sx = flipH() ? -scale() : scale();\n const sy = flipV() ? -scale() : scale();\n return `translate(${offsetX()}px, ${offsetY()}px) rotate(${rotate()}deg) scale(${sx}, ${sy})`;\n };\n\n const zoomIn = () => setScale(s => Math.min(+(s + ZOOM_STEP).toFixed(2), ZOOM_MAX));\n\n const zoomOut = () => {\n const next = Math.max(+(scale() - ZOOM_STEP).toFixed(2), ZOOM_MIN);\n setScale(next);\n if (next <= 1) {\n setOffsetX(0);\n setOffsetY(0);\n }\n };\n\n const resetView = () => {\n setScale(1);\n setOffsetX(0);\n setOffsetY(0);\n };\n\n const rotateCw = () => {\n setRotate(r => r + 90);\n setOffsetX(0);\n setOffsetY(0);\n };\n const rotateCcw = () => {\n setRotate(r => r - 90);\n setOffsetX(0);\n setOffsetY(0);\n };\n const doFlipH = () => setFlipH(v => !v);\n const doFlipV = () => setFlipV(v => !v);\n\n const onPointerDown = (e: PointerEvent) => {\n if (!canPan()) return;\n e.preventDefault();\n (e.currentTarget as HTMLElement).setPointerCapture(e.pointerId);\n setIsDragging(true);\n dragStartX = e.clientX;\n dragStartY = e.clientY;\n dragStartOffsetX = offsetX();\n dragStartOffsetY = offsetY();\n };\n\n const onPointerMove = (e: PointerEvent) => {\n if (!isDragging()) return;\n setOffsetX(dragStartOffsetX + e.clientX - dragStartX);\n setOffsetY(dragStartOffsetY + e.clientY - dragStartY);\n };\n\n const onPointerUp = () => setIsDragging(false);\n\n let backdropRef!: HTMLDivElement;\n let boxRef!: HTMLDivElement;\n let infoPopupRef!: HTMLDivElement;\n let infoBtnRef!: HTMLButtonElement;\n\n onMount(() => {\n const onWheel = (e: WheelEvent) => {\n e.preventDefault();\n const delta = e.deltaY < 0 ? ZOOM_STEP : -ZOOM_STEP;\n const oldScale = scale();\n const newScale = Math.min(Math.max(+(oldScale + delta).toFixed(2), ZOOM_MIN), ZOOM_MAX);\n if (newScale === oldScale) return;\n\n const rect = boxRef.getBoundingClientRect();\n const cx = e.clientX - rect.left - rect.width / 2;\n const cy = e.clientY - rect.top - rect.height / 2;\n const ratio = newScale / oldScale - 1;\n\n setScale(newScale);\n setOffsetX(ox => ox - (cx - ox) * ratio);\n setOffsetY(oy => oy - (cy - oy) * ratio);\n\n if (newScale <= 1) {\n setOffsetX(0);\n setOffsetY(0);\n }\n };\n\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && (p.closeOnEsc ?? true)) {\n e.stopImmediatePropagation();\n p.onClose();\n }\n };\n\n const onDocPointerDown = (e: PointerEvent) => {\n if (!showInfo()) return;\n const target = e.target as Node;\n if (!infoPopupRef?.contains(target) && !infoBtnRef?.contains(target)) {\n setShowInfo(false);\n }\n };\n\n const preventScroll = (e: WheelEvent) => e.preventDefault();\n backdropRef.addEventListener('wheel', preventScroll, { passive: false });\n boxRef.addEventListener('wheel', onWheel, { passive: false });\n document.addEventListener('pointerdown', onDocPointerDown);\n document.addEventListener('keydown', onKeyDown, { capture: true });\n\n onCleanup(function removePreviewEventListeners() {\n backdropRef.removeEventListener('wheel', preventScroll);\n boxRef.removeEventListener('wheel', onWheel);\n document.removeEventListener('pointerdown', onDocPointerDown);\n document.removeEventListener('keydown', onKeyDown, { capture: true });\n });\n });\n\n const hasInfo = () => !!(p.imageName || p.size || p.createdAt || p.modifiedAt);\n\n return (\n <ZIndex\n open={true}\n type={ZIndexType.MODAL}\n blockScroll={true}\n positioning=\"fixed\"\n preRender={false}\n customValue={p.zIndex}\n class=\"inset-0\"\n >\n <div\n ref={backdropRef}\n class={cn('img01', p.class?.backdrop)}\n onClick={p.closeOnBackdrop ? p.onClose : undefined}\n >\n <button class={cn('img02', p.class?.close)} onClick={p.onClose}>\n <X size={20} />\n </button>\n\n <div\n ref={boxRef}\n class={cn(\n 'img03',\n canPan() && (isDragging() ? 'cursor-grabbing' : 'cursor-grab'),\n p.class?.box,\n )}\n onClick={e => e.stopPropagation()}\n onPointerDown={onPointerDown}\n onPointerMove={onPointerMove}\n onPointerUp={onPointerUp}\n onPointerCancel={onPointerUp}\n >\n <img\n src={p.src}\n alt={p.imageName}\n class={cn('img04', isDragging() && 'img04--drag', p.class?.img)}\n style={{ transform: imgTransform() }}\n draggable={false}\n onLoad={e => {\n const img = e.currentTarget as HTMLImageElement;\n setNaturalSize({ w: img.naturalWidth, h: img.naturalHeight });\n }}\n />\n </div>\n\n <div class={cn('img05', p.class?.toolbar)} onClick={e => e.stopPropagation()}>\n <button class={cn('img06', p.class?.toolBtn)} onClick={doFlipV} title=\"Flip vertically\">\n <FlipVertical2 size={16} />\n </button>\n <button class={cn('img06', p.class?.toolBtn)} onClick={doFlipH} title=\"Flip horizontally\">\n <FlipHorizontal2 size={16} />\n </button>\n <div class=\"img07\" />\n <button\n class={cn('img06', p.class?.toolBtn)}\n onClick={rotateCcw}\n title=\"Rotate counter-clockwise\"\n >\n <RotateCcw size={16} />\n </button>\n <button class={cn('img06', p.class?.toolBtn)} onClick={rotateCw} title=\"Rotate clockwise\">\n <RotateCw size={16} />\n </button>\n <div class=\"img07\" />\n <button\n class={cn('img06', p.class?.toolBtn)}\n onClick={zoomOut}\n title=\"Zoom out\"\n disabled={scale() <= ZOOM_MIN}\n >\n <ZoomOut size={16} />\n </button>\n <span class={cn('img08', p.class?.zoomLabel)}>{Math.round(scale() * 100)}%</span>\n <button\n class={cn('img06', p.class?.toolBtn)}\n onClick={zoomIn}\n title=\"Zoom in\"\n disabled={scale() >= ZOOM_MAX}\n >\n <ZoomIn size={16} />\n </button>\n <div class=\"img07\" />\n <button\n class={cn('img06', p.class?.toolBtn)}\n onClick={resetView}\n title=\"Reset to 100%\"\n disabled={scale() === 1}\n >\n <Maximize2 size={16} />\n </button>\n\n <Show when={hasInfo()}>\n <div class=\"img07\" />\n <div class=\"relative\">\n <button\n ref={infoBtnRef}\n class={cn('img06', showInfo() && 'bg-white/20 text-white', p.class?.toolBtn)}\n onClick={() => setShowInfo(v => !v)}\n title=\"Image info\"\n >\n <Info size={16} />\n </button>\n\n <Show when={showInfo()}>\n <div ref={infoPopupRef} class={cn('img09', p.class?.infoPopup)}>\n <p class=\"mb-2 text-xs font-semibold tracking-wide text-white/50 uppercase\">\n Image Info\n </p>\n <div class=\"flex flex-col gap-1.5 text-xs\">\n <InfoRow label=\"File name\" value={p.imageName} />\n <InfoRow label=\"Size\" value={p.size} />\n <InfoRow\n label=\"Dimension\"\n value={\n naturalSize() ? `${naturalSize()!.w} × ${naturalSize()!.h} px` : undefined\n }\n />\n <InfoRow label=\"Created\" value={formatDate(p.createdAt)} />\n <InfoRow label=\"Modified\" value={formatDate(p.modifiedAt)} />\n </div>\n </div>\n </Show>\n </div>\n </Show>\n </div>\n </div>\n </ZIndex>\n );\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"indicator.js","names":["cn","getColor","Component","mergeProps","Show","IndicatorProps","BaseColorProps","DEFAULT_PROPS","count","showExact","color","top","right","formatCount","String","isPill","text","length","toPx","value","Indicator","props","p","label","pill","_el$","_tmpl$2","_$insert","children","_$createComponent","when","_el$2","_tmpl$","_$effect","_p$","_v$","class","badge","_v$2","_v$3","e","_$className","t","_$setStyleProperty","a","undefined","root"],"sources":["../../../src/components/indicator/indicator.tsx"],"sourcesContent":["import { cn } from '@utils/cn';\nimport { getColor } from '@utils/helper';\nimport { Component, mergeProps, Show } from 'solid-js';\nimport type { IndicatorProps } from './indicator.types';\nimport type { BaseColorProps } from '@/type';\n\nconst DEFAULT_PROPS = {\n count: 0,\n showExact: false,\n color: 'error' as BaseColorProps,\n top: 0,\n right: 0,\n};\n\nfunction formatCount(count: number, showExact: boolean): string {\n if (count > 99 && !showExact) return '99+';\n return String(count);\n}\n\nfunction isPill(text: string): boolean {\n return text.length > 2;\n}\n\nfunction toPx(value: number | string): string {\n return typeof value === 'number' ? `${value}px` : value;\n}\n\nexport const Indicator: Component<IndicatorProps> = props => {\n const p = mergeProps(DEFAULT_PROPS, props);\n\n const label = () => formatCount(p.count, p.showExact);\n const pill = () => isPill(label());\n\n return (\n <div class={cn('in01', p.class?.root)}>\n {p.children}\n <Show when={p.count > 0}>\n <span\n class={cn('in02', pill() ? 'in04' : 'in03', getColor(p.color), p.class?.badge)}\n style={{\n '--in-top': toPx(p.top),\n '--in-right': toPx(p.right),\n }}\n >\n {label()}\n </span>\n </Show>\n </div>\n );\n};\n"],"mappings":"iSAMMO,EAAgB,CACpBC,MAAO,EACPC,UAAW,GACXC,MAAO,QACPC,IAAK,EACLC,MAAO,EACR,CAED,SAASC,EAAYL,EAAeC,EAA4B,CAE9D,OADID,EAAQ,IAAM,CAACC,EAAkB,MAC9BK,OAAON,EAAM,CAGtB,SAASO,EAAOC,EAAuB,CACrC,OAAOA,EAAKC,OAAS,EAGvB,SAASC,EAAKC,EAAgC,CAC5C,OAAO,OAAOA,GAAU,SAAW,GAAGA,EAAK,IAAOA,EAGpD,IAAaC,EAAuCC,GAAS,CAC3D,IAAMC,EAAInB,EAAWI,EAAec,EAAM,CAEpCE,MAAcV,EAAYS,EAAEd,MAAOc,EAAEb,UAAU,CAC/Ce,MAAaT,EAAOQ,GAAO,CAAC,CAElC,WAAA,CAAA,IAAAE,EAAAC,GAAA,CACuC,OADvCC,EAAAF,MAEKH,EAAEM,SAAQ,KAAA,CAAAD,EAAAF,EAAAI,EACVzB,EAAI,CAAA,IAAC0B,MAAI,CAAA,OAAER,EAAEd,MAAQ,GAAC,IAAAoB,UAAA,CAAA,IAAAG,EAAAC,GAAA,CAKU,OALVL,EAAAI,EAQlBR,EAAK,CAAAU,EAAAC,GAAA,CAAA,IAAAC,EANCnC,EAAG,OAAQwB,GAAM,CAAG,OAAS,OAAQvB,EAASqB,EAAEZ,MAAM,CAAEY,EAAEc,OAAOC,MAAM,CAAAC,EAEhEpB,EAAKI,EAAEX,IAAI,CAAA4B,EACTrB,EAAKI,EAAEV,MAAM,CAAA,OAAAuB,IAAAD,EAAAM,GAAAC,EAAAV,EAAAG,EAAAM,EAAAL,EAAA,CAAAG,IAAAJ,EAAAQ,GAAAC,EAAAZ,EAAA,WAAAG,EAAAQ,EAAAJ,EAAA,CAAAC,IAAAL,EAAAU,GAAAD,EAAAZ,EAAA,aAAAG,EAAAU,EAAAL,EAAA,CAAAL,GAAA,CAAAM,EAAAK,IAAAA,GAAAH,EAAAG,IAAAA,GAAAD,EAAAC,IAAAA,GAAA,CAAA,CAAAd,GAAA,CAAA,CAAA,KAAA,CAAAE,MAAAQ,EAAAhB,EAPvBzB,EAAG,OAAQsB,EAAEc,OAAOU,KAAK,CAAA,CAAA,CAAArB,KAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"input.js","names":["Component","createMemo","lazy","on","InputColorProps","InputDateProps","InputNumberProps","InputOTPProps","InputPasswordProps","InputRangeProps","InputTextAreaProps","InputTextProps","InputRadioProps","InputText","then","m","default","InputNumber","InputColor","InputPassword","InputDate","InputRange","InputTextArea","InputOTP","InputRadio","InputProps","Input","Text","TextArea","Color","Date","Number","Password","Range","OTP","Radio","props","render","type","_$createComponent","_$memo","InputVariantsProps","TextAreaVariantsProps"],"sources":["../../../src/components/input/input.tsx"],"sourcesContent":["import { Component, createMemo, lazy, on } from 'solid-js';\nimport type {\n InputColorProps,\n InputDateProps,\n InputNumberProps,\n InputOTPProps,\n InputPasswordProps,\n InputRangeProps,\n InputTextAreaProps,\n InputTextProps,\n} from './input.types';\nimport { InputRadioProps } from './variants/input-radio';\n\nconst InputText = lazy(() => import('./variants/input-text').then(m => ({ default: m.InputText })));\nconst InputNumber = lazy(() =>\n import('./variants/input-number').then(m => ({ default: m.InputNumber })),\n);\nconst InputColor = lazy(() =>\n import('./variants/input-color').then(m => ({ default: m.InputColor })),\n);\nconst InputPassword = lazy(() =>\n import('./variants/input-password').then(m => ({ default: m.InputPassword })),\n);\nconst InputDate = lazy(() => import('./variants/input-date').then(m => ({ default: m.InputDate })));\nconst InputRange = lazy(() =>\n import('./variants/input-range').then(m => ({ default: m.InputRange })),\n);\nconst InputTextArea = lazy(() =>\n import('./variants/input-textarea').then(m => ({ default: m.InputTextArea })),\n);\nconst InputOTP = lazy(() => import('./variants/input-otp').then(m => ({ default: m.InputOTP })));\n\nconst InputRadio = lazy(() =>\n import('./variants/input-radio').then(m => ({ default: m.InputRadio })),\n);\n\ntype InputProps =\n | InputTextProps\n | InputColorProps\n | InputDateProps\n | InputNumberProps\n | InputPasswordProps\n | InputRangeProps\n | InputTextAreaProps\n | InputOTPProps\n | InputRadioProps;\n\nexport const Input: Component<InputProps> & {\n Text: Component<InputTextProps>;\n TextArea: Component<InputTextAreaProps>;\n Color: Component<InputColorProps>;\n Date: Component<InputDateProps>;\n Number: Component<InputNumberProps>;\n Password: Component<InputPasswordProps>;\n Range: Component<InputRangeProps>;\n OTP: Component<InputOTPProps>;\n Radio: Component<InputRadioProps>;\n} = props => {\n const render = createMemo(\n on(\n () => props.type,\n () => {\n switch (props.type) {\n case 'text':\n return <InputText {...props} />;\n case 'textarea':\n return <InputTextArea {...props} />;\n case 'number':\n return <InputNumber {...props} />;\n case 'password':\n return <InputPassword {...props} />;\n case 'color':\n return <InputColor {...props} />;\n case 'date':\n return <InputDate {...props} />;\n case 'range':\n return <InputRange {...props} />;\n case 'otp':\n return <InputOTP {...props} />;\n case 'radio':\n return <InputRadio {...props} />;\n default:\n return <InputText {...(props as InputTextProps)} />;\n }\n },\n ),\n );\n return <>{render()}</>;\n};\n\nInput.Text = InputText as Component<InputTextProps>;\nInput.TextArea = InputTextArea as Component<InputTextAreaProps>;\nInput.Color = InputColor as Component<InputColorProps>;\nInput.Date = InputDate as Component<InputDateProps>;\nInput.Number = InputNumber as Component<InputNumberProps>;\nInput.Password = InputPassword as Component<InputPasswordProps>;\nInput.Range = InputRange as Component<InputRangeProps>;\nInput.OTP = InputOTP as Component<InputOTPProps>;\nInput.Radio = InputRadio as Component<InputRadioProps>;\nexport type { InputVariantsProps, TextAreaVariantsProps } from './input.utils';\n"],"mappings":"iHAaA,IAAMa,EAAYX,MAAW,OAAO,4BAAyBY,KAAKC,IAAM,CAAEC,QAASD,EAAEF,UAAW,EAAE,CAAC,CAC7FI,EAAcf,MAClB,OAAO,8BAA2BY,KAAKC,IAAM,CAAEC,QAASD,EAAEE,YAAa,EACzE,CAAC,CACKC,EAAahB,MACjB,OAAO,6BAA0BY,KAAKC,IAAM,CAAEC,QAASD,EAAEG,WAAY,EACvE,CAAC,CACKC,EAAgBjB,MACpB,OAAO,gCAA6BY,KAAKC,IAAM,CAAEC,QAASD,EAAEI,cAAe,EAC7E,CAAC,CACKC,EAAYlB,MAAW,OAAO,4BAAyBY,KAAKC,IAAM,CAAEC,QAASD,EAAEK,UAAW,EAAE,CAAC,CAC7FC,EAAanB,MACjB,OAAO,6BAA0BY,KAAKC,IAAM,CAAEC,QAASD,EAAEM,WAAY,EACvE,CAAC,CACKC,EAAgBpB,MACpB,OAAO,gCAA6BY,KAAKC,IAAM,CAAEC,QAASD,EAAEO,cAAe,EAC7E,CAAC,CACKC,EAAWrB,MAAW,OAAO,2BAAwBY,KAAKC,IAAM,CAAEC,QAASD,EAAEQ,SAAU,EAAE,CAAC,CAE1FC,EAAatB,MACjB,OAAO,6BAA0BY,KAAKC,IAAM,CAAEC,QAASD,EAAES,WAAY,EACvE,CAAC,CAaYE,EAUTU,GA8BFI,EA7BevC,EACbE,MACQiC,EAAME,SACN,CACJ,OAAQF,EAAME,KAAd,CACE,IAAK,OACH,OAAAC,EAAQ1B,EAAcuB,EAAK,CAC7B,IAAK,WACH,OAAAG,EAAQjB,EAAkBc,EAAK,CACjC,IAAK,SACH,OAAAG,EAAQtB,EAAgBmB,EAAK,CAC/B,IAAK,WACH,OAAAG,EAAQpB,EAAkBiB,EAAK,CACjC,IAAK,QACH,OAAAG,EAAQrB,EAAekB,EAAK,CAC9B,IAAK,OACH,OAAAG,EAAQnB,EAAcgB,EAAK,CAC7B,IAAK,QACH,OAAAG,EAAQlB,EAAee,EAAK,CAC9B,IAAK,MACH,OAAAG,EAAQhB,EAAaa,EAAK,CAC5B,IAAK,QACH,OAAAG,EAAQf,EAAeY,EAAK,CAC9B,QACE,OAAAG,EAAQ1B,EAAeuB,EAAuB,GAIxD,CAAC,CACe,CAGlBV,EAAMC,KAAOd,EACba,EAAME,SAAWN,EACjBI,EAAMG,MAAQX,EACdQ,EAAMI,KAAOV,EACbM,EAAMK,OAASd,EACfS,EAAMM,SAAWb,EACjBO,EAAMO,MAAQZ,EACdK,EAAMQ,IAAMX,EACZG,EAAMS,MAAQX"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"input.utils.js","names":[],"sources":["../../../src/components/input/input.utils.ts"],"sourcesContent":["import { cva, VariantProps } from 'class-variance-authority';\nimport type { InputBaseProps } from './input.types';\n\nexport const inputTextVariants = cva('', {\n variants: {\n size: {\n '4xs': 'h-6.5 text-xs',\n '3xs': 'h-7 text-xs',\n '2xs': 'h-7.5 text-xs',\n xs: 'h-8 text-xs',\n sm: 'h-8.5',\n md: 'h-9',\n lg: 'h-9.5',\n xl: 'h-10 text-base',\n '2xl': 'h-10.5 text-base',\n '3xl': 'h-11 text-base',\n '4xl': 'h-11.5 text-base',\n },\n color: {\n neutral: 'input-neutral',\n primary: 'input-primary',\n secondary: 'input-secondary',\n accent: 'input-accent',\n info: 'input-info',\n success: 'input-success',\n warning: 'input-warning',\n error: 'input-error',\n },\n variant: {\n outline: '',\n borderless: 'border-0 outline-0',\n filled: 'it02',\n },\n },\n});\nexport type InputVariantsProps = VariantProps<typeof inputTextVariants>;\n\nexport const textareaVariants = cva('', {\n variants: {\n color: {\n neutral: 'textarea-neutral',\n primary: 'textarea-primary',\n secondary: 'textarea-secondary',\n accent: 'textarea-accent',\n info: 'textarea-info',\n success: 'textarea-success',\n warning: 'textarea-warning',\n error: 'textarea-error',\n },\n variant: {\n outline: '',\n borderless: 'border-0 outline-0',\n filled: 'ta03',\n },\n size: {\n xs: 'textarea-xs',\n sm: 'textarea-sm',\n md: 'textarea-md',\n lg: 'textarea-lg',\n xl: 'textarea-xl',\n },\n },\n});\nexport type TextAreaVariantsProps = VariantProps<typeof textareaVariants>;\n\nexport const DEFAULT_PROPS: Partial<InputBaseProps> = {\n variant: 'outline',\n allowClear: true,\n color: 'info',\n size: 'md',\n placeholder: '',\n};\n"],"mappings":"+CAGA,IAAa,EAAoB,EAAI,GAAI,CACvC,SAAU,CACR,KAAM,CACJ,MAAO,gBACP,MAAO,cACP,MAAO,iBACP,GAAI,cACJ,GAAI,QACJ,GAAI,MACJ,GAAI,QACJ,GAAI,iBACJ,MAAO,mBACP,MAAO,iBACP,MAAO,mBACR,CACD,MAAO,CACL,QAAS,gBACT,QAAS,gBACT,UAAW,kBACX,OAAQ,eACR,KAAM,aACN,QAAS,gBACT,QAAS,gBACT,MAAO,cACR,CACD,QAAS,CACP,QAAS,GACT,WAAY,qBACZ,OAAQ,OACT,CACF,CACF,CAAC,CAGW,EAAmB,EAAI,GAAI,CACtC,SAAU,CACR,MAAO,CACL,QAAS,mBACT,QAAS,mBACT,UAAW,qBACX,OAAQ,kBACR,KAAM,gBACN,QAAS,mBACT,QAAS,mBACT,MAAO,iBACR,CACD,QAAS,CACP,QAAS,GACT,WAAY,qBACZ,OAAQ,OACT,CACD,KAAM,CACJ,GAAI,cACJ,GAAI,cACJ,GAAI,cACJ,GAAI,cACJ,GAAI,cACL,CACF,CACF,CAAC,CAGW,EAAyC,CACpD,QAAS,UACT,WAAY,GACZ,MAAO,OACP,KAAM,KACN,YAAa,GACd"}
@@ -1 +0,0 @@
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';\nimport { Component, createSignal, splitProps } from 'solid-js';\nimport type { InputColorProps } from '../input.types';\nimport { InputText } from './input-text';\n\nexport const InputColor: Component<InputColorProps> = (props => {\n const [p, otherProps] = splitProps(props, ['value', 'onChange', 'onBlur', 'onInput']);\n const initialValue = normalizeHexColor(p.value);\n const [colorValue, setColorValue] = createSignal(initialValue);\n\n const colorPickerLabel = (\n <label class=\"flex cursor-pointer\">\n <input\n type=\"color\"\n value={colorValue()}\n class=\"my-auto size-5 cursor-pointer\"\n onChange={e => {\n const newValue = normalizeHexColor(e.currentTarget.value);\n setColorValue(newValue);\n if (p.onChange) {\n p.onChange(newValue, e);\n }\n }}\n />\n </label>\n );\n\n return (\n <InputText\n {...otherProps}\n type={'text'}\n typeOrigin=\"color\"\n value={colorValue()}\n maskOptions={void 0}\n prefixIcon={colorPickerLabel}\n onInput={(value, e) => {\n setColorValue(value);\n if (p.onInput) {\n p.onInput(value, e);\n }\n }}\n onChange={(value, e) => {\n const normalizedValue = normalizeHexColor(value);\n setColorValue(normalizedValue);\n if (p.onChange) {\n p.onChange(normalizedValue, e);\n }\n }}\n onBlur={(value, e) => {\n const normalizedValue = normalizeHexColor(value);\n setColorValue(normalizedValue);\n if (p.onBlur) {\n p.onBlur(normalizedValue, e);\n }\n }}\n />\n );\n}) as Component<InputColorProps>;\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"}
@@ -1 +0,0 @@
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';\nimport type { InputDateProps } from '../input.types';\nimport { DEFAULT_PROPS } from '../input.utils';\nimport { InputText } from './input-text';\n\nexport const InputDate: Component<InputDateProps> = (p => {\n const id = createUniqueId();\n p = mergeProps({ ...DEFAULT_PROPS, id }, p);\n return (\n <InputText\n {...p}\n type={'date' as 'text'}\n typeOrigin=\"date\"\n maskOptions={void 0}\n allowClear={false}\n />\n );\n}) as Component<InputDateProps>;\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"}
@@ -1,2 +0,0 @@
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
@@ -1 +0,0 @@
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';\nimport { createThrottle } from '@/utils/helper';\nimport type { FactoryArg, InputMask } from 'imask';\nimport IMask from 'imask/holder';\nimport 'imask/masked/number';\nimport X from 'lucide-solid/icons/x';\nimport {\n Component,\n createEffect,\n createUniqueId,\n mergeProps,\n on,\n onCleanup,\n onMount,\n Show,\n} from 'solid-js';\nimport type { InputNumberProps } from '../input.types';\nimport { DEFAULT_PROPS, inputTextVariants } from '../input.utils';\n\nexport const InputNumber: Component<InputNumberProps> = (p => {\n const id = createUniqueId();\n p = mergeProps({ ...DEFAULT_PROPS, id, offset: 1, wheel: false, keyboard: true }, p);\n let maskInstance: InputMask<FactoryArg> | undefined;\n let inputRef: HTMLInputElement | undefined;\n\n const options = () => ({\n min: Number.NEGATIVE_INFINITY,\n max: Number.POSITIVE_INFINITY,\n thousandsSeparator: '_',\n radix: '.',\n padFractionalZeros: false,\n normalizeZeros: true,\n ...p.maskOptions,\n mask: Number,\n });\n\n const focusInput = () => {\n inputRef?.focus();\n };\n\n let maskAcceptEvent: any = null;\n\n const updateValue = (delta: number) => {\n if (!maskInstance) return;\n\n const currentValue = maskInstance.unmaskedValue;\n const numericValue = currentValue === '' ? 0 : parseFloat(currentValue);\n let newValue = numericValue + delta;\n\n const min = p.maskOptions?.min ?? Number.NEGATIVE_INFINITY;\n const max = p.maskOptions?.max ?? Number.POSITIVE_INFINITY;\n newValue = Math.max(min, Math.min(max, newValue));\n\n maskInstance.unmaskedValue = String(newValue);\n maskInstance.updateValue();\n\n p.onChange?.(maskInstance.value, new Event('change'));\n p.onInput?.(maskInstance.value, new Event('input'));\n p.maskOptions?.onAccept?.(maskInstance.value, maskInstance.unmaskedValue);\n };\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (!p.keyboard) return;\n\n const offset = p.offset ?? 1;\n\n if (e.key === 'ArrowUp') {\n e.preventDefault();\n updateValue(offset);\n } else if (e.key === 'ArrowDown') {\n e.preventDefault();\n updateValue(-offset);\n }\n };\n\n const handleWheel = createThrottle((e: WheelEvent) => {\n if (!p.wheel) return;\n\n e.preventDefault();\n const offset = p.offset ?? 1;\n const delta = e.deltaY < 0 ? offset : -offset;\n updateValue(delta);\n }, 50);\n\n createEffect(\n on(\n () => options(),\n value => maskInstance && value && maskInstance.updateOptions(value),\n { defer: true },\n ),\n );\n\n onMount(() => {\n if (inputRef) {\n maskInstance = IMask(inputRef, options());\n\n maskAcceptEvent = (e: InputEvent) => {\n p.onChange?.(maskInstance?.value ?? '', e);\n p.maskOptions?.onAccept?.(maskInstance?.value, maskInstance?.unmaskedValue);\n };\n maskInstance.on('accept', maskAcceptEvent);\n }\n });\n\n onCleanup(function destroyNumberMask() {\n if (maskInstance) {\n maskAcceptEvent && maskInstance.off('accept', maskAcceptEvent);\n maskInstance.destroy();\n }\n });\n\n const handleClear = (e: MouseEvent) => {\n e.stopPropagation();\n if (maskInstance) {\n maskInstance.value = '';\n maskInstance.updateValue();\n } else if (inputRef) {\n inputRef.value = '';\n }\n p.onInput?.('', undefined as any);\n p.onChange?.('', undefined as any);\n inputRef?.focus();\n };\n\n return (\n <div\n tabIndex={-1}\n class={cn(\n 'it01',\n inputTextVariants({ color: p.color, size: p.size, variant: p.variant }),\n p.class?.input,\n p.disabled && 'border-c5 pointer-events-none',\n )}\n onClick={focusInput}\n >\n {p.prefixIcon}\n <input\n id={p.id}\n ref={inputRef}\n type=\"text\"\n data-type=\"number\"\n value={p.value ?? ''}\n placeholder={p.placeholder}\n class=\"text-c2 grow\"\n onBlur={e => p.onBlur?.(e.currentTarget.value, e)}\n onChange={e => p.onChange?.(e.currentTarget.value, e)}\n onInput={e => p.onInput?.(e.currentTarget.value, e)}\n onKeyDown={e => {\n if (e.key === 'Enter' || e.keyCode === 13) {\n e.preventDefault();\n p.onPressEnter?.(e.currentTarget.value, e);\n }\n handleKeyDown(e);\n }}\n onWheel={e => {\n if (p.wheel && document.activeElement === inputRef) {\n handleWheel(e);\n }\n }}\n disabled={p.disabled}\n />\n <Show when={p.allowClear || p.suffixIcon}>\n <div class=\"it05\">\n {p.allowClear && (\n <div class=\"it03\" onClick={handleClear}>\n <X class=\"m-auto size-2\" />\n </div>\n )}\n {p.suffixIcon && <div class=\"it04\">{p.suffixIcon}</div>}\n </div>\n </Show>\n </div>\n );\n}) as Component<InputNumberProps>;\n"],"mappings":"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"}
@@ -1 +0,0 @@
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';\nimport { Component, createEffect, createSignal, For, mergeProps, on } from 'solid-js';\nimport type { InputOTPProps } from '../input.types';\nimport { getColor } from '@/utils/helper';\n\nexport const InputOTP: Component<InputOTPProps> = p => {\n p = mergeProps(\n {\n color: 'info',\n length: 6,\n inputMode: 'numeric',\n allowedChars: /^[0-9]$/,\n disabled: false,\n } as InputOTPProps,\n p,\n );\n\n const length = () => p.length || 6;\n const allowedChars = () => p.allowedChars || /^[0-9]$/;\n\n const [values, setValues] = createSignal<string[]>(Array(length()).fill(''));\n const [focusedIndex, setFocusedIndex] = createSignal<number | null>(null);\n\n let inputRefs: HTMLInputElement[] = [];\n\n createEffect(\n on(\n () => p.value,\n value => {\n if (value !== undefined) {\n const chars = value.split('').slice(0, length());\n const newValues = Array(length()).fill('');\n chars.forEach((char, i) => {\n newValues[i] = char;\n });\n setValues(newValues);\n }\n },\n ),\n );\n\n const getCombinedValue = () => values().join('');\n\n const notifyChange = (newValues: string[]) => {\n const combined = newValues.join('');\n p.onChange?.(combined);\n\n if (combined.length === length() && newValues.every(v => v !== '')) {\n p.onComplete?.(combined);\n }\n };\n\n const updateValue = (index: number, char: string) => {\n const newValues = [...values()];\n newValues[index] = char;\n setValues(newValues);\n notifyChange(newValues);\n };\n\n const focusInput = (index: number) => {\n if (index >= 0 && index < length() && inputRefs[index]) {\n inputRefs[index].focus();\n }\n };\n\n const getNextIndex = (currentIndex: number): number => {\n let nextIndex = (currentIndex + 1) % length();\n if (nextIndex === 0 && currentIndex === length() - 1) {\n const allFilled = values().every(v => v !== '');\n if (allFilled) {\n return -1;\n }\n }\n return nextIndex;\n };\n\n const handleInput = (index: number, e: InputEvent) => {\n const input = e.target as HTMLInputElement;\n const inputValue = input.value;\n input.value = '';\n\n if (!inputValue) return;\n const char = inputValue[inputValue.length - 1];\n\n if (!allowedChars().test(char)) return;\n\n updateValue(index, char);\n\n const nextIndex = getNextIndex(index);\n if (nextIndex === -1) {\n inputRefs[index]?.blur();\n } else {\n focusInput(nextIndex);\n }\n };\n\n const handlePaste = (index: number, e: ClipboardEvent) => {\n e.preventDefault();\n\n const pasteData = e.clipboardData?.getData('text') || '';\n if (!pasteData) return;\n\n const validChars = pasteData.split('').filter(char => allowedChars().test(char));\n if (validChars.length === 0) return;\n\n const newValues = [...values()];\n let lastFilledIndex = index;\n\n for (let i = 0; i < validChars.length && index + i < length(); i++) {\n newValues[index + i] = validChars[i];\n lastFilledIndex = index + i;\n }\n\n setValues(newValues);\n notifyChange(newValues);\n\n const allFilled = newValues.every(v => v !== '');\n if (allFilled) {\n inputRefs[lastFilledIndex]?.blur();\n } else {\n const nextEmptyIndex = newValues.findIndex((v, i) => i > lastFilledIndex && v === '');\n if (nextEmptyIndex !== -1) {\n focusInput(nextEmptyIndex);\n } else {\n focusInput(lastFilledIndex);\n }\n }\n };\n\n const handleKeyDown = (index: number, e: KeyboardEvent) => {\n switch (e.key) {\n case 'Backspace':\n e.preventDefault();\n if (values()[index]) {\n updateValue(index, '');\n } else if (index > 0) {\n updateValue(index - 1, '');\n focusInput(index - 1);\n }\n break;\n\n case 'Delete':\n e.preventDefault();\n updateValue(index, '');\n break;\n\n case 'ArrowLeft':\n e.preventDefault();\n if (index > 0) focusInput(index - 1);\n break;\n\n case 'ArrowRight':\n e.preventDefault();\n if (index < length() - 1) focusInput(index + 1);\n break;\n\n case 'Tab':\n e.preventDefault();\n if (e.shiftKey) {\n const prevIndex = index === 0 ? length() - 1 : index - 1;\n focusInput(prevIndex);\n } else {\n const nextIndex = (index + 1) % length();\n focusInput(nextIndex);\n }\n break;\n\n case 'ArrowUp':\n case 'ArrowDown':\n e.preventDefault();\n break;\n }\n };\n\n const handleFocus = (index: number) => {\n setFocusedIndex(index);\n inputRefs[index]?.select();\n };\n\n const handleBlur = (_index: number, e: FocusEvent) => {\n const relatedTarget = e.relatedTarget as HTMLElement;\n const isInternalFocus = inputRefs.some(ref => ref === relatedTarget);\n\n if (!isInternalFocus) {\n setFocusedIndex(null);\n p.onBlur?.(getCombinedValue());\n }\n };\n\n const handleContainerClick = (index: number) => {\n if (!p.disabled) focusInput(index);\n };\n\n return (\n <div\n class={cn(\n 'op01',\n getColor(p.color!),\n p.class?.root,\n p.disabled && 'pointer-events-none opacity-50',\n )}\n role=\"group\"\n aria-label=\"OTP Input\"\n >\n <For each={Array(length()).fill(0)}>\n {(_, i) => (\n <>\n <div\n class={cn(\n 'op04',\n focusedIndex() === i() ? 'op02' : 'border-c3 hover:border-c4',\n p.class?.inputWrap,\n p.disabled && 'border-c3',\n )}\n onClick={() => handleContainerClick(i())}\n >\n <input\n ref={el => (inputRefs[i()] = el)}\n type=\"text\"\n inputMode={p.inputMode}\n maxLength={2}\n disabled={p.disabled}\n class={cn('op03', p.class?.input, p.disabled && 'cursor-not-allowed bg-gray-200')}\n autocomplete=\"one-time-code\"\n aria-label={`OTP digit ${i() + 1}`}\n value={values()[i()] || ''}\n onInput={e => handleInput(i(), e)}\n onKeyDown={e => handleKeyDown(i(), e)}\n onPaste={e => handlePaste(i(), e)}\n onFocus={() => handleFocus(i())}\n onBlur={e => handleBlur(i(), e)}\n />\n </div>\n {p.separator && <div class=\"my-auto\">{p.separator as Element}</div>}\n </>\n )}\n </For>\n </div>\n );\n};\n\nexport default InputOTP;\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
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
@@ -1 +0,0 @@
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';\nimport Eye from 'lucide-solid/icons/eye';\nimport EyeOff from 'lucide-solid/icons/eye-off';\nimport { Component, createSignal, createUniqueId, mergeProps } from 'solid-js';\nimport type { InputPasswordProps } from '../input.types';\nimport { DEFAULT_PROPS } from '../input.utils';\nimport { InputText } from './input-text';\n\nexport const InputPassword: Component<InputPasswordProps> = (p => {\n p = mergeProps({ ...DEFAULT_PROPS, id: createUniqueId() }, p);\n\n const [showPassword, setShowPassword] = createSignal(false);\n let timeoutId: ReturnType<typeof setTimeout> | undefined;\n\n const togglePasswordVisibility = (e: MouseEvent) => {\n e.stopPropagation();\n if (timeoutId !== undefined) {\n clearTimeout(timeoutId);\n timeoutId = undefined;\n }\n const next = !showPassword();\n setShowPassword(next);\n if (next) {\n timeoutId = setTimeout(() => {\n setShowPassword(false);\n timeoutId = undefined;\n }, 1000);\n }\n };\n\n return (\n <InputText\n {...p}\n type={(showPassword() ? 'text' : 'password') as 'text'}\n typeOrigin=\"password\"\n maskOptions={void 0}\n suffixIcon={\n <div class=\"ipa01\" onClick={togglePasswordVisibility}>\n <EyeOff class={cn('ipa02', showPassword() ? 'opacity-100' : 'opacity-0')} />\n <Eye class={cn('ipa03', !showPassword() ? 'opacity-100' : 'opacity-0')} />\n </div>\n }\n />\n );\n}) as Component<InputPasswordProps>;\n"],"mappings":"soBAQaU,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"}
@@ -1 +0,0 @@
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';\nimport { cva, VariantProps } from 'class-variance-authority';\nimport { Component, createUniqueId, mergeProps } from 'solid-js';\n\nexport type InputRadioProps = {\n type: 'radio';\n size?: RadioVariantsProps['size'];\n color?: RadioVariantsProps['color'];\n id?: string;\n name: string;\n value: string;\n checked?: boolean;\n disabled?: boolean;\n onChange?: (value: string) => void;\n class?: string;\n};\nconst variants = cva('radio', {\n variants: {\n size: {\n xs: 'radio-xs',\n sm: 'radio-sm',\n md: 'radio-md',\n lg: 'radio-lg',\n xl: 'radio-xl',\n },\n color: {\n neutral: 'radio-neutral',\n primary: 'radio-primary',\n secondary: 'radio-secondary',\n accent: 'radio-accent',\n info: 'radio-info',\n success: 'radio-success',\n warning: 'radio-warning',\n error: 'radio-error',\n },\n },\n});\n\nexport type RadioVariantsProps = VariantProps<typeof variants>;\n\nexport const InputRadio: Component<InputRadioProps> = p => {\n p = mergeProps({ size: 'md' as const, id: createUniqueId() }, p);\n return (\n <input\n type=\"radio\"\n class={cn(variants({ color: p.color, size: p.size }), p.class)}\n id={p.id}\n name={p.name}\n value={p.value}\n checked={p.checked}\n disabled={p.disabled}\n onChange={e => p.onChange?.(e.currentTarget.value)}\n />\n );\n};\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"}
@@ -1 +0,0 @@
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';\nimport { Slider } from '../../slider/slider';\nimport type { InputRangeProps } from '../input.types';\n\nexport const InputRange: Component<InputRangeProps> = (props => {\n const [, sliderProps] = splitProps(props, ['type']);\n return <Slider {...sliderProps} />;\n}) as Component<InputRangeProps>;\n"],"mappings":"qIAIA,IAAaI,GAA0CC,GAAS,CAC9D,GAAM,EAAGC,GAAeL,EAAWI,EAAO,CAAC,OAAO,CAAC,CACnD,OAAAE,EAAQL,EAAWI,EAAW"}
@@ -1,2 +0,0 @@
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
@@ -1 +0,0 @@
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';\nimport type { FactoryArg, InputMask } from 'imask';\nimport IMask from 'imask/holder';\nimport 'imask/masked/number';\nimport 'imask/masked/pattern';\nimport X from 'lucide-solid/icons/x';\nimport {\n Component,\n createEffect,\n createUniqueId,\n mergeProps,\n on,\n onCleanup,\n onMount,\n Show,\n} from 'solid-js';\nimport type { InputTextProps } from '../input.types';\nimport { DEFAULT_PROPS, inputTextVariants } from '../input.utils';\n\nexport const InputText: Component<InputTextProps> = (p => {\n p = mergeProps({ ...DEFAULT_PROPS, id: createUniqueId() }, p);\n let maskInstance: InputMask<FactoryArg> | undefined;\n let inputRef: HTMLInputElement | undefined;\n const focusInput = () => {\n inputRef?.focus();\n };\n let maskAcceptEvent: any = null;\n createEffect(\n on(\n () => p.maskOptions,\n value => maskInstance && value && maskInstance.updateOptions(value),\n { defer: true },\n ),\n );\n onMount(() => {\n if (inputRef && p.maskOptions) {\n maskInstance = IMask(inputRef, p.maskOptions);\n\n maskAcceptEvent = (e: InputEvent) => {\n p.onChange && p.onChange(maskInstance?.value ?? '', e);\n p.maskOptions?.onAccept &&\n p.maskOptions?.onAccept(maskInstance?.value, maskInstance?.unmaskedValue);\n };\n maskInstance.on('accept', maskAcceptEvent);\n if (typeof p.maskOptions.onAccept === 'function') {\n }\n }\n });\n onCleanup(function destroyTextMask() {\n if (maskInstance) {\n maskAcceptEvent && maskInstance.off('accept', maskAcceptEvent);\n maskInstance.destroy();\n }\n });\n const handleClear = (e: MouseEvent) => {\n e.stopPropagation();\n if (maskInstance) {\n maskInstance.value = '';\n maskInstance.updateValue();\n } else if (inputRef) {\n inputRef.value = '';\n }\n p.onInput?.('', undefined as any);\n p.onChange?.('', undefined as any);\n inputRef?.focus();\n };\n return (\n <div\n tabIndex={-1}\n class={cn(\n 'it01',\n `input-${p.type}`,\n inputTextVariants({ color: p.color, size: p.size, variant: p.variant }),\n p.class?.root,\n p.disabled && 'border-c5 pointer-events-none',\n )}\n onClick={focusInput}\n >\n {p.prefixIcon}\n <input\n id={p.id}\n ref={inputRef}\n type={p.type || 'text'}\n data-type={p.typeOrigin}\n value={p.value ?? ''}\n placeholder={p.placeholder}\n class={cn('text-c2 grow', p.class?.input)}\n onBlur={e => p.onBlur?.(e.currentTarget.value, e)}\n onChange={e => p.onChange?.(e.currentTarget.value, e)}\n onInput={e => p.onInput?.(e.currentTarget.value, e)}\n onKeyDown={e => {\n if (e.key === 'Enter' || e.keyCode === 13) {\n e.preventDefault();\n p.onPressEnter?.(e.currentTarget.value, e);\n }\n }}\n disabled={p.disabled}\n />\n <Show when={p.allowClear || p.suffixIcon}>\n <div class=\"it05\">\n {p.allowClear && (\n <div class=\"it03\" onClick={handleClear}>\n <X class=\"m-auto size-2\" />\n </div>\n )}\n {p.suffixIcon && <div class=\"it04\">{p.suffixIcon}</div>}\n </div>\n </Show>\n </div>\n );\n}) as Component<InputTextProps>;\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
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
@@ -1 +0,0 @@
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';\nimport X from 'lucide-solid/icons/x';\nimport { Component, createUniqueId, mergeProps } from 'solid-js';\nimport type { InputTextAreaProps } from '../input.types';\nimport { DEFAULT_PROPS, textareaVariants } from '../input.utils';\n\nexport const InputTextArea: Component<InputTextAreaProps> = (p => {\n p = mergeProps({ ...DEFAULT_PROPS, size: 'md' as const, id: createUniqueId() }, p);\n let textareaRef: HTMLTextAreaElement | undefined;\n\n const handleClear = (e: MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (textareaRef) {\n textareaRef.value = '';\n }\n p.onInput?.('', undefined as any);\n p.onChange?.('', undefined as any);\n textareaRef?.focus();\n };\n\n return (\n <div\n class={cn(\n 'ta01',\n textareaVariants({ color: p.color, variant: p.variant, size: p.size }),\n p.class?.root,\n p.disabled && 'border-c5 pointer-events-none',\n )}\n >\n <textarea\n id={p.id}\n placeholder={p.placeholder}\n ref={textareaRef}\n value={p.value ?? ''}\n class={cn('text-c2 grow resize-y', p.class?.input)}\n onBlur={e => p.onBlur?.(e.currentTarget.value, e)}\n onChange={e => p.onChange?.(e.currentTarget.value, e)}\n onInput={e => p.onInput?.(e.currentTarget.value, e)}\n disabled={p.disabled}\n />\n {p.allowClear && (\n <div class=\"ta02\" onMouseDown={handleClear}>\n <X class=\"m-auto size-2\" />\n </div>\n )}\n </div>\n );\n}) as Component<InputTextAreaProps>;\n"],"mappings":"wgBAMaQ,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"}
@@ -1,2 +0,0 @@
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
@@ -1 +0,0 @@
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';\nimport { BaseColorProps } from '@/type';\nimport { cva, VariantProps } from 'class-variance-authority';\nimport { Component, createUniqueId, mergeProps, Switch, Match } from 'solid-js';\nimport Loader from 'lucide-solid/icons/loader';\n\n// Variants dùng DaisyUI classes (spinner, spinner-2, dots, ring, ball, bars, infinity)\nconst daisy_variants = cva('loading', {\n variants: {\n variant: {\n spinner: 'loading-spinner',\n 'spinner-2': 'loading-spinner-2',\n dots: 'loading-dots',\n ring: 'loading-ring',\n ball: 'loading-ball',\n bars: 'loading-bars',\n infinity: 'loading-infinity',\n },\n size: {\n xs: 'loading-xs',\n sm: 'loading-sm',\n md: 'loading-md',\n lg: 'loading-lg',\n xl: 'loading-xl',\n },\n },\n});\n\n// Map size → CSS class cho SVG-based spinners\nconst svg_size_map = {\n xs: 'loading-svg-xs',\n sm: 'loading-svg-sm',\n md: 'loading-svg-md',\n lg: 'loading-svg-lg',\n xl: 'loading-svg-xl',\n} as const;\n\n// Map BaseColorProps → CSS variable của DaisyUI/Tailwind\nconst base_color_vars: Record<BaseColorProps, string> = {\n primary: 'var(--color-primary)',\n secondary: 'var(--color-secondary)',\n accent: 'var(--color-accent)',\n neutral: 'var(--color-neutral)',\n info: 'var(--color-info)',\n success: 'var(--color-success)',\n warning: 'var(--color-warning)',\n error: 'var(--color-error)',\n};\n\n/** Resolve color prop: nếu là BaseColorProps key thì map sang CSS var, còn lại dùng trực tiếp */\nfunction resolveColor(color: string | undefined): string | undefined {\n if (!color) return undefined;\n return color in base_color_vars ? base_color_vars[color as BaseColorProps] : color;\n}\n\ntype DaisyVariant = 'spinner' | 'spinner-2' | 'dots' | 'ring' | 'ball' | 'bars' | 'infinity';\ntype SvgVariant = 'spinner-3' | 'spinner-4' | 'spinner-5' | 'spinner-6';\ntype SizeKey = keyof typeof svg_size_map;\n\ntype LoadingProps = {\n variant?: DaisyVariant | SvgVariant;\n size?: SizeKey;\n /** Nhận BaseColorProps ('primary', 'error', ...) hoặc bất kỳ giá trị CSS color nào */\n color?: BaseColorProps | string;\n class?: string;\n};\n\nexport type LoadingVariantsProps = VariantProps<typeof daisy_variants>;\n\nexport const Loading: Component<LoadingProps> = props => {\n const p = mergeProps({ variant: 'spinner' as const, size: 'sm' as const }, props);\n\n const isDaisy = () =>\n !['spinner-3', 'spinner-4', 'spinner-5', 'spinner-6'].includes(p.variant as string);\n\n const resolvedColor = () => resolveColor(p.color);\n const svgClass = () => cn(svg_size_map[p.size as SizeKey], p.class);\n\n return (\n <Switch>\n <Match when={isDaisy()}>\n <div\n class={cn(\n daisy_variants({\n variant: p.variant as DaisyVariant,\n size: p.size,\n }),\n p.class,\n )}\n style={resolvedColor() ? { color: resolvedColor() } : undefined}\n />\n </Match>\n <Match when={p.variant === 'spinner-3'}>\n <LoadingSpinner3 class={svgClass()} color={resolvedColor()} />\n </Match>\n <Match when={p.variant === 'spinner-4'}>\n <LoadingSpinner4 class={svgClass()} color={resolvedColor()} />\n </Match>\n <Match when={p.variant === 'spinner-5'}>\n <LoadingSpinner5 class={svgClass()} color={resolvedColor()} />\n </Match>\n <Match when={p.variant === 'spinner-6'}>\n <LoadingSpinner6 class={svgClass()} color={resolvedColor()} />\n </Match>\n </Switch>\n );\n};\nexport const Spinner: Component<{ class?: string; color?: string }> = p => {\n const id = createUniqueId();\n\n p = mergeProps({ color: '#6E56CF' } as const, p);\n\n return (\n <div class={cn('size-3 animate-spin', p.class)}>\n <svg\n width=\"inherit\"\n height=\"inherit\"\n viewBox=\"0 0 20 20\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <ellipse\n cx=\"9.99995\"\n cy=\"9.99995\"\n rx=\"7.31001\"\n ry=\"7.31001\"\n stroke={p.color}\n stroke-opacity=\"0.25\"\n stroke-width=\"4\"\n />\n <path\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\"\n stroke={`url(#${id})`}\n stroke-width=\"4\"\n stroke-linecap=\"round\"\n stroke-dasharray=\"1.23 1.23\"\n />\n <defs>\n <linearGradient\n id={id}\n x1=\"16.3108\"\n y1=\"13.6892\"\n x2=\"3.68922\"\n y2=\"6.31075\"\n gradientUnits=\"userSpaceOnUse\"\n >\n <stop stop-color={p.color} />\n <stop offset=\"0.5\" stop-color={p.color} stop-opacity=\"0.01\" />\n <stop offset=\"1\" stop-color={p.color} stop-opacity=\"0\" />\n </linearGradient>\n </defs>\n </svg>\n </div>\n );\n};\nconst LoadingSpinner3: Component<{ class?: string; color?: string }> = p => {\n p = mergeProps({ color: 'currentColor' } as const, p);\n return (\n <div class={cn('size-7 p-0', p.class)} style={{ color: p.color }}>\n <svg fill=\"currentColor\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\">\n <g>\n <circle cx=\"12\" cy=\"3\" r=\"1\">\n <animate\n id=\"_dcbb18\"\n begin=\"0;_84a13e.end-0.5s\"\n attributeName=\"r\"\n calcMode=\"spline\"\n dur=\"0.6s\"\n values=\"1;2;1\"\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\n />\n </circle>\n <circle cx=\"16.50\" cy=\"4.21\" r=\"1\">\n <animate\n id=\"_92c238\"\n begin=\"_dcbb18.begin+0.1s\"\n attributeName=\"r\"\n calcMode=\"spline\"\n dur=\"0.6s\"\n values=\"1;2;1\"\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\n />\n </circle>\n <circle cx=\"7.50\" cy=\"4.21\" r=\"1\">\n <animate\n id=\"_84a13e\"\n begin=\"_5abc3e.begin+0.1s\"\n attributeName=\"r\"\n calcMode=\"spline\"\n dur=\"0.6s\"\n values=\"1;2;1\"\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\n />\n </circle>\n <circle cx=\"19.79\" cy=\"7.50\" r=\"1\">\n <animate\n id=\"_9d19c8\"\n begin=\"_92c238.begin+0.1s\"\n attributeName=\"r\"\n calcMode=\"spline\"\n dur=\"0.6s\"\n values=\"1;2;1\"\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\n />\n </circle>\n <circle cx=\"4.21\" cy=\"7.50\" r=\"1\">\n <animate\n id=\"_5abc3e\"\n begin=\"_dcfbb2.begin+0.1s\"\n attributeName=\"r\"\n calcMode=\"spline\"\n dur=\"0.6s\"\n values=\"1;2;1\"\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\n />\n </circle>\n <circle cx=\"21.00\" cy=\"12.00\" r=\"1\">\n <animate\n id=\"_cf88a3\"\n begin=\"_9d19c8.begin+0.1s\"\n attributeName=\"r\"\n calcMode=\"spline\"\n dur=\"0.6s\"\n values=\"1;2;1\"\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\n />\n </circle>\n <circle cx=\"3.00\" cy=\"12.00\" r=\"1\">\n <animate\n id=\"_dcfbb2\"\n begin=\"_514e98.begin+0.1s\"\n attributeName=\"r\"\n calcMode=\"spline\"\n dur=\"0.6s\"\n values=\"1;2;1\"\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\n />\n </circle>\n <circle cx=\"19.79\" cy=\"16.50\" r=\"1\">\n <animate\n id=\"_2fecf8\"\n begin=\"_cf88a3.begin+0.1s\"\n attributeName=\"r\"\n calcMode=\"spline\"\n dur=\"0.6s\"\n values=\"1;2;1\"\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\n />\n </circle>\n <circle cx=\"4.21\" cy=\"16.50\" r=\"1\">\n <animate\n id=\"_514e98\"\n begin=\"_c4d048.begin+0.1s\"\n attributeName=\"r\"\n calcMode=\"spline\"\n dur=\"0.6s\"\n values=\"1;2;1\"\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\n />\n </circle>\n <circle cx=\"16.50\" cy=\"19.79\" r=\"1\">\n <animate\n id=\"_033759\"\n begin=\"_2fecf8.begin+0.1s\"\n attributeName=\"r\"\n calcMode=\"spline\"\n dur=\"0.6s\"\n values=\"1;2;1\"\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\n />\n </circle>\n <circle cx=\"7.50\" cy=\"19.79\" r=\"1\">\n <animate\n id=\"_c4d048\"\n begin=\"_3ec8bd.begin+0.1s\"\n attributeName=\"r\"\n calcMode=\"spline\"\n dur=\"0.6s\"\n values=\"1;2;1\"\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\n />\n </circle>\n <circle cx=\"12\" cy=\"21\" r=\"1\">\n <animate\n id=\"_3ec8bd\"\n begin=\"_033759.begin+0.1s\"\n attributeName=\"r\"\n calcMode=\"spline\"\n dur=\"0.6s\"\n values=\"1;2;1\"\n keySplines=\".27,.42,.37,.99;.53,0,.61,.73\"\n />\n </circle>\n <animateTransform\n attributeName=\"transform\"\n type=\"rotate\"\n dur=\"6s\"\n values=\"360 12 12;0 12 12\"\n repeatCount=\"indefinite\"\n />\n </g>\n </svg>\n </div>\n );\n};\nconst LoadingSpinner4: Component<{ class?: string; color?: string }> = p => {\n return <Loader class={cn('animate-spin', p.class)} color={p.color} />;\n};\nconst LoadingSpinner5: Component<{ class?: string; color?: string }> = p => {\n p = mergeProps({ class: 'size-6' } as const, p);\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n xmlns:xlink=\"http://www.w3.org/1999/xlink\"\n x=\"0px\"\n y=\"0px\"\n viewBox=\"0 0 2400 2400\"\n class={p.class}\n style={{ color: p.color }}\n >\n <g stroke-width=\"200\" stroke-linecap=\"round\" stroke=\"currentColor\" fill=\"none\" id=\"spinner\">\n <line x1=\"1200\" y1=\"600\" x2=\"1200\" y2=\"100\" />\n <line opacity=\"0.5\" x1=\"1200\" y1=\"2300\" x2=\"1200\" y2=\"1800\" />\n <line opacity=\"0.917\" x1=\"900\" y1=\"680.4\" x2=\"650\" y2=\"247.4\" />\n <line opacity=\"0.417\" x1=\"1750\" y1=\"2152.6\" x2=\"1500\" y2=\"1719.6\" />\n <line opacity=\"0.833\" x1=\"680.4\" y1=\"900\" x2=\"247.4\" y2=\"650\" />\n <line opacity=\"0.333\" x1=\"2152.6\" y1=\"1750\" x2=\"1719.6\" y2=\"1500\" />\n <line opacity=\"0.75\" x1=\"600\" y1=\"1200\" x2=\"100\" y2=\"1200\" />\n <line opacity=\"0.25\" x1=\"2300\" y1=\"1200\" x2=\"1800\" y2=\"1200\" />\n <line opacity=\"0.667\" x1=\"680.4\" y1=\"1500\" x2=\"247.4\" y2=\"1750\" />\n <line opacity=\"0.167\" x1=\"2152.6\" y1=\"650\" x2=\"1719.6\" y2=\"900\" />\n <line opacity=\"0.583\" x1=\"900\" y1=\"1719.6\" x2=\"650\" y2=\"2152.6\" />\n <line opacity=\"0.083\" x1=\"1750\" y1=\"247.4\" x2=\"1500\" y2=\"680.4\" />\n <animateTransform\n attributeName=\"transform\"\n attributeType=\"XML\"\n type=\"rotate\"\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\"\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\"\n dur=\"0.83333s\"\n begin=\"0s\"\n repeatCount=\"indefinite\"\n calcMode=\"discrete\"\n />\n </g>\n </svg>\n );\n};\nconst LoadingSpinner6: Component<{ class?: string; color?: string }> = p => {\n p = mergeProps({ class: 'size-6' } as const, p);\n const id = createUniqueId();\n return (\n <svg\n fill=\"none\"\n viewBox=\"0 0 20 20\"\n xmlns=\"http://www.w3.org/2000/svg\"\n class={p.class}\n style={{ color: p.color }}\n >\n <defs>\n <linearGradient id={id}>\n <stop offset=\"0%\" stop-color=\"currentColor\" stop-opacity=\"1\" />\n <stop offset=\"100%\" stop-color=\"currentColor\" stop-opacity=\"0.25\" />\n </linearGradient>\n </defs>\n <circle\n cx=\"10\"\n cy=\"10\"\n r=\"8\"\n stroke-width=\"2\"\n class=\"animate-spin\"\n stroke={`url(#${id})`}\n fill=\"none\"\n style={{ 'transform-origin': '50% 50%' }}\n />\n </svg>\n );\n};\n"],"mappings":"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"}
@@ -1 +0,0 @@
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 {\n Accessor,\n Component,\n createEffect,\n createMemo,\n createRoot,\n createSignal,\n For,\n mergeProps,\n on,\n onCleanup,\n onMount,\n Show,\n untrack,\n} from 'solid-js';\nimport { cn } from '@utils/cn';\nimport { createThrottle } from '@utils/helper';\nimport type {\n MansoryBreakpoint,\n MansoryItemLayout,\n MansoryProps,\n MansoryResponsive,\n MansoryVirtualOptions,\n} from './mansory.types';\n\nconst BREAKPOINTS: Record<Exclude<MansoryBreakpoint, 'default'>, number> = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n '2xl': 1536,\n};\n\nconst BP_KEYS = ['sm', 'md', 'lg', 'xl', '2xl'] as const;\n\nconst DEFAULT_COLUMNS: MansoryResponsive<number> = {\n default: 1,\n sm: 2,\n md: 3,\n lg: 4,\n};\n\nconst DEFAULT_GAP = 'gap-4';\n\nconst GAP_CACHE_MAX = 50;\nconst gapCache = new Map<string, number>();\n\nfunction resolveResponsive<T>(config: T | MansoryResponsive<T>, containerWidth: number): T {\n if (typeof config !== 'object' || config === null || Array.isArray(config)) {\n return config as T;\n }\n\n const map = config as MansoryResponsive<T>;\n\n for (let i = BP_KEYS.length - 1; i >= 0; i--) {\n const key = BP_KEYS[i];\n if (containerWidth >= BREAKPOINTS[key] && map[key] !== undefined) {\n return map[key] as T;\n }\n }\n\n return (map.default ?? (typeof config === 'object' ? undefined : config)) as T;\n}\n\nfunction measureGapPx(gapClass: string, container: HTMLElement): number {\n const probe = document.createElement('div');\n probe.className = `ma06 ${gapClass}`;\n probe.style.display = 'grid';\n probe.style.gridTemplateColumns = '1fr 1fr';\n\n probe.appendChild(document.createElement('div'));\n probe.appendChild(document.createElement('div'));\n container.appendChild(probe);\n const computed = getComputedStyle(probe);\n const gap = parseFloat(computed.columnGap || computed.gap || '0');\n container.removeChild(probe);\n return gap;\n}\n\nfunction measureGapPxCached(gapClass: string, container: HTMLElement): number {\n if (gapCache.has(gapClass)) return gapCache.get(gapClass)!;\n const value = measureGapPx(gapClass, container);\n\n if (gapCache.size >= GAP_CACHE_MAX) {\n const firstKey = gapCache.keys().next().value;\n if (firstKey !== undefined) gapCache.delete(firstKey);\n }\n gapCache.set(gapClass, value);\n return value;\n}\n\nfunction computeLayout(\n itemHeights: number[],\n columns: number,\n containerWidth: number,\n gapPx: number,\n): { layouts: MansoryItemLayout[]; totalHeight: number; sortedByTop: MansoryItemLayout[] } {\n const cols = Math.max(1, columns);\n const totalGap = gapPx * (cols - 1);\n const colWidth = (containerWidth - totalGap) / cols;\n\n const colHeights = new Array<number>(cols).fill(0);\n const layouts: MansoryItemLayout[] = [];\n\n const sortedByTop: MansoryItemLayout[] = [];\n\n for (let i = 0; i < itemHeights.length; i++) {\n let minCol = 0;\n for (let c = 1; c < cols; c++) {\n if (colHeights[c] < colHeights[minCol]) minCol = c;\n }\n\n const left = minCol * (colWidth + gapPx);\n const top = colHeights[minCol];\n const height = itemHeights[i] ?? 0;\n\n const item: MansoryItemLayout = { index: i, top, left, width: colWidth, height };\n layouts.push(item);\n\n let j = sortedByTop.length - 1;\n while (j >= 0 && sortedByTop[j].top > top) j--;\n sortedByTop.splice(j + 1, 0, item);\n\n colHeights[minCol] = top + height + gapPx;\n }\n\n let maxH = 0;\n for (let i = 0; i < colHeights.length; i++) {\n if (colHeights[i] > maxH) maxH = colHeights[i];\n }\n\n return { layouts, totalHeight: maxH > 0 ? maxH - gapPx : 0, sortedByTop };\n}\n\nfunction findFirstVisible(sorted: MansoryItemLayout[], visTop: number): number {\n let lo = 0,\n hi = sorted.length;\n while (lo < hi) {\n const mid = (lo + hi) >> 1;\n if (sorted[mid].top + sorted[mid].height < visTop) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n}\n\ninterface MansoryItemProps {\n index: number;\n getLayoutAccessor: (index: number) => Accessor<MansoryItemLayout | undefined>;\n items: unknown[];\n itemClass?: string;\n children: MansoryProps['children'];\n onRegister: (index: number, el: HTMLDivElement) => void;\n onUnregister: (index: number) => void;\n}\n\nconst MansoryItem: Component<MansoryItemProps> = props => {\n const itemLayout = props.getLayoutAccessor(props.index);\n\n const styles = createMemo(() => {\n const l = itemLayout();\n if (!l) return { wrapper: {} as Record<string, string>, child: {} as Record<string, string> };\n const widthPx = `${l.width}px`;\n return {\n wrapper: { width: widthPx, transform: `translate3d(${l.left}px, ${l.top}px, 0)` },\n child: { width: widthPx },\n };\n });\n\n return (\n <div\n ref={el => {\n props.onRegister(props.index, el);\n onCleanup(function unregisterItem() {\n props.onUnregister(props.index);\n });\n }}\n data-mansory-idx={props.index}\n class={cn('ma03 ma04', props.itemClass)}\n style={styles().wrapper}\n >\n {props.children(props.items[props.index], () => props.index, styles().child)}\n </div>\n );\n};\n\nexport const Mansory: Component<MansoryProps> = rawProps => {\n const props = mergeProps(\n {\n columns: DEFAULT_COLUMNS,\n gap: DEFAULT_GAP,\n virtual: false as boolean | MansoryVirtualOptions,\n estimateItemHeight: 200,\n loadMoreThreshold: 200,\n },\n rawProps,\n );\n\n let containerEl!: HTMLDivElement;\n let innerEl!: HTMLDivElement;\n\n const [containerWidth, setContainerWidth] = createSignal(0);\n const [itemHeights, setItemHeights] = createSignal<number[]>([]);\n\n const currentColumns = createMemo(() => {\n const resolved = resolveResponsive<number>(props.columns as number, containerWidth());\n return Math.max(1, resolved ?? 1);\n });\n\n const currentGapClass = createMemo(() => {\n const resolved = resolveResponsive<string>(props.gap as string, containerWidth());\n return resolved ?? 'gap-4';\n });\n\n const [gapPx, setGapPx] = createSignal(16);\n\n createEffect(function trackGapClass() {\n const _ = currentGapClass();\n if (containerEl) {\n setGapPx(measureGapPxCached(currentGapClass(), containerEl));\n }\n });\n\n const layout = createMemo(() =>\n computeLayout(itemHeights(), currentColumns(), containerWidth(), gapPx()),\n );\n\n const totalHeight = createMemo(() => layout().totalHeight);\n\n const layoutAccessors = new Map<number, Accessor<MansoryItemLayout | undefined>>();\n const layoutSetters = new Map<number, (v: MansoryItemLayout | undefined) => void>();\n const layoutDisposers = new Map<number, () => void>();\n\n function getOrCreateLayoutAccessor(index: number): Accessor<MansoryItemLayout | undefined> {\n if (!layoutAccessors.has(index)) {\n\n createRoot(function layoutSignalRoot(dispose) {\n layoutDisposers.set(index, dispose);\n const initialValue = untrack(() => layout().layouts[index]);\n const [get, set] = createSignal<MansoryItemLayout | undefined>(initialValue, {\n equals: (a, b) => {\n if (a === b) return true;\n if (!a || !b) return false;\n return (\n a.top === b.top && a.left === b.left && a.width === b.width && a.height === b.height\n );\n },\n });\n layoutAccessors.set(index, get);\n layoutSetters.set(index, set);\n });\n }\n return layoutAccessors.get(index)!;\n }\n\n function disposeLayoutSignal(index: number) {\n layoutDisposers.get(index)?.();\n layoutDisposers.delete(index);\n layoutAccessors.delete(index);\n layoutSetters.delete(index);\n }\n\n onCleanup(function disposeAllLayoutSignals() {\n for (const dispose of layoutDisposers.values()) dispose();\n layoutDisposers.clear();\n layoutAccessors.clear();\n layoutSetters.clear();\n keyEntryCache.clear();\n });\n\n createEffect(function syncLayoutSetters() {\n const newLayouts = layout().layouts;\n\n for (const [index, setter] of layoutSetters) {\n setter(newLayouts[index]);\n }\n });\n\n const virtualOpts = createMemo<MansoryVirtualOptions | null>(() => {\n const v = props.virtual;\n if (!v) return null;\n if (v === true) return { overscan: 5 };\n return { overscan: v.overscan ?? 5 };\n });\n\n const isVirtual = createMemo(() => virtualOpts() !== null);\n\n const [scrollTop, setScrollTop] = createSignal(0);\n\n let rafId: number | null = null;\n let pendingScrollTop = 0;\n\n let loadMoreCooldown = false;\n let loadMoreTimer: ReturnType<typeof setTimeout> | null = null;\n\n const pendingItemChanges = new Map<number, number>();\n\n const flushItemHeights = createThrottle(function applyItemHeightChanges() {\n if (pendingItemChanges.size === 0) return;\n const snapshot = new Map(pendingItemChanges);\n pendingItemChanges.clear();\n\n setItemHeights(prev => {\n let hasChange = false;\n for (const [idx, h] of snapshot) {\n if (prev[idx] !== h) {\n hasChange = true;\n break;\n }\n }\n if (!hasChange) return prev;\n\n const next = [...prev];\n for (const [idx, h] of snapshot) next[idx] = h;\n return next;\n });\n }, 100);\n\n onCleanup(function cancelFlushItemHeights() {\n flushItemHeights.cancel();\n });\n\n const itemRO = new ResizeObserver(entries => {\n for (const entry of entries) {\n const el = entry.target as HTMLDivElement;\n const idx = parseInt(el.dataset.mansoryIdx ?? '-1', 10);\n if (idx < 0) continue;\n\n const h = entry.contentBoxSize?.[0]?.blockSize ?? entry.contentRect.height;\n pendingItemChanges.set(idx, h);\n }\n\n flushItemHeights();\n });\n\n onCleanup(function disconnectItemResizeObserver() {\n itemRO.disconnect();\n });\n\n onMount(() => {\n const applyContainerWidth = createThrottle(function applyContainerWidthChange(width: number) {\n setContainerWidth(width);\n }, 100);\n\n const containerRO = new ResizeObserver(entries => {\n for (const entry of entries) {\n const width = entry.contentBoxSize?.[0]?.inlineSize ?? entry.contentRect.width;\n applyContainerWidth(width);\n }\n });\n containerRO.observe(containerEl);\n onCleanup(function disconnectContainerResizeObserver() {\n applyContainerWidth.cancel();\n containerRO.disconnect();\n });\n });\n\n const itemElMap = new Map<number, HTMLDivElement>();\n\n function registerItem(index: number, el: HTMLDivElement) {\n itemElMap.set(index, el);\n itemRO.observe(el);\n }\n\n function unregisterItem(index: number) {\n const el = itemElMap.get(index);\n if (el) {\n itemRO.unobserve(el);\n itemElMap.delete(index);\n }\n }\n\n createEffect(\n on(\n () => props.items.length,\n len => {\n setItemHeights(prev => {\n const prevLen = prev.length;\n if (prevLen === len) return prev;\n\n if (len > prevLen) {\n const next = [...prev];\n for (let i = prevLen; i < len; i++) next.push(props.estimateItemHeight);\n return next;\n }\n\n for (let i = len; i < prevLen; i++) {\n disposeLayoutSignal(i);\n }\n return prev.slice(0, len);\n });\n },\n ),\n );\n\n function checkLoadMore(currentScrollTop: number) {\n if (!props.onLoadMore || loadMoreCooldown) return;\n const { scrollHeight, clientHeight } = containerEl;\n if (currentScrollTop + clientHeight >= scrollHeight - props.loadMoreThreshold) {\n loadMoreCooldown = true;\n\n if (loadMoreTimer) clearTimeout(loadMoreTimer);\n loadMoreTimer = setTimeout(() => {\n loadMoreCooldown = false;\n loadMoreTimer = null;\n }, 10_000);\n props.onLoadMore();\n }\n }\n\n createEffect(\n on(\n () => props.items.length,\n () => {\n if (loadMoreTimer) {\n clearTimeout(loadMoreTimer);\n loadMoreTimer = null;\n }\n loadMoreCooldown = false;\n },\n ),\n );\n\n onCleanup(function clearLoadMoreTimer() {\n if (loadMoreTimer) clearTimeout(loadMoreTimer);\n });\n\n onCleanup(function cancelPendingRaf() {\n if (rafId !== null) cancelAnimationFrame(rafId);\n });\n\n function handleScroll() {\n pendingScrollTop = containerEl.scrollTop;\n\n if (rafId === null) {\n rafId = requestAnimationFrame(() => {\n rafId = null;\n setScrollTop(pendingScrollTop);\n checkLoadMore(pendingScrollTop);\n });\n }\n }\n\n const allIndices = createMemo<number[]>((prev = []) => {\n const len = props.items.length;\n if (len === prev.length) return prev;\n if (len > prev.length) {\n const next = [...prev];\n for (let i = prev.length; i < len; i++) next.push(i);\n return next;\n }\n return prev.slice(0, len);\n });\n\n const renderedIndices = createMemo(() => {\n if (!isVirtual()) {\n return allIndices();\n }\n\n if (containerWidth() === 0) return [];\n\n const currentScrollTop = scrollTop();\n const viewportHeight = containerEl.clientHeight;\n const overscan = virtualOpts()?.overscan ?? 5;\n const overscanPx = overscan * props.estimateItemHeight;\n const visTop = currentScrollTop - overscanPx;\n const visBottom = currentScrollTop + viewportHeight + overscanPx;\n\n const sorted = layout().sortedByTop;\n const start = findFirstVisible(sorted, visTop);\n const indices: number[] = [];\n for (let i = start; i < sorted.length; i++) {\n if (sorted[i].top > visBottom) break;\n indices.push(sorted[i].index);\n }\n return indices;\n });\n\n const keyEntryCache = new Map<string | number, { key: string | number; index: number }>();\n\n const renderedKeys = createMemo(() => {\n const indices = renderedIndices();\n if (!props.getItemKey) return indices;\n\n const activeKeys = new Set<string | number>();\n\n const entries = indices.map(i => {\n const key = props.getItemKey!(props.items[i], i);\n activeKeys.add(key);\n\n let entry = keyEntryCache.get(key);\n if (!entry) {\n entry = { key, index: i };\n keyEntryCache.set(key, entry);\n } else {\n\n entry.index = i;\n }\n return entry;\n });\n\n for (const k of keyEntryCache.keys()) {\n if (!activeKeys.has(k)) keyEntryCache.delete(k);\n }\n\n return entries;\n });\n\n return (\n <div\n ref={containerEl}\n class={cn('ma01', isVirtual() && 'ma05', props.class)}\n onScroll={isVirtual() || props.onLoadMore ? handleScroll : undefined}\n >\n <div ref={innerEl} class=\"ma02\" style={{ height: `${totalHeight()}px` }}>\n <For each={renderedKeys()}>\n {entry => {\n const index = typeof entry === 'number' ? entry : entry.index;\n return (\n <MansoryItem\n index={index}\n getLayoutAccessor={getOrCreateLayoutAccessor}\n items={props.items}\n itemClass={props.itemClass}\n onRegister={registerItem}\n onUnregister={unregisterItem}\n >\n {props.children}\n </MansoryItem>\n );\n }}\n </For>\n </div>\n\n <Show when={props.items.length === 0}>\n <div class=\"ma08\">No items</div>\n </Show>\n </div>\n );\n};"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{cn as e}from"../../utils/cn.js";import{Button as t}from"../button/button.js";import{getColor as n}from"../../utils/helper.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}),n(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(t,{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