@12-apps/ui 6.77.1 → 6.78.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 (601) hide show
  1. package/NATIVE.md +1 -1
  2. package/components-catalog.md +8 -0
  3. package/dist/_internal/components/data-display/Badge/Badge.js +3 -3
  4. package/dist/_internal/components/data-display/Badge/Badge.styles.js +3 -3
  5. package/dist/_internal/components/data-display/Badge/BadgeContent.js +3 -3
  6. package/dist/_internal/components/data-display/CardKit/CardKebab.js +5 -5
  7. package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +5 -5
  8. package/dist/_internal/components/data-display/CardKit/use-row-confirm.js +5 -5
  9. package/dist/_internal/components/data-display/Carousel/Carousel.chrome.js +3 -3
  10. package/dist/_internal/components/data-display/Carousel/Carousel.js +3 -3
  11. package/dist/_internal/components/data-display/Carousel/Carousel.parts.js +3 -3
  12. package/dist/_internal/components/data-display/Carousel/Carousel.styles.js +3 -3
  13. package/dist/_internal/components/data-display/Chart/Chart.js +3 -3
  14. package/dist/_internal/components/data-display/Chart/SpecChart.js +3 -3
  15. package/dist/_internal/components/data-display/Chart/chart-context.js +3 -3
  16. package/dist/_internal/components/data-display/Chart/chart-internals.js +3 -3
  17. package/dist/_internal/components/data-display/Chart/chart-renderers.js +3 -3
  18. package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +57 -57
  19. package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +71 -71
  20. package/dist/_internal/components/data-display/DataViews/DeleteViewDialog.js +5 -5
  21. package/dist/_internal/components/data-display/DataViews/ManageViewsDialog.js +6 -6
  22. package/dist/_internal/components/data-display/DataViews/SaveViewModal.js +8 -8
  23. package/dist/_internal/components/data-display/DataViews/data-views-bar-controls.js +3 -3
  24. package/dist/_internal/components/data-display/DataViews/data-views-card-body.js +6 -6
  25. package/dist/_internal/components/data-display/DataViews/data-views-category-pill.js +19 -19
  26. package/dist/_internal/components/data-display/DataViews/data-views-columns.js +6 -6
  27. package/dist/_internal/components/data-display/DataViews/data-views-day-input.js +3 -3
  28. package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +6 -6
  29. package/dist/_internal/components/data-display/DataViews/data-views-empty.js +5 -5
  30. package/dist/_internal/components/data-display/DataViews/data-views-export.js +5 -5
  31. package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +30 -30
  32. package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +8 -8
  33. package/dist/_internal/components/data-display/DataViews/data-views-grid-helpers.js +5 -5
  34. package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +54 -54
  35. package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +31 -31
  36. package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +25 -25
  37. package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +28 -28
  38. package/dist/_internal/components/data-display/DataViews/data-views-number-input.js +3 -3
  39. package/dist/_internal/components/data-display/DataViews/data-views-pagination.js +5 -5
  40. package/dist/_internal/components/data-display/DataViews/data-views-quick-chip.js +3 -3
  41. package/dist/_internal/components/data-display/DataViews/data-views-range-pill.js +6 -6
  42. package/dist/_internal/components/data-display/DataViews/data-views-search.js +3 -3
  43. package/dist/_internal/components/data-display/DataViews/data-views-select-all-strip.js +5 -5
  44. package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +17 -17
  45. package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +18 -18
  46. package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +16 -16
  47. package/dist/_internal/components/data-display/DataViews/data-views-view-nav.js +5 -5
  48. package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +7 -7
  49. package/dist/_internal/components/data-display/FleetMap/FleetBody.js +7 -7
  50. package/dist/_internal/components/data-display/FleetMap/FleetCanvas.js +6 -6
  51. package/dist/_internal/components/data-display/FleetMap/FleetMap.fixtures.js +2 -2
  52. package/dist/_internal/components/data-display/FleetMap/FleetMap.js +9 -9
  53. package/dist/_internal/components/data-display/LazyImage/LazyImage.js +3 -3
  54. package/dist/_internal/components/data-display/MapPreview/MapLayers.js +4 -4
  55. package/dist/_internal/components/data-display/MapPreview/MapPreview.js +5 -5
  56. package/dist/_internal/components/data-display/MapPreview/MapSearchBar.js +3 -3
  57. package/dist/_internal/components/data-display/Sheet/Sheet.body.js +3 -3
  58. package/dist/_internal/components/data-display/Sheet/Sheet.js +3 -3
  59. package/dist/_internal/components/data-display/Sheet/Sheet.styles.js +3 -3
  60. package/dist/_internal/components/data-display/index.js +10 -10
  61. package/dist/_internal/components/feedback/ConfirmAction/ConfirmButton.js +5 -5
  62. package/dist/_internal/components/feedback/NotificationStatusNotice/NotificationStatusNotice.js +5 -5
  63. package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.js +56 -0
  64. package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.metrics.js +8 -0
  65. package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.metrics.js.map +1 -0
  66. package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.parts.js +52 -0
  67. package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.parts.js.map +1 -0
  68. package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.styles.js +58 -0
  69. package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.styles.js.map +1 -0
  70. package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.types.js +1 -0
  71. package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.types.js.map +1 -0
  72. package/dist/_internal/components/feedback/SequenceResolver/sequence-model.js +28 -0
  73. package/dist/_internal/components/feedback/SequenceResolver/sequence-model.js.map +1 -0
  74. package/dist/_internal/components/feedback/SequenceResolver/useSequenceRun.js +9 -0
  75. package/dist/_internal/components/feedback/SequenceResolver/useSequenceRun.js.map +1 -0
  76. package/dist/_internal/components/feedback/TutorialOverlay/TutorialOverlay.js +2 -2
  77. package/dist/_internal/components/feedback/index.js +40 -23
  78. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.hooks.js +4 -4
  79. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.js +11 -11
  80. package/dist/_internal/components/form/AddressAutocomplete/AddressAutocompleteField.js +5 -5
  81. package/dist/_internal/components/form/AddressAutocomplete/AddressFallbackField.js +4 -4
  82. package/dist/_internal/components/form/AddressAutocomplete/AddressInputField.js +4 -4
  83. package/dist/_internal/components/form/AddressAutocomplete/AddressTextField.js +3 -3
  84. package/dist/_internal/components/form/Autocomplete/Autocomplete.js +4 -4
  85. package/dist/_internal/components/form/Autocomplete/Autocomplete.parts.js +3 -3
  86. package/dist/_internal/components/form/Button/Button.js +4 -4
  87. package/dist/_internal/components/form/Button/Button.styles.js +3 -3
  88. package/dist/_internal/components/form/Calendar/Calendar.js +2 -2
  89. package/dist/_internal/components/form/CategorySelect/CategoryPanel.js +8 -8
  90. package/dist/_internal/components/form/CategorySelect/CategoryPanelFoot.js +4 -4
  91. package/dist/_internal/components/form/CategorySelect/CategoryPanelHead.js +4 -4
  92. package/dist/_internal/components/form/CategorySelect/CategoryPanelList.js +5 -5
  93. package/dist/_internal/components/form/CategorySelect/CategoryRows.js +4 -4
  94. package/dist/_internal/components/form/CategorySelect/CategorySelect.js +11 -11
  95. package/dist/_internal/components/form/CategorySelect/CategorySelect.styles.js +3 -3
  96. package/dist/_internal/components/form/CategorySelect/CategoryTrigger.js +4 -4
  97. package/dist/_internal/components/form/CepField/CepField.js +6 -6
  98. package/dist/_internal/components/form/CodeEditor/CodeEditor.js +3 -3
  99. package/dist/_internal/components/form/Command/Command.js +5 -5
  100. package/dist/_internal/components/form/Command/Command.styles.js +3 -3
  101. package/dist/_internal/components/form/CreatableSelect/CreatableSelect.js +3 -3
  102. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.hooks.js +5 -5
  103. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.js +9 -9
  104. package/dist/_internal/components/form/DateRangePicker/DateRangePicker.range.js +4 -4
  105. package/dist/_internal/components/form/DateRangePicker/DateRangePickerFields.js +5 -5
  106. package/dist/_internal/components/form/Input/Input.factory.js +4 -4
  107. package/dist/_internal/components/form/Input/Input.js +5 -5
  108. package/dist/_internal/components/form/Input/Input.styles.js +3 -3
  109. package/dist/_internal/components/form/InputOTP/InputOTP.js +4 -4
  110. package/dist/_internal/components/form/InputOTP/InputOTP.styles.js +3 -3
  111. package/dist/_internal/components/form/Label/Label.js +3 -3
  112. package/dist/_internal/components/form/Label/Label.styles.js +3 -3
  113. package/dist/_internal/components/form/Menubar/Menubar.item.js +3 -3
  114. package/dist/_internal/components/form/Menubar/Menubar.js +5 -5
  115. package/dist/_internal/components/form/Menubar/Menubar.styles.js +3 -3
  116. package/dist/_internal/components/form/Menubar/Menubar.toolbar.js +3 -3
  117. package/dist/_internal/components/form/NumberField/NumberField.js +6 -6
  118. package/dist/_internal/components/form/PhoneInput/PhoneInput.js +3 -3
  119. package/dist/_internal/components/form/PickerSheet/PickerSheet.js +6 -6
  120. package/dist/_internal/components/form/PickerSheet/PickerSheet.parts.js +4 -4
  121. package/dist/_internal/components/form/PickerSheet/PickerSheet.styles.js +3 -3
  122. package/dist/_internal/components/form/RadioGroup/RadioGroup.js +5 -5
  123. package/dist/_internal/components/form/RadioGroup/RadioGroup.styles.js +3 -3
  124. package/dist/_internal/components/form/RadioGroup/RadioGroup.variants.js +4 -4
  125. package/dist/_internal/components/form/RichTextEditor/RichTextEditor.js +2 -2
  126. package/dist/_internal/components/form/Select/Select.js +6 -6
  127. package/dist/_internal/components/form/Select/Select.menu.js +4 -4
  128. package/dist/_internal/components/form/Select/Select.searchable.js +4 -4
  129. package/dist/_internal/components/form/Select/Select.styles.js +3 -3
  130. package/dist/_internal/components/form/Textarea/Textarea.js +3 -3
  131. package/dist/_internal/components/form/Textarea/TextareaRichEditor.js +4 -4
  132. package/dist/_internal/components/form/Toggle/Toggle.js +4 -4
  133. package/dist/_internal/components/form/Toggle/Toggle.styles.js +3 -3
  134. package/dist/_internal/components/form/ToggleGroup/ToggleGroup.js +3 -3
  135. package/dist/_internal/components/form/UploadButton/UploadButton.js +2 -2
  136. package/dist/_internal/components/form/index.js +64 -64
  137. package/dist/_internal/components/form/total-form/Fields/CategoryField.js +12 -12
  138. package/dist/_internal/components/form/total-form/Fields/CepField.js +7 -7
  139. package/dist/_internal/components/form/total-form/Fields/SelectField.js +7 -7
  140. package/dist/_internal/components/form/total-form/Fields/TextField.js +6 -6
  141. package/dist/_internal/components/form/total-form/Fields/ToggleField.js +4 -4
  142. package/dist/_internal/components/form/total-form/Fields/index.js +30 -30
  143. package/dist/_internal/components/form/total-form/SubmitButton.js +5 -5
  144. package/dist/_internal/components/index.js +165 -155
  145. package/dist/_internal/components/layout/Box/Box.js +6 -6
  146. package/dist/_internal/components/layout/ContentToolbar/ColumnsMenu.js +3 -3
  147. package/dist/_internal/components/layout/ContentToolbar/FilterTrigger.js +3 -3
  148. package/dist/_internal/components/layout/ContentToolbar/MultiSelectDropdown.js +4 -4
  149. package/dist/_internal/components/layout/ContentToolbar/MultiSelectTriggers.js +3 -3
  150. package/dist/_internal/components/layout/ContentToolbar/SavedViewsMenu.js +3 -3
  151. package/dist/_internal/components/layout/ContentToolbar/SortByDropdown.js +3 -3
  152. package/dist/_internal/components/layout/ContentToolbar/ViewSelector.js +3 -3
  153. package/dist/_internal/components/layout/Screen/Screen.js +7 -7
  154. package/dist/_internal/components/layout/SettingCard/SettingCard.js +11 -11
  155. package/dist/_internal/components/layout/SettingCard/SettingCard.parts.js +9 -9
  156. package/dist/_internal/components/layout/SettingCard/SettingCard.summary.js +10 -10
  157. package/dist/_internal/components/layout/SettingCard/SettingGrid.js +10 -10
  158. package/dist/_internal/components/layout/SettingCard/SettingGroup.js +13 -13
  159. package/dist/_internal/components/layout/SettingCard/SettingSwitch.js +11 -11
  160. package/dist/_internal/components/layout/SettingCard/SettingToggle.js +13 -13
  161. package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.js +3 -3
  162. package/dist/_internal/components/layout/SettingsLayout/SettingsPanel.js +2 -2
  163. package/dist/_internal/components/layout/Stack/Stack.js +7 -7
  164. package/dist/_internal/components/layout/TableFilter/TableFilter.js +3 -3
  165. package/dist/_internal/components/layout/index.js +36 -36
  166. package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +6 -6
  167. package/dist/_internal/components/navigation/AppHeader/AppHeader.identity.js +3 -3
  168. package/dist/_internal/components/navigation/NavigationMenu/NavigationMegaSection.js +2 -2
  169. package/dist/_internal/components/navigation/NavigationMenu/NavigationMenu.js +4 -4
  170. package/dist/_internal/components/navigation/NavigationMenu/NavigationStandardBody.js +2 -2
  171. package/dist/_internal/components/navigation/Pagination/Pagination.js +4 -4
  172. package/dist/_internal/components/navigation/Pagination/PaginationParts.js +3 -3
  173. package/dist/_internal/components/navigation/SectionNav/SectionNav.bar.js +3 -3
  174. package/dist/_internal/components/navigation/SectionNav/SectionNav.js +6 -6
  175. package/dist/_internal/components/navigation/SectionNav/SectionNav.parts.js +3 -3
  176. package/dist/_internal/components/navigation/SectionNav/SectionNav.primary.js +3 -3
  177. package/dist/_internal/components/navigation/SectionNav/SectionNav.rail.js +3 -3
  178. package/dist/_internal/components/navigation/SectionNav/SectionNav.railCreate.js +3 -3
  179. package/dist/_internal/components/navigation/SectionNav/SectionNav.sheet.js +3 -3
  180. package/dist/_internal/components/navigation/SectionNav/__stories__/fixtures.js +3 -3
  181. package/dist/_internal/components/navigation/Tabs/Tabs.js +2 -2
  182. package/dist/_internal/components/navigation/Tabs/Tabs.styles.js +2 -2
  183. package/dist/_internal/components/navigation/index.js +29 -29
  184. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.helpers.js +3 -3
  185. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.js +3 -3
  186. package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.parts.js +3 -3
  187. package/dist/_internal/components/utility/WorkflowStep/WorkflowStepRow.js +3 -3
  188. package/dist/_internal/components/utility/index.js +7 -7
  189. package/dist/_internal/en-US.data-display.js +2 -2
  190. package/dist/_internal/icons/Icon.js +6 -6
  191. package/dist/_internal/provider/UiProvider.js +5 -5
  192. package/dist/_internal/provider/mui-bridge.js +4 -4
  193. package/dist/_internal/provider/use-ui-theme.js +5 -5
  194. package/dist/_internal/social-login-button/social-login-button.js +5 -5
  195. package/dist/_internal/tokens/density.js +3 -3
  196. package/dist/_internal/tokens/field-height.js +2 -2
  197. package/dist/_internal/user-avatar/user-avatar.js +5 -5
  198. package/dist/charts.js +3 -3
  199. package/dist/{chunk-75FHDUJW.js → chunk-2D4WKET2.js} +5 -5
  200. package/dist/{chunk-3O2OJW4O.js → chunk-2QO3BKUQ.js} +8 -8
  201. package/dist/{chunk-MA6ENJDP.js → chunk-2VHAD4NE.js} +3 -3
  202. package/dist/{chunk-FJ3UZ4RC.js → chunk-33MMQHYU.js} +2 -2
  203. package/dist/{chunk-CBO46LJH.js → chunk-3HSLEUVW.js} +5 -5
  204. package/dist/chunk-3LUT2C5M.js +122 -0
  205. package/dist/chunk-3LUT2C5M.js.map +1 -0
  206. package/dist/{chunk-6VTOGR36.js → chunk-3XZZSHE5.js} +5 -5
  207. package/dist/{chunk-BLINEMVO.js → chunk-3YLRR4JM.js} +3 -3
  208. package/dist/{chunk-PD7MKJCM.js → chunk-4AJY7HMH.js} +5 -5
  209. package/dist/{chunk-VWVA74JY.js → chunk-4HUSG5MR.js} +2 -2
  210. package/dist/{chunk-7CPLKAL6.js → chunk-4M5GEKPM.js} +2 -2
  211. package/dist/{chunk-WEMI4PV7.js → chunk-4MQ6XTIJ.js} +5 -5
  212. package/dist/{chunk-3MQZBBUW.js → chunk-5463SZOH.js} +3 -3
  213. package/dist/{chunk-CAX3NFFE.js → chunk-555TUQ7E.js} +4 -4
  214. package/dist/{chunk-5KGABAQB.js → chunk-5752357K.js} +4 -4
  215. package/dist/{chunk-ZOLUUX4B.js → chunk-5J7SA4CZ.js} +4 -4
  216. package/dist/chunk-5UBP2DJ4.js +102 -0
  217. package/dist/chunk-5UBP2DJ4.js.map +1 -0
  218. package/dist/{chunk-364NH2NY.js → chunk-5USHYSCO.js} +21 -12
  219. package/dist/chunk-5USHYSCO.js.map +1 -0
  220. package/dist/{chunk-5AQLJ4AL.js → chunk-62XVHRTX.js} +2 -2
  221. package/dist/{chunk-SO5OU2ZV.js → chunk-64AOS2WA.js} +2 -2
  222. package/dist/{chunk-75I42HHE.js → chunk-66QQ7YQN.js} +2 -2
  223. package/dist/{chunk-7KZEQJPQ.js → chunk-6J7RGNSF.js} +4 -4
  224. package/dist/{chunk-GCBWZ3MX.js → chunk-6LMYQJZP.js} +2 -2
  225. package/dist/{chunk-4SQ2WCZA.js → chunk-6MOJK2QT.js} +2 -2
  226. package/dist/{chunk-Q6MZHT2F.js → chunk-6RTE4UNO.js} +5 -5
  227. package/dist/{chunk-NIZUFPV3.js → chunk-72GJRV5J.js} +2 -2
  228. package/dist/{chunk-LYB6YYTG.js → chunk-72OG3AGH.js} +2 -2
  229. package/dist/{chunk-Y46R26TE.js → chunk-7AC2UGTU.js} +3 -3
  230. package/dist/{chunk-NPSARV2I.js → chunk-7P5PNRBT.js} +8 -8
  231. package/dist/{chunk-RPKUZDRY.js → chunk-7QXEEZFO.js} +2 -2
  232. package/dist/{chunk-SUXT6QAY.js → chunk-7RG37FVT.js} +2 -2
  233. package/dist/{chunk-5F7HYYGM.js → chunk-7ZROYGUG.js} +3 -3
  234. package/dist/{chunk-LY5I3ZSV.js → chunk-A2YLFKQU.js} +4 -4
  235. package/dist/{chunk-BEYLI32I.js → chunk-A5NXBOWS.js} +7 -7
  236. package/dist/{chunk-7TKQIZ3K.js → chunk-AAREDFH6.js} +2 -2
  237. package/dist/{chunk-4QGPRORO.js → chunk-AEYLFBZT.js} +3 -3
  238. package/dist/{chunk-VPGDYI63.js → chunk-AKBL7S7A.js} +5 -5
  239. package/dist/{chunk-6DGNMASB.js → chunk-ALREWFRX.js} +4 -4
  240. package/dist/{chunk-NQ6P7O7C.js → chunk-ASZGMKB4.js} +2 -2
  241. package/dist/{chunk-CWCNLITK.js → chunk-AXZCCX7O.js} +2 -2
  242. package/dist/{chunk-FVL6U72V.js → chunk-B2JYQBO4.js} +2 -2
  243. package/dist/{chunk-IU2WSJ4F.js → chunk-BARTUKJU.js} +2 -2
  244. package/dist/{chunk-4JNC5AEF.js → chunk-BTGXHQX3.js} +2 -2
  245. package/dist/{chunk-VMTOLAZ5.js → chunk-BWFQEASG.js} +5 -5
  246. package/dist/{chunk-MKBIIYJM.js → chunk-C47LBKEG.js} +4 -4
  247. package/dist/{chunk-2K2Q7VGV.js → chunk-C5JCARNE.js} +2 -2
  248. package/dist/{chunk-LBEZ7A3F.js → chunk-C7CIUDXZ.js} +3 -3
  249. package/dist/chunk-CHP3QIS3.js +218 -0
  250. package/dist/chunk-CHP3QIS3.js.map +1 -0
  251. package/dist/{chunk-YWXCLPCX.js → chunk-CO7GH3W7.js} +2 -2
  252. package/dist/{chunk-ARVLS57B.js → chunk-CW6Y32N2.js} +2 -2
  253. package/dist/{chunk-LZJHHMOF.js → chunk-DRJL3JHR.js} +2 -2
  254. package/dist/chunk-DTNXP7ZS.js +1 -0
  255. package/dist/chunk-DTNXP7ZS.js.map +1 -0
  256. package/dist/{chunk-7IXXASQ6.js → chunk-DXFKPY2K.js} +4 -4
  257. package/dist/chunk-E53MMMDA.js +209 -0
  258. package/dist/chunk-E53MMMDA.js.map +1 -0
  259. package/dist/{chunk-FR2RJXHS.js → chunk-EBCEDBHX.js} +3 -3
  260. package/dist/{chunk-BRHRK7BK.js → chunk-ENRB6PIN.js} +2 -2
  261. package/dist/{chunk-J5QNJERV.js → chunk-F6IMOMA3.js} +3 -3
  262. package/dist/{chunk-YTDUIU7X.js → chunk-F6LZHF4O.js} +2 -2
  263. package/dist/{chunk-725H45MT.js → chunk-FAIQCGSL.js} +5 -5
  264. package/dist/{chunk-HVGQH54G.js → chunk-FTDGFWB5.js} +5 -5
  265. package/dist/{chunk-P7VAMJFJ.js → chunk-GFXS5PJL.js} +3 -3
  266. package/dist/{chunk-YEKPQAOW.js → chunk-GQ2T44BC.js} +2 -2
  267. package/dist/{chunk-JA3WJPXH.js → chunk-GSXYXMCV.js} +3 -3
  268. package/dist/{chunk-IZ7JTG3Z.js → chunk-GTT5UKKO.js} +4 -4
  269. package/dist/{chunk-WDSJ6SVY.js → chunk-GXSHLMT4.js} +2 -2
  270. package/dist/chunk-HHPFWEJY.js +28 -0
  271. package/dist/chunk-HHPFWEJY.js.map +1 -0
  272. package/dist/{chunk-ULK4AGG4.js → chunk-HTGK7QCX.js} +3 -3
  273. package/dist/{chunk-Y3LK6ZQG.js → chunk-I2KAN3YB.js} +2 -2
  274. package/dist/{chunk-M5DBOM7R.js → chunk-ICRVLGWD.js} +2 -2
  275. package/dist/{chunk-BEHM2VLH.js → chunk-IQ2U5MVO.js} +7 -7
  276. package/dist/{chunk-LABIUXDM.js → chunk-J7C7FPVO.js} +2 -2
  277. package/dist/{chunk-CYH5QQUP.js → chunk-KHIUYLKY.js} +4 -4
  278. package/dist/{chunk-PPEHBI5O.js → chunk-KXTNTDRD.js} +2 -2
  279. package/dist/{chunk-IBOFASAZ.js → chunk-LC6ND4ET.js} +2 -2
  280. package/dist/{chunk-BF3SGOWT.js → chunk-LG52LMAM.js} +3 -3
  281. package/dist/{chunk-3Y7LSMGV.js → chunk-LH4VKUZC.js} +2 -2
  282. package/dist/{chunk-CFDWKQZT.js → chunk-LODYTVOO.js} +2 -2
  283. package/dist/{chunk-Y2CCXB7R.js → chunk-LUNN5GTB.js} +2 -2
  284. package/dist/{chunk-ACBHZG3Z.js → chunk-M74YHHJE.js} +5 -5
  285. package/dist/{chunk-BGGVYKVZ.js → chunk-MA6SUE7F.js} +4 -4
  286. package/dist/{chunk-AT6UKTH4.js → chunk-MHFXJRLD.js} +2 -2
  287. package/dist/{chunk-3BDMYTH6.js → chunk-MHLYX6QW.js} +4 -4
  288. package/dist/{chunk-FXECKKPW.js → chunk-MO4FFK62.js} +3 -3
  289. package/dist/{chunk-SAKSIN7E.js → chunk-MQVIYTH5.js} +2 -2
  290. package/dist/{chunk-NKBCUR4V.js → chunk-MSC43MCJ.js} +2 -2
  291. package/dist/{chunk-RHVJ3L4U.js → chunk-MWPD2BXO.js} +2 -2
  292. package/dist/{chunk-TSID4257.js → chunk-N34AOGK3.js} +7 -7
  293. package/dist/{chunk-NZBEE2PR.js → chunk-N3LW5ER5.js} +3 -3
  294. package/dist/{chunk-Q3HYEAVQ.js → chunk-N3ZOZWP5.js} +2 -2
  295. package/dist/{chunk-AO4NDR6W.js → chunk-NTO5DALI.js} +2 -2
  296. package/dist/{chunk-VQSBZPKO.js → chunk-NYWAAXDX.js} +2 -2
  297. package/dist/{chunk-CHGUN7OF.js → chunk-O6SAU5JA.js} +2 -2
  298. package/dist/{chunk-3FDSXSEP.js → chunk-OE3SQOZV.js} +2 -2
  299. package/dist/{chunk-VLH3IMJG.js → chunk-OFXCSLGX.js} +2 -2
  300. package/dist/{chunk-E54XIRY2.js → chunk-PIP7XII2.js} +5 -5
  301. package/dist/{chunk-QWSYHENP.js → chunk-PTQRJEPN.js} +5 -5
  302. package/dist/{chunk-S5VIN3EB.js → chunk-Q6PRGXR2.js} +2 -2
  303. package/dist/{chunk-DQ3O252B.js → chunk-QCNUMOTL.js} +2 -2
  304. package/dist/{chunk-XZE5FIRB.js → chunk-QCQWOSSD.js} +2 -2
  305. package/dist/{chunk-TRYYYWV3.js → chunk-QIYX33SH.js} +9 -9
  306. package/dist/{chunk-RGVNXES5.js → chunk-QQHZBJMU.js} +4 -4
  307. package/dist/{chunk-XZFTRGRW.js → chunk-QVO4SIS7.js} +2 -2
  308. package/dist/{chunk-WJEJ65TF.js → chunk-QYX4567K.js} +2 -2
  309. package/dist/{chunk-7JKDB5J5.js → chunk-R53ZOW4B.js} +4 -4
  310. package/dist/{chunk-HSIUVFXE.js → chunk-RA6W37NZ.js} +2 -2
  311. package/dist/{chunk-HDTFLW42.js → chunk-REMODSVN.js} +2 -2
  312. package/dist/{chunk-P4LR2GLN.js → chunk-RIDCGFGM.js} +2 -2
  313. package/dist/{chunk-RNQ2PGBB.js → chunk-RKVS5AA6.js} +3 -3
  314. package/dist/{chunk-MKNW4FRR.js → chunk-RS576GOH.js} +7 -7
  315. package/dist/{chunk-NIENIKZ5.js → chunk-SCAPSX6T.js} +2 -2
  316. package/dist/{chunk-HG2YLNGJ.js → chunk-SFVHZAGE.js} +2 -2
  317. package/dist/{chunk-5HFB4WFE.js → chunk-T743IIER.js} +3 -3
  318. package/dist/{chunk-C6LW34TV.js → chunk-THD3N4BJ.js} +2 -2
  319. package/dist/{chunk-IDRVQVDL.js → chunk-TNDTEI6D.js} +2 -2
  320. package/dist/{chunk-U2QV4TTZ.js → chunk-TR7ZA67L.js} +2 -2
  321. package/dist/chunk-TWAKMV5B.js +1 -0
  322. package/dist/chunk-TWAKMV5B.js.map +1 -0
  323. package/dist/{chunk-EP3DRILI.js → chunk-U36BXXQ7.js} +2 -2
  324. package/dist/{chunk-AJ5LXKLQ.js → chunk-U4G3KY6L.js} +6 -6
  325. package/dist/{chunk-UAFSEZ2E.js → chunk-UQUN2NGE.js} +2 -2
  326. package/dist/{chunk-6A4PTK5Q.js → chunk-V4JMZZGH.js} +5 -5
  327. package/dist/{chunk-72L5C74V.js → chunk-VBGC7G4F.js} +3 -3
  328. package/dist/{chunk-IWJTLCTF.js → chunk-VD72JGHA.js} +3 -3
  329. package/dist/{chunk-TVXUOJAL.js → chunk-VJG43WKU.js} +2 -2
  330. package/dist/{chunk-H7QTDKA6.js → chunk-VMN6KG2U.js} +2 -2
  331. package/dist/{chunk-YRF7WFAQ.js → chunk-WA6F4NOO.js} +8 -8
  332. package/dist/{chunk-HOJL2GKW.js → chunk-WC3W36AM.js} +4 -4
  333. package/dist/{chunk-OQW4OERS.js → chunk-WNIL2KTB.js} +3 -3
  334. package/dist/{chunk-NQYC7V5N.js → chunk-WOSUYOAU.js} +5 -5
  335. package/dist/{chunk-DDNUPFPE.js → chunk-WT7VZDTI.js} +5 -5
  336. package/dist/{chunk-DOWVAC4U.js → chunk-XODBYGTH.js} +2 -2
  337. package/dist/{chunk-HDXUQKJ5.js → chunk-XRDH24J7.js} +2 -2
  338. package/dist/{chunk-DQKMOGYZ.js → chunk-XYFBJH6F.js} +4 -4
  339. package/dist/{chunk-SZSS5KKX.js → chunk-XYSE2QZN.js} +2 -2
  340. package/dist/{chunk-MIUPTZS6.js → chunk-Y4KR4LT2.js} +2 -2
  341. package/dist/{chunk-D7PVIC33.js → chunk-Y7YJYUNV.js} +4 -4
  342. package/dist/{chunk-GHP5JLL3.js → chunk-YASSCBWN.js} +2 -2
  343. package/dist/{chunk-QLJU7UUI.js → chunk-YH7G44WL.js} +2 -2
  344. package/dist/chunk-YJBWDDW7.js +162 -0
  345. package/dist/chunk-YJBWDDW7.js.map +1 -0
  346. package/dist/{chunk-FS55MQ4Q.js → chunk-YNDTLBOH.js} +2 -2
  347. package/dist/{chunk-6E4L53DF.js → chunk-YZX4DVRS.js} +2 -2
  348. package/dist/{chunk-NDQJDA7O.js → chunk-Z7COWR4K.js} +2 -2
  349. package/dist/{chunk-NYA26GV2.js → chunk-ZCCKIWZU.js} +2 -2
  350. package/dist/{chunk-J32XJALK.js → chunk-ZTPB7PVI.js} +2 -2
  351. package/dist/{chunk-NKHNUTTY.js → chunk-ZXHODKHH.js} +3 -3
  352. package/dist/{chunk-7LOCLC24.js → chunk-ZYKDUKAH.js} +2 -2
  353. package/dist/data-display/Badge.js +3 -3
  354. package/dist/data-display/CardKit.js +6 -6
  355. package/dist/data-display/Carousel.js +3 -3
  356. package/dist/data-display/Chart.js +3 -3
  357. package/dist/data-display/DataViews.js +71 -71
  358. package/dist/data-display/FleetMap.js +9 -9
  359. package/dist/data-display/LazyImage.js +3 -3
  360. package/dist/data-display/MapPreview.js +5 -5
  361. package/dist/data-display/Sheet.js +3 -3
  362. package/dist/en-US.js +6 -6
  363. package/dist/feedback/ConfirmAction.js +5 -5
  364. package/dist/feedback/NotificationStatusNotice.js +5 -5
  365. package/dist/feedback/SequenceResolver.js +56 -0
  366. package/dist/feedback/SequenceResolver.js.map +1 -0
  367. package/dist/feedback/TutorialOverlay.js +2 -2
  368. package/dist/form/AddressAutocomplete.js +11 -11
  369. package/dist/form/Autocomplete.js +4 -4
  370. package/dist/form/Button.js +4 -4
  371. package/dist/form/Calendar.js +2 -2
  372. package/dist/form/CategorySelect.js +11 -11
  373. package/dist/form/CepField.js +6 -6
  374. package/dist/form/CodeEditor.js +3 -3
  375. package/dist/form/Command.js +5 -5
  376. package/dist/form/CreatableSelect.js +3 -3
  377. package/dist/form/DateRangePicker.js +9 -9
  378. package/dist/form/Input/outlined.js +5 -5
  379. package/dist/form/Input.js +5 -5
  380. package/dist/form/InputOTP.js +4 -4
  381. package/dist/form/Label.js +3 -3
  382. package/dist/form/MenuSelect.js +4 -4
  383. package/dist/form/Menubar.js +5 -5
  384. package/dist/form/NumberField.js +6 -6
  385. package/dist/form/PhoneInput.js +3 -3
  386. package/dist/form/PickerSheet.js +6 -6
  387. package/dist/form/RadioGroup.js +5 -5
  388. package/dist/form/RichTextEditor.js +2 -2
  389. package/dist/form/Select.js +6 -6
  390. package/dist/form/Textarea.js +3 -3
  391. package/dist/form/Toggle.js +4 -4
  392. package/dist/form/ToggleGroup.js +3 -3
  393. package/dist/form/UploadButton.js +2 -2
  394. package/dist/form/total-form.js +32 -32
  395. package/dist/icons.js +6 -6
  396. package/dist/layout/Box.js +6 -6
  397. package/dist/layout/ContentToolbar.js +11 -11
  398. package/dist/layout/Screen.js +7 -7
  399. package/dist/layout/SettingCard.js +18 -18
  400. package/dist/layout/SettingsLayout.js +3 -3
  401. package/dist/layout/Stack.js +7 -7
  402. package/dist/layout/TableFilter.js +3 -3
  403. package/dist/locales.js +11 -11
  404. package/dist/native/chunks/{chunk-2MFMON74.js → chunk-EZHCNYQO.js} +67 -33
  405. package/dist/native/chunks/chunk-EZHCNYQO.js.map +1 -0
  406. package/dist/native/chunks/{chunk-H22XVP5O.js → chunk-TZPNJ4AU.js} +2 -2
  407. package/dist/native/data-display/EmptyState.js +2 -2
  408. package/dist/native/data-display/ErrorState.js +1 -1
  409. package/dist/native/data-display/FleetMap.js +2 -2
  410. package/dist/native/form/Button.js +1 -1
  411. package/dist/navigation/AppHeader.js +8 -8
  412. package/dist/navigation/NavigationMenu.js +4 -4
  413. package/dist/navigation/Pagination.js +4 -4
  414. package/dist/navigation/SectionNav.js +6 -6
  415. package/dist/navigation/Tabs.js +2 -2
  416. package/dist/provider.js +6 -6
  417. package/dist/pt-BR.js +5 -5
  418. package/dist/social-login-button.js +5 -5
  419. package/dist/tokens.js +4 -4
  420. package/dist/types/components/feedback/SequenceResolver/SequenceResolver.d.ts +17 -0
  421. package/dist/types/components/feedback/SequenceResolver/SequenceResolver.d.ts.map +1 -0
  422. package/dist/types/components/feedback/SequenceResolver/SequenceResolver.metrics.d.ts +33 -0
  423. package/dist/types/components/feedback/SequenceResolver/SequenceResolver.metrics.d.ts.map +1 -0
  424. package/dist/types/components/feedback/SequenceResolver/SequenceResolver.parts.d.ts +61 -0
  425. package/dist/types/components/feedback/SequenceResolver/SequenceResolver.parts.d.ts.map +1 -0
  426. package/dist/types/components/feedback/SequenceResolver/SequenceResolver.styles.d.ts +51 -0
  427. package/dist/types/components/feedback/SequenceResolver/SequenceResolver.styles.d.ts.map +1 -0
  428. package/dist/types/components/feedback/SequenceResolver/SequenceResolver.types.d.ts +175 -0
  429. package/dist/types/components/feedback/SequenceResolver/SequenceResolver.types.d.ts.map +1 -0
  430. package/dist/types/components/feedback/SequenceResolver/index.d.ts +3 -0
  431. package/dist/types/components/feedback/SequenceResolver/index.d.ts.map +1 -0
  432. package/dist/types/components/feedback/SequenceResolver/sequence-model.d.ts +85 -0
  433. package/dist/types/components/feedback/SequenceResolver/sequence-model.d.ts.map +1 -0
  434. package/dist/types/components/feedback/SequenceResolver/useSequenceRun.d.ts +24 -0
  435. package/dist/types/components/feedback/SequenceResolver/useSequenceRun.d.ts.map +1 -0
  436. package/dist/types/components/feedback/index.d.ts +1 -0
  437. package/dist/types/components/feedback/index.d.ts.map +1 -1
  438. package/dist/types/components/form/Button/Button.d.ts.map +1 -1
  439. package/dist/types/components/form/Button/Button.native.loading.d.ts +36 -0
  440. package/dist/types/components/form/Button/Button.native.loading.d.ts.map +1 -0
  441. package/dist/types-native/components/form/Button/Button.native.d.ts.map +1 -1
  442. package/dist/types-native/components/form/Button/Button.native.loading.d.ts +36 -0
  443. package/dist/types-native/components/form/Button/Button.native.loading.d.ts.map +1 -0
  444. package/dist/user-avatar.js +5 -5
  445. package/dist/utility/WorkflowStep.js +3 -3
  446. package/package.json +5 -1
  447. package/src/components/feedback/SequenceResolver/SequenceResolver.md +136 -0
  448. package/src/components/feedback/SequenceResolver/SequenceResolver.metrics.ts +26 -0
  449. package/src/components/feedback/SequenceResolver/SequenceResolver.parts.tsx +307 -0
  450. package/src/components/feedback/SequenceResolver/SequenceResolver.styles.ts +238 -0
  451. package/src/components/feedback/SequenceResolver/SequenceResolver.tsx +179 -0
  452. package/src/components/feedback/SequenceResolver/SequenceResolver.types.ts +185 -0
  453. package/src/components/feedback/SequenceResolver/index.ts +14 -0
  454. package/src/components/feedback/SequenceResolver/sequence-model.ts +181 -0
  455. package/src/components/feedback/SequenceResolver/useSequenceRun.ts +205 -0
  456. package/src/components/feedback/index.ts +1 -0
  457. package/src/components/form/Button/Button.md +4 -3
  458. package/src/components/form/Button/Button.native.loading.tsx +89 -0
  459. package/src/components/form/Button/Button.native.tsx +14 -24
  460. package/src/components/form/Button/Button.tsx +47 -16
  461. package/dist/chunk-364NH2NY.js.map +0 -1
  462. package/dist/chunk-6YIKVXAV.js +0 -1
  463. package/dist/native/chunks/chunk-2MFMON74.js.map +0 -1
  464. /package/dist/{chunk-6YIKVXAV.js.map → _internal/components/feedback/SequenceResolver/SequenceResolver.js.map} +0 -0
  465. /package/dist/{chunk-75FHDUJW.js.map → chunk-2D4WKET2.js.map} +0 -0
  466. /package/dist/{chunk-3O2OJW4O.js.map → chunk-2QO3BKUQ.js.map} +0 -0
  467. /package/dist/{chunk-MA6ENJDP.js.map → chunk-2VHAD4NE.js.map} +0 -0
  468. /package/dist/{chunk-FJ3UZ4RC.js.map → chunk-33MMQHYU.js.map} +0 -0
  469. /package/dist/{chunk-CBO46LJH.js.map → chunk-3HSLEUVW.js.map} +0 -0
  470. /package/dist/{chunk-6VTOGR36.js.map → chunk-3XZZSHE5.js.map} +0 -0
  471. /package/dist/{chunk-BLINEMVO.js.map → chunk-3YLRR4JM.js.map} +0 -0
  472. /package/dist/{chunk-PD7MKJCM.js.map → chunk-4AJY7HMH.js.map} +0 -0
  473. /package/dist/{chunk-VWVA74JY.js.map → chunk-4HUSG5MR.js.map} +0 -0
  474. /package/dist/{chunk-7CPLKAL6.js.map → chunk-4M5GEKPM.js.map} +0 -0
  475. /package/dist/{chunk-WEMI4PV7.js.map → chunk-4MQ6XTIJ.js.map} +0 -0
  476. /package/dist/{chunk-3MQZBBUW.js.map → chunk-5463SZOH.js.map} +0 -0
  477. /package/dist/{chunk-CAX3NFFE.js.map → chunk-555TUQ7E.js.map} +0 -0
  478. /package/dist/{chunk-5KGABAQB.js.map → chunk-5752357K.js.map} +0 -0
  479. /package/dist/{chunk-ZOLUUX4B.js.map → chunk-5J7SA4CZ.js.map} +0 -0
  480. /package/dist/{chunk-5AQLJ4AL.js.map → chunk-62XVHRTX.js.map} +0 -0
  481. /package/dist/{chunk-SO5OU2ZV.js.map → chunk-64AOS2WA.js.map} +0 -0
  482. /package/dist/{chunk-75I42HHE.js.map → chunk-66QQ7YQN.js.map} +0 -0
  483. /package/dist/{chunk-7KZEQJPQ.js.map → chunk-6J7RGNSF.js.map} +0 -0
  484. /package/dist/{chunk-GCBWZ3MX.js.map → chunk-6LMYQJZP.js.map} +0 -0
  485. /package/dist/{chunk-4SQ2WCZA.js.map → chunk-6MOJK2QT.js.map} +0 -0
  486. /package/dist/{chunk-Q6MZHT2F.js.map → chunk-6RTE4UNO.js.map} +0 -0
  487. /package/dist/{chunk-NIZUFPV3.js.map → chunk-72GJRV5J.js.map} +0 -0
  488. /package/dist/{chunk-LYB6YYTG.js.map → chunk-72OG3AGH.js.map} +0 -0
  489. /package/dist/{chunk-Y46R26TE.js.map → chunk-7AC2UGTU.js.map} +0 -0
  490. /package/dist/{chunk-NPSARV2I.js.map → chunk-7P5PNRBT.js.map} +0 -0
  491. /package/dist/{chunk-RPKUZDRY.js.map → chunk-7QXEEZFO.js.map} +0 -0
  492. /package/dist/{chunk-SUXT6QAY.js.map → chunk-7RG37FVT.js.map} +0 -0
  493. /package/dist/{chunk-5F7HYYGM.js.map → chunk-7ZROYGUG.js.map} +0 -0
  494. /package/dist/{chunk-LY5I3ZSV.js.map → chunk-A2YLFKQU.js.map} +0 -0
  495. /package/dist/{chunk-BEYLI32I.js.map → chunk-A5NXBOWS.js.map} +0 -0
  496. /package/dist/{chunk-7TKQIZ3K.js.map → chunk-AAREDFH6.js.map} +0 -0
  497. /package/dist/{chunk-4QGPRORO.js.map → chunk-AEYLFBZT.js.map} +0 -0
  498. /package/dist/{chunk-VPGDYI63.js.map → chunk-AKBL7S7A.js.map} +0 -0
  499. /package/dist/{chunk-6DGNMASB.js.map → chunk-ALREWFRX.js.map} +0 -0
  500. /package/dist/{chunk-NQ6P7O7C.js.map → chunk-ASZGMKB4.js.map} +0 -0
  501. /package/dist/{chunk-CWCNLITK.js.map → chunk-AXZCCX7O.js.map} +0 -0
  502. /package/dist/{chunk-FVL6U72V.js.map → chunk-B2JYQBO4.js.map} +0 -0
  503. /package/dist/{chunk-IU2WSJ4F.js.map → chunk-BARTUKJU.js.map} +0 -0
  504. /package/dist/{chunk-4JNC5AEF.js.map → chunk-BTGXHQX3.js.map} +0 -0
  505. /package/dist/{chunk-VMTOLAZ5.js.map → chunk-BWFQEASG.js.map} +0 -0
  506. /package/dist/{chunk-MKBIIYJM.js.map → chunk-C47LBKEG.js.map} +0 -0
  507. /package/dist/{chunk-2K2Q7VGV.js.map → chunk-C5JCARNE.js.map} +0 -0
  508. /package/dist/{chunk-LBEZ7A3F.js.map → chunk-C7CIUDXZ.js.map} +0 -0
  509. /package/dist/{chunk-YWXCLPCX.js.map → chunk-CO7GH3W7.js.map} +0 -0
  510. /package/dist/{chunk-ARVLS57B.js.map → chunk-CW6Y32N2.js.map} +0 -0
  511. /package/dist/{chunk-LZJHHMOF.js.map → chunk-DRJL3JHR.js.map} +0 -0
  512. /package/dist/{chunk-7IXXASQ6.js.map → chunk-DXFKPY2K.js.map} +0 -0
  513. /package/dist/{chunk-FR2RJXHS.js.map → chunk-EBCEDBHX.js.map} +0 -0
  514. /package/dist/{chunk-BRHRK7BK.js.map → chunk-ENRB6PIN.js.map} +0 -0
  515. /package/dist/{chunk-J5QNJERV.js.map → chunk-F6IMOMA3.js.map} +0 -0
  516. /package/dist/{chunk-YTDUIU7X.js.map → chunk-F6LZHF4O.js.map} +0 -0
  517. /package/dist/{chunk-725H45MT.js.map → chunk-FAIQCGSL.js.map} +0 -0
  518. /package/dist/{chunk-HVGQH54G.js.map → chunk-FTDGFWB5.js.map} +0 -0
  519. /package/dist/{chunk-P7VAMJFJ.js.map → chunk-GFXS5PJL.js.map} +0 -0
  520. /package/dist/{chunk-YEKPQAOW.js.map → chunk-GQ2T44BC.js.map} +0 -0
  521. /package/dist/{chunk-JA3WJPXH.js.map → chunk-GSXYXMCV.js.map} +0 -0
  522. /package/dist/{chunk-IZ7JTG3Z.js.map → chunk-GTT5UKKO.js.map} +0 -0
  523. /package/dist/{chunk-WDSJ6SVY.js.map → chunk-GXSHLMT4.js.map} +0 -0
  524. /package/dist/{chunk-ULK4AGG4.js.map → chunk-HTGK7QCX.js.map} +0 -0
  525. /package/dist/{chunk-Y3LK6ZQG.js.map → chunk-I2KAN3YB.js.map} +0 -0
  526. /package/dist/{chunk-M5DBOM7R.js.map → chunk-ICRVLGWD.js.map} +0 -0
  527. /package/dist/{chunk-BEHM2VLH.js.map → chunk-IQ2U5MVO.js.map} +0 -0
  528. /package/dist/{chunk-LABIUXDM.js.map → chunk-J7C7FPVO.js.map} +0 -0
  529. /package/dist/{chunk-CYH5QQUP.js.map → chunk-KHIUYLKY.js.map} +0 -0
  530. /package/dist/{chunk-PPEHBI5O.js.map → chunk-KXTNTDRD.js.map} +0 -0
  531. /package/dist/{chunk-IBOFASAZ.js.map → chunk-LC6ND4ET.js.map} +0 -0
  532. /package/dist/{chunk-BF3SGOWT.js.map → chunk-LG52LMAM.js.map} +0 -0
  533. /package/dist/{chunk-3Y7LSMGV.js.map → chunk-LH4VKUZC.js.map} +0 -0
  534. /package/dist/{chunk-CFDWKQZT.js.map → chunk-LODYTVOO.js.map} +0 -0
  535. /package/dist/{chunk-Y2CCXB7R.js.map → chunk-LUNN5GTB.js.map} +0 -0
  536. /package/dist/{chunk-ACBHZG3Z.js.map → chunk-M74YHHJE.js.map} +0 -0
  537. /package/dist/{chunk-BGGVYKVZ.js.map → chunk-MA6SUE7F.js.map} +0 -0
  538. /package/dist/{chunk-AT6UKTH4.js.map → chunk-MHFXJRLD.js.map} +0 -0
  539. /package/dist/{chunk-3BDMYTH6.js.map → chunk-MHLYX6QW.js.map} +0 -0
  540. /package/dist/{chunk-FXECKKPW.js.map → chunk-MO4FFK62.js.map} +0 -0
  541. /package/dist/{chunk-SAKSIN7E.js.map → chunk-MQVIYTH5.js.map} +0 -0
  542. /package/dist/{chunk-NKBCUR4V.js.map → chunk-MSC43MCJ.js.map} +0 -0
  543. /package/dist/{chunk-RHVJ3L4U.js.map → chunk-MWPD2BXO.js.map} +0 -0
  544. /package/dist/{chunk-TSID4257.js.map → chunk-N34AOGK3.js.map} +0 -0
  545. /package/dist/{chunk-NZBEE2PR.js.map → chunk-N3LW5ER5.js.map} +0 -0
  546. /package/dist/{chunk-Q3HYEAVQ.js.map → chunk-N3ZOZWP5.js.map} +0 -0
  547. /package/dist/{chunk-AO4NDR6W.js.map → chunk-NTO5DALI.js.map} +0 -0
  548. /package/dist/{chunk-VQSBZPKO.js.map → chunk-NYWAAXDX.js.map} +0 -0
  549. /package/dist/{chunk-CHGUN7OF.js.map → chunk-O6SAU5JA.js.map} +0 -0
  550. /package/dist/{chunk-3FDSXSEP.js.map → chunk-OE3SQOZV.js.map} +0 -0
  551. /package/dist/{chunk-VLH3IMJG.js.map → chunk-OFXCSLGX.js.map} +0 -0
  552. /package/dist/{chunk-E54XIRY2.js.map → chunk-PIP7XII2.js.map} +0 -0
  553. /package/dist/{chunk-QWSYHENP.js.map → chunk-PTQRJEPN.js.map} +0 -0
  554. /package/dist/{chunk-S5VIN3EB.js.map → chunk-Q6PRGXR2.js.map} +0 -0
  555. /package/dist/{chunk-DQ3O252B.js.map → chunk-QCNUMOTL.js.map} +0 -0
  556. /package/dist/{chunk-XZE5FIRB.js.map → chunk-QCQWOSSD.js.map} +0 -0
  557. /package/dist/{chunk-TRYYYWV3.js.map → chunk-QIYX33SH.js.map} +0 -0
  558. /package/dist/{chunk-RGVNXES5.js.map → chunk-QQHZBJMU.js.map} +0 -0
  559. /package/dist/{chunk-XZFTRGRW.js.map → chunk-QVO4SIS7.js.map} +0 -0
  560. /package/dist/{chunk-WJEJ65TF.js.map → chunk-QYX4567K.js.map} +0 -0
  561. /package/dist/{chunk-7JKDB5J5.js.map → chunk-R53ZOW4B.js.map} +0 -0
  562. /package/dist/{chunk-HSIUVFXE.js.map → chunk-RA6W37NZ.js.map} +0 -0
  563. /package/dist/{chunk-HDTFLW42.js.map → chunk-REMODSVN.js.map} +0 -0
  564. /package/dist/{chunk-P4LR2GLN.js.map → chunk-RIDCGFGM.js.map} +0 -0
  565. /package/dist/{chunk-RNQ2PGBB.js.map → chunk-RKVS5AA6.js.map} +0 -0
  566. /package/dist/{chunk-MKNW4FRR.js.map → chunk-RS576GOH.js.map} +0 -0
  567. /package/dist/{chunk-NIENIKZ5.js.map → chunk-SCAPSX6T.js.map} +0 -0
  568. /package/dist/{chunk-HG2YLNGJ.js.map → chunk-SFVHZAGE.js.map} +0 -0
  569. /package/dist/{chunk-5HFB4WFE.js.map → chunk-T743IIER.js.map} +0 -0
  570. /package/dist/{chunk-C6LW34TV.js.map → chunk-THD3N4BJ.js.map} +0 -0
  571. /package/dist/{chunk-IDRVQVDL.js.map → chunk-TNDTEI6D.js.map} +0 -0
  572. /package/dist/{chunk-U2QV4TTZ.js.map → chunk-TR7ZA67L.js.map} +0 -0
  573. /package/dist/{chunk-EP3DRILI.js.map → chunk-U36BXXQ7.js.map} +0 -0
  574. /package/dist/{chunk-AJ5LXKLQ.js.map → chunk-U4G3KY6L.js.map} +0 -0
  575. /package/dist/{chunk-UAFSEZ2E.js.map → chunk-UQUN2NGE.js.map} +0 -0
  576. /package/dist/{chunk-6A4PTK5Q.js.map → chunk-V4JMZZGH.js.map} +0 -0
  577. /package/dist/{chunk-72L5C74V.js.map → chunk-VBGC7G4F.js.map} +0 -0
  578. /package/dist/{chunk-IWJTLCTF.js.map → chunk-VD72JGHA.js.map} +0 -0
  579. /package/dist/{chunk-TVXUOJAL.js.map → chunk-VJG43WKU.js.map} +0 -0
  580. /package/dist/{chunk-H7QTDKA6.js.map → chunk-VMN6KG2U.js.map} +0 -0
  581. /package/dist/{chunk-YRF7WFAQ.js.map → chunk-WA6F4NOO.js.map} +0 -0
  582. /package/dist/{chunk-HOJL2GKW.js.map → chunk-WC3W36AM.js.map} +0 -0
  583. /package/dist/{chunk-OQW4OERS.js.map → chunk-WNIL2KTB.js.map} +0 -0
  584. /package/dist/{chunk-NQYC7V5N.js.map → chunk-WOSUYOAU.js.map} +0 -0
  585. /package/dist/{chunk-DDNUPFPE.js.map → chunk-WT7VZDTI.js.map} +0 -0
  586. /package/dist/{chunk-DOWVAC4U.js.map → chunk-XODBYGTH.js.map} +0 -0
  587. /package/dist/{chunk-HDXUQKJ5.js.map → chunk-XRDH24J7.js.map} +0 -0
  588. /package/dist/{chunk-DQKMOGYZ.js.map → chunk-XYFBJH6F.js.map} +0 -0
  589. /package/dist/{chunk-SZSS5KKX.js.map → chunk-XYSE2QZN.js.map} +0 -0
  590. /package/dist/{chunk-MIUPTZS6.js.map → chunk-Y4KR4LT2.js.map} +0 -0
  591. /package/dist/{chunk-D7PVIC33.js.map → chunk-Y7YJYUNV.js.map} +0 -0
  592. /package/dist/{chunk-GHP5JLL3.js.map → chunk-YASSCBWN.js.map} +0 -0
  593. /package/dist/{chunk-QLJU7UUI.js.map → chunk-YH7G44WL.js.map} +0 -0
  594. /package/dist/{chunk-FS55MQ4Q.js.map → chunk-YNDTLBOH.js.map} +0 -0
  595. /package/dist/{chunk-6E4L53DF.js.map → chunk-YZX4DVRS.js.map} +0 -0
  596. /package/dist/{chunk-NDQJDA7O.js.map → chunk-Z7COWR4K.js.map} +0 -0
  597. /package/dist/{chunk-NYA26GV2.js.map → chunk-ZCCKIWZU.js.map} +0 -0
  598. /package/dist/{chunk-J32XJALK.js.map → chunk-ZTPB7PVI.js.map} +0 -0
  599. /package/dist/{chunk-NKHNUTTY.js.map → chunk-ZXHODKHH.js.map} +0 -0
  600. /package/dist/{chunk-7LOCLC24.js.map → chunk-ZYKDUKAH.js.map} +0 -0
  601. /package/dist/native/chunks/{chunk-H22XVP5O.js.map → chunk-TZPNJ4AU.js.map} +0 -0
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  UserAvatar,
3
3
  UserMenu
