solid-tom-ui 1.0.5 → 1.0.7

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 (509) hide show
  1. package/README.md +246 -237
  2. package/components/avatar/avatar.js.map +1 -0
  3. package/components/badge/badge.js.map +1 -0
  4. package/components/breadcrumb/breadcrumb.js.map +1 -0
  5. package/components/button/button.js.map +1 -0
  6. package/components/carousel/carousel.js.map +1 -0
  7. package/components/chat-bubble/chatBubble.js.map +1 -0
  8. package/components/checkbox/checkbox.js.map +1 -0
  9. package/components/collapse/collapse.js.map +1 -0
  10. package/components/context-menu/context-menu.js.map +1 -0
  11. package/components/context-menu/context-menu.store.js.map +1 -0
  12. package/components/divider/divider.js.map +1 -0
  13. package/components/dropdown/dropdown.js.map +1 -0
  14. package/components/dropdown/dropdown.store.js.map +1 -0
  15. package/components/float-button/float-button.js.map +1 -0
  16. package/components/hover-3d-image/hover-3d-image.js.map +1 -0
  17. package/components/image-preview/image-preview.js.map +1 -0
  18. package/components/input/input.js.map +1 -0
  19. package/components/input/input.utils.js.map +1 -0
  20. package/components/input/variants/input-color.js.map +1 -0
  21. package/components/input/variants/input-date.js.map +1 -0
  22. package/components/input/variants/input-number.js.map +1 -0
  23. package/components/input/variants/input-otp.js.map +1 -0
  24. package/components/input/variants/input-password.js.map +1 -0
  25. package/components/input/variants/input-radio.js.map +1 -0
  26. package/components/input/variants/input-range.js.map +1 -0
  27. package/components/input/variants/input-text.js.map +1 -0
  28. package/components/input/variants/input-textarea.js.map +1 -0
  29. package/components/loading/loading.js.map +1 -0
  30. package/components/mansory/mansory.js.map +1 -0
  31. package/components/menu/menu.js.map +1 -0
  32. package/components/modal/modal.js.map +1 -0
  33. package/components/modal/modalContext.js.map +1 -0
  34. package/components/pagination/pagination.js.map +1 -0
  35. package/components/progress-bar/progress-bar.js.map +1 -0
  36. package/components/qr-code/qr-code.js.map +1 -0
  37. package/components/select/select.js.map +1 -0
  38. package/components/select-zone/select-zone.js.map +1 -0
  39. package/components/skeleton/skeleton.js.map +1 -0
  40. package/components/slider/slider.js.map +1 -0
  41. package/components/splitter/splitter.js.map +1 -0
  42. package/components/steps/steps.js.map +1 -0
  43. package/components/swap/swap.js.map +1 -0
  44. package/components/switch/switch.js.map +1 -0
  45. package/components/tab/tab.js.map +1 -0
  46. package/components/table/table.js.map +1 -0
  47. package/components/timeline/timeline.js.map +1 -0
  48. package/components/toast/icons/ErrorIcon.js.map +1 -0
  49. package/components/toast/icons/IconCircle.js.map +1 -0
  50. package/components/toast/icons/InfoIcon.js.map +1 -0
  51. package/components/toast/icons/LoaderIcon.js.map +1 -0
  52. package/components/toast/icons/SuccessIcon.js.map +1 -0
  53. package/components/toast/icons/WarningIcon.js.map +1 -0
  54. package/components/toast/toast.js.map +1 -0
  55. package/components/toast/toast.store.js.map +1 -0
  56. package/components/tooltip/tooltip.js.map +1 -0
  57. package/components/tour/tour.js.map +1 -0
  58. package/components/upload/upload.js.map +1 -0
  59. package/components/z-index/z-index.context.js.map +1 -0
  60. package/components/z-index/z-index.js.map +1 -0
  61. package/components/z-index/z-index.store.js.map +1 -0
  62. package/components/z-index/z-index.types.js.map +1 -0
  63. package/package.json +14 -96
  64. package/utils/cn.js.map +1 -0
  65. package/utils/element-tracker.js.map +1 -0
  66. package/utils/helper.js.map +1 -0
  67. package/utils/hoc.js.map +1 -0
  68. package/workspace.code-workspace +8 -0
  69. package/dist/components/avatar/avatar.js.map +0 -1
  70. package/dist/components/badge/badge.js.map +0 -1
  71. package/dist/components/breadcrumb/breadcrumb.js.map +0 -1
  72. package/dist/components/button/button.js.map +0 -1
  73. package/dist/components/carousel/carousel.js.map +0 -1
  74. package/dist/components/chat-bubble/chatBubble.js.map +0 -1
  75. package/dist/components/checkbox/checkbox.js.map +0 -1
  76. package/dist/components/collapse/collapse.js.map +0 -1
  77. package/dist/components/context-menu/context-menu.js.map +0 -1
  78. package/dist/components/context-menu/context-menu.store.js.map +0 -1
  79. package/dist/components/divider/divider.js.map +0 -1
  80. package/dist/components/dropdown/dropdown.js.map +0 -1
  81. package/dist/components/dropdown/dropdown.store.js.map +0 -1
  82. package/dist/components/float-button/float-button.js.map +0 -1
  83. package/dist/components/hover-3d-image/hover-3d-image.js.map +0 -1
  84. package/dist/components/image-preview/image-preview.js.map +0 -1
  85. package/dist/components/input/input.js.map +0 -1
  86. package/dist/components/input/input.utils.js.map +0 -1
  87. package/dist/components/input/variants/input-color.js.map +0 -1
  88. package/dist/components/input/variants/input-date.js.map +0 -1
  89. package/dist/components/input/variants/input-number.js.map +0 -1
  90. package/dist/components/input/variants/input-otp.js.map +0 -1
  91. package/dist/components/input/variants/input-password.js.map +0 -1
  92. package/dist/components/input/variants/input-radio.js.map +0 -1
  93. package/dist/components/input/variants/input-range.js.map +0 -1
  94. package/dist/components/input/variants/input-text.js.map +0 -1
  95. package/dist/components/input/variants/input-textarea.js.map +0 -1
  96. package/dist/components/loading/loading.js.map +0 -1
  97. package/dist/components/mansory/mansory.js.map +0 -1
  98. package/dist/components/menu/menu.js.map +0 -1
  99. package/dist/components/modal/modal.js.map +0 -1
  100. package/dist/components/modal/modalContext.js.map +0 -1
  101. package/dist/components/pagination/pagination.js.map +0 -1
  102. package/dist/components/progress-bar/progress-bar.js.map +0 -1
  103. package/dist/components/qr-code/qr-code.js.map +0 -1
  104. package/dist/components/select/select.js.map +0 -1
  105. package/dist/components/select-zone/select-zone.js.map +0 -1
  106. package/dist/components/skeleton/skeleton.js.map +0 -1
  107. package/dist/components/slider/slider.js.map +0 -1
  108. package/dist/components/splitter/splitter.js.map +0 -1
  109. package/dist/components/steps/steps.js.map +0 -1
  110. package/dist/components/swap/swap.js.map +0 -1
  111. package/dist/components/switch/switch.js.map +0 -1
  112. package/dist/components/tab/tab.js.map +0 -1
  113. package/dist/components/table/table.js.map +0 -1
  114. package/dist/components/timeline/timeline.js.map +0 -1
  115. package/dist/components/toast/icons/ErrorIcon.js.map +0 -1
  116. package/dist/components/toast/icons/IconCircle.js.map +0 -1
  117. package/dist/components/toast/icons/InfoIcon.js.map +0 -1
  118. package/dist/components/toast/icons/LoaderIcon.js.map +0 -1
  119. package/dist/components/toast/icons/SuccessIcon.js.map +0 -1
  120. package/dist/components/toast/icons/WarningIcon.js.map +0 -1
  121. package/dist/components/toast/toast.js.map +0 -1
  122. package/dist/components/toast/toast.store.js.map +0 -1
  123. package/dist/components/tooltip/tooltip.js.map +0 -1
  124. package/dist/components/tour/tour.js.map +0 -1
  125. package/dist/components/upload/upload.js.map +0 -1
  126. package/dist/components/z-index/z-index.context.js.map +0 -1
  127. package/dist/components/z-index/z-index.js.map +0 -1
  128. package/dist/components/z-index/z-index.store.js.map +0 -1
  129. package/dist/components/z-index/z-index.types.js.map +0 -1
  130. package/dist/utils/cn.js.map +0 -1
  131. package/dist/utils/element-tracker.js.map +0 -1
  132. package/dist/utils/helper.js.map +0 -1
  133. package/dist/utils/hoc.js.map +0 -1
  134. /package/{dist/components → components}/avatar/avatar.d.ts +0 -0
  135. /package/{dist/components → components}/avatar/avatar.d.ts.map +0 -0
  136. /package/{dist/components → components}/avatar/avatar.js +0 -0
  137. /package/{dist/components → components}/avatar/avatar.types.d.ts +0 -0
  138. /package/{dist/components → components}/avatar/avatar.types.d.ts.map +0 -0
  139. /package/{dist/components → components}/avatar/index.d.ts +0 -0
  140. /package/{dist/components → components}/avatar/index.d.ts.map +0 -0
  141. /package/{dist/components → components}/badge/badge.d.ts +0 -0
  142. /package/{dist/components → components}/badge/badge.d.ts.map +0 -0
  143. /package/{dist/components → components}/badge/badge.js +0 -0
  144. /package/{dist/components → components}/badge/badge.types.d.ts +0 -0
  145. /package/{dist/components → components}/badge/badge.types.d.ts.map +0 -0
  146. /package/{dist/components → components}/badge/index.d.ts +0 -0
  147. /package/{dist/components → components}/badge/index.d.ts.map +0 -0
  148. /package/{dist/components → components}/blank/blank.d.ts +0 -0
  149. /package/{dist/components → components}/blank/blank.d.ts.map +0 -0
  150. /package/{dist/components → components}/blank/index.d.ts +0 -0
  151. /package/{dist/components → components}/blank/index.d.ts.map +0 -0
  152. /package/{dist/components → components}/breadcrumb/breadcrumb.d.ts +0 -0
  153. /package/{dist/components → components}/breadcrumb/breadcrumb.d.ts.map +0 -0
  154. /package/{dist/components → components}/breadcrumb/breadcrumb.js +0 -0
  155. /package/{dist/components → components}/breadcrumb/index.d.ts +0 -0
  156. /package/{dist/components → components}/breadcrumb/index.d.ts.map +0 -0
  157. /package/{dist/components → components}/button/button.d.ts +0 -0
  158. /package/{dist/components → components}/button/button.d.ts.map +0 -0
  159. /package/{dist/components → components}/button/button.js +0 -0
  160. /package/{dist/components → components}/button/button.types.d.ts +0 -0
  161. /package/{dist/components → components}/button/button.types.d.ts.map +0 -0
  162. /package/{dist/components → components}/button/index.d.ts +0 -0
  163. /package/{dist/components → components}/button/index.d.ts.map +0 -0
  164. /package/{dist/components → components}/carousel/carousel.d.ts +0 -0
  165. /package/{dist/components → components}/carousel/carousel.d.ts.map +0 -0
  166. /package/{dist/components → components}/carousel/carousel.js +0 -0
  167. /package/{dist/components → components}/carousel/carousel.types.d.ts +0 -0
  168. /package/{dist/components → components}/carousel/carousel.types.d.ts.map +0 -0
  169. /package/{dist/components → components}/carousel/index.d.ts +0 -0
  170. /package/{dist/components → components}/carousel/index.d.ts.map +0 -0
  171. /package/{dist/components → components}/chat-bubble/chatBubble.d.ts +0 -0
  172. /package/{dist/components → components}/chat-bubble/chatBubble.d.ts.map +0 -0
  173. /package/{dist/components → components}/chat-bubble/chatBubble.js +0 -0
  174. /package/{dist/components → components}/chat-bubble/chatBubble.type.d.ts +0 -0
  175. /package/{dist/components → components}/chat-bubble/chatBubble.type.d.ts.map +0 -0
  176. /package/{dist/components → components}/chat-bubble/index.d.ts +0 -0
  177. /package/{dist/components → components}/chat-bubble/index.d.ts.map +0 -0
  178. /package/{dist/components → components}/checkbox/checkbox.d.ts +0 -0
  179. /package/{dist/components → components}/checkbox/checkbox.d.ts.map +0 -0
  180. /package/{dist/components → components}/checkbox/checkbox.js +0 -0
  181. /package/{dist/components → components}/checkbox/index.d.ts +0 -0
  182. /package/{dist/components → components}/checkbox/index.d.ts.map +0 -0
  183. /package/{dist/components → components}/collapse/collapse.d.ts +0 -0
  184. /package/{dist/components → components}/collapse/collapse.d.ts.map +0 -0
  185. /package/{dist/components → components}/collapse/collapse.js +0 -0
  186. /package/{dist/components → components}/collapse/collapse.types.d.ts +0 -0
  187. /package/{dist/components → components}/collapse/collapse.types.d.ts.map +0 -0
  188. /package/{dist/components → components}/collapse/index.d.ts +0 -0
  189. /package/{dist/components → components}/collapse/index.d.ts.map +0 -0
  190. /package/{dist/components → components}/context-menu/context-menu.d.ts +0 -0
  191. /package/{dist/components → components}/context-menu/context-menu.d.ts.map +0 -0
  192. /package/{dist/components → components}/context-menu/context-menu.js +0 -0
  193. /package/{dist/components → components}/context-menu/context-menu.store.d.ts +0 -0
  194. /package/{dist/components → components}/context-menu/context-menu.store.d.ts.map +0 -0
  195. /package/{dist/components → components}/context-menu/context-menu.store.js +0 -0
  196. /package/{dist/components → components}/context-menu/context-menu.types.d.ts +0 -0
  197. /package/{dist/components → components}/context-menu/context-menu.types.d.ts.map +0 -0
  198. /package/{dist/components → components}/context-menu/index.d.ts +0 -0
  199. /package/{dist/components → components}/context-menu/index.d.ts.map +0 -0
  200. /package/{dist/components → components}/diff/diff.d.ts +0 -0
  201. /package/{dist/components → components}/diff/diff.d.ts.map +0 -0
  202. /package/{dist/components → components}/diff/diff.js +0 -0
  203. /package/{dist/components → components}/diff/diff.js.map +0 -0
  204. /package/{dist/components → components}/diff/index.d.ts +0 -0
  205. /package/{dist/components → components}/diff/index.d.ts.map +0 -0
  206. /package/{dist/components → components}/divider/divider.d.ts +0 -0
  207. /package/{dist/components → components}/divider/divider.d.ts.map +0 -0
  208. /package/{dist/components → components}/divider/divider.js +0 -0
  209. /package/{dist/components → components}/divider/divider.types.d.ts +0 -0
  210. /package/{dist/components → components}/divider/divider.types.d.ts.map +0 -0
  211. /package/{dist/components → components}/divider/index.d.ts +0 -0
  212. /package/{dist/components → components}/divider/index.d.ts.map +0 -0
  213. /package/{dist/components → components}/drawer/drawer.d.ts +0 -0
  214. /package/{dist/components → components}/drawer/drawer.d.ts.map +0 -0
  215. /package/{dist/components → components}/drawer/drawer.js +0 -0
  216. /package/{dist/components → components}/drawer/drawer.js.map +0 -0
  217. /package/{dist/components → components}/drawer/drawer.types.d.ts +0 -0
  218. /package/{dist/components → components}/drawer/drawer.types.d.ts.map +0 -0
  219. /package/{dist/components → components}/drawer/index.d.ts +0 -0
  220. /package/{dist/components → components}/drawer/index.d.ts.map +0 -0
  221. /package/{dist/components → components}/dropdown/dropdown.d.ts +0 -0
  222. /package/{dist/components → components}/dropdown/dropdown.d.ts.map +0 -0
  223. /package/{dist/components → components}/dropdown/dropdown.js +0 -0
  224. /package/{dist/components → components}/dropdown/dropdown.store.d.ts +0 -0
  225. /package/{dist/components → components}/dropdown/dropdown.store.d.ts.map +0 -0
  226. /package/{dist/components → components}/dropdown/dropdown.store.js +0 -0
  227. /package/{dist/components → components}/dropdown/dropdown.types.d.ts +0 -0
  228. /package/{dist/components → components}/dropdown/dropdown.types.d.ts.map +0 -0
  229. /package/{dist/components → components}/dropdown/index.d.ts +0 -0
  230. /package/{dist/components → components}/dropdown/index.d.ts.map +0 -0
  231. /package/{dist/components → components}/float-button/float-button.d.ts +0 -0
  232. /package/{dist/components → components}/float-button/float-button.d.ts.map +0 -0
  233. /package/{dist/components → components}/float-button/float-button.js +0 -0
  234. /package/{dist/components → components}/float-button/float-button.types.d.ts +0 -0
  235. /package/{dist/components → components}/float-button/float-button.types.d.ts.map +0 -0
  236. /package/{dist/components → components}/float-button/index.d.ts +0 -0
  237. /package/{dist/components → components}/float-button/index.d.ts.map +0 -0
  238. /package/{dist/components → components}/hover-3d-image/hover-3d-example.d.ts +0 -0
  239. /package/{dist/components → components}/hover-3d-image/hover-3d-example.d.ts.map +0 -0
  240. /package/{dist/components → components}/hover-3d-image/hover-3d-image.d.ts +0 -0
  241. /package/{dist/components → components}/hover-3d-image/hover-3d-image.d.ts.map +0 -0
  242. /package/{dist/components → components}/hover-3d-image/hover-3d-image.js +0 -0
  243. /package/{dist/components → components}/hover-3d-image/index.d.ts +0 -0
  244. /package/{dist/components → components}/hover-3d-image/index.d.ts.map +0 -0
  245. /package/{dist/components → components}/image-preview/image-preview.d.ts +0 -0
  246. /package/{dist/components → components}/image-preview/image-preview.d.ts.map +0 -0
  247. /package/{dist/components → components}/image-preview/image-preview.js +0 -0
  248. /package/{dist/components → components}/image-preview/index.d.ts +0 -0
  249. /package/{dist/components → components}/image-preview/index.d.ts.map +0 -0
  250. /package/{dist/components → components}/indicator/index.d.ts +0 -0
  251. /package/{dist/components → components}/indicator/index.d.ts.map +0 -0
  252. /package/{dist/components → components}/indicator/indicator.d.ts +0 -0
  253. /package/{dist/components → components}/indicator/indicator.d.ts.map +0 -0
  254. /package/{dist/components → components}/indicator/indicator.js +0 -0
  255. /package/{dist/components → components}/indicator/indicator.js.map +0 -0
  256. /package/{dist/components → components}/indicator/indicator.types.d.ts +0 -0
  257. /package/{dist/components → components}/indicator/indicator.types.d.ts.map +0 -0
  258. /package/{dist/components → components}/input/index.d.ts +0 -0
  259. /package/{dist/components → components}/input/index.d.ts.map +0 -0
  260. /package/{dist/components → components}/input/input.d.ts +0 -0
  261. /package/{dist/components → components}/input/input.d.ts.map +0 -0
  262. /package/{dist/components → components}/input/input.js +0 -0
  263. /package/{dist/components → components}/input/input.types.d.ts +0 -0
  264. /package/{dist/components → components}/input/input.types.d.ts.map +0 -0
  265. /package/{dist/components → components}/input/input.utils.d.ts +0 -0
  266. /package/{dist/components → components}/input/input.utils.d.ts.map +0 -0
  267. /package/{dist/components → components}/input/input.utils.js +0 -0
  268. /package/{dist/components → components}/input/variants/input-color.d.ts +0 -0
  269. /package/{dist/components → components}/input/variants/input-color.d.ts.map +0 -0
  270. /package/{dist/components → components}/input/variants/input-color.js +0 -0
  271. /package/{dist/components → components}/input/variants/input-date.d.ts +0 -0
  272. /package/{dist/components → components}/input/variants/input-date.d.ts.map +0 -0
  273. /package/{dist/components → components}/input/variants/input-date.js +0 -0
  274. /package/{dist/components → components}/input/variants/input-number.d.ts +0 -0
  275. /package/{dist/components → components}/input/variants/input-number.d.ts.map +0 -0
  276. /package/{dist/components → components}/input/variants/input-number.js +0 -0
  277. /package/{dist/components → components}/input/variants/input-otp.d.ts +0 -0
  278. /package/{dist/components → components}/input/variants/input-otp.d.ts.map +0 -0
  279. /package/{dist/components → components}/input/variants/input-otp.js +0 -0
  280. /package/{dist/components → components}/input/variants/input-password.d.ts +0 -0
  281. /package/{dist/components → components}/input/variants/input-password.d.ts.map +0 -0
  282. /package/{dist/components → components}/input/variants/input-password.js +0 -0
  283. /package/{dist/components → components}/input/variants/input-radio.d.ts +0 -0
  284. /package/{dist/components → components}/input/variants/input-radio.d.ts.map +0 -0
  285. /package/{dist/components → components}/input/variants/input-radio.js +0 -0
  286. /package/{dist/components → components}/input/variants/input-range.d.ts +0 -0
  287. /package/{dist/components → components}/input/variants/input-range.d.ts.map +0 -0
  288. /package/{dist/components → components}/input/variants/input-range.js +0 -0
  289. /package/{dist/components → components}/input/variants/input-text.d.ts +0 -0
  290. /package/{dist/components → components}/input/variants/input-text.d.ts.map +0 -0
  291. /package/{dist/components → components}/input/variants/input-text.js +0 -0
  292. /package/{dist/components → components}/input/variants/input-textarea.d.ts +0 -0
  293. /package/{dist/components → components}/input/variants/input-textarea.d.ts.map +0 -0
  294. /package/{dist/components → components}/input/variants/input-textarea.js +0 -0
  295. /package/{dist/components → components}/loading/index.d.ts +0 -0
  296. /package/{dist/components → components}/loading/index.d.ts.map +0 -0
  297. /package/{dist/components → components}/loading/loading.d.ts +0 -0
  298. /package/{dist/components → components}/loading/loading.d.ts.map +0 -0
  299. /package/{dist/components → components}/loading/loading.js +0 -0
  300. /package/{dist/components → components}/mansory/index.d.ts +0 -0
  301. /package/{dist/components → components}/mansory/index.d.ts.map +0 -0
  302. /package/{dist/components → components}/mansory/mansory.d.ts +0 -0
  303. /package/{dist/components → components}/mansory/mansory.d.ts.map +0 -0
  304. /package/{dist/components → components}/mansory/mansory.js +0 -0
  305. /package/{dist/components → components}/mansory/mansory.types.d.ts +0 -0
  306. /package/{dist/components → components}/mansory/mansory.types.d.ts.map +0 -0
  307. /package/{dist/components → components}/menu/index.d.ts +0 -0
  308. /package/{dist/components → components}/menu/index.d.ts.map +0 -0
  309. /package/{dist/components → components}/menu/menu.d.ts +0 -0
  310. /package/{dist/components → components}/menu/menu.d.ts.map +0 -0
  311. /package/{dist/components → components}/menu/menu.data-example.d.ts +0 -0
  312. /package/{dist/components → components}/menu/menu.data-example.d.ts.map +0 -0
  313. /package/{dist/components → components}/menu/menu.js +0 -0
  314. /package/{dist/components → components}/menu/menu.types.d.ts +0 -0
  315. /package/{dist/components → components}/menu/menu.types.d.ts.map +0 -0
  316. /package/{dist/components → components}/modal/index.d.ts +0 -0
  317. /package/{dist/components → components}/modal/index.d.ts.map +0 -0
  318. /package/{dist/components → components}/modal/modal.d.ts +0 -0
  319. /package/{dist/components → components}/modal/modal.d.ts.map +0 -0
  320. /package/{dist/components → components}/modal/modal.js +0 -0
  321. /package/{dist/components → components}/modal/modalContext.d.ts +0 -0
  322. /package/{dist/components → components}/modal/modalContext.d.ts.map +0 -0
  323. /package/{dist/components → components}/modal/modalContext.js +0 -0
  324. /package/{dist/components → components}/pagination/index.d.ts +0 -0
  325. /package/{dist/components → components}/pagination/index.d.ts.map +0 -0
  326. /package/{dist/components → components}/pagination/pagination.d.ts +0 -0
  327. /package/{dist/components → components}/pagination/pagination.d.ts.map +0 -0
  328. /package/{dist/components → components}/pagination/pagination.js +0 -0
  329. /package/{dist/components → components}/pagination/pagination.types.d.ts +0 -0
  330. /package/{dist/components → components}/pagination/pagination.types.d.ts.map +0 -0
  331. /package/{dist/components → components}/progress-bar/index.d.ts +0 -0
  332. /package/{dist/components → components}/progress-bar/index.d.ts.map +0 -0
  333. /package/{dist/components → components}/progress-bar/progress-bar.d.ts +0 -0
  334. /package/{dist/components → components}/progress-bar/progress-bar.d.ts.map +0 -0
  335. /package/{dist/components → components}/progress-bar/progress-bar.js +0 -0
  336. /package/{dist/components → components}/progress-bar/progress-bar.types.d.ts +0 -0
  337. /package/{dist/components → components}/progress-bar/progress-bar.types.d.ts.map +0 -0
  338. /package/{dist/components → components}/qr-code/index.d.ts +0 -0
  339. /package/{dist/components → components}/qr-code/index.d.ts.map +0 -0
  340. /package/{dist/components → components}/qr-code/qr-code.d.ts +0 -0
  341. /package/{dist/components → components}/qr-code/qr-code.d.ts.map +0 -0
  342. /package/{dist/components → components}/qr-code/qr-code.js +0 -0
  343. /package/{dist/components → components}/qr-code/qr-code.types.d.ts +0 -0
  344. /package/{dist/components → components}/qr-code/qr-code.types.d.ts.map +0 -0
  345. /package/{dist/components → components}/rating/index.d.ts +0 -0
  346. /package/{dist/components → components}/rating/index.d.ts.map +0 -0
  347. /package/{dist/components → components}/rating/rating.d.ts +0 -0
  348. /package/{dist/components → components}/rating/rating.d.ts.map +0 -0
  349. /package/{dist/components → components}/rating/rating.js +0 -0
  350. /package/{dist/components → components}/rating/rating.js.map +0 -0
  351. /package/{dist/components → components}/rating/rating.types.d.ts +0 -0
  352. /package/{dist/components → components}/rating/rating.types.d.ts.map +0 -0
  353. /package/{dist/components → components}/select/index.d.ts +0 -0
  354. /package/{dist/components → components}/select/index.d.ts.map +0 -0
  355. /package/{dist/components → components}/select/select.d.ts +0 -0
  356. /package/{dist/components → components}/select/select.d.ts.map +0 -0
  357. /package/{dist/components → components}/select/select.js +0 -0
  358. /package/{dist/components → components}/select/select.types.d.ts +0 -0
  359. /package/{dist/components → components}/select/select.types.d.ts.map +0 -0
  360. /package/{dist/components → components}/select-zone/index.d.ts +0 -0
  361. /package/{dist/components → components}/select-zone/index.d.ts.map +0 -0
  362. /package/{dist/components → components}/select-zone/select-zone.d.ts +0 -0
  363. /package/{dist/components → components}/select-zone/select-zone.d.ts.map +0 -0
  364. /package/{dist/components → components}/select-zone/select-zone.js +0 -0
  365. /package/{dist/components → components}/select-zone/select-zone.types.d.ts +0 -0
  366. /package/{dist/components → components}/select-zone/select-zone.types.d.ts.map +0 -0
  367. /package/{dist/components → components}/skeleton/index.d.ts +0 -0
  368. /package/{dist/components → components}/skeleton/index.d.ts.map +0 -0
  369. /package/{dist/components → components}/skeleton/skeleton.d.ts +0 -0
  370. /package/{dist/components → components}/skeleton/skeleton.d.ts.map +0 -0
  371. /package/{dist/components → components}/skeleton/skeleton.js +0 -0
  372. /package/{dist/components → components}/slider/index.d.ts +0 -0
  373. /package/{dist/components → components}/slider/index.d.ts.map +0 -0
  374. /package/{dist/components → components}/slider/slider.d.ts +0 -0
  375. /package/{dist/components → components}/slider/slider.d.ts.map +0 -0
  376. /package/{dist/components → components}/slider/slider.js +0 -0
  377. /package/{dist/components → components}/slider/slider.types.d.ts +0 -0
  378. /package/{dist/components → components}/slider/slider.types.d.ts.map +0 -0
  379. /package/{dist/components → components}/splitter/index.d.ts +0 -0
  380. /package/{dist/components → components}/splitter/index.d.ts.map +0 -0
  381. /package/{dist/components → components}/splitter/splitter.d.ts +0 -0
  382. /package/{dist/components → components}/splitter/splitter.d.ts.map +0 -0
  383. /package/{dist/components → components}/splitter/splitter.js +0 -0
  384. /package/{dist/components → components}/splitter/splitter.types.d.ts +0 -0
  385. /package/{dist/components → components}/splitter/splitter.types.d.ts.map +0 -0
  386. /package/{dist/components → components}/steps/index.d.ts +0 -0
  387. /package/{dist/components → components}/steps/index.d.ts.map +0 -0
  388. /package/{dist/components → components}/steps/steps.d.ts +0 -0
  389. /package/{dist/components → components}/steps/steps.d.ts.map +0 -0
  390. /package/{dist/components → components}/steps/steps.js +0 -0
  391. /package/{dist/components → components}/swap/index.d.ts +0 -0
  392. /package/{dist/components → components}/swap/index.d.ts.map +0 -0
  393. /package/{dist/components → components}/swap/swap.d.ts +0 -0
  394. /package/{dist/components → components}/swap/swap.d.ts.map +0 -0
  395. /package/{dist/components → components}/swap/swap.js +0 -0
  396. /package/{dist/components → components}/switch/index.d.ts +0 -0
  397. /package/{dist/components → components}/switch/index.d.ts.map +0 -0
  398. /package/{dist/components → components}/switch/switch.d.ts +0 -0
  399. /package/{dist/components → components}/switch/switch.d.ts.map +0 -0
  400. /package/{dist/components → components}/switch/switch.js +0 -0
  401. /package/{dist/components → components}/switch/switch.types.d.ts +0 -0
  402. /package/{dist/components → components}/switch/switch.types.d.ts.map +0 -0
  403. /package/{dist/components → components}/tab/index.d.ts +0 -0
  404. /package/{dist/components → components}/tab/index.d.ts.map +0 -0
  405. /package/{dist/components → components}/tab/tab.d.ts +0 -0
  406. /package/{dist/components → components}/tab/tab.d.ts.map +0 -0
  407. /package/{dist/components → components}/tab/tab.js +0 -0
  408. /package/{dist/components → components}/tab/tab.types.d.ts +0 -0
  409. /package/{dist/components → components}/tab/tab.types.d.ts.map +0 -0
  410. /package/{dist/components → components}/table/index.d.ts +0 -0
  411. /package/{dist/components → components}/table/index.d.ts.map +0 -0
  412. /package/{dist/components → components}/table/index.js +0 -0
  413. /package/{dist/components → components}/table/table.d.ts +0 -0
  414. /package/{dist/components → components}/table/table.d.ts.map +0 -0
  415. /package/{dist/components → components}/table/table.js +0 -0
  416. /package/{dist/components → components}/table/table.types.d.ts +0 -0
  417. /package/{dist/components → components}/table/table.types.d.ts.map +0 -0
  418. /package/{dist/components → components}/text-rotate/index.d.ts +0 -0
  419. /package/{dist/components → components}/text-rotate/index.d.ts.map +0 -0
  420. /package/{dist/components → components}/text-rotate/text-rotate.d.ts +0 -0
  421. /package/{dist/components → components}/text-rotate/text-rotate.d.ts.map +0 -0
  422. /package/{dist/components → components}/text-rotate/text-rotate.js +0 -0
  423. /package/{dist/components → components}/text-rotate/text-rotate.js.map +0 -0
  424. /package/{dist/components → components}/timeline/index.d.ts +0 -0
  425. /package/{dist/components → components}/timeline/index.d.ts.map +0 -0
  426. /package/{dist/components → components}/timeline/timeline.d.ts +0 -0
  427. /package/{dist/components → components}/timeline/timeline.d.ts.map +0 -0
  428. /package/{dist/components → components}/timeline/timeline.js +0 -0
  429. /package/{dist/components → components}/timeline/timeline.types.d.ts +0 -0
  430. /package/{dist/components → components}/timeline/timeline.types.d.ts.map +0 -0
  431. /package/{dist/components → components}/toast/icons/ErrorIcon.d.ts +0 -0
  432. /package/{dist/components → components}/toast/icons/ErrorIcon.d.ts.map +0 -0
  433. /package/{dist/components → components}/toast/icons/ErrorIcon.js +0 -0
  434. /package/{dist/components → components}/toast/icons/IconCircle.d.ts +0 -0
  435. /package/{dist/components → components}/toast/icons/IconCircle.d.ts.map +0 -0
  436. /package/{dist/components → components}/toast/icons/IconCircle.js +0 -0
  437. /package/{dist/components → components}/toast/icons/InfoIcon.d.ts +0 -0
  438. /package/{dist/components → components}/toast/icons/InfoIcon.d.ts.map +0 -0
  439. /package/{dist/components → components}/toast/icons/InfoIcon.js +0 -0
  440. /package/{dist/components → components}/toast/icons/LoaderIcon.d.ts +0 -0
  441. /package/{dist/components → components}/toast/icons/LoaderIcon.d.ts.map +0 -0
  442. /package/{dist/components → components}/toast/icons/LoaderIcon.js +0 -0
  443. /package/{dist/components → components}/toast/icons/SuccessIcon.d.ts +0 -0
  444. /package/{dist/components → components}/toast/icons/SuccessIcon.d.ts.map +0 -0
  445. /package/{dist/components → components}/toast/icons/SuccessIcon.js +0 -0
  446. /package/{dist/components → components}/toast/icons/WarningIcon.d.ts +0 -0
  447. /package/{dist/components → components}/toast/icons/WarningIcon.d.ts.map +0 -0
  448. /package/{dist/components → components}/toast/icons/WarningIcon.js +0 -0
  449. /package/{dist/components → components}/toast/icons/index.d.ts +0 -0
  450. /package/{dist/components → components}/toast/icons/index.d.ts.map +0 -0
  451. /package/{dist/components → components}/toast/index.d.ts +0 -0
  452. /package/{dist/components → components}/toast/index.d.ts.map +0 -0
  453. /package/{dist/components → components}/toast/toast.d.ts +0 -0
  454. /package/{dist/components → components}/toast/toast.d.ts.map +0 -0
  455. /package/{dist/components → components}/toast/toast.js +0 -0
  456. /package/{dist/components → components}/toast/toast.store.d.ts +0 -0
  457. /package/{dist/components → components}/toast/toast.store.d.ts.map +0 -0
  458. /package/{dist/components → components}/toast/toast.store.js +0 -0
  459. /package/{dist/components → components}/toast/toast.type.d.ts +0 -0
  460. /package/{dist/components → components}/toast/toast.type.d.ts.map +0 -0
  461. /package/{dist/components → components}/tooltip/index.d.ts +0 -0
  462. /package/{dist/components → components}/tooltip/index.d.ts.map +0 -0
  463. /package/{dist/components → components}/tooltip/tooltip.d.ts +0 -0
  464. /package/{dist/components → components}/tooltip/tooltip.d.ts.map +0 -0
  465. /package/{dist/components → components}/tooltip/tooltip.js +0 -0
  466. /package/{dist/components → components}/tooltip/tooltip.types.d.ts +0 -0
  467. /package/{dist/components → components}/tooltip/tooltip.types.d.ts.map +0 -0
  468. /package/{dist/components → components}/tour/index.d.ts +0 -0
  469. /package/{dist/components → components}/tour/index.d.ts.map +0 -0
  470. /package/{dist/components → components}/tour/tour.d.ts +0 -0
  471. /package/{dist/components → components}/tour/tour.d.ts.map +0 -0
  472. /package/{dist/components → components}/tour/tour.js +0 -0
  473. /package/{dist/components → components}/tour/tour.types.d.ts +0 -0
  474. /package/{dist/components → components}/tour/tour.types.d.ts.map +0 -0
  475. /package/{dist/components → components}/upload/index.d.ts +0 -0
  476. /package/{dist/components → components}/upload/index.d.ts.map +0 -0
  477. /package/{dist/components → components}/upload/upload.d.ts +0 -0
  478. /package/{dist/components → components}/upload/upload.d.ts.map +0 -0
  479. /package/{dist/components → components}/upload/upload.js +0 -0
  480. /package/{dist/components → components}/upload/upload.types.d.ts +0 -0
  481. /package/{dist/components → components}/upload/upload.types.d.ts.map +0 -0
  482. /package/{dist/components → components}/z-index/index.d.ts +0 -0
  483. /package/{dist/components → components}/z-index/index.d.ts.map +0 -0
  484. /package/{dist/components → components}/z-index/z-index.context.d.ts +0 -0
  485. /package/{dist/components → components}/z-index/z-index.context.d.ts.map +0 -0
  486. /package/{dist/components → components}/z-index/z-index.context.js +0 -0
  487. /package/{dist/components → components}/z-index/z-index.d.ts +0 -0
  488. /package/{dist/components → components}/z-index/z-index.d.ts.map +0 -0
  489. /package/{dist/components → components}/z-index/z-index.js +0 -0
  490. /package/{dist/components → components}/z-index/z-index.store.d.ts +0 -0
  491. /package/{dist/components → components}/z-index/z-index.store.d.ts.map +0 -0
  492. /package/{dist/components → components}/z-index/z-index.store.js +0 -0
  493. /package/{dist/components → components}/z-index/z-index.types.d.ts +0 -0
  494. /package/{dist/components → components}/z-index/z-index.types.d.ts.map +0 -0
  495. /package/{dist/components → components}/z-index/z-index.types.js +0 -0
  496. /package/{dist/lib.d.ts → lib.d.ts} +0 -0
  497. /package/{dist/lib.d.ts.map → lib.d.ts.map} +0 -0
  498. /package/{dist/lib.js → lib.js} +0 -0
  499. /package/{dist/solid-ui.css → solid-ui.css} +0 -0
  500. /package/{dist/type.d.ts → type.d.ts} +0 -0
  501. /package/{dist/type.d.ts.map → type.d.ts.map} +0 -0
  502. /package/{dist/utils → utils}/cn.d.ts +0 -0
  503. /package/{dist/utils → utils}/cn.d.ts.map +0 -0
  504. /package/{dist/utils → utils}/cn.js +0 -0
  505. /package/{dist/utils → utils}/element-tracker.js +0 -0
  506. /package/{dist/utils → utils}/helper.d.ts +0 -0
  507. /package/{dist/utils → utils}/helper.d.ts.map +0 -0
  508. /package/{dist/utils → utils}/helper.js +0 -0
  509. /package/{dist/utils → utils}/hoc.js +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"menu.js","names":["cn","getColor","cva","VariantProps","RefreshCw","Accessor","Component","createEffect","createMemo","createSignal","createUniqueId","For","JSXElement","mergeProps","on","onCleanup","onMount","Setter","Show","Button","FolderItem","ItemClickInfo","MenuErrorInfo","MenuItem","MenuProps","menuVariants","variants","size","xs","sm","md","lg","xl","direction","vertical","horizontal","MenuVariantsProps","NodeRegistry","parentMap","Map","register","id","parentId","set","getPath","path","currentId","unshift","get","has","clear","LazyFolderRegistry","refreshFns","refreshFn","unregister","delete","refresh","fn","refreshAll","forEach","LazyFolderContent","item","renderItems","shouldLoad","isLoading","setIsLoading","onLoadError","error","onRegisterRefresh","props","loadedItems","setLoadedItems","loadItems","force","lazyItems","items","e","defer","_$createComponent","when","children","each","subItem","ACTIVE_CLASSNAME","Menu","p","color","highlightActive","const","ulRootRef","HTMLUListElement","nodeRegistry","lazyFolderRegistry","addActiveClassForId","length","elements","Array","from","getElementsByClassName","el","classList","remove","nodeId","document","getElementById","add","expandPathToId","element","details","querySelector","HTMLDetailsElement","open","focusById","console","warn","collapseById","refreshById","collapseAll","detailsList","querySelectorAll","d","expandedAll","collapseOtherRootFolders","exceptId","rootFolders","li","parentElement","itemId","type","folderItem","defaultExpanded","isLazyFolder","undefined","setShouldLoad","detailsRef","handleToggle","Event","currentTarget","isExpanded","preventDefault","handleLoadError","onError","errorInfo","source","message","Error","handleFolderClick","MouseEvent","stopPropagation","disabled","currentIsExpanded","willExpand","setTimeout","onItemClick","info","data","_el$","_tmpl$2","_el$2","firstChild","_el$3","_el$5","nextSibling","_$setAttribute","addEventListener","_ref$","_$use","$$click","_$insert","content","Element","_tmpl$","fallback","_$effect","_p$","_v$","class","itemWrap","_v$2","_v$3","itemHeader","_$className","t","a","handleFileClick","_el$6","_tmpl$3","_el$7","handleTitleClick","contains","_el$8","_tmpl$4","_el$9","_el$0","isLazyRoot","rootItems","setRootItems","isRootLoading","setIsRootLoading","clearMenuRegistries","loadRootItems","menuClass","root","setMenuFunction","_el$1","_tmpl$5","_$memo","_el$11","_tmpl$7","_el$12","icon","variant","onClick","_el$10","_tmpl$6","ele","_$spread","_$mergeProps","_$delegateEvents"],"sources":["../../../src/components/menu/menu.tsx"],"sourcesContent":["import { cn } from '@/utils/cn';\nimport { getColor } from '@/utils/helper';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport RefreshCw from 'lucide-solid/icons/refresh-cw';\nimport {\n Accessor,\n Component,\n createEffect,\n createMemo,\n createSignal,\n createUniqueId,\n For,\n JSXElement,\n mergeProps,\n on,\n onCleanup,\n onMount,\n Setter,\n Show,\n} from 'solid-js';\nimport { Button } from '../button';\nimport type { FolderItem, ItemClickInfo, MenuErrorInfo, MenuItem, MenuProps } from './menu.types';\n\nconst menuVariants = cva('menu', {\n variants: {\n size: { xs: 'menu-xs', sm: 'menu-sm', md: 'menu-md', lg: 'menu-lg', xl: 'menu-xl' },\n direction: { vertical: 'menu-vertical', horizontal: 'menu-horizontal' },\n },\n});\n\nexport type MenuVariantsProps = VariantProps<typeof menuVariants>;\n\nclass NodeRegistry {\n private parentMap = new Map<string, string | null>();\n register(id: string, parentId: string | null) {\n this.parentMap.set(id, parentId);\n }\n getPath(id: string): string[] {\n const path: string[] = [];\n let currentId: string | null | undefined = id;\n while (currentId != null) {\n path.unshift(currentId);\n currentId = this.parentMap.get(currentId);\n }\n return path;\n }\n has(id: string): boolean {\n return this.parentMap.has(id);\n }\n clear() {\n this.parentMap.clear();\n }\n}\n\nclass LazyFolderRegistry {\n private refreshFns = new Map<string, () => void>();\n register(id: string, refreshFn: () => void) {\n this.refreshFns.set(id, refreshFn);\n }\n unregister(id: string) {\n this.refreshFns.delete(id);\n }\n refresh(id: string) {\n const fn = this.refreshFns.get(id);\n if (fn) fn();\n }\n refreshAll() {\n this.refreshFns.forEach(fn => fn());\n }\n has(id: string): boolean {\n return this.refreshFns.has(id);\n }\n clear() {\n this.refreshFns.clear();\n }\n}\n\nconst LazyFolderContent: Component<{\n item: FolderItem;\n renderItems: (item: MenuItem, parentId: string | null) => JSXElement;\n parentId: string | null;\n shouldLoad: Accessor<boolean>;\n isLoading: Accessor<boolean>;\n setIsLoading: Setter<boolean>;\n onLoadError: (error: unknown) => void;\n onRegisterRefresh: (refreshFn: () => void) => void;\n}> = props => {\n const [loadedItems, setLoadedItems] = createSignal<MenuItem[] | null>(null);\n const loadItems = async (force = false) => {\n if (props.isLoading()) return;\n if (loadedItems() !== null && !force) return;\n if (!props.item.lazyItems) return;\n props.setIsLoading(true);\n try {\n const items = await props.item.lazyItems();\n setLoadedItems(items);\n } catch (e) {\n props.onLoadError(e);\n } finally {\n props.setIsLoading(false);\n }\n };\n const refresh = () => {\n loadItems(true);\n };\n onMount(() => {\n props.onRegisterRefresh(refresh);\n });\n createEffect(\n on(\n () => props.shouldLoad(),\n shouldLoad => {\n if (shouldLoad && loadedItems() === null) {\n loadItems();\n }\n },\n { defer: true },\n ),\n );\n return (\n <Show when={loadedItems()}>\n <For each={loadedItems()!}>{subItem => props.renderItems(subItem, props.parentId)}</For>\n </Show>\n );\n};\n\nconst ACTIVE_CLASSNAME = '_6ca32a';\nexport const Menu: Component<MenuProps> = p => {\n p = mergeProps(\n { size: 'md', direction: 'vertical', color: 'secondary', highlightActive: true } as const,\n p,\n );\n let ulRootRef: HTMLUListElement;\n const nodeRegistry = new NodeRegistry();\n const lazyFolderRegistry = new LazyFolderRegistry();\n function addActiveClassForId(id: string) {\n if (!ulRootRef || !p.highlightActive) return;\n const path = nodeRegistry.getPath(id);\n if (path.length === 0) return;\n\n const elements = Array.from(ulRootRef.getElementsByClassName(ACTIVE_CLASSNAME));\n\n for (const el of elements) el.classList.remove(ACTIVE_CLASSNAME);\n for (const nodeId of path) document.getElementById(nodeId)?.classList?.add(ACTIVE_CLASSNAME);\n }\n function expandPathToId(id: string) {\n const path = nodeRegistry.getPath(id);\n for (const nodeId of path) {\n const element = document.getElementById(nodeId);\n if (!element) continue;\n const details = element.querySelector(':scope > details') as HTMLDetailsElement | null;\n if (details && !details.open) {\n details.open = true;\n }\n }\n }\n function focusById(id: string) {\n if (!nodeRegistry.has(id)) {\n console.warn(`Menu.focusById: Node with id \"${id}\" not found in registry`);\n return;\n }\n expandPathToId(id);\n addActiveClassForId(id);\n }\n function collapseById(id: string) {\n const element = document.getElementById(id);\n if (!element) {\n console.warn(`Menu.collapseById: Element with id \"${id}\" not found`);\n return;\n }\n const details = element.querySelector(':scope > details') as HTMLDetailsElement | null;\n if (details) {\n details.open = false;\n const elements = details.getElementsByClassName(ACTIVE_CLASSNAME);\n for (const el of elements) el.classList.remove(ACTIVE_CLASSNAME);\n element.classList.remove(ACTIVE_CLASSNAME);\n }\n }\n function refreshById(id: string) {\n if (!lazyFolderRegistry.has(id)) {\n console.warn(`Menu.refreshById: Lazy folder with id \"${id}\" not found`);\n return;\n }\n lazyFolderRegistry.refresh(id);\n }\n function refreshAll() {\n lazyFolderRegistry.refreshAll();\n }\n function collapseAll() {\n if (!ulRootRef) return;\n const detailsList = ulRootRef.querySelectorAll('details');\n detailsList.forEach(d => (d.open = false));\n }\n function expandedAll() {\n if (!ulRootRef) return;\n const detailsList = ulRootRef.querySelectorAll('details');\n detailsList.forEach(d => (d.open = true));\n }\n function collapseOtherRootFolders(exceptId: string) {\n if (!ulRootRef) return;\n // Only collapse direct children (level 1 folders)\n const rootFolders = ulRootRef.querySelectorAll(':scope > li.folder > details');\n rootFolders.forEach(details => {\n const li = details.parentElement;\n if (li && li.id !== exceptId && (details as HTMLDetailsElement).open) {\n (details as HTMLDetailsElement).open = false;\n }\n });\n }\n function renderItems(item: MenuItem, parentId: string | null = null) {\n const itemId = item.id ?? createUniqueId();\n nodeRegistry.register(itemId, parentId);\n\n if (item.type === 'folder') {\n const folderItem = mergeProps(\n { defaultExpanded: item.defaultExpanded ?? p.defaultExpanded ?? false },\n item,\n { id: itemId },\n );\n const isLazyFolder = folderItem.lazyItems !== undefined;\n const [shouldLoad, setShouldLoad] = createSignal(folderItem.defaultExpanded);\n const [isLoading, setIsLoading] = createSignal(false);\n let detailsRef: HTMLDetailsElement | undefined;\n\n const handleToggle = (e: Event) => {\n const details = e.currentTarget as HTMLDetailsElement;\n const isExpanded = details.open;\n if (isLoading()) {\n e.preventDefault();\n return;\n }\n if (isLazyFolder) {\n setShouldLoad(isExpanded);\n }\n };\n\n const handleLoadError = (error: unknown) => {\n if (detailsRef) {\n detailsRef.open = false;\n }\n setShouldLoad(false);\n if (p.onError) {\n const errorInfo: MenuErrorInfo = {\n source: 'folder',\n itemId,\n path: nodeRegistry.getPath(itemId),\n error,\n message: error instanceof Error ? error.message : 'Failed to load folder items',\n };\n p.onError(errorInfo);\n }\n };\n\n const handleFolderClick = (e: MouseEvent) => {\n e.stopPropagation();\n if (isLoading() || item.disabled) {\n e.preventDefault();\n return;\n }\n\n const currentIsExpanded = detailsRef?.open ?? folderItem.defaultExpanded;\n const willExpand = !currentIsExpanded;\n\n // In horizontal mode, collapse other root folders when expanding a root folder\n if (p.direction === 'horizontal' && parentId === null && willExpand) {\n collapseOtherRootFolders(itemId);\n }\n\n if (detailsRef?.open === false) {\n addActiveClassForId(itemId);\n } else {\n setTimeout(() => {\n collapseById(itemId);\n });\n }\n\n if (p.onItemClick) {\n const isExpanded = willExpand;\n const info: ItemClickInfo = {\n id: itemId,\n path: nodeRegistry.getPath(itemId),\n type: 'folder',\n isExpanded,\n data: item.data,\n };\n p.onItemClick(info);\n }\n };\n return (\n <li\n class={cn(\n 'folder',\n (folderItem.disabled || isLoading()) && 'menu-disabled',\n p.class?.itemWrap,\n )}\n id={itemId}\n >\n <details ref={detailsRef} open={folderItem.defaultExpanded} onToggle={handleToggle}>\n <summary\n class={cn(isLoading() && 'after:hidden', p.class?.itemHeader)}\n onClick={handleFolderClick}\n >\n {folderItem.content as Element}\n <Show when={isLoading()}>\n <span class=\"loading loading-spinner loading-xs\"></span>\n </Show>\n </summary>\n <ul>\n <Show\n when={isLazyFolder}\n fallback={\n <For each={(folderItem as { items: MenuItem[] }).items}>\n {subItem => renderItems(subItem, itemId)}\n </For>\n }\n >\n <LazyFolderContent\n {...{\n renderItems,\n shouldLoad,\n isLoading,\n setIsLoading,\n item: folderItem,\n parentId: itemId,\n onLoadError: handleLoadError,\n onRegisterRefresh: refreshFn => lazyFolderRegistry.register(itemId, refreshFn),\n }}\n />\n </Show>\n </ul>\n </details>\n </li>\n );\n }\n if (item.type === 'file') {\n const handleFileClick = (e: MouseEvent) => {\n e.stopPropagation();\n addActiveClassForId(itemId);\n\n if (p.onItemClick) {\n const info: ItemClickInfo = {\n id: itemId,\n path: nodeRegistry.getPath(itemId),\n type: 'file',\n ...(item.data && { data: item.data }),\n };\n p.onItemClick(info);\n }\n };\n return (\n <li\n class={cn('file', item.disabled && 'menu-disabled', p.class?.itemWrap)}\n id={itemId}\n tabindex=\"0\"\n onClick={handleFileClick}\n >\n <div>{item.content as Element}</div>\n </li>\n );\n }\n if (item.type === 'title') {\n const handleTitleClick = (e: MouseEvent) => {\n e.stopPropagation();\n\n const li = document.getElementById(itemId);\n if (li && li.classList.contains(ACTIVE_CLASSNAME)) {\n const elements = li.getElementsByClassName(ACTIVE_CLASSNAME);\n for (const el of elements) el.classList.remove(ACTIVE_CLASSNAME);\n li.classList.remove(ACTIVE_CLASSNAME);\n } else {\n addActiveClassForId(itemId);\n }\n\n if (p.onItemClick) {\n const info: ItemClickInfo = {\n id: itemId,\n path: nodeRegistry.getPath(itemId),\n type: 'title',\n ...(item.data && { data: item.data }),\n };\n p.onItemClick(info);\n }\n };\n return (\n <li class={cn('title', item.disabled && 'menu-disabled', p.class?.itemWrap)} id={itemId}>\n <h4 class=\"menu-title\" onClick={handleTitleClick}>\n {item.content as Element}\n </h4>\n <ul>\n <For each={item.items}>{subItem => renderItems(subItem, itemId)}</For>\n </ul>\n </li>\n );\n }\n }\n const isLazyRoot = p.lazyItems !== undefined;\n const [rootItems, setRootItems] = createSignal<MenuItem[] | null>(\n isLazyRoot ? null : (p.items ?? []),\n );\n const [isRootLoading, setIsRootLoading] = createSignal(false);\n\n createEffect(\n on(\n () => p.items,\n items => {\n if (!isLazyRoot && items) {\n nodeRegistry.clear();\n lazyFolderRegistry.clear();\n setRootItems(items);\n }\n },\n { defer: true },\n ),\n );\n\n onCleanup(function clearMenuRegistries() {\n nodeRegistry.clear();\n lazyFolderRegistry.clear();\n });\n\n const loadRootItems = async () => {\n if (!p.lazyItems || rootItems() !== null || isRootLoading()) return;\n setIsRootLoading(true);\n try {\n const items = await p.lazyItems();\n setRootItems(items);\n } catch (e) {\n if (p.onError) {\n const errorInfo: MenuErrorInfo = {\n source: 'root',\n error: e,\n message: e instanceof Error ? e.message : 'Failed to load menu items',\n };\n p.onError(errorInfo);\n }\n } finally {\n setIsRootLoading(false);\n }\n };\n if (isLazyRoot) {\n loadRootItems();\n }\n const menuClass = createMemo(() =>\n cn(menuVariants({ size: p.size, direction: p.direction }), getColor(p.color), p.class?.root),\n );\n\n if (p.setMenuFunction) {\n p.setMenuFunction({\n focusById,\n collapseById,\n refreshById,\n refreshAll,\n collapseAll,\n expandedAll,\n });\n }\n return (\n <>\n <Show when={isRootLoading()}>\n <div class={cn(menuClass(), 'flex size-full justify-center p-4')}>\n <span class=\"loading loading-spinner loading-md m-auto\"></span>\n </div>\n </Show>\n <Show when={!isRootLoading()}>\n <Show\n when={rootItems() && rootItems()!.length > 0}\n fallback={\n <div class=\"text-base-content/50 flex flex-col items-center justify-center gap-2 p-4 text-center text-sm italic\">\n <span>No menu items available.</span>\n <Button\n icon={<RefreshCw size={10} />}\n variant={'default'}\n size={'4xs'}\n class=\"w-fit px-1.5\"\n onClick={loadRootItems}\n >\n Try again\n </Button>\n </div>\n }\n >\n <ul class={menuClass()} ref={ele => (ulRootRef = ele)} {...(p.id && { id: p.id })}>\n <For each={rootItems()!}>{item => renderItems(item)}</For>\n </ul>\n </Show>\n </Show>\n </>\n );\n};\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"modal.js","names":["SolidComponent","cn","AnimationConfig","renderCSSAnimation","conditionalRender","X","Component","createEffect","createSignal","createUniqueId","mergeProps","on","onCleanup","Show","ZIndex","ZIndexType","ModalType","onClose","width","closeOnOutsideClick","closeOnEsc","closable","header","body","footer","open","mask","enabled","blur","class","Partial","Record","preRender","animate","Omit","name","AnimateType","TRANSFORM_ANIMATIONS","Set","modalIds","setModalIds","popModalId","newArr","slice","pop","modalCloseCallbacks","Map","globalKeyDownHandler","e","KeyboardEvent","key","topId","at","get","registerModalCallback","id","cb","size","document","addEventListener","set","unregisterModalCallback","delete","removeEventListener","ComponentModal","p","duration","modalId","unregisterModal","renderMaskEnabled","renderMaskClass","animName","isTransformAnim","has","renderModalBoxAnim","animation","renderOverlayAnim","renderBoxStyle","style","overlayDone","setOverlayDone","handleOverlayAnimEnd","boxVisible","handleBackdropClick","_$createComponent","type","MODAL","blockScroll","position","inset","wrapper","children","when","_el$","_tmpl$","$$click","_$effect","_$className","_$memo","_el$2","_tmpl$2","_el$3","_tmpl$4","_el$5","firstChild","_el$6","_el$7","nextSibling","stopPropagation","_$insert","_el$4","_tmpl$3","_p$","_v$","modal","_v$2","t","_$style","undefined","_c$","_el$9","_tmpl$5","_$addEventListener","closeButton","fallback","_el$0","_tmpl$6","_el$1","Element","_el$8","_v$3","_v$4","visibility","_v$5","_v$6","a","o","Modal","_$delegateEvents"],"sources":["../../../src/components/modal/modal.tsx"],"sourcesContent":["import { SolidComponent } from '@/type';\nimport { cn } from '@/utils/cn';\nimport { AnimationConfig, renderCSSAnimation } from '@/utils/helper';\nimport { conditionalRender } from '@/utils/hoc';\nimport X from 'lucide-solid/icons/x';\n\nimport {\n Component,\n createEffect,\n createSignal,\n createUniqueId,\n mergeProps,\n on,\n onCleanup,\n Show,\n} from 'solid-js';\nimport { ZIndex, ZIndexType } from '../z-index';\n\nexport type ModalType = {\n onClose: () => void;\n width?: string;\n closeOnOutsideClick?: boolean;\n closeOnEsc?: boolean;\n closable?: boolean;\n header?: SolidComponent;\n body?: SolidComponent;\n footer?: SolidComponent;\n open?: boolean;\n mask?: boolean | { enabled: boolean; blur: boolean };\n class?: Partial<\n Record<'wrapper' | 'modal' | 'header' | 'body' | 'footer' | 'closeButton', string>\n >;\n preRender?: boolean;\n animate?: Omit<AnimationConfig, 'name'> & {\n name: AnimateType;\n };\n};\n\n// Only opacity-based animations are safe to use on the modal box directly\n// because transform-based animations create a new containing block for\n// position:fixed descendants, which breaks fixed positioning inside body slots.\n// Transform animations are applied on a sibling overlay div instead.\ntype AnimateType =\n | 'none'\n | 'lightSpeedInRight'\n | 'lightSpeedInLeft'\n | 'fadeIn'\n | 'fadeInLeft'\n | 'fadeInRight'\n | 'fadeInDown'\n | 'fadeInUp'\n | 'bounceIn'\n | 'scaleInCenter'\n | 'slideInFwdCenter'\n | 'slideInBck'\n | 'tiltIn'\n | 'swingInRightBck'\n | 'puffInCenter'\n | 'scaleInBl';\n\n// Animations that use transform in their keyframes — these create a containing\n// block for position:fixed elements during the animation. They must NOT be\n// placed on any ancestor of body content.\nconst TRANSFORM_ANIMATIONS = new Set<AnimateType>([\n 'lightSpeedInRight',\n 'lightSpeedInLeft',\n 'fadeInLeft',\n 'fadeInRight',\n 'fadeInDown',\n 'fadeInUp',\n 'bounceIn',\n 'scaleInCenter',\n 'slideInFwdCenter',\n 'slideInBck',\n 'tiltIn',\n 'swingInRightBck',\n 'puffInCenter',\n 'scaleInBl',\n]);\n\n// Track active modals for overlay logic (only topmost modal shows mask)\nconst [modalIds, setModalIds] = createSignal<string[]>([]);\nfunction popModalId() {\n const newArr = modalIds().slice();\n newArr.pop();\n setModalIds(newArr);\n}\n\n// Global ESC key handler — single listener shared across all modal instances\nconst modalCloseCallbacks = new Map<string, () => void>();\n\nfunction globalKeyDownHandler(e: KeyboardEvent) {\n if (e.key !== 'Escape') return;\n const topId = modalIds().at(-1);\n if (topId) modalCloseCallbacks.get(topId)?.();\n}\n\nfunction registerModalCallback(id: string, cb: () => void) {\n if (modalCloseCallbacks.size === 0) {\n document.addEventListener('keydown', globalKeyDownHandler);\n }\n modalCloseCallbacks.set(id, cb);\n}\n\nfunction unregisterModalCallback(id: string) {\n modalCloseCallbacks.delete(id);\n if (modalCloseCallbacks.size === 0) {\n document.removeEventListener('keydown', globalKeyDownHandler);\n }\n}\n\nconst ComponentModal: Component<ModalType> = p => {\n p = mergeProps(\n {\n closeOnOutsideClick: true,\n closeOnEsc: true,\n open: true,\n onClose: () => {},\n closable: true,\n preRender: false,\n animate: {\n name: 'puffInCenter',\n duration: '300ms',\n },\n mask: true,\n } as ModalType,\n p,\n );\n\n const modalId = createUniqueId();\n\n onCleanup(function unregisterModal() {\n unregisterModalCallback(modalId);\n if (modalId === modalIds().at(-1)) {\n popModalId();\n }\n });\n\n // Manage modalIds stack for overlay logic\n createEffect(\n on(\n () => p.open,\n open => {\n if (open) {\n if (modalId !== modalIds().at(-1)) {\n setModalIds([...modalIds(), modalId]);\n }\n registerModalCallback(modalId, () => {\n if (p.closeOnEsc) p.onClose();\n });\n } else {\n unregisterModalCallback(modalId);\n if (modalId === modalIds().at(-1)) {\n popModalId();\n }\n }\n },\n ),\n );\n\n const renderMaskEnabled = (): boolean => {\n if (!p.open) return false;\n if (modalId !== modalIds().at(-1)) return false;\n if (p.mask === false) return false;\n if (typeof p.mask === 'object' && p.mask?.enabled === false) return false;\n return true;\n };\n\n const renderMaskClass = (): string => {\n if (typeof p.mask === 'object' && p.mask?.blur === false) {\n return 'bg-modal-overlay';\n }\n return 'bg-modal-overlay backdrop-blur-[5px]';\n };\n\n const animName = (): AnimateType => p.animate?.name ?? 'none';\n const isTransformAnim = () => TRANSFORM_ANIMATIONS.has(animName());\n\n // For transform-based animations: rendered on a sibling absolutely-positioned\n // overlay div that visually matches the modal box but is NOT an ancestor of\n // body content. This completely avoids the containing-block issue.\n // For opacity-only animations (fadeIn): applied directly on the modal box.\n const renderModalBoxAnim = () => {\n if (!isTransformAnim() && animName() !== 'none') {\n return { animation: renderCSSAnimation(p.animate!) };\n }\n return {};\n };\n\n const renderOverlayAnim = () => {\n if (isTransformAnim()) {\n return { animation: renderCSSAnimation(p.animate!) };\n }\n return {};\n };\n\n const renderBoxStyle = () => {\n const style: Record<string, any> = {};\n if (p.width) {\n style['width'] = p.width;\n style['min-width'] = p.width;\n }\n return style;\n };\n\n // Overlay: a visually identical copy of the modal box that carries the\n // transform animation. It sits on top of the real modal box via absolute\n // positioning. Once animation ends it is hidden and the real box is shown.\n const [overlayDone, setOverlayDone] = createSignal(false);\n const handleOverlayAnimEnd = () => setOverlayDone(true);\n\n // Reset overlayDone each time modal re-opens so transform animation replays.\n createEffect(\n on(\n () => p.open,\n open => {\n if (open) setOverlayDone(false);\n },\n ),\n );\n\n // Real modal box becomes visible only after transform animation finishes\n // (to avoid showing both simultaneously).\n const boxVisible = () => !isTransformAnim() || overlayDone();\n\n const handleBackdropClick = () => {\n if (p.closeOnOutsideClick) {\n p.onClose();\n }\n };\n\n return (\n <ZIndex\n type={ZIndexType.MODAL}\n open={p.open ?? false}\n blockScroll\n preRender={p.preRender}\n position={{ inset: '0' }}\n class={cn('mo01', p.class?.wrapper)}\n >\n {/* Backdrop overlay — only for topmost modal */}\n <Show when={renderMaskEnabled()}>\n <div class={cn('mo02', renderMaskClass())} onClick={handleBackdropClick} />\n </Show>\n\n {/* Invisible hit area for outside-click when mask is disabled */}\n <Show when={!renderMaskEnabled() && p.closeOnOutsideClick}>\n <div class=\"mo02\" onClick={handleBackdropClick} />\n </Show>\n\n {/* Wrapper: flex item căn giữa bởi parent. Kích thước khớp real box.\n Overlay absolute bên trong → luôn cùng vị trí & kích thước với real box. */}\n <div class=\"mo03\" onClick={e => e.stopPropagation()}>\n {/* === Transform animation approach ===\n Overlay là visual clone với animation transform, positioned absolute\n bên trong wrapper → khớp 100% kích thước/vị trí với real box.\n Giữ body content thoát khỏi transform ancestor. */}\n <Show when={isTransformAnim() && !overlayDone()}>\n <div\n class={cn('mo04', p.class?.modal)}\n style={{ ...renderBoxStyle(), ...renderOverlayAnim() }}\n onAnimationEnd={handleOverlayAnimEnd}\n aria-hidden=\"true\"\n />\n </Show>\n\n {/* === Real modal box ===\n Dùng opacity animation (an toàn) hoặc không animation.\n Body content luôn thoát khỏi transform ancestor. */}\n <div\n class={cn('mo05', p.class?.modal)}\n style={{\n ...renderModalBoxAnim(),\n ...renderBoxStyle(),\n visibility: boxVisible() ? 'visible' : 'hidden',\n }}\n >\n {p.closable && (\n <button class={cn('mo06', p.class?.closeButton)} onClick={p.onClose} aria-label=\"Close\">\n <X size={16} />\n </button>\n )}\n\n <div class={cn('mo-header', p.class?.header)}>\n <Show when={p.header} fallback={<div class=\"mo07\">Modal ID: {modalId}</div>}>\n {p.header as Element}\n </Show>\n </div>\n\n <div class={cn('mo08', p.class?.body)}>\n <Show when={p.body}>{p.body as Element}</Show>\n </div>\n\n <Show when={p.footer}>\n <div class={cn('mo-footer', p.class?.footer)}>{p.footer as Element}</div>\n </Show>\n </div>\n </div>\n </ZIndex>\n );\n};\n\nexport const Modal = conditionalRender(ComponentModal, { preRender: 'preRender', when: 'open' });\n\nexport { ComponentModal };\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"modalContext.js","names":["createComponent","createRoot","createSignal","ComponentModal","ModalType","activeModalInstances","ModalInstance","destroy","createModal","options","Omit","disposeRoot","setIsOpen","v","disposed","doClose","callOnClose","onClose","index","indexOf","instance","splice","setTimeout","root","isOpen","_setIsOpen","open","preRender","push","closeAllModals","instances","forEach"],"sources":["../../../src/components/modal/modalContext.tsx"],"sourcesContent":["import { createComponent, createRoot, createSignal } from 'solid-js';\nimport { ComponentModal, ModalType } from './modal';\n\nconst activeModalInstances: ModalInstance[] = [];\n\ntype ModalInstance = {\n destroy: () => void;\n};\n\nexport function createModal(options: Omit<ModalType, 'open' | 'preRender'>): ModalInstance {\n let disposeRoot: (() => void) | null = null;\n let setIsOpen: ((v: boolean) => void) | null = null;\n let disposed = false;\n\n const doClose = (callOnClose: boolean) => {\n if (disposed) return;\n disposed = true;\n\n setIsOpen?.(false);\n if (callOnClose) options.onClose?.();\n\n const index = activeModalInstances.indexOf(instance);\n if (index > -1) {\n activeModalInstances.splice(index, 1);\n }\n\n setTimeout(() => {\n disposeRoot?.();\n }, 150);\n };\n\n createRoot(root => {\n disposeRoot = root;\n const [isOpen, _setIsOpen] = createSignal(true);\n setIsOpen = _setIsOpen;\n\n // ComponentModal renders via Portal (ZIndex → Portal) — it mounts itself\n // into document.body internally. We only need to call it inside a reactive\n // root so its signals/effects run; we don't need to insert it anywhere.\n createComponent(ComponentModal, {\n ...options,\n get open() {\n return isOpen();\n },\n preRender: false,\n onClose: () => doClose(true),\n });\n });\n\n const instance: ModalInstance = {\n destroy: () => doClose(false),\n };\n\n activeModalInstances.push(instance);\n return instance;\n}\n\nexport function closeAllModals() {\n const instances = [...activeModalInstances];\n instances.forEach(instance => instance.destroy());\n}\n"],"mappings":"yHAGA,IAAMK,EAAwC,EAAE,CAMhD,SAAgBG,EAAYC,EAA+D,CACzF,IAAIE,EAAmC,KACnCC,EAA2C,KAC3CE,EAAW,GAETC,EAAWC,GAAyB,CACxC,GAAIF,EAAU,OACdA,EAAW,GAEXF,IAAY,GAAM,CACdI,GAAaP,EAAQQ,WAAW,CAEpC,IAAMC,EAAQb,EAAqBc,QAAQC,EAAS,CAChDF,EAAQ,IACVb,EAAqBgB,OAAOH,EAAO,EAAE,CAGvCI,eAAiB,CACfX,KAAe,EACd,IAAI,EAGTV,EAAWsB,GAAQ,CACjBZ,EAAcY,EACd,GAAM,CAACC,EAAQC,GAAcvB,EAAa,GAAK,CAC/CU,EAAYa,EAKZzB,EAAgBG,EAAgB,CAC9B,GAAGM,EACH,IAAIiB,MAAO,CACT,OAAOF,GAAQ,EAEjBG,UAAW,GACXV,YAAeF,EAAQ,GAAI,CAC5B,CAAC,EACF,CAEF,IAAMK,EAA0B,CAC9Bb,YAAeQ,EAAQ,GAAK,CAC7B,CAGD,OADAV,EAAqBuB,KAAKR,EAAS,CAC5BA,EAGT,SAAgBS,GAAiB,CACb,CAAC,GAAGxB,EAAqB,CACjC0B,QAAQX,GAAYA,EAASb,SAAS,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"pagination.js","names":["Select","cn","getColor","ChevronLeft","ChevronRight","Component","createEffect","createMemo","createSignal","For","Match","mergeProps","Show","Switch","PaginationDefaultProps","PaginationFullyProps","PaginationProps","PaginationSimpleProps","DEFAULT_PROPS","defaultCurrent","defaultPageSize","total","align","const","size","color","hideOnSinglePage","showLessItems","showQuickJumper","showTitle","disabled","pageSizeOptions","totalBoundaryShowSizeChanger","buildSizeClass","buildAlignClass","mapSizeToSelect","buildPageItems","totalPages","current","sibling","Array","from","length","_","i","items","push","leftBound","Math","max","rightBound","min","PaginationDefault","props","p","internalCurrent","setInternalCurrent","internalPageSize","setInternalPageSize","jumpValue","setJumpValue","pageSize","ceil","showSizeChanger","shouldHide","changePage","page","clamped","onChange","changePageSize","newTotal","newCurrent","onShowSizeChange","pageItems","handleJump","val","parseInt","isNaN","range","start","end","pageSizeSelectOpts","map","opt","label","value","_$createComponent","when","children","_el$","_tmpl$5","_$insert","showTotal","_el$2","_tmpl$","_$effect","_$className","class","btn","_el$8","_tmpl$6","$$click","_p$","_v$6","prev","btnDisabled","_v$7","e","t","undefined","itemRender","each","item","_el$9","_tmpl$7","jump","_$setAttribute","_v$8","ellipsis","_v$9","pageBtn","_el$0","_tmpl$8","_v$0","itemActive","_v$1","_v$10","a","_el$1","_tmpl$9","_v$11","next","_v$12","_el$3","_tmpl$2","options","placement","root","sizeChanger","_el$4","_tmpl$4","_el$5","firstChild","_el$6","nextSibling","$$keydown","key","currentTarget","blur","$$input","_$memo","goButton","fallback","_el$7","_tmpl$3","_v$","jumper","_v$2","jumperLabel","_v$3","jumperInput","_v$4","_v$5","o","PaginationSimple","_el$10","_tmpl$0","_el$11","_el$12","_el$13","_el$14","_el$15","_el$16","addEventListener","v","target","HTMLInputElement","select","_v$13","_v$14","_v$15","_v$16","simplePager","_v$17","simpleInput","_v$18","_v$19","_v$20","slash","_v$21","_v$22","n","s","h","r","d","PaginationFully","modernPageInput","setModernPageInput","String","syncPageInput","commitPageInput","num","_el$17","_tmpl$1","_el$18","_el$19","_el$20","_el$21","_el$22","_el$23","_el$26","_el$24","_el$27","_el$25","_el$28","_el$29","_el$30","_el$31","_el$33","_el$32","_el$34","_el$35","Number","_el$36","_tmpl$10","_v$23","_v$24","fullyLeft","_v$25","fullyLabel","_v$26","_v$27","_v$28","fullyRange","_v$29","fullyRight","_v$30","fullyPageInput","_v$31","_v$32","_v$33","_v$34","fullyPages","_v$35","_v$36","_v$37","_v$38","l","_$setStyleProperty","u","c","w","m","f","Pagination","mode","_$delegateEvents"],"sources":["../../../src/components/pagination/pagination.tsx"],"sourcesContent":["import { Select } from '@/components/select';\nimport { cn } from '@/utils/cn';\nimport { getColor } from '@/utils/helper';\nimport ChevronLeft from 'lucide-solid/icons/chevron-left';\nimport ChevronRight from 'lucide-solid/icons/chevron-right';\nimport {\n Component,\n createEffect,\n createMemo,\n createSignal,\n For,\n Match,\n mergeProps,\n Show,\n Switch,\n} from 'solid-js';\nimport type {\n PaginationDefaultProps,\n PaginationFullyProps,\n PaginationProps,\n PaginationSimpleProps,\n} from './pagination.types';\n\nconst DEFAULT_PROPS = {\n defaultCurrent: 1,\n defaultPageSize: 10,\n total: 0,\n align: 'start' as const,\n size: 'md' as const,\n color: 'neutral' as const,\n hideOnSinglePage: false,\n showLessItems: false,\n showQuickJumper: false,\n showTitle: true,\n disabled: false,\n pageSizeOptions: [10, 20, 50, 100],\n totalBoundaryShowSizeChanger: 50,\n};\n\n// ─── Shared helpers ─────────────────────────────────────────────────────────\n\nfunction buildSizeClass(size: string) {\n switch (size) {\n case 'xs':\n return 'pag26';\n case 'sm':\n return 'pag27';\n case 'lg':\n return 'pag29';\n case 'xl':\n return 'pag30';\n default:\n return 'pag28';\n }\n}\n\nfunction buildAlignClass(align: string) {\n switch (align) {\n case 'center':\n return 'justify-center';\n case 'end':\n return 'justify-end';\n default:\n return 'justify-start';\n }\n}\n\nfunction mapSizeToSelect(size: string): 'sm' | 'md' | 'lg' {\n if (size === 'lg' || size === 'xl') return 'lg';\n if (size === 'md') return 'md';\n return 'sm';\n}\n\n// Build page list with ellipsis algorithm\nfunction buildPageItems(totalPages: number, current: number, showLessItems: boolean) {\n const sibling = showLessItems ? 1 : 2;\n\n if (totalPages <= (showLessItems ? 7 : 9)) {\n return Array.from({ length: totalPages }, (_, i) => i + 1);\n }\n\n const items: (number | 'prev-ellipsis' | 'next-ellipsis')[] = [];\n\n items.push(1);\n\n const leftBound = Math.max(2, current - sibling);\n const rightBound = Math.min(totalPages - 1, current + sibling);\n\n if (leftBound > 2) items.push('prev-ellipsis');\n for (let i = leftBound; i <= rightBound; i++) items.push(i);\n if (rightBound < totalPages - 1) items.push('next-ellipsis');\n\n items.push(totalPages);\n\n return items;\n}\n\n// ─── Mode: default ──────────────────────────────────────────────────────────\n\nconst PaginationDefault: Component<PaginationDefaultProps> = props => {\n const p = mergeProps(DEFAULT_PROPS, props);\n\n const [internalCurrent, setInternalCurrent] = createSignal(p.defaultCurrent);\n const [internalPageSize, setInternalPageSize] = createSignal(p.defaultPageSize);\n const [jumpValue, setJumpValue] = createSignal('');\n\n const current = createMemo(() => p.current ?? internalCurrent());\n const pageSize = createMemo(() => p.pageSize ?? internalPageSize());\n const totalPages = createMemo(() => Math.max(1, Math.ceil((p.total ?? 0) / pageSize())));\n\n const showSizeChanger = createMemo(() => {\n if (typeof p.showSizeChanger === 'boolean') return p.showSizeChanger;\n if (typeof p.showSizeChanger === 'object') return true;\n return (p.total ?? 0) > (p.totalBoundaryShowSizeChanger ?? 50);\n });\n\n const shouldHide = createMemo(() => p.hideOnSinglePage && totalPages() <= 1);\n\n const changePage = (page: number) => {\n const clamped = Math.min(Math.max(1, page), totalPages());\n if (clamped === current()) return;\n setInternalCurrent(clamped);\n p.onChange?.(clamped, pageSize());\n };\n\n const changePageSize = (size: number) => {\n const newTotal = Math.max(1, Math.ceil((p.total ?? 0) / size));\n const newCurrent = Math.min(current(), newTotal);\n setInternalPageSize(size);\n setInternalCurrent(newCurrent);\n p.onShowSizeChange?.(newCurrent, size);\n p.onChange?.(newCurrent, size);\n };\n\n const pageItems = createMemo(() => buildPageItems(totalPages(), current(), p.showLessItems));\n\n const handleJump = () => {\n const val = parseInt(jumpValue(), 10);\n if (!isNaN(val)) {\n changePage(val);\n setJumpValue('');\n }\n };\n\n const range = createMemo<[number, number]>(() => {\n const start = (current() - 1) * pageSize() + 1;\n const end = Math.min(current() * pageSize(), p.total ?? 0);\n return [start, end];\n });\n\n const pageSizeSelectOpts = createMemo(() =>\n p.pageSizeOptions.map(opt => ({ label: `${opt} / page`, value: opt as number })),\n );\n\n return (\n <Show when={!shouldHide()}>\n <div\n class={cn(\n 'pag01 pag02',\n buildSizeClass(p.size),\n buildAlignClass(p.align),\n getColor(p.color),\n p.disabled && 'pag05',\n p.class?.root,\n )}\n >\n {/* Show total */}\n <Show when={p.showTotal}>\n <span class={cn('pag13', p.class?.total)}>{p.showTotal!(p.total ?? 0, range())}</span>\n </Show>\n\n {/* Prev button */}\n {(() => {\n const btn = (\n <button\n class={cn(\n 'pag06 pag08',\n p.class?.btn,\n p.class?.prev,\n current() <= 1 && 'pag07',\n current() <= 1 && p.class?.btnDisabled,\n )}\n disabled={p.disabled || current() <= 1}\n onClick={() => changePage(current() - 1)}\n title=\"Previous Page\"\n >\n <ChevronLeft size={16} />\n </button>\n );\n return p.itemRender ? p.itemRender(current() - 1, 'prev', btn) : btn;\n })()}\n\n {/* Page items */}\n <For each={pageItems()}>\n {item => {\n if (item === 'prev-ellipsis' || item === 'next-ellipsis') {\n return (\n <button\n class={cn('pag06 pag10', p.class?.btn, p.class?.ellipsis)}\n disabled={p.disabled}\n onClick={() => {\n const jump =\n item === 'prev-ellipsis'\n ? Math.max(1, current() - (p.showLessItems ? 3 : 5))\n : Math.min(totalPages(), current() + (p.showLessItems ? 3 : 5));\n changePage(jump);\n }}\n title={item === 'prev-ellipsis' ? 'Previous 5 pages' : 'Next 5 pages'}\n >\n •••\n </button>\n );\n }\n const pageBtn = (\n <button\n class={cn(\n 'pag06',\n item === current() && 'pag11',\n item === current() && p.class?.itemActive,\n p.class?.btn,\n )}\n disabled={p.disabled}\n onClick={() => changePage(item)}\n title={p.showTitle ? `Page ${item}` : undefined}\n >\n {item}\n </button>\n );\n return p.itemRender ? p.itemRender(item, 'page', pageBtn) : pageBtn;\n }}\n </For>\n\n {/* Next button */}\n {(() => {\n const btn = (\n <button\n class={cn(\n 'pag06 pag09',\n current() >= totalPages() && 'pag07',\n current() >= totalPages() && p.class?.btnDisabled,\n p.class?.btn,\n p.class?.next,\n )}\n disabled={p.disabled || current() >= totalPages()}\n onClick={() => changePage(current() + 1)}\n title=\"Next Page\"\n >\n <ChevronRight size={16} />\n </button>\n );\n return p.itemRender ? p.itemRender(current() + 1, 'next', btn) : btn;\n })()}\n\n {/* Size changer */}\n <Show when={showSizeChanger()}>\n <div class=\"w-fit\">\n <Select\n options={pageSizeSelectOpts()}\n value={pageSize()}\n onChange={val => changePageSize(val as number)}\n disabled={p.disabled}\n size={mapSizeToSelect(p.size)}\n color={p.color}\n placement=\"top\"\n class={{ root: p.class?.sizeChanger }}\n />\n </div>\n </Show>\n\n {/* Quick jumper */}\n <Show when={p.showQuickJumper}>\n <span\n class={cn(\n 'pag14',\n p.align === 'end' && 'order-first mr-auto',\n p.align === 'start' && 'ml-auto',\n p.class?.jumper,\n )}\n >\n <span class={cn('pag15', p.class?.jumperLabel)}>Go to</span>\n <input\n class={cn('pag16', p.class?.jumperInput)}\n type=\"number\"\n min={1}\n max={totalPages()}\n value={jumpValue()}\n disabled={p.disabled}\n onInput={e => setJumpValue(e.currentTarget.value)}\n onKeyDown={e => {\n if (e.key === 'Enter') {\n handleJump();\n e.currentTarget.blur();\n }\n }}\n />\n <Show\n when={typeof p.showQuickJumper === 'object' && p.showQuickJumper.goButton}\n fallback={null}\n >\n <span onClick={() => handleJump()} class=\"cursor-pointer\">\n {(p.showQuickJumper as { goButton: any }).goButton}\n </span>\n </Show>\n </span>\n </Show>\n </div>\n </Show>\n );\n};\n\n// ─── Mode: simple ────────────────────────────────────────────────────────────\n\nconst PaginationSimple: Component<PaginationSimpleProps> = props => {\n const p = mergeProps(DEFAULT_PROPS, props);\n\n const [internalCurrent, setInternalCurrent] = createSignal(p.defaultCurrent);\n const [internalPageSize, setInternalPageSize] = createSignal(p.defaultPageSize);\n\n const current = createMemo(() => p.current ?? internalCurrent());\n const pageSize = createMemo(() => p.pageSize ?? internalPageSize());\n const totalPages = createMemo(() => Math.max(1, Math.ceil((p.total ?? 0) / pageSize())));\n const shouldHide = createMemo(() => p.hideOnSinglePage && totalPages() <= 1);\n\n const changePage = (page: number) => {\n const clamped = Math.min(Math.max(1, page), totalPages());\n if (clamped === current()) return;\n setInternalCurrent(clamped);\n p.onChange?.(clamped, pageSize());\n };\n\n return (\n <Show when={!shouldHide()}>\n <div\n class={cn(\n 'pag01 pag03',\n buildSizeClass(p.size),\n buildAlignClass(p.align),\n getColor(p.color),\n p.disabled && 'pag05',\n p.class?.root,\n )}\n >\n <button\n class={cn(\n 'pag06 pag08',\n p.class?.btn,\n p.class?.prev,\n current() <= 1 && 'pag07',\n current() <= 1 && p.class?.btnDisabled,\n )}\n disabled={p.disabled || current() <= 1}\n onClick={() => changePage(current() - 1)}\n title=\"Previous\"\n >\n <ChevronLeft size={16} />\n </button>\n <span class={cn('pag17', p.class?.simplePager)}>\n <input\n class={cn('pag18', p.class?.simpleInput)}\n type=\"number\"\n min={1}\n max={totalPages()}\n value={current()}\n disabled={p.disabled}\n onFocus={e => e.currentTarget.select()}\n onKeyDown={e => {\n if (e.key === 'Enter') {\n const v = parseInt((e.target as HTMLInputElement).value, 10);\n if (!isNaN(v)) changePage(v);\n }\n }}\n onBlur={e => {\n const v = parseInt(e.currentTarget.value, 10);\n if (!isNaN(v)) changePage(v);\n }}\n />\n <span class={cn('pag19', p.class?.slash)}>/</span>\n <span>{totalPages()}</span>\n </span>\n <button\n class={cn(\n 'pag06 pag09',\n p.class?.btn,\n p.class?.next,\n current() >= totalPages() && 'pag07',\n current() >= totalPages() && p.class?.btnDisabled,\n )}\n disabled={p.disabled || current() >= totalPages()}\n onClick={() => changePage(current() + 1)}\n title=\"Next\"\n >\n <ChevronRight size={16} />\n </button>\n </div>\n </Show>\n );\n};\n\n// ─── Mode: fully ─────────────────────────────────────────────────────────────\n\nconst PaginationFully: Component<PaginationFullyProps> = props => {\n const p = mergeProps(DEFAULT_PROPS, props);\n\n const [internalCurrent, setInternalCurrent] = createSignal(p.defaultCurrent);\n const [internalPageSize, setInternalPageSize] = createSignal(p.defaultPageSize);\n const [modernPageInput, setModernPageInput] = createSignal(String(p.defaultCurrent ?? 1));\n\n const current = createMemo(() => p.current ?? internalCurrent());\n const pageSize = createMemo(() => p.pageSize ?? internalPageSize());\n const totalPages = createMemo(() => Math.max(1, Math.ceil((p.total ?? 0) / pageSize())));\n const shouldHide = createMemo(() => p.hideOnSinglePage && totalPages() <= 1);\n\n createEffect(function syncPageInput() {\n setModernPageInput(String(current()));\n });\n\n const changePage = (page: number) => {\n const clamped = Math.min(Math.max(1, page), totalPages());\n if (clamped === current()) return;\n setInternalCurrent(clamped);\n p.onChange?.(clamped, pageSize());\n };\n\n const changePageSize = (size: number) => {\n const newTotal = Math.max(1, Math.ceil((p.total ?? 0) / size));\n const newCurrent = Math.min(current(), newTotal);\n setInternalPageSize(size);\n setInternalCurrent(newCurrent);\n p.onShowSizeChange?.(newCurrent, size);\n p.onChange?.(newCurrent, size);\n };\n\n const range = createMemo<[number, number]>(() => {\n const start = (current() - 1) * pageSize() + 1;\n const end = Math.min(current() * pageSize(), p.total ?? 0);\n return [start, end];\n });\n\n const commitPageInput = (value: string) => {\n const num = parseInt(value, 10);\n const clamped = !isNaN(num) ? Math.min(Math.max(1, num), totalPages()) : current();\n changePage(clamped);\n setModernPageInput(String(clamped));\n };\n\n return (\n <Show when={!shouldHide()}>\n <div\n class={cn(\n 'pag01 pag04',\n buildSizeClass(p.size),\n getColor(p.color),\n p.disabled && 'pag05',\n p.class?.root,\n )}\n >\n {/* Left: items-per-page dropdown + range */}\n <div class={cn('pag20', p.class?.fullyLeft)}>\n <span class={cn('pag22', p.class?.fullyLabel)}>Items per page:</span>\n <select\n class={cn('pag12', p.class?.sizeChanger)}\n disabled={p.disabled}\n value={pageSize()}\n onChange={e => changePageSize(Number(e.currentTarget.value))}\n >\n <For each={p.pageSizeOptions}>{opt => <option value={opt}>{opt}</option>}</For>\n </select>\n <div class=\"bg-c3/50 w-px self-stretch\"></div>\n <span class={cn('pag23', p.class?.fullyRange)}>\n {range()[0]}–{range()[1]} of {p.total ?? 0} items\n </span>\n </div>\n\n {/* Right: page input + prev/next buttons */}\n <div class={cn('pag21', p.class?.fullyRight)}>\n <input\n class={cn('pag25', p.class?.fullyPageInput)}\n type=\"number\"\n min={1}\n max={totalPages()}\n value={modernPageInput()}\n disabled={p.disabled}\n style={{ width: `${Math.max(2, modernPageInput().length) + 0.5}ch` }}\n onFocus={e => e.currentTarget.select()}\n onInput={e => setModernPageInput(e.currentTarget.value)}\n onBlur={e => commitPageInput(e.currentTarget.value)}\n onKeyDown={e => {\n if (e.key === 'Enter') {\n commitPageInput((e.currentTarget as HTMLInputElement).value);\n e.currentTarget.blur();\n }\n }}\n />\n <span class={cn('pag24', p.class?.fullyPages)}>of {totalPages()} pages</span>\n <button\n class={cn(\n 'pag06',\n p.class?.btn,\n p.class?.prev,\n current() <= 1 && 'pag07',\n current() <= 1 && p.class?.btnDisabled,\n )}\n disabled={p.disabled || current() <= 1}\n onClick={() => changePage(current() - 1)}\n title=\"Previous Page\"\n >\n <ChevronLeft size={16} />\n </button>\n <button\n class={cn(\n 'pag06',\n p.class?.btn,\n p.class?.next,\n current() >= totalPages() && 'pag07',\n current() >= totalPages() && p.class?.btnDisabled,\n )}\n disabled={p.disabled || current() >= totalPages()}\n onClick={() => changePage(current() + 1)}\n title=\"Next Page\"\n >\n <ChevronRight size={16} />\n </button>\n </div>\n </div>\n </Show>\n );\n};\n\n// ─── Public component ────────────────────────────────────────────────────────\n\nexport const Pagination: Component<PaginationProps> = p => {\n return (\n <Switch fallback={<PaginationDefault {...(p as PaginationDefaultProps)} />}>\n <Match when={p.mode === 'simple'}>\n <PaginationSimple {...(p as PaginationSimpleProps)} />\n </Match>\n <Match when={p.mode === 'fully'}>\n <PaginationFully {...(p as PaginationFullyProps)} />\n </Match>\n </Switch>\n );\n};\n"],"mappings":"2qCAuBMkB,EAAgB,CACpBC,eAAgB,EAChBC,gBAAiB,GACjBC,MAAO,EACPC,MAAO,QACPE,KAAM,KACNC,MAAO,UACPC,iBAAkB,GAClBC,cAAe,GACfC,gBAAiB,GACjBC,UAAW,GACXC,SAAU,GACVC,gBAAiB,CAAC,GAAI,GAAI,GAAI,IAAI,CAClCC,6BAA8B,GAC/B,CAID,SAASC,EAAeT,EAAc,CACpC,OAAQA,EAAR,CACE,IAAK,KACH,MAAO,QACT,IAAK,KACH,MAAO,QACT,IAAK,KACH,MAAO,QACT,IAAK,KACH,MAAO,QACT,QACE,MAAO,SAIb,SAASU,EAAgBZ,EAAe,CACtC,OAAQA,EAAR,CACE,IAAK,SACH,MAAO,iBACT,IAAK,MACH,MAAO,cACT,QACE,MAAO,iBAIb,SAASa,EAAgBX,EAAkC,CAGzD,OAFIA,IAAS,MAAQA,IAAS,KAAa,KACvCA,IAAS,KAAa,KACnB,KAIT,SAASY,EAAeC,EAAoBC,EAAiBX,EAAwB,CACnF,IAAMY,EAAUZ,EAAgB,EAAI,EAEpC,GAAIU,IAAeV,EAAgB,EAAI,GACrC,OAAOa,MAAMC,KAAK,CAAEC,OAAQL,EAAY,EAAGM,EAAGC,IAAMA,EAAI,EAAE,CAG5D,IAAMC,EAAwD,EAAE,CAEhEA,EAAMC,KAAK,EAAE,CAEb,IAAMC,EAAYC,KAAKC,IAAI,EAAGX,EAAUC,EAAQ,CAC1CW,EAAaF,KAAKG,IAAId,EAAa,EAAGC,EAAUC,EAAQ,CAE1DQ,EAAY,GAAGF,EAAMC,KAAK,gBAAgB,CAC9C,IAAK,IAAIF,EAAIG,EAAWH,GAAKM,EAAYN,IAAKC,EAAMC,KAAKF,EAAE,CAK3D,OAJIM,EAAab,EAAa,GAAGQ,EAAMC,KAAK,gBAAgB,CAE5DD,EAAMC,KAAKT,EAAW,CAEfQ,EAKT,IAAMO,EAAuDC,GAAS,CACpE,IAAMC,EAAI3C,EAAWO,EAAemC,EAAM,CAEpC,CAACE,EAAiBC,GAAsBhD,EAAa8C,EAAEnC,eAAe,CACtE,CAACsC,EAAkBC,GAAuBlD,EAAa8C,EAAElC,gBAAgB,CACzE,CAACuC,EAAWC,GAAgBpD,EAAa,GAAG,CAE5C8B,EAAU/B,MAAiB+C,EAAEhB,SAAWiB,GAAiB,CAAC,CAC1DM,EAAWtD,MAAiB+C,EAAEO,UAAYJ,GAAkB,CAAC,CAC7DpB,EAAa9B,MAAiByC,KAAKC,IAAI,EAAGD,KAAKc,MAAMR,EAAEjC,OAAS,GAAKwC,GAAU,CAAC,CAAC,CAAC,CAElFE,EAAkBxD,MAClB,OAAO+C,EAAES,iBAAoB,UAAkBT,EAAES,gBACjD,OAAOT,EAAES,iBAAoB,SAAiB,IAC1CT,EAAEjC,OAAS,IAAMiC,EAAEtB,8BAAgC,IAC3D,CAEIgC,EAAazD,MAAiB+C,EAAE5B,kBAAoBW,GAAY,EAAI,EAAE,CAEtE4B,EAAcC,GAAiB,CACnC,IAAMC,EAAUnB,KAAKG,IAAIH,KAAKC,IAAI,EAAGiB,EAAK,CAAE7B,GAAY,CAAC,CACrD8B,IAAY7B,GAAS,GACzBkB,EAAmBW,EAAQ,CAC3Bb,EAAEc,WAAWD,EAASN,GAAU,CAAC,GAG7BQ,EAAkB7C,GAAiB,CACvC,IAAM8C,EAAWtB,KAAKC,IAAI,EAAGD,KAAKc,MAAMR,EAAEjC,OAAS,GAAKG,EAAK,CAAC,CACxD+C,EAAavB,KAAKG,IAAIb,GAAS,CAAEgC,EAAS,CAChDZ,EAAoBlC,EAAK,CACzBgC,EAAmBe,EAAW,CAC9BjB,EAAEkB,mBAAmBD,EAAY/C,EAAK,CACtC8B,EAAEc,WAAWG,EAAY/C,EAAK,EAG1BiD,EAAYlE,MAAiB6B,EAAeC,GAAY,CAAEC,GAAS,CAAEgB,EAAE3B,cAAc,CAAC,CAEtF+C,MAAmB,CACvB,IAAMC,EAAMC,SAASjB,GAAW,CAAE,GAAG,CAChCkB,MAAMF,EAAI,GACbV,EAAWU,EAAI,CACff,EAAa,GAAG,GAIdkB,EAAQvE,MAGL,EAFQ+B,GAAS,CAAG,GAAKuB,GAAU,CAAG,EACjCb,KAAKG,IAAIb,GAAS,CAAGuB,GAAU,CAAEP,EAAEjC,OAAS,EAAE,CACvC,CACnB,CAEI4D,EAAqB1E,MACzB+C,EAAEvB,gBAAgBmD,IAAIC,IAAQ,CAAEC,MAAO,GAAGD,EAAG,SAAWE,MAAOF,EAAe,EAChF,CAAC,CAED,OAAAG,EACG1E,EAAI,CAAA,IAAC2E,MAAI,CAAA,MAAE,CAACvB,GAAY,EAAA,IAAAwB,UAAA,CAAA,IAAAC,EAAAC,GAAA,CASpB,OAToBC,EAAAF,EAAAH,EAYpB1E,EAAI,CAAA,IAAC2E,MAAI,CAAA,OAAEjC,EAAEsC,WAAS,IAAAJ,UAAA,CAAA,IAAAK,EAAAC,GAAA,CACmB,OADnBH,EAAAE,MACsBvC,EAAEsC,UAAWtC,EAAEjC,OAAS,EAAGyD,GAAO,CAAC,CAAA,CAAAiB,MAAAC,EAAAH,EAAjE5F,EAAG,QAASqD,EAAE2C,OAAO5E,MAAM,CAAA,CAAA,CAAAwE,GAAA,CAAA,CAAA,KAAA,CAAAF,EAAAF,MAIlC,CACN,IAAMS,OAAG,CAAA,IAAAC,EAAAC,GAAA,CASiC,MATjCD,GAAAE,YAUUpC,EAAW3B,GAAS,CAAG,EAAE,CAAAqD,EAAAQ,EAAAb,EAGvCnF,EAAW,CAACqB,KAAM,GAAE,CAAA,CAAA,CAAAuE,EAAAO,GAAA,CAAA,IAAAC,EAXdtG,EACL,cACAqD,EAAE2C,OAAOC,IACT5C,EAAE2C,OAAOO,KACTlE,GAAS,EAAI,GAAK,QAClBA,GAAS,EAAI,GAAKgB,EAAE2C,OAAOQ,YAC5B,CAAAC,EACSpD,EAAExB,UAAYQ,GAAS,EAAI,EAAC,OAAAiE,IAAAD,EAAAK,GAAAX,EAAAG,EAAAG,EAAAK,EAAAJ,EAAA,CAAAG,IAAAJ,EAAAM,IAAAT,EAAArE,SAAAwE,EAAAM,EAAAF,GAAAJ,GAAA,CAAAK,EAAAE,IAAAA,GAAAD,EAAAC,IAAAA,GAAA,CAAA,CAAAV,KAMzC,CACD,OAAO7C,EAAEwD,WAAaxD,EAAEwD,WAAWxE,GAAS,CAAG,EAAG,OAAQ4D,EAAI,CAAGA,GAClE,KAAA,CAAAP,EAAAF,EAAAH,EAGA7E,EAAG,CAAA,IAACsG,MAAI,CAAA,OAAEtC,GAAW,EAAAe,SACnBwB,GAAQ,CACP,GAAIA,IAAS,iBAAmBA,IAAS,gBACvC,WAAA,CAAA,IAAAC,EAAAC,GAAA,CAGwB,MAHxBD,GAAAZ,YAImB,CAKbpC,EAHE+C,IAAS,gBACLhE,KAAKC,IAAI,EAAGX,GAAS,EAAIgB,EAAE3B,cAAgB,EAAI,GAAG,CAClDqB,KAAKG,IAAId,GAAY,CAAEC,GAAS,EAAIgB,EAAE3B,cAAgB,EAAI,GAAG,CACnD,EACjByF,EAAAH,EAAA,QACMD,IAAS,gBAAkB,mBAAqB,eAAc,CAAAjB,EAAAO,GAAA,CAAA,IAAAe,EAT9DpH,EAAG,cAAeqD,EAAE2C,OAAOC,IAAK5C,EAAE2C,OAAOqB,SAAS,CAAAC,EAC/CjE,EAAExB,SAAQ,OAAAuF,IAAAf,EAAAK,GAAAX,EAAAiB,EAAAX,EAAAK,EAAAU,EAAA,CAAAE,IAAAjB,EAAAM,IAAAK,EAAAnF,SAAAwE,EAAAM,EAAAW,GAAAjB,GAAA,CAAAK,EAAAE,IAAAA,GAAAD,EAAAC,IAAAA,GAAA,CAAA,CAAAI,KAAA,CAc1B,IAAMO,OAAO,CAAA,IAAAC,EAAAC,GAAA,CAUsC,MAVtCD,GAAApB,YASMpC,EAAW+C,EAAK,CAAArB,EAAA8B,EAG9BT,EAAI,CAAAjB,EAAAO,GAAA,CAAA,IAAAqB,EAVE1H,EACL,QACA+G,IAAS1E,GAAS,EAAI,QACtB0E,IAAS1E,GAAS,EAAIgB,EAAE2C,OAAO2B,WAC/BtE,EAAE2C,OAAOC,IACV,CAAA2B,EACSvE,EAAExB,SAAQgG,EAEbxE,EAAEzB,UAAY,QAAQmF,IAASH,IAAAA,GAAS,OAAAc,IAAArB,EAAAK,GAAAX,EAAAyB,EAAAnB,EAAAK,EAAAgB,EAAA,CAAAE,IAAAvB,EAAAM,IAAAa,EAAA3F,SAAAwE,EAAAM,EAAAiB,GAAAC,IAAAxB,EAAAyB,GAAAX,EAAAK,EAAA,QAAAnB,EAAAyB,EAAAD,EAAA,CAAAxB,GAAA,CAAAK,EAAAE,IAAAA,GAAAD,EAAAC,IAAAA,GAAAkB,EAAAlB,IAAAA,GAAA,CAAA,CAAAY,KAIlD,CACD,OAAOnE,EAAEwD,WAAaxD,EAAEwD,WAAWE,EAAM,OAAQQ,EAAQ,CAAGA,GAC7D,CAAA,CAAA,KAAA,CAAA7B,EAAAF,MAIK,CACN,IAAMS,OAAG,CAAA,IAAA8B,EAAAC,GAAA,CAS4C,MAT5CD,GAAA3B,YAUUpC,EAAW3B,GAAS,CAAG,EAAE,CAAAqD,EAAAqC,EAAA1C,EAGvClF,EAAY,CAACoB,KAAM,GAAE,CAAA,CAAA,CAAAuE,EAAAO,GAAA,CAAA,IAAA4B,EAXfjI,EACL,cACAqC,GAAS,EAAID,GAAY,EAAI,QAC7BC,GAAS,EAAID,GAAY,EAAIiB,EAAE2C,OAAOQ,YACtCnD,EAAE2C,OAAOC,IACT5C,EAAE2C,OAAOkC,KACV,CAAAC,EACS9E,EAAExB,UAAYQ,GAAS,EAAID,GAAY,CAAA,OAAA6F,IAAA5B,EAAAK,GAAAX,EAAAgC,EAAA1B,EAAAK,EAAAuB,EAAA,CAAAE,IAAA9B,EAAAM,IAAAoB,EAAAlG,SAAAwE,EAAAM,EAAAwB,GAAA9B,GAAA,CAAAK,EAAAE,IAAAA,GAAAD,EAAAC,IAAAA,GAAA,CAAA,CAAAmB,KAMpD,CACD,OAAO1E,EAAEwD,WAAaxD,EAAEwD,WAAWxE,GAAS,CAAG,EAAG,OAAQ4D,EAAI,CAAGA,GAClE,KAAA,CAAAP,EAAAF,EAAAH,EAGA1E,EAAI,CAAA,IAAC2E,MAAI,CAAA,OAAExB,GAAiB,EAAA,IAAAyB,UAAA,CAAA,IAAA6C,EAAAC,GAAA,CAUc,OAVd3C,EAAA0C,EAAA/C,EAExBtF,EAAM,CAAA,IACLuI,SAAO,CAAA,OAAEtD,GAAoB,EAAA,IAC7BI,OAAK,CAAA,OAAExB,GAAU,EACjBO,SAAUO,GAAON,EAAeM,EAAc,CAAA,IAC9C7C,UAAQ,CAAA,OAAEwB,EAAExB,UAAQ,IACpBN,MAAI,CAAA,OAAEW,EAAgBmB,EAAE9B,KAAK,EAAA,IAC7BC,OAAK,CAAA,OAAE6B,EAAE7B,OACT+G,UAAS,MAAA,IAAA,OAAA,CAAA,MACF,CAAEC,KAAMnF,EAAE2C,OAAOyC,YAAa,EAAA,CAAA,CAAA,CAAAL,GAAA,CAAA,CAAA,KAAA,CAAA1C,EAAAF,EAAAH,EAM1C1E,EAAI,CAAA,IAAC2E,MAAI,CAAA,OAAEjC,EAAE1B,iBAAe,IAAA4D,UAAA,CAAA,IAAAmD,EAAAC,GAAA,CAAAC,EAAAF,EAAAG,WAAAC,EAAAF,EAAAG,YAeL,MAfKD,GAAAE,UAkBZtC,GAAK,CACVA,EAAEuC,MAAQ,UACZxE,GAAY,CACZiC,EAAEwC,cAAcC,MAAM,GAEzBL,EAAAM,QANQ1C,GAAK/C,EAAa+C,EAAEwC,cAAc9D,MAAM,CAAAM,EAAAgD,EAAArD,EAQlD1E,EAAI,CAAA,IACH2E,MAAI,CAAA,OAAE+D,MAAA,OAAOhG,EAAE1B,iBAAoB,SAAQ,EAAA,EAAI0B,EAAE1B,gBAAgB2H,UACjEC,SAAU,KAAI,IAAAhE,UAAA,CAAA,IAAAiE,EAAAC,GAAA,CAGsC,MAHtCD,GAAApD,YAEO3B,GAAY,CAAAiB,EAAA8D,MAC7BnG,EAAE1B,gBAAsC2H,SAAQ,CAAAE,GAAA,CAAA,CAAA,KAAA,CAAA1D,EAAAO,GAAA,CAAA,IAAAqD,EA5B/C1J,EACL,QACAqD,EAAEhC,QAAU,OAAS,sBACrBgC,EAAEhC,QAAU,SAAW,UACvBgC,EAAE2C,OAAO2D,OACV,CAAAC,EAEY5J,EAAG,QAASqD,EAAE2C,OAAO6D,YAAY,CAAAC,EAErC9J,EAAG,QAASqD,EAAE2C,OAAO+D,YAAY,CAAAC,EAGnC5H,GAAY,CAAA6H,EAEP5G,EAAExB,SAAQ,OAAA6H,IAAArD,EAAAK,GAAAX,EAAA2C,EAAArC,EAAAK,EAAAgD,EAAA,CAAAE,IAAAvD,EAAAM,GAAAZ,EAAA6C,EAAAvC,EAAAM,EAAAiD,EAAA,CAAAE,IAAAzD,EAAAyB,GAAA/B,EAAA+C,EAAAzC,EAAAyB,EAAAgC,EAAA,CAAAE,IAAA3D,EAAA6D,GAAA/C,EAAA2B,EAAA,MAAAzC,EAAA6D,EAAAF,EAAA,CAAAC,IAAA5D,EAAA1D,IAAAmG,EAAAjH,SAAAwE,EAAA1D,EAAAsH,GAAA5D,GAAA,CAAAK,EAAAE,IAAAA,GAAAD,EAAAC,IAAAA,GAAAkB,EAAAlB,IAAAA,GAAAsD,EAAAtD,IAAAA,GAAAjE,EAAAiE,IAAAA,GAAA,CAAA,CAAAd,MAAAgD,EAAA1D,MADb1B,GAAW,CAAA,CAAAgF,GAAA,CAAA,CAAA,KAAA,CAAA5C,MAAAC,EAAAP,EAhIjBxF,EACL,cACAgC,EAAeqB,EAAE9B,KAAK,CACtBU,EAAgBoB,EAAEhC,MAAM,CACxBpB,EAASoD,EAAE7B,MAAM,CACjB6B,EAAExB,UAAY,QACdwB,EAAE2C,OAAOwC,KACV,CAAA,CAAA,CAAAhD,GAAA,CAAA,EAoJH2E,EAAqD/G,GAAS,CAClE,IAAMC,EAAI3C,EAAWO,EAAemC,EAAM,CAEpC,CAACE,EAAiBC,GAAsBhD,EAAa8C,EAAEnC,eAAe,CACtE,CAACsC,EAAkBC,GAAuBlD,EAAa8C,EAAElC,gBAAgB,CAEzEkB,EAAU/B,MAAiB+C,EAAEhB,SAAWiB,GAAiB,CAAC,CAC1DM,EAAWtD,MAAiB+C,EAAEO,UAAYJ,GAAkB,CAAC,CAC7DpB,EAAa9B,MAAiByC,KAAKC,IAAI,EAAGD,KAAKc,MAAMR,EAAEjC,OAAS,GAAKwC,GAAU,CAAC,CAAC,CAAC,CAClFG,EAAazD,MAAiB+C,EAAE5B,kBAAoBW,GAAY,EAAI,EAAE,CAEtE4B,EAAcC,GAAiB,CACnC,IAAMC,EAAUnB,KAAKG,IAAIH,KAAKC,IAAI,EAAGiB,EAAK,CAAE7B,GAAY,CAAC,CACrD8B,IAAY7B,GAAS,GACzBkB,EAAmBW,EAAQ,CAC3Bb,EAAEc,WAAWD,EAASN,GAAU,CAAC,GAGnC,OAAAyB,EACG1E,EAAI,CAAA,IAAC2E,MAAI,CAAA,MAAE,CAACvB,GAAY,EAAA,IAAAwB,UAAA,CAAA,IAAA6E,EAAAC,GAAA,CAAAC,EAAAF,EAAAvB,WAAA0B,EAAAD,EAAAvB,YAAAyB,EAAAD,EAAA1B,WAAA4B,EAAAD,EAAAzB,YAAA2B,EAAAD,EAAA1B,YAAA4B,EAAAJ,EAAAxB,YA+BD,MA/BCuB,GAAAlE,YAoBJpC,EAAW3B,GAAS,CAAG,EAAE,CAAAqD,EAAA4E,EAAAjF,EAGvCnF,EAAW,CAACqB,KAAM,GAAE,CAAA,CAAA,CAAAiJ,EAAAI,iBAAA,OAiBXlE,GAAK,CACX,IAAMmE,EAAIlG,SAAS+B,EAAEwC,cAAc9D,MAAO,GAAG,CACxCR,MAAMiG,EAAE,EAAE7G,EAAW6G,EAAE,EAC7B,CAAAL,EAAAxB,UATUtC,GAAK,CACd,GAAIA,EAAEuC,MAAQ,QAAS,CACrB,IAAM4B,EAAIlG,SAAU+B,EAAEoE,OAA4B1F,MAAO,GAAG,CACvDR,MAAMiG,EAAE,EAAE7G,EAAW6G,EAAE,GAE/BL,EAAAI,iBAAA,QANQlE,GAAKA,EAAEwC,cAAc8B,QAAQ,CAAA,CAAAtF,EAAAgF,EAajCtI,EAAU,CAAAuI,EAAAvE,YAWFpC,EAAW3B,GAAS,CAAG,EAAE,CAAAqD,EAAAiF,EAAAtF,EAGvClF,EAAY,CAACoB,KAAM,GAAE,CAAA,CAAA,CAAAuE,EAAAO,GAAA,CAAA,IAAA4E,EA1DjBjL,EACL,cACAgC,EAAeqB,EAAE9B,KAAK,CACtBU,EAAgBoB,EAAEhC,MAAM,CACxBpB,EAASoD,EAAE7B,MAAM,CACjB6B,EAAExB,UAAY,QACdwB,EAAE2C,OAAOwC,KACV,CAAA0C,EAGQlL,EACL,cACAqD,EAAE2C,OAAOC,IACT5C,EAAE2C,OAAOO,KACTlE,GAAS,EAAI,GAAK,QAClBA,GAAS,EAAI,GAAKgB,EAAE2C,OAAOQ,YAC5B,CAAA2E,EACS9H,EAAExB,UAAYQ,GAAS,EAAI,EAAC+I,EAM3BpL,EAAG,QAASqD,EAAE2C,OAAOqF,YAAY,CAAAC,EAEnCtL,EAAG,QAASqD,EAAE2C,OAAOuF,YAAY,CAAAC,EAGnCpJ,GAAY,CAAAqJ,EAEPpI,EAAExB,SAAQ6J,EAaT1L,EAAG,QAASqD,EAAE2C,OAAO2F,MAAM,CAAAC,EAIjC5L,EACL,cACAqD,EAAE2C,OAAOC,IACT5C,EAAE2C,OAAOkC,KACT7F,GAAS,EAAID,GAAY,EAAI,QAC7BC,GAAS,EAAID,GAAY,EAAIiB,EAAE2C,OAAOQ,YACvC,CAAAqF,EACSxI,EAAExB,UAAYQ,GAAS,EAAID,GAAY,CAAA,OAAA6I,IAAA5E,EAAAK,GAAAX,EAAAqE,EAAA/D,EAAAK,EAAAuE,EAAA,CAAAC,IAAA7E,EAAAM,GAAAZ,EAAAuE,EAAAjE,EAAAM,EAAAuE,EAAA,CAAAC,IAAA9E,EAAAyB,IAAAwC,EAAAzI,SAAAwE,EAAAyB,EAAAqD,GAAAC,IAAA/E,EAAA6D,GAAAnE,EAAAwE,EAAAlE,EAAA6D,EAAAkB,EAAA,CAAAE,IAAAjF,EAAA1D,GAAAoD,EAAAyE,EAAAnE,EAAA1D,EAAA2I,EAAA,CAAAE,IAAAnF,EAAAyF,GAAA3E,EAAAqD,EAAA,MAAAnE,EAAAyF,EAAAN,EAAA,CAAAC,IAAApF,EAAA0F,IAAAvB,EAAA3I,SAAAwE,EAAA0F,EAAAN,GAAAC,IAAArF,EAAA2F,GAAAjG,EAAA0E,EAAApE,EAAA2F,EAAAN,EAAA,CAAAE,IAAAvF,EAAA4F,GAAAlG,EAAA4E,EAAAtE,EAAA4F,EAAAL,EAAA,CAAAC,IAAAxF,EAAA6F,IAAAvB,EAAA9I,SAAAwE,EAAA6F,EAAAL,GAAAxF,GAAA,CAAAK,EAAAE,IAAAA,GAAAD,EAAAC,IAAAA,GAAAkB,EAAAlB,IAAAA,GAAAsD,EAAAtD,IAAAA,GAAAjE,EAAAiE,IAAAA,GAAAkF,EAAAlF,IAAAA,GAAAmF,EAAAnF,IAAAA,GAAAoF,EAAApF,IAAAA,GAAAqF,EAAArF,IAAAA,GAAAsF,EAAAtF,IAAAA,GAAA,CAAA,CAAAd,MAAA0E,EAAApF,MAzBxC/C,GAAS,CAAA,CAAA+H,GAAA,CAAA,EAsCtB+B,EAAmD/I,GAAS,CAChE,IAAMC,EAAI3C,EAAWO,EAAemC,EAAM,CAEpC,CAACE,EAAiBC,GAAsBhD,EAAa8C,EAAEnC,eAAe,CACtE,CAACsC,EAAkBC,GAAuBlD,EAAa8C,EAAElC,gBAAgB,CACzE,CAACiL,EAAiBC,GAAsB9L,EAAa+L,OAAOjJ,EAAEnC,gBAAkB,EAAE,CAAC,CAEnFmB,EAAU/B,MAAiB+C,EAAEhB,SAAWiB,GAAiB,CAAC,CAC1DM,EAAWtD,MAAiB+C,EAAEO,UAAYJ,GAAkB,CAAC,CAC7DpB,EAAa9B,MAAiByC,KAAKC,IAAI,EAAGD,KAAKc,MAAMR,EAAEjC,OAAS,GAAKwC,GAAU,CAAC,CAAC,CAAC,CAClFG,EAAazD,MAAiB+C,EAAE5B,kBAAoBW,GAAY,EAAI,EAAE,CAE5E/B,EAAa,UAAyB,CACpCgM,EAAmBC,OAAOjK,GAAS,CAAC,CAAC,EACrC,CAEF,IAAM2B,EAAcC,GAAiB,CACnC,IAAMC,EAAUnB,KAAKG,IAAIH,KAAKC,IAAI,EAAGiB,EAAK,CAAE7B,GAAY,CAAC,CACrD8B,IAAY7B,GAAS,GACzBkB,EAAmBW,EAAQ,CAC3Bb,EAAEc,WAAWD,EAASN,GAAU,CAAC,GAG7BQ,EAAkB7C,GAAiB,CACvC,IAAM8C,EAAWtB,KAAKC,IAAI,EAAGD,KAAKc,MAAMR,EAAEjC,OAAS,GAAKG,EAAK,CAAC,CACxD+C,EAAavB,KAAKG,IAAIb,GAAS,CAAEgC,EAAS,CAChDZ,EAAoBlC,EAAK,CACzBgC,EAAmBe,EAAW,CAC9BjB,EAAEkB,mBAAmBD,EAAY/C,EAAK,CACtC8B,EAAEc,WAAWG,EAAY/C,EAAK,EAG1BsD,EAAQvE,MAGL,EAFQ+B,GAAS,CAAG,GAAKuB,GAAU,CAAG,EACjCb,KAAKG,IAAIb,GAAS,CAAGuB,GAAU,CAAEP,EAAEjC,OAAS,EAAE,CACvC,CACnB,CAEIoL,EAAmBpH,GAAkB,CACzC,IAAMqH,EAAM9H,SAASS,EAAO,GAAG,CACzBlB,EAAWU,MAAM6H,EAAI,CAA8CpK,GAAS,CAApDU,KAAKG,IAAIH,KAAKC,IAAI,EAAGyJ,EAAI,CAAErK,GAAY,CAAC,CACtE4B,EAAWE,EAAQ,CACnBmI,EAAmBC,OAAOpI,EAAQ,CAAC,EAGrC,OAAAmB,EACG1E,EAAI,CAAA,IAAC2E,MAAI,CAAA,MAAE,CAACvB,GAAY,EAAA,IAAAwB,UAAA,CAAA,IAAAmH,EAAAC,GAAA,CAAAC,EAAAF,EAAA7D,WAAAgE,EAAAD,EAAA/D,WAAAiE,EAAAD,EAAA9D,YAAAiE,EAAAF,EAAA/D,YAAAA,YAAAkE,EAAAD,EAAAnE,WAAAqE,EAAAD,EAAAlE,YAAAqE,EAAAF,EAAAnE,YAAAA,YAAAqE,EAAArE,YAAA,IAAAuE,EAAAV,EAAA7D,YAAAwE,EAAAD,EAAAzE,WAAA2E,EAAAD,EAAAxE,YAAA2E,EAAAF,EAAA3E,WAAAE,YAAA2E,EAAA3E,YAAA,IAAA6E,EAAAJ,EAAAzE,YAAA8E,EAAAD,EAAA7E,YAkCO,OAlCP+D,EAAAlC,iBAAA,SAiBPlE,GAAKtC,EAAe0J,OAAOpH,EAAEwC,cAAc9D,MAAM,CAAC,CAAA,CAAAM,EAAAoH,EAAAzH,EAE3D7E,EAAG,CAAA,IAACsG,MAAI,CAAA,OAAEzD,EAAEvB,iBAAeyD,SAAGL,QAAG,CAAA,IAAA6I,EAAAC,GAAA,CAA4B,MAA5BD,GAAA3I,MAAmBF,EAAGQ,EAAAqI,EAAG7I,EAAG,CAAA6I,KAAA,CAAU,CAAA,CAAA,CAAArI,EAAAsH,MAIvEnI,GAAO,CAAC,GAAEoI,EAAA,CAAAvH,EAAAsH,MAAGnI,GAAO,CAAC,GAAEqI,EAAA,CAAAxH,EAAAsH,MAAM3J,EAAEjC,OAAS,EAACgM,EAAA,CAAAG,EAAAvE,UAiB/BtC,GAAK,CACVA,EAAEuC,MAAQ,UACZuD,EAAiB9F,EAAEwC,cAAmC9D,MAAM,CAC5DsB,EAAEwC,cAAcC,MAAM,GAEzBoE,EAAA3C,iBAAA,OANOlE,GAAK8F,EAAgB9F,EAAEwC,cAAc9D,MAAM,CAAA,CAAAmI,EAAAnE,QAD1C1C,GAAK2F,EAAmB3F,EAAEwC,cAAc9D,MAAM,CAAAmI,EAAA3C,iBAAA,QAD9ClE,GAAKA,EAAEwC,cAAc8B,QAAQ,CAAA,CAAAtF,EAAA8H,EAUWpL,EAAUsL,EAAA,CAAAE,EAAAxH,YAU5CpC,EAAW3B,GAAS,CAAG,EAAE,CAAAqD,EAAAkI,EAAAvI,EAGvCnF,EAAW,CAACqB,KAAM,GAAE,CAAA,CAAA,CAAAsM,EAAAzH,YAWNpC,EAAW3B,GAAS,CAAG,EAAE,CAAAqD,EAAAmI,EAAAxI,EAGvClF,EAAY,CAACoB,KAAM,GAAE,CAAA,CAAA,CAAAuE,EAAAO,GAAA,CAAA,IAAA4H,EAxEnBjO,EACL,cACAgC,EAAeqB,EAAE9B,KAAK,CACtBtB,EAASoD,EAAE7B,MAAM,CACjB6B,EAAExB,UAAY,QACdwB,EAAE2C,OAAOwC,KACV,CAAA0F,EAGWlO,EAAG,QAASqD,EAAE2C,OAAOmI,UAAU,CAAAC,EAC5BpO,EAAG,QAASqD,EAAE2C,OAAOqI,WAAW,CAAAC,EAEpCtO,EAAG,QAASqD,EAAE2C,OAAOyC,YAAY,CAAA8F,EAC9BlL,EAAExB,SAAQ2M,EAOTxO,EAAG,QAASqD,EAAE2C,OAAOyI,WAAW,CAAAC,EAMnC1O,EAAG,QAASqD,EAAE2C,OAAO2I,WAAW,CAAAC,EAEjC5O,EAAG,QAASqD,EAAE2C,OAAO6I,eAAe,CAAAC,EAGtC1M,GAAY,CAAA2M,EAEP1L,EAAExB,SAAQmN,EACJ,GAAGjM,KAAKC,IAAI,EAAGoJ,GAAiB,CAAC3J,OAAO,CAAG,GAAG,IAAIwM,EAWvDjP,EAAG,QAASqD,EAAE2C,OAAOkJ,WAAW,CAAAC,EAEpCnP,EACL,QACAqD,EAAE2C,OAAOC,IACT5C,EAAE2C,OAAOO,KACTlE,GAAS,EAAI,GAAK,QAClBA,GAAS,EAAI,GAAKgB,EAAE2C,OAAOQ,YAC5B,CAAA4I,EACS/L,EAAExB,UAAYQ,GAAS,EAAI,EAACgN,EAO/BrP,EACL,QACAqD,EAAE2C,OAAOC,IACT5C,EAAE2C,OAAOkC,KACT7F,GAAS,EAAID,GAAY,EAAI,QAC7BC,GAAS,EAAID,GAAY,EAAIiB,EAAE2C,OAAOQ,YACvC,CAAA8I,EACSjM,EAAExB,UAAYQ,GAAS,EAAID,GAAY,CAAA,OAAA6L,IAAA5H,EAAAK,GAAAX,EAAA2G,EAAArG,EAAAK,EAAAuH,EAAA,CAAAC,IAAA7H,EAAAM,GAAAZ,EAAA6G,EAAAvG,EAAAM,EAAAuH,EAAA,CAAAE,IAAA/H,EAAAyB,GAAA/B,EAAA8G,EAAAxG,EAAAyB,EAAAsG,EAAA,CAAAE,IAAAjI,EAAA6D,GAAAnE,EAAA+G,EAAAzG,EAAA6D,EAAAoE,EAAA,CAAAC,IAAAlI,EAAA1D,IAAAmK,EAAAjL,SAAAwE,EAAA1D,EAAA4L,GAAAC,IAAAnI,EAAAyF,GAAA/F,EAAAiH,EAAA3G,EAAAyF,EAAA0C,EAAA,CAAAE,IAAArI,EAAA0F,GAAAhG,EAAAuH,EAAAjH,EAAA0F,EAAA2C,EAAA,CAAAE,IAAAvI,EAAA2F,GAAAjG,EAAAwH,EAAAlH,EAAA2F,EAAA4C,EAAA,CAAAE,IAAAzI,EAAA4F,GAAA9E,EAAAoG,EAAA,MAAAlH,EAAA4F,EAAA6C,EAAA,CAAAC,IAAA1I,EAAA6F,IAAAqB,EAAA1L,SAAAwE,EAAA6F,EAAA6C,GAAAC,IAAA3I,EAAAkJ,GAAAC,EAAAjC,EAAA,QAAAlH,EAAAkJ,EAAAP,EAAA,CAAAC,IAAA5I,EAAAoJ,GAAA1J,EAAAyH,EAAAnH,EAAAoJ,EAAAR,EAAA,CAAAE,IAAA9I,EAAAqJ,GAAA3J,EAAA6H,EAAAvH,EAAAqJ,EAAAP,EAAA,CAAAC,IAAA/I,EAAAsJ,IAAA/B,EAAA/L,SAAAwE,EAAAsJ,EAAAP,GAAAC,IAAAhJ,EAAAuJ,GAAA7J,EAAA8H,EAAAxH,EAAAuJ,EAAAP,EAAA,CAAAC,IAAAjJ,EAAAwJ,IAAAhC,EAAAhM,SAAAwE,EAAAwJ,EAAAP,GAAAjJ,GAAA,CAAAK,EAAAE,IAAAA,GAAAD,EAAAC,IAAAA,GAAAkB,EAAAlB,IAAAA,GAAAsD,EAAAtD,IAAAA,GAAAjE,EAAAiE,IAAAA,GAAAkF,EAAAlF,IAAAA,GAAAmF,EAAAnF,IAAAA,GAAAoF,EAAApF,IAAAA,GAAAqF,EAAArF,IAAAA,GAAAsF,EAAAtF,IAAAA,GAAA2I,EAAA3I,IAAAA,GAAA6I,EAAA7I,IAAAA,GAAA8I,EAAA9I,IAAAA,GAAA+I,EAAA/I,IAAAA,GAAAgJ,EAAAhJ,IAAAA,GAAAiJ,EAAAjJ,IAAAA,GAAA,CAAA,CAAAd,MAAAgH,EAAA1H,MAtD1CxB,GAAU,CAAA,CAAAkC,MAAAyH,EAAAnI,MAkBVgH,GAAiB,CAAA,CAAAM,GAAA,CAAA,EAkDvBoD,EAAyCzM,GACpDgC,EACGzE,EAAM,CAAA,IAAC2I,UAAQ,CAAA,OAAAlE,EAAGlC,EAAuBE,EAA2B,EAAA,IAAAkC,UAAA,CAAA,MAAA,CAAAF,EAClE5E,EAAK,CAAA,IAAC6E,MAAI,CAAA,OAAEjC,EAAE0M,OAAS,UAAQ,IAAAxK,UAAA,CAAA,OAAAF,EAC7B8E,EAAsB9G,EAA0B,EAAA,CAAA,CAAAgC,EAElD5E,EAAK,CAAA,IAAC6E,MAAI,CAAA,OAAEjC,EAAE0M,OAAS,SAAO,IAAAxK,UAAA,CAAA,OAAAF,EAC5B8G,EAAqB9I,EAAyB,EAAA,CAAA,CAAA,EAAA,CAAA,CAIrD2M,EAAA,CAAA,QAAA,UAAA,QAAA,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"progress-bar.js","names":["render","createSignal","onCleanup","cn","getColor","ProgressBarOptions","BarProps","Required","instanceId","onDone","ProgressBarInner","props","progress","setProgress","opacity","setOpacity","rafId","startTime","INITIAL_SPEED","DECAY","MAX_PROGRESS","animate","timestamp","elapsed","speed","Math","pow","delta","prev","next","requestAnimationFrame","completeAndFade","cancelAnimationFrame","setTimeout","fadeOutDuration","completionHandlers","set","cancelProgressAnimation","delete","isRtl","direction","barStyle","width","height","transition","rounded","undefined","containerStyle","zIndex","position","const","left","right","_el$","_tmpl$","_el$2","firstChild","_$insert","_c$","_$memo","shimmer","_el$3","_tmpl$2","_$effect","_$className","_p$","_v$","_v$2","color","_v$3","e","_$style","t","a","Map","activeDisposers","containerEl","HTMLDivElement","ensureContainer","document","createElement","id","body","appendChild","disposeAll","dispose","values","clear","ProgressBarAPI","start","options","dismiss","DEFAULT_OPTIONS","progressBar","random","toString","slice","mergedOptions","slot","_$createComponent","_$mergeProps","remove","size","ids","keys","handler","get"],"sources":["../../../src/components/progress-bar/progress-bar.tsx"],"sourcesContent":["import { render } from 'solid-js/web';\nimport { createSignal, onCleanup } from 'solid-js';\nimport { cn } from '@/utils/cn';\nimport { getColor } from '@/utils/helper';\nimport type { ProgressBarOptions } from './progress-bar.types';\n\n// ─── Internal Bar Component ───────────────────────────────────────────────────\n\ninterface BarProps extends Required<ProgressBarOptions> {\n instanceId: string;\n onDone: () => void;\n}\n\nconst ProgressBarInner = (props: BarProps) => {\n const [progress, setProgress] = createSignal(0);\n const [opacity, setOpacity] = createSignal(1);\n\n let rafId: number;\n let startTime: number | null = null;\n\n // Tốc độ ban đầu (% mỗi giây), giảm dần theo hàm mũ\n const INITIAL_SPEED = 28;\n const DECAY = 0.88; // mỗi giây speed *= DECAY\n const MAX_PROGRESS = 99;\n\n const animate = (timestamp: number) => {\n if (startTime === null) startTime = timestamp;\n const elapsed = (timestamp - startTime) / 1000; // giây\n\n const speed = INITIAL_SPEED * Math.pow(DECAY, elapsed * 2.5);\n const delta = speed / 60; // per frame (60fps)\n\n setProgress(prev => {\n const next = prev + delta;\n return next >= MAX_PROGRESS ? MAX_PROGRESS : next;\n });\n\n if (progress() < MAX_PROGRESS) {\n rafId = requestAnimationFrame(animate);\n }\n };\n\n rafId = requestAnimationFrame(animate);\n\n // dismiss() gọi hàm này — jump lên 100% rồi fade out\n const completeAndFade = () => {\n cancelAnimationFrame(rafId);\n setProgress(100);\n setTimeout(() => {\n setOpacity(0);\n setTimeout(() => props.onDone(), props.fadeOutDuration);\n }, 80);\n };\n\n completionHandlers.set(props.instanceId, completeAndFade);\n\n onCleanup(function cancelProgressAnimation() {\n cancelAnimationFrame(rafId);\n completionHandlers.delete(props.instanceId);\n });\n\n const isRtl = () => props.direction === 'rightToLeft';\n\n const barStyle = () => ({\n width: `${progress()}%`,\n height: `${props.height}px`,\n transition: 'width 0.06s linear',\n 'border-radius': props.rounded ? (isRtl() ? '9999px 0 0 9999px' : '0 9999px 9999px 0') : '0',\n 'margin-left': isRtl() ? 'auto' : undefined,\n });\n\n const containerStyle = () => ({\n opacity: opacity(),\n transition: `opacity ${props.fadeOutDuration}ms ease`,\n 'z-index': props.zIndex,\n position: 'fixed' as const,\n [props.position === 'bottom' ? 'bottom' : 'top']: '0',\n left: '0',\n right: '0',\n 'pointer-events': 'none' as const,\n });\n\n return (\n <div style={containerStyle()}>\n <div\n class={cn('relative overflow-hidden', getColor(props.color), 'bg-(--color)')}\n style={barStyle()}\n >\n {props.shimmer && (\n <div\n class={cn(\n 'absolute inset-0',\n 'animate-[shimmer_1.2s_ease-in-out_infinite]',\n 'bg-linear-to-r from-transparent via-white/40 to-transparent',\n )}\n />\n )}\n </div>\n </div>\n );\n};\n\n// ─── Global state ─────────────────────────────────────────────────────────────\n\nconst completionHandlers = new Map<string, () => void>();\n\n// Track tất cả instances đang tồn tại (có thể nhiều hơn 1 trong khoảng thời gian ngắn)\nconst activeDisposers = new Map<string, () => void>();\n\nlet containerEl: HTMLDivElement | null = null;\n\nconst ensureContainer = () => {\n if (containerEl) return;\n containerEl = document.createElement('div');\n containerEl.id = 'sui-progress-bar-container';\n document.body.appendChild(containerEl);\n};\n\n// Xóa tất cả instances ngay lập tức (không animate)\nconst disposeAll = () => {\n for (const dispose of activeDisposers.values()) {\n dispose();\n }\n activeDisposers.clear();\n};\n\n// ─── Public API ───────────────────────────────────────────────────────────────\n\nexport interface ProgressBarAPI {\n start: (options?: ProgressBarOptions) => void;\n dismiss: () => void;\n}\n\nconst DEFAULT_OPTIONS: Required<ProgressBarOptions> = {\n color: 'primary',\n height: 3,\n shimmer: true,\n rounded: true,\n zIndex: 9999,\n fadeOutDuration: 300,\n position: 'top',\n direction: 'leftToRight',\n};\n\nconst progressBar: ProgressBarAPI = {\n start(options?: ProgressBarOptions) {\n ensureContainer();\n\n // Xóa tất cả instances cũ ngay lập tức\n disposeAll();\n\n const instanceId = Math.random().toString(36).slice(2);\n\n const mergedOptions: Required<ProgressBarOptions> = {\n ...DEFAULT_OPTIONS,\n ...options,\n };\n\n const slot = document.createElement('div');\n containerEl!.appendChild(slot);\n\n const dispose = render(\n () => (\n <ProgressBarInner\n {...mergedOptions}\n instanceId={instanceId}\n onDone={() => {\n dispose();\n slot.remove();\n activeDisposers.delete(instanceId);\n }}\n />\n ),\n slot,\n );\n\n activeDisposers.set(instanceId, () => {\n dispose();\n slot.remove();\n });\n },\n\n dismiss() {\n if (activeDisposers.size === 0) return;\n\n // Lấy tất cả instanceIds hiện tại\n const ids = [...activeDisposers.keys()];\n\n for (const id of ids) {\n const handler = completionHandlers.get(id);\n if (handler) {\n // Animate lên 100% rồi fade out\n activeDisposers.delete(id);\n handler();\n } else {\n // Fallback: xóa ngay\n const dispose = activeDisposers.get(id);\n activeDisposers.delete(id);\n dispose?.();\n }\n }\n },\n};\n\nexport { progressBar };\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"qr-code.js","names":["cn","getColor","QRCode","RefreshCw","CheckCircle","Loader","Component","createEffect","createUniqueId","mergeProps","onCleanup","Show","QrCodeProps","DEFAULT_PROPS","size","color","bgColor","errorLevel","const","status","expiredText","accentColor","drawQr","canvas","HTMLCanvasElement","value","opts","Promise","toCanvas","width","margin","dark","light","errorCorrectionLevel","drawLogo","logo","NonNullable","ctx","getContext","img","Image","crossOrigin","onload","onLogoLoad","logoW","logoH","height","pad","padding","radius","borderRadius","bg","background","bgW","bgH","x","y","beginPath","moveTo","lineTo","quadraticCurveTo","closePath","fillStyle","fill","drawImage","src","QrCode","props","p","id","canvasRef","renderQrCode","then","onQrDrawn","_el$","_tmpl$3","_el$2","firstChild","_$setAttribute","_ref$","_$use","_$insert","_$createComponent","when","children","_el$3","_tmpl$","class","overlayIcon","_$effect","_$className","overlay","_el$4","_tmpl$2","_el$5","_el$6","nextSibling","_$addEventListener","onRefresh","_p$","_v$","_v$2","_v$3","overlayText","e","t","a","undefined","_el$7","_v$4","root","_v$5","_v$6","_v$7","_v$8","_v$9","_v$0","_$setStyleProperty","o","i","n","s","_$delegateEvents"],"sources":["../../../src/components/qr-code/qr-code.tsx"],"sourcesContent":["import { cn } from '@utils/cn';\nimport { getColor } from '@utils/helper';\nimport QRCode from 'qrcode';\nimport RefreshCw from 'lucide-solid/icons/refresh-cw';\nimport CheckCircle from 'lucide-solid/icons/check-circle';\nimport Loader from 'lucide-solid/icons/loader';\nimport { Component, createEffect, createUniqueId, mergeProps, onCleanup, Show } from 'solid-js';\nimport type { QrCodeProps } from './qr-code.types';\n\nconst DEFAULT_PROPS = {\n size: 160,\n color: '#000000',\n bgColor: '#ffffff',\n errorLevel: 'M' as const,\n status: 'active' as const,\n expiredText: 'QR code expired',\n accentColor: 'primary' as const,\n};\n\nasync function drawQr(\n canvas: HTMLCanvasElement,\n value: string,\n opts: {\n size: number;\n color: string;\n bgColor: string;\n errorLevel: 'L' | 'M' | 'Q' | 'H';\n },\n): Promise<void> {\n await QRCode.toCanvas(canvas, value || ' ', {\n width: opts.size,\n margin: 2,\n color: {\n dark: opts.color,\n light: opts.bgColor,\n },\n errorCorrectionLevel: opts.errorLevel,\n });\n}\n\nfunction drawLogo(\n canvas: HTMLCanvasElement,\n logo: NonNullable<QrCodeProps['logo']>,\n size: number,\n): void {\n const ctx = canvas.getContext('2d');\n if (!ctx) return;\n\n const img = new Image();\n img.crossOrigin = 'anonymous';\n img.onload = function onLogoLoad() {\n const logoW = logo.width ?? size * 0.2;\n const logoH = logo.height ?? logoW;\n const pad = logo.padding ?? 4;\n const radius = logo.borderRadius ?? 4;\n const bg = logo.background ?? '#ffffff';\n\n const bgW = logoW + pad * 2;\n const bgH = logoH + pad * 2;\n const x = (size - bgW) / 2;\n const y = (size - bgH) / 2;\n\n // Draw background rect with rounded corners\n ctx.beginPath();\n ctx.moveTo(x + radius, y);\n ctx.lineTo(x + bgW - radius, y);\n ctx.quadraticCurveTo(x + bgW, y, x + bgW, y + radius);\n ctx.lineTo(x + bgW, y + bgH - radius);\n ctx.quadraticCurveTo(x + bgW, y + bgH, x + bgW - radius, y + bgH);\n ctx.lineTo(x + radius, y + bgH);\n ctx.quadraticCurveTo(x, y + bgH, x, y + bgH - radius);\n ctx.lineTo(x, y + radius);\n ctx.quadraticCurveTo(x, y, x + radius, y);\n ctx.closePath();\n ctx.fillStyle = bg;\n ctx.fill();\n\n // Draw logo image centered inside background\n ctx.drawImage(img, x + pad, y + pad, logoW, logoH);\n };\n img.src = logo.src;\n}\n\nexport const QrCode: Component<QrCodeProps> = props => {\n const p = mergeProps(DEFAULT_PROPS, props);\n const id = createUniqueId();\n let canvasRef: HTMLCanvasElement | undefined;\n\n createEffect(function renderQrCode() {\n if (!canvasRef) return;\n\n // Snapshot all reactive values synchronously — reads inside .then() would\n // occur outside the reactive computation and throw \"Effects is null\".\n const canvas = canvasRef;\n const value = p.value;\n const size = p.size;\n const color = p.color;\n const bgColor = p.bgColor;\n const errorLevel = p.errorLevel;\n const logo = p.logo;\n\n drawQr(canvas, value, { size, color, bgColor, errorLevel }).then(function onQrDrawn() {\n if (logo) {\n drawLogo(canvas, logo, size);\n }\n });\n });\n\n return (\n <div\n id={id}\n class={cn('qr01', p.class?.root)}\n style={{ width: `${p.size}px`, height: `${p.size}px` }}\n >\n {/* The QR canvas */}\n <canvas\n ref={canvasRef}\n class={cn('qr02', p.class?.canvas)}\n width={p.size}\n height={p.size}\n aria-label={`QR code for: ${p.value}`}\n />\n\n {/* Loading overlay */}\n <Show when={p.status === 'loading'}>\n <div class={cn('qr03', getColor(p.accentColor), p.class?.overlay)}>\n <Loader class={cn('qr04 animate-spin', p.class?.overlayIcon)} size={p.size * 0.22} />\n </div>\n </Show>\n\n {/* Expired overlay */}\n <Show when={p.status === 'expired'}>\n <div class={cn('qr03 qr05', getColor(p.accentColor), p.class?.overlay)}>\n <button\n class={cn('qr06', p.class?.overlayIcon)}\n onClick={p.onRefresh}\n aria-label=\"Refresh QR code\"\n >\n <RefreshCw size={p.size * 0.22} />\n </button>\n <span class={cn('qr07', p.class?.overlayText)}>{p.expiredText}</span>\n </div>\n </Show>\n\n {/* Scanned overlay */}\n <Show when={p.status === 'scanned'}>\n <div class={cn('qr03', getColor('success'), p.class?.overlay)}>\n <CheckCircle class={cn('qr04', p.class?.overlayIcon)} size={p.size * 0.22} />\n </div>\n </Show>\n </div>\n );\n};\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"select.js","names":["SolidComponent","cn","getColor","createVirtualizer","cva","VariantProps","Check","ChevronDown","Search","X","createEffect","createMemo","createSignal","For","mergeProps","on","Show","Component","JSXElement","Dropdown","FlattenOptionData","LabeledValue","OptGroupType","SelectBaseProps","SelectFieldNames","SelectOptionType","SelectProps","SelectValue","ShowSearchConfig","TagRenderProps","selectVariants","variants","variant","outline","filled","borderless","underlined","size","lg","md","sm","color","neutral","primary","secondary","accent","info","success","warning","error","SelectVariantsProps","SelectTagProps","tag","value","label","closable","removeIcon","tagRender","props","onRemove","e","MouseEvent","SelectTag","onClose","_el$","_tmpl$2","_el$2","firstChild","_$insert","Element","_$createComponent","when","children","_el$3","_tmpl$","$$click","_c$","_$memo","InnerTooltip","content","_el$4","_tmpl$3","_el$5","_el$6","resolveFieldNames","fn","options","groupLabel","getField","option","field","FlatOption","disabled","class","title","raw","flattenOptions","fieldNames","ReturnType","result","opt","subOptions","Array","isArray","sub","push","undefined","OptionGroup","items","regroupFlatOptions","flatOptions","groups","last","length","extractValue","v","extractValues","map","item","filter","x","single","Select","p","const","loading","placement","listHeight","virtual","defaultActiveFirstOption","notFoundContent","labelInValue","placeholder","blockScroll","isMultiple","mode","allowCustomValue","showSearchEnabled","showSearch","searchConfig","base","autoClearSearchValue","filterOption","optionFilterProp","internalValue","setInternalValue","defaultValue","isOpen","setIsOpen","defaultOpen","searchText","setSearchText","activeIndex","setActiveIndex","selectedValues","dropdownOpen","open","controlledSearchValue","cfg","searchValue","currentSearchText","inputRef","HTMLInputElement","selectRootRef","HTMLDivElement","triggerRef","listRef","setListRef","allFlatOptions","allOptionsWithCustom","flat","existingValues","Set","o","customOpts","val","has","String","optionMap","Map","set","filteredOptions","all","text","filtered","Function","filterProps","lowerText","toLowerCase","some","prop","includes","filterSort","sortFn","sort","a","b","groupedForRender","RenderItem","type","flatIdx","flatRenderList","group","ITEM_HEIGHT","GROUP_LABEL_HEIGHT","virtualizer","count","getScrollElement","estimateSize","index","overscan","selectedValuesSet","isSelected","isMaxReached","max","maxCount","suppressBlurUntil","openDropdown","performance","now","onOpenChange","closeDropdown","onSearch","toggleDropdown","buildOutputValue","values","get","buildOutputOption","handleSelect","optValue","rawOpt","current","newValues","deselectVal","onDeselect","selectVal","onSelect","onChange","handleClear","stopPropagation","preventDefault","onClear","handleRemoveTag","handleKeyDown","KeyboardEvent","onInputKeyDown","opts","key","next","onActive","scrollActiveIntoView","prev","idx","trim","focus","vals","list","renderIdx","findIndex","scrollToIndex","align","el","querySelectorAll","HTMLElement","scrollIntoView","block","scrollToFirstSelected","firstSelectedValue","querySelector","handleSearchInput","InputEvent","target","handleFocus","FocusEvent","scrollX","window","scrollY","restoreScroll","requestAnimationFrame","scrollTo","addEventListener","once","passive","setTimeout","removeEventListener","onFocus","handleBlur","related","relatedTarget","contains","closest","onBlur","selectedLabel","labelRender","TagInfo","visibleTags","visible","omitted","maxTagCount","maxTextLen","maxTagTextLength","tags","slice","showClear","allowClear","handleTriggerClick","findOptionIndex","EventTarget","dataset","optionIndex","Number","classList","parentElement","handleListClick","renderOptionItem","selected","isActive","isDisabledOpt","flattenData","optionRender","_el$7","_tmpl$5","_el$8","_$setAttribute","_el$9","_tmpl$4","_c$2","menuItemSelectedIcon","_$effect","_p$","_v$","_v$2","_$className","t","dropdownContent","renderList","_el$0","_tmpl$6","_el$1","_tmpl$7","_el$10","_$use","each","getVirtualItems","virtualRow","_el$11","_tmpl$8","_c$3","_el$12","_tmpl$9","_v$6","_v$7","start","_$setStyleProperty","_v$3","_v$4","_v$5","getTotalSize","_el$13","_tmpl$0","_el$14","_$p","renderTag","measure","queueMicrotask","preventScroll","ref","position","trigger","triggerElement","_el$18","_tmpl$17","_el$20","_el$24","nextSibling","$$keydown","prefix","_el$19","_tmpl$11","fallback","_el$27","_tmpl$19","_el$29","_tmpl$13","_el$28","_tmpl$18","_el$21","_tmpl$14","_el$22","_tmpl$12","maxTagPlaceholder","omittedValues","_el$23","_el$25","_tmpl$15","_tmpl$20","_el$26","_tmpl$16","_c$5","suffixIcon","_v$0","root","_v$1","_v$10","_el$15","_tmpl$10","$$mousedown","tagName","_el$16","_tmpl$1","_el$17","$$input","_v$8","_v$9","_c$4","popupRender","_$delegateEvents"],"sources":["../../../src/components/select/select.tsx"],"sourcesContent":["import type { SolidComponent } from '@/type';\nimport { cn } from '@/utils/cn';\nimport { getColor } from '@/utils/helper';\nimport { createVirtualizer } from '@tanstack/solid-virtual';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport Check from 'lucide-solid/icons/check';\nimport ChevronDown from 'lucide-solid/icons/chevron-down';\nimport Search from 'lucide-solid/icons/search';\nimport X from 'lucide-solid/icons/x';\nimport {\n createEffect,\n createMemo,\n createSignal,\n For,\n mergeProps,\n on,\n Show,\n type Component,\n type JSXElement,\n} from 'solid-js';\nimport { Dropdown } from '../dropdown';\nimport type {\n FlattenOptionData,\n LabeledValue,\n OptGroupType,\n SelectBaseProps,\n SelectFieldNames,\n SelectOptionType,\n SelectProps,\n SelectValue,\n ShowSearchConfig,\n TagRenderProps,\n} from './select.types';\n\nconst selectVariants = cva('sel01', {\n variants: {\n variant: {\n outline: 'sel07',\n filled: 'sel09',\n borderless: 'sel08',\n underlined: 'sel10',\n },\n size: {\n lg: 'sel06',\n md: 'sel05',\n sm: 'sel04',\n },\n color: {\n neutral: 'input-neutral',\n primary: 'input-primary',\n secondary: 'input-secondary',\n accent: 'input-accent',\n info: 'input-info',\n success: 'input-success',\n warning: 'input-warning',\n error: 'input-error',\n },\n },\n});\nexport type SelectVariantsProps = VariantProps<typeof selectVariants>;\n\ntype SelectTagProps = {\n tag: { value: string | number; label: SolidComponent; closable: boolean };\n removeIcon?: JSXElement;\n tagRender?: (props: TagRenderProps) => JSXElement;\n onRemove: (value: string | number, e: MouseEvent) => void;\n};\n\nconst SelectTag: Component<SelectTagProps> = props => {\n if (props.tagRender) {\n return props.tagRender({\n label: props.tag.label,\n value: props.tag.value,\n closable: props.tag.closable,\n onClose: () => props.onRemove(props.tag.value, new MouseEvent('click')),\n }) as JSXElement;\n }\n\n return (\n <span class=\"sel17\">\n <span class=\"sel18\">{props.tag.label as Element}</span>\n <Show when={props.tag.closable}>\n <span class=\"sel19\" onClick={e => props.onRemove(props.tag.value, e)}>\n {props.removeIcon ? (\n (props.removeIcon as Element)\n ) : (\n <X class=\"m-auto\" size={12} stroke-width={3} />\n )}\n </span>\n </Show>\n </span>\n );\n};\n\nconst InnerTooltip: Component<{ content: JSXElement; children: JSXElement }> = props => {\n return (\n <span class=\"sel42\">\n {props.children}\n <span class=\"sel43\">\n <span class=\"sel44\">{props.content}</span>\n </span>\n </span>\n );\n};\n\nfunction resolveFieldNames(fn?: SelectFieldNames) {\n return {\n label: fn?.label ?? 'label',\n value: fn?.value ?? 'value',\n options: fn?.options ?? 'options',\n groupLabel: fn?.groupLabel ?? 'label',\n };\n}\n\nfunction getField(option: any, field: string): any {\n return option?.[field];\n}\n\ninterface FlatOption {\n label: SolidComponent;\n value: string | number;\n disabled?: boolean;\n class?: string;\n title?: string;\n groupLabel?: SolidComponent;\n raw: any;\n}\n\nfunction flattenOptions(\n options: (SelectOptionType | OptGroupType)[] | undefined,\n fieldNames: ReturnType<typeof resolveFieldNames>,\n): FlatOption[] {\n if (!options) return [];\n const result: FlatOption[] = [];\n for (const opt of options) {\n const subOptions = getField(opt, fieldNames.options) as SelectOptionType[] | undefined;\n if (subOptions && Array.isArray(subOptions)) {\n const groupLabel = getField(opt, fieldNames.groupLabel) as SolidComponent;\n for (const sub of subOptions) {\n result.push({\n label: getField(sub, fieldNames.label) as SolidComponent,\n value: getField(sub, fieldNames.value) as string | number,\n disabled: sub.disabled,\n class: sub.class,\n title: sub.title,\n groupLabel,\n raw: sub,\n });\n }\n } else {\n result.push({\n label: getField(opt, fieldNames.label) as SolidComponent,\n value: getField(opt, fieldNames.value) as string | number,\n disabled: (opt as SelectOptionType).disabled,\n class: (opt as SelectOptionType).class,\n title: (opt as SelectOptionType).title,\n groupLabel: undefined,\n raw: opt,\n });\n }\n }\n return result;\n}\n\ninterface OptionGroup {\n groupLabel?: SolidComponent;\n items: FlatOption[];\n}\n\nfunction regroupFlatOptions(flatOptions: FlatOption[]): OptionGroup[] {\n const groups: OptionGroup[] = [];\n for (const opt of flatOptions) {\n const last = groups[groups.length - 1];\n if (last && last.groupLabel === opt.groupLabel) {\n last.items.push(opt);\n } else {\n groups.push({ groupLabel: opt.groupLabel, items: [opt] });\n }\n }\n return groups;\n}\n\nfunction extractValue(v: string | number | LabeledValue | undefined): string | number | undefined {\n if (v === undefined || v === null) return undefined;\n if (typeof v === 'object' && 'value' in v) return v.value;\n return v as string | number;\n}\n\nfunction extractValues(\n v: string | string[] | number | number[] | LabeledValue | LabeledValue[] | undefined,\n): (string | number)[] {\n if (v === undefined || v === null) return [];\n if (Array.isArray(v)) {\n return v.map(item => extractValue(item)!).filter(x => x !== undefined);\n }\n const single = extractValue(v as string | number | LabeledValue);\n return single !== undefined ? [single] : [];\n}\n\nexport const Select: Component<SelectProps> = p => {\n p = mergeProps(\n {\n color: 'error' as const,\n size: 'md' as const,\n variant: 'outline' as const,\n disabled: false,\n loading: false,\n placement: 'bottom' as const,\n listHeight: 256,\n virtual: false,\n defaultActiveFirstOption: false,\n notFoundContent: 'Not Found' as SolidComponent,\n labelInValue: false,\n placeholder: 'Select...',\n blockScroll: true,\n } as SelectBaseProps,\n p,\n );\n\n const fieldNames = createMemo(() => resolveFieldNames(p.fieldNames));\n\n const isMultiple = createMemo(() => p.mode === 'multiple');\n const allowCustomValue = createMemo(() => isMultiple() && !!(p as any).allowCustomValue);\n\n const showSearchEnabled = createMemo(() => {\n if (typeof p.showSearch === 'boolean') return p.showSearch;\n if (typeof p.showSearch === 'object') return true;\n\n return isMultiple();\n });\n\n const searchConfig = createMemo((): ShowSearchConfig => {\n const base: ShowSearchConfig = {\n autoClearSearchValue: true,\n filterOption: true,\n optionFilterProp: 'value',\n };\n if (typeof p.showSearch === 'object') {\n return { ...base, ...p.showSearch };\n }\n return base;\n });\n\n const [internalValue, setInternalValue] = createSignal<(string | number)[]>(\n extractValues(p.defaultValue),\n );\n const [isOpen, setIsOpen] = createSignal(p.defaultOpen ?? false);\n const [searchText, setSearchText] = createSignal('');\n const [activeIndex, setActiveIndex] = createSignal(-1);\n\n const selectedValues = createMemo(() => {\n if (p.value !== undefined) {\n return extractValues(p.value);\n }\n return internalValue();\n });\n\n const dropdownOpen = createMemo(() => {\n if (p.open !== undefined) {\n return p.open as boolean;\n }\n return isOpen();\n });\n\n const controlledSearchValue = createMemo(() => {\n const cfg = searchConfig();\n if (cfg.searchValue !== undefined) return cfg.searchValue;\n return undefined;\n });\n\n const currentSearchText = createMemo(() => {\n return controlledSearchValue() ?? searchText();\n });\n\n let inputRef: HTMLInputElement | undefined;\n let selectRootRef: HTMLDivElement | undefined;\n let triggerRef: HTMLDivElement | undefined;\n const [listRef, setListRef] = createSignal<HTMLDivElement | null>(null);\n\n const allFlatOptions = createMemo(() => flattenOptions(p.options, fieldNames()));\n\n const allOptionsWithCustom = createMemo(() => {\n const flat = allFlatOptions();\n if (!allowCustomValue()) return flat;\n const existingValues = new Set(flat.map(o => o.value));\n const customOpts: FlatOption[] = [];\n for (const val of selectedValues()) {\n if (!existingValues.has(val)) {\n customOpts.push({\n label: String(val),\n value: val,\n disabled: false,\n class: undefined,\n title: undefined,\n groupLabel: undefined,\n raw: { label: String(val), value: val },\n });\n }\n }\n return [...flat, ...customOpts];\n });\n\n const optionMap = createMemo(() => {\n const map = new Map<string | number, FlatOption>();\n for (const opt of allOptionsWithCustom()) {\n map.set(opt.value, opt);\n }\n return map;\n });\n\n const filteredOptions = createMemo(() => {\n const all = allOptionsWithCustom();\n const text = currentSearchText();\n if (!text || !showSearchEnabled()) return all;\n\n const cfg = searchConfig();\n if (cfg.filterOption === false) return all;\n\n let filtered: FlatOption[];\n if (typeof cfg.filterOption === 'function') {\n filtered = all.filter(opt =>\n (cfg.filterOption as Function)(text, opt.raw as SelectOptionType),\n );\n } else {\n const filterProps = Array.isArray(cfg.optionFilterProp)\n ? cfg.optionFilterProp\n : [cfg.optionFilterProp ?? 'value'];\n const lowerText = text.toLowerCase();\n filtered = all.filter(opt => {\n return filterProps.some(prop => {\n const val = getField(opt.raw, prop) ?? (prop === 'label' ? opt.label : opt.value);\n return String(val ?? '')\n .toLowerCase()\n .includes(lowerText);\n });\n });\n }\n\n if (cfg.filterSort) {\n const sortFn = cfg.filterSort;\n filtered.sort((a, b) =>\n sortFn(a.raw as SelectOptionType, b.raw as SelectOptionType, { searchValue: text }),\n );\n }\n\n return filtered;\n });\n\n const groupedForRender = createMemo(() => {\n const text = currentSearchText();\n if (text && showSearchEnabled()) {\n return [{ groupLabel: undefined, items: filteredOptions() }] as OptionGroup[];\n }\n return regroupFlatOptions(allOptionsWithCustom());\n });\n\n type RenderItem =\n | { type: 'group'; groupLabel: SolidComponent }\n | { type: 'option'; option: FlatOption; flatIdx: number };\n\n const flatRenderList = createMemo((): RenderItem[] => {\n const groups = groupedForRender();\n const result: RenderItem[] = [];\n let flatIdx = 0;\n for (const group of groups) {\n if (group.groupLabel !== undefined) {\n result.push({ type: 'group', groupLabel: group.groupLabel });\n }\n for (const item of group.items) {\n result.push({ type: 'option', option: item, flatIdx });\n flatIdx++;\n }\n }\n return result;\n });\n\n const ITEM_HEIGHT = 32;\n const GROUP_LABEL_HEIGHT = 28;\n\n const virtualizer = createVirtualizer({\n get count() {\n return flatRenderList().length;\n },\n getScrollElement: () => listRef(),\n estimateSize: (index: number) => {\n const item = flatRenderList()[index];\n return item?.type === 'group' ? GROUP_LABEL_HEIGHT : ITEM_HEIGHT;\n },\n overscan: 2,\n });\n\n const selectedValuesSet = createMemo(() => new Set(selectedValues()));\n\n const isSelected = (val: string | number) => {\n return selectedValuesSet().has(val);\n };\n\n const isMaxReached = createMemo(() => {\n if (!isMultiple()) return false;\n const max = p.maxCount as number | undefined;\n if (max === undefined) return false;\n return selectedValues().length >= max;\n });\n\n // Set for a brief window after openDropdown() to suppress spurious focusout events\n // that fire when SolidJS re-renders the DOM (inserting dropdown content causes\n // the focused trigger div to receive a focusout with relatedTarget=null before\n // the search input is mounted and re-focused via queueMicrotask).\n let suppressBlurUntil = 0;\n\n const openDropdown = () => {\n if (p.disabled) return;\n suppressBlurUntil = performance.now() + 150;\n if (p.open === undefined) {\n setIsOpen(true);\n }\n p.onOpenChange?.(true);\n };\n\n const closeDropdown = () => {\n if (p.open === undefined) {\n setIsOpen(false);\n }\n setListRef(null);\n p.onOpenChange?.(false);\n\n if (showSearchEnabled()) {\n setSearchText('');\n searchConfig().onSearch?.('');\n }\n };\n\n const toggleDropdown = () => {\n if (dropdownOpen()) {\n closeDropdown();\n } else {\n openDropdown();\n }\n };\n\n const buildOutputValue = (values: (string | number)[]): SelectValue => {\n const map = optionMap();\n if (isMultiple()) {\n if (p.labelInValue) {\n return values.map(v => {\n const opt = map.get(v);\n return {\n value: v,\n label: opt?.label ?? String(v),\n } as LabeledValue;\n });\n }\n return values as string[] | number[];\n }\n\n const val = values[0];\n if (val === undefined) return undefined as any;\n if (p.labelInValue) {\n const opt = map.get(val);\n return {\n value: val,\n label: opt?.label ?? String(val),\n } as LabeledValue;\n }\n return val;\n };\n\n const buildOutputOption = (\n values: (string | number)[],\n ): SelectOptionType | SelectOptionType[] => {\n const map = optionMap();\n if (isMultiple()) {\n return values.map(v => {\n const opt = map.get(v);\n return (opt?.raw as SelectOptionType) ?? { value: v, label: String(v) };\n });\n }\n const val = values[0];\n const opt = map.get(val);\n return (opt?.raw as SelectOptionType) ?? { value: val, label: String(val) };\n };\n\n const handleSelect = (optValue: string | number) => {\n const opt = optionMap().get(optValue);\n const rawOpt = (opt?.raw as SelectOptionType) ?? {\n value: optValue,\n label: String(optValue),\n };\n\n if (isMultiple()) {\n const current = selectedValues();\n let newValues: (string | number)[];\n\n if (current.includes(optValue)) {\n newValues = current.filter(v => v !== optValue);\n const deselectVal = p.labelInValue\n ? ({ value: optValue, label: opt?.label ?? String(optValue) } as LabeledValue)\n : optValue;\n p.onDeselect?.(deselectVal);\n } else {\n if (isMaxReached()) return;\n newValues = [...current, optValue];\n const selectVal = p.labelInValue\n ? ({ value: optValue, label: opt?.label ?? String(optValue) } as LabeledValue)\n : optValue;\n p.onSelect?.(selectVal, rawOpt);\n }\n\n if (p.value === undefined) {\n setInternalValue(newValues);\n }\n p.onChange?.(buildOutputValue(newValues), buildOutputOption(newValues));\n\n if (searchConfig().autoClearSearchValue !== false) {\n setSearchText('');\n searchConfig().onSearch?.('');\n }\n } else {\n const newValues = [optValue];\n const selectVal = p.labelInValue\n ? ({ value: optValue, label: opt?.label ?? String(optValue) } as LabeledValue)\n : optValue;\n p.onSelect?.(selectVal, rawOpt);\n\n if (p.value === undefined) {\n setInternalValue(newValues);\n }\n p.onChange?.(buildOutputValue(newValues), buildOutputOption(newValues));\n closeDropdown();\n setSearchText('');\n }\n };\n\n const handleClear = (e: MouseEvent) => {\n e.stopPropagation();\n e.preventDefault();\n if (p.value === undefined) {\n setInternalValue([]);\n }\n p.onClear?.();\n p.onChange?.(isMultiple() ? [] : (undefined as any), isMultiple() ? [] : (undefined as any));\n setSearchText('');\n };\n\n const handleRemoveTag = (val: string | number, e?: MouseEvent) => {\n e?.stopPropagation();\n e?.preventDefault();\n const current = selectedValues();\n const newValues = current.filter(v => v !== val);\n\n const opt = optionMap().get(val);\n const deselectVal = p.labelInValue\n ? ({ value: val, label: opt?.label ?? String(val) } as LabeledValue)\n : val;\n p.onDeselect?.(deselectVal);\n\n if (p.value === undefined) {\n setInternalValue(newValues);\n }\n p.onChange?.(buildOutputValue(newValues), buildOutputOption(newValues));\n };\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (p.disabled) return;\n p.onInputKeyDown?.(e);\n\n const opts = filteredOptions();\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault();\n if (!dropdownOpen()) {\n openDropdown();\n return;\n }\n let next = activeIndex() + 1;\n while (next < opts.length) {\n const opt = opts[next];\n if (!opt.disabled && (!isMaxReached() || isSelected(opt.value))) {\n break;\n }\n next++;\n }\n if (next < opts.length) {\n setActiveIndex(next);\n const val = p.labelInValue\n ? ({ value: opts[next].value, label: opts[next].label } as LabeledValue)\n : opts[next].value;\n p.onActive?.(val);\n scrollActiveIntoView(next);\n }\n break;\n }\n case 'ArrowUp': {\n e.preventDefault();\n if (!dropdownOpen()) {\n openDropdown();\n return;\n }\n let prev = activeIndex() === -1 ? opts.length - 1 : activeIndex() - 1;\n while (prev >= 0) {\n const opt = opts[prev];\n if (!opt.disabled && (!isMaxReached() || isSelected(opt.value))) {\n break;\n }\n prev--;\n }\n if (prev >= 0) {\n setActiveIndex(prev);\n const val = p.labelInValue\n ? ({ value: opts[prev].value, label: opts[prev].label } as LabeledValue)\n : opts[prev].value;\n p.onActive?.(val);\n scrollActiveIntoView(prev);\n }\n break;\n }\n case 'Enter':\n case ' ': {\n e.preventDefault();\n if (!dropdownOpen()) {\n openDropdown();\n return;\n }\n if (e.key === ' ' && showSearchEnabled()) break;\n const idx = activeIndex();\n if (idx >= 0 && idx < opts.length) {\n const opt = opts[idx];\n if (!opt.disabled) {\n handleSelect(opt.value);\n }\n } else if (allowCustomValue() && currentSearchText().trim()) {\n const tag = currentSearchText().trim();\n handleSelect(tag);\n }\n break;\n }\n case 'Escape': {\n e.preventDefault();\n closeDropdown();\n triggerRef?.focus();\n break;\n }\n case 'Backspace': {\n if (isMultiple() && currentSearchText() === '') {\n const vals = selectedValues();\n if (vals.length > 0) {\n handleRemoveTag(vals[vals.length - 1]);\n }\n }\n break;\n }\n case 'Tab': {\n closeDropdown();\n break;\n }\n }\n };\n\n const scrollActiveIntoView = (flatIdx: number) => {\n if (p.virtual) {\n const list = flatRenderList();\n const renderIdx = list.findIndex(item => item.type === 'option' && item.flatIdx === flatIdx);\n if (renderIdx >= 0) {\n virtualizer.scrollToIndex(renderIdx, { align: 'auto' });\n }\n return;\n }\n\n const el = listRef();\n if (!el) return;\n const items = el.querySelectorAll('[data-option-index]');\n const item = items[flatIdx] as HTMLElement | undefined;\n if (item) {\n item.scrollIntoView({ block: 'nearest' });\n }\n };\n\n const scrollToFirstSelected = () => {\n const vals = selectedValues();\n if (vals.length === 0) return;\n\n const firstSelectedValue = vals[0];\n const opts = filteredOptions();\n const flatIdx = opts.findIndex(o => o.value === firstSelectedValue);\n if (flatIdx < 0) return;\n\n if (p.virtual) {\n const list = flatRenderList();\n const renderIdx = list.findIndex(item => item.type === 'option' && item.flatIdx === flatIdx);\n if (renderIdx >= 0) {\n virtualizer.scrollToIndex(renderIdx, { align: 'start' });\n }\n } else {\n const el = listRef();\n if (!el) return;\n const item = el.querySelector(`[data-option-index=\"${flatIdx}\"]`) as HTMLElement | null;\n if (item) {\n item.scrollIntoView({ block: 'nearest' });\n }\n }\n };\n\n const handleSearchInput = (e: InputEvent) => {\n const target = e.target as HTMLInputElement;\n const val = target.value;\n\n if (controlledSearchValue() === undefined) {\n setSearchText(val);\n }\n searchConfig().onSearch?.(val);\n\n if (!dropdownOpen()) {\n openDropdown();\n }\n };\n\n const handleFocus = (e: FocusEvent) => {\n // Only fix scroll when the trigger div (not the search input) receives focus.\n // The trigger div has offsetTop=0 relative to .dropdown (position:relative), which\n // causes Chromium to scroll the page to 0 when focusing it (a browser quirk).\n // We listen for the next scroll event and immediately restore the position.\n if (e.target === triggerRef) {\n const scrollX = window.scrollX;\n const scrollY = window.scrollY;\n // Chromium scrolls the page when focusing triggerRef because its offsetTop=0\n // relative to the .dropdown positioned parent (a browser quirk). We restore after\n // the focus-scroll completes by waiting for the scroll event, then deferring one rAF\n // so the browser's internal focus-scroll is truly done before we override it.\n const restoreScroll = () =>\n requestAnimationFrame(() => requestAnimationFrame(() => window.scrollTo(scrollX, scrollY)));\n window.addEventListener('scroll', restoreScroll, { once: true, passive: false });\n setTimeout(() => window.removeEventListener('scroll', restoreScroll), 200);\n }\n p.onFocus?.(e);\n };\n\n const handleBlur = (e: FocusEvent) => {\n const related = e.relatedTarget as HTMLElement | null;\n if (related && selectRootRef?.contains(related)) return;\n if (related?.closest('.nd-content')) return;\n // Suppress spurious focusout that fires immediately after openDropdown() while\n // SolidJS is re-rendering the DOM (before the search input is mounted and focused).\n if (performance.now() < suppressBlurUntil) return;\n p.onBlur?.(e);\n closeDropdown();\n };\n\n const selectedLabel = createMemo((): JSXElement => {\n if (isMultiple()) return null;\n const vals = selectedValues();\n if (vals.length === 0) return null;\n const val = vals[0];\n const opt = optionMap().get(val);\n\n if (p.labelRender) {\n return p.labelRender({\n value: val,\n label: opt?.label ?? String(val),\n key: String(val),\n });\n }\n\n return (opt?.label as Element) ?? String(val);\n });\n\n interface TagInfo {\n value: string | number;\n label: SolidComponent;\n closable: boolean;\n }\n const visibleTags = createMemo((): { visible: TagInfo[]; omitted: TagInfo[] } => {\n if (!isMultiple()) return { visible: [], omitted: [] };\n const vals = selectedValues();\n const map = optionMap();\n const maxTagCount = p.maxTagCount as number | 'responsive' | undefined;\n const maxTextLen = p.maxTagTextLength as number | undefined;\n\n const tags: TagInfo[] = vals.map(val => {\n const opt = map.get(val);\n let label: SolidComponent = opt?.label ?? String(val);\n if (maxTextLen && typeof label === 'string' && label.length > maxTextLen) {\n label = label.slice(0, maxTextLen) + '...';\n }\n return { value: val, label, closable: !p.disabled };\n });\n\n if (typeof maxTagCount === 'number' && tags.length > maxTagCount) {\n return { visible: tags.slice(0, maxTagCount), omitted: tags.slice(maxTagCount) };\n }\n\n return { visible: tags, omitted: [] };\n });\n\n const showClear = createMemo(() => {\n if (!p.allowClear) return false;\n if (p.disabled) return false;\n return selectedValues().length > 0;\n });\n\n const handleTriggerClick = (e: MouseEvent) => {\n if (p.disabled || p.loading) return;\n e.preventDefault();\n toggleDropdown();\n };\n\n const findOptionIndex = (target: EventTarget | null): number | null => {\n let el = target as HTMLElement | null;\n while (el) {\n const idx = el.dataset?.optionIndex;\n if (idx !== undefined) return Number(idx);\n\n if (el.classList?.contains('sel30')) return null;\n el = el.parentElement;\n }\n return null;\n };\n\n const handleListClick = (e: MouseEvent) => {\n const flatIdx = findOptionIndex(e.target);\n if (flatIdx === null) return;\n const opts = filteredOptions();\n const opt = opts[flatIdx];\n if (!opt || opt.disabled || (isMaxReached() && !isSelected(opt.value))) return;\n // In multiple mode, selecting an option re-renders the tag list (DOM mutation)\n // which can cause a spurious focusout. Suppress blur handling briefly.\n if (isMultiple()) suppressBlurUntil = performance.now() + 150;\n handleSelect(opt.value);\n };\n\n const renderOptionItem = (opt: FlatOption, flatIdx: number) => {\n const selected = () => isSelected(opt.value);\n const isActive = () => activeIndex() === flatIdx;\n const isDisabledOpt = () => opt.disabled || (isMaxReached() && !selected());\n\n const flattenData: FlattenOptionData = {\n label: opt.label,\n value: opt.value,\n disabled: opt.disabled,\n key: opt.value,\n groupLabel: opt.groupLabel,\n };\n\n const content = p.optionRender\n ? p.optionRender(flattenData, { index: flatIdx })\n : (opt.label as Element);\n\n return (\n <div\n data-option-index={flatIdx}\n class={cn(\n 'sel31',\n selected() && 'sel33',\n isActive() && 'sel32',\n isDisabledOpt() && 'sel34',\n opt.groupLabel !== undefined && 'sel38',\n opt.class,\n )}\n title={opt.title}\n >\n <span class=\"sel35\">{content}</span>\n <Show when={selected()}>\n <span class=\"sel36\">\n {p.menuItemSelectedIcon ? (\n (p.menuItemSelectedIcon as Element)\n ) : (\n <Check size={14} color=\"var(--color)\" stroke-width={3} />\n )}\n </span>\n </Show>\n </div>\n );\n };\n\n const dropdownContent = () => {\n const renderList = flatRenderList();\n\n if (renderList.length === 0) {\n return <div class=\"sel39\">{p.notFoundContent as Element}</div>;\n }\n\n if (p.virtual) {\n return (\n <div\n ref={el => {\n requestAnimationFrame(() => setListRef(el));\n }}\n class={cn('sel30', getColor(p.color))}\n style={{ 'max-height': `${p.listHeight}px`, 'overflow-y': 'auto' }}\n onClick={handleListClick}\n >\n <div\n style={{\n height: `${virtualizer.getTotalSize()}px`,\n width: '100%',\n position: 'relative',\n }}\n >\n <For each={virtualizer.getVirtualItems()}>\n {virtualRow => {\n const item = renderList[virtualRow.index];\n return (\n <div\n data-index={virtualRow.index}\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n transform: `translateY(${virtualRow.start}px)`,\n }}\n >\n {item.type === 'group' ? (\n <div class=\"sel37\">{item.groupLabel as Element}</div>\n ) : (\n renderOptionItem(item.option, item.flatIdx)\n )}\n </div>\n );\n }}\n </For>\n </div>\n </div>\n );\n }\n\n return (\n <div\n ref={el => setListRef(el)}\n class=\"sel30\"\n style={{ 'max-height': `${p.listHeight}px` }}\n onClick={handleListClick}\n >\n <For each={renderList}>\n {item =>\n item.type === 'group' ? (\n <div class=\"sel37\">{item.groupLabel as Element}</div>\n ) : (\n renderOptionItem(item.option, item.flatIdx)\n )\n }\n </For>\n </div>\n );\n };\n\n const renderTag = (tag: { value: string | number; label: SolidComponent; closable: boolean }) => (\n <SelectTag\n tag={tag}\n removeIcon={p.removeIcon as JSXElement}\n tagRender={p.tagRender as ((props: TagRenderProps) => JSXElement) | undefined}\n onRemove={handleRemoveTag}\n />\n );\n\n createEffect(\n on(dropdownOpen, open => {\n if (open && p.defaultActiveFirstOption) {\n const opts = filteredOptions();\n const idx = opts.findIndex(o => !o.disabled && (!isMaxReached() || isSelected(o.value)));\n setActiveIndex(idx >= 0 ? idx : -1);\n }\n if (!open) {\n setActiveIndex(-1);\n }\n }),\n );\n\n createEffect(\n on(\n () => currentSearchText(),\n () => {\n if (dropdownOpen() && p.defaultActiveFirstOption) {\n const opts = filteredOptions();\n const idx = opts.findIndex(o => !o.disabled && (!isMaxReached() || isSelected(o.value)));\n setActiveIndex(idx >= 0 ? idx : -1);\n }\n },\n ),\n );\n\n createEffect(\n on(listRef, el => {\n if (el && dropdownOpen()) {\n requestAnimationFrame(() => {\n if (p.virtual) virtualizer.measure();\n scrollToFirstSelected();\n });\n }\n }),\n );\n\n createEffect(\n on(\n () => dropdownOpen(),\n open => {\n if (open && showSearchEnabled()) {\n queueMicrotask(() => inputRef?.focus({ preventScroll: true }));\n }\n },\n ),\n );\n\n return (\n <Dropdown\n ref={el => (selectRootRef = el)}\n open={dropdownOpen()}\n blockScroll={p.blockScroll}\n position={p.placement === 'top' ? 'top' : 'bottom'}\n class={{\n trigger: `${p.disabled ? 'pointer-events-none' : ''} w-full`,\n content: cn(\n 'border-c3 bg-base-100 rounded-box menu p-0',\n p.placement === 'bottom' ? 'mt-1 shadow-md' : 'shadow-md-top mb-1',\n p.class?.dropdownContent,\n ),\n }}\n triggerElement={\n <div\n ref={el => (triggerRef = el)}\n class={cn(\n selectVariants({ size: p.size, variant: p.variant }),\n getColor(p.color),\n dropdownOpen() && 'sel41 sel02',\n isMultiple() && 'sel40',\n p.class?.root,\n p.disabled && 'sel03',\n )}\n tabIndex={p.disabled ? -1 : 0}\n onClick={handleTriggerClick}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n onBlur={handleBlur}\n role=\"combobox\"\n aria-expanded={dropdownOpen()}\n aria-haspopup=\"listbox\"\n >\n <Show when={p.prefix}>\n <span class=\"sel11\">{p.prefix as Element}</span>\n </Show>\n\n <div class=\"sel12\">\n <Show\n when={isMultiple()}\n fallback={\n <div class=\"sel13\">\n <Show\n when={selectedValues().length > 0}\n fallback={\n <span\n class=\"sel15\"\n style={{\n visibility: currentSearchText() ? 'hidden' : undefined,\n }}\n >\n {p.placeholder}\n </span>\n }\n >\n <span\n class=\"sel14\"\n style={{\n visibility:\n currentSearchText() && showSearchEnabled() ? 'hidden' : undefined,\n }}\n >\n {selectedLabel()}\n </span>\n </Show>\n </div>\n }\n >\n <div class=\"sel16\">\n <For each={visibleTags().visible}>{tag => renderTag(tag)}</For>\n\n <Show when={visibleTags().omitted.length > 0}>\n <InnerTooltip\n content={\n <For each={visibleTags().omitted}>\n {tag => (\n <SelectTag\n tag={tag}\n removeIcon={p.removeIcon as JSXElement}\n tagRender={\n p.tagRender as ((props: TagRenderProps) => JSXElement) | undefined\n }\n onRemove={handleRemoveTag}\n />\n )}\n </For>\n }\n >\n <span class=\"sel17 sel20\">\n {(() => {\n const placeholder = p.maxTagPlaceholder;\n if (typeof placeholder === 'function') {\n const omittedValues = visibleTags().omitted.map(t => ({\n value: t.value,\n label: t.label,\n })) as LabeledValue[];\n return placeholder(omittedValues) as Element;\n }\n if (placeholder) return placeholder;\n return `+${visibleTags().omitted.length} more...`;\n })()}\n </span>\n </InnerTooltip>\n </Show>\n\n <Show when={selectedValues().length === 0}>\n <span class=\"sel15\">{p.placeholder}</span>\n </Show>\n </div>\n </Show>\n </div>\n\n <div class=\"sel22\">\n <Show when={showClear()}>\n <span class=\"sel26\" onClick={handleClear}>\n <X class=\"m-auto\" size={14} />\n </span>\n </Show>\n <Show when={!p.loading} fallback={<span class=\"sel25\"></span>}>\n <span class={cn('sel23', dropdownOpen() && 'sel24')}>\n {p.suffixIcon ? (p.suffixIcon as Element) : <ChevronDown size={16} />}\n </span>\n </Show>\n </div>\n </div>\n }\n >\n <div\n role=\"listbox\"\n class={getColor(p.color)}\n onMouseDown={e => {\n if ((e.target as HTMLElement)?.tagName !== 'INPUT') {\n e.preventDefault();\n }\n }}\n >\n <Show when={showSearchEnabled()}>\n <div class=\"flex items-center px-3 shadow-2xs\">\n <Search size={14} />\n <input\n ref={ref => (inputRef = ref)}\n class=\"sel29\"\n value={currentSearchText()}\n onInput={handleSearchInput}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n onBlur={handleBlur}\n disabled={p.disabled}\n autocomplete=\"off\"\n role=\"combobox\"\n aria-expanded={dropdownOpen()}\n aria-haspopup=\"listbox\"\n aria-autocomplete=\"list\"\n placeholder=\"Search...\"\n />\n </div>\n </Show>\n {p.popupRender ? p.popupRender(dropdownContent()) : dropdownContent()}\n </div>\n </Dropdown>\n );\n};\n"],"mappings":"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"}
@@ -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"}