@startdownnotez404/ui 1.3.5 → 1.3.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (254) hide show
  1. package/dist/AutocompleteField-653233JU.mjs +203 -0
  2. package/dist/AutocompleteField-653233JU.mjs.map +1 -0
  3. package/dist/AvatarField-KFASMVZU.mjs +378 -0
  4. package/dist/AvatarField-KFASMVZU.mjs.map +1 -0
  5. package/dist/{DateField-ZYMZFHL4.mjs → DateField-CDJ6W6XF.mjs} +19 -7
  6. package/dist/DateField-CDJ6W6XF.mjs.map +1 -0
  7. package/dist/DateRangeField-ZWSFT5KV.mjs +118 -0
  8. package/dist/DateRangeField-ZWSFT5KV.mjs.map +1 -0
  9. package/dist/{DateTimeField-TPTJ7YIZ.mjs → DateTimeField-SFAF4I6A.mjs} +36 -11
  10. package/dist/DateTimeField-SFAF4I6A.mjs.map +1 -0
  11. package/dist/FileUploadField-TSNCSLXX.mjs +101 -0
  12. package/dist/FileUploadField-TSNCSLXX.mjs.map +1 -0
  13. package/dist/{JSONEditorField-TMRWGXVR.mjs → JSONEditorField-3KXC2GOG.mjs} +7 -6
  14. package/dist/{JSONEditorField-TMRWGXVR.mjs.map → JSONEditorField-3KXC2GOG.mjs.map} +1 -1
  15. package/dist/{PopperMenu-LJ36RPBW.mjs → PopperMenu-PSHLKIEZ.mjs} +26 -12
  16. package/dist/{PopperMenu-LJ36RPBW.mjs.map → PopperMenu-PSHLKIEZ.mjs.map} +1 -1
  17. package/dist/{TelField-LOGRVZ4I.mjs → TelField-FRQT2UBJ.mjs} +8 -7
  18. package/dist/{TelField-LOGRVZ4I.mjs.map → TelField-FRQT2UBJ.mjs.map} +1 -1
  19. package/dist/TimeField-XVWXBJID.mjs +94 -0
  20. package/dist/TimeField-XVWXBJID.mjs.map +1 -0
  21. package/dist/alert.d.mts +148 -18
  22. package/dist/alert.d.ts +148 -18
  23. package/dist/alert.js +698 -254
  24. package/dist/alert.js.map +1 -1
  25. package/dist/alert.mjs +46 -10
  26. package/dist/autocomplete.d.mts +438 -4
  27. package/dist/autocomplete.d.ts +438 -4
  28. package/dist/autocomplete.js +632 -21
  29. package/dist/autocomplete.js.map +1 -1
  30. package/dist/autocomplete.mjs +26 -7
  31. package/dist/avatar.js +2 -1
  32. package/dist/avatar.js.map +1 -1
  33. package/dist/avatar.mjs +12 -11
  34. package/dist/box.mjs +2 -1
  35. package/dist/button.mjs +3 -2
  36. package/dist/chart.mjs +3 -2
  37. package/dist/checkbox.mjs +3 -2
  38. package/dist/chunk-2FK24ZPJ.mjs +78 -0
  39. package/dist/chunk-2FK24ZPJ.mjs.map +1 -0
  40. package/dist/{chunk-V26V2S3W.mjs → chunk-3O3N6X6D.mjs} +3 -3
  41. package/dist/{chunk-Y74ALKBL.mjs → chunk-4MSPA7U7.mjs} +11 -9
  42. package/dist/{chunk-Y74ALKBL.mjs.map → chunk-4MSPA7U7.mjs.map} +1 -1
  43. package/dist/{chunk-24XDGNJ6.mjs → chunk-4P45Z5LR.mjs} +63 -41
  44. package/dist/chunk-4P45Z5LR.mjs.map +1 -0
  45. package/dist/chunk-4SSJY32J.mjs +1182 -0
  46. package/dist/chunk-4SSJY32J.mjs.map +1 -0
  47. package/dist/{chunk-XJ2SXC2Q.mjs → chunk-6B6I27TT.mjs} +18 -16
  48. package/dist/{chunk-XJ2SXC2Q.mjs.map → chunk-6B6I27TT.mjs.map} +1 -1
  49. package/dist/chunk-6JKMEH2L.mjs +205 -0
  50. package/dist/chunk-6JKMEH2L.mjs.map +1 -0
  51. package/dist/{chunk-IN3O4R7Q.mjs → chunk-7O526A2D.mjs} +6 -4
  52. package/dist/{chunk-IN3O4R7Q.mjs.map → chunk-7O526A2D.mjs.map} +1 -1
  53. package/dist/chunk-AFLEG5ZC.mjs +28 -0
  54. package/dist/chunk-AFLEG5ZC.mjs.map +1 -0
  55. package/dist/{chunk-UGMRJMFZ.mjs → chunk-BO5CU4ZM.mjs} +4 -4
  56. package/dist/{chunk-JIU5GVM7.mjs → chunk-D4XPNSSI.mjs} +5 -3
  57. package/dist/{chunk-JIU5GVM7.mjs.map → chunk-D4XPNSSI.mjs.map} +1 -1
  58. package/dist/chunk-DPIMA5IO.mjs +72 -0
  59. package/dist/chunk-DPIMA5IO.mjs.map +1 -0
  60. package/dist/chunk-F2CGFVIZ.mjs +83 -0
  61. package/dist/chunk-F2CGFVIZ.mjs.map +1 -0
  62. package/dist/{chunk-R5MKQN6D.mjs → chunk-FBLSJQWK.mjs} +3 -3
  63. package/dist/{chunk-BGB7JHIU.mjs → chunk-FMGZCOJC.mjs} +5 -3
  64. package/dist/{chunk-BGB7JHIU.mjs.map → chunk-FMGZCOJC.mjs.map} +1 -1
  65. package/dist/{chunk-UTVSYS6S.mjs → chunk-FNSIQ2B7.mjs} +18 -6
  66. package/dist/chunk-FNSIQ2B7.mjs.map +1 -0
  67. package/dist/{chunk-JWANK42G.mjs → chunk-FUZ2JNTZ.mjs} +3 -3
  68. package/dist/{chunk-CRYIEYZZ.mjs → chunk-HAJWE62X.mjs} +66 -42
  69. package/dist/chunk-HAJWE62X.mjs.map +1 -0
  70. package/dist/{chunk-CWFWRZWU.mjs → chunk-KSN33A6I.mjs} +3 -2
  71. package/dist/{chunk-CWFWRZWU.mjs.map → chunk-KSN33A6I.mjs.map} +1 -1
  72. package/dist/chunk-KYTHGFFY.mjs +866 -0
  73. package/dist/chunk-KYTHGFFY.mjs.map +1 -0
  74. package/dist/{chunk-QKGCW37O.mjs → chunk-LDFM46LV.mjs} +5 -3
  75. package/dist/{chunk-QKGCW37O.mjs.map → chunk-LDFM46LV.mjs.map} +1 -1
  76. package/dist/chunk-LQNDBPHU.mjs +142 -0
  77. package/dist/chunk-LQNDBPHU.mjs.map +1 -0
  78. package/dist/{chunk-E3I2VDHZ.mjs → chunk-M2PYXSAF.mjs} +6 -4
  79. package/dist/{chunk-E3I2VDHZ.mjs.map → chunk-M2PYXSAF.mjs.map} +1 -1
  80. package/dist/{chunk-DELCADNF.mjs → chunk-ODVKRIVN.mjs} +30 -30
  81. package/dist/{chunk-HR3A4H4E.mjs → chunk-PEJL2T2K.mjs} +13 -11
  82. package/dist/{chunk-HR3A4H4E.mjs.map → chunk-PEJL2T2K.mjs.map} +1 -1
  83. package/dist/{chunk-OGNGPI3M.mjs → chunk-PL55YKT4.mjs} +2 -2
  84. package/dist/{chunk-S6EZVRZC.mjs → chunk-PNSJC6PC.mjs} +5 -28
  85. package/dist/chunk-PNSJC6PC.mjs.map +1 -0
  86. package/dist/{chunk-TDRA5EZI.mjs → chunk-PUREEN2J.mjs} +7 -7
  87. package/dist/chunk-QFS5CENY.mjs +659 -0
  88. package/dist/chunk-QFS5CENY.mjs.map +1 -0
  89. package/dist/chunk-RSN7NH2J.mjs +250 -0
  90. package/dist/chunk-RSN7NH2J.mjs.map +1 -0
  91. package/dist/{chunk-UDREPVEY.mjs → chunk-RVSMEZE3.mjs} +12 -78
  92. package/dist/chunk-RVSMEZE3.mjs.map +1 -0
  93. package/dist/{chunk-SRWPHN2N.mjs → chunk-S64IYJ6Y.mjs} +2 -2
  94. package/dist/{chunk-ZG3NQI77.mjs → chunk-SMD7OEUW.mjs} +6 -4
  95. package/dist/{chunk-ZG3NQI77.mjs.map → chunk-SMD7OEUW.mjs.map} +1 -1
  96. package/dist/{chunk-NJYNJLT7.mjs → chunk-SWFB3A3G.mjs} +2 -2
  97. package/dist/{chunk-RXBQ7KXF.mjs → chunk-USXGNKWJ.mjs} +98 -44
  98. package/dist/chunk-USXGNKWJ.mjs.map +1 -0
  99. package/dist/{chunk-OJV6V7YZ.mjs → chunk-VL7V52YD.mjs} +27 -20
  100. package/dist/chunk-VL7V52YD.mjs.map +1 -0
  101. package/dist/{chunk-2ZZJTBTE.mjs → chunk-WJZ3IYET.mjs} +2 -2
  102. package/dist/chunk-XAJAMVAG.mjs +1720 -0
  103. package/dist/chunk-XAJAMVAG.mjs.map +1 -0
  104. package/dist/chunk-YIJ5QVJ6.mjs +277 -0
  105. package/dist/chunk-YIJ5QVJ6.mjs.map +1 -0
  106. package/dist/{chunk-T6AMRENK.mjs → chunk-YRW5NKD7.mjs} +148 -112
  107. package/dist/chunk-YRW5NKD7.mjs.map +1 -0
  108. package/dist/chunk-ZMJKG2UI.mjs +71 -0
  109. package/dist/chunk-ZMJKG2UI.mjs.map +1 -0
  110. package/dist/confirm.d.mts +48 -0
  111. package/dist/confirm.d.ts +48 -0
  112. package/dist/confirm.js +334 -0
  113. package/dist/confirm.js.map +1 -0
  114. package/dist/confirm.mjs +20 -0
  115. package/dist/datePicker.d.mts +256 -14
  116. package/dist/datePicker.d.ts +256 -14
  117. package/dist/datePicker.js +1624 -145
  118. package/dist/datePicker.js.map +1 -1
  119. package/dist/datePicker.mjs +19 -6
  120. package/dist/dialog.d.mts +166 -0
  121. package/dist/dialog.d.ts +166 -0
  122. package/dist/dialog.js +362 -0
  123. package/dist/dialog.js.map +1 -0
  124. package/dist/dialog.mjs +45 -0
  125. package/dist/emptyState.d.mts +17 -0
  126. package/dist/emptyState.d.ts +17 -0
  127. package/dist/emptyState.js +253 -0
  128. package/dist/emptyState.js.map +1 -0
  129. package/dist/emptyState.mjs +12 -0
  130. package/dist/emptyState.mjs.map +1 -0
  131. package/dist/errorState.d.mts +18 -0
  132. package/dist/errorState.d.ts +18 -0
  133. package/dist/{displayFile.js → errorState.js} +107 -156
  134. package/dist/errorState.js.map +1 -0
  135. package/dist/errorState.mjs +15 -0
  136. package/dist/errorState.mjs.map +1 -0
  137. package/dist/fileUpload.d.mts +197 -0
  138. package/dist/fileUpload.d.ts +197 -0
  139. package/dist/fileUpload.js +1483 -0
  140. package/dist/fileUpload.js.map +1 -0
  141. package/dist/fileUpload.mjs +65 -0
  142. package/dist/fileUpload.mjs.map +1 -0
  143. package/dist/flowMap.mjs +7 -6
  144. package/dist/flowMap.mjs.map +1 -1
  145. package/dist/image.js +1195 -429
  146. package/dist/image.js.map +1 -1
  147. package/dist/image.mjs +8 -6
  148. package/dist/index.d.ts +7 -2
  149. package/dist/index.js +8606 -4087
  150. package/dist/index.js.map +1 -1
  151. package/dist/index.mjs +314 -152
  152. package/dist/inlineError.d.mts +16 -0
  153. package/dist/inlineError.d.ts +16 -0
  154. package/dist/inlineError.js +297 -0
  155. package/dist/inlineError.js.map +1 -0
  156. package/dist/inlineError.mjs +15 -0
  157. package/dist/inlineError.mjs.map +1 -0
  158. package/dist/input.mjs +8 -7
  159. package/dist/jsonEditor.mjs +3 -2
  160. package/dist/list.mjs +7 -6
  161. package/dist/loading.mjs +8 -6
  162. package/dist/markdown.mjs +7 -6
  163. package/dist/markdown.mjs.map +1 -1
  164. package/dist/menu.mjs +9 -8
  165. package/dist/modal.js +2 -1
  166. package/dist/modal.js.map +1 -1
  167. package/dist/modal.mjs +7 -5
  168. package/dist/process.d.mts +33 -75
  169. package/dist/process.d.ts +33 -75
  170. package/dist/process.js +1275 -203
  171. package/dist/process.js.map +1 -1
  172. package/dist/process.mjs +12 -9
  173. package/dist/scrollToLoad.mjs +4 -3
  174. package/dist/select.mjs +10 -9
  175. package/dist/skeleton.d.mts +15 -1
  176. package/dist/skeleton.d.ts +15 -1
  177. package/dist/skeleton.js +114 -2
  178. package/dist/skeleton.js.map +1 -1
  179. package/dist/skeleton.mjs +6 -3
  180. package/dist/stepper.mjs +4 -3
  181. package/dist/tab.mjs +10 -9
  182. package/dist/table.d.mts +269 -85
  183. package/dist/table.d.ts +269 -85
  184. package/dist/table.js +5102 -3153
  185. package/dist/table.js.map +1 -1
  186. package/dist/table.mjs +21 -19
  187. package/dist/theme.js +1766 -432
  188. package/dist/theme.js.map +1 -1
  189. package/dist/theme.mjs +32 -25
  190. package/dist/timeline.mjs +4 -3
  191. package/dist/toast.d.mts +49 -0
  192. package/dist/toast.d.ts +49 -0
  193. package/dist/toast.js +175 -0
  194. package/dist/toast.js.map +1 -0
  195. package/dist/toast.mjs +9 -0
  196. package/dist/toast.mjs.map +1 -0
  197. package/dist/toggleButtonGroup.mjs +3 -2
  198. package/dist/useForm.d.mts +270 -86
  199. package/dist/useForm.d.ts +270 -86
  200. package/dist/useForm.js +4672 -2727
  201. package/dist/useForm.js.map +1 -1
  202. package/dist/useForm.mjs +18 -16
  203. package/dist/useSearch.mjs +13 -12
  204. package/dist/variablesRenderer.mjs +8 -7
  205. package/package.json +3 -3
  206. package/dist/AutocompleteField-ZKNU2IRR.mjs +0 -181
  207. package/dist/AutocompleteField-ZKNU2IRR.mjs.map +0 -1
  208. package/dist/AvatarField-SAODT3CZ.mjs +0 -275
  209. package/dist/AvatarField-SAODT3CZ.mjs.map +0 -1
  210. package/dist/DateField-ZYMZFHL4.mjs.map +0 -1
  211. package/dist/DateTimeField-TPTJ7YIZ.mjs.map +0 -1
  212. package/dist/FileUploadField-NTMWBJER.mjs +0 -78
  213. package/dist/FileUploadField-NTMWBJER.mjs.map +0 -1
  214. package/dist/chunk-24XDGNJ6.mjs.map +0 -1
  215. package/dist/chunk-27KYFU7R.mjs +0 -30
  216. package/dist/chunk-27KYFU7R.mjs.map +0 -1
  217. package/dist/chunk-AAH2O24U.mjs +0 -325
  218. package/dist/chunk-AAH2O24U.mjs.map +0 -1
  219. package/dist/chunk-CRYIEYZZ.mjs.map +0 -1
  220. package/dist/chunk-EEH7HACG.mjs +0 -249
  221. package/dist/chunk-EEH7HACG.mjs.map +0 -1
  222. package/dist/chunk-EKPULYPU.mjs +0 -497
  223. package/dist/chunk-EKPULYPU.mjs.map +0 -1
  224. package/dist/chunk-OJV6V7YZ.mjs.map +0 -1
  225. package/dist/chunk-RXBQ7KXF.mjs.map +0 -1
  226. package/dist/chunk-S6EZVRZC.mjs.map +0 -1
  227. package/dist/chunk-SGCUDWO3.mjs +0 -396
  228. package/dist/chunk-SGCUDWO3.mjs.map +0 -1
  229. package/dist/chunk-T6AMRENK.mjs.map +0 -1
  230. package/dist/chunk-UDREPVEY.mjs.map +0 -1
  231. package/dist/chunk-UTVSYS6S.mjs.map +0 -1
  232. package/dist/chunk-XIMFP6RB.mjs +0 -161
  233. package/dist/chunk-XIMFP6RB.mjs.map +0 -1
  234. package/dist/displayFile.d.mts +0 -95
  235. package/dist/displayFile.d.ts +0 -95
  236. package/dist/displayFile.js.map +0 -1
  237. package/dist/displayFile.mjs +0 -19
  238. package/dist/fileUploader.d.mts +0 -86
  239. package/dist/fileUploader.d.ts +0 -86
  240. package/dist/fileUploader.js +0 -722
  241. package/dist/fileUploader.js.map +0 -1
  242. package/dist/fileUploader.mjs +0 -16
  243. /package/dist/{chunk-V26V2S3W.mjs.map → chunk-3O3N6X6D.mjs.map} +0 -0
  244. /package/dist/{chunk-UGMRJMFZ.mjs.map → chunk-BO5CU4ZM.mjs.map} +0 -0
  245. /package/dist/{chunk-R5MKQN6D.mjs.map → chunk-FBLSJQWK.mjs.map} +0 -0
  246. /package/dist/{chunk-JWANK42G.mjs.map → chunk-FUZ2JNTZ.mjs.map} +0 -0
  247. /package/dist/{chunk-DELCADNF.mjs.map → chunk-ODVKRIVN.mjs.map} +0 -0
  248. /package/dist/{chunk-OGNGPI3M.mjs.map → chunk-PL55YKT4.mjs.map} +0 -0
  249. /package/dist/{chunk-TDRA5EZI.mjs.map → chunk-PUREEN2J.mjs.map} +0 -0
  250. /package/dist/{chunk-SRWPHN2N.mjs.map → chunk-S64IYJ6Y.mjs.map} +0 -0
  251. /package/dist/{chunk-NJYNJLT7.mjs.map → chunk-SWFB3A3G.mjs.map} +0 -0
  252. /package/dist/{chunk-2ZZJTBTE.mjs.map → chunk-WJZ3IYET.mjs.map} +0 -0
  253. /package/dist/{displayFile.mjs.map → confirm.mjs.map} +0 -0
  254. /package/dist/{fileUploader.mjs.map → dialog.mjs.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  MenuPopper,
3
3
  useMenu
4
- } from "./chunk-HR3A4H4E.mjs";
4
+ } from "./chunk-PEJL2T2K.mjs";
5
5
  import {
6
6
  default109 as default5,
7
7
  default60 as default4
@@ -10,9 +10,11 @@ import {
10
10
  default as default3
11
11
  } from "./chunk-4RPFRNXG.mjs";
12
12
  import {
13
- default as default2,
13
+ default as default2
14
+ } from "./chunk-PNSJC6PC.mjs";
15
+ import {
14
16
  mergeSx
15
- } from "./chunk-S6EZVRZC.mjs";
17
+ } from "./chunk-AFLEG5ZC.mjs";
16
18
 
