@startdownnotez404/ui 1.0.0 → 1.3.5

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 (439) hide show
  1. package/README.md +110 -0
  2. package/dist/AutocompleteField-ZKNU2IRR.mjs +181 -0
  3. package/dist/AutocompleteField-ZKNU2IRR.mjs.map +1 -0
  4. package/dist/AvatarField-SAODT3CZ.mjs +275 -0
  5. package/dist/AvatarField-SAODT3CZ.mjs.map +1 -0
  6. package/dist/CodeEditor-JF55ZNVD.mjs +34 -0
  7. package/dist/CodeEditor-JF55ZNVD.mjs.map +1 -0
  8. package/dist/DateField-ZYMZFHL4.mjs +82 -0
  9. package/dist/DateField-ZYMZFHL4.mjs.map +1 -0
  10. package/dist/DateTimeField-TPTJ7YIZ.mjs +65 -0
  11. package/dist/DateTimeField-TPTJ7YIZ.mjs.map +1 -0
  12. package/dist/FileUploadField-NTMWBJER.mjs +78 -0
  13. package/dist/FileUploadField-NTMWBJER.mjs.map +1 -0
  14. package/dist/JSONEditorField-TMRWGXVR.mjs +64 -0
  15. package/dist/JSONEditorField-TMRWGXVR.mjs.map +1 -0
  16. package/dist/PopperMenu-LJ36RPBW.mjs +416 -0
  17. package/dist/PopperMenu-LJ36RPBW.mjs.map +1 -0
  18. package/dist/TelField-LOGRVZ4I.mjs +88 -0
  19. package/dist/TelField-LOGRVZ4I.mjs.map +1 -0
  20. package/dist/alert.d.mts +202 -0
  21. package/dist/alert.d.ts +202 -0
  22. package/dist/alert.js +784 -0
  23. package/dist/alert.js.map +1 -0
  24. package/dist/alert.mjs +47 -0
  25. package/dist/alert.mjs.map +1 -0
  26. package/dist/appBar.d.mts +21 -0
  27. package/dist/appBar.d.ts +21 -0
  28. package/dist/appBar.js +64 -0
  29. package/dist/appBar.js.map +1 -0
  30. package/dist/appBar.mjs +12 -0
  31. package/dist/appBar.mjs.map +1 -0
  32. package/dist/autocomplete.d.mts +121 -0
  33. package/dist/autocomplete.d.ts +121 -0
  34. package/dist/autocomplete.js +2052 -0
  35. package/dist/autocomplete.js.map +1 -0
  36. package/dist/autocomplete.mjs +21 -0
  37. package/dist/autocomplete.mjs.map +1 -0
  38. package/dist/avatar.d.mts +253 -0
  39. package/dist/avatar.d.ts +253 -0
  40. package/dist/avatar.js +992 -0
  41. package/dist/avatar.js.map +1 -0
  42. package/dist/avatar.mjs +41 -0
  43. package/dist/avatar.mjs.map +1 -0
  44. package/dist/badge.d.mts +123 -0
  45. package/dist/badge.d.ts +123 -0
  46. package/dist/badge.js +151 -0
  47. package/dist/badge.js.map +1 -0
  48. package/dist/badge.mjs +10 -0
  49. package/dist/badge.mjs.map +1 -0
  50. package/dist/box.d.mts +36 -0
  51. package/dist/box.d.ts +36 -0
  52. package/dist/box.js +199 -0
  53. package/dist/box.js.map +1 -0
  54. package/dist/box.mjs +14 -0
  55. package/dist/box.mjs.map +1 -0
  56. package/dist/button.d.mts +230 -52
  57. package/dist/button.d.ts +230 -52
  58. package/dist/button.js +392 -60
  59. package/dist/button.js.map +1 -1
  60. package/dist/button.mjs +14 -8
  61. package/dist/card.d.mts +47 -0
  62. package/dist/card.d.ts +47 -0
  63. package/dist/card.js +135 -0
  64. package/dist/card.js.map +1 -0
  65. package/dist/card.mjs +24 -0
  66. package/dist/card.mjs.map +1 -0
  67. package/dist/chart.d.mts +40 -0
  68. package/dist/chart.d.ts +40 -0
  69. package/dist/chart.js +1234 -0
  70. package/dist/chart.js.map +1 -0
  71. package/dist/chart.mjs +10 -0
  72. package/dist/chart.mjs.map +1 -0
  73. package/dist/checkbox.d.mts +62 -0
  74. package/dist/checkbox.d.ts +62 -0
  75. package/dist/checkbox.js +299 -0
  76. package/dist/checkbox.js.map +1 -0
  77. package/dist/checkbox.mjs +14 -0
  78. package/dist/checkbox.mjs.map +1 -0
  79. package/dist/chip.d.mts +96 -0
  80. package/dist/chip.d.ts +96 -0
  81. package/dist/chip.js +112 -0
  82. package/dist/chip.js.map +1 -0
  83. package/dist/chip.mjs +10 -0
  84. package/dist/chip.mjs.map +1 -0
  85. package/dist/chunk-24XDGNJ6.mjs +1450 -0
  86. package/dist/chunk-24XDGNJ6.mjs.map +1 -0
  87. package/dist/chunk-27KYFU7R.mjs +30 -0
  88. package/dist/chunk-27KYFU7R.mjs.map +1 -0
  89. package/dist/chunk-2FFLT5VP.mjs +7 -0
  90. package/dist/chunk-2FFLT5VP.mjs.map +1 -0
  91. package/dist/chunk-2ZZJTBTE.mjs +148 -0
  92. package/dist/chunk-2ZZJTBTE.mjs.map +1 -0
  93. package/dist/chunk-3DQINB57.mjs +15 -0
  94. package/dist/chunk-3DQINB57.mjs.map +1 -0
  95. package/dist/chunk-3VUAM2GY.mjs +52 -0
  96. package/dist/chunk-3VUAM2GY.mjs.map +1 -0
  97. package/dist/chunk-4Q54P737.mjs +19 -0
  98. package/dist/chunk-4Q54P737.mjs.map +1 -0
  99. package/dist/chunk-4RPFRNXG.mjs +62 -0
  100. package/dist/chunk-4RPFRNXG.mjs.map +1 -0
  101. package/dist/chunk-56TI2ZBT.mjs +114 -0
  102. package/dist/chunk-56TI2ZBT.mjs.map +1 -0
  103. package/dist/chunk-6REEQBJI.mjs +62 -0
  104. package/dist/chunk-6REEQBJI.mjs.map +1 -0
  105. package/dist/chunk-AAH2O24U.mjs +325 -0
  106. package/dist/chunk-AAH2O24U.mjs.map +1 -0
  107. package/dist/chunk-B7DAB22K.mjs +16 -0
  108. package/dist/chunk-B7DAB22K.mjs.map +1 -0
  109. package/dist/chunk-BGB7JHIU.mjs +222 -0
  110. package/dist/chunk-BGB7JHIU.mjs.map +1 -0
  111. package/dist/chunk-CRYIEYZZ.mjs +756 -0
  112. package/dist/chunk-CRYIEYZZ.mjs.map +1 -0
  113. package/dist/chunk-CWFWRZWU.mjs +23 -0
  114. package/dist/chunk-CWFWRZWU.mjs.map +1 -0
  115. package/dist/chunk-DELCADNF.mjs +1926 -0
  116. package/dist/chunk-DELCADNF.mjs.map +1 -0
  117. package/dist/chunk-E3I2VDHZ.mjs +292 -0
  118. package/dist/chunk-E3I2VDHZ.mjs.map +1 -0
  119. package/dist/chunk-EEH7HACG.mjs +249 -0
  120. package/dist/chunk-EEH7HACG.mjs.map +1 -0
  121. package/dist/chunk-EKPULYPU.mjs +497 -0
  122. package/dist/chunk-EKPULYPU.mjs.map +1 -0
  123. package/dist/chunk-EW4DTFH3.mjs +69 -0
  124. package/dist/chunk-EW4DTFH3.mjs.map +1 -0
  125. package/dist/chunk-FJ6ZGZIA.mjs +43 -0
  126. package/dist/chunk-FJ6ZGZIA.mjs.map +1 -0
  127. package/dist/chunk-HE7MY3RT.mjs +23 -0
  128. package/dist/chunk-HE7MY3RT.mjs.map +1 -0
  129. package/dist/chunk-HR3A4H4E.mjs +1289 -0
  130. package/dist/chunk-HR3A4H4E.mjs.map +1 -0
  131. package/dist/chunk-I5JWS4Z7.mjs +91 -0
  132. package/dist/chunk-I5JWS4Z7.mjs.map +1 -0
  133. package/dist/chunk-IN3O4R7Q.mjs +932 -0
  134. package/dist/chunk-IN3O4R7Q.mjs.map +1 -0
  135. package/dist/chunk-JIU5GVM7.mjs +414 -0
  136. package/dist/chunk-JIU5GVM7.mjs.map +1 -0
  137. package/dist/chunk-JWANK42G.mjs +170 -0
  138. package/dist/chunk-JWANK42G.mjs.map +1 -0
  139. package/dist/chunk-MDAUF7IL.mjs +9 -0
  140. package/dist/chunk-MDAUF7IL.mjs.map +1 -0
  141. package/dist/chunk-MI64T62E.mjs +26 -0
  142. package/dist/chunk-MI64T62E.mjs.map +1 -0
  143. package/dist/chunk-NJYNJLT7.mjs +172 -0
  144. package/dist/chunk-NJYNJLT7.mjs.map +1 -0
  145. package/dist/chunk-NLBDBJ3R.mjs +97 -0
  146. package/dist/chunk-NLBDBJ3R.mjs.map +1 -0
  147. package/dist/chunk-OGNGPI3M.mjs +333 -0
  148. package/dist/chunk-OGNGPI3M.mjs.map +1 -0
  149. package/dist/chunk-OJV6V7YZ.mjs +552 -0
  150. package/dist/chunk-OJV6V7YZ.mjs.map +1 -0
  151. package/dist/chunk-ONQMRE2G.mjs +26 -0
  152. package/dist/chunk-ONQMRE2G.mjs.map +1 -0
  153. package/dist/chunk-OP6LKXPA.mjs +75 -0
  154. package/dist/chunk-OP6LKXPA.mjs.map +1 -0
  155. package/dist/chunk-QFF3HTHL.mjs +14 -0
  156. package/dist/chunk-QFF3HTHL.mjs.map +1 -0
  157. package/dist/chunk-QKGCW37O.mjs +1175 -0
  158. package/dist/chunk-QKGCW37O.mjs.map +1 -0
  159. package/dist/chunk-R5MKQN6D.mjs +227 -0
  160. package/dist/chunk-R5MKQN6D.mjs.map +1 -0
  161. package/dist/chunk-RXBQ7KXF.mjs +652 -0
  162. package/dist/chunk-RXBQ7KXF.mjs.map +1 -0
  163. package/dist/chunk-S6EZVRZC.mjs +161 -0
  164. package/dist/chunk-S6EZVRZC.mjs.map +1 -0
  165. package/dist/chunk-SGCUDWO3.mjs +396 -0
  166. package/dist/chunk-SGCUDWO3.mjs.map +1 -0
  167. package/dist/chunk-SRWPHN2N.mjs +188 -0
  168. package/dist/chunk-SRWPHN2N.mjs.map +1 -0
  169. package/dist/chunk-T34IULP5.mjs +242 -0
  170. package/dist/chunk-T34IULP5.mjs.map +1 -0
  171. package/dist/chunk-T4X375IG.mjs +100 -0
  172. package/dist/chunk-T4X375IG.mjs.map +1 -0
  173. package/dist/chunk-T6AMRENK.mjs +376 -0
  174. package/dist/chunk-T6AMRENK.mjs.map +1 -0
  175. package/dist/chunk-TDRA5EZI.mjs +325 -0
  176. package/dist/chunk-TDRA5EZI.mjs.map +1 -0
  177. package/dist/chunk-UDREPVEY.mjs +356 -0
  178. package/dist/chunk-UDREPVEY.mjs.map +1 -0
  179. package/dist/chunk-UGMRJMFZ.mjs +172 -0
  180. package/dist/chunk-UGMRJMFZ.mjs.map +1 -0
  181. package/dist/chunk-UMJ5SCIQ.mjs +438 -0
  182. package/dist/chunk-UMJ5SCIQ.mjs.map +1 -0
  183. package/dist/chunk-UTVSYS6S.mjs +270 -0
  184. package/dist/chunk-UTVSYS6S.mjs.map +1 -0
  185. package/dist/chunk-V26V2S3W.mjs +197 -0
  186. package/dist/chunk-V26V2S3W.mjs.map +1 -0
  187. package/dist/chunk-VYD3PDBB.mjs +38 -0
  188. package/dist/chunk-VYD3PDBB.mjs.map +1 -0
  189. package/dist/chunk-WYYP3Y34.mjs +55 -0
  190. package/dist/chunk-WYYP3Y34.mjs.map +1 -0
  191. package/dist/chunk-XIMFP6RB.mjs +161 -0
  192. package/dist/chunk-XIMFP6RB.mjs.map +1 -0
  193. package/dist/chunk-XJ2SXC2Q.mjs +558 -0
  194. package/dist/chunk-XJ2SXC2Q.mjs.map +1 -0
  195. package/dist/chunk-Y74ALKBL.mjs +565 -0
  196. package/dist/chunk-Y74ALKBL.mjs.map +1 -0
  197. package/dist/chunk-ZG3NQI77.mjs +353 -0
  198. package/dist/chunk-ZG3NQI77.mjs.map +1 -0
  199. package/dist/chunk-ZVFYOXDE.mjs +297 -0
  200. package/dist/chunk-ZVFYOXDE.mjs.map +1 -0
  201. package/dist/collapse.d.mts +10 -0
  202. package/dist/collapse.d.ts +10 -0
  203. package/dist/collapse.js +53 -0
  204. package/dist/collapse.js.map +1 -0
  205. package/dist/collapse.mjs +10 -0
  206. package/dist/collapse.mjs.map +1 -0
  207. package/dist/datePicker.d.mts +133 -0
  208. package/dist/datePicker.d.ts +133 -0
  209. package/dist/datePicker.js +482 -0
  210. package/dist/datePicker.js.map +1 -0
  211. package/dist/datePicker.mjs +29 -0
  212. package/dist/datePicker.mjs.map +1 -0
  213. package/dist/displayFile.d.mts +95 -0
  214. package/dist/displayFile.d.ts +95 -0
  215. package/dist/displayFile.js +357 -0
  216. package/dist/displayFile.js.map +1 -0
  217. package/dist/displayFile.mjs +19 -0
  218. package/dist/displayFile.mjs.map +1 -0
  219. package/dist/divider.d.mts +9 -0
  220. package/dist/divider.d.ts +9 -0
  221. package/dist/divider.js +52 -0
  222. package/dist/divider.js.map +1 -0
  223. package/dist/divider.mjs +10 -0
  224. package/dist/divider.mjs.map +1 -0
  225. package/dist/fileUploader.d.mts +86 -0
  226. package/dist/fileUploader.d.ts +86 -0
  227. package/dist/fileUploader.js +722 -0
  228. package/dist/fileUploader.js.map +1 -0
  229. package/dist/fileUploader.mjs +16 -0
  230. package/dist/fileUploader.mjs.map +1 -0
  231. package/dist/flowMap.d.mts +353 -0
  232. package/dist/flowMap.d.ts +353 -0
  233. package/dist/flowMap.js +94806 -0
  234. package/dist/flowMap.js.map +1 -0
  235. package/dist/flowMap.mjs +94585 -0
  236. package/dist/flowMap.mjs.map +1 -0
  237. package/dist/form.d.mts +84 -0
  238. package/dist/form.d.ts +84 -0
  239. package/dist/form.js +144 -0
  240. package/dist/form.js.map +1 -0
  241. package/dist/form.mjs +24 -0
  242. package/dist/form.mjs.map +1 -0
  243. package/dist/icons.d.mts +160 -0
  244. package/dist/icons.d.ts +160 -0
  245. package/dist/icons.js +540 -0
  246. package/dist/icons.js.map +1 -0
  247. package/dist/icons.mjs +306 -0
  248. package/dist/icons.mjs.map +1 -0
  249. package/dist/image.d.mts +49 -0
  250. package/dist/image.d.ts +49 -0
  251. package/dist/image.js +1348 -0
  252. package/dist/image.js.map +1 -0
  253. package/dist/image.mjs +19 -0
  254. package/dist/image.mjs.map +1 -0
  255. package/dist/index.d.ts +46 -0
  256. package/dist/index.js +20198 -0
  257. package/dist/index.js.map +1 -0
  258. package/dist/index.mjs +912 -0
  259. package/dist/index.mjs.map +1 -0
  260. package/dist/input.d.mts +195 -0
  261. package/dist/input.d.ts +195 -0
  262. package/dist/input.js +1101 -0
  263. package/dist/input.js.map +1 -0
  264. package/dist/input.mjs +32 -0
  265. package/dist/input.mjs.map +1 -0
  266. package/dist/jsonEditor.d.mts +13 -0
  267. package/dist/jsonEditor.d.ts +13 -0
  268. package/dist/jsonEditor.js +247 -0
  269. package/dist/jsonEditor.js.map +1 -0
  270. package/dist/jsonEditor.mjs +9 -0
  271. package/dist/jsonEditor.mjs.map +1 -0
  272. package/dist/list.d.mts +83 -0
  273. package/dist/list.d.ts +83 -0
  274. package/dist/list.js +564 -0
  275. package/dist/list.js.map +1 -0
  276. package/dist/list.mjs +39 -0
  277. package/dist/list.mjs.map +1 -0
  278. package/dist/loading.d.mts +48 -0
  279. package/dist/loading.d.ts +48 -0
  280. package/dist/loading.js +383 -0
  281. package/dist/loading.js.map +1 -0
  282. package/dist/loading.mjs +23 -0
  283. package/dist/loading.mjs.map +1 -0
  284. package/dist/markdown.d.mts +14 -0
  285. package/dist/markdown.d.ts +14 -0
  286. package/dist/markdown.js +25927 -0
  287. package/dist/markdown.js.map +1 -0
  288. package/dist/markdown.mjs +25623 -0
  289. package/dist/markdown.mjs.map +1 -0
  290. package/dist/menu.d.mts +368 -0
  291. package/dist/menu.d.ts +368 -0
  292. package/dist/menu.js +1571 -0
  293. package/dist/menu.js.map +1 -0
  294. package/dist/menu.mjs +43 -0
  295. package/dist/menu.mjs.map +1 -0
  296. package/dist/modal.d.mts +90 -0
  297. package/dist/modal.d.ts +90 -0
  298. package/dist/modal.js +883 -0
  299. package/dist/modal.js.map +1 -0
  300. package/dist/modal.mjs +25 -0
  301. package/dist/modal.mjs.map +1 -0
  302. package/dist/overlay.d.mts +2 -0
  303. package/dist/overlay.d.ts +2 -0
  304. package/dist/overlay.js +46 -0
  305. package/dist/overlay.js.map +1 -0
  306. package/dist/overlay.mjs +10 -0
  307. package/dist/overlay.mjs.map +1 -0
  308. package/dist/paper.d.mts +38 -0
  309. package/dist/paper.d.ts +38 -0
  310. package/dist/paper.js +90 -0
  311. package/dist/paper.js.map +1 -0
  312. package/dist/paper.mjs +12 -0
  313. package/dist/paper.mjs.map +1 -0
  314. package/dist/patterns.d.mts +133 -0
  315. package/dist/patterns.d.ts +133 -0
  316. package/dist/patterns.js +483 -0
  317. package/dist/patterns.js.map +1 -0
  318. package/dist/patterns.mjs +46 -0
  319. package/dist/patterns.mjs.map +1 -0
  320. package/dist/process.d.mts +125 -0
  321. package/dist/process.d.ts +125 -0
  322. package/dist/process.js +1471 -0
  323. package/dist/process.js.map +1 -0
  324. package/dist/process.mjs +30 -0
  325. package/dist/process.mjs.map +1 -0
  326. package/dist/progress.d.mts +44 -0
  327. package/dist/progress.d.ts +44 -0
  328. package/dist/progress.js +94 -0
  329. package/dist/progress.js.map +1 -0
  330. package/dist/progress.mjs +14 -0
  331. package/dist/progress.mjs.map +1 -0
  332. package/dist/resizablePanel.d.mts +297 -0
  333. package/dist/resizablePanel.d.ts +297 -0
  334. package/dist/resizablePanel.js +122 -0
  335. package/dist/resizablePanel.js.map +1 -0
  336. package/dist/resizablePanel.mjs +22 -0
  337. package/dist/resizablePanel.mjs.map +1 -0
  338. package/dist/scrollToLoad.d.mts +41 -0
  339. package/dist/scrollToLoad.d.ts +41 -0
  340. package/dist/scrollToLoad.js +256 -0
  341. package/dist/scrollToLoad.js.map +1 -0
  342. package/dist/scrollToLoad.mjs +16 -0
  343. package/dist/scrollToLoad.mjs.map +1 -0
  344. package/dist/select.d.mts +50 -0
  345. package/dist/select.d.ts +50 -0
  346. package/dist/select.js +426 -0
  347. package/dist/select.js.map +1 -0
  348. package/dist/select.mjs +24 -0
  349. package/dist/select.mjs.map +1 -0
  350. package/dist/skeleton.d.mts +13 -0
  351. package/dist/skeleton.d.ts +13 -0
  352. package/dist/skeleton.js +68 -0
  353. package/dist/skeleton.js.map +1 -0
  354. package/dist/skeleton.mjs +11 -0
  355. package/dist/skeleton.mjs.map +1 -0
  356. package/dist/slider.d.mts +65 -0
  357. package/dist/slider.d.ts +65 -0
  358. package/dist/slider.js +106 -0
  359. package/dist/slider.js.map +1 -0
  360. package/dist/slider.mjs +10 -0
  361. package/dist/slider.mjs.map +1 -0
  362. package/dist/stepper.d.mts +98 -0
  363. package/dist/stepper.d.ts +98 -0
  364. package/dist/stepper.js +313 -0
  365. package/dist/stepper.js.map +1 -0
  366. package/dist/stepper.mjs +38 -0
  367. package/dist/stepper.mjs.map +1 -0
  368. package/dist/switch.d.mts +151 -0
  369. package/dist/switch.d.ts +151 -0
  370. package/dist/switch.js +289 -0
  371. package/dist/switch.js.map +1 -0
  372. package/dist/switch.mjs +17 -0
  373. package/dist/switch.mjs.map +1 -0
  374. package/dist/tab.d.mts +182 -0
  375. package/dist/tab.d.ts +182 -0
  376. package/dist/tab.js +1418 -0
  377. package/dist/tab.js.map +1 -0
  378. package/dist/tab.mjs +34 -0
  379. package/dist/tab.mjs.map +1 -0
  380. package/dist/table.d.mts +720 -0
  381. package/dist/table.d.ts +720 -0
  382. package/dist/table.js +10882 -0
  383. package/dist/table.js.map +1 -0
  384. package/dist/table.mjs +63 -0
  385. package/dist/table.mjs.map +1 -0
  386. package/dist/theme.d.mts +30 -4
  387. package/dist/theme.d.ts +30 -4
  388. package/dist/theme.js +3210 -170
  389. package/dist/theme.js.map +1 -1
  390. package/dist/theme.mjs +52 -230
  391. package/dist/theme.mjs.map +1 -1
  392. package/dist/timeline.d.mts +30 -0
  393. package/dist/timeline.d.ts +30 -0
  394. package/dist/timeline.js +273 -0
  395. package/dist/timeline.js.map +1 -0
  396. package/dist/timeline.mjs +14 -0
  397. package/dist/timeline.mjs.map +1 -0
  398. package/dist/toggleButtonGroup.d.mts +125 -0
  399. package/dist/toggleButtonGroup.d.ts +125 -0
  400. package/dist/toggleButtonGroup.js +190 -0
  401. package/dist/toggleButtonGroup.js.map +1 -0
  402. package/dist/toggleButtonGroup.mjs +15 -0
  403. package/dist/toggleButtonGroup.mjs.map +1 -0
  404. package/dist/tooltip.d.mts +13 -0
  405. package/dist/tooltip.d.ts +13 -0
  406. package/dist/tooltip.js +56 -0
  407. package/dist/tooltip.js.map +1 -0
  408. package/dist/tooltip.mjs +10 -0
  409. package/dist/tooltip.mjs.map +1 -0
  410. package/dist/typography.d.mts +21 -23
  411. package/dist/typography.d.ts +21 -23
  412. package/dist/typography.js +37 -63
  413. package/dist/typography.js.map +1 -1
  414. package/dist/typography.mjs +2 -1
  415. package/dist/useForm.d.mts +588 -0
  416. package/dist/useForm.d.ts +588 -0
  417. package/dist/useForm.js +8743 -0
  418. package/dist/useForm.js.map +1 -0
  419. package/dist/useForm.mjs +45 -0
  420. package/dist/useForm.mjs.map +1 -0
  421. package/dist/useSearch.d.mts +126 -0
  422. package/dist/useSearch.d.ts +126 -0
  423. package/dist/useSearch.js +1125 -0
  424. package/dist/useSearch.js.map +1 -0
  425. package/dist/useSearch.mjs +42 -0
  426. package/dist/useSearch.mjs.map +1 -0
  427. package/dist/variablesRenderer.d.mts +45 -0
  428. package/dist/variablesRenderer.d.ts +45 -0
  429. package/dist/variablesRenderer.js +511 -0
  430. package/dist/variablesRenderer.js.map +1 -0
  431. package/dist/variablesRenderer.mjs +21 -0
  432. package/dist/variablesRenderer.mjs.map +1 -0
  433. package/package.json +109 -15
  434. package/dist/chunk-PKADXEAD.mjs +0 -116
  435. package/dist/chunk-PKADXEAD.mjs.map +0 -1
  436. package/dist/chunk-YGBJCPUS.mjs +0 -88
  437. package/dist/chunk-YGBJCPUS.mjs.map +0 -1
  438. package/dist/theme.css +0 -44
  439. package/dist/theme.css.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/compound/Table/src/Table.tsx","../src/components/compound/Table/src/utils/expanded.ts","../src/components/compound/Table/src/render/cell/RowControlsCell.tsx","../src/components/compound/Table/src/_types.ts","../src/components/elemental/Table/src/index.ts","../src/components/compound/Table/src/render/controls/PaginationControl.tsx","../src/components/compound/Table/src/form/FormActionDialog.tsx","../src/components/compound/Table/src/form/ConfirmDialog.tsx","../src/components/compound/Table/src/render/utils/columnSizing.ts","../src/components/compound/Table/src/theme.ts","../src/components/compound/Table/src/utils/filters.ts","../src/components/compound/Table/src/hooks/useTableState.ts","../src/components/compound/Table/src/render/actions/ActionButtons.tsx","../src/components/compound/Table/src/render/controls/GlobalFilterControl.tsx","../src/components/compound/Table/src/render/TableToolbar.tsx","../src/components/compound/Table/src/render/Header.tsx","../src/components/compound/Table/src/render/controls/ColumnFilterDropdown/ColumnFilterDropdown.tsx","../src/components/compound/Table/src/render/controls/ColumnFilterDropdown/useColumnFilterDropdown.ts","../src/components/compound/Table/src/render/controls/ColumnFilterDropdown/utils.ts","../src/components/compound/Table/src/render/Body.tsx","../src/components/compound/Table/src/render/EmptyState.tsx","../src/components/compound/Table/src/render/TableContent.tsx","../src/components/compound/Table/src/render/cell/PercentageBar.tsx"],"sourcesContent":["import React from 'react';\nimport { Box } from '@/ele/Box';\nimport { Checkbox } from '@/ele/Checkbox';\nimport { Paper } from '@/ele/Paper';\n\nimport { RowControlsCell } from './render/cell/RowControlsCell';\nimport {\n createColumnHelper,\n getFacetedRowModel,\n getFacetedUniqueValues,\n getCoreRowModel,\n getFilteredRowModel,\n getExpandedRowModel,\n getGroupedRowModel,\n getPaginationRowModel,\n getSortedRowModel,\n useReactTable,\n type ColumnDef,\n} from '@tanstack/react-table';\nimport type { FormTypeMap } from '@/compound/UseForm';\nimport type {\n TableAction,\n TableActionContext,\n TableFormAction,\n TableProps,\n} from './_types';\nimport { COL_ID_ACTIONS, COL_ID_CONTROLS } from './_types';\nimport { PaginationControl } from './render/controls/PaginationControl';\nimport { FormActionDialog } from './form/FormActionDialog';\nimport { ConfirmDialog } from './form/ConfirmDialog';\nimport type { ConfirmRequest } from './render/actions/ActionButtons';\nimport { getColumnSizeVarName } from './render/utils/columnSizing';\nimport { TableStyledWrapper } from './theme';\nimport { createExcelColumnFilterFn } from './utils/filters';\nimport { useTableState, DEFAULT_PAGINATION, DEFAULT_COLUMN_PINNING, DEFAULT_COLUMN_FILTERS, DEFAULT_COLUMN_SIZING, DEFAULT_GROUPING, DEFAULT_ROW_SELECTION, DEFAULT_PAGE_SIZE_OPTIONS } from './hooks/useTableState';\nimport { TableToolbar } from './render/TableToolbar';\nimport { TableContent } from './render/TableContent';\n\n\n\n\n\ntype ActiveFormActionState<TData extends object, TFormMap extends FormTypeMap = FormTypeMap> = {\n action: TableFormAction<TData, TFormMap>;\n context: TableActionContext<TData>;\n} | null;\n\n\n\nfunction TableInner<TData extends object, TFormMap extends FormTypeMap = FormTypeMap>(props: TableProps<TData, TFormMap>) {\n const {\n columns,\n data,\n loading = false,\n emptyMessage = 'No data found.',\n emptyDescription,\n dense = false,\n getRowId,\n rowActions = [],\n tableActions = [],\n actionColumnHeader = 'Actions',\n enableFiltering = false,\n filterPlaceholder = 'Filter rows...',\n enableColumnFilters = false,\n columnFilterPlaceholder = 'Filter...',\n enableGrouping = false,\n enableColumnPinning = false,\n enableColumnResizing = true,\n columnResizeMode = 'onChange',\n enableRowSelection = false,\n enablePagination = true,\n enableExpanding = false,\n pageSizeOptions = DEFAULT_PAGE_SIZE_OPTIONS,\n stickyHeader = true,\n bodyMaxHeight,\n renderExpandedRow,\n getRowCanExpand,\n } = props;\n\n const tableState = useTableState(props);\n const { state, deferredGlobalFilter, handlers } = tableState;\n\n const [activeFormAction, setActiveFormAction] = React.useState<ActiveFormActionState<TData, TFormMap>>(null);\n\n const [confirmRequest, setConfirmRequest] = React.useState<ConfirmRequest<TData> | null>(null);\n\n const handleRequestConfirm = React.useCallback((req: ConfirmRequest<TData>) => {\n setConfirmRequest(req);\n }, []);\n\n const handleCloseConfirm = React.useCallback(() => {\n setConfirmRequest(null);\n }, []);\n\n const handleConfirm = React.useCallback(() => {\n if (!confirmRequest) return;\n const { proceed } = confirmRequest;\n handleCloseConfirm();\n return proceed();\n }, [confirmRequest, handleCloseConfirm]);\n const columnHelper = React.useMemo(() => createColumnHelper<TData>(), []);\n const excelColumnFilterFn = React.useMemo(() => createExcelColumnFilterFn<TData>(), []);\n\n const filteredRowModel = React.useMemo(() => getFilteredRowModel<TData>(), []);\n const facetedRowModel = React.useMemo(() => getFacetedRowModel<TData>(), []);\n const facetedUniqueValues = React.useMemo(() => getFacetedUniqueValues<TData>(), []);\n const groupedRowModel = React.useMemo(() => getGroupedRowModel<TData>(), []);\n const expandedRowModel = React.useMemo(() => getExpandedRowModel<TData>(), []);\n const paginatedRowModel = React.useMemo(() => getPaginationRowModel<TData>(), []);\n const shouldEnableExpanding = enableExpanding || enableGrouping;\n\n const tableColumns = React.useMemo<ColumnDef<TData, unknown>[]>(() => {\n const isExpandable = shouldEnableExpanding || !!renderExpandedRow;\n const hasControls = enableRowSelection || isExpandable;\n \n // Calculate accurate width bounds based on what combinations are currently enabled\n const controlsWidth = (enableRowSelection && isExpandable) ? 80 \n : enableRowSelection ? 48 \n : isExpandable ? 44 \n : 0;\n\n const controlsColumn = hasControls\n ? [\n columnHelper.display({\n id: COL_ID_CONTROLS,\n header: ({ table }) => (\n <Box sx={{ display: 'flex', justifyContent: 'center', alignItems: 'center', width: '100%', gap: 1 }}>\n {isExpandable && enableRowSelection ? (\n <Box sx={{ width: 28 }} />\n ) : null}\n {enableRowSelection ? (\n <Checkbox\n size='small'\n checked={enablePagination ? table.getIsAllPageRowsSelected() : table.getIsAllRowsSelected()}\n indeterminate={enablePagination ? table.getIsSomePageRowsSelected() : table.getIsSomeRowsSelected()}\n onChange={enablePagination ? table.getToggleAllPageRowsSelectedHandler() : table.getToggleAllRowsSelectedHandler()}\n sx={{ p: 0.5 }}\n />\n ) : null}\n </Box>\n ),\n cell: ({ row, table }) => (\n <RowControlsCell\n row={row}\n table={table}\n isExpandable={isExpandable}\n enableRowSelection={enableRowSelection}\n renderExpandedRow={renderExpandedRow}\n />\n ),\n enableSorting: false,\n enableColumnFilter: false,\n enableGrouping: false,\n size: controlsWidth,\n minSize: controlsWidth,\n maxSize: controlsWidth,\n }),\n ]\n : [];\n\n const actionColumn = rowActions.length > 0\n ? [\n columnHelper.display({\n id: COL_ID_ACTIONS,\n header: () => actionColumnHeader,\n enableSorting: false,\n cell: () => null,\n }),\n ]\n : [];\n\n return [\n ...controlsColumn,\n ...columns,\n ...actionColumn,\n ];\n }, [actionColumnHeader, columnHelper, columns, enablePagination, enableRowSelection, shouldEnableExpanding, renderExpandedRow, rowActions.length]);\n\n const table = useReactTable({\n data,\n columns: tableColumns,\n getRowId,\n defaultColumn: {\n filterFn: excelColumnFilterFn,\n },\n state: {\n sorting: state.sorting,\n globalFilter: enableFiltering ? deferredGlobalFilter : '',\n columnFilters: enableColumnFilters ? state.columnFilters : DEFAULT_COLUMN_FILTERS,\n grouping: enableGrouping ? state.grouping : DEFAULT_GROUPING,\n rowSelection: enableRowSelection ? state.rowSelection : DEFAULT_ROW_SELECTION,\n expanded: shouldEnableExpanding ? state.expanded : {},\n pagination: enablePagination ? state.pagination : DEFAULT_PAGINATION,\n columnPinning: enableColumnPinning ? state.columnPinning : DEFAULT_COLUMN_PINNING,\n columnSizing: enableColumnResizing ? state.columnSizing : DEFAULT_COLUMN_SIZING,\n },\n onSortingChange: handlers.onSortingChange,\n onGlobalFilterChange: handlers.onGlobalFilterChange,\n onColumnFiltersChange: handlers.onColumnFiltersChange,\n onGroupingChange: handlers.onGroupingChange,\n onRowSelectionChange: handlers.onRowSelectionChange,\n onExpandedChange: handlers.onExpandedChange,\n onPaginationChange: handlers.onPaginationChange,\n onColumnPinningChange: handlers.onColumnPinningChange,\n onColumnSizingChange: handlers.onColumnSizingChange,\n enableGrouping,\n enableColumnFilters,\n enableColumnPinning,\n enableColumnResizing,\n autoResetExpanded: false,\n columnResizeMode,\n enableRowSelection,\n enableExpanding: shouldEnableExpanding,\n getRowCanExpand: getRowCanExpand ?? (() => true),\n getCoreRowModel: getCoreRowModel(),\n ...(enableFiltering || enableColumnFilters ? { getFilteredRowModel: filteredRowModel } : {}),\n ...(enableColumnFilters\n ? {\n getFacetedRowModel: facetedRowModel,\n getFacetedUniqueValues: facetedUniqueValues,\n }\n : {}),\n ...(enableGrouping ? { getGroupedRowModel: groupedRowModel } : {}),\n ...(shouldEnableExpanding ? { getExpandedRowModel: expandedRowModel } : {}),\n getSortedRowModel: getSortedRowModel(),\n ...(enablePagination ? { getPaginationRowModel: paginatedRowModel } : {}),\n });\n\n const columnSizeVars = React.useMemo(() => {\n const vars: Record<string, string> = {};\n\n table.getVisibleLeafColumns().forEach((column) => {\n vars[getColumnSizeVarName(column.id)] = `${column.getSize()}px`;\n });\n\n return vars;\n // `table` from useReactTable is a stable instance; sizing must stay listed so CSS vars update on resize.\n // eslint-disable-next-line react-hooks/exhaustive-deps -- keep columnSizing; `table` identity does not change\n }, [state.columnSizing, table]);\n\n const openFormAction = React.useCallback((action: Extract<TableAction<TData, TFormMap>, { kind: 'form' }>, context: TableActionContext<TData>) => {\n setActiveFormAction({ action, context });\n }, []);\n\n // pass to children; rows/toolbar call this to request a confirmation dialog\n const onRequestConfirm = React.useCallback((req: ConfirmRequest<TData>) => {\n handleRequestConfirm(req);\n }, [handleRequestConfirm]);\n\n return (\n <TableStyledWrapper>\n <Paper variant='outlined' sx={{ width: '100%', overflow: 'hidden' }}>\n <TableToolbar\n table={table}\n tableActions={tableActions}\n enableFiltering={enableFiltering}\n globalFilter={state.globalFilter}\n filterPlaceholder={filterPlaceholder}\n onGlobalFilterChange={handlers.onGlobalFilterChange}\n onOpenFormAction={openFormAction}\n onRequestConfirm={onRequestConfirm}\n />\n\n <TableContent\n table={table}\n bodyMaxHeight={bodyMaxHeight}\n dense={dense}\n stickyHeader={stickyHeader}\n columnSizeVars={columnSizeVars}\n enableColumnFilters={enableColumnFilters}\n columnFilterPlaceholder={columnFilterPlaceholder}\n loading={loading}\n emptyMessage={emptyMessage}\n emptyDescription={emptyDescription}\n rowActions={rowActions}\n renderExpandedRow={renderExpandedRow}\n onOpenFormAction={openFormAction}\n onRequestConfirm={onRequestConfirm}\n />\n\n {enablePagination ? (\n <PaginationControl\n count={data.length}\n pagination={state.pagination}\n pageSizeOptions={pageSizeOptions}\n onChange={handlers.onPaginationChange}\n />\n ) : null}\n\n <ConfirmDialog\n open={Boolean(confirmRequest)}\n confirm={confirmRequest?.action.confirm}\n onCancel={handleCloseConfirm}\n onConfirm={handleConfirm}\n />\n\n <FormActionDialog\n open={Boolean(activeFormAction)}\n action={activeFormAction?.action ?? null}\n context={activeFormAction?.context ?? null}\n onClose={() => setActiveFormAction(null)}\n />\n </Paper>\n </TableStyledWrapper>\n );\n}\n\nexport const Table = React.memo(TableInner) as typeof TableInner;\n","import type { Table as TanstackTable, ExpandedState } from '@tanstack/react-table';\n\n/**\n * Toggle the expanded state for a single row while preserving other expanded rows.\n *\n * This mirrors the custom logic previously embedded directly in the cell renderer.\n * The goal is to collapse a single row when multiple rows are expanded, and to\n * remove the row from the map when only it was expanded. When `expanded === true`\n * (all rows) we collapse just the target row by building a new map that leaves\n * all others open.\n */\nexport function toggleRowExpanded<TData extends object>(\n table: TanstackTable<TData>,\n rowId: string,\n) {\n table.setExpanded((old) => {\n // `old` has the public `ExpandedState` type (boolean | Record<string, boolean>).\n const state: ExpandedState = old as ExpandedState;\n const exists = state === true\n ? true\n : !!(state && (state as Record<string, boolean>)[rowId]);\n\n if (exists) {\n if (state === true) {\n // collapse just this row while keeping others expanded\n const ret: Record<string, boolean> = {};\n Object.keys(table.getRowModel().rowsById).forEach((id) => {\n if (id !== rowId) {\n ret[id] = true;\n }\n });\n return ret;\n }\n // remove this row id from the map\n const ret: Record<string, boolean> = {};\n if (state && typeof state === 'object') {\n for (const k in state) {\n if (k !== rowId) {\n ret[k] = state[k];\n }\n }\n }\n return ret;\n }\n\n // expand the row\n if (state === true) {\n return state;\n }\n return { ...(state || {}), [rowId]: true };\n });\n}\n","import React from 'react';\nimport { Box } from '@/ele/Box';\nimport { Checkbox } from '@/ele/Checkbox';\nimport { IconButton } from '@/ele/Button';\nimport { KeyboardArrowDownIcon, KeyboardArrowRightIcon } from '@/icons/MuiIcon';\nimport type { Row, Table as TanstackTable } from '@tanstack/react-table';\nimport { toggleRowExpanded } from '../../utils/expanded';\n\nexport type RowControlsCellProps<TData extends object> = {\n row: Row<TData>;\n table: TanstackTable<TData>;\n isExpandable: boolean;\n enableRowSelection: boolean;\n renderExpandedRow?: (row: TData, idx: number, table: TanstackTable<TData>) => React.ReactNode;\n};\n\nexport function RowControlsCell<TData extends object>({\n row,\n table,\n isExpandable,\n enableRowSelection,\n renderExpandedRow,\n}: RowControlsCellProps<TData>) {\n const isGroupedRow = row.getIsGrouped();\n const isRowChecked = isGroupedRow ? row.getIsAllSubRowsSelected() : row.getIsSelected();\n const isRowIndeterminate = isGroupedRow\n ? row.getIsSomeSelected() && !row.getIsAllSubRowsSelected()\n : row.getIsSomeSelected();\n const canToggleSelection = isGroupedRow ? row.getLeafRows().length > 0 : row.getCanSelect();\n const hasGroupChildren = !!(row.subRows && row.subRows.length > 0);\n const canShowRowDetailExpand = !!renderExpandedRow && !hasGroupChildren;\n const canExpand = row.getCanExpand();\n const shouldShowExpandControl = canExpand && (hasGroupChildren || canShowRowDetailExpand);\n\n const handleRowSelectionChange = () => {\n if (isGroupedRow) {\n const shouldSelectAllLeaves = !row.getIsAllSubRowsSelected();\n\n table.setRowSelection((previous) => {\n const next = { ...previous };\n\n row.getLeafRows().forEach((leafRow) => {\n if (shouldSelectAllLeaves) {\n next[leafRow.id] = true;\n } else {\n delete next[leafRow.id];\n }\n });\n\n return next;\n });\n return;\n }\n\n row.toggleSelected();\n };\n\n return (\n <Box sx={{ display: 'flex', justifyContent: 'center', alignItems: 'center', width: '100%', gap: 1 }}>\n {isExpandable ? (\n shouldShowExpandControl ? (\n <IconButton\n size=\"small\"\n className={isGroupedRow ? 'parent-expand-button' : 'child-expand-button'}\n onClick={(e) => {\n e.stopPropagation();\n toggleRowExpanded(table, row.id);\n }}\n sx={{\n p: 0.5,\n color: 'text.secondary',\n }}\n >\n {row.getIsExpanded() ? <KeyboardArrowDownIcon sx={{ fontSize: '12px' }} /> : <KeyboardArrowRightIcon sx={{ fontSize: '12px' }} />}\n </IconButton>\n ) : (\n enableRowSelection ? <Box sx={{ width: 28 }} /> : null\n )\n ) : null}\n\n {enableRowSelection ? (\n <Checkbox\n size=\"small\"\n checked={isRowChecked}\n indeterminate={isRowIndeterminate}\n disabled={!canToggleSelection}\n onChange={handleRowSelectionChange}\n sx={{ p: 0.5 }}\n />\n ) : null}\n </Box>\n );\n}\n","import type React from 'react';\nimport type { ButtonProps } from '@mui/material/Button';\nimport type {\n ColumnDef,\n ColumnFiltersState,\n ColumnPinningState,\n ColumnSizingState,\n ExpandedState,\n GroupingState,\n PaginationState,\n RowSelectionState,\n SortingState,\n Table as TanstackTable,\n Updater,\n Row,\n} from '@tanstack/react-table';\nimport type { FieldValues } from 'react-hook-form';\nimport type { FormTypeMap, StrictFormConfig, UseFormProps } from '@/compound/UseForm';\n\n/** Internal column IDs for system-generated columns. */\nexport const COL_ID_CONTROLS = '__controls__' as const;\nexport const COL_ID_ACTIONS = '__actions__' as const;\n\nexport type TableColumnDef<TData extends object> = ColumnDef<TData, unknown>;\n\nexport type TableActionContext<TData extends object> = {\n row?: TData;\n rowIndex?: number;\n table: TanstackTable<TData>;\n};\n\nexport type TableActionBoolean<TData extends object> =\n | boolean\n | ((context: TableActionContext<TData>) => boolean);\n\nexport type TableActionIntent = ButtonProps['color'];\n\nexport type TableActionConfirm = {\n title?: string;\n description?: string;\n confirmLabel?: string;\n cancelLabel?: string;\n requireCheckLabel?: string;\n};\n\nexport type TableFormActionConfig<TData extends object, TFormMap extends FormTypeMap = FormTypeMap> = {\n title: React.ReactNode;\n description?: React.ReactNode;\n config: StrictFormConfig<TFormMap> | ((context: TableActionContext<TData>) => StrictFormConfig<TFormMap>);\n getDefaultValues?: (context: TableActionContext<TData>) => Record<string, unknown>;\n onSubmit: (payload: {\n values: FieldValues;\n /** Fields the user actually interacted with in the form (from react-hook-form `formState.dirtyFields`) */\n dirtyFields: Record<string, boolean>;\n context: TableActionContext<TData>;\n close: () => void;\n }) => void | Promise<void>;\n onCancel?: (context: TableActionContext<TData>) => void;\n showUndo?: UseFormProps<TFormMap>['showUndo'];\n showClear?: UseFormProps<TFormMap>['showClear'];\n extraButtons?: UseFormProps<TFormMap>['extraButtons'];\n};\n\nexport type TableActionBase<TData extends object> = {\n id: string;\n /** human-readable label (used for tooltip when iconOnly=true) */\n label: React.ReactNode;\n icon?: React.ReactNode;\n /** when true the action renders as an icon button instead of a regular button */\n iconOnly?: boolean;\n intent?: TableActionIntent;\n variant?: ButtonProps['variant'];\n visibility?: TableActionBoolean<TData>;\n disabled?: TableActionBoolean<TData>;\n loading?: TableActionBoolean<TData>;\n confirm?: TableActionConfirm;\n};\n\nexport type TableButtonAction<TData extends object> = TableActionBase<TData> & {\n kind?: 'button';\n onClick: (context: TableActionContext<TData>) => void | Promise<void>;\n};\n\nexport type TableFormAction<TData extends object, TFormMap extends FormTypeMap = FormTypeMap> = TableActionBase<TData> & {\n kind: 'form';\n form: TableFormActionConfig<TData, TFormMap>;\n};\n\nexport type TableAction<TData extends object, TFormMap extends FormTypeMap = FormTypeMap> =\n | TableButtonAction<TData>\n | TableFormAction<TData, TFormMap>;\n\nexport type TableProps<TData extends object, TFormMap extends FormTypeMap = FormTypeMap> = {\n columns: TableColumnDef<TData>[];\n data: TData[];\n loading?: boolean;\n emptyMessage?: React.ReactNode;\n emptyDescription?: React.ReactNode;\n dense?: boolean;\n getRowId?: (row: TData, index: number, parent?: { id: string; index: number }) => string;\n rowActions?: TableAction<TData, TFormMap>[];\n tableActions?: TableAction<TData, TFormMap>[];\n actionColumnHeader?: React.ReactNode;\n sorting?: SortingState;\n defaultSorting?: SortingState;\n onSortingChange?: (sorting: SortingState) => void;\n globalFilter?: string;\n defaultGlobalFilter?: string;\n onGlobalFilterChange?: (globalFilter: string) => void;\n enableFiltering?: boolean;\n filterPlaceholder?: string;\n columnFilters?: ColumnFiltersState;\n defaultColumnFilters?: ColumnFiltersState;\n onColumnFiltersChange?: (columnFilters: ColumnFiltersState) => void;\n enableColumnFilters?: boolean;\n columnFilterPlaceholder?: string;\n grouping?: GroupingState;\n defaultGrouping?: GroupingState;\n onGroupingChange?: (grouping: GroupingState) => void;\n enableGrouping?: boolean;\n pagination?: PaginationState;\n defaultPagination?: PaginationState;\n onPaginationChange?: (pagination: PaginationState) => void;\n columnPinning?: ColumnPinningState;\n defaultColumnPinning?: ColumnPinningState;\n onColumnPinningChange?: (columnPinning: ColumnPinningState) => void;\n enableColumnPinning?: boolean;\n columnSizing?: ColumnSizingState;\n defaultColumnSizing?: ColumnSizingState;\n onColumnSizingChange?: (columnSizing: ColumnSizingState) => void;\n enableColumnResizing?: boolean;\n columnResizeMode?: 'onChange' | 'onEnd';\n rowSelection?: RowSelectionState;\n defaultRowSelection?: RowSelectionState;\n onRowSelectionChange?: (rowSelection: RowSelectionState) => void;\n enableRowSelection?: boolean;\n enablePagination?: boolean;\n pageSizeOptions?: number[];\n stickyHeader?: boolean;\n bodyMaxHeight?: number | string;\n\n // Expanding\n enableExpanding?: boolean;\n expanded?: ExpandedState;\n defaultExpanded?: ExpandedState;\n onExpandedChange?: (expanded: ExpandedState) => void;\n getRowCanExpand?: (row: Row<TData>) => boolean;\n renderExpandedRow?: (row: TData, index: number, table: TanstackTable<TData>) => React.ReactNode;\n};\n\nexport type SortingUpdater = Updater<SortingState>;\nexport type GlobalFilterUpdater = Updater<string>;\nexport type ColumnFiltersUpdater = Updater<ColumnFiltersState>;\nexport type GroupingUpdater = Updater<GroupingState>;\nexport type PaginationUpdater = Updater<PaginationState>;\nexport type ColumnPinningUpdater = Updater<ColumnPinningState>;\nexport type ColumnSizingUpdater = Updater<ColumnSizingState>;\nexport type RowSelectionUpdater = Updater<RowSelectionState>;\nexport type ExpandedUpdater = Updater<ExpandedState>;\n","export { default as Table } from '@mui/material/Table';\nexport { default as TableBody } from '@mui/material/TableBody';\nexport { default as TableCell } from '@mui/material/TableCell';\nexport { default as TableContainer } from '@mui/material/TableContainer';\nexport { default as TableHead } from '@mui/material/TableHead';\nexport { default as TablePagination } from '@mui/material/TablePagination';\nexport { default as TableRow } from '@mui/material/TableRow';\nexport { default as TableSortLabel } from '@mui/material/TableSortLabel';\n","import { TablePagination } from '@/ele/Table';\nimport type { PaginationState } from '@tanstack/react-table';\n\ntype PaginationControlProps = {\n count: number;\n pagination: PaginationState;\n pageSizeOptions: number[];\n onChange: (pagination: PaginationState) => void;\n};\n\nexport function PaginationControl({\n count,\n pagination,\n pageSizeOptions,\n onChange,\n}: PaginationControlProps) {\n return (\n <TablePagination\n component='div'\n count={count}\n page={pagination.pageIndex}\n rowsPerPage={pagination.pageSize}\n rowsPerPageOptions={pageSizeOptions}\n onPageChange={(_, page) => {\n onChange({\n ...pagination,\n pageIndex: page,\n });\n }}\n onRowsPerPageChange={(event) => {\n const pageSize = Number(event.target.value);\n onChange({\n pageIndex: 0,\n pageSize,\n });\n }}\n />\n );\n}\n","import React from 'react';\nimport { useFormState } from 'react-hook-form';\nimport { Box } from '@/ele/Box';\nimport { Typography } from '@/ele/Typography';\nimport type { FormTypeMap, StrictFormConfig } from '@/compound/UseForm';\nimport { FormModalRenderer, useConfiguredForm } from '@/compound/UseForm';\nimport type { TableActionContext, TableFormAction } from '../_types';\n\nconst resolveConfig = <TData extends object, TFormMap extends FormTypeMap>(\n action: TableFormAction<TData, TFormMap>,\n context: TableActionContext<TData>,\n): StrictFormConfig<TFormMap> => {\n const baseConfig = typeof action.form.config === 'function'\n ? action.form.config(context)\n : action.form.config;\n\n if (!action.form.getDefaultValues) {\n return baseConfig;\n }\n\n return {\n ...baseConfig,\n defaultValues: {\n ...(baseConfig.defaultValues ?? {}),\n ...action.form.getDefaultValues(context),\n } as StrictFormConfig<TFormMap>['defaultValues'],\n };\n};\n\ntype FormActionDialogProps<TData extends object, TFormMap extends FormTypeMap = FormTypeMap> = {\n open: boolean;\n action: TableFormAction<TData, TFormMap> | null;\n context: TableActionContext<TData> | null;\n onClose: () => void;\n};\n\ntype FormActionDialogFormProps<TData extends object, TFormMap extends FormTypeMap> = {\n action: TableFormAction<TData, TFormMap>;\n context: TableActionContext<TData>;\n onClose: () => void;\n};\n\nexport function FormActionDialog<TData extends object, TFormMap extends FormTypeMap = FormTypeMap>({\n open,\n action,\n context,\n onClose,\n}: FormActionDialogProps<TData, TFormMap>) {\n if (!open || !action || !context) {\n return null;\n }\n\n return (\n <FormActionDialogForm\n action={action}\n context={context}\n onClose={onClose}\n />\n );\n}\n\nfunction FormActionDialogForm<TData extends object, TFormMap extends FormTypeMap>({\n action,\n context,\n onClose,\n}: FormActionDialogFormProps<TData, TFormMap>) {\n const formConfig = resolveConfig(action, context);\n const { methods, config: resolvedConfig } = useConfiguredForm({ config: formConfig });\n // Subscribe to dirtyFields during render so RHF's proxy tracks it.\n // Reading dirtyFields only inside a callback would yield a stale empty object.\n const { dirtyFields } = useFormState({ control: methods.control });\n const openProps = React.useMemo<[\n boolean,\n React.Dispatch<React.SetStateAction<boolean>>,\n ]>(() => [\n true,\n (nextOpen) => {\n const resolvedOpen = typeof nextOpen === 'function' ? nextOpen(true) : nextOpen;\n if (!resolvedOpen) {\n onClose();\n }\n },\n ], [onClose]);\n\n const extraButtonsElement = (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n {typeof action.form.extraButtons === 'function'\n ? action.form.extraButtons(methods)\n : action.form.extraButtons}\n </Box>\n );\n\n return (\n <FormModalRenderer\n openProps={openProps}\n title={typeof action.form.title === 'string' ? action.form.title : 'Action Form'}\n methods={methods}\n config={resolvedConfig}\n extraButtons={extraButtonsElement}\n maxWidth='960px'\n slotProps={{\n modal: {\n size: { w: '100%', h: 'auto' },\n },\n }}\n onSubmit={(values) => {\n void action.form.onSubmit({\n values,\n dirtyFields: dirtyFields as Record<string, boolean>,\n context,\n close: onClose,\n });\n }}\n >\n {action.form.description ? (\n <Typography variant='body2' color='text.secondary' sx={{ mb: 2 }}>\n {action.form.description}\n </Typography>\n ) : null}\n </FormModalRenderer>\n );\n}\n","import React from 'react';\nimport { Checkbox } from '@/ele/Checkbox';\nimport { FormControlLabel } from '@/ele/Form';\nimport { Typography } from '@/ele/Typography';\nimport { FormModalRenderer, useConfiguredForm } from '@/compound/UseForm';\nimport type { TableActionConfirm } from '../_types';\n\ntype ConfirmDialogProps = {\n open: boolean;\n confirm?: TableActionConfirm;\n onCancel: () => void;\n onConfirm: () => void;\n};\n\nexport function ConfirmDialog({\n open,\n confirm,\n onCancel,\n onConfirm,\n}: ConfirmDialogProps) {\n const [checked, setChecked] = React.useState(false);\n const [error, setError] = React.useState(false);\n\n const config = React.useMemo(() => ({ schema: [] }), []);\n const { methods } = useConfiguredForm({ config });\n\nconst openProps = React.useMemo<[\n boolean,\n React.Dispatch<React.SetStateAction<boolean>>,\n ]>(() => [\n open,\n (nextOpen) => {\n const resolvedOpen = typeof nextOpen === 'function' ? nextOpen(open) : nextOpen;\n if (!resolvedOpen) {\n // clear internal state and notify parent that dialog closed\n setChecked(false);\n setError(false);\n onCancel();\n }\n },\n ], [open, onCancel]);\n\n const title = confirm?.title ?? 'Confirm action';\n const description = confirm?.description ?? 'Are you sure you want to continue?';\n\n return (\n <FormModalRenderer\n openProps={openProps}\n title={title}\n methods={methods}\n config={config}\n maxWidth='420px'\n showUndo={false}\n showClear={false}\n onSubmit={() => {\n if (confirm?.requireCheckLabel && !checked) {\n setError(true);\n return;\n }\n onConfirm();\n }}\n >\n <Typography variant='body2' color='text.secondary' sx={{ mb: 1 }}>\n {description}\n </Typography>\n {confirm?.requireCheckLabel ? (\n <>\n <FormControlLabel\n sx={{ mt: 1 }}\n control={(\n <Checkbox\n size='small'\n checked={checked}\n onChange={(event) => {\n const isChecked = event.target.checked;\n setChecked(isChecked);\n if (isChecked) {\n setError(false);\n }\n }}\n />\n )}\n label={confirm.requireCheckLabel}\n />\n {error ? (\n <Typography variant='caption' color='error' sx={{ display: 'block' }}>\n Please check the confirmation box to continue.\n </Typography>\n ) : null}\n </>\n ) : null}\n </FormModalRenderer>\n );\n}\n","const COLUMN_SIZE_VAR_PREFIX = '--table-col-size-';\n\nconst sanitizeColumnId = (columnId: string): string => columnId.replace(/[^a-zA-Z0-9_-]/g, '_');\n\nexport const getColumnSizeVarName = (columnId: string): string => `${COLUMN_SIZE_VAR_PREFIX}${sanitizeColumnId(columnId)}`;\n","import type { MuiComponentTheme } from '@/_utils/_types';\nimport { styled } from '@mui/material';\nimport { Box } from '@/ele/Box';\n\nexport const TableStyledWrapper = styled(Box)({\n '--table-bg': 'var(--mui-palette-background-paper)',\n '--table-divider-color': 'var(--mui-palette-divider)',\n '--table-pinned-shadow-left': `1px 0 0 var(--mui-palette-divider)`,\n '--table-pinned-shadow-right': `-1px 0 0 var(--mui-palette-divider)`,\n '--table-pinned-header-z-index': 4,\n '--table-pinned-cell-z-index': 2,\n '--table-header-font-weight': 'var(--mui-typography-fontWeightBold)',\n '--table-sort-label-active-color': 'var(--mui-palette-text-primary)',\n '--table-sort-label-icon-color': 'var(--mui-palette-error-light)',\n '--table-dragger-bar-hover-color': 'var(--mui-palette-focus-1)',\n '--table-drragger-bar-hover-width': '4px',\n '--table-empty-min-height': '200px',\n '--table-empty-icon-color': 'var(--mui-palette-text-disabled)',\n '--table-empty-text-color': 'var(--mui-palette-text-secondary)',\n '--table-empty-description-color': 'var(--mui-palette-text-disabled)',\n});\n\nexport const tableTheme = {\n styleOverrides: {\n root: {\n borderCollapse: 'separate',\n borderSpacing: 0,\n tableLayout: 'fixed',\n backgroundColor: 'var(--table-bg, var(--mui-palette-background-paper))',\n },\n },\n} as const satisfies MuiComponentTheme<'MuiTable'>;\n\nexport const tableContainerTheme = {\n styleOverrides: {\n root: {\n width: '100%',\n overflowX: 'auto',\n containerType: 'inline-size',\n containerName: 'sdui-table',\n },\n },\n} as const satisfies MuiComponentTheme<'MuiTableContainer'>;\n\nexport const tableHeadTheme = {\n styleOverrides: {\n root: {\n backgroundColor: 'var(--table-bg, var(--mui-palette-background-paper))',\n },\n },\n} as const satisfies MuiComponentTheme<'MuiTableHead'>;\n\nexport const tableSortLabelTheme = {\n styleOverrides: {\n root: {\n '&.Mui-active': {\n color: 'var(--table-sort-label-active-color)',\n \"& .MuiTableSortLabel-icon\": {\n color: 'var(--table-sort-label-icon-color)',\n },\n },\n \"& .MuiTableSortLabel-icon\": {\n color: 'var(--table-sort-label-icon-color)',\n },\n },\n },\n} as const satisfies MuiComponentTheme<'MuiTableSortLabel'>;\n\nexport const tableCellTheme = {\n defaultProps: {\n size: 'small',\n },\n styleOverrides: {\n root: {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n verticalAlign: 'middle',\n borderBottomColor: 'var(--table-divider-color, var(--mui-palette-divider))',\n backgroundColor: 'transparent',\n },\n head: {\n fontWeight: 'var(--table-header-font-weight, 700)',\n backgroundColor: 'var(--table-bg, var(--mui-palette-background-paper))',\n '& [data-table-filter-trigger]': {\n transition: 'opacity 120ms ease',\n },\n '@media (hover: hover) and (pointer: fine)': {\n '& [data-table-filter-trigger]': {\n opacity: 0,\n },\n '&:hover [data-table-filter-trigger]': {\n opacity: 1,\n },\n '& [data-table-filter-trigger]:focus-visible': {\n opacity: 1,\n },\n '& [data-table-filter-trigger][data-active=\"true\"]': {\n opacity: 1,\n },\n },\n },\n },\n} as const satisfies MuiComponentTheme<'MuiTableCell'>;\n\nexport const tablePaginationTheme = {\n styleOverrides: {\n root: {\n borderTop: '1px solid var(--table-divider-color, var(--mui-palette-divider))',\n },\n actions: ({ theme }) => ({\n display: 'flex',\n gap: theme.spacing(1),\n marginRight: theme.spacing(0.5),\n }),\n },\n} as const satisfies MuiComponentTheme<'MuiTablePagination'>;\n\nexport const tableEmptyCellSx = {\n p: 0,\n width: '100%',\n borderBottom: 'none',\n whiteSpace: 'normal',\n overflow: 'visible',\n textAlign: 'center',\n verticalAlign: 'middle',\n} as const;\n\nexport const TablePlaceholderRoot = styled(Box)({\n position: 'sticky',\n left: 0,\n boxSizing: 'border-box',\n width: '100cqi',\n maxWidth: '100%',\n minHeight: 'var(--table-empty-min-height)',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 8,\n padding: '32px 24px',\n textAlign: 'center',\n whiteSpace: 'normal',\n});\n","import type { FilterFn } from '@tanstack/react-table';\n\nexport type ExcelColumnFilterValue = {\n query?: string;\n selectedValues?: string[];\n};\n\nexport const createExcelColumnFilterFn = <TRow extends object>(): FilterFn<TRow> => (\n row,\n columnId,\n filterValue,\n) => {\n const raw = row.getValue(columnId);\n const text = String(raw ?? '').toLowerCase();\n\n if (!filterValue || typeof filterValue !== 'object') {\n return true;\n }\n\n const typed = filterValue as ExcelColumnFilterValue;\n const query = (typed.query ?? '').toLowerCase().trim();\n const selectedValues = Array.isArray(typed.selectedValues) ? typed.selectedValues : [];\n\n if (query && !text.includes(query)) {\n return false;\n }\n\n if (selectedValues.length > 0) {\n return selectedValues.map((value) => value.toLowerCase()).includes(text);\n }\n\n return true;\n};","import React from 'react';\nimport type {\n ColumnFiltersState,\n ColumnPinningState,\n ColumnSizingState,\n ExpandedState,\n GroupingState,\n PaginationState,\n RowSelectionState,\n SortingState,\n} from '@tanstack/react-table';\nimport type { FormTypeMap } from '@/compound/UseForm';\nimport type {\n ColumnFiltersUpdater,\n ColumnPinningUpdater,\n ColumnSizingUpdater,\n ExpandedUpdater,\n GlobalFilterUpdater,\n GroupingUpdater,\n PaginationUpdater,\n RowSelectionUpdater,\n SortingUpdater,\n TableProps,\n} from '../_types';\n\nexport const DEFAULT_PAGINATION: PaginationState = {\n pageIndex: 0,\n pageSize: 10,\n};\n\nexport const DEFAULT_COLUMN_PINNING: ColumnPinningState = {\n left: [],\n right: [],\n};\n\nexport const DEFAULT_COLUMN_FILTERS: ColumnFiltersState = [];\nexport const DEFAULT_COLUMN_SIZING: ColumnSizingState = {};\nexport const DEFAULT_GROUPING: GroupingState = [];\nexport const DEFAULT_ROW_SELECTION: RowSelectionState = {};\nexport const DEFAULT_EXPANDED: ExpandedState = {};\nexport const DEFAULT_PAGE_SIZE_OPTIONS = [5, 10, 25, 50];\n\nconst resolveUpdater = <TValue,>(updater: TValue | ((previous: TValue) => TValue), previous: TValue): TValue => {\n if (typeof updater === 'function') {\n return (updater as (previous: TValue) => TValue)(previous);\n }\n return updater;\n};\n\nexport function useTableState<TData extends object, TFormMap extends FormTypeMap = FormTypeMap>(\n props: TableProps<TData, TFormMap>\n) {\n const {\n sorting,\n defaultSorting = [],\n onSortingChange,\n globalFilter,\n defaultGlobalFilter = '',\n onGlobalFilterChange,\n columnFilters,\n defaultColumnFilters = DEFAULT_COLUMN_FILTERS,\n onColumnFiltersChange,\n grouping,\n defaultGrouping = DEFAULT_GROUPING,\n onGroupingChange,\n pagination,\n defaultPagination = DEFAULT_PAGINATION,\n onPaginationChange,\n columnPinning,\n defaultColumnPinning = DEFAULT_COLUMN_PINNING,\n onColumnPinningChange,\n columnSizing,\n defaultColumnSizing = DEFAULT_COLUMN_SIZING,\n onColumnSizingChange,\n rowSelection,\n defaultRowSelection = DEFAULT_ROW_SELECTION,\n onRowSelectionChange,\n expanded,\n defaultExpanded = DEFAULT_EXPANDED,\n onExpandedChange,\n } = props;\n\n const [internalSorting, setInternalSorting] = React.useState<SortingState>(defaultSorting);\n const [internalGlobalFilter, setInternalGlobalFilter] = React.useState<string>(defaultGlobalFilter);\n const [internalColumnFilters, setInternalColumnFilters] = React.useState<ColumnFiltersState>(defaultColumnFilters);\n const [internalGrouping, setInternalGrouping] = React.useState<GroupingState>(defaultGrouping);\n const [internalPagination, setInternalPagination] = React.useState<PaginationState>(defaultPagination);\n const [internalColumnPinning, setInternalColumnPinning] = React.useState<ColumnPinningState>(defaultColumnPinning);\n const [internalColumnSizing, setInternalColumnSizing] = React.useState<ColumnSizingState>(defaultColumnSizing);\n const [internalRowSelection, setInternalRowSelection] = React.useState<RowSelectionState>(defaultRowSelection);\n const [internalExpanded, setInternalExpanded] = React.useState<ExpandedState>(defaultExpanded);\n\n const resolvedSorting = sorting ?? internalSorting;\n const resolvedGlobalFilter = globalFilter ?? internalGlobalFilter;\n const resolvedColumnFilters = columnFilters ?? internalColumnFilters;\n const resolvedGrouping = grouping ?? internalGrouping;\n const resolvedPagination = pagination ?? internalPagination;\n const resolvedColumnPinning = columnPinning ?? internalColumnPinning;\n const resolvedColumnSizing = columnSizing ?? internalColumnSizing;\n const resolvedRowSelection = rowSelection ?? internalRowSelection;\n const resolvedExpanded = expanded ?? internalExpanded;\n const deferredGlobalFilter = React.useDeferredValue(resolvedGlobalFilter);\n\n const handleSortingChange = React.useCallback((updater: SortingUpdater) => {\n if (sorting === undefined) {\n setInternalSorting((previous) => {\n const next = resolveUpdater(updater, previous);\n onSortingChange?.(next);\n return next;\n });\n return;\n }\n const next = resolveUpdater(updater, resolvedSorting);\n onSortingChange?.(next);\n }, [onSortingChange, resolvedSorting, sorting]);\n\n const handlePaginationChange = React.useCallback((updater: PaginationUpdater) => {\n if (pagination === undefined) {\n setInternalPagination((previous) => {\n const next = resolveUpdater(updater, previous);\n onPaginationChange?.(next);\n return next;\n });\n return;\n }\n const next = resolveUpdater(updater, resolvedPagination);\n onPaginationChange?.(next);\n }, [onPaginationChange, pagination, resolvedPagination]);\n\n const handleGroupingChange = React.useCallback((updater: GroupingUpdater) => {\n if (grouping === undefined) {\n setInternalGrouping((previous) => {\n const next = resolveUpdater(updater, previous);\n onGroupingChange?.(next);\n return next;\n });\n return;\n }\n const next = resolveUpdater(updater, resolvedGrouping);\n onGroupingChange?.(next);\n }, [grouping, onGroupingChange, resolvedGrouping]);\n\n const handleGlobalFilterChange = React.useCallback((updater: GlobalFilterUpdater) => {\n if (globalFilter === undefined) {\n setInternalGlobalFilter((previous) => {\n const next = resolveUpdater(updater, previous);\n onGlobalFilterChange?.(next);\n return next;\n });\n return;\n }\n const next = resolveUpdater(updater, resolvedGlobalFilter);\n onGlobalFilterChange?.(next);\n }, [globalFilter, onGlobalFilterChange, resolvedGlobalFilter]);\n\n const handleColumnFiltersChange = React.useCallback((updater: ColumnFiltersUpdater) => {\n if (columnFilters === undefined) {\n setInternalColumnFilters((previous) => {\n const next = resolveUpdater(updater, previous);\n onColumnFiltersChange?.(next);\n return next;\n });\n return;\n }\n const next = resolveUpdater(updater, resolvedColumnFilters);\n onColumnFiltersChange?.(next);\n }, [columnFilters, onColumnFiltersChange, resolvedColumnFilters]);\n\n const handleColumnPinningChange = React.useCallback((updater: ColumnPinningUpdater) => {\n if (columnPinning === undefined) {\n setInternalColumnPinning((previous) => {\n const next = resolveUpdater(updater, previous);\n onColumnPinningChange?.(next);\n return next;\n });\n return;\n }\n const next = resolveUpdater(updater, resolvedColumnPinning);\n onColumnPinningChange?.(next);\n }, [columnPinning, onColumnPinningChange, resolvedColumnPinning]);\n\n const handleRowSelectionChange = React.useCallback((updater: RowSelectionUpdater) => {\n if (rowSelection === undefined) {\n setInternalRowSelection((previous) => {\n const next = resolveUpdater(updater, previous);\n onRowSelectionChange?.(next);\n return next;\n });\n return;\n }\n const next = resolveUpdater(updater, resolvedRowSelection);\n onRowSelectionChange?.(next);\n }, [onRowSelectionChange, resolvedRowSelection, rowSelection]);\n\n const handleColumnSizingChange = React.useCallback((updater: ColumnSizingUpdater) => {\n if (columnSizing === undefined) {\n setInternalColumnSizing((previous) => {\n const next = resolveUpdater(updater, previous);\n onColumnSizingChange?.(next);\n return next;\n });\n return;\n }\n const next = resolveUpdater(updater, resolvedColumnSizing);\n onColumnSizingChange?.(next);\n }, [columnSizing, onColumnSizingChange, resolvedColumnSizing]);\n\n const handleExpandedChange = React.useCallback((updater: ExpandedUpdater) => {\n if (expanded === undefined) {\n setInternalExpanded((previous) => {\n const next = resolveUpdater(updater, previous);\n onExpandedChange?.(next);\n return next;\n });\n return;\n }\n const next = resolveUpdater(updater, resolvedExpanded);\n onExpandedChange?.(next);\n }, [expanded, onExpandedChange, resolvedExpanded]);\n\n return {\n state: {\n sorting: resolvedSorting,\n globalFilter: resolvedGlobalFilter,\n columnFilters: resolvedColumnFilters,\n grouping: resolvedGrouping,\n rowSelection: resolvedRowSelection,\n expanded: resolvedExpanded,\n pagination: resolvedPagination,\n columnPinning: resolvedColumnPinning,\n columnSizing: resolvedColumnSizing,\n },\n deferredGlobalFilter,\n handlers: {\n onSortingChange: handleSortingChange,\n onGlobalFilterChange: handleGlobalFilterChange,\n onColumnFiltersChange: handleColumnFiltersChange,\n onGroupingChange: handleGroupingChange,\n onRowSelectionChange: handleRowSelectionChange,\n onExpandedChange: handleExpandedChange,\n onPaginationChange: handlePaginationChange,\n onColumnPinningChange: handleColumnPinningChange,\n onColumnSizingChange: handleColumnSizingChange,\n },\n };\n}","import React from 'react';\nimport { Box } from '@/ele/Box';\nimport { Button, IconButton } from '@/ele/Button';\nimport { CircularProgress } from '@/ele/Progress';\nimport { Tooltip } from '@/ele/Tooltip';\nimport type { FormTypeMap } from '@/compound/UseForm';\nimport type { TableAction, TableActionContext, TableButtonAction } from '../../_types';\n\n// helper used by both table and toolbar/action buttons\nconst resolveBoolean = <TData extends object>(\n value: boolean | ((context: TableActionContext<TData>) => boolean) | undefined,\n context: TableActionContext<TData>,\n): boolean => {\n if (typeof value === 'function') {\n return value(context);\n }\n return Boolean(value);\n};\n\nexport type ConfirmRequest<TData extends object> = {\n action: TableButtonAction<TData>;\n context: TableActionContext<TData>;\n key: string;\n proceed: () => Promise<void>;\n};\n\nexport type ActionButtonsProps<TData extends object, TFormMap extends FormTypeMap = FormTypeMap> = {\n actions: TableAction<TData, TFormMap>[];\n context: TableActionContext<TData>;\n onOpenFormAction: (action: Extract<TableAction<TData, TFormMap>, { kind: 'form' }>, context: TableActionContext<TData>) => void;\n /** invoked when a button action requests confirmation; the callback receives a `proceed` helper that must be called to execute the action */\n onRequestConfirm?: (req: ConfirmRequest<TData>) => void;\n};\n\nexport function ActionButtons<TData extends object, TFormMap extends FormTypeMap = FormTypeMap>({\n actions,\n context,\n onOpenFormAction,\n onRequestConfirm,\n}: ActionButtonsProps<TData, TFormMap>) {\n // local loading state for each action button\n const [loadingMap, setLoadingMap] = React.useState<Record<string, boolean>>({});\n\n const runAction = React.useCallback(async (action: TableButtonAction<TData>, key: string) => {\n try {\n setLoadingMap((previous) => ({ ...previous, [key]: true }));\n await action.onClick(context);\n } finally {\n setLoadingMap((previous) => ({ ...previous, [key]: false }));\n }\n }, [context]);\n\n\n // runAction is already defined above (moved up) - no duplicate needed\n\n const visibleActions = actions.filter((action) => !resolveBoolean(action.visibility, context));\n\n if (visibleActions.length === 0) {\n return null;\n }\n\n return (\n <>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, flexWrap: 'wrap' }}>\n {visibleActions.map((action) => {\n const key = `${action.id}-${context.rowIndex ?? 'table'}`;\n const actionLoading = loadingMap[key] || resolveBoolean(action.loading, context);\n const actionDisabled = actionLoading || resolveBoolean(action.disabled, context);\n\n const handleClick = () => {\n if (action.kind === 'form') {\n onOpenFormAction(action, context);\n return;\n }\n if (action.confirm) {\n onRequestConfirm?.({\n action,\n context,\n key,\n proceed: () => runAction(action, key),\n });\n return;\n }\n void runAction(action, key);\n };\n\n // choose between regular button or icon button\n if (action.iconOnly && action.icon) {\n const content = (\n <IconButton\n key={key}\n color={action.intent ?? 'primary'}\n size='small'\n disabled={actionDisabled}\n onClick={handleClick}\n >\n {actionLoading ? <CircularProgress size={14} color='inherit' /> : action.icon}\n </IconButton>\n );\n\n return action.label ? (\n <Tooltip key={key} title={action.label as string}>\n {content}\n </Tooltip>\n ) : content;\n }\n\n return (\n <Button\n key={key}\n variant={action.variant ?? 'outlined'}\n color={action.intent ?? 'primary'}\n size='small'\n disabled={actionDisabled}\n startIcon={actionLoading ? <CircularProgress size={14} color='inherit' /> : action.icon}\n onClick={handleClick}\n >\n {action.label}\n </Button>\n );\n })}\n </Box>\n\n {/* confirmation handled by parent; no local modal needed anymore */}\n </>\n );\n}\n","import React from 'react';\nimport { InputAdornment } from '@/ele/Form';\nimport { SearchRoundedIcon, CloseRoundedIcon } from '@/icons/MuiIcon';\nimport { TextField } from '@/ele/Input';\nimport { Tooltip } from '@/ele/Tooltip';\nimport { IconButton } from '@/ele/Button';\n\nconst GLOBAL_FILTER_DEBOUNCE_MS = 180;\n\ntype GlobalFilterControlProps = {\n value: string;\n onChange: (value: string) => void;\n placeholder: string;\n};\n\nfunction GlobalFilterControlComponent({ value, onChange, placeholder }: GlobalFilterControlProps) {\n const [draftValue, setDraftValue] = React.useState(value);\n\n React.useEffect(() => {\n setDraftValue(value);\n }, [value]);\n\n React.useEffect(() => {\n if (draftValue === value) {\n return;\n }\n\n const timeout = window.setTimeout(() => {\n onChange(draftValue);\n }, GLOBAL_FILTER_DEBOUNCE_MS);\n\n return () => {\n window.clearTimeout(timeout);\n };\n }, [draftValue, onChange, value]);\n\n return (\n <TextField\n size='small'\n value={draftValue}\n placeholder={placeholder}\n onChange={(event) => setDraftValue(event.target.value)}\n variant='outlined'\n slotProps={{\n input: {\n startAdornment: (\n <InputAdornment position='start'>\n <SearchRoundedIcon fontSize='small' color='action' />\n </InputAdornment>\n ),\n endAdornment: draftValue ? (\n <InputAdornment position='end'>\n <Tooltip title='Clear'>\n <IconButton\n size='small'\n aria-label='Clear filter'\n onClick={() => {\n setDraftValue('');\n onChange('');\n }}\n sx={{ borderColor: 'transparent', padding: 0 }}\n >\n <CloseRoundedIcon fontSize='small' />\n </IconButton>\n </Tooltip>\n </InputAdornment>\n ) : null,\n },\n }}\n sx={{\n width: 220,\n maxWidth: '100%',\n minWidth: { sm: 220 },\n '& .MuiOutlinedInput-root': {\n borderRadius: 1.5,\n backgroundColor: 'var(--table-bg)',\n transition: (theme) => theme.transitions.create(['box-shadow', 'border-color']),\n minHeight: 34,\n '&:hover': {\n boxShadow: 'var(--shadow-outset-1)',\n },\n '&.Mui-focused': {\n boxShadow: 'var(--shadow-outset-1)',\n },\n },\n '& .MuiOutlinedInput-input': {\n py: 0.5,\n fontSize: '0.85rem',\n },\n }}\n />\n );\n}\n\nexport const GlobalFilterControl = React.memo(GlobalFilterControlComponent);\n","import { Box, Stack } from '@/ele/Box';\nimport type { Table as TanstackTable } from '@tanstack/react-table';\nimport type { FormTypeMap } from '@/compound/UseForm';\nimport type { TableAction, TableActionContext, GlobalFilterUpdater } from '../_types';\nimport { ActionButtons, ConfirmRequest } from './actions/ActionButtons';\nimport { GlobalFilterControl } from './controls/GlobalFilterControl';\n\nexport type TableToolbarProps<TData extends object, TFormMap extends FormTypeMap = FormTypeMap> = {\n table: TanstackTable<TData>;\n tableActions: TableAction<TData, TFormMap>[];\n enableFiltering: boolean;\n globalFilter: string;\n filterPlaceholder: string;\n onGlobalFilterChange: (updater: GlobalFilterUpdater) => void;\n onOpenFormAction: (action: Extract<TableAction<TData, TFormMap>, { kind: 'form' }>, context: TableActionContext<TData>) => void;\n onRequestConfirm?: (req: ConfirmRequest<TData>) => void;\n};\n\nexport function TableToolbar<TData extends object, TFormMap extends FormTypeMap = FormTypeMap>({\n table,\n tableActions,\n enableFiltering,\n globalFilter,\n filterPlaceholder,\n onGlobalFilterChange,\n onOpenFormAction,\n onRequestConfirm,\n}: TableToolbarProps<TData, TFormMap>) {\n if (tableActions.length === 0 && !enableFiltering) {\n return null;\n }\n\n return (\n <Box sx={{ p: 1.25, borderBottom: '1px solid var(--table-divider-color)' }}>\n <Stack\n direction={{ xs: 'column', sm: 'row' }}\n spacing={1.25}\n alignItems={{ xs: 'stretch', sm: 'center' }}\n justifyContent='space-between'\n useFlexGap\n >\n {tableActions.length > 0 ? (\n <Box sx={{ minWidth: 0, flex: 1 }}>\n <ActionButtons\n actions={tableActions}\n context={{ table }}\n onOpenFormAction={onOpenFormAction}\n onRequestConfirm={onRequestConfirm}\n />\n </Box>\n ) : null}\n\n {enableFiltering ? (\n <Box sx={{ width: { xs: '100%', sm: 'auto' }, ml: { sm: 'auto' } }}>\n <GlobalFilterControl\n value={globalFilter}\n placeholder={filterPlaceholder}\n onChange={onGlobalFilterChange}\n />\n </Box>\n ) : null}\n </Stack>\n </Box>\n );\n}\n","import { TableHead, TableRow, TableCell, TableSortLabel } from '@/ele/Table';\nimport { Box } from '@/ele/Box';\nimport { flexRender, type HeaderGroup, type Table as TanstackTable, type Column } from '@tanstack/react-table';\nimport { ColumnFilterDropdown } from './controls/ColumnFilterDropdown/ColumnFilterDropdown';\nimport { getColumnSizeVarName } from './utils/columnSizing';\nimport { COL_ID_ACTIONS } from '../_types';\n\ntype HeaderProps<TData extends object> = {\n table: TanstackTable<TData>;\n enableColumnFilters?: boolean;\n columnFilterPlaceholder?: string;\n};\n\n/**\n * Vanilla JS Drag Engine for Table Column Resizing\n * \n * WHY THIS EXISTS:\n * Out of the box, TanStack Table relies on React State updates (e.g., `column.getIsResizing()`) \n * firing on every pixel movement to recalculate the widths. In a large data grid with hundreds \n * of rendered DOM cells (`<TableCell>`), routing every single pixel change through React's \n * VDOM reconciliation and Emotion's styling engine creates massive input lag and stuttering.\n * \n * HOW IT WORKS:\n * 1. React Render Tree Bypass: We step entirely out of React's lifecycle. We add native \n * `mousemove` listeners and modify the table width strictly using raw DOM manipulations \n * by mutating a CSS Variable (`--table-col-size-[id]`).\n * 2. Visual Repaint Throttling: While dragging, `onMove` can fire up to 1000 times a second \n * depending on mouse hardware. We wrap the DOM mutation in `requestAnimationFrame` \n * so the browser only calculates the styling update exactly once per display frame (usually 60fps).\n * 3. CSS Hover Disabling (`pointerEvents: 'none'`): Rapidly moving the cursor across the table \n * triggers `<TableRow hover>` styles. Calculating these hover paints concurrently with layout \n * reflows is very expensive. We globally disable pointer events on the table during the drag.\n */\nconst startNativeDrag = <TData extends object>(\n event: React.MouseEvent | React.TouchEvent,\n table: TanstackTable<TData>,\n column: Column<TData, unknown>,\n) => {\n event.preventDefault();\n event.stopPropagation();\n \n const target = event.currentTarget as HTMLElement;\n const startX = 'touches' in event ? event.touches[0].clientX : event.clientX;\n const startWidth = column.getSize();\n const minWidth = column.columnDef.minSize ?? 20;\n const maxWidth = column.columnDef.maxSize;\n const varName = getColumnSizeVarName(column.id);\n\n const tableContainer = target.closest('.MuiTableContainer-root') as HTMLElement | null;\n const tableEl = tableContainer?.querySelector('table') as HTMLElement | null;\n\n // OPTIMIZATION 1: Global State Freeze\n // Force the layout engine cursor to 'col-resize' so it doesn't flicker back to standard arrows\n // Stop text selection to prevent the browser's default highlight behaviors from fighting the drag\n const originalBodyCursor = document.body.style.cursor;\n const originalBodyUserSelect = document.body.style.userSelect;\n document.body.style.cursor = 'col-resize';\n document.body.style.userSelect = 'none';\n\n if (tableEl) {\n // OPTIMIZATION 2: Disable Mouse Interaction Triggers\n // Disables hover states (`:hover`) on all rows and cells beneath the mouse while dragging\n tableEl.style.pointerEvents = 'none';\n }\n\n if (tableContainer) {\n // Prevent the container's horizontal scrollbar from flickering layout dimensions \n // dynamically while the widths change frame-by-frame\n tableContainer.style.overflowX = 'hidden';\n }\n \n // Adds active styling directly to the resize handle bar without a React state boolean\n target.classList.add('is-resizing');\n\n let animationFrameId: number | null = null;\n let latestWidth = startWidth;\n\n const onMove = (e: MouseEvent | TouchEvent) => {\n e.preventDefault();\n const currentX = 'touches' in e ? e.touches[0].clientX : (e as MouseEvent).clientX;\n const deltaX = currentX - startX;\n \n let newWidth = startWidth + deltaX;\n if (newWidth < minWidth) newWidth = minWidth;\n if (maxWidth && newWidth > maxWidth) newWidth = maxWidth;\n\n latestWidth = newWidth;\n\n // OPTIMIZATION 3: Synchronize to Screen Refresh Rate\n // Rather than pushing DOM updates at the exact speed of the user's mouse hardware, \n // we throttle updates to the display's actual refresh cycle to stop \"smooth/lag\" micro-stutters.\n if (animationFrameId === null) {\n animationFrameId = requestAnimationFrame(() => {\n if (tableEl) {\n // Mutate the specific CSS variable tied directly to this column's style binding\n tableEl.style.setProperty(varName, `${latestWidth}px`);\n }\n animationFrameId = null;\n });\n }\n };\n\n const onEnd = () => {\n document.removeEventListener('mousemove', onMove);\n document.removeEventListener('mouseup', onEnd);\n document.removeEventListener('touchmove', onMove);\n document.removeEventListener('touchend', onEnd);\n\n if (animationFrameId !== null) {\n cancelAnimationFrame(animationFrameId);\n }\n\n // Restore table states to allow normal click/hover interactions again\n document.body.style.cursor = originalBodyCursor;\n document.body.style.userSelect = originalBodyUserSelect;\n if (tableEl) {\n tableEl.style.pointerEvents = '';\n }\n\n target.classList.remove('is-resizing');\n if (tableContainer) {\n tableContainer.style.overflowX = '';\n }\n\n // OPTIMIZATION 4: Single React Reconciliation\n // Only inform React/TanStack of the size change precisely when the interaction finishes,\n // firing exactly one render pass and saving the finalized state.\n table.setColumnSizing((old) => ({\n ...old,\n [column.id]: latestWidth,\n }));\n };\n\n document.addEventListener('mousemove', onMove, { passive: false });\n document.addEventListener('mouseup', onEnd);\n document.addEventListener('touchmove', onMove, { passive: false });\n document.addEventListener('touchend', onEnd);\n};\n\nfunction HeaderComponent<TData extends object>({\n table,\n enableColumnFilters = false,\n columnFilterPlaceholder = 'Filter...',\n}: HeaderProps<TData>) {\n return (\n <TableHead>\n {table.getHeaderGroups().map((headerGroup: HeaderGroup<TData>) => (\n <TableRow key={headerGroup.id}>\n {headerGroup.headers.map((header) => {\n const canSort = header.column.getCanSort();\n const sorted = header.column.getIsSorted();\n const canFilter = enableColumnFilters && header.column.getCanFilter() && header.column.id !== COL_ID_ACTIONS;\n const columnSizeVar = `var(${getColumnSizeVarName(header.column.id)})`;\n const pinned = header.column.getIsPinned();\n const pinnedStyles = pinned\n ? {\n position: 'sticky' as const,\n zIndex: 'var(--table-pinned-header-z-index)',\n backgroundColor: 'var(--table-bg)',\n backgroundImage: 'none',\n [pinned]: pinned === 'left'\n ? `${header.column.getStart('left')}px`\n : `${header.column.getAfter('right')}px`,\n boxShadow: pinned === 'left'\n ? 'var(--table-pinned-shadow-left)'\n : 'var(--table-pinned-shadow-right)',\n }\n : undefined;\n\n return (\n <TableCell\n key={header.id}\n sortDirection={sorted === false ? undefined : sorted}\n sx={{\n width: columnSizeVar,\n ...pinnedStyles,\n }}\n >\n {header.isPlaceholder ? null : (\n <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: 0.5, minHeight: 30 }}>\n <Box sx={{ minWidth: 0, pr: canFilter ? 0.5 : 0 }}>\n {canSort ? (\n <TableSortLabel\n active={sorted !== false}\n direction={sorted === false ? 'asc' : sorted}\n onClick={header.column.getToggleSortingHandler()}\n >\n {flexRender(header.column.columnDef.header, header.getContext())}\n </TableSortLabel>\n ) : (\n flexRender(header.column.columnDef.header, header.getContext())\n )}\n </Box>\n\n {canFilter ? (\n <ColumnFilterDropdown\n column={header.column}\n placeholder={columnFilterPlaceholder}\n />\n ) : null}\n </Box>\n )}\n\n {header.column.getCanResize() ? (\n <Box\n component='button'\n type='button'\n aria-label={`Resize ${header.column.id} column`}\n onDoubleClick={() => {\n header.column.resetSize();\n }}\n onMouseDown={(event) => startNativeDrag(event, table, header.column)}\n onTouchStart={(event) => startNativeDrag(event, table, header.column)}\n onClick={(event) => {\n event.preventDefault();\n event.stopPropagation();\n }}\n sx={{\n position: 'absolute',\n top: 0,\n right: -6,\n height: '100%',\n width: 12,\n minWidth: 12,\n border: 0,\n p: 0,\n m: 0,\n backgroundColor: 'transparent',\n cursor: 'col-resize',\n touchAction: 'none',\n userSelect: 'none',\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n top: 6,\n bottom: 6,\n left: '50%',\n width: 2,\n transform: 'translateX(-50%)',\n borderRadius: '999px',\n backgroundColor: 'var(--table-divider-color)',\n transition: 'background-color 120ms ease, width 120ms ease',\n },\n '&:hover::before': {\n backgroundColor: 'var(--table-dragger-bar-hover-color)',\n width: 'var(--table-drragger-bar-hover-width)',\n },\n '&.is-resizing::before': {\n backgroundColor: 'var(--table-dragger-bar-hover-color)',\n width: 'var(--table-drragger-bar-hover-width)',\n },\n }}\n />\n ) : null}\n </TableCell>\n );\n })}\n </TableRow>\n ))}\n </TableHead>\n );\n}\n\n// Intentionally not memoized:\n// the column filter dropdown reads live column filter state from TanStack.\n// Memoizing Header can freeze that state while the menu remains open.\nexport const Header = HeaderComponent;\n","import React from 'react';\nimport { Box } from '@/ele/Box';\nimport { Checkbox } from '@/ele/Checkbox';\nimport { Divider } from '@/ele/Divider';\nimport { TextField } from '@/ele/Input';\nimport { SortByAlphaRoundedIcon, FilterAltOutlinedIcon, ClearRoundedIcon, SearchRoundedIcon } from '@/icons/MuiIcon';\nimport { IconButton } from '@/ele/Button';\nimport { MenuPopper } from '@/ele/Menu/src/useMenu';\nimport { useColumnFilterDropdown } from './useColumnFilterDropdown';\nimport type { ColumnFilterDropdownProps } from './types';\n\nexport function ColumnFilterDropdown<TData extends object>({\n column,\n placeholder,\n}: ColumnFilterDropdownProps<TData>) {\n const sortedState = column.getIsSorted();\n const {\n openMenuProps,\n queryDraft,\n uniqueValues,\n selectedValuesSet,\n allChecked,\n someChecked,\n openMenu,\n closeMenu,\n applyQuery,\n clearFilters,\n toggleValue,\n toggleAllValues,\n } = useColumnFilterDropdown(column);\n\n const selectedSortOptionIds = React.useMemo(() => {\n if (sortedState === 'asc') {\n return ['__sort_asc__'];\n }\n\n if (sortedState === 'desc') {\n return ['__sort_desc__'];\n }\n\n return [];\n }, [sortedState]);\n\n const optionHeader = React.useMemo(\n () => (\n <Box>\n <Box sx={{ px: 1.25, pb: 1, pt: 1 }}>\n <TextField\n size='small'\n fullWidth\n placeholder={placeholder}\n value={queryDraft}\n onChange={(event) => applyQuery(event.target.value)}\n onKeyDown={(event) => {\n event.stopPropagation();\n }}\n slotProps={{\n input: {\n startAdornment: <SearchRoundedIcon fontSize='small' color='action' />,\n },\n }}\n />\n </Box>\n <Divider sx={{ my: 0.5 }} />\n </Box>\n ),\n [applyQuery, placeholder, queryDraft],\n );\n\n const menuOptions = React.useMemo(() => [\n {\n id: '__sort_asc__',\n icon: <SortByAlphaRoundedIcon fontSize='small' />,\n label: 'Sort A to Z',\n onClick: () => {\n if (!column.getCanSort()) {\n return;\n }\n column.toggleSorting(false);\n closeMenu();\n },\n },\n {\n id: '__sort_desc__',\n icon: <SortByAlphaRoundedIcon fontSize='small' sx={{ transform: 'scaleY(-1)' }} />,\n label: 'Sort Z to A',\n onClick: () => {\n if (!column.getCanSort()) {\n return;\n }\n column.toggleSorting(true);\n closeMenu();\n },\n },\n {\n id: '__clear__',\n icon: <ClearRoundedIcon fontSize='small' />,\n label: 'Clear Filter',\n onClick: () => {\n if (!column.getIsFiltered()) {\n return;\n }\n clearFilters();\n },\n },\n {\n id: '__select_all__',\n icon: (\n <Checkbox\n size='small'\n disableRipple\n sx={{ p: 0, pointerEvents: 'none', }}\n checked={allChecked}\n indeterminate={!allChecked && someChecked}\n />\n ),\n label: '(Select All)',\n onClick: toggleAllValues,\n },\n ...uniqueValues.map((value) => {\n const isSelected = selectedValuesSet.has(value);\n\n return {\n id: value,\n icon: (\n <Checkbox\n size='small'\n disableRipple\n sx={{ p: 0, pointerEvents: 'none', }}\n checked={isSelected}\n />\n ),\n label: value,\n onClick: () => toggleValue(value),\n };\n }),\n ], [\n allChecked,\n clearFilters,\n closeMenu,\n column,\n selectedValuesSet,\n someChecked,\n toggleAllValues,\n toggleValue,\n uniqueValues,\n ]);\n\n const isFiltered = column.getIsFiltered();\n const isMenuOpen = Boolean(openMenuProps.anchorEl);\n\n return (\n <>\n <IconButton\n size='small'\n onClick={openMenu}\n color={isFiltered ? 'error' : undefined}\n aria-label={`Filter ${column.id}`}\n data-table-filter-trigger=''\n data-active={isFiltered || isMenuOpen ? 'true' : undefined}\n sx={{padding: 0}}\n >\n <FilterAltOutlinedIcon fontSize='small' />\n </IconButton>\n\n <MenuPopper\n openMenuProps={{\n ...openMenuProps,\n sorted: false,\n initSelected: selectedSortOptionIds,\n }}\n optionHeader={optionHeader}\n options={menuOptions}\n menuItemProps={{\n padding: '6px 12px',\n fontSize: '0.875rem',\n }}\n placement='bottom-end'\n />\n </>\n );\n}\n","import React from 'react';\nimport type { Column } from '@tanstack/react-table';\nimport { useMenu } from '@/ele/Menu/src/useMenu';\nimport type { ExcelColumnFilterValue, FilterDraftOverrides } from './types';\nimport { getMenuValuesSnapshot, toFilterValue } from './utils';\n\nconst QUERY_COMMIT_DEBOUNCE_MS = 180;\n\ntype MenuSnapshotItem = {\n value: string;\n normalized: string;\n};\n\nexport const useColumnFilterDropdown = <TData extends object>(column: Column<TData, unknown>) => {\n const openMenuProps = useMenu({});\n const current = toFilterValue(column.getFilterValue());\n const [queryDraft, setQueryDraft] = React.useState(current.query ?? '');\n const deferredQueryDraft = React.useDeferredValue(queryDraft);\n const [menuValuesSnapshot, setMenuValuesSnapshot] = React.useState<MenuSnapshotItem[]>([]);\n const [localSelectedValues, setLocalSelectedValues] = React.useState<string[] | null>(null);\n const [, startTransition] = React.useTransition();\n const open = Boolean(openMenuProps.anchorEl);\n\n React.useEffect(() => {\n if (!open) {\n setLocalSelectedValues(null);\n return;\n }\n\n const snapshot = getMenuValuesSnapshot(column.getFacetedUniqueValues())\n .map((value) => ({\n value,\n normalized: value.toLowerCase(),\n }));\n\n const latest = toFilterValue(column.getFilterValue());\n setMenuValuesSnapshot(snapshot);\n setQueryDraft(latest.query ?? '');\n setLocalSelectedValues(latest.selectedValues ?? []);\n }, [column, open]);\n\n const uniqueValues = React.useMemo(() => {\n if (!deferredQueryDraft) {\n return menuValuesSnapshot.map((entry) => entry.value);\n }\n\n const lower = deferredQueryDraft.toLowerCase();\n return menuValuesSnapshot\n .filter((entry) => entry.normalized.includes(lower))\n .map((entry) => entry.value);\n }, [deferredQueryDraft, menuValuesSnapshot]);\n\n const selectedValues = current.selectedValues ?? [];\n const selectedValuesForUi = localSelectedValues ?? selectedValues;\n const selectedValuesSet = React.useMemo(() => new Set(selectedValuesForUi), [selectedValuesForUi]);\n\n const setFilterValue = React.useCallback((\n next: ExcelColumnFilterValue | ((previous: ExcelColumnFilterValue) => ExcelColumnFilterValue),\n ) => {\n column.setFilterValue((previous: unknown) => {\n const resolvedPrevious = toFilterValue(previous);\n const resolvedNext = typeof next === 'function' ? next(resolvedPrevious) : next;\n const normalizedNext: ExcelColumnFilterValue = {\n query: resolvedNext.query ?? '',\n selectedValues: Array.isArray(resolvedNext.selectedValues)\n ? resolvedNext.selectedValues\n .map((selectedValue) => String(selectedValue ?? ''))\n .filter((selectedValue) => selectedValue.length > 0)\n : [],\n };\n\n if (!normalizedNext.query && (!normalizedNext.selectedValues || normalizedNext.selectedValues.length === 0)) {\n return undefined;\n }\n\n return normalizedNext;\n });\n }, [column]);\n\n const commitDraftFilters = React.useCallback((overrides?: FilterDraftOverrides) => {\n const nextQuery = overrides?.query ?? queryDraft;\n const nextSelectedValues = overrides?.selectedValues ?? selectedValuesForUi;\n\n startTransition(() => {\n setFilterValue({\n query: nextQuery,\n selectedValues: nextSelectedValues,\n });\n });\n }, [queryDraft, selectedValuesForUi, setFilterValue]);\n\n const openMenu = openMenuProps.onTriggerClickHandler;\n\n const closeMenu = React.useCallback(() => {\n openMenuProps.closeHandler();\n }, [openMenuProps]);\n\n const applyQuery = React.useCallback((nextQuery: string) => {\n setQueryDraft(nextQuery);\n }, []);\n\n React.useEffect(() => {\n if (!open) {\n return;\n }\n\n if (queryDraft === current.query) {\n return;\n }\n\n const timeout = window.setTimeout(() => {\n commitDraftFilters({ query: queryDraft });\n }, QUERY_COMMIT_DEBOUNCE_MS);\n\n return () => {\n window.clearTimeout(timeout);\n };\n }, [commitDraftFilters, current.query, open, queryDraft]);\n\n const commitSelectedValues = React.useCallback((nextSelectedValues: string[]) => {\n setLocalSelectedValues(nextSelectedValues);\n commitDraftFilters({ selectedValues: nextSelectedValues });\n }, [commitDraftFilters]);\n\n const toggleValue = React.useCallback((value: string) => {\n const nextSet = new Set(selectedValuesForUi);\n if (nextSet.has(value)) {\n nextSet.delete(value);\n } else {\n nextSet.add(value);\n }\n\n commitSelectedValues(Array.from(nextSet));\n }, [commitSelectedValues, selectedValuesForUi]);\n\n const toggleAllValues = React.useCallback(() => {\n const currentSet = new Set(selectedValuesForUi);\n const areAllVisibleSelected = uniqueValues.length > 0 && uniqueValues.every((value) => currentSet.has(value));\n\n if (areAllVisibleSelected) {\n commitSelectedValues(selectedValuesForUi.filter((value) => !uniqueValues.includes(value)));\n return;\n }\n\n uniqueValues.forEach((value) => currentSet.add(value));\n commitSelectedValues(Array.from(currentSet));\n }, [commitSelectedValues, selectedValuesForUi, uniqueValues]);\n\n const clearFilters = React.useCallback(() => {\n setQueryDraft('');\n setLocalSelectedValues([]);\n commitDraftFilters({ query: '', selectedValues: [] });\n closeMenu();\n }, [closeMenu, commitDraftFilters]);\n\n const allChecked = uniqueValues.length > 0 && uniqueValues.every((value) => selectedValuesSet.has(value));\n const someChecked = uniqueValues.some((value) => selectedValuesSet.has(value));\n\n return {\n open,\n openMenuProps,\n queryDraft,\n uniqueValues,\n selectedValuesSet,\n allChecked,\n someChecked,\n openMenu,\n closeMenu,\n applyQuery,\n clearFilters,\n toggleValue,\n toggleAllValues,\n };\n};\n","import type { SxProps, Theme } from '@mui/material';\nimport type { ExcelColumnFilterValue } from './types';\n\nexport const toFilterValue = (value: unknown): ExcelColumnFilterValue => {\n if (!value || typeof value !== 'object') {\n return { query: '', selectedValues: [] };\n }\n\n const casted = value as ExcelColumnFilterValue;\n const rawSelectedValues = Array.isArray(casted.selectedValues) ? casted.selectedValues : [];\n\n return {\n query: casted.query ?? '',\n selectedValues: rawSelectedValues\n .map((selectedValue) => String(selectedValue ?? ''))\n .filter((selectedValue) => selectedValue.length > 0),\n };\n};\n\nexport const getMenuValuesSnapshot = (valueMap: Map<unknown, number>): string[] => {\n return Array.from(valueMap.keys())\n .map((value) => String(value ?? ''))\n .filter((value) => value.length > 0)\n .sort((a, b) => a.localeCompare(b));\n};\n\nexport const getSelectedItemSx = (isSelected: boolean): SxProps<Theme> => ({\n ...(isSelected\n ? {\n bgcolor: 'action.selected',\n '&:hover': {\n bgcolor: 'action.selected',\n },\n '& .MuiTypography-root': {\n fontWeight: 'var(--mui-typography-fontWeightMedium)',\n },\n }\n : {\n '&:hover': {\n bgcolor: 'action.hover',\n },\n }),\n});\n","import React from 'react';\nimport {\n TableBody,\n TableCell,\n TableRow,\n} from '@/ele/Table';\nimport { Box } from '@/ele/Box';\nimport { CircularProgress } from '@/ele/Progress';\nimport { flexRender, type Table as TanstackTable } from '@tanstack/react-table';\nimport type { FormTypeMap } from '@/compound/UseForm';\nimport type { TableAction, TableActionContext } from '../_types';\nimport { COL_ID_ACTIONS, COL_ID_CONTROLS } from '../_types';\nimport { ActionButtons, ConfirmRequest } from './actions/ActionButtons';\nimport { getColumnSizeVarName } from './utils/columnSizing';\nimport { TableEmptyState } from './EmptyState';\nimport { tableEmptyCellSx, TablePlaceholderRoot } from '../theme';\n\ntype BodyProps<TData extends object, TFormMap extends FormTypeMap = FormTypeMap> = {\n table: TanstackTable<TData>;\n loading: boolean;\n emptyMessage: React.ReactNode;\n emptyDescription?: React.ReactNode;\n rowActions: TableAction<TData, TFormMap>[];\n renderExpandedRow?: (row: TData, index: number, table: TanstackTable<TData>) => React.ReactNode;\n onOpenFormAction: (\n action: Extract<TableAction<TData, TFormMap>, { kind: 'form' }>,\n context: TableActionContext<TData>,\n ) => void;\n onRequestConfirm?: (req: ConfirmRequest<TData>) => void;\n};\n\nfunction BodyComponent<TData extends object, TFormMap extends FormTypeMap = FormTypeMap>({\n table,\n loading,\n emptyMessage,\n emptyDescription,\n rowActions,\n renderExpandedRow,\n onOpenFormAction,\n onRequestConfirm,\n}: BodyProps<TData, TFormMap>) {\n const rowModel = table.getRowModel();\n const totalColumns = table.getVisibleLeafColumns().length;\n\n if (loading) {\n return (\n <TableBody>\n <TableRow>\n <TableCell colSpan={Math.max(totalColumns, 1)} sx={tableEmptyCellSx}>\n <TablePlaceholderRoot role='status'>\n <CircularProgress size={24} />\n </TablePlaceholderRoot>\n </TableCell>\n </TableRow>\n </TableBody>\n );\n }\n\n if (rowModel.rows.length === 0) {\n const filtered = table.getPreFilteredRowModel().rows.length > 0;\n\n return (\n <TableBody>\n <TableRow>\n <TableCell colSpan={Math.max(totalColumns, 1)} sx={tableEmptyCellSx}>\n <TableEmptyState\n message={emptyMessage}\n description={emptyDescription}\n filtered={filtered}\n />\n </TableCell>\n </TableRow>\n </TableBody>\n );\n }\n\n return (\n <TableBody>\n {rowModel.rows.map((row) => {\n const isExpanded = row.getIsExpanded();\n return (\n <React.Fragment key={row.id}>\n <TableRow hover>\n {row.getVisibleCells().map((cell) => {\n const columnSizeVar = `var(${getColumnSizeVarName(cell.column.id)})`;\n const pinned = cell.column.getIsPinned();\n const pinnedStyles = pinned\n ? {\n position: 'sticky' as const,\n zIndex: 'var(--table-pinned-cell-z-index)',\n backgroundColor: 'var(--table-bg)',\n backgroundImage: 'none',\n [pinned]: pinned === 'left'\n ? `${cell.column.getStart('left')}px`\n : `${cell.column.getAfter('right')}px`,\n boxShadow: pinned === 'left'\n ? 'var(--table-pinned-shadow-left)'\n : 'var(--table-pinned-shadow-right)',\n }\n : undefined;\n\n return (\n <TableCell\n key={cell.id}\n sx={{\n width: columnSizeVar,\n ...pinnedStyles,\n ...(isExpanded && renderExpandedRow ? { borderBottom: 'none' } : {}),\n }}\n >\n {cell.column.id === COL_ID_ACTIONS ? (\n (row.subRows && row.subRows.length > 0) ? null : (\n <ActionButtons\n actions={rowActions}\n context={{\n row: row.original,\n rowIndex: row.index,\n table,\n }}\n onOpenFormAction={onOpenFormAction}\n onRequestConfirm={onRequestConfirm}\n />\n )\n ) : cell.column.id === COL_ID_CONTROLS ? (\n flexRender(cell.column.columnDef.cell, cell.getContext())\n ) : cell.getIsGrouped() ? (\n <Box component='span' sx={{ fontWeight: 'bold' }}>\n {flexRender(cell.column.columnDef.cell, cell.getContext())} ({(row.subRows && row.subRows.length) || 0})\n </Box>\n ) : cell.getIsAggregated() ? (\n flexRender(cell.column.columnDef.aggregatedCell ?? cell.column.columnDef.cell, cell.getContext())\n ) : cell.getIsPlaceholder() ? null : (\n flexRender(cell.column.columnDef.cell, cell.getContext())\n )}\n </TableCell>\n );\n })}\n </TableRow>\n {isExpanded && renderExpandedRow && !row.getIsGrouped() && (\n <TableRow>\n <TableCell\n colSpan={Math.max(totalColumns, 1)}\n sx={{\n p: 0,\n width: '100%',\n backgroundColor: 'var(--mui-palette-action-hover)',\n }}\n >\n {renderExpandedRow(row.original, row.index, table)}\n </TableCell>\n </TableRow>\n )}\n </React.Fragment>\n );\n })}\n </TableBody>\n );\n}\n\n// We intentionally do not memoize the body component because it needs to re-render\n// whenever the table's internal state (expanded/selection/grouping/etc.) changes.\n// The `table` object reference is stable, so a naive React.memo would prevent\n// updates and lead to expansion/selection not appearing.\nexport const Body = BodyComponent;\n","import type { ReactNode } from 'react';\nimport { Typography } from '@/ele/Typography';\nimport { InboxOutlinedIcon, SearchOffIcon } from '@/icons/MuiIcon';\nimport { TablePlaceholderRoot } from '../theme';\n\ntype EmptyStateProps = {\n message: ReactNode;\n description?: ReactNode;\n filtered?: boolean;\n};\n\nexport function TableEmptyState({\n message,\n description,\n filtered = false,\n}: EmptyStateProps) {\n const Icon = filtered ? SearchOffIcon : InboxOutlinedIcon;\n const resolvedDescription =\n description ?? (filtered ? 'Try adjusting search or column filters.' : null);\n\n return (\n <TablePlaceholderRoot role='status'>\n <Icon\n aria-hidden\n sx={{\n fontSize: 40,\n color: 'var(--table-empty-icon-color)',\n }}\n />\n {typeof message === 'string' ? (\n <Typography\n variant='body2'\n sx={{ color: 'var(--table-empty-text-color)', m: 0 }}\n >\n {message}\n </Typography>\n ) : (\n message\n )}\n {resolvedDescription ? (\n <Typography\n variant='caption'\n sx={{ color: 'var(--table-empty-description-color)', m: 0 }}\n >\n {resolvedDescription}\n </Typography>\n ) : null}\n </TablePlaceholderRoot>\n );\n}\n","import React from 'react';\nimport { TableContainer, Table as MuiTable } from '@/ele/Table';\nimport type { Table as TanstackTable } from '@tanstack/react-table';\nimport type { FormTypeMap } from '@/compound/UseForm';\nimport type { TableAction, TableActionContext } from '../_types';\nimport { Header } from './Header';\nimport { Body } from './Body';\nimport type { ConfirmRequest } from './actions/ActionButtons';\n\nexport type TableContentProps<TData extends object, TFormMap extends FormTypeMap = FormTypeMap> = {\n table: TanstackTable<TData>;\n bodyMaxHeight?: number | string;\n dense: boolean;\n stickyHeader: boolean;\n columnSizeVars: Record<string, string>;\n enableColumnFilters: boolean;\n columnFilterPlaceholder: string;\n loading: boolean;\n emptyMessage: React.ReactNode;\n emptyDescription?: React.ReactNode;\n rowActions: TableAction<TData, TFormMap>[];\n renderExpandedRow?: (row: TData, index: number, table: TanstackTable<TData>) => React.ReactNode;\n onOpenFormAction: (action: Extract<TableAction<TData, TFormMap>, { kind: 'form' }>, context: TableActionContext<TData>) => void;\n onRequestConfirm?: (req: ConfirmRequest<TData>) => void;\n};\n\nexport function TableContent<TData extends object, TFormMap extends FormTypeMap = FormTypeMap>({\n table,\n bodyMaxHeight,\n dense,\n stickyHeader,\n columnSizeVars,\n enableColumnFilters,\n columnFilterPlaceholder,\n loading,\n emptyMessage,\n emptyDescription,\n rowActions,\n renderExpandedRow,\n onOpenFormAction,\n onRequestConfirm,\n}: TableContentProps<TData, TFormMap>) {\n return (\n <TableContainer\n sx={{\n containerType: 'inline-size',\n ...(bodyMaxHeight ? { maxHeight: bodyMaxHeight, overflowY: 'auto' } : {}),\n overflowX: 'auto',\n }}\n >\n {/*\n PERFORMANCE OPTIMIZATION:\n We use the standard DOM `style` prop here instead of MUI's `sx` prop.\n The `columnSizeVars` object contains dynamically changing CSS variables during table state updates.\n If passed to `sx`, Emotion's CSS-in-JS engine will parse it, generate a new hashed class name, \n and inject new <style> tags into the document <head> on every render. \n Native `style` completely bypasses Emotion and pushes the CSS variables directly to the DOM, \n preventing severe CSS cache invalidation and frame drops, especially after the column \n resizer triggers a final `setColumnSizing` state update.\n */}\n <MuiTable\n size={dense ? 'small' : 'medium'}\n stickyHeader={stickyHeader}\n style={columnSizeVars as React.CSSProperties}\n >\n <Header\n table={table}\n enableColumnFilters={enableColumnFilters}\n columnFilterPlaceholder={columnFilterPlaceholder}\n />\n <Body\n table={table}\n loading={loading}\n emptyMessage={emptyMessage}\n emptyDescription={emptyDescription}\n rowActions={rowActions}\n renderExpandedRow={renderExpandedRow}\n onOpenFormAction={onOpenFormAction}\n onRequestConfirm={onRequestConfirm}\n />\n </MuiTable>\n </TableContainer>\n );\n}\n","import { useTheme } from '@mui/material';\nimport { Box } from '@/ele/Box';\nimport { Tooltip } from '@/ele/Tooltip';\nimport { Typography } from '@/ele/Typography';\nimport { CellContext } from '@tanstack/react-table';\n\nexport type PercentageBaseType = 'total-sum' | 'group-sum' | 'max-value' | number;\n\nexport interface PercentageBarProps<TData, TValue> {\n context: CellContext<TData, TValue>;\n baseType?: PercentageBaseType;\n /**\n * Optional custom color stops (0-100)\n * Defaults to: a gradient approach or changing colors from green to red based on percentage\n */\n getColor?: (percentage: number) => string;\n}\n\nexport function PercentageBar<TData extends object, TValue>({\n context,\n baseType = 'total-sum',\n getColor,\n}: PercentageBarProps<TData, TValue>) {\n const value = Number(context.getValue() || 0);\n const theme = useTheme();\n\n // Calculate the base (denominator) to compute the percentage\n let max = 0;\n\n if (typeof baseType === 'number') {\n max = baseType;\n } else if (baseType === 'total-sum') {\n // Grand total uses the core row model (flat list of all rows before grouping)\n max = context.table.getCoreRowModel().rows.reduce((sum, row) => sum + Number(row.getValue(context.column.id) || 0), 0);\n } else if (baseType === 'max-value') {\n max = Math.max(...context.table.getCoreRowModel().rows.map((row) => Number(row.getValue(context.column.id) || 0)));\n } else if (baseType === 'group-sum') {\n const parentRow = context.row.getParentRow();\n if (parentRow) {\n // It's a child row, calculate sum using the parent's aggregated value\n max = Number(parentRow.getValue(context.column.id) || 0);\n } else if (context.row.getIsGrouped()) {\n // Group header fallback (though typically it should use 'total-sum')\n max = Number(context.row.getValue(context.column.id) || 0);\n } else {\n // Not grouped table\n max = context.table.getCoreRowModel().rows.reduce((sum, row) => sum + Number(row.getValue(context.column.id) || 0), 0);\n }\n }\n\n // Prevent division by zero\n const percentage = max > 0 ? Math.min(100, Math.max(0, (value / max) * 100)) : 0;\n\n // Default color logic: Green (low) -> Yellow (mid) -> Red (high)\n const defaultGetColor = (p: number) => {\n if (p < 25) return theme.palette.success.main;\n if (p < 50) return theme.palette.warning.main;\n return theme.palette.error.main;\n };\n\n const finalColor = getColor ? getColor(percentage) : defaultGetColor(percentage);\n const tooltipTitle = `${value} / ${max} (${percentage.toFixed(1)}%)`;\n\n return (\n <Tooltip title={tooltipTitle} arrow>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, width: '100%', minWidth: 100 }}>\n <Box sx={{ flexGrow: 1, height: 8, bgcolor: 'action.hover', borderRadius: 4, overflow: 'hidden' }}>\n <Box\n sx={{\n height: '100%',\n width: `${percentage}%`,\n bgcolor: finalColor,\n transition: 'width 0.3s ease, background-color 0.3s ease',\n }}\n />\n </Box>\n <Typography variant=\"caption\" sx={{ minWidth: 32, textAlign: 'right', fontWeight: 'medium' }}>\n {value}\n </Typography>\n </Box>\n </Tooltip>\n );\n}\n\n// Utility to easily inject it into `cell` definitions\nexport function renderPercentageBar<TData extends object>(options?: Omit<PercentageBarProps<TData, unknown>, 'context'>) {\n return function PercentageBarRenderer(context: CellContext<TData, unknown>) {\n return <PercentageBar context={context} {...options} />;\n };\n}\n"],"mappings":"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","names":["React","ret","default","default","jsx","default","jsx","default","React","jsx","jsxs","React","default","default","React","next","React","Fragment","jsx","React","default","React","jsx","React","default","jsx","jsxs","default","React","React","React","Fragment","jsx","jsxs","React","default","jsx","jsxs","default","React","flexRender","jsx","jsxs","default","jsx","jsxs","default","React","flexRender","jsx","jsxs","default","jsx","jsxs","React","table","default","jsx","jsxs","default"]}
@@ -0,0 +1,292 @@
1
+ import {
2
+ default as default4
3
+ } from "./chunk-UDREPVEY.mjs";
4
+ import {
5
+ AnimatedPending,
6
+ Icon_default2 as Icon_default
7
+ } from "./chunk-6REEQBJI.mjs";
8
+ import {
9
+ default as default3
10
+ } from "./chunk-4RPFRNXG.mjs";
11
+ import {
12
+ default as default2,
13
+ mergeSx
14
+ } from "./chunk-S6EZVRZC.mjs";
15
+
16
+ // src/components/elemental/Loading/src/LoadingText.tsx
17
+ import { useEffect, useMemo, useState } from "react";
18
+
19
+ // src/components/elemental/Loading/src/theme.ts
20
+ var loadingTextToneVars = {
21
+ "--text-color": "color-mix(in lab, var(--text-hue) 72%, var(--mui-palette-text-secondary))",
22
+ "--text-pulse-color": "color-mix(in lab, var(--text-hue) 55%, var(--mui-palette-text-primary))"
23
+ };
24
+ var loadingTextColorVars = {
25
+ text: {
26
+ "--text-hue": "var(--mui-palette-text-secondary)"
27
+ },
28
+ primary: {
29
+ "--text-hue": "var(--mui-palette-primary-main)",
30
+ "--text-color": "var(--mui-palette-primary-dark)",
31
+ "--text-pulse-color": "var(--mui-palette-primary-light)"
32
+ },
33
+ secondary: {
34
+ "--text-hue": "var(--mui-palette-secondary-main)",
35
+ "--text-color": "var(--mui-palette-secondary-dark)",
36
+ "--text-pulse-color": "var(--mui-palette-secondary-light)"
37
+ },
38
+ error: {
39
+ "--text-hue": "var(--mui-palette-error-main)",
40
+ "--text-color": "var(--mui-palette-error-dark)",
41
+ "--text-pulse-color": "var(--mui-palette-error-light)"
42
+ },
43
+ info: {
44
+ "--text-hue": "var(--mui-palette-info-main)",
45
+ "--text-color": "var(--mui-palette-info-dark)",
46
+ "--text-pulse-color": "var(--mui-palette-info-light)"
47
+ },
48
+ success: {
49
+ "--text-hue": "var(--mui-palette-success-main)",
50
+ "--text-color": "var(--mui-palette-success-dark)",
51
+ "--text-pulse-color": "var(--mui-palette-success-light)"
52
+ },
53
+ warning: {
54
+ "--text-hue": "var(--mui-palette-warning-main)",
55
+ "--text-color": "var(--mui-palette-warning-dark)",
56
+ "--text-pulse-color": "var(--mui-palette-warning-light)"
57
+ },
58
+ system: {
59
+ "--text-hue": "var(--mui-palette-system-main)",
60
+ "--text-color": "var(--mui-palette-system-dark)",
61
+ "--text-pulse-color": "var(--mui-palette-system-light)"
62
+ },
63
+ insight: {
64
+ "--text-hue": "var(--mui-palette-insight-main)",
65
+ "--text-color": "var(--mui-palette-insight-dark)",
66
+ "--text-pulse-color": "var(--mui-palette-insight-light)"
67
+ }
68
+ };
69
+
70
+ // src/components/elemental/Loading/src/LoadingText.tsx
71
+ import { jsx, jsxs } from "react/jsx-runtime";
72
+ var DEFAULT_TEXT = "Loading";
73
+ function toPhrases(text) {
74
+ if (typeof text === "string") {
75
+ return [text];
76
+ }
77
+ return text.length > 0 ? [...text] : [DEFAULT_TEXT];
78
+ }
79
+ function phraseListKey(text) {
80
+ return typeof text === "string" ? text : text.join("\0");
81
+ }
82
+ var inheritTypeSx = {
83
+ font: "inherit",
84
+ fontSize: "inherit",
85
+ fontWeight: "inherit",
86
+ fontFamily: "inherit",
87
+ fontStyle: "inherit",
88
+ letterSpacing: "inherit",
89
+ lineHeight: "inherit"
90
+ };
91
+ function LoadingText({
92
+ text = DEFAULT_TEXT,
93
+ interval = 2200,
94
+ dots = true,
95
+ loading = true,
96
+ readyText,
97
+ color = "text",
98
+ variant = "body1",
99
+ sx
100
+ }) {
101
+ const listKey = phraseListKey(text);
102
+ const phrases = useMemo(() => toPhrases(text), [text]);
103
+ const [index, setIndex] = useState(0);
104
+ const phraseIndex = phrases.length > 0 ? index % phrases.length : 0;
105
+ const phrase = loading ? phrases[phraseIndex] ?? DEFAULT_TEXT : readyText ?? phrases[phraseIndex] ?? DEFAULT_TEXT;
106
+ useEffect(() => {
107
+ setIndex(0);
108
+ }, [listKey]);
109
+ useEffect(() => {
110
+ if (!loading || phrases.length < 2) {
111
+ return;
112
+ }
113
+ const count = phrases.length;
114
+ const id = window.setInterval(() => {
115
+ setIndex((current) => (current + 1) % count);
116
+ }, Math.max(800, interval));
117
+ return () => window.clearInterval(id);
118
+ }, [interval, loading, listKey, phrases.length]);
119
+ return /* @__PURE__ */ jsxs(
120
+ default3,
121
+ {
122
+ component: "span",
123
+ variant,
124
+ role: "status",
125
+ "aria-live": "polite",
126
+ "aria-busy": loading,
127
+ sx: mergeSx(
128
+ {
129
+ display: "inline-flex",
130
+ alignItems: "baseline",
131
+ gap: "0.08em",
132
+ ...loadingTextToneVars,
133
+ ...loadingTextColorVars[color] ?? loadingTextColorVars.text,
134
+ color: "var(--text-color)",
135
+ m: 0,
136
+ "@media (prefers-reduced-motion: reduce)": {
137
+ "& [data-loading-highlight]": {
138
+ display: "none"
139
+ }
140
+ }
141
+ },
142
+ sx
143
+ ),
144
+ children: [
145
+ /* @__PURE__ */ jsx(LoadingPhrase, { phrase, loading }),
146
+ loading && dots ? /* @__PURE__ */ jsx(LoadingDots, {}) : null
147
+ ]
148
+ }
149
+ );
150
+ }
151
+ function LoadingPhrase({ phrase, loading }) {
152
+ return /* @__PURE__ */ jsxs(
153
+ default2,
154
+ {
155
+ component: "span",
156
+ "data-loading-text": "",
157
+ sx: {
158
+ ...inheritTypeSx,
159
+ display: "inline-block",
160
+ position: "relative",
161
+ color: "inherit"
162
+ },
163
+ children: [
164
+ phrase,
165
+ loading ? /* @__PURE__ */ jsx(
166
+ default2,
167
+ {
168
+ component: "span",
169
+ "aria-hidden": true,
170
+ "data-loading-highlight": "",
171
+ sx: {
172
+ ...inheritTypeSx,
173
+ position: "absolute",
174
+ left: 0,
175
+ top: 0,
176
+ color: "var(--text-pulse-color)",
177
+ pointerEvents: "none",
178
+ maskImage: "linear-gradient(90deg, transparent 32%, #000 50%, transparent 68%)",
179
+ WebkitMaskImage: "linear-gradient(90deg, transparent 32%, #000 50%, transparent 68%)",
180
+ maskSize: "220% 100%",
181
+ WebkitMaskSize: "220% 100%",
182
+ maskRepeat: "no-repeat",
183
+ WebkitMaskRepeat: "no-repeat",
184
+ animation: "sduiLoadingTextShimmer 1.7s ease-in-out infinite",
185
+ "@keyframes sduiLoadingTextShimmer": {
186
+ "0%": {
187
+ maskPosition: "120% 0",
188
+ WebkitMaskPosition: "120% 0"
189
+ },
190
+ "100%": {
191
+ maskPosition: "-20% 0",
192
+ WebkitMaskPosition: "-20% 0"
193
+ }
194
+ }
195
+ },
196
+ children: phrase
197
+ }
198
+ ) : null
199
+ ]
200
+ },
201
+ `${loading}-${phrase}`
202
+ );
203
+ }
204
+ function LoadingDots() {
205
+ return /* @__PURE__ */ jsx(
206
+ default2,
207
+ {
208
+ component: "span",
209
+ "aria-hidden": true,
210
+ sx: {
211
+ ...inheritTypeSx,
212
+ display: "inline-flex",
213
+ width: "1.35em",
214
+ justifyContent: "flex-start",
215
+ letterSpacing: 0,
216
+ color: "var(--text-color)"
217
+ },
218
+ children: [0, 1, 2].map((dot) => /* @__PURE__ */ jsx(
219
+ default2,
220
+ {
221
+ component: "span",
222
+ "data-loading-dot": "",
223
+ sx: {
224
+ ...inheritTypeSx,
225
+ animation: "sduiLoadingTextDot 1.05s ease-in-out infinite",
226
+ animationDelay: `${dot * 0.16}s`,
227
+ "@keyframes sduiLoadingTextDot": {
228
+ "0%, 80%, 100%": { opacity: 0.25, color: "var(--text-color)" },
229
+ "40%": { opacity: 1, color: "var(--text-pulse-color)" }
230
+ }
231
+ },
232
+ children: "."
233
+ },
234
+ dot
235
+ ))
236
+ }
237
+ );
238
+ }
239
+ var LoadingText_default = LoadingText;
240
+
241
+ // src/components/elemental/Loading/src/Loading.tsx
242
+ import { jsx as jsx2 } from "react/jsx-runtime";
243
+ function Loading(p) {
244
+ const { variant = "circle", size = "50px", ...textProps } = p;
245
+ if (variant === "text") {
246
+ return /* @__PURE__ */ jsx2(LoadingText_default, { ...textProps });
247
+ }
248
+ if (variant === "hash") {
249
+ return /* @__PURE__ */ jsx2(AnimatedPending, { size });
250
+ }
251
+ return /* @__PURE__ */ jsx2(
252
+ Icon_default,
253
+ {
254
+ sx: {
255
+ fontSize: size
256
+ }
257
+ }
258
+ );
259
+ }
260
+
261
+ // src/components/elemental/Loading/src/LoadingModal.tsx
262
+ import { jsx as jsx3 } from "react/jsx-runtime";
263
+ function LoadingModal({
264
+ open,
265
+ slotProps
266
+ }) {
267
+ return /* @__PURE__ */ jsx3(
268
+ default4,
269
+ {
270
+ open,
271
+ sx: {
272
+ display: "flex",
273
+ alignItems: "center",
274
+ justifyContent: "center"
275
+ },
276
+ children: /* @__PURE__ */ jsx3(default2, { sx: {}, children: /* @__PURE__ */ jsx3(
277
+ Loading,
278
+ {
279
+ size: "100px",
280
+ ...slotProps?.loading
281
+ }
282
+ ) })
283
+ }
284
+ );
285
+ }
286
+
287
+ export {
288
+ LoadingText,
289
+ Loading,
290
+ LoadingModal
291
+ };
292
+ //# sourceMappingURL=chunk-E3I2VDHZ.mjs.map