@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.
- package/README.md +110 -0
- package/dist/AutocompleteField-ZKNU2IRR.mjs +181 -0
- package/dist/AutocompleteField-ZKNU2IRR.mjs.map +1 -0
- package/dist/AvatarField-SAODT3CZ.mjs +275 -0
- package/dist/AvatarField-SAODT3CZ.mjs.map +1 -0
- package/dist/CodeEditor-JF55ZNVD.mjs +34 -0
- package/dist/CodeEditor-JF55ZNVD.mjs.map +1 -0
- package/dist/DateField-ZYMZFHL4.mjs +82 -0
- package/dist/DateField-ZYMZFHL4.mjs.map +1 -0
- package/dist/DateTimeField-TPTJ7YIZ.mjs +65 -0
- package/dist/DateTimeField-TPTJ7YIZ.mjs.map +1 -0
- package/dist/FileUploadField-NTMWBJER.mjs +78 -0
- package/dist/FileUploadField-NTMWBJER.mjs.map +1 -0
- package/dist/JSONEditorField-TMRWGXVR.mjs +64 -0
- package/dist/JSONEditorField-TMRWGXVR.mjs.map +1 -0
- package/dist/PopperMenu-LJ36RPBW.mjs +416 -0
- package/dist/PopperMenu-LJ36RPBW.mjs.map +1 -0
- package/dist/TelField-LOGRVZ4I.mjs +88 -0
- package/dist/TelField-LOGRVZ4I.mjs.map +1 -0
- package/dist/alert.d.mts +202 -0
- package/dist/alert.d.ts +202 -0
- package/dist/alert.js +784 -0
- package/dist/alert.js.map +1 -0
- package/dist/alert.mjs +47 -0
- package/dist/alert.mjs.map +1 -0
- package/dist/appBar.d.mts +21 -0
- package/dist/appBar.d.ts +21 -0
- package/dist/appBar.js +64 -0
- package/dist/appBar.js.map +1 -0
- package/dist/appBar.mjs +12 -0
- package/dist/appBar.mjs.map +1 -0
- package/dist/autocomplete.d.mts +121 -0
- package/dist/autocomplete.d.ts +121 -0
- package/dist/autocomplete.js +2052 -0
- package/dist/autocomplete.js.map +1 -0
- package/dist/autocomplete.mjs +21 -0
- package/dist/autocomplete.mjs.map +1 -0
- package/dist/avatar.d.mts +253 -0
- package/dist/avatar.d.ts +253 -0
- package/dist/avatar.js +992 -0
- package/dist/avatar.js.map +1 -0
- package/dist/avatar.mjs +41 -0
- package/dist/avatar.mjs.map +1 -0
- package/dist/badge.d.mts +123 -0
- package/dist/badge.d.ts +123 -0
- package/dist/badge.js +151 -0
- package/dist/badge.js.map +1 -0
- package/dist/badge.mjs +10 -0
- package/dist/badge.mjs.map +1 -0
- package/dist/box.d.mts +36 -0
- package/dist/box.d.ts +36 -0
- package/dist/box.js +199 -0
- package/dist/box.js.map +1 -0
- package/dist/box.mjs +14 -0
- package/dist/box.mjs.map +1 -0
- package/dist/button.d.mts +230 -52
- package/dist/button.d.ts +230 -52
- package/dist/button.js +392 -60
- package/dist/button.js.map +1 -1
- package/dist/button.mjs +14 -8
- package/dist/card.d.mts +47 -0
- package/dist/card.d.ts +47 -0
- package/dist/card.js +135 -0
- package/dist/card.js.map +1 -0
- package/dist/card.mjs +24 -0
- package/dist/card.mjs.map +1 -0
- package/dist/chart.d.mts +40 -0
- package/dist/chart.d.ts +40 -0
- package/dist/chart.js +1234 -0
- package/dist/chart.js.map +1 -0
- package/dist/chart.mjs +10 -0
- package/dist/chart.mjs.map +1 -0
- package/dist/checkbox.d.mts +62 -0
- package/dist/checkbox.d.ts +62 -0
- package/dist/checkbox.js +299 -0
- package/dist/checkbox.js.map +1 -0
- package/dist/checkbox.mjs +14 -0
- package/dist/checkbox.mjs.map +1 -0
- package/dist/chip.d.mts +96 -0
- package/dist/chip.d.ts +96 -0
- package/dist/chip.js +112 -0
- package/dist/chip.js.map +1 -0
- package/dist/chip.mjs +10 -0
- package/dist/chip.mjs.map +1 -0
- package/dist/chunk-24XDGNJ6.mjs +1450 -0
- package/dist/chunk-24XDGNJ6.mjs.map +1 -0
- package/dist/chunk-27KYFU7R.mjs +30 -0
- package/dist/chunk-27KYFU7R.mjs.map +1 -0
- package/dist/chunk-2FFLT5VP.mjs +7 -0
- package/dist/chunk-2FFLT5VP.mjs.map +1 -0
- package/dist/chunk-2ZZJTBTE.mjs +148 -0
- package/dist/chunk-2ZZJTBTE.mjs.map +1 -0
- package/dist/chunk-3DQINB57.mjs +15 -0
- package/dist/chunk-3DQINB57.mjs.map +1 -0
- package/dist/chunk-3VUAM2GY.mjs +52 -0
- package/dist/chunk-3VUAM2GY.mjs.map +1 -0
- package/dist/chunk-4Q54P737.mjs +19 -0
- package/dist/chunk-4Q54P737.mjs.map +1 -0
- package/dist/chunk-4RPFRNXG.mjs +62 -0
- package/dist/chunk-4RPFRNXG.mjs.map +1 -0
- package/dist/chunk-56TI2ZBT.mjs +114 -0
- package/dist/chunk-56TI2ZBT.mjs.map +1 -0
- package/dist/chunk-6REEQBJI.mjs +62 -0
- package/dist/chunk-6REEQBJI.mjs.map +1 -0
- package/dist/chunk-AAH2O24U.mjs +325 -0
- package/dist/chunk-AAH2O24U.mjs.map +1 -0
- package/dist/chunk-B7DAB22K.mjs +16 -0
- package/dist/chunk-B7DAB22K.mjs.map +1 -0
- package/dist/chunk-BGB7JHIU.mjs +222 -0
- package/dist/chunk-BGB7JHIU.mjs.map +1 -0
- package/dist/chunk-CRYIEYZZ.mjs +756 -0
- package/dist/chunk-CRYIEYZZ.mjs.map +1 -0
- package/dist/chunk-CWFWRZWU.mjs +23 -0
- package/dist/chunk-CWFWRZWU.mjs.map +1 -0
- package/dist/chunk-DELCADNF.mjs +1926 -0
- package/dist/chunk-DELCADNF.mjs.map +1 -0
- package/dist/chunk-E3I2VDHZ.mjs +292 -0
- package/dist/chunk-E3I2VDHZ.mjs.map +1 -0
- package/dist/chunk-EEH7HACG.mjs +249 -0
- package/dist/chunk-EEH7HACG.mjs.map +1 -0
- package/dist/chunk-EKPULYPU.mjs +497 -0
- package/dist/chunk-EKPULYPU.mjs.map +1 -0
- package/dist/chunk-EW4DTFH3.mjs +69 -0
- package/dist/chunk-EW4DTFH3.mjs.map +1 -0
- package/dist/chunk-FJ6ZGZIA.mjs +43 -0
- package/dist/chunk-FJ6ZGZIA.mjs.map +1 -0
- package/dist/chunk-HE7MY3RT.mjs +23 -0
- package/dist/chunk-HE7MY3RT.mjs.map +1 -0
- package/dist/chunk-HR3A4H4E.mjs +1289 -0
- package/dist/chunk-HR3A4H4E.mjs.map +1 -0
- package/dist/chunk-I5JWS4Z7.mjs +91 -0
- package/dist/chunk-I5JWS4Z7.mjs.map +1 -0
- package/dist/chunk-IN3O4R7Q.mjs +932 -0
- package/dist/chunk-IN3O4R7Q.mjs.map +1 -0
- package/dist/chunk-JIU5GVM7.mjs +414 -0
- package/dist/chunk-JIU5GVM7.mjs.map +1 -0
- package/dist/chunk-JWANK42G.mjs +170 -0
- package/dist/chunk-JWANK42G.mjs.map +1 -0
- package/dist/chunk-MDAUF7IL.mjs +9 -0
- package/dist/chunk-MDAUF7IL.mjs.map +1 -0
- package/dist/chunk-MI64T62E.mjs +26 -0
- package/dist/chunk-MI64T62E.mjs.map +1 -0
- package/dist/chunk-NJYNJLT7.mjs +172 -0
- package/dist/chunk-NJYNJLT7.mjs.map +1 -0
- package/dist/chunk-NLBDBJ3R.mjs +97 -0
- package/dist/chunk-NLBDBJ3R.mjs.map +1 -0
- package/dist/chunk-OGNGPI3M.mjs +333 -0
- package/dist/chunk-OGNGPI3M.mjs.map +1 -0
- package/dist/chunk-OJV6V7YZ.mjs +552 -0
- package/dist/chunk-OJV6V7YZ.mjs.map +1 -0
- package/dist/chunk-ONQMRE2G.mjs +26 -0
- package/dist/chunk-ONQMRE2G.mjs.map +1 -0
- package/dist/chunk-OP6LKXPA.mjs +75 -0
- package/dist/chunk-OP6LKXPA.mjs.map +1 -0
- package/dist/chunk-QFF3HTHL.mjs +14 -0
- package/dist/chunk-QFF3HTHL.mjs.map +1 -0
- package/dist/chunk-QKGCW37O.mjs +1175 -0
- package/dist/chunk-QKGCW37O.mjs.map +1 -0
- package/dist/chunk-R5MKQN6D.mjs +227 -0
- package/dist/chunk-R5MKQN6D.mjs.map +1 -0
- package/dist/chunk-RXBQ7KXF.mjs +652 -0
- package/dist/chunk-RXBQ7KXF.mjs.map +1 -0
- package/dist/chunk-S6EZVRZC.mjs +161 -0
- package/dist/chunk-S6EZVRZC.mjs.map +1 -0
- package/dist/chunk-SGCUDWO3.mjs +396 -0
- package/dist/chunk-SGCUDWO3.mjs.map +1 -0
- package/dist/chunk-SRWPHN2N.mjs +188 -0
- package/dist/chunk-SRWPHN2N.mjs.map +1 -0
- package/dist/chunk-T34IULP5.mjs +242 -0
- package/dist/chunk-T34IULP5.mjs.map +1 -0
- package/dist/chunk-T4X375IG.mjs +100 -0
- package/dist/chunk-T4X375IG.mjs.map +1 -0
- package/dist/chunk-T6AMRENK.mjs +376 -0
- package/dist/chunk-T6AMRENK.mjs.map +1 -0
- package/dist/chunk-TDRA5EZI.mjs +325 -0
- package/dist/chunk-TDRA5EZI.mjs.map +1 -0
- package/dist/chunk-UDREPVEY.mjs +356 -0
- package/dist/chunk-UDREPVEY.mjs.map +1 -0
- package/dist/chunk-UGMRJMFZ.mjs +172 -0
- package/dist/chunk-UGMRJMFZ.mjs.map +1 -0
- package/dist/chunk-UMJ5SCIQ.mjs +438 -0
- package/dist/chunk-UMJ5SCIQ.mjs.map +1 -0
- package/dist/chunk-UTVSYS6S.mjs +270 -0
- package/dist/chunk-UTVSYS6S.mjs.map +1 -0
- package/dist/chunk-V26V2S3W.mjs +197 -0
- package/dist/chunk-V26V2S3W.mjs.map +1 -0
- package/dist/chunk-VYD3PDBB.mjs +38 -0
- package/dist/chunk-VYD3PDBB.mjs.map +1 -0
- package/dist/chunk-WYYP3Y34.mjs +55 -0
- package/dist/chunk-WYYP3Y34.mjs.map +1 -0
- package/dist/chunk-XIMFP6RB.mjs +161 -0
- package/dist/chunk-XIMFP6RB.mjs.map +1 -0
- package/dist/chunk-XJ2SXC2Q.mjs +558 -0
- package/dist/chunk-XJ2SXC2Q.mjs.map +1 -0
- package/dist/chunk-Y74ALKBL.mjs +565 -0
- package/dist/chunk-Y74ALKBL.mjs.map +1 -0
- package/dist/chunk-ZG3NQI77.mjs +353 -0
- package/dist/chunk-ZG3NQI77.mjs.map +1 -0
- package/dist/chunk-ZVFYOXDE.mjs +297 -0
- package/dist/chunk-ZVFYOXDE.mjs.map +1 -0
- package/dist/collapse.d.mts +10 -0
- package/dist/collapse.d.ts +10 -0
- package/dist/collapse.js +53 -0
- package/dist/collapse.js.map +1 -0
- package/dist/collapse.mjs +10 -0
- package/dist/collapse.mjs.map +1 -0
- package/dist/datePicker.d.mts +133 -0
- package/dist/datePicker.d.ts +133 -0
- package/dist/datePicker.js +482 -0
- package/dist/datePicker.js.map +1 -0
- package/dist/datePicker.mjs +29 -0
- package/dist/datePicker.mjs.map +1 -0
- package/dist/displayFile.d.mts +95 -0
- package/dist/displayFile.d.ts +95 -0
- package/dist/displayFile.js +357 -0
- package/dist/displayFile.js.map +1 -0
- package/dist/displayFile.mjs +19 -0
- package/dist/displayFile.mjs.map +1 -0
- package/dist/divider.d.mts +9 -0
- package/dist/divider.d.ts +9 -0
- package/dist/divider.js +52 -0
- package/dist/divider.js.map +1 -0
- package/dist/divider.mjs +10 -0
- package/dist/divider.mjs.map +1 -0
- package/dist/fileUploader.d.mts +86 -0
- package/dist/fileUploader.d.ts +86 -0
- package/dist/fileUploader.js +722 -0
- package/dist/fileUploader.js.map +1 -0
- package/dist/fileUploader.mjs +16 -0
- package/dist/fileUploader.mjs.map +1 -0
- package/dist/flowMap.d.mts +353 -0
- package/dist/flowMap.d.ts +353 -0
- package/dist/flowMap.js +94806 -0
- package/dist/flowMap.js.map +1 -0
- package/dist/flowMap.mjs +94585 -0
- package/dist/flowMap.mjs.map +1 -0
- package/dist/form.d.mts +84 -0
- package/dist/form.d.ts +84 -0
- package/dist/form.js +144 -0
- package/dist/form.js.map +1 -0
- package/dist/form.mjs +24 -0
- package/dist/form.mjs.map +1 -0
- package/dist/icons.d.mts +160 -0
- package/dist/icons.d.ts +160 -0
- package/dist/icons.js +540 -0
- package/dist/icons.js.map +1 -0
- package/dist/icons.mjs +306 -0
- package/dist/icons.mjs.map +1 -0
- package/dist/image.d.mts +49 -0
- package/dist/image.d.ts +49 -0
- package/dist/image.js +1348 -0
- package/dist/image.js.map +1 -0
- package/dist/image.mjs +19 -0
- package/dist/image.mjs.map +1 -0
- package/dist/index.d.ts +46 -0
- package/dist/index.js +20198 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +912 -0
- package/dist/index.mjs.map +1 -0
- package/dist/input.d.mts +195 -0
- package/dist/input.d.ts +195 -0
- package/dist/input.js +1101 -0
- package/dist/input.js.map +1 -0
- package/dist/input.mjs +32 -0
- package/dist/input.mjs.map +1 -0
- package/dist/jsonEditor.d.mts +13 -0
- package/dist/jsonEditor.d.ts +13 -0
- package/dist/jsonEditor.js +247 -0
- package/dist/jsonEditor.js.map +1 -0
- package/dist/jsonEditor.mjs +9 -0
- package/dist/jsonEditor.mjs.map +1 -0
- package/dist/list.d.mts +83 -0
- package/dist/list.d.ts +83 -0
- package/dist/list.js +564 -0
- package/dist/list.js.map +1 -0
- package/dist/list.mjs +39 -0
- package/dist/list.mjs.map +1 -0
- package/dist/loading.d.mts +48 -0
- package/dist/loading.d.ts +48 -0
- package/dist/loading.js +383 -0
- package/dist/loading.js.map +1 -0
- package/dist/loading.mjs +23 -0
- package/dist/loading.mjs.map +1 -0
- package/dist/markdown.d.mts +14 -0
- package/dist/markdown.d.ts +14 -0
- package/dist/markdown.js +25927 -0
- package/dist/markdown.js.map +1 -0
- package/dist/markdown.mjs +25623 -0
- package/dist/markdown.mjs.map +1 -0
- package/dist/menu.d.mts +368 -0
- package/dist/menu.d.ts +368 -0
- package/dist/menu.js +1571 -0
- package/dist/menu.js.map +1 -0
- package/dist/menu.mjs +43 -0
- package/dist/menu.mjs.map +1 -0
- package/dist/modal.d.mts +90 -0
- package/dist/modal.d.ts +90 -0
- package/dist/modal.js +883 -0
- package/dist/modal.js.map +1 -0
- package/dist/modal.mjs +25 -0
- package/dist/modal.mjs.map +1 -0
- package/dist/overlay.d.mts +2 -0
- package/dist/overlay.d.ts +2 -0
- package/dist/overlay.js +46 -0
- package/dist/overlay.js.map +1 -0
- package/dist/overlay.mjs +10 -0
- package/dist/overlay.mjs.map +1 -0
- package/dist/paper.d.mts +38 -0
- package/dist/paper.d.ts +38 -0
- package/dist/paper.js +90 -0
- package/dist/paper.js.map +1 -0
- package/dist/paper.mjs +12 -0
- package/dist/paper.mjs.map +1 -0
- package/dist/patterns.d.mts +133 -0
- package/dist/patterns.d.ts +133 -0
- package/dist/patterns.js +483 -0
- package/dist/patterns.js.map +1 -0
- package/dist/patterns.mjs +46 -0
- package/dist/patterns.mjs.map +1 -0
- package/dist/process.d.mts +125 -0
- package/dist/process.d.ts +125 -0
- package/dist/process.js +1471 -0
- package/dist/process.js.map +1 -0
- package/dist/process.mjs +30 -0
- package/dist/process.mjs.map +1 -0
- package/dist/progress.d.mts +44 -0
- package/dist/progress.d.ts +44 -0
- package/dist/progress.js +94 -0
- package/dist/progress.js.map +1 -0
- package/dist/progress.mjs +14 -0
- package/dist/progress.mjs.map +1 -0
- package/dist/resizablePanel.d.mts +297 -0
- package/dist/resizablePanel.d.ts +297 -0
- package/dist/resizablePanel.js +122 -0
- package/dist/resizablePanel.js.map +1 -0
- package/dist/resizablePanel.mjs +22 -0
- package/dist/resizablePanel.mjs.map +1 -0
- package/dist/scrollToLoad.d.mts +41 -0
- package/dist/scrollToLoad.d.ts +41 -0
- package/dist/scrollToLoad.js +256 -0
- package/dist/scrollToLoad.js.map +1 -0
- package/dist/scrollToLoad.mjs +16 -0
- package/dist/scrollToLoad.mjs.map +1 -0
- package/dist/select.d.mts +50 -0
- package/dist/select.d.ts +50 -0
- package/dist/select.js +426 -0
- package/dist/select.js.map +1 -0
- package/dist/select.mjs +24 -0
- package/dist/select.mjs.map +1 -0
- package/dist/skeleton.d.mts +13 -0
- package/dist/skeleton.d.ts +13 -0
- package/dist/skeleton.js +68 -0
- package/dist/skeleton.js.map +1 -0
- package/dist/skeleton.mjs +11 -0
- package/dist/skeleton.mjs.map +1 -0
- package/dist/slider.d.mts +65 -0
- package/dist/slider.d.ts +65 -0
- package/dist/slider.js +106 -0
- package/dist/slider.js.map +1 -0
- package/dist/slider.mjs +10 -0
- package/dist/slider.mjs.map +1 -0
- package/dist/stepper.d.mts +98 -0
- package/dist/stepper.d.ts +98 -0
- package/dist/stepper.js +313 -0
- package/dist/stepper.js.map +1 -0
- package/dist/stepper.mjs +38 -0
- package/dist/stepper.mjs.map +1 -0
- package/dist/switch.d.mts +151 -0
- package/dist/switch.d.ts +151 -0
- package/dist/switch.js +289 -0
- package/dist/switch.js.map +1 -0
- package/dist/switch.mjs +17 -0
- package/dist/switch.mjs.map +1 -0
- package/dist/tab.d.mts +182 -0
- package/dist/tab.d.ts +182 -0
- package/dist/tab.js +1418 -0
- package/dist/tab.js.map +1 -0
- package/dist/tab.mjs +34 -0
- package/dist/tab.mjs.map +1 -0
- package/dist/table.d.mts +720 -0
- package/dist/table.d.ts +720 -0
- package/dist/table.js +10882 -0
- package/dist/table.js.map +1 -0
- package/dist/table.mjs +63 -0
- package/dist/table.mjs.map +1 -0
- package/dist/theme.d.mts +30 -4
- package/dist/theme.d.ts +30 -4
- package/dist/theme.js +3210 -170
- package/dist/theme.js.map +1 -1
- package/dist/theme.mjs +52 -230
- package/dist/theme.mjs.map +1 -1
- package/dist/timeline.d.mts +30 -0
- package/dist/timeline.d.ts +30 -0
- package/dist/timeline.js +273 -0
- package/dist/timeline.js.map +1 -0
- package/dist/timeline.mjs +14 -0
- package/dist/timeline.mjs.map +1 -0
- package/dist/toggleButtonGroup.d.mts +125 -0
- package/dist/toggleButtonGroup.d.ts +125 -0
- package/dist/toggleButtonGroup.js +190 -0
- package/dist/toggleButtonGroup.js.map +1 -0
- package/dist/toggleButtonGroup.mjs +15 -0
- package/dist/toggleButtonGroup.mjs.map +1 -0
- package/dist/tooltip.d.mts +13 -0
- package/dist/tooltip.d.ts +13 -0
- package/dist/tooltip.js +56 -0
- package/dist/tooltip.js.map +1 -0
- package/dist/tooltip.mjs +10 -0
- package/dist/tooltip.mjs.map +1 -0
- package/dist/typography.d.mts +21 -23
- package/dist/typography.d.ts +21 -23
- package/dist/typography.js +37 -63
- package/dist/typography.js.map +1 -1
- package/dist/typography.mjs +2 -1
- package/dist/useForm.d.mts +588 -0
- package/dist/useForm.d.ts +588 -0
- package/dist/useForm.js +8743 -0
- package/dist/useForm.js.map +1 -0
- package/dist/useForm.mjs +45 -0
- package/dist/useForm.mjs.map +1 -0
- package/dist/useSearch.d.mts +126 -0
- package/dist/useSearch.d.ts +126 -0
- package/dist/useSearch.js +1125 -0
- package/dist/useSearch.js.map +1 -0
- package/dist/useSearch.mjs +42 -0
- package/dist/useSearch.mjs.map +1 -0
- package/dist/variablesRenderer.d.mts +45 -0
- package/dist/variablesRenderer.d.ts +45 -0
- package/dist/variablesRenderer.js +511 -0
- package/dist/variablesRenderer.js.map +1 -0
- package/dist/variablesRenderer.mjs +21 -0
- package/dist/variablesRenderer.mjs.map +1 -0
- package/package.json +109 -15
- package/dist/chunk-PKADXEAD.mjs +0 -116
- package/dist/chunk-PKADXEAD.mjs.map +0 -1
- package/dist/chunk-YGBJCPUS.mjs +0 -88
- package/dist/chunk-YGBJCPUS.mjs.map +0 -1
- package/dist/theme.css +0 -44
- 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/index.ts","../src/components/elemental/Box/src/index.ts","../src/components/elemental/Box/index.ts","../src/components/elemental/Checkbox/src/Checkbox/theme.ts","../src/components/elemental/Checkbox/src/Checkbox/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/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/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/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/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/Icons/MuiIcon/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/compound/UseForm/src/_utils/constants.ts","../src/components/compound/UseForm/src/_utils/helpers.ts","../src/components/elemental/Input/src/TextField/theme.ts","../src/components/elemental/Input/src/TextField/index.ts","../src/components/compound/UseForm/src/_utils/helperText.tsx","../src/components/elemental/Overlay/src/index.ts","../src/components/elemental/Overlay/index.ts","../src/components/compound/UseForm/src/Fields/Explanation.tsx","../src/components/elemental/Divider/src/theme.ts","../src/components/elemental/Divider/src/index.ts","../src/components/elemental/Divider/index.ts","../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/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/index.ts","../src/components/elemental/Menu/src/DetailMenu/index.ts","../src/components/elemental/Menu/src/ModelMenu/index.ts","../src/components/elemental/Menu/src/ModelPicker/index.ts","../src/components/elemental/Menu/src/index.ts","../src/components/elemental/Menu/index.ts","../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/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/compound/UseForm/src/Fields/DateField.tsx","../src/components/compound/UseForm/src/Fields/DateTimeField.tsx","../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","../src/components/compound/UseForm/src/Fields/TelField.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/compound/UseForm/src/Fields/FileUploadField.tsx","../src/_utils/_const/classNames.ts","../src/components/elemental/Skeleton/MuiSkeleton/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/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/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","../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/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/Image/src/Cropper/sections/CropperControlsSection.tsx","../src/components/elemental/Image/src/Cropper/sections/CropperActionSection.tsx","../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/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/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/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/components/compound/UseForm/src/Fields/AutocompleteField.tsx","../src/components/compound/Table/index.ts","../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/elemental/Stepper/index.ts","../src/components/elemental/Stepper/src/StandardStepper.tsx","../src/components/elemental/Stepper/src/theme.ts","../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/elemental/Select/src/MuiSelect/MuiSelect.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/elemental/ToggleButtonGroup/src/ToggleButtonGroup/ToggleButtonGroup.tsx","../src/components/compound/UseForm/src/Fields/SwitchField.tsx","../src/components/elemental/Switch/src/Switch/MuiSwitch.tsx","../src/components/elemental/Switch/src/Switch/themes.ts","../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/elemental/Progress/src/CircularProgress.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/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"],"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'","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'","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 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 { 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 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 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","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';","// 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'","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'","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 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'","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","export { default as ClickAwayListener } from '@mui/material/ClickAwayListener';\nexport { default as Popper } from '@mui/material/Popper';\n","export * from './src';\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 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 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'\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}","export {default as useMenu, MenuPopper} from './useMenu'\nexport {default as IconMenu} from './IconMenu'","export { DetailMenu, default } from './DetailMenu'\nexport type { DetailMenuOption, DetailMenuProps } from './DetailMenu'\n","export { ModelMenu, default } from './ModelMenu'\nexport type { ModelBrand, ModelMenuOption, ModelMenuProps } from './ModelMenu'\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 { 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 {\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 { 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","/**\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'","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 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 "n" 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 { 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","// 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","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'","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'","'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'","/*!\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'>λ</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γ<tspan baseline-shift='super' font-size='6'>μ</tspan>∂<tspan baseline-shift='sub' font-size='6'>μ</tspan>ψ=mψ</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'>Σ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=σ(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'>√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=-Σ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ℏ</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'>∂ψ</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'>∂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'>ℏ<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'>∇<tspan baseline-shift='super' font-size='5.5'>2</tspan>ψ+Vψ</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 {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 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 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 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 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 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'","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","export * from './src';\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","// 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 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","'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 { 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","'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 { 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 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 { 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 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 { 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 { 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"],"mappings":"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;AAAA,UACP,SAAQ;AAAA,QACV;AAAA,QACA,oBAAoB;AAAA,UAClB,SAAS;AAAA,UAET,QAAO;AAAA,UACP,aAAY;AAAA,QACd;AAAA,QACA,yBAAyB;AAAA,UACvB,UAAU;AAAA,UACV,cAAc;AAAA,UACd,OAAO;AAAA,UACP,QAAO;AAAA,QACT;AAAA,QAEA,sBAAqB;AAAA,UACnB,UAAU;AAAA,QACZ;AAAA,MACF;AAAA,IACF,EAAE;AACF,IAAO,oBAAQ;AAAA;AAAA;;;AC/Df,IAAAC,kBAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAC,YAAA;AAAA;AAAA;AAAA,IAAAC;AACA,IAAAC;AACA,IAAAC;AAAA;AAAA;;;ACFA,IAAAC,eAAA;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,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","names":["FormLabel","init_theme","init_FormLabel","init_theme","FormControlLabel","import_jsx_runtime","init_theme","init_FormControlLabel","init_theme","init_src","init_FormLabel","init_FormControlLabel","init_src","MuiFormGroup","import_jsx_runtime","init_CheckboxGroup","init_src","init_CheckboxGroup","init_Checkbox","init_src","Paper","import_jsx_runtime","import_Paper","Paper","init_themes","init_Paper","init_themes","init_src","init_Paper","init_Paper","init_src","MuiButton","import_jsx_runtime","init_themes","init_Button","init_themes","init_theme","init_theme","init_src","init_Tooltip","init_src","import_jsx_runtime","init_Tooltip","MuiIconButton","init_theme","init_IconButton","init_theme","MuiChip","import_jsx_runtime","init_themes","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","import_PhotoSizeSelectLarge","import_Close","import_Person","import_DeleteForever","import_AccountTreeOutlined","Typography","import_Typography","import_jsx_runtime","init_theme","init_src","init_theme","init_Typography","init_src","init_theme","init_theme","import_jsx_runtime","init_src","init_src","import_react","import_styles","import_jsx_runtime","init_Tooltip","init_Button","init_theme","init_src","init_theme","init_src","init_theme","init_theme","init_src","init_List","init_src","import_ListItemIcon","import_styles","MenuItem","ListItemIcon","import_react","import_ListItemText","import_styles","import_jsx_runtime","ListItemText","MenuList","init_theme","import_MenuItem","init_Menu","init_theme","import_react","import_jsx_runtime","init_Paper","init_Menu","init_useMenu","init_src","init_Menu","init_useMenu","init_Menu","init_src","init_theme","init_theme","init_src","init_Slider","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_react_hook_form","import_jsx_runtime","dayjs","import_react_hook_form","import_dayjs","import_jsx_runtime","dayjs","init_theme","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","import_react_hook_form","import_jsx_runtime","init_TelPhoneInput","init_theme","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","import_react_hook_form","import_jsx_runtime","MuiAvatar","import_jsx_runtime","init_Typography","init_themes","import_jsx_runtime","init_Button","init_themes","init_Avatar","init_themes","MuiBadge","import_jsx_runtime","init_theme","init_Badge","init_theme","init_src","init_Badge","init_Badge","init_src","import_styles","import_jsx_runtime","init_Badge","init_StatusAvatar","init_src","init_Avatar","init_StatusAvatar","init_Avatar","init_src","exports","module","init_const","init_theme","classnames","Modal","Tooltip","import_react","import_material","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","init_theme","import_jsx_runtime","init_theme","ReactCrop","import_jsx_runtime","import_jsx_runtime","init_Slider","init_Typography","import_jsx_runtime","init_Button","React","import_react","import_jsx_runtime","React","import_react","import_react_image_crop","import_jsx_runtime","init_Cropper","init_src","init_Cropper","init_src","import_react","import_react_hook_form","import_jsx_runtime","init_Avatar","React","init","init_theme","import_styles","import_jsx_runtime","CodeMirror","import_react","import_styles","import_jsx_runtime","CodeEditor","StyledWrapper","init_theme","React","OriginalJsonEditor","init_JsonEditor","init_src","init_JsonEditor","init_JsonEditor","init_src","import_react_hook_form","import_jsx_runtime","init_JsonEditor","import_styles","init_theme","import_jsx_runtime","init_Button","init_Typography","init_theme","import_react","import_jsx_runtime","init_states","import_styles","init_Paper","init_theme","init_const","init_const","init_utils","init_const","id","Autocomplete","options","InputBase","import_react","import_Autocomplete","import_jsx_runtime","init_Typography","init_Button","init_utils","init_states","import_react","import_jsx_runtime","init_Typography","init_Button","init_Badge","init_theme","init_states","init_GitHubPicker","init_utils","init_src","init_GitHubPicker","init_src","React","import_react","import_react_hook_form","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","init_Button","import_jsx_runtime","import_react_hook_form","import_react","import_jsx_runtime","React","React","import_jsx_runtime","getNames","import_react","import_react_hook_form","import_jsx_runtime","import_react_hook_form","import_react","init_List","init_Menu","import_styles","import_jsx_runtime","MuiSelect","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_styles","import_jsx_runtime","MuiToggleButtonGroup","MuiToggleButton","import_jsx_runtime","import_react_hook_form","import_jsx_runtime","Switch","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","import_react_hook_form","init_Button","import_jsx_runtime","MuiCircularProgress","import_jsx_runtime","import_react","import_jsx_runtime","React","import_react","init_Button","import_react","import_jsx_runtime","React","import_jsx_runtime","React","import_jsx_runtime","React","import_react","init_Checkbox","init_Typography","import_jsx_runtime","React","import_material","import_react","React","next","import_react","init_Button","init_Tooltip","import_jsx_runtime","React","import_react","init_Tooltip","init_Button","import_jsx_runtime","React","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","import_jsx_runtime","React","import_jsx_runtime","Header","import_jsx_runtime","React","table","import_material","init_Tooltip","init_Typography","import_jsx_runtime"]}
|