@12-apps/ui 6.55.0 → 6.56.1
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 +5 -2
- package/components-catalog.md +6 -0
- package/components-guidelines.md +18 -2
- package/components.tasks.md +3 -0
- package/dist/_internal/components/data-display/AsyncStateContainer/AsyncStateContainer.js +4 -4
- package/dist/_internal/components/data-display/Avatar/Avatar.js +4 -4
- package/dist/_internal/components/data-display/Avatar/Avatar.view.js +2 -2
- package/dist/_internal/components/data-display/Badge/Badge.js +1 -1
- package/dist/_internal/components/data-display/Badge/Badge.styles.js +1 -1
- package/dist/_internal/components/data-display/Badge/BadgeContent.js +1 -1
- package/dist/_internal/components/data-display/Carousel/Carousel.chrome.js +1 -1
- package/dist/_internal/components/data-display/Carousel/Carousel.js +3 -3
- package/dist/_internal/components/data-display/Carousel/Carousel.parts.js +1 -1
- package/dist/_internal/components/data-display/Carousel/Carousel.styles.js +1 -1
- package/dist/_internal/components/data-display/Chart/Chart.js +4 -4
- package/dist/_internal/components/data-display/Chart/SpecChart.js +7 -7
- package/dist/_internal/components/data-display/Chart/chart-context.js +1 -1
- package/dist/_internal/components/data-display/Chart/chart-internals.js +1 -1
- package/dist/_internal/components/data-display/Chart/chart-renderers.js +3 -3
- package/dist/_internal/components/data-display/Chart/chart-spec.js +2 -2
- package/dist/_internal/components/data-display/DataGrid/DataGrid.js +2 -2
- package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +48 -48
- package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +62 -62
- package/dist/_internal/components/data-display/DataViews/DeleteViewDialog.js +4 -4
- package/dist/_internal/components/data-display/DataViews/ManageViewsDialog.js +4 -4
- package/dist/_internal/components/data-display/DataViews/SaveViewModal.js +8 -8
- package/dist/_internal/components/data-display/DataViews/base-card.js +3 -3
- package/dist/_internal/components/data-display/DataViews/base-list-card-geometry.js +4 -4
- package/dist/_internal/components/data-display/DataViews/base-list-card-gutters.js +3 -3
- package/dist/_internal/components/data-display/DataViews/base-list-card-slots.js +3 -3
- package/dist/_internal/components/data-display/DataViews/base-list-card.js +10 -10
- package/dist/_internal/components/data-display/DataViews/data-views-category-pill.js +14 -14
- package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +1 -1
- package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +20 -20
- package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +7 -7
- package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +43 -43
- package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +20 -20
- package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +17 -17
- package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +18 -18
- package/dist/_internal/components/data-display/DataViews/data-views-range-pill.js +2 -2
- package/dist/_internal/components/data-display/DataViews/data-views-scope-tabs.js +2 -2
- package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +8 -8
- package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +13 -13
- package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +7 -7
- package/dist/_internal/components/data-display/DataViews/list-card-rails.js +2 -2
- package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +4 -4
- package/dist/_internal/components/data-display/FleetMap/FleetBody.js +14 -14
- package/dist/_internal/components/data-display/FleetMap/FleetCanvas.js +9 -9
- package/dist/_internal/components/data-display/FleetMap/FleetMap.js +16 -16
- package/dist/_internal/components/data-display/FleetMap/FleetRoster.js +4 -4
- package/dist/_internal/components/data-display/LazyImage/LazyImage.js +3 -3
- package/dist/_internal/components/data-display/Lightbox/Lightbox.js +5 -5
- package/dist/_internal/components/data-display/LoadingState/LoadingState.js +3 -3
- package/dist/_internal/components/data-display/MapPreview/MapLayers.js +3 -3
- package/dist/_internal/components/data-display/MapPreview/MapPreview.js +8 -8
- package/dist/_internal/components/data-display/Progress/Progress.js +2 -2
- package/dist/_internal/components/data-display/Sheet/Sheet.body.js +1 -1
- package/dist/_internal/components/data-display/Sheet/Sheet.js +5 -5
- package/dist/_internal/components/data-display/Sheet/Sheet.styles.js +1 -1
- package/dist/_internal/components/data-display/StatCard/StatCard.js +3 -3
- package/dist/_internal/components/data-display/Table/Table.js +3 -3
- package/dist/_internal/components/data-display/index.js +53 -53
- package/dist/_internal/components/feedback/Dialog/Dialog.js +3 -3
- package/dist/_internal/components/feedback/StackedModal/StackedModal.js +6 -6
- package/dist/_internal/components/feedback/StackedModal/StackedModal.parts.js +1 -1
- package/dist/_internal/components/feedback/index.js +9 -9
- package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.hooks.js +2 -2
- package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.js +8 -8
- package/dist/_internal/components/form/AddressAutocomplete/AddressAutocompleteField.js +2 -2
- package/dist/_internal/components/form/Autocomplete/Autocomplete.js +2 -2
- package/dist/_internal/components/form/Calendar/Calendar.hooks.js +2 -2
- package/dist/_internal/components/form/Calendar/Calendar.js +6 -6
- package/dist/_internal/components/form/Calendar/CalendarDayCell.js +2 -2
- package/dist/_internal/components/form/Calendar/CalendarMonth.js +3 -3
- package/dist/_internal/components/form/CategorySelect/CategoryPanel.js +5 -5
- package/dist/_internal/components/form/CategorySelect/CategoryPanelList.js +3 -3
- package/dist/_internal/components/form/CategorySelect/CategoryRows.js +2 -2
- package/dist/_internal/components/form/CategorySelect/CategorySelect.js +10 -10
- package/dist/_internal/components/form/Checkbox/Checkbox.js +2 -2
- package/dist/_internal/components/form/CodeEditor/CodeEditor.js +3 -3
- package/dist/_internal/components/form/Command/Command.js +1 -1
- package/dist/_internal/components/form/Command/Command.styles.js +1 -1
- package/dist/_internal/components/form/DateRangePicker/DateRangePicker.js +9 -9
- package/dist/_internal/components/form/Label/Label.js +1 -1
- package/dist/_internal/components/form/Label/Label.styles.js +1 -1
- package/dist/_internal/components/form/Menubar/Menubar.item.js +1 -1
- package/dist/_internal/components/form/Menubar/Menubar.js +3 -3
- package/dist/_internal/components/form/Menubar/Menubar.styles.js +1 -1
- package/dist/_internal/components/form/Menubar/Menubar.toolbar.js +1 -1
- package/dist/_internal/components/form/RichTextEditor/RichTextEditor.js +2 -2
- package/dist/_internal/components/form/Switch/Switch.js +4 -4
- package/dist/_internal/components/form/Switch/Switch.parts.js +3 -3
- package/dist/_internal/components/form/Switch/Switch.styles.js +2 -2
- package/dist/_internal/components/form/index.js +33 -33
- package/dist/_internal/components/form/total-form/Fields/CategoryField.js +11 -11
- package/dist/_internal/components/form/total-form/Fields/index.js +17 -17
- package/dist/_internal/components/index.js +114 -114
- package/dist/_internal/components/layout/Box/Box.js +1 -1
- package/dist/_internal/components/layout/Screen/Screen.base.js +8 -0
- package/dist/_internal/components/layout/Screen/Screen.base.js.map +1 -0
- package/dist/_internal/components/layout/Screen/Screen.js +38 -0
- package/dist/_internal/components/layout/Screen/Screen.js.map +1 -0
- package/dist/_internal/components/layout/Screen/Screen.types.js +1 -0
- package/dist/_internal/components/layout/Screen/Screen.types.js.map +1 -0
- package/dist/_internal/components/layout/SettingCard/SettingCard.js +6 -6
- package/dist/_internal/components/layout/SettingCard/SettingCard.parts.js +4 -4
- package/dist/_internal/components/layout/SettingCard/SettingCard.summary.js +5 -5
- package/dist/_internal/components/layout/SettingCard/SettingGrid.js +5 -5
- package/dist/_internal/components/layout/SettingCard/SettingGroup.js +11 -11
- package/dist/_internal/components/layout/SettingCard/SettingSwitch.js +10 -10
- package/dist/_internal/components/layout/SettingCard/SettingToggle.js +11 -11
- package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.js +2 -2
- package/dist/_internal/components/layout/Skeleton/Skeleton.js +2 -2
- package/dist/_internal/components/layout/Stack/Stack.js +1 -1
- package/dist/_internal/components/layout/index.js +23 -23
- package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +8 -8
- package/dist/_internal/components/navigation/AppHeader/AppHeader.identity.js +1 -1
- package/dist/_internal/components/navigation/CommandPalette/CommandPalette.js +2 -2
- package/dist/_internal/components/navigation/SectionNav/SectionNav.bar.js +1 -1
- package/dist/_internal/components/navigation/SectionNav/SectionNav.js +2 -2
- package/dist/_internal/components/navigation/SectionNav/SectionNav.parts.js +1 -1
- package/dist/_internal/components/navigation/SectionNav/SectionNav.primary.js +1 -1
- package/dist/_internal/components/navigation/SectionNav/SectionNav.rail.js +1 -1
- package/dist/_internal/components/navigation/SectionNav/SectionNav.railCreate.js +1 -1
- package/dist/_internal/components/navigation/SectionNav/SectionNav.sheet.js +1 -1
- package/dist/_internal/components/navigation/SectionNav/__stories__/fixtures.js +1 -1
- package/dist/_internal/components/navigation/index.js +11 -11
- package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.helpers.js +1 -1
- package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.js +1 -1
- package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.parts.js +1 -1
- package/dist/_internal/components/utility/WorkflowStep/WorkflowStepRow.js +1 -1
- package/dist/_internal/components/utility/index.js +1 -1
- package/dist/_internal/icons/Icon.js +3 -3
- package/dist/_internal/icons/paths.generated.js +1 -1
- package/dist/_internal/provider/UiProvider.js +1 -1
- package/dist/_internal/provider/mui-bridge.js +1 -1
- package/dist/_internal/provider/use-ui-theme.js +1 -1
- package/dist/_internal/tokens/surfaces.js +1 -1
- package/dist/_internal/user-avatar/user-avatar.js +5 -5
- package/dist/charts.js +12 -12
- package/dist/{chunk-KZHNJ3ZS.js → chunk-2DV64INT.js} +5 -5
- package/dist/{chunk-YV3WIBIO.js → chunk-2IKWHUXG.js} +2 -2
- package/dist/{chunk-4EJBLJZK.js → chunk-2KGYTJCN.js} +50 -29
- package/dist/chunk-2KGYTJCN.js.map +1 -0
- package/dist/{chunk-EFLRNSE6.js → chunk-2W2MWEP2.js} +11 -11
- package/dist/{chunk-PLOLSGQY.js → chunk-35IEACIJ.js} +2 -2
- package/dist/{chunk-ANQRUO3L.js → chunk-3WIA25YQ.js} +10 -10
- package/dist/{chunk-KRREZNZF.js → chunk-44JLXXWQ.js} +2 -2
- package/dist/{chunk-QGH2FGDD.js → chunk-45PGSVOH.js} +16 -16
- package/dist/{chunk-EKKDZK4E.js → chunk-4JBS6NOT.js} +2 -2
- package/dist/{chunk-DQKMOGYZ.js → chunk-54PPITTH.js} +4 -4
- package/dist/{chunk-LX4GLIWE.js → chunk-573XC4HK.js} +3 -3
- package/dist/{chunk-N24K536I.js → chunk-5JWCNQSI.js} +4 -4
- package/dist/{chunk-XGNHRONE.js → chunk-5PN5MY2X.js} +4 -4
- package/dist/{chunk-WUVVJXUK.js → chunk-5XZEGI35.js} +3 -3
- package/dist/{chunk-ALREWFRX.js → chunk-6DGNMASB.js} +4 -4
- package/dist/{chunk-P6GIZZLJ.js → chunk-6E4XNOAC.js} +7 -7
- package/dist/{chunk-KEVPUBOE.js → chunk-6ZLP7BA7.js} +4 -1
- package/dist/chunk-6ZLP7BA7.js.map +1 -0
- package/dist/{chunk-5CFEXRQH.js → chunk-7M3DRP7Q.js} +8 -8
- package/dist/{chunk-CG5AWO24.js → chunk-7QTZJ2HY.js} +2 -2
- package/dist/{chunk-KRQWLYKF.js → chunk-A6EUQDRK.js} +2 -2
- package/dist/{chunk-AG3DY5TH.js → chunk-ADSA76T7.js} +2 -2
- package/dist/{chunk-T7DQ7RJU.js → chunk-AGXTIW3G.js} +2 -2
- package/dist/{chunk-HQIX7A5I.js → chunk-AL3Z24VG.js} +9 -9
- package/dist/{chunk-ZF4J3SRM.js → chunk-BQGWY577.js} +3 -3
- package/dist/{chunk-MMVAMUZY.js → chunk-C3BRCCHG.js} +4 -4
- package/dist/{chunk-DYYQSC2V.js → chunk-CLC4VIOF.js} +2 -2
- package/dist/{chunk-Y52BXZO3.js → chunk-CZV6NVCA.js} +9 -9
- package/dist/{chunk-KRLBT3IV.js → chunk-DUYPCBI2.js} +3 -3
- package/dist/{chunk-DOPD5J2Q.js → chunk-E2WNRYKA.js} +4 -4
- package/dist/{chunk-OUXJYKCL.js → chunk-ERTXRK6S.js} +7 -7
- package/dist/{chunk-N4BARJEQ.js → chunk-EW55ZS5W.js} +7 -7
- package/dist/{chunk-6PU3JYVY.js → chunk-F3AYISXT.js} +4 -4
- package/dist/{chunk-VEKTKCSB.js → chunk-FLJ3RIRP.js} +5 -5
- package/dist/{chunk-LXYV73TW.js → chunk-G5ORAVSP.js} +5 -5
- package/dist/{chunk-AKC5GRJF.js → chunk-G76BNXWE.js} +7 -7
- package/dist/{chunk-NPOQSACK.js → chunk-GDT235FP.js} +2 -2
- package/dist/{chunk-FTCCTQZB.js → chunk-GI24X7XA.js} +3 -3
- package/dist/{chunk-FQUIEXEY.js → chunk-GNBCSTXF.js} +4 -4
- package/dist/{chunk-JP32U64U.js → chunk-GWUJIO6Z.js} +2 -2
- package/dist/{chunk-NVXRV3PL.js → chunk-GYDUXL3D.js} +7 -7
- package/dist/{chunk-DKKINJHC.js → chunk-H4NS5MMP.js} +5 -5
- package/dist/{chunk-TSUXEWVX.js → chunk-HFBQCJNP.js} +2 -2
- package/dist/chunk-HG2YLNGJ.js +75 -0
- package/dist/chunk-HG2YLNGJ.js.map +1 -0
- package/dist/{chunk-4JZ6XDVA.js → chunk-I6ESCBY3.js} +2 -2
- package/dist/{chunk-CUREVLBT.js → chunk-ICSXPZXT.js} +3 -3
- package/dist/{chunk-2ZRZTGWP.js → chunk-ISW5K72V.js} +5 -5
- package/dist/{chunk-O3LX26CX.js → chunk-JC244QQF.js} +2 -2
- package/dist/{chunk-JF643Q7W.js → chunk-JF5LQOGB.js} +5 -5
- package/dist/{chunk-NT73ZLBO.js → chunk-JL77BSOL.js} +5 -5
- package/dist/{chunk-HNWNIBCU.js → chunk-JWXGZ4VM.js} +3 -3
- package/dist/{chunk-LL5KGYLG.js → chunk-KEKOPD43.js} +7 -7
- package/dist/{chunk-CFDWKQZT.js → chunk-KILA7LCC.js} +4 -4
- package/dist/{chunk-XTWOHAOT.js → chunk-KKWCAZM6.js} +5 -5
- package/dist/{chunk-VCGNH23W.js → chunk-LJKWWXZD.js} +8 -8
- package/dist/{chunk-FXZUVZON.js → chunk-LWZ2K225.js} +6 -6
- package/dist/{chunk-M24EG6JC.js → chunk-MKAA3YIJ.js} +4 -4
- package/dist/{chunk-VSKFRS32.js → chunk-MLCY7TSO.js} +2 -2
- package/dist/{chunk-AZ7YT2R4.js → chunk-MLLWGHIX.js} +2 -2
- package/dist/{chunk-J6A4ZQWD.js → chunk-N4MR4EMC.js} +5 -5
- package/dist/{chunk-TRD26PNE.js → chunk-NXMCTYBN.js} +7 -7
- package/dist/{chunk-KWF7C6IZ.js → chunk-NZZ2BTIK.js} +2 -2
- package/dist/{chunk-XDITTQIR.js → chunk-OBKUG7BW.js} +5 -5
- package/dist/{chunk-SSDYEOU4.js → chunk-OBMPE6PW.js} +5 -5
- package/dist/{chunk-XLRBJEYA.js → chunk-OGBLNORM.js} +5 -5
- package/dist/{chunk-SNFULDT7.js → chunk-PIIPEXRM.js} +2 -2
- package/dist/{chunk-M5GJYVDM.js → chunk-Q5G2EC24.js} +8 -8
- package/dist/chunk-QYCKZWBU.js +7 -0
- package/dist/chunk-QYCKZWBU.js.map +1 -0
- package/dist/{chunk-GOWBYHYW.js → chunk-R6SBP5M5.js} +4 -4
- package/dist/{chunk-AYRMZC5F.js → chunk-RBHBJDOZ.js} +4 -4
- package/dist/{chunk-RPKUZDRY.js → chunk-SE5WHKCB.js} +6 -6
- package/dist/{chunk-YUPUJZ2X.js → chunk-SIWXMNQT.js} +4 -4
- package/dist/{chunk-U2TC4DID.js → chunk-SJTQW6JK.js} +2 -2
- package/dist/{chunk-NMXTZSDE.js → chunk-T2S7NIUG.js} +3 -3
- package/dist/{chunk-V7APSQB4.js → chunk-TWWA7QPA.js} +7 -7
- package/dist/{chunk-RHCRHZ6D.js → chunk-TZ23DNKY.js} +9 -3
- package/dist/{chunk-RHCRHZ6D.js.map → chunk-TZ23DNKY.js.map} +1 -1
- package/dist/{chunk-YXE4FISF.js → chunk-ULTQIVF3.js} +5 -5
- package/dist/{chunk-PALISWDH.js → chunk-UNJMMLO7.js} +8 -8
- package/dist/{chunk-XBXJKYUN.js → chunk-UPAFHAF4.js} +4 -4
- package/dist/{chunk-OKBEWR6L.js → chunk-WSUHTLOA.js} +6 -6
- package/dist/{chunk-GMH4TYPP.js → chunk-XM2YEXGO.js} +9 -9
- package/dist/{chunk-R53ZOW4B.js → chunk-XP522FFM.js} +3 -3
- package/dist/{chunk-NRHQJEHB.js → chunk-XTHDWW4M.js} +5 -5
- package/dist/{chunk-ZI3AJEZS.js → chunk-Y2HCYT5W.js} +2 -2
- package/dist/{chunk-5GXLWNQ7.js → chunk-Y4T33THY.js} +4 -4
- package/dist/{chunk-TK5LNXMB.js → chunk-YCYGUTQX.js} +9 -9
- package/dist/{chunk-ANVIO75O.js → chunk-YRXFJIR5.js} +4 -4
- package/dist/{chunk-5WJFCQFN.js → chunk-YXIVQFNW.js} +4 -4
- package/dist/{chunk-WC3W36AM.js → chunk-ZOUWHGV3.js} +4 -4
- package/dist/data-display/AsyncStateContainer.js +4 -4
- package/dist/data-display/Avatar.js +4 -4
- package/dist/data-display/Badge.js +1 -1
- package/dist/data-display/CardKit.js +7 -7
- package/dist/data-display/Carousel.js +3 -3
- package/dist/data-display/Chart.js +12 -12
- package/dist/data-display/DataGrid.js +2 -2
- package/dist/data-display/DataViews.js +80 -80
- package/dist/data-display/FleetMap.js +16 -16
- package/dist/data-display/LazyImage.js +3 -3
- package/dist/data-display/Lightbox.js +5 -5
- package/dist/data-display/LoadingState.js +3 -3
- package/dist/data-display/MapPreview.js +8 -8
- package/dist/data-display/Progress.js +2 -2
- package/dist/data-display/Sheet.js +5 -5
- package/dist/data-display/StatCard.js +3 -3
- package/dist/data-display/Table.js +3 -3
- package/dist/en-US.js +14 -14
- package/dist/feedback/Dialog.js +3 -3
- package/dist/feedback/StackedModal.js +6 -6
- package/dist/form/AddressAutocomplete.js +8 -8
- package/dist/form/Autocomplete.js +2 -2
- package/dist/form/Calendar.js +6 -6
- package/dist/form/CategorySelect.js +10 -10
- package/dist/form/Checkbox.js +2 -2
- package/dist/form/CodeEditor.js +3 -3
- package/dist/form/Command.js +1 -1
- package/dist/form/DateRangePicker.js +9 -9
- package/dist/form/Label.js +1 -1
- package/dist/form/Menubar.js +3 -3
- package/dist/form/RichTextEditor.js +2 -2
- package/dist/form/Switch.js +4 -4
- package/dist/form/total-form.js +24 -24
- package/dist/icons.js +3 -3
- package/dist/layout/Box.js +1 -1
- package/dist/layout/ContentToolbar.js +7 -7
- package/dist/layout/Screen.js +38 -0
- package/dist/layout/Screen.js.map +1 -0
- package/dist/layout/SettingCard.js +14 -14
- package/dist/layout/SettingsLayout.js +2 -2
- package/dist/layout/Skeleton.js +2 -2
- package/dist/layout/Stack.js +1 -1
- package/dist/locales.js +17 -17
- package/dist/native/chunks/chunk-AAY5TJ6W.js +27 -0
- package/dist/native/chunks/chunk-AAY5TJ6W.js.map +1 -0
- package/dist/native/chunks/{chunk-F4NDP3G5.js → chunk-AOXH3Z2S.js} +2 -21
- package/dist/native/chunks/chunk-AOXH3Z2S.js.map +1 -0
- package/dist/native/chunks/{chunk-4JAP6O2Y.js → chunk-EZO2KJF7.js} +4 -1
- package/dist/native/chunks/chunk-EZO2KJF7.js.map +1 -0
- package/dist/native/chunks/{chunk-RJOHCM2O.js → chunk-QGTZGL7P.js} +2 -2
- package/dist/native/data-display/Alert.js +1 -1
- package/dist/native/data-display/Avatar.js +1 -1
- package/dist/native/data-display/Badge.js +1 -1
- package/dist/native/data-display/Chip.js +1 -1
- 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/feedback/Dialog.js +1 -1
- package/dist/native/form/Checkbox.js +1 -1
- package/dist/native/form/Select.js +1 -1
- package/dist/native/icons.js +1 -1
- package/dist/native/layout/Box.js +4 -2
- package/dist/native/layout/Screen.js +78 -0
- package/dist/native/layout/Screen.js.map +1 -0
- package/dist/native/layout/Stack.js +2 -1
- package/dist/native/layout/Stack.js.map +1 -1
- package/dist/navigation/AppHeader.js +8 -8
- package/dist/navigation/CommandPalette.js +2 -2
- package/dist/navigation/SectionNav.js +2 -2
- package/dist/provider.js +1 -1
- package/dist/pt-BR.js +5 -5
- package/dist/tokens.js +1 -1
- package/dist/types/components/feedback/StackedModal/StackedModal.parts.d.ts.map +1 -1
- package/dist/types/components/layout/Screen/Screen.base.d.ts +16 -0
- package/dist/types/components/layout/Screen/Screen.base.d.ts.map +1 -0
- package/dist/types/components/layout/Screen/Screen.d.ts +7 -0
- package/dist/types/components/layout/Screen/Screen.d.ts.map +1 -0
- package/dist/types/components/layout/Screen/Screen.types.d.ts +9 -0
- package/dist/types/components/layout/Screen/Screen.types.d.ts.map +1 -0
- package/dist/types/components/layout/Screen/index.d.ts +3 -0
- package/dist/types/components/layout/Screen/index.d.ts.map +1 -0
- package/dist/types/icons/paths.generated.d.ts +3 -0
- package/dist/types/icons/paths.generated.d.ts.map +1 -1
- package/dist/types/tokens/surfaces.d.ts +4 -0
- package/dist/types/tokens/surfaces.d.ts.map +1 -1
- package/dist/types-native/components/layout/Screen/Screen.base.d.ts +16 -0
- package/dist/types-native/components/layout/Screen/Screen.base.d.ts.map +1 -0
- package/dist/types-native/components/layout/Screen/Screen.native.d.ts +7 -0
- package/dist/types-native/components/layout/Screen/Screen.native.d.ts.map +1 -0
- package/dist/types-native/components/layout/Screen/Screen.types.native.d.ts +9 -0
- package/dist/types-native/components/layout/Screen/Screen.types.native.d.ts.map +1 -0
- package/dist/types-native/components/layout/Screen/index.native.d.ts +3 -0
- package/dist/types-native/components/layout/Screen/index.native.d.ts.map +1 -0
- package/dist/types-native/icons/paths.generated.d.ts +3 -0
- package/dist/types-native/icons/paths.generated.d.ts.map +1 -1
- package/dist/user-avatar.js +5 -5
- package/dist/utility/WorkflowStep.js +1 -1
- package/package.json +16 -3
- package/src/components/feedback/StackedModal/StackedModal.md +17 -2
- package/src/components/feedback/StackedModal/StackedModal.parts.tsx +19 -3
- package/src/components/layout/Screen/NATIVE-NOTES.md +2 -0
- package/src/components/layout/Screen/Screen.base.ts +20 -0
- package/src/components/layout/Screen/Screen.md +71 -0
- package/src/components/layout/Screen/Screen.native.tsx +56 -0
- package/src/components/layout/Screen/Screen.tsx +41 -0
- package/src/components/layout/Screen/Screen.types.native.ts +13 -0
- package/src/components/layout/Screen/Screen.types.ts +10 -0
- package/src/components/layout/Screen/index.native.ts +2 -0
- package/src/components/layout/Screen/index.ts +2 -0
- package/src/components/layout/Screen/tests.md +64 -0
- package/src/components/layout/Screen/track.md +26 -0
- package/src/icons/glyphs.json +3 -0
- package/src/icons/paths.generated.ts +3 -0
- package/src/tokens/surfaces.ts +12 -2
- package/dist/chunk-4EJBLJZK.js.map +0 -1
- package/dist/chunk-KEVPUBOE.js.map +0 -1
- package/dist/native/chunks/chunk-4JAP6O2Y.js.map +0 -1
- package/dist/native/chunks/chunk-F4NDP3G5.js.map +0 -1
- /package/dist/{chunk-KZHNJ3ZS.js.map → chunk-2DV64INT.js.map} +0 -0
- /package/dist/{chunk-YV3WIBIO.js.map → chunk-2IKWHUXG.js.map} +0 -0
- /package/dist/{chunk-EFLRNSE6.js.map → chunk-2W2MWEP2.js.map} +0 -0
- /package/dist/{chunk-PLOLSGQY.js.map → chunk-35IEACIJ.js.map} +0 -0
- /package/dist/{chunk-ANQRUO3L.js.map → chunk-3WIA25YQ.js.map} +0 -0
- /package/dist/{chunk-KRREZNZF.js.map → chunk-44JLXXWQ.js.map} +0 -0
- /package/dist/{chunk-QGH2FGDD.js.map → chunk-45PGSVOH.js.map} +0 -0
- /package/dist/{chunk-EKKDZK4E.js.map → chunk-4JBS6NOT.js.map} +0 -0
- /package/dist/{chunk-DQKMOGYZ.js.map → chunk-54PPITTH.js.map} +0 -0
- /package/dist/{chunk-LX4GLIWE.js.map → chunk-573XC4HK.js.map} +0 -0
- /package/dist/{chunk-N24K536I.js.map → chunk-5JWCNQSI.js.map} +0 -0
- /package/dist/{chunk-XGNHRONE.js.map → chunk-5PN5MY2X.js.map} +0 -0
- /package/dist/{chunk-WUVVJXUK.js.map → chunk-5XZEGI35.js.map} +0 -0
- /package/dist/{chunk-ALREWFRX.js.map → chunk-6DGNMASB.js.map} +0 -0
- /package/dist/{chunk-P6GIZZLJ.js.map → chunk-6E4XNOAC.js.map} +0 -0
- /package/dist/{chunk-5CFEXRQH.js.map → chunk-7M3DRP7Q.js.map} +0 -0
- /package/dist/{chunk-CG5AWO24.js.map → chunk-7QTZJ2HY.js.map} +0 -0
- /package/dist/{chunk-KRQWLYKF.js.map → chunk-A6EUQDRK.js.map} +0 -0
- /package/dist/{chunk-AG3DY5TH.js.map → chunk-ADSA76T7.js.map} +0 -0
- /package/dist/{chunk-T7DQ7RJU.js.map → chunk-AGXTIW3G.js.map} +0 -0
- /package/dist/{chunk-HQIX7A5I.js.map → chunk-AL3Z24VG.js.map} +0 -0
- /package/dist/{chunk-ZF4J3SRM.js.map → chunk-BQGWY577.js.map} +0 -0
- /package/dist/{chunk-MMVAMUZY.js.map → chunk-C3BRCCHG.js.map} +0 -0
- /package/dist/{chunk-DYYQSC2V.js.map → chunk-CLC4VIOF.js.map} +0 -0
- /package/dist/{chunk-Y52BXZO3.js.map → chunk-CZV6NVCA.js.map} +0 -0
- /package/dist/{chunk-KRLBT3IV.js.map → chunk-DUYPCBI2.js.map} +0 -0
- /package/dist/{chunk-DOPD5J2Q.js.map → chunk-E2WNRYKA.js.map} +0 -0
- /package/dist/{chunk-OUXJYKCL.js.map → chunk-ERTXRK6S.js.map} +0 -0
- /package/dist/{chunk-N4BARJEQ.js.map → chunk-EW55ZS5W.js.map} +0 -0
- /package/dist/{chunk-6PU3JYVY.js.map → chunk-F3AYISXT.js.map} +0 -0
- /package/dist/{chunk-VEKTKCSB.js.map → chunk-FLJ3RIRP.js.map} +0 -0
- /package/dist/{chunk-LXYV73TW.js.map → chunk-G5ORAVSP.js.map} +0 -0
- /package/dist/{chunk-AKC5GRJF.js.map → chunk-G76BNXWE.js.map} +0 -0
- /package/dist/{chunk-NPOQSACK.js.map → chunk-GDT235FP.js.map} +0 -0
- /package/dist/{chunk-FTCCTQZB.js.map → chunk-GI24X7XA.js.map} +0 -0
- /package/dist/{chunk-FQUIEXEY.js.map → chunk-GNBCSTXF.js.map} +0 -0
- /package/dist/{chunk-JP32U64U.js.map → chunk-GWUJIO6Z.js.map} +0 -0
- /package/dist/{chunk-NVXRV3PL.js.map → chunk-GYDUXL3D.js.map} +0 -0
- /package/dist/{chunk-DKKINJHC.js.map → chunk-H4NS5MMP.js.map} +0 -0
- /package/dist/{chunk-TSUXEWVX.js.map → chunk-HFBQCJNP.js.map} +0 -0
- /package/dist/{chunk-4JZ6XDVA.js.map → chunk-I6ESCBY3.js.map} +0 -0
- /package/dist/{chunk-CUREVLBT.js.map → chunk-ICSXPZXT.js.map} +0 -0
- /package/dist/{chunk-2ZRZTGWP.js.map → chunk-ISW5K72V.js.map} +0 -0
- /package/dist/{chunk-O3LX26CX.js.map → chunk-JC244QQF.js.map} +0 -0
- /package/dist/{chunk-JF643Q7W.js.map → chunk-JF5LQOGB.js.map} +0 -0
- /package/dist/{chunk-NT73ZLBO.js.map → chunk-JL77BSOL.js.map} +0 -0
- /package/dist/{chunk-HNWNIBCU.js.map → chunk-JWXGZ4VM.js.map} +0 -0
- /package/dist/{chunk-LL5KGYLG.js.map → chunk-KEKOPD43.js.map} +0 -0
- /package/dist/{chunk-CFDWKQZT.js.map → chunk-KILA7LCC.js.map} +0 -0
- /package/dist/{chunk-XTWOHAOT.js.map → chunk-KKWCAZM6.js.map} +0 -0
- /package/dist/{chunk-VCGNH23W.js.map → chunk-LJKWWXZD.js.map} +0 -0
- /package/dist/{chunk-FXZUVZON.js.map → chunk-LWZ2K225.js.map} +0 -0
- /package/dist/{chunk-M24EG6JC.js.map → chunk-MKAA3YIJ.js.map} +0 -0
- /package/dist/{chunk-VSKFRS32.js.map → chunk-MLCY7TSO.js.map} +0 -0
- /package/dist/{chunk-AZ7YT2R4.js.map → chunk-MLLWGHIX.js.map} +0 -0
- /package/dist/{chunk-J6A4ZQWD.js.map → chunk-N4MR4EMC.js.map} +0 -0
- /package/dist/{chunk-TRD26PNE.js.map → chunk-NXMCTYBN.js.map} +0 -0
- /package/dist/{chunk-KWF7C6IZ.js.map → chunk-NZZ2BTIK.js.map} +0 -0
- /package/dist/{chunk-XDITTQIR.js.map → chunk-OBKUG7BW.js.map} +0 -0
- /package/dist/{chunk-SSDYEOU4.js.map → chunk-OBMPE6PW.js.map} +0 -0
- /package/dist/{chunk-XLRBJEYA.js.map → chunk-OGBLNORM.js.map} +0 -0
- /package/dist/{chunk-SNFULDT7.js.map → chunk-PIIPEXRM.js.map} +0 -0
- /package/dist/{chunk-M5GJYVDM.js.map → chunk-Q5G2EC24.js.map} +0 -0
- /package/dist/{chunk-GOWBYHYW.js.map → chunk-R6SBP5M5.js.map} +0 -0
- /package/dist/{chunk-AYRMZC5F.js.map → chunk-RBHBJDOZ.js.map} +0 -0
- /package/dist/{chunk-RPKUZDRY.js.map → chunk-SE5WHKCB.js.map} +0 -0
- /package/dist/{chunk-YUPUJZ2X.js.map → chunk-SIWXMNQT.js.map} +0 -0
- /package/dist/{chunk-U2TC4DID.js.map → chunk-SJTQW6JK.js.map} +0 -0
- /package/dist/{chunk-NMXTZSDE.js.map → chunk-T2S7NIUG.js.map} +0 -0
- /package/dist/{chunk-V7APSQB4.js.map → chunk-TWWA7QPA.js.map} +0 -0
- /package/dist/{chunk-YXE4FISF.js.map → chunk-ULTQIVF3.js.map} +0 -0
- /package/dist/{chunk-PALISWDH.js.map → chunk-UNJMMLO7.js.map} +0 -0
- /package/dist/{chunk-XBXJKYUN.js.map → chunk-UPAFHAF4.js.map} +0 -0
- /package/dist/{chunk-OKBEWR6L.js.map → chunk-WSUHTLOA.js.map} +0 -0
- /package/dist/{chunk-GMH4TYPP.js.map → chunk-XM2YEXGO.js.map} +0 -0
- /package/dist/{chunk-R53ZOW4B.js.map → chunk-XP522FFM.js.map} +0 -0
- /package/dist/{chunk-NRHQJEHB.js.map → chunk-XTHDWW4M.js.map} +0 -0
- /package/dist/{chunk-ZI3AJEZS.js.map → chunk-Y2HCYT5W.js.map} +0 -0
- /package/dist/{chunk-5GXLWNQ7.js.map → chunk-Y4T33THY.js.map} +0 -0
- /package/dist/{chunk-TK5LNXMB.js.map → chunk-YCYGUTQX.js.map} +0 -0
- /package/dist/{chunk-ANVIO75O.js.map → chunk-YRXFJIR5.js.map} +0 -0
- /package/dist/{chunk-5WJFCQFN.js.map → chunk-YXIVQFNW.js.map} +0 -0
- /package/dist/{chunk-WC3W36AM.js.map → chunk-ZOUWHGV3.js.map} +0 -0
- /package/dist/native/chunks/{chunk-RJOHCM2O.js.map → chunk-QGTZGL7P.js.map} +0 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { BoxBaseProps } from '../Box/Box.base';
|
|
2
|
+
/** Physical screen edges, independent of a native dependency. */
|
|
3
|
+
export type ScreenEdge = 'top' | 'right' | 'bottom' | 'left';
|
|
4
|
+
export declare const SCREEN_EDGES: readonly ScreenEdge[];
|
|
5
|
+
/** Padding and gap apply to the content, inside the selected safe-area edges. */
|
|
6
|
+
export interface ScreenBaseProps extends Pick<BoxBaseProps, 'children' | 'p' | 'px' | 'py' | 'pt' | 'pr' | 'pb' | 'pl' | 'gap' | 'bg' | 'testID' | 'dataTestId'> {
|
|
7
|
+
/** Vertical scrolling; turn off when a child owns scrolling. Default true. */
|
|
8
|
+
scroll?: boolean;
|
|
9
|
+
/** Omit bottom when a navigator's tab bar already owns that inset. */
|
|
10
|
+
safeAreaEdges?: readonly ScreenEdge[];
|
|
11
|
+
/** Lift the native viewport above the soft keyboard. Default true. */
|
|
12
|
+
keyboardAvoiding?: boolean;
|
|
13
|
+
/** Native distance from the window top to the screen's parent, in dp. */
|
|
14
|
+
keyboardVerticalOffset?: number;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=Screen.base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Screen.base.d.ts","sourceRoot":"","sources":["../../../../../src/components/layout/Screen/Screen.base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,iEAAiE;AACjE,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAC7D,eAAO,MAAM,YAAY,EAAE,SAAS,UAAU,EAAuC,CAAC;AAEtF,iFAAiF;AACjF,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAC3C,YAAY,EACZ,UAAU,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,QAAQ,GAAG,YAAY,CACpG;IACC,8EAA8E;IAC9E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,sEAAsE;IACtE,aAAa,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IACtC,sEAAsE;IACtE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,yEAAyE;IACzE,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
/** A bounded page viewport; browser keyboards remain the browser's responsibility. */
|
|
3
|
+
export declare const Screen: React.ForwardRefExoticComponent<import("./Screen.base").ScreenBaseProps & Omit<React.HTMLAttributes<HTMLDivElement>, keyof import("./Screen.base").ScreenBaseProps> & {
|
|
4
|
+
sx?: import("@mui/material").SxProps<import("@mui/material").Theme>;
|
|
5
|
+
contentSx?: import("@mui/material").SxProps<import("@mui/material").Theme>;
|
|
6
|
+
} & React.RefAttributes<HTMLDivElement>>;
|
|
7
|
+
//# sourceMappingURL=Screen.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Screen.d.ts","sourceRoot":"","sources":["../../../../../src/components/layout/Screen/Screen.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAa/B,sFAAsF;AACtF,eAAO,MAAM,MAAM;;;wCAwBjB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { SxProps, Theme } from '@mui/material/styles/index.js';
|
|
2
|
+
import type * as React from 'react';
|
|
3
|
+
import type { ScreenBaseProps } from './Screen.base';
|
|
4
|
+
export type { ScreenBaseProps, ScreenEdge } from './Screen.base';
|
|
5
|
+
export type ScreenProps = ScreenBaseProps & Omit<React.HTMLAttributes<HTMLDivElement>, keyof ScreenBaseProps> & {
|
|
6
|
+
sx?: SxProps<Theme>;
|
|
7
|
+
contentSx?: SxProps<Theme>;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=Screen.types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Screen.types.d.ts","sourceRoot":"","sources":["../../../../../src/components/layout/Screen/Screen.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,KAAK,KAAK,KAAK,MAAM,OAAO,CAAC;AAEpC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACjE,MAAM,MAAM,WAAW,GAAG,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,MAAM,eAAe,CAAC,GAAG;IAC9G,EAAE,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;CAC5B,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/components/layout/Screen/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -23,6 +23,9 @@ export declare const ICON_PATHS: {
|
|
|
23
23
|
readonly ExpandLess: readonly ["m12 8-6 6 1.41 1.41L12 10.83l4.59 4.58L18 14z"];
|
|
24
24
|
readonly ExpandMore: readonly ["M16.59 8.59 12 13.17 7.41 8.59 6 10l6 6 6-6z"];
|
|
25
25
|
readonly FilterList: readonly ["M10 18h4v-2h-4zM3 6v2h18V6zm3 7h12v-2H6z"];
|
|
26
|
+
readonly FitnessCenter: readonly ["M20.57 14.86 22 13.43 20.57 12 17 15.57 8.43 7 12 3.43 10.57 2 9.14 3.43 7.71 2 5.57 4.14 4.14 2.71 2.71 4.14l1.43 1.43L2 7.71l1.43 1.43L2 10.57 3.43 12 7 8.43 15.57 17 12 20.57 13.43 22l1.43-1.43L16.29 22l2.14-2.14 1.43 1.43 1.43-1.43-1.43-1.43L22 16.29z"];
|
|
27
|
+
readonly History: readonly ["M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9m-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8z"];
|
|
28
|
+
readonly Home: readonly ["M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"];
|
|
26
29
|
readonly IndeterminateCheckBox: readonly ["M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2m-2 10H7v-2h10z"];
|
|
27
30
|
readonly Info: readonly ["M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m1 15h-2v-6h2zm0-8h-2V7h2z"];
|
|
28
31
|
readonly InfoOutlined: readonly ["M11 7h2v2h-2zm0 4h2v6h-2zm1-9C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.generated.d.ts","sourceRoot":"","sources":["../../../src/icons/paths.generated.ts"],"names":[],"mappings":"AAOA,mDAAmD;AACnD,eAAO,MAAM,UAAU
|
|
1
|
+
{"version":3,"file":"paths.generated.d.ts","sourceRoot":"","sources":["../../../src/icons/paths.generated.ts"],"names":[],"mappings":"AAOA,mDAAmD;AACnD,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+Cb,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,UAAU,CAAC;AAE/C,eAAO,MAAM,UAAU,EAA8B,SAAS,QAAQ,EAAE,CAAC"}
|
|
@@ -80,6 +80,10 @@ export declare function surfaces(theme: Theme): UiSurfaces;
|
|
|
80
80
|
* Opaque on purpose. A translucent `alpha(main, 0.08)` is a different colour
|
|
81
81
|
* on every surface it lands on, and its contrast with the signal's own text
|
|
82
82
|
* cannot be known in advance; a composited value is the same colour anywhere.
|
|
83
|
+
*
|
|
84
|
+
* A palette MUI accepts but cannot decompose — a named colour (`white`), a
|
|
85
|
+
* `var(--…)`, a `color(display-p3 …)` — gets the same mix from the browser,
|
|
86
|
+
* as a CSS `color-mix()`, rather than throwing at render.
|
|
83
87
|
*/
|
|
84
88
|
export declare function softSignal(theme: Theme, signal: SoftSignal): string;
|
|
85
89
|
//# sourceMappingURL=surfaces.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"surfaces.d.ts","sourceRoot":"","sources":["../../../src/tokens/surfaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAI3D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,sEAAsE;AACtE,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAElE,sEAAsE;AACtE,eAAO,MAAM,YAAY,EAAE,SAAS,UAAU,EAA4C,CAAC;AAE3F;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,OAAO,CAAC;AAExC;;;;;;GAMG;AACH,MAAM,WAAW,UAAU;IACzB,4EAA4E;IAC5E,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,oEAAoE;IACpE,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,OAAO,QAAQ,sBAAsB,CAAC;IACpC,UAAU,KAAK;QACb,2EAA2E;QAC3E,UAAU,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QACjC,uFAAuF;QACvF,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;KACpD;IACD,UAAU,YAAY;QACpB;;;;WAIG;QACH,UAAU,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QACjC;;;WAGG;QACH,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;KACpD;CACF;AAED,uFAAuF;AACvF,wBAAgB,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,UAAU,CAUjD;AAED
|
|
1
|
+
{"version":3,"file":"surfaces.d.ts","sourceRoot":"","sources":["../../../src/tokens/surfaces.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,+BAA+B,CAAC;AAI3D;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,sEAAsE;AACtE,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAElE,sEAAsE;AACtE,eAAO,MAAM,YAAY,EAAE,SAAS,UAAU,EAA4C,CAAC;AAE3F;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,OAAO,CAAC;AAExC;;;;;;GAMG;AACH,MAAM,WAAW,UAAU;IACzB,4EAA4E;IAC5E,MAAM,EAAE,MAAM,CAAC;IACf,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,oEAAoE;IACpE,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,OAAO,QAAQ,sBAAsB,CAAC;IACpC,UAAU,KAAK;QACb,2EAA2E;QAC3E,UAAU,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QACjC,uFAAuF;QACvF,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;KACpD;IACD,UAAU,YAAY;QACpB;;;;WAIG;QACH,UAAU,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;QACjC;;;WAGG;QACH,YAAY,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;KACpD;CACF;AAED,uFAAuF;AACvF,wBAAgB,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,UAAU,CAUjD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM,CAUnE"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { BoxBaseProps } from '../Box/Box.base';
|
|
2
|
+
/** Physical screen edges, independent of a native dependency. */
|
|
3
|
+
export type ScreenEdge = 'top' | 'right' | 'bottom' | 'left';
|
|
4
|
+
export declare const SCREEN_EDGES: readonly ScreenEdge[];
|
|
5
|
+
/** Padding and gap apply to the content, inside the selected safe-area edges. */
|
|
6
|
+
export interface ScreenBaseProps extends Pick<BoxBaseProps, 'children' | 'p' | 'px' | 'py' | 'pt' | 'pr' | 'pb' | 'pl' | 'gap' | 'bg' | 'testID' | 'dataTestId'> {
|
|
7
|
+
/** Vertical scrolling; turn off when a child owns scrolling. Default true. */
|
|
8
|
+
scroll?: boolean;
|
|
9
|
+
/** Omit bottom when a navigator's tab bar already owns that inset. */
|
|
10
|
+
safeAreaEdges?: readonly ScreenEdge[];
|
|
11
|
+
/** Lift the native viewport above the soft keyboard. Default true. */
|
|
12
|
+
keyboardAvoiding?: boolean;
|
|
13
|
+
/** Native distance from the window top to the screen's parent, in dp. */
|
|
14
|
+
keyboardVerticalOffset?: number;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=Screen.base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Screen.base.d.ts","sourceRoot":"","sources":["../../../../../src/components/layout/Screen/Screen.base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEpD,iEAAiE;AACjE,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAC7D,eAAO,MAAM,YAAY,EAAE,SAAS,UAAU,EAAuC,CAAC;AAEtF,iFAAiF;AACjF,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAC3C,YAAY,EACZ,UAAU,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,GAAG,QAAQ,GAAG,YAAY,CACpG;IACC,8EAA8E;IAC9E,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,sEAAsE;IACtE,aAAa,CAAC,EAAE,SAAS,UAAU,EAAE,CAAC;IACtC,sEAAsE;IACtE,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,yEAAyE;IACzE,sBAAsB,CAAC,EAAE,MAAM,CAAC;CACjC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { View } from 'react-native';
|
|
3
|
+
export declare const Screen: React.ForwardRefExoticComponent<import("./Screen.base").ScreenBaseProps & Omit<import("react-native").ViewProps, keyof import("./Screen.base").ScreenBaseProps> & {
|
|
4
|
+
contentContainerStyle?: import("react-native").StyleProp<import("react-native").ViewStyle>;
|
|
5
|
+
scrollViewProps?: Omit<import("react-native").ScrollViewProps, "children" | "style" | "contentContainerStyle" | "horizontal" | "scrollEnabled" | "automaticallyAdjustKeyboardInsets" | "automaticallyAdjustContentInsets" | "contentInsetAdjustmentBehavior">;
|
|
6
|
+
} & React.RefAttributes<View>>;
|
|
7
|
+
//# sourceMappingURL=Screen.native.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Screen.native.d.ts","sourceRoot":"","sources":["../../../../../src/components/layout/Screen/Screen.native.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAA0D,IAAI,EAAE,MAAM,cAAc,CAAC;AAwB5F,eAAO,MAAM,MAAM;;;8BA6BjB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ScrollViewProps, StyleProp, ViewProps, ViewStyle } from 'react-native';
|
|
2
|
+
import type { ScreenBaseProps } from './Screen.base';
|
|
3
|
+
export type { ScreenBaseProps, ScreenEdge } from './Screen.base';
|
|
4
|
+
export type ScreenProps = ScreenBaseProps & Omit<ViewProps, keyof ScreenBaseProps> & {
|
|
5
|
+
contentContainerStyle?: StyleProp<ViewStyle>;
|
|
6
|
+
/** Scroll events/indicators; Screen owns orientation, size and keyboard insets. */
|
|
7
|
+
scrollViewProps?: Omit<ScrollViewProps, 'children' | 'style' | 'contentContainerStyle' | 'horizontal' | 'scrollEnabled' | 'automaticallyAdjustKeyboardInsets' | 'automaticallyAdjustContentInsets' | 'contentInsetAdjustmentBehavior'>;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=Screen.types.native.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Screen.types.native.d.ts","sourceRoot":"","sources":["../../../../../src/components/layout/Screen/Screen.types.native.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAErF,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAErD,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACjE,MAAM,MAAM,WAAW,GAAG,eAAe,GAAG,IAAI,CAAC,SAAS,EAAE,MAAM,eAAe,CAAC,GAAG;IACnF,qBAAqB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7C,mFAAmF;IACnF,eAAe,CAAC,EAAE,IAAI,CAAC,eAAe,EACpC,UAAU,GAAG,OAAO,GAAG,uBAAuB,GAAG,YAAY,GAAG,eAAe,GAC/E,mCAAmC,GAAG,kCAAkC,GAAG,gCAAgC,CAC5G,CAAC;CACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.native.d.ts","sourceRoot":"","sources":["../../../../../src/components/layout/Screen/index.native.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC"}
|
|
@@ -23,6 +23,9 @@ export declare const ICON_PATHS: {
|
|
|
23
23
|
readonly ExpandLess: readonly ["m12 8-6 6 1.41 1.41L12 10.83l4.59 4.58L18 14z"];
|
|
24
24
|
readonly ExpandMore: readonly ["M16.59 8.59 12 13.17 7.41 8.59 6 10l6 6 6-6z"];
|
|
25
25
|
readonly FilterList: readonly ["M10 18h4v-2h-4zM3 6v2h18V6zm3 7h12v-2H6z"];
|
|
26
|
+
readonly FitnessCenter: readonly ["M20.57 14.86 22 13.43 20.57 12 17 15.57 8.43 7 12 3.43 10.57 2 9.14 3.43 7.71 2 5.57 4.14 4.14 2.71 2.71 4.14l1.43 1.43L2 7.71l1.43 1.43L2 10.57 3.43 12 7 8.43 15.57 17 12 20.57 13.43 22l1.43-1.43L16.29 22l2.14-2.14 1.43 1.43 1.43-1.43-1.43-1.43L22 16.29z"];
|
|
27
|
+
readonly History: readonly ["M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9m-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8z"];
|
|
28
|
+
readonly Home: readonly ["M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z"];
|
|
26
29
|
readonly IndeterminateCheckBox: readonly ["M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2m-2 10H7v-2h10z"];
|
|
27
30
|
readonly Info: readonly ["M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m1 15h-2v-6h2zm0-8h-2V7h2z"];
|
|
28
31
|
readonly InfoOutlined: readonly ["M11 7h2v2h-2zm0 4h2v6h-2zm1-9C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2m0 18c-4.41 0-8-3.59-8-8s3.59-8 8-8 8 3.59 8 8-3.59 8-8 8"];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paths.generated.d.ts","sourceRoot":"","sources":["../../../src/icons/paths.generated.ts"],"names":[],"mappings":"AAOA,mDAAmD;AACnD,eAAO,MAAM,UAAU
|
|
1
|
+
{"version":3,"file":"paths.generated.d.ts","sourceRoot":"","sources":["../../../src/icons/paths.generated.ts"],"names":[],"mappings":"AAOA,mDAAmD;AACnD,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+Cb,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,UAAU,CAAC;AAE/C,eAAO,MAAM,UAAU,EAA8B,SAAS,QAAQ,EAAE,CAAC"}
|
package/dist/user-avatar.js
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import {
|
|
2
2
|
UserAvatar,
|
|
3
3
|
UserMenu
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-I6ESCBY3.js";
|
|
5
5
|
import "./chunk-UDQSIRAP.js";
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-NVXRV3PL.js";
|
|
8
|
-
import "./chunk-MTEQEPNY.js";
|
|
9
|
-
import "./chunk-6ZZGK5DT.js";
|
|
6
|
+
import "./chunk-G76BNXWE.js";
|
|
10
7
|
import "./chunk-3ZVUNSFF.js";
|
|
8
|
+
import "./chunk-GYDUXL3D.js";
|
|
9
|
+
import "./chunk-6ZZGK5DT.js";
|
|
10
|
+
import "./chunk-MTEQEPNY.js";
|
|
11
11
|
import "./chunk-VUHLNYAE.js";
|
|
12
12
|
import "./chunk-2GSIEDGN.js";
|
|
13
13
|
import "./chunk-J2QIICWP.js";
|
|
@@ -10,7 +10,7 @@ import "../chunk-BRHRK7BK.js";
|
|
|
10
10
|
import "../chunk-25MSGLNU.js";
|
|
11
11
|
import "../chunk-GAXHYRX6.js";
|
|
12
12
|
import "../chunk-NP6SHLQ3.js";
|
|
13
|
-
import "../chunk-
|
|
13
|
+
import "../chunk-TZ23DNKY.js";
|
|
14
14
|
import "../chunk-7ZPUN7TV.js";
|
|
15
15
|
import "../chunk-PT6TCWIW.js";
|
|
16
16
|
import "../chunk-RGVNXES5.js";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@12-apps/ui",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.56.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"packageManager": "pnpm@10.34.5",
|
|
6
6
|
"type": "module",
|
|
@@ -707,6 +707,14 @@
|
|
|
707
707
|
"./locales": {
|
|
708
708
|
"types": "./dist/types/locales.d.ts",
|
|
709
709
|
"default": "./dist/locales.js"
|
|
710
|
+
},
|
|
711
|
+
"./layout/Screen": {
|
|
712
|
+
"react-native": {
|
|
713
|
+
"types": "./dist/types-native/components/layout/Screen/index.native.d.ts",
|
|
714
|
+
"default": "./dist/native/layout/Screen.js"
|
|
715
|
+
},
|
|
716
|
+
"types": "./dist/types/components/layout/Screen/index.d.ts",
|
|
717
|
+
"default": "./dist/layout/Screen.js"
|
|
710
718
|
}
|
|
711
719
|
},
|
|
712
720
|
"typesVersions": {
|
|
@@ -779,7 +787,8 @@
|
|
|
779
787
|
"react": "^18.0.0 || ^19.0.0",
|
|
780
788
|
"react-dom": "^18.0.0 || ^19.0.0",
|
|
781
789
|
"react-native": ">=0.79.0",
|
|
782
|
-
"react-native-svg": ">=15.0.0"
|
|
790
|
+
"react-native-svg": ">=15.0.0",
|
|
791
|
+
"react-native-safe-area-context": ">=5.0.0"
|
|
783
792
|
},
|
|
784
793
|
"dependencies": {
|
|
785
794
|
"@12-apps/forms-core": "^1.21.0",
|
|
@@ -834,7 +843,8 @@
|
|
|
834
843
|
"typescript": "^5.8.2",
|
|
835
844
|
"vite": "^6.4.1",
|
|
836
845
|
"vite-plugin-istanbul": "^7.2.1",
|
|
837
|
-
"vitest": "^3.2.4"
|
|
846
|
+
"vitest": "^3.2.4",
|
|
847
|
+
"react-native-safe-area-context": "5.7.0"
|
|
838
848
|
},
|
|
839
849
|
"publishConfig": {
|
|
840
850
|
"registry": "https://registry.npmjs.org",
|
|
@@ -868,6 +878,9 @@
|
|
|
868
878
|
},
|
|
869
879
|
"react-native-svg": {
|
|
870
880
|
"optional": true
|
|
881
|
+
},
|
|
882
|
+
"react-native-safe-area-context": {
|
|
883
|
+
"optional": true
|
|
871
884
|
}
|
|
872
885
|
}
|
|
873
886
|
}
|
|
@@ -164,6 +164,21 @@ const { stack, push, pop, clear } = useModalStack();
|
|
|
164
164
|
- Semantic HTML structure
|
|
165
165
|
- Accessible loading states
|
|
166
166
|
|
|
167
|
+
### The title is one heading
|
|
168
|
+
|
|
169
|
+
With a `navigationTitle`, the panel has exactly ONE heading: the title, an
|
|
170
|
+
`h2`, carrying the id the dialog's `aria-labelledby` points at (the
|
|
171
|
+
`aria-labelledby` prop's value, or `modal-title-<modalId>`). The bar around it
|
|
172
|
+
(the ✕ or back button and the header actions) is a plain `div`, so the dialog's
|
|
173
|
+
accessible name is the title alone, and a screen reader announces it once.
|
|
174
|
+
|
|
175
|
+
Until 6.56.0 the bar was itself MUI's `DialogTitle` `h2` with the title nested
|
|
176
|
+
in it as a second `h2`: the same words read twice, a heading inside a heading,
|
|
177
|
+
and a dialog named by everything in the bar ("close Title Save").
|
|
178
|
+
|
|
179
|
+
Without a `navigationTitle` the bar is still MUI's `h2` and holds the id, as
|
|
180
|
+
before. Give such a panel its own `aria-labelledby` if it needs a name.
|
|
181
|
+
|
|
167
182
|
## Testing
|
|
168
183
|
|
|
169
184
|
The StackedModal component provides comprehensive test IDs for all interactive elements through the `dataTestId` prop. When provided, it generates consistent test IDs for all child elements.
|
|
@@ -175,8 +190,8 @@ When you provide `dataTestId="my-modal"`, the following test IDs are automatical
|
|
|
175
190
|
| Element | Test ID | Description |
|
|
176
191
|
|---------|---------|-------------|
|
|
177
192
|
| Modal Container | `my-modal` | The root dialog element |
|
|
178
|
-
| Header | `my-modal-header` | The modal header
|
|
179
|
-
| Title | `my-modal-title` | The navigation title
|
|
193
|
+
| Header | `my-modal-header` | The modal header bar (a `div` when there is a title) |
|
|
194
|
+
| Title | `my-modal-title` | The navigation title — the panel's one `h2` |
|
|
180
195
|
| Close Button | `my-modal-close-button` | The close button (when no modals stacked) |
|
|
181
196
|
| Back Button | `my-modal-back-button` | The back button (when modals are stacked) |
|
|
182
197
|
| Header Actions | `my-modal-header-actions` | Container for header actions (desktop) |
|
|
@@ -9,7 +9,7 @@ import IconButton from '@mui/material/IconButton/index.js';
|
|
|
9
9
|
import Skeleton from '@mui/material/Skeleton/index.js';
|
|
10
10
|
import Typography from '@mui/material/Typography/index.js';
|
|
11
11
|
import { styled, useTheme } from '@mui/material/styles/index.js';
|
|
12
|
-
import type { FC, ReactNode } from 'react';
|
|
12
|
+
import type { ElementType, FC, ReactNode } from 'react';
|
|
13
13
|
import React from 'react';
|
|
14
14
|
import { rem } from '../../../tokens/relative';
|
|
15
15
|
import { safeAreaBottom } from '../../../utils/viewport';
|
|
@@ -21,9 +21,10 @@ import {
|
|
|
21
21
|
titleStyles,
|
|
22
22
|
} from './StackedModal.styles';
|
|
23
23
|
|
|
24
|
+
// `component` typed through: the bar is a `div` when it holds a title (`ModalHeader`).
|
|
24
25
|
const StyledDialogTitle = styled(DialogTitle, {
|
|
25
26
|
shouldForwardProp: (prop) => prop !== 'rtl',
|
|
26
|
-
})<{ rtl?: boolean }>(({ theme, rtl }) => titleStyles(theme, rtl));
|
|
27
|
+
})<{ rtl?: boolean; component?: ElementType }>(({ theme, rtl }) => titleStyles(theme, rtl));
|
|
27
28
|
|
|
28
29
|
const DialogTitleLeft = styled(Box)(({ theme }) => titleLeftStyles(theme));
|
|
29
30
|
const DialogTitleRight = styled(Box)(({ theme }) => titleRightStyles(theme));
|
|
@@ -186,7 +187,21 @@ export const ModalHeader: FC<ModalHeaderProps> = ({
|
|
|
186
187
|
rtl,
|
|
187
188
|
dataTestId,
|
|
188
189
|
}) => (
|
|
189
|
-
|
|
190
|
+
// The BAR is not a heading: it holds the ✕ or back button and the header
|
|
191
|
+
// actions. The title inside it is the panel's one heading and carries the id
|
|
192
|
+
// the dialog's `aria-labelledby` names, so the dialog is named by the title
|
|
193
|
+
// alone — not "close Title Save" — and a screen reader hears it once.
|
|
194
|
+
//
|
|
195
|
+
// The bar's id is stated, never left to MUI: `DialogTitle` falls back to the
|
|
196
|
+
// Dialog's `aria-labelledby` and would claim the title's id a second time.
|
|
197
|
+
// With NO title the bar is drawn exactly as it always was — MUI's own `h2`,
|
|
198
|
+
// holding the id — so an untitled panel keeps its markup and its name.
|
|
199
|
+
<StyledDialogTitle
|
|
200
|
+
component={navigationTitle ? 'div' : 'h2'}
|
|
201
|
+
id={navigationTitle ? `${titleId}-bar` : titleId}
|
|
202
|
+
rtl={rtl}
|
|
203
|
+
data-testid={testId(dataTestId, 'header')}
|
|
204
|
+
>
|
|
190
205
|
<DialogTitleLeft>
|
|
191
206
|
<HeaderLeadingButton
|
|
192
207
|
canGoBack={canGoBack}
|
|
@@ -199,6 +214,7 @@ export const ModalHeader: FC<ModalHeaderProps> = ({
|
|
|
199
214
|
/>
|
|
200
215
|
{navigationTitle && (
|
|
201
216
|
<Typography
|
|
217
|
+
id={titleId}
|
|
202
218
|
variant="h6"
|
|
203
219
|
component="h2"
|
|
204
220
|
noWrap
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
- Keyboard geometry uses React Native KeyboardAvoidingView; react-native-web unit/story lanes verify its wiring, not a real Android/iOS keyboard. Device keyboard/rotation QA remains explicit.
|
|
2
|
+
- Web safe-area values come from CSS environment variables; native values come from the existing navigator or an internal safe-area provider. Browser keyboard resizing remains browser-managed.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { BoxBaseProps } from '../Box/Box.base';
|
|
2
|
+
|
|
3
|
+
/** Physical screen edges, independent of a native dependency. */
|
|
4
|
+
export type ScreenEdge = 'top' | 'right' | 'bottom' | 'left';
|
|
5
|
+
export const SCREEN_EDGES: readonly ScreenEdge[] = ['top', 'right', 'bottom', 'left'];
|
|
6
|
+
|
|
7
|
+
/** Padding and gap apply to the content, inside the selected safe-area edges. */
|
|
8
|
+
export interface ScreenBaseProps extends Pick<
|
|
9
|
+
BoxBaseProps,
|
|
10
|
+
'children' | 'p' | 'px' | 'py' | 'pt' | 'pr' | 'pb' | 'pl' | 'gap' | 'bg' | 'testID' | 'dataTestId'
|
|
11
|
+
> {
|
|
12
|
+
/** Vertical scrolling; turn off when a child owns scrolling. Default true. */
|
|
13
|
+
scroll?: boolean;
|
|
14
|
+
/** Omit bottom when a navigator's tab bar already owns that inset. */
|
|
15
|
+
safeAreaEdges?: readonly ScreenEdge[];
|
|
16
|
+
/** Lift the native viewport above the soft keyboard. Default true. */
|
|
17
|
+
keyboardAvoiding?: boolean;
|
|
18
|
+
/** Native distance from the window top to the screen's parent, in dp. */
|
|
19
|
+
keyboardVerticalOffset?: number;
|
|
20
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Screen
|
|
2
|
+
|
|
3
|
+
`@12-apps/ui/layout/Screen` is a bounded page viewport on web, Android and iOS.
|
|
4
|
+
It combines safe-area edges, vertical scrolling and native keyboard avoidance.
|
|
5
|
+
It renders existing Box/Stack/form components without consumer imports from a
|
|
6
|
+
visual platform library. It is for ordinary screens, not virtualized lists.
|
|
7
|
+
|
|
8
|
+
```tsx
|
|
9
|
+
import { Screen } from '@12-apps/ui/layout/Screen';
|
|
10
|
+
import { Text } from '@12-apps/ui/typography/Text';
|
|
11
|
+
|
|
12
|
+
<Screen p={2} gap={2} safeAreaEdges={['top', 'left', 'right']}>
|
|
13
|
+
<Text>Content above a navigator-owned bottom tab bar</Text>
|
|
14
|
+
</Screen>
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Props
|
|
18
|
+
|
|
19
|
+
- `children`: screen content
|
|
20
|
+
- `scroll` (true): a vertical scrolling viewport; use false if a child owns scrolling
|
|
21
|
+
- `safeAreaEdges` (all four): physical edges; use an empty array when an ancestor
|
|
22
|
+
already owns every inset. Exclude bottom when a tab bar owns that edge
|
|
23
|
+
- `p`, `px`, `py`, `pt`, `pr`, `pb`, `pl`, `gap`: content spacing in theme units,
|
|
24
|
+
inside the safe area; side overrides axis, axis overrides shorthand
|
|
25
|
+
- `bg` (`default`): the same surface/palette role as Box
|
|
26
|
+
- `keyboardAvoiding` (true): native keyboard lift; disable if a parent owns it
|
|
27
|
+
- `keyboardVerticalOffset` (0): native distance from the window top to the
|
|
28
|
+
screen's parent, in dp; set for a non-overlay navigation header
|
|
29
|
+
- `testID` / `dataTestId`: outer screen id; scroll viewport also has `<id>-viewport`
|
|
30
|
+
- Native: View accessibility props, `style`, `contentContainerStyle`,
|
|
31
|
+
`scrollViewProps` for scroll callbacks and indicators
|
|
32
|
+
- Web: div accessibility props, `sx`, `contentSx`, `style`
|
|
33
|
+
- Ref: native outer View / web outer div
|
|
34
|
+
|
|
35
|
+
## Native setup
|
|
36
|
+
|
|
37
|
+
Install the optional peer `react-native-safe-area-context` (5+) using the version
|
|
38
|
+
supported by your Expo/RN app. A web-only consumer does not need this peer. Screen
|
|
39
|
+
reuses the navigator's safe-area context. Without one it creates a provider
|
|
40
|
+
outside the scroll viewport. Do not wrap Screen in another safe-area view;
|
|
41
|
+
select the edges the screen actually owns instead.
|
|
42
|
+
|
|
43
|
+
The safe-area view wraps React Native's KeyboardAvoidingView, which uses padding
|
|
44
|
+
on iOS and height on Android. Its measured viewport already excludes the bottom
|
|
45
|
+
safe area, so the home-indicator inset is not added again above the keyboard.
|
|
46
|
+
ScrollView automatic keyboard and content insets are off so those owners do not
|
|
47
|
+
also apply the same lift/insets. Handled child taps remain usable with the
|
|
48
|
+
keyboard open; dragging dismisses it. `scrollViewProps` can change tap/dismiss
|
|
49
|
+
policy, but cannot override the viewport geometry or automatic inset ownership.
|
|
50
|
+
|
|
51
|
+
## Layout and accessibility
|
|
52
|
+
|
|
53
|
+
The parent must give Screen a bounded height (a navigator does this). On the web,
|
|
54
|
+
the ancestor chain must carry a definite height/flex size; Screen grows within it.
|
|
55
|
+
Content has a minimum viewport height, so short screens fill the available area
|
|
56
|
+
and long screens scroll. No app-specific padding, colors, header or footer are
|
|
57
|
+
invented. Use a meaningful accessibility label where the screen needs one;
|
|
58
|
+
children retain their own focus and accessibility semantics.
|
|
59
|
+
|
|
60
|
+
The web uses CSS `env(safe-area-inset-*)`; set viewport-fit=cover when deploying
|
|
61
|
+
edge-to-edge. Browser keyboard/visual-viewport behavior belongs to the browser;
|
|
62
|
+
the native keyboard props are accepted but not forwarded to the DOM.
|
|
63
|
+
|
|
64
|
+
## Verification boundary
|
|
65
|
+
|
|
66
|
+
Shared Storybook tests prove bounded scrolling and text entry on both browser
|
|
67
|
+
renderers. Native unit tests exercise safe-area/keyboard/scroll ownership and
|
|
68
|
+
rerenders, but react-native-web does not simulate a device keyboard. Device QA
|
|
69
|
+
must cover both OSes, a notched screen, bottom tabs, keyboard show/hide/resize,
|
|
70
|
+
last-field reachability, rotation and Android back dismissal before claiming
|
|
71
|
+
that those device behaviors have been observed.
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { KeyboardAvoidingView, Platform, ScrollView, StyleSheet, View } from 'react-native';
|
|
3
|
+
import { SafeAreaInsetsContext, SafeAreaProvider, SafeAreaView } from 'react-native-safe-area-context';
|
|
4
|
+
|
|
5
|
+
import { SCREEN_EDGES } from './Screen.base';
|
|
6
|
+
import type { ScreenProps } from './Screen.types.native';
|
|
7
|
+
import { resolveBoxLayout, splitBoxProps } from '../Box/box-layout';
|
|
8
|
+
import { resolveTestId } from '../../../platform/test-id';
|
|
9
|
+
import { useUiTheme } from '../../../provider/use-ui-theme.native';
|
|
10
|
+
|
|
11
|
+
const styles = StyleSheet.create({ fill: { flex: 1 }, content: { flexGrow: 1 } });
|
|
12
|
+
|
|
13
|
+
function keyboardBehavior(enabled: boolean): 'padding' | 'height' | undefined {
|
|
14
|
+
if (!enabled) return undefined;
|
|
15
|
+
return Platform.OS === 'ios' ? 'padding' : 'height';
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
/** Reuse a navigator's context, or own one outside the scrolling view. */
|
|
19
|
+
function ScreenBoundary({ children }: { children: React.ReactNode }): React.JSX.Element {
|
|
20
|
+
const insets = React.useContext(SafeAreaInsetsContext);
|
|
21
|
+
return insets === null
|
|
22
|
+
? <SafeAreaProvider style={styles.fill}>{children}</SafeAreaProvider>
|
|
23
|
+
: <>{children}</>;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export const Screen = React.forwardRef<View, ScreenProps>(({
|
|
27
|
+
children, scroll = true, safeAreaEdges = SCREEN_EDGES,
|
|
28
|
+
keyboardAvoiding = true, keyboardVerticalOffset = 0, bg = 'default',
|
|
29
|
+
style, contentContainerStyle, scrollViewProps, ...props
|
|
30
|
+
}, ref) => {
|
|
31
|
+
const theme = useUiTheme();
|
|
32
|
+
const { layout, rest } = splitBoxProps(props);
|
|
33
|
+
const testID = resolveTestId(layout);
|
|
34
|
+
const contentStyle = [styles.content, resolveBoxLayout({ ...layout, direction: 'column' }, theme), contentContainerStyle];
|
|
35
|
+
return (
|
|
36
|
+
<ScreenBoundary>
|
|
37
|
+
<View ref={ref} testID={testID} {...rest} style={[styles.fill, resolveBoxLayout({ bg }, theme), style]}>
|
|
38
|
+
<SafeAreaView edges={safeAreaEdges} style={styles.fill}>
|
|
39
|
+
<KeyboardAvoidingView style={styles.fill} enabled={keyboardAvoiding}
|
|
40
|
+
behavior={keyboardBehavior(keyboardAvoiding)} keyboardVerticalOffset={keyboardVerticalOffset}>
|
|
41
|
+
{scroll ? (
|
|
42
|
+
<ScrollView keyboardShouldPersistTaps="handled" keyboardDismissMode="on-drag" {...scrollViewProps}
|
|
43
|
+
testID={scrollViewProps?.testID ?? (testID ? `${testID}-viewport` : undefined)}
|
|
44
|
+
style={styles.fill} contentContainerStyle={contentStyle}
|
|
45
|
+
horizontal={false} automaticallyAdjustKeyboardInsets={false}
|
|
46
|
+
automaticallyAdjustContentInsets={false} contentInsetAdjustmentBehavior="never">
|
|
47
|
+
{children}
|
|
48
|
+
</ScrollView>
|
|
49
|
+
) : <View style={[styles.fill, contentStyle]}>{children}</View>}
|
|
50
|
+
</KeyboardAvoidingView>
|
|
51
|
+
</SafeAreaView>
|
|
52
|
+
</View>
|
|
53
|
+
</ScreenBoundary>
|
|
54
|
+
);
|
|
55
|
+
});
|
|
56
|
+
Screen.displayName = 'Screen';
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import MuiBox from '@mui/material/Box/index.js';
|
|
2
|
+
import * as React from 'react';
|
|
3
|
+
|
|
4
|
+
import { SCREEN_EDGES } from './Screen.base';
|
|
5
|
+
import type { ScreenProps } from './Screen.types';
|
|
6
|
+
import { Box } from '../Box/Box';
|
|
7
|
+
import { splitBoxProps } from '../Box/box-layout';
|
|
8
|
+
import { resolveTestId, withoutTestIdProps } from '../../../platform/test-id';
|
|
9
|
+
|
|
10
|
+
function sxEntries(sx: ScreenProps['sx']) {
|
|
11
|
+
if (sx === undefined) return [];
|
|
12
|
+
return Array.isArray(sx) ? sx : [sx];
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/** A bounded page viewport; browser keyboards remain the browser's responsibility. */
|
|
16
|
+
export const Screen = React.forwardRef<HTMLDivElement, ScreenProps>(({
|
|
17
|
+
children, scroll = true, safeAreaEdges = SCREEN_EDGES,
|
|
18
|
+
keyboardAvoiding: _keyboardAvoiding = true, keyboardVerticalOffset: _keyboardVerticalOffset = 0,
|
|
19
|
+
bg = 'default', sx, contentSx, ...props
|
|
20
|
+
}, ref) => {
|
|
21
|
+
const { layout, rest } = splitBoxProps(props);
|
|
22
|
+
const testID = resolveTestId(layout);
|
|
23
|
+
const safeArea = Object.fromEntries(SCREEN_EDGES.map((edge) => [
|
|
24
|
+
`padding${edge[0]!.toUpperCase()}${edge.slice(1)}`,
|
|
25
|
+
safeAreaEdges.includes(edge) ? `env(safe-area-inset-${edge}, 0px)` : 0,
|
|
26
|
+
]));
|
|
27
|
+
return (
|
|
28
|
+
<Box ref={ref} bg={bg} dataTestId={testID} {...rest}
|
|
29
|
+
sx={[{ display: 'flex', flexDirection: 'column', flex: 1, minHeight: 0, minWidth: 0, overflow: 'hidden', ...safeArea },
|
|
30
|
+
...sxEntries(sx)]}>
|
|
31
|
+
<MuiBox data-testid={testID ? `${testID}-viewport` : undefined}
|
|
32
|
+
sx={{ display: 'flex', flexDirection: 'column', flex: 1, minHeight: 0, overflowY: scroll ? 'auto' : 'hidden' }}>
|
|
33
|
+
<Box {...withoutTestIdProps(layout)} direction="column"
|
|
34
|
+
sx={[scroll ? { flexGrow: 1, flexShrink: 0 } : { flex: 1, minHeight: 0, minWidth: 0 }, ...sxEntries(contentSx)]}>
|
|
35
|
+
{children}
|
|
36
|
+
</Box>
|
|
37
|
+
</MuiBox>
|
|
38
|
+
</Box>
|
|
39
|
+
);
|
|
40
|
+
});
|
|
41
|
+
Screen.displayName = 'Screen';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { ScrollViewProps, StyleProp, ViewProps, ViewStyle } from 'react-native';
|
|
2
|
+
|
|
3
|
+
import type { ScreenBaseProps } from './Screen.base';
|
|
4
|
+
|
|
5
|
+
export type { ScreenBaseProps, ScreenEdge } from './Screen.base';
|
|
6
|
+
export type ScreenProps = ScreenBaseProps & Omit<ViewProps, keyof ScreenBaseProps> & {
|
|
7
|
+
contentContainerStyle?: StyleProp<ViewStyle>;
|
|
8
|
+
/** Scroll events/indicators; Screen owns orientation, size and keyboard insets. */
|
|
9
|
+
scrollViewProps?: Omit<ScrollViewProps,
|
|
10
|
+
'children' | 'style' | 'contentContainerStyle' | 'horizontal' | 'scrollEnabled' |
|
|
11
|
+
'automaticallyAdjustKeyboardInsets' | 'automaticallyAdjustContentInsets' | 'contentInsetAdjustmentBehavior'
|
|
12
|
+
>;
|
|
13
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { SxProps, Theme } from '@mui/material/styles/index.js';
|
|
2
|
+
import type * as React from 'react';
|
|
3
|
+
|
|
4
|
+
import type { ScreenBaseProps } from './Screen.base';
|
|
5
|
+
|
|
6
|
+
export type { ScreenBaseProps, ScreenEdge } from './Screen.base';
|
|
7
|
+
export type ScreenProps = ScreenBaseProps & Omit<React.HTMLAttributes<HTMLDivElement>, keyof ScreenBaseProps> & {
|
|
8
|
+
sx?: SxProps<Theme>;
|
|
9
|
+
contentSx?: SxProps<Theme>;
|
|
10
|
+
};
|