@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.
- package/NATIVE.md +1 -1
- package/components-catalog.md +8 -0
- package/dist/_internal/components/data-display/Badge/Badge.js +3 -3
- package/dist/_internal/components/data-display/Badge/Badge.styles.js +3 -3
- package/dist/_internal/components/data-display/Badge/BadgeContent.js +3 -3
- package/dist/_internal/components/data-display/CardKit/CardKebab.js +5 -5
- package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +5 -5
- package/dist/_internal/components/data-display/CardKit/use-row-confirm.js +5 -5
- package/dist/_internal/components/data-display/Carousel/Carousel.chrome.js +3 -3
- package/dist/_internal/components/data-display/Carousel/Carousel.js +3 -3
- package/dist/_internal/components/data-display/Carousel/Carousel.parts.js +3 -3
- package/dist/_internal/components/data-display/Carousel/Carousel.styles.js +3 -3
- package/dist/_internal/components/data-display/Chart/Chart.js +3 -3
- package/dist/_internal/components/data-display/Chart/SpecChart.js +3 -3
- package/dist/_internal/components/data-display/Chart/chart-context.js +3 -3
- package/dist/_internal/components/data-display/Chart/chart-internals.js +3 -3
- package/dist/_internal/components/data-display/Chart/chart-renderers.js +3 -3
- package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +57 -57
- package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +71 -71
- package/dist/_internal/components/data-display/DataViews/DeleteViewDialog.js +5 -5
- package/dist/_internal/components/data-display/DataViews/ManageViewsDialog.js +6 -6
- package/dist/_internal/components/data-display/DataViews/SaveViewModal.js +8 -8
- package/dist/_internal/components/data-display/DataViews/data-views-bar-controls.js +3 -3
- package/dist/_internal/components/data-display/DataViews/data-views-card-body.js +6 -6
- package/dist/_internal/components/data-display/DataViews/data-views-category-pill.js +19 -19
- package/dist/_internal/components/data-display/DataViews/data-views-columns.js +6 -6
- package/dist/_internal/components/data-display/DataViews/data-views-day-input.js +3 -3
- package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +6 -6
- package/dist/_internal/components/data-display/DataViews/data-views-empty.js +5 -5
- package/dist/_internal/components/data-display/DataViews/data-views-export.js +5 -5
- package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +30 -30
- package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +8 -8
- package/dist/_internal/components/data-display/DataViews/data-views-grid-helpers.js +5 -5
- package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +54 -54
- package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +31 -31
- package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +25 -25
- package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +28 -28
- package/dist/_internal/components/data-display/DataViews/data-views-number-input.js +3 -3
- package/dist/_internal/components/data-display/DataViews/data-views-pagination.js +5 -5
- package/dist/_internal/components/data-display/DataViews/data-views-quick-chip.js +3 -3
- package/dist/_internal/components/data-display/DataViews/data-views-range-pill.js +6 -6
- package/dist/_internal/components/data-display/DataViews/data-views-search.js +3 -3
- package/dist/_internal/components/data-display/DataViews/data-views-select-all-strip.js +5 -5
- package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +17 -17
- package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +18 -18
- package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +16 -16
- package/dist/_internal/components/data-display/DataViews/data-views-view-nav.js +5 -5
- package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +7 -7
- package/dist/_internal/components/data-display/FleetMap/FleetBody.js +7 -7
- package/dist/_internal/components/data-display/FleetMap/FleetCanvas.js +6 -6
- package/dist/_internal/components/data-display/FleetMap/FleetMap.fixtures.js +2 -2
- package/dist/_internal/components/data-display/FleetMap/FleetMap.js +9 -9
- package/dist/_internal/components/data-display/LazyImage/LazyImage.js +3 -3
- package/dist/_internal/components/data-display/MapPreview/MapLayers.js +4 -4
- package/dist/_internal/components/data-display/MapPreview/MapPreview.js +5 -5
- package/dist/_internal/components/data-display/MapPreview/MapSearchBar.js +3 -3
- package/dist/_internal/components/data-display/Sheet/Sheet.body.js +3 -3
- package/dist/_internal/components/data-display/Sheet/Sheet.js +3 -3
- package/dist/_internal/components/data-display/Sheet/Sheet.styles.js +3 -3
- package/dist/_internal/components/data-display/index.js +10 -10
- package/dist/_internal/components/feedback/ConfirmAction/ConfirmButton.js +5 -5
- package/dist/_internal/components/feedback/NotificationStatusNotice/NotificationStatusNotice.js +5 -5
- package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.js +56 -0
- package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.metrics.js +8 -0
- package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.metrics.js.map +1 -0
- package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.parts.js +52 -0
- package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.parts.js.map +1 -0
- package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.styles.js +58 -0
- package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.styles.js.map +1 -0
- package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.types.js +1 -0
- package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.types.js.map +1 -0
- package/dist/_internal/components/feedback/SequenceResolver/sequence-model.js +28 -0
- package/dist/_internal/components/feedback/SequenceResolver/sequence-model.js.map +1 -0
- package/dist/_internal/components/feedback/SequenceResolver/useSequenceRun.js +9 -0
- package/dist/_internal/components/feedback/SequenceResolver/useSequenceRun.js.map +1 -0
- package/dist/_internal/components/feedback/TutorialOverlay/TutorialOverlay.js +2 -2
- package/dist/_internal/components/feedback/index.js +40 -23
- package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.hooks.js +4 -4
- package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.js +11 -11
- package/dist/_internal/components/form/AddressAutocomplete/AddressAutocompleteField.js +5 -5
- package/dist/_internal/components/form/AddressAutocomplete/AddressFallbackField.js +4 -4
- package/dist/_internal/components/form/AddressAutocomplete/AddressInputField.js +4 -4
- package/dist/_internal/components/form/AddressAutocomplete/AddressTextField.js +3 -3
- package/dist/_internal/components/form/Autocomplete/Autocomplete.js +4 -4
- package/dist/_internal/components/form/Autocomplete/Autocomplete.parts.js +3 -3
- package/dist/_internal/components/form/Button/Button.js +4 -4
- package/dist/_internal/components/form/Button/Button.styles.js +3 -3
- package/dist/_internal/components/form/Calendar/Calendar.js +2 -2
- package/dist/_internal/components/form/CategorySelect/CategoryPanel.js +8 -8
- package/dist/_internal/components/form/CategorySelect/CategoryPanelFoot.js +4 -4
- package/dist/_internal/components/form/CategorySelect/CategoryPanelHead.js +4 -4
- package/dist/_internal/components/form/CategorySelect/CategoryPanelList.js +5 -5
- package/dist/_internal/components/form/CategorySelect/CategoryRows.js +4 -4
- package/dist/_internal/components/form/CategorySelect/CategorySelect.js +11 -11
- package/dist/_internal/components/form/CategorySelect/CategorySelect.styles.js +3 -3
- package/dist/_internal/components/form/CategorySelect/CategoryTrigger.js +4 -4
- package/dist/_internal/components/form/CepField/CepField.js +6 -6
- package/dist/_internal/components/form/CodeEditor/CodeEditor.js +3 -3
- package/dist/_internal/components/form/Command/Command.js +5 -5
- package/dist/_internal/components/form/Command/Command.styles.js +3 -3
- package/dist/_internal/components/form/CreatableSelect/CreatableSelect.js +3 -3
- package/dist/_internal/components/form/DateRangePicker/DateRangePicker.hooks.js +5 -5
- package/dist/_internal/components/form/DateRangePicker/DateRangePicker.js +9 -9
- package/dist/_internal/components/form/DateRangePicker/DateRangePicker.range.js +4 -4
- package/dist/_internal/components/form/DateRangePicker/DateRangePickerFields.js +5 -5
- package/dist/_internal/components/form/Input/Input.factory.js +4 -4
- package/dist/_internal/components/form/Input/Input.js +5 -5
- package/dist/_internal/components/form/Input/Input.styles.js +3 -3
- package/dist/_internal/components/form/InputOTP/InputOTP.js +4 -4
- package/dist/_internal/components/form/InputOTP/InputOTP.styles.js +3 -3
- package/dist/_internal/components/form/Label/Label.js +3 -3
- package/dist/_internal/components/form/Label/Label.styles.js +3 -3
- package/dist/_internal/components/form/Menubar/Menubar.item.js +3 -3
- package/dist/_internal/components/form/Menubar/Menubar.js +5 -5
- package/dist/_internal/components/form/Menubar/Menubar.styles.js +3 -3
- package/dist/_internal/components/form/Menubar/Menubar.toolbar.js +3 -3
- package/dist/_internal/components/form/NumberField/NumberField.js +6 -6
- package/dist/_internal/components/form/PhoneInput/PhoneInput.js +3 -3
- package/dist/_internal/components/form/PickerSheet/PickerSheet.js +6 -6
- package/dist/_internal/components/form/PickerSheet/PickerSheet.parts.js +4 -4
- package/dist/_internal/components/form/PickerSheet/PickerSheet.styles.js +3 -3
- package/dist/_internal/components/form/RadioGroup/RadioGroup.js +5 -5
- package/dist/_internal/components/form/RadioGroup/RadioGroup.styles.js +3 -3
- package/dist/_internal/components/form/RadioGroup/RadioGroup.variants.js +4 -4
- package/dist/_internal/components/form/RichTextEditor/RichTextEditor.js +2 -2
- package/dist/_internal/components/form/Select/Select.js +6 -6
- package/dist/_internal/components/form/Select/Select.menu.js +4 -4
- package/dist/_internal/components/form/Select/Select.searchable.js +4 -4
- package/dist/_internal/components/form/Select/Select.styles.js +3 -3
- package/dist/_internal/components/form/Textarea/Textarea.js +3 -3
- package/dist/_internal/components/form/Textarea/TextareaRichEditor.js +4 -4
- package/dist/_internal/components/form/Toggle/Toggle.js +4 -4
- package/dist/_internal/components/form/Toggle/Toggle.styles.js +3 -3
- package/dist/_internal/components/form/ToggleGroup/ToggleGroup.js +3 -3
- package/dist/_internal/components/form/UploadButton/UploadButton.js +2 -2
- package/dist/_internal/components/form/index.js +64 -64
- package/dist/_internal/components/form/total-form/Fields/CategoryField.js +12 -12
- package/dist/_internal/components/form/total-form/Fields/CepField.js +7 -7
- package/dist/_internal/components/form/total-form/Fields/SelectField.js +7 -7
- package/dist/_internal/components/form/total-form/Fields/TextField.js +6 -6
- package/dist/_internal/components/form/total-form/Fields/ToggleField.js +4 -4
- package/dist/_internal/components/form/total-form/Fields/index.js +30 -30
- package/dist/_internal/components/form/total-form/SubmitButton.js +5 -5
- package/dist/_internal/components/index.js +165 -155
- package/dist/_internal/components/layout/Box/Box.js +6 -6
- package/dist/_internal/components/layout/ContentToolbar/ColumnsMenu.js +3 -3
- package/dist/_internal/components/layout/ContentToolbar/FilterTrigger.js +3 -3
- package/dist/_internal/components/layout/ContentToolbar/MultiSelectDropdown.js +4 -4
- package/dist/_internal/components/layout/ContentToolbar/MultiSelectTriggers.js +3 -3
- package/dist/_internal/components/layout/ContentToolbar/SavedViewsMenu.js +3 -3
- package/dist/_internal/components/layout/ContentToolbar/SortByDropdown.js +3 -3
- package/dist/_internal/components/layout/ContentToolbar/ViewSelector.js +3 -3
- package/dist/_internal/components/layout/Screen/Screen.js +7 -7
- package/dist/_internal/components/layout/SettingCard/SettingCard.js +11 -11
- package/dist/_internal/components/layout/SettingCard/SettingCard.parts.js +9 -9
- package/dist/_internal/components/layout/SettingCard/SettingCard.summary.js +10 -10
- package/dist/_internal/components/layout/SettingCard/SettingGrid.js +10 -10
- package/dist/_internal/components/layout/SettingCard/SettingGroup.js +13 -13
- package/dist/_internal/components/layout/SettingCard/SettingSwitch.js +11 -11
- package/dist/_internal/components/layout/SettingCard/SettingToggle.js +13 -13
- package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.js +3 -3
- package/dist/_internal/components/layout/SettingsLayout/SettingsPanel.js +2 -2
- package/dist/_internal/components/layout/Stack/Stack.js +7 -7
- package/dist/_internal/components/layout/TableFilter/TableFilter.js +3 -3
- package/dist/_internal/components/layout/index.js +36 -36
- package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +6 -6
- package/dist/_internal/components/navigation/AppHeader/AppHeader.identity.js +3 -3
- package/dist/_internal/components/navigation/NavigationMenu/NavigationMegaSection.js +2 -2
- package/dist/_internal/components/navigation/NavigationMenu/NavigationMenu.js +4 -4
- package/dist/_internal/components/navigation/NavigationMenu/NavigationStandardBody.js +2 -2
- package/dist/_internal/components/navigation/Pagination/Pagination.js +4 -4
- package/dist/_internal/components/navigation/Pagination/PaginationParts.js +3 -3
- package/dist/_internal/components/navigation/SectionNav/SectionNav.bar.js +3 -3
- package/dist/_internal/components/navigation/SectionNav/SectionNav.js +6 -6
- package/dist/_internal/components/navigation/SectionNav/SectionNav.parts.js +3 -3
- package/dist/_internal/components/navigation/SectionNav/SectionNav.primary.js +3 -3
- package/dist/_internal/components/navigation/SectionNav/SectionNav.rail.js +3 -3
- package/dist/_internal/components/navigation/SectionNav/SectionNav.railCreate.js +3 -3
- package/dist/_internal/components/navigation/SectionNav/SectionNav.sheet.js +3 -3
- package/dist/_internal/components/navigation/SectionNav/__stories__/fixtures.js +3 -3
- package/dist/_internal/components/navigation/Tabs/Tabs.js +2 -2
- package/dist/_internal/components/navigation/Tabs/Tabs.styles.js +2 -2
- package/dist/_internal/components/navigation/index.js +29 -29
- package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.helpers.js +3 -3
- package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.js +3 -3
- package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.parts.js +3 -3
- package/dist/_internal/components/utility/WorkflowStep/WorkflowStepRow.js +3 -3
- package/dist/_internal/components/utility/index.js +7 -7
- package/dist/_internal/en-US.data-display.js +2 -2
- package/dist/_internal/icons/Icon.js +6 -6
- package/dist/_internal/provider/UiProvider.js +5 -5
- package/dist/_internal/provider/mui-bridge.js +4 -4
- package/dist/_internal/provider/use-ui-theme.js +5 -5
- package/dist/_internal/social-login-button/social-login-button.js +5 -5
- package/dist/_internal/tokens/density.js +3 -3
- package/dist/_internal/tokens/field-height.js +2 -2
- package/dist/_internal/user-avatar/user-avatar.js +5 -5
- package/dist/charts.js +3 -3
- package/dist/{chunk-75FHDUJW.js → chunk-2D4WKET2.js} +5 -5
- package/dist/{chunk-3O2OJW4O.js → chunk-2QO3BKUQ.js} +8 -8
- package/dist/{chunk-MA6ENJDP.js → chunk-2VHAD4NE.js} +3 -3
- package/dist/{chunk-FJ3UZ4RC.js → chunk-33MMQHYU.js} +2 -2
- package/dist/{chunk-CBO46LJH.js → chunk-3HSLEUVW.js} +5 -5
- package/dist/chunk-3LUT2C5M.js +122 -0
- package/dist/chunk-3LUT2C5M.js.map +1 -0
- package/dist/{chunk-6VTOGR36.js → chunk-3XZZSHE5.js} +5 -5
- package/dist/{chunk-BLINEMVO.js → chunk-3YLRR4JM.js} +3 -3
- package/dist/{chunk-PD7MKJCM.js → chunk-4AJY7HMH.js} +5 -5
- package/dist/{chunk-VWVA74JY.js → chunk-4HUSG5MR.js} +2 -2
- package/dist/{chunk-7CPLKAL6.js → chunk-4M5GEKPM.js} +2 -2
- package/dist/{chunk-WEMI4PV7.js → chunk-4MQ6XTIJ.js} +5 -5
- package/dist/{chunk-3MQZBBUW.js → chunk-5463SZOH.js} +3 -3
- package/dist/{chunk-CAX3NFFE.js → chunk-555TUQ7E.js} +4 -4
- package/dist/{chunk-5KGABAQB.js → chunk-5752357K.js} +4 -4
- package/dist/{chunk-ZOLUUX4B.js → chunk-5J7SA4CZ.js} +4 -4
- package/dist/chunk-5UBP2DJ4.js +102 -0
- package/dist/chunk-5UBP2DJ4.js.map +1 -0
- package/dist/{chunk-364NH2NY.js → chunk-5USHYSCO.js} +21 -12
- package/dist/chunk-5USHYSCO.js.map +1 -0
- package/dist/{chunk-5AQLJ4AL.js → chunk-62XVHRTX.js} +2 -2
- package/dist/{chunk-SO5OU2ZV.js → chunk-64AOS2WA.js} +2 -2
- package/dist/{chunk-75I42HHE.js → chunk-66QQ7YQN.js} +2 -2
- package/dist/{chunk-7KZEQJPQ.js → chunk-6J7RGNSF.js} +4 -4
- package/dist/{chunk-GCBWZ3MX.js → chunk-6LMYQJZP.js} +2 -2
- package/dist/{chunk-4SQ2WCZA.js → chunk-6MOJK2QT.js} +2 -2
- package/dist/{chunk-Q6MZHT2F.js → chunk-6RTE4UNO.js} +5 -5
- package/dist/{chunk-NIZUFPV3.js → chunk-72GJRV5J.js} +2 -2
- package/dist/{chunk-LYB6YYTG.js → chunk-72OG3AGH.js} +2 -2
- package/dist/{chunk-Y46R26TE.js → chunk-7AC2UGTU.js} +3 -3
- package/dist/{chunk-NPSARV2I.js → chunk-7P5PNRBT.js} +8 -8
- package/dist/{chunk-RPKUZDRY.js → chunk-7QXEEZFO.js} +2 -2
- package/dist/{chunk-SUXT6QAY.js → chunk-7RG37FVT.js} +2 -2
- package/dist/{chunk-5F7HYYGM.js → chunk-7ZROYGUG.js} +3 -3
- package/dist/{chunk-LY5I3ZSV.js → chunk-A2YLFKQU.js} +4 -4
- package/dist/{chunk-BEYLI32I.js → chunk-A5NXBOWS.js} +7 -7
- package/dist/{chunk-7TKQIZ3K.js → chunk-AAREDFH6.js} +2 -2
- package/dist/{chunk-4QGPRORO.js → chunk-AEYLFBZT.js} +3 -3
- package/dist/{chunk-VPGDYI63.js → chunk-AKBL7S7A.js} +5 -5
- package/dist/{chunk-6DGNMASB.js → chunk-ALREWFRX.js} +4 -4
- package/dist/{chunk-NQ6P7O7C.js → chunk-ASZGMKB4.js} +2 -2
- package/dist/{chunk-CWCNLITK.js → chunk-AXZCCX7O.js} +2 -2
- package/dist/{chunk-FVL6U72V.js → chunk-B2JYQBO4.js} +2 -2
- package/dist/{chunk-IU2WSJ4F.js → chunk-BARTUKJU.js} +2 -2
- package/dist/{chunk-4JNC5AEF.js → chunk-BTGXHQX3.js} +2 -2
- package/dist/{chunk-VMTOLAZ5.js → chunk-BWFQEASG.js} +5 -5
- package/dist/{chunk-MKBIIYJM.js → chunk-C47LBKEG.js} +4 -4
- package/dist/{chunk-2K2Q7VGV.js → chunk-C5JCARNE.js} +2 -2
- package/dist/{chunk-LBEZ7A3F.js → chunk-C7CIUDXZ.js} +3 -3
- package/dist/chunk-CHP3QIS3.js +218 -0
- package/dist/chunk-CHP3QIS3.js.map +1 -0
- package/dist/{chunk-YWXCLPCX.js → chunk-CO7GH3W7.js} +2 -2
- package/dist/{chunk-ARVLS57B.js → chunk-CW6Y32N2.js} +2 -2
- package/dist/{chunk-LZJHHMOF.js → chunk-DRJL3JHR.js} +2 -2
- package/dist/chunk-DTNXP7ZS.js +1 -0
- package/dist/chunk-DTNXP7ZS.js.map +1 -0
- package/dist/{chunk-7IXXASQ6.js → chunk-DXFKPY2K.js} +4 -4
- package/dist/chunk-E53MMMDA.js +209 -0
- package/dist/chunk-E53MMMDA.js.map +1 -0
- package/dist/{chunk-FR2RJXHS.js → chunk-EBCEDBHX.js} +3 -3
- package/dist/{chunk-BRHRK7BK.js → chunk-ENRB6PIN.js} +2 -2
- package/dist/{chunk-J5QNJERV.js → chunk-F6IMOMA3.js} +3 -3
- package/dist/{chunk-YTDUIU7X.js → chunk-F6LZHF4O.js} +2 -2
- package/dist/{chunk-725H45MT.js → chunk-FAIQCGSL.js} +5 -5
- package/dist/{chunk-HVGQH54G.js → chunk-FTDGFWB5.js} +5 -5
- package/dist/{chunk-P7VAMJFJ.js → chunk-GFXS5PJL.js} +3 -3
- package/dist/{chunk-YEKPQAOW.js → chunk-GQ2T44BC.js} +2 -2
- package/dist/{chunk-JA3WJPXH.js → chunk-GSXYXMCV.js} +3 -3
- package/dist/{chunk-IZ7JTG3Z.js → chunk-GTT5UKKO.js} +4 -4
- package/dist/{chunk-WDSJ6SVY.js → chunk-GXSHLMT4.js} +2 -2
- package/dist/chunk-HHPFWEJY.js +28 -0
- package/dist/chunk-HHPFWEJY.js.map +1 -0
- package/dist/{chunk-ULK4AGG4.js → chunk-HTGK7QCX.js} +3 -3
- package/dist/{chunk-Y3LK6ZQG.js → chunk-I2KAN3YB.js} +2 -2
- package/dist/{chunk-M5DBOM7R.js → chunk-ICRVLGWD.js} +2 -2
- package/dist/{chunk-BEHM2VLH.js → chunk-IQ2U5MVO.js} +7 -7
- package/dist/{chunk-LABIUXDM.js → chunk-J7C7FPVO.js} +2 -2
- package/dist/{chunk-CYH5QQUP.js → chunk-KHIUYLKY.js} +4 -4
- package/dist/{chunk-PPEHBI5O.js → chunk-KXTNTDRD.js} +2 -2
- package/dist/{chunk-IBOFASAZ.js → chunk-LC6ND4ET.js} +2 -2
- package/dist/{chunk-BF3SGOWT.js → chunk-LG52LMAM.js} +3 -3
- package/dist/{chunk-3Y7LSMGV.js → chunk-LH4VKUZC.js} +2 -2
- package/dist/{chunk-CFDWKQZT.js → chunk-LODYTVOO.js} +2 -2
- package/dist/{chunk-Y2CCXB7R.js → chunk-LUNN5GTB.js} +2 -2
- package/dist/{chunk-ACBHZG3Z.js → chunk-M74YHHJE.js} +5 -5
- package/dist/{chunk-BGGVYKVZ.js → chunk-MA6SUE7F.js} +4 -4
- package/dist/{chunk-AT6UKTH4.js → chunk-MHFXJRLD.js} +2 -2
- package/dist/{chunk-3BDMYTH6.js → chunk-MHLYX6QW.js} +4 -4
- package/dist/{chunk-FXECKKPW.js → chunk-MO4FFK62.js} +3 -3
- package/dist/{chunk-SAKSIN7E.js → chunk-MQVIYTH5.js} +2 -2
- package/dist/{chunk-NKBCUR4V.js → chunk-MSC43MCJ.js} +2 -2
- package/dist/{chunk-RHVJ3L4U.js → chunk-MWPD2BXO.js} +2 -2
- package/dist/{chunk-TSID4257.js → chunk-N34AOGK3.js} +7 -7
- package/dist/{chunk-NZBEE2PR.js → chunk-N3LW5ER5.js} +3 -3
- package/dist/{chunk-Q3HYEAVQ.js → chunk-N3ZOZWP5.js} +2 -2
- package/dist/{chunk-AO4NDR6W.js → chunk-NTO5DALI.js} +2 -2
- package/dist/{chunk-VQSBZPKO.js → chunk-NYWAAXDX.js} +2 -2
- package/dist/{chunk-CHGUN7OF.js → chunk-O6SAU5JA.js} +2 -2
- package/dist/{chunk-3FDSXSEP.js → chunk-OE3SQOZV.js} +2 -2
- package/dist/{chunk-VLH3IMJG.js → chunk-OFXCSLGX.js} +2 -2
- package/dist/{chunk-E54XIRY2.js → chunk-PIP7XII2.js} +5 -5
- package/dist/{chunk-QWSYHENP.js → chunk-PTQRJEPN.js} +5 -5
- package/dist/{chunk-S5VIN3EB.js → chunk-Q6PRGXR2.js} +2 -2
- package/dist/{chunk-DQ3O252B.js → chunk-QCNUMOTL.js} +2 -2
- package/dist/{chunk-XZE5FIRB.js → chunk-QCQWOSSD.js} +2 -2
- package/dist/{chunk-TRYYYWV3.js → chunk-QIYX33SH.js} +9 -9
- package/dist/{chunk-RGVNXES5.js → chunk-QQHZBJMU.js} +4 -4
- package/dist/{chunk-XZFTRGRW.js → chunk-QVO4SIS7.js} +2 -2
- package/dist/{chunk-WJEJ65TF.js → chunk-QYX4567K.js} +2 -2
- package/dist/{chunk-7JKDB5J5.js → chunk-R53ZOW4B.js} +4 -4
- package/dist/{chunk-HSIUVFXE.js → chunk-RA6W37NZ.js} +2 -2
- package/dist/{chunk-HDTFLW42.js → chunk-REMODSVN.js} +2 -2
- package/dist/{chunk-P4LR2GLN.js → chunk-RIDCGFGM.js} +2 -2
- package/dist/{chunk-RNQ2PGBB.js → chunk-RKVS5AA6.js} +3 -3
- package/dist/{chunk-MKNW4FRR.js → chunk-RS576GOH.js} +7 -7
- package/dist/{chunk-NIENIKZ5.js → chunk-SCAPSX6T.js} +2 -2
- package/dist/{chunk-HG2YLNGJ.js → chunk-SFVHZAGE.js} +2 -2
- package/dist/{chunk-5HFB4WFE.js → chunk-T743IIER.js} +3 -3
- package/dist/{chunk-C6LW34TV.js → chunk-THD3N4BJ.js} +2 -2
- package/dist/{chunk-IDRVQVDL.js → chunk-TNDTEI6D.js} +2 -2
- package/dist/{chunk-U2QV4TTZ.js → chunk-TR7ZA67L.js} +2 -2
- package/dist/chunk-TWAKMV5B.js +1 -0
- package/dist/chunk-TWAKMV5B.js.map +1 -0
- package/dist/{chunk-EP3DRILI.js → chunk-U36BXXQ7.js} +2 -2
- package/dist/{chunk-AJ5LXKLQ.js → chunk-U4G3KY6L.js} +6 -6
- package/dist/{chunk-UAFSEZ2E.js → chunk-UQUN2NGE.js} +2 -2
- package/dist/{chunk-6A4PTK5Q.js → chunk-V4JMZZGH.js} +5 -5
- package/dist/{chunk-72L5C74V.js → chunk-VBGC7G4F.js} +3 -3
- package/dist/{chunk-IWJTLCTF.js → chunk-VD72JGHA.js} +3 -3
- package/dist/{chunk-TVXUOJAL.js → chunk-VJG43WKU.js} +2 -2
- package/dist/{chunk-H7QTDKA6.js → chunk-VMN6KG2U.js} +2 -2
- package/dist/{chunk-YRF7WFAQ.js → chunk-WA6F4NOO.js} +8 -8
- package/dist/{chunk-HOJL2GKW.js → chunk-WC3W36AM.js} +4 -4
- package/dist/{chunk-OQW4OERS.js → chunk-WNIL2KTB.js} +3 -3
- package/dist/{chunk-NQYC7V5N.js → chunk-WOSUYOAU.js} +5 -5
- package/dist/{chunk-DDNUPFPE.js → chunk-WT7VZDTI.js} +5 -5
- package/dist/{chunk-DOWVAC4U.js → chunk-XODBYGTH.js} +2 -2
- package/dist/{chunk-HDXUQKJ5.js → chunk-XRDH24J7.js} +2 -2
- package/dist/{chunk-DQKMOGYZ.js → chunk-XYFBJH6F.js} +4 -4
- package/dist/{chunk-SZSS5KKX.js → chunk-XYSE2QZN.js} +2 -2
- package/dist/{chunk-MIUPTZS6.js → chunk-Y4KR4LT2.js} +2 -2
- package/dist/{chunk-D7PVIC33.js → chunk-Y7YJYUNV.js} +4 -4
- package/dist/{chunk-GHP5JLL3.js → chunk-YASSCBWN.js} +2 -2
- package/dist/{chunk-QLJU7UUI.js → chunk-YH7G44WL.js} +2 -2
- package/dist/chunk-YJBWDDW7.js +162 -0
- package/dist/chunk-YJBWDDW7.js.map +1 -0
- package/dist/{chunk-FS55MQ4Q.js → chunk-YNDTLBOH.js} +2 -2
- package/dist/{chunk-6E4L53DF.js → chunk-YZX4DVRS.js} +2 -2
- package/dist/{chunk-NDQJDA7O.js → chunk-Z7COWR4K.js} +2 -2
- package/dist/{chunk-NYA26GV2.js → chunk-ZCCKIWZU.js} +2 -2
- package/dist/{chunk-J32XJALK.js → chunk-ZTPB7PVI.js} +2 -2
- package/dist/{chunk-NKHNUTTY.js → chunk-ZXHODKHH.js} +3 -3
- package/dist/{chunk-7LOCLC24.js → chunk-ZYKDUKAH.js} +2 -2
- package/dist/data-display/Badge.js +3 -3
- package/dist/data-display/CardKit.js +6 -6
- package/dist/data-display/Carousel.js +3 -3
- package/dist/data-display/Chart.js +3 -3
- package/dist/data-display/DataViews.js +71 -71
- package/dist/data-display/FleetMap.js +9 -9
- package/dist/data-display/LazyImage.js +3 -3
- package/dist/data-display/MapPreview.js +5 -5
- package/dist/data-display/Sheet.js +3 -3
- package/dist/en-US.js +6 -6
- package/dist/feedback/ConfirmAction.js +5 -5
- package/dist/feedback/NotificationStatusNotice.js +5 -5
- package/dist/feedback/SequenceResolver.js +56 -0
- package/dist/feedback/SequenceResolver.js.map +1 -0
- package/dist/feedback/TutorialOverlay.js +2 -2
- package/dist/form/AddressAutocomplete.js +11 -11
- package/dist/form/Autocomplete.js +4 -4
- package/dist/form/Button.js +4 -4
- package/dist/form/Calendar.js +2 -2
- package/dist/form/CategorySelect.js +11 -11
- package/dist/form/CepField.js +6 -6
- package/dist/form/CodeEditor.js +3 -3
- package/dist/form/Command.js +5 -5
- package/dist/form/CreatableSelect.js +3 -3
- package/dist/form/DateRangePicker.js +9 -9
- package/dist/form/Input/outlined.js +5 -5
- package/dist/form/Input.js +5 -5
- package/dist/form/InputOTP.js +4 -4
- package/dist/form/Label.js +3 -3
- package/dist/form/MenuSelect.js +4 -4
- package/dist/form/Menubar.js +5 -5
- package/dist/form/NumberField.js +6 -6
- package/dist/form/PhoneInput.js +3 -3
- package/dist/form/PickerSheet.js +6 -6
- package/dist/form/RadioGroup.js +5 -5
- package/dist/form/RichTextEditor.js +2 -2
- package/dist/form/Select.js +6 -6
- package/dist/form/Textarea.js +3 -3
- package/dist/form/Toggle.js +4 -4
- package/dist/form/ToggleGroup.js +3 -3
- package/dist/form/UploadButton.js +2 -2
- package/dist/form/total-form.js +32 -32
- package/dist/icons.js +6 -6
- package/dist/layout/Box.js +6 -6
- package/dist/layout/ContentToolbar.js +11 -11
- package/dist/layout/Screen.js +7 -7
- package/dist/layout/SettingCard.js +18 -18
- package/dist/layout/SettingsLayout.js +3 -3
- package/dist/layout/Stack.js +7 -7
- package/dist/layout/TableFilter.js +3 -3
- package/dist/locales.js +11 -11
- package/dist/native/chunks/{chunk-2MFMON74.js → chunk-EZHCNYQO.js} +67 -33
- package/dist/native/chunks/chunk-EZHCNYQO.js.map +1 -0
- package/dist/native/chunks/{chunk-H22XVP5O.js → chunk-TZPNJ4AU.js} +2 -2
- package/dist/native/data-display/EmptyState.js +2 -2
- package/dist/native/data-display/ErrorState.js +1 -1
- package/dist/native/data-display/FleetMap.js +2 -2
- package/dist/native/form/Button.js +1 -1
- package/dist/navigation/AppHeader.js +8 -8
- package/dist/navigation/NavigationMenu.js +4 -4
- package/dist/navigation/Pagination.js +4 -4
- package/dist/navigation/SectionNav.js +6 -6
- package/dist/navigation/Tabs.js +2 -2
- package/dist/provider.js +6 -6
- package/dist/pt-BR.js +5 -5
- package/dist/social-login-button.js +5 -5
- package/dist/tokens.js +4 -4
- package/dist/types/components/feedback/SequenceResolver/SequenceResolver.d.ts +17 -0
- package/dist/types/components/feedback/SequenceResolver/SequenceResolver.d.ts.map +1 -0
- package/dist/types/components/feedback/SequenceResolver/SequenceResolver.metrics.d.ts +33 -0
- package/dist/types/components/feedback/SequenceResolver/SequenceResolver.metrics.d.ts.map +1 -0
- package/dist/types/components/feedback/SequenceResolver/SequenceResolver.parts.d.ts +61 -0
- package/dist/types/components/feedback/SequenceResolver/SequenceResolver.parts.d.ts.map +1 -0
- package/dist/types/components/feedback/SequenceResolver/SequenceResolver.styles.d.ts +51 -0
- package/dist/types/components/feedback/SequenceResolver/SequenceResolver.styles.d.ts.map +1 -0
- package/dist/types/components/feedback/SequenceResolver/SequenceResolver.types.d.ts +175 -0
- package/dist/types/components/feedback/SequenceResolver/SequenceResolver.types.d.ts.map +1 -0
- package/dist/types/components/feedback/SequenceResolver/index.d.ts +3 -0
- package/dist/types/components/feedback/SequenceResolver/index.d.ts.map +1 -0
- package/dist/types/components/feedback/SequenceResolver/sequence-model.d.ts +85 -0
- package/dist/types/components/feedback/SequenceResolver/sequence-model.d.ts.map +1 -0
- package/dist/types/components/feedback/SequenceResolver/useSequenceRun.d.ts +24 -0
- package/dist/types/components/feedback/SequenceResolver/useSequenceRun.d.ts.map +1 -0
- package/dist/types/components/feedback/index.d.ts +1 -0
- package/dist/types/components/feedback/index.d.ts.map +1 -1
- package/dist/types/components/form/Button/Button.d.ts.map +1 -1
- package/dist/types/components/form/Button/Button.native.loading.d.ts +36 -0
- package/dist/types/components/form/Button/Button.native.loading.d.ts.map +1 -0
- package/dist/types-native/components/form/Button/Button.native.d.ts.map +1 -1
- package/dist/types-native/components/form/Button/Button.native.loading.d.ts +36 -0
- package/dist/types-native/components/form/Button/Button.native.loading.d.ts.map +1 -0
- package/dist/user-avatar.js +5 -5
- package/dist/utility/WorkflowStep.js +3 -3
- package/package.json +5 -1
- package/src/components/feedback/SequenceResolver/SequenceResolver.md +136 -0
- package/src/components/feedback/SequenceResolver/SequenceResolver.metrics.ts +26 -0
- package/src/components/feedback/SequenceResolver/SequenceResolver.parts.tsx +307 -0
- package/src/components/feedback/SequenceResolver/SequenceResolver.styles.ts +238 -0
- package/src/components/feedback/SequenceResolver/SequenceResolver.tsx +179 -0
- package/src/components/feedback/SequenceResolver/SequenceResolver.types.ts +185 -0
- package/src/components/feedback/SequenceResolver/index.ts +14 -0
- package/src/components/feedback/SequenceResolver/sequence-model.ts +181 -0
- package/src/components/feedback/SequenceResolver/useSequenceRun.ts +205 -0
- package/src/components/feedback/index.ts +1 -0
- package/src/components/form/Button/Button.md +4 -3
- package/src/components/form/Button/Button.native.loading.tsx +89 -0
- package/src/components/form/Button/Button.native.tsx +14 -24
- package/src/components/form/Button/Button.tsx +47 -16
- package/dist/chunk-364NH2NY.js.map +0 -1
- package/dist/chunk-6YIKVXAV.js +0 -1
- package/dist/native/chunks/chunk-2MFMON74.js.map +0 -1
- /package/dist/{chunk-6YIKVXAV.js.map → _internal/components/feedback/SequenceResolver/SequenceResolver.js.map} +0 -0
- /package/dist/{chunk-75FHDUJW.js.map → chunk-2D4WKET2.js.map} +0 -0
- /package/dist/{chunk-3O2OJW4O.js.map → chunk-2QO3BKUQ.js.map} +0 -0
- /package/dist/{chunk-MA6ENJDP.js.map → chunk-2VHAD4NE.js.map} +0 -0
- /package/dist/{chunk-FJ3UZ4RC.js.map → chunk-33MMQHYU.js.map} +0 -0
- /package/dist/{chunk-CBO46LJH.js.map → chunk-3HSLEUVW.js.map} +0 -0
- /package/dist/{chunk-6VTOGR36.js.map → chunk-3XZZSHE5.js.map} +0 -0
- /package/dist/{chunk-BLINEMVO.js.map → chunk-3YLRR4JM.js.map} +0 -0
- /package/dist/{chunk-PD7MKJCM.js.map → chunk-4AJY7HMH.js.map} +0 -0
- /package/dist/{chunk-VWVA74JY.js.map → chunk-4HUSG5MR.js.map} +0 -0
- /package/dist/{chunk-7CPLKAL6.js.map → chunk-4M5GEKPM.js.map} +0 -0
- /package/dist/{chunk-WEMI4PV7.js.map → chunk-4MQ6XTIJ.js.map} +0 -0
- /package/dist/{chunk-3MQZBBUW.js.map → chunk-5463SZOH.js.map} +0 -0
- /package/dist/{chunk-CAX3NFFE.js.map → chunk-555TUQ7E.js.map} +0 -0
- /package/dist/{chunk-5KGABAQB.js.map → chunk-5752357K.js.map} +0 -0
- /package/dist/{chunk-ZOLUUX4B.js.map → chunk-5J7SA4CZ.js.map} +0 -0
- /package/dist/{chunk-5AQLJ4AL.js.map → chunk-62XVHRTX.js.map} +0 -0
- /package/dist/{chunk-SO5OU2ZV.js.map → chunk-64AOS2WA.js.map} +0 -0
- /package/dist/{chunk-75I42HHE.js.map → chunk-66QQ7YQN.js.map} +0 -0
- /package/dist/{chunk-7KZEQJPQ.js.map → chunk-6J7RGNSF.js.map} +0 -0
- /package/dist/{chunk-GCBWZ3MX.js.map → chunk-6LMYQJZP.js.map} +0 -0
- /package/dist/{chunk-4SQ2WCZA.js.map → chunk-6MOJK2QT.js.map} +0 -0
- /package/dist/{chunk-Q6MZHT2F.js.map → chunk-6RTE4UNO.js.map} +0 -0
- /package/dist/{chunk-NIZUFPV3.js.map → chunk-72GJRV5J.js.map} +0 -0
- /package/dist/{chunk-LYB6YYTG.js.map → chunk-72OG3AGH.js.map} +0 -0
- /package/dist/{chunk-Y46R26TE.js.map → chunk-7AC2UGTU.js.map} +0 -0
- /package/dist/{chunk-NPSARV2I.js.map → chunk-7P5PNRBT.js.map} +0 -0
- /package/dist/{chunk-RPKUZDRY.js.map → chunk-7QXEEZFO.js.map} +0 -0
- /package/dist/{chunk-SUXT6QAY.js.map → chunk-7RG37FVT.js.map} +0 -0
- /package/dist/{chunk-5F7HYYGM.js.map → chunk-7ZROYGUG.js.map} +0 -0
- /package/dist/{chunk-LY5I3ZSV.js.map → chunk-A2YLFKQU.js.map} +0 -0
- /package/dist/{chunk-BEYLI32I.js.map → chunk-A5NXBOWS.js.map} +0 -0
- /package/dist/{chunk-7TKQIZ3K.js.map → chunk-AAREDFH6.js.map} +0 -0
- /package/dist/{chunk-4QGPRORO.js.map → chunk-AEYLFBZT.js.map} +0 -0
- /package/dist/{chunk-VPGDYI63.js.map → chunk-AKBL7S7A.js.map} +0 -0
- /package/dist/{chunk-6DGNMASB.js.map → chunk-ALREWFRX.js.map} +0 -0
- /package/dist/{chunk-NQ6P7O7C.js.map → chunk-ASZGMKB4.js.map} +0 -0
- /package/dist/{chunk-CWCNLITK.js.map → chunk-AXZCCX7O.js.map} +0 -0
- /package/dist/{chunk-FVL6U72V.js.map → chunk-B2JYQBO4.js.map} +0 -0
- /package/dist/{chunk-IU2WSJ4F.js.map → chunk-BARTUKJU.js.map} +0 -0
- /package/dist/{chunk-4JNC5AEF.js.map → chunk-BTGXHQX3.js.map} +0 -0
- /package/dist/{chunk-VMTOLAZ5.js.map → chunk-BWFQEASG.js.map} +0 -0
- /package/dist/{chunk-MKBIIYJM.js.map → chunk-C47LBKEG.js.map} +0 -0
- /package/dist/{chunk-2K2Q7VGV.js.map → chunk-C5JCARNE.js.map} +0 -0
- /package/dist/{chunk-LBEZ7A3F.js.map → chunk-C7CIUDXZ.js.map} +0 -0
- /package/dist/{chunk-YWXCLPCX.js.map → chunk-CO7GH3W7.js.map} +0 -0
- /package/dist/{chunk-ARVLS57B.js.map → chunk-CW6Y32N2.js.map} +0 -0
- /package/dist/{chunk-LZJHHMOF.js.map → chunk-DRJL3JHR.js.map} +0 -0
- /package/dist/{chunk-7IXXASQ6.js.map → chunk-DXFKPY2K.js.map} +0 -0
- /package/dist/{chunk-FR2RJXHS.js.map → chunk-EBCEDBHX.js.map} +0 -0
- /package/dist/{chunk-BRHRK7BK.js.map → chunk-ENRB6PIN.js.map} +0 -0
- /package/dist/{chunk-J5QNJERV.js.map → chunk-F6IMOMA3.js.map} +0 -0
- /package/dist/{chunk-YTDUIU7X.js.map → chunk-F6LZHF4O.js.map} +0 -0
- /package/dist/{chunk-725H45MT.js.map → chunk-FAIQCGSL.js.map} +0 -0
- /package/dist/{chunk-HVGQH54G.js.map → chunk-FTDGFWB5.js.map} +0 -0
- /package/dist/{chunk-P7VAMJFJ.js.map → chunk-GFXS5PJL.js.map} +0 -0
- /package/dist/{chunk-YEKPQAOW.js.map → chunk-GQ2T44BC.js.map} +0 -0
- /package/dist/{chunk-JA3WJPXH.js.map → chunk-GSXYXMCV.js.map} +0 -0
- /package/dist/{chunk-IZ7JTG3Z.js.map → chunk-GTT5UKKO.js.map} +0 -0
- /package/dist/{chunk-WDSJ6SVY.js.map → chunk-GXSHLMT4.js.map} +0 -0
- /package/dist/{chunk-ULK4AGG4.js.map → chunk-HTGK7QCX.js.map} +0 -0
- /package/dist/{chunk-Y3LK6ZQG.js.map → chunk-I2KAN3YB.js.map} +0 -0
- /package/dist/{chunk-M5DBOM7R.js.map → chunk-ICRVLGWD.js.map} +0 -0
- /package/dist/{chunk-BEHM2VLH.js.map → chunk-IQ2U5MVO.js.map} +0 -0
- /package/dist/{chunk-LABIUXDM.js.map → chunk-J7C7FPVO.js.map} +0 -0
- /package/dist/{chunk-CYH5QQUP.js.map → chunk-KHIUYLKY.js.map} +0 -0
- /package/dist/{chunk-PPEHBI5O.js.map → chunk-KXTNTDRD.js.map} +0 -0
- /package/dist/{chunk-IBOFASAZ.js.map → chunk-LC6ND4ET.js.map} +0 -0
- /package/dist/{chunk-BF3SGOWT.js.map → chunk-LG52LMAM.js.map} +0 -0
- /package/dist/{chunk-3Y7LSMGV.js.map → chunk-LH4VKUZC.js.map} +0 -0
- /package/dist/{chunk-CFDWKQZT.js.map → chunk-LODYTVOO.js.map} +0 -0
- /package/dist/{chunk-Y2CCXB7R.js.map → chunk-LUNN5GTB.js.map} +0 -0
- /package/dist/{chunk-ACBHZG3Z.js.map → chunk-M74YHHJE.js.map} +0 -0
- /package/dist/{chunk-BGGVYKVZ.js.map → chunk-MA6SUE7F.js.map} +0 -0
- /package/dist/{chunk-AT6UKTH4.js.map → chunk-MHFXJRLD.js.map} +0 -0
- /package/dist/{chunk-3BDMYTH6.js.map → chunk-MHLYX6QW.js.map} +0 -0
- /package/dist/{chunk-FXECKKPW.js.map → chunk-MO4FFK62.js.map} +0 -0
- /package/dist/{chunk-SAKSIN7E.js.map → chunk-MQVIYTH5.js.map} +0 -0
- /package/dist/{chunk-NKBCUR4V.js.map → chunk-MSC43MCJ.js.map} +0 -0
- /package/dist/{chunk-RHVJ3L4U.js.map → chunk-MWPD2BXO.js.map} +0 -0
- /package/dist/{chunk-TSID4257.js.map → chunk-N34AOGK3.js.map} +0 -0
- /package/dist/{chunk-NZBEE2PR.js.map → chunk-N3LW5ER5.js.map} +0 -0
- /package/dist/{chunk-Q3HYEAVQ.js.map → chunk-N3ZOZWP5.js.map} +0 -0
- /package/dist/{chunk-AO4NDR6W.js.map → chunk-NTO5DALI.js.map} +0 -0
- /package/dist/{chunk-VQSBZPKO.js.map → chunk-NYWAAXDX.js.map} +0 -0
- /package/dist/{chunk-CHGUN7OF.js.map → chunk-O6SAU5JA.js.map} +0 -0
- /package/dist/{chunk-3FDSXSEP.js.map → chunk-OE3SQOZV.js.map} +0 -0
- /package/dist/{chunk-VLH3IMJG.js.map → chunk-OFXCSLGX.js.map} +0 -0
- /package/dist/{chunk-E54XIRY2.js.map → chunk-PIP7XII2.js.map} +0 -0
- /package/dist/{chunk-QWSYHENP.js.map → chunk-PTQRJEPN.js.map} +0 -0
- /package/dist/{chunk-S5VIN3EB.js.map → chunk-Q6PRGXR2.js.map} +0 -0
- /package/dist/{chunk-DQ3O252B.js.map → chunk-QCNUMOTL.js.map} +0 -0
- /package/dist/{chunk-XZE5FIRB.js.map → chunk-QCQWOSSD.js.map} +0 -0
- /package/dist/{chunk-TRYYYWV3.js.map → chunk-QIYX33SH.js.map} +0 -0
- /package/dist/{chunk-RGVNXES5.js.map → chunk-QQHZBJMU.js.map} +0 -0
- /package/dist/{chunk-XZFTRGRW.js.map → chunk-QVO4SIS7.js.map} +0 -0
- /package/dist/{chunk-WJEJ65TF.js.map → chunk-QYX4567K.js.map} +0 -0
- /package/dist/{chunk-7JKDB5J5.js.map → chunk-R53ZOW4B.js.map} +0 -0
- /package/dist/{chunk-HSIUVFXE.js.map → chunk-RA6W37NZ.js.map} +0 -0
- /package/dist/{chunk-HDTFLW42.js.map → chunk-REMODSVN.js.map} +0 -0
- /package/dist/{chunk-P4LR2GLN.js.map → chunk-RIDCGFGM.js.map} +0 -0
- /package/dist/{chunk-RNQ2PGBB.js.map → chunk-RKVS5AA6.js.map} +0 -0
- /package/dist/{chunk-MKNW4FRR.js.map → chunk-RS576GOH.js.map} +0 -0
- /package/dist/{chunk-NIENIKZ5.js.map → chunk-SCAPSX6T.js.map} +0 -0
- /package/dist/{chunk-HG2YLNGJ.js.map → chunk-SFVHZAGE.js.map} +0 -0
- /package/dist/{chunk-5HFB4WFE.js.map → chunk-T743IIER.js.map} +0 -0
- /package/dist/{chunk-C6LW34TV.js.map → chunk-THD3N4BJ.js.map} +0 -0
- /package/dist/{chunk-IDRVQVDL.js.map → chunk-TNDTEI6D.js.map} +0 -0
- /package/dist/{chunk-U2QV4TTZ.js.map → chunk-TR7ZA67L.js.map} +0 -0
- /package/dist/{chunk-EP3DRILI.js.map → chunk-U36BXXQ7.js.map} +0 -0
- /package/dist/{chunk-AJ5LXKLQ.js.map → chunk-U4G3KY6L.js.map} +0 -0
- /package/dist/{chunk-UAFSEZ2E.js.map → chunk-UQUN2NGE.js.map} +0 -0
- /package/dist/{chunk-6A4PTK5Q.js.map → chunk-V4JMZZGH.js.map} +0 -0
- /package/dist/{chunk-72L5C74V.js.map → chunk-VBGC7G4F.js.map} +0 -0
- /package/dist/{chunk-IWJTLCTF.js.map → chunk-VD72JGHA.js.map} +0 -0
- /package/dist/{chunk-TVXUOJAL.js.map → chunk-VJG43WKU.js.map} +0 -0
- /package/dist/{chunk-H7QTDKA6.js.map → chunk-VMN6KG2U.js.map} +0 -0
- /package/dist/{chunk-YRF7WFAQ.js.map → chunk-WA6F4NOO.js.map} +0 -0
- /package/dist/{chunk-HOJL2GKW.js.map → chunk-WC3W36AM.js.map} +0 -0
- /package/dist/{chunk-OQW4OERS.js.map → chunk-WNIL2KTB.js.map} +0 -0
- /package/dist/{chunk-NQYC7V5N.js.map → chunk-WOSUYOAU.js.map} +0 -0
- /package/dist/{chunk-DDNUPFPE.js.map → chunk-WT7VZDTI.js.map} +0 -0
- /package/dist/{chunk-DOWVAC4U.js.map → chunk-XODBYGTH.js.map} +0 -0
- /package/dist/{chunk-HDXUQKJ5.js.map → chunk-XRDH24J7.js.map} +0 -0
- /package/dist/{chunk-DQKMOGYZ.js.map → chunk-XYFBJH6F.js.map} +0 -0
- /package/dist/{chunk-SZSS5KKX.js.map → chunk-XYSE2QZN.js.map} +0 -0
- /package/dist/{chunk-MIUPTZS6.js.map → chunk-Y4KR4LT2.js.map} +0 -0
- /package/dist/{chunk-D7PVIC33.js.map → chunk-Y7YJYUNV.js.map} +0 -0
- /package/dist/{chunk-GHP5JLL3.js.map → chunk-YASSCBWN.js.map} +0 -0
- /package/dist/{chunk-QLJU7UUI.js.map → chunk-YH7G44WL.js.map} +0 -0
- /package/dist/{chunk-FS55MQ4Q.js.map → chunk-YNDTLBOH.js.map} +0 -0
- /package/dist/{chunk-6E4L53DF.js.map → chunk-YZX4DVRS.js.map} +0 -0
- /package/dist/{chunk-NDQJDA7O.js.map → chunk-Z7COWR4K.js.map} +0 -0
- /package/dist/{chunk-NYA26GV2.js.map → chunk-ZCCKIWZU.js.map} +0 -0
- /package/dist/{chunk-J32XJALK.js.map → chunk-ZTPB7PVI.js.map} +0 -0
- /package/dist/{chunk-NKHNUTTY.js.map → chunk-ZXHODKHH.js.map} +0 -0
- /package/dist/{chunk-7LOCLC24.js.map → chunk-ZYKDUKAH.js.map} +0 -0
- /package/dist/native/chunks/{chunk-H22XVP5O.js.map → chunk-TZPNJ4AU.js.map} +0 -0
package/dist/user-avatar.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
UserAvatar,
|
|
3
3
|
UserMenu
|
|
4
|
-
} from "./chunk-
|
|
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-
|
|
19
|
-
import "./chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
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.
|
|
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
|
+
}
|