17
19
  // src/components/elemental/Tab/src/Tab/index.ts
18
20
  import { default as default6 } from "@mui/material/Tab";
@@ -929,4 +931,4 @@ export {
929
931
  tabPanelStyleToCssVars,
930
932
  TabPanel
931
933
  };
932
- //# sourceMappingURL=chunk-IN3O4R7Q.mjs.map
934
+ //# sourceMappingURL=chunk-7O526A2D.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/elemental/Tab/src/Tab/index.ts","../src/components/elemental/Tab/src/Tab/themes.ts","../src/components/elemental/Tab/src/TabPanel/TabPanel.tsx","../src/components/elemental/Tab/src/TabPanel/useTabsOverflow.ts","../src/components/elemental/Tab/src/TabPanel/tabPanelVars.ts"],"sourcesContent":["export { default as Tab } from '@mui/material/Tab'\nexport type { TabProps } from '@mui/material/Tab'\nexport { default as Tabs } from '@mui/material/Tabs'\nexport type { TabsProps } from '@mui/material/Tabs'\nexport * from './themes'","import type { MuiComponentTheme } from '@/_utils/_types'\n\nexport const tabTheme = {\n defaultProps: {\n disableRipple: true,\n },\n styleOverrides: {\n root: ({ theme }) => ({\n minHeight: 44,\n minWidth: 0,\n paddingInline: theme.spacing(1.5),\n paddingBlock: theme.spacing(1),\n borderRadius: theme.shape.borderRadius,\n textTransform: 'none',\n fontWeight: theme.typography.fontWeightMedium,\n color: 'var(--mui-palette-text-secondary)',\n transition: theme.transitions.create(['color', 'background-color'], {\n duration: theme.transitions.duration.shorter,\n }),\n '&:hover': {\n color: 'var(--mui-palette-primary-emphasis)',\n backgroundColor: 'color-mix(in lab, var(--mui-palette-primary-emphasis), transparent 92%)',\n },\n '&.Mui-selected': {\n color: 'var(--mui-palette-primary-emphasis)',\n backgroundColor: 'transparent',\n },\n '&.Mui-selected:hover': {\n backgroundColor: 'color-mix(in lab, var(--mui-palette-primary-emphasis), transparent 94%)',\n },\n '&.Mui-disabled': {\n color: 'var(--mui-palette-text-disabled)',\n },\n }),\n },\n} as const satisfies MuiComponentTheme<'MuiTab'>\n\nexport const tabsTheme = {\n styleOverrides: {\n root: {\n minHeight: 44,\n },\n list: {\n gap: 4,\n },\n indicator: {\n height: 3,\n borderRadius: 999,\n backgroundColor: 'var(--mui-palette-primary-emphasis)',\n },\n scrollButtons: {\n color: 'var(--mui-palette-text-secondary)',\n '&.Mui-disabled': {\n opacity: 0.4,\n },\n },\n },\n} as const satisfies MuiComponentTheme<'MuiTabs'>","'use client'\n\nimport React, {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport type { SxProps, Theme } from '@mui/material/styles'\n\nimport { mergeSx } from '@/_utils/_func'\nimport { Box } from '@/ele/Box'\nimport { Typography } from '@/ele/Typography'\nimport { KeyboardArrowDownIcon, MoreHorizIcon } from '@/icons/MuiIcon'\nimport { useMenu, MenuPopper } from '@/ele/Menu'\n\nimport type { TabPanelItem, TabPanelProps } from './types'\nimport { useTabsOverflowSplit } from './useTabsOverflow'\nimport {\n tabPanelRootSx,\n tabPanelStyleToCssVars,\n} from './tabPanelVars'\n\nconst TRACK_PAD = 3\nconst ITEM_GAP = 1\nconst DEFAULT_TRACK_RADIUS = 12\nconst DEFAULT_FOCUS_RADIUS = 10\n/** Keep in sync with `--tabpanel-indicator-ms` / `--tabpanel-indicator-ease`. */\nconst INDICATOR_EASE = 'cubic-bezier(0.32, 0.72, 0, 1)'\nconst INDICATOR_MS = 380\n\n/** Numbers are px so MUI does not multiply by theme.shape.borderRadius. */\nfunction toCssRadius(value: number | string): string {\n return typeof value === 'number' ? `${value}px` : value\n}\n\n/**\n * Commit WAAPI values to inline styles, then cancel so `fill: 'forwards'`\n * cannot leave a stale computed transform that fights Emotion/CSS classes.\n */\nfunction finishIndicatorAnimation(animation: Animation) {\n try {\n animation.commitStyles?.()\n } catch {\n // commitStyles can throw if the animation was already canceled.\n }\n animation.cancel()\n}\n\nfunction clearIndicatorAnimations(element: HTMLElement) {\n element.getAnimations().forEach((animation) => {\n finishIndicatorAnimation(animation)\n })\n}\n\nfunction resolveSelectedId(\n items: TabPanelItem[],\n value: string | undefined,\n internal: string | undefined\n): string | undefined {\n const candidate = value ?? internal\n if (candidate && items.some((item) => item.id === candidate && !item.disabled)) {\n return candidate\n }\n return items.find((item) => !item.disabled)?.id\n}\n\nfunction TabItemContent({\n item,\n showLabels,\n active,\n endAdornment,\n}: {\n item: TabPanelItem\n showLabels: boolean\n active: boolean\n endAdornment?: React.ReactNode\n}) {\n const showLabel = showLabels || !item.icon\n const badgeLabel =\n item.badge == null\n ? null\n : typeof item.badge === 'number' && item.badge > 99\n ? '99+'\n : String(item.badge)\n\n return (\n <Box\n sx={{\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n gap: 0.5,\n px: showLabels ? 1.15 : 0.9,\n py: 0.5,\n minHeight: 28,\n pr: endAdornment ? 0.75 : undefined,\n }}\n >\n {item.icon ? (\n <Box\n component=\"span\"\n sx={{\n display: 'inline-flex',\n color: 'inherit',\n lineHeight: 0,\n opacity: active ? 1 : 0.88,\n transition:\n 'opacity var(--tabpanel-indicator-ms) var(--tabpanel-indicator-ease)',\n '& > *': { fontSize: 16 },\n }}\n >\n {item.icon}\n </Box>\n ) : null}\n {showLabel ? (\n <Typography\n component=\"span\"\n sx={{\n m: 0,\n fontSize: '0.75rem',\n letterSpacing: '0.01em',\n fontWeight: active ? 600 : 500,\n color: 'inherit',\n lineHeight: 1.15,\n whiteSpace: 'nowrap',\n }}\n >\n {item.label}\n </Typography>\n ) : (\n <Typography\n component=\"span\"\n sx={{\n position: 'absolute',\n width: 1,\n height: 1,\n overflow: 'hidden',\n clip: 'rect(0 0 0 0)',\n }}\n >\n {item.label}\n </Typography>\n )}\n {endAdornment}\n {badgeLabel != null ? (\n <Box\n component=\"span\"\n aria-label={`${item.badge} notifications`}\n sx={{\n position: 'absolute',\n top: 1,\n right: endAdornment ? 10 : 1,\n zIndex: 1,\n pointerEvents: 'none',\n minWidth: 12,\n height: 12,\n px: 0.3,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 999,\n bgcolor: 'var(--tabpanel-badge-bg)',\n color: 'var(--tabpanel-badge-color)',\n fontSize: 8,\n fontWeight: 700,\n lineHeight: 1,\n }}\n >\n {badgeLabel}\n </Box>\n ) : null}\n </Box>\n )\n}\n\nfunction MoreTriggerContent({\n showLabels,\n open,\n}: {\n showLabels: boolean\n open: boolean\n}) {\n return (\n <Box\n sx={{\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n gap: 0.35,\n px: showLabels ? 1.15 : 0.9,\n py: 0.5,\n minHeight: 28,\n }}\n >\n <MoreHorizIcon sx={{ fontSize: 16 }} />\n {showLabels ? (\n <Typography\n component=\"span\"\n sx={{\n m: 0,\n fontSize: '0.75rem',\n fontWeight: 500,\n color: 'inherit',\n lineHeight: 1.15,\n whiteSpace: 'nowrap',\n }}\n >\n More\n </Typography>\n ) : null}\n <KeyboardArrowDownIcon\n sx={{\n fontSize: 14,\n opacity: 0.75,\n transition: 'transform 180ms ease',\n transform: open ? 'rotate(180deg)' : 'none',\n }}\n />\n </Box>\n )\n}\n\n/**\n * Adaptive content tabs: soft liquid track + morphing pill.\n * Overflow cuts trailing tabs into a More dropdown (selected stays visible).\n *\n * Colors / radii are CSS vars on the root (`tabPanelRootSx`). Override via\n * `sx`, `slotProps.root.style`, or `slotProps.root.sx`.\n */\nexport function TabPanel({\n items,\n value,\n defaultValue,\n onChange,\n showLabels = true,\n focusRadius = DEFAULT_FOCUS_RADIUS,\n trackRadius = DEFAULT_TRACK_RADIUS,\n sx,\n className,\n slotProps,\n}: TabPanelProps) {\n const isControlled = value !== undefined\n const [internalValue, setInternalValue] = useState<string | undefined>(\n () => defaultValue ?? items.find((item) => !item.disabled)?.id\n )\n\n const selectedId = resolveSelectedId(items, value, internalValue)\n\n const select = useCallback(\n (id: string) => {\n const item = items.find((entry) => entry.id === id)\n if (!item || item.disabled) {\n return\n }\n if (!isControlled) {\n setInternalValue(id)\n }\n onChange?.(id)\n },\n [isControlled, items, onChange]\n )\n\n const rootRef = useRef<HTMLDivElement>(null)\n const stripRef = useRef<HTMLDivElement>(null)\n const measureRef = useRef<HTMLDivElement>(null)\n const moreMeasureRef = useRef<HTMLDivElement>(null)\n const indicatorRef = useRef<HTMLDivElement>(null)\n const itemRefs = useRef<Map<string, HTMLButtonElement>>(new Map())\n const indicatorRectRef = useRef({ top: 0, left: 0, width: 0, height: 0 })\n const indicatorMountedRef = useRef(false)\n const indicatorAnimatingRef = useRef(false)\n\n const [availableWidth, setAvailableWidth] = useState(0)\n const [itemWidths, setItemWidths] = useState<number[]>([])\n const [moreWidth, setMoreWidth] = useState(0)\n\n const selectedIndex = useMemo(\n () => items.findIndex((item) => item.id === selectedId),\n [items, selectedId]\n )\n\n const { visibleIndexes, overflowIndexes } = useTabsOverflowSplit(\n itemWidths,\n moreWidth,\n availableWidth,\n selectedIndex,\n ITEM_GAP\n )\n\n const visibleItems = useMemo(\n () => visibleIndexes.map((index) => items[index]!).filter(Boolean),\n [visibleIndexes, items]\n )\n const overflowItems = useMemo(\n () => overflowIndexes.map((index) => items[index]!).filter(Boolean),\n [overflowIndexes, items]\n )\n const hasOverflow = overflowItems.length > 0\n\n const rootCssVars = useMemo(\n () => ({\n ...tabPanelStyleToCssVars(slotProps?.root?.style),\n '--tabpanel-focus-radius': toCssRadius(focusRadius),\n '--tabpanel-track-radius': toCssRadius(trackRadius),\n // Prop radii win unless style explicitly set them.\n ...(slotProps?.root?.style?.focusRadius != null\n ? { '--tabpanel-focus-radius': slotProps.root.style.focusRadius }\n : null),\n ...(slotProps?.root?.style?.trackRadius != null\n ? { '--tabpanel-track-radius': slotProps.root.style.trackRadius }\n : null),\n }),\n [focusRadius, trackRadius, slotProps?.root?.style]\n )\n\n useLayoutEffect(() => {\n const root = rootRef.current\n const measure = measureRef.current\n const moreMeasure = moreMeasureRef.current\n if (!root || !measure || !moreMeasure) {\n return\n }\n\n const update = () => {\n setAvailableWidth(Math.max(0, root.clientWidth - TRACK_PAD * 2))\n\n const widths = Array.from(\n measure.querySelectorAll<HTMLElement>('[data-tab-measure]')\n ).map((node) => node.getBoundingClientRect().width)\n\n setItemWidths((prev) => {\n if (\n prev.length === widths.length &&\n prev.every((width, index) => Math.abs(width - (widths[index] ?? 0)) < 0.5)\n ) {\n return prev\n }\n return widths\n })\n\n const nextMore = Math.max(\n moreMeasure.scrollWidth,\n moreMeasure.getBoundingClientRect().width\n )\n setMoreWidth((prev) => (Math.abs(prev - nextMore) < 0.5 ? prev : nextMore))\n }\n\n update()\n const observer = new ResizeObserver(update)\n observer.observe(root)\n observer.observe(measure)\n observer.observe(moreMeasure)\n return () => observer.disconnect()\n }, [items, showLabels])\n\n useLayoutEffect(() => {\n const strip = stripRef.current\n const indicator = indicatorRef.current\n if (!strip || !indicator || !selectedId) {\n return\n }\n\n const slideToActive = () => {\n const activeEl = itemRefs.current.get(selectedId)\n if (!activeEl) {\n return\n }\n\n const stripBox = strip.getBoundingClientRect()\n const itemBox = activeEl.getBoundingClientRect()\n const next = {\n top: itemBox.top - stripBox.top,\n left: itemBox.left - stripBox.left,\n width: itemBox.width,\n height: itemBox.height,\n }\n\n const applyRect = (rect: typeof next) => {\n indicator.style.transform = `translate3d(${rect.left}px, ${rect.top}px, 0)`\n indicator.style.width = `${rect.width}px`\n indicator.style.height = `${rect.height}px`\n }\n\n if (!indicatorMountedRef.current || indicatorRectRef.current.width <= 0) {\n clearIndicatorAnimations(indicator)\n indicator.style.transition = 'none'\n applyRect(next)\n indicator.style.opacity = '1'\n indicatorRectRef.current = next\n indicatorMountedRef.current = true\n return\n }\n\n // Commit in-flight WAAPI values to inline styles before measuring so\n // interrupt reads the true animated rect, not a stale fill/class mix.\n clearIndicatorAnimations(indicator)\n const liveBox = indicator.getBoundingClientRect()\n const prev = {\n top: liveBox.top - stripBox.top,\n left: liveBox.left - stripBox.left,\n width: liveBox.width,\n height: liveBox.height,\n }\n\n const same =\n Math.abs(prev.left - next.left) < 0.5 &&\n Math.abs(prev.top - next.top) < 0.5 &&\n Math.abs(prev.width - next.width) < 0.5 &&\n Math.abs(prev.height - next.height) < 0.5\n\n if (same) {\n applyRect(next)\n indicatorRectRef.current = next\n return\n }\n\n const bridgeLeft = Math.min(prev.left, next.left)\n const bridgeRight = Math.max(prev.left + prev.width, next.left + next.width)\n const bridge = {\n left: bridgeLeft,\n top: next.top,\n width: Math.max(bridgeRight - bridgeLeft, next.width),\n height: next.height,\n }\n\n indicator.style.transition = 'none'\n applyRect(prev)\n indicator.style.opacity = '1'\n indicatorAnimatingRef.current = true\n\n const animation = indicator.animate(\n [\n {\n transform: `translate3d(${prev.left}px, ${prev.top}px, 0)`,\n width: `${prev.width}px`,\n height: `${prev.height}px`,\n },\n {\n transform: `translate3d(${bridge.left}px, ${bridge.top}px, 0)`,\n width: `${bridge.width}px`,\n height: `${bridge.height}px`,\n offset: 0.4,\n },\n {\n transform: `translate3d(${next.left}px, ${next.top}px, 0)`,\n width: `${next.width}px`,\n height: `${next.height}px`,\n },\n ],\n {\n duration: INDICATOR_MS,\n easing: INDICATOR_EASE,\n fill: 'forwards',\n }\n )\n\n animation.onfinish = () => {\n finishIndicatorAnimation(animation)\n applyRect(next)\n indicatorRectRef.current = next\n indicatorAnimatingRef.current = false\n }\n animation.oncancel = () => {\n indicatorAnimatingRef.current = false\n }\n indicatorRectRef.current = next\n }\n\n slideToActive()\n const observer = new ResizeObserver(() => {\n if (indicatorAnimatingRef.current) {\n return\n }\n const activeEl = itemRefs.current.get(selectedId)\n const ind = indicatorRef.current\n if (!activeEl || !ind || !stripRef.current) {\n return\n }\n const stripBox = stripRef.current.getBoundingClientRect()\n const itemBox = activeEl.getBoundingClientRect()\n const next = {\n top: itemBox.top - stripBox.top,\n left: itemBox.left - stripBox.left,\n width: itemBox.width,\n height: itemBox.height,\n }\n clearIndicatorAnimations(ind)\n ind.style.transition = 'none'\n ind.style.transform = `translate3d(${next.left}px, ${next.top}px, 0)`\n ind.style.width = `${next.width}px`\n ind.style.height = `${next.height}px`\n ind.style.opacity = '1'\n indicatorRectRef.current = next\n indicatorMountedRef.current = true\n })\n observer.observe(strip)\n return () => observer.disconnect()\n }, [visibleIndexes, overflowIndexes, selectedId, items, showLabels, focusRadius])\n\n useEffect(() => {\n if (isControlled) {\n return\n }\n const next = resolveSelectedId(items, undefined, internalValue)\n if (next && next !== internalValue) {\n setInternalValue(next)\n }\n }, [items, isControlled, internalValue])\n\n const menu = useMenu({\n onItemClickClientArg: ({ closeHandler }) => {\n closeHandler?.()\n },\n })\n\n const menuOptions = useMemo(\n () =>\n overflowItems.map((item) => ({\n id: item.id,\n label: item.label,\n icon: item.icon ? (item.icon as React.ReactElement) : undefined,\n onClick: () => {\n if (!item.disabled) {\n select(item.id)\n }\n },\n })),\n [overflowItems, select]\n )\n\n const selectedItem = items.find((item) => item.id === selectedId)\n\n const stripSx = {\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'flex-start',\n flexWrap: 'nowrap',\n alignSelf: 'flex-start',\n maxWidth: '100%',\n gap: 'var(--tabpanel-item-gap)',\n p: 'var(--tabpanel-track-pad)',\n borderRadius: 'var(--tabpanel-track-radius)',\n border: 'none',\n bgcolor: 'var(--tabpanel-track-bg)',\n } as const satisfies SxProps<Theme>\n\n const tabButtonSx = {\n position: 'relative',\n zIndex: 1,\n appearance: 'none',\n border: 'none',\n background: 'transparent',\n p: 0,\n m: 0,\n borderRadius: 'var(--tabpanel-focus-radius)',\n color: 'var(--tabpanel-tab-color)',\n transition:\n 'color var(--tabpanel-indicator-ms) var(--tabpanel-indicator-ease)',\n flexShrink: 0,\n '&:hover': {\n color: 'var(--tabpanel-tab-color-active)',\n },\n '&:focus-visible': {\n outline: '2px solid var(--tabpanel-accent)',\n outlineOffset: 3,\n },\n '&[aria-selected=\"true\"]': {\n color: 'var(--tabpanel-tab-color-active)',\n '&:hover': {\n color: 'var(--tabpanel-tab-color-active)',\n },\n },\n } as const satisfies SxProps<Theme>\n\n const setItemRef = (id: string) => (node: HTMLButtonElement | null) => {\n if (node) {\n itemRefs.current.set(id, node)\n } else {\n itemRefs.current.delete(id)\n }\n }\n\n return (\n <Box\n ref={rootRef}\n className={className}\n sx={mergeSx(\n {\n ...tabPanelRootSx,\n ...rootCssVars,\n width: '100%',\n minWidth: 0,\n maxWidth: '100%',\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n gap: 1.5,\n },\n slotProps?.root?.sx,\n sx\n )}\n >\n <Box\n ref={measureRef}\n aria-hidden\n sx={{\n position: 'fixed',\n left: -99999,\n top: 0,\n visibility: 'hidden',\n pointerEvents: 'none',\n display: 'inline-flex',\n alignItems: 'center',\n flexWrap: 'nowrap',\n gap: 'var(--tabpanel-item-gap)',\n width: 'max-content',\n maxWidth: 'none',\n }}\n >\n {items.map((item) => (\n <Box\n key={`measure-${item.id}`}\n data-tab-measure\n sx={{ display: 'inline-flex', flexShrink: 0 }}\n >\n <TabItemContent item={item} showLabels={showLabels} active={false} />\n </Box>\n ))}\n </Box>\n\n <Box\n ref={moreMeasureRef}\n aria-hidden\n sx={{\n position: 'fixed',\n left: -99999,\n top: 0,\n visibility: 'hidden',\n pointerEvents: 'none',\n display: 'inline-flex',\n width: 'max-content',\n }}\n >\n <MoreTriggerContent showLabels={showLabels} open={false} />\n </Box>\n\n <Box\n ref={stripRef}\n role=\"tablist\"\n sx={mergeSx(\n stripSx,\n hasOverflow\n ? (slotProps?.menu?.sx ?? slotProps?.strip?.sx)\n : slotProps?.strip?.sx\n )}\n >\n <Box\n ref={indicatorRef}\n aria-hidden\n sx={mergeSx(\n {\n position: 'absolute',\n top: 0,\n left: 0,\n width: 0,\n height: 0,\n borderRadius: 'var(--tabpanel-focus-radius)',\n border: 'none',\n bgcolor: 'var(--tabpanel-focus-bg)',\n backdropFilter: 'blur(12px) saturate(1.2)',\n WebkitBackdropFilter: 'blur(12px) saturate(1.2)',\n boxShadow: 'var(--tabpanel-focus-shadow)',\n opacity: 0,\n pointerEvents: 'none',\n zIndex: 0,\n // Geometry (transform / width / height) is JS + WAAPI only —\n // never set transform here or Emotion fights fill: 'forwards'.\n willChange: 'transform, width, height',\n '[color-scheme=dark] &': {\n bgcolor: 'var(--tabpanel-focus-bg-dark)',\n backdropFilter: 'blur(8px) saturate(1.05)',\n WebkitBackdropFilter: 'blur(8px) saturate(1.05)',\n boxShadow: 'var(--tabpanel-focus-shadow-dark)',\n },\n },\n slotProps?.indicator?.sx\n )}\n />\n\n {visibleItems.map((item) => {\n const active = item.id === selectedId\n return (\n <Box\n key={item.id}\n component=\"button\"\n type=\"button\"\n role=\"tab\"\n aria-selected={active}\n disabled={item.disabled}\n ref={setItemRef(item.id)}\n onClick={() => select(item.id)}\n sx={mergeSx(\n {\n ...tabButtonSx,\n cursor: item.disabled ? 'not-allowed' : 'pointer',\n opacity: item.disabled ? 0.4 : 1,\n ...(item.disabled\n ? {\n color: 'var(--tabpanel-tab-color-disabled)',\n '&:hover': {\n color: 'var(--tabpanel-tab-color-disabled)',\n },\n }\n : null),\n },\n slotProps?.tab?.sx\n )}\n >\n <TabItemContent\n item={item}\n showLabels={showLabels}\n active={active}\n />\n </Box>\n )\n })}\n\n {hasOverflow ? (\n <>\n <Box\n component=\"button\"\n type=\"button\"\n aria-haspopup=\"menu\"\n aria-expanded={Boolean(menu.anchorEl)}\n aria-label={`More tabs, ${overflowItems.length} hidden`}\n onClick={menu.onTriggerClickHandler}\n sx={mergeSx(\n {\n ...tabButtonSx,\n cursor: 'pointer',\n },\n slotProps?.tab?.sx\n )}\n >\n <MoreTriggerContent\n showLabels={showLabels}\n open={Boolean(menu.anchorEl)}\n />\n </Box>\n <MenuPopper\n placement=\"bottom-end\"\n options={menuOptions}\n openMenuProps={{\n ...menu,\n initSelected: selectedId ? [selectedId] : [],\n }}\n />\n </>\n ) : null}\n </Box>\n\n {selectedItem?.content != null ? (\n <Box\n role=\"tabpanel\"\n sx={mergeSx({ minWidth: 0 }, slotProps?.panel?.sx)}\n >\n {selectedItem.content}\n </Box>\n ) : null}\n </Box>\n )\n}\n\nexport default TabPanel\n","import { useMemo } from 'react'\n\n/**\n * Progressive overflow: keep as many tabs as fit, reserve room for a trailing\n * \"More\" control, and always keep the selected tab on the strip when possible.\n */\nexport function computeVisibleIndexes(\n itemWidths: number[],\n moreWidth: number,\n availableWidth: number,\n selectedIndex: number,\n gapPx: number\n): { visibleIndexes: number[]; overflowIndexes: number[] } {\n const count = itemWidths.length\n if (count === 0) {\n return { visibleIndexes: [], overflowIndexes: [] }\n }\n\n if (itemWidths.some((width) => width <= 0) || availableWidth <= 0) {\n return {\n visibleIndexes: itemWidths.map((_, index) => index),\n overflowIndexes: [],\n }\n }\n\n const totalNeeded =\n itemWidths.reduce((sum, width) => sum + width, 0) +\n Math.max(0, count - 1) * gapPx\n\n if (totalNeeded <= availableWidth) {\n return {\n visibleIndexes: itemWidths.map((_, index) => index),\n overflowIndexes: [],\n }\n }\n\n const reserveMore = moreWidth > 0 ? moreWidth + gapPx : 0\n const budget = Math.max(0, availableWidth - reserveMore)\n\n const pickPrefix = (maxExclusive: number, limit: number) => {\n const indexes: number[] = []\n let used = 0\n for (let i = 0; i < maxExclusive; i += 1) {\n const width = itemWidths[i] ?? 0\n const nextUsed = used + width + (indexes.length > 0 ? gapPx : 0)\n if (nextUsed <= limit) {\n indexes.push(i)\n used = nextUsed\n } else {\n break\n }\n }\n return indexes\n }\n\n let visibleIndexes: number[]\n\n if (selectedIndex < 0 || selectedIndex >= count) {\n visibleIndexes = pickPrefix(count, budget)\n } else {\n const selectedWidth = itemWidths[selectedIndex] ?? 0\n const prefixBudget = Math.max(\n 0,\n budget - selectedWidth - (selectedWidth > 0 ? gapPx : 0)\n )\n const prefix = pickPrefix(selectedIndex, prefixBudget)\n\n let used =\n prefix.reduce((sum, index, order) => {\n return sum + (itemWidths[index] ?? 0) + (order > 0 ? gapPx : 0)\n }, 0) +\n (prefix.length > 0 ? gapPx : 0) +\n selectedWidth\n\n const after: number[] = []\n for (let i = selectedIndex + 1; i < count; i += 1) {\n const width = itemWidths[i] ?? 0\n const nextUsed = used + gapPx + width\n if (nextUsed <= budget) {\n after.push(i)\n used = nextUsed\n } else {\n break\n }\n }\n\n visibleIndexes = [...prefix, selectedIndex, ...after]\n }\n\n if (visibleIndexes.length === 0 && selectedIndex >= 0 && selectedIndex < count) {\n visibleIndexes = [selectedIndex]\n }\n\n const visibleSet = new Set(visibleIndexes)\n const overflowIndexes = itemWidths\n .map((_, index) => index)\n .filter((index) => !visibleSet.has(index))\n\n return { visibleIndexes, overflowIndexes }\n}\n\nexport function useTabsOverflowSplit(\n itemWidths: number[],\n moreWidth: number,\n availableWidth: number,\n selectedIndex: number,\n gapPx: number\n) {\n return useMemo(\n () =>\n computeVisibleIndexes(\n itemWidths,\n moreWidth,\n availableWidth,\n selectedIndex,\n gapPx\n ),\n [itemWidths, moreWidth, availableWidth, selectedIndex, gapPx]\n )\n}\n","import type { SxProps, Theme } from '@mui/material/styles'\n\n/**\n * Default TabPanel CSS variables — set on the root wrapper via `sx`.\n * Override with `sx`, `slotProps.root.sx`, or `slotProps.root.style`.\n */\nexport const tabPanelRootSx = {\n '--tabpanel-accent': 'var(--mui-palette-primary-emphasis)',\n '--tabpanel-track-bg':\n 'color-mix(in lab, var(--tabpanel-accent), transparent 92%)',\n '--tabpanel-tab-color': 'var(--mui-palette-text-secondary)',\n '--tabpanel-tab-color-active': 'var(--tabpanel-accent)',\n '--tabpanel-tab-color-disabled': 'var(--mui-palette-text-disabled)',\n '--tabpanel-badge-color': 'var(--mui-palette-error-main)',\n '--tabpanel-badge-bg':\n 'color-mix(in lab, var(--mui-palette-error-main), transparent 86%)',\n '--tabpanel-focus-bg':\n 'color-mix(in lab, var(--mui-palette-background-paper), transparent 78%)',\n '--tabpanel-focus-bg-dark':\n 'color-mix(in lab, var(--mui-palette-background-paper), transparent 55%)',\n '--tabpanel-focus-shadow': [\n 'inset 0 1px 1px color-mix(in lab, var(--mui-palette-background-paper), transparent 15%)',\n 'inset 0 -1px 3px color-mix(in lab, var(--tabpanel-accent), transparent 80%)',\n 'inset 0 0 16px color-mix(in lab, var(--mui-palette-background-paper), transparent 50%)',\n '0 0 0 1px color-mix(in lab, var(--mui-palette-background-paper), transparent 45%)',\n '0 0 20px color-mix(in lab, var(--tabpanel-accent), transparent 76%)',\n '0 8px 22px color-mix(in lab, var(--tabpanel-accent), transparent 84%)',\n ].join(', '),\n '--tabpanel-focus-shadow-dark': [\n 'inset 0 1px 0 rgba(255, 255, 255, 0.06)',\n 'inset 0 0 0 1px color-mix(in lab, var(--tabpanel-accent), transparent 82%)',\n '0 0 0 1px rgba(0, 0, 0, 0.35)',\n '0 4px 12px rgba(0, 0, 0, 0.35)',\n ].join(', '),\n '--tabpanel-focus-radius': '10px',\n '--tabpanel-track-radius': '12px',\n '--tabpanel-track-pad': '3px',\n '--tabpanel-item-gap': '1px',\n '--tabpanel-indicator-ease': 'cubic-bezier(0.32, 0.72, 0, 1)',\n '--tabpanel-indicator-ms': '380ms',\n} as const satisfies SxProps<Theme>\n\nexport type TabPanelStyleVars = {\n accent?: string\n trackBg?: string\n tabColor?: string\n tabColorActive?: string\n tabColorDisabled?: string\n badgeColor?: string\n badgeBg?: string\n focusBg?: string\n focusBgDark?: string\n focusShadow?: string\n focusShadowDark?: string\n focusRadius?: string\n trackRadius?: string\n}\n\n/** Maps typed style tokens onto CSS custom properties for the root wrapper. */\nexport function tabPanelStyleToCssVars(\n style?: TabPanelStyleVars\n): Record<string, string> {\n if (!style) {\n return {}\n }\n\n const vars: Record<string, string> = {}\n if (style.accent != null) vars['--tabpanel-accent'] = style.accent\n if (style.trackBg != null) vars['--tabpanel-track-bg'] = style.trackBg\n if (style.tabColor != null) vars['--tabpanel-tab-color'] = style.tabColor\n if (style.tabColorActive != null) {\n vars['--tabpanel-tab-color-active'] = style.tabColorActive\n }\n if (style.tabColorDisabled != null) {\n vars['--tabpanel-tab-color-disabled'] = style.tabColorDisabled\n }\n if (style.badgeColor != null) vars['--tabpanel-badge-color'] = style.badgeColor\n if (style.badgeBg != null) vars['--tabpanel-badge-bg'] = style.badgeBg\n if (style.focusBg != null) vars['--tabpanel-focus-bg'] = style.focusBg\n if (style.focusBgDark != null) {\n vars['--tabpanel-focus-bg-dark'] = style.focusBgDark\n }\n if (style.focusShadow != null) {\n vars['--tabpanel-focus-shadow'] = style.focusShadow\n }\n if (style.focusShadowDark != null) {\n vars['--tabpanel-focus-shadow-dark'] = style.focusShadowDark\n }\n if (style.focusRadius != null) {\n vars['--tabpanel-focus-radius'] = style.focusRadius\n }\n if (style.trackRadius != null) {\n vars['--tabpanel-track-radius'] = style.trackRadius\n }\n return vars\n}\n"],"mappings":"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","names":["default","useMemo","default","useMemo"]}
1
+ {"version":3,"sources":["../src/components/elemental/Tab/src/Tab/index.ts","../src/components/elemental/Tab/src/Tab/themes.ts","../src/components/elemental/Tab/src/TabPanel/TabPanel.tsx","../src/components/elemental/Tab/src/TabPanel/useTabsOverflow.ts","../src/components/elemental/Tab/src/TabPanel/tabPanelVars.ts"],"sourcesContent":["export { default as Tab } from '@mui/material/Tab'\nexport type { TabProps } from '@mui/material/Tab'\nexport { default as Tabs } from '@mui/material/Tabs'\nexport type { TabsProps } from '@mui/material/Tabs'\nexport * from './themes'","import type { MuiComponentTheme } from '@/_utils/_types'\n\nexport const tabTheme = {\n defaultProps: {\n disableRipple: true,\n },\n styleOverrides: {\n root: ({ theme }) => ({\n minHeight: 44,\n minWidth: 0,\n paddingInline: theme.spacing(1.5),\n paddingBlock: theme.spacing(1),\n borderRadius: theme.shape.borderRadius,\n textTransform: 'none',\n fontWeight: theme.typography.fontWeightMedium,\n color: 'var(--mui-palette-text-secondary)',\n transition: theme.transitions.create(['color', 'background-color'], {\n duration: theme.transitions.duration.shorter,\n }),\n '&:hover': {\n color: 'var(--mui-palette-primary-emphasis)',\n backgroundColor: 'color-mix(in lab, var(--mui-palette-primary-emphasis), transparent 92%)',\n },\n '&.Mui-selected': {\n color: 'var(--mui-palette-primary-emphasis)',\n backgroundColor: 'transparent',\n },\n '&.Mui-selected:hover': {\n backgroundColor: 'color-mix(in lab, var(--mui-palette-primary-emphasis), transparent 94%)',\n },\n '&.Mui-disabled': {\n color: 'var(--mui-palette-text-disabled)',\n },\n }),\n },\n} as const satisfies MuiComponentTheme<'MuiTab'>\n\nexport const tabsTheme = {\n styleOverrides: {\n root: {\n minHeight: 44,\n },\n list: {\n gap: 4,\n },\n indicator: {\n height: 3,\n borderRadius: 999,\n backgroundColor: 'var(--mui-palette-primary-emphasis)',\n },\n scrollButtons: {\n color: 'var(--mui-palette-text-secondary)',\n '&.Mui-disabled': {\n opacity: 0.4,\n },\n },\n },\n} as const satisfies MuiComponentTheme<'MuiTabs'>","'use client'\n\nimport React, {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport type { SxProps, Theme } from '@mui/material/styles'\n\nimport { mergeSx } from '@/_utils/_func'\nimport { Box } from '@/ele/Box'\nimport { Typography } from '@/ele/Typography'\nimport { KeyboardArrowDownIcon, MoreHorizIcon } from '@/icons/MuiIcon'\nimport { useMenu, MenuPopper } from '@/ele/Menu'\n\nimport type { TabPanelItem, TabPanelProps } from './types'\nimport { useTabsOverflowSplit } from './useTabsOverflow'\nimport {\n tabPanelRootSx,\n tabPanelStyleToCssVars,\n} from './tabPanelVars'\n\nconst TRACK_PAD = 3\nconst ITEM_GAP = 1\nconst DEFAULT_TRACK_RADIUS = 12\nconst DEFAULT_FOCUS_RADIUS = 10\n/** Keep in sync with `--tabpanel-indicator-ms` / `--tabpanel-indicator-ease`. */\nconst INDICATOR_EASE = 'cubic-bezier(0.32, 0.72, 0, 1)'\nconst INDICATOR_MS = 380\n\n/** Numbers are px so MUI does not multiply by theme.shape.borderRadius. */\nfunction toCssRadius(value: number | string): string {\n return typeof value === 'number' ? `${value}px` : value\n}\n\n/**\n * Commit WAAPI values to inline styles, then cancel so `fill: 'forwards'`\n * cannot leave a stale computed transform that fights Emotion/CSS classes.\n */\nfunction finishIndicatorAnimation(animation: Animation) {\n try {\n animation.commitStyles?.()\n } catch {\n // commitStyles can throw if the animation was already canceled.\n }\n animation.cancel()\n}\n\nfunction clearIndicatorAnimations(element: HTMLElement) {\n element.getAnimations().forEach((animation) => {\n finishIndicatorAnimation(animation)\n })\n}\n\nfunction resolveSelectedId(\n items: TabPanelItem[],\n value: string | undefined,\n internal: string | undefined\n): string | undefined {\n const candidate = value ?? internal\n if (candidate && items.some((item) => item.id === candidate && !item.disabled)) {\n return candidate\n }\n return items.find((item) => !item.disabled)?.id\n}\n\nfunction TabItemContent({\n item,\n showLabels,\n active,\n endAdornment,\n}: {\n item: TabPanelItem\n showLabels: boolean\n active: boolean\n endAdornment?: React.ReactNode\n}) {\n const showLabel = showLabels || !item.icon\n const badgeLabel =\n item.badge == null\n ? null\n : typeof item.badge === 'number' && item.badge > 99\n ? '99+'\n : String(item.badge)\n\n return (\n <Box\n sx={{\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n gap: 0.5,\n px: showLabels ? 1.15 : 0.9,\n py: 0.5,\n minHeight: 28,\n pr: endAdornment ? 0.75 : undefined,\n }}\n >\n {item.icon ? (\n <Box\n component=\"span\"\n sx={{\n display: 'inline-flex',\n color: 'inherit',\n lineHeight: 0,\n opacity: active ? 1 : 0.88,\n transition:\n 'opacity var(--tabpanel-indicator-ms) var(--tabpanel-indicator-ease)',\n '& > *': { fontSize: 16 },\n }}\n >\n {item.icon}\n </Box>\n ) : null}\n {showLabel ? (\n <Typography\n component=\"span\"\n sx={{\n m: 0,\n fontSize: '0.75rem',\n letterSpacing: '0.01em',\n fontWeight: active ? 600 : 500,\n color: 'inherit',\n lineHeight: 1.15,\n whiteSpace: 'nowrap',\n }}\n >\n {item.label}\n </Typography>\n ) : (\n <Typography\n component=\"span\"\n sx={{\n position: 'absolute',\n width: 1,\n height: 1,\n overflow: 'hidden',\n clip: 'rect(0 0 0 0)',\n }}\n >\n {item.label}\n </Typography>\n )}\n {endAdornment}\n {badgeLabel != null ? (\n <Box\n component=\"span\"\n aria-label={`${item.badge} notifications`}\n sx={{\n position: 'absolute',\n top: 1,\n right: endAdornment ? 10 : 1,\n zIndex: 1,\n pointerEvents: 'none',\n minWidth: 12,\n height: 12,\n px: 0.3,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n borderRadius: 999,\n bgcolor: 'var(--tabpanel-badge-bg)',\n color: 'var(--tabpanel-badge-color)',\n fontSize: 8,\n fontWeight: 700,\n lineHeight: 1,\n }}\n >\n {badgeLabel}\n </Box>\n ) : null}\n </Box>\n )\n}\n\nfunction MoreTriggerContent({\n showLabels,\n open,\n}: {\n showLabels: boolean\n open: boolean\n}) {\n return (\n <Box\n sx={{\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n gap: 0.35,\n px: showLabels ? 1.15 : 0.9,\n py: 0.5,\n minHeight: 28,\n }}\n >\n <MoreHorizIcon sx={{ fontSize: 16 }} />\n {showLabels ? (\n <Typography\n component=\"span\"\n sx={{\n m: 0,\n fontSize: '0.75rem',\n fontWeight: 500,\n color: 'inherit',\n lineHeight: 1.15,\n whiteSpace: 'nowrap',\n }}\n >\n More\n </Typography>\n ) : null}\n <KeyboardArrowDownIcon\n sx={{\n fontSize: 14,\n opacity: 0.75,\n transition: 'transform 180ms ease',\n transform: open ? 'rotate(180deg)' : 'none',\n }}\n />\n </Box>\n )\n}\n\n/**\n * Adaptive content tabs: soft liquid track + morphing pill.\n * Overflow cuts trailing tabs into a More dropdown (selected stays visible).\n *\n * Colors / radii are CSS vars on the root (`tabPanelRootSx`). Override via\n * `sx`, `slotProps.root.style`, or `slotProps.root.sx`.\n */\nexport function TabPanel({\n items,\n value,\n defaultValue,\n onChange,\n showLabels = true,\n focusRadius = DEFAULT_FOCUS_RADIUS,\n trackRadius = DEFAULT_TRACK_RADIUS,\n sx,\n className,\n slotProps,\n}: TabPanelProps) {\n const isControlled = value !== undefined\n const [internalValue, setInternalValue] = useState<string | undefined>(\n () => defaultValue ?? items.find((item) => !item.disabled)?.id\n )\n\n const selectedId = resolveSelectedId(items, value, internalValue)\n\n const select = useCallback(\n (id: string) => {\n const item = items.find((entry) => entry.id === id)\n if (!item || item.disabled) {\n return\n }\n if (!isControlled) {\n setInternalValue(id)\n }\n onChange?.(id)\n },\n [isControlled, items, onChange]\n )\n\n const rootRef = useRef<HTMLDivElement>(null)\n const stripRef = useRef<HTMLDivElement>(null)\n const measureRef = useRef<HTMLDivElement>(null)\n const moreMeasureRef = useRef<HTMLDivElement>(null)\n const indicatorRef = useRef<HTMLDivElement>(null)\n const itemRefs = useRef<Map<string, HTMLButtonElement>>(new Map())\n const indicatorRectRef = useRef({ top: 0, left: 0, width: 0, height: 0 })\n const indicatorMountedRef = useRef(false)\n const indicatorAnimatingRef = useRef(false)\n\n const [availableWidth, setAvailableWidth] = useState(0)\n const [itemWidths, setItemWidths] = useState<number[]>([])\n const [moreWidth, setMoreWidth] = useState(0)\n\n const selectedIndex = useMemo(\n () => items.findIndex((item) => item.id === selectedId),\n [items, selectedId]\n )\n\n const { visibleIndexes, overflowIndexes } = useTabsOverflowSplit(\n itemWidths,\n moreWidth,\n availableWidth,\n selectedIndex,\n ITEM_GAP\n )\n\n const visibleItems = useMemo(\n () => visibleIndexes.map((index) => items[index]!).filter(Boolean),\n [visibleIndexes, items]\n )\n const overflowItems = useMemo(\n () => overflowIndexes.map((index) => items[index]!).filter(Boolean),\n [overflowIndexes, items]\n )\n const hasOverflow = overflowItems.length > 0\n\n const rootCssVars = useMemo(\n () => ({\n ...tabPanelStyleToCssVars(slotProps?.root?.style),\n '--tabpanel-focus-radius': toCssRadius(focusRadius),\n '--tabpanel-track-radius': toCssRadius(trackRadius),\n // Prop radii win unless style explicitly set them.\n ...(slotProps?.root?.style?.focusRadius != null\n ? { '--tabpanel-focus-radius': slotProps.root.style.focusRadius }\n : null),\n ...(slotProps?.root?.style?.trackRadius != null\n ? { '--tabpanel-track-radius': slotProps.root.style.trackRadius }\n : null),\n }),\n [focusRadius, trackRadius, slotProps?.root?.style]\n )\n\n useLayoutEffect(() => {\n const root = rootRef.current\n const measure = measureRef.current\n const moreMeasure = moreMeasureRef.current\n if (!root || !measure || !moreMeasure) {\n return\n }\n\n const update = () => {\n setAvailableWidth(Math.max(0, root.clientWidth - TRACK_PAD * 2))\n\n const widths = Array.from(\n measure.querySelectorAll<HTMLElement>('[data-tab-measure]')\n ).map((node) => node.getBoundingClientRect().width)\n\n setItemWidths((prev) => {\n if (\n prev.length === widths.length &&\n prev.every((width, index) => Math.abs(width - (widths[index] ?? 0)) < 0.5)\n ) {\n return prev\n }\n return widths\n })\n\n const nextMore = Math.max(\n moreMeasure.scrollWidth,\n moreMeasure.getBoundingClientRect().width\n )\n setMoreWidth((prev) => (Math.abs(prev - nextMore) < 0.5 ? prev : nextMore))\n }\n\n update()\n const observer = new ResizeObserver(update)\n observer.observe(root)\n observer.observe(measure)\n observer.observe(moreMeasure)\n return () => observer.disconnect()\n }, [items, showLabels])\n\n useLayoutEffect(() => {\n const strip = stripRef.current\n const indicator = indicatorRef.current\n if (!strip || !indicator || !selectedId) {\n return\n }\n\n const slideToActive = () => {\n const activeEl = itemRefs.current.get(selectedId)\n if (!activeEl) {\n return\n }\n\n const stripBox = strip.getBoundingClientRect()\n const itemBox = activeEl.getBoundingClientRect()\n const next = {\n top: itemBox.top - stripBox.top,\n left: itemBox.left - stripBox.left,\n width: itemBox.width,\n height: itemBox.height,\n }\n\n const applyRect = (rect: typeof next) => {\n indicator.style.transform = `translate3d(${rect.left}px, ${rect.top}px, 0)`\n indicator.style.width = `${rect.width}px`\n indicator.style.height = `${rect.height}px`\n }\n\n if (!indicatorMountedRef.current || indicatorRectRef.current.width <= 0) {\n clearIndicatorAnimations(indicator)\n indicator.style.transition = 'none'\n applyRect(next)\n indicator.style.opacity = '1'\n indicatorRectRef.current = next\n indicatorMountedRef.current = true\n return\n }\n\n // Commit in-flight WAAPI values to inline styles before measuring so\n // interrupt reads the true animated rect, not a stale fill/class mix.\n clearIndicatorAnimations(indicator)\n const liveBox = indicator.getBoundingClientRect()\n const prev = {\n top: liveBox.top - stripBox.top,\n left: liveBox.left - stripBox.left,\n width: liveBox.width,\n height: liveBox.height,\n }\n\n const same =\n Math.abs(prev.left - next.left) < 0.5 &&\n Math.abs(prev.top - next.top) < 0.5 &&\n Math.abs(prev.width - next.width) < 0.5 &&\n Math.abs(prev.height - next.height) < 0.5\n\n if (same) {\n applyRect(next)\n indicatorRectRef.current = next\n return\n }\n\n const bridgeLeft = Math.min(prev.left, next.left)\n const bridgeRight = Math.max(prev.left + prev.width, next.left + next.width)\n const bridge = {\n left: bridgeLeft,\n top: next.top,\n width: Math.max(bridgeRight - bridgeLeft, next.width),\n height: next.height,\n }\n\n indicator.style.transition = 'none'\n applyRect(prev)\n indicator.style.opacity = '1'\n indicatorAnimatingRef.current = true\n\n const animation = indicator.animate(\n [\n {\n transform: `translate3d(${prev.left}px, ${prev.top}px, 0)`,\n width: `${prev.width}px`,\n height: `${prev.height}px`,\n },\n {\n transform: `translate3d(${bridge.left}px, ${bridge.top}px, 0)`,\n width: `${bridge.width}px`,\n height: `${bridge.height}px`,\n offset: 0.4,\n },\n {\n transform: `translate3d(${next.left}px, ${next.top}px, 0)`,\n width: `${next.width}px`,\n height: `${next.height}px`,\n },\n ],\n {\n duration: INDICATOR_MS,\n easing: INDICATOR_EASE,\n fill: 'forwards',\n }\n )\n\n animation.onfinish = () => {\n finishIndicatorAnimation(animation)\n applyRect(next)\n indicatorRectRef.current = next\n indicatorAnimatingRef.current = false\n }\n animation.oncancel = () => {\n indicatorAnimatingRef.current = false\n }\n indicatorRectRef.current = next\n }\n\n slideToActive()\n const observer = new ResizeObserver(() => {\n if (indicatorAnimatingRef.current) {\n return\n }\n const activeEl = itemRefs.current.get(selectedId)\n const ind = indicatorRef.current\n if (!activeEl || !ind || !stripRef.current) {\n return\n }\n const stripBox = stripRef.current.getBoundingClientRect()\n const itemBox = activeEl.getBoundingClientRect()\n const next = {\n top: itemBox.top - stripBox.top,\n left: itemBox.left - stripBox.left,\n width: itemBox.width,\n height: itemBox.height,\n }\n clearIndicatorAnimations(ind)\n ind.style.transition = 'none'\n ind.style.transform = `translate3d(${next.left}px, ${next.top}px, 0)`\n ind.style.width = `${next.width}px`\n ind.style.height = `${next.height}px`\n ind.style.opacity = '1'\n indicatorRectRef.current = next\n indicatorMountedRef.current = true\n })\n observer.observe(strip)\n return () => observer.disconnect()\n }, [visibleIndexes, overflowIndexes, selectedId, items, showLabels, focusRadius])\n\n useEffect(() => {\n if (isControlled) {\n return\n }\n const next = resolveSelectedId(items, undefined, internalValue)\n if (next && next !== internalValue) {\n setInternalValue(next)\n }\n }, [items, isControlled, internalValue])\n\n const menu = useMenu({\n onItemClickClientArg: ({ closeHandler }) => {\n closeHandler?.()\n },\n })\n\n const menuOptions = useMemo(\n () =>\n overflowItems.map((item) => ({\n id: item.id,\n label: item.label,\n icon: item.icon ? (item.icon as React.ReactElement) : undefined,\n onClick: () => {\n if (!item.disabled) {\n select(item.id)\n }\n },\n })),\n [overflowItems, select]\n )\n\n const selectedItem = items.find((item) => item.id === selectedId)\n\n const stripSx = {\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'flex-start',\n flexWrap: 'nowrap',\n alignSelf: 'flex-start',\n maxWidth: '100%',\n gap: 'var(--tabpanel-item-gap)',\n p: 'var(--tabpanel-track-pad)',\n borderRadius: 'var(--tabpanel-track-radius)',\n border: 'none',\n bgcolor: 'var(--tabpanel-track-bg)',\n } as const satisfies SxProps<Theme>\n\n const tabButtonSx = {\n position: 'relative',\n zIndex: 1,\n appearance: 'none',\n border: 'none',\n background: 'transparent',\n p: 0,\n m: 0,\n borderRadius: 'var(--tabpanel-focus-radius)',\n color: 'var(--tabpanel-tab-color)',\n transition:\n 'color var(--tabpanel-indicator-ms) var(--tabpanel-indicator-ease)',\n flexShrink: 0,\n '&:hover': {\n color: 'var(--tabpanel-tab-color-active)',\n },\n '&:focus-visible': {\n outline: '2px solid var(--tabpanel-accent)',\n outlineOffset: 3,\n },\n '&[aria-selected=\"true\"]': {\n color: 'var(--tabpanel-tab-color-active)',\n '&:hover': {\n color: 'var(--tabpanel-tab-color-active)',\n },\n },\n } as const satisfies SxProps<Theme>\n\n const setItemRef = (id: string) => (node: HTMLButtonElement | null) => {\n if (node) {\n itemRefs.current.set(id, node)\n } else {\n itemRefs.current.delete(id)\n }\n }\n\n return (\n <Box\n ref={rootRef}\n className={className}\n sx={mergeSx(\n {\n ...tabPanelRootSx,\n ...rootCssVars,\n width: '100%',\n minWidth: 0,\n maxWidth: '100%',\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n gap: 1.5,\n },\n slotProps?.root?.sx,\n sx\n )}\n >\n <Box\n ref={measureRef}\n aria-hidden\n sx={{\n position: 'fixed',\n left: -99999,\n top: 0,\n visibility: 'hidden',\n pointerEvents: 'none',\n display: 'inline-flex',\n alignItems: 'center',\n flexWrap: 'nowrap',\n gap: 'var(--tabpanel-item-gap)',\n width: 'max-content',\n maxWidth: 'none',\n }}\n >\n {items.map((item) => (\n <Box\n key={`measure-${item.id}`}\n data-tab-measure\n sx={{ display: 'inline-flex', flexShrink: 0 }}\n >\n <TabItemContent item={item} showLabels={showLabels} active={false} />\n </Box>\n ))}\n </Box>\n\n <Box\n ref={moreMeasureRef}\n aria-hidden\n sx={{\n position: 'fixed',\n left: -99999,\n top: 0,\n visibility: 'hidden',\n pointerEvents: 'none',\n display: 'inline-flex',\n width: 'max-content',\n }}\n >\n <MoreTriggerContent showLabels={showLabels} open={false} />\n </Box>\n\n <Box\n ref={stripRef}\n role=\"tablist\"\n sx={mergeSx(\n stripSx,\n hasOverflow\n ? (slotProps?.menu?.sx ?? slotProps?.strip?.sx)\n : slotProps?.strip?.sx\n )}\n >\n <Box\n ref={indicatorRef}\n aria-hidden\n sx={mergeSx(\n {\n position: 'absolute',\n top: 0,\n left: 0,\n width: 0,\n height: 0,\n borderRadius: 'var(--tabpanel-focus-radius)',\n border: 'none',\n bgcolor: 'var(--tabpanel-focus-bg)',\n backdropFilter: 'blur(12px) saturate(1.2)',\n WebkitBackdropFilter: 'blur(12px) saturate(1.2)',\n boxShadow: 'var(--tabpanel-focus-shadow)',\n opacity: 0,\n pointerEvents: 'none',\n zIndex: 0,\n // Geometry (transform / width / height) is JS + WAAPI only —\n // never set transform here or Emotion fights fill: 'forwards'.\n willChange: 'transform, width, height',\n '[color-scheme=dark] &': {\n bgcolor: 'var(--tabpanel-focus-bg-dark)',\n backdropFilter: 'blur(8px) saturate(1.05)',\n WebkitBackdropFilter: 'blur(8px) saturate(1.05)',\n boxShadow: 'var(--tabpanel-focus-shadow-dark)',\n },\n },\n slotProps?.indicator?.sx\n )}\n />\n\n {visibleItems.map((item) => {\n const active = item.id === selectedId\n return (\n <Box\n key={item.id}\n component=\"button\"\n type=\"button\"\n role=\"tab\"\n aria-selected={active}\n disabled={item.disabled}\n ref={setItemRef(item.id)}\n onClick={() => select(item.id)}\n sx={mergeSx(\n {\n ...tabButtonSx,\n cursor: item.disabled ? 'not-allowed' : 'pointer',\n opacity: item.disabled ? 0.4 : 1,\n ...(item.disabled\n ? {\n color: 'var(--tabpanel-tab-color-disabled)',\n '&:hover': {\n color: 'var(--tabpanel-tab-color-disabled)',\n },\n }\n : null),\n },\n slotProps?.tab?.sx\n )}\n >\n <TabItemContent\n item={item}\n showLabels={showLabels}\n active={active}\n />\n </Box>\n )\n })}\n\n {hasOverflow ? (\n <>\n <Box\n component=\"button\"\n type=\"button\"\n aria-haspopup=\"menu\"\n aria-expanded={Boolean(menu.anchorEl)}\n aria-label={`More tabs, ${overflowItems.length} hidden`}\n onClick={menu.onTriggerClickHandler}\n sx={mergeSx(\n {\n ...tabButtonSx,\n cursor: 'pointer',\n },\n slotProps?.tab?.sx\n )}\n >\n <MoreTriggerContent\n showLabels={showLabels}\n open={Boolean(menu.anchorEl)}\n />\n </Box>\n <MenuPopper\n placement=\"bottom-end\"\n options={menuOptions}\n openMenuProps={{\n ...menu,\n initSelected: selectedId ? [selectedId] : [],\n }}\n />\n </>\n ) : null}\n </Box>\n\n {selectedItem?.content != null ? (\n <Box\n role=\"tabpanel\"\n sx={mergeSx({ minWidth: 0 }, slotProps?.panel?.sx)}\n >\n {selectedItem.content}\n </Box>\n ) : null}\n </Box>\n )\n}\n\nexport default TabPanel\n","import { useMemo } from 'react'\n\n/**\n * Progressive overflow: keep as many tabs as fit, reserve room for a trailing\n * \"More\" control, and always keep the selected tab on the strip when possible.\n */\nexport function computeVisibleIndexes(\n itemWidths: number[],\n moreWidth: number,\n availableWidth: number,\n selectedIndex: number,\n gapPx: number\n): { visibleIndexes: number[]; overflowIndexes: number[] } {\n const count = itemWidths.length\n if (count === 0) {\n return { visibleIndexes: [], overflowIndexes: [] }\n }\n\n if (itemWidths.some((width) => width <= 0) || availableWidth <= 0) {\n return {\n visibleIndexes: itemWidths.map((_, index) => index),\n overflowIndexes: [],\n }\n }\n\n const totalNeeded =\n itemWidths.reduce((sum, width) => sum + width, 0) +\n Math.max(0, count - 1) * gapPx\n\n if (totalNeeded <= availableWidth) {\n return {\n visibleIndexes: itemWidths.map((_, index) => index),\n overflowIndexes: [],\n }\n }\n\n const reserveMore = moreWidth > 0 ? moreWidth + gapPx : 0\n const budget = Math.max(0, availableWidth - reserveMore)\n\n const pickPrefix = (maxExclusive: number, limit: number) => {\n const indexes: number[] = []\n let used = 0\n for (let i = 0; i < maxExclusive; i += 1) {\n const width = itemWidths[i] ?? 0\n const nextUsed = used + width + (indexes.length > 0 ? gapPx : 0)\n if (nextUsed <= limit) {\n indexes.push(i)\n used = nextUsed\n } else {\n break\n }\n }\n return indexes\n }\n\n let visibleIndexes: number[]\n\n if (selectedIndex < 0 || selectedIndex >= count) {\n visibleIndexes = pickPrefix(count, budget)\n } else {\n const selectedWidth = itemWidths[selectedIndex] ?? 0\n const prefixBudget = Math.max(\n 0,\n budget - selectedWidth - (selectedWidth > 0 ? gapPx : 0)\n )\n const prefix = pickPrefix(selectedIndex, prefixBudget)\n\n let used =\n prefix.reduce((sum, index, order) => {\n return sum + (itemWidths[index] ?? 0) + (order > 0 ? gapPx : 0)\n }, 0) +\n (prefix.length > 0 ? gapPx : 0) +\n selectedWidth\n\n const after: number[] = []\n for (let i = selectedIndex + 1; i < count; i += 1) {\n const width = itemWidths[i] ?? 0\n const nextUsed = used + gapPx + width\n if (nextUsed <= budget) {\n after.push(i)\n used = nextUsed\n } else {\n break\n }\n }\n\n visibleIndexes = [...prefix, selectedIndex, ...after]\n }\n\n if (visibleIndexes.length === 0 && selectedIndex >= 0 && selectedIndex < count) {\n visibleIndexes = [selectedIndex]\n }\n\n const visibleSet = new Set(visibleIndexes)\n const overflowIndexes = itemWidths\n .map((_, index) => index)\n .filter((index) => !visibleSet.has(index))\n\n return { visibleIndexes, overflowIndexes }\n}\n\nexport function useTabsOverflowSplit(\n itemWidths: number[],\n moreWidth: number,\n availableWidth: number,\n selectedIndex: number,\n gapPx: number\n) {\n return useMemo(\n () =>\n computeVisibleIndexes(\n itemWidths,\n moreWidth,\n availableWidth,\n selectedIndex,\n gapPx\n ),\n [itemWidths, moreWidth, availableWidth, selectedIndex, gapPx]\n )\n}\n","import type { SxProps, Theme } from '@mui/material/styles'\n\n/**\n * Default TabPanel CSS variables — set on the root wrapper via `sx`.\n * Override with `sx`, `slotProps.root.sx`, or `slotProps.root.style`.\n */\nexport const tabPanelRootSx = {\n '--tabpanel-accent': 'var(--mui-palette-primary-emphasis)',\n '--tabpanel-track-bg':\n 'color-mix(in lab, var(--tabpanel-accent), transparent 92%)',\n '--tabpanel-tab-color': 'var(--mui-palette-text-secondary)',\n '--tabpanel-tab-color-active': 'var(--tabpanel-accent)',\n '--tabpanel-tab-color-disabled': 'var(--mui-palette-text-disabled)',\n '--tabpanel-badge-color': 'var(--mui-palette-error-main)',\n '--tabpanel-badge-bg':\n 'color-mix(in lab, var(--mui-palette-error-main), transparent 86%)',\n '--tabpanel-focus-bg':\n 'color-mix(in lab, var(--mui-palette-background-paper), transparent 78%)',\n '--tabpanel-focus-bg-dark':\n 'color-mix(in lab, var(--mui-palette-background-paper), transparent 55%)',\n '--tabpanel-focus-shadow': [\n 'inset 0 1px 1px color-mix(in lab, var(--mui-palette-background-paper), transparent 15%)',\n 'inset 0 -1px 3px color-mix(in lab, var(--tabpanel-accent), transparent 80%)',\n 'inset 0 0 16px color-mix(in lab, var(--mui-palette-background-paper), transparent 50%)',\n '0 0 0 1px color-mix(in lab, var(--mui-palette-background-paper), transparent 45%)',\n '0 0 20px color-mix(in lab, var(--tabpanel-accent), transparent 76%)',\n '0 8px 22px color-mix(in lab, var(--tabpanel-accent), transparent 84%)',\n ].join(', '),\n '--tabpanel-focus-shadow-dark': [\n 'inset 0 1px 0 rgba(255, 255, 255, 0.06)',\n 'inset 0 0 0 1px color-mix(in lab, var(--tabpanel-accent), transparent 82%)',\n '0 0 0 1px rgba(0, 0, 0, 0.35)',\n '0 4px 12px rgba(0, 0, 0, 0.35)',\n ].join(', '),\n '--tabpanel-focus-radius': '10px',\n '--tabpanel-track-radius': '12px',\n '--tabpanel-track-pad': '3px',\n '--tabpanel-item-gap': '1px',\n '--tabpanel-indicator-ease': 'cubic-bezier(0.32, 0.72, 0, 1)',\n '--tabpanel-indicator-ms': '380ms',\n} as const satisfies SxProps<Theme>\n\nexport type TabPanelStyleVars = {\n accent?: string\n trackBg?: string\n tabColor?: string\n tabColorActive?: string\n tabColorDisabled?: string\n badgeColor?: string\n badgeBg?: string\n focusBg?: string\n focusBgDark?: string\n focusShadow?: string\n focusShadowDark?: string\n focusRadius?: string\n trackRadius?: string\n}\n\n/** Maps typed style tokens onto CSS custom properties for the root wrapper. */\nexport function tabPanelStyleToCssVars(\n style?: TabPanelStyleVars\n): Record<string, string> {\n if (!style) {\n return {}\n }\n\n const vars: Record<string, string> = {}\n if (style.accent != null) vars['--tabpanel-accent'] = style.accent\n if (style.trackBg != null) vars['--tabpanel-track-bg'] = style.trackBg\n if (style.tabColor != null) vars['--tabpanel-tab-color'] = style.tabColor\n if (style.tabColorActive != null) {\n vars['--tabpanel-tab-color-active'] = style.tabColorActive\n }\n if (style.tabColorDisabled != null) {\n vars['--tabpanel-tab-color-disabled'] = style.tabColorDisabled\n }\n if (style.badgeColor != null) vars['--tabpanel-badge-color'] = style.badgeColor\n if (style.badgeBg != null) vars['--tabpanel-badge-bg'] = style.badgeBg\n if (style.focusBg != null) vars['--tabpanel-focus-bg'] = style.focusBg\n if (style.focusBgDark != null) {\n vars['--tabpanel-focus-bg-dark'] = style.focusBgDark\n }\n if (style.focusShadow != null) {\n vars['--tabpanel-focus-shadow'] = style.focusShadow\n }\n if (style.focusShadowDark != null) {\n vars['--tabpanel-focus-shadow-dark'] = style.focusShadowDark\n }\n if (style.focusRadius != null) {\n vars['--tabpanel-focus-radius'] = style.focusRadius\n }\n if (style.trackRadius != null) {\n vars['--tabpanel-track-radius'] = style.trackRadius\n }\n return vars\n}\n"],"mappings":"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","names":["default","useMemo","default","useMemo"]}
@@ -0,0 +1,28 @@
1
+ // src/_utils/_func/sx.ts
2
+ function flattenSx(part) {
3
+ if (part == null || typeof part === "boolean") {
4
+ return [];
5
+ }
6
+ if (Array.isArray(part)) {
7
+ return part.flatMap(flattenSx);
8
+ }
9
+ if (typeof part === "function" || typeof part === "object") {
10
+ return [part];
11
+ }
12
+ return [];
13
+ }
14
+ function mergeSx(...parts) {
15
+ const list = parts.flatMap(flattenSx);
16
+ if (list.length === 0) {
17
+ return void 0;
18
+ }
19
+ if (list.length === 1) {
20
+ return list[0];
21
+ }
22
+ return list;
23
+ }
24
+
25
+ export {
26
+ mergeSx
27
+ };
28
+ //# sourceMappingURL=chunk-AFLEG5ZC.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/_utils/_func/sx.ts"],"sourcesContent":["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"],"mappings":";AAWA,SAAS,UAAU,MAA0B;AAC3C,MAAI,QAAQ,QAAQ,OAAO,SAAS,WAAW;AAC7C,WAAO,CAAC;AAAA,EACV;AACA,MAAI,MAAM,QAAQ,IAAI,GAAG;AACvB,WAAO,KAAK,QAAQ,SAAS;AAAA,EAC/B;AACA,MAAI,OAAO,SAAS,cAAc,OAAO,SAAS,UAAU;AAC1D,WAAO,CAAC,IAAI;AAAA,EACd;AACA,SAAO,CAAC;AACV;AASO,SAAS,WAAW,OAAkD;AAC3E,QAAM,OAAO,MAAM,QAAQ,SAAS;AACpC,MAAI,KAAK,WAAW,GAAG;AACrB,WAAO;AAAA,EACT;AACA,MAAI,KAAK,WAAW,GAAG;AACrB,WAAO,KAAK,CAAC;AAAA,EACf;AACA,SAAO;AACT;","names":[]}
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  StyledMenuItem
3
- } from "./chunk-HR3A4H4E.mjs";
3
+ } from "./chunk-PEJL2T2K.mjs";
4
4
  import {
5
5
  default3 as default7,
6
6
  default4 as default8
7
- } from "./chunk-TDRA5EZI.mjs";
7
+ } from "./chunk-PUREEN2J.mjs";
8
8
  import {
9
9
  default as default4,
10
10
  default2 as default5,
@@ -16,7 +16,7 @@ import {
16
16
  } from "./chunk-ZVFYOXDE.mjs";
17
17
  import {
18
18
  mergeSx
19
- } from "./chunk-S6EZVRZC.mjs";
19
+ } from "./chunk-AFLEG5ZC.mjs";
20
20
 
