@12-apps/ui 6.36.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 (1103) hide show
  1. package/dist/_internal/components/data-display/AsyncStateContainer/AsyncStateContainer.js +4 -4
  2. package/dist/_internal/components/data-display/CardKit/CardKebab.js +4 -4
  3. package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +3 -3
  4. package/dist/_internal/components/data-display/CardKit/use-row-confirm.js +3 -3
  5. package/dist/_internal/components/data-display/DataViews/DataViewsBoard.js +2 -2
  6. package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +58 -58
  7. package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +73 -74
  8. package/dist/_internal/components/data-display/DataViews/DeleteViewDialog.js +6 -7
  9. package/dist/_internal/components/data-display/DataViews/ManageViewsDialog.js +7 -8
  10. package/dist/_internal/components/data-display/DataViews/SaveViewModal.js +13 -14
  11. package/dist/_internal/components/data-display/DataViews/base-card.js +5 -6
  12. package/dist/_internal/components/data-display/DataViews/base-list-card-geometry.js +9 -9
  13. package/dist/_internal/components/data-display/DataViews/base-list-card-gutters.js +2 -2
  14. package/dist/_internal/components/data-display/DataViews/base-list-card-slots.js +8 -8
  15. package/dist/_internal/components/data-display/DataViews/base-list-card.js +14 -15
  16. package/dist/_internal/components/data-display/DataViews/data-views-category-pill.js +18 -18
  17. package/dist/_internal/components/data-display/DataViews/data-views-columns-tab.js +2 -2
  18. package/dist/_internal/components/data-display/DataViews/data-views-columns.js +5 -5
  19. package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +11 -11
  20. package/dist/_internal/components/data-display/DataViews/data-views-display-tabs.js +6 -6
  21. package/dist/_internal/components/data-display/DataViews/data-views-empty.js +4 -4
  22. package/dist/_internal/components/data-display/DataViews/data-views-export.js +4 -4
  23. package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +24 -24
  24. package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +13 -13
  25. package/dist/_internal/components/data-display/DataViews/data-views-grid-helpers.js +4 -4
  26. package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +55 -55
  27. package/dist/_internal/components/data-display/DataViews/data-views-header-row.js +2 -2
  28. package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +26 -26
  29. package/dist/_internal/components/data-display/DataViews/data-views-layout-context.js +4 -4
  30. package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +11 -11
  31. package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +14 -14
  32. package/dist/_internal/components/data-display/DataViews/data-views-pagination.js +4 -4
  33. package/dist/_internal/components/data-display/DataViews/data-views-range-pill.js +2 -2
  34. package/dist/_internal/components/data-display/DataViews/data-views-scope-tabs.js +5 -5
  35. package/dist/_internal/components/data-display/DataViews/data-views-select-all-strip.js +4 -4
  36. package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +23 -23
  37. package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +23 -24
  38. package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +22 -22
  39. package/dist/_internal/components/data-display/DataViews/data-views-view-nav.js +4 -4
  40. package/dist/_internal/components/data-display/DataViews/list-card-rails.js +5 -5
  41. package/dist/_internal/components/data-display/DataViews/save-view-preview.js +2 -2
  42. package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +6 -6
  43. package/dist/_internal/components/data-display/DescriptionItem/DescriptionItem.js +2 -2
  44. package/dist/_internal/components/data-display/FleetMap/FleetBody.js +4 -4
  45. package/dist/_internal/components/data-display/FleetMap/FleetMap.js +6 -6
  46. package/dist/_internal/components/data-display/FleetMap/FleetRoster.js +3 -3
  47. package/dist/_internal/components/data-display/LazyImage/LazyImage.js +3 -3
  48. package/dist/_internal/components/data-display/LoadingState/LoadingState.js +3 -3
  49. package/dist/_internal/components/data-display/StatCard/StatCard.js +3 -3
  50. package/dist/_internal/components/data-display/index.js +12 -12
  51. package/dist/_internal/components/feedback/ConfirmAction/ConfirmButton.js +3 -3
  52. package/dist/_internal/components/feedback/Dialog/Dialog.js +3 -3
  53. package/dist/_internal/components/feedback/Dialog/Dialog.styles.js +2 -2
  54. package/dist/_internal/components/feedback/Modal/Modal.js +3 -2
  55. package/dist/_internal/components/feedback/Modal/Modal.styles.js +2 -1
  56. package/dist/_internal/components/feedback/NotificationStatusNotice/NotificationStatusNotice.js +3 -3
  57. package/dist/_internal/components/feedback/Sonner/Sonner.js +2 -2
  58. package/dist/_internal/components/feedback/Sonner/SonnerToast.js +1 -1
  59. package/dist/_internal/components/feedback/StackedModal/StackedModal.js +4 -3
  60. package/dist/_internal/components/feedback/StackedModal/StackedModal.parts.js +3 -2
  61. package/dist/_internal/components/feedback/StackedModal/StackedModal.styles.js +2 -1
  62. package/dist/_internal/components/feedback/Toast/Toast.js +2 -1
  63. package/dist/_internal/components/feedback/TutorialOverlay/TutorialOverlay.geometry.js +1 -1
  64. package/dist/_internal/components/feedback/TutorialOverlay/TutorialOverlay.hooks.js +3 -2
  65. package/dist/_internal/components/feedback/TutorialOverlay/TutorialOverlay.js +5 -4
  66. package/dist/_internal/components/feedback/TutorialOverlay/TutorialStepBody.js +2 -1
  67. package/dist/_internal/components/feedback/index.js +18 -19
  68. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.js +6 -6
  69. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocompleteField.js +4 -4
  70. package/dist/_internal/components/form/AddressAutocomplete/AddressFallbackField.js +3 -2
  71. package/dist/_internal/components/form/AddressAutocomplete/AddressInputField.js +3 -2
  72. package/dist/_internal/components/form/AddressAutocomplete/AddressSuggestionsPaper.js +2 -1
  73. package/dist/_internal/components/form/AddressAutocomplete/AddressTextField.js +2 -1
  74. package/dist/_internal/components/form/Autocomplete/Autocomplete.js +3 -2
  75. package/dist/_internal/components/form/Autocomplete/Autocomplete.parts.js +2 -1
  76. package/dist/_internal/components/form/Button/Button.js +2 -2
  77. package/dist/_internal/components/form/Button/Button.styles.js +1 -1
  78. package/dist/_internal/components/form/CategorySelect/CategoryPanel.js +6 -6
  79. package/dist/_internal/components/form/CategorySelect/CategoryPanelFoot.js +2 -2
  80. package/dist/_internal/components/form/CategorySelect/CategoryPanelHead.js +2 -2
  81. package/dist/_internal/components/form/CategorySelect/CategoryPanelList.js +3 -3
  82. package/dist/_internal/components/form/CategorySelect/CategoryPanelSurface.js +2 -1
  83. package/dist/_internal/components/form/CategorySelect/CategoryRows.js +2 -2
  84. package/dist/_internal/components/form/CategorySelect/CategorySelect.js +10 -10
  85. package/dist/_internal/components/form/CategorySelect/CategorySelect.styles.js +1 -1
  86. package/dist/_internal/components/form/CategorySelect/CategoryTrigger.js +2 -2
  87. package/dist/_internal/components/form/CepField/CepField.js +4 -4
  88. package/dist/_internal/components/form/Checkbox/Checkbox.js +1 -1
  89. package/dist/_internal/components/form/CodeEditor/CodeEditor.helpers.js +1 -1
  90. package/dist/_internal/components/form/CodeEditor/CodeEditor.js +2 -2
  91. package/dist/_internal/components/form/Command/Command.hooks.js +1 -1
  92. package/dist/_internal/components/form/Command/Command.js +4 -4
  93. package/dist/_internal/components/form/Command/Command.parts.js +2 -1
  94. package/dist/_internal/components/form/Command/Command.styles.js +1 -1
  95. package/dist/_internal/components/form/CreatableSelect/CreatableSelect.js +2 -2
  96. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.js +2 -2
  97. package/dist/_internal/components/form/DateRangePicker/DateRangePickerQuickList.js +1 -1
  98. package/dist/_internal/components/form/Form/Form.js +1 -1
  99. package/dist/_internal/components/form/HeaderActions/HeaderActions.js +1 -1
  100. package/dist/_internal/components/form/Input/Input.js +3 -2
  101. package/dist/_internal/components/form/Input/Input.styles.js +2 -1
  102. package/dist/_internal/components/form/InputOTP/InputOTP.js +2 -2
  103. package/dist/_internal/components/form/InputOTP/InputOTP.styles.js +1 -1
  104. package/dist/_internal/components/form/Label/Label.js +2 -2
  105. package/dist/_internal/components/form/Label/Label.styles.js +1 -1
  106. package/dist/_internal/components/form/Menubar/Menubar.item.js +2 -2
  107. package/dist/_internal/components/form/Menubar/Menubar.js +4 -4
  108. package/dist/_internal/components/form/Menubar/Menubar.styles.js +1 -1
  109. package/dist/_internal/components/form/Menubar/Menubar.toolbar.js +3 -3
  110. package/dist/_internal/components/form/PasswordStrength/PasswordStrength.js +1 -1
  111. package/dist/_internal/components/form/PhoneInput/PhoneInput.js +1 -1
  112. package/dist/_internal/components/form/RadioGroup/RadioGroup.animations.js +2 -1
  113. package/dist/_internal/components/form/RadioGroup/RadioGroup.js +4 -4
  114. package/dist/_internal/components/form/RadioGroup/RadioGroup.styles.js +2 -2
  115. package/dist/_internal/components/form/RadioGroup/RadioGroup.variants.js +3 -3
  116. package/dist/_internal/components/form/RichTextEditor/RichTextEditor.js +2 -2
  117. package/dist/_internal/components/form/RichTextEditor/RichTextEditorToolbar.js +2 -1
  118. package/dist/_internal/components/form/SearchPalette/SearchPalette.js +2 -2
  119. package/dist/_internal/components/form/SearchPalette/SearchPalette.parts.js +1 -1
  120. package/dist/_internal/components/form/Select/Select.js +2 -1
  121. package/dist/_internal/components/form/Slider/Slider.animations.js +2 -1
  122. package/dist/_internal/components/form/Slider/Slider.js +3 -3
  123. package/dist/_internal/components/form/Slider/Slider.styles.js +2 -2
  124. package/dist/_internal/components/form/Switch/Switch.animations.js +2 -1
  125. package/dist/_internal/components/form/Switch/Switch.js +4 -4
  126. package/dist/_internal/components/form/Switch/Switch.parts.js +3 -3
  127. package/dist/_internal/components/form/Switch/Switch.styles.js +2 -2
  128. package/dist/_internal/components/form/Textarea/Textarea.js +2 -2
  129. package/dist/_internal/components/form/Textarea/Textarea.styles.js +2 -1
  130. package/dist/_internal/components/form/Textarea/TextareaRichEditor.js +12 -11
  131. package/dist/_internal/components/form/Textarea/TextareaRichEditor.js.map +1 -1
  132. package/dist/_internal/components/form/Toggle/Toggle.js +2 -2
  133. package/dist/_internal/components/form/Toggle/Toggle.styles.js +1 -1
  134. package/dist/_internal/components/form/ToggleGroup/ToggleGroup.js +1 -1
  135. package/dist/_internal/components/form/UploadButton/UploadButton.js +2 -2
  136. package/dist/_internal/components/form/UploadButton/UploadButton.parts.js +1 -1
  137. package/dist/_internal/components/form/index.js +56 -56
  138. package/dist/_internal/components/form/total-form/Fields/CategoryField.js +11 -11
  139. package/dist/_internal/components/form/total-form/Fields/CepField.js +5 -5
  140. package/dist/_internal/components/form/total-form/Fields/SelectField.js +3 -3
  141. package/dist/_internal/components/form/total-form/Fields/TextField.js +4 -4
  142. package/dist/_internal/components/form/total-form/Fields/ToggleField.js +3 -3
  143. package/dist/_internal/components/form/total-form/Fields/index.js +21 -21
  144. package/dist/_internal/components/form/total-form/FormContainer.js +2 -2
  145. package/dist/_internal/components/form/total-form/FormErrorSnackbar.js +3 -2
  146. package/dist/_internal/components/form/total-form/SubmitButton.js +3 -3
  147. package/dist/_internal/components/index.js +142 -143
  148. package/dist/_internal/components/layout/Accordion/Accordion.js +3 -2
  149. package/dist/_internal/components/layout/Accordion/Accordion.styles.js +2 -1
  150. package/dist/_internal/components/layout/Box/Box.js +1 -1
  151. package/dist/_internal/components/layout/Card/Card.js +3 -3
  152. package/dist/_internal/components/layout/Card/Card.styles.js +2 -2
  153. package/dist/_internal/components/layout/Collapsible/Collapsible.helpers.js +2 -1
  154. package/dist/_internal/components/layout/Collapsible/Collapsible.js +3 -2
  155. package/dist/_internal/components/layout/ContentToolbar/ColumnsMenu.js +1 -1
  156. package/dist/_internal/components/layout/ContentToolbar/ContentToolbar.js +1 -1
  157. package/dist/_internal/components/layout/ContentToolbar/FilterTrigger.js +1 -1
  158. package/dist/_internal/components/layout/ContentToolbar/MultiSelectDropdown.js +1 -1
  159. package/dist/_internal/components/layout/ContentToolbar/SavedViewsMenu.js +1 -1
  160. package/dist/_internal/components/layout/ContentToolbar/SortByDropdown.js +1 -1
  161. package/dist/_internal/components/layout/ContentToolbar/ViewSelector.js +1 -1
  162. package/dist/_internal/components/layout/Dashboard/Dashboard.js +3 -3
  163. package/dist/_internal/components/layout/Dashboard/DashboardParts.js +2 -2
  164. package/dist/_internal/components/layout/Drawer/Drawer.js +2 -1
  165. package/dist/_internal/components/layout/ScrollArea/ScrollArea.js +5 -4
  166. package/dist/_internal/components/layout/ScrollArea/ScrollArea.styles.js +6 -3
  167. package/dist/_internal/components/layout/ScrollArea/ScrollAreaContent.js +2 -1
  168. package/dist/_internal/components/layout/ScrollArea/ScrollViewport.js +3 -2
  169. package/dist/_internal/components/layout/Separator/Separator.js +4 -2
  170. package/dist/_internal/components/layout/Separator/Separator.styles.js +3 -1
  171. package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.items.js +3 -3
  172. package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.js +8 -8
  173. package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.rail.js +4 -4
  174. package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.styles.js +6 -5
  175. package/dist/_internal/components/layout/SettingsLayout/SettingsPanel.js +5 -5
  176. package/dist/_internal/components/layout/SettingsLayout/SettingsSectionChips.js +3 -3
  177. package/dist/_internal/components/layout/SettingsLayout/SettingsSectionHeader.js +2 -2
  178. package/dist/_internal/components/layout/SettingsLayout/SettingsStatusMarker.js +2 -2
  179. package/dist/_internal/components/layout/Sidebar/Sidebar.js +2 -1
  180. package/dist/_internal/components/layout/Skeleton/Skeleton.js +3 -2
  181. package/dist/_internal/components/layout/Skeleton/Skeleton.styles.js +6 -3
  182. package/dist/_internal/components/layout/Spacer/Spacer.js +2 -1
  183. package/dist/_internal/components/layout/Stack/Stack.js +2 -2
  184. package/dist/_internal/components/layout/TableFilter/TableFilter.js +1 -1
  185. package/dist/_internal/components/layout/index.js +28 -29
  186. package/dist/_internal/components/navigation/AppHeader/AppHeader.brand.js +1 -1
  187. package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +5 -6
  188. package/dist/_internal/components/navigation/AppHeader/AppHeader.identity.js +2 -2
  189. package/dist/_internal/components/navigation/AppHeader/AppHeader.js +1 -1
  190. package/dist/_internal/components/navigation/Breadcrumbs/BreadcrumbEntry.js +2 -2
  191. package/dist/_internal/components/navigation/Breadcrumbs/Breadcrumbs.js +3 -3
  192. package/dist/_internal/components/navigation/Breadcrumbs/Breadcrumbs.styles.js +1 -1
  193. package/dist/_internal/components/navigation/CommandPalette/CommandPalette.js +3 -3
  194. package/dist/_internal/components/navigation/CommandPalette/CommandPaletteResults.js +2 -2
  195. package/dist/_internal/components/navigation/CommandPalette/ShortcutChip.js +1 -1
  196. package/dist/_internal/components/navigation/ContextMenu/ContextMenu.js +1 -1
  197. package/dist/_internal/components/navigation/DropdownMenu/DropdownMenu.js +1 -1
  198. package/dist/_internal/components/navigation/NavigationMenu/NavigationMegaSection.js +4 -4
  199. package/dist/_internal/components/navigation/NavigationMenu/NavigationMenu.js +6 -6
  200. package/dist/_internal/components/navigation/NavigationMenu/NavigationMenu.shell.js +2 -2
  201. package/dist/_internal/components/navigation/NavigationMenu/NavigationMenu.styles.js +1 -1
  202. package/dist/_internal/components/navigation/NavigationMenu/NavigationMenuItem.js +2 -2
  203. package/dist/_internal/components/navigation/NavigationMenu/NavigationStandardBody.js +4 -4
  204. package/dist/_internal/components/navigation/Pagination/Pagination.js +3 -3
  205. package/dist/_internal/components/navigation/Pagination/Pagination.styles.js +1 -1
  206. package/dist/_internal/components/navigation/Pagination/PaginationParts.js +2 -1
  207. package/dist/_internal/components/navigation/Tabs/Tabs.js +10 -3
  208. package/dist/_internal/components/navigation/Tabs/Tabs.styles.js +8 -1
  209. package/dist/_internal/components/navigation/Tabs/TabsPanel.js +2 -1
  210. package/dist/_internal/components/navigation/index.js +28 -29
  211. package/dist/_internal/components/typography/Blockquote/Blockquote.js +1 -1
  212. package/dist/_internal/components/typography/Code/Code.js +1 -1
  213. package/dist/_internal/components/typography/Text/Text.js +1 -1
  214. package/dist/_internal/components/typography/index.js +3 -3
  215. package/dist/_internal/components/utility/AnimatedIcon/AnimatedIcon.animations.js +2 -1
  216. package/dist/_internal/components/utility/AnimatedIcon/AnimatedIcon.js +3 -3
  217. package/dist/_internal/components/utility/AnimatedIcon/AnimatedIcon.styles.js +2 -2
  218. package/dist/_internal/components/utility/AspectRatio/AspectRatio.js +2 -1
  219. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.js +3 -3
  220. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.parts.js +1 -1
  221. package/dist/_internal/components/utility/WorkflowStep/WorkflowStepRow.js +2 -2
  222. package/dist/_internal/components/utility/index.js +7 -7
  223. package/dist/_internal/social-login-button/social-login-button.js +8 -9
  224. package/dist/_internal/tokens/shadow.js +19 -8
  225. package/dist/_internal/tokens/shadow.js.map +1 -1
  226. package/dist/_internal/user-avatar/user-avatar.js +6 -7
  227. package/dist/{chunk-BLJDCMFU.js → chunk-2ARVNCVU.js} +7 -7
  228. package/dist/chunk-2ARVNCVU.js.map +1 -0
  229. package/dist/{chunk-KH25WUSX.js → chunk-2EAAWOZ2.js} +4 -4
  230. package/dist/chunk-2EAAWOZ2.js.map +1 -0
  231. package/dist/{chunk-PNLM35GU.js → chunk-2JNHWKQK.js} +5 -5
  232. package/dist/{chunk-PWF32ILG.js → chunk-2OYFTSG4.js} +4 -4
  233. package/dist/{chunk-CRZXSZ5O.js → chunk-2S752BIJ.js} +2 -2
  234. package/dist/{chunk-IYTBTK2M.js → chunk-2WU52FLP.js} +19 -30
  235. package/dist/chunk-2WU52FLP.js.map +1 -0
  236. package/dist/{chunk-IWOVENC3.js → chunk-2XX45PC5.js} +2 -2
  237. package/dist/{chunk-RSQMPCCR.js → chunk-34643ATX.js} +10 -4
  238. package/dist/chunk-34643ATX.js.map +1 -0
  239. package/dist/{chunk-ZW5K4XCQ.js → chunk-34BZXJGT.js} +6 -6
  240. package/dist/{chunk-6GRZ77IS.js → chunk-3AIRFAI3.js} +13 -12
  241. package/dist/chunk-3AIRFAI3.js.map +1 -0
  242. package/dist/{chunk-KCAW6HRO.js → chunk-3AOQBR7N.js} +2 -2
  243. package/dist/{chunk-I62ALI7F.js → chunk-3FNXOCBD.js} +25 -13
  244. package/dist/chunk-3FNXOCBD.js.map +1 -0
  245. package/dist/{chunk-JFBEZXNL.js → chunk-3KREF4ZF.js} +3 -3
  246. package/dist/{chunk-EL7CMURV.js → chunk-3LSIFHQK.js} +3 -3
  247. package/dist/chunk-3LSIFHQK.js.map +1 -0
  248. package/dist/{chunk-MP4VSWHK.js → chunk-3NJMNMWB.js} +12 -2
  249. package/dist/chunk-3NJMNMWB.js.map +1 -0
  250. package/dist/{chunk-N52O2OKZ.js → chunk-3NNO6YIH.js} +8 -3
  251. package/dist/chunk-3NNO6YIH.js.map +1 -0
  252. package/dist/{chunk-SQYC57ZN.js → chunk-3RMDIO4G.js} +4 -4
  253. package/dist/{chunk-MJ3BVWPZ.js → chunk-43G3WMYN.js} +12 -7
  254. package/dist/chunk-43G3WMYN.js.map +1 -0
  255. package/dist/{chunk-E7MSDXED.js → chunk-43H66TVT.js} +12 -5
  256. package/dist/chunk-43H66TVT.js.map +1 -0
  257. package/dist/{chunk-IL7JZKXY.js → chunk-442FSG7G.js} +3 -3
  258. package/dist/{chunk-GVLZZCSX.js → chunk-4B5XUQQS.js} +3 -3
  259. package/dist/{chunk-DYVAOEW4.js → chunk-4D4LLSQC.js} +6 -5
  260. package/dist/chunk-4D4LLSQC.js.map +1 -0
  261. package/dist/{chunk-NEGCJNGJ.js → chunk-4G47KBTP.js} +9 -9
  262. package/dist/chunk-4G47KBTP.js.map +1 -0
  263. package/dist/{chunk-MVXFMIVZ.js → chunk-4GB46HLK.js} +8 -4
  264. package/dist/chunk-4GB46HLK.js.map +1 -0
  265. package/dist/{chunk-SN2YMCTL.js → chunk-4GWHYLEB.js} +3 -3
  266. package/dist/{chunk-J4NXTSJY.js → chunk-4JFL62K3.js} +4 -4
  267. package/dist/chunk-4JFL62K3.js.map +1 -0
  268. package/dist/{chunk-XLYFOBBT.js → chunk-4PRZLII7.js} +19 -16
  269. package/dist/chunk-4PRZLII7.js.map +1 -0
  270. package/dist/{chunk-AMTFP7QA.js → chunk-4RDJMIWL.js} +16 -13
  271. package/dist/chunk-4RDJMIWL.js.map +1 -0
  272. package/dist/{chunk-PYIASGI7.js → chunk-4RWPGWJW.js} +39 -39
  273. package/dist/chunk-4RWPGWJW.js.map +1 -0
  274. package/dist/chunk-4T6UIYJB.js +77 -0
  275. package/dist/chunk-4T6UIYJB.js.map +1 -0
  276. package/dist/{chunk-4OEKIFBC.js → chunk-4VMFS3VJ.js} +6 -3
  277. package/dist/chunk-4VMFS3VJ.js.map +1 -0
  278. package/dist/{chunk-HBICO6AX.js → chunk-4WNFOBTH.js} +26 -24
  279. package/dist/chunk-4WNFOBTH.js.map +1 -0
  280. package/dist/{chunk-6CTPDNNX.js → chunk-52G2KRL4.js} +14 -14
  281. package/dist/chunk-52G2KRL4.js.map +1 -0
  282. package/dist/{chunk-ZZM3DOEK.js → chunk-5HDYTTE7.js} +2 -2
  283. package/dist/{chunk-E7T3A4IR.js → chunk-5JCGBCFJ.js} +2 -2
  284. package/dist/{chunk-GEXM6DNR.js → chunk-5KGABAQB.js} +2 -2
  285. package/dist/{chunk-FC7NQ6XM.js → chunk-5MW7OYBM.js} +2 -2
  286. package/dist/{chunk-5TJRJSJY.js → chunk-5OBXEMQO.js} +3 -3
  287. package/dist/{chunk-MK4CH4VT.js → chunk-5OUEKIWQ.js} +14 -12
  288. package/dist/chunk-5OUEKIWQ.js.map +1 -0
  289. package/dist/{chunk-GW64UQXI.js → chunk-5QAJ3Y5F.js} +3 -3
  290. package/dist/{chunk-GW64UQXI.js.map → chunk-5QAJ3Y5F.js.map} +1 -1
  291. package/dist/{chunk-3A22SBIU.js → chunk-67O4GPJJ.js} +8 -4
  292. package/dist/chunk-67O4GPJJ.js.map +1 -0
  293. package/dist/{chunk-D5X4FRYX.js → chunk-6JNQLW5L.js} +2 -2
  294. package/dist/{chunk-CPTY6UZ6.js → chunk-6KEXHOIF.js} +5 -4
  295. package/dist/chunk-6KEXHOIF.js.map +1 -0
  296. package/dist/{chunk-NSJVQ5YJ.js → chunk-6KKQHJE7.js} +9 -4
  297. package/dist/chunk-6KKQHJE7.js.map +1 -0
  298. package/dist/{chunk-D2HKCPEH.js → chunk-6LOGBWLG.js} +9 -5
  299. package/dist/chunk-6LOGBWLG.js.map +1 -0
  300. package/dist/{chunk-RKI3MRKX.js → chunk-6N4AA2Y7.js} +3 -3
  301. package/dist/{chunk-EFHIMCJN.js → chunk-6P2OFMBX.js} +11 -9
  302. package/dist/chunk-6P2OFMBX.js.map +1 -0
  303. package/dist/{chunk-TOXTJ7MU.js → chunk-6RLCBNDV.js} +8 -5
  304. package/dist/chunk-6RLCBNDV.js.map +1 -0
  305. package/dist/{chunk-GUW5BUK7.js → chunk-6WBKOM5K.js} +15 -7
  306. package/dist/chunk-6WBKOM5K.js.map +1 -0
  307. package/dist/{chunk-K7WSPGI7.js → chunk-6WLHEZXI.js} +7 -7
  308. package/dist/chunk-6WLHEZXI.js.map +1 -0
  309. package/dist/{chunk-7EIOXZWL.js → chunk-74P3YX7R.js} +4 -4
  310. package/dist/{chunk-VYSFKR32.js → chunk-75CGLX6Q.js} +3 -3
  311. package/dist/{chunk-VYSFKR32.js.map → chunk-75CGLX6Q.js.map} +1 -1
  312. package/dist/{chunk-LVEG6XQL.js → chunk-76X6JRVI.js} +19 -33
  313. package/dist/chunk-76X6JRVI.js.map +1 -0
  314. package/dist/{chunk-2NLYGZP3.js → chunk-77JL5XVD.js} +13 -9
  315. package/dist/chunk-77JL5XVD.js.map +1 -0
  316. package/dist/{chunk-A6AKFPIQ.js → chunk-7EH4D6FU.js} +2 -2
  317. package/dist/{chunk-6SKXV236.js → chunk-7EM4THID.js} +9 -8
  318. package/dist/chunk-7EM4THID.js.map +1 -0
  319. package/dist/{chunk-7ZG7T2YN.js → chunk-7GHYCQCJ.js} +3 -3
  320. package/dist/{chunk-U4H6MGVE.js → chunk-A5UYPUS2.js} +7 -5
  321. package/dist/chunk-A5UYPUS2.js.map +1 -0
  322. package/dist/{chunk-2PBT2HQH.js → chunk-AUSUCZYR.js} +25 -24
  323. package/dist/chunk-AUSUCZYR.js.map +1 -0
  324. package/dist/{chunk-T3WHW7ZC.js → chunk-BAZXVFLR.js} +10 -6
  325. package/dist/chunk-BAZXVFLR.js.map +1 -0
  326. package/dist/{chunk-7F7TTOYN.js → chunk-BEGTLELZ.js} +7 -6
  327. package/dist/chunk-BEGTLELZ.js.map +1 -0
  328. package/dist/{chunk-4WQ3YXQL.js → chunk-BFMDA6UO.js} +4 -4
  329. package/dist/{chunk-RQ5HZDBV.js → chunk-BN742L2M.js} +14 -8
  330. package/dist/chunk-BN742L2M.js.map +1 -0
  331. package/dist/{chunk-R75DZ3AK.js → chunk-BVLMKSHX.js} +2 -2
  332. package/dist/{chunk-PMP6WJJS.js → chunk-BWMHGENX.js} +20 -19
  333. package/dist/chunk-BWMHGENX.js.map +1 -0
  334. package/dist/{chunk-7EQCZO56.js → chunk-C3LZ3OGJ.js} +11 -11
  335. package/dist/chunk-C3LZ3OGJ.js.map +1 -0
  336. package/dist/{chunk-ST4YYVUK.js → chunk-C5RQBTRZ.js} +7 -3
  337. package/dist/chunk-C5RQBTRZ.js.map +1 -0
  338. package/dist/{chunk-QAP3FW33.js → chunk-C66RGVAS.js} +30 -20
  339. package/dist/chunk-C66RGVAS.js.map +1 -0
  340. package/dist/{chunk-B7BNNSM2.js → chunk-CNQUCNEA.js} +7 -7
  341. package/dist/{chunk-GGWICBJD.js → chunk-CPAJYJUD.js} +2 -2
  342. package/dist/{chunk-DMWSXWCZ.js → chunk-CZIX4BW2.js} +4 -4
  343. package/dist/{chunk-CAHWCSRE.js → chunk-D46SLMCX.js} +22 -8
  344. package/dist/chunk-D46SLMCX.js.map +1 -0
  345. package/dist/{chunk-2HVNPWFV.js → chunk-D6KL74KI.js} +4 -10
  346. package/dist/chunk-D6KL74KI.js.map +1 -0
  347. package/dist/{chunk-2OIP3T5O.js → chunk-DBFRCTI5.js} +4 -4
  348. package/dist/{chunk-2OIP3T5O.js.map → chunk-DBFRCTI5.js.map} +1 -1
  349. package/dist/{chunk-TTAP5XFX.js → chunk-DJYL2LC6.js} +8 -3
  350. package/dist/chunk-DJYL2LC6.js.map +1 -0
  351. package/dist/{chunk-SYVNWXVW.js → chunk-DUBTI4DI.js} +4 -4
  352. package/dist/{chunk-TQ2557I5.js → chunk-DUNG7D4B.js} +23 -25
  353. package/dist/chunk-DUNG7D4B.js.map +1 -0
  354. package/dist/{chunk-RMCNEKBZ.js → chunk-DW6F7354.js} +2 -2
  355. package/dist/{chunk-Q4BQYYPU.js → chunk-E2QIKJX2.js} +11 -5
  356. package/dist/chunk-E2QIKJX2.js.map +1 -0
  357. package/dist/{chunk-LWRI6HGT.js → chunk-ECNJGROX.js} +21 -19
  358. package/dist/chunk-ECNJGROX.js.map +1 -0
  359. package/dist/{chunk-XJUEHG72.js → chunk-EERUSI52.js} +2 -2
  360. package/dist/{chunk-NPP44TQG.js → chunk-EYZ6QBTV.js} +2 -2
  361. package/dist/{chunk-NPP44TQG.js.map → chunk-EYZ6QBTV.js.map} +1 -1
  362. package/dist/{chunk-FXNYV5Z6.js → chunk-F6D6HXZU.js} +3 -3
  363. package/dist/{chunk-7DN4UXJ3.js → chunk-FERUQ7OB.js} +14 -14
  364. package/dist/chunk-FERUQ7OB.js.map +1 -0
  365. package/dist/{chunk-UL7L6MFT.js → chunk-FFCJ7NR2.js} +4 -4
  366. package/dist/{chunk-GXCOXJS3.js → chunk-FNG33MKA.js} +3 -3
  367. package/dist/{chunk-YH37X6JT.js → chunk-FNRPQE2D.js} +26 -25
  368. package/dist/chunk-FNRPQE2D.js.map +1 -0
  369. package/dist/{chunk-U342T7ZR.js → chunk-FOCU4QT5.js} +13 -10
  370. package/dist/chunk-FOCU4QT5.js.map +1 -0
  371. package/dist/{chunk-FYTLKHEN.js → chunk-FYKFQPVT.js} +19 -18
  372. package/dist/chunk-FYKFQPVT.js.map +1 -0
  373. package/dist/{chunk-5SJWDABY.js → chunk-G3XLFQ2Z.js} +44 -43
  374. package/dist/chunk-G3XLFQ2Z.js.map +1 -0
  375. package/dist/{chunk-TVL5V2JK.js → chunk-GGMB6LJH.js} +7 -3
  376. package/dist/chunk-GGMB6LJH.js.map +1 -0
  377. package/dist/{chunk-4CTLEUK3.js → chunk-GLFTIGOF.js} +4 -4
  378. package/dist/{chunk-7UZ2TFIK.js → chunk-GNCSDUGY.js} +12 -4
  379. package/dist/chunk-GNCSDUGY.js.map +1 -0
  380. package/dist/{chunk-6SS5C74Q.js → chunk-GS3RP2QE.js} +2 -2
  381. package/dist/{chunk-L4UP5VYS.js → chunk-GVH7C2PT.js} +2 -2
  382. package/dist/{chunk-MBSYD3ZU.js → chunk-GWFAINQ7.js} +3 -3
  383. package/dist/chunk-GWFAINQ7.js.map +1 -0
  384. package/dist/{chunk-B2VXP2B2.js → chunk-GZT7MLLO.js} +2 -2
  385. package/dist/{chunk-AK2HOD6B.js → chunk-H5BEWPEY.js} +2 -2
  386. package/dist/{chunk-QIKPGMMO.js → chunk-H67EL3CG.js} +6 -6
  387. package/dist/{chunk-3D6HXKZM.js → chunk-HDJQDMHB.js} +18 -13
  388. package/dist/chunk-HDJQDMHB.js.map +1 -0
  389. package/dist/{chunk-WNUZK7NS.js → chunk-HVXIOIM5.js} +10 -8
  390. package/dist/chunk-HVXIOIM5.js.map +1 -0
  391. package/dist/{chunk-JJSZP3TW.js → chunk-I4QA2F4L.js} +6 -6
  392. package/dist/{chunk-L7SFH3ED.js → chunk-I7GSRTGQ.js} +37 -28
  393. package/dist/chunk-I7GSRTGQ.js.map +1 -0
  394. package/dist/{chunk-Q4CAZ2TP.js → chunk-IG23YZZR.js} +6 -5
  395. package/dist/chunk-IG23YZZR.js.map +1 -0
  396. package/dist/{chunk-5W4BLTDI.js → chunk-IWFENXST.js} +7 -6
  397. package/dist/chunk-IWFENXST.js.map +1 -0
  398. package/dist/{chunk-HXEBKOSM.js → chunk-J5UZB6Y6.js} +2 -2
  399. package/dist/chunk-J5UZB6Y6.js.map +1 -0
  400. package/dist/{chunk-BXAL7OIS.js → chunk-JC22FNFA.js} +89 -88
  401. package/dist/chunk-JC22FNFA.js.map +1 -0
  402. package/dist/{chunk-AJ5SDHX5.js → chunk-JCL7WK4G.js} +2 -2
  403. package/dist/{chunk-ZMC3N23A.js → chunk-JSD5TFDK.js} +6 -6
  404. package/dist/{chunk-NE6XUN5Z.js → chunk-JU4MSYYH.js} +2 -2
  405. package/dist/{chunk-5CKDRLRN.js → chunk-JXECOCNA.js} +35 -19
  406. package/dist/chunk-JXECOCNA.js.map +1 -0
  407. package/dist/{chunk-WUTHROII.js → chunk-JYWF76Z5.js} +11 -5
  408. package/dist/chunk-JYWF76Z5.js.map +1 -0
  409. package/dist/{chunk-B76QCDCE.js → chunk-K4L42FF6.js} +6 -3
  410. package/dist/chunk-K4L42FF6.js.map +1 -0
  411. package/dist/{chunk-X2AKLDPW.js → chunk-KE473LK6.js} +3 -3
  412. package/dist/{chunk-TBF2CPJW.js → chunk-KIHGTL2D.js} +21 -11
  413. package/dist/chunk-KIHGTL2D.js.map +1 -0
  414. package/dist/{chunk-3T5Z5HXF.js → chunk-KM3Y5TCG.js} +40 -36
  415. package/dist/chunk-KM3Y5TCG.js.map +1 -0
  416. package/dist/{chunk-OWA7GPWR.js → chunk-KN5J3NEZ.js} +6 -5
  417. package/dist/chunk-KN5J3NEZ.js.map +1 -0
  418. package/dist/{chunk-RWTFZ7J5.js → chunk-L4G5BZFF.js} +22 -13
  419. package/dist/chunk-L4G5BZFF.js.map +1 -0
  420. package/dist/{chunk-HB7ISSLK.js → chunk-L5RQIQIP.js} +26 -22
  421. package/dist/chunk-L5RQIQIP.js.map +1 -0
  422. package/dist/{chunk-5UTAEHSB.js → chunk-L7NQCLFU.js} +3 -3
  423. package/dist/{chunk-4GYEIWQP.js → chunk-LNHYBA4B.js} +11 -10
  424. package/dist/chunk-LNHYBA4B.js.map +1 -0
  425. package/dist/{chunk-QY4XNTNG.js → chunk-LP3JCXER.js} +4 -4
  426. package/dist/chunk-LP3JCXER.js.map +1 -0
  427. package/dist/{chunk-WVC3BG6J.js → chunk-LXT3X33C.js} +11 -6
  428. package/dist/chunk-LXT3X33C.js.map +1 -0
  429. package/dist/{chunk-RZ2C5CAW.js → chunk-M2JTIH5M.js} +4 -4
  430. package/dist/{chunk-OATHOXIU.js → chunk-MC4KYGSX.js} +8 -8
  431. package/dist/chunk-MC4KYGSX.js.map +1 -0
  432. package/dist/{chunk-6KL2CJBO.js → chunk-MNHIK2OR.js} +2 -2
  433. package/dist/{chunk-343OLRFT.js → chunk-MR2HKBHS.js} +7 -7
  434. package/dist/{chunk-YVUD3MY4.js → chunk-N23GCN5U.js} +7 -4
  435. package/dist/chunk-N23GCN5U.js.map +1 -0
  436. package/dist/{chunk-CWDV64TD.js → chunk-N5GVW6RO.js} +5 -4
  437. package/dist/chunk-N5GVW6RO.js.map +1 -0
  438. package/dist/{chunk-JFEEV3XI.js → chunk-NB3FGWU4.js} +2 -2
  439. package/dist/{chunk-2TJOCI54.js → chunk-NCEQWEXT.js} +3 -3
  440. package/dist/{chunk-2TJOCI54.js.map → chunk-NCEQWEXT.js.map} +1 -1
  441. package/dist/{chunk-IVIHRZEY.js → chunk-NDMPXMW2.js} +12 -8
  442. package/dist/chunk-NDMPXMW2.js.map +1 -0
  443. package/dist/{chunk-5IXHJXJX.js → chunk-NIF4IXQU.js} +5 -2
  444. package/dist/chunk-NIF4IXQU.js.map +1 -0
  445. package/dist/{chunk-UUUMNJPP.js → chunk-NLYNRE7L.js} +10 -10
  446. package/dist/chunk-NLYNRE7L.js.map +1 -0
  447. package/dist/{chunk-KLWW67WP.js → chunk-NOKN4HRK.js} +12 -11
  448. package/dist/chunk-NOKN4HRK.js.map +1 -0
  449. package/dist/{chunk-LIG7TKIB.js → chunk-NYFNF7I5.js} +11 -6
  450. package/dist/chunk-NYFNF7I5.js.map +1 -0
  451. package/dist/{chunk-KK57AHWS.js → chunk-OAEYCKBN.js} +2 -2
  452. package/dist/{chunk-JGRE56GQ.js → chunk-OB56SZGL.js} +2 -2
  453. package/dist/{chunk-VRDNUY4H.js → chunk-OHC3F7GJ.js} +4 -4
  454. package/dist/chunk-OHC3F7GJ.js.map +1 -0
  455. package/dist/{chunk-E4TNDTWV.js → chunk-OL2BEJZR.js} +2 -2
  456. package/dist/{chunk-EFV5QJNM.js → chunk-ORRI6FMN.js} +17 -14
  457. package/dist/chunk-ORRI6FMN.js.map +1 -0
  458. package/dist/{chunk-DZNMS2SH.js → chunk-OS6KPL4D.js} +6 -6
  459. package/dist/{chunk-ZTYUKEN3.js → chunk-OVXSQQDK.js} +12 -7
  460. package/dist/chunk-OVXSQQDK.js.map +1 -0
  461. package/dist/{chunk-ZQL5RXVE.js → chunk-PA3AA55Q.js} +2 -2
  462. package/dist/{chunk-ZQL5RXVE.js.map → chunk-PA3AA55Q.js.map} +1 -1
  463. package/dist/{chunk-UFLTL2RJ.js → chunk-PH36XEB3.js} +2 -2
  464. package/dist/{chunk-4LQZH4PU.js → chunk-PMOEG36E.js} +2 -2
  465. package/dist/{chunk-KJK2Q35C.js → chunk-PPRV4LTM.js} +3 -3
  466. package/dist/{chunk-EXZSHZRS.js → chunk-PWZHCBG3.js} +3 -3
  467. package/dist/{chunk-EFVOT3G5.js → chunk-PZ7PU4AP.js} +2 -2
  468. package/dist/{chunk-YBTC4XNO.js → chunk-QA2ZGCRL.js} +5 -5
  469. package/dist/{chunk-2E2WOBID.js → chunk-QGFBIUOK.js} +5 -5
  470. package/dist/chunk-QGFBIUOK.js.map +1 -0
  471. package/dist/{chunk-7LIXQZBG.js → chunk-QI5CRSOW.js} +3 -3
  472. package/dist/{chunk-HAQMKV5P.js → chunk-QXSW3CNN.js} +15 -9
  473. package/dist/chunk-QXSW3CNN.js.map +1 -0
  474. package/dist/{chunk-LMXWI3DD.js → chunk-QYY37ECA.js} +5 -2
  475. package/dist/chunk-QYY37ECA.js.map +1 -0
  476. package/dist/{chunk-ROT57BP4.js → chunk-R2XVTUVR.js} +2 -2
  477. package/dist/{chunk-V74PXUQN.js → chunk-R6SN73RX.js} +12 -12
  478. package/dist/{chunk-VECWMANF.js → chunk-RDCHT2WN.js} +7 -4
  479. package/dist/chunk-RDCHT2WN.js.map +1 -0
  480. package/dist/{chunk-35ETD7ML.js → chunk-RIEV4VXF.js} +9 -5
  481. package/dist/chunk-RIEV4VXF.js.map +1 -0
  482. package/dist/{chunk-MVKYNDT2.js → chunk-RKROWJVF.js} +11 -9
  483. package/dist/chunk-RKROWJVF.js.map +1 -0
  484. package/dist/{chunk-NYZO3JNB.js → chunk-RXJQA3FQ.js} +2 -3
  485. package/dist/chunk-RXJQA3FQ.js.map +1 -0
  486. package/dist/{chunk-WPA26LXA.js → chunk-RZYSKQTS.js} +3 -3
  487. package/dist/{chunk-2UCLUDEB.js → chunk-SKT2V2OX.js} +4 -4
  488. package/dist/{chunk-EOW2ECB3.js → chunk-SNURSSTN.js} +2 -2
  489. package/dist/{chunk-TU3EGIKB.js → chunk-SSS64KYB.js} +3 -3
  490. package/dist/{chunk-L3B36HA5.js → chunk-SV6JGFHG.js} +10 -6
  491. package/dist/chunk-SV6JGFHG.js.map +1 -0
  492. package/dist/{chunk-CZBND7AY.js → chunk-T7DE44SP.js} +2 -2
  493. package/dist/{chunk-DHBYO7AO.js → chunk-TCV3N44E.js} +2 -2
  494. package/dist/{chunk-E6RYO4QZ.js → chunk-THMT3G3L.js} +21 -15
  495. package/dist/chunk-THMT3G3L.js.map +1 -0
  496. package/dist/{chunk-DB2ZFZVW.js → chunk-TKC6WHGB.js} +2 -2
  497. package/dist/{chunk-3CVTQZQJ.js → chunk-TNYKM4UU.js} +13 -9
  498. package/dist/chunk-TNYKM4UU.js.map +1 -0
  499. package/dist/{chunk-JCBIPBGZ.js → chunk-TU5A2CV7.js} +19 -12
  500. package/dist/chunk-TU5A2CV7.js.map +1 -0
  501. package/dist/{chunk-YESTO24O.js → chunk-TXEN3QJ4.js} +8 -3
  502. package/dist/chunk-TXEN3QJ4.js.map +1 -0
  503. package/dist/{chunk-3VMGE7CU.js → chunk-TZFBJ47T.js} +3 -3
  504. package/dist/chunk-TZFBJ47T.js.map +1 -0
  505. package/dist/{chunk-VFHGILXI.js → chunk-U3DBQXPI.js} +20 -17
  506. package/dist/chunk-U3DBQXPI.js.map +1 -0
  507. package/dist/{chunk-DVGBFT6O.js → chunk-UAVSBSV5.js} +2 -2
  508. package/dist/{chunk-ZAFFKQQU.js → chunk-UEVHI62V.js} +3 -3
  509. package/dist/{chunk-ADHMNIWS.js → chunk-UFJYJHQI.js} +3 -3
  510. package/dist/{chunk-V3LOHY4N.js → chunk-UFNIS7KC.js} +3 -3
  511. package/dist/chunk-UFNIS7KC.js.map +1 -0
  512. package/dist/{chunk-BNEWMFVB.js → chunk-UGGJ3KDT.js} +2 -2
  513. package/dist/{chunk-L4QCIUTJ.js → chunk-UMNXSQ7I.js} +3 -3
  514. package/dist/{chunk-L4QCIUTJ.js.map → chunk-UMNXSQ7I.js.map} +1 -1
  515. package/dist/{chunk-2CTTASUD.js → chunk-V5EWCJBT.js} +7 -4
  516. package/dist/chunk-V5EWCJBT.js.map +1 -0
  517. package/dist/{chunk-236V2GRH.js → chunk-VCBV5JM7.js} +49 -41
  518. package/dist/chunk-VCBV5JM7.js.map +1 -0
  519. package/dist/{chunk-KREWQAEV.js → chunk-VIRYHNEM.js} +2 -2
  520. package/dist/{chunk-PT2XADGH.js → chunk-VPRNKJHP.js} +9 -6
  521. package/dist/chunk-VPRNKJHP.js.map +1 -0
  522. package/dist/{chunk-JXUWWPZR.js → chunk-VQYR64QB.js} +14 -8
  523. package/dist/chunk-VQYR64QB.js.map +1 -0
  524. package/dist/{chunk-72DKEBJM.js → chunk-VRPREI27.js} +3 -3
  525. package/dist/chunk-VRPREI27.js.map +1 -0
  526. package/dist/{chunk-IBGX6H4J.js → chunk-VURQZBFH.js} +8 -4
  527. package/dist/chunk-VURQZBFH.js.map +1 -0
  528. package/dist/{chunk-7BZTZ2WG.js → chunk-VY2BMSHN.js} +8 -7
  529. package/dist/chunk-VY2BMSHN.js.map +1 -0
  530. package/dist/{chunk-SX3MEC3Q.js → chunk-VZIB5W5L.js} +2 -2
  531. package/dist/{chunk-HC5ZSCRG.js → chunk-W5TI46QN.js} +18 -14
  532. package/dist/chunk-W5TI46QN.js.map +1 -0
  533. package/dist/{chunk-N6CSXHFJ.js → chunk-WN5PNP6F.js} +2 -2
  534. package/dist/{chunk-SE6ERQY5.js → chunk-WVZBYTIK.js} +6 -2
  535. package/dist/chunk-WVZBYTIK.js.map +1 -0
  536. package/dist/{chunk-CSSCGM27.js → chunk-X3OWMTLO.js} +1 -2
  537. package/dist/chunk-X3OWMTLO.js.map +1 -0
  538. package/dist/{chunk-6QLPSMTA.js → chunk-XEWMY4ZM.js} +52 -47
  539. package/dist/chunk-XEWMY4ZM.js.map +1 -0
  540. package/dist/{chunk-FZ4YTEP2.js → chunk-XIG3DXXX.js} +3 -3
  541. package/dist/{chunk-CHFHILTM.js → chunk-XJJXBUPN.js} +2 -2
  542. package/dist/{chunk-CMK4DJDR.js → chunk-XLTHZI5W.js} +28 -20
  543. package/dist/chunk-XLTHZI5W.js.map +1 -0
  544. package/dist/{chunk-GHTBUJ6E.js → chunk-XRUW7DMH.js} +2 -2
  545. package/dist/{chunk-CSTAQX2B.js → chunk-XWZJLXJT.js} +7 -6
  546. package/dist/chunk-XWZJLXJT.js.map +1 -0
  547. package/dist/{chunk-MBC55H6M.js → chunk-Y5UTYBZW.js} +12 -6
  548. package/dist/chunk-Y5UTYBZW.js.map +1 -0
  549. package/dist/{chunk-DY4BP5WA.js → chunk-Y7F5JBAT.js} +5 -5
  550. package/dist/{chunk-CJHP6E34.js → chunk-YAFBUYVW.js} +9 -6
  551. package/dist/chunk-YAFBUYVW.js.map +1 -0
  552. package/dist/{chunk-WTOYEWW6.js → chunk-YBH4SPMM.js} +4 -3
  553. package/dist/chunk-YBH4SPMM.js.map +1 -0
  554. package/dist/{chunk-5QWQR7XT.js → chunk-YHGOPZXW.js} +11 -8
  555. package/dist/chunk-YHGOPZXW.js.map +1 -0
  556. package/dist/{chunk-6DN4ZULV.js → chunk-YOKUDQIJ.js} +1 -2
  557. package/dist/chunk-YOKUDQIJ.js.map +1 -0
  558. package/dist/{chunk-6BDYC4RA.js → chunk-YRSR5LVZ.js} +3 -3
  559. package/dist/{chunk-57JY4OI2.js → chunk-YUXDVW62.js} +3 -3
  560. package/dist/chunk-YUXDVW62.js.map +1 -0
  561. package/dist/{chunk-GE2EKMDT.js → chunk-YZ2DMP23.js} +4 -4
  562. package/dist/{chunk-GE2EKMDT.js.map → chunk-YZ2DMP23.js.map} +1 -1
  563. package/dist/{chunk-RNEYZTE4.js → chunk-Z6MCTGIK.js} +2 -2
  564. package/dist/{chunk-RNEYZTE4.js.map → chunk-Z6MCTGIK.js.map} +1 -1
  565. package/dist/{chunk-65CEXQ4L.js → chunk-Z6WSW6B4.js} +11 -7
  566. package/dist/chunk-Z6WSW6B4.js.map +1 -0
  567. package/dist/{chunk-TQBRWZA4.js → chunk-ZAY6OA6F.js} +2 -2
  568. package/dist/{chunk-XWWFBH2G.js → chunk-ZXSWXE6U.js} +8 -5
  569. package/dist/chunk-ZXSWXE6U.js.map +1 -0
  570. package/dist/data-display/AsyncStateContainer.js +4 -4
  571. package/dist/data-display/CardKit.js +5 -5
  572. package/dist/data-display/DataViews.js +82 -83
  573. package/dist/data-display/DescriptionItem.js +2 -2
  574. package/dist/data-display/FleetMap.js +6 -6
  575. package/dist/data-display/LazyImage.js +3 -3
  576. package/dist/data-display/LoadingState.js +3 -3
  577. package/dist/data-display/StatCard.js +3 -3
  578. package/dist/feedback/ConfirmAction.js +3 -3
  579. package/dist/feedback/Dialog.js +3 -3
  580. package/dist/feedback/Modal.js +3 -2
  581. package/dist/feedback/NotificationStatusNotice.js +3 -3
  582. package/dist/feedback/Sonner.js +2 -2
  583. package/dist/feedback/StackedModal.js +4 -3
  584. package/dist/feedback/Toast.js +2 -1
  585. package/dist/feedback/TutorialOverlay.js +5 -4
  586. package/dist/form/AddressAutocomplete.js +6 -6
  587. package/dist/form/Autocomplete.js +3 -2
  588. package/dist/form/Button.js +2 -2
  589. package/dist/form/CategorySelect.js +10 -10
  590. package/dist/form/CepField.js +4 -4
  591. package/dist/form/Checkbox.js +1 -1
  592. package/dist/form/CodeEditor.js +2 -2
  593. package/dist/form/Command.js +4 -4
  594. package/dist/form/CreatableSelect.js +2 -2
  595. package/dist/form/DateRangePicker.js +2 -2
  596. package/dist/form/Form.js +1 -1
  597. package/dist/form/HeaderActions.js +1 -1
  598. package/dist/form/Input.js +3 -2
  599. package/dist/form/InputOTP.js +2 -2
  600. package/dist/form/Label.js +2 -2
  601. package/dist/form/Menubar.js +4 -4
  602. package/dist/form/PasswordStrength.js +1 -1
  603. package/dist/form/PhoneInput.js +1 -1
  604. package/dist/form/RadioGroup.js +4 -4
  605. package/dist/form/RichTextEditor.js +2 -2
  606. package/dist/form/SearchPalette.js +2 -2
  607. package/dist/form/Select.js +2 -1
  608. package/dist/form/Slider.js +3 -3
  609. package/dist/form/Switch.js +4 -4
  610. package/dist/form/Textarea.js +2 -2
  611. package/dist/form/Toggle.js +2 -2
  612. package/dist/form/ToggleGroup.js +1 -1
  613. package/dist/form/UploadButton.js +2 -2
  614. package/dist/form/total-form.js +27 -27
  615. package/dist/layout/Accordion.js +3 -2
  616. package/dist/layout/Box.js +1 -1
  617. package/dist/layout/Card.js +3 -3
  618. package/dist/layout/Collapsible.js +3 -2
  619. package/dist/layout/ContentToolbar.js +7 -7
  620. package/dist/layout/Dashboard.js +3 -3
  621. package/dist/layout/Drawer.js +2 -1
  622. package/dist/layout/ScrollArea.js +5 -4
  623. package/dist/layout/Separator.js +4 -2
  624. package/dist/layout/SettingsLayout.js +8 -8
  625. package/dist/layout/Sidebar.js +2 -1
  626. package/dist/layout/Skeleton.js +3 -2
  627. package/dist/layout/Spacer.js +2 -1
  628. package/dist/layout/Stack.js +2 -2
  629. package/dist/layout/TableFilter.js +1 -1
  630. package/dist/navigation/AppHeader.js +8 -9
  631. package/dist/navigation/Breadcrumbs.js +3 -3
  632. package/dist/navigation/CommandPalette.js +3 -3
  633. package/dist/navigation/ContextMenu.js +1 -1
  634. package/dist/navigation/DropdownMenu.js +1 -1
  635. package/dist/navigation/NavigationMenu.js +6 -6
  636. package/dist/navigation/Pagination.js +3 -3
  637. package/dist/navigation/Tabs.js +10 -3
  638. package/dist/social-login-button.js +8 -9
  639. package/dist/types/components/feedback/Dialog/Dialog.styles.d.ts.map +1 -1
  640. package/dist/types/components/feedback/Modal/Modal.d.ts.map +1 -1
  641. package/dist/types/components/feedback/Modal/Modal.styles.d.ts.map +1 -1
  642. package/dist/types/components/feedback/StackedModal/StackedModal.parts.d.ts.map +1 -1
  643. package/dist/types/components/feedback/StackedModal/StackedModal.styles.d.ts.map +1 -1
  644. package/dist/types/components/feedback/Toast/Toast.d.ts.map +1 -1
  645. package/dist/types/components/feedback/TutorialOverlay/TutorialOverlay.d.ts.map +1 -1
  646. package/dist/types/components/feedback/TutorialOverlay/TutorialOverlay.geometry.d.ts +3 -1
  647. package/dist/types/components/feedback/TutorialOverlay/TutorialOverlay.geometry.d.ts.map +1 -1
  648. package/dist/types/components/feedback/TutorialOverlay/TutorialOverlay.hooks.d.ts.map +1 -1
  649. package/dist/types/components/feedback/TutorialOverlay/TutorialStepBody.d.ts.map +1 -1
  650. package/dist/types/components/form/AddressAutocomplete/AddressFallbackField.d.ts.map +1 -1
  651. package/dist/types/components/form/AddressAutocomplete/AddressInputField.d.ts.map +1 -1
  652. package/dist/types/components/form/AddressAutocomplete/AddressSuggestionsPaper.d.ts.map +1 -1
  653. package/dist/types/components/form/AddressAutocomplete/AddressTextField.d.ts.map +1 -1
  654. package/dist/types/components/form/Autocomplete/Autocomplete.parts.d.ts.map +1 -1
  655. package/dist/types/components/form/Button/Button.styles.d.ts +1 -1
  656. package/dist/types/components/form/Button/Button.styles.d.ts.map +1 -1
  657. package/dist/types/components/form/CategorySelect/CategoryPanelFoot.d.ts.map +1 -1
  658. package/dist/types/components/form/CategorySelect/CategoryPanelHead.d.ts.map +1 -1
  659. package/dist/types/components/form/CategorySelect/CategoryPanelList.d.ts.map +1 -1
  660. package/dist/types/components/form/CategorySelect/CategoryPanelSurface.d.ts.map +1 -1
  661. package/dist/types/components/form/CategorySelect/CategoryRows.d.ts.map +1 -1
  662. package/dist/types/components/form/CategorySelect/CategorySelect.styles.d.ts +26 -24
  663. package/dist/types/components/form/CategorySelect/CategorySelect.styles.d.ts.map +1 -1
  664. package/dist/types/components/form/CategorySelect/CategoryTrigger.d.ts.map +1 -1
  665. package/dist/types/components/form/Checkbox/Checkbox.d.ts.map +1 -1
  666. package/dist/types/components/form/CodeEditor/CodeEditor.helpers.d.ts +1 -1
  667. package/dist/types/components/form/CodeEditor/CodeEditor.helpers.d.ts.map +1 -1
  668. package/dist/types/components/form/CodeEditor/CodeEditor.types.d.ts +1 -1
  669. package/dist/types/components/form/CodeEditor/CodeEditor.types.d.ts.map +1 -1
  670. package/dist/types/components/form/Command/Command.d.ts.map +1 -1
  671. package/dist/types/components/form/Command/Command.hooks.d.ts +1 -1
  672. package/dist/types/components/form/Command/Command.hooks.d.ts.map +1 -1
  673. package/dist/types/components/form/Command/Command.parts.d.ts.map +1 -1
  674. package/dist/types/components/form/CreatableSelect/CreatableSelect.d.ts.map +1 -1
  675. package/dist/types/components/form/DateRangePicker/DateRangePicker.d.ts.map +1 -1
  676. package/dist/types/components/form/DateRangePicker/DateRangePickerQuickList.d.ts.map +1 -1
  677. package/dist/types/components/form/Form/Form.d.ts.map +1 -1
  678. package/dist/types/components/form/HeaderActions/HeaderActions.d.ts.map +1 -1
  679. package/dist/types/components/form/Input/Input.d.ts.map +1 -1
  680. package/dist/types/components/form/Input/Input.styles.d.ts.map +1 -1
  681. package/dist/types/components/form/Label/Label.styles.d.ts +2 -2
  682. package/dist/types/components/form/Label/Label.styles.d.ts.map +1 -1
  683. package/dist/types/components/form/Menubar/Menubar.toolbar.d.ts +1 -1
  684. package/dist/types/components/form/Menubar/Menubar.toolbar.d.ts.map +1 -1
  685. package/dist/types/components/form/PasswordStrength/PasswordStrength.d.ts.map +1 -1
  686. package/dist/types/components/form/RadioGroup/RadioGroup.animations.d.ts +3 -2
  687. package/dist/types/components/form/RadioGroup/RadioGroup.animations.d.ts.map +1 -1
  688. package/dist/types/components/form/RadioGroup/RadioGroup.styles.d.ts.map +1 -1
  689. package/dist/types/components/form/RichTextEditor/RichTextEditor.d.ts.map +1 -1
  690. package/dist/types/components/form/RichTextEditor/RichTextEditorToolbar.d.ts.map +1 -1
  691. package/dist/types/components/form/SearchPalette/SearchPalette.parts.d.ts +1 -1
  692. package/dist/types/components/form/SearchPalette/SearchPalette.parts.d.ts.map +1 -1
  693. package/dist/types/components/form/Select/Select.d.ts.map +1 -1
  694. package/dist/types/components/form/Slider/Slider.animations.d.ts +2 -1
  695. package/dist/types/components/form/Slider/Slider.animations.d.ts.map +1 -1
  696. package/dist/types/components/form/Slider/Slider.styles.d.ts.map +1 -1
  697. package/dist/types/components/form/Switch/Switch.animations.d.ts +2 -1
  698. package/dist/types/components/form/Switch/Switch.animations.d.ts.map +1 -1
  699. package/dist/types/components/form/Switch/Switch.styles.d.ts.map +1 -1
  700. package/dist/types/components/form/Textarea/Textarea.d.ts.map +1 -1
  701. package/dist/types/components/form/Textarea/Textarea.styles.d.ts +1 -1
  702. package/dist/types/components/form/Textarea/Textarea.styles.d.ts.map +1 -1
  703. package/dist/types/components/form/Toggle/Toggle.d.ts.map +1 -1
  704. package/dist/types/components/form/Toggle/Toggle.styles.d.ts.map +1 -1
  705. package/dist/types/components/form/ToggleGroup/ToggleGroup.d.ts.map +1 -1
  706. package/dist/types/components/form/UploadButton/UploadButton.parts.d.ts.map +1 -1
  707. package/dist/types/components/layout/Accordion/Accordion.d.ts.map +1 -1
  708. package/dist/types/components/layout/Accordion/Accordion.styles.d.ts.map +1 -1
  709. package/dist/types/components/layout/Box/Box.d.ts +2 -1
  710. package/dist/types/components/layout/Box/Box.d.ts.map +1 -1
  711. package/dist/types/components/layout/Card/Card.styles.d.ts.map +1 -1
  712. package/dist/types/components/layout/Collapsible/Collapsible.d.ts.map +1 -1
  713. package/dist/types/components/layout/Collapsible/Collapsible.helpers.d.ts +1 -1
  714. package/dist/types/components/layout/Collapsible/Collapsible.helpers.d.ts.map +1 -1
  715. package/dist/types/components/layout/Drawer/Drawer.d.ts.map +1 -1
  716. package/dist/types/components/layout/ScrollArea/ScrollArea.d.ts.map +1 -1
  717. package/dist/types/components/layout/ScrollArea/ScrollArea.styles.d.ts +6 -0
  718. package/dist/types/components/layout/ScrollArea/ScrollArea.styles.d.ts.map +1 -1
  719. package/dist/types/components/layout/ScrollArea/ScrollViewport.d.ts.map +1 -1
  720. package/dist/types/components/layout/Separator/Separator.d.ts.map +1 -1
  721. package/dist/types/components/layout/Separator/Separator.styles.d.ts +7 -4
  722. package/dist/types/components/layout/Separator/Separator.styles.d.ts.map +1 -1
  723. package/dist/types/components/layout/SettingsLayout/SettingsLayout.items.d.ts.map +1 -1
  724. package/dist/types/components/layout/SettingsLayout/SettingsLayout.rail.d.ts.map +1 -1
  725. package/dist/types/components/layout/SettingsLayout/SettingsLayout.styles.d.ts +4 -4
  726. package/dist/types/components/layout/SettingsLayout/SettingsLayout.styles.d.ts.map +1 -1
  727. package/dist/types/components/layout/Sidebar/Sidebar.d.ts.map +1 -1
  728. package/dist/types/components/layout/Skeleton/Skeleton.d.ts.map +1 -1
  729. package/dist/types/components/layout/Skeleton/Skeleton.styles.d.ts +8 -1
  730. package/dist/types/components/layout/Skeleton/Skeleton.styles.d.ts.map +1 -1
  731. package/dist/types/components/layout/Spacer/Spacer.d.ts.map +1 -1
  732. package/dist/types/components/layout/TableFilter/TableFilter.d.ts.map +1 -1
  733. package/dist/types/components/navigation/AppHeader/AppHeader.d.ts.map +1 -1
  734. package/dist/types/components/navigation/AppHeader/AppHeader.details.d.ts.map +1 -1
  735. package/dist/types/components/navigation/AppHeader/AppHeader.identity.d.ts.map +1 -1
  736. package/dist/types/components/navigation/Breadcrumbs/Breadcrumbs.styles.d.ts +2 -2
  737. package/dist/types/components/navigation/Breadcrumbs/Breadcrumbs.styles.d.ts.map +1 -1
  738. package/dist/types/components/navigation/DropdownMenu/DropdownMenu.d.ts.map +1 -1
  739. package/dist/types/components/navigation/NavigationMenu/NavigationMegaSection.d.ts.map +1 -1
  740. package/dist/types/components/navigation/NavigationMenu/NavigationMenu.d.ts.map +1 -1
  741. package/dist/types/components/navigation/NavigationMenu/NavigationMenu.shell.d.ts.map +1 -1
  742. package/dist/types/components/navigation/NavigationMenu/NavigationMenu.styles.d.ts +2 -2
  743. package/dist/types/components/navigation/NavigationMenu/NavigationMenu.styles.d.ts.map +1 -1
  744. package/dist/types/components/navigation/NavigationMenu/NavigationStandardBody.d.ts.map +1 -1
  745. package/dist/types/components/navigation/Pagination/Pagination.d.ts.map +1 -1
  746. package/dist/types/components/navigation/Pagination/PaginationParts.d.ts.map +1 -1
  747. package/dist/types/components/navigation/Tabs/Tabs.d.ts.map +1 -1
  748. package/dist/types/components/navigation/Tabs/Tabs.styles.d.ts.map +1 -1
  749. package/dist/types/components/navigation/Tabs/TabsPanel.d.ts.map +1 -1
  750. package/dist/types/components/utility/AnimatedIcon/AnimatedIcon.animations.d.ts +9 -8
  751. package/dist/types/components/utility/AnimatedIcon/AnimatedIcon.animations.d.ts.map +1 -1
  752. package/dist/types/components/utility/AnimatedIcon/AnimatedIcon.styles.d.ts +1 -1
  753. package/dist/types/components/utility/AnimatedIcon/AnimatedIcon.styles.d.ts.map +1 -1
  754. package/dist/types/components/utility/AspectRatio/AspectRatio.d.ts.map +1 -1
  755. package/dist/types/social-login-button/social-login-button.d.ts.map +1 -1
  756. package/dist/typography/Blockquote.js +1 -1
  757. package/dist/typography/Code.js +1 -1
  758. package/dist/typography/Text.js +1 -1
  759. package/dist/user-avatar.js +6 -7
  760. package/dist/utility/AnimatedIcon.js +3 -3
  761. package/dist/utility/AspectRatio.js +2 -1
  762. package/dist/utility/WorkflowStep.js +3 -3
  763. package/package.json +1 -1
  764. package/src/components/feedback/Dialog/Dialog.styles.ts +16 -28
  765. package/src/components/feedback/Modal/Modal.styles.ts +9 -8
  766. package/src/components/feedback/Modal/Modal.tsx +3 -2
  767. package/src/components/feedback/Sonner/Sonner.tsx +4 -4
  768. package/src/components/feedback/Sonner/SonnerToast.tsx +9 -9
  769. package/src/components/feedback/StackedModal/StackedModal.parts.tsx +26 -19
  770. package/src/components/feedback/StackedModal/StackedModal.styles.ts +11 -9
  771. package/src/components/feedback/Toast/Toast.tsx +11 -7
  772. package/src/components/feedback/TutorialOverlay/TutorialOverlay.geometry.ts +2 -3
  773. package/src/components/feedback/TutorialOverlay/TutorialOverlay.hooks.ts +6 -1
  774. package/src/components/feedback/TutorialOverlay/TutorialOverlay.tsx +43 -37
  775. package/src/components/feedback/TutorialOverlay/TutorialStepBody.tsx +3 -2
  776. package/src/components/form/AddressAutocomplete/AddressFallbackField.tsx +5 -1
  777. package/src/components/form/AddressAutocomplete/AddressInputField.tsx +36 -29
  778. package/src/components/form/AddressAutocomplete/AddressSuggestionsPaper.tsx +4 -2
  779. package/src/components/form/AddressAutocomplete/AddressTextField.tsx +4 -3
  780. package/src/components/form/Autocomplete/Autocomplete.parts.tsx +10 -7
  781. package/src/components/form/Button/Button.styles.ts +28 -25
  782. package/src/components/form/Button/Button.tsx +2 -2
  783. package/src/components/form/CategorySelect/CategoryPanelFoot.tsx +5 -4
  784. package/src/components/form/CategorySelect/CategoryPanelHead.tsx +13 -12
  785. package/src/components/form/CategorySelect/CategoryPanelList.tsx +3 -2
  786. package/src/components/form/CategorySelect/CategoryPanelSurface.tsx +2 -1
  787. package/src/components/form/CategorySelect/CategoryRows.tsx +4 -3
  788. package/src/components/form/CategorySelect/CategorySelect.styles.ts +98 -96
  789. package/src/components/form/CategorySelect/CategoryTrigger.tsx +5 -2
  790. package/src/components/form/Checkbox/Checkbox.tsx +21 -15
  791. package/src/components/form/CodeEditor/CodeEditor.helpers.ts +0 -2
  792. package/src/components/form/CodeEditor/CodeEditor.md +1 -1
  793. package/src/components/form/CodeEditor/CodeEditor.tsx +5 -5
  794. package/src/components/form/CodeEditor/CodeEditor.types.ts +1 -1
  795. package/src/components/form/Command/Command.hooks.ts +0 -2
  796. package/src/components/form/Command/Command.parts.tsx +7 -2
  797. package/src/components/form/Command/Command.styles.ts +11 -11
  798. package/src/components/form/Command/Command.tsx +14 -5
  799. package/src/components/form/CreatableSelect/CreatableSelect.tsx +12 -8
  800. package/src/components/form/DateRangePicker/DateRangePicker.tsx +10 -8
  801. package/src/components/form/DateRangePicker/DateRangePickerQuickList.tsx +8 -4
  802. package/src/components/form/Form/Form.tsx +6 -10
  803. package/src/components/form/HeaderActions/HeaderActions.tsx +2 -1
  804. package/src/components/form/Input/Input.styles.ts +17 -16
  805. package/src/components/form/Input/Input.tsx +4 -2
  806. package/src/components/form/InputOTP/InputOTP.styles.ts +3 -3
  807. package/src/components/form/Label/Label.styles.ts +8 -8
  808. package/src/components/form/Menubar/Menubar.item.tsx +2 -2
  809. package/src/components/form/Menubar/Menubar.styles.ts +13 -13
  810. package/src/components/form/Menubar/Menubar.toolbar.tsx +4 -2
  811. package/src/components/form/PasswordStrength/PasswordStrength.tsx +19 -18
  812. package/src/components/form/PhoneInput/PhoneInput.tsx +9 -9
  813. package/src/components/form/RadioGroup/RadioGroup.animations.ts +9 -6
  814. package/src/components/form/RadioGroup/RadioGroup.styles.ts +45 -43
  815. package/src/components/form/RichTextEditor/RichTextEditor.tsx +7 -6
  816. package/src/components/form/RichTextEditor/RichTextEditorToolbar.tsx +3 -1
  817. package/src/components/form/SearchPalette/SearchPalette.parts.tsx +8 -6
  818. package/src/components/form/Select/Select.tsx +14 -12
  819. package/src/components/form/Slider/Slider.animations.ts +7 -4
  820. package/src/components/form/Slider/Slider.styles.ts +43 -42
  821. package/src/components/form/Switch/Switch.animations.ts +7 -4
  822. package/src/components/form/Switch/Switch.parts.tsx +2 -2
  823. package/src/components/form/Switch/Switch.styles.ts +26 -22
  824. package/src/components/form/Textarea/Textarea.styles.ts +13 -12
  825. package/src/components/form/Textarea/Textarea.tsx +28 -22
  826. package/src/components/form/Textarea/TextareaRichEditor.tsx +10 -10
  827. package/src/components/form/Toggle/Toggle.styles.ts +29 -26
  828. package/src/components/form/Toggle/Toggle.tsx +5 -2
  829. package/src/components/form/ToggleGroup/ToggleGroup.tsx +18 -15
  830. package/src/components/form/UploadButton/UploadButton.parts.tsx +6 -5
  831. package/src/components/layout/Accordion/Accordion.styles.ts +8 -6
  832. package/src/components/layout/Accordion/Accordion.tsx +10 -8
  833. package/src/components/layout/Box/Box.tsx +18 -5
  834. package/src/components/layout/Card/Card.styles.ts +22 -30
  835. package/src/components/layout/Collapsible/Collapsible.helpers.ts +4 -2
  836. package/src/components/layout/Collapsible/Collapsible.tsx +8 -4
  837. package/src/components/layout/ContentToolbar/ColumnsMenu.tsx +1 -1
  838. package/src/components/layout/ContentToolbar/ContentToolbar.tsx +2 -2
  839. package/src/components/layout/ContentToolbar/FilterTrigger.tsx +2 -2
  840. package/src/components/layout/ContentToolbar/MultiSelectDropdown.tsx +1 -1
  841. package/src/components/layout/ContentToolbar/SavedViewsMenu.tsx +2 -2
  842. package/src/components/layout/ContentToolbar/SortByDropdown.tsx +2 -2
  843. package/src/components/layout/ContentToolbar/ViewSelector.tsx +2 -2
  844. package/src/components/layout/Dashboard/Dashboard.tsx +1 -1
  845. package/src/components/layout/Dashboard/DashboardParts.tsx +1 -1
  846. package/src/components/layout/Drawer/Drawer.tsx +23 -10
  847. package/src/components/layout/ScrollArea/ScrollArea.styles.ts +45 -32
  848. package/src/components/layout/ScrollArea/ScrollArea.tsx +31 -16
  849. package/src/components/layout/ScrollArea/ScrollAreaContent.tsx +2 -2
  850. package/src/components/layout/ScrollArea/ScrollViewport.tsx +6 -4
  851. package/src/components/layout/Separator/Separator.styles.ts +30 -9
  852. package/src/components/layout/Separator/Separator.tsx +4 -3
  853. package/src/components/layout/SettingsLayout/SettingsLayout.items.tsx +4 -2
  854. package/src/components/layout/SettingsLayout/SettingsLayout.rail.tsx +6 -5
  855. package/src/components/layout/SettingsLayout/SettingsLayout.styles.ts +9 -7
  856. package/src/components/layout/SettingsLayout/SettingsLayout.tsx +2 -2
  857. package/src/components/layout/SettingsLayout/SettingsPanel.tsx +1 -1
  858. package/src/components/layout/SettingsLayout/SettingsSectionChips.tsx +3 -3
  859. package/src/components/layout/SettingsLayout/SettingsSectionHeader.tsx +3 -3
  860. package/src/components/layout/SettingsLayout/SettingsStatusMarker.tsx +2 -2
  861. package/src/components/layout/Sidebar/Sidebar.tsx +16 -6
  862. package/src/components/layout/Skeleton/Skeleton.styles.ts +13 -3
  863. package/src/components/layout/Skeleton/Skeleton.tsx +6 -4
  864. package/src/components/layout/Spacer/Spacer.tsx +16 -1
  865. package/src/components/layout/TableFilter/TableFilter.tsx +2 -1
  866. package/src/components/navigation/AppHeader/AppHeader.brand.tsx +2 -2
  867. package/src/components/navigation/AppHeader/AppHeader.details.tsx +9 -7
  868. package/src/components/navigation/AppHeader/AppHeader.identity.tsx +28 -15
  869. package/src/components/navigation/AppHeader/AppHeader.tsx +18 -6
  870. package/src/components/navigation/Breadcrumbs/BreadcrumbEntry.tsx +4 -4
  871. package/src/components/navigation/Breadcrumbs/Breadcrumbs.styles.tsx +15 -15
  872. package/src/components/navigation/CommandPalette/CommandPalette.tsx +7 -7
  873. package/src/components/navigation/CommandPalette/CommandPaletteResults.tsx +5 -5
  874. package/src/components/navigation/CommandPalette/ShortcutChip.tsx +1 -1
  875. package/src/components/navigation/ContextMenu/ContextMenu.tsx +8 -8
  876. package/src/components/navigation/DropdownMenu/DropdownMenu.tsx +25 -16
  877. package/src/components/navigation/NavigationMenu/NavigationMegaSection.tsx +5 -4
  878. package/src/components/navigation/NavigationMenu/NavigationMenu.shell.tsx +22 -20
  879. package/src/components/navigation/NavigationMenu/NavigationMenu.styles.ts +11 -11
  880. package/src/components/navigation/NavigationMenu/NavigationMenu.tsx +7 -2
  881. package/src/components/navigation/NavigationMenu/NavigationMenuItem.tsx +12 -12
  882. package/src/components/navigation/NavigationMenu/NavigationStandardBody.tsx +3 -2
  883. package/src/components/navigation/Pagination/Pagination.styles.ts +18 -18
  884. package/src/components/navigation/Pagination/Pagination.tsx +2 -1
  885. package/src/components/navigation/Pagination/PaginationParts.tsx +4 -3
  886. package/src/components/navigation/Tabs/Tabs.styles.ts +14 -12
  887. package/src/components/navigation/Tabs/Tabs.tsx +11 -9
  888. package/src/components/navigation/Tabs/TabsPanel.tsx +10 -3
  889. package/src/components/typography/Blockquote/Blockquote.tsx +8 -8
  890. package/src/components/typography/Code/Code.tsx +17 -17
  891. package/src/components/typography/Text/Text.tsx +2 -2
  892. package/src/components/utility/AnimatedIcon/AnimatedIcon.animations.ts +38 -35
  893. package/src/components/utility/AnimatedIcon/AnimatedIcon.styles.ts +51 -46
  894. package/src/components/utility/AnimatedIcon/AnimatedIcon.tsx +1 -1
  895. package/src/components/utility/AspectRatio/AspectRatio.tsx +13 -2
  896. package/src/components/utility/WorkflowStep/WorkflowStep.parts.tsx +7 -7
  897. package/src/social-login-button/social-login-button.tsx +25 -8
  898. package/dist/chunk-236V2GRH.js.map +0 -1
  899. package/dist/chunk-2CTTASUD.js.map +0 -1
  900. package/dist/chunk-2E2WOBID.js.map +0 -1
  901. package/dist/chunk-2HVNPWFV.js.map +0 -1
  902. package/dist/chunk-2NLYGZP3.js.map +0 -1
  903. package/dist/chunk-2PBT2HQH.js.map +0 -1
  904. package/dist/chunk-35ETD7ML.js.map +0 -1
  905. package/dist/chunk-3A22SBIU.js.map +0 -1
  906. package/dist/chunk-3CVTQZQJ.js.map +0 -1
  907. package/dist/chunk-3D6HXKZM.js.map +0 -1
  908. package/dist/chunk-3T5Z5HXF.js.map +0 -1
  909. package/dist/chunk-3VMGE7CU.js.map +0 -1
  910. package/dist/chunk-4GYEIWQP.js.map +0 -1
  911. package/dist/chunk-4OEKIFBC.js.map +0 -1
  912. package/dist/chunk-57JY4OI2.js.map +0 -1
  913. package/dist/chunk-5CKDRLRN.js.map +0 -1
  914. package/dist/chunk-5IXHJXJX.js.map +0 -1
  915. package/dist/chunk-5QWQR7XT.js.map +0 -1
  916. package/dist/chunk-5SJWDABY.js.map +0 -1
  917. package/dist/chunk-5W4BLTDI.js.map +0 -1
  918. package/dist/chunk-65CEXQ4L.js.map +0 -1
  919. package/dist/chunk-6CTPDNNX.js.map +0 -1
  920. package/dist/chunk-6DN4ZULV.js.map +0 -1
  921. package/dist/chunk-6GRZ77IS.js.map +0 -1
  922. package/dist/chunk-6M33XQLZ.js +0 -70
  923. package/dist/chunk-6M33XQLZ.js.map +0 -1
  924. package/dist/chunk-6QLPSMTA.js.map +0 -1
  925. package/dist/chunk-6SKXV236.js.map +0 -1
  926. package/dist/chunk-72DKEBJM.js.map +0 -1
  927. package/dist/chunk-73BEVJCS.js +0 -28
  928. package/dist/chunk-73BEVJCS.js.map +0 -1
  929. package/dist/chunk-7BZTZ2WG.js.map +0 -1
  930. package/dist/chunk-7DN4UXJ3.js.map +0 -1
  931. package/dist/chunk-7EQCZO56.js.map +0 -1
  932. package/dist/chunk-7F7TTOYN.js.map +0 -1
  933. package/dist/chunk-7UZ2TFIK.js.map +0 -1
  934. package/dist/chunk-AMTFP7QA.js.map +0 -1
  935. package/dist/chunk-B76QCDCE.js.map +0 -1
  936. package/dist/chunk-BLJDCMFU.js.map +0 -1
  937. package/dist/chunk-BXAL7OIS.js.map +0 -1
  938. package/dist/chunk-CAHWCSRE.js.map +0 -1
  939. package/dist/chunk-CJHP6E34.js.map +0 -1
  940. package/dist/chunk-CMK4DJDR.js.map +0 -1
  941. package/dist/chunk-CPTY6UZ6.js.map +0 -1
  942. package/dist/chunk-CSSCGM27.js.map +0 -1
  943. package/dist/chunk-CSTAQX2B.js.map +0 -1
  944. package/dist/chunk-CWDV64TD.js.map +0 -1
  945. package/dist/chunk-D2HKCPEH.js.map +0 -1
  946. package/dist/chunk-DYVAOEW4.js.map +0 -1
  947. package/dist/chunk-E6RYO4QZ.js.map +0 -1
  948. package/dist/chunk-E7MSDXED.js.map +0 -1
  949. package/dist/chunk-EFHIMCJN.js.map +0 -1
  950. package/dist/chunk-EFV5QJNM.js.map +0 -1
  951. package/dist/chunk-EL7CMURV.js.map +0 -1
  952. package/dist/chunk-FYTLKHEN.js.map +0 -1
  953. package/dist/chunk-GUW5BUK7.js.map +0 -1
  954. package/dist/chunk-HAQMKV5P.js.map +0 -1
  955. package/dist/chunk-HB7ISSLK.js.map +0 -1
  956. package/dist/chunk-HBICO6AX.js.map +0 -1
  957. package/dist/chunk-HC5ZSCRG.js.map +0 -1
  958. package/dist/chunk-HXEBKOSM.js.map +0 -1
  959. package/dist/chunk-I62ALI7F.js.map +0 -1
  960. package/dist/chunk-IBGX6H4J.js.map +0 -1
  961. package/dist/chunk-IVIHRZEY.js.map +0 -1
  962. package/dist/chunk-IYTBTK2M.js.map +0 -1
  963. package/dist/chunk-J4NXTSJY.js.map +0 -1
  964. package/dist/chunk-JCBIPBGZ.js.map +0 -1
  965. package/dist/chunk-JXUWWPZR.js.map +0 -1
  966. package/dist/chunk-K7WSPGI7.js.map +0 -1
  967. package/dist/chunk-KH25WUSX.js.map +0 -1
  968. package/dist/chunk-KLWW67WP.js.map +0 -1
  969. package/dist/chunk-L3B36HA5.js.map +0 -1
  970. package/dist/chunk-L7SFH3ED.js.map +0 -1
  971. package/dist/chunk-LIG7TKIB.js.map +0 -1
  972. package/dist/chunk-LMXWI3DD.js.map +0 -1
  973. package/dist/chunk-LVEG6XQL.js.map +0 -1
  974. package/dist/chunk-LWRI6HGT.js.map +0 -1
  975. package/dist/chunk-MBC55H6M.js.map +0 -1
  976. package/dist/chunk-MBSYD3ZU.js.map +0 -1
  977. package/dist/chunk-MJ3BVWPZ.js.map +0 -1
  978. package/dist/chunk-MK4CH4VT.js.map +0 -1
  979. package/dist/chunk-MP4VSWHK.js.map +0 -1
  980. package/dist/chunk-MVKYNDT2.js.map +0 -1
  981. package/dist/chunk-MVXFMIVZ.js.map +0 -1
  982. package/dist/chunk-N52O2OKZ.js.map +0 -1
  983. package/dist/chunk-NEGCJNGJ.js.map +0 -1
  984. package/dist/chunk-NSJVQ5YJ.js.map +0 -1
  985. package/dist/chunk-NYZO3JNB.js.map +0 -1
  986. package/dist/chunk-OATHOXIU.js.map +0 -1
  987. package/dist/chunk-OWA7GPWR.js.map +0 -1
  988. package/dist/chunk-PMP6WJJS.js.map +0 -1
  989. package/dist/chunk-PT2XADGH.js.map +0 -1
  990. package/dist/chunk-PYIASGI7.js.map +0 -1
  991. package/dist/chunk-Q4BQYYPU.js.map +0 -1
  992. package/dist/chunk-Q4CAZ2TP.js.map +0 -1
  993. package/dist/chunk-QAP3FW33.js.map +0 -1
  994. package/dist/chunk-QY4XNTNG.js.map +0 -1
  995. package/dist/chunk-RQ5HZDBV.js.map +0 -1
  996. package/dist/chunk-RSQMPCCR.js.map +0 -1
  997. package/dist/chunk-RWTFZ7J5.js.map +0 -1
  998. package/dist/chunk-SE6ERQY5.js.map +0 -1
  999. package/dist/chunk-ST4YYVUK.js.map +0 -1
  1000. package/dist/chunk-T3WHW7ZC.js.map +0 -1
  1001. package/dist/chunk-TBF2CPJW.js.map +0 -1
  1002. package/dist/chunk-TOXTJ7MU.js.map +0 -1
  1003. package/dist/chunk-TQ2557I5.js.map +0 -1
  1004. package/dist/chunk-TTAP5XFX.js.map +0 -1
  1005. package/dist/chunk-TVL5V2JK.js.map +0 -1
  1006. package/dist/chunk-U342T7ZR.js.map +0 -1
  1007. package/dist/chunk-U4H6MGVE.js.map +0 -1
  1008. package/dist/chunk-UUUMNJPP.js.map +0 -1
  1009. package/dist/chunk-V3LOHY4N.js.map +0 -1
  1010. package/dist/chunk-VECWMANF.js.map +0 -1
  1011. package/dist/chunk-VFHGILXI.js.map +0 -1
  1012. package/dist/chunk-VRDNUY4H.js.map +0 -1
  1013. package/dist/chunk-WNUZK7NS.js.map +0 -1
  1014. package/dist/chunk-WTOYEWW6.js.map +0 -1
  1015. package/dist/chunk-WUTHROII.js.map +0 -1
  1016. package/dist/chunk-WVC3BG6J.js.map +0 -1
  1017. package/dist/chunk-XLYFOBBT.js.map +0 -1
  1018. package/dist/chunk-XWWFBH2G.js.map +0 -1
  1019. package/dist/chunk-YESTO24O.js.map +0 -1
  1020. package/dist/chunk-YH37X6JT.js.map +0 -1
  1021. package/dist/chunk-YVUD3MY4.js.map +0 -1
  1022. package/dist/chunk-ZTYUKEN3.js.map +0 -1
  1023. /package/dist/{chunk-PNLM35GU.js.map → chunk-2JNHWKQK.js.map} +0 -0
  1024. /package/dist/{chunk-PWF32ILG.js.map → chunk-2OYFTSG4.js.map} +0 -0
  1025. /package/dist/{chunk-CRZXSZ5O.js.map → chunk-2S752BIJ.js.map} +0 -0
  1026. /package/dist/{chunk-IWOVENC3.js.map → chunk-2XX45PC5.js.map} +0 -0
  1027. /package/dist/{chunk-ZW5K4XCQ.js.map → chunk-34BZXJGT.js.map} +0 -0
  1028. /package/dist/{chunk-KCAW6HRO.js.map → chunk-3AOQBR7N.js.map} +0 -0
  1029. /package/dist/{chunk-JFBEZXNL.js.map → chunk-3KREF4ZF.js.map} +0 -0
  1030. /package/dist/{chunk-SQYC57ZN.js.map → chunk-3RMDIO4G.js.map} +0 -0
  1031. /package/dist/{chunk-IL7JZKXY.js.map → chunk-442FSG7G.js.map} +0 -0
  1032. /package/dist/{chunk-GVLZZCSX.js.map → chunk-4B5XUQQS.js.map} +0 -0
  1033. /package/dist/{chunk-SN2YMCTL.js.map → chunk-4GWHYLEB.js.map} +0 -0
  1034. /package/dist/{chunk-ZZM3DOEK.js.map → chunk-5HDYTTE7.js.map} +0 -0
  1035. /package/dist/{chunk-E7T3A4IR.js.map → chunk-5JCGBCFJ.js.map} +0 -0
  1036. /package/dist/{chunk-GEXM6DNR.js.map → chunk-5KGABAQB.js.map} +0 -0
  1037. /package/dist/{chunk-FC7NQ6XM.js.map → chunk-5MW7OYBM.js.map} +0 -0
  1038. /package/dist/{chunk-5TJRJSJY.js.map → chunk-5OBXEMQO.js.map} +0 -0
  1039. /package/dist/{chunk-D5X4FRYX.js.map → chunk-6JNQLW5L.js.map} +0 -0
  1040. /package/dist/{chunk-RKI3MRKX.js.map → chunk-6N4AA2Y7.js.map} +0 -0
  1041. /package/dist/{chunk-7EIOXZWL.js.map → chunk-74P3YX7R.js.map} +0 -0
  1042. /package/dist/{chunk-A6AKFPIQ.js.map → chunk-7EH4D6FU.js.map} +0 -0
  1043. /package/dist/{chunk-7ZG7T2YN.js.map → chunk-7GHYCQCJ.js.map} +0 -0
  1044. /package/dist/{chunk-4WQ3YXQL.js.map → chunk-BFMDA6UO.js.map} +0 -0
  1045. /package/dist/{chunk-R75DZ3AK.js.map → chunk-BVLMKSHX.js.map} +0 -0
  1046. /package/dist/{chunk-B7BNNSM2.js.map → chunk-CNQUCNEA.js.map} +0 -0
  1047. /package/dist/{chunk-GGWICBJD.js.map → chunk-CPAJYJUD.js.map} +0 -0
  1048. /package/dist/{chunk-DMWSXWCZ.js.map → chunk-CZIX4BW2.js.map} +0 -0
  1049. /package/dist/{chunk-SYVNWXVW.js.map → chunk-DUBTI4DI.js.map} +0 -0
  1050. /package/dist/{chunk-RMCNEKBZ.js.map → chunk-DW6F7354.js.map} +0 -0
  1051. /package/dist/{chunk-XJUEHG72.js.map → chunk-EERUSI52.js.map} +0 -0
  1052. /package/dist/{chunk-FXNYV5Z6.js.map → chunk-F6D6HXZU.js.map} +0 -0
  1053. /package/dist/{chunk-UL7L6MFT.js.map → chunk-FFCJ7NR2.js.map} +0 -0
  1054. /package/dist/{chunk-GXCOXJS3.js.map → chunk-FNG33MKA.js.map} +0 -0
  1055. /package/dist/{chunk-4CTLEUK3.js.map → chunk-GLFTIGOF.js.map} +0 -0
  1056. /package/dist/{chunk-6SS5C74Q.js.map → chunk-GS3RP2QE.js.map} +0 -0
  1057. /package/dist/{chunk-L4UP5VYS.js.map → chunk-GVH7C2PT.js.map} +0 -0
  1058. /package/dist/{chunk-B2VXP2B2.js.map → chunk-GZT7MLLO.js.map} +0 -0
  1059. /package/dist/{chunk-AK2HOD6B.js.map → chunk-H5BEWPEY.js.map} +0 -0
  1060. /package/dist/{chunk-QIKPGMMO.js.map → chunk-H67EL3CG.js.map} +0 -0
  1061. /package/dist/{chunk-JJSZP3TW.js.map → chunk-I4QA2F4L.js.map} +0 -0
  1062. /package/dist/{chunk-AJ5SDHX5.js.map → chunk-JCL7WK4G.js.map} +0 -0
  1063. /package/dist/{chunk-ZMC3N23A.js.map → chunk-JSD5TFDK.js.map} +0 -0
  1064. /package/dist/{chunk-NE6XUN5Z.js.map → chunk-JU4MSYYH.js.map} +0 -0
  1065. /package/dist/{chunk-X2AKLDPW.js.map → chunk-KE473LK6.js.map} +0 -0
  1066. /package/dist/{chunk-5UTAEHSB.js.map → chunk-L7NQCLFU.js.map} +0 -0
  1067. /package/dist/{chunk-RZ2C5CAW.js.map → chunk-M2JTIH5M.js.map} +0 -0
  1068. /package/dist/{chunk-6KL2CJBO.js.map → chunk-MNHIK2OR.js.map} +0 -0
  1069. /package/dist/{chunk-343OLRFT.js.map → chunk-MR2HKBHS.js.map} +0 -0
  1070. /package/dist/{chunk-JFEEV3XI.js.map → chunk-NB3FGWU4.js.map} +0 -0
  1071. /package/dist/{chunk-KK57AHWS.js.map → chunk-OAEYCKBN.js.map} +0 -0
  1072. /package/dist/{chunk-JGRE56GQ.js.map → chunk-OB56SZGL.js.map} +0 -0
  1073. /package/dist/{chunk-E4TNDTWV.js.map → chunk-OL2BEJZR.js.map} +0 -0
  1074. /package/dist/{chunk-DZNMS2SH.js.map → chunk-OS6KPL4D.js.map} +0 -0
  1075. /package/dist/{chunk-UFLTL2RJ.js.map → chunk-PH36XEB3.js.map} +0 -0
  1076. /package/dist/{chunk-4LQZH4PU.js.map → chunk-PMOEG36E.js.map} +0 -0
  1077. /package/dist/{chunk-KJK2Q35C.js.map → chunk-PPRV4LTM.js.map} +0 -0
  1078. /package/dist/{chunk-EXZSHZRS.js.map → chunk-PWZHCBG3.js.map} +0 -0
  1079. /package/dist/{chunk-EFVOT3G5.js.map → chunk-PZ7PU4AP.js.map} +0 -0
  1080. /package/dist/{chunk-YBTC4XNO.js.map → chunk-QA2ZGCRL.js.map} +0 -0
  1081. /package/dist/{chunk-7LIXQZBG.js.map → chunk-QI5CRSOW.js.map} +0 -0
  1082. /package/dist/{chunk-ROT57BP4.js.map → chunk-R2XVTUVR.js.map} +0 -0
  1083. /package/dist/{chunk-V74PXUQN.js.map → chunk-R6SN73RX.js.map} +0 -0
  1084. /package/dist/{chunk-WPA26LXA.js.map → chunk-RZYSKQTS.js.map} +0 -0
  1085. /package/dist/{chunk-2UCLUDEB.js.map → chunk-SKT2V2OX.js.map} +0 -0
  1086. /package/dist/{chunk-EOW2ECB3.js.map → chunk-SNURSSTN.js.map} +0 -0
  1087. /package/dist/{chunk-TU3EGIKB.js.map → chunk-SSS64KYB.js.map} +0 -0
  1088. /package/dist/{chunk-CZBND7AY.js.map → chunk-T7DE44SP.js.map} +0 -0
  1089. /package/dist/{chunk-DHBYO7AO.js.map → chunk-TCV3N44E.js.map} +0 -0
  1090. /package/dist/{chunk-DB2ZFZVW.js.map → chunk-TKC6WHGB.js.map} +0 -0
  1091. /package/dist/{chunk-DVGBFT6O.js.map → chunk-UAVSBSV5.js.map} +0 -0
  1092. /package/dist/{chunk-ZAFFKQQU.js.map → chunk-UEVHI62V.js.map} +0 -0
  1093. /package/dist/{chunk-ADHMNIWS.js.map → chunk-UFJYJHQI.js.map} +0 -0
  1094. /package/dist/{chunk-BNEWMFVB.js.map → chunk-UGGJ3KDT.js.map} +0 -0
  1095. /package/dist/{chunk-KREWQAEV.js.map → chunk-VIRYHNEM.js.map} +0 -0
  1096. /package/dist/{chunk-SX3MEC3Q.js.map → chunk-VZIB5W5L.js.map} +0 -0
  1097. /package/dist/{chunk-N6CSXHFJ.js.map → chunk-WN5PNP6F.js.map} +0 -0
  1098. /package/dist/{chunk-FZ4YTEP2.js.map → chunk-XIG3DXXX.js.map} +0 -0
  1099. /package/dist/{chunk-CHFHILTM.js.map → chunk-XJJXBUPN.js.map} +0 -0
  1100. /package/dist/{chunk-GHTBUJ6E.js.map → chunk-XRUW7DMH.js.map} +0 -0
  1101. /package/dist/{chunk-DY4BP5WA.js.map → chunk-Y7F5JBAT.js.map} +0 -0
  1102. /package/dist/{chunk-6BDYC4RA.js.map → chunk-YRSR5LVZ.js.map} +0 -0
  1103. /package/dist/{chunk-TQBRWZA4.js.map → chunk-ZAY6OA6F.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/navigation/CommandPalette/CommandPaletteResults.tsx"],"sourcesContent":["import RecentIcon from '@mui/icons-material/History';\nimport Box from '@mui/material/Box/index.js';\nimport Divider from '@mui/material/Divider/index.js';\nimport List from '@mui/material/List/index.js';\nimport ListItem from '@mui/material/ListItem/index.js';\nimport ListItemIcon from '@mui/material/ListItemIcon/index.js';\nimport ListItemText from '@mui/material/ListItemText/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 { ShortcutChip } from './ShortcutChip';\nimport type { PaletteCommand } from './CommandPalette.types';\nimport type { CommandPaletteCopy } from '../../../copy';\nimport { rem, sxRem } from '../../../tokens/relative';\n\nconst ResultsList = styled(List)(({ theme }) => ({\n maxHeight: 400,\n overflowY: 'auto',\n padding: theme.spacing(1),\n '&::-webkit-scrollbar': {\n width: 8,\n },\n '&::-webkit-scrollbar-track': {\n background: alpha(theme.palette.action.disabled, 0.1),\n },\n '&::-webkit-scrollbar-thumb': {\n background: alpha(theme.palette.primary.main, 0.3),\n borderRadius: 4,\n '&:hover': {\n background: alpha(theme.palette.primary.main, 0.5),\n },\n },\n}));\n\nconst CommandItem = styled(ListItem)<{ selected?: boolean }>(({ theme, selected }) => ({\n borderRadius: theme.shape.borderRadius,\n marginBottom: theme.spacing(0.5),\n transition: theme.transitions.create(['background-color', 'transform']),\n cursor: 'pointer',\n ...(selected && {\n backgroundColor: alpha(theme.palette.primary.main, 0.12),\n transform: 'translateX(4px)',\n '& .MuiListItemIcon-root': {\n color: theme.palette.primary.main,\n },\n }),\n '&:hover': {\n backgroundColor: alpha(theme.palette.primary.main, 0.08),\n },\n}));\n\nconst CategoryLabel = styled(Typography)(({ theme }) => ({\n fontSize: rem(theme, 12),\n fontWeight: 600,\n color: theme.palette.text.secondary,\n textTransform: 'uppercase',\n letterSpacing: '0.1em',\n padding: theme.spacing(1, 2, 0.5, 2),\n marginTop: theme.spacing(1),\n}));\n\nconst NoResults = styled(Box)(({ theme }) => ({\n padding: theme.spacing(4, 2),\n textAlign: 'center',\n color: theme.palette.text.secondary,\n}));\n\nconst CommandRow: React.FC<{\n command: PaletteCommand;\n index: number;\n selected: boolean;\n dataTestId?: string;\n onSelect: (index: number) => void;\n onExecute: (command: PaletteCommand) => void;\n}> = ({ command, index, selected, dataTestId, onSelect, onExecute }) => (\n <CommandItem\n data-index={index}\n data-testid={`${dataTestId}-item-${command.id}`}\n selected={selected}\n onClick={() => onExecute(command)}\n onMouseEnter={() => onSelect(index)}\n >\n {command.icon && <ListItemIcon sx={{ minWidth: 40 }}>{command.icon}</ListItemIcon>}\n <ListItemText\n primary={command.label}\n secondary={command.description}\n primaryTypographyProps={{ fontSize: sxRem(14.4), fontWeight: selected ? 500 : 400 }}\n secondaryTypographyProps={{ fontSize: sxRem(12) }}\n />\n {command.shortcut && <ShortcutChip label={command.shortcut} size=\"small\" />}\n </CommandItem>\n);\n\nconst slug = (value: string) => value.toLowerCase().replace(/\\s+/g, '-');\n\n// The list, its recent section and the empty state. The running commandIndex\n// has to stay consistent across both sections, so it is threaded through here\n// rather than mutated from inside the render as it was before.\nexport const PaletteResults: React.FC<{\n copy: CommandPaletteCopy;\n listRef: React.Ref<globalThis.HTMLUListElement>;\n dataTestId?: string;\n searchQuery: string;\n showRecent?: boolean;\n commands: PaletteCommand[];\n recentCommandIds: string[];\n filteredCommands: PaletteCommand[];\n groupedCommands: Record<string, PaletteCommand[]>;\n selectedIndex: number;\n onSelect: (index: number) => void;\n onExecute: (command: PaletteCommand) => void;\n}> = ({\n copy,\n listRef,\n dataTestId,\n searchQuery,\n showRecent,\n commands,\n recentCommandIds,\n filteredCommands,\n groupedCommands,\n selectedIndex,\n onSelect,\n onExecute,\n}) => {\n if (filteredCommands.length === 0) {\n return (\n <NoResults data-testid={`${dataTestId}-no-results`}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n No commands found for \"{searchQuery}\"\n </Typography>\n <Typography variant=\"caption\" color=\"text.disabled\" sx={{ mt: 1 }}>\n {copy.tryAnotherTerm}\n </Typography>\n </NoResults>\n );\n }\n\n const showRecentSection = !searchQuery && showRecent && recentCommandIds.length > 0;\n const recent = showRecentSection\n ? (recentCommandIds\n .map((id) => commands.find((command) => command.id === id))\n .filter(Boolean) as PaletteCommand[])\n : [];\n\n // One running index across both sections, so keyboard selection lines up with\n // what is on screen.\n let commandIndex = 0;\n const row = (command: PaletteCommand) => {\n const index = commandIndex++;\n return (\n <CommandRow\n key={command.id}\n command={command}\n index={index}\n selected={index === selectedIndex}\n dataTestId={dataTestId}\n onSelect={onSelect}\n onExecute={onExecute}\n />\n );\n };\n\n const showCategoryLabels = Object.keys(groupedCommands).length > 1;\n\n return (\n <ResultsList ref={listRef} data-testid={`${dataTestId}-list`}>\n {showRecentSection && (\n <>\n <CategoryLabel data-testid={`${dataTestId}-group-recent`}>\n <RecentIcon sx={{ fontSize: sxRem(14), mr: 0.5, verticalAlign: 'middle' }} />\n {copy.recent}\n </CategoryLabel>\n {recent.map(row)}\n {filteredCommands.length > recentCommandIds.length && <Divider sx={{ my: 1 }} />}\n </>\n )}\n\n {Object.entries(groupedCommands).map(([category, categoryCommands]) => (\n <Box key={category} data-testid={`${dataTestId}-group-${slug(category)}`}>\n {showCategoryLabels && (\n <CategoryLabel data-testid={`${dataTestId}-group-label-${slug(category)}`}>\n {category}\n </CategoryLabel>\n )}\n {categoryCommands.map(row)}\n </Box>\n ))}\n </ResultsList>\n );\n};\n"],"mappings":";;;;;;;;;AAAA,OAAO,gBAAgB;AACvB,OAAO,SAAS;AAChB,OAAO,aAAa;AACpB,OAAO,UAAU;AACjB,OAAO,cAAc;AACrB,OAAO,kBAAkB;AACzB,OAAO,kBAAkB;AACzB,OAAO,gBAAgB;AACvB,SAAS,OAAO,cAAc;AAoE5B,SA6FM,UAtFa,KAPnB;AA5DF,IAAM,cAAc,OAAO,IAAI,EAAE,CAAC,EAAE,MAAM,OAAO;AAAA,EAC/C,WAAW;AAAA,EACX,WAAW;AAAA,EACX,SAAS,MAAM,QAAQ,CAAC;AAAA,EACxB,wBAAwB;AAAA,IACtB,OAAO;AAAA,EACT;AAAA,EACA,8BAA8B;AAAA,IAC5B,YAAY,MAAM,MAAM,QAAQ,OAAO,UAAU,GAAG;AAAA,EACtD;AAAA,EACA,8BAA8B;AAAA,IAC5B,YAAY,MAAM,MAAM,QAAQ,QAAQ,MAAM,GAAG;AAAA,IACjD,cAAc;AAAA,IACd,WAAW;AAAA,MACT,YAAY,MAAM,MAAM,QAAQ,QAAQ,MAAM,GAAG;AAAA,IACnD;AAAA,EACF;AACF,EAAE;AAEF,IAAM,cAAc,OAAO,QAAQ,EAA0B,CAAC,EAAE,OAAO,SAAS,OAAO;AAAA,EACrF,cAAc,MAAM,MAAM;AAAA,EAC1B,cAAc,MAAM,QAAQ,GAAG;AAAA,EAC/B,YAAY,MAAM,YAAY,OAAO,CAAC,oBAAoB,WAAW,CAAC;AAAA,EACtE,QAAQ;AAAA,EACR,GAAI,YAAY;AAAA,IACd,iBAAiB,MAAM,MAAM,QAAQ,QAAQ,MAAM,IAAI;AAAA,IACvD,WAAW;AAAA,IACX,2BAA2B;AAAA,MACzB,OAAO,MAAM,QAAQ,QAAQ;AAAA,IAC/B;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,iBAAiB,MAAM,MAAM,QAAQ,QAAQ,MAAM,IAAI;AAAA,EACzD;AACF,EAAE;AAEF,IAAM,gBAAgB,OAAO,UAAU,EAAE,CAAC,EAAE,MAAM,OAAO;AAAA,EACvD,UAAU,IAAI,OAAO,EAAE;AAAA,EACvB,YAAY;AAAA,EACZ,OAAO,MAAM,QAAQ,KAAK;AAAA,EAC1B,eAAe;AAAA,EACf,eAAe;AAAA,EACf,SAAS,MAAM,QAAQ,GAAG,GAAG,KAAK,CAAC;AAAA,EACnC,WAAW,MAAM,QAAQ,CAAC;AAC5B,EAAE;AAEF,IAAM,YAAY,OAAO,GAAG,EAAE,CAAC,EAAE,MAAM,OAAO;AAAA,EAC5C,SAAS,MAAM,QAAQ,GAAG,CAAC;AAAA,EAC3B,WAAW;AAAA,EACX,OAAO,MAAM,QAAQ,KAAK;AAC5B,EAAE;AAEF,IAAM,aAOD,CAAC,EAAE,SAAS,OAAO,UAAU,YAAY,UAAU,UAAU,MAChE;AAAA,EAAC;AAAA;AAAA,IACC,cAAY;AAAA,IACZ,eAAa,GAAG,UAAU,SAAS,QAAQ,EAAE;AAAA,IAC7C;AAAA,IACA,SAAS,MAAM,UAAU,OAAO;AAAA,IAChC,cAAc,MAAM,SAAS,KAAK;AAAA,IAEjC;AAAA,cAAQ,QAAQ,oBAAC,gBAAa,IAAI,EAAE,UAAU,GAAG,GAAI,kBAAQ,MAAK;AAAA,MACnE;AAAA,QAAC;AAAA;AAAA,UACC,SAAS,QAAQ;AAAA,UACjB,WAAW,QAAQ;AAAA,UACnB,wBAAwB,EAAE,UAAU,MAAM,IAAI,GAAG,YAAY,WAAW,MAAM,IAAI;AAAA,UAClF,0BAA0B,EAAE,UAAU,MAAM,EAAE,EAAE;AAAA;AAAA,MAClD;AAAA,MACC,QAAQ,YAAY,oBAAC,gBAAa,OAAO,QAAQ,UAAU,MAAK,SAAQ;AAAA;AAAA;AAC3E;AAGF,IAAM,OAAO,CAAC,UAAkB,MAAM,YAAY,EAAE,QAAQ,QAAQ,GAAG;AAKhE,IAAM,iBAaR,CAAC;AAAA,EACJ;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,MAAI,iBAAiB,WAAW,GAAG;AACjC,WACE,qBAAC,aAAU,eAAa,GAAG,UAAU,eACnC;AAAA,2BAAC,cAAW,SAAQ,SAAQ,OAAM,kBAAiB;AAAA;AAAA,QACzB;AAAA,QAAY;AAAA,SACtC;AAAA,MACA,oBAAC,cAAW,SAAQ,WAAU,OAAM,iBAAgB,IAAI,EAAE,IAAI,EAAE,GAC7D,eAAK,gBACR;AAAA,OACF;AAAA,EAEJ;AAEA,QAAM,oBAAoB,CAAC,eAAe,cAAc,iBAAiB,SAAS;AAClF,QAAM,SAAS,oBACV,iBACE,IAAI,CAAC,OAAO,SAAS,KAAK,CAAC,YAAY,QAAQ,OAAO,EAAE,CAAC,EACzD,OAAO,OAAO,IACjB,CAAC;AAIL,MAAI,eAAe;AACnB,QAAM,MAAM,CAAC,YAA4B;AACvC,UAAM,QAAQ;AACd,WACE;AAAA,MAAC;AAAA;AAAA,QAEC;AAAA,QACA;AAAA,QACA,UAAU,UAAU;AAAA,QACpB;AAAA,QACA;AAAA,QACA;AAAA;AAAA,MANK,QAAQ;AAAA,IAOf;AAAA,EAEJ;AAEA,QAAM,qBAAqB,OAAO,KAAK,eAAe,EAAE,SAAS;AAEjE,SACE,qBAAC,eAAY,KAAK,SAAS,eAAa,GAAG,UAAU,SAClD;AAAA,yBACC,iCACE;AAAA,2BAAC,iBAAc,eAAa,GAAG,UAAU,iBACvC;AAAA,4BAAC,cAAW,IAAI,EAAE,UAAU,MAAM,EAAE,GAAG,IAAI,KAAK,eAAe,SAAS,GAAG;AAAA,QAC1E,KAAK;AAAA,SACR;AAAA,MACC,OAAO,IAAI,GAAG;AAAA,MACd,iBAAiB,SAAS,iBAAiB,UAAU,oBAAC,WAAQ,IAAI,EAAE,IAAI,EAAE,GAAG;AAAA,OAChF;AAAA,IAGD,OAAO,QAAQ,eAAe,EAAE,IAAI,CAAC,CAAC,UAAU,gBAAgB,MAC/D,qBAAC,OAAmB,eAAa,GAAG,UAAU,UAAU,KAAK,QAAQ,CAAC,IACnE;AAAA,4BACC,oBAAC,iBAAc,eAAa,GAAG,UAAU,gBAAgB,KAAK,QAAQ,CAAC,IACpE,oBACH;AAAA,MAED,iBAAiB,IAAI,GAAG;AAAA,SANjB,QAOV,CACD;AAAA,KACH;AAEJ;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/CategorySelect/CategorySelect.styles.ts"],"sourcesContent":["import { alpha, type CSSObject, type Theme } from '@mui/material/styles/index.js';\n\nimport { fieldEdge } from '../../../tokens/field-edge';\nimport { fieldRadiusPx } from '../../../tokens/field-radius';\nimport { fieldHeight } from '../../../tokens/field-height';\nimport { absoluteInk, uiInk } from '../../../tokens/ink';\nimport { rem } from '../../../tokens/relative';\n\n/**\n * The prototype's METRICS, verbatim.\n *\n * Every number here is lifted from the approved design and is intentionally\n * absolute rather than derived from `theme.spacing`: the design is specified on\n * a half-pixel type scale (13.5px rows, 1.5px checkbox borders) that an 8px\n * spacing grid cannot express without rounding the look away.\n *\n * The trigger's CORNER and HEIGHT are the other exception: it is a field, so it\n * takes the theme's field radius and field height (`tokens/field-radius`,\n * `tokens/field-height`) and lines up with the inputs and filter pills beside it.\n *\n * COLOURS are the deliberate exception — they come from the theme, because a\n * tenant can white-label the palette (a hard-coded indigo would survive the\n * rebrand and the rest of the screen would not) and because the library ships a\n * dark mode. On the default light indigo theme the tokens below resolve to the\n * prototype's own values.\n */\nexport const METRICS = {\n panelWidth: 340,\n panelRadius: 14,\n listMaxHeight: 290,\n sheetListMaxHeight: 340,\n rowHeight: 36,\n sheetRowHeight: 42,\n rowRadius: 8,\n boxSize: 18,\n chevronButton: 22,\n /** Extra left padding per level of nesting. */\n rowIndentStep: 14,\n footerButton: 32,\n sheetFooterButton: 38,\n /** Below this width the panel becomes a bottom sheet. */\n sheetBreakpoint: 480,\n} as const;\n\n/** Accent family, derived so a white-labelled palette carries through. */\nconst accent = (theme: Theme) => ({\n main: theme.palette.primary.main,\n ink: theme.palette.primary.dark,\n soft: alpha(theme.palette.primary.main, 0.08),\n edge: alpha(theme.palette.primary.main, 0.28),\n ring: alpha(theme.palette.primary.main, 0.15),\n});\n\n/** The closed control. `selected` swaps it to the accent-tinted \"has filter\" skin. */\nexport const triggerSx = (theme: Theme, selected: boolean, open: boolean): CSSObject => {\n const brand = accent(theme);\n return {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n height: fieldHeight(theme),\n padding: '0 10px 0 12px',\n borderRadius: fieldRadiusPx(theme),\n border: `1px solid ${open || selected ? brand.edge : fieldEdge(theme)}`,\n background: selected ? brand.soft : theme.palette.background.paper,\n color: selected ? brand.ink : theme.palette.text.primary,\n font: 'inherit',\n fontSize: rem(theme, 13),\n cursor: 'pointer',\n maxWidth: '100%',\n transition: 'border-color .12s, box-shadow .12s',\n boxShadow: open ? `0 0 0 3px ${brand.ring}` : 'none',\n '&:hover': { borderColor: open || selected ? brand.edge : theme.palette.text.disabled },\n '&:focus-visible': {\n outline: 'none',\n borderColor: brand.main,\n boxShadow: `0 0 0 3px ${alpha(brand.main, 0.18)}`,\n },\n '&:disabled': { opacity: 0.5, cursor: 'default' },\n };\n};\n\n/** The count pill inside the trigger. */\nexport const triggerCountSx = (theme: Theme): CSSObject => ({\n fontWeight: 600,\n fontSize: rem(theme, 11),\n lineHeight: 1,\n background: theme.palette.primary.main,\n color: theme.palette.primary.contrastText,\n borderRadius: '999px',\n padding: '3px 6px',\n minWidth: 18,\n textAlign: 'center',\n});\n\n/** The trigger's inline clear (×) and the chevron. */\nexport const triggerClearSx = (theme: Theme): CSSObject => ({\n width: 20,\n height: 20,\n flex: '0 0 auto',\n border: 0,\n background: 'transparent',\n borderRadius: '5px',\n display: 'grid',\n placeItems: 'center',\n cursor: 'pointer',\n color: 'inherit',\n opacity: 0.6,\n padding: 0,\n '&:hover': { background: alpha(absoluteInk(theme).black, 0.08), opacity: 1 },\n});\n\nexport const triggerChevronSx = (open: boolean): CSSObject => ({\n width: 14,\n height: 14,\n flex: '0 0 auto',\n opacity: 0.55,\n transition: 'transform .15s',\n transform: open ? 'rotate(180deg)' : 'none',\n});\n\n/** The floating panel. */\nexport const panelSx = (theme: Theme): CSSObject => ({\n width: METRICS.panelWidth,\n maxWidth: '100%',\n background: theme.palette.background.paper,\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: `${METRICS.panelRadius}px`,\n boxShadow: `0 1px 2px ${alpha(uiInk(theme).panelShadowInk, 0.05)}, 0 18px 40px -12px ${alpha(uiInk(theme).panelShadowInk, 0.28)}`,\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n});\n\n/** Bottom-sheet skin, applied under {@link METRICS.sheetBreakpoint}. */\nexport const sheetSx = (theme: Theme): CSSObject => ({\n width: '100%',\n maxWidth: 'none',\n borderRadius: '18px 18px 0 0',\n borderBottom: 0,\n position: 'relative',\n paddingTop: '4px',\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n top: 7,\n left: '50%',\n transform: 'translateX(-50%)',\n width: 36,\n height: 4,\n borderRadius: '2px',\n background: theme.palette.divider,\n },\n});\n\nexport const panelHeadSx = (theme: Theme, sheet: boolean): CSSObject => ({\n padding: sheet ? '18px 10px 8px' : '10px 10px 8px',\n borderBottom: `1px solid ${theme.palette.divider}`,\n});\n\nexport const pinnedSx = (theme: Theme): CSSObject => ({\n padding: '9px 10px',\n borderBottom: `1px solid ${theme.palette.divider}`,\n background: alpha(theme.palette.primary.main, 0.03),\n});\n\nexport const pinnedLabelSx = (theme: Theme): CSSObject => ({\n fontWeight: 600,\n fontSize: rem(theme, 10),\n lineHeight: 1,\n letterSpacing: '.08em',\n textTransform: 'uppercase',\n color: theme.palette.text.secondary,\n marginBottom: '7px',\n});\n\nexport const chipWrapSx: CSSObject = {\n display: 'flex',\n flexWrap: 'wrap',\n gap: '5px',\n maxHeight: 74,\n overflow: 'auto',\n};\n\n/** A selected-category chip, in the pinned tray and the applied bar alike. */\nexport const chipSx = (theme: Theme): CSSObject => {\n const brand = accent(theme);\n return {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '5px',\n fontSize: rem(theme, 12),\n background: brand.soft,\n color: brand.ink,\n border: `1px solid ${brand.edge}`,\n borderRadius: '7px',\n padding: '3px 4px 3px 8px',\n '& button': {\n border: 0,\n background: 'transparent',\n color: 'inherit',\n cursor: 'pointer',\n padding: 0,\n width: 16,\n height: 16,\n borderRadius: '4px',\n display: 'grid',\n placeItems: 'center',\n opacity: 0.65,\n fontSize: rem(theme, 13),\n lineHeight: 1,\n '&:hover': { background: alpha(theme.palette.primary.main, 0.16), opacity: 1 },\n },\n };\n};\n\nexport const listSx = (sheet: boolean): CSSObject => ({\n overflow: 'auto',\n maxHeight: sheet ? METRICS.sheetListMaxHeight : METRICS.listMaxHeight,\n padding: '6px 6px 8px',\n scrollPadding: '8px 0',\n overscrollBehavior: 'contain',\n});\n\n/** A row. `active` is the KEYBOARD cursor — deliberately distinct from hover. */\nexport const rowSx = (theme: Theme, active: boolean, sheet: boolean): CSSObject => ({\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '0 8px',\n height: sheet ? METRICS.sheetRowHeight : METRICS.rowHeight,\n borderRadius: `${METRICS.rowRadius}px`,\n cursor: 'pointer',\n userSelect: 'none',\n position: 'relative',\n width: '100%',\n border: 0,\n textAlign: 'left',\n font: 'inherit',\n background: active ? alpha(theme.palette.primary.main, 0.08) : 'transparent',\n boxShadow: active ? `inset 0 0 0 1px ${alpha(theme.palette.primary.main, 0.3)}` : 'none',\n '&:hover': {\n background: active\n ? alpha(theme.palette.primary.main, 0.08)\n : theme.palette.action.hover,\n },\n '&:focus-visible': { outline: `2px solid ${theme.palette.primary.main}`, outlineOffset: 1 },\n});\n\n/**\n * How far a row sits in from the panel edge, by depth.\n *\n * One step per level, on top of {@link rowSx}'s own 8px gutter — depth 0 keeps\n * that gutter, and every level below it adds `METRICS.rowIndentStep`. Absolute\n * like the rest of this file: the step is the design's own 14px, not a spacing\n * multiple that would round it.\n */\nexport const rowIndent = (depth: number): CSSObject =>\n depth === 0 ? {} : { paddingLeft: `${depth * METRICS.rowIndentStep}px` };\n\nexport const rowNameSx = (theme: Theme, isCategory: boolean): CSSObject => ({\n flex: 1,\n minWidth: 0,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n fontSize: rem(theme, 13.5),\n fontWeight: isCategory ? 600 : 450,\n color: isCategory ? theme.palette.text.primary : theme.palette.text.secondary,\n});\n\nexport const rowMetaSx = (theme: Theme, selected: boolean): CSSObject => ({\n font: `500 ${rem(theme, 11)}/1 ui-monospace, SFMono-Regular, Menlo, monospace`,\n color: selected ? theme.palette.primary.main : theme.palette.text.secondary,\n fontWeight: selected ? 600 : 500,\n flex: '0 0 auto',\n});\n\n/** The query hit inside a row label. */\nexport const markSx = (theme: Theme): CSSObject => ({\n background: uiInk(theme).highlightMark,\n color: 'inherit',\n borderRadius: '2px',\n padding: '0 1px',\n});\n\nexport const chevronButtonSx = (theme: Theme, open: boolean): CSSObject => ({\n width: METRICS.chevronButton,\n height: METRICS.chevronButton,\n flex: '0 0 auto',\n border: 0,\n background: 'transparent',\n borderRadius: '6px',\n display: 'grid',\n placeItems: 'center',\n cursor: 'pointer',\n color: theme.palette.text.secondary,\n padding: 0,\n '&:hover': { background: theme.palette.action.hover, color: theme.palette.text.primary },\n '& svg': { width: 12, height: 12, transition: 'transform .15s', transform: open ? 'rotate(90deg)' : 'none' },\n});\n\n/** The tri-state checkbox: unchecked, checked, or the partial bar. */\nexport const checkboxSx = (theme: Theme, state: 'off' | 'partial' | 'on'): CSSObject => ({\n width: METRICS.boxSize,\n height: METRICS.boxSize,\n flex: '0 0 auto',\n border: `1.5px solid ${state === 'off' ? theme.palette.divider : theme.palette.primary.main}`,\n borderRadius: '5px',\n background: state === 'off' ? theme.palette.background.paper : theme.palette.primary.main,\n display: 'grid',\n placeItems: 'center',\n transition: 'background .1s, border-color .1s',\n '& svg': { width: 12, height: 12, color: theme.palette.primary.contrastText },\n});\n\n/** The partial bar drawn inside a half-selected checkbox. */\nexport const checkboxBarSx = (theme: Theme): CSSObject => ({\n width: 9,\n height: 2,\n background: theme.palette.primary.contrastText,\n borderRadius: '1px',\n});\n\nexport const radioSx = (theme: Theme, on: boolean): CSSObject => ({\n width: METRICS.boxSize,\n height: METRICS.boxSize,\n flex: '0 0 auto',\n borderRadius: '50%',\n background: theme.palette.background.paper,\n border: on\n ? `5.5px solid ${theme.palette.primary.main}`\n : `1.5px solid ${theme.palette.divider}`,\n boxSizing: 'border-box',\n});\n\nexport const sectionHeadSx = (theme: Theme): CSSObject => ({\n fontWeight: 600,\n fontSize: rem(theme, 10),\n lineHeight: 1,\n letterSpacing: '.08em',\n textTransform: 'uppercase',\n color: theme.palette.text.secondary,\n padding: '9px 8px 6px',\n});\n\nexport const footerSx = (theme: Theme): CSSObject => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '8px',\n padding: '9px 10px',\n borderTop: `1px solid ${theme.palette.divider}`,\n background: theme.palette.action.hover,\n});\n\nexport const emptySx = (theme: Theme): CSSObject => ({\n padding: '26px 18px',\n textAlign: 'center',\n color: theme.palette.text.secondary,\n '& strong': {\n display: 'block',\n color: theme.palette.text.primary,\n fontSize: rem(theme, 13.5),\n marginBottom: '4px',\n },\n '& p': { margin: '0 0 12px', fontSize: rem(theme, 12.5), lineHeight: 1.5 },\n});\n\n/** Skeleton row used while the catalogue loads. */\nexport const skeletonSx: CSSObject = {\n height: METRICS.rowHeight,\n margin: '4px 6px',\n borderRadius: `${METRICS.rowRadius}px`,\n};\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/layout/Separator/Separator.styles.ts"],"sourcesContent":["import type { CSSObject, Theme } from '@mui/material/styles/index.js';\n\nimport type {\n SeparatorOrientation,\n SeparatorProps,\n SeparatorSize,\n SeparatorVariant,\n} from './Separator.types';\n\nconst THICKNESS_PX: Record<SeparatorSize, number> = {\n xs: 1,\n sm: 2,\n md: 3,\n lg: 4,\n xl: 6,\n};\n\nconst MARGIN_PX: Record<SeparatorSize, number> = {\n xs: 4,\n sm: 8,\n md: 16,\n lg: 24,\n xl: 32,\n};\n\nconst separatorThickness = (size: SeparatorSize): number =>\n THICKNESS_PX[size] ?? THICKNESS_PX.md;\n\n/** An explicit `margin` wins; otherwise the size picks one. */\nexport const separatorMargin = (\n size: SeparatorSize,\n margin?: number | string,\n): number | string => margin ?? MARGIN_PX[size] ?? MARGIN_PX.md;\n\n// `gradient` paints a background rather than a border, so it draws its line as a\n// solid border of zero visual consequence.\nconst borderStyleFor = (variant: SeparatorVariant): 'dashed' | 'dotted' | 'solid' => {\n switch (variant) {\n case 'dashed':\n return 'dashed';\n case 'dotted':\n return 'dotted';\n default:\n return 'solid';\n }\n};\n\nconst gradientBackground = (\n variant: SeparatorVariant,\n orientation: SeparatorOrientation,\n color: string,\n): string | undefined => {\n if (variant !== 'gradient') return undefined;\n const angle = orientation === 'horizontal' ? '90deg' : '180deg';\n return `linear-gradient(${angle}, transparent 0%, ${color} 50%, transparent 100%)`;\n};\n\n// Only the leading edge carries the rule; the other three are zeroed explicitly so\n// a parent's border shorthand cannot leak through.\nconst borderEdges = (\n isHorizontal: boolean,\n thickness: number,\n style: 'dashed' | 'dotted' | 'solid',\n color: string,\n): CSSObject => {\n const leading = isHorizontal ? 'Top' : 'Left';\n const blank: CSSObject = {\n borderTopWidth: 0,\n borderBottomWidth: 0,\n borderLeftWidth: 0,\n borderRightWidth: 0,\n borderTopStyle: 'none',\n borderBottomStyle: 'none',\n borderLeftStyle: 'none',\n borderRightStyle: 'none',\n borderTopColor: 'transparent',\n borderBottomColor: 'transparent',\n borderLeftColor: 'transparent',\n borderRightColor: 'transparent',\n };\n\n return {\n ...blank,\n [`border${leading}Width`]: thickness,\n [`border${leading}Style`]: style,\n [`border${leading}Color`]: color,\n };\n};\n\ntype SeparatorStyleArgs = Required<\n Pick<SeparatorProps, 'variant' | 'orientation' | 'size'>\n> &\n Pick<SeparatorProps, 'color' | 'margin' | 'length'>;\n\n/**\n * The separator's margin, on the axis it separates along only: above and below\n * a horizontal rule, either side of a vertical one. A margin given as a string\n * carries its own units; a number is pixels.\n *\n * The LABELLED separator uses this too. It used to hand the number straight to\n * `sx.margin`, where a number is SPACING UNITS — `md`'s 16 drew 128px on all\n * four sides, against 16px above and below for the unlabelled one.\n */\nexport const separatorBlockMargin = (\n size: SeparatorSize,\n margin: number | string | undefined,\n isHorizontal: boolean,\n): string => {\n const value = separatorMargin(size, margin);\n const length = typeof value === 'string' ? value : `${value}px`;\n return isHorizontal ? `${length} 0` : `0 ${length}`;\n};\n\nexport const separatorStyles = (\n theme: Theme,\n { variant, orientation, size, color, margin, length }: SeparatorStyleArgs,\n): CSSObject => {\n const isHorizontal = orientation === 'horizontal';\n const thickness = separatorThickness(size);\n const resolvedColor = color || theme.palette.divider;\n\n const baseStyles: CSSObject = {\n display: 'flex',\n alignItems: 'center',\n margin: separatorBlockMargin(size, margin, isHorizontal),\n width: isHorizontal ? length || '100%' : `${thickness}px`,\n height: isHorizontal ? `${thickness}px` : length || '100%',\n boxSizing: 'border-box',\n };\n\n if (variant === 'gradient') {\n return {\n ...baseStyles,\n background: gradientBackground(variant, orientation, resolvedColor),\n };\n }\n\n return {\n ...baseStyles,\n backgroundColor: 'transparent',\n ...borderEdges(isHorizontal, thickness, borderStyleFor(variant), resolvedColor),\n };\n};\n"],"mappings":";AASA,IAAM,eAA8C;AAAA,EAClD,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEA,IAAM,YAA2C;AAAA,EAC/C,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AAAA,EACJ,IAAI;AACN;AAEA,IAAM,qBAAqB,CAAC,SAC1B,aAAa,IAAI,KAAK,aAAa;AAG9B,IAAM,kBAAkB,CAC7B,MACA,WACoB,UAAU,UAAU,IAAI,KAAK,UAAU;AAI7D,IAAM,iBAAiB,CAAC,YAA6D;AACnF,UAAQ,SAAS;AAAA,IACf,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AAEA,IAAM,qBAAqB,CACzB,SACA,aACA,UACuB;AACvB,MAAI,YAAY,WAAY,QAAO;AACnC,QAAM,QAAQ,gBAAgB,eAAe,UAAU;AACvD,SAAO,mBAAmB,KAAK,qBAAqB,KAAK;AAC3D;AAIA,IAAM,cAAc,CAClB,cACA,WACA,OACA,UACc;AACd,QAAM,UAAU,eAAe,QAAQ;AACvC,QAAM,QAAmB;AAAA,IACvB,gBAAgB;AAAA,IAChB,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,gBAAgB;AAAA,IAChB,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,IAClB,gBAAgB;AAAA,IAChB,mBAAmB;AAAA,IACnB,iBAAiB;AAAA,IACjB,kBAAkB;AAAA,EACpB;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,CAAC,SAAS,OAAO,OAAO,GAAG;AAAA,IAC3B,CAAC,SAAS,OAAO,OAAO,GAAG;AAAA,IAC3B,CAAC,SAAS,OAAO,OAAO,GAAG;AAAA,EAC7B;AACF;AAgBO,IAAM,uBAAuB,CAClC,MACA,QACA,iBACW;AACX,QAAM,QAAQ,gBAAgB,MAAM,MAAM;AAC1C,QAAM,SAAS,OAAO,UAAU,WAAW,QAAQ,GAAG,KAAK;AAC3D,SAAO,eAAe,GAAG,MAAM,OAAO,KAAK,MAAM;AACnD;AAEO,IAAM,kBAAkB,CAC7B,OACA,EAAE,SAAS,aAAa,MAAM,OAAO,QAAQ,OAAO,MACtC;AACd,QAAM,eAAe,gBAAgB;AACrC,QAAM,YAAY,mBAAmB,IAAI;AACzC,QAAM,gBAAgB,SAAS,MAAM,QAAQ;AAE7C,QAAM,aAAwB;AAAA,IAC5B,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,QAAQ,qBAAqB,MAAM,QAAQ,YAAY;AAAA,IACvD,OAAO,eAAe,UAAU,SAAS,GAAG,SAAS;AAAA,IACrD,QAAQ,eAAe,GAAG,SAAS,OAAO,UAAU;AAAA,IACpD,WAAW;AAAA,EACb;AAEA,MAAI,YAAY,YAAY;AAC1B,WAAO;AAAA,MACL,GAAG;AAAA,MACH,YAAY,mBAAmB,SAAS,aAAa,aAAa;AAAA,IACpE;AAAA,EACF;AAEA,SAAO;AAAA,IACL,GAAG;AAAA,IACH,iBAAiB;AAAA,IACjB,GAAG,YAAY,cAAc,WAAW,eAAe,OAAO,GAAG,aAAa;AAAA,EAChF;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/SearchPalette/SearchPalette.parts.tsx"],"sourcesContent":["import KeyboardReturnIcon from '@mui/icons-material/KeyboardReturn';\nimport SearchIcon from '@mui/icons-material/Search';\nimport Avatar from '@mui/material/Avatar/index.js';\nimport Box from '@mui/material/Box/index.js';\nimport Chip from '@mui/material/Chip/index.js';\nimport CircularProgress from '@mui/material/CircularProgress/index.js';\nimport InputBase from '@mui/material/InputBase/index.js';\nimport List from '@mui/material/List/index.js';\nimport ListItemButton from '@mui/material/ListItemButton/index.js';\nimport Paper from '@mui/material/Paper/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport React from 'react';\n\nimport type { SearchFilterChip, SearchResultLead } from './SearchPalette.types';\nimport { sxRem } from '../../../tokens/relative';\n\n/** Bold the first case-insensitive occurrence of `query` within `text`. */\nexport function highlight(text: string, query: string): React.ReactNode {\n const q = query.trim();\n const at = q ? text.toLowerCase().indexOf(q.toLowerCase()) : -1;\n if (at < 0) return text;\n return (\n <>\n {text.slice(0, at)}\n <Box component=\"span\" sx={{ fontWeight: 700 }}>\n {text.slice(at, at + q.length)}\n </Box>\n {text.slice(at + q.length)}\n </>\n );\n}\n\n/** The leading visual of a result row (image / avatar / icon). */\nexport function Lead({ lead }: { lead: SearchResultLead | undefined }): React.JSX.Element | null {\n if (!lead) return null;\n if (lead.kind === 'image') {\n return (\n <Box\n component=\"img\"\n src={lead.src}\n alt={lead.alt ?? ''}\n sx={{ width: 32, height: 32, borderRadius: 1, objectFit: 'cover', flexShrink: 0 }}\n />\n );\n }\n if (lead.kind === 'avatar') {\n return (\n <Avatar src={lead.src} alt={lead.alt ?? ''} sx={{ width: 32, height: 32, fontSize: sxRem(13.6) }}>\n {lead.fallback}\n </Avatar>\n );\n }\n return (\n <Box sx={{ display: 'flex', width: 32, justifyContent: 'center', flexShrink: 0, color: 'text.secondary' }}>\n {lead.node}\n </Box>\n );\n}\n\n/** Compute the ghost-completion remainder of the top result for `query`. */\nexport function ghostRemainder(topPrimary: string | undefined, query: string): string {\n if (!query || !topPrimary) return '';\n return topPrimary.toLowerCase().startsWith(query.toLowerCase()) && topPrimary.length > query.length\n ? topPrimary.slice(query.length)\n : '';\n}\n\n/** The search input row: leading icon, ghost overlay, the field, and a spinner. */\nexport function PaletteInput(props: {\n value: string;\n ghost: string;\n isLoading: boolean;\n autoFocus: boolean;\n placeholder: string;\n inputAriaLabel?: string;\n hasQuery: boolean;\n onChange: (v: string) => void;\n onKeyDown: (e: React.KeyboardEvent) => void;\n}): React.JSX.Element {\n return (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1.25, px: 2, py: 1.5 }}>\n <SearchIcon fontSize=\"small\" sx={{ color: 'text.secondary', flexShrink: 0 }} />\n <Box sx={{ position: 'relative', flex: 1, minWidth: 0 }}>\n {props.ghost && (\n <Box\n aria-hidden\n sx={{\n position: 'absolute',\n inset: 0,\n display: 'flex',\n alignItems: 'center',\n pointerEvents: 'none',\n whiteSpace: 'pre',\n overflow: 'hidden',\n fontSize: sxRem(16),\n }}\n >\n <Box component=\"span\" sx={{ visibility: 'hidden' }}>\n {props.value}\n </Box>\n <Box component=\"span\" sx={{ color: 'text.secondary', opacity: 0.6 }}>\n {props.ghost}\n </Box>\n </Box>\n )}\n <InputBase\n fullWidth\n autoFocus={props.autoFocus}\n value={props.value}\n onChange={(e) => props.onChange(e.target.value)}\n onKeyDown={props.onKeyDown}\n placeholder={props.placeholder}\n inputProps={{\n role: 'combobox',\n 'aria-expanded': props.hasQuery,\n 'aria-label': props.inputAriaLabel,\n 'aria-autocomplete': 'list',\n }}\n sx={{ fontSize: sxRem(16) }}\n />\n </Box>\n {props.isLoading && <CircularProgress size={18} sx={{ flexShrink: 0 }} />}\n </Box>\n );\n}\n\n/** The toggleable filter-chip row. */\nexport function FilterChips(props: {\n filters: SearchFilterChip[];\n activeFilterIds: string[];\n onToggleFilter?: (id: string) => void;\n}): React.JSX.Element {\n return (\n <Box\n data-testid=\"search-palette-filters\"\n sx={{\n display: 'flex',\n flexWrap: 'wrap',\n gap: 1,\n px: 2,\n pb: 1.5,\n borderBottom: (theme) => `1px solid ${theme.palette.divider}`,\n }}\n >\n {props.filters.map((chip) => {\n const active = props.activeFilterIds.includes(chip.id);\n return (\n <Chip\n key={chip.id}\n label={chip.label}\n icon={chip.icon as React.ReactElement | undefined}\n onClick={() => props.onToggleFilter?.(chip.id)}\n variant={active ? 'filled' : 'outlined'}\n color={active ? 'primary' : 'default'}\n size=\"small\"\n aria-pressed={active}\n data-testid={`search-palette-filter-${chip.id}`}\n sx={{ borderRadius: 2 }}\n />\n );\n })}\n </Box>\n );\n}\n\n/** One rich result row. */\nexport function ResultRow(props: {\n index: number;\n active: boolean;\n query: string;\n lead: SearchResultLead | undefined;\n primary: string;\n secondary: string | undefined;\n trailing: React.ReactNode | undefined;\n onSelect: () => void;\n onHover: () => void;\n}): React.JSX.Element {\n return (\n <ListItemButton\n role=\"option\"\n aria-selected={props.active}\n selected={props.active}\n onMouseEnter={props.onHover}\n onMouseDown={(e) => e.preventDefault()}\n onClick={props.onSelect}\n data-testid={`search-palette-result-${props.index}`}\n sx={{ gap: 1.25, px: 2, py: 1 }}\n >\n <Lead lead={props.lead} />\n <Box sx={{ minWidth: 0, flex: 1 }}>\n <Typography variant=\"body2\" noWrap sx={{ color: 'text.primary' }}>\n {highlight(props.primary, props.query)}\n </Typography>\n {props.secondary && (\n <Typography variant=\"caption\" noWrap sx={{ display: 'block', color: 'text.secondary' }}>\n {props.secondary}\n </Typography>\n )}\n </Box>\n {props.trailing != null && (\n <Box sx={{ flexShrink: 0, color: 'text.secondary', fontSize: sxRem(12) }}>{props.trailing}</Box>\n )}\n </ListItemButton>\n );\n}\n\n/** The \"see all results — Press ENTER\" footer row. */\nexport function SubmitAllFooter(props: {\n label: string;\n keyLabel: string;\n selected: boolean;\n onSelect: () => void;\n onHover: () => void;\n}): React.JSX.Element {\n return (\n <ListItemButton\n selected={props.selected}\n onMouseEnter={props.onHover}\n onMouseDown={(e) => e.preventDefault()}\n onClick={props.onSelect}\n data-testid=\"search-palette-submit-all\"\n sx={{ gap: 1.25, px: 2, py: 1, borderTop: (theme) => `1px solid ${theme.palette.divider}` }}\n >\n <SearchIcon fontSize=\"small\" sx={{ color: 'text.secondary', flexShrink: 0 }} />\n <Typography variant=\"body2\" sx={{ flex: 1, minWidth: 0 }} noWrap>\n {props.label}\n </Typography>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 0.5, color: 'text.secondary' }}>\n <Typography variant=\"caption\">{props.keyLabel}</Typography>\n <KeyboardReturnIcon sx={{ fontSize: sxRem(14) }} />\n </Box>\n </ListItemButton>\n );\n}\n\n/** Resolved view state shared by the body renderer. */\nexport interface BodyView<T> {\n hasQuery: boolean;\n emptyQueryContent: React.ReactNode;\n visible: T[];\n isLoading: boolean;\n noResultsLabel: string;\n showFooter: boolean;\n footerIndex: number;\n activeIndex: number;\n trimmed: string;\n submitAllLabel: (q: string) => string;\n submitKeyLabel: string;\n getKey: (item: T) => string;\n getPrimary: (item: T) => string;\n getSecondary?: (item: T) => string | undefined;\n getLead?: (item: T) => SearchResultLead | undefined;\n getTrailing?: (item: T) => React.ReactNode | undefined;\n onSelect: (item: T) => void;\n onSubmitAll?: (query: string) => void;\n setActiveIndex: (i: number) => void;\n}\n\n/** The results list (or the empty-query slot / no-results message) + footer. */\nexport function PaletteBody<T>(view: BodyView<T>): React.JSX.Element | null {\n if (!view.hasQuery) {\n return view.emptyQueryContent ? (\n <Box data-testid=\"search-palette-empty-query\">{view.emptyQueryContent}</Box>\n ) : null;\n }\n const empty = view.visible.length === 0;\n return (\n <>\n {!empty && (\n <List dense disablePadding role=\"listbox\" data-testid=\"search-palette-results\">\n {view.visible.map((item, index) => (\n <ResultRow\n key={view.getKey(item)}\n index={index}\n active={index === view.activeIndex}\n query={view.trimmed}\n lead={view.getLead?.(item)}\n primary={view.getPrimary(item)}\n secondary={view.getSecondary?.(item)}\n trailing={view.getTrailing?.(item)}\n onSelect={() => view.onSelect(item)}\n onHover={() => view.setActiveIndex(index)}\n />\n ))}\n </List>\n )}\n {empty && !view.isLoading && (\n <Box sx={{ px: 2, py: 1.5 }} data-testid=\"search-palette-no-results\">\n <Typography variant=\"body2\" color=\"text.secondary\">\n {view.noResultsLabel}\n </Typography>\n </Box>\n )}\n {view.showFooter && (\n <SubmitAllFooter\n label={view.submitAllLabel(view.trimmed)}\n keyLabel={view.submitKeyLabel}\n selected={view.activeIndex === view.footerIndex}\n onSelect={() => view.onSubmitAll?.(view.trimmed)}\n onHover={() => view.setActiveIndex(view.footerIndex)}\n />\n )}\n </>\n );\n}\n\n/**\n * The palette card: a flex column capped at the height its container allows, so\n * the input and the filter chips stay pinned while only the results scroll and a\n * long result set can never push the palette past the bottom of the viewport.\n */\nexport const PALETTE_CARD_SX = {\n width: '100%',\n maxWidth: 640,\n maxHeight: '100%',\n borderRadius: 2,\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n} as const;\n\n/** The scrolling region of the card — the results, and nothing above them. */\nexport function PaletteScrollArea({ children }: { children: React.ReactNode }): React.JSX.Element {\n return (\n <Box sx={{ minHeight: 0, overflowY: 'auto', overscrollBehavior: 'contain' }}>{children}</Box>\n );\n}\n\nexport { Paper };\n\n/** Context for the keydown handler builder. */\nexport interface KeyCtx<T> {\n rowCount: number;\n activeIndex: number;\n footerIndex: number;\n visible: T[];\n hasQuery: boolean;\n ghost: string;\n top: T | undefined;\n trimmed: string;\n getPrimary: (item: T) => string;\n onChange: (v: string) => void;\n onSelect: (item: T) => void;\n onSubmitAll?: (query: string) => void;\n onClose?: () => void;\n setActiveIndex: React.Dispatch<React.SetStateAction<number>>;\n}\n\n/** Build the input's keydown handler (nav / select / ghost-accept / close). */\nexport function createKeyDownHandler<T>(ctx: KeyCtx<T>): (e: React.KeyboardEvent) => void {\n const move = (delta: number): void =>\n ctx.setActiveIndex((i) => Math.min(Math.max(i + delta, 0), Math.max(ctx.rowCount - 1, 0)));\n const commit = (): void => {\n if (!ctx.hasQuery) return;\n if (ctx.activeIndex === ctx.footerIndex) {\n ctx.onSubmitAll?.(ctx.trimmed);\n return;\n }\n const item = ctx.visible[ctx.activeIndex];\n if (item) ctx.onSelect(item);\n };\n // A lookup keeps the handler itself flat (low complexity). Tab/→ is special —\n // it must only swallow the event when there is a ghost to accept, otherwise\n // Tab keeps its native focus behavior.\n const actions: Record<string, (() => void) | undefined> = {\n ArrowDown: () => move(1),\n ArrowUp: () => move(-1),\n Enter: commit,\n Escape: () => ctx.onClose?.(),\n };\n return (e) => {\n if ((e.key === 'Tab' || e.key === 'ArrowRight') && ctx.ghost && ctx.top) {\n e.preventDefault();\n ctx.onChange(ctx.getPrimary(ctx.top));\n return;\n }\n const action = actions[e.key];\n if (!action) return;\n e.preventDefault();\n action();\n };\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/Command/Command.parts.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport CircularProgress from '@mui/material/CircularProgress/index.js';\nimport Divider from '@mui/material/Divider/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport React from 'react';\n\nimport type {\n CommandEmptyProps,\n CommandLoadingProps,\n CommandSeparatorProps,\n} from './Command.types';\n\nexport const CommandEmpty: React.FC<CommandEmptyProps> = ({\n message = 'No results found',\n className,\n style,\n dataTestId,\n}) => (\n <Box\n className={className}\n data-testid={dataTestId}\n sx={{\n p: 4,\n textAlign: 'center',\n color: 'text.secondary',\n ...style,\n }}\n >\n <Typography variant=\"body2\">{message}</Typography>\n </Box>\n );\n\nexport const CommandLoading: React.FC<CommandLoadingProps> = ({\n message = 'Loading...',\n className,\n style,\n dataTestId,\n}) => (\n <Box\n className={className}\n data-testid={dataTestId}\n sx={{\n p: 4,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: 2,\n ...style,\n }}\n >\n <CircularProgress size={24} />\n <Typography variant=\"body2\" color=\"text.secondary\">\n {message}\n </Typography>\n </Box>\n );\n\nexport const CommandSeparator: React.FC<CommandSeparatorProps> = ({\n className,\n style,\n}) => <Divider className={className} sx={{ my: 1, ...style }} />;"],"mappings":";AAAA,OAAO,SAAS;AAChB,OAAO,sBAAsB;AAC7B,OAAO,aAAa;AACpB,OAAO,gBAAgB;AAyBjB,cAUF,YAVE;AAhBC,IAAM,eAA4C,CAAC;AAAA,EACxD,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AACF,MACI;AAAA,EAAC;AAAA;AAAA,IACC;AAAA,IACA,eAAa;AAAA,IACb,IAAI;AAAA,MACF,GAAG;AAAA,MACH,WAAW;AAAA,MACX,OAAO;AAAA,MACP,GAAG;AAAA,IACL;AAAA,IAEA,8BAAC,cAAW,SAAQ,SAAS,mBAAQ;AAAA;AACvC;AAGG,IAAM,iBAAgD,CAAC;AAAA,EAC5D,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA;AACF,MACI;AAAA,EAAC;AAAA;AAAA,IACC;AAAA,IACA,eAAa;AAAA,IACb,IAAI;AAAA,MACF,GAAG;AAAA,MACH,SAAS;AAAA,MACT,eAAe;AAAA,MACf,YAAY;AAAA,MACZ,KAAK;AAAA,MACL,GAAG;AAAA,IACL;AAAA,IAEA;AAAA,0BAAC,oBAAiB,MAAM,IAAI;AAAA,MAC5B,oBAAC,cAAW,SAAQ,SAAQ,OAAM,kBAC/B,mBACH;AAAA;AAAA;AACF;AAGG,IAAM,mBAAoD,CAAC;AAAA,EAChE;AAAA,EACA;AACF,MAAM,oBAAC,WAAQ,WAAsB,IAAI,EAAE,IAAI,GAAG,GAAG,MAAM,GAAG;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/layout/SettingsLayout/SettingsSectionHeader.tsx"],"sourcesContent":["'use client';\n\nimport ChevronLeftIcon from '@mui/icons-material/ChevronLeft';\nimport Box from '@mui/material/Box/index.js';\nimport React from 'react';\n\nimport { displayAcrossRail, TOUCH_TARGET } from './SettingsLayout.styles';\nimport type { SettingsLayoutProps, SettingsRailBreakpoint } from './SettingsLayout.types';\nimport { sxRem } from '../../../tokens/relative';\n\n/** One line that must not wrap, whatever the section is called. */\nconst CLIP = {\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n} as const;\n\n/**\n * The name of where you are, and optionally what it holds.\n *\n * `minWidth: 0` on the wrapper is what lets the clipping work at all: without\n * it a flex item refuses to shrink below its content, so a long section name\n * pushes the back button off the row instead of ellipsising.\n */\nfunction HeaderText({\n title,\n description,\n}: {\n title: string;\n description?: string;\n}): React.JSX.Element {\n return (\n <Box sx={{ minWidth: 0 }}>\n <Box\n component=\"h2\"\n sx={{ m: 0, font: 'inherit', fontSize: sxRem(16), fontWeight: 600, lineHeight: 1.3, ...CLIP }}\n >\n {title}\n </Box>\n {description !== undefined && description !== '' && (\n <Box\n component=\"p\"\n sx={{\n m: 0,\n font: 'inherit',\n fontSize: sxRem(13),\n color: 'text.secondary',\n lineHeight: 1.35,\n ...CLIP,\n }}\n >\n {description}\n </Box>\n )}\n </Box>\n );\n}\n\n/**\n * The narrow-width panel header: a back control, and the name of where you are.\n *\n * ## Why this replaced a \"‹ Voltar\" link\n *\n * The bare link spent a whole row saying only that a back existed. Under it came\n * the sibling chips and under those the section's own Salvar, so three stacked\n * rows went by before the first field — on the width with the least room for\n * them. Worse, none of the three said WHICH section was open: the chips mark the\n * active one, but a chip strip scrolls, so the answer could be off-screen.\n *\n * Folding the control into a square button beside the title buys back a row and\n * makes the header say where you are, which is what a header is for.\n *\n * ## Narrow only, and mounted at every width\n *\n * `displayAcrossRail` hides this above the breakpoint rather than unmounting it,\n * for the reason the whole component works that way: navigation that exists at\n * one width and not the other is navigation nothing can assert about. Above the\n * breakpoint the rail is on screen with the open row marked, so a back control\n * would point at a list already visible.\n *\n * The button is `TOUCH_TARGET` square because this is the phone shape, and it\n * keeps the accessible name — the visible text is the section, not the verb, so\n * a screen reader still hears \"Voltar\" rather than being handed an icon.\n */\nexport function SettingsSectionHeader({\n href,\n backLabel,\n title,\n description,\n breakpoint,\n linkComponent,\n testIdPrefix,\n}: {\n href: string;\n backLabel: string;\n title: string;\n description?: string;\n breakpoint: SettingsRailBreakpoint;\n linkComponent: NonNullable<SettingsLayoutProps['linkComponent']>;\n testIdPrefix: string;\n}): React.JSX.Element {\n return (\n <Box\n data-testid={`${testIdPrefix}-section-header`}\n sx={(theme) => ({\n ...displayAcrossRail(theme, breakpoint, 'flex', 'none'),\n alignItems: 'center',\n gap: 1.5,\n minWidth: 0,\n // ITS OWN SURFACE, not the panel's.\n //\n // The header, the chip strip and the first card were all the same\n // white, so nothing said where \"you are here\" ended and the screen\n // began — the eye had only the type sizes to go on. A tint plus the\n // rule below turns three stacked runs of text into two blocks.\n //\n // `paper` against a `default` panel rather than a hand-picked grey, so\n // it tracks the host's theme (and its dark mode) instead of being a\n // light-mode constant that goes wrong the moment the palette does.\n bgcolor: 'background.paper',\n px: 1.5,\n pt: 1.5,\n pb: 1.5,\n mb: 1,\n borderRadius: 1,\n // A rule under the header, because what follows it is the sibling strip\n // — a row of other sections. Without a line the section's own name and\n // the chip naming a DIFFERENT section sit in one undifferentiated\n // block, which reads as one navigation rather than as \"you are here\"\n // above \"go elsewhere\".\n borderBottom: 1,\n borderColor: 'divider',\n })}\n >\n <Box\n component={linkComponent}\n href={href}\n aria-label={backLabel}\n data-testid={`${testIdPrefix}-back`}\n sx={(theme) => ({\n flex: '0 0 auto',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: TOUCH_TARGET,\n height: TOUCH_TARGET,\n border: 1,\n borderColor: 'divider',\n borderRadius: 2,\n color: 'text.primary',\n textDecoration: 'none',\n '&:hover': { backgroundColor: theme.palette.action.hover },\n })}\n >\n <ChevronLeftIcon fontSize=\"small\" />\n </Box>\n\n <HeaderText title={title} description={description} />\n </Box>\n );\n}\n"],"mappings":";;;;;;;;;AAEA,OAAO,qBAAqB;AAC5B,OAAO,SAAS;AA6BZ,SACE,KADF;AArBJ,IAAM,OAAO;AAAA,EACX,UAAU;AAAA,EACV,cAAc;AAAA,EACd,YAAY;AACd;AASA,SAAS,WAAW;AAAA,EAClB;AAAA,EACA;AACF,GAGsB;AACpB,SACE,qBAAC,OAAI,IAAI,EAAE,UAAU,EAAE,GACrB;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,IAAI,EAAE,GAAG,GAAG,MAAM,WAAW,UAAU,MAAM,EAAE,GAAG,YAAY,KAAK,YAAY,KAAK,GAAG,KAAK;AAAA,QAE3F;AAAA;AAAA,IACH;AAAA,IACC,gBAAgB,UAAa,gBAAgB,MAC5C;AAAA,MAAC;AAAA;AAAA,QACC,WAAU;AAAA,QACV,IAAI;AAAA,UACF,GAAG;AAAA,UACH,MAAM;AAAA,UACN,UAAU,MAAM,EAAE;AAAA,UAClB,OAAO;AAAA,UACP,YAAY;AAAA,UACZ,GAAG;AAAA,QACL;AAAA,QAEC;AAAA;AAAA,IACH;AAAA,KAEJ;AAEJ;AA4BO,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAQsB;AACpB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAa,GAAG,YAAY;AAAA,MAC5B,IAAI,CAAC,WAAW;AAAA,QACd,GAAG,kBAAkB,OAAO,YAAY,QAAQ,MAAM;AAAA,QACtD,YAAY;AAAA,QACZ,KAAK;AAAA,QACL,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAWV,SAAS;AAAA,QACT,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAMd,cAAc;AAAA,QACd,aAAa;AAAA,MACf;AAAA,MAEA;AAAA;AAAA,UAAC;AAAA;AAAA,YACC,WAAW;AAAA,YACX;AAAA,YACA,cAAY;AAAA,YACZ,eAAa,GAAG,YAAY;AAAA,YAC5B,IAAI,CAAC,WAAW;AAAA,cACd,MAAM;AAAA,cACN,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,gBAAgB;AAAA,cAChB,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,QAAQ;AAAA,cACR,aAAa;AAAA,cACb,cAAc;AAAA,cACd,OAAO;AAAA,cACP,gBAAgB;AAAA,cAChB,WAAW,EAAE,iBAAiB,MAAM,QAAQ,OAAO,MAAM;AAAA,YAC3D;AAAA,YAEA,8BAAC,mBAAgB,UAAS,SAAQ;AAAA;AAAA,QACpC;AAAA,QAEA,oBAAC,cAAW,OAAc,aAA0B;AAAA;AAAA;AAAA,EACtD;AAEJ;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/CodeEditor/CodeEditor.helpers.ts"],"sourcesContent":["import type { CodeEditorProps } from './CodeEditor.types';\n\n// Every element repeated the same conditional test id; this is that ternary once.\nexport const makeTestId =\n (dataTestId?: string) =>\n (suffix: string): string =>\n dataTestId ? `${dataTestId}-${suffix}` : `code-editor-${suffix}`;\n\ntype CodeEditorDefaultedKeys =\n | 'height'\n | 'theme'\n | 'readOnly'\n | 'lineNumbers'\n | 'minimap'\n | 'fontSize'\n | 'wordWrap'\n | 'showToolbar'\n | 'autoFormat';\n\ntype ResolvedCodeEditorProps = CodeEditorProps &\n Required<Pick<CodeEditorProps, CodeEditorDefaultedKeys>>;\n\nconst CODE_EDITOR_DEFAULTS: Pick<CodeEditorProps, CodeEditorDefaultedKeys> = {\n height: '400px',\n theme: 'auto',\n readOnly: false,\n lineNumbers: true,\n minimap: false,\n fontSize: 14,\n wordWrap: false,\n showToolbar: true,\n autoFormat: false,\n};\n\n// Strips explicitly-undefined props before the merge, so `prop={undefined}` still\n// falls back to the default exactly as a destructuring default would. Applied as\n// a merge rather than destructuring defaults, which would otherwise put nine\n// branches into the component's own complexity budget.\nexport const resolveCodeEditorProps = (props: CodeEditorProps): ResolvedCodeEditorProps =>\n ({\n ...CODE_EDITOR_DEFAULTS,\n ...(Object.fromEntries(\n Object.entries(props).filter(([, value]) => value !== undefined),\n ) as Partial<CodeEditorProps>),\n }) as ResolvedCodeEditorProps;\n"],"mappings":";AAGO,IAAM,aACX,CAAC,eACD,CAAC,WACC,aAAa,GAAG,UAAU,IAAI,MAAM,KAAK,eAAe,MAAM;AAgBlE,IAAM,uBAAuE;AAAA,EAC3E,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,UAAU;AAAA,EACV,aAAa;AAAA,EACb,SAAS;AAAA,EACT,UAAU;AAAA,EACV,UAAU;AAAA,EACV,aAAa;AAAA,EACb,YAAY;AACd;AAMO,IAAM,yBAAyB,CAAC,WACpC;AAAA,EACC,GAAG;AAAA,EACH,GAAI,OAAO;AAAA,IACT,OAAO,QAAQ,KAAK,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,UAAU,MAAS;AAAA,EACjE;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/layout/SettingsLayout/SettingsSectionChips.tsx"],"sourcesContent":["'use client';\n\nimport Box from '@mui/material/Box/index.js';\nimport { alpha, useTheme, type Theme } from '@mui/material/styles/index.js';\nimport React, { useEffect, useRef, type RefObject } from 'react';\n\nimport { SettingsStatusMarker } from './SettingsStatusMarker';\nimport { TOUCH_TARGET } from './SettingsLayout.styles';\nimport { rem } from '../../../tokens/relative';\n\n/**\n * The chip's drawn height, against `TOUCH_TARGET`'s 44 for the tappable one.\n *\n * The strip sits between a section's header and its first field on the width\n * with the least room for either, so the pill is sized to its text rather than\n * to the thumb — and the thumb is served by the hit area instead.\n */\nconst CHIP_HEIGHT = 34;\nimport type { SettingsLayoutProps, SettingsNavItem } from './SettingsLayout.types';\n\nexport interface SettingsSectionChipsProps {\n /** The sibling sections to offer — usually the open item's own group. */\n items: SettingsNavItem[];\n /** Which one is open. */\n activeItemId?: string;\n /** Accessible name of the strip, in the host's language. */\n ariaLabel: string;\n linkComponent?: SettingsLayoutProps['linkComponent'];\n onSelectItem?: (id: string) => void;\n testIdPrefix: string;\n}\n\n/** True when the visitor asked the OS for less movement. Re-read per scroll. */\nfunction prefersReducedMotion(): boolean {\n if (typeof window === 'undefined' || typeof window.matchMedia !== 'function') return false;\n return window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n}\n\n/**\n * Keep the open section's chip in view, however the visitor got here.\n *\n * Keyed on `activeItemId` in an effect rather than done in a click handler:\n * arriving by the desktop rail, by a card, by a pasted link and by the browser's\n * back button all have to land the same way, and only one of those is a click on\n * a chip. Every re-render otherwise starts the strip at scroll 0, which parks\n * the active chip off the right edge on any list longer than a screen — the\n * visitor is told where they are by an element they cannot see.\n *\n * `itemsKey` rather than `items`: a host almost always rebuilds that array per\n * render (`groups.flatMap(...)`), and depending on it would re-run this on every\n * render and yank the strip back mid-drag.\n *\n * The key joins on NUL — as the ESCAPE `'\\u0000'`, which it must stay. A\n * literal NUL byte works identically at runtime and makes git classify this file\n * as BINARY: `git diff` prints \"Binary file not shown\" and the GitHub review UI\n * shows nothing at all. This file shipped that way once, and the cost was not\n * the byte — it was a whole change nobody could read.\n */\nfunction useCentreActiveChip(\n stripRef: RefObject<HTMLDivElement | null>,\n activeItemId: string | undefined,\n itemsKey: string,\n): void {\n useEffect(() => {\n const strip = stripRef.current;\n if (!strip || !activeItemId) return;\n // Walked rather than selected: an id is host data, and a section id carrying\n // a quote would turn a selector string into a thrown SyntaxError — which\n // here would take the whole strip down to centre one chip.\n const chip = Array.from(strip.children).find(\n (node): node is HTMLElement =>\n node instanceof HTMLElement && node.dataset.chipId === activeItemId,\n );\n if (!chip) return;\n // Feature-checked, not assumed. `Element.scrollTo` is absent in jsdom and in\n // a few embedded webviews, and an unguarded call there THROWS out of an\n // effect — which React escalates to the nearest error boundary. The whole\n // settings area would go down to centre one chip, and the host's own tests\n // could not render the shell at all. Same reasoning as walking the children\n // instead of building a selector: nothing in here is worth a crash.\n if (typeof strip.scrollTo !== 'function') return;\n const target = chip.offsetLeft + chip.offsetWidth / 2 - strip.clientWidth / 2;\n const left = Math.max(0, Math.min(target, strip.scrollWidth - strip.clientWidth));\n strip.scrollTo({ left, behavior: prefersReducedMotion() ? 'auto' : 'smooth' });\n }, [stripRef, activeItemId, itemsKey]);\n}\n\n/** One chip: a link when the host gave it a target, else a button. */\nfunction SectionChip({\n item,\n active,\n theme,\n linkComponent,\n onSelectItem,\n testIdPrefix,\n}: {\n item: SettingsNavItem;\n active: boolean;\n theme: Theme;\n linkComponent?: SettingsLayoutProps['linkComponent'];\n onSelectItem?: (id: string) => void;\n testIdPrefix: string;\n}): React.JSX.Element {\n const asLink = item.href !== undefined && linkComponent !== undefined;\n const behaviour = asLink\n ? { component: linkComponent, href: item.href }\n : { component: 'button' as const, type: 'button' as const, onClick: () => onSelectItem?.(item.id) };\n\n return (\n <Box\n {...behaviour}\n data-chip-id={item.id}\n data-testid={`${testIdPrefix}-chip-${item.id}`}\n aria-current={active ? 'page' : undefined}\n sx={{\n display: 'inline-flex',\n alignItems: 'center',\n gap: 0.75,\n flex: '0 0 auto',\n position: 'relative',\n // The chip LOOKS this tall; it is still tapped at `TOUCH_TARGET`.\n //\n // Shrinking `minHeight` alone would have bought a slimmer strip with a\n // smaller hit area — on the one width where the strip IS the navigation\n // and the input is a thumb. The `::after` below keeps the tappable\n // region at the full target while the pill itself takes less room, so\n // this is a visual change and not an accessibility trade.\n minHeight: CHIP_HEIGHT,\n px: 1.5,\n borderRadius: 999,\n cursor: 'pointer',\n font: 'inherit',\n fontSize: rem(theme, 13),\n fontWeight: active ? 700 : 500,\n textDecoration: 'none',\n whiteSpace: 'nowrap',\n color: active ? 'primary.main' : 'text.secondary',\n bgcolor: active ? alpha(theme.palette.primary.main, 0.12) : 'transparent',\n border: `1px solid ${active ? alpha(theme.palette.primary.main, 0.4) : theme.palette.divider}`,\n // Spans the chip's width only, so neighbours never overlap: the strip\n // is a row, and the extra reach is vertical.\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n insetInlineStart: 0,\n insetInlineEnd: 0,\n top: '50%',\n transform: 'translateY(-50%)',\n height: TOUCH_TARGET,\n },\n }}\n >\n {item.status ? (\n <SettingsStatusMarker\n status={item.status}\n label={item.statusLabel}\n testId={`${testIdPrefix}-chip-status-${item.id}`}\n />\n ) : null}\n {item.label}\n </Box>\n );\n}\n\n/**\n * The narrow-width section strip: horizontally scrollable chips for the sections\n * beside the open one.\n *\n * It clips its own overflow — `overflow-x: auto` on the strip, never on an\n * ancestor. A strip that pushes the page wide makes every OTHER screen at that\n * width scroll sideways too, and the cause is nowhere near the symptom.\n */\nexport function SettingsSectionChips({\n items,\n activeItemId,\n ariaLabel,\n linkComponent,\n onSelectItem,\n testIdPrefix,\n}: SettingsSectionChipsProps): React.JSX.Element {\n const theme = useTheme();\n const stripRef = useRef<HTMLDivElement | null>(null);\n useCentreActiveChip(stripRef, activeItemId, items.map((item) => item.id).join('\\u0000'));\n\n return (\n <Box\n ref={stripRef}\n component=\"nav\"\n aria-label={ariaLabel}\n data-testid={`${testIdPrefix}-chips`}\n sx={{\n display: 'flex',\n alignItems: 'center',\n gap: 0.75,\n px: 0.25,\n py: 0.25,\n overflowX: 'auto',\n overflowY: 'hidden',\n scrollbarWidth: 'none',\n '&::-webkit-scrollbar': { display: 'none' },\n }}\n >\n {items.map((item) => (\n <SectionChip\n key={item.id}\n item={item}\n active={item.id === activeItemId}\n theme={theme}\n linkComponent={linkComponent}\n onSelectItem={onSelectItem}\n testIdPrefix={testIdPrefix}\n />\n ))}\n </Box>\n );\n}\n\nSettingsSectionChips.displayName = 'SettingsSectionChips';\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/DateRangePicker/DateRangePicker.tsx"],"sourcesContent":["'use client';\n\n/**\n * Three views of ONE range: a calendar, a quick-pick column, and two typed\n * dates. Change any and the other two follow.\n *\n * WHY IT EXISTS: a range calendar alone makes \"this quarter\" cost two clicks,\n * a month of paging, and a mental note of which day a quarter starts on; a list\n * of presets alone cannot express \"the 3rd to the 19th\"; and typed fields alone\n * make you spell out a window you can see. Each of the three is the fastest\n * route to a different range, so the control offers all three over one value\n * rather than picking a favourite.\n *\n * WHAT IT DOES NOT KNOW: anything about the data behind the range. No preset\n * list of a product's own, no ceiling of its own, no notion of whose clock\n * \"today\" runs on — `quickRanges`, `maxRangeDays` and `timeZone` are props, and\n * a consumer that needs its own periods passes them rather than teaching this\n * file about its domain. The calendar is `Calendar` in `selectionMode=\"range\"`,\n * not a second implementation of one.\n *\n * The value is a DRAFT (`{ from, to }`, either end possibly null) rather than a\n * finished window, so a half-picked or impossible range has somewhere to live\n * while it is being fixed. Every `onChange` carries the verdict with it.\n */\nimport Box from '@mui/material/Box/index.js';\nimport Paper from '@mui/material/Paper/index.js';\nimport useMediaQuery from '@mui/material/useMediaQuery/index.js';\nimport type { SxProps, Theme } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport { Calendar } from '../Calendar';\n\nimport { toLocalDay } from './DateRangePicker.dates';\nimport { useDateRangePicker } from './DateRangePicker.hooks';\nimport { DEFAULT_QUICK_RANGES } from './DateRangePicker.quick';\nimport type { DateRangeDraft, DateRangePickerProps, WeekStart } from './DateRangePicker.types';\nimport { DateRangeFields } from './DateRangePickerFields';\nimport { DateRangeQuickList } from './DateRangePickerQuickList';\n\nconst CALENDAR_CLASS = 'date-range-picker__calendar';\n\n/** Below this the picker is a phone layout. MUI's own `md`, written out. */\nconst NARROW_QUERY = '(max-width:899.95px)';\n\nconst ROOT_SX: SxProps<Theme> = {\n display: 'inline-flex',\n flexDirection: 'column',\n gap: 2,\n p: 2,\n maxWidth: '100%',\n // `Calendar` renders its own `Paper` with 24px of padding. Nested in this one\n // that reads as a box inside a box, so the inner frame is flattened here\n // through the className hook the component exposes for exactly this.\n [`& .${CALENDAR_CLASS}`]: {\n p: 0,\n boxShadow: 'none',\n backgroundColor: 'transparent',\n backgroundImage: 'none',\n },\n};\n\nconst BODY_SX: SxProps<Theme> = {\n display: 'flex',\n // The quick column sits BESIDE the calendar on a wide screen. Narrow, it\n // moves ABOVE it — `column-reverse`, so the DOM order stays calendar-then-\n // list (the calendar is the primary control and should be reached first by a\n // screen reader and by Tab) while the eye meets the quick ranges first, which\n // is the order the phone mock asks for and the order a thumb wants: nine\n // one-tap answers before a grid of thirty.\n //\n // A side column at 390px would squeeze the day grid to roughly half its width\n // and make the numbers unreadable. Checked at 390px.\n flexDirection: { xs: 'column-reverse', md: 'row' },\n alignItems: { xs: 'stretch', md: 'flex-start' },\n gap: 2,\n maxWidth: '100%',\n};\n\n/**\n * The rule between the calendar and the quick ranges.\n *\n * Two lists of dates side by side with only whitespace between them read as one\n * ragged thing; the rule says which numbers belong to which control. It turns\n * with the layout — a vertical rule when the list is a column beside the\n * calendar, a horizontal one when it has moved above it — because a divider\n * that keeps its axis while the flex direction flips ends up separating nothing.\n */\nconst QUICK_DIVIDER_SX: SxProps<Theme> = {\n borderColor: 'divider',\n borderStyle: 'solid',\n borderWidth: 0,\n borderLeftWidth: { xs: 0, md: '1px' },\n borderBottomWidth: { xs: '1px', md: 0 },\n pl: { xs: 0, md: 2 },\n pb: { xs: 2, md: 0 },\n alignSelf: 'stretch',\n};\n\n/** And the rule above the typed pair, which is a third way in, not a caption. */\nconst FIELDS_DIVIDER_SX: SxProps<Theme> = {\n borderTop: '1px solid',\n borderColor: 'divider',\n pt: 2,\n};\n\ntype Picker = ReturnType<typeof useDateRangePicker>;\n\n/**\n * How many months to draw.\n *\n * A month grid has a floor: seven columns that must stay legible, which is\n * about 280px. Two of them need 580, so on a phone the consumer's\n * `numberOfMonths` is not a preference that can be honoured — it is a request\n * for a layout that does not fit. Capped here rather than left to the consumer,\n * because the consumer chooses for its own reason (the reports dialog wants two\n * because a period often crosses a month boundary) and has no way to know the\n * picker is currently 390px wide.\n *\n * A media query rather than an `sx` breakpoint: this decides what to RENDER,\n * and CSS cannot un-render a second month.\n *\n * The query is a LITERAL, not `theme.breakpoints.down('md')`. The callback form\n * reads the theme from context and throws on a null one, so a consumer that\n * mounts this outside a `ThemeProvider` would crash — which the unit tests here\n * do, and which is a fair thing for a consumer to do.\n */\nfunction useMonthCount(requested: number | undefined): number | undefined {\n const narrow = useMediaQuery(NARROW_QUERY);\n return narrow ? 1 : requested;\n}\n\n/** The grid, in range mode — `Calendar`, never a second implementation of one. */\nfunction RangeCalendar({\n calendarLabel,\n picker,\n value,\n locale,\n weekStartsOn,\n months,\n maxRangeDays,\n}: {\n picker: Picker;\n value: DateRangeDraft;\n locale: string;\n weekStartsOn: WeekStart;\n months: number | undefined;\n maxRangeDays: number | undefined;\n calendarLabel: string;\n}): React.JSX.Element {\n return (\n <Calendar\n key={picker.viewNonce}\n ariaLabel={calendarLabel}\n className={CALENDAR_CLASS}\n selectionMode=\"range\"\n locale={locale}\n // One prop drives the grid's first column AND the day \"this week\" starts\n // on, so a highlighted week can never begin mid-row.\n firstDayOfWeek={weekStartsOn}\n numberOfMonths={months}\n range={{ start: toLocalDay(value.from), end: toLocalDay(value.to) }}\n // BOTH callbacks, and the intermediate one does the work: the other fires\n // only on the click that CLOSES a range, so a picker wired to it alone\n // would not repaint after the first click.\n onIntermediateRangeChange={picker.pickOnCalendar}\n onRangeChange={picker.pickOnCalendar}\n // The same ceiling the quick list is judged against, so the calendar\n // cannot hand back a window the control has just called too long.\n maxRangeLength={maxRangeDays}\n />\n );\n}\n\n/** The quick ranges, inside the rule that separates them from the grid. */\nfunction QuickColumn({\n picker,\n maxRangeDays,\n dataTestId,\n}: {\n picker: Picker;\n maxRangeDays: number | undefined;\n dataTestId: string;\n}): React.JSX.Element | null {\n if (picker.options.length === 0) return null;\n return (\n <Box sx={QUICK_DIVIDER_SX}>\n <DateRangeQuickList\n options={picker.options}\n activeId={picker.activeId}\n onPick={picker.pickQuick}\n reasonFor={(option) =>\n picker.copy.overMax({ maxRangeDays: maxRangeDays ?? option.days, days: option.days })\n }\n label={picker.copy.quickRanges}\n dataTestId={dataTestId}\n />\n </Box>\n );\n}\n\nexport function DateRangePicker({\n value,\n onChange,\n timeZone,\n now,\n maxRangeDays,\n weekStartsOn = 0,\n quickRanges = DEFAULT_QUICK_RANGES,\n locale = 'en-US',\n numberOfMonths,\n messages,\n dataTestId = 'date-range-picker',\n className,\n}: DateRangePickerProps): React.JSX.Element {\n const picker = useDateRangePicker({\n value,\n onChange,\n timeZone,\n now,\n maxRangeDays,\n weekStartsOn,\n quickRanges,\n messages,\n });\n const months = useMonthCount(numberOfMonths);\n\n return (\n <Paper className={className} data-testid={dataTestId} sx={ROOT_SX}>\n <Box sx={BODY_SX}>\n <RangeCalendar\n calendarLabel={picker.copy.calendarLabel}\n picker={picker}\n value={value}\n locale={locale}\n weekStartsOn={weekStartsOn}\n months={months}\n maxRangeDays={maxRangeDays}\n />\n <QuickColumn picker={picker} maxRangeDays={maxRangeDays} dataTestId={dataTestId} />\n </Box>\n <Box sx={FIELDS_DIVIDER_SX}>\n <DateRangeFields\n value={value}\n status={picker.status}\n messages={picker.copy}\n maxRangeDays={maxRangeDays}\n onEdit={picker.editBound}\n statusId={picker.statusId}\n dataTestId={dataTestId}\n />\n </Box>\n </Paper>\n );\n}\n\nexport default DateRangePicker;\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/Slider/Slider.animations.ts"],"sourcesContent":["import { keyframes } from '@mui/material/styles/index.js';\n\nexport const glowAnimation = keyframes`\n 0% {\n box-shadow: 0 0 5px currentColor;\n }\n 50% {\n box-shadow: 0 0 15px currentColor, 0 0 25px currentColor;\n }\n 100% {\n box-shadow: 0 0 5px currentColor;\n }\n`;\n\nexport const pulseAnimation = keyframes`\n 0% {\n transform: scale(1);\n opacity: 1;\n }\n 50% {\n transform: scale(1.5);\n opacity: 0.5;\n }\n 100% {\n transform: scale(2);\n opacity: 0;\n }\n`;\n\nexport const gradientShiftAnimation = keyframes`\n 0% {\n background-position: 0% 50%;\n }\n 50% {\n background-position: 100% 50%;\n }\n 100% {\n background-position: 0% 50%;\n }\n`;\n"],"mappings":";AAAA,SAAS,iBAAiB;AAEnB,IAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYtB,IAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAevB,IAAM,yBAAyB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/feedback/Sonner/Sonner.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport Portal from '@mui/material/Portal/index.js';\nimport React, { createContext, useCallback, useContext, useRef,useState, useMemo } from 'react';\n\nimport { sxRem } from '../../../tokens/relative';\n\nimport type { SonnerContextType, SonnerItem,SonnerProps } from './Sonner.types';\n\nconst SonnerContext = createContext<SonnerContextType | null>(null);\n\nconst DEFAULT_DURATION_MS = 4000;\n\nconst buildToastItem = (\n toast: Omit<SonnerProps, 'id'>,\n id: string,\n type?: SonnerProps['type'],\n): SonnerItem => ({\n ...toast,\n id,\n type: type || toast.type || 'default',\n createdAt: Date.now(),\n visible: true });\n\n// Persistent toasts and `duration: 0` stay until dismissed explicitly.\nconst scheduleAutoDismiss = (\n toast: Omit<SonnerProps, 'id'>,\n id: string,\n dismiss: (id?: string) => void,\n) => {\n if (toast.persistent || toast.duration === 0) return;\n\n window.setTimeout(() => dismiss(id), toast.duration ?? DEFAULT_DURATION_MS);\n};\n\nconst EXIT_TRANSITION_MS = 300;\n\ntype SonnerPromiseOptions<T> = {\n loading: React.ReactNode;\n success: React.ReactNode | ((data: T) => React.ReactNode);\n error: React.ReactNode | ((error: Error) => React.ReactNode);\n};\n\nconst resolveMessage = <T,>(\n message: React.ReactNode | ((value: T) => React.ReactNode),\n value: T,\n): React.ReactNode => (typeof message === 'function' ? message(value) : message);\n\n// Shows a pinned loading toast for the life of a promise, then swaps it for a\n// success or error one. Takes the shortcuts it needs rather than reaching for\n// context, so it is testable on its own.\nconst trackPromiseWithToasts = async <T,>(\n promiseToResolve: Promise<T>,\n options: SonnerPromiseOptions<T>,\n toasts: {\n loading: (message: React.ReactNode) => string;\n success: (message: React.ReactNode) => string;\n error: (message: React.ReactNode) => string;\n dismiss: (id?: string) => void;\n },\n): Promise<T> => {\n const toastId = toasts.loading(options.loading);\n\n try {\n const data = await promiseToResolve;\n toasts.dismiss(toastId);\n toasts.success(resolveMessage(options.success, data));\n return data;\n } catch (err) {\n toasts.dismiss(toastId);\n toasts.error(resolveMessage(options.error, err instanceof Error ? err : new Error(String(err))));\n throw err;\n }\n};\n\nexport const SonnerProvider: React.FC<{\n children: React.ReactNode;\n /**\n * The dismiss button's accessible name, for every toast this provider\n * raises. REQUIRED and mounted ONCE — the shortcut helpers\n * (`sonner.success(…)`) take a message and nothing else by design, so the\n * word cannot be a per-call argument without changing what they are for.\n */\n dismissLabel: string;\n}> = ({ children, dismissLabel }) => {\n const [toasts, setToasts] = useState<SonnerItem[]>([]);\n const toastCounter = useRef(0);\n\n // Hide first, then drop after the exit transition. Passing no id targets every\n // toast; the two branches only differ in which toasts they match, so that is\n // the only thing that varies here.\n const dismiss = useCallback((id?: string) => {\n const matches = (toast: SonnerItem) => id === undefined || toast.id === id;\n\n setToasts((prev) =>\n prev.map((toast) => (matches(toast) ? { ...toast, visible: false } : toast)),\n );\n\n window.setTimeout(() => {\n setToasts((prev) => prev.filter((toast) => !matches(toast)));\n }, EXIT_TRANSITION_MS);\n }, []);\n\n const addToast = useCallback(\n (toast: Omit<SonnerProps, 'id'>, type?: SonnerProps['type']): string => {\n const id = `sonner-${++toastCounter.current}`;\n setToasts((prev) => [...prev, buildToastItem(toast, id, type)]);\n scheduleAutoDismiss(toast, id, dismiss);\n return id;\n },\n [dismiss],\n );\n\n // The six shortcuts differ only by the type they tag and, for loading, by\n // pinning persistent. Built from one factory rather than six near-identical\n // useCallback blocks.\n const makeShortcut = useCallback(\n (type: SonnerProps['type'], extra?: Partial<SonnerProps>) =>\n (message: React.ReactNode, options?: Partial<SonnerProps>) =>\n addToast({ dismissLabel, ...options, ...extra, title: message }, type),\n [addToast],\n );\n\n const toast = useMemo(() => makeShortcut('default'), [makeShortcut]);\n const success = useMemo(() => makeShortcut('success'), [makeShortcut]);\n const error = useMemo(() => makeShortcut('error'), [makeShortcut]);\n const warning = useMemo(() => makeShortcut('warning'), [makeShortcut]);\n const info = useMemo(() => makeShortcut('info'), [makeShortcut]);\n const loading = useMemo(\n () => makeShortcut('loading', { persistent: true }),\n [makeShortcut],\n );\n\n const promise = useCallback(\n <T,>(promiseToResolve: Promise<T>, options: SonnerPromiseOptions<T>): Promise<T> =>\n trackPromiseWithToasts(promiseToResolve, options, { loading, success, error, dismiss }),\n [loading, success, error, dismiss],\n );\n\n const contextValue: SonnerContextType = {\n toast,\n success,\n error,\n warning,\n info,\n loading,\n dismiss,\n promise };\n\n // Register this context globally for imperative API\n useRegisterGlobalToast(contextValue);\n\n return (\n <SonnerContext.Provider value={contextValue}>\n {children}\n <SonnerToaster toasts={toasts} onDismiss={dismiss} />\n </SonnerContext.Provider>\n );\n};\n\nexport const useSonner = (): SonnerContextType => {\n const context = useContext(SonnerContext);\n if (!context) {\n throw new Error('useSonner must be used within a SonnerProvider');\n }\n return context;\n};\n\n// A caller-supplied icon always wins; otherwise the type picks one.\nimport { SonnerToast } from './SonnerToast';\n\nconst SonnerToaster: React.FC<{\n toasts: SonnerItem[];\n onDismiss: (id: string) => void;\n}> = ({ toasts, onDismiss }) => {\n // Limit visible toasts to prevent overflow\n const MAX_VISIBLE_TOASTS = 5;\n const visibleToasts = toasts.slice(-MAX_VISIBLE_TOASTS);\n const hiddenCount = Math.max(0, toasts.length - MAX_VISIBLE_TOASTS);\n\n return (\n <Portal>\n <Box\n sx={{\n position: 'fixed',\n top: 16,\n right: 16,\n zIndex: 9999,\n display: 'flex',\n flexDirection: 'column',\n pointerEvents: 'none',\n maxHeight: 'calc(100vh - 32px)',\n overflowY: 'auto',\n overflowX: 'hidden' }}\n >\n {hiddenCount > 0 && (\n <Box\n sx={{\n p: 1,\n mb: 0.5,\n textAlign: 'center',\n fontSize: sxRem(12),\n color: 'text.secondary',\n pointerEvents: 'none' }}\n >\n +{hiddenCount} more\n </Box>\n )}\n {visibleToasts.map((toast) => (\n <Box key={toast.id} sx={{ pointerEvents: 'auto' }}>\n <SonnerToast {...toast} onDismiss={onDismiss} />\n </Box>\n ))}\n </Box>\n </Portal>\n );\n};\n\n// Global toast instance for imperative API\nlet globalToastContext: SonnerContextType | null = null;\n\n// Hook to register the global context (used internally by SonnerProvider)\nexport const useRegisterGlobalToast = (context: SonnerContextType) => {\n React.useEffect(() => {\n globalToastContext = context;\n return () => {\n globalToastContext = null;\n };\n }, [context]);\n};\n\n// Create a production-ready toast instance for imperative usage\nconst createToastInstance = (): SonnerContextType => {\n const warnNoProvider = () => {\n // Use a more React-appropriate warning mechanism\n if (typeof window !== 'undefined' && window.console && window.console.warn) {\n window.console.warn('Sonner: No SonnerProvider found. Please wrap your app with SonnerProvider.');\n }\n };\n\n const methods: SonnerContextType = {\n toast: (message: React.ReactNode, options?: Partial<SonnerProps>) => {\n if (!globalToastContext) {\n warnNoProvider();\n return 'no-provider';\n }\n return globalToastContext.toast(message, options);\n },\n success: (message: React.ReactNode, options?: Partial<SonnerProps>) => {\n if (!globalToastContext) {\n warnNoProvider();\n return 'no-provider';\n }\n return globalToastContext.success(message, options);\n },\n error: (message: React.ReactNode, options?: Partial<SonnerProps>) => {\n if (!globalToastContext) {\n warnNoProvider();\n return 'no-provider';\n }\n return globalToastContext.error(message, options);\n },\n warning: (message: React.ReactNode, options?: Partial<SonnerProps>) => {\n if (!globalToastContext) {\n warnNoProvider();\n return 'no-provider';\n }\n return globalToastContext.warning(message, options);\n },\n info: (message: React.ReactNode, options?: Partial<SonnerProps>) => {\n if (!globalToastContext) {\n warnNoProvider();\n return 'no-provider';\n }\n return globalToastContext.info(message, options);\n },\n loading: (message: React.ReactNode, options?: Partial<SonnerProps>) => {\n if (!globalToastContext) {\n warnNoProvider();\n return 'no-provider';\n }\n return globalToastContext.loading(message, options);\n },\n dismiss: (id?: string) => {\n if (!globalToastContext) {\n warnNoProvider();\n return;\n }\n globalToastContext.dismiss(id);\n },\n promise: async <T,>(\n promiseToResolve: Promise<T>,\n options: {\n loading: React.ReactNode;\n success: React.ReactNode | ((data: T) => React.ReactNode);\n error: React.ReactNode | ((error: Error) => React.ReactNode);\n },\n ): Promise<T> => {\n if (!globalToastContext) {\n warnNoProvider();\n throw new Error('No SonnerProvider found');\n }\n return globalToastContext.promise(promiseToResolve, options);\n } };\n\n return methods;\n};\n\n// Export toast instance for imperative API usage\nexport const toast = createToastInstance();\n\n// Export Toaster as alias for SonnerProvider for stories compatibility\nexport const Toaster: React.FC<{\n children?: React.ReactNode;\n position?: string;\n theme?: string;\n expand?: boolean;\n richColors?: boolean;\n closeButton?: boolean;\n dismissLabel: string;\n}> = ({ children, dismissLabel }) => (\n <SonnerProvider dismissLabel={dismissLabel}>{children}</SonnerProvider>\n);\n"],"mappings":"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","names":["toast"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/Input/Input.styles.ts"],"sourcesContent":["import { alpha, keyframes } from '@mui/material/styles/index.js';\nimport type { CSSObject, Theme } from '@mui/material/styles/index.js';\n\nimport {\n FILLED_WASH,\n FLOATING_LABEL,\n INPUT_BORDER,\n INPUT_GLASS,\n INPUT_GLOW,\n INPUT_GRADIENT,\n INPUT_PULSE,\n} from './Input.metrics';\nimport type { InputProps } from './Input.types';\n\nimport { fieldEdge } from '../../../tokens/field-edge';\nimport { fieldHeight } from '../../../tokens/field-height';\nimport { fieldRadius } from '../../../tokens/field-radius';\nimport { absoluteInk } from '../../../tokens/ink';\nimport type { SizeValue } from '../../../tokens/vocabulary';\n\ntype InputVariant = NonNullable<InputProps['variant']>;\n\n// The numbers below all come from `./Input.metrics`, which the native renderer\n// reads too — see its header for why MUI's own values are in there as well.\nexport { muiVariantFor, SIZE_MAP } from './Input.metrics';\n\n// Define pulse animation\nconst pulseAnimation = keyframes`\n 0% {\n box-shadow: 0 0 0 0 currentColor;\n opacity: 1;\n }\n 70% {\n box-shadow: 0 0 0 ${INPUT_PULSE.spread}px currentColor;\n opacity: 0;\n }\n 100% {\n box-shadow: 0 0 0 0 currentColor;\n opacity: 0;\n }\n`;\n\nexport const glowStyles = (theme: Theme): CSSObject => ({\n '& .MuiInputBase-root': {\n boxShadow: `0 0 ${INPUT_GLOW.rest.blur}px ${alpha(theme.palette.primary.main, INPUT_GLOW.rest.alpha)}`,\n '&.Mui-focused': {\n boxShadow: `0 0 ${INPUT_GLOW.focused.blur}px ${alpha(theme.palette.primary.main, INPUT_GLOW.focused.alpha)}`,\n },\n },\n});\n\n// A bar behind the field rather than a border on it, so it can pulse outward\n// without the input resizing.\nexport const pulseStyles = (theme: Theme, size: SizeValue = 'md'): CSSObject => ({\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n top: '50%',\n left: '0',\n right: '0',\n height: fieldHeight(theme, size),\n transform: 'translateY(-50%)',\n borderRadius: fieldRadius(theme),\n backgroundColor: theme.palette.primary.main,\n opacity: INPUT_PULSE.opacity,\n animation: `${pulseAnimation} ${INPUT_PULSE.ms / 1000}s infinite`,\n pointerEvents: 'none',\n zIndex: -1,\n },\n});\n\nexport const floatingLabelStyles = (theme: Theme): CSSObject => ({\n '& .MuiInputLabel-root': {\n transform: `translate(${FLOATING_LABEL.rest.x}px, ${FLOATING_LABEL.rest.y}px) scale(1)`,\n '&.MuiInputLabel-shrink': {\n transform: `translate(${FLOATING_LABEL.shrink.x}px, ${FLOATING_LABEL.shrink.y}px) scale(${FLOATING_LABEL.scale})`,\n backgroundColor: theme.palette.background.paper,\n padding: `0 ${FLOATING_LABEL.paddingX}px`,\n },\n },\n});\n\n/**\n * The field's corner: the theme's one field radius (see `tokens/field-radius`).\n * `filled` rounds its top two only — its bottom edge is the underline — and\n * `underline` none, which is how MUI draws those two variants.\n */\nexport const inputRadiusStyles = (theme: Theme, variant?: InputVariant): CSSObject => {\n if (variant === 'underline') return {};\n const radius = fieldRadius(theme);\n if (variant === 'filled') return { borderTopLeftRadius: radius, borderTopRightRadius: radius };\n return { borderRadius: radius };\n};\n\nexport const inputBaseStyles = (theme: Theme, variant?: InputVariant): CSSObject => {\n switch (variant) {\n case 'glass':\n return {\n backgroundColor: alpha(theme.palette.background.paper, INPUT_GLASS.background.rest),\n backdropFilter: `blur(${INPUT_GLASS.blur}px)`,\n border: `${INPUT_BORDER.rest}px solid ${fieldEdge(theme)}`,\n '&:hover': {\n backgroundColor: alpha(theme.palette.background.paper, INPUT_GLASS.background.hover),\n borderColor: alpha(theme.palette.primary.main, INPUT_GLASS.hoverBorderAlpha),\n },\n '&.Mui-focused': {\n backgroundColor: alpha(theme.palette.background.paper, INPUT_GLASS.background.focused),\n borderColor: theme.palette.primary.main,\n boxShadow: `0 0 0 ${INPUT_GLASS.focusRing.width}px ${alpha(theme.palette.primary.main, INPUT_GLASS.focusRing.alpha)}`,\n },\n };\n case 'underline':\n return {\n '&:before': {\n borderBottomColor: fieldEdge(theme),\n },\n '&:hover:not(.Mui-disabled):before': {\n borderBottomColor: theme.palette.primary.main,\n },\n '&:after': {\n borderBottomColor: theme.palette.primary.main,\n },\n };\n case 'gradient':\n return gradientStyles(theme);\n default:\n return {};\n }\n};\n\n/** The 135° fill between the two brand hues, at one of its three strengths. */\nconst gradientFill = (theme: Theme, strength: number): string =>\n `linear-gradient(${INPUT_GRADIENT.angleDeg}deg, ${alpha(theme.palette.primary.main, strength)}, ${alpha(theme.palette.secondary.main, strength)})`;\n\n// The border is a gradient painted behind the field and masked to a 2px ring,\n// since CSS cannot put a gradient on `border-color` directly.\nconst gradientStyles = (theme: Theme): CSSObject => ({\n background: gradientFill(theme, INPUT_GRADIENT.fill.rest),\n border: `${INPUT_GRADIENT.borderWidth}px solid transparent`,\n backgroundOrigin: 'border-box',\n backgroundClip: 'padding-box, border-box',\n position: 'relative',\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n borderRadius: 'inherit',\n background: `linear-gradient(${INPUT_GRADIENT.angleDeg}deg, ${theme.palette.primary.main}, ${theme.palette.secondary.main})`,\n mask: `linear-gradient(${absoluteInk(theme).white} 0 0) content-box, linear-gradient(${absoluteInk(theme).white} 0 0)`,\n maskComposite: 'exclude',\n padding: `${INPUT_GRADIENT.borderWidth}px`,\n zIndex: -1,\n },\n '&:hover': {\n background: gradientFill(theme, INPUT_GRADIENT.fill.hover),\n },\n '&.Mui-focused': {\n background: gradientFill(theme, INPUT_GRADIENT.fill.focused),\n '&::before': {\n background: `linear-gradient(${INPUT_GRADIENT.angleDeg}deg, ${theme.palette.primary.dark}, ${theme.palette.secondary.dark})`,\n },\n },\n});\n\nexport const outlinedStyles = (theme: Theme): CSSObject => ({\n '& fieldset': {\n borderColor: fieldEdge(theme),\n },\n '&:hover fieldset': {\n borderColor: theme.palette.primary.main,\n },\n '&.Mui-focused fieldset': {\n borderColor: theme.palette.primary.main,\n borderWidth: INPUT_BORDER.focused,\n },\n '&.Mui-error fieldset': {\n borderColor: theme.palette.error.main,\n },\n});\n\nexport const filledStyles = (theme: Theme): CSSObject => ({\n backgroundColor: alpha(theme.palette.action.hover, FILLED_WASH.rest),\n '&:hover': {\n backgroundColor: alpha(theme.palette.action.hover, FILLED_WASH.hover),\n },\n '&.Mui-focused': {\n backgroundColor: alpha(theme.palette.action.hover, FILLED_WASH.focused),\n },\n});\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/navigation/AppHeader/AppHeader.tsx"],"sourcesContent":["'use client';\n\nimport Box from '@mui/material/Box/index.js';\nimport React from 'react';\n\nimport { sxRem } from '../../../tokens/relative';\nimport { withDefaults } from '../../../utils/withDefaults';\n\nimport type { AppHeaderProps } from './AppHeader.types';\n\n/** Bar height, before the optional `below` row. */\nconst BAR_MIN_HEIGHT = { regular: 64, dense: 52 } as const;\n\n/** The props {@link HEADER_DEFAULTS} guarantees a value for. */\ntype Defaulted =\n | 'position'\n | 'offsetTop'\n | 'maxWidth'\n | 'divider'\n | 'elevateOnScroll'\n | 'dense'\n | 'disableSpacer'\n | 'dataTestId';\n\n/** `AppHeaderProps` as the body sees them: nothing defaulted is still optional. */\ntype ResolvedHeaderProps = AppHeaderProps & Required<Pick<AppHeaderProps, Defaulted>>;\n\nconst HEADER_DEFAULTS: Pick<ResolvedHeaderProps, Defaulted> = {\n position: 'sticky',\n offsetTop: 0,\n maxWidth: 1200,\n divider: true,\n elevateOnScroll: false,\n dense: false,\n disableSpacer: false,\n dataTestId: 'app-header',\n};\n\n/**\n * Watch the document scroll so a lifted bar can cast a shadow only once there\n * is something under it. Inert (and never attaches a listener) when off.\n */\nfunction useScrolled(enabled: boolean): boolean {\n const [scrolled, setScrolled] = React.useState(false);\n React.useEffect(() => {\n if (!enabled) return undefined;\n const onScroll = (): void => setScrolled(window.scrollY > 0);\n onScroll();\n window.addEventListener('scroll', onScroll, { passive: true });\n return () => window.removeEventListener('scroll', onScroll);\n }, [enabled]);\n return enabled && scrolled;\n}\n\n/**\n * The bar's own height, republished whenever it changes.\n *\n * A `fixed` bar is out of flow, so something has to reserve its space — and a\n * constant cannot, because this bar's height is whatever the caller's slots add\n * up to. A search field in `below`, a status line, a wrapped title: each moves\n * it, and a hard-coded spacer would leave the page's first element under the\n * bar or floating below a gap.\n */\nfunction useMeasuredHeight(enabled: boolean): [React.RefObject<HTMLElement | null>, number] {\n const ref = React.useRef<HTMLElement | null>(null);\n const [height, setHeight] = React.useState(0);\n React.useEffect(() => {\n const node = ref.current;\n if (!enabled || !node) return undefined;\n const measure = (): void => setHeight(node.getBoundingClientRect().height);\n measure();\n // Measured once unconditionally, observed only where the API exists. jsdom\n // has no ResizeObserver, so constructing it unguarded takes down every\n // consumer's test that happens to render a fixed bar — a crash in THEIR\n // suite, thrown from a component they only laid out.\n if (typeof ResizeObserver === 'undefined') return undefined;\n const observer = new ResizeObserver(measure);\n observer.observe(node);\n return () => observer.disconnect();\n }, [enabled]);\n return [ref, height];\n}\n\n/**\n * The bar's own surface. Lifted out of the component both to keep it inside the\n * complexity bar and because the positioning rules are the fiddly part: a\n * `static` bar must claim neither a stacking context nor an offset, and only a\n * `fixed` one needs pinning to the viewport's edges.\n */\nfunction surfaceSx({\n position,\n offsetTop,\n divider,\n scrolled,\n}: Required<Pick<AppHeaderProps, 'position' | 'offsetTop' | 'divider'>> & {\n scrolled: boolean;\n}): Record<string, unknown> {\n return {\n position,\n ...(position === 'static' ? {} : { top: offsetTop, zIndex: 'appBar' }),\n ...(position === 'fixed' ? { left: 0, right: 0 } : {}),\n backgroundColor: 'background.paper',\n borderBottom: divider ? 1 : 0,\n borderColor: 'divider',\n boxShadow: scrolled ? 2 : 0,\n transition: 'box-shadow 150ms ease',\n };\n}\n\n/** The trailing column: the muted note, and the actions under it. */\nconst HeaderTrailing: React.FC<Pick<AppHeaderProps, 'meta' | 'actions'>> = ({ meta, actions }) => {\n if (!meta && !actions) return null;\n return (\n <Box\n sx={{\n flex: '0 0 auto',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'flex-end',\n gap: 0.5,\n }}\n >\n {meta && (\n <Box\n data-testid=\"app-header-meta\"\n sx={{\n fontSize: sxRem(11),\n fontWeight: 700,\n letterSpacing: '0.08em',\n textTransform: 'uppercase',\n color: 'text.disabled',\n lineHeight: 1,\n }}\n >\n {meta}\n </Box>\n )}\n {actions && (\n <Box\n component=\"nav\"\n data-testid=\"app-header-actions\"\n sx={{ display: 'flex', alignItems: 'center', gap: 1 }}\n >\n {actions}\n </Box>\n )}\n </Box>\n );\n};\n\n/**\n * The application bar: a row of slots on one surface, plus an optional second\n * row that belongs to it.\n *\n * It knows nothing about routers, sessions, carts or stores — every slot is a\n * `ReactNode` and every behaviour is a callback, which is what lets one bar\n * serve a storefront, a back office and a platform console without any of them\n * leaking into the others. Compose it with {@link AppHeaderIdentity},\n * {@link AppHeaderStatus} and {@link AppHeaderDetails}, or put your own nodes in\n * the slots.\n *\n * The SURFACE always spans the viewport while the CONTENT stops at `maxWidth`\n * and centres, so the same bar reads as a phone header and as a desktop one\n * without a second component or a breakpoint at the call site.\n */\nexport const AppHeader: React.FC<AppHeaderProps> = (props) => {\n // A table of defaults rather than one per destructured prop: each `= default`\n // is a branch, and nine of them put this component over the complexity bar\n // before it rendered anything.\n const {\n leading,\n children,\n actions,\n meta,\n below,\n position,\n offsetTop,\n maxWidth,\n divider,\n elevateOnScroll,\n dense,\n disableSpacer,\n className,\n dataTestId,\n // True by construction — `withDefaults` fills exactly these keys — but not\n // something TS can follow through a `Partial<T>` table.\n } = withDefaults(props, HEADER_DEFAULTS) as ResolvedHeaderProps;\n\n const scrolled = useScrolled(elevateOnScroll);\n const needsSpacer = position === 'fixed' && !disableSpacer;\n const [ref, height] = useMeasuredHeight(needsSpacer);\n\n return (\n <>\n <Box\n ref={ref}\n component=\"header\"\n className={className}\n data-testid={dataTestId}\n sx={surfaceSx({ position, offsetTop, divider, scrolled })}\n >\n <Box sx={{ maxWidth, mx: 'auto', px: { xs: 2, md: 3 } }}>\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n gap: { xs: 1, md: 2 },\n minHeight: dense ? BAR_MIN_HEIGHT.dense : BAR_MIN_HEIGHT.regular,\n py: 1,\n }}\n >\n {leading}\n {/* The identity takes the slack and is the only part allowed to\n shrink — the actions are targets and the meta note is already\n the smallest thing in the bar. */}\n <Box sx={{ flex: '1 1 auto', minWidth: 0 }}>{children}</Box>\n <HeaderTrailing meta={meta} actions={actions} />\n </Box>\n {below && (\n <Box data-testid={`${dataTestId}-below`} sx={{ pb: 1.5 }}>\n {below}\n </Box>\n )}\n </Box>\n </Box>\n {needsSpacer && <Box aria-hidden data-testid={`${dataTestId}-spacer`} sx={{ height }} />}\n </>\n );\n};\n\nAppHeader.displayName = 'AppHeader';\n\nexport default AppHeader;\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/feedback/Sonner/SonnerToast.tsx"],"sourcesContent":["import SuccessIcon from '@mui/icons-material/CheckCircle';\nimport CloseIcon from '@mui/icons-material/Close';\nimport ErrorIcon from '@mui/icons-material/Error';\nimport InfoIcon from '@mui/icons-material/Info';\nimport WarningIcon from '@mui/icons-material/Warning';\nimport Box from '@mui/material/Box/index.js';\nimport Button from '@mui/material/Button/index.js';\nimport CircularProgress from '@mui/material/CircularProgress/index.js';\nimport Collapse from '@mui/material/Collapse/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 type { CSSObject, Theme } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport { shadowInk } from '../../../tokens/ink';\nimport { sxRem } from '../../../tokens/relative';\n\nimport type { SonnerItem } from './Sonner.types';\nimport type { SonnerProps } from './Sonner.types';\n\nconst renderToastIcon = (icon: SonnerProps['icon'], type: SonnerProps['type']) => {\n if (icon) return icon;\n\n switch (type) {\n case 'success':\n return <SuccessIcon sx={{ fontSize: sxRem(20), color: 'success.main' }} />;\n case 'error':\n return <ErrorIcon sx={{ fontSize: sxRem(20), color: 'error.main' }} />;\n case 'warning':\n return <WarningIcon sx={{ fontSize: sxRem(20), color: 'warning.main' }} />;\n case 'info':\n return <InfoIcon sx={{ fontSize: sxRem(20), color: 'info.main' }} />;\n case 'loading':\n return <CircularProgress size={16} />;\n default:\n return null;\n }\n};\n\n// Errors and toasts flagged important interrupt the screen reader; the rest wait\n// for the next pause. Computed once instead of duplicating the same condition\n// across the role and aria-live attributes.\nconst resolveToastAnnouncement = (important: boolean, type: SonnerProps['type']) => {\n const interrupts = important || type === 'error';\n\n return {\n role: interrupts ? 'alert' : 'status',\n live: (interrupts ? 'assertive' : 'polite') as 'assertive' | 'polite',\n };\n};\n\nconst buildToastStyles = (\n theme: Theme,\n variant: SonnerProps['variant'],\n visible: boolean,\n): CSSObject => {\n const baseStyles: CSSObject = {\n borderRadius: theme.spacing(1.5),\n border: `1px solid ${theme.palette.divider}`,\n backgroundColor: theme.palette.background.paper,\n boxShadow: theme.shadows[4],\n transition: theme.transitions.create(['all', 'transform', 'opacity'], {\n duration: theme.transitions.duration.short,\n }),\n transform: visible ? 'scale(1)' : 'scale(0.95)',\n opacity: visible ? 1 : 0,\n };\n\n switch (variant) {\n case 'glass':\n return {\n ...baseStyles,\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\n case 'minimal':\n return {\n ...baseStyles,\n backgroundColor: theme.palette.background.default,\n border: 'none',\n boxShadow: 'none',\n borderLeft: `4px solid ${theme.palette.primary.main}`,\n borderRadius: 0,\n };\n\n default:\n return baseStyles;\n }\n};\n\n// Title, description and the optional action row. Split out so the toast shell\n// keeps only its own concerns — announcement, styling and dismissal.\nconst ToastContent: React.FC<{\n title?: SonnerProps['title'];\n description?: SonnerProps['description'];\n important: boolean;\n action?: SonnerProps['action'];\n cancel?: SonnerProps['cancel'];\n}> = ({ title, description, important, action, cancel }) => (\n <Box sx={{ flex: 1, minWidth: 0 }}>\n {title && (\n <Typography\n variant=\"body2\"\n sx={{\n fontWeight: important ? 600 : 500,\n color: 'text.primary',\n mb: description ? 0.5 : 0,\n }}\n >\n {title}\n </Typography>\n )}\n\n {description && (\n <Typography variant=\"body2\" sx={{ color: 'text.secondary', fontSize: sxRem(14) }}>\n {description}\n </Typography>\n )}\n\n {(action || cancel) && (\n <Box sx={{ display: 'flex', gap: 1, mt: 1.5 }}>\n {action && (\n <ToastActionButton action={action} buttonVariant=\"contained\" />\n )}\n {cancel && <ToastActionButton action={cancel} buttonVariant=\"outlined\" />}\n </Box>\n )}\n </Box>\n);\n\nconst ToastActionButton: React.FC<{\n action: NonNullable<SonnerProps['action']>;\n buttonVariant: 'contained' | 'outlined';\n}> = ({ action, buttonVariant }) => (\n <Button\n size=\"small\"\n onClick={action.onClick}\n variant={buttonVariant}\n sx={{ fontSize: sxRem(12), py: 0.5, px: 1.5 }}\n >\n {action.label}\n </Button>\n);\n\nexport const SonnerToast: React.FC<SonnerItem & { onDismiss: (id: string) => void }> = ({\n id,\n title,\n description,\n type = 'default',\n variant = 'default',\n closable = true,\n dismissLabel,\n action,\n cancel,\n icon,\n important = false,\n visible,\n onDismiss,\n}) => {\n const theme = useTheme();\n const announcement = resolveToastAnnouncement(important, type);\n\n const handleDismiss = () => {\n onDismiss(id);\n };\n\n return (\n <Collapse in={visible} timeout={200}>\n <Box\n role={announcement.role}\n aria-live={announcement.live}\n aria-atomic=\"true\"\n sx={{\n ...buildToastStyles(theme, variant, visible),\n p: 2,\n mb: 1,\n minWidth: 356,\n maxWidth: 400,\n display: 'flex',\n alignItems: 'flex-start',\n gap: 1.5,\n }}\n >\n {renderToastIcon(icon, type)}\n\n <ToastContent\n title={title}\n description={description}\n important={important}\n action={action}\n cancel={cancel}\n />\n\n {closable && (\n <IconButton\n size=\"small\"\n onClick={handleDismiss}\n aria-label={dismissLabel}\n sx={{\n ml: 'auto',\n color: 'text.secondary',\n '&:hover': {\n backgroundColor: 'action.hover',\n },\n }}\n >\n <CloseIcon fontSize=\"small\" />\n </IconButton>\n )}\n </Box>\n </Collapse>\n );\n};\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/CategorySelect/CategoryPanelHead.tsx"],"sourcesContent":["'use client';\n\nimport type { CategorySelectCopy } from '../../../copy';\nimport Box from '@mui/material/Box/index.js';\nimport InputBase from '@mui/material/InputBase/index.js';\nimport { alpha, type Theme } from '@mui/material/styles/index.js';\n\nimport { SearchGlyph } from './CategoryIcons';\nimport {\n chipSx,\n chipWrapSx,\n panelHeadSx,\n pinnedLabelSx,\n pinnedSx,\n} from './CategorySelect.styles';\nimport type { CategorySelectionChip } from './CategorySelect.types';\nimport { fieldBorder, fieldHeight } from '../../../tokens/field-height';\nimport { fieldRadiusPx } from '../../../tokens/field-radius';\nimport { sxRem } from '../../../tokens/relative';\n\ninterface PanelHeadProps {\n query: string;\n placeholder: string;\n sheet: boolean;\n /** Quick actions belong to multi-select only; single-select has nothing to bulk-do. */\n quickActions?: React.ReactNode;\n onQueryChange: (next: string) => void;\n searchInputRef: React.RefObject<HTMLInputElement | null>;\n dataTestId: string;\n copy: CategorySelectCopy;\n}\n\nconst searchFieldSx = {\n position: 'relative',\n display: 'flex',\n alignItems: 'center',\n '& input': {\n width: '100%',\n height: fieldHeight,\n padding: '0 30px 0 32px',\n fontSize: sxRem(13),\n border: fieldBorder,\n borderRadius: fieldRadiusPx,\n background: 'background.paper',\n color: 'text.primary',\n '&:focus': {\n outline: 'none',\n borderColor: 'primary.main',\n // 0x26 of 0xFF: the ring's old hex-alpha suffix, kept exact.\n boxShadow: (theme: Theme) => `0 0 0 3px ${alpha(theme.palette.primary.main, 0x26 / 0xff)}`,\n },\n },\n} as const;\n\nconst clearButtonSx = {\n position: 'absolute',\n right: 7,\n width: 20,\n height: 20,\n border: 0,\n background: 'action.selected',\n color: 'text.secondary',\n borderRadius: '50%',\n display: 'grid',\n placeItems: 'center',\n cursor: 'pointer',\n fontSize: sxRem(12),\n padding: 0,\n lineHeight: 1,\n} as const;\n\n/** Search field, its clear affordance, and the optional quick-action row. */\nexport function CategoryPanelHead({\n query,\n placeholder,\n sheet,\n quickActions,\n onQueryChange,\n searchInputRef,\n dataTestId,\n copy,\n}: PanelHeadProps): React.JSX.Element {\n return (\n <Box sx={(theme) => panelHeadSx(theme, sheet)}>\n <Box sx={searchFieldSx}>\n <SearchGlyph\n style={{\n position: 'absolute',\n left: 10,\n width: 15,\n height: 15,\n opacity: 0.55,\n pointerEvents: 'none',\n }}\n />\n <InputBase\n inputRef={searchInputRef}\n value={query}\n placeholder={placeholder}\n autoComplete=\"off\"\n inputProps={{ 'aria-label': placeholder, 'data-testid': `${dataTestId}-search` }}\n onChange={(event) => onQueryChange(event.target.value)}\n sx={{ width: '100%' }}\n />\n {query.length > 0 && (\n <Box\n component=\"button\"\n type=\"button\"\n aria-label={copy.search.clear}\n data-testid={`${dataTestId}-search-clear`}\n sx={clearButtonSx}\n onClick={() => onQueryChange('')}\n >\n ×\n </Box>\n )}\n </Box>\n {quickActions && (\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n gap: '10px',\n marginTop: '8px',\n fontSize: sxRem(12),\n }}\n >\n {quickActions}\n </Box>\n )}\n </Box>\n );\n}\n\ninterface PinnedTrayProps {\n chips: CategorySelectionChip[];\n onRemove: (chipId: string) => void;\n dataTestId: string;\n copy: CategorySelectCopy;\n}\n\n/**\n * The selected categories, pinned above the list.\n *\n * Pinned rather than left in place because a selection made at the bottom of a\n * ten-category tree scrolls out of sight the moment you look for the next one —\n * and a search hides it entirely. Here it survives both.\n */\nexport function CategoryPinnedTray({\n chips,\n onRemove,\n dataTestId,\n copy,\n}: PinnedTrayProps): React.JSX.Element | null {\n if (chips.length === 0) return null;\n return (\n <Box sx={pinnedSx} data-testid={`${dataTestId}-pinned`}>\n <Box sx={pinnedLabelSx}>{copy.search.pinnedLabel(chips.length)}</Box>\n <Box sx={chipWrapSx}>\n {chips.map((chip) => (\n <Box component=\"span\" key={chip.id} sx={chipSx}>\n {chip.label}\n <button\n type=\"button\"\n aria-label={copy.search.removeChip(chip.label)}\n data-testid={`${dataTestId}-unpin-${chip.id}`}\n onClick={() => onRemove(chip.id)}\n >\n ×\n </button>\n </Box>\n ))}\n </Box>\n </Box>\n );\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/layout/ContentToolbar/SavedViewsMenu.tsx"],"sourcesContent":["'use client';\n\nimport CheckIcon from '@mui/icons-material/Check';\nimport ChevronDownIcon from '@mui/icons-material/KeyboardArrowDown';\nimport KebabIcon from '@mui/icons-material/MoreVert';\nimport ViewIcon from '@mui/icons-material/Visibility';\nimport Box from '@mui/material/Box/index.js';\nimport Button from '@mui/material/Button/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 Stack from '@mui/material/Stack/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport React, { useState } from 'react';\n\nimport type {\n SavedViewLike,\n SavedViewsLabels,\n SavedViewsMenuProps,\n} from './ContentToolbar.types';\nimport { fieldHeight } from '../../../tokens/field-height';\nimport { fieldRadiusPx } from '../../../tokens/field-radius';\nimport { sxRem } from '../../../tokens/relative';\n\n/** How many non-pinned views show under \"Recentes\". */\nconst RECENT_LIMIT = 5;\n\ninterface RowHandlers<V extends SavedViewLike> {\n apply: (view: V) => void;\n onEdit: (view: V) => void;\n onDelete: (view: V) => void;\n onSetDefault: (view: V) => void;\n onTogglePin: (view: V) => void;\n onToggleShare: (view: V) => void;\n}\n\nfunction DefaultTag({ label, testId }: { label: string; testId: string }): React.JSX.Element {\n return (\n <Box\n component=\"span\"\n data-testid={testId}\n sx={{ px: 0.75, py: 0.125, borderRadius: 1, fontSize: sxRem(11.2), bgcolor: 'primary.main', color: 'primary.contrastText' }}\n >\n {label}\n </Box>\n );\n}\n\ninterface KebabAction {\n id: string;\n label: string;\n danger?: boolean;\n run: () => void;\n}\n\n/** Build the per-view ⋮ actions; owner-only mutations follow \"Apply\". */\nfunction buildActions<V extends SavedViewLike>(\n view: V,\n handlers: RowHandlers<V>,\n labels: SavedViewsLabels,\n): KebabAction[] {\n const actions: KebabAction[] = [{ id: 'apply', label: labels.apply, run: () => handlers.apply(view) }];\n if (!view.isOwner) return actions;\n if (!view.isDefault) {\n actions.push({ id: 'default', label: labels.setDefault, run: () => handlers.onSetDefault(view) });\n }\n actions.push({ id: 'pin', label: view.pinned ? labels.unpin : labels.pin, run: () => handlers.onTogglePin(view) });\n actions.push({ id: 'share', label: view.shared ? labels.unshare : labels.share, run: () => handlers.onToggleShare(view) });\n actions.push({ id: 'edit', label: labels.edit, run: () => handlers.onEdit(view) });\n actions.push({ id: 'delete', label: labels.remove, danger: true, run: () => handlers.onDelete(view) });\n return actions;\n}\n\nfunction ViewKebab<V extends SavedViewLike>({\n view,\n handlers,\n labels,\n testIdPrefix,\n}: {\n view: V;\n handlers: RowHandlers<V>;\n labels: SavedViewsLabels;\n testIdPrefix: string;\n}): React.JSX.Element {\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n const close = (): void => setAnchorEl(null);\n return (\n <>\n <IconButton\n size=\"small\"\n aria-label={`${labels.apply} ${view.name}`}\n data-testid={`${testIdPrefix}-kebab-${view.id}`}\n onClick={(event) => setAnchorEl(event.currentTarget)}\n sx={{ width: 28, height: 28, color: 'text.secondary' }}\n >\n <KebabIcon sx={{ fontSize: sxRem(16) }} />\n </IconButton>\n <Menu anchorEl={anchorEl} open={Boolean(anchorEl)} onClose={close}>\n {buildActions(view, handlers, labels).map((action) => (\n <MenuItem\n key={action.id}\n data-testid={`${testIdPrefix}-item-${action.id}-${view.id}`}\n onClick={() => {\n action.run();\n close();\n }}\n sx={action.danger ? { color: 'error.main' } : undefined}\n >\n {action.label}\n </MenuItem>\n ))}\n </Menu>\n </>\n );\n}\n\nfunction ViewRow<V extends SavedViewLike>({\n view,\n handlers,\n labels,\n testIdPrefix,\n}: {\n view: V;\n handlers: RowHandlers<V>;\n labels: SavedViewsLabels;\n testIdPrefix: string;\n}): React.JSX.Element {\n return (\n <Stack direction=\"row\" spacing={1} sx={{ alignItems: 'center' }} data-testid={`${testIdPrefix}-row-${view.id}`}>\n <Box\n onClick={() => handlers.apply(view)}\n sx={{ flex: 1, minWidth: 0, cursor: 'pointer', display: 'flex', alignItems: 'center', gap: 0.75 }}\n data-testid={`${testIdPrefix}-apply-${view.id}`}\n >\n <Typography component=\"span\" sx={{ fontSize: sxRem(14) }}>\n {view.name}\n </Typography>\n {view.isDefault && <DefaultTag label={labels.defaultTag} testId={`${testIdPrefix}-default-${view.id}`} />}\n </Box>\n <ViewKebab view={view} handlers={handlers} labels={labels} testIdPrefix={testIdPrefix} />\n </Stack>\n );\n}\n\nfunction ViewSection<V extends SavedViewLike>({\n title,\n list,\n sectionKey,\n handlers,\n labels,\n testIdPrefix,\n}: {\n title: string;\n list: V[];\n sectionKey: string;\n handlers: RowHandlers<V>;\n labels: SavedViewsLabels;\n testIdPrefix: string;\n}): React.JSX.Element | null {\n if (list.length === 0) return null;\n return (\n <Box data-testid={`${testIdPrefix}-section-${sectionKey}`}>\n <Typography component=\"span\" sx={{ fontSize: sxRem(12), fontWeight: 600, color: 'text.secondary' }}>\n {title}\n </Typography>\n <Stack spacing={0.5} sx={{ mt: 0.5 }}>\n {list.map((view) => (\n <ViewRow key={view.id} view={view} handlers={handlers} labels={labels} testIdPrefix={testIdPrefix} />\n ))}\n </Stack>\n </Box>\n );\n}\n\n/** A borderless footer text button (Save current / Manage all). */\nfunction FooterButton({\n label,\n testId,\n onClick,\n}: {\n label: string;\n testId: string;\n onClick: () => void;\n}): React.JSX.Element {\n return (\n <Button variant=\"text\" size=\"small\" color=\"inherit\" onClick={onClick} data-testid={testId} sx={{ textTransform: 'none' }}>\n {label}\n </Button>\n );\n}\n\n/** The popover contents: the built-in Main vision default, saved-view sections, and footer. */\nfunction PopoverBody<V extends SavedViewLike>({\n views,\n pinned,\n recent,\n activeViewName,\n labels,\n handlers,\n onSelectMain,\n onSaveCurrent,\n onManageAll,\n testIdPrefix,\n}: {\n views: V[];\n pinned: V[];\n recent: V[];\n activeViewName?: string;\n labels: SavedViewsLabels;\n handlers: RowHandlers<V>;\n onSelectMain: () => void;\n onSaveCurrent: () => void;\n onManageAll: () => void;\n testIdPrefix: string;\n}): React.JSX.Element {\n return (\n <Stack spacing={1.5} sx={{ p: 1.5, width: 300 }} data-testid={`${testIdPrefix}-popover`}>\n {/* Built-in no-filter default, always available above the saved views. */}\n <MenuItem data-testid={`${testIdPrefix}-main`} selected={!activeViewName} onClick={onSelectMain} sx={{ borderRadius: 1, px: 1, gap: 1 }}>\n <Box component=\"span\" sx={{ flex: 1, minWidth: 0, fontSize: sxRem(14) }}>\n {labels.mainView}\n </Box>\n {!activeViewName && <CheckIcon sx={{ fontSize: sxRem(16), color: 'primary.main' }} />}\n </MenuItem>\n {views.length === 0 ? (\n <Typography sx={{ fontSize: sxRem(12), color: 'text.secondary' }}>{labels.empty}</Typography>\n ) : (\n <>\n <ViewSection title={labels.pinned} list={pinned} sectionKey=\"pinned\" handlers={handlers} labels={labels} testIdPrefix={testIdPrefix} />\n <ViewSection title={labels.recent} list={recent} sectionKey=\"recent\" handlers={handlers} labels={labels} testIdPrefix={testIdPrefix} />\n </>\n )}\n <Box sx={{ borderTop: 1, borderColor: 'divider', pt: 1 }}>\n <Stack spacing={0.5} sx={{ alignItems: 'flex-start' }}>\n <FooterButton label={labels.saveCurrent} testId={`${testIdPrefix}-save-current`} onClick={onSaveCurrent} />\n <FooterButton label={labels.manageAll} testId={`${testIdPrefix}-manage-all`} onClick={onManageAll} />\n </Stack>\n </Box>\n </Stack>\n );\n}\n\n/**\n * Stateless saved-views dropdown: a neutral trigger (styled like the sibling\n * toolbar controls) that shows `activeViewName` when a view is applied, else the\n * built-in \"Main vision\" label. The popover lists the Main vision default plus\n * pinned + recent views; a per-view ⋮ exposes owner-only mutations. This\n * component owns NO data — every action is a callback, so a page-level Connector\n * wires it to the backend.\n */\nexport function SavedViewsMenu<V extends SavedViewLike = SavedViewLike>({\n views,\n activeViewName,\n onApply,\n onSelectMain,\n onSaveCurrent,\n onEdit,\n onDelete,\n onSetDefault,\n onTogglePin,\n onToggleShare,\n onManageAll,\n labels: labelOverrides,\n testIdPrefix = 'views',\n}: SavedViewsMenuProps<V>): React.JSX.Element {\n const [anchorEl, setAnchorEl] = useState<HTMLButtonElement | null>(null);\n const close = (): void => setAnchorEl(null);\n const runAndClose = (action: () => void) => (): void => {\n action();\n close();\n };\n const labels = labelOverrides;\n const pinned = views.filter((view) => view.pinned);\n const recent = views.filter((view) => !view.pinned).slice(0, RECENT_LIMIT);\n\n const handlers: RowHandlers<V> = {\n apply: (view) => {\n onApply(view);\n close();\n },\n onEdit,\n onDelete,\n onSetDefault,\n onTogglePin,\n onToggleShare,\n };\n\n return (\n <>\n <Button\n variant=\"text\"\n size=\"small\"\n color=\"inherit\"\n onClick={(event) => setAnchorEl(event.currentTarget)}\n data-testid={`${testIdPrefix}-button`}\n aria-haspopup=\"menu\"\n aria-expanded={Boolean(anchorEl)}\n aria-label={activeViewName ?? labels.mainView}\n sx={{ minWidth: 0, height: fieldHeight, px: 1, gap: 0.5, borderRadius: fieldRadiusPx, color: 'text.primary', textTransform: 'none', fontWeight: 600 }}\n >\n {/* Mobile: an eye icon stands in for the view name to keep the toolbar one line. */}\n <ViewIcon sx={{ fontSize: sxRem(18), display: { xs: 'inline-flex', md: 'none' } }} />\n <Box component=\"span\" sx={{ display: { xs: 'none', md: 'inline' } }}>\n {activeViewName ?? labels.mainView}\n </Box>\n <ChevronDownIcon sx={{ fontSize: sxRem(14) }} />\n </Button>\n <Popover\n open={Boolean(anchorEl)}\n anchorEl={anchorEl}\n onClose={close}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'right' }}\n transformOrigin={{ vertical: 'top', horizontal: 'right' }}\n >\n <PopoverBody\n views={views}\n pinned={pinned}\n recent={recent}\n activeViewName={activeViewName}\n labels={labels}\n handlers={handlers}\n onSelectMain={runAndClose(onSelectMain)}\n onSaveCurrent={runAndClose(onSaveCurrent)}\n onManageAll={runAndClose(onManageAll)}\n testIdPrefix={testIdPrefix}\n />\n </Popover>\n </>\n );\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/typography/Code/Code.tsx"],"sourcesContent":["import Check from '@mui/icons-material/Check';\nimport ContentCopy from '@mui/icons-material/ContentCopy';\nimport Box from '@mui/material/Box/index.js';\nimport IconButton from '@mui/material/IconButton/index.js';\nimport Tooltip from '@mui/material/Tooltip/index.js';\nimport { alpha, styled } from '@mui/material/styles/index.js';\nimport React, { useState } from 'react';\n\nimport type { CodeProps } from './Code.types';\nimport { modeInk, neutralTones } from '../../../tokens/ink';\nimport { rem } from '../../../tokens/relative';\n\nconst StyledCodeContainer = styled(Box, {\n shouldForwardProp: (prop) =>\n !['customVariant', 'customSize', 'copyable'].includes(prop as string),\n})<{\n customVariant?: string;\n customSize?: string;\n copyable?: boolean;\n component?: React.ElementType;\n}>(({ theme, customVariant = 'inline', customSize = 'md', copyable }) => {\n // Size mapping\n const sizeMap = {\n xs: { fontSize: rem(theme, 12), padding: '2px 4px' },\n sm: { fontSize: rem(theme, 13), padding: '3px 6px' },\n md: { fontSize: rem(theme, 14), padding: '4px 8px' },\n lg: { fontSize: rem(theme, 16), padding: '6px 12px' },\n };\n\n const blockSizeMap = {\n xs: { fontSize: rem(theme, 12), padding: '8px 12px' },\n sm: { fontSize: rem(theme, 13), padding: '12px 16px' },\n md: { fontSize: rem(theme, 14), padding: '16px 20px' },\n lg: { fontSize: rem(theme, 16), padding: '20px 24px' },\n };\n\n const baseStyles = {\n fontFamily: 'Monaco, Menlo, \"Ubuntu Mono\", \"Courier New\", monospace',\n lineHeight: 1.5,\n borderRadius: theme.shape.borderRadius,\n transition: 'all 0.2s ease',\n position: 'relative' as const,\n };\n\n // Variant-specific styles\n const variantStyles = {\n inline: {\n ...baseStyles,\n display: 'inline',\n backgroundColor: alpha(theme.palette.primary.main, 0.08),\n color: theme.palette.primary.main,\n border: `1px solid ${alpha(theme.palette.primary.main, 0.12)}`,\n ...sizeMap[customSize as keyof typeof sizeMap],\n },\n block: {\n ...baseStyles,\n display: 'block',\n backgroundColor:\n theme.palette.mode === 'dark'\n ? alpha(neutralTones(theme).inverseSurface, 0.95)\n : alpha(neutralTones(theme).surface, 0.95),\n color:\n theme.palette.mode === 'dark' ? modeInk(theme) : theme.palette.text.primary,\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n overflow: 'auto',\n whiteSpace: 'pre' as const,\n ...blockSizeMap[customSize as keyof typeof blockSizeMap],\n ...(copyable && {\n paddingTop: blockSizeMap[customSize as keyof typeof blockSizeMap].padding.split(' ')[0],\n paddingRight: '60px',\n }),\n },\n highlight: {\n ...baseStyles,\n display: 'block',\n background: `linear-gradient(135deg, ${alpha(theme.palette.primary.main, 0.1)} 0%, ${alpha(theme.palette.secondary.main, 0.1)} 100%)`,\n color: theme.palette.text.primary,\n border: `1px solid ${alpha(theme.palette.primary.main, 0.2)}`,\n borderLeft: `4px solid ${theme.palette.primary.main}`,\n overflow: 'auto',\n whiteSpace: 'pre' as const,\n ...blockSizeMap[customSize as keyof typeof blockSizeMap],\n ...(copyable && {\n paddingTop: blockSizeMap[customSize as keyof typeof blockSizeMap].padding.split(' ')[0],\n paddingRight: '60px',\n }),\n },\n };\n\n return variantStyles[customVariant as keyof typeof variantStyles] || variantStyles.inline;\n});\n\nconst StyledCode = styled('code')({\n margin: 0,\n padding: 0,\n backgroundColor: 'transparent',\n border: 'none',\n fontFamily: 'inherit',\n fontSize: 'inherit',\n lineHeight: 'inherit',\n color: 'inherit',\n});\n\nconst CopyButton = styled(IconButton)(({ theme }) => ({\n position: 'absolute',\n top: theme.spacing(1),\n right: theme.spacing(1),\n width: 32,\n height: 32,\n backgroundColor:\n theme.palette.mode === 'dark'\n ? alpha(theme.palette.background.paper, 0.8)\n : theme.palette.background.paper,\n backdropFilter: theme.palette.mode === 'dark' ? 'blur(8px)' : 'none',\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n boxShadow: theme.palette.mode === 'light' ? theme.shadows[1] : 'none',\n '&:hover': {\n backgroundColor:\n theme.palette.mode === 'dark'\n ? alpha(theme.palette.background.paper, 0.9)\n : neutralTones(theme).surface,\n transform: 'scale(1.05)',\n },\n '& .MuiSvgIcon-root': {\n fontSize: rem(theme, 16),\n },\n}));\n\nconst LanguageLabel = styled(Box)(({ theme }) => ({\n position: 'absolute',\n top: theme.spacing(1),\n left: theme.spacing(2),\n fontSize: rem(theme, 12),\n fontWeight: 500,\n color: alpha(theme.palette.text.primary, 0.6),\n backgroundColor:\n theme.palette.mode === 'dark'\n ? alpha(theme.palette.background.paper, 0.8)\n : theme.palette.background.paper,\n padding: '2px 8px',\n borderRadius: theme.shape.borderRadius / 2,\n backdropFilter: theme.palette.mode === 'dark' ? 'blur(8px)' : 'none',\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n boxShadow: theme.palette.mode === 'light' ? theme.shadows[1] : 'none',\n}));\n\n// Renders each source line beside a gutter number. Keys combine the line number\n// with a slice of the content and its length, so editing one line in place does\n// not reshuffle the keys of the lines around it.\nconst renderNumberedLines = (source: string) =>\n source.split('\\n').map((line, index) => {\n const stableKey = `line-${index + 1}-${line.slice(0, 10).replace(/\\s+/g, '')}-${line.length}`;\n\n return (\n <div key={stableKey} style={{ display: 'flex' }}>\n <span\n style={{\n display: 'inline-block',\n minWidth: '3em',\n opacity: 0.5,\n userSelect: 'none',\n marginRight: '1em',\n textAlign: 'right',\n }}\n >\n {index + 1}\n </span>\n <span>{line}</span>\n </div>\n );\n });\n\n// Only block-ish variants get a language label or a copy affordance.\nconst resolveCodeFlags = (\n variant: CodeProps['variant'],\n copyable: boolean,\n language: CodeProps['language'],\n) => {\n const isBlock = variant === 'block' || variant === 'highlight';\n return {\n isBlock,\n showCopy: copyable && isBlock,\n showLanguage: Boolean(language) && isBlock,\n };\n};\n\n// Owns its own \"just copied\" flash. Keeping it here rather than inline in Code\n// means the copied/not-copied branches do not count against the main render, and\n// the flash re-renders only the button. Non-string children are still a no-op on\n// click, exactly as before.\nconst CodeCopyButton: React.FC<{ source: React.ReactNode }> = ({ source }) => {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = async () => {\n if (typeof source !== 'string') return;\n try {\n await navigator.clipboard.writeText(source);\n setCopied(true);\n window.setTimeout(() => setCopied(false), 2000);\n } catch {\n // Silently fail if clipboard access is denied\n }\n };\n\n return (\n <Tooltip title={copied ? 'Copied!' : 'Copy code'}>\n <CopyButton onClick={handleCopy} size=\"small\" color={copied ? 'success' : 'default'}>\n {copied ? <Check /> : <ContentCopy />}\n </CopyButton>\n </Tooltip>\n );\n};\n\nexport const Code = React.forwardRef<HTMLElement, CodeProps>(\n (\n {\n variant = 'inline',\n language,\n copyable = false,\n lineNumbers = false,\n size = 'md',\n children,\n ...props\n },\n ref,\n ) => {\n const { isBlock, showCopy, showLanguage } = resolveCodeFlags(variant, copyable, language);\n\n // Process children for line numbers if needed\n const processedChildren = React.useMemo(() => {\n if (!lineNumbers || !isBlock || typeof children !== 'string') {\n return children;\n }\n\n return renderNumberedLines(children);\n }, [children, lineNumbers, isBlock]);\n\n return (\n <StyledCodeContainer\n ref={ref}\n component={variant === 'inline' ? 'span' : 'div'}\n customVariant={variant}\n customSize={size}\n copyable={showCopy}\n {...props}\n >\n {showLanguage && <LanguageLabel>{language}</LanguageLabel>}\n\n <StyledCode>{processedChildren}</StyledCode>\n\n {showCopy && <CodeCopyButton source={children} />}\n </StyledCodeContainer>\n );\n },\n);\n\nCode.displayName = 'Code';"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/layout/Box/Box.tsx"],"sourcesContent":["import MuiBox from '@mui/material/Box/index.js';\nimport type { SxProps, Theme } from '@mui/material/styles/index.js';\nimport * as React from 'react';\n\nimport { resolveBoxLayout, splitBoxProps, type BoxLayout } from './box-layout';\nimport type { BoxProps } from './Box.types';\nimport { resolveTestId } from '../../../platform/test-id';\nimport { useUiTheme } from '../../../provider/use-ui-theme';\n\n/**\n * `sx` is not CSS: it reads a bare number on `padding`, `margin` or `gap` as\n * SPACING UNITS, on `borderRadius` as a multiple of `shape.borderRadius`, and a\n * `width` of `1` or less as a fraction. The resolver's numbers are already px,\n * so every one of them is written as a px string — otherwise a `p={2}` box\n * renders 128px of padding on the web and 16dp on native, which is the one\n * thing this component exists to rule out.\n */\nconst PX_KEYS = new Set<keyof BoxLayout>([\n 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft',\n 'marginTop', 'marginRight', 'marginBottom', 'marginLeft',\n 'gap', 'borderRadius', 'borderWidth', 'width', 'height',\n]);\n\nexport function layoutToSx(layout: BoxLayout): Record<string, string | number> {\n return Object.fromEntries(\n Object.entries(layout).map(([key, value]) => [\n key,\n typeof value === 'number' && PX_KEYS.has(key as keyof BoxLayout) ? `${value}px` : value,\n ]),\n );\n}\n\n/**\n * The web `Box`: MUI's, with the neutral layout props resolved into `sx` ahead\n * of whatever `sx` the caller adds — so the caller's escape hatch still wins.\n */\nexport const Box = React.forwardRef<HTMLDivElement, BoxProps>(\n ({ children, sx, ...props }, ref) => {\n const theme = useUiTheme();\n const { layout, rest } = splitBoxProps(props);\n const resolved = layoutToSx(resolveBoxLayout(layout, theme)) as SxProps<Theme>;\n const testId = resolveTestId(layout);\n const merged: SxProps<Theme> = [\n resolved,\n ...(Array.isArray(sx) ? sx : sx === undefined ? [] : [sx]),\n ] as SxProps<Theme>;\n\n return (\n <MuiBox ref={ref} sx={merged} data-testid={testId} {...rest}>\n {children}\n </MuiBox>\n );\n },\n);\n\nBox.displayName = 'Box';\n"],"mappings":";;;;;;;;;;;;AAAA,OAAO,YAAY;AAEnB,YAAY,WAAW;AA8CjB;AA/BN,IAAM,UAAU,oBAAI,IAAqB;AAAA,EACvC;AAAA,EAAc;AAAA,EAAgB;AAAA,EAAiB;AAAA,EAC/C;AAAA,EAAa;AAAA,EAAe;AAAA,EAAgB;AAAA,EAC5C;AAAA,EAAO;AAAA,EAAgB;AAAA,EAAe;AAAA,EAAS;AACjD,CAAC;AAEM,SAAS,WAAW,QAAoD;AAC7E,SAAO,OAAO;AAAA,IACZ,OAAO,QAAQ,MAAM,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AAAA,MAC3C;AAAA,MACA,OAAO,UAAU,YAAY,QAAQ,IAAI,GAAsB,IAAI,GAAG,KAAK,OAAO;AAAA,IACpF,CAAC;AAAA,EACH;AACF;AAMO,IAAM,MAAY;AAAA,EACvB,CAAC,EAAE,UAAU,IAAI,GAAG,MAAM,GAAG,QAAQ;AACnC,UAAM,QAAQ,WAAW;AACzB,UAAM,EAAE,QAAQ,KAAK,IAAI,cAAc,KAAK;AAC5C,UAAM,WAAW,WAAW,iBAAiB,QAAQ,KAAK,CAAC;AAC3D,UAAM,SAAS,cAAc,MAAM;AACnC,UAAM,SAAyB;AAAA,MAC7B;AAAA,MACA,GAAI,MAAM,QAAQ,EAAE,IAAI,KAAK,OAAO,SAAY,CAAC,IAAI,CAAC,EAAE;AAAA,IAC1D;AAEA,WACE,oBAAC,UAAO,KAAU,IAAI,QAAQ,eAAa,QAAS,GAAG,MACpD,UACH;AAAA,EAEJ;AACF;AAEA,IAAI,cAAc;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/CreatableSelect/CreatableSelect.tsx"],"sourcesContent":["'use client';\n\nimport type { Theme } from '@mui/material/styles/index.js';\nimport Autocomplete, { createFilterOptions } from '@mui/material/Autocomplete/index.js';\nimport type { AutocompleteRenderInputParams } from '@mui/material/Autocomplete/index.js';\nimport CircularProgress from '@mui/material/CircularProgress/index.js';\nimport TextField from '@mui/material/TextField/index.js';\nimport { useId, useMemo } from 'react';\n\nimport { stackedOverlayZIndex } from '../../../tokens/layers';\nimport { FormControl, FormLabel, FormMessage } from '../Form';\nimport type { CreatableSelectOption, CreatableSelectProps } from './CreatableSelect.types';\nimport type { SizeValue } from '../../../tokens/scales';\n\nimport { fieldEdge } from '../../../tokens/field-edge';\nimport { fieldRadiusPx } from '../../../tokens/field-radius';\nimport { fieldControlStyles } from '../../../tokens/field-height';\n\n/** Internal option shape: a real option, or the synthetic \"create new\" row. */\ninterface InternalOption extends CreatableSelectOption {\n /** True for the synthetic row that triggers {@link CreatableSelectProps.onCreate}. */\n isCreate?: boolean;\n}\n\n/** Prefix that marks a synthetic create-row value so it can never collide with a real one. */\nconst CREATE_PREFIX = ' create:';\n\nconst filterOptions = createFilterOptions<InternalOption>();\n\n/** How far one nesting level indents a dropdown row, in px. */\nconst INDENT_STEP = 16;\n\n/** `sm`/`md` → MUI's own scale, the same mapping {@link Input} uses. */\n// All five house stops onto MUI's two. `xs`/`sm` draw small; `md` and up draw\n// medium, because an autocomplete field has no third or fourth height to give.\nconst MUI_SIZE = { xs: 'small', sm: 'small', md: 'medium', lg: 'medium', xl: 'medium' } as const;\n\n/** Match the outlined border treatment of `Input` so siblings look identical. */\nconst fieldSx = {\n '& .MuiOutlinedInput-root': {\n borderRadius: fieldRadiusPx,\n '& fieldset': {\n borderColor: (theme: Theme) => fieldEdge(theme),\n },\n '&:hover fieldset': { borderColor: 'primary.main' },\n '&.Mui-focused fieldset': { borderColor: 'primary.main', borderWidth: 2 },\n '&.Mui-error fieldset': { borderColor: 'error.main' },\n },\n} as const;\n\n/**\n * The filter that appends the synthetic \"create\" row when the typed text matches\n * no existing option. Built per render from the two props it closes over.\n */\nfunction buildFilter(\n onCreate: CreatableSelectProps['onCreate'],\n createOptionLabel: (input: string) => string,\n) {\n return (available: InternalOption[], params: { inputValue: string }): InternalOption[] => {\n const filtered = filterOptions(available, params as Parameters<typeof filterOptions>[1]);\n const input = params.inputValue.trim();\n const alreadyExists = available.some(\n (option) => option.label.toLowerCase() === input.toLowerCase(),\n );\n if (input && !alreadyExists && onCreate) {\n filtered.push({\n value: `${CREATE_PREFIX}${input}`,\n label: createOptionLabel(input),\n isCreate: true,\n });\n }\n return filtered;\n };\n}\n\n/**\n * A nested option is indented on its ROW; the label itself stays the bare name,\n * so the closed field never shows the tree drawing (see `depth`).\n */\nfunction renderIndentedOption(\n props: React.HTMLAttributes<HTMLLIElement>,\n option: InternalOption,\n): React.JSX.Element {\n const { key, ...rest } = props as typeof props & { key?: string };\n return (\n <li\n key={key ?? option.value}\n {...rest}\n style={{ paddingLeft: INDENT_STEP * (1 + (option.depth ?? 0)) }}\n >\n {option.label}\n </li>\n );\n}\n\n/** The text field Autocomplete renders, with the library's border + a loading adornment. */\nfunction renderField(\n params: AutocompleteRenderInputParams,\n field: {\n inputId: string;\n placeholder?: string;\n error?: string;\n loading: boolean;\n size: SizeValue;\n dataTestId: string;\n },\n): React.JSX.Element {\n return (\n <TextField\n {...params}\n id={field.inputId}\n placeholder={field.placeholder}\n error={Boolean(field.error)}\n size={MUI_SIZE[field.size]}\n sx={[fieldSx, (theme) => fieldControlStyles(theme, field.size)]}\n inputProps={{ ...params.inputProps, 'data-testid': `${field.dataTestId}-input` }}\n slotProps={{\n input: {\n ...params.InputProps,\n endAdornment: (\n <>\n {field.loading ? <CircularProgress color=\"inherit\" size={18} /> : null}\n {params.InputProps.endAdornment}\n </>\n ),\n },\n }}\n />\n );\n}\n\n/**\n * The option list, plus the selected OBJECT MUI wants, from the controlled value.\n * `depth` is carried through: it is what {@link renderIndentedOption} draws.\n */\nfunction useInternalOptions(\n options: CreatableSelectOption[],\n value: string | null,\n): { items: InternalOption[]; selected: InternalOption | null } {\n const items = useMemo<InternalOption[]>(\n () => options.map(({ value: optionValue, label, depth }) => ({\n value: optionValue,\n label,\n depth,\n })),\n [options],\n );\n const selected = useMemo<InternalOption | null>(\n () => items.find((option) => option.value === value) ?? null,\n [items, value],\n );\n return { items, selected };\n}\n\n/** Route a picked row: cleared, the synthetic create row, or a real option. */\nfunction handlePick(\n next: InternalOption | null,\n onChange: CreatableSelectProps['onChange'],\n onCreate: CreatableSelectProps['onCreate'],\n): void {\n if (!next) {\n onChange(null);\n return;\n }\n if (next.isCreate) {\n void onCreate?.(next.value.slice(CREATE_PREFIX.length));\n return;\n }\n onChange(next.value);\n}\n\n/**\n * A single-select, searchable combobox that can create a new option on the fly.\n *\n * Type to filter {@link CreatableSelectProps.options}; when the typed text matches\n * no option and {@link CreatableSelectProps.onCreate} is provided, a \"create\" row\n * appears and selecting it (Enter or click) calls `onCreate` with the raw text —\n * the parent persists it, then feeds the new option back via `options`/`value`.\n *\n * Chrome matches the library's other form fields: an external {@link FormLabel}\n * above the control (not a floating label), the same outlined border treatment as\n * {@link Input} and the same `sm`/`md` scale, so it lines up with sibling fields\n * in a grid row.\n */\nexport function CreatableSelect({\n options,\n value,\n onChange,\n onCreate,\n label,\n error,\n placeholder,\n createOptionLabel,\n noOptionsText,\n disabled = false,\n loading = false,\n fullWidth = true,\n size = 'md',\n dataTestId = 'creatable-select',\n}: CreatableSelectProps): React.JSX.Element {\n const inputId = useId();\n const { items, selected } = useInternalOptions(options, value);\n\n return (\n <FormControl fullWidth={fullWidth} error={Boolean(error)}>\n {label && (\n <FormLabel htmlFor={inputId} error={Boolean(error)}>\n {label}\n </FormLabel>\n )}\n <Autocomplete<InternalOption, false, false, false>\n value={selected}\n options={items}\n disabled={disabled}\n loading={loading}\n fullWidth={fullWidth}\n size={MUI_SIZE[size]}\n handleHomeEndKeys\n selectOnFocus\n clearOnBlur\n data-testid={dataTestId}\n noOptionsText={noOptionsText}\n // Lift the dropdown above stacked modals: the default popup z-index is\n // `modal` (1300), but a stacked sheet at depth ≥2 sits at 1300 + depth*10,\n // which would otherwise cover the options. The height is the token's\n // now — this component used to be the only place the rule was written\n // down, which is how `CategorySelect` came to be missing it (12-57).\n slotProps={{ popper: { sx: { zIndex: stackedOverlayZIndex } } }}\n getOptionLabel={(option) => (typeof option === 'string' ? option : option.label)}\n isOptionEqualToValue={(option, current) => option.value === current.value}\n renderOption={renderIndentedOption}\n filterOptions={buildFilter(onCreate, createOptionLabel)}\n onChange={(_event, next) => handlePick(next, onChange, onCreate)}\n renderInput={(params) =>\n renderField(params, { inputId, placeholder, error, loading, size, dataTestId })\n }\n />\n {error && <FormMessage error dataTestId={`${dataTestId}-message`}>{error}</FormMessage>}\n </FormControl>\n );\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/navigation/NavigationMenu/NavigationMenu.shell.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport List from '@mui/material/List/index.js';\nimport ListItemButton from '@mui/material/ListItemButton/index.js';\nimport { alpha, keyframes, styled } from '@mui/material/styles/index.js';\nimport type { CSSProperties, PropsWithChildren, ReactNode } from 'react';\nimport React from 'react';\n\nimport { slideIn } from './NavigationMenu.styles';\nimport { shadowInk } from '../../../tokens/ink';\n\nconst megaMenuSlide = keyframes`\n from {\n opacity: 0;\n transform: translateY(20px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n`;\n\n// These styled() components stay module-local: their inferred types cannot be\n// named across a module boundary here (TS2742). The plain components exported\n// below are what the layouts import.\nconst NavigationContainer = styled(Box, {\n shouldForwardProp: (prop) => !['variant', 'collapsed', 'minimal'].includes(prop as string),\n})<{ variant?: string; collapsed?: boolean; minimal?: boolean }>(({ theme, variant, collapsed, minimal }) => ({\n display: 'flex',\n position: 'relative',\n animation: `${slideIn} 0.4s ease-out`,\n ...(variant === 'horizontal' && {\n flexDirection: 'row',\n alignItems: 'center',\n width: '100%',\n ...(!minimal && {\n background: `linear-gradient(135deg, ${alpha(theme.palette.background.paper, 0.95)} 0%, ${alpha(theme.palette.background.paper, 0.98)} 100%)`,\n backdropFilter: 'blur(10px)',\n borderRadius: theme.spacing(2),\n boxShadow: `0 8px 32px ${shadowInk(theme, 0.08)}`,\n }),\n }),\n ...(variant === 'vertical' && {\n flexDirection: 'column',\n width: collapsed ? 80 : 280,\n transition: 'all 0.4s cubic-bezier(0.4, 0, 0.2, 1)',\n height: '100%',\n ...(!minimal && {\n background: `linear-gradient(180deg, ${alpha(theme.palette.background.paper, 0.98)} 0%, ${alpha(theme.palette.background.paper, 0.95)} 100%)`,\n backdropFilter: 'blur(12px)',\n borderRadius: theme.spacing(2),\n boxShadow: `0 12px 40px ${shadowInk(theme, 0.1)}`,\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n height: '200px',\n background: `radial-gradient(ellipse at top, ${alpha(theme.palette.primary.main, 0.05)} 0%, transparent 70%)`,\n pointerEvents: 'none',\n },\n }),\n }),\n ...(variant === 'mega' && {\n flexDirection: 'column',\n width: '100%',\n ...(!minimal && {\n background: `linear-gradient(135deg, ${alpha(theme.palette.background.paper, 0.98)} 0%, ${alpha(theme.palette.background.default, 0.95)} 100%)`,\n backdropFilter: 'blur(15px)',\n borderRadius: theme.spacing(3),\n overflow: 'hidden',\n boxShadow: `0 20px 60px ${shadowInk(theme, 0.12)}`,\n }),\n }),\n}));\n\nconst StyledList = styled(List, {\n shouldForwardProp: (prop) => !['variant', 'size'].includes(prop as string),\n})<{ variant?: string; size?: string }>(({ theme, variant }) => ({\n padding: 0,\n width: '100%',\n ...(variant === 'horizontal' && {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n }),\n ...(variant === 'mega' && {\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fit, minmax(250px, 1fr))',\n gap: theme.spacing(2),\n padding: theme.spacing(2),\n }),\n}));\n\nconst LogoContainer = styled(Box)(({ theme }) => ({\n padding: theme.spacing(2.5),\n marginBottom: theme.spacing(2),\n position: 'relative',\n background: `linear-gradient(135deg, ${alpha(theme.palette.primary.main, 0.08)} 0%, ${alpha(theme.palette.primary.dark, 0.04)} 100%)`,\n borderBottom: `2px solid ${alpha(theme.palette.primary.main, 0.2)}`,\n overflow: 'hidden',\n\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n top: '-50%',\n right: '-50%',\n width: '200%',\n height: '200%',\n background: `radial-gradient(circle, ${alpha(theme.palette.primary.light, 0.1)} 0%, transparent 70%)`,\n animation: `${slideIn} 1s ease-out`,\n },\n\n '& > *': {\n position: 'relative',\n zIndex: 1,\n },\n}));\n\nconst CollapseButton = styled(ListItemButton)(({ theme }) => ({\n borderRadius: theme.spacing(1.5),\n margin: theme.spacing(1),\n background: `linear-gradient(135deg, ${alpha(theme.palette.primary.main, 0.08)} 0%, ${alpha(theme.palette.primary.dark, 0.04)} 100%)`,\n border: `1px solid ${alpha(theme.palette.primary.main, 0.2)}`,\n transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n\n '&:hover': {\n backgroundColor: alpha(theme.palette.primary.main, 0.12),\n transform: 'scale(1.05)',\n boxShadow: `0 6px 20px ${alpha(theme.palette.primary.main, 0.2)}`,\n\n '& .MuiListItemIcon-root': {\n transform: 'rotate(180deg)',\n transition: 'transform 0.3s ease',\n },\n },\n\n '&:active': {\n transform: 'scale(0.98)',\n },\n}));\n\nconst MegaMenuSection = styled(Box)(({ theme }) => ({\n padding: theme.spacing(3),\n borderRadius: theme.spacing(2),\n background: `linear-gradient(145deg, ${theme.palette.background.paper} 0%, ${alpha(theme.palette.background.default, 0.9)} 100%)`,\n boxShadow: `0 10px 30px ${shadowInk(theme, 0.08)}`,\n border: `1px solid ${alpha(theme.palette.divider, 0.08)}`,\n position: 'relative',\n overflow: 'hidden',\n animation: `${megaMenuSlide} 0.5s ease-out`,\n animationFillMode: 'both',\n\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n height: '3px',\n background: `linear-gradient(90deg, ${theme.palette.primary.main} 0%, ${theme.palette.primary.light} 50%, ${theme.palette.primary.main} 100%)`,\n backgroundSize: '200% 100%',\n animation: 'shimmer 3s ease-in-out infinite',\n },\n\n '@keyframes shimmer': {\n '0%': {\n backgroundPosition: '200% 0',\n },\n '100%': {\n backgroundPosition: '-200% 0',\n },\n },\n\n '&:hover': {\n transform: 'translateY(-4px)',\n boxShadow: `0 15px 40px ${shadowInk(theme, 0.12)}`,\n transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n },\n\n '&:nth-of-type(1)': { animationDelay: '0.1s' },\n '&:nth-of-type(2)': { animationDelay: '0.2s' },\n '&:nth-of-type(3)': { animationDelay: '0.3s' },\n '&:nth-of-type(4)': { animationDelay: '0.4s' },\n}));\n\nexport interface NavigationShellProps extends PropsWithChildren {\n variant?: string;\n collapsed?: boolean;\n minimal?: boolean;\n className?: string;\n style?: CSSProperties;\n}\n\nexport const NavigationShell = React.forwardRef<HTMLDivElement, NavigationShellProps>(\n ({ children, ...props }, ref) => (\n <NavigationContainer ref={ref} {...props}>\n {children}\n </NavigationContainer>\n ),\n);\n\nNavigationShell.displayName = 'NavigationShell';\n\nexport const LogoBar: React.FC<PropsWithChildren> = ({ children }) => (\n <LogoContainer>{children}</LogoContainer>\n);\n\nexport const MenuList: React.FC<PropsWithChildren<{ variant?: string; size?: string }>> = ({\n children,\n ...props\n}) => <StyledList {...props}>{children}</StyledList>;\n\nexport const CollapseToggle: React.FC<PropsWithChildren<{ onClick: () => void }>> = ({\n children,\n onClick,\n}) => <CollapseButton onClick={onClick}>{children}</CollapseButton>;\n\nexport const MegaSection: React.FC<{ children: ReactNode }> = ({ children }) => (\n <MegaMenuSection>{children}</MegaMenuSection>\n);\n"],"mappings":"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","names":[]}