@12-apps/ui 6.78.3 → 6.79.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 (1003) hide show
  1. package/dist/_internal/components/data-display/Alert/Alert.js +3 -3
  2. package/dist/_internal/components/data-display/AlertDialog/AlertDialog.js +2 -1
  3. package/dist/_internal/components/data-display/AsyncStateContainer/AsyncStateContainer.js +3 -3
  4. package/dist/_internal/components/data-display/Avatar/Avatar.js +4 -4
  5. package/dist/_internal/components/data-display/Avatar/Avatar.view.js +2 -2
  6. package/dist/_internal/components/data-display/CardKit/card-actions-context.js +4 -4
  7. package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +11 -10
  8. package/dist/_internal/components/data-display/CardKit/use-row-confirm.js +7 -6
  9. package/dist/_internal/components/data-display/Carousel/Carousel.chrome.js +5 -2
  10. package/dist/_internal/components/data-display/Carousel/Carousel.js +7 -4
  11. package/dist/_internal/components/data-display/Carousel/Carousel.parts.js +4 -1
  12. package/dist/_internal/components/data-display/Chart/Chart.js +3 -3
  13. package/dist/_internal/components/data-display/Chart/SpecChart.js +6 -6
  14. package/dist/_internal/components/data-display/Chart/chart-renderers.js +2 -2
  15. package/dist/_internal/components/data-display/Chart/chart-spec.js +2 -2
  16. package/dist/_internal/components/data-display/DataGrid/DataGrid.js +2 -2
  17. package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +50 -49
  18. package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +70 -69
  19. package/dist/_internal/components/data-display/DataViews/DeleteViewDialog.js +4 -3
  20. package/dist/_internal/components/data-display/DataViews/ManageViewsDialog.js +9 -8
  21. package/dist/_internal/components/data-display/DataViews/SaveViewModal.js +8 -7
  22. package/dist/_internal/components/data-display/DataViews/base-card.js +5 -5
  23. package/dist/_internal/components/data-display/DataViews/base-list-card-geometry.js +3 -3
  24. package/dist/_internal/components/data-display/DataViews/base-list-card-gutters.js +3 -3
  25. package/dist/_internal/components/data-display/DataViews/base-list-card-layout.js +3 -3
  26. package/dist/_internal/components/data-display/DataViews/base-list-card-slots.js +2 -2
  27. package/dist/_internal/components/data-display/DataViews/base-list-card.js +10 -10
  28. package/dist/_internal/components/data-display/DataViews/data-views-category-pill.js +15 -14
  29. package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +21 -20
  30. package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +6 -6
  31. package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +45 -44
  32. package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +22 -21
  33. package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +19 -18
  34. package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +20 -19
  35. package/dist/_internal/components/data-display/DataViews/data-views-pagination.js +3 -3
  36. package/dist/_internal/components/data-display/DataViews/data-views-range-pill.js +2 -2
  37. package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +9 -8
  38. package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +22 -21
  39. package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +8 -7
  40. package/dist/_internal/components/data-display/DataViews/list-card-rails.js +2 -2
  41. package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +4 -4
  42. package/dist/_internal/components/data-display/EmptyState/EmptyState.js +2 -2
  43. package/dist/_internal/components/data-display/FleetMap/FleetBody.js +11 -8
  44. package/dist/_internal/components/data-display/FleetMap/FleetCanvas.js +10 -7
  45. package/dist/_internal/components/data-display/FleetMap/FleetMap.fixtures.js +1 -1
  46. package/dist/_internal/components/data-display/FleetMap/FleetMap.js +15 -12
  47. package/dist/_internal/components/data-display/HoverCard/HoverCard.js +2 -2
  48. package/dist/_internal/components/data-display/InteractiveTooltip/InteractiveTooltip.js +2 -2
  49. package/dist/_internal/components/data-display/LazyImage/LazyImage.hooks.js +1 -1
  50. package/dist/_internal/components/data-display/LazyImage/LazyImage.js +3 -2
  51. package/dist/_internal/components/data-display/Lightbox/Lightbox.js +6 -6
  52. package/dist/_internal/components/data-display/MapPreview/MapControlBar.js +5 -1
  53. package/dist/_internal/components/data-display/MapPreview/MapLayers.js +7 -3
  54. package/dist/_internal/components/data-display/MapPreview/MapMarkers.js +5 -1
  55. package/dist/_internal/components/data-display/MapPreview/MapPreview.helpers.js +6 -1
  56. package/dist/_internal/components/data-display/MapPreview/MapPreview.js +9 -6
  57. package/dist/_internal/components/data-display/Progress/Progress.js +2 -2
  58. package/dist/_internal/components/data-display/SectionOnboarding/SectionOnboarding.js +6 -4
  59. package/dist/_internal/components/data-display/Sheet/Sheet.hooks.js +2 -2
  60. package/dist/_internal/components/data-display/Sheet/Sheet.js +4 -4
  61. package/dist/_internal/components/data-display/Stepper/Stepper.js +3 -1
  62. package/dist/_internal/components/data-display/Table/Table.helpers.js +1 -1
  63. package/dist/_internal/components/data-display/Table/Table.js +6 -4
  64. package/dist/_internal/components/data-display/Table/TableParts.hooks.js +4 -2
  65. package/dist/_internal/components/data-display/Table/TableParts.js +4 -2
  66. package/dist/_internal/components/data-display/Timeline/Timeline.js +4 -2
  67. package/dist/_internal/components/data-display/Timeline/TimelineRow.js +1 -1
  68. package/dist/_internal/components/data-display/index.js +69 -64
  69. package/dist/_internal/components/feedback/ConfirmAction/ConfirmAction.js +4 -3
  70. package/dist/_internal/components/feedback/ConfirmAction/ConfirmAction.parts.js +3 -2
  71. package/dist/_internal/components/feedback/ConfirmAction/ConfirmButton.js +5 -4
  72. package/dist/_internal/components/feedback/ConfirmAction/with-confirmation.js +4 -3
  73. package/dist/_internal/components/feedback/Dialog/Dialog.js +3 -2
  74. package/dist/_internal/components/feedback/NotificationStatusNotice/NotificationStatusNotice.js +4 -4
  75. package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.js +12 -11
  76. package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.parts.js +6 -6
  77. package/dist/_internal/components/feedback/Sonner/Sonner.js +3 -2
  78. package/dist/_internal/components/feedback/Sonner/SonnerToast.js +1 -1
  79. package/dist/_internal/components/feedback/StackedModal/StackedModal.js +7 -6
  80. package/dist/_internal/components/feedback/StackedModal/StackedModal.parts.js +2 -1
  81. package/dist/_internal/components/feedback/Toast/Toast.js +2 -1
  82. package/dist/_internal/components/feedback/TutorialOverlay/TutorialOverlay.js +3 -2
  83. package/dist/_internal/components/feedback/TutorialOverlay/TutorialStepBody.js +2 -1
  84. package/dist/_internal/components/feedback/index.js +33 -31
  85. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.helpers.js +3 -1
  86. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.hooks.js +8 -6
  87. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.js +12 -10
  88. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocompleteField.js +4 -2
  89. package/dist/_internal/components/form/AddressAutocomplete/useAddressPredictions.js +4 -2
  90. package/dist/_internal/components/form/AddressAutocomplete/useAddressSelection.js +1 -1
  91. package/dist/_internal/components/form/AddressAutocomplete/useCurrentLocation.js +1 -1
  92. package/dist/_internal/components/form/AddressAutocomplete/useGoogleMapsAPI.js +1 -1
  93. package/dist/_internal/components/form/Autocomplete/Autocomplete.js +2 -2
  94. package/dist/_internal/components/form/Calendar/Calendar.hooks.js +2 -2
  95. package/dist/_internal/components/form/Calendar/Calendar.js +6 -6
  96. package/dist/_internal/components/form/Calendar/CalendarDay.js +1 -1
  97. package/dist/_internal/components/form/Calendar/CalendarDayCell.js +2 -2
  98. package/dist/_internal/components/form/Calendar/CalendarMonth.js +3 -3
  99. package/dist/_internal/components/form/CategorySelect/CategoryPanel.js +5 -5
  100. package/dist/_internal/components/form/CategorySelect/CategoryPanelList.js +3 -3
  101. package/dist/_internal/components/form/CategorySelect/CategoryRows.js +2 -2
  102. package/dist/_internal/components/form/CategorySelect/CategorySelect.js +9 -9
  103. package/dist/_internal/components/form/Checkbox/Checkbox.js +2 -2
  104. package/dist/_internal/components/form/CodeEditor/CodeEditor.js +3 -3
  105. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.js +9 -9
  106. package/dist/_internal/components/form/InputOTP/InputOTP.js +2 -2
  107. package/dist/_internal/components/form/Menubar/Menubar.js +2 -2
  108. package/dist/_internal/components/form/PhoneInput/PhoneInput.hooks.js +2 -2
  109. package/dist/_internal/components/form/PhoneInput/PhoneInput.js +3 -3
  110. package/dist/_internal/components/form/PhoneInput/countries.js +7 -3
  111. package/dist/_internal/components/form/PickerSheet/PickerSheet.js +4 -4
  112. package/dist/_internal/components/form/RichTextEditor/RichTextEditor.dom.js +2 -1
  113. package/dist/_internal/components/form/RichTextEditor/RichTextEditor.format.js +3 -2
  114. package/dist/_internal/components/form/RichTextEditor/RichTextEditor.hooks.js +4 -3
  115. package/dist/_internal/components/form/RichTextEditor/RichTextEditor.js +7 -5
  116. package/dist/_internal/components/form/RichTextEditor/RichTextEditorToolbar.js +1 -1
  117. package/dist/_internal/components/form/Switch/Switch.js +4 -4
  118. package/dist/_internal/components/form/Switch/Switch.parts.js +3 -3
  119. package/dist/_internal/components/form/Switch/Switch.styles.js +2 -2
  120. package/dist/_internal/components/form/Textarea/Textarea.js +1 -1
  121. package/dist/_internal/components/form/Textarea/TextareaRichEditor.js +4 -1
  122. package/dist/_internal/components/form/Textarea/TextareaRichEditor.js.map +1 -1
  123. package/dist/_internal/components/form/UploadButton/UploadButton.hooks.js +2 -1
  124. package/dist/_internal/components/form/UploadButton/UploadButton.js +3 -2
  125. package/dist/_internal/components/form/index.js +48 -45
  126. package/dist/_internal/components/form/total-form/Fields/CategoryField.js +10 -10
  127. package/dist/_internal/components/form/total-form/Fields/index.js +13 -13
  128. package/dist/_internal/components/form/total-form/FormErrorSnackbar.js +3 -2
  129. package/dist/_internal/components/index.js +196 -188
  130. package/dist/_internal/components/layout/Card/Card.js +2 -2
  131. package/dist/_internal/components/layout/ContentToolbar/FilterTrigger.js +2 -1
  132. package/dist/_internal/components/layout/ContentToolbar/ViewSelector.js +2 -1
  133. package/dist/_internal/components/layout/Dashboard/Dashboard.js +2 -1
  134. package/dist/_internal/components/layout/ScrollArea/ScrollArea.js +3 -3
  135. package/dist/_internal/components/layout/SettingCard/SettingCard.js +4 -4
  136. package/dist/_internal/components/layout/SettingCard/SettingCard.summary.js +3 -3
  137. package/dist/_internal/components/layout/SettingCard/SettingGroup.js +10 -10
  138. package/dist/_internal/components/layout/SettingCard/SettingSwitch.js +8 -8
  139. package/dist/_internal/components/layout/SettingCard/SettingToggle.js +10 -10
  140. package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.js +6 -6
  141. package/dist/_internal/components/layout/SettingsLayout/SettingsPanel.js +3 -3
  142. package/dist/_internal/components/layout/SettingsLayout/SettingsSectionChips.js +2 -2
  143. package/dist/_internal/components/layout/index.js +34 -33
  144. package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +8 -7
  145. package/dist/_internal/components/navigation/CommandPalette/CommandPalette.helpers.js +2 -1
  146. package/dist/_internal/components/navigation/CommandPalette/CommandPalette.hooks.js +3 -2
  147. package/dist/_internal/components/navigation/CommandPalette/CommandPalette.js +6 -4
  148. package/dist/_internal/components/navigation/CommandPalette/CommandPaletteResults.js +3 -1
  149. package/dist/_internal/components/navigation/NavigationMenu/NavigationMegaSection.js +4 -4
  150. package/dist/_internal/components/navigation/NavigationMenu/NavigationMenu.js +7 -6
  151. package/dist/_internal/components/navigation/NavigationMenu/NavigationMenu.shell.js +1 -1
  152. package/dist/_internal/components/navigation/NavigationMenu/NavigationMenuItem.js +2 -2
  153. package/dist/_internal/components/navigation/NavigationMenu/NavigationStandardBody.js +5 -4
  154. package/dist/_internal/components/navigation/Pagination/Pagination.js +2 -2
  155. package/dist/_internal/components/navigation/SectionNav/SectionNav.bar.js +2 -2
  156. package/dist/_internal/components/navigation/SectionNav/SectionNav.js +4 -4
  157. package/dist/_internal/components/navigation/index.js +29 -26
  158. package/dist/_internal/components/typography/Code/Code.js +2 -1
  159. package/dist/_internal/components/typography/index.js +2 -1
  160. package/dist/_internal/components/utility/InstallPrompt/InstallPrompt.js +2 -2
  161. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.helpers.js +7 -3
  162. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.js +6 -4
  163. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.parts.js +4 -2
  164. package/dist/_internal/components/utility/WorkflowStep/WorkflowStepRow.js +5 -3
  165. package/dist/_internal/components/utility/index.js +8 -6
  166. package/dist/_internal/copy/labels.js +1 -0
  167. package/dist/_internal/en-US.data-display.js +1 -1
  168. package/dist/_internal/en-US.feedback.js +1 -1
  169. package/dist/_internal/en-US.form.js +1 -1
  170. package/dist/_internal/en-US.labels.js +8 -0
  171. package/dist/_internal/en-US.navigation.js +1 -1
  172. package/dist/_internal/en-US.utility.js +1 -1
  173. package/dist/_internal/pt-BR.data-display.js +1 -1
  174. package/dist/_internal/pt-BR.feedback.js +1 -1
  175. package/dist/_internal/pt-BR.form.js +1 -1
  176. package/dist/_internal/pt-BR.labels.js +8 -0
  177. package/dist/_internal/pt-BR.labels.js.map +1 -0
  178. package/dist/_internal/pt-BR.navigation.js +1 -1
  179. package/dist/_internal/pt-BR.utility.js +1 -1
  180. package/dist/_internal/social-login-button/social-login-button.js +4 -4
  181. package/dist/_internal/user-avatar/user-avatar.js +8 -7
  182. package/dist/_internal/utils/resolve-labels.js +8 -0
  183. package/dist/_internal/utils/resolve-labels.js.map +1 -0
  184. package/dist/charts.js +11 -11
  185. package/dist/{chunk-2ILXXBMG.js → chunk-25HBYY4O.js} +12 -6
  186. package/dist/chunk-25HBYY4O.js.map +1 -0
  187. package/dist/{chunk-OPP6USJC.js → chunk-2FQF4CNE.js} +2 -2
  188. package/dist/{chunk-BWFQEASG.js → chunk-2P5ZBBTL.js} +5 -5
  189. package/dist/{chunk-QVO4SIS7.js → chunk-3W2B7IZG.js} +2 -2
  190. package/dist/{chunk-PMRLFNBT.js → chunk-3XLSA3YB.js} +4 -4
  191. package/dist/{chunk-7P5PNRBT.js → chunk-3YCV4EP7.js} +6 -6
  192. package/dist/{chunk-AYP6ICAY.js → chunk-44FY2YZL.js} +11 -10
  193. package/dist/chunk-44FY2YZL.js.map +1 -0
  194. package/dist/chunk-47IAX6PI.js +119 -0
  195. package/dist/chunk-47IAX6PI.js.map +1 -0
  196. package/dist/{chunk-Q6PRGXR2.js → chunk-4HBCWKIX.js} +4 -4
  197. package/dist/{chunk-HN3PZTUK.js → chunk-4MKVGSHX.js} +5 -5
  198. package/dist/{chunk-EERUSI52.js → chunk-4N3I7ZHQ.js} +2 -2
  199. package/dist/{chunk-O6SAU5JA.js → chunk-4OTJ66ID.js} +4 -4
  200. package/dist/{chunk-LG52LMAM.js → chunk-556LO6KA.js} +3 -3
  201. package/dist/{chunk-LBZEPWYK.js → chunk-5GLOEGOM.js} +4 -4
  202. package/dist/{chunk-KZXOIRUP.js → chunk-5MAD6ZEI.js} +43 -12
  203. package/dist/chunk-5MAD6ZEI.js.map +1 -0
  204. package/dist/{chunk-XICRCPEQ.js → chunk-5U7LBO2V.js} +5 -4
  205. package/dist/chunk-5U7LBO2V.js.map +1 -0
  206. package/dist/{chunk-JE6RZ5L6.js → chunk-5ZOJLYD2.js} +4 -4
  207. package/dist/{chunk-GSXYXMCV.js → chunk-66BRUS2M.js} +2 -2
  208. package/dist/{chunk-ALREWFRX.js → chunk-6DGNMASB.js} +4 -4
  209. package/dist/{chunk-MA6SUE7F.js → chunk-6EZQLNPK.js} +5 -3
  210. package/dist/chunk-6EZQLNPK.js.map +1 -0
  211. package/dist/{chunk-VRPCZ3IE.js → chunk-6JKECOZ2.js} +7 -6
  212. package/dist/chunk-6JKECOZ2.js.map +1 -0
  213. package/dist/{chunk-XKSA4L2X.js → chunk-6MGYPTAL.js} +11 -3
  214. package/dist/chunk-6MGYPTAL.js.map +1 -0
  215. package/dist/{chunk-5752357K.js → chunk-6N2U67KF.js} +4 -4
  216. package/dist/{chunk-UZOG6HNN.js → chunk-6SFJIW54.js} +5 -4
  217. package/dist/chunk-6SFJIW54.js.map +1 -0
  218. package/dist/{chunk-VD72JGHA.js → chunk-73OYC22L.js} +2 -2
  219. package/dist/{chunk-6PU3JYVY.js → chunk-775LIZXS.js} +4 -4
  220. package/dist/{chunk-C5JCARNE.js → chunk-7HKXTRTK.js} +7 -4
  221. package/dist/chunk-7HKXTRTK.js.map +1 -0
  222. package/dist/{chunk-S4JXSC4D.js → chunk-7HZ6TJRH.js} +6 -6
  223. package/dist/{chunk-33LAPBYB.js → chunk-7S25RDE4.js} +9 -5
  224. package/dist/chunk-7S25RDE4.js.map +1 -0
  225. package/dist/{chunk-CSD6SWBZ.js → chunk-A3Z7ZXLM.js} +6 -6
  226. package/dist/{chunk-LI6XSM5D.js → chunk-A6V7KE45.js} +3 -3
  227. package/dist/{chunk-YJBWDDW7.js → chunk-AAWVAQI2.js} +12 -12
  228. package/dist/{chunk-44PBCQ7E.js → chunk-ABQZFK7M.js} +6 -6
  229. package/dist/{chunk-EIMFA7KP.js → chunk-ANUO67JQ.js} +2 -2
  230. package/dist/{chunk-PTQRJEPN.js → chunk-AOBQ3KYY.js} +2 -2
  231. package/dist/{chunk-LODYTVOO.js → chunk-B25SHVWP.js} +4 -4
  232. package/dist/{chunk-GTT5UKKO.js → chunk-BDJIP4HG.js} +4 -4
  233. package/dist/{chunk-RS576GOH.js → chunk-BIUT3K6A.js} +4 -4
  234. package/dist/{chunk-4NQXHPQR.js → chunk-BJ7NWZWO.js} +11 -2
  235. package/dist/chunk-BJ7NWZWO.js.map +1 -0
  236. package/dist/{chunk-A5NXBOWS.js → chunk-BLHSLB5D.js} +5 -5
  237. package/dist/{chunk-DYHOBKPU.js → chunk-BLZDSCIZ.js} +6 -6
  238. package/dist/{chunk-E53MMMDA.js → chunk-BX6CF2UG.js} +3 -3
  239. package/dist/{chunk-WVZBYTIK.js → chunk-C465AAD5.js} +29 -19
  240. package/dist/chunk-C465AAD5.js.map +1 -0
  241. package/dist/{chunk-7HA7UH7O.js → chunk-C4OETF7K.js} +4 -4
  242. package/dist/{chunk-64AOS2WA.js → chunk-CAHN7AMY.js} +5 -5
  243. package/dist/{chunk-Z24VOTA7.js → chunk-CCWE6DBC.js} +4 -2
  244. package/dist/{chunk-Z24VOTA7.js.map → chunk-CCWE6DBC.js.map} +1 -1
  245. package/dist/{chunk-YLSDFW5O.js → chunk-CN4JS57H.js} +35 -5
  246. package/dist/chunk-CN4JS57H.js.map +1 -0
  247. package/dist/{chunk-MSC43MCJ.js → chunk-CRFOAKQL.js} +5 -5
  248. package/dist/{chunk-IQ2U5MVO.js → chunk-CSQWPDQV.js} +9 -9
  249. package/dist/{chunk-B2JYQBO4.js → chunk-CXTRDTNM.js} +11 -6
  250. package/dist/chunk-CXTRDTNM.js.map +1 -0
  251. package/dist/{chunk-TTCVYY2B.js → chunk-CYKINZKO.js} +22 -7
  252. package/dist/chunk-CYKINZKO.js.map +1 -0
  253. package/dist/{chunk-FT6HBP5E.js → chunk-DE7E2GBP.js} +11 -8
  254. package/dist/chunk-DE7E2GBP.js.map +1 -0
  255. package/dist/{chunk-QWVETTIY.js → chunk-DJMVBIFD.js} +21 -12
  256. package/dist/chunk-DJMVBIFD.js.map +1 -0
  257. package/dist/{chunk-3HLKTBEO.js → chunk-DQ22UKMZ.js} +4 -2
  258. package/dist/{chunk-3HLKTBEO.js.map → chunk-DQ22UKMZ.js.map} +1 -1
  259. package/dist/{chunk-INGPH3YQ.js → chunk-DVRNW33K.js} +28 -5
  260. package/dist/chunk-DVRNW33K.js.map +1 -0
  261. package/dist/{chunk-VQYR64QB.js → chunk-DX5PLJKN.js} +8 -3
  262. package/dist/chunk-DX5PLJKN.js.map +1 -0
  263. package/dist/{chunk-7XSCEHGA.js → chunk-EOQ6EKTS.js} +7 -7
  264. package/dist/{chunk-UGH2DDST.js → chunk-ETSASQXI.js} +4 -2
  265. package/dist/chunk-ETSASQXI.js.map +1 -0
  266. package/dist/{chunk-3VXS7O3X.js → chunk-EVYLJ5JB.js} +17 -3
  267. package/dist/chunk-EVYLJ5JB.js.map +1 -0
  268. package/dist/chunk-FB4GLQQO.js +102 -0
  269. package/dist/chunk-FB4GLQQO.js.map +1 -0
  270. package/dist/{chunk-WC3W36AM.js → chunk-FKUVFPQZ.js} +26 -12
  271. package/dist/chunk-FKUVFPQZ.js.map +1 -0
  272. package/dist/{chunk-VEKTKCSB.js → chunk-FLJ3RIRP.js} +5 -5
  273. package/dist/{chunk-LH4VKUZC.js → chunk-FLTXJWOC.js} +13 -7
  274. package/dist/chunk-FLTXJWOC.js.map +1 -0
  275. package/dist/{chunk-2ARVNCVU.js → chunk-FZUAB2KS.js} +8 -6
  276. package/dist/chunk-FZUAB2KS.js.map +1 -0
  277. package/dist/{chunk-PY3RW5LC.js → chunk-G2IVONJD.js} +24 -10
  278. package/dist/chunk-G2IVONJD.js.map +1 -0
  279. package/dist/{chunk-Z5WUSI47.js → chunk-G3JFESKD.js} +6 -6
  280. package/dist/{chunk-XRDH24J7.js → chunk-G6ET2DRL.js} +2 -2
  281. package/dist/{chunk-KIL3OVLI.js → chunk-G76PIGF7.js} +6 -2
  282. package/dist/chunk-G76PIGF7.js.map +1 -0
  283. package/dist/{chunk-XQWUVQ2F.js → chunk-GHGZI7PK.js} +6 -2
  284. package/dist/chunk-GHGZI7PK.js.map +1 -0
  285. package/dist/{chunk-4MQ6XTIJ.js → chunk-GJMWQUAD.js} +24 -13
  286. package/dist/chunk-GJMWQUAD.js.map +1 -0
  287. package/dist/{chunk-U4G3KY6L.js → chunk-GMU5AA3R.js} +8 -7
  288. package/dist/chunk-GMU5AA3R.js.map +1 -0
  289. package/dist/{chunk-ZFBFQK2Y.js → chunk-GPPUKDA6.js} +11 -12
  290. package/dist/chunk-GPPUKDA6.js.map +1 -0
  291. package/dist/{chunk-O36MIQIO.js → chunk-GPQ22MPR.js} +2 -2
  292. package/dist/{chunk-GRMBCJS6.js → chunk-H6R2L7VI.js} +4 -4
  293. package/dist/{chunk-AMLHEKSV.js → chunk-HI7JPDD6.js} +5 -5
  294. package/dist/{chunk-H3AQQOTI.js → chunk-HKGKQKQT.js} +9 -2
  295. package/dist/chunk-HKGKQKQT.js.map +1 -0
  296. package/dist/{chunk-CW6Y32N2.js → chunk-I2CT4XIP.js} +6 -6
  297. package/dist/{chunk-N34AOGK3.js → chunk-I3OKAQ5L.js} +7 -7
  298. package/dist/{chunk-AEYLFBZT.js → chunk-I4NDZFTB.js} +2 -2
  299. package/dist/{chunk-5J7SA4CZ.js → chunk-IASPZGYB.js} +28 -10
  300. package/dist/chunk-IASPZGYB.js.map +1 -0
  301. package/dist/{chunk-2ZRZTGWP.js → chunk-ISW5K72V.js} +5 -5
  302. package/dist/{chunk-KARMRTTM.js → chunk-J2RUDZVJ.js} +7 -7
  303. package/dist/{chunk-FTPTPASD.js → chunk-JBYFBPI6.js} +2 -5
  304. package/dist/{chunk-FTPTPASD.js.map → chunk-JBYFBPI6.js.map} +1 -1
  305. package/dist/{chunk-4M5GEKPM.js → chunk-JL4I7OQE.js} +4 -4
  306. package/dist/chunk-JQLQOIB3.js +1 -0
  307. package/dist/chunk-JQLQOIB3.js.map +1 -0
  308. package/dist/{chunk-NBXG3SQ3.js → chunk-JSY234NY.js} +5 -5
  309. package/dist/{chunk-HQCZT6TO.js → chunk-JVOEVTCZ.js} +5 -5
  310. package/dist/{chunk-MBMZNSBP.js → chunk-JW7MN4DG.js} +3 -3
  311. package/dist/{chunk-ZPACE34U.js → chunk-K53XSVQO.js} +10 -10
  312. package/dist/{chunk-RUF7TOAZ.js → chunk-KE74C2SM.js} +3 -2
  313. package/dist/{chunk-RUF7TOAZ.js.map → chunk-KE74C2SM.js.map} +1 -1
  314. package/dist/{chunk-GBVNY2LG.js → chunk-KTXJQ4YJ.js} +6 -6
  315. package/dist/{chunk-FCVPVEAS.js → chunk-KYE7I6NT.js} +7 -7
  316. package/dist/{chunk-MM7BPTVV.js → chunk-KYT5G4K7.js} +2 -2
  317. package/dist/{chunk-4VRDFZ4G.js → chunk-KYTFGW4R.js} +7 -3
  318. package/dist/chunk-KYTFGW4R.js.map +1 -0
  319. package/dist/chunk-L35TCXFA.js +74 -0
  320. package/dist/chunk-L35TCXFA.js.map +1 -0
  321. package/dist/{chunk-3V3Z4EML.js → chunk-L4FWEI2P.js} +5 -5
  322. package/dist/{chunk-7VRCGWQL.js → chunk-L7N4AFZD.js} +6 -5
  323. package/dist/chunk-L7N4AFZD.js.map +1 -0
  324. package/dist/{chunk-2TSGRQ2J.js → chunk-LHJJZ462.js} +4 -2
  325. package/dist/chunk-LHJJZ462.js.map +1 -0
  326. package/dist/{chunk-SV6IQ2YO.js → chunk-LIWONEAU.js} +6 -4
  327. package/dist/chunk-LIWONEAU.js.map +1 -0
  328. package/dist/chunk-LL2BWQPM.js +11 -0
  329. package/dist/chunk-LL2BWQPM.js.map +1 -0
  330. package/dist/{chunk-XYFBJH6F.js → chunk-LR473BUT.js} +19 -9
  331. package/dist/chunk-LR473BUT.js.map +1 -0
  332. package/dist/{chunk-56JF5PZK.js → chunk-LYVTJLCF.js} +4 -4
  333. package/dist/{chunk-M3DSPEZ3.js → chunk-M3ZNQTS5.js} +5 -5
  334. package/dist/{chunk-AYJ44VTJ.js → chunk-MBY7DWGT.js} +15 -13
  335. package/dist/chunk-MBY7DWGT.js.map +1 -0
  336. package/dist/{chunk-GBKIGUNP.js → chunk-MGDCGNLC.js} +3 -3
  337. package/dist/{chunk-BGYLL467.js → chunk-N3W6FZOC.js} +4 -4
  338. package/dist/{chunk-BWFUZ4N2.js → chunk-NA3M7KDE.js} +4 -4
  339. package/dist/{chunk-MTGEJRE4.js → chunk-NNKIM73H.js} +17 -4
  340. package/dist/chunk-NNKIM73H.js.map +1 -0
  341. package/dist/{chunk-OHXAJUO5.js → chunk-NPPO7G2B.js} +5 -3
  342. package/dist/{chunk-OHXAJUO5.js.map → chunk-NPPO7G2B.js.map} +1 -1
  343. package/dist/{chunk-FIOBPQL2.js → chunk-NUUX4BBR.js} +10 -3
  344. package/dist/chunk-NUUX4BBR.js.map +1 -0
  345. package/dist/{chunk-7JOLSD2W.js → chunk-P3QFJJJY.js} +3 -3
  346. package/dist/{chunk-RCTHCXS6.js → chunk-PJNIJIE6.js} +2 -2
  347. package/dist/{chunk-DXFKPY2K.js → chunk-PU3FQG7T.js} +4 -4
  348. package/dist/{chunk-6ATXOJVQ.js → chunk-QADTI63U.js} +4 -4
  349. package/dist/{chunk-FRGNTTPA.js → chunk-QDRHIK2R.js} +15 -10
  350. package/dist/chunk-QDRHIK2R.js.map +1 -0
  351. package/dist/{chunk-SUZXPDUQ.js → chunk-QJLOWBFW.js} +12 -6
  352. package/dist/chunk-QJLOWBFW.js.map +1 -0
  353. package/dist/chunk-QNAB53N3.js +1 -0
  354. package/dist/chunk-QNAB53N3.js.map +1 -0
  355. package/dist/{chunk-7ZROYGUG.js → chunk-QOTMQLMW.js} +2 -2
  356. package/dist/{chunk-NQCTANF3.js → chunk-QVDEGBME.js} +7 -7
  357. package/dist/{chunk-HEBZ7Q7O.js → chunk-QVYBRD6U.js} +7 -6
  358. package/dist/chunk-QVYBRD6U.js.map +1 -0
  359. package/dist/{chunk-VNVV6Y2X.js → chunk-RECD3XOL.js} +4 -2
  360. package/dist/chunk-RECD3XOL.js.map +1 -0
  361. package/dist/{chunk-JJVIZR6C.js → chunk-RIPG3QIN.js} +24 -13
  362. package/dist/chunk-RIPG3QIN.js.map +1 -0
  363. package/dist/{chunk-T743IIER.js → chunk-RNQA7MDM.js} +8 -4
  364. package/dist/chunk-RNQA7MDM.js.map +1 -0
  365. package/dist/{chunk-YNDTLBOH.js → chunk-RQMYEPRR.js} +2 -2
  366. package/dist/{chunk-3JDP5OUR.js → chunk-RQY5ONSF.js} +6 -2
  367. package/dist/chunk-RQY5ONSF.js.map +1 -0
  368. package/dist/{chunk-Y7YJYUNV.js → chunk-RRSLH2FV.js} +10 -3
  369. package/dist/chunk-RRSLH2FV.js.map +1 -0
  370. package/dist/{chunk-3Z3WIQ5M.js → chunk-RZ3QMKM7.js} +5 -5
  371. package/dist/{chunk-WA6F4NOO.js → chunk-SMANO5OD.js} +4 -4
  372. package/dist/{chunk-5M2NWXN4.js → chunk-SRNBD6EV.js} +2 -2
  373. package/dist/{chunk-7SYYGXC7.js → chunk-SSCEX5NY.js} +6 -2
  374. package/dist/chunk-SSCEX5NY.js.map +1 -0
  375. package/dist/{chunk-PU3HEWSG.js → chunk-SYSR2K2M.js} +13 -4
  376. package/dist/chunk-SYSR2K2M.js.map +1 -0
  377. package/dist/{chunk-R53ZOW4B.js → chunk-TGMMUKOF.js} +3 -3
  378. package/dist/{chunk-SB2SEGR6.js → chunk-TIM4PXWN.js} +3 -3
  379. package/dist/{chunk-555TUQ7E.js → chunk-TPGFR24B.js} +5 -5
  380. package/dist/{chunk-MHLYX6QW.js → chunk-TRAMTVIO.js} +5 -5
  381. package/dist/{chunk-QO7UJXXO.js → chunk-TVMSXL3R.js} +2 -2
  382. package/dist/{chunk-OE3SQOZV.js → chunk-U6XXAVBO.js} +13 -7
  383. package/dist/chunk-U6XXAVBO.js.map +1 -0
  384. package/dist/{chunk-CZV6NVCA.js → chunk-UG4EMHMW.js} +10 -7
  385. package/dist/chunk-UG4EMHMW.js.map +1 -0
  386. package/dist/{chunk-VEBNL5MG.js → chunk-UGYBN6OO.js} +2 -2
  387. package/dist/{chunk-AG3DY5TH.js → chunk-UHQZ5XPW.js} +5 -4
  388. package/dist/chunk-UHQZ5XPW.js.map +1 -0
  389. package/dist/{chunk-2QO3BKUQ.js → chunk-UJT6AQHL.js} +4 -4
  390. package/dist/{chunk-FTDGFWB5.js → chunk-UK3DSFMK.js} +5 -5
  391. package/dist/{chunk-NYWAAXDX.js → chunk-URAXAKUI.js} +3 -3
  392. package/dist/{chunk-XODBYGTH.js → chunk-V37QIB7B.js} +2 -2
  393. package/dist/{chunk-7K23NEZO.js → chunk-V45JGJ3W.js} +8 -8
  394. package/dist/{chunk-RA6W37NZ.js → chunk-V64USPG3.js} +11 -8
  395. package/dist/chunk-V64USPG3.js.map +1 -0
  396. package/dist/{chunk-HZK4DRGF.js → chunk-V7INHV5V.js} +6 -4
  397. package/dist/chunk-V7INHV5V.js.map +1 -0
  398. package/dist/{chunk-RZCXYKY4.js → chunk-VFVATUC6.js} +6 -2
  399. package/dist/chunk-VFVATUC6.js.map +1 -0
  400. package/dist/{chunk-2MYSXWZQ.js → chunk-VKTF3GAP.js} +9 -9
  401. package/dist/{chunk-ICRVLGWD.js → chunk-VMU52I5D.js} +8 -2
  402. package/dist/chunk-VMU52I5D.js.map +1 -0
  403. package/dist/{chunk-KHIUYLKY.js → chunk-VQ6UB4MN.js} +8 -8
  404. package/dist/{chunk-LTTYUSJ2.js → chunk-VTDZUO2J.js} +4 -2
  405. package/dist/chunk-VTDZUO2J.js.map +1 -0
  406. package/dist/{chunk-4HUSG5MR.js → chunk-VZVAP2ZR.js} +2 -2
  407. package/dist/{chunk-4XBAEKQQ.js → chunk-W2RXXF7K.js} +4 -4
  408. package/dist/chunk-W5PRZHLU.js +74 -0
  409. package/dist/chunk-W5PRZHLU.js.map +1 -0
  410. package/dist/{chunk-A2YLFKQU.js → chunk-W5WYTVLS.js} +2 -2
  411. package/dist/{chunk-EUACQR6N.js → chunk-WE43PZ4P.js} +7 -5
  412. package/dist/chunk-WE43PZ4P.js.map +1 -0
  413. package/dist/{chunk-RHKQ2RSY.js → chunk-WUW6NDXC.js} +15 -15
  414. package/dist/{chunk-EBCEDBHX.js → chunk-XDDKRACZ.js} +3 -3
  415. package/dist/{chunk-SLSED46V.js → chunk-Y3DV7LGC.js} +2 -1
  416. package/dist/{chunk-SLSED46V.js.map → chunk-Y3DV7LGC.js.map} +1 -1
  417. package/dist/{chunk-ASZGMKB4.js → chunk-Y3TD7HOY.js} +2 -2
  418. package/dist/{chunk-HBHBRRSW.js → chunk-YBAK2WN5.js} +7 -7
  419. package/dist/{chunk-LOLYI6PS.js → chunk-YCZGYYUX.js} +11 -8
  420. package/dist/chunk-YCZGYYUX.js.map +1 -0
  421. package/dist/{chunk-KT3TF2LT.js → chunk-YJ6UQDA6.js} +7 -5
  422. package/dist/chunk-YJ6UQDA6.js.map +1 -0
  423. package/dist/{chunk-6RTE4UNO.js → chunk-YV4O7KDR.js} +1 -1
  424. package/dist/{chunk-Z5V5E3JW.js → chunk-ZIHSCBMN.js} +10 -10
  425. package/dist/data-display/Alert.js +3 -3
  426. package/dist/data-display/AlertDialog.js +2 -1
  427. package/dist/data-display/AsyncStateContainer.js +3 -3
  428. package/dist/data-display/Avatar.js +4 -4
  429. package/dist/data-display/CardKit.js +18 -17
  430. package/dist/data-display/Carousel.js +7 -4
  431. package/dist/data-display/Chart.js +11 -11
  432. package/dist/data-display/DataGrid.js +2 -2
  433. package/dist/data-display/DataViews.js +86 -85
  434. package/dist/data-display/EmptyState.js +2 -2
  435. package/dist/data-display/FleetMap.js +15 -12
  436. package/dist/data-display/HoverCard.js +2 -2
  437. package/dist/data-display/InteractiveTooltip.js +2 -2
  438. package/dist/data-display/LazyImage.js +3 -2
  439. package/dist/data-display/Lightbox.js +6 -6
  440. package/dist/data-display/MapPreview.js +9 -6
  441. package/dist/data-display/Progress.js +2 -2
  442. package/dist/data-display/SectionOnboarding.js +6 -4
  443. package/dist/data-display/Sheet.js +4 -4
  444. package/dist/data-display/Stepper.js +3 -1
  445. package/dist/data-display/Table.js +6 -4
  446. package/dist/data-display/Timeline.js +4 -2
  447. package/dist/en-US.js +16 -12
  448. package/dist/feedback/ConfirmAction.js +9 -8
  449. package/dist/feedback/Dialog.js +3 -2
  450. package/dist/feedback/NotificationStatusNotice.js +4 -4
  451. package/dist/feedback/SequenceResolver.js +12 -11
  452. package/dist/feedback/Sonner.js +3 -2
  453. package/dist/feedback/StackedModal.js +7 -6
  454. package/dist/feedback/Toast.js +2 -1
  455. package/dist/feedback/TutorialOverlay.js +3 -2
  456. package/dist/form/AddressAutocomplete.js +12 -10
  457. package/dist/form/Autocomplete.js +2 -2
  458. package/dist/form/Calendar.js +6 -6
  459. package/dist/form/CategorySelect.js +9 -9
  460. package/dist/form/Checkbox.js +2 -2
  461. package/dist/form/CodeEditor.js +3 -3
  462. package/dist/form/DateRangePicker.js +9 -9
  463. package/dist/form/InputOTP.js +2 -2
  464. package/dist/form/Menubar.js +2 -2
  465. package/dist/form/PhoneInput.js +3 -3
  466. package/dist/form/PickerSheet.js +4 -4
  467. package/dist/form/RichTextEditor.js +7 -5
  468. package/dist/form/Switch.js +4 -4
  469. package/dist/form/Textarea.js +1 -1
  470. package/dist/form/UploadButton.js +3 -2
  471. package/dist/form/total-form.js +18 -17
  472. package/dist/layout/Card.js +2 -2
  473. package/dist/layout/ContentToolbar.js +11 -10
  474. package/dist/layout/Dashboard.js +2 -1
  475. package/dist/layout/ScrollArea.js +3 -3
  476. package/dist/layout/SettingCard.js +17 -17
  477. package/dist/layout/SettingsLayout.js +6 -6
  478. package/dist/locales.js +36 -28
  479. package/dist/locales.js.map +1 -1
  480. package/dist/native/chunks/{chunk-BXNZHDXK.js → chunk-4SP3BDPZ.js} +12 -5
  481. package/dist/native/chunks/chunk-4SP3BDPZ.js.map +1 -0
  482. package/dist/native/chunks/{chunk-AVHGS66L.js → chunk-FGAX5BRS.js} +2 -2
  483. package/dist/native/chunks/chunk-SPK34J7Y.js +74 -0
  484. package/dist/native/chunks/chunk-SPK34J7Y.js.map +1 -0
  485. package/dist/native/data-display/Badge.js +9 -3
  486. package/dist/native/data-display/Badge.js.map +1 -1
  487. package/dist/native/data-display/Chip.js +9 -1
  488. package/dist/native/data-display/Chip.js.map +1 -1
  489. package/dist/native/data-display/EmptyState.js +3 -2
  490. package/dist/native/data-display/ErrorState.js +2 -1
  491. package/dist/native/data-display/ErrorState.js.map +1 -1
  492. package/dist/native/data-display/FleetMap.js +3 -2
  493. package/dist/native/data-display/FleetMap.js.map +1 -1
  494. package/dist/native/feedback/Dialog.js +20 -3
  495. package/dist/native/feedback/Dialog.js.map +1 -1
  496. package/dist/native/form/Button.js +2 -1
  497. package/dist/native/form/Checkbox.js +6 -1
  498. package/dist/native/form/Checkbox.js.map +1 -1
  499. package/dist/native/form/Input.js +11 -3
  500. package/dist/native/form/Input.js.map +1 -1
  501. package/dist/native/form/Switch.js +5 -1
  502. package/dist/native/form/Switch.js.map +1 -1
  503. package/dist/navigation/AppHeader.js +10 -9
  504. package/dist/navigation/CommandPalette.js +6 -4
  505. package/dist/navigation/NavigationMenu.js +7 -6
  506. package/dist/navigation/Pagination.js +2 -2
  507. package/dist/navigation/SectionNav.js +5 -5
  508. package/dist/pt-BR.js +10 -6
  509. package/dist/social-login-button.js +4 -4
  510. package/dist/types/components/data-display/AlertDialog/AlertDialog.d.ts.map +1 -1
  511. package/dist/types/components/data-display/AlertDialog/AlertDialog.types.d.ts +5 -0
  512. package/dist/types/components/data-display/AlertDialog/AlertDialog.types.d.ts.map +1 -1
  513. package/dist/types/components/data-display/Carousel/Carousel.chrome.d.ts.map +1 -1
  514. package/dist/types/components/data-display/Carousel/Carousel.parts.d.ts.map +1 -1
  515. package/dist/types/components/data-display/Carousel/Carousel.types.d.ts +2 -0
  516. package/dist/types/components/data-display/Carousel/Carousel.types.d.ts.map +1 -1
  517. package/dist/types/components/data-display/LazyImage/LazyImage.d.ts.map +1 -1
  518. package/dist/types/components/data-display/LazyImage/LazyImage.types.d.ts +10 -0
  519. package/dist/types/components/data-display/LazyImage/LazyImage.types.d.ts.map +1 -1
  520. package/dist/types/components/data-display/MapPreview/MapControlBar.d.ts.map +1 -1
  521. package/dist/types/components/data-display/MapPreview/MapLayers.d.ts +1 -1
  522. package/dist/types/components/data-display/MapPreview/MapLayers.d.ts.map +1 -1
  523. package/dist/types/components/data-display/MapPreview/MapMarkers.d.ts +2 -0
  524. package/dist/types/components/data-display/MapPreview/MapMarkers.d.ts.map +1 -1
  525. package/dist/types/components/data-display/MapPreview/MapPreview.d.ts.map +1 -1
  526. package/dist/types/components/data-display/MapPreview/MapPreview.helpers.d.ts +7 -1
  527. package/dist/types/components/data-display/MapPreview/MapPreview.helpers.d.ts.map +1 -1
  528. package/dist/types/components/data-display/Stepper/Stepper.d.ts.map +1 -1
  529. package/dist/types/components/data-display/Stepper/Stepper.types.d.ts +4 -0
  530. package/dist/types/components/data-display/Stepper/Stepper.types.d.ts.map +1 -1
  531. package/dist/types/components/data-display/Table/Table.d.ts.map +1 -1
  532. package/dist/types/components/data-display/Table/Table.helpers.d.ts.map +1 -1
  533. package/dist/types/components/data-display/Table/Table.types.d.ts +11 -0
  534. package/dist/types/components/data-display/Table/Table.types.d.ts.map +1 -1
  535. package/dist/types/components/data-display/Table/TableParts.d.ts +2 -1
  536. package/dist/types/components/data-display/Table/TableParts.d.ts.map +1 -1
  537. package/dist/types/components/data-display/Table/TableParts.hooks.d.ts +2 -2
  538. package/dist/types/components/data-display/Table/TableParts.hooks.d.ts.map +1 -1
  539. package/dist/types/components/data-display/Timeline/Timeline.d.ts.map +1 -1
  540. package/dist/types/components/data-display/Timeline/Timeline.types.d.ts +3 -0
  541. package/dist/types/components/data-display/Timeline/Timeline.types.d.ts.map +1 -1
  542. package/dist/types/components/data-display/Timeline/TimelineRow.d.ts +2 -0
  543. package/dist/types/components/data-display/Timeline/TimelineRow.d.ts.map +1 -1
  544. package/dist/types/components/feedback/Dialog/Dialog.base.d.ts +10 -0
  545. package/dist/types/components/feedback/Dialog/Dialog.base.d.ts.map +1 -1
  546. package/dist/types/components/feedback/Dialog/Dialog.d.ts.map +1 -1
  547. package/dist/types/components/feedback/Sonner/Sonner.d.ts +6 -0
  548. package/dist/types/components/feedback/Sonner/Sonner.d.ts.map +1 -1
  549. package/dist/types/components/feedback/Sonner/SonnerToast.d.ts.map +1 -1
  550. package/dist/types/components/feedback/StackedModal/StackedModal.d.ts.map +1 -1
  551. package/dist/types/components/feedback/StackedModal/StackedModal.parts.d.ts +2 -0
  552. package/dist/types/components/feedback/StackedModal/StackedModal.parts.d.ts.map +1 -1
  553. package/dist/types/components/feedback/StackedModal/StackedModal.types.d.ts +5 -0
  554. package/dist/types/components/feedback/StackedModal/StackedModal.types.d.ts.map +1 -1
  555. package/dist/types/components/feedback/Toast/Toast.d.ts.map +1 -1
  556. package/dist/types/components/feedback/Toast/Toast.types.d.ts +5 -0
  557. package/dist/types/components/feedback/Toast/Toast.types.d.ts.map +1 -1
  558. package/dist/types/components/feedback/TutorialOverlay/TutorialOverlay.d.ts.map +1 -1
  559. package/dist/types/components/feedback/TutorialOverlay/TutorialStepBody.d.ts.map +1 -1
  560. package/dist/types/components/form/AddressAutocomplete/AddressAutocomplete.d.ts.map +1 -1
  561. package/dist/types/components/form/AddressAutocomplete/AddressAutocomplete.helpers.d.ts +1 -1
  562. package/dist/types/components/form/AddressAutocomplete/AddressAutocomplete.helpers.d.ts.map +1 -1
  563. package/dist/types/components/form/AddressAutocomplete/AddressAutocomplete.hooks.d.ts +3 -1
  564. package/dist/types/components/form/AddressAutocomplete/AddressAutocomplete.hooks.d.ts.map +1 -1
  565. package/dist/types/components/form/AddressAutocomplete/AddressAutocompleteField.d.ts.map +1 -1
  566. package/dist/types/components/form/AddressAutocomplete/useAddressPredictions.d.ts +2 -1
  567. package/dist/types/components/form/AddressAutocomplete/useAddressPredictions.d.ts.map +1 -1
  568. package/dist/types/components/form/AddressAutocomplete/useAddressSelection.d.ts +3 -1
  569. package/dist/types/components/form/AddressAutocomplete/useAddressSelection.d.ts.map +1 -1
  570. package/dist/types/components/form/AddressAutocomplete/useCurrentLocation.d.ts +3 -1
  571. package/dist/types/components/form/AddressAutocomplete/useCurrentLocation.d.ts.map +1 -1
  572. package/dist/types/components/form/AddressAutocomplete/useGoogleMapsAPI.d.ts +4 -1
  573. package/dist/types/components/form/AddressAutocomplete/useGoogleMapsAPI.d.ts.map +1 -1
  574. package/dist/types/components/form/Button/Button.native.loading.d.ts +2 -1
  575. package/dist/types/components/form/Button/Button.native.loading.d.ts.map +1 -1
  576. package/dist/types/components/form/Calendar/CalendarDay.d.ts.map +1 -1
  577. package/dist/types/components/form/Calendar/CalendarMonth.d.ts.map +1 -1
  578. package/dist/types/components/form/PhoneInput/PhoneInput.d.ts.map +1 -1
  579. package/dist/types/components/form/PhoneInput/PhoneInput.types.d.ts +1 -0
  580. package/dist/types/components/form/PhoneInput/PhoneInput.types.d.ts.map +1 -1
  581. package/dist/types/components/form/PhoneInput/countries.d.ts +6 -0
  582. package/dist/types/components/form/PhoneInput/countries.d.ts.map +1 -1
  583. package/dist/types/components/form/RichTextEditor/RichTextEditor.d.ts.map +1 -1
  584. package/dist/types/components/form/RichTextEditor/RichTextEditor.dom.d.ts +1 -1
  585. package/dist/types/components/form/RichTextEditor/RichTextEditor.dom.d.ts.map +1 -1
  586. package/dist/types/components/form/RichTextEditor/RichTextEditor.format.d.ts +2 -1
  587. package/dist/types/components/form/RichTextEditor/RichTextEditor.format.d.ts.map +1 -1
  588. package/dist/types/components/form/RichTextEditor/RichTextEditor.hooks.d.ts +2 -1
  589. package/dist/types/components/form/RichTextEditor/RichTextEditor.hooks.d.ts.map +1 -1
  590. package/dist/types/components/form/RichTextEditor/RichTextEditor.types.d.ts +7 -1
  591. package/dist/types/components/form/RichTextEditor/RichTextEditor.types.d.ts.map +1 -1
  592. package/dist/types/components/form/RichTextEditor/RichTextEditorToolbar.d.ts +2 -0
  593. package/dist/types/components/form/RichTextEditor/RichTextEditorToolbar.d.ts.map +1 -1
  594. package/dist/types/components/form/Textarea/TextareaRichEditor.d.ts.map +1 -1
  595. package/dist/types/components/form/UploadButton/UploadButton.hooks.d.ts.map +1 -1
  596. package/dist/types/components/layout/ContentToolbar/ContentToolbar.types.d.ts +14 -0
  597. package/dist/types/components/layout/ContentToolbar/ContentToolbar.types.d.ts.map +1 -1
  598. package/dist/types/components/layout/ContentToolbar/FilterTrigger.d.ts +1 -1
  599. package/dist/types/components/layout/ContentToolbar/FilterTrigger.d.ts.map +1 -1
  600. package/dist/types/components/layout/ContentToolbar/ViewSelector.d.ts +1 -1
  601. package/dist/types/components/layout/ContentToolbar/ViewSelector.d.ts.map +1 -1
  602. package/dist/types/components/layout/Dashboard/Dashboard.d.ts +1 -1
  603. package/dist/types/components/layout/Dashboard/Dashboard.d.ts.map +1 -1
  604. package/dist/types/components/layout/Dashboard/Dashboard.types.d.ts +5 -0
  605. package/dist/types/components/layout/Dashboard/Dashboard.types.d.ts.map +1 -1
  606. package/dist/types/components/navigation/CommandPalette/CommandPalette.d.ts.map +1 -1
  607. package/dist/types/components/navigation/CommandPalette/CommandPalette.helpers.d.ts +1 -1
  608. package/dist/types/components/navigation/CommandPalette/CommandPalette.helpers.d.ts.map +1 -1
  609. package/dist/types/components/navigation/CommandPalette/CommandPalette.hooks.d.ts +2 -1
  610. package/dist/types/components/navigation/CommandPalette/CommandPalette.hooks.d.ts.map +1 -1
  611. package/dist/types/components/navigation/CommandPalette/CommandPaletteResults.d.ts.map +1 -1
  612. package/dist/types/components/navigation/NavigationMenu/NavigationMenu.d.ts.map +1 -1
  613. package/dist/types/components/navigation/NavigationMenu/NavigationMenu.shell.d.ts +1 -0
  614. package/dist/types/components/navigation/NavigationMenu/NavigationMenu.shell.d.ts.map +1 -1
  615. package/dist/types/components/navigation/NavigationMenu/NavigationMenu.types.d.ts +11 -0
  616. package/dist/types/components/navigation/NavigationMenu/NavigationMenu.types.d.ts.map +1 -1
  617. package/dist/types/components/navigation/NavigationMenu/NavigationMenuItem.d.ts.map +1 -1
  618. package/dist/types/components/navigation/NavigationMenu/NavigationStandardBody.d.ts +4 -0
  619. package/dist/types/components/navigation/NavigationMenu/NavigationStandardBody.d.ts.map +1 -1
  620. package/dist/types/components/typography/Code/Code.d.ts.map +1 -1
  621. package/dist/types/components/typography/Code/Code.types.d.ts +4 -0
  622. package/dist/types/components/typography/Code/Code.types.d.ts.map +1 -1
  623. package/dist/types/components/utility/WorkflowStep/WorkflowStep.d.ts.map +1 -1
  624. package/dist/types/components/utility/WorkflowStep/WorkflowStep.helpers.d.ts +4 -1
  625. package/dist/types/components/utility/WorkflowStep/WorkflowStep.helpers.d.ts.map +1 -1
  626. package/dist/types/components/utility/WorkflowStep/WorkflowStep.parts.d.ts.map +1 -1
  627. package/dist/types/components/utility/WorkflowStep/WorkflowStep.types.d.ts +9 -0
  628. package/dist/types/components/utility/WorkflowStep/WorkflowStep.types.d.ts.map +1 -1
  629. package/dist/types/components/utility/WorkflowStep/WorkflowStepRow.d.ts +1 -0
  630. package/dist/types/components/utility/WorkflowStep/WorkflowStepRow.d.ts.map +1 -1
  631. package/dist/types/copy/data-display.d.ts +24 -0
  632. package/dist/types/copy/data-display.d.ts.map +1 -1
  633. package/dist/types/copy/feedback.d.ts +4 -0
  634. package/dist/types/copy/feedback.d.ts.map +1 -1
  635. package/dist/types/copy/form.d.ts +58 -0
  636. package/dist/types/copy/form.d.ts.map +1 -1
  637. package/dist/types/copy/labels.d.ts +108 -0
  638. package/dist/types/copy/labels.d.ts.map +1 -0
  639. package/dist/types/copy/navigation.d.ts +12 -0
  640. package/dist/types/copy/navigation.d.ts.map +1 -1
  641. package/dist/types/copy/utility.d.ts +8 -1
  642. package/dist/types/copy/utility.d.ts.map +1 -1
  643. package/dist/types/copy.d.ts +1 -0
  644. package/dist/types/copy.d.ts.map +1 -1
  645. package/dist/types/en-US.d.ts +1 -0
  646. package/dist/types/en-US.d.ts.map +1 -1
  647. package/dist/types/en-US.data-display.d.ts +2 -2
  648. package/dist/types/en-US.data-display.d.ts.map +1 -1
  649. package/dist/types/en-US.feedback.d.ts +1 -1
  650. package/dist/types/en-US.feedback.d.ts.map +1 -1
  651. package/dist/types/en-US.form.d.ts +4 -4
  652. package/dist/types/en-US.form.d.ts.map +1 -1
  653. package/dist/types/en-US.labels.d.ts +9 -0
  654. package/dist/types/en-US.labels.d.ts.map +1 -0
  655. package/dist/types/en-US.navigation.d.ts +1 -1
  656. package/dist/types/en-US.navigation.d.ts.map +1 -1
  657. package/dist/types/en-US.utility.d.ts +1 -1
  658. package/dist/types/en-US.utility.d.ts.map +1 -1
  659. package/dist/types/locales.d.ts +2 -1
  660. package/dist/types/locales.d.ts.map +1 -1
  661. package/dist/types/pt-BR.d.ts +1 -0
  662. package/dist/types/pt-BR.d.ts.map +1 -1
  663. package/dist/types/pt-BR.data-display.d.ts +2 -2
  664. package/dist/types/pt-BR.data-display.d.ts.map +1 -1
  665. package/dist/types/pt-BR.feedback.d.ts +1 -1
  666. package/dist/types/pt-BR.feedback.d.ts.map +1 -1
  667. package/dist/types/pt-BR.form.d.ts +4 -4
  668. package/dist/types/pt-BR.form.d.ts.map +1 -1
  669. package/dist/types/pt-BR.labels.d.ts +8 -0
  670. package/dist/types/pt-BR.labels.d.ts.map +1 -0
  671. package/dist/types/pt-BR.navigation.d.ts +1 -1
  672. package/dist/types/pt-BR.navigation.d.ts.map +1 -1
  673. package/dist/types/pt-BR.utility.d.ts +1 -1
  674. package/dist/types/pt-BR.utility.d.ts.map +1 -1
  675. package/dist/types/user-avatar/user-avatar.d.ts +6 -1
  676. package/dist/types/user-avatar/user-avatar.d.ts.map +1 -1
  677. package/dist/types/utils/resolve-labels.d.ts +9 -0
  678. package/dist/types/utils/resolve-labels.d.ts.map +1 -0
  679. package/dist/types-native/components/data-display/Badge/Badge.native.d.ts +1 -0
  680. package/dist/types-native/components/data-display/Badge/Badge.native.d.ts.map +1 -1
  681. package/dist/types-native/components/data-display/Badge/Badge.types.native.d.ts +2 -0
  682. package/dist/types-native/components/data-display/Badge/Badge.types.native.d.ts.map +1 -1
  683. package/dist/types-native/components/data-display/Badge/BadgeContent.native.d.ts +2 -1
  684. package/dist/types-native/components/data-display/Badge/BadgeContent.native.d.ts.map +1 -1
  685. package/dist/types-native/components/data-display/Chip/Chip.native.d.ts +1 -0
  686. package/dist/types-native/components/data-display/Chip/Chip.native.d.ts.map +1 -1
  687. package/dist/types-native/components/data-display/Chip/Chip.types.native.d.ts +2 -0
  688. package/dist/types-native/components/data-display/Chip/Chip.types.native.d.ts.map +1 -1
  689. package/dist/types-native/components/feedback/Dialog/Dialog.base.d.ts +10 -0
  690. package/dist/types-native/components/feedback/Dialog/Dialog.base.d.ts.map +1 -1
  691. package/dist/types-native/components/feedback/Dialog/Dialog.native.d.ts.map +1 -1
  692. package/dist/types-native/components/feedback/Dialog/DialogParts.native.d.ts +1 -1
  693. package/dist/types-native/components/feedback/Dialog/DialogParts.native.d.ts.map +1 -1
  694. package/dist/types-native/components/form/Button/Button.native.d.ts +1 -0
  695. package/dist/types-native/components/form/Button/Button.native.d.ts.map +1 -1
  696. package/dist/types-native/components/form/Button/Button.native.loading.d.ts +2 -1
  697. package/dist/types-native/components/form/Button/Button.native.loading.d.ts.map +1 -1
  698. package/dist/types-native/components/form/Button/Button.types.native.d.ts +2 -0
  699. package/dist/types-native/components/form/Button/Button.types.native.d.ts.map +1 -1
  700. package/dist/types-native/components/form/Checkbox/Checkbox.native.d.ts +1 -0
  701. package/dist/types-native/components/form/Checkbox/Checkbox.native.d.ts.map +1 -1
  702. package/dist/types-native/components/form/Checkbox/Checkbox.types.native.d.ts +2 -0
  703. package/dist/types-native/components/form/Checkbox/Checkbox.types.native.d.ts.map +1 -1
  704. package/dist/types-native/components/form/Input/Input.native.d.ts +1 -0
  705. package/dist/types-native/components/form/Input/Input.native.d.ts.map +1 -1
  706. package/dist/types-native/components/form/Input/Input.types.native.d.ts +2 -0
  707. package/dist/types-native/components/form/Input/Input.types.native.d.ts.map +1 -1
  708. package/dist/types-native/components/form/Switch/Switch.native.d.ts +1 -0
  709. package/dist/types-native/components/form/Switch/Switch.native.d.ts.map +1 -1
  710. package/dist/types-native/components/form/Switch/Switch.types.native.d.ts +2 -0
  711. package/dist/types-native/components/form/Switch/Switch.types.native.d.ts.map +1 -1
  712. package/dist/types-native/copy/data-display.d.ts +119 -0
  713. package/dist/types-native/copy/data-display.d.ts.map +1 -0
  714. package/dist/types-native/copy/labels.d.ts +108 -0
  715. package/dist/types-native/copy/labels.d.ts.map +1 -0
  716. package/dist/types-native/en-US.labels.d.ts +9 -0
  717. package/dist/types-native/en-US.labels.d.ts.map +1 -0
  718. package/dist/typography/Code.js +2 -1
  719. package/dist/user-avatar.js +8 -7
  720. package/dist/utility/InstallPrompt.js +2 -2
  721. package/dist/utility/WorkflowStep.js +6 -4
  722. package/package.json +2 -2
  723. package/src/components/data-display/AlertDialog/AlertDialog.tsx +3 -1
  724. package/src/components/data-display/AlertDialog/AlertDialog.types.ts +6 -0
  725. package/src/components/data-display/Badge/Badge.native.tsx +2 -0
  726. package/src/components/data-display/Badge/Badge.types.native.ts +2 -0
  727. package/src/components/data-display/Badge/BadgeContent.native.tsx +4 -1
  728. package/src/components/data-display/Carousel/Carousel.chrome.tsx +1 -0
  729. package/src/components/data-display/Carousel/Carousel.parts.tsx +13 -9
  730. package/src/components/data-display/Carousel/Carousel.types.ts +2 -0
  731. package/src/components/data-display/Chip/Chip.native.tsx +9 -1
  732. package/src/components/data-display/Chip/Chip.types.native.ts +2 -0
  733. package/src/components/data-display/LazyImage/LazyImage.hooks.ts +1 -1
  734. package/src/components/data-display/LazyImage/LazyImage.tsx +4 -4
  735. package/src/components/data-display/LazyImage/LazyImage.types.ts +12 -0
  736. package/src/components/data-display/MapPreview/MapControlBar.tsx +7 -3
  737. package/src/components/data-display/MapPreview/MapLayers.tsx +2 -2
  738. package/src/components/data-display/MapPreview/MapMarkers.tsx +13 -4
  739. package/src/components/data-display/MapPreview/MapPreview.helpers.ts +13 -2
  740. package/src/components/data-display/MapPreview/MapPreview.tsx +7 -3
  741. package/src/components/data-display/Stepper/Stepper.tsx +41 -7
  742. package/src/components/data-display/Stepper/Stepper.types.ts +4 -0
  743. package/src/components/data-display/Table/Table.helpers.ts +1 -0
  744. package/src/components/data-display/Table/Table.tsx +4 -5
  745. package/src/components/data-display/Table/Table.types.ts +12 -0
  746. package/src/components/data-display/Table/TableParts.hooks.tsx +8 -1
  747. package/src/components/data-display/Table/TableParts.tsx +19 -5
  748. package/src/components/data-display/Timeline/Timeline.tsx +6 -1
  749. package/src/components/data-display/Timeline/Timeline.types.ts +3 -0
  750. package/src/components/data-display/Timeline/TimelineRow.tsx +11 -4
  751. package/src/components/feedback/Dialog/Dialog.base.ts +10 -0
  752. package/src/components/feedback/Dialog/Dialog.native.tsx +2 -0
  753. package/src/components/feedback/Dialog/Dialog.tsx +5 -1
  754. package/src/components/feedback/Dialog/DialogParts.native.tsx +17 -3
  755. package/src/components/feedback/Sonner/Sonner.tsx +16 -6
  756. package/src/components/feedback/Sonner/SonnerToast.tsx +4 -2
  757. package/src/components/feedback/StackedModal/StackedModal.parts.tsx +24 -3
  758. package/src/components/feedback/StackedModal/StackedModal.tsx +2 -1
  759. package/src/components/feedback/StackedModal/StackedModal.types.ts +5 -0
  760. package/src/components/feedback/Toast/Toast.tsx +5 -2
  761. package/src/components/feedback/Toast/Toast.types.ts +5 -0
  762. package/src/components/feedback/TutorialOverlay/TutorialOverlay.tsx +3 -1
  763. package/src/components/feedback/TutorialOverlay/TutorialStepBody.tsx +12 -3
  764. package/src/components/form/AddressAutocomplete/AddressAutocomplete.helpers.ts +12 -6
  765. package/src/components/form/AddressAutocomplete/AddressAutocomplete.hooks.ts +15 -2
  766. package/src/components/form/AddressAutocomplete/AddressAutocomplete.tsx +1 -0
  767. package/src/components/form/AddressAutocomplete/AddressAutocompleteField.tsx +9 -3
  768. package/src/components/form/AddressAutocomplete/useAddressPredictions.ts +6 -3
  769. package/src/components/form/AddressAutocomplete/useAddressSelection.ts +8 -4
  770. package/src/components/form/AddressAutocomplete/useCurrentLocation.ts +12 -8
  771. package/src/components/form/AddressAutocomplete/useGoogleMapsAPI.ts +8 -4
  772. package/src/components/form/Button/Button.native.loading.tsx +11 -2
  773. package/src/components/form/Button/Button.native.tsx +2 -2
  774. package/src/components/form/Button/Button.types.native.ts +2 -0
  775. package/src/components/form/Calendar/Calendar.md +7 -0
  776. package/src/components/form/Calendar/CalendarDay.tsx +13 -2
  777. package/src/components/form/Calendar/CalendarMonth.tsx +11 -2
  778. package/src/components/form/Checkbox/Checkbox.native.tsx +5 -2
  779. package/src/components/form/Checkbox/Checkbox.types.native.ts +2 -0
  780. package/src/components/form/Input/Input.native.tsx +13 -4
  781. package/src/components/form/Input/Input.types.native.ts +2 -0
  782. package/src/components/form/PhoneInput/PhoneInput.md +2 -2
  783. package/src/components/form/PhoneInput/PhoneInput.tsx +21 -10
  784. package/src/components/form/PhoneInput/PhoneInput.types.ts +1 -0
  785. package/src/components/form/PhoneInput/countries.ts +18 -1
  786. package/src/components/form/RichTextEditor/RichTextEditor.dom.ts +5 -3
  787. package/src/components/form/RichTextEditor/RichTextEditor.format.ts +3 -1
  788. package/src/components/form/RichTextEditor/RichTextEditor.hooks.ts +4 -1
  789. package/src/components/form/RichTextEditor/RichTextEditor.tsx +10 -4
  790. package/src/components/form/RichTextEditor/RichTextEditor.types.ts +7 -1
  791. package/src/components/form/RichTextEditor/RichTextEditorToolbar.tsx +29 -19
  792. package/src/components/form/Switch/Switch.native.tsx +4 -3
  793. package/src/components/form/Switch/Switch.types.native.ts +2 -0
  794. package/src/components/form/Textarea/TextareaRichEditor.tsx +2 -1
  795. package/src/components/form/UploadButton/UploadButton.hooks.ts +16 -6
  796. package/src/components/layout/ContentToolbar/ContentToolbar.types.ts +14 -0
  797. package/src/components/layout/ContentToolbar/FilterTrigger.tsx +10 -1
  798. package/src/components/layout/ContentToolbar/ViewSelector.tsx +15 -5
  799. package/src/components/layout/Dashboard/Dashboard.tsx +3 -1
  800. package/src/components/layout/Dashboard/Dashboard.types.ts +5 -0
  801. package/src/components/navigation/CommandPalette/CommandPalette.helpers.ts +6 -2
  802. package/src/components/navigation/CommandPalette/CommandPalette.hooks.ts +9 -1
  803. package/src/components/navigation/CommandPalette/CommandPalette.tsx +16 -6
  804. package/src/components/navigation/CommandPalette/CommandPaletteResults.tsx +3 -1
  805. package/src/components/navigation/NavigationMenu/NavigationMenu.shell.tsx +7 -4
  806. package/src/components/navigation/NavigationMenu/NavigationMenu.tsx +4 -0
  807. package/src/components/navigation/NavigationMenu/NavigationMenu.types.ts +13 -0
  808. package/src/components/navigation/NavigationMenu/NavigationMenuItem.tsx +2 -0
  809. package/src/components/navigation/NavigationMenu/NavigationStandardBody.tsx +24 -4
  810. package/src/components/typography/Code/Code.tsx +28 -6
  811. package/src/components/typography/Code/Code.types.ts +4 -0
  812. package/src/components/utility/WorkflowStep/WorkflowStep.helpers.ts +9 -1
  813. package/src/components/utility/WorkflowStep/WorkflowStep.parts.tsx +3 -2
  814. package/src/components/utility/WorkflowStep/WorkflowStep.tsx +3 -1
  815. package/src/components/utility/WorkflowStep/WorkflowStep.types.ts +10 -0
  816. package/src/components/utility/WorkflowStep/WorkflowStepRow.tsx +3 -0
  817. package/src/copy/data-display.ts +19 -0
  818. package/src/copy/feedback.ts +4 -0
  819. package/src/copy/form.ts +58 -0
  820. package/src/copy/labels.ts +120 -0
  821. package/src/copy/navigation.ts +12 -0
  822. package/src/copy/utility.ts +8 -1
  823. package/src/copy.ts +1 -0
  824. package/src/en-US.data-display.ts +9 -2
  825. package/src/en-US.feedback.ts +3 -1
  826. package/src/en-US.form.ts +27 -4
  827. package/src/en-US.labels.ts +76 -0
  828. package/src/en-US.navigation.ts +5 -1
  829. package/src/en-US.ts +1 -0
  830. package/src/en-US.utility.ts +3 -1
  831. package/src/locales.ts +4 -0
  832. package/src/pt-BR.data-display.ts +9 -2
  833. package/src/pt-BR.feedback.ts +3 -1
  834. package/src/pt-BR.form.ts +40 -4
  835. package/src/pt-BR.labels.ts +75 -0
  836. package/src/pt-BR.navigation.ts +5 -1
  837. package/src/pt-BR.ts +1 -0
  838. package/src/pt-BR.utility.ts +3 -1
  839. package/src/user-avatar/user-avatar.tsx +11 -2
  840. package/src/utils/resolve-labels.ts +12 -0
  841. package/dist/chunk-2ARVNCVU.js.map +0 -1
  842. package/dist/chunk-2ILXXBMG.js.map +0 -1
  843. package/dist/chunk-2TSGRQ2J.js.map +0 -1
  844. package/dist/chunk-33LAPBYB.js.map +0 -1
  845. package/dist/chunk-3JDP5OUR.js.map +0 -1
  846. package/dist/chunk-3VXS7O3X.js.map +0 -1
  847. package/dist/chunk-4MQ6XTIJ.js.map +0 -1
  848. package/dist/chunk-4NQXHPQR.js.map +0 -1
  849. package/dist/chunk-4VRDFZ4G.js.map +0 -1
  850. package/dist/chunk-5J7SA4CZ.js.map +0 -1
  851. package/dist/chunk-7QXEEZFO.js +0 -92
  852. package/dist/chunk-7QXEEZFO.js.map +0 -1
  853. package/dist/chunk-7SYYGXC7.js.map +0 -1
  854. package/dist/chunk-7VRCGWQL.js.map +0 -1
  855. package/dist/chunk-AG3DY5TH.js.map +0 -1
  856. package/dist/chunk-AYJ44VTJ.js.map +0 -1
  857. package/dist/chunk-AYP6ICAY.js.map +0 -1
  858. package/dist/chunk-B2JYQBO4.js.map +0 -1
  859. package/dist/chunk-BWZKLKDT.js +0 -1
  860. package/dist/chunk-C5JCARNE.js.map +0 -1
  861. package/dist/chunk-CZV6NVCA.js.map +0 -1
  862. package/dist/chunk-EUACQR6N.js.map +0 -1
  863. package/dist/chunk-FIOBPQL2.js.map +0 -1
  864. package/dist/chunk-FRGNTTPA.js.map +0 -1
  865. package/dist/chunk-FT6HBP5E.js.map +0 -1
  866. package/dist/chunk-H3AQQOTI.js.map +0 -1
  867. package/dist/chunk-HEBZ7Q7O.js.map +0 -1
  868. package/dist/chunk-HZK4DRGF.js.map +0 -1
  869. package/dist/chunk-ICRVLGWD.js.map +0 -1
  870. package/dist/chunk-INGPH3YQ.js.map +0 -1
  871. package/dist/chunk-JJVIZR6C.js.map +0 -1
  872. package/dist/chunk-KIL3OVLI.js.map +0 -1
  873. package/dist/chunk-KT3TF2LT.js.map +0 -1
  874. package/dist/chunk-KZXOIRUP.js.map +0 -1
  875. package/dist/chunk-LH4VKUZC.js.map +0 -1
  876. package/dist/chunk-LOLYI6PS.js.map +0 -1
  877. package/dist/chunk-LTTYUSJ2.js.map +0 -1
  878. package/dist/chunk-MA6SUE7F.js.map +0 -1
  879. package/dist/chunk-MTGEJRE4.js.map +0 -1
  880. package/dist/chunk-OE3SQOZV.js.map +0 -1
  881. package/dist/chunk-PU3HEWSG.js.map +0 -1
  882. package/dist/chunk-PY3RW5LC.js.map +0 -1
  883. package/dist/chunk-QWVETTIY.js.map +0 -1
  884. package/dist/chunk-RA6W37NZ.js.map +0 -1
  885. package/dist/chunk-RZCXYKY4.js.map +0 -1
  886. package/dist/chunk-SUZXPDUQ.js.map +0 -1
  887. package/dist/chunk-SV6IQ2YO.js.map +0 -1
  888. package/dist/chunk-T743IIER.js.map +0 -1
  889. package/dist/chunk-TTCVYY2B.js.map +0 -1
  890. package/dist/chunk-U4G3KY6L.js.map +0 -1
  891. package/dist/chunk-UGH2DDST.js.map +0 -1
  892. package/dist/chunk-UZOG6HNN.js.map +0 -1
  893. package/dist/chunk-VNOFFVRQ.js +0 -113
  894. package/dist/chunk-VNOFFVRQ.js.map +0 -1
  895. package/dist/chunk-VNVV6Y2X.js.map +0 -1
  896. package/dist/chunk-VQYR64QB.js.map +0 -1
  897. package/dist/chunk-VRPCZ3IE.js.map +0 -1
  898. package/dist/chunk-WC3W36AM.js.map +0 -1
  899. package/dist/chunk-WVZBYTIK.js.map +0 -1
  900. package/dist/chunk-XICRCPEQ.js.map +0 -1
  901. package/dist/chunk-XKSA4L2X.js.map +0 -1
  902. package/dist/chunk-XQWUVQ2F.js.map +0 -1
  903. package/dist/chunk-XYFBJH6F.js.map +0 -1
  904. package/dist/chunk-Y7YJYUNV.js.map +0 -1
  905. package/dist/chunk-YICNA5LG.js +0 -1
  906. package/dist/chunk-YLSDFW5O.js.map +0 -1
  907. package/dist/chunk-ZFBFQK2Y.js.map +0 -1
  908. package/dist/native/chunks/chunk-BXNZHDXK.js.map +0 -1
  909. /package/dist/{chunk-BWZKLKDT.js.map → _internal/copy/labels.js.map} +0 -0
  910. /package/dist/{chunk-YICNA5LG.js.map → _internal/en-US.labels.js.map} +0 -0
  911. /package/dist/{chunk-OPP6USJC.js.map → chunk-2FQF4CNE.js.map} +0 -0
  912. /package/dist/{chunk-BWFQEASG.js.map → chunk-2P5ZBBTL.js.map} +0 -0
  913. /package/dist/{chunk-QVO4SIS7.js.map → chunk-3W2B7IZG.js.map} +0 -0
  914. /package/dist/{chunk-PMRLFNBT.js.map → chunk-3XLSA3YB.js.map} +0 -0
  915. /package/dist/{chunk-7P5PNRBT.js.map → chunk-3YCV4EP7.js.map} +0 -0
  916. /package/dist/{chunk-Q6PRGXR2.js.map → chunk-4HBCWKIX.js.map} +0 -0
  917. /package/dist/{chunk-HN3PZTUK.js.map → chunk-4MKVGSHX.js.map} +0 -0
  918. /package/dist/{chunk-EERUSI52.js.map → chunk-4N3I7ZHQ.js.map} +0 -0
  919. /package/dist/{chunk-O6SAU5JA.js.map → chunk-4OTJ66ID.js.map} +0 -0
  920. /package/dist/{chunk-LG52LMAM.js.map → chunk-556LO6KA.js.map} +0 -0
  921. /package/dist/{chunk-LBZEPWYK.js.map → chunk-5GLOEGOM.js.map} +0 -0
  922. /package/dist/{chunk-JE6RZ5L6.js.map → chunk-5ZOJLYD2.js.map} +0 -0
  923. /package/dist/{chunk-GSXYXMCV.js.map → chunk-66BRUS2M.js.map} +0 -0
  924. /package/dist/{chunk-ALREWFRX.js.map → chunk-6DGNMASB.js.map} +0 -0
  925. /package/dist/{chunk-5752357K.js.map → chunk-6N2U67KF.js.map} +0 -0
  926. /package/dist/{chunk-VD72JGHA.js.map → chunk-73OYC22L.js.map} +0 -0
  927. /package/dist/{chunk-6PU3JYVY.js.map → chunk-775LIZXS.js.map} +0 -0
  928. /package/dist/{chunk-S4JXSC4D.js.map → chunk-7HZ6TJRH.js.map} +0 -0
  929. /package/dist/{chunk-CSD6SWBZ.js.map → chunk-A3Z7ZXLM.js.map} +0 -0
  930. /package/dist/{chunk-LI6XSM5D.js.map → chunk-A6V7KE45.js.map} +0 -0
  931. /package/dist/{chunk-YJBWDDW7.js.map → chunk-AAWVAQI2.js.map} +0 -0
  932. /package/dist/{chunk-44PBCQ7E.js.map → chunk-ABQZFK7M.js.map} +0 -0
  933. /package/dist/{chunk-EIMFA7KP.js.map → chunk-ANUO67JQ.js.map} +0 -0
  934. /package/dist/{chunk-PTQRJEPN.js.map → chunk-AOBQ3KYY.js.map} +0 -0
  935. /package/dist/{chunk-LODYTVOO.js.map → chunk-B25SHVWP.js.map} +0 -0
  936. /package/dist/{chunk-GTT5UKKO.js.map → chunk-BDJIP4HG.js.map} +0 -0
  937. /package/dist/{chunk-RS576GOH.js.map → chunk-BIUT3K6A.js.map} +0 -0
  938. /package/dist/{chunk-A5NXBOWS.js.map → chunk-BLHSLB5D.js.map} +0 -0
  939. /package/dist/{chunk-DYHOBKPU.js.map → chunk-BLZDSCIZ.js.map} +0 -0
  940. /package/dist/{chunk-E53MMMDA.js.map → chunk-BX6CF2UG.js.map} +0 -0
  941. /package/dist/{chunk-7HA7UH7O.js.map → chunk-C4OETF7K.js.map} +0 -0
  942. /package/dist/{chunk-64AOS2WA.js.map → chunk-CAHN7AMY.js.map} +0 -0
  943. /package/dist/{chunk-MSC43MCJ.js.map → chunk-CRFOAKQL.js.map} +0 -0
  944. /package/dist/{chunk-IQ2U5MVO.js.map → chunk-CSQWPDQV.js.map} +0 -0
  945. /package/dist/{chunk-7XSCEHGA.js.map → chunk-EOQ6EKTS.js.map} +0 -0
  946. /package/dist/{chunk-VEKTKCSB.js.map → chunk-FLJ3RIRP.js.map} +0 -0
  947. /package/dist/{chunk-Z5WUSI47.js.map → chunk-G3JFESKD.js.map} +0 -0
  948. /package/dist/{chunk-XRDH24J7.js.map → chunk-G6ET2DRL.js.map} +0 -0
  949. /package/dist/{chunk-O36MIQIO.js.map → chunk-GPQ22MPR.js.map} +0 -0
  950. /package/dist/{chunk-GRMBCJS6.js.map → chunk-H6R2L7VI.js.map} +0 -0
  951. /package/dist/{chunk-AMLHEKSV.js.map → chunk-HI7JPDD6.js.map} +0 -0
  952. /package/dist/{chunk-CW6Y32N2.js.map → chunk-I2CT4XIP.js.map} +0 -0
  953. /package/dist/{chunk-N34AOGK3.js.map → chunk-I3OKAQ5L.js.map} +0 -0
  954. /package/dist/{chunk-AEYLFBZT.js.map → chunk-I4NDZFTB.js.map} +0 -0
  955. /package/dist/{chunk-2ZRZTGWP.js.map → chunk-ISW5K72V.js.map} +0 -0
  956. /package/dist/{chunk-KARMRTTM.js.map → chunk-J2RUDZVJ.js.map} +0 -0
  957. /package/dist/{chunk-4M5GEKPM.js.map → chunk-JL4I7OQE.js.map} +0 -0
  958. /package/dist/{chunk-NBXG3SQ3.js.map → chunk-JSY234NY.js.map} +0 -0
  959. /package/dist/{chunk-HQCZT6TO.js.map → chunk-JVOEVTCZ.js.map} +0 -0
  960. /package/dist/{chunk-MBMZNSBP.js.map → chunk-JW7MN4DG.js.map} +0 -0
  961. /package/dist/{chunk-ZPACE34U.js.map → chunk-K53XSVQO.js.map} +0 -0
  962. /package/dist/{chunk-GBVNY2LG.js.map → chunk-KTXJQ4YJ.js.map} +0 -0
  963. /package/dist/{chunk-FCVPVEAS.js.map → chunk-KYE7I6NT.js.map} +0 -0
  964. /package/dist/{chunk-MM7BPTVV.js.map → chunk-KYT5G4K7.js.map} +0 -0
  965. /package/dist/{chunk-3V3Z4EML.js.map → chunk-L4FWEI2P.js.map} +0 -0
  966. /package/dist/{chunk-56JF5PZK.js.map → chunk-LYVTJLCF.js.map} +0 -0
  967. /package/dist/{chunk-M3DSPEZ3.js.map → chunk-M3ZNQTS5.js.map} +0 -0
  968. /package/dist/{chunk-GBKIGUNP.js.map → chunk-MGDCGNLC.js.map} +0 -0
  969. /package/dist/{chunk-BGYLL467.js.map → chunk-N3W6FZOC.js.map} +0 -0
  970. /package/dist/{chunk-BWFUZ4N2.js.map → chunk-NA3M7KDE.js.map} +0 -0
  971. /package/dist/{chunk-7JOLSD2W.js.map → chunk-P3QFJJJY.js.map} +0 -0
  972. /package/dist/{chunk-RCTHCXS6.js.map → chunk-PJNIJIE6.js.map} +0 -0
  973. /package/dist/{chunk-DXFKPY2K.js.map → chunk-PU3FQG7T.js.map} +0 -0
  974. /package/dist/{chunk-6ATXOJVQ.js.map → chunk-QADTI63U.js.map} +0 -0
  975. /package/dist/{chunk-7ZROYGUG.js.map → chunk-QOTMQLMW.js.map} +0 -0
  976. /package/dist/{chunk-NQCTANF3.js.map → chunk-QVDEGBME.js.map} +0 -0
  977. /package/dist/{chunk-YNDTLBOH.js.map → chunk-RQMYEPRR.js.map} +0 -0
  978. /package/dist/{chunk-3Z3WIQ5M.js.map → chunk-RZ3QMKM7.js.map} +0 -0
  979. /package/dist/{chunk-WA6F4NOO.js.map → chunk-SMANO5OD.js.map} +0 -0
  980. /package/dist/{chunk-5M2NWXN4.js.map → chunk-SRNBD6EV.js.map} +0 -0
  981. /package/dist/{chunk-R53ZOW4B.js.map → chunk-TGMMUKOF.js.map} +0 -0
  982. /package/dist/{chunk-SB2SEGR6.js.map → chunk-TIM4PXWN.js.map} +0 -0
  983. /package/dist/{chunk-555TUQ7E.js.map → chunk-TPGFR24B.js.map} +0 -0
  984. /package/dist/{chunk-MHLYX6QW.js.map → chunk-TRAMTVIO.js.map} +0 -0
  985. /package/dist/{chunk-QO7UJXXO.js.map → chunk-TVMSXL3R.js.map} +0 -0
  986. /package/dist/{chunk-VEBNL5MG.js.map → chunk-UGYBN6OO.js.map} +0 -0
  987. /package/dist/{chunk-2QO3BKUQ.js.map → chunk-UJT6AQHL.js.map} +0 -0
  988. /package/dist/{chunk-FTDGFWB5.js.map → chunk-UK3DSFMK.js.map} +0 -0
  989. /package/dist/{chunk-NYWAAXDX.js.map → chunk-URAXAKUI.js.map} +0 -0
  990. /package/dist/{chunk-XODBYGTH.js.map → chunk-V37QIB7B.js.map} +0 -0
  991. /package/dist/{chunk-7K23NEZO.js.map → chunk-V45JGJ3W.js.map} +0 -0
  992. /package/dist/{chunk-2MYSXWZQ.js.map → chunk-VKTF3GAP.js.map} +0 -0
  993. /package/dist/{chunk-KHIUYLKY.js.map → chunk-VQ6UB4MN.js.map} +0 -0
  994. /package/dist/{chunk-4HUSG5MR.js.map → chunk-VZVAP2ZR.js.map} +0 -0
  995. /package/dist/{chunk-4XBAEKQQ.js.map → chunk-W2RXXF7K.js.map} +0 -0
  996. /package/dist/{chunk-A2YLFKQU.js.map → chunk-W5WYTVLS.js.map} +0 -0
  997. /package/dist/{chunk-RHKQ2RSY.js.map → chunk-WUW6NDXC.js.map} +0 -0
  998. /package/dist/{chunk-EBCEDBHX.js.map → chunk-XDDKRACZ.js.map} +0 -0
  999. /package/dist/{chunk-ASZGMKB4.js.map → chunk-Y3TD7HOY.js.map} +0 -0
  1000. /package/dist/{chunk-HBHBRRSW.js.map → chunk-YBAK2WN5.js.map} +0 -0
  1001. /package/dist/{chunk-6RTE4UNO.js.map → chunk-YV4O7KDR.js.map} +0 -0
  1002. /package/dist/{chunk-Z5V5E3JW.js.map → chunk-ZIHSCBMN.js.map} +0 -0
  1003. /package/dist/native/chunks/{chunk-AVHGS66L.js.map → chunk-FGAX5BRS.js.map} +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/feedback/TutorialOverlay/TutorialOverlay.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport Fade from '@mui/material/Fade/index.js';\nimport LinearProgress from '@mui/material/LinearProgress/index.js';\nimport Paper from '@mui/material/Paper/index.js';\nimport Portal from '@mui/material/Portal/index.js';\nimport { alpha, keyframes, styled } from '@mui/material/styles/index.js';\nimport type { Theme } from '@mui/material/styles/index.js';\nimport type { FC} from 'react';\nimport React, { } from 'react';\n\nimport { scrim, sheen } from '../../../tokens/ink';\nimport { ABSOLUTE_INK } from '../../../tokens/ink.core';\nimport { rem, remPx, rems } from '../../../tokens/relative';\n\nimport { useTutorialOverlay } from './TutorialOverlay.hooks';\nimport { TutorialStepBody } from './TutorialStepBody';\nimport type { TutorialOverlayProps } from './TutorialOverlay.types';\n\n// Animation keyframes — the ring's sheen is the absolute white; its reach follows the type scale.\nconst pulseAnimation = (theme: Theme) => keyframes`\n 0% {\n box-shadow: 0 0 0 0 ${alpha(ABSOLUTE_INK.white, 0.7)};\n }\n 70% {\n box-shadow: 0 0 0 ${rem(theme, 20)} ${alpha(ABSOLUTE_INK.white, 0)};\n }\n 100% {\n box-shadow: 0 0 0 0 ${alpha(ABSOLUTE_INK.white, 0)};\n }\n`;\n\nconst floatAnimation = (theme: Theme) => keyframes`\n 0%, 100% {\n transform: translateY(0);\n }\n 50% {\n transform: translateY(${rem(theme, -10)});\n }\n`;\n\n// Styled components\nconst Overlay = styled(Box, {\n shouldForwardProp: (prop) => prop !== 'allowClickThrough' })<{ allowClickThrough?: boolean }>(({ theme, allowClickThrough }) => ({\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: theme.zIndex.modal + 100,\n pointerEvents: allowClickThrough ? 'none' : 'auto',\n transition: 'opacity 0.3s ease' }));\n\nconst Backdrop = styled(Box)(({ theme }) => ({\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n background: scrim(theme, 0.7),\n backdropFilter: `blur(${rem(theme, 2)})` }));\n\nconst Spotlight = styled(Box, {\n shouldForwardProp: (prop) => prop !== 'bounds' && prop !== 'padding' })<{ bounds: globalThis.DOMRect; padding: number }>(({ theme, bounds, padding }) => {\n // `bounds` is the target's measured rect; the design-px clearance joins it as px.\n const clearance = remPx(theme, padding);\n return {\n position: 'absolute',\n top: bounds.top - clearance,\n left: bounds.left - clearance,\n width: bounds.width + clearance * 2,\n height: bounds.height + clearance * 2,\n borderRadius: rem(theme, 8),\n border: `${rem(theme, 2)} solid ${sheen(theme, 0.5)}`,\n animation: `${pulseAnimation(theme)} 2s infinite`,\n pointerEvents: 'none',\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n inset: rem(theme, -2),\n borderRadius: rem(theme, 8),\n background: 'transparent',\n boxShadow: `${rems(theme, 0, 0, 0, 9999)} ${scrim(theme, 0.7)}` } };\n});\n\nconst TooltipContainer = styled(Paper, {\n shouldForwardProp: (prop) => prop !== 'placement' })<{ placement: string }>(({ theme, placement }) => ({\n position: 'absolute',\n maxWidth: rem(theme, 360),\n padding: theme.spacing(3),\n background: `linear-gradient(135deg, ${alpha(theme.palette.background.paper, 0.98)} 0%, ${alpha(theme.palette.background.paper, 0.95)} 100%)`,\n backdropFilter: `blur(${rem(theme, 20)})`,\n WebkitBackdropFilter: `blur(${rem(theme, 20)})`,\n border: `1px solid ${alpha(theme.palette.divider, 0.18)}`,\n boxShadow: theme.shadows[12],\n animation: `${floatAnimation(theme)} 3s ease-in-out infinite`,\n pointerEvents: 'auto',\n zIndex: theme.zIndex.modal + 101,\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n width: rem(theme, 12),\n height: rem(theme, 12),\n background: 'inherit',\n transform: 'rotate(45deg)',\n border: 'inherit',\n ...(placement === 'top' && {\n bottom: rem(theme, -7),\n left: '50%',\n marginLeft: rem(theme, -6),\n borderTop: 'none',\n borderLeft: 'none' }),\n ...(placement === 'bottom' && {\n top: rem(theme, -7),\n left: '50%',\n marginLeft: rem(theme, -6),\n borderBottom: 'none',\n borderRight: 'none' }),\n ...(placement === 'left' && {\n right: rem(theme, -7),\n top: '50%',\n marginTop: rem(theme, -6),\n borderLeft: 'none',\n borderBottom: 'none' }),\n ...(placement === 'right' && {\n left: rem(theme, -7),\n top: '50%',\n marginTop: rem(theme, -6),\n borderRight: 'none',\n borderTop: 'none' }) } }));\n\nconst ProgressBar = styled(LinearProgress)(({ theme }) => ({\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n height: rem(theme, 4),\n zIndex: theme.zIndex.modal + 102,\n '& .MuiLinearProgress-bar': {\n background: `linear-gradient(90deg, ${theme.palette.primary.main} 0%, ${theme.palette.primary.light} 100%)` } }));\n\ntype TutorialDefaultedKeys =\n | 'initialStep'\n | 'active'\n | 'showProgress'\n | 'allowKeyboardNavigation'\n | 'allowClickThrough'\n | 'variant'\n | 'allowSkip'\n | 'animated';\n\ntype ResolvedTutorialProps = TutorialOverlayProps &\n Required<Pick<TutorialOverlayProps, TutorialDefaultedKeys>>;\n\nconst TUTORIAL_DEFAULTS: Pick<TutorialOverlayProps, TutorialDefaultedKeys> = {\n initialStep: 0,\n active: true,\n showProgress: true,\n allowKeyboardNavigation: true,\n allowClickThrough: false,\n variant: 'tooltip',\n allowSkip: false,\n animated: true };\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 eight\n// branches into the component's own complexity budget.\nconst resolveProps = (props: TutorialOverlayProps): ResolvedTutorialProps =>\n ({\n ...TUTORIAL_DEFAULTS,\n ...(Object.fromEntries(\n Object.entries(props).filter(([, value]) => value !== undefined),\n ) as Partial<TutorialOverlayProps>) }) as ResolvedTutorialProps;\n\n// The dimming layer and the cut-out over the highlighted element. Local because\n// Backdrop and Spotlight cannot cross a module boundary (TS2742).\nconst TutorialLayers: React.FC<{\n variant: string;\n targetBounds: globalThis.DOMRect | null;\n isVisible: boolean;\n spotlightPadding?: number;\n}> = ({ variant, targetBounds, isVisible, spotlightPadding }) => {\n const isSpotlight = variant === 'spotlight' || variant === 'highlight';\n const dimmed = variant === 'modal' || isSpotlight;\n\n return (\n <>\n {dimmed && <Backdrop />}\n {targetBounds && isVisible && isSpotlight && (\n <Spotlight\n bounds={targetBounds}\n padding={spotlightPadding || 8}\n data-testid=\"tutorial-highlight\"\n />\n )}\n </>\n );\n};\n\n// The positioned card. Local because TooltipContainer cannot cross a module\n// boundary (TS2742).\nconst TutorialTooltip: React.FC<{\n tutorial: ReturnType<typeof useTutorialOverlay> & {\n currentStepData: TutorialOverlayProps['steps'][number];\n };\n steps: TutorialOverlayProps['steps'];\n allowSkip: boolean;\n showProgress: boolean;\n animated: boolean;\n requiresActionBeforeNext: boolean;\n copy: TutorialOverlayProps['copy'];\n}> = ({\n tutorial,\n steps,\n allowSkip,\n showProgress,\n animated,\n requiresActionBeforeNext,\n copy,\n}) => (\n <Fade in={tutorial.isVisible} timeout={300}>\n <TooltipContainer\n ref={tutorial.tooltipRef}\n placement={tutorial.actualPlacement}\n elevation={12}\n style={{\n top: tutorial.tooltipPosition.top,\n left: tutorial.tooltipPosition.left,\n animation: animated ? undefined : 'none' }}\n role=\"dialog\"\n aria-labelledby={`tutorial-title-${tutorial.currentStep}`}\n aria-describedby={`tutorial-content-${tutorial.currentStep}`}\n data-testid={`tutorial-step-${tutorial.currentStep}`}\n >\n <TutorialStepBody\n copy={copy}\n step={tutorial.currentStepData}\n currentStep={tutorial.currentStep}\n stepCount={steps.length}\n progress={tutorial.progress}\n isLastStep={tutorial.isLastStep}\n allowSkip={allowSkip}\n showProgress={showProgress}\n requiresActionBeforeNext={requiresActionBeforeNext}\n onNext={tutorial.handleNext}\n onPrev={tutorial.handlePrev}\n onSkip={tutorial.handleSkip}\n onRestart={tutorial.handleRestart}\n />\n </TooltipContainer>\n </Fade>\n);\n\nexport const TutorialOverlay: FC<TutorialOverlayProps> = (componentProps) => {\n const {\n copy,\n steps,\n onComplete,\n onSkip,\n onStepComplete,\n initialStep,\n active,\n showProgress,\n allowKeyboardNavigation,\n allowClickThrough,\n variant,\n allowSkip,\n animated } = resolveProps(componentProps);\n\n const tutorial = useTutorialOverlay({\n steps,\n initialStep,\n active,\n allowKeyboardNavigation,\n onComplete,\n onSkip,\n onStepComplete });\n const { currentStepData, isLastStep, isVisible, targetBounds, progress } = tutorial;\n\n const requiresActionBeforeNext = Boolean(currentStepData?.requiresAction) && !isLastStep;\n\n if (!active || !currentStepData) return null;\n\n // Handle empty steps array\n if (steps.length === 0) return null;\n\n return (\n <Portal>\n <Overlay allowClickThrough={allowClickThrough} data-testid=\"tutorial-overlay\">\n {showProgress && <ProgressBar variant=\"determinate\" value={progress} />}\n\n <TutorialLayers\n variant={variant}\n targetBounds={targetBounds}\n isVisible={isVisible}\n spotlightPadding={currentStepData.spotlightPadding}\n />\n\n <TutorialTooltip\n copy={copy}\n tutorial={{ ...tutorial, currentStepData }}\n steps={steps}\n allowSkip={allowSkip}\n showProgress={showProgress}\n animated={animated}\n requiresActionBeforeNext={requiresActionBeforeNext}\n />\n </Overlay>\n </Portal>\n );\n};\n\n// Export default\nexport default TutorialOverlay;\n"],"mappings":"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","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/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/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/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/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,113 +0,0 @@
