@12-apps/ui 6.78.4 → 6.80.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 (1203) hide show
  1. package/dist/_internal/components/data-display/Alert/Alert.js +3 -3
  2. package/dist/_internal/components/data-display/AlertDialog/AlertDialog.js +3 -2
  3. package/dist/_internal/components/data-display/AlertDialog/AlertDialog.parts.js +2 -1
  4. package/dist/_internal/components/data-display/AsyncStateContainer/AsyncStateContainer.js +7 -5
  5. package/dist/_internal/components/data-display/Avatar/Avatar.js +5 -4
  6. package/dist/_internal/components/data-display/Avatar/Avatar.view.js +2 -2
  7. package/dist/_internal/components/data-display/CardKit/card-actions-context.js +4 -4
  8. package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +12 -11
  9. package/dist/_internal/components/data-display/CardKit/use-row-confirm.js +8 -7
  10. package/dist/_internal/components/data-display/Carousel/Carousel.chrome.js +5 -2
  11. package/dist/_internal/components/data-display/Carousel/Carousel.js +7 -4
  12. package/dist/_internal/components/data-display/Carousel/Carousel.parts.js +4 -1
  13. package/dist/_internal/components/data-display/Chart/Chart.js +3 -3
  14. package/dist/_internal/components/data-display/Chart/SpecChart.js +6 -6
  15. package/dist/_internal/components/data-display/Chart/chart-renderers.js +2 -2
  16. package/dist/_internal/components/data-display/Chart/chart-spec.js +2 -2
  17. package/dist/_internal/components/data-display/DataGrid/DataGrid.js +2 -2
  18. package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +55 -53
  19. package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +76 -74
  20. package/dist/_internal/components/data-display/DataViews/DeleteViewDialog.js +4 -3
  21. package/dist/_internal/components/data-display/DataViews/ManageViewsDialog.js +10 -9
  22. package/dist/_internal/components/data-display/DataViews/SaveViewModal.js +8 -7
  23. package/dist/_internal/components/data-display/DataViews/base-card.js +5 -5
  24. package/dist/_internal/components/data-display/DataViews/base-list-card-geometry.js +3 -3
  25. package/dist/_internal/components/data-display/DataViews/base-list-card-gutters.js +3 -3
  26. package/dist/_internal/components/data-display/DataViews/base-list-card-layout.js +3 -3
  27. package/dist/_internal/components/data-display/DataViews/base-list-card-slots.js +2 -2
  28. package/dist/_internal/components/data-display/DataViews/base-list-card.js +10 -10
  29. package/dist/_internal/components/data-display/DataViews/data-views-card-body.js +2 -2
  30. package/dist/_internal/components/data-display/DataViews/data-views-category-pill.js +17 -15
  31. package/dist/_internal/components/data-display/DataViews/data-views-columns.js +2 -2
  32. package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +2 -2
  33. package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +24 -22
  34. package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +8 -8
  35. package/dist/_internal/components/data-display/DataViews/data-views-grid-helpers.js +1 -1
  36. package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +50 -48
  37. package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +25 -23
  38. package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +22 -20
  39. package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +23 -21
  40. package/dist/_internal/components/data-display/DataViews/data-views-pagination.js +3 -3
  41. package/dist/_internal/components/data-display/DataViews/data-views-range-pill.js +4 -3
  42. package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +13 -11
  43. package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +25 -23
  44. package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +12 -10
  45. package/dist/_internal/components/data-display/DataViews/data-views-view-nav.js +1 -1
  46. package/dist/_internal/components/data-display/DataViews/list-card-rails.js +2 -2
  47. package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +5 -5
  48. package/dist/_internal/components/data-display/EmptyState/EmptyState.js +3 -2
  49. package/dist/_internal/components/data-display/ErrorState/ErrorState.js +2 -1
  50. package/dist/_internal/components/data-display/FleetMap/FleetBody.js +11 -8
  51. package/dist/_internal/components/data-display/FleetMap/FleetCanvas.js +10 -7
  52. package/dist/_internal/components/data-display/FleetMap/FleetMap.fixtures.js +1 -1
  53. package/dist/_internal/components/data-display/FleetMap/FleetMap.js +16 -12
  54. package/dist/_internal/components/data-display/HoverCard/HoverCard.js +2 -2
  55. package/dist/_internal/components/data-display/InteractiveTooltip/InteractiveTooltip.js +2 -2
  56. package/dist/_internal/components/data-display/LazyImage/LazyImage.hooks.js +1 -1
  57. package/dist/_internal/components/data-display/LazyImage/LazyImage.js +3 -2
  58. package/dist/_internal/components/data-display/Lightbox/Lightbox.js +6 -6
  59. package/dist/_internal/components/data-display/LoadingState/LoadingState.js +3 -1
  60. package/dist/_internal/components/data-display/MapPreview/MapControlBar.js +5 -1
  61. package/dist/_internal/components/data-display/MapPreview/MapLayers.js +7 -3
  62. package/dist/_internal/components/data-display/MapPreview/MapMarkers.js +5 -1
  63. package/dist/_internal/components/data-display/MapPreview/MapPreview.helpers.js +6 -1
  64. package/dist/_internal/components/data-display/MapPreview/MapPreview.js +9 -6
  65. package/dist/_internal/components/data-display/Progress/Progress.js +2 -2
  66. package/dist/_internal/components/data-display/SectionOnboarding/SectionOnboarding.js +6 -4
  67. package/dist/_internal/components/data-display/Sheet/Sheet.body.js +3 -2
  68. package/dist/_internal/components/data-display/Sheet/Sheet.hooks.js +2 -2
  69. package/dist/_internal/components/data-display/Sheet/Sheet.js +6 -5
  70. package/dist/_internal/components/data-display/Sheet/Sheet.parts.js +2 -1
  71. package/dist/_internal/components/data-display/Stepper/Stepper.js +3 -1
  72. package/dist/_internal/components/data-display/Table/Table.helpers.js +1 -1
  73. package/dist/_internal/components/data-display/Table/Table.js +6 -4
  74. package/dist/_internal/components/data-display/Table/TableParts.hooks.js +4 -2
  75. package/dist/_internal/components/data-display/Table/TableParts.js +4 -2
  76. package/dist/_internal/components/data-display/Timeline/Timeline.js +4 -2
  77. package/dist/_internal/components/data-display/Timeline/TimelineRow.js +1 -1
  78. package/dist/_internal/components/data-display/index.js +73 -68
  79. package/dist/_internal/components/feedback/ConfirmAction/ConfirmAction.js +5 -4
  80. package/dist/_internal/components/feedback/ConfirmAction/ConfirmAction.parts.js +4 -3
  81. package/dist/_internal/components/feedback/ConfirmAction/ConfirmButton.js +6 -5
  82. package/dist/_internal/components/feedback/ConfirmAction/with-confirmation.js +5 -4
  83. package/dist/_internal/components/feedback/Dialog/Dialog.js +3 -2
  84. package/dist/_internal/components/feedback/NotificationStatusNotice/NotificationStatusNotice.js +4 -4
  85. package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.js +12 -11
  86. package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.parts.js +6 -6
  87. package/dist/_internal/components/feedback/Sonner/Sonner.js +3 -2
  88. package/dist/_internal/components/feedback/Sonner/SonnerToast.js +1 -1
  89. package/dist/_internal/components/feedback/StackedModal/StackedModal.js +7 -6
  90. package/dist/_internal/components/feedback/StackedModal/StackedModal.parts.js +2 -1
  91. package/dist/_internal/components/feedback/Toast/Toast.js +2 -1
  92. package/dist/_internal/components/feedback/TutorialOverlay/TutorialOverlay.js +3 -2
  93. package/dist/_internal/components/feedback/TutorialOverlay/TutorialStepBody.js +2 -1
  94. package/dist/_internal/components/feedback/index.js +34 -32
  95. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.helpers.js +3 -1
  96. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.hooks.js +8 -6
  97. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.js +12 -10
  98. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocompleteField.js +4 -2
  99. package/dist/_internal/components/form/AddressAutocomplete/useAddressPredictions.js +4 -2
  100. package/dist/_internal/components/form/AddressAutocomplete/useAddressSelection.js +1 -1
  101. package/dist/_internal/components/form/AddressAutocomplete/useCurrentLocation.js +1 -1
  102. package/dist/_internal/components/form/AddressAutocomplete/useGoogleMapsAPI.js +1 -1
  103. package/dist/_internal/components/form/Autocomplete/Autocomplete.js +2 -2
  104. package/dist/_internal/components/form/Calendar/Calendar.hooks.js +2 -2
  105. package/dist/_internal/components/form/Calendar/Calendar.js +6 -6
  106. package/dist/_internal/components/form/Calendar/CalendarDayCell.js +2 -2
  107. package/dist/_internal/components/form/Calendar/CalendarMonth.js +3 -3
  108. package/dist/_internal/components/form/CategorySelect/CategoryPanel.js +5 -5
  109. package/dist/_internal/components/form/CategorySelect/CategoryPanelList.js +3 -3
  110. package/dist/_internal/components/form/CategorySelect/CategoryRows.js +2 -2
  111. package/dist/_internal/components/form/CategorySelect/CategorySelect.js +9 -9
  112. package/dist/_internal/components/form/Checkbox/Checkbox.js +2 -2
  113. package/dist/_internal/components/form/CodeEditor/CodeEditor.js +3 -3
  114. package/dist/_internal/components/form/Command/Command.hooks.js +2 -1
  115. package/dist/_internal/components/form/Command/Command.js +4 -3
  116. package/dist/_internal/components/form/Command/Command.parts.js +2 -1
  117. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.hooks.js +3 -2
  118. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.js +12 -11
  119. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.range.js +2 -1
  120. package/dist/_internal/components/form/DateRangePicker/DateRangePickerFields.js +3 -2
  121. package/dist/_internal/components/form/InputOTP/InputOTP.js +2 -2
  122. package/dist/_internal/components/form/Menubar/Menubar.js +2 -2
  123. package/dist/_internal/components/form/PhoneInput/PhoneInput.hooks.js +2 -2
  124. package/dist/_internal/components/form/PhoneInput/PhoneInput.js +4 -3
  125. package/dist/_internal/components/form/PhoneInput/countries.js +7 -3
  126. package/dist/_internal/components/form/PickerSheet/PickerSheet.js +4 -4
  127. package/dist/_internal/components/form/RichTextEditor/RichTextEditor.dom.js +2 -1
  128. package/dist/_internal/components/form/RichTextEditor/RichTextEditor.format.js +3 -2
  129. package/dist/_internal/components/form/RichTextEditor/RichTextEditor.hooks.js +4 -3
  130. package/dist/_internal/components/form/RichTextEditor/RichTextEditor.js +7 -5
  131. package/dist/_internal/components/form/RichTextEditor/RichTextEditorToolbar.js +1 -1
  132. package/dist/_internal/components/form/Switch/Switch.js +4 -4
  133. package/dist/_internal/components/form/Switch/Switch.parts.js +3 -3
  134. package/dist/_internal/components/form/Switch/Switch.styles.js +2 -2
  135. package/dist/_internal/components/form/Textarea/Textarea.js +1 -1
  136. package/dist/_internal/components/form/Textarea/TextareaRichEditor.js +4 -1
  137. package/dist/_internal/components/form/Textarea/TextareaRichEditor.js.map +1 -1
  138. package/dist/_internal/components/form/UploadButton/UploadButton.hooks.js +2 -1
  139. package/dist/_internal/components/form/UploadButton/UploadButton.js +3 -2
  140. package/dist/_internal/components/form/index.js +53 -50
  141. package/dist/_internal/components/form/total-form/Fields/CategoryField.js +10 -10
  142. package/dist/_internal/components/form/total-form/Fields/index.js +13 -13
  143. package/dist/_internal/components/form/total-form/FormErrorSnackbar.js +3 -2
  144. package/dist/_internal/components/index.js +214 -205
  145. package/dist/_internal/components/layout/Card/Card.js +2 -2
  146. package/dist/_internal/components/layout/ContentToolbar/ColumnsMenu.js +2 -1
  147. package/dist/_internal/components/layout/ContentToolbar/FilterTrigger.js +3 -1
  148. package/dist/_internal/components/layout/ContentToolbar/MultiSelectDropdown.js +2 -1
  149. package/dist/_internal/components/layout/ContentToolbar/ViewSelector.js +2 -1
  150. package/dist/_internal/components/layout/Dashboard/Dashboard.js +2 -1
  151. package/dist/_internal/components/layout/Drawer/Drawer.js +2 -1
  152. package/dist/_internal/components/layout/ScrollArea/ScrollArea.js +3 -3
  153. package/dist/_internal/components/layout/SettingCard/SettingCard.js +4 -4
  154. package/dist/_internal/components/layout/SettingCard/SettingCard.summary.js +3 -3
  155. package/dist/_internal/components/layout/SettingCard/SettingGroup.js +10 -10
  156. package/dist/_internal/components/layout/SettingCard/SettingSwitch.js +8 -8
  157. package/dist/_internal/components/layout/SettingCard/SettingToggle.js +10 -10
  158. package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.js +7 -6
  159. package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.rail.js +1 -1
  160. package/dist/_internal/components/layout/SettingsLayout/SettingsPanel.js +3 -3
  161. package/dist/_internal/components/layout/SettingsLayout/SettingsSectionChips.js +2 -2
  162. package/dist/_internal/components/layout/TableFilter/TableFilter.js +2 -1
  163. package/dist/_internal/components/layout/index.js +38 -36
  164. package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +9 -8
  165. package/dist/_internal/components/navigation/AppHeader/AppHeader.identity.js +2 -1
  166. package/dist/_internal/components/navigation/Breadcrumbs/Breadcrumbs.js +2 -1
  167. package/dist/_internal/components/navigation/CommandPalette/CommandPalette.helpers.js +2 -1
  168. package/dist/_internal/components/navigation/CommandPalette/CommandPalette.hooks.js +3 -2
  169. package/dist/_internal/components/navigation/CommandPalette/CommandPalette.js +6 -4
  170. package/dist/_internal/components/navigation/CommandPalette/CommandPaletteResults.js +3 -1
  171. package/dist/_internal/components/navigation/NavigationMenu/NavigationMegaSection.js +4 -4
  172. package/dist/_internal/components/navigation/NavigationMenu/NavigationMenu.js +7 -6
  173. package/dist/_internal/components/navigation/NavigationMenu/NavigationMenu.shell.js +1 -1
  174. package/dist/_internal/components/navigation/NavigationMenu/NavigationMenuItem.js +2 -2
  175. package/dist/_internal/components/navigation/NavigationMenu/NavigationStandardBody.js +5 -4
  176. package/dist/_internal/components/navigation/Pagination/Pagination.js +2 -2
  177. package/dist/_internal/components/navigation/SectionNav/SectionNav.bar.js +4 -3
  178. package/dist/_internal/components/navigation/SectionNav/SectionNav.js +6 -5
  179. package/dist/_internal/components/navigation/SectionNav/SectionNav.sheet.js +3 -2
  180. package/dist/_internal/components/navigation/index.js +34 -30
  181. package/dist/_internal/components/typography/Code/Code.js +2 -1
  182. package/dist/_internal/components/typography/index.js +2 -1
  183. package/dist/_internal/components/utility/AnimatedIcon/AnimatedIcon.js +2 -1
  184. package/dist/_internal/components/utility/InfiniteScroll/InfiniteScroll.js +3 -2
  185. package/dist/_internal/components/utility/InfiniteScroll/InfiniteScroll.parts.js +2 -1
  186. package/dist/_internal/components/utility/InstallPrompt/InstallPrompt.js +2 -2
  187. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.helpers.js +7 -3
  188. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.js +6 -4
  189. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.parts.js +4 -2
  190. package/dist/_internal/components/utility/WorkflowStep/WorkflowStepRow.js +5 -3
  191. package/dist/_internal/components/utility/index.js +11 -9
  192. package/dist/_internal/copy/labels.js +1 -0
  193. package/dist/_internal/en-US.data-display.js +1 -1
  194. package/dist/_internal/en-US.feedback.js +1 -1
  195. package/dist/_internal/en-US.form.js +1 -1
  196. package/dist/_internal/en-US.labels.js +8 -0
  197. package/dist/_internal/en-US.navigation.js +1 -1
  198. package/dist/_internal/en-US.utility.js +1 -1
  199. package/dist/_internal/pt-BR.data-display.js +1 -1
  200. package/dist/_internal/pt-BR.feedback.js +1 -1
  201. package/dist/_internal/pt-BR.form.js +1 -1
  202. package/dist/_internal/pt-BR.labels.js +8 -0
  203. package/dist/_internal/pt-BR.labels.js.map +1 -0
  204. package/dist/_internal/pt-BR.navigation.js +1 -1
  205. package/dist/_internal/pt-BR.utility.js +1 -1
  206. package/dist/_internal/social-login-button/social-login-button.js +5 -4
  207. package/dist/_internal/user-avatar/user-avatar.js +9 -7
  208. package/dist/_internal/utils/resolve-labels.js +8 -0
  209. package/dist/_internal/utils/resolve-labels.js.map +1 -0
  210. package/dist/charts.js +11 -11
  211. package/dist/{chunk-OPP6USJC.js → chunk-2FQF4CNE.js} +2 -2
  212. package/dist/{chunk-BWFQEASG.js → chunk-2P5ZBBTL.js} +5 -5
  213. package/dist/{chunk-SV6IQ2YO.js → chunk-3B7EJIG7.js} +6 -4
  214. package/dist/chunk-3B7EJIG7.js.map +1 -0
  215. package/dist/{chunk-GHXW6O5T.js → chunk-3LQLLL2J.js} +4 -4
  216. package/dist/chunk-3LQLLL2J.js.map +1 -0
  217. package/dist/{chunk-4MQ6XTIJ.js → chunk-3OWFUFZL.js} +27 -13
  218. package/dist/chunk-3OWFUFZL.js.map +1 -0
  219. package/dist/{chunk-QVO4SIS7.js → chunk-3W2B7IZG.js} +2 -2
  220. package/dist/{chunk-AYP6ICAY.js → chunk-44FY2YZL.js} +11 -10
  221. package/dist/chunk-44FY2YZL.js.map +1 -0
  222. package/dist/{chunk-Q6PRGXR2.js → chunk-4HBCWKIX.js} +4 -4
  223. package/dist/{chunk-RA6W37NZ.js → chunk-4JV46KXS.js} +11 -8
  224. package/dist/chunk-4JV46KXS.js.map +1 -0
  225. package/dist/{chunk-2QO3BKUQ.js → chunk-4NVEUJXK.js} +5 -5
  226. package/dist/{chunk-O6SAU5JA.js → chunk-4OTJ66ID.js} +4 -4
  227. package/dist/{chunk-PBMCRDZI.js → chunk-4PREA2R5.js} +5 -2
  228. package/dist/chunk-4PREA2R5.js.map +1 -0
  229. package/dist/{chunk-YZX4DVRS.js → chunk-52UVUVYQ.js} +6 -3
  230. package/dist/chunk-52UVUVYQ.js.map +1 -0
  231. package/dist/{chunk-PIP7XII2.js → chunk-5JDY5W7O.js} +3 -3
  232. package/dist/{chunk-XICRCPEQ.js → chunk-5U7LBO2V.js} +5 -4
  233. package/dist/chunk-5U7LBO2V.js.map +1 -0
  234. package/dist/{chunk-JE6RZ5L6.js → chunk-5ZOJLYD2.js} +4 -4
  235. package/dist/{chunk-KT3TF2LT.js → chunk-634Z7HGN.js} +10 -5
  236. package/dist/chunk-634Z7HGN.js.map +1 -0
  237. package/dist/{chunk-LG52LMAM.js → chunk-6B7VZFAO.js} +3 -3
  238. package/dist/{chunk-ALREWFRX.js → chunk-6DGNMASB.js} +4 -4
  239. package/dist/{chunk-LH4VKUZC.js → chunk-6EERXU6R.js} +13 -7
  240. package/dist/chunk-6EERXU6R.js.map +1 -0
  241. package/dist/{chunk-MA6SUE7F.js → chunk-6EZQLNPK.js} +5 -3
  242. package/dist/chunk-6EZQLNPK.js.map +1 -0
  243. package/dist/{chunk-555TUQ7E.js → chunk-6IVR5HFI.js} +6 -6
  244. package/dist/{chunk-VRPCZ3IE.js → chunk-6JKECOZ2.js} +7 -6
  245. package/dist/chunk-6JKECOZ2.js.map +1 -0
  246. package/dist/{chunk-J26ZWYQI.js → chunk-6KCJNERH.js} +2 -2
  247. package/dist/{chunk-5752357K.js → chunk-6N2U67KF.js} +4 -4
  248. package/dist/{chunk-AXZCCX7O.js → chunk-6S7CFH6V.js} +2 -2
  249. package/dist/{chunk-PMRLFNBT.js → chunk-763AHWKU.js} +4 -4
  250. package/dist/{chunk-6DAIC2MG.js → chunk-775LIZXS.js} +4 -4
  251. package/dist/{chunk-XKSA4L2X.js → chunk-7DODMQRK.js} +11 -3
  252. package/dist/chunk-7DODMQRK.js.map +1 -0
  253. package/dist/{chunk-7HA7UH7O.js → chunk-7H5BIZ33.js} +4 -4
  254. package/dist/{chunk-VEBNL5MG.js → chunk-7HYLXERK.js} +4 -4
  255. package/dist/{chunk-M3DSPEZ3.js → chunk-7S3NG2AO.js} +6 -6
  256. package/dist/{chunk-EUACQR6N.js → chunk-7UDQJOZZ.js} +7 -5
  257. package/dist/chunk-7UDQJOZZ.js.map +1 -0
  258. package/dist/{chunk-CSD6SWBZ.js → chunk-A3Z7ZXLM.js} +6 -6
  259. package/dist/{chunk-3ZWCKCZC.js → chunk-A7LBWRRW.js} +5 -2
  260. package/dist/chunk-A7LBWRRW.js.map +1 -0
  261. package/dist/{chunk-LBZEPWYK.js → chunk-ABJOW7EK.js} +4 -4
  262. package/dist/{chunk-44PBCQ7E.js → chunk-ABQZFK7M.js} +6 -6
  263. package/dist/{chunk-ZFBFQK2Y.js → chunk-AFSXC5FU.js} +11 -12
  264. package/dist/chunk-AFSXC5FU.js.map +1 -0
  265. package/dist/{chunk-PY3RW5LC.js → chunk-AISCD6W6.js} +24 -10
  266. package/dist/chunk-AISCD6W6.js.map +1 -0
  267. package/dist/{chunk-EIMFA7KP.js → chunk-ANUO67JQ.js} +2 -2
  268. package/dist/{chunk-PTQRJEPN.js → chunk-AOBQ3KYY.js} +2 -2
  269. package/dist/{chunk-LODYTVOO.js → chunk-B25SHVWP.js} +4 -4
  270. package/dist/{chunk-ZYKDUKAH.js → chunk-B2RNNJRO.js} +7 -4
  271. package/dist/chunk-B2RNNJRO.js.map +1 -0
  272. package/dist/{chunk-HPEBSLYP.js → chunk-B67KUCWU.js} +2 -2
  273. package/dist/{chunk-GTT5UKKO.js → chunk-BDJIP4HG.js} +4 -4
  274. package/dist/{chunk-TTCVYY2B.js → chunk-BFBCTF2Y.js} +22 -7
  275. package/dist/chunk-BFBCTF2Y.js.map +1 -0
  276. package/dist/{chunk-RS576GOH.js → chunk-BIUT3K6A.js} +4 -4
  277. package/dist/{chunk-A5NXBOWS.js → chunk-BLHSLB5D.js} +5 -5
  278. package/dist/{chunk-RHKQ2RSY.js → chunk-BLVFHVDM.js} +17 -17
  279. package/dist/{chunk-DYHOBKPU.js → chunk-BLZDSCIZ.js} +6 -6
  280. package/dist/{chunk-XQWUVQ2F.js → chunk-BMVLTTTC.js} +10 -3
  281. package/dist/chunk-BMVLTTTC.js.map +1 -0
  282. package/dist/{chunk-CZV6NVCA.js → chunk-BTDY2NYV.js} +10 -7
  283. package/dist/chunk-BTDY2NYV.js.map +1 -0
  284. package/dist/{chunk-E53MMMDA.js → chunk-BX6CF2UG.js} +3 -3
  285. package/dist/{chunk-RUF7TOAZ.js → chunk-C2I7NQC4.js} +3 -2
  286. package/dist/{chunk-RUF7TOAZ.js.map → chunk-C2I7NQC4.js.map} +1 -1
  287. package/dist/{chunk-WVZBYTIK.js → chunk-C465AAD5.js} +29 -19
  288. package/dist/chunk-C465AAD5.js.map +1 -0
  289. package/dist/{chunk-XYFBJH6F.js → chunk-C7LHIDVB.js} +19 -9
  290. package/dist/chunk-C7LHIDVB.js.map +1 -0
  291. package/dist/{chunk-Z24VOTA7.js → chunk-CCWE6DBC.js} +4 -2
  292. package/dist/{chunk-Z24VOTA7.js.map → chunk-CCWE6DBC.js.map} +1 -1
  293. package/dist/{chunk-7K23NEZO.js → chunk-CFDYQSN6.js} +8 -8
  294. package/dist/{chunk-YLSDFW5O.js → chunk-CN4JS57H.js} +35 -5
  295. package/dist/chunk-CN4JS57H.js.map +1 -0
  296. package/dist/{chunk-4NQXHPQR.js → chunk-D4LMRSY7.js} +11 -2
  297. package/dist/chunk-D4LMRSY7.js.map +1 -0
  298. package/dist/{chunk-O36MIQIO.js → chunk-DB7OJM6X.js} +2 -2
  299. package/dist/{chunk-GSXYXMCV.js → chunk-DD3VFDB2.js} +2 -2
  300. package/dist/{chunk-KARMRTTM.js → chunk-DE2GWZ6X.js} +10 -7
  301. package/dist/chunk-DE2GWZ6X.js.map +1 -0
  302. package/dist/{chunk-FT6HBP5E.js → chunk-DE7E2GBP.js} +11 -8
  303. package/dist/chunk-DE7E2GBP.js.map +1 -0
  304. package/dist/{chunk-QWVETTIY.js → chunk-DJMVBIFD.js} +21 -12
  305. package/dist/chunk-DJMVBIFD.js.map +1 -0
  306. package/dist/{chunk-JKNKGGOG.js → chunk-DKRMOIX2.js} +7 -1
  307. package/dist/chunk-DKRMOIX2.js.map +1 -0
  308. package/dist/{chunk-3HLKTBEO.js → chunk-DQ22UKMZ.js} +4 -2
  309. package/dist/{chunk-3HLKTBEO.js.map → chunk-DQ22UKMZ.js.map} +1 -1
  310. package/dist/{chunk-IQ2U5MVO.js → chunk-DT22MDC3.js} +9 -9
  311. package/dist/{chunk-INGPH3YQ.js → chunk-DVRNW33K.js} +28 -5
  312. package/dist/chunk-DVRNW33K.js.map +1 -0
  313. package/dist/{chunk-C5JCARNE.js → chunk-DWCH6GH5.js} +7 -4
  314. package/dist/chunk-DWCH6GH5.js.map +1 -0
  315. package/dist/{chunk-NTO5DALI.js → chunk-DWLSYFQW.js} +5 -2
  316. package/dist/chunk-DWLSYFQW.js.map +1 -0
  317. package/dist/{chunk-7XSCEHGA.js → chunk-EOQ6EKTS.js} +7 -7
  318. package/dist/{chunk-UGH2DDST.js → chunk-ETSASQXI.js} +4 -2
  319. package/dist/chunk-ETSASQXI.js.map +1 -0
  320. package/dist/{chunk-F742IMLQ.js → chunk-EXKK73UN.js} +5 -2
  321. package/dist/chunk-EXKK73UN.js.map +1 -0
  322. package/dist/{chunk-HN3PZTUK.js → chunk-F5SUBK42.js} +9 -6
  323. package/dist/chunk-F5SUBK42.js.map +1 -0
  324. package/dist/chunk-FB4GLQQO.js +102 -0
  325. package/dist/chunk-FB4GLQQO.js.map +1 -0
  326. package/dist/{chunk-5KNDAC24.js → chunk-FCCOUOP7.js} +8 -2
  327. package/dist/chunk-FCCOUOP7.js.map +1 -0
  328. package/dist/{chunk-WC3W36AM.js → chunk-FKUVFPQZ.js} +26 -12
  329. package/dist/chunk-FKUVFPQZ.js.map +1 -0
  330. package/dist/{chunk-VEKTKCSB.js → chunk-FLJ3RIRP.js} +5 -5
  331. package/dist/{chunk-2ARVNCVU.js → chunk-FZUAB2KS.js} +8 -6
  332. package/dist/chunk-FZUAB2KS.js.map +1 -0
  333. package/dist/{chunk-Z5WUSI47.js → chunk-G3JFESKD.js} +6 -6
  334. package/dist/{chunk-KZXOIRUP.js → chunk-G3SWMBZS.js} +43 -12
  335. package/dist/chunk-G3SWMBZS.js.map +1 -0
  336. package/dist/{chunk-XRDH24J7.js → chunk-G6ET2DRL.js} +2 -2
  337. package/dist/{chunk-KIL3OVLI.js → chunk-G76PIGF7.js} +6 -2
  338. package/dist/chunk-G76PIGF7.js.map +1 -0
  339. package/dist/{chunk-7JOLSD2W.js → chunk-GHTVBYFA.js} +3 -3
  340. package/dist/{chunk-Y7YJYUNV.js → chunk-GLAAX5JJ.js} +16 -4
  341. package/dist/chunk-GLAAX5JJ.js.map +1 -0
  342. package/dist/{chunk-U4G3KY6L.js → chunk-GMU5AA3R.js} +8 -7
  343. package/dist/chunk-GMU5AA3R.js.map +1 -0
  344. package/dist/{chunk-XLTHZI5W.js → chunk-GX2LIB4T.js} +6 -3
  345. package/dist/chunk-GX2LIB4T.js.map +1 -0
  346. package/dist/{chunk-RKVS5AA6.js → chunk-H3NXDKFH.js} +7 -4
  347. package/dist/chunk-H3NXDKFH.js.map +1 -0
  348. package/dist/{chunk-47VRDPR2.js → chunk-HFZE2PGM.js} +5 -2
  349. package/dist/chunk-HFZE2PGM.js.map +1 -0
  350. package/dist/{chunk-AMLHEKSV.js → chunk-HI7JPDD6.js} +5 -5
  351. package/dist/{chunk-5MMAV7XK.js → chunk-HWKBCLKD.js} +4 -2
  352. package/dist/chunk-HWKBCLKD.js.map +1 -0
  353. package/dist/{chunk-5J7SA4CZ.js → chunk-HWUFOII2.js} +28 -10
  354. package/dist/chunk-HWUFOII2.js.map +1 -0
  355. package/dist/{chunk-N34AOGK3.js → chunk-I3OKAQ5L.js} +7 -7
  356. package/dist/{chunk-AEYLFBZT.js → chunk-I4NDZFTB.js} +2 -2
  357. package/dist/{chunk-2ZRZTGWP.js → chunk-ISW5K72V.js} +5 -5
  358. package/dist/{chunk-ICRVLGWD.js → chunk-J7CIRTWQ.js} +14 -3
  359. package/dist/chunk-J7CIRTWQ.js.map +1 -0
  360. package/dist/{chunk-FTPTPASD.js → chunk-JBYFBPI6.js} +2 -5
  361. package/dist/{chunk-FTPTPASD.js.map → chunk-JBYFBPI6.js.map} +1 -1
  362. package/dist/{chunk-AYJ44VTJ.js → chunk-JJNY5MZL.js} +15 -13
  363. package/dist/chunk-JJNY5MZL.js.map +1 -0
  364. package/dist/{chunk-4M5GEKPM.js → chunk-JL4I7OQE.js} +4 -4
  365. package/dist/{chunk-EF4DVYD2.js → chunk-JMUZ5JZA.js} +2 -2
  366. package/dist/chunk-JQLQOIB3.js +1 -0
  367. package/dist/chunk-JQLQOIB3.js.map +1 -0
  368. package/dist/{chunk-FIOBPQL2.js → chunk-JQSF3CUR.js} +16 -4
  369. package/dist/chunk-JQSF3CUR.js.map +1 -0
  370. package/dist/{chunk-HQCZT6TO.js → chunk-JVOEVTCZ.js} +5 -5
  371. package/dist/{chunk-MBMZNSBP.js → chunk-JW7MN4DG.js} +3 -3
  372. package/dist/{chunk-FCVPVEAS.js → chunk-KSOIFQJ6.js} +7 -7
  373. package/dist/{chunk-GBVNY2LG.js → chunk-KTXJQ4YJ.js} +6 -6
  374. package/dist/{chunk-NBXG3SQ3.js → chunk-KW2KCPZF.js} +6 -6
  375. package/dist/{chunk-4VRDFZ4G.js → chunk-KYTFGW4R.js} +7 -3
  376. package/dist/chunk-KYTFGW4R.js.map +1 -0
  377. package/dist/{chunk-3V3Z4EML.js → chunk-L4FWEI2P.js} +5 -5
  378. package/dist/{chunk-7VRCGWQL.js → chunk-L7N4AFZD.js} +6 -5
  379. package/dist/chunk-L7N4AFZD.js.map +1 -0
  380. package/dist/{chunk-T743IIER.js → chunk-LDPN55AA.js} +8 -4
  381. package/dist/chunk-LDPN55AA.js.map +1 -0
  382. package/dist/{chunk-2TSGRQ2J.js → chunk-LHJJZ462.js} +4 -2
  383. package/dist/chunk-LHJJZ462.js.map +1 -0
  384. package/dist/{chunk-OE3SQOZV.js → chunk-LHRAHDJF.js} +13 -7
  385. package/dist/chunk-LHRAHDJF.js.map +1 -0
  386. package/dist/chunk-LL2BWQPM.js +11 -0
  387. package/dist/chunk-LL2BWQPM.js.map +1 -0
  388. package/dist/{chunk-56JF5PZK.js → chunk-LYVTJLCF.js} +4 -4
  389. package/dist/{chunk-MNZ6MCOK.js → chunk-MKRJUT5O.js} +9 -9
  390. package/dist/{chunk-BGYLL467.js → chunk-N3W6FZOC.js} +4 -4
  391. package/dist/{chunk-B2JYQBO4.js → chunk-NF5TATKP.js} +11 -6
  392. package/dist/chunk-NF5TATKP.js.map +1 -0
  393. package/dist/{chunk-BWFUZ4N2.js → chunk-NGXDOWUP.js} +4 -4
  394. package/dist/{chunk-MTGEJRE4.js → chunk-NNKIM73H.js} +17 -4
  395. package/dist/chunk-NNKIM73H.js.map +1 -0
  396. package/dist/{chunk-OHXAJUO5.js → chunk-NPPO7G2B.js} +5 -3
  397. package/dist/{chunk-OHXAJUO5.js.map → chunk-NPPO7G2B.js.map} +1 -1
  398. package/dist/{chunk-3VXS7O3X.js → chunk-NSS3X7FK.js} +17 -3
  399. package/dist/chunk-NSS3X7FK.js.map +1 -0
  400. package/dist/{chunk-VNVV6Y2X.js → chunk-NWNHSASQ.js} +4 -2
  401. package/dist/chunk-NWNHSASQ.js.map +1 -0
  402. package/dist/chunk-O2RXSXSF.js +145 -0
  403. package/dist/chunk-O2RXSXSF.js.map +1 -0
  404. package/dist/{chunk-VMN6KG2U.js → chunk-OCLEKMBP.js} +3 -3
  405. package/dist/chunk-OCLEKMBP.js.map +1 -0
  406. package/dist/{chunk-HBP2OU4Q.js → chunk-OOCD2QR3.js} +4 -3
  407. package/dist/chunk-OOCD2QR3.js.map +1 -0
  408. package/dist/{chunk-NYWAAXDX.js → chunk-OT4HIG7S.js} +3 -3
  409. package/dist/{chunk-ZPACE34U.js → chunk-OTION43A.js} +16 -12
  410. package/dist/chunk-OTION43A.js.map +1 -0
  411. package/dist/{chunk-GRMBCJS6.js → chunk-PAKLYZ6G.js} +4 -4
  412. package/dist/{chunk-PU3HEWSG.js → chunk-PF2A2IM7.js} +13 -4
  413. package/dist/chunk-PF2A2IM7.js.map +1 -0
  414. package/dist/{chunk-5M2NWXN4.js → chunk-PGBIUO2A.js} +2 -2
  415. package/dist/{chunk-RCTHCXS6.js → chunk-PJNIJIE6.js} +2 -2
  416. package/dist/{chunk-6ATXOJVQ.js → chunk-QADTI63U.js} +4 -4
  417. package/dist/{chunk-SUZXPDUQ.js → chunk-QJLOWBFW.js} +12 -6
  418. package/dist/chunk-QJLOWBFW.js.map +1 -0
  419. package/dist/{chunk-FRGNTTPA.js → chunk-QK3XXPBA.js} +15 -10
  420. package/dist/chunk-QK3XXPBA.js.map +1 -0
  421. package/dist/chunk-QNAB53N3.js +1 -0
  422. package/dist/chunk-QNAB53N3.js.map +1 -0
  423. package/dist/{chunk-7ZROYGUG.js → chunk-QOTMQLMW.js} +2 -2
  424. package/dist/{chunk-NQCTANF3.js → chunk-QVDEGBME.js} +7 -7
  425. package/dist/{chunk-LI6XSM5D.js → chunk-QVEJGFRP.js} +3 -3
  426. package/dist/{chunk-HEBZ7Q7O.js → chunk-QVYBRD6U.js} +7 -6
  427. package/dist/chunk-QVYBRD6U.js.map +1 -0
  428. package/dist/{chunk-JJVIZR6C.js → chunk-RIPG3QIN.js} +24 -13
  429. package/dist/chunk-RIPG3QIN.js.map +1 -0
  430. package/dist/{chunk-VD72JGHA.js → chunk-RMZQHJEP.js} +3 -3
  431. package/dist/{chunk-VBGC7G4F.js → chunk-RQ3IS5NQ.js} +2 -2
  432. package/dist/{chunk-3JDP5OUR.js → chunk-RQY5ONSF.js} +6 -2
  433. package/dist/chunk-RQY5ONSF.js.map +1 -0
  434. package/dist/{chunk-33LAPBYB.js → chunk-SCQARHMU.js} +9 -5
  435. package/dist/chunk-SCQARHMU.js.map +1 -0
  436. package/dist/chunk-SEUJNFOD.js +119 -0
  437. package/dist/chunk-SEUJNFOD.js.map +1 -0
  438. package/dist/{chunk-YNDTLBOH.js → chunk-SM2O6D5F.js} +2 -2
  439. package/dist/{chunk-WA6F4NOO.js → chunk-SMANO5OD.js} +4 -4
  440. package/dist/{chunk-7SYYGXC7.js → chunk-SSCEX5NY.js} +6 -2
  441. package/dist/chunk-SSCEX5NY.js.map +1 -0
  442. package/dist/{chunk-YJBWDDW7.js → chunk-SXNGH56D.js} +12 -12
  443. package/dist/{chunk-HZK4DRGF.js → chunk-SYZVXWEQ.js} +6 -4
  444. package/dist/chunk-SYZVXWEQ.js.map +1 -0
  445. package/dist/{chunk-VQYR64QB.js → chunk-TAR5LSGT.js} +8 -3
  446. package/dist/chunk-TAR5LSGT.js.map +1 -0
  447. package/dist/{chunk-NDGA7ZE6.js → chunk-TGMMUKOF.js} +3 -3
  448. package/dist/{chunk-RZCXYKY4.js → chunk-TGZ6GPYQ.js} +7 -3
  449. package/dist/chunk-TGZ6GPYQ.js.map +1 -0
  450. package/dist/{chunk-SB2SEGR6.js → chunk-TIM4PXWN.js} +3 -3
  451. package/dist/{chunk-2ILXXBMG.js → chunk-TLVKJBPM.js} +12 -6
  452. package/dist/chunk-TLVKJBPM.js.map +1 -0
  453. package/dist/{chunk-BGTG7G54.js → chunk-TLZR6UPJ.js} +6 -3
  454. package/dist/chunk-TLZR6UPJ.js.map +1 -0
  455. package/dist/{chunk-MHLYX6QW.js → chunk-TRAMTVIO.js} +5 -5
  456. package/dist/{chunk-QO7UJXXO.js → chunk-TVMSXL3R.js} +2 -2
  457. package/dist/{chunk-XLCVMRSO.js → chunk-U67CX4FL.js} +12 -4
  458. package/dist/chunk-U67CX4FL.js.map +1 -0
  459. package/dist/{chunk-DXFKPY2K.js → chunk-UCQRJTCI.js} +4 -4
  460. package/dist/{chunk-CW6Y32N2.js → chunk-UF4JFRLE.js} +6 -6
  461. package/dist/{chunk-HHPJXK4Z.js → chunk-UHQZ5XPW.js} +2 -2
  462. package/dist/{chunk-FTDGFWB5.js → chunk-UK3DSFMK.js} +5 -5
  463. package/dist/{chunk-EERUSI52.js → chunk-URAX2JPM.js} +6 -3
  464. package/dist/chunk-URAX2JPM.js.map +1 -0
  465. package/dist/{chunk-GBKIGUNP.js → chunk-UYNJ3FYE.js} +3 -3
  466. package/dist/{chunk-UZOG6HNN.js → chunk-V65YK5DC.js} +5 -4
  467. package/dist/chunk-V65YK5DC.js.map +1 -0
  468. package/dist/{chunk-4HUSG5MR.js → chunk-V6DMNSW6.js} +4 -4
  469. package/dist/chunk-V6DMNSW6.js.map +1 -0
  470. package/dist/{chunk-MSC43MCJ.js → chunk-VAGGIRLA.js} +10 -7
  471. package/dist/chunk-VAGGIRLA.js.map +1 -0
  472. package/dist/{chunk-2MYSXWZQ.js → chunk-VKTF3GAP.js} +9 -9
  473. package/dist/chunk-VRKNVZZQ.js +145 -0
  474. package/dist/chunk-VRKNVZZQ.js.map +1 -0
  475. package/dist/{chunk-LTTYUSJ2.js → chunk-VTDZUO2J.js} +4 -2
  476. package/dist/chunk-VTDZUO2J.js.map +1 -0
  477. package/dist/{chunk-4XBAEKQQ.js → chunk-W2RXXF7K.js} +4 -4
  478. package/dist/{chunk-3Z3WIQ5M.js → chunk-W3EVATBS.js} +5 -5
  479. package/dist/{chunk-A2YLFKQU.js → chunk-W5WYTVLS.js} +2 -2
  480. package/dist/{chunk-64AOS2WA.js → chunk-WWIYYXY3.js} +17 -10
  481. package/dist/chunk-WWIYYXY3.js.map +1 -0
  482. package/dist/{chunk-EBCEDBHX.js → chunk-XDDKRACZ.js} +3 -3
  483. package/dist/{chunk-WOXWLJYR.js → chunk-XF47LPCF.js} +5 -2
  484. package/dist/chunk-XF47LPCF.js.map +1 -0
  485. package/dist/{chunk-SLSED46V.js → chunk-Y3DV7LGC.js} +2 -1
  486. package/dist/{chunk-SLSED46V.js.map → chunk-Y3DV7LGC.js.map} +1 -1
  487. package/dist/{chunk-ASZGMKB4.js → chunk-Y3TD7HOY.js} +2 -2
  488. package/dist/{chunk-3YLRR4JM.js → chunk-Y3YZBB74.js} +2 -2
  489. package/dist/{chunk-HBHBRRSW.js → chunk-YBAK2WN5.js} +7 -7
  490. package/dist/{chunk-LOLYI6PS.js → chunk-YCZGYYUX.js} +11 -8
  491. package/dist/chunk-YCZGYYUX.js.map +1 -0
  492. package/dist/{chunk-XODBYGTH.js → chunk-YMKSPW4T.js} +2 -2
  493. package/dist/{chunk-YOKUDQIJ.js → chunk-YOQAK2RN.js} +7 -3
  494. package/dist/chunk-YOQAK2RN.js.map +1 -0
  495. package/dist/{chunk-6RTE4UNO.js → chunk-YV4O7KDR.js} +1 -1
  496. package/dist/{chunk-MM7BPTVV.js → chunk-Z52W7FEU.js} +2 -2
  497. package/dist/{chunk-7P5PNRBT.js → chunk-ZDBG7QG2.js} +6 -6
  498. package/dist/{chunk-Z5V5E3JW.js → chunk-ZIHSCBMN.js} +10 -10
  499. package/dist/{chunk-S4JXSC4D.js → chunk-ZT73ACK3.js} +6 -6
  500. package/dist/{chunk-TJO4CBYT.js → chunk-ZX3QMCYO.js} +6 -3
  501. package/dist/chunk-ZX3QMCYO.js.map +1 -0
  502. package/dist/data-display/Alert.js +3 -3
  503. package/dist/data-display/AlertDialog.js +3 -2
  504. package/dist/data-display/AsyncStateContainer.js +7 -5
  505. package/dist/data-display/Avatar.js +5 -4
  506. package/dist/data-display/CardKit.js +19 -18
  507. package/dist/data-display/Carousel.js +7 -4
  508. package/dist/data-display/Chart.js +11 -11
  509. package/dist/data-display/DataGrid.js +2 -2
  510. package/dist/data-display/DataViews.js +94 -92
  511. package/dist/data-display/EmptyState.js +3 -2
  512. package/dist/data-display/ErrorState.js +2 -1
  513. package/dist/data-display/FleetMap.js +16 -12
  514. package/dist/data-display/HoverCard.js +2 -2
  515. package/dist/data-display/InteractiveTooltip.js +2 -2
  516. package/dist/data-display/LazyImage.js +3 -2
  517. package/dist/data-display/Lightbox.js +6 -6
  518. package/dist/data-display/LoadingState.js +3 -1
  519. package/dist/data-display/MapPreview.js +9 -6
  520. package/dist/data-display/Progress.js +2 -2
  521. package/dist/data-display/SectionOnboarding.js +6 -4
  522. package/dist/data-display/Sheet.js +6 -5
  523. package/dist/data-display/Stepper.js +3 -1
  524. package/dist/data-display/Table.js +6 -4
  525. package/dist/data-display/Timeline.js +4 -2
  526. package/dist/en-US.js +17 -13
  527. package/dist/feedback/ConfirmAction.js +10 -9
  528. package/dist/feedback/Dialog.js +3 -2
  529. package/dist/feedback/NotificationStatusNotice.js +4 -4
  530. package/dist/feedback/SequenceResolver.js +12 -11
  531. package/dist/feedback/Sonner.js +3 -2
  532. package/dist/feedback/StackedModal.js +7 -6
  533. package/dist/feedback/Toast.js +2 -1
  534. package/dist/feedback/TutorialOverlay.js +3 -2
  535. package/dist/form/AddressAutocomplete.js +12 -10
  536. package/dist/form/Autocomplete.js +2 -2
  537. package/dist/form/Calendar.js +6 -6
  538. package/dist/form/CategorySelect.js +9 -9
  539. package/dist/form/Checkbox.js +2 -2
  540. package/dist/form/CodeEditor.js +3 -3
  541. package/dist/form/Command.js +4 -3
  542. package/dist/form/DateRangePicker.js +12 -11
  543. package/dist/form/InputOTP.js +2 -2
  544. package/dist/form/Menubar.js +2 -2
  545. package/dist/form/PhoneInput.js +4 -3
  546. package/dist/form/PickerSheet.js +4 -4
  547. package/dist/form/RichTextEditor.js +7 -5
  548. package/dist/form/Switch.js +4 -4
  549. package/dist/form/Textarea.js +1 -1
  550. package/dist/form/UploadButton.js +3 -2
  551. package/dist/form/total-form.js +18 -17
  552. package/dist/layout/Card.js +2 -2
  553. package/dist/layout/ContentToolbar.js +13 -11
  554. package/dist/layout/Dashboard.js +2 -1
  555. package/dist/layout/Drawer.js +2 -1
  556. package/dist/layout/ScrollArea.js +3 -3
  557. package/dist/layout/SettingCard.js +17 -17
  558. package/dist/layout/SettingsLayout.js +7 -6
  559. package/dist/layout/TableFilter.js +2 -1
  560. package/dist/locales.js +37 -29
  561. package/dist/locales.js.map +1 -1
  562. package/dist/native/chunks/{chunk-BXNZHDXK.js → chunk-67CYDCHZ.js} +12 -5
  563. package/dist/native/chunks/chunk-67CYDCHZ.js.map +1 -0
  564. package/dist/native/chunks/{chunk-AVHGS66L.js → chunk-7AVFQB6A.js} +7 -4
  565. package/dist/native/chunks/chunk-7AVFQB6A.js.map +1 -0
  566. package/dist/native/chunks/chunk-DUELD4HY.js +145 -0
  567. package/dist/native/chunks/chunk-DUELD4HY.js.map +1 -0
  568. package/dist/native/data-display/Avatar.js +4 -1
  569. package/dist/native/data-display/Avatar.js.map +1 -1
  570. package/dist/native/data-display/Badge.js +9 -3
  571. package/dist/native/data-display/Badge.js.map +1 -1
  572. package/dist/native/data-display/Chip.js +9 -1
  573. package/dist/native/data-display/Chip.js.map +1 -1
  574. package/dist/native/data-display/EmptyState.js +3 -2
  575. package/dist/native/data-display/ErrorState.js +5 -2
  576. package/dist/native/data-display/ErrorState.js.map +1 -1
  577. package/dist/native/data-display/FleetMap.js +3 -2
  578. package/dist/native/data-display/FleetMap.js.map +1 -1
  579. package/dist/native/data-display/LoadingState.js +16 -5
  580. package/dist/native/data-display/LoadingState.js.map +1 -1
  581. package/dist/native/feedback/Dialog.js +20 -3
  582. package/dist/native/feedback/Dialog.js.map +1 -1
  583. package/dist/native/form/Button.js +2 -1
  584. package/dist/native/form/Checkbox.js +6 -1
  585. package/dist/native/form/Checkbox.js.map +1 -1
  586. package/dist/native/form/Input.js +11 -3
  587. package/dist/native/form/Input.js.map +1 -1
  588. package/dist/native/form/Switch.js +5 -1
  589. package/dist/native/form/Switch.js.map +1 -1
  590. package/dist/navigation/AppHeader.js +13 -11
  591. package/dist/navigation/Breadcrumbs.js +2 -1
  592. package/dist/navigation/CommandPalette.js +6 -4
  593. package/dist/navigation/NavigationMenu.js +7 -6
  594. package/dist/navigation/Pagination.js +2 -2
  595. package/dist/navigation/SectionNav.js +7 -6
  596. package/dist/pt-BR.js +10 -6
  597. package/dist/social-login-button.js +5 -4
  598. package/dist/types/components/data-display/AlertDialog/AlertDialog.d.ts.map +1 -1
  599. package/dist/types/components/data-display/AlertDialog/AlertDialog.parts.d.ts.map +1 -1
  600. package/dist/types/components/data-display/AlertDialog/AlertDialog.types.d.ts +5 -0
  601. package/dist/types/components/data-display/AlertDialog/AlertDialog.types.d.ts.map +1 -1
  602. package/dist/types/components/data-display/Avatar/Avatar.d.ts.map +1 -1
  603. package/dist/types/components/data-display/Carousel/Carousel.chrome.d.ts.map +1 -1
  604. package/dist/types/components/data-display/Carousel/Carousel.parts.d.ts.map +1 -1
  605. package/dist/types/components/data-display/Carousel/Carousel.types.d.ts +2 -0
  606. package/dist/types/components/data-display/Carousel/Carousel.types.d.ts.map +1 -1
  607. package/dist/types/components/data-display/DataViews/DeleteViewDialog.d.ts.map +1 -1
  608. package/dist/types/components/data-display/DataViews/data-views-copy.d.ts +11 -0
  609. package/dist/types/components/data-display/DataViews/data-views-copy.d.ts.map +1 -1
  610. package/dist/types/components/data-display/DataViews/data-views-grid-helpers.d.ts +6 -2
  611. package/dist/types/components/data-display/DataViews/data-views-grid-helpers.d.ts.map +1 -1
  612. package/dist/types/components/data-display/DataViews/use-data-views-state.d.ts.map +1 -1
  613. package/dist/types/components/data-display/EmptyState/EmptyState.d.ts.map +1 -1
  614. package/dist/types/components/data-display/ErrorState/ErrorState.d.ts.map +1 -1
  615. package/dist/types/components/data-display/LazyImage/LazyImage.d.ts.map +1 -1
  616. package/dist/types/components/data-display/LazyImage/LazyImage.types.d.ts +10 -0
  617. package/dist/types/components/data-display/LazyImage/LazyImage.types.d.ts.map +1 -1
  618. package/dist/types/components/data-display/LoadingState/LoadingState.base.d.ts +7 -0
  619. package/dist/types/components/data-display/LoadingState/LoadingState.base.d.ts.map +1 -1
  620. package/dist/types/components/data-display/LoadingState/LoadingState.d.ts.map +1 -1
  621. package/dist/types/components/data-display/MapPreview/MapControlBar.d.ts.map +1 -1
  622. package/dist/types/components/data-display/MapPreview/MapLayers.d.ts +1 -1
  623. package/dist/types/components/data-display/MapPreview/MapLayers.d.ts.map +1 -1
  624. package/dist/types/components/data-display/MapPreview/MapMarkers.d.ts +2 -0
  625. package/dist/types/components/data-display/MapPreview/MapMarkers.d.ts.map +1 -1
  626. package/dist/types/components/data-display/MapPreview/MapPreview.d.ts.map +1 -1
  627. package/dist/types/components/data-display/MapPreview/MapPreview.helpers.d.ts +7 -1
  628. package/dist/types/components/data-display/MapPreview/MapPreview.helpers.d.ts.map +1 -1
  629. package/dist/types/components/data-display/Sheet/Sheet.body.d.ts +1 -1
  630. package/dist/types/components/data-display/Sheet/Sheet.body.d.ts.map +1 -1
  631. package/dist/types/components/data-display/Sheet/Sheet.parts.d.ts.map +1 -1
  632. package/dist/types/components/data-display/Sheet/Sheet.types.d.ts +10 -0
  633. package/dist/types/components/data-display/Sheet/Sheet.types.d.ts.map +1 -1
  634. package/dist/types/components/data-display/Stepper/Stepper.d.ts.map +1 -1
  635. package/dist/types/components/data-display/Stepper/Stepper.types.d.ts +4 -0
  636. package/dist/types/components/data-display/Stepper/Stepper.types.d.ts.map +1 -1
  637. package/dist/types/components/data-display/Table/Table.d.ts.map +1 -1
  638. package/dist/types/components/data-display/Table/Table.helpers.d.ts.map +1 -1
  639. package/dist/types/components/data-display/Table/Table.types.d.ts +11 -0
  640. package/dist/types/components/data-display/Table/Table.types.d.ts.map +1 -1
  641. package/dist/types/components/data-display/Table/TableParts.d.ts +2 -1
  642. package/dist/types/components/data-display/Table/TableParts.d.ts.map +1 -1
  643. package/dist/types/components/data-display/Table/TableParts.hooks.d.ts +2 -2
  644. package/dist/types/components/data-display/Table/TableParts.hooks.d.ts.map +1 -1
  645. package/dist/types/components/data-display/Timeline/Timeline.d.ts.map +1 -1
  646. package/dist/types/components/data-display/Timeline/Timeline.types.d.ts +3 -0
  647. package/dist/types/components/data-display/Timeline/Timeline.types.d.ts.map +1 -1
  648. package/dist/types/components/data-display/Timeline/TimelineRow.d.ts +2 -0
  649. package/dist/types/components/data-display/Timeline/TimelineRow.d.ts.map +1 -1
  650. package/dist/types/components/feedback/Dialog/Dialog.base.d.ts +10 -0
  651. package/dist/types/components/feedback/Dialog/Dialog.base.d.ts.map +1 -1
  652. package/dist/types/components/feedback/Dialog/Dialog.d.ts.map +1 -1
  653. package/dist/types/components/feedback/Sonner/Sonner.d.ts +6 -0
  654. package/dist/types/components/feedback/Sonner/Sonner.d.ts.map +1 -1
  655. package/dist/types/components/feedback/Sonner/SonnerToast.d.ts.map +1 -1
  656. package/dist/types/components/feedback/StackedModal/StackedModal.d.ts.map +1 -1
  657. package/dist/types/components/feedback/StackedModal/StackedModal.parts.d.ts +2 -0
  658. package/dist/types/components/feedback/StackedModal/StackedModal.parts.d.ts.map +1 -1
  659. package/dist/types/components/feedback/StackedModal/StackedModal.types.d.ts +5 -0
  660. package/dist/types/components/feedback/StackedModal/StackedModal.types.d.ts.map +1 -1
  661. package/dist/types/components/feedback/Toast/Toast.d.ts.map +1 -1
  662. package/dist/types/components/feedback/Toast/Toast.types.d.ts +5 -0
  663. package/dist/types/components/feedback/Toast/Toast.types.d.ts.map +1 -1
  664. package/dist/types/components/feedback/TutorialOverlay/TutorialOverlay.d.ts.map +1 -1
  665. package/dist/types/components/feedback/TutorialOverlay/TutorialStepBody.d.ts.map +1 -1
  666. package/dist/types/components/form/AddressAutocomplete/AddressAutocomplete.d.ts.map +1 -1
  667. package/dist/types/components/form/AddressAutocomplete/AddressAutocomplete.helpers.d.ts +1 -1
  668. package/dist/types/components/form/AddressAutocomplete/AddressAutocomplete.helpers.d.ts.map +1 -1
  669. package/dist/types/components/form/AddressAutocomplete/AddressAutocomplete.hooks.d.ts +3 -1
  670. package/dist/types/components/form/AddressAutocomplete/AddressAutocomplete.hooks.d.ts.map +1 -1
  671. package/dist/types/components/form/AddressAutocomplete/AddressAutocompleteField.d.ts.map +1 -1
  672. package/dist/types/components/form/AddressAutocomplete/useAddressPredictions.d.ts +2 -1
  673. package/dist/types/components/form/AddressAutocomplete/useAddressPredictions.d.ts.map +1 -1
  674. package/dist/types/components/form/AddressAutocomplete/useAddressSelection.d.ts +3 -1
  675. package/dist/types/components/form/AddressAutocomplete/useAddressSelection.d.ts.map +1 -1
  676. package/dist/types/components/form/AddressAutocomplete/useCurrentLocation.d.ts +3 -1
  677. package/dist/types/components/form/AddressAutocomplete/useCurrentLocation.d.ts.map +1 -1
  678. package/dist/types/components/form/AddressAutocomplete/useGoogleMapsAPI.d.ts +4 -1
  679. package/dist/types/components/form/AddressAutocomplete/useGoogleMapsAPI.d.ts.map +1 -1
  680. package/dist/types/components/form/Button/Button.native.loading.d.ts +2 -1
  681. package/dist/types/components/form/Button/Button.native.loading.d.ts.map +1 -1
  682. package/dist/types/components/form/Command/Command.hooks.d.ts.map +1 -1
  683. package/dist/types/components/form/Command/Command.parts.d.ts.map +1 -1
  684. package/dist/types/components/form/DateRangePicker/DateRangePicker.range.d.ts.map +1 -1
  685. package/dist/types/components/form/PhoneInput/PhoneInput.d.ts.map +1 -1
  686. package/dist/types/components/form/PhoneInput/PhoneInput.types.d.ts +1 -0
  687. package/dist/types/components/form/PhoneInput/PhoneInput.types.d.ts.map +1 -1
  688. package/dist/types/components/form/PhoneInput/countries.d.ts +6 -0
  689. package/dist/types/components/form/PhoneInput/countries.d.ts.map +1 -1
  690. package/dist/types/components/form/RichTextEditor/RichTextEditor.d.ts.map +1 -1
  691. package/dist/types/components/form/RichTextEditor/RichTextEditor.dom.d.ts +1 -1
  692. package/dist/types/components/form/RichTextEditor/RichTextEditor.dom.d.ts.map +1 -1
  693. package/dist/types/components/form/RichTextEditor/RichTextEditor.format.d.ts +2 -1
  694. package/dist/types/components/form/RichTextEditor/RichTextEditor.format.d.ts.map +1 -1
  695. package/dist/types/components/form/RichTextEditor/RichTextEditor.hooks.d.ts +2 -1
  696. package/dist/types/components/form/RichTextEditor/RichTextEditor.hooks.d.ts.map +1 -1
  697. package/dist/types/components/form/RichTextEditor/RichTextEditor.types.d.ts +7 -1
  698. package/dist/types/components/form/RichTextEditor/RichTextEditor.types.d.ts.map +1 -1
  699. package/dist/types/components/form/RichTextEditor/RichTextEditorToolbar.d.ts +2 -0
  700. package/dist/types/components/form/RichTextEditor/RichTextEditorToolbar.d.ts.map +1 -1
  701. package/dist/types/components/form/Textarea/TextareaRichEditor.d.ts.map +1 -1
  702. package/dist/types/components/form/UploadButton/UploadButton.hooks.d.ts.map +1 -1
  703. package/dist/types/components/form/total-form/FormErrorSnackbar.d.ts.map +1 -1
  704. package/dist/types/components/layout/ContentToolbar/ColumnsMenu.d.ts.map +1 -1
  705. package/dist/types/components/layout/ContentToolbar/ContentToolbar.types.d.ts +14 -0
  706. package/dist/types/components/layout/ContentToolbar/ContentToolbar.types.d.ts.map +1 -1
  707. package/dist/types/components/layout/ContentToolbar/FilterTrigger.d.ts +1 -1
  708. package/dist/types/components/layout/ContentToolbar/FilterTrigger.d.ts.map +1 -1
  709. package/dist/types/components/layout/ContentToolbar/MultiSelectDropdown.d.ts.map +1 -1
  710. package/dist/types/components/layout/ContentToolbar/ViewSelector.d.ts +1 -1
  711. package/dist/types/components/layout/ContentToolbar/ViewSelector.d.ts.map +1 -1
  712. package/dist/types/components/layout/Dashboard/Dashboard.d.ts +2 -2
  713. package/dist/types/components/layout/Dashboard/Dashboard.d.ts.map +1 -1
  714. package/dist/types/components/layout/Dashboard/Dashboard.types.d.ts +5 -0
  715. package/dist/types/components/layout/Dashboard/Dashboard.types.d.ts.map +1 -1
  716. package/dist/types/components/layout/Drawer/Drawer.d.ts.map +1 -1
  717. package/dist/types/components/layout/SettingsLayout/SettingsLayout.d.ts.map +1 -1
  718. package/dist/types/components/layout/SettingsLayout/SettingsLayout.rail.d.ts +3 -1
  719. package/dist/types/components/layout/SettingsLayout/SettingsLayout.rail.d.ts.map +1 -1
  720. package/dist/types/components/layout/SettingsLayout/SettingsLayout.types.d.ts +6 -0
  721. package/dist/types/components/layout/SettingsLayout/SettingsLayout.types.d.ts.map +1 -1
  722. package/dist/types/components/layout/TableFilter/TableFilter.d.ts.map +1 -1
  723. package/dist/types/components/navigation/AppHeader/AppHeader.identity.d.ts.map +1 -1
  724. package/dist/types/components/navigation/AppHeader/AppHeader.types.d.ts +5 -1
  725. package/dist/types/components/navigation/AppHeader/AppHeader.types.d.ts.map +1 -1
  726. package/dist/types/components/navigation/Breadcrumbs/Breadcrumbs.d.ts.map +1 -1
  727. package/dist/types/components/navigation/CommandPalette/CommandPalette.d.ts.map +1 -1
  728. package/dist/types/components/navigation/CommandPalette/CommandPalette.helpers.d.ts +1 -1
  729. package/dist/types/components/navigation/CommandPalette/CommandPalette.helpers.d.ts.map +1 -1
  730. package/dist/types/components/navigation/CommandPalette/CommandPalette.hooks.d.ts +2 -1
  731. package/dist/types/components/navigation/CommandPalette/CommandPalette.hooks.d.ts.map +1 -1
  732. package/dist/types/components/navigation/CommandPalette/CommandPaletteResults.d.ts.map +1 -1
  733. package/dist/types/components/navigation/NavigationMenu/NavigationMenu.d.ts.map +1 -1
  734. package/dist/types/components/navigation/NavigationMenu/NavigationMenu.shell.d.ts +1 -0
  735. package/dist/types/components/navigation/NavigationMenu/NavigationMenu.shell.d.ts.map +1 -1
  736. package/dist/types/components/navigation/NavigationMenu/NavigationMenu.types.d.ts +11 -0
  737. package/dist/types/components/navigation/NavigationMenu/NavigationMenu.types.d.ts.map +1 -1
  738. package/dist/types/components/navigation/NavigationMenu/NavigationMenuItem.d.ts.map +1 -1
  739. package/dist/types/components/navigation/NavigationMenu/NavigationStandardBody.d.ts +4 -0
  740. package/dist/types/components/navigation/NavigationMenu/NavigationStandardBody.d.ts.map +1 -1
  741. package/dist/types/components/typography/Code/Code.d.ts.map +1 -1
  742. package/dist/types/components/typography/Code/Code.types.d.ts +4 -0
  743. package/dist/types/components/typography/Code/Code.types.d.ts.map +1 -1
  744. package/dist/types/components/utility/AnimatedIcon/AnimatedIcon.d.ts.map +1 -1
  745. package/dist/types/components/utility/InfiniteScroll/InfiniteScroll.d.ts.map +1 -1
  746. package/dist/types/components/utility/InfiniteScroll/InfiniteScroll.parts.d.ts +1 -0
  747. package/dist/types/components/utility/InfiniteScroll/InfiniteScroll.parts.d.ts.map +1 -1
  748. package/dist/types/components/utility/InfiniteScroll/InfiniteScroll.types.d.ts +6 -0
  749. package/dist/types/components/utility/InfiniteScroll/InfiniteScroll.types.d.ts.map +1 -1
  750. package/dist/types/components/utility/WorkflowStep/WorkflowStep.d.ts.map +1 -1
  751. package/dist/types/components/utility/WorkflowStep/WorkflowStep.helpers.d.ts +4 -1
  752. package/dist/types/components/utility/WorkflowStep/WorkflowStep.helpers.d.ts.map +1 -1
  753. package/dist/types/components/utility/WorkflowStep/WorkflowStep.parts.d.ts.map +1 -1
  754. package/dist/types/components/utility/WorkflowStep/WorkflowStep.types.d.ts +9 -0
  755. package/dist/types/components/utility/WorkflowStep/WorkflowStep.types.d.ts.map +1 -1
  756. package/dist/types/components/utility/WorkflowStep/WorkflowStepRow.d.ts +1 -0
  757. package/dist/types/components/utility/WorkflowStep/WorkflowStepRow.d.ts.map +1 -1
  758. package/dist/types/copy/data-display.d.ts +24 -0
  759. package/dist/types/copy/data-display.d.ts.map +1 -1
  760. package/dist/types/copy/feedback.d.ts +4 -0
  761. package/dist/types/copy/feedback.d.ts.map +1 -1
  762. package/dist/types/copy/form.d.ts +58 -0
  763. package/dist/types/copy/form.d.ts.map +1 -1
  764. package/dist/types/copy/labels.d.ts +219 -0
  765. package/dist/types/copy/labels.d.ts.map +1 -0
  766. package/dist/types/copy/navigation.d.ts +12 -0
  767. package/dist/types/copy/navigation.d.ts.map +1 -1
  768. package/dist/types/copy/utility.d.ts +8 -1
  769. package/dist/types/copy/utility.d.ts.map +1 -1
  770. package/dist/types/copy.d.ts +1 -0
  771. package/dist/types/copy.d.ts.map +1 -1
  772. package/dist/types/en-US.d.ts +1 -0
  773. package/dist/types/en-US.d.ts.map +1 -1
  774. package/dist/types/en-US.data-display.d.ts +2 -2
  775. package/dist/types/en-US.data-display.d.ts.map +1 -1
  776. package/dist/types/en-US.feedback.d.ts +1 -1
  777. package/dist/types/en-US.feedback.d.ts.map +1 -1
  778. package/dist/types/en-US.form.d.ts +4 -4
  779. package/dist/types/en-US.form.d.ts.map +1 -1
  780. package/dist/types/en-US.labels.d.ts +9 -0
  781. package/dist/types/en-US.labels.d.ts.map +1 -0
  782. package/dist/types/en-US.navigation.d.ts +1 -1
  783. package/dist/types/en-US.navigation.d.ts.map +1 -1
  784. package/dist/types/en-US.utility.d.ts +1 -1
  785. package/dist/types/en-US.utility.d.ts.map +1 -1
  786. package/dist/types/locales.d.ts +2 -1
  787. package/dist/types/locales.d.ts.map +1 -1
  788. package/dist/types/pt-BR.d.ts +1 -0
  789. package/dist/types/pt-BR.d.ts.map +1 -1
  790. package/dist/types/pt-BR.data-display.d.ts +2 -2
  791. package/dist/types/pt-BR.data-display.d.ts.map +1 -1
  792. package/dist/types/pt-BR.feedback.d.ts +1 -1
  793. package/dist/types/pt-BR.feedback.d.ts.map +1 -1
  794. package/dist/types/pt-BR.form.d.ts +4 -4
  795. package/dist/types/pt-BR.form.d.ts.map +1 -1
  796. package/dist/types/pt-BR.labels.d.ts +8 -0
  797. package/dist/types/pt-BR.labels.d.ts.map +1 -0
  798. package/dist/types/pt-BR.navigation.d.ts +1 -1
  799. package/dist/types/pt-BR.navigation.d.ts.map +1 -1
  800. package/dist/types/pt-BR.utility.d.ts +1 -1
  801. package/dist/types/pt-BR.utility.d.ts.map +1 -1
  802. package/dist/types/social-login-button/social-login-button.d.ts.map +1 -1
  803. package/dist/types/user-avatar/user-avatar.d.ts +6 -1
  804. package/dist/types/user-avatar/user-avatar.d.ts.map +1 -1
  805. package/dist/types/utils/resolve-labels.d.ts +9 -0
  806. package/dist/types/utils/resolve-labels.d.ts.map +1 -0
  807. package/dist/types-native/components/data-display/Avatar/Avatar.native.d.ts.map +1 -1
  808. package/dist/types-native/components/data-display/Badge/Badge.native.d.ts +1 -0
  809. package/dist/types-native/components/data-display/Badge/Badge.native.d.ts.map +1 -1
  810. package/dist/types-native/components/data-display/Badge/Badge.types.native.d.ts +2 -0
  811. package/dist/types-native/components/data-display/Badge/Badge.types.native.d.ts.map +1 -1
  812. package/dist/types-native/components/data-display/Badge/BadgeContent.native.d.ts +2 -1
  813. package/dist/types-native/components/data-display/Badge/BadgeContent.native.d.ts.map +1 -1
  814. package/dist/types-native/components/data-display/Chip/Chip.native.d.ts +1 -0
  815. package/dist/types-native/components/data-display/Chip/Chip.native.d.ts.map +1 -1
  816. package/dist/types-native/components/data-display/Chip/Chip.types.native.d.ts +2 -0
  817. package/dist/types-native/components/data-display/Chip/Chip.types.native.d.ts.map +1 -1
  818. package/dist/types-native/components/data-display/EmptyState/EmptyState.native.d.ts.map +1 -1
  819. package/dist/types-native/components/data-display/ErrorState/ErrorState.native.d.ts.map +1 -1
  820. package/dist/types-native/components/data-display/LoadingState/LoadingState.base.d.ts +7 -0
  821. package/dist/types-native/components/data-display/LoadingState/LoadingState.base.d.ts.map +1 -1
  822. package/dist/types-native/components/data-display/LoadingState/LoadingState.native.d.ts.map +1 -1
  823. package/dist/types-native/components/feedback/Dialog/Dialog.base.d.ts +10 -0
  824. package/dist/types-native/components/feedback/Dialog/Dialog.base.d.ts.map +1 -1
  825. package/dist/types-native/components/feedback/Dialog/Dialog.native.d.ts.map +1 -1
  826. package/dist/types-native/components/feedback/Dialog/DialogParts.native.d.ts +1 -1
  827. package/dist/types-native/components/feedback/Dialog/DialogParts.native.d.ts.map +1 -1
  828. package/dist/types-native/components/form/Button/Button.native.d.ts +1 -0
  829. package/dist/types-native/components/form/Button/Button.native.d.ts.map +1 -1
  830. package/dist/types-native/components/form/Button/Button.native.loading.d.ts +2 -1
  831. package/dist/types-native/components/form/Button/Button.native.loading.d.ts.map +1 -1
  832. package/dist/types-native/components/form/Button/Button.types.native.d.ts +2 -0
  833. package/dist/types-native/components/form/Button/Button.types.native.d.ts.map +1 -1
  834. package/dist/types-native/components/form/Checkbox/Checkbox.native.d.ts +1 -0
  835. package/dist/types-native/components/form/Checkbox/Checkbox.native.d.ts.map +1 -1
  836. package/dist/types-native/components/form/Checkbox/Checkbox.types.native.d.ts +2 -0
  837. package/dist/types-native/components/form/Checkbox/Checkbox.types.native.d.ts.map +1 -1
  838. package/dist/types-native/components/form/Input/Input.native.d.ts +1 -0
  839. package/dist/types-native/components/form/Input/Input.native.d.ts.map +1 -1
  840. package/dist/types-native/components/form/Input/Input.types.native.d.ts +2 -0
  841. package/dist/types-native/components/form/Input/Input.types.native.d.ts.map +1 -1
  842. package/dist/types-native/components/form/Switch/Switch.native.d.ts +1 -0
  843. package/dist/types-native/components/form/Switch/Switch.native.d.ts.map +1 -1
  844. package/dist/types-native/components/form/Switch/Switch.types.native.d.ts +2 -0
  845. package/dist/types-native/components/form/Switch/Switch.types.native.d.ts.map +1 -1
  846. package/dist/types-native/copy/data-display.d.ts +119 -0
  847. package/dist/types-native/copy/data-display.d.ts.map +1 -0
  848. package/dist/types-native/copy/labels.d.ts +219 -0
  849. package/dist/types-native/copy/labels.d.ts.map +1 -0
  850. package/dist/types-native/en-US.labels.d.ts +9 -0
  851. package/dist/types-native/en-US.labels.d.ts.map +1 -0
  852. package/dist/types-native/utils/resolve-labels.d.ts +9 -0
  853. package/dist/types-native/utils/resolve-labels.d.ts.map +1 -0
  854. package/dist/typography/Code.js +2 -1
  855. package/dist/user-avatar.js +9 -7
  856. package/dist/utility/AnimatedIcon.js +2 -1
  857. package/dist/utility/InfiniteScroll.js +3 -2
  858. package/dist/utility/InstallPrompt.js +2 -2
  859. package/dist/utility/WorkflowStep.js +6 -4
  860. package/package.json +2 -2
  861. package/src/components/data-display/AlertDialog/AlertDialog.parts.tsx +3 -2
  862. package/src/components/data-display/AlertDialog/AlertDialog.tsx +3 -1
  863. package/src/components/data-display/AlertDialog/AlertDialog.types.ts +6 -0
  864. package/src/components/data-display/Avatar/Avatar.native.tsx +2 -1
  865. package/src/components/data-display/Avatar/Avatar.tsx +2 -1
  866. package/src/components/data-display/Badge/Badge.native.tsx +2 -0
  867. package/src/components/data-display/Badge/Badge.types.native.ts +2 -0
  868. package/src/components/data-display/Badge/BadgeContent.native.tsx +4 -1
  869. package/src/components/data-display/Carousel/Carousel.chrome.tsx +1 -0
  870. package/src/components/data-display/Carousel/Carousel.parts.tsx +13 -9
  871. package/src/components/data-display/Carousel/Carousel.types.ts +2 -0
  872. package/src/components/data-display/Chip/Chip.native.tsx +9 -1
  873. package/src/components/data-display/Chip/Chip.types.native.ts +2 -0
  874. package/src/components/data-display/DataViews/DeleteViewDialog.tsx +2 -2
  875. package/src/components/data-display/DataViews/data-views-copy.ts +11 -0
  876. package/src/components/data-display/DataViews/data-views-grid-helpers.tsx +8 -3
  877. package/src/components/data-display/DataViews/data-views-view-nav.tsx +2 -2
  878. package/src/components/data-display/DataViews/use-data-views-state.ts +3 -1
  879. package/src/components/data-display/EmptyState/EmptyState.native.tsx +3 -2
  880. package/src/components/data-display/EmptyState/EmptyState.tsx +3 -2
  881. package/src/components/data-display/ErrorState/ErrorState.native.tsx +2 -1
  882. package/src/components/data-display/ErrorState/ErrorState.tsx +2 -1
  883. package/src/components/data-display/LazyImage/LazyImage.hooks.ts +1 -1
  884. package/src/components/data-display/LazyImage/LazyImage.tsx +4 -4
  885. package/src/components/data-display/LazyImage/LazyImage.types.ts +12 -0
  886. package/src/components/data-display/LoadingState/LoadingState.base.ts +8 -0
  887. package/src/components/data-display/LoadingState/LoadingState.native.tsx +10 -5
  888. package/src/components/data-display/LoadingState/LoadingState.tsx +9 -3
  889. package/src/components/data-display/MapPreview/MapControlBar.tsx +7 -3
  890. package/src/components/data-display/MapPreview/MapLayers.tsx +2 -2
  891. package/src/components/data-display/MapPreview/MapMarkers.tsx +13 -4
  892. package/src/components/data-display/MapPreview/MapPreview.helpers.ts +13 -2
  893. package/src/components/data-display/MapPreview/MapPreview.tsx +7 -3
  894. package/src/components/data-display/Sheet/Sheet.body.tsx +3 -0
  895. package/src/components/data-display/Sheet/Sheet.md +1 -0
  896. package/src/components/data-display/Sheet/Sheet.parts.tsx +4 -0
  897. package/src/components/data-display/Sheet/Sheet.types.ts +10 -0
  898. package/src/components/data-display/Stepper/Stepper.tsx +41 -7
  899. package/src/components/data-display/Stepper/Stepper.types.ts +4 -0
  900. package/src/components/data-display/Table/Table.helpers.ts +1 -0
  901. package/src/components/data-display/Table/Table.tsx +4 -5
  902. package/src/components/data-display/Table/Table.types.ts +12 -0
  903. package/src/components/data-display/Table/TableParts.hooks.tsx +8 -1
  904. package/src/components/data-display/Table/TableParts.tsx +19 -5
  905. package/src/components/data-display/Timeline/Timeline.tsx +6 -1
  906. package/src/components/data-display/Timeline/Timeline.types.ts +3 -0
  907. package/src/components/data-display/Timeline/TimelineRow.tsx +11 -4
  908. package/src/components/feedback/Dialog/Dialog.base.ts +10 -0
  909. package/src/components/feedback/Dialog/Dialog.native.tsx +2 -0
  910. package/src/components/feedback/Dialog/Dialog.tsx +5 -1
  911. package/src/components/feedback/Dialog/DialogParts.native.tsx +17 -3
  912. package/src/components/feedback/Sonner/Sonner.tsx +16 -6
  913. package/src/components/feedback/Sonner/SonnerToast.tsx +4 -2
  914. package/src/components/feedback/StackedModal/StackedModal.parts.tsx +24 -3
  915. package/src/components/feedback/StackedModal/StackedModal.tsx +4 -2
  916. package/src/components/feedback/StackedModal/StackedModal.types.ts +5 -0
  917. package/src/components/feedback/Toast/Toast.tsx +5 -2
  918. package/src/components/feedback/Toast/Toast.types.ts +5 -0
  919. package/src/components/feedback/TutorialOverlay/TutorialOverlay.tsx +3 -1
  920. package/src/components/feedback/TutorialOverlay/TutorialStepBody.tsx +12 -3
  921. package/src/components/form/AddressAutocomplete/AddressAutocomplete.helpers.ts +12 -6
  922. package/src/components/form/AddressAutocomplete/AddressAutocomplete.hooks.ts +15 -2
  923. package/src/components/form/AddressAutocomplete/AddressAutocomplete.tsx +1 -0
  924. package/src/components/form/AddressAutocomplete/AddressAutocompleteField.tsx +9 -3
  925. package/src/components/form/AddressAutocomplete/useAddressPredictions.ts +6 -3
  926. package/src/components/form/AddressAutocomplete/useAddressSelection.ts +8 -4
  927. package/src/components/form/AddressAutocomplete/useCurrentLocation.ts +12 -8
  928. package/src/components/form/AddressAutocomplete/useGoogleMapsAPI.ts +8 -4
  929. package/src/components/form/Button/Button.native.loading.tsx +11 -2
  930. package/src/components/form/Button/Button.native.tsx +2 -2
  931. package/src/components/form/Button/Button.types.native.ts +2 -0
  932. package/src/components/form/Checkbox/Checkbox.native.tsx +5 -2
  933. package/src/components/form/Checkbox/Checkbox.types.native.ts +2 -0
  934. package/src/components/form/Command/Command.hooks.ts +3 -2
  935. package/src/components/form/Command/Command.parts.tsx +3 -2
  936. package/src/components/form/DateRangePicker/DateRangePicker.range.ts +2 -1
  937. package/src/components/form/Input/Input.native.tsx +13 -4
  938. package/src/components/form/Input/Input.types.native.ts +2 -0
  939. package/src/components/form/PhoneInput/PhoneInput.md +2 -2
  940. package/src/components/form/PhoneInput/PhoneInput.tsx +22 -10
  941. package/src/components/form/PhoneInput/PhoneInput.types.ts +1 -0
  942. package/src/components/form/PhoneInput/countries.ts +18 -1
  943. package/src/components/form/RichTextEditor/RichTextEditor.dom.ts +5 -3
  944. package/src/components/form/RichTextEditor/RichTextEditor.format.ts +3 -1
  945. package/src/components/form/RichTextEditor/RichTextEditor.hooks.ts +4 -1
  946. package/src/components/form/RichTextEditor/RichTextEditor.tsx +10 -4
  947. package/src/components/form/RichTextEditor/RichTextEditor.types.ts +7 -1
  948. package/src/components/form/RichTextEditor/RichTextEditorToolbar.tsx +29 -19
  949. package/src/components/form/Switch/Switch.native.tsx +4 -3
  950. package/src/components/form/Switch/Switch.types.native.ts +2 -0
  951. package/src/components/form/Textarea/TextareaRichEditor.tsx +2 -1
  952. package/src/components/form/UploadButton/UploadButton.hooks.ts +16 -6
  953. package/src/components/form/total-form/FormErrorSnackbar.tsx +2 -1
  954. package/src/components/layout/ContentToolbar/ColumnsMenu.tsx +3 -2
  955. package/src/components/layout/ContentToolbar/ContentToolbar.types.ts +14 -0
  956. package/src/components/layout/ContentToolbar/FilterTrigger.tsx +14 -2
  957. package/src/components/layout/ContentToolbar/MultiSelectDropdown.tsx +4 -3
  958. package/src/components/layout/ContentToolbar/ViewSelector.tsx +15 -5
  959. package/src/components/layout/Dashboard/Dashboard.tsx +7 -2
  960. package/src/components/layout/Dashboard/Dashboard.types.ts +5 -0
  961. package/src/components/layout/Drawer/Drawer.tsx +2 -1
  962. package/src/components/layout/SettingsLayout/SettingsLayout.md +1 -0
  963. package/src/components/layout/SettingsLayout/SettingsLayout.rail.tsx +9 -2
  964. package/src/components/layout/SettingsLayout/SettingsLayout.tsx +16 -5
  965. package/src/components/layout/SettingsLayout/SettingsLayout.types.ts +6 -0
  966. package/src/components/layout/TableFilter/TableFilter.tsx +4 -3
  967. package/src/components/navigation/AppHeader/AppHeader.identity.tsx +2 -1
  968. package/src/components/navigation/AppHeader/AppHeader.types.ts +5 -1
  969. package/src/components/navigation/Breadcrumbs/Breadcrumbs.tsx +2 -1
  970. package/src/components/navigation/CommandPalette/CommandPalette.helpers.ts +6 -2
  971. package/src/components/navigation/CommandPalette/CommandPalette.hooks.ts +9 -1
  972. package/src/components/navigation/CommandPalette/CommandPalette.tsx +16 -6
  973. package/src/components/navigation/CommandPalette/CommandPaletteResults.tsx +3 -1
  974. package/src/components/navigation/NavigationMenu/NavigationMenu.shell.tsx +7 -4
  975. package/src/components/navigation/NavigationMenu/NavigationMenu.tsx +4 -0
  976. package/src/components/navigation/NavigationMenu/NavigationMenu.types.ts +13 -0
  977. package/src/components/navigation/NavigationMenu/NavigationMenuItem.tsx +2 -0
  978. package/src/components/navigation/NavigationMenu/NavigationStandardBody.tsx +24 -4
  979. package/src/components/typography/Code/Code.tsx +28 -6
  980. package/src/components/typography/Code/Code.types.ts +4 -0
  981. package/src/components/utility/AnimatedIcon/AnimatedIcon.tsx +2 -1
  982. package/src/components/utility/InfiniteScroll/InfiniteScroll.parts.tsx +6 -2
  983. package/src/components/utility/InfiniteScroll/InfiniteScroll.tsx +2 -1
  984. package/src/components/utility/InfiniteScroll/InfiniteScroll.types.ts +6 -0
  985. package/src/components/utility/WorkflowStep/WorkflowStep.helpers.ts +9 -1
  986. package/src/components/utility/WorkflowStep/WorkflowStep.parts.tsx +3 -2
  987. package/src/components/utility/WorkflowStep/WorkflowStep.tsx +3 -1
  988. package/src/components/utility/WorkflowStep/WorkflowStep.types.ts +10 -0
  989. package/src/components/utility/WorkflowStep/WorkflowStepRow.tsx +3 -0
  990. package/src/copy/data-display.ts +19 -0
  991. package/src/copy/feedback.ts +4 -0
  992. package/src/copy/form.ts +58 -0
  993. package/src/copy/labels.ts +249 -0
  994. package/src/copy/navigation.ts +12 -0
  995. package/src/copy/utility.ts +8 -1
  996. package/src/copy.ts +1 -0
  997. package/src/en-US.data-display.ts +14 -2
  998. package/src/en-US.feedback.ts +3 -1
  999. package/src/en-US.form.ts +27 -4
  1000. package/src/en-US.labels.ts +147 -0
  1001. package/src/en-US.navigation.ts +5 -1
  1002. package/src/en-US.ts +1 -0
  1003. package/src/en-US.utility.ts +3 -1
  1004. package/src/locales.ts +4 -0
  1005. package/src/pt-BR.data-display.ts +14 -2
  1006. package/src/pt-BR.feedback.ts +3 -1
  1007. package/src/pt-BR.form.ts +40 -4
  1008. package/src/pt-BR.labels.ts +146 -0
  1009. package/src/pt-BR.navigation.ts +5 -1
  1010. package/src/pt-BR.ts +1 -0
  1011. package/src/pt-BR.utility.ts +3 -1
  1012. package/src/social-login-button/social-login-button.tsx +3 -2
  1013. package/src/user-avatar/user-avatar.tsx +11 -2
  1014. package/src/utils/resolve-labels.ts +12 -0
  1015. package/dist/chunk-2ARVNCVU.js.map +0 -1
  1016. package/dist/chunk-2ILXXBMG.js.map +0 -1
  1017. package/dist/chunk-2TSGRQ2J.js.map +0 -1
  1018. package/dist/chunk-33LAPBYB.js.map +0 -1
  1019. package/dist/chunk-3JDP5OUR.js.map +0 -1
  1020. package/dist/chunk-3VXS7O3X.js.map +0 -1
  1021. package/dist/chunk-3ZWCKCZC.js.map +0 -1
  1022. package/dist/chunk-47VRDPR2.js.map +0 -1
  1023. package/dist/chunk-4HUSG5MR.js.map +0 -1
  1024. package/dist/chunk-4MQ6XTIJ.js.map +0 -1
  1025. package/dist/chunk-4NQXHPQR.js.map +0 -1
  1026. package/dist/chunk-4VRDFZ4G.js.map +0 -1
  1027. package/dist/chunk-5J7SA4CZ.js.map +0 -1
  1028. package/dist/chunk-5KNDAC24.js.map +0 -1
  1029. package/dist/chunk-5MMAV7XK.js.map +0 -1
  1030. package/dist/chunk-64AOS2WA.js.map +0 -1
  1031. package/dist/chunk-7QXEEZFO.js +0 -92
  1032. package/dist/chunk-7QXEEZFO.js.map +0 -1
  1033. package/dist/chunk-7SYYGXC7.js.map +0 -1
  1034. package/dist/chunk-7VRCGWQL.js.map +0 -1
  1035. package/dist/chunk-AYJ44VTJ.js.map +0 -1
  1036. package/dist/chunk-AYP6ICAY.js.map +0 -1
  1037. package/dist/chunk-B2JYQBO4.js.map +0 -1
  1038. package/dist/chunk-BGTG7G54.js.map +0 -1
  1039. package/dist/chunk-BWZKLKDT.js +0 -1
  1040. package/dist/chunk-C5JCARNE.js.map +0 -1
  1041. package/dist/chunk-CZV6NVCA.js.map +0 -1
  1042. package/dist/chunk-EERUSI52.js.map +0 -1
  1043. package/dist/chunk-EUACQR6N.js.map +0 -1
  1044. package/dist/chunk-F742IMLQ.js.map +0 -1
  1045. package/dist/chunk-FIOBPQL2.js.map +0 -1
  1046. package/dist/chunk-FRGNTTPA.js.map +0 -1
  1047. package/dist/chunk-FT6HBP5E.js.map +0 -1
  1048. package/dist/chunk-GHXW6O5T.js.map +0 -1
  1049. package/dist/chunk-HBP2OU4Q.js.map +0 -1
  1050. package/dist/chunk-HEBZ7Q7O.js.map +0 -1
  1051. package/dist/chunk-HN3PZTUK.js.map +0 -1
  1052. package/dist/chunk-HZK4DRGF.js.map +0 -1
  1053. package/dist/chunk-ICRVLGWD.js.map +0 -1
  1054. package/dist/chunk-INGPH3YQ.js.map +0 -1
  1055. package/dist/chunk-JJVIZR6C.js.map +0 -1
  1056. package/dist/chunk-JKNKGGOG.js.map +0 -1
  1057. package/dist/chunk-KARMRTTM.js.map +0 -1
  1058. package/dist/chunk-KIL3OVLI.js.map +0 -1
  1059. package/dist/chunk-KT3TF2LT.js.map +0 -1
  1060. package/dist/chunk-KZXOIRUP.js.map +0 -1
  1061. package/dist/chunk-LH4VKUZC.js.map +0 -1
  1062. package/dist/chunk-LOLYI6PS.js.map +0 -1
  1063. package/dist/chunk-LTTYUSJ2.js.map +0 -1
  1064. package/dist/chunk-MA6SUE7F.js.map +0 -1
  1065. package/dist/chunk-MSC43MCJ.js.map +0 -1
  1066. package/dist/chunk-MTGEJRE4.js.map +0 -1
  1067. package/dist/chunk-NTO5DALI.js.map +0 -1
  1068. package/dist/chunk-OE3SQOZV.js.map +0 -1
  1069. package/dist/chunk-PBMCRDZI.js.map +0 -1
  1070. package/dist/chunk-PU3HEWSG.js.map +0 -1
  1071. package/dist/chunk-PY3RW5LC.js.map +0 -1
  1072. package/dist/chunk-QWVETTIY.js.map +0 -1
  1073. package/dist/chunk-RA6W37NZ.js.map +0 -1
  1074. package/dist/chunk-RKVS5AA6.js.map +0 -1
  1075. package/dist/chunk-RZCXYKY4.js.map +0 -1
  1076. package/dist/chunk-SUZXPDUQ.js.map +0 -1
  1077. package/dist/chunk-SV6IQ2YO.js.map +0 -1
  1078. package/dist/chunk-T743IIER.js.map +0 -1
  1079. package/dist/chunk-TJO4CBYT.js.map +0 -1
  1080. package/dist/chunk-TTCVYY2B.js.map +0 -1
  1081. package/dist/chunk-U4G3KY6L.js.map +0 -1
  1082. package/dist/chunk-UGH2DDST.js.map +0 -1
  1083. package/dist/chunk-UZOG6HNN.js.map +0 -1
  1084. package/dist/chunk-VMN6KG2U.js.map +0 -1
  1085. package/dist/chunk-VNOFFVRQ.js +0 -113
  1086. package/dist/chunk-VNOFFVRQ.js.map +0 -1
  1087. package/dist/chunk-VNVV6Y2X.js.map +0 -1
  1088. package/dist/chunk-VQYR64QB.js.map +0 -1
  1089. package/dist/chunk-VRPCZ3IE.js.map +0 -1
  1090. package/dist/chunk-WC3W36AM.js.map +0 -1
  1091. package/dist/chunk-WOXWLJYR.js.map +0 -1
  1092. package/dist/chunk-WVZBYTIK.js.map +0 -1
  1093. package/dist/chunk-XICRCPEQ.js.map +0 -1
  1094. package/dist/chunk-XKSA4L2X.js.map +0 -1
  1095. package/dist/chunk-XLCVMRSO.js.map +0 -1
  1096. package/dist/chunk-XLTHZI5W.js.map +0 -1
  1097. package/dist/chunk-XQWUVQ2F.js.map +0 -1
  1098. package/dist/chunk-XYFBJH6F.js.map +0 -1
  1099. package/dist/chunk-Y7YJYUNV.js.map +0 -1
  1100. package/dist/chunk-YICNA5LG.js +0 -1
  1101. package/dist/chunk-YLSDFW5O.js.map +0 -1
  1102. package/dist/chunk-YOKUDQIJ.js.map +0 -1
  1103. package/dist/chunk-YZX4DVRS.js.map +0 -1
  1104. package/dist/chunk-ZFBFQK2Y.js.map +0 -1
  1105. package/dist/chunk-ZPACE34U.js.map +0 -1
  1106. package/dist/chunk-ZYKDUKAH.js.map +0 -1
  1107. package/dist/native/chunks/chunk-AVHGS66L.js.map +0 -1
  1108. package/dist/native/chunks/chunk-BXNZHDXK.js.map +0 -1
  1109. /package/dist/{chunk-BWZKLKDT.js.map → _internal/copy/labels.js.map} +0 -0
  1110. /package/dist/{chunk-YICNA5LG.js.map → _internal/en-US.labels.js.map} +0 -0
  1111. /package/dist/{chunk-OPP6USJC.js.map → chunk-2FQF4CNE.js.map} +0 -0
  1112. /package/dist/{chunk-BWFQEASG.js.map → chunk-2P5ZBBTL.js.map} +0 -0
  1113. /package/dist/{chunk-QVO4SIS7.js.map → chunk-3W2B7IZG.js.map} +0 -0
  1114. /package/dist/{chunk-Q6PRGXR2.js.map → chunk-4HBCWKIX.js.map} +0 -0
  1115. /package/dist/{chunk-2QO3BKUQ.js.map → chunk-4NVEUJXK.js.map} +0 -0
  1116. /package/dist/{chunk-O6SAU5JA.js.map → chunk-4OTJ66ID.js.map} +0 -0
  1117. /package/dist/{chunk-PIP7XII2.js.map → chunk-5JDY5W7O.js.map} +0 -0
  1118. /package/dist/{chunk-JE6RZ5L6.js.map → chunk-5ZOJLYD2.js.map} +0 -0
  1119. /package/dist/{chunk-LG52LMAM.js.map → chunk-6B7VZFAO.js.map} +0 -0
  1120. /package/dist/{chunk-ALREWFRX.js.map → chunk-6DGNMASB.js.map} +0 -0
  1121. /package/dist/{chunk-555TUQ7E.js.map → chunk-6IVR5HFI.js.map} +0 -0
  1122. /package/dist/{chunk-J26ZWYQI.js.map → chunk-6KCJNERH.js.map} +0 -0
  1123. /package/dist/{chunk-5752357K.js.map → chunk-6N2U67KF.js.map} +0 -0
  1124. /package/dist/{chunk-AXZCCX7O.js.map → chunk-6S7CFH6V.js.map} +0 -0
  1125. /package/dist/{chunk-PMRLFNBT.js.map → chunk-763AHWKU.js.map} +0 -0
  1126. /package/dist/{chunk-6DAIC2MG.js.map → chunk-775LIZXS.js.map} +0 -0
  1127. /package/dist/{chunk-7HA7UH7O.js.map → chunk-7H5BIZ33.js.map} +0 -0
  1128. /package/dist/{chunk-VEBNL5MG.js.map → chunk-7HYLXERK.js.map} +0 -0
  1129. /package/dist/{chunk-M3DSPEZ3.js.map → chunk-7S3NG2AO.js.map} +0 -0
  1130. /package/dist/{chunk-CSD6SWBZ.js.map → chunk-A3Z7ZXLM.js.map} +0 -0
  1131. /package/dist/{chunk-LBZEPWYK.js.map → chunk-ABJOW7EK.js.map} +0 -0
  1132. /package/dist/{chunk-44PBCQ7E.js.map → chunk-ABQZFK7M.js.map} +0 -0
  1133. /package/dist/{chunk-EIMFA7KP.js.map → chunk-ANUO67JQ.js.map} +0 -0
  1134. /package/dist/{chunk-PTQRJEPN.js.map → chunk-AOBQ3KYY.js.map} +0 -0
  1135. /package/dist/{chunk-LODYTVOO.js.map → chunk-B25SHVWP.js.map} +0 -0
  1136. /package/dist/{chunk-HPEBSLYP.js.map → chunk-B67KUCWU.js.map} +0 -0
  1137. /package/dist/{chunk-GTT5UKKO.js.map → chunk-BDJIP4HG.js.map} +0 -0
  1138. /package/dist/{chunk-RS576GOH.js.map → chunk-BIUT3K6A.js.map} +0 -0
  1139. /package/dist/{chunk-A5NXBOWS.js.map → chunk-BLHSLB5D.js.map} +0 -0
  1140. /package/dist/{chunk-RHKQ2RSY.js.map → chunk-BLVFHVDM.js.map} +0 -0
  1141. /package/dist/{chunk-DYHOBKPU.js.map → chunk-BLZDSCIZ.js.map} +0 -0
  1142. /package/dist/{chunk-E53MMMDA.js.map → chunk-BX6CF2UG.js.map} +0 -0
  1143. /package/dist/{chunk-7K23NEZO.js.map → chunk-CFDYQSN6.js.map} +0 -0
  1144. /package/dist/{chunk-O36MIQIO.js.map → chunk-DB7OJM6X.js.map} +0 -0
  1145. /package/dist/{chunk-GSXYXMCV.js.map → chunk-DD3VFDB2.js.map} +0 -0
  1146. /package/dist/{chunk-IQ2U5MVO.js.map → chunk-DT22MDC3.js.map} +0 -0
  1147. /package/dist/{chunk-7XSCEHGA.js.map → chunk-EOQ6EKTS.js.map} +0 -0
  1148. /package/dist/{chunk-VEKTKCSB.js.map → chunk-FLJ3RIRP.js.map} +0 -0
  1149. /package/dist/{chunk-Z5WUSI47.js.map → chunk-G3JFESKD.js.map} +0 -0
  1150. /package/dist/{chunk-XRDH24J7.js.map → chunk-G6ET2DRL.js.map} +0 -0
  1151. /package/dist/{chunk-7JOLSD2W.js.map → chunk-GHTVBYFA.js.map} +0 -0
  1152. /package/dist/{chunk-AMLHEKSV.js.map → chunk-HI7JPDD6.js.map} +0 -0
  1153. /package/dist/{chunk-N34AOGK3.js.map → chunk-I3OKAQ5L.js.map} +0 -0
  1154. /package/dist/{chunk-AEYLFBZT.js.map → chunk-I4NDZFTB.js.map} +0 -0
  1155. /package/dist/{chunk-2ZRZTGWP.js.map → chunk-ISW5K72V.js.map} +0 -0
  1156. /package/dist/{chunk-4M5GEKPM.js.map → chunk-JL4I7OQE.js.map} +0 -0
  1157. /package/dist/{chunk-EF4DVYD2.js.map → chunk-JMUZ5JZA.js.map} +0 -0
  1158. /package/dist/{chunk-HQCZT6TO.js.map → chunk-JVOEVTCZ.js.map} +0 -0
  1159. /package/dist/{chunk-MBMZNSBP.js.map → chunk-JW7MN4DG.js.map} +0 -0
  1160. /package/dist/{chunk-FCVPVEAS.js.map → chunk-KSOIFQJ6.js.map} +0 -0
  1161. /package/dist/{chunk-GBVNY2LG.js.map → chunk-KTXJQ4YJ.js.map} +0 -0
  1162. /package/dist/{chunk-NBXG3SQ3.js.map → chunk-KW2KCPZF.js.map} +0 -0
  1163. /package/dist/{chunk-3V3Z4EML.js.map → chunk-L4FWEI2P.js.map} +0 -0
  1164. /package/dist/{chunk-56JF5PZK.js.map → chunk-LYVTJLCF.js.map} +0 -0
  1165. /package/dist/{chunk-MNZ6MCOK.js.map → chunk-MKRJUT5O.js.map} +0 -0
  1166. /package/dist/{chunk-BGYLL467.js.map → chunk-N3W6FZOC.js.map} +0 -0
  1167. /package/dist/{chunk-BWFUZ4N2.js.map → chunk-NGXDOWUP.js.map} +0 -0
  1168. /package/dist/{chunk-NYWAAXDX.js.map → chunk-OT4HIG7S.js.map} +0 -0
  1169. /package/dist/{chunk-GRMBCJS6.js.map → chunk-PAKLYZ6G.js.map} +0 -0
  1170. /package/dist/{chunk-5M2NWXN4.js.map → chunk-PGBIUO2A.js.map} +0 -0
  1171. /package/dist/{chunk-RCTHCXS6.js.map → chunk-PJNIJIE6.js.map} +0 -0
  1172. /package/dist/{chunk-6ATXOJVQ.js.map → chunk-QADTI63U.js.map} +0 -0
  1173. /package/dist/{chunk-7ZROYGUG.js.map → chunk-QOTMQLMW.js.map} +0 -0
  1174. /package/dist/{chunk-NQCTANF3.js.map → chunk-QVDEGBME.js.map} +0 -0
  1175. /package/dist/{chunk-LI6XSM5D.js.map → chunk-QVEJGFRP.js.map} +0 -0
  1176. /package/dist/{chunk-VD72JGHA.js.map → chunk-RMZQHJEP.js.map} +0 -0
  1177. /package/dist/{chunk-VBGC7G4F.js.map → chunk-RQ3IS5NQ.js.map} +0 -0
  1178. /package/dist/{chunk-YNDTLBOH.js.map → chunk-SM2O6D5F.js.map} +0 -0
  1179. /package/dist/{chunk-WA6F4NOO.js.map → chunk-SMANO5OD.js.map} +0 -0
  1180. /package/dist/{chunk-YJBWDDW7.js.map → chunk-SXNGH56D.js.map} +0 -0
  1181. /package/dist/{chunk-NDGA7ZE6.js.map → chunk-TGMMUKOF.js.map} +0 -0
  1182. /package/dist/{chunk-SB2SEGR6.js.map → chunk-TIM4PXWN.js.map} +0 -0
  1183. /package/dist/{chunk-MHLYX6QW.js.map → chunk-TRAMTVIO.js.map} +0 -0
  1184. /package/dist/{chunk-QO7UJXXO.js.map → chunk-TVMSXL3R.js.map} +0 -0
  1185. /package/dist/{chunk-DXFKPY2K.js.map → chunk-UCQRJTCI.js.map} +0 -0
  1186. /package/dist/{chunk-CW6Y32N2.js.map → chunk-UF4JFRLE.js.map} +0 -0
  1187. /package/dist/{chunk-HHPJXK4Z.js.map → chunk-UHQZ5XPW.js.map} +0 -0
  1188. /package/dist/{chunk-FTDGFWB5.js.map → chunk-UK3DSFMK.js.map} +0 -0
  1189. /package/dist/{chunk-GBKIGUNP.js.map → chunk-UYNJ3FYE.js.map} +0 -0
  1190. /package/dist/{chunk-2MYSXWZQ.js.map → chunk-VKTF3GAP.js.map} +0 -0
  1191. /package/dist/{chunk-4XBAEKQQ.js.map → chunk-W2RXXF7K.js.map} +0 -0
  1192. /package/dist/{chunk-3Z3WIQ5M.js.map → chunk-W3EVATBS.js.map} +0 -0
  1193. /package/dist/{chunk-A2YLFKQU.js.map → chunk-W5WYTVLS.js.map} +0 -0
  1194. /package/dist/{chunk-EBCEDBHX.js.map → chunk-XDDKRACZ.js.map} +0 -0
  1195. /package/dist/{chunk-ASZGMKB4.js.map → chunk-Y3TD7HOY.js.map} +0 -0
  1196. /package/dist/{chunk-3YLRR4JM.js.map → chunk-Y3YZBB74.js.map} +0 -0
  1197. /package/dist/{chunk-HBHBRRSW.js.map → chunk-YBAK2WN5.js.map} +0 -0
  1198. /package/dist/{chunk-XODBYGTH.js.map → chunk-YMKSPW4T.js.map} +0 -0
  1199. /package/dist/{chunk-6RTE4UNO.js.map → chunk-YV4O7KDR.js.map} +0 -0
  1200. /package/dist/{chunk-MM7BPTVV.js.map → chunk-Z52W7FEU.js.map} +0 -0
  1201. /package/dist/{chunk-7P5PNRBT.js.map → chunk-ZDBG7QG2.js.map} +0 -0
  1202. /package/dist/{chunk-Z5V5E3JW.js.map → chunk-ZIHSCBMN.js.map} +0 -0
  1203. /package/dist/{chunk-S4JXSC4D.js.map → chunk-ZT73ACK3.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/social-login-button/social-login-button.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from 'react';\nimport Box from '@mui/material/Box/index.js';\nimport Stack from '@mui/material/Stack/index.js';\nimport { useTheme, type Theme } from '@mui/material/styles/index.js';\nimport { Button } from '../components/form/Button';\nimport { Card, CardContent } from '../components/layout/Card';\nimport { Heading } from '../components/typography/Heading';\nimport { Text } from '../components/typography/Text';\nimport { Separator } from '../components/layout/Separator';\nimport type { SocialLoginCopy } from '../copy/form';\nimport { EN_US_SOCIAL_LOGIN_COPY } from '../en-US.form';\nimport { uiInk, type UiInk } from '../tokens/ink';\nimport { rem, sxRem } from '../tokens/relative';\n\nexport type SocialProvider = 'google' | 'facebook' | 'apple';\n\n/** A provider logo's box: 20 design px square, through the type scale. */\nconst logoStyle = (theme: Theme): React.CSSProperties => ({ width: rem(theme, 20), height: rem(theme, 20) });\n\n/**\n * SVG Icons for social providers\n */\nconst GoogleIcon = (): React.ReactElement => {\n const theme = useTheme();\n const logo = uiInk(theme).socialBrand.googleLogo;\n return (\n <svg style={logoStyle(theme)} viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M22.56 12.25c0-.78-.07-1.53-.2-2.25H12v4.26h5.92c-.26 1.37-1.04 2.53-2.21 3.31v2.77h3.57c2.08-1.92 3.28-4.74 3.28-8.09z\"\n fill={logo.blue}\n />\n <path\n d=\"M12 23c2.97 0 5.46-.98 7.28-2.66l-3.57-2.77c-.98.66-2.23 1.06-3.71 1.06-2.86 0-5.29-1.93-6.16-4.53H2.18v2.84C3.99 20.53 7.7 23 12 23z\"\n fill={logo.green}\n />\n <path\n d=\"M5.84 14.09c-.22-.66-.35-1.36-.35-2.09s.13-1.43.35-2.09V7.07H2.18C1.43 8.55 1 10.22 1 12s.43 3.45 1.18 4.93l2.85-2.22.81-.62z\"\n fill={logo.yellow}\n />\n <path\n d=\"M12 5.38c1.62 0 3.06.56 4.21 1.64l3.15-3.15C17.45 2.09 14.97 1 12 1 7.7 1 3.99 3.47 2.18 7.07l3.66 2.84c.87-2.6 3.3-4.53 6.16-4.53z\"\n fill={logo.red}\n />\n </svg>\n );\n};\n\nconst FacebookIcon = (): React.ReactElement => {\n const theme = useTheme();\n const { logo } = uiInk(theme).socialBrand.facebook;\n return (\n <svg style={logoStyle(theme)} viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M24 12c0-6.627-5.373-12-12-12S0 5.373 0 12c0 5.99 4.388 10.954 10.125 11.854V15.47H7.078V12h3.047V9.356c0-3.007 1.792-4.668 4.533-4.668 1.312 0 2.686.234 2.686.234v2.953H15.83c-1.491 0-1.956.925-1.956 1.874V12h3.328l-.532 3.469h-2.796v8.385C19.612 22.954 24 17.99 24 12z\"\n fill={logo}\n />\n </svg>\n );\n};\n\nconst AppleIcon = (): React.ReactElement => (\n <svg style={logoStyle(useTheme())} viewBox=\"0 0 24 24\" fill=\"currentColor\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M17.05 20.28c-.98.95-2.05.8-3.08.35-1.09-.46-2.09-.48-3.24 0-1.44.62-2.2.44-3.06-.35C2.79 15.25 3.51 7.59 9.05 7.31c1.35.07 2.29.74 3.08.8 1.18-.24 2.31-.93 3.57-.84 1.51.12 2.65.72 3.4 1.8-3.12 1.87-2.38 5.98.48 7.13-.57 1.5-1.31 2.99-2.54 4.09l.01-.01zM12.03 7.25c-.15-2.23 1.66-4.07 3.74-4.25.29 2.58-2.34 4.5-3.74 4.25z\" />\n </svg>\n);\n\n/**\n * Google's logo on a disabled button: one flat grey, faded (FUT-2393).\n *\n * The G is drawn in Google's four colours, hard-coded in its SVG, so MUI\n * greying a disabled button's label left a full-colour G beside it. The grey\n * label still said the button could not be pressed; an icon-only button has no\n * label, and read as ready to tap.\n *\n * `brightness(0)` draws the G in one flat colour, as Google's own disabled\n * button does, and the theme's `disabledOpacity` fades it, the step MUI dims a\n * disabled control by. `grayscale` would not do: it turns the four colours four\n * different greys, and the yellow arc all but vanished (1.26:1 against white).\n *\n * Google's alone: Facebook's and Apple's logos are drawn in the button's\n * `currentColor`, so they grey with the label by themselves, and fading them\n * again would all but erase them. Keyed on `.Mui-disabled`, the class MUI greys\n * the label by, so the logo and the label always agree. A loading button\n * carries it too, but its spinner replaces the logo slot.\n */\nconst GOOGLE_LOGO_WHEN_DISABLED_SX = {\n '&.Mui-disabled .MuiButton-startIcon': {\n filter: 'brightness(0)',\n opacity: (theme: Theme) => theme.palette.action.disabledOpacity,\n },\n} as const;\n\n/**\n * Facebook's logo in its button's own colour (FUT-2393).\n *\n * `FacebookIcon` is the blue roundel, drawn in #1877F2 with the \"f\" cut out of\n * it. On the button's own #1877F2 the roundel vanished: a label beside nothing,\n * and an icon-only button an empty blue slab. In `currentColor` it is the white\n * roundel Facebook's own button carries, and a disabled button greys it with\n * the label. Set on the button rather than in `FacebookIcon`, which a host may\n * draw on a white page.\n */\nconst FACEBOOK_LOGO_IN_BUTTON_COLOUR_SX = {\n '& .MuiButton-startIcon path': { fill: 'currentColor' },\n} as const;\n\n/** A provider's own colour, read from the theme's `uiInk.socialBrand` as an `sx` value. */\nconst brand =\n (pick: (colours: UiInk['socialBrand']) => string) =>\n (theme: Theme): string =>\n pick(uiInk(theme).socialBrand);\n\ninterface ProviderConfig {\n Icon: () => React.ReactElement;\n variant: 'solid' | 'outline' | 'ghost';\n color: 'primary' | 'secondary' | 'neutral';\n sx?: object;\n}\n\nconst providerConfig: Record<SocialProvider, ProviderConfig> = {\n google: {\n Icon: GoogleIcon,\n variant: 'outline',\n color: 'neutral',\n sx: {\n backgroundColor: brand((c) => c.google.background),\n color: brand((c) => c.google.text),\n borderColor: brand((c) => c.google.border),\n '&:hover': {\n backgroundColor: brand((c) => c.google.hover),\n borderColor: brand((c) => c.google.hoverBorder),\n },\n ...GOOGLE_LOGO_WHEN_DISABLED_SX,\n },\n },\n facebook: {\n Icon: FacebookIcon,\n variant: 'solid',\n color: 'primary',\n sx: {\n backgroundColor: brand((c) => c.facebook.background),\n color: brand((c) => c.facebook.text),\n '&:hover': {\n backgroundColor: brand((c) => c.facebook.hover),\n },\n ...FACEBOOK_LOGO_IN_BUTTON_COLOUR_SX,\n },\n },\n apple: {\n Icon: AppleIcon,\n variant: 'solid',\n color: 'neutral',\n sx: {\n backgroundColor: brand((c) => c.apple.background),\n color: brand((c) => c.apple.text),\n '&:hover': {\n backgroundColor: brand((c) => c.apple.hover),\n },\n },\n },\n};\n\nexport interface SocialLoginButtonProps {\n provider: SocialProvider;\n onClick?: () => void;\n loading?: boolean;\n disabled?: boolean;\n fullWidth?: boolean;\n /**\n * The three provider labels (FUT-1263). `SOCIAL_LOGIN_COPY` ships both\n * languages, so a host passes `SOCIAL_LOGIN_COPY[\"pt-BR\"]` rather than\n * authoring a word.\n *\n * These used to be English string literals inside `providerConfig`, reachable\n * by nothing: a pt-BR storefront rendered \"Continue with Google\" on an\n * otherwise Portuguese sign-in screen and had no way to change it.\n *\n * OPTIONAL, unlike every other `copy` in this package, and defaulted to the\n * en-US pack. That is a deliberate exception so this ships as a MINOR: making\n * it required would break every existing caller on a routine update. The cost\n * is the one this package's convention exists to avoid — a host that says\n * nothing still renders English — so a consumer wanting Portuguese must pass\n * the pack, and FUT-1263 is not closed until it does.\n */\n copy?: SocialLoginCopy;\n /**\n * Per-provider test hook. Without one all three buttons render the same\n * `data-testid`, leaving their visible text as the only selector — which is\n * exactly the text a host is now expected to translate.\n */\n dataTestId?: string;\n /**\n * The provider's logo alone, centred (FUT-2393).\n *\n * For a row of providers in a narrow block, where \"Continuar com o Google\"\n * wraps to two lines at 320px and two providers cannot share a line. The\n * label is not dropped: it stays the button's accessible name, so a screen\n * reader still announces the provider, and its `title`, so a pointer\n * hovering the logo reads it too.\n */\n iconOnly?: boolean;\n}\n\n/**\n * What an icon-only social button changes: the logo centred, with no gap\n * reserved for a label and no margin MUI keeps beside a start icon.\n */\nconst ICON_ONLY_SX = {\n justifyContent: 'center',\n gap: 0,\n '& .MuiButton-startIcon': { margin: 0 },\n} as const;\n\n/**\n * Social login button using UI package Button component\n */\nexport const SocialLoginButton = React.forwardRef<HTMLButtonElement, SocialLoginButtonProps>(\n (\n {\n provider,\n onClick,\n loading = false,\n disabled = false,\n fullWidth = true,\n copy = EN_US_SOCIAL_LOGIN_COPY,\n dataTestId,\n iconOnly = false,\n },\n ref,\n ) => {\n const config = providerConfig[provider];\n const label = copy[provider];\n\n return (\n <Button\n ref={ref}\n variant={config.variant}\n color={config.color}\n size=\"lg\"\n loading={loading}\n disabled={disabled}\n onClick={onClick}\n icon={<config.Icon />}\n dataTestId={dataTestId}\n fullWidth={fullWidth}\n {...(iconOnly ? { 'aria-label': label, title: label } : {})}\n sx={{\n minHeight: sxRem(48),\n justifyContent: 'flex-start',\n gap: 2,\n ...(iconOnly ? ICON_ONLY_SX : {}),\n ...config.sx,\n }}\n >\n {iconOnly ? undefined : label}\n </Button>\n );\n }\n);\n\nSocialLoginButton.displayName = 'SocialLoginButton';\n\n/**\n * Container for social login buttons with optional divider\n */\nexport interface SocialLoginContainerProps {\n children: React.ReactNode;\n title?: string;\n subtitle?: string;\n showDivider?: boolean;\n dividerText?: string;\n /**\n * How wide the card is allowed to get. Defaults to the 400 it has always\n * intended, so nothing that does not ask for a width moves.\n *\n * Worth passing for a card holding a FORM rather than a row of provider\n * buttons: 400 was chosen for the latter, and an e-mail + password pair reads\n * cramped in it.\n */\n maxWidth?: number | string;\n}\n\n/**\n * The card's cap as CSS. `sx` reads a number of 1 or less as a fraction of the\n * parent, and that stays so; any other number is design px, through the type\n * scale; a string is as given.\n */\nfunction cardMaxWidth(theme: Theme, value: number | string): string {\n if (typeof value !== 'number') return value;\n return value <= 1 && value !== 0 ? `${value * 100}%` : rem(theme, value);\n}\n\nexport function SocialLoginContainer({\n children,\n title = \"Sign in to continue\",\n subtitle,\n showDivider = false,\n dividerText = \"or\",\n maxWidth,\n}: SocialLoginContainerProps): React.ReactElement {\n const theme = useTheme();\n return (\n // `width: 100%` is what makes the cap below mean anything. Every caller\n // centres this card in a flex column (`Container variant=\"centered\"` does),\n // and a flex item under `align-items: center` sizes to its CONTENT — so the\n // card sat at whatever the longest label happened to need, ~267px, at every\n // viewport from 390 to 1280. The 400 was never reached, which is why raising\n // it would have changed nothing; the card had no width to cap.\n <Card variant=\"elevated\" borderRadius=\"lg\" sx={{ width: '100%', maxWidth: cardMaxWidth(theme, maxWidth ?? 400) }}>\n <CardContent>\n <Stack spacing={3} sx={{ width: '100%' }}>\n {title && (\n <Box sx={{ textAlign: 'center' }}>\n <Heading level=\"h2\">\n {title}\n </Heading>\n {subtitle && (\n <Text color=\"secondary\" size=\"sm\">\n {subtitle}\n </Text>\n )}\n </Box>\n )}\n\n <Stack spacing={2}>\n {children}\n </Stack>\n\n {showDivider && (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 2 }}>\n <Separator />\n <Text color=\"secondary\" size=\"sm\">\n {dividerText}\n </Text>\n <Separator />\n </Box>\n )}\n </Stack>\n </CardContent>\n </Card>\n );\n}\n\nexport { GoogleIcon, FacebookIcon, AppleIcon };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,YAAY,WAAW;AACvB,OAAO,SAAS;AAChB,OAAO,WAAW;AAClB,SAAS,gBAA4B;AAuBjC,SACE,KADF;AATJ,IAAM,YAAY,CAAC,WAAuC,EAAE,OAAO,IAAI,OAAO,EAAE,GAAG,QAAQ,IAAI,OAAO,EAAE,EAAE;AAK1G,IAAM,aAAa,MAA0B;AAC3C,QAAM,QAAQ,SAAS;AACvB,QAAM,OAAO,MAAM,KAAK,EAAE,YAAY;AACtC,SACE,qBAAC,SAAI,OAAO,UAAU,KAAK,GAAG,SAAQ,aAAY,MAAK,QAAO,OAAM,8BAClE;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,GAAE;AAAA,QACF,MAAM,KAAK;AAAA;AAAA,IACb;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,GAAE;AAAA,QACF,MAAM,KAAK;AAAA;AAAA,IACb;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,GAAE;AAAA,QACF,MAAM,KAAK;AAAA;AAAA,IACb;AAAA,IACA;AAAA,MAAC;AAAA;AAAA,QACC,GAAE;AAAA,QACF,MAAM,KAAK;AAAA;AAAA,IACb;AAAA,KACF;AAEJ;AAEA,IAAM,eAAe,MAA0B;AAC7C,QAAM,QAAQ,SAAS;AACvB,QAAM,EAAE,KAAK,IAAI,MAAM,KAAK,EAAE,YAAY;AAC1C,SACE,oBAAC,SAAI,OAAO,UAAU,KAAK,GAAG,SAAQ,aAAY,MAAK,QAAO,OAAM,8BAClE;AAAA,IAAC;AAAA;AAAA,MACC,GAAE;AAAA,MACF,MAAM;AAAA;AAAA,EACR,GACF;AAEJ;AAEA,IAAM,YAAY,MAChB,oBAAC,SAAI,OAAO,UAAU,SAAS,CAAC,GAAG,SAAQ,aAAY,MAAK,gBAAe,OAAM,8BAC/E,8BAAC,UAAK,GAAE,uUAAsU,GAChV;AAsBF,IAAM,+BAA+B;AAAA,EACnC,uCAAuC;AAAA,IACrC,QAAQ;AAAA,IACR,SAAS,CAAC,UAAiB,MAAM,QAAQ,OAAO;AAAA,EAClD;AACF;AAYA,IAAM,oCAAoC;AAAA,EACxC,+BAA+B,EAAE,MAAM,eAAe;AACxD;AAGA,IAAM,QACJ,CAAC,SACD,CAAC,UACC,KAAK,MAAM,KAAK,EAAE,WAAW;AASjC,IAAM,iBAAyD;AAAA,EAC7D,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,SAAS;AAAA,IACT,OAAO;AAAA,IACP,IAAI;AAAA,MACF,iBAAiB,MAAM,CAAC,MAAM,EAAE,OAAO,UAAU;AAAA,MACjD,OAAO,MAAM,CAAC,MAAM,EAAE,OAAO,IAAI;AAAA,MACjC,aAAa,MAAM,CAAC,MAAM,EAAE,OAAO,MAAM;AAAA,MACzC,WAAW;AAAA,QACT,iBAAiB,MAAM,CAAC,MAAM,EAAE,OAAO,KAAK;AAAA,QAC5C,aAAa,MAAM,CAAC,MAAM,EAAE,OAAO,WAAW;AAAA,MAChD;AAAA,MACA,GAAG;AAAA,IACL;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,OAAO;AAAA,IACP,IAAI;AAAA,MACF,iBAAiB,MAAM,CAAC,MAAM,EAAE,SAAS,UAAU;AAAA,MACnD,OAAO,MAAM,CAAC,MAAM,EAAE,SAAS,IAAI;AAAA,MACnC,WAAW;AAAA,QACT,iBAAiB,MAAM,CAAC,MAAM,EAAE,SAAS,KAAK;AAAA,MAChD;AAAA,MACA,GAAG;AAAA,IACL;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL,MAAM;AAAA,IACN,SAAS;AAAA,IACT,OAAO;AAAA,IACP,IAAI;AAAA,MACF,iBAAiB,MAAM,CAAC,MAAM,EAAE,MAAM,UAAU;AAAA,MAChD,OAAO,MAAM,CAAC,MAAM,EAAE,MAAM,IAAI;AAAA,MAChC,WAAW;AAAA,QACT,iBAAiB,MAAM,CAAC,MAAM,EAAE,MAAM,KAAK;AAAA,MAC7C;AAAA,IACF;AAAA,EACF;AACF;AA+CA,IAAM,eAAe;AAAA,EACnB,gBAAgB;AAAA,EAChB,KAAK;AAAA,EACL,0BAA0B,EAAE,QAAQ,EAAE;AACxC;AAKO,IAAM,oBAA0B;AAAA,EACrC,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA,UAAU;AAAA,IACV,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,OAAO;AAAA,IACP;AAAA,IACA,WAAW;AAAA,EACb,GACA,QACG;AACH,UAAM,SAAS,eAAe,QAAQ;AACtC,UAAM,QAAQ,KAAK,QAAQ;AAE3B,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,SAAS,OAAO;AAAA,QAChB,OAAO,OAAO;AAAA,QACd,MAAK;AAAA,QACL;AAAA,QACA;AAAA,QACA;AAAA,QACA,MAAM,oBAAC,OAAO,MAAP,EAAY;AAAA,QACnB;AAAA,QACA;AAAA,QACC,GAAI,WAAW,EAAE,cAAc,OAAO,OAAO,MAAM,IAAI,CAAC;AAAA,QACzD,IAAI;AAAA,UACF,WAAW,MAAM,EAAE;AAAA,UACnB,gBAAgB;AAAA,UAChB,KAAK;AAAA,UACL,GAAI,WAAW,eAAe,CAAC;AAAA,UAC/B,GAAG,OAAO;AAAA,QACZ;AAAA,QAEC,qBAAW,SAAY;AAAA;AAAA,IAC1B;AAAA,EAEJ;AACF;AAEA,kBAAkB,cAAc;AA2BhC,SAAS,aAAa,OAAc,OAAgC;AAClE,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,SAAO,SAAS,KAAK,UAAU,IAAI,GAAG,QAAQ,GAAG,MAAM,IAAI,OAAO,KAAK;AACzE;AAEO,SAAS,qBAAqB;AAAA,EACnC;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,cAAc;AAAA,EACd,cAAc;AAAA,EACd;AACF,GAAkD;AAChD,QAAM,QAAQ,SAAS;AACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOE,oBAAC,QAAK,SAAQ,YAAW,cAAa,MAAK,IAAI,EAAE,OAAO,QAAQ,UAAU,aAAa,OAAO,YAAY,GAAG,EAAE,GAC7G,8BAAC,eACC,+BAAC,SAAM,SAAS,GAAG,IAAI,EAAE,OAAO,OAAO,GACpC;AAAA,eACC,qBAAC,OAAI,IAAI,EAAE,WAAW,SAAS,GAC7B;AAAA,4BAAC,WAAQ,OAAM,MACZ,iBACH;AAAA,QACC,YACC,oBAAC,QAAK,OAAM,aAAY,MAAK,MAC1B,oBACH;AAAA,SAEJ;AAAA,MAGF,oBAAC,SAAM,SAAS,GACb,UACH;AAAA,MAEC,eACC,qBAAC,OAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,EAAE,GACvD;AAAA,4BAAC,aAAU;AAAA,QACX,oBAAC,QAAK,OAAM,aAAY,MAAK,MAC1B,uBACH;AAAA,QACA,oBAAC,aAAU;AAAA,SACb;AAAA,OAEJ,GACF,GACF;AAAA;AAEJ;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/AddressAutocomplete/AddressAutocomplete.helpers.ts"],"sourcesContent":["import type { AddressAutocompleteProps, AddressOptionValue } from './AddressAutocomplete.types';\n\n// Below this the field clears its options rather than querying Places.\nexport const MIN_QUERY_LENGTH = 2;\n\ntype DefaultedKeys =\n | 'variant'\n | 'label'\n | 'placeholder'\n | 'floating'\n | 'error'\n | 'disabled'\n | 'required'\n | 'fullWidth'\n | 'defaultValue'\n | 'getCurrentLocation';\n\nexport type ResolvedAddressProps = AddressAutocompleteProps &\n Required<Pick<AddressAutocompleteProps, DefaultedKeys>>;\n\nconst ADDRESS_AUTOCOMPLETE_DEFAULTS: Pick<AddressAutocompleteProps, DefaultedKeys> = {\n variant: 'outlined',\n label: 'Address',\n placeholder: 'Enter an address',\n floating: false,\n error: false,\n disabled: false,\n required: false,\n fullWidth: true,\n defaultValue: '',\n getCurrentLocation: 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.\nconst definedProps = (props: AddressAutocompleteProps): Partial<AddressAutocompleteProps> =>\n Object.fromEntries(\n Object.entries(props).filter(([, value]) => value !== undefined),\n ) as Partial<AddressAutocompleteProps>;\n\n// Applied as a merge rather than destructuring defaults, which would otherwise\n// put ten branches into the component's own complexity budget.\nexport const resolveAddressProps = (props: AddressAutocompleteProps): ResolvedAddressProps =>\n ({ ...ADDRESS_AUTOCOMPLETE_DEFAULTS, ...definedProps(props) }) as ResolvedAddressProps;\n\nexport const addressOptionLabel = (option: AddressOptionValue): string => {\n if (typeof option === 'string') return option;\n return option.description || '';\n};\n\n// A string only ever equals the same string, so a mixed pair is never a match.\nexport const isSameAddressOption = (\n option: AddressOptionValue,\n value: AddressOptionValue,\n): boolean => {\n if (typeof option === 'string' || typeof value === 'string') return option === value;\n return option.place_id === value.place_id;\n};\n"],"mappings":";AAGO,IAAM,mBAAmB;AAiBhC,IAAM,gCAA+E;AAAA,EACnF,SAAS;AAAA,EACT,OAAO;AAAA,EACP,aAAa;AAAA,EACb,UAAU;AAAA,EACV,OAAO;AAAA,EACP,UAAU;AAAA,EACV,UAAU;AAAA,EACV,WAAW;AAAA,EACX,cAAc;AAAA,EACd,oBAAoB;AACtB;AAIA,IAAM,eAAe,CAAC,UACpB,OAAO;AAAA,EACL,OAAO,QAAQ,KAAK,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,UAAU,MAAS;AACjE;AAIK,IAAM,sBAAsB,CAAC,WACjC,EAAE,GAAG,+BAA+B,GAAG,aAAa,KAAK,EAAE;AAEvD,IAAM,qBAAqB,CAAC,WAAuC;AACxE,MAAI,OAAO,WAAW,SAAU,QAAO;AACvC,SAAO,OAAO,eAAe;AAC/B;AAGO,IAAM,sBAAsB,CACjC,QACA,UACY;AACZ,MAAI,OAAO,WAAW,YAAY,OAAO,UAAU,SAAU,QAAO,WAAW;AAC/E,SAAO,OAAO,aAAa,MAAM;AACnC;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/DateRangePicker/DateRangePicker.range.ts"],"sourcesContent":["/**\n * Judging a draft, and saying so in words.\n *\n * The picker never repairs what it is given. A reversed pair is not silently\n * swapped and an over-long one is not clipped to the cap: both are reported,\n * because a control that returns a different range from the one on screen is\n * indistinguishable from one that ignored you. The caller reads\n * {@link DateRangeStatus} and keeps its own confirm button shut.\n */\nimport { isoToMasked } from '../../data-display/DataViews/data-views-day-input';\n\nimport { dayCount, isAfterDay } from './DateRangePicker.dates';\nimport type {\n DateRangePickerMessages,\n DateRangeDraft,\n DateRangeStatus,\n QuickRange,\n QuickRangeContext,\n ResolvedQuickRange,\n} from './DateRangePicker.types';\n\n/**\n * Whether a draft is a window this picker will hand over.\n *\n * Exported because the caller needs the same verdict the picker shows: a dialog\n * disabling its \"Apply\" button must not re-derive \"is this legal\" from the two\n * strings, or the two answers drift and the button ends up enabled over a\n * message saying the range is impossible.\n */\nexport function resolveDayRange(\n draft: DateRangeDraft,\n maxRangeDays?: number,\n): DateRangeStatus {\n const { from, to } = draft;\n if (!from || !to) return { ok: false, problem: 'incomplete', days: 0 };\n if (isAfterDay(from, to)) return { ok: false, problem: 'reversed', days: 0 };\n\n const days = dayCount(from, to);\n if (maxRangeDays !== undefined && days > maxRangeDays) {\n return { ok: false, problem: 'over-max', days };\n }\n return { ok: true, window: { from, to }, days };\n}\n\n/**\n * The English defaults.\n *\n * The summary prints the days in the SAME `dd/mm/aaaa` the two fields are\n * masked to, rather than in the host locale's order. One control cannot show\n * the same date two ways: an `en-US` host formatting the summary as `08/05`\n * over a field reading `05/08` leaves the reader to work out which of the two\n * is lying. A host that wants its own order replaces `messages.summary`, which\n * moves both halves of the decision to the same place.\n */\nexport function defaultMessages(): DateRangePickerMessages {\n // ONE mask, read by both the fields and the summary below. They are the same\n // date in the same control, so a summary formatted in a different order from\n // the boxes it summarises is a control arguing with itself — which is what\n // two independent literals eventually become.\n const dayMask = 'dd/mm/yyyy';\n return {\n from: 'Start date',\n to: 'End date',\n quickRanges: 'Quick ranges',\n incomplete: 'Choose both dates.',\n reversed: 'The end date must be on or after the start date.',\n overMax: ({ maxRangeDays }) => `Choose a range of at most ${maxRangeDays} days.`,\n summary: ({ from, to }) => `${isoToMasked(from, dayMask)} – ${isoToMasked(to, dayMask)}`,\n calendarLabel: 'Calendar',\n dayMask,\n };\n}\n\n/** The line under the fields: the chosen window, or why there isn't one. */\nexport function statusMessage(\n status: DateRangeStatus,\n messages: DateRangePickerMessages,\n maxRangeDays: number | undefined,\n): string {\n if (status.ok) return messages.summary(status.window);\n if (status.problem === 'incomplete') return messages.incomplete;\n if (status.problem === 'reversed') return messages.reversed;\n return messages.overMax({ maxRangeDays: maxRangeDays ?? status.days, days: status.days });\n}\n\n/** Every quick range with its window, its length, and whether it is over cap. */\nexport function resolveQuickRanges(\n quickRanges: QuickRange[],\n context: QuickRangeContext,\n maxRangeDays: number | undefined,\n): ResolvedQuickRange[] {\n return quickRanges.map((quickRange) => {\n const window = quickRange.resolve(context);\n const days = dayCount(window.from, window.to);\n return {\n ...quickRange,\n window,\n days,\n overMax: maxRangeDays !== undefined && days > maxRangeDays,\n };\n });\n}\n\n/** The quick range the draft currently IS, if it is exactly one of them. */\nexport function activeQuickRangeId(\n options: ResolvedQuickRange[],\n draft: DateRangeDraft,\n): string | undefined {\n return options.find(\n (option) => option.window.from === draft.from && option.window.to === draft.to,\n )?.id;\n}\n"],"mappings":";;;;;;;;;AA6BO,SAAS,gBACd,OACA,cACiB;AACjB,QAAM,EAAE,MAAM,GAAG,IAAI;AACrB,MAAI,CAAC,QAAQ,CAAC,GAAI,QAAO,EAAE,IAAI,OAAO,SAAS,cAAc,MAAM,EAAE;AACrE,MAAI,WAAW,MAAM,EAAE,EAAG,QAAO,EAAE,IAAI,OAAO,SAAS,YAAY,MAAM,EAAE;AAE3E,QAAM,OAAO,SAAS,MAAM,EAAE;AAC9B,MAAI,iBAAiB,UAAa,OAAO,cAAc;AACrD,WAAO,EAAE,IAAI,OAAO,SAAS,YAAY,KAAK;AAAA,EAChD;AACA,SAAO,EAAE,IAAI,MAAM,QAAQ,EAAE,MAAM,GAAG,GAAG,KAAK;AAChD;AAYO,SAAS,kBAA2C;AAKzD,QAAM,UAAU;AAChB,SAAO;AAAA,IACL,MAAM;AAAA,IACN,IAAI;AAAA,IACJ,aAAa;AAAA,IACb,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,SAAS,CAAC,EAAE,aAAa,MAAM,6BAA6B,YAAY;AAAA,IACxE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,YAAY,MAAM,OAAO,CAAC,WAAM,YAAY,IAAI,OAAO,CAAC;AAAA,IACtF,eAAe;AAAA,IACf;AAAA,EACF;AACF;AAGO,SAAS,cACd,QACA,UACA,cACQ;AACR,MAAI,OAAO,GAAI,QAAO,SAAS,QAAQ,OAAO,MAAM;AACpD,MAAI,OAAO,YAAY,aAAc,QAAO,SAAS;AACrD,MAAI,OAAO,YAAY,WAAY,QAAO,SAAS;AACnD,SAAO,SAAS,QAAQ,EAAE,cAAc,gBAAgB,OAAO,MAAM,MAAM,OAAO,KAAK,CAAC;AAC1F;AAGO,SAAS,mBACd,aACA,SACA,cACsB;AACtB,SAAO,YAAY,IAAI,CAAC,eAAe;AACrC,UAAM,SAAS,WAAW,QAAQ,OAAO;AACzC,UAAM,OAAO,SAAS,OAAO,MAAM,OAAO,EAAE;AAC5C,WAAO;AAAA,MACL,GAAG;AAAA,MACH;AAAA,MACA;AAAA,MACA,SAAS,iBAAiB,UAAa,OAAO;AAAA,IAChD;AAAA,EACF,CAAC;AACH;AAGO,SAAS,mBACd,SACA,OACoB;AACpB,SAAO,QAAQ;AAAA,IACb,CAAC,WAAW,OAAO,OAAO,SAAS,MAAM,QAAQ,OAAO,OAAO,OAAO,MAAM;AAAA,EAC9E,GAAG;AACL;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/user-avatar/user-avatar.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from 'react';\nimport Box from '@mui/material/Box/index.js';\nimport Stack from '@mui/material/Stack/index.js';\nimport { Avatar } from '../components/data-display/Avatar';\nimport { Button } from '../components/form/Button';\nimport { Text } from '../components/typography/Text';\nimport { Card } from '../components/layout/Card';\nimport type { UserAvatarCopy } from '../copy';\n\n/**\n * Generate initials from a name\n */\nfunction getInitials(name: string): string {\n const parts = name.trim().split(/\\s+/);\n if (parts.length === 1) {\n return parts[0]?.substring(0, 2).toUpperCase() ?? \"\";\n }\n return (\n (parts[0]?.charAt(0) ?? \"\") + (parts[parts.length - 1]?.charAt(0) ?? \"\")\n ).toUpperCase();\n}\n\nexport interface UserAvatarProps {\n src?: string | null;\n name?: string | null;\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n onClick?: () => void;\n interactive?: boolean;\n}\n\n/**\n * User avatar using UI package Avatar component\n */\nexport function UserAvatar({\n src,\n name,\n size = 'md',\n onClick,\n interactive = false,\n}: UserAvatarProps): React.ReactElement {\n const fallbackText = name ? getInitials(name) : \"?\";\n\n return (\n <Avatar\n src={src ?? undefined}\n alt={name ?? \"User avatar\"}\n fallback={fallbackText}\n size={size}\n variant=\"circle\"\n interactive={interactive || !!onClick}\n onClick={onClick}\n />\n );\n}\n\nexport interface UserMenuProps {\n user: {\n name?: string | null;\n email?: string | null;\n image?: string | null;\n };\n onSignOut: () => void;\n /**\n * The card's one action. REQUIRED: this package ships no default copy, and\n * the button is the only thing on this card a host does not already supply.\n */\n copy: UserAvatarCopy;\n}\n\n/**\n * User menu with avatar, info, and sign out button\n */\nexport function UserMenu({ user, onSignOut, copy }: UserMenuProps): React.ReactElement {\n return (\n <Card variant=\"elevated\" borderRadius=\"md\">\n <Box sx={{ p: 2 }}>\n <Stack direction=\"row\" spacing={2} alignItems=\"center\">\n <UserAvatar\n src={user.image}\n name={user.name}\n size=\"md\"\n />\n\n <Stack spacing={0.5} sx={{ flex: 1, minWidth: 0 }}>\n <Text weight=\"semibold\" size=\"sm\">\n {user.name ?? \"User\"}\n </Text>\n {user.email && (\n <Text color=\"secondary\" size=\"xs\">\n {user.email}\n </Text>\n )}\n </Stack>\n\n <Button\n variant=\"outline\"\n color=\"danger\"\n size=\"sm\"\n onClick={onSignOut}\n >\n {copy.signOut}\n </Button>\n </Stack>\n </Box>\n </Card>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;AAGA,OAAO,SAAS;AAChB,OAAO,WAAW;AAyCd,cAwCM,YAxCN;AA/BJ,SAAS,YAAY,MAAsB;AACzC,QAAM,QAAQ,KAAK,KAAK,EAAE,MAAM,KAAK;AACrC,MAAI,MAAM,WAAW,GAAG;AACtB,WAAO,MAAM,CAAC,GAAG,UAAU,GAAG,CAAC,EAAE,YAAY,KAAK;AAAA,EACpD;AACA,WACG,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,OAAO,MAAM,MAAM,SAAS,CAAC,GAAG,OAAO,CAAC,KAAK,KACrE,YAAY;AAChB;AAaO,SAAS,WAAW;AAAA,EACzB;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA,cAAc;AAChB,GAAwC;AACtC,QAAM,eAAe,OAAO,YAAY,IAAI,IAAI;AAEhD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,KAAK,OAAO;AAAA,MACZ,KAAK,QAAQ;AAAA,MACb,UAAU;AAAA,MACV;AAAA,MACA,SAAQ;AAAA,MACR,aAAa,eAAe,CAAC,CAAC;AAAA,MAC9B;AAAA;AAAA,EACF;AAEJ;AAmBO,SAAS,SAAS,EAAE,MAAM,WAAW,KAAK,GAAsC;AACrF,SACE,oBAAC,QAAK,SAAQ,YAAW,cAAa,MACpC,8BAAC,OAAI,IAAI,EAAE,GAAG,EAAE,GACd,+BAAC,SAAM,WAAU,OAAM,SAAS,GAAG,YAAW,UAC5C;AAAA;AAAA,MAAC;AAAA;AAAA,QACC,KAAK,KAAK;AAAA,QACV,MAAM,KAAK;AAAA,QACX,MAAK;AAAA;AAAA,IACP;AAAA,IAEA,qBAAC,SAAM,SAAS,KAAK,IAAI,EAAE,MAAM,GAAG,UAAU,EAAE,GAC9C;AAAA,0BAAC,QAAK,QAAO,YAAW,MAAK,MAC1B,eAAK,QAAQ,QAChB;AAAA,MACC,KAAK,SACJ,oBAAC,QAAK,OAAM,aAAY,MAAK,MAC1B,eAAK,OACR;AAAA,OAEJ;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACC,SAAQ;AAAA,QACR,OAAM;AAAA,QACN,MAAK;AAAA,QACL,SAAS;AAAA,QAER,eAAK;AAAA;AAAA,IACR;AAAA,KACF,GACF,GACF;AAEJ;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/data-display/ErrorState/ErrorState.tsx"],"sourcesContent":["import ErrorOutlineIcon from '@mui/icons-material/ErrorOutline';\nimport RefreshIcon from '@mui/icons-material/Refresh';\nimport WarningAmberIcon from '@mui/icons-material/WarningAmber';\nimport Box from '@mui/material/Box/index.js';\nimport Button from '@mui/material/Button/index.js';\nimport Stack from '@mui/material/Stack/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { useTheme } from '@mui/material/styles/index.js';\nimport type { Theme } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport {\n ERROR_ICON_BOX,\n ERROR_ICON_BOX_OPACITY,\n ERROR_ICON_SIZE,\n ERROR_MESSAGE_LINE_HEIGHT,\n ERROR_MESSAGE_MAX_WIDTH,\n ERROR_STATE_GAP_UNITS,\n ERROR_STATE_MIN_HEIGHT,\n ERROR_STATE_PADDING_UNITS,\n ERROR_TEXT_GAP_UNITS,\n RETRY_MARGIN_TOP_UNITS,\n RETRY_MIN_WIDTH,\n} from './ErrorState.metrics';\nimport type { ErrorStateProps, ErrorStateSeverity } from './ErrorState.types';\nimport { resolveTestId } from '../../../platform/test-id';\nimport { rem, sxRem } from '../../../tokens/relative';\n\nconst makeTestId =\n (dataTestId?: string) =>\n (suffix: string): string =>\n dataTestId ? `${dataTestId}-${suffix}` : `error-state-${suffix}`;\n\nconst paletteFor = (theme: Theme, severity: ErrorStateSeverity) =>\n severity === 'error' ? theme.palette.error : theme.palette.warning;\n\nconst ErrorIcon: React.FC<{\n severity: ErrorStateSeverity;\n icon?: React.ReactNode;\n testId: string;\n}> = ({ severity, icon, testId }) => {\n const theme = useTheme();\n const color = paletteFor(theme, severity);\n const Fallback = severity === 'error' ? ErrorOutlineIcon : WarningAmberIcon;\n\n return (\n <Box\n data-testid={testId}\n sx={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n width: rem(theme, ERROR_ICON_BOX),\n height: rem(theme, ERROR_ICON_BOX),\n borderRadius: '50%',\n backgroundColor: color.light,\n opacity: ERROR_ICON_BOX_OPACITY,\n }}\n >\n {icon || <Fallback sx={{ fontSize: sxRem(ERROR_ICON_SIZE), color: color.main }} />}\n </Box>\n );\n};\n\nconst ErrorText: React.FC<{\n title?: string;\n message: string;\n titleId: string;\n testId: (suffix: string) => string;\n}> = ({ title, message, titleId, testId }) => {\n const theme = useTheme();\n\n return (\n <Stack spacing={ERROR_TEXT_GAP_UNITS} alignItems=\"center\">\n {title && (\n <Typography\n id={titleId}\n variant=\"h6\"\n component=\"h3\"\n data-testid={testId('title')}\n sx={{\n fontWeight: theme.typography.fontWeightMedium,\n color: theme.palette.text.primary,\n }}\n >\n {title}\n </Typography>\n )}\n\n <Typography\n id={`${titleId}-message`}\n variant=\"body2\"\n color=\"text.secondary\"\n data-testid={testId('message')}\n sx={{\n maxWidth: rem(theme, ERROR_MESSAGE_MAX_WIDTH),\n lineHeight: ERROR_MESSAGE_LINE_HEIGHT,\n }}\n >\n {message}\n </Typography>\n </Stack>\n );\n};\n\nexport const ErrorState: React.FC<ErrorStateProps> = React.memo((props) => {\n const {\n message,\n title,\n onRetry,\n retryLabel = 'Retry',\n severity = 'error',\n icon,\n className,\n } = props;\n const theme = useTheme();\n const titleId = React.useId();\n // `dataTestId` is the documented spelling; `testID`, the shared contract's\n // other one, resolves to the same id.\n const dataTestId = resolveTestId(props);\n const testId = makeTestId(dataTestId);\n\n return (\n <Box\n role=\"alert\"\n aria-labelledby={title ? titleId : undefined}\n aria-describedby={`${titleId}-message`}\n className={className}\n data-testid={dataTestId || 'error-state'}\n sx={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n textAlign: 'center',\n padding: theme.spacing(ERROR_STATE_PADDING_UNITS),\n minHeight: rem(theme, ERROR_STATE_MIN_HEIGHT),\n gap: theme.spacing(ERROR_STATE_GAP_UNITS),\n }}\n >\n <ErrorIcon severity={severity} icon={icon} testId={testId('icon')} />\n\n <ErrorText title={title} message={message} titleId={titleId} testId={testId} />\n\n {onRetry && (\n <Button\n variant=\"outlined\"\n color={severity}\n onClick={onRetry}\n startIcon={<RefreshIcon />}\n data-testid={testId('retry-button')}\n sx={{\n mt: theme.spacing(RETRY_MARGIN_TOP_UNITS),\n minWidth: rem(theme, RETRY_MIN_WIDTH),\n }}\n >\n {retryLabel}\n </Button>\n )}\n </Box>\n );\n});\n\nErrorState.displayName = 'ErrorState';\n\nexport default ErrorState;\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/data-display/Timeline/Timeline.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport { alpha, styled } from '@mui/material/styles/index.js';\nimport type { FC } from 'react';\nimport React from 'react';\nimport { TimelineRow } from './TimelineRow';\nimport type { TimelineProps } from './Timeline.types';\nimport { rem } from '../../../tokens/relative';\n\n// ---\n\n// --- Styled Components ---\nconst TimelineContainer = styled(Box)<{ orientation: 'vertical' | 'horizontal' }>(\n ({ theme, orientation }) => ({\n display: 'flex',\n flexDirection: orientation === 'vertical' ? 'column' : 'row',\n gap: theme.spacing(2),\n position: 'relative',\n width: '100%',\n ...(orientation === 'horizontal' && {\n overflowX: 'auto',\n paddingBottom: theme.spacing(2),\n '&::-webkit-scrollbar': {\n height: rem(theme, 8) },\n '&::-webkit-scrollbar-track': {\n background: alpha(theme.palette.action.disabled, 0.1),\n borderRadius: rem(theme, 4) },\n '&::-webkit-scrollbar-thumb': {\n background: alpha(theme.palette.primary.main, 0.3),\n borderRadius: rem(theme, 4),\n '&:hover': {\n background: alpha(theme.palette.primary.main, 0.5) } } }) }),\n);\n\n\n// ---\n\n// Main component\nexport const Timeline: FC<TimelineProps> = ({\n items,\n variant = 'default',\n orientation = 'vertical',\n showConnector = true,\n animated = true,\n alternating = false,\n onItemClick }) => {\n const [expandedItems, setExpandedItems] = React.useState<Set<string>>(new Set());\n\n const handleExpandClick = (itemId: string, event: React.MouseEvent) => {\n event.stopPropagation();\n setExpandedItems((prev) => {\n const newSet = new Set(prev);\n if (newSet.has(itemId)) {\n newSet.delete(itemId);\n } else {\n newSet.add(itemId);\n }\n return newSet;\n });\n };\n\n return (\n <TimelineContainer\n orientation={orientation}\n data-testid=\"timeline-container\"\n >\n {items.map((item, index) => (\n <TimelineRow\n key={item.id}\n item={item}\n index={index}\n isLast={index === items.length - 1}\n variant={variant}\n orientation={orientation}\n showConnector={showConnector}\n animated={animated}\n alternating={alternating}\n isExpanded={expandedItems.has(item.id)}\n onItemClick={onItemClick}\n onExpandClick={handleExpandClick}\n />\n ))}\n </TimelineContainer>\n );\n};\n\nexport default Timeline;\n"],"mappings":";;;;;;;;AAAA,OAAO,SAAS;AAChB,SAAS,OAAO,cAAc;AAE9B,OAAO,WAAW;AA+DV;AAvDR,IAAM,oBAAoB,OAAO,GAAG;AAAA,EAClC,CAAC,EAAE,OAAO,YAAY,OAAO;AAAA,IAC3B,SAAS;AAAA,IACT,eAAe,gBAAgB,aAAa,WAAW;AAAA,IACvD,KAAK,MAAM,QAAQ,CAAC;AAAA,IACpB,UAAU;AAAA,IACV,OAAO;AAAA,IACP,GAAI,gBAAgB,gBAAgB;AAAA,MAClC,WAAW;AAAA,MACX,eAAe,MAAM,QAAQ,CAAC;AAAA,MAC9B,wBAAwB;AAAA,QACtB,QAAQ,IAAI,OAAO,CAAC;AAAA,MAAE;AAAA,MACxB,8BAA8B;AAAA,QAC5B,YAAY,MAAM,MAAM,QAAQ,OAAO,UAAU,GAAG;AAAA,QACpD,cAAc,IAAI,OAAO,CAAC;AAAA,MAAE;AAAA,MAC9B,8BAA8B;AAAA,QAC5B,YAAY,MAAM,MAAM,QAAQ,QAAQ,MAAM,GAAG;AAAA,QACjD,cAAc,IAAI,OAAO,CAAC;AAAA,QAC1B,WAAW;AAAA,UACT,YAAY,MAAM,MAAM,QAAQ,QAAQ,MAAM,GAAG;AAAA,QAAE;AAAA,MAAE;AAAA,IAAE;AAAA,EAAG;AACpE;AAMO,IAAM,WAA8B,CAAC;AAAA,EAC1C;AAAA,EACA,UAAU;AAAA,EACV,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,WAAW;AAAA,EACX,cAAc;AAAA,EACd;AAAY,MAAM;AAClB,QAAM,CAAC,eAAe,gBAAgB,IAAI,MAAM,SAAsB,oBAAI,IAAI,CAAC;AAE/E,QAAM,oBAAoB,CAAC,QAAgB,UAA4B;AACrE,UAAM,gBAAgB;AACtB,qBAAiB,CAAC,SAAS;AACzB,YAAM,SAAS,IAAI,IAAI,IAAI;AAC3B,UAAI,OAAO,IAAI,MAAM,GAAG;AACtB,eAAO,OAAO,MAAM;AAAA,MACtB,OAAO;AACL,eAAO,IAAI,MAAM;AAAA,MACnB;AACA,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,eAAY;AAAA,MAEX,gBAAM,IAAI,CAAC,MAAM,UAChB;AAAA,QAAC;AAAA;AAAA,UAEC;AAAA,UACA;AAAA,UACA,QAAQ,UAAU,MAAM,SAAS;AAAA,UACjC;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA,YAAY,cAAc,IAAI,KAAK,EAAE;AAAA,UACrC;AAAA,UACA,eAAe;AAAA;AAAA,QAXV,KAAK;AAAA,MAYZ,CACD;AAAA;AAAA,EACH;AAEJ;AAEA,IAAO,mBAAQ;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/data-display/Table/TableParts.hooks.tsx","../src/components/data-display/Table/TableParts.tsx"],"sourcesContent":["import type React from 'react';\nimport { useCallback } from 'react';\n\nimport { TableDataRow } from './TableParts';\nimport type { TableBodyProps } from './Table.types';\n\n// Row identity, selection and the row element itself. Split out of\n// EnhancedTableBody so that component is just the virtualised/plain choice.\n// A row's identity: the caller's extractor, else its id, else its position.\nconst useRowKey = (rowKeyExtractor: TableBodyProps['rowKeyExtractor']) =>\n useCallback(\n (rowData: Record<string, unknown>, index: number): string | number =>\n rowKeyExtractor ? rowKeyExtractor(rowData, index) : (rowData.id as string | number) || index,\n [rowKeyExtractor],\n );\n\nconst useRowSelection = ({\n selectedRows,\n onSelectionChange,\n}: {\n selectedRows: Array<string | number>;\n onSelectionChange: TableBodyProps['onSelectionChange'];\n}) =>\n useCallback(\n (event: React.MouseEvent | React.ChangeEvent, rowKey: string | number) => {\n // Stop propagation so selecting does not also fire the row click.\n event.stopPropagation();\n if (!onSelectionChange) return;\n onSelectionChange(rowKey, !selectedRows.includes(rowKey));\n },\n [onSelectionChange, selectedRows],\n );\n\ntype RowRendererProps = Pick<\n TableBodyProps,\n | 'columns'\n | 'onRowClick'\n | 'onRowFocus'\n | 'onRowBlur'\n | 'onSelectionChange'\n | 'rowKeyExtractor'\n | 'selectable'\n | 'renderRow'\n | 'renderCell'\n | 'rowHeight'\n> & {\n selectedRows: Array<string | number>;\n /** Whether the rows are a virtual window's, drawn at exactly `rowHeight`. */\n virtualised: boolean;\n};\n\nexport const useTableRowRenderer = ({\n columns,\n selectedRows,\n onRowClick,\n onRowFocus,\n onRowBlur,\n onSelectionChange,\n rowKeyExtractor,\n selectable,\n renderRow,\n renderCell,\n virtualised,\n rowHeight,\n}: RowRendererProps) => {\n const getRowKey = useRowKey(rowKeyExtractor);\n const isRowSelected = useCallback(\n (rowKey: string | number) => selectedRows.includes(rowKey),\n [selectedRows],\n );\n const handleRowSelection = useRowSelection({ selectedRows, onSelectionChange });\n\n const renderTableRow = useCallback(\n (rowData: Record<string, unknown>, index: number) => {\n const rowKey = getRowKey(rowData, index);\n const selected = isRowSelected(rowKey);\n\n if (renderRow) return renderRow(rowData, index, selected);\n\n return (\n <TableDataRow\n key={rowKey}\n rowData={rowData}\n rowKey={rowKey}\n index={index}\n columns={columns}\n selected={selected}\n selectable={selectable}\n rowHeight={rowHeight}\n onRowClick={onRowClick}\n onRowFocus={onRowFocus}\n onRowBlur={onRowBlur}\n onSelect={handleRowSelection}\n virtualised={virtualised}\n renderCell={renderCell}\n />\n );\n },\n [\n columns,\n getRowKey,\n isRowSelected,\n handleRowSelection,\n onRowClick,\n onRowFocus,\n onRowBlur,\n renderRow,\n renderCell,\n rowHeight,\n selectable,\n virtualised,\n ],\n );\n\n return renderTableRow;\n};\n","import Checkbox from '@mui/material/Checkbox/index.js';\nimport TableBody from '@mui/material/TableBody/index.js';\nimport TableCell from '@mui/material/TableCell/index.js';\nimport TableHead from '@mui/material/TableHead/index.js';\nimport TableRow from '@mui/material/TableRow/index.js';\nimport TableSortLabel from '@mui/material/TableSortLabel/index.js';\nimport { useTheme, type Theme } from '@mui/material/styles/index.js';\nimport React, { useCallback } from 'react';\n\nimport { FIELD_BORDER_WIDTH } from '../../../tokens/field-height.core';\nimport { rem } from '../../../tokens/relative';\n\nimport { tableRowHeight } from './Table.helpers';\nimport { useTableRowRenderer } from './TableParts.hooks';\nimport type { ColumnConfig, TableBodyProps, TableHeaderProps, VirtualWindow } from './Table.types';\n\n// Mirrors the visible sort indicator for assistive technology; undefined when\n// the column is not sorted, which is what removes the attribute entirely.\nconst ariaSortFor = (\n canSort: boolean,\n isSorted: boolean,\n direction?: 'asc' | 'desc',\n): 'ascending' | 'descending' | undefined => {\n if (!canSort || !isSorted) return undefined;\n\n return direction === 'asc' ? 'ascending' : 'descending';\n};\n\n/** A column's `width`/`minWidth` as CSS: a number is design px, a string as given. */\nconst columnLength = (theme: Theme, value: number | string | undefined): string | undefined =>\n typeof value === 'number' ? rem(theme, value) : value;\n\n// One header cell. Sorting is offered when the table is sortable and the column\n// has not opted out; aria-sort mirrors the visible indicator.\nconst HeaderCell: React.FC<{\n column: ColumnConfig;\n sortable?: boolean;\n sortConfig?: { key: string; direction: 'asc' | 'desc' };\n onSort: (columnKey: string) => void;\n}> = ({ column, sortable, sortConfig, onSort }) => {\n const theme = useTheme();\n const canSort = Boolean(sortable) && column.sortable !== false;\n const isSorted = sortConfig?.key === column.key;\n\n return (\n <TableCell\n align={column.align || 'left'}\n style={{\n minWidth: columnLength(theme, column.minWidth),\n width: columnLength(theme, column.width),\n }}\n aria-sort={ariaSortFor(canSort, isSorted, sortConfig?.direction)}\n >\n {canSort ? (\n <TableSortLabel\n active={isSorted}\n direction={isSorted ? sortConfig?.direction : 'asc'}\n onClick={() => onSort(column.key)}\n data-testid=\"sort-indicator\"\n aria-label={`Sort by ${column.label}`}\n >\n {column.label}\n </TableSortLabel>\n ) : (\n column.label\n )}\n </TableCell>\n );\n};\n\nexport const EnhancedTableHeader: React.FC<TableHeaderProps> = React.memo(({\n columns,\n data,\n sortable,\n sortConfig,\n onSortChange,\n selectable,\n selectedRows = [],\n onSelectAll,\n headRef }) => {\n const handleSort = useCallback(\n (columnKey: string) => {\n if (!sortable || !onSortChange) return;\n \n const direction = \n sortConfig?.key === columnKey && sortConfig.direction === 'asc' ? 'desc' : 'asc';\n onSortChange(columnKey, direction);\n },\n [sortable, onSortChange, sortConfig]\n );\n\n const handleSelectAll = useCallback(\n (event: React.ChangeEvent<globalThis.HTMLInputElement>) => {\n if (!onSelectAll) return;\n onSelectAll(event.target.checked);\n },\n [onSelectAll]\n );\n\n return (\n <TableHead ref={headRef}>\n <TableRow>\n {selectable && (\n <TableCell padding=\"checkbox\">\n <Checkbox\n indeterminate={selectedRows.length > 0 && selectedRows.length < data.length}\n checked={selectedRows.length === data.length && data.length > 0}\n onChange={handleSelectAll}\n inputProps={{ 'aria-label': 'select all' }}\n />\n </TableCell>\n )}\n {columns.map((column) => (\n <HeaderCell\n key={column.key}\n column={column}\n sortable={sortable}\n sortConfig={sortConfig}\n onSort={handleSort}\n />\n ))}\n </TableRow>\n </TableHead>\n );\n});\n\nEnhancedTableHeader.displayName = 'EnhancedTableHeader';\n\n/** How a virtual cell's wrapper places its content along the row, per `align`. */\nconst JUSTIFY: Record<NonNullable<ColumnConfig['align']>, React.CSSProperties['justifyContent']> = {\n left: 'flex-start',\n center: 'center',\n right: 'flex-end',\n};\n\n/**\n * A virtual cell's content (FUT-2668). The cell has no vertical padding, and\n * this fills its content box — the pitch less the cell's bottom rule, the one\n * hairline every variant draws — so the cell's border box is exactly the pitch\n * whatever it holds. Centred vertically, placed by the column's `align`, and\n * clipped rather than allowed to grow the row.\n */\nconst VirtualCellContent: React.FC<{\n rowHeight: number;\n align: NonNullable<ColumnConfig['align']>;\n children: React.ReactNode;\n}> = ({ rowHeight, align, children }) => {\n const theme = useTheme();\n return (\n <div\n style={{\n height: `calc(${rem(theme, rowHeight)} - ${FIELD_BORDER_WIDTH}px)`,\n display: 'flex',\n alignItems: 'center',\n justifyContent: JUSTIFY[align],\n overflow: 'hidden',\n }}\n >\n {children}\n </div>\n );\n};\n\n/** What one cell shows: the caller's `renderCell`, else the column's `render`, else the value. */\nconst cellContent = (\n column: ColumnConfig,\n rowData: Record<string, unknown>,\n index: number,\n renderCell: TableBodyProps['renderCell'],\n): React.ReactNode => {\n const value = rowData[column.key];\n if (renderCell) return renderCell(value, column, rowData, index);\n return column.render ? column.render(value, rowData) : (value as React.ReactNode);\n};\n\n// One data row. Split out of the memoised renderTableRow callback so the\n// callback stays a short dispatch and the row markup is readable on its own.\n// A virtualised row stays in the table's flow at `rowHeight`, and each of its\n// cells holds its content in a `VirtualCellContent` (FUT-2668); a plain row is\n// drawn as MUI draws it.\nexport const TableDataRow: React.FC<{\n rowData: Record<string, unknown>;\n rowKey: string | number;\n index: number;\n columns: ColumnConfig[];\n selected: boolean;\n selectable?: boolean;\n /** Design px; 52 when unset (`tableRowHeight`). */\n rowHeight?: number;\n onRowClick?: TableBodyProps['onRowClick'];\n onRowFocus?: TableBodyProps['onRowFocus'];\n onRowBlur?: TableBodyProps['onRowBlur'];\n onSelect: (event: React.MouseEvent | React.ChangeEvent, rowKey: string | number) => void;\n /** Whether the row is one of a virtual window's. */\n virtualised: boolean;\n renderCell?: TableBodyProps['renderCell'];\n}> = ({\n rowData,\n rowKey,\n index,\n columns,\n selected,\n selectable,\n rowHeight,\n onRowClick,\n onRowFocus,\n onRowBlur,\n onSelect,\n virtualised,\n renderCell }) => {\n const theme = useTheme();\n const pitch = tableRowHeight(rowHeight);\n const fit = (align: NonNullable<ColumnConfig['align']>, content: React.ReactNode) =>\n virtualised ? (\n <VirtualCellContent rowHeight={pitch} align={align}>\n {content}\n </VirtualCellContent>\n ) : (\n content\n );\n\n return (\n <TableRow\n key={String(rowKey)}\n selected={selected}\n className={selected ? 'selected' : ''}\n onClick={(event: React.MouseEvent<globalThis.HTMLTableRowElement>) => onRowClick?.(event, rowData)}\n onFocus={(event: React.FocusEvent<globalThis.HTMLTableRowElement>) => onRowFocus?.(event, rowData)}\n onBlur={(event: React.FocusEvent<globalThis.HTMLTableRowElement>) => onRowBlur?.(event, rowData)}\n style={virtualised ? { height: rem(theme, pitch) } : undefined}\n >\n {selectable && (\n <TableCell padding=\"checkbox\">\n {fit(\n 'left',\n <Checkbox\n checked={selected}\n onChange={(event) => onSelect(event, rowKey)}\n onClick={(event) => event.stopPropagation()}\n inputProps={{ 'aria-label': `select row ${index + 1}` }}\n />,\n )}\n </TableCell>\n )}\n {columns.map((column) => (\n <TableCell key={column.key} align={column.align || 'left'}>\n {fit(column.align || 'left', cellContent(column, rowData, index, renderCell))}\n </TableCell>\n ))}\n </TableRow>\n );\n};\n\n/**\n * A stand-in for the rows outside the window, `heightPx` design px tall. A bare\n * `<tr>` and `<td>` with no padding or border: none of MUI's row or cell\n * classes, so hover, striping and cell padding never reach it. Not rendered at\n * all when there is nothing to stand in for.\n */\nconst SpacerRow: React.FC<{ heightPx: number; colSpan: number }> = ({ heightPx, colSpan }) => {\n const theme = useTheme();\n if (heightPx <= 0) return null;\n return (\n <tr aria-hidden=\"true\" style={{ height: rem(theme, heightPx) }}>\n <td colSpan={colSpan} style={{ padding: 0, border: 0 }} />\n </tr>\n );\n};\n\n// Only the rows in view are rendered, in the table's own flow between two\n// spacer rows standing in for the rest (FUT-2668) — an absolutely positioned\n// `<tr>` is blockified and leaves the column grid. Every height is design px,\n// drawn through `rem`. The `<tbody>` sits directly in the `<table>`; the one\n// scroll container wraps the whole table, header included (FUT-2658).\nconst VirtualisedBody: React.FC<{\n visibleItems: VirtualWindow;\n colSpan: number;\n renderTableRow: (rowData: Record<string, unknown>, index: number) => React.ReactNode;\n}> = ({ visibleItems, colSpan, renderTableRow }) => (\n <TableBody>\n <SpacerRow heightPx={visibleItems.offsetY} colSpan={colSpan} />\n {visibleItems.items.map((rowData, index) =>\n renderTableRow(rowData, visibleItems.startIndex + index)\n )}\n <SpacerRow heightPx={visibleItems.trailingPx} colSpan={colSpan} />\n </TableBody>\n);\n\nconst PlainBody: React.FC<{\n data: TableBodyProps['data'];\n renderTableRow: (rowData: Record<string, unknown>, index: number) => React.ReactNode;\n}> = ({ data, renderTableRow }) => (\n\n <TableBody>\n {data.map((rowData, index) => renderTableRow(rowData, index))}\n </TableBody>\n);\n\n// Enhanced Table Body Component \nexport const EnhancedTableBody: React.FC<TableBodyProps> = React.memo((props) => {\n const { data, virtualWindow } = props;\n // The row renderer takes the body's own props; its `rowHeight` stays the\n // caller's design px, and the row resolves the default where it draws it.\n const renderTableRow = useTableRowRenderer({\n ...props,\n selectedRows: props.selectedRows ?? [],\n virtualised: Boolean(virtualWindow),\n });\n\n if (virtualWindow) {\n return (\n <VirtualisedBody\n visibleItems={virtualWindow}\n colSpan={props.columns.length + (props.selectable ? 1 : 0)}\n renderTableRow={renderTableRow}\n />\n );\n }\n\n return (\n <PlainBody data={data} renderTableRow={renderTableRow} />\n );\n});\n\nEnhancedTableBody.displayName = 'EnhancedTableBody';\n\n// Main Table Component\n"],"mappings":"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","names":["useCallback","jsx","useCallback"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/UploadButton/UploadButton.hooks.ts"],"sourcesContent":["import { useCallback, useId, useMemo, useRef, useState } from 'react';\nimport type React from 'react';\n\nimport type { UploadButtonProps, UploadButtonState } from './UploadButton.types';\n\n/** The props {@link useUploadButton} reads — the component's own props. */\ntype UploadButtonHookProps = UploadButtonProps;\n\n/** Percent the simulated progress creeps to while waiting on `onUpload`. */\nconst SIMULATED_PROGRESS_CEILING = 90;\nconst SIMULATED_PROGRESS_STEP = 10;\nconst SIMULATED_PROGRESS_INTERVAL_MS = 100;\nconst PROGRESS_RESET_DELAY_MS = 1000;\nconst BYTES_PER_MB = 1024 * 1024;\n\nconst INITIAL_STATE: UploadButtonState = {\n isDragOver: false,\n isUploading: false,\n uploadProgress: 0,\n error: null,\n};\n\n/** Narrowed `setState` for the pieces below. */\ntype SetState = React.Dispatch<React.SetStateAction<UploadButtonState>>;\n\n/** The size/custom validation applied to every file, in both modes. */\nfunction useFileValidator(\n maxSizeMB: number | undefined,\n validate: ((file: globalThis.File) => string | null) | undefined,\n): (file: globalThis.File) => string | null {\n return useCallback(\n (file: globalThis.File): string | null => {\n if (maxSizeMB && file.size > maxSizeMB * BYTES_PER_MB) {\n return `File size must be less than ${maxSizeMB}MB`;\n }\n return validate ? validate(file) : null;\n },\n [maxSizeMB, validate],\n );\n}\n\n/**\n * The built-in upload path, reachable from BOTH selection modes.\n *\n * Kept apart from selection because it is the only asynchronous part: left\n * inline it was single-file only, which made `onUpload` a silent no-op for a\n * multi-file caller — the worst kind of contract, since nothing fails.\n */\nfunction useUploadRunner(\n onUpload: ((file: globalThis.File) => Promise<void>) | undefined,\n externalUploading: boolean,\n setState: SetState,\n): (file: globalThis.File) => Promise<void> {\n return useCallback(\n async (file: globalThis.File) => {\n if (!onUpload || externalUploading) return;\n try {\n setState((prev) => ({ ...prev, isUploading: true, uploadProgress: 0 }));\n // The real percentage is unknowable through a bare promise, so the bar\n // creeps to a ceiling and only completes when the promise does.\n const timer = globalThis.setInterval(() => {\n setState((prev) => {\n if (prev.uploadProgress >= SIMULATED_PROGRESS_CEILING) {\n globalThis.clearInterval(timer);\n return prev;\n }\n return { ...prev, uploadProgress: prev.uploadProgress + SIMULATED_PROGRESS_STEP };\n });\n }, SIMULATED_PROGRESS_INTERVAL_MS);\n\n await onUpload(file);\n\n globalThis.clearInterval(timer);\n setState((prev) => ({ ...prev, isUploading: false, uploadProgress: 100 }));\n globalThis.setTimeout(() => {\n setState((prev) => ({ ...prev, uploadProgress: 0 }));\n }, PROGRESS_RESET_DELAY_MS);\n } catch (error) {\n setState((prev) => ({\n ...prev,\n isUploading: false,\n uploadProgress: 0,\n error: error instanceof Error ? error.message : 'Upload failed',\n }));\n }\n },\n [onUpload, externalUploading, setState],\n );\n}\n\n/**\n * What {@link useUploadSelection} hands back. Module-private: the published\n * surface is {@link useUploadButton}, not the shape of its internals.\n */\ninterface UploadSelection {\n state: UploadButtonState;\n setDragOver: (isDragOver: boolean) => void;\n /** Route a picked/dropped selection through validation and the callbacks. */\n handleFiles: (files: globalThis.File[]) => void;\n}\n\ninterface UploadSelectionOptions {\n onSelect: (file: globalThis.File) => void;\n multiple: boolean;\n onSelectMany?: (files: globalThis.File[]) => void;\n onUpload?: (file: globalThis.File) => Promise<void>;\n externalUploading: boolean;\n validateFile: (file: globalThis.File) => string | null;\n}\n\n/**\n * Selection, validation and the optional built-in upload.\n *\n * The rendering layer only reads `state` and calls `handleFiles`; every rule\n * about what a selection means lives here.\n */\nfunction useUploadSelection({\n onSelect,\n multiple,\n onSelectMany,\n onUpload,\n externalUploading,\n validateFile,\n}: UploadSelectionOptions): UploadSelection {\n const [state, setState] = useState<UploadButtonState>(INITIAL_STATE);\n const runUpload = useUploadRunner(onUpload, externalUploading, setState);\n\n const selectOne = useCallback(\n (file: globalThis.File) => {\n const error = validateFile(file);\n setState((prev) => ({ ...prev, error }));\n if (error) return;\n onSelect(file);\n void runUpload(file);\n },\n [onSelect, runUpload, validateFile],\n );\n\n /**\n * Multi-file mode is deliberately forgiving: the valid files are handed over\n * and the first rejection is reported alongside them, so dropping a folder\n * that also contains a PDF imports the rest instead of refusing the lot.\n */\n const selectMany = useCallback(\n (files: globalThis.File[], accept: (files: globalThis.File[]) => void) => {\n const accepted: globalThis.File[] = [];\n let rejection: string | null = null;\n for (const file of files) {\n const error = validateFile(file);\n if (error) rejection ??= error;\n else accepted.push(file);\n }\n setState((prev) => ({ ...prev, error: rejection }));\n if (accepted.length === 0) return;\n accept(accepted);\n // `onUpload` applies here too, one file after another, so the prop means\n // the same thing in both modes. Sequential because the progress bar is a\n // single indicator — overlapping uploads would report nonsense.\n void (async () => {\n for (const file of accepted) await runUpload(file);\n })();\n },\n [runUpload, validateFile],\n );\n\n const handleFiles = useCallback(\n (files: globalThis.File[]) => {\n if (files.length === 0) return;\n if (multiple && onSelectMany) selectMany(files, onSelectMany);\n else selectOne(files[0] as globalThis.File);\n },\n [multiple, onSelectMany, selectMany, selectOne],\n );\n\n const setDragOver = useCallback((isDragOver: boolean) => {\n setState((prev) => ({ ...prev, isDragOver }));\n }, []);\n\n return useMemo(() => ({ state, setDragOver, handleFiles }), [state, setDragOver, handleFiles]);\n}\n\n/** Drag-and-drop wiring for the dropzone variant. */\nexport interface DragHandlers {\n onDragEnter: (event: React.DragEvent) => void;\n onDragLeave: (event: React.DragEvent) => void;\n onDragOver: (event: React.DragEvent) => void;\n onDrop: (event: React.DragEvent) => void;\n}\n\nconst swallow = (event: React.DragEvent): void => {\n event.preventDefault();\n event.stopPropagation();\n};\n\nfunction useDragHandlers(\n disabled: boolean,\n setDragOver: (isDragOver: boolean) => void,\n handleFiles: (files: globalThis.File[]) => void,\n): DragHandlers {\n return {\n onDragEnter: (event) => {\n swallow(event);\n if (!disabled) setDragOver(true);\n },\n onDragLeave: (event) => {\n swallow(event);\n setDragOver(false);\n },\n onDragOver: swallow,\n onDrop: (event) => {\n swallow(event);\n setDragOver(false);\n if (!disabled) handleFiles(Array.from(event.dataTransfer.files));\n },\n };\n}\n\n/** Everything the component needs, assembled from its props in one call. */\ninterface UploadButtonKit {\n inputRef: React.RefObject<HTMLInputElement | null>;\n inputId: string;\n state: UploadButtonState;\n drag: DragHandlers;\n derived: DerivedUploadState;\n openPicker: () => void;\n handleInputChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n}\n\n/**\n * The component's whole behaviour in one hook, so the render body stays a thin\n * piece of wiring rather than a place where rules accumulate.\n */\nexport function useUploadButton(props: UploadButtonHookProps): UploadButtonKit {\n const {\n onSelect,\n multiple = false,\n onSelectMany,\n onUpload,\n uploading: externalUploading = false,\n progress: externalProgress = 0,\n maxSizeMB,\n validate,\n helperText,\n errorText,\n disabled = false,\n } = props;\n\n const inputRef = useRef<HTMLInputElement>(null);\n const inputId = `upload-button-${useId()}`;\n const validateFile = useFileValidator(maxSizeMB, validate);\n const { state, setDragOver, handleFiles } = useUploadSelection({\n onSelect,\n multiple,\n onSelectMany,\n onUpload,\n externalUploading,\n validateFile,\n });\n const drag = useDragHandlers(disabled, setDragOver, handleFiles);\n const derived = useDerivedUploadState({\n state,\n inputId,\n externalUploading,\n externalProgress,\n errorText,\n helperText,\n });\n\n const openPicker = useCallback(() => inputRef.current?.click(), []);\n const handleInputChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n handleFiles(Array.from(event.target.files ?? []));\n // Let the same file be picked twice in a row — without this the input\n // holds the old value and re-selecting it fires no change event.\n event.target.value = '';\n },\n [handleFiles],\n );\n\n return { inputRef, inputId, state, drag, derived, openPicker, handleInputChange };\n}\n\n/** The values the render derives from props + internal state. */\ninterface DerivedUploadState {\n isUploading: boolean;\n progress: number;\n error: string | null;\n helperId?: string;\n errorId?: string;\n describedBy?: string;\n}\n\n/**\n * Fold props and internal state into what the render actually shows. External\n * state wins whenever the caller drives it.\n */\nfunction useDerivedUploadState({\n state,\n inputId,\n externalUploading,\n externalProgress,\n errorText,\n helperText,\n}: {\n state: UploadButtonState;\n inputId: string;\n externalUploading: boolean;\n externalProgress: number;\n errorText?: string;\n helperText?: string;\n}): DerivedUploadState {\n const error = errorText || state.error;\n const helperId = helperText ? `${inputId}-helper` : undefined;\n const errorId = error ? `${inputId}-error` : undefined;\n return {\n isUploading: externalUploading || state.isUploading,\n progress: externalUploading ? externalProgress : state.uploadProgress,\n error,\n helperId,\n errorId,\n describedBy: [helperId, errorId].filter(Boolean).join(' ') || undefined,\n };\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/data-display/MapPreview/MapLayers.tsx"],"sourcesContent":["import { useTheme } from '@mui/material/styles/index.js';\nimport type { FC } from 'react';\nimport React from 'react';\n\nimport { HEATMAP_VIEWBOX } from './MapPreview.constants';\nimport type { ResolvedMapPreviewProps } from './MapPreview.helpers';\nimport type { MapType } from './MapPreview.types';\nimport { MapControlBar } from './MapControlBar';\nimport { HeatmapOverlay, RouteOverlay } from './MapOverlays';\nimport { MapSearchBar } from './MapSearchBar';\n\nexport interface MapLayersProps {\n settings: ResolvedMapPreviewProps;\n zoom: number;\n mapType: MapType;\n search: {\n searchValue: string;\n isSearching: boolean;\n setSearchValue: (value: string) => void;\n handleSearch: (event: React.KeyboardEvent<HTMLInputElement>) => void;\n };\n controls: {\n handleZoomIn: () => void;\n handleZoomOut: () => void;\n handleCenter: () => void;\n handleToggleMapType: () => void;\n handleToggleFullscreen: () => void;\n };\n}\n\n// Everything drawn over the map surface that is switched on by a prop.\nexport const MapLayers: FC<MapLayersProps> = ({ settings, zoom, mapType, search, controls }) => {\n const theme = useTheme();\n\n return (\n <>\n {settings.showHeatmap && settings.heatmapData.length > 0 && (\n <HeatmapOverlay\n points={settings.heatmapData}\n viewBox={HEATMAP_VIEWBOX}\n />\n )}\n\n {settings.showRoute && <RouteOverlay color={settings.routeColor || theme.palette.primary.main} />}\n\n {settings.showSearch && (\n <MapSearchBar\n label={settings.copy.search}\n value={search.searchValue}\n placeholder={settings.searchPlaceholder}\n isSearching={search.isSearching}\n onChange={search.setSearchValue}\n onSubmit={search.handleSearch}\n />\n )}\n\n {settings.showControls && (\n <MapControlBar\n copy={settings.copy}\n zoom={zoom}\n mapType={mapType}\n onZoomIn={controls.handleZoomIn}\n onZoomOut={controls.handleZoomOut}\n onCenter={controls.handleCenter}\n onToggleMapType={controls.handleToggleMapType}\n onToggleFullscreen={controls.handleToggleFullscreen}\n />\n )}\n </>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;AAAA,SAAS,gBAAgB;AAmCrB,mBAEI,KAFJ;AAJG,IAAM,YAAgC,CAAC,EAAE,UAAU,MAAM,SAAS,QAAQ,SAAS,MAAM;AAC9F,QAAM,QAAQ,SAAS;AAEvB,SACE,iCACG;AAAA,aAAS,eAAe,SAAS,YAAY,SAAS,KACrD;AAAA,MAAC;AAAA;AAAA,QACC,QAAQ,SAAS;AAAA,QACjB,SAAS;AAAA;AAAA,IACX;AAAA,IAGD,SAAS,aAAa,oBAAC,gBAAa,OAAO,SAAS,cAAc,MAAM,QAAQ,QAAQ,MAAM;AAAA,IAE9F,SAAS,cACR;AAAA,MAAC;AAAA;AAAA,QACC,OAAO,SAAS,KAAK;AAAA,QACrB,OAAO,OAAO;AAAA,QACd,aAAa,SAAS;AAAA,QACtB,aAAa,OAAO;AAAA,QACpB,UAAU,OAAO;AAAA,QACjB,UAAU,OAAO;AAAA;AAAA,IACnB;AAAA,IAGD,SAAS,gBACR;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,SAAS;AAAA,QACf;AAAA,QACA;AAAA,QACA,UAAU,SAAS;AAAA,QACnB,WAAW,SAAS;AAAA,QACpB,UAAU,SAAS;AAAA,QACnB,iBAAiB,SAAS;AAAA,QAC1B,oBAAoB,SAAS;AAAA;AAAA,IAC/B;AAAA,KAEJ;AAEJ;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/layout/ContentToolbar/MultiSelectDropdown.tsx"],"sourcesContent":["'use client';\n\nimport SearchIcon from '@mui/icons-material/Search';\nimport Box from '@mui/material/Box/index.js';\nimport Button from '@mui/material/Button/index.js';\nimport Checkbox from '@mui/material/Checkbox/index.js';\nimport Divider from '@mui/material/Divider/index.js';\nimport InputAdornment from '@mui/material/InputAdornment/index.js';\nimport ListSubheader from '@mui/material/ListSubheader/index.js';\nimport Menu from '@mui/material/Menu/index.js';\nimport MenuItem from '@mui/material/MenuItem/index.js';\nimport TextField from '@mui/material/TextField/index.js';\nimport React, { useMemo, useState } from 'react';\n\nimport type {\n MultiSelectDropdownProps,\n MultiSelectExtraOption,\n MultiSelectOption,\n} from './ContentToolbar.types';\nimport { buildTriggerLabel, InlineTrigger, PillTrigger, StackedTrigger } from './MultiSelectTriggers';\nimport { fieldTextFieldStyles } from '../../../tokens/field-height';\nimport { sxRem } from '../../../tokens/relative';\n\n/** One checkbox menu row with an optional trailing count. */\nfunction CheckboxRow({\n label,\n count,\n checked,\n onToggle,\n}: {\n label: string;\n count?: number;\n checked: boolean;\n onToggle: (next: boolean) => void;\n}): React.JSX.Element {\n return (\n <MenuItem onClick={() => onToggle(!checked)} sx={{ gap: 1 }}>\n <Checkbox checked={checked} size=\"small\" disableRipple sx={{ p: 0, pointerEvents: 'none' }} tabIndex={-1} />\n <Box component=\"span\" sx={{ flex: 1, minWidth: 0, textAlign: 'left' }}>\n {label}\n {count != null && (\n <Box component=\"span\" sx={{ color: 'text.secondary' }}>\n {' '}\n ({count})\n </Box>\n )}\n </Box>\n </MenuItem>\n );\n}\n\n/**\n * Generic multi-select dropdown with checkboxes, counts, an optional \"Options\"\n * section, and a \"Clear\" action. Faithful MUI port of the reference toolbar's\n * \"Content Type\" control. The menu stays open while toggling options.\n */\nexport function MultiSelectDropdown<TValue extends string = string>({\n label,\n options,\n selected,\n onToggle,\n onClear,\n allLabel = 'All',\n clearLabel,\n clearText,\n extraOptionsHeading,\n extraOptions,\n searchable,\n searchPlaceholder = 'Search…',\n noResultsLabel = 'No results',\n layout = 'inline',\n 'data-testid': testId,\n onOpenChange,\n}: MultiSelectDropdownProps<TValue>): React.JSX.Element {\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n const [query, setQuery] = useState('');\n const open = Boolean(anchorEl);\n const stacked = layout === 'stacked';\n // Reset the query each time the menu closes so it reopens showing everything.\n const close = (): void => {\n setAnchorEl(null);\n setQuery('');\n onOpenChange?.(false);\n };\n const triggerLabel = buildTriggerLabel(selected, options, allLabel);\n // Auto-enable search for long lists (e.g. many categories) unless overridden.\n const showSearch = searchable ?? options.length > 8;\n const anyExtraChecked = extraOptions?.some((option) => option.checked) ?? false;\n const clearDisabled = selected.size === 0 && !anyExtraChecked;\n\n const openMenu = (event: React.MouseEvent<HTMLElement>): void => {\n setAnchorEl(event.currentTarget);\n onOpenChange?.(true);\n };\n const triggerProps = { triggerLabel, open, onOpen: openMenu, testId };\n\n const renderTrigger = (): React.JSX.Element => {\n if (stacked) return <StackedTrigger label={label} {...triggerProps} />;\n if (layout === 'pill')\n return (\n <PillTrigger\n clearLabel={clearLabel}\n label={label}\n selectedCount={selected.size}\n onClear={onClear}\n {...triggerProps}\n />\n );\n return <InlineTrigger label={label} {...triggerProps} />;\n };\n\n return (\n <>\n {renderTrigger()}\n <MultiSelectMenu\n extraOptionsHeading={extraOptionsHeading} clearText={clearText} anchorEl={anchorEl}\n open={open}\n close={close}\n options={options}\n selected={selected}\n onToggle={onToggle}\n extraOptions={extraOptions}\n clearDisabled={clearDisabled}\n onClear={onClear}\n showSearch={showSearch}\n query={query}\n onQueryChange={setQuery}\n searchPlaceholder={searchPlaceholder}\n noResultsLabel={noResultsLabel}\n matchAnchorWidth={stacked}\n testId={testId}\n />\n </>\n );\n}\n\n/** Sticky search box at the top of the menu; keydowns don't reach the Menu's typeahead. */\nfunction MenuSearchField({\n query,\n onQueryChange,\n placeholder,\n testId,\n}: {\n query: string;\n onQueryChange: (value: string) => void;\n placeholder: string;\n testId?: string;\n}): React.JSX.Element {\n return (\n <Box\n sx={{ position: 'sticky', top: 0, zIndex: 1, bgcolor: 'background.paper', px: 1, py: 0.75 }}\n onKeyDown={(event) => event.stopPropagation()}\n >\n <TextField\n autoFocus\n size=\"small\"\n sx={fieldTextFieldStyles}\n fullWidth\n value={query}\n onChange={(event) => onQueryChange(event.target.value)}\n placeholder={placeholder}\n inputProps={{ 'aria-label': placeholder, 'data-testid': testId ? `${testId}-search` : undefined }}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon sx={{ fontSize: sxRem(16) }} />\n </InputAdornment>\n ),\n }}\n />\n </Box>\n );\n}\n\ninterface MultiSelectMenuProps<TValue extends string> {\n anchorEl: HTMLElement | null;\n open: boolean;\n close: () => void;\n options: MultiSelectOption<TValue>[];\n selected: ReadonlySet<TValue>;\n onToggle: (value: TValue, checked: boolean) => void;\n extraOptions?: MultiSelectExtraOption[];\n clearDisabled: boolean;\n onClear: () => void;\n showSearch: boolean;\n query: string;\n onQueryChange: (value: string) => void;\n searchPlaceholder: string;\n noResultsLabel: string;\n extraOptionsHeading: string;\n clearText: string;\n /** Match the menu width to the trigger and left-align it (stacked select). */\n matchAnchorWidth?: boolean;\n testId?: string;\n}\n\n/**\n * Menu placement. Default: anchored to the trigger's right (toolbar). When\n * `matchAnchorWidth` (stacked select), match the trigger width and left-align so\n * the menu sits flush under the full-width control.\n */\nfunction resolveMenuPlacement(\n matchAnchorWidth: boolean | undefined,\n anchorEl: HTMLElement | null,\n): { anchorWidth: number | undefined; align: 'left' | 'right' } {\n if (!matchAnchorWidth) return { anchorWidth: undefined, align: 'right' };\n return { anchorWidth: anchorEl?.offsetWidth, align: 'left' };\n}\n\n/** The (optional) search box + checkbox list + optional \"Options\" section + a \"Clear\" footer. */\nfunction MultiSelectMenu<TValue extends string>({\n anchorEl,\n open,\n close,\n options,\n selected,\n onToggle,\n extraOptions,\n extraOptionsHeading,\n clearText,\n clearDisabled,\n onClear,\n showSearch,\n query,\n onQueryChange,\n searchPlaceholder,\n noResultsLabel,\n matchAnchorWidth,\n testId,\n}: MultiSelectMenuProps<TValue>): React.JSX.Element {\n const trimmed = query.trim().toLowerCase();\n const visibleOptions = useMemo(\n () => (trimmed ? options.filter((option) => option.label.toLowerCase().includes(trimmed)) : options),\n [options, trimmed],\n );\n const { anchorWidth, align } = resolveMenuPlacement(matchAnchorWidth, anchorEl);\n return (\n <Menu\n anchorEl={anchorEl}\n open={open}\n onClose={close}\n anchorOrigin={{ vertical: 'bottom', horizontal: align }}\n transformOrigin={{ vertical: 'top', horizontal: align }}\n // Keep focus on the search box (don't let the Menu grab the first item),\n // and stop MUI's typeahead from swallowing keystrokes meant for the input.\n autoFocus={!showSearch}\n disableAutoFocusItem\n slotProps={{\n // Cap the height so a long list (e.g. many categories) scrolls instead\n // of running off-screen; the sticky search box stays pinned on top.\n paper: { sx: { minWidth: anchorWidth ?? sxRem(180), width: anchorWidth, maxHeight: sxRem(360) } },\n list: { sx: { pt: showSearch ? 0 : undefined, pb: 0 } },\n }}\n >\n {showSearch && (\n <MenuSearchField query={query} onQueryChange={onQueryChange} placeholder={searchPlaceholder} testId={testId} />\n )}\n {visibleOptions.length === 0 && showSearch ? (\n <MenuItem disabled data-testid={testId ? `${testId}-no-results` : undefined} sx={{ fontSize: sxRem(13) }}>\n {noResultsLabel}\n </MenuItem>\n ) : (\n visibleOptions.map((option) => (\n <CheckboxRow\n key={option.value}\n label={option.label}\n count={option.count}\n checked={selected.has(option.value)}\n onToggle={(next) => onToggle(option.value, next)}\n />\n ))\n )}\n {extraOptions && extraOptions.length > 0\n ? [\n <Divider key=\"extra-divider\" />,\n <ListSubheader key=\"extra-label\" sx={{ px: 1, py: 0.75, fontSize: sxRem(12), fontWeight: 600 }}>\n {extraOptionsHeading}\n </ListSubheader>,\n ...extraOptions.map((extra) => (\n <CheckboxRow key={extra.id} label={extra.label} checked={extra.checked} onToggle={(next) => extra.onCheckedChange(next)} />\n )),\n ]\n : null}\n <MenuClearFooter\n clearText={clearText} clearDisabled={clearDisabled} onClear={onClear}\n close={close} testId={testId}\n />\n </Menu>\n );\n}\n\n/** The bottom \"Clear\" footer that resets the selection and closes the menu. */\nfunction MenuClearFooter({\n clearText,\n clearDisabled,\n onClear,\n close,\n testId,\n}: {\n clearText: string;\n clearDisabled: boolean;\n onClear: () => void;\n close: () => void;\n testId?: string;\n}): React.JSX.Element {\n return (\n <Box\n sx={{\n // Pin to the bottom of the scroll viewport so it stays visible while the\n // options list scrolls (mirrors the sticky search box on top).\n position: 'sticky',\n bottom: 0,\n zIndex: 1,\n display: 'flex',\n justifyContent: 'flex-end',\n borderTop: 1,\n borderColor: 'divider',\n bgcolor: 'background.paper',\n px: 1,\n py: 0.75,\n }}\n >\n <Button\n variant=\"text\"\n size=\"small\"\n color=\"inherit\"\n data-testid={testId ? `${testId}-clear` : undefined}\n disabled={clearDisabled}\n onClick={() => {\n onClear();\n close();\n }}\n sx={{ minWidth: 0, px: 1, py: 0.25, fontSize: sxRem(12), fontWeight: 400, textTransform: 'none', color: 'text.secondary' }}\n >\n {clearText}\n </Button>\n </Box>\n );\n}\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/data-display/AlertDialog/AlertDialog.tsx"],"sourcesContent":["import Close from '@mui/icons-material/Close';\nimport Error from '@mui/icons-material/Error';\nimport Info from '@mui/icons-material/Info';\nimport Dialog from '@mui/material/Dialog/index.js';\nimport DialogContent from '@mui/material/DialogContent/index.js';\nimport DialogContentText from '@mui/material/DialogContentText/index.js';\nimport DialogTitle from '@mui/material/DialogTitle/index.js';\nimport IconButton from '@mui/material/IconButton/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { alpha, keyframes, styled } from '@mui/material/styles/index.js';\nimport type { Theme } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport { neutralTones } from '../../../tokens/ink';\n\nimport { AlertDialogFooter } from './AlertDialog.parts';\nimport type { AlertDialogProps } from './AlertDialog.types';\nimport { rem, rems } from '../../../tokens/relative';\n\n// Define pulse animation\nconst pulseAnimation = (theme: Theme) => keyframes`\n 0% {\n box-shadow: 0 0 0 0 currentColor;\n opacity: 1;\n }\n 70% {\n box-shadow: 0 0 0 ${rem(theme, 15)} currentColor;\n opacity: 0;\n }\n 100% {\n box-shadow: 0 0 0 0 currentColor;\n opacity: 0;\n }\n`;\n\nconst StyledDialog = styled(Dialog, {\n shouldForwardProp: (prop) => \n !['customVariant', 'glow', 'pulse'].includes(prop as string),\n})<{ \n customVariant?: string; \n glow?: boolean; \n pulse?: boolean; \n}>(({ theme, customVariant, glow, pulse }) => ({\n '& .MuiDialog-paper': {\n borderRadius: theme.spacing(2),\n transition: 'all 0.3s ease',\n position: 'relative',\n overflow: 'hidden',\n\n // Variant styles\n ...(customVariant === 'default' && {\n backgroundColor: theme.palette.background.paper,\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n }),\n\n // The error tint is LAYERED over the paper, not used as the background\n // itself: `alpha(error, 0.05)` alone leaves the panel 95% transparent, so\n // the page behind it showed straight through the question and its buttons.\n // A confirm nobody can read is the one dialog that must never be hard to\n // read. Same tint, opaque base.\n ...(customVariant === 'destructive' && {\n backgroundColor: theme.palette.background.paper,\n backgroundImage: `linear-gradient(${alpha(theme.palette.error.main, 0.05)}, ${alpha(\n theme.palette.error.main,\n 0.05,\n )})`,\n border: `1px solid ${alpha(theme.palette.error.main, 0.2)}`,\n }),\n\n ...(customVariant === 'glass' && {\n backgroundColor: alpha(theme.palette.background.paper, 0.1),\n backdropFilter: `blur(${rem(theme, 20)})`,\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n }),\n\n // Glow effect\n ...(glow && !pulse && {\n boxShadow: `0 0 ${rems(theme, 30, 10)} ${alpha(theme.palette.primary.main, 0.3)} !important`,\n filter: 'brightness(1.05)',\n }),\n\n // Pulse animation\n ...(pulse && !glow && {\n position: 'relative',\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n borderRadius: 'inherit',\n backgroundColor: theme.palette.primary.main,\n opacity: 0.1,\n animation: `${pulseAnimation(theme)} 2s infinite`,\n pointerEvents: 'none',\n zIndex: -1,\n },\n }),\n\n // Both glow and pulse\n ...(glow && pulse && {\n position: 'relative',\n boxShadow: `0 0 ${rems(theme, 30, 10)} ${alpha(theme.palette.primary.main, 0.3)} !important`,\n filter: 'brightness(1.05)',\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n borderRadius: 'inherit',\n backgroundColor: theme.palette.primary.main,\n opacity: 0.1,\n animation: `${pulseAnimation(theme)} 2s infinite`,\n pointerEvents: 'none',\n zIndex: -1,\n },\n }),\n },\n}));\n\nconst StyledDialogTitle = styled(DialogTitle)(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n gap: theme.spacing(1.5),\n paddingRight: theme.spacing(6), // Space for close button\n '& .MuiTypography-root': {\n fontWeight: 600,\n fontSize: rem(theme, 20),\n },\n}));\n\nconst StyledDialogContent = styled(DialogContent)(({ theme }) => ({\n paddingTop: theme.spacing(1),\n paddingBottom: theme.spacing(2),\n}));\n\nconst CloseButton = styled(IconButton)(({ theme }) => ({\n position: 'absolute',\n right: theme.spacing(1),\n top: theme.spacing(1),\n // 40px, not the small IconButton's 34: the floor a phone's tap needs (FUT-3269).\n width: rem(theme, 40),\n height: rem(theme, 40),\n color: neutralTones(theme).muted,\n}));\n\n/**\n * Per-variant lookups, hoisted out of the render function. They depend on\n * nothing but their arguments, so keeping them at module scope means they are\n * not rebuilt on every render — and it keeps the component's own branch count\n * inside the repo's complexity budget.\n */\nconst variantIcon = (\n variant: AlertDialogProps['variant'],\n icon: AlertDialogProps['icon'],\n): React.ReactNode => {\n if (icon) return icon;\n return variant === 'destructive' ? <Error color=\"error\" /> : <Info color=\"primary\" />;\n};\n\n/**\n * Ids for the two elements that give the dialog its accessible name and\n * description. Derived from the test id so they are stable and unique per\n * dialog without a generated id that would change on every render.\n */\nconst titleId = (dataTestId: string): string => `${dataTestId}-title`;\nconst descriptionId = (dataTestId: string): string => `${dataTestId}-description`;\n\n/**\n * `alertdialog`, not `dialog`.\n *\n * This component interrupts what the operator was doing and will not go away\n * until they answer — which is exactly the distinction the two roles draw, and\n * it is what makes a screen reader announce the message itself on open rather\n * than just the dialog's name. MUI hardcodes `role=\"dialog\"` on the paper, so\n * it has to be overridden through the paper slot.\n */\nconst ALERT_ROLE = 'alertdialog';\n\n/**\n * The paper slot's a11y props: the role, plus the name and description wired to\n * the elements that actually carry them, so the announcement is the QUESTION\n * rather than the word \"dialog\".\n *\n * Both references are conditional — pointing `aria-labelledby` at an element\n * that was never rendered leaves a dangling id, which screen readers treat as\n * no name at all, i.e. worse than omitting it.\n */\nfunction ariaSlotProps(\n dataTestId: string,\n title: AlertDialogProps['title'],\n description: AlertDialogProps['description'],\n): { paper: Record<string, string> } {\n return {\n paper: {\n role: ALERT_ROLE,\n ...(title ? { 'aria-labelledby': titleId(dataTestId) } : {}),\n ...(description ? { 'aria-describedby': descriptionId(dataTestId) } : {}),\n },\n };\n}\n\n/** Title row: the variant icon (unless explicitly suppressed with `null`) + the title. */\nfunction AlertDialogHeader({\n title,\n icon,\n variant,\n dataTestId,\n}: {\n title: AlertDialogProps['title'];\n icon: AlertDialogProps['icon'];\n variant: AlertDialogProps['variant'];\n dataTestId: string;\n}): React.ReactElement | null {\n if (!title) return null;\n return (\n <StyledDialogTitle id={titleId(dataTestId)} data-testid={`${dataTestId}-title`}>\n {icon !== null && (\n <span data-testid={`${dataTestId}-icon`}>{variantIcon(variant, icon)}</span>\n )}\n <Typography variant=\"h6\" component=\"span\">\n {title}\n </Typography>\n </StyledDialogTitle>\n );\n}\n\nexport const AlertDialog = React.forwardRef<HTMLDivElement, AlertDialogProps>(\n ({\n variant = 'default',\n glow = false,\n pulse = false,\n title,\n description,\n icon,\n cancelText,\n confirmText,\n onCancel,\n onConfirm,\n showCancel,\n loading,\n confirmDisabled,\n initialFocus,\n emphasis,\n children,\n onClose,\n 'data-testid': dataTestId = 'alert-dialog',\n ...props\n }, ref) => {\n const handleCancel = () => {\n onCancel?.();\n onClose?.({}, 'backdropClick');\n };\n\n return (\n <StyledDialog\n ref={ref}\n customVariant={variant}\n glow={glow}\n pulse={pulse}\n onClose={onClose}\n data-testid={dataTestId}\n slotProps={ariaSlotProps(dataTestId, title, description)}\n {...props}\n >\n <CloseButton\n aria-label=\"close\"\n onClick={handleCancel}\n size=\"small\"\n data-testid={`${dataTestId}-close-button`}\n >\n <Close />\n </CloseButton>\n\n <AlertDialogHeader title={title} icon={icon} variant={variant} dataTestId={dataTestId} />\n\n <StyledDialogContent data-testid={`${dataTestId}-content`}>\n {description && (\n <DialogContentText\n id={descriptionId(dataTestId)}\n data-testid={`${dataTestId}-description`}\n >\n {description}\n </DialogContentText>\n )}\n {children}\n </StyledDialogContent>\n\n <AlertDialogFooter\n variant={variant}\n cancelText={cancelText}\n confirmText={confirmText}\n showCancel={showCancel}\n loading={loading}\n confirmDisabled={confirmDisabled}\n initialFocus={initialFocus}\n emphasis={emphasis}\n onCancel={handleCancel}\n onConfirm={() => onConfirm?.()}\n dataTestId={dataTestId}\n />\n </StyledDialog>\n );\n }\n);\n\nAlertDialog.displayName = 'AlertDialog';"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/navigation/CommandPalette/CommandPalette.hooks.ts"],"sourcesContent":["import Fuse from 'fuse.js';\nimport React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport {\n createPaletteKeyHandler,\n filterCommands,\n groupByCategory,\n} from './CommandPalette.helpers';\nimport type { PaletteCommand } from './CommandPalette.types';\n\nconst RECENT_LIMIT = 5;\nconst FOCUS_DELAY_MS = 100;\n\n// The fuzzy index and the two derived lists it feeds.\nconst useCommandSearch = ({\n commands,\n searchQuery,\n showRecent,\n recentCommandIds,\n}: {\n commands: PaletteCommand[];\n searchQuery: string;\n showRecent?: boolean;\n recentCommandIds: string[];\n}) => {\n const fuse = useMemo(\n () =>\n new Fuse(commands, {\n keys: ['label', 'description', 'keywords', 'category'],\n threshold: 0.3,\n includeScore: true,\n }),\n [commands],\n );\n\n const filteredCommands = useMemo(\n () => filterCommands({ commands, searchQuery, fuse, showRecent, recentCommandIds }),\n [searchQuery, commands, fuse, showRecent, recentCommandIds],\n );\n\n const groupedCommands = useMemo(() => groupByCategory(filteredCommands), [filteredCommands]);\n\n return { filteredCommands, groupedCommands };\n};\n\n// Running a command records it as recent, fires the caller's callback and closes\n// the palette.\nconst useExecuteCommand = ({\n setRecentCommandIds,\n onCommandExecute,\n onClose,\n}: {\n setRecentCommandIds: React.Dispatch<React.SetStateAction<string[]>>;\n onCommandExecute?: (command: PaletteCommand) => void;\n onClose: () => void;\n}) =>\n useCallback(\n (command: PaletteCommand) => {\n setRecentCommandIds((prev) =>\n [command.id, ...prev.filter((id) => id !== command.id)].slice(0, RECENT_LIMIT),\n );\n\n command.action();\n onCommandExecute?.(command);\n onClose();\n },\n [setRecentCommandIds, onCommandExecute, onClose],\n );\n\n// The highlight resets on every new query; opening the palette focuses the input\n// and closing it clears the query.\nconst useSelectionReset = ({\n open,\n searchQuery,\n searchInputRef,\n setSearchQuery,\n setSelectedIndex,\n}: {\n open: boolean;\n searchQuery: string;\n searchInputRef: React.RefObject<HTMLInputElement | null>;\n setSearchQuery: React.Dispatch<React.SetStateAction<string>>;\n setSelectedIndex: React.Dispatch<React.SetStateAction<number>>;\n}) => {\n useEffect(() => {\n setSelectedIndex(0);\n }, [searchQuery, setSelectedIndex]);\n\n useEffect(() => {\n if (open) {\n window.setTimeout(() => {\n searchInputRef.current?.focus();\n }, FOCUS_DELAY_MS);\n return;\n }\n\n setSearchQuery('');\n setSelectedIndex(0);\n }, [open, searchInputRef, setSearchQuery, setSelectedIndex]);\n};\n\n// Global key handling while the palette is open, plus keeping the highlighted\n// row scrolled into view.\nconst usePaletteKeyboard = ({\n open,\n selectedIndex,\n filteredCommands,\n listRef,\n setSelectedIndex,\n executeCommand,\n onClose,\n}: {\n open: boolean;\n selectedIndex: number;\n filteredCommands: PaletteCommand[];\n listRef: React.RefObject<globalThis.HTMLUListElement | null>;\n setSelectedIndex: React.Dispatch<React.SetStateAction<number>>;\n executeCommand: (command: PaletteCommand) => void;\n onClose: () => void;\n}) => {\n useEffect(() => {\n if (!open) return;\n\n const handleKeyDown = createPaletteKeyHandler({\n commandCount: filteredCommands.length,\n selectedCommand: filteredCommands[selectedIndex],\n setSelectedIndex,\n executeCommand,\n onClose,\n });\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [open, selectedIndex, filteredCommands, setSelectedIndex, executeCommand, onClose]);\n\n useEffect(() => {\n const selectedElement = listRef.current?.querySelector(\n `[data-index=\"${selectedIndex}\"]`,\n ) as HTMLElement | null;\n\n selectedElement?.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n }, [selectedIndex, listRef]);\n};\n\n// All of the palette's state: the query, the highlighted row, the derived lists\n// and the effects that keep them in sync. Grouped here so the exported component\n// is prop defaults plus markup.\nexport const useCommandPalette = ({\n open,\n commands,\n showRecent,\n recentCommands,\n onCommandExecute,\n onClose,\n}: {\n open: boolean;\n commands: PaletteCommand[];\n showRecent?: boolean;\n recentCommands: string[];\n onCommandExecute?: (command: PaletteCommand) => void;\n onClose: () => void;\n}) => {\n const [searchQuery, setSearchQuery] = useState('');\n const [selectedIndex, setSelectedIndex] = useState(0);\n const [recentCommandIds, setRecentCommandIds] = useState<string[]>(recentCommands);\n const searchInputRef = useRef<HTMLInputElement>(null);\n const listRef = useRef<globalThis.HTMLUListElement>(null);\n\n const { filteredCommands, groupedCommands } = useCommandSearch({\n commands,\n searchQuery,\n showRecent,\n recentCommandIds,\n });\n\n const executeCommand = useExecuteCommand({ setRecentCommandIds, onCommandExecute, onClose });\n\n useSelectionReset({ open, searchQuery, searchInputRef, setSearchQuery, setSelectedIndex });\n\n usePaletteKeyboard({\n open,\n selectedIndex,\n filteredCommands,\n listRef,\n setSelectedIndex,\n executeCommand,\n onClose,\n });\n\n return {\n searchQuery,\n setSearchQuery,\n selectedIndex,\n setSelectedIndex,\n searchInputRef,\n listRef,\n filteredCommands,\n groupedCommands,\n executeCommand,\n recentCommandIds,\n };\n};\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/utility/WorkflowStep/WorkflowStep.parts.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport type { CSSObject, Theme } from '@mui/material/styles/index.js';\nimport { styled } from '@mui/material/styles/index.js';\nimport React, { forwardRef, useCallback } from 'react';\n\nimport type { StepColors } from './WorkflowStep.helpers';\nimport { indicatorSizeFor, stepColors, stepPalette } from './WorkflowStep.helpers';\nimport type {\n StepConnectorProps,\n StepContentProps,\n StepIndicatorProps,\n WorkflowStepProps,\n} from './WorkflowStep.types';\nimport { neutralTones } from '../../../tokens/ink';\nimport { rem } from '../../../tokens/relative';\n\n// `outlined` shows the surface through a coloured rim; the other three fill it and\n// differ only in what border they keep.\nconst indicatorVariantStyles = (\n theme: Theme,\n variant: WorkflowStepProps['variant'],\n { backgroundColor, borderColor, textColor }: StepColors,\n): CSSObject => {\n if (variant === 'outlined') {\n return {\n border: `${rem(theme, 2)} solid ${borderColor}`,\n backgroundColor: theme.palette.background.paper,\n };\n }\n\n const filled = { backgroundColor, color: textColor };\n\n switch (variant) {\n case 'filled':\n return filled;\n case 'minimal':\n return { ...filled, border: 'none' };\n case 'default':\n return { ...filled, border: `1px solid ${borderColor}` };\n default:\n return {};\n }\n};\n\nconst StepItem = styled(Box, {\n shouldForwardProp: (prop) => !['orientation', 'isLast'].includes(prop as string),\n})<{\n orientation: WorkflowStepProps['orientation'];\n isLast: boolean;\n}>(({ orientation, isLast }) => ({\n display: 'flex',\n flexDirection: orientation === 'vertical' ? 'column' : 'row',\n alignItems: orientation === 'vertical' ? 'flex-start' : 'center',\n flex: orientation === 'horizontal' && !isLast ? 1 : 'none',\n position: 'relative',\n minWidth: 0, // Allow content to shrink\n}));\n\nconst StepIndicator = styled(Box, {\n shouldForwardProp: (prop) => !['size', 'variant', 'color', 'isActive', 'isCompleted', 'isError', 'interactive', 'animated', 'disabled'].includes(prop as string),\n})<{\n size: WorkflowStepProps['size'];\n variant: WorkflowStepProps['variant'];\n color: WorkflowStepProps['color'];\n isActive: boolean;\n isCompleted: boolean;\n isError: boolean;\n interactive: boolean;\n animated: boolean;\n disabled: boolean;\n}>(({ theme, size, variant, color, isActive, isCompleted, isError, interactive, animated, disabled }) => {\n const indicatorSize = indicatorSizeFor(size);\n const palette = stepPalette(theme, color);\n const { backgroundColor, borderColor, textColor } = stepColors(theme, palette, {\n isActive,\n isCompleted,\n isError,\n variant,\n });\n\n return {\n width: rem(theme, indicatorSize),\n height: rem(theme, indicatorSize),\n borderRadius: '50%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: rem(theme, 12),\n fontWeight: theme.typography.fontWeightMedium,\n cursor: interactive && !disabled ? 'pointer' : 'default',\n transition: animated\n ? theme.transitions.create(['background-color', 'border-color', 'transform'], {\n duration: theme.transitions.duration.short,\n })\n : 'none',\n flexShrink: 0,\n\n ...indicatorVariantStyles(theme, variant, { backgroundColor, borderColor, textColor }),\n\n // Interactive states\n ...(interactive && !disabled && {\n '&:hover': {\n transform: 'scale(1.1)',\n boxShadow: theme.shadows[2],\n },\n '&:focus-visible': {\n outline: `${rem(theme, 2)} solid ${palette.main}`,\n outlineOffset: rem(theme, 2),\n },\n }),\n\n // Disabled state\n ...(disabled && {\n opacity: 0.5,\n cursor: 'not-allowed',\n }),\n };\n});\n\nconst StepContent = styled(Box, {\n shouldForwardProp: (prop) => !['orientation', 'interactive', 'disabled'].includes(prop as string),\n})<{\n orientation: WorkflowStepProps['orientation'];\n interactive: boolean;\n disabled: boolean;\n}>(({ theme, orientation, disabled }) => ({\n display: 'flex',\n flexDirection: 'column',\n alignItems: orientation === 'vertical' ? 'flex-start' : 'center',\n textAlign: orientation === 'vertical' ? 'left' : 'center',\n marginTop: orientation === 'vertical' ? theme.spacing(1) : theme.spacing(0.5),\n marginLeft: orientation === 'horizontal' ? theme.spacing(1) : 0,\n // Inert (FUT-2773): the content block has no click handling of its own —\n // the indicator is the step's one interactive element — so its cursor\n // never claims to be clickable, whatever `interactive` says.\n cursor: 'default',\n minWidth: 0,\n flex: 1,\n\n '& .step-title': {\n fontSize: rem(theme, 14),\n fontWeight: theme.typography.fontWeightMedium,\n color: theme.palette.text.primary,\n marginBottom: theme.spacing(0.5),\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n maxWidth: '100%',\n },\n\n '& .step-description': {\n fontSize: rem(theme, 12),\n color: theme.palette.text.secondary,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n maxWidth: '100%',\n },\n\n ...(disabled && {\n opacity: 0.5,\n }),\n}));\n\nconst StepConnector = styled(Box, {\n shouldForwardProp: (prop) => !['orientation', 'isCompleted', 'color', 'variant', 'animated'].includes(prop as string),\n})<{\n orientation: WorkflowStepProps['orientation'];\n isCompleted: boolean;\n color: WorkflowStepProps['color'];\n variant: WorkflowStepProps['variant'];\n animated: boolean;\n}>(({ theme, orientation, isCompleted, color, variant, animated }) => {\n const connectorColor = isCompleted ? stepPalette(theme, color).main : neutralTones(theme).track;\n\n return {\n flex: 1,\n position: 'relative',\n\n ...(orientation === 'horizontal' && {\n height: rem(theme, 2),\n backgroundColor: connectorColor,\n margin: `0 ${theme.spacing(1)}`,\n minWidth: theme.spacing(2),\n }),\n\n ...(orientation === 'vertical' && {\n width: rem(theme, 2),\n backgroundColor: connectorColor,\n minHeight: theme.spacing(3),\n marginLeft: theme.spacing(2),\n position: 'absolute',\n left: '50%',\n transform: 'translateX(-50%)',\n top: '100%',\n }),\n\n transition: animated\n ? theme.transitions.create('background-color', {\n duration: theme.transitions.duration.short,\n })\n : 'none',\n\n ...(variant === 'minimal' && {\n opacity: 0.6,\n }),\n };\n});\n\n/**\n * Individual step indicator component\n */\nconst StepIndicatorComponent = forwardRef<HTMLDivElement, StepIndicatorProps>(({\n step,\n index,\n isActive,\n isCompleted,\n isError,\n variant,\n color,\n size,\n showNumbers,\n showIcons,\n completedIcon,\n errorIcon,\n interactive,\n animated,\n disabled,\n onClick,\n 'data-testid': dataTestId,\n}, ref) => {\n const isDisabled = Boolean(disabled || step.disabled);\n\n const handleClick = useCallback(() => {\n if (interactive && !isDisabled && onClick) {\n onClick(index, step);\n }\n }, [interactive, isDisabled, onClick, index, step]);\n\n const handleKeyDown = useCallback((event: React.KeyboardEvent) => {\n if (interactive && !isDisabled && (event.key === 'Enter' || event.key === ' ')) {\n event.preventDefault();\n if (onClick) {\n onClick(index, step);\n }\n }\n }, [interactive, isDisabled, onClick, index, step]);\n\n const renderIndicatorContent = () => {\n if (isError && errorIcon) {\n return errorIcon;\n }\n if (isCompleted && completedIcon) {\n return completedIcon;\n }\n if (showIcons && step.icon) {\n return step.icon;\n }\n if (showNumbers) {\n return index + 1;\n }\n return null;\n };\n\n return (\n <StepIndicator\n ref={ref}\n size={size}\n variant={variant}\n color={color}\n isActive={isActive}\n isCompleted={isCompleted}\n isError={isError}\n interactive={interactive}\n animated={animated}\n disabled={isDisabled}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n role={interactive ? 'button' : undefined}\n tabIndex={!interactive ? undefined : isDisabled ? -1 : 0}\n aria-label={`Step ${index + 1}: ${step.title}`}\n aria-current={isActive ? 'step' : undefined}\n aria-disabled={interactive && isDisabled ? true : undefined}\n data-testid={dataTestId}\n >\n {renderIndicatorContent()}\n </StepIndicator>\n );\n});\n\nStepIndicatorComponent.displayName = 'StepIndicator';\n\n/**\n * Step connector component\n */\nconst StepConnectorComponent = forwardRef<HTMLDivElement, StepConnectorProps>(({\n isCompleted,\n orientation,\n variant,\n color,\n // Defaults to the connector's own prior, unconditional behaviour (FUT-2773):\n // an external caller building a `StepConnectorProps` value that predates\n // this field keeps the transition it always had.\n animated = true,\n 'data-testid': dataTestId,\n}, ref) => (\n <StepConnector\n ref={ref}\n orientation={orientation}\n isCompleted={isCompleted}\n color={color}\n variant={variant}\n animated={animated}\n data-testid={dataTestId}\n />\n));\n\nStepConnectorComponent.displayName = 'StepConnector';\n\n/**\n * Step content component.\n *\n * Inert on purpose (FUT-2773): the indicator is the step's one focusable\n * `role=\"button\"` element — it already carries `aria-label=\"Step N: <title>\"`\n * — so the title/description block gets no `role`, `tabIndex`, click or key\n * handling of its own. Two independently-interactive elements per step gave\n * assistive tech two tab stops for what a caller means as a single control.\n */\nconst StepContentComponent = forwardRef<HTMLDivElement, StepContentProps>(({\n step,\n orientation,\n interactive,\n disabled,\n 'data-testid': dataTestId,\n}, ref) => (\n <StepContent\n ref={ref}\n orientation={orientation}\n interactive={interactive}\n disabled={Boolean(disabled || step.disabled)}\n data-testid={dataTestId}\n >\n <div className=\"step-title\">{step.title}</div>\n {step.description && (\n <div className=\"step-description\">{step.description}</div>\n )}\n </StepContent>\n));\n\nStepContentComponent.displayName = 'StepContent';\n\n/**\n * A plain wrapper around the styled row. Exporting the styled component itself\n * trips TS2742 — its inferred type names a pnpm-internal @mui/system path.\n */\nexport const StepItemRow: React.FC<{\n orientation: WorkflowStepProps['orientation'];\n isLast: boolean;\n children: React.ReactNode;\n}> = ({ orientation, isLast, children }) => (\n <StepItem orientation={orientation} isLast={isLast}>\n {children}\n </StepItem>\n);\n\nexport { StepConnectorComponent, StepContentComponent, StepIndicatorComponent };\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/navigation/NavigationMenu/NavigationMenu.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport Paper from '@mui/material/Paper/index.js';\nimport { useTheme } from '@mui/material/styles/index.js';\nimport React, { useState } from 'react';\n\nimport { NavigationMegaSection } from './NavigationMegaSection';\nimport { NavigationStandardBody } from './NavigationStandardBody';\nimport {\n LogoBar,\n NavigationShell } from './NavigationMenu.shell';\nimport type { NavigationMenuItem,NavigationMenuProps } from './NavigationMenu.types';\nimport { rem } from '../../../tokens/relative';\n\n\n\n\n\n\n// The mega-menu layout is a different shape from the list-based variants: a\n// grid of titled sections rather than a single column.\n// onItemClick and dataTestId are not on NavigationMenuProps; they arrive through\n// the rest props and are forwarded to the item renderer, so they are named here.\ntype MegaMenuLayoutProps = NavigationMenuProps & {\n collapsed: boolean;\n onItemClick?: (item: NavigationMenuItem) => void;\n dataTestId?: string;\n};\n\nconst MegaMenuLayout = React.forwardRef<HTMLDivElement, MegaMenuLayoutProps>(\n (\n {\n variant,\n logo,\n items,\n size,\n minimal,\n dataTestId: _dataTestId,\n className,\n maxWidth,\n style,\n ...props\n },\n ref,\n ) => {\n const theme = useTheme();\n // An inline style reads a number as px: a number here is design px.\n const cap = typeof maxWidth === 'number' ? rem(theme, maxWidth) : maxWidth;\n return (\n <NavigationShell\n ref={ref}\n variant={variant}\n minimal={minimal}\n className={className}\n style={{ maxWidth: cap, ...style }}\n {...props}\n >\n <Paper\n elevation={minimal ? 0 : 1}\n sx={{\n width: '100%',\n overflow: 'hidden',\n background: minimal ? 'transparent' : undefined }}\n >\n {logo && <LogoBar>{logo}</LogoBar>}\n <Box\n sx={{\n display: 'grid',\n gridTemplateColumns: `repeat(auto-fit, minmax(${rem(theme, 280)}, 1fr))`,\n gap: 3,\n p: 3 }}\n >\n {items.map((section, sectionIndex) => (\n <NavigationMegaSection\n key={section.id}\n section={section}\n sectionIndex={sectionIndex}\n variant={variant}\n size={size}\n minimal={minimal}\n />\n ))}\n </Box>\n </Paper>\n </NavigationShell>\n );\n },\n);\n\nMegaMenuLayout.displayName = 'MegaMenuLayout';\n\ntype NavigationDefaultedKeys = 'variant' | 'size' | 'minimal' | 'collapsible' | 'showDividers';\n\ntype ResolvedNavigationProps = NavigationMenuProps &\n Required<Pick<NavigationMenuProps, NavigationDefaultedKeys>>;\n\nconst NAVIGATION_DEFAULTS: Pick<NavigationMenuProps, NavigationDefaultedKeys> = {\n variant: 'vertical',\n size: 'md',\n minimal: false,\n collapsible: false,\n showDividers: false };\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 five\n// branches into the component's own complexity budget.\nconst resolveProps = (props: NavigationMenuProps): ResolvedNavigationProps =>\n ({\n ...NAVIGATION_DEFAULTS,\n ...(Object.fromEntries(\n Object.entries(props).filter(([, value]) => value !== undefined),\n ) as Partial<NavigationMenuProps>) }) as ResolvedNavigationProps;\n\nexport const NavigationMenu = React.forwardRef<HTMLDivElement, NavigationMenuProps>(\n (componentProps, ref) => {\n const {\n variant,\n items,\n size,\n minimal,\n collapsible,\n collapsed: controlledCollapsed,\n onCollapseChange,\n logo,\n endContent,\n maxWidth,\n showDividers,\n className,\n style,\n ...props\n } = resolveProps(componentProps);\n\n const [internalCollapsed, setInternalCollapsed] = useState(false);\n\n // Controlled when the caller passes `collapsed`, uncontrolled otherwise.\n const isControlled = controlledCollapsed !== undefined;\n const collapsed = isControlled ? controlledCollapsed : internalCollapsed;\n\n const handleCollapseToggle = () => {\n if (!isControlled) setInternalCollapsed(!collapsed);\n onCollapseChange?.(!collapsed);\n };\n\n if (variant === 'mega') {\n return (\n <MegaMenuLayout\n ref={ref}\n variant={variant}\n collapsed={collapsed}\n logo={logo}\n items={items}\n size={size}\n minimal={minimal}\n className={className}\n maxWidth={maxWidth}\n style={style}\n {...props}\n />\n );\n }\n\n return (\n <NavigationShell\n ref={ref}\n variant={variant}\n minimal={minimal}\n collapsed={collapsed}\n className={className}\n style={style}\n {...props}\n >\n <NavigationStandardBody\n variant={variant}\n size={size}\n minimal={minimal}\n collapsed={collapsed}\n collapsible={collapsible}\n showDividers={showDividers}\n items={items}\n logo={logo}\n endContent={endContent}\n onCollapseToggle={handleCollapseToggle}\n />\n </NavigationShell>\n );\n },\n);\n\nNavigationMenu.displayName = 'NavigationMenu';\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/layout/SettingsLayout/SettingsLayout.rail.tsx"],"sourcesContent":["'use client';\n\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport SearchIcon from '@mui/icons-material/Search';\nimport Box from '@mui/material/Box/index.js';\nimport Button from '@mui/material/Button/index.js';\nimport InputAdornment from '@mui/material/InputAdornment/index.js';\nimport TextField from '@mui/material/TextField/index.js';\nimport type { Theme } from '@mui/material/styles/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport React from 'react';\n\nimport { SettingsRailGroup, type RailShape } from './SettingsLayout.items';\nimport { atLeastRail, displayAcrossRail, railCardWidth, railWidth, TOUCH_TARGET } from './SettingsLayout.styles';\nimport { rem, sxRem } from '../../../tokens/relative';\nimport type {\n SettingsEmptySearchAction,\n SettingsLayoutProps,\n SettingsNavGroup,\n SettingsRailBreakpoint,\n SettingsRailVariant,\n} from './SettingsLayout.types';\n\ninterface RailToggleProps {\n title?: React.ReactNode;\n activeLabel?: string;\n open: boolean;\n onToggle: () => void;\n breakpoint: SettingsRailBreakpoint;\n testIdPrefix: string;\n}\n\n/**\n * `switcher`-only collapse control: shows the current section (a compact\n * switcher) so the panel content stays at the top of the screen. Hidden once the\n * rail has its own column.\n */\nfunction SettingsRailToggle({\n title,\n activeLabel,\n open,\n onToggle,\n breakpoint,\n testIdPrefix,\n}: RailToggleProps): React.JSX.Element {\n return (\n <Box\n component=\"button\"\n type=\"button\"\n onClick={onToggle}\n aria-expanded={open}\n aria-label={typeof title === 'string' ? title : 'Settings'}\n data-testid={`${testIdPrefix}-toggle`}\n sx={(theme) => ({\n ...displayAcrossRail(theme, breakpoint, 'flex', 'none'),\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: 1,\n width: '100%',\n minHeight: rem(theme, TOUCH_TARGET),\n px: 1.5,\n py: 1,\n mb: 1,\n textAlign: 'left',\n cursor: 'pointer',\n color: 'text.primary',\n background: 'transparent',\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: 1.5,\n })}\n >\n <Box sx={{ minWidth: 0 }}>\n {title ? (\n <Typography variant=\"caption\" sx={{ display: 'block', color: 'text.secondary' }}>\n {title}\n </Typography>\n ) : null}\n <Typography variant=\"body2\" noWrap sx={{ fontWeight: 600 }}>\n {activeLabel ?? ''}\n </Typography>\n </Box>\n <ExpandMoreIcon\n fontSize=\"small\"\n sx={{\n flex: '0 0 auto',\n color: 'text.secondary',\n transition: 'transform 150ms ease',\n transform: open ? 'rotate(180deg)' : 'none',\n '@media (prefers-reduced-motion: reduce)': { transition: 'none' },\n }}\n />\n </Box>\n );\n}\n\n/** The empty-search state, with the way out of it rendered inside. */\nfunction SettingsSearchEmpty({\n label,\n action,\n onClear,\n testIdPrefix,\n}: {\n label: React.ReactNode;\n action?: SettingsEmptySearchAction;\n onClear: () => void;\n testIdPrefix: string;\n}): React.JSX.Element {\n return (\n <Box data-testid={`${testIdPrefix}-empty`} sx={{ px: 1, py: 2 }}>\n <Typography variant=\"body2\" color=\"text.secondary\">\n {label}\n </Typography>\n {action ? (\n <Button\n size=\"small\"\n variant=\"outlined\"\n onClick={() => {\n onClear();\n action.onClear?.();\n }}\n data-testid={`${testIdPrefix}-empty-action`}\n sx={{ mt: 1.5, minHeight: sxRem(TOUCH_TARGET) }}\n >\n {action.label}\n </Button>\n ) : null}\n </Box>\n );\n}\n\nexport interface RailBodyProps extends RailShape {\n navOpen: boolean;\n query: string;\n onQueryChange: (value: string) => void;\n searchPlaceholder: string;\n emptySearchLabel: React.ReactNode;\n emptySearchAction?: SettingsEmptySearchAction;\n filteredGroups: SettingsNavGroup[];\n activeItemId?: string;\n linkComponent?: SettingsLayoutProps['linkComponent'];\n onSelectItem?: (id: string) => void;\n onNavigate?: () => void;\n testIdPrefix: string;\n /** Whether the search field is drawn (`SettingsLayoutProps.searchable`). */\n searchable: boolean;\n}\n\n/** The rail's search field. */\nfunction RailSearch({\n query,\n onQueryChange,\n searchPlaceholder,\n testIdPrefix,\n}: Pick<RailBodyProps, 'query' | 'onQueryChange' | 'searchPlaceholder' | 'testIdPrefix'>): React.JSX.Element {\n return (\n <TextField\n value={query}\n onChange={(event) => onQueryChange(event.target.value)}\n placeholder={searchPlaceholder}\n size=\"small\"\n fullWidth\n aria-label={searchPlaceholder}\n data-testid={`${testIdPrefix}-search`}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon fontSize=\"small\" sx={{ color: 'text.secondary' }} />\n </InputAdornment>\n ),\n }}\n sx={{ mb: 2 }}\n />\n );\n}\n\n/** The rail body: the search field when the area has one, then the groups. */\nfunction SettingsRailBody({\n navOpen,\n query,\n onQueryChange,\n searchPlaceholder,\n emptySearchLabel,\n emptySearchAction,\n filteredGroups,\n activeItemId,\n linkComponent,\n onSelectItem,\n onNavigate,\n testIdPrefix,\n searchable,\n ...shape\n}: RailBodyProps): React.JSX.Element {\n // `drilldown` has no disclosure to be closed behind: below the breakpoint the\n // body is the page, above it the rail. Only `switcher` hides it.\n const hidden = navOpen ? 'block' : 'none';\n return (\n <Box\n data-testid={`${testIdPrefix}-rail-body`}\n sx={(theme) =>\n shape.variant === 'drilldown'\n ? { display: 'block' }\n : displayAcrossRail(theme, shape.breakpoint, hidden, 'block')\n }\n >\n {searchable ? (\n <RailSearch\n query={query}\n onQueryChange={onQueryChange}\n searchPlaceholder={searchPlaceholder}\n testIdPrefix={testIdPrefix}\n />\n ) : null}\n {filteredGroups.length === 0 ? (\n <SettingsSearchEmpty\n label={emptySearchLabel}\n action={emptySearchAction}\n onClear={() => onQueryChange('')}\n testIdPrefix={testIdPrefix}\n />\n ) : (\n filteredGroups.map((group) => (\n <SettingsRailGroup\n key={group.id}\n group={group}\n activeItemId={activeItemId}\n linkComponent={linkComponent}\n onSelectItem={onSelectItem}\n onNavigate={onNavigate}\n testIdPrefix={testIdPrefix}\n {...shape}\n />\n ))\n )}\n </Box>\n );\n}\n\n/** Props for {@link SettingsRail}: the rail body's inputs plus the mobile chrome. */\nexport type SettingsRailProps = RailBodyProps & {\n title?: React.ReactNode;\n activeLabel?: string;\n onToggleNav: () => void;\n /** Scroll inside the rail rather than with the page. See `fillHeight`. */\n fillHeight?: boolean;\n /** How the rail's own column is drawn. See `SettingsLayoutProps.railVariant`. */\n railVariant?: SettingsRailVariant;\n};\n\n/** The rail's own column, as the variant draws it: ruled off, or a card. */\nfunction railColumnSx(theme: Theme, railVariant: SettingsRailVariant): Record<string, unknown> {\n if (railVariant === 'card') {\n const width = railCardWidth(theme);\n return {\n flex: `0 0 ${width}`,\n width,\n alignSelf: 'flex-start',\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: sxRem(14),\n bgcolor: 'background.paper',\n px: sxRem(12),\n py: sxRem(16),\n };\n }\n const width = railWidth(theme);\n return { flex: `0 0 ${width}`, width, borderRight: `1px solid ${theme.palette.divider}`, pr: sxRem(16) };\n}\n\n/** The navigation column: title, the `switcher`'s disclosure, and the body. */\nexport function SettingsRail({\n title,\n activeLabel,\n navOpen,\n onToggleNav,\n testIdPrefix,\n fillHeight = false,\n railVariant = 'divided',\n ...bodyProps\n}: SettingsRailProps): React.JSX.Element {\n const { variant, breakpoint, atIndex } = bodyProps;\n // In `drilldown` the rail is the index's list below the breakpoint and the\n // left column above it — so inside a section it steps aside for the chip\n // strip. It is `display: none`, never unmounted: the two navigation forms\n // both stay in the DOM at every width, which is what makes \"the narrow width\n // offers what the wide one offers\" true by construction instead of by review.\n const hiddenWhileInSection = variant === 'drilldown' && !atIndex;\n\n return (\n <Box\n component=\"nav\"\n aria-label={typeof title === 'string' ? title : 'Settings'}\n data-testid={`${testIdPrefix}-rail`}\n data-rail-variant={railVariant}\n sx={(theme) => ({\n display: hiddenWhileInSection ? 'none' : 'block',\n flex: '0 0 auto',\n width: '100%',\n [atLeastRail(theme, breakpoint)]: {\n display: 'block',\n ...railColumnSx(theme, railVariant),\n // Its own scrollbar, so a settings area with twenty categories does\n // not make the thing you NAVIGATE with scroll away while you read the\n // panel. `minHeight: 0` is the load-bearing half: without it a flex\n // child refuses to shrink below its content and `overflow` never\n // engages.\n ...(fillHeight\n ? { height: '100%', minHeight: 0, overflowY: 'auto' as const, overscrollBehavior: 'contain' as const }\n : {}),\n },\n })}\n >\n {title ? (\n <Typography\n variant=\"h6\"\n data-testid={`${testIdPrefix}-title`}\n sx={(theme) => ({\n ...(variant === 'drilldown'\n ? { display: 'block' }\n : displayAcrossRail(theme, breakpoint, 'none', 'block')),\n fontWeight: 700,\n mb: 1.5,\n })}\n >\n {title}\n </Typography>\n ) : null}\n {variant === 'switcher' ? (\n <SettingsRailToggle\n title={title}\n activeLabel={activeLabel}\n open={navOpen}\n onToggle={onToggleNav}\n breakpoint={breakpoint}\n testIdPrefix={testIdPrefix}\n />\n ) : null}\n <SettingsRailBody\n navOpen={navOpen}\n testIdPrefix={testIdPrefix}\n card={railVariant === 'card'}\n {...bodyProps}\n />\n </Box>\n );\n}\n"],"mappings":"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","names":["width"]}
@@ -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, rems } 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: rems(theme, 2, 4) },\n sm: { fontSize: rem(theme, 13), padding: rems(theme, 3, 6) },\n md: { fontSize: rem(theme, 14), padding: rems(theme, 4, 8) },\n lg: { fontSize: rem(theme, 16), padding: rems(theme, 6, 12) },\n };\n\n const blockSizeMap = {\n xs: { fontSize: rem(theme, 12), padding: rems(theme, 8, 12) },\n sm: { fontSize: rem(theme, 13), padding: rems(theme, 12, 16) },\n md: { fontSize: rem(theme, 14), padding: rems(theme, 16, 20) },\n lg: { fontSize: rem(theme, 16), padding: rems(theme, 20, 24) },\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: rem(theme, 60),\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: `${rem(theme, 4)} 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: rem(theme, 60),\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: rem(theme, 32),\n height: rem(theme, 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(${rem(theme, 8)})` : '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: rems(theme, 2, 8),\n borderRadius: theme.shape.borderRadius / 2,\n backdropFilter: theme.palette.mode === 'dark' ? `blur(${rem(theme, 8)})` : '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/form/AddressAutocomplete/AddressAutocomplete.tsx"],"sourcesContent":["import LocationIcon from '@mui/icons-material/LocationOn';\nimport type { FC } from 'react';\nimport React from 'react';\n\nimport { resolveAddressProps } from './AddressAutocomplete.helpers';\nimport { useAddressAutocomplete } from './AddressAutocomplete.hooks';\nimport type { AddressAutocompleteProps } from './AddressAutocomplete.types';\nimport { AddressAutocompleteField } from './AddressAutocompleteField';\nimport { AddressFallbackField } from './AddressFallbackField';\n\nexport const AddressAutocomplete: FC<AddressAutocompleteProps> = (componentProps) => {\n const resolved = resolveAddressProps(componentProps);\n const { defaultValue, googleMapsApiKey, restrictions, onSelect, icon = <LocationIcon /> } =\n resolved;\n const fieldProps = { ...resolved, icon };\n\n const state = useAddressAutocomplete({\n defaultValue,\n googleMapsApiKey,\n restrictions,\n onSelect,\n });\n\n // Until the API answers there is nothing to autocomplete against, so the field\n // stands in disabled — spinning, or explaining why it never loaded.\n if (!state.isLoaded || state.mapsError) {\n return <AddressFallbackField {...fieldProps} mapsError={state.mapsError} />;\n }\n\n return <AddressAutocompleteField {...fieldProps} {...state} />;\n};\n\nexport default AddressAutocomplete;\n"],"mappings":";;;;;;;;;;;;;;AAAA,OAAO,kBAAkB;AAYgD;AAFlE,IAAM,sBAAoD,CAAC,mBAAmB;AACnF,QAAM,WAAW,oBAAoB,cAAc;AACnD,QAAM,EAAE,cAAc,kBAAkB,cAAc,UAAU,OAAO,oBAAC,gBAAa,EAAG,IACtF;AACF,QAAM,aAAa,EAAE,GAAG,UAAU,KAAK;AAEvC,QAAM,QAAQ,uBAAuB;AAAA,IACnC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAID,MAAI,CAAC,MAAM,YAAY,MAAM,WAAW;AACtC,WAAO,oBAAC,wBAAsB,GAAG,YAAY,WAAW,MAAM,WAAW;AAAA,EAC3E;AAEA,SAAO,oBAAC,4BAA0B,GAAG,YAAa,GAAG,OAAO;AAC9D;AAEA,IAAO,8BAAQ;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/en-US.feedback.ts"],"sourcesContent":["/**\n * The en-US pack for the feedback family. Split the same way\n * `pt-BR.feedback.ts` is — see `en-US.ts` for why.\n */\nimport type {\n ChromeCopy,\n NotificationUnblockCopy,\n TutorialCopy,\n} from './copy';\n\nexport const EN_US_TUTORIAL_COPY: TutorialCopy = {\n skip: \"Skip\",\n previous: \"Back\",\n next: \"Next\",\n restart: \"Start over\",\n complete: \"Complete\",\n finish: \"Finish\",\n requiresAction: \"Complete the required action first\",\n};\n\nexport const EN_US_CHROME_COPY: ChromeCopy = {\n dismissToast: \"Dismiss\",\n goBack: \"Back\",\n closePanel: \"Close\",\n closeTab: \"Close tab\",\n scrollRegion: \"Scrollable content\",\n scrollToTop: \"Back to top\",\n share: \"Share\",\n};\n\nconst EN_US_CHROMIUM_DESKTOP = [\n \"Click the icon to the left of the site's address.\",\n \"Open \\\"Site settings\\\".\",\n \"Under \\\"Notifications\\\", choose \\\"Allow\\\".\",\n \"Come back to this page and reload it.\",\n] as const;\n\nconst EN_US_CHROMIUM_ANDROID = [\n \"Tap the icon to the left of the site's address.\",\n \"Tap \\\"Permissions\\\".\",\n \"Tap \\\"Notifications\\\" and choose \\\"Allow\\\".\",\n \"Come back to this page and reload it.\",\n] as const;\n\nexport const EN_US_NOTIFICATION_UNBLOCK_COPY: NotificationUnblockCopy = {\n ios: [\n \"Open the iPhone's Settings.\",\n \"Tap \\\"Notifications\\\".\",\n \"Find this app in the list and turn on \\\"Allow Notifications\\\".\",\n ],\n chrome: { desktop: EN_US_CHROMIUM_DESKTOP, android: EN_US_CHROMIUM_ANDROID },\n edge: {\n desktop: [\n \"Click the lock to the left of the site's address.\",\n \"Open \\\"Permissions for this site\\\".\",\n \"Under \\\"Notifications\\\", choose \\\"Allow\\\".\",\n \"Come back to this page and reload it.\",\n ],\n android: EN_US_CHROMIUM_ANDROID,\n },\n firefox: {\n desktop: [\n \"Click the permissions icon to the left of the site's address.\",\n \"Next to \\\"Send notifications\\\", click the X to clear the block.\",\n \"Reload the page and turn notifications on again.\",\n ],\n android: [\n \"Open the browser menu and tap \\\"Settings\\\".\",\n \"Tap \\\"Site permissions\\\", then \\\"Notifications\\\".\",\n \"Find this site and choose \\\"Allow\\\".\",\n \"Come back to this page and reload it.\",\n ],\n },\n opera: { desktop: EN_US_CHROMIUM_DESKTOP, android: EN_US_CHROMIUM_ANDROID },\n safari: {\n desktop: [\n \"In the Safari menu, open \\\"Settings\\\".\",\n \"Go to the \\\"Websites\\\" tab and pick \\\"Notifications\\\" in the sidebar.\",\n \"Find this site and choose \\\"Allow\\\".\",\n \"Come back to this page and reload it.\",\n ],\n },\n samsung: {\n android: [\n \"Open the browser menu and tap \\\"Settings\\\".\",\n \"Tap \\\"Sites and downloads\\\", then \\\"Notifications\\\".\",\n \"Find this site and allow notifications.\",\n \"Come back to this page and reload it.\",\n ],\n },\n other: [\n \"Open the browser's settings.\",\n \"Look for site permissions, then \\\"Notifications\\\".\",\n \"Allow notifications for this site.\",\n \"Come back to this page and reload it.\",\n ],\n};\n"],"mappings":";AAUO,IAAM,sBAAoC;AAAA,EAC/C,MAAM;AAAA,EACN,UAAU;AAAA,EACV,MAAM;AAAA,EACN,SAAS;AAAA,EACT,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,gBAAgB;AAClB;AAEO,IAAM,oBAAgC;AAAA,EAC3C,cAAc;AAAA,EACd,QAAQ;AAAA,EACR,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,cAAc;AAAA,EACd,aAAa;AAAA,EACb,OAAO;AACT;AAEA,IAAM,yBAAyB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAM,yBAAyB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,kCAA2D;AAAA,EACtE,KAAK;AAAA,IACH;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,QAAQ,EAAE,SAAS,wBAAwB,SAAS,uBAAuB;AAAA,EAC3E,MAAM;AAAA,IACJ,SAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,SAAS;AAAA,EACX;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,SAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAO,EAAE,SAAS,wBAAwB,SAAS,uBAAuB;AAAA,EAC1E,QAAQ;AAAA,IACN,SAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,SAAS;AAAA,IACP,SAAS;AAAA,MACP;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EACA,OAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/RichTextEditor/RichTextEditor.format.ts"],"sourcesContent":["import {\n insertImage,\n toggleList,\n wrapSelection,\n wrapSelectionWithLink,\n} from './RichTextEditor.dom';\n\nconst WRAP_TAGS: Record<string, string> = {\n bold: 'strong',\n italic: 'em',\n underline: 'u',\n strikethrough: 's',\n};\n\nconst LIST_TAGS: Record<string, 'ol' | 'ul'> = {\n insertOrderedList: 'ol',\n insertUnorderedList: 'ul',\n};\n\n// formatBlock is the only format whose value names the tag, and only these two\n// are accepted.\nconst BLOCK_TAGS = new Set(['pre', 'blockquote']);\n\nexport const applyFormatToRange = ({\n formatType,\n value,\n range,\n editor,\n}: {\n formatType: string;\n value?: string;\n range: globalThis.Range;\n editor: HTMLElement | null;\n}) => {\n const wrapTag = WRAP_TAGS[formatType];\n if (wrapTag) {\n wrapSelection(range, wrapTag);\n return;\n }\n\n const listTag = LIST_TAGS[formatType];\n if (listTag) {\n toggleList(range, listTag, editor);\n return;\n }\n\n if (formatType === 'createLink' && value) {\n wrapSelectionWithLink(range, value);\n return;\n }\n\n if (formatType === 'insertImage' && value) {\n insertImage(range, value);\n return;\n }\n\n if (formatType === 'formatBlock' && value && BLOCK_TAGS.has(value)) {\n wrapSelection(range, value);\n }\n};\n\n"],"mappings":";;;;;;;;AAOA,IAAM,YAAoC;AAAA,EACxC,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,WAAW;AAAA,EACX,eAAe;AACjB;AAEA,IAAM,YAAyC;AAAA,EAC7C,mBAAmB;AAAA,EACnB,qBAAqB;AACvB;AAIA,IAAM,aAAa,oBAAI,IAAI,CAAC,OAAO,YAAY,CAAC;AAEzC,IAAM,qBAAqB,CAAC;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAKM;AACJ,QAAM,UAAU,UAAU,UAAU;AACpC,MAAI,SAAS;AACX,kBAAc,OAAO,OAAO;AAC5B;AAAA,EACF;AAEA,QAAM,UAAU,UAAU,UAAU;AACpC,MAAI,SAAS;AACX,eAAW,OAAO,SAAS,MAAM;AACjC;AAAA,EACF;AAEA,MAAI,eAAe,gBAAgB,OAAO;AACxC,0BAAsB,OAAO,KAAK;AAClC;AAAA,EACF;AAEA,MAAI,eAAe,iBAAiB,OAAO;AACzC,gBAAY,OAAO,KAAK;AACxB;AAAA,EACF;AAEA,MAAI,eAAe,iBAAiB,SAAS,WAAW,IAAI,KAAK,GAAG;AAClE,kBAAc,OAAO,KAAK;AAAA,EAC5B;AACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/data-display/DataViews/data-views-view-nav.tsx"],"sourcesContent":["\"use client\";\n\n/**\n * The saved views, rendered INSIDE the Exibir panel rather than in a dropdown\n * of their own.\n *\n * Two levels, both of them replacing the panel's BODY (the tabs stay put):\n * the list of views, and one view's actions. It is a drill-down and not a\n * nested menu on purpose — an absolutely positioned popover inside the panel's\n * own scroll container gets clipped by it, which is how copy.nav.deleteView ends\n * up unreachable. One level, no clipping, and it works on touch.\n */\nimport ChevronLeftRoundedIcon from \"@mui/icons-material/ChevronLeftRounded\";\nimport CheckRoundedIcon from \"@mui/icons-material/CheckRounded\";\nimport DeleteOutlineRoundedIcon from \"@mui/icons-material/DeleteOutlineRounded\";\nimport EditOutlinedIcon from \"@mui/icons-material/EditOutlined\";\nimport GroupOutlinedIcon from \"@mui/icons-material/GroupOutlined\";\nimport MoreVertRoundedIcon from \"@mui/icons-material/MoreVertRounded\";\nimport PushPinOutlinedIcon from \"@mui/icons-material/PushPinOutlined\";\nimport StarOutlineRoundedIcon from \"@mui/icons-material/StarOutlined\";\nimport StarOutlineRoundedIcon2 from \"@mui/icons-material/StarOutlineRounded\";\nimport IconButton from \"@mui/material/IconButton/index.js\";\n\nimport KeyboardArrowDownRoundedIcon from \"@mui/icons-material/KeyboardArrowDownRounded\";\nimport RestartAltRoundedIcon from \"@mui/icons-material/RestartAltRounded\";\nimport SaveOutlinedIcon from \"@mui/icons-material/SaveOutlined\";\n\nimport { useDataViewsCopy } from \"./data-views-copy-context\";\nimport { Button } from \"../../form/Button\";\nimport { Box } from \"../../../mui/Box\";\nimport { Text } from \"../../typography/Text\";\n\nimport type { DisplayPanelView } from \"./data-views-display-panel\";\nimport type { SavedViewSummary } from \"./data-views-types\";\nimport { sxRem } from \"../../../tokens/relative\";\n\n/** What the panel needs to drive the views without owning any of them. */\nexport interface ViewNavHandlers {\n views: SavedViewSummary[];\n activeViewId?: string | null;\n /** `null` selects the built-in view named by `copy.nav.mainView`. */\n onSelectView: (id: string | null) => void;\n onEditView: (view: SavedViewSummary) => void;\n onPatchView: (\n view: SavedViewSummary,\n changes: Partial<Pick<SavedViewSummary, \"isDefault\" | \"pinned\" | \"shared\">>,\n ) => void;\n onDeleteView: (view: SavedViewSummary) => void;\n}\n\nconst rowSx = {\n display: \"flex\",\n alignItems: \"center\",\n gap: 1,\n width: \"100%\",\n px: 1.25,\n py: 1,\n border: 0,\n borderRadius: 1,\n bgcolor: \"transparent\",\n cursor: \"pointer\",\n font: \"inherit\",\n fontSize: sxRem(13),\n textAlign: \"left\",\n color: \"text.primary\",\n \"&:hover\": { bgcolor: \"action.hover\" },\n} as const;\n\n/** The list: the built-in view, then each saved one with its own \"⋮\". */\nexport function ViewsList({\n handlers,\n onOpenActions,\n testIdPrefix,\n}: {\n handlers: ViewNavHandlers;\n onOpenActions: (view: SavedViewSummary) => void;\n testIdPrefix: string;\n}): React.JSX.Element {\n const copy = useDataViewsCopy();\n const { views, activeViewId, onSelectView } = handlers;\n const onMain = !activeViewId;\n return (\n <Box sx={{ p: 0.75 }} data-testid={`${testIdPrefix}-views-list`}>\n <Box\n component=\"button\"\n type=\"button\"\n onClick={() => onSelectView(null)}\n data-testid={`${testIdPrefix}-view-main`}\n sx={{ ...rowSx, color: onMain ? \"primary.main\" : \"text.primary\", fontWeight: onMain ? 600 : 400 }}\n >\n <Box component=\"span\" sx={{ flex: 1 }}>\n {copy.nav.mainView}\n </Box>\n {onMain && <CheckRoundedIcon fontSize=\"small\" />}\n </Box>\n\n {views.map((view) => {\n const active = view.id === activeViewId;\n return (\n <Box key={view.id} sx={{ display: \"flex\", alignItems: \"center\" }}>\n <Box\n component=\"button\"\n type=\"button\"\n onClick={() => onSelectView(view.id)}\n data-testid={`${testIdPrefix}-view-${view.id}`}\n sx={{ ...rowSx, minWidth: 0, color: active ? \"primary.main\" : \"text.primary\", fontWeight: active ? 600 : 400 }}\n >\n <Box component=\"span\" sx={{ flex: 1, minWidth: 0, overflow: \"hidden\", textOverflow: \"ellipsis\", whiteSpace: \"nowrap\" }}>\n {view.name}\n </Box>\n {/* What the row-menu toggles DID, readable without opening it:\n a view set as default, pinned or shared says so here. */}\n {view.isDefault && (\n <StarOutlineRoundedIcon fontSize=\"small\" sx={{ color: \"warning.main\" }} titleAccess={copy.nav.defaultTag} />\n )}\n {view.pinned && (\n <PushPinOutlinedIcon fontSize=\"small\" sx={{ color: \"text.disabled\" }} titleAccess=\"Fixada\" />\n )}\n {view.shared && (\n <GroupOutlinedIcon fontSize=\"small\" sx={{ color: \"text.disabled\" }} titleAccess=\"Compartilhada\" />\n )}\n {active && <CheckRoundedIcon fontSize=\"small\" />}\n </Box>\n <IconButton\n size=\"small\"\n onClick={() => onOpenActions(view)}\n aria-label={copy.nav.viewOptions(view.name)}\n data-testid={`${testIdPrefix}-view-${view.id}-menu`}\n >\n <MoreVertRoundedIcon fontSize=\"small\" />\n </IconButton>\n </Box>\n );\n })}\n\n {views.length === 0 && (\n <Text variant=\"caption\" as=\"p\">\n <Box component=\"span\" sx={{ display: \"block\", px: 1.25, py: 1.5, color: \"text.secondary\", lineHeight: 1.6 }}>\n {copy.nav.emptyHint}\n </Box>\n </Text>\n )}\n </Box>\n );\n}\n\n/** One view's actions, reached from its \"⋮\" and left by the back row. */\nexport function ViewActions({\n view,\n handlers,\n onBack,\n testIdPrefix,\n}: {\n view: SavedViewSummary;\n handlers: ViewNavHandlers;\n onBack: () => void;\n testIdPrefix: string;\n}): React.JSX.Element {\n const copy = useDataViewsCopy();\n const { onEditView, onPatchView, onDeleteView } = handlers;\n const action = (\n key: string,\n Icon: typeof StarOutlineRoundedIcon2,\n label: string,\n onClick: () => void,\n opts: { on?: boolean; danger?: boolean } = {},\n ): React.JSX.Element => (\n <Box\n component=\"button\"\n type=\"button\"\n onClick={onClick}\n data-testid={`${testIdPrefix}-view-action-${key}`}\n sx={{\n ...rowSx,\n color: opts.danger ? \"error.main\" : \"text.primary\",\n \"&:hover\": { bgcolor: opts.danger ? \"error.lighter\" : \"action.hover\" },\n }}\n >\n <Icon fontSize=\"small\" sx={{ color: opts.danger ? \"inherit\" : \"text.disabled\" }} />\n <Box component=\"span\" sx={{ flex: 1 }}>\n {label}\n </Box>\n {opts.on && <CheckRoundedIcon fontSize=\"small\" color=\"primary\" />}\n </Box>\n );\n\n return (\n <Box sx={{ p: 0.75 }} data-testid={`${testIdPrefix}-view-actions`}>\n <Box\n component=\"button\"\n type=\"button\"\n onClick={onBack}\n data-testid={`${testIdPrefix}-view-actions-back`}\n sx={{ ...rowSx, color: \"text.secondary\", fontSize: sxRem(12) }}\n >\n <ChevronLeftRoundedIcon fontSize=\"small\" />\n <Box component=\"span\" sx={{ flex: 1, fontWeight: 600, color: \"text.primary\" }}>\n {view.name}\n </Box>\n </Box>\n <Box sx={{ my: 0.5, borderTop: 1, borderColor: \"divider\" }} />\n {action(\"edit\", EditOutlinedIcon, copy.nav.editView, () => onEditView(view))}\n {action(\"default\", StarOutlineRoundedIcon2, copy.nav.setDefault, () => onPatchView(view, { isDefault: !view.isDefault }), { on: view.isDefault })}\n {action(\"pin\", PushPinOutlinedIcon, copy.nav.pinToSidebar, () => onPatchView(view, { pinned: !view.pinned }), { on: view.pinned })}\n {action(\"share\", GroupOutlinedIcon, copy.nav.shareWithTeam, () => onPatchView(view, { shared: !view.shared }), { on: view.shared })}\n <Box sx={{ my: 0.5, borderTop: 1, borderColor: \"divider\" }} />\n {action(\"delete\", DeleteOutlineRoundedIcon, copy.nav.deleteView, () => onDeleteView(view), { danger: true })}\n </Box>\n );\n}\n\n/** Name, unsaved dot, chevron — the parts, so the toggle has one decision. */\nfunction ToggleContents({\n view,\n open,\n interactive,\n testIdPrefix,\n}: {\n view: DisplayPanelView;\n open: boolean;\n interactive: boolean;\n testIdPrefix: string;\n}): React.JSX.Element {\n const copy = useDataViewsCopy();\n return (\n <>\n <Box component=\"span\" sx={{ fontWeight: 600 }} data-testid={`${testIdPrefix}-display-view-name`}>\n {view.activeViewName ?? copy.nav.mainView}\n </Box>\n {view.dirty && (\n <Box\n component=\"span\"\n aria-label={copy.nav.unsavedChanges}\n data-testid={`${testIdPrefix}-display-dirty`}\n sx={{ height: sxRem(6), width: sxRem(6), borderRadius: \"50%\", bgcolor: \"primary.main\" }}\n />\n )}\n {interactive && (\n <KeyboardArrowDownRoundedIcon\n fontSize=\"small\"\n sx={{ color: \"text.disabled\", transform: open ? \"rotate(180deg)\" : \"none\" }}\n />\n )}\n </>\n );\n}\n\n/** The name + unsaved dot; a button only when there are views to open. */\nfunction ViewToggle({\n view,\n open,\n onToggle,\n testIdPrefix,\n}: {\n view: DisplayPanelView;\n open: boolean;\n onToggle: () => void;\n testIdPrefix: string;\n}): React.JSX.Element {\n const interactive = Boolean(view.nav);\n // One decision, not eight: a panel with no views renders the same row as\n // plain text rather than as a button that opens nothing.\n const affordanceSx = interactive\n ? { px: 0.75, py: 0.25, cursor: \"pointer\", \"&:hover\": { bgcolor: \"action.hover\" } }\n : { px: 0, py: 0, cursor: \"default\" };\n return (\n <Box\n component={interactive ? \"button\" : \"div\"}\n type={interactive ? \"button\" : undefined}\n onClick={interactive ? onToggle : undefined}\n aria-expanded={interactive ? open : undefined}\n data-testid={`${testIdPrefix}-display-view-toggle`}\n sx={{\n ml: \"auto\",\n display: \"flex\",\n alignItems: \"center\",\n gap: 0.75,\n minWidth: 0,\n border: 0,\n borderRadius: 1,\n font: \"inherit\",\n fontSize: sxRem(12),\n bgcolor: open ? \"action.selected\" : \"transparent\",\n ...affordanceSx,\n }}\n >\n <ToggleContents view={view} open={open} interactive={interactive} testIdPrefix={testIdPrefix} />\n </Box>\n );\n}\n\n/** The VISÃO row above the tabs. */\nexport function ViewHeader(props: {\n view: DisplayPanelView;\n open: boolean;\n onToggle: () => void;\n testIdPrefix: string;\n}): React.JSX.Element {\n const copy = useDataViewsCopy();\n return (\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1, px: 1.5, py: 1, borderBottom: 1, borderColor: \"divider\" }}>\n <Text variant=\"caption\" as=\"span\">\n <Box component=\"span\" sx={{ textTransform: \"uppercase\", letterSpacing: sxRem(0.5), color: \"text.disabled\" }}>\n {copy.nav.label}\n </Box>\n </Text>\n <ViewToggle {...props} />\n </Box>\n );\n}\n\n/** Redefinir / Salvar como nova / Atualizar, pinned below the tabs. */\nexport function ViewFooter({\n view,\n onDone,\n testIdPrefix,\n}: {\n view: DisplayPanelView;\n onDone: () => void;\n testIdPrefix: string;\n}): React.JSX.Element {\n const copy = useDataViewsCopy();\n return (\n <Box\n sx={{\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n gap: 1,\n px: 1.5,\n py: 1,\n borderTop: 1,\n borderColor: \"divider\",\n bgcolor: \"action.hover\",\n }}\n >\n <Button\n variant=\"text\"\n size=\"sm\"\n color=\"neutral\"\n disabled={!view.dirty}\n startIcon={<RestartAltRoundedIcon fontSize=\"small\" />}\n onClick={view.onReset}\n dataTestId={`${testIdPrefix}-display-reset`}\n >\n {copy.nav.reset}\n </Button>\n <Box sx={{ display: \"flex\", alignItems: \"center\", gap: 1 }}>\n {/* Only meaningful with a view APPLIED: on the main view the single\n \"Salvar visão\" already is \"save as new\". */}\n {view.onUpdate && (\n <Button\n variant=\"text\"\n size=\"sm\"\n color=\"neutral\"\n onClick={() => {\n view.onSaveAs();\n onDone();\n }}\n dataTestId={`${testIdPrefix}-display-save-as`}\n >\n {copy.nav.saveAs}\n </Button>\n )}\n {/* Enabled only when something in Ordenar / Colunas / Exibição (or the\n filters the view also stores) differs from the applied view: the\n filled button is a STATE — \"there is something to save\" — not a\n permanent fixture. */}\n <Button\n size=\"sm\"\n disabled={!view.dirty}\n startIcon={<SaveOutlinedIcon fontSize=\"small\" />}\n onClick={() => {\n (view.onUpdate ?? view.onSaveAs)();\n onDone();\n }}\n dataTestId={`${testIdPrefix}-display-save`}\n >\n {view.onUpdate ? copy.nav.update : copy.nav.save}\n </Button>\n </Box>\n </Box>\n );\n}\n\n"],"mappings":"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","names":["default"]}