@12-apps/ui 6.37.0 → 6.38.0

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 (661) hide show
  1. package/dist/_internal/components/data-display/AsyncStateContainer/AsyncStateContainer.js +4 -4
  2. package/dist/_internal/components/data-display/CardKit/CardKebab.js +2 -2
  3. package/dist/_internal/components/data-display/DataViews/DataViewsBoard.js +2 -2
  4. package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +40 -40
  5. package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +48 -49
  6. package/dist/_internal/components/data-display/DataViews/DeleteViewDialog.js +4 -5
  7. package/dist/_internal/components/data-display/DataViews/ManageViewsDialog.js +4 -5
  8. package/dist/_internal/components/data-display/DataViews/SaveViewModal.js +5 -6
  9. package/dist/_internal/components/data-display/DataViews/base-card.js +4 -5
  10. package/dist/_internal/components/data-display/DataViews/base-list-card-geometry.js +4 -4
  11. package/dist/_internal/components/data-display/DataViews/base-list-card-slots.js +3 -3
  12. package/dist/_internal/components/data-display/DataViews/base-list-card.js +7 -8
  13. package/dist/_internal/components/data-display/DataViews/data-views-category-pill.js +8 -8
  14. package/dist/_internal/components/data-display/DataViews/data-views-columns-tab.js +2 -2
  15. package/dist/_internal/components/data-display/DataViews/data-views-columns.js +3 -3
  16. package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +5 -5
  17. package/dist/_internal/components/data-display/DataViews/data-views-display-tabs.js +2 -2
  18. package/dist/_internal/components/data-display/DataViews/data-views-empty.js +2 -2
  19. package/dist/_internal/components/data-display/DataViews/data-views-export.js +2 -2
  20. package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +14 -14
  21. package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +6 -6
  22. package/dist/_internal/components/data-display/DataViews/data-views-grid-helpers.js +2 -2
  23. package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +37 -37
  24. package/dist/_internal/components/data-display/DataViews/data-views-header-row.js +2 -2
  25. package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +14 -14
  26. package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +11 -11
  27. package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +12 -12
  28. package/dist/_internal/components/data-display/DataViews/data-views-pagination.js +4 -4
  29. package/dist/_internal/components/data-display/DataViews/data-views-range-pill.js +2 -2
  30. package/dist/_internal/components/data-display/DataViews/data-views-select-all-strip.js +2 -2
  31. package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +17 -17
  32. package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +14 -15
  33. package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +16 -16
  34. package/dist/_internal/components/data-display/DataViews/data-views-view-nav.js +2 -2
  35. package/dist/_internal/components/data-display/DataViews/save-view-preview.js +2 -2
  36. package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +4 -4
  37. package/dist/_internal/components/data-display/DescriptionItem/DescriptionItem.js +2 -2
  38. package/dist/_internal/components/data-display/FleetMap/FleetBody.js +4 -4
  39. package/dist/_internal/components/data-display/FleetMap/FleetMap.js +5 -5
  40. package/dist/_internal/components/data-display/FleetMap/FleetRoster.js +3 -3
  41. package/dist/_internal/components/data-display/LazyImage/LazyImage.js +3 -3
  42. package/dist/_internal/components/data-display/LoadingState/LoadingState.js +3 -3
  43. package/dist/_internal/components/data-display/StatCard/StatCard.js +3 -3
  44. package/dist/_internal/components/data-display/index.js +11 -11
  45. package/dist/_internal/components/feedback/Dialog/Dialog.js +3 -3
  46. package/dist/_internal/components/feedback/Dialog/Dialog.styles.js +2 -2
  47. package/dist/_internal/components/feedback/Modal/Modal.js +3 -2
  48. package/dist/_internal/components/feedback/Modal/Modal.styles.js +2 -1
  49. package/dist/_internal/components/feedback/Sonner/Sonner.js +2 -2
  50. package/dist/_internal/components/feedback/Sonner/SonnerToast.js +1 -1
  51. package/dist/_internal/components/feedback/StackedModal/StackedModal.js +4 -3
  52. package/dist/_internal/components/feedback/StackedModal/StackedModal.parts.js +3 -2
  53. package/dist/_internal/components/feedback/StackedModal/StackedModal.styles.js +2 -1
  54. package/dist/_internal/components/feedback/Toast/Toast.js +2 -1
  55. package/dist/_internal/components/feedback/TutorialOverlay/TutorialOverlay.geometry.js +1 -1
  56. package/dist/_internal/components/feedback/TutorialOverlay/TutorialOverlay.hooks.js +3 -2
  57. package/dist/_internal/components/feedback/TutorialOverlay/TutorialOverlay.js +5 -4
  58. package/dist/_internal/components/feedback/TutorialOverlay/TutorialStepBody.js +2 -1
  59. package/dist/_internal/components/feedback/index.js +14 -15
  60. package/dist/_internal/components/form/total-form/FormErrorSnackbar.js +3 -2
  61. package/dist/_internal/components/index.js +83 -84
  62. package/dist/_internal/components/layout/Accordion/Accordion.js +3 -2
  63. package/dist/_internal/components/layout/Accordion/Accordion.styles.js +2 -1
  64. package/dist/_internal/components/layout/Box/Box.js +1 -1
  65. package/dist/_internal/components/layout/Card/Card.js +3 -3
  66. package/dist/_internal/components/layout/Card/Card.styles.js +2 -2
  67. package/dist/_internal/components/layout/Collapsible/Collapsible.helpers.js +2 -1
  68. package/dist/_internal/components/layout/Collapsible/Collapsible.js +3 -2
  69. package/dist/_internal/components/layout/ContentToolbar/ColumnsMenu.js +1 -1
  70. package/dist/_internal/components/layout/ContentToolbar/ContentToolbar.js +1 -1
  71. package/dist/_internal/components/layout/ContentToolbar/FilterTrigger.js +1 -1
  72. package/dist/_internal/components/layout/ContentToolbar/MultiSelectDropdown.js +1 -1
  73. package/dist/_internal/components/layout/ContentToolbar/SavedViewsMenu.js +1 -1
  74. package/dist/_internal/components/layout/ContentToolbar/SortByDropdown.js +1 -1
  75. package/dist/_internal/components/layout/ContentToolbar/ViewSelector.js +1 -1
  76. package/dist/_internal/components/layout/Dashboard/Dashboard.js +2 -2
  77. package/dist/_internal/components/layout/Dashboard/DashboardParts.js +1 -1
  78. package/dist/_internal/components/layout/Drawer/Drawer.js +2 -1
  79. package/dist/_internal/components/layout/ScrollArea/ScrollArea.js +5 -4
  80. package/dist/_internal/components/layout/ScrollArea/ScrollArea.styles.js +6 -3
  81. package/dist/_internal/components/layout/ScrollArea/ScrollAreaContent.js +2 -1
  82. package/dist/_internal/components/layout/ScrollArea/ScrollViewport.js +3 -2
  83. package/dist/_internal/components/layout/Separator/Separator.js +4 -2
  84. package/dist/_internal/components/layout/Separator/Separator.styles.js +3 -1
  85. package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.items.js +3 -3
  86. package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.js +8 -8
  87. package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.rail.js +4 -4
  88. package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.styles.js +6 -5
  89. package/dist/_internal/components/layout/SettingsLayout/SettingsPanel.js +5 -5
  90. package/dist/_internal/components/layout/SettingsLayout/SettingsSectionChips.js +3 -3
  91. package/dist/_internal/components/layout/SettingsLayout/SettingsSectionHeader.js +2 -2
  92. package/dist/_internal/components/layout/SettingsLayout/SettingsStatusMarker.js +2 -2
  93. package/dist/_internal/components/layout/Sidebar/Sidebar.js +2 -1
  94. package/dist/_internal/components/layout/Skeleton/Skeleton.js +3 -2
  95. package/dist/_internal/components/layout/Skeleton/Skeleton.styles.js +6 -3
  96. package/dist/_internal/components/layout/Spacer/Spacer.js +2 -1
  97. package/dist/_internal/components/layout/Stack/Stack.js +2 -2
  98. package/dist/_internal/components/layout/TableFilter/TableFilter.js +1 -1
  99. package/dist/_internal/components/layout/index.js +27 -28
  100. package/dist/_internal/components/navigation/AppHeader/AppHeader.brand.js +1 -1
  101. package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +3 -4
  102. package/dist/_internal/components/navigation/AppHeader/AppHeader.identity.js +2 -2
  103. package/dist/_internal/components/navigation/AppHeader/AppHeader.js +1 -1
  104. package/dist/_internal/components/navigation/Breadcrumbs/BreadcrumbEntry.js +2 -2
  105. package/dist/_internal/components/navigation/Breadcrumbs/Breadcrumbs.js +3 -3
  106. package/dist/_internal/components/navigation/Breadcrumbs/Breadcrumbs.styles.js +1 -1
  107. package/dist/_internal/components/navigation/CommandPalette/CommandPalette.js +3 -3
  108. package/dist/_internal/components/navigation/CommandPalette/CommandPaletteResults.js +2 -2
  109. package/dist/_internal/components/navigation/CommandPalette/ShortcutChip.js +1 -1
  110. package/dist/_internal/components/navigation/ContextMenu/ContextMenu.js +1 -1
  111. package/dist/_internal/components/navigation/DropdownMenu/DropdownMenu.js +1 -1
  112. package/dist/_internal/components/navigation/NavigationMenu/NavigationMegaSection.js +4 -4
  113. package/dist/_internal/components/navigation/NavigationMenu/NavigationMenu.js +6 -6
  114. package/dist/_internal/components/navigation/NavigationMenu/NavigationMenu.shell.js +2 -2
  115. package/dist/_internal/components/navigation/NavigationMenu/NavigationMenu.styles.js +1 -1
  116. package/dist/_internal/components/navigation/NavigationMenu/NavigationMenuItem.js +2 -2
  117. package/dist/_internal/components/navigation/NavigationMenu/NavigationStandardBody.js +4 -4
  118. package/dist/_internal/components/navigation/Pagination/Pagination.js +3 -3
  119. package/dist/_internal/components/navigation/Pagination/Pagination.styles.js +1 -1
  120. package/dist/_internal/components/navigation/Pagination/PaginationParts.js +2 -1
  121. package/dist/_internal/components/navigation/Tabs/Tabs.js +10 -3
  122. package/dist/_internal/components/navigation/Tabs/Tabs.styles.js +8 -1
  123. package/dist/_internal/components/navigation/Tabs/TabsPanel.js +2 -1
  124. package/dist/_internal/components/navigation/index.js +26 -27
  125. package/dist/_internal/components/typography/Blockquote/Blockquote.js +1 -1
  126. package/dist/_internal/components/typography/Code/Code.js +1 -1
  127. package/dist/_internal/components/typography/Text/Text.js +1 -1
  128. package/dist/_internal/components/typography/index.js +3 -3
  129. package/dist/_internal/components/utility/AnimatedIcon/AnimatedIcon.animations.js +2 -1
  130. package/dist/_internal/components/utility/AnimatedIcon/AnimatedIcon.js +3 -3
  131. package/dist/_internal/components/utility/AnimatedIcon/AnimatedIcon.styles.js +2 -2
  132. package/dist/_internal/components/utility/AspectRatio/AspectRatio.js +2 -1
  133. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.js +3 -3
  134. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.parts.js +1 -1
  135. package/dist/_internal/components/utility/WorkflowStep/WorkflowStepRow.js +2 -2
  136. package/dist/_internal/components/utility/index.js +7 -7
  137. package/dist/_internal/social-login-button/social-login-button.js +6 -7
  138. package/dist/_internal/tokens/shadow.js +19 -8
  139. package/dist/_internal/tokens/shadow.js.map +1 -1
  140. package/dist/_internal/user-avatar/user-avatar.js +4 -5
  141. package/dist/{chunk-BLJDCMFU.js → chunk-2ARVNCVU.js} +7 -7
  142. package/dist/chunk-2ARVNCVU.js.map +1 -0
  143. package/dist/{chunk-SJO3K7SB.js → chunk-2OYFTSG4.js} +4 -4
  144. package/dist/{chunk-CRZXSZ5O.js → chunk-2S752BIJ.js} +2 -2
  145. package/dist/{chunk-IYTBTK2M.js → chunk-2WU52FLP.js} +19 -30
  146. package/dist/chunk-2WU52FLP.js.map +1 -0
  147. package/dist/{chunk-RSQMPCCR.js → chunk-34643ATX.js} +10 -4
  148. package/dist/chunk-34643ATX.js.map +1 -0
  149. package/dist/{chunk-6GRZ77IS.js → chunk-3AIRFAI3.js} +13 -12
  150. package/dist/chunk-3AIRFAI3.js.map +1 -0
  151. package/dist/{chunk-Q73PTVNO.js → chunk-3FNXOCBD.js} +24 -12
  152. package/dist/chunk-3FNXOCBD.js.map +1 -0
  153. package/dist/{chunk-BAQBUKDU.js → chunk-3KREF4ZF.js} +2 -2
  154. package/dist/{chunk-EL7CMURV.js → chunk-3LSIFHQK.js} +3 -3
  155. package/dist/chunk-3LSIFHQK.js.map +1 -0
  156. package/dist/{chunk-MP4VSWHK.js → chunk-3NJMNMWB.js} +12 -2
  157. package/dist/chunk-3NJMNMWB.js.map +1 -0
  158. package/dist/{chunk-N52O2OKZ.js → chunk-3NNO6YIH.js} +8 -3
  159. package/dist/chunk-3NNO6YIH.js.map +1 -0
  160. package/dist/{chunk-SYN46YL6.js → chunk-3RMDIO4G.js} +3 -3
  161. package/dist/{chunk-MJ3BVWPZ.js → chunk-43G3WMYN.js} +12 -7
  162. package/dist/chunk-43G3WMYN.js.map +1 -0
  163. package/dist/{chunk-E7MSDXED.js → chunk-43H66TVT.js} +12 -5
  164. package/dist/chunk-43H66TVT.js.map +1 -0
  165. package/dist/{chunk-IL7JZKXY.js → chunk-442FSG7G.js} +3 -3
  166. package/dist/{chunk-DYVAOEW4.js → chunk-4D4LLSQC.js} +6 -5
  167. package/dist/chunk-4D4LLSQC.js.map +1 -0
  168. package/dist/{chunk-NEGCJNGJ.js → chunk-4G47KBTP.js} +9 -9
  169. package/dist/chunk-4G47KBTP.js.map +1 -0
  170. package/dist/{chunk-MVXFMIVZ.js → chunk-4GB46HLK.js} +8 -4
  171. package/dist/chunk-4GB46HLK.js.map +1 -0
  172. package/dist/{chunk-CS3KOKL3.js → chunk-4GWHYLEB.js} +2 -2
  173. package/dist/{chunk-4OEKIFBC.js → chunk-4VMFS3VJ.js} +6 -3
  174. package/dist/chunk-4VMFS3VJ.js.map +1 -0
  175. package/dist/{chunk-6CTPDNNX.js → chunk-52G2KRL4.js} +14 -14
  176. package/dist/chunk-52G2KRL4.js.map +1 -0
  177. package/dist/{chunk-E7T3A4IR.js → chunk-5JCGBCFJ.js} +2 -2
  178. package/dist/{chunk-FC7NQ6XM.js → chunk-5MW7OYBM.js} +2 -2
  179. package/dist/{chunk-CQLPDY2J.js → chunk-5OBXEMQO.js} +3 -3
  180. package/dist/{chunk-MK4CH4VT.js → chunk-5OUEKIWQ.js} +14 -12
  181. package/dist/chunk-5OUEKIWQ.js.map +1 -0
  182. package/dist/{chunk-GHXFCMFP.js → chunk-5QAJ3Y5F.js} +3 -3
  183. package/dist/{chunk-GHXFCMFP.js.map → chunk-5QAJ3Y5F.js.map} +1 -1
  184. package/dist/{chunk-CPTY6UZ6.js → chunk-6KEXHOIF.js} +5 -4
  185. package/dist/chunk-6KEXHOIF.js.map +1 -0
  186. package/dist/{chunk-BW62QQAG.js → chunk-6N4AA2Y7.js} +2 -2
  187. package/dist/{chunk-EFHIMCJN.js → chunk-6P2OFMBX.js} +11 -9
  188. package/dist/chunk-6P2OFMBX.js.map +1 -0
  189. package/dist/{chunk-GUW5BUK7.js → chunk-6WBKOM5K.js} +15 -7
  190. package/dist/chunk-6WBKOM5K.js.map +1 -0
  191. package/dist/{chunk-7EIOXZWL.js → chunk-74P3YX7R.js} +4 -4
  192. package/dist/{chunk-VYSFKR32.js → chunk-75CGLX6Q.js} +3 -3
  193. package/dist/{chunk-VYSFKR32.js.map → chunk-75CGLX6Q.js.map} +1 -1
  194. package/dist/{chunk-LVEG6XQL.js → chunk-76X6JRVI.js} +19 -33
  195. package/dist/chunk-76X6JRVI.js.map +1 -0
  196. package/dist/{chunk-2NLYGZP3.js → chunk-77JL5XVD.js} +13 -9
  197. package/dist/chunk-77JL5XVD.js.map +1 -0
  198. package/dist/{chunk-T3WHW7ZC.js → chunk-BAZXVFLR.js} +10 -6
  199. package/dist/chunk-BAZXVFLR.js.map +1 -0
  200. package/dist/{chunk-7F7TTOYN.js → chunk-BEGTLELZ.js} +7 -6
  201. package/dist/chunk-BEGTLELZ.js.map +1 -0
  202. package/dist/{chunk-VT5HQ2AD.js → chunk-BFMDA6UO.js} +3 -3
  203. package/dist/{chunk-R75DZ3AK.js → chunk-BVLMKSHX.js} +2 -2
  204. package/dist/{chunk-PMP6WJJS.js → chunk-BWMHGENX.js} +20 -19
  205. package/dist/chunk-BWMHGENX.js.map +1 -0
  206. package/dist/{chunk-QAP3FW33.js → chunk-C66RGVAS.js} +30 -20
  207. package/dist/chunk-C66RGVAS.js.map +1 -0
  208. package/dist/{chunk-UZ6AUTE6.js → chunk-CNQUCNEA.js} +7 -7
  209. package/dist/{chunk-JL75FJRG.js → chunk-CZIX4BW2.js} +4 -4
  210. package/dist/{chunk-CAHWCSRE.js → chunk-D46SLMCX.js} +22 -8
  211. package/dist/chunk-D46SLMCX.js.map +1 -0
  212. package/dist/{chunk-2OIP3T5O.js → chunk-DBFRCTI5.js} +4 -4
  213. package/dist/{chunk-2OIP3T5O.js.map → chunk-DBFRCTI5.js.map} +1 -1
  214. package/dist/{chunk-HU7TX7RB.js → chunk-DUBTI4DI.js} +4 -4
  215. package/dist/{chunk-RMCNEKBZ.js → chunk-DW6F7354.js} +2 -2
  216. package/dist/{chunk-Q4BQYYPU.js → chunk-E2QIKJX2.js} +11 -5
  217. package/dist/chunk-E2QIKJX2.js.map +1 -0
  218. package/dist/{chunk-XJUEHG72.js → chunk-EERUSI52.js} +2 -2
  219. package/dist/{chunk-NPP44TQG.js → chunk-EYZ6QBTV.js} +2 -2
  220. package/dist/{chunk-NPP44TQG.js.map → chunk-EYZ6QBTV.js.map} +1 -1
  221. package/dist/{chunk-C55AWF3U.js → chunk-FFCJ7NR2.js} +2 -2
  222. package/dist/{chunk-U342T7ZR.js → chunk-FOCU4QT5.js} +13 -10
  223. package/dist/chunk-FOCU4QT5.js.map +1 -0
  224. package/dist/{chunk-FYTLKHEN.js → chunk-FYKFQPVT.js} +19 -18
  225. package/dist/chunk-FYKFQPVT.js.map +1 -0
  226. package/dist/{chunk-TVL5V2JK.js → chunk-GGMB6LJH.js} +7 -3
  227. package/dist/chunk-GGMB6LJH.js.map +1 -0
  228. package/dist/{chunk-AYLEZM6T.js → chunk-GLFTIGOF.js} +3 -3
  229. package/dist/{chunk-7UZ2TFIK.js → chunk-GNCSDUGY.js} +12 -4
  230. package/dist/chunk-GNCSDUGY.js.map +1 -0
  231. package/dist/{chunk-L4UP5VYS.js → chunk-GVH7C2PT.js} +2 -2
  232. package/dist/{chunk-MBSYD3ZU.js → chunk-GWFAINQ7.js} +3 -3
  233. package/dist/chunk-GWFAINQ7.js.map +1 -0
  234. package/dist/{chunk-AER4245J.js → chunk-H67EL3CG.js} +6 -6
  235. package/dist/{chunk-3D6HXKZM.js → chunk-HDJQDMHB.js} +18 -13
  236. package/dist/chunk-HDJQDMHB.js.map +1 -0
  237. package/dist/{chunk-57JLS55D.js → chunk-I4QA2F4L.js} +4 -4
  238. package/dist/{chunk-L7SFH3ED.js → chunk-I7GSRTGQ.js} +37 -28
  239. package/dist/chunk-I7GSRTGQ.js.map +1 -0
  240. package/dist/{chunk-Q4CAZ2TP.js → chunk-IG23YZZR.js} +6 -5
  241. package/dist/chunk-IG23YZZR.js.map +1 -0
  242. package/dist/{chunk-5W4BLTDI.js → chunk-IWFENXST.js} +7 -6
  243. package/dist/chunk-IWFENXST.js.map +1 -0
  244. package/dist/{chunk-HXEBKOSM.js → chunk-J5UZB6Y6.js} +2 -2
  245. package/dist/chunk-J5UZB6Y6.js.map +1 -0
  246. package/dist/{chunk-AJ5SDHX5.js → chunk-JCL7WK4G.js} +2 -2
  247. package/dist/{chunk-5CKDRLRN.js → chunk-JXECOCNA.js} +35 -19
  248. package/dist/chunk-JXECOCNA.js.map +1 -0
  249. package/dist/{chunk-WUTHROII.js → chunk-JYWF76Z5.js} +11 -5
  250. package/dist/chunk-JYWF76Z5.js.map +1 -0
  251. package/dist/{chunk-B76QCDCE.js → chunk-K4L42FF6.js} +6 -3
  252. package/dist/chunk-K4L42FF6.js.map +1 -0
  253. package/dist/{chunk-WE3LJPRN.js → chunk-KE473LK6.js} +2 -2
  254. package/dist/{chunk-TBF2CPJW.js → chunk-KIHGTL2D.js} +21 -11
  255. package/dist/chunk-KIHGTL2D.js.map +1 -0
  256. package/dist/{chunk-3T5Z5HXF.js → chunk-KM3Y5TCG.js} +40 -36
  257. package/dist/chunk-KM3Y5TCG.js.map +1 -0
  258. package/dist/{chunk-RWTFZ7J5.js → chunk-L4G5BZFF.js} +22 -13
  259. package/dist/chunk-L4G5BZFF.js.map +1 -0
  260. package/dist/{chunk-HB7ISSLK.js → chunk-L5RQIQIP.js} +26 -22
  261. package/dist/chunk-L5RQIQIP.js.map +1 -0
  262. package/dist/{chunk-CQPFSEJB.js → chunk-L7NQCLFU.js} +2 -2
  263. package/dist/{chunk-2ZIHZLF5.js → chunk-M2JTIH5M.js} +3 -3
  264. package/dist/{chunk-OATHOXIU.js → chunk-MC4KYGSX.js} +8 -8
  265. package/dist/chunk-MC4KYGSX.js.map +1 -0
  266. package/dist/{chunk-2BIVCYTO.js → chunk-MR2HKBHS.js} +4 -4
  267. package/dist/{chunk-YVUD3MY4.js → chunk-N23GCN5U.js} +7 -4
  268. package/dist/chunk-N23GCN5U.js.map +1 -0
  269. package/dist/{chunk-2TJOCI54.js → chunk-NCEQWEXT.js} +3 -3
  270. package/dist/{chunk-2TJOCI54.js.map → chunk-NCEQWEXT.js.map} +1 -1
  271. package/dist/{chunk-IVIHRZEY.js → chunk-NDMPXMW2.js} +12 -8
  272. package/dist/chunk-NDMPXMW2.js.map +1 -0
  273. package/dist/{chunk-UUUMNJPP.js → chunk-NLYNRE7L.js} +10 -10
  274. package/dist/chunk-NLYNRE7L.js.map +1 -0
  275. package/dist/{chunk-KLWW67WP.js → chunk-NOKN4HRK.js} +12 -11
  276. package/dist/chunk-NOKN4HRK.js.map +1 -0
  277. package/dist/{chunk-LIG7TKIB.js → chunk-NYFNF7I5.js} +11 -6
  278. package/dist/chunk-NYFNF7I5.js.map +1 -0
  279. package/dist/{chunk-KK57AHWS.js → chunk-OAEYCKBN.js} +2 -2
  280. package/dist/{chunk-JGRE56GQ.js → chunk-OB56SZGL.js} +2 -2
  281. package/dist/{chunk-VRDNUY4H.js → chunk-OHC3F7GJ.js} +4 -4
  282. package/dist/chunk-OHC3F7GJ.js.map +1 -0
  283. package/dist/{chunk-E4TNDTWV.js → chunk-OL2BEJZR.js} +2 -2
  284. package/dist/{chunk-NDNYD4FG.js → chunk-OS6KPL4D.js} +4 -4
  285. package/dist/{chunk-ZTYUKEN3.js → chunk-OVXSQQDK.js} +12 -7
  286. package/dist/chunk-OVXSQQDK.js.map +1 -0
  287. package/dist/{chunk-ZQL5RXVE.js → chunk-PA3AA55Q.js} +2 -2
  288. package/dist/{chunk-ZQL5RXVE.js.map → chunk-PA3AA55Q.js.map} +1 -1
  289. package/dist/{chunk-75LOTMSN.js → chunk-PPRV4LTM.js} +2 -2
  290. package/dist/{chunk-LT4NEKXB.js → chunk-QA2ZGCRL.js} +3 -3
  291. package/dist/{chunk-2E2WOBID.js → chunk-QGFBIUOK.js} +5 -5
  292. package/dist/chunk-QGFBIUOK.js.map +1 -0
  293. package/dist/{chunk-ROT57BP4.js → chunk-R2XVTUVR.js} +2 -2
  294. package/dist/{chunk-QEG3P5D4.js → chunk-R6SN73RX.js} +10 -10
  295. package/dist/{chunk-MVKYNDT2.js → chunk-RKROWJVF.js} +11 -9
  296. package/dist/chunk-RKROWJVF.js.map +1 -0
  297. package/dist/{chunk-NYZO3JNB.js → chunk-RXJQA3FQ.js} +2 -3
  298. package/dist/chunk-RXJQA3FQ.js.map +1 -0
  299. package/dist/{chunk-IKLOIONQ.js → chunk-RZYSKQTS.js} +3 -3
  300. package/dist/{chunk-NCPWLHZT.js → chunk-SKT2V2OX.js} +3 -3
  301. package/dist/{chunk-EOW2ECB3.js → chunk-SNURSSTN.js} +2 -2
  302. package/dist/{chunk-GRDPGHQJ.js → chunk-SV6JGFHG.js} +9 -5
  303. package/dist/chunk-SV6JGFHG.js.map +1 -0
  304. package/dist/{chunk-CZBND7AY.js → chunk-T7DE44SP.js} +2 -2
  305. package/dist/{chunk-DB2ZFZVW.js → chunk-TKC6WHGB.js} +2 -2
  306. package/dist/{chunk-3CVTQZQJ.js → chunk-TNYKM4UU.js} +13 -9
  307. package/dist/chunk-TNYKM4UU.js.map +1 -0
  308. package/dist/{chunk-3VMGE7CU.js → chunk-TZFBJ47T.js} +3 -3
  309. package/dist/chunk-TZFBJ47T.js.map +1 -0
  310. package/dist/{chunk-VFHGILXI.js → chunk-U3DBQXPI.js} +20 -17
  311. package/dist/chunk-U3DBQXPI.js.map +1 -0
  312. package/dist/{chunk-JLQGRZMN.js → chunk-UEVHI62V.js} +2 -2
  313. package/dist/{chunk-4CXEWFKO.js → chunk-UFJYJHQI.js} +2 -2
  314. package/dist/{chunk-QKPD322X.js → chunk-UFNIS7KC.js} +2 -2
  315. package/dist/chunk-UFNIS7KC.js.map +1 -0
  316. package/dist/{chunk-BNEWMFVB.js → chunk-UGGJ3KDT.js} +2 -2
  317. package/dist/{chunk-L4QCIUTJ.js → chunk-UMNXSQ7I.js} +3 -3
  318. package/dist/{chunk-L4QCIUTJ.js.map → chunk-UMNXSQ7I.js.map} +1 -1
  319. package/dist/{chunk-2CTTASUD.js → chunk-V5EWCJBT.js} +7 -4
  320. package/dist/chunk-V5EWCJBT.js.map +1 -0
  321. package/dist/{chunk-236V2GRH.js → chunk-VCBV5JM7.js} +49 -41
  322. package/dist/chunk-VCBV5JM7.js.map +1 -0
  323. package/dist/{chunk-KREWQAEV.js → chunk-VIRYHNEM.js} +2 -2
  324. package/dist/{chunk-PT2XADGH.js → chunk-VPRNKJHP.js} +9 -6
  325. package/dist/chunk-VPRNKJHP.js.map +1 -0
  326. package/dist/{chunk-JXUWWPZR.js → chunk-VQYR64QB.js} +14 -8
  327. package/dist/chunk-VQYR64QB.js.map +1 -0
  328. package/dist/{chunk-72DKEBJM.js → chunk-VRPREI27.js} +3 -3
  329. package/dist/chunk-VRPREI27.js.map +1 -0
  330. package/dist/{chunk-N6CSXHFJ.js → chunk-WN5PNP6F.js} +2 -2
  331. package/dist/{chunk-6QLPSMTA.js → chunk-XEWMY4ZM.js} +52 -47
  332. package/dist/chunk-XEWMY4ZM.js.map +1 -0
  333. package/dist/{chunk-XR46FSOH.js → chunk-XIG3DXXX.js} +2 -2
  334. package/dist/{chunk-35S6QI5G.js → chunk-XJJXBUPN.js} +2 -2
  335. package/dist/{chunk-GHTBUJ6E.js → chunk-XRUW7DMH.js} +2 -2
  336. package/dist/{chunk-CSTAQX2B.js → chunk-XWZJLXJT.js} +7 -6
  337. package/dist/chunk-XWZJLXJT.js.map +1 -0
  338. package/dist/{chunk-MBC55H6M.js → chunk-Y5UTYBZW.js} +12 -6
  339. package/dist/chunk-Y5UTYBZW.js.map +1 -0
  340. package/dist/{chunk-HNPWZ3W2.js → chunk-Y7F5JBAT.js} +4 -4
  341. package/dist/{chunk-WTOYEWW6.js → chunk-YBH4SPMM.js} +4 -3
  342. package/dist/chunk-YBH4SPMM.js.map +1 -0
  343. package/dist/{chunk-5QWQR7XT.js → chunk-YHGOPZXW.js} +11 -8
  344. package/dist/chunk-YHGOPZXW.js.map +1 -0
  345. package/dist/{chunk-6BDYC4RA.js → chunk-YRSR5LVZ.js} +3 -3
  346. package/dist/{chunk-57JY4OI2.js → chunk-YUXDVW62.js} +3 -3
  347. package/dist/chunk-YUXDVW62.js.map +1 -0
  348. package/dist/{chunk-RNEYZTE4.js → chunk-Z6MCTGIK.js} +2 -2
  349. package/dist/{chunk-RNEYZTE4.js.map → chunk-Z6MCTGIK.js.map} +1 -1
  350. package/dist/{chunk-FFOQZRFC.js → chunk-ZAY6OA6F.js} +2 -2
  351. package/dist/data-display/AsyncStateContainer.js +4 -4
  352. package/dist/data-display/CardKit.js +2 -2
  353. package/dist/data-display/DataViews.js +55 -56
  354. package/dist/data-display/DescriptionItem.js +2 -2
  355. package/dist/data-display/FleetMap.js +5 -5
  356. package/dist/data-display/LazyImage.js +3 -3
  357. package/dist/data-display/LoadingState.js +3 -3
  358. package/dist/data-display/StatCard.js +3 -3
  359. package/dist/feedback/Dialog.js +3 -3
  360. package/dist/feedback/Modal.js +3 -2
  361. package/dist/feedback/Sonner.js +2 -2
  362. package/dist/feedback/StackedModal.js +4 -3
  363. package/dist/feedback/Toast.js +2 -1
  364. package/dist/feedback/TutorialOverlay.js +5 -4
  365. package/dist/form/total-form.js +2 -2
  366. package/dist/layout/Accordion.js +3 -2
  367. package/dist/layout/Box.js +1 -1
  368. package/dist/layout/Card.js +3 -3
  369. package/dist/layout/Collapsible.js +3 -2
  370. package/dist/layout/ContentToolbar.js +7 -7
  371. package/dist/layout/Dashboard.js +2 -2
  372. package/dist/layout/Drawer.js +2 -1
  373. package/dist/layout/ScrollArea.js +5 -4
  374. package/dist/layout/Separator.js +4 -2
  375. package/dist/layout/SettingsLayout.js +8 -8
  376. package/dist/layout/Sidebar.js +2 -1
  377. package/dist/layout/Skeleton.js +3 -2
  378. package/dist/layout/Spacer.js +2 -1
  379. package/dist/layout/Stack.js +2 -2
  380. package/dist/layout/TableFilter.js +1 -1
  381. package/dist/navigation/AppHeader.js +6 -7
  382. package/dist/navigation/Breadcrumbs.js +3 -3
  383. package/dist/navigation/CommandPalette.js +3 -3
  384. package/dist/navigation/ContextMenu.js +1 -1
  385. package/dist/navigation/DropdownMenu.js +1 -1
  386. package/dist/navigation/NavigationMenu.js +6 -6
  387. package/dist/navigation/Pagination.js +3 -3
  388. package/dist/navigation/Tabs.js +10 -3
  389. package/dist/social-login-button.js +6 -7
  390. package/dist/types/components/feedback/Dialog/Dialog.styles.d.ts.map +1 -1
  391. package/dist/types/components/feedback/Modal/Modal.d.ts.map +1 -1
  392. package/dist/types/components/feedback/Modal/Modal.styles.d.ts.map +1 -1
  393. package/dist/types/components/feedback/StackedModal/StackedModal.parts.d.ts.map +1 -1
  394. package/dist/types/components/feedback/StackedModal/StackedModal.styles.d.ts.map +1 -1
  395. package/dist/types/components/feedback/Toast/Toast.d.ts.map +1 -1
  396. package/dist/types/components/feedback/TutorialOverlay/TutorialOverlay.d.ts.map +1 -1
  397. package/dist/types/components/feedback/TutorialOverlay/TutorialOverlay.geometry.d.ts +3 -1
  398. package/dist/types/components/feedback/TutorialOverlay/TutorialOverlay.geometry.d.ts.map +1 -1
  399. package/dist/types/components/feedback/TutorialOverlay/TutorialOverlay.hooks.d.ts.map +1 -1
  400. package/dist/types/components/feedback/TutorialOverlay/TutorialStepBody.d.ts.map +1 -1
  401. package/dist/types/components/layout/Accordion/Accordion.d.ts.map +1 -1
  402. package/dist/types/components/layout/Accordion/Accordion.styles.d.ts.map +1 -1
  403. package/dist/types/components/layout/Box/Box.d.ts +2 -1
  404. package/dist/types/components/layout/Box/Box.d.ts.map +1 -1
  405. package/dist/types/components/layout/Card/Card.styles.d.ts.map +1 -1
  406. package/dist/types/components/layout/Collapsible/Collapsible.d.ts.map +1 -1
  407. package/dist/types/components/layout/Collapsible/Collapsible.helpers.d.ts +1 -1
  408. package/dist/types/components/layout/Collapsible/Collapsible.helpers.d.ts.map +1 -1
  409. package/dist/types/components/layout/Drawer/Drawer.d.ts.map +1 -1
  410. package/dist/types/components/layout/ScrollArea/ScrollArea.d.ts.map +1 -1
  411. package/dist/types/components/layout/ScrollArea/ScrollArea.styles.d.ts +6 -0
  412. package/dist/types/components/layout/ScrollArea/ScrollArea.styles.d.ts.map +1 -1
  413. package/dist/types/components/layout/ScrollArea/ScrollViewport.d.ts.map +1 -1
  414. package/dist/types/components/layout/Separator/Separator.d.ts.map +1 -1
  415. package/dist/types/components/layout/Separator/Separator.styles.d.ts +7 -4
  416. package/dist/types/components/layout/Separator/Separator.styles.d.ts.map +1 -1
  417. package/dist/types/components/layout/SettingsLayout/SettingsLayout.items.d.ts.map +1 -1
  418. package/dist/types/components/layout/SettingsLayout/SettingsLayout.rail.d.ts.map +1 -1
  419. package/dist/types/components/layout/SettingsLayout/SettingsLayout.styles.d.ts +4 -4
  420. package/dist/types/components/layout/SettingsLayout/SettingsLayout.styles.d.ts.map +1 -1
  421. package/dist/types/components/layout/Sidebar/Sidebar.d.ts.map +1 -1
  422. package/dist/types/components/layout/Skeleton/Skeleton.d.ts.map +1 -1
  423. package/dist/types/components/layout/Skeleton/Skeleton.styles.d.ts +8 -1
  424. package/dist/types/components/layout/Skeleton/Skeleton.styles.d.ts.map +1 -1
  425. package/dist/types/components/layout/Spacer/Spacer.d.ts.map +1 -1
  426. package/dist/types/components/layout/TableFilter/TableFilter.d.ts.map +1 -1
  427. package/dist/types/components/navigation/AppHeader/AppHeader.d.ts.map +1 -1
  428. package/dist/types/components/navigation/AppHeader/AppHeader.details.d.ts.map +1 -1
  429. package/dist/types/components/navigation/AppHeader/AppHeader.identity.d.ts.map +1 -1
  430. package/dist/types/components/navigation/Breadcrumbs/Breadcrumbs.styles.d.ts +2 -2
  431. package/dist/types/components/navigation/Breadcrumbs/Breadcrumbs.styles.d.ts.map +1 -1
  432. package/dist/types/components/navigation/DropdownMenu/DropdownMenu.d.ts.map +1 -1
  433. package/dist/types/components/navigation/NavigationMenu/NavigationMegaSection.d.ts.map +1 -1
  434. package/dist/types/components/navigation/NavigationMenu/NavigationMenu.d.ts.map +1 -1
  435. package/dist/types/components/navigation/NavigationMenu/NavigationMenu.shell.d.ts.map +1 -1
  436. package/dist/types/components/navigation/NavigationMenu/NavigationMenu.styles.d.ts +2 -2
  437. package/dist/types/components/navigation/NavigationMenu/NavigationMenu.styles.d.ts.map +1 -1
  438. package/dist/types/components/navigation/NavigationMenu/NavigationStandardBody.d.ts.map +1 -1
  439. package/dist/types/components/navigation/Pagination/Pagination.d.ts.map +1 -1
  440. package/dist/types/components/navigation/Pagination/PaginationParts.d.ts.map +1 -1
  441. package/dist/types/components/navigation/Tabs/Tabs.d.ts.map +1 -1
  442. package/dist/types/components/navigation/Tabs/Tabs.styles.d.ts.map +1 -1
  443. package/dist/types/components/navigation/Tabs/TabsPanel.d.ts.map +1 -1
  444. package/dist/types/components/utility/AnimatedIcon/AnimatedIcon.animations.d.ts +9 -8
  445. package/dist/types/components/utility/AnimatedIcon/AnimatedIcon.animations.d.ts.map +1 -1
  446. package/dist/types/components/utility/AnimatedIcon/AnimatedIcon.styles.d.ts +1 -1
  447. package/dist/types/components/utility/AnimatedIcon/AnimatedIcon.styles.d.ts.map +1 -1
  448. package/dist/types/components/utility/AspectRatio/AspectRatio.d.ts.map +1 -1
  449. package/dist/types/social-login-button/social-login-button.d.ts.map +1 -1
  450. package/dist/typography/Blockquote.js +1 -1
  451. package/dist/typography/Code.js +1 -1
  452. package/dist/typography/Text.js +1 -1
  453. package/dist/user-avatar.js +4 -5
  454. package/dist/utility/AnimatedIcon.js +3 -3
  455. package/dist/utility/AspectRatio.js +2 -1
  456. package/dist/utility/WorkflowStep.js +3 -3
  457. package/package.json +1 -1
  458. package/src/components/feedback/Dialog/Dialog.styles.ts +16 -28
  459. package/src/components/feedback/Modal/Modal.styles.ts +9 -8
  460. package/src/components/feedback/Modal/Modal.tsx +3 -2
  461. package/src/components/feedback/Sonner/Sonner.tsx +4 -4
  462. package/src/components/feedback/Sonner/SonnerToast.tsx +9 -9
  463. package/src/components/feedback/StackedModal/StackedModal.parts.tsx +26 -19
  464. package/src/components/feedback/StackedModal/StackedModal.styles.ts +11 -9
  465. package/src/components/feedback/Toast/Toast.tsx +11 -7
  466. package/src/components/feedback/TutorialOverlay/TutorialOverlay.geometry.ts +2 -3
  467. package/src/components/feedback/TutorialOverlay/TutorialOverlay.hooks.ts +6 -1
  468. package/src/components/feedback/TutorialOverlay/TutorialOverlay.tsx +43 -37
  469. package/src/components/feedback/TutorialOverlay/TutorialStepBody.tsx +3 -2
  470. package/src/components/layout/Accordion/Accordion.styles.ts +8 -6
  471. package/src/components/layout/Accordion/Accordion.tsx +10 -8
  472. package/src/components/layout/Box/Box.tsx +18 -5
  473. package/src/components/layout/Card/Card.styles.ts +22 -30
  474. package/src/components/layout/Collapsible/Collapsible.helpers.ts +4 -2
  475. package/src/components/layout/Collapsible/Collapsible.tsx +8 -4
  476. package/src/components/layout/ContentToolbar/ColumnsMenu.tsx +1 -1
  477. package/src/components/layout/ContentToolbar/ContentToolbar.tsx +2 -2
  478. package/src/components/layout/ContentToolbar/FilterTrigger.tsx +2 -2
  479. package/src/components/layout/ContentToolbar/MultiSelectDropdown.tsx +1 -1
  480. package/src/components/layout/ContentToolbar/SavedViewsMenu.tsx +2 -2
  481. package/src/components/layout/ContentToolbar/SortByDropdown.tsx +2 -2
  482. package/src/components/layout/ContentToolbar/ViewSelector.tsx +2 -2
  483. package/src/components/layout/Dashboard/Dashboard.tsx +1 -1
  484. package/src/components/layout/Dashboard/DashboardParts.tsx +1 -1
  485. package/src/components/layout/Drawer/Drawer.tsx +23 -10
  486. package/src/components/layout/ScrollArea/ScrollArea.styles.ts +45 -32
  487. package/src/components/layout/ScrollArea/ScrollArea.tsx +31 -16
  488. package/src/components/layout/ScrollArea/ScrollAreaContent.tsx +2 -2
  489. package/src/components/layout/ScrollArea/ScrollViewport.tsx +6 -4
  490. package/src/components/layout/Separator/Separator.styles.ts +30 -9
  491. package/src/components/layout/Separator/Separator.tsx +4 -3
  492. package/src/components/layout/SettingsLayout/SettingsLayout.items.tsx +4 -2
  493. package/src/components/layout/SettingsLayout/SettingsLayout.rail.tsx +6 -5
  494. package/src/components/layout/SettingsLayout/SettingsLayout.styles.ts +9 -7
  495. package/src/components/layout/SettingsLayout/SettingsLayout.tsx +2 -2
  496. package/src/components/layout/SettingsLayout/SettingsPanel.tsx +1 -1
  497. package/src/components/layout/SettingsLayout/SettingsSectionChips.tsx +3 -3
  498. package/src/components/layout/SettingsLayout/SettingsSectionHeader.tsx +3 -3
  499. package/src/components/layout/SettingsLayout/SettingsStatusMarker.tsx +2 -2
  500. package/src/components/layout/Sidebar/Sidebar.tsx +16 -6
  501. package/src/components/layout/Skeleton/Skeleton.styles.ts +13 -3
  502. package/src/components/layout/Skeleton/Skeleton.tsx +6 -4
  503. package/src/components/layout/Spacer/Spacer.tsx +16 -1
  504. package/src/components/layout/TableFilter/TableFilter.tsx +2 -1
  505. package/src/components/navigation/AppHeader/AppHeader.brand.tsx +2 -2
  506. package/src/components/navigation/AppHeader/AppHeader.details.tsx +9 -7
  507. package/src/components/navigation/AppHeader/AppHeader.identity.tsx +28 -15
  508. package/src/components/navigation/AppHeader/AppHeader.tsx +18 -6
  509. package/src/components/navigation/Breadcrumbs/BreadcrumbEntry.tsx +4 -4
  510. package/src/components/navigation/Breadcrumbs/Breadcrumbs.styles.tsx +15 -15
  511. package/src/components/navigation/CommandPalette/CommandPalette.tsx +7 -7
  512. package/src/components/navigation/CommandPalette/CommandPaletteResults.tsx +5 -5
  513. package/src/components/navigation/CommandPalette/ShortcutChip.tsx +1 -1
  514. package/src/components/navigation/ContextMenu/ContextMenu.tsx +8 -8
  515. package/src/components/navigation/DropdownMenu/DropdownMenu.tsx +25 -16
  516. package/src/components/navigation/NavigationMenu/NavigationMegaSection.tsx +5 -4
  517. package/src/components/navigation/NavigationMenu/NavigationMenu.shell.tsx +22 -20
  518. package/src/components/navigation/NavigationMenu/NavigationMenu.styles.ts +11 -11
  519. package/src/components/navigation/NavigationMenu/NavigationMenu.tsx +7 -2
  520. package/src/components/navigation/NavigationMenu/NavigationMenuItem.tsx +12 -12
  521. package/src/components/navigation/NavigationMenu/NavigationStandardBody.tsx +3 -2
  522. package/src/components/navigation/Pagination/Pagination.styles.ts +18 -18
  523. package/src/components/navigation/Pagination/Pagination.tsx +2 -1
  524. package/src/components/navigation/Pagination/PaginationParts.tsx +4 -3
  525. package/src/components/navigation/Tabs/Tabs.styles.ts +14 -12
  526. package/src/components/navigation/Tabs/Tabs.tsx +11 -9
  527. package/src/components/navigation/Tabs/TabsPanel.tsx +10 -3
  528. package/src/components/typography/Blockquote/Blockquote.tsx +8 -8
  529. package/src/components/typography/Code/Code.tsx +17 -17
  530. package/src/components/typography/Text/Text.tsx +2 -2
  531. package/src/components/utility/AnimatedIcon/AnimatedIcon.animations.ts +38 -35
  532. package/src/components/utility/AnimatedIcon/AnimatedIcon.styles.ts +51 -46
  533. package/src/components/utility/AnimatedIcon/AnimatedIcon.tsx +1 -1
  534. package/src/components/utility/AspectRatio/AspectRatio.tsx +13 -2
  535. package/src/components/utility/WorkflowStep/WorkflowStep.parts.tsx +7 -7
  536. package/src/social-login-button/social-login-button.tsx +25 -8
  537. package/dist/chunk-236V2GRH.js.map +0 -1
  538. package/dist/chunk-2CTTASUD.js.map +0 -1
  539. package/dist/chunk-2E2WOBID.js.map +0 -1
  540. package/dist/chunk-2NLYGZP3.js.map +0 -1
  541. package/dist/chunk-3CVTQZQJ.js.map +0 -1
  542. package/dist/chunk-3D6HXKZM.js.map +0 -1
  543. package/dist/chunk-3T5Z5HXF.js.map +0 -1
  544. package/dist/chunk-3VMGE7CU.js.map +0 -1
  545. package/dist/chunk-4OEKIFBC.js.map +0 -1
  546. package/dist/chunk-57JY4OI2.js.map +0 -1
  547. package/dist/chunk-5CKDRLRN.js.map +0 -1
  548. package/dist/chunk-5QWQR7XT.js.map +0 -1
  549. package/dist/chunk-5W4BLTDI.js.map +0 -1
  550. package/dist/chunk-6CTPDNNX.js.map +0 -1
  551. package/dist/chunk-6GRZ77IS.js.map +0 -1
  552. package/dist/chunk-6QLPSMTA.js.map +0 -1
  553. package/dist/chunk-72DKEBJM.js.map +0 -1
  554. package/dist/chunk-73BEVJCS.js +0 -28
  555. package/dist/chunk-73BEVJCS.js.map +0 -1
  556. package/dist/chunk-7F7TTOYN.js.map +0 -1
  557. package/dist/chunk-7UZ2TFIK.js.map +0 -1
  558. package/dist/chunk-B76QCDCE.js.map +0 -1
  559. package/dist/chunk-BLJDCMFU.js.map +0 -1
  560. package/dist/chunk-CAHWCSRE.js.map +0 -1
  561. package/dist/chunk-CPTY6UZ6.js.map +0 -1
  562. package/dist/chunk-CSTAQX2B.js.map +0 -1
  563. package/dist/chunk-DYVAOEW4.js.map +0 -1
  564. package/dist/chunk-E7MSDXED.js.map +0 -1
  565. package/dist/chunk-EFHIMCJN.js.map +0 -1
  566. package/dist/chunk-EL7CMURV.js.map +0 -1
  567. package/dist/chunk-FYTLKHEN.js.map +0 -1
  568. package/dist/chunk-GRDPGHQJ.js.map +0 -1
  569. package/dist/chunk-GUW5BUK7.js.map +0 -1
  570. package/dist/chunk-HB7ISSLK.js.map +0 -1
  571. package/dist/chunk-HXEBKOSM.js.map +0 -1
  572. package/dist/chunk-IVIHRZEY.js.map +0 -1
  573. package/dist/chunk-IYTBTK2M.js.map +0 -1
  574. package/dist/chunk-JXUWWPZR.js.map +0 -1
  575. package/dist/chunk-KLWW67WP.js.map +0 -1
  576. package/dist/chunk-L7SFH3ED.js.map +0 -1
  577. package/dist/chunk-LIG7TKIB.js.map +0 -1
  578. package/dist/chunk-LVEG6XQL.js.map +0 -1
  579. package/dist/chunk-MBC55H6M.js.map +0 -1
  580. package/dist/chunk-MBSYD3ZU.js.map +0 -1
  581. package/dist/chunk-MJ3BVWPZ.js.map +0 -1
  582. package/dist/chunk-MK4CH4VT.js.map +0 -1
  583. package/dist/chunk-MP4VSWHK.js.map +0 -1
  584. package/dist/chunk-MVKYNDT2.js.map +0 -1
  585. package/dist/chunk-MVXFMIVZ.js.map +0 -1
  586. package/dist/chunk-N52O2OKZ.js.map +0 -1
  587. package/dist/chunk-NEGCJNGJ.js.map +0 -1
  588. package/dist/chunk-NYZO3JNB.js.map +0 -1
  589. package/dist/chunk-OATHOXIU.js.map +0 -1
  590. package/dist/chunk-PMP6WJJS.js.map +0 -1
  591. package/dist/chunk-PT2XADGH.js.map +0 -1
  592. package/dist/chunk-Q4BQYYPU.js.map +0 -1
  593. package/dist/chunk-Q4CAZ2TP.js.map +0 -1
  594. package/dist/chunk-Q73PTVNO.js.map +0 -1
  595. package/dist/chunk-QAP3FW33.js.map +0 -1
  596. package/dist/chunk-QKPD322X.js.map +0 -1
  597. package/dist/chunk-RSQMPCCR.js.map +0 -1
  598. package/dist/chunk-RWTFZ7J5.js.map +0 -1
  599. package/dist/chunk-T3WHW7ZC.js.map +0 -1
  600. package/dist/chunk-TBF2CPJW.js.map +0 -1
  601. package/dist/chunk-TVL5V2JK.js.map +0 -1
  602. package/dist/chunk-U342T7ZR.js.map +0 -1
  603. package/dist/chunk-UUUMNJPP.js.map +0 -1
  604. package/dist/chunk-VFHGILXI.js.map +0 -1
  605. package/dist/chunk-VRDNUY4H.js.map +0 -1
  606. package/dist/chunk-WTOYEWW6.js.map +0 -1
  607. package/dist/chunk-WUTHROII.js.map +0 -1
  608. package/dist/chunk-YVUD3MY4.js.map +0 -1
  609. package/dist/chunk-ZTYUKEN3.js.map +0 -1
  610. /package/dist/{chunk-SJO3K7SB.js.map → chunk-2OYFTSG4.js.map} +0 -0
  611. /package/dist/{chunk-CRZXSZ5O.js.map → chunk-2S752BIJ.js.map} +0 -0
  612. /package/dist/{chunk-BAQBUKDU.js.map → chunk-3KREF4ZF.js.map} +0 -0
  613. /package/dist/{chunk-SYN46YL6.js.map → chunk-3RMDIO4G.js.map} +0 -0
  614. /package/dist/{chunk-IL7JZKXY.js.map → chunk-442FSG7G.js.map} +0 -0
  615. /package/dist/{chunk-CS3KOKL3.js.map → chunk-4GWHYLEB.js.map} +0 -0
  616. /package/dist/{chunk-E7T3A4IR.js.map → chunk-5JCGBCFJ.js.map} +0 -0
  617. /package/dist/{chunk-FC7NQ6XM.js.map → chunk-5MW7OYBM.js.map} +0 -0
  618. /package/dist/{chunk-CQLPDY2J.js.map → chunk-5OBXEMQO.js.map} +0 -0
  619. /package/dist/{chunk-BW62QQAG.js.map → chunk-6N4AA2Y7.js.map} +0 -0
  620. /package/dist/{chunk-7EIOXZWL.js.map → chunk-74P3YX7R.js.map} +0 -0
  621. /package/dist/{chunk-VT5HQ2AD.js.map → chunk-BFMDA6UO.js.map} +0 -0
  622. /package/dist/{chunk-R75DZ3AK.js.map → chunk-BVLMKSHX.js.map} +0 -0
  623. /package/dist/{chunk-UZ6AUTE6.js.map → chunk-CNQUCNEA.js.map} +0 -0
  624. /package/dist/{chunk-JL75FJRG.js.map → chunk-CZIX4BW2.js.map} +0 -0
  625. /package/dist/{chunk-HU7TX7RB.js.map → chunk-DUBTI4DI.js.map} +0 -0
  626. /package/dist/{chunk-RMCNEKBZ.js.map → chunk-DW6F7354.js.map} +0 -0
  627. /package/dist/{chunk-XJUEHG72.js.map → chunk-EERUSI52.js.map} +0 -0
  628. /package/dist/{chunk-C55AWF3U.js.map → chunk-FFCJ7NR2.js.map} +0 -0
  629. /package/dist/{chunk-AYLEZM6T.js.map → chunk-GLFTIGOF.js.map} +0 -0
  630. /package/dist/{chunk-L4UP5VYS.js.map → chunk-GVH7C2PT.js.map} +0 -0
  631. /package/dist/{chunk-AER4245J.js.map → chunk-H67EL3CG.js.map} +0 -0
  632. /package/dist/{chunk-57JLS55D.js.map → chunk-I4QA2F4L.js.map} +0 -0
  633. /package/dist/{chunk-AJ5SDHX5.js.map → chunk-JCL7WK4G.js.map} +0 -0
  634. /package/dist/{chunk-WE3LJPRN.js.map → chunk-KE473LK6.js.map} +0 -0
  635. /package/dist/{chunk-CQPFSEJB.js.map → chunk-L7NQCLFU.js.map} +0 -0
  636. /package/dist/{chunk-2ZIHZLF5.js.map → chunk-M2JTIH5M.js.map} +0 -0
  637. /package/dist/{chunk-2BIVCYTO.js.map → chunk-MR2HKBHS.js.map} +0 -0
  638. /package/dist/{chunk-KK57AHWS.js.map → chunk-OAEYCKBN.js.map} +0 -0
  639. /package/dist/{chunk-JGRE56GQ.js.map → chunk-OB56SZGL.js.map} +0 -0
  640. /package/dist/{chunk-E4TNDTWV.js.map → chunk-OL2BEJZR.js.map} +0 -0
  641. /package/dist/{chunk-NDNYD4FG.js.map → chunk-OS6KPL4D.js.map} +0 -0
  642. /package/dist/{chunk-75LOTMSN.js.map → chunk-PPRV4LTM.js.map} +0 -0
  643. /package/dist/{chunk-LT4NEKXB.js.map → chunk-QA2ZGCRL.js.map} +0 -0
  644. /package/dist/{chunk-ROT57BP4.js.map → chunk-R2XVTUVR.js.map} +0 -0
  645. /package/dist/{chunk-QEG3P5D4.js.map → chunk-R6SN73RX.js.map} +0 -0
  646. /package/dist/{chunk-IKLOIONQ.js.map → chunk-RZYSKQTS.js.map} +0 -0
  647. /package/dist/{chunk-NCPWLHZT.js.map → chunk-SKT2V2OX.js.map} +0 -0
  648. /package/dist/{chunk-EOW2ECB3.js.map → chunk-SNURSSTN.js.map} +0 -0
  649. /package/dist/{chunk-CZBND7AY.js.map → chunk-T7DE44SP.js.map} +0 -0
  650. /package/dist/{chunk-DB2ZFZVW.js.map → chunk-TKC6WHGB.js.map} +0 -0
  651. /package/dist/{chunk-JLQGRZMN.js.map → chunk-UEVHI62V.js.map} +0 -0
  652. /package/dist/{chunk-4CXEWFKO.js.map → chunk-UFJYJHQI.js.map} +0 -0
  653. /package/dist/{chunk-BNEWMFVB.js.map → chunk-UGGJ3KDT.js.map} +0 -0
  654. /package/dist/{chunk-KREWQAEV.js.map → chunk-VIRYHNEM.js.map} +0 -0
  655. /package/dist/{chunk-N6CSXHFJ.js.map → chunk-WN5PNP6F.js.map} +0 -0
  656. /package/dist/{chunk-XR46FSOH.js.map → chunk-XIG3DXXX.js.map} +0 -0
  657. /package/dist/{chunk-35S6QI5G.js.map → chunk-XJJXBUPN.js.map} +0 -0
  658. /package/dist/{chunk-GHTBUJ6E.js.map → chunk-XRUW7DMH.js.map} +0 -0
  659. /package/dist/{chunk-HNPWZ3W2.js.map → chunk-Y7F5JBAT.js.map} +0 -0
  660. /package/dist/{chunk-6BDYC4RA.js.map → chunk-YRSR5LVZ.js.map} +0 -0
  661. /package/dist/{chunk-FFOQZRFC.js.map → chunk-ZAY6OA6F.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/layout/Dashboard/DashboardParts.tsx"],"sourcesContent":["'use client';\n\nimport CloseIcon from '@mui/icons-material/Close';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport ExportIcon from '@mui/icons-material/FileDownloadOutlined';\nimport FilterIcon from '@mui/icons-material/FilterListRounded';\nimport InfoIcon from '@mui/icons-material/InfoOutlined';\nimport SettingsIcon from '@mui/icons-material/SettingsOutlined';\nimport Badge from '@mui/material/Badge/index.js';\nimport Box from '@mui/material/Box/index.js';\nimport Dialog from '@mui/material/Dialog/index.js';\nimport DialogContent from '@mui/material/DialogContent/index.js';\nimport DialogTitle from '@mui/material/DialogTitle/index.js';\nimport IconButton from '@mui/material/IconButton/index.js';\nimport Menu from '@mui/material/Menu/index.js';\nimport MenuItem from '@mui/material/MenuItem/index.js';\nimport Popover from '@mui/material/Popover/index.js';\nimport Tooltip from '@mui/material/Tooltip/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport React, { useState } from 'react';\n\nimport { HeaderActions } from '../../form/HeaderActions';\nimport { HeaderButton } from '../../form/HeaderButton';\nimport { useDashboardContext } from './DashboardContext';\nimport type {\n DashboardActionProps,\n DashboardActionsProps,\n DashboardExportFormat,\n DashboardExportProps,\n DashboardFilterToggleProps,\n DashboardInfoProps,\n DashboardSettingsProps,\n} from './Dashboard.types';\nimport { sxRem } from '../../../tokens/relative';\n\n/** Flexible spacer — everything composed after it is pushed to the right. */\nexport const DashboardSpacer = (): React.JSX.Element => <Box sx={{ flex: 1 }} aria-hidden />;\nDashboardSpacer.displayName = 'Dashboard.Spacer';\n\nexport const DashboardInfo = ({\n title = 'About this page',\n children,\n ariaLabel = 'Page information',\n}: DashboardInfoProps): React.JSX.Element => {\n const { testIdPrefix } = useDashboardContext();\n const [anchorEl, setAnchorEl] = useState<HTMLButtonElement | null>(null);\n const open = Boolean(anchorEl);\n return (\n <>\n <Tooltip title={ariaLabel}>\n <IconButton\n size=\"small\"\n aria-label={ariaLabel}\n aria-haspopup=\"dialog\"\n onClick={(e) => setAnchorEl(e.currentTarget)}\n data-testid={`${testIdPrefix}-info-trigger`}\n sx={{ color: 'text.secondary' }}\n >\n <InfoIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n <Popover\n open={open}\n anchorEl={anchorEl}\n onClose={() => setAnchorEl(null)}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }}\n slotProps={{ paper: { sx: { width: 360, maxWidth: '90vw' } } }}\n data-testid={`${testIdPrefix}-info-popover`}\n >\n <Box sx={{ px: 2, py: 1.5, borderBottom: 1, borderColor: 'divider', display: 'flex', gap: 1, alignItems: 'center' }}>\n <InfoIcon fontSize=\"small\" sx={{ color: 'text.secondary' }} />\n <Typography sx={{ fontWeight: 600 }}>{title}</Typography>\n </Box>\n <Box sx={{ px: 2, py: 1.5, fontSize: sxRem(14), color: 'text.secondary' }}>{children}</Box>\n </Popover>\n </>\n );\n};\nDashboardInfo.displayName = 'Dashboard.Info';\n\nexport const DashboardFilterToggle = ({ ariaLabel }: DashboardFilterToggleProps): React.JSX.Element => {\n const { filtersVisible, toggleFilters, activeFilterCount, testIdPrefix } = useDashboardContext();\n const label = ariaLabel ?? (filtersVisible ? 'Hide filters' : 'Show filters');\n return (\n <Tooltip title={label}>\n <IconButton\n size=\"small\"\n aria-label={label}\n aria-pressed={filtersVisible}\n onClick={toggleFilters}\n data-testid={`${testIdPrefix}-filter-toggle`}\n sx={{ color: filtersVisible ? 'primary.main' : 'text.secondary', bgcolor: filtersVisible ? 'action.selected' : 'transparent' }}\n >\n <Badge badgeContent={activeFilterCount} color=\"primary\" overlap=\"circular\">\n <FilterIcon fontSize=\"small\" />\n </Badge>\n </IconButton>\n </Tooltip>\n );\n};\nDashboardFilterToggle.displayName = 'Dashboard.FilterToggle';\n\nexport const DashboardSettings = ({\n title = 'Settings',\n closeLabel,\n children,\n ariaLabel = 'Settings',\n href,\n linkComponent,\n}: DashboardSettingsProps): React.JSX.Element => {\n const { testIdPrefix } = useDashboardContext();\n const [open, setOpen] = useState(false);\n\n // Link mode: the gear navigates to a settings route (e.g. the page's\n // Configuração section) instead of opening an in-page dialog.\n if (href) {\n const LinkComponent = linkComponent ?? 'a';\n return (\n <Tooltip title={ariaLabel}>\n <IconButton\n size=\"small\"\n aria-label={ariaLabel}\n component={LinkComponent}\n href={href}\n data-testid={`${testIdPrefix}-settings-trigger`}\n sx={{ color: 'text.secondary' }}\n >\n <SettingsIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n );\n }\n\n return (\n <>\n <Tooltip title={ariaLabel}>\n <IconButton\n size=\"small\"\n aria-label={ariaLabel}\n aria-haspopup=\"dialog\"\n onClick={() => setOpen(true)}\n data-testid={`${testIdPrefix}-settings-trigger`}\n sx={{ color: 'text.secondary' }}\n >\n <SettingsIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n <Dialog open={open} onClose={() => setOpen(false)} maxWidth=\"sm\" fullWidth data-testid={`${testIdPrefix}-settings-dialog`}>\n <DialogTitle sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n {title}\n <IconButton aria-label={closeLabel} size=\"small\" onClick={() => setOpen(false)}>\n <CloseIcon fontSize=\"small\" />\n </IconButton>\n </DialogTitle>\n <DialogContent dividers>{children}</DialogContent>\n </Dialog>\n </>\n );\n};\nDashboardSettings.displayName = 'Dashboard.Settings';\n\nconst DEFAULT_EXPORT_FORMATS: DashboardExportFormat[] = [\n { id: 'csv', label: 'CSV (.csv)' },\n { id: 'xlsx', label: 'Excel (.xlsx)' },\n { id: 'json', label: 'JSON (.json)' },\n];\n\nexport const DashboardExport = ({\n formats = DEFAULT_EXPORT_FORMATS,\n onExport,\n label = 'Export',\n}: DashboardExportProps): React.JSX.Element => {\n const { testIdPrefix } = useDashboardContext();\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n const open = Boolean(anchorEl);\n return (\n <>\n <HeaderButton\n variant=\"outlined\"\n color=\"inherit\"\n text={label}\n icon={<ExportIcon fontSize=\"small\" />}\n endIcon={<ExpandMoreIcon fontSize=\"small\" />}\n onClick={(e) => setAnchorEl(e.currentTarget)}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n dataTestId={`${testIdPrefix}-export-trigger`}\n />\n <Menu anchorEl={anchorEl} open={open} onClose={() => setAnchorEl(null)} data-testid={`${testIdPrefix}-export-menu`}>\n {formats.map((format) => (\n <MenuItem\n key={format.id}\n onClick={() => {\n onExport(format.id);\n setAnchorEl(null);\n }}\n data-testid={`${testIdPrefix}-export-${format.id}`}\n >\n {format.label}\n </MenuItem>\n ))}\n </Menu>\n </>\n );\n};\nDashboardExport.displayName = 'Dashboard.Export';\n\nexport const DashboardAction = ({ children }: DashboardActionProps): React.JSX.Element => (\n <Box sx={{ display: 'inline-flex' }}>{children}</Box>\n);\nDashboardAction.displayName = 'Dashboard.Action';\n\n/**\n * The header's actions, declared as a LIST — `<Dashboard.Action>`'s plural.\n *\n * `<Dashboard.Action>` is a slot: it renders whatever you hand it, once per\n * action, and a page with five of them draws five equally-loud buttons. That is\n * the right primitive for one button and the wrong one for five, and the pages\n * here that grew a fifth action all grew it the same way — by adding a fifth\n * slot, because the slot was the only thing on offer.\n *\n * This part answers the question the slot cannot: given N actions, how many\n * belong on the bar? See {@link HeaderActions} for the rule (0 ⇒ nothing,\n * 1 ⇒ a button, n ⇒ a button and a menu of the rest).\n *\n * Both stay. A header still composes `<Dashboard.Action>` for the one control\n * that is not an action at all — a link, a toggle, a status pill — and reaches\n * for this when it has actions to rank.\n */\nexport const DashboardActions = ({\n actions,\n moreLabel,\n collapseBelow,\n}: DashboardActionsProps): React.JSX.Element => {\n const { testIdPrefix } = useDashboardContext();\n return (\n <HeaderActions\n actions={actions}\n moreLabel={moreLabel}\n collapseBelow={collapseBelow}\n testIdPrefix={`${testIdPrefix}-actions`}\n />\n );\n};\nDashboardActions.displayName = 'Dashboard.Actions';\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/feedback/TutorialOverlay/TutorialOverlay.hooks.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { calculateTooltipPosition, getElementBounds } from './TutorialOverlay.geometry';\nimport type { TutorialOverlayProps } from './TutorialOverlay.types';\n\n// Tracks the highlighted element's box, re-measuring on resize and scroll. Scroll\n// is captured (third argument true) so it fires for any scrolling ancestor, not\n// just the window.\nconst useTargetBounds = ({\n active,\n target,\n}: {\n active: boolean;\n target?: string;\n}) => {\n const [targetBounds, setTargetBounds] = useState<globalThis.DOMRect | null>(null);\n const [isVisible, setIsVisible] = useState(false);\n\n useEffect(() => {\n if (!active || !target) return;\n\n const updateBounds = () => {\n const bounds = getElementBounds(target);\n setTargetBounds(bounds);\n setIsVisible(Boolean(bounds));\n };\n\n updateBounds();\n\n window.addEventListener('resize', updateBounds);\n window.addEventListener('scroll', updateBounds, true);\n\n return () => {\n window.removeEventListener('resize', updateBounds);\n window.removeEventListener('scroll', updateBounds, true);\n };\n }, [active, target]);\n\n return { targetBounds, isVisible };\n};\n\n// Places the tooltip against the measured target once both boxes are known.\nconst useTooltipPlacement = ({\n targetBounds,\n isVisible,\n preferredPosition,\n}: {\n targetBounds: globalThis.DOMRect | null;\n isVisible: boolean;\n preferredPosition?: string;\n}) => {\n const tooltipRef = useRef<HTMLDivElement>(null);\n const [tooltipPosition, setTooltipPosition] = useState({ top: 0, left: 0 });\n const [actualPlacement, setActualPlacement] = useState<string>('bottom');\n\n useEffect(() => {\n if (!targetBounds || !tooltipRef.current || !isVisible) return;\n\n const { position, placement } = calculateTooltipPosition(\n targetBounds,\n tooltipRef.current.getBoundingClientRect(),\n preferredPosition || 'auto',\n );\n\n setTooltipPosition(position);\n setActualPlacement(placement);\n }, [targetBounds, isVisible, preferredPosition]);\n\n return { tooltipRef, tooltipPosition, actualPlacement };\n};\n\n// Arrow keys step through the tour, Escape skips it.\nconst useTutorialKeyboard = ({\n enabled,\n onNext,\n onPrev,\n onSkip,\n}: {\n enabled: boolean;\n onNext: () => void;\n onPrev: () => void;\n onSkip: () => void;\n}) => {\n useEffect(() => {\n if (!enabled) return;\n\n const handleKeyPress = (e: globalThis.KeyboardEvent) => {\n switch (e.key) {\n case 'ArrowLeft':\n onPrev();\n break;\n case 'ArrowRight':\n onNext();\n break;\n case 'Escape':\n onSkip();\n break;\n }\n };\n\n window.addEventListener('keydown', handleKeyPress);\n return () => window.removeEventListener('keydown', handleKeyPress);\n }, [enabled, onNext, onPrev, onSkip]);\n};\n\nexport const useTutorialOverlay = ({\n steps,\n initialStep,\n active,\n allowKeyboardNavigation,\n onComplete,\n onSkip,\n onStepComplete,\n}: {\n steps: TutorialOverlayProps['steps'];\n initialStep: number;\n active: boolean;\n allowKeyboardNavigation: boolean;\n onComplete?: () => void;\n onSkip?: () => void;\n onStepComplete?: (stepId: string) => void;\n}) => {\n const [currentStep, setCurrentStep] = useState(initialStep);\n\n const currentStepData = steps[currentStep];\n const isLastStep = currentStep === steps.length - 1;\n\n const { targetBounds, isVisible } = useTargetBounds({\n active,\n target: currentStepData?.target,\n });\n\n const { tooltipRef, tooltipPosition, actualPlacement } = useTooltipPlacement({\n targetBounds,\n isVisible,\n preferredPosition: currentStepData?.position,\n });\n\n const handleNext = useCallback(() => {\n const currentStepId = steps[currentStep]?.id;\n if (currentStepId) onStepComplete?.(currentStepId);\n\n if (currentStep < steps.length - 1) {\n setCurrentStep(currentStep + 1);\n return;\n }\n\n onComplete?.();\n }, [currentStep, steps, onComplete, onStepComplete]);\n\n const handlePrev = useCallback(() => {\n setCurrentStep((step) => Math.max(step - 1, 0));\n }, []);\n\n const handleSkip = useCallback(() => {\n onSkip?.();\n }, [onSkip]);\n\n const handleRestart = useCallback(() => {\n setCurrentStep(0);\n }, []);\n\n useTutorialKeyboard({\n enabled: allowKeyboardNavigation && active,\n onNext: handleNext,\n onPrev: handlePrev,\n onSkip: handleSkip,\n });\n\n return {\n currentStep,\n currentStepData,\n isLastStep,\n isVisible,\n targetBounds,\n tooltipRef,\n tooltipPosition,\n actualPlacement,\n progress: ((currentStep + 1) / steps.length) * 100,\n handleNext,\n handlePrev,\n handleSkip,\n handleRestart,\n };\n};\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/feedback/StackedModal/StackedModal.parts.tsx"],"sourcesContent":["import ChevronLeftIcon from '@mui/icons-material/ChevronLeft';\nimport CloseIcon from '@mui/icons-material/Close';\nimport Box from '@mui/material/Box/index.js';\nimport CircularProgress from '@mui/material/CircularProgress/index.js';\nimport DialogActions from '@mui/material/DialogActions/index.js';\nimport DialogContent from '@mui/material/DialogContent/index.js';\nimport DialogTitle from '@mui/material/DialogTitle/index.js';\nimport IconButton from '@mui/material/IconButton/index.js';\nimport Skeleton from '@mui/material/Skeleton/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { styled } from '@mui/material/styles/index.js';\nimport type { FC, ReactNode } from 'react';\nimport React from 'react';\nimport { safeAreaBottom } from '../../../utils/viewport';\nimport {\n loadingOverlayStyles,\n modalContentStyles,\n titleLeftStyles,\n titleRightStyles,\n titleStyles,\n} from './StackedModal.styles';\n\nconst StyledDialogTitle = styled(DialogTitle, {\n shouldForwardProp: (prop) => prop !== 'rtl',\n})<{ rtl?: boolean }>(({ theme, rtl }) => titleStyles(theme, rtl));\n\nconst DialogTitleLeft = styled(Box)(({ theme }) => titleLeftStyles(theme));\nconst DialogTitleRight = styled(Box)(({ theme }) => titleRightStyles(theme));\nconst LoadingOverlay = styled(Box)(({ theme }) => loadingOverlayStyles(theme));\n\n/**\n * The padded content wrapper callers put inside a StackedModal. The explicit\n * `typeof DialogContent` annotation keeps its type nameable across package\n * boundaries (TS2742) now that it is re-exported from the barrel.\n */\nexport const StackedModalContent: typeof DialogContent = styled(DialogContent)(({ theme }) =>\n modalContentStyles(theme),\n) as typeof DialogContent;\n\n/** Sub-element test IDs derive from the modal's own, or stay off when it has none. */\nexport const testId = (base: string | undefined, suffix: string): string | undefined =>\n base ? `${base}-${suffix}` : undefined;\n\n/**\n * A wrapper marking the subtree that should render as modal actions — the\n * StackedModal pulls it out of `children` and places it by device.\n */\nexport const StackedModalActions: FC<{ children?: ReactNode }> = ({ children }) => <>{children}</>;\n\n/** Separates the `StackedModalActions` subtree from the rest of the content. */\nconst splitModalChildren = (children: ReactNode): { content: ReactNode; actions: ReactNode } => {\n let actions: ReactNode = null;\n\n React.Children.forEach(children, (child) => {\n if (React.isValidElement<{ children?: ReactNode }>(child) && child.type === StackedModalActions) {\n actions = child.props.children;\n }\n });\n\n const content = React.Children.toArray(children).filter(\n (child) => !(React.isValidElement(child) && child.type === StackedModalActions),\n );\n\n return { content, actions };\n};\n\n/**\n * Works out what renders where: a `StackedModalActions` child wins over the\n * `actions` prop, and on phones those actions move out of the header into a\n * pinned bottom bar.\n */\nexport const resolveModalContent = (\n children: ReactNode,\n actions: ReactNode,\n isMobile: boolean,\n): {\n content: ReactNode;\n modalActions: ReactNode;\n headerActions: ReactNode;\n hasMobileActions: boolean;\n} => {\n const { content, actions: childActions } = splitModalChildren(children);\n const modalActions = childActions ?? actions;\n return {\n content,\n modalActions,\n headerActions: isMobile ? null : modalActions,\n hasMobileActions: Boolean(isMobile && modalActions),\n };\n};\n\n/** The panel's own ARIA ids, unless the caller wired it to its own labels. */\nexport const modalAriaIds = (\n modalId: string,\n ariaLabelledBy?: string,\n ariaDescribedBy?: string,\n): { titleId: string; descId: string } => ({\n titleId: ariaLabelledBy || `modal-title-${modalId}`,\n descId: ariaDescribedBy || `modal-desc-${modalId}`,\n});\n\nexport const ModalLoadingOverlay: FC<{ loadingText?: string; dataTestId?: string }> = ({\n loadingText,\n dataTestId,\n}) => (\n <LoadingOverlay data-testid={testId(dataTestId, 'loading-overlay')}>\n <CircularProgress size={40} data-testid={testId(dataTestId, 'loading-spinner')} />\n {loadingText && (\n <Typography variant=\"body2\" sx={{ mt: 2 }} data-testid={testId(dataTestId, 'loading-text')}>\n {loadingText}\n </Typography>\n )}\n </LoadingOverlay>\n);\n\ninterface ModalHeaderProps {\n titleId: string;\n navigationTitle?: ReactNode;\n /** Deeper than the first panel, so the leading button goes back instead of closing. */\n canGoBack: boolean;\n onBack: () => void;\n /** The back arrow's accessible name — it carries a glyph only. REQUIRED. */\n backLabel: string;\n onClose: () => void;\n /** Renders the bar without its ✕ — the panel's content owns the dismiss. */\n hideClose?: boolean;\n /** Header actions — desktop only; on phones they move to the footer. */\n headerActions?: ReactNode;\n rtl?: boolean;\n dataTestId?: string;\n}\n\n/**\n * The bar's leading control: back at depth ≥2, otherwise close — and nothing at\n * all when the panel's content carries its own ✕ (`hideClose`).\n */\nconst HeaderLeadingButton: FC<\n Pick<\n ModalHeaderProps,\n 'canGoBack' | 'onBack' | 'backLabel' | 'onClose' | 'hideClose' | 'rtl' | 'dataTestId'\n >\n> = ({ canGoBack, onBack, backLabel, onClose, hideClose, rtl, dataTestId }) => {\n if (canGoBack) {\n return (\n <IconButton\n edge=\"start\"\n color=\"inherit\"\n onClick={onBack}\n aria-label={backLabel}\n size=\"small\"\n sx={{ transform: rtl ? 'rotate(180deg)' : 'none' }}\n data-testid={testId(dataTestId, 'back-button')}\n >\n <ChevronLeftIcon />\n </IconButton>\n );\n }\n if (hideClose) return null;\n return (\n <IconButton\n edge=\"start\"\n color=\"inherit\"\n onClick={onClose}\n aria-label=\"close\"\n size=\"small\"\n data-testid={testId(dataTestId, 'close-button')}\n >\n <CloseIcon />\n </IconButton>\n );\n};\n\nexport const ModalHeader: FC<ModalHeaderProps> = ({\n titleId,\n navigationTitle,\n canGoBack,\n onBack,\n onClose,\n hideClose,\n backLabel,\n headerActions,\n rtl,\n dataTestId,\n}) => (\n <StyledDialogTitle id={titleId} rtl={rtl} data-testid={testId(dataTestId, 'header')}>\n <DialogTitleLeft>\n <HeaderLeadingButton\n canGoBack={canGoBack}\n onBack={onBack}\n backLabel={backLabel}\n onClose={onClose}\n hideClose={hideClose}\n rtl={rtl}\n dataTestId={dataTestId}\n />\n {navigationTitle && (\n <Typography\n variant=\"h6\"\n component=\"h2\"\n noWrap\n sx={{ ml: canGoBack || !hideClose ? 1 : 0 }}\n data-testid={testId(dataTestId, 'title')}\n >\n {navigationTitle}\n </Typography>\n )}\n </DialogTitleLeft>\n <DialogTitleRight data-testid={testId(dataTestId, 'header-actions')}>\n {headerActions}\n </DialogTitleRight>\n </StyledDialogTitle>\n);\n\nconst ContentSkeleton: FC = () => (\n <Box sx={{ p: 3 }}>\n <Skeleton variant=\"text\" width=\"60%\" height={32} />\n <Skeleton variant=\"text\" width=\"100%\" />\n <Skeleton variant=\"text\" width=\"100%\" />\n <Skeleton variant=\"rectangular\" height={200} sx={{ mt: 2 }} />\n </Box>\n);\n\ninterface ModalBodyProps {\n descId: string;\n showSkeleton: boolean;\n /** When there is no action bar, the body is what reaches the bottom of the panel. */\n endsPanel: boolean;\n dataTestId?: string;\n children?: ReactNode;\n}\n\nexport const ModalBody: FC<ModalBodyProps> = ({\n descId,\n showSkeleton,\n endsPanel,\n dataTestId,\n children,\n}) => (\n <Box\n id={descId}\n sx={{\n position: 'relative',\n flex: 1,\n overflow: 'auto',\n // iOS momentum scrolling, and no scroll-chaining to the page behind —\n // without `contain`, an overscroll at the end of the list rubber-bands the\n // whole panel and springs back before the last row can be tapped.\n WebkitOverflowScrolling: 'touch',\n overscrollBehavior: 'contain',\n // The content itself ends the panel when there is no action bar, so it has\n // to clear the home indicator on its own.\n ...(endsPanel ? safeAreaBottom(0) : {}),\n }}\n data-testid={testId(dataTestId, 'content')}\n >\n {showSkeleton ? <ContentSkeleton /> : children}\n </Box>\n);\n\n/** The phone-only pinned action bar; on desktop the actions live in the header. */\nexport const ModalFooter: FC<{ dataTestId?: string; children?: ReactNode }> = ({\n dataTestId,\n children,\n}) => (\n <DialogActions\n sx={{\n borderTop: (theme) => `1px solid ${theme.palette.divider}`,\n padding: 2,\n // Never let the action row sit under the iOS home indicator.\n flexShrink: 0,\n ...safeAreaBottom(16),\n }}\n data-testid={testId(dataTestId, 'footer')}\n >\n {children}\n </DialogActions>\n);\n\ninterface PanelContentsProps extends ModalHeaderProps {\n showSkeleton: boolean;\n loadingText?: string;\n descId: string;\n content: ReactNode;\n /** The resolved actions, already placed in the header or destined for the footer. */\n modalActions: ReactNode;\n hasMobileActions: boolean;\n}\n\n/** Everything inside the sliding panel: the loading veil, header, body and action bar. */\nexport const ModalPanelContents: FC<PanelContentsProps> = ({\n showSkeleton,\n loadingText,\n descId,\n content,\n modalActions,\n hasMobileActions,\n ...header\n}) => (\n <>\n {showSkeleton && (\n <ModalLoadingOverlay loadingText={loadingText} dataTestId={header.dataTestId} />\n )}\n <ModalHeader {...header} />\n <ModalBody\n descId={descId}\n showSkeleton={showSkeleton}\n endsPanel={!hasMobileActions}\n dataTestId={header.dataTestId}\n >\n {content}\n </ModalBody>\n {hasMobileActions && (\n <ModalFooter dataTestId={header.dataTestId}>{modalActions}</ModalFooter>\n )}\n </>\n);\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/layout/ScrollArea/ScrollViewport.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport { useTheme } from '@mui/material/styles/index.js';\nimport type { FC, ReactNode, UIEvent } from 'react';\nimport React from 'react';\n\nimport { getOverflowStyle, getVariantStyles } from './ScrollArea.styles';\nimport type { ResolvedScrollAreaProps } from './ScrollArea.helpers';\n\nexport interface ScrollViewportProps\n extends Pick<\n ResolvedScrollAreaProps,\n | 'height'\n | 'maxHeight'\n | 'orientation'\n | 'scrollbarSize'\n | 'scrollbarColor'\n | 'scrollbarTrackColor'\n | 'contentPadding'\n | 'variant'\n | 'disabled'\n | 'loading'\n | 'smoothScroll'\n > {\n /** The scroll region's accessible name. REQUIRED. */\n regionLabel: string;\n children: ReactNode;\n shouldShowScrollbar: boolean;\n setScrollRef: (node: HTMLDivElement | null) => void;\n onScroll: (event: UIEvent<HTMLDivElement>) => void;\n}\n\n// The element that actually scrolls: its own overflow and scrollbar styling,\n// plus the disabled and loading treatments.\nexport const ScrollViewport: FC<ScrollViewportProps> = ({\n regionLabel,\n children,\n height,\n maxHeight,\n orientation,\n scrollbarSize,\n scrollbarColor,\n scrollbarTrackColor,\n contentPadding,\n variant,\n disabled,\n loading,\n smoothScroll,\n shouldShowScrollbar,\n setScrollRef,\n onScroll,\n}) => {\n const theme = useTheme();\n\n return (\n <Box\n ref={setScrollRef}\n onScroll={onScroll}\n role=\"region\"\n aria-label={regionLabel}\n aria-busy={loading}\n tabIndex={disabled ? -1 : 0}\n sx={{\n width: '100%',\n height: '100%',\n // Use an explicit maxHeight when height is 'auto', else inherit.\n maxHeight: height === 'auto' && maxHeight ? maxHeight : '100%',\n padding: contentPadding,\n opacity: loading ? 0.5 : 1,\n pointerEvents: disabled || loading ? 'none' : 'auto',\n transition: 'opacity 0.3s ease',\n '&:focus': {\n outline: 'none',\n '&:focus-visible': {\n outline: `2px solid ${theme.palette.primary.main}`,\n outlineOffset: -2,\n },\n },\n ...getOverflowStyle({ disabled, orientation }),\n ...getVariantStyles({\n theme,\n variant,\n orientation,\n scrollbarSize,\n scrollbarColor,\n scrollbarTrackColor,\n shouldShowScrollbar,\n }),\n }}\n style={{ scrollBehavior: smoothScroll ? 'smooth' : 'auto' }}\n >\n {children}\n </Box>\n );\n};\n"],"mappings":";;;;;;AAAA,OAAO,SAAS;AAChB,SAAS,gBAAgB;AAqDrB;AArBG,IAAM,iBAA0C,CAAC;AAAA,EACtD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AAEvB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL;AAAA,MACA,MAAK;AAAA,MACL,cAAY;AAAA,MACZ,aAAW;AAAA,MACX,UAAU,WAAW,KAAK;AAAA,MAC1B,IAAI;AAAA,QACF,OAAO;AAAA,QACP,QAAQ;AAAA;AAAA,QAER,WAAW,WAAW,UAAU,YAAY,YAAY;AAAA,QACxD,SAAS;AAAA,QACT,SAAS,UAAU,MAAM;AAAA,QACzB,eAAe,YAAY,UAAU,SAAS;AAAA,QAC9C,YAAY;AAAA,QACZ,WAAW;AAAA,UACT,SAAS;AAAA,UACT,mBAAmB;AAAA,YACjB,SAAS,aAAa,MAAM,QAAQ,QAAQ,IAAI;AAAA,YAChD,eAAe;AAAA,UACjB;AAAA,QACF;AAAA,QACA,GAAG,iBAAiB,EAAE,UAAU,YAAY,CAAC;AAAA,QAC7C,GAAG,iBAAiB;AAAA,UAClB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MACA,OAAO,EAAE,gBAAgB,eAAe,WAAW,OAAO;AAAA,MAEzD;AAAA;AAAA,EACH;AAEJ;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/layout/Drawer/Drawer.tsx"],"sourcesContent":["import Close from '@mui/icons-material/Close';\nimport type { Theme } from '@mui/material/styles/index.js';\nimport Box from '@mui/material/Box/index.js';\nimport MuiDrawer from '@mui/material/Drawer/index.js';\nimport IconButton from '@mui/material/IconButton/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { alpha, useTheme } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport type { DrawerContentProps,DrawerHeaderProps, DrawerProps } from './Drawer.types';\nimport { shadowInk } from '../../../tokens/ink';\n\ntype DrawerAnchor = 'left' | 'right' | 'top' | 'bottom';\n\n// `variant` doubles as a position preset, but an explicit `anchor` always wins.\nconst resolveAnchor = (\n anchor: DrawerProps['anchor'],\n variant: DrawerProps['variant'],\n): DrawerAnchor => {\n if (anchor) return anchor;\n\n // Map variant to anchor position\n switch (variant) {\n case 'right':\n return 'right';\n case 'top':\n return 'top';\n case 'bottom':\n return 'bottom';\n case 'glass':\n return 'right';\n case 'left':\n default:\n return 'left';\n }\n};\n\nconst buildDrawerStyles = (\n theme: Theme,\n anchor: DrawerAnchor,\n variant: DrawerProps['variant'],\n width: DrawerProps['width'],\n height: DrawerProps['height'],\n // Merged LAST into the surface's own rules, so a caller can shape the sliding\n // surface itself (rounded corners on a bottom sheet, a docked panel's offset)\n // without reaching for the MUI paper class from outside. Undefined by default:\n // omit it and the drawer styles exactly as it always has.\n paperSx?: DrawerProps['paperSx'],\n) => {\n const baseStyles = {\n width: ['left', 'right'].includes(anchor) ? width : '100%',\n height: ['top', 'bottom'].includes(anchor) ? height : '100%',\n flexShrink: 0,\n };\n\n if (variant === 'glass') {\n return {\n ...baseStyles,\n '& .MuiDrawer-paper': {\n width,\n height: '100%',\n backgroundColor: alpha(theme.palette.background.paper, 0.1),\n backdropFilter: 'blur(20px)',\n border: `1px solid ${alpha(theme.palette.primary.main, 0.2)}`,\n boxShadow: `0 8px 32px ${shadowInk(theme, 0.1)}`,\n ...paperSx,\n },\n };\n }\n\n return {\n ...baseStyles,\n '& .MuiDrawer-paper': {\n width: ['left', 'right'].includes(anchor) ? width : '100%',\n height: ['top', 'bottom'].includes(anchor) ? height : '100%',\n boxSizing: 'border-box',\n ...paperSx,\n },\n };\n};\n\nexport const Drawer: React.FC<DrawerProps> = ({\n children,\n open,\n onClose,\n variant = 'left',\n anchor,\n width = 280,\n height = '100%',\n persistent = false,\n backdrop = true,\n hideBackdrop = false,\n keepMounted = false,\n paperSx,\n className,\n dataTestId,\n ...rest\n}) => {\n const theme = useTheme();\n const drawerAnchor = resolveAnchor(anchor, variant);\n\n return (\n <MuiDrawer\n anchor={drawerAnchor}\n open={open}\n onClose={onClose}\n variant={persistent ? 'persistent' : 'temporary'}\n ModalProps={{\n keepMounted,\n hideBackdrop,\n BackdropProps: {\n invisible: !backdrop,\n },\n }}\n sx={buildDrawerStyles(theme, drawerAnchor, variant, width, height, paperSx)}\n className={className}\n data-testid={dataTestId || 'drawer'}\n {...rest}\n >\n {children}\n </MuiDrawer>\n );\n};\n\nexport const DrawerHeader: React.FC<DrawerHeaderProps> = ({\n children,\n onClose,\n showCloseButton = true,\n closeLabel,\n dataTestId,\n}) => {\n const theme = useTheme();\n\n return (\n <Box\n data-testid={dataTestId || 'drawer-header'}\n sx={{\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(2),\n borderBottom: `1px solid ${theme.palette.divider}`,\n minHeight: 64,\n justifyContent: 'space-between',\n }}\n >\n <Box sx={{ flex: 1 }} data-testid={dataTestId ? `${dataTestId}-title` : 'drawer-title'}>\n {typeof children === 'string' ? <Typography variant=\"h6\">{children}</Typography> : children}\n </Box>\n {showCloseButton && onClose && (\n <IconButton\n onClick={onClose}\n edge=\"end\"\n aria-label={closeLabel ?? 'Close drawer'}\n data-testid={dataTestId ? `${dataTestId}-close` : 'drawer-close'}\n >\n <Close />\n </IconButton>\n )}\n </Box>\n );\n};\n\nexport const DrawerContent: React.FC<DrawerContentProps> = ({ children, padding = true, dataTestId }) => {\n const theme = useTheme();\n\n return (\n <Box\n data-testid={dataTestId || 'drawer-content'}\n sx={{\n flex: 1,\n overflow: 'auto',\n padding: padding ? theme.spacing(2) : 0,\n }}\n >\n {children}\n </Box>\n );\n};\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/layout/Collapsible/Collapsible.helpers.ts"],"sourcesContent":["import type { Theme } from '@mui/material/styles/index.js';\n\nimport type { CollapsibleVariant } from './Collapsible.types';\n\n/**\n * `smooth` and `default` share their timing; only `spring` differs, stretching\n * the duration and overshooting past the target before settling.\n */\nexport const transitionSettings = (\n theme: Theme,\n variant: CollapsibleVariant,\n duration: number,\n easing?: string,\n): { duration: number; easing: string } => {\n if (variant === 'spring') {\n return {\n duration: duration * 1.2,\n easing: easing || 'cubic-bezier(0.34, 1.56, 0.64, 1)',\n };\n }\n\n return { duration, easing: easing || theme.transitions.easing.easeInOut };\n};\n\ninterface RegionState {\n open: boolean;\n disabled: boolean;\n dataTestId?: string;\n}\n\n/**\n * Shared by both implementations: a disabled collapsible reads as collapsed to\n * assistive technology whatever its `open` prop says, because it cannot be\n * operated to see the rest.\n */\nexport const regionAttrs = ({ open, disabled, dataTestId }: RegionState) => ({\n 'data-disabled': disabled,\n 'data-testid': dataTestId,\n role: 'region',\n 'aria-expanded': open && !disabled,\n 'aria-hidden': disabled || !open,\n});\n\nexport const dimmedStyles = (disabled: boolean) => ({\n opacity: disabled ? 0.6 : 1,\n pointerEvents: (disabled ? 'none' : 'auto') as 'none' | 'auto',\n});\n\nexport const triggerStyles = (\n theme: Theme,\n { disabled, expanded }: { disabled: boolean; expanded: boolean },\n) => {\n const restingBackground = expanded ? theme.palette.action.selected : 'transparent';\n\n return {\n width: '100%',\n padding: theme.spacing(1, 2),\n border: 'none',\n backgroundColor: restingBackground,\n cursor: disabled ? 'not-allowed' : 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n transition: theme.transitions.create(['background-color', 'opacity'], {\n duration: theme.transitions.duration.short,\n }),\n opacity: disabled ? 0.6 : 1,\n '&:hover': {\n backgroundColor: disabled\n ? 'transparent'\n : expanded\n ? theme.palette.action.selected\n : theme.palette.action.hover,\n },\n '&:focus': {\n outline: `2px solid ${theme.palette.primary.main}`,\n outlineOffset: 2,\n },\n '&:active': {\n backgroundColor: disabled ? 'transparent' : theme.palette.action.focus,\n },\n };\n};\n"],"mappings":";AAQO,IAAM,qBAAqB,CAChC,OACA,SACA,UACA,WACyC;AACzC,MAAI,YAAY,UAAU;AACxB,WAAO;AAAA,MACL,UAAU,WAAW;AAAA,MACrB,QAAQ,UAAU;AAAA,IACpB;AAAA,EACF;AAEA,SAAO,EAAE,UAAU,QAAQ,UAAU,MAAM,YAAY,OAAO,UAAU;AAC1E;AAaO,IAAM,cAAc,CAAC,EAAE,MAAM,UAAU,WAAW,OAAoB;AAAA,EAC3E,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf,MAAM;AAAA,EACN,iBAAiB,QAAQ,CAAC;AAAA,EAC1B,eAAe,YAAY,CAAC;AAC9B;AAEO,IAAM,eAAe,CAAC,cAAuB;AAAA,EAClD,SAAS,WAAW,MAAM;AAAA,EAC1B,eAAgB,WAAW,SAAS;AACtC;AAEO,IAAM,gBAAgB,CAC3B,OACA,EAAE,UAAU,SAAS,MAClB;AACH,QAAM,oBAAoB,WAAW,MAAM,QAAQ,OAAO,WAAW;AAErE,SAAO;AAAA,IACL,OAAO;AAAA,IACP,SAAS,MAAM,QAAQ,GAAG,CAAC;AAAA,IAC3B,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,QAAQ,WAAW,gBAAgB;AAAA,IACnC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,YAAY,MAAM,YAAY,OAAO,CAAC,oBAAoB,SAAS,GAAG;AAAA,MACpE,UAAU,MAAM,YAAY,SAAS;AAAA,IACvC,CAAC;AAAA,IACD,SAAS,WAAW,MAAM;AAAA,IAC1B,WAAW;AAAA,MACT,iBAAiB,WACb,gBACA,WACE,MAAM,QAAQ,OAAO,WACrB,MAAM,QAAQ,OAAO;AAAA,IAC7B;AAAA,IACA,WAAW;AAAA,MACT,SAAS,aAAa,MAAM,QAAQ,QAAQ,IAAI;AAAA,MAChD,eAAe;AAAA,IACjB;AAAA,IACA,YAAY;AAAA,MACV,iBAAiB,WAAW,gBAAgB,MAAM,QAAQ,OAAO;AAAA,IACnE;AAAA,EACF;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/layout/Accordion/Accordion.tsx"],"sourcesContent":["import ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport MuiAccordion from '@mui/material/Accordion/index.js';\nimport MuiAccordionActions from '@mui/material/AccordionActions/index.js';\nimport MuiAccordionDetails from '@mui/material/AccordionDetails/index.js';\nimport MuiAccordionSummary from '@mui/material/AccordionSummary/index.js';\nimport { alpha, useTheme } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport { accordionVariantStyles } from './Accordion.styles';\nimport type { \n AccordionActionsProps, \n AccordionDetailsProps, \n AccordionProps, \n AccordionSummaryProps} from './Accordion.types';\n\nexport const Accordion: React.FC<AccordionProps> = ({\n children,\n variant = 'default',\n disabled = false,\n defaultExpanded = false,\n expanded,\n onChange,\n sx,\n 'data-testid': testId = 'accordion',\n ...props\n}) => {\n const theme = useTheme();\n\n return (\n <MuiAccordion\n disabled={disabled}\n defaultExpanded={defaultExpanded}\n expanded={expanded}\n onChange={onChange}\n data-testid={testId}\n sx={{\n ...accordionVariantStyles(theme, variant),\n ...sx,\n }}\n {...props}\n >\n {children}\n </MuiAccordion>\n );\n};\n\nexport const AccordionSummary: React.FC<AccordionSummaryProps> = ({\n children,\n expandIcon = <ExpandMoreIcon />,\n disabled = false,\n 'data-testid': testId = 'accordion-summary',\n ...props\n}) => {\n const theme = useTheme();\n\n // Clone expandIcon to add data-testid if it's a valid React element\n const iconWithTestId = React.isValidElement(expandIcon)\n ? React.cloneElement(expandIcon as React.ReactElement<{ 'data-testid'?: string }>, {\n 'data-testid': 'accordion-icon',\n })\n : expandIcon;\n\n return (\n <MuiAccordionSummary\n expandIcon={iconWithTestId}\n disabled={disabled}\n data-testid={testId}\n sx={{\n minHeight: 56,\n '& .MuiAccordionSummary-expandIconWrapper': {\n transition: 'transform 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n color: theme.palette.text.secondary,\n },\n '& .MuiAccordionSummary-expandIconWrapper.Mui-expanded': {\n transform: 'rotate(180deg)',\n color: theme.palette.primary.main,\n },\n '&:hover': {\n backgroundColor: alpha(theme.palette.action.hover, 0.04),\n '& .MuiAccordionSummary-expandIconWrapper': {\n color: theme.palette.primary.main,\n },\n },\n '&.Mui-focusVisible': {\n outline: `2px solid ${theme.palette.primary.main}`,\n outlineOffset: 2,\n },\n // Enhanced keyboard navigation styles\n '&:focus-visible': {\n outline: `2px solid ${theme.palette.primary.main}`,\n outlineOffset: -2,\n },\n }}\n {...props}\n >\n {children}\n </MuiAccordionSummary>\n );\n};\n\nexport const AccordionDetails: React.FC<AccordionDetailsProps> = ({\n children,\n 'data-testid': testId = 'accordion-details',\n ...props\n}) => {\n const theme = useTheme();\n\n return (\n <MuiAccordionDetails \n data-testid={testId}\n sx={{\n paddingTop: theme.spacing(1),\n paddingBottom: theme.spacing(2),\n borderTop: `1px solid ${alpha(theme.palette.divider, 0.08)}`,\n // Smooth content reveal animation\n '& > *': {\n animation: 'fadeInUp 0.4s ease-out',\n },\n '@keyframes fadeInUp': {\n '0%': {\n opacity: 0,\n transform: 'translateY(8px)',\n },\n '100%': {\n opacity: 1,\n transform: 'translateY(0)',\n },\n },\n }}\n {...props}\n >\n {children}\n </MuiAccordionDetails>\n );\n};\n\nexport const AccordionActions: React.FC<AccordionActionsProps> = ({\n children,\n disableSpacing = false,\n 'data-testid': testId = 'accordion-actions',\n ...props\n}) => {\n const theme = useTheme();\n\n return (\n <MuiAccordionActions \n disableSpacing={disableSpacing}\n data-testid={testId}\n sx={{\n padding: theme.spacing(1, 2),\n borderTop: `1px solid ${alpha(theme.palette.divider, 0.08)}`,\n backgroundColor: alpha(theme.palette.background.paper, 0.5),\n backdropFilter: 'blur(8px)',\n // Animate button entries\n '& > *': {\n transition: 'all 0.2s ease-in-out',\n '&:hover': {\n transform: 'translateY(-1px)',\n },\n },\n }}\n {...props}\n >\n {children}\n </MuiAccordionActions>\n );\n};"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/navigation/CommandPalette/CommandPalette.tsx"],"sourcesContent":["import CloseIcon from '@mui/icons-material/Close';\nimport EnterIcon from '@mui/icons-material/KeyboardReturn';\nimport SearchIcon from '@mui/icons-material/Search';\nimport Box from '@mui/material/Box/index.js';\nimport Dialog from '@mui/material/Dialog/index.js';\nimport DialogContent from '@mui/material/DialogContent/index.js';\nimport IconButton from '@mui/material/IconButton/index.js';\nimport InputBase from '@mui/material/InputBase/index.js';\nimport Paper from '@mui/material/Paper/index.js';\nimport Slide from '@mui/material/Slide/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { alpha, styled, useTheme } from '@mui/material/styles/index.js';\nimport type { TransitionProps } from '@mui/material/transitions/index.js';\nimport type { FC} from 'react';\nimport React, { } from 'react';\n\nimport { useCommandPalette } from './CommandPalette.hooks';\nimport { PaletteResults } from './CommandPaletteResults';\nimport { ShortcutChip } from './ShortcutChip';\nimport type { CommandPaletteProps } from './CommandPalette.types';\nimport type { CommandPaletteCopy } from '../../../copy';\nimport { scrim } from '../../../tokens/ink';\nimport { rem, sxRem } from '../../../tokens/relative';\n\n// Styled components\nconst StyledDialog = styled(Dialog)(({ theme }) => ({\n '& .MuiBackdrop-root': {\n backgroundColor: scrim(theme, 0.6),\n backdropFilter: 'blur(4px)' },\n '& .MuiDialog-paper': {\n position: 'fixed',\n top: '20%',\n margin: 0,\n maxHeight: 'none',\n background: 'transparent',\n boxShadow: 'none',\n overflow: 'visible' } }));\n\nconst PaletteContainer = styled(Paper)(({ theme }) => ({\n width: '100%',\n maxWidth: 640,\n background: `linear-gradient(135deg, ${alpha(theme.palette.background.paper, 0.98)} 0%, ${alpha(theme.palette.background.paper, 0.95)} 100%)`,\n backdropFilter: 'blur(20px)',\n WebkitBackdropFilter: 'blur(20px)',\n border: `1px solid ${alpha(theme.palette.divider, 0.18)}`,\n borderRadius: theme.shape.borderRadius * 2,\n overflow: 'hidden',\n boxShadow: theme.shadows[24] }));\n\nconst SearchContainer = styled(Box)(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(2),\n borderBottom: `1px solid ${alpha(theme.palette.divider, 0.12)}`,\n background: alpha(theme.palette.background.default, 0.4) }));\n\nconst SearchInput = styled(InputBase)(({ theme }) => ({\n flex: 1,\n fontSize: rem(theme, 18),\n fontWeight: 400,\n '& input': {\n padding: theme.spacing(0, 1),\n '&::placeholder': {\n color: theme.palette.text.secondary,\n opacity: 0.8 } } }));\n\nconst Transition = React.forwardRef<unknown, TransitionProps & { children: React.ReactElement }>(\n function Transition(props, ref) {\n return <Slide direction=\"down\" ref={ref} {...props} />;\n },\n);\n\n// Main component\nconst PaletteSearch: React.FC<{\n inputRef: React.Ref<HTMLInputElement>;\n placeholder?: string;\n value: string;\n dataTestId?: string;\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n onClose: () => void;\n}> = ({ inputRef, placeholder, value, dataTestId, onChange, onClose }) => (\n <SearchContainer>\n <SearchIcon sx={{ color: 'text.secondary', mr: 1 }} />\n <SearchInput\n ref={inputRef}\n placeholder={placeholder}\n value={value}\n onChange={onChange}\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck=\"false\"\n inputProps={{ 'data-testid': `${dataTestId}-input` }}\n />\n <IconButton size=\"small\" onClick={onClose} sx={{ ml: 1 }}>\n <CloseIcon fontSize=\"small\" />\n </IconButton>\n </SearchContainer>\n);\n\nconst PaletteFooter: React.FC<{ commandCount: number; copy: CommandPaletteCopy }> = ({\n commandCount,\n copy,\n}) => {\n const theme = useTheme();\n\n return (\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: 1,\n borderTop: `1px solid ${alpha(theme.palette.divider, 0.12)}`,\n background: alpha(theme.palette.background.default, 0.4) }}\n >\n <Box sx={{ display: 'flex', gap: 1 }}>\n <ShortcutChip\n icon={<EnterIcon sx={{ fontSize: sxRem(12) }} />}\n label={copy.execute}\n size=\"small\"\n />\n <ShortcutChip label={copy.navigate} size=\"small\" />\n <ShortcutChip label={copy.close} size=\"small\" />\n </Box>\n <Typography variant=\"caption\" color=\"text.secondary\">\n {commandCount} commands\n </Typography>\n </Box>\n );\n};\n\nexport const CommandPalette: FC<CommandPaletteProps> = ({\n copy,\n open,\n onClose,\n commands,\n placeholder = 'Type a command or search...',\n width = '640px',\n maxHeight = '400px',\n showRecent = true,\n recentCommands = [],\n onCommandExecute,\n dataTestId = 'command-palette' }) => {\n const {\n searchQuery,\n setSearchQuery,\n selectedIndex,\n setSelectedIndex,\n searchInputRef,\n listRef,\n filteredCommands,\n groupedCommands,\n executeCommand,\n recentCommandIds } = useCommandPalette({\n open,\n commands,\n showRecent,\n recentCommands,\n onCommandExecute,\n onClose });\n\n const handleSearchChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n setSearchQuery(event.target.value);\n };\n\n return (\n <StyledDialog\n open={open}\n onClose={onClose}\n TransitionComponent={Transition}\n maxWidth={false}\n fullWidth\n data-testid={dataTestId}\n >\n <DialogContent sx={{ overflow: 'visible', p: 0 }}>\n <PaletteContainer elevation={24} sx={{ width, maxHeight }}>\n <PaletteSearch\n inputRef={searchInputRef}\n placeholder={placeholder}\n value={searchQuery}\n dataTestId={dataTestId}\n onChange={handleSearchChange}\n onClose={onClose}\n />\n\n <PaletteResults\n copy={copy}\n listRef={listRef}\n dataTestId={dataTestId}\n searchQuery={searchQuery}\n showRecent={showRecent}\n commands={commands}\n recentCommandIds={recentCommandIds}\n filteredCommands={filteredCommands}\n groupedCommands={groupedCommands}\n selectedIndex={selectedIndex}\n onSelect={setSelectedIndex}\n onExecute={executeCommand}\n />\n\n <PaletteFooter copy={copy} commandCount={filteredCommands.length} />\n </PaletteContainer>\n </DialogContent>\n </StyledDialog>\n );\n};\n\n// Export default\nexport default CommandPalette;\n"],"mappings":"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","names":["Transition"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/navigation/DropdownMenu/DropdownMenu.tsx"],"sourcesContent":["import ChevronRight from '@mui/icons-material/ChevronRight';\nimport MoreVert from '@mui/icons-material/MoreVert';\nimport Box from '@mui/material/Box/index.js';\nimport Divider from '@mui/material/Divider/index.js';\nimport ListItemIcon from '@mui/material/ListItemIcon/index.js';\nimport ListItemText from '@mui/material/ListItemText/index.js';\nimport Menu from '@mui/material/Menu/index.js';\nimport MenuItem from '@mui/material/MenuItem/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { alpha, styled } from '@mui/material/styles/index.js';\nimport type { CSSObject, Theme } from '@mui/material/styles/index.js';\nimport React, { cloneElement, isValidElement,useRef, useState } from 'react';\n\nimport type { DropdownMenuItem,DropdownMenuProps } from './DropdownMenu.types';\nimport { modeInk, shadowInk, sheen } from '../../../tokens/ink';\nimport { rem } from '../../../tokens/relative';\n\n// Resolves every light/dark decision once. The inline version repeated\n// `theme.palette.mode === 'dark' ? … : …` nine times, and two of those had the\n// SAME expression on both branches (background.paper, and common.white for the\n// inset highlight) — so they read as mode-dependent while never varying.\nconst glassTokens = (theme: Theme) => {\n const isDark = theme.palette.mode === 'dark';\n\n return {\n edge: modeInk(theme),\n dropShadowAlpha: isDark ? 0.4 : 0.12,\n insetHighlightAlpha: isDark ? 0.2 : 0.8,\n sheenAlpha: isDark ? 0.1 : 0.8,\n };\n};\n\nconst glassMenuStyles = (theme: Theme): CSSObject => {\n const { edge, dropShadowAlpha, insetHighlightAlpha, sheenAlpha } = glassTokens(theme);\n\n return {\n backgroundColor: alpha(theme.palette.background.paper, 0.75),\n backdropFilter: 'blur(24px) saturate(1.8)',\n WebkitBackdropFilter: 'blur(24px) saturate(1.8)', // Safari support\n border: `1px solid ${alpha(edge, 0.12)}`,\n boxShadow: [\n `0 8px 32px ${shadowInk(theme, dropShadowAlpha)}`,\n `0 0 0 1px ${alpha(edge, 0.05)}`,\n `inset 0 1px 0 ${sheen(theme, insetHighlightAlpha)}`,\n ].join(', '),\n // Enhanced glass morphism with subtle gradient overlay\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n background: `linear-gradient(135deg, ${sheen(theme, sheenAlpha)} 0%, transparent 50%)`,\n borderRadius: 'inherit',\n pointerEvents: 'none',\n zIndex: 1,\n },\n // Ensure content appears above the overlay\n '& .MuiList-root': {\n position: 'relative',\n zIndex: 2,\n },\n };\n};\n\nconst StyledMenu = styled(Menu, {\n shouldForwardProp: (prop) => prop !== 'customVariant' && prop !== 'size',\n})<{ customVariant?: string; size?: string }>(({ theme, customVariant, size }) => ({\n '& .MuiPaper-root': {\n minWidth: 180,\n borderRadius: theme.spacing(1),\n\n ...(customVariant === 'glass' && glassMenuStyles(theme)),\n\n ...(customVariant === 'minimal' && {\n boxShadow: `0 2px 8px ${shadowInk(theme, 0.08)}`,\n border: `1px solid ${theme.palette.divider}`,\n }),\n\n ...(size === 'sm' && {\n '& .MuiMenuItem-root': {\n fontSize: rem(theme, 14),\n minHeight: 32,\n padding: theme.spacing(0.75, 2),\n },\n }),\n\n ...(size === 'lg' && {\n '& .MuiMenuItem-root': {\n fontSize: rem(theme, 18),\n minHeight: 48,\n padding: theme.spacing(1.5, 3),\n },\n }),\n },\n}));\n\nconst StyledMenuItem = styled(MenuItem, {\n shouldForwardProp: (prop) => !['color', 'showIconSpace'].includes(prop as string),\n})<{ color?: string; showIconSpace?: boolean }>(({ theme, color, showIconSpace }) => ({\n borderRadius: theme.spacing(0.5),\n margin: theme.spacing(0.5, 1),\n transition: 'all 0.2s ease',\n\n ...(showIconSpace && {\n paddingLeft: theme.spacing(5),\n }),\n\n '&:hover': {\n backgroundColor: alpha(theme.palette.primary.main, 0.08),\n },\n\n ...(color &&\n color !== 'default' && {\n color:\n theme.palette[color as 'primary' | 'secondary' | 'error' | 'warning' | 'info' | 'success']\n ?.main || theme.palette.text.primary,\n '& .MuiListItemIcon-root': {\n color:\n theme.palette[color as 'primary' | 'secondary' | 'error' | 'warning' | 'info' | 'success']\n ?.main || theme.palette.text.primary,\n },\n '&:hover': {\n backgroundColor: alpha(\n theme.palette[color as 'primary' | 'secondary' | 'error' | 'warning' | 'info' | 'success']\n ?.main || theme.palette.primary.main,\n 0.08,\n ),\n },\n }),\n}));\n\nconst MenuHeader = styled(Typography)(({ theme }) => ({\n padding: theme.spacing(1, 2),\n fontSize: rem(theme, 12),\n fontWeight: 600,\n textTransform: 'uppercase',\n color: theme.palette.text.secondary,\n letterSpacing: 0.5,\n}));\n\nconst ShortcutText = styled(Typography)(({ theme }) => ({\n fontSize: rem(theme, 12),\n color: theme.palette.text.secondary,\n marginLeft: 'auto',\n paddingLeft: theme.spacing(2),\n}));\n\nconst renderMenuItem = (\n item: DropdownMenuItem,\n handleItemClick: (item: DropdownMenuItem) => void,\n showIconSpace?: boolean,\n size?: string,\n) => {\n if (item.type === 'divider') {\n return <Divider key={item.id} sx={{ my: 0.5 }} />;\n }\n\n if (item.type === 'header') {\n return <MenuHeader key={item.id}>{item.label}</MenuHeader>;\n }\n\n if (item.component) {\n return (\n <Box key={item.id} sx={{ px: 2, py: 1 }}>\n {item.component}\n </Box>\n );\n }\n\n return renderLeafMenuItem(item, handleItemClick, showIconSpace, size);\n};\n\nconst renderLeafMenuItem = (\n item: DropdownMenuItem,\n handleItemClick: (item: DropdownMenuItem) => void,\n showIconSpace?: boolean,\n size?: string,\n) => {\n const hasIcon = !!item.icon;\n const hasChildren = item.children && item.children.length > 0;\n\n return (\n <StyledMenuItem\n key={item.id}\n disabled={item.disabled}\n onClick={!item.disabled ? () => handleItemClick(item) : undefined} // ← change\n color={item.color}\n showIconSpace={showIconSpace && !hasIcon}\n data-testid={item.dataTestId}\n >\n {hasIcon && (\n <ListItemIcon sx={{ minWidth: size === 'sm' ? 32 : 40 }}>{item.icon}</ListItemIcon>\n )}\n <ListItemText primary={item.label} />\n {item.shortcut && <ShortcutText variant=\"caption\">{item.shortcut}</ShortcutText>}\n {hasChildren && item.showChevron !== false && (\n <ChevronRight fontSize=\"small\" sx={{ ml: 1, opacity: 0.5 }} />\n )}\n </StyledMenuItem>\n );\n};\n\n// Open state and anchor are each either caller-supplied or ours. Resolving both\n// here keeps those four branches out of the render body.\nconst resolveMenuState = (\n controlledOpen: boolean | undefined,\n internalOpen: boolean,\n providedAnchorEl: DropdownMenuProps['anchorEl'],\n anchorRef: React.RefObject<HTMLElement | null>,\n) => {\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : internalOpen;\n const anchorEl = providedAnchorEl || anchorRef.current;\n\n return { isControlled, open, anchorEl, isOpen: Boolean(anchorEl) && open };\n};\n\n// Open/close state is either ours or the caller's; every handler has to respect\n// that, so they are grouped here rather than repeating the isControlled check\n// inline four times in the render.\nconst useDropdownHandlers = ({\n isControlled,\n open,\n setInternalOpen,\n onOpen,\n onClose,\n closeOnItemClick,\n anchorRef,\n}: {\n isControlled: boolean;\n open: boolean;\n setInternalOpen: (value: boolean) => void;\n onOpen?: () => void;\n onClose?: () => void;\n closeOnItemClick?: boolean;\n anchorRef: React.RefObject<HTMLElement | null>;\n}) => {\n const handleOpen = () => {\n if (!isControlled) {\n setInternalOpen(true);\n }\n onOpen?.();\n };\n\n const handleClose = () => {\n if (!isControlled) {\n setInternalOpen(false);\n }\n onClose?.();\n };\n\n const handleItemClick = (item: DropdownMenuItem) => {\n item.onClick?.();\n if (closeOnItemClick && !item.children?.length) {\n handleClose();\n }\n };\n\n const handleTriggerClick = (event: React.MouseEvent<HTMLElement>) => {\n if (isControlled) return;\n\n if (open) {\n handleClose();\n return;\n }\n\n (anchorRef as React.MutableRefObject<HTMLElement>).current = event.currentTarget;\n handleOpen();\n };\n\n return { handleClose, handleItemClick, handleTriggerClick };\n};\n\n// The trigger is either a caller-supplied element we clone to attach our click\n// handler and ref, arbitrary children we wrap, or the default kebab icon.\nconst DropdownTrigger: React.FC<{\n trigger: DropdownMenuProps['trigger'];\n anchorRef: React.RefObject<HTMLElement | null>;\n onTriggerClick: (event: React.MouseEvent<HTMLElement>) => void;\n}> = ({ trigger, anchorRef, onTriggerClick }) => {\n if (isValidElement(trigger)) {\n return cloneElement(\n trigger as React.ReactElement<{\n onClick?: (event: React.MouseEvent<HTMLElement>) => void;\n ref?: React.Ref<HTMLElement>;\n }>,\n { onClick: onTriggerClick, ref: anchorRef },\n );\n }\n\n if (trigger) {\n return (\n <Box ref={anchorRef} onClick={onTriggerClick}>\n {trigger}\n </Box>\n );\n }\n\n return (\n <Box\n ref={anchorRef}\n onClick={onTriggerClick}\n sx={{ cursor: 'pointer', display: 'inline-flex' }}\n >\n <MoreVert />\n </Box>\n );\n};\n\nexport const DropdownMenu = React.forwardRef<HTMLDivElement, DropdownMenuProps>(\n (\n {\n variant = 'default',\n items,\n trigger,\n open: controlledOpen,\n onOpen,\n onClose,\n size = 'md',\n maxHeight = 400,\n minWidth = 180,\n closeOnItemClick = true,\n showIconSpace = false,\n anchorEl: providedAnchorEl,\n ...menuProps\n },\n ref,\n ) => {\n const [internalOpen, setInternalOpen] = useState(false);\n const anchorRef = useRef<HTMLElement>(null);\n\n const { isControlled, open, anchorEl, isOpen } = resolveMenuState(\n controlledOpen,\n internalOpen,\n providedAnchorEl,\n anchorRef,\n );\n\n const { handleClose, handleItemClick, handleTriggerClick } = useDropdownHandlers({\n isControlled,\n open,\n setInternalOpen,\n onOpen,\n onClose,\n closeOnItemClick,\n anchorRef,\n });\n\n const triggerElement = (\n <DropdownTrigger trigger={trigger} anchorRef={anchorRef} onTriggerClick={handleTriggerClick} />\n );\n\n return (\n <>\n {trigger !== undefined && triggerElement}\n <StyledMenu\n ref={ref}\n anchorEl={anchorEl}\n open={isOpen}\n onClose={handleClose}\n customVariant={variant}\n size={size}\n PaperProps={{\n sx: {\n maxHeight,\n minWidth,\n overflow: 'auto',\n },\n }}\n transformOrigin={{ horizontal: 'left', vertical: 'top' }}\n anchorOrigin={{ horizontal: 'left', vertical: 'bottom' }}\n {...menuProps}\n >\n {items.map((item) => renderMenuItem(item, handleItemClick, showIconSpace, size))}\n </StyledMenu>\n </>\n );\n },\n);\n\nDropdownMenu.displayName = 'DropdownMenu';\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/layout/SettingsLayout/SettingsLayout.tsx"],"sourcesContent":["'use client';\n\nimport Box from '@mui/material/Box/index.js';\nimport type { Theme } from '@mui/material/styles/index.js';\nimport React, { useMemo, useState } from 'react';\n\nimport { withDefaults } from '../../../utils/withDefaults';\nimport { activeItemLabel, filterGroups } from './SettingsLayout.filters';\nimport { SettingsRail } from './SettingsLayout.rail';\nimport { atLeastRail } from './SettingsLayout.styles';\nimport { SettingsPanel } from './SettingsPanel';\nimport type { SettingsLayoutProps } from './SettingsLayout.types';\n\n/**\n * The props with every default already applied.\n *\n * A table through `withDefaults` rather than a `= default` per destructured\n * prop: each of those is a branch, and seven of them put the component over the\n * complexity bar before it renders anything. The single cast is what buys the\n * body non-optional values — without it every use site would restate the\n * default as a `??`, which is the same default written twice and free to drift.\n */\ntype ResolvedProps = SettingsLayoutProps &\n Required<\n Pick<\n SettingsLayoutProps,\n | 'searchPlaceholder'\n | 'defaultQuery'\n | 'emptySearchLabel'\n | 'testIdPrefix'\n | 'railBreakpoint'\n | 'navVariant'\n | 'atIndex'\n | 'backLabel'\n >\n >;\n\nconst DEFAULTS = {\n searchPlaceholder: 'Search settings',\n defaultQuery: '',\n emptySearchLabel: 'No settings match your search.',\n testIdPrefix: 'settings',\n railBreakpoint: 'md',\n navVariant: 'switcher',\n atIndex: false,\n backLabel: 'Back',\n} satisfies Partial<SettingsLayoutProps>;\n\n/** Stacked below the rail's breakpoint, two columns at and above it. */\nfunction shellSx(breakpoint: SettingsLayoutProps['railBreakpoint'], fillHeight: boolean) {\n return (theme: Theme) => ({\n display: 'flex',\n flexDirection: 'column' as const,\n alignItems: 'stretch',\n gap: 1.5,\n width: '100%',\n minWidth: 0,\n // Only ever at the wide shape. Narrow, the rail is a disclosure or the page\n // itself, and two independent scrollbars on a phone is a trap rather than a\n // convenience.\n [atLeastRail(theme, breakpoint ?? 'md')]: {\n flexDirection: 'row',\n gap: 3,\n ...(fillHeight ? { height: '100%', minHeight: 0 } : {}),\n },\n });\n}\n\n/**\n * A reusable, agnostic Facebook-style settings shell: a searchable left rail of\n * grouped categories/subcategories and a central panel that renders the selected\n * configuration screen (`children`). Navigation is data-driven via `groups`; the\n * host owns routing (pass `linkComponent` + item `href`, or handle `onSelectItem`).\n *\n * ## Two narrow-width shapes\n *\n * `navVariant=\"switcher\"` (the default) folds the rail into a disclosure above\n * the panel. `navVariant=\"drilldown\"` gives the phone shape instead: at the\n * area's index the LIST is the page, and inside a section the panel is the page\n * with a back link and a scrollable strip of sibling sections above it.\n *\n * ## Why the width decision is CSS and not JavaScript\n *\n * Every part that changes between the two shapes does it through a `display`\n * pair keyed on `railBreakpoint`. Nothing here asks a media query in JS and\n * renders one branch.\n *\n * That is not a performance preference. A layout that RENDERS one navigation and\n * not the other can offer the narrow width less than the wide one, and no test\n * or review catches it — the missing control simply is not in the tree to be\n * asserted about. With both forms always mounted, \"the narrow width reaches\n * everything the wide one does\" holds by construction, and an audit that counts\n * controls per width gets the same answer at both.\n */\nexport const SettingsLayout: React.FC<SettingsLayoutProps> = (props) => {\n const {\n title,\n groups,\n activeItemId,\n onSelectItem,\n searchPlaceholder,\n defaultQuery,\n emptySearchLabel,\n emptySearchAction,\n linkComponent,\n children,\n testIdPrefix,\n railBreakpoint,\n fillHeight = false,\n navVariant,\n atIndex,\n indexHref,\n backLabel,\n sectionChips,\n } = withDefaults(props, DEFAULTS) as ResolvedProps;\n const [query, setQuery] = useState(defaultQuery);\n const [navOpen, setNavOpen] = useState(false);\n const filteredGroups = useMemo(() => filterGroups(groups, query), [groups, query]);\n const activeLabel = useMemo(() => activeItemLabel(groups, activeItemId), [groups, activeItemId]);\n\n const drilldown = navVariant === 'drilldown';\n const ariaLabel = typeof title === 'string' ? title : 'Settings';\n\n return (\n <Box\n data-testid={testIdPrefix}\n data-nav-variant={navVariant}\n data-at-index={atIndex ? 'true' : 'false'}\n sx={shellSx(railBreakpoint, fillHeight)}\n >\n <SettingsRail\n title={title}\n activeLabel={activeLabel}\n navOpen={navOpen}\n onToggleNav={() => setNavOpen((open) => !open)}\n query={query}\n onQueryChange={setQuery}\n searchPlaceholder={searchPlaceholder}\n emptySearchLabel={emptySearchLabel}\n emptySearchAction={emptySearchAction}\n filteredGroups={filteredGroups}\n activeItemId={activeItemId}\n linkComponent={linkComponent}\n onSelectItem={onSelectItem}\n onNavigate={() => setNavOpen(false)}\n testIdPrefix={testIdPrefix}\n variant={navVariant}\n breakpoint={railBreakpoint}\n atIndex={atIndex}\n fillHeight={fillHeight}\n />\n\n <SettingsPanel\n inSection={drilldown && !atIndex}\n hideOnNarrow={drilldown && atIndex}\n breakpoint={railBreakpoint}\n indexHref={indexHref}\n sectionTitle={props.sectionTitle}\n sectionDescription={props.sectionDescription}\n backLabel={backLabel}\n ariaLabel={ariaLabel}\n sectionChips={sectionChips}\n activeItemId={activeItemId}\n linkComponent={linkComponent}\n onSelectItem={onSelectItem}\n testIdPrefix={testIdPrefix}\n fillHeight={fillHeight}\n >\n {children}\n </SettingsPanel>\n </Box>\n );\n};\n\nSettingsLayout.displayName = 'SettingsLayout';\n"],"mappings":";;;;;;;;;;;;;;;;;;AAEA,OAAO,SAAS;AAEhB,SAAgB,SAAS,gBAAgB;AAwHrC,SAME,KANF;AAvFJ,IAAM,WAAW;AAAA,EACf,mBAAmB;AAAA,EACnB,cAAc;AAAA,EACd,kBAAkB;AAAA,EAClB,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,WAAW;AACb;AAGA,SAAS,QAAQ,YAAmD,YAAqB;AACvF,SAAO,CAAC,WAAkB;AAAA,IACxB,SAAS;AAAA,IACT,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA;AAAA;AAAA;AAAA,IAIV,CAAC,YAAY,OAAO,cAAc,IAAI,CAAC,GAAG;AAAA,MACxC,eAAe;AAAA,MACf,KAAK;AAAA,MACL,GAAI,aAAa,EAAE,QAAQ,QAAQ,WAAW,EAAE,IAAI,CAAC;AAAA,IACvD;AAAA,EACF;AACF;AA4BO,IAAM,iBAAgD,CAAC,UAAU;AACtE,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,aAAa,OAAO,QAAQ;AAChC,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,YAAY;AAC/C,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAC5C,QAAM,iBAAiB,QAAQ,MAAM,aAAa,QAAQ,KAAK,GAAG,CAAC,QAAQ,KAAK,CAAC;AACjF,QAAM,cAAc,QAAQ,MAAM,gBAAgB,QAAQ,YAAY,GAAG,CAAC,QAAQ,YAAY,CAAC;AAE/F,QAAM,YAAY,eAAe;AACjC,QAAM,YAAY,OAAO,UAAU,WAAW,QAAQ;AAEtD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAa;AAAA,MACb,oBAAkB;AAAA,MAClB,iBAAe,UAAU,SAAS;AAAA,MAClC,IAAI,QAAQ,gBAAgB,UAAU;AAAA,MAEtC;AAAA;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA,YACA,aAAa,MAAM,WAAW,CAAC,SAAS,CAAC,IAAI;AAAA,YAC7C;AAAA,YACA,eAAe;AAAA,YACf;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,YAAY,MAAM,WAAW,KAAK;AAAA,YAClC;AAAA,YACA,SAAS;AAAA,YACT,YAAY;AAAA,YACZ;AAAA,YACA;AAAA;AAAA,QACF;AAAA,QAEA;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,aAAa,CAAC;AAAA,YACzB,cAAc,aAAa;AAAA,YAC3B,YAAY;AAAA,YACZ;AAAA,YACA,cAAc,MAAM;AAAA,YACpB,oBAAoB,MAAM;AAAA,YAC1B;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YAEC;AAAA;AAAA,QACH;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,eAAe,cAAc;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/typography/Text/Text.tsx"],"sourcesContent":["'use client';\n\nimport type { CSSObject, Theme } from '@mui/material/styles/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { alpha, styled } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport {\n CAPTION_FONT_SIZE,\n CAPTION_LETTER_SPACING_EM,\n CAPTION_OPACITY,\n CODE_BACKGROUND_ALPHA,\n CODE_BORDER_ALPHA,\n CODE_FONT_SIZE,\n CODE_PADDING,\n CODE_RADIUS_FACTOR,\n HEADING_DEFAULT_WEIGHT,\n HEADING_LETTER_SPACING_EM,\n TEXT_SIZES,\n TEXT_WEIGHTS,\n} from './Text.metrics';\nimport type { TextProps } from './Text.types';\nimport { resolveTestId, withoutTestIdProps } from '../../../platform/test-id';\nimport type { ColorValue } from '../../../tokens/scales';\nimport { rem } from '../../../tokens/relative';\nimport type { UiTypeStep } from '../../../tokens/theme';\n\nconst getColorFromTheme = (theme: Theme, color: ColorValue): string => {\n if (color === 'neutral') {\n return theme.palette.text.primary;\n }\n\n if (color === 'secondary') {\n return theme.palette.text.secondary;\n }\n\n // Exhaustive over ColorValue on purpose. It was a partial `Record<string, …>`\n // with a silent `|| text.primary` fallback, so `info` — accepted by the type\n // — rendered as ordinary body text. Typing the key means a colour added to\n // the vocabulary cannot reach here without a home.\n const colorMap: Record<Exclude<ColorValue, 'neutral' | 'secondary'>, string> = {\n primary: theme.palette.primary.main,\n success: theme.palette.success.main,\n warning: theme.palette.warning.main,\n info: theme.palette.info.main,\n danger: theme.palette.error.main,\n };\n\n return colorMap[color];\n};\n\n// Derived from the shared metrics, not restated: the native `Text` reads the\n// same table, so the two renderers cannot disagree on a size.\n// The table keeps the design px; the size is converted where it is read.\nconst SIZE_MAP: Readonly<Record<string, UiTypeStep | undefined>> = TEXT_SIZES;\n\nconst fontSizeFor = (theme: Theme, customSize: string | undefined): string | undefined => {\n const drawnAt = SIZE_MAP[customSize ?? 'md']?.fontSize;\n return drawnAt === undefined ? undefined : rem(theme, drawnAt);\n};\n\nconst WEIGHT_MAP: Record<string, number> = TEXT_WEIGHTS;\n\ninterface TextStyleArgs {\n theme: Theme;\n customVariant?: string;\n customColor?: ColorValue;\n customSize?: string;\n customWeight?: string;\n italic?: boolean;\n underline?: boolean;\n strikethrough?: boolean;\n}\n\n// underline and strikethrough combine into one declaration rather than one\n// winning over the other.\nconst decorationFor = (underline?: boolean, strikethrough?: boolean): string =>\n [underline && 'underline', strikethrough && 'line-through'].filter(Boolean).join(' ') || 'none';\n\nconst baseTextStyles = (theme: Theme, a: TextStyleArgs): CSSObject => ({\n color: getColorFromTheme(theme, a.customColor ?? 'neutral'),\n fontSize: fontSizeFor(theme, a.customSize),\n lineHeight: SIZE_MAP[a.customSize ?? 'md']?.lineHeight,\n fontWeight: WEIGHT_MAP[a.customWeight ?? 'normal'],\n fontStyle: a.italic ? 'italic' : 'normal',\n textDecoration: decorationFor(a.underline, a.strikethrough),\n transition: 'all 0.2s ease',\n});\n\n// Captions and code shrink relative to the body scale, but only at the default\n// size — an explicit size wins.\nconst sizeOverride = (\n theme: Theme,\n customSize: string | undefined,\n atDefault: number,\n): string | undefined =>\n (customSize ?? 'md') === 'md' ? rem(theme, atDefault) : fontSizeFor(theme, customSize);\n\nconst textVariantStyles = (theme: Theme, a: TextStyleArgs, base: CSSObject): CSSObject => {\n const weight = a.customWeight ?? 'normal';\n\n switch (a.customVariant) {\n case 'heading':\n return {\n ...base,\n fontFamily: theme.typography.h4.fontFamily,\n fontWeight: weight === 'normal' ? HEADING_DEFAULT_WEIGHT : WEIGHT_MAP[weight],\n letterSpacing: `${HEADING_LETTER_SPACING_EM}em`,\n };\n case 'caption':\n return {\n ...base,\n fontSize: sizeOverride(theme, a.customSize, CAPTION_FONT_SIZE),\n opacity: CAPTION_OPACITY,\n letterSpacing: `${CAPTION_LETTER_SPACING_EM}em`,\n };\n case 'code':\n return {\n ...base,\n fontFamily: 'Monaco, Menlo, \"Ubuntu Mono\", \"Courier New\", monospace',\n fontSize: sizeOverride(theme, a.customSize, CODE_FONT_SIZE),\n backgroundColor: alpha(theme.palette.primary.main, CODE_BACKGROUND_ALPHA),\n padding: `${CODE_PADDING.vertical}px ${CODE_PADDING.horizontal}px`,\n borderRadius: theme.shape.borderRadius * CODE_RADIUS_FACTOR,\n border: `1px solid ${alpha(theme.palette.primary.main, CODE_BORDER_ALPHA)}`,\n };\n default:\n return { ...base, fontFamily: theme.typography.body1.fontFamily };\n }\n};\n\nconst StyledText = styled(Typography, {\n shouldForwardProp: (prop) =>\n ![\n 'customVariant',\n 'customColor',\n 'customSize',\n 'customWeight',\n 'italic',\n 'underline',\n 'strikethrough',\n ].includes(prop as string),\n})<{\n customVariant?: string;\n customColor?: ColorValue;\n customSize?: string;\n customWeight?: string;\n italic?: boolean;\n underline?: boolean;\n strikethrough?: boolean;\n}>((args) => {\n const { theme } = args;\n return textVariantStyles(theme, args, baseTextStyles(theme, args));\n});\n\nexport const Text = React.forwardRef<HTMLElement, TextProps>(\n (\n {\n variant = 'body',\n color = 'neutral',\n size = 'md',\n weight = 'normal',\n as = 'span',\n italic = false,\n underline = false,\n strikethrough = false,\n children,\n ...others\n },\n ref,\n ) => {\n // `testID` and `dataTestId` are the shared contract's spellings; the DOM\n // wants `data-testid`, and must not see the other two as attributes.\n const testId = resolveTestId(others);\n const props = withoutTestIdProps(others);\n return (\n <StyledText\n ref={ref}\n data-testid={testId}\n customVariant={variant}\n customColor={color}\n customSize={size}\n customWeight={weight}\n italic={italic}\n underline={underline}\n strikethrough={strikethrough}\n {...(as && { as })}\n {...props}\n >\n {children}\n </StyledText>\n );\n },\n);\n\nText.displayName = 'Text';"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/layout/Collapsible/Collapsible.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport Collapse from '@mui/material/Collapse/index.js';\nimport { useTheme } from '@mui/material/styles/index.js';\nimport React, { useCallback,useEffect, useRef, useState } from 'react';\n\nimport {\n dimmedStyles,\n regionAttrs,\n transitionSettings,\n triggerStyles,\n} from './Collapsible.helpers';\nimport type { CollapsibleContentProps,CollapsibleProps, CollapsibleTriggerProps } from './Collapsible.types';\n\n/**\n * The smooth and spring variants animate an explicit pixel height, so the content\n * has to be measured after every render that could have changed it.\n */\nconst useMeasuredHeight = (\n open: boolean,\n maxHeight: number | undefined,\n children: React.ReactNode,\n) => {\n const contentRef = useRef<HTMLDivElement>(null);\n const [height, setHeight] = useState<number | 'auto'>('auto');\n\n const measureHeight = useCallback(() => {\n if (contentRef.current) {\n const scrollHeight = contentRef.current.scrollHeight;\n // Cap at maxHeight if provided\n setHeight(maxHeight ? Math.min(scrollHeight, maxHeight) : scrollHeight);\n }\n }, [maxHeight]);\n\n useEffect(() => {\n if (!open) {\n setHeight(0);\n } else if (contentRef.current) {\n measureHeight();\n }\n }, [open, measureHeight, children]);\n\n return { contentRef, height };\n};\n\ntype VariantProps = Omit<CollapsibleProps, 'variant' | 'onToggle'> & {\n duration: number;\n disabled: boolean;\n keepMounted: boolean;\n transition: { duration: number; easing: string };\n};\n\n// Use MUI's built-in Collapse for the default variant.\nconst DefaultCollapsible: React.FC<VariantProps> = ({\n children,\n open,\n duration,\n disabled,\n keepMounted,\n maxHeight,\n sx,\n className,\n dataTestId,\n transition: _transition,\n easing: _easing,\n ...otherProps\n}) => (\n <Collapse\n in={open && !disabled}\n timeout={disabled ? 0 : duration}\n sx={{\n ...dimmedStyles(disabled),\n ...(maxHeight && { maxHeight, overflow: 'hidden' }),\n ...sx,\n }}\n className={className}\n unmountOnExit={!keepMounted}\n {...regionAttrs({ open, disabled, dataTestId })}\n {...otherProps}\n >\n <Box>{children}</Box>\n </Collapse>\n);\n\nconst AnimatedCollapsible: React.FC<VariantProps> = ({\n children,\n open,\n disabled,\n keepMounted,\n maxHeight,\n transition,\n sx,\n className,\n dataTestId,\n duration: _duration,\n easing: _easing,\n ...otherProps\n}) => {\n const { contentRef, height } = useMeasuredHeight(open, maxHeight, children);\n\n return (\n <Box\n component=\"div\"\n sx={{\n overflow: 'hidden',\n height: open && !disabled ? height : 0,\n transition: disabled ? 'none' : `height ${transition.duration}ms ${transition.easing}`,\n willChange: disabled ? 'auto' : 'height',\n ...dimmedStyles(disabled),\n ...sx,\n }}\n className={className}\n {...regionAttrs({ open, disabled, dataTestId })}\n {...otherProps}\n >\n <Box ref={contentRef}>{(keepMounted || (open && !disabled)) && children}</Box>\n </Box>\n );\n};\n\nexport const Collapsible: React.FC<CollapsibleProps> = ({\n variant = 'default',\n duration = 300,\n easing,\n onToggle,\n disabled = false,\n keepMounted = false,\n ...rest\n}) => {\n const theme = useTheme();\n const { open } = rest;\n\n // Trigger onToggle callback when open state changes\n useEffect(() => {\n if (onToggle && !disabled) {\n onToggle(open);\n }\n }, [open, onToggle, disabled]);\n\n const variantProps: VariantProps = {\n ...rest,\n duration,\n easing,\n disabled,\n keepMounted,\n transition: transitionSettings(theme, variant, duration, easing),\n };\n\n return variant === 'default' ? (\n <DefaultCollapsible {...variantProps} />\n ) : (\n <AnimatedCollapsible {...variantProps} />\n );\n};\n\nexport const CollapsibleTrigger: React.FC<CollapsibleTriggerProps> = ({\n children,\n onClick,\n disabled = false,\n expanded = false,\n className,\n dataTestId,\n ...otherProps\n}) => {\n const theme = useTheme();\n\n return (\n <Box\n component=\"button\"\n onClick={disabled ? undefined : onClick}\n disabled={disabled}\n className={className}\n data-testid={dataTestId}\n aria-expanded={expanded}\n aria-disabled={disabled}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n data-state={expanded ? 'open' : 'closed'}\n sx={triggerStyles(theme, { disabled, expanded })}\n {...otherProps}\n >\n {children}\n </Box>\n );\n};\n\nexport const CollapsibleContent: React.FC<CollapsibleContentProps> = ({\n children,\n className,\n ...otherProps\n}) => {\n const theme = useTheme();\n\n return (\n <Box\n className={className}\n sx={{\n padding: theme.spacing(2),\n }}\n {...otherProps}\n >\n {children}\n </Box>\n );\n};\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/navigation/Pagination/Pagination.tsx"],"sourcesContent":["import FirstPage from '@mui/icons-material/FirstPage';\nimport LastPage from '@mui/icons-material/LastPage';\nimport NavigateBefore from '@mui/icons-material/NavigateBefore';\nimport NavigateNext from '@mui/icons-material/NavigateNext';\nimport type { PaginationRenderItemParams } from '@mui/material/Pagination/index.js';\nimport Box from '@mui/material/Box/index.js';\nimport MuiPagination from '@mui/material/Pagination/index.js';\nimport PaginationItem from '@mui/material/PaginationItem/index.js';\nimport { styled } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport type { ResolvedPaginationProps } from './Pagination.helpers';\nimport { makeTestId, muiSizeFor, resolvePaginationProps } from './Pagination.helpers';\nimport { paginationStyles } from './Pagination.styles';\nimport type { PaginationProps } from './Pagination.types';\nimport { ItemsPerPageSelect, PageInfo } from './PaginationParts';\n\nconst StyledPagination = styled(MuiPagination, {\n shouldForwardProp: (prop) => !['customVariant', 'customSize'].includes(prop as string) })<{ customVariant?: string; customSize?: string }>(({ theme, customVariant, customSize }) => ({\n ...paginationStyles({ theme, customVariant, customSize }) }));\n\nconst PaginationContainer = styled(Box)(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexWrap: 'wrap',\n gap: theme.spacing(1) }));\n\n// Arrow items get a short suffix, pages carry their number. This was two\n// parallel switch statements that differed only in whether the prefix came from\n// dataTestId or the literal 'pagination'.\nconst ITEM_TEST_SUFFIX: Record<string, string> = {\n first: 'first',\n last: 'last',\n previous: 'prev',\n next: 'next' };\n\nconst paginationItemTestId = (\n base: string | undefined,\n item: PaginationRenderItemParams,\n): string | undefined => {\n const prefix = base ?? 'pagination';\n\n if (item.type === 'page') return `${prefix}-page-${item.page}`;\n\n const suffix = ITEM_TEST_SUFFIX[item.type];\n return suffix ? `${prefix}-${suffix}` : undefined;\n};\n\n// A dots-variant page renders as a bare dot; everything else uses MUI's item\n// with our own arrow icons.\nconst renderPaginationItem = ({\n item,\n variant,\n size: _size,\n dataTestId,\n icons }: {\n item: PaginationRenderItemParams;\n variant: string;\n size: string;\n dataTestId?: string;\n icons: {\n firstIcon?: React.ReactNode;\n lastIcon?: React.ReactNode;\n previousIcon?: React.ReactNode;\n nextIcon?: React.ReactNode;\n };\n}) => {\n const { firstIcon, lastIcon, previousIcon, nextIcon } = icons;\n\n const itemTestId = paginationItemTestId(dataTestId, item);\n\n if (variant === 'dots') {\n if (item.type === 'page') {\n return (\n <PaginationItem\n {...item}\n data-testid={itemTestId}\n sx={{\n '&.MuiPaginationItem-page': {\n fontSize: 0,\n overflow: 'hidden',\n textIndent: '-9999px' } }}\n />\n );\n }\n return null; // Hide navigation buttons for dots\n }\n\n // Map custom icons to components\n const iconMap: Record<string, React.ReactElement> = {\n first: firstIcon as React.ReactElement,\n last: lastIcon as React.ReactElement,\n previous: previousIcon as React.ReactElement,\n next: nextIcon as React.ReactElement };\n\n return (\n <PaginationItem\n {...item}\n data-testid={itemTestId}\n components={{\n first: () => iconMap.first || <FirstPage />,\n last: () => iconMap.last || <LastPage />,\n previous: () => iconMap.previous || <NavigateBefore />,\n next: () => iconMap.next || <NavigateNext /> }}\n />\n );\n \n};\n\n// The control itself. Local because StyledPagination cannot cross a module\n// boundary (TS2742).\nconst PaginationControl: React.FC<\n ResolvedPaginationProps & {\n innerRef: React.Ref<HTMLElement>;\n renderItem: (item: PaginationRenderItemParams) => React.ReactNode;\n rest: Record<string, unknown>;\n }\n> = ({ innerRef, renderItem, rest, ...p }) => {\n // The dots variant is a position indicator, not a control: no page numbers\n // around the current one, and no step buttons.\n const isDots = p.variant === 'dots';\n\n return (\n <StyledPagination\n ref={innerRef}\n page={p.page}\n count={p.count}\n onChange={p.onChange}\n customVariant={p.variant}\n customSize={p.size}\n variant=\"outlined\"\n size={muiSizeFor(p.size)}\n boundaryCount={isDots ? 0 : p.boundaryCount}\n siblingCount={isDots ? 0 : p.siblingCount}\n hideNextButton={p.hideNextButton || isDots}\n hidePrevButton={p.hidePrevButton || isDots}\n showFirstButton={p.showFirstButton && !isDots}\n showLastButton={p.showLastButton && !isDots}\n disabled={p.disabled}\n // MUI spells the unaccented pagination colour `standard`; ours is\n // `neutral`, translated here rather than carried as a second name.\n color={p.color === undefined ? undefined : p.color === 'neutral' ? 'standard' : p.color}\n renderItem={renderItem}\n {...rest}\n />\n );\n};\n\nexport const Pagination = React.forwardRef<HTMLElement, PaginationProps>(\n (componentProps, ref) => {\n const resolved = resolvePaginationProps(componentProps);\n const {\n pageSizeLabel,\n variant,\n size,\n page,\n count,\n onChange: _onChange,\n boundaryCount: _boundaryCount,\n siblingCount: _siblingCount,\n hideNextButton: _hideNextButton,\n hidePrevButton: _hidePrevButton,\n showFirstButton: _showFirstButton,\n showLastButton: _showLastButton,\n firstIcon,\n lastIcon,\n previousIcon,\n nextIcon,\n disabled,\n color: _color,\n showPageInfo,\n pageInfoFormat,\n showItemsPerPage,\n itemsPerPageOptions,\n itemsPerPage,\n onItemsPerPageChange,\n className,\n dataTestId,\n ...props\n } = resolved;\n\n const testId = makeTestId(dataTestId);\n\n const renderItem = (item: PaginationRenderItemParams) =>\n renderPaginationItem({\n item,\n variant,\n size,\n dataTestId,\n icons: { firstIcon, lastIcon, previousIcon, nextIcon } });\n\n return (\n <PaginationContainer className={className} data-testid={dataTestId || 'pagination'}>\n {showItemsPerPage && onItemsPerPageChange && (\n <ItemsPerPageSelect\n pageSizeLabel={pageSizeLabel}\n value={itemsPerPage}\n options={itemsPerPageOptions}\n size={size}\n disabled={disabled}\n testId={testId('items-per-page')}\n onChange={onItemsPerPageChange}\n />\n )}\n\n <PaginationControl\n {...resolved}\n innerRef={ref}\n renderItem={renderItem}\n rest={props as unknown as Record<string, unknown>}\n />\n\n {showPageInfo && (\n <PageInfo size={size} testId={testId('info')}>\n {pageInfoFormat(page, count)}\n </PageInfo>\n )}\n </PaginationContainer>\n );\n },\n);\n\nPagination.displayName = 'Pagination';\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/layout/Sidebar/Sidebar.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport { alpha, useTheme } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport type {\n SidebarContentProps,\n SidebarFooterProps,\n SidebarHeaderProps,\n SidebarProps,\n} from './Sidebar.types';\nimport { shadowInk } from '../../../tokens/ink';\n\nexport const Sidebar: React.FC<SidebarProps> = ({\n children,\n variant = 'fixed',\n open = true,\n onToggle: _onToggle,\n width = 280,\n collapsedWidth = 64,\n position = 'left',\n className,\n dataTestId = 'sidebar',\n ...rest\n}) => {\n // Prevent unused variable warning for onToggle\n void _onToggle;\n const theme = useTheme();\n\n const isCollapsed = variant === 'collapsible' && !open;\n const currentWidth = isCollapsed ? collapsedWidth : width;\n\n const getVariantStyles = () => {\n switch (variant) {\n case 'floating':\n return {\n position: 'fixed' as const,\n top: theme.spacing(2),\n bottom: theme.spacing(2),\n [position]: theme.spacing(2),\n borderRadius: theme.spacing(2),\n boxShadow: theme.shadows[8],\n zIndex: theme.zIndex.drawer,\n };\n case 'glass':\n return {\n backgroundColor: alpha(theme.palette.background.paper, 0.1),\n backdropFilter: 'blur(20px)',\n border: `1px solid ${alpha(theme.palette.primary.main, 0.2)}`,\n boxShadow: `0 8px 32px ${shadowInk(theme, 0.1)}`,\n };\n case 'collapsible':\n return {\n transition: theme.transitions.create('width', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n };\n default:\n return {\n backgroundColor: theme.palette.background.paper,\n borderRight: `1px solid ${theme.palette.divider}`,\n };\n }\n };\n\n return (\n <Box\n className={className}\n data-testid={dataTestId}\n {...rest}\n sx={{\n width: currentWidth,\n height: '100vh',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n ...getVariantStyles(),\n }}\n >\n {children}\n </Box>\n );\n};\n\nexport const SidebarHeader: React.FC<SidebarHeaderProps> = ({ children, dataTestId = 'sidebar-header', ...rest }) => {\n const theme = useTheme();\n\n return (\n <Box\n data-testid={dataTestId}\n {...rest}\n sx={{\n padding: theme.spacing(2),\n borderBottom: `1px solid ${theme.palette.divider}`,\n flexShrink: 0,\n overflow: 'hidden',\n }}\n >\n {children}\n </Box>\n );\n};\n\nexport const SidebarContent: React.FC<SidebarContentProps> = ({ children, dataTestId = 'sidebar-content', ...rest }) => (\n <Box\n data-testid={dataTestId}\n {...rest}\n sx={{\n flex: 1,\n overflow: 'auto',\n }}\n >\n {children}\n </Box>\n );\n\nexport const SidebarFooter: React.FC<SidebarFooterProps> = ({ children, dataTestId = 'sidebar-footer', ...rest }) => {\n const theme = useTheme();\n\n return (\n <Box\n data-testid={dataTestId}\n {...rest}\n sx={{\n padding: theme.spacing(2),\n borderTop: `1px solid ${theme.palette.divider}`,\n flexShrink: 0,\n }}\n >\n {children}\n </Box>\n );\n};\n"],"mappings":"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","names":[]}