21
21
  // src/components/elemental/Select/src/MuiSelect/MuiSelect.tsx
22
22
  import { forwardRef } from "react";
@@ -169,4 +169,4 @@ export {
169
169
  MuiSelect_default,
170
170
  selectTheme
171
171
  };
172
- //# sourceMappingURL=chunk-UGMRJMFZ.mjs.map
172
+ //# sourceMappingURL=chunk-BO5CU4ZM.mjs.map
@@ -5,9 +5,11 @@ import {
5
5
  Chip
6
6
  } from "./chunk-OP6LKXPA.mjs";
7
7
  import {
8
- default as default2,
8
+ default as default2
9
+ } from "./chunk-PNSJC6PC.mjs";
10
+ import {
9
11
  mergeSx
10
- } from "./chunk-S6EZVRZC.mjs";
12
+ } from "./chunk-AFLEG5ZC.mjs";
11
13
 
12
14
  // src/components/elemental/Button/src/Button/Button.tsx
13
15
  import MuiButton from "@mui/material/Button";
@@ -411,4 +413,4 @@ export {
411
413
  iconButtonTheme,
412
414
  TagButton_default
413
415
  };
414
- //# sourceMappingURL=chunk-JIU5GVM7.mjs.map
416
+ //# sourceMappingURL=chunk-D4XPNSSI.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/elemental/Button/src/Button/Button.tsx","../src/components/elemental/Button/src/Button/themes.ts","../src/components/elemental/Button/src/IconButton/IconButton.tsx","../src/components/elemental/Button/src/IconButton/IconButton.HoverSpinnin.tsx","../src/components/elemental/Button/src/IconButton/IconButton.Fade.tsx","../src/components/elemental/Button/src/IconButton/theme.ts","../src/components/elemental/Button/src/TagButton/TagButton.tsx","../src/components/elemental/Button/src/TagButton/theme.ts"],"sourcesContent":["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\">","'use client'\nimport {forwardRef} from 'react'\nimport MuiIconButton from '@mui/material/IconButton'\nimport { Tooltip } from '@/ele/Tooltip'\nimport { type TooltipProps } from '@mui/material/Tooltip'\nimport { Box } from '@/ele/Box'\n\ntype IconButtonProps = React.ComponentProps<typeof MuiIconButton>\ntype Props = {\n /** The Icon to render */\n children: React.ReactNode;\n /** The title of the tooltip */\n title?: string;\n /** \n * The color theme of the entire component.\n * @default 'secondary' (from theme)\n */\n color?: IconButtonProps['color'];\n /**\n * The size of the component.\n * @default 'small' (from theme)\n */\n size?: IconButtonProps['size'];\n \n selected?: boolean;\n \n slotProps?: {\n tooltip?: Omit<TooltipProps, \"children\">\n };\n} & Omit<IconButtonProps, \"color\" | \"size\">;\n\n/**\n * A MuiIconButton wrapped in a MuiTooltip.\n * Default props like `size` and `color` are handled by the theme.\n */\nconst IconButton = forwardRef<HTMLButtonElement, Props>(({\n title = \"\",\n children,\n color,\n size,\n slotProps,\n selected,\n className,\n ...props\n}, ref) => {\n return (\n <Tooltip \n title={title} \n slotProps={{\n popper: {\n sx: {\n textTransform: \"capitalize\",\n }\n },\n ...slotProps?.tooltip\n }}\n >\n <Box component=\"span\" sx={{width: \"fit-content\"}}>\n <MuiIconButton\n ref={ref}\n color={color}\n size={size}\n className={[className, selected ? 'Mui-selected' : ''].filter(Boolean).join(' ')}\n {...props}\n >\n {children}\n </MuiIconButton>\n </Box>\n </Tooltip>\n )\n})\n\nexport default IconButton","'use client'\nimport { styled } from '@mui/material/styles'\n\nimport IconButton from './IconButton'\n\nexport default styled(IconButton)({\n \"&:hover svg\": {\n transform:\"rotate(360deg)\",\n transition:\"transform 0.3s ease-in-out\",\n },\n})","'use client'\nimport { forwardRef, useState, useEffect, type ComponentProps } from 'react'\nimport { Box } from '@/ele/Box'\nimport IconButton from './IconButton'\n\n// reuse the public prop types from the regular IconButton component; this\n// automatically keeps the two in sync and avoids exporting an explicit\n// `Props` type from IconButton.tsx.\nexport type IconButtonFadeProps = ComponentProps<typeof IconButton> & {\n /**\n * element that is shown temporarily when the button is activated (usually\n * another icon). the component will fade from `children` to this element\n * and then automatically back again after `fadeDuration`.\n */\n fadeIcon: React.ReactNode;\n /** how long (in ms) the fade icon remains visible before reverting */\n fadeDuration?: number;\n};\n\nconst IconButtonFade = forwardRef<HTMLButtonElement, IconButtonFadeProps>(({\n fadeIcon,\n fadeDuration = 1000,\n children,\n onClick,\n ...rest\n}, ref) => {\n const [active, setActive] = useState(false);\n\n const handleClick: React.MouseEventHandler<HTMLButtonElement> = (e) => {\n onClick?.(e);\n setActive(true);\n };\n\n useEffect(() => {\n if (!active) return;\n const timer = setTimeout(() => setActive(false), fadeDuration);\n return () => clearTimeout(timer);\n }, [active, fadeDuration]);\n\n return (\n <IconButton\n ref={ref}\n {...rest}\n onClick={handleClick}\n >\n <Box sx={{ position: 'relative', display: 'inline-flex' }}>\n <Box\n sx={{\n opacity: active ? 0 : 1,\n transition: 'opacity 0.2s ease-in-out',\n }}\n >\n {children}\n </Box>\n <Box\n sx={{\n position: 'absolute',\n top: 0,\n left: 0,\n opacity: active ? 1 : 0,\n transition: 'opacity 0.2s ease-in-out',\n }}\n >\n {fadeIcon}\n </Box>\n </Box>\n </IconButton>\n )\n})\n\nexport default IconButtonFade\n","import type { MuiComponentTheme } from '@/_utils/_types'\n\nexport const iconButtonTheme = {\n defaultProps: {\n focusRipple: false,\n disableRipple: true,\n color: 'secondary',\n size: 'small',\n },\n styleOverrides: {\n root: ({theme}) =>({\n // MUI IconButton defaults to 150ms background-color. Drop color\n // interpolation; :active scale stays a snap transform.\n transition: 'background-color 0s, border-color 0s, color 0s',\n '--button-color':'var(--mui-palette-text-primary)',\n '--button-hover-border-color':'var(--mui-palette-border-hover-1)',\n \"&.MuiIconButton-colorError\":{\n '--button-color':'var(--mui-palette-error-main)',\n '--button-hover-border-color':'var(--mui-palette-error-dark)',\n },\n \"&.MuiIconButton-colorInfo\":{\n '--button-color':'var(--mui-palette-info-main)',\n '--button-hover-border-color':'var(--mui-palette-info-dark)',\n },\n \"&.MuiIconButton-colorSuccess\":{\n '--button-color':'var(--mui-palette-success-dark)',\n '--button-hover-border-color':'var(--mui-palette-success-dark)',\n },\n \"&.MuiIconButton-colorWarning\":{\n '--button-color':'var(--mui-palette-warning-main)',\n '--button-hover-border-color':'var(--mui-palette-warning-dark)',\n },\n \"&.MuiIconButton-colorSecondary\":{\n '--button-color':'var(--mui-palette-secondary-dark)',\n '--button-hover-border-color':'var(--mui-palette-secondary-main)',\n },\n \"&.MuiIconButton-colorPrimary\":{\n '--button-color':'var(--mui-palette-primary-emphasis)',\n '--button-hover-border-color':'var(--mui-palette-primary-emphasis)',\n },\n \"&.MuiIconButton-colorSystem\":{\n '--button-color':'var(--mui-palette-system-main)',\n '--button-hover-border-color':'var(--mui-palette-system-dark)',\n },\n \"&.MuiIconButton-colorInsight\":{\n '--button-color':'var(--mui-palette-insight-main)',\n '--button-hover-border-color':'var(--mui-palette-insight-dark)',\n },\n\n '--color-p':'var(--button-color)',\n '--bg': 'color-mix(in lab,rgba(255, 255, 255, 0.04) 95%,var(--color-p) 5%)',\n padding: theme.spacing(0.5),\n borderRadius: '8px',\n \n color: 'var(--color-p)',\n\n backgroundColor:'var(--bg)',\n \"&:active svg\": {\n scale:\"0.9\",\n },\n\n \"&.Mui-disabled\":{\n '--color-p':'var(--mui-palette-action-disabled)',\n '--bg': 'color-mix(in lab,rgba(255, 255, 255, 0.04) 95%,var(--color-p) 5%)',\n color: 'var(--color-p)',\n backgroundColor:'var(--bg)',\n\n '& svg.MuiSvgIcon-root':{\n color: 'var(--color-p)',\n },\n },\n\n border: '1px solid transparent',\n \"&:hover\": {\n borderColor: 'color-mix(in lab, var(--mui-palette-border-1) 80%, var(--button-hover-border-color))',\n },\n\n \"&:active\": {\n scale:\"0.9\",\n },\n }),\n },\n\n} as const satisfies MuiComponentTheme<\"MuiIconButton\">","'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 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"],"mappings":"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","names":["default","jsx","default","forwardRef","jsx","forwardRef","default","styled","styled"]}
1
+ {"version":3,"sources":["../src/components/elemental/Button/src/Button/Button.tsx","../src/components/elemental/Button/src/Button/themes.ts","../src/components/elemental/Button/src/IconButton/IconButton.tsx","../src/components/elemental/Button/src/IconButton/IconButton.HoverSpinnin.tsx","../src/components/elemental/Button/src/IconButton/IconButton.Fade.tsx","../src/components/elemental/Button/src/IconButton/theme.ts","../src/components/elemental/Button/src/TagButton/TagButton.tsx","../src/components/elemental/Button/src/TagButton/theme.ts"],"sourcesContent":["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\">","'use client'\nimport {forwardRef} from 'react'\nimport MuiIconButton from '@mui/material/IconButton'\nimport { Tooltip } from '@/ele/Tooltip'\nimport { type TooltipProps } from '@mui/material/Tooltip'\nimport { Box } from '@/ele/Box'\n\ntype IconButtonProps = React.ComponentProps<typeof MuiIconButton>\ntype Props = {\n /** The Icon to render */\n children: React.ReactNode;\n /** The title of the tooltip */\n title?: string;\n /** \n * The color theme of the entire component.\n * @default 'secondary' (from theme)\n */\n color?: IconButtonProps['color'];\n /**\n * The size of the component.\n * @default 'small' (from theme)\n */\n size?: IconButtonProps['size'];\n \n selected?: boolean;\n \n slotProps?: {\n tooltip?: Omit<TooltipProps, \"children\">\n };\n} & Omit<IconButtonProps, \"color\" | \"size\">;\n\n/**\n * A MuiIconButton wrapped in a MuiTooltip.\n * Default props like `size` and `color` are handled by the theme.\n */\nconst IconButton = forwardRef<HTMLButtonElement, Props>(({\n title = \"\",\n children,\n color,\n size,\n slotProps,\n selected,\n className,\n ...props\n}, ref) => {\n return (\n <Tooltip \n title={title} \n slotProps={{\n popper: {\n sx: {\n textTransform: \"capitalize\",\n }\n },\n ...slotProps?.tooltip\n }}\n >\n <Box component=\"span\" sx={{width: \"fit-content\"}}>\n <MuiIconButton\n ref={ref}\n color={color}\n size={size}\n className={[className, selected ? 'Mui-selected' : ''].filter(Boolean).join(' ')}\n {...props}\n >\n {children}\n </MuiIconButton>\n </Box>\n </Tooltip>\n )\n})\n\nexport default IconButton","'use client'\nimport { styled } from '@mui/material/styles'\n\nimport IconButton from './IconButton'\n\nexport default styled(IconButton)({\n \"&:hover svg\": {\n transform:\"rotate(360deg)\",\n transition:\"transform 0.3s ease-in-out\",\n },\n})","'use client'\nimport { forwardRef, useState, useEffect, type ComponentProps } from 'react'\nimport { Box } from '@/ele/Box'\nimport IconButton from './IconButton'\n\n// reuse the public prop types from the regular IconButton component; this\n// automatically keeps the two in sync and avoids exporting an explicit\n// `Props` type from IconButton.tsx.\nexport type IconButtonFadeProps = ComponentProps<typeof IconButton> & {\n /**\n * element that is shown temporarily when the button is activated (usually\n * another icon). the component will fade from `children` to this element\n * and then automatically back again after `fadeDuration`.\n */\n fadeIcon: React.ReactNode;\n /** how long (in ms) the fade icon remains visible before reverting */\n fadeDuration?: number;\n};\n\nconst IconButtonFade = forwardRef<HTMLButtonElement, IconButtonFadeProps>(({\n fadeIcon,\n fadeDuration = 1000,\n children,\n onClick,\n ...rest\n}, ref) => {\n const [active, setActive] = useState(false);\n\n const handleClick: React.MouseEventHandler<HTMLButtonElement> = (e) => {\n onClick?.(e);\n setActive(true);\n };\n\n useEffect(() => {\n if (!active) return;\n const timer = setTimeout(() => setActive(false), fadeDuration);\n return () => clearTimeout(timer);\n }, [active, fadeDuration]);\n\n return (\n <IconButton\n ref={ref}\n {...rest}\n onClick={handleClick}\n >\n <Box sx={{ position: 'relative', display: 'inline-flex' }}>\n <Box\n sx={{\n opacity: active ? 0 : 1,\n transition: 'opacity 0.2s ease-in-out',\n }}\n >\n {children}\n </Box>\n <Box\n sx={{\n position: 'absolute',\n top: 0,\n left: 0,\n opacity: active ? 1 : 0,\n transition: 'opacity 0.2s ease-in-out',\n }}\n >\n {fadeIcon}\n </Box>\n </Box>\n </IconButton>\n )\n})\n\nexport default IconButtonFade\n","import type { MuiComponentTheme } from '@/_utils/_types'\n\nexport const iconButtonTheme = {\n defaultProps: {\n focusRipple: false,\n disableRipple: true,\n color: 'secondary',\n size: 'small',\n },\n styleOverrides: {\n root: ({theme}) =>({\n // MUI IconButton defaults to 150ms background-color. Drop color\n // interpolation; :active scale stays a snap transform.\n transition: 'background-color 0s, border-color 0s, color 0s',\n '--button-color':'var(--mui-palette-text-primary)',\n '--button-hover-border-color':'var(--mui-palette-border-hover-1)',\n \"&.MuiIconButton-colorError\":{\n '--button-color':'var(--mui-palette-error-main)',\n '--button-hover-border-color':'var(--mui-palette-error-dark)',\n },\n \"&.MuiIconButton-colorInfo\":{\n '--button-color':'var(--mui-palette-info-main)',\n '--button-hover-border-color':'var(--mui-palette-info-dark)',\n },\n \"&.MuiIconButton-colorSuccess\":{\n '--button-color':'var(--mui-palette-success-dark)',\n '--button-hover-border-color':'var(--mui-palette-success-dark)',\n },\n \"&.MuiIconButton-colorWarning\":{\n '--button-color':'var(--mui-palette-warning-main)',\n '--button-hover-border-color':'var(--mui-palette-warning-dark)',\n },\n \"&.MuiIconButton-colorSecondary\":{\n '--button-color':'var(--mui-palette-secondary-dark)',\n '--button-hover-border-color':'var(--mui-palette-secondary-main)',\n },\n \"&.MuiIconButton-colorPrimary\":{\n '--button-color':'var(--mui-palette-primary-emphasis)',\n '--button-hover-border-color':'var(--mui-palette-primary-emphasis)',\n },\n \"&.MuiIconButton-colorSystem\":{\n '--button-color':'var(--mui-palette-system-main)',\n '--button-hover-border-color':'var(--mui-palette-system-dark)',\n },\n \"&.MuiIconButton-colorInsight\":{\n '--button-color':'var(--mui-palette-insight-main)',\n '--button-hover-border-color':'var(--mui-palette-insight-dark)',\n },\n\n '--color-p':'var(--button-color)',\n '--bg': 'color-mix(in lab,rgba(255, 255, 255, 0.04) 95%,var(--color-p) 5%)',\n padding: theme.spacing(0.5),\n borderRadius: '8px',\n \n color: 'var(--color-p)',\n\n backgroundColor:'var(--bg)',\n \"&:active svg\": {\n scale:\"0.9\",\n },\n\n \"&.Mui-disabled\":{\n '--color-p':'var(--mui-palette-action-disabled)',\n '--bg': 'color-mix(in lab,rgba(255, 255, 255, 0.04) 95%,var(--color-p) 5%)',\n color: 'var(--color-p)',\n backgroundColor:'var(--bg)',\n\n '& svg.MuiSvgIcon-root':{\n color: 'var(--color-p)',\n },\n },\n\n border: '1px solid transparent',\n \"&:hover\": {\n borderColor: 'color-mix(in lab, var(--mui-palette-border-1) 80%, var(--button-hover-border-color))',\n },\n\n \"&:active\": {\n scale:\"0.9\",\n },\n }),\n },\n\n} as const satisfies MuiComponentTheme<\"MuiIconButton\">","'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 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"],"mappings":"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","names":["default","jsx","default","forwardRef","jsx","forwardRef","default","styled","styled"]}
@@ -0,0 +1,72 @@
1
+ import {
2
+ default106 as default4,
3
+ default145 as default5
4
+ } from "./chunk-ZVFYOXDE.mjs";
5
+ import {
6
+ Button
7
+ } from "./chunk-D4XPNSSI.mjs";
8
+ import {
9
+ default as default3
10
+ } from "./chunk-4RPFRNXG.mjs";
11
+ import {
12
+ default as default2
13
+ } from "./chunk-PNSJC6PC.mjs";
14
+
15
+ // src/components/elemental/InlineError/src/InlineError.tsx
16
+ import { jsx, jsxs } from "react/jsx-runtime";
17
+ function InlineError({
18
+ message,
19
+ retry,
20
+ retryLabel = "Retry",
21
+ sx
22
+ }) {
23
+ return /* @__PURE__ */ jsxs(
24
+ default2,
25
+ {
26
+ role: "alert",
27
+ "data-testid": "inline-error",
28
+ sx: [
29
+ {
30
+ display: "flex",
31
+ alignItems: "center",
32
+ gap: 1,
33
+ px: 1.5,
34
+ py: 1,
35
+ borderRadius: "10px",
36
+ border: "1px solid var(--mui-palette-border-1)",
37
+ backgroundColor: "color-mix(in srgb, var(--mui-palette-error-main) 8%, var(--mui-palette-background-paper))",
38
+ color: "var(--mui-palette-text-primary)",
39
+ boxSizing: "border-box"
40
+ },
41
+ ...Array.isArray(sx) ? sx : sx ? [sx] : []
42
+ ],
43
+ children: [
44
+ /* @__PURE__ */ jsx(
45
+ default5,
46
+ {
47
+ "aria-hidden": true,
48
+ sx: { color: "var(--mui-palette-error-main)", fontSize: "1.15rem", flexShrink: 0 }
49
+ }
50
+ ),
51
+ /* @__PURE__ */ jsx(default2, { sx: { flex: 1, minWidth: 0 }, children: typeof message === "string" ? /* @__PURE__ */ jsx(default3, { variant: "body2", sx: { m: 0 }, children: message }) : message }),
52
+ retry ? /* @__PURE__ */ jsx(
53
+ Button,
54
+ {
55
+ size: "small",
56
+ variant: "text",
57
+ color: "error",
58
+ onClick: retry,
59
+ startIcon: /* @__PURE__ */ jsx(default4, { sx: { fontSize: "1rem !important" } }),
60
+ sx: { textTransform: "none", flexShrink: 0 },
61
+ children: retryLabel
62
+ }
63
+ ) : null
64
+ ]
65
+ }
66
+ );
67
+ }
68
+
69
+ export {
70
+ InlineError
71
+ };
72
+ //# sourceMappingURL=chunk-DPIMA5IO.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/elemental/InlineError/src/InlineError.tsx"],"sourcesContent":["'use client'\nimport type React from 'react'\nimport { Box } from '@/ele/Box'\nimport { Typography } from '@/ele/Typography'\nimport { Button } from '@/ele/Button'\nimport { ErrorOutlineOutlinedIcon, ReplayIcon } from '@/icons/MuiIcon'\n\nexport type InlineErrorProps = {\n message: React.ReactNode\n retry?: () => void\n retryLabel?: string\n sx?: React.ComponentProps<typeof Box>['sx']\n}\n\n/**\n * Compact inline error with optional retry — quiet border, soft glass.\n */\nexport function InlineError({\n message,\n retry,\n retryLabel = 'Retry',\n sx,\n}: InlineErrorProps) {\n return (\n <Box\n role=\"alert\"\n data-testid=\"inline-error\"\n sx={[\n {\n display: 'flex',\n alignItems: 'center',\n gap: 1,\n px: 1.5,\n py: 1,\n borderRadius: '10px',\n border: '1px solid var(--mui-palette-border-1)',\n backgroundColor:\n 'color-mix(in srgb, var(--mui-palette-error-main) 8%, var(--mui-palette-background-paper))',\n color: 'var(--mui-palette-text-primary)',\n boxSizing: 'border-box',\n },\n ...(Array.isArray(sx) ? sx : sx ? [sx] : []),\n ] as never}\n >\n <ErrorOutlineOutlinedIcon\n aria-hidden\n sx={{ color: 'var(--mui-palette-error-main)', fontSize: '1.15rem', flexShrink: 0 }}\n />\n <Box sx={{ flex: 1, minWidth: 0 }}>\n {typeof message === 'string' ? (\n <Typography variant=\"body2\" sx={{ m: 0 }}>\n {message}\n </Typography>\n ) : (\n message\n )}\n </Box>\n {retry ? (\n <Button\n size=\"small\"\n variant=\"text\"\n color=\"error\"\n onClick={retry}\n startIcon={<ReplayIcon sx={{ fontSize: '1rem !important' }} />}\n sx={{ textTransform: 'none', flexShrink: 0 }}\n >\n {retryLabel}\n </Button>\n ) : null}\n </Box>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;AAwBI,SAoBE,KApBF;AAPG,SAAS,YAAY;AAAA,EAC1B;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb;AACF,GAAqB;AACnB,SACE;AAAA,IAACA;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,eAAY;AAAA,MACZ,IAAI;AAAA,QACF;AAAA,UACE,SAAS;AAAA,UACT,YAAY;AAAA,UACZ,KAAK;AAAA,UACL,IAAI;AAAA,UACJ,IAAI;AAAA,UACJ,cAAc;AAAA,UACd,QAAQ;AAAA,UACR,iBACE;AAAA,UACF,OAAO;AAAA,UACP,WAAW;AAAA,QACb;AAAA,QACA,GAAI,MAAM,QAAQ,EAAE,IAAI,KAAK,KAAK,CAAC,EAAE,IAAI,CAAC;AAAA,MAC5C;AAAA,MAEA;AAAA;AAAA,UAACA;AAAA,UAAA;AAAA,YACC,eAAW;AAAA,YACX,IAAI,EAAE,OAAO,iCAAiC,UAAU,WAAW,YAAY,EAAE;AAAA;AAAA,QACnF;AAAA,QACA,oBAACA,UAAA,EAAI,IAAI,EAAE,MAAM,GAAG,UAAU,EAAE,GAC7B,iBAAO,YAAY,WAClB,oBAACA,UAAA,EAAW,SAAQ,SAAQ,IAAI,EAAE,GAAG,EAAE,GACpC,mBACH,IAEA,SAEJ;AAAA,QACC,QACC;AAAA,UAAC;AAAA;AAAA,YACC,MAAK;AAAA,YACL,SAAQ;AAAA,YACR,OAAM;AAAA,YACN,SAAS;AAAA,YACT,WAAW,oBAACA,UAAA,EAAW,IAAI,EAAE,UAAU,kBAAkB,GAAG;AAAA,YAC5D,IAAI,EAAE,eAAe,QAAQ,YAAY,EAAE;AAAA,YAE1C;AAAA;AAAA,QACH,IACE;AAAA;AAAA;AAAA,EACN;AAEJ;","names":["default"]}