4
- } from "./chunk-3FDSXSEP.js";
4
+ } from "./chunk-OE3SQOZV.js";
5
5
  import "./chunk-UDQSIRAP.js";
6
6
  import "./chunk-KARMRTTM.js";
7
7
  import "./chunk-7XSCEHGA.js";
@@ -15,17 +15,17 @@ import "./chunk-FKUYRQSP.js";
15
15
  import "./chunk-PLB6WWXW.js";
16
16
  import "./chunk-HDBP55R3.js";
17
17
  import "./chunk-BA4RHQ3B.js";
18
- import "./chunk-364NH2NY.js";
19
- import "./chunk-PPEHBI5O.js";
18
+ import "./chunk-5USHYSCO.js";
19
+ import "./chunk-KXTNTDRD.js";
20
20
  import "./chunk-G2FUZALJ.js";
21
21
  import "./chunk-TAMIZE4Q.js";
22
22
  import "./chunk-AJBRO76D.js";
23
23
  import "./chunk-36VXZCJT.js";
24
24
  import "./chunk-TYJR4GOF.js";
25
- import "./chunk-RGVNXES5.js";
26
- import "./chunk-GDN2LUTZ.js";
25
+ import "./chunk-QQHZBJMU.js";
27
26
  import "./chunk-7ZADLRLP.js";
