@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/_utils/_func/array.ts","../src/_utils/_func/random.ts","../src/_utils/_func/sx.ts","../src/_utils/_func/index.ts","../src/components/elemental/Box/src/BorderBox/BorderBox.tsx","../src/components/elemental/Box/src/BorderBox/index.ts","../src/components/elemental/Box/src/index.ts","../src/components/elemental/Box/index.ts","../src/components/elemental/Typography/src/Typography.ts","../src/components/elemental/Typography/src/Variants.tsx","../src/components/elemental/Typography/src/theme.ts","../src/components/elemental/Typography/src/index.ts","../src/components/elemental/Typography/index.ts","../src/components/elemental/Button/src/Button/Button.tsx","../src/components/elemental/Button/src/Button/themes.ts","../src/components/elemental/Button/src/Button/index.ts","../src/components/elemental/Tooltip/src/Tooltip/theme.tsx","../src/components/elemental/Tooltip/src/Tooltip/index.ts","../src/components/elemental/Tooltip/src/index.ts","../src/components/elemental/Tooltip/index.ts","../src/components/elemental/Button/src/IconButton/IconButton.tsx","../src/components/elemental/Button/src/IconButton/IconButton.HoverSpinnin.tsx","../src/components/elemental/Button/src/IconButton/IconButton.Fade.tsx","../src/components/elemental/Button/src/IconButton/theme.ts","../src/components/elemental/Button/src/IconButton/index.ts","../src/components/elemental/Chip/src/Chip/Chip.tsx","../src/components/elemental/Chip/src/Chip/themes.ts","../src/components/elemental/Chip/src/Chip/index.ts","../src/components/elemental/Chip/src/index.ts","../src/components/elemental/Chip/index.ts","../src/components/elemental/Button/src/TagButton/theme.ts","../src/components/elemental/Button/src/TagButton/TagButton.tsx","../src/components/elemental/Button/src/TagButton/index.ts","../src/components/elemental/Button/src/index.ts","../src/components/elemental/Button/index.ts","../src/components/elemental/Badge/src/Badge/Badge.tsx","../src/components/elemental/Badge/src/Badge/theme.ts","../src/components/elemental/Badge/src/Badge/index.ts","../src/components/elemental/Badge/src/index.ts","../src/components/elemental/Badge/index.ts","../src/components/elemental/Overlay/src/index.ts","../src/components/elemental/Overlay/index.ts","../src/components/Icons/MuiIcon/index.ts","../src/components/elemental/Autocomplete/src/GitHubPicker/theme.ts","../src/components/elemental/Autocomplete/src/GitHubPicker/OptionRenderer.tsx","../src/components/elemental/Autocomplete/src/GitHubPicker/states/states.tsx","../src/components/elemental/Autocomplete/src/GitHubPicker/states/index.ts","../src/components/elemental/Paper/src/Paper/Paper.tsx","../src/components/elemental/Paper/src/Paper/ShinyPaper.tsx","../src/components/elemental/Paper/src/Paper/themes.ts","../src/components/elemental/Paper/src/Paper/index.ts","../src/components/elemental/Paper/src/index.ts","../src/components/elemental/Paper/index.ts","../src/components/elemental/Autocomplete/src/GitHubPicker/popperTheme.ts","../src/components/elemental/Autocomplete/src/GitHubPicker/_utils/_const.ts","../src/components/elemental/Autocomplete/src/GitHubPicker/_utils/OptionClass.ts","../src/components/elemental/Autocomplete/src/GitHubPicker/_utils/index.ts","../src/components/elemental/Autocomplete/src/GitHubPicker/PopperMenu.tsx","../src/components/elemental/Autocomplete/src/GitHubPicker/GitHubPicker.tsx","../src/components/elemental/Autocomplete/src/GitHubPicker/index.ts","../src/components/elemental/Autocomplete/src/index.ts","../src/components/elemental/Autocomplete/index.ts","../src/_utils/_const/classNames.ts","../src/components/elemental/Skeleton/MuiSkeleton/index.ts","../src/components/elemental/Skeleton/DialogSkeleton/DialogSkeleton.tsx","../src/components/elemental/Skeleton/DialogSkeleton/index.ts","../src/components/elemental/Skeleton/index.ts","../src/components/elemental/Avatar/src/_utils/_types.ts","../src/components/elemental/Avatar/src/_utils/_const.ts","../src/components/elemental/Avatar/src/_utils/index.ts","../src/components/elemental/Avatar/src/Avatar/Avatar.tsx","../src/components/elemental/Avatar/src/Avatar/themes.ts","../src/components/elemental/Avatar/src/Avatar/AvatarButton.tsx","../src/components/elemental/Avatar/src/Avatar/index.ts","../src/components/elemental/Menu/src/MenuItem.tsx","../src/components/elemental/Menu/src/Menu/Menu.tsx","../src/components/elemental/Menu/src/Menu/theme.ts","../src/components/elemental/Menu/src/Menu/index.ts","../src/components/elemental/Menu/src/useMenu/useMenu.tsx","../src/components/elemental/Menu/src/useMenu/IconMenu.tsx","../src/components/elemental/Menu/src/useMenu/index.ts","../src/components/elemental/Form/src/FormLabel/FormLabel.tsx","../src/components/elemental/Form/src/FormLabel/theme.ts","../src/components/elemental/Form/src/FormLabel/index.ts","../src/components/elemental/Form/src/FormControlLabel/FormControlLabel.tsx","../src/components/elemental/Form/src/FormControlLabel/theme.ts","../src/components/elemental/Form/src/FormControlLabel/index.ts","../src/components/elemental/Form/src/themes.ts","../src/components/elemental/Form/src/index.ts","../src/components/elemental/Form/index.ts","../src/components/elemental/Card/src/Card/Card.tsx","../src/components/elemental/Card/src/Card/theme.tsx","../src/components/elemental/Card/src/Card/SpotlightCard.tsx","../src/components/elemental/Card/src/Card/index.ts","../src/components/elemental/Card/src/index.ts","../src/components/elemental/Card/index.ts","../src/components/elemental/Divider/src/theme.ts","../src/components/elemental/Divider/src/index.ts","../src/components/elemental/Divider/index.ts","../src/components/elemental/Checkbox/src/Checkbox/theme.ts","../src/components/elemental/Checkbox/src/Checkbox/index.ts","../src/components/elemental/Checkbox/src/CheckboxGroup/CheckboxGroup.tsx","../src/components/elemental/Checkbox/src/CheckboxGroup/index.ts","../src/components/elemental/Checkbox/src/index.ts","../src/components/elemental/Checkbox/index.ts","../src/components/elemental/List/src/List/CheckList.tsx","../src/components/elemental/List/src/List/TransferList.tsx","../src/components/elemental/List/src/List/theme.ts","../src/components/elemental/List/src/List/index.ts","../src/components/elemental/List/src/index.ts","../src/components/elemental/List/index.ts","../src/components/elemental/Menu/src/DetailMenu/DetailMenu.tsx","../src/components/elemental/Menu/src/DetailMenu/index.ts","../src/components/elemental/Menu/src/ModelMenu/ModelMenu.tsx","../src/components/elemental/Menu/src/ModelMenu/index.ts","../src/components/elemental/Menu/src/ModelPicker/ModelPicker.tsx","../src/components/elemental/Menu/src/ModelPicker/index.ts","../src/components/elemental/Menu/src/index.ts","../src/components/elemental/Menu/index.ts","../src/components/elemental/Avatar/src/StatusAvatar/theme.ts","../src/components/elemental/Avatar/src/StatusAvatar/StatusAvatar.tsx","../src/components/elemental/Avatar/src/StatusAvatar/index.ts","../src/components/elemental/Avatar/src/index.ts","../src/components/elemental/Avatar/index.ts","../src/components/elemental/DatePicker/src/_shared.tsx","../src/components/elemental/DatePicker/src/MuiXDatePicker.tsx","../src/components/elemental/DatePicker/src/MuiXDateTimePicker.tsx","../src/components/elemental/DatePicker/src/theme.ts","../src/components/elemental/DatePicker/src/index.ts","../src/components/elemental/DatePicker/index.ts","../src/components/elemental/Image/src/MuiImageList/MuiImageList.tsx","../src/components/elemental/Image/src/MuiImageList/index.ts","../src/components/elemental/Image/src/Cropper/theme.ts","../src/components/elemental/Image/src/Cropper/layout/CropperLayout.tsx","../src/components/elemental/Image/src/Cropper/sections/CropperSourceSection.tsx","../src/components/elemental/Slider/src/Slider/theme.tsx","../src/components/elemental/Slider/src/Slider/index.ts","../src/components/elemental/Slider/src/index.ts","../src/components/elemental/Slider/index.ts","../src/components/elemental/Image/src/Cropper/sections/CropperControlsSection.tsx","../src/components/elemental/Image/src/Cropper/sections/CropperActionSection.tsx","../src/components/compound/FileUploader/src/theme.ts","../src/_utils/_func/downloadFile.ts","../src/_utils/_const/file.ts","../src/_utils/classes/PreviewableFile.ts","../src/components/compound/DisplayFile/src/DisplayFile.tsx","../src/components/compound/DisplayFile/src/index.ts","../src/components/compound/DisplayFile/index.ts","../src/components/compound/FileUploader/src/DropZoneBox.tsx","../src/components/compound/FileUploader/src/DropZoneButton.tsx","../src/components/compound/FileUploader/src/ReactDropzone.tsx","../src/components/compound/FileUploader/src/index.ts","../src/components/compound/FileUploader/index.ts","../src/components/elemental/Image/src/Cropper/sections/CropperFileSelector.tsx","../src/components/elemental/Image/src/Cropper/hooks/useCropperState.ts","../src/components/elemental/Image/src/Cropper/Cropper.tsx","../src/components/elemental/Image/src/Cropper/index.ts","../src/components/elemental/Image/src/index.ts","../src/components/elemental/Image/index.ts","../src/components/elemental/Input/src/TextField/theme.ts","../src/components/elemental/Input/src/TextField/index.ts","../src/components/elemental/Input/src/TelPhoneInput/theme.ts","../src/components/elemental/Input/src/TelPhoneInput/CountrySelect.tsx","../src/components/elemental/Input/src/TelPhoneInput/TelPhoneInput.tsx","../src/components/elemental/Input/src/TelPhoneInput/index.ts","../node_modules/classnames/index.js","../src/_utils/_const/index.ts","../src/patterns/doodlePattern.ts","../src/patterns/generated/doodlePatternMask.ts","../src/patterns/doodlePatternStyles.ts","../src/patterns/index.ts","../src/components/elemental/Modal/src/MuiModal/theme.ts","../src/components/elemental/Modal/src/MuiModal/MuiModal.tsx","../src/components/elemental/Modal/src/MuiModal/index.ts","../src/components/elemental/Modal/src/index.ts","../src/components/elemental/Modal/index.ts","../src/components/compound/UseForm/src/_utils/constants.ts","../src/components/compound/UseForm/src/_utils/helpers.ts","../src/components/compound/UseForm/src/_utils/helperText.tsx","../src/components/compound/UseForm/src/Fields/Explanation.tsx","../src/components/compound/UseForm/src/Fields/DateField.tsx","../src/components/compound/UseForm/src/Fields/DateTimeField.tsx","../src/components/compound/UseForm/src/Fields/TelField.tsx","../src/components/compound/UseForm/src/Fields/FileUploadField.tsx","../src/components/compound/UseForm/src/Fields/AvatarField.tsx","../src/components/elemental/JsonEditor/src/JsonEditor/theme.ts","../src/components/elemental/JsonEditor/src/JsonEditor/CodeEditor.tsx","../src/components/elemental/JsonEditor/src/JsonEditor/JsonEditor.tsx","../src/components/elemental/JsonEditor/src/JsonEditor/index.ts","../src/components/elemental/JsonEditor/src/index.ts","../src/components/elemental/JsonEditor/index.ts","../src/components/compound/UseForm/src/Fields/JSONEditorField.tsx","../src/components/compound/UseForm/src/Fields/AutocompleteField.tsx","../src/index.ts","../src/components/elemental/AppBar/src/index.ts","../src/components/elemental/AppBar/src/theme.ts","../src/components/elemental/Collapse/src/Collapse/index.ts","../src/components/elemental/Collapse/src/Collapse/theme.tsx","../src/components/elemental/Input/src/PopperInput/PopperInput.tsx","../src/components/elemental/Input/src/StackInput/StackInput.tsx","../src/components/elemental/Input/src/StackInput/theme.ts","../src/components/elemental/Input/src/index.ts","../src/components/elemental/Input/src/LineInput.tsx","../src/components/elemental/Input/src/lineInputTheme.ts","../src/components/Icons/AnimatedIcon/AnimatedDone/Icon.tsx","../src/components/Icons/AnimatedIcon/AnimatedDone/check-all.svg","../src/components/Icons/AnimatedIcon/AnimatedLoading/Icon.tsx","../src/components/Icons/AnimatedIcon/AnimatedLoading/loading.svg","../src/components/Icons/AnimatedIcon/AnimatedPending/Icon.tsx","../src/components/elemental/Loading/src/LoadingText.tsx","../src/components/elemental/Loading/src/theme.ts","../src/components/elemental/Loading/src/Loading.tsx","../src/components/elemental/Loading/src/LoadingModal.tsx","../src/components/elemental/Progress/src/LinearProgress.tsx","../src/components/elemental/Progress/src/CircularProgress.tsx","../src/components/elemental/Progress/src/theme.ts","../src/components/elemental/ResizablePanel/src/ReactResizablePanels.tsx","../src/components/elemental/ResizablePanel/src/themes.ts","../src/components/elemental/Select/src/MuiSelect/MuiSelect.tsx","../src/components/elemental/Select/src/MuiSelect/theme.ts","../src/components/elemental/Stepper/index.ts","../src/components/elemental/Stepper/src/StandardStepper.tsx","../src/components/elemental/Stepper/src/theme.ts","../src/components/elemental/Switch/src/Switch/MuiSwitch.tsx","../src/components/elemental/Switch/src/Switch/themes.ts","../src/components/elemental/Switch/src/Switch/SwitchSoft.tsx","../src/components/elemental/Tab/src/Tab/index.ts","../src/components/elemental/Tab/src/Tab/themes.ts","../src/components/elemental/Tab/src/TabPanel/TabPanel.tsx","../src/components/elemental/Tab/src/TabPanel/useTabsOverflow.ts","../src/components/elemental/Tab/src/TabPanel/tabPanelVars.ts","../src/components/elemental/Timeline/MuiTimeline/MuiTimeline.tsx","../src/components/elemental/Timeline/MuiTimeline/theme.ts","../src/components/elemental/ToggleButtonGroup/src/ToggleButtonGroup/ToggleButtonGroup.tsx","../src/components/elemental/ToggleButtonGroup/src/ToggleButtonGroup/themes.ts","../src/components/elemental/VariablesRenderer/Var/Var.tsx","../src/components/elemental/VariablesRenderer/theme.ts","../src/components/elemental/VariablesRenderer/Var/VarField.tsx","../src/components/compound/Alert/src/AlertProvider.tsx","../src/components/compound/Alert/src/MuiAlertVariant.tsx","../src/components/compound/Alert/src/_utils/utils.ts","../src/components/compound/Alert/src/_utils/const.ts","../src/components/compound/Alert/src/CollapsableAlert.tsx","../src/components/compound/Alert/src/theme.ts","../src/components/compound/Chart/src/Chart.tsx","../src/components/compound/Chart/src/render/ChartHover.tsx","../src/components/compound/Chart/src/utils/chartLayout.ts","../src/components/compound/Chart/src/utils/paths.ts","../src/components/compound/Chart/src/utils/areaGeometry.ts","../src/components/compound/Chart/src/utils/barGeometry.ts","../src/components/compound/Chart/src/utils/lineGeometry.ts","../src/components/compound/Chart/src/utils/pieGeometry.ts","../src/components/compound/Chart/src/utils/geometry.ts","../src/components/compound/Chart/src/theme.ts","../src/components/compound/Chart/src/render/ChartLegend.tsx","../src/components/compound/Chart/src/render/ChartPlot.tsx","../src/components/compound/Process/src/ProcessModal.tsx","../src/components/compound/Process/src/ProcessItem.tsx","../src/components/compound/Process/src/hooks/useProgressTracking.ts","../src/components/compound/Process/src/hooks/useProcessAlert.ts","../src/components/compound/Process/src/ProcessAlert.tsx","../src/components/compound/Process/src/_utils/ProgressObserver.ts","../src/components/compound/Process/src/theme.ts","../src/components/compound/ScrollToLoad/src/useScrollToLoad.ts","../src/components/compound/ScrollToLoad/src/ScrollToLoad.tsx","../src/components/compound/ScrollToLoad/src/render/StatusIndicators.tsx","../src/components/compound/Table/src/Table.tsx","../src/components/compound/Table/src/render/cell/RowControlsCell.tsx","../src/components/compound/Table/src/utils/expanded.ts","../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/UseForm/src/useHooks.ts","../src/components/compound/UseForm/src/_utils/resolver.ts","../src/components/compound/UseForm/src/FormRenderer/Layout.tsx","../src/components/compound/UseForm/src/FormRenderer/StepperSection.tsx","../src/components/compound/UseForm/src/store/FormContext.tsx","../src/components/compound/UseForm/src/store/methods.ts","../src/components/compound/UseForm/src/FormRenderer/RowRenderer.tsx","../src/components/compound/UseForm/src/Fields/TextField.tsx","../src/components/compound/UseForm/src/Fields/SelectField.tsx","../src/components/compound/UseForm/src/Fields/SliderField.tsx","../src/components/compound/UseForm/src/Fields/CheckField.tsx","../src/components/compound/UseForm/src/Fields/ToggleButtonField.tsx","../src/components/compound/UseForm/src/Fields/SwitchField.tsx","../src/components/compound/UseForm/src/Fields/CustomField.tsx","../src/components/compound/UseForm/src/Fields/TextArrayField.tsx","../src/components/compound/UseForm/src/Fields/NumberField.tsx","../src/components/compound/UseForm/src/FormRenderer/Navigation.tsx","../src/components/compound/UseForm/src/hooks/useRegisterFields.ts","../src/components/compound/UseForm/src/theme.ts","../src/components/compound/UseForm/src/FormModalRenderer.tsx","../src/components/compound/UseForm/src/FormTree.tsx","../src/components/compound/UseForm/src/UseForm.tsx","../src/components/compound/UseForm/src/index.ts","../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/TableToolbar.tsx","../src/components/compound/Table/src/render/actions/ActionButtons.tsx","../src/components/compound/Table/src/render/controls/GlobalFilterControl.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","../src/components/compound/UseSearch/context.tsx","../src/components/compound/UseSearch/useSearch.ts","../src/components/compound/UseSearch/SearchBar.tsx","../src/components/compound/UseSearch/SearchScope.tsx","../src/components/compound/UseSearch/SuggestionList.tsx","../src/components/compound/UseSearch/theme.ts","../src/components/compound/UseSearch/ScopeSuggestions.tsx","../src/components/compound/UseSearch/UseSearchLayout.tsx","../src/components/compound/UseSearch/SearchResults.tsx","#style-inject:#style-inject","../src/theme/styles/scroll.css","../src/theme/Provider.tsx","../src/theme/muiTheme.ts","../src/theme/colors/darkBlue.ts","../src/theme/colors/lightBrown.ts","../src/theme/ToggleThemeButton/ToggleThemeButton.tsx","../src/theme/appScrollStyles.ts"],"sourcesContent":["export function hasIntersect<T>(a:T[], b:T[]) {\n return a.some((x) => b.includes(x))\n}\n/**\n * a function to get the intersection of two arrays\n */\nexport function getIntersect<T>(a:T[], b:T[]) {\n return a.filter((x) => b.includes(x))\n}\n/**\n * Check if two arrays are the same\n * even if they are in different order\n */\nexport function isSameArray<T>(a:T[], b:T[]) {\n return a.length === b.length && a.every((x) => b.includes(x))\n}\n/**\n * sort array with certain condition\n */\nexport function sortByCondi<\n T,\n K extends keyof T,\n>(array:T[], key:K, condition:(a:T[K],b:T[K])=>boolean,reverse=false) {\n const anchor = reverse ? -1 : 1\n const sorted = [...array]\n sorted.sort((a, b) => {\n if (condition(a[key], b[key])) {\n return -anchor\n } else {\n return anchor\n }\n })\n return sorted\n}\n/**\n * sort array by key\n */\nexport function sortByKey<\n T, \n K extends keyof T,\n>(array: T[], key: K, reverse = false) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const condi = (a: any, b: any) => { return a < b }\n\n const sorted = sortByCondi(array, key, condi, reverse)\n return sorted\n}\n/**\n * sort by key with a certain order\n */\nexport function sortByArr<\n T, \n K extends keyof T,\n>(array: T[], key: K, order: unknown[], reverse = false) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const condi = (a: any, b: any) => {\n return order.indexOf(a) < order.indexOf(b)\n }\n\n const sorted = sortByCondi(array, key, condi, reverse)\n return sorted\n}","export function randomStrGenerator(length=20):string{\n let result = ''\n const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'\n\n for (let i = 0; i < length; i++) {\n result += characters.charAt(Math.floor(Math.random() * characters.length))\n }\n\n return result\n}\n\nexport function getRandomInt(max: number) {\n return Math.floor(Math.random() * max)\n}\nexport function getRandomBetween(min: number, max: number, isFloat = false) {\n const randomVal = Math.random() * (max - min) + min\n if (isFloat) {\n return randomVal\n }\n return Math.floor(randomVal)\n}","import type { SxProps, Theme } from '@mui/material/styles'\n\n/** Values accepted by {@link mergeSx}: objects, callbacks, arrays (nested ok), or omitted. */\nexport type SxMergePart =\n | SxProps<Theme>\n | Record<string, unknown>\n | ReadonlyArray<SxMergePart>\n | false\n | null\n | undefined\n\nfunction flattenSx(part: unknown): unknown[] {\n if (part == null || typeof part === 'boolean') {\n return []\n }\n if (Array.isArray(part)) {\n return part.flatMap(flattenSx)\n }\n if (typeof part === 'function' || typeof part === 'object') {\n return [part]\n }\n return []\n}\n\n/**\n * Combine MUI `sx` values into one prop.\n *\n * Nested arrays are flattened (`[base, [a, b]]` → `[base, a, b]`).\n * `null` / `undefined` / `false` entries are dropped. Later parts win,\n * same as MUI's `sx` array merge.\n */\nexport function mergeSx(...parts: SxMergePart[]): SxProps<Theme> | undefined {\n const list = parts.flatMap(flattenSx)\n if (list.length === 0) {\n return undefined\n }\n if (list.length === 1) {\n return list[0] as SxProps<Theme>\n }\n return list as SxProps<Theme>\n}\n","export * from './array'\nexport * from './random'\nexport * from './sx'","import React, { forwardRef, } from 'react'\nimport Box, { type BoxProps} from '@mui/material/Box'\nimport { mergeSx } from '@/_utils/_func'\n\nconst spanPx = 5\nconst fieldsetPx = 4\n\ntype Props = {\n\tchildren: React.ReactNode, \n\ttitle?: string,\n\terror?: boolean,\n\tpyPx?: number,\n\tpxPx?: number,\n} & BoxProps\n/**\n * A Mui TextField like Box with a title and a border.\n * \n * Props options:\n * \n * @property {ReactNode} children - Whatever go inside the box.\n * @property {string} title - The left top title.\n * @property {string} error - change border-color to red.\n * @property {number} pyPx - padding top and bottom.\n * @property {number} pxPx - padding left and right.\n * @property {Record<string, unknown>} ...rest - Box props to the outer box.\n * @example\n * ### Example\n * ```js\n * const B = () => (\n * <BorderBox title=\"title\" error={false} ref={ref}>\n * something inside\n * </BorderBox>)\n * ```\n */\nconst BorderBox = forwardRef<HTMLDivElement,Props>(({ \n\ttitle, children,pyPx=8,pxPx=12, error=false,\n sx,\n\t...rest\n},ref) => {\n\t\n\treturn (\n\t\t<Box // control-root\n\t\tcomponent=\"div\"\n\t\tref={ref}\n\t\tstyle={{\n\t\t\t\"--border-radius\": \"var(--mui-shape-borderRadius)\",\n\t\t\t\"--py\": `${pyPx}px`,\n\t\t\t\"--px\": `${pxPx}px`,\n\t\t\t\"--span-px\": `${spanPx}px`,\n\t\t\t\"--fieldset-px\": `${fieldsetPx}px`, \n\t\t\t\"--border-color-local\": error ? \"var(--mui-palette-error-main)\" : \"var(--mui-palette-border-1)\",\n\t\t\t\"--color-content-local\": error ? \"var(--mui-palette-error-main)\" : \"var(--mui-palette-text-primary)\",\n\t\t\t\"--color-local\": error ? \"var(--mui-palette-error-main)\" : \"var(--mui-palette-text-grey-1)\",\n\t\t\t\"--hover-border-color-local\": error ? \"var(--mui-palette-error-dark)\" : \"var(--mui-palette-border-hover-1)\",\n\t\t\tminWidth: 0,\n\t\t}}\n\t\tsx={mergeSx(\n\t\t\t{ // inputbase-root\n\t\t\tdisplay: 'inline-flex',\n\t\t\tflexDirection: 'column',\n\t\t\tposition: 'relative',\n\t\t\tminWidth: 0,\n\t\t\tpadding: 0, \n\t\t\tpaddingTop:`var(--py)`, paddingBottom:`var(--py)`, // avoid title overlap\n\t\t\tmargin: 0,\n\t\t\tborder: 0,\n\t\t\tverticalAlign: 'top',\n\t\t\tcursor: 'auto',\n\t\t\t\"&:hover>div>fieldset\": {\n\t\t\t\tborderColor:\"var(--hover-border-color-local)\",\n\t\t\t},\n\t\t},\n\t\t\tsx,\n\t\t)}\n\t\t{...rest}\n\t\t>\n\t\t\t<Box sx={{ // input\n\t\t\t\tletterSpacing: '0.00938em',\n\t\t\t\tboxSizing: 'border-box',\n\t\t\t\tposition: 'relative',\n\t\t\t\talignItems: 'center',\n\t\t\t\tdisplay: 'block',\n\t\t\t\tborderRadius:'var(--border-radius)',\n\t\t\t\twidth:\"100%\",\n\t\t\t}}>\n\t\t\t\t<Box sx={{\n\t\t\t\t\tpaddingLeft:`var(--px)`, paddingRight:`var(--px)`,\n\t\t\t\t\tpaddingTop:`var(--py)`, paddingBottom:`var(--py)`,\n\t\t\t\t\tfontWeight: 400,\n\t\t\t\t\tfontSize: '1rem',\n\t\t\t\t\tlineHeight: '1.4375em',\n\t\t\t\t\twidth:\"-webkit-fill-available\",\n\t\t\t\t\tminHeight:\"1rem\",\n\t\t\t\t\tcolor:\"var(--color-content-local)\",\n\t\t\t\t}} >{children}</Box>\n\t\t\t\t<Box component=\"fieldset\" sx={{\n\t\t\t\t\ttextAlign: 'left',\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\tbottom: 0,\n\t\t\t\t\tright: 0,\n\t\t\t\t\ttop: `calc(var(--py)*-1)`,\n\t\t\t\t\tleft: 0,\n\t\t\t\t\tpaddingLeft:\"var(--fieldset-px)\", paddingRight:\"var(--fieldset-px)\",\n\t\t\t\t\tmargin:0,\n\t\t\t\t\tpointerEvents: 'none',\n\t\t\t\t\tborderRadius: 'inherit',\n\t\t\t\t\tborder:\"1px solid\",\n\t\t\t\t\tborderColor:\"var(--border-color-local)\",\n\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\tminWidth: '0%',\n\t\t\t\t\t\n\t\t\t\t}}>\n\t\t\t\t\t<Box component=\"legend\" sx={{\n\t\t\t\t\t\tfloat: 'unset',\n\t\t\t\t\t\twidth: 'auto',\n\t\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\t\tdisplay: 'block',\n\t\t\t\t\t\tpadding: 0,\n\t\t\t\t\t\theight: \"1em\",\n\t\t\t\t\t\tvisibility: 'hidden',\n\t\t\t\t\t\tmaxWidth: '100%',\n\t\t\t\t\t\twhiteSpace: 'nowrap',\n\t\t\t\t\t}}>\n\t\t\t\t\t\t{title && <Box component=\"span\" sx={{\n\t\t\t\t\t\t\tpaddingLeft:\"var(--span-px)\", paddingRight:\"var(--span-px)\",\n\t\t\t\t\t\t\tvisibility: 'visible',\n\t\t\t\t\t\t\tfontSize: '0.7em',\n\t\t\t\t\t\t\tlineHeight: '1.4375em',\n\t\t\t\t\t\t\tletterSpacing: '0.00938em',\n\t\t\t\t\t\t\tfontWeight: 400,\n\t\t\t\t\t\t\tdisplay: 'block',\n\t\t\t\t\t\t\theight: '100%',\n\t\t\t\t\t\tfontFamily: 'inherit',\n\t\t\t\t\t\t\ttextOverflow: 'ellipsis',\n\t\t\t\t\t\t\tcolor:\"var(--color-local)\",\n\t\t\t\t\t\t}}>\n\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t</Box>}\n\t\t\t\t\t</Box>\n\t\t\t\t</Box>\n\t\t\t</Box>\n\t\t</Box>\n\t)\n})\n\nexport default BorderBox\n\n/*\nshift = px-5+8\n*/","export {default as BorderBox} from './BorderBox'","export * from './BorderBox'\nexport {default as Box} from '@mui/material/Box'\nexport {default as Stack} from '@mui/material/Stack'\nexport {default as Grid} from '@mui/material/Grid'\n","export * from './src'","export { default } from '@mui/material/Typography'","import React from 'react'\nimport Typography, {type TypographyProps} from '@mui/material/Typography'\n\n/**\n * Mui Typography with variant h5\n * \n * [Doc](https://material-ui.com/api/typography/)\n */\nexport function Header(props: { children?: React.ReactNode } & TypographyProps) {\n\treturn <Typography variant=\"h5\" {...props} />\n}\n\n\n/**\n * Mui Typography with variant h6\n * \n * [Doc](https://material-ui.com/api/typography/)\n */\nexport function SubHeader(props: TypographyProps) {\n\treturn <Typography variant=\"h6\" {...props} />\n}\n\n/**\n * Mui Typography with variant subtitle1\n * \n * [Doc](https://material-ui.com/api/typography/)\n */\nexport function SubTitle(props: TypographyProps) {\n\treturn <Typography variant=\"subtitle1\" {...props} />\n}\n\n/**\n * Mui Typography with variant caption\n * \n * [Doc](https://material-ui.com/api/typography/)\n */\nexport function Subscript(props: TypographyProps) {\n\treturn (\n\t\t<Typography\n\t\t\tvariant=\"caption\"\n\t\t\t{...props}\n\t\t\tsx={{\n\t\t\t\t...props.sx,\n\t\t\t\tcolor: props.color ?? 'var(--mui-palette-text-subscript)',\n\t\t\t}}\n\t\t/>\n\t)\n}\n\n/**\n * Mui Typography with variant body\n * \n * [Doc](https://material-ui.com/api/typography/)\n */\nexport function Body(props: TypographyProps) {\n\treturn <Typography variant=\"body1\" {...props} />\n}","import type { MuiComponentTheme } from '@/_utils/_types'\n\nexport const typographyTheme = {\n styleOverrides: {\n root: ()=>({\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n \n \"&:has(svg)\":{\n display: 'inline-flex',\n alignItems: 'center',\n \"&>svg\":{\n fontSize: '1em',\n \n },\n },\n \n }),\n caption: {\n lineHeight: 1,\n },\n \n }\n\n} as const satisfies MuiComponentTheme<\"MuiTypography\">","export {default as Typography} from './Typography'\nexport * from './Variants'\nexport * from './theme'","export * from './src'","import React from 'react';\n\nimport MuiButton from '@mui/material/Button';\nimport { Box } from '@/ele/Box';\nimport { mergeSx } from '@/_utils/_func';\n\n/**\n * A modified MUI Button that truncates long text with ellipsis.\n * \n * [Doc](https://mui.com/material-ui/react-button/)\n * [API](https://mui.com/material-ui/api/button/)\n */\nexport default function Button(p:\n React.ComponentProps<typeof MuiButton> & {\n slotProps?: {\n innerBox?: React.ComponentProps<typeof Box>\n }\n }) {\n const {children, slotProps, ...rest} = p\n const {sx, ...boxRest} = slotProps?.innerBox ?? {}\n return <MuiButton {...rest}>\n <Box \n {...boxRest}\n sx={mergeSx(\n {\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n whiteSpace: 'pre',\n },\n sx,\n )}>\n {children}\n </Box>\n </MuiButton>\n}","import type { MuiComponentTheme } from '@/_utils/_types'\n\nexport const buttonTheme = {\n defaultProps: {\n variant: 'outlined',\n focusRipple: false,\n disableRipple: true,\n size: 'small',\n },\n styleOverrides: {\n root: {\n textTransform: 'capitalize',\n // MUI Button defaults to 250ms bg/color/border-color. Snap palette\n // token flips instead of interpolating. :active scale stays a snap\n // transform (no transform transition).\n transition: 'background-color 0s, border-color 0s, color 0s, box-shadow 0s',\n\n '--button-color':'var(--mui-palette-text-primary)',\n '--button-filled-bg':'var(--mui-palette-primary-background)',\n '--button-hover-border-color':'var(--mui-palette-border-hover-1)',\n\n \"--variant-outlinedColor\":\"var(--button-color)\",\n \"--variant-outlinedBg\":\"transparent\",\n\n \"--variant-containedColor\":\"var(--button-color)\",\n \"--variant-containedBg\":\"var(--button-filled-bg)\",\n\n \"--variant-textBorderColor\": 'transparent',\n \"&:hover\": {\n \"--variant-textBorderColor\":\"var(--button-hover-border-color)\",\n },\n\n \"&.MuiButton-colorError\":{\n '--button-color':'var(--mui-palette-error-main)',\n '--button-filled-bg':'var(--mui-palette-error-background)',\n '--button-hover-border-color':'var(--mui-palette-error-dark)',\n },\n \"&.MuiButton-colorInfo\":{\n '--button-color':'var(--mui-palette-info-main)',\n '--button-filled-bg':'var(--mui-palette-info-background)',\n '--button-hover-border-color':'var(--mui-palette-info-dark)',\n },\n \"&.MuiButton-colorSuccess\":{\n '--button-color':'var(--mui-palette-success-dark)',\n '--button-filled-bg':'var(--mui-palette-success-background)',\n '--button-hover-border-color':'var(--mui-palette-success-dark)',\n },\n \"&.MuiButton-colorWarning\":{\n '--button-color':'var(--mui-palette-warning-main)',\n '--button-filled-bg':'var(--mui-palette-warning-background)',\n '--button-hover-border-color':'var(--mui-palette-warning-dark)',\n },\n \"&.MuiButton-colorSystem\":{\n '--button-color':'var(--mui-palette-system-main)',\n '--button-filled-bg':'var(--mui-palette-system-background)',\n '--button-hover-border-color':'var(--mui-palette-system-dark)',\n },\n \"&.MuiButton-colorInsight\":{\n '--button-color':'var(--mui-palette-insight-main)',\n '--button-filled-bg':'var(--mui-palette-insight-background)',\n '--button-hover-border-color':'var(--mui-palette-insight-dark)',\n },\n \"&.MuiButton-colorSecondary\":{\n '--button-color':'var(--mui-palette-secondary-main)',\n '--button-filled-bg':'var(--mui-palette-secondary-background)',\n '--button-hover-border-color':'var(--mui-palette-border-hover-1)',\n },\n \"&.MuiButton-colorPrimary\":{\n '--button-color':'var(--mui-palette-primary-emphasis)',\n '--button-filled-bg':'var(--mui-palette-container-bg-primary)',\n '--button-hover-border-color':'var(--mui-palette-primary-emphasis)',\n\n '--variant-outlinedBorder': 'color-mix(in lab, var(--mui-palette-primary-emphasis), transparent 62%)',\n '--variant-textColor':'var(--mui-palette-primary-emphasis)',\n '--variant-containedColor':'var(--mui-palette-text-primary)',\n\n '&.MuiButton-outlined': {\n color: 'var(--mui-palette-primary-emphasis)',\n borderColor: 'color-mix(in lab, var(--mui-palette-primary-emphasis), transparent 62%)',\n '&:hover': {\n color: 'var(--mui-palette-primary-emphasis)',\n borderColor: 'var(--mui-palette-primary-emphasis)',\n backgroundColor: 'color-mix(in lab, var(--mui-palette-primary-emphasis), transparent 94%)',\n },\n },\n '&.MuiButton-contained': {\n color: 'var(--mui-palette-primary-emphasis)',\n backgroundColor: 'var(--mui-palette-container-bg-primary)',\n '&:hover': {\n color: 'var(--mui-palette-primary-emphasis)',\n borderColor: 'var(--mui-palette-border-hover-1)',\n backgroundColor: 'var(--mui-palette-container-bg-primary)',\n },\n },\n '&.MuiButton-text': {\n color: 'var(--mui-palette-primary-emphasis)',\n '&:hover': {\n color: 'var(--mui-palette-primary-emphasis)',\n borderColor: 'var(--mui-palette-primary-emphasis)',\n backgroundColor: 'color-mix(in lab, var(--mui-palette-primary-emphasis), transparent 94%)',\n },\n },\n },\n\n \"&:active\": {\n scale:\"0.9\",\n },\n },\n outlined: {\n \"&:hover\": {\n borderColor: 'var(--button-hover-border-color)',\n },\n },\n contained: {\n boxShadow: 'none',\n border:'1px solid transparent',\n '&:hover': {\n boxShadow: 'none',\n borderColor: 'var(--button-hover-border-color)',\n backgroundColor: 'var(--button-filled-bg)',\n },\n },\n\n text: {\n border:'1px solid transparent',\n borderColor: 'var(--variant-textBorderColor)',\n },\n }\n\n} as const satisfies MuiComponentTheme<\"MuiButton\">\n\nexport const buttonBaseTheme = {\n styleOverrides: {\n root: {\n textTransform: 'capitalize',\n },\n }\n \n} as const satisfies MuiComponentTheme<\"MuiButtonBase\">","export {default as Button} from './Button'\nexport * from './themes'","import type { MuiComponentTheme } from '@/_utils/_types'\n\nexport const tooltipTheme = {\n defaultProps: {\n arrow: true,\n },\n styleOverrides: {\n tooltip: {},\n arrow: {},\n }\n\n} as const satisfies MuiComponentTheme<\"MuiTooltip\">\n","export {default as Tooltip} from '@mui/material/Tooltip'\nexport * from './theme'\n","export * from './Tooltip'\n","export * from './src'\n","'use client'\nimport {forwardRef} from 'react'\nimport MuiIconButton from '@mui/material/IconButton'\nimport { Tooltip } from '@/ele/Tooltip'\nimport { type TooltipProps } from '@mui/material/Tooltip'\nimport { Box } from '@/ele/Box'\n\ntype IconButtonProps = React.ComponentProps<typeof MuiIconButton>\ntype Props = {\n /** The Icon to render */\n children: React.ReactNode;\n /** The title of the tooltip */\n title?: string;\n /** \n * The color theme of the entire component.\n * @default 'secondary' (from theme)\n */\n color?: IconButtonProps['color'];\n /**\n * The size of the component.\n * @default 'small' (from theme)\n */\n size?: IconButtonProps['size'];\n \n selected?: boolean;\n \n slotProps?: {\n tooltip?: Omit<TooltipProps, \"children\">\n };\n} & Omit<IconButtonProps, \"color\" | \"size\">;\n\n/**\n * A MuiIconButton wrapped in a MuiTooltip.\n * Default props like `size` and `color` are handled by the theme.\n */\nconst IconButton = forwardRef<HTMLButtonElement, Props>(({\n title = \"\",\n children,\n color,\n size,\n slotProps,\n selected,\n className,\n ...props\n}, ref) => {\n return (\n <Tooltip \n title={title} \n slotProps={{\n popper: {\n sx: {\n textTransform: \"capitalize\",\n }\n },\n ...slotProps?.tooltip\n }}\n >\n <Box component=\"span\" sx={{width: \"fit-content\"}}>\n <MuiIconButton\n ref={ref}\n color={color}\n size={size}\n className={[className, selected ? 'Mui-selected' : ''].filter(Boolean).join(' ')}\n {...props}\n >\n {children}\n </MuiIconButton>\n </Box>\n </Tooltip>\n )\n})\n\nexport default IconButton","'use client'\nimport { styled } from '@mui/material/styles'\n\nimport IconButton from './IconButton'\n\nexport default styled(IconButton)({\n \"&:hover svg\": {\n transform:\"rotate(360deg)\",\n transition:\"transform 0.3s ease-in-out\",\n },\n})","'use client'\nimport { forwardRef, useState, useEffect, type ComponentProps } from 'react'\nimport { Box } from '@/ele/Box'\nimport IconButton from './IconButton'\n\n// reuse the public prop types from the regular IconButton component; this\n// automatically keeps the two in sync and avoids exporting an explicit\n// `Props` type from IconButton.tsx.\nexport type IconButtonFadeProps = ComponentProps<typeof IconButton> & {\n /**\n * element that is shown temporarily when the button is activated (usually\n * another icon). the component will fade from `children` to this element\n * and then automatically back again after `fadeDuration`.\n */\n fadeIcon: React.ReactNode;\n /** how long (in ms) the fade icon remains visible before reverting */\n fadeDuration?: number;\n};\n\nconst IconButtonFade = forwardRef<HTMLButtonElement, IconButtonFadeProps>(({\n fadeIcon,\n fadeDuration = 1000,\n children,\n onClick,\n ...rest\n}, ref) => {\n const [active, setActive] = useState(false);\n\n const handleClick: React.MouseEventHandler<HTMLButtonElement> = (e) => {\n onClick?.(e);\n setActive(true);\n };\n\n useEffect(() => {\n if (!active) return;\n const timer = setTimeout(() => setActive(false), fadeDuration);\n return () => clearTimeout(timer);\n }, [active, fadeDuration]);\n\n return (\n <IconButton\n ref={ref}\n {...rest}\n onClick={handleClick}\n >\n <Box sx={{ position: 'relative', display: 'inline-flex' }}>\n <Box\n sx={{\n opacity: active ? 0 : 1,\n transition: 'opacity 0.2s ease-in-out',\n }}\n >\n {children}\n </Box>\n <Box\n sx={{\n position: 'absolute',\n top: 0,\n left: 0,\n opacity: active ? 1 : 0,\n transition: 'opacity 0.2s ease-in-out',\n }}\n >\n {fadeIcon}\n </Box>\n </Box>\n </IconButton>\n )\n})\n\nexport default IconButtonFade\n","import type { MuiComponentTheme } from '@/_utils/_types'\n\nexport const iconButtonTheme = {\n defaultProps: {\n focusRipple: false,\n disableRipple: true,\n color: 'secondary',\n size: 'small',\n },\n styleOverrides: {\n root: ({theme}) =>({\n // MUI IconButton defaults to 150ms background-color. Drop color\n // interpolation; :active scale stays a snap transform.\n transition: 'background-color 0s, border-color 0s, color 0s',\n '--button-color':'var(--mui-palette-text-primary)',\n '--button-hover-border-color':'var(--mui-palette-border-hover-1)',\n \"&.MuiIconButton-colorError\":{\n '--button-color':'var(--mui-palette-error-main)',\n '--button-hover-border-color':'var(--mui-palette-error-dark)',\n },\n \"&.MuiIconButton-colorInfo\":{\n '--button-color':'var(--mui-palette-info-main)',\n '--button-hover-border-color':'var(--mui-palette-info-dark)',\n },\n \"&.MuiIconButton-colorSuccess\":{\n '--button-color':'var(--mui-palette-success-dark)',\n '--button-hover-border-color':'var(--mui-palette-success-dark)',\n },\n \"&.MuiIconButton-colorWarning\":{\n '--button-color':'var(--mui-palette-warning-main)',\n '--button-hover-border-color':'var(--mui-palette-warning-dark)',\n },\n \"&.MuiIconButton-colorSecondary\":{\n '--button-color':'var(--mui-palette-secondary-dark)',\n '--button-hover-border-color':'var(--mui-palette-secondary-main)',\n },\n \"&.MuiIconButton-colorPrimary\":{\n '--button-color':'var(--mui-palette-primary-emphasis)',\n '--button-hover-border-color':'var(--mui-palette-primary-emphasis)',\n },\n \"&.MuiIconButton-colorSystem\":{\n '--button-color':'var(--mui-palette-system-main)',\n '--button-hover-border-color':'var(--mui-palette-system-dark)',\n },\n \"&.MuiIconButton-colorInsight\":{\n '--button-color':'var(--mui-palette-insight-main)',\n '--button-hover-border-color':'var(--mui-palette-insight-dark)',\n },\n\n '--color-p':'var(--button-color)',\n '--bg': 'color-mix(in lab,rgba(255, 255, 255, 0.04) 95%,var(--color-p) 5%)',\n padding: theme.spacing(0.5),\n borderRadius: '8px',\n \n color: 'var(--color-p)',\n\n backgroundColor:'var(--bg)',\n \"&:active svg\": {\n scale:\"0.9\",\n },\n\n \"&.Mui-disabled\":{\n '--color-p':'var(--mui-palette-action-disabled)',\n '--bg': 'color-mix(in lab,rgba(255, 255, 255, 0.04) 95%,var(--color-p) 5%)',\n color: 'var(--color-p)',\n backgroundColor:'var(--bg)',\n\n '& svg.MuiSvgIcon-root':{\n color: 'var(--color-p)',\n },\n },\n\n border: '1px solid transparent',\n \"&:hover\": {\n borderColor: 'color-mix(in lab, var(--mui-palette-border-1) 80%, var(--button-hover-border-color))',\n },\n\n \"&:active\": {\n scale:\"0.9\",\n },\n }),\n },\n\n} as const satisfies MuiComponentTheme<\"MuiIconButton\">","export {default as IconButton} from './IconButton'\nexport {default as IconButtonSpin} from './IconButton.HoverSpinnin'\nexport {default as IconButtonFade} from './IconButton.Fade'\nexport * from './theme'","import MuiChip, { type ChipProps } from '@mui/material/Chip'\n\n/**\n * A wrapper for Mui Chip\n */\nexport default function Chip({ color = 'default', ...props }: ChipProps) {\n return <MuiChip {...props} color={color} />\n}\n","import type { MuiComponentTheme } from '@/_utils/_types'\n\nexport const chipTheme = {\n defaultProps: {\n variant: 'outlined',\n size: 'small',\n },\n styleOverrides: {\n root: ({ theme }) => ({\n '--hover-shadow-color': 'var(--mui-palette-blink-golden)',\n\n \"&.MuiChip-clickable:active\": {\n scale:\"0.9\",\n boxShadow: 'none',\n },\n \n \"& .MuiChip-label\":{\n maxWidth: '100%',\n [theme.breakpoints.up('md')]: {\n maxWidth: '20vw',\n },\n },\n \"& .MuiChip-icon, & .MuiChip-deleteIcon\":{\n color:\"inherit\",\n },\n\n '&.MuiChip-colorInfo':{'--hover-shadow-color':'var(--mui-palette-info-main)',},\n '&.MuiChip-colorError':{'--hover-shadow-color':'var(--mui-palette-error-main)',},\n '&.MuiChip-colorSuccess':{'--hover-shadow-color':'var(--mui-palette-success-dark)',},\n '&.MuiChip-colorWarning':{'--hover-shadow-color':'var(--mui-palette-warning-main)',},\n '&.MuiChip-colorSecondary':{'--hover-shadow-color':'var(--mui-palette-secondary-main)',},\n '&.MuiChip-colorPrimary':{'--hover-shadow-color':'var(--mui-palette-blink-golden)',},\n '&.MuiChip-colorSystem':{'--hover-shadow-color':'var(--mui-palette-system-main)',},\n '&.MuiChip-colorInsight':{'--hover-shadow-color':'var(--mui-palette-insight-main)',},\n\n '&.MuiChip-colorDefault': {\n color: 'var(--mui-palette-text-primary)',\n },\n\n '&.MuiChip-filled.MuiChip-colorError': {\n color: 'var(--mui-palette-background-default)',\n },\n \n /** hover effect */\n position: \"relative\",\n \"&.MuiChip-clickable:hover\": {\n boxShadow: `\n 0 4px 10px -4px var(--hover-shadow-color), \n 0px 1px 1px 0px rgba(0, 0, 0, 0.14), \n 0px 1px 3px 0px rgba(0, 0, 0, 0.12)`,\n \"&:before\": {\n opacity: 1,\n },\n },\n \"&:before\": {\n content: '\"\"',\n position: \"absolute\",\n left: 0,\n insetBlockEnd: 0,\n display: \"block\",\n width:\"100%\",\n height: \"1px\",\n opacity: 0,\n backgroundImage:\"linear-gradient(to right, transparent, var(--hover-shadow-color), transparent)\",\n transition:\"all 0.1s ease-in-out\",\n },\n }),\n }\n\n} satisfies MuiComponentTheme<\"MuiChip\">","export {default as Chip} from './Chip'\nexport * from './themes'","export * from './Chip'","export * from './src'","export const tagButtonVars = {\n\t'--tag-color': 'var(--mui-palette-text-grey-1)',\n\t'--tag-bg': 'var(--mui-palette-background-grey-1)',\n\t'--tag-bg-hover': 'var(--mui-palette-focus-soft-1)',\n} as const\n","'use client'\nimport { Chip } from '@/ele/Chip'\nimport { styled } from '@mui/material/styles'\nimport { tagButtonVars } from './theme'\n\n/**\n * A styled Mui Chip component\n * \n * [Doc](https://mui.com/material-ui/react-chip/)\n */\nconst TagButton = styled(Chip,{\n \n})(() => ({\n ...tagButtonVars,\n\n '&.MuiChip-root':{\n maxWidth: 'fit-content',\n textTransform: 'lowercase',\n color:'var(--tag-color)',\n fontStyle: 'italic',\n padding: '2px 4px',\n \n border:'none',\n borderRadius: 'var(--mui-shape-borderRadius)', // use theme shape token\n fontSize: '12px',\n lineHeight: '16px',\n height:'auto',\n width:'auto',\n boxShadow:'none',\n gap:'2px',\n \n background:'var(--tag-bg)',\n transition: 'none',\n \n borderWidth: '0px',\n '&.MuiChip-clickable:hover': {\n background: 'var(--tag-bg-hover)',\n boxShadow: 'none',\n },\n '& .MuiChip-icon': {\n color: 'var(--tag-color)',\n fontSize: '1rem',\n margin:'0',\n padding:'0',\n },\n '& .MuiChip-label': {\n padding: '0 1px',\n\n margin:'0',\n marginRight:'4px',\n },\n '& .MuiChip-deleteIcon': {\n fontSize: '1rem',\n borderRadius: '50%',\n color: 'var(--tag-color)',\n margin:'0',\n },\n\n '& .MuiSvgIcon-root':{\n fontSize: '1em',\n }\n },\n}))\nexport default TagButton","export {default as TagButton} from './TagButton'","export * from './Button'\nexport * from './IconButton'\nexport * from './TagButton'","export * from './src';","import React from 'react'\nimport MuiBadge from '@mui/material/Badge'\n\ntype BadgeProps = {\n style_variant?: 'filled' | 'outlined';\n}\n/**\n * A styled Mui Badge component\n * \n * [Doc](https://mui.com/material-ui/api/badge/)\n * \n * @example\n * ```tsx\n * <MuiBadge badgeContent={4}>\n * <IconButton>\n * <MailIcon/>\n * </IconButton>\n * </MuiBadge>\n * ```\n */\nexport default function Badge(p: \n React.ComponentProps<typeof MuiBadge> \n & BadgeProps\n) {\n const {style_variant, variant, className, ...rest} = p;\n const badge_var_class = \n style_variant === 'outlined' ? 'badge-outlined'\n : style_variant === 'filled' ? 'badge-filled'\n : 'badge-outlined';\n\n return <MuiBadge {...rest} variant={variant} className={badge_var_class + (className ? ` ${className}` : '')} />\n}\n","import type { MuiComponentTheme } from '@/_utils/_types'\n\nexport const badgeTheme = {\n defaultProps: {\n },\n styleOverrides: {\n root: {\n \"& .MuiBadge-badge\": {\n background: 'var(--badge-bg-color)',\n color: 'var(--badge-text-color)',\n border: '1px solid var(--badge-br-color)',\n backdropFilter: 'blur(2px)',\n maxWidth: '50px',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n justifyContent: 'flex-start',\n },\n \"&.badge-outlined,&\":{\n '--badge-bg-color': 'transparent',\n },\n \"&.badge-filled\":{\n '--badge-bg-color': 'var(--mui-palette-secondary-main)',\n '--badge-text-color': 'var(--mui-palette-background-default)',\n },\n\n '--badge-text-color': 'var(--mui-palette-secondary-main)',\n '--badge-br-color': 'var(--mui-palette-secondary-main)',\n\n /** primary */\n \"& .MuiBadge-colorPrimary\":{\n '--badge-br-color': 'var(--mui-palette-primary-emphasis)',\n '--badge-text-color': 'var(--mui-palette-primary-emphasis)',\n },\n \"&.badge-filled .MuiBadge-colorPrimary\":{\n '--badge-bg-color': 'var(--mui-palette-primary-emphasis)',\n '--badge-text-color': 'var(--mui-palette-primary-contrast)',\n },\n\n /** secondary */\n \"&.badge-filled .MuiBadge-colorSecondary\":{\n '--badge-bg-color': 'var(--mui-palette-secondary-main)',\n '--badge-text-color': 'var(--mui-palette-background-default)',\n },\n \"& .MuiBadge-colorSecondary\":{\n '--badge-br-color': 'var(--mui-palette-secondary-main)',\n '--badge-text-color': 'var(--mui-palette-secondary-main)',\n },\n\n /** error */\n \"&.badge-filled .MuiBadge-colorError\":{\n '--badge-bg-color': 'var(--mui-palette-error-main)',\n '--badge-text-color': 'var(--mui-palette-background-default)',\n },\n \"& .MuiBadge-colorError\":{\n '--badge-br-color': 'var(--mui-palette-error-main)',\n '--badge-text-color': 'var(--mui-palette-error-main)',\n },\n /** info */\n \"&.badge-filled .MuiBadge-colorInfo\":{\n '--badge-bg-color': 'var(--mui-palette-info-main)',\n '--badge-text-color': 'var(--mui-palette-info-contrastText)',\n },\n \"& .MuiBadge-colorInfo\":{\n '--badge-br-color': 'var(--mui-palette-info-main)',\n '--badge-text-color': 'var(--mui-palette-info-main)',\n },\n /** success */\n \"&.badge-filled .MuiBadge-colorSuccess\":{\n '--badge-bg-color': 'var(--mui-palette-success-main)',\n '--badge-text-color': 'var(--mui-palette-success-contrastText)',\n },\n \"& .MuiBadge-colorSuccess\":{\n '--badge-br-color': 'var(--mui-palette-success-main)',\n '--badge-text-color': 'var(--mui-palette-success-main)',\n },\n /** warning */\n \"&.badge-filled .MuiBadge-colorWarning\":{\n '--badge-bg-color': 'var(--mui-palette-warning-main)',\n '--badge-text-color': 'var(--mui-palette-warning-contrastText)',\n },\n \"& .MuiBadge-colorWarning\":{\n '--badge-br-color': 'var(--mui-palette-warning-main)',\n '--badge-text-color': 'var(--mui-palette-warning-main)',\n },\n /** system */\n \"&.badge-filled .MuiBadge-colorSystem\":{\n '--badge-bg-color': 'var(--mui-palette-system-main)',\n '--badge-text-color': 'var(--mui-palette-system-contrastText)',\n },\n \"& .MuiBadge-colorSystem\":{\n '--badge-br-color': 'var(--mui-palette-system-main)',\n '--badge-text-color': 'var(--mui-palette-system-main)',\n },\n /** insight */\n \"&.badge-filled .MuiBadge-colorInsight\":{\n '--badge-bg-color': 'var(--mui-palette-insight-main)',\n '--badge-text-color': 'var(--mui-palette-insight-contrastText)',\n },\n \"& .MuiBadge-colorInsight\":{\n '--badge-br-color': 'var(--mui-palette-insight-main)',\n '--badge-text-color': 'var(--mui-palette-insight-main)',\n },\n },\n }\n\n} as const satisfies MuiComponentTheme<\"MuiBadge\">","export {default as Badge} from './Badge'\nexport * from './theme'\nexport * from './theme'","export * from './Badge'","export * from './src'","export { default as ClickAwayListener } from '@mui/material/ClickAwayListener';\nexport { default as Popper } from '@mui/material/Popper';\n","export * from './src';\n","// display\nexport {default as ArrowIcon} from '@mui/icons-material/ArrowRightAlt'\nexport {default as FileIcon} from '@mui/icons-material/DescriptionOutlined'\nexport {default as DescriptionIcon} from '@mui/icons-material/Description'\nexport {default as PictureAsPdfIcon} from '@mui/icons-material/PictureAsPdf'\nexport {default as AudioFileIcon} from '@mui/icons-material/AudioFile'\nexport {default as VideoFileIcon} from '@mui/icons-material/VideoFile'\nexport {default as TableChartIcon} from '@mui/icons-material/TableChart'\nexport {default as FolderZipIcon} from '@mui/icons-material/FolderZip'\nexport {default as InsertDriveFileIcon} from '@mui/icons-material/InsertDriveFile'\nexport {default as ImageIcon} from '@mui/icons-material/ImageOutlined'\nexport {default as LayersIcon} from '@mui/icons-material/LayersOutlined'\nexport {default as TextIcon} from '@mui/icons-material/TextFormat'\nexport {default as RemoveIcon} from '@mui/icons-material/Remove'\nexport {default as AddFileIcon} from '@mui/icons-material/PostAdd'\nexport {default as ErrorIcon} from '@mui/icons-material/ErrorOutline'\nexport {default as QuestionIcon} from '@mui/icons-material/QuestionMarkOutlined'\nexport {default as RoomIcon} from '@mui/icons-material/MeetingRoomOutlined'\nexport {default as BlacklistIcon} from '@mui/icons-material/PlaylistRemove'\nexport {default as WhitelistIcon} from '@mui/icons-material/ChecklistRtl'\nexport {default as NoImageIcon} from '@mui/icons-material/HideImageOutlined'\nexport {default as EyeIcon} from '@mui/icons-material/RemoveRedEyeTwoTone'\nexport {default as CropSizeIcon} from '@mui/icons-material/PhotoSizeSelectLarge'\nexport {default as AdminIcon} from '@mui/icons-material/LockPersonOutlined'\nexport {default as UserIcon} from '@mui/icons-material/Person'\nexport {default as EmoticonIcon} from '@mui/icons-material/InsertEmoticon'\nexport {default as DisabledSelectionIcon} from '@mui/icons-material/RemoveDoneOutlined'\nexport {default as TagIcon} from '@mui/icons-material/Tag'\nexport {default as AudioIcon} from '@mui/icons-material/Audiotrack'\nexport {default as VideoIcon} from '@mui/icons-material/Videocam'\nexport {default as CodeIcon} from '@mui/icons-material/Code'\nexport {default as ChartIcon} from '@mui/icons-material/Equalizer'\nexport {default as TableIcon} from '@mui/icons-material/PivotTableChart'\nexport {default as SearchIcon} from '@mui/icons-material/Search'\nexport {default as DataObjectIcon} from '@mui/icons-material/DataObject'\nexport {default as A2ZIcon} from '@mui/icons-material/SortByAlpha'\nexport {default as ThumbUpIcon} from '@mui/icons-material/ThumbUp'\nexport {default as MoneyIcon} from '@mui/icons-material/AttachMoneyOutlined'\nexport {default as ServerIcon} from '@mui/icons-material/Storage'\nexport {default as CerticateIcon} from '@mui/icons-material/WorkspacePremium'\nexport {default as NumberIcon} from '@mui/icons-material/Numbers'\nexport {default as SumIcon} from '@mui/icons-material/Functions'\nexport {default as LightBulbIcon} from '@mui/icons-material/Lightbulb'\nexport {default as RotateIcon} from '@mui/icons-material/CropRotate'\nexport {default as ImageSzieScaleIcon} from '@mui/icons-material/PhotoSizeSelectLarge'\nexport {default as CollectionIcon} from '@mui/icons-material/CollectionsBookmark'\nexport {default as HistoryIcon} from '@mui/icons-material/Schedule'\nexport {default as StyleIcon} from '@mui/icons-material/Style'\nexport {default as ARHorizontalIcon} from '@mui/icons-material/Crop169'\nexport {default as ARSquareIcon} from '@mui/icons-material/CropSquare'\nexport {default as VoiceIcon} from '@mui/icons-material/GraphicEqRounded'\nexport {default as MemoryIcon} from '@mui/icons-material/MemoryRounded'\n\n// button\nexport {default as AddCircleIcon} from '@mui/icons-material/AddCircleOutlineRounded'\nexport {default as AddIcon} from '@mui/icons-material/Add'\nexport {default as CloseIcon} from '@mui/icons-material/Close'\nexport {default as ExpandMoreIcon} from '@mui/icons-material/ExpandMore'\nexport {default as AutorenewIcon} from '@mui/icons-material/Autorenew'\nexport {default as CheckCircleIcon} from '@mui/icons-material/CheckCircle'\nexport {default as MenuIcon} from '@mui/icons-material/Menu'\nexport {default as MoreIcon} from '@mui/icons-material/MoreVert'\nexport {default as MoreHorizIcon} from '@mui/icons-material/MoreHoriz'\nexport {default as CopyIcon} from '@mui/icons-material/ContentCopy'\nexport {default as PasteIcon} from '@mui/icons-material/ContentPaste'\nexport {default as CloudIcon} from '@mui/icons-material/Cloud'\nexport {default as DownloadIcon} from '@mui/icons-material/DownloadOutlined'\nexport {default as DownloadDoneIcon} from '@mui/icons-material/DownloadDoneOutlined'\nexport {default as StartIcon} from '@mui/icons-material/StarBorderOutlined'\nexport {default as DeleteIcon} from '@mui/icons-material/DeleteForever'\nexport {default as LayerClearIcon } from '@mui/icons-material/LayersClear'\nexport {default as CheckIcon } from '@mui/icons-material/Check'\nexport {default as CheckAllIcon } from '@mui/icons-material/DoneAll'\nexport {default as PowerIcon } from '@mui/icons-material/PowerSettingsNew'\nexport {default as SendIcon } from '@mui/icons-material/Send'\nexport {default as ZoomInIcon } from '@mui/icons-material/ZoomInMap'\nexport {default as ZoomOutIcon } from '@mui/icons-material/ZoomOutMap'\nexport {default as ToolIcon } from '@mui/icons-material/HomeRepairService'\nexport {default as ConstructionIcon } from '@mui/icons-material/Construction'\nexport {default as HelpIcon } from '@mui/icons-material/Help'\nexport {default as ReportIcon } from '@mui/icons-material/EmojiFlags'\nexport {default as EditIcon } from '@mui/icons-material/Edit'\nexport {default as ForkIcon } from '@mui/icons-material/ForkRight'\nexport {default as SettingIcon } from '@mui/icons-material/Settings'\nexport {default as RestoreIcon } from '@mui/icons-material/Restore'\nexport {default as EditListIcon } from '@mui/icons-material/EditNote'\nexport {default as HomeIcon } from '@mui/icons-material/HomeOutlined'\nexport {default as EnterRoomIcon } from '@mui/icons-material/ExitToAppOutlined'\nexport {default as SunIcon} from '@mui/icons-material/WbSunnyOutlined'\nexport {default as MoonIcon} from '@mui/icons-material/DarkModeOutlined'\nexport {default as AttachFileIcon} from '@mui/icons-material/AttachFileOutlined'\nexport {default as NoteAddIcon} from '@mui/icons-material/NoteAdd'\nexport {default as CloudUploadIcon} from '@mui/icons-material/CloudUpload'\nexport {default as DoubleRightArrowIcon} from '@mui/icons-material/KeyboardDoubleArrowRight'\nexport {default as DoubleLeftArrowIcon} from '@mui/icons-material/KeyboardDoubleArrowLeft'\nexport {default as DoubleArrowIcon} from '@mui/icons-material/KeyboardDoubleArrowRightRounded'\nexport {default as FitScreenIcon} from '@mui/icons-material/FitScreen'\nexport {default as FullscreenIcon} from '@mui/icons-material/Fullscreen'\nexport {default as TestIcon} from '@mui/icons-material/Biotech'\nexport {default as ShareIcon} from '@mui/icons-material/Share'\nexport {default as FilterIcon} from '@mui/icons-material/FilterAlt'\nexport {default as SyncIcon} from '@mui/icons-material/Sync'\nexport {default as PlayIcon} from '@mui/icons-material/PlayArrow'\nexport {default as PauseIcon} from '@mui/icons-material/PauseOutlined'\nexport {default as RandomIcon} from '@mui/icons-material/Casino'\nexport {default as CoinIcon} from '@mui/icons-material/Paid'\nexport {default as SaveChangesIcon} from '@mui/icons-material/Save'\nexport {default as StopIcon} from '@mui/icons-material/StopRounded'\nexport {default as ReplayIcon} from '@mui/icons-material/Replay'\nexport {default as TreeIcon} from '@mui/icons-material/AccountTree'\nexport {default as ClearIcon} from '@mui/icons-material/Close'\nexport {default as KeyboardArrowDownIcon} from '@mui/icons-material/KeyboardArrowDown'\nexport {default as KeyboardArrowRightIcon} from '@mui/icons-material/KeyboardArrowRight'\nexport {default as SearchRoundedIcon} from '@mui/icons-material/SearchRounded'\nexport {default as CloseRoundedIcon} from '@mui/icons-material/CloseRounded'\nexport {default as SortByAlphaRoundedIcon} from '@mui/icons-material/SortByAlphaRounded'\nexport {default as FilterAltOutlinedIcon} from '@mui/icons-material/FilterAltOutlined'\nexport {default as InboxOutlinedIcon} from '@mui/icons-material/InboxOutlined'\nexport {default as SearchOffIcon} from '@mui/icons-material/SearchOff'\nexport {default as ClearRoundedIcon} from '@mui/icons-material/ClearRounded'\nexport {default as ArrowDropDownRoundedIcon} from '@mui/icons-material/ArrowDropDownRounded'\n\n// login\nexport {default as AccountIcon} from '@mui/icons-material/AccountBox'\nexport {default as LogoutIcon} from '@mui/icons-material/Logout'\nexport {default as LoginIcon} from '@mui/icons-material/Login'\nexport {default as DashboardIcon} from '@mui/icons-material/Dashboard'\n\n//logo\nexport {default as WorkFlowIcon} from '@mui/icons-material/AccountTreeOutlined'\nexport {default as HelpOutlineIcon} from '@mui/icons-material/HelpOutline'\nexport {default as NavigateBeforeIcon} from '@mui/icons-material/NavigateBefore'\nexport {default as NavigateNextIcon} from '@mui/icons-material/NavigateNext'\nexport {default as PersonIcon} from '@mui/icons-material/Person'\nexport {default as CalendarTodayIcon} from '@mui/icons-material/CalendarToday'\nexport {default as ChatIcon} from '@mui/icons-material/QuestionAnswerOutlined'\nexport {default as TodayIcon} from '@mui/icons-material/Today'\nexport {default as DeleteForeverIcon} from '@mui/icons-material/DeleteForever'\n\nexport {default as AdsClickIcon} from '@mui/icons-material/AdsClick'\nexport {default as FingerprintIcon} from '@mui/icons-material/Fingerprint'\nexport {default as SportsEsportsOutlinedIcon} from '@mui/icons-material/SportsEsportsOutlined'\nexport {default as HelpOutlineRoundedIcon} from '@mui/icons-material/HelpOutlineRounded'\nexport {default as AccountTreeOutlinedIcon} from '@mui/icons-material/AccountTreeOutlined'\nexport {default as SmartToyOutlinedIcon} from '@mui/icons-material/SmartToyOutlined'\nexport {default as AcUnitIcon} from '@mui/icons-material/AcUnit'\nexport {default as LoopIcon} from '@mui/icons-material/Loop'\nexport {default as PendingIcon} from '@mui/icons-material/Pending'\nexport {default as AllInclusiveIcon} from '@mui/icons-material/AllInclusive'\nexport {default as WarningOutlinedIcon} from '@mui/icons-material/WarningOutlined'\nexport {default as InfoOutlinedIcon} from '@mui/icons-material/InfoOutlined'\nexport {default as AutoAwesomeRoundedIcon} from '@mui/icons-material/AutoAwesomeRounded'\nexport {default as ErrorOutlineOutlinedIcon} from '@mui/icons-material/ErrorOutlineOutlined'\nexport {default as DownloadFilledIcon} from '@mui/icons-material/Download'","import type { SxProps, Theme } from '@mui/material/styles'\nimport { styled } from '@mui/material/styles'\nimport { Box } from '@/ele/Box'\n\n/**\n * Static palette aliases shared across GitHubPicker styled components.\n * Children consume these variables; they do not re-declare palette refs.\n */\nexport const gitHubPickerRootStyle = {\n\t'--option-subscript': 'var(--mui-palette-text-subscript)',\n\t'--picker-focus-soft': 'color-mix(in lab, var(--mui-palette-focus-soft-1), transparent 18%)',\n\t'--picker-focus': 'var(--mui-palette-focus-1)',\n '--picker-border': 'color-mix(in lab, var(--mui-palette-common-white), transparent 94%)',\n\t'--picker-border-hover': 'var(--mui-palette-border-hover-1)',\n\t'--picker-border-emphasis': 'color-mix(in lab, var(--mui-palette-primary-emphasis), transparent 50%)',\n\t'--picker-text': 'var(--mui-palette-text-primary)',\n\t'--picker-text-secondary': 'var(--mui-palette-text-secondary)',\n\t'--picker-text-disabled': 'var(--mui-palette-text-disabled)',\n\t'--picker-surface': 'color-mix(in lab, var(--mui-palette-common-black), transparent 68%)',\n\t'--picker-paper-bg': 'color-mix(in lab, var(--mui-palette-background-paper), transparent 30%)',\n\t'--picker-hover-bg': 'var(--mui-palette-background-hover-1)',\n\t'--picker-chip-bg': 'color-mix(in lab, var(--mui-palette-secondary-main), transparent 88%)',\n\t'--picker-chip-border': 'color-mix(in lab, var(--mui-palette-common-white), transparent 94%)',\n\t'--picker-chip-shadow': 'inset 0 1px 0 color-mix(in lab, var(--mui-palette-common-white), transparent 88%), inset 0 0 0 1px color-mix(in lab, var(--mui-palette-common-white), transparent 91%)',\n\t'--picker-error': 'var(--mui-palette-error-main)',\n\t// Dark closed field: true mid glass — between washed and dim.\n\t'--picker-highlight': 'color-mix(in lab, var(--mui-palette-common-white), transparent 92%)',\n\t'--picker-sheen': 'none',\n\t'--picker-shadow': [\n\t\t'0 18px 48px color-mix(in srgb, var(--mui-palette-common-black), transparent 72%)',\n\t\t'0 0 0 1px color-mix(in srgb, var(--mui-palette-common-black), transparent 88%)',\n\t].join(', '),\n\t'--picker-focus-ring': 'color-mix(in lab, var(--mui-palette-primary-emphasis), transparent 82%)',\n\t'--picker-check': 'var(--mui-palette-primary-emphasis)',\n\t'--picker-search-bg': 'var(--mui-palette-background-hover-1)',\n\t'--picker-search-shadow': 'inset 0 1px 0 var(--picker-highlight)',\n\t'--picker-search-border': 'color-mix(in lab, var(--picker-highlight), transparent 40%)',\n\t'--picker-divider': 'var(--mui-palette-divider)',\n\t'--picker-icon-well': 'color-mix(in lab, var(--mui-palette-background-hover-1), transparent 20%)',\n\t'--picker-blur': '8px',\n\t'--picker-glass': 'saturate(1.15) blur(var(--picker-blur))',\n\t'[color-scheme=light] &': {\n\t\t'--picker-blur': '10px',\n\t\t'--picker-glass': 'saturate(1.08) blur(var(--picker-blur))',\n\t\t'--picker-surface': 'color-mix(in lab, var(--mui-palette-common-white), transparent 46%)',\n\t\t'--picker-paper-bg': 'color-mix(in lab, var(--mui-palette-common-white), transparent 48%)',\n\t\t'--picker-highlight': 'color-mix(in lab, var(--mui-palette-common-white), transparent 55%)',\n\t\t'--picker-sheen': 'none',\n\t\t'--picker-border': 'color-mix(in lab, var(--mui-palette-border-1), transparent 95%)',\n\t\t'--picker-chip-bg': 'color-mix(in lab, var(--mui-palette-common-white), transparent 32%)',\n\t\t'--picker-chip-border': 'color-mix(in lab, var(--mui-palette-common-black), transparent 94%)',\n\t\t'--picker-chip-shadow': 'inset 0 1px 0 color-mix(in lab, var(--mui-palette-common-white), transparent 40%), inset 0 0 0 1px color-mix(in lab, var(--mui-palette-common-black), transparent 92%)',\n\t\t'--picker-search-bg': 'color-mix(in lab, var(--mui-palette-common-black), transparent 95%)',\n\t\t'--picker-search-shadow': 'inset 0 1px 1px color-mix(in lab, var(--mui-palette-common-black), transparent 92%)',\n\t\t'--picker-search-border': 'color-mix(in lab, var(--mui-palette-common-black), transparent 93%)',\n\t\t'--picker-focus-soft': 'color-mix(in lab, var(--mui-palette-common-black), transparent 95%)',\n\t\t'--picker-hover-bg': 'color-mix(in lab, var(--mui-palette-common-black), transparent 96%)',\n\t\t'--picker-shadow': [\n\t\t\t'inset 0 1px 0 color-mix(in lab, var(--mui-palette-common-white), transparent 28%)',\n\t\t\t'0 1px 2px color-mix(in srgb, var(--mui-palette-common-black), transparent 90%)',\n\t\t\t'0 10px 28px color-mix(in srgb, var(--mui-palette-common-black), transparent 86%)',\n\t\t].join(', '),\n\t\t'--picker-field-shadow': [\n\t\t\t'inset 0 1px 0 color-mix(in lab, var(--mui-palette-common-white), transparent 28%)',\n\t\t\t'0 8px 22px color-mix(in srgb, var(--mui-palette-common-black), transparent 88%)',\n\t\t].join(', '),\n\t\t'--picker-icon-well': 'color-mix(in lab, var(--mui-palette-common-black), transparent 96%)',\n\t},\n} as const\n\nexport const gitHubPickerRootSx = {\n\t...gitHubPickerRootStyle,\n} as const satisfies SxProps<Theme>\n\nexport const PickerField = styled(Box, {\n\tshouldForwardProp: (prop) =>\n\t\tprop !== 'open'\n\t\t&& prop !== 'error'\n\t\t&& prop !== 'disabled',\n})<{ open?: boolean; error?: boolean; disabled?: boolean }>({\n\t...gitHubPickerRootStyle,\n\tboxSizing: 'border-box',\n\twidth: '100%',\n\tminWidth: 240,\n\tdisplay: 'flex',\n\tflexDirection: 'column',\n\tgap: 8,\n\tpadding: '12px 14px 14px',\n\tborderRadius: 12,\n\tborder: '1px solid var(--picker-field-border)',\n\tbackgroundColor: 'var(--picker-surface)',\n\tbackgroundImage: 'var(--picker-sheen)',\n\tbackdropFilter: 'saturate(1.2) blur(12px)',\n\tWebkitBackdropFilter: 'saturate(1.2) blur(12px)',\n\tcursor: 'var(--picker-field-cursor)',\n\toutline: 'none',\n\tboxShadow: 'var(--picker-field-shadow)',\n\ttransition: 'border-color 160ms ease, box-shadow 160ms ease',\n\t'& *': {\n\t\tcursor: 'inherit',\n\t},\n\t'--picker-field-border': 'var(--picker-border)',\n\t'--picker-field-shadow': 'inset 0 1px 0 color-mix(in lab, var(--mui-palette-common-white), transparent 88%), inset 0 0 0 1px color-mix(in lab, var(--mui-palette-common-white), transparent 91%), 0 0 20px color-mix(in lab, var(--mui-palette-primary-emphasis), transparent 93%), 0 9px 22px color-mix(in srgb, var(--mui-palette-common-black), transparent 77%)',\n\t'--picker-field-cursor': 'pointer',\n\t'&:hover': {\n\t\t'--picker-field-border': 'color-mix(in lab, var(--mui-palette-common-white), transparent 92%)',\n\t},\n\t'&:focus-visible': {\n\t\t'--picker-field-border': 'color-mix(in lab, var(--mui-palette-common-white), transparent 92%)',\n\t\t'--picker-field-shadow': 'inset 0 1px 0 color-mix(in lab, var(--mui-palette-common-white), transparent 88%), inset 0 0 0 1px color-mix(in lab, var(--mui-palette-common-white), transparent 91%), 0 0 20px color-mix(in lab, var(--mui-palette-primary-emphasis), transparent 93%), 0 9px 22px color-mix(in srgb, var(--mui-palette-common-black), transparent 77%)',\n\t},\n\tvariants: [\n\t\t{\n\t\t\tprops: { open: true },\n\t\t\tstyle: {\n\t\t\t\t'--picker-field-border': 'color-mix(in lab, var(--mui-palette-common-white), transparent 92%)',\n\t\t\t\t'--picker-field-shadow': 'inset 0 1px 0 color-mix(in lab, var(--mui-palette-common-white), transparent 88%), inset 0 0 0 1px color-mix(in lab, var(--mui-palette-common-white), transparent 91%), 0 0 20px color-mix(in lab, var(--mui-palette-primary-emphasis), transparent 93%), 0 9px 22px color-mix(in srgb, var(--mui-palette-common-black), transparent 77%)',\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tprops: { error: true },\n\t\t\tstyle: {\n\t\t\t\t'--picker-field-border': 'var(--picker-error)',\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tprops: { disabled: true },\n\t\t\tstyle: {\n\t\t\t\t'--picker-field-cursor': 'default',\n\t\t\t\topacity: 0.58,\n\t\t\t\tpointerEvents: 'none',\n\t\t\t},\n\t\t},\n\t],\n})\n\nexport const OptionBox = styled(Box, {\n\tshouldForwardProp: (prop) =>\n\t\tprop !== 'selected'\n\t\t&& prop !== 'isIconClickable'\n\t\t&& prop !== 'disabled'\n\t\t&& prop !== 'disableBR'\n})<{ selected: boolean; isIconClickable: boolean; disabled: boolean; disableBR?: boolean }>({\n\t...gitHubPickerRootStyle,\n\twidth: '100%',\n\tpadding: 0,\n\tbackgroundColor: 'var(--bg)',\n\tborder: '1px solid var(--bd)',\n\tborderRadius: 'var(--br)',\n\tboxShadow: 'var(--chip-shadow)',\n\tcursor: 'var(--curosr)',\n\t'--bg': 'transparent',\n\t'--bd': 'transparent',\n\t'--br': '10px',\n\t'--chip-shadow': 'none',\n\t'--ai': 'flex-start',\n\t'--curosr': 'pointer',\n\t'& *': {\n\t\tcursor: 'inherit',\n\t},\n\tvariants: [\n\t\t{\n\t\t\tprops: { isIconClickable: true },\n\t\t\tstyle: {\n\t\t\t\twidth: 'auto',\n\t\t\t\tmaxWidth: '100%',\n\t\t\t\t'--bg': 'var(--picker-chip-bg)',\n\t\t\t\t'--bd': 'var(--picker-chip-border)',\n\t\t\t\t'--br': '999px',\n\t\t\t\t'--chip-shadow': 'var(--picker-chip-shadow)',\n\t\t\t\t'--ai': 'center',\n\t\t\t\t'--curosr': 'pointer',\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tprops: { isIconClickable: false },\n\t\t\tstyle: {\n\t\t\t\t'--bg': 'transparent',\n\t\t\t\t'--bd': 'transparent',\n\t\t\t\t'--ai': 'flex-start',\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tprops: { disabled: true },\n\t\t\tstyle: {\n\t\t\t\t'--curosr': 'default',\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tprops: { disabled: false },\n\t\t\tstyle: {\n\t\t\t\t'--curosr': 'pointer',\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tprops: { disableBR: true },\n\t\t\tstyle: {\n\t\t\t\t'--br': 0,\n\t\t\t},\n\t\t},\n\t],\n})\n","'use client'\nimport { Box } from '@/ele/Box'\nimport { CheckIcon, CloseIcon } from '@/icons/MuiIcon'\nimport { IconButton } from '@/ele/Button'\nimport { Typography } from '@/ele/Typography'\nimport { TagButton } from '@/ele/Button'\n\nimport { OptionClass, type OptionId } from './_utils'\nimport { OptionBox } from './theme'\n\nconst ICON_STYLE = {\n\theight: 16,\n\twidth: 16,\n\topacity: 0.85,\n}\n\nexport default function OptionRenderer({\n\toption,\n\tisIconClickable = false,\n\tselected,\n\tdisabled,\n\tdisableBR = false,\n\tremoveItemHandler,\n\tslotProps = {},\n}: {\n\tselected: boolean;\n\tisIconClickable?: boolean;\n\tdisabled?: boolean;\n\tdisableBR?: boolean;\n\toption: OptionClass | null;\n\tremoveItemHandler?: (id: OptionId) => void;\n\tslotProps?: {\n\t\tDM?: Partial<React.ComponentProps<typeof DM>>;\n\t};\n}) {\n\tif (!option) return null;\n\n\treturn (\n\t\t<Wrapper selected={selected} isIconClickable={isIconClickable} disabled={disabled} disableBR={disableBR}>\n\t\t\t<Box\n\t\t\t\tsx={{\n\t\t\t\t\t'&.MuiBox-root': {\n\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\talignItems: 'var(--ai)',\n\t\t\t\t\t\tgap: isIconClickable ? '6px' : '10px',\n\t\t\t\t\t\tcursor: 'var(--curosr)',\n\t\t\t\t\t\tpadding: isIconClickable ? '3px 6px 3px 8px' : '8px 10px',\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<DM\n\t\t\t\t\toption={option}\n\t\t\t\t\tonDelete={removeItemHandler ? () => removeItemHandler(option.id) : undefined}\n\t\t\t\t\tisIconClickable={isIconClickable}\n\t\t\t\t\tselected={selected}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t{...slotProps.DM}\n\t\t\t\t/>\n\t\t\t</Box>\n\t\t</Wrapper>\n\t)\n}\n\nfunction Wrapper({\n\tchildren,\n\tselected = false,\n\tisIconClickable = false,\n\tdisabled = false,\n\tdisableBR = false,\n}: {\n\tchildren: React.ReactNode;\n\tselected?: boolean;\n\tisIconClickable?: boolean;\n\tdisabled?: boolean;\n\tdisableBR?: boolean;\n}) {\n\treturn (\n\t\t<OptionBox selected={selected} isIconClickable={isIconClickable} disabled={disabled} disableBR={disableBR}>\n\t\t\t{children}\n\t\t</OptionBox>\n\t)\n}\n\nfunction ItemIcon({ option, compact }: { option: OptionClass; compact?: boolean }) {\n\tif (!option.icon) return null\n\n\treturn (\n\t\t<Box\n\t\t\tcomponent=\"span\"\n\t\t\tsx={{\n\t\t\t\tflexShrink: 0,\n\t\t\t\twidth: compact ? 18 : 28,\n\t\t\t\theight: compact ? 18 : 28,\n\t\t\t\tborderRadius: compact ? '50%' : '8px',\n\t\t\t\tdisplay: 'flex',\n\t\t\t\talignItems: 'center',\n\t\t\t\tjustifyContent: 'center',\n\t\t\t\talignSelf: 'center',\n\t\t\t\tbackgroundColor: compact ? 'transparent' : 'var(--picker-icon-well)',\n\t\t\t\tcolor: 'var(--picker-text-secondary)',\n\t\t\t\t'& svg': ICON_STYLE,\n\t\t\t}}\n\t\t>\n\t\t\t{option.icon}\n\t\t</Box>\n\t)\n}\n\nfunction ItemLabel({\n\toption,\n\tisShowDescription = false,\n\tcompact = false,\n}: {\n\toption: OptionClass;\n\tisShowDescription: boolean;\n\tcompact?: boolean;\n}) {\n\tconst isUseTag = option.tags.length > 0\n\tconst description = option.description?.trim()\n\tconst showSecondary = isShowDescription && (isUseTag || Boolean(description))\n\n\treturn (\n\t\t<Box\n\t\t\tsx={{\n\t\t\t\tflexGrow: 1,\n\t\t\t\tminWidth: 0,\n\t\t\t\tdisplay: 'flex',\n\t\t\t\tflexDirection: 'column',\n\t\t\t\tjustifyContent: 'center',\n\t\t\t\tgap: showSecondary ? '2px' : 0,\n\t\t\t}}\n\t\t>\n\t\t\t<Typography\n\t\t\t\tcomponent=\"span\"\n\t\t\t\tsx={{\n\t\t\t\t\tdisplay: 'block',\n\t\t\t\t\tfontSize: compact ? '0.8125rem' : '0.875rem',\n\t\t\t\t\tfontWeight: compact ? 500 : 600,\n\t\t\t\t\tlineHeight: 1.3,\n\t\t\t\t\tletterSpacing: compact ? 0 : '0.01em',\n\t\t\t\t\tcolor: 'var(--picker-text)',\n\t\t\t\t\ttextOverflow: 'ellipsis',\n\t\t\t\t\twhiteSpace: 'nowrap',\n\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\tm: 0,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{option.label}\n\t\t\t</Typography>\n\t\t\t{showSecondary ? (\n\t\t\t\tisUseTag ? (\n\t\t\t\t\t<Box sx={{ display: 'flex', gap: '4px', flexWrap: 'wrap', pt: 0.25 }}>\n\t\t\t\t\t\t{option.tags.map((tag, i) => (\n\t\t\t\t\t\t\t<TagButton\n\t\t\t\t\t\t\t\tkey={i}\n\t\t\t\t\t\t\t\tlabel={(tag?.tagIcon ? '' : '# ') + tag.tagName}\n\t\t\t\t\t\t\t\ticon={tag?.tagIcon ?? undefined}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</Box>\n\t\t\t\t) : (\n\t\t\t\t\t<Typography\n\t\t\t\t\t\tcomponent=\"span\"\n\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\tdisplay: 'block',\n\t\t\t\t\t\t\tfontSize: '0.75rem',\n\t\t\t\t\t\t\tlineHeight: 1.35,\n\t\t\t\t\t\t\tcolor: 'var(--option-subscript)',\n\t\t\t\t\t\t\ttextOverflow: 'ellipsis',\n\t\t\t\t\t\t\twhiteSpace: 'nowrap',\n\t\t\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\t\t\tm: 0,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{description}\n\t\t\t\t\t</Typography>\n\t\t\t\t)\n\t\t\t) : null}\n\t\t</Box>\n\t)\n}\n\nfunction DM({\n\toption,\n\tselected,\n\tonDelete,\n\talwaysShowEndIcon = false,\n\tisIconClickable = false,\n\tdisabled = false,\n\tendIcon = null,\n\tisShowEndIcon = true,\n\tisShowDescription = true,\n}: {\n\toption: React.ComponentProps<typeof ItemIcon>['option'];\n\tisShowDescription?: React.ComponentProps<typeof ItemLabel>['isShowDescription'];\n\tselected?: boolean;\n\tisIconClickable?: boolean;\n\tisShowEndIcon?: boolean;\n\tdisabled: React.ComponentProps<typeof IconButton>['disabled'];\n\tonDelete?: React.ComponentProps<typeof IconButton>['onClick'];\n\talwaysShowEndIcon?: boolean;\n\tendIcon?: React.ReactNode | null;\n}) {\n\tconst showClose = Boolean(isShowEndIcon && isIconClickable && (selected || alwaysShowEndIcon))\n\tconst showCheck = Boolean(isShowEndIcon && !isIconClickable && selected)\n\n\treturn (\n\t\t<>\n\t\t\t<ItemIcon option={option} compact={isIconClickable} />\n\t\t\t<ItemLabel option={option} isShowDescription={isShowDescription} compact={isIconClickable} />\n\t\t\t{showClose ? (\n\t\t\t\t<IconButton\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\taria-label={`Remove ${option.label}`}\n\t\t\t\t\tonClick={(event) => {\n\t\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\t\tonDelete?.(event)\n\t\t\t\t\t}}\n\t\t\t\t\tsx={{\n\t\t\t\t\t\tpadding: '2px',\n\t\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\t\tcursor: disabled ? 'default' : 'pointer',\n\t\t\t\t\t\tbackgroundColor: 'transparent',\n\t\t\t\t\t\tborder: 'none',\n\t\t\t\t\t\tcolor: 'var(--picker-text-secondary)',\n\t\t\t\t\t\t'&:hover': {\n\t\t\t\t\t\t\tbackgroundColor: 'var(--picker-hover-bg)',\n\t\t\t\t\t\t\tborder: 'none',\n\t\t\t\t\t\t\tcolor: 'var(--picker-text)',\n\t\t\t\t\t\t},\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{endIcon ?? <CloseIcon sx={{ fontSize: '0.95rem' }} />}\n\t\t\t\t</IconButton>\n\t\t\t) : null}\n\t\t\t{showCheck ? (\n\t\t\t\t<Box\n\t\t\t\t\tsx={{\n\t\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\t\talignItems: 'center',\n\t\t\t\t\t\talignSelf: 'center',\n\t\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\t\tcolor: 'var(--picker-check)',\n\t\t\t\t\t\tpl: 0.5,\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{endIcon ?? <CheckIcon sx={{ fontSize: '1.05rem' }} />}\n\t\t\t\t</Box>\n\t\t\t) : null}\n\t\t</>\n\t)\n}\n","'use client'\nimport { createContext, useContext, useState, useCallback, useMemo, useEffect, useRef } from 'react'\n\nimport { \n type MinimalOption, type AutoCompleteOptionIds,\n type OptionIds,\n OptionClass,\n} from '../_utils'\n\nexport type StateType = {\n ids: AutoCompleteOptionIds,\n minimal: MinimalOption[] | MinimalOption | null,\n isMultiple: boolean,\n}\n\ntype ContextType = {\n\tstate: StateType;\n select: (option: MinimalOption | MinimalOption[] | null) => StateType;\n}\nconst Context = createContext<ContextType | null>(null);\nexport const useStateContext = () => {\n const ctx = useContext(Context)\n if (!ctx) throw new Error('useStateContext must be used within LocalSelectedProvider')\n return ctx\n}\n\nexport const Provider = ({children,selectedIds,options,isMultiple,open=false}:{\n children:React.ReactNode,\n selectedIds:Parameters<typeof init>[0]['selectedIds'],\n options:Parameters<typeof init>[0]['options'],\n isMultiple:Parameters<typeof init>[0]['isMultiple'],\n open?: boolean,\n}) => {\n // Initialize state once\n\tconst [state, setState] = useState<StateType>(() => init({selectedIds,options,isMultiple}))\n const stateRef = useRef(state)\n stateRef.current = state\n\n // Keep provider state in sync when parent-driven selectedIds/options/isMultiple change.\n // While open, skip identity-driven re-init so accumulating picks are not wiped\n // by a stale parent selectedIds array.\n useEffect(() => {\n const next = init({ selectedIds, options, isMultiple })\n if (equalState(stateRef.current, next)) return\n if (open) return\n stateRef.current = next\n setState(next)\n }, [selectedIds, options, isMultiple, open]);\n\n // Compute next state as a pure function — used both in setState and as return value\n const computeNextState = useCallback((prev: StateType, option: MinimalOption | MinimalOption[] | null): StateType => {\n if (prev.isMultiple) {\n const newOptions = Array.isArray(option) ? option : []\n return { ...prev, ids: newOptions.map(o => o.id), minimal: newOptions }\n }\n const newOption = option && !Array.isArray(option) ? option : null\n return { ...prev, ids: newOption?.id ?? null, minimal: newOption }\n }, [])\n\n const select = useCallback((option: MinimalOption | MinimalOption[] | null): StateType => {\n let produced: StateType | undefined\n setState((prev) => {\n produced = computeNextState(prev, option)\n stateRef.current = produced\n return produced\n })\n // React skips the eager updater when updates are already queued; chain from the ref.\n if (produced === undefined) {\n produced = computeNextState(stateRef.current, option)\n stateRef.current = produced\n }\n return produced\n }, [computeNextState])\n\n const value = useMemo(() => ({ state, select }), [state, select])\n\n\treturn (\n\t\t<Context.Provider value={value}>\n\t\t\t{children}\n\t\t</Context.Provider>\n\t)\n}\n\nexport const useSelector = () => {\n const {state} = useStateContext()\n return <T extends keyof StateType>(key:T) => {\n return state[key]\n }\n}\n/**\n * Initialize the local state\n */\nfunction init({\n selectedIds, \n options,\n isMultiple,\n}:{\n selectedIds:OptionIds, \n options:OptionClass[],\n isMultiple:boolean,\n}):StateType{\n return {\n ids: isMultiple?selectedIds : selectedIds[0]??null,\n minimal: isMultiple?options\n .filter(o=>selectedIds.includes(o.id))\n .map(o=>o.minimal())\n :options.find(o=>o.id===selectedIds[0])?.minimal()??null,\n isMultiple: isMultiple,\n }\n}\n\nfunction equalIds(a: AutoCompleteOptionIds, b: AutoCompleteOptionIds): boolean {\n if (a === b) return true\n if (Array.isArray(a) && Array.isArray(b)) {\n return a.length === b.length && a.every((id, i) => id === b[i])\n }\n return false\n}\n\nfunction equalMinimalOption(a: MinimalOption, b: MinimalOption): boolean {\n return a.id === b.id\n && a.label === b.label\n && a.filterKey === b.filterKey\n && a.disabled === b.disabled\n && a.group === b.group\n && a.value === b.value\n}\n\nfunction equalMinimal(\n a: StateType['minimal'],\n b: StateType['minimal'],\n): boolean {\n if (a === b) return true\n if (a == null || b == null) return false\n if (Array.isArray(a) && Array.isArray(b)) {\n return a.length === b.length && a.every((opt, i) => equalMinimalOption(opt, b[i]))\n }\n if (!Array.isArray(a) && !Array.isArray(b)) {\n return equalMinimalOption(a, b)\n }\n return false\n}\n\nfunction equalState(a: StateType, b: StateType): boolean {\n return a.isMultiple === b.isMultiple\n && equalIds(a.ids, b.ids)\n && equalMinimal(a.minimal, b.minimal)\n}","export {\n Provider as LocalSelectedProvider,\n useStateContext as useLocalSelectedContext,\n useSelector as useLocalSelectedSelector,\n type StateType,\n} from './states';","import Paper, { type PaperProps } from '@mui/material/Paper'\n\n/**\n * A wrapper for Mui Paper\n */\nexport default function MuiPaper(props: PaperProps) {\n return <Paper {...props} />\n}\n","'use client'\nimport Paper from '@mui/material/Paper'\nimport { styled } from '@mui/material/styles'\n\n/**\n * Mui Paper boxshadow with a shiny effect\n * \n * [Doc](https://mui.com/material-ui/api/paper/)\n */\nconst ShinyPaper = styled(Paper)({\n '--shiny-paper-shadow-color': 'var(--mui-palette-blink-secondary)',\n '--shiny-paper-grey-mix': 'color-mix(in lab, var(--mui-palette-grey-A700), transparent 50%)',\n '--shiny-paper-shadow-color-secondary': 'color-mix(in lab, var(--shiny-paper-shadow-color), var(--shiny-paper-grey-mix) 50%)',\n\n '--bs-1': 'var(--shiny-paper-shadow-color)',\n '--bs-2': 'var(--shiny-paper-shadow-color-secondary)',\n '--bs-3': 'var(--shiny-paper-shadow-color)',\n '--bs': `\n 0px 2px 1px -1px var(--bs-1),\n 0px 1px 1px 0px var(--bs-2),\n 0px 1px 3px 0px var(--bs-3)\n `,\n\n \"&.MuiPaper-root\":{\n transition:\"background-color 0s\",\n boxShadow: \"var(--bs)\",\n },\n})\nexport default ShinyPaper","import type { MuiComponentTheme } from '@/_utils/_types'\n\nexport const paperTheme = {\n defaultProps: {\n variant: 'elevation',\n },\n styleOverrides: {\n root: {\n '--paper-bg': 'var(--mui-palette-background-default)',\n backgroundColor: 'var(--paper-bg)',\n },\n outlined: {\n '--paper-border-color': 'var(--mui-palette-border-1)',\n border: '1px solid var(--paper-border-color)',\n },\n }\n\n} as const satisfies MuiComponentTheme<\"MuiPaper\">","export { default as Paper } from './Paper';\nexport { default as ShinyPaper } from './ShinyPaper';\nexport * from './themes'","export * from './Paper'","export * from './src'","import type { SxProps, Theme } from '@mui/material/styles'\nimport { styled } from '@mui/material/styles'\nimport { Popper } from '@/ele/Overlay'\nimport { autocompleteClasses } from '@mui/material/Autocomplete'\nimport { Paper } from '@/ele/Paper'\nimport { gitHubPickerRootStyle } from './theme'\n\nexport const PickerPopper = styled(Popper)(({ theme }) => ({\n\t...gitHubPickerRootStyle,\n\twidth: 'var(--w)',\n\tminWidth: 280,\n\tzIndex: theme.zIndex.modal,\n\tfontSize: 13,\n\toverflow: 'hidden',\n\tborderRadius: 14,\n\tborder: '1px solid var(--picker-border)',\n\tbackgroundColor: 'var(--mui-palette-background-paper)',\n\tbackgroundImage: 'none',\n\tboxShadow: 'var(--picker-shadow)',\n\tbackdropFilter: 'none',\n\tWebkitBackdropFilter: 'none',\n\t'--picker-blur': '0px',\n\t'--picker-glass': 'none',\n}))\n\nexport const PickerOptionLi = styled('li')(() => ({\n\t...gitHubPickerRootStyle,\n\t[`.${autocompleteClasses.listbox} &.${autocompleteClasses.option}`]: {\n\t\tpadding: 0,\n\t\tmargin: '2px 6px',\n\t\tborderRadius: 10,\n\t\tminHeight: 0,\n\t},\n\t[`\n\t\t&.${autocompleteClasses.option},\n\t\t&.${autocompleteClasses.option}[aria-selected=\"true\"],\n\t`]: {\n\t\tbackgroundColor: 'transparent',\n\t},\n\t[`\n\t\t&.${autocompleteClasses.option}:hover,\n\t\t&.${autocompleteClasses.option}[aria-selected=\"true\"]:hover,\n\t`]: {\n\t\tbackgroundColor: 'var(--picker-hover-bg)',\n\t},\n\t[`\n\t\t&.${autocompleteClasses.option}.${autocompleteClasses.focused},\n\t\t&.${autocompleteClasses.option}.${autocompleteClasses.focused}[aria-selected=\"true\"]\n\t`]: {\n\t\tbackgroundColor: 'var(--picker-focus-soft)',\n\t},\n\t[`&.${autocompleteClasses.option}[aria-selected=\"true\"]`]: {\n\t\tbackgroundColor: 'var(--picker-focus-soft)',\n\t\tboxShadow: 'inset 0 1px 0 var(--picker-highlight)',\n\t},\n}))\n\nexport const PickerPaper = styled(Paper)({\n\t...gitHubPickerRootStyle,\n\tborderRadius: 14,\n\tborder: 'none',\n\t'--paper-bg': 'transparent',\n\tbackgroundColor: 'transparent',\n\tbackgroundImage: 'none',\n\tboxShadow: 'none',\n\t'&.MuiPaper-root': {\n\t\t'--paper-bg': 'transparent',\n\t\tbackgroundColor: 'transparent',\n\t\tbackgroundImage: 'none',\n\t\tboxShadow: 'none',\n\t\tborder: 'none',\n\t},\n})\n\nexport const pickerSearchSx = {\n\tdisplay: 'flex',\n\talignItems: 'center',\n\tgap: 1,\n\tmx: 1,\n\tmt: 0.5,\n\tmb: 0.75,\n\tpx: 1.25,\n\tpy: 0.5,\n\tborderRadius: 2,\n\tbackgroundColor: 'var(--picker-search-bg)',\n\tborder: '1px solid var(--picker-search-border)',\n\tboxShadow: 'var(--picker-search-shadow)',\n\t'& .MuiInputBase-root': {\n\t\tfontSize: '0.875rem',\n\t\tcolor: 'var(--picker-text)',\n\t},\n\t'& .MuiInputBase-input': {\n\t\tpy: 0.6,\n\t\t'&::placeholder': {\n\t\t\tcolor: 'var(--picker-text-secondary)',\n\t\t\topacity: 0.8,\n\t\t},\n\t},\n} as const satisfies SxProps<Theme>\n\nexport const pickerGroupLabelSx = {\n\tpx: 1.75,\n\tpt: 1.25,\n\tpb: 0.5,\n\tfontSize: '0.66rem',\n\tfontWeight: 700,\n\tletterSpacing: '0.08em',\n\ttextTransform: 'uppercase',\n\tlineHeight: 1.4,\n\tcolor: 'var(--picker-text-secondary)',\n} as const satisfies SxProps<Theme>\n","export const CONFIRM_ID = \"deleteOption-confirmation\"\n\nexport const OPTION_CONSTRAINTS = {\n group: 20,\n label: 20,\n value: 100,\n description: 100\n} as const\n\nexport const MY_LOCAL_DISABLE_GROUP = \"My Local Disable Group - c7EgCbQ9T1\"\nexport const DISABLED_GROUP = \"Disabled\"","import { randomStrGenerator } from '@/_utils/_func'\n\nimport type { OptionParams, MinimalOption } from './_types'\nimport { DISABLED_GROUP } from './_const'\n\nexport default class Option {\n\tid: NonNullable<OptionParams[\"id\"]>;\n\tlabel: NonNullable<OptionParams[\"label\"]>;\n\tdescription: NonNullable<OptionParams[\"description\"]>;\n\tdisabled: NonNullable<OptionParams[\"disabled\"]>;\n\tgroup: NonNullable<OptionParams[\"group\"]>;\n\ticon: NonNullable<OptionParams[\"icon\"]> | null;\n\tfilterKey: NonNullable<OptionParams[\"filterKey\"]>;\n\tvalue: NonNullable<OptionParams[\"value\"]>;\n\tdefaultSelected: NonNullable<OptionParams[\"defaultSelected\"]>;\n\totherProps: NonNullable<OptionParams[\"otherProps\"]>;\n\ttags: NonNullable<OptionParams[\"tags\"]>;\n\n\tconstructor(p: OptionParams) {\n\t\tthis.id = p.id ?? randomStrGenerator();\n\t\tthis.label = p.label ?? 'label';\n\t\tthis.description = p.description ?? 'description';\n\t\tthis.disabled = p.disabled ?? false;\n\t\tthis.group = p.group ?? 'group';\n\t\tthis.icon = p.icon ?? null;\n\t\tthis.filterKey = p.filterKey || defaultGetFilterKey(p);\n\t\tthis.defaultSelected = p.defaultSelected ?? false;\n\t\tthis.value = p.value ?? \"\";\n\n\t\tthis.otherProps = p.otherProps ?? {};\n\t\tthis.tags = p.tags ?? [];\n\t}\n\n\tminimal():MinimalOption{\n\t\treturn {\n\t\t\tid: this.id,\n\t\t\tlabel: this.label,\n\t\t\tfilterKey: this.filterKey,\n\t\t\tdisabled: this.disabled,\n\t\t\tgroup: this.group,\n\t\t\tvalue: this.value,\n\t\t}\n\t}\n}\n\nfunction defaultGetFilterKey(p: OptionParams): string {\n\tconst tagsStr = p.tags?.map(t=>t.tagName).join(\" \") ?? \"\";\n\treturn `${p.group ?? \"\"} ${p.label ?? \"\"} ${p.description ?? \"\"} ${p.value ?? \"\"} ${p.disabled?DISABLED_GROUP:\"\"} ${tagsStr}`;\n}","export type {\n EditorRef,\n OptionId, OptionIds,\n AutoCompleteOptionIds,\n OptionParams,\n MinimalOption,\n} from './_types'\n\nexport * from './_const'\n\nexport {\n default as OptionClass,\n} from './OptionClass'","\"use client\"\nimport React, { useEffect, useLayoutEffect, useRef, useState } from 'react'\nimport { Popper } from '@/ele/Overlay'\nimport type { PopperProps } from '@mui/material/Popper'\nimport Autocomplete, { autocompleteClasses, AutocompletePopperSlotPropsOverrides } from '@mui/material/Autocomplete'\nimport InputBase from '@mui/material/InputBase'\nimport { Box } from '@/ele/Box'\nimport { Typography } from '@/ele/Typography'\nimport { Button } from '@/ele/Button'\n\nimport { SearchIcon, DisabledSelectionIcon, AddIcon } from '@/icons/MuiIcon'\n\nimport OptionRenderer from './OptionRenderer'\nimport { PickerPopper, PickerOptionLi, PickerPaper, pickerSearchSx, pickerGroupLabelSx } from './popperTheme'\nimport { \n\tOptionClass, type MinimalOption, \n\tMY_LOCAL_DISABLE_GROUP, DISABLED_GROUP,\n} from './_utils'\nimport {\n\tuseLocalSelectedContext,\n\tuseLocalSelectedSelector,\n} from './states'\nimport type { StateType } from './states'\n\n/**\n * A popper menu for the GitHubPicker only\n */\nexport default function MyPopper({\n\tid,\n\tlistboxId,\n\tanchorEl,\n\tallMinimalOptions,\n\toptions,\n\tcloseHandler,\n\ttitle,\n\tplacement = 'bottom-start',\n\tmultiple = true,\n\tdisabled = false,\n\tuseGroup,\n\tisAddOptionEnabled,\n\taddOptionHandler,\n\tisPopperFreezed,\n}: {\n\tid: string;\n\tlistboxId: string;\n\tanchorEl: HTMLElement | null;\n\tallMinimalOptions: MinimalOption[];\n\toptions: OptionClass[];\n\tcloseHandler?: (newState?: StateType) => void;\n\ttitle?: React.ReactNode;\n\tplacement?: React.ComponentProps<typeof Popper>['placement'];\n\tmultiple?: React.ComponentProps<typeof Autocomplete>['multiple'];\n\tdisabled?: React.ComponentProps<typeof Autocomplete>['disabled'];\n\tuseGroup?: boolean;\n\tisAddOptionEnabled?: boolean;\n\taddOptionHandler?: () => void;\n\tisPopperFreezed?: boolean;\n}) {\n\tconst minimal = useLocalSelectedSelector()(\"minimal\")\n\tconst { select } = useLocalSelectedContext()\n\tconst [query, setQuery] = useState('')\n\tconst open = Boolean(anchorEl)\n\tconst listboxRef = useRef<HTMLUListElement | null>(null)\n\tconst pinnedScrollTop = useRef<number | null>(null)\n\n\tuseEffect(() => {\n\t\tif (open) setQuery('')\n\t}, [open])\n\n\tuseLayoutEffect(() => {\n\t\tif (!open) {\n\t\t\tpinnedScrollTop.current = null\n\t\t\treturn\n\t\t}\n\t\tconst list = listboxRef.current\n\t\tconst top = pinnedScrollTop.current\n\t\tif (list == null || top == null) return\n\t\tlist.scrollTop = top\n\t\tconst id = window.requestAnimationFrame(() => {\n\t\t\tif (listboxRef.current) listboxRef.current.scrollTop = top\n\t\t\tpinnedScrollTop.current = null\n\t\t})\n\t\treturn () => window.cancelAnimationFrame(id)\n\t}, [open, minimal])\n\n\tuseEffect(() => {\n\t\tif (!open) return\n\t\tconst id = window.setTimeout(() => {\n\t\t\tif (listboxRef.current) listboxRef.current.scrollTop = 0\n\t\t}, 30)\n\t\treturn () => window.clearTimeout(id)\n\t}, [open])\n\n\t// handle change for autocomplete -> local change\n\tconst handleChange:React.ComponentProps<typeof Autocomplete>[\"onChange\"] = (event, newValue, reason) => {\n\t\tif(\n\t\t\tevent.type === 'keydown' &&\n\t\t\treason === 'removeOption'\n\t\t) {\n\t\t\t// avoid the default behavior\n\t\t\treturn\n\t\t}\n\n\t\t\tif (listboxRef.current) {\n\t\t\t\tpinnedScrollTop.current = listboxRef.current.scrollTop\n\t\t\t}\n\n\t\t\tif (!multiple && (newValue == null || newValue === '')) {\n\t\t\t\tconst cleared = select(null)\n\t\t\t\tif (!isPopperFreezed) closeHandler?.(cleared)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst currentId = !multiple && minimal && !Array.isArray(minimal) ? minimal.id : null\n\t\t\tconst nextOption = Array.isArray(newValue) ? newValue[0] : newValue\n\t\t\tif (!multiple && currentId && nextOption && nextOption.id === currentId) {\n\t\t\t\tconst cleared = select(null)\n\t\t\t\tif (!isPopperFreezed) closeHandler?.(cleared)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// update the local state and get the new state synchronously\n\t\t\tconst newState = select(newValue as (MinimalOption|MinimalOption[]))\n\t\t\t// close the popper if not multiple and pass the updated state\n\t\t\tif(!multiple && !isPopperFreezed){\n\t\t\t\tcloseHandler?.(newState)\n\t\t\t}\n\t}\n\n\tconst popperId = open ? id : undefined\n\tconst popperWidth = Math.max(anchorEl?.offsetWidth ?? 320, 320)\n\n\treturn (\n\t\t<PickerPopper\n\t\t\tid={popperId}\n\t\t\topen={open}\n\t\t\tanchorEl={anchorEl}\n\t\t\tdisablePortal\n\t\t\tplacement={placement}\n\t\t\tstyle={{ '--w': `${popperWidth}px` } as React.CSSProperties}\n\t\t\tmodifiers={[\n\t\t\t\t{ name: 'offset', options: { offset: [0, 8] } },\n\t\t\t\t{ name: 'preventOverflow', options: { padding: 8 } },\n\t\t\t]}\n\t\t>\n\t\t\t\t<PickerPaper elevation={0} variant=\"outlined\">\n\t\t\t\t{title ? (\n\t\t\t\t\t<Box sx={{ px: 1.75, pt: 1.5, pb: 0.5 }}>\n\t\t\t\t\t\t<Typography\n\t\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t\tfontSize: '0.78rem',\n\t\t\t\t\t\t\t\tfontWeight: 600,\n\t\t\t\t\t\t\t\tletterSpacing: '0.02em',\n\t\t\t\t\t\t\t\tcolor: 'var(--picker-text-secondary)',\n\t\t\t\t\t\t\t\tm: 0,\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t</Typography>\n\t\t\t\t\t</Box>\n\t\t\t\t) : null}\n <Autocomplete\n open={open}\n disabled={disabled}\n multiple={multiple}\n\t\t\t\t\tonClose={(_event, reason) => {\n\t\t\t\t\t\tif (reason === 'escape' && !isPopperFreezed) {\n\t\t\t\t\t\t\tcloseHandler?.()\n\t\t\t\t\t\t}\n\t\t\t\t\t}}\n value={multiple\n ? (Array.isArray(minimal) ? minimal : [])\n : (minimal && !Array.isArray(minimal) ? minimal : null)\n }\n inputValue={query}\n onInputChange={(_, value, reason) => {\n if (reason === 'reset') return\n setQuery(value)\n }}\n onChange={handleChange}\n disableCloseOnSelect={Boolean(multiple)}\n selectOnFocus={false}\n clearOnBlur={false}\n slots={{\n popper: PopperComponent,\n paper: ListSurface,\n }}\n slotProps={{\n listbox:{\n id: listboxId,\n sx:{\n\t\t\t\t\t\t\t\tmaxHeight: 320,\n\t\t\t\t\t\t\t\tpy: 0.5,\n\t\t\t\t\t\t\t\toverflowX: 'hidden',\n\t\t\t\t\t\t\t\toverflowAnchor: 'none',\n\t\t\t\t\t\t\t},\n ref: listboxRef,\n },\n }}\n noOptionsText=\"No matches\"\n\n renderOption={(liProps, option, { selected }, ownerState )=>{\n const { key, onClick, ...optionProps } = liProps\n // find the option with full data from the minimal option\n // including the icon\n const fullOption = options.find(o => o.id === option.id)\n\n return (\n <PickerOptionLi\n key={key}\n {...optionProps}\n onClick={(event) => {\n if (!multiple && selected) {\n event.preventDefault()\n event.stopPropagation()\n if (listboxRef.current) {\n pinnedScrollTop.current = listboxRef.current.scrollTop\n }\n const cleared = select(null)\n if (!isPopperFreezed) closeHandler?.(cleared)\n return\n }\n onClick?.(event)\n }}\n >\n <OptionRenderer \n disableBR\n option={fullOption??null}\n selected={selected}\n disabled={ownerState.disabled || option.disabled}\n slotProps={{\n DM:{\n isShowEndIcon:true,\n isShowDescription:true,\n },\n }}\n />\n </PickerOptionLi>)\n }}\n options={allMinimalOptions}\n \n groupBy={useGroup?\n ((option:MinimalOption) => option.disabled? MY_LOCAL_DISABLE_GROUP : option.group)\n :undefined\n }\n getOptionLabel={(option:MinimalOption) => option.label} // display the label\n getOptionKey={(option:MinimalOption) => option.id}\n getOptionDisabled={(option:MinimalOption) => option.disabled??false}\n isOptionEqualToValue={(option:MinimalOption, value) => option.id === value?.id}\n filterOptions={(options, { inputValue }) => { // filter the options\n return options.filter(option => {\n // use the filter key to search\n const filterKey = option.filterKey.toLowerCase()\n // split the input value by space and check if all the words are in the filter key\n const inputVal = inputValue.toLowerCase().split(\" \")\n // if all the words are in the filter key, return true\n return inputVal.every(val => filterKey.includes(val))\n })\n }}\n\n renderInput={(params) => {\n return(\n <Box ref={params.InputProps.ref} sx={pickerSearchSx}>\n\t\t\t\t\t\t\t<SearchIcon sx={{ fontSize: 18, color: 'var(--picker-text-secondary)', flexShrink: 0 }} />\n <InputBase\n\t\t\t\t\t\t\t\tfullWidth\n\t\t\t\t\t\t\t\tautoFocus\n\t\t\t\t\t\t\t\tplaceholder=\"Search\"\n\t\t\t\t\t\t\t\tvalue={query}\n\t\t\t\t\t\t\t\tonChange={(event) => setQuery(event.target.value)}\n\t\t\t\t\t\t\t\tinputProps={{\n\t\t\t\t\t\t\t\t\t...params.inputProps,\n\t\t\t\t\t\t\t\t\tvalue: query,\n\t\t\t\t\t\t\t\t\tonBlur:(e: React.FocusEvent<HTMLInputElement>)=>{\n\t\t\t\t\t\t\t\t\t\te.preventDefault()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}}\n />\n </Box>\n )}} \n \n renderGroup={(p)=>{\n\n return <li key={p.key}>\n <Box className={`${autocompleteClasses.groupLabel}`} sx={pickerGroupLabelSx}>\n\t\t\t\t\t\t\t\t{p.group === MY_LOCAL_DISABLE_GROUP?\n <Box component=\"span\" sx={{display:\"flex\",alignItems:\"center\",gap:1}}><DisabledSelectionIcon sx={{ fontSize: 14 }} />{DISABLED_GROUP}</Box>\n :p.group}\n </Box>\n\n <Box component=\"ul\" sx={{padding:0, margin: 0}} className={`${autocompleteClasses.groupUl}`}>{p.children}</Box>\n </li>\n }}\n />\n\t\t\t\t{isAddOptionEnabled ? (\n\t\t\t\t\t<Box\n\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\tborderTop: '1px solid var(--picker-divider)',\n\t\t\t\t\t\t\tpx: 0.75,\n\t\t\t\t\t\t\tpy: 0.5,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tvariant=\"text\"\n\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\tstartIcon={<AddIcon />}\n\t\t\t\t\t\t\tonClick={addOptionHandler}\n\t\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\t\tjustifyContent: 'flex-start',\n\t\t\t\t\t\t\t\tpx: 1,\n\t\t\t\t\t\t\t\tcolor: 'var(--picker-text-secondary)',\n\t\t\t\t\t\t\t\tfontWeight: 600,\n\t\t\t\t\t\t\t\tletterSpacing: '0.02em',\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tNew option\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</Box>\n\t\t\t\t) : null}\n </PickerPaper>\n\t\t</PickerPopper>\n\t)\n}\n\n/**\n * A popper component for the Autocomplete\n * \n * must be a separate component to avoid re-rendering the popper\n */\nfunction ListSurface({\n children,\n ...other\n}: {\n children?: React.ReactNode\n} & React.HTMLAttributes<HTMLDivElement>) {\n return (\n <Box {...other} sx={{ boxShadow: 'none', backgroundColor: 'transparent' }}>\n {children}\n </Box>\n )\n}\n\nfunction PopperComponent(props: PopperProps & AutocompletePopperSlotPropsOverrides) {\n const { children, sx, ...other } = props;\n\n // Render a simple container instead of a Popper so the consumer can\n // wrap the Autocomplete in an external Popper. If `sx` is a function we\n // don't evaluate it here (keep behavior simple and type-safe).\n const evaluatedSx = typeof sx === 'function' ? {} : sx;\n const content = typeof children === 'function' ? (children as () => React.ReactNode)() : children;\n\n return (\n <Box {...other} sx={evaluatedSx}>\n {content}\n </Box>\n );\n}\n","'use client'\nimport {useState, useMemo, useId, Suspense, lazy} from 'react'\nimport { Box } from '@/ele/Box'\nimport { Typography } from '@/ele/Typography'\nimport { IconButton } from '@/ele/Button'\nimport { Badge } from '@/ele/Badge'\nimport { ClickAwayListener } from '@/ele/Overlay'\nimport { FilterIcon, KeyboardArrowDownIcon } from '@/icons/MuiIcon'\nimport { sortByKey } from '@/_utils/_func'\n\nimport OptionRenderer from './OptionRenderer'\nimport { PickerField, gitHubPickerRootSx } from './theme'\nimport {\n\tOptionClass,\n\ttype OptionId, type OptionIds,\n\ttype MinimalOption,\n} from './_utils'\nimport {\n\tLocalSelectedProvider, useLocalSelectedContext,\n} from './states'\n\nconst PopperMenu = lazy(() => import('./PopperMenu'))\ntype PopperMenuProps = React.ComponentProps<typeof import('./PopperMenu').default>\n\nexport type GitHubPickerVariant = 'field' | 'icon'\nexport type GitHubPickerColor =\n\t| 'primary'\n\t| 'secondary'\n\t| 'error'\n\t| 'info'\n\t| 'success'\n\t| 'warning'\n\t| 'system'\n\t| 'insight'\n\nconst PICKER_ACCENT: Record<GitHubPickerColor, string> = {\n\tprimary: 'var(--mui-palette-primary-emphasis)',\n\tsecondary: 'var(--mui-palette-secondary-main)',\n\terror: 'var(--mui-palette-error-main)',\n\tinfo: 'var(--mui-palette-info-main)',\n\tsuccess: 'var(--mui-palette-success-main)',\n\twarning: 'var(--mui-palette-warning-main)',\n\tsystem: 'var(--mui-palette-system-main)',\n\tinsight: 'var(--mui-palette-insight-main)',\n}\n\ntype GitHubPickerProps = Omit<React.ComponentProps<typeof Picker>,\"localStates\" | \"anchorEl\" | \"setAnchorEl\"> & {\n multiple?: boolean;\n /** `field` is the full selector. `icon` is a compact IconButton with a badge. */\n variant?: GitHubPickerVariant;\n}\n/**\n * Field + catalog autocomplete. Searchable grouped options with\n * chip-based selected values. Pass `variant=\"icon\"` for a compact trigger.\n *\n * [Doc](https://mui.com/material-ui/api/autocomplete/)\n *\n * @param selectedIdProps - is always an array of ids\n * @param options.filterKey - is for searching\n */\nexport default function GitHubPicker({\n\tmultiple=true,\n\t...p\n}:GitHubPickerProps){\n\tconst _selectedIdProps = p.selectedIdProps[0]\n\tconst [anchorEl, setAnchorEl] = useState<HTMLElement|null>(null)\n\n\treturn (<LocalSelectedProvider selectedIds={_selectedIdProps} options={p.options} isMultiple={multiple} open={Boolean(anchorEl)}>\n\t\t<Picker {...p} multiple={multiple} anchorEl={anchorEl} setAnchorEl={setAnchorEl}/>\n\t</LocalSelectedProvider>)\n}\n\nfunction Picker(p:{\n\tselectedIdProps: [OptionIds, React.Dispatch<React.SetStateAction<OptionIds>>];\n\toptions: OptionClass[];\n\tadditionSort?: Parameters<typeof getMinimalOptions>[1]; // sort function for groups\n\n\tonChange: (ids: OptionIds) => void;\n\tonDelete: (id: OptionId) => void;\n\terror?: boolean;\n\ttitle?: string;\n\tsubtitle?: string;\n\ttitleIcon?: React.ReactNode;\n\n\tmultiple?: boolean; // allow multiple selection\n\tdisabled?: boolean;\n\n\tuseGroup?: boolean; // group the options\n\tisAddOptionEnabled?: boolean; // allow adding new option\n\taddOptionHandler?:PopperMenuProps[\"addOptionHandler\"]; // handler for adding new option\n\n\tisPopperFreezed?:PopperMenuProps[\"isPopperFreezed\"]; // disable the popper\n\tvariant?: GitHubPickerVariant;\n\t/** Icon, badge, and field accent. `error` still wins when true. */\n\tcolor?: GitHubPickerColor;\n\tanchorEl: HTMLElement | null;\n\tsetAnchorEl: React.Dispatch<React.SetStateAction<HTMLElement | null>>;\n}){\n const {\n selectedIdProps,\n options=[], // options for rendering and autocomplete\n additionSort,\n\n title, subtitle,\n titleIcon,\n onChange, onDelete,\n error=false,\n multiple, // default value set in Parent\n disabled=false,\n useGroup=true,\n isAddOptionEnabled=false,\n addOptionHandler,\n\n isPopperFreezed,\n variant = 'field',\n color = 'secondary',\n anchorEl,\n setAnchorEl,\n } = p\n\tconst tone: GitHubPickerColor = error ? 'error' : color\n\tconst accent = PICKER_ACCENT[tone]\n\tconst pickerId = useId()\n\tconst menuId = `${pickerId}-menu`\n\tconst listboxId = `${pickerId}-listbox`\n\n\tconst [selectedIds, sIds] = selectedIdProps // [{id,label,filterKey,disabled,group},...]\n\t// option pass to autocomplete, seperate icon\n\tconst allMinimalOptions = useMemo(() => getMinimalOptions(options,additionSort),[options,additionSort])\n\tconst selectedOpt = allMinimalOptions.filter(itm=>selectedIds.includes(itm.id))\n\tconst { state, select } = useLocalSelectedContext()\n\tconst open = Boolean(anchorEl)\n\n\t// handle popper close\n\tconst closeHandler:PopperMenuProps[\"closeHandler\"] = (passedState?) => {\n\t\t// `minimal: null` is a real clear. `??` would fall back to the previous selection.\n\t\tconst newValue = passedState === undefined ? state.minimal : passedState.minimal\n\t\tconst nextIds = idsFromSelection(Boolean(multiple), newValue)\n\t\tsIds(nextIds)\n\t\tonChange(nextIds)\n\n\t\tif(anchorEl){ anchorEl.focus() }\n\t\tsetAnchorEl(null)\n\t}\n\n\tconst removeItemHandler:React.ComponentProps<typeof DisplaySelected>[\"removeItemHandler\"] = id => () => {\n\t\tonDelete(id)\n\t\tsIds(old=>old.filter(itm => itm !== id))\n\t\t// Keep LocalSelected in sync while open — closeHandler commits state.minimal,\n\t\t// so skipping this would restore the removed chip after the menu closes.\n\t\tif (multiple) {\n\t\t\tconst current = Array.isArray(state.minimal) ? state.minimal : []\n\t\t\tselect(current.filter((opt) => opt.id !== id))\n\t\t} else if (!Array.isArray(state.minimal) && state.minimal?.id === id) {\n\t\t\tselect(null)\n\t\t} else if (Array.isArray(state.minimal)) {\n\t\t\tselect(state.minimal.filter((opt) => opt.id !== id))\n\t\t}\n\t}\n\n\tconst togglePicker = (element: HTMLElement) => {\n\t\tif (disabled) return\n\t\tif (open) {\n\t\t\tif (isPopperFreezed) return\n\t\t\tcloseHandler()\n\t\t\treturn\n\t\t}\n\t\tsetAnchorEl(element)\n\t}\n\n\treturn (\n\t\t<ClickAwayListener\n\t\t\tonClickAway={() => {\n\t\t\t\tif (!open || isPopperFreezed) return\n\t\t\t\tcloseHandler()\n\t\t\t}}\n\t\t>\n\t\t\t<Box>\n\t\t\t{variant === 'icon' ? (\n\t\t\t\t<IconTrigger\n\t\t\t\t\tid={pickerId}\n\t\t\t\t\tmenuId={menuId}\n\t\t\t\t\topen={open}\n\t\t\t\t\tcolor={tone}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\ttitle={title}\n\t\t\t\t\ttitleIcon={titleIcon}\n\t\t\t\t\tselectedCount={selectedOpt.length}\n\t\t\t\t\tselectedLabels={selectedOpt.map((opt) => opt.label)}\n\t\t\t\t\tonToggle={togglePicker}\n\t\t\t\t/>\n\t\t\t) : (\n\t\t\t\t<FieldTrigger\n\t\t\t\t\tid={pickerId}\n\t\t\t\t\tmenuId={menuId}\n\t\t\t\t\topen={open}\n\t\t\t\t\terror={error}\n\t\t\t\t\taccent={accent}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\ttitle={title}\n\t\t\t\t\ttitleIcon={titleIcon}\n\t\t\t\t\tselectedOpt={selectedOpt}\n\t\t\t\t\toptions={options}\n\t\t\t\t\tremoveItemHandler={removeItemHandler}\n\t\t\t\t\tmultiple={Boolean(multiple)}\n\t\t\t\t\tonToggle={togglePicker}\n\t\t\t\t/>\n\t\t\t)}\n\t\t\t{anchorEl ? (\n\t\t\t\t<Suspense fallback={null}>\n\t\t\t\t\t<PopperMenu\n\t\t\t\t\t\tid={menuId}\n\t\t\t\t\t\tlistboxId={listboxId}\n\t\t\t\t\t\tanchorEl={anchorEl}\n\t\t\t\t\t\tallMinimalOptions={allMinimalOptions}\n\t\t\t\t\t\toptions={options}\n\t\t\t\t\t\tcloseHandler={closeHandler}\n\t\t\t\t\t\tmultiple={multiple}\n\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\ttitle={subtitle ?? title}\n\t\t\t\t\t\tuseGroup={useGroup}\n\t\t\t\t\t\tisAddOptionEnabled={isAddOptionEnabled}\n\t\t\t\t\t\taddOptionHandler={addOptionHandler}\n\t\t\t\t\t\tisPopperFreezed={isPopperFreezed}\n\t\t\t\t\t/>\n\t\t\t\t</Suspense>\n\t\t\t) : null}\n\t\t\t</Box>\n\t\t</ClickAwayListener>\n\t)\n}\n\n/**\n * function to return minimal options\n * excluding the component and functions from the options\n * i.e. icon, minimal(),\n * \n * sort by disabled (higher priority)\n * sort by group, then filterKey\n */\nfunction idsFromSelection(\n\tmultiple: boolean,\n\tnewValue: MinimalOption[] | MinimalOption | null | undefined,\n): OptionIds {\n\tif (multiple) {\n\t\tconst list = Array.isArray(newValue) ? newValue : []\n\t\treturn sortByKey(list, 'filterKey').map((item) => item.id)\n\t}\n\tconst single = Array.isArray(newValue) ? newValue[0] : newValue\n\treturn single?.id ? [single.id] : []\n}\n\nfunction getMinimalOptions(options:OptionClass[],additionSort?:(a: MinimalOption|null, b: MinimalOption|null) => number):ReturnType<OptionClass[\"minimal\"]>[] {\n\tconst minimal = options.map(itm => itm.minimal())\n\tconst sortedByFilterKey = sortByKey(minimal,\"filterKey\")\n\tconst afterAdditionSort = additionSort ? sortedByFilterKey.sort(additionSort) : sortedByFilterKey\n\tconst sortedByGroup = sortByKey(afterAdditionSort, \"group\")\n\tconst sortedByDisabled = sortByKey(sortedByGroup,\"disabled\",)\n\treturn sortedByDisabled\n}\n\nfunction FieldTrigger(p:{\n\tid: string;\n\tmenuId: string;\n\topen: boolean;\n\terror: boolean;\n\taccent: string;\n\tdisabled: boolean;\n\ttitle?: string;\n\ttitleIcon?: React.ReactNode;\n\tselectedOpt: MinimalOption[];\n\toptions: OptionClass[];\n\tremoveItemHandler: (id: OptionId) => () => void;\n\tmultiple: boolean;\n\tonToggle: (element: HTMLElement) => void;\n}) {\n\tconst { id, menuId, open, error, accent, disabled, title, titleIcon, selectedOpt, options, removeItemHandler, multiple, onToggle } = p\n\n\treturn (\n\t\t<PickerField\n\t\t\tid={id}\n\t\t\topen={open}\n\t\t\terror={error}\n\t\t\tdisabled={disabled}\n\t\t\trole=\"combobox\"\n\t\t\ttabIndex={disabled ? -1 : 0}\n\t\t\taria-expanded={open}\n\t\t\taria-haspopup=\"listbox\"\n\t\t\taria-controls={open ? menuId : undefined}\n\t\t\taria-disabled={disabled}\n\t\t\tstyle={{\n\t\t\t\t'--picker-border-emphasis': accent,\n\t\t\t\t'--picker-check': accent,\n\t\t\t\t'--picker-focus-ring': `color-mix(in lab, ${accent}, transparent 82%)`,\n\t\t\t} as React.CSSProperties}\n\t\t\tonClick={(event) => onToggle(event.currentTarget)}\n\t\t\tonKeyDown={(event) => {\n\t\t\t\tif (event.key === 'Enter' || event.key === ' ') {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tonToggle(event.currentTarget)\n\t\t\t\t}\n\t\t\t}}\n\t\t>\n\t\t\t<Box\n\t\t\t\tsx={{\n\t\t\t\t\tdisplay: 'flex',\n\t\t\t\t\talignItems: 'center',\n\t\t\t\t\tgap: 1,\n\t\t\t\t\tminHeight: 20,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{titleIcon ? (\n\t\t\t\t\t<Box\n\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\tdisplay: 'inline-flex',\n\t\t\t\t\t\t\tcolor: 'var(--picker-check)',\n\t\t\t\t\t\t\t'& svg': { fontSize: '1.05rem' },\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{titleIcon}\n\t\t\t\t\t</Box>\n\t\t\t\t) : null}\n\t\t\t\t{title ? (\n\t\t\t\t\t<Typography\n\t\t\t\t\t\tcomponent=\"span\"\n\t\t\t\t\t\tsx={{\n\t\t\t\t\t\t\tflex: 1,\n\t\t\t\t\t\t\tminWidth: 0,\n\t\t\t\t\t\t\tfontSize: '0.68rem',\n\t\t\t\t\t\t\tfontWeight: 700,\n\t\t\t\t\t\t\tletterSpacing: '0.08em',\n\t\t\t\t\t\t\ttextTransform: 'uppercase',\n\t\t\t\t\t\t\tcolor: 'var(--picker-text-secondary)',\n\t\t\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\t\t\ttextOverflow: 'ellipsis',\n\t\t\t\t\t\t\twhiteSpace: 'nowrap',\n\t\t\t\t\t\t\tm: 0,\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</Typography>\n\t\t\t\t) : (\n\t\t\t\t\t<Box sx={{ flex: 1 }} />\n\t\t\t\t)}\n\t\t\t\t<KeyboardArrowDownIcon\n\t\t\t\t\tsx={{\n\t\t\t\t\t\tfontSize: 20,\n\t\t\t\t\t\tcolor: 'var(--picker-text-secondary)',\n\t\t\t\t\t\tflexShrink: 0,\n\t\t\t\t\t\ttransform: open ? 'rotate(180deg)' : 'rotate(0deg)',\n\t\t\t\t\t\ttransition: 'transform 180ms ease',\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</Box>\n\n\t\t\t<DisplaySelected\n\t\t\t\tselectedOpt={selectedOpt}\n\t\t\t\toptions={options}\n\t\t\t\tremoveItemHandler={removeItemHandler}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tmultiple={multiple}\n\t\t\t/>\n\t\t</PickerField>\n\t)\n}\n\nfunction IconTrigger(p:{\n\tid: string;\n\tmenuId: string;\n\topen: boolean;\n\tcolor: GitHubPickerColor;\n\tdisabled: boolean;\n\ttitle?: string;\n\ttitleIcon?: React.ReactNode;\n\tselectedCount: number;\n\tselectedLabels: string[];\n\tonToggle: (element: HTMLElement) => void;\n}) {\n\tconst { id, menuId, open, color, disabled, title, titleIcon, selectedCount, selectedLabels, onToggle } = p\n\tconst tooltip = selectedLabels.length > 0\n\t\t? selectedLabels.join(', ')\n\t\t: (title ?? 'Select')\n\n\treturn (\n\t\t<Badge\n\t\t\tbadgeContent={selectedCount}\n\t\t\tinvisible={selectedCount === 0}\n\t\t\tcolor={color}\n\t\t\tstyle_variant=\"filled\"\n\t\t\toverlap=\"circular\"\n\t\t\tsx={gitHubPickerRootSx}\n\t\t\tmax={99}\n\t\t>\n\t\t\t<Box sx={{ display: 'inline-flex' }}>\n\t\t\t\t<IconButton\n\t\t\t\t\tid={id}\n\t\t\t\t\ttitle={open ? '' : tooltip}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tselected={open}\n\t\t\t\t\tcolor={color}\n\t\t\t\t\taria-label={title ?? 'Select'}\n\t\t\t\t\taria-expanded={open}\n\t\t\t\t\taria-haspopup=\"listbox\"\n\t\t\t\t\taria-controls={open ? menuId : undefined}\n\t\t\t\t\tonClick={(event) => onToggle(event.currentTarget)}\n\t\t\t\t>\n\t\t\t\t\t{titleIcon ?? <FilterIcon />}\n\t\t\t\t</IconButton>\n\t\t\t</Box>\n\t\t</Badge>\n\t)\n}\n\nfunction DisplaySelected(p:{\n\tselectedOpt:MinimalOption[];\n\toptions:OptionClass[];\n\tremoveItemHandler:(id:OptionId)=>()=>void;\n\tdisabled:boolean;\n\tmultiple:boolean;\n}){\n const {selectedOpt,options,removeItemHandler,disabled,multiple} = p\n\tconst selectedIds = selectedOpt.map(itm=>itm.id)\n\tconst displaySelectedOptions = options.filter(itm => selectedIds.includes(itm.id))\n\n\tif (displaySelectedOptions.length === 0) {\n\t\treturn (\n\t\t\t<Typography\n\t\t\t\tsx={{\n\t\t\t\t\tfontSize: '0.9rem',\n\t\t\t\t\tfontWeight: 500,\n\t\t\t\t\tcolor: 'var(--picker-text-secondary)',\n\t\t\t\t\topacity: 0.78,\n\t\t\t\t\tlineHeight: 1.4,\n\t\t\t\t\tm: 0,\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{multiple ? 'Select options' : 'Select an option'}\n\t\t\t</Typography>\n\t\t)\n\t}\n\n\treturn (\n\t\t<Box sx={{\n\t\t\toverflow:\"hidden\",\n\t\t\tdisplay:\"flex\",flexWrap:\"wrap\",\n\t\t\tgap:\"6px\",\n\t\t}}>\n\t\t\t{displaySelectedOptions.map((o) => {\n\t\t\t\treturn (\n\t\t\t\t\t<Box key={o.id} sx={{\n\t\t\t\t\t\toverflow:\"hidden\",\n\t\t\t\t\t\tmaxWidth:\"100%\",\n\t\t\t\t\t}}>\n\t\t\t\t\t\t<OptionRenderer\n\t\t\t\t\t\t\toption={o}\n\t\t\t\t\t\t\tselected={true}\n\t\t\t\t\t\t\tisIconClickable={true}\n\t\t\t\t\t\t\tremoveItemHandler={removeItemHandler(o?.id)}\n\t\t\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\t\t\tslotProps={{\n\t\t\t\t\t\t\t\tDM:{\n\t\t\t\t\t\t\t\t\tisShowDescription:false,\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Box>\n\t\t\t\t)\n\t\t\t})}\n\t\t</Box>\n\t)\n}\n","export {default as GitHubPicker, type GitHubPickerVariant, type GitHubPickerColor} from './GitHubPicker'\nexport { OptionClass, type OptionParams, } from './_utils'","export * from './GitHubPicker'","export * from './src'","// central registry for CSS class names used throughout the codebase\n//\n// Storing them in one object makes it easy to search for components in tests\n// and debugging tools, and prevents accidental mismatches when strings are\n// copied by hand. Add additional entries here as new components need them.\n\nexport const CLASSNAMEs = {\n elemental: {\n avatar: {\n // root wrapper for the Avatar component\n root: 'Elemental-Avatar',\n // button variant used by AvatarButton and related controls\n button: 'Elemental-AvatarButton',\n },\n modal: 'Elemental-Modal',\n },\n compound: {\n useForm: {\n // class applied to the wrapper around the avatar field inside UseForm\n avatarField: 'UseForm-AvatarField',\n },\n },\n} as const;\n","export {default as Skeleton} from '@mui/material/Skeleton'\n","import { Stack as MuiStack } from '@/ele/Box'\n\nimport { Skeleton } from '../MuiSkeleton'\n\n/**\n * A skeleton component for displaying a loading state for dialogs.\n * @param {Object} props - The properties for the DialogSkeleton component.\n * @param {number} [props.height=60] - The height of the entire skeleton\n */\nexport default function DialogSkeleton({\n height = 60,\n}: {\n height?: number;\n}) {\n const numberOfLines = Math.floor(height / 5)\n if(numberOfLines < 1) return null\n return (\n <MuiStack spacing={0.5} width=\"100%\">\n {\n Array(numberOfLines).fill(0).map((_, index) => (\n <Skeleton\n key={index}\n variant=\"rounded\"\n width={`${100 - index%3 * 15}%`}\n height={5}\n\n />\n ))\n }\n </MuiStack>\n )\n\n}\n","export {default} from './DialogSkeleton'\n","export {Skeleton} from './MuiSkeleton'\nexport {default as DialogSkeleton} from './DialogSkeleton'\n","export type Size = 'xs' | 'sm' | 'md' | 'lg' | 'xl';","import type { Size } from '../_utils'\n\nexport const AVATARBUTTON_STANDARD_DIMENSIONs = {\n xs:\"36px\",\n sm: \"100px\",\n md: \"120px\",\n lg: \"200px\",\n xl: \"240px\",\n} as const satisfies Record<Size, string>;\n\nexport const AVATAR_SIZEs = {\n xs: \"20px\",\n sm: \"24px\",\n md: \"40px\",\n lg: \"56px\",\n xl: \"80px\",\n} as const satisfies Record<Size, string>;\n\nexport const AVATAR_SX = {\n column:{\n stackSX:{\n xs: {gap: 0.5},\n sm: {gap: 0.5},\n md: {gap: 0.75},\n lg: {gap: 1},\n xl: {gap: 1},\n },\n fontSize: \"0.6rem\",\n },\n row:{\n stackSX:{\n xs: {gap: 0.75},\n sm: {gap: 0.75},\n md: {gap: 1},\n lg: {gap: 1.5},\n xl: {gap: 2},\n },\n fontSize: \"0.8rem\",\n }\n} as const satisfies {\n [key in 'column' | 'row']: {\n stackSX: Record<Size, {gap:number}>,\n fontSize: string,\n }\n};","export * from './_types'\nexport * from './_const'","import MuiAvatar, {type AvatarProps} from '@mui/material/Avatar'\nimport { CLASSNAMEs } from '@/_utils/_const/classNames';\nimport { Stack } from '@/ele/Box'\nimport { Skeleton } from '@/ele/Skeleton'\n\nimport { Subscript } from '@/ele/Typography'\n\nimport { AVATAR_SIZEs, AVATAR_SX, type Size } from '../_utils'\n\ninterface MuiAvatarProps {\n name?: string;\n src?: string;\n size?: Size;\n fontSize?: string | number;\n displayName?: boolean;\n direction?: 'column' | 'row';\n dim?: {\n width?: string | number;\n height?: string | number;\n };\n backgroundIcon?: React.ReactNode;\n}\n\n/**\n * A styled Mui Avatar component\n * \n * [Doc](https://mui.com/material-ui/api/avatar/)\n */\nexport default function Avatar(props: MuiAvatarProps) {\n const {\n name,\n src,\n size=\"md\", // sm, md, lg\n fontSize, \n displayName=true, \n direction=\"column\",\n dim={},\n backgroundIcon,\n ...rest\n } = props\n\n const h = dim.height || AVATAR_SIZEs[size]\n const w = dim.width || AVATAR_SIZEs[size]\n\n return (\n <Stack\n className={CLASSNAMEs.elemental.avatar.root}\n style={{\n '--AVATAR_SX': direction,\n '--gap': AVATAR_SX[direction]?.stackSX[size]?.gap,\n } as React.CSSProperties}\n sx={() => ({\n direction:\"var(--AVATAR_SX)\",\n gap: `calc(var(--gap) * 8px)`,\n justifyContent: \"center\",\n overflow: \"hidden\",\n })} \n alignItems=\"center\" direction={direction}>\n <AvatarSkel \n name={name} \n src={src} \n h={h} \n w={w} \n backgroundIcon={backgroundIcon} \n {...rest}\n />\n {name && displayName && <NameSkel name={name} direction={direction} fontSize={fontSize}/>}\n </Stack>\n )\n}\n\ninterface AvatarSkelProps extends Omit<AvatarProps, \"children\"> {\n name?: string;\n src?: string;\n h: string | number;\n w: string | number;\n backgroundIcon?: React.ReactNode;\n}\n\nfunction AvatarSkel(props: AvatarSkelProps) {\n const { name, src, h, w, backgroundIcon, ...rest } = props\n if(!name && !src) return <Skeleton variant=\"circular\" width={w} height={h} />\n if(backgroundIcon) return (<Stack sx={{\n position: 'relative', width: w, height: h,\n alignItems: 'center', justifyContent: 'center',\n \"&>svg\":{\n height: w, width: h,\n padding: '0.25em',\n borderRadius: '50%',\n },\n }}>{backgroundIcon}</Stack>)\n return (<NameAvatar name={name} src={src} h={h} w={w} {...rest}/>)\n}\n\ninterface NameSkelProps {\n name?: string;\n direction: 'column' | 'row';\n fontSize?: string | number;\n}\n\n/**\n * A Mui Skeleton component which used as a placeholder for loading image\n * \n * [Doc](https://mui.com/material-ui/api/skeleton/)\n */\nexport function NameSkel(props: NameSkelProps) {\n const { name, direction, fontSize } = props\n if(!name) return <Skeleton variant=\"text\" width={40} height={20} />\n\n const fs = typeof fontSize === 'number' ? `${fontSize}px` : fontSize\n return <Subscript fontSize={fs || AVATAR_SX[direction]?.fontSize} lineHeight=\"1.2\" \n style={{\n \"--fs-n\": fontSize || AVATAR_SX[direction]?.fontSize,\n \"--lh-n\": \"1.2\",\n } as React.CSSProperties}\n sx={{\n \"&.MuiTypography-root\":{\n whiteSpace:\"nowrap\",\n fontSize: \"var(--fs-n)\",\n lineHeight: \"var(--lh-n)\",\n WebkitLineClamp: \"3\",\n WebkitBoxOrient: \"vertical\",\n maxWidth: '-webkit-fill-available',\n lineBreak: 'anywhere',\n },\n }}>{name}</Subscript>\n\n}\n\ninterface NameAvatarProps extends Omit<AvatarProps, \"children\"> {\n name?: string;\n src?: string;\n h: string | number;\n w: string | number;\n}\n\nfunction NameAvatar(props: NameAvatarProps) {\n const { name, src, h, w, ...rest } = props\n return (\n <MuiAvatar \n {...stringAvatar(name,src)} \n {...rest} \n \n style={{\n '--w': typeof w === 'number' ? `${w}px` : w,\n '--h': typeof h === 'number' ? `${h}px` : h,\n '--fs': \"calc(var(--w) / 2)\", // half of the height, so it will be fit in the circle\n } as React.CSSProperties} \n sx={{\n \"&.MuiAvatar-root\":{\n fontSize: \"var(--fs)\",\n color: 'var(--avatar-color)',\n backgroundColor: 'transparent',\n width: 'var(--w)',\n height: 'var(--h)',\n },\n }}\n />)\n}\nfunction stringAvatar(name?:string,src?:string){\n if(src) return {src}\n if(!name) return { children: '' }\n\n const splitName = name.split(' ')\n const first = splitName[0] || ''\n const second = splitName[1] || ''\n const str = `${first[0] || ''}${second[0] || ''}`\n\n return {\n children: str,\n }\n}","import type { MuiComponentTheme } from '@/_utils/_types'\nimport type { SxProps, Theme } from '@mui/material/styles'\n\nexport const avatarTheme = {\n styleOverrides: {\n root: {\n '--avatar-bg': 'var(--mui-palette-action-selected)',\n '--avatar-color': 'var(--mui-palette-text-primary)',\n backgroundColor: 'var(--avatar-bg)',\n color: 'var(--avatar-color)',\n },\n },\n} as const satisfies MuiComponentTheme<'MuiAvatar'>\n\n/** Static palette aliases for AvatarButton root element */\nexport const avatarButtonRootSx: SxProps<Theme> = {\n '--avatar-button-text': 'var(--mui-palette-text-primary)',\n '--avatar-hover-icon-color': 'var(--mui-palette-text-subscript)',\n} as const satisfies SxProps<Theme>\n","import React from 'react'\nimport { IconButton } from '@/ele/Button'\nimport { Box } from '@/ele/Box'\n\nimport Avatar, { NameSkel } from './Avatar'\nimport { CLASSNAMEs } from '@/_utils/_const/classNames';\nimport { Size, AVATARBUTTON_STANDARD_DIMENSIONs } from '../_utils'\nimport { avatarButtonRootSx } from './themes'\nimport { mergeSx } from '@/_utils/_func'\n\nconst pos = {\n top: {dir:\"column-reverse\",gap:0.5,direction:\"column\"},\n bottom: {dir:\"column\",gap:0.5,direction:\"column\"},\n left: {dir:\"row-reverse\",gap:1,direction:\"row\"},\n right: {dir:\"row\",gap:1,direction:\"row\"},\n} as const\n\ninterface AvatarButtonProps {\n onClick?: React.ComponentProps<typeof IconButton>['onClick'];\n size?: Size;\n disabled?: boolean;\n dim?: React.ComponentProps<typeof Avatar>['dim'];\n\n backgroundUrl?: string;\n backgroundIcon?: React.ReactNode;\n icon?: React.ReactNode;\n fontSize?: string | number;\n\n name?: string; \n src?: string;\n showName?: boolean;\n namePosition?: keyof typeof pos;\n hasBorder?: boolean;\n 'aria-label'?: string;\n}\n\n/**\n * A clickable Mui Avatar component\n * \n * use button to wrap an Avatar component\n * \n * logic:\n * use backgroundIcon if any\n * then use backgroundUrl if any\n * then name if any\n */\nexport default function AvatarButton(props: AvatarButtonProps) {\n const {\n onClick,\n size=\"md\",\n disabled=false,\n dim,\n\n backgroundUrl=\"transparent\",\n icon=null,\n fontSize,\n\n name=\"\", \n src=\"\",\n showName=false, \n namePosition=\"bottom\",// namePosition: top, bottom, left, right\n \n backgroundIcon,\n hasBorder=true,\n 'aria-label': ariaLabel,\n } = props\n\n const _dim = {\n w: dim?.width ?? AVATARBUTTON_STANDARD_DIMENSIONs[size],\n h: dim?.height ?? AVATARBUTTON_STANDARD_DIMENSIONs[size],\n }\n\n return (\n <Box\n className={CLASSNAMEs.elemental.avatar.button}\n sx={mergeSx(avatarButtonRootSx, {\n display:\"flex\",\n flexDirection:pos[namePosition]?.dir,\n alignItems:\"center\",\n gap:pos[namePosition]?.gap,\n })}>\n <IconButton\n onClick={onClick}\n disabled={disabled}\n disableRipple\n aria-label={ariaLabel}\n style={{\n '--bg': backgroundUrl,\n '--bg-size': _dim.w,\n '--size': _dim.w,\n '--shadow': hasBorder ? 'var(--mui-palette-shadow-border-1)' : 'none',\n } as React.CSSProperties}\n sx={{\n '&.MuiButtonBase-root':{\n border:\"none\",\n position: 'relative',\n color:\"var(--avatar-button-text)\",\n background:\"var(--bg)\",\n backgroundSize:'var(--bg-size)',\n width:'var(--size)',\n height:'var(--size)',\n // allow overlay banner to fit the button\n padding: 0,\n \n // shadow\n boxShadow: \"var(--shadow)\",\n borderRadius:\"50%\",\n \n // hover effect\n '&:hover, &.Mui-focusVisible': {\n zIndex: 1,\n '& .MuiImageBackdrop-root': {\n opacity: 0.5,\n },\n '& .MuiImageMarked-root': {\n opacity: 0,\n },\n '& .MuiTypography-root': {\n border: '4px solid currentColor',\n },\n },\n },\n }} \n >\n <Box sx={{\n width:\"100%\",\n position:\"absolute\",\n top:0,\n left:0,\n right:0,\n bottom:0,\n zIndex:1,\n \"&>.MuiStack-root\":{\n width:\"100%\",\n height:\"100%\",\n maxWidth:\"100%\",\n maxHeight:\"100%\",\n },\n }}>\n <ImageBackdrop/>\n <HoverIcon icon={icon} />\n <Avatar\n name={name} src={src} backgroundIcon={backgroundIcon}\n displayName={false}\n dim={{\n width:_dim.w,\n height:_dim.h,\n }}\n />\n </Box>\n </IconButton>\n {showName && <NameSkel name={name} direction={pos[namePosition].direction} fontSize={fontSize}/>}\n </Box>\n\n )\n}\n\nfunction HoverIcon({ icon }: { icon: React.ReactNode }) {\n return (\n <Box className=\"HoverIcon-root\"\n sx={{\n position:\"absolute\",\n top:0,\n left:0,\n right:0,\n bottom:0,\n zIndex:2,\n \"&>*\":{display:\"none\"},\n \"&:hover>*\":{display:\"flex\"},\n borderRadius:\"50%\",\n }}>\n <Box sx={{\n width:\"100%\",\n height:\"100%\",\n display:\"none\",\n justifyContent:\"center\",\n alignItems:\"center\", \n color:\"var(--avatar-hover-icon-color)\",\n }}>\n {icon}\n </Box>\n </Box>\n )\n}\n\nfunction ImageBackdrop() {\n return (\n <Box component=\"span\"\n className=\"MuiImageBackdrop-root\"\n sx={{\n zIndex: 2,\n position: 'absolute',\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n backgroundColor: \"#000\", // photo overlay — CSS variable tokens cannot reliably target this layer\n opacity: 0,\n transition: \"opacity 0.3s\",\n borderRadius:\"50%\",\n }}/>\n )\n}","export {\n default,\n default as Avatar,\n NameSkel,\n} from './Avatar'\nexport {default as AvatarButton} from './AvatarButton'\nexport * from './themes'","'use client'\nimport React from 'react'\nimport MenuItem from '@mui/material/MenuItem'\nimport ListItemIcon from '@mui/material/ListItemIcon'\nimport { styled } from '@mui/material/styles'\n\nexport const StyledMenuItem = styled(MenuItem,{\n shouldForwardProp: (prop) => prop !== 'customPadding' && prop !== 'customFontSize',\n})<{customPadding?: React.CSSProperties['padding'], customFontSize?: React.CSSProperties['fontSize']}>(({ customPadding, customFontSize }) => ({\n width: \"-webkit-fill-available\",\n borderRadius: \"8px\",\n minHeight: \"fit-content\",\n padding: customPadding || \"6px 16px\",\n margin: \"0\",\n overflow: \"hidden\",\n gap: \"4px\",\n\n \"& .MuiListItemText-primary\": {\n fontSize: customFontSize || '1rem',\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n },\n}));\n\nexport const StyledItemIcon = styled(ListItemIcon,{\n shouldForwardProp: (prop) => prop !== 'isIconOnly',\n})<{isIconOnly?:boolean}>({\n \"&.MuiListItemIcon-root\":{\n minWidth: \"var(--minW)\",\n },\n\n variants:[\n {\n props:{isIconOnly:true},\n style:{\n '--minW':\"0\",\n },\n },\n {\n props:{isIconOnly:false},\n style:{\n '--minW':\"auto\",\n },\n },\n {\n props:{isIconOnly:undefined}, // default\n style:{\n '--minW':\"auto\",\n }\n }\n ]\n})\n","'use client'\nimport { useState ,forwardRef, useImperativeHandle, useMemo, useEffect } from 'react'\nimport MenuList from '@mui/material/MenuList'\nimport ListItemText from '@mui/material/ListItemText'\nimport {styled} from '@mui/material/styles'\n\nimport type {MenuOption,OnItemClickHandler,MenuRef} from '../_utils'\nimport { StyledMenuItem, StyledItemIcon } from '../MenuItem'\n\ntype Props = {\n\toptions: MenuOption[];\n optionHeader?:React.ReactNode;\n extraItemClickHandler?:OnItemClickHandler;\n menuItemProps?:{\n variant?: 'rounded' | 'square';\n fontSize?: React.CSSProperties['fontSize'];\n padding?: React.CSSProperties['padding'];\n };\n initSelected:MenuOption[\"id\"][];\n multiple?:boolean;\n autoFocusItem?:boolean;\n menuRef?:React.RefObject<HTMLUListElement|null> ;\n isIconOnly?:boolean; // if true, only icon will be shown\n sorted?:boolean; // if true, options will be sorted by label\n}\n/**\n * A Mui Menu component\n * \n * @param extraItemClickHandler - a function to be called when an item is clicked\n * \n */\nconst CustomMenuList = forwardRef<MenuRef,Props>(({\n\toptions=[],\n extraItemClickHandler,\n menuItemProps, \n initSelected=[],\n multiple=false,\n autoFocusItem,\n menuRef,\n isIconOnly=false,\n optionHeader,\n sorted=true,\n},ref) => {\n const [localSelected,setLocalSelected] = useState<Props[\"initSelected\"]>(initSelected)\n\n useImperativeHandle(ref, () => ({\n getSelectedItem: () => localSelected,\n \n }), [localSelected])\n\n useEffect(()=>{\n setLocalSelected(initSelected)\n },[initSelected])\n\n const sortedOptions = useMemo(()=>{\n if(!sorted)return options\n return [...options].sort((a, b) => {\n if(a.label && b.label){\n return a.label.toString().localeCompare(b.label.toString())\n }\n return 0\n })\n },[sorted, options])\n\n\treturn (\n\t\t<StyledMenuList ref={menuRef}\n autoFocusItem={autoFocusItem}\n fontSize={menuItemProps?.fontSize}\n padding={menuItemProps?.padding}\n >\n {optionHeader}\n {sortedOptions.map((o, i) => (\n\n <StyledMenuItem key={i} \n selected={localSelected.includes(o.id)}\n customPadding={menuItemProps?.padding}\n customFontSize={menuItemProps?.fontSize}\n onClick={(e)=>{\n if(extraItemClickHandler)extraItemClickHandler(e)\n if(multiple)setLocalSelected(old=>{\n // if already selected, remove it\n if(old.includes(o.id))return old.filter(id=>id!==o.id)\n // else add it\n return [...old,o.id]\n })\n o.onClick?.()\n }}>\n {o.icon && <StyledItemIcon isIconOnly={isIconOnly}>{o.icon}</StyledItemIcon>}\n {o.label && !isIconOnly && <ListItemText>{o.label}</ListItemText>}\n {o.extension}\n </StyledMenuItem>\n\n ))}\n </StyledMenuList>\n\t)\n})\nexport default CustomMenuList\n\ntype CustomMenuListProps = {\n fontSize?: React.CSSProperties['fontSize'];\n padding?: React.CSSProperties['padding'];\n}\nconst StyledMenuList = styled(MenuList,{\n shouldForwardProp: (prop) => \n prop !== 'fontSize'\n && prop !== 'padding',\n})<CustomMenuListProps>(p=>createMenuListTheme(p))\n\ntype StyledMenuListProps = React.ComponentProps<typeof MenuList> & CustomMenuListProps\nexport function createMenuListTheme(p:StyledMenuListProps){\n return {\n \"&.MuiList-root\":{\n padding:\"8px 4px\",\n display:\"flex\",\n flexDirection:\"column\",\n alignContent:\"center\",\n alignItems:\"center\",\n width:\"100%\",\n gap:\"2px\",\n\n \"& li\":{\n width:\"-webkit-fill-available\",\n borderRadius:\"8px\",\n minHeight:\"fit-content\",\n padding:p.padding || \"6px 16px\",\n margin:\"0\",\n overflow:\"hidden\",\n \n \"& .MuiListItemText-primary\":{\n fontSize:p.fontSize || '1rem',\n overflow:\"hidden\",\n textOverflow:\"ellipsis\",\n },\n },\n },\n }\n}","import type { MuiComponentTheme } from '@/_utils/_types'\n\nexport const menuItemTheme = {\n defaultProps: {\n },\n styleOverrides: {\n root: {\n '--menu-item-hover-bg': 'var(--mui-palette-background-hover-1)',\n '--menu-item-selected-bg': 'var(--mui-palette-focus-1)',\n\n \"&:hover\":{\n backgroundColor:\"var(--menu-item-hover-bg)\",\n },\n \"&.Mui-selected:before\":{\n width:\"100%\",\n height:\"100%\",\n content:\"''\",\n position:\"absolute\",\n left:0,\n top:0,\n backgroundColor:\"var(--menu-item-selected-bg)\",\n overflow:\"hidden\",\n },\n\n \"& svg\":{\n fontSize:\"1.2rem\",\n },\n \n },\n\n }\n\n} as const satisfies MuiComponentTheme<\"MuiMenuItem\">\n\nexport const menuTheme = {\n styleOverrides: {\n \n },\n} as const satisfies MuiComponentTheme<\"MuiMenu\">","export {default as Menu} from './Menu'\nexport {default as MenuItem} from '@mui/material/MenuItem'\nexport * from './theme'","'use client'\nimport { Popper, ClickAwayListener } from '@/ele/Overlay'\nimport { Paper } from '@/ele/Paper'\nimport { useState, useRef } from 'react'\n\nimport {Menu} from '../Menu'\nimport type { \n\tMenuOption, \n\tOnItemClickClientArg, OnTriggerClickHandler,\n\tMenuRef,\n} from '../_utils'\n\ntype MenuPopperProps = {\n\toptions: MenuOption[];\n\tplacement?: React.ComponentProps<typeof Popper>[\"placement\"];\n\topenMenuProps: OpenMenuProps;\n\tmenuItemProps?: React.ComponentProps<typeof Menu>[\"menuItemProps\"];\n\toptionHeader?: React.ComponentProps<typeof Menu>[\"optionHeader\"];\n}\n\n/**\n * A Mui Menu component that is triggered by an icon button.\n */\nexport const MenuPopper = ({\n\tplacement=\"bottom-start\",\n\toptions=[],\n\topenMenuProps,\n\tmenuItemProps,\n\toptionHeader,\n}: MenuPopperProps) => {\n\tconst {\n\t\tcloseHandler,\n\t\tanchorEl,\n\t\tonItemClickClientArg,\n\t\tmultiple,\n\t\tref,\n\t\tmenuRef,\n\t\tinitSelected,\n\t\tsorted=true,\n\t} = openMenuProps;\n\n\tconst open = Boolean(anchorEl)\n\n\treturn (\n\t\t<Popper\n\t\t\topen={open}\n\t\t\tanchorEl={anchorEl}\n\t\t\tplacement={placement}\n\t\t\tsx={{ zIndex: \"1301\" }}\n\t\t\tmodifiers={[{\n\t\t\t\tname: 'offset',\n\t\t\t\toptions: { offset: [0, 8] }\n\t\t\t}]}\n\t\t>\n\t\t\t<Paper\n\t\t\t\tvariant='outlined'\n\t\t\t\tsx={{\n\t\t\t\t\t\"&.MuiPaper-root\":{\n\t\t\t\t\t\tpr:1,\n\t\t\t\t\t\tminWidth:150,\n\t\t\t\t\t\tmaxHeight:300,\n\t\t\t\t\t\tborderRadius:\"16px\",\n\t\t\t\t\t\toverflow:\"hidden\",\n\t\t\t\t\t\tdisplay:\"flex\",\n\t\t\t\t\t\tflexDirection:\"column\",\n\n\t\t\t\t\t\t\"& .MuiList-root\":{\n\t\t\t\t\t\t\tdisplay:\"flex\",\n\t\t\t\t\t\t\tflexDirection:\"column\",\n\t\t\t\t\t\t\talignContent:\"center\",\n\t\t\t\t\t\t\talignItems:\"center\",\n\t\t\t\t\t\t\twidth:\"100%\",\n\t\t\t\t\t\t\toverflowY:\"auto\",\n\t\t\t\t\t\t\theight:\"100%\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"& li\":{\n\t\t\t\t\t\t\twidth:\"100%\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<ClickAwayListener onClickAway={closeHandler}>\n\t\t\t\t\t<Menu \n\t\t\t\t\t\tref={ref} \n\t\t\t\t\t\tmenuRef={menuRef}\n\t\t\t\t\t\tautoFocusItem={open}\n\t\t\t\t\t\tmenuItemProps={menuItemProps}\n\t\t\t\t\t\toptionHeader={optionHeader}\n\t\t\t\t\t\toptions={options} \n\t\t\t\t\t\tmultiple={multiple}\n\t\t\t\t\t\tinitSelected={initSelected}\n\t\t\t\t\t\textraItemClickHandler={(e) => {\n\t\t\t\t\t\t\tif(onItemClickClientArg) onItemClickClientArg({event:e, closeHandler})\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tsorted={sorted}\n\t\t\t\t\t/>\n\t\t\t\t</ClickAwayListener>\n\t\t\t</Paper>\n\t\t</Popper>\n\t)\n}\n\nexport type OpenMenuProps = {\n\tanchorEl: HTMLButtonElement | HTMLDivElement | null;\n\tanchorPosition: {top:number; left:number};\n\tonTriggerClickHandler: OnTriggerClickHandler;\n\tonItemClickClientArg?: OnItemClickClientArg;\n\tcloseHandler: (event?: Event | React.SyntheticEvent) => void;\n\tmultiple?: boolean;\n\tref: React.RefObject<MenuRef | null>;\n\tmenuRef: React.RefObject<HTMLUListElement | null>;\n\tinitSelected: MenuOption[\"id\"][];\n\tsorted?: boolean;\n}\n\ntype UseMenuProps = {\n\tonItemClickClientArg?: OnItemClickClientArg;\n\tmultiple?: boolean;\n\tinitSelected?: OpenMenuProps[\"initSelected\"];\n\tsetSelected?: React.Dispatch<React.SetStateAction<MenuOption[\"id\"][]>>;\n}\n\nexport default function useMenu({\n\tonItemClickClientArg,\n\tmultiple=false,\n\tinitSelected=[],\n\tsetSelected,\n}: UseMenuProps): OpenMenuProps {\n\tconst [anchorEl, setAnchorEl] = useState<OpenMenuProps[\"anchorEl\"]>(null)\n\tconst [anchorPosition, setAnchorPosition] = useState<OpenMenuProps[\"anchorPosition\"]>({top:0, left:0})\n\tconst ref = useRef<MenuRef|null>(null)\n\tconst menuRef = useRef<HTMLUListElement|null>(null)\n\n\tconst closeHandler = (event?: Event | React.SyntheticEvent) => {\n\t\t// if the anchor element contains the event target, then return\n\t\tif (\n\t\t\tevent\n\t\t\t&& menuRef.current\n\t\t\t&& event.target instanceof Node\n\t\t\t&& menuRef.current.contains(event.target)\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\t// update the selected value if setSelected is provided and multiple is true\n\t\tif(setSelected && multiple){\n\t\t\tconst localSelected = ref.current?.getSelectedItem()\n\t\t\t// only update the selected value if the selected value is an array\n\t\t\tif(localSelected && Array.isArray(localSelected)){\n\t\t\t\tsetSelected(localSelected)\n\t\t\t}\n\t\t}\n\t\tsetAnchorEl(null)\n\t}\n\n\tconst onTriggerClickHandler: OnTriggerClickHandler = (event) => {\n\t\tconst bottom = event.clientY\n\t\tconst right = event.clientX\n\t\n\t\tsetAnchorEl(event.currentTarget)\n\t\tsetAnchorPosition({top:bottom, left:right})\n\t}\n\n\treturn {\n\t\tanchorEl, \n\t\tanchorPosition,\n\t\tonTriggerClickHandler,\n\t\tonItemClickClientArg,\n\t\tcloseHandler,\n\t\tmultiple,\n\t\tref,\n\t\tinitSelected,\n\t\tmenuRef,\n\t}\n}","'use client'\nimport { useMemo } from 'react'\n\nimport { IconButton, IconButtonSpin } from '@/ele/Button'\n\nimport useMenu, { MenuPopper, type OpenMenuProps } from './useMenu'\nimport type { \n\tOnItemClickClientArg, \n\tMenuOption,\n} from '../_utils'\n\n// allow the CustomTriggerBtn to be a button or a div\nexport type TriggerBtnIconProps = {\n\ticon?: React.ReactNode;\n\ttitle?: string;\n\ticonSize?: \"small\" | \"medium\" | \"large\";\n\tonItemClickClientArg?: OnItemClickClientArg;\n\tisSpinButton?: boolean;\n} & Omit<React.ComponentProps<typeof IconButton>,\"title\"|\"size\"|\"children\"|\"onClick\">;\n\nexport type IconMenuListSlots = {\n\t/**\n\t * The component used for the trigger button.\n\t * Defaults to IconButton (or IconButtonSpin if isSpinButton is true).\n\t */\n\ttrigger?: React.ElementType;\n}\n\nexport type IconMenuListSlotProps = {\n\t/**\n\t * Props passed to the trigger component.\n\t */\n\ttrigger?: TriggerBtnIconProps;\n\t/**\n\t * Props passed to the MenuPopper component (logic props).\n\t */\n\tmenu?: Partial<OpenMenuProps>;\n\t/**\n\t * Props passed to the menu items.\n\t */\n\tmenuItem?: React.ComponentProps<typeof MenuPopper>[\"menuItemProps\"];\n\t/**\n\t * Props/Content for the option header.\n\t */\n\toptionHeader?: React.ComponentProps<typeof MenuPopper>[\"optionHeader\"];\n\t/**\n\t * Props passed to the Popper component.\n\t */\n\tpopper?: Omit<React.ComponentProps<typeof MenuPopper>, 'openMenuProps' | 'options' | 'menuItemProps' | 'optionHeader'>;\n}\n\nexport type IconMenuListProps = {\n\toptions: MenuOption[];\n\tslots?: IconMenuListSlots;\n\tslotProps?: IconMenuListSlotProps;\n}\n\n/**\n * A Mui Menu component that is triggered by an icon button.\n */\nconst IconMenuList = (props: IconMenuListProps) => {\n\tconst {\n\t\toptions=[],\n\t\tslots={},\n\t\tslotProps={},\n\t} = props;\n\n\tconst {\n\t\ttrigger: triggerProps = {},\n\t\tmenu: menuProps,\n\t\tmenuItem: menuItemProps,\n\t\toptionHeader: optionHeaderProps,\n\t\tpopper: popperProps,\n\t} = slotProps;\n\n\tconst {\n\t\ttitle,\n\t\tonItemClickClientArg,\n\t\ticon,\n\t\ticonSize=\"small\",\n\t\tisSpinButton,\n\t\t...triggerExtraProps\n\t} = triggerProps;\n\t\n\tconst p = useMenu({\n\t\tonItemClickClientArg:(p)=>{\n\t\t\tif(p.closeHandler)p.closeHandler()\n\t\t\tif(onItemClickClientArg)onItemClickClientArg(p)\n\t\t},\n\t})\n\n\tconst Trigger = useMemo(() => {\n\t\tif (slots.trigger) return slots.trigger;\n\t\tif (isSpinButton) {\n\t\t\treturn IconButtonSpin;\n\t\t} else {\n\t\t\treturn IconButton;\n\t\t}\n\t}, [isSpinButton, slots.trigger]);\n\n\treturn (\n\t\t// dont use Box here, it will cause the Button tooltip render differently\n\t\t// the height of the tooltip will be a bit off from IconButton\n\t\t<>\n\t\t\t<Trigger \n\t\t\t\ttitle={title} \n\t\t\t\tonClick={p.onTriggerClickHandler}\n\t\t\t\tsize={iconSize}\n\t\t\t\t{...triggerExtraProps}\n\t\t\t>\n\t\t\t\t{icon}\n\t\t\t</Trigger>\n\n\t\t\t<MenuPopper \n\t\t\t\topenMenuProps={{\n\t\t\t\t\t...p,\n\t\t\t\t\t...menuProps,\n\t\t\t\t}}\n\t\t\t\toptionHeader={optionHeaderProps}\n\t\t\t\toptions={options}\n\t\t\t\tmenuItemProps={menuItemProps}\n\t\t\t\t{...popperProps}\n\t\t\t/>\n\t\t</>\n\t)\n}\n\nexport default IconMenuList","export {default as useMenu, MenuPopper} from './useMenu'\nexport {default as IconMenu} from './IconMenu'","import FormLabel, { type FormLabelProps } from '@mui/material/FormLabel'\n\n/**\n * A wrapper for Mui FormLabel\n */\nexport default function MuiFormLabel(props: FormLabelProps) {\n return <FormLabel {...props} />\n}\n","import type { MuiComponentTheme } from '@/_utils/_types'\n\nexport const formLabelTheme = {\n defaultProps: {\n },\n styleOverrides: {\n root: ({\n '--form-label-color': 'var(--mui-palette-text-secondary)',\n color: 'var(--form-label-color)',\n \n maxWidth: \"100%\",\n textOverflow: \"ellipsis\",\n overflow: \"hidden\",\n whiteSpace: \"nowrap\",\n\n \"&.MuiFormLabel-colorSuccess\":{\n color:\"var(--mui-palette-success-main)\",\n },\n \"&.MuiFormLabel-colorError\":{\n color:\"var(--mui-palette-error-main)\",\n },\n \"&.MuiFormLabel-colorInfo\":{\n color:\"var(--mui-palette-info-main)\",\n },\n \"&.MuiFormLabel-colorWarning\":{\n color:\"var(--mui-palette-warning-main)\",\n },\n \"&.MuiFormLabel-colorPrimary\":{\n '--form-label-color':\"var(--mui-palette-primary-emphasis)\",\n color:\"var(--form-label-color)\",\n },\n \"&.MuiFormLabel-colorSecondary\":{\n color:\"var(--mui-palette-secondary-main)\",\n },\n \"&.Mui-disabled\":{\n color:\"var(--mui-palette-text-disabled)\",\n },\n \"&.Mui-error\":{ \n color:\"var(--mui-palette-error-main)\", \n },\n }),\n }\n\n} as const satisfies MuiComponentTheme<\"MuiFormLabel\">","export {default as FormLabel} from './FormLabel'\nexport * from './theme'","import FormControlLabel, { type FormControlLabelProps } from '@mui/material/FormControlLabel'\n\n/**\n * A wrapper for Mui FormControlLabel\n */\nexport default function MuiFormControlLabel(props: FormControlLabelProps) {\n return <FormControlLabel {...props} />\n}\n","import type { MuiComponentTheme } from '@/_utils/_types'\n\nexport const formControlLabelTheme = {\n defaultProps: {\n },\n styleOverrides: {\n root: ({\n '--form-control-label-color': 'var(--mui-palette-text-primary)',\n color: 'var(--form-control-label-color)',\n\n maxWidth: \"100%\",\n textOverflow: \"ellipsis\",\n overflow: \"hidden\",\n whiteSpace: \"nowrap\",\n\n \"&.Mui-disabled\":{\n color:\"var(--mui-palette-text-disabled)\",\n },\n }),\n }\n\n} as const satisfies MuiComponentTheme<\"MuiFormControlLabel\">","export {default as FormControlLabel} from './FormControlLabel'\nexport * from './theme'","import type { MuiComponentTheme } from '@/_utils/_types'\n\nexport const formHelperTextTheme = {\n defaultProps: {\n },\n styleOverrides: {\n root: {\n color: 'var(--mui-palette-text-subscript)',\n }\n },\n} as const satisfies MuiComponentTheme<\"MuiFormHelperText\">","export * from './FormLabel'\n\nexport * from './FormControlLabel'\n\nexport {default as FormControl} from '@mui/material/FormControl'\nexport {default as FormHelperText} from '@mui/material/FormHelperText'\nexport {default as InputAdornment} from '@mui/material/InputAdornment'\nexport {default as InputLabel} from '@mui/material/InputLabel'\nexport * from './themes'","export * from './src'","import MuiCard, { type CardProps } from '@mui/material/Card'\nimport CardContent, { type CardContentProps } from '@mui/material/CardContent'\n\n/**\n * A Simple Mui Card Component\n * \n * [Doc](https://mui.com/material-ui/api/card/)\n */\nexport default function Card({\n children,\n slotProps,\n ...rest\n}: CardProps & {\n slotProps?: { cardContent?: CardContentProps }\n}) {\n return (\n <MuiCard {...rest}>\n <CardContent {...slotProps?.cardContent}>\n {children}\n </CardContent>\n </MuiCard>\n )\n}","import type { MuiComponentTheme } from '@/_utils/_types'\n\nexport const cardTheme = {\n defaultProps: {\n },\n styleOverrides: {\n root: {},\n }\n\n} as const satisfies MuiComponentTheme<\"MuiCard\">\n\nexport const cardContentTheme = {\n defaultProps: {\n },\n styleOverrides: {\n root: {\n },\n }\n} as const satisfies MuiComponentTheme<\"MuiCardContent\">\n\nexport const spotlightCardVars = {\n\t'--hover-shadow-color': 'var(--mui-palette-blink-golden)',\n} as const\n","'use client'\nimport { styled } from '@mui/material/styles'\nimport Card, { type CardProps } from '@mui/material/Card'\nimport CardContent, { type CardContentProps } from '@mui/material/CardContent'\nimport { spotlightCardVars } from './theme'\n\n/**\n * clickable Card with a spotlight effect on hover\n * \n * [Doc](https://mui.com/material-ui/api/card/)\n */\nexport default function SpotlightCard({\n children,\n slotProps,\n ...rest\n}: CardProps & {\n slotProps?: { cardContent?: CardContentProps }\n}) {\n return (\n <SpotlightCardRoot {...rest}>\n <CardContent {...slotProps?.cardContent}>\n {children}\n </CardContent>\n </SpotlightCardRoot>\n )\n}\n\nconst SpotlightCardRoot = styled(Card)({\n ...spotlightCardVars,\n \n \"&.MuiPaper-root\":{\n position: \"relative\",\n cursor: \"pointer\",\n transition:\"all 0.1s\",\n\n \"&:hover\": {\n boxShadow:`\n 0 4px 10px -4px var(--hover-shadow-color), \n 0px 1px 1px 0px rgba(0, 0, 0, 0.14), \n 0px 1px 3px 0px rgba(0, 0, 0, 0.12)`,\n \"&:before\": {\n opacity: 1,\n },\n },\n \"&:before\": {\n content: '\"\"',\n position: \"absolute\",\n left: 0,\n insetBlockEnd: 0,\n display: \"block\",\n width:\"100%\",\n height: \"1px\",\n opacity: 0,\n backgroundImage:\"linear-gradient(to right, transparent, var(--hover-shadow-color), transparent)\",\n transition:\"all 0.1s ease-in-out\",\n },\n },\n})","export { default as Card } from '@mui/material/Card'\nexport {default as CardContainer} from './Card'\nexport * from './theme'\nexport {default as SpotlightCard} from './SpotlightCard'\nexport {default as CardContent} from '@mui/material/CardContent'\nexport {default as CardHeader} from '@mui/material/CardHeader'\nexport {default as CardActions} from '@mui/material/CardActions'","export * from './Card'","export * from './src'","import type { MuiComponentTheme } from '@/_utils/_types'\n\nexport const dividerTheme = {\n\n styleOverrides: {\n root: {\n },\n }\n\n} as const satisfies MuiComponentTheme<\"MuiDivider\">","export {default as Divider} from '@mui/material/Divider'\nexport * from './theme'\nexport * from './theme'","export * from './src'","import type { MuiComponentTheme } from '@/_utils/_types'\n\nexport const checkboxTheme = {\n defaultProps: {\n },\n styleOverrides: {\n root: {\n '--checkbox-color': 'var(--mui-palette-text-grey-1)',\n '--checkbox-selected-bg':'var(--mui-palette-primary-emphasis)',\n\n color: 'var(--checkbox-color)',\n\n \"&.MuiCheckbox-colorPrimary\":{\n '--checkbox-selected-bg': 'var(--mui-palette-primary-emphasis)',\n },\n\n \"&.MuiCheckbox-colorError\":{\n '--checkbox-color': 'var(--mui-palette-error-main)',\n },\n\n \"&.Mui-checked, &.MuiCheckbox-indeterminate\": {\n color: 'var(--checkbox-selected-bg)',\n\n \"&.MuiCheckbox-colorError\":{\n color: 'var(--mui-palette-error-main)',\n }\n },\n\n // check label\n [`&.MuiCheckbox-root + .MuiFormControlLabel-label,\n &.MuiCheckbox-root + .MuiFormControlLabel-label .MuiFormLabel-root\n `]: {\n fontSize: 'inherit',\n },\n },\n },\n} satisfies MuiComponentTheme<'MuiCheckbox'>","export {default as Checkbox} from '@mui/material/Checkbox'\nexport * from './theme'","import { FormControl as MuiFormControl, FormControlLabel as MuiFormControlLabel, FormHelperText as MuiFormHelperText, FormLabel as MuiFormLabel } from '@/ele/Form'\nimport { type FormControlProps } from '@mui/material/FormControl'\nimport MuiFormGroup, { type FormGroupProps } from '@mui/material/FormGroup'\nimport { Box, Stack as MuiStack } from '@/ele/Box'\n\nimport { Checkbox as MuiCheckBox } from '../Checkbox'\nimport { mergeSx } from '@/_utils/_func'\n\nexport interface CheckOptionType{\n id:string;\n label:string;\n}\ntype CheckedStateValue = CheckOptionType['id'][]\ntype OnCheck = (option:CheckOptionType)=>void\n\nexport default function CheckboxGroup({\n error,\n required = false,\n options,\n setCheckedIds,\n title,\n titleSuffix,\n inputProps,\n checkedIds,\n helperText,\n errorText,\n direction = \"row\",\n slotProps = {},\n}: {\n error?: boolean,\n title?: React.ComponentProps<typeof MuiFormLabel>['children'],\n titleSuffix?: React.ComponentProps<typeof MuiFormLabel>['children'],\n options: CheckOptionType[];\n setCheckedIds?: React.Dispatch<React.SetStateAction<CheckedStateValue>>;\n checkedIds: CheckedStateValue;\n required?: boolean,\n helperText?: string,\n errorText?: string,\n direction?: 'row' | 'column',\n inputProps?: NonNullable<React.ComponentProps<typeof MuiCheckBox>['slotProps']>['input'],\n slotProps?: {\n fieldset?: Partial<FormControlProps>,\n group?: Partial<Omit<FormGroupProps, \"row\">>,\n }\n}) {\n\n const onCheck:OnCheck = (option:CheckOptionType) => {\n if(!setCheckedIds)return;\n\n setCheckedIds(old=>{\n if(old.includes(option.id)){\n return old.filter(v=>v!==option.id)\n }else{\n return [...old,option.id]\n }\n })\n }\n\n const onCheckAll = () => {\n if(!setCheckedIds)return;\n\n if(checkedIds.length === options.length){\n setCheckedIds([])\n }else{\n setCheckedIds(options.map(o=>o.id))\n }\n }\n\n return (\n <MuiFormControl required={required} error={error}\n component=\"fieldset\" variant=\"standard\"\n\n {...slotProps?.fieldset}\n sx={mergeSx({ maxWidth:\"100%\" }, slotProps?.fieldset?.sx)}>\n <MuiFormGroup {...slotProps?.group} row={false}>\n <Parent onCheckAll={onCheckAll} \n\n isMoreThanOne={options.length>1}\n ceckedSize={checkedIds.length}\n allOptionsSize={options.length}\n\n error={!!error}\n required={required}\n title={title} titleSuffix={titleSuffix}\n />\n <OptionsCheckbox \n direction={direction}\n options={options}\n selectedValues={checkedIds}\n onCheck={onCheck}\n inputProps={inputProps}\n error={!!error}\n />\n\n {(helperText || errorText) && <MuiFormHelperText error={!!error}>{errorText ? errorText : helperText}</MuiFormHelperText>}\n </MuiFormGroup>\n </MuiFormControl>\n )\n}\n\n// CHANGE 3: Refactored sub-component to use state array\nfunction OptionsCheckbox(p:{\n direction: 'row' | 'column',\n options: CheckOptionType[],\n selectedValues: CheckedStateValue, // Receive state array\n onCheck?:OnCheck,\n inputProps?: NonNullable<React.ComponentProps<typeof MuiCheckBox>['slotProps']>['input'],\n error?: boolean,\n\n}){\n const {direction, options, onCheck, inputProps, error, selectedValues} = p;\n \n return (\n <MuiStack direction={direction} spacing={1} maxWidth=\"100%\" ml={1}>\n {options.map((option,index) => {\n // Determine checked state by checking if value exists in array\n const isChecked = selectedValues.includes(option.id);\n \n return (\n <MuiFormControlLabel\n sx={{\n gap:0.5,marginLeft:0,\n maxWidth:\"100%\",\n }}\n key={index}\n color={error ? 'error' : 'primary'}\n control={\n <MuiCheckBox \n sx={{p:0}}\n value={option.id} \n checked={isChecked} \n onChange={onCheck ?\n () => onCheck(option)\n : undefined\n }\n slotProps={{\n input: inputProps\n }}\n\n color={error ? 'error' : 'primary'}\n />\n }\n label={option.label}\n />\n )\n })}\n </MuiStack>\n )\n}\n\nfunction Parent(p:{\n onCheckAll?: () => void,\n isMoreThanOne: boolean,\n error:boolean,\n required?: boolean,\n title: React.ReactNode,\n titleSuffix?: React.ReactNode,\n ceckedSize: number,\n allOptionsSize: number,\n}){\n const {\n onCheckAll, isMoreThanOne, \n error, required, title, titleSuffix,\n ceckedSize, allOptionsSize\n } = p;\n \n return (\n isMoreThanOne?<MuiFormControlLabel\n sx={{\n gap:0.5,marginLeft:0,\n }}\n control={\n <MuiCheckBox \n sx={{p:0}}\n indeterminate={ceckedSize>0 && ceckedSize<allOptionsSize}\n checked={ceckedSize === allOptionsSize}\n onChange={()=>{\n if(onCheckAll)onCheckAll()\n }}\n color={error ? 'error' : 'primary'}\n />\n }\n label={\n <ParentLabel\n required={required}\n title={title}\n titleSuffix={titleSuffix} \n />\n }\n />\n :<ParentLabel\n required={required}\n title={title}\n titleSuffix={titleSuffix} \n />\n )\n}\n\nfunction ParentLabel(p:{\n required?: boolean,\n title: React.ReactNode,\n titleSuffix?: React.ReactNode,\n}){\n const { required, title, titleSuffix } = p;\n \n return (\n <Box \n sx={{display:\"flex\",alignItems:\"center\",gap:1, maxWidth:\"100%\"}}\n >\n <MuiFormLabel sx={{display: 'flex', alignItems: 'center', gap: 1, width: '100%', '& .MuiFormLabel-asterisk': { display: 'none' }}}>\n <Box sx={{display: 'inline-flex', alignItems: 'center', gap: 0.5}}>\n <Box sx={{flexGrow:0}}>{title}</Box>\n {required && <Box component=\"span\" sx={{ color: 'inherit', fontWeight: 'bold' }}>*</Box>}\n </Box>\n {titleSuffix && <Box sx={{flexShrink:0, display: 'inline-flex'}}>{titleSuffix}</Box>}\n </MuiFormLabel>\n </Box>\n )\n}","export {default as CheckboxGroup} from './CheckboxGroup'\nexport * from './CheckboxGroup'","export * from './Checkbox'\nexport * from './CheckboxGroup'","export * from './src'","import React from 'react'\nimport { ListItemButton, ListItemIcon } from '@/ele/List'\nimport { Checkbox } from '@/ele/Checkbox'\n\ntype value = string | number | undefined\n/**\n * This is a component of Mui TransferList\n */\nfunction CheckList({\n\tchildren,\n\tonClick,\n\tchecked,\n\tlabelId,\n\tvalue,\n\ttabIndex = -1,\n\tdisabled = false,\n\tdisableOpacity = 0.38,\n}: {\n\tchildren?: React.ReactNode;\n\tonClick?: React.Dispatch<React.SetStateAction<value>>;\n\tchecked?: boolean;\n\tlabelId?: string;\n\tvalue?: value;\n\ttabIndex?: number;\n\tdisabled?: boolean;\n\tdisableOpacity?: number;\n}) {\n\treturn (\n\t\t<ListItemButton\n\t\t\tkey={value}\n\t\t\trole=\"listitem\"\n\t\t\tonClick={onClick ? () => onClick(value) : undefined}\n\t\t\tdisabled={disabled}\n\t\t\tstyle={{\n\t\t\t\t'--op': disableOpacity,\n\t\t\t} as React.CSSProperties}\n\t\t\tsx={{\n\t\t\t\t\"&.MuiButtonBase-root.Mui-disabled\": {\n\t\t\t\t\topacity: \"var(--op)\",\n\t\t\t\t}\n\t\t\t}}\n\t\t>\n\t\t\t{!disabled && (\n\t\t\t\t<ListItemIcon>\n\t\t\t\t\t<Checkbox\n\t\t\t\t\t\tchecked={checked}\n\t\t\t\t\t\ttabIndex={tabIndex}\n\t\t\t\t\t\tdisableRipple\n\t\t\t\t\t\tsx={{ padding: \"0px\" }}\n\t\t\t\t\t\tslotProps={{\n\t\t\t\t\t\t\tinput: {\n\t\t\t\t\t\t\t\t'aria-labelledby': labelId,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</ListItemIcon>\n\t\t\t)}\n\t\t\t{children}\n\t\t</ListItemButton>\n\t)\n}\n\nexport default CheckList","'use client'\nimport React, { useState } from 'react'\nimport { Grid } from '@/ele/Box'\nimport { List } from '@/ele/List'\nimport { Card, CardHeader } from '@/ele/Card'\nimport { Divider } from '@/ele/Divider'\nimport { Checkbox as MuiCheckBox } from '@/ele/Checkbox'\nimport { Button as LabelButtonOutline } from '@/ele/Button'\nimport { DoubleArrowIcon } from '@/icons/MuiIcon'\n\nimport CheckList from './CheckList'\n\nconst indexKey = 'id'\ntype Item<T = unknown> = {\n value: T;\n id: string;\n}\n/**\n * Mui Transfer List\n * \n * [Doc](https://mui.com/material-ui/react-transfer-list/)\n * \n * @param addLeft - function to add item to left list from right list by passing the selected ids\n * @param minusLeft - function to add item to right list from left list by passing the selected ids\n */\nexport default function TransferList<T>(props: {\n\tleftProps: {\n\t\tleft: Item<T>[];\n\t\taddLeft: (rightSelectedIds:string[])=> void;\n\t\tminusLeft: (leftSelectedIds:string[])=>void;\n\t};\n\trightProps: { right: Item<T>[]; };\n\tRenderLeft: React.ComponentType<{value:Item<T>}>;\n\tRenderRight: React.ComponentType<{value:Item<T>}>;\n\tleftTitle: string;\n\trightTitle: string;\n\tdisabled?: boolean;\n}){\n const {\n leftProps, rightProps,\n RenderLeft, RenderRight,\n leftTitle=\"Left\", rightTitle=\"Right\",\n disabled=false,\n } = props \n\n\tconst [checked, setChecked] = useState<Item['id'][]>([])\n\tconst { left, addLeft, minusLeft } = leftProps\n\tconst { right } = rightProps\n\n\tconst leftChecked = intersection(checked, left,)\n\tconst rightChecked = intersection(checked, right,)\n\n\tconst handleToggle:React.ComponentProps<typeof CustomList>[\"handleToggle\"] = (value) => () => {\n\t\tconst id = value[indexKey] // operate with id\n\t\tconst currentIndex = checked.indexOf(id)\n\t\tconst newChecked = [...checked]\n\n\t\tif (currentIndex === -1) {\n\t\t\tnewChecked.push(id)\n\t\t} else {\n\t\t\tnewChecked.splice(currentIndex, 1)\n\t\t}\n\n\t\tsetChecked(newChecked)\n\t}\n\n\tconst numberOfChecked:React.ComponentProps<typeof CustomList>[\"numberOfChecked\"] = (items) => intersection(checked, items,).length\n\n\tconst handleToggleAll:React.ComponentProps<typeof CustomList>[\"handleToggleAll\"] = (items) => () => {\n\t\tif (numberOfChecked(items) === items.length) {\n\t\t\tsetChecked(not(checked, items,))\n\t\t} else {\n\t\t\tsetChecked(union(checked, items,))\n\t\t}\n\t}\n\n\tconst handleCheckedRight = () => {\n\t\tminusLeft(leftChecked) \n\t\tsetChecked(not(checked, leftChecked.map(id=>left.find(item => item.id === id)!),))\n\t}\n\n\tconst handleCheckedLeft = () => {\n\t\taddLeft(rightChecked)\n\t\tsetChecked(not(checked, rightChecked.map(id=>right.find(item => item.id === id)!),))\n\t}\n\n\n\treturn (\n\t\t<Grid container spacing={2} justifyContent=\"center\" alignItems=\"center\">\n\t\t\t<Grid> \n\t\t\t\t<CustomList title={leftTitle} items={left} Renderer={RenderLeft}\n\t\t\t\thandleToggleAll={handleToggleAll}\n\t\t\t\thandleToggle={handleToggle}\n\t\t\t\tnumberOfChecked={numberOfChecked}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tchecked={checked}/>\n\t\t\t</Grid>\n\t\t\t<TransferButton disabled={disabled}\n\t\t\tleftChecked={leftChecked} rightChecked={rightChecked}\n\t\t\thandleCheckedLeft={handleCheckedLeft} handleCheckedRight={handleCheckedRight}\n\t\t\t/>\n\t\t\t<Grid>\n\t\t\t\t<CustomList title={rightTitle} items={right} Renderer={RenderRight}\n\t\t\t\thandleToggleAll={handleToggleAll}\n\t\t\t\thandleToggle={handleToggle}\n\t\t\t\tnumberOfChecked={numberOfChecked}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tchecked={checked}/>\n\t\t\t</Grid>\n\t\t</Grid>\n\t)\n}\n\nfunction not(a:Item['id'][], b:Item[],) {\n const aIds = [...a] // original\n const bIds = b.map((value:Item) => value.id)\n return aIds.filter((value) => bIds.indexOf(value) === -1)\n}\n\nfunction intersection(a:Item['id'][], b:Item[],) {\n const aIds = [...a] // original\n const bIds = b.map((value:Item) => value.id)\n return aIds.filter((value) => bIds.indexOf(value) !== -1)\n}\n\nfunction union(a:Item['id'][], b:Item[],) {\n const aIds = [...a] // original\n const bIds = b.map((value:Item) => value.id)\n return [... new Set([...aIds, ...bIds])]\n}\n\n\nfunction TransferButton({\n\t\thandleCheckedLeft,\n\t\thandleCheckedRight,\n\t\tleftChecked,\n\t\trightChecked,\n\t\tdisabled,\n}: {\n\t\thandleCheckedLeft: React.ComponentProps<typeof LabelButtonOutline>[\"onClick\"];\n\t\thandleCheckedRight: React.ComponentProps<typeof LabelButtonOutline>[\"onClick\"];\n\t\tleftChecked: Item['id'][];\n\t\trightChecked: Item['id'][];\n\t\tdisabled: boolean;\n}) {\n\tif (disabled) return null\n\treturn (\n\t\t<Grid>\n\t\t\t<Grid container direction=\"column\" alignItems=\"center\" sx={{gap:1}}>\n\t\t\t\t<LabelButtonOutline size=\"small\" onClick={handleCheckedRight} disabled={leftChecked.length === 0} endIcon={<DoubleArrowIcon/>} />\n\t\t\t\t<LabelButtonOutline size=\"small\" onClick={handleCheckedLeft} disabled={rightChecked.length === 0} startIcon={<DoubleArrowIcon sx={{transform: \"rotate(180deg)\"}}/>} />\n\t\t\t</Grid>\n\t\t</Grid>\n\t)\n}\n\nfunction CustomList<T = unknown>(props: {\n\ttitle: string;\n\titems: Item<T>[];\n\tRenderer: React.ComponentType<{value:Item<T>}>;\n\thandleToggleAll: (items:Item<T>[])=>()=>void;\n\thandleToggle: (value:Item<T>)=>()=>void;\n\tnumberOfChecked: (items:Item<T>[])=>number;\n\tdisabled: boolean;\n\tchecked: Item['id'][];\n}) {\n\tconst {\n\t\ttitle, items, Renderer, \n\t\thandleToggleAll, handleToggle, \n\t\tnumberOfChecked, disabled, checked,\n\t} = props;\n\n\tconst cardHeaderAvatar = disabled ? null : (\n\t\t\t<MuiCheckBox\n\t\t\tonClick={handleToggleAll(items)}\n\t\t\tchecked={numberOfChecked(items) === items.length && items.length !== 0}\n\t\t\tindeterminate={\n\t\t\t\tnumberOfChecked(items) !== items.length && numberOfChecked(items) !== 0\n\t\t\t}\n\t\t\tdisabled={items.length === 0}\n slotProps={{\n input: {\n 'aria-label': 'all items selected',\n }\n }}\n\t\t\t/>\n\t\t)\n\n\tconst subheader = disabled?\"\":`${numberOfChecked(items)}/${items.length} selected`\n\treturn (\n\t\t<Card sx={{\n\t\t\t\"&.MuiCard-root\":{backgroundColor:\"transparent\"}\n\t\t}}>\n\t\t\t<CardHeader\n\t\t\t\tsx={{ \n\t\t\t\t\tpx: 2, py: 1,\n\t\t\t\t}}\n\t\t\t\tavatar={cardHeaderAvatar}\n\t\t\t\ttitle={title}\n\t\t\t\tsubheader={subheader}\n\t\t\t/>\n\t\t\t<Divider />\n\t\t\t<List\n\t\t\tsx={{\n\t\t\t\twidth: 200,\n\t\t\t\theight: 230,\n\t\t\t\tbackgroundColor: 'transparent',\n\t\t\t\toverflow: 'auto',\n\t\t\t}}\n\t\t\tdense\n\t\t\tcomponent=\"div\"\n\t\t\trole=\"list\"\n\t\t\t>\n\t\t\t\t{items.map((value) => {\n\t\t\t\tconst labelId = `transfer-list-all-item-${value}-label`\n\t\t\t\treturn (\n\t\t\t\t\t<CheckList \n\t\t\t\t\tkey={value[indexKey]}\n\t\t\t\t\tdisabled={disabled} disableOpacity={1}\n\t\t\t\t\tchecked={checked.indexOf(value[indexKey]) !== -1}\n\t\t\t\t\tlabelId={labelId} value={value[indexKey]}\n\t\t\t\t\tonClick={handleToggle(value)}>\n\t\t\t\t\t\t<Renderer value={value} />\n\t\t\t\t\t</CheckList>\n\t\t\t\t)\n\t\t\t\t})}\n\t\t\t</List>\n\t\t</Card>\n)}","import type { MuiComponentTheme } from '@/_utils/_types'\n\nexport const listItemIconTheme = {\n styleOverrides: {\n root: ()=>({\n '--list-item-icon-color': 'var(--mui-palette-text-primary)',\n color: 'var(--list-item-icon-color)',\n }),\n }\n\n} as const satisfies MuiComponentTheme<\"MuiListItemIcon\">\n\nexport const listItemTextTheme = {\n styleOverrides: {\n root: ()=>({\n }),\n }\n\n} as const satisfies MuiComponentTheme<\"MuiListItemText\">\n\nexport const listItemButtonTheme = {\n styleOverrides: {\n root: {\n '--list-item-button-bg-hover': 'var(--mui-palette-background-hover-1)',\n '--list-item-button-bg-ripple': 'color-mix(in lab, var(--list-item-button-bg-hover) 50%, var(--mui-palette-focus-1))',\n\n \"&.MuiButtonBase-root.MuiListItemButton-root\":{\n transition:\"none\",\n // background:\"var(--mui-palette-background-hover-1)\",\n \n \"&:hover\":{\n background:\"var(--list-item-button-bg-hover)\",\n },\n \"& .MuiTouchRipple-root\":{\n color:\"var(--list-item-button-bg-ripple)\",\n },\n },\n },\n }\n\n} as const satisfies MuiComponentTheme<\"MuiListItemButton\">\n\nexport const listItemTheme = {\n styleOverrides: {\n root: {\n },\n }\n\n} as const satisfies MuiComponentTheme<\"MuiListItem\">\n\nexport const listItemSubheaderTheme = {\n styleOverrides: {\n root: {},\n }\n\n} as const satisfies MuiComponentTheme<\"MuiListSubheader\">","export {default as List} from '@mui/material/List'\nexport {default as ListSubheader} from '@mui/material/ListSubheader'\nexport {default as ListItemIcon} from '@mui/material/ListItemIcon'\nexport {default as ListItemText} from '@mui/material/ListItemText'\nexport {default as ListItemButton} from '@mui/material/ListItemButton'\nexport {default as ListItem} from '@mui/material/ListItem'\n\nexport {default as TransferList} from './TransferList'\nexport * from './theme'","export * from './List'","export * from './src'","'use client'\n\nimport React, { useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'\nimport { InputAdornment } from '@/ele/Form'\nimport InputBase from '@mui/material/InputBase'\nimport { Popper, ClickAwayListener } from '@/ele/Overlay'\nimport type { PopperPlacementType } from '@mui/material/Popper'\nimport type { PaperProps } from '@mui/material/Paper'\nimport type { SxProps, Theme } from '@mui/material/styles'\n\nimport { Box } from '@/ele/Box'\nimport { List, ListItemButton } from '@/ele/List'\nimport { Paper } from '@/ele/Paper'\nimport { Typography } from '@/ele/Typography'\nimport { ClearIcon, SearchIcon } from '@/icons/MuiIcon'\nimport { IconButton } from '@/ele/Button'\nimport { mergeSx } from '@/_utils/_func'\n\nexport type DetailMenuOption = {\n id: string\n label: string\n /** Side-panel description when this option is hovered / focused. */\n detail?: string\n icon?: React.ReactNode\n /** Accent for detail title + selected checkmark. */\n accentColor?: string\n /** Extra text included in search matching (label is always searched). */\n keywords?: string\n /** Short pill rendered after the label (e.g. \"Fast\", \"High\"). Included in search. */\n badge?: string\n /**\n * Free-form content rendered at the bottom of this option's detail panel —\n * a slot for host-owned controls (e.g. a per-model config selector).\n * DetailMenu never interprets it.\n */\n detailSlot?: React.ReactNode\n /** Section label — an uppercase header renders above the first option of each distinct group. */\n group?: string\n /** Hide behind the \"N more\" footer row until expanded (click). Ignored while searching. */\n collapsed?: boolean\n /**\n * Trailing per-option action (e.g. a settings gear), revealed on row\n * hover/focus. Clicks inside it never trigger option selection.\n */\n actionSlot?: React.ReactNode\n}\n\ntype DetailMenuPaperSlotProps = {\n sx?: SxProps<Theme>\n} & Omit<PaperProps, 'sx' | 'children' | 'elevation'>\n\nexport type DetailMenuProps = {\n anchorEl: HTMLElement | null\n options: readonly DetailMenuOption[]\n selectedId?: string | null\n onClose: () => void\n onSelect: (id: string) => void\n placement?: PopperPlacementType\n /** Show a filter field above the list. Default false. */\n searchable?: boolean\n searchPlaceholder?: string\n /** Hover/focus preview panel beside the list. Default true. */\n showDetailPanel?: boolean\n emptySearchText?: string\n /** Label for the collapsed-options footer row (only relevant when options use `collapsed`). */\n collapsedRowLabel?: (hiddenCount: number) => string\n /**\n * Free-form footer under the option list (e.g. \"Add Models\").\n * Rendered inside the list Paper, below the scrollable list.\n */\n footerSlot?: React.ReactNode\n maxListHeight?: number | string\n listMinWidth?: number | string\n listMaxWidth?: number | string\n detailWidth?: number | string\n /**\n * Props forwarded to the list Paper (`paper`) and hover detail Paper\n * (`detailPaper`). `sx` merges after DetailMenu defaults.\n */\n slotProps?: {\n paper?: DetailMenuPaperSlotProps\n detailPaper?: DetailMenuPaperSlotProps\n }\n}\n\n/**\n * Anchored select menu with optional search and a hover detail panel —\n * the graph/mode-menu pattern used in the composer dock.\n */\nexport function DetailMenu({\n anchorEl,\n options,\n selectedId = null,\n onClose,\n onSelect,\n placement = 'top-start',\n searchable = false,\n searchPlaceholder = 'Search…',\n showDetailPanel = true,\n emptySearchText = 'No matches',\n collapsedRowLabel = (count) => `${count} more`,\n footerSlot,\n maxListHeight = 280,\n listMinWidth = 196,\n listMaxWidth = 260,\n detailWidth = 180,\n slotProps,\n}: DetailMenuProps) {\n const open = Boolean(anchorEl)\n const [hoveredId, setHoveredId] = useState<string | null>(null)\n const [query, setQuery] = useState('')\n const [expanded, setExpanded] = useState(false)\n const [detailSide, setDetailSide] = useState<'left' | 'right'>('right')\n const [detailTop, setDetailTop] = useState(0)\n const searchRef = useRef<HTMLInputElement>(null)\n const rootRef = useRef<HTMLDivElement>(null)\n const listRef = useRef<HTMLUListElement | null>(null)\n const detailPaperRef = useRef<HTMLDivElement | null>(null)\n\n const eventOriginatedInside = (event: MouseEvent | TouchEvent) => {\n const root = rootRef.current\n if (!root) {\n return false\n }\n // composedPath keeps nodes that React may have unmounted during this\n // same click (e.g. the \"N more\" expand row). event.target alone is\n // unreliable after that update and would false-positive click-away.\n const path =\n typeof event.composedPath === 'function'\n ? event.composedPath()\n : [event.target]\n return path.some(\n (node) => node instanceof Node && (node === root || root.contains(node)),\n )\n }\n\n const { sx: paperSlotSx, ...paperSlotProps } = slotProps?.paper ?? {}\n const { sx: detailPaperSlotSx, ...detailPaperSlotProps } =\n slotProps?.detailPaper ?? {}\n\n const filteredOptions = useMemo(() => {\n const normalized = query.trim().toLowerCase()\n if (!normalized) {\n return options\n }\n\n return options.filter((option) => {\n const haystack = [option.label, option.detail, option.badge, option.keywords]\n .filter(Boolean)\n .join(' ')\n .toLowerCase()\n return haystack.includes(normalized)\n })\n }, [options, query])\n\n // Searching bypasses collapse so hidden options still match.\n const showCollapsed = expanded || query.trim().length > 0\n const visibleOptions = showCollapsed\n ? filteredOptions\n : filteredOptions.filter((option) => !option.collapsed)\n const hiddenCount = filteredOptions.length - visibleOptions.length\n\n const updateDetailPosition = React.useCallback(() => {\n const root = rootRef.current\n if (!root || !showDetailPanel) {\n return\n }\n\n const nextSide = resolveDetailSide(root, toCssPixels(detailWidth, 180))\n setDetailSide((current) => (current === nextSide ? current : nextSide))\n\n if (!hoveredId) {\n return\n }\n\n const row = root.querySelector(\n `[data-detail-menu-option=\"${CSS.escape(hoveredId)}\"]`,\n )\n if (!(row instanceof HTMLElement)) {\n return\n }\n\n const rootRect = root.getBoundingClientRect()\n const rowRect = row.getBoundingClientRect()\n let top = rowRect.top - rootRect.top\n\n // Keep the detail panel inside the viewport when the row is near the bottom.\n const detailHeight = detailPaperRef.current?.offsetHeight ?? 0\n if (detailHeight > 0) {\n const overflow =\n rowRect.top + detailHeight - (window.innerHeight - VIEWPORT_PAD_PX)\n if (overflow > 0) {\n top -= overflow\n }\n }\n\n setDetailTop((current) =>\n Math.abs(current - top) < 0.5 ? current : top,\n )\n }, [detailWidth, hoveredId, showDetailPanel])\n\n const updateDetailPositionRef = useRef(updateDetailPosition)\n updateDetailPositionRef.current = updateDetailPosition\n\n useLayoutEffect(() => {\n if (!open || !showDetailPanel) {\n return\n }\n updateDetailPosition()\n // Second pass after the detail panel has painted so viewport clamping\n // can use the real height.\n const id = window.requestAnimationFrame(() => updateDetailPosition())\n return () => window.cancelAnimationFrame(id)\n }, [open, showDetailPanel, hoveredId, updateDetailPosition])\n\n useEffect(() => {\n if (!open || !showDetailPanel) {\n return\n }\n\n const onResize = () => updateDetailPosition()\n window.addEventListener('resize', onResize)\n const list = listRef.current\n list?.addEventListener('scroll', onResize, { passive: true })\n return () => {\n window.removeEventListener('resize', onResize)\n list?.removeEventListener('scroll', onResize)\n }\n }, [open, showDetailPanel, updateDetailPosition])\n\n // Replaced by updateDetailPosition — keep a thin alias for the popper modifier.\n const updateDetailSideRef = updateDetailPositionRef\n\n useEffect(() => {\n if (!open) {\n setHoveredId(null)\n setQuery('')\n setExpanded(false)\n setDetailSide('right')\n setDetailTop(0)\n return\n }\n\n setHoveredId(selectedId || options[0]?.id || null)\n\n if (searchable) {\n // Defer so Popper mounts before focusing.\n const id = window.requestAnimationFrame(() => {\n searchRef.current?.focus()\n })\n return () => window.cancelAnimationFrame(id)\n }\n }, [open, options, selectedId, searchable])\n\n useEffect(() => {\n if (!open) {\n return\n }\n\n if (visibleOptions.length === 0) {\n setHoveredId(null)\n return\n }\n\n setHoveredId((current) => {\n if (current && visibleOptions.some((option) => option.id === current)) {\n return current\n }\n if (selectedId && visibleOptions.some((option) => option.id === selectedId)) {\n return selectedId\n }\n return visibleOptions[0]?.id ?? null\n })\n }, [visibleOptions, open, selectedId])\n\n const hoveredOption =\n visibleOptions.find((option) => option.id === hoveredId) ??\n visibleOptions.find((option) => option.id === selectedId) ??\n visibleOptions[0]\n\n const paperSx = {\n border: '1px solid',\n borderColor: 'divider',\n borderRadius: 2.5,\n overflow: 'hidden',\n bgcolor: 'color-mix(in srgb, var(--mui-palette-background-paper), transparent 4%)',\n boxShadow: '0 12px 32px color-mix(in srgb, var(--mui-palette-common-black), transparent 78%)',\n } as const\n\n const detailPositionSx =\n detailSide === 'left'\n ? { right: 'calc(100% + 8px)', left: 'auto' }\n : { left: 'calc(100% + 8px)', right: 'auto' }\n\n const flipFallbacks =\n placement.startsWith('right')\n ? (['left-start', 'right-end', 'left-end'] as const)\n : placement.startsWith('left')\n ? (['right-start', 'left-end', 'right-end'] as const)\n : (['bottom-start', 'top-start'] as const)\n\n return (\n <Popper\n open={open}\n anchorEl={anchorEl}\n placement={placement}\n modifiers={[\n { name: 'offset', options: { offset: [0, 10] } },\n { name: 'preventOverflow', options: { padding: 8 } },\n // Keep start-aligned so the list stays under the chip; end placements\n // misalign when a wide absolute detail panel exists beside the list.\n // Side placements (ModelPicker flyout) flip left/right instead of up.\n { name: 'flip', options: { fallbackPlacements: [...flipFallbacks] } },\n {\n name: 'detailSide',\n enabled: true,\n phase: 'write',\n fn() {\n updateDetailSideRef.current()\n },\n },\n ]}\n sx={{ zIndex: (theme) => theme.zIndex.modal + 2 }}\n >\n <ClickAwayListener\n onClickAway={(event) => {\n if (eventOriginatedInside(event)) {\n return\n }\n onClose()\n }}\n >\n {/*\n Popper measures this root. Keep it sized to the list only —\n the detail panel is absolutely positioned so it does not widen\n the measured box or pull the list left under flip/end alignment.\n */}\n <Box\n ref={rootRef}\n onKeyDown={(event) => {\n if (event.key === 'Tab' && hiddenCount > 0) {\n // Keep focus inside and reveal the collapsed options.\n event.preventDefault()\n setExpanded(true)\n }\n }}\n sx={{\n position: 'relative',\n display: 'inline-block',\n verticalAlign: 'top',\n }}\n >\n <Paper\n elevation={0}\n {...paperSlotProps}\n sx={mergeSx(\n { ...paperSx, minWidth: listMinWidth, maxWidth: listMaxWidth },\n paperSlotSx,\n )}\n >\n {searchable ? (\n <Box\n sx={{\n px: 1,\n pt: 1,\n pb: 0.5,\n borderBottom: '1px solid',\n borderColor: 'divider',\n }}\n >\n <InputBase\n inputRef={searchRef}\n value={query}\n onChange={(event) => setQuery(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === 'Escape') {\n event.stopPropagation()\n if (query) {\n setQuery('')\n return\n }\n onClose()\n }\n }}\n placeholder={searchPlaceholder}\n fullWidth\n startAdornment={\n <InputAdornment position=\"start\" sx={{ mr: 0.5 }}>\n <SearchIcon sx={{ fontSize: 16, color: 'text.secondary' }} />\n </InputAdornment>\n }\n endAdornment={\n query ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n aria-label=\"Clear search\"\n onClick={() => {\n setQuery('')\n searchRef.current?.focus()\n }}\n sx={{ p: 0.25 }}\n >\n <ClearIcon sx={{ fontSize: 14 }} />\n </IconButton>\n </InputAdornment>\n ) : null\n }\n sx={{\n px: 0.75,\n py: 0.35,\n fontSize: '0.82rem',\n borderRadius: 1.5,\n bgcolor: 'action.hover',\n '& .MuiInputBase-input': {\n py: 0.4,\n },\n }}\n />\n </Box>\n ) : null}\n\n <List\n ref={listRef}\n dense\n disablePadding\n sx={{\n py: 0.5,\n maxHeight: maxListHeight,\n overflowY: 'auto',\n }}\n >\n {visibleOptions.length === 0 && hiddenCount === 0 ? (\n <Box sx={{ px: 1.5, py: 1.25 }}>\n <Typography\n variant=\"body2\"\n sx={{ fontSize: '0.78rem', color: 'text.secondary', m: 0 }}\n >\n {emptySearchText}\n </Typography>\n </Box>\n ) : (\n <>\n {visibleOptions.map((option, index) => {\n const selected = option.id === selectedId\n const hovered = option.id === hoveredId\n const accent = option.accentColor\n const showGroupHeader =\n option.group != null &&\n (index === 0 || visibleOptions[index - 1]?.group !== option.group)\n\n return (\n <React.Fragment key={option.id}>\n {showGroupHeader ? (\n <Typography\n component=\"div\"\n sx={{\n px: 1.5,\n pt: 1,\n pb: 0.25,\n fontSize: '0.66rem',\n fontWeight: 700,\n letterSpacing: '0.06em',\n textTransform: 'uppercase',\n color: 'text.secondary',\n m: 0,\n }}\n >\n {option.group}\n </Typography>\n ) : null}\n <ListItemButton\n selected={selected}\n data-detail-menu-option={option.id}\n onMouseEnter={() => setHoveredId(option.id)}\n onFocus={() => setHoveredId(option.id)}\n onClick={() => onSelect(option.id)}\n sx={{\n mx: 0.5,\n my: 0.15,\n px: 1,\n py: 0.85,\n gap: 1,\n borderRadius: 1.75,\n alignItems: 'center',\n '& .detail-menu-action': { opacity: 0 },\n '&:hover .detail-menu-action, &:focus-within .detail-menu-action':\n { opacity: 1 },\n '&.Mui-selected': {\n bgcolor:\n 'color-mix(in srgb, var(--mui-palette-action-selected), transparent 55%)',\n },\n '&.Mui-selected:hover': {\n bgcolor:\n 'color-mix(in srgb, var(--mui-palette-action-selected), transparent 35%)',\n },\n ...(hovered && !selected\n ? {\n bgcolor:\n 'color-mix(in srgb, var(--mui-palette-action-hover), transparent 40%)',\n }\n : null),\n }}\n >\n {option.icon ? (\n <Box\n sx={{\n width: 22,\n height: 22,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n }}\n >\n {option.icon}\n </Box>\n ) : null}\n <Typography\n sx={{\n flex: 1,\n minWidth: 0,\n fontSize: '0.82rem',\n fontWeight: selected ? 700 : 600,\n color: selected && accent ? accent : 'text.primary',\n lineHeight: 1.2,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n m: 0,\n }}\n >\n {option.label}\n </Typography>\n {option.badge ? (\n <Typography\n component=\"span\"\n sx={{\n flexShrink: 0,\n fontSize: '0.72rem',\n fontWeight: 500,\n color: 'text.secondary',\n m: 0,\n }}\n >\n {option.badge}\n </Typography>\n ) : null}\n {option.actionSlot ? (\n <Box\n component=\"span\"\n className=\"detail-menu-action\"\n onClick={(event) => event.stopPropagation()}\n sx={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n minWidth: 18,\n flexShrink: 0,\n color: 'text.secondary',\n transition: 'opacity 120ms',\n }}\n >\n {option.actionSlot}\n </Box>\n ) : null}\n </ListItemButton>\n </React.Fragment>\n )\n })}\n {hiddenCount > 0 ? (\n <ListItemButton\n onMouseDown={(event) => {\n // Keep the click inside this menu — expanding unmounts\n // this row, which would otherwise look like a click-away.\n event.preventDefault()\n event.stopPropagation()\n }}\n onClick={(event) => {\n event.preventDefault()\n event.stopPropagation()\n setExpanded(true)\n }}\n sx={{\n mx: 0.5,\n my: 0.15,\n px: 1,\n py: 0.85,\n borderRadius: 1.75,\n alignItems: 'center',\n }}\n >\n <Typography\n sx={{\n flex: 1,\n minWidth: 0,\n fontSize: '0.78rem',\n color: 'text.secondary',\n m: 0,\n }}\n >\n {collapsedRowLabel(hiddenCount)}\n </Typography>\n </ListItemButton>\n ) : null}\n </>\n )}\n </List>\n {footerSlot ? (\n <Box\n sx={{\n borderTop: '1px solid',\n borderColor: 'divider',\n px: 0.5,\n py: 0.35,\n }}\n >\n {footerSlot}\n </Box>\n ) : null}\n </Paper>\n\n {showDetailPanel && hoveredOption ? (\n <Box\n ref={detailPaperRef}\n sx={{\n display: { xs: 'none', sm: 'block' },\n position: 'absolute',\n top: detailTop,\n ...detailPositionSx,\n width: detailWidth,\n }}\n >\n <Paper\n elevation={0}\n {...detailPaperSlotProps}\n sx={mergeSx(\n {\n px: 1.25,\n py: 1.1,\n border: '1px solid',\n borderColor: 'divider',\n borderRadius: 2,\n bgcolor:\n 'color-mix(in srgb, var(--mui-palette-background-paper), transparent 4%)',\n boxShadow:\n '0 10px 28px color-mix(in srgb, var(--mui-palette-common-black), transparent 82%)',\n },\n detailPaperSlotSx,\n )}\n >\n <Typography\n sx={{\n fontSize: '0.78rem',\n fontWeight: 700,\n color: hoveredOption.accentColor || 'text.primary',\n lineHeight: 1.2,\n mt: 0,\n mx: 0,\n mb: 0.4,\n }}\n >\n {hoveredOption.label}\n </Typography>\n <Typography\n sx={{\n fontSize: '0.72rem',\n color: 'text.secondary',\n lineHeight: 1.35,\n m: 0,\n }}\n >\n {hoveredOption.detail?.trim() || '—'}\n </Typography>\n {hoveredOption.detailSlot ? (\n <Box\n sx={{\n mt: 1,\n pt: 1,\n borderTop: '1px solid',\n borderColor: 'divider',\n }}\n >\n {hoveredOption.detailSlot}\n </Box>\n ) : null}\n </Paper>\n </Box>\n ) : null}\n </Box>\n </ClickAwayListener>\n </Popper>\n )\n}\n\nconst DETAIL_GAP_PX = 8\nconst VIEWPORT_PAD_PX = 8\n\nfunction toCssPixels(value: number | string, fallback: number): number {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value\n }\n\n if (typeof value === 'string') {\n const match = value.trim().match(/^(\\d+(?:\\.\\d+)?)px$/i)\n if (match) {\n return Number.parseFloat(match[1])\n }\n }\n\n return fallback\n}\n\nfunction resolveDetailSide(listRoot: HTMLElement, detailWidthPx: number): 'left' | 'right' {\n const rect = listRoot.getBoundingClientRect()\n const need = detailWidthPx + DETAIL_GAP_PX\n const spaceRight = window.innerWidth - rect.right - VIEWPORT_PAD_PX\n const spaceLeft = rect.left - VIEWPORT_PAD_PX\n\n if (spaceRight >= need) {\n return 'right'\n }\n if (spaceLeft >= need) {\n return 'left'\n }\n\n return spaceLeft > spaceRight ? 'left' : 'right'\n}\n\nexport default DetailMenu\n","export { DetailMenu, default } from './DetailMenu'\nexport type { DetailMenuOption, DetailMenuProps } from './DetailMenu'\n","'use client'\n\nimport { useMemo, type ReactNode } from 'react'\n\nimport { Box } from '@/ele/Box'\nimport { MemoryIcon } from '@/icons/MuiIcon'\n\nimport { DetailMenu, type DetailMenuOption, type DetailMenuProps } from '../DetailMenu'\n\nexport type ModelBrand = 'openai' | 'anthropic' | 'google' | 'meta'\n\nexport type ModelMenuOption = {\n id: string\n label: string\n /** Side-panel description when this option is hovered / focused. */\n detail?: string\n /** Optional provider key. Pass `brandIconMap` or `option.icon` for a brand mark. */\n brand?: ModelBrand | (string & {})\n /** Extra search terms merged into the filter index. */\n keywords?: string\n /** Short config pill rendered after the label (e.g. \"Fast\"); searchable. */\n badge?: string\n /** Per-option icon override; wins over the brand icon. */\n icon?: ReactNode\n /**\n * Slot rendered at the bottom of this option's detail panel — host-owned\n * config controls (e.g. a reasoning-effort selector for models that allow\n * it). ModelMenu never interprets the content; per-model capability\n * (\"does this model allow effort?\") stays with the host, which simply\n * omits the slot for models without it.\n */\n detailSlot?: ReactNode\n /** Section label — an uppercase header renders above the first option of each distinct group (e.g. \"Favorites\"). */\n group?: string\n /** Hide behind the \"N more models\" footer row until expanded (click). Ignored while searching. */\n collapsed?: boolean\n /**\n * Trailing per-option action (e.g. a settings gear), revealed on row\n * hover/focus. Clicks inside it never select the model.\n */\n actionSlot?: ReactNode\n}\n\nexport type ModelMenuProps = {\n anchorEl: HTMLElement | null\n options: readonly ModelMenuOption[]\n selectedId?: string | null\n onClose: () => void\n onSelect: (optionId: string) => void\n /** Default: on when there are 6+ options. */\n searchable?: boolean\n searchPlaceholder?: string\n /** Popper placement. Default: top-start. */\n placement?: DetailMenuProps['placement']\n /** Hover detail panel beside the list. Default true. */\n showDetailPanel?: boolean\n /** Host-owned brand marks keyed by `option.brand`. The library does not ship provider logos. */\n brandIconMap?: Record<string, ReactNode>\n slotProps?: DetailMenuProps['slotProps']\n maxListHeight?: number | string\n /** Footer under the list (e.g. \"Add Models\"). */\n footerSlot?: ReactNode\n}\n\nconst BRAND_LABELS: Record<string, string> = {\n anthropic: 'Anthropic',\n google: 'Google',\n meta: 'Meta',\n openai: 'OpenAI',\n}\n\nconst defaultBrandIcon = (): ReactNode => (\n <MemoryIcon sx={{ fontSize: 14 }} aria-hidden />\n)\n\n/**\n * Anchored model picker — DetailMenu specialized with host-owned brand\n * icons and search that turns on automatically for longer lists.\n * The model catalog and provider logos stay owned by the consuming app.\n */\nexport function ModelMenu({\n anchorEl,\n options,\n selectedId = null,\n onClose,\n onSelect,\n searchable,\n searchPlaceholder = 'Search models…',\n placement,\n showDetailPanel,\n brandIconMap,\n slotProps,\n maxListHeight,\n footerSlot,\n}: ModelMenuProps) {\n const detailOptions = useMemo<DetailMenuOption[]>(\n () =>\n options.map((option) => ({\n id: option.id,\n label: option.label,\n detail: option.detail,\n badge: option.badge,\n detailSlot: option.detailSlot,\n group: option.group,\n collapsed: option.collapsed,\n actionSlot: option.actionSlot,\n keywords: [option.brand, option.detail, option.keywords]\n .filter(Boolean)\n .join(' '),\n icon: (\n <Box\n component=\"span\"\n title={BRAND_LABELS[option.brand ?? '']}\n sx={{\n display: 'inline-flex',\n width: 20,\n height: 20,\n alignItems: 'center',\n justifyContent: 'center',\n border: '1px solid',\n borderColor: 'divider',\n borderRadius: 1.25,\n color: 'text.secondary',\n '& svg': { display: 'block' },\n }}\n >\n {option.icon ??\n brandIconMap?.[option.brand ?? ''] ??\n defaultBrandIcon()}\n </Box>\n ),\n })),\n [options, brandIconMap],\n )\n\n return (\n <DetailMenu\n anchorEl={anchorEl}\n options={detailOptions}\n selectedId={selectedId}\n searchable={searchable ?? options.length >= 6}\n searchPlaceholder={searchPlaceholder}\n placement={placement}\n showDetailPanel={showDetailPanel}\n collapsedRowLabel={(count) =>\n `${count} more model${count === 1 ? '' : 's'}`\n }\n onClose={onClose}\n onSelect={onSelect}\n slotProps={slotProps}\n maxListHeight={maxListHeight}\n footerSlot={footerSlot}\n />\n )\n}\n\nexport default ModelMenu\n","export { ModelMenu, default } from './ModelMenu'\nexport type { ModelBrand, ModelMenuOption, ModelMenuProps } from './ModelMenu'\n","'use client'\n\nimport { useEffect, useMemo, useRef, useState, type ReactNode } from 'react'\nimport { Popper, ClickAwayListener } from '@/ele/Overlay'\nimport type { SxProps, Theme } from '@mui/material/styles'\n\nimport { Box } from '@/ele/Box'\nimport { List, ListItemButton } from '@/ele/List'\nimport { Paper } from '@/ele/Paper'\nimport { Typography } from '@/ele/Typography'\nimport { KeyboardArrowRightIcon } from '@/icons/MuiIcon'\n\nimport {\n ModelMenu,\n type ModelMenuOption,\n type ModelMenuProps,\n} from '../ModelMenu'\n\nexport type ModelPickerProps = {\n anchorEl: HTMLElement | null\n options: readonly ModelMenuOption[]\n selectedId?: string | null\n onClose: () => void\n onSelect: (optionId: string) => void\n /**\n * Host-owned config controls rendered above the Model row (e.g. a\n * Reasoning Low/High/Max list). ModelPicker never interprets the content —\n * omit it when the selected model has nothing to configure.\n */\n configSlot?: ReactNode\n /** Label for the bottom Model section. Default: \"Model\". */\n modelSectionLabel?: string\n /** Forwarded to the ModelMenu flyout. */\n searchable?: boolean\n searchPlaceholder?: string\n brandIconMap?: ModelMenuProps['brandIconMap']\n slotProps?: ModelMenuProps['slotProps']\n maxListHeight?: ModelMenuProps['maxListHeight']\n /** Footer under the model list flyout (e.g. \"Add Models\"). */\n footerSlot?: ReactNode\n /**\n * Hover detail panel beside the model list (title + detail text + optional\n * detailSlot). Default true.\n */\n showDetailPanel?: boolean\n}\n\nconst paperSx = {\n border: '1px solid',\n borderColor: 'divider',\n borderRadius: 2.5,\n overflow: 'hidden',\n bgcolor:\n 'color-mix(in srgb, var(--mui-palette-background-paper), transparent 4%)',\n boxShadow:\n '0 12px 32px color-mix(in srgb, var(--mui-palette-common-black), transparent 78%)',\n minWidth: 180,\n} as const\n\n/**\n * Cursor-style model picker: configure first (configSlot), change the model\n * at the bottom. The Model row opens ModelMenu as a side flyout.\n */\nexport function ModelPicker({\n anchorEl,\n options,\n selectedId = null,\n onClose,\n onSelect,\n configSlot,\n modelSectionLabel = 'Model',\n searchable,\n searchPlaceholder,\n brandIconMap,\n slotProps,\n maxListHeight,\n footerSlot,\n showDetailPanel = true,\n}: ModelPickerProps) {\n const open = Boolean(anchorEl)\n const [modelRowEl, setModelRowEl] = useState<HTMLElement | null>(null)\n const [modelFlyoutOpen, setModelFlyoutOpen] = useState(false)\n const rootRef = useRef<HTMLDivElement>(null)\n\n const selected = useMemo(\n () => options.find((option) => option.id === selectedId) ?? options[0],\n [options, selectedId],\n )\n\n useEffect(() => {\n if (!open) {\n setModelFlyoutOpen(false)\n setModelRowEl(null)\n }\n }, [open])\n\n const closeAll = () => {\n setModelFlyoutOpen(false)\n onClose()\n }\n\n const openModelFlyout = (element: HTMLElement) => {\n setModelRowEl(element)\n setModelFlyoutOpen(true)\n }\n\n const isInsidePickerSurface = (event: MouseEvent | TouchEvent) => {\n const path =\n typeof event.composedPath === 'function'\n ? event.composedPath()\n : [event.target]\n return path.some((node) => {\n if (!(node instanceof Element)) {\n return false\n }\n if (rootRef.current?.contains(node)) {\n return true\n }\n // ModelMenu portals its Paper to document.body — tag it so click-away\n // does not treat expand / model selection as \"outside\". Prefer the path\n // attribute check so a row that React unmounted mid-click still counts.\n return (\n node.hasAttribute('data-model-picker-flyout') ||\n Boolean(node.closest('[data-model-picker-flyout]'))\n )\n })\n }\n\n const flyoutSlotProps = useMemo<ModelMenuProps['slotProps']>(() => {\n const paper = slotProps?.paper\n const detailPaper = slotProps?.detailPaper\n // Tag list + detail Papers so click-away keeps the config menu open —\n // the detail panel sits outside the list Paper as an absolute sibling.\n const flyoutTag = { 'data-model-picker-flyout': '' } as const\n return {\n ...slotProps,\n paper: {\n ...paper,\n ...flyoutTag,\n } as NonNullable<ModelMenuProps['slotProps']>['paper'],\n detailPaper: {\n ...detailPaper,\n ...flyoutTag,\n } as NonNullable<ModelMenuProps['slotProps']>['detailPaper'],\n }\n }, [slotProps])\n\n return (\n <>\n <Popper\n open={open}\n anchorEl={anchorEl}\n placement=\"top-start\"\n modifiers={[\n { name: 'offset', options: { offset: [0, 10] } },\n { name: 'preventOverflow', options: { padding: 8 } },\n {\n name: 'flip',\n options: { fallbackPlacements: ['bottom-start', 'top-start'] },\n },\n ]}\n sx={{ zIndex: (theme) => theme.zIndex.modal + 2 }}\n >\n <ClickAwayListener\n onClickAway={(event) => {\n if (isInsidePickerSurface(event)) {\n return\n }\n closeAll()\n }}\n >\n <Box ref={rootRef} sx={{ display: 'inline-block' }}>\n <Paper\n elevation={0}\n sx={paperSx as SxProps<Theme>}\n >\n {configSlot ? (\n <Box sx={{ px: 0.5, pt: 0.5, pb: 0.25 }}>{configSlot}</Box>\n ) : null}\n\n {configSlot ? (\n <Box\n sx={{\n borderTop: '1px solid',\n borderColor: 'divider',\n mx: 1,\n }}\n />\n ) : null}\n\n <Box sx={{ px: 0.5, pb: 0.5, pt: configSlot ? 0.25 : 0.5 }}>\n <Typography\n component=\"div\"\n sx={{\n px: 1,\n pt: 0.5,\n pb: 0.15,\n fontSize: '0.66rem',\n fontWeight: 700,\n letterSpacing: '0.04em',\n color: 'text.secondary',\n m: 0,\n }}\n >\n {modelSectionLabel}\n </Typography>\n <List dense disablePadding>\n <ListItemButton\n onMouseEnter={(event) => openModelFlyout(event.currentTarget)}\n onClick={(event) => openModelFlyout(event.currentTarget)}\n sx={{\n mx: 0.5,\n my: 0.15,\n px: 1,\n py: 0.75,\n gap: 1,\n borderRadius: 1.5,\n alignItems: 'center',\n bgcolor: 'action.hover',\n '&:hover': { bgcolor: 'action.selected' },\n }}\n >\n <Typography\n sx={{\n flex: 1,\n minWidth: 0,\n fontSize: '0.82rem',\n fontWeight: 600,\n color: 'text.primary',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n m: 0,\n }}\n >\n {selected?.label ?? 'Select model'}\n </Typography>\n <KeyboardArrowRightIcon\n sx={{ fontSize: 16, color: 'text.secondary', flexShrink: 0 }}\n />\n </ListItemButton>\n </List>\n </Box>\n </Paper>\n </Box>\n </ClickAwayListener>\n </Popper>\n\n {modelFlyoutOpen ? (\n <ModelMenu\n anchorEl={modelRowEl}\n options={options}\n selectedId={selectedId}\n searchable={searchable}\n searchPlaceholder={searchPlaceholder}\n brandIconMap={brandIconMap}\n slotProps={flyoutSlotProps}\n maxListHeight={maxListHeight}\n footerSlot={footerSlot}\n placement=\"right-start\"\n showDetailPanel={showDetailPanel}\n onClose={() => setModelFlyoutOpen(false)}\n onSelect={(id) => {\n // Keep the config menu open — Cursor stays open so you can keep\n // adjusting Effort/Options after changing the model.\n onSelect(id)\n }}\n />\n ) : null}\n </>\n )\n}\n\nexport default ModelPicker\n","export { ModelPicker, default } from './ModelPicker'\nexport type { ModelPickerProps } from './ModelPicker'\n","export * from './Menu'\nexport * from './useMenu'\nexport * from './MenuItem'\nexport * from './DetailMenu'\nexport * from './ModelMenu'\nexport * from './ModelPicker'\n","export * from './src'","import type { SxProps, Theme } from '@mui/material/styles'\n\nexport const statusAvatarRootSx: SxProps<Theme> = {\n\t'--status-badge-shadow': 'var(--mui-palette-background-default)',\n\t'--status-color-online': 'var(--mui-palette-success-main)',\n\t'--status-color-away': 'var(--mui-palette-warning-main)',\n\t'--status-color-busy': 'var(--mui-palette-error-main)',\n\t'--status-color-offline': 'var(--mui-palette-grey-500)',\n}\n","'use client'\nimport { styled } from '@mui/material/styles'\nimport { Badge } from '@/ele/Badge'\n\nimport { useMenu, MenuPopper } from '@/ele/Menu'\n\nimport { Avatar, AvatarButton } from '../Avatar'\nimport { statusAvatarRootSx } from './theme'\nimport { mergeSx } from '@/_utils/_func'\n\n// all the status that can be changed except offline\nconst USER_STATUSs = {\n online: 'online',\n away: 'away',\n busy: 'busy',\n offline: 'offline',\n invisible: 'invisible',\n} as const\nconst changable_status = Object.values(USER_STATUSs).filter(s=>s!=='offline')\ntype UserStatusTypes = typeof USER_STATUSs[keyof typeof USER_STATUSs]\n\n/**\n * StatusAvatar\n * @description: avatar of the participant with status\n * @param status - status of the participant\n * @param src - src of the avatar\n * @param name - name of the participant\n * \n * user status will be shown as a dot on the avatar\n */\nexport function Renderer(props:{\n status:UserStatusTypes;\n statusEditable?:boolean;\n handleStatusChange?:((status:UserStatusTypes)=>void);\n name:string;\n src?:string;\n\n slotProps?:{\n badge?:React.ComponentProps<typeof Badge>;\n avatar?:Partial<React.ComponentProps<typeof Avatar>>;\n avatarButton?:Partial<React.ComponentProps<typeof AvatarButton>>;\n };\n}){\n const {\n name, src,\n status, handleStatusChange,\n statusEditable,\n slotProps,\n } = props\n\n const p = useMenu({\n multiple: false,\n initSelected: [status],\n })\n return (\n <>\n <StyledBadge \n\n status={status}\n overlap=\"circular\"\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'right',\n }}\n variant=\"dot\"\n\n sx={mergeSx(statusAvatarRootSx, {\n height:\"fit-content\",\n })}\n >\n {statusEditable\n ?<AvatarButton name={name} src={src} {...slotProps?.avatarButton} onClick={p.onTriggerClickHandler}/>\n :<Avatar name={name} src={src} {...slotProps?.avatar} displayName={false}/>\n }\n </StyledBadge>\n <MenuPopper\n openMenuProps={p}\n options={changable_status.map((s)=>({\n id: s,\n label: s,\n onClick:()=>{\n p.closeHandler()\n if(handleStatusChange) handleStatusChange(s)\n },\n }))}\n />\n </>\n )\n}\nexport const status = USER_STATUSs\nexport type Status = UserStatusTypes\n\n/**\n * StyledBadge\n * @description: styled badge for the avatar\n * @param status - status of the participant\n * \n * use css variables to set the color and animation of the badge\n */\nconst StyledBadge = styled(Badge,{\n shouldForwardProp: p=> p!==\"status\"\n})<{status:UserStatusTypes}>(() => ({\n '& .MuiBadge-badge': {\n width:\"15%\",\n height:\"15%\",\n minWidth: '10px',\n minHeight: '10px',\n borderRadius: '50%',\n borderColor:\"transparent\",\n backgroundColor: 'var(--color)',\n color: 'var(--color)',\n boxShadow: `0 0 0 2px var(--status-badge-shadow)`,\n display:\"var(--display)\",\n '&::after': {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n borderRadius: '50%',\n animation: 'var(--animate)',\n border: '1px solid currentColor',\n content: '\"\"',\n },\n },\n '@keyframes ripple': {\n '0%': {\n transform: 'scale(.8)',\n opacity: 1,\n },\n '100%': {\n transform: 'scale(2.4)',\n opacity: 0,\n },\n },\n\n variants:[\n {\n props: {status:USER_STATUSs.online},\n style: {\n '--color': 'var(--status-color-online)',\n '--animate': 'ripple 1.2s infinite ease-in-out', // ripple animation\n '--display': 'block', // show the dot\n },\n },\n {\n props: {status:USER_STATUSs.away},\n style: {\n '--color': 'var(--status-color-away)',\n '--animate': 'none', // no animation\n '--display': 'block', // show the dot\n },\n },\n {\n props: {status:USER_STATUSs.busy},\n style: {\n '--color': 'var(--status-color-busy)',\n '--animate': 'none', // no animation\n '--display': 'block', // show the dot\n },\n },\n {\n props: {status:USER_STATUSs.offline,},\n style: {\n '--color': 'var(--status-color-offline)',\n '--animate': 'none', // no animation\n '--display': 'block', // show the dot\n },\n },\n {\n props: {status:USER_STATUSs.invisible,},\n style: {\n '--color': 'var(--status-color-offline)',\n '--animate': 'none', // no animation\n '--display': 'block', // show the dot\n },\n },\n ]\n}))\n","export * as StatusAvatar from './StatusAvatar'","export * from './Avatar'\nexport * from './StatusAvatar'\n// re-export internal utility types (e.g. Size)\nexport * from './_utils'","export * from './src'\nexport type { Size } from './src/_utils/_types'","import React from 'react'\nimport {\n PickersTextField,\n PickersTextFieldProps,\n} from '@mui/x-date-pickers/PickersTextField'\nimport { PickersActionBarProps } from '@mui/x-date-pickers/PickersActionBar'\nimport { usePickerContext } from '@mui/x-date-pickers/hooks'\nimport { styled } from '@mui/material/styles'\nimport DialogActions from '@mui/material/DialogActions'\nimport {\n CheckIcon,\n TodayIcon,\n ClearIcon,\n NavigateNextIcon as NextIcon,\n DeleteForeverIcon,\n} from '@/icons/MuiIcon'\n\nimport { IconButton } from '@/ele/Button'\n\nexport const MyPickersTextField = React.forwardRef(\n (props: PickersTextFieldProps, ref: React.Ref<HTMLDivElement>) => (\n <PickersTextField size=\"small\" {...props} ref={ref} />\n ),\n)\n\n/**\n * Reference: https://github.com/mui/mui-x/blob/v8.26.0/packages/x-date-pickers/src/PickersActionBar/PickersActionBar.tsx\n */\nexport const PickersActionBarRoot = styled(DialogActions, {\n name: 'MuiPickersLayout',\n slot: 'ActionBar',\n})({})\n\nexport const MyActionBar: React.FC<PickersActionBarProps> = (props) => {\n const { actions, ...other } = props\n const {\n clearValue,\n setValueToToday,\n acceptValueChanges,\n cancelValueChanges,\n goToNextStep,\n hasNextStep,\n } = usePickerContext()\n\n if (actions == null || actions.length === 0) {\n return null\n }\n\n const buttons = actions.map((actionType) => {\n switch (actionType) {\n case 'clear':\n return (\n <IconButton data-testid=\"clear-action-button\" onClick={clearValue} key={actionType} title=\"clear\">\n <DeleteForeverIcon fontSize=\"small\" />\n </IconButton>\n )\n case 'cancel':\n return (\n <IconButton onClick={cancelValueChanges} key={actionType} title=\"cancel\">\n <ClearIcon fontSize=\"small\" />\n </IconButton>\n )\n case 'accept':\n return (\n <IconButton onClick={acceptValueChanges} key={actionType} title=\"accept\">\n <CheckIcon fontSize=\"small\" />\n </IconButton>\n )\n case 'today':\n return (\n <IconButton data-testid=\"today-action-button\" onClick={setValueToToday} key={actionType} title=\"today\">\n <TodayIcon fontSize=\"small\" />\n </IconButton>\n )\n case 'next':\n return (\n <IconButton onClick={goToNextStep} key={actionType} title=\"next\">\n <NextIcon fontSize=\"small\" />\n </IconButton>\n )\n case 'nextOrAccept':\n if (hasNextStep) {\n return (\n <IconButton onClick={goToNextStep} key={actionType} title=\"next\">\n <NextIcon fontSize=\"small\" />\n </IconButton>\n )\n }\n return (\n <IconButton onClick={acceptValueChanges} key={actionType} title=\"accept\">\n <CheckIcon fontSize=\"small\" />\n </IconButton>\n )\n default:\n return null\n }\n })\n\n return <PickersActionBarRoot {...other}>{buttons}</PickersActionBarRoot>\n}\n","import React from 'react'\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider'\nimport { DatePicker as MUIDatePicker } from '@mui/x-date-pickers/DatePicker'\nimport { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs'\n\nimport { MyPickersTextField, MyActionBar } from './_shared'\n\nexport const MuiXDatePicker: React.FC<React.ComponentProps<typeof MUIDatePicker>> = (props) => {\n return (\n <LocalizationProvider dateAdapter={AdapterDayjs}>\n <MUIDatePicker \n showDaysOutsideCurrentMonth\n \n {...props} \n slotProps={{\n actionBar: {\n actions: ['clear', 'today', 'cancel', 'accept'],\n },\n ...(props.slotProps || {}),\n }}\n slots={{\n actionBar: MyActionBar,\n textField: MyPickersTextField,\n ...(props.slots || {}),\n }}\n />\n </LocalizationProvider>\n )\n}\n\nexport default MuiXDatePicker","import React from 'react'\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider'\nimport { DateTimePicker as MUIDateTimePicker } from '@mui/x-date-pickers/DateTimePicker'\nimport { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs'\n\nimport { MyPickersTextField, MyActionBar } from './_shared'\n\nexport const MuiXDateTimePicker: React.FC<React.ComponentProps<typeof MUIDateTimePicker>> = (props) => {\n\n return (\n <LocalizationProvider dateAdapter={AdapterDayjs}>\n <MUIDateTimePicker \n showDaysOutsideCurrentMonth\n \n {...props} \n slotProps={{\n actionBar: {\n actions: ['clear', 'today', 'cancel', 'accept'],\n },\n ...(props.slotProps || {}),\n }}\n slots={{\n actionBar: MyActionBar,\n textField: MyPickersTextField,\n ...(props.slots || {}),\n }}\n />\n </LocalizationProvider>\n )\n}\n\nexport default MuiXDateTimePicker\n","import type { MuiComponentTheme } from '@/_utils/_types'\n\nexport const datePickerTheme = {\n defaultProps: {\n slotProps: {\n popper: {\n sx: {\n \"& .MuiPaper-root\": {\n borderRadius: '20px',\n background: 'var(--mui-palette-background-default)',\n border: 'solid 1px var(--mui-palette-border-1)',\n },\n },\n }\n },\n },\n} as const satisfies MuiComponentTheme<'MuiDatePicker'>\nexport const dateTimePickerTheme = {\n defaultProps: {\n slotProps: {\n popper: {\n sx: {\n \"& .MuiPaper-root\": {\n borderRadius: '20px',\n background: 'var(--mui-palette-background-default)',\n border: 'solid 1px var(--mui-palette-border-1)',\n },\n },\n }\n },\n },\n} as const satisfies MuiComponentTheme<'MuiDateTimePicker'>\n\nexport const dateCalendarTheme = {\n defaultProps: {\n slotProps: {},\n },\n styleOverrides: {\n root: {\n borderRadius: '20px',\n },\n },\n} as const satisfies MuiComponentTheme<'MuiDateCalendar'>\n\nexport const pickersCalendarHeaderTheme = {\n defaultProps: {\n slotProps: {\n previousIconButton: { size: 'small' },\n nextIconButton: { size: 'small' },\n switchViewIcon: { fontSize: 'small' },\n },\n },\n styleOverrides: {\n root: {},\n label: {},\n },\n} as const satisfies MuiComponentTheme<'MuiPickersCalendarHeader'>\n\nexport const pickersDayTheme = {\n defaultProps: {},\n styleOverrides: {\n root: {\n '&.Mui-selected.MuiButtonBase-root': {\n color: 'var(--mui-palette-error-main)',\n backgroundColor: 'var(--mui-palette-focus-1)',\n \"&:hover\": {\n backgroundColor: 'var(--mui-palette-focus-1-hover)',\n },\n },\n \"&.MuiPickersDay-today\": {\n borderColor:\"var(--mui-palette-focus-1)\",\n },\n },\n dayOutsideMonth: {\n color:'var(--mui-palette-text-disabled)',\n },\n },\n} as const satisfies MuiComponentTheme<'MuiPickersDay'>\n\nexport const multiSectionDigitalClockTheme = {\n defaultProps: {\n slotProps: {\n digitalClockSectionItem: {\n dense: true,\n },\n }\n },\n styleOverrides: {\n root: {\n '&': { paddingRight: '4px' },\n '& .MuiMultiSectionDigitalClockSection-root': {\n scrollbarWidth: 'inherit',\n '& li': {\n borderRadius: 'var(--mui-shape-borderRadius)',\n '&::before': {\n borderRadius: 'var(--mui-shape-borderRadius)',\n },\n \"&.Mui-selected\": {\n backgroundColor:\"transparent\",\n },\n },\n\n },\n },\n },\n} as const satisfies MuiComponentTheme<'MuiMultiSectionDigitalClock'>\n\nexport const pickersInputBaseTheme = {\n styleOverrides: {\n root: {\n \"&.Mui-focused:not(.Mui-error) fieldset.MuiPickersOutlinedInput-notchedOutline\": {\n borderColor:\"var(--mui-palette-text-secondary)\",\n },\n \"&.MuiPickersInputBase-root\": {\n \"& .MuiButtonBase-root\": {\n \"& > svg\": {\n fontSize: '1.25rem',\n },\n },\n },\n },\n },\n\n} as const satisfies MuiComponentTheme<'MuiPickersInputBase'>","export { default as MuiXDatePicker } from './MuiXDatePicker'\nexport * from './MuiXDatePicker'\nexport { default as MuiXDateTimePicker } from './MuiXDateTimePicker'\nexport * from './MuiXDateTimePicker'\nexport * from './theme'","export * from './src'\n","import ImageList from '@mui/material/ImageList';\nimport ImageListItem from '@mui/material/ImageListItem';\n\n/**\n * Mui compnent for ImageList\n * \n * [Doc](https://mui.com/material-ui/react-image-list/)\n */\nconst MuiImageList = ({imageList,cols=3,rowHeight=164,width='100%',height='auto'}: {\n imageList: {\n id: string | number;\n url: string; \n title?: string;\n }[];\n cols?: number; \n rowHeight?: number;\n width?: number | string;\n height?: number | string;\n}) => {\n return (\n <ImageList sx={{ width, height }} cols={cols} rowHeight={rowHeight}>\n {imageList.map((item) => (\n <ImageListItem key={item.id}>\n <img\n src={`${item.url}?w=${rowHeight * 2}&h=${rowHeight * 2}&fit=crop&auto=format`}\n alt={item.title??\"\"}\n loading=\"lazy\"\n width={rowHeight} height={rowHeight}\n style={{objectFit: 'cover'}}\n />\n </ImageListItem>\n ))}\n </ImageList>\n )\n}\n\nexport default MuiImageList\n","export {default as MuiImageList} from './MuiImageList'\n","import type { SxProps, Theme } from '@mui/material/styles'\n\n/**\n * Root-level CSS variable aliases for Cropper.\n * Children consume these vars; palette refs are declared only here.\n *\n * Also overrides react-image-crop public CSS vars (--rc-*) via cascade:\n * https://github.com/DominicTobias/react-image-crop#css-variables\n */\nexport const cropperRootSx: SxProps<Theme> = {\n '--image-border-radius': 'var(--mui-shape-borderRadius)',\n '--image-border': '2px solid var(--mui-palette-secondary-main)',\n // react-image-crop selection theming\n '--rc-border-color': 'var(--mui-palette-border-1)',\n '--rc-focus-color': 'var(--mui-palette-primary-main)',\n '--rc-drag-handle-bg-colour': 'var(--mui-palette-focus-1)',\n \"& .ReactCrop__crop-selection:not(.ReactCrop--no-animate .ReactCrop__crop-selection)\": {\n '--animated-dash-light-color': 'var(--mui-palette-border-1)',\n '--animated-dash-dark-color': 'var(--mui-palette-grey-300)',\n backgroundImage: `\n linear-gradient(to right,var(--animated-dash-light-color) 50%,var(--animated-dash-dark-color) 50%),\n linear-gradient(to right,var(--animated-dash-light-color) 50%,var(--animated-dash-dark-color) 50%),\n linear-gradient(to bottom,var(--animated-dash-light-color) 50%,var(--animated-dash-dark-color) 50%),\n linear-gradient(to bottom,var(--animated-dash-light-color) 50%,var(--animated-dash-dark-color) 50%)`,\n },\n [`& .ReactCrop__rule-of-thirds-vt:before, \n .ReactCrop__rule-of-thirds-vt:after, \n .ReactCrop__rule-of-thirds-hz:before, \n .ReactCrop__rule-of-thirds-hz:after`]: {\n background:\"#fff6\",\n },\n}\n","import { Box } from '@/ele/Box';\nimport { cropperRootSx } from '../theme';\nimport { mergeSx } from '@/_utils/_func';\n\ninterface CropperLayoutProps {\n left: React.ReactNode;\n right: React.ReactNode;\n leftFooter?: React.ReactNode; // content shown at bottom of the left column (e.g. file selector)\n footer?: React.ReactNode; // bottom action/footer bar\n}\n\nexport default function CropperLayout({\n left,\n right,\n leftFooter,\n footer,\n}: CropperLayoutProps) {\n return (\n <Box sx={mergeSx({ display: 'flex', flexDirection: 'column', gap: 2, height: '100%' }, cropperRootSx)}>\n <Box\n sx={{\n // stack children vertically on small screens, switch to two‑column grid at md\n display: { xs: 'table-row-group', md: 'grid' },\n flexDirection: { xs: 'column', md: undefined },\n gridTemplateColumns: { xs: '1fr', md: '1fr 280px' },\n gap: 2,\n alignItems: 'start',\n minHeight: 0,\n flex: '1 1 auto',\n overflow: 'auto',\n }}\n >\n <Box sx={{ display: 'flex', flexDirection: 'column', justifyContent: 'space-between', minHeight: 0, height: '100%', alignItems: 'center', width: '-webkit-fill-available' }}>\n {left}\n {leftFooter}\n </Box>\n\n <Box sx={{ display: 'flex', flexDirection: 'column', justifyContent: 'space-between', minHeight: 0, height: '100%', }}>\n {right}\n {footer}\n </Box>\n </Box>\n </Box>\n );\n}\n","import React from 'react'\nimport ReactCrop, { type Crop, type PixelCrop } from 'react-image-crop';\nimport { Box } from '@/ele/Box';\n\ninterface CropperSourceSectionProps {\n activeBlobUrl: string;\n crop: Crop;\n setCrop: (crop: Crop) => void;\n setCompletedCrop: (crop: PixelCrop) => void;\n circularCrop: boolean;\n defaultRatio?: number;\n resizeCropEnabled: boolean;\n rotate: number;\n scale: number;\n imageRef: React.RefObject<HTMLImageElement | null>;\n onImageLoad: (e: React.SyntheticEvent<HTMLImageElement>) => void;\n}\n\nexport default function CropperSourceSection({\n activeBlobUrl,\n crop,\n setCrop,\n setCompletedCrop,\n circularCrop,\n defaultRatio,\n resizeCropEnabled,\n rotate,\n scale,\n imageRef,\n onImageLoad,\n}: CropperSourceSectionProps) {\n return (\n <Box\n sx={{\n minHeight: 0,\n overflow: 'hidden',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n\n \"& .ReactCrop\": {\n borderRadius: 'var(--image-border-radius)',\n border: 'var(--image-border)',\n\n },\n }}\n >\n {!!activeBlobUrl && (\n <ReactCrop\n crop={crop}\n onChange={(nextCrop) => setCrop(nextCrop)}\n onComplete={(nextCrop) => setCompletedCrop(nextCrop)}\n circularCrop={circularCrop}\n aspect={defaultRatio}\n keepSelection\n ruleOfThirds\n disabled={!resizeCropEnabled}\n style={{ maxWidth: '100%', maxHeight: 420, overflow: 'hidden' }}\n >\n <img\n ref={imageRef}\n alt=\"Crop source\"\n src={activeBlobUrl}\n style={{\n display: 'block',\n width: '100%',\n maxWidth: '100%',\n maxHeight: 420,\n objectFit: 'contain',\n transform: `rotate(${rotate}deg) scale(${scale})`,\n transformOrigin: 'center center',\n }}\n onLoad={onImageLoad}\n />\n </ReactCrop>\n )}\n </Box>\n );\n}\n","import type { MuiComponentTheme } from '@/_utils/_types'\n\nexport const sliderTheme = {\n defaultProps: {\n },\n styleOverrides: {\n root: {\n color: 'var(--mui-palette-primary-emphasis)',\n },\n rail: {\n backgroundColor: 'color-mix(in lab, var(--mui-palette-primary-emphasis), transparent 76%)',\n },\n track: {\n border: 'none',\n backgroundColor: 'currentColor',\n },\n thumb: {\n width: \"15px\",\n backgroundColor: 'currentColor',\n boxShadow: \"none\",\n borderRadius: '5px',\n '&:hover, &.Mui-focusVisible, &.Mui-active': {\n boxShadow: \"none\",\n },\n },\n mark: () => ({\n backgroundColor: 'var(--mui-palette-background-disabled)',\n height: \"3px\",\n width: \"10px\",\n '&.MuiSlider-markActive': {\n opacity: 1,\n },\n }),\n markLabel: {\n color: \"var(--mui-palette-text-secondary)\",\n \"&.MuiSlider-markLabelActive\": {\n color: \"var(--mui-palette-text-primary)\",\n }\n },\n valueLabel: {\n lineHeight: 1,\n fontSize: \"9px\",\n background: 'unset',\n padding: 0,\n width: \"24px\",\n height: \"24px\",\n borderRadius: '50% 50% 50% 0',\n backgroundColor: \"var(--mui-palette-warning-background)\",\n color: \"var(--mui-palette-warning-dark)\",\n transformOrigin: 'bottom left',\n transform: 'translate(50%, -100%) rotate(-45deg) scale(0)',\n border: `1px solid var(--mui-palette-warning-dark)`,\n '&::before': { display: 'none' },\n '&.MuiSlider-valueLabelOpen': {\n transform: 'translate(50%, -100%) rotate(-45deg) scale(1)',\n },\n '& > *': {\n transform: 'rotate(45deg)',\n },\n },\n }\n\n} as const satisfies MuiComponentTheme<\"MuiSlider\">\n","export {default as Slider} from '@mui/material/Slider'\nexport * from './theme'\n","export * from './Slider'\n","export * from './src'\n","import React from 'react'\nimport { Box, Stack } from '@/ele/Box';\nimport { Slider } from '@/ele/Slider';\nimport { Typography } from '@/ele/Typography';\n\nconst scaleMarks = [\n { value: 0.5, label: '0.5x' },\n { value: 1, label: '1x' },\n { value: 1.5, label: '1.5x' },\n { value: 2, label: '2x' },\n { value: 2.5, label: '2.5x' },\n { value: 3, label: '3x' },\n];\n\nconst rotationMarks = [\n { value: -180, label: '-180°' },\n { value: -90, label: '-90°' },\n { value: 0, label: '0°' },\n { value: 90, label: '90°' },\n { value: 180, label: '180°' },\n];\n\ninterface CropperControlsSectionProps {\n PreviewRenderer?: React.ForwardRefExoticComponent<React.RefAttributes<HTMLCanvasElement>>;\n canvasRef: React.RefObject<HTMLCanvasElement | null>;\n rotate: number;\n setRotate: (value: number) => void;\n scale: number;\n setScale: (value: number) => void;\n}\n\nexport default function CropperControlsSection({\n PreviewRenderer,\n canvasRef,\n rotate,\n setRotate,\n scale,\n setScale,\n}: CropperControlsSectionProps) {\n return (\n <Stack spacing={2} sx={{ minWidth: 0, px: 2 }}>\n <Box display=\"flex\" justifyContent=\"center\">\n {PreviewRenderer ? (\n <PreviewRenderer ref={canvasRef} />\n ) : (\n <canvas\n ref={canvasRef}\n style={{ width: '100%', maxWidth: 260,\n border: 'var(--image-border)',\n borderRadius: 'var(--image-border-radius)',\n }}\n />\n )}\n </Box>\n\n <Box>\n <Typography variant=\"body2\" sx={{ mb: 1 }}>\n Rotation ({rotate}°)\n </Typography>\n <Slider\n min={-180}\n max={180}\n step={1}\n marks={rotationMarks}\n value={rotate}\n onChange={(_, value) => setRotate(Array.isArray(value) ? value[0] : value)}\n />\n </Box>\n\n <Box>\n <Typography variant=\"body2\" sx={{ mb: 1 }}>\n Resize scale ({scale.toFixed(2)}x)\n </Typography>\n <Slider\n min={0.5}\n max={3}\n step={0.05}\n marks={scaleMarks}\n value={scale}\n onChange={(_, value) => setScale(Array.isArray(value) ? value[0] : value)}\n />\n </Box>\n </Stack>\n );\n}\n","import { Box } from '@/ele/Box';\nimport { IconButton } from '@/ele/Button';\nimport { CheckIcon } from '@/icons/MuiIcon';\nimport { ClearIcon } from '@/icons/MuiIcon';\nimport { ReplayIcon } from '@/icons/MuiIcon';\n\ninterface CropperActionSectionProps {\n onSave: () => void;\n onResetTransforms: () => void;\n onClear: () => void;\n saveDisabled?: boolean;\n}\n\nexport default function CropperActionSection({\n onSave,\n onResetTransforms,\n onClear,\n saveDisabled,\n}: CropperActionSectionProps) {\n return (\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'flex-end',\n gap: 1,\n flexWrap: 'wrap',\n }}\n >\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, flexWrap: 'wrap' }}>\n <IconButton onClick={onResetTransforms} title=\"Reset Scale & Rotation\">\n <ReplayIcon fontSize=\"small\" />\n </IconButton>\n\n <IconButton onClick={onClear} color=\"error\" title=\"Remove image\">\n <ClearIcon fontSize=\"small\" />\n </IconButton>\n\n <IconButton onClick={onSave} color=\"success\" disabled={saveDisabled} title=\"Save\">\n <CheckIcon fontSize=\"small\" />\n </IconButton>\n </Box>\n </Box>\n );\n}\n","import type { SxProps, Theme } from '@mui/material/styles';\n\n/**\n * Root-level CSS variable aliases for the FileUploader compound component.\n * Declared once on the root element — child components consume via `var(--*)`.\n */\nexport const fileUploaderRootSx: SxProps<Theme> = {\n '--dropzone-bg': 'var(--mui-palette-background-paper)',\n '--dropzone-text-color': 'var(--mui-palette-text-secondary)',\n '--dropzone-border-hover': 'var(--mui-palette-primary-main)',\n '--dropzone-bg-hover': 'var(--mui-palette-action-hover)',\n};\n","import { fileTypeFromBuffer } from 'file-type';\n\n/**\n * download file from url and return blob url\n * @param url\n * @param fetchOptions\n */\nexport async function downloadFile(url: string, fetchOptions?: RequestInit) {\n const res = await fetch(url, fetchOptions);\n const blob = await res.blob();\n const buffer = await blob.arrayBuffer();\n\n // application/octet-stream make it hard to detect\n // so we use buffer to detect the mime type\n const fType = await fileTypeFromBuffer(buffer);\n\n const data = {\n blobUrl: URL.createObjectURL(blob),\n size: blob.size,\n mimeType: fType?.mime || blob.type, // use file-type to get the mime type\n };\n\n const nonImgRes = {\n ...data,\n dimensions: {\n width: 0,\n height: 0,\n },\n };\n // if file is an image\n try {\n if (data.mimeType.includes('image/')) {\n const dimensions = await handleImageDownload(data.blobUrl);\n // check the mime type\n return {\n ...data,\n dimensions: dimensions,\n };\n } else {\n return nonImgRes;\n }\n\n } catch (err) {\n // if there is an error, it might not be an image or the image failed to load\n console.warn('Failed to handle image download:', err);\n return nonImgRes;\n }\n}\n\n/**\n * handle image download\n * @param blobUrl \n * @returns \n */\nasync function handleImageDownload(blobUrl: string) {\n // Create an Image object to load the image\n const img = new Image();\n img.src = blobUrl;\n\n // Wait for the image to load to access its dimensions\n await new Promise((resolve, reject) => {\n img.onload = resolve;\n img.onerror = reject;\n });\n const metaData = {\n width: img.width,\n height: img.height,\n };\n\n // clear the img from memory\n img.remove();\n\n return metaData;\n}\n","import { ValueOf } from '../_types';\n\nexport const FILE_STATUSs = {\n // local status\n uploadingToLocal:\"local-uploading\",\n uploadedToLocal:\"local-uploaded\",\n localError:\"local-error\",\n\n \n pending:\"pending\",\n // upload s3\n uploadPending:'upload-pending',\n gettingSignedURL:'upload-gettingSignedURL',\n beginUploadToS3:'upload-beginUploadToS3',\n uploadedToCloud:'upload-uploadedToCloud',\n error:'upload-error',\n // download\n downloadPending:'download-pending',\n downloading:'download-in-progress',\n downloaded:'download-completed',\n downloadError:'download-error',\n} as const\n\nexport const FILE_TYPEs = {\n image:\"image\",\n video:\"video\",\n audio:\"audio\",\n pdf:\"pdf\",\n doc:\"doc\",\n xls:\"xls\",\n ppt:\"ppt\",\n txt:\"txt\",\n zip:\"zip\",\n json:\"json\",\n other:\"other\",\n} as const\n\nexport const MAX_FILE_NAME_LENGTH = 100\n\nexport type FileStatusType = ValueOf<typeof FILE_STATUSs>;\nexport type FileType = ValueOf<typeof FILE_TYPEs>;\n\nexport type Attachment = {\n url: string;\n keyPath: string;\n filename: string;\n fileType: string;\n hostname: string;\n}\n","import { downloadFile } from \"../_func/downloadFile\";\nimport { type FileStatusType, type FileType, FILE_STATUSs, FILE_TYPEs, type Attachment } from \"../_const/file\";\n\nexport { FILE_TYPEs, FILE_STATUSs };\n\ninterface PreviewableFileProps {\n path?: string;\n blobUrl?: string;\n filename?: string;\n randomName?: string;\n fileType?: string;\n mimeType?: Blob[\"type\"];\n size?: number;\n displaySize?: string;\n url?: string;\n fetchOptions?: object;\n putUrl?: string;\n getUrl?: string;\n status?: FileStatusType;\n revokeable?: boolean;\n imageProps?:{\n width: number;\n height: number;\n };\n}\n\nexport default class PreviewableFile {\n path: NonNullable<PreviewableFileProps[\"path\"]>;\n blobUrl: NonNullable<PreviewableFileProps[\"blobUrl\"]>;\n filename: NonNullable<PreviewableFileProps[\"filename\"]>;\n randomName: NonNullable<PreviewableFileProps[\"randomName\"]>;\n fileType: NonNullable<PreviewableFileProps[\"fileType\"]>;\n mimeType: NonNullable<PreviewableFileProps[\"mimeType\"]>;\n size: NonNullable<PreviewableFileProps[\"size\"]>;\n displaySize: NonNullable<PreviewableFileProps[\"displaySize\"]>;\n url: NonNullable<PreviewableFileProps[\"url\"]>;\n fetchOptions: NonNullable<PreviewableFileProps[\"fetchOptions\"]>;\n putUrl: NonNullable<PreviewableFileProps[\"putUrl\"]>;\n getUrl: NonNullable<PreviewableFileProps[\"getUrl\"]>;\n status: NonNullable<PreviewableFileProps[\"status\"]>;\n revokeable: NonNullable<PreviewableFileProps[\"revokeable\"]>;\n imageProps: NonNullable<PreviewableFileProps[\"imageProps\"]>;\n\n constructor(props: PreviewableFileProps = {}) { \n this.path = props.path ?? \"\"\n this.blobUrl = props.blobUrl ?? \"\"\n this.filename = props.filename ?? \"\"\n this.randomName = props.randomName ?? \"\"\n this.fileType = (props.fileType ?? getFileType(props.mimeType ?? \"\")) as FileType\n this.mimeType = props.mimeType ?? \"\"\n this.size = props.size ?? 0\n this.displaySize = props.displaySize ?? displayFileSize(props.size ?? 0)\n\n this.url = props.url ?? \"\"\n this.fetchOptions = props.fetchOptions ?? {}\n this.putUrl = props.putUrl ?? \"\"\n this.getUrl = props.getUrl ?? \"\"\n\n this.status = props.status ?? FILE_STATUSs.pending\n this.revokeable = props.revokeable ?? true\n this.imageProps = props.imageProps ?? {\n width: 0,\n height: 0,\n }\n\n Object.preventExtensions(this)\n }\n\n toPlainObj(){\n return {\n ...this\n }\n }\n\n updateFile(file: PreviewableFile | undefined){\n if(!file) return\n\n this.path = file.path\n this.blobUrl = file.blobUrl\n this.filename = file.filename\n this.randomName = file.randomName\n this.fileType = file.fileType\n this.size = file.size\n this.displaySize = file.displaySize\n\n this.url = file.url\n this.fetchOptions = file.fetchOptions\n this.putUrl = file.putUrl\n this.getUrl = file.getUrl\n\n this.status = file.status\n this.revokeable = file.revokeable\n\n this.imageProps = file.imageProps\n }\n updateStatus(status: FileStatusType){\n this.status = status\n }\n async downloadFile(){\n // if dont have url, return\n if(!this.url) return this\n // use the current url to download the file\n try{\n const res = await downloadFile(this.url, this.fetchOptions)\n // update the file\n\n // ensure `url` points to the usable blob URL returned from the download\n // (fixes cases where `this.url` was an ephemeral/revoked object URL)\n this.url = res.blobUrl\n this.path = res.blobUrl\n this.status = FILE_STATUSs.downloaded\n this.blobUrl = res.blobUrl\n this.fileType = getFileType(res.mimeType)\n this.mimeType = res.mimeType\n this.size = res.size\n this.displaySize = displayFileSize(res.size)\n this.imageProps = res.dimensions\n\n return this\n }catch(err){\n console.log(err)\n return this\n }\n }\n\n _displayFileSize(){\n return displayFileSize(this.size)\n }\n\n getUploadFormat():Attachment{\n return {\n url: this.putUrl,\n keyPath: this.putUrl,\n filename: this.filename,\n fileType: this.mimeType,\n hostname: \"\",\n }\n }\n}\n\nexport function displayFileSize(size: number): string {\n const units = ['B', 'KB', 'MB', 'GB', 'TB'];\n\n // Determine the appropriate unit index\n let unitIndex = 0;\n while (size >= 1024 && unitIndex < units.length - 1) {\n size /= 1024;\n unitIndex++;\n }\n\n // Format the file size with the unit\n // 2 decimal places\n const sizeWithUnit = size.toFixed(2) + ' ' + units[unitIndex];\n\n return `[${sizeWithUnit}]`;\n}\n\n/**\n * get the file type based on the mime type\n */\nfunction getFileType(mimeType:Blob[\"type\"]): FileType {\n const types = Object.values(FILE_TYPEs) as FileType[];\n \n // 1. Check if the type is explicitly defined in the start (e.g. image/jpeg -> image)\n const [type] = mimeType.split('/');\n if(types.includes(type as FileType)){\n return type as FileType;\n }\n\n // 2. Check if the type is included in the mime type (e.g. application/pdf -> pdf)\n const found = types.find((t) => mimeType.includes(t) && t !== FILE_TYPEs.other);\n if(found){\n return found;\n }\n\n return FILE_TYPEs.other;\n}\n","// src/components/compound/DisplayFile/src/DisplayFile.tsx\nimport React from 'react';\nimport { Box } from '@/ele/Box';\nimport { Typography } from '@/ele/Typography';\nimport { IconButton } from '@/ele/Button';\nimport {\n CloseIcon,\n DescriptionIcon,\n PictureAsPdfIcon,\n ImageIcon,\n AudioFileIcon,\n VideoFileIcon,\n TableChartIcon,\n FolderZipIcon,\n DataObjectIcon,\n InsertDriveFileIcon,\n} from '@/icons/MuiIcon';\n\nimport PreviewableFile, { FILE_TYPEs } from '@/_utils/classes/PreviewableFile';\n\nexport interface DisplayFileProps {\n file: PreviewableFile;\n onDelete?: (file: PreviewableFile) => void;\n mode?: 'thumbnail' | 'name';\n}\n\nexport const getFileIcon = (fileType: string) => {\n switch (fileType) {\n case FILE_TYPEs.image: return ImageIcon;\n case FILE_TYPEs.pdf: return PictureAsPdfIcon;\n case FILE_TYPEs.audio: return AudioFileIcon;\n case FILE_TYPEs.video: return VideoFileIcon;\n case FILE_TYPEs.xls: return TableChartIcon;\n case FILE_TYPEs.zip: return FolderZipIcon;\n case FILE_TYPEs.json: return DataObjectIcon;\n\n case FILE_TYPEs.ppt:\n case FILE_TYPEs.doc: \n case FILE_TYPEs.txt: \n return DescriptionIcon;\n default: return InsertDriveFileIcon;\n }\n};\n\nexport const FileThumbnail: React.FC<{ file: PreviewableFile; size?: number }> = ({ file, size = 60 }) => {\n const isImage = file.fileType === FILE_TYPEs.image;\n const FileIcon = getFileIcon(file.fileType || '');\n\n return (\n <Box\n sx={{\n width: size,\n height: size,\n minWidth: size,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n bgcolor: 'transparent',\n borderRadius: 1,\n overflow: 'hidden'\n }}\n >\n {isImage && file.blobUrl ? (\n <Box\n component=\"img\"\n src={file.blobUrl}\n alt={file.filename}\n sx={{ width: '100%', height: '100%', objectFit: 'cover' }}\n />\n ) : (\n <FileIcon fontSize={size >= 60 ? \"large\" : \"medium\"} color=\"action\" />\n )}\n </Box>\n );\n};\n\nconst DisplayFile: React.FC<DisplayFileProps> & { DISPLAY_MODEs: { thumbnail: 'thumbnail'; name: 'name' } } = ({\n file,\n onDelete,\n mode = 'thumbnail'\n}) => {\n return (\n <Box sx={{\n display: 'flex',\n alignItems: 'center',\n gap: 1,\n p: 1,\n border: '1px solid',\n borderColor: 'divider',\n borderRadius: 1,\n width: mode === 'thumbnail' ? 'fit-content' : '100%',\n maxWidth: '100%',\n position: 'relative',\n }}>\n <FileThumbnail file={file} />\n \n <Box sx={{ flex: 1, overflow: 'hidden' }}>\n <Typography variant=\"body2\" noWrap sx={{ maxWidth: 150 }}>\n {file.filename}\n </Typography>\n <Typography variant=\"caption\" color=\"text.secondary\">\n {file.displaySize}\n </Typography>\n </Box>\n\n {onDelete && (\n <IconButton \n size=\"small\" \n onClick={() => onDelete(file)}\n sx={{ ml: 'auto' }}\n >\n <CloseIcon fontSize=\"small\" />\n </IconButton>\n )}\n </Box>\n );\n};\n\nDisplayFile.DISPLAY_MODEs = {\n thumbnail: 'thumbnail',\n name: 'name'\n};\n\nexport default DisplayFile;\n","export { default as DisplayFile, default } from './DisplayFile';\nexport * from './DisplayFile';\n","export * from './src';\nexport { default } from './src';\n","import React from 'react';\nimport { DropzoneState } from 'react-dropzone';\nimport { Box } from '@/ele/Box';\nimport { Typography } from '@/ele/Typography';\nimport { NoteAddIcon } from '@/icons/MuiIcon';\n\nconst DropZoneBox: React.FC<{\n getRootProps: DropzoneState[\"getRootProps\"];\n getInputProps: DropzoneState[\"getInputProps\"];\n error?: boolean;\n}> = ({ getRootProps, getInputProps, error }) => {\n return (\n <Box \n {...getRootProps()} \n sx={{\n flex: 1,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n p: 3,\n border: \"2px dashed\",\n borderColor: error ? 'error.main' : 'divider',\n borderRadius: 1,\n backgroundColor: 'var(--dropzone-bg)',\n outline: \"none\",\n transition: \"border .24s ease-in-out\",\n color: 'var(--dropzone-text-color)',\n cursor: 'pointer',\n '&:hover': {\n borderColor: 'var(--dropzone-border-hover)',\n backgroundColor: 'var(--dropzone-bg-hover)'\n }\n }}\n >\n <input {...getInputProps()} />\n \n <NoteAddIcon sx={{ fontSize: \"2.5rem\", mb: 1 }} />\n <Typography variant=\"caption\" align=\"center\">\n Drag &quot;n&quot; drop some files here, or click to select files\n </Typography>\n </Box>\n )\n}\n\nexport default DropZoneBox;\n","import React from 'react';\nimport { DropzoneState } from 'react-dropzone';\nimport { CloudUploadIcon } from '@/icons/MuiIcon';\nimport { Button } from '@/ele/Button'; \n\nconst DropZoneButton: React.FC<{\n getRootProps: DropzoneState[\"getRootProps\"];\n getInputProps: DropzoneState[\"getInputProps\"];\n label?: string;\n error?: boolean;\n}> = ({\n getRootProps, getInputProps, \n label=\"Upload file\",\n error=false\n}) => {\n return (\n <Button \n variant=\"outlined\"\n startIcon={<CloudUploadIcon/>} \n color={error ? \"error\" : \"primary\"}\n {...getRootProps()}\n >\n {label}\n <input {...getInputProps()}/>\n </Button>\n )\n}\n\nexport default DropZoneButton;\n","import React, { useCallback, useEffect, useRef } from 'react';\nimport { useDropzone, FileWithPath, DropzoneOptions } from 'react-dropzone';\nimport { Box, Stack } from '@/ele/Box';\nimport { fileUploaderRootSx } from './theme';\nimport { mergeSx } from '@/_utils/_func';\nimport PreviewableFile, { displayFileSize } from '@/_utils/classes/PreviewableFile';\nimport DisplayFile from '@/compound/DisplayFile';\nimport DropZoneBox from './DropZoneBox';\nimport DropZoneButton from './DropZoneButton';\n\nexport type DropzoneType = \"box\" | \"button\";\n\nexport interface ReactDropzoneProps {\n filesProps: [PreviewableFile[], React.Dispatch<React.SetStateAction<PreviewableFile[]>>];\n accept?: DropzoneOptions['accept'];\n maxFiles?: number;\n error?: boolean;\n dropzoneType?: DropzoneType;\n label?: string;\n}\n\nconst ReactDropzone: React.FC<ReactDropzoneProps> = ({\n filesProps,\n accept,\n maxFiles = 0, // 0 means unlimited\n error = false,\n dropzoneType = 'box',\n label = 'Upload File'\n}) => {\n const [files, setFiles] = filesProps;\n\n // Track all active blob URLs so the unmount cleanup can revoke them\n // even if the user never called handleDelete.\n const blobRegistryRef = useRef<Set<string>>(new Set());\n\n const onDrop = useCallback((acceptedFiles: FileWithPath[]) => {\n const newFiles = acceptedFiles.map(file => {\n const blobUrl = URL.createObjectURL(file);\n blobRegistryRef.current.add(blobUrl);\n return new PreviewableFile({\n path: file.path,\n blobUrl,\n filename: file.name,\n mimeType: file.type,\n size: file.size,\n displaySize: displayFileSize(file.size),\n fileType: file.type.startsWith('image/') ? 'image'\n : file.type.startsWith('application/json') ? 'json' : 'other'\n });\n });\n\n setFiles(prev => [...prev, ...newFiles]);\n }, [setFiles]);\n\n // hide dropzone UI when reached limit (already handled) — add explicit guard in render\n const isLimitReached = maxFiles > 0 && files.length >= maxFiles;\n\n const { getRootProps, getInputProps } = useDropzone({\n onDrop,\n accept,\n maxFiles: maxFiles > 0 ? (maxFiles - files.length) : undefined,\n disabled: isLimitReached,\n });\n\n const handleDelete = (fileToDelete: PreviewableFile) => {\n setFiles(prev => prev.filter(f => f !== fileToDelete));\n if (fileToDelete.blobUrl) {\n URL.revokeObjectURL(fileToDelete.blobUrl);\n blobRegistryRef.current.delete(fileToDelete.blobUrl);\n }\n };\n\n useEffect(() => {\n const blobRegistry = blobRegistryRef.current;\n return () => {\n blobRegistry.forEach(url => URL.revokeObjectURL(url));\n blobRegistry.clear();\n };\n }, []); // Cleanup remaining blob URLs on unmount\n\n return (\n <Box sx={mergeSx({ maxWidth: '100%' }, fileUploaderRootSx)}>\n {!isLimitReached && (\n <Box component=\"section\">\n {dropzoneType === 'box' ? (\n <DropZoneBox getRootProps={getRootProps} getInputProps={getInputProps} error={error}/>\n ) : (\n <DropZoneButton getRootProps={getRootProps} getInputProps={getInputProps} label={label} error={error}/>\n )}\n </Box>\n )}\n\n {files.length > 0 && (\n <Stack spacing={1} sx={{ mt: 0 }}>\n {files.map((file) => (\n <DisplayFile \n key={file.blobUrl || file.filename || file.path} \n file={file} \n onDelete={handleDelete}\n />\n ))}\n </Stack>\n )}\n </Box>\n );\n};\n\nexport default ReactDropzone;\n","export { default as ReactDropzone, default } from './ReactDropzone';\nexport * from './ReactDropzone';\n","export * from './src';\nexport { default } from './src';\n","import React from 'react'\nimport { Box } from '@/ele/Box'\nimport { ReactDropzone } from '@/compound/FileUploader'\nimport PreviewableFile from '@/_utils/classes/PreviewableFile'\nimport type { DropzoneOptions } from 'react-dropzone'\n\ninterface Props {\n accept?: string | DropzoneOptions['accept'];\n buttonLabel?: string;\n /** `null` means the dropzone was cleared */\n onPick?: (file: File | null) => void;\n}\n\nexport default function CropperFileSelector({ accept = 'image/*', buttonLabel = 'Select Image', onPick }: Props) {\n const [files, setFiles] = React.useState<PreviewableFile[]>([])\n React.useEffect(() => {\n // debug render lifecycle for troubleshooting recursive render\n // console.debug('[CropperFileSelector] render — files.length=', files.length);\n }, [files]);\n\n const lastForwardedRef = React.useRef<string | null>(null);\n\n React.useEffect(() => {\n // when a file is removed from the dropzone, notify parent with null\n if (!files.length) {\n if (lastForwardedRef.current) {\n lastForwardedRef.current = null;\n onPick?.(null);\n }\n return;\n }\n\n const pf = files[0];\n if (!pf.blobUrl) return;\n\n // avoid forwarding the same file repeatedly (prevents recursion/loops)\n if (lastForwardedRef.current === pf.blobUrl) {\n return;\n }\n\n let cancelled = false;\n (async () => {\n try {\n const res = await fetch(pf.blobUrl);\n const blob = await res.blob();\n const file = new File([blob], pf.filename || 'file', { type: pf.mimeType || undefined });\n if (!cancelled) {\n lastForwardedRef.current = pf.blobUrl;\n onPick?.(file);\n }\n } catch {\n // silently ignore fetch/conversion errors — leave dropzone in place\n }\n })();\n\n return () => { cancelled = true };\n }, [files, onPick]);\n\n const acceptProp: DropzoneOptions['accept'] | undefined = typeof accept === 'string' ? { [accept]: [] } : accept\n\n return (\n <Box sx={{ display: 'flex', alignItems: 'center', pt:0, width: '100%', justifyContent: 'center' }}>\n <ReactDropzone filesProps={[files, setFiles]} accept={acceptProp} maxFiles={1} dropzoneType=\"button\" label={buttonLabel} />\n </Box>\n )\n}\n","import React from 'react';\nimport {\n centerCrop,\n convertToPixelCrop,\n makeAspectCrop,\n type Crop,\n type PixelCrop,\n} from 'react-image-crop';\n\ninterface UseCropperStateParams {\n blobUrl: string;\n onSave: (url: string) => void | Promise<void>;\n setImgNull: () => void;\n circularCrop: boolean;\n defaultRatio?: number;\n cropConfig?: Partial<Crop>;\n}\n\nfunction toRad(degrees: number) {\n return (degrees * Math.PI) / 180;\n}\n\nfunction defaultCrop(): Crop {\n return {\n unit: '%',\n x: 10,\n y: 10,\n width: 80,\n height: 80,\n };\n}\n\nfunction makeCenteredAspectCrop(mediaWidth: number, mediaHeight: number, aspect: number): Crop {\n return centerCrop(\n makeAspectCrop(\n {\n unit: '%',\n width: 90,\n },\n aspect,\n mediaWidth,\n mediaHeight,\n ),\n mediaWidth,\n mediaHeight,\n );\n}\n\nfunction initialCrop(\n mediaWidth: number,\n mediaHeight: number,\n defaultRatio: number | undefined,\n cropConfig: Partial<Crop> | undefined,\n): Crop {\n if (defaultRatio) {\n return makeCenteredAspectCrop(mediaWidth, mediaHeight, defaultRatio);\n }\n return { ...defaultCrop(), ...cropConfig };\n}\n\nfunction drawPreviewToCanvas(\n image: HTMLImageElement,\n canvas: HTMLCanvasElement,\n crop: PixelCrop,\n scale: number,\n rotate: number,\n circularCrop?: boolean,\n) {\n const context = canvas.getContext('2d');\n if (!context) return;\n if (!crop.width || !crop.height) return;\n\n const scaleX = image.naturalWidth / image.width;\n const scaleY = image.naturalHeight / image.height;\n const pixelRatio = window.devicePixelRatio || 1;\n\n canvas.width = Math.floor(crop.width * scaleX * pixelRatio);\n canvas.height = Math.floor(crop.height * scaleY * pixelRatio);\n\n context.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n context.imageSmoothingQuality = 'high';\n context.clearRect(0, 0, canvas.width, canvas.height);\n\n const cropX = crop.x * scaleX;\n const cropY = crop.y * scaleY;\n const rotateRads = toRad(rotate);\n const centerX = image.naturalWidth / 2;\n const centerY = image.naturalHeight / 2;\n\n context.save();\n if (circularCrop) {\n const width = crop.width * scaleX;\n const height = crop.height * scaleY;\n const radius = Math.min(width, height) / 2;\n context.beginPath();\n context.arc(width / 2, height / 2, radius, 0, Math.PI * 2);\n context.closePath();\n context.clip();\n }\n\n context.translate(-cropX, -cropY);\n context.translate(centerX, centerY);\n context.rotate(rotateRads);\n context.scale(scale, scale);\n context.translate(-centerX, -centerY);\n\n context.drawImage(\n image,\n 0,\n 0,\n image.naturalWidth,\n image.naturalHeight,\n 0,\n 0,\n image.naturalWidth,\n image.naturalHeight,\n );\n context.restore();\n}\n\nexport function useCropperState({\n blobUrl,\n onSave,\n setImgNull,\n circularCrop,\n defaultRatio,\n cropConfig,\n}: UseCropperStateParams) {\n const imageRef = React.useRef<HTMLImageElement | null>(null);\n const canvasRef = React.useRef<HTMLCanvasElement | null>(null);\n const cropConfigRef = React.useRef(cropConfig);\n cropConfigRef.current = cropConfig;\n const scaleRef = React.useRef(1);\n const rotateRef = React.useRef(0);\n\n const [activeBlobUrl, setActiveBlobUrl] = React.useState(blobUrl);\n const [crop, setCrop] = React.useState<Crop>({ ...defaultCrop(), ...cropConfig });\n const [completedCrop, setCompletedCrop] = React.useState<PixelCrop>();\n const [scale, setScale] = React.useState(1);\n const [rotate, setRotate] = React.useState(0);\n scaleRef.current = scale;\n rotateRef.current = rotate;\n\n const applyCropFromImage = React.useCallback((image: HTMLImageElement) => {\n const { width, height } = image;\n if (!width || !height) return;\n\n const nextCrop = initialCrop(width, height, defaultRatio, cropConfigRef.current);\n const pixelCrop = convertToPixelCrop(nextCrop, width, height);\n if (!pixelCrop.width || !pixelCrop.height) return;\n\n setCrop(nextCrop);\n setCompletedCrop(pixelCrop);\n\n const canvas = canvasRef.current;\n if (canvas) {\n drawPreviewToCanvas(\n image,\n canvas,\n pixelCrop,\n scaleRef.current,\n rotateRef.current,\n circularCrop,\n );\n }\n }, [circularCrop, defaultRatio]);\n\n React.useEffect(() => {\n setActiveBlobUrl(blobUrl);\n }, [blobUrl]);\n\n React.useLayoutEffect(() => {\n if (!activeBlobUrl) {\n setCrop({ ...defaultCrop(), ...cropConfigRef.current });\n setCompletedCrop(undefined);\n setScale(1);\n setRotate(0);\n return;\n }\n\n setScale(1);\n setRotate(0);\n\n const tryApply = () => {\n const image = imageRef.current;\n if (image?.complete && image.width > 0 && image.height > 0) {\n applyCropFromImage(image);\n return true;\n }\n return false;\n };\n\n if (tryApply()) return;\n\n const frame = requestAnimationFrame(() => {\n tryApply();\n });\n return () => cancelAnimationFrame(frame);\n }, [activeBlobUrl, applyCropFromImage]);\n\n React.useEffect(() => {\n if (!completedCrop || !imageRef.current || !canvasRef.current) return;\n drawPreviewToCanvas(\n imageRef.current,\n canvasRef.current,\n completedCrop,\n scale,\n rotate,\n circularCrop,\n );\n }, [completedCrop, scale, rotate, circularCrop]);\n\n const onImageLoad = (e: React.SyntheticEvent<HTMLImageElement>) => {\n applyCropFromImage(e.currentTarget);\n };\n\n const handleCompletedCrop = (nextCrop: PixelCrop) => {\n if (!nextCrop.width || !nextCrop.height) return;\n setCompletedCrop(nextCrop);\n };\n\n const handleSave = async () => {\n if (!completedCrop || !imageRef.current) return;\n\n const previewCanvas = document.createElement('canvas');\n drawPreviewToCanvas(\n imageRef.current,\n previewCanvas,\n completedCrop,\n scale,\n rotate,\n circularCrop,\n );\n\n const blob = await new Promise<Blob | null>((resolve) => {\n previewCanvas.toBlob((nextBlob) => resolve(nextBlob), 'image/png');\n });\n\n if (!blob) return;\n const resultUrl = URL.createObjectURL(blob);\n await onSave(resultUrl);\n };\n\n const handleClear = () => {\n setActiveBlobUrl('');\n setImgNull();\n imageRef.current = null;\n const canvas = canvasRef.current;\n if (canvas) {\n const context = canvas.getContext('2d');\n if (context) {\n context.clearRect(0, 0, canvas.width, canvas.height);\n }\n }\n setCrop({ ...defaultCrop(), ...cropConfigRef.current });\n setScale(1);\n setRotate(0);\n setCompletedCrop(undefined);\n };\n\n const handleResetTransforms = () => {\n setScale(1);\n setRotate(0);\n };\n\n return {\n imageRef,\n canvasRef,\n activeBlobUrl,\n crop,\n setCrop,\n completedCrop,\n setCompletedCrop: handleCompletedCrop,\n scale,\n setScale,\n rotate,\n setRotate,\n onImageLoad,\n handleSave,\n handleClear,\n handleResetTransforms,\n };\n}\n","import 'react-image-crop/dist/ReactCrop.css';\nimport CropperLayout from './layout/CropperLayout';\nimport CropperSourceSection from './sections/CropperSourceSection';\nimport CropperControlsSection from './sections/CropperControlsSection';\nimport CropperActionSection from './sections/CropperActionSection';\nimport CropperFileSelector from './sections/CropperFileSelector';\nimport { useCropperState } from './hooks/useCropperState';\nimport type { CropperProps } from './types';\n\nconst Cropper: React.FC<CropperProps> = ({\n blobUrl,\n onSave,\n setImgNull,\n onClear, // optional parent callback when the image is removed\n circularCrop = false,\n defaultRatio,\n resizeCropEnabled = true,\n cropConfig,\n PreviewRenderer,\n footerExtra,\n showFileSelector = false,\n fileSelectorAccept = 'image/*',\n fileSelectorButtonLabel = 'Select Image',\n onFileSelect,\n}) => {\n const {\n imageRef,\n canvasRef,\n activeBlobUrl,\n crop,\n setCrop,\n completedCrop,\n setCompletedCrop,\n scale,\n setScale,\n rotate,\n setRotate,\n onImageLoad,\n handleSave,\n handleClear,\n handleResetTransforms,\n } = useCropperState({\n blobUrl,\n onSave,\n setImgNull,\n circularCrop,\n defaultRatio,\n cropConfig,\n });\n\n return (\n <CropperLayout\n left={(\n <CropperSourceSection\n activeBlobUrl={activeBlobUrl}\n crop={crop}\n setCrop={setCrop}\n setCompletedCrop={setCompletedCrop}\n circularCrop={circularCrop}\n defaultRatio={defaultRatio}\n resizeCropEnabled={resizeCropEnabled}\n rotate={rotate}\n scale={scale}\n imageRef={imageRef}\n onImageLoad={onImageLoad}\n />\n )}\n right={(\n <CropperControlsSection\n PreviewRenderer={PreviewRenderer}\n canvasRef={canvasRef}\n rotate={rotate}\n setRotate={setRotate}\n scale={scale}\n setScale={setScale}\n />\n )}\n leftFooter={(\n <>\n {footerExtra}\n {showFileSelector && (\n <CropperFileSelector\n accept={fileSelectorAccept}\n buttonLabel={fileSelectorButtonLabel}\n onPick={(f) => onFileSelect?.(f)}\n />\n )}\n </>\n )}\n footer={(\n <CropperActionSection\n onSave={handleSave}\n onResetTransforms={handleResetTransforms}\n onClear={() => {\n // clear internal cropper state and also notify parent if it wants to persist the removal\n handleClear();\n onClear?.();\n }}\n saveDisabled={!completedCrop || !activeBlobUrl}\n />\n )}\n />\n );\n};\n\nexport default Cropper;\nexport type { CropperProps };\n","export { default as Cropper } from './Cropper'\nexport type { CropperProps } from './Cropper'\n","export * from './MuiImageList'\nexport * from './Cropper'\n","export * from './src'\n","import type { MuiComponentTheme } from '@/_utils/_types'\n\nexport const textFieldTheme = {\n defaultProps: {\n size: 'small',\n },\n\n styleOverrides: {\n root: {\n \"& fieldset\": {\n borderColor: 'var(--mui-palette-text-secondary)',\n \n },\n \"& .MuiOutlinedInput-root.Mui-focused:not(.Mui-error) fieldset\": {\n borderColor: 'var(--mui-palette-text-secondary)',\n },\n },\n }\n\n} as const satisfies MuiComponentTheme<\"MuiTextField\">\n\nexport const inputBaseTheme = {\n styleOverrides: {\n root: {\n \"&.MuiInputBase-root::after\": {\n borderColor: 'var(--mui-palette-text-secondary)',\n },\n \"&.MuiInputBase-root::before\": {\n borderColor: 'var(--mui-palette-text-secondary)',\n },\n\n },\n\n },\n} as const satisfies MuiComponentTheme<\"MuiInputBase\">","export {default as TextField} from '@mui/material/TextField'\nexport * from './theme'","/**\n * Root-level CSS variable aliases for TelPhoneInput.\n * StyledWrapper spreads these; palette refs are declared only here.\n */\nexport const telPhoneInputVars = {\n '--tel-phone-input-border-color': 'var(--mui-palette-border-1)',\n '--tel-phone-input-hover-border-color': 'var(--mui-palette-border-hover-1)',\n '--tel-phone-input-border-radius': 'var(--mui-shape-borderRadius)',\n} as const\n\nexport const telPhoneInputErrorVars = {\n '--tel-phone-input-border-color': 'var(--mui-palette-error-main)',\n '--tel-phone-input-hover-border-color': 'var(--mui-palette-error-main)',\n} as const\n","'use client'\n\nimport Menu from '@mui/material/Menu'\nimport { KeyboardArrowDownIcon as KeyboardArrowDown } from '@/icons/MuiIcon'\nimport React, { memo, useCallback, useMemo, useState } from 'react'\nimport { Box } from '@/ele/Box'\nimport { getCountryCallingCode } from 'react-phone-number-input'\nimport type { CountryCode } from 'libphonenumber-js'\n\nexport type CountrySelectOption = {\n value?: string;\n label: string;\n divider?: boolean;\n}\n\nexport type MuiCountrySelectProps = {\n name?: string;\n value?: string;\n options: CountrySelectOption[];\n onChange: (value?: string) => void;\n disabled?: boolean;\n readOnly?: boolean;\n iconComponent?: React.ElementType;\n 'aria-label'?: string;\n onFocus?: (event: React.FocusEvent<HTMLElement>) => void;\n onBlur?: (event: React.FocusEvent<HTMLElement>) => void;\n tabIndex?: number;\n}\n\nconst ROW_HEIGHT = 36\nconst LIST_HEIGHT = 280\nconst OVERSCAN = 4\n\nconst callingCodeCache = new Map<string, string>()\n\nfunction callingCodeLabel(code?: string) {\n if (!code) return ''\n const cached = callingCodeCache.get(code)\n if (cached !== undefined) return cached\n let next = ''\n try {\n next = `+${getCountryCallingCode(code as CountryCode)}`\n } catch {\n next = ''\n }\n callingCodeCache.set(code, next)\n return next\n}\n\nconst triggerSx = {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '4px',\n minWidth: 40,\n px: 0.75,\n py: 0.5,\n border: 'none',\n borderRadius: 1,\n cursor: 'pointer',\n lineHeight: 0,\n color: 'inherit',\n backgroundColor: 'var(--mui-palette-primary-background, transparent)',\n '&:hover': {\n backgroundColor: 'color-mix(in lab, var(--mui-palette-text-primary), transparent 92%)',\n },\n '&:disabled': {\n cursor: 'default',\n opacity: 0.5,\n },\n} as const\n\nconst rowSx = {\n position: 'absolute',\n left: 0,\n right: 0,\n display: 'flex',\n alignItems: 'center',\n gap: 1,\n width: '100%',\n px: 1.5,\n border: 'none',\n background: 'none',\n color: 'inherit',\n cursor: 'pointer',\n textAlign: 'left',\n '&:hover': {\n backgroundColor: 'color-mix(in lab, var(--mui-palette-text-primary), transparent 92%)',\n },\n '&[aria-selected=\"true\"]': {\n backgroundColor: 'color-mix(in lab, var(--mui-palette-primary-main, #1976d2), transparent 88%)',\n },\n '& .PhoneInputCountryIcon': {\n flexShrink: 0,\n overflow: 'hidden',\n },\n} as const\n\nconst CountryRow = memo(function CountryRow({\n option,\n selected,\n Icon,\n onSelect,\n offset,\n}: {\n option: CountrySelectOption;\n selected: boolean;\n Icon?: React.ElementType;\n onSelect: (value?: string) => void;\n offset: number;\n}) {\n return (\n <Box\n component=\"button\"\n type=\"button\"\n role=\"option\"\n aria-selected={selected}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => onSelect(option.value)}\n sx={rowSx}\n style={{ top: offset, height: ROW_HEIGHT }}\n >\n {Icon ? (\n <Icon\n aria-hidden\n country={option.value}\n label={option.label}\n className=\"PhoneInputCountryIcon\"\n />\n ) : null}\n <Box component=\"span\" sx={{ flex: 1, minWidth: 0, overflow: 'hidden', textOverflow: 'ellipsis', whiteSpace: 'nowrap' }}>\n {option.label}\n </Box>\n <Box component=\"span\" sx={{ opacity: 0.7, fontSize: '0.75rem' }}>\n {callingCodeLabel(option.value)}\n </Box>\n </Box>\n )\n})\n\nfunction VirtualCountryList({\n options,\n value,\n Icon,\n onSelect,\n}: {\n options: CountrySelectOption[];\n value?: string;\n Icon?: React.ElementType;\n onSelect: (value?: string) => void;\n}) {\n const rows = useMemo(\n () => options.filter((option) => !option.divider),\n [options],\n )\n const [scrollTop, setScrollTop] = useState(0)\n const start = Math.max(0, Math.floor(scrollTop / ROW_HEIGHT) - OVERSCAN)\n const visibleCount = Math.ceil(LIST_HEIGHT / ROW_HEIGHT) + OVERSCAN * 2\n const end = Math.min(rows.length, start + visibleCount)\n const height = Math.min(LIST_HEIGHT, rows.length * ROW_HEIGHT)\n\n return (\n <Box\n role=\"listbox\"\n onScroll={(event) => setScrollTop(event.currentTarget.scrollTop)}\n sx={{ height, width: 320, overflow: 'auto' }}\n >\n <Box sx={{ height: rows.length * ROW_HEIGHT, position: 'relative' }}>\n {rows.slice(start, end).map((option, index) => (\n <CountryRow\n key={option.value ?? option.label}\n option={option}\n selected={option.value === value}\n Icon={Icon}\n onSelect={onSelect}\n offset={(start + index) * ROW_HEIGHT}\n />\n ))}\n </Box>\n </Box>\n )\n}\n\nfunction countryOptionsAreEqual(prev: CountrySelectOption[], next: CountrySelectOption[]) {\n if (prev === next) return true\n if (prev.length !== next.length) return false\n for (let i = 0; i < prev.length; i += 1) {\n const a = prev[i]\n const b = next[i]\n if (a.value !== b.value || a.label !== b.label || Boolean(a.divider) !== Boolean(b.divider)) {\n return false\n }\n }\n return true\n}\n\nfunction countrySelectPropsAreEqual(prev: MuiCountrySelectProps, next: MuiCountrySelectProps) {\n return (\n prev.value === next.value &&\n countryOptionsAreEqual(prev.options, next.options) &&\n prev.onChange === next.onChange &&\n prev.onFocus === next.onFocus &&\n prev.onBlur === next.onBlur &&\n prev.disabled === next.disabled &&\n prev.readOnly === next.readOnly &&\n prev.iconComponent === next.iconComponent &&\n prev.name === next.name &&\n prev['aria-label'] === next['aria-label'] &&\n prev.tabIndex === next.tabIndex\n )\n}\n\nexport const MuiCountrySelect = memo(function MuiCountrySelect({\n name,\n value,\n options,\n onChange,\n disabled,\n readOnly,\n iconComponent: Icon,\n 'aria-label': ariaLabel,\n onFocus,\n onBlur,\n tabIndex,\n}: MuiCountrySelectProps) {\n const [anchorEl, setAnchorEl] = useState<HTMLButtonElement | null>(null)\n const open = Boolean(anchorEl)\n const isDisabled = Boolean(disabled || readOnly)\n\n const selectedOption = useMemo(\n () => options.find((option) => !option.divider && option.value === value),\n [options, value],\n )\n\n const handleOpen = useCallback((event: React.MouseEvent<HTMLButtonElement>) => {\n if (isDisabled) return\n setAnchorEl(event.currentTarget)\n }, [isDisabled])\n\n const handleClose = useCallback(() => {\n setAnchorEl(null)\n }, [])\n\n const handleSelect = useCallback((next?: string) => {\n onChange(next)\n setAnchorEl(null)\n }, [onChange])\n\n return (\n <>\n <Box\n component=\"button\"\n type=\"button\"\n name={name}\n tabIndex={tabIndex}\n disabled={isDisabled}\n aria-label={ariaLabel}\n aria-haspopup=\"listbox\"\n aria-expanded={open ? 'true' : 'false'}\n onClick={handleOpen}\n onFocus={onFocus}\n onBlur={onBlur}\n sx={triggerSx}\n >\n {Icon && selectedOption ? (\n <Icon\n aria-hidden\n country={value}\n label={selectedOption.label}\n className=\"PhoneInputCountryIcon\"\n />\n ) : null}\n <KeyboardArrowDown fontSize=\"small\" />\n </Box>\n\n {open ? (\n <Menu\n open\n anchorEl={anchorEl}\n onClose={handleClose}\n transitionDuration={0}\n disableAutoFocusItem\n anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }}\n transformOrigin={{ vertical: 'top', horizontal: 'left' }}\n slotProps={{\n list: {\n 'aria-label': ariaLabel,\n sx: { p: 0 },\n },\n }}\n >\n <VirtualCountryList\n options={options}\n value={value}\n Icon={Icon}\n onSelect={handleSelect}\n />\n </Menu>\n ) : null}\n </>\n )\n}, countrySelectPropsAreEqual)\n","'use client'\n\nimport 'react-phone-number-input/style.css'\nimport PhoneInput from 'react-phone-number-input'\nimport React, { forwardRef, memo, useMemo } from 'react'\nimport { TextField as MuiTextField } from '../TextField'\nimport { Box } from '@/ele/Box'\nimport { styled } from '@mui/material/styles'\n\nimport { telPhoneInputVars, telPhoneInputErrorVars } from './theme'\nimport { MuiCountrySelect, type MuiCountrySelectProps } from './CountrySelect'\n\nconst stackPhoneSlotProps = {\n input: {\n sx: {\n border: 'none',\n \"&::before, &::after\": { borderBottom: 'none' },\n \"&:hover:not(.Mui-disabled, .Mui-error):before\": { borderBottom: 'none' },\n '& .MuiInputBase-input': { padding: '8px 0' },\n },\n },\n} as const\n\nconst StackPhoneNumberInput = memo(forwardRef<HTMLInputElement, React.ComponentProps<typeof MuiTextField>>(\n (p, ref) => (\n <MuiTextField\n {...p}\n inputRef={ref}\n variant='standard'\n slotProps={stackPhoneSlotProps}\n />\n ),\n))\n\nexport default function TelPhoneInput(p: React.ComponentProps<typeof PhoneInput> & {\n error?: boolean;\n iconComponent?: React.ElementType;\n}) {\n const { error = false, countrySelectComponent, iconComponent, ...rest } = p;\n\n const CountryComponent = useMemo(() => {\n if (countrySelectComponent) {\n return countrySelectComponent\n }\n\n if (!iconComponent) {\n return MuiCountrySelect\n }\n\n return function CountrySelectWithIcon(props: MuiCountrySelectProps) {\n return <MuiCountrySelect {...props} iconComponent={iconComponent} />\n }\n }, [countrySelectComponent, iconComponent])\n\n return (\n <StyledWrapper className={error ? 'mui-error' : ''}>\n <PhoneInput\n {...rest}\n international\n countrySelectComponent={CountryComponent}\n inputComponent={rest.inputComponent ?? StackPhoneNumberInput}\n />\n </StyledWrapper>\n )\n}\n\nconst StyledWrapper = styled(Box, {\n shouldForwardProp: (prop) => prop !== 'error',\n})<{ error?: boolean }>({\n ...telPhoneInputVars,\n \"&.mui-error\": telPhoneInputErrorVars,\n \n border: 'solid 1px var(--tel-phone-input-border-color)',\n borderRadius: 'var(--tel-phone-input-border-radius)',\n \"&:hover\": {\n borderColor: 'var(--tel-phone-input-hover-border-color)',\n },\n})\n","export {default as TelPhoneInput} from './TelPhoneInput'","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","export const COMPONENTs = {\n modal:{\n zIndex: 1300,\n }\n}\n","export interface DoodlePatternPalette {\n primary: string;\n primaryOpacity: number;\n primaryWidth: number;\n accent: string;\n accentOpacity: number;\n accentWidth: number;\n}\n\nexport const DOODLE_PATTERN_PALETTE_LIGHT: DoodlePatternPalette = {\n primary: \"#5f516f\",\n primaryOpacity: 0.42,\n primaryWidth: 1.55,\n accent: \"#b84f86\",\n accentOpacity: 0.34,\n accentWidth: 1.3,\n};\n\nexport const DOODLE_PATTERN_PALETTE_DARK: DoodlePatternPalette = {\n primary: \"#e5f7ff\",\n primaryOpacity: 0.96,\n primaryWidth: 1.85,\n accent: \"#f0d7ff\",\n accentOpacity: 0.82,\n accentWidth: 1.55,\n};\n\nexport const DOODLE_PATTERN_STRUCTURE = {\n primaryWidth: DOODLE_PATTERN_PALETTE_LIGHT.primaryWidth,\n accentWidth: DOODLE_PATTERN_PALETTE_LIGHT.accentWidth,\n} as const;\n\nconst DOODLE_PATTERN_MASK_COLOR = \"#000\";\n\nexport interface DoodlePatternPlacement {\n x: number;\n y: number;\n icon: DoodlePatternIconName;\n rotate?: number;\n scale?: number;\n priority?: number;\n}\n\nexport const DOODLE_PATTERN_TILE_WIDTH = 520;\nexport const DOODLE_PATTERN_TILE_HEIGHT = 250;\nexport const DOODLE_PATTERN_RENDER_SCALE = 3;\n\nconst DOODLE_PATTERN_ICON_SIZE = 44;\nconst DOODLE_PATTERN_ICON_MUTATIONS = [\n { rotate: 0, scale: 1 },\n { rotate: 40, scale: 0.76 },\n { rotate: -180, scale: 1.18 },\n { rotate: -54, scale: 0.88 },\n { rotate: 132, scale: 0.64 },\n { rotate: -118, scale: 1.08 },\n { rotate: 74, scale: 0.92 },\n { rotate: -32, scale: 1.28 },\n] as const;\nexport const DOODLE_PATTERN_ICON_VIEW_BOX = \"0 0 44 44\";\n\nexport const DOODLE_PATTERN_ICON_SVGS = {\n chat:\n \"<path d='M8 8h26a7 7 0 0 1 7 7v13a7 7 0 0 1-7 7h-8l-8 7v-7H8a7 7 0 0 1-7-7V15a7 7 0 0 1 7-7Z'/><path d='M11 19h18M11 27h11'/>\",\n agent:\n \"<path d='M8 11h26a8 8 0 0 1 8 8v12a8 8 0 0 1-8 8H8a8 8 0 0 1-8-8V19a8 8 0 0 1 8-8Z'/><path d='M14 8V4M30 8V4'/><path d='M11 30h20'/><circle cx='15' cy='23' r='2.5'/><circle cx='27' cy='23' r='2.5'/>\",\n cursor:\n \"<path d='M8 5l25 13-17 6-7 17L8 5Z'/><path d='M18 25l12 12'/>\",\n model:\n \"<path d='M12 10h20a6 6 0 0 1 6 6v14a6 6 0 0 1-6 6H12a6 6 0 0 1-6-6V16a6 6 0 0 1 6-6Z'/><circle cx='16' cy='20' r='2.5'/><circle cx='28' cy='20' r='2.5'/><circle cx='22' cy='29' r='2.5'/><path d='M18 21l3 6M26 21l-3 6'/>\",\n orchestra:\n \"<path d='M22 4l7 4v8l-7 4-7-4V8ZM11 24l7 4v8l-7 4-7-4v-8ZM33 24l7 4v8l-7 4-7-4v-8Z'/><path d='M19 21l-3 5M25 21l3 5M20 32h4'/>\",\n doc:\n \"<path d='M9 5h18l8 8v23H9Z'/><path d='M27 5v9h8M15 21h14M15 29h10'/>\",\n grid:\n \"<path d='M7 7h30v30H7ZM7 17h30M7 27h30M17 7v30M27 7v30'/>\",\n brain:\n \"<path d='M14 9c-6 0-10 4-10 10 0 3 1 5 3 7-1 5 3 9 8 9 3 0 5-1 7-3 2 2 4 3 7 3 5 0 9-4 8-9 2-2 3-4 3-7 0-6-4-10-10-10-3 0-6 1-8 3-2-2-5-3-8-3Z'/><path d='M22 12v20M12 17c4 0 7 2 10 6M32 17c-4 0-7 2-10 6M12 27c4-1 7 0 10 3M32 27c-4-1-7 0-10 3'/>\",\n tool:\n \"<path d='M31 6c-4-1-8 0-11 3-2 2-3 5-2 8L6 29l5 5 12-12c3 1 6 0 8-2 3-3 4-7 3-11l-6 6-4-4Z'/>\",\n code: \"<path d='M15 13l-7 7 7 7M27 13l7 7-7 7M23 10l-5 20'/>\",\n terminal:\n \"<path d='M5 8h32v25H5Z'/><path d='M11 17l6 4-6 5M21 27h10'/>\",\n laptop: \"<path d='M8 9h28v20H8Z'/><path d='M4 35h36M15 29h14'/>\",\n smartphone:\n \"<path d='M14 4h16a4 4 0 0 1 4 4v28a4 4 0 0 1-4 4H14a4 4 0 0 1-4-4V8a4 4 0 0 1 4-4Z'/><path d='M18 9h8M14 32h16'/><circle cx='22' cy='36' r='1.5'/>\",\n battery:\n \"<path d='M6 12h30v20H6Z'/><path d='M36 18h5v8h-5'/><path d='M12 22l12-6-4 5h12l-13 7 4-6Z'/>\",\n sigma: \"<path d='M31 8H10l10 12-10 12h22'/>\",\n function:\n \"<path d='M29 8c-8-2-12 2-13 10l-3 17M8 19h19M26 25l6 7M32 25l-6 7'/>\",\n gear:\n \"<g transform='translate(2 2) scale(1.6667)'><path d='M10.3 4.3c.4-1.7 3-1.7 3.4 0 .3 1.1 1.6 1.7 2.6 1.1 1.5-.9 3.3.8 2.4 2.4-.6 1 0 2.3 1.1 2.6 1.7.4 1.7 3 0 3.4-1.1.3-1.7 1.6-1.1 2.6.9 1.5-.8 3.3-2.4 2.4-1-.6-2.3 0-2.6 1.1-.4 1.7-3 1.7-3.4 0-.3-1.1-1.6-1.7-2.6-1.1-1.5.9-3.3-.8-2.4-2.4.6-1 0-2.3-1.1-2.6-1.7-.4-1.7-3 0-3.4 1.1-.3 1.7-1.6 1.1-2.6-.9-1.5.8-3.3 2.4-2.4 1 .6 2.3 0 2.6-1.1Z'/><circle cx='12' cy='12' r='4'/></g>\",\n chip:\n \"<path d='M11 11h22v22H11Z'/><path d='M16 6v5M22 6v5M28 6v5M16 33v5M22 33v5M28 33v5M6 16h5M6 22h5M6 28h5M33 16h5M33 22h5M33 28h5'/>\",\n logicGate:\n \"<path d='M9 12h12c8 0 14 4 14 10s-6 10-14 10H9Z'/><path d='M3 17h6M3 27h6M35 22h6'/><circle cx='15' cy='17' r='1.5'/><circle cx='15' cy='27' r='1.5'/>\",\n ram:\n \"<path d='M6 12h32v20H6Z'/><path d='M11 17h5v8h-5ZM20 17h5v8h-5ZM29 17h5v8h-5Z'/><path d='M10 8v4M16 8v4M22 8v4M28 8v4M34 8v4M10 32v4M16 32v4M22 32v4M28 32v4M34 32v4'/><path d='M17 32v3h10v-3'/>\",\n opticalFiber:\n \"<path d='M15 38V24h14v14'/><path d='M18 24C11 19 8 14 8 8M21 24C18 17 18 12 18 7M24 24C26 17 26 12 26 7M27 24C34 19 36 14 36 8'/><circle cx='8' cy='8' r='3'/><circle cx='18' cy='7' r='3'/><circle cx='26' cy='7' r='3'/><circle cx='36' cy='8' r='3'/><path d='M12 34h20'/>\",\n database:\n \"<ellipse cx='22' cy='11' rx='15' ry='6'/><path d='M7 11v20c0 3 7 6 15 6s15-3 15-6V11M7 21c0 3 7 6 15 6s15-3 15-6'/>\",\n dataTable:\n \"<path d='M7 9h30v26H7Z'/><path d='M7 16h30M17 16v19M27 16v19M12 12h2M18 12h2M24 12h2'/>\",\n dataPipeline:\n \"<path d='M6 12h10v8H6ZM28 12h10v8H28ZM17 26h10v8H17Z'/><path d='M16 16h12M22 20v6'/><circle cx='16' cy='16' r='1.5'/><circle cx='28' cy='16' r='1.5'/><circle cx='22' cy='26' r='1.5'/>\",\n dataFilter:\n \"<path d='M7 9h30L25 23v11l-6 3V23Z'/><path d='M14 14h16'/>\",\n dataSearch:\n \"<circle cx='18' cy='18' r='10'/><path d='M25 25l11 11M14 18h8M14 23h5'/>\",\n dataPieChart:\n \"<circle cx='22' cy='22' r='15'/><path d='M22 7v15h15'/><path d='M22 22L12 34'/>\",\n dataCloud:\n \"<path d='M13 31h20a7 7 0 0 0 1-14 10 10 0 0 0-19-3 8 8 0 0 0-2 17Z'/><path d='M22 18v11M18 25l4 4 4-4'/>\",\n dataBinaryArray:\n \"<path d='M12 8H8v28h4M32 8h4v28h-4'/><text x='22' y='17' text-anchor='middle' fill='none' stroke-width='0.5' font-family='ui-monospace,SFMono-Regular,Menlo,monospace' font-size='8.5' font-weight='300'>101</text><text x='22' y='27' text-anchor='middle' fill='none' stroke-width='0.5' font-family='ui-monospace,SFMono-Regular,Menlo,monospace' font-size='8.5' font-weight='300'>010</text><text x='22' y='37' text-anchor='middle' fill='none' stroke-width='0.5' font-family='ui-monospace,SFMono-Regular,Menlo,monospace' font-size='8.5' font-weight='300'>111</text>\",\n bracket: \"<path d='M17 8h-7v24h7M27 8h7v24h-7'/>\",\n graph:\n \"<path d='M8 33V11M8 33h29M14 27l7-8 6 5 8-12'/><circle cx='21' cy='19' r='2'/><circle cx='27' cy='24' r='2'/><circle cx='35' cy='12' r='2'/>\",\n atom:\n \"<circle cx='22' cy='22' r='3'/><ellipse cx='22' cy='22' rx='16' ry='6'/><ellipse cx='22' cy='22' rx='16' ry='6' transform='rotate(60 22 22)'/><ellipse cx='22' cy='22' rx='16' ry='6' transform='rotate(-60 22 22)'/>\",\n plus: \"<path d='M22 13v18M13 22h18'/>\",\n dot: \"<circle cx='22' cy='22' r='4'/>\",\n wave: \"<path d='M7 22c8-10 17 10 25 0'/>\",\n equal: \"<path d='M12 18h22M12 26h22'/>\",\n pi: \"<path d='M10 14h26M16 14v20M30 14v15c0 4 3 6 7 4'/>\",\n lambda:\n \"<text x='22' y='35' text-anchor='middle' fill='none' stroke-width='0.65' font-family='Georgia,Times New Roman,serif' font-size='34' font-weight='400'>&#955;</text>\",\n functionDirac:\n \"<text x='44' y='26' text-anchor='middle' fill='none' stroke-width='0.48' font-family='ui-sans-serif,system-ui,sans-serif' font-size='9' font-weight='300'>i&#947;<tspan baseline-shift='super' font-size='6'>&#956;</tspan>&#8706;<tspan baseline-shift='sub' font-size='6'>&#956;</tspan>&#968;=m&#968;</text>\",\n functionSoftmax:\n \"<text x='43' y='25' text-anchor='end' fill='none' stroke-width='0.46' font-family='ui-sans-serif,system-ui,sans-serif' font-size='7.5' font-weight='300'>softmax=</text><text x='55' y='18' text-anchor='middle' fill='none' stroke-width='0.48' font-family='ui-sans-serif,system-ui,sans-serif' font-size='9' font-weight='300'>e<tspan baseline-shift='super' font-size='6'>x</tspan></text><path d='M44 23h22'/><text x='55' y='34' text-anchor='middle' fill='none' stroke-width='0.48' font-family='ui-sans-serif,system-ui,sans-serif' font-size='8' font-weight='300'>&#931;e<tspan baseline-shift='super' font-size='5.5'>x</tspan></text>\",\n functionActivation:\n \"<text x='44' y='26' text-anchor='middle' fill='none' stroke-width='0.5' font-family='ui-sans-serif,system-ui,sans-serif' font-size='10' font-weight='300'>y=&#963;(Wx+b)</text>\",\n functionAttention:\n \"<text x='39' y='25' text-anchor='end' fill='none' stroke-width='0.46' font-family='ui-sans-serif,system-ui,sans-serif' font-size='7.5' font-weight='300'>attn=</text><text x='52' y='18' text-anchor='middle' fill='none' stroke-width='0.48' font-family='ui-sans-serif,system-ui,sans-serif' font-size='8.5' font-weight='300'>QK<tspan baseline-shift='super' font-size='5.5'>T</tspan></text><path d='M41 23h22'/><text x='52' y='34' text-anchor='middle' fill='none' stroke-width='0.48' font-family='ui-sans-serif,system-ui,sans-serif' font-size='8' font-weight='300'>&#8730;d</text><text x='66' y='25' text-anchor='start' fill='none' stroke-width='0.46' font-family='ui-sans-serif,system-ui,sans-serif' font-size='8.5' font-weight='300'>V</text>\",\n functionLoss:\n \"<text x='44' y='26' text-anchor='middle' fill='none' stroke-width='0.5' font-family='ui-sans-serif,system-ui,sans-serif' font-size='9' font-weight='300'>L=-&#931;y log(p)</text>\",\n functionSchrodinger:\n \"<text x='6' y='26' text-anchor='start' fill='none' stroke-width='0.44' font-family='ui-sans-serif,system-ui,sans-serif' font-size='8.5' font-weight='300'>i&#8463;</text><text x='30' y='18' text-anchor='middle' fill='none' stroke-width='0.44' font-family='ui-sans-serif,system-ui,sans-serif' font-size='8' font-weight='300'>&#8706;&#968;</text><path d='M20 23h20'/><text x='30' y='35' text-anchor='middle' fill='none' stroke-width='0.44' font-family='ui-sans-serif,system-ui,sans-serif' font-size='8' font-weight='300'>&#8706;t</text><text x='48' y='26' text-anchor='middle' fill='none' stroke-width='0.44' font-family='ui-sans-serif,system-ui,sans-serif' font-size='9' font-weight='300'>=-</text><text x='66' y='18' text-anchor='middle' fill='none' stroke-width='0.44' font-family='ui-sans-serif,system-ui,sans-serif' font-size='8' font-weight='300'>&#8463;<tspan baseline-shift='super' font-size='5.5'>2</tspan></text><path d='M56 23h20'/><text x='66' y='35' text-anchor='middle' fill='none' stroke-width='0.44' font-family='ui-sans-serif,system-ui,sans-serif' font-size='8' font-weight='300'>2m</text><text x='81' y='26' text-anchor='start' fill='none' stroke-width='0.44' font-family='ui-sans-serif,system-ui,sans-serif' font-size='8.5' font-weight='300'>&#8711;<tspan baseline-shift='super' font-size='5.5'>2</tspan>&#968;+V&#968;</text>\",\n functionGraphTanh:\n \"<path d='M7 22h30M22 7v30'/><path d='M8 31c7 0 10-2 14-9 4-7 7-9 14-9'/><path d='M11 31h5M30 13h5'/>\",\n functionGraphGaussian:\n \"<path d='M7 35V9M7 35h30'/><path d='M10 34c5 0 6-20 12-20s7 20 12 20'/><path d='M22 14v21'/>\",\n distributionUniform:\n \"<path d='M7 35V9M7 35h30'/><path d='M11 32V17h22v15'/><path d='M11 17h22'/>\",\n distributionExponential:\n \"<path d='M7 35V9M7 35h30'/><path d='M10 13c7 8 11 14 25 19'/><path d='M10 13h4M31 32h4'/>\",\n distributionBimodal:\n \"<path d='M7 35V9M7 35h30'/><path d='M9 34c4 0 5-13 10-13s5 13 8 13c2 0 3-11 7-11 3 0 3 11 4 11'/>\",\n distributionSkewed:\n \"<path d='M7 35V9M7 35h30'/><path d='M10 34c3 0 4-19 9-19 6 0 7 17 17 17'/><path d='M19 15v19'/>\",\n derivative:\n \"<text x='22' y='17' text-anchor='middle' fill='none' stroke-width='0.55' font-family='ui-sans-serif,system-ui,sans-serif' font-size='12' font-weight='300'>dy</text><path d='M8 23h28'/><text x='22' y='38' text-anchor='middle' fill='none' stroke-width='0.55' font-family='ui-sans-serif,system-ui,sans-serif' font-size='12' font-weight='300'>dx</text>\",\n integral: \"<path d='M28 6c-8 0-8 8-8 17s-1 17-9 17M19 7h9M10 39h9'/>\",\n exp:\n \"<text x='18' y='30' text-anchor='middle' fill='none' stroke-width='0.55' font-family='ui-sans-serif,system-ui,sans-serif' font-size='20' font-weight='300'>e</text><text x='30' y='18' text-anchor='middle' fill='none' stroke-width='0.5' font-family='ui-sans-serif,system-ui,sans-serif' font-size='11' font-weight='300'>x</text>\",\n sin:\n \"<text x='22' y='28' text-anchor='middle' fill='none' stroke-width='0.55' font-family='ui-sans-serif,system-ui,sans-serif' font-size='18' font-weight='300'>sin</text>\",\n functionGraphCosin:\n \"<path d='M7 22h30M22 7v30'/><path d='M8 13c4 0 5 18 10 18s6-18 10-18 5 18 8 18'/><path d='M9 13h4M31 31h4'/>\",\n tanh:\n \"<text x='22' y='28' text-anchor='middle' fill='none' stroke-width='0.55' font-family='ui-sans-serif,system-ui,sans-serif' font-size='16' font-weight='300'>tanh</text>\",\n wifi:\n \"<path d='M9 20c8-8 18-8 26 0M14 26c5-5 11-5 16 0M19 32c2-2 4-2 6 0'/><circle cx='22' cy='36' r='2'/>\",\n internet:\n \"<circle cx='22' cy='22' r='15'/><path d='M7 22h30M22 7c6 8 6 22 0 30M22 7c-6 8-6 22 0 30M11 13c6 3 16 3 22 0M11 31c6-3 16-3 22 0'/>\",\n percent:\n \"<circle cx='14' cy='14' r='4'/><circle cx='30' cy='30' r='4'/><path d='M33 11L11 33'/>\",\n infinity:\n \"<path d='M6 22c0-5 4-9 9-9 4 0 7 3 10 9 3 6 6 9 10 9 5 0 9-4 9-9s-4-9-9-9c-4 0-7 3-10 9-3 6-6 9-10 9-5 0-9-4-9-9Z'/>\",\n bug:\n \"<path d='M14 16h16v15a8 8 0 0 1-16 0Z'/><path d='M18 16v-4h8v4M9 22h5M30 22h5M9 30h5M30 30h5M13 11l-5-5M31 11l5-5'/><circle cx='18' cy='24' r='1.5'/><circle cx='26' cy='24' r='1.5'/>\",\n server:\n \"<path d='M8 9h28v11H8ZM8 24h28v11H8Z'/><circle cx='14' cy='14' r='1.5'/><circle cx='14' cy='29' r='1.5'/>\",\n rocket:\n \"<path d='M22 6L29 15V28L33 36L26 30H18L11 36L15 28V15Z'/><circle cx='22' cy='21' r='3'/><path d='M19 34l3 4M25 34l-3 4M22 30v4'/>\",\n puzzle:\n \"<path d='M10 10h10c0-5 8-5 8 0h8v9c5 0 5 8 0 8v9h-9c0-5-8-5-8 0h-9v-9c5 0 5-8 0-8Z'/>\",\n book:\n \"<path d='M5 10h13c3 0 4 2 4 4 0-2 1-4 4-4h13v26H27c-3 0-5 2-5 4-1-2-2-4-5-4H5Z'/><path d='M22 14v26'/><path d='M10 17h8M10 23h8M10 29h8M26 17h8M26 23h8M26 29h8'/><path d='M5 14H2v26h15c3 0 4 1 5 3 1-2 2-3 5-3h15V14h-3'/>\",\n beaker:\n \"<path d='M16 7h16M20 7v10L11 34a4 4 0 0 0 4 6h18a4 4 0 0 0 4-6l-9-17V7M17 28h14'/>\",\n sliders:\n \"<path d='M8 14h28M8 24h28M8 34h28'/><circle cx='17' cy='14' r='4'/><circle cx='28' cy='24' r='4'/><circle cx='21' cy='34' r='4'/>\",\n keyboard:\n \"<path d='M6 12h32v24H6Z'/><path d='M12 19h3M20 19h3M28 19h3M12 27h3M20 27h12M12 34h20'/>\",\n branch:\n \"<circle cx='12' cy='12' r='4'/><circle cx='32' cy='20' r='4'/><circle cx='12' cy='32' r='4'/><path d='M16 12c8 0 8 8 12 8M16 32c8 0 8-12 12-12'/>\",\n cube:\n \"<path d='M22 6l16 9v18l-16 9-16-9V15Z'/><path d='M6 15l16 9 16-9M22 24v18'/>\",\n} as const;\n\nexport type DoodlePatternIconName = keyof typeof DOODLE_PATTERN_ICON_SVGS;\n\nconst DOODLE_PATTERN_FUNCTION_ICON_VIEW_BOX_WIDTH = 88;\nconst DOODLE_PATTERN_WIDE_FUNCTION_ICON_VIEW_BOX_WIDTH = 132;\n\nconst getDoodlePatternIconViewBoxWidth = (\n iconName: DoodlePatternIconName\n): number => {\n const iconViewBoxWidths: Partial<Record<DoodlePatternIconName, number>> = {\n functionActivation: DOODLE_PATTERN_FUNCTION_ICON_VIEW_BOX_WIDTH,\n functionAttention: DOODLE_PATTERN_FUNCTION_ICON_VIEW_BOX_WIDTH,\n functionDirac: DOODLE_PATTERN_FUNCTION_ICON_VIEW_BOX_WIDTH,\n functionLoss: DOODLE_PATTERN_FUNCTION_ICON_VIEW_BOX_WIDTH,\n functionSchrodinger: DOODLE_PATTERN_WIDE_FUNCTION_ICON_VIEW_BOX_WIDTH,\n functionSoftmax: DOODLE_PATTERN_FUNCTION_ICON_VIEW_BOX_WIDTH,\n };\n\n return iconViewBoxWidths[iconName] ?? DOODLE_PATTERN_ICON_SIZE;\n};\n\nexport const getDoodlePatternIconViewBox = (\n iconName: DoodlePatternIconName\n): string =>\n `0 0 ${getDoodlePatternIconViewBoxWidth(iconName)} ${DOODLE_PATTERN_ICON_SIZE}`;\n\nexport const getDoodlePatternIconWidth = (\n iconName: DoodlePatternIconName,\n iconSize = DOODLE_PATTERN_ICON_SIZE\n): number =>\n iconSize *\n (getDoodlePatternIconViewBoxWidth(iconName) / DOODLE_PATTERN_ICON_SIZE);\n\nconst PLAYGROUND_AI_DOODLE_HERO_PLACEMENTS = [\n { x: -10, y: 215, icon: \"sin\", rotate: -11, scale: 1.18, priority: 1 },\n { x: -8, y: 100, icon: \"lambda\", rotate: 10, scale: 0.74, priority: 10},\n { x: -2, y: -2, icon: \"code\", rotate: 18, scale: 0.3, priority: 1 }, \n { x: -2, y: 188, icon: \"percent\", rotate: -13, scale: 0.7, priority: 10},\n { x: -1, y: 151, icon: \"dataFilter\", rotate: -18, scale: 0.28, priority: 1 },\n { x: 2, y: 32, icon: \"wifi\", rotate: 13, scale: 0.28, priority: 10},\n { x: 2, y: 79, icon: \"dataSearch\", rotate: -12, scale: 0.3, priority: 10},\n { x: 8, y: 11, icon: \"doc\", rotate: -12, scale: 0.58, priority: 7},\n { x: 9, y: 135, icon: \"functionGraphGaussian\", rotate: -10, scale: 0.9, priority: 6},\n { x: 12, y: 83, icon: \"rocket\", rotate: 15, scale: 0.78, priority: 7},\n { x: 14, y: 121, icon: \"smartphone\", rotate: -19, scale: 0.55, priority: 4},\n { x: 16, y: 58, icon: \"internet\", rotate: -13, scale: 0.32, priority: 5},\n { x: 16, y: 212, icon: \"dataCloud\", rotate: 13, scale: 0.58, priority: 6},\n { x: 22, y: 29, icon: \"functionGraphCosin\", rotate: 9, scale: 0.82, priority: 6},\n { x: 22, y: 165, icon: \"server\", rotate: 13, scale: 1.24, priority: 3}, \n { x: 24, y: -2, icon: \"functionDirac\", rotate: -35, scale: 0.76, priority: 10},\n { x: 24, y: 113, icon: \"functionActivation\", rotate: -5, scale: 0.68, priority: 5},\n { x: 35, y: 91, icon: \"pi\", rotate: 11, scale: 0.8, priority: 6},\n { x: 36, y: 232, icon: \"wave\", rotate: 12, scale: 0.3, priority: 10},\n { x: 43, y: 146, icon: \"dataSearch\", rotate: 13, scale: 0.42, priority: 9},\n { x: 43, y: 219, icon: \"bug\", rotate: -12, scale: 0.34, priority: 4},\n { x: 48, y: 48, icon: \"agent\", rotate: -8, scale: 1.05, priority: 8},\n { x: 52, y: 227, icon: \"distributionSkewed\", rotate: 8, scale: 0.62, priority: 5},\n { x: 57, y: 132, icon: \"dataPipeline\", rotate: 14, scale: 0.34, priority: 5},\n { x: 67, y: 90, icon: \"integral\", rotate: 13, scale: 0.56, priority: 1 },\n { x: 69, y: 151, icon: \"function\", rotate: -14, scale: 0.3, priority: 1 },\n { x: 73, y: 112, icon: \"infinity\", rotate: 15, scale: 0.38, priority: 9},\n { x: 74, y: 12, icon: \"equal\", rotate: -10, scale: 0.28, priority: 10},\n { x: 75, y: 191, icon: \"cursor\", rotate: -9, scale: 0.34, priority: 5},\n { x: 76, y: 144, icon: \"functionGraphTanh\", rotate: -12, scale: 0.82, priority: 6},\n { x: 77, y: 31, icon: \"dataCloud\", rotate: -17, scale: 0.42, priority: 9},\n { x: 78, y: 216, icon: \"keyboard\", rotate: -8, scale: 0.34, priority: 4},\n { x: 82, y: 175, icon: \"derivative\", rotate: -8, scale: 0.38, priority: 6},\n { x: 93, y: 83, icon: \"atom\", rotate: -14, scale: 1.02, priority: 5},\n { x: 94, y: 232, icon: \"distributionSkewed\", rotate: -9, scale: 0.3, priority: 10},\n { x: 95, y: 127, icon: \"grid\", rotate: -9, scale: 0.34, priority: 7},\n { x: 96, y: 5, icon: \"chat\", rotate: 9, scale: 0.95, priority: 8},\n { x: 100, y: 49, icon: \"distributionSkewed\", rotate: 27, scale: 0.32, priority: 4},\n { x: 101, y: 201, icon: \"distributionUniform\", rotate: -8, scale: 0.38, priority: 6},\n { x: 104, y: 172, icon: \"battery\", rotate: 8, scale: 0.72, priority: 3},\n { x: 106, y: 195, icon: \"functionDirac\", rotate: 3, scale: 0.76, priority: 2},\n { x: 112, y: 134, icon: \"tanh\", rotate: -7, scale: 0.42, priority: 6},\n { x: 114, y: 154, icon: \"orchestra\", rotate: 30, scale: 0.42, priority: 6},\n { x: 115, y: 229, icon: \"ram\", rotate: 9, scale: 0.52, priority: 4},\n { x: 116, y: 68, icon: \"tool\", rotate: -18, scale: 0.4, priority: 4}, \n { x: 118, y: 121, icon: \"wifi\", rotate: -17, scale: 0.44, priority: 4 },\n { x: 125, y: 138, icon: \"plus\", rotate: 11, scale: 0.88, priority: 5},\n { x: 125, y: 166, icon: \"exp\", rotate: 8, scale: 0.42, priority: 1 },\n { x: 130, y: 165, icon: \"lambda\", rotate: 8, scale: 0.72, priority: 6},\n { x: 132, y: 115, icon: \"opticalFiber\", rotate: 14, scale: 0.54, priority: 4},\n { x: 132, y: 57, icon: \"wave\", rotate: -9, scale: 0.32, priority: 1 },\n { x: 133, y: 67, icon: \"functionLoss\", rotate: 3, scale: 0.42, priority: 1 },\n { x: 134, y: 2, icon: \"distributionExponential\", rotate: 9, scale: 0.3, priority: 10},\n { x: 141, y: 218, icon: \"pi\", rotate: -15, scale: 0.46, priority: 1 },\n { x: 151, y: 232, icon: \"brain\", rotate: 5, scale: 0.46, priority: 1 },\n { x: 142, y: 82, icon: \"dataTable\", rotate: 8, scale: 0.82, priority: 3},\n { x: 149, y: -1, icon: \"percent\", rotate: 8, scale: 0.28, priority: 1 },\n { x: 150, y: 150, icon: \"cube\", rotate: -13, scale: 1.08, priority: 3},\n { x: 151, y: 23, icon: \"brain\", rotate: -9, scale: 0.82, priority: 3},\n { x: 151, y: 125, icon: \"functionSoftmax\", rotate: -5, scale: 0.7, priority: 5},\n { x: 158, y: 197, icon: \"distributionExponential\", rotate: -12, scale: 0.34, priority: 5},\n { x: 159, y: -15, icon: \"plus\", rotate: 16, scale: 1.2, priority: 1 },\n { x: 163, y: 113, icon: \"sin\", rotate: -10, scale: 0.36, priority: 6},\n { x: 170, y: 67, icon: \"code\", rotate: 14, scale: 0.36, priority: 4},\n { x: 177, y: 53, icon: \"functionSoftmax\", rotate: 15, scale: 0.46, priority: 7},\n { x: 194, y: 183, icon: \"dataBinaryArray\", rotate: 11, scale: 0.34, priority: 4},\n { x: 176, y: 145, icon: \"infinity\", rotate: 14, scale: 0.38, priority: 6},\n { x: 176, y: 222, icon: \"functionGraphCosin\", rotate: 8, scale: 0.72, priority: 10},\n { x: 187, y: 90, icon: \"dataPieChart\", rotate: -12, scale: 0.42, priority: 6},\n { x: 190, y: 112, icon: \"keyboard\", rotate: 9, scale: 0.5, priority: 4},\n { x: 190, y: 207, icon: \"opticalFiber\", rotate: -14, scale: 0.34, priority: 4},\n { x: 198, y: 56, icon: \"functionAttention\", rotate: 4, scale: 0.72, priority: 5},\n { x: 202, y: 100, icon: \"lambda\", rotate: -30, scale: 0.70, priority: 1 },\n { x: 203, y: 5, icon: \"laptop\", rotate: -7, scale: 1.26, priority: 3},\n { x: 204, y: 71, icon: \"distributionExponential\", rotate: -12, scale: 0.9, priority: 3},\n { x: 218, y: 170, icon: \"book\", rotate: -11, scale: 0.94, priority: 5},\n { x: 218, y: 230, icon: \"terminal\", rotate: 5, scale: 0.44, priority: 5},\n { x: 212, y: 140, icon: \"dataCloud\", rotate: 21, scale: 0.40, priority: 1 },\n { x: 222, y: 158, icon: \"derivative\", rotate: 18, scale: 0.38, priority: 7},\n { x: 224, y: 128, icon: \"gear\", rotate: 18, scale: 0.38, priority: 7},\n { x: 229, y: 116, icon: \"dot\", rotate: 0, scale: 0.70, priority: 1 },\n { x: 230, y: 215, icon: \"dataFilter\", rotate: 13, scale: 0.34, priority: 5},\n { x: 238, y: 101, icon: \"puzzle\", rotate: 12, scale: 0.62, priority: 8},\n { x: 249, y: 121, icon: \"bug\", rotate: -8, scale: 0.66, priority: 4},\n { x: 250, y: 55, icon: \"dataBinaryArray\", rotate: 12, scale: 0.3, priority: 4},\n { x: 251, y: 221, icon: \"integral\", rotate: 9, scale: 0.38, priority: 6},\n { x: 254, y: 4, icon: \"sigma\", rotate: -12, scale: 0.48, priority: 1 },\n { x: 256, y: 149, icon: \"function\", rotate: -14, scale: 0.38, priority: 7},\n { x: 258, y: 49, icon: \"dataPieChart\", rotate: 13, scale: 0.2, priority: 1 },\n { x: 258, y: 192, icon: \"functionSchrodinger\", rotate: -2, scale: 0.78, priority: 5},\n { x: 262, y: 95, icon: \"dataSearch\", rotate: -21, scale: 0.40, priority: 1 },\n { x: 264, y: 60, icon: \"distributionUniform\", rotate: 10, scale: 0.72, priority: 9},\n { x: 268, y: 238, icon: \"doc\", rotate: -10, scale: 0.3, priority: 10}, \n { x: 268, y: 29, icon: \"book\", rotate: 13, scale: 0.2, priority: 1 },\n { x: 270, y: 160, icon: \"laptop\", rotate: 12, scale: 0.5, priority: 4 },\n { x: 278, y: 12, icon: \"chip\", rotate: 8, scale: 1.18, priority: 3},\n { x: 278, y: 116, icon: \"equal\", rotate: 15, scale: 0.74, priority: 1 },\n { x: 278, y: 180, icon: \"plus\", rotate: -8, scale: 0.57, priority: 1 },\n { x: 280, y: -4, icon: \"exp\", rotate: 8, scale: 0.62, priority: 1 },\n { x: 286, y: 138, icon: \"functionGraphCosin\", rotate: -8, scale: 0.54, priority: 5},\n { x: 288, y: 78, icon: \"database\", rotate: -11, scale: 1.12, priority: 3},\n { x: 296, y: 158, icon: \"orchestra\", rotate: -12, scale: 0.74, priority: 3},\n { x: 300, y: 62, icon: \"distributionBimodal\", rotate: -8, scale: 0.32, priority: 4},\n { x: 306, y: 218, icon: \"functionGraphGaussian\", rotate: -7, scale: 0.62, priority: 5},\n { x: 317, y: 119, icon: \"graph\", rotate: 11, scale: 0.56, priority: 4},\n { x: 318, y: -2, icon: \"dataBinaryArray\", rotate: -8, scale: 0.8, priority: 10},\n { x: 325, y: 35, icon: \"code\", rotate: 8, scale: 0.8, priority: 10},\n { x: 333, y: 220, icon: \"chip\", rotate: 13, scale: 0.28, priority: 1 },\n { x: 335, y: 65, icon: \"ram\", rotate: -12, scale: 0.68, priority: 4},\n { x: 335, y: 153, icon: \"battery\", rotate: -10, scale: 0.42, priority: 9},\n { x: 336, y: 185, icon: \"opticalFiber\", rotate: 12, scale: 0.4, priority: 9},\n { x: 342, y: 232, icon: \"wifi\", rotate: -11, scale: 0.52, priority: 10},\n { x: 348, y: 136, icon: \"atom\", rotate: 13, scale: 0.44, priority: 1 },\n { x: 350, y: 18, icon: \"branch\", rotate: 12, scale: 0.76, priority: 3},\n { x: 352, y: 86, icon: \"terminal\", rotate: 11, scale: 0.98, priority: 5},\n { x: 355, y: 172, icon: \"agent\", rotate: -12, scale: 0.4, priority: 9},\n { x: 360, y: 160, icon: \"beaker\", rotate: 16, scale: 1.24, priority: 3},\n { x: 360, y: 206, icon: \"functionLoss\", rotate: -4, scale: 1.2, priority: 1 },\n { x: 362, y: 55, icon: \"agent\", rotate: -7, scale: 0.38, priority: 4},\n { x: 364, y: 217, icon: \"dataTable\", rotate: 10, scale: 0.32, priority: 4},\n { x: 370, y: -4, icon: \"tool\", rotate: 11, scale: 0.6, priority: 10},\n { x: 372, y: 237, icon: \"distributionUniform\", rotate: 8, scale: 0.34, priority: 5},\n { x: 374, y: 125, icon: \"rocket\", rotate: 120, scale: 0.4, priority: 7},\n { x: 377, y: 71, icon: \"wifi\", rotate: 13, scale: 0.3, priority: 4},\n { x: 377, y: 81, icon: \"equal\", rotate: -5, scale: 0.3, priority: 4},\n { x: 379, y: 61, icon: \"functionLoss\", rotate: -6, scale: 0.62, priority: 5},\n { x: 381, y: 147, icon: \"distributionSkewed\", rotate: 12, scale: 0.42, priority: 6},\n { x: 384, y: 37, icon: \"distributionExponential\", rotate: -9, scale: 0.46, priority: 6},\n { x: 391, y: 126, icon: \"internet\", rotate: -12, scale: 0.52, priority: 4},\n { x: 391, y: 105, icon: \"lambda\", rotate: -12, scale: 0.44, priority: 5},\n { x: 399, y: 159, icon: \"dataPieChart\", rotate: 12, scale: 0.34, priority: 5},\n { x: 401, y: 86, icon: \"functionGraphCosin\", rotate: -9, scale: 0.42, priority: 6}, \n { x: 402, y: 21, icon: \"integral\", rotate: 9, scale: 0.4, priority: 9},\n { x: 402, y: 135, icon: \"sin\", rotate: -29, scale: 1.2, priority: 6},\n { x: 405, y: 2, icon: \"bracket\", rotate: 10, scale: 0.46, priority: 1 },\n { x: 406, y: 172, icon: \"sliders\", rotate: -16, scale: 0.9, priority: 5},\n { x: 410, y: 23, icon: \"derivative\", rotate: 9, scale: 0.4, priority: 5},\n { x: 410, y: 87, icon: \"exp\", rotate: 12, scale: 0.34, priority: 4},\n { x: 410, y: 94, icon: \"logicGate\", rotate: 13, scale: 1.04, priority: 3},\n { x: 411, y: 48, icon: \"tanh\", rotate: 6, scale: 0.46, priority: 2},\n { x: 419, y: 132, icon: \"distributionBimodal\", rotate: 8, scale: 0.4, priority: 6},\n { x: 423, y: 7, icon: \"model\", rotate: 7, scale: 1.28, priority: 3},\n { x: 428, y: 68, icon: \"dataTable\", rotate: -6, scale: 0.46, priority: 2},\n { x: 435, y: -2, icon: \"grid\", rotate: 2, scale: 0.26, priority: 1 },\n { x: 438, y: 238, icon: \"infinity\", rotate: 8, scale: 0.3, priority: 10},\n { x: 444, y: 122, icon: \"percent\", rotate: 11, scale: 0.32, priority: 4},\n { x: 444, y: 151, icon: \"functionGraphGaussian\", rotate: 12, scale: 0.42, priority: 6},\n { x: 449, y: 84, icon: \"bracket\", rotate: -10, scale: 0.32, priority: 4},\n { x: 447, y: 178, icon: \"functionGraphTanh\", rotate: -21, scale: 1.1, priority: 5},\n { x: 457, y: 58, icon: \"wifi\", rotate: 13, scale: 0.34, priority: 7},\n { x: 458, y: 125, icon: \"dataCloud\", rotate: 16, scale: 0.38, priority: 4},\n { x: 458, y: 143, icon: \"graph\", rotate: 10, scale: 0.66, priority: 5},\n { x: 459, y: 222, icon: \"function\", rotate: 0, scale: 0.7, priority: 1 },\n { x: 464, y: 78, icon: \"plus\", rotate: -16, scale: 0.28, priority: 1 },\n { x: 465, y: 0, icon: \"chat\", rotate: -12, scale: 0.28, priority: 10},\n { x: 468, y: 168, icon: \"dataSearch\", rotate: -13, scale: 0.36, priority: 4},\n { x: 471, y: 114, icon: \"sigma\", rotate: 13, scale: 0.34, priority: 4},\n { x: 473, y: 38, icon: \"dataPipeline\", rotate: -9, scale: 0.56, priority: 2},\n { x: 475, y: 85, icon: \"distributionBimodal\", rotate: -18, scale: 0.78, priority: 3},\n { x: 479, y: 59, icon: \"cursor\", rotate: -18, scale: 0.78, priority: 3},\n { x: 482, y: 204, icon: \"smartphone\", rotate: 13, scale: 0.62, priority: 3},\n { x: 486, y: 14, icon: \"dataFilter\", rotate: 17, scale: 0.54, priority: 6},\n { x: 490, y: 151, icon: \"cursor\", rotate: 15, scale: 0.36, priority: 10},\n { x: 500, y: 34, icon: \"function\", rotate: 12, scale: 0.3, priority: 10},\n { x: 500, y: 134, icon: \"dataBinaryArray\", rotate: 10, scale: 0.3, priority: 10},\n { x: 501, y: 193, icon: \"derivative\", rotate: -8, scale: 0.5, priority: 10}, \n { x: 508, y: -2, icon: \"pi\", rotate: 16, scale: 0.34, priority: 1 },\n { x: 509, y: 112, icon: \"integral\", rotate: 11, scale: 0.34, priority: 10},\n] satisfies DoodlePatternPlacement[];\n\nconst PLAYGROUND_AI_DOODLE_FLOATING_PLACEMENTS = [\n { x: 33, y: 5, icon: \"dataBinaryArray\", rotate: -11, scale: 0.3, priority: 1 },\n { x: 42, y: 58, icon: \"dot\", rotate: 0, scale: 0.24, priority: 1 },\n { x: 383, y: 59, icon: \"gear\", rotate: 11, scale: 0.28, priority: 1 },\n { x: 502, y: 83, icon: \"wave\", rotate: 13, scale: 0.3, priority: 1 },\n { x: 4, y: 72, icon: \"lambda\", rotate: 10, scale: 0.32, priority: 1 },\n { x: 498, y: 133, icon: \"dot\", rotate: 0, scale: 0.26, priority: 1 },\n { x: 204, y: 157, icon: \"wave\", rotate: 13, scale: 0.26, priority: 1 },\n { x: 244, y: 151, icon: \"sigma\", rotate: -9, scale: 0.24, priority: 4 },\n { x: 319, y: 154, icon: \"bracket\", rotate: -11, scale: 0.22, priority: 4 },\n { x: 348, y: 150, icon: \"lambda\", rotate: 8, scale: 0.22, priority: 4 },\n { x: 335, y: 202, icon: \"dot\", rotate: 0, scale: 0.22, priority: 1 },\n { x: 502, y: 184, icon: \"equal\", rotate: 15, scale: 0.28, priority: 1 },\n { x: 84, y: 229, icon: \"dot\", rotate: 0, scale: 0.24, priority: 1 },\n { x: 202, y: 221, icon: \"distributionUniform\", rotate: 8, scale: 0.3, priority: 1 },\n { x: 390, y: 228, icon: \"wave\", rotate: 9, scale: 0.3, priority: 1 },\n { x: 506, y: 226, icon: \"dataBinaryArray\", rotate: -18, scale: 0.28, priority: 1 },\n] satisfies DoodlePatternPlacement[];\n\nexport const PLAYGROUND_AI_DOODLE_PLACEMENTS: DoodlePatternPlacement[] = [\n ...PLAYGROUND_AI_DOODLE_HERO_PLACEMENTS,\n ...PLAYGROUND_AI_DOODLE_FLOATING_PLACEMENTS,\n];\n\nexport interface BuildDoodlePatternSvgOptions {\n width?: number;\n height?: number;\n iconSize?: number;\n renderScale?: number;\n placements?: DoodlePatternPlacement[];\n accentPlacements?: DoodlePatternPlacement[];\n}\n\nconst mutateDoodlePatternPlacements = (\n placements: DoodlePatternPlacement[]\n): DoodlePatternPlacement[] => {\n const iconOccurrences = new Map<DoodlePatternIconName, number>();\n\n return placements.map((placement) => {\n const occurrence = iconOccurrences.get(placement.icon) ?? 0;\n iconOccurrences.set(placement.icon, occurrence + 1);\n\n if (placement.priority) {\n return placement;\n }\n\n const mutation =\n DOODLE_PATTERN_ICON_MUTATIONS[\n occurrence % DOODLE_PATTERN_ICON_MUTATIONS.length\n ];\n\n return {\n ...placement,\n rotate: (placement.rotate ?? 0) + mutation.rotate,\n scale: (placement.scale ?? 1) * mutation.scale,\n };\n });\n};\n\nconst sortDoodlePatternPlacementsByPosition = (\n placements: DoodlePatternPlacement[]\n): DoodlePatternPlacement[] =>\n [...placements].sort((a, b) => a.x - b.x || a.y - b.y);\n\nconst renderDoodlePatternPlacement = (\n placement: DoodlePatternPlacement,\n iconSize: number\n): string => {\n const scale = placement.scale ?? 1;\n const width = getDoodlePatternIconWidth(placement.icon, iconSize) * scale;\n const height = iconSize * scale;\n const viewBox = getDoodlePatternIconViewBox(placement.icon);\n const centerX = getDoodlePatternIconViewBoxWidth(placement.icon) / 2;\n const transform = placement.rotate\n ? ` transform='rotate(${placement.rotate} ${centerX} ${iconSize / 2})'`\n : \"\";\n\n return `<svg x='${placement.x}' y='${placement.y}' width='${width}' height='${height}' viewBox='${viewBox}' overflow='visible'><g${transform}>${DOODLE_PATTERN_ICON_SVGS[placement.icon]}</g></svg>`;\n};\n\nexport const buildDoodlePatternSvg = (\n palette: DoodlePatternPalette,\n options: BuildDoodlePatternSvgOptions = {}\n): string =>\n buildDoodlePatternSvgWithStroke(\n {\n primary: palette.primary,\n primaryOpacity: palette.primaryOpacity,\n primaryWidth: palette.primaryWidth,\n accent: palette.accent,\n accentOpacity: palette.accentOpacity,\n accentWidth: palette.accentWidth,\n },\n options\n );\n\nexport const buildDoodlePatternMaskSvg = (\n options: BuildDoodlePatternSvgOptions = {}\n): string =>\n buildDoodlePatternSvgWithStroke(\n {\n primary: DOODLE_PATTERN_MASK_COLOR,\n primaryOpacity: 1,\n primaryWidth: DOODLE_PATTERN_STRUCTURE.primaryWidth,\n accent: DOODLE_PATTERN_MASK_COLOR,\n accentOpacity: 1,\n accentWidth: DOODLE_PATTERN_STRUCTURE.accentWidth,\n },\n options\n );\n\nconst buildDoodlePatternSvgWithStroke = (\n stroke: {\n primary: string;\n primaryOpacity: number;\n primaryWidth: number;\n accent: string;\n accentOpacity: number;\n accentWidth: number;\n },\n options: BuildDoodlePatternSvgOptions = {}\n): string => {\n const width = options.width ?? DOODLE_PATTERN_TILE_WIDTH;\n const height = options.height ?? DOODLE_PATTERN_TILE_HEIGHT;\n const renderScale = options.renderScale ?? DOODLE_PATTERN_RENDER_SCALE;\n const renderWidth = width * renderScale;\n const renderHeight = height * renderScale;\n const iconSize = options.iconSize ?? DOODLE_PATTERN_ICON_SIZE;\n const placements = sortDoodlePatternPlacementsByPosition(\n mutateDoodlePatternPlacements(\n options.placements ?? PLAYGROUND_AI_DOODLE_PLACEMENTS\n )\n );\n const accentPlacements = sortDoodlePatternPlacementsByPosition(\n mutateDoodlePatternPlacements(options.accentPlacements ?? [])\n );\n const renderedPlacements = placements\n .map((placement) => renderDoodlePatternPlacement(placement, iconSize))\n .join(\"\");\n const renderedAccentPlacements = accentPlacements\n .map((placement) => renderDoodlePatternPlacement(placement, iconSize))\n .join(\"\");\n\n return `<svg xmlns='http://www.w3.org/2000/svg' width='${renderWidth}' height='${renderHeight}' viewBox='0 0 ${width} ${height}'><g fill='none' stroke='${stroke.primary}' stroke-opacity='${stroke.primaryOpacity}' stroke-width='${stroke.primaryWidth}' stroke-linecap='round' stroke-linejoin='round'>${renderedPlacements}</g><g fill='none' stroke='${stroke.accent}' stroke-opacity='${stroke.accentOpacity}' stroke-width='${stroke.accentWidth}' stroke-linecap='round' stroke-linejoin='round'>${renderedAccentPlacements}</g></svg>`;\n};\n\nexport const toDoodlePatternBackgroundUrl = (svg: string): string =>\n `url(\"data:image/svg+xml,${encodeURIComponent(svg)}\")`;\n","// Generated by scripts/generateDoodlePattern.mjs. Do not edit manually.\n\nexport const DOODLE_PATTERN_MASK_URL = \"url(\\\"data:image/svg+xml,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20width%3D'1560'%20height%3D'750'%20viewBox%3D'0%200%20520%20250'%3E%3Cg%20fill%3D'none'%20stroke%3D'%23000'%20stroke-opacity%3D'1'%20stroke-width%3D'1.55'%20stroke-linecap%3D'round'%20stroke-linejoin%3D'round'%3E%3Csvg%20x%3D'-10'%20y%3D'215'%20width%3D'51.919999999999995'%20height%3D'51.919999999999995'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-11%2022%2022)'%3E%3Ctext%20x%3D'22'%20y%3D'28'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.55'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'18'%20font-weight%3D'300'%3Esin%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'-8'%20y%3D'100'%20width%3D'32.56'%20height%3D'32.56'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(10%2022%2022)'%3E%3Ctext%20x%3D'22'%20y%3D'35'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.65'%20font-family%3D'Georgia%2CTimes%20New%20Roman%2Cserif'%20font-size%3D'34'%20font-weight%3D'400'%3E%26%23955%3B%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'-2'%20y%3D'-2'%20width%3D'13.2'%20height%3D'13.2'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(18%2022%2022)'%3E%3Cpath%20d%3D'M15%2013l-7%207%207%207M27%2013l7%207-7%207M23%2010l-5%2020'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'-2'%20y%3D'188'%20width%3D'30.799999999999997'%20height%3D'30.799999999999997'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-13%2022%2022)'%3E%3Ccircle%20cx%3D'14'%20cy%3D'14'%20r%3D'4'%2F%3E%3Ccircle%20cx%3D'30'%20cy%3D'30'%20r%3D'4'%2F%3E%3Cpath%20d%3D'M33%2011L11%2033'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'-1'%20y%3D'151'%20width%3D'12.32'%20height%3D'12.32'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-18%2022%2022)'%3E%3Cpath%20d%3D'M7%209h30L25%2023v11l-6%203V23Z'%2F%3E%3Cpath%20d%3D'M14%2014h16'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'2'%20y%3D'32'%20width%3D'12.32'%20height%3D'12.32'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(13%2022%2022)'%3E%3Cpath%20d%3D'M9%2020c8-8%2018-8%2026%200M14%2026c5-5%2011-5%2016%200M19%2032c2-2%204-2%206%200'%2F%3E%3Ccircle%20cx%3D'22'%20cy%3D'36'%20r%3D'2'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'2'%20y%3D'79'%20width%3D'13.2'%20height%3D'13.2'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-12%2022%2022)'%3E%3Ccircle%20cx%3D'18'%20cy%3D'18'%20r%3D'10'%2F%3E%3Cpath%20d%3D'M25%2025l11%2011M14%2018h8M14%2023h5'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'4'%20y%3D'72'%20width%3D'14.08'%20height%3D'14.08'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(10%2022%2022)'%3E%3Ctext%20x%3D'22'%20y%3D'35'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.65'%20font-family%3D'Georgia%2CTimes%20New%20Roman%2Cserif'%20font-size%3D'34'%20font-weight%3D'400'%3E%26%23955%3B%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'8'%20y%3D'11'%20width%3D'25.52'%20height%3D'25.52'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-12%2022%2022)'%3E%3Cpath%20d%3D'M9%205h18l8%208v23H9Z'%2F%3E%3Cpath%20d%3D'M27%205v9h8M15%2021h14M15%2029h10'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'9'%20y%3D'135'%20width%3D'39.6'%20height%3D'39.6'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-10%2022%2022)'%3E%3Cpath%20d%3D'M7%2035V9M7%2035h30'%2F%3E%3Cpath%20d%3D'M10%2034c5%200%206-20%2012-20s7%2020%2012%2020'%2F%3E%3Cpath%20d%3D'M22%2014v21'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'12'%20y%3D'83'%20width%3D'34.32'%20height%3D'34.32'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(15%2022%2022)'%3E%3Cpath%20d%3D'M22%206L29%2015V28L33%2036L26%2030H18L11%2036L15%2028V15Z'%2F%3E%3Ccircle%20cx%3D'22'%20cy%3D'21'%20r%3D'3'%2F%3E%3Cpath%20d%3D'M19%2034l3%204M25%2034l-3%204M22%2030v4'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'14'%20y%3D'121'%20width%3D'24.200000000000003'%20height%3D'24.200000000000003'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-19%2022%2022)'%3E%3Cpath%20d%3D'M14%204h16a4%204%200%200%201%204%204v28a4%204%200%200%201-4%204H14a4%204%200%200%201-4-4V8a4%204%200%200%201%204-4Z'%2F%3E%3Cpath%20d%3D'M18%209h8M14%2032h16'%2F%3E%3Ccircle%20cx%3D'22'%20cy%3D'36'%20r%3D'1.5'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'16'%20y%3D'58'%20width%3D'14.08'%20height%3D'14.08'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-13%2022%2022)'%3E%3Ccircle%20cx%3D'22'%20cy%3D'22'%20r%3D'15'%2F%3E%3Cpath%20d%3D'M7%2022h30M22%207c6%208%206%2022%200%2030M22%207c-6%208-6%2022%200%2030M11%2013c6%203%2016%203%2022%200M11%2031c6-3%2016-3%2022%200'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'16'%20y%3D'212'%20width%3D'25.52'%20height%3D'25.52'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(13%2022%2022)'%3E%3Cpath%20d%3D'M13%2031h20a7%207%200%200%200%201-14%2010%2010%200%200%200-19-3%208%208%200%200%200-2%2017Z'%2F%3E%3Cpath%20d%3D'M22%2018v11M18%2025l4%204%204-4'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'22'%20y%3D'29'%20width%3D'36.08'%20height%3D'36.08'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(9%2022%2022)'%3E%3Cpath%20d%3D'M7%2022h30M22%207v30'%2F%3E%3Cpath%20d%3D'M8%2013c4%200%205%2018%2010%2018s6-18%2010-18%205%2018%208%2018'%2F%3E%3Cpath%20d%3D'M9%2013h4M31%2031h4'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'22'%20y%3D'165'%20width%3D'54.56'%20height%3D'54.56'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(13%2022%2022)'%3E%3Cpath%20d%3D'M8%209h28v11H8ZM8%2024h28v11H8Z'%2F%3E%3Ccircle%20cx%3D'14'%20cy%3D'14'%20r%3D'1.5'%2F%3E%3Ccircle%20cx%3D'14'%20cy%3D'29'%20r%3D'1.5'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'24'%20y%3D'-2'%20width%3D'66.88'%20height%3D'33.44'%20viewBox%3D'0%200%2088%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-35%2044%2022)'%3E%3Ctext%20x%3D'44'%20y%3D'26'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.48'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'9'%20font-weight%3D'300'%3Ei%26%23947%3B%3Ctspan%20baseline-shift%3D'super'%20font-size%3D'6'%3E%26%23956%3B%3C%2Ftspan%3E%26%238706%3B%3Ctspan%20baseline-shift%3D'sub'%20font-size%3D'6'%3E%26%23956%3B%3C%2Ftspan%3E%26%23968%3B%3Dm%26%23968%3B%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'24'%20y%3D'113'%20width%3D'59.84'%20height%3D'29.92'%20viewBox%3D'0%200%2088%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-5%2044%2022)'%3E%3Ctext%20x%3D'44'%20y%3D'26'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.5'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'10'%20font-weight%3D'300'%3Ey%3D%26%23963%3B(Wx%2Bb)%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'33'%20y%3D'5'%20width%3D'13.2'%20height%3D'13.2'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-11%2022%2022)'%3E%3Cpath%20d%3D'M12%208H8v28h4M32%208h4v28h-4'%2F%3E%3Ctext%20x%3D'22'%20y%3D'17'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.5'%20font-family%3D'ui-monospace%2CSFMono-Regular%2CMenlo%2Cmonospace'%20font-size%3D'8.5'%20font-weight%3D'300'%3E101%3C%2Ftext%3E%3Ctext%20x%3D'22'%20y%3D'27'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.5'%20font-family%3D'ui-monospace%2CSFMono-Regular%2CMenlo%2Cmonospace'%20font-size%3D'8.5'%20font-weight%3D'300'%3E010%3C%2Ftext%3E%3Ctext%20x%3D'22'%20y%3D'37'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.5'%20font-family%3D'ui-monospace%2CSFMono-Regular%2CMenlo%2Cmonospace'%20font-size%3D'8.5'%20font-weight%3D'300'%3E111%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'35'%20y%3D'91'%20width%3D'35.2'%20height%3D'35.2'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(11%2022%2022)'%3E%3Cpath%20d%3D'M10%2014h26M16%2014v20M30%2014v15c0%204%203%206%207%204'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'36'%20y%3D'232'%20width%3D'13.2'%20height%3D'13.2'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(12%2022%2022)'%3E%3Cpath%20d%3D'M7%2022c8-10%2017%2010%2025%200'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'42'%20y%3D'58'%20width%3D'10.559999999999999'%20height%3D'10.559999999999999'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%3E%3Ccircle%20cx%3D'22'%20cy%3D'22'%20r%3D'4'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'43'%20y%3D'146'%20width%3D'18.48'%20height%3D'18.48'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(13%2022%2022)'%3E%3Ccircle%20cx%3D'18'%20cy%3D'18'%20r%3D'10'%2F%3E%3Cpath%20d%3D'M25%2025l11%2011M14%2018h8M14%2023h5'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'43'%20y%3D'219'%20width%3D'14.96'%20height%3D'14.96'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-12%2022%2022)'%3E%3Cpath%20d%3D'M14%2016h16v15a8%208%200%200%201-16%200Z'%2F%3E%3Cpath%20d%3D'M18%2016v-4h8v4M9%2022h5M30%2022h5M9%2030h5M30%2030h5M13%2011l-5-5M31%2011l5-5'%2F%3E%3Ccircle%20cx%3D'18'%20cy%3D'24'%20r%3D'1.5'%2F%3E%3Ccircle%20cx%3D'26'%20cy%3D'24'%20r%3D'1.5'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'48'%20y%3D'48'%20width%3D'46.2'%20height%3D'46.2'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-8%2022%2022)'%3E%3Cpath%20d%3D'M8%2011h26a8%208%200%200%201%208%208v12a8%208%200%200%201-8%208H8a8%208%200%200%201-8-8V19a8%208%200%200%201%208-8Z'%2F%3E%3Cpath%20d%3D'M14%208V4M30%208V4'%2F%3E%3Cpath%20d%3D'M11%2030h20'%2F%3E%3Ccircle%20cx%3D'15'%20cy%3D'23'%20r%3D'2.5'%2F%3E%3Ccircle%20cx%3D'27'%20cy%3D'23'%20r%3D'2.5'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'52'%20y%3D'227'%20width%3D'27.28'%20height%3D'27.28'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(8%2022%2022)'%3E%3Cpath%20d%3D'M7%2035V9M7%2035h30'%2F%3E%3Cpath%20d%3D'M10%2034c3%200%204-19%209-19%206%200%207%2017%2017%2017'%2F%3E%3Cpath%20d%3D'M19%2015v19'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'57'%20y%3D'132'%20width%3D'14.96'%20height%3D'14.96'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(14%2022%2022)'%3E%3Cpath%20d%3D'M6%2012h10v8H6ZM28%2012h10v8H28ZM17%2026h10v8H17Z'%2F%3E%3Cpath%20d%3D'M16%2016h12M22%2020v6'%2F%3E%3Ccircle%20cx%3D'16'%20cy%3D'16'%20r%3D'1.5'%2F%3E%3Ccircle%20cx%3D'28'%20cy%3D'16'%20r%3D'1.5'%2F%3E%3Ccircle%20cx%3D'22'%20cy%3D'26'%20r%3D'1.5'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'67'%20y%3D'90'%20width%3D'24.64'%20height%3D'24.64'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(13%2022%2022)'%3E%3Cpath%20d%3D'M28%206c-8%200-8%208-8%2017s-1%2017-9%2017M19%207h9M10%2039h9'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'69'%20y%3D'151'%20width%3D'13.2'%20height%3D'13.2'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-14%2022%2022)'%3E%3Cpath%20d%3D'M29%208c-8-2-12%202-13%2010l-3%2017M8%2019h19M26%2025l6%207M32%2025l-6%207'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'73'%20y%3D'112'%20width%3D'16.72'%20height%3D'16.72'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(15%2022%2022)'%3E%3Cpath%20d%3D'M6%2022c0-5%204-9%209-9%204%200%207%203%2010%209%203%206%206%209%2010%209%205%200%209-4%209-9s-4-9-9-9c-4%200-7%203-10%209-3%206-6%209-10%209-5%200-9-4-9-9Z'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'74'%20y%3D'12'%20width%3D'12.32'%20height%3D'12.32'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-10%2022%2022)'%3E%3Cpath%20d%3D'M12%2018h22M12%2026h22'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'75'%20y%3D'191'%20width%3D'14.96'%20height%3D'14.96'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-9%2022%2022)'%3E%3Cpath%20d%3D'M8%205l25%2013-17%206-7%2017L8%205Z'%2F%3E%3Cpath%20d%3D'M18%2025l12%2012'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'76'%20y%3D'144'%20width%3D'36.08'%20height%3D'36.08'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-12%2022%2022)'%3E%3Cpath%20d%3D'M7%2022h30M22%207v30'%2F%3E%3Cpath%20d%3D'M8%2031c7%200%2010-2%2014-9%204-7%207-9%2014-9'%2F%3E%3Cpath%20d%3D'M11%2031h5M30%2013h5'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'77'%20y%3D'31'%20width%3D'18.48'%20height%3D'18.48'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-17%2022%2022)'%3E%3Cpath%20d%3D'M13%2031h20a7%207%200%200%200%201-14%2010%2010%200%200%200-19-3%208%208%200%200%200-2%2017Z'%2F%3E%3Cpath%20d%3D'M22%2018v11M18%2025l4%204%204-4'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'78'%20y%3D'216'%20width%3D'14.96'%20height%3D'14.96'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-8%2022%2022)'%3E%3Cpath%20d%3D'M6%2012h32v24H6Z'%2F%3E%3Cpath%20d%3D'M12%2019h3M20%2019h3M28%2019h3M12%2027h3M20%2027h12M12%2034h20'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'82'%20y%3D'175'%20width%3D'16.72'%20height%3D'16.72'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-8%2022%2022)'%3E%3Ctext%20x%3D'22'%20y%3D'17'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.55'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'12'%20font-weight%3D'300'%3Edy%3C%2Ftext%3E%3Cpath%20d%3D'M8%2023h28'%2F%3E%3Ctext%20x%3D'22'%20y%3D'38'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.55'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'12'%20font-weight%3D'300'%3Edx%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'84'%20y%3D'229'%20width%3D'10.559999999999999'%20height%3D'10.559999999999999'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%3E%3Ccircle%20cx%3D'22'%20cy%3D'22'%20r%3D'4'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'93'%20y%3D'83'%20width%3D'44.88'%20height%3D'44.88'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-14%2022%2022)'%3E%3Ccircle%20cx%3D'22'%20cy%3D'22'%20r%3D'3'%2F%3E%3Cellipse%20cx%3D'22'%20cy%3D'22'%20rx%3D'16'%20ry%3D'6'%2F%3E%3Cellipse%20cx%3D'22'%20cy%3D'22'%20rx%3D'16'%20ry%3D'6'%20transform%3D'rotate(60%2022%2022)'%2F%3E%3Cellipse%20cx%3D'22'%20cy%3D'22'%20rx%3D'16'%20ry%3D'6'%20transform%3D'rotate(-60%2022%2022)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'94'%20y%3D'232'%20width%3D'13.2'%20height%3D'13.2'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-9%2022%2022)'%3E%3Cpath%20d%3D'M7%2035V9M7%2035h30'%2F%3E%3Cpath%20d%3D'M10%2034c3%200%204-19%209-19%206%200%207%2017%2017%2017'%2F%3E%3Cpath%20d%3D'M19%2015v19'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'95'%20y%3D'127'%20width%3D'14.96'%20height%3D'14.96'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-9%2022%2022)'%3E%3Cpath%20d%3D'M7%207h30v30H7ZM7%2017h30M7%2027h30M17%207v30M27%207v30'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'96'%20y%3D'5'%20width%3D'41.8'%20height%3D'41.8'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(9%2022%2022)'%3E%3Cpath%20d%3D'M8%208h26a7%207%200%200%201%207%207v13a7%207%200%200%201-7%207h-8l-8%207v-7H8a7%207%200%200%201-7-7V15a7%207%200%200%201%207-7Z'%2F%3E%3Cpath%20d%3D'M11%2019h18M11%2027h11'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'100'%20y%3D'49'%20width%3D'14.08'%20height%3D'14.08'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(27%2022%2022)'%3E%3Cpath%20d%3D'M7%2035V9M7%2035h30'%2F%3E%3Cpath%20d%3D'M10%2034c3%200%204-19%209-19%206%200%207%2017%2017%2017'%2F%3E%3Cpath%20d%3D'M19%2015v19'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'101'%20y%3D'201'%20width%3D'16.72'%20height%3D'16.72'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-8%2022%2022)'%3E%3Cpath%20d%3D'M7%2035V9M7%2035h30'%2F%3E%3Cpath%20d%3D'M11%2032V17h22v15'%2F%3E%3Cpath%20d%3D'M11%2017h22'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'104'%20y%3D'172'%20width%3D'31.68'%20height%3D'31.68'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(8%2022%2022)'%3E%3Cpath%20d%3D'M6%2012h30v20H6Z'%2F%3E%3Cpath%20d%3D'M36%2018h5v8h-5'%2F%3E%3Cpath%20d%3D'M12%2022l12-6-4%205h12l-13%207%204-6Z'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'106'%20y%3D'195'%20width%3D'66.88'%20height%3D'33.44'%20viewBox%3D'0%200%2088%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(3%2044%2022)'%3E%3Ctext%20x%3D'44'%20y%3D'26'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.48'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'9'%20font-weight%3D'300'%3Ei%26%23947%3B%3Ctspan%20baseline-shift%3D'super'%20font-size%3D'6'%3E%26%23956%3B%3C%2Ftspan%3E%26%238706%3B%3Ctspan%20baseline-shift%3D'sub'%20font-size%3D'6'%3E%26%23956%3B%3C%2Ftspan%3E%26%23968%3B%3Dm%26%23968%3B%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'112'%20y%3D'134'%20width%3D'18.48'%20height%3D'18.48'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-7%2022%2022)'%3E%3Ctext%20x%3D'22'%20y%3D'28'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.55'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'16'%20font-weight%3D'300'%3Etanh%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'114'%20y%3D'154'%20width%3D'18.48'%20height%3D'18.48'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(30%2022%2022)'%3E%3Cpath%20d%3D'M22%204l7%204v8l-7%204-7-4V8ZM11%2024l7%204v8l-7%204-7-4v-8ZM33%2024l7%204v8l-7%204-7-4v-8Z'%2F%3E%3Cpath%20d%3D'M19%2021l-3%205M25%2021l3%205M20%2032h4'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'115'%20y%3D'229'%20width%3D'22.880000000000003'%20height%3D'22.880000000000003'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(9%2022%2022)'%3E%3Cpath%20d%3D'M6%2012h32v20H6Z'%2F%3E%3Cpath%20d%3D'M11%2017h5v8h-5ZM20%2017h5v8h-5ZM29%2017h5v8h-5Z'%2F%3E%3Cpath%20d%3D'M10%208v4M16%208v4M22%208v4M28%208v4M34%208v4M10%2032v4M16%2032v4M22%2032v4M28%2032v4M34%2032v4'%2F%3E%3Cpath%20d%3D'M17%2032v3h10v-3'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'116'%20y%3D'68'%20width%3D'17.6'%20height%3D'17.6'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-18%2022%2022)'%3E%3Cpath%20d%3D'M31%206c-4-1-8%200-11%203-2%202-3%205-2%208L6%2029l5%205%2012-12c3%201%206%200%208-2%203-3%204-7%203-11l-6%206-4-4Z'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'118'%20y%3D'121'%20width%3D'19.36'%20height%3D'19.36'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-17%2022%2022)'%3E%3Cpath%20d%3D'M9%2020c8-8%2018-8%2026%200M14%2026c5-5%2011-5%2016%200M19%2032c2-2%204-2%206%200'%2F%3E%3Ccircle%20cx%3D'22'%20cy%3D'36'%20r%3D'2'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'125'%20y%3D'138'%20width%3D'38.72'%20height%3D'38.72'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(11%2022%2022)'%3E%3Cpath%20d%3D'M22%2013v18M13%2022h18'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'125'%20y%3D'166'%20width%3D'18.48'%20height%3D'18.48'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(8%2022%2022)'%3E%3Ctext%20x%3D'18'%20y%3D'30'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.55'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'20'%20font-weight%3D'300'%3Ee%3C%2Ftext%3E%3Ctext%20x%3D'30'%20y%3D'18'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.5'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'11'%20font-weight%3D'300'%3Ex%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'130'%20y%3D'165'%20width%3D'31.68'%20height%3D'31.68'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(8%2022%2022)'%3E%3Ctext%20x%3D'22'%20y%3D'35'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.65'%20font-family%3D'Georgia%2CTimes%20New%20Roman%2Cserif'%20font-size%3D'34'%20font-weight%3D'400'%3E%26%23955%3B%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'132'%20y%3D'57'%20width%3D'14.08'%20height%3D'14.08'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-9%2022%2022)'%3E%3Cpath%20d%3D'M7%2022c8-10%2017%2010%2025%200'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'132'%20y%3D'115'%20width%3D'23.76'%20height%3D'23.76'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(14%2022%2022)'%3E%3Cpath%20d%3D'M15%2038V24h14v14'%2F%3E%3Cpath%20d%3D'M18%2024C11%2019%208%2014%208%208M21%2024C18%2017%2018%2012%2018%207M24%2024C26%2017%2026%2012%2026%207M27%2024C34%2019%2036%2014%2036%208'%2F%3E%3Ccircle%20cx%3D'8'%20cy%3D'8'%20r%3D'3'%2F%3E%3Ccircle%20cx%3D'18'%20cy%3D'7'%20r%3D'3'%2F%3E%3Ccircle%20cx%3D'26'%20cy%3D'7'%20r%3D'3'%2F%3E%3Ccircle%20cx%3D'36'%20cy%3D'8'%20r%3D'3'%2F%3E%3Cpath%20d%3D'M12%2034h20'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'133'%20y%3D'67'%20width%3D'36.96'%20height%3D'18.48'%20viewBox%3D'0%200%2088%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(3%2044%2022)'%3E%3Ctext%20x%3D'44'%20y%3D'26'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.5'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'9'%20font-weight%3D'300'%3EL%3D-%26%23931%3By%20log(p)%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'134'%20y%3D'2'%20width%3D'13.2'%20height%3D'13.2'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(9%2022%2022)'%3E%3Cpath%20d%3D'M7%2035V9M7%2035h30'%2F%3E%3Cpath%20d%3D'M10%2013c7%208%2011%2014%2025%2019'%2F%3E%3Cpath%20d%3D'M10%2013h4M31%2032h4'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'141'%20y%3D'218'%20width%3D'20.240000000000002'%20height%3D'20.240000000000002'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-15%2022%2022)'%3E%3Cpath%20d%3D'M10%2014h26M16%2014v20M30%2014v15c0%204%203%206%207%204'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'142'%20y%3D'82'%20width%3D'36.08'%20height%3D'36.08'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(8%2022%2022)'%3E%3Cpath%20d%3D'M7%209h30v26H7Z'%2F%3E%3Cpath%20d%3D'M7%2016h30M17%2016v19M27%2016v19M12%2012h2M18%2012h2M24%2012h2'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'149'%20y%3D'-1'%20width%3D'12.32'%20height%3D'12.32'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(8%2022%2022)'%3E%3Ccircle%20cx%3D'14'%20cy%3D'14'%20r%3D'4'%2F%3E%3Ccircle%20cx%3D'30'%20cy%3D'30'%20r%3D'4'%2F%3E%3Cpath%20d%3D'M33%2011L11%2033'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'150'%20y%3D'150'%20width%3D'47.52'%20height%3D'47.52'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-13%2022%2022)'%3E%3Cpath%20d%3D'M22%206l16%209v18l-16%209-16-9V15Z'%2F%3E%3Cpath%20d%3D'M6%2015l16%209%2016-9M22%2024v18'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'151'%20y%3D'23'%20width%3D'36.08'%20height%3D'36.08'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-9%2022%2022)'%3E%3Cpath%20d%3D'M14%209c-6%200-10%204-10%2010%200%203%201%205%203%207-1%205%203%209%208%209%203%200%205-1%207-3%202%202%204%203%207%203%205%200%209-4%208-9%202-2%203-4%203-7%200-6-4-10-10-10-3%200-6%201-8%203-2-2-5-3-8-3Z'%2F%3E%3Cpath%20d%3D'M22%2012v20M12%2017c4%200%207%202%2010%206M32%2017c-4%200-7%202-10%206M12%2027c4-1%207%200%2010%203M32%2027c-4-1-7%200-10%203'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'151'%20y%3D'125'%20width%3D'61.599999999999994'%20height%3D'30.799999999999997'%20viewBox%3D'0%200%2088%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-5%2044%2022)'%3E%3Ctext%20x%3D'43'%20y%3D'25'%20text-anchor%3D'end'%20fill%3D'none'%20stroke-width%3D'0.46'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'7.5'%20font-weight%3D'300'%3Esoftmax%3D%3C%2Ftext%3E%3Ctext%20x%3D'55'%20y%3D'18'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.48'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'9'%20font-weight%3D'300'%3Ee%3Ctspan%20baseline-shift%3D'super'%20font-size%3D'6'%3Ex%3C%2Ftspan%3E%3C%2Ftext%3E%3Cpath%20d%3D'M44%2023h22'%2F%3E%3Ctext%20x%3D'55'%20y%3D'34'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.48'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'8'%20font-weight%3D'300'%3E%26%23931%3Be%3Ctspan%20baseline-shift%3D'super'%20font-size%3D'5.5'%3Ex%3C%2Ftspan%3E%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'151'%20y%3D'232'%20width%3D'20.240000000000002'%20height%3D'20.240000000000002'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(5%2022%2022)'%3E%3Cpath%20d%3D'M14%209c-6%200-10%204-10%2010%200%203%201%205%203%207-1%205%203%209%208%209%203%200%205-1%207-3%202%202%204%203%207%203%205%200%209-4%208-9%202-2%203-4%203-7%200-6-4-10-10-10-3%200-6%201-8%203-2-2-5-3-8-3Z'%2F%3E%3Cpath%20d%3D'M22%2012v20M12%2017c4%200%207%202%2010%206M32%2017c-4%200-7%202-10%206M12%2027c4-1%207%200%2010%203M32%2027c-4-1-7%200-10%203'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'158'%20y%3D'197'%20width%3D'14.96'%20height%3D'14.96'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-12%2022%2022)'%3E%3Cpath%20d%3D'M7%2035V9M7%2035h30'%2F%3E%3Cpath%20d%3D'M10%2013c7%208%2011%2014%2025%2019'%2F%3E%3Cpath%20d%3D'M10%2013h4M31%2032h4'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'159'%20y%3D'-15'%20width%3D'52.8'%20height%3D'52.8'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(16%2022%2022)'%3E%3Cpath%20d%3D'M22%2013v18M13%2022h18'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'163'%20y%3D'113'%20width%3D'15.84'%20height%3D'15.84'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-10%2022%2022)'%3E%3Ctext%20x%3D'22'%20y%3D'28'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.55'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'18'%20font-weight%3D'300'%3Esin%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'170'%20y%3D'67'%20width%3D'15.84'%20height%3D'15.84'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(14%2022%2022)'%3E%3Cpath%20d%3D'M15%2013l-7%207%207%207M27%2013l7%207-7%207M23%2010l-5%2020'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'176'%20y%3D'145'%20width%3D'16.72'%20height%3D'16.72'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(14%2022%2022)'%3E%3Cpath%20d%3D'M6%2022c0-5%204-9%209-9%204%200%207%203%2010%209%203%206%206%209%2010%209%205%200%209-4%209-9s-4-9-9-9c-4%200-7%203-10%209-3%206-6%209-10%209-5%200-9-4-9-9Z'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'176'%20y%3D'222'%20width%3D'31.68'%20height%3D'31.68'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(8%2022%2022)'%3E%3Cpath%20d%3D'M7%2022h30M22%207v30'%2F%3E%3Cpath%20d%3D'M8%2013c4%200%205%2018%2010%2018s6-18%2010-18%205%2018%208%2018'%2F%3E%3Cpath%20d%3D'M9%2013h4M31%2031h4'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'177'%20y%3D'53'%20width%3D'40.480000000000004'%20height%3D'20.240000000000002'%20viewBox%3D'0%200%2088%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(15%2044%2022)'%3E%3Ctext%20x%3D'43'%20y%3D'25'%20text-anchor%3D'end'%20fill%3D'none'%20stroke-width%3D'0.46'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'7.5'%20font-weight%3D'300'%3Esoftmax%3D%3C%2Ftext%3E%3Ctext%20x%3D'55'%20y%3D'18'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.48'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'9'%20font-weight%3D'300'%3Ee%3Ctspan%20baseline-shift%3D'super'%20font-size%3D'6'%3Ex%3C%2Ftspan%3E%3C%2Ftext%3E%3Cpath%20d%3D'M44%2023h22'%2F%3E%3Ctext%20x%3D'55'%20y%3D'34'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.48'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'8'%20font-weight%3D'300'%3E%26%23931%3Be%3Ctspan%20baseline-shift%3D'super'%20font-size%3D'5.5'%3Ex%3C%2Ftspan%3E%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'187'%20y%3D'90'%20width%3D'18.48'%20height%3D'18.48'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-12%2022%2022)'%3E%3Ccircle%20cx%3D'22'%20cy%3D'22'%20r%3D'15'%2F%3E%3Cpath%20d%3D'M22%207v15h15'%2F%3E%3Cpath%20d%3D'M22%2022L12%2034'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'190'%20y%3D'112'%20width%3D'22'%20height%3D'22'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(9%2022%2022)'%3E%3Cpath%20d%3D'M6%2012h32v24H6Z'%2F%3E%3Cpath%20d%3D'M12%2019h3M20%2019h3M28%2019h3M12%2027h3M20%2027h12M12%2034h20'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'190'%20y%3D'207'%20width%3D'14.96'%20height%3D'14.96'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-14%2022%2022)'%3E%3Cpath%20d%3D'M15%2038V24h14v14'%2F%3E%3Cpath%20d%3D'M18%2024C11%2019%208%2014%208%208M21%2024C18%2017%2018%2012%2018%207M24%2024C26%2017%2026%2012%2026%207M27%2024C34%2019%2036%2014%2036%208'%2F%3E%3Ccircle%20cx%3D'8'%20cy%3D'8'%20r%3D'3'%2F%3E%3Ccircle%20cx%3D'18'%20cy%3D'7'%20r%3D'3'%2F%3E%3Ccircle%20cx%3D'26'%20cy%3D'7'%20r%3D'3'%2F%3E%3Ccircle%20cx%3D'36'%20cy%3D'8'%20r%3D'3'%2F%3E%3Cpath%20d%3D'M12%2034h20'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'194'%20y%3D'183'%20width%3D'14.96'%20height%3D'14.96'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(11%2022%2022)'%3E%3Cpath%20d%3D'M12%208H8v28h4M32%208h4v28h-4'%2F%3E%3Ctext%20x%3D'22'%20y%3D'17'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.5'%20font-family%3D'ui-monospace%2CSFMono-Regular%2CMenlo%2Cmonospace'%20font-size%3D'8.5'%20font-weight%3D'300'%3E101%3C%2Ftext%3E%3Ctext%20x%3D'22'%20y%3D'27'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.5'%20font-family%3D'ui-monospace%2CSFMono-Regular%2CMenlo%2Cmonospace'%20font-size%3D'8.5'%20font-weight%3D'300'%3E010%3C%2Ftext%3E%3Ctext%20x%3D'22'%20y%3D'37'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.5'%20font-family%3D'ui-monospace%2CSFMono-Regular%2CMenlo%2Cmonospace'%20font-size%3D'8.5'%20font-weight%3D'300'%3E111%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'198'%20y%3D'56'%20width%3D'63.36'%20height%3D'31.68'%20viewBox%3D'0%200%2088%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(4%2044%2022)'%3E%3Ctext%20x%3D'39'%20y%3D'25'%20text-anchor%3D'end'%20fill%3D'none'%20stroke-width%3D'0.46'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'7.5'%20font-weight%3D'300'%3Eattn%3D%3C%2Ftext%3E%3Ctext%20x%3D'52'%20y%3D'18'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.48'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'8.5'%20font-weight%3D'300'%3EQK%3Ctspan%20baseline-shift%3D'super'%20font-size%3D'5.5'%3ET%3C%2Ftspan%3E%3C%2Ftext%3E%3Cpath%20d%3D'M41%2023h22'%2F%3E%3Ctext%20x%3D'52'%20y%3D'34'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.48'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'8'%20font-weight%3D'300'%3E%26%238730%3Bd%3C%2Ftext%3E%3Ctext%20x%3D'66'%20y%3D'25'%20text-anchor%3D'start'%20fill%3D'none'%20stroke-width%3D'0.46'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'8.5'%20font-weight%3D'300'%3EV%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'202'%20y%3D'100'%20width%3D'30.799999999999997'%20height%3D'30.799999999999997'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-30%2022%2022)'%3E%3Ctext%20x%3D'22'%20y%3D'35'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.65'%20font-family%3D'Georgia%2CTimes%20New%20Roman%2Cserif'%20font-size%3D'34'%20font-weight%3D'400'%3E%26%23955%3B%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'202'%20y%3D'221'%20width%3D'13.2'%20height%3D'13.2'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(8%2022%2022)'%3E%3Cpath%20d%3D'M7%2035V9M7%2035h30'%2F%3E%3Cpath%20d%3D'M11%2032V17h22v15'%2F%3E%3Cpath%20d%3D'M11%2017h22'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'203'%20y%3D'5'%20width%3D'55.44'%20height%3D'55.44'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-7%2022%2022)'%3E%3Cpath%20d%3D'M8%209h28v20H8Z'%2F%3E%3Cpath%20d%3D'M4%2035h36M15%2029h14'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'204'%20y%3D'71'%20width%3D'39.6'%20height%3D'39.6'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-12%2022%2022)'%3E%3Cpath%20d%3D'M7%2035V9M7%2035h30'%2F%3E%3Cpath%20d%3D'M10%2013c7%208%2011%2014%2025%2019'%2F%3E%3Cpath%20d%3D'M10%2013h4M31%2032h4'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'204'%20y%3D'157'%20width%3D'11.440000000000001'%20height%3D'11.440000000000001'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(13%2022%2022)'%3E%3Cpath%20d%3D'M7%2022c8-10%2017%2010%2025%200'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'212'%20y%3D'140'%20width%3D'17.6'%20height%3D'17.6'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(21%2022%2022)'%3E%3Cpath%20d%3D'M13%2031h20a7%207%200%200%200%201-14%2010%2010%200%200%200-19-3%208%208%200%200%200-2%2017Z'%2F%3E%3Cpath%20d%3D'M22%2018v11M18%2025l4%204%204-4'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'218'%20y%3D'170'%20width%3D'41.36'%20height%3D'41.36'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-11%2022%2022)'%3E%3Cpath%20d%3D'M5%2010h13c3%200%204%202%204%204%200-2%201-4%204-4h13v26H27c-3%200-5%202-5%204-1-2-2-4-5-4H5Z'%2F%3E%3Cpath%20d%3D'M22%2014v26'%2F%3E%3Cpath%20d%3D'M10%2017h8M10%2023h8M10%2029h8M26%2017h8M26%2023h8M26%2029h8'%2F%3E%3Cpath%20d%3D'M5%2014H2v26h15c3%200%204%201%205%203%201-2%202-3%205-3h15V14h-3'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'218'%20y%3D'230'%20width%3D'19.36'%20height%3D'19.36'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(5%2022%2022)'%3E%3Cpath%20d%3D'M5%208h32v25H5Z'%2F%3E%3Cpath%20d%3D'M11%2017l6%204-6%205M21%2027h10'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'222'%20y%3D'158'%20width%3D'16.72'%20height%3D'16.72'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(18%2022%2022)'%3E%3Ctext%20x%3D'22'%20y%3D'17'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.55'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'12'%20font-weight%3D'300'%3Edy%3C%2Ftext%3E%3Cpath%20d%3D'M8%2023h28'%2F%3E%3Ctext%20x%3D'22'%20y%3D'38'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.55'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'12'%20font-weight%3D'300'%3Edx%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'224'%20y%3D'128'%20width%3D'16.72'%20height%3D'16.72'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(18%2022%2022)'%3E%3Cg%20transform%3D'translate(2%202)%20scale(1.6667)'%3E%3Cpath%20d%3D'M10.3%204.3c.4-1.7%203-1.7%203.4%200%20.3%201.1%201.6%201.7%202.6%201.1%201.5-.9%203.3.8%202.4%202.4-.6%201%200%202.3%201.1%202.6%201.7.4%201.7%203%200%203.4-1.1.3-1.7%201.6-1.1%202.6.9%201.5-.8%203.3-2.4%202.4-1-.6-2.3%200-2.6%201.1-.4%201.7-3%201.7-3.4%200-.3-1.1-1.6-1.7-2.6-1.1-1.5.9-3.3-.8-2.4-2.4.6-1%200-2.3-1.1-2.6-1.7-.4-1.7-3%200-3.4%201.1-.3%201.7-1.6%201.1-2.6-.9-1.5.8-3.3%202.4-2.4%201%20.6%202.3%200%202.6-1.1Z'%2F%3E%3Ccircle%20cx%3D'12'%20cy%3D'12'%20r%3D'4'%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'229'%20y%3D'116'%20width%3D'30.799999999999997'%20height%3D'30.799999999999997'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%3E%3Ccircle%20cx%3D'22'%20cy%3D'22'%20r%3D'4'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'230'%20y%3D'215'%20width%3D'14.96'%20height%3D'14.96'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(13%2022%2022)'%3E%3Cpath%20d%3D'M7%209h30L25%2023v11l-6%203V23Z'%2F%3E%3Cpath%20d%3D'M14%2014h16'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'238'%20y%3D'101'%20width%3D'27.28'%20height%3D'27.28'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(12%2022%2022)'%3E%3Cpath%20d%3D'M10%2010h10c0-5%208-5%208%200h8v9c5%200%205%208%200%208v9h-9c0-5-8-5-8%200h-9v-9c5%200%205-8%200-8Z'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'244'%20y%3D'151'%20width%3D'10.559999999999999'%20height%3D'10.559999999999999'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-9%2022%2022)'%3E%3Cpath%20d%3D'M31%208H10l10%2012-10%2012h22'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'249'%20y%3D'121'%20width%3D'29.040000000000003'%20height%3D'29.040000000000003'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-8%2022%2022)'%3E%3Cpath%20d%3D'M14%2016h16v15a8%208%200%200%201-16%200Z'%2F%3E%3Cpath%20d%3D'M18%2016v-4h8v4M9%2022h5M30%2022h5M9%2030h5M30%2030h5M13%2011l-5-5M31%2011l5-5'%2F%3E%3Ccircle%20cx%3D'18'%20cy%3D'24'%20r%3D'1.5'%2F%3E%3Ccircle%20cx%3D'26'%20cy%3D'24'%20r%3D'1.5'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'250'%20y%3D'55'%20width%3D'13.2'%20height%3D'13.2'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(12%2022%2022)'%3E%3Cpath%20d%3D'M12%208H8v28h4M32%208h4v28h-4'%2F%3E%3Ctext%20x%3D'22'%20y%3D'17'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.5'%20font-family%3D'ui-monospace%2CSFMono-Regular%2CMenlo%2Cmonospace'%20font-size%3D'8.5'%20font-weight%3D'300'%3E101%3C%2Ftext%3E%3Ctext%20x%3D'22'%20y%3D'27'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.5'%20font-family%3D'ui-monospace%2CSFMono-Regular%2CMenlo%2Cmonospace'%20font-size%3D'8.5'%20font-weight%3D'300'%3E010%3C%2Ftext%3E%3Ctext%20x%3D'22'%20y%3D'37'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.5'%20font-family%3D'ui-monospace%2CSFMono-Regular%2CMenlo%2Cmonospace'%20font-size%3D'8.5'%20font-weight%3D'300'%3E111%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'251'%20y%3D'221'%20width%3D'16.72'%20height%3D'16.72'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(9%2022%2022)'%3E%3Cpath%20d%3D'M28%206c-8%200-8%208-8%2017s-1%2017-9%2017M19%207h9M10%2039h9'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'254'%20y%3D'4'%20width%3D'21.119999999999997'%20height%3D'21.119999999999997'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-12%2022%2022)'%3E%3Cpath%20d%3D'M31%208H10l10%2012-10%2012h22'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'256'%20y%3D'149'%20width%3D'16.72'%20height%3D'16.72'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-14%2022%2022)'%3E%3Cpath%20d%3D'M29%208c-8-2-12%202-13%2010l-3%2017M8%2019h19M26%2025l6%207M32%2025l-6%207'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'258'%20y%3D'49'%20width%3D'8.8'%20height%3D'8.8'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(13%2022%2022)'%3E%3Ccircle%20cx%3D'22'%20cy%3D'22'%20r%3D'15'%2F%3E%3Cpath%20d%3D'M22%207v15h15'%2F%3E%3Cpath%20d%3D'M22%2022L12%2034'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'258'%20y%3D'192'%20width%3D'102.96000000000001'%20height%3D'34.32'%20viewBox%3D'0%200%20132%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-2%2066%2022)'%3E%3Ctext%20x%3D'6'%20y%3D'26'%20text-anchor%3D'start'%20fill%3D'none'%20stroke-width%3D'0.44'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'8.5'%20font-weight%3D'300'%3Ei%26%238463%3B%3C%2Ftext%3E%3Ctext%20x%3D'30'%20y%3D'18'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.44'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'8'%20font-weight%3D'300'%3E%26%238706%3B%26%23968%3B%3C%2Ftext%3E%3Cpath%20d%3D'M20%2023h20'%2F%3E%3Ctext%20x%3D'30'%20y%3D'35'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.44'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'8'%20font-weight%3D'300'%3E%26%238706%3Bt%3C%2Ftext%3E%3Ctext%20x%3D'48'%20y%3D'26'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.44'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'9'%20font-weight%3D'300'%3E%3D-%3C%2Ftext%3E%3Ctext%20x%3D'66'%20y%3D'18'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.44'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'8'%20font-weight%3D'300'%3E%26%238463%3B%3Ctspan%20baseline-shift%3D'super'%20font-size%3D'5.5'%3E2%3C%2Ftspan%3E%3C%2Ftext%3E%3Cpath%20d%3D'M56%2023h20'%2F%3E%3Ctext%20x%3D'66'%20y%3D'35'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.44'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'8'%20font-weight%3D'300'%3E2m%3C%2Ftext%3E%3Ctext%20x%3D'81'%20y%3D'26'%20text-anchor%3D'start'%20fill%3D'none'%20stroke-width%3D'0.44'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'8.5'%20font-weight%3D'300'%3E%26%238711%3B%3Ctspan%20baseline-shift%3D'super'%20font-size%3D'5.5'%3E2%3C%2Ftspan%3E%26%23968%3B%2BV%26%23968%3B%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'262'%20y%3D'95'%20width%3D'17.6'%20height%3D'17.6'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-21%2022%2022)'%3E%3Ccircle%20cx%3D'18'%20cy%3D'18'%20r%3D'10'%2F%3E%3Cpath%20d%3D'M25%2025l11%2011M14%2018h8M14%2023h5'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'264'%20y%3D'60'%20width%3D'31.68'%20height%3D'31.68'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(10%2022%2022)'%3E%3Cpath%20d%3D'M7%2035V9M7%2035h30'%2F%3E%3Cpath%20d%3D'M11%2032V17h22v15'%2F%3E%3Cpath%20d%3D'M11%2017h22'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'268'%20y%3D'29'%20width%3D'8.8'%20height%3D'8.8'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(13%2022%2022)'%3E%3Cpath%20d%3D'M5%2010h13c3%200%204%202%204%204%200-2%201-4%204-4h13v26H27c-3%200-5%202-5%204-1-2-2-4-5-4H5Z'%2F%3E%3Cpath%20d%3D'M22%2014v26'%2F%3E%3Cpath%20d%3D'M10%2017h8M10%2023h8M10%2029h8M26%2017h8M26%2023h8M26%2029h8'%2F%3E%3Cpath%20d%3D'M5%2014H2v26h15c3%200%204%201%205%203%201-2%202-3%205-3h15V14h-3'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'268'%20y%3D'238'%20width%3D'13.2'%20height%3D'13.2'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-10%2022%2022)'%3E%3Cpath%20d%3D'M9%205h18l8%208v23H9Z'%2F%3E%3Cpath%20d%3D'M27%205v9h8M15%2021h14M15%2029h10'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'270'%20y%3D'160'%20width%3D'22'%20height%3D'22'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(12%2022%2022)'%3E%3Cpath%20d%3D'M8%209h28v20H8Z'%2F%3E%3Cpath%20d%3D'M4%2035h36M15%2029h14'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'278'%20y%3D'12'%20width%3D'51.919999999999995'%20height%3D'51.919999999999995'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(8%2022%2022)'%3E%3Cpath%20d%3D'M11%2011h22v22H11Z'%2F%3E%3Cpath%20d%3D'M16%206v5M22%206v5M28%206v5M16%2033v5M22%2033v5M28%2033v5M6%2016h5M6%2022h5M6%2028h5M33%2016h5M33%2022h5M33%2028h5'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'278'%20y%3D'116'%20width%3D'32.56'%20height%3D'32.56'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(15%2022%2022)'%3E%3Cpath%20d%3D'M12%2018h22M12%2026h22'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'278'%20y%3D'180'%20width%3D'25.08'%20height%3D'25.08'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-8%2022%2022)'%3E%3Cpath%20d%3D'M22%2013v18M13%2022h18'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'280'%20y%3D'-4'%20width%3D'27.28'%20height%3D'27.28'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(8%2022%2022)'%3E%3Ctext%20x%3D'18'%20y%3D'30'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.55'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'20'%20font-weight%3D'300'%3Ee%3C%2Ftext%3E%3Ctext%20x%3D'30'%20y%3D'18'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.5'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'11'%20font-weight%3D'300'%3Ex%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'286'%20y%3D'138'%20width%3D'23.76'%20height%3D'23.76'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-8%2022%2022)'%3E%3Cpath%20d%3D'M7%2022h30M22%207v30'%2F%3E%3Cpath%20d%3D'M8%2013c4%200%205%2018%2010%2018s6-18%2010-18%205%2018%208%2018'%2F%3E%3Cpath%20d%3D'M9%2013h4M31%2031h4'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'288'%20y%3D'78'%20width%3D'49.28'%20height%3D'49.28'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-11%2022%2022)'%3E%3Cellipse%20cx%3D'22'%20cy%3D'11'%20rx%3D'15'%20ry%3D'6'%2F%3E%3Cpath%20d%3D'M7%2011v20c0%203%207%206%2015%206s15-3%2015-6V11M7%2021c0%203%207%206%2015%206s15-3%2015-6'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'296'%20y%3D'158'%20width%3D'32.56'%20height%3D'32.56'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-12%2022%2022)'%3E%3Cpath%20d%3D'M22%204l7%204v8l-7%204-7-4V8ZM11%2024l7%204v8l-7%204-7-4v-8ZM33%2024l7%204v8l-7%204-7-4v-8Z'%2F%3E%3Cpath%20d%3D'M19%2021l-3%205M25%2021l3%205M20%2032h4'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'300'%20y%3D'62'%20width%3D'14.08'%20height%3D'14.08'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-8%2022%2022)'%3E%3Cpath%20d%3D'M7%2035V9M7%2035h30'%2F%3E%3Cpath%20d%3D'M9%2034c4%200%205-13%2010-13s5%2013%208%2013c2%200%203-11%207-11%203%200%203%2011%204%2011'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'306'%20y%3D'218'%20width%3D'27.28'%20height%3D'27.28'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-7%2022%2022)'%3E%3Cpath%20d%3D'M7%2035V9M7%2035h30'%2F%3E%3Cpath%20d%3D'M10%2034c5%200%206-20%2012-20s7%2020%2012%2020'%2F%3E%3Cpath%20d%3D'M22%2014v21'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'317'%20y%3D'119'%20width%3D'24.64'%20height%3D'24.64'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(11%2022%2022)'%3E%3Cpath%20d%3D'M8%2033V11M8%2033h29M14%2027l7-8%206%205%208-12'%2F%3E%3Ccircle%20cx%3D'21'%20cy%3D'19'%20r%3D'2'%2F%3E%3Ccircle%20cx%3D'27'%20cy%3D'24'%20r%3D'2'%2F%3E%3Ccircle%20cx%3D'35'%20cy%3D'12'%20r%3D'2'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'318'%20y%3D'-2'%20width%3D'35.2'%20height%3D'35.2'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-8%2022%2022)'%3E%3Cpath%20d%3D'M12%208H8v28h4M32%208h4v28h-4'%2F%3E%3Ctext%20x%3D'22'%20y%3D'17'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.5'%20font-family%3D'ui-monospace%2CSFMono-Regular%2CMenlo%2Cmonospace'%20font-size%3D'8.5'%20font-weight%3D'300'%3E101%3C%2Ftext%3E%3Ctext%20x%3D'22'%20y%3D'27'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.5'%20font-family%3D'ui-monospace%2CSFMono-Regular%2CMenlo%2Cmonospace'%20font-size%3D'8.5'%20font-weight%3D'300'%3E010%3C%2Ftext%3E%3Ctext%20x%3D'22'%20y%3D'37'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.5'%20font-family%3D'ui-monospace%2CSFMono-Regular%2CMenlo%2Cmonospace'%20font-size%3D'8.5'%20font-weight%3D'300'%3E111%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'319'%20y%3D'154'%20width%3D'9.68'%20height%3D'9.68'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-11%2022%2022)'%3E%3Cpath%20d%3D'M17%208h-7v24h7M27%208h7v24h-7'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'325'%20y%3D'35'%20width%3D'35.2'%20height%3D'35.2'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(8%2022%2022)'%3E%3Cpath%20d%3D'M15%2013l-7%207%207%207M27%2013l7%207-7%207M23%2010l-5%2020'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'333'%20y%3D'220'%20width%3D'12.32'%20height%3D'12.32'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(13%2022%2022)'%3E%3Cpath%20d%3D'M11%2011h22v22H11Z'%2F%3E%3Cpath%20d%3D'M16%206v5M22%206v5M28%206v5M16%2033v5M22%2033v5M28%2033v5M6%2016h5M6%2022h5M6%2028h5M33%2016h5M33%2022h5M33%2028h5'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'335'%20y%3D'65'%20width%3D'29.92'%20height%3D'29.92'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-12%2022%2022)'%3E%3Cpath%20d%3D'M6%2012h32v20H6Z'%2F%3E%3Cpath%20d%3D'M11%2017h5v8h-5ZM20%2017h5v8h-5ZM29%2017h5v8h-5Z'%2F%3E%3Cpath%20d%3D'M10%208v4M16%208v4M22%208v4M28%208v4M34%208v4M10%2032v4M16%2032v4M22%2032v4M28%2032v4M34%2032v4'%2F%3E%3Cpath%20d%3D'M17%2032v3h10v-3'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'335'%20y%3D'153'%20width%3D'18.48'%20height%3D'18.48'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-10%2022%2022)'%3E%3Cpath%20d%3D'M6%2012h30v20H6Z'%2F%3E%3Cpath%20d%3D'M36%2018h5v8h-5'%2F%3E%3Cpath%20d%3D'M12%2022l12-6-4%205h12l-13%207%204-6Z'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'335'%20y%3D'202'%20width%3D'9.68'%20height%3D'9.68'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%3E%3Ccircle%20cx%3D'22'%20cy%3D'22'%20r%3D'4'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'336'%20y%3D'185'%20width%3D'17.6'%20height%3D'17.6'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(12%2022%2022)'%3E%3Cpath%20d%3D'M15%2038V24h14v14'%2F%3E%3Cpath%20d%3D'M18%2024C11%2019%208%2014%208%208M21%2024C18%2017%2018%2012%2018%207M24%2024C26%2017%2026%2012%2026%207M27%2024C34%2019%2036%2014%2036%208'%2F%3E%3Ccircle%20cx%3D'8'%20cy%3D'8'%20r%3D'3'%2F%3E%3Ccircle%20cx%3D'18'%20cy%3D'7'%20r%3D'3'%2F%3E%3Ccircle%20cx%3D'26'%20cy%3D'7'%20r%3D'3'%2F%3E%3Ccircle%20cx%3D'36'%20cy%3D'8'%20r%3D'3'%2F%3E%3Cpath%20d%3D'M12%2034h20'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'342'%20y%3D'232'%20width%3D'22.880000000000003'%20height%3D'22.880000000000003'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-11%2022%2022)'%3E%3Cpath%20d%3D'M9%2020c8-8%2018-8%2026%200M14%2026c5-5%2011-5%2016%200M19%2032c2-2%204-2%206%200'%2F%3E%3Ccircle%20cx%3D'22'%20cy%3D'36'%20r%3D'2'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'348'%20y%3D'136'%20width%3D'19.36'%20height%3D'19.36'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(13%2022%2022)'%3E%3Ccircle%20cx%3D'22'%20cy%3D'22'%20r%3D'3'%2F%3E%3Cellipse%20cx%3D'22'%20cy%3D'22'%20rx%3D'16'%20ry%3D'6'%2F%3E%3Cellipse%20cx%3D'22'%20cy%3D'22'%20rx%3D'16'%20ry%3D'6'%20transform%3D'rotate(60%2022%2022)'%2F%3E%3Cellipse%20cx%3D'22'%20cy%3D'22'%20rx%3D'16'%20ry%3D'6'%20transform%3D'rotate(-60%2022%2022)'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'348'%20y%3D'150'%20width%3D'9.68'%20height%3D'9.68'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(8%2022%2022)'%3E%3Ctext%20x%3D'22'%20y%3D'35'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.65'%20font-family%3D'Georgia%2CTimes%20New%20Roman%2Cserif'%20font-size%3D'34'%20font-weight%3D'400'%3E%26%23955%3B%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'350'%20y%3D'18'%20width%3D'33.44'%20height%3D'33.44'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(12%2022%2022)'%3E%3Ccircle%20cx%3D'12'%20cy%3D'12'%20r%3D'4'%2F%3E%3Ccircle%20cx%3D'32'%20cy%3D'20'%20r%3D'4'%2F%3E%3Ccircle%20cx%3D'12'%20cy%3D'32'%20r%3D'4'%2F%3E%3Cpath%20d%3D'M16%2012c8%200%208%208%2012%208M16%2032c8%200%208-12%2012-12'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'352'%20y%3D'86'%20width%3D'43.12'%20height%3D'43.12'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(11%2022%2022)'%3E%3Cpath%20d%3D'M5%208h32v25H5Z'%2F%3E%3Cpath%20d%3D'M11%2017l6%204-6%205M21%2027h10'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'355'%20y%3D'172'%20width%3D'17.6'%20height%3D'17.6'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-12%2022%2022)'%3E%3Cpath%20d%3D'M8%2011h26a8%208%200%200%201%208%208v12a8%208%200%200%201-8%208H8a8%208%200%200%201-8-8V19a8%208%200%200%201%208-8Z'%2F%3E%3Cpath%20d%3D'M14%208V4M30%208V4'%2F%3E%3Cpath%20d%3D'M11%2030h20'%2F%3E%3Ccircle%20cx%3D'15'%20cy%3D'23'%20r%3D'2.5'%2F%3E%3Ccircle%20cx%3D'27'%20cy%3D'23'%20r%3D'2.5'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'360'%20y%3D'160'%20width%3D'54.56'%20height%3D'54.56'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(16%2022%2022)'%3E%3Cpath%20d%3D'M16%207h16M20%207v10L11%2034a4%204%200%200%200%204%206h18a4%204%200%200%200%204-6l-9-17V7M17%2028h14'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'360'%20y%3D'206'%20width%3D'105.6'%20height%3D'52.8'%20viewBox%3D'0%200%2088%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-4%2044%2022)'%3E%3Ctext%20x%3D'44'%20y%3D'26'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.5'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'9'%20font-weight%3D'300'%3EL%3D-%26%23931%3By%20log(p)%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'362'%20y%3D'55'%20width%3D'16.72'%20height%3D'16.72'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-7%2022%2022)'%3E%3Cpath%20d%3D'M8%2011h26a8%208%200%200%201%208%208v12a8%208%200%200%201-8%208H8a8%208%200%200%201-8-8V19a8%208%200%200%201%208-8Z'%2F%3E%3Cpath%20d%3D'M14%208V4M30%208V4'%2F%3E%3Cpath%20d%3D'M11%2030h20'%2F%3E%3Ccircle%20cx%3D'15'%20cy%3D'23'%20r%3D'2.5'%2F%3E%3Ccircle%20cx%3D'27'%20cy%3D'23'%20r%3D'2.5'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'364'%20y%3D'217'%20width%3D'14.08'%20height%3D'14.08'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(10%2022%2022)'%3E%3Cpath%20d%3D'M7%209h30v26H7Z'%2F%3E%3Cpath%20d%3D'M7%2016h30M17%2016v19M27%2016v19M12%2012h2M18%2012h2M24%2012h2'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'370'%20y%3D'-4'%20width%3D'26.4'%20height%3D'26.4'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(11%2022%2022)'%3E%3Cpath%20d%3D'M31%206c-4-1-8%200-11%203-2%202-3%205-2%208L6%2029l5%205%2012-12c3%201%206%200%208-2%203-3%204-7%203-11l-6%206-4-4Z'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'372'%20y%3D'237'%20width%3D'14.96'%20height%3D'14.96'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(8%2022%2022)'%3E%3Cpath%20d%3D'M7%2035V9M7%2035h30'%2F%3E%3Cpath%20d%3D'M11%2032V17h22v15'%2F%3E%3Cpath%20d%3D'M11%2017h22'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'374'%20y%3D'125'%20width%3D'17.6'%20height%3D'17.6'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(120%2022%2022)'%3E%3Cpath%20d%3D'M22%206L29%2015V28L33%2036L26%2030H18L11%2036L15%2028V15Z'%2F%3E%3Ccircle%20cx%3D'22'%20cy%3D'21'%20r%3D'3'%2F%3E%3Cpath%20d%3D'M19%2034l3%204M25%2034l-3%204M22%2030v4'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'377'%20y%3D'71'%20width%3D'13.2'%20height%3D'13.2'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(13%2022%2022)'%3E%3Cpath%20d%3D'M9%2020c8-8%2018-8%2026%200M14%2026c5-5%2011-5%2016%200M19%2032c2-2%204-2%206%200'%2F%3E%3Ccircle%20cx%3D'22'%20cy%3D'36'%20r%3D'2'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'377'%20y%3D'81'%20width%3D'13.2'%20height%3D'13.2'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-5%2022%2022)'%3E%3Cpath%20d%3D'M12%2018h22M12%2026h22'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'379'%20y%3D'61'%20width%3D'54.56'%20height%3D'27.28'%20viewBox%3D'0%200%2088%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-6%2044%2022)'%3E%3Ctext%20x%3D'44'%20y%3D'26'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.5'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'9'%20font-weight%3D'300'%3EL%3D-%26%23931%3By%20log(p)%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'381'%20y%3D'147'%20width%3D'18.48'%20height%3D'18.48'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(12%2022%2022)'%3E%3Cpath%20d%3D'M7%2035V9M7%2035h30'%2F%3E%3Cpath%20d%3D'M10%2034c3%200%204-19%209-19%206%200%207%2017%2017%2017'%2F%3E%3Cpath%20d%3D'M19%2015v19'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'383'%20y%3D'59'%20width%3D'12.32'%20height%3D'12.32'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(11%2022%2022)'%3E%3Cg%20transform%3D'translate(2%202)%20scale(1.6667)'%3E%3Cpath%20d%3D'M10.3%204.3c.4-1.7%203-1.7%203.4%200%20.3%201.1%201.6%201.7%202.6%201.1%201.5-.9%203.3.8%202.4%202.4-.6%201%200%202.3%201.1%202.6%201.7.4%201.7%203%200%203.4-1.1.3-1.7%201.6-1.1%202.6.9%201.5-.8%203.3-2.4%202.4-1-.6-2.3%200-2.6%201.1-.4%201.7-3%201.7-3.4%200-.3-1.1-1.6-1.7-2.6-1.1-1.5.9-3.3-.8-2.4-2.4.6-1%200-2.3-1.1-2.6-1.7-.4-1.7-3%200-3.4%201.1-.3%201.7-1.6%201.1-2.6-.9-1.5.8-3.3%202.4-2.4%201%20.6%202.3%200%202.6-1.1Z'%2F%3E%3Ccircle%20cx%3D'12'%20cy%3D'12'%20r%3D'4'%2F%3E%3C%2Fg%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'384'%20y%3D'37'%20width%3D'20.240000000000002'%20height%3D'20.240000000000002'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-9%2022%2022)'%3E%3Cpath%20d%3D'M7%2035V9M7%2035h30'%2F%3E%3Cpath%20d%3D'M10%2013c7%208%2011%2014%2025%2019'%2F%3E%3Cpath%20d%3D'M10%2013h4M31%2032h4'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'390'%20y%3D'228'%20width%3D'13.2'%20height%3D'13.2'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(9%2022%2022)'%3E%3Cpath%20d%3D'M7%2022c8-10%2017%2010%2025%200'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'391'%20y%3D'105'%20width%3D'19.36'%20height%3D'19.36'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-12%2022%2022)'%3E%3Ctext%20x%3D'22'%20y%3D'35'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.65'%20font-family%3D'Georgia%2CTimes%20New%20Roman%2Cserif'%20font-size%3D'34'%20font-weight%3D'400'%3E%26%23955%3B%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'391'%20y%3D'126'%20width%3D'22.880000000000003'%20height%3D'22.880000000000003'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-12%2022%2022)'%3E%3Ccircle%20cx%3D'22'%20cy%3D'22'%20r%3D'15'%2F%3E%3Cpath%20d%3D'M7%2022h30M22%207c6%208%206%2022%200%2030M22%207c-6%208-6%2022%200%2030M11%2013c6%203%2016%203%2022%200M11%2031c6-3%2016-3%2022%200'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'399'%20y%3D'159'%20width%3D'14.96'%20height%3D'14.96'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(12%2022%2022)'%3E%3Ccircle%20cx%3D'22'%20cy%3D'22'%20r%3D'15'%2F%3E%3Cpath%20d%3D'M22%207v15h15'%2F%3E%3Cpath%20d%3D'M22%2022L12%2034'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'401'%20y%3D'86'%20width%3D'18.48'%20height%3D'18.48'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-9%2022%2022)'%3E%3Cpath%20d%3D'M7%2022h30M22%207v30'%2F%3E%3Cpath%20d%3D'M8%2013c4%200%205%2018%2010%2018s6-18%2010-18%205%2018%208%2018'%2F%3E%3Cpath%20d%3D'M9%2013h4M31%2031h4'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'402'%20y%3D'21'%20width%3D'17.6'%20height%3D'17.6'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(9%2022%2022)'%3E%3Cpath%20d%3D'M28%206c-8%200-8%208-8%2017s-1%2017-9%2017M19%207h9M10%2039h9'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'402'%20y%3D'135'%20width%3D'52.8'%20height%3D'52.8'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-29%2022%2022)'%3E%3Ctext%20x%3D'22'%20y%3D'28'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.55'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'18'%20font-weight%3D'300'%3Esin%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'405'%20y%3D'2'%20width%3D'20.240000000000002'%20height%3D'20.240000000000002'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(10%2022%2022)'%3E%3Cpath%20d%3D'M17%208h-7v24h7M27%208h7v24h-7'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'406'%20y%3D'172'%20width%3D'39.6'%20height%3D'39.6'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-16%2022%2022)'%3E%3Cpath%20d%3D'M8%2014h28M8%2024h28M8%2034h28'%2F%3E%3Ccircle%20cx%3D'17'%20cy%3D'14'%20r%3D'4'%2F%3E%3Ccircle%20cx%3D'28'%20cy%3D'24'%20r%3D'4'%2F%3E%3Ccircle%20cx%3D'21'%20cy%3D'34'%20r%3D'4'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'410'%20y%3D'23'%20width%3D'17.6'%20height%3D'17.6'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(9%2022%2022)'%3E%3Ctext%20x%3D'22'%20y%3D'17'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.55'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'12'%20font-weight%3D'300'%3Edy%3C%2Ftext%3E%3Cpath%20d%3D'M8%2023h28'%2F%3E%3Ctext%20x%3D'22'%20y%3D'38'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.55'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'12'%20font-weight%3D'300'%3Edx%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'410'%20y%3D'87'%20width%3D'14.96'%20height%3D'14.96'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(12%2022%2022)'%3E%3Ctext%20x%3D'18'%20y%3D'30'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.55'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'20'%20font-weight%3D'300'%3Ee%3C%2Ftext%3E%3Ctext%20x%3D'30'%20y%3D'18'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.5'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'11'%20font-weight%3D'300'%3Ex%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'410'%20y%3D'94'%20width%3D'45.760000000000005'%20height%3D'45.760000000000005'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(13%2022%2022)'%3E%3Cpath%20d%3D'M9%2012h12c8%200%2014%204%2014%2010s-6%2010-14%2010H9Z'%2F%3E%3Cpath%20d%3D'M3%2017h6M3%2027h6M35%2022h6'%2F%3E%3Ccircle%20cx%3D'15'%20cy%3D'17'%20r%3D'1.5'%2F%3E%3Ccircle%20cx%3D'15'%20cy%3D'27'%20r%3D'1.5'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'411'%20y%3D'48'%20width%3D'20.240000000000002'%20height%3D'20.240000000000002'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(6%2022%2022)'%3E%3Ctext%20x%3D'22'%20y%3D'28'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.55'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'16'%20font-weight%3D'300'%3Etanh%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'419'%20y%3D'132'%20width%3D'17.6'%20height%3D'17.6'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(8%2022%2022)'%3E%3Cpath%20d%3D'M7%2035V9M7%2035h30'%2F%3E%3Cpath%20d%3D'M9%2034c4%200%205-13%2010-13s5%2013%208%2013c2%200%203-11%207-11%203%200%203%2011%204%2011'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'423'%20y%3D'7'%20width%3D'56.32'%20height%3D'56.32'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(7%2022%2022)'%3E%3Cpath%20d%3D'M12%2010h20a6%206%200%200%201%206%206v14a6%206%200%200%201-6%206H12a6%206%200%200%201-6-6V16a6%206%200%200%201%206-6Z'%2F%3E%3Ccircle%20cx%3D'16'%20cy%3D'20'%20r%3D'2.5'%2F%3E%3Ccircle%20cx%3D'28'%20cy%3D'20'%20r%3D'2.5'%2F%3E%3Ccircle%20cx%3D'22'%20cy%3D'29'%20r%3D'2.5'%2F%3E%3Cpath%20d%3D'M18%2021l3%206M26%2021l-3%206'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'428'%20y%3D'68'%20width%3D'20.240000000000002'%20height%3D'20.240000000000002'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-6%2022%2022)'%3E%3Cpath%20d%3D'M7%209h30v26H7Z'%2F%3E%3Cpath%20d%3D'M7%2016h30M17%2016v19M27%2016v19M12%2012h2M18%2012h2M24%2012h2'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'435'%20y%3D'-2'%20width%3D'11.440000000000001'%20height%3D'11.440000000000001'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(2%2022%2022)'%3E%3Cpath%20d%3D'M7%207h30v30H7ZM7%2017h30M7%2027h30M17%207v30M27%207v30'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'438'%20y%3D'238'%20width%3D'13.2'%20height%3D'13.2'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(8%2022%2022)'%3E%3Cpath%20d%3D'M6%2022c0-5%204-9%209-9%204%200%207%203%2010%209%203%206%206%209%2010%209%205%200%209-4%209-9s-4-9-9-9c-4%200-7%203-10%209-3%206-6%209-10%209-5%200-9-4-9-9Z'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'444'%20y%3D'122'%20width%3D'14.08'%20height%3D'14.08'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(11%2022%2022)'%3E%3Ccircle%20cx%3D'14'%20cy%3D'14'%20r%3D'4'%2F%3E%3Ccircle%20cx%3D'30'%20cy%3D'30'%20r%3D'4'%2F%3E%3Cpath%20d%3D'M33%2011L11%2033'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'444'%20y%3D'151'%20width%3D'18.48'%20height%3D'18.48'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(12%2022%2022)'%3E%3Cpath%20d%3D'M7%2035V9M7%2035h30'%2F%3E%3Cpath%20d%3D'M10%2034c5%200%206-20%2012-20s7%2020%2012%2020'%2F%3E%3Cpath%20d%3D'M22%2014v21'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'447'%20y%3D'178'%20width%3D'48.400000000000006'%20height%3D'48.400000000000006'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-21%2022%2022)'%3E%3Cpath%20d%3D'M7%2022h30M22%207v30'%2F%3E%3Cpath%20d%3D'M8%2031c7%200%2010-2%2014-9%204-7%207-9%2014-9'%2F%3E%3Cpath%20d%3D'M11%2031h5M30%2013h5'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'449'%20y%3D'84'%20width%3D'14.08'%20height%3D'14.08'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-10%2022%2022)'%3E%3Cpath%20d%3D'M17%208h-7v24h7M27%208h7v24h-7'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'457'%20y%3D'58'%20width%3D'14.96'%20height%3D'14.96'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(13%2022%2022)'%3E%3Cpath%20d%3D'M9%2020c8-8%2018-8%2026%200M14%2026c5-5%2011-5%2016%200M19%2032c2-2%204-2%206%200'%2F%3E%3Ccircle%20cx%3D'22'%20cy%3D'36'%20r%3D'2'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'458'%20y%3D'125'%20width%3D'16.72'%20height%3D'16.72'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(16%2022%2022)'%3E%3Cpath%20d%3D'M13%2031h20a7%207%200%200%200%201-14%2010%2010%200%200%200-19-3%208%208%200%200%200-2%2017Z'%2F%3E%3Cpath%20d%3D'M22%2018v11M18%2025l4%204%204-4'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'458'%20y%3D'143'%20width%3D'29.040000000000003'%20height%3D'29.040000000000003'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(10%2022%2022)'%3E%3Cpath%20d%3D'M8%2033V11M8%2033h29M14%2027l7-8%206%205%208-12'%2F%3E%3Ccircle%20cx%3D'21'%20cy%3D'19'%20r%3D'2'%2F%3E%3Ccircle%20cx%3D'27'%20cy%3D'24'%20r%3D'2'%2F%3E%3Ccircle%20cx%3D'35'%20cy%3D'12'%20r%3D'2'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'459'%20y%3D'222'%20width%3D'30.799999999999997'%20height%3D'30.799999999999997'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%3E%3Cpath%20d%3D'M29%208c-8-2-12%202-13%2010l-3%2017M8%2019h19M26%2025l6%207M32%2025l-6%207'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'464'%20y%3D'78'%20width%3D'12.32'%20height%3D'12.32'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-16%2022%2022)'%3E%3Cpath%20d%3D'M22%2013v18M13%2022h18'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'465'%20y%3D'0'%20width%3D'12.32'%20height%3D'12.32'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-12%2022%2022)'%3E%3Cpath%20d%3D'M8%208h26a7%207%200%200%201%207%207v13a7%207%200%200%201-7%207h-8l-8%207v-7H8a7%207%200%200%201-7-7V15a7%207%200%200%201%207-7Z'%2F%3E%3Cpath%20d%3D'M11%2019h18M11%2027h11'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'468'%20y%3D'168'%20width%3D'15.84'%20height%3D'15.84'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-13%2022%2022)'%3E%3Ccircle%20cx%3D'18'%20cy%3D'18'%20r%3D'10'%2F%3E%3Cpath%20d%3D'M25%2025l11%2011M14%2018h8M14%2023h5'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'471'%20y%3D'114'%20width%3D'14.96'%20height%3D'14.96'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(13%2022%2022)'%3E%3Cpath%20d%3D'M31%208H10l10%2012-10%2012h22'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'473'%20y%3D'38'%20width%3D'24.64'%20height%3D'24.64'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-9%2022%2022)'%3E%3Cpath%20d%3D'M6%2012h10v8H6ZM28%2012h10v8H28ZM17%2026h10v8H17Z'%2F%3E%3Cpath%20d%3D'M16%2016h12M22%2020v6'%2F%3E%3Ccircle%20cx%3D'16'%20cy%3D'16'%20r%3D'1.5'%2F%3E%3Ccircle%20cx%3D'28'%20cy%3D'16'%20r%3D'1.5'%2F%3E%3Ccircle%20cx%3D'22'%20cy%3D'26'%20r%3D'1.5'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'475'%20y%3D'85'%20width%3D'34.32'%20height%3D'34.32'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-18%2022%2022)'%3E%3Cpath%20d%3D'M7%2035V9M7%2035h30'%2F%3E%3Cpath%20d%3D'M9%2034c4%200%205-13%2010-13s5%2013%208%2013c2%200%203-11%207-11%203%200%203%2011%204%2011'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'479'%20y%3D'59'%20width%3D'34.32'%20height%3D'34.32'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-18%2022%2022)'%3E%3Cpath%20d%3D'M8%205l25%2013-17%206-7%2017L8%205Z'%2F%3E%3Cpath%20d%3D'M18%2025l12%2012'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'482'%20y%3D'204'%20width%3D'27.28'%20height%3D'27.28'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(13%2022%2022)'%3E%3Cpath%20d%3D'M14%204h16a4%204%200%200%201%204%204v28a4%204%200%200%201-4%204H14a4%204%200%200%201-4-4V8a4%204%200%200%201%204-4Z'%2F%3E%3Cpath%20d%3D'M18%209h8M14%2032h16'%2F%3E%3Ccircle%20cx%3D'22'%20cy%3D'36'%20r%3D'1.5'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'486'%20y%3D'14'%20width%3D'23.76'%20height%3D'23.76'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(17%2022%2022)'%3E%3Cpath%20d%3D'M7%209h30L25%2023v11l-6%203V23Z'%2F%3E%3Cpath%20d%3D'M14%2014h16'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'490'%20y%3D'151'%20width%3D'15.84'%20height%3D'15.84'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(15%2022%2022)'%3E%3Cpath%20d%3D'M8%205l25%2013-17%206-7%2017L8%205Z'%2F%3E%3Cpath%20d%3D'M18%2025l12%2012'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'498'%20y%3D'133'%20width%3D'11.440000000000001'%20height%3D'11.440000000000001'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%3E%3Ccircle%20cx%3D'22'%20cy%3D'22'%20r%3D'4'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'500'%20y%3D'34'%20width%3D'13.2'%20height%3D'13.2'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(12%2022%2022)'%3E%3Cpath%20d%3D'M29%208c-8-2-12%202-13%2010l-3%2017M8%2019h19M26%2025l6%207M32%2025l-6%207'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'500'%20y%3D'134'%20width%3D'13.2'%20height%3D'13.2'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(10%2022%2022)'%3E%3Cpath%20d%3D'M12%208H8v28h4M32%208h4v28h-4'%2F%3E%3Ctext%20x%3D'22'%20y%3D'17'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.5'%20font-family%3D'ui-monospace%2CSFMono-Regular%2CMenlo%2Cmonospace'%20font-size%3D'8.5'%20font-weight%3D'300'%3E101%3C%2Ftext%3E%3Ctext%20x%3D'22'%20y%3D'27'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.5'%20font-family%3D'ui-monospace%2CSFMono-Regular%2CMenlo%2Cmonospace'%20font-size%3D'8.5'%20font-weight%3D'300'%3E010%3C%2Ftext%3E%3Ctext%20x%3D'22'%20y%3D'37'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.5'%20font-family%3D'ui-monospace%2CSFMono-Regular%2CMenlo%2Cmonospace'%20font-size%3D'8.5'%20font-weight%3D'300'%3E111%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'501'%20y%3D'193'%20width%3D'22'%20height%3D'22'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-8%2022%2022)'%3E%3Ctext%20x%3D'22'%20y%3D'17'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.55'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'12'%20font-weight%3D'300'%3Edy%3C%2Ftext%3E%3Cpath%20d%3D'M8%2023h28'%2F%3E%3Ctext%20x%3D'22'%20y%3D'38'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.55'%20font-family%3D'ui-sans-serif%2Csystem-ui%2Csans-serif'%20font-size%3D'12'%20font-weight%3D'300'%3Edx%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'502'%20y%3D'83'%20width%3D'13.2'%20height%3D'13.2'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(13%2022%2022)'%3E%3Cpath%20d%3D'M7%2022c8-10%2017%2010%2025%200'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'502'%20y%3D'184'%20width%3D'12.32'%20height%3D'12.32'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(15%2022%2022)'%3E%3Cpath%20d%3D'M12%2018h22M12%2026h22'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'506'%20y%3D'226'%20width%3D'12.32'%20height%3D'12.32'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(-18%2022%2022)'%3E%3Cpath%20d%3D'M12%208H8v28h4M32%208h4v28h-4'%2F%3E%3Ctext%20x%3D'22'%20y%3D'17'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.5'%20font-family%3D'ui-monospace%2CSFMono-Regular%2CMenlo%2Cmonospace'%20font-size%3D'8.5'%20font-weight%3D'300'%3E101%3C%2Ftext%3E%3Ctext%20x%3D'22'%20y%3D'27'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.5'%20font-family%3D'ui-monospace%2CSFMono-Regular%2CMenlo%2Cmonospace'%20font-size%3D'8.5'%20font-weight%3D'300'%3E010%3C%2Ftext%3E%3Ctext%20x%3D'22'%20y%3D'37'%20text-anchor%3D'middle'%20fill%3D'none'%20stroke-width%3D'0.5'%20font-family%3D'ui-monospace%2CSFMono-Regular%2CMenlo%2Cmonospace'%20font-size%3D'8.5'%20font-weight%3D'300'%3E111%3C%2Ftext%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'508'%20y%3D'-2'%20width%3D'14.96'%20height%3D'14.96'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(16%2022%2022)'%3E%3Cpath%20d%3D'M10%2014h26M16%2014v20M30%2014v15c0%204%203%206%207%204'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3Csvg%20x%3D'509'%20y%3D'112'%20width%3D'14.96'%20height%3D'14.96'%20viewBox%3D'0%200%2044%2044'%20overflow%3D'visible'%3E%3Cg%20transform%3D'rotate(11%2022%2022)'%3E%3Cpath%20d%3D'M28%206c-8%200-8%208-8%2017s-1%2017-9%2017M19%207h9M10%2039h9'%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E%3C%2Fg%3E%3Cg%20fill%3D'none'%20stroke%3D'%23000'%20stroke-opacity%3D'1'%20stroke-width%3D'1.3'%20stroke-linecap%3D'round'%20stroke-linejoin%3D'round'%3E%3C%2Fg%3E%3C%2Fsvg%3E\\\")\";\n","import type { SxProps, Theme } from \"@mui/material/styles\";\nimport {\n DOODLE_PATTERN_TILE_HEIGHT,\n DOODLE_PATTERN_TILE_WIDTH,\n} from \"./doodlePattern\";\nimport { DOODLE_PATTERN_MASK_URL } from \"./generated/doodlePatternMask\";\n\nexport const doodlePatternCssVars = {\n \"--doodlePatternColor\":\n \"color-mix(in lab, var(--mui-palette-text-subscript) 75%, transparent 25%)\",\n} as const;\n\n/** Scaled tile size for compact surfaces such as modals. */\nexport const DOODLE_PATTERN_MODAL_MASK_SCALE = 0.7;\n\nexport const DOODLE_PATTERN_MODAL_MASK_SIZE = `${Math.round(\n DOODLE_PATTERN_TILE_WIDTH * DOODLE_PATTERN_MODAL_MASK_SCALE\n)}px ${Math.round(DOODLE_PATTERN_TILE_HEIGHT * DOODLE_PATTERN_MODAL_MASK_SCALE)}px`;\n\nexport type DoodlePatternBackgroundOptions = {\n repeat?: \"repeat\" | \"no-repeat\";\n size?: string;\n position?: string;\n};\n\nexport const getDoodlePatternBackgroundSx = (\n options: DoodlePatternBackgroundOptions = {}\n): SxProps<Theme> => {\n const tileSize = `${DOODLE_PATTERN_TILE_WIDTH}px ${DOODLE_PATTERN_TILE_HEIGHT}px`;\n const repeat = options.repeat ?? \"repeat\";\n const position =\n options.position ?? (repeat === \"no-repeat\" ? \"center\" : \"top left\");\n\n return {\n ...doodlePatternCssVars,\n backgroundColor: \"var(--doodlePatternColor)\",\n maskImage: DOODLE_PATTERN_MASK_URL,\n WebkitMaskImage: DOODLE_PATTERN_MASK_URL,\n maskRepeat: repeat,\n WebkitMaskRepeat: repeat,\n maskSize: options.size ?? tileSize,\n WebkitMaskSize: options.size ?? tileSize,\n maskPosition: position,\n WebkitMaskPosition: position,\n };\n};\n\nexport const getDoodlePatternModalBackgroundSx = (): SxProps<Theme> =>\n getDoodlePatternBackgroundSx({ size: DOODLE_PATTERN_MODAL_MASK_SIZE });\n","export * from \"./doodlePattern\";\nexport * from \"./generated/doodlePatternMask\";\nexport * from \"./doodlePatternStyles\";\n","import type { SxProps, Theme } from '@mui/material/styles'\nimport { doodlePatternCssVars } from '@/patterns/doodlePatternStyles'\n\nexport const MUI_MODAL_PAPER_RADIUS = '20px'\n\nexport const muiModalRootSx: SxProps<Theme> = {\n ...doodlePatternCssVars,\n '--closeIconColor': 'var(--mui-palette-error-main)',\n '--bgC': 'var(--mui-palette-background-default)',\n '--shadow': 'var(--shadow-outset-1)',\n '--modalOverlayBg': 'radial-gradient(ellipse 120% 100% at 50% 50%, var(--bgC) 0%, transparent 70%)',\n}\n\n/** Internal paper chrome. Pass as the first `sx` array item so host `slotProps.container.sx` merges instead of replacing `&.MuiPaper-root`. */\nexport const muiModalPaperSx: SxProps<Theme> = {\n '&.MuiPaper-root': {\n boxShadow: 'var(--shadow)',\n backgroundColor: 'var(--bgC)',\n borderRadius: MUI_MODAL_PAPER_RADIUS,\n display: 'flex',\n flexDirection: 'column',\n maxHeight: 'var(--max-h)',\n maxWidth: 'var(--max-w)',\n padding: 0,\n paddingTop: 0,\n width: '-webkit-fill-available',\n height: '-webkit-fill-available',\n },\n}\n","'use client'\nimport React, { useCallback, useMemo } from 'react'\nimport Modal, { type ModalProps } from '@mui/material/Modal'\nimport type { SxProps } from '@mui/material';\nimport type { Theme } from '@mui/material/styles';\nimport { useTheme, useMediaQuery } from '@mui/material';\nimport classnames from 'classnames';\nimport { CLASSNAMEs } from '@/_utils/_const/classNames';\nimport Tooltip from '@mui/material/Tooltip'\nimport { CloseIcon } from '@/icons/MuiIcon'\n\nimport { COMPONENTs } from '@/_utils/_const'\nimport { mergeSx } from '@/_utils/_func'\nimport { Box as Box } from '@/ele/Box'\nimport { Header as MuiHeader } from '@/ele/Typography'\nimport { ShinyPaper as MuiPaper } from '@/ele/Paper'\nimport { IconButton } from '@/ele/Button'\nimport { getDoodlePatternModalBackgroundSx } from '@/patterns'\nimport { MUI_MODAL_PAPER_RADIUS, muiModalPaperSx, muiModalRootSx } from './theme'\n\n/**\n * extended from Mui Modal\n * \n * [Doc](https://mui.com/material-ui/api/modal/)\n * \n * @param openProps - [open, setOpen]\n */\nexport default function MuiModal({\n children,\n openProps,\n size = {\n w: 'auto',\n h: 'auto',\n },\n maxHeight = '95vh', maxWidth = '95vw',\n\n onClose = () => { },\n title = \"\",\n titleIcon = null,\n closeButton = null,\n slots,\n slotProps,\n ...rest\n}: {\n children?: React.ReactNode;\n openProps: [\n boolean, // open\n (React.Dispatch<React.SetStateAction<boolean>> | React.Dispatch<boolean>) // setOpen\n ];\n size?: {\n w?: string | number;\n h?: string | number;\n },\n maxHeight?: string | number;\n maxWidth?: string | number;\n onClose?: () => void;\n title?: string;\n titleIcon?: React.ReactNode;\n closeButton?: React.ReactNode;\n\n slots?: {\n closeButton?: React.ElementType;\n closeIcon?: React.ElementType;\n };\n slotProps?: {\n container?: {\n style?: {\n bgColor?: string;\n shadow?: string;\n },\n sx?: SxProps<Theme>;\n },\n header?: {\n style?: {\n headerImg: string;\n }\n },\n closeButton?: Partial<React.ComponentProps<typeof IconButton>> & {\n closeIcon?: Partial<React.ComponentProps<typeof CloseIcon>>;\n };\n };\n} & Omit<ModalProps, \"open\" | \"title\">) {\n const [open, setOpen] = openProps\n\n // responsive behavior: on small screens modal should occupy nearly full\n // viewport automatically so users are not staring at a tiny dialog.\n const theme = useTheme();\n const isSmDown = useMediaQuery(theme.breakpoints.down('sm'));\n const effectiveSize = useMemo(() => {\n if (isSmDown) {\n return { width: 'calc(100vw - 2%)', height: 'calc(100vh - 2%)' };\n }\n return {\n width: size.w || 'auto',\n height: size.h || 'auto',\n };\n }, [isSmDown, size.w, size.h]);\n\n const { \n closeButton: CloseButtonSlot = IconButton,\n closeIcon: CloseIconSlot = CloseIcon,\n } = slots || {};\n\n const {\n closeButton: closeButtonAllProps,\n } = slotProps || {};\n\n const { closeIcon: closeIconProps, ...closeButtonProps } = closeButtonAllProps || {sx:{}};\n\n /**\n * Internal close handler that ensures modal state is updated\n */\n const handleClose = useCallback(() => {\n // If setOpen is available (it should be from openProps), use it\n if (typeof setOpen === 'function') {\n setOpen(false);\n }\n // Also call generic onClose if provided\n onClose?.();\n }, [setOpen, onClose]);\n\n /**\n * Determine the close button to render\n * If closeButton is provided, use it\n * Otherwise generate a default IconButton that triggers handleClose\n */\n const renderCloseButton = useMemo(() => {\n if (closeButton) return closeButton;\n \n return (\n <CloseButtonSlot onClick={handleClose} size=\"small\" aria-label=\"close\" {...closeButtonProps} sx={{\n padding: 0,\n ...closeButtonProps?.sx,\n }}>\n <CloseIconSlot\n {...closeIconProps}\n fontSize=\"1rem\"\n sx={{\n color: 'var(--closeIconColor)',\n ...closeIconProps?.sx,\n }}\n />\n </CloseButtonSlot>\n );\n }, [closeButton, handleClose, CloseButtonSlot, CloseIconSlot, closeButtonProps, closeIconProps]);\n\n // ensure the elemental modal classname is always present so tests can target it\n const modalClass = classnames(CLASSNAMEs.elemental.modal, rest.className);\n\n return (\n <Modal\n open={open}\n onClose={onClose}\n className={modalClass}\n {...rest}\n sx={{\n zIndex: COMPONENTs.modal.zIndex,\n padding: \"1%\",\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n background: 'transparent',\n\n // backdropFilter: 'blur(5px)', // causing performance issues when blurring large areas\n }}\n\n >\n <Box\n style={{\n \"--w\": effectiveSize.width,\n \"--h\": effectiveSize.height,\n \"--max-h\": maxHeight,\n \"--max-w\": maxWidth,\n ...(slotProps?.header?.style?.headerImg\n ? { '--headerImg': slotProps.header.style.headerImg }\n : {}),\n ...(slotProps?.container?.style?.bgColor\n ? { '--bgC': slotProps.container.style.bgColor }\n : {}),\n ...(slotProps?.container?.style?.shadow\n ? { '--shadow': slotProps.container.style.shadow }\n : {}),\n } as React.CSSProperties}\n sx={mergeSx(muiModalRootSx, {\n display: \"flex\",\n justifyContent: \"center\",\n height: {xs: 'calc(100vh - 2%)', md: 'var(--h)'},\n width: {xs: 'calc(100vw - 2%)', md: 'var(--w)'},\n borderRadius: MUI_MODAL_PAPER_RADIUS,\n })}>\n <MuiPaper sx={mergeSx(muiModalPaperSx, slotProps?.container?.sx)}>\n <BackgroundContainer overridePatternUrl={slotProps?.header?.style?.headerImg}>\n <MuiModalHeader\n title={title}\n titleIcon={titleIcon}\n closeButton={renderCloseButton}\n />\n\n <Box sx={{\n padding: \"16px\",\n paddingTop: \"8px\",\n flexGrow: 1,\n height: '-webkit-fill-available',\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n }}>\n {children}\n </Box>\n </BackgroundContainer>\n </MuiPaper>\n </Box>\n </Modal>\n )\n}\n\n/**\n * Background container for the modal\n * it places a background image and a gradient overlay\n */\nfunction BackgroundContainer({ children, overridePatternUrl }: {\n children?: React.ReactNode;\n overridePatternUrl?: string;\n}) {\n const isDefaultPattern = !overridePatternUrl;\n\n return (\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n flexGrow: 1,\n borderRadius: MUI_MODAL_PAPER_RADIUS,\n position: 'relative',\n }}>\n <Box \n sx={{\n position: 'absolute',\n inset: 0,\n pointerEvents: 'none',\n \n ...(isDefaultPattern\n ? getDoodlePatternModalBackgroundSx()\n : {\n backgroundImage: 'var(--headerImg)',\n backgroundSize: '27px',\n }),\n opacity: 0.2,\n }} \n />\n <Box sx={{\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n flexGrow: 1,\n borderRadius: MUI_MODAL_PAPER_RADIUS,\n position: 'relative',\n zIndex: 1,\n\n // Circular gradient overlay\n background: 'var(--modalOverlayBg)',\n }}>\n {children}\n </Box>\n </Box>\n )\n}\n\nfunction MuiModalHeader({\n title = '',\n titleIcon = null,\n closeButton = null,\n}: {\n title?: string;\n titleIcon?: React.ReactNode;\n closeButton?: React.ReactNode;\n}) {\n return (\n <Box sx={{\n display: 'flex',\n justifyContent: 'center',\n position: 'relative',\n }}>\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n paddingTop: 1,\n gap: 1,\n maxWidth: '50%',\n }}\n >\n <MuiHeader\n sx={{\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n whiteSpace: 'pre',\n }}\n >\n {title}\n </MuiHeader>\n {titleIcon && (\n <MuiHeader sx={{ display: 'flex', flexShrink: 0, }}>\n <Tooltip title=\"Icon\" arrow>\n <span>{titleIcon}</span>\n </Tooltip>\n </MuiHeader>\n )}\n </Box>\n\n {closeButton && (\n <Box sx={{ position: 'absolute', right: '8px', top: '4px' }}>{closeButton}</Box>\n )}\n </Box>\n\n );\n};\n\n","export {default as MuiModal} from './MuiModal'\nexport * from './theme'\n","export { default as Modal } from '@mui/material/Modal'\nexport * from './MuiModal'\n","export * from './src'\n","export const FIELD_TYPEs = {\n text: 'text-field',\n select: 'select-field',\n slider: 'slider-field',\n check: 'check-field',\n date: 'date-field',\n dateTime: 'date-time-field',\n toggleButton: 'toggle-button',\n autocomplete: 'autocomplete-field',\n switch: 'switch-field',\n number: 'number-field',\n tel: 'tel-field',\n json: 'json-field',\n custom: 'custom-field',\n textArray: 'text-array-field',\n fileUpload: 'file-upload-field',\n avatar: 'avatar-field',\n} as const\n","import type { SxProps, Theme } from '@mui/material/styles';\nimport { mergeSx } from '@/_utils/_func';\nimport type { Explanation, FieldConfig, FormTypeMap, InferFormDataType, RowConfig, StrictFormConfig } from './types';\nimport { FIELD_TYPEs } from './constants';\n\n/** Field `size` + host `sx`, flattened so array `sx` does not nest. */\nexport function mergeFieldSx(\n size?: { width?: number | string; height?: number | string },\n sx?: SxProps<Theme> | Record<string, unknown>,\n) {\n return mergeSx(\n size?.width != null ? { width: size.width } : undefined,\n size?.height != null ? { height: size.height } : undefined,\n sx,\n )\n}\n\nexport function collectRows<T extends FormTypeMap>(config: StrictFormConfig<T>): RowConfig<T>[] {\n const rows: RowConfig<T>[] = [];\n if ('schema' in config && config.schema) {\n rows.push(...config.schema as RowConfig<T>[]);\n }\n if ('steps' in config && config.steps) {\n config.steps.forEach((step) => rows.push(...step.schema as RowConfig<T>[]));\n }\n return rows;\n}\n\nexport function collectFields<T extends FormTypeMap>(config: StrictFormConfig<T>): FieldConfig<T>[] {\n return collectRows(config).flatMap((row) => row.fields);\n}\n\n/** Identity of registered fields (name/type/default). Used to avoid re-registering on config object identity changes. */\nexport function getFormFieldsSignature<T extends FormTypeMap>(config: StrictFormConfig<T>): string {\n return JSON.stringify(\n collectFields(config).map((field) => [field.name, field.type, field.defaultValue]),\n );\n}\n\nexport function getFieldExplanation(\n field: { explanation?: Explanation; explaination?: Explanation },\n): Explanation | undefined {\n return field.explanation ?? field.explaination;\n}\n\nexport function isEmptyFormValue(value: unknown): boolean {\n if (value === undefined || value === null) return true;\n if (typeof value === 'string' && value.trim() === '') return true;\n if (Array.isArray(value) && value.length === 0) return true;\n return false;\n}\n\nexport function validateFormSchema<T extends FormTypeMap>(config: StrictFormConfig<T>): StrictFormConfig<T> {\n const allowedTypes = new Set<string>(Object.values(FIELD_TYPEs));\n\n collectRows(config).forEach((row) => {\n row.fields.forEach((field) => {\n if (!allowedTypes.has(field.type as string)) {\n throw new Error(`Invalid field type \"${String(field.type)}\" in form schema`);\n }\n });\n });\n\n return config;\n}\n\nexport const getDefaultValues = <T extends FormTypeMap>(config: StrictFormConfig<T>, allEmpty: boolean): InferFormDataType<T> => {\n // when `allEmpty` is true we intentionally ignore any explicit\n // `defaultValues` supplied by the config; callers (such as the clear\n // helper) rely on receiving truly empty defaults for every field type.\n if (!allEmpty && config.defaultValues) return config.defaultValues;\n\n const defaults: Record<string, unknown> = {};\n\n collectRows(config).forEach((row) => {\n row.fields.forEach((field) => {\n const fieldName = field.name as string;\n if (field.defaultValue !== undefined && !allEmpty) {\n defaults[fieldName] = field.defaultValue;\n } else {\n const slotProps = (field as { slotProps?: { multiple?: boolean; min?: number } }).slotProps ?? {};\n switch (field.type) {\n case FIELD_TYPEs.text:\n defaults[fieldName] = '';\n break;\n case FIELD_TYPEs.select:\n defaults[fieldName] = slotProps?.multiple ? [] : '';\n break;\n case FIELD_TYPEs.check:\n defaults[fieldName] = [];\n break;\n case FIELD_TYPEs.slider: {\n const min = slotProps?.min ?? 0;\n defaults[fieldName] = min;\n break;\n }\n case FIELD_TYPEs.date:\n case FIELD_TYPEs.dateTime:\n defaults[fieldName] = '';\n break;\n case FIELD_TYPEs.toggleButton:\n defaults[fieldName] = '';\n break;\n case FIELD_TYPEs.autocomplete:\n defaults[fieldName] = slotProps?.multiple ? [] : '';\n break;\n case FIELD_TYPEs.switch:\n defaults[fieldName] = false;\n break;\n case FIELD_TYPEs.number: {\n const min = slotProps?.min ?? 0;\n defaults[fieldName] = min;\n break;\n }\n case FIELD_TYPEs.tel:\n defaults[fieldName] = '';\n break;\n case FIELD_TYPEs.json:\n defaults[fieldName] = null;\n break;\n case FIELD_TYPEs.textArray:\n defaults[fieldName] = [];\n break;\n case FIELD_TYPEs.fileUpload:\n defaults[fieldName] = [];\n break;\n case FIELD_TYPEs.custom:\n defaults[fieldName] = undefined;\n break;\n case FIELD_TYPEs.avatar:\n defaults[fieldName] = null;\n break;\n default:\n defaults[fieldName] = undefined;\n }\n }\n });\n });\n\n return defaults as InferFormDataType<T>;\n};\n","import { FormHelperText } from '@/ele/Form'\nimport type { FieldError } from 'react-hook-form'\n\n/**\n * Compute helper text string from possible sources (error, explicit errorMsg, slot helper, other fallbacks)\n */\nexport function getHelperText(\n error?: FieldError | null,\n errorMsg?: string | null,\n ...helpers: Array<string | undefined | null>\n): string | undefined {\n if (error) {\n const errMsg = (error as unknown as { message?: string })?.message;\n const nonEmptyErrorMsg = errorMsg || errMsg || helpers.find(Boolean);\n return String(nonEmptyErrorMsg ?? '');\n }\n return helpers.find(Boolean) ?? '';\n}\n\n/**\n * React component wrapper for rendering helper text consistently.\n * Use this in JSX: <FieldHelperText error={error} errorMsg={errorMsg} helpers={[slot?.helperText]} />\n */\nexport function FieldHelperText(props: {\n error?: FieldError | null;\n errorMsg?: string | null;\n helpers?: Array<string | undefined | null>;\n}) {\n const { error, errorMsg, helpers = [], } = props;\n const text = getHelperText(error, errorMsg, ...(helpers ?? []));\n if (!text) return null;\n return (\n <FormHelperText error={!!error}>\n {text}\n </FormHelperText>\n );\n}\n","'use client'\nimport React, { useState, useRef } from 'react'\nimport { ClickAwayListener } from '@/ele/Overlay'\nimport { styled } from '@mui/material/styles'\nimport { Tooltip } from '@/ele/Tooltip'\nimport { IconButton } from '@/ele/Button'\nimport { Box as MuiBox } from '@/ele/Box'\nimport { HelpOutlineIcon } from '@/icons/MuiIcon'\nimport type { Explanation } from '../_utils';\n\n/** MUI outlined `size=\"small\"` control height — keep the help icon on the input, not the helper text. */\nexport const FIELD_INPUT_CONTROL_HEIGHT_PX = 40\n\nconst FieldExplanation: React.FC<{\n label?: React.ReactNode;\n explanation?: Explanation;\n /** @deprecated Use explanation */\n explaination?: Explanation;\n /**\n * When the icon sits beside an outlined input, pin it to the control height\n * so helper/error text below the field does not pull it down.\n */\n alignToInput?: boolean;\n}> = ({label, explanation, explaination, alignToInput}) => {\n const popRef = useRef(null)\n const [open, setOpen] = useState(false)\n const content = explanation ?? explaination\n\n if (!content) return <>{label}</>\n\n const icon = (\n <MuiBox component=\"span\" sx={{ display: 'flex', alignItems: 'center', gap: 0.5, lineHeight: 1 }}>\n {label}\n <ClickAwayListener onClickAway={(e) => {\n if(popRef.current && e.target && isChildOf(popRef.current, e.target as HTMLElement)) return\n setOpen(false)\n }}>\n <Tooltip title={<Title explanation={content}/>} arrow open={open} \n slotProps={{\n popper:{ref:popRef}\n }}>\n <StyledIconButton onClick={(e)=>{ e.stopPropagation(); setOpen(true) }} tabIndex={-1}>\n <HelpOutlineIcon sx={{fontSize:\"14px\"}}/>\n </StyledIconButton>\n </Tooltip>\n </ClickAwayListener>\n </MuiBox>\n )\n\n if (!alignToInput) return icon\n\n return (\n <MuiBox\n data-field-explanation=\"input\"\n style={{ height: FIELD_INPUT_CONTROL_HEIGHT_PX }}\n sx={{\n display: 'flex',\n alignItems: 'center',\n flexShrink: 0,\n }}\n >\n {icon}\n </MuiBox>\n )\n}\nexport default FieldExplanation\n\nconst Title:React.FC<{\n explanation: Explanation;\n}> = ({explanation}) => {\n const {highlights,href,content=\"\"} = explanation ?? {}\n const reg = new RegExp(`(${highlights?.join(\"|\")})`, \"g\")\n const highlightedContent = content\n .split(reg)\n .map((part, index) => {\n if (highlights?.includes(part)) {\n return <MuiBox component=\"span\" key={index} sx={{\n color:\"var(--useform-warning)\",\n fontSize:\"1.2em\",\n fontWeight:\"bold\",\n }}>{part}</MuiBox>\n }\n return part\n }\n )\n\n\n return (\n <MuiBox>\n <MuiBox sx={{ fontWeight: 'bold', mb: 0.5 }}>{explanation?.title}</MuiBox>\n <MuiBox sx={{\n lineBreak:\"auto\",\n whiteSpace:\"pre-line\",\n }}>{highlightedContent}</MuiBox>\n {href?.label && \n <MuiBox component=\"a\" \n sx={{\n textDecoration:\"underline\",\n display:\"flex\",\n justifyContent:\"flex-end\",\n mt: 1\n }} \n href={href?.url} target=\"_blank\">\n {href?.label}\n </MuiBox>}\n </MuiBox>\n )\n}\n\nconst StyledIconButton = styled(IconButton)({\n \"&.MuiButtonBase-root.MuiIconButton-root\":{\n color:\"var(--useform-warning)\",\n border: \"none\",\n borderRadius: \"50%\",\n padding:\"2px\",\n marginLeft: \"4px\",\n background: \"transparent\",\n },\n \n})\n\nfunction isChildOf(parent:HTMLElement, child:HTMLElement):boolean {\n let node:HTMLElement|null = child\n while(node !== null){\n if(node === parent) return true\n node = node.parentElement as HTMLElement | null\n }\n return false\n}\n","import { Controller, useFormContext } from 'react-hook-form';\nimport dayjs from 'dayjs'\nimport { Box } from '@/ele/Box';\nimport { MuiXDatePicker } from '@/ele/DatePicker';\nimport { FieldConfig, FormTypeMap, InferFormDataType } from '../_utils';\nimport { FIELD_TYPEs } from '../_utils/constants';\nimport Explanation from './Explanation';\nimport { getFieldExplanation, mergeFieldSx } from '../_utils/helpers';\nimport { mergeSx } from '@/_utils/_func';\n\ninterface DateFieldProps<T extends FormTypeMap = FormTypeMap> {\n field: Extract<FieldConfig<T>, { type: typeof FIELD_TYPEs.date }>;\n}\n\nexport const DateField = <T extends FormTypeMap = FormTypeMap>({ field }: DateFieldProps<T>) => {\n const { control, getValues } = useFormContext();\n const {\n name,\n label,\n sx,\n size,\n slotProps,\n errorMsg,\n defaultValue,\n } = field;\n\n const defaultVal = defaultValue as string | Date | undefined;\n\n return (\n <Controller\n control={control}\n name={name}\n defaultValue={defaultVal ?? null}\n render={({ field: { onChange, value }, fieldState: { error } }) => (\n <Box sx={mergeSx({ display: 'flex', alignItems: 'flex-start', gap: 1 }, mergeFieldSx(size, sx))}>\n <MuiXDatePicker\n {...slotProps}\n label={label}\n value={value ? dayjs(value) : null}\n onChange={(d) => {\n if (!d) {\n onChange(null);\n field.onChange?.(null, getValues() as InferFormDataType<T>);\n return;\n }\n const maybeDate = typeof d.toDate === 'function' ? d.toDate() : (d);\n onChange(maybeDate as Date);\n field.onChange?.(maybeDate as Date, getValues() as InferFormDataType<T>);\n }}\n\n slotProps={{\n ...(slotProps?.slotProps),\n textField: {\n ...(slotProps?.slotProps?.textField),\n error: !!error,\n helperText: error ? (errorMsg || error.message) : undefined,\n },\n openPickerIcon: {\n sx: { fontSize: '1.25rem' }\n }\n }}\n />\n <Explanation alignToInput explanation={getFieldExplanation(field)} />\n </Box>\n )}\n />\n );\n};\n\nexport default DateField;\n","import { Controller, useFormContext } from 'react-hook-form'\nimport dayjs from 'dayjs'\nimport { Box } from '@/ele/Box'\nimport { MuiXDateTimePicker } from '@/ele/DatePicker'\nimport { FieldConfig, FormTypeMap } from '../_utils'\nimport { FIELD_TYPEs } from '../_utils/constants'\nimport Explanation from './Explanation'\nimport { getFieldExplanation, mergeFieldSx } from '../_utils/helpers';\nimport { mergeSx } from '@/_utils/_func'\n\ninterface DateTimeFieldProps<T extends FormTypeMap = FormTypeMap> {\n field: Extract<FieldConfig<T>, { type: typeof FIELD_TYPEs.dateTime }>;\n}\n\nexport const DateTimeField = <T extends FormTypeMap = FormTypeMap>({ field }: DateTimeFieldProps<T>) => {\n const { control } = useFormContext()\n const { name, label, sx, size, errorMsg, defaultValue, slotProps } = field\n\n\n return (\n <Controller\n control={control}\n name={name}\n defaultValue={defaultValue}\n render={({ field: { onChange, value }, fieldState: { error } }) => (\n <Box sx={mergeSx({ display: 'flex', alignItems: 'flex-start', gap: 1 }, mergeFieldSx(size, sx))}>\n <MuiXDateTimePicker\n {...(slotProps)}\n label={label}\n value={value ? dayjs(value) : null}\n onChange={(d) => {\n if (!d) return onChange(null)\n const maybeDate = typeof d.toDate === 'function' ? d.toDate() : (d)\n onChange(maybeDate)\n }}\n slotProps={{\n ...(slotProps),\n textField: {\n ...((slotProps?.slotProps)?.textField),\n error: !!error,\n helperText: error ? (errorMsg || error.message) : undefined,\n }\n }}\n />\n <Explanation alignToInput explanation={getFieldExplanation(field)} />\n </Box>\n )}\n />\n )\n}\n\nexport default DateTimeField\n","import { Controller, useFormContext } from 'react-hook-form';\nimport { Box } from '@/ele/Box';\nimport { FormControl, FormLabel } from '@/ele/Form';\nimport { FieldHelperText } from '../_utils/helperText';\nimport { FieldConfig, FormTypeMap, InferFormDataType } from '../_utils';\nimport Explanation from './Explanation';\nimport { FIELD_TYPEs } from '../_utils/constants';\nimport type { TelSlotProps } from '../_utils/slotProps';\nimport { TelPhoneInput } from '@/ele/Input/src/TelPhoneInput';\nimport { getFieldExplanation, mergeFieldSx } from '../_utils/helpers';\n\ninterface TelFieldProps<T extends FormTypeMap = FormTypeMap> {\n field: Extract<FieldConfig<T>, { type: typeof FIELD_TYPEs.tel }>;\n}\n\nexport const TelField = <T extends FormTypeMap = FormTypeMap>({ field }: TelFieldProps<T>) => {\n const { control, getValues } = useFormContext();\n const { name, label, required, disabled, sx, size, slotProps, errorMsg, defaultValue } = field;\n\n const telSlot = slotProps as TelSlotProps | undefined;\n\n return (\n <Controller\n control={control}\n name={name}\n defaultValue={defaultValue ?? ''}\n render={({ field: controllerField, fieldState: { error } }) => {\n const { onChange, value } = controllerField;\n const helperTextNode = <FieldHelperText error={error} errorMsg={errorMsg} helpers={[field.helperText]} />;\n\n return (\n <FormControl\n disabled={disabled}\n required={required}\n error={!!error}\n fullWidth\n size=\"small\"\n sx={mergeFieldSx(size, sx)}\n >\n <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'flex-start', mb: 0.5 }}>\n <FormLabel component=\"legend\" sx={{ mr: 1 }}>{label}</FormLabel>\n <Box sx={{ display: 'inline-flex' }}>\n <Explanation explanation={getFieldExplanation(field)} />\n </Box>\n </Box>\n\n <Box sx={{ py: 1, width: '100%' }}>\n <TelPhoneInput\n {...telSlot}\n value={value ?? ''}\n onChange={(v) => {\n const next = v ?? '';\n onChange(next);\n (field).onChange?.(next, getValues() as InferFormDataType<T>);\n }}\n defaultCountry={telSlot?.defaultCountry}\n placeholder={telSlot?.placeholder}\n inputProps={{\n ...telSlot?.inputProps,\n }}\n iconComponent={telSlot?.iconComponent}\n disabled={disabled}\n error={!!error}\n />\n </Box>\n\n {helperTextNode}\n </FormControl>\n );\n }}\n />\n );\n};\n","import React from 'react';\nimport { useFormContext, Controller } from 'react-hook-form';\nimport { Box } from '@/ele/Box';\nimport { FormControl, FormLabel } from '@/ele/Form';\nimport { FieldHelperText } from '../_utils/helperText';\nimport { FieldConfig, FormTypeMap, FIELD_TYPEs } from '../_utils';\nimport Explanation from './Explanation';\nimport { ReactDropzone } from '@/compound/FileUploader';\nimport { FileUploadSlotProps } from '../_utils/slotProps';\nimport PreviewableFile from '@/_utils/classes/PreviewableFile';\nimport { getFieldExplanation } from '../_utils/helpers';\n\ninterface FileUploadFieldProps<T extends FormTypeMap> {\n field: Extract<FieldConfig<T>, { type: typeof FIELD_TYPEs.fileUpload }>;\n}\n\nexport const FileUploadField = <T extends FormTypeMap>({ field }: FileUploadFieldProps<T>) => {\n const { control } = useFormContext();\n const {\n name,\n label,\n required,\n slotProps = {},\n errorMsg\n } = field;\n\n const { maxFiles = 1, accept, dropzoneType } = (slotProps as FileUploadSlotProps);\n\n return (\n <Controller\n control={control}\n name={name}\n render={({ field: { value, onChange }, fieldState: { error } }) => {\n const files = (value as PreviewableFile[]) || [];\n \n const setFiles: React.Dispatch<React.SetStateAction<PreviewableFile[]>> = (newFiles) => {\n if (typeof newFiles === 'function') {\n onChange(newFiles(files));\n } else {\n onChange(newFiles);\n }\n };\n \n return (\n <Box>\n <FormControl error={!!error} fullWidth required={required}>\n <FormLabel sx={{ display: 'flex', alignItems: 'center', gap: 1, mb: 1 }} required={required}>\n {label}\n {(getFieldExplanation(field)) && <Explanation explanation={getFieldExplanation(field)} />}\n </FormLabel>\n <ReactDropzone\n filesProps={[files, setFiles]}\n maxFiles={maxFiles}\n accept={accept}\n dropzoneType={dropzoneType}\n error={!!error}\n />\n <FieldHelperText error={error} errorMsg={errorMsg}/>\n </FormControl>\n </Box>\n );\n }}\n />\n );\n};\n","import React from 'react';\nimport { Controller, useFormContext, useWatch } from 'react-hook-form';\nimport { Box, Stack } from '@/ele/Box';\nimport { FormControl, FormLabel } from '@/ele/Form';\nimport { EditIcon } from '@/icons/MuiIcon';\n\nimport { FieldHelperText } from '../_utils/helperText';\nimport { AvatarButton } from '@/ele/Avatar';\nimport { MuiModal } from '@/ele/Modal';\nimport { Cropper } from '@/ele/Image';\n\nimport PreviewableFile from '@/_utils/classes/PreviewableFile';\nimport { FieldConfig, FormTypeMap, InferFormDataType } from '../_utils';\nimport { FIELD_TYPEs } from '../_utils/constants';\nimport type { AvatarSlotProps } from '../_utils/slotProps';\nimport Explanation from './Explanation';\nimport { CLASSNAMEs } from '@/_utils/_const/classNames';\nimport { getFieldExplanation, mergeFieldSx } from '../_utils/helpers';\n\ninterface AvatarFieldProps<T extends FormTypeMap = FormTypeMap> {\n field: Extract<FieldConfig<T>, { type: typeof FIELD_TYPEs.avatar }>;\n}\n\nconst AVATAR_CROP_CONFIG = { width: 200, unit: 'px' } as const;\n\nconst AvatarCropPreview = React.forwardRef<HTMLCanvasElement>((_, ref) => {\n return (\n <canvas\n ref={ref}\n width={200}\n height={200}\n style={{\n width: 200,\n height: 200,\n maxWidth: '100%',\n maxHeight: '100%',\n border: '1px dashed grey',\n borderRadius: '50%',\n objectFit: 'contain',\n backgroundColor: 'transparent',\n }}\n />\n );\n});\n\nAvatarCropPreview.displayName = 'AvatarCropPreview';\n\nfunction acceptToInputAccept(accept: AvatarSlotProps['accept']): string {\n if (!accept) return 'image/*';\n if (typeof accept === 'string') return accept;\n\n const parts: string[] = [];\n Object.entries(accept).forEach(([mime, exts]) => {\n parts.push(mime);\n if (Array.isArray(exts)) parts.push(...exts);\n });\n return parts.length ? parts.join(',') : 'image/*';\n}\n\nexport const AvatarField = <T extends FormTypeMap = FormTypeMap>({ field }: AvatarFieldProps<T>) => {\n const watchKey = (field.slotProps as AvatarSlotProps | undefined)?.watchAvatarNameKey;\n if (watchKey) {\n return <AvatarFieldWithNameWatch field={field} watchKey={watchKey} />;\n }\n return <AvatarFieldView field={field} watchedName={undefined} />;\n};\n\nconst AvatarFieldWithNameWatch = <T extends FormTypeMap>({\n field,\n watchKey,\n}: AvatarFieldProps<T> & { watchKey: string }) => {\n const { control } = useFormContext();\n const watchedName = useWatch({\n control,\n name: watchKey as never,\n });\n return <AvatarFieldView field={field} watchedName={watchedName} />;\n};\n\nconst AvatarFieldView = <T extends FormTypeMap>({\n field,\n watchedName,\n}: AvatarFieldProps<T> & { watchedName: unknown }) => {\n const { control, getValues, setValue } = useFormContext();\n\n const {\n name,\n label,\n required,\n disabled,\n sx,\n size,\n slotProps,\n errorMsg,\n defaultValue,\n } = field;\n\n const avatarSlot = slotProps as AvatarSlotProps | undefined;\n const [editorOpen, setEditorOpen] = React.useState(false);\n const [editorFiles, setEditorFiles] = React.useState<PreviewableFile[]>([]);\n const initialFileRef = React.useRef<PreviewableFile | null>(null);\n const transientBlobUrlsRef = React.useRef<string[]>([]);\n\n const inputAccept = acceptToInputAccept(avatarSlot?.accept);\n const backgroundIcon = (typeof avatarSlot?.useBackgroundIcon === 'function'\n ? avatarSlot?.useBackgroundIcon()\n : null) || avatarSlot?.backgroundIcon;\n\n const displayNameRaw =\n (avatarSlot?.watchAvatarNameKey ? watchedName : undefined) ??\n avatarSlot?.avatarName ??\n avatarSlot?.name ??\n '';\n const displayName = String(displayNameRaw ?? '').trim() || undefined;\n\n return (\n <Controller\n control={control}\n name={name}\n defaultValue={(defaultValue ?? null) as PreviewableFile | null}\n render={({ field: { onChange, value }, fieldState: { error } }) => {\n const fileValue = (value ?? null) as PreviewableFile | null;\n const src = fileValue?.url || fileValue?.blobUrl || '';\n\n // unified helper text component\n // use FieldHelperText to render slot or validation messages consistently\n\n const openEditor = () => {\n initialFileRef.current = fileValue;\n setEditorFiles(fileValue ? [fileValue] : []);\n setEditorOpen(true);\n };\n\n const closeEditor = () => {\n setEditorOpen(false);\n const init = initialFileRef.current;\n setEditorFiles(init ? [init] : []);\n\t\t\t// revoke any blob urls created during this editor session\n\t\t\ttransientBlobUrlsRef.current.forEach((u) => {\n\t\t\t\ttry { URL.revokeObjectURL(u); } catch { /* ignore */ }\n\t\t\t});\n\t\t\ttransientBlobUrlsRef.current = [];\n };\n\n const handleSave = async (url: string) => {\n const next = url\n ? await new PreviewableFile({ url }).downloadFile()\n : null;\n\t\t\t// url from Cropper is a blob URL we no longer need once downloaded\n\t\t\tif (url) {\n\t\t\t\ttry { URL.revokeObjectURL(url); } catch { /* ignore */ }\n\t\t\t}\n\n onChange(next);\n // ensure react-hook-form value is set directly as well\n try { setValue(String(name), next, { shouldDirty: true, shouldTouch: true }); } catch { /* ignore */ };\n field.onChange?.(next, getValues() as InferFormDataType<T>);\n\n initialFileRef.current = next;\n setEditorFiles(next ? [next] : []);\n setEditorOpen(false);\n };\n\n // onFileSelect handler used by Cropper's built-in selector\n const onFileSelectFromSelector = (file: File | null) => {\n if (!file) {\n setEditorFiles([]);\n return;\n }\n\n const blobUrl = URL.createObjectURL(file);\n transientBlobUrlsRef.current.push(blobUrl);\n\n const next = new PreviewableFile({\n path: file.name,\n blobUrl,\n filename: file.name,\n mimeType: file.type,\n size: file.size,\n fileType: file.type.startsWith('image/') ? 'image' : 'other',\n });\n\n setEditorFiles([next]);\n };\n\n return (\n <FormControl\n className={CLASSNAMEs.compound.useForm.avatarField}\n disabled={disabled}\n required={required}\n error={!!error}\n fullWidth\n size=\"small\"\n sx={mergeFieldSx(size, sx)}\n >\n <Stack direction=\"column\" alignItems=\"center\" justifyContent=\"center\" gap={0.5}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, mb: 1 }}>\n <FormLabel component=\"legend\">{label}</FormLabel>\n <Explanation explanation={getFieldExplanation(field)} />\n </Box>\n\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1, }}>\n <Box sx={{ cursor: disabled ? 'not-allowed' : 'pointer' }}>\n <AvatarButton\n onClick={disabled ? undefined : openEditor}\n size={avatarSlot?.size}\n dim={avatarSlot?.dim}\n name={displayName}\n src={src}\n backgroundIcon={src ? undefined : backgroundIcon}\n icon={<EditIcon fontSize=\"small\" />}\n aria-label={label || 'Avatar'}\n />\n </Box>\n </Box>\n\n <FieldHelperText error={error} errorMsg={errorMsg} helpers={[field.helperText]} />\n </Stack>\n\n {editorOpen ? (\n <MuiModal\n className={CLASSNAMEs.elemental.modal}\n openProps={[editorOpen, setEditorOpen]}\n onClose={closeEditor}\n title={label || 'Avatar'}\n size={{ w: '70vw', h: '80vh' }}\n >\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n gap: 2,\n overflow: 'hidden',\n }}>\n <Box sx={{ flex: '1 1 auto', minHeight: 0 }}>\n <Cropper\n setImgNull={() => setEditorFiles([])}\n blobUrl={editorFiles?.[0]?.blobUrl || ''}\n onSave={handleSave}\n onClear={() => handleSave('')}\n circularCrop\n defaultRatio={1}\n resizeCropEnabled\n cropConfig={AVATAR_CROP_CONFIG}\n PreviewRenderer={AvatarCropPreview}\n showFileSelector\n fileSelectorAccept={inputAccept}\n fileSelectorButtonLabel=\"Select Image\"\n onFileSelect={onFileSelectFromSelector}\n />\n </Box>\n </Box>\n </MuiModal>\n ) : null}\n\n \n </FormControl>\n );\n }}\n />\n );\n};\n","export const jsonEditorVars = {\n '--json-editor-text-primary': 'var(--mui-palette-text-primary)',\n '--json-editor-shadow-border-1': 'var(--mui-palette-shadow-border-1)',\n '--json-editor-wrapper-border-color': 'var(--mui-palette-border-1)',\n '--json-editor-select-border-color': 'var(--mui-palette-border-1)',\n '--json-editor-select-option-bg': 'var(--mui-palette-background-default)',\n '--json-editor-wrapper-border-color-error': 'var(--mui-palette-error-main)',\n} as const\n","'use client'\nimport React from 'react'\nimport CodeMirror from '@uiw/react-codemirror'\nimport { json } from '@codemirror/lang-json'\nimport { type TextEditorProps, } from 'json-edit-react'\nimport { githubLight, githubDark } from '@uiw/codemirror-theme-github'\nimport { useColorScheme } from '@mui/material/styles'\n\nconst jsonExtensions = [json()]\n\nconst CodeEditor: React.FC<TextEditorProps> = ({\n value,\n onChange,\n onKeyDown,\n}) => {\n const { mode } = useColorScheme()\n const theme = mode===\"light\"?githubLight:githubDark\n\n return (\n <CodeMirror\n theme={theme}\n value={value}\n width=\"100%\"\n extensions={jsonExtensions}\n onChange={onChange}\n onKeyDown={onKeyDown}\n />\n )\n}\n\nexport default CodeEditor\n","'use client'\nimport React, { Suspense, useCallback, useMemo, useRef } from 'react'\nimport { \n JsonEditor as OriginalJsonEditor, githubDarkTheme, githubLightTheme, \n type JsonData,\n type TextEditorProps,\n} from 'json-edit-react'\nimport { useColorScheme, styled } from '@mui/material/styles'\nimport { Box } from '@/ele/Box'\n\nimport { jsonEditorVars } from './theme'\n\nconst CodeEditor = React.lazy(() => import('./CodeEditor'))\n\n/**\n * using json-edit-react to build a structured output\n * \n * [Doc] https://github.com/CarlosNZ/json-edit-react\n */\nconst JsonEditor:React.FC<React.ComponentProps<typeof OriginalJsonEditor> & {\n error?: boolean\n}> = ({\n error=false,...jsonEditorProps\n}) => {\n const { mode } = useColorScheme()\n const dataRef = useRef(jsonEditorProps.data)\n dataRef.current = jsonEditorProps.data\n\n const customedTheme = useMemo(() => {\n const theme = mode===\"light\"?githubLightTheme:githubDarkTheme\n return {\n ...theme,\n styles:{\n ...theme.styles,\n input:[\"var(--json-editor-text-primary)\",{\n border:\"none\",\n boxShadow:\"var(--json-editor-shadow-border-1)\",\n }],\n },\n }\n }, [mode])\n\n const TextEditor = useCallback((props: TextEditorProps) => (\n <Suspense\n fallback={\n <div className=\"loading\" style={{ height: `${getLineHeight(dataRef.current)}lh` }}>\n Loading code editor...\n </div>\n }\n >\n <CodeEditor {...props}/>\n </Suspense>\n ), [])\n\n return (\n <StyledWrapper error={error}>\n <OriginalJsonEditor\n maxWidth=\"unset\"\n translations={{\n ITEM_SINGLE: '{{count}} item',\n ITEMS_MULTIPLE: '{{count}} items',\n KEY_NEW: 'Enter_new_key',\n ERROR_KEY_EXISTS: 'Key already exists',\n ERROR_INVALID_JSON: 'Invalid JSON',\n ERROR_UPDATE: 'Update unsuccessful',\n ERROR_DELETE: 'Delete unsuccessful',\n ERROR_ADD: 'Adding node unsuccessful',\n DEFAULT_STRING: 'New data!',\n DEFAULT_NEW_KEY: 'key',\n SHOW_LESS: '(Show less)',\n }}\n theme={customedTheme}\n {...jsonEditorProps}\n \n TextEditor={TextEditor}\n />\n </StyledWrapper> \n )\n\n}\n\nexport default JsonEditor\n\n/**\n * get the line height of the json data\n * \n * https://github.com/CarlosNZ/json-edit-react/blob/d6e3c39d1fe876fa8ed267301ebecf128132b602/demo/src/App.tsx#L9\n */\nconst getLineHeight = (data: JsonData) => JSON.stringify(data, null, 2).split('\\n').length\n\nconst StyledWrapper = styled(Box,{\n shouldForwardProp: (prop) => prop !== 'error',\n})<{ error: boolean }>(({ theme, }) => ({\n ...jsonEditorVars,\n\n // box\n \"&\": {\n flex: 1,\n minWidth: 0,\n minHeight: 0,\n height: \"100%\",\n display: \"flex\",\n flexDirection: \"column\",\n overflow: \"hidden\",\n },\n \"& > *\": {\n flex: 1,\n minHeight: 0,\n minWidth: 0,\n boxShadow: \"inset 0 0 0px 2px var(--json-editor-wrapper-border-color)\",\n overflow: \"auto\",\n },\n\n // json-edit-react does not set a pointer on collapse\n \"& .jer-collapse-icon, & .jer-accordion-icon, & .jer-clickzone, & .jer-collection-header-row\": {\n cursor: \"pointer\",\n },\n \n // select\n \"& .jer-select\":{\n background:\"transparent\",\n border:\"1px solid var(--json-editor-select-border-color)\",\n boxShadow: \"none\",\n\n \"& select\":{\n color: 'var(--json-editor-text-primary)',\n padding:\"0 8px\",\n\n \"& option\":{\n background: \"var(--json-editor-select-option-bg)\",\n },\n },\n },\n\n // boolean\n \"& .jer-input-boolean\":{\n accentColor: theme.palette.primary.main,\n border:\"1px solid var(--json-editor-select-border-color)\",\n },\n\n // button group\n \"& .jer-confirm-buttons\":{\n \"&>div\":{\n display:\"flex\", // center align the entire group\n },\n },\n\n // input \n \"& .jer-input-text\":{\n boxShadow: \"none\",\n },\n \"& .jer-input-component\":{\n \"&>input\":{\n padding:\"2px 8px\",\n color: theme.palette.text.primary,\n background: 'transparent',\n border: `1px solid ${theme.palette.divider}`,\n }\n },\n \"& .jer-input-new-key\":{\n padding:\"5px 8px\",\n color: theme.palette.text.primary,\n background: 'transparent',\n border: `1px solid ${theme.palette.divider}`,\n },\n\n // key\n \"& .jer-key-edit\":{\n border:\"none\",\n padding:\"0 8px\",\n \":focus\":{\n border:\"none\",\n }\n },\n\n // row\n \"& .jer-value-main-row\":{\n alignItems:\"flex-start\",\n },\n\n variants: [\n {\n props: { error: true },\n style: {\n \"--json-editor-wrapper-border-color\": \"var(--json-editor-wrapper-border-color-error)\",\n },\n }\n ]\n}))\n","export {default as JsonEditor} from './JsonEditor'\n","export * from './JsonEditor'\n","export * from './src'\n","'use client'\nimport { Controller, useFormContext } from 'react-hook-form'\nimport { Box } from '@/ele/Box'\nimport { FormControl, FormLabel } from '@/ele/Form'\nimport { FieldHelperText } from '../_utils/helperText' \nimport { JsonEditor } from '@/ele/JsonEditor'\nimport Explanation from './Explanation'\nimport { FieldConfig, FormTypeMap, FIELD_TYPEs } from '../_utils';\nimport { getFieldExplanation } from '../_utils/helpers';\n\ninterface JSONEditorFieldProps<T extends FormTypeMap> {\n field: Extract<FieldConfig<T>, { type: typeof FIELD_TYPEs.json }>;\n}\n\nexport const JSONEditorField= <T extends FormTypeMap = FormTypeMap>({ field }: JSONEditorFieldProps<T>) => {\n const { control } = useFormContext()\n const { name, label, required, errorMsg } = field\n\n return (\n <Controller\n control={control}\n name={name}\n render={({ field: { value, onChange }, fieldState: { error } }) => {\n // slot props remain available for other customization; helperText no longer used\n\n return (\n <Box sx={{ display: 'flex', alignItems: 'center' }}>\n <FormControl error={!!error} required={required} sx={{ width: '-webkit-fill-available', gap: 1 }}>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <FormLabel component=\"legend\">{label}</FormLabel>\n {(getFieldExplanation(field)) && <Box sx={{ display: 'inline-flex' }}><Explanation explanation={getFieldExplanation(field)} /></Box>}\n </Box>\n <JsonEditor\n error={!!error}\n data={value}\n setData={(v: unknown) => {\n if (typeof v === 'function') return onChange(value)\n onChange(v as Record<string, unknown> | null | undefined)\n }}\n {...(field.slotProps?.editorProps || {})}\n />\n\n <FieldHelperText error={error} errorMsg={errorMsg} helpers={[field.helperText]} />\n </FormControl>\n </Box>\n )\n }}\n />\n )\n}","import React from 'react';\nimport { Controller, useFormContext, type FieldError } from 'react-hook-form';\nimport { Box } from '@/ele/Box';\nimport { FormLabel, FormControl } from '@/ele/Form';\nimport { FieldHelperText } from '../_utils/helperText';\nimport { GitHubPicker, OptionClass, type OptionParams } from '@/ele/Autocomplete';\nimport { FieldConfig, FormTypeMap, InferFormDataType } from '../_utils';\nimport { getFieldExplanation, mergeFieldSx } from '../_utils/helpers';\nimport Explanation from './Explanation';\nimport { FIELD_TYPEs } from '../_utils/constants';\nimport type { AutocompleteSlotProps } from '../_utils/slotProps';\n\ninterface AutocompleteFieldProps<T extends FormTypeMap = FormTypeMap> {\n field: Extract<FieldConfig<T>, { type: typeof FIELD_TYPEs.autocomplete }>;\n}\n\ntype AutocompleteUseOptions = NonNullable<AutocompleteSlotProps['useOptions']>;\n\nconst EMPTY_OPTIONS: OptionParams[] = [];\n\nfunction toOptionClass(option: OptionParams | OptionClass): OptionClass {\n return option instanceof OptionClass ? option : new OptionClass(option as OptionParams);\n}\n\nexport const AutocompleteField = <T extends FormTypeMap = FormTypeMap>({ field }: AutocompleteFieldProps<T>) => {\n const acSlot = field.slotProps as AutocompleteSlotProps | undefined;\n if (acSlot?.useOptions) {\n return <AutocompleteFieldWithOptions field={field} useOptions={acSlot.useOptions} />;\n }\n return <AutocompleteFieldView field={field} options={acSlot?.options ?? EMPTY_OPTIONS} />;\n};\n\nconst AutocompleteFieldWithOptions = <T extends FormTypeMap>({\n field,\n useOptions,\n}: AutocompleteFieldProps<T> & { useOptions: AutocompleteUseOptions }) => {\n const { options = EMPTY_OPTIONS } = useOptions();\n return <AutocompleteFieldView field={field} options={options} />;\n};\n\nconst AutocompleteFieldView = <T extends FormTypeMap>({\n field,\n options,\n}: AutocompleteFieldProps<T> & { options: OptionParams[] }) => {\n const { control, getValues } = useFormContext();\n const {\n name,\n label,\n required,\n disabled,\n sx,\n size,\n slotProps,\n errorMsg,\n defaultValue,\n } = field;\n\n const acSlot = slotProps as AutocompleteSlotProps | undefined;\n const mergedOptions = React.useMemo(\n () => options.map(toOptionClass),\n [options],\n );\n\n return (\n <Controller\n control={control}\n name={name}\n defaultValue={defaultValue}\n render={({ field: { onChange: controllerOnChange, value }, fieldState: { error } }) => (\n <AutocompletePicker\n value={value}\n controllerOnChange={controllerOnChange}\n mergedOptions={mergedOptions}\n acSlot={acSlot}\n disabled={disabled}\n required={required}\n error={error}\n errorMsg={errorMsg}\n helperText={field.helperText}\n label={label}\n size={size}\n sx={sx}\n explanation={getFieldExplanation(field)}\n onFieldChange={(next) => {\n field.onChange?.(next, getValues() as InferFormDataType<T>);\n }}\n />\n )}\n />\n );\n};\n\ntype AutocompletePickerProps = {\n value: unknown;\n controllerOnChange: (value: unknown) => void;\n mergedOptions: OptionClass[];\n acSlot: AutocompleteSlotProps | undefined;\n disabled?: boolean;\n required?: boolean;\n error: FieldError | undefined;\n errorMsg?: string;\n helperText?: string;\n label?: string;\n size?: { width?: number | string; height?: number | string };\n sx?: Record<string, unknown>;\n explanation?: React.ComponentProps<typeof Explanation>['explanation'];\n onFieldChange: (next: unknown) => void;\n};\n\nfunction AutocompletePicker({\n value,\n controllerOnChange,\n mergedOptions,\n acSlot,\n disabled,\n required,\n error,\n errorMsg,\n helperText,\n label,\n size,\n sx,\n explanation,\n onFieldChange,\n}: AutocompletePickerProps) {\n const [selectedIds, setSelectedIds] = React.useState<string[]>(\n Array.isArray(value) ? value : (value ? [value as string] : []),\n );\n\n React.useEffect(() => {\n const next = Array.isArray(value) ? value : (value ? [value as string] : []);\n setSelectedIds(next as string[]);\n }, [value]);\n\n return (\n <FormControl\n disabled={disabled}\n required={required}\n error={!!error}\n fullWidth\n size=\"small\"\n sx={mergeFieldSx(size, sx)}\n >\n <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'flex-start' }}>\n <FormLabel component=\"legend\">{label}</FormLabel>\n <Explanation explanation={explanation} />\n </Box>\n <Box sx={{ py: 1 }}>\n <GitHubPicker\n options={mergedOptions}\n variant={acSlot?.variant}\n color={acSlot?.color}\n multiple={acSlot?.multiple ?? true}\n selectedIdProps={[selectedIds, setSelectedIds]}\n onChange={(ids) => {\n if (acSlot?.multiple) {\n controllerOnChange(ids);\n onFieldChange(ids);\n } else {\n const single = Array.isArray(ids) ? ids[0] ?? '' : ids ?? '';\n controllerOnChange(single);\n onFieldChange(single);\n }\n }}\n onDelete={(id: string) => {\n const next = (selectedIds || []).filter((s) => s !== id);\n if (acSlot?.multiple ?? true) {\n controllerOnChange(next);\n onFieldChange(next);\n } else {\n controllerOnChange('');\n onFieldChange('');\n }\n }}\n error={!!error}\n />\n </Box>\n <FieldHelperText error={error} errorMsg={errorMsg} helpers={[helperText]} />\n </FormControl>\n );\n}\n","// Main entry point for the UI library\n//\n// Highlighter / layout widgets stay on dedicated subpaths so WebContainer\n// hosts can `import { Button, MuiModal } from '@startdownnotez404/ui'` without\n// evaluating highlight.js, html-react-parser, elkjs, or CodeMirror:\n// import { Markdown } from '@startdownnotez404/ui/markdown'\n// import { FlowMap } from '@startdownnotez404/ui/flowMap'\n// import { JsonEditor } from '@startdownnotez404/ui/jsonEditor'\n\n// Elemental components\nexport * from './components/elemental/Autocomplete';\nexport * from './components/elemental/AppBar';\nexport * from './components/elemental/Avatar';\nexport * from './components/elemental/Badge';\nexport * from './components/elemental/Box';\nexport * from './components/elemental/Button';\nexport * from './components/elemental/Card';\nexport * from './components/elemental/Checkbox';\nexport * from './components/elemental/Chip';\nexport * from './components/elemental/Collapse';\nexport * from './components/elemental/DatePicker';\nexport * from './components/elemental/Divider';\nexport * from './components/elemental/Form';\nexport * from './components/elemental/Image';\nexport * from './components/elemental/Input';\nexport * from './components/elemental/List';\nexport * from './components/elemental/Loading';\nexport * from './components/elemental/Menu';\nexport * from './components/elemental/Modal';\nexport * from './components/elemental/Overlay';\nexport * from './components/elemental/Paper';\nexport * from './components/elemental/Progress';\nexport * from './components/elemental/ResizablePanel';\nexport * from './components/elemental/Select';\nexport * from './components/elemental/Skeleton';\nexport * from './components/elemental/Slider';\nexport * from './components/elemental/Stepper';\nexport * from './components/elemental/Switch';\nexport * from './components/elemental/Tab';\nexport * from './components/elemental/Timeline';\nexport * from './components/elemental/ToggleButtonGroup';\nexport * from './components/elemental/Tooltip';\nexport * from './components/elemental/Typography';\nexport * from './components/elemental/VariablesRenderer';\n\n// Compound components\nexport * from './components/compound/Alert';\nexport * from './components/compound/Chart';\nexport * from './components/compound/DisplayFile';\nexport * from './components/compound/FileUploader';\nexport * from './components/compound/Process';\nexport * from './components/compound/ScrollToLoad';\nexport * from './components/compound/Table';\nexport * from './components/compound/UseForm';\nexport * from './components/compound/UseSearch';\nexport * from './components/Icons';\n\n// Theme\nexport * from './theme';\n\n// Patterns\nexport * from './patterns';","export { default as AppBar } from '@mui/material/AppBar'\nexport * from './theme'\n","import type { MuiComponentTheme } from '@/_utils/_types'\n\nexport const appBarTheme = {\n defaultProps: {\n position: 'sticky',\n color: 'transparent',\n elevation: 0,\n },\n styleOverrides: {\n root: {\n '--appbar-bg': 'color-mix(in srgb, var(--mui-palette-background-paper), transparent 8%)',\n '--appbar-border-color': 'var(--mui-palette-divider)',\n '--appbar-blur': '10px',\n backgroundColor: 'var(--appbar-bg)',\n borderBottom: '1px solid var(--appbar-border-color)',\n backdropFilter: 'saturate(120%) blur(var(--appbar-blur))',\n },\n },\n} as const satisfies MuiComponentTheme<'MuiAppBar'>\n","export {default as Collapse} from '@mui/material/Collapse'\nexport * from './theme'\n","import type { MuiComponentTheme } from '@/_utils/_types'\n\nexport const collapseTheme = {\n defaultProps: {\n },\n styleOverrides: {\n root: {},\n }\n\n} as const satisfies MuiComponentTheme<\"MuiCollapse\">\n","'use client'\nimport { useState, forwardRef, useImperativeHandle } from 'react'\nimport { Popper, ClickAwayListener } from '@/ele/Overlay'\nimport { styled } from '@mui/material/styles'\nimport { Box } from '@/ele/Box'\nimport MuiTextField from '@mui/material/TextField'\n\nimport {BorderBox} from '@/ele/Box'\n\ntype Props = {\n\tmargin?: 'dense' | 'normal' | 'none';\n\tinputProps?: [string,React.Dispatch<React.SetStateAction<string>>];\n\tlineHeight?: string;\n\tplacement?: 'top' | 'bottom' | 'left' | 'right';\n\tlabel?: string;\n} & React.ComponentProps<typeof MuiTextField>\nexport type PopperInputRef = {\n\tgetValue: () => string;\n}\n\n/**\n * A Input component that uses Popper to display the input field.\n * \n * has get value method if ref is provided.\n * \n * [Doc](https://mui.com/material-ui/api/text-field/)\n */\nconst PopperInput = forwardRef<PopperInputRef,Props>(({\n\tmargin=\"dense\",inputProps,\n\tlineHeight=\"1rem\",\n\tplacement=\"bottom\",label,\n\t...props\n},ref) => {\n\tconst [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null)\n\tconst [value, setValue] = inputProps??[]\n\n\tuseImperativeHandle(ref, () => {\n\t\treturn {\n\t\t\tgetValue: () => value??\"\",\n\t\t}\n\t})\n\t\n\treturn (\n\t\t<>\n\t\t\t<BorderBox onClick={(event) => {setAnchorEl(anchorEl ? null : event.currentTarget)}}\n\t\t\ttitle={label}\n\t\t\tsx={{\n\t\t\t\twidth:\"-webkit-fill-available\",\n\t\t\t\tflex:1,\n cursor: 'pointer',\n\t\t\t}}\n\t\t\t>\n\t\t\t\t<Box \n\t\t\t\tstyle={{\n\t\t\t\t\t\"--lh\":lineHeight,\n\t\t\t\t} as React.CSSProperties}\n\t\t\t\tsx={{\n\t\t\t\t\tlineHeight:\"var(--lh)\",\n\t\t\t\t\twidth:\"100%\",\n\t\t\t\t\ttextOverflow:\"ellipsis\",\n\t\t\t\t\twhiteSpace:\"nowrap\",\n\t\t\t\t\toverflow:\"hidden\",\n\t\t\t\t}}>{value}</Box>\n\t\t\t</BorderBox>\n\t\t\t<StyledPopper {...{\n\t\t\t\tanchorEl,\n\t\t\t\topen:Boolean(anchorEl),\n\t\t\t\tplacement,\n\t\t\t}}>\n\t\t\t\t<ClickAwayListener onClickAway={()=>setAnchorEl(null)}>\n\t\t\t\t\t<Box sx={{\n\t\t\t\t\t\t\"&>.MuiTextField-root\":{\n\t\t\t\t\t\t\twidth:\"100%\",\n mb:0,\n\t\t\t\t\t\t}\n\t\t\t\t\t}}>\n\t\t\t\t\t\t<MuiTextField\n\t\t\t\t\t\tmargin={margin}\n\t\t\t\t\t\tmultiline={true}\n\t\t\t\t\t\tvalue={value} onChange={setValue?(e) => setValue(e.target.value):undefined}\n\t\t\t\t\t\tautoFocus={true}\n\t\t\t\t\t\tmaxRows={10}\n\t\t\t\t\t\tonFocus={e=>e\n\t\t\t\t\t\t\t.currentTarget\n\t\t\t\t\t\t\t.setSelectionRange(\n\t\t\t\t\t\t\t\te.currentTarget.value.length, \n\t\t\t\t\t\t\t\te.currentTarget.value.length\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Box>\n\t\t\t\t</ClickAwayListener>\n\t\t\t</StyledPopper>\n\t\t</>\n\n\t)\n})\n\nexport default PopperInput\n\nconst StyledPopper = styled(Popper)(\n\t({ theme }) => ({\n\t\tpadding: theme.spacing(0.5),\n\t\tboxShadow: `var(--shadow-outset-2)`,\n\t\tborderRadius: 6,\n maxWidth: '95vw',\n width: 700,\n\t\tzIndex: theme.zIndex.modal,\n\t\tfontSize: 13,\n\t\tbackgroundColor: 'transparent',\n backdropFilter: 'blur(2px)',\n\t})\n)","import React, { Fragment, forwardRef } from 'react'\nimport InputBase, { InputBaseProps } from '@mui/material/InputBase'\nimport { Box } from '@/ele/Box'\nimport { Paper as MuiPaper } from '@/ele/Paper'\nimport { IconButton } from '@/ele/Button'\nimport { Divider as MuiDivider } from '@/ele/Divider'\n\nimport { BorderBox } from '@/ele/Box'\nimport { stackInputVars } from './theme'\nimport { mergeSx } from '@/_utils/_func'\n\ntype buttonOptions = {\n\ticon: React.ReactNode;\n} & Omit<React.ComponentProps<typeof IconButton>,\"children\"|\"size\">\ntype Props = {\n\tmultiline?: boolean;\n\trows?: number;\n\tmargin?: 'dense' | 'normal' | 'none';\n\tsize?: 'small' | 'medium';\n\tlabel?: string;\n\tvalue?: string;\n\tplaceholder?: string;\n inputProps?: Record<string, unknown>;\n onChange?: (event: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => void;\n startButtons?:buttonOptions[];\n endButtons?: buttonOptions[];\n br?: number; // border-radius\n haveBorder?: boolean; // have border\n borderTitle?: React.ComponentProps<typeof Wrapper>[\"title\"];\n /** Optional custom input component (e.g. raw phone input) */\n InputComponent?: React.ElementType;\n /** Props forwarded to the custom input component */\n inputComponentProps?: Record<string, unknown>;\n slotProps?:{\n input?: Partial<React.ComponentProps<typeof InputBase>[\"slotProps\"]>;\n paper?: Partial<React.ComponentProps<typeof MuiPaper>>;\n wrapper?: Partial<React.ComponentProps<typeof BorderBox>>;\n }\n} & InputBaseProps\n/**\n * A input component stacked with buttons on the left and right side.\n * \n * [Doc](https://mui.com/material-ui/api/text-field/)\n */\nconst StackInput = forwardRef(({\n\tvalue,onChange,\n\tstartButtons=[], // [{icon: <Icon />, onClick: ()=>{},...props}]\n\tendButtons=[], // [{icon: <Icon />, onClick: ()=>{},...props}]\n\tplaceholder=\"\",\n\n\thaveBorder=true,\n\tborderTitle,\n\tinputProps={},\n\tbr=4,\n slotProps,\n InputComponent,\n inputComponentProps,\n\t...rest\n}:Props,ref) => {\n\n const {sx: paperSX, ...restPaperProps} = slotProps?.paper || {}\n\n\treturn (\n\t\t<Wrapper haveBorder={haveBorder} title={borderTitle} {...slotProps?.wrapper}>\n\t\t\t<MuiPaper\n\n variant=\"elevation\"\n\t\t\tstyle={{\n\t\t\t\t'--br': `${br}px`,\n\t\t\t\t'--pd': haveBorder?\"0px\":\"8px 4px\",\n\t\t\t\t...stackInputVars,\n\t\t\t} as React.CSSProperties}\n\t\t\tsx={{ \n boxShadow:'none',\n\t\t\t\tpadding:\"var(--pd)\",\n\t\t\t\tdisplay: 'flex', \n\t\t\t\talignItems: 'center',\n\t\t\t\tborderRadius: \"var(--br)\",\n background: \"var(--stack-input-bg)\",\n ...paperSX,\n\t\t\t}}\n {...restPaperProps}\n\t\t\t>\n\t\t\t\t{startButtons.map(({icon,onClick,...rest}, index) => (\n\t\t\t\t\t<IconButton \n\t\t\t\t\tkey={index} \n\t\t\t\t\tsx={{ padding: 0 }} \n\t\t\t\t\tonClick={onClick} {...rest}\n\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{icon}\n\t\t\t\t\t</IconButton>\n\t\t\t\t))}\n\n {(() => {\n const InputComp = (InputComponent || InputBase) as React.ElementType\n return (\n <InputComp ref={ref}\n slotProps={slotProps?.input}\n value={value} onChange={onChange}\n sx={mergeSx(\n slotProps?.input?.sx,\n {\n \"&.MuiInputBase-root\":{\n marginLeft: \"8px\", \n flex: 1,\n },\n },\n )}\n placeholder={placeholder}\n {...rest}\n inputProps={{...inputProps}}\n {...(inputComponentProps || {})}\n />\n )\n })()} \n\n\t\t\t\t<Box \n\t\t\t\tsx={{\n\t\t\t\t\tdisplay:\"flex\",\n\t\t\t\t\talignItems: \"center\",\n\t\t\t\t}}>\n\t\t\t\t\t{endButtons.map(({icon,onClick,...rest}, index) => (\n\t\t\t\t\t\t<Fragment key={index}>\n\t\t\t\t\t\t\t<IconButton \n\t\t\t\t\t\t\tsx={{ p: 0 }} \n\t\t\t\t\t\t\tonClick={onClick} {...rest}\n\t\t\t\t\t\t\tsize=\"small\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{icon}\n\t\t\t\t\t\t\t</IconButton>\n\t\t\t\t\t\t\t{index<endButtons.length-1 && \n\t\t\t\t\t\t\t<MuiDivider sx={{ height: 28, m: 0.5,borderLeftWidth:0 }} \n\t\t\t\t\t\t\torientation=\"vertical\" />}\n\t\t\t\t\t\t</Fragment>\n\t\t\t\t\t))}\n\t\t\t\t</Box>\n\t\t\t</MuiPaper>\n\t\t</Wrapper>\n\t)\n})\n\nexport default StackInput\n\nfunction Wrapper(p:{\n\tchildren:React.ReactNode;\n\thaveBorder:boolean;\n\ttitle?:React.ComponentProps<typeof BorderBox>[\"title\"];\n} & React.ComponentProps<typeof BorderBox>){\n const {children, haveBorder, title, ...rest} = p;\n \n\tif(haveBorder)return (<BorderBox title={title} \n\t\tsx={{\n\t\t\twidth:\"-webkit-fill-available\",\n\t\t}} {...rest}>\n\t\t\t{children}\n\t\t</BorderBox>)\n\treturn children\n}","/**\n * Root-level CSS variable aliases for StackInput.\n * MuiPaper spreads these; palette refs are declared only here.\n */\nexport const stackInputVars = {\n '--stack-input-bg': 'var(--mui-palette-background-default)',\n} as const\n","export * from './PopperInput'\nexport * from './StackInput'\nexport * from './TelPhoneInput'\nexport * from './TextField'\nexport {default as LineInput} from './LineInput'\n","'use client'\nimport { forwardRef } from 'react'\nimport { styled } from '@mui/material/styles'\nimport TextField, { type TextFieldProps } from '@mui/material/TextField'\nimport { lineInputVars } from './lineInputTheme'\n\ntype Props = {\n multiline?: boolean;\n rows?: number;\n margin?: 'dense' | 'normal' | 'none';\n size?: 'small' | 'medium';\n label?: string;\n} & TextFieldProps\n/**\n * A TextField Variant \n * \n * `variant=\"standard\"`\n * \n * [Doc](https://mui.com/material-ui/api/text-field/)\n */\nconst LineInput = forwardRef<HTMLInputElement,Props>(({\n value,label,style,...props\n},ref) => {\n return (\n <DefaultStyled value={value} label={label} {...props} ref={ref}\n variant=\"standard\"\n style={{\n '--mt-scale':label?2:0,\n ...style,\n } as React.CSSProperties}\n />\n )\n})\n\nexport default LineInput\n\nconst DefaultStyled = styled(TextField)(\n ()=>({\n \"&.MuiTextField-root\":{\n ...lineInputVars,\n flex: 1,\n \"& .MuiInput-input\":{\n paddingTop:0,paddingBottom:0,\n },\n \"& .MuiInput-root::before\":{\n borderBottomColor:\"var(--line-input-divider)\",\n },\n \"& .MuiOutlinedInput-root\": {\n color:\"var(--line-input-text-primary)\",\n '& fieldset': {\n border: 'unset',\n boxShadow:\"inset 0 0 0 2px var(--line-input-divider)\",\n color: \"var(--line-input-text-secondary)\",\n },\n '&:hover fieldset': {\n border: 'unset',\n boxShadow:\"inset 0 0 0 2px var(--line-input-text-secondary)\",\n },\n '&.Mui-focused fieldset': {\n border: 'unset',\n boxShadow:\"inset 0 0 0 2px var(--line-input-text-secondary)\",\n },\n },\n \"& .MuiInputLabel-root\": {\n border: \"unset\",\n backgroundColor: \"var(--line-input-bg)\",\n color: \"var(--line-input-text-secondary)\",\n \"&.Mui-focused\":{\n color: \"var(--line-input-text-secondary)\",\n },\n \"&.Mui-focused.Mui-error\":{\n color: \"var(--line-input-error)\",\n }\n },\n // hide placeholder ghost bug fix with css\n // https://mui.com/material-ui/react-text-field/#shrink\n // hide placeholder ghost\n ' & .MuiInputLabel-root:not([data-shrink=\"true\"])~.MuiInputBase-root>.MuiInputBase-input':{\n color:\"transparent\",\n },\n \"& .MuiFormHelperText-root\":{\n color:\"var(--line-input-text-primary)\",\n },\n \"& .Mui-error\":{\n color: \"var(--line-input-error)\",\n },\n \"& .MuiInputBase-root\":{\n fontSize:\"inherit\",\n color:\"var(--line-input-text-primary)\",\n marginTop: `calc(8px * var(--mt-scale))`,\n },\n \n \"& .MuiInputBase-root:after\":{\n borderColor:\"var(--line-input-text-primary)\",\n },\n },\n })\n)\n","/**\n * Root-level CSS variable aliases for LineInput.\n * Spread inside DefaultStyled's root selector; palette refs are declared only here.\n */\nexport const lineInputVars = {\n '--line-input-bg': 'var(--mui-palette-background-default)',\n '--line-input-divider': 'var(--mui-palette-divider)',\n '--line-input-text-primary': 'var(--mui-palette-text-primary)',\n '--line-input-text-secondary': 'var(--mui-palette-text-secondary)',\n '--line-input-error': 'var(--mui-palette-error-main)',\n} as const\n","import SvgIcon, { SvgIconProps } from '@mui/material/SvgIcon'\nimport ReactComponent from './check-all.svg?react'\n\nconst Icon = (props:SvgIconProps) => {\n return <SvgIcon {...props} component={ReactComponent} inheritViewBox/>\n}\n \nexport default Icon","import * as React from \"react\";\nconst SvgCheckAll = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width={24} height={24} viewBox=\"0 0 24 24\" {...props}><mask id=\"lineMdCheckAll0\"><g fill=\"none\" stroke=\"#fff\" strokeDasharray={24} strokeDashoffset={24} strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2}><path d=\"M2 13.5l4 4l10.75 -10.75\"><animate fill=\"freeze\" attributeName=\"stroke-dashoffset\" dur=\"0.4s\" values=\"24;0\" /></path><path stroke=\"#000\" strokeWidth={6} d=\"M7.5 13.5l4 4l10.75 -10.75\"><animate fill=\"freeze\" attributeName=\"stroke-dashoffset\" begin=\"0.4s\" dur=\"0.4s\" values=\"24;0\" /></path><path d=\"M7.5 13.5l4 4l10.75 -10.75\"><animate fill=\"freeze\" attributeName=\"stroke-dashoffset\" begin=\"0.4s\" dur=\"0.4s\" values=\"24;0\" /></path></g></mask><rect width={24} height={24} fill=\"currentColor\" mask=\"url(#lineMdCheckAll0)\" /></svg>;\nexport default SvgCheckAll;","import SvgIcon, { SvgIconProps } from '@mui/material/SvgIcon'\nimport ReactComponent from './loading.svg?react'\n\n\nconst Icon = (props:SvgIconProps) => {\n return <SvgIcon {...props} component={ReactComponent} inheritViewBox/>\n}\n \nexport default Icon","import * as React from \"react\";\nconst SvgLoading = props => <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}><g fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeWidth={2}><path strokeDasharray={60} strokeDashoffset={60} strokeOpacity={0.3} d=\"M12 3C16.9706 3 21 7.02944 21 12C21 16.9706 16.9706 21 12 21C7.02944 21 3 16.9706 3 12C3 7.02944 7.02944 3 12 3Z\"><animate fill=\"freeze\" attributeName=\"stroke-dashoffset\" dur=\"1.3s\" values=\"60;0\" /></path><path strokeDasharray={15} strokeDashoffset={15} d=\"M12 3C16.9706 3 21 7.02944 21 12\"><animate fill=\"freeze\" attributeName=\"stroke-dashoffset\" dur=\"0.3s\" values=\"15;0\" /><animateTransform attributeName=\"transform\" dur=\"1.5s\" repeatCount=\"indefinite\" type=\"rotate\" values=\"0 12 12;360 12 12\" /></path></g></svg>;\nexport default SvgLoading;","import { HashLoader } from 'react-spinners'\n\n/**\n * HashLoader expects a concrete color value (hex/rgb/named color).\n * Do not pass CSS variable tokens like `var(--palette-primary-main)` directly.\n */\nexport default function AnimatedPending({\n color = '#ff2f7a',\n size = 20,\n loading = true,\n}: {\n // Must be a resolved color string; CSS variable tokens are not supported by HashLoader.\n color?: React.ComponentProps<typeof HashLoader>['color']\n size?: React.ComponentProps<typeof HashLoader>['size']\n loading?: React.ComponentProps<typeof HashLoader>['loading']\n}) {\n return <HashLoader color={color} loading={loading} size={size} />\n}","'use client'\n\nimport { useEffect, useMemo, useState, type ComponentProps } from 'react'\nimport type { SxProps, Theme } from '@mui/material/styles'\n\nimport { mergeSx } from '@/_utils/_func'\nimport { Box } from '@/ele/Box'\nimport { Typography } from '@/ele/Typography'\n\nimport { loadingTextColorVars, loadingTextToneVars, type LoadingTextColor } from './theme'\n\nexport type { LoadingTextColor }\n\nexport type LoadingTextProps = {\n /** Single phrase, or a list that cycles. Default: \"Loading\". */\n text?: string | readonly string[]\n /** Milliseconds between phrase changes when `text` is a list. Default: 2200. */\n interval?: number\n /** Trailing animated dots. Default: true. */\n dots?: boolean\n /**\n * When false, animation and dots stop and `readyText` (or the current\n * phrase) is shown as settled copy. Default: true.\n */\n loading?: boolean\n /** Copy shown when `loading` is false. Falls back to the current phrase. */\n readyText?: string\n /** Palette token. Recolor with `--text-hue`; optionally pin `--text-color` / `--text-pulse-color`. */\n color?: LoadingTextColor\n variant?: ComponentProps<typeof Typography>['variant']\n sx?: SxProps<Theme>\n}\n\nconst DEFAULT_TEXT = 'Loading'\n\nfunction toPhrases(text: string | readonly string[]): string[] {\n if (typeof text === 'string') {\n return [text]\n }\n return text.length > 0 ? [...text] : [DEFAULT_TEXT]\n}\n\nfunction phraseListKey(text: string | readonly string[]): string {\n return typeof text === 'string' ? text : text.join('\\0')\n}\n\nconst inheritTypeSx = {\n font: 'inherit',\n fontSize: 'inherit',\n fontWeight: 'inherit',\n fontFamily: 'inherit',\n fontStyle: 'inherit',\n letterSpacing: 'inherit',\n lineHeight: 'inherit',\n} as const\n\n/**\n * Animated status copy with a lighting shimmer.\n * Phrase lists cycle while `loading` is true. Honors `prefers-reduced-motion`.\n */\nexport function LoadingText({\n text = DEFAULT_TEXT,\n interval = 2200,\n dots = true,\n loading = true,\n readyText,\n color = 'text',\n variant = 'body1',\n sx,\n}: LoadingTextProps) {\n const listKey = phraseListKey(text)\n const phrases = useMemo(() => toPhrases(text), [text])\n const [index, setIndex] = useState(0)\n const phraseIndex = phrases.length > 0 ? index % phrases.length : 0\n const phrase = loading\n ? (phrases[phraseIndex] ?? DEFAULT_TEXT)\n : (readyText ?? phrases[phraseIndex] ?? DEFAULT_TEXT)\n\n useEffect(() => {\n setIndex(0)\n }, [listKey])\n\n useEffect(() => {\n if (!loading || phrases.length < 2) {\n return\n }\n const count = phrases.length\n const id = window.setInterval(() => {\n setIndex((current) => (current + 1) % count)\n }, Math.max(800, interval))\n return () => window.clearInterval(id)\n }, [interval, loading, listKey, phrases.length])\n\n return (\n <Typography\n component=\"span\"\n variant={variant}\n role=\"status\"\n aria-live=\"polite\"\n aria-busy={loading}\n sx={mergeSx(\n {\n display: 'inline-flex',\n alignItems: 'baseline',\n gap: '0.08em',\n ...loadingTextToneVars,\n ...(loadingTextColorVars[color] ?? loadingTextColorVars.text),\n color: 'var(--text-color)',\n m: 0,\n '@media (prefers-reduced-motion: reduce)': {\n '& [data-loading-highlight]': {\n display: 'none',\n },\n },\n },\n sx,\n )}\n >\n <LoadingPhrase phrase={phrase} loading={loading} />\n {loading && dots ? <LoadingDots /> : null}\n </Typography>\n )\n}\n\nfunction LoadingPhrase({ phrase, loading }: { phrase: string; loading: boolean }) {\n return (\n <Box\n component=\"span\"\n key={`${loading}-${phrase}`}\n data-loading-text=\"\"\n sx={{\n ...inheritTypeSx,\n display: 'inline-block',\n position: 'relative',\n color: 'inherit',\n }}\n >\n {phrase}\n {loading ? (\n <Box\n component=\"span\"\n aria-hidden\n data-loading-highlight=\"\"\n sx={{\n ...inheritTypeSx,\n position: 'absolute',\n left: 0,\n top: 0,\n color: 'var(--text-pulse-color)',\n pointerEvents: 'none',\n maskImage:\n 'linear-gradient(90deg, transparent 32%, #000 50%, transparent 68%)',\n WebkitMaskImage:\n 'linear-gradient(90deg, transparent 32%, #000 50%, transparent 68%)',\n maskSize: '220% 100%',\n WebkitMaskSize: '220% 100%',\n maskRepeat: 'no-repeat',\n WebkitMaskRepeat: 'no-repeat',\n animation: 'sduiLoadingTextShimmer 1.7s ease-in-out infinite',\n '@keyframes sduiLoadingTextShimmer': {\n '0%': {\n maskPosition: '120% 0',\n WebkitMaskPosition: '120% 0',\n },\n '100%': {\n maskPosition: '-20% 0',\n WebkitMaskPosition: '-20% 0',\n },\n },\n }}\n >\n {phrase}\n </Box>\n ) : null}\n </Box>\n )\n}\n\nfunction LoadingDots() {\n return (\n <Box\n component=\"span\"\n aria-hidden\n sx={{\n ...inheritTypeSx,\n display: 'inline-flex',\n width: '1.35em',\n justifyContent: 'flex-start',\n letterSpacing: 0,\n color: 'var(--text-color)',\n }}\n >\n {[0, 1, 2].map((dot) => (\n <Box\n key={dot}\n component=\"span\"\n data-loading-dot=\"\"\n sx={{\n ...inheritTypeSx,\n animation: 'sduiLoadingTextDot 1.05s ease-in-out infinite',\n animationDelay: `${dot * 0.16}s`,\n '@keyframes sduiLoadingTextDot': {\n '0%, 80%, 100%': { opacity: 0.25, color: 'var(--text-color)' },\n '40%': { opacity: 1, color: 'var(--text-pulse-color)' },\n },\n }}\n >\n .\n </Box>\n ))}\n </Box>\n )\n}\n\nexport default LoadingText\n","export type LoadingTextColor =\n | 'text'\n | 'primary'\n | 'secondary'\n | 'error'\n | 'info'\n | 'success'\n | 'warning'\n | 'system'\n | 'insight'\n\ntype LoadingTextHueVars = {\n '--text-hue': string\n '--text-color'?: string\n '--text-pulse-color'?: string\n}\n\n/**\n * `--text-hue` is the color control. Fill and gleam mix toward theme text\n * tokens so contrast holds in light and dark. Palette presets use `*-dark` /\n * `*-light`. Override `--text-hue` (or either paint) via `sx`.\n */\nexport const loadingTextToneVars = {\n '--text-color':\n 'color-mix(in lab, var(--text-hue) 72%, var(--mui-palette-text-secondary))',\n '--text-pulse-color':\n 'color-mix(in lab, var(--text-hue) 55%, var(--mui-palette-text-primary))',\n} as const\n\nexport const loadingTextColorVars: Record<LoadingTextColor, LoadingTextHueVars> = {\n text: {\n '--text-hue': 'var(--mui-palette-text-secondary)',\n },\n primary: {\n '--text-hue': 'var(--mui-palette-primary-main)',\n '--text-color': 'var(--mui-palette-primary-dark)',\n '--text-pulse-color': 'var(--mui-palette-primary-light)',\n },\n secondary: {\n '--text-hue': 'var(--mui-palette-secondary-main)',\n '--text-color': 'var(--mui-palette-secondary-dark)',\n '--text-pulse-color': 'var(--mui-palette-secondary-light)',\n },\n error: {\n '--text-hue': 'var(--mui-palette-error-main)',\n '--text-color': 'var(--mui-palette-error-dark)',\n '--text-pulse-color': 'var(--mui-palette-error-light)',\n },\n info: {\n '--text-hue': 'var(--mui-palette-info-main)',\n '--text-color': 'var(--mui-palette-info-dark)',\n '--text-pulse-color': 'var(--mui-palette-info-light)',\n },\n success: {\n '--text-hue': 'var(--mui-palette-success-main)',\n '--text-color': 'var(--mui-palette-success-dark)',\n '--text-pulse-color': 'var(--mui-palette-success-light)',\n },\n warning: {\n '--text-hue': 'var(--mui-palette-warning-main)',\n '--text-color': 'var(--mui-palette-warning-dark)',\n '--text-pulse-color': 'var(--mui-palette-warning-light)',\n },\n system: {\n '--text-hue': 'var(--mui-palette-system-main)',\n '--text-color': 'var(--mui-palette-system-dark)',\n '--text-pulse-color': 'var(--mui-palette-system-light)',\n },\n insight: {\n '--text-hue': 'var(--mui-palette-insight-main)',\n '--text-color': 'var(--mui-palette-insight-dark)',\n '--text-pulse-color': 'var(--mui-palette-insight-light)',\n },\n}\n","import type { CSSProperties } from 'react'\nimport { AnimatedPendingIcon, AnimatedLoadingIcon } from '@/icons'\n\nimport LoadingText, { type LoadingTextProps } from './LoadingText'\n\nexport type LoadingVariant = 'circle' | 'hash' | 'text'\n\nexport type LoadingProps = {\n variant?: LoadingVariant\n size?: CSSProperties['width']\n} & Omit<LoadingTextProps, 'variant'>\n\nexport default function Loading(p: LoadingProps) {\n const { variant = 'circle', size = '50px', ...textProps } = p\n\n if (variant === 'text') {\n return <LoadingText {...textProps} />\n }\n\n if (variant === 'hash') {\n return <AnimatedPendingIcon size={size} />\n }\n\n return (\n <AnimatedLoadingIcon\n sx={{\n fontSize: size,\n }}\n />\n )\n}\n","import { Modal } from '@/ele/Modal'\nimport { Box } from '@/ele/Box'\n\nimport Loading from './Loading'\n\nexport default function LoadingModal({\n open,\n slotProps,\n}:{\n open:React.ComponentProps<typeof Modal>['open'];\n slotProps?:{\n loading?:React.ComponentProps<typeof Loading>;\n };\n}){\n\n return (<Modal\n open={open}\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <Box sx={{\n \n }}>\n <Loading \n size={\"100px\"}\n {...slotProps?.loading} \n />\n </Box>\n </Modal>)\n}","import React from 'react';\nimport MuiLinearProgress, { LinearProgressProps as MuiLinearProgressProps } from '@mui/material/LinearProgress';\n\nexport type LinearProgressProps = MuiLinearProgressProps;\n\nexport const LinearProgress: React.FC<LinearProgressProps> = (props) => {\n return <MuiLinearProgress {...props} />;\n};\n","import React from 'react';\nimport MuiCircularProgress, { CircularProgressProps as MuiCircularProgressProps } from '@mui/material/CircularProgress';\n\nexport type CircularProgressProps = MuiCircularProgressProps;\n\nexport const CircularProgress: React.FC<CircularProgressProps> = (props) => {\n return <MuiCircularProgress {...props} />;\n};\n","import type { MuiComponentTheme } from '@/_utils/_types'\n\nexport const linearProgressTheme = {\n defaultProps: {},\n styleOverrides: {\n root: {\n '--progress-bg': 'var(--mui-palette-background-grey-1)',\n '--progress-color': 'color-mix(in srgb, var(--mui-palette-blink-shiny), transparent 50%)',\n borderRadius: 4, \n backgroundColor: 'var(--progress-bg)',\n },\n bar: {\n borderRadius: 4,\n backgroundColor: 'var(--progress-color)',\n },\n dashed: {\n '--mui-palette-LinearProgress-primaryBg': 'var(--progress-bg)',\n },\n }\n} as const satisfies MuiComponentTheme<'MuiLinearProgress'>\n\nexport const circularProgressTheme = {\n defaultProps: {},\n styleOverrides: {\n root: {\n '--progress-color': 'color-mix(in srgb, var(--mui-palette-blink-shiny), transparent 20%)',\n '--progress-bg': 'var(--mui-palette-background-grey-1)',\n color: 'var(--progress-color)',\n },\n circle: {\n stroke: 'var(--progress-color)',\n color: 'var(--progress-color)',\n },\n }\n} as const satisfies MuiComponentTheme<'MuiCircularProgress'>\n","'use client'\nimport { Separator as PRH } from 'react-resizable-panels'\nimport { styled } from '@mui/material/styles'\n\nimport { panelResizeHandleRootStyle } from './themes'\n\nexport {\n useGroupRef,\n useGroupCallbackRef,\n usePanelRef,\n usePanelCallbackRef,\n useDefaultLayout,\n Panel, Group as PanelGroup,\n} from \"react-resizable-panels\"\n\nexport type PanelResizeHandleVariant = 'bar' | 'seam'\n\nexport const PanelResizeHandle = styled(PRH, {\n shouldForwardProp: (prop) => prop !== 'variant',\n})<{ variant?: PanelResizeHandleVariant }>({\n ...panelResizeHandleRootStyle,\n backgroundColor: 'var(--panel-divider)',\n width: '1px',\n borderRadius: 'var(--mui-shape-borderRadius)',\n position: 'relative',\n [`\n &[data-separator=\"hover\"],\n &[data-separator=\"active\"]\n `]: {\n backgroundColor: 'transparent',\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n top: '0',\n left: '-2px',\n width: '4px',\n height: '100%',\n backgroundColor: 'var(--panel-focus)',\n },\n },\n variants: [\n {\n props: { variant: 'seam' },\n style: {\n width: 0,\n minWidth: 0,\n backgroundColor: 'transparent',\n border: 'none',\n boxShadow: 'none',\n borderRadius: 0,\n flex: '0 0 auto',\n zIndex: 2,\n '&::after, &[data-separator=\"hover\"]::after, &[data-separator=\"active\"]::after': {\n content: 'none',\n display: 'none',\n },\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n bottom: 0,\n left: 'calc(var(--panel-seam-hit) / -2)',\n width: 'var(--panel-seam-hit)',\n zIndex: 1,\n },\n '&[aria-orientation=\"horizontal\"]': {\n width: '100%',\n height: 0,\n minHeight: 0,\n '&::before': {\n top: 'calc(var(--panel-seam-hit) / -2)',\n bottom: 'auto',\n left: 0,\n width: '100%',\n height: 'var(--panel-seam-hit)',\n },\n },\n },\n },\n ],\n})\n","export const panelResizeHandleRootStyle = {\n '--panel-divider': 'var(--mui-palette-divider)',\n '--panel-focus': 'var(--mui-palette-focus-1)',\n '--panel-seam-hit': '16px',\n} as const\n","'use client'\nimport React, { forwardRef } from 'react'\nimport MuiSelect, { type SelectProps } from '@mui/material/Select'\nimport { FormControl, FormHelperText, InputLabel } from '@/ele/Form'\nimport { ListItemIcon, ListItemText } from '@/ele/List'\nimport { MenuItem, StyledMenuItem } from '@/ele/Menu'\nimport { styled } from '@mui/material/styles'\nimport { CheckIcon as IconCheck, BlacklistIcon as IconNASelection } from '@/icons/MuiIcon'\nimport { mergeSx } from '@/_utils/_func'\n\nexport interface SelectOptionType {\n label: string;\n id: string;\n onClick?: React.MouseEventHandler<HTMLLIElement>;\n icon?: React.ReactNode;\n extension?: React.ReactNode;\n name?: string; // Additional prop for compatibility\n}\n\nexport type MuiSelectProps = {\n label?: string;\n value: SelectProps[\"value\"];\n onChange: SelectProps[\"onChange\"];\n options: SelectOptionType[];\n helperText?: string;\n error?: boolean;\n inputProps?: SelectProps[\"inputProps\"];\n minWidth?: string;\n minPadding?: boolean;\n required?: boolean;\n disableRequiredLabel?: boolean; // if true, the required label will not be shown\n multiple?: boolean;\n slotProps?:{\n option?: React.ComponentProps<typeof MenuItem>;\n formControl?: Partial<React.ComponentProps<typeof FormControl>>;\n };\n} & Omit<SelectProps,\"label\">\n\n/**\n * Exntended from Mui Select\n * \n * [Doc](https://mui.com/material-ui/api/select/)\n */\nconst Select = forwardRef<HTMLElement,MuiSelectProps>(({ \n label,\n value,\n onChange,\n options=[],\n error,\n inputProps,\n minWidth=\"120px\",\n minPadding=false,\n required=false, disableRequiredLabel=false,\n multiple=false,\n slotProps,\n helperText,\n ...props\n},ref) => {\n\n return (\n <FormControl \n fullWidth={props.fullWidth}\n style={{\"--min-w\":minWidth} as React.CSSProperties}\n sx={mergeSx({ minWidth:\"var(--min-w)\" }, props.sx)}\n {...slotProps?.formControl}\n required={required}\n error={error}\n >\n {!disableRequiredLabel && <InputLabel>{label}</InputLabel>}\n <StyledSelect\n ref={ref} \n minPadding={minPadding}\n value={value}\n label={label}\n onChange={onChange}\n required={required}\n {...props}\n inputProps={inputProps}\n multiple={multiple}\n renderValue={(selected) => {\n if (multiple) { \n if(Array.isArray(selected)){\n // map values to labels\n return selected.map(val => {\n const found = options.find(o => o.id === val);\n return found ? (found.label || found.name || val) : val;\n }).join(', ');\n } \n return selected as React.ReactNode;\n }\n\n // force to render the option.label\n const selectedOption = options.find((o) => o.id === selected)\n return (selectedOption?.label ?? selectedOption?.name ?? selected) as React.ReactNode\n }}\n MenuProps={{\n sx: {\n \"& .MuiMenu-paper\":{\n borderRadius:\"16px\",\n },\n // Ensure menu list styling matches Menu component if needed\n \"& .MuiList-root\":{\n padding:\"8px 4px\",\n display:\"flex\",\n flexDirection:\"column\",\n // alignContent:\"center\",\n // alignItems:\"center\",\n gap:\"2px\",\n }\n },\n }}\n >\n {!required && !multiple && <StyledMenuItem value={\"\"} \n sx={{\n \"&.MuiListItemText-root\":{\n },\n gap: '8px' // Consistent gap\n }}>\n <ListItemIcon style={{minWidth: 'auto'}}><IconNASelection/></ListItemIcon> \n <ListItemText>NA</ListItemText>\n </StyledMenuItem>}\n {options.map((o, i) => (\n <StyledMenuItem key={i} \n onClick={o.onClick} value={o.id} \n sx={{\n \"&.MuiListItemText-root\":{\n }\n }}\n {...slotProps?.option}\n >\n {multiple && Array.isArray(value) && \n <ListItemIcon style={{minWidth: 'auto'}}>{(value as (string | number)[]).includes(o.id)?<IconCheck/>:null}</ListItemIcon>\n }\n {o?.icon && <ListItemIcon style={{minWidth: 'auto'}}>{o.icon}</ListItemIcon>}\n {o?.label && <ListItemText>{o.label}</ListItemText>}\n {o.extension}\n </StyledMenuItem>\n ))}\n </StyledSelect>\n {helperText && <FormHelperText>{helperText}</FormHelperText>}\n </FormControl>\n )\n})\n\nexport default Select\n\ninterface CustomProps {\n minPadding?: boolean;\n}\n\nconst StyledSelect = styled(MuiSelect, {\n shouldForwardProp: (prop) => prop !== 'minPadding',\n})<CustomProps>(({ minPadding: _minPadding=false }) => {\n void _minPadding;\n return {\n '&.MuiInputBase-root':{\n '& .MuiListItemText-root':{\n \"& .MuiTypography-root\":{\n overflow:\"hidden\",\n textOverflow:\"ellipsis\",\n },\n },\n \"& .MuiListItemIcon-root\":{\n minWidth:\"36px\",\n },\n },\n }\n})\n","import type { MuiComponentTheme } from '@/_utils/_types'\n\nexport const selectTheme = {\n defaultProps: {},\n styleOverrides: {\n root: ({\n \"&.Mui-focused fieldset.MuiOutlinedInput-notchedOutline\": {\n borderColor: \"var(--mui-palette-text-secondary)\",\n }\n })\n },\n} as const satisfies MuiComponentTheme<\"MuiSelect\">\n","// elemental stepper wrapper\n// re-exporting MUI components so that the theme can target them via `component` overrides\n\nexport { default as Stepper } from '@mui/material/Stepper';\nexport { default as Step } from '@mui/material/Step';\nexport { default as StepLabel } from '@mui/material/StepLabel';\nexport { default as StepConnector } from '@mui/material/StepConnector';\nexport { default as StepIcon } from '@mui/material/StepIcon';\nexport { default as StepButton } from '@mui/material/StepButton';\n\n// standard wrapper for common use cases\nexport { default as StandardStepper } from './src/StandardStepper';\nexport * from './src/StandardStepper'; // also re-export types\n\n// also expose theme objects for convenience\nexport * from './src/theme';\n","import React from 'react';\nimport { Stepper, Step, StepLabel, StepConnector, styled } from '@mui/material';\nimport type { SxProps, Theme } from '@mui/material/styles';\nimport { IconButton } from '@/ele/Button';\nimport { mergeSx } from '@/_utils/_func';\nimport { standardStepperRootSx } from './theme';\n\nexport interface StandardStepperStep {\n title: React.ReactNode;\n icon?: React.ReactNode;\n disabled?: boolean;\n error?: boolean;\n}\n\nexport interface StandardStepperProps {\n steps: StandardStepperStep[];\n activeStep: number;\n onChange?: (newIndex: number) => void;\n nonLinear?: boolean;\n alternativeLabel?: boolean;\n sx?: SxProps<Theme>;\n}\n\n// custom connector with active animation (dotted/running effect)\nconst AnimatedConnector = styled(StepConnector)(() => ({\n '& .MuiStepConnector-line': {\n border: 'none',\n transition: 'background-color 0.3s',\n height: 1,\n borderRadius: 1,\n backgroundColor: 'var(--stepper-connector-color)',\n },\n // change the color of different steps\n '&.MuiStepConnector-root.Mui-completed .MuiStepConnector-line': {\n backgroundColor: 'var(--stepper-connector-success)',\n },\n '&.MuiStepConnector-root.Mui-error .MuiStepConnector-line': {\n backgroundColor: 'var(--stepper-connector-error)',\n },\n \n\n // active/completed decoration – overlay with animated dotted pattern\n [`&.MuiStepConnector-root.Mui-active .MuiStepConnector-line`]: {\n backgroundImage:\n 'repeating-linear-gradient(to right, var(--stepper-connector-dashed) 0, var(--stepper-connector-dashed) 2px, transparent 2px, transparent 4px)',\n backgroundSize: '4px 1px',\n animation: 'run 0.75s linear infinite',\n },\n '@keyframes run': {\n from: { backgroundPosition: '0 0' },\n to: { backgroundPosition: '4px 0' },\n },\n}));\n\nconst StandardStepper: React.FC<StandardStepperProps> = ({\n steps,\n activeStep,\n onChange,\n nonLinear = false,\n alternativeLabel = true,\n sx,\n}) => {\n const handleClick = (idx: number) => {\n if (onChange && idx !== activeStep && !steps[idx].disabled) {\n onChange(idx);\n }\n };\n\n return (\n <Stepper\n activeStep={activeStep}\n connector={<AnimatedConnector />}\n nonLinear={nonLinear}\n alternativeLabel={alternativeLabel}\n sx={mergeSx(standardStepperRootSx, { width: '100%' }, sx)}\n >\n {steps.map((step, idx) => (\n <Step\n key={idx}\n completed={idx < activeStep}\n disabled={step.disabled}\n className={step.error ? 'Mui-error' : undefined}\n sx={\n step.error\n ? {\n '& .MuiStepConnector-root.Mui-completed .MuiStepConnector-line': {\n backgroundColor: 'var(--stepper-connector-error)',\n },\n }\n : undefined\n }\n >\n <StepLabel slots={{\n stepIcon: step.icon?\n ({ active, completed, error }) => <IconButton \n onClick={() => handleClick(idx)} disabled={idx === activeStep || step.disabled}\n color={\n error? 'error'\n : active ? 'primary' \n : completed ? 'success'\n : 'default'}\n sx={{\n borderRadius:\"50%\",\n \"&.MuiButtonBase-root.Mui-disabled\": {\n ...(active ? { color: 'var(--stepper-connector-dashed)' } : {}),\n },\n \n }}\n >\n {step.icon}\n </IconButton>\n : undefined\n }} error={step.error}>\n {step.title}\n </StepLabel>\n </Step>\n ))}\n </Stepper>\n );\n};\n\nexport default StandardStepper;\n","import type { MuiComponentTheme } from '@/_utils/_types'\nimport type { SxProps, Theme } from '@mui/material/styles'\n\n// we export theme constants for each related MUI component so the\n// top-level theme file can include them and allow downstream consumers\n// to target the stepper pieces independently.\n\n/** Static palette aliases for StandardStepper root element */\nexport const standardStepperRootSx: SxProps<Theme> = {\n '--stepper-connector-color': 'var(--mui-palette-divider)',\n '--stepper-connector-dashed': 'var(--mui-palette-blink-shiny)',\n '--stepper-connector-success': 'var(--mui-palette-success-dark)',\n '--stepper-connector-error': 'var(--mui-palette-error-dark)',\n} as const satisfies SxProps<Theme>\n\nexport const stepperTheme = {\n defaultProps: {},\n styleOverrides: {\n root: () => ({\n // nothing specific by default\n }),\n },\n} as const satisfies MuiComponentTheme<'MuiStepper'>;\n\nexport const stepTheme = {\n defaultProps: {},\n styleOverrides: {\n root: {\n // keep minimal styling here; consumers can override via theme\n },\n },\n} as const satisfies MuiComponentTheme<'MuiStep'>;\n\nexport const stepLabelTheme = {\n defaultProps: {},\n styleOverrides: {\n root: ({theme}) => ({\n \"& .MuiStepLabel-label.MuiStepLabel-alternativeLabel\": {\n marginTop: theme.spacing(1),\n },\n '& .MuiStepLabel-label': {\n \"&.Mui-completed\": {\n color: 'var(--mui-palette-success-dark)',\n },\n \"&.Mui-active\": {\n color: 'var(--mui-palette-blink-shiny)',\n },\n \"&.Mui-error\": {\n color: 'var(--mui-palette-error-dark)',\n },\n },\n }),\n iconContainer: {\n },\n },\n} as const satisfies MuiComponentTheme<'MuiStepLabel'>;\n\nexport const stepConnectorTheme = {\n defaultProps: {},\n styleOverrides: {\n root: () => ({\n \"&.MuiStepConnector-horizontal\": {\n height: '16px',\n },\n }),\n },\n} as const satisfies MuiComponentTheme<'MuiStepConnector'>;\n\nexport const stepIconTheme = {\n defaultProps: {},\n styleOverrides: {\n root: () => ({\n \"&.Mui-completed\": {\n color: 'var(--mui-palette-success-main)',\n },\n \"&.Mui-active\": {\n color: 'var(--mui-palette-focus-1)',\n },\n }),\n },\n} as const satisfies MuiComponentTheme<'MuiStepIcon'>;\n\nexport const stepButtonTheme = {\n defaultProps: {},\n styleOverrides: {\n root: () => ({\n // no default customizations yet\n }),\n },\n} as const satisfies MuiComponentTheme<'MuiStepButton'>;\n","import Switch, { type SwitchProps } from '@mui/material/Switch'\nimport { FormControl, FormControlLabel, FormHelperText } from '@/ele/Form'\nimport { muiSwitchRootSx } from './themes'\n\n/**\n * MuiSwitch\n * \n * [Doc](https://mui.com/material-ui/api/switch/)\n */\nexport default function MuiSwitch({\n onChange, checked, label,\n error = false, required = false,\n labelPlacement = \"start\",\n helperText,\n ...props\n}: {\n onChange?: SwitchProps['onChange'],\n checked?: boolean,\n label?: React.ReactNode,\n error?: boolean,\n required?: boolean,\n labelPlacement?: 'start' | 'end' | 'top' | 'bottom',\n helperText?: React.ReactNode,\n} & SwitchProps) {\n\n return (\n <FormControl error={error} sx={muiSwitchRootSx as object}>\n <FormControlLabel\n labelPlacement={labelPlacement}\n required={required} label={label}\n control={<Switch\n disableRipple\n {...{ onChange, checked, }}\n {...props} />\n }\n />\n {helperText && <FormHelperText>{helperText}</FormHelperText>}\n </FormControl>\n )\n}","import type { MuiComponentTheme } from '@/_utils/_types'\nimport type { SxProps, Theme } from '@mui/material/styles'\n\n/** MuiSwitch tokens: inset track, stable thumb, emphasis only on the on-track. */\n\nexport const switchTheme = {\n defaultProps: {\n disableFocusRipple: true,\n disableRipple: true,\n disableTouchRipple: true,\n \n },\n styleOverrides: {\n root: {\n '--switch-thumb': 'color-mix(in lab, var(--mui-palette-background-default) 72%, var(--mui-palette-text-primary) 28%)',\n '--switch-thumb-on': 'var(--mui-palette-background-default)',\n '--switch-track-off': 'var(--mui-palette-background-grey-1)',\n '--switch-track-on': 'var(--mui-palette-primary-emphasis)',\n '--switch-track-on-disabled': 'color-mix(in lab, var(--switch-track-on) 28%, var(--mui-palette-background-default))',\n overflow: 'visible',\n width: 40,\n height: 22,\n padding: 0,\n '&:has(.MuiSwitch-colorError)': {\n '--switch-track-on': 'var(--mui-palette-error-main)',\n },\n '&:has(.MuiSwitch-colorSuccess)': {\n '--switch-track-on': 'var(--mui-palette-success-main)',\n },\n '&:has(.MuiSwitch-colorWarning)': {\n '--switch-track-on': 'var(--mui-palette-warning-main)',\n },\n '&:has(.MuiSwitch-colorInfo)': {\n '--switch-track-on': 'var(--mui-palette-info-main)',\n },\n '&:has(.MuiSwitch-colorSystem)': {\n '--switch-track-on': 'var(--mui-palette-system-main)',\n },\n '&:has(.MuiSwitch-colorInsight)': {\n '--switch-track-on': 'var(--mui-palette-insight-main)',\n },\n '&:has(.MuiSwitch-colorSecondary)': {\n '--switch-track-on': 'var(--mui-palette-secondary-main)',\n },\n '& .MuiSwitch-switchBase': {\n boxSizing: 'border-box',\n top: 0,\n left: 0,\n padding: 2,\n width: 22,\n height: 22,\n color: 'var(--switch-thumb)',\n transition: 'transform 160ms ease',\n '&:hover': {\n backgroundColor: 'transparent',\n },\n '&.Mui-checked': {\n transform: 'translateX(18px)',\n color: 'var(--switch-thumb-on)',\n '& .MuiSwitch-thumb': {\n backgroundColor: 'var(--switch-thumb-on)',\n },\n },\n '&.Mui-checked + .MuiSwitch-track': {\n backgroundColor: 'var(--switch-track-on)',\n opacity: 1,\n },\n '&.Mui-checked.Mui-disabled + .MuiSwitch-track': {\n backgroundColor: 'var(--switch-track-on-disabled)',\n },\n '&.Mui-focusVisible': {\n outline: '2px solid var(--mui-palette-focus-1)',\n outlineOffset: 2,\n },\n },\n '& .MuiSwitch-thumb': {\n width: 18,\n height: 18,\n boxShadow: 'none',\n backgroundColor: 'var(--switch-thumb)',\n },\n '& .MuiSwitch-track': {\n width: '100%',\n height: '100%',\n borderRadius: 11,\n opacity: 1,\n backgroundColor: 'var(--switch-track-off)',\n transition: 'background-color 160ms ease',\n '&::before, &::after': {\n display: 'none',\n content: 'none',\n backgroundImage: 'none',\n },\n },\n '&.MuiSwitch-sizeSmall': {\n width: 32,\n height: 18,\n '& .MuiSwitch-switchBase': {\n padding: 2,\n width: 18,\n height: 18,\n '&.Mui-checked': {\n transform: 'translateX(14px)',\n },\n },\n '& .MuiSwitch-thumb': {\n width: 14,\n height: 14,\n },\n '& .MuiSwitch-track': {\n borderRadius: 9,\n },\n },\n },\n },\n} as const satisfies MuiComponentTheme<'MuiSwitch'>\n\n/** Static palette aliases for MuiSwitch wrapper root element */\nexport const muiSwitchRootSx: SxProps<Theme> = {\n '--switch-label-color': 'var(--mui-palette-text-grey-1)',\n '--switch-error-track-bg': 'var(--mui-palette-error-main)',\n alignItems: 'flex-start',\n '& .MuiFormControlLabel-root': {\n gap: '8px',\n margin: 0,\n alignItems: 'center',\n overflow: 'visible',\n maxWidth: 'none',\n },\n '& .MuiFormControlLabel-root.MuiFormControlLabel-labelPlacementStart, & .MuiFormControlLabel-root.MuiFormControlLabel-labelPlacementEnd, & .MuiFormControlLabel-root.MuiFormControlLabel-labelPlacementTop, & .MuiFormControlLabel-root.MuiFormControlLabel-labelPlacementBottom': {\n margin: 0,\n },\n '& .MuiFormControlLabel-label': {\n fontSize: '12px',\n userSelect: 'none',\n color: 'var(--switch-label-color)',\n overflow: 'visible',\n textOverflow: 'clip',\n flexShrink: 0,\n },\n '&.Mui-error .MuiSwitch-track': {\n backgroundColor: 'var(--switch-error-track-bg)',\n },\n} as const satisfies SxProps<Theme>\n\n/** Wrapper tokens for SwitchSoft (same control as Switch, label/error only). */\nexport const switchSoftRootSx: SxProps<Theme> = {\n ...muiSwitchRootSx,\n '--switch-label-color': 'var(--mui-palette-text-primary)',\n} as const satisfies SxProps<Theme>\n","import Switch, { type SwitchProps } from '@mui/material/Switch'\nimport { FormControl, FormControlLabel, FormHelperText } from '@/ele/Form'\nimport { switchSoftRootSx } from './themes'\n\nexport type SwitchSoftProps = {\n onChange?: SwitchProps['onChange']\n checked?: boolean\n label?: React.ReactNode\n error?: boolean\n required?: boolean\n labelPlacement?: 'start' | 'end' | 'top' | 'bottom'\n helperText?: React.ReactNode\n size?: 'small' | 'medium'\n} & Omit<SwitchProps, 'size'>\n\n/**\n * Simple themed switch. Geometry is MUI’s; colors come from the theme.\n */\nexport default function SwitchSoft({\n onChange,\n checked,\n label,\n error = false,\n required = false,\n labelPlacement = 'end',\n helperText,\n size = 'medium',\n sx,\n ...props\n}: SwitchSoftProps) {\n const control = (\n <Switch\n {...props}\n className={['ui-SwitchSoft', props.className].filter(Boolean).join(' ')}\n disableRipple\n disableFocusRipple\n disableTouchRipple\n size={size}\n checked={checked}\n onChange={onChange}\n sx={sx}\n />\n )\n\n return (\n <FormControl\n error={error}\n sx={switchSoftRootSx as object}\n >\n {label != null && label !== '' ? (\n <FormControlLabel\n labelPlacement={labelPlacement}\n required={required}\n label={label}\n control={control}\n />\n ) : control}\n {helperText ? <FormHelperText>{helperText}</FormHelperText> : null}\n </FormControl>\n )\n}\n","export { default as Tab } from '@mui/material/Tab'\nexport type { TabProps } from '@mui/material/Tab'\nexport { default as Tabs } from '@mui/material/Tabs'\nexport type { TabsProps } from '@mui/material/Tabs'\nexport * from './themes'","import type { MuiComponentTheme } from '@/_utils/_types'\n\nexport const tabTheme = {\n defaultProps: {\n disableRipple: true,\n },\n styleOverrides: {\n root: ({ theme }) => ({\n minHeight: 44,\n minWidth: 0,\n paddingInline: theme.spacing(1.5),\n paddingBlock: theme.spacing(1),\n borderRadius: theme.shape.borderRadius,\n textTransform: 'none',\n fontWeight: theme.typography.fontWeightMedium,\n color: 'var(--mui-palette-text-secondary)',\n transition: theme.transitions.create(['color', 'background-color'], {\n duration: theme.transitions.duration.shorter,\n }),\n '&:hover': {\n color: 'var(--mui-palette-primary-emphasis)',\n backgroundColor: 'color-mix(in lab, var(--mui-palette-primary-emphasis), transparent 92%)',\n },\n '&.Mui-selected': {\n color: 'var(--mui-palette-primary-emphasis)',\n backgroundColor: 'transparent',\n },\n '&.Mui-selected:hover': {\n backgroundColor: 'color-mix(in lab, var(--mui-palette-primary-emphasis), transparent 94%)',\n },\n '&.Mui-disabled': {\n color: 'var(--mui-palette-text-disabled)',\n },\n }),\n },\n} as const satisfies MuiComponentTheme<'MuiTab'>\n\nexport const tabsTheme = {\n styleOverrides: {\n root: {\n minHeight: 44,\n },\n list: {\n gap: 4,\n },\n indicator: {\n height: 3,\n borderRadius: 999,\n backgroundColor: 'var(--mui-palette-primary-emphasis)',\n },\n scrollButtons: {\n color: 'var(--mui-palette-text-secondary)',\n '&.Mui-disabled': {\n opacity: 0.4,\n },\n },\n },\n} as const satisfies MuiComponentTheme<'MuiTabs'>","'use client'\n\nimport React, {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport type { SxProps, Theme } from '@mui/material/styles'\n\nimport { mergeSx } from '@/_utils/_func'\nimport { Box } from '@/ele/Box'\nimport { Typography } from '@/ele/Typography'\nimport { KeyboardArrowDownIcon, MoreHorizIcon } from '@/icons/MuiIcon'\nimport { useMenu, MenuPopper } from '@/ele/Menu'\n\nimport type { TabPanelItem, TabPanelProps } from './types'\nimport { useTabsOverflowSplit } from './useTabsOverflow'\nimport {\n tabPanelRootSx,\n tabPanelStyleToCssVars,\n} from './tabPanelVars'\n\nconst TRACK_PAD = 3\nconst ITEM_GAP = 1\nconst DEFAULT_TRACK_RADIUS = 12\nconst DEFAULT_FOCUS_RADIUS = 10\n/** Keep in sync with `--tabpanel-indicator-ms` / `--tabpanel-indicator-ease`. */\nconst INDICATOR_EASE = 'cubic-bezier(0.32, 0.72, 0, 1)'\nconst INDICATOR_MS = 380\n\n/** Numbers are px so MUI does not multiply by theme.shape.borderRadius. */\nfunction toCssRadius(value: number | string): string {\n return typeof value === 'number' ? `${value}px` : value\n}\n\n/**\n * Commit WAAPI values to inline styles, then cancel so `fill: 'forwards'`\n * cannot leave a stale computed transform that fights Emotion/CSS classes.\n */\nfunction finishIndicatorAnimation(animation: Animation) {\n try {\n animation.commitStyles?.()\n } catch {\n // commitStyles can throw if the animation was already canceled.\n }\n animation.cancel()\n}\n\nfunction clearIndicatorAnimations(element: HTMLElement) {\n element.getAnimations().forEach((animation) => {\n finishIndicatorAnimation(animation)\n })\n}\n\nfunction resolveSelectedId(\n items: TabPanelItem[],\n value: string | undefined,\n internal: string | undefined\n): string | undefined {\n const candidate = value ?? internal\n if (candidate && items.some((item) => item.id === candidate && !item.disabled)) {\n return candidate\n }\n return items.find((item) => !item.disabled)?.id\n}\n\nfunction TabItemContent({\n item,\n showLabels,\n active,\n endAdornment,\n}: {\n item: TabPanelItem\n showLabels: boolean\n active: boolean\n endAdornment?: React.ReactNode\n}) {\n const showLabel = showLabels || !item.icon\n const badgeLabel =\n item.badge == null\n ? null\n : typeof item.badge === 'number' && item.badge > 99\n ? '99+'\n : String(item.badge)\n\n return (\n <Box\n sx={{\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n gap: 0.5,\n px: showLabels ? 1.15 : 0.9,\n py: 0.5,\n minHeight: 28,\n pr: endAdornment ? 0.75 : undefined,\n }}\n >\n {item.icon ? (\n <Box\n component=\"span\"\n sx={{\n display: 'inline-flex',\n color: 'inherit',\n lineHeight: 0,\n opacity: active ? 1 : 0.88,\n transition:\n 'opacity var(--tabpanel-indicator-ms) var(--tabpanel-indicator-ease)',\n '& > *': { fontSize: 16 },\n }}\n >\n {item.icon}\n </Box>\n ) : null}\n {showLabel ? (\n <Typography\n component=\"span\"\n sx={{\n m: 0,\n fontSize: '0.75rem',\n letterSpacing: '0.01em',\n fontWeight: active ? 600 : 500,\n color: 'inherit',\n lineHeight: 1.15,\n whiteSpace: 'nowrap',\n }}\n >\n {item.label}\n </Typography>\n ) : (\n <Typography\n component=\"span\"\n sx={{\n position: 'absolute',\n width: 1,\n height: 1,\n overflow: 'hidden',\n clip: 'rect(0 0 0 0)',\n }}\n >\n {item.label}\n </Typography>\n )}\n {endAdornment}\n {badgeLabel != null ? (\n <Box\n component=\"span\"\n aria-label={`${item.badge} notifications`}\n sx={{\n position: 'absolute',\n top: 1,\n right: endAdornment ? 10 : 1,\n zIndex: 1,\n pointerEvents: 'none',\n minWidth: 12,\n height: 12,\n px: 0.3,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 999,\n bgcolor: 'var(--tabpanel-badge-bg)',\n color: 'var(--tabpanel-badge-color)',\n fontSize: 8,\n fontWeight: 700,\n lineHeight: 1,\n }}\n >\n {badgeLabel}\n </Box>\n ) : null}\n </Box>\n )\n}\n\nfunction MoreTriggerContent({\n showLabels,\n open,\n}: {\n showLabels: boolean\n open: boolean\n}) {\n return (\n <Box\n sx={{\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n gap: 0.35,\n px: showLabels ? 1.15 : 0.9,\n py: 0.5,\n minHeight: 28,\n }}\n >\n <MoreHorizIcon sx={{ fontSize: 16 }} />\n {showLabels ? (\n <Typography\n component=\"span\"\n sx={{\n m: 0,\n fontSize: '0.75rem',\n fontWeight: 500,\n color: 'inherit',\n lineHeight: 1.15,\n whiteSpace: 'nowrap',\n }}\n >\n More\n </Typography>\n ) : null}\n <KeyboardArrowDownIcon\n sx={{\n fontSize: 14,\n opacity: 0.75,\n transition: 'transform 180ms ease',\n transform: open ? 'rotate(180deg)' : 'none',\n }}\n />\n </Box>\n )\n}\n\n/**\n * Adaptive content tabs: soft liquid track + morphing pill.\n * Overflow cuts trailing tabs into a More dropdown (selected stays visible).\n *\n * Colors / radii are CSS vars on the root (`tabPanelRootSx`). Override via\n * `sx`, `slotProps.root.style`, or `slotProps.root.sx`.\n */\nexport function TabPanel({\n items,\n value,\n defaultValue,\n onChange,\n showLabels = true,\n focusRadius = DEFAULT_FOCUS_RADIUS,\n trackRadius = DEFAULT_TRACK_RADIUS,\n sx,\n className,\n slotProps,\n}: TabPanelProps) {\n const isControlled = value !== undefined\n const [internalValue, setInternalValue] = useState<string | undefined>(\n () => defaultValue ?? items.find((item) => !item.disabled)?.id\n )\n\n const selectedId = resolveSelectedId(items, value, internalValue)\n\n const select = useCallback(\n (id: string) => {\n const item = items.find((entry) => entry.id === id)\n if (!item || item.disabled) {\n return\n }\n if (!isControlled) {\n setInternalValue(id)\n }\n onChange?.(id)\n },\n [isControlled, items, onChange]\n )\n\n const rootRef = useRef<HTMLDivElement>(null)\n const stripRef = useRef<HTMLDivElement>(null)\n const measureRef = useRef<HTMLDivElement>(null)\n const moreMeasureRef = useRef<HTMLDivElement>(null)\n const indicatorRef = useRef<HTMLDivElement>(null)\n const itemRefs = useRef<Map<string, HTMLButtonElement>>(new Map())\n const indicatorRectRef = useRef({ top: 0, left: 0, width: 0, height: 0 })\n const indicatorMountedRef = useRef(false)\n const indicatorAnimatingRef = useRef(false)\n\n const [availableWidth, setAvailableWidth] = useState(0)\n const [itemWidths, setItemWidths] = useState<number[]>([])\n const [moreWidth, setMoreWidth] = useState(0)\n\n const selectedIndex = useMemo(\n () => items.findIndex((item) => item.id === selectedId),\n [items, selectedId]\n )\n\n const { visibleIndexes, overflowIndexes } = useTabsOverflowSplit(\n itemWidths,\n moreWidth,\n availableWidth,\n selectedIndex,\n ITEM_GAP\n )\n\n const visibleItems = useMemo(\n () => visibleIndexes.map((index) => items[index]!).filter(Boolean),\n [visibleIndexes, items]\n )\n const overflowItems = useMemo(\n () => overflowIndexes.map((index) => items[index]!).filter(Boolean),\n [overflowIndexes, items]\n )\n const hasOverflow = overflowItems.length > 0\n\n const rootCssVars = useMemo(\n () => ({\n ...tabPanelStyleToCssVars(slotProps?.root?.style),\n '--tabpanel-focus-radius': toCssRadius(focusRadius),\n '--tabpanel-track-radius': toCssRadius(trackRadius),\n // Prop radii win unless style explicitly set them.\n ...(slotProps?.root?.style?.focusRadius != null\n ? { '--tabpanel-focus-radius': slotProps.root.style.focusRadius }\n : null),\n ...(slotProps?.root?.style?.trackRadius != null\n ? { '--tabpanel-track-radius': slotProps.root.style.trackRadius }\n : null),\n }),\n [focusRadius, trackRadius, slotProps?.root?.style]\n )\n\n useLayoutEffect(() => {\n const root = rootRef.current\n const measure = measureRef.current\n const moreMeasure = moreMeasureRef.current\n if (!root || !measure || !moreMeasure) {\n return\n }\n\n const update = () => {\n setAvailableWidth(Math.max(0, root.clientWidth - TRACK_PAD * 2))\n\n const widths = Array.from(\n measure.querySelectorAll<HTMLElement>('[data-tab-measure]')\n ).map((node) => node.getBoundingClientRect().width)\n\n setItemWidths((prev) => {\n if (\n prev.length === widths.length &&\n prev.every((width, index) => Math.abs(width - (widths[index] ?? 0)) < 0.5)\n ) {\n return prev\n }\n return widths\n })\n\n const nextMore = Math.max(\n moreMeasure.scrollWidth,\n moreMeasure.getBoundingClientRect().width\n )\n setMoreWidth((prev) => (Math.abs(prev - nextMore) < 0.5 ? prev : nextMore))\n }\n\n update()\n const observer = new ResizeObserver(update)\n observer.observe(root)\n observer.observe(measure)\n observer.observe(moreMeasure)\n return () => observer.disconnect()\n }, [items, showLabels])\n\n useLayoutEffect(() => {\n const strip = stripRef.current\n const indicator = indicatorRef.current\n if (!strip || !indicator || !selectedId) {\n return\n }\n\n const slideToActive = () => {\n const activeEl = itemRefs.current.get(selectedId)\n if (!activeEl) {\n return\n }\n\n const stripBox = strip.getBoundingClientRect()\n const itemBox = activeEl.getBoundingClientRect()\n const next = {\n top: itemBox.top - stripBox.top,\n left: itemBox.left - stripBox.left,\n width: itemBox.width,\n height: itemBox.height,\n }\n\n const applyRect = (rect: typeof next) => {\n indicator.style.transform = `translate3d(${rect.left}px, ${rect.top}px, 0)`\n indicator.style.width = `${rect.width}px`\n indicator.style.height = `${rect.height}px`\n }\n\n if (!indicatorMountedRef.current || indicatorRectRef.current.width <= 0) {\n clearIndicatorAnimations(indicator)\n indicator.style.transition = 'none'\n applyRect(next)\n indicator.style.opacity = '1'\n indicatorRectRef.current = next\n indicatorMountedRef.current = true\n return\n }\n\n // Commit in-flight WAAPI values to inline styles before measuring so\n // interrupt reads the true animated rect, not a stale fill/class mix.\n clearIndicatorAnimations(indicator)\n const liveBox = indicator.getBoundingClientRect()\n const prev = {\n top: liveBox.top - stripBox.top,\n left: liveBox.left - stripBox.left,\n width: liveBox.width,\n height: liveBox.height,\n }\n\n const same =\n Math.abs(prev.left - next.left) < 0.5 &&\n Math.abs(prev.top - next.top) < 0.5 &&\n Math.abs(prev.width - next.width) < 0.5 &&\n Math.abs(prev.height - next.height) < 0.5\n\n if (same) {\n applyRect(next)\n indicatorRectRef.current = next\n return\n }\n\n const bridgeLeft = Math.min(prev.left, next.left)\n const bridgeRight = Math.max(prev.left + prev.width, next.left + next.width)\n const bridge = {\n left: bridgeLeft,\n top: next.top,\n width: Math.max(bridgeRight - bridgeLeft, next.width),\n height: next.height,\n }\n\n indicator.style.transition = 'none'\n applyRect(prev)\n indicator.style.opacity = '1'\n indicatorAnimatingRef.current = true\n\n const animation = indicator.animate(\n [\n {\n transform: `translate3d(${prev.left}px, ${prev.top}px, 0)`,\n width: `${prev.width}px`,\n height: `${prev.height}px`,\n },\n {\n transform: `translate3d(${bridge.left}px, ${bridge.top}px, 0)`,\n width: `${bridge.width}px`,\n height: `${bridge.height}px`,\n offset: 0.4,\n },\n {\n transform: `translate3d(${next.left}px, ${next.top}px, 0)`,\n width: `${next.width}px`,\n height: `${next.height}px`,\n },\n ],\n {\n duration: INDICATOR_MS,\n easing: INDICATOR_EASE,\n fill: 'forwards',\n }\n )\n\n animation.onfinish = () => {\n finishIndicatorAnimation(animation)\n applyRect(next)\n indicatorRectRef.current = next\n indicatorAnimatingRef.current = false\n }\n animation.oncancel = () => {\n indicatorAnimatingRef.current = false\n }\n indicatorRectRef.current = next\n }\n\n slideToActive()\n const observer = new ResizeObserver(() => {\n if (indicatorAnimatingRef.current) {\n return\n }\n const activeEl = itemRefs.current.get(selectedId)\n const ind = indicatorRef.current\n if (!activeEl || !ind || !stripRef.current) {\n return\n }\n const stripBox = stripRef.current.getBoundingClientRect()\n const itemBox = activeEl.getBoundingClientRect()\n const next = {\n top: itemBox.top - stripBox.top,\n left: itemBox.left - stripBox.left,\n width: itemBox.width,\n height: itemBox.height,\n }\n clearIndicatorAnimations(ind)\n ind.style.transition = 'none'\n ind.style.transform = `translate3d(${next.left}px, ${next.top}px, 0)`\n ind.style.width = `${next.width}px`\n ind.style.height = `${next.height}px`\n ind.style.opacity = '1'\n indicatorRectRef.current = next\n indicatorMountedRef.current = true\n })\n observer.observe(strip)\n return () => observer.disconnect()\n }, [visibleIndexes, overflowIndexes, selectedId, items, showLabels, focusRadius])\n\n useEffect(() => {\n if (isControlled) {\n return\n }\n const next = resolveSelectedId(items, undefined, internalValue)\n if (next && next !== internalValue) {\n setInternalValue(next)\n }\n }, [items, isControlled, internalValue])\n\n const menu = useMenu({\n onItemClickClientArg: ({ closeHandler }) => {\n closeHandler?.()\n },\n })\n\n const menuOptions = useMemo(\n () =>\n overflowItems.map((item) => ({\n id: item.id,\n label: item.label,\n icon: item.icon ? (item.icon as React.ReactElement) : undefined,\n onClick: () => {\n if (!item.disabled) {\n select(item.id)\n }\n },\n })),\n [overflowItems, select]\n )\n\n const selectedItem = items.find((item) => item.id === selectedId)\n\n const stripSx = {\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'flex-start',\n flexWrap: 'nowrap',\n alignSelf: 'flex-start',\n maxWidth: '100%',\n gap: 'var(--tabpanel-item-gap)',\n p: 'var(--tabpanel-track-pad)',\n borderRadius: 'var(--tabpanel-track-radius)',\n border: 'none',\n bgcolor: 'var(--tabpanel-track-bg)',\n } as const satisfies SxProps<Theme>\n\n const tabButtonSx = {\n position: 'relative',\n zIndex: 1,\n appearance: 'none',\n border: 'none',\n background: 'transparent',\n p: 0,\n m: 0,\n borderRadius: 'var(--tabpanel-focus-radius)',\n color: 'var(--tabpanel-tab-color)',\n transition:\n 'color var(--tabpanel-indicator-ms) var(--tabpanel-indicator-ease)',\n flexShrink: 0,\n '&:hover': {\n color: 'var(--tabpanel-tab-color-active)',\n },\n '&:focus-visible': {\n outline: '2px solid var(--tabpanel-accent)',\n outlineOffset: 3,\n },\n '&[aria-selected=\"true\"]': {\n color: 'var(--tabpanel-tab-color-active)',\n '&:hover': {\n color: 'var(--tabpanel-tab-color-active)',\n },\n },\n } as const satisfies SxProps<Theme>\n\n const setItemRef = (id: string) => (node: HTMLButtonElement | null) => {\n if (node) {\n itemRefs.current.set(id, node)\n } else {\n itemRefs.current.delete(id)\n }\n }\n\n return (\n <Box\n ref={rootRef}\n className={className}\n sx={mergeSx(\n {\n ...tabPanelRootSx,\n ...rootCssVars,\n width: '100%',\n minWidth: 0,\n maxWidth: '100%',\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n gap: 1.5,\n },\n slotProps?.root?.sx,\n sx\n )}\n >\n <Box\n ref={measureRef}\n aria-hidden\n sx={{\n position: 'fixed',\n left: -99999,\n top: 0,\n visibility: 'hidden',\n pointerEvents: 'none',\n display: 'inline-flex',\n alignItems: 'center',\n flexWrap: 'nowrap',\n gap: 'var(--tabpanel-item-gap)',\n width: 'max-content',\n maxWidth: 'none',\n }}\n >\n {items.map((item) => (\n <Box\n key={`measure-${item.id}`}\n data-tab-measure\n sx={{ display: 'inline-flex', flexShrink: 0 }}\n >\n <TabItemContent item={item} showLabels={showLabels} active={false} />\n </Box>\n ))}\n </Box>\n\n <Box\n ref={moreMeasureRef}\n aria-hidden\n sx={{\n position: 'fixed',\n left: -99999,\n top: 0,\n visibility: 'hidden',\n pointerEvents: 'none',\n display: 'inline-flex',\n width: 'max-content',\n }}\n >\n <MoreTriggerContent showLabels={showLabels} open={false} />\n </Box>\n\n <Box\n ref={stripRef}\n role=\"tablist\"\n sx={mergeSx(\n stripSx,\n hasOverflow\n ? (slotProps?.menu?.sx ?? slotProps?.strip?.sx)\n : slotProps?.strip?.sx\n )}\n >\n <Box\n ref={indicatorRef}\n aria-hidden\n sx={mergeSx(\n {\n position: 'absolute',\n top: 0,\n left: 0,\n width: 0,\n height: 0,\n borderRadius: 'var(--tabpanel-focus-radius)',\n border: 'none',\n bgcolor: 'var(--tabpanel-focus-bg)',\n backdropFilter: 'blur(12px) saturate(1.2)',\n WebkitBackdropFilter: 'blur(12px) saturate(1.2)',\n boxShadow: 'var(--tabpanel-focus-shadow)',\n opacity: 0,\n pointerEvents: 'none',\n zIndex: 0,\n // Geometry (transform / width / height) is JS + WAAPI only —\n // never set transform here or Emotion fights fill: 'forwards'.\n willChange: 'transform, width, height',\n '[color-scheme=dark] &': {\n bgcolor: 'var(--tabpanel-focus-bg-dark)',\n backdropFilter: 'blur(8px) saturate(1.05)',\n WebkitBackdropFilter: 'blur(8px) saturate(1.05)',\n boxShadow: 'var(--tabpanel-focus-shadow-dark)',\n },\n },\n slotProps?.indicator?.sx\n )}\n />\n\n {visibleItems.map((item) => {\n const active = item.id === selectedId\n return (\n <Box\n key={item.id}\n component=\"button\"\n type=\"button\"\n role=\"tab\"\n aria-selected={active}\n disabled={item.disabled}\n ref={setItemRef(item.id)}\n onClick={() => select(item.id)}\n sx={mergeSx(\n {\n ...tabButtonSx,\n cursor: item.disabled ? 'not-allowed' : 'pointer',\n opacity: item.disabled ? 0.4 : 1,\n ...(item.disabled\n ? {\n color: 'var(--tabpanel-tab-color-disabled)',\n '&:hover': {\n color: 'var(--tabpanel-tab-color-disabled)',\n },\n }\n : null),\n },\n slotProps?.tab?.sx\n )}\n >\n <TabItemContent\n item={item}\n showLabels={showLabels}\n active={active}\n />\n </Box>\n )\n })}\n\n {hasOverflow ? (\n <>\n <Box\n component=\"button\"\n type=\"button\"\n aria-haspopup=\"menu\"\n aria-expanded={Boolean(menu.anchorEl)}\n aria-label={`More tabs, ${overflowItems.length} hidden`}\n onClick={menu.onTriggerClickHandler}\n sx={mergeSx(\n {\n ...tabButtonSx,\n cursor: 'pointer',\n },\n slotProps?.tab?.sx\n )}\n >\n <MoreTriggerContent\n showLabels={showLabels}\n open={Boolean(menu.anchorEl)}\n />\n </Box>\n <MenuPopper\n placement=\"bottom-end\"\n options={menuOptions}\n openMenuProps={{\n ...menu,\n initSelected: selectedId ? [selectedId] : [],\n }}\n />\n </>\n ) : null}\n </Box>\n\n {selectedItem?.content != null ? (\n <Box\n role=\"tabpanel\"\n sx={mergeSx({ minWidth: 0 }, slotProps?.panel?.sx)}\n >\n {selectedItem.content}\n </Box>\n ) : null}\n </Box>\n )\n}\n\nexport default TabPanel\n","import { useMemo } from 'react'\n\n/**\n * Progressive overflow: keep as many tabs as fit, reserve room for a trailing\n * \"More\" control, and always keep the selected tab on the strip when possible.\n */\nexport function computeVisibleIndexes(\n itemWidths: number[],\n moreWidth: number,\n availableWidth: number,\n selectedIndex: number,\n gapPx: number\n): { visibleIndexes: number[]; overflowIndexes: number[] } {\n const count = itemWidths.length\n if (count === 0) {\n return { visibleIndexes: [], overflowIndexes: [] }\n }\n\n if (itemWidths.some((width) => width <= 0) || availableWidth <= 0) {\n return {\n visibleIndexes: itemWidths.map((_, index) => index),\n overflowIndexes: [],\n }\n }\n\n const totalNeeded =\n itemWidths.reduce((sum, width) => sum + width, 0) +\n Math.max(0, count - 1) * gapPx\n\n if (totalNeeded <= availableWidth) {\n return {\n visibleIndexes: itemWidths.map((_, index) => index),\n overflowIndexes: [],\n }\n }\n\n const reserveMore = moreWidth > 0 ? moreWidth + gapPx : 0\n const budget = Math.max(0, availableWidth - reserveMore)\n\n const pickPrefix = (maxExclusive: number, limit: number) => {\n const indexes: number[] = []\n let used = 0\n for (let i = 0; i < maxExclusive; i += 1) {\n const width = itemWidths[i] ?? 0\n const nextUsed = used + width + (indexes.length > 0 ? gapPx : 0)\n if (nextUsed <= limit) {\n indexes.push(i)\n used = nextUsed\n } else {\n break\n }\n }\n return indexes\n }\n\n let visibleIndexes: number[]\n\n if (selectedIndex < 0 || selectedIndex >= count) {\n visibleIndexes = pickPrefix(count, budget)\n } else {\n const selectedWidth = itemWidths[selectedIndex] ?? 0\n const prefixBudget = Math.max(\n 0,\n budget - selectedWidth - (selectedWidth > 0 ? gapPx : 0)\n )\n const prefix = pickPrefix(selectedIndex, prefixBudget)\n\n let used =\n prefix.reduce((sum, index, order) => {\n return sum + (itemWidths[index] ?? 0) + (order > 0 ? gapPx : 0)\n }, 0) +\n (prefix.length > 0 ? gapPx : 0) +\n selectedWidth\n\n const after: number[] = []\n for (let i = selectedIndex + 1; i < count; i += 1) {\n const width = itemWidths[i] ?? 0\n const nextUsed = used + gapPx + width\n if (nextUsed <= budget) {\n after.push(i)\n used = nextUsed\n } else {\n break\n }\n }\n\n visibleIndexes = [...prefix, selectedIndex, ...after]\n }\n\n if (visibleIndexes.length === 0 && selectedIndex >= 0 && selectedIndex < count) {\n visibleIndexes = [selectedIndex]\n }\n\n const visibleSet = new Set(visibleIndexes)\n const overflowIndexes = itemWidths\n .map((_, index) => index)\n .filter((index) => !visibleSet.has(index))\n\n return { visibleIndexes, overflowIndexes }\n}\n\nexport function useTabsOverflowSplit(\n itemWidths: number[],\n moreWidth: number,\n availableWidth: number,\n selectedIndex: number,\n gapPx: number\n) {\n return useMemo(\n () =>\n computeVisibleIndexes(\n itemWidths,\n moreWidth,\n availableWidth,\n selectedIndex,\n gapPx\n ),\n [itemWidths, moreWidth, availableWidth, selectedIndex, gapPx]\n )\n}\n","import type { SxProps, Theme } from '@mui/material/styles'\n\n/**\n * Default TabPanel CSS variables — set on the root wrapper via `sx`.\n * Override with `sx`, `slotProps.root.sx`, or `slotProps.root.style`.\n */\nexport const tabPanelRootSx = {\n '--tabpanel-accent': 'var(--mui-palette-primary-emphasis)',\n '--tabpanel-track-bg':\n 'color-mix(in lab, var(--tabpanel-accent), transparent 92%)',\n '--tabpanel-tab-color': 'var(--mui-palette-text-secondary)',\n '--tabpanel-tab-color-active': 'var(--tabpanel-accent)',\n '--tabpanel-tab-color-disabled': 'var(--mui-palette-text-disabled)',\n '--tabpanel-badge-color': 'var(--mui-palette-error-main)',\n '--tabpanel-badge-bg':\n 'color-mix(in lab, var(--mui-palette-error-main), transparent 86%)',\n '--tabpanel-focus-bg':\n 'color-mix(in lab, var(--mui-palette-background-paper), transparent 78%)',\n '--tabpanel-focus-bg-dark':\n 'color-mix(in lab, var(--mui-palette-background-paper), transparent 55%)',\n '--tabpanel-focus-shadow': [\n 'inset 0 1px 1px color-mix(in lab, var(--mui-palette-background-paper), transparent 15%)',\n 'inset 0 -1px 3px color-mix(in lab, var(--tabpanel-accent), transparent 80%)',\n 'inset 0 0 16px color-mix(in lab, var(--mui-palette-background-paper), transparent 50%)',\n '0 0 0 1px color-mix(in lab, var(--mui-palette-background-paper), transparent 45%)',\n '0 0 20px color-mix(in lab, var(--tabpanel-accent), transparent 76%)',\n '0 8px 22px color-mix(in lab, var(--tabpanel-accent), transparent 84%)',\n ].join(', '),\n '--tabpanel-focus-shadow-dark': [\n 'inset 0 1px 0 rgba(255, 255, 255, 0.06)',\n 'inset 0 0 0 1px color-mix(in lab, var(--tabpanel-accent), transparent 82%)',\n '0 0 0 1px rgba(0, 0, 0, 0.35)',\n '0 4px 12px rgba(0, 0, 0, 0.35)',\n ].join(', '),\n '--tabpanel-focus-radius': '10px',\n '--tabpanel-track-radius': '12px',\n '--tabpanel-track-pad': '3px',\n '--tabpanel-item-gap': '1px',\n '--tabpanel-indicator-ease': 'cubic-bezier(0.32, 0.72, 0, 1)',\n '--tabpanel-indicator-ms': '380ms',\n} as const satisfies SxProps<Theme>\n\nexport type TabPanelStyleVars = {\n accent?: string\n trackBg?: string\n tabColor?: string\n tabColorActive?: string\n tabColorDisabled?: string\n badgeColor?: string\n badgeBg?: string\n focusBg?: string\n focusBgDark?: string\n focusShadow?: string\n focusShadowDark?: string\n focusRadius?: string\n trackRadius?: string\n}\n\n/** Maps typed style tokens onto CSS custom properties for the root wrapper. */\nexport function tabPanelStyleToCssVars(\n style?: TabPanelStyleVars\n): Record<string, string> {\n if (!style) {\n return {}\n }\n\n const vars: Record<string, string> = {}\n if (style.accent != null) vars['--tabpanel-accent'] = style.accent\n if (style.trackBg != null) vars['--tabpanel-track-bg'] = style.trackBg\n if (style.tabColor != null) vars['--tabpanel-tab-color'] = style.tabColor\n if (style.tabColorActive != null) {\n vars['--tabpanel-tab-color-active'] = style.tabColorActive\n }\n if (style.tabColorDisabled != null) {\n vars['--tabpanel-tab-color-disabled'] = style.tabColorDisabled\n }\n if (style.badgeColor != null) vars['--tabpanel-badge-color'] = style.badgeColor\n if (style.badgeBg != null) vars['--tabpanel-badge-bg'] = style.badgeBg\n if (style.focusBg != null) vars['--tabpanel-focus-bg'] = style.focusBg\n if (style.focusBgDark != null) {\n vars['--tabpanel-focus-bg-dark'] = style.focusBgDark\n }\n if (style.focusShadow != null) {\n vars['--tabpanel-focus-shadow'] = style.focusShadow\n }\n if (style.focusShadowDark != null) {\n vars['--tabpanel-focus-shadow-dark'] = style.focusShadowDark\n }\n if (style.focusRadius != null) {\n vars['--tabpanel-focus-radius'] = style.focusRadius\n }\n if (style.trackRadius != null) {\n vars['--tabpanel-track-radius'] = style.trackRadius\n }\n return vars\n}\n","'use client'\nimport Timeline from '@mui/lab/Timeline'\nimport TimelineItem from '@mui/lab/TimelineItem'\nimport TimelineSeparator from '@mui/lab/TimelineSeparator'\nimport TimelineConnector from '@mui/lab/TimelineConnector'\nimport TimelineContent from '@mui/lab/TimelineContent'\nimport TimelineOppositeContent from '@mui/lab/TimelineOppositeContent'\nimport TimelineDot from '@mui/lab/TimelineDot'\nimport { styled } from '@mui/material/styles'\nimport type { SxProps, Theme } from '@mui/material/styles'\nimport { IconButton } from '@/ele/Button'\nimport { muiTimelineRootSx } from './theme'\n\nconst nodeSpacing = \"2px\" as const;\n\n/**\n * Mui Timeline\n * \n * [Doc] (https://mui.com/material-ui/api/timeline/)\n */\nexport const MuiTLContainer = Timeline\n\n/**\n * Mui Timeline Item\n * \n * [Doc] (https://mui.com/material-ui/api/timeline-item/)\n */\nexport function MuiTLItem({\n content,\n icon, title, oppsiteContent,\n iconOnClick,\n isAnimated=false,\n isCompleted=false,\n isIconDisabled=false,\n sx,\n ...rest\n}: {\n oppsiteContent?:React.ReactNode,\n icon?: React.ReactNode,\n title?:React.ReactNode,\n content?:React.ReactNode,\n iconOnClick?:()=>void,\n isAnimated?:boolean,\n isCompleted?:boolean,\n isIconDisabled?:boolean,\n sx?: SxProps<Theme>;\n} & Omit<React.ComponentProps<typeof TimelineItem>, \"content\" | \"sx\" | \"title\">) {\n\n return (\n <StyledTLI isIconDisabled={isIconDisabled} {...rest} sx={sx}>\n {oppsiteContent && <TimelineOppositeContent\n sx={{ \n marginTop: nodeSpacing,\n color:\"var(--content-text)\",\n paddingTop:\"2px\",\n }}\n >\n {oppsiteContent}\n </TimelineOppositeContent>}\n <TimelineSeparator>\n <TimelineDot sx={{\n \"&.MuiTimelineDot-root\":{\n padding:0,\n background:\"transparent\",\n border:\"unset\",\n height:\"25px\",\n width:\"25px\",\n overflow:\"hidden\",\n borderRadius:\"50%\",\n margin:`${nodeSpacing} 0`,\n \"&>span\":{\n width:\"100%\",\n height:\"100%\",\n },\n },\n \"& .MuiButtonBase-root\":{\n height:\"100%\",\n width:\"100%\",\n borderRadius:\"50%\",\n \"& svg\":{\n fontSize:\"1em\",\n }\n },\n }}>\n <IconButton onClick={iconOnClick} disabled={isIconDisabled} sx={{padding: 0}}>\n {icon}\n </IconButton>\n </TimelineDot>\n\n <StyledTLConnector isAnimated={isAnimated} isCompleted={isCompleted}/>\n\n </TimelineSeparator> \n <TimelineContent sx={{ \n color:\"var(--content-text)\",\n marginTop: `${nodeSpacing}`,\n \"&.MuiTimelineContent-root\":{\n padding: '12px 16px',\n paddingTop:\"2px\",\n },\n }}>\n {title}\n {content}\n </TimelineContent>\n </StyledTLI>\n )\n}\n\nconst StyledTLI = styled(TimelineItem,{\n shouldForwardProp: (prop:string) => (\n prop !== 'isIconDisabled'\n )\n})<{isIconDisabled:boolean;}>(() => ({\n ...muiTimelineRootSx as object,\n\n \"& .MuiTimelineDot-root\":{\n boxShadow: \"none\",\n borderRadius: \"50%\",\n },\n // hover effect \n \"&.MuiTimelineItem-root:hover .MuiTimelineSeparator-root\":{\n // change separator color\n \"& .MuiTimelineConnector-root\":{\n },\n // change dot color\n \"& .MuiTimelineDot-root\":{\n boxShadow: \"var(--shadow)\",\n borderRadius: \"50%\",\n },\n },\n variants:[\n {\n props: p=>p.isIconDisabled,\n style: {\n // orginal shadow\n '--shadow': 'none',\n }\n },\n {\n props: p=>!p.isIconDisabled,\n style: {\n '--shadow': 'var(--shadow-outset-1)',\n }\n }\n ]\n}))\nconst StyledTLConnector = styled(TimelineConnector,{\n shouldForwardProp: (prop:string) => (\n prop !== 'isAnimated'\n && prop !== 'isCompleted'\n ),\n})<{isAnimated:boolean;isCompleted:boolean;}>(() => ({\n backgroundColor:\"var(--bg)\",\n position: \"relative\",\n overflow: \"hidden\",\n \"&::before\": {\n content: '\"\"',\n position: \"absolute\",\n top: \"-100%\",\n left: 0,\n width: \"0%\",\n height: \"200%\",\n borderRight: \"2px dashed var(--border-color)\",\n animation: \"var(--animated-connector)\",\n },\n \"@keyframes dash\": {\n \"to\": { transform: \"translateY(50%)\"},\n },\n variants:[\n // animation + isCompleted\n {\n props: p=>p.isAnimated && p.isCompleted,\n style: {\n \"--animated-connector\": \"dash 10s linear infinite\",\n \"--bg\": \"transparent\",\n \"--border-color\": \"var(--connector-border-color)\",\n }\n },\n // no animation + isCompleted\n {\n props: p=>!p.isAnimated && p.isCompleted,\n style: {\n \"--animated-connector\": \"none\",\n \"--bg\": \"var(--connector-focus-color)\",\n \"--border-color\": \"transparent\",\n }\n },\n // animation + not isCompleted\n {\n props: p=>p.isAnimated && !p.isCompleted,\n style: {\n \"--animated-connector\": \"dash 1s linear infinite\",\n \"--bg\": \"transparent\",\n \"--border-color\": \"var(--connector-border-color)\",\n }\n },\n // no animation + not isCompleted\n {\n props: p=>!p.isAnimated && !p.isCompleted,\n style: {\n \"--animated-connector\": \"none\",\n \"--bg\": \"var(--connector-non-focus-color)\",\n \"--border-color\": \"transparent\",\n }\n },\n ]\n}))\n","import type { SxProps, Theme } from '@mui/material/styles'\n\nexport const muiTimelineRootSx: SxProps<Theme> = {\n '--content-text': 'var(--mui-palette-text-subscript)',\n '--connector-border-color': 'var(--mui-palette-focus-1)',\n '--connector-focus-color': 'var(--mui-palette-focus-1)',\n '--connector-non-focus-color': 'var(--mui-palette-background-grey-1)',\n} as const satisfies SxProps<Theme>\n","'use client'\nimport React from 'react';\nimport MuiToggleButton from '@mui/material/ToggleButton';\nimport MuiToggleButtonGroup from '@mui/material/ToggleButtonGroup';\nimport { styled } from '@mui/material/styles';\nimport { Box } from '@/ele/Box';\n\ntype Option = {\n id:string;\n value:string;\n label:string;\n icon?:React.ReactNode;\n rotateIconOnSelected?:React.ComponentProps<typeof StyledToggleButton>[\"rotateIconOnSelected\"];\n onClick?:()=>void;\n disabled?:boolean;\n}\ntype ToggleButtonGroupProps = {\n value:string;\n onChange:(event: React.MouseEvent<HTMLElement>, newValue: string) => void;\n options:Option[];\n} & Omit<React.ComponentProps<typeof MuiToggleButtonGroup>, \"value\" | \"onChange\" | \"exclusive\">;\nexport default function ToggleButtonGroup({ value, onChange, options, color, ...rest }: ToggleButtonGroupProps) {\n return (\n <MuiToggleButtonGroup {...rest} value={value} exclusive onChange={onChange}>\n {options.map((option) => (\n <ToggleButton key={option.id} option={option} color={color} />\n ))}\n </MuiToggleButtonGroup>\n )\n}\n\ntype ToggleButtonProps = Omit<\nReact.ComponentProps<typeof MuiToggleButton>, \n\"value\" | \"onClick\" |\"disabled\"\n|\"children\"|\"disableRipple\"\n> & {option:Option}\nexport function ToggleButton(p:ToggleButtonProps){\n const {option,...rest} = p;\n return (\n <StyledToggleButton {...rest}\n value={option.value}\n rotateIconOnSelected={option.rotateIconOnSelected}\n disableRipple={false}\n disabled={option.disabled}\n onClick={option.onClick}>\n <Box sx={(theme)=>({\n display:\"flex\",\n gap:theme.spacing(0.5),\n alignItems:\"center\", \n background:\"transparent\",\n paddingLeft: theme.spacing(1.5),\n paddingRight: theme.spacing(1.5),\n })}>\n <Box sx={{overflow:\"hidden\", textOverflow:\"ellipsis\", whiteSpace:\"nowrap\", flex:1}}>{option.label}</Box>\n {option.icon && <Box sx={{display:\"flex\", flex:0}}>{option.icon}</Box>}\n </Box>\n </StyledToggleButton>\n )\n}\n\ntype CustomToggleButtonProps = {\n rotateIconOnSelected?:boolean;\n}\nconst StyledToggleButton = styled(MuiToggleButton,{\n shouldForwardProp: (prop) => prop !== 'rotateIconOnSelected',\n})<CustomToggleButtonProps>({\n variants: [\n {\n props: { rotateIconOnSelected: true },\n style: {\n \"&.Mui-selected svg\":{\n transform:\"rotate(360deg)\",\n transition:\"transform 0.75s\",\n },\n \n }\n },\n ]\n})","import type { MuiComponentTheme } from '@/_utils/_types'\n\nexport const toggleButtonGroupTheme = {\n defaultProps:{\n \n },\n styleOverrides: {\n root: ({theme}) => ({\n width: 'fit-content',\n maxWidth: '100%',\n\n border:\"none\",\n boxShadow:\"var(--mui-palette-shadow-border-1)\",\n padding: theme.spacing(0.5),\n borderRadius:\"10px\",\n gap:theme.spacing(0.5),\n }),\n }\n} as const satisfies MuiComponentTheme<\"MuiToggleButtonGroup\">\n\nexport const toggleButtonTheme = {\n defaultProps: {\n disableRipple: false,\n },\n styleOverrides: {\n root: () => ({\n '--unselected-hover-bg': 'var(--mui-palette-background-hover-1)',\n '--selected-bg': 'var(--mui-palette-focus-1)',\n '--selected-hover-bg': 'color-mix(in lab, var(--selected-bg), var(--unselected-hover-bg) 30%)',\n '--disabled-bg': 'var(--mui-palette-background-disabled)',\n '--disabled-color': 'var(--mui-palette-text-disabled)',\n '--c': 'var(--mui-palette-text-primary)',\n\n border:\"none\",\n textTransform:\"none\",\n padding:\"0px\",\n overflow:\"hidden\",\n color:\"var(--c)\",\n maxWidth:\"200px\",\n\n [`\n &.MuiButtonBase-root, \n &.MuiToggleButtonGroup.MuiButtonBase-root,\n &.MuiToggleButtonGroup-middleButton.MuiButtonBase-root,\n &.MuiToggleButtonGroup-firstButton.MuiButtonBase-root,\n &.MuiToggleButtonGroup-lastButton.MuiButtonBase-root`]:{\n borderRadius:\"8px\",\n },\n\n \"&:hover\":{\n backgroundColor:\"var(--unselected-hover-bg)\",\n },\n\n \"&.Mui-selected\":{\n background:\"var(--selected-bg)\",\n transition:\"background 0.3s\",\n \"&:hover\":{\n background:\"var(--selected-hover-bg)\",\n },\n \"&.Mui-disabled\":{\n background:\"var(--disabled-bg)\",\n },\n },\n \"&.Mui-disabled\":{\n color:\"var(--disabled-color)\",\n border:\"none\",\n },\n\n \"& svg\":{\n fontSize:\"inherit\",\n },\n\n \"&.Mui-error\":{ \n \"--c\":'var(--mui-palette-error-main)', \n \"--unselected-hover-bg\": 'color-mix(in lab, var(--mui-palette-error-main), var(--mui-palette-background-hover-1) 87%)',\n },\n \"&.MuiToggleButton-info\":{ \n \"--c\":'var(--mui-palette-info-main)', \n \"--unselected-hover-bg\": 'color-mix(in lab, var(--mui-palette-info-main), var(--mui-palette-background-hover-1) 84%)',\n },\n \"&.MuiToggleButton-success\":{ \n \"--c\":'var(--mui-palette-success-dark)', \n \"--unselected-hover-bg\": 'color-mix(in lab, var(--mui-palette-success-dark), var(--mui-palette-background-hover-1) 77%)',\n },\n \"&.MuiToggleButton-warning\":{ \n \"--c\":'var(--mui-palette-warning-main)', \n \"--unselected-hover-bg\": 'color-mix(in lab, var(--mui-palette-warning-main), var(--mui-palette-background-hover-1) 82%)',\n },\n \"&.MuiToggleButton-primary\":{\n \"--c\":'var(--mui-palette-primary-emphasis)',\n \"--selected-bg\": 'color-mix(in lab, var(--mui-palette-container-bg-primary), var(--mui-palette-primary-emphasis) 26%)',\n \"--selected-hover-bg\": 'color-mix(in lab, var(--selected-bg), var(--mui-palette-primary-emphasis) 18%)',\n \"--unselected-hover-bg\": 'color-mix(in lab, var(--mui-palette-primary-emphasis), var(--mui-palette-background-hover-1) 84%)',\n },\n \"&.MuiToggleButton-secondary\":{ \"--c\":'var(--mui-palette-secondary-main)', },\n }),\n }\n} as const satisfies MuiComponentTheme<\"MuiToggleButton\">","'use client'\nimport { useState, useEffect, useRef } from 'react'\nimport { ClickAwayListener } from '@/ele/Overlay'\nimport { styled } from '@mui/material'\nimport type {Signal} from '@preact/signals-react'\n\nimport { LineInput } from '@/ele/Input'\nimport { EditIcon } from '@/icons/MuiIcon'\nimport { Box } from '@/ele/Box'\nimport { varDisplayRootStyle } from '../theme'\n\nconst DisplaySpan = styled('span', {\n shouldForwardProp: (prop) => prop !== 'editMode',\n})<{ editMode: boolean }>(() => ({\n ...varDisplayRootStyle,\n borderBottom: \"1px dotted var(--var-border-color)\",\n lineHeight: 1,\n fontStyle: \"italic\",\n margin: \"0 2px\",\n maxWidth: \"300px\",\n overflow: \"hidden\",\n display: \"inline-flex\",\n \"&>a>span\": {\n padding: \"0 2px\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"pre\",\n },\n variants: [\n {\n props: { editMode: true },\n style: { display: 'none' },\n },\n ],\n}))\n\n/**\n * A component that share the same variable accross the app\n * \n * @param defaultValue The default value of the variable\n * @param currentValue The current value of the variable\n * @param updateValue The function to update the variable\n * @param onChangeUpdate If true, the variable will be updated on change\n * \n */\nexport default function Var({\n defaultValue, currentValue, updateValue, onChangeUpdate = false\n}: {\n defaultValue: string | Signal<string>,\n currentValue: string | Signal<string>,\n updateValue: (value: string) => void,\n onChangeUpdate?: boolean,\n}) {\n const [editMode, setEditMode] = useState(false)\n const firstRenderRef = useRef(true)\n const [tmpVar, setTmpVar] = useState(defaultValue)\n const tmpVarRef = useRef(tmpVar)\n const updateValueRef = useRef(updateValue)\n tmpVarRef.current = tmpVar\n updateValueRef.current = updateValue\n\n const onChange: React.ComponentProps<typeof LineInput>[\"onChange\"] = (e) => {\n setTmpVar(e.target.value)\n if (onChangeUpdate) {\n // update the current value on change to avoid data inconsistency\n updateValue(e.target.value)\n }\n }\n\n useEffect(() => {\n if (firstRenderRef.current) {\n firstRenderRef.current = false\n return\n }\n\n if (editMode) {\n // reset value to current value\n setTmpVar(currentValue)\n return\n }\n if (!editMode) {\n // if current value is a string set the value directly\n if (typeof tmpVarRef.current === \"string\") {\n // update the current value\n return updateValueRef.current(tmpVarRef.current)\n }\n // if current value is a signal, do nothing \n // beacause this implies that the input is no modified\n }\n // only update when start editing or stop editing\n }, [editMode, currentValue])\n\n return (\n <>\n <DisplaySpan editMode={editMode}>\n <Box component=\"a\" onClick={(e) => {\n e.preventDefault()\n setEditMode(true)\n }}\n sx={{\n display: \"inline-flex\",\n alignItems: \"center\",\n gap: \"4px\",\n overflow: \"hidden\",\n }}>\n <Box component=\"span\" sx={{ flex: 1 }}>{currentValue}</Box>\n <Box component=\"span\"><EditIcon sx={{ \"&.MuiSvgIcon-root\": { fontSize: \"inherit\" } }} /></Box>\n </Box>\n </DisplaySpan>\n\n {editMode && <Box component=\"span\"\n sx={{\n display: 'inline-flex',\n padding: \"0 8px\",\n }}>\n <ClickAwayListener onClickAway={() => setEditMode(false)}>\n\n <LineInput value={tmpVar} size=\"small\"\n margin=\"none\"\n autoFocus\n onChange={onChange}\n InputProps={{\n endAdornment: <EditIcon sx={{ \"&.MuiSvgIcon-root\": { fontSize: \"inherit\" } }} />,\n }}\n sx={{\n \"&.MuiFormControl-root.MuiTextField-root\": {\n justifyContent: \"center\",\n }\n }}\n onKeyDown={(e) => {\n // if enter is pressed, update the value and exit edit mode\n if (e.key === \"Enter\") {\n setEditMode(false)\n // update the value\n if (typeof tmpVar === \"string\") {\n updateValue(tmpVar)\n }\n }\n // if escape is pressed, exit edit mode\n if (e.key === \"Escape\") {\n setEditMode(false)\n // reset the value to current value\n setTmpVar(currentValue)\n }\n }}\n />\n\n </ClickAwayListener>\n </Box>}\n </>\n )\n}\n","export const varDisplayRootStyle = {\n '--var-border-color': 'var(--mui-palette-text-href)',\n} as const\n","'use client'\nimport { useState, useEffect, useRef } from 'react'\nimport { ClickAwayListener } from '@/ele/Overlay'\nimport { styled } from '@mui/material'\n\nimport { EditIcon } from '@/icons/MuiIcon'\nimport { Box } from '@/ele/Box'\nimport { varDisplayRootStyle } from '../theme'\n\nconst DisplaySpan = styled('span', {\n shouldForwardProp: (prop) => prop !== 'editMode',\n})<{ editMode: boolean }>(() => ({\n ...varDisplayRootStyle,\n borderBottom: \"1px dotted var(--var-border-color)\",\n lineHeight: 1,\n fontStyle: \"italic\",\n margin: \"0 2px\",\n display: \"inline-flex\",\n \"&>a>span\": { padding: \"0 2px\" },\n variants: [\n {\n props: { editMode: true },\n style: { display: 'none' },\n },\n ],\n}))\n\n/**\n * A component that render a field for the variable \n * with dynamic editor, display and extra button\n * \n * @param defaultValue The default value of the variable\n * @param currentValue The current value of the variable\n * @param updateValue The function to update the variable\n * @param Editor component that edit the value\n * @param Display component that display the value\n * @param extraButton extra button next to the edit icon\n * \n */\nexport default function VarField({\n currentValue,\n Editor,\n updateValue,\n Display,\n extraButton,\n}: {\n currentValue: unknown,\n updateValue: (value: unknown) => void,\n Editor: React.FC<{\n setTmp: (value: unknown) => void,\n tempValue: unknown,\n }>,\n Display: React.FC<{\n value: unknown,\n }>,\n extraButton?: React.ReactNode,\n}) {\n const [editMode, setEditMode] = useState(false)\n const firstRenderRef = useRef(true)\n const [tmpVar, setTmpVar] = useState(currentValue)\n const tmpVarRef = useRef(tmpVar)\n const updateValueRef = useRef(updateValue)\n tmpVarRef.current = tmpVar\n updateValueRef.current = updateValue\n\n useEffect(() => {\n if (firstRenderRef.current) {\n firstRenderRef.current = false\n return\n }\n\n if (!editMode) {\n updateValueRef.current(tmpVarRef.current)\n }\n // only update when start editing or stop editing\n }, [editMode])\n\n return (\n <>\n <DisplaySpan editMode={editMode}>\n <Box component=\"a\" onClick={() => setEditMode(true)}\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n gap: \"8px\",\n }}>\n <Display value={tmpVar} />\n <Box component=\"span\"><EditIcon sx={{ \"&.MuiSvgIcon-root\": { fontSize: \"inherit\" } }} /></Box>\n {extraButton}\n </Box>\n </DisplaySpan>\n\n {editMode && <Box component=\"span\"\n sx={{\n display: \"inline-flex\",\n padding: \"0 8px\",\n }}>\n <ClickAwayListener onClickAway={() => setEditMode(false)}>\n <span>\n <Editor setTmp={setTmpVar} tempValue={tmpVar} />\n </span>\n </ClickAwayListener>\n </Box>}\n </>\n )\n}\n","'use client'\nimport React from 'react'\nimport { SnackbarProvider, type SnackbarProviderProps } from 'notistack'\nimport { MuiAlertVariant } from './MuiAlertVariant'\nimport { CollapsableAlert } from './CollapsableAlert'\nimport { ALERT_VARIANTs, DEFAULTs } from './_utils'\n\nconst ALERT_COMPONENTS: SnackbarProviderProps['Components'] = {\n [ALERT_VARIANTs.info]: MuiAlertVariant,\n [ALERT_VARIANTs.warning]: MuiAlertVariant,\n [ALERT_VARIANTs.success]: MuiAlertVariant,\n [ALERT_VARIANTs.error]: MuiAlertVariant,\n [ALERT_VARIANTs.system]: MuiAlertVariant,\n [ALERT_VARIANTs.insight]: MuiAlertVariant,\n [ALERT_VARIANTs.collapsable]: CollapsableAlert,\n}\n\n/**\n * AlertProvider - Context provider for the alert system\n * Sets up notistack with all custom alert variant components\n * Should wrap the entire application or specific sections that need alerts\n */\nexport const AlertProvider = React.memo(function AlertProvider({ children }: { children: React.ReactNode }) {\n return (\n <SnackbarProvider\n maxSnack={DEFAULTs.PROVIDER_CONFIGs.maxSnack}\n anchorOrigin={DEFAULTs.ANCHOR_ORIGIN}\n Components={ALERT_COMPONENTS}\n >\n {children}\n </SnackbarProvider>\n )\n})\n","'use client'\nimport { forwardRef, useCallback } from 'react'\nimport { useSnackbar, CustomContentProps } from 'notistack'\nimport Alert from '@mui/material/Alert'\n\nimport { type AlertOptions, ALERT_VARIANTs } from './_utils'\n\n// Map custom variants to MUI Alert severity / color\nconst variantToSeverity = {\n [ALERT_VARIANTs.info]: 'info',\n [ALERT_VARIANTs.warning]: 'warning',\n [ALERT_VARIANTs.success]: 'success',\n [ALERT_VARIANTs.error]: 'error',\n [ALERT_VARIANTs.system]: 'system',\n [ALERT_VARIANTs.insight]: 'insight',\n [ALERT_VARIANTs.collapsable]: 'info', // Default to info for collapsable\n} as const\n\ntype MuiSeverity = 'info' | 'warning' | 'success' | 'error' | 'system' | 'insight'\n\nexport const MuiAlertVariant = forwardRef<HTMLDivElement, CustomContentProps & AlertOptions>(\n (props, ref) => {\n const { id, message, variant, icon, style } = props\n const { closeSnackbar } = useSnackbar()\n\n const handleDismiss = useCallback(() => {\n closeSnackbar(id)\n }, [id, closeSnackbar])\n\n // Convert custom variant to MUI severity\n const severity = variantToSeverity[variant as keyof typeof variantToSeverity] || 'info' as MuiSeverity\n\n return (\n <Alert\n ref={ref}\n severity={severity}\n onClose={handleDismiss}\n icon={icon}\n style={style}\n >\n {message}\n </Alert>\n )\n }\n)\n","'use client'\nimport { enqueueSnackbar, useSnackbar } from 'notistack'\nimport { randomStrGenerator } from '@/_utils/_func/random'\nimport { AlertOptions, CollapsableAlertOptions, AlertOperationResult } from './types'\nimport { ALERT_VARIANTs, DEFAULTs } from './const'\n\ntype EnqueueFn = ReturnType<typeof useSnackbar>['enqueueSnackbar']\n\nfunction enqueueAlertWith(\n enqueue: EnqueueFn,\n {\n message,\n variant,\n id = randomStrGenerator(10),\n autoHideDuration = DEFAULTs.AUTO_HIDE_DURATION,\n anchorOrigin = DEFAULTs.ANCHOR_ORIGIN,\n icon,\n ...rest\n }: AlertOptions\n): AlertOperationResult<string> {\n try {\n enqueue(message, {\n variant,\n anchorOrigin,\n autoHideDuration,\n key: id,\n id,\n icon,\n ...rest,\n })\n return { success: true, data: id as string }\n } catch (error) {\n console.error('Failed to enqueue alert:', error)\n return { success: false, error: (error instanceof Error ? error.message : 'Unknown error') }\n }\n}\n\nfunction enqueueCollapsableWith(\n enqueue: EnqueueFn,\n {\n id = randomStrGenerator(10),\n autoHideDuration = DEFAULTs.AUTO_HIDE_DURATION,\n anchorOrigin = DEFAULTs.ANCHOR_ORIGIN,\n componentProps = {},\n componentWrapperProps = {\n Renderer: () => null,\n },\n ...rest\n }: CollapsableAlertOptions\n): AlertOperationResult<string> {\n try {\n enqueue({\n variant: ALERT_VARIANTs.collapsable,\n anchorOrigin,\n autoHideDuration,\n componentProps,\n componentWrapperProps,\n id,\n ...rest,\n })\n return { success: true, data: id as string }\n } catch (error) {\n console.error('Failed to enqueue collapsable alert:', error)\n return { success: false, error: (error instanceof Error ? error.message : 'Unknown error') }\n }\n}\n\nexport function useAlert() {\n const { enqueueSnackbar: enqueue, closeSnackbar } = useSnackbar()\n\n const enqueueAlert = (options: AlertOptions) => enqueueAlertWith(enqueue, options)\n const enqueueCollapsable = (options: CollapsableAlertOptions) => enqueueCollapsableWith(enqueue, options)\n const enqueueError = (message: string | React.ReactNode, options?: Omit<AlertOptions, 'message' | 'variant'>) =>\n enqueueAlert({ variant: ALERT_VARIANTs.error, message, ...options })\n const enqueueSuccess = (message: string | React.ReactNode, options?: Omit<AlertOptions, 'message' | 'variant'>) =>\n enqueueAlert({ variant: ALERT_VARIANTs.success, message, ...options })\n const enqueueWarning = (message: string | React.ReactNode, options?: Omit<AlertOptions, 'message' | 'variant'>) =>\n enqueueAlert({ variant: ALERT_VARIANTs.warning, message, ...options })\n const enqueueInfo = (message: string | React.ReactNode, options?: Omit<AlertOptions, 'message' | 'variant'>) =>\n enqueueAlert({ variant: ALERT_VARIANTs.info, message, ...options })\n const enqueueSystem = (message: string | React.ReactNode, options?: Omit<AlertOptions, 'message' | 'variant'>) =>\n enqueueAlert({ variant: ALERT_VARIANTs.system, message, ...options })\n const enqueueInsight = (message: string | React.ReactNode, options?: Omit<AlertOptions, 'message' | 'variant'>) =>\n enqueueAlert({ variant: ALERT_VARIANTs.insight, message, ...options })\n\n return {\n enqueueAlert,\n enqueueCollapsable,\n enqueueError,\n enqueueSuccess,\n enqueueWarning,\n enqueueInfo,\n enqueueSystem,\n enqueueInsight,\n closeSnackbar,\n }\n}\n\nexport function enqueueAlert({\n message,\n variant,\n id = randomStrGenerator(10),\n autoHideDuration = DEFAULTs.AUTO_HIDE_DURATION,\n anchorOrigin = DEFAULTs.ANCHOR_ORIGIN,\n icon,\n ...rest\n}: AlertOptions): AlertOperationResult<string> {\n return enqueueAlertWith(enqueueSnackbar, {\n message,\n variant,\n id,\n autoHideDuration,\n anchorOrigin,\n icon,\n ...rest,\n })\n}\n\nexport function enqueueCollapsable({\n id = randomStrGenerator(10),\n autoHideDuration = DEFAULTs.AUTO_HIDE_DURATION,\n anchorOrigin = DEFAULTs.ANCHOR_ORIGIN,\n componentProps = {},\n componentWrapperProps = {\n Renderer: () => null, \n },\n ...rest\n}: CollapsableAlertOptions): AlertOperationResult<string> {\n return enqueueCollapsableWith(enqueueSnackbar, {\n id,\n autoHideDuration,\n anchorOrigin,\n componentProps,\n componentWrapperProps,\n ...rest,\n })\n}\n\nexport function enqueueError(message: string | React.ReactNode, options?: Omit<AlertOptions, 'message' | 'variant'>) {\n return enqueueAlert({\n variant: ALERT_VARIANTs.error,\n message,\n ...options\n })\n}\n\nexport function enqueueSuccess(message: string | React.ReactNode, options?: Omit<AlertOptions, 'message' | 'variant'>) {\n return enqueueAlert({\n variant: ALERT_VARIANTs.success,\n message,\n ...options\n })\n}\n\nexport function enqueueWarning(message: string | React.ReactNode, options?: Omit<AlertOptions, 'message' | 'variant'>) {\n return enqueueAlert({\n variant: ALERT_VARIANTs.warning,\n message,\n ...options\n })\n}\n\nexport function enqueueInfo(message: string | React.ReactNode, options?: Omit<AlertOptions, 'message' | 'variant'>) {\n return enqueueAlert({\n variant: ALERT_VARIANTs.info,\n message,\n ...options\n })\n}\n\nexport function enqueueSystem(message: string | React.ReactNode, options?: Omit<AlertOptions, 'message' | 'variant'>) {\n return enqueueAlert({\n variant: ALERT_VARIANTs.system,\n message,\n ...options\n })\n}\n\nexport function enqueueInsight(message: string | React.ReactNode, options?: Omit<AlertOptions, 'message' | 'variant'>) {\n return enqueueAlert({\n variant: ALERT_VARIANTs.insight,\n message,\n ...options\n })\n}\n","export const ALERT_VARIANTs = {\n info: 'myInfo',\n warning: 'myWarning',\n success: 'mySuccess',\n error: 'myError',\n system: 'mySystem',\n insight: 'myInsight',\n collapsable: 'myCollapsable',\n} as const\n\nexport const DEFAULTs = {\n AUTO_HIDE_DURATION: 3000,\n ANCHOR_ORIGIN: { horizontal: \"right\" as const, vertical: \"top\" as const },\n PROVIDER_CONFIGs: {\n maxSnack: 3,\n dense: true,\n preventDuplicate: true,\n autoHideDuration: 3000,\n }\n} as const\n\nexport const ERRORs = {\n invalid_variant: 'Invalid alert variant provided',\n enqueue_failed: 'Failed to enqueue alert',\n missing_message: 'Message is required for alert',\n missing_component_props: 'Component props are required for collapsible alert',\n} as const\n","'use client'\nimport { forwardRef, useState, useCallback } from 'react'\nimport { CustomContentProps, useSnackbar } from 'notistack'\nimport CardActions from '@mui/material/CardActions'\nimport type { BoxProps } from '@mui/material/Box'\nimport { CardContainer } from '@/ele/Card'\nimport { Collapse } from '@/ele/Collapse'\nimport { IconButton } from '@/ele/Button'\nimport { Typography } from '@/ele/Typography'\nimport { Box } from '@/ele/Box'\nimport { ExpandMoreIcon, CloseIcon } from '@/icons/MuiIcon'\nimport { type CollapsableAlertOptions } from './_utils'\nimport { collapsableAlertRootSx } from './theme'\nimport { mergeSx } from '@/_utils/_func'\n\nexport const CollapsableAlert = forwardRef<HTMLDivElement, CustomContentProps & CollapsableAlertOptions>(\n ({ id, componentProps, componentWrapperProps, style }, ref) => {\n const [expanded, setExpanded] = useState(false)\n const { closeSnackbar } = useSnackbar()\n\n const handleExpandClick = useCallback(() => {\n setExpanded((oldExpanded) => !oldExpanded)\n }, [])\n\n const handleDismiss = useCallback(() => {\n closeSnackbar(id)\n }, [id, closeSnackbar])\n\n // Extract Renderer and other props following original pattern\n const {\n Renderer,\n ...restCollapse\n } = componentWrapperProps || {}\n\n return (\n <CardContainer \n ref={ref}\n style={style}\n sx={mergeSx(collapsableAlertRootSx, {\n \"&.MuiPaper-root\": {\n background: 'var(--collapse-bg)',\n backdropFilter: \"blur(9px)\",\n transition: \"all 0.3s ease-in-out, color 0s\",\n color: \"text.primary\",\n height: \"fit-content\",\n border: `1px solid var(--collapse-border)`,\n },\n })}\n >\n <CardActions \n sx={{\n justifyContent: \"space-between\",\n padding: '4px 8px',\n }}\n >\n <Typography\n variant=\"body2\"\n sx={{\n color: \"var(--collapse-title-color)\",\n paddingLeft: \"8px\",\n fontWeight: 600\n }}\n >\n {componentProps?.title || 'Alert Title'}\n </Typography>\n <Box sx={{\n display: 'flex',\n alignItems: 'center',\n gap: 0.5,\n }}>\n <IconButton\n aria-label=\"Show more\"\n size=\"small\"\n onClick={handleExpandClick}\n >\n <ExpandMoreIcon \n style={{\n transform: expanded ? \"rotate(180deg)\" : \"rotate(0deg)\",\n transition: 'transform 0.3s ease-in-out'\n }}\n sx={{fontSize:\"1rem\"}}\n />\n </IconButton>\n <IconButton\n size=\"small\"\n aria-label=\"close\"\n onClick={handleDismiss}\n >\n <CloseIcon sx={{fontSize:\"1rem\"}} />\n </IconButton>\n </Box>\n </CardActions>\n \n <Collapse in={expanded} timeout=\"auto\" unmountOnExit>\n {/* restCollapse holds caller-supplied BoxProps forwarded through componentWrapperProps */}\n <Box\n {...(restCollapse as BoxProps)}\n sx={mergeSx((restCollapse as BoxProps).sx, { px:2, pb:2 })}\n >\n {Renderer && <Renderer {...componentProps} />}\n {!Renderer && (\n <Box sx={{ p: 2 }}>\n {componentProps?.children || 'Collapsible content'}\n </Box>\n )}\n </Box>\n </Collapse>\n </CardContainer>\n )\n }\n)\n","\nimport type { MuiComponentTheme } from '@/_utils/_types'\nimport type { SxProps, Theme } from '@mui/material/styles'\n\n/**\n * Root-level CSS variable aliases for the CollapsableAlert compound element.\n * Declare here once — all child elements consume via `var(--*)`.\n */\nexport const collapsableAlertRootSx: SxProps<Theme> = {\n '--collapse-bg': 'var(--mui-palette-container-bg-1)',\n '--collapse-border': 'var(--mui-palette-border-1)',\n '--collapse-title-color': 'var(--mui-palette-text-primary)',\n}\n\nexport const alertTheme = {\n styleOverrides: {\n root: ({ theme }) => ({\n '--alert-bgc': theme.palette.background.paper, // Default background color\n '--alert-color': theme.palette.text.primary, // Default text color\n\n whiteSpace: \"normal\", // Allow wrapping for custom components\n alignItems: 'center', // Center content vertically\n borderRadius: 'var(--mui-shape-borderRadius)', // Use theme border radius\n backgroundColor: 'var(--alert-bgc)', // Use theme background color\n color: 'var(--alert-color)', // Use theme text color\n border: '1px solid var(--alert-color)', // Border using text color for contrast\n \n \"& .MuiAlert-icon\": {\n color: \"var(--alert-icon-color, currentColor)\", // Use CSS variable for icon color\n padding: '8px 0', \n },\n \"& .MuiAlert-message\": {\n flex: 1, \n width: '100%', // Ensure message takes width\n padding: '8px 0',\n },\n \"& .MuiButtonBase-root\": {\n '--button-color': 'var(--alert-icon-color)',\n },\n\n \"&.MuiAlert-standardError\": {\n '--alert-icon-color': 'var(--mui-palette-error-main)',\n '--alert-bgc': 'var(--mui-palette-error-background, var(--mui-palette-error-dark))',\n '--alert-color': theme.palette.error.main,\n },\n \"&.MuiAlert-standardSuccess\": {\n '--alert-icon-color': 'var(--mui-palette-success-main)',\n '--alert-bgc': 'var(--mui-palette-success-background, var(--mui-palette-success-dark))',\n '--alert-color': theme.palette.success.main,\n },\n \"&.MuiAlert-standardWarning\": {\n '--alert-bgc': 'var(--mui-palette-warning-background, var(--mui-palette-warning-dark))', \n '--alert-color': theme.palette.warning.main,\n \"--alert-icon-color\": \"var(--mui-palette-warning-main)\",\n },\n \"&.MuiAlert-standardInfo\": {\n '--alert-bgc': 'var(--mui-palette-info-background, var(--mui-palette-info-dark))',\n '--alert-color': theme.palette.info.main,\n \"--alert-icon-color\": \"var(--mui-palette-info-main)\",\n },\n \"&.MuiAlert-standardSystem\": {\n '--alert-icon-color': 'var(--mui-palette-system-main)',\n '--alert-bgc': 'var(--mui-palette-system-background, var(--mui-palette-system-dark))',\n '--alert-color': theme.palette.system.main,\n },\n \"&.MuiAlert-standardInsight\": {\n '--alert-icon-color': 'var(--mui-palette-insight-main)',\n '--alert-bgc': 'var(--mui-palette-insight-background, var(--mui-palette-insight-dark))',\n '--alert-color': theme.palette.insight.main,\n },\n \"&.MuiAlert-filledSystem\": {\n '--alert-icon-color': 'var(--mui-palette-system-contrastText)',\n '--alert-bgc': 'var(--mui-palette-Alert-systemFilledBg, var(--mui-palette-system-main))',\n '--alert-color': 'var(--mui-palette-Alert-systemFilledColor, var(--mui-palette-system-contrastText))',\n },\n \"&.MuiAlert-filledInsight\": {\n '--alert-icon-color': 'var(--mui-palette-insight-contrastText)',\n '--alert-bgc': 'var(--mui-palette-Alert-insightFilledBg, var(--mui-palette-insight-main))',\n '--alert-color': 'var(--mui-palette-Alert-insightFilledColor, var(--mui-palette-insight-contrastText))',\n },\n \"&.MuiAlert-outlinedSystem\": {\n '--alert-icon-color': 'var(--mui-palette-system-main)',\n '--alert-bgc': 'transparent',\n '--alert-color': theme.palette.system.main,\n },\n \"&.MuiAlert-outlinedInsight\": {\n '--alert-icon-color': 'var(--mui-palette-insight-main)',\n '--alert-bgc': 'transparent',\n '--alert-color': theme.palette.insight.main,\n },\n }),\n },\n} as const satisfies MuiComponentTheme<\"MuiAlert\">\n","'use client';\n\nimport { useCallback, useMemo, useState, type PointerEvent } from 'react';\nimport { Box, Stack } from '@/ele/Box';\nimport { Typography } from '@/ele/Typography';\nimport type { ChartProps } from './_types';\nimport { ChartHover } from './render/ChartHover';\nimport { ChartLegend } from './render/ChartLegend';\nimport { ChartPlot } from './render/ChartPlot';\nimport { mergeSx } from '@/_utils/_func';\nimport {\n ChartRoot,\n chartLabelSx,\n chartPlotBoxSx,\n chartSeriesTokenStyle,\n chartTokenVars,\n hoistChartCssVars,\n toChartStyle,\n} from './theme';\nimport { buildChartGeometry, hitIndex } from './utils/geometry';\n\nconst identity = (value: string) => value;\nconst formatNumber = (value: number) => String(value);\n\nexport function Chart({\n type = 'area',\n series,\n labels = [],\n stacked = false,\n hole = 0,\n showLine = true,\n formatX = identity,\n formatY = formatNumber,\n ariaLabel = 'Chart',\n emptyMessage = 'No data',\n sx,\n}: ChartProps) {\n const geometry = useMemo(\n () => buildChartGeometry(series, labels, { type, stacked, hole }),\n [hole, labels, series, stacked, type]\n );\n const [hoverIndex, setHoverIndex] = useState<number | null>(null);\n const isEmpty = geometry.hoverPoints.length === 0;\n const isPie = geometry.kind === 'pie';\n const hoverPoint =\n hoverIndex == null ? null : (geometry.hoverPoints[hoverIndex] ?? null);\n\n const onPointerMove = useCallback(\n (event: PointerEvent<HTMLDivElement>) => {\n const next = hitIndex(\n event.clientX,\n event.clientY,\n event.currentTarget.getBoundingClientRect(),\n geometry\n );\n setHoverIndex((current) => (current === next ? current : next));\n },\n [geometry]\n );\n\n const onPointerLeave = useCallback(() => {\n setHoverIndex(null);\n }, []);\n\n const hoisted = hoistChartCssVars(sx);\n\n const plot = (\n <Box\n sx={mergeSx(\n chartPlotBoxSx,\n isPie\n ? {\n aspectRatio: '1 / 1',\n maxWidth: 320,\n mx: 'auto',\n height: 'auto',\n minHeight: 240,\n cursor: 'pointer',\n }\n : undefined\n )}\n onPointerMove={isEmpty ? undefined : onPointerMove}\n onPointerLeave={isEmpty ? undefined : onPointerLeave}\n >\n {isEmpty ? (\n <Box\n sx={{\n position: 'absolute',\n inset: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}\n >\n <Typography sx={{ color: 'var(--chart-empty)' }}>\n {emptyMessage}\n </Typography>\n </Box>\n ) : (\n <ChartPlot\n geometry={geometry}\n showLine={showLine}\n ariaLabel={ariaLabel}\n />\n )}\n {hoverPoint ? (\n <ChartHover\n point={hoverPoint}\n labelCount={geometry.hoverPoints.length}\n plotHeight={geometry.plotHeight}\n viewWidth={geometry.viewWidth}\n viewHeight={geometry.viewHeight}\n formatX={formatX}\n formatY={formatY}\n />\n ) : null}\n </Box>\n );\n\n return (\n <ChartRoot\n style={toChartStyle(\n chartTokenVars,\n chartSeriesTokenStyle(series),\n hoisted.style\n )}\n sx={hoisted.sx}\n >\n {isPie ? (\n plot\n ) : (\n <Box\n sx={{\n display: 'grid',\n gridTemplateColumns: 'auto minmax(0, 1fr)',\n gridTemplateRows: 'minmax(220px, 240px) auto',\n columnGap: 1,\n rowGap: 0.75,\n width: '100%',\n }}\n >\n <Stack\n sx={{\n justifyContent: 'space-between',\n alignItems: 'flex-end',\n py: 0.25,\n minWidth: 56,\n }}\n >\n {geometry.yTicks.map((tick) => (\n <Typography key={tick} component=\"span\" sx={chartLabelSx}>\n {formatY(tick)}\n </Typography>\n ))}\n </Stack>\n\n {plot}\n\n <Box />\n\n <Box sx={{ position: 'relative', height: 16, minWidth: 0, overflow: 'hidden' }}>\n {geometry.xLabels.map(({ label, index }) => {\n const x =\n labels.length === 1\n ? 0.5\n : index / Math.max(labels.length - 1, 1);\n const isFirst = labels.length > 1 && index === 0;\n const isLast = labels.length > 1 && index === labels.length - 1;\n return (\n <Typography\n key={`${label}-${index}`}\n component=\"span\"\n sx={mergeSx(chartLabelSx, {\n position: 'absolute',\n left: `${x * 100}%`,\n top: 0,\n transform: isFirst\n ? 'none'\n : isLast\n ? 'translateX(-100%)'\n : 'translateX(-50%)',\n })}\n >\n {formatX(label)}\n </Typography>\n );\n })}\n </Box>\n </Box>\n )}\n\n <ChartLegend series={geometry.legend} />\n </ChartRoot>\n );\n}\n\nexport default Chart;\n","import { memo } from 'react';\nimport { mergeSx } from '@/_utils/_func';\nimport { Box, Stack } from '@/ele/Box';\nimport { Typography } from '@/ele/Typography';\nimport type { ChartHoverPoint } from '../utils/geometry';\nimport { CHART_PAD } from '../utils/geometry';\nimport {\n chartInkSx,\n chartLiveRegionSx,\n chartSvgSx,\n chartTooltipSx,\n} from '../theme';\n\nconst tooltipTransform = (\n point: ChartHoverPoint,\n labelCount: number,\n viewWidth: number,\n viewHeight: number\n): string => {\n const flipX =\n point.showGuide === false\n ? point.x >= viewWidth * 0.5\n : point.index >= labelCount * 0.65;\n const flipY =\n point.showGuide === false\n ? point.y < viewHeight * 0.45\n : point.y < CHART_PAD.top + 64;\n return `translate(${flipX ? '-108%' : '10px'}, ${\n flipY ? '12px' : 'calc(-100% - 10px)'\n })`;\n};\n\nexport const ChartHover = memo(function ChartHover({\n point,\n labelCount,\n plotHeight,\n viewWidth,\n viewHeight,\n formatX,\n formatY,\n}: {\n point: ChartHoverPoint;\n labelCount: number;\n plotHeight: number;\n viewWidth: number;\n viewHeight: number;\n formatX: (label: string) => string;\n formatY: (value: number) => string;\n}) {\n const markers = point.markers ?? [\n { x: point.x, y: point.y, color: 'var(--chart-line)' },\n ];\n const liveValue =\n point.rows.length === 1 ? point.rows[0].value : point.total;\n return (\n <>\n <Box\n component=\"svg\"\n viewBox={`0 0 ${viewWidth} ${viewHeight}`}\n preserveAspectRatio={point.showGuide === false ? 'xMidYMid meet' : 'none'}\n sx={chartSvgSx}\n aria-hidden\n >\n {point.showGuide === false ? null : (\n <line\n data-chart-guide=\"\"\n x1={point.x}\n x2={point.x}\n y1={CHART_PAD.top}\n y2={CHART_PAD.top + plotHeight}\n vectorEffect=\"non-scaling-stroke\"\n />\n )}\n {markers.map((marker, index) => (\n <circle\n key={`${marker.x}-${marker.y}-${index}`}\n data-chart-marker=\"\"\n cx={marker.x}\n cy={marker.y}\n r={4}\n stroke={marker.color}\n vectorEffect=\"non-scaling-stroke\"\n />\n ))}\n </Box>\n <Box\n sx={chartTooltipSx}\n style={{\n left: `${(point.x / viewWidth) * 100}%`,\n top: `${(point.y / viewHeight) * 100}%`,\n transform: tooltipTransform(point, labelCount, viewWidth, viewHeight),\n }}\n >\n <Typography sx={mergeSx(chartInkSx, { fontWeight: 700 })}>\n {formatX(point.label)}\n </Typography>\n <Stack spacing={0.35} sx={{ mt: 0.5 }}>\n {point.rows.map((row) => (\n <Stack\n key={row.id}\n direction=\"row\"\n spacing={1}\n sx={{ alignItems: 'center', justifyContent: 'space-between' }}\n >\n <Stack\n direction=\"row\"\n spacing={0.75}\n sx={{ alignItems: 'center', minWidth: 0 }}\n >\n <Box\n sx={{\n width: 8,\n height: 8,\n borderRadius: 0.5,\n backgroundColor: row.color,\n flexShrink: 0,\n }}\n />\n <Typography sx={chartInkSx}>{row.label}</Typography>\n </Stack>\n <Typography sx={mergeSx(chartInkSx, { fontWeight: 600 })}>\n {formatY(row.value)}\n </Typography>\n </Stack>\n ))}\n {point.showTotal ? (\n <Stack\n direction=\"row\"\n spacing={1}\n sx={{\n alignItems: 'center',\n justifyContent: 'space-between',\n pt: 0.35,\n borderTop: '1px solid',\n borderColor: 'var(--chart-tooltip-border)',\n }}\n >\n <Typography sx={mergeSx(chartInkSx, { fontWeight: 700 })}>\n Total\n </Typography>\n <Typography sx={mergeSx(chartInkSx, { fontWeight: 700 })}>\n {formatY(point.total)}\n </Typography>\n </Stack>\n ) : null}\n </Stack>\n </Box>\n <Box component=\"span\" aria-live=\"polite\" sx={chartLiveRegionSx}>\n {`${formatX(point.label)} ${formatY(liveValue)}`}\n </Box>\n </>\n );\n});\n","import type { ChartType } from '../_types';\n\nexport const CHART_WIDTH = 920;\nexport const CHART_HEIGHT = 280;\nexport const CHART_PAD = { top: 12, right: 8, bottom: 8, left: 8 } as const;\nexport const CHART_PIE_SIZE = 280;\n\nexport interface ChartHoverRow {\n id: string;\n label: string;\n color: string;\n value: number;\n}\n\nexport interface ChartHoverMarker {\n x: number;\n y: number;\n color: string;\n}\n\nexport interface ChartHoverPoint {\n index: number;\n label: string;\n x: number;\n y: number;\n rows: ChartHoverRow[];\n total: number;\n showTotal: boolean;\n showGuide?: boolean;\n markers?: ChartHoverMarker[];\n}\n\nexport interface ChartStackedArea {\n id: string;\n label: string;\n color: string;\n values: number[];\n yTop: number[];\n areaD: string;\n}\n\nexport interface ChartBarRect {\n id: string;\n color: string;\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\nexport interface ChartLinePath {\n id: string;\n color: string;\n d: string;\n}\n\nexport interface ChartSlice {\n id: string;\n label: string;\n color: string;\n value: number;\n start: number;\n end: number;\n d: string;\n cx: number;\n cy: number;\n}\n\ninterface ChartGeometryBase {\n peak: number;\n hoverPoints: ChartHoverPoint[];\n yTicks: number[];\n xLabels: Array<{ label: string; index: number }>;\n plotWidth: number;\n plotHeight: number;\n viewWidth: number;\n viewHeight: number;\n legend: Array<{ id: string; label: string }>;\n}\n\nexport interface AreaChartGeometry extends ChartGeometryBase {\n kind: 'area';\n stacked: ChartStackedArea[];\n lineD: string;\n}\n\nexport interface LineChartGeometry extends ChartGeometryBase {\n kind: 'line';\n lines: ChartLinePath[];\n}\n\nexport interface BarChartGeometry extends ChartGeometryBase {\n kind: 'bar';\n bars: ChartBarRect[];\n}\n\nexport interface PieChartGeometry extends ChartGeometryBase {\n kind: 'pie';\n slices: ChartSlice[];\n cx: number;\n cy: number;\n rOuter: number;\n rInner: number;\n}\n\nexport type ChartGeometry =\n | AreaChartGeometry\n | LineChartGeometry\n | BarChartGeometry\n | PieChartGeometry;\n\nexport interface ChartGeometryOptions {\n type?: ChartType;\n stacked?: boolean;\n hole?: number;\n}\n\nexport const cartesianPlotSize = (): {\n plotWidth: number;\n plotHeight: number;\n} => ({\n plotWidth: CHART_WIDTH - CHART_PAD.left - CHART_PAD.right,\n plotHeight: CHART_HEIGHT - CHART_PAD.top - CHART_PAD.bottom,\n});\n\nexport const xTickLabels = (\n labels: string[]\n): Array<{ label: string; index: number }> => {\n const step = Math.max(1, Math.ceil(labels.length / 7));\n return labels.flatMap((label, index) =>\n index % step === 0 || index === labels.length - 1 ? [{ label, index }] : []\n );\n};\n\nexport const seriesColorToken = (index: number): string =>\n `var(--chart-series-${index})`;\n\nexport const emptyGeometry = (kind: ChartType): ChartGeometry => {\n const { plotWidth, plotHeight } = cartesianPlotSize();\n const base = {\n peak: 1,\n hoverPoints: [] as ChartHoverPoint[],\n yTicks: [1, 0.5, 0],\n xLabels: [] as Array<{ label: string; index: number }>,\n plotWidth,\n plotHeight,\n legend: [] as Array<{ id: string; label: string }>,\n };\n if (kind === 'pie') {\n return {\n ...base,\n kind: 'pie',\n viewWidth: CHART_PIE_SIZE,\n viewHeight: CHART_PIE_SIZE,\n slices: [],\n cx: CHART_PIE_SIZE / 2,\n cy: CHART_PIE_SIZE / 2,\n rOuter: 1,\n rInner: 0,\n };\n }\n if (kind === 'bar') {\n return {\n ...base,\n kind: 'bar',\n viewWidth: CHART_WIDTH,\n viewHeight: CHART_HEIGHT,\n bars: [],\n };\n }\n if (kind === 'line') {\n return {\n ...base,\n kind: 'line',\n viewWidth: CHART_WIDTH,\n viewHeight: CHART_HEIGHT,\n lines: [],\n };\n }\n return {\n ...base,\n kind: 'area',\n viewWidth: CHART_WIDTH,\n viewHeight: CHART_HEIGHT,\n stacked: [],\n lineD: '',\n };\n};\n\nexport const indexFromClientX = (\n clientX: number,\n rect: DOMRect,\n labelCount: number,\n viewWidth = CHART_WIDTH\n): number => {\n if (labelCount <= 1) {\n return 0;\n }\n const viewX = ((clientX - rect.left) / Math.max(rect.width, 1)) * viewWidth;\n const t =\n (viewX - CHART_PAD.left) /\n (viewWidth - CHART_PAD.left - CHART_PAD.right);\n return Math.round(Math.min(1, Math.max(0, t)) * (labelCount - 1));\n};\n\nexport const indexFromBandX = (\n clientX: number,\n rect: DOMRect,\n labelCount: number,\n viewWidth = CHART_WIDTH\n): number => {\n if (labelCount <= 1) {\n return 0;\n }\n const viewX = ((clientX - rect.left) / Math.max(rect.width, 1)) * viewWidth;\n const t =\n (viewX - CHART_PAD.left) /\n (viewWidth - CHART_PAD.left - CHART_PAD.right);\n return Math.min(\n labelCount - 1,\n Math.max(0, Math.floor(t * labelCount))\n );\n};\n\nexport const indexFromPiePointer = (\n clientX: number,\n clientY: number,\n rect: DOMRect,\n geometry: PieChartGeometry\n): number | null => {\n if (geometry.slices.length === 0) {\n return null;\n }\n const viewX =\n ((clientX - rect.left) / Math.max(rect.width, 1)) * geometry.viewWidth;\n const viewY =\n ((clientY - rect.top) / Math.max(rect.height, 1)) * geometry.viewHeight;\n const dx = viewX - geometry.cx;\n const dy = viewY - geometry.cy;\n const dist = Math.hypot(dx, dy);\n if (dist > geometry.rOuter + 1 || dist < Math.max(geometry.rInner - 1, 0)) {\n return null;\n }\n let turn = Math.atan2(dx, -dy);\n if (turn < 0) {\n turn += Math.PI * 2;\n }\n const hit = geometry.slices.findIndex(\n (slice) => turn >= slice.start && turn < slice.end\n );\n return hit >= 0 ? hit : geometry.slices.length - 1;\n};\n\nexport const hitIndex = (\n clientX: number,\n clientY: number,\n rect: DOMRect,\n geometry: ChartGeometry\n): number | null => {\n if (geometry.kind === 'pie') {\n return indexFromPiePointer(clientX, clientY, rect, geometry);\n }\n if (geometry.hoverPoints.length === 0) {\n return null;\n }\n if (geometry.kind === 'bar') {\n return indexFromBandX(\n clientX,\n rect,\n geometry.hoverPoints.length,\n geometry.viewWidth\n );\n }\n return indexFromClientX(\n clientX,\n rect,\n geometry.hoverPoints.length,\n geometry.viewWidth\n );\n};\n","export const areaPath = (\n xs: number[],\n yTop: number[],\n yBottom: number[]\n): string => {\n if (xs.length === 0) {\n return '';\n }\n const top = xs.map(\n (x, index) => `${index === 0 ? 'M' : 'L'} ${x} ${yTop[index]}`\n );\n const bottom = [...xs]\n .reverse()\n .map((x, index) => `L ${x} ${yBottom[xs.length - 1 - index]}`);\n return `${top.join(' ')} ${bottom.join(' ')} Z`;\n};\n\nexport const linePath = (xs: number[], ys: number[]): string =>\n xs.map((x, index) => `${index === 0 ? 'M' : 'L'} ${x} ${ys[index]}`).join(' ');\n\nexport const TAU = Math.PI * 2;\n\n/** Angle 0 at the top, clockwise, SVG y-down. */\nexport const polar = (\n cx: number,\n cy: number,\n radius: number,\n angleFromTop: number\n): [number, number] => [\n cx + radius * Math.sin(angleFromTop),\n cy - radius * Math.cos(angleFromTop),\n];\n\nexport const donutSlicePath = (\n cx: number,\n cy: number,\n rOuter: number,\n rInner: number,\n start: number,\n end: number\n): string => {\n const sweep = end - start;\n if (sweep <= 0 || rOuter <= 0) {\n return '';\n }\n if (sweep >= TAU - 1e-8) {\n if (rInner <= 0) {\n return `M ${cx + rOuter} ${cy} A ${rOuter} ${rOuter} 0 1 1 ${cx - rOuter} ${cy} A ${rOuter} ${rOuter} 0 1 1 ${cx + rOuter} ${cy} Z`;\n }\n return `M ${cx + rOuter} ${cy} A ${rOuter} ${rOuter} 0 1 1 ${cx - rOuter} ${cy} A ${rOuter} ${rOuter} 0 1 1 ${cx + rOuter} ${cy} M ${cx + rInner} ${cy} A ${rInner} ${rInner} 0 1 0 ${cx - rInner} ${cy} A ${rInner} ${rInner} 0 1 0 ${cx + rInner} ${cy} Z`;\n }\n const large = sweep > Math.PI ? 1 : 0;\n const [x0, y0] = polar(cx, cy, rOuter, start);\n const [x1, y1] = polar(cx, cy, rOuter, end);\n if (rInner <= 0) {\n return `M ${cx} ${cy} L ${x0} ${y0} A ${rOuter} ${rOuter} 0 ${large} 1 ${x1} ${y1} Z`;\n }\n const [ix0, iy0] = polar(cx, cy, rInner, start);\n const [ix1, iy1] = polar(cx, cy, rInner, end);\n return `M ${x0} ${y0} A ${rOuter} ${rOuter} 0 ${large} 1 ${x1} ${y1} L ${ix1} ${iy1} A ${rInner} ${rInner} 0 ${large} 0 ${ix0} ${iy0} Z`;\n};\n","import type { ChartSeries } from '../_types';\nimport {\n CHART_HEIGHT,\n CHART_PAD,\n CHART_WIDTH,\n cartesianPlotSize,\n seriesColorToken,\n xTickLabels,\n type AreaChartGeometry,\n} from './chartLayout';\nimport { areaPath, linePath } from './paths';\n\nconst stretch = (values: number[]): number[] =>\n values.length === 1 ? [values[0], values[0]] : values;\n\nconst sumThrough = (\n seriesValues: number[][],\n dayIndex: number,\n endExclusive: number\n): number =>\n seriesValues\n .slice(0, endExclusive)\n .reduce((sum, values) => sum + (values[dayIndex] ?? 0), 0);\n\nexport const buildAreaGeometry = (\n series: ChartSeries[],\n labels: string[]\n): AreaChartGeometry => {\n const { plotWidth, plotHeight } = cartesianPlotSize();\n const seriesValues = series.map((item) =>\n labels.map((_, dayIndex) => item.values[dayIndex] ?? 0)\n );\n const totals = labels.map((_, dayIndex) =>\n seriesValues.reduce((sum, values) => sum + (values[dayIndex] ?? 0), 0)\n );\n const peak = Math.max(1, ...totals);\n const sampleCount = Math.max(labels.length, 2);\n const xValues = Array.from(\n { length: sampleCount },\n (_, index) =>\n CHART_PAD.left + (index / (sampleCount - 1)) * plotWidth\n );\n\n const stacked = series.map((item, seriesIndex) => {\n const yTop = stretch(\n labels.map((_, dayIndex) => {\n const upper = sumThrough(seriesValues, dayIndex, seriesIndex + 1);\n return CHART_PAD.top + plotHeight - (upper / peak) * plotHeight;\n })\n );\n const yBottom = stretch(\n labels.map((_, dayIndex) => {\n const lower = sumThrough(seriesValues, dayIndex, seriesIndex);\n return CHART_PAD.top + plotHeight - (lower / peak) * plotHeight;\n })\n );\n return {\n id: item.id,\n label: item.label,\n color: seriesColorToken(seriesIndex),\n values: seriesValues[seriesIndex] ?? [],\n yTop,\n areaD: areaPath(xValues, yTop, yBottom),\n };\n });\n\n const topSeries = stacked[stacked.length - 1];\n const pointX = (index: number): number =>\n xValues[labels.length === 1 ? xValues.length - 1 : index] ?? CHART_PAD.left;\n const pointYIndex = (index: number): number =>\n labels.length === 1 ? Math.max(xValues.length - 1, 0) : index;\n\n const hoverPoints = labels.map((label, index) => {\n const rows = stacked.map((item) => ({\n id: item.id,\n label: item.label,\n color: item.color,\n value: item.values[index] ?? 0,\n }));\n const total = rows.reduce((sum, row) => sum + row.value, 0);\n const visibleRows = rows.filter((row) => row.value > 0);\n const y = topSeries?.yTop[pointYIndex(index)] ?? CHART_PAD.top + plotHeight;\n const x = pointX(index);\n return {\n index,\n label,\n x,\n y,\n rows: visibleRows.length > 0 ? visibleRows : rows.slice(-1),\n total,\n showTotal: visibleRows.length > 1,\n showGuide: true,\n markers: [{ x, y, color: 'var(--chart-line)' }],\n };\n });\n\n return {\n kind: 'area',\n stacked,\n peak,\n hoverPoints,\n lineD: topSeries ? linePath(xValues, topSeries.yTop) : '',\n yTicks: [peak, peak / 2, 0],\n xLabels: xTickLabels(labels),\n plotWidth,\n plotHeight,\n viewWidth: CHART_WIDTH,\n viewHeight: CHART_HEIGHT,\n legend: series.map((item) => ({ id: item.id, label: item.label })),\n };\n};\n","import type { ChartSeries } from '../_types';\nimport {\n CHART_HEIGHT,\n CHART_PAD,\n CHART_WIDTH,\n cartesianPlotSize,\n seriesColorToken,\n xTickLabels,\n type BarChartGeometry,\n type ChartBarRect,\n} from './chartLayout';\n\nconst GROUP_GAP = 0.22;\n\nexport const buildBarGeometry = (\n series: ChartSeries[],\n labels: string[],\n stacked: boolean\n): BarChartGeometry => {\n const { plotWidth, plotHeight } = cartesianPlotSize();\n const seriesValues = series.map((item) =>\n labels.map((_, dayIndex) => Math.max(0, item.values[dayIndex] ?? 0))\n );\n const totals = labels.map((_, dayIndex) =>\n seriesValues.reduce((sum, values) => sum + (values[dayIndex] ?? 0), 0)\n );\n const peak = stacked\n ? Math.max(1, ...totals)\n : Math.max(1, ...seriesValues.flatMap((values) => values));\n const groupWidth = plotWidth / Math.max(labels.length, 1);\n const gap = groupWidth * GROUP_GAP;\n const inner = Math.max(groupWidth - gap, 1);\n const barWidth = stacked ? inner : inner / Math.max(series.length, 1);\n const bars: ChartBarRect[] = [];\n\n labels.forEach((_, dayIndex) => {\n const groupX = CHART_PAD.left + dayIndex * groupWidth + gap / 2;\n if (stacked) {\n let acc = 0;\n series.forEach((item, seriesIndex) => {\n const value = seriesValues[seriesIndex]?.[dayIndex] ?? 0;\n const height = (value / peak) * plotHeight;\n const y = CHART_PAD.top + plotHeight - ((acc + value) / peak) * plotHeight;\n bars.push({\n id: `${item.id}-${dayIndex}`,\n color: seriesColorToken(seriesIndex),\n x: groupX,\n y,\n width: barWidth,\n height,\n });\n acc += value;\n });\n return;\n }\n series.forEach((item, seriesIndex) => {\n const value = seriesValues[seriesIndex]?.[dayIndex] ?? 0;\n const height = (value / peak) * plotHeight;\n bars.push({\n id: `${item.id}-${dayIndex}`,\n color: seriesColorToken(seriesIndex),\n x: groupX + seriesIndex * barWidth,\n y: CHART_PAD.top + plotHeight - height,\n width: barWidth,\n height,\n });\n });\n });\n\n const hoverPoints = labels.map((label, index) => {\n const rows = series.map((item, seriesIndex) => ({\n id: item.id,\n label: item.label,\n color: seriesColorToken(seriesIndex),\n value: seriesValues[seriesIndex]?.[index] ?? 0,\n }));\n const total = rows.reduce((sum, row) => sum + row.value, 0);\n const visibleRows = rows.filter((row) => row.value > 0);\n const x = CHART_PAD.left + index * groupWidth + groupWidth / 2;\n const y =\n CHART_PAD.top +\n plotHeight -\n ((stacked ? total : Math.max(0, ...rows.map((row) => row.value))) / peak) *\n plotHeight;\n return {\n index,\n label,\n x,\n y,\n rows: visibleRows.length > 0 ? visibleRows : rows.slice(-1),\n total,\n showTotal: stacked && visibleRows.length > 1,\n showGuide: true,\n markers: [{ x, y, color: 'var(--chart-line)' }],\n };\n });\n\n return {\n kind: 'bar',\n bars,\n peak,\n hoverPoints,\n yTicks: [peak, peak / 2, 0],\n xLabels: xTickLabels(labels),\n plotWidth,\n plotHeight,\n viewWidth: CHART_WIDTH,\n viewHeight: CHART_HEIGHT,\n legend: series.map((item) => ({ id: item.id, label: item.label })),\n };\n};\n","import type { ChartSeries } from '../_types';\nimport {\n CHART_HEIGHT,\n CHART_PAD,\n CHART_WIDTH,\n cartesianPlotSize,\n seriesColorToken,\n xTickLabels,\n type LineChartGeometry,\n} from './chartLayout';\nimport { linePath } from './paths';\n\nexport const buildLineGeometry = (\n series: ChartSeries[],\n labels: string[]\n): LineChartGeometry => {\n const { plotWidth, plotHeight } = cartesianPlotSize();\n const seriesValues = series.map((item) =>\n labels.map((_, dayIndex) => item.values[dayIndex] ?? 0)\n );\n const peak = Math.max(\n 1,\n ...seriesValues.flatMap((values) => values)\n );\n const sampleCount = Math.max(labels.length, 2);\n const xValues = Array.from(\n { length: sampleCount },\n (_, index) =>\n CHART_PAD.left + (index / (sampleCount - 1)) * plotWidth\n );\n const yAt = (value: number): number =>\n CHART_PAD.top + plotHeight - (value / peak) * plotHeight;\n const stretchY = (values: number[]): number[] =>\n values.length === 1 ? [yAt(values[0] ?? 0), yAt(values[0] ?? 0)] : values.map(yAt);\n\n const lines = series.map((item, seriesIndex) => ({\n id: item.id,\n color: seriesColorToken(seriesIndex),\n d: linePath(xValues, stretchY(seriesValues[seriesIndex] ?? [])),\n }));\n\n const hoverPoints = labels.map((label, index) => {\n const x =\n xValues[labels.length === 1 ? xValues.length - 1 : index] ?? CHART_PAD.left;\n const sampleIndex = labels.length === 1 ? Math.max(xValues.length - 1, 0) : index;\n const rows = series.map((item, seriesIndex) => ({\n id: item.id,\n label: item.label,\n color: seriesColorToken(seriesIndex),\n value: seriesValues[seriesIndex]?.[index] ?? 0,\n }));\n const markers = rows.map((row, seriesIndex) => ({\n x,\n y: stretchY(seriesValues[seriesIndex] ?? [])[sampleIndex] ?? yAt(0),\n color: row.color,\n }));\n const top = markers.reduce(\n (min, marker) => (marker.y < min.y ? marker : min),\n markers[0] ?? { x, y: yAt(0), color: 'var(--chart-line)' }\n );\n return {\n index,\n label,\n x,\n y: top.y,\n rows,\n total: rows.reduce((sum, row) => sum + row.value, 0),\n showTotal: false,\n showGuide: true,\n markers,\n };\n });\n\n return {\n kind: 'line',\n lines,\n peak,\n hoverPoints,\n yTicks: [peak, peak / 2, 0],\n xLabels: xTickLabels(labels),\n plotWidth,\n plotHeight,\n viewWidth: CHART_WIDTH,\n viewHeight: CHART_HEIGHT,\n legend: series.map((item) => ({ id: item.id, label: item.label })),\n };\n};\n","import type { ChartSeries } from '../_types';\nimport {\n CHART_PIE_SIZE,\n seriesColorToken,\n type ChartSlice,\n type PieChartGeometry,\n} from './chartLayout';\nimport { donutSlicePath, polar, TAU } from './paths';\n\nconst sliceValue = (item: ChartSeries): number =>\n item.values.reduce((sum, value) => sum + Math.max(0, value), 0);\n\nexport const pieSlicesFrom = (\n series: ChartSeries[],\n labels: string[]\n): Array<{ id: string; label: string; color: string; value: number }> => {\n if (\n series.length === 1 &&\n labels.length > 1 &&\n (series[0]?.values.length ?? 0) === labels.length\n ) {\n const only = series[0];\n return labels.map((label, index) => ({\n id: `${only.id}-${index}`,\n label,\n color: seriesColorToken(index),\n value: Math.max(0, only.values[index] ?? 0),\n }));\n }\n return series.map((item, index) => ({\n id: item.id,\n label: item.label,\n color: seriesColorToken(index),\n value: sliceValue(item),\n }));\n};\n\nexport const buildPieGeometry = (\n series: ChartSeries[],\n labels: string[],\n hole: number\n): PieChartGeometry => {\n const cx = CHART_PIE_SIZE / 2;\n const cy = CHART_PIE_SIZE / 2;\n const rOuter = CHART_PIE_SIZE * 0.38;\n const rInner = rOuter * Math.min(0.85, Math.max(0, hole));\n const source = pieSlicesFrom(series, labels).filter((item) => item.value > 0);\n const total = source.reduce((sum, item) => sum + item.value, 0);\n\n if (total <= 0) {\n return {\n kind: 'pie',\n slices: [],\n peak: 1,\n hoverPoints: [],\n yTicks: [],\n xLabels: [],\n plotWidth: CHART_PIE_SIZE,\n plotHeight: CHART_PIE_SIZE,\n viewWidth: CHART_PIE_SIZE,\n viewHeight: CHART_PIE_SIZE,\n legend: [],\n cx,\n cy,\n rOuter,\n rInner,\n };\n }\n\n let cursor = 0;\n const slices: ChartSlice[] = source.map((item) => {\n const start = cursor;\n const sweep = (item.value / total) * TAU;\n const end = start + sweep;\n cursor = end;\n const mid = start + sweep / 2;\n const markerR = (rOuter + rInner) / 2 || rOuter * 0.62;\n const [mx, my] = polar(cx, cy, markerR, mid);\n return {\n ...item,\n start,\n end,\n d: donutSlicePath(cx, cy, rOuter, rInner, start, end),\n cx: mx,\n cy: my,\n };\n });\n\n const hoverPoints = slices.map((slice, index) => ({\n index,\n label: slice.label,\n x: slice.cx,\n y: slice.cy,\n rows: [\n {\n id: slice.id,\n label: slice.label,\n color: slice.color,\n value: slice.value,\n },\n ],\n total,\n showTotal: slices.length > 1,\n showGuide: false,\n markers: [{ x: slice.cx, y: slice.cy, color: slice.color }],\n }));\n\n return {\n kind: 'pie',\n slices,\n peak: total,\n hoverPoints,\n yTicks: [],\n xLabels: [],\n plotWidth: CHART_PIE_SIZE,\n plotHeight: CHART_PIE_SIZE,\n viewWidth: CHART_PIE_SIZE,\n viewHeight: CHART_PIE_SIZE,\n legend: source.map((item) => ({ id: item.id, label: item.label })),\n cx,\n cy,\n rOuter,\n rInner,\n };\n};\n","import type { ChartSeries } from '../_types';\nimport { buildAreaGeometry } from './areaGeometry';\nimport { buildBarGeometry } from './barGeometry';\nimport {\n emptyGeometry,\n type ChartGeometry,\n type ChartGeometryOptions,\n} from './chartLayout';\nimport { buildLineGeometry } from './lineGeometry';\nimport { buildPieGeometry } from './pieGeometry';\n\nexport * from './chartLayout';\n\nexport const buildChartGeometry = (\n series: ChartSeries[],\n labels: string[] = [],\n options: ChartGeometryOptions = {}\n): ChartGeometry => {\n const type = options.type ?? 'area';\n if (type === 'pie') {\n if (series.length === 0) {\n return emptyGeometry('pie');\n }\n return buildPieGeometry(series, labels, options.hole ?? 0);\n }\n if (labels.length === 0 || series.length === 0) {\n return emptyGeometry(type);\n }\n if (type === 'bar') {\n return buildBarGeometry(series, labels, options.stacked === true);\n }\n if (type === 'line') {\n return buildLineGeometry(series, labels);\n }\n return buildAreaGeometry(series, labels);\n};\n","import { styled } from '@mui/material';\nimport type { SxProps, Theme } from '@mui/material/styles';\nimport type { CSSProperties } from 'react';\nimport { Box } from '@/ele/Box';\nimport type { ChartSeries } from './_types';\n\n/** Static palette aliases — spread into `styled()`, not `sx` (dynamic class names with `var()` are dropped). */\nexport const chartTokenVars = {\n '--chart-grid': 'var(--mui-palette-divider)',\n '--chart-grid-dasharray': '3 4',\n '--chart-guide': 'var(--mui-palette-text-primary)',\n '--chart-guide-dasharray': '4 4',\n '--chart-guide-opacity': '0.45',\n '--chart-label': 'var(--mui-palette-text-secondary)',\n '--chart-ink': 'var(--mui-palette-text-primary)',\n '--chart-paper': 'var(--mui-palette-background-paper)',\n '--chart-tooltip-border': 'var(--mui-palette-divider)',\n '--chart-line': 'var(--chart-series-1)',\n '--chart-line-width': '2px',\n '--chart-line-dasharray': '0 7',\n '--chart-line-cap': 'round',\n '--chart-series-line-dasharray': 'none',\n '--chart-area-opacity': '0.72',\n '--chart-bar-opacity': '1',\n '--chart-bar-radius': '3px',\n '--chart-pie-stroke': 'var(--chart-paper)',\n '--chart-pie-stroke-width': '2px',\n '--chart-empty': 'var(--mui-palette-text-secondary)',\n // Hue tokens mixed with scheme chrome so series follow the theme (not raw primary/secondary).\n '--chart-series-0':\n 'color-mix(in lab, var(--mui-palette-info-main) 64%, var(--mui-palette-primary-main))',\n '--chart-series-1':\n 'color-mix(in lab, var(--mui-palette-system-main) 64%, var(--mui-palette-secondary-main))',\n '--chart-series-2':\n 'color-mix(in lab, var(--mui-palette-insight-main) 64%, var(--mui-palette-primary-dark))',\n '--chart-series-3':\n 'color-mix(in lab, var(--mui-palette-success-main) 64%, var(--mui-palette-secondary-dark))',\n '--chart-series-4':\n 'color-mix(in lab, var(--mui-palette-error-main) 64%, var(--mui-palette-primary-main))',\n '--chart-series-5':\n 'color-mix(in lab, var(--mui-palette-system-light) 58%, var(--mui-palette-primary-main))',\n '--chart-series-6':\n 'color-mix(in lab, var(--mui-palette-insight-light) 58%, var(--mui-palette-secondary-main))',\n '--chart-series-7':\n 'color-mix(in lab, var(--mui-palette-insight-dark) 58%, var(--mui-palette-text-primary))',\n} as const;\n\nexport const ChartRoot = styled(Box)({\n display: 'flex',\n flexDirection: 'column',\n gap: 12,\n width: '100%',\n minWidth: 0,\n});\n\nexport const chartSeriesColorVar = (index: number): string =>\n `var(--chart-series-${index})`;\n\nexport const chartSeriesTokenStyle = (\n series: ChartSeries[]\n): Record<string, string> => {\n const vars: Record<string, string> = {};\n series.forEach((item, index) => {\n if (item.color) {\n vars[`--chart-series-${index}`] = item.color;\n }\n });\n if (series.length > 0) {\n vars['--chart-line'] = chartSeriesColorVar(series.length - 1);\n }\n return vars;\n};\n\nconst isCssVarKey = (key: string): boolean => key.startsWith('--');\n\n/** Pull `--*` keys out of `sx` so they are not lost in invalid Emotion class names. */\nexport const hoistChartCssVars = (\n sx?: SxProps<Theme>\n): { style: Record<string, string>; sx?: SxProps<Theme> } => {\n if (sx == null || typeof sx === 'function') {\n return { style: {}, sx };\n }\n if (Array.isArray(sx)) {\n const style: Record<string, string> = {};\n const rest: Array<SxProps<Theme> | undefined> = [];\n for (const part of sx) {\n const next = hoistChartCssVars(part);\n Object.assign(style, next.style);\n if (next.sx != null) {\n rest.push(next.sx);\n }\n }\n if (rest.length === 0) {\n return { style };\n }\n return {\n style,\n sx: rest.length === 1 ? rest[0] : (rest as SxProps<Theme>),\n };\n }\n const style: Record<string, string> = {};\n const rest: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(sx)) {\n if (isCssVarKey(key) && value != null) {\n style[key] = String(value);\n } else {\n rest[key] = value;\n }\n }\n return {\n style,\n sx: Object.keys(rest).length > 0 ? (rest as SxProps<Theme>) : undefined,\n };\n};\n\nexport const toChartStyle = (\n ...parts: Array<{ readonly [key: string]: string } | undefined>\n): CSSProperties | undefined => {\n const merged: Record<string, string> = {};\n for (const part of parts) {\n if (part) {\n Object.assign(merged, part);\n }\n }\n return Object.keys(merged).length > 0 ? merged : undefined;\n};\n\nexport const chartLabelSx: SxProps<Theme> = {\n fontSize: 12,\n lineHeight: 1.2,\n color: 'var(--chart-label)',\n fontVariantNumeric: 'tabular-nums',\n whiteSpace: 'nowrap',\n};\n\nexport const chartInkSx: SxProps<Theme> = {\n ...chartLabelSx,\n color: 'var(--chart-ink)',\n};\n\nexport const chartPlotBoxSx: SxProps<Theme> = {\n position: 'relative',\n minWidth: 0,\n minHeight: 220,\n height: '100%',\n overflow: 'visible',\n cursor: 'crosshair',\n};\n\nexport const chartSvgSx: SxProps<Theme> = {\n position: 'absolute',\n inset: 0,\n width: '100%',\n height: '100%',\n display: 'block',\n overflow: 'visible',\n pointerEvents: 'none',\n '& [data-chart-grid]': {\n stroke: 'var(--chart-grid)',\n strokeDasharray: 'var(--chart-grid-dasharray)',\n },\n '& [data-chart-area]': {\n fillOpacity: 'var(--chart-area-opacity)',\n },\n '& [data-chart-bar]': {\n fillOpacity: 'var(--chart-bar-opacity)',\n rx: 'var(--chart-bar-radius)',\n ry: 'var(--chart-bar-radius)',\n },\n '& [data-chart-slice]': {\n stroke: 'var(--chart-pie-stroke)',\n strokeWidth: 'var(--chart-pie-stroke-width)',\n },\n '& [data-chart-series-line]': {\n fill: 'none',\n strokeWidth: 'var(--chart-line-width)',\n strokeDasharray: 'var(--chart-series-line-dasharray)',\n strokeLinecap: 'var(--chart-line-cap)',\n },\n '& [data-chart-line]': {\n fill: 'none',\n stroke: 'var(--chart-line)',\n strokeWidth: 'var(--chart-line-width)',\n strokeDasharray: 'var(--chart-line-dasharray)',\n strokeLinecap: 'var(--chart-line-cap)',\n },\n '& [data-chart-guide]': {\n stroke: 'var(--chart-guide)',\n strokeOpacity: 'var(--chart-guide-opacity)',\n strokeDasharray: 'var(--chart-guide-dasharray)',\n },\n '& [data-chart-marker]': {\n fill: 'var(--chart-paper)',\n strokeWidth: 'var(--chart-line-width)',\n },\n};\n\nexport const chartTooltipSx: SxProps<Theme> = {\n position: 'absolute',\n zIndex: 2,\n pointerEvents: 'none',\n px: 1.25,\n py: 0.75,\n minWidth: 148,\n borderRadius: 1.5,\n border: '1px solid',\n borderColor: 'var(--chart-tooltip-border)',\n bgcolor: 'var(--chart-paper)',\n boxShadow: 2,\n color: 'var(--chart-ink)',\n};\n\nexport const chartLiveRegionSx: SxProps<Theme> = {\n position: 'absolute',\n width: 1,\n height: 1,\n overflow: 'hidden',\n clip: 'rect(0 0 0 0)',\n};\n","import { Box, Stack } from '@/ele/Box';\nimport { Typography } from '@/ele/Typography';\nimport { chartLabelSx, chartSeriesColorVar } from '../theme';\n\nexport function ChartLegend({\n series,\n}: {\n series: Array<{ id: string; label: string }>;\n}) {\n if (series.length === 0) {\n return null;\n }\n\n return (\n <Stack direction=\"row\" spacing={2} sx={{ flexWrap: 'wrap', rowGap: 1 }}>\n {series.map((item, index) => (\n <Stack\n key={item.id}\n direction=\"row\"\n spacing={0.75}\n sx={{ alignItems: 'center' }}\n >\n <Box\n sx={{\n width: 10,\n height: 10,\n borderRadius: 0.5,\n backgroundColor: chartSeriesColorVar(index),\n flexShrink: 0,\n }}\n />\n <Typography sx={chartLabelSx}>{item.label}</Typography>\n </Stack>\n ))}\n </Stack>\n );\n}\n","import { memo } from 'react';\nimport { Box } from '@/ele/Box';\nimport type { ChartGeometry } from '../utils/geometry';\nimport { CHART_PAD } from '../utils/geometry';\nimport { chartSvgSx } from '../theme';\n\nconst Grid = ({\n yTicks,\n peak,\n plotHeight,\n viewWidth,\n}: {\n yTicks: number[];\n peak: number;\n plotHeight: number;\n viewWidth: number;\n}) => (\n <>\n {yTicks.map((tick) => {\n const y = CHART_PAD.top + plotHeight - (tick / peak) * plotHeight;\n return (\n <line\n key={tick}\n data-chart-grid=\"\"\n x1={CHART_PAD.left}\n x2={viewWidth - CHART_PAD.right}\n y1={y}\n y2={y}\n />\n );\n })}\n </>\n);\n\nexport const ChartPlot = memo(function ChartPlot({\n geometry,\n showLine,\n ariaLabel,\n}: {\n geometry: ChartGeometry;\n showLine: boolean;\n ariaLabel: string;\n}) {\n const meet = geometry.kind === 'pie';\n return (\n <Box\n component=\"svg\"\n viewBox={`0 0 ${geometry.viewWidth} ${geometry.viewHeight}`}\n preserveAspectRatio={meet ? 'xMidYMid meet' : 'none'}\n sx={chartSvgSx}\n role=\"img\"\n aria-label={ariaLabel}\n >\n {geometry.kind === 'area' ? (\n <>\n <Grid\n yTicks={geometry.yTicks}\n peak={geometry.peak}\n plotHeight={geometry.plotHeight}\n viewWidth={geometry.viewWidth}\n />\n {geometry.stacked.map((item) => (\n <path\n key={item.id}\n data-chart-area=\"\"\n d={item.areaD}\n fill={item.color}\n />\n ))}\n {showLine && geometry.lineD ? (\n <path\n data-chart-line=\"\"\n d={geometry.lineD}\n vectorEffect=\"non-scaling-stroke\"\n />\n ) : null}\n </>\n ) : null}\n {geometry.kind === 'line' ? (\n <>\n <Grid\n yTicks={geometry.yTicks}\n peak={geometry.peak}\n plotHeight={geometry.plotHeight}\n viewWidth={geometry.viewWidth}\n />\n {geometry.lines.map((item) => (\n <path\n key={item.id}\n data-chart-series-line=\"\"\n d={item.d}\n stroke={item.color}\n vectorEffect=\"non-scaling-stroke\"\n />\n ))}\n </>\n ) : null}\n {geometry.kind === 'bar' ? (\n <>\n <Grid\n yTicks={geometry.yTicks}\n peak={geometry.peak}\n plotHeight={geometry.plotHeight}\n viewWidth={geometry.viewWidth}\n />\n {geometry.bars.map((item) => (\n <rect\n key={item.id}\n data-chart-bar=\"\"\n x={item.x}\n y={item.y}\n width={item.width}\n height={item.height}\n fill={item.color}\n />\n ))}\n </>\n ) : null}\n {geometry.kind === 'pie'\n ? geometry.slices.map((slice) => (\n <path\n key={slice.id}\n data-chart-slice=\"\"\n d={slice.d}\n fill={slice.color}\n />\n ))\n : null}\n </Box>\n );\n});\n","import React, { useState, useEffect, useCallback } from 'react';\nimport { Box } from '@/ele/Box';\nimport { Typography } from '@/ele/Typography';\nimport { Button } from '@/ele/Button';\nimport { PauseIcon, PlayIcon, StopIcon, RemoveIcon as MinimizeIcon, CheckCircleIcon } from '@/icons/MuiIcon';\nimport { MuiModal } from '@/ele/Modal';\nimport { ProcessItem } from './ProcessItem';\nimport { ProcessModalProps, ProgressHook } from './types';\nimport PreviewableFile from '@/_utils/classes/PreviewableFile';\nimport { useProgressTracking, useProcessAlert } from './hooks';\nimport { processModalRootSx } from './theme';\nimport { mergeSx } from '@/_utils/_func';\n\n// Default hook returns 0 if not provided\nconst useDefaultProgress: ProgressHook = () => 0;\n\nconst ProcessLogicRunner = ({\n file,\n useProgress,\n onProgress,\n paused\n}: {\n file: PreviewableFile;\n useProgress: ProgressHook;\n onProgress: (file: PreviewableFile, progress: number) => void;\n paused: boolean;\n}) => {\n const progress = useProgress(file, paused);\n useEffect(() => {\n onProgress(file, progress);\n }, [file, progress, onProgress]);\n return null;\n};\n\nexport const ProcessModal: React.FC<ProcessModalProps> = ({ \n openProps, \n files, \n title = \"Uploading Documents\",\n description = \"Please wait while we upload your files.\",\n useProgress = useDefaultProgress,\n onPause,\n onStop,\n minimizable = false,\n minimizePlacement = 'bottom-right',\n autoClose = false\n}) => {\n const [open, setOpen] = openProps;\n const [minimized, setMinimized] = useState(false);\n const [paused, setPaused] = useState(false);\n\n const handleMaximize = useCallback(() => setMinimized(false), []);\n\n const { observerRef } = useProcessAlert({\n open,\n minimized,\n minimizePlacement,\n onMaximize: handleMaximize,\n });\n\n const { progressMap, handleProgress, allComplete } = useProgressTracking(files, observerRef);\n\n useEffect(() => {\n if (autoClose && allComplete && open) {\n const timer = setTimeout(() => {\n setOpen(false);\n }, 1000);\n return () => clearTimeout(timer);\n }\n }, [autoClose, allComplete, open, setOpen]);\n\n const handlePauseToggle = () => {\n setPaused(!paused);\n if (onPause) onPause();\n };\n\n const handleStop = () => {\n if (onStop) onStop();\n setOpen(false);\n };\n\n if (!open) return null;\n\n return (\n <>\n {/* Logic Layer: Always mounted when open */}\n {files.map((file) => (\n <ProcessLogicRunner\n key={file.filename}\n file={file}\n useProgress={useProgress}\n onProgress={handleProgress}\n paused={paused}\n />\n ))}\n\n {minimized ? null : (\n <MuiModal \n openProps={openProps}\n title={title}\n size={{ w: 500 }}\n slots={{\n closeIcon: minimizable?MinimizeIcon:undefined,\n }}\n slotProps={{\n closeButton: minimizable?{\n onClick: () => setMinimized(true),\n title: \"Minimize\",\n }:undefined,\n }}\n\n >\n <Box sx={mergeSx({ py: 2 }, processModalRootSx)}>\n {description && (\n <Typography variant=\"body2\" sx={{ mb: 3, color: 'var(--process-description-color)' }}>\n {description}\n </Typography>\n )}\n \n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1, maxHeight: '60vh', overflowY: 'auto' }}>\n {files.map((file) => (\n <ProcessItem \n key={file.filename} \n file={file} \n progress={progressMap.get(file.filename) || 0}\n />\n ))}\n </Box>\n\n <Box sx={{ mt: 3, display: 'flex', justifyContent: 'flex-end', gap: 2 }}>\n {!allComplete && (\n <>\n {onStop && (\n <Button \n variant=\"outlined\" \n color=\"error\" \n startIcon={<StopIcon />} \n onClick={handleStop}\n >\n Stop\n </Button>\n )}\n {onPause && (\n <Button \n variant=\"outlined\" \n color=\"warning\" \n startIcon={paused ? <PlayIcon /> : <PauseIcon />} \n onClick={handlePauseToggle}\n >\n {paused ? \"Resume\" : \"Pause\"}\n </Button>\n )}\n </>\n )}\n \n {allComplete && <Button \n variant=\"contained\"\n onClick={() => setOpen(false)}\n disabled={!allComplete && !onStop}\n startIcon={<CheckCircleIcon />}\n color=\"success\"\n >\n Done\n </Button>}\n </Box>\n </Box>\n </MuiModal>\n )}\n </>\n );\n};\n","import React from 'react';\nimport { Box } from '@/ele/Box';\nimport { Typography } from '@/ele/Typography';\nimport { LinearProgress } from '@/ele/Progress';\nimport { CheckCircleIcon } from '@/icons/MuiIcon';\nimport PreviewableFile from '@/_utils/classes/PreviewableFile';\nimport { FileThumbnail } from '@/compound/DisplayFile';\n\ninterface ProcessItemProps {\n file: PreviewableFile;\n progress: number;\n}\n\nexport const ProcessItem: React.FC<ProcessItemProps> = ({ file, progress }) => {\n const isComplete = progress >= 100;\n \n return (\n <Box sx={{ display: 'flex', gap: 2, alignItems: 'center', mb: 2, p: 1, border: '1px solid', borderColor: 'var(--process-item-border)', borderRadius: 1 }}>\n <FileThumbnail file={file} size={48} />\n \n <Box sx={{ flex: 1, minWidth: 0 }}>\n <Box sx={{ display: 'flex', justifyContent: 'space-between', mb: 0.5 }}>\n <Typography variant=\"body2\" noWrap sx={{ fontWeight: 500 }}>\n {file.filename}\n </Typography>\n <Typography variant=\"caption\" sx={{ pl: 0.5, color: 'var(--process-item-secondary-color)' }}>\n {file.displaySize}\n </Typography>\n </Box>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <LinearProgress \n variant=\"determinate\" \n value={progress} \n sx={{ \n flex: 1, \n height: 6, \n }} \n />\n <Typography variant=\"caption\" sx={{ minWidth: 35, textAlign: 'right', color: 'var(--process-item-secondary-color)' }}>\n {Math.round(progress)}%\n </Typography>\n </Box>\n </Box>\n\n <Box sx={{ display: 'flex', alignItems: 'center', width: 24, justifyContent: 'center' }}>\n {isComplete && <CheckCircleIcon color=\"success\" fontSize=\"small\" />}\n </Box>\n </Box>\n );\n};\n","import { useState, useEffect, useMemo, useCallback } from 'react';\nimport type React from 'react';\nimport PreviewableFile from '@/_utils/classes/PreviewableFile';\nimport { ProgressObserver } from '../_utils/ProgressObserver';\n\nexport function useProgressTracking(\n files: PreviewableFile[],\n observerRef: React.RefObject<ProgressObserver>,\n) {\n const [progressMap, setProgressMap] = useState<Map<string, number>>(new Map());\n\n const handleProgress = useCallback((file: PreviewableFile, progress: number) => {\n setProgressMap(prev => {\n if (prev.get(file.filename) === progress) return prev;\n const newMap = new Map(prev);\n newMap.set(file.filename, progress);\n return newMap;\n });\n }, []);\n\n useEffect(() => {\n if (files.length === 0) return;\n let total = 0;\n let completed = 0;\n progressMap.forEach(v => {\n total += v;\n if (v >= 100) completed++;\n });\n const avg = Math.round(total / files.length);\n observerRef.current.update(files.length, completed, avg);\n }, [progressMap, files, observerRef]);\n\n const allComplete = useMemo(() => {\n if (files.length === 0) return false;\n return files.every(f => (progressMap.get(f.filename) || 0) >= 100);\n }, [files, progressMap]);\n\n return { progressMap, handleProgress, allComplete };\n}\n","import React, { useRef, useEffect, useMemo } from 'react';\nimport { SnackbarKey } from 'notistack';\nimport { useAlert, type AlertOptions } from '@/compound/Alert';\nimport { ProcessAlertObserver } from '../ProcessAlert';\nimport { ProgressObserver } from '../_utils/ProgressObserver';\nimport type { ProcessModalProps } from '../types';\n\ninterface UseProcessAlertParams {\n open: boolean;\n minimized: boolean;\n minimizePlacement: NonNullable<ProcessModalProps['minimizePlacement']>;\n onMaximize: () => void;\n}\n\nexport function useProcessAlert({\n open,\n minimized,\n minimizePlacement,\n onMaximize,\n}: UseProcessAlertParams) {\n const { enqueueInfo, closeSnackbar } = useAlert();\n const observerRef = useRef(new ProgressObserver());\n const snackbarIdRef = useRef<SnackbarKey | null>(null);\n\n const alertAnchorOrigin = useMemo<NonNullable<AlertOptions['anchorOrigin']>>(() => (\n {\n 'bottom-right': { vertical: 'bottom', horizontal: 'right' },\n 'bottom-left': { vertical: 'bottom', horizontal: 'left' },\n 'top-right': { vertical: 'top', horizontal: 'right' },\n 'top-left': { vertical: 'top', horizontal: 'left' },\n } as const\n )[minimizePlacement], [minimizePlacement]);\n\n // Sync minimized state to observer\n useEffect(() => {\n observerRef.current.setMinimized(minimized);\n }, [minimized]);\n\n // Alert open/close lifecycle\n useEffect(() => {\n if (open) {\n if (!snackbarIdRef.current) {\n const message = React.createElement(ProcessAlertObserver, {\n observer: observerRef.current,\n onMaximize,\n });\n const result = enqueueInfo(message, {\n autoHideDuration: null,\n icon: null,\n anchorOrigin: alertAnchorOrigin,\n });\n if (result.success) {\n snackbarIdRef.current = result.data;\n }\n }\n } else {\n if (snackbarIdRef.current) {\n closeSnackbar(snackbarIdRef.current);\n snackbarIdRef.current = null;\n }\n }\n }, [alertAnchorOrigin, closeSnackbar, enqueueInfo, open, onMaximize]);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (snackbarIdRef.current) {\n closeSnackbar(snackbarIdRef.current);\n snackbarIdRef.current = null;\n }\n };\n }, [closeSnackbar]);\n\n return { observerRef };\n}\n","import { useEffect, useState } from 'react';\nimport { Box } from '@/ele/Box';\nimport { Typography } from '@/ele/Typography';\nimport { IconButton } from '@/ele/Button';\nimport { FullscreenIcon, CheckCircleIcon } from '@/icons/MuiIcon';\nimport { CircularProgress } from '@/ele/Progress';\nimport { ProgressObserver } from './_utils/ProgressObserver';\n\n// The display component (stateless mostly)\nexport const ProcessAlertContent = ({ \n allComplete, \n fileCount, \n totalProgress, \n onMaximize,\n minimized\n}: { \n allComplete: boolean; \n fileCount: number; \n totalProgress: number; \n onMaximize: () => void;\n minimized: boolean;\n}) => {\n return (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2, minWidth: 280 }}>\n {/* We don't render Icon here because MuiAlertVariant/Info handles the main icon usually. \n However, user might want the progress circle AS the icon. \n But MuiAlertVariant renders 'icon' prop.\n We are inside 'message'.\n */}\n <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'center' }}>\n {/* Explicitly show progress here, assuming we replace or hide the default Alert icon via props if needed, or just show standard info icon + this progress */}\n {allComplete ? <CheckCircleIcon /> : <CircularProgress variant=\"determinate\" value={totalProgress} size={24} thickness={5} />}\n </Box>\n \n <Box sx={{ flex: 1, minWidth: 0 }}>\n <Typography variant=\"subtitle2\" sx={{ fontWeight: 600, lineHeight: 1.2 }}>\n {allComplete ? \"Uploads complete\" : \"Uploading files...\"}\n </Typography>\n {!allComplete && (\n <Typography variant=\"caption\" display=\"block\" sx={{ opacity: 0.8 }}>\n {fileCount} item{fileCount !== 1 ? 's' : ''} • {totalProgress}%\n </Typography>\n )}\n </Box>\n\n {minimized && (\n <IconButton size=\"small\" onClick={onMaximize} title=\"Maximize\" sx={{ color: 'inherit' }}>\n <FullscreenIcon />\n </IconButton>\n )}\n </Box>\n );\n};\n\n// The observer wrapper\nexport const ProcessAlertObserver = ({ observer, onMaximize }: { observer: ProgressObserver, onMaximize: () => void }) => {\n const [state, setState] = useState({ fileCount: 0, completedCount: 0, totalProgress: 0, minimized: false });\n\n useEffect(() => {\n return observer.subscribe((newState) => {\n setState(newState);\n });\n }, [observer]);\n\n // Derived\n const allComplete = state.fileCount > 0 && state.totalProgress >= 100;\n\n return (\n <ProcessAlertContent \n allComplete={allComplete}\n fileCount={state.fileCount}\n totalProgress={state.totalProgress}\n onMaximize={onMaximize}\n minimized={state.minimized}\n />\n );\n};\n","export interface ProgressState {\n fileCount: number;\n completedCount: number;\n totalProgress: number;\n minimized: boolean;\n}\n\nexport type ProgressListener = (state: ProgressState) => void;\n\nexport class ProgressObserver {\n private listeners: ProgressListener[] = [];\n private state: ProgressState = {\n fileCount: 0,\n completedCount: 0,\n totalProgress: 0,\n minimized: false\n };\n\n subscribe(listener: ProgressListener) {\n this.listeners.push(listener);\n // Immediate callback with current state\n listener(this.state);\n return () => {\n this.listeners = this.listeners.filter(l => l !== listener);\n };\n }\n\n update(fileCount: number, completedCount: number, totalProgress: number) {\n this.state = { ...this.state, fileCount, completedCount, totalProgress };\n this.notify();\n }\n\n setMinimized(minimized: boolean) {\n this.state = { ...this.state, minimized };\n this.notify();\n }\n\n private notify() {\n this.listeners.forEach(l => l(this.state));\n }\n}\n","import type { SxProps, Theme } from '@mui/material/styles';\n\n/**\n * Root-level CSS variable aliases for the ProcessModal compound component.\n * Declared once on the root element — child components consume via `var(--*)`.\n */\nexport const processModalRootSx: SxProps<Theme> = {\n '--process-description-color': 'var(--mui-palette-text-secondary)',\n '--process-item-secondary-color': 'var(--mui-palette-text-secondary)',\n '--process-item-border': 'var(--mui-palette-divider)',\n};\n","import { useCallback, useEffect, useRef, useState } from 'react';\nimport { UseScrollToLoadOptions, UseScrollToLoadReturn } from './_types';\n\nexport function useScrollToLoad(\n options: UseScrollToLoadOptions\n): UseScrollToLoadReturn {\n const {\n hasMore,\n isLoading,\n onLoadMore,\n enabled = true,\n root = null,\n rootMargin = '0px 0px 200px 0px',\n threshold = 0,\n triggerOncePerVisibility = true,\n autoLoadLimit,\n resetKey,\n } = options;\n\n // Track auto-load count as state so autoModeEnabled triggers re-renders.\n const [autoCount, setAutoCount] = useState(0);\n const autoRequestInFlightRef = useRef(false);\n\n // Keep the latest onLoadMore in a ref to avoid stale closures inside the\n // observer callback without forcing the observer to be rebuilt on every render.\n const onLoadMoreRef = useRef(onLoadMore);\n useEffect(() => {\n onLoadMoreRef.current = onLoadMore;\n });\n\n // Store the sentinel node so the effect below can access it.\n const nodeRef = useRef<HTMLDivElement | null>(null);\n const observerRef = useRef<IntersectionObserver | null>(null);\n // Bumped whenever the sentinel mounts/remounts so the observer reattaches\n // to the correct DOM node without needing a full dependency re-evaluation.\n const [sentinelVersion, setSentinelVersion] = useState(0);\n\n const sentinelRef = useCallback((node: HTMLDivElement | null) => {\n nodeRef.current = node;\n if (node) setSentinelVersion((v) => v + 1);\n }, []);\n\n const normalizedAutoLoadLimit =\n typeof autoLoadLimit === 'number' && Number.isFinite(autoLoadLimit) && autoLoadLimit > 0\n ? autoLoadLimit\n : undefined;\n\n const observerSupported = typeof IntersectionObserver !== 'undefined';\n const autoModeEnabled =\n enabled &&\n observerSupported &&\n (normalizedAutoLoadLimit == null || autoCount < normalizedAutoLoadLimit);\n\n // Allow callers to reset internal auto-load cycle when list context changes.\n useEffect(() => {\n setAutoCount(0);\n autoRequestInFlightRef.current = false;\n }, [resetKey]);\n\n // Release the auto-trigger lock once the controlled loading flag reports idle.\n useEffect(() => {\n if (!isLoading) {\n autoRequestInFlightRef.current = false;\n }\n }, [isLoading]);\n\n useEffect(() => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n observerRef.current = null;\n }\n\n const node = nodeRef.current;\n\n if (\n !node ||\n !autoModeEnabled ||\n !hasMore ||\n isLoading\n ) {\n return;\n }\n\n observerRef.current = new IntersectionObserver(\n ([entry]) => {\n if (!entry.isIntersecting) return;\n if (autoRequestInFlightRef.current) return;\n\n autoRequestInFlightRef.current = true;\n\n onLoadMoreRef.current();\n setAutoCount((c) => c + 1);\n\n if (triggerOncePerVisibility && observerRef.current) {\n observerRef.current.disconnect();\n observerRef.current = null;\n }\n },\n { root, rootMargin, threshold }\n );\n observerRef.current.observe(node);\n\n return () => {\n observerRef.current?.disconnect();\n observerRef.current = null;\n };\n }, [\n autoModeEnabled,\n hasMore,\n isLoading,\n root,\n rootMargin,\n sentinelVersion,\n threshold,\n triggerOncePerVisibility,\n ]);\n\n const requestLoadMore = useCallback(() => {\n if (hasMore && !isLoading) {\n onLoadMoreRef.current();\n }\n }, [hasMore, isLoading]);\n\n const canLoadMore = enabled && hasMore && !isLoading;\n\n return { sentinelRef, requestLoadMore, canLoadMore, autoModeEnabled };\n}\n","import { Box } from '@/ele/Box';\nimport { Button } from '@/ele/Button';\n\nimport { DefaultEndIndicator, DefaultLoadingIndicator } from './render/StatusIndicators';\nimport { useScrollToLoad } from './useScrollToLoad';\nimport { ScrollToLoadProps } from './_types';\n\nexport function ScrollToLoad(props: ScrollToLoadProps) {\n const {\n children,\n loadingIndicator,\n endIndicator,\n manualFallback = false,\n manualLabel = 'Load more',\n slotProps,\n ...hookOptions\n } = props;\n\n const sentinelSlotProps = slotProps?.sentinel;\n const manualContainerSlotProps = slotProps?.manualContainer;\n const manualButtonSlotProps = slotProps?.manualButton;\n\n // If manual fallback is requested, force-disable the auto-loading behavior\n // in the hook so we can control triggering explicitly via the button.\n const isAutoEnabled = (hookOptions.enabled ?? true) && !manualFallback;\n\n const { sentinelRef, requestLoadMore, autoModeEnabled } = useScrollToLoad({\n ...hookOptions,\n enabled: isAutoEnabled,\n });\n\n return (\n <>\n {children}\n <Box\n {...sentinelSlotProps}\n ref={sentinelRef}\n sx={sentinelSlotProps?.sx ?? { height: 4 }}\n aria-hidden=\"true\"\n />\n {hookOptions.isLoading && (\n <Box role=\"status\" aria-live=\"polite\" aria-label=\"Loading more items\">\n {loadingIndicator ?? <DefaultLoadingIndicator />}\n </Box>\n )}\n {!hookOptions.hasMore && (\n <Box role=\"status\" aria-live=\"polite\" aria-label=\"End of list\">\n {endIndicator ?? <DefaultEndIndicator />}\n </Box>\n )}\n {(manualFallback || !autoModeEnabled) && hookOptions.hasMore && (\n <Box\n {...manualContainerSlotProps}\n sx={\n manualContainerSlotProps?.sx ?? {\n display: 'flex',\n justifyContent: 'center',\n py: 2,\n }\n }\n >\n <Button\n {...manualButtonSlotProps}\n onClick={requestLoadMore}\n disabled={hookOptions.isLoading || manualButtonSlotProps?.disabled}\n >\n {manualLabel}\n </Button>\n </Box>\n )}\n </>\n );\n}\n\nexport default ScrollToLoad;\n","import { Box } from '@/ele/Box';\nimport { CircularProgress } from '@/ele/Progress';\nimport { Typography } from '@/ele/Typography';\n\nexport function DefaultLoadingIndicator() {\n return (\n <Box sx={{ display: 'flex', justifyContent: 'center', py: 2 }}>\n <CircularProgress size={24} />\n </Box>\n );\n}\n\nexport function DefaultEndIndicator() {\n return (\n <Box sx={{ display: 'flex', justifyContent: 'center', py: 2 }}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n No more items\n </Typography>\n </Box>\n );\n}\n","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 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 { 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 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 { useForm, type UseFormReturn, type DefaultValues } from 'react-hook-form';\nimport { useEffect, useMemo, useRef } from 'react';\nimport type { FormTypeMap, InferFormDataType, StrictFormConfig } from './_utils';\nimport { collectFields, validateFormSchema, getDefaultValues } from './_utils/helpers';\nimport { createFormResolver } from './_utils/resolver';\n\nexport interface UseConfiguredFormProps<T extends FormTypeMap> {\n config: StrictFormConfig<T>;\n}\n\nexport interface ConfiguredFormReturn<T extends FormTypeMap> {\n methods: UseFormReturn<InferFormDataType<T>>;\n config: StrictFormConfig<T>;\n configError?: Error;\n}\n\n/** @deprecated Use ConfiguredFormReturn */\nexport type UseForm2Return<T extends FormTypeMap> = ConfiguredFormReturn<T>;\n\n/** @deprecated Use UseConfiguredFormProps */\nexport type UseForm2Props<T extends FormTypeMap> = UseConfiguredFormProps<T>;\n\nconst schemaSignature = <T extends FormTypeMap>(config: StrictFormConfig<T>): string => {\n const fields = collectFields(config);\n return JSON.stringify({\n mode: config.mode ?? 'onSubmit',\n defaults: config.defaultValues ?? null,\n fields: fields.map((field) => [field.name, field.type, field.defaultValue]),\n });\n};\n\nexport const useConfiguredForm = <T extends FormTypeMap>({\n config,\n}: UseConfiguredFormProps<T>): ConfiguredFormReturn<T> => {\n const { resolvedConfig, configError } = useMemo(() => {\n try {\n return {\n resolvedConfig: validateFormSchema(config),\n configError: undefined as Error | undefined,\n };\n } catch (error) {\n const configError = error instanceof Error ? error : new Error(String(error));\n console.error('[useConfiguredForm] invalid form schema', configError);\n return {\n resolvedConfig: { schema: [] } as StrictFormConfig<T>,\n configError,\n };\n }\n }, [config]);\n\n const defaultValues = useMemo(\n () => getDefaultValues(resolvedConfig, false),\n [resolvedConfig],\n );\n\n const resolver = useMemo(\n () => createFormResolver(resolvedConfig),\n [resolvedConfig],\n );\n\n const methods = useForm<InferFormDataType<T>>({\n defaultValues: defaultValues as DefaultValues<InferFormDataType<T>>,\n resolver,\n mode: resolvedConfig.mode ?? 'onSubmit',\n shouldUnregister: false,\n });\n\n const signature = useMemo(\n () => schemaSignature(resolvedConfig),\n [resolvedConfig],\n );\n const defaultValuesRef = useRef(defaultValues);\n defaultValuesRef.current = defaultValues;\n const isFirstMount = useRef(true);\n\n useEffect(() => {\n if (isFirstMount.current) {\n isFirstMount.current = false;\n return;\n }\n methods.reset(defaultValuesRef.current as DefaultValues<InferFormDataType<T>>);\n }, [signature, methods]);\n\n return {\n methods,\n config: resolvedConfig,\n configError,\n };\n};\n\n/** @deprecated Use useConfiguredForm */\nexport const useForm2 = useConfiguredForm;\n","import type { FieldError, FieldErrors, Resolver } from 'react-hook-form';\nimport { FIELD_TYPEs } from './constants';\nimport { collectFields, isEmptyFormValue } from './helpers';\nimport type { FieldConfig, FormTypeMap, InferFormDataType, StrictFormConfig } from './types';\n\nconst toError = (message: string, type: string): FieldError => ({\n type,\n message,\n});\n\nconst runFieldValidate = async <T extends FormTypeMap>(\n field: FieldConfig<T>,\n value: unknown,\n values: InferFormDataType<T>,\n): Promise<string | true> => {\n if (field.type === FIELD_TYPEs.tel && typeof value === 'string' && value.trim() !== '') {\n const { isValidPhoneNumber } = await import('react-phone-number-input');\n if (!isValidPhoneNumber(value)) {\n return 'Invalid phone number';\n }\n }\n\n if (field.type === FIELD_TYPEs.fileUpload) {\n const maxFiles = field.slotProps?.maxFiles ?? 1;\n if (Array.isArray(value) && value.length > maxFiles) {\n return `Cannot exceed ${maxFiles} file${maxFiles > 1 ? 's' : ''}`;\n }\n }\n\n if (!field.validate) return true;\n const result = await field.validate(value as never, values);\n if (result === true) return true;\n if (typeof result === 'string' && result.length > 0) return result;\n return field.errorMsg || 'Invalid';\n};\n\nexport function createFormResolver<T extends FormTypeMap>(\n config: StrictFormConfig<T>,\n): Resolver<InferFormDataType<T>> {\n const fields = collectFields(config);\n const fieldByName = new Map(fields.map((field) => [String(field.name), field]));\n\n return async (values, _context, options) => {\n const names = options?.names;\n const nameList = names == null ? null : Array.from(names as Iterable<string>);\n const fieldsToCheck =\n nameList && nameList.length > 0\n ? nameList\n .map((name) => fieldByName.get(String(name)))\n .filter((field): field is FieldConfig<T> => field != null)\n : fields;\n\n const errors: FieldErrors<InferFormDataType<T>> = {};\n const valuesRecord = values as Record<string, unknown>;\n\n for (const field of fieldsToCheck) {\n const name = String(field.name);\n const value = valuesRecord[name];\n\n if (field.required && isEmptyFormValue(value)) {\n (errors as Record<string, FieldError>)[name] = toError(field.errorMsg || 'Required', 'required');\n continue;\n }\n\n if (isEmptyFormValue(value) && !field.validate) {\n continue;\n }\n\n const result = await runFieldValidate(field, value, values);\n if (result !== true) {\n (errors as Record<string, FieldError>)[name] = toError(result, 'validate');\n }\n }\n\n const hasErrors = Object.keys(errors).length > 0;\n return {\n values: hasErrors ? ({} as InferFormDataType<T>) : values,\n errors,\n };\n };\n}\n","import React from 'react';\nimport { FormProvider, FieldValues } from 'react-hook-form';\nimport { Box } from '@/ele/Box';\nimport StepperSection from './StepperSection';\nimport RowRenderer from './RowRenderer';\nimport Navigation from './Navigation';\nimport { useFormActionsContext, useFormMethodsContext, useFormStateContext } from '../store/FormContext';\n\n// types for multi-step\n\n\n// Using strict types\nimport { RowConfig, FormTypeMap, StrictFormConfig } from '../_utils';\nimport useRegisterFields from '../hooks/useRegisterFields';\nimport { useFormRootSx } from '../theme';\nimport { mergeSx } from '@/_utils/_func';\n\nexport interface FormRendererProps<T extends FormTypeMap> {\n /** methods may be passed directly or obtained from context */\n methods?: unknown;\n config: StrictFormConfig<T>;\n onSubmit: (data: FieldValues) => void;\n /** whether to render undo button */\n showUndo?: boolean;\n /** whether to render clear button */\n showClear?: boolean;\n children?: React.ReactNode; \n extraButtons?: React.ReactNode;\n}\n\n// Field and Row renderers are defined inside the generic component so they\n// can reference the concrete form value type `InferFormDataType<T>`.\n\nexport const FormRenderer = <T extends FormTypeMap>(\n props: FormRendererProps<T>\n): React.ReactElement => {\n const {\n methods: propMethods,\n config,\n onSubmit,\n showUndo = true,\n showClear = true,\n children,\n extraButtons,\n } = props;\n // consume shared store from higher-level provider\n const { steps, currentStep } = useFormStateContext<T>();\n const { setCurrentStep, handleStepChange, submit, undo, clear } = useFormActionsContext();\n const { useFormMethods: ctxMethods } = useFormMethodsContext<T>();\n const methods = (propMethods as typeof ctxMethods | undefined) ?? ctxMethods;\n // ensure all fields (including hidden ones) are registered on mount\n useRegisterFields(methods, config);\n\n const isMulti = steps.length > 1;\n const isLastStep = currentStep === steps.length - 1;\n\n const sortedSchema = React.useMemo(() => {\n const currentSchema = steps[currentStep]?.schema || [];\n const compare = (a: RowConfig<T>, b: RowConfig<T>) => {\n const an = Number(a.row);\n const bn = Number(b.row);\n const aIsNum = !Number.isNaN(an);\n const bIsNum = !Number.isNaN(bn);\n if (aIsNum && bIsNum) return an - bn;\n if (aIsNum) return -1;\n if (bIsNum) return 1;\n return String(a.row).localeCompare(String(b.row));\n };\n return [...currentSchema].slice().sort(compare);\n }, [steps, currentStep]);\n\n // navigation handlers\n const handleNext = async () => {\n if (isLastStep) {\n await submit(onSubmit);\n return;\n }\n await handleStepChange(currentStep + 1);\n };\n const handleBack = () => {\n if (currentStep > 0) setCurrentStep((s) => s - 1);\n };\n\n\n // wrap `submit` with RHF's handleSubmit so built-in validation is triggered\n const handleFormSubmit = methods.handleSubmit(async () => {\n // our custom submit already triggers all steps' fields\n await submit(onSubmit);\n });\n\n return (\n <FormProvider {...methods}>\n <Box sx={mergeSx(useFormRootSx, {\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"4px\",\n overflow: \"hidden\",\n px:1.5,py:1,\n })}>\n {isMulti && <StepperSection />}\n <Box sx={{\n display: \"flex\",\n flexDirection: \"column\",\n gap: \"8px\",\n flex: 1,\n overflow: \"auto\",\n }}>\n <Box sx={{ flex: 1 }}>\n <form onSubmit={handleFormSubmit}>\n {sortedSchema.map((row, idx) => (\n <RowRenderer key={`${row.row}-${idx}`} row={row as RowConfig} />\n ))}\n {children}\n </form>\n </Box>\n </Box>\n <Navigation\n isMulti={isMulti}\n currentStep={currentStep}\n isLastStep={isLastStep}\n handleBack={handleBack}\n handleNext={handleNext}\n onSubmit={handleFormSubmit}\n undo={showUndo ? undo : undefined}\n clear={showClear ? clear : undefined}\n extraButtons={extraButtons}\n />\n </Box>\n </FormProvider>\n );\n};\n","import * as React from 'react';\nimport { StandardStepper } from '@/ele/Stepper';\nimport { useFormState } from 'react-hook-form';\nimport { useFormActionsContext, useFormMethodsContext, useFormStateContext } from '../store/FormContext';\nimport type { FormTypeMap, RowConfig } from '../_utils';\n\ninterface StepperSectionStep {\n title: React.ReactNode;\n icon?: React.ReactNode;\n error: boolean;\n}\n\nconst getNames = <T extends FormTypeMap>(schema: RowConfig<T>[]) => {\n const names: string[] = [];\n schema.forEach((r) => r.fields.forEach((f) => names.push(String(f.name))));\n return names;\n};\n\nconst StepperSection = <T extends FormTypeMap>() => {\n const { steps, currentStep } = useFormStateContext<T>();\n const { handleStepChange } = useFormActionsContext();\n const { useFormMethods: methods } = useFormMethodsContext<T>();\n const { errors } = useFormState({ control: methods.control });\n\n const stepData = React.useMemo<StepperSectionStep[]>(() => {\n const errorMap = errors as Record<string, unknown>;\n return steps.map((step, idx) => {\n const hasError = getNames(step.schema).some((name) => Boolean(errorMap[name]));\n return {\n title: step.title ?? `Step ${idx + 1}`,\n icon: step.icon ?? idx + 1,\n error: hasError,\n };\n });\n }, [steps, errors]);\n\n return (\n <StandardStepper\n activeStep={currentStep}\n onChange={handleStepChange}\n steps={stepData}\n />\n );\n};\n\nexport default StepperSection;\n","import React from 'react';\nimport type { FieldValues, UseFormReturn } from 'react-hook-form';\nimport type { StepConfig } from '../_utils/types';\nimport type { FormTypeMap, InferFormDataType, StrictFormConfig } from '../_utils';\nimport { createFormStoreMethods } from './methods';\n\nexport interface FormState {\n currentStep: number;\n steps: StepConfig<FormTypeMap>[];\n}\n\nexport interface FormActions {\n setCurrentStep: React.Dispatch<React.SetStateAction<number>>;\n handleStepChange: (destinationStep: number) => Promise<boolean>;\n submit: (onSubmit: (data: FieldValues) => void) => Promise<void>;\n // form-level helpers\n undo: () => void;\n clear: () => void;\n}\n\nexport interface FormMethods {\n useFormMethods: UseFormReturn<InferFormDataType<FormTypeMap>>;\n}\n\nexport type FormStateTyped<T extends FormTypeMap> = Omit<FormState, 'steps'> & {\n steps: StepConfig<T>[];\n};\n\nexport type FormMethodsTyped<T extends FormTypeMap> = Omit<FormMethods, 'useFormMethods'> & {\n useFormMethods: UseFormReturn<InferFormDataType<T>>;\n};\n\nconst FormStateContext = React.createContext<FormState | null>(null);\nconst FormActionsContext = React.createContext<FormActions | null>(null);\nconst FormMethodsContext = React.createContext<FormMethods | null>(null);\n\nexport const useFormStateContext = <T extends FormTypeMap>() => {\n const ctx = React.useContext(FormStateContext) as FormStateTyped<T> | null;\n if (!ctx) {\n throw new Error('useFormStateContext must be used within a FormContextProvider');\n }\n return ctx;\n};\n\nexport const useFormActionsContext = () => {\n const ctx = React.useContext(FormActionsContext);\n if (!ctx) {\n throw new Error('useFormActionsContext must be used within a FormContextProvider');\n }\n return ctx;\n};\n\nexport const useFormMethodsContext = <T extends FormTypeMap>() => {\n const ctx = React.useContext(FormMethodsContext) as FormMethodsTyped<T> | null;\n if (!ctx) {\n throw new Error('useFormMethodsContext must be used within a FormContextProvider');\n }\n return ctx;\n};\n\nexport const useFormContext = <T extends FormTypeMap>() => {\n const state = useFormStateContext<T>();\n const actions = useFormActionsContext();\n const methods = useFormMethodsContext<T>();\n return { ...state, ...actions, ...methods };\n};\n\ninterface ProviderProps<T extends FormTypeMap> {\n config: StrictFormConfig<T>;\n useFormMethods: UseFormReturn<InferFormDataType<T>>;\n children: React.ReactNode;\n}\n\nexport const FormContextProvider = <T extends FormTypeMap>({\n config,\n useFormMethods,\n children,\n}: ProviderProps<T>) => {\n const steps = React.useMemo(() => {\n if ('steps' in config && config.steps) {\n return config.steps;\n }\n if ('schema' in config && config.schema) {\n return [{ schema: config.schema }];\n }\n return [] as StepConfig<T>[];\n }, [config]);\n\n const [currentStep, setCurrentStep] = React.useState(0);\n const currentStepRef = React.useRef(currentStep);\n currentStepRef.current = currentStep;\n\n React.useEffect(() => {\n setCurrentStep(0);\n }, [steps]);\n\n const storeMethods = React.useMemo(\n () =>\n createFormStoreMethods<T>({\n methods: useFormMethods,\n config,\n steps,\n getCurrentStep: () => currentStepRef.current,\n setCurrentStep,\n }),\n [useFormMethods, config, steps],\n );\n\n const stateValue = React.useMemo<FormStateTyped<T>>(\n () => ({\n currentStep,\n steps,\n }),\n [currentStep, steps],\n );\n\n const actionsValue = React.useMemo<FormActions>(\n () => ({\n setCurrentStep,\n ...storeMethods,\n }),\n [setCurrentStep, storeMethods],\n );\n\n const methodsValue = React.useMemo<FormMethodsTyped<T>>(\n () => ({\n useFormMethods,\n }),\n [useFormMethods],\n );\n\n return (\n <FormStateContext.Provider value={stateValue as unknown as FormState}>\n <FormActionsContext.Provider value={actionsValue}>\n <FormMethodsContext.Provider value={methodsValue as unknown as FormMethods}>\n {children}\n </FormMethodsContext.Provider>\n </FormActionsContext.Provider>\n </FormStateContext.Provider>\n );\n};\n","import type { Dispatch, SetStateAction } from 'react';\nimport type { FieldValues, Path, UseFormReturn } from 'react-hook-form';\nimport type { FormTypeMap, InferFormDataType, RowConfig, StrictFormConfig } from '../_utils';\nimport type { StepConfig } from '../_utils/types';\nimport { getDefaultValues } from '../_utils/helpers';\n\ninterface CreateFormStoreMethodsArgs<T extends FormTypeMap> {\n methods: UseFormReturn<InferFormDataType<T>>;\n config: StrictFormConfig<T>;\n steps: StepConfig<T>[];\n getCurrentStep: () => number;\n setCurrentStep: Dispatch<SetStateAction<number>>;\n}\n\nconst getNames = <T extends FormTypeMap>(schema: RowConfig<T>[]) => {\n const names: string[] = [];\n schema.forEach((row) => row.fields.forEach((field) => names.push(String(field.name))));\n return names;\n};\n\nconst getFieldNamesInRange = <T extends FormTypeMap>(\n steps: StepConfig<T>[],\n fromStep: number,\n toStep: number,\n): Path<InferFormDataType<T>>[] => {\n const start = Math.min(fromStep, toStep);\n const end = Math.max(fromStep, toStep);\n\n const names = steps\n .slice(start, end + 1)\n .flatMap((step) => getNames(step.schema));\n\n return Array.from(new Set(names)) as Path<InferFormDataType<T>>[];\n};\n\nexport const createFormStoreMethods = <T extends FormTypeMap>({\n methods,\n config,\n steps,\n getCurrentStep,\n setCurrentStep,\n}: CreateFormStoreMethodsArgs<T>) => {\n const validateNames = async (names: string[]): Promise<boolean> => {\n if (names.length === 0) {\n return methods.trigger();\n }\n return methods.trigger(names as Path<InferFormDataType<T>>[]);\n };\n\n const handleStepChange = async (destinationStep: number) => {\n const currentStep = getCurrentStep();\n if (destinationStep === currentStep) return true;\n\n // moving backward should always be permitted; we don't run validation in that\n // case since the user is retreating to earlier steps and we don't want error\n // states to block navigation.\n if (destinationStep < currentStep) {\n setCurrentStep(destinationStep);\n return true;\n }\n\n // For forward navigation we **only** validate the fields that belong to the\n // current step and any earlier ones. We intentionally avoid checking fields\n // that are \"ahead\" of the user (including the destination step) – users\n // may jump several steps forward and we don't want missing future values to\n // block them. A full validation of every step happens on final submit.\n const namesToTrigger = getFieldNamesInRange(steps, 0, currentStep);\n const isValid = await validateNames(namesToTrigger);\n if (!isValid) return false;\n\n setCurrentStep(destinationStep);\n return true;\n };\n\n const undo = () => {\n methods.reset();\n };\n\n const clear = () => {\n // produce a completely empty value map for every field in the schema.\n const emptyValues = getDefaultValues(config, true) as Record<string, unknown>;\n\n // perform a reset but tell RHF **not** to replace its stored defaultValues.\n // otherwise the act of clearing would make the emptied values the new\n // defaults, which is confusing and breaks undo/restore semantics.\n methods.reset(emptyValues as InferFormDataType<T>, { keepDefaultValues: true });\n\n // trigger validation so the UI updates immediately\n methods.trigger();\n };\n\n const submit = async (onSubmit: (data: FieldValues) => void) => {\n const namesToTrigger = getFieldNamesInRange(steps, 0, Math.max(steps.length - 1, 0));\n const isValid = await validateNames(namesToTrigger);\n if (!isValid) return;\n await methods.handleSubmit(onSubmit)();\n };\n\n return {\n handleStepChange,\n submit,\n undo,\n clear,\n };\n};\n","import React, { Suspense } from 'react';\nimport { Box } from '@/ele/Box';\nimport type { FormTypeMap } from '../_utils';\nimport type { RowConfig, FieldConfig } from '../_utils/types';\nimport { FIELD_TYPEs } from '../_utils/constants';\n\n// Eager fields used by typical text/number/select forms.\nimport { TextField } from '../Fields/TextField';\nimport { SelectField } from '../Fields/SelectField';\nimport { SliderField } from '../Fields/SliderField';\nimport { CheckField } from '../Fields/CheckField';\nimport { ToggleButtonField } from '../Fields/ToggleButtonField';\nimport { SwitchField } from '../Fields/SwitchField';\nimport { CustomField } from '../Fields/CustomField';\nimport { TextArrayField } from '../Fields/TextArrayField';\nimport { NumberField } from '../Fields/NumberField';\n\ntype AnyFieldProps = { field: FieldConfig };\n\nconst DateField = React.lazy(() =>\n import('../Fields/DateField').then((m) => ({\n default: m.DateField as React.ComponentType<AnyFieldProps>,\n })),\n);\nconst DateTimeField = React.lazy(() =>\n import('../Fields/DateTimeField').then((m) => ({\n default: m.DateTimeField as React.ComponentType<AnyFieldProps>,\n })),\n);\nconst TelField = React.lazy(() =>\n import('../Fields/TelField').then((m) => ({\n default: m.TelField as React.ComponentType<AnyFieldProps>,\n })),\n);\nconst FileUploadField = React.lazy(() =>\n import('../Fields/FileUploadField').then((m) => ({\n default: m.FileUploadField as React.ComponentType<AnyFieldProps>,\n })),\n);\nconst AvatarField = React.lazy(() =>\n import('../Fields/AvatarField').then((m) => ({\n default: m.AvatarField as React.ComponentType<AnyFieldProps>,\n })),\n);\nconst JSONEditorField = React.lazy(() =>\n import('../Fields/JSONEditorField').then((m) => ({\n default: m.JSONEditorField as React.ComponentType<AnyFieldProps>,\n })),\n);\nconst AutocompleteField = React.lazy(() =>\n import('../Fields/AutocompleteField').then((m) => ({\n default: m.AutocompleteField as React.ComponentType<AnyFieldProps>,\n })),\n);\n\nconst lazyFieldFallback = <Box sx={{ minHeight: 40 }} />;\n\nconst LazyField = ({ children }: { children: React.ReactNode }) => (\n <Suspense fallback={lazyFieldFallback}>{children}</Suspense>\n);\n\ninterface FieldRendererProps<T extends FormTypeMap> {\n field: FieldConfig<T>;\n}\n\nconst FieldRenderer = <T extends FormTypeMap>({ field }: FieldRendererProps<T>) => {\n switch (field.type) {\n case FIELD_TYPEs.text:\n return <TextField field={field} />;\n case FIELD_TYPEs.select:\n return <SelectField field={field} />;\n case FIELD_TYPEs.slider:\n return <SliderField field={field} />;\n case FIELD_TYPEs.check:\n return <CheckField field={field} />;\n case FIELD_TYPEs.date:\n return (\n <LazyField>\n <DateField field={field} />\n </LazyField>\n );\n case FIELD_TYPEs.dateTime:\n return (\n <LazyField>\n <DateTimeField field={field} />\n </LazyField>\n );\n case FIELD_TYPEs.toggleButton:\n return <ToggleButtonField field={field} />;\n case FIELD_TYPEs.autocomplete:\n return (\n <LazyField>\n <AutocompleteField field={field} />\n </LazyField>\n );\n case FIELD_TYPEs.switch:\n return <SwitchField field={field} />;\n case FIELD_TYPEs.number:\n return <NumberField field={field} />;\n case FIELD_TYPEs.json:\n return (\n <LazyField>\n <JSONEditorField field={field} />\n </LazyField>\n );\n case FIELD_TYPEs.tel:\n return (\n <LazyField>\n <TelField field={field} />\n </LazyField>\n );\n case FIELD_TYPEs.fileUpload:\n return (\n <LazyField>\n <FileUploadField field={field} />\n </LazyField>\n );\n case FIELD_TYPEs.avatar:\n return (\n <LazyField>\n <AvatarField field={field} />\n </LazyField>\n );\n case FIELD_TYPEs.textArray:\n return <TextArrayField field={field} />;\n case FIELD_TYPEs.custom:\n return <CustomField field={field} />;\n default:\n return <div>Unknown Field Type</div>;\n }\n};\n\ninterface RowRendererProps<T extends FormTypeMap> {\n row: RowConfig<T>;\n}\n\ninterface RowFieldProps<T extends FormTypeMap> {\n field: FieldConfig<T>;\n}\n\nconst RowFieldFrame = <T extends FormTypeMap>({\n field,\n hidden,\n}: RowFieldProps<T> & { hidden: boolean }) => {\n return (\n <Box\n sx={{\n flex: field.size?.width || 1,\n minWidth: field.size?.width || 'auto',\n ...(hidden && { display: 'none' }),\n \"& > *\": {\n minWidth: 200,\n },\n }}\n >\n <FieldRenderer field={field} />\n </Box>\n );\n};\n\nconst RowFieldWithHide = <T extends FormTypeMap>({\n field,\n useHide,\n}: RowFieldProps<T> & { useHide: () => boolean }) => {\n const hidden = useHide();\n return <RowFieldFrame field={field} hidden={hidden} />;\n};\n\nconst RowField = <T extends FormTypeMap>({ field }: RowFieldProps<T>) => {\n if (field.useHide) {\n return <RowFieldWithHide field={field} useHide={field.useHide} />;\n }\n return <RowFieldFrame field={field} hidden={false} />;\n};\n\nconst RowRenderer = <T extends FormTypeMap>({ row }: RowRendererProps<T>) => {\n return (\n <Box\n sx={{\n display: 'flex',\n flexDirection: 'row',\n gap: 2,\n justifyContent: 'space-between',\n flexWrap: 'wrap',\n marginBottom: 1,\n pt: 1,\n ...row.sx,\n }}\n >\n {row.fields.map((field) => (\n <RowField key={String(field.name)} field={field} />\n ))}\n </Box>\n );\n};\n\nexport default RowRenderer;\n","import { Controller, useFormContext } from 'react-hook-form';\nimport { TextField as MuiTextField } from '@/ele/Input/src/TextField';\nimport { Box } from '@/ele/Box';\nimport { FieldConfig, FormTypeMap, InferFormDataType, getHelperText, mergeFieldSx } from '../_utils';\nimport { mergeSx } from '@/_utils/_func';\nimport { FIELD_TYPEs } from '../_utils/constants';\nimport Explanation from './Explanation';\nimport { getFieldExplanation } from '../_utils/helpers';\n\ninterface TextFieldProps<T extends FormTypeMap = FormTypeMap> {\n field: Extract<FieldConfig<T>, { type: typeof FIELD_TYPEs.text }>;\n}\n\nexport const TextField = <T extends FormTypeMap = FormTypeMap>({ field }: TextFieldProps<T>) => {\n const { control, getValues } = useFormContext();\n const { \n name, \n label, \n required, \n disabled, \n sx, \n size, \n slotProps, \n errorMsg,\n defaultValue\n } = field;\n\n const textSlotProps = slotProps as import('../_utils/slotProps').TextSlotProps | undefined;\n\n return (\n <Controller\n control={control}\n name={name}\n defaultValue={defaultValue} \n render={({ field: { onChange, value, ...restField }, fieldState: { error } }) => (\n <Box sx={mergeSx({\n display: 'flex',\n alignItems: 'flex-start',\n gap: 1,\n }, mergeFieldSx(size, sx))}>\n <MuiTextField\n {...restField}\n value={value ?? ''}\n onChange={(e) => {\n onChange(e);\n textSlotProps?.onChange?.(e);\n const newValue = (e?.target)?.value ?? '';\n field.onChange?.(newValue, getValues() as InferFormDataType<T>);\n }}\n label={label}\n required={required}\n disabled={disabled}\n error={!!error}\n helperText={getHelperText(error, errorMsg, field.helperText)}\n fullWidth\n size=\"small\"\n sx={{ flex: 1 }}\n multiline={textSlotProps?.multiline}\n rows={textSlotProps?.rows}\n placeholder={textSlotProps?.placeholder}\n type={'text'}\n\n slotProps={{\n htmlInput: {\n maxLength: textSlotProps?.maxLength,\n }\n }}\n />\n <Explanation alignToInput explanation={getFieldExplanation(field)} />\n </Box>\n )}\n />\n );\n};\n","import { Controller, useFormContext } from 'react-hook-form';\nimport { Select } from '@/ele/Select';\nimport { Box } from '@/ele/Box';\nimport { getHelperText } from '../_utils/helperText';\nimport { getFieldExplanation, mergeFieldSx } from '../_utils/helpers';\nimport { mergeSx } from '@/_utils/_func';\nimport { FieldConfig, FormTypeMap, InferFormDataType, GetDataType } from '../_utils';\nimport { FIELD_TYPEs } from '../_utils/constants';\nimport Explanation from './Explanation';\nimport type { SelectSlotProps, SelectOption, UseOptionsHook } from '../_utils/slotProps';\n\ninterface SelectFieldProps<T extends FormTypeMap = FormTypeMap> {\n field: Extract<FieldConfig<T>, { type: typeof FIELD_TYPEs.select }>;\n}\n\nexport const SelectField = <T extends FormTypeMap = FormTypeMap>({ field }: SelectFieldProps<T>) => {\n const selectSlotProps = field.slotProps as SelectSlotProps | undefined;\n if (selectSlotProps?.useOptions) {\n return <SelectFieldWithOptions field={field} useOptions={selectSlotProps.useOptions} />;\n }\n return <SelectFieldView field={field} options={selectSlotProps?.options ?? []} />;\n};\n\nconst SelectFieldWithOptions = <T extends FormTypeMap>({\n field,\n useOptions,\n}: SelectFieldProps<T> & { useOptions: UseOptionsHook }) => {\n const { options = [] } = useOptions();\n return <SelectFieldView field={field} options={options} />;\n};\n\nconst SelectFieldView = <T extends FormTypeMap>({\n field,\n options,\n}: SelectFieldProps<T> & { options: SelectOption[] }) => {\n const { control, getValues } = useFormContext();\n const {\n name,\n label,\n required,\n disabled,\n sx,\n size,\n slotProps,\n errorMsg,\n defaultValue,\n } = field;\n\n return (\n <Controller\n control={control}\n name={name}\n defaultValue={defaultValue}\n render={({ field: { onChange, value, ...restField }, fieldState: { error } }) => (\n <Box sx={mergeSx({\n display: 'flex',\n alignItems: 'flex-start',\n gap: 1,\n }, mergeFieldSx(size, sx))}>\n <Select\n {...restField}\n value={value ?? (slotProps?.multiple ? [] : '')}\n onChange={(e, child) => {\n const newValue = (e?.target)?.value as GetDataType<typeof FIELD_TYPEs.select> | null;\n onChange(newValue);\n slotProps?.onChange?.(e, child);\n field.onChange?.(newValue, getValues() as InferFormDataType<T>);\n }}\n label={label}\n required={required}\n disabled={disabled}\n error={!!error}\n helperText={getHelperText(error, errorMsg, field.helperText)}\n options={options}\n multiple={slotProps?.multiple}\n sx={{ flex: 1 }}\n slotProps={{\n formControl: {\n size: 'small',\n disabled: disabled,\n sx: {\n width: '100%',\n },\n },\n }}\n />\n <Explanation alignToInput explanation={getFieldExplanation(field)} />\n </Box>\n )}\n />\n );\n};\n","import { Controller, useFormContext } from 'react-hook-form';\nimport { Slider as MuiSlider } from '@/ele/Slider';\nimport { FormControl, FormLabel } from '@/ele/Form';\nimport { Box } from '@/ele/Box';\nimport { FieldHelperText } from '../_utils/helperText';\nimport { FieldConfig, FormTypeMap, InferFormDataType } from '../_utils'; \nimport { SliderSlotProps } from '../_utils/slotProps';\nimport Explanation from './Explanation';\nimport { getFieldExplanation, mergeFieldSx } from '../_utils/helpers';\n\ninterface SliderFieldProps<T extends FormTypeMap = FormTypeMap> {\n field: Extract<FieldConfig<T>, { type: 'slider-field' }>;\n}\n\nexport const SliderField = <T extends FormTypeMap = FormTypeMap>({ field }: SliderFieldProps<T>) => {\n const { control, getValues } = useFormContext();\n const { \n name, \n label, \n required, \n disabled, \n sx, \n size, \n slotProps, \n errorMsg,\n defaultValue\n } = field;\n\n const sliderSlotProps = slotProps as SliderSlotProps | undefined;\n\n return (\n <Controller\n control={control}\n name={name}\n defaultValue={defaultValue}\n render={({ field: { onChange, value, ...restField }, fieldState: { error } }) => (\n <FormControl \n disabled={disabled}\n required={required}\n error={!!error}\n fullWidth\n size=\"small\"\n sx={mergeFieldSx(size, sx)}\n > \n <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'flex-start', }}>\n <FormLabel component=\"legend\">{label}</FormLabel>\n <Explanation explanation={getFieldExplanation(field)} />\n </Box>\n <Box sx={{ px: 4,}}>\n <MuiSlider\n {...restField}\n value={typeof value === 'number' || Array.isArray(value) ? value : (sliderSlotProps?.min ?? 0)}\n onChange={(event, newValue, activeThumb) => {\n const normalized = Array.isArray(newValue) ? (newValue)[0] as number : (newValue as number);\n onChange(normalized);\n sliderSlotProps?.onChange?.(event, newValue, activeThumb);\n field.onChange?.(normalized, getValues() as InferFormDataType<T>);\n }}\n min={sliderSlotProps?.min}\n max={sliderSlotProps?.max}\n step={sliderSlotProps?.step}\n marks={sliderSlotProps?.marks}\n valueLabelDisplay={sliderSlotProps?.valueLabelDisplay || 'auto'}\n orientation={sliderSlotProps?.orientation}\n disableSwap={sliderSlotProps?.disableSwap}\n track={sliderSlotProps?.track}\n />\n </Box>\n <FieldHelperText error={error} errorMsg={errorMsg} helpers={[field.helperText]} />\n </FormControl>\n )}\n />\n );\n};\n","import { Controller, useFormContext } from 'react-hook-form';\nimport { Box } from '@/ele/Box';\nimport { CheckboxGroup } from '@/ele/Checkbox';\nimport { FieldConfig, FormTypeMap, InferFormDataType } from '../_utils';\nimport { getFieldExplanation } from '../_utils/helpers';\nimport Explanation from './Explanation';\nimport { FIELD_TYPEs } from '../_utils/constants';\nimport type { CheckSlotProps } from '../_utils/slotProps';\n\ninterface CheckFieldProps<T extends FormTypeMap = FormTypeMap> {\n field: Extract<FieldConfig<T>, { type: typeof FIELD_TYPEs.check }>;\n}\n\ntype CheckUseOptions = NonNullable<CheckSlotProps['useOptions']>;\n\nexport const CheckField = <T extends FormTypeMap = FormTypeMap>({ field }: CheckFieldProps<T>) => {\n const checkSlot = field.slotProps as CheckSlotProps | undefined;\n if (checkSlot?.useOptions) {\n return <CheckFieldWithOptions field={field} useOptions={checkSlot.useOptions} />;\n }\n return <CheckFieldView field={field} options={checkSlot?.options ?? []} />;\n};\n\nconst CheckFieldWithOptions = <T extends FormTypeMap>({\n field,\n useOptions,\n}: CheckFieldProps<T> & { useOptions: CheckUseOptions }) => {\n const { options = [] } = useOptions();\n return <CheckFieldView field={field} options={options} />;\n};\n\nconst CheckFieldView = <T extends FormTypeMap>({\n field,\n options,\n}: CheckFieldProps<T> & { options: NonNullable<CheckSlotProps['options']> }) => {\n const { control, getValues } = useFormContext();\n const {\n name,\n required,\n slotProps,\n label,\n defaultValue,\n } = field;\n\n const checkSlot = slotProps as CheckSlotProps | undefined;\n const helperText = checkSlot?.helperText;\n const explanation = getFieldExplanation(field);\n\n return (\n <Box>\n <Controller\n control={control}\n name={name}\n defaultValue={defaultValue}\n render={({ field: controllerField, fieldState: { error } }) => {\n const { onChange, value } = controllerField;\n const checkedIds = Array.isArray(value)\n ? (value as string[]).filter((id) => options.some((o) => o.id === id))\n : [];\n\n return (\n <CheckboxGroup\n {...checkSlot}\n slotProps={{\n ...(checkSlot?.slotProps ?? {}),\n group: {\n sx: { fontSize: '14px' },\n },\n }}\n options={options}\n title={label}\n titleSuffix={\n explanation ? (\n <Box sx={{ display: 'inline-flex' }}>\n <Explanation explanation={explanation} />\n </Box>\n ) : undefined\n }\n checkedIds={checkedIds}\n setCheckedIds={(next) => {\n const currentIds = checkedIds;\n const newIds = typeof next === 'function' ? next(currentIds) : next;\n const idsArray = (newIds as string[]) ?? [];\n onChange(idsArray);\n field.onChange?.(idsArray, getValues() as InferFormDataType<T>);\n }}\n error={!!error}\n helperText={helperText}\n errorText={error ? (typeof error.message === 'string' ? error.message : undefined) : undefined}\n required={required}\n />\n );\n }}\n />\n </Box>\n );\n};\n","import React from 'react';\nimport { Controller, useFormContext } from 'react-hook-form';\nimport { Box } from '@/ele/Box';\nimport { FormControl, FormLabel } from '@/ele/Form';\nimport { FieldHelperText } from '../_utils/helperText';\nimport { ToggleButtonGroup } from '@/ele/ToggleButtonGroup';\nimport { FieldConfig, FormTypeMap, InferFormDataType } from '../_utils';\nimport Explanation from './Explanation';\nimport { FIELD_TYPEs } from '../_utils/constants';\nimport type { ToggleButtonSlotProps } from '../_utils/slotProps';\nimport { getFieldExplanation, mergeFieldSx } from '../_utils/helpers';\n\ninterface ToggleButtonFieldProps<T extends FormTypeMap = FormTypeMap> {\n field: Extract<FieldConfig<T>, { type: typeof FIELD_TYPEs.toggleButton }>;\n}\n\nexport const ToggleButtonField = <T extends FormTypeMap = FormTypeMap>({ field }: ToggleButtonFieldProps<T>) => {\n const { control, getValues } = useFormContext();\n const {\n name,\n label,\n required,\n disabled,\n sx,\n size,\n slotProps,\n errorMsg,\n defaultValue,\n } = field;\n\n const toggleSlot = slotProps as ToggleButtonSlotProps | undefined;\n\n return (\n <Controller\n control={control}\n name={name}\n defaultValue={defaultValue}\n render={({ field: { onChange, value }, fieldState: { error } }) => {\n const helperTextNode = <FieldHelperText error={error} errorMsg={errorMsg} helpers={[field.helperText]} />;\n return (\n <FormControl\n disabled={disabled}\n required={required}\n error={!!error}\n fullWidth\n size=\"small\"\n sx={mergeFieldSx(size, sx)}\n >\n <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'flex-start', mb: 0.5 }}>\n <FormLabel component=\"legend\" sx={{ mr: 1 }}>{label}</FormLabel>\n <Box sx={{ display: 'inline-flex' }}>\n <Explanation explanation={getFieldExplanation(field)} />\n </Box>\n </Box>\n <Box sx={{ px: 4, py: 1 }}>\n <ToggleButtonGroup\n value={typeof value === 'string' ? value : (toggleSlot?.options?.[0]?.value ?? '')}\n onChange={(e: React.MouseEvent<HTMLElement>, newValue: string | null) => {\n // newValue may be null when deselected; pass null to callbacks\n onChange(newValue ?? null);\n field.onChange?.(newValue ?? null, getValues() as InferFormDataType<T>);\n }}\n options={toggleSlot?.options ?? []}\n color={toggleSlot?.color}\n />\n </Box>\n {helperTextNode}\n </FormControl>\n )}}\n />\n );\n};\n","import { Controller, useFormContext } from 'react-hook-form';\nimport { Box, Stack } from '@/ele/Box';\nimport { FormControl, FormLabel } from '@/ele/Form';\nimport { FieldHelperText } from '../_utils/helperText';\nimport { Switch as EleSwitch } from '@/ele/Switch';\nimport { FieldConfig, FormTypeMap, InferFormDataType } from '../_utils';\nimport Explanation from './Explanation';\nimport { FIELD_TYPEs } from '../_utils/constants';\nimport type { SwitchSlotProps } from '../_utils/slotProps';\nimport { getFieldExplanation, mergeFieldSx } from '../_utils/helpers';\n\ninterface SwitchFieldProps<T extends FormTypeMap = FormTypeMap> {\n field: Extract<FieldConfig<T>, { type: typeof FIELD_TYPEs.switch }>;\n}\n\nexport const SwitchField = <T extends FormTypeMap = FormTypeMap>({ field }: SwitchFieldProps<T>) => {\n const { control, getValues } = useFormContext();\n const {\n name,\n label,\n required,\n disabled,\n sx,\n size,\n slotProps,\n errorMsg,\n defaultValue,\n } = field;\n\n const switchSlot = slotProps as SwitchSlotProps | undefined;\n\n return (\n <Controller\n control={control}\n name={name}\n defaultValue={defaultValue ?? false}\n render={({ field: { onChange, value }, fieldState: { error } }) => (\n <FormControl\n disabled={disabled}\n required={required}\n error={!!error}\n fullWidth\n size=\"small\"\n sx={mergeFieldSx(size, sx)}\n >\n <Stack direction=\"row\" alignItems=\"center\" gap={1}>\n <FormLabel component=\"legend\" sx={{ fontSize: '12px', userSelect: 'none', color: 'var(--useform-label-color)' }}>{label}</FormLabel>\n <EleSwitch\n {...switchSlot}\n helperText={undefined}\n label={undefined}\n checked={!!value}\n onChange={(e, checked) => {\n onChange(checked);\n field.onChange?.(checked, getValues() as InferFormDataType<T>);\n switchSlot?.onChange?.(e, checked);\n }}\n />\n <Box sx={{ '& > span > button.MuiButtonBase-root.MuiIconButton-root': { m: 0, p: 0 } }}>\n <Explanation explanation={getFieldExplanation(field)} />\n </Box>\n </Stack>\n <FieldHelperText error={error} errorMsg={errorMsg} helpers={[field.helperText]} />\n </FormControl>\n )}\n />\n );\n};\n","import { Controller, useFormContext } from 'react-hook-form' ;\nimport { Box } from '@/ele/Box';\nimport { FormControl, FormLabel } from '@/ele/Form';\nimport { FieldHelperText } from '../_utils/helperText';\nimport { FieldConfig, FormTypeMap, InferFormDataType } from '../_utils';\nimport Explanation from './Explanation';\nimport { FIELD_TYPEs } from '../_utils/constants';\nimport type { CustomSlotProps } from '../_utils/slotProps';\nimport { getFieldExplanation, mergeFieldSx } from '../_utils/helpers';\n\ninterface CustomFieldProps<T extends FormTypeMap = FormTypeMap> {\n field: Extract<FieldConfig<T>, { type: typeof FIELD_TYPEs.custom }>;\n}\n\nexport const CustomField = <T extends FormTypeMap = FormTypeMap>({ field }: CustomFieldProps<T>) => {\n const { control, getValues } = useFormContext();\n const {\n name,\n label,\n required,\n disabled,\n sx,\n size,\n slotProps,\n errorMsg,\n defaultValue,\n } = field;\n\n const customSlot = slotProps as CustomSlotProps | undefined;\n\n return (\n <Controller\n control={control}\n name={name}\n defaultValue={defaultValue}\n render={({ field: { onChange, value }, fieldState: { error } }) => {\n const handleChange = (v: unknown) => {\n onChange(v);\n // `Custom` fields accept `unknown` values by design; the outer\n // `FieldConfig` typing maps custom fields to `unknown` so we can\n // forward `v` directly without an `any` cast.\n field.onChange?.(v, getValues() as InferFormDataType<T>);\n };\n\n\n\n return (\n <FormControl\n disabled={disabled}\n required={required}\n error={!!error}\n fullWidth\n size=\"small\"\n sx={mergeFieldSx(size, sx)}\n >\n <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'flex-start' }}>\n <FormLabel component=\"legend\">{label}</FormLabel>\n <Explanation explanation={getFieldExplanation(field)} />\n </Box>\n\n <Box sx={{ py: 1 }}>\n {typeof customSlot?.render === 'function' ? (\n customSlot.render({ value, onChange: handleChange, error: !!error, helperText: customSlot?.helperText, getValues: () => getValues() })\n ) : (\n // fallback simple input\n <input\n value={value ?? ''}\n onChange={(e) => handleChange(e.target.value)}\n style={{ width: '100%', padding: 8, boxSizing: 'border-box' }}\n />\n )}\n </Box>\n\n <FieldHelperText error={error} errorMsg={errorMsg} helpers={[String(customSlot?.helperText ?? '')]} />\n </FormControl>\n );\n }}\n />\n );\n};\n","import { Controller, useFormContext } from 'react-hook-form';\nimport { Box } from '@/ele/Box';\nimport { IconButton, Button } from '@/ele/Button';\nimport { TextField as MuiTextField } from '@/ele/Input/src/TextField';\nimport { FormControl, FormLabel } from '@/ele/Form';\nimport { FieldHelperText } from '../_utils/helperText';\nimport { DeleteIcon, AddIcon } from '@/icons/MuiIcon';\nimport { FieldConfig, FormTypeMap, InferFormDataType } from '../_utils';\nimport { FIELD_TYPEs } from '../_utils/constants';\nimport Explanation from './Explanation';\nimport type { TextArraySlotProps } from '../_utils/slotProps';\nimport { getFieldExplanation, mergeFieldSx } from '../_utils/helpers';\n\ninterface TextArrayFieldProps<T extends FormTypeMap = FormTypeMap> {\n field: Extract<FieldConfig<T>, { type: typeof FIELD_TYPEs.textArray }>;\n}\n\nexport const TextArrayField = <T extends FormTypeMap = FormTypeMap>({ field }: TextArrayFieldProps<T>) => {\n const { control, getValues } = useFormContext();\n const {\n name,\n label,\n required,\n disabled,\n slotProps,\n errorMsg,\n defaultValue,\n } = field;\n\n const taSlot = slotProps as TextArraySlotProps | undefined;\n const minItems = taSlot?.minItems ?? 0;\n const maxItems = taSlot?.maxItems ?? Infinity;\n\n return (\n <Controller\n control={control}\n name={name}\n defaultValue={defaultValue ?? []}\n render={({ field: controllerField, fieldState: { error } }) => {\n const { onChange, value } = controllerField;\n const items = Array.isArray(value) ? value as string[] : [];\n\n const setItems = (next: string[]) => {\n onChange(next);\n // The `field` prop may be a union field type; assert it is the correct\n // shape at runtime before calling the optional `onChange` callback.\n if ((field)?.onChange) {\n (field).onChange(next, getValues() as InferFormDataType<T>);\n }\n };\n const addItem = () => {\n if (items.length >= maxItems) return;\n setItems([...items, '']);\n };\n const removeItem = (index:number) => {\n if (items.length <= minItems) return;\n const next = items.slice(0, index).concat(items.slice(index+1));\n setItems(next);\n };\n const updateItem = (index:number, v:string) => {\n const next = items.slice();\n next[index] = v;\n setItems(next);\n };\n\n return (\n <FormControl\n disabled={disabled}\n required={required}\n error={!!error}\n fullWidth\n size=\"small\"\n sx={mergeFieldSx(field.size, field.sx)}\n >\n <Box sx={{ display: 'flex', alignItems: 'center', justifyContent: 'flex-start' }}>\n <FormLabel component=\"legend\">{label}</FormLabel>\n <Explanation explanation={getFieldExplanation(field)} />\n </Box>\n\n <Box sx={{ py: 1, display: 'flex', flexDirection: 'column', gap: 1 }}>\n {items.map((it, idx) => (\n <Box key={idx} sx={{ display: 'flex', gap: 1, alignItems: 'center' }}>\n <MuiTextField\n size=\"small\"\n value={it}\n onChange={(e) => updateItem(idx, e.target.value)}\n placeholder={taSlot?.itemProps?.placeholder}\n sx={{ flex: 1 }}\n slotProps={{\n htmlInput: {\n maxLength: taSlot?.itemProps?.maxLength,\n }\n }}\n />\n <IconButton size=\"small\" onClick={() => removeItem(idx)} disabled={items.length <= minItems}>\n <DeleteIcon fontSize=\"small\" />\n </IconButton>\n </Box>\n ))}\n\n <Box>\n <Button size=\"small\" startIcon={<AddIcon/>} onClick={addItem} disabled={items.length >= maxItems}>\n {taSlot?.addButtonLabel ?? 'Add'}\n </Button>\n </Box>\n </Box>\n\n <FieldHelperText error={error} errorMsg={errorMsg} helpers={[field.helperText]} />\n </FormControl>\n );\n }}\n />\n );\n};\n","import { Controller, useFormContext } from 'react-hook-form';\nimport { Box } from '@/ele/Box';\nimport { FormControl, InputAdornment } from '@/ele/Form';\nimport { TextField } from '@/ele/Input/src/TextField';\nimport { IconButton } from '@/ele/Button';\nimport { getHelperText } from '../_utils/helperText';\nimport {AddIcon, RemoveIcon} from '@/icons/MuiIcon';\nimport { FieldConfig, FormTypeMap, InferFormDataType } from '../_utils';\nimport Explanation from './Explanation';\nimport { FIELD_TYPEs } from '../_utils/constants';\nimport type { NumberSlotProps } from '../_utils/slotProps';\nimport { getFieldExplanation, mergeFieldSx } from '../_utils/helpers';\nimport { mergeSx } from '@/_utils/_func';\n\ninterface NumberFieldProps<T extends FormTypeMap = FormTypeMap> {\n field: Extract<FieldConfig<T>, { type: typeof FIELD_TYPEs.number }>;\n}\n\nexport const NumberField = <T extends FormTypeMap = FormTypeMap>({ field }: NumberFieldProps<T>) => {\n const { control, getValues } = useFormContext();\n const { name, label, required, disabled, sx, size, slotProps, errorMsg, defaultValue } = field;\n\n const numSlot = slotProps as NumberSlotProps | undefined;\n\n return (\n <Controller\n control={control}\n name={name}\n defaultValue={defaultValue ?? numSlot?.min ?? 0}\n render={({ field: controllerField, fieldState: { error } }) => {\n const { onChange, value } = controllerField;\n\n // helper to update value with clamping\n const update = (next: number) => {\n onChange(next);\n field.onChange?.(next as number | null, getValues() as InferFormDataType<T>);\n };\n\n const handleMinus = () => {\n const s = numSlot?.step ?? 1;\n const cur = value ?? (numSlot?.min ?? 0);\n let next = cur - s;\n if (typeof numSlot?.min === 'number') next = Math.max(next, numSlot.min);\n update(next);\n };\n\n const handlePlus = () => {\n const s = numSlot?.step ?? 1;\n const cur = value ?? (numSlot?.min ?? 0);\n let next = cur + s;\n if (typeof numSlot?.max === 'number') next = Math.min(next, numSlot.max);\n update(next);\n };\n\n return (\n <FormControl disabled={disabled} required={required} error={!!error} fullWidth size=\"small\" \n sx={mergeSx(mergeFieldSx(size, sx), { maxWidth: '200px' })}>\n <Box sx={{ display: 'flex', alignItems: 'flex-start', gap: 1 }}>\n <TextField\n fullWidth\n size=\"small\"\n type=\"number\"\n label={label} required={required} error={!!error}\n helperText={getHelperText(error, errorMsg, field.helperText)}\n value={value ?? ''}\n // hide browser native spinner controls\n sx={{\n flex: 1,\n minWidth: 0,\n '& input[type=number]::-webkit-outer-spin-button': {\n WebkitAppearance: 'none',\n margin: 0,\n },\n '& input[type=number]::-webkit-inner-spin-button': {\n WebkitAppearance: 'none',\n margin: 0,\n },\n '& input[type=number]': {\n MozAppearance: 'textfield',\n WebkitAppearance: 'textfield',\n appearance: 'textfield',\n },\n }}\n onChange={(e) => {\n const s = (e.target as HTMLInputElement).value;\n const parsed = s === '' ? null : Number(s);\n onChange(parsed);\n field.onChange?.(parsed, getValues() as InferFormDataType<T>);\n }}\n slotProps={{\n ...numSlot?.slotProps,\n htmlInput: {\n ...(numSlot?.slotProps?.htmlInput ?? {}),\n min: numSlot?.min,\n max: numSlot?.max,\n step: numSlot?.step,\n style: { textAlign: 'center' },\n },\n input: {\n ...(numSlot?.slotProps?.input ?? {}),\n startAdornment: (\n <InputAdornment position=\"start\">\n <IconButton size=\"small\" onClick={handleMinus} disabled={typeof value === 'number' && typeof numSlot?.min === 'number' ? value <= numSlot.min : false}>\n <RemoveIcon fontSize=\"small\" />\n </IconButton>\n </InputAdornment>\n ),\n endAdornment: (\n <InputAdornment position=\"end\">\n <IconButton size=\"small\" onClick={handlePlus} disabled={typeof value === 'number' && typeof numSlot?.max === 'number' ? value >= numSlot.max : false}>\n <AddIcon fontSize=\"small\" />\n </IconButton>\n </InputAdornment>\n ),\n },\n \n }}\n disabled={disabled}\n />\n <Explanation alignToInput explanation={getFieldExplanation(field)} />\n </Box>\n\n </FormControl>\n );\n }}\n />\n );\n};\n","import React from 'react';\nimport { useFormContext, useFormState } from 'react-hook-form';\nimport { CheckIcon, NavigateBeforeIcon, NavigateNextIcon, RestoreIcon, DeleteIcon } from '@/icons/MuiIcon';\nimport { IconButton } from '@/ele/Button';\nimport { Box } from '@/ele/Box';\nimport { CircularProgress } from '@/ele/Progress';\n\ninterface NavigationProps {\n isMulti: boolean;\n currentStep: number;\n isLastStep: boolean;\n handleBack: () => void;\n handleNext: () => void;\n onSubmit?: () => void;\n undo?: () => void;\n clear?: () => void;\n extraButtons?: React.ReactNode;\n}\n\nconst Navigation = ({\n isMulti,\n currentStep,\n isLastStep,\n handleBack,\n handleNext,\n onSubmit,\n undo,\n clear,\n extraButtons,\n}: NavigationProps) => {\n const { control } = useFormContext();\n const { isSubmitting } = useFormState({ control });\n\n return (\n <Box\n sx={{\n padding: '4px 0',\n display: 'flex',\n justifyContent: 'flex-end',\n gap: 1,\n }}\n >\n {extraButtons}\n {undo && (\n <IconButton onClick={undo} size=\"small\" disabled={isSubmitting} aria-label=\"Undo\">\n <RestoreIcon fontSize=\"small\" />\n </IconButton>\n )}\n {clear && (\n <IconButton onClick={clear} size=\"small\" disabled={isSubmitting} aria-label=\"Clear\">\n <DeleteIcon fontSize=\"small\" />\n </IconButton>\n )}\n {isMulti ? (\n <>\n <IconButton onClick={handleBack} disabled={currentStep === 0 || isSubmitting} size=\"small\" aria-label=\"Back\">\n <NavigateBeforeIcon fontSize=\"small\" />\n </IconButton>\n <IconButton onClick={handleNext} size=\"small\" color={isLastStep ? 'success' : undefined} disabled={isSubmitting} aria-label={isLastStep ? 'Submit' : 'Next'}>\n {isLastStep\n ? (isSubmitting ? <CircularProgress size={18} color=\"inherit\" /> : <CheckIcon fontSize=\"small\" />)\n : <NavigateNextIcon fontSize=\"small\" />}\n </IconButton>\n </>\n ) : (\n <IconButton onClick={onSubmit} size=\"small\" color=\"success\" disabled={isSubmitting} aria-label=\"Submit\">\n {isSubmitting ? <CircularProgress size={18} color=\"inherit\" /> : <CheckIcon fontSize=\"small\" />}\n </IconButton>\n )}\n </Box>\n );\n};\n\nexport default Navigation;\n","import { useEffect, useMemo } from 'react';\nimport type { UseFormReturn, Path, PathValue } from 'react-hook-form';\nimport type { StrictFormConfig, FormTypeMap, InferFormDataType, RowConfig } from '../_utils';\nimport { collectRows, getFormFieldsSignature } from '../_utils/helpers';\n\nexport function useRegisterFields<T extends FormTypeMap>(\n methods: UseFormReturn<InferFormDataType<T>>,\n config: StrictFormConfig<T>\n) {\n const signature = useMemo(() => getFormFieldsSignature(config), [config]);\n\n useEffect(() => {\n const rows: RowConfig<T>[] = collectRows(config);\n\n rows.forEach((row) => {\n row.fields.forEach((field) => {\n const name = field.name as Path<InferFormDataType<T>>;\n\n methods.register(name, {\n shouldUnregister: false,\n });\n\n if (field.defaultValue !== undefined) {\n const alreadyProvided =\n config.defaultValues && Object.prototype.hasOwnProperty.call(config.defaultValues, name as string);\n if (!alreadyProvided) {\n methods.setValue(name, field.defaultValue as unknown as PathValue<InferFormDataType<T>, Path<InferFormDataType<T>>>, { shouldDirty: false });\n }\n } else {\n const current = methods.getValues(name as Path<InferFormDataType<T>>);\n if (current === undefined) {\n methods.setValue(name, null as unknown as PathValue<InferFormDataType<T>, Path<InferFormDataType<T>>>, { shouldDirty: false });\n }\n }\n });\n });\n // Re-register when the field set actually changes, not when `config` is a new object.\n // eslint-disable-next-line react-hooks/exhaustive-deps -- `signature` is the config identity that matters\n }, [methods, signature]);\n}\n\nexport default useRegisterFields;\n","import type { SxProps, Theme } from '@mui/material/styles';\n\n/**\n * Root-level CSS variable aliases for the UseForm compound.\n * Spread on container elements — children consume via `var(--*)`.\n */\nexport const useFormRootSx: SxProps<Theme> = {\n '--useform-error': 'var(--mui-palette-error-main)',\n '--useform-error-hover': 'var(--mui-palette-error-dark)',\n '--useform-label-color': 'var(--mui-palette-text-grey-1)',\n '--useform-warning': 'var(--mui-palette-warning-main)',\n};\n","import React from 'react';\nimport { FieldValues } from 'react-hook-form';\nimport { CloseIcon } from '@/icons/MuiIcon';\n\nimport { MuiModal } from '@/ele/Modal';\nimport { IconButton } from '@/ele/Button';\nimport { Box } from '@/ele/Box';\n\nimport type { ConfiguredFormReturn } from './useHooks';\nimport { FormTypeMap, StrictFormConfig } from './_utils';\nimport { FormTree, type FormLiveProps } from './FormTree';\nimport { useFormRootSx } from './theme';\n\nexport interface FormModalRendererProps<T extends FormTypeMap> {\n openProps: [boolean, React.Dispatch<React.SetStateAction<boolean>>];\n title: string;\n methods: ConfiguredFormReturn<T>['methods'];\n config: StrictFormConfig<T>;\n onSubmit: (data: FieldValues) => void;\n extraButtons?: React.ReactNode;\n children?: React.ReactNode;\n maxWidth?: string | number;\n closeOnBackdropClick?: boolean;\n showCloseButton?: boolean;\n showUndo?: boolean;\n showClear?: boolean;\n slotProps?:{\n modal?:Partial<React.ComponentProps<typeof MuiModal>>\n }\n}\n\nexport function FormModalRenderer<T extends FormTypeMap>(p:FormModalRendererProps<T>){\n const {openProps,\n title,\n methods,\n config,\n onSubmit,\n extraButtons,\n children,\n maxWidth = '600px',\n closeOnBackdropClick = true,\n showCloseButton = true,\n showUndo = true,\n showClear = true,\n slotProps,} = p\n const [, setOpen] = openProps;\n\n const livePropsRef = React.useRef<FormLiveProps<T>>({ onSubmit, extraButtons, children });\n livePropsRef.current = { onSubmit, extraButtons, children };\n\n const handleClose = (event: object, reason: \"backdropClick\" | \"escapeKeyDown\") => {\n if (reason === 'backdropClick' && !closeOnBackdropClick) return;\n setOpen(false);\n };\n\n return (\n <MuiModal \n openProps={openProps} \n title={title}\n maxWidth={maxWidth}\n onClose={handleClose as unknown as () => void}\n closeButton={showCloseButton ? (\n <Box sx={useFormRootSx}>\n <IconButton onClick={() => setOpen(false)} sx={{\n backgroundColor: 'transparent',\n color: 'var(--useform-error)',\n '&:hover': {\n color: 'var(--useform-error-hover)',\n borderColor: 'transparent',\n },\n }}>\n <CloseIcon sx={{fontSize:16}}/>\n </IconButton>\n </Box>\n ) : null}\n {...slotProps?.modal}\n >\n <FormTree\n methods={methods}\n config={config}\n livePropsRef={livePropsRef}\n showUndo={showUndo}\n showClear={showClear}\n />\n </MuiModal>\n );\n};\n","import React from 'react';\nimport type { FieldValues } from 'react-hook-form';\nimport type { ConfiguredFormReturn } from './useHooks';\nimport { FormRenderer } from './FormRenderer/Layout';\nimport type { FormTypeMap, StrictFormConfig } from './_utils';\nimport { FormContextProvider } from './store/FormContext';\n\nexport type FormLiveProps<T extends FormTypeMap = FormTypeMap> = {\n onSubmit: (data: FieldValues) => void;\n extraButtons?: React.ReactNode | ((methods: ConfiguredFormReturn<T>['methods']) => React.ReactNode);\n children?: React.ReactNode;\n};\n\nexport type FormTreeProps<T extends FormTypeMap = FormTypeMap> = {\n methods: ConfiguredFormReturn<T>['methods'];\n config: StrictFormConfig<T>;\n livePropsRef: React.MutableRefObject<FormLiveProps<T>>;\n showUndo?: boolean;\n showClear?: boolean;\n};\n\n/**\n * Keeps the field tree mounted across `useForm` root re-renders.\n * Callbacks and extra buttons are read from `livePropsRef` so parent identity\n * changes do not rebuild JsonEditor, date pickers, or file upload.\n */\nfunction FormTreeInner<T extends FormTypeMap>({\n methods,\n config,\n livePropsRef,\n showUndo = true,\n showClear = true,\n}: FormTreeProps<T>) {\n const extraButtons = livePropsRef.current.extraButtons;\n const extraButtonsElement =\n typeof extraButtons === 'function' ? extraButtons(methods) : extraButtons;\n\n const onSubmit = React.useCallback((data: FieldValues) => {\n livePropsRef.current.onSubmit(data);\n }, [livePropsRef]);\n\n return (\n <FormContextProvider config={config} useFormMethods={methods}>\n <FormRenderer\n methods={methods}\n config={config}\n onSubmit={onSubmit}\n extraButtons={extraButtonsElement}\n showUndo={showUndo}\n showClear={showClear}\n >\n {livePropsRef.current.children}\n </FormRenderer>\n </FormContextProvider>\n );\n}\n\nfunction formTreePropsAreEqual(prev: FormTreeProps, next: FormTreeProps) {\n return (\n prev.methods === next.methods &&\n prev.config === next.config &&\n prev.livePropsRef === next.livePropsRef &&\n (prev.showUndo ?? true) === (next.showUndo ?? true) &&\n (prev.showClear ?? true) === (next.showClear ?? true)\n )\n}\n\nconst FormTreeMemo = React.memo(FormTreeInner, formTreePropsAreEqual) as typeof FormTreeInner\n\nexport const FormTree = FormTreeMemo;\n","import React from 'react';\nimport type { FieldValues } from 'react-hook-form';\nimport { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';\nimport { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';\nimport { useConfiguredForm, type ConfiguredFormReturn } from './useHooks';\nimport { FormTree, type FormLiveProps } from './FormTree';\nimport type { FormTypeMap, StrictFormConfig } from './_utils';\n\nexport type UseFormProps<T extends FormTypeMap> = {\n config: StrictFormConfig<T>;\n onSubmit: (data: FieldValues) => void;\n /** When true the undo button is shown (default: true) */\n showUndo?: boolean;\n /** When true the clear button is shown (default: true) */\n showClear?: boolean;\n /**\n * Can be a React node or a function that receives the `methods` and returns nodes.\n * Example: extraButtons={(methods) => <MyButtons methods={methods} />}\n */\n extraButtons?: React.ReactNode | ((methods: ConfiguredFormReturn<T>['methods']) => React.ReactNode);\n};\n\nexport function UseForm<T extends FormTypeMap>({\n config,\n onSubmit,\n showUndo = true,\n showClear = true,\n extraButtons,\n}: UseFormProps<T>) {\n const { methods, config: resolvedConfig } = useConfiguredForm({ config });\n const livePropsRef = React.useRef<FormLiveProps<T>>({ onSubmit, extraButtons });\n livePropsRef.current = { onSubmit, extraButtons };\n\n return (\n <LocalizationProvider dateAdapter={AdapterDayjs}>\n <FormTree\n methods={methods}\n config={resolvedConfig}\n livePropsRef={livePropsRef}\n showUndo={showUndo}\n showClear={showClear}\n />\n </LocalizationProvider>\n );\n}\n","export { useConfiguredForm, useForm2 } from './useHooks';\nexport type {\n ConfiguredFormReturn,\n UseConfiguredFormProps,\n UseForm2Return,\n UseForm2Props,\n} from './useHooks';\n\nexport { FormRenderer } from './FormRenderer';\nexport type { FormRendererProps } from './FormRenderer';\n\nexport { FormModalRenderer } from './FormModalRenderer';\nexport type { FormModalRendererProps } from './FormModalRenderer';\n\nexport { UseForm } from './UseForm';\nexport type { UseFormProps } from './UseForm';\n\nexport { FIELD_TYPEs } from './_utils/constants';\nexport type {\n FormFieldType,\n Explanation,\n Explaination,\n TextFieldConfig,\n SelectFieldConfig,\n SliderFieldConfig,\n CheckFieldConfig,\n DateFieldConfig,\n DateTimeFieldConfig,\n ToggleButtonFieldConfig,\n AutocompleteFieldConfig,\n SwitchFieldConfig,\n NumberFieldConfig,\n TelFieldConfig,\n JsonFieldConfig,\n CustomFieldConfig,\n TextArrayFieldConfig,\n FileUploadFieldConfig,\n AvatarFieldConfig,\n FieldConfig,\n RowConfig,\n StepConfig,\n FormConfig,\n FormTypeMap,\n GetDataType,\n InferFormDataType,\n StrictFieldConfig,\n StrictRowConfig,\n StrictFormConfig,\n} from './_utils/types';\nexport type {\n TextSlotProps,\n NumberSlotProps,\n UseOptionsHook,\n SelectOption,\n SelectSlotProps,\n SliderSlotProps,\n DateTimeSlotProps,\n DateSlotProps,\n FileUploadSlotProps,\n AvatarSlotProps,\n CheckOption,\n CheckSlotProps,\n ToggleButtonOption,\n ToggleButtonSlotProps,\n AutocompleteSlotProps,\n CustomSlotProps,\n TextArraySlotProps,\n SwitchSlotProps,\n TelSlotProps,\n JsonSlotProps,\n} from './_utils/slotProps';\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 { 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 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 { 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","import * as React from 'react';\nimport {UseSearchOptions, UseSearchReturn} from './_types';\nimport {useSearch} from './useSearch';\n\ntype SearchContextType = UseSearchReturn;\n\nconst SearchContext = React.createContext<SearchContextType | null>(null);\n\n// props accepted by <SearchProvider>. `options` corresponds to the\n// same configuration object passed to the standalone `useSearch` hook.\nexport interface SearchProviderProps {\n options?: UseSearchOptions;\n children: React.ReactNode;\n}\n\nexport const SearchProvider: React.FC<SearchProviderProps> = ({options, children}) => {\n const search = useSearch(options);\n return <SearchContext.Provider value={search}>{children}</SearchContext.Provider>;\n};\n\nexport function useSearchContext(): SearchContextType {\n const ctx = React.useContext(SearchContext);\n if (!ctx) {\n throw new Error('useSearchContext must be used within a SearchProvider');\n }\n return ctx;\n}\n","import * as React from 'react';\nimport {UseSearchOptions, UseSearchReturn} from './_types';\n\nexport function useSearch(options: UseSearchOptions = {}): UseSearchReturn {\n const {\n defaultQuery = '',\n query: controlledQuery,\n onQueryChange,\n debounceMs = 300,\n defaultScope,\n scope: controlledScope,\n onScopeChange,\n } = options;\n\n const isQueryControlled = controlledQuery !== undefined;\n const isScopeControlled = controlledScope !== undefined;\n\n const [innerQuery, setInnerQuery] = React.useState(defaultQuery);\n const [debouncedQuery, setDebouncedQuery] = React.useState(controlledQuery ?? defaultQuery);\n const [innerScope, setInnerScope] = React.useState<string | undefined>(defaultScope);\n\n const query = isQueryControlled ? controlledQuery : innerQuery;\n\n // Stable refs for callbacks - prevents unnecessary re-references if inline functions are passed.\n const onQueryChangeRef = React.useRef(onQueryChange);\n React.useLayoutEffect(() => { onQueryChangeRef.current = onQueryChange; }, [onQueryChange]);\n \n const onScopeChangeRef = React.useRef(onScopeChange);\n React.useLayoutEffect(() => { onScopeChangeRef.current = onScopeChange; }, [onScopeChange]);\n\n const setQuery = React.useCallback(\n (q: string) => {\n if (!isQueryControlled) {\n setInnerQuery(q);\n }\n onQueryChangeRef.current?.(q);\n },\n [isQueryControlled],\n );\n\n const scope = isScopeControlled ? controlledScope : innerScope;\n\n const setScope = React.useCallback(\n (nextScope: string | undefined) => {\n if (!isScopeControlled) {\n setInnerScope(nextScope);\n }\n onScopeChangeRef.current?.(nextScope);\n },\n [isScopeControlled],\n );\n\n const clear = React.useCallback(() => {\n if (!isQueryControlled) {\n setInnerQuery(defaultQuery);\n }\n onQueryChangeRef.current?.(defaultQuery);\n\n if (!isScopeControlled) {\n setInnerScope(defaultScope);\n }\n onScopeChangeRef.current?.(defaultScope);\n }, [defaultQuery, defaultScope, isQueryControlled, isScopeControlled]);\n\n React.useEffect(() => {\n const timer = window.setTimeout(() => {\n setDebouncedQuery(query);\n }, debounceMs);\n\n // Cleanup guarantees pending timers are cancelled on unmount.\n return () => window.clearTimeout(timer);\n }, [query, debounceMs]);\n\n return {query, debouncedQuery, setQuery, scope, setScope, clear};\n}\n","import * as React from 'react';\nimport { InputAdornment } from '@/ele/Form';\nimport { TextField } from '@/ele/Input';\nimport { IconButton } from '@/ele/Button';\nimport { CircularProgress } from '@/ele/Progress';\nimport { ClearIcon, SearchIcon } from '@/icons/MuiIcon';\nimport type {SearchBarProps} from './_types';\nimport {useSearchContext} from './context';\nimport { mergeSx } from '@/_utils/_func';\n\nexport const SearchBar: React.FC<SearchBarProps> = ({\n placeholder,\n adornment,\n onSubmit,\n showSubmitButton = true,\n submitOnEnter = true,\n loading = false,\n sx,\n}) => {\n const {query, scope, setQuery} = useSearchContext();\n\n // Stable ref — callers can pass inline functions without stale-closure bugs.\n const onSubmitRef = React.useRef(onSubmit);\n React.useLayoutEffect(() => { onSubmitRef.current = onSubmit; }, [onSubmit]);\n\n const handleClear = React.useCallback(() => {\n setQuery('');\n }, [setQuery]);\n\n const handleSubmit = React.useCallback(() => {\n const normalized = query.trim();\n if (!normalized) {\n return;\n }\n onSubmitRef.current?.(normalized, scope);\n }, [query, scope]);\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLInputElement>) => {\n if (!submitOnEnter) {\n return;\n }\n if (event.key === 'Enter') {\n event.preventDefault();\n handleSubmit();\n }\n },\n [handleSubmit, submitOnEnter],\n );\n\n return (\n <TextField\n value={query}\n onChange={e => setQuery(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n sx={mergeSx(\n {\n \"& .MuiInputAdornment-root\": {\n gap: 0.5,\n },\n },\n sx,\n )}\n slotProps={{\n input: {\n startAdornment: adornment ? (\n <InputAdornment position=\"start\">{adornment}</InputAdornment>\n ) : undefined,\n endAdornment: (\n <InputAdornment position=\"end\">\n {query ? (\n <IconButton size=\"small\" onClick={handleClear} aria-label=\"Clear search input\">\n <ClearIcon fontSize=\"small\" />\n </IconButton>\n ) : null}\n {showSubmitButton ? (\n loading ? (\n <CircularProgress size={18} thickness={5} />\n ) : (\n <IconButton size=\"small\" onClick={handleSubmit} aria-label=\"Submit search\">\n <SearchIcon fontSize=\"small\" />\n </IconButton>\n )\n ) : null}\n </InputAdornment>\n ),\n },\n }}\n />\n );\n};\n","import * as React from 'react';\nimport {Button} from '@/ele/Button';\nimport {MenuPopper, useMenu} from '@/ele/Menu';\nimport {ArrowDropDownRoundedIcon} from '@/icons/MuiIcon';\nimport type {SearchScopeProps} from './_types';\nimport {useSearchContext} from './context';\n\nexport const SearchScope: React.FC<SearchScopeProps> = ({\n options,\n sx,\n placeholderLabel = 'All',\n}) => {\n const {scope, setScope} = useSearchContext();\n\n const openMenuProps = useMenu({\n onItemClickClientArg: ({closeHandler}) => {\n closeHandler?.();\n },\n initSelected: scope ? [scope] : [],\n });\n\n const menuOptions = React.useMemo(() => (options || []).map(option => ({\n id: option.value,\n label: option.label,\n onClick: () => {\n setScope(option.value);\n },\n })), [options, setScope]);\n\n if (!options || options.length === 0) {\n return null;\n }\n\n const activeLabel = options.find(option => option.value === scope)?.label ?? placeholderLabel;\n\n return (\n <>\n <Button\n size='small'\n variant='outlined'\n onClick={openMenuProps.onTriggerClickHandler}\n endIcon={<ArrowDropDownRoundedIcon />}\n sx={sx}\n >\n {activeLabel}\n </Button>\n\n <MenuPopper\n options={menuOptions}\n openMenuProps={{\n ...openMenuProps,\n initSelected: scope ? [scope] : [],\n sorted: false,\n }}\n placement='bottom-start'\n menuItemProps={{\n fontSize: '0.875rem',\n padding: '6px 12px',\n }}\n />\n </>\n );\n};\n","import * as React from 'react';\nimport { Box } from '@/ele/Box';\nimport { CircularProgress } from '@/ele/Progress';\nimport { Paper } from '@/ele/Paper';\nimport { Typography } from '@/ele/Typography';\nimport {Menu} from '@/ele/Menu';\nimport type {SuggestionItem, SuggestionListProps} from './_types';\nimport {useSearchContext} from './context';\nimport { useSearchRootSx } from './theme';\nimport { mergeSx } from '@/_utils/_func';\n\nconst DEFAULT_MAX_ITEMS = 8;\n\nexport function SuggestionList<T extends SuggestionItem>({\n items,\n onSelect,\n renderItem,\n getItemLabel,\n maxItems = DEFAULT_MAX_ITEMS,\n showWhenEmptyQuery = false,\n loading = false,\n loadingText = 'Fetching suggestions...',\n emptyText = 'No suggestions',\n filterMode = 'client',\n footer,\n sx,\n}: SuggestionListProps<T>) {\n const {query, setQuery} = useSearchContext();\n\n const resolvedGetLabel = React.useCallback(\n (item: T) => (getItemLabel ? getItemLabel(item) : item.label),\n [getItemLabel],\n );\n\n const normalizedQuery = query.trim().toLowerCase();\n\n const filteredItems = React.useMemo(() => {\n if (!showWhenEmptyQuery && !normalizedQuery) {\n return [] as T[];\n }\n\n if (filterMode === 'none') {\n return items.slice(0, maxItems);\n }\n\n return items\n .filter(item => {\n if (!normalizedQuery) {\n return true;\n }\n return resolvedGetLabel(item).toLowerCase().includes(normalizedQuery);\n })\n .slice(0, maxItems);\n }, [filterMode, items, maxItems, normalizedQuery, resolvedGetLabel, showWhenEmptyQuery]);\n\n const handleSelect = React.useCallback(\n (item: T) => {\n setQuery(resolvedGetLabel(item));\n onSelect?.(item);\n },\n [onSelect, resolvedGetLabel, setQuery],\n );\n\n const menuOptions = React.useMemo(\n () =>\n filteredItems.map(item => ({\n id: String(item.id),\n label: renderItem ? renderItem(item) : resolvedGetLabel(item),\n onClick: () => handleSelect(item),\n })),\n [filteredItems, handleSelect, renderItem, resolvedGetLabel],\n );\n\n if (loading && (normalizedQuery || showWhenEmptyQuery)) {\n return (\n <Paper elevation={3} sx={sx}>\n <Box sx={{display: 'flex', alignItems: 'center', gap: 1, px: 1.5, py: 1.25}}>\n <CircularProgress size={16} thickness={5} />\n <Typography variant='body2'>{loadingText}</Typography>\n </Box>\n </Paper>\n );\n }\n\n if (filteredItems.length === 0) {\n if (!normalizedQuery && !showWhenEmptyQuery) {\n return null;\n }\n\n return (\n <Paper elevation={3} sx={sx}>\n <Box sx={mergeSx({ px: 1.5, py: 1.25 }, useSearchRootSx)}>\n <Typography variant='body2' sx={{ color: 'var(--usesearch-empty-text-color)' }}>\n {emptyText}\n </Typography>\n </Box>\n </Paper>\n );\n }\n\n return (\n <Paper elevation={3} sx={sx}>\n <Menu\n options={menuOptions}\n initSelected={[]}\n sorted={false}\n menuItemProps={{\n fontSize: '0.875rem',\n padding: '6px 12px',\n }}\n />\n {footer ? (\n <Box sx={{px: 1, pb: 1}}>\n {footer}\n </Box>\n ) : null}\n </Paper>\n );\n}\n","import type { SxProps, Theme } from '@mui/material/styles';\n\n/**\n * Root-level CSS variable aliases for UseSearch compound component.\n * Spread on container elements — children consume via `var(--*)`.\n */\nexport const useSearchRootSx: SxProps<Theme> = {\n '--usesearch-empty-text-color': 'var(--mui-palette-text-secondary)',\n};\n","import * as React from 'react';\nimport {Button} from '@/ele/Button';\nimport {ScopeSuggestionsProps, SuggestionItem} from './_types';\nimport {SuggestionList} from './SuggestionList';\nimport {useSearchContext} from './context';\n\nexport function ScopeSuggestions<T extends SuggestionItem>({\n getSuggestions,\n onLoadMore,\n hasMore,\n loadMoreLabel = 'Load more',\n onLoadingChange,\n onError,\n onSelect,\n renderItem,\n getItemLabel,\n maxItems,\n showWhenEmptyQuery,\n loadingText,\n emptyText,\n filterMode,\n sx,\n}: ScopeSuggestionsProps<T>) {\n const {scope, debouncedQuery} = useSearchContext();\n const requestIdRef = React.useRef(0);\n const [items, setItems] = React.useState<T[]>([]);\n const [loading, setLoading] = React.useState(false);\n const [loadingMore, setLoadingMore] = React.useState(false);\n\n // Stable refs for callbacks — prevents infinite loops when callers pass inline functions.\n const getSuggestionsRef = React.useRef(getSuggestions);\n React.useLayoutEffect(() => { getSuggestionsRef.current = getSuggestions; }, [getSuggestions]);\n const onLoadingChangeRef = React.useRef(onLoadingChange);\n React.useLayoutEffect(() => { onLoadingChangeRef.current = onLoadingChange; }, [onLoadingChange]);\n const onErrorRef = React.useRef(onError);\n React.useLayoutEffect(() => { onErrorRef.current = onError; }, [onError]);\n\n const resolvedHasMore = React.useMemo(() => {\n if (typeof hasMore === 'function') {\n return hasMore(items, scope, debouncedQuery.trim());\n }\n return Boolean(hasMore);\n }, [debouncedQuery, hasMore, items, scope]);\n\n React.useEffect(() => {\n const query = debouncedQuery.trim();\n\n if (!query && !showWhenEmptyQuery) {\n setItems([]);\n setLoading(false);\n setLoadingMore(false);\n onLoadingChangeRef.current?.(false);\n return;\n }\n\n requestIdRef.current += 1;\n const currentRequestId = requestIdRef.current;\n let isActive = true;\n\n setLoading(true);\n onLoadingChangeRef.current?.(true);\n\n Promise.resolve(getSuggestionsRef.current(scope, query))\n .then(next => {\n if (!isActive || currentRequestId !== requestIdRef.current) {\n return;\n }\n setItems(next);\n })\n .catch(error => {\n if (!isActive || currentRequestId !== requestIdRef.current) {\n return;\n }\n setItems([]);\n onErrorRef.current?.(error);\n })\n .finally(() => {\n if (!isActive || currentRequestId !== requestIdRef.current) {\n return;\n }\n setLoading(false);\n setLoadingMore(false);\n onLoadingChangeRef.current?.(false);\n });\n\n return () => {\n isActive = false;\n // Notify parent that loading stopped when the effect is re-run or component unmounts.\n onLoadingChangeRef.current?.(false);\n };\n }, [debouncedQuery, scope, showWhenEmptyQuery]);\n\n const handleLoadMore = React.useCallback(() => {\n if (!onLoadMore || loading || loadingMore) {\n return;\n }\n\n const query = debouncedQuery.trim();\n if (!query && !showWhenEmptyQuery) {\n return;\n }\n\n setLoadingMore(true);\n Promise.resolve(onLoadMore(scope, query, items))\n .then(next => {\n setItems(next);\n })\n .catch(error => {\n onErrorRef.current?.(error);\n })\n .finally(() => {\n setLoadingMore(false);\n });\n }, [debouncedQuery, items, loading, loadingMore, onLoadMore, scope, showWhenEmptyQuery]);\n\n const footer = onLoadMore && resolvedHasMore ? (\n <Button\n size='small'\n variant='text'\n fullWidth\n disabled={loadingMore || loading}\n onClick={handleLoadMore}\n >\n {loadingMore ? 'Loading more...' : loadMoreLabel}\n </Button>\n ) : null;\n\n return (\n <SuggestionList\n items={items}\n loading={loading}\n footer={footer}\n onSelect={onSelect}\n renderItem={renderItem}\n getItemLabel={getItemLabel}\n maxItems={maxItems}\n showWhenEmptyQuery={showWhenEmptyQuery}\n loadingText={loadingText}\n emptyText={emptyText}\n filterMode={filterMode}\n sx={sx}\n />\n );\n}\n","import * as React from 'react';\nimport { Box } from '@/ele/Box';\nimport type {SuggestionItem, UseSearchLayoutProps} from './_types';\nimport {SearchBar} from './SearchBar';\nimport {SearchScope} from './SearchScope';\nimport {ScopeSuggestions} from './ScopeSuggestions';\nimport {SearchResults} from './SearchResults';\n\nconst DEFAULT_CONTAINER_SX = {width: 560, maxWidth: '90vw', position: 'relative'};\nconst DEFAULT_ROW_SX = {display: 'flex', gap: 1};\nconst DEFAULT_SCOPE_SX = {minWidth: 130};\nconst DEFAULT_SEARCH_BAR_SX = {flex: 1};\nconst DEFAULT_SUGGESTIONS_SX = {\n position: 'absolute',\n top: 56,\n left: 0,\n right: 0,\n zIndex: 2,\n};\n\nexport function UseSearchLayout<T extends SuggestionItem>({\n scopeOptions,\n scopePlaceholderLabel = 'Engine',\n searchPlaceholder = 'Search',\n getSuggestions,\n onLoadMoreSuggestions,\n hasMoreSuggestions,\n loadMoreSuggestionsLabel,\n onSuggestionSelect,\n renderSuggestionItem,\n getSuggestionLabel,\n suggestionFilterMode,\n suggestionsLoadingText,\n suggestionsEmptyText,\n onSuggestionsError,\n onSearchSubmit,\n children,\n containerSx,\n rowSx,\n scopeSx,\n searchBarSx,\n suggestionsSx,\n}: UseSearchLayoutProps<T>) {\n const [suggestionsLoading, setSuggestionsLoading] = React.useState(false);\n\n return (\n <Box sx={containerSx ?? DEFAULT_CONTAINER_SX}>\n <Box sx={rowSx ?? DEFAULT_ROW_SX}>\n <SearchScope\n options={scopeOptions}\n sx={scopeSx ?? DEFAULT_SCOPE_SX}\n placeholderLabel={scopePlaceholderLabel}\n />\n <SearchBar\n placeholder={searchPlaceholder}\n sx={searchBarSx ?? DEFAULT_SEARCH_BAR_SX}\n loading={suggestionsLoading}\n onSubmit={onSearchSubmit}\n />\n </Box>\n\n {getSuggestions && (\n <ScopeSuggestions\n getSuggestions={getSuggestions}\n onLoadMore={onLoadMoreSuggestions}\n hasMore={hasMoreSuggestions}\n loadMoreLabel={loadMoreSuggestionsLabel}\n onLoadingChange={setSuggestionsLoading}\n onSelect={onSuggestionSelect}\n renderItem={renderSuggestionItem}\n getItemLabel={getSuggestionLabel}\n filterMode={suggestionFilterMode}\n loadingText={suggestionsLoadingText}\n emptyText={suggestionsEmptyText}\n onError={onSuggestionsError}\n sx={suggestionsSx ?? DEFAULT_SUGGESTIONS_SX}\n />\n )}\n\n <SearchResults>\n {children}\n </SearchResults>\n </Box>\n );\n}\n","import * as React from 'react';\nimport type {SearchResultsProps} from './_types';\nimport {useSearchContext} from './context';\n\nexport const SearchResults: React.FC<SearchResultsProps> = ({children}) => {\n const {debouncedQuery, scope} = useSearchContext();\n return <>{children(debouncedQuery, scope)}</>;\n};\n","\n export default function styleInject(css, { insertAt } = {}) {\n if (!css || typeof document === 'undefined') return\n \n const head = document.head || document.getElementsByTagName('head')[0]\n const style = document.createElement('style')\n style.type = 'text/css'\n \n if (insertAt === 'top') {\n if (head.firstChild) {\n head.insertBefore(style, head.firstChild)\n } else {\n head.appendChild(style)\n }\n } else {\n head.appendChild(style)\n }\n \n if (style.styleSheet) {\n style.styleSheet.cssText = css\n } else {\n style.appendChild(document.createTextNode(css))\n }\n }\n ","import styleInject from '#style-inject';styleInject(\":root[color-scheme=light] {\\n --scroll-thumb-visible: color-mix(in srgb, var(--mui-palette-secondary-main), transparent 62%);\\n --scroll-thumb-hover-visible: color-mix(in srgb, var(--mui-palette-secondary-dark), transparent 48%);\\n --scroll-bg-color: transparent;\\n --scroll-thumb-color: transparent;\\n --scroll-thumb-hover-color: transparent;\\n --scroll-track-color: transparent;\\n}\\n:root[color-scheme=dark] {\\n --scroll-thumb-visible: color-mix(in srgb, var(--mui-palette-grey-500), transparent 44%);\\n --scroll-thumb-hover-visible: color-mix(in lab, var(--mui-palette-secondary-dark) 16%, transparent 36%);\\n --scroll-bg-color: transparent;\\n --scroll-thumb-color: transparent;\\n --scroll-thumb-hover-color: transparent;\\n --scroll-track-color: transparent;\\n}\\n*:hover {\\n --scroll-bg-color: transparent;\\n --scroll-thumb-color: var(--scroll-thumb-visible);\\n --scroll-thumb-hover-color: var(--scroll-thumb-hover-visible);\\n --scroll-track-color: transparent;\\n}\\n*:hover * {\\n --scroll-bg-color: transparent;\\n --scroll-thumb-color: transparent;\\n --scroll-thumb-hover-color: transparent;\\n --scroll-track-color: transparent;\\n}\\n*:hover *:hover {\\n --scroll-bg-color: transparent;\\n --scroll-thumb-color: var(--scroll-thumb-visible);\\n --scroll-thumb-hover-color: var(--scroll-thumb-hover-visible);\\n --scroll-track-color: transparent;\\n}\\n[data-chat-surface]:focus-within [data-scroll-surface] {\\n --scroll-bg-color: transparent;\\n --scroll-thumb-color: var(--scroll-thumb-visible);\\n --scroll-thumb-hover-color: var(--scroll-thumb-hover-visible);\\n --scroll-track-color: transparent;\\n}\\n::-webkit-scrollbar-corner {\\n background: var(--mui-palette-background-default);\\n}\\n::-webkit-scrollbar {\\n width: 8px;\\n height: 8px;\\n}\\n::-webkit-scrollbar-track {\\n background: transparent;\\n}\\n::-webkit-scrollbar-track:horizontal {\\n background: transparent;\\n}\\n::-webkit-scrollbar-thumb {\\n background:\\n linear-gradient(\\n to right,\\n transparent 0%,\\n transparent 25%,\\n var(--scroll-thumb-color) 25%,\\n var(--scroll-thumb-color) 75%,\\n transparent 75%,\\n transparent 100%);\\n border: none;\\n border-radius: 10px;\\n}\\n::-webkit-scrollbar-thumb:horizontal {\\n background:\\n linear-gradient(\\n to bottom,\\n transparent 0%,\\n transparent 25%,\\n var(--scroll-thumb-color) 25%,\\n var(--scroll-thumb-color) 75%,\\n transparent 75%,\\n transparent 100%);\\n}\\n::-webkit-scrollbar-thumb:hover {\\n background:\\n linear-gradient(\\n to right,\\n transparent 0%,\\n transparent 25%,\\n var(--scroll-thumb-hover-color) 25%,\\n var(--scroll-thumb-hover-color) 75%,\\n transparent 75%,\\n transparent 100%);\\n}\\n::-webkit-scrollbar-thumb:horizontal:hover {\\n background:\\n linear-gradient(\\n to bottom,\\n transparent 0%,\\n transparent 25%,\\n var(--scroll-thumb-hover-color) 25%,\\n var(--scroll-thumb-hover-color) 75%,\\n transparent 75%,\\n transparent 100%);\\n}\\n.disable-scrollbars::-webkit-scrollbar,\\n.disable-scrollbars::-webkit-scrollbar-track,\\n.disable-scrollbars::-webkit-scrollbar-thumb {\\n background: transparent;\\n}\\n\")","import React from 'react';\nimport createCache from '@emotion/cache';\nimport { CacheProvider } from '@emotion/react';\nimport { ThemeProvider as MuiThemeProvider, type Theme, type ThemeOptions } from '@mui/material/styles';\nimport { CssBaseline, GlobalStyles } from '@mui/material';\nimport { AlertProvider } from '@/compound/Alert';\n\nimport { createAppTheme } from './muiTheme';\n\nconst appEmotionCache = createCache({\n key: 'sdui',\n speedy: true,\n});\n\nconst globalStyles = {\n // Font styles\n 'html, body': {\n fontFamily: \"'Roboto', 'Helvetica Neue', Arial, sans-serif\",\n WebkitFontSmoothing: 'antialiased',\n MozOsxFontSmoothing: 'grayscale',\n color: 'var(--mui-palette-text-primary)',\n },\n 'h1,h2,h3,h4,h5,h6,h7, .h1, .h2,.h3,.h4,.h5,.h6': {\n wordBreak: 'break-word',\n lineHeight: 1.35,\n },\n label: {\n color: 'var(--mui-palette-text-primary)',\n },\n p: {\n fontSize: '15px',\n color: 'var(--mui-palette-text-primary)',\n cursor: 'text',\n },\n // Nested content inside clickable hosts inherits the host cursor\n // (covers ListItemButton, Button, IconButton, AccordionSummary, etc.).\n 'button *, a *, [role=\"button\"] *, .MuiButtonBase-root *': {\n cursor: 'inherit',\n },\n a: {\n color: 'var(--mui-palette-text-href)', // Assuming this var exists from theme\n cursor: 'pointer',\n },\n '*::selection': {\n backgroundColor: 'var(--mui-palette-focus-1)',\n color: 'var(--mui-palette-text-primary)',\n textShadow: 'none',\n },\n '*::-moz-selection': {\n backgroundColor: 'var(--mui-palette-focus-1)',\n color: 'var(--mui-palette-text-primary)',\n textShadow: 'none',\n },\n\n // Layout styles\n html: {\n height: '100%',\n width: '100%',\n margin: 0,\n padding: 0,\n boxSizing: 'border-box',\n },\n 'html > body': {\n height: '100%',\n width: '100%',\n backgroundColor: 'transparent',\n },\n};\n\nexport type AppThemeProviderProps = {\n children: React.ReactNode;\n theme?: Theme;\n muiThemeOptions?: ThemeOptions;\n defaultMode?: 'light' | 'dark' | 'system';\n /** Pass `null` to skip localStorage (Playground3 stage iframes). */\n storageManager?: null;\n};\n\n/**\n * CssVarsProvider re-renders on `setMode` so it can flip the color-scheme\n * attribute. Memoize the app tree so that swap stays a CSS-variable change\n * instead of rebuilding tables, editors, and other heavy compounds.\n */\nconst ThemeTree = React.memo(function ThemeTree({ children }: { children: React.ReactNode }) {\n return (\n <AlertProvider>\n <CssBaseline />\n <GlobalStyles styles={globalStyles} />\n {children}\n </AlertProvider>\n );\n});\n\nexport default function ThemeProvider({\n children,\n theme: customTheme,\n muiThemeOptions,\n defaultMode,\n storageManager,\n}: AppThemeProviderProps) {\n const resolvedTheme = React.useMemo(() => {\n if (customTheme) {\n return customTheme;\n }\n\n return createAppTheme(muiThemeOptions);\n }, [customTheme, muiThemeOptions]);\n\n return (\n <CacheProvider value={appEmotionCache}>\n {/* Skip 250ms color lerp while color-scheme flips. Button/IconButton\n also drop color transitions for other token changes. */}\n <MuiThemeProvider\n theme={resolvedTheme}\n defaultMode={defaultMode}\n storageManager={storageManager}\n disableTransitionOnChange\n >\n <ThemeTree>{children}</ThemeTree>\n </MuiThemeProvider>\n </CacheProvider>\n );\n}\n","import { createTheme, type ThemeOptions } from '@mui/material/styles';\n\nimport { alertTheme } from '@/compound/Alert';\nimport { appBarTheme } from '../components/elemental/AppBar/src/theme';\nimport { avatarTheme } from '@/ele/Avatar';\nimport { badgeTheme } from '@/ele/Badge';\nimport { \n buttonTheme, \n buttonBaseTheme,\n iconButtonTheme,\n} from '@/ele/Button';\nimport { cardTheme, cardContentTheme } from '@/ele/Card';\nimport { checkboxTheme } from '@/ele/Checkbox';\nimport { chipTheme } from '@/ele/Chip';\nimport { collapseTheme } from '@/ele/Collapse';\nimport { \n dateCalendarTheme, pickersCalendarHeaderTheme,\n multiSectionDigitalClockTheme, pickersDayTheme,\n datePickerTheme, dateTimePickerTheme,\n pickersInputBaseTheme,\n} from '@/ele/DatePicker';\nimport { dividerTheme } from '@/ele/Divider';\nimport { formLabelTheme, formControlLabelTheme, formHelperTextTheme } from '@/ele/Form';\nimport { textFieldTheme, inputBaseTheme } from '@/ele/Input';\nimport {\n listItemTheme,\n listItemIconTheme,\n listItemTextTheme,\n listItemButtonTheme,\n listItemSubheaderTheme,\n} from '@/ele/List';\nimport { menuItemTheme, menuTheme } from '../components/elemental/Menu/src/Menu/theme';\nimport { paperTheme } from '@/ele/Paper';\nimport { linearProgressTheme, circularProgressTheme } from '@/ele/Progress';\nimport { selectTheme } from '@/ele/Select';\nimport { sliderTheme } from '@/ele/Slider';\nimport { switchTheme } from '@/ele/Switch';\nimport { tabTheme, tabsTheme } from '@/ele/Tab';\nimport { toggleButtonGroupTheme, toggleButtonTheme } from '@/ele/ToggleButtonGroup'\nimport { tooltipTheme } from '@/ele/Tooltip';\nimport { typographyTheme } from '@/ele/Typography';\nimport { stepperTheme, stepTheme, stepLabelTheme, stepConnectorTheme, stepIconTheme, stepButtonTheme } from '@/ele/Stepper';\nimport {\n tableTheme,\n tableContainerTheme,\n tableHeadTheme,\n tableCellTheme,\n tablePaginationTheme,\n tableSortLabelTheme,\n} from '@/compound/Table';\n\nimport { muiPalette as darkBlueMuiPalette } from './colors/darkBlue';\nimport { muiPalette as lightBrownMuiPalette } from './colors/lightBrown';\n\n// import './styles/font.css';\n// import './styles/layout.css';\n\nconst baseThemeOptions: ThemeOptions = {\n cssVariables: {\n colorSchemeSelector: '[color-scheme=\"%s\"]',\n },\n colorSchemes: {\n light: lightBrownMuiPalette,\n dark: darkBlueMuiPalette,\n },\n breakpoints: {\n values: {\n xs: 0,\n sm: 600,\n md: 600,\n lg: 1200,\n xl: 1536,\n },\n },\n shape: {\n borderRadius: 8,\n },\n // Customize your theme here if needed\n components: {\n // Let hosts own the page canvas — CssBaseline would otherwise paint\n // body with palette.background.default on every ThemeProvider mount.\n MuiCssBaseline: {\n styleOverrides: {\n body: {\n backgroundColor: 'transparent',\n '@media print': {\n backgroundColor: 'transparent',\n },\n },\n },\n },\n // alert\n MuiAlert: alertTheme,\n // app bar\n MuiAppBar: appBarTheme,\n // avatar\n MuiAvatar: avatarTheme,\n // badge\n MuiBadge: badgeTheme,\n // buttons\n MuiButton: buttonTheme,\n MuiButtonBase: buttonBaseTheme,\n MuiToggleButtonGroup: toggleButtonGroupTheme,\n MuiToggleButton: toggleButtonTheme,\n // card\n MuiCard: cardTheme,\n MuiCardContent: cardContentTheme,\n // checkbox\n MuiCheckbox: checkboxTheme,\n // chips\n MuiChip: chipTheme,\n // collapse\n MuiCollapse: collapseTheme,\n // date picker\n MuiDateCalendar: dateCalendarTheme,\n MuiPickersCalendarHeader: pickersCalendarHeaderTheme,\n MuiMultiSectionDigitalClock: multiSectionDigitalClockTheme,\n MuiPickersDay: pickersDayTheme,\n MuiDatePicker: datePickerTheme,\n MuiDateTimePicker: dateTimePickerTheme,\n MuiPickersInputBase: pickersInputBaseTheme,\n // divider\n MuiDivider: dividerTheme,\n // form\n MuiFormLabel: formLabelTheme,\n MuiFormControlLabel: formControlLabelTheme,\n MuiFormHelperText: formHelperTextTheme,\n // IconButton\n MuiIconButton: iconButtonTheme,\n // input\n MuiTextField: textFieldTheme,\n MuiInputBase: inputBaseTheme,\n // list\n MuiListItem: listItemTheme,\n MuiListItemIcon: listItemIconTheme,\n MuiListItemText: listItemTextTheme,\n MuiListItemButton: listItemButtonTheme,\n MuiListSubheader: listItemSubheaderTheme,\n // menu\n MuiMenuItem: menuItemTheme,\n MuiMenu: menuTheme,\n // paper\n MuiPaper: paperTheme,\n // progress\n MuiLinearProgress: linearProgressTheme,\n MuiCircularProgress: circularProgressTheme,\n // select\n MuiSelect: selectTheme,\n // slider\n MuiSlider: sliderTheme,\n // switch\n MuiSwitch: switchTheme,\n // tab\n MuiTab: tabTheme,\n MuiTabs: tabsTheme,\n // tooltip\n MuiTooltip: tooltipTheme,\n // typography\n MuiTypography: typographyTheme,\n // stepper components\n MuiStepper: stepperTheme,\n MuiStep: stepTheme,\n MuiStepLabel: stepLabelTheme,\n MuiStepConnector: stepConnectorTheme,\n MuiStepIcon: stepIconTheme,\n MuiStepButton: stepButtonTheme,\n // table\n MuiTable: tableTheme,\n MuiTableContainer: tableContainerTheme,\n MuiTableHead: tableHeadTheme,\n MuiTableCell: tableCellTheme,\n MuiTablePagination: tablePaginationTheme,\n MuiTableSortLabel: tableSortLabelTheme,\n },\n};\n\nexport const createAppTheme = (options?: ThemeOptions) => createTheme(baseThemeOptions, options ?? {});\n\nexport const theme = createAppTheme();","\nimport { \n type ColorTheme, \n type ColorSystemOptions \n} from \"./_utils\"\n\nconst themeColor = {\n themeType: \"dark\",\n name: \"darkBlue\",\n\n colorScheme:{\n primary:{\n 1: \"rgba(2, 17, 33, 1)\",\n 2: \"rgba(20, 40, 65, 1)\",\n 3: \"rgba(40, 80, 110, 1)\",\n 4: \"rgba(65, 110, 140, 1)\",\n 5: \"rgba(90, 140, 170, 1)\",\n 6: \"rgba(115, 170, 200, 1)\",\n main: 5,\n },\n secondary:{\n 1: \"rgba(250, 250, 255, 1)\",\n 2: \"rgba(245, 245, 255, 1)\",\n 3: \"rgba(200, 235, 240, 1)\",\n 4: \"rgba(165, 220, 225, 1)\",\n 5: \"rgba(125, 200, 210, 1)\",\n 6: \"rgba(20, 215, 215, 1)\",\n main: 5,\n },\n\n error: {\n text: \"rgba(255, 0, 100, 1)\",\n background: \"rgba(35, 0, 10, 1)\",\n },\n warning: {\n text: \"rgba(230, 190, 125, 1)\",\n background: \"rgba(45, 25, 1, 1)\",\n },\n info: {\n text:\"rgba(100, 180, 255, 1)\",\n background: \"rgba(10, 30, 55, 1)\",\n },\n success: {\n text: \"rgba(100, 255, 150, 1)\",\n background: \"rgba(10, 50, 30, 1)\",\n },\n system: {\n text: \"rgba(45, 212, 191, 1)\",\n background: \"rgba(0, 40, 35, 1)\",\n },\n insight: {\n text: \"rgba(167, 139, 250, 1)\",\n background: \"rgba(30, 15, 55, 1)\",\n },\n\n focus: \"rgba(255, 47, 122, 0.42)\",\n disabled: \"rgba(91, 94, 97, 1)\",\n background: {\n default: \"rgb(29, 29, 29, 1)\",\n disabled: \"rgba(43, 43, 43, 0.3)\",\n },\n text: {\n primary: \"rgba(240, 240, 255, 1)\",\n secondary: \"rgba(180, 200, 220, 1)\",\n subscript: \"rgba(137, 137, 150, 1)\",\n href: \"rgba(255, 0, 153, 1)\",\n },\n },\n \n\n} as const satisfies ColorTheme\n\nexport const muiPalette = {\n palette: {\n mode: \"dark\",\n primary: {\n dark: themeColor.colorScheme.primary[1],\n main: themeColor.colorScheme.primary[themeColor.colorScheme.primary.main],\n light: themeColor.colorScheme.primary[6],\n },\n secondary: {\n dark: themeColor.colorScheme.secondary[6],\n main: themeColor.colorScheme.secondary[themeColor.colorScheme.secondary.main],\n light: themeColor.colorScheme.secondary[1],\n },\n error: {\n main: themeColor.colorScheme.error.text,\n },\n warning: {\n main: themeColor.colorScheme.warning.text,\n },\n info: {\n main: themeColor.colorScheme.info.text,\n },\n success: {\n main: themeColor.colorScheme.success.text,\n },\n system: {\n main: themeColor.colorScheme.system.text,\n light: \"rgba(80, 230, 210, 1)\",\n dark: \"rgba(20, 160, 145, 1)\",\n contrastText: \"rgba(0, 0, 0, 0.87)\",\n },\n insight: {\n main: themeColor.colorScheme.insight.text,\n light: \"rgba(190, 170, 255, 1)\",\n dark: \"rgba(130, 100, 220, 1)\",\n contrastText: \"rgba(0, 0, 0, 0.87)\",\n },\n background: {\n default: themeColor.colorScheme.background.default,\n },\n text: {\n primary: themeColor.colorScheme.text.primary,\n secondary: themeColor.colorScheme.text.secondary,\n disabled: themeColor.colorScheme.disabled,\n },\n action: {\n disabledBackground: themeColor.colorScheme.background.disabled,\n },\n\n \"secondary-transparent-1\": `color-mix(in lab, ${themeColor.colorScheme.primary[5]}, transparent 35%)`,\n\n \"focus-1\": themeColor.colorScheme.focus,\n \"focus-1-hover\": \"rgba(166, 4, 67, .2)\",\n \"focus-soft-1\": `color-mix(in lab, var(--mui-palette-secondary-main), transparent 88%)`,\n\n \"primary-emphasis\": `color-mix(in lab, ${themeColor.colorScheme.primary[6]}, ${themeColor.colorScheme.secondary[5]} 35%)`,\n \"primary-contrast\": themeColor.colorScheme.background.default,\n\n \"success-background\": themeColor.colorScheme.success.background,\n \"info-background\": themeColor.colorScheme.info.background,\n \"error-background\": themeColor.colorScheme.error.background,\n \"warning-background\": themeColor.colorScheme.warning.background,\n \"system-background\": themeColor.colorScheme.system.background,\n \"insight-background\": themeColor.colorScheme.insight.background,\n\n Alert: {\n // Mirror MUI dark Alert roles: Color = lightened text, FilledBg = dark, IconColor = main.\n systemColor: `color-mix(in srgb, ${themeColor.colorScheme.system.text}, #fff 55%)`,\n insightColor: `color-mix(in srgb, ${themeColor.colorScheme.insight.text}, #fff 55%)`,\n systemFilledBg: \"rgba(20, 160, 145, 1)\",\n insightFilledBg: \"rgba(130, 100, 220, 1)\",\n systemFilledColor: \"rgba(0, 0, 0, 0.87)\",\n insightFilledColor: \"rgba(0, 0, 0, 0.87)\",\n systemStandardBg: themeColor.colorScheme.system.background,\n insightStandardBg: themeColor.colorScheme.insight.background,\n systemIconColor: themeColor.colorScheme.system.text,\n insightIconColor: themeColor.colorScheme.insight.text,\n },\n \n \"border-1\": \"rgba(102, 102, 102, 0.5)\",\n \"border-hover-1\": \"rgba(45, 98, 145, 0.47)\",\n \"border-disabled\": \"rgba(201, 201, 201, 0.2)\",\n \"shadow-border-1\": `inset 0 0 0px 2px var(--mui-palette-border-1)`,\n \"shadow-outset-1\": `0px 1px 2px 0px var(--mui-palette-border-1),\n 1px 2px 4px 0px var(--mui-palette-border-1),\n 2px 4px 8px 0px var(--mui-palette-border-1),\n 2px 4px 16px 0px var(--mui-palette-border-1)`,\n\n \"background-hover-1\": \"color-mix(in lab, transparent , var(--mui-palette-secondary-dark) 10%)\",\n \"background-hover-2\": \"color-mix(in lab, var(--mui-palette-primary-dark), var(--mui-palette-secondary-dark) 50%)\",\n \"background-disabled\": themeColor.colorScheme.background.disabled,\n \"background-grey-1\": \"rgba(75, 75, 75, 0.72)\",\n \"container-bg-1\": \"color-mix(in lab, var(--mui-palette-background-default), var(--mui-palette-background-grey-1) 80%)\",\n \"container-bg-primary\": themeColor.colorScheme.primary[1],\n \"container-bg-secondary\": `rgba(0, 0, 0, .314)`,\n\n \"text-subscript\": `color-mix(in lab, ${themeColor.colorScheme.text.subscript}, var(--mui-palette-primary-light) 50%)`, \n \"text-href\": `${themeColor.colorScheme.text.href}`,\n // \"text-disabled\"\n \"text-hover\": themeColor.colorScheme.secondary[6],\n \"text-grey-1\": \"rgba(150, 150, 150, 1)\",\n\n \"blink-golden\": \"rgba(248, 161, 0, 1)\",\n \"blink-secondary\": \"color-mix(in lab, var(--mui-palette-secondary-main), #414141a6 50%)\",\n \"blink-shiny\": \"rgb(45, 210, 216)\",\n\n \"transparent-primary-light\": `color-mix(in lab, ${themeColor.colorScheme.primary[6]}, transparent 45%)`,\n \"transparent-secondary-light\": `color-mix(in lab, ${themeColor.colorScheme.secondary[6]}, transparent 45%)`,\n },\n} as const satisfies ColorSystemOptions","\nimport { \n type ColorTheme, \n type ColorSystemOptions \n} from \"./_utils\"\n\nexport const themeColor = {\n themeType: \"light\",\n name: \"lightBrown\",\n\n colorScheme:{\n primary:{\n 1: \"rgba(255, 255, 255, 1)\",\n 2: \"rgba(255, 255, 220, 1)\",\n 3: \"rgba(255, 245, 215, 1)\",\n 4: \"rgba(255, 241, 211,1)\",\n 5: \"rgba(180, 136, 74, 1)\",\n 6: \"rgba(168, 124, 66, 1)\",\n main: 5,\n },\n secondary:{\n 1: \"rgba(35, 10, 25, 1)\",\n 2: \"rgba(45, 20, 30, 1)\",\n 3: \"rgba(75, 20, 30, 1)\",\n 4: \"rgba(105, 45, 40, 1)\",\n 5: \"rgba(130, 60, 40, 1)\",\n 6: \"rgba(165, 105, 65, 1)\",\n main: 4,\n },\n\n error: {\n text: \"rgba(255, 45, 120, 1)\",\n background: \"rgba(255, 220, 230, 1)\",\n },\n warning: {\n text: \"rgba(240, 169, 56, 1)\",\n background: \"rgba(255, 241, 211, 1)\",\n },\n info: {\n text: \"rgba(100, 180, 255, 1)\",\n background: \"rgba(237, 252, 255, 1)\",\n },\n success: {\n text: \"rgba(49, 161, 85, 1)\",\n background: \"rgba(237, 255, 238, 1)\",\n },\n system: {\n text: \"rgba(13, 148, 136, 1)\",\n background: \"rgba(204, 251, 241, 1)\",\n },\n insight: {\n text: \"rgba(124, 58, 237, 1)\",\n background: \"rgba(237, 233, 254, 1)\",\n },\n\n focus: \"rgba(255, 47, 122, 0.31)\",\n disabled: \"rgba(196, 191, 187, 1)\",\n background: {\n default: \"rgba(255, 255, 255, 1)\",\n disabled: \"rgba(150, 150, 150, 0.12)\",\n },\n text: {\n primary: \"rgba(35, 10, 25, 1)\",\n secondary: \"rgba(194, 178, 167, 1)\",\n subscript: \"rgba(92, 92, 92, 1)\",\n href: \"rgba(255, 0, 153, 1)\",\n },\n },\n\n} as const satisfies ColorTheme\n\nexport const muiPalette = {\n palette: {\n mode: \"light\",\n primary: {\n dark: themeColor.colorScheme.primary[6],\n main: themeColor.colorScheme.primary[themeColor.colorScheme.primary.main],\n light: themeColor.colorScheme.primary[1],\n },\n secondary: {\n dark: themeColor.colorScheme.secondary[3],\n main: themeColor.colorScheme.secondary[themeColor.colorScheme.secondary.main],\n light: themeColor.colorScheme.secondary[6],\n },\n error: {\n main: themeColor.colorScheme.error.text,\n },\n warning: {\n main: themeColor.colorScheme.warning.text,\n },\n info: {\n main: themeColor.colorScheme.info.text,\n },\n success: {\n main: themeColor.colorScheme.success.text,\n },\n system: {\n main: themeColor.colorScheme.system.text,\n light: \"rgba(45, 180, 168, 1)\",\n dark: \"rgba(10, 120, 110, 1)\",\n contrastText: \"rgba(255, 255, 255, 1)\",\n },\n insight: {\n main: themeColor.colorScheme.insight.text,\n light: \"rgba(148, 90, 245, 1)\",\n dark: \"rgba(100, 40, 200, 1)\",\n contrastText: \"rgba(255, 255, 255, 1)\",\n },\n background: {\n default: themeColor.colorScheme.background.default,\n },\n text: {\n primary: themeColor.colorScheme.text.primary,\n secondary: themeColor.colorScheme.text.secondary,\n disabled: themeColor.colorScheme.disabled,\n },\n action: {\n disabledBackground: themeColor.colorScheme.background.disabled,\n },\n\n \"secondary-transparent-1\": `color-mix(in lab, ${themeColor.colorScheme.secondary[6]}, transparent 65%)`,\n\n \"focus-1\": themeColor.colorScheme.focus,\n \"focus-1-hover\": \"rgba(255, 175, 204, .38)\",\n \"focus-soft-1\": 'color-mix(in lab, var(--mui-palette-secondary-dark), transparent 90%)',\n\n \"primary-emphasis\": `color-mix(in lab, ${themeColor.colorScheme.secondary[4]}, ${themeColor.colorScheme.primary[6]} 28%)`,\n \"primary-contrast\": themeColor.colorScheme.primary[1],\n\n \"success-background\": themeColor.colorScheme.success.background,\n \"info-background\": themeColor.colorScheme.info.background,\n \"error-background\": themeColor.colorScheme.error.background,\n \"warning-background\": themeColor.colorScheme.warning.background,\n \"system-background\": themeColor.colorScheme.system.background,\n \"insight-background\": themeColor.colorScheme.insight.background,\n\n Alert: {\n // Mirror MUI Alert token roles: Color (standard text), FilledBg, IconColor, StandardBg.\n systemColor: `color-mix(in srgb, ${themeColor.colorScheme.system.text}, #000 40%)`,\n insightColor: `color-mix(in srgb, ${themeColor.colorScheme.insight.text}, #000 40%)`,\n systemFilledBg: themeColor.colorScheme.system.text,\n insightFilledBg: themeColor.colorScheme.insight.text,\n systemFilledColor: \"rgba(255, 255, 255, 1)\",\n insightFilledColor: \"rgba(255, 255, 255, 1)\",\n systemStandardBg: themeColor.colorScheme.system.background,\n insightStandardBg: themeColor.colorScheme.insight.background,\n systemIconColor: themeColor.colorScheme.system.text,\n insightIconColor: themeColor.colorScheme.insight.text,\n },\n \n \"border-1\": \"rgba(201, 201, 201, 0.5)\",\n \"border-hover-1\": \"rgba(46, 18, 30, 0.47)\",\n \"border-disabled\": \"rgba(138, 138, 138, 0.19)\",\n \"shadow-border-1\": `inset 0 0 0px 2px var(--mui-palette-border-1)`,\n \"shadow-outset-1\": `0px 1px 2px 0px var(--mui-palette-border-1),\n 1px 2px 4px 0px var(--mui-palette-border-1),\n 2px 4px 8px 0px var(--mui-palette-border-1),\n 2px 4px 16px 0px var(--mui-palette-border-1)`,\n\n \"background-hover-1\": \"color-mix(in lab, transparent , var(--mui-palette-secondary-dark) 10%)\",\n \"background-hover-2\": \"color-mix(in lab, var(--mui-palette-primary-light) , var(--mui-palette-secondary-dark) 10%)\",\n \"background-disabled\": themeColor.colorScheme.background.disabled,\n \"background-grey-1\": \"rgba(55, 55, 55, 0.20)\",\n \"container-bg-1\": \"color-mix(in lab, var(--mui-palette-background-default), transparent 20%)\",\n // legacy helpers for chat container backgrounds\n \"container-bg-primary\": themeColor.colorScheme.primary[4],\n \"container-bg-secondary\": 'rgba(255, 249, 241, .525)',\n\n \"text-subscript\": `color-mix(in lab, ${themeColor.colorScheme.text.subscript}, var(--mui-palette-primary-main) 50%)`, \n \"text-href\": `${themeColor.colorScheme.text.href}`, // \"text-disabled\"\n \"text-hover\": \"rgba(36, 9, 24, 1)\",\n \"text-grey-1\": \"color-mix(in lab, var(--mui-palette-secondary-dark), rgba(120, 120, 120, 1) 80%)\",\n\n \"blink-golden\": \"rgba(248, 161, 0, 1)\",\n \"blink-secondary\": \"color-mix(in lab, var(--mui-palette-secondary-main), #e4e4e4a6 50%)\",\n \"blink-shiny\": \"rgb(250, 60, 177)\",\n\n \"transparent-primary-light\": `color-mix(in lab, ${themeColor.colorScheme.primary[6]}, transparent 45%)`,\n \"transparent-secondary-light\": `color-mix(in lab, ${themeColor.colorScheme.secondary[6]}, transparent 45%)`,\n },\n} as const satisfies ColorSystemOptions","import React from 'react';\nimport { useColorScheme } from '@mui/material/styles';\n\nimport { IconButton } from '@/ele/Button'\nimport { Skeleton } from '@/ele/Skeleton'\nimport { Tooltip } from '@/ele/Tooltip'\nimport { MoonIcon, SunIcon } from '@/icons/MuiIcon'\n\nexport type ToggleThemeButtonRenderMode = 'auto' | 'client' | 'server';\n\nexport interface ToggleThemeButtonProps {\n forceRenderMode?: Exclude<ToggleThemeButtonRenderMode, 'auto'>;\n}\n\nfunction resolveRenderMode(forceRenderMode?: ToggleThemeButtonProps['forceRenderMode']): ToggleThemeButtonRenderMode {\n if (forceRenderMode) {\n return forceRenderMode;\n }\n\n return typeof window === 'undefined' ? 'server' : 'client';\n}\n\nfunction getCurrentMode(mode: ReturnType<typeof useColorScheme>['mode']) {\n if (mode !== 'system' && mode !== undefined) {\n return mode;\n }\n\n if (typeof window === 'undefined') {\n return 'light';\n }\n\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';\n}\n\nfunction applyColorScheme(nextMode: 'light' | 'dark') {\n if (typeof document === 'undefined') {\n return;\n }\n document.documentElement.setAttribute('color-scheme', nextMode);\n}\n\nfunction commitMode(setMode: (mode: 'light' | 'dark') => void, nextMode: 'light' | 'dark') {\n const commit = () => setMode(nextMode);\n if (typeof requestAnimationFrame === 'function') {\n requestAnimationFrame(() => {\n requestAnimationFrame(commit);\n });\n return;\n }\n setTimeout(commit, 0);\n}\n\nexport default function ToggleButton({ forceRenderMode }: ToggleThemeButtonProps) {\n const { mode, setMode } = useColorScheme();\n const renderMode = resolveRenderMode(forceRenderMode);\n const resolvedMode = getCurrentMode(mode);\n const [displayedMode, setDisplayedMode] = React.useState(resolvedMode);\n\n React.useEffect(() => {\n setDisplayedMode(resolvedMode);\n }, [resolvedMode]);\n\n if (renderMode === 'server') {\n return <Skeleton variant=\"rounded\" width={34} height={34} />;\n }\n\n const nextMode = displayedMode === 'dark' ? 'light' : 'dark';\n const label = `Switch to ${nextMode} mode`;\n\n function toggle() {\n setDisplayedMode(nextMode);\n applyColorScheme(nextMode);\n commitMode(setMode, nextMode);\n }\n\n return (\n <Tooltip title={label}>\n <IconButton\n aria-label={label}\n onClick={toggle}\n color=\"primary\"\n size=\"medium\"\n sx={{\n '--button-color': 'var(--mui-palette-primary-emphasis)',\n '--button-hover-border-color': 'var(--mui-palette-primary-emphasis)',\n '&:active': { scale: '1' },\n '&:active svg': { scale: '1' },\n }}\n >\n {displayedMode === 'dark' ? <SunIcon /> : <MoonIcon />}\n </IconButton>\n </Tooltip>\n );\n}\n","export const appScrollSurfaceAttribute = 'data-scroll-surface';\n"],"mappings":"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,UAEA,yCAAwC;AAAA,YACtC,oBAAoB;AAAA,YACpB,sBAAsB;AAAA,UACxB;AAAA,UACA,4BAA2B;AAAA,YACzB,oBAAoB;AAAA,YACpB,sBAAsB;AAAA,UACxB;AAAA,QACF;AAAA,MACF;AAAA,IAEF;AAAA;AAAA;;;ACzGA,IAAAC,cAAA;AAAA;AAAA;AAAA;AACA,IAAAC;AACA,IAAAA;AAAA;AAAA;;;ACFA,IAAAC,YAAA;AAAA;AAAA;AAAA,IAAAC;AAAA;AAAA;;;ACAA,IAAAC,cAAA;AAAA;AAAA;AAAA,IAAAC;AAAA;AAAA;;;ACAA,8BACA;AADA,IAAAC,YAAA;AAAA;AAAA;AAAA,+BAA6C;AAC7C,oBAAkC;AAAA;AAAA;;;ACDlC;AAAA;AAAA;AAAA,IAAAC;AAAA;AAAA;;;ACAA,IACA,sBACA,4BACA,oBACA,qBACA,kBACA,kBACA,mBACA,kBACA,wBACA,sBACA,uBACA,mBACA,eACA,gBACA,qBACA,6BACA,4BACA,uBACA,qBACA,0BACA,4BACA,6BACA,2BACA,eACA,uBACA,2BACA,YACA,mBACA,iBACA,aACA,kBACA,wBACA,eACA,mBACA,oBACA,gBACA,4BACA,gBACA,yBACA,gBACA,kBACA,kBACA,mBACAC,8BACA,4BACA,iBACA,cACA,gBACA,mBACA,yBACA,sBAGA,gCACA,YACA,cACA,mBACA,kBACA,oBACA,aACA,iBACA,kBACA,oBACA,qBACA,cACA,yBACA,6BACA,2BACA,sBACA,oBACA,cACA,gBACA,yBACA,aACA,kBACA,mBACA,0BACA,qBACA,aACA,mBACA,aACA,kBACA,iBACA,gBACA,iBACA,qBACA,0BACA,wBACA,yBACA,2BACA,gBACA,oBACA,iCACA,gCACA,wCACA,kBACA,mBACA,gBACA,cACA,kBACA,aACA,kBACA,sBACA,eACA,aACA,aACA,oBACA,eACA,oBACAC,eACA,0BACA,2BACA,sBACA,qBACA,2BACA,0BACA,sBACA,kBACA,qBACA,6BAGA,mBACA,eACA,cACA,kBAGA,4BACA,oBACA,uBACA,qBACAC,gBACA,sBACA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A;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,2BAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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","names":["Box","init_BorderBox","import_Box","init_BorderBox","Typography","import_Typography","import_jsx_runtime","init_src","init_Typography","init_src","MuiButton","import_jsx_runtime","init_Button","init_theme","init_theme","init_src","init_Tooltip","init_src","import_react","import_jsx_runtime","init_Tooltip","MuiIconButton","import_react","import_jsx_runtime","init_theme","theme","init_IconButton","init_theme","MuiChip","import_jsx_runtime","init_themes","theme","init_Chip","init_themes","init_src","init_Chip","init_Chip","init_src","init_theme","import_styles","init_Chip","init_theme","init_TagButton","init_src","init_Button","init_IconButton","init_TagButton","init_Button","init_src","MuiBadge","import_jsx_runtime","init_theme","init_Badge","init_theme","init_src","init_Badge","init_Badge","init_src","init_src","init_src","import_PhotoSizeSelectLarge","import_Close","import_Person","import_DeleteForever","import_AccountTreeOutlined","import_styles","init_theme","import_jsx_runtime","init_Button","init_Typography","init_theme","import_react","import_jsx_runtime","init_states","Paper","import_jsx_runtime","import_Paper","import_styles","Paper","init_themes","init_Paper","init_themes","init_src","init_Paper","init_Paper","init_src","import_styles","init_Paper","init_theme","theme","id","Autocomplete","options","InputBase","import_react","import_Autocomplete","import_jsx_runtime","init_Typography","init_Button","init_states","import_react","import_jsx_runtime","init_Typography","init_Button","init_Badge","init_theme","init_states","init_GitHubPicker","init_src","init_GitHubPicker","init_src","import_jsx_runtime","init_DialogSkeleton","init_DialogSkeleton","init_const","init_utils","init_const","MuiAvatar","import_jsx_runtime","init_Typography","init_utils","init_themes","import_jsx_runtime","init_Button","init_utils","init_themes","init_Avatar","init_themes","import_styles","MenuItem","ListItemIcon","import_react","import_styles","import_jsx_runtime","ListItemText","MenuList","init_theme","import_MenuItem","init_Menu","init_theme","import_react","import_jsx_runtime","init_Paper","init_Menu","import_react","import_jsx_runtime","init_Button","p","init_useMenu","FormLabel","import_jsx_runtime","init_theme","init_FormLabel","init_theme","FormControlLabel","import_jsx_runtime","init_theme","init_FormControlLabel","init_theme","init_themes","init_src","init_FormLabel","init_FormControlLabel","init_themes","init_src","MuiCard","CardContent","import_jsx_runtime","init_theme","CardContent","import_styles","import_Card","import_CardContent","import_jsx_runtime","init_theme","Card","import_Card","import_CardContent","init_Card","init_theme","init_src","init_Card","init_Card","init_src","init_theme","init_src","init_theme","init_src","init_theme","init_theme","MuiFormGroup","import_jsx_runtime","init_CheckboxGroup","init_src","init_CheckboxGroup","init_Checkbox","init_src","import_jsx_runtime","init_List","init_Checkbox","Renderer","import_react","import_jsx_runtime","init_List","init_Card","init_Checkbox","init_Button","init_theme","import_List","import_ListItemIcon","import_ListItemText","init_theme","init_src","init_List","init_src","React","paperSx","theme","InputBase","import_react","import_InputBase","import_jsx_runtime","init_List","init_Paper","init_Typography","init_Button","init_DetailMenu","import_react","import_jsx_runtime","init_DetailMenu","init_ModelMenu","theme","import_react","import_jsx_runtime","init_List","init_Paper","init_Typography","init_ModelMenu","init_ModelPicker","init_src","init_Menu","init_useMenu","init_DetailMenu","init_ModelMenu","init_ModelPicker","init_Menu","init_src","init_theme","status","import_styles","import_jsx_runtime","init_Badge","init_Menu","init_Avatar","init_theme","init_StatusAvatar","init_src","init_Avatar","init_StatusAvatar","init_utils","init_Avatar","init_src","import_react","import_styles","import_jsx_runtime","init_Button","React","DialogActions","import_jsx_runtime","MUIDatePicker","import_LocalizationProvider","import_AdapterDayjs","import_jsx_runtime","MUIDateTimePicker","init_theme","init_src","init_theme","init_src","import_jsx_runtime","ImageList","ImageListItem","init_MuiImageList","init_theme","import_jsx_runtime","init_theme","ReactCrop","import_jsx_runtime","init_theme","init_theme","init_src","init_Slider","init_src","import_jsx_runtime","init_Slider","init_Typography","import_jsx_runtime","init_Button","init_theme","status","import_jsx_runtime","init_Typography","init_Button","init_src","init_DisplayFile","init_src","import_jsx_runtime","init_Typography","import_jsx_runtime","init_Button","import_react","import_jsx_runtime","init_theme","init_DisplayFile","init_src","init_src","React","import_react","import_jsx_runtime","React","import_react","import_react_image_crop","import_jsx_runtime","init_Cropper","init_src","init_MuiImageList","init_Cropper","init_src","init_theme","import_TextField","init_theme","init_theme","Icon","import_Menu","import_react","import_jsx_runtime","CountryRow","MuiCountrySelect","Menu","PhoneInput","import_react_phone_number_input","import_react","import_styles","import_jsx_runtime","init_theme","init_TelPhoneInput","exports","module","init_const","init_theme","theme","classnames","Modal","Tooltip","import_react","import_Tooltip","import_jsx_runtime","init_const","init_Typography","init_Paper","init_Button","init_theme","init_MuiModal","init_theme","import_Modal","init_src","init_MuiModal","init_src","import_jsx_runtime","import_react","import_styles","import_jsx_runtime","init_Tooltip","init_Button","import_react_hook_form","import_jsx_runtime","dayjs","import_react_hook_form","import_dayjs","import_jsx_runtime","dayjs","import_react_hook_form","import_jsx_runtime","init_TelPhoneInput","import_react_hook_form","import_jsx_runtime","import_react","import_react_hook_form","import_jsx_runtime","init_Avatar","React","init","init_theme","import_styles","import_jsx_runtime","theme","CodeMirror","import_react","import_styles","import_jsx_runtime","CodeEditor","StyledWrapper","init_theme","React","theme","OriginalJsonEditor","init_JsonEditor","init_src","init_JsonEditor","init_JsonEditor","init_src","import_react_hook_form","import_jsx_runtime","init_JsonEditor","React","import_react","import_react_hook_form","import_jsx_runtime","Icon_default","ToggleButton","init_Avatar","init_Badge","init_Button","init_Card","init_Checkbox","init_Chip","import_react","import_styles","import_jsx_runtime","MuiTextField","theme","import_react","import_InputBase","init_Paper","init_Button","import_jsx_runtime","Wrapper","rest","InputBase","init_TelPhoneInput","import_react","import_styles","import_TextField","import_jsx_runtime","TextField","init_List","React","import_jsx_runtime","import_jsx_runtime","SvgIcon","import_SvgIcon","React","import_jsx_runtime","import_jsx_runtime","Icon","SvgIcon","Icon_default","import_jsx_runtime","import_react","init_Typography","import_jsx_runtime","import_jsx_runtime","Icon_default","import_jsx_runtime","init_Menu","init_Paper","import_jsx_runtime","MuiLinearProgress","import_jsx_runtime","MuiCircularProgress","import_styles","import_react_resizable_panels","PRH","import_react","init_List","init_Menu","import_styles","import_jsx_runtime","MuiSelect","init_Slider","import_material","init_Button","theme","import_jsx_runtime","import_jsx_runtime","Switch","import_Switch","import_jsx_runtime","Switch","theme","import_react","init_Typography","init_Menu","import_react","import_jsx_runtime","import_styles","init_Button","import_jsx_runtime","Timeline","TimelineOppositeContent","TimelineSeparator","TimelineDot","TimelineContent","TimelineItem","TimelineConnector","import_styles","import_jsx_runtime","MuiToggleButtonGroup","theme","MuiToggleButton","theme","init_Tooltip","init_Typography","import_react","import_material","import_jsx_runtime","import_react","import_material","import_jsx_runtime","DisplaySpan","import_react","import_notistack","import_react","import_notistack","enqueueAlert","enqueueCollapsable","enqueueError","enqueueSuccess","enqueueWarning","enqueueInfo","enqueueSystem","enqueueInsight","import_jsx_runtime","Alert","import_react","import_notistack","import_CardActions","init_Card","init_Button","init_Typography","theme","import_jsx_runtime","Renderer","CardActions","import_jsx_runtime","React","AlertProvider","import_react","init_Typography","import_react","init_Typography","import_material","style","rest","import_jsx_runtime","ChartHover","init_Typography","import_jsx_runtime","import_react","import_jsx_runtime","ChartPlot","import_jsx_runtime","init_DisplayFile","import_react","init_Typography","init_Button","init_Typography","init_DisplayFile","import_jsx_runtime","import_react","import_react","import_react","init_Typography","init_Button","import_jsx_runtime","enqueueInfo","React","import_jsx_runtime","import_react","init_Button","init_Typography","import_jsx_runtime","import_jsx_runtime","import_react","init_Checkbox","init_Paper","init_Checkbox","init_Button","ret","import_jsx_runtime","import_react_table","import_jsx_runtime","import_react","import_react_hook_form","init_Typography","import_react","configError","import_react","import_react_hook_form","React","import_react_hook_form","import_react","import_jsx_runtime","React","React","import_jsx_runtime","getNames","import_react","import_react_hook_form","import_jsx_runtime","TextField","import_react_hook_form","import_jsx_runtime","import_react_hook_form","init_Slider","import_jsx_runtime","import_react_hook_form","init_Checkbox","import_jsx_runtime","import_react_hook_form","import_jsx_runtime","import_react_hook_form","import_jsx_runtime","import_react_hook_form","import_jsx_runtime","import_react_hook_form","init_Button","import_jsx_runtime","import_react_hook_form","init_Button","import_jsx_runtime","import_jsx_runtime","DateField","React","DateTimeField","TelField","FileUploadField","AvatarField","JSONEditorField","AutocompleteField","TextField","import_react_hook_form","init_Button","import_jsx_runtime","import_react","import_jsx_runtime","React","import_react","init_Button","import_react","import_jsx_runtime","React","import_jsx_runtime","React","import_react","import_LocalizationProvider","import_AdapterDayjs","import_jsx_runtime","React","import_jsx_runtime","React","import_react","init_Checkbox","init_Typography","import_jsx_runtime","React","import_material","theme","import_react","React","next","import_react","init_Button","init_Tooltip","import_jsx_runtime","React","import_react","init_Tooltip","init_Button","import_jsx_runtime","React","theme","import_jsx_runtime","import_react","init_Checkbox","init_Button","init_useMenu","import_react","init_useMenu","React","import_jsx_runtime","React","import_jsx_runtime","Header","import_react","import_react_table","init_Typography","import_jsx_runtime","Icon","import_jsx_runtime","React","Body","import_jsx_runtime","Header","Body","import_jsx_runtime","React","table","import_material","init_Tooltip","init_Typography","import_jsx_runtime","theme","React","React","import_jsx_runtime","React","init_Button","import_jsx_runtime","React","init_Button","init_Menu","import_jsx_runtime","React","init_Paper","init_Typography","init_Menu","import_jsx_runtime","React","init_Button","import_jsx_runtime","React","import_jsx_runtime","import_jsx_runtime","rowSx","import_react","import_styles","import_material","import_styles","init_Avatar","init_Badge","init_Button","init_Card","init_Checkbox","init_Chip","init_List","init_theme","init_Paper","init_Slider","init_Tooltip","init_Typography","themeColor","muiPalette","muiPalette","import_jsx_runtime","createCache","React","ThemeTree","MuiThemeProvider","import_react","import_styles","init_Button","init_Tooltip","import_jsx_runtime","ToggleButton","React"]}