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":"select-zone.js","names":["Component","createContext","createEffect","createSignal","mergeProps","onCleanup","useContext","Portal","cn","SelectZoneItemProps","SelectZoneProps","SelectZoneContextValue","registerItem","key","el","HTMLElement","unregisterItem","isSelected","SelectZoneContext","DEFAULT_PROPS","additive","scrollThreshold","scrollSpeed","disabled","SelectZone","props","p","itemMap","Map","selectedKeys","setSelectedKeys","Set","overlayRect","setOverlayRect","x","y","w","h","rootEl","HTMLDivElement","intersects","selLeft","selTop","selRight","selBottom","r","getBoundingClientRect","docLeft","left","window","scrollX","docTop","top","scrollY","docRight","right","docBottom","bottom","computeSelection","startPageX","startPageY","currPageX","currPageY","Math","min","max","hit","forEach","checkItem","add","isDragging","isAdditive","prevKeys","rafId","lastClientX","lastClientY","scrollLoop","threshold","speed","vw","innerWidth","vh","innerHeight","cx","cy","dx","dy","scrollBy","updateOverlay","requestAnimationFrame","currClientX","currClientY","abs","next","k","has","delete","onMouseDown","e","MouseEvent","button","target","closest","clientX","clientY","shiftKey","ctrlKey","metaKey","document","addEventListener","onMouseMove","onMouseUp","removeEventListener","cancelAnimationFrame","onSelect","item","contextValue","set","syncControlledValue","v","value","undefined","mountListeners","unmountListeners","_$createComponent","Provider","children","_el$","_tmpl$","_ref$","_$use","_$insert","_c$","_$memo","mount","body","_el$2","_$effect","_p$","_v$","class","overlay","_v$2","_v$3","_v$4","_v$5","_$className","t","_$setStyleProperty","a","o","i","root","SelectZoneItem","ctx","Error","registerOnMount","itemKey","unregisterOnUnmount","_el$3","_ref$2","_v$6","_v$7","_$setAttribute"],"sources":["../../../src/components/select-zone/select-zone.tsx"],"sourcesContent":["import {\n Component,\n createContext,\n createEffect,\n createSignal,\n mergeProps,\n onCleanup,\n useContext,\n} from 'solid-js';\nimport { Portal } from 'solid-js/web';\nimport { cn } from '@utils/cn';\nimport { SelectZoneItemProps, SelectZoneProps } from './select-zone.types';\n\n// ─── Context ──────────────────────────────────────────────────────────────────\n\ninterface SelectZoneContextValue {\n registerItem: (key: string, el: HTMLElement) => void;\n unregisterItem: (key: string) => void;\n isSelected: (key: string) => boolean;\n}\n\nconst SelectZoneContext = createContext<SelectZoneContextValue>();\n\n// ─── SelectZone ───────────────────────────────────────────────────────────────\n\nconst DEFAULT_PROPS = {\n additive: true,\n scrollThreshold: 40,\n scrollSpeed: 12,\n disabled: false,\n};\n\nexport const SelectZone: Component<SelectZoneProps> = props => {\n const p = mergeProps(DEFAULT_PROPS, props);\n\n // Map từ itemKey → DOM element (đăng ký bởi SelectZoneItem)\n const itemMap = new Map<string, HTMLElement>();\n\n // Tập hợp các key đang được chọn\n const [selectedKeys, setSelectedKeys] = createSignal<Set<string>>(new Set());\n\n // Overlay rect: null = ẩn, có giá trị = đang kéo\n const [overlayRect, setOverlayRect] = createSignal<{\n x: number;\n y: number;\n w: number;\n h: number;\n } | null>(null);\n\n let rootEl!: HTMLDivElement;\n\n // ── Helpers ─────────────────────────────────────────────────────────────────\n\n /**\n * Tính giao nhau AABB.\n * selLeft/Top/Right/Bottom: document coordinates (pageX/Y).\n * el.getBoundingClientRect(): viewport coordinates → convert sang document.\n */\n function intersects(\n selLeft: number,\n selTop: number,\n selRight: number,\n selBottom: number,\n el: HTMLElement,\n ): boolean {\n const r = el.getBoundingClientRect();\n const docLeft = r.left + window.scrollX;\n const docTop = r.top + window.scrollY;\n const docRight = r.right + window.scrollX;\n const docBottom = r.bottom + window.scrollY;\n return docRight > selLeft && docLeft < selRight && docBottom > selTop && docTop < selBottom;\n }\n\n /**\n * Tính selection.\n * startPageX/Y, currPageX/Y: document coordinates.\n */\n function computeSelection(\n startPageX: number,\n startPageY: number,\n currPageX: number,\n currPageY: number,\n ): Set<string> {\n const selLeft = Math.min(startPageX, currPageX);\n const selTop = Math.min(startPageY, currPageY);\n const selRight = Math.max(startPageX, currPageX);\n const selBottom = Math.max(startPageY, currPageY);\n\n const hit = new Set<string>();\n itemMap.forEach(function checkItem(el, key) {\n if (intersects(selLeft, selTop, selRight, selBottom, el)) {\n hit.add(key);\n }\n });\n return hit;\n }\n\n // ── Drag state ───────────────────────────────────────────────────────────────\n\n // startPageX/Y: document coordinates — cố định suốt drag, không bị ảnh hưởng bởi scroll\n let startPageX = 0;\n let startPageY = 0;\n let isDragging = false;\n let isAdditive = false;\n let prevKeys: Set<string> = new Set();\n let rafId = 0;\n let lastClientX = 0;\n let lastClientY = 0;\n\n // ── Auto-scroll loop ─────────────────────────────────────────────────────────\n\n function scrollLoop() {\n if (!isDragging) return;\n\n const threshold = p.scrollThreshold;\n const speed = p.scrollSpeed;\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n const cx = lastClientX;\n const cy = lastClientY;\n\n let dx = 0;\n let dy = 0;\n\n if (cx < threshold) dx = -speed * (1 - cx / threshold);\n else if (cx > vw - threshold) dx = speed * (1 - (vw - cx) / threshold);\n\n if (cy < threshold) dy = -speed * (1 - cy / threshold);\n else if (cy > vh - threshold) dy = speed * (1 - (vh - cy) / threshold);\n\n if (dx !== 0 || dy !== 0) {\n window.scrollBy(dx, dy);\n // startPageX/Y KHÔNG thay đổi — nó là điểm neo trong document space\n }\n\n // Cập nhật overlay sau mỗi frame (kể cả khi chỉ scroll mà chuột đứng yên)\n updateOverlay(cx, cy);\n\n rafId = requestAnimationFrame(scrollLoop);\n }\n\n // ── Overlay update ───────────────────────────────────────────────────────────\n\n function updateOverlay(currClientX: number, currClientY: number) {\n // Convert cursor về document coordinates\n const currPageX = currClientX + window.scrollX;\n const currPageY = currClientY + window.scrollY;\n\n // Overlay rect tính trong document space\n const docLeft = Math.min(startPageX, currPageX);\n const docTop = Math.min(startPageY, currPageY);\n const w = Math.abs(currPageX - startPageX);\n const h = Math.abs(currPageY - startPageY);\n\n // Convert sang viewport để render (position: fixed dùng viewport coords)\n setOverlayRect({\n x: docLeft - window.scrollX,\n y: docTop - window.scrollY,\n w,\n h,\n });\n\n // Selection dùng document coordinates\n const hit = computeSelection(startPageX, startPageY, currPageX, currPageY);\n\n let next: Set<string>;\n if (isAdditive) {\n // Toggle per-item: item trong prevKeys bị drag đè → deselect; item mới → select\n next = new Set(prevKeys);\n hit.forEach(k => {\n if (prevKeys.has(k)) next.delete(k);\n else next.add(k);\n });\n } else {\n next = hit;\n }\n setSelectedKeys(next);\n }\n\n // ── Event handlers ───────────────────────────────────────────────────────────\n\n function onMouseDown(e: MouseEvent) {\n if (p.disabled) return;\n // Chỉ xử lý click trái, không xử lý trên scrollbar, input, button, a\n if (e.button !== 0) return;\n const target = e.target as HTMLElement;\n if (target.closest('input, button, a, textarea, select, [data-no-select]')) return;\n\n isDragging = false;\n // Lưu điểm bắt đầu trong document space — bất biến suốt drag\n startPageX = e.clientX + window.scrollX;\n startPageY = e.clientY + window.scrollY;\n lastClientX = e.clientX;\n lastClientY = e.clientY;\n isAdditive = e.shiftKey || e.ctrlKey || e.metaKey;\n prevKeys = isAdditive ? new Set(selectedKeys()) : new Set();\n\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n }\n\n function onMouseMove(e: MouseEvent) {\n lastClientX = e.clientX;\n lastClientY = e.clientY;\n\n // So sánh trong document space để tránh nhiễu từ scroll\n const dx = (e.clientX + window.scrollX) - startPageX;\n const dy = (e.clientY + window.scrollY) - startPageY;\n\n if (!isDragging) {\n // Chỉ bắt đầu drag khi kéo ít nhất 4px để tránh nhầm với click\n if (Math.abs(dx) < 4 && Math.abs(dy) < 4) return;\n isDragging = true;\n rafId = requestAnimationFrame(scrollLoop);\n }\n\n updateOverlay(e.clientX, e.clientY);\n }\n\n function onMouseUp(e: MouseEvent) {\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n\n cancelAnimationFrame(rafId);\n isDragging = false;\n\n if (overlayRect() !== null) {\n setOverlayRect(null);\n // Thông báo selection cuối cùng\n p.onSelect?.(new Set(selectedKeys()));\n } else {\n // Không drag → click đơn → deselect tất cả (nếu không additive)\n if (!isAdditive) {\n const target = e.target as HTMLElement;\n const item = target.closest('[data-select-key]') as HTMLElement | null;\n if (!item) {\n setSelectedKeys(new Set<string>());\n p.onSelect?.(new Set<string>());\n }\n }\n }\n }\n\n // ── Context value ────────────────────────────────────────────────────────────\n\n const contextValue: SelectZoneContextValue = {\n registerItem(key, el) {\n itemMap.set(key, el);\n },\n unregisterItem(key) {\n itemMap.delete(key);\n },\n isSelected(key) {\n return selectedKeys().has(key);\n },\n };\n\n // ── Đồng bộ controlled value ─────────────────────────────────────────────────\n\n createEffect(function syncControlledValue() {\n const v = p.value;\n if (v !== undefined) setSelectedKeys(new Set(v));\n });\n\n // ── Cleanup khi unmount ──────────────────────────────────────────────────────\n\n createEffect(function mountListeners() {\n rootEl.addEventListener('mousedown', onMouseDown);\n onCleanup(function unmountListeners() {\n rootEl.removeEventListener('mousedown', onMouseDown);\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n cancelAnimationFrame(rafId);\n });\n });\n\n // ── Render ───────────────────────────────────────────────────────────────────\n\n return (\n <SelectZoneContext.Provider value={contextValue}>\n <div ref={rootEl} class={cn('sz01', p.class?.root)}>\n {p.children}\n\n {/* Selection overlay — render qua Portal để tránh ảnh hưởng layout */}\n {overlayRect() && (\n <Portal mount={document.body}>\n <div\n class={cn('sz02', p.class?.overlay)}\n style={{\n left: `${overlayRect()!.x}px`,\n top: `${overlayRect()!.y}px`,\n width: `${overlayRect()!.w}px`,\n height: `${overlayRect()!.h}px`,\n }}\n />\n </Portal>\n )}\n </div>\n </SelectZoneContext.Provider>\n );\n};\n\n// ─── SelectZoneItem ───────────────────────────────────────────────────────────\n\nexport const SelectZoneItem: Component<SelectZoneItemProps> = props => {\n const ctx = useContext(SelectZoneContext);\n if (!ctx) throw new Error('SelectZoneItem must be used inside <SelectZone>');\n\n let el!: HTMLDivElement;\n\n createEffect(function registerOnMount() {\n ctx.registerItem(props.itemKey, el);\n onCleanup(function unregisterOnUnmount() {\n ctx.unregisterItem(props.itemKey);\n });\n });\n\n const isSelected = () => ctx.isSelected(props.itemKey);\n\n return (\n <div ref={el} data-select-key={props.itemKey} class={cn('sz03', props.class)}>\n {props.children(isSelected)}\n </div>\n );\n};\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"skeleton.js","names":["cn","Component","mergeProps","ParentComponent","Show","Switch","LayoutVariant","ShapeVariant","LayoutSkeletonProps","type","variant","enabled","ShapeSkeletonProps","CustomSkeletonProps","class","SkeletonProps","Skeleton","rawProps","p","const","_$createComponent","when","fallback","children","_$memo","_el$","_tmpl$","_$effect","_$className","SkeletonDisplay","SkeletonDisplayProps","ShapeSkeleton","LayoutSkeleton","_tmpl$2","_tmpl$3","_tmpl$4","_tmpl$5","_tmpl$6","_tmpl$7","_tmpl$8","_tmpl$9","_tmpl$0","_tmpl$1","_tmpl$10","_tmpl$11"],"sources":["../../../src/components/skeleton/skeleton.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\nimport { Component, mergeProps, ParentComponent, Show, Switch } from 'solid-js';\n// No custom CSS needed — uses DaisyUI's built-in .skeleton class\n\n// ─── Type definitions ─────────────────────────────────────────────────────────\n\n/** Layout skeleton: giao diện phức tạp gồm nhiều element */\ntype LayoutVariant =\n | 'cardImage' // Card với ảnh trên + text dưới\n | 'cardHorizontal' // Card nằm ngang: ảnh trái, nội dung phải\n | 'profile' // Avatar tròn + tên + mô tả\n | 'article' // Tiêu đề + đoạn văn nhiều dòng\n | 'feedItem' // Item list: avatar trái + text dọc\n | 'stat'; // Khối thống kê: label + số lớn + sublabel\n\n/** Shape skeleton: hình khối đơn giản với kích thước preset */\ntype ShapeVariant =\n | 'rectangle' // Hình chữ nhật (mặc định w-full)\n | 'square' // Hình vuông (w = h)\n | 'circle' // Hình tròn\n | 'textLine' // Một dòng text\n | 'textParagraph'; // Đoạn text 3–4 dòng\n\ntype LayoutSkeletonProps = {\n type: 'layout';\n variant?: LayoutVariant;\n enabled: boolean;\n};\n\ntype ShapeSkeletonProps = {\n type: 'shape';\n variant?: ShapeVariant;\n enabled: boolean;\n};\n\n/** Custom skeleton: user toàn quyền cấu hình — class áp thẳng lên element skeleton */\ntype CustomSkeletonProps = {\n type: 'custom';\n enabled: boolean;\n class: string; // bắt buộc — định nghĩa hình dạng, kích thước, bo góc\n};\n\nexport type SkeletonProps = LayoutSkeletonProps | ShapeSkeletonProps | CustomSkeletonProps;\n\n// ─── Main component ───────────────────────────────────────────────────────────\n\nexport const Skeleton: ParentComponent<SkeletonProps> = rawProps => {\n const p = mergeProps({ variant: 'card-image' } as const, rawProps);\n\n return (\n <Show when={p.enabled} fallback={p.children}>\n {p.type === 'custom' ? (\n <div class={cn('skeleton', p.class)} />\n ) : (\n <SkeletonDisplay\n type={p.type}\n variant={(p as LayoutSkeletonProps | ShapeSkeletonProps).variant as never}\n />\n )}\n </Show>\n );\n};\n\n// ─── Display switcher ─────────────────────────────────────────────────────────\n\ntype SkeletonDisplayProps = {\n type: 'layout' | 'shape';\n variant: LayoutVariant | ShapeVariant;\n class?: string;\n};\n\nconst SkeletonDisplay: Component<SkeletonDisplayProps> = p => {\n if (p.type === 'shape') {\n return <ShapeSkeleton variant={p.variant as ShapeVariant} />;\n }\n return <LayoutSkeleton variant={p.variant as LayoutVariant} />;\n};\n\n// ─── Layout Skeletons ─────────────────────────────────────────────────────────\n\nconst LayoutSkeleton: Component<{ variant?: LayoutVariant }> = p => {\n switch (p.variant) {\n case 'cardImage':\n return (\n <div class=\"flex flex-col gap-3\">\n <div class=\"skeleton h-40 w-full rounded-lg\" />\n <div class=\"skeleton h-5 w-3/4 rounded\" />\n <div class=\"skeleton h-3.5 w-full rounded\" />\n <div class=\"skeleton h-3.5 w-5/6 rounded\" />\n <div class=\"skeleton h-3.5 w-4/5 rounded\" />\n </div>\n );\n\n case 'cardHorizontal':\n return (\n <div class=\"flex flex-row items-start gap-4\">\n <div class=\"skeleton size-24 shrink-0 rounded-lg\" />\n <div class=\"flex flex-1 flex-col gap-2.5\">\n <div class=\"skeleton h-5 w-2/3 rounded\" />\n <div class=\"skeleton h-3.5 w-full rounded\" />\n <div class=\"skeleton h-3.5 w-4/5 rounded\" />\n <div class=\"skeleton h-3.5 w-3/4 rounded\" />\n </div>\n </div>\n );\n\n case 'profile':\n return (\n <div class=\"flex flex-col items-center gap-3\">\n <div class=\"skeleton size-20 shrink-0 rounded-full\" />\n <div class=\"skeleton h-5 w-36 rounded\" />\n <div class=\"skeleton h-3.5 w-48 rounded\" />\n <div class=\"skeleton h-3.5 w-40 rounded\" />\n </div>\n );\n\n case 'article':\n return (\n <div class=\"flex flex-col gap-3\">\n <div class=\"skeleton h-7 w-3/4 rounded\" />\n <div class=\"skeleton h-4 w-1/3 rounded\" />\n <div class=\"mt-1 flex flex-col gap-2\">\n <div class=\"skeleton h-3.5 w-full rounded\" />\n <div class=\"skeleton h-3.5 w-full rounded\" />\n <div class=\"skeleton h-3.5 w-11/12 rounded\" />\n <div class=\"skeleton h-3.5 w-full rounded\" />\n <div class=\"skeleton h-3.5 w-4/5 rounded\" />\n </div>\n </div>\n );\n\n case 'feedItem':\n return (\n <div class=\"flex flex-row items-start gap-3\">\n <div class=\"skeleton size-10 shrink-0 rounded-full\" />\n <div class=\"flex flex-1 flex-col gap-2\">\n <div class=\"skeleton h-4 w-1/3 rounded\" />\n <div class=\"skeleton h-3.5 w-full rounded\" />\n <div class=\"skeleton h-3.5 w-5/6 rounded\" />\n </div>\n </div>\n );\n\n case 'stat':\n return (\n <div class=\"flex flex-col gap-2\">\n <div class=\"skeleton h-3.5 w-24 rounded\" />\n <div class=\"skeleton h-9 w-32 rounded\" />\n <div class=\"skeleton h-3 w-20 rounded\" />\n </div>\n );\n\n default:\n return (\n <div class=\"flex flex-col gap-3\">\n <div class=\"skeleton h-40 w-full rounded-lg\" />\n <div class=\"skeleton h-5 w-3/4 rounded\" />\n <div class=\"skeleton h-3.5 w-full rounded\" />\n </div>\n );\n }\n};\n\n// ─── Shape Skeletons ──────────────────────────────────────────────────────────\n\nconst ShapeSkeleton: Component<{ variant?: ShapeVariant }> = p => {\n switch (p.variant) {\n case 'rectangle':\n return <div class=\"skeleton h-32 w-full rounded-lg\" />;\n\n case 'square':\n return <div class=\"skeleton size-32 rounded-lg\" />;\n\n case 'circle':\n return <div class=\"skeleton size-16 rounded-full\" />;\n\n case 'textLine':\n return <div class=\"skeleton h-4 w-full rounded\" />;\n\n case 'textParagraph':\n return (\n <div class=\"flex flex-col gap-2\">\n <div class=\"skeleton h-4 w-full rounded\" />\n <div class=\"skeleton h-4 w-11/12 rounded\" />\n <div class=\"skeleton h-4 w-4/5 rounded\" />\n <div class=\"skeleton h-4 w-5/6 rounded\" />\n </div>\n );\n\n default:\n return <div class=\"skeleton h-32 w-full rounded-lg\" />;\n }\n};\n"],"mappings":"u+EA8CagB,EAA2CC,GAAY,CAClE,IAAMC,EAAIhB,EAAW,CAAEQ,QAAS,aAAc,CAAWO,EAAS,CAElE,OAAAG,EACGhB,EAAI,CAAA,IAACiB,MAAI,CAAA,OAAEH,EAAEP,SAAO,IAAEW,UAAQ,CAAA,OAAEJ,EAAEK,UAAQ,IAAAA,UAAA,CAAA,OACxCC,MAAAN,EAAET,OAAS,SAAQ,EAAA,MAAA,CAAA,IAAAgB,EAAAC,GAAA,CACiB,OADjBC,MAAAC,EAAAH,EACNzB,EAAG,WAAYkB,EAAEJ,MAAM,CAAA,CAAA,CAAAW,KAAA,CAAAL,EAElCS,EAAe,CAAA,IACdpB,MAAI,CAAA,OAAES,EAAET,MAAI,IACZC,SAAO,CAAA,OAAGQ,EAA+CR,SAAgB,CAE5E,EAAA,CAAA,EAaDmB,EAAmDX,GACnDA,EAAET,OAAS,QACbW,EAAQW,EAAa,CAAA,IAACrB,SAAO,CAAA,OAAEQ,EAAER,SAAuB,CAAA,CAE1DU,EAAQY,EAAc,CAAA,IAACtB,SAAO,CAAA,OAAEQ,EAAER,SAAwB,CAAA,CAKtDsB,EAAyDd,GAAK,CAClE,OAAQA,EAAER,QAAV,CACE,IAAK,YACH,OAAAuB,GAAA,CAUF,IAAK,iBACH,OAAAC,GAAA,CAYF,IAAK,UACH,OAAAC,GAAA,CASF,IAAK,UACH,OAAAC,GAAA,CAcF,IAAK,WACH,OAAAC,GAAA,CAWF,IAAK,OACH,OAAAC,GAAA,CAQF,QACE,OAAAC,GAAA,GAYAR,EAAuDb,GAAK,CAChE,OAAQA,EAAER,QAAV,CACE,IAAK,YACH,OAAA8B,GAAA,CAEF,IAAK,SACH,OAAAC,GAAA,CAEF,IAAK,SACH,OAAAC,GAAA,CAEF,IAAK,WACH,OAAAC,GAAA,CAEF,IAAK,gBACH,OAAAC,GAAA,CASF,QACE,OAAAJ,GAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"slider.js","names":["cn","getColor","Component","createEffect","createMemo","createSignal","For","mergeProps","on","Show","ParentComponent","SliderProps","SliderTooltipProps","SliderTooltipInternalProps","content","open","SliderTooltip","p","_el$","_tmpl$","_$insert","children","_$effect","_p$","_v$","position","color","class","_v$2","e","_$className","t","_$setAttribute","undefined","DEFAULT_PROPS","Partial","min","max","step","disabled","reverse","orientation","dots","included","tooltip","hidden","Slider","activeThumb","setActiveThumb","hoveredThumb","setHoveredThumb","railRef","HTMLDivElement","isRange","range","getInitialValue","value","defaultValue","internalValue","setInternalValue","newValue","currentValue","valuesArray","val","Array","isArray","valueToPercent","percent","percentToValue","actualPercent","Math","round","marks","markValues","Object","keys","map","Number","push","reduce","prev","curr","abs","getPositionFromEvent","event","MouseEvent","TouchEvent","rect","getBoundingClientRect","isVertical","clientPos","touches","clientY","clientX","bottom","height","left","width","updateValue","thumbIndex","finalValue","current","newValues","onChange","handleThumbMouseDown","preventDefault","stopPropagation","handleMove","handleEnd","document","removeEventListener","addEventListener","handleRailClick","clickedValue","v0","v1","dist0","dist1","closestThumb","marksList","entries","key","numKey","markData","label","style","dotsList","v","isInRange","trackStyle","start","length","p0","p1","thumbPositions","formatTooltip","formatter","String","shouldShowTooltip","forceOpen","getTooltipProps","rest","_el$2","_tmpl$4","_el$3","firstChild","_el$7","$$click","_ref$","_$use","_$createComponent","when","_el$4","_v$3","track","_v$4","_$style","each","dot","_el$9","_v$19","_v$20","mark","_el$0","_v$21","_v$22","_el$1","_tmpl$5","_v$23","markText","_v$24","_el$5","_tmpl$3","fallback","_el$10","_tmpl$2","$$touchstart","$$mousedown","_v$25","handle","_v$26","_v$27","_v$28","_v$29","_v$30","a","o","i","n","_$mergeProps","_el$6","_v$5","_v$6","_v$7","_v$8","_v$9","_v$0","_$p","_el$11","_v$31","_v$32","_v$33","_v$34","_v$35","_v$36","_el$8","_v$1","_v$10","_v$11","_v$12","_v$13","_v$14","_v$15","root","_v$16","_v$17","rail","_v$18","_$delegateEvents"],"sources":["../../../src/components/slider/slider.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\nimport { getColor } from '@/utils/helper';\nimport {\n Component,\n createEffect,\n createMemo,\n createSignal,\n For,\n mergeProps,\n on,\n Show,\n type ParentComponent,\n} from 'solid-js';\nimport type { SliderProps, SliderTooltipProps } from './slider.types';\n\ntype SliderTooltipInternalProps = SliderTooltipProps & {\n content: string;\n open: boolean;\n};\n\nconst SliderTooltip: ParentComponent<SliderTooltipInternalProps> = p => (\n <div\n class={cn(\n 'tooltip',\n p.position === 'bottom' && 'tooltip-bottom',\n p.position === 'left' && 'tooltip-left',\n p.position === 'right' && 'tooltip-right',\n p.color && `tooltip-${p.color}`,\n p.open && 'tooltip-open',\n p.class,\n )}\n data-tip={p.content}\n >\n {p.children}\n </div>\n);\n\nconst DEFAULT_PROPS: Partial<SliderProps> = {\n color: 'primary',\n min: 0,\n max: 100,\n step: 1,\n disabled: false,\n reverse: false,\n orientation: 'horizontal',\n dots: false,\n included: true,\n tooltip: {\n hidden: false,\n },\n};\n\nexport const Slider: Component<SliderProps> = p => {\n p = mergeProps(DEFAULT_PROPS, p);\n\n // Internal state\n const [activeThumb, setActiveThumb] = createSignal<0 | 1 | null>(null);\n const [hoveredThumb, setHoveredThumb] = createSignal<0 | 1 | null>(null);\n\n // Refs\n let railRef: HTMLDivElement | undefined;\n\n // Determine if range mode\n const isRange = createMemo(() => p.range === true);\n\n // Internal value state (for uncontrolled mode)\n const getInitialValue = (): number | [number, number] => {\n if (p.value !== undefined) return p.value;\n if (p.defaultValue !== undefined) return p.defaultValue;\n return isRange() ? ([p.min!, p.max!] as [number, number]) : p.min!;\n };\n\n const [internalValue, setInternalValue] = createSignal<number | [number, number]>(\n getInitialValue(),\n );\n\n // Sync with controlled value\n createEffect(\n on(\n () => p.value,\n newValue => {\n if (newValue !== undefined) {\n setInternalValue(newValue);\n }\n },\n ),\n );\n\n // Current value getter\n const currentValue = createMemo(() => {\n return p.value !== undefined ? p.value : internalValue();\n });\n\n // Get values as array for easy handling\n const valuesArray = createMemo<[number, number]>(() => {\n const val = currentValue();\n if (Array.isArray(val)) {\n return val as [number, number];\n }\n return [p.min!, val] as [number, number];\n });\n\n // Calculate percentage from value\n const valueToPercent = (value: number): number => {\n const { min, max } = p;\n const percent = ((value - min!) / (max! - min!)) * 100;\n return p.reverse ? 100 - percent : percent;\n };\n\n // Calculate value from percentage\n const percentToValue = (percent: number): number => {\n const { min, max, step } = p;\n const actualPercent = p.reverse ? 100 - percent : percent;\n let value = min! + (actualPercent / 100) * (max! - min!);\n\n // Snap to step if defined\n if (step !== null && step !== undefined) {\n value = Math.round(value / step) * step;\n }\n\n // Snap to marks if step is null\n if (step === null && p.marks) {\n const markValues = Object.keys(p.marks).map(Number);\n markValues.push(min!, max!);\n value = markValues.reduce((prev, curr) =>\n Math.abs(curr - value) < Math.abs(prev - value) ? curr : prev,\n );\n }\n\n return Math.max(min!, Math.min(max!, value));\n };\n\n // Get position from mouse/touch event\n const getPositionFromEvent = (event: MouseEvent | TouchEvent): number => {\n if (!railRef) return 0;\n\n const rect = railRef.getBoundingClientRect();\n const isVertical = p.orientation === 'vertical';\n\n let clientPos: number;\n if ('touches' in event) {\n clientPos = isVertical ? event.touches[0].clientY : event.touches[0].clientX;\n } else {\n clientPos = isVertical ? event.clientY : event.clientX;\n }\n\n let percent: number;\n if (isVertical) {\n percent = ((rect.bottom - clientPos) / rect.height) * 100;\n } else {\n percent = ((clientPos - rect.left) / rect.width) * 100;\n }\n\n return Math.max(0, Math.min(100, percent));\n };\n\n // Update value\n const updateValue = (newValue: number, thumbIndex: 0 | 1) => {\n let finalValue: number | [number, number];\n\n if (isRange()) {\n const current = valuesArray();\n const newValues: [number, number] = [...current];\n newValues[thumbIndex] = newValue;\n\n // Ensure min <= max for range\n if (thumbIndex === 0 && newValue > newValues[1]) {\n newValues[0] = newValues[1];\n } else if (thumbIndex === 1 && newValue < newValues[0]) {\n newValues[1] = newValues[0];\n }\n\n finalValue = newValues;\n } else {\n finalValue = newValue;\n }\n\n // Update internal state (for uncontrolled mode)\n if (p.value === undefined) {\n setInternalValue(finalValue);\n }\n\n // Call onChange callback\n p.onChange?.(finalValue);\n };\n\n // Handle mouse/touch start on thumb\n const handleThumbMouseDown = (event: MouseEvent | TouchEvent, thumbIndex: 0 | 1) => {\n if (p.disabled) return;\n event.preventDefault();\n event.stopPropagation();\n\n setActiveThumb(thumbIndex);\n\n const handleMove = (e: MouseEvent | TouchEvent) => {\n const percent = getPositionFromEvent(e);\n const value = percentToValue(percent);\n updateValue(value, thumbIndex);\n };\n\n const handleEnd = () => {\n setActiveThumb(null);\n document.removeEventListener('mousemove', handleMove);\n document.removeEventListener('mouseup', handleEnd);\n document.removeEventListener('touchmove', handleMove);\n document.removeEventListener('touchend', handleEnd);\n };\n\n document.addEventListener('mousemove', handleMove);\n document.addEventListener('mouseup', handleEnd);\n document.addEventListener('touchmove', handleMove);\n document.addEventListener('touchend', handleEnd);\n };\n\n // Handle click on rail\n const handleRailClick = (event: MouseEvent) => {\n if (p.disabled) return;\n\n const percent = getPositionFromEvent(event);\n const clickedValue = percentToValue(percent);\n\n if (isRange()) {\n // Find closest thumb\n const [v0, v1] = valuesArray();\n const dist0 = Math.abs(clickedValue - v0);\n const dist1 = Math.abs(clickedValue - v1);\n const closestThumb: 0 | 1 = dist0 <= dist1 ? 0 : 1;\n updateValue(clickedValue, closestThumb);\n } else {\n updateValue(clickedValue, 1);\n }\n };\n\n // Calculate marks\n const marksList = createMemo(() => {\n if (!p.marks) return [];\n return Object.entries(p.marks).map(([key, value]) => {\n const numKey = Number(key);\n const percent = valueToPercent(numKey);\n const markData = typeof value === 'string' ? { label: value, style: undefined } : value;\n return {\n value: numKey,\n percent,\n ...markData,\n };\n });\n });\n\n // Calculate dots\n const dotsList = createMemo(() => {\n if (!p.dots) return [];\n const { min, max, step } = p;\n if (!step || step <= 0) return [];\n\n const dots: { value: number; percent: number }[] = [];\n for (let v = min!; v <= max!; v += step) {\n dots.push({\n value: v,\n percent: valueToPercent(v),\n });\n }\n return dots;\n });\n\n // Check if value is in range (for included styling)\n const isInRange = (value: number): boolean => {\n if (!p.included) return false;\n const [v0, v1] = valuesArray();\n if (isRange()) {\n return value >= v0 && value <= v1;\n }\n return value >= p.min! && value <= v1;\n };\n\n // Track styles\n const trackStyle = createMemo(() => {\n const [v0, v1] = valuesArray();\n const isVertical = p.orientation === 'vertical';\n\n let start: number, length: number;\n\n if (isRange()) {\n const p0 = valueToPercent(v0);\n const p1 = valueToPercent(v1);\n start = Math.min(p0, p1);\n length = Math.abs(p1 - p0);\n } else {\n if (p.reverse) {\n const p1 = valueToPercent(v1);\n start = p1;\n length = 100 - p1;\n } else {\n start = 0;\n length = valueToPercent(v1);\n }\n }\n\n if (isVertical) {\n return { bottom: `${start}%`, height: `${length}%` };\n }\n return { left: `${start}%`, width: `${length}%` };\n });\n\n // Thumb positions\n const thumbPositions = createMemo(() => {\n const [v0, v1] = valuesArray();\n const isVertical = p.orientation === 'vertical';\n\n const p0 = valueToPercent(v0);\n const p1 = valueToPercent(v1);\n\n if (isVertical) {\n return [{ bottom: `${p0}%` }, { bottom: `${p1}%` }];\n }\n return [{ left: `${p0}%` }, { left: `${p1}%` }];\n });\n\n // Tooltip formatter\n const formatTooltip = (value: number): string => {\n if (p.tooltip?.formatter === null) return '';\n if (typeof p.tooltip?.formatter === 'function') {\n return String(p.tooltip.formatter(value));\n }\n return String(value);\n };\n\n // Should show tooltip\n const shouldShowTooltip = (thumbIndex: 0 | 1): boolean => {\n if (p.tooltip?.forceOpen === false) return false;\n if (p.tooltip?.forceOpen === true) return true;\n return activeThumb() === thumbIndex || hoveredThumb() === thumbIndex;\n };\n\n // Get tooltip props excluding internal ones\n const getTooltipProps = () => {\n if (!p.tooltip) return {};\n const { forceOpen, formatter, hidden, ...rest } = p.tooltip;\n return rest;\n };\n\n const isVertical = () => p.orientation === 'vertical';\n\n return (\n <div\n class={cn(\n 'sli01',\n getColor(p.color!),\n isVertical() && 'sli02',\n p.disabled && 'sli03',\n p.class?.root,\n )}\n data-disabled={p.disabled || undefined}\n >\n {/* Rail */}\n <div ref={railRef} class={cn('sli04', p.class?.rail)} onClick={handleRailClick}>\n {/* Track */}\n <Show when={p.included !== false}>\n <div class={cn('sli05', p.class?.track)} style={trackStyle()} />\n </Show>\n\n {/* Dots */}\n <For each={dotsList()}>\n {dot => (\n <div\n class={cn('sli09', isInRange(dot.value) && 'sli10', p.class?.dot)}\n style={isVertical() ? { bottom: `${dot.percent}%` } : { left: `${dot.percent}%` }}\n />\n )}\n </For>\n\n {/* Marks */}\n <For each={marksList()}>\n {mark => (\n <>\n <div\n class={cn('sli11', isInRange(mark.value) && 'sli12', p.class?.mark)}\n style={isVertical() ? { bottom: `${mark.percent}%` } : { left: `${mark.percent}%` }}\n />\n <span\n class={cn('sli13', isInRange(mark.value) && 'sli14', p.class?.markText)}\n style={{\n ...(isVertical() ? { bottom: `${mark.percent}%` } : { left: `${mark.percent}%` }),\n ...mark.style,\n }}\n >\n {mark.label}\n </span>\n </>\n )}\n </For>\n\n {/* Thumbs */}\n <Show when={isRange()}>\n <div class=\"sli06\" style={thumbPositions()[0]}>\n <Show\n when={!p.tooltip?.hidden}\n fallback={\n <div\n class={cn('sli07', activeThumb() === 0 && 'sli08', p.class?.handle)}\n tabIndex={p.disabled ? -1 : 0}\n role=\"slider\"\n aria-valuemin={p.min}\n aria-valuemax={p.max}\n aria-valuenow={valuesArray()[0]}\n aria-disabled={p.disabled}\n onMouseDown={e => handleThumbMouseDown(e, 0)}\n onTouchStart={e => handleThumbMouseDown(e, 0)}\n onMouseEnter={() => setHoveredThumb(0)}\n onMouseLeave={() => setHoveredThumb(null)}\n onFocus={() => setHoveredThumb(0)}\n onBlur={() => setHoveredThumb(null)}\n />\n }\n >\n <SliderTooltip\n content={formatTooltip(valuesArray()[0])}\n open={shouldShowTooltip(0)}\n position={isVertical() ? 'right' : 'top'}\n {...getTooltipProps()}\n >\n <div\n class={cn('sli07', activeThumb() === 0 && 'sli08', p.class?.handle)}\n tabIndex={p.disabled ? -1 : 0}\n role=\"slider\"\n aria-valuemin={p.min}\n aria-valuemax={p.max}\n aria-valuenow={valuesArray()[0]}\n aria-disabled={p.disabled}\n onMouseDown={e => handleThumbMouseDown(e, 0)}\n onTouchStart={e => handleThumbMouseDown(e, 0)}\n onMouseEnter={() => setHoveredThumb(0)}\n onMouseLeave={() => setHoveredThumb(null)}\n onFocus={() => setHoveredThumb(0)}\n onBlur={() => setHoveredThumb(null)}\n />\n </SliderTooltip>\n </Show>\n </div>\n </Show>\n\n <div class=\"sli06\" style={thumbPositions()[1]}>\n <Show\n when={!p.tooltip?.hidden}\n fallback={\n <div\n class={cn('sli07', activeThumb() === 1 && 'sli08', p.class?.handle)}\n tabIndex={p.disabled ? -1 : 0}\n role=\"slider\"\n aria-valuemin={p.min}\n aria-valuemax={p.max}\n aria-valuenow={valuesArray()[1]}\n aria-disabled={p.disabled}\n onMouseDown={e => handleThumbMouseDown(e, 1)}\n onTouchStart={e => handleThumbMouseDown(e, 1)}\n onMouseEnter={() => setHoveredThumb(1)}\n onMouseLeave={() => setHoveredThumb(null)}\n onFocus={() => setHoveredThumb(1)}\n onBlur={() => setHoveredThumb(null)}\n />\n }\n >\n <SliderTooltip\n content={formatTooltip(valuesArray()[1])}\n open={shouldShowTooltip(1)}\n position={isVertical() ? 'right' : 'top'}\n {...getTooltipProps()}\n >\n <div\n class={cn('sli07', activeThumb() === 1 && 'sli08', p.class?.handle)}\n tabIndex={p.disabled ? -1 : 0}\n role=\"slider\"\n aria-valuemin={p.min}\n aria-valuemax={p.max}\n aria-valuenow={valuesArray()[1]}\n aria-disabled={p.disabled}\n onMouseDown={e => handleThumbMouseDown(e, 1)}\n onTouchStart={e => handleThumbMouseDown(e, 1)}\n onMouseEnter={() => setHoveredThumb(1)}\n onMouseLeave={() => setHoveredThumb(null)}\n onFocus={() => setHoveredThumb(1)}\n onBlur={() => setHoveredThumb(null)}\n />\n </SliderTooltip>\n </Show>\n </div>\n </div>\n </div>\n );\n};\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"splitter.js","names":["cn","getColor","children","Component","createContext","createEffect","createMemo","createSignal","createUniqueId","For","JSX","mergeProps","on","onCleanup","Show","useContext","CollapsibleConfig","PanelProps","SplitterContextValue","SplitterOrientation","SplitterProps","SplitterContext","orientation","PanelRegistration","id","props","PanelRegistryContextValue","register","reg","unregister","PanelRegistryContext","renderIcon","icon","Element","CollapseLeft","_tmpl$","CollapseRight","_tmpl$2","CollapseUp","_tmpl$3","CollapseDown","_tmpl$4","clamp","v","min","max","Math","redistributeSizes","sizes","draggerIdx","delta","panelMetas","collapsed","leftIdx","rightIdx","length","next","leftMeta","rightMeta","leftMin","leftMax","rightMin","rightMax","totalAvail","newLeft","newRight","SplitterPanel","rawProps","registry","unregisterPanel","DraggerItemProps","dIdx","getPanelList","getCollapsed","getDraggingIdx","draggerIcon","showCollapsibleIcon","collapsibleIcon","collapse","expand","collapsedControlled","class","onMouseDown","idx","e","MouseEvent","onDblClick","onCollapse","panelIdx","DraggerItem","p","leftResizable","resizable","rightResizable","canResize","isDragging","leftCollapsible","collapsible","rightCollapsible","hasCollapse","isLeftCollapsed","isRightCollapsed","iconAlwaysShow","isH","showBtnNext","cfg","showBtnPrevFull","_el$5","_tmpl$6","_el$6","firstChild","$$dblclick","$$mousedown","_$insert","_c$","_$memo","_$createComponent","when","_el$7","_tmpl$5","$$click","stopPropagation","_c$2","_$effect","_p$","_v$","collapseBtn","_v$2","_$className","t","_$setAttribute","undefined","_el$8","_c$3","_v$3","_v$4","_v$5","dragger","_v$6","draggerBar","Splitter","Panel","lazy","color","const","vertical","setPanelMetas","prev","findIndex","r","filter","resolvedChildren","Provider","value","initSizes","metas","n","size","raw","map","m","defaultSize","hasAll","every","total","reduce","s","definedTotal","undefinedCount","eachUndefined","isCollapsedControlled","Array","isArray","setSizes","collapsedInternal","setCollapsedInternal","draggingIdx","setDraggingIdx","setCollapsed","lazyGhostPos","setLazyGhostPos","controlled","containerRef","HTMLDivElement","cachedContainerSize","observeContainerSize","observer","ResizeObserver","entries","entry","contentRect","width","height","observe","disconnectContainerObserver","disconnect","getContainerSize","getNormalizedSizes","col","visibleTotal","sum","i","dragStartPos","dragStartSizes","dragStartCollapsed","onDraggerMouseDown","preventDefault","clientX","clientY","onResizeStart","index","document","addEventListener","onMouseMove","onMouseUp","applyNewSizes","newSizes","changed","pos","containerSize","deltaPct","leftSumPct","slice","onResize","onResizeEnd","removeEventListener","removeDragListeners","collapsePanel","currentCollapsed","newCollapsed","ghostStyle","CSSProperties","display","left","top","_el$9","_tmpl$7","_el$0","_tmpl$9","_ref$","_$use","each","meta","isCollapsed","panelStyle","rawSizes","normalized","showDragger","hasVisibleLeft","hasVisibleRight","_el$10","_v$7","panel","_v$8","_v$9","_$style","a","onDraggerDoubleClick","_el$1","_tmpl$8","_$p","root","_$delegateEvents"],"sources":["../../../src/components/splitter/splitter.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\nimport { getColor } from '@utils/helper';\nimport {\n children,\n Component,\n createContext,\n createEffect,\n createMemo,\n createSignal,\n createUniqueId,\n For,\n JSX,\n mergeProps,\n on,\n onCleanup,\n Show,\n useContext,\n} from 'solid-js';\nimport type {\n CollapsibleConfig,\n PanelProps,\n SplitterContextValue,\n SplitterOrientation,\n SplitterProps,\n} from './splitter.types';\n\nconst SplitterContext = createContext<SplitterContextValue>({ orientation: 'horizontal' });\n\ntype PanelRegistration = {\n id: string;\n props: PanelProps;\n};\n\ntype PanelRegistryContextValue = {\n register: (reg: PanelRegistration) => void;\n unregister: (id: string) => void;\n};\n\nconst PanelRegistryContext = createContext<PanelRegistryContextValue | null>(null);\n\nfunction renderIcon(icon: JSX.Element | (() => JSX.Element) | undefined): JSX.Element {\n if (typeof icon === 'function') return (icon as () => JSX.Element)();\n return icon as JSX.Element;\n}\n\nconst CollapseLeft = () => (\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"currentColor\">\n <path d=\"M6 2L3 5l3 3V2z\" />\n </svg>\n);\n\nconst CollapseRight = () => (\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"currentColor\">\n <path d=\"M4 2l3 3-3 3V2z\" />\n </svg>\n);\n\nconst CollapseUp = () => (\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"currentColor\">\n <path d=\"M2 6l3-3 3 3H2z\" />\n </svg>\n);\n\nconst CollapseDown = () => (\n <svg width=\"10\" height=\"10\" viewBox=\"0 0 10 10\" fill=\"currentColor\">\n <path d=\"M2 4l3 3 3-3H2z\" />\n </svg>\n);\n\nfunction clamp(v: number, min: number, max: number) {\n return Math.min(Math.max(v, min), max);\n}\n\nfunction redistributeSizes(\n sizes: number[],\n draggerIdx: number,\n delta: number,\n panelMetas: PanelRegistration[],\n collapsed: boolean[],\n): number[] {\n // Tìm panel visible thực sự ở hai phía của dragger.\n // Bỏ qua các panel đang collapsed vì chúng bị CSS force về 0 và không\n // đóng góp vào tổng width thực tế — redistribute vào chúng sẽ tạo gap.\n let leftIdx = draggerIdx;\n while (leftIdx >= 0 && collapsed[leftIdx]) leftIdx--;\n\n let rightIdx = draggerIdx + 1;\n while (rightIdx < sizes.length && collapsed[rightIdx]) rightIdx++;\n\n if (leftIdx < 0 || rightIdx >= sizes.length) return sizes;\n\n const next = [...sizes];\n\n const leftMeta = panelMetas[leftIdx]?.props;\n const rightMeta = panelMetas[rightIdx]?.props;\n\n const leftMin = leftMeta?.min ?? 0;\n const leftMax = leftMeta?.max ?? 100;\n const rightMin = rightMeta?.min ?? 0;\n const rightMax = rightMeta?.max ?? 100;\n\n const totalAvail = next[leftIdx] + next[rightIdx];\n\n // Clamp newLeft trong khoảng [leftMin, leftMax] và đảm bảo right có đủ chỗ tối thiểu\n let newLeft = clamp(next[leftIdx] + delta, leftMin, Math.min(leftMax, totalAvail - rightMin));\n let newRight = totalAvail - newLeft;\n\n // Nếu right vượt quá rightMax, clamp right lại và tính lại left\n if (newRight > rightMax) {\n newRight = rightMax;\n newLeft = totalAvail - newRight;\n if (newLeft < leftMin || newLeft > leftMax) return sizes;\n }\n\n if (newRight < rightMin) return sizes;\n\n next[leftIdx] = newLeft;\n next[rightIdx] = newRight;\n return next;\n}\n\nexport const SplitterPanel: Component<PanelProps> = rawProps => {\n const registry = useContext(PanelRegistryContext);\n const id = createUniqueId();\n\n if (registry) {\n registry.register({ id, props: rawProps });\n onCleanup(function unregisterPanel() {\n registry.unregister(id);\n });\n }\n return null;\n};\n\ntype DraggerItemProps = {\n dIdx: number;\n getPanelList: () => PanelRegistration[];\n getCollapsed: () => boolean[];\n getDraggingIdx: () => number | null;\n orientation: () => SplitterOrientation;\n draggerIcon?: JSX.Element | (() => JSX.Element);\n showCollapsibleIcon: () => CollapsibleConfig;\n collapsibleIcon?: {\n collapse?: JSX.Element | (() => JSX.Element);\n expand?: JSX.Element | (() => JSX.Element);\n };\n collapsedControlled: () => boolean;\n class?: SplitterProps['class'];\n onMouseDown: (idx: number, e: MouseEvent) => void;\n onDblClick: (idx: number) => void;\n onCollapse: (panelIdx: number) => void;\n};\n\nconst DraggerItem: Component<DraggerItemProps> = p => {\n const dIdx = p.dIdx;\n\n const leftResizable = createMemo(() => p.getPanelList()[dIdx]?.props.resizable !== false);\n const rightResizable = createMemo(() => p.getPanelList()[dIdx + 1]?.props.resizable !== false);\n const canResize = createMemo(() => leftResizable() && rightResizable());\n const isDragging = createMemo(() => p.getDraggingIdx() === dIdx);\n\n const leftCollapsible = createMemo(() => p.getPanelList()[dIdx]?.props.collapsible ?? false);\n const rightCollapsible = createMemo(() => p.getPanelList()[dIdx + 1]?.props.collapsible ?? false);\n const hasCollapse = createMemo(() => leftCollapsible() || rightCollapsible());\n\n const isLeftCollapsed = createMemo(() => p.getCollapsed()[dIdx] ?? false);\n const isRightCollapsed = createMemo(() => p.getCollapsed()[dIdx + 1] ?? false);\n\n const iconAlwaysShow = createMemo(() => p.showCollapsibleIcon() === true);\n const isH = createMemo(() => p.orientation() === 'horizontal');\n\n const showBtnNext = createMemo(() => {\n if (p.collapsedControlled()) return false;\n const cfg = p.showCollapsibleIcon();\n if (cfg === false) return false;\n if (!hasCollapse()) return false;\n\n return rightCollapsible() || isLeftCollapsed();\n });\n\n const showBtnPrevFull = createMemo(() => {\n if (p.collapsedControlled()) return false;\n const cfg = p.showCollapsibleIcon();\n if (cfg === false) return false;\n if (!hasCollapse()) return false;\n return leftCollapsible() || isRightCollapsed();\n });\n\n return (\n <div\n class={cn('sp06', !canResize() && 'sp07', isDragging() && 'sp08', p.class?.dragger)}\n onMouseDown={e => p.onMouseDown(dIdx, e)}\n onDblClick={() => p.onDblClick(dIdx)}\n >\n <div class={cn('sp15', p.class?.draggerBar)}>\n {p.draggerIcon ? renderIcon(p.draggerIcon) : null}\n </div>\n\n <Show when={showBtnPrevFull()}>\n <button\n class={cn(\n 'sp10',\n 'sp11',\n iconAlwaysShow() && 'sp13',\n\n (isLeftCollapsed() || isRightCollapsed()) && 'sp14',\n p.class?.collapseBtn,\n )}\n title={isLeftCollapsed() || isRightCollapsed() ? 'Expand' : 'Collapse'}\n onClick={e => {\n e.stopPropagation();\n\n if (isRightCollapsed()) p.onCollapse(dIdx + 1);\n else p.onCollapse(dIdx);\n }}\n >\n {isLeftCollapsed()\n ? renderIcon(\n p.collapsibleIcon?.expand ?? (isH() ? <CollapseRight /> : <CollapseDown />),\n )\n : isRightCollapsed()\n ? renderIcon(p.collapsibleIcon?.expand ?? (isH() ? <CollapseLeft /> : <CollapseUp />))\n : renderIcon(\n p.collapsibleIcon?.collapse ?? (isH() ? <CollapseLeft /> : <CollapseUp />),\n )}\n </button>\n </Show>\n\n <Show when={showBtnNext()}>\n <button\n class={cn(\n 'sp10',\n 'sp12',\n iconAlwaysShow() && 'sp13',\n\n (isRightCollapsed() || isLeftCollapsed()) && 'sp14',\n p.class?.collapseBtn,\n )}\n title={isRightCollapsed() ? 'Collapse' : 'Expand'}\n onClick={e => {\n e.stopPropagation();\n\n if (isLeftCollapsed()) p.onCollapse(dIdx);\n else p.onCollapse(dIdx + 1);\n }}\n >\n {isRightCollapsed()\n ? renderIcon(p.collapsibleIcon?.expand ?? (isH() ? <CollapseLeft /> : <CollapseUp />))\n : isLeftCollapsed()\n ? renderIcon(\n p.collapsibleIcon?.expand ?? (isH() ? <CollapseRight /> : <CollapseDown />),\n )\n : renderIcon(\n p.collapsibleIcon?.collapse ?? (isH() ? <CollapseRight /> : <CollapseDown />),\n )}\n </button>\n </Show>\n </div>\n );\n};\n\nexport const Splitter: Component<SplitterProps> & { Panel: Component<PanelProps> } = rawProps => {\n const p = mergeProps(\n {\n orientation: 'horizontal' as SplitterOrientation,\n lazy: false,\n color: 'primary' as const,\n },\n rawProps,\n );\n\n const orientation = createMemo<SplitterOrientation>(() =>\n p.vertical ? 'vertical' : (p.orientation ?? 'horizontal'),\n );\n\n const [panelMetas, setPanelMetas] = createSignal<PanelRegistration[]>([]);\n\n const registry: PanelRegistryContextValue = {\n register(reg) {\n setPanelMetas(prev => {\n const idx = prev.findIndex(r => r.id === reg.id);\n if (idx >= 0) {\n const next = [...prev];\n next[idx] = reg;\n return next;\n }\n return [...prev, reg];\n });\n },\n unregister(id) {\n setPanelMetas(prev => prev.filter(r => r.id !== id));\n },\n };\n\n const resolvedChildren = children(() => (\n <PanelRegistryContext.Provider value={registry}>{p.children}</PanelRegistryContext.Provider>\n ));\n\n function initSizes(metas: PanelRegistration[]): number[] {\n const n = metas.length;\n if (n === 0) return [];\n if (p.size && p.size.length === n) return [...p.size];\n\n const raw = metas.map(m => m.props.size ?? m.props.defaultSize);\n const hasAll = raw.every(v => v !== undefined);\n if (hasAll) {\n const total = raw.reduce((s, v) => s + v!, 0);\n return raw.map(v => (v! / total) * 100);\n }\n\n const definedTotal = (raw.filter(v => v !== undefined) as number[]).reduce((s, v) => s + v, 0);\n const undefinedCount = raw.filter(v => v === undefined).length;\n const eachUndefined = undefinedCount > 0 ? Math.max(0, 100 - definedTotal) / undefinedCount : 0;\n return raw.map(v => (v !== undefined ? v : eachUndefined));\n }\n\n const isCollapsedControlled = createMemo(() => Array.isArray(p.collapsed));\n\n const [sizes, setSizes] = createSignal<number[]>([]);\n const [collapsedInternal, setCollapsedInternal] = createSignal<boolean[]>([]);\n const [draggingIdx, setDraggingIdx] = createSignal<number | null>(null);\n\n const collapsed = createMemo(() =>\n isCollapsedControlled() ? (p.collapsed as boolean[]) : collapsedInternal(),\n );\n const setCollapsed = (next: boolean[]) => {\n if (!isCollapsedControlled()) setCollapsedInternal(next);\n };\n\n const [lazyGhostPos, setLazyGhostPos] = createSignal<number | null>(null);\n\n createEffect(\n on(panelMetas, metas => {\n if (metas.length === 0) return;\n setSizes(initSizes(metas));\n setCollapsedInternal(metas.map(() => false));\n }),\n );\n\n createEffect(\n on(\n () => p.size,\n controlled => {\n if (!controlled) return;\n if (controlled.length === panelMetas().length) setSizes([...controlled]);\n },\n ),\n );\n\n let containerRef: HTMLDivElement | undefined;\n let cachedContainerSize = 0;\n\n createEffect(function observeContainerSize() {\n if (!containerRef) return;\n const isH = orientation() === 'horizontal';\n const observer = new ResizeObserver(entries => {\n const entry = entries[0];\n if (!entry) return;\n cachedContainerSize = isH ? entry.contentRect.width : entry.contentRect.height;\n });\n observer.observe(containerRef);\n onCleanup(function disconnectContainerObserver() {\n observer.disconnect();\n });\n });\n\n function getContainerSize(): number {\n return cachedContainerSize;\n }\n\n // Trả về sizes đã normalize: tổng 100% chỉ tính trên panel visible\n function getNormalizedSizes(): number[] {\n const col = collapsed();\n const raw = sizes();\n const visibleTotal = raw.reduce((sum, s, i) => sum + (col[i] ? 0 : s), 0);\n if (visibleTotal === 0) return raw.map(() => 0);\n return raw.map((s, i) => (col[i] ? s : (s / visibleTotal) * 100));\n }\n\n let dragStartPos = 0;\n let dragStartSizes: number[] = [];\n let dragStartCollapsed: boolean[] = [];\n\n function onDraggerMouseDown(idx: number, e: MouseEvent) {\n const metas = panelMetas();\n if (metas[idx]?.props.resizable === false) return;\n if (metas[idx + 1]?.props.resizable === false) return;\n\n e.preventDefault();\n setDraggingIdx(idx);\n dragStartPos = orientation() === 'horizontal' ? e.clientX : e.clientY;\n dragStartSizes = getNormalizedSizes();\n dragStartCollapsed = [...collapsed()];\n p.onResizeStart?.({ sizes: dragStartSizes, index: idx });\n\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp);\n }\n\n function applyNewSizes(newSizes: number[], idx: number) {\n const col = [...collapsed()];\n let changed = false;\n if (col[idx] && newSizes[idx] > 0) {\n col[idx] = false;\n changed = true;\n }\n if (col[idx + 1] && newSizes[idx + 1] > 0) {\n col[idx + 1] = false;\n changed = true;\n }\n if (changed) setCollapsed(col);\n setSizes(newSizes);\n }\n\n function onMouseMove(e: MouseEvent) {\n const idx = draggingIdx();\n if (idx === null) return;\n\n const pos = orientation() === 'horizontal' ? e.clientX : e.clientY;\n const containerSize = getContainerSize();\n if (containerSize === 0) return;\n\n const deltaPct = ((pos - dragStartPos) / containerSize) * 100;\n const newSizes = redistributeSizes(dragStartSizes, idx, deltaPct, panelMetas(), dragStartCollapsed);\n\n if (p.lazy) {\n const leftSumPct = newSizes.slice(0, idx + 1).reduce((s, v) => s + v, 0);\n setLazyGhostPos((leftSumPct / 100) * containerSize);\n } else {\n applyNewSizes(newSizes, idx);\n p.onResize?.({ sizes: newSizes, index: idx });\n }\n }\n\n function onMouseUp(e: MouseEvent) {\n const idx = draggingIdx();\n if (idx === null) return;\n\n if (p.lazy) {\n const pos = orientation() === 'horizontal' ? e.clientX : e.clientY;\n const containerSize = getContainerSize();\n if (containerSize > 0) {\n const deltaPct = ((pos - dragStartPos) / containerSize) * 100;\n const newSizes = redistributeSizes(dragStartSizes, idx, deltaPct, panelMetas(), dragStartCollapsed);\n applyNewSizes(newSizes, idx);\n p.onResize?.({ sizes: newSizes, index: idx });\n p.onResizeEnd?.({ sizes: newSizes, index: idx });\n }\n setLazyGhostPos(null);\n } else {\n p.onResizeEnd?.({ sizes: sizes(), index: idx });\n }\n\n setDraggingIdx(null);\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n }\n\n onCleanup(function removeDragListeners() {\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n });\n\n function collapsePanel(panelIdx: number) {\n const metas = panelMetas();\n if (!metas[panelIdx]?.props.collapsible) return;\n\n const currentCollapsed = collapsed();\n const newCollapsed = [...currentCollapsed];\n\n if (currentCollapsed[panelIdx]) {\n // Expand: chỉ bỏ collapsed flag — render tự normalize sizes\n newCollapsed[panelIdx] = false;\n setCollapsed(newCollapsed);\n p.onCollapse?.({ sizes: sizes(), collapsed: newCollapsed, index: panelIdx });\n } else {\n // Collapse: chỉ đánh dấu collapsed — render tự normalize sizes\n newCollapsed[panelIdx] = true;\n setCollapsed(newCollapsed);\n p.onCollapse?.({ sizes: sizes(), collapsed: newCollapsed, index: panelIdx });\n }\n }\n\n const ghostStyle = createMemo<JSX.CSSProperties>(() => {\n const pos = lazyGhostPos();\n\n if (pos === null) return { display: 'none' };\n return orientation() === 'horizontal'\n ? { display: 'block', left: `${pos}px` }\n : { display: 'block', top: `${pos}px` };\n });\n\n return (\n <SplitterContext.Provider value={{ orientation: orientation() }}>\n <div class=\"hidden\">{resolvedChildren()}</div>\n\n <div\n ref={containerRef}\n class={cn(\n 'sp01',\n orientation() === 'vertical' ? 'sp02' : 'sp03',\n getColor(p.color),\n p.class?.root,\n )}\n >\n <For each={panelMetas()}>\n {(meta, idx) => {\n const isCollapsed = createMemo(() => collapsed()[idx()] ?? false);\n\n // Tính normalized size: chia đều 100% cho các panel visible\n const panelStyle = createMemo<JSX.CSSProperties>(() => {\n if (isCollapsed()) return { display: 'none' };\n\n const col = collapsed();\n const rawSizes = sizes();\n\n // Tính tổng size của các panel visible\n const visibleTotal = rawSizes.reduce(\n (sum, s, i) => sum + (col[i] ? 0 : s),\n 0,\n );\n\n const s = rawSizes[idx()] ?? 0;\n const normalized = visibleTotal > 0 ? (s / visibleTotal) * 100 : 0;\n\n return orientation() === 'horizontal'\n ? { 'flex-basis': `${normalized}%`, 'min-width': `${meta.props.min ?? 0}%` }\n : { 'flex-basis': `${normalized}%`, 'min-height': `${meta.props.min ?? 0}%` };\n });\n\n // Dragger sau panel idx() — ẩn chỉ khi cả hai phía đều không có panel visible.\n // Trong controlled mode: ẩn dragger nếu một trong hai panel kề trực tiếp bị ẩn,\n // vì nút collapse/expand đã bị tắt và thanh chỉ còn dùng để resize (vô nghĩa khi\n // một bên không hiển thị).\n const showDragger = createMemo(() => {\n if (idx() >= panelMetas().length - 1) return false;\n const col = collapsed();\n\n if (isCollapsedControlled()) {\n return !col[idx()] && !(col[idx() + 1] ?? false);\n }\n\n // Tìm panel visible gần nhất bên trái (bao gồm idx())\n let hasVisibleLeft = false;\n for (let i = idx(); i >= 0; i--) {\n if (!col[i]) { hasVisibleLeft = true; break; }\n }\n // Tìm panel visible gần nhất bên phải (idx()+1 trở đi)\n let hasVisibleRight = false;\n for (let i = idx() + 1; i < panelMetas().length; i++) {\n if (!col[i]) { hasVisibleRight = true; break; }\n }\n return hasVisibleLeft || hasVisibleRight;\n });\n\n return (\n <>\n <div\n class={cn('sp04', isCollapsed() && 'sp05', meta.props.class, p.class?.panel)}\n style={panelStyle()}\n data-panel-id={meta.id}\n >\n {meta.props.children}\n </div>\n\n <Show when={showDragger()}>\n <DraggerItem\n dIdx={idx()}\n getPanelList={panelMetas}\n getCollapsed={collapsed}\n getDraggingIdx={draggingIdx}\n orientation={orientation}\n draggerIcon={p.draggerIcon}\n showCollapsibleIcon={() => p.showCollapsibleIcon ?? 'auto'}\n collapsibleIcon={p.collapsibleIcon}\n collapsedControlled={isCollapsedControlled}\n class={p.class}\n onMouseDown={onDraggerMouseDown}\n onDblClick={dIdx => p.onDraggerDoubleClick?.(dIdx, sizes())}\n onCollapse={collapsePanel}\n />\n </Show>\n </>\n );\n }}\n </For>\n\n <Show when={p.lazy}>\n <div class=\"sp09\" style={ghostStyle()} />\n </Show>\n </div>\n </SplitterContext.Provider>\n );\n};\n\nSplitter.Panel = SplitterPanel;\n"],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import{cn as e}from"../../utils/cn.js";import{getColor as t}from"../../utils/helper.js";import{check_default as n}from"../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/check.js";import{arrow_right_default as r}from"../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/arrow-right.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,template as f}from"solid-js/web";import{For as p,Show as m,createMemo as h,mergeProps as g}from"solid-js";var _=f(`<div>`),v=f(`<span class=ste17>`),y=f(`<div class=ste16>`),b=f(`<div><div class=ste18>`),x=f(`<span class=ste11 aria-hidden=true>`),S=f(`<div><div class=ste10><div class=ste18>`),C=f(`<div class=ste13><div>`),w=(e,t,n,r)=>n.includes(e)?`disabled`:r?.includes(e)||e===t?`active`:e<t?`done`:`upcoming`,T=t=>(()=>{var r=_();return c(r,a(m,{get when(){return l(()=>t.status===`done`)()&&!t.icon},get fallback(){return a(m,{get when(){return t.icon},get fallback(){return(()=>{var e=v();return c(e,()=>t.index+1),e})()},get children(){return t.icon}})},get children(){return a(n,{size:16,"stroke-width":3})}})),s(()=>i(r,e(`ste15`,t.class))),r})(),E=t=>(()=>{var n=_();return c(n,a(p,{get each(){return t.items},children:(n,r)=>{let o=()=>w(r(),t.current,t.disabled,t.activeIndex);return[a(m,{get when(){return l(()=>!t.isVertical)()&&r()>0},get children(){var n=_();return s(()=>i(n,e(`ste21 ste22`,`ste-s-${o()}`,t.class?.connector))),n}}),(()=>{var l=b(),u=l.firstChild;return l.$$click=()=>o()!==`disabled`&&t.onStepClick(r()),c(l,a(m,{get when(){return t.isVertical},get children(){var l=y();return c(l,a(T,{get index(){return r()},get status(){return o()},get icon(){return n.icon},get class(){return t.class?.icon}}),null),c(l,a(m,{get when(){return r()<t.items.length-1},get children(){var n=_();return s(()=>i(n,e(`ste21 ste23`,t.class?.connector))),n}}),null),l}}),u),c(l,a(m,{get when(){return!t.isVertical},get children(){return a(T,{get index(){return r()},get status(){return o()},get icon(){return n.icon},get class(){return t.class?.icon}})}}),u),c(u,a(m,{get when(){return n.title},get children(){var r=_();return c(r,()=>n.title),s(()=>i(r,e(`ste19`,t.class?.title))),r}}),null),c(u,a(m,{get when(){return n.description},get children(){var r=_();return c(r,()=>n.description),s(()=>i(r,e(`ste20`,t.class?.description))),r}}),null),s(n=>{var r=e(`ste07 ste08`,`ste-s-${o()}`,t.class?.step),a=o();return r!==n.e&&i(l,n.e=r),a!==n.t&&d(l,`data-status`,n.t=a),n},{e:void 0,t:void 0}),l})()]}})),s(()=>i(n,e(`ste01 ste02`,t.colorClass,t.isVertical?`ste06`:`ste05`,t.class?.root))),n})(),D=t=>(()=>{var n=_();return c(n,a(p,{get each(){return t.items},children:(n,o)=>{let u=()=>w(o(),t.current,t.disabled,t.activeIndex);return[a(m,{get when(){return l(()=>!t.isVertical)()&&o()>0},get children(){var e=x();return c(e,a(r,{size:14,"stroke-width":3,get color(){return u()===`active`||u()===`done`?`var(--color)`:`currentColor`}})),e}}),(()=>{var r=S(),l=r.firstChild,f=l.firstChild;return r.$$click=()=>u()!==`disabled`&&t.onStepClick(o()),c(l,a(T,{get index(){return o()},get status(){return u()},get icon(){return n.icon},get class(){return t.class?.icon}}),f),c(f,a(m,{get when(){return n.title},get children(){var r=_();return c(r,()=>n.title),s(()=>i(r,e(`ste19`,t.class?.title))),r}}),null),c(f,a(m,{get when(){return n.description},get children(){var r=_();return c(r,()=>n.description),s(()=>i(r,e(`ste20`,t.class?.description))),r}}),null),s(n=>{var a=e(`ste07 ste09`,`ste-s-${u()}`,t.class?.step),o=u();return a!==n.e&&i(r,n.e=a),o!==n.t&&d(r,`data-status`,n.t=o),n},{e:void 0,t:void 0}),r})()]}})),s(()=>i(n,e(`ste01 ste03`,t.colorClass,t.isVertical?`ste06`:`ste05`,t.class?.root))),n})(),O=t=>(()=>{var n=_();return c(n,a(p,{get each(){return t.items},children:(n,r)=>{let o=()=>w(r(),t.current,t.disabled,t.activeIndex);return[a(m,{get when(){return l(()=>!t.isVertical)()&&r()>0},get children(){var n=_();return s(()=>i(n,e(`ste21 ste22 ste24`,`ste-s-${o()}`,t.class?.connector))),n}}),(()=>{var l=b(),u=l.firstChild;return l.$$click=()=>o()!==`disabled`&&t.onStepClick(r()),c(l,a(m,{get when(){return t.isVertical},get children(){var n=C(),o=n.firstChild;return c(n,a(m,{get when(){return r()<t.items.length-1},get children(){var n=_();return s(()=>i(n,e(`ste21 ste23`,t.class?.connector))),n}}),null),s(()=>i(o,e(`ste14`,t.class?.icon))),n}}),u),c(l,a(m,{get when(){return!t.isVertical},get children(){var n=_();return s(()=>i(n,e(`ste14`,t.class?.icon))),n}}),u),c(u,a(m,{get when(){return n.title},get children(){var r=_();return c(r,()=>n.title),s(()=>i(r,e(`ste19`,t.class?.title))),r}}),null),c(u,a(m,{get when(){return n.description},get children(){var r=_();return c(r,()=>n.description),s(()=>i(r,e(`ste20`,t.class?.description))),r}}),null),s(n=>{var r=e(`ste07 ste12`,`ste-s-${o()}`,t.class?.step),a=o();return r!==n.e&&i(l,n.e=r),a!==n.t&&d(l,`data-status`,n.t=a),n},{e:void 0,t:void 0}),l})()]}})),s(()=>i(n,e(`ste01 ste04`,t.colorClass,t.isVertical?`ste06`:`ste05`,t.class?.root))),n})(),k=e=>{e=g({type:`default`,orientation:`horizontal`,color:`primary`,disabled:[],items:[]},e);let n=()=>e.current?.()??0,r=h(()=>e.items&&e.items.length>0?e.items:e.total&&e.total>0?Array.from({length:e.total},(e,t)=>({title:`Step ${t+1}`})):[]),i=t=>{e.setCurrent?.(t),e.onChange?.(t)},o=h(()=>({items:r(),current:n(),disabled:e.disabled??[],activeIndex:e.activeIndex,isVertical:e.orientation===`vertical`,colorClass:t(e.color,`color-primary`),onStepClick:i,class:e.class}));return a(m,{get when(){return e.type===`navigation`},get fallback(){return a(m,{get when(){return e.type===`dot`},get fallback(){return a(E,u(o))},get children(){return a(O,u(o))}})},get children(){return a(D,u(o))}})};o([`click`]);export{k as Steps};
2
- //# sourceMappingURL=steps.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"steps.js","names":["BaseColorProps","cn","getColor","ArrowRight","Check","Accessor","Component","createMemo","For","JSX","mergeProps","Setter","Show","StepItem","title","Element","description","icon","StepsProps","type","color","orientation","total","items","current","setCurrent","onChange","index","disabled","activeIndex","class","root","step","connector","StepStatus","getStepStatus","includes","StepIconProps","status","StepIconContent","p","_el$","_tmpl$","_$insert","_$createComponent","when","_$memo","fallback","_el$2","_tmpl$2","children","size","_$effect","_$className","InternalProps","isVertical","colorClass","onStepClick","TypeDefault","_el$3","each","item","i","_el$4","_el$5","_tmpl$4","_el$8","firstChild","$$click","_el$6","_tmpl$3","length","_el$7","_el$9","_el$0","_p$","_v$","_v$2","e","t","_$setAttribute","undefined","TypeNavigation","_el$1","_el$10","_tmpl$5","_el$11","_tmpl$6","_el$12","_el$13","_el$14","_el$15","_v$3","_v$4","TypeDot","_el$16","_el$17","_el$18","_el$23","_el$19","_tmpl$7","_el$20","_el$21","_el$22","_el$24","_el$25","_v$5","_v$6","Steps","resolvedItems","Array","from","_","handleClick","shared","_$mergeProps","_$delegateEvents"],"sources":["../../../src/components/steps/steps.tsx"],"sourcesContent":["import { BaseColorProps } from '@/type';\nimport { cn } from '@/utils/cn';\nimport { getColor } from '@/utils/helper';\nimport ArrowRight from 'lucide-solid/icons/arrow-right';\nimport Check from 'lucide-solid/icons/check';\nimport { Accessor, Component, createMemo, For, JSX, mergeProps, Setter, Show } from 'solid-js';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type StepItem = {\n title?: JSX.Element;\n description?: JSX.Element;\n icon?: JSX.Element;\n};\n\nexport type StepsProps = {\n type?: 'default' | 'navigation' | 'dot';\n color?: BaseColorProps;\n orientation?: 'horizontal' | 'vertical';\n total?: number;\n items?: StepItem[];\n current?: Accessor<number>;\n setCurrent?: Setter<number>;\n onChange?: (index: number) => void;\n disabled?: number[];\n activeIndex?: number[];\n class?: {\n root?: string;\n step?: string;\n icon?: string;\n title?: string;\n description?: string;\n connector?: string;\n };\n};\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\ntype StepStatus = 'active' | 'done' | 'upcoming' | 'disabled';\n\nconst getStepStatus = (\n index: number,\n current: number,\n disabled: number[],\n activeIndex?: number[],\n): StepStatus => {\n if (disabled.includes(index)) return 'disabled';\n if (activeIndex?.includes(index)) return 'active';\n if (index === current) return 'active';\n if (index < current) return 'done';\n return 'upcoming';\n};\n\n// ─── StepIcon — reusable icon renderer ───────────────────────────────────────\n// Renders: checkmark (done, no custom icon) | custom icon | step number\n\ntype StepIconProps = {\n index: number;\n status: StepStatus;\n icon?: JSX.Element;\n class?: string;\n};\n\nconst StepIconContent: Component<StepIconProps> = p => (\n <div class={cn('ste15', p.class)}>\n <Show\n when={p.status === 'done' && !p.icon}\n fallback={\n <Show when={p.icon} fallback={<span class=\"ste17\">{p.index + 1}</span>}>\n {p.icon}\n </Show>\n }\n >\n <Check size={16} stroke-width={3} />\n </Show>\n </div>\n);\n\n// ─── Internal props shared across sub-components ──────────────────────────────\n\ntype InternalProps = {\n items: StepItem[];\n current: number;\n disabled: number[];\n activeIndex?: number[];\n isVertical: boolean;\n colorClass: string;\n onStepClick: (index: number) => void;\n class?: StepsProps['class'];\n};\n\n// ─── Sub-component: Default ───────────────────────────────────────────────────\n\nconst TypeDefault: Component<InternalProps> = p => (\n <div class={cn('ste01 ste02', p.colorClass, p.isVertical ? 'ste06' : 'ste05', p.class?.root)}>\n <For each={p.items}>\n {(item, i) => {\n const status = () => getStepStatus(i(), p.current, p.disabled, p.activeIndex);\n\n return (\n <>\n {/* Connector nằm giữa hai step (horizontal), trước mỗi step từ index 1 */}\n <Show when={!p.isVertical && i() > 0}>\n <div class={cn('ste21 ste22', `ste-s-${status()}`, p.class?.connector)} />\n </Show>\n\n <div\n class={cn('ste07 ste08', `ste-s-${status()}`, p.class?.step)}\n data-status={status()}\n onClick={() => status() !== 'disabled' && p.onStepClick(i())}\n >\n {/* ── Vertical: icon col + connector ── */}\n <Show when={p.isVertical}>\n <div class=\"ste16\">\n <StepIconContent\n index={i()}\n status={status()}\n icon={item.icon}\n class={p.class?.icon}\n />\n <Show when={i() < p.items.length - 1}>\n <div class={cn('ste21 ste23', p.class?.connector)} />\n </Show>\n </div>\n </Show>\n\n {/* ── Horizontal: chỉ icon (connector đã là sibling bên ngoài) ── */}\n <Show when={!p.isVertical}>\n <StepIconContent\n index={i()}\n status={status()}\n icon={item.icon}\n class={p.class?.icon}\n />\n </Show>\n\n {/* ── Content ── */}\n <div class=\"ste18\">\n <Show when={item.title}>\n <div class={cn('ste19', p.class?.title)}>{item.title}</div>\n </Show>\n <Show when={item.description}>\n <div class={cn('ste20', p.class?.description)}>{item.description}</div>\n </Show>\n </div>\n </div>\n </>\n );\n }}\n </For>\n </div>\n);\n\n// ─── Sub-component: Navigation ────────────────────────────────────────────────\n\nconst TypeNavigation: Component<InternalProps> = p => (\n <div class={cn('ste01 ste03', p.colorClass, p.isVertical ? 'ste06' : 'ste05', p.class?.root)}>\n <For each={p.items}>\n {(item, i) => {\n const status = () => getStepStatus(i(), p.current, p.disabled, p.activeIndex);\n\n return (\n <>\n {/* Separator giữa các step — horizontal only */}\n <Show when={!p.isVertical && i() > 0}>\n <span class=\"ste11\" aria-hidden=\"true\">\n <ArrowRight\n size={14}\n stroke-width={3}\n color={\n status() === 'active' || status() === 'done' ? 'var(--color)' : 'currentColor'\n }\n />\n </span>\n </Show>\n\n <div\n class={cn('ste07 ste09', `ste-s-${status()}`, p.class?.step)}\n data-status={status()}\n onClick={() => status() !== 'disabled' && p.onStepClick(i())}\n >\n <div class=\"ste10\">\n <StepIconContent\n index={i()}\n status={status()}\n icon={item.icon}\n class={p.class?.icon}\n />\n <div class=\"ste18\">\n <Show when={item.title}>\n <div class={cn('ste19', p.class?.title)}>{item.title}</div>\n </Show>\n <Show when={item.description}>\n <div class={cn('ste20', p.class?.description)}>{item.description}</div>\n </Show>\n </div>\n </div>\n </div>\n </>\n );\n }}\n </For>\n </div>\n);\n\n// ─── Sub-component: Dot ───────────────────────────────────────────────────────\n\nconst TypeDot: Component<InternalProps> = p => (\n <div class={cn('ste01 ste04', p.colorClass, p.isVertical ? 'ste06' : 'ste05', p.class?.root)}>\n <For each={p.items}>\n {(item, i) => {\n const status = () => getStepStatus(i(), p.current, p.disabled, p.activeIndex);\n\n return (\n <>\n {/* Connector sibling — horizontal only, trước mỗi step từ index 1 */}\n <Show when={!p.isVertical && i() > 0}>\n <div class={cn('ste21 ste22 ste24', `ste-s-${status()}`, p.class?.connector)} />\n </Show>\n\n <div\n class={cn('ste07 ste12', `ste-s-${status()}`, p.class?.step)}\n data-status={status()}\n onClick={() => status() !== 'disabled' && p.onStepClick(i())}\n >\n {/* ── Vertical: dot col + connector ── */}\n <Show when={p.isVertical}>\n <div class=\"ste13\">\n <div class={cn('ste14', p.class?.icon)} />\n <Show when={i() < p.items.length - 1}>\n <div class={cn('ste21 ste23', p.class?.connector)} />\n </Show>\n </div>\n </Show>\n\n {/* ── Horizontal: chỉ dot (connector là sibling bên ngoài) ── */}\n <Show when={!p.isVertical}>\n <div class={cn('ste14', p.class?.icon)} />\n </Show>\n\n {/* Content */}\n <div class=\"ste18\">\n <Show when={item.title}>\n <div class={cn('ste19', p.class?.title)}>{item.title}</div>\n </Show>\n <Show when={item.description}>\n <div class={cn('ste20', p.class?.description)}>{item.description}</div>\n </Show>\n </div>\n </div>\n </>\n );\n }}\n </For>\n </div>\n);\n\n// ─── Main Component ───────────────────────────────────────────────────────────\n\nexport const Steps: Component<StepsProps> = p => {\n p = mergeProps(\n {\n type: 'default',\n orientation: 'horizontal',\n color: 'primary',\n disabled: [],\n items: [],\n } as StepsProps,\n p,\n );\n\n const current = () => p.current?.() ?? 0;\n\n const resolvedItems = createMemo((): StepItem[] => {\n if (p.items && p.items.length > 0) return p.items;\n if (p.total && p.total > 0)\n return Array.from({ length: p.total }, (_, i) => ({ title: `Step ${i + 1}` }));\n return [];\n });\n\n const handleClick = (index: number) => {\n p.setCurrent?.(index);\n p.onChange?.(index);\n };\n\n const shared = createMemo(\n (): InternalProps => ({\n items: resolvedItems(),\n current: current(),\n disabled: p.disabled ?? [],\n activeIndex: p.activeIndex,\n isVertical: p.orientation === 'vertical',\n colorClass: getColor(p.color, 'color-primary'),\n onStepClick: handleClick,\n class: p.class,\n }),\n );\n\n return (\n <Show\n when={p.type === 'navigation'}\n fallback={\n <Show when={p.type === 'dot'} fallback={<TypeDefault {...shared()} />}>\n <TypeDot {...shared()} />\n </Show>\n }\n >\n <TypeNavigation {...shared()} />\n </Show>\n );\n};\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"swap.js","names":["SolidComponent","cn","Component","SwapType","item1","item2","effect","onChange","value","Swap","p","_el$","_tmpl$","_el$2","firstChild","_el$3","nextSibling","_el$4","addEventListener","e","target","checked","_$insert","Element","_$effect","_$className"],"sources":["../../../src/components/swap/swap.tsx"],"sourcesContent":["import { SolidComponent } from '@/type';\nimport { cn } from '@/utils/cn';\nimport { Component } from 'solid-js';\n\ntype SwapType = {\n item1: SolidComponent;\n item2: SolidComponent;\n effect?: 'rotate' | 'flip' | 'none';\n onChange?: (value: boolean) => void;\n};\nexport const Swap: Component<SwapType> = p => {\n return (\n <label\n class={cn(\n 'swap',\n p.effect === 'flip' ? 'swap-flip' : p.effect === 'rotate' ? 'swap-rotate' : '',\n )}\n >\n <input\n type=\"checkbox\"\n onChange={e => {\n p?.onChange?.(e.target.checked);\n }}\n />\n <div class=\"swap-on\">{p.item1 as Element}</div>\n <div class=\"swap-off\">{p.item2 as Element}</div>\n <div class=\"swap-indeterminate\"></div>\n </label>\n );\n};\n"],"mappings":"+OAUaS,EAA4BC,QACvC,CAAA,IAAAC,EAAAC,GAAA,CAAAC,EAAAF,EAAAG,WAAAC,EAAAF,EAAAG,YAAAC,EAAAF,EAAAC,YAKK,OALLH,EAAAK,iBAAA,SASgBC,GAAK,CACbT,GAAGH,WAAWY,EAAEC,OAAOC,QAAQ,EAChC,CAAAC,EAAAP,MAEmBL,EAAEN,MAAgB,CAAAkB,EAAAL,MACjBP,EAAEL,MAAgB,CAAAmB,MAAAC,EAAAd,EAZlCV,EACL,OACAS,EAAEJ,SAAW,OAAS,YAAcI,EAAEJ,SAAW,SAAW,cAAgB,GAC7E,CAAA,CAAA,CAAAK,KAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"switch.js","names":["cn","cva","VariantProps","Component","createEffect","createSignal","mergeProps","Show","SwitchProps","variants","size","xs","sm","md","lg","xl","color","primary","secondary","accent","neutral","info","success","warning","error","SwitchVariantProps","Switch","props","p","className","defaultChecked","disabled","loading","const","internalChecked","setInternalChecked","isControlled","checked","undefined","syncControlledChecked","mergedDisabled","handleClick","e","MouseEvent","newChecked","onClick","onChange","_el$","_tmpl$2","_el$2","firstChild","$$click","_$insert","_$createComponent","when","children","_el$3","_tmpl$","IconLoading","_$effect","_p$","_v$","_v$2","_v$3","class","root","_v$4","_$setAttribute","t","a","_$className","o","_tmpl$3","_$delegateEvents"],"sources":["../../../src/components/switch/switch.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { Component, createEffect, createSignal, mergeProps, Show } from 'solid-js';\nimport type { SwitchProps } from './switch.types';\n\nconst variants = cva('', {\n variants: {\n size: {\n xs: 'h-4 w-7',\n sm: 'h-5 w-9',\n md: 'h-6 w-11',\n lg: 'h-7 w-14',\n xl: 'h-8 w-16',\n },\n color: {\n primary: 'bg-primary text-primary',\n secondary: 'bg-secondary text-secondary',\n accent: 'bg-accent text-accent',\n neutral: 'bg-neutral text-neutral',\n info: 'bg-info text-info',\n success: 'bg-success text-success',\n warning: 'bg-warning text-warning',\n error: 'bg-error text-error',\n },\n },\n});\n\nexport type SwitchVariantProps = VariantProps<typeof variants>;\n\nexport const Switch: Component<SwitchProps> = props => {\n const p = mergeProps(\n {\n className: '',\n defaultChecked: false,\n disabled: false,\n loading: false,\n size: 'md' as const,\n color: 'primary' as const,\n },\n props,\n );\n\n const [internalChecked, setInternalChecked] = createSignal(p.defaultChecked);\n\n const isControlled = () => p.checked !== undefined;\n const checked = () => (isControlled() ? p.checked! : internalChecked());\n\n createEffect(function syncControlledChecked() {\n if (isControlled()) {\n setInternalChecked(p.checked!);\n }\n });\n\n const mergedDisabled = () => p.disabled || p.loading;\n\n const handleClick = (e: MouseEvent) => {\n if (mergedDisabled()) return;\n\n const newChecked = !checked();\n\n if (!isControlled()) {\n setInternalChecked(newChecked);\n }\n\n p.onClick?.(newChecked);\n p.onChange?.(newChecked);\n };\n\n return (\n <button\n type=\"button\"\n role=\"switch\"\n aria-checked={checked()}\n disabled={mergedDisabled()}\n class={cn(\n 'sui_switch @container relative flex cursor-pointer items-center rounded-full border-2 border-transparent p-px',\n variants({ size: p.size, color: p.color }),\n 'transition duration-400',\n !checked() && 'bg-gray-300',\n mergedDisabled() && 'cursor-not-allowed opacity-50',\n p.class?.root,\n )}\n onClick={handleClick}\n >\n <div\n class={cn(\n 'sui_thumb aspect-square h-full rounded-full bg-white transition-transform duration-400 ease-in-out',\n\n checked() && 'translate-x-[calc(100cqw-100%)]',\n )}\n >\n <Show when={p.loading}>\n <span class=\"flex size-full animate-spin\">\n <IconLoading />\n </span>\n </Show>\n </div>\n </button>\n );\n};\n\nconst IconLoading = () => {\n return (\n <svg class=\"size-full\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle class=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"#ccc\" stroke-width=\"4\"></circle>\n <path\n class=\"opacity-90\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n ></path>\n </svg>\n );\n};\n"],"mappings":"8tBAKMS,EAAWR,EAAI,GAAI,CACvBQ,SAAU,CACRC,KAAM,CACJC,GAAI,UACJC,GAAI,UACJC,GAAI,WACJC,GAAI,WACJC,GAAI,WACL,CACDC,MAAO,CACLC,QAAS,0BACTC,UAAW,8BACXC,OAAQ,wBACRC,QAAS,0BACTC,KAAM,oBACNC,QAAS,0BACTC,QAAS,0BACTC,MAAO,sBACT,CACF,CACD,CAAC,CAIWE,EAAiCC,GAAS,CACrD,IAAMC,EAAItB,EACR,CACEuB,UAAW,GACXC,eAAgB,GAChBC,SAAU,GACVC,QAAS,GACTtB,KAAM,KACNM,MAAO,UACR,CACDW,EACD,CAEK,CAACO,EAAiBC,GAAsB9B,EAAauB,EAAEE,eAAe,CAEtEM,MAAqBR,EAAES,UAAYC,IAAAA,GACnCD,MAAiBD,GAAc,CAAGR,EAAES,QAAWH,GAAkB,CAEvE9B,EAAa,UAAiC,CACxCgC,GAAc,EAChBD,EAAmBP,EAAES,QAAS,EAEhC,CAEF,IAAMG,MAAuBZ,EAAEG,UAAYH,EAAEI,QAEvCS,EAAeC,GAAkB,CACrC,GAAIF,GAAgB,CAAE,OAEtB,IAAMI,EAAa,CAACP,GAAS,CAExBD,GAAc,EACjBD,EAAmBS,EAAW,CAGhChB,EAAEiB,UAAUD,EAAW,CACvBhB,EAAEkB,WAAWF,EAAW,EAG1B,WAAA,CAAA,IAAAG,EAAAC,GAAA,CAAAC,EAAAF,EAAAG,WAqBO,MArBPH,GAAAI,QAcaV,EAAWW,EAAAH,EAAAI,EASjB9C,EAAI,CAAA,IAAC+C,MAAI,CAAA,OAAE1B,EAAEI,SAAO,IAAAuB,UAAA,CAAA,IAAAC,EAAAC,GAAA,CAEL,OAFKL,EAAAI,EAAAH,EAEhBK,EAAW,EAAA,CAAA,CAAA,CAAAF,GAAA,CAAA,CAAA,CAAAG,EAAAC,GAAA,CAAA,IAAAC,EArBJxB,GAAS,CAAAyB,EACbtB,GAAgB,CAAAuB,EACnB/D,EACL,gHACAS,EAAS,CAAEC,KAAMkB,EAAElB,KAAMM,MAAOY,EAAEZ,MAAO,CAAC,CAC1C,0BACA,CAACqB,GAAS,EAAI,cACdG,GAAgB,EAAI,gCACpBZ,EAAEoC,OAAOC,KACV,CAAAC,EAIQlE,EACL,qGAEAqC,GAAS,EAAI,kCACd,CAAA,OAAAwB,IAAAD,EAAAlB,GAAAyB,EAAApB,EAAA,eAAAa,EAAAlB,EAAAmB,EAAA,CAAAC,IAAAF,EAAAQ,IAAArB,EAAAhB,SAAA6B,EAAAQ,EAAAN,GAAAC,IAAAH,EAAAS,GAAAC,EAAAvB,EAAAa,EAAAS,EAAAN,EAAA,CAAAG,IAAAN,EAAAW,GAAAD,EAAArB,EAAAW,EAAAW,EAAAL,EAAA,CAAAN,GAAA,CAAAlB,EAAAJ,IAAAA,GAAA8B,EAAA9B,IAAAA,GAAA+B,EAAA/B,IAAAA,GAAAiC,EAAAjC,IAAAA,GAAA,CAAA,CAAAS,KAAA,EAYHW,MACJc,GAAA,CAUAC,EAAA,CAAA,QAAA,CAAA"}
@@ -1,2 +0,0 @@
1
- import{cn as e}from"../../utils/cn.js";import{getColor 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{Tooltip as r}from"../tooltip/tooltip.js";import{pin_default as i}from"../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/pin.js";import{pin_off_default as a}from"../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/pin-off.js";import{plus_default as o}from"../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/plus.js";import{className as s,createComponent as c,delegateEvents as l,effect as u,insert as d,memo as f,mergeProps as p,setAttribute as m,template as h,use as g}from"solid-js/web";import{cva as _}from"class-variance-authority";import{For as v,Show as y,createEffect as b,createMemo as x,createSignal as S,createUniqueId as C,mergeProps as w,on as T}from"solid-js";var ee=h(`<div>New Tab Content`),E=h(`<button title="Add new tab">`),D=h(`<button class=tab12>`),O=h(`<div class=tab15><span>No tabs available`),k=h(`<div><div></div><div>`),A=h(`<div class=tab14>`),j=h(`<span class=tab06>`),M=h(`<input type=text class=tab16>`),N=h(`<button class="tab09 tab10">`),te=h(`<button class="tab09 tab11"title="Close tab">`),ne=h(`<div class=tab08>`),P=h(`<div>`),F=h(`<span class=tab07>`),I=_(``,{variants:{variants:{lift:``,box:``,border:`rounded-none p-0`},tabPlacement:{horizontal:``,vertical:``},position:{top:``,bottom:``,left:``,right:``}},compoundVariants:[{variants:`lift`,position:`top`,class:`pb-0`},{variants:`lift`,position:`bottom`,class:`pt-0`},{variants:`lift`,tabPlacement:`vertical`,position:`left`,class:`pr-0 overflow-x-hidden`},{variants:`lift`,tabPlacement:`vertical`,position:`right`,class:`pl-0 overflow-x-hidden`}]}),L={tabPlacement:`horizontal`,position:`top`,align:`left`,variants:`box`,canAdd:!0,canPin:!1,canRename:!0,preRender:!1,color:`primary`},R=20,z=l=>{let h=w(L,l),_=C(),[z,B]=S(h.defaultActiveKey||h.items()[0]?.key||``),[V,H]=S(new Set),[U,W]=S(null),[G,K]=S(``),q=x(()=>h.tabPlacement===`vertical`?h.position===`left`||h.position===`right`?h.position:`left`:h.position===`top`||h.position===`bottom`?h.position:`top`),J=x(()=>{let e=h.items(),t=e.filter(e=>e.pinned),n=e.filter(e=>!e.pinned);return[...t,...n]}),Y=x(()=>{let e=h.items(),t=e.some(e=>e.pinned),n=e.some(e=>!e.pinned);return t&&n}),X=x(()=>J().findIndex(e=>!e.pinned));b(T(()=>h.items(),e=>{e.length>0&&!e.find(e=>e.key===z())&&B(e[0].key)})),b(T(z,e=>{e&&!V().has(e)&&H(t=>new Set([...t,e]))}));let re=e=>{e.disabled||(B(e.key),h.onChange?.(e.key))},ie=(e,t)=>{e.button===1&&t.closable!==!1&&(e.preventDefault(),Q(t))},Z=()=>{if(h.onAdd){let e=h.onAdd();e&&(h.setItems(t=>[...t,e]),B(e.key))}else{let e=C(),t={key:e,label:`Tab ${h.items().length+1}`,children:ee()};h.setItems(e=>[...e,t]),B(e)}},Q=async e=>{if(e.closable===!1)return;let t=e.label||`Tab ${h.items().findIndex(t=>t.key===e.key)+1}`;if(h.onRemove&&await h.onRemove(e.key,t)===!1)return;let n=h.items(),r=n.findIndex(t=>t.key===e.key);if(z()===e.key){let e=n[r+1]||n[r-1];e&&B(e.key)}h.setItems(t=>t.filter(t=>t.key!==e.key)),H(t=>{let n=new Set(t);return n.delete(e.key),n})},ae=(e,t)=>{t.stopPropagation();let n=!e.pinned;h.setItems(t=>t.map(t=>t.key===e.key?{...t,pinned:n}:t)),h.onPin?.(e.key,n)},oe=(e,t)=>{if(!h.canRename||e.disabled)return;t.stopPropagation();let n=e.label||`Tab ${h.items().findIndex(t=>t.key===e.key)+1}`;W(e.key),K(n)},$=e=>{let t=G().trim();t&&t!==e.label&&(h.setItems(n=>n.map(n=>n.key===e.key?{...n,label:t}:n)),h.onRename?.(e.key,t)),W(null),K(``)},se=(e,t)=>{t.key===`Enter`?(t.preventDefault(),$(e)):t.key===`Escape`&&(t.preventDefault(),W(null),K(``))},ce=e=>{let t=z()===e.key;return(e.pinned||h.preRender)&&V().has(e.key)||t};return(()=>{var l=k(),b=l.firstChild,x=b.nextSibling;return m(l,`id`,_),d(b,c(v,{get each(){return J()},children:(t,o)=>[c(y,{get when(){return f(()=>!!Y())()&&o()===X()},get children(){return A()}}),(()=>{var o=P();return o.$$dblclick=e=>oe(t,e),o.$$mousedown=e=>ie(e,t),o.$$click=()=>re(t),d(o,c(y,{get when(){return t.icon},get children(){var e=j();return d(e,()=>t.icon),e}}),null),d(o,c(y,{get when(){return U()===t.key},get fallback(){return c(y,{get when(){return h.useTooltip},get fallback(){return(()=>{var e=F();return d(e,()=>t.label||`Tab ${h.items().findIndex(e=>e.key===t.key)+1}`),e})()},get children(){return(()=>{let e=t.label||`Tab ${h.items().findIndex(e=>e.key===t.key)+1}`;if(!(e.length>R))return(()=>{var t=F();return d(t,e),t})();let n=h.tooltipOptions??{};return c(r,p(`customContent`in n&&n.customContent!=null?{type:`default`,position:`top`,color:h?.color,customContent:n.customContent}:{type:`default`,position:`top`,color:h?.color,content:n.content??e},{get children(){var t=F();return d(t,e),t}}))})()}})},get children(){var e=M();return e.$$click=e=>e.stopPropagation(),e.$$keydown=e=>se(t,e),e.addEventListener(`blur`,()=>$(t)),e.$$input=e=>K(e.currentTarget.value),g(e=>setTimeout(()=>{e?.focus(),e?.select()},0),e),u(()=>e.value=G()),e}}),null),d(o,c(y,{get when(){return h.canPin||t.closable!==!1},get children(){var e=ne();return d(e,c(y,{get when(){return h.canPin},get children(){var e=N();return e.$$click=e=>ae(t,e),d(e,c(y,{get when(){return t.pinned},get fallback(){return c(i,{size:12})},get children(){return c(a,{size:12})}})),u(()=>m(e,`title`,t.pinned?`Unpin tab`:`Pin tab`)),e}}),null),d(e,c(y,{get when(){return t.closable!==!1},get children(){var e=te();return e.$$click=e=>{e.stopPropagation(),Q(t)},d(e,c(n,{size:12})),e}}),null),e}}),null),u(()=>s(o,e(`tab03`,U()===t.key&&`bg-base-100`,z()===t.key&&`tab04`,t.pinned&&`tab05`,t.disabled&&`pointer-events-none opacity-50`,h.class?.item))),o})()]}),null),d(b,c(y,{get when(){return h.canAdd},get children(){var t=E();return t.$$click=Z,d(t,c(o,{size:14})),u(()=>s(t,e(`tab12`,h.class?.addButton))),t}}),null),d(x,c(y,{get when(){return h.items().length===0},get children(){var e=O();return e.firstChild,d(e,c(y,{get when(){return h.canAdd},get children(){var e=D();return e.$$click=Z,d(e,c(i,{size:14})),e}}),null),e}}),null),d(x,c(v,{get each(){return h.items()},children:t=>c(y,{get when(){return ce(t)},get children(){var n=P();return d(n,()=>t.children),u(()=>s(n,e(`tab29 size-full`,z()!==t.key&&`hidden`))),n}})}),null),u(n=>{var r=e(`tab01`,t(h.color),`tab${h.variants===`box`?`23`:h.variants===`lift`?`24`:`25`}`,`tab${h.tabPlacement===`horizontal`?`17`:`18`}`,`tab${q()===`top`?`19`:q()===`bottom`?`20`:q()===`left`?`21`:`22`}`,h.class?.root),i=e(`tab02`,`tab${h.align===`left`?`26`:h.align===`center`?`27`:`28`}`,I({variants:h.variants,tabPlacement:h.tabPlacement,position:h.position}),h.class?.header),a=e(`tab13`,h.class?.content);return r!==n.e&&s(l,n.e=r),i!==n.t&&s(b,n.t=i),a!==n.a&&s(x,n.a=a),n},{e:void 0,t:void 0,a:void 0}),l})()};l([`click`,`mousedown`,`dblclick`,`input`,`keydown`]);export{z as Tab};
2
- //# sourceMappingURL=tab.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tab.js","names":["cn","getColor","Tooltip","TooltipDefaultProps","cva","Pin","PinOff","Plus","X","Component","createEffect","createMemo","createSignal","createUniqueId","For","JSX","mergeProps","on","Show","TabItem","TabProps","BaseColorProps","headerVariant","variants","lift","box","border","tabPlacement","horizontal","vertical","position","top","bottom","left","right","compoundVariants","class","DEFAULT_PROPS","const","align","canAdd","canPin","canRename","preRender","color","TOOLTIP_CHAR_THRESHOLD","Tab","props","p","tabRootId","activeKey","setActiveKey","defaultActiveKey","items","key","renderedTabs","setRenderedTabs","Set","editingKey","setEditingKey","editingValue","setEditingValue","computedPosition","sortedItems","pinned","filter","item","unpinned","hasPinnedAndUnpinned","hasPinned","some","hasUnpinned","firstUnpinnedIndex","findIndex","length","find","has","prev","handleTabClick","disabled","onChange","handleMouseDown","e","MouseEvent","button","closable","preventDefault","handleRemoveTab","handleAddTab","onAdd","newItem","setItems","newKey","label","children","_tmpl$","i","onRemove","result","currentItems","currentIndex","nextItem","newSet","delete","handlePinTab","stopPropagation","newPinned","map","onPin","handleDoubleClick","handleRenameSubmit","newLabel","trim","onRename","handleRenameKeyDown","KeyboardEvent","shouldRenderContent","isActive","itemPreRender","_el$2","_tmpl$5","_el$3","firstChild","_el$5","nextSibling","_$setAttribute","_$insert","_$createComponent","each","index","when","_$memo","_tmpl$6","_el$0","_tmpl$10","$$dblclick","$$mousedown","$$click","icon","_el$1","_tmpl$7","Element","fallback","useTooltip","_el$14","_tmpl$11","needsTooltip","_el$15","opts","tooltipOptions","isCustom","customContent","tooltipProps","Omit","type","content","_$mergeProps","_el$16","_el$10","_tmpl$8","$$keydown","addEventListener","$$input","currentTarget","value","_$use","el","setTimeout","focus","select","_$effect","_el$11","_tmpl$1","_el$12","_tmpl$9","size","_el$13","_tmpl$0","_$className","_el$4","_tmpl$2","addButton","_el$6","_tmpl$4","_el$7","_el$8","_tmpl$3","_el$17","_p$","_v$","root","_v$2","header","_v$3","t","a","undefined","_$delegateEvents"],"sources":["../../../src/components/tab/tab.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\nimport { getColor } from '@/utils/helper';\nimport { Tooltip } from '@components/tooltip';\nimport type { TooltipDefaultProps } from '@components/tooltip';\nimport { cva } from 'class-variance-authority';\nimport Pin from 'lucide-solid/icons/pin';\nimport PinOff from 'lucide-solid/icons/pin-off';\nimport Plus from 'lucide-solid/icons/plus';\nimport X from 'lucide-solid/icons/x';\nimport {\n Component,\n createEffect,\n createMemo,\n createSignal,\n createUniqueId,\n For,\n JSX,\n mergeProps,\n on,\n Show,\n} from 'solid-js';\nimport { TabItem, TabProps } from './tab.types';\nimport { BaseColorProps } from '@/type';\n\nconst headerVariant = cva('', {\n variants: {\n variants: {\n lift: '',\n box: '',\n border: 'rounded-none p-0',\n },\n tabPlacement: { horizontal: '', vertical: '' },\n position: { top: '', bottom: '', left: '', right: '' },\n },\n compoundVariants: [\n {\n variants: 'lift',\n position: 'top',\n class: 'pb-0',\n },\n {\n variants: 'lift',\n position: 'bottom',\n class: 'pt-0',\n },\n {\n variants: 'lift',\n tabPlacement: 'vertical',\n position: 'left',\n class: 'pr-0 overflow-x-hidden',\n },\n {\n variants: 'lift',\n tabPlacement: 'vertical',\n position: 'right',\n class: 'pl-0 overflow-x-hidden',\n },\n ],\n});\n\nconst DEFAULT_PROPS = {\n tabPlacement: 'horizontal' as const,\n position: 'top' as const,\n align: 'left' as const,\n variants: 'box' as const,\n canAdd: true,\n canPin: false,\n canRename: true,\n preRender: false,\n color: 'primary',\n};\n\nconst TOOLTIP_CHAR_THRESHOLD = 20;\n\nexport const Tab: Component<TabProps> = props => {\n const p = mergeProps(DEFAULT_PROPS, props);\n const tabRootId = createUniqueId();\n\n // Active tab key\n const [activeKey, setActiveKey] = createSignal<string>(\n p.defaultActiveKey || p.items()[0]?.key || '',\n );\n\n // Rendered tabs tracking (for lazy rendering)\n const [renderedTabs, setRenderedTabs] = createSignal<Set<string>>(new Set());\n\n // Editing state for rename feature\n const [editingKey, setEditingKey] = createSignal<string | null>(null);\n const [editingValue, setEditingValue] = createSignal<string>('');\n\n // Compute position based on tabPlacement\n const computedPosition = createMemo(() => {\n if (p.tabPlacement === 'vertical') {\n return p.position === 'left' || p.position === 'right' ? p.position : 'left';\n }\n return p.position === 'top' || p.position === 'bottom' ? p.position : 'top';\n });\n\n // Sort items: pinned first, then unpinned (maintain order within each group)\n const sortedItems = createMemo(() => {\n const items = p.items();\n const pinned = items.filter(item => item.pinned);\n const unpinned = items.filter(item => !item.pinned);\n return [...pinned, ...unpinned];\n });\n\n // Check if there are both pinned and unpinned items (for separator)\n const hasPinnedAndUnpinned = createMemo(() => {\n const items = p.items();\n const hasPinned = items.some(item => item.pinned);\n const hasUnpinned = items.some(item => !item.pinned);\n return hasPinned && hasUnpinned;\n });\n\n // Get first unpinned item index in sorted list\n const firstUnpinnedIndex = createMemo(() => {\n const items = sortedItems();\n return items.findIndex(item => !item.pinned);\n });\n\n // Update active key when items change\n createEffect(\n on(\n () => p.items(),\n items => {\n if (items.length > 0 && !items.find(item => item.key === activeKey())) {\n setActiveKey(items[0].key);\n }\n },\n ),\n );\n\n // Mark tab as rendered when it becomes active\n createEffect(\n on(activeKey, key => {\n if (key && !renderedTabs().has(key)) {\n setRenderedTabs(prev => new Set([...prev, key]));\n }\n }),\n );\n\n // Handle tab click\n const handleTabClick = (item: TabItem) => {\n if (item.disabled) return;\n setActiveKey(item.key);\n p.onChange?.(item.key);\n };\n\n // Handle middle mouse click to close tab\n const handleMouseDown = (e: MouseEvent, item: TabItem) => {\n if (e.button === 1 && item.closable !== false) {\n e.preventDefault();\n handleRemoveTab(item);\n }\n };\n\n // Handle add tab\n const handleAddTab = () => {\n if (p.onAdd) {\n const newItem = p.onAdd();\n if (newItem) {\n p.setItems(prev => [...prev, newItem]);\n setActiveKey(newItem.key);\n }\n } else {\n // Default behavior: create a new tab\n const newKey = createUniqueId();\n const newItem: TabItem = {\n key: newKey,\n label: `Tab ${p.items().length + 1}`,\n children: <div>New Tab Content</div>,\n };\n p.setItems(prev => [...prev, newItem]);\n setActiveKey(newKey);\n }\n };\n\n // Handle remove tab\n const handleRemoveTab = async (item: TabItem) => {\n if (item.closable === false) return;\n\n const label = item.label || `Tab ${p.items().findIndex(i => i.key === item.key) + 1}`;\n\n if (p.onRemove) {\n const result = await p.onRemove(item.key, label);\n if (result === false) return;\n }\n\n const currentItems = p.items();\n const currentIndex = currentItems.findIndex(i => i.key === item.key);\n\n // If removing active tab, switch to adjacent tab\n if (activeKey() === item.key) {\n const nextItem = currentItems[currentIndex + 1] || currentItems[currentIndex - 1];\n if (nextItem) {\n setActiveKey(nextItem.key);\n }\n }\n\n p.setItems(prev => prev.filter(i => i.key !== item.key));\n\n // Clean up rendered tabs\n setRenderedTabs(prev => {\n const newSet = new Set(prev);\n newSet.delete(item.key);\n return newSet;\n });\n };\n\n // Handle pin/unpin tab\n const handlePinTab = (item: TabItem, e: MouseEvent) => {\n e.stopPropagation();\n const newPinned = !item.pinned;\n\n p.setItems(prev => prev.map(i => (i.key === item.key ? { ...i, pinned: newPinned } : i)));\n\n p.onPin?.(item.key, newPinned);\n };\n\n // Handle double-click to start editing\n const handleDoubleClick = (item: TabItem, e: MouseEvent) => {\n if (!p.canRename || item.disabled) return;\n e.stopPropagation();\n const label = item.label || `Tab ${p.items().findIndex(i => i.key === item.key) + 1}`;\n setEditingKey(item.key);\n setEditingValue(label);\n };\n\n // Handle rename input blur/submit\n const handleRenameSubmit = (item: TabItem) => {\n const newLabel = editingValue().trim();\n if (newLabel && newLabel !== item.label) {\n p.setItems(prev => prev.map(i => (i.key === item.key ? { ...i, label: newLabel } : i)));\n p.onRename?.(item.key, newLabel);\n }\n setEditingKey(null);\n setEditingValue('');\n };\n\n // Handle rename input keydown\n const handleRenameKeyDown = (item: TabItem, e: KeyboardEvent) => {\n if (e.key === 'Enter') {\n e.preventDefault();\n handleRenameSubmit(item);\n } else if (e.key === 'Escape') {\n e.preventDefault();\n setEditingKey(null);\n setEditingValue('');\n }\n };\n\n // Check if tab should be rendered\n const shouldRenderContent = (item: TabItem) => {\n const isActive = activeKey() === item.key;\n const itemPreRender = item.pinned ? true : p.preRender;\n\n if (itemPreRender) {\n return renderedTabs().has(item.key) || isActive;\n }\n return isActive;\n };\n\n return (\n <div\n id={tabRootId}\n class={cn(\n 'tab01',\n getColor(p.color!),\n `tab${p.variants === 'box' ? '23' : p.variants === 'lift' ? '24' : '25'}`,\n `tab${p.tabPlacement === 'horizontal' ? '17' : '18'}`,\n `tab${computedPosition() === 'top' ? '19' : computedPosition() === 'bottom' ? '20' : computedPosition() === 'left' ? '21' : '22'}`,\n p.class?.root,\n )}\n >\n {/* Tab Header */}\n <div\n class={cn(\n 'tab02',\n `tab${p.align === 'left' ? '26' : p.align === 'center' ? '27' : '28'}`,\n headerVariant({\n variants: p.variants,\n tabPlacement: p.tabPlacement,\n position: p.position,\n }),\n p.class?.header,\n )}\n >\n <For each={sortedItems()}>\n {(item, index) => (\n <>\n {/* Separator between pinned and unpinned */}\n <Show when={hasPinnedAndUnpinned() && index() === firstUnpinnedIndex()}>\n <div class=\"tab14\" />\n </Show>\n\n {/* Tab Item */}\n <div\n class={cn(\n 'tab03',\n editingKey() === item.key && 'bg-base-100',\n activeKey() === item.key && 'tab04',\n item.pinned && 'tab05',\n item.disabled && 'pointer-events-none opacity-50',\n p.class?.item,\n )}\n onClick={() => handleTabClick(item)}\n onMouseDown={e => handleMouseDown(e, item)}\n onDblClick={e => handleDoubleClick(item, e)}\n >\n {/* Tab Icon */}\n <Show when={item.icon}>\n <span class=\"tab06\">{item.icon as Element}</span>\n </Show>\n\n {/* Tab Label */}\n <Show\n when={editingKey() === item.key}\n fallback={\n <Show\n when={p.useTooltip}\n fallback={\n <span class=\"tab07\">\n {item.label || `Tab ${p.items().findIndex(i => i.key === item.key) + 1}`}\n </span>\n }\n >\n {(() => {\n const label =\n item.label || `Tab ${p.items().findIndex(i => i.key === item.key) + 1}`;\n const needsTooltip = label.length > TOOLTIP_CHAR_THRESHOLD;\n if (!needsTooltip) {\n return <span class=\"tab07\">{label}</span>;\n }\n const opts = p.tooltipOptions ?? {};\n const isCustom = 'customContent' in opts && opts.customContent != null;\n const tooltipProps: Omit<TooltipDefaultProps, 'children'> = isCustom\n ? {\n type: 'default',\n position: 'top' as const,\n color: p?.color as BaseColorProps,\n customContent: (opts as { customContent: JSX.Element }).customContent,\n }\n : {\n type: 'default',\n position: 'top' as const,\n color: p?.color as BaseColorProps,\n content: (opts as { content?: string }).content ?? label,\n };\n return (\n <Tooltip {...(tooltipProps as TooltipDefaultProps)}>\n <span class=\"tab07\">{label}</span>\n </Tooltip>\n );\n })()}\n </Show>\n }\n >\n <input\n ref={el =>\n setTimeout(() => {\n el?.focus();\n el?.select();\n }, 0)\n }\n type=\"text\"\n class=\"tab16\"\n value={editingValue()}\n onInput={e => setEditingValue(e.currentTarget.value)}\n onBlur={() => handleRenameSubmit(item)}\n onKeyDown={e => handleRenameKeyDown(item, e)}\n onClick={e => e.stopPropagation()}\n />\n </Show>\n\n {/* Action Buttons */}\n <Show when={p.canPin || item.closable !== false}>\n <div class=\"tab08\">\n {/* Pin Button */}\n <Show when={p.canPin}>\n <button\n class=\"tab09 tab10\"\n onClick={e => handlePinTab(item, e)}\n title={item.pinned ? 'Unpin tab' : 'Pin tab'}\n >\n <Show when={item.pinned} fallback={<Pin size={12} />}>\n <PinOff size={12} />\n </Show>\n </button>\n </Show>\n\n {/* Close Button */}\n <Show when={item.closable !== false}>\n <button\n class=\"tab09 tab11\"\n onClick={e => {\n e.stopPropagation();\n handleRemoveTab(item);\n }}\n title=\"Close tab\"\n >\n <X size={12} />\n </button>\n </Show>\n </div>\n </Show>\n </div>\n </>\n )}\n </For>\n\n {/* Add Button */}\n <Show when={p.canAdd}>\n <button\n class={cn('tab12', p.class?.addButton)}\n onClick={handleAddTab}\n title=\"Add new tab\"\n >\n <Plus size={14} />\n </button>\n </Show>\n </div>\n\n {/* Tab Content */}\n <div class={cn('tab13', p.class?.content)}>\n <Show when={p.items().length === 0}>\n <div class=\"tab15\">\n <span>No tabs available</span>\n <Show when={p.canAdd}>\n <button class=\"tab12\" onClick={handleAddTab}>\n <Pin size={14} />\n </button>\n </Show>\n </div>\n </Show>\n\n <For each={p.items()}>\n {item => (\n <Show when={shouldRenderContent(item)}>\n <div class={cn('tab29 size-full', activeKey() !== item.key && 'hidden')}>\n {item.children as Element}\n </div>\n </Show>\n )}\n </For>\n </div>\n </div>\n );\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{chevron_right_default as n}from"../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/chevron-right.js";import{getColor as r}from"../../utils/helper.js";import{chevron_down_default as i}from"../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/chevron-down.js";import{Pagination as a}from"../pagination/pagination.js";import{Tooltip as o}from"../tooltip/tooltip.js";import{chevrons_up_down_default as s}from"../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/chevrons-up-down.js";import{chevron_up_default as c}from"../../node_modules/.pnpm/lucide-solid@1.8.0_solid-js@1.9.11/node_modules/lucide-solid/dist/source/icons/chevron-up.js";import{addEventListener as l,className as u,createComponent as d,delegateEvents as f,effect as p,insert as m,memo as h,mergeProps as g,setAttribute as _,setStyleProperty as v,style as y,template as b,use as x}from"solid-js/web";import{For as S,Match as C,Show as w,Switch as ee,createEffect as T,createMemo as E,createSignal as D,createUniqueId as te,mergeProps as ne,on as re,onCleanup as O,onMount as ie}from"solid-js";import{createVirtualizer as ae}from"@tanstack/solid-virtual";import{createSolidTable as oe,flexRender as k,getCoreRowModel as se,getFilteredRowModel as ce,getPaginationRowModel as le,getSortedRowModel as ue}from"@tanstack/solid-table";var A=b(`<div>`),de=b(`<colgroup>`),fe=b(`<div><table><thead>`),pe=b(`<thead>`),me=b(`<tr><td class="border-none p-0">`),he=b(`<tr><td class="border-none py-2"><div class="flex justify-center"><span class="loading loading-dots loading-sm opacity-60">`),ge=b(`<tr><td class="border-none py-2"><div class="flex justify-center">`),_e=b(`<tbody>`),ve=b(`<div><div><div><table>`),ye=b(`<col>`),be=b(`<tr>`),xe=b(`<span class=tbe20>`),Se=b(`<span class=tbe19>`),Ce=b(`<th><div><span class=tbe17>`),we=b(`<tr><td>`),Te=b(`<tr class=tbe31><td class=tbe32>`),Ee=b(`<td>`),De=b(`<tbody><tr><td class="border-none p-0"><div class="flex h-full items-center justify-center gap-2 opacity-60"><span class=text-base>Sorting</span><span class="loading loading-dots loading-sm text-base-content">`),Oe=b(`<input type=checkbox class="checkbox checkbox-xs checkbox-primary mx-auto">`),j=b(`<span class=cursor-pointer>`),M=b(`<input type=radio class="radio radio-xs radio-primary">`),ke=b(`<input type=checkbox class="checkbox checkbox-xs checkbox-primary">`),Ae=b(`<span class="tbe24 cursor-pointer">`);function je(e){if(e!==void 0)return e===!0?{outer:!0,horizontal:!0,vertical:!0}:e===!1?{outer:!1,horizontal:!1,vertical:!1}:e}function Me(e){switch(e){case!0:return{cols:!1,rows:!0};case!1:case void 0:return{cols:!1,rows:!1};default:return e}}var Ne={xs:`tbe02`,sm:`tbe03`,md:`tbe04`,lg:`tbe05`,xl:`tbe06`};function Pe(e){let t=[],n=Me(e.zebra);return n.rows&&t.push(`tbe07`),n.cols&&t.push(`tbe08`),e.size&&t.push(Ne[e.size]),t.join(` `)}function Fe(e){let t=new Map,n=0,r=null;for(let i of e){let e=i.fixed;(e===!0||e===`start`)&&(t.set(i.id,{fixed:`start`,offset:n,isLastStart:!1,isFirstEnd:!1}),n+=i.width,r=i.id)}let i=0,a=null;for(let n=e.length-1;n>=0;n--){let r=e[n];r.fixed===`end`&&(t.set(r.id,{fixed:`end`,offset:i,isLastStart:!1,isFirstEnd:!1}),i+=r.width,a||=r.id)}if(r){let e=t.get(r);e.isLastStart=!0}if(a){let e=t.get(a);e.isFirstEnd=!0}return t}function Ie(e){return typeof e==`number`?`${e}px`:e}var N=`__selection__`;function Le(e){let t,n=!1;return{columns:e.filter(e=>{let r=e.meta;return r?._selection?n?!1:(n=!0,t=r._selection,!0):!0}),selectionOptions:t}}var P=`__expanded__`;function Re(e){for(let t of e){let e=t.meta;if(e?._expanded)return e._expanded}}function F(n){let l=ne({zebra:{rows:!0},size:`md`,enableSorting:!1,enableColumnFilters:!1,resizable:!0,showHeader:!0,color:`info`,rounded:`rounded-sm`},n),f=E(()=>Le(l.columns)),b=()=>f().selectionOptions,Oe=()=>f().columns,j=E(()=>Re(l.columns)),M=E(()=>new Set(l.columns.filter(e=>`size`in e).map(e=>`accessorKey`in e?e.accessorKey:`id`in e?e.id:void 0))),ke=()=>l.enableRowSelection===void 0?!!b():l.enableRowSelection,Ae=()=>{let e=b();return e?e.type!==`radio`:!0},Me=()=>!!j(),[Ne,F]=D(l.defaultExpandedRowKeys??[]),ze=!1,Be=()=>{if(!Me())return[];if(l.expandedRowKeys!==void 0)return l.expandedRowKeys;if(l.defaultExpandAllRows&&!ze){ze=!0;let e=I.getRowModel().rows.map(e=>e.id);return F(e),e}return Ne()},Ve=e=>Be().includes(e);function He(e,t){let n=Be(),r=n.includes(e),i=r?n.filter(t=>t!==e):[...n,e];l.expandedRowKeys===void 0&&F(i),l.onExpand?.(!r,t),l.onExpandedRowsChange?.(i)}let[Ue,We]=D(l.data);T(re(()=>l.data,e=>We(e),{defer:!0}));let I=oe({get data(){return l.getVirtualData?Ue():l.data},get columns(){return Oe()},getCoreRowModel:se(),getSortedRowModel:ue(),...l.enableColumnFilters&&{getFilteredRowModel:ce()},...l.paginationProps!==void 0&&{getPaginationRowModel:le()},get enableSorting(){return l.enableSorting},isMultiSortEvent:()=>!0,get enableColumnFilters(){return l.enableColumnFilters},get enableRowSelection(){return ke()},get enableMultiRowSelection(){return Ae()},...l.getRowId&&{getRowId:l.getRowId},meta:{_expandApi:{isRowExpanded:Ve,toggleRowExpanded:He}},state:{get sorting(){return l.sorting},get columnFilters(){return l.columnFilters},get globalFilter(){return l.globalFilter},get rowSelection(){return l.rowSelection},get columnVisibility(){return l.columnVisibility},get pagination(){return l.pagination},...l.options?.state||{}},...l.onSortingChange&&{onSortingChange:l.onSortingChange},...l.onColumnFiltersChange&&{onColumnFiltersChange:l.onColumnFiltersChange},...l.onGlobalFilterChange&&{onGlobalFilterChange:l.onGlobalFilterChange},...l.onRowSelectionChange&&{onRowSelectionChange:l.onRowSelectionChange},...l.onColumnVisibilityChange&&{onColumnVisibilityChange:l.onColumnVisibilityChange},...l.options&&(()=>{let{state:e,...t}=l.options;return t})()}),L=()=>je(l.border),Ge=()=>I.getRowModel().rows.length===0,Ke=()=>l.columns.some(e=>e.meta?.fixed),R=()=>l.scroll?.x,qe=()=>{let e=R();if(e!==void 0&&!(e===!0||e===`max-content`))return Ie(e)},Je=()=>{let e=R();if(e===void 0)return;if(e===`max-content`)return`max-content`;let t=$();return`${I.getAllLeafColumns().reduce((e,n)=>n.id===N||n.id===P?e+n.getSize():t?e+(t[n.id]??100):e+(G()[n.id]??n.getSize()),0)}px`},Ye=()=>{let e=l.scroll?.y;if(e!==void 0)return Ie(e)},Xe=()=>R()!==void 0||l.scroll?.y!==void 0,Ze=()=>R()!==void 0,z=()=>l.scroll?.y!==void 0,Qe=E(()=>{let e=l.virtual;return e?e===!0?{itemSize:40,overscan:5}:{itemSize:e.itemSize??40,overscan:e.overscan??5}:null}),B=()=>!!Qe(),V,$e,H=ae({get count(){return B()?I.getRowModel().rows.length:0},getScrollElement:()=>B()?V:null,estimateSize:()=>Qe()?.itemSize??40,get overscan(){return Qe()?.overscan??5},measureElement:e=>{let t=e.getBoundingClientRect().height,n=e.nextElementSibling;return n?.classList.contains(`tbe31`)&&(t+=n.getBoundingClientRect().height),t}}),et=E(()=>{if(!B())return 0;let e=H.getVirtualItems();return e.length>0?e[0]?.start??0:0}),tt=E(()=>{if(!B())return 0;let e=H.getVirtualItems(),t=H.getTotalSize();return e.length>0?t-(e[e.length-1]?.end??0):0}),[nt,rt]=D(!1),it=null;O(function(){it!==null&&clearTimeout(it)});function at(e,t){if(nt())return;let n=I.getColumn(t);if(!n?.getCanSort())return;rt(!0);let r=Date.now();setTimeout(()=>{n.getToggleSortingHandler()?.(e);let t=Date.now()-r,i=Math.max(0,500-t);it=setTimeout(()=>{it=null,rt(!1),V&&(V.scrollTop=0)},i)},0)}let ot=Promise.resolve(void 0),[U,st]=D(!1);function ct(){!l.getVirtualData||U()||(st(!0),l.getVirtualData().then(e=>{We(t=>[...t,...e])}).finally(()=>{st(!1)}))}T(function(){!B()||l.loadingMore!==`auto`||U()||(ot=ot.then(()=>new Promise(e=>{queueMicrotask(()=>{V&&V.isConnected&&l.getVirtualData&&l.loadingMore===`auto`&&!U()&&V.scrollHeight<=V.clientHeight&&ct(),e()})})))}),T(function(){l.onTableReady?.(I)});function lt(e,t){let n=e.column.columnDef.meta?.onCell;return n?n(e,t):l.onCell?.(e,t)??{}}let W,ut,dt=te(),[G,K]=D({}),[ft,pt]=D(-1),[mt,ht]=D([]),q=E(()=>R()===void 0&&l.resizable!==!1),gt=`thead tr:first-child th:not(.tbe23):not(.tbe22)`;function J(){return I.getAllLeafColumns().filter(e=>e.id!==P&&e.id!==N)}function Y(e){return Math.min(e.getSize(),e.columnDef.meta?.minWidth??100)}function _t(){let e=W.querySelectorAll(gt),t=J(),n={};t.forEach((t,r)=>{e[r]&&(n[t.id]=e[r].getBoundingClientRect().width)});let r=Array.from(W.querySelectorAll(`thead tr:first-child th`)).reduce((e,t)=>e+t.getBoundingClientRect().width,0)-W.getBoundingClientRect().width;if(r>0&&t.length>0){let e=t[t.length-1].id;n[e]!==void 0&&(n[e]=Math.max(Y(t[t.length-1]),n[e]-r))}return n}function X(){if(!W)return;let e=W.querySelectorAll(gt),t=J(),n,r;if(z()){let e=$e?.getBoundingClientRect(),t=V?.getBoundingClientRect();n=e?.top??0,r=(e?.height??0)+(t?.height??0)}else{let e=W.getBoundingClientRect();n=e.top,r=e.height}let i=[];for(let a=0;a<e.length;a++){let o=t[a];if(!o||o.columnDef.enableResizing===!1)continue;let s=e[a].getBoundingClientRect();i.push({left:s.right,top:n,height:r,colIndex:a})}ht(i)}function vt(e,t){t.preventDefault(),t.stopPropagation();let n=J(),r=n.length-1,i=e===r,a=n[e].id,o=n[r].id,s=_t();K(s);let c=t.clientX,l=s[a]||0,u=Y(n[e]);pt(e);let d;if(i){let e=Object.values(s).reduce((e,t)=>e+t,0),t=n.slice(0,r),i=t.reduce((e,t)=>e+Y(t),0);d=n=>{let r=n.clientX-c,a=Math.max(u,Math.min(e-i,l+r)),s=e-a,d=t.length>0?s/t.length:s,f={};t.forEach(e=>{f[e.id]=Math.max(Y(e),d)}),f[o]=a,K(f),queueMicrotask(()=>X())}}else{let t=e+1,r=n[t].id,i=s[r]||0,o=Y(n[t]);d=e=>{let t=e.clientX-c,n=u-l,s=i-o,d=Math.max(n,Math.min(s,t));K(e=>({...e,[a]:l+d,[r]:i-d})),queueMicrotask(()=>X())}}let f=()=>{pt(-1),document.removeEventListener(`mousemove`,d),document.removeEventListener(`mouseup`,f),document.documentElement.classList.remove(`tbe-resizing`)};document.addEventListener(`mousemove`,d),document.addEventListener(`mouseup`,f),document.documentElement.classList.add(`tbe-resizing`)}function yt(e,t){t.preventDefault(),t.stopPropagation();let n=J(),r=Object.keys(G()).length>0?G():_t();if(e===n.length-1){let e=n.reduce((e,t)=>e+(r[t.id]??t.getSize()),0)/n.length,t={};n.forEach(n=>{t[n.id]=Math.max(Y(n),e)}),K(t)}else{let t=n[e].id,i=n[e+1].id,a=r[t]??n[e].getSize(),o=r[i]??n[e+1].getSize(),s=(a+o)/2,c=Math.max(Y(n[e]),s),l=Math.max(Y(n[e+1]),a+o-c);K(e=>({...r,...e,[t]:c,[i]:l}))}queueMicrotask(()=>X())}let Z=()=>Object.keys(G()).length>0,Q=E(()=>{if(!Z())return null;let e=G();return`${I.getAllLeafColumns().reduce((t,n)=>t+(e[n.id]??n.getSize()),0)}px`}),$=E(()=>{if(!Ze())return null;let e=J(),t=R(),n=e.filter(e=>M().has(e.id)),r=e.filter(e=>!M().has(e.id)),i=n.reduce((e,t)=>e+t.getSize(),0),a=r.length,o;if(typeof t==`number`){let e=t-i;o=a>0?Math.max(100,e/a):100}else o=100;let s={};return e.forEach(e=>{s[e.id]=M().has(e.id)?e.getSize():o}),s}),bt=()=>M().size>0||Z()||Ze(),[xt,St]=D({});function Ct(){if(!W)return;let e=W.querySelectorAll(gt),t=J(),n={};t.forEach((t,r)=>{e[r]&&(n[t.id]=e[r].offsetWidth)}),St(n)}let wt=E(()=>{let e=xt();return Object.keys(e).length===0?new Map:Fe(I.getAllLeafColumns().map(t=>({id:t.id,fixed:t.columnDef.meta?.fixed,width:e[t.id]||0})))});function Tt(e){let t=wt().get(e);if(t){if(t.fixed===`start`)return{left:`${t.offset}px`};if(t.fixed===`end`)return{right:`${t.offset}px`}}}function Et(t){let n=wt().get(t);return n?e(`tbe33`,n.isLastStart&&`tbe34`,n.isFirstEnd&&`tbe35`):``}let Dt={start:`justify-start`,center:`justify-center`,end:`justify-end`},Ot={start:`align-start`,center:`align-center`,end:`align-end`},kt={start:`text-left`,center:`text-center`,end:`text-right`};function At(e){return I.getColumn(e)?.columnDef.meta?.align??`start`}function jt(e){return!!I.getColumn(e)?.columnDef.meta?.tooltip}function Mt(e,t,n){let r=I.getColumn(e)?.columnDef.meta?.tooltip;if(!r)return n;let i=r.content,a=typeof i==`function`?i(t):i;return d(o,g({type:`portal`},{...r,...a!==void 0&&{content:a},containerId:dt,position:r.position??`top`,class:{root:`tbe-tt-cell`}},{children:n}))}function Nt(e){let t=e.target,n=e=>{let t=e.closest(`table`);return t===W||t===ut},r=t.closest(`th[data-column-id]`);if(r&&n(r)){let t=r.dataset.columnId;if(t)if(B()&&l.enableSorting)at(e,t);else{let n=I.getColumn(t);n?.getCanSort()&&n.getToggleSortingHandler()?.(e)}return}let i=t.closest(`td.tbe22`);if(i&&n(i)){let e=i.closest(`tr[data-row-id]`);if(e){let t=e.dataset.rowId;if(t!==void 0){let e=I.getRow(t);e?.getCanSelect()&&e.toggleSelected()}}return}let a=t.closest(`td.tbe23`);if(a&&n(a)){let e=a.closest(`tr[data-row-id]`);if(e){let t=e.dataset.rowId;if(t!==void 0){let e=I.getRow(t);if(e){let t=j();(!t?.rowExpandable||t.rowExpandable(e.original,e.index))&&He(e.id,e.original)}}}return}let o=t.closest(`tr[data-row-id]`);if(o&&n(o)&&l.onRowClick){let t=o.dataset.rowId;if(t!==void 0){let n=I.getRow(t);n&&l.onRowClick(n,e)}}}return ie(()=>{if(q()&&(X(),window.addEventListener(`scroll`,X,{passive:!0,capture:!0}),O(function(){window.removeEventListener(`scroll`,X,{capture:!0})})),Ke()&&Ct(),q()||Ke()){let e=new ResizeObserver(()=>{q()&&X(),Ke()&&Ct()});e.observe(W),O(function(){e.disconnect()})}if(B()){let e=()=>{if(!l.getVirtualData||l.loadingMore!==`auto`)return;let e=Qe(),t=(e?.itemSize??40)*(e?.overscan??5);V.scrollTop+V.clientHeight>=V.scrollHeight-t&&ct()};V.addEventListener(`scroll`,e,{passive:!0}),O(function(){V.removeEventListener(`scroll`,e)})}if(z()){let e=()=>{$e&&($e.scrollLeft=V.scrollLeft),q()&&X()};V.addEventListener(`scroll`,e,{passive:!0}),O(()=>V.removeEventListener(`scroll`,e))}}),(()=>{var n=ve(),o=n.firstChild,f=o.firstChild,b=f.firstChild;return m(n,d(w,{get when(){return h(()=>l.paginationProps!==void 0&&!l.virtual)()&&l.paginationProps?.position===`start`},get children(){return d(a,g(()=>l.paginationProps,{onChange:(e,t)=>{I.setPageIndex(e-1),t!==I.getState().pagination.pageSize&&I.setPageSize(t),l.paginationProps?.onChange?.(e,t)}}))}}),o),m(o,d(w,{get when(){return l.headerPanel},get children(){var t=A();return m(t,()=>l.headerPanel?.()),p(()=>u(t,e(`tbe40`,L()?.outer&&`tbe41`,l.class?.headerPanel))),t}}),f),m(o,d(w,{get when(){return h(()=>!!z())()&&l.showHeader},get children(){var t=fe(),n=t.firstChild,r=n.firstChild;x(e=>$e=e,t),n.$$click=Nt;var a=W;return typeof a==`function`?x(a,n):W=n,m(n,d(w,{get when(){return bt()},get children(){var e=de();return m(e,d(S,{get each(){return I.getAllLeafColumns()},children:e=>{let t=()=>e.id===P||e.id===N;return(()=>{var n=ye();return p(r=>y(n,{...t()?{width:`${e.getSize()}px`}:Z()?{width:`${G()[e.id]||e.getSize()}px`}:$()?{width:`${$()[e.id]??100}px`}:M().has(e.id)?{width:`${e.getSize()}px`}:{}},r)),n})()}})),e}}),r),m(r,d(S,{get each(){return I.getHeaderGroups()},children:(t,n)=>{let r=I.getHeaderGroups().length,a=new Set(I.getHeaderGroups().slice(0,n()).flatMap(e=>e.headers.filter(e=>e.isPlaceholder&&e.column.getLeafColumns().length===1).map(e=>e.column.id)));return(()=>{var o=be();return m(o,d(S,{get each(){return t.headers},children:t=>{if(a.has(t.column.id))return null;let o=t.isPlaceholder&&t.column.getLeafColumns().length===1,f=o?r-n():1;if(t.isPlaceholder&&!o)return null;let g=t.column.columnDef.meta?.onHeaderCell?.(t)??{};if(g.colSpan===0)return null;let v=g.colSpan??t.colSpan,b=g.rowSpan??(f>1?f:void 0);return(()=>{var n=Ce(),r=n.firstChild,a=r.firstChild;return _(n,`colspan`,v),_(n,`rowspan`,b),m(a,()=>k(t.column.columnDef.header,t.getContext())),m(r,d(w,{get when(){return t.column.getCanSort()},get children(){var e=Se();return m(e,d(ee,{get fallback(){return d(s,{size:14,"stroke-width":3,color:`var(--color)`})},get children(){return[d(C,{get when(){return t.column.getIsSorted()===`asc`},get children(){return d(c,{size:14,"stroke-width":3,color:`var(--color)`})}}),d(C,{get when(){return t.column.getIsSorted()===`desc`},get children(){return d(i,{size:14,"stroke-width":3,color:`var(--color)`})}})]}}),null),m(e,d(w,{get when(){return h(()=>t.column.getIsSorted()!==!1&&(t.column.getSortIndex()??-1)>=0)()&&I.getState().sorting.length>1},get children(){var e=xe();return m(e,()=>(t.column.getSortIndex()??0)+1),e}}),null),e}}),null),p(i=>{var a=e(l.class?.th,t.column.getCanSort()&&`tbe18`,t.column.id===N&&`tbe22`,t.column.id===P&&`tbe23`,Et(t.column.id)),o=t.column.id,s=Tt(t.column.id),c=e(`tbe15`,(M().has(t.column.id)||Z())&&t.column.id!==N&&t.column.id!==P&&`tbe16`,t.column.id!==N&&t.column.id!==P&&Dt[At(t.column.id)]);return a!==i.e&&u(n,i.e=a),o!==i.t&&_(n,`data-column-id`,i.t=o),i.a=y(n,s,i.a),c!==i.o&&u(r,i.o=c),i},{e:void 0,t:void 0,a:void 0,o:void 0}),n})()}})),p(()=>u(o,e(l.class?.tr,l.class?.headerRow))),o})()}})),p(i=>{var a=e(`tbe12`,`tbe14-hdr`),o=e(`tbe01`,Pe(l),L()?.horizontal&&`tbe43`,L()?.vertical&&`tbe44`,bt()&&`table-fixed`,l.class?.table),s={...Q()?{width:Q(),"min-width":Q()}:Je()?{"min-width":Je()}:{}},c=e(l.class?.thead,nt()?`pointer-events-none cursor-wait`:``);return a!==i.e&&u(t,i.e=a),o!==i.t&&u(n,i.t=o),i.a=y(n,s,i.a),c!==i.o&&u(r,i.o=c),i},{e:void 0,t:void 0,a:void 0,o:void 0}),t}}),f),x(e=>V=e,f),b.$$click=Nt,x(e=>{ut=e,z()||(W=e)},b),m(b,d(w,{get when(){return bt()},get children(){var e=de();return m(e,d(S,{get each(){return I.getAllLeafColumns()},children:e=>{let t=()=>e.id===P||e.id===N;return(()=>{var n=ye();return p(r=>y(n,{...t()?{width:`${e.getSize()}px`}:Z()?{width:`${G()[e.id]||e.getSize()}px`}:$()?{width:`${$()[e.id]??100}px`}:M().has(e.id)?{width:`${e.getSize()}px`}:{}},r)),n})()}})),e}}),null),m(b,d(w,{get when(){return h(()=>!z())()&&l.showHeader},get children(){var t=pe();return m(t,d(S,{get each(){return I.getHeaderGroups()},children:(t,n)=>{let r=I.getHeaderGroups().length,a=new Set(I.getHeaderGroups().slice(0,n()).flatMap(e=>e.headers.filter(e=>e.isPlaceholder&&e.column.getLeafColumns().length===1).map(e=>e.column.id)));return(()=>{var o=be();return m(o,d(S,{get each(){return t.headers},children:t=>{if(a.has(t.column.id))return null;let o=t.isPlaceholder&&t.column.getLeafColumns().length===1,f=o?r-n():1;if(t.isPlaceholder&&!o)return null;let g=t.column.columnDef.meta?.onHeaderCell?.(t)??{};if(g.colSpan===0)return null;let v=g.colSpan??t.colSpan,b=g.rowSpan??(f>1?f:void 0);return(()=>{var n=Ce(),r=n.firstChild,a=r.firstChild;return _(n,`colspan`,v),_(n,`rowspan`,b),m(a,()=>k(t.column.columnDef.header,t.getContext())),m(r,d(w,{get when(){return t.column.getCanSort()},get children(){var e=Se();return m(e,d(ee,{get fallback(){return d(s,{size:14,"stroke-width":3,color:`var(--color)`})},get children(){return[d(C,{get when(){return t.column.getIsSorted()===`asc`},get children(){return d(c,{size:14,"stroke-width":3,color:`var(--color)`})}}),d(C,{get when(){return t.column.getIsSorted()===`desc`},get children(){return d(i,{size:14,"stroke-width":3,color:`var(--color)`})}})]}}),null),m(e,d(w,{get when(){return h(()=>t.column.getIsSorted()!==!1&&(t.column.getSortIndex()??-1)>=0)()&&I.getState().sorting.length>1},get children(){var e=xe();return m(e,()=>(t.column.getSortIndex()??0)+1),e}}),null),e}}),null),p(i=>{var a=e(l.class?.th,t.column.getCanSort()&&`tbe18`,t.column.id===N&&`tbe22`,t.column.id===P&&`tbe23`,Et(t.column.id)),o=t.column.id,s=Tt(t.column.id),c=e(`tbe15`,(M().has(t.column.id)||Z())&&t.column.id!==N&&t.column.id!==P&&`tbe16`,t.column.id!==N&&t.column.id!==P&&Dt[At(t.column.id)]);return a!==i.e&&u(n,i.e=a),o!==i.t&&_(n,`data-column-id`,i.t=o),i.a=y(n,s,i.a),c!==i.o&&u(r,i.o=c),i},{e:void 0,t:void 0,a:void 0,o:void 0}),n})()}})),p(()=>u(o,e(l.class?.tr,l.class?.headerRow))),o})()}})),p(()=>u(t,e(l.class?.thead,nt()?`pointer-events-none cursor-wait`:``))),t}}),null),m(b,d(w,{get when(){return h(()=>!!B())()&&!Ge()},get fallback(){return(()=>{var t=_e();return _(t,`id`,dt),m(t,d(w,{get when(){return!Ge()},get fallback(){return(()=>{var t=we(),n=t.firstChild;return m(n,()=>l.emptyContent??`No data`),p(t=>{var r=I.getAllColumns().length,i=e(`tbe45`,l.class?.empty);return r!==t.e&&_(n,`colspan`,t.e=r),i!==t.t&&u(n,t.t=i),t},{e:void 0,t:void 0}),t})()},get children(){return d(S,{get each(){return I.getRowModel().rows},children:(t,n)=>{let r=()=>Ve(t.id),i=j();return[(()=>{var i=be();return m(i,d(S,{get each(){return t.getVisibleCells()},children:t=>{let r=t.column.id===N||t.column.id===P,i=r?`start`:At(t.column.id),a=!r&&jt(t.column.id),o=lt(t,n());return o.colSpan===0||o.rowSpan===0?null:(()=>{var n=Ee();return m(n,d(w,{get when(){return(M().has(t.column.id)||Z())&&!r},get fallback(){return Mt(t.column.id,t.getValue(),k(t.column.columnDef.cell,t.getContext()))},get children(){var n=A();return m(n,()=>Mt(t.column.id,t.getValue(),k(t.column.columnDef.cell,t.getContext()))),p(()=>u(n,e(`tbe21`,Ot[i]))),n}})),p(s=>{var c=e(l.class?.td,t.column.id===N&&`tbe22`,t.column.id===P&&`tbe23`,Et(t.column.id),a&&`relative`,!r&&kt[i]),d={...Tt(t.column.id)},f=o.colSpan,p=o.rowSpan;return c!==s.e&&u(n,s.e=c),s.t=y(n,d,s.t),f!==s.a&&_(n,`colspan`,s.a=f),p!==s.o&&_(n,`rowspan`,s.o=p),s},{e:void 0,t:void 0,a:void 0,o:void 0}),n})()}})),p(a=>{var o=e(l.class?.tr,l.class?.bodyRow,t.getIsSelected()&&`tbe27`,r()&&`tbe28`,n()%2==0?`tbe29`:`tbe30`),s=t.id;return o!==a.e&&u(i,a.e=o),s!==a.t&&_(i,`data-row-id`,a.t=s),a},{e:void 0,t:void 0}),i})(),d(w,{get when(){return h(()=>!!Me())()&&r()},get children(){var e=Te(),r=e.firstChild;return m(r,()=>i.expandedRowRender(t.original,n(),0,!0)),p(()=>_(r,`colspan`,t.getVisibleCells().length)),e}})]}})}})),p(()=>u(t,e(l.class?.tbody))),t})()},get children(){return d(w,{get when(){return!nt()},get fallback(){return(()=>{var e=De(),t=e.firstChild.firstChild;return p(e=>{var n=I.getAllColumns().length,r=Ye()??`200px`;return n!==e.e&&_(t,`colspan`,e.e=n),r!==e.t&&v(t,`height`,e.t=r),e},{e:void 0,t:void 0}),e})()},get children(){var n=_e();return _(n,`id`,dt),m(n,d(w,{get when(){return et()>0},get children(){var e=me(),t=e.firstChild;return p(e=>{var n=I.getAllColumns().length,r=`${et()}px`;return n!==e.e&&_(t,`colspan`,e.e=n),r!==e.t&&v(t,`height`,e.t=r),e},{e:void 0,t:void 0}),e}}),null),m(n,d(S,{get each(){return H.getVirtualItems()},children:t=>{let n=I.getRowModel().rows[t.index],r=t.index;if(!n)return null;let i=()=>Ve(n.id),a=j(),o;return T(re(i,()=>{queueMicrotask(()=>{o?.isConnected&&o.hasAttribute(`data-index`)&&H.measureElement(o)})},{defer:!0})),[(()=>{var a=be();return x(e=>{o=e,e&&queueMicrotask(()=>{e.isConnected&&H.measureElement(e)})},a),m(a,d(S,{get each(){return n.getVisibleCells()},children:t=>{let n=t.column.id===N||t.column.id===P,r=n?`start`:At(t.column.id),i=!n&&jt(t.column.id);return(()=>{var a=Ee();return m(a,d(w,{get when(){return(M().has(t.column.id)||Z())&&!n},get fallback(){return Mt(t.column.id,t.getValue(),k(t.column.columnDef.cell,t.getContext()))},get children(){var n=A();return m(n,()=>Mt(t.column.id,t.getValue(),k(t.column.columnDef.cell,t.getContext()))),p(()=>u(n,e(`tbe21`,Ot[r]))),n}})),p(o=>{var s=e(l.class?.td,t.column.id===N&&`tbe22`,t.column.id===P&&`tbe23`,Et(t.column.id),i&&`relative p-0`,!n&&kt[r]),c={...Tt(t.column.id)};return s!==o.e&&u(a,o.e=s),o.t=y(a,c,o.t),o},{e:void 0,t:void 0}),a})()}})),p(o=>{var s=t.index,c=e(l.class?.tr,l.class?.bodyRow,n.getIsSelected()&&`tbe27`,i()&&`tbe28`,r%2==0?`tbe29`:`tbe30`),d=n.id;return s!==o.e&&_(a,`data-index`,o.e=s),c!==o.t&&u(a,o.t=c),d!==o.a&&_(a,`data-row-id`,o.a=d),o},{e:void 0,t:void 0,a:void 0}),a})(),d(w,{get when(){return h(()=>!!Me())()&&i()},get children(){var e=Te(),t=e.firstChild;return m(t,()=>a.expandedRowRender(n.original,r,0,!0)),p(()=>_(t,`colspan`,n.getVisibleCells().length)),e}})]}}),null),m(n,d(w,{get when(){return tt()>0},get children(){var e=me(),t=e.firstChild;return p(e=>{var n=I.getAllColumns().length,r=`${tt()}px`;return n!==e.e&&_(t,`colspan`,e.e=n),r!==e.t&&v(t,`height`,e.t=r),e},{e:void 0,t:void 0}),e}}),null),m(n,d(ee,{get children(){return[d(C,{get when(){return h(()=>l.loadingMore===`auto`)()&&U()},get children(){var e=he(),t=e.firstChild;return p(()=>_(t,`colspan`,I.getAllColumns().length)),e}}),d(C,{get when(){return l.loadingMore===`manual`},get children(){var e=ge(),n=e.firstChild,r=n.firstChild;return m(r,d(t,{variant:`default`,get color(){return l.color},get loading(){return U()},onClick:()=>ct(),get size(){return l.size},children:`Load more`})),p(()=>_(n,`colspan`,I.getAllColumns().length)),e}})]}}),null),p(()=>u(n,l.class?.tbody)),n}})}}),null),m(o,d(w,{get when(){return q()},get children(){return d(S,{get each(){return mt()},children:t=>(()=>{var n=A();return n.$$dblclick=e=>yt(t.colIndex,e),n.$$mousedown=e=>vt(t.colIndex,e),p(r=>{var i=e(`tbe37`,ft()===t.colIndex&&`tbe38`),a=`${t.left}px`,o=`${t.top}px`,s=`${t.height}px`;return i!==r.e&&u(n,r.e=i),a!==r.t&&v(n,`left`,r.t=a),o!==r.a&&v(n,`top`,r.a=o),s!==r.o&&v(n,`height`,r.o=s),r},{e:void 0,t:void 0,a:void 0,o:void 0}),n})()})}}),null),m(o,d(w,{get when(){return l.footerPanel},get children(){var t=A();return m(t,()=>l.footerPanel?.()),p(()=>u(t,e(`tbe40`,L()?.outer&&`border-c3/50 border-t`,l.class?.tfoot))),t}}),null),m(n,d(w,{get when(){return h(()=>l.paginationProps!==void 0&&!l.virtual)()&&(l.paginationProps?.position??`end`)===`end`},get children(){return d(a,g(()=>l.paginationProps,{onChange:(e,t)=>{I.setPageIndex(e-1),t!==I.getState().pagination.pageSize&&I.setPageSize(t),l.paginationProps?.onChange?.(e,t)}}))}}),null),p(t=>{var i=e(`tbe09`,l.paginationProps!==void 0&&`tbe10`),a=e(`tbe11`,L()?.outer&&`tbe42`,q()&&`tbe36`,ft()>=0&&`tbe39`,(Ke()||z())&&`tbe13`,r(l.color),l.rounded,l.rounded&&`overflow-hidden`,l.class?.root),s={...qe()?{"max-width":qe()}:{},...Ze()&&l.rounded?{"overflow-x":`clip`}:{}},c=e(`tbe12`,Xe()&&`tbe14`),d={...Ye()?{"max-height":Ye()}:{}},p=e(`tbe01`,Pe(l),L()?.horizontal&&`tbe43`,L()?.vertical&&`tbe44`,bt()&&`table-fixed`,l.class?.table),m={...Q()?{width:Q(),"min-width":Q()}:Je()?{"min-width":Je()}:{}};return i!==t.e&&u(n,t.e=i),a!==t.t&&u(o,t.t=a),t.a=y(o,s,t.a),c!==t.o&&u(f,t.o=c),t.i=y(f,d,t.i),p!==t.n&&u(b,t.n=p),t.s=y(b,m,t.s),t},{e:void 0,t:void 0,a:void 0,o:void 0,i:void 0,n:void 0,s:void 0}),n})()}F.Selection=function(e){let t={type:`checkbox`,hideSelectAll:!1,width:32,...e};return{id:N,size:typeof t.width==`number`?t.width:48,enableSorting:!1,enableResizing:!1,meta:{_selection:t},header:({table:e})=>t.title===void 0?t.type===`radio`||t.hideSelectAll?null:(()=>{var t=Oe();return l(t,`change`,e.getToggleAllRowsSelectedHandler()),x(t=>{T(function(){t.indeterminate=e.getIsSomeRowsSelected()})},t),p(()=>t.checked=e.getIsAllRowsSelected()),t})():t.title,cell:({row:e})=>{let n=e.index,r=()=>e.getIsSelected(),i=e.original;return t.renderCell?(()=>{var a=j();return a.$$click=t=>{t.stopPropagation(),e.toggleSelected()},m(a,()=>t.renderCell(r(),i,n)),a})():t.type===`radio`?(()=>{var t=M();return t.$$click=e=>e.stopPropagation(),l(t,`change`,e.getToggleSelectedHandler()),p(()=>t.disabled=!e.getCanSelect()),p(()=>t.checked=r()),t})():(()=>{var t=ke();return t.$$click=e=>e.stopPropagation(),l(t,`change`,e.getToggleSelectedHandler()),p(()=>t.disabled=!e.getCanSelect()),p(()=>t.checked=r()),t})()}}},F.Expanded=function(t){return t=ne({width:48},t),{id:P,size:t.width,enableSorting:!1,enableResizing:!1,meta:{_expanded:t},header:()=>null,cell:({row:r,table:i})=>{let a=r.index,o=r.original,s=i.options.meta?._expandApi;if(!(!t.rowExpandable||t.rowExpandable(o,a))||!s)return null;let c=()=>s.isRowExpanded(r.id);return(()=>{var i=Ae();return i.$$click=e=>{e.stopPropagation(),s.toggleRowExpanded(r.id,o)},m(i,d(w,{get when(){return t.expandIcon},get fallback(){return d(n,{size:16,"stroke-width":2,get class(){return e(`tbe25`,c()&&`tbe26`)}})},get children(){return t.expandIcon(c())}})),i})()}}},f([`click`,`mousedown`,`dblclick`]);export{F as Table};
2
- //# sourceMappingURL=table.js.map