28
27
  import "./chunk-3NGE6NE6.js";
28
+ import "./chunk-GDN2LUTZ.js";
29
29
  import "./chunk-2FBGDSGC.js";
30
30
  import "./chunk-VBP46YP4.js";
31
31
  import "./chunk-44BD7SFH.js";
@@ -6,17 +6,17 @@ import "../chunk-VNVV6Y2X.js";
6
6
  import "../chunk-SV6IQ2YO.js";
7
7
  import "../chunk-XKSA4L2X.js";
8
8
  import "../chunk-B7ZHEOQQ.js";
9
- import "../chunk-BRHRK7BK.js";
9
+ import "../chunk-ENRB6PIN.js";
10
10
  import "../chunk-25MSGLNU.js";
11
11
  import "../chunk-GAXHYRX6.js";
12
12
  import "../chunk-NP6SHLQ3.js";
13
13
  import "../chunk-TZ23DNKY.js";
14
14
  import "../chunk-7ZPUN7TV.js";
15
15
  import "../chunk-PT6TCWIW.js";
16
- import "../chunk-RGVNXES5.js";
17
- import "../chunk-GDN2LUTZ.js";
16
+ import "../chunk-QQHZBJMU.js";
18
17
  import "../chunk-7ZADLRLP.js";
19
18
  import "../chunk-3NGE6NE6.js";