1
- import {
2
- MAX_ZOOM,
3
- MIN_ZOOM
4
- } from "./chunk-H2J2MTRE.js";
5
- import {
6
- rem
7
- } from "./chunk-YKCAJ2TN.js";
8
-
9
- // src/components/data-display/MapPreview/MapControlBar.tsx
10
- import FullscreenIcon from "@mui/icons-material/Fullscreen";
11
- import LayersIcon from "@mui/icons-material/Layers";
12
- import CenterIcon from "@mui/icons-material/MyLocation";
13
- import ZoomInIcon from "@mui/icons-material/ZoomIn";
14
- import ZoomOutIcon from "@mui/icons-material/ZoomOut";
15
- import Box from "@mui/material/Box/index.js";
16
- import IconButton from "@mui/material/IconButton/index.js";
17
- import Tooltip from "@mui/material/Tooltip/index.js";
18
- import { alpha, styled } from "@mui/material/styles/index.js";
19
- import { jsx, jsxs } from "react/jsx-runtime";
20
- var MapControls = styled(Box)(({ theme }) => ({
21
- position: "absolute",
22
- top: theme.spacing(2),
23
- right: theme.spacing(2),
24
- zIndex: 1,
25
- display: "flex",
26
- flexDirection: "column",
27
- gap: theme.spacing(1)
28
- }));
29
- var ControlButton = styled(IconButton)(({ theme }) => ({
30
- background: alpha(theme.palette.background.paper, 0.95),
31
- backdropFilter: `blur(${rem(theme, 10)})`,
32
- WebkitBackdropFilter: `blur(${rem(theme, 10)})`,
33
- border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,
34
- boxShadow: theme.shadows[2],
35
- // Kept clickable while disabled so hover tooltips still work at the limits.
36
- pointerEvents: "auto",
37
- "&:hover": {
38
- background: theme.palette.background.paper,
39
- transform: "scale(1.05)"
40
- },
41
- "&:disabled": {
42
- opacity: 0.5,
43
- pointerEvents: "auto"
44
- }
45
- }));
46
- var MapControlBar = ({
47
- copy,
48
- zoom,
49
- mapType,
50
- onZoomIn,
51
- onZoomOut,
52
- onCenter,
53
- onToggleMapType,
54
- onToggleFullscreen
55
- }) => /* @__PURE__ */ jsxs(MapControls, { "data-testid": "map-controls", children: [
56
- /* @__PURE__ */ jsx(Tooltip, { title: copy.zoomIn, placement: "left", children: /* @__PURE__ */ jsx(
57
- ControlButton,
58
- {
59
- size: "small",
60
- onClick: onZoomIn,
61
- "aria-label": copy.zoomIn,
62
- "data-testid": "zoom-in-button",
63
- disabled: zoom >= MAX_ZOOM,
64
- children: /* @__PURE__ */ jsx(ZoomInIcon, { fontSize: "small" })
65
- }
66
- ) }),
67
- /* @__PURE__ */ jsx(Tooltip, { title: copy.zoomOut, placement: "left", children: /* @__PURE__ */ jsx(
68
- ControlButton,
69
- {
70
- size: "small",
71
- onClick: onZoomOut,
72
- "aria-label": copy.zoomOut,
73
- "data-testid": "zoom-out-button",
74
- disabled: zoom <= MIN_ZOOM,
75
- children: /* @__PURE__ */ jsx(ZoomOutIcon, { fontSize: "small" })
76
- }
77
- ) }),
78
- /* @__PURE__ */ jsx(Tooltip, { title: copy.center, placement: "left", children: /* @__PURE__ */ jsx(
79
- ControlButton,
80
- {
81
- size: "small",
82
- onClick: onCenter,
83
- "aria-label": copy.center,
84
- "data-testid": "center-button",
85
- children: /* @__PURE__ */ jsx(CenterIcon, { fontSize: "small" })
86
- }
87
- ) }),
88
- /* @__PURE__ */ jsx(Tooltip, { title: `Map type: ${mapType}`, placement: "left", children: /* @__PURE__ */ jsx(
89
- ControlButton,
90
- {
91
- size: "small",
92
- onClick: onToggleMapType,
93
- "aria-label": copy.mapType,
94
- "data-testid": "map-type-button",
95
- children: /* @__PURE__ */ jsx(LayersIcon, { fontSize: "small" })
96
- }
97
- ) }),
98
- /* @__PURE__ */ jsx(Tooltip, { title: copy.fullscreen, placement: "left", children: /* @__PURE__ */ jsx(
99
- ControlButton,
100
- {
101
- size: "small",
102
- onClick: onToggleFullscreen,
103
- "aria-label": copy.fullscreen,
104
- "data-testid": "fullscreen-button",
105
- children: /* @__PURE__ */ jsx(FullscreenIcon, { fontSize: "small" })
106
- }
107
- ) })
108
- ] });
109
-
110
- export {
111
- MapControlBar
112
- };
113
- //# sourceMappingURL=chunk-VNOFFVRQ.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/data-display/MapPreview/MapControlBar.tsx"],"sourcesContent":["import FullscreenIcon from '@mui/icons-material/Fullscreen';\nimport LayersIcon from '@mui/icons-material/Layers';\nimport CenterIcon from '@mui/icons-material/MyLocation';\nimport ZoomInIcon from '@mui/icons-material/ZoomIn';\nimport ZoomOutIcon from '@mui/icons-material/ZoomOut';\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 type { FC } from 'react';\nimport React from 'react';\n\nimport { MAX_ZOOM, MIN_ZOOM } from './MapPreview.constants';\nimport type { MapType } from './MapPreview.types';\nimport type { MapPreviewCopy } from '../../../copy';\nimport { rem } from '../../../tokens/relative';\n\n// Kept module-local: the inferred type of a styled() component cannot be named\n// across a module boundary here (TS2742).\nconst MapControls = styled(Box)(({ theme }) => ({\n position: 'absolute',\n top: theme.spacing(2),\n right: theme.spacing(2),\n zIndex: 1,\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(1),\n}));\n\nconst ControlButton = styled(IconButton)(({ theme }) => ({\n background: alpha(theme.palette.background.paper, 0.95),\n backdropFilter: `blur(${rem(theme, 10)})`,\n WebkitBackdropFilter: `blur(${rem(theme, 10)})`,\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n boxShadow: theme.shadows[2],\n // Kept clickable while disabled so hover tooltips still work at the limits.\n pointerEvents: 'auto',\n '&:hover': {\n background: theme.palette.background.paper,\n transform: 'scale(1.05)',\n },\n '&:disabled': {\n opacity: 0.5,\n pointerEvents: 'auto',\n },\n}));\n\nexport interface MapControlBarProps {\n /**\n * The six controls' names. Every one is a glyph with a `title` AND an\n * `aria-label`, so this object is both the tooltip and what a screen reader\n * reads — REQUIRED, because a default is one language for every adopter.\n */\n copy: MapPreviewCopy;\n zoom: number;\n mapType: MapType;\n onZoomIn: () => void;\n onZoomOut: () => void;\n onCenter: () => void;\n onToggleMapType: () => void;\n onToggleFullscreen: () => void;\n}\n\nexport const MapControlBar: FC<MapControlBarProps> = ({\n copy,\n zoom,\n mapType,\n onZoomIn,\n onZoomOut,\n onCenter,\n onToggleMapType,\n onToggleFullscreen,\n}) => (\n <MapControls data-testid=\"map-controls\">\n <Tooltip title={copy.zoomIn} placement=\"left\">\n <ControlButton\n size=\"small\"\n onClick={onZoomIn}\n aria-label={copy.zoomIn}\n data-testid=\"zoom-in-button\"\n disabled={zoom >= MAX_ZOOM}\n >\n <ZoomInIcon fontSize=\"small\" />\n </ControlButton>\n </Tooltip>\n <Tooltip title={copy.zoomOut} placement=\"left\">\n <ControlButton\n size=\"small\"\n onClick={onZoomOut}\n aria-label={copy.zoomOut}\n data-testid=\"zoom-out-button\"\n disabled={zoom <= MIN_ZOOM}\n >\n <ZoomOutIcon fontSize=\"small\" />\n </ControlButton>\n </Tooltip>\n <Tooltip title={copy.center} placement=\"left\">\n <ControlButton\n size=\"small\"\n onClick={onCenter}\n aria-label={copy.center}\n data-testid=\"center-button\"\n >\n <CenterIcon fontSize=\"small\" />\n </ControlButton>\n </Tooltip>\n <Tooltip title={`Map type: ${mapType}`} placement=\"left\">\n <ControlButton\n size=\"small\"\n onClick={onToggleMapType}\n aria-label={copy.mapType}\n data-testid=\"map-type-button\"\n >\n <LayersIcon fontSize=\"small\" />\n </ControlButton>\n </Tooltip>\n <Tooltip title={copy.fullscreen} placement=\"left\">\n <ControlButton\n size=\"small\"\n onClick={onToggleFullscreen}\n aria-label={copy.fullscreen}\n data-testid=\"fullscreen-button\"\n >\n <FullscreenIcon fontSize=\"small\" />\n </ControlButton>\n </Tooltip>\n </MapControls>\n);\n"],"mappings":";;;;;;;;;AAAA,OAAO,oBAAoB;AAC3B,OAAO,gBAAgB;AACvB,OAAO,gBAAgB;AACvB,OAAO,gBAAgB;AACvB,OAAO,iBAAiB;AACxB,OAAO,SAAS;AAChB,OAAO,gBAAgB;AACvB,OAAO,aAAa;AACpB,SAAS,OAAO,cAAc;AAiE5B,SASM,KATN;AAtDF,IAAM,cAAc,OAAO,GAAG,EAAE,CAAC,EAAE,MAAM,OAAO;AAAA,EAC9C,UAAU;AAAA,EACV,KAAK,MAAM,QAAQ,CAAC;AAAA,EACpB,OAAO,MAAM,QAAQ,CAAC;AAAA,EACtB,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,eAAe;AAAA,EACf,KAAK,MAAM,QAAQ,CAAC;AACtB,EAAE;AAEF,IAAM,gBAAgB,OAAO,UAAU,EAAE,CAAC,EAAE,MAAM,OAAO;AAAA,EACvD,YAAY,MAAM,MAAM,QAAQ,WAAW,OAAO,IAAI;AAAA,EACtD,gBAAgB,QAAQ,IAAI,OAAO,EAAE,CAAC;AAAA,EACtC,sBAAsB,QAAQ,IAAI,OAAO,EAAE,CAAC;AAAA,EAC5C,QAAQ,aAAa,MAAM,MAAM,QAAQ,SAAS,GAAG,CAAC;AAAA,EACtD,WAAW,MAAM,QAAQ,CAAC;AAAA;AAAA,EAE1B,eAAe;AAAA,EACf,WAAW;AAAA,IACT,YAAY,MAAM,QAAQ,WAAW;AAAA,IACrC,WAAW;AAAA,EACb;AAAA,EACA,cAAc;AAAA,IACZ,SAAS;AAAA,IACT,eAAe;AAAA,EACjB;AACF,EAAE;AAkBK,IAAM,gBAAwC,CAAC;AAAA,EACpD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MACE,qBAAC,eAAY,eAAY,gBACvB;AAAA,sBAAC,WAAQ,OAAO,KAAK,QAAQ,WAAU,QACrC;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,SAAS;AAAA,MACT,cAAY,KAAK;AAAA,MACjB,eAAY;AAAA,MACZ,UAAU,QAAQ;AAAA,MAElB,8BAAC,cAAW,UAAS,SAAQ;AAAA;AAAA,EAC/B,GACF;AAAA,EACA,oBAAC,WAAQ,OAAO,KAAK,SAAS,WAAU,QACtC;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,SAAS;AAAA,MACT,cAAY,KAAK;AAAA,MACjB,eAAY;AAAA,MACZ,UAAU,QAAQ;AAAA,MAElB,8BAAC,eAAY,UAAS,SAAQ;AAAA;AAAA,EAChC,GACF;AAAA,EACA,oBAAC,WAAQ,OAAO,KAAK,QAAQ,WAAU,QACrC;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,SAAS;AAAA,MACT,cAAY,KAAK;AAAA,MACjB,eAAY;AAAA,MAEZ,8BAAC,cAAW,UAAS,SAAQ;AAAA;AAAA,EAC/B,GACF;AAAA,EACA,oBAAC,WAAQ,OAAO,aAAa,OAAO,IAAI,WAAU,QAChD;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,SAAS;AAAA,MACT,cAAY,KAAK;AAAA,MACjB,eAAY;AAAA,MAEZ,8BAAC,cAAW,UAAS,SAAQ;AAAA;AAAA,EAC/B,GACF;AAAA,EACA,oBAAC,WAAQ,OAAO,KAAK,YAAY,WAAU,QACzC;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL,SAAS;AAAA,MACT,cAAY,KAAK;AAAA,MACjB,eAAY;AAAA,MAEZ,8BAAC,kBAAe,UAAS,SAAQ;AAAA;AAAA,EACnC,GACF;AAAA,GACF;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/utility/WorkflowStep/WorkflowStepRow.tsx"],"sourcesContent":["import React from 'react';\n\nimport {\n StepConnectorComponent,\n StepContentComponent,\n StepIndicatorComponent,\n StepItemRow,\n} from './WorkflowStep.parts';\nimport type { WorkflowStepItem, WorkflowStepProps } from './WorkflowStep.types';\n\ninterface StepRowProps {\n step: WorkflowStepItem;\n index: number;\n isLast: boolean;\n orientation: NonNullable<WorkflowStepProps['orientation']>;\n variant: NonNullable<WorkflowStepProps['variant']>;\n color: NonNullable<WorkflowStepProps['color']>;\n size: NonNullable<WorkflowStepProps['size']>;\n showNumbers: boolean;\n showIcons: boolean;\n showProgress: boolean;\n completedIcon?: React.ReactNode;\n errorIcon?: React.ReactNode;\n interactive: boolean;\n animated: boolean;\n disabled: boolean;\n onClick: (index: number, step: WorkflowStepItem) => void;\n dataTestId?: string;\n}\n\n/** One row of the workflow: its indicator, its text, and the rule leading to the next. */\nexport const StepRow: React.FC<StepRowProps> = ({\n step,\n index,\n isLast,\n orientation,\n variant,\n color,\n size,\n showNumbers,\n showIcons,\n showProgress,\n completedIcon,\n errorIcon,\n interactive,\n animated,\n disabled,\n onClick,\n dataTestId,\n}) => {\n const isCompleted = step.status === 'completed';\n\n return (\n <StepItemRow orientation={orientation} isLast={isLast}>\n <StepIndicatorComponent\n step={step}\n index={index}\n isActive={step.status === 'current'}\n isCompleted={isCompleted}\n isError={step.status === 'error'}\n variant={variant}\n color={color}\n size={size}\n showNumbers={showNumbers}\n showIcons={showIcons}\n completedIcon={completedIcon}\n errorIcon={errorIcon}\n interactive={interactive}\n animated={animated}\n disabled={disabled}\n onClick={onClick}\n data-testid={`${dataTestId}-indicator-${index}`}\n />\n\n <StepContentComponent\n step={step}\n index={index}\n orientation={orientation}\n interactive={interactive}\n disabled={disabled}\n onClick={onClick}\n data-testid={`${dataTestId}-content-${index}`}\n />\n\n {showProgress && !isLast && (\n <StepConnectorComponent\n isCompleted={isCompleted}\n orientation={orientation}\n variant={variant}\n color={color}\n animated={animated}\n data-testid={`${dataTestId}-connector-${index}`}\n />\n )}\n </StepItemRow>\n );\n};\n"],"mappings":";;;;;;;;AAqDI,SACE,KADF;AAtBG,IAAM,UAAkC,CAAC;AAAA,EAC9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,cAAc,KAAK,WAAW;AAEpC,SACE,qBAAC,eAAY,aAA0B,QACrC;AAAA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,UAAU,KAAK,WAAW;AAAA,QAC1B;AAAA,QACA,SAAS,KAAK,WAAW;AAAA,QACzB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,eAAa,GAAG,UAAU,cAAc,KAAK;AAAA;AAAA,IAC/C;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,eAAa,GAAG,UAAU,YAAY,KAAK;AAAA;AAAA,IAC7C;AAAA,IAEC,gBAAgB,CAAC,UAChB;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,eAAa,GAAG,UAAU,cAAc,KAAK;AAAA;AAAA,IAC/C;AAAA,KAEJ;AAEJ;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/feedback/Toast/Toast.tsx"],"sourcesContent":["import SuccessIcon from '@mui/icons-material/CheckCircle';\nimport CloseIcon from '@mui/icons-material/Close';\nimport ErrorIcon from '@mui/icons-material/Error';\nimport InfoIcon from '@mui/icons-material/Info';\nimport WarningIcon from '@mui/icons-material/Warning';\nimport type { Theme } from '@mui/material/styles/index.js';\nimport Alert from '@mui/material/Alert/index.js';\nimport Box from '@mui/material/Box/index.js';\nimport Button from '@mui/material/Button/index.js';\nimport CircularProgress from '@mui/material/CircularProgress/index.js';\nimport IconButton from '@mui/material/IconButton/index.js';\nimport Portal from '@mui/material/Portal/index.js';\nimport Slide from '@mui/material/Slide/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { alpha, useTheme } from '@mui/material/styles/index.js';\nimport React, { createContext, useCallback,useContext, useState } from 'react';\n\nimport { rem } from '../../../tokens/relative';\n\nimport type { ToastContainerProps, ToastContextType, ToastItem,ToastProps } from './Toast.types';\n\nconst ToastContext = createContext<ToastContextType | null>(null);\n\ntype PromiseToastOptions<T> = {\n loading: string;\n success: string | ((data: T) => string);\n error: string | ((error: unknown) => string);\n};\n\n// success/error may be a literal or a formatter over the settled value.\nconst resolveToastMessage = <T,>(message: string | ((value: T) => string), value: T): string =>\n typeof message === 'function' ? message(value) : message;\n\n// Shows a persistent \"loading\" toast for the life of a promise, then swaps it\n// for a success or error one. Lives outside the provider so the provider body\n// stays readable; it takes add/remove rather than reaching for context.\nconst trackPromiseWithToasts = async <T,>(\n promiseToResolve: Promise<T>,\n options: PromiseToastOptions<T>,\n addToast: (toast: Omit<ToastProps, 'id'>) => string,\n removeToast: (id: string) => void,\n): Promise<T> => {\n const toastId = addToast({\n message: options.loading,\n variant: 'promise',\n persistent: true,\n });\n\n try {\n const data = await promiseToResolve;\n\n removeToast(toastId);\n addToast({ message: resolveToastMessage(options.success, data), variant: 'success' });\n\n return data;\n } catch (error) {\n removeToast(toastId);\n addToast({ message: resolveToastMessage(options.error, error), variant: 'error' });\n\n throw error;\n }\n};\n\nexport const ToastProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\n const [toasts, setToasts] = useState<ToastItem[]>([]);\n\n const removeToast = useCallback((id: string) => {\n setToasts((prev) => prev.filter((toast) => toast.id !== id));\n }, []);\n\n const addToast = useCallback(\n (toast: Omit<ToastProps, 'id'>): string => {\n const id = `toast-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n const newToast: ToastItem = {\n ...toast,\n id,\n timestamp: Date.now(),\n };\n\n setToasts((prev) => [...prev, newToast]);\n\n if (!toast.persistent && toast.duration !== 0) {\n const duration = toast.duration ?? 5000;\n window.setTimeout(() => {\n removeToast(id);\n }, duration);\n }\n\n return id;\n },\n [removeToast],\n );\n\n const clearAllToasts = useCallback(() => {\n setToasts([]);\n }, []);\n\n const promise = useCallback(\n <T,>(promiseToResolve: Promise<T>, options: PromiseToastOptions<T>): Promise<T> =>\n trackPromiseWithToasts(promiseToResolve, options, addToast, removeToast),\n [addToast, removeToast],\n );\n\n const contextValue: ToastContextType = {\n toasts,\n addToast,\n removeToast,\n clearAllToasts,\n promise,\n };\n\n return <ToastContext.Provider value={contextValue}>{children}</ToastContext.Provider>;\n};\n\nexport const useToast = (): ToastContextType => {\n const context = useContext(ToastContext);\n if (!context) {\n throw new Error('useToast must be used within a ToastProvider');\n }\n return context;\n};\n\nconst renderVariantIcon = (theme: Theme, variant: ToastProps['variant']) => {\n switch (variant) {\n case 'success':\n return <SuccessIcon />;\n case 'error':\n return <ErrorIcon />;\n case 'warning':\n return <WarningIcon />;\n case 'info':\n return <InfoIcon />;\n case 'promise':\n return <CircularProgress size={rem(theme, 20)} />;\n default:\n return null;\n }\n};\n\n// 'default' and 'promise' have no MUI severity of their own; both read as info.\nconst toAlertSeverity = (variant: ToastProps['variant']) =>\n variant === 'default' || variant === 'promise' ? 'info' : variant;\n\nconst buildToastStyles = (theme: Theme, glass: boolean) => {\n const baseStyles = {\n borderRadius: theme.spacing(1.5),\n transition: theme.transitions.create(['background-color', 'backdrop-filter'], {\n duration: theme.transitions.duration.standard,\n }),\n };\n\n if (glass) {\n return {\n ...baseStyles,\n backgroundColor: alpha(theme.palette.background.paper, 0.1),\n backdropFilter: `blur(${rem(theme, 20)})`,\n border: `1px solid ${alpha(theme.palette.primary.main, 0.2)}`,\n };\n }\n\n return baseStyles;\n};\n\nexport const Toast: React.FC<ToastProps> = ({\n id = '',\n message,\n variant = 'default',\n closable = true,\n action,\n glass = false,\n onClose,\n dataTestId = 'toast',\n}) => {\n const theme = useTheme();\n\n const handleClose = () => {\n if (onClose && id) {\n onClose(id);\n }\n };\n\n return (\n <Alert\n data-testid={dataTestId}\n icon={renderVariantIcon(theme, variant)}\n severity={toAlertSeverity(variant)}\n onClose={closable ? handleClose : undefined}\n action={\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n {action && (\n <Button\n data-testid={`${dataTestId}-action`}\n color=\"inherit\"\n size=\"small\"\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n )}\n {closable && (\n <IconButton\n data-testid={`${dataTestId}-close`}\n aria-label=\"close\"\n color=\"inherit\"\n size=\"small\"\n onClick={handleClose}\n >\n <CloseIcon fontSize=\"small\" />\n </IconButton>\n )}\n </Box>\n }\n sx={buildToastStyles(theme, glass)}\n >\n <Typography data-testid={`${dataTestId}-message`} variant=\"body2\">{message}</Typography>\n </Alert>\n );\n};\n\nexport const ToastContainer: React.FC<ToastContainerProps> = ({\n position = 'top-right',\n maxToasts = 5,\n gap,\n className,\n dataTestId = 'toast-container',\n}) => {\n const theme = useTheme();\n const context = useContext(ToastContext);\n \n if (!context) {\n throw new Error('ToastContainer must be used within a ToastProvider');\n }\n\n const { toasts, removeToast } = context;\n\n const getPositionStyles = (): React.CSSProperties => {\n const baseStyles: React.CSSProperties = {\n position: 'fixed',\n zIndex: 9999,\n display: 'flex',\n flexDirection: 'column',\n // `gap` is design px (default 8), read through the type scale.\n gap: rem(theme, gap ?? 8),\n padding: rem(theme, 16),\n pointerEvents: 'none',\n };\n\n switch (position) {\n case 'top-left':\n return { ...baseStyles, top: 0, left: 0 };\n case 'top-center':\n return { ...baseStyles, top: 0, left: '50%', transform: 'translateX(-50%)' };\n case 'top-right':\n return { ...baseStyles, top: 0, right: 0 };\n case 'bottom-left':\n return { ...baseStyles, bottom: 0, left: 0, flexDirection: 'column-reverse' };\n case 'bottom-center':\n return {\n ...baseStyles,\n bottom: 0,\n left: '50%',\n transform: 'translateX(-50%)',\n flexDirection: 'column-reverse',\n };\n case 'bottom-right':\n return { ...baseStyles, bottom: 0, right: 0, flexDirection: 'column-reverse' };\n default:\n return { ...baseStyles, top: 0, right: 0 };\n }\n };\n\n return (\n <Portal>\n <Box data-testid={dataTestId} className={className} sx={getPositionStyles()}>\n {toasts.slice(0, maxToasts).map((toast, index) => (\n <Slide\n key={toast.id}\n direction={position.includes('left') ? 'right' : 'left'}\n in={true}\n timeout={300}\n style={{ pointerEvents: 'auto' }}\n >\n <Box data-testid={`${dataTestId}-item-${index}`}>\n <Toast {...toast} onClose={removeToast} dataTestId={toast.dataTestId || `toast-${index}`} />\n </Box>\n </Slide>\n ))}\n </Box>\n </Portal>\n );\n};\n"],"mappings":"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","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/AddressAutocomplete/useAddressSelection.ts"],"sourcesContent":["import type React from 'react';\nimport { useCallback } from 'react';\n\nimport { coordinatesOf, freeSoloAddress, toAddressDetails } from './AddressAutocomplete.mapper';\nimport type {\n AddressDetails,\n AddressOptionValue,\n AddressPrediction,\n} from './AddressAutocomplete.types';\nimport { MOCK_PLACE_DETAILS } from './mockPlaces';\nimport type { GoogleMapsService } from './useGoogleMapsAPI';\n\nconst MOCK_DETAILS_DELAY_MS = 50;\n\nconst PLACE_DETAIL_FIELDS = ['formatted_address', 'address_components', 'geometry'];\n\ninterface SelectionSink {\n setLoading: (loading: boolean) => void;\n setApiError: (message: string | null) => void;\n applyAddress: (address: AddressDetails) => void;\n}\n\nconst resolveMockPlace = (value: AddressPrediction, sink: SelectionSink) => {\n window.setTimeout(() => {\n sink.setLoading(false);\n\n const place = MOCK_PLACE_DETAILS[value.place_id];\n if (!place) {\n sink.setApiError('Address details not found');\n return;\n }\n\n sink.applyAddress(\n toAddressDetails({\n components: place.address_components,\n formatted: place.formatted_address || value.description,\n coordinates: coordinatesOf(place.geometry),\n }),\n );\n }, MOCK_DETAILS_DELAY_MS);\n};\n\nconst resolveLivePlace = (\n service: google.maps.places.PlacesService,\n value: AddressPrediction,\n sink: SelectionSink,\n) => {\n const request: google.maps.places.PlaceDetailsRequest = {\n placeId: value.place_id,\n fields: PLACE_DETAIL_FIELDS,\n };\n\n service.getDetails(request, (place, status) => {\n sink.setLoading(false);\n\n if (status !== google.maps.places.PlacesServiceStatus.OK || !place) {\n sink.setApiError('Failed to get address details');\n return;\n }\n\n sink.applyAddress(\n toAddressDetails({\n components: place.address_components ?? [],\n formatted: place.formatted_address || value.description,\n coordinates: coordinatesOf(place.geometry),\n }),\n );\n });\n};\n\nexport const useAddressSelection = ({\n services,\n useMockData,\n setLoading,\n setApiError,\n onSelect,\n applyAddress,\n}: {\n services: GoogleMapsService;\n useMockData: boolean;\n setLoading: (loading: boolean) => void;\n setApiError: (message: string | null) => void;\n onSelect: (address: AddressDetails) => void;\n applyAddress: (address: AddressDetails) => void;\n}) =>\n useCallback(\n (_event: React.SyntheticEvent, value: AddressOptionValue | null) => {\n // freeSolo text is reported as typed; there is no place to look up, and the\n // input already holds it.\n if (typeof value === 'string') {\n onSelect(freeSoloAddress(value));\n return;\n }\n\n if (!value) return;\n\n setLoading(true);\n const sink: SelectionSink = { setLoading, setApiError, applyAddress };\n\n if (useMockData && 'place_id' in value) {\n resolveMockPlace(value, sink);\n return;\n }\n\n if (!services.placesService) {\n setLoading(false);\n return;\n }\n\n resolveLivePlace(services.placesService, value, sink);\n },\n [services, useMockData, setLoading, setApiError, onSelect, applyAddress],\n );\n"],"mappings":";;;;;;;;;;AACA,SAAS,mBAAmB;AAW5B,IAAM,wBAAwB;AAE9B,IAAM,sBAAsB,CAAC,qBAAqB,sBAAsB,UAAU;AAQlF,IAAM,mBAAmB,CAAC,OAA0B,SAAwB;AAC1E,SAAO,WAAW,MAAM;AACtB,SAAK,WAAW,KAAK;AAErB,UAAM,QAAQ,mBAAmB,MAAM,QAAQ;AAC/C,QAAI,CAAC,OAAO;AACV,WAAK,YAAY,2BAA2B;AAC5C;AAAA,IACF;AAEA,SAAK;AAAA,MACH,iBAAiB;AAAA,QACf,YAAY,MAAM;AAAA,QAClB,WAAW,MAAM,qBAAqB,MAAM;AAAA,QAC5C,aAAa,cAAc,MAAM,QAAQ;AAAA,MAC3C,CAAC;AAAA,IACH;AAAA,EACF,GAAG,qBAAqB;AAC1B;AAEA,IAAM,mBAAmB,CACvB,SACA,OACA,SACG;AACH,QAAM,UAAkD;AAAA,IACtD,SAAS,MAAM;AAAA,IACf,QAAQ;AAAA,EACV;AAEA,UAAQ,WAAW,SAAS,CAAC,OAAO,WAAW;AAC7C,SAAK,WAAW,KAAK;AAErB,QAAI,WAAW,OAAO,KAAK,OAAO,oBAAoB,MAAM,CAAC,OAAO;AAClE,WAAK,YAAY,+BAA+B;AAChD;AAAA,IACF;AAEA,SAAK;AAAA,MACH,iBAAiB;AAAA,QACf,YAAY,MAAM,sBAAsB,CAAC;AAAA,QACzC,WAAW,MAAM,qBAAqB,MAAM;AAAA,QAC5C,aAAa,cAAc,MAAM,QAAQ;AAAA,MAC3C,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH;AAEO,IAAM,sBAAsB,CAAC;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAQE;AAAA,EACE,CAAC,QAA8B,UAAqC;AAGlE,QAAI,OAAO,UAAU,UAAU;AAC7B,eAAS,gBAAgB,KAAK,CAAC;AAC/B;AAAA,IACF;AAEA,QAAI,CAAC,MAAO;AAEZ,eAAW,IAAI;AACf,UAAM,OAAsB,EAAE,YAAY,aAAa,aAAa;AAEpE,QAAI,eAAe,cAAc,OAAO;AACtC,uBAAiB,OAAO,IAAI;AAC5B;AAAA,IACF;AAEA,QAAI,CAAC,SAAS,eAAe;AAC3B,iBAAW,KAAK;AAChB;AAAA,IACF;AAEA,qBAAiB,SAAS,eAAe,OAAO,IAAI;AAAA,EACtD;AAAA,EACA,CAAC,UAAU,aAAa,YAAY,aAAa,UAAU,YAAY;AACzE;","names":[]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/form/AddressAutocomplete/AddressAutocomplete.hooks.ts"],"sourcesContent":["import type React from 'react';\nimport { useCallback, useState } from 'react';\n\nimport type {\n AddressAutocompleteProps,\n AddressDetails,\n AddressOptionValue,\n} from './AddressAutocomplete.types';\nimport { useAddressPredictions } from './useAddressPredictions';\nimport { useAddressSelection } from './useAddressSelection';\nimport { useCurrentLocation } from './useCurrentLocation';\nimport { useGoogleMapsAPI } from './useGoogleMapsAPI';\n\nexport interface AddressAutocompleteState {\n inputValue: string;\n options: AddressOptionValue[];\n loading: boolean;\n apiError: string | null;\n mapsError: string | null;\n isLoaded: boolean;\n handleInputChange: (event: React.SyntheticEvent, value: string) => void;\n handleSelect: (event: React.SyntheticEvent, value: AddressOptionValue | null) => void;\n handleGetCurrentLocation: () => void;\n}\n\n// Owns the state the three Places concerns share — the field's text, whether a\n// request is in flight, and the last error — then hands each concern the slice it\n// writes to.\nexport const useAddressAutocomplete = ({\n defaultValue,\n googleMapsApiKey,\n restrictions,\n onSelect,\n}: {\n defaultValue: string;\n googleMapsApiKey: string;\n restrictions: AddressAutocompleteProps['restrictions'];\n onSelect: (address: AddressDetails) => void;\n}): AddressAutocompleteState => {\n const [inputValue, setInputValue] = useState(defaultValue);\n const [loading, setLoading] = useState(false);\n const [apiError, setApiError] = useState<string | null>(null);\n\n const { isLoaded, error: mapsError, services, useMockData } = useGoogleMapsAPI(googleMapsApiKey);\n\n // A resolved address both notifies the caller and becomes the field's text.\n const applyAddress = useCallback(\n (address: AddressDetails) => {\n onSelect(address);\n setInputValue(address.formatted);\n },\n [onSelect],\n );\n\n const { options, handleInputChange } = useAddressPredictions({\n isLoaded,\n services,\n restrictions,\n useMockData,\n setInputValue,\n setLoading,\n setApiError,\n });\n\n const handleSelect = useAddressSelection({\n services,\n useMockData,\n setLoading,\n setApiError,\n onSelect,\n applyAddress,\n });\n\n const handleGetCurrentLocation = useCurrentLocation({\n services,\n useMockData,\n setLoading,\n setApiError,\n applyAddress,\n });\n\n return {\n inputValue,\n options,\n loading,\n apiError,\n mapsError,\n isLoaded,\n handleInputChange,\n handleSelect,\n handleGetCurrentLocation,\n };\n};\n"],"mappings":";;;;;;;;;;;;;;AACA,SAAS,aAAa,gBAAgB;AA2B/B,IAAM,yBAAyB,CAAC;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAKgC;AAC9B,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,YAAY;AACzD,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAC5C,QAAM,CAAC,UAAU,WAAW,IAAI,SAAwB,IAAI;AAE5D,QAAM,EAAE,UAAU,OAAO,WAAW,UAAU,YAAY,IAAI,iBAAiB,gBAAgB;AAG/F,QAAM,eAAe;AAAA,IACnB,CAAC,YAA4B;AAC3B,eAAS,OAAO;AAChB,oBAAc,QAAQ,SAAS;AAAA,IACjC;AAAA,IACA,CAAC,QAAQ;AAAA,EACX;AAEA,QAAM,EAAE,SAAS,kBAAkB,IAAI,sBAAsB;AAAA,IAC3D;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,eAAe,oBAAoB;AAAA,IACvC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,QAAM,2BAA2B,mBAAmB;AAAA,IAClD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;","names":[]}