19
+ import "../chunk-GDN2LUTZ.js";
20
20
  import "../chunk-2FBGDSGC.js";
21
21
  import "../chunk-VBP46YP4.js";
22
22
  import "../chunk-44BD7SFH.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@12-apps/ui",
3
- "version": "6.77.1",
3
+ "version": "6.78.0",
4
4
  "license": "MIT",
5
5
  "packageManager": "pnpm@10.34.5",
6
6
  "type": "module",
@@ -320,6 +320,10 @@
320
320
  "types": "./dist/types/components/feedback/Sonner/index.d.ts",
321
321
  "default": "./dist/feedback/Sonner.js"
322
322
  },
323
+ "./feedback/SequenceResolver": {
324
+ "types": "./dist/types/components/feedback/SequenceResolver/index.d.ts",
325
+ "default": "./dist/feedback/SequenceResolver.js"
326
+ },
323
327
  "./feedback/StackedModal": {
324
328
  "types": "./dist/types/components/feedback/StackedModal/index.d.ts",
325
329
  "default": "./dist/feedback/StackedModal.js"
@@ -0,0 +1,136 @@
1
+ # SequenceResolver
2
+
3
+ Resolve a **queue of problems one at a time** in one dialog whose body is replaced step by
4
+ step. The component owns the run — which step is on screen, what was answered or skipped,
5
+ where Back returns to, when the end screen shows — and nothing about the domain: every
6
+ step body, every word and every server call is the host's (FUT-3671).
7
+
8
+ ```
9
+ ┌──────────────────────────────────────────────┐
10
+ │ ‹ Back Problem 3 of 13 · Purchase × │ header: back (once a previous step exists), label, close
11
+ │ ▓▓▓▓▓▓▓░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ │ progress: steps left behind / total
12
+ │ Red Bull 250ml │ ┐
13
+ │ Register the purchase │ │ the host's step (renderStep)
14
+ │ No stock. Last purchase: 24 u for $ 163.20 │ ┘
15
+ │ It was a stock count │ tertiary (text button, optional)
16
+ │ ──────────────────────────────────────────── │
17
+ │ [Not bought yet] [Save] │ footer: secondary (skip by default) + primary
18
+ └──────────────────────────────────────────────┘
19
+ ```
20
+
21
+ **When to use it.** A list of things that each need a decision (a stock screen's "N problems
22
+ to solve", a product's subproducts to restock), resolved in order, where Back must undo the
23
+ previous answer. **Not** `StackedModal` — that stacks nested dialogs, and thirteen problems
24
+ would be thirteen layers with a back button that closes a layer instead of undoing an
25
+ answer. **Not** `Stepper` — that shows a known, short list of named steps; this queue is
26
+ data-sized and shrinks while you go.
27
+
28
+ ## Surfaces
29
+
30
+ - **≥ 600px (`sm`)**: a centred `Dialog` (`size="sm"`), capped by the viewport.
31
+ - **Either way the body is the only scroll region**: the handle, header and progress stay
32
+ put while a long step scrolls under them, so it is never cut off and Back/close never
33
+ scroll away.
34
+ - **< 600px**: the `Dialog` inset `bottom-sheet` variant, at most 95% of the dynamic
35
+ viewport, scrolling inside; a drag handle on top is decoration only (the sheet does not
36
+ drag). Every header and footer target is at least 44px tall there.
37
+
38
+ ## Props
39
+
40
+ | Prop | Type | Description |
41
+ |---|---|---|
42
+ | `open` | `boolean` | Shows the resolver. Every opening — with an intro or without — starts a fresh run. |
43
+ | `onClose` | `(summary) => void` | Close button, Esc and the end screen's button. Gets `{ resolved, skipped, total, alsoResolved }`; a close toast counts `resolved + alsoResolved` (and shows only when that is above 0). Clicking the veil does nothing (as approved). |
44
+ | `intro` | `SequenceIntro?` | While given, the intro shows instead of the run: `title`, `description`, `categories` (`label`, `description`, `count`, `onPick`), `startAllLabel`, `onStartAll`. The host drops it and sets `queue` in the same update as a pick. |
45
+ | `queue` | `readonly I[]` (`I extends { key; kindLabel }`) | The problems, in order. Live data: it may shrink (siblings answered together) or grow mid-run. |
46
+ | `renderStep` | `(item, api) => SequenceStep` | The current step: `content`, `primary?`, `secondary?` (default: skip with `labels.skip`; `false` removes it), `tertiary?`, `footer?` (`'end'` default — right-aligned over a hairline; `'split'` — two equal columns, no hairline; on a phone the actions always share the row without a hairline). |
47
+ | `onBack` | `(item, result) => Promise<void> \| void` | The host's server inverse, awaited before Back shows the previous step again. Called only when that step was RESOLVED. |
48
+ | `canGoBack` | `boolean` (default `true`) | Offer Back at all. It shows only once a previous step exists — on steps and on the end screen, never on the intro. |
49
+ | `done` | `SequenceDone \| (summary) => SequenceDone` | The end screen: `title`, `description?`, `confirmLabel`. |
50
+ | `labels` | `SequenceResolverLabels` | Every chrome word: `back`, `backAccessible?`, `close`, `skip`, `step(position, total, item)`, `introStep`, `doneStep`, `progress`, `failed`. **Required — the package ships no copy.** |
51
+ | `dataTestId` | `string` (default `sequence-resolver`) | Parts: `-back`, `-close`, `-step-label`, `-progress`, `-handle`, `-category-<n>`, `-start-all`, `-primary`, `-secondary`, `-tertiary`, `-footer`, `-error`, `-done`, `-done-confirm`. |
52
+
53
+ ### The step API
54
+
55
+ | `api.` | |
56
+ |---|---|
57
+ | `resolve(result \| promise, { alsoResolved? })` | Answer and move on. `alsoResolved` counts OTHER problems this answer resolved too ("apply to every sibling") for the close summary; Back over the step takes them off again. Given the PROMISE of the host's write, the step stays on screen and `busy` until it settles (even if the host's refetch drops the entry first); a rejection keeps it and shows the rejection's message. |
58
+ | `skip()` | Leave it unanswered and move on. |
59
+ | `back()` | Same as the header's Back. |
60
+ | `busy` | True while a `resolve` promise or an `onBack` is pending. The footer, tertiary and Back are disabled by the component; disable the step's own answers with it. |
61
+ | `titleProps` | **Spread on the step's title** (the item's name). It names the dialog and takes focus on every advance. |
62
+
63
+ ## Behaviour
64
+
65
+ - **Index.** The run is not an index into `queue`. Visited steps are kept in visit order,
66
+ the steps ahead in queue order. A new `queue` drops the steps ahead it no longer has
67
+ (resolved elsewhere — "apply to every sibling") and appends entries it has not seen; the
68
+ total follows. The run never goes past the end: with nothing ahead the end screen shows.
69
+ - **An empty queue at the start shows the end screen.** Do not open the resolver (past the
70
+ intro) before the problems have loaded.
71
+ - **Back** pops the last visited step. Over a resolved step it awaits `onBack(item, result)`
72
+ first; over a skipped one it returns at once. A rejected `onBack` keeps the current step
73
+ and shows the message (`labels.failed` when the rejection has none). Every step Back
74
+ returned to is held on screen while the host's refetch has not put it back yet — two Backs
75
+ before one refetch hold both — and is released once the queue has it again.
76
+ - **`onBack` receives the item as it was when the step was answered** (with that answer's
77
+ result), not a fresher copy from a later queue.
78
+ - **The close summary counts what has settled.** An answer whose write is still pending
79
+ when the reader closes is not in `resolved`.
80
+ - **An error belongs to its step**: once the run moves to another step (an answer, a skip,
81
+ or a queue change), it is gone.
82
+ - **Busy** blocks every verb: a second tap, or a skip during a pending write, is ignored.
83
+ - **Focus** moves to the screen's title on open and on every advance or return; Tab is
84
+ trapped in the dialog; Esc closes (a popup inside a step that handles its own Esc keeps it).
85
+ - **Labelling.** `role="dialog"`, `aria-modal`, `aria-labelledby` = the intro title, the
86
+ step title (`api.titleProps`) or the end title. The progress bar is named by
87
+ `labels.progress`.
88
+
89
+ ## Writing a step
90
+
91
+ The pattern the owner approved — **the item's name first** (large), the question second, the
92
+ facts third. Footer: the secondary is "Skip for now" (or a step-specific word), the primary
93
+ is the step's verb; two actions at most, plus at most ONE tertiary, which sits as a text
94
+ button above the footer.
95
+
96
+ ```tsx
97
+ <SequenceResolver<Problem, Answer>
98
+ open={open}
99
+ onClose={(summary) => { setOpen(false); toastResolved(summary); }}
100
+ intro={showIntro ? intro : undefined}
101
+ queue={problems}
102
+ renderStep={(item, api) => stepFor(item, api)}
103
+ onBack={(item, answer) => api.undo(answer.undoId)}
104
+ done={(s) => ({
105
+ title: s.resolved === s.total ? copy.allSolved : copy.someSolved(s.resolved, s.total),
106
+ description: copy.doneHint,
107
+ confirmLabel: copy.finish,
108
+ })}
109
+ labels={copy.resolver}
110
+ />
111
+ ```
112
+
113
+ ### Four step kinds, as a stock screen plugs them in
114
+
115
+ | Kind (`kindLabel`) | `content` | `primary` | `secondary` | `tertiary` / `footer` |
116
+ |---|---|---|---|---|
117
+ | **Limits** — no minimum/maximum | name; "How much stays on display?"; facts; min/max steppers (`NumberField`); "Apply to every subproduct of X (N)" checkbox | "Save limits" → `api.resolve(saveLimits(...))`; with the checkbox the host's refetch drops the siblings' steps, and `{ alsoResolved: N }` counts them | skip | `footer: 'split'` |
118
+ | **Purchase** — out of stock | name; "Register purchase"; last purchase; quantity / total paid (`NumberField`), supplier (`CreatableSelect`), destination; "Also put N on display" | "Register and display N" → `api.resolve(registerPurchase(...))` | `{ label: 'Not bought yet', onClick: api.skip }` | `footer: 'split'` |
119
+ | **Restock** — display below its rule | name; "How many to take?"; total / displayed / stored; the 0→max bar; − / + | "Take N" → `api.resolve(restock(...))` | skip | `footer: 'end'` |
120
+ | **Unexplained loss** — a write-off with no reason | name; "Why did these N leave?"; quick reasons + "Other reason" (each answers with `api.resolve`, disabled while `api.busy`); "Different reasons? Split the N" | — (the reason buttons answer); while splitting: "Save N reasons" | skip; while splitting: `{ label: 'One reason only', ... }` | "It was a stock count, not a loss" |
121
+
122
+ Each `resolve` returns what `onBack` needs to undo it (an undo id from the server), so Back
123
+ is one call to the host's inverse.
124
+
125
+ ## Accessibility
126
+
127
+ - Dialog role, labelled title, focus trap (MUI's, via `Dialog`), Esc to close.
128
+ - Focus to the title on every screen change, so a screen reader announces the new problem.
129
+ - 44px+ targets below 600px (`lg` buttons, a 44px close).
130
+ - Errors are an assertive `Alert`; `aria-busy` marks the step while a write is pending.
131
+
132
+ ## Related
133
+
134
+ - `Dialog` — the surface (default and inset `bottom-sheet` variants).
135
+ - `Progress` — the bar.
136
+ - `StackedModal`, `Stepper` — see "When to use it".
@@ -0,0 +1,26 @@
1
+ /**
2
+ * THE RESOLVER'S NUMBERS — the approved prototype's, in px. The web reads
3
+ * them through `rem`/`sxRem` so a density mode scales them (FUT-3671).
4
+ */
5
+ export const SEQUENCE_METRICS = {
6
+ /** Below this width the dialog is the inset bottom sheet, and targets are 44px+. */
7
+ sheetBreakpoint: 'sm',
8
+ /** The sheet never grows past this share of the viewport; the paper scrolls inside it. */
9
+ sheetMaxHeightPercent: 95,
10
+ /** The smallest a control may be below the sheet breakpoint, and the end screen's button everywhere. */
11
+ touchTarget: 44,
12
+ /** The intro's "all in sequence" button, at least. */
13
+ startAllHeight: 48,
14
+ /** Header icon button: 40px on a pointer, 44px on a phone. */
15
+ closeSize: { pointer: 40, touch: 44 },
16
+ /** The drag handle — decoration only, the sheet does not drag. */
17
+ handle: { width: 40, height: 4 },
18
+ title: 22,
19
+ stepLabel: 13,
20
+ categoryDescription: 13,
21
+ categoryMinHeight: 56,
22
+ countBadge: 32,
23
+ listRadius: 12,
24
+ doneIcon: 44,
25
+ doneTitle: 20,
26
+ } as const;
@@ -0,0 +1,307 @@
1
+ import ChevronLeftIcon from '@mui/icons-material/ChevronLeft';
2
+ import ChevronRightIcon from '@mui/icons-material/ChevronRight';
3
+ import CheckCircleOutlineIcon from '@mui/icons-material/CheckCircleOutline';
4
+ import CloseIcon from '@mui/icons-material/Close';
5
+ import Box from '@mui/material/Box/index.js';
6
+ import ButtonBase from '@mui/material/ButtonBase/index.js';
7
+ import IconButton from '@mui/material/IconButton/index.js';
8
+ import Typography from '@mui/material/Typography/index.js';
9
+ import React, { useEffect, useRef } from 'react';
10
+
11
+ import { Alert } from '../../data-display/Alert';
12
+ import { Progress } from '../../data-display/Progress';
13
+ import { Button } from '../../form/Button';
14
+ import {
15
+ actionSx,
16
+ backButtonSx,
17
+ categoryDescriptionSx,
18
+ categoryRowSx,
19
+ categoryTextSx,
20
+ closeButtonSx,
21
+ countBadgeSx,
22
+ doneConfirmSx,
23
+ doneIconSx,
24
+ doneSx,
25
+ doneTitleSx,
26
+ footerSx,
27
+ handleSx,
28
+ headerStartSx,
29
+ headerSx,
30
+ introListSx,
31
+ stepLabelSx,
32
+ startAllSx,
33
+ tertiarySx,
34
+ titleSx,
35
+ } from './SequenceResolver.styles';
36
+ import type { SequenceAction, SequenceDone, SequenceIntro, SequenceStep } from './SequenceResolver.types';
37
+
38
+ interface HeaderProps {
39
+ touch: boolean;
40
+ label: string;
41
+ /** Absent: no back button (intro, first step, or the host turned it off). */
42
+ back?: { label: string; accessible?: string; onClick: () => void; disabled: boolean };
43
+ closeLabel: string;
44
+ onClose: () => void;
45
+ progress: number;
46
+ progressLabel: string;
47
+ testId: string;
48
+ }
49
+
50
+ /** The drag handle (phone), the header row and the progress bar. */
51
+ export function SequenceHeader(props: HeaderProps): React.JSX.Element {
52
+ const { touch, label, back, closeLabel, onClose, progress, progressLabel, testId } = props;
53
+ return (
54
+ <>
55
+ {touch ? <Box aria-hidden sx={handleSx} data-testid={`${testId}-handle`} /> : null}
56
+ <Box sx={headerSx}>
57
+ <Box sx={headerStartSx}>
58
+ {back ? (
59
+ <Button
60
+ variant="text"
61
+ color="primary"
62
+ size="md"
63
+ icon={<ChevronLeftIcon />}
64
+ aria-label={back.accessible}
65
+ onClick={back.onClick}
66
+ disabled={back.disabled}
67
+ sx={backButtonSx(touch)}
68
+ dataTestId={`${testId}-back`}
69
+ >
70
+ {back.label}
71
+ </Button>
72
+ ) : null}
73
+ <Typography component="span" sx={stepLabelSx} data-testid={`${testId}-step-label`}>
74
+ {label}
75
+ </Typography>
76
+ </Box>
77
+ <IconButton aria-label={closeLabel} onClick={onClose} sx={closeButtonSx(touch)} data-testid={`${testId}-close`}>
78
+ <CloseIcon />
79
+ </IconButton>
80
+ </Box>
81
+ <Progress
82
+ variant="linear"
83
+ size="md"
84
+ color="warning"
85
+ value={progress}
86
+ aria-label={progressLabel}
87
+ dataTestId={`${testId}-progress`}
88
+ />
89
+ </>
90
+ );
91
+ }
92
+
93
+ /**
94
+ * Moves focus to `target` (else `fallback`) whenever `screenKey` changes — and
95
+ * on mount, which happens inside the dialog's portal, before MUI's focus trap
96
+ * looks: finding focus already inside, the trap and `focusDialogOnEntered`
97
+ * both leave it there.
98
+ */
99
+ export function useFocusOnScreen(
100
+ screenKey: string,
101
+ target: React.RefObject<HTMLElement | null>,
102
+ fallback: React.RefObject<HTMLElement | null>,
103
+ ): void {
104
+ useEffect(() => {
105
+ (target.current ?? fallback.current)?.focus();
106
+ }, [screenKey, target, fallback]);
107
+ }
108
+
109
+ /**
110
+ * A button that disables itself under the pointer drops focus to the page
111
+ * behind the dialog. While busy, focus that fell out lands on the step body
112
+ * (`aria-busy`) instead, so a screen reader stays in the dialog.
113
+ */
114
+ function useKeepFocusWhileBusy(busy: boolean, body: React.RefObject<HTMLElement | null>): void {
115
+ useEffect(() => {
116
+ if (!busy) return undefined;
117
+ const rescue = (): void => {
118
+ const node = body.current;
119
+ const active = node?.ownerDocument.activeElement;
120
+ if (node && (!active || active === node.ownerDocument.body)) node.focus();
121
+ };
122
+ rescue();
123
+ const frame = requestAnimationFrame(rescue);
124
+ return () => cancelAnimationFrame(frame);
125
+ }, [busy, body]);
126
+ }
127
+
128
+ interface IntroProps {
129
+ intro: SequenceIntro;
130
+ titleId: string;
131
+ testId: string;
132
+ screenKey: string;
133
+ }
134
+
135
+ /** The kinds with their counts, and "resolve them all". */
136
+ export function SequenceIntroBody({ intro, titleId, testId, screenKey }: IntroProps): React.JSX.Element {
137
+ const titleRef = useRef<HTMLHeadingElement | null>(null);
138
+ useFocusOnScreen(screenKey, titleRef, titleRef);
139
+ const last = intro.categories.length - 1;
140
+ return (
141
+ <>
142
+ <Box sx={{ display: 'flex', flexDirection: 'column', gap: 0.5 }}>
143
+ <Typography component="h2" id={titleId} tabIndex={-1} ref={titleRef} sx={titleSx}>
144
+ {intro.title}
145
+ </Typography>
146
+ {intro.description ? (
147
+ <Typography variant="body2" color="text.secondary">
148
+ {intro.description}
149
+ </Typography>
150
+ ) : null}
151
+ </Box>
152
+ <Box component="ul" sx={introListSx}>
153
+ {intro.categories.map((category, index) => (
154
+ <li key={`${index}-${category.label}`}>
155
+ <ButtonBase
156
+ onClick={category.onPick}
157
+ sx={categoryRowSx(index === last)}
158
+ data-testid={`${testId}-category-${index}`}
159
+ >
160
+ <Box component="span" sx={countBadgeSx}>
161
+ {category.count}
162
+ </Box>
163
+ <Box component="span" sx={categoryTextSx}>
164
+ <Typography component="span" variant="body2" fontWeight={500}>
165
+ {category.label}
166
+ </Typography>
167
+ {category.description ? (
168
+ <Typography component="span" sx={categoryDescriptionSx}>
169
+ {category.description}
170
+ </Typography>
171
+ ) : null}
172
+ </Box>
173
+ <ChevronRightIcon aria-hidden sx={{ color: 'text.secondary' }} />
174
+ </ButtonBase>
175
+ </li>
176
+ ))}
177
+ </Box>
178
+ <Button
179
+ variant="solid"
180
+ color="primary"
181
+ size="lg"
182
+ fullWidth
183
+ onClick={intro.onStartAll}
184
+ dataTestId={`${testId}-start-all`}
185
+ sx={startAllSx}
186
+ >
187
+ {intro.startAllLabel}
188
+ </Button>
189
+ </>
190
+ );
191
+ }
192
+
193
+ interface StepProps {
194
+ step: SequenceStep;
195
+ /** The default secondary: skip. */
196
+ skip: SequenceAction;
197
+ busy: boolean;
198
+ error: string | null;
199
+ touch: boolean;
200
+ testId: string;
201
+ screenKey: string;
202
+ titleRef: React.RefObject<HTMLElement | null>;
203
+ }
204
+
205
+ function ActionButton({
206
+ action,
207
+ busy,
208
+ touch,
209
+ variant,
210
+ testId,
211
+ }: {
212
+ action: SequenceAction;
213
+ busy: boolean;
214
+ touch: boolean;
215
+ variant: 'solid' | 'outline' | 'text';
216
+ testId: string;
217
+ }): React.JSX.Element {
218
+ return (
219
+ <Button
220
+ variant={variant}
221
+ color={variant === 'outline' ? 'neutral' : 'primary'}
222
+ size="md"
223
+ onClick={action.onClick}
224
+ disabled={busy || action.disabled}
225
+ dataTestId={testId}
226
+ sx={variant === 'text' ? tertiarySx(touch) : actionSx(touch)}
227
+ >
228
+ {action.label}
229
+ </Button>
230
+ );
231
+ }
232
+
233
+ /** The host's body, its error, the tertiary text button and the footer. */
234
+ export function SequenceStepBody(props: StepProps): React.JSX.Element {
235
+ const { step, skip, busy, error, touch, testId, screenKey, titleRef } = props;
236
+ const bodyRef = useRef<HTMLDivElement | null>(null);
237
+ useFocusOnScreen(screenKey, titleRef, bodyRef);
238
+ useKeepFocusWhileBusy(busy, bodyRef);
239
+ const secondary = step.secondary === false ? undefined : (step.secondary ?? skip);
240
+ const hasFooter = Boolean(secondary || step.primary);
241
+ return (
242
+ <>
243
+ <Box ref={bodyRef} tabIndex={-1} aria-busy={busy} sx={{ outline: 'none', minWidth: 0 }}>
244
+ {step.content}
245
+ </Box>
246
+ {error ? (
247
+ <Alert variant="danger" announce="assertive" description={error} dataTestId={`${testId}-error`} />
248
+ ) : null}
249
+ {step.tertiary ? (
250
+ <ActionButton action={step.tertiary} busy={busy} touch={touch} variant="text" testId={`${testId}-tertiary`} />
251
+ ) : null}
252
+ {hasFooter ? (
253
+ <Box sx={footerSx(touch, step.footer ?? 'end')} data-testid={`${testId}-footer`}>
254
+ {secondary ? (
255
+ <ActionButton action={secondary} busy={busy} touch={touch} variant="outline" testId={`${testId}-secondary`} />
256
+ ) : null}
257
+ {step.primary ? (
258
+ <ActionButton action={step.primary} busy={busy} touch={touch} variant="solid" testId={`${testId}-primary`} />
259
+ ) : null}
260
+ </Box>
261
+ ) : null}
262
+ </>
263
+ );
264
+ }
265
+
266
+ interface DoneProps {
267
+ done: SequenceDone;
268
+ titleId: string;
269
+ error: string | null;
270
+ touch: boolean;
271
+ onConfirm: () => void;
272
+ testId: string;
273
+ screenKey: string;
274
+ }
275
+
276
+ /** The end screen: a check, the host's title and sentence, one button that closes. */
277
+ export function SequenceDoneBody({ done, titleId, error, touch, onConfirm, testId, screenKey }: DoneProps): React.JSX.Element {
278
+ const titleRef = useRef<HTMLHeadingElement | null>(null);
279
+ useFocusOnScreen(screenKey, titleRef, titleRef);
280
+ return (
281
+ <Box sx={doneSx} data-testid={`${testId}-done`}>
282
+ <CheckCircleOutlineIcon aria-hidden sx={doneIconSx} />
283
+ <Typography component="h2" id={titleId} tabIndex={-1} ref={titleRef} sx={doneTitleSx}>
284
+ {done.title}
285
+ </Typography>
286
+ {done.description ? (
287
+ <Typography variant="body2" color="text.secondary">
288
+ {done.description}
289
+ </Typography>
290
+ ) : null}
291
+ {error ? (
292
+ <Alert variant="danger" announce="assertive" description={error} dataTestId={`${testId}-error`} />
293
+ ) : null}
294
+ <Button
295
+ variant="solid"
296
+ color="primary"
297
+ size="md"
298
+ fullWidth={touch}
299
+ onClick={onConfirm}
300
+ dataTestId={`${testId}-done-confirm`}
301
+ sx={doneConfirmSx()}
302
+ >
303
+ {done.confirmLabel}
304
+ </Button>
305
+ </Box>
306
+ );
307
+ }