@12-apps/ui 6.94.0 → 6.95.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 +7 -0
- package/dist/_internal/components/data-display/Avatar/Avatar.js +2 -2
- package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +1 -1
- package/dist/_internal/components/data-display/CardKit/use-row-confirm.js +1 -1
- package/dist/_internal/components/data-display/Carousel/Carousel.js +3 -3
- package/dist/_internal/components/data-display/Chart/SpecChart.js +3 -3
- package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +27 -27
- package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +32 -32
- package/dist/_internal/components/data-display/DataViews/ManageViewsDialog.js +1 -1
- package/dist/_internal/components/data-display/DataViews/base-list-card-geometry.js +2 -2
- package/dist/_internal/components/data-display/DataViews/base-list-card-layout.js +2 -2
- package/dist/_internal/components/data-display/DataViews/base-list-card-slots.js +2 -2
- package/dist/_internal/components/data-display/DataViews/base-list-card.js +4 -4
- package/dist/_internal/components/data-display/DataViews/data-views-category-pill.js +4 -4
- package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +3 -3
- package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +10 -10
- package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +4 -4
- package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +25 -25
- package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +9 -9
- package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +7 -7
- package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +8 -8
- package/dist/_internal/components/data-display/DataViews/data-views-range-pill.js +2 -2
- package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +7 -7
- package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +2 -2
- package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +6 -6
- 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 +2 -2
- package/dist/_internal/components/data-display/DayRuler/DayRuler.js +3 -3
- package/dist/_internal/components/data-display/HoverCard/HoverCard.js +1 -1
- package/dist/_internal/components/data-display/Lightbox/Lightbox.js +5 -5
- package/dist/_internal/components/data-display/Lightbox/LightboxControls.js +2 -2
- package/dist/_internal/components/data-display/Lightbox/LightboxOverlay.js +3 -3
- package/dist/_internal/components/data-display/Lightbox/LightboxThumbnails.js +2 -2
- package/dist/_internal/components/data-display/RegionMap/RegionMap.js +2 -2
- package/dist/_internal/components/data-display/ScheduleGrid/ScheduleGrid.js +1 -1
- package/dist/_internal/components/data-display/Sheet/Sheet.body.js +2 -2
- package/dist/_internal/components/data-display/Sheet/Sheet.hooks.js +2 -2
- package/dist/_internal/components/data-display/Sheet/Sheet.js +5 -5
- package/dist/_internal/components/data-display/Sheet/Sheet.parts.js +1 -1
- package/dist/_internal/components/data-display/Table/Table.js +3 -3
- package/dist/_internal/components/data-display/index.js +39 -39
- package/dist/_internal/components/feedback/StackedModal/StackedModal.hooks.js +2 -2
- package/dist/_internal/components/feedback/StackedModal/StackedModal.js +4 -4
- package/dist/_internal/components/feedback/StackedModal/modal-stack.js +3 -1
- package/dist/_internal/components/feedback/TutorialOverlay/TutorialOverlay.js +2 -2
- package/dist/_internal/components/feedback/UsableModal/UsableModal.js +11 -0
- package/dist/_internal/components/feedback/UsableModal/UsableModal.js.map +1 -0
- package/dist/_internal/components/feedback/UsableModal/UsableModal.modal.js +87 -0
- package/dist/_internal/components/feedback/UsableModal/UsableModal.modal.js.map +1 -0
- package/dist/_internal/components/feedback/UsableModal/UsableModal.sheet.js +91 -0
- package/dist/_internal/components/feedback/UsableModal/UsableModal.sheet.js.map +1 -0
- package/dist/_internal/components/feedback/UsableModal/UsableModal.types.js +1 -0
- package/dist/_internal/components/feedback/UsableModal/UsableModal.types.js.map +1 -0
- package/dist/_internal/components/feedback/UsableModal/has-footer.js +8 -0
- package/dist/_internal/components/feedback/UsableModal/has-footer.js.map +1 -0
- package/dist/_internal/components/feedback/UsableModal/recover-chunk.js +10 -0
- package/dist/_internal/components/feedback/UsableModal/recover-chunk.js.map +1 -0
- package/dist/_internal/components/feedback/index.js +9 -9
- package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.hooks.js +3 -3
- package/dist/_internal/components/form/AddressAutocomplete/AddressAutocomplete.js +5 -5
- package/dist/_internal/components/form/AddressAutocomplete/AddressAutocompleteField.js +2 -2
- package/dist/_internal/components/form/CategorySelect/CategorySelect.js +2 -2
- package/dist/_internal/components/form/CodeEditor/CodeEditor.js +2 -2
- package/dist/_internal/components/form/Command/Command.js +2 -2
- package/dist/_internal/components/form/Menubar/Menubar.js +2 -2
- package/dist/_internal/components/form/UploadButton/UploadButton.js +2 -2
- package/dist/_internal/components/form/index.js +43 -43
- package/dist/_internal/components/form/total-form/Fields/CategoryField.js +3 -3
- package/dist/_internal/components/form/total-form/Fields/index.js +9 -9
- package/dist/_internal/components/index.js +125 -125
- package/dist/_internal/components/layout/SettingCard/SettingGroup.js +3 -3
- package/dist/_internal/components/layout/SettingCard/SettingToggle.js +3 -3
- 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/index.js +17 -17
- package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +6 -6
- 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/SectionNav/SectionNav.js +3 -3
- package/dist/_internal/components/navigation/index.js +19 -19
- package/dist/_internal/components/utility/index.js +4 -4
- package/dist/_internal/user-avatar/user-avatar.js +3 -3
- package/dist/charts.js +11 -11
- package/dist/{chunk-NQDOKJLI.js → chunk-2365CQJU.js} +2 -2
- package/dist/{chunk-4E2RQOSQ.js → chunk-24G3BWKD.js} +2 -2
- package/dist/{chunk-XE33EZVS.js → chunk-2SBQ47RI.js} +5 -5
- package/dist/{chunk-HWZETMO4.js → chunk-37SNQQ7P.js} +3 -3
- package/dist/{chunk-2L6TANRY.js → chunk-4RF4BALN.js} +3 -3
- package/dist/{chunk-X6D5JEUV.js → chunk-4RSFYS2V.js} +6 -6
- package/dist/{chunk-LYVTJLCF.js → chunk-56JF5PZK.js} +4 -4
- package/dist/{chunk-7WE432RQ.js → chunk-5HXVXW22.js} +5 -5
- package/dist/{chunk-N3GLX64O.js → chunk-5I75WRXT.js} +4 -4
- package/dist/{chunk-BP3ZKIPE.js → chunk-64UNVW6D.js} +4 -4
- package/dist/{chunk-NQ6P7O7C.js → chunk-6AKDAQSS.js} +2 -2
- package/dist/{chunk-PGJIWCQR.js → chunk-6EZQLNPK.js} +4 -4
- package/dist/{chunk-EE6DJPB7.js → chunk-6HXNFNOB.js} +4 -4
- package/dist/{chunk-4QTPERAY.js → chunk-6RW4WNGS.js} +4 -4
- package/dist/{chunk-GBB23QLL.js → chunk-6ZAKPYWX.js} +4 -4
- package/dist/{chunk-CWXX5JR3.js → chunk-75GAQL2Q.js} +5 -5
- package/dist/{chunk-JZRSHDNY.js → chunk-77FQFWA3.js} +6 -3
- package/dist/chunk-77FQFWA3.js.map +1 -0
- package/dist/{chunk-LY5I3ZSV.js → chunk-A2YLFKQU.js} +4 -4
- package/dist/{chunk-6DGNMASB.js → chunk-ALREWFRX.js} +4 -4
- package/dist/{chunk-F2UP5ZF4.js → chunk-BMC5KGH2.js} +4 -4
- package/dist/{chunk-3ODEBPGT.js → chunk-BRFL7OWI.js} +5 -5
- package/dist/chunk-BTMBQIED.js +7 -0
- package/dist/chunk-BTMBQIED.js.map +1 -0
- package/dist/{chunk-UIIHUWOV.js → chunk-C7IFBYIJ.js} +7 -7
- package/dist/{chunk-FKS2PNJF.js → chunk-CSD6SWBZ.js} +6 -6
- package/dist/{chunk-6LGKJVOA.js → chunk-E2UOEI7N.js} +2 -2
- package/dist/{chunk-K2VDRODL.js → chunk-E4NFH77Z.js} +4 -4
- package/dist/{chunk-VM4UYCD4.js → chunk-FTYOCFTV.js} +3 -3
- package/dist/{chunk-JVQ56E3U.js → chunk-FWTVIRZZ.js} +6 -6
- package/dist/chunk-IQDPMLDM.js +39 -0
- package/dist/chunk-IQDPMLDM.js.map +1 -0
- package/dist/{chunk-TSMF7K37.js → chunk-J4UA744J.js} +9 -2
- package/dist/chunk-J4UA744J.js.map +1 -0
- package/dist/chunk-J55SDNCE.js +53 -0
- package/dist/chunk-J55SDNCE.js.map +1 -0
- package/dist/{chunk-4J62V5OE.js → chunk-JIEVKHOH.js} +6 -6
- package/dist/{chunk-MKNW4FRR.js → chunk-JOQGKXR5.js} +5 -5
- package/dist/{chunk-E5OBAS3U.js → chunk-JQGDKWFH.js} +4 -2
- package/dist/chunk-JQGDKWFH.js.map +1 -0
- package/dist/{chunk-Y3FYOKWF.js → chunk-KHDKG7XB.js} +2 -2
- package/dist/{chunk-TSID4257.js → chunk-KMMFN24G.js} +4 -4
- package/dist/{chunk-LKWXU6NH.js → chunk-LV6AD6XC.js} +2 -2
- package/dist/{chunk-WQO5WONV.js → chunk-MWXZXCVX.js} +4 -4
- package/dist/{chunk-PNZH6CDD.js → chunk-NI3MC742.js} +4 -4
- package/dist/{chunk-BZYLTGOE.js → chunk-OKDKKBLI.js} +4 -4
- package/dist/{chunk-AJ6KFHEE.js → chunk-PJDAZG65.js} +2 -2
- package/dist/{chunk-NASLJO2R.js → chunk-QSZYQZZP.js} +3 -2
- package/dist/chunk-QSZYQZZP.js.map +1 -0
- package/dist/{chunk-ALMGYCHY.js → chunk-RLQVJXGW.js} +2 -2
- package/dist/{chunk-FPNVOB52.js → chunk-RNIJL54W.js} +4 -4
- package/dist/{chunk-2M3W6ACW.js → chunk-S46LGAQ2.js} +4 -4
- package/dist/{chunk-6N2U67KF.js → chunk-T3KVZTO3.js} +4 -4
- package/dist/{chunk-GY53SDVL.js → chunk-U2SAW6DH.js} +4 -4
- package/dist/{chunk-P772HCHI.js → chunk-W676GY42.js} +4 -4
- package/dist/{chunk-T2G4LDU5.js → chunk-WLLUARTC.js} +2 -2
- package/dist/{chunk-SI5SKX52.js → chunk-WW3F7DCX.js} +2 -2
- package/dist/{chunk-UOKXYV3U.js → chunk-XALDXR3F.js} +2 -2
- package/dist/{chunk-ZM6FJCWS.js → chunk-XNAI7QGU.js} +4 -4
- package/dist/{chunk-LZ5PGB7U.js → chunk-XRC6SF4N.js} +21 -13
- package/dist/chunk-XRC6SF4N.js.map +1 -0
- package/dist/{chunk-JXK53XJW.js → chunk-YOLLISEY.js} +9 -9
- package/dist/{chunk-FKUVFPQZ.js → chunk-Z6QFIRD7.js} +4 -4
- package/dist/data-display/Avatar.js +2 -2
- package/dist/data-display/CardKit.js +1 -1
- package/dist/data-display/Carousel.js +3 -3
- package/dist/data-display/Chart.js +11 -11
- package/dist/data-display/DataViews.js +40 -40
- package/dist/data-display/DayRuler.js +3 -3
- package/dist/data-display/HoverCard.js +1 -1
- package/dist/data-display/Lightbox.js +5 -5
- package/dist/data-display/RegionMap.js +2 -2
- package/dist/data-display/ScheduleGrid.js +5 -5
- package/dist/data-display/Sheet.js +5 -5
- package/dist/data-display/Table.js +3 -3
- package/dist/feedback/ConfirmAction.js +3 -3
- package/dist/feedback/StackedModal.js +4 -4
- package/dist/feedback/TutorialOverlay.js +2 -2
- package/dist/feedback/UsableModal.js +9 -0
- package/dist/feedback/UsableModal.js.map +1 -0
- package/dist/form/AddressAutocomplete.js +5 -5
- package/dist/form/CategorySelect.js +2 -2
- package/dist/form/CodeEditor.js +2 -2
- package/dist/form/Command.js +2 -2
- package/dist/form/Menubar.js +2 -2
- package/dist/form/UploadButton.js +2 -2
- package/dist/form/total-form.js +7 -7
- package/dist/layout/ContentToolbar.js +3 -3
- package/dist/layout/SettingCard.js +7 -7
- package/dist/layout/SettingsLayout.js +3 -3
- package/dist/locales.js +4 -4
- package/dist/navigation/AppHeader.js +8 -8
- package/dist/navigation/NavigationMenu.js +4 -4
- package/dist/navigation/SectionNav.js +3 -3
- package/dist/pt-BR.js +5 -5
- package/dist/types/components/data-display/Sheet/Sheet.body.d.ts +2 -0
- package/dist/types/components/data-display/Sheet/Sheet.body.d.ts.map +1 -1
- package/dist/types/components/data-display/Sheet/Sheet.d.ts.map +1 -1
- package/dist/types/components/data-display/Sheet/Sheet.parts.d.ts.map +1 -1
- package/dist/types/components/data-display/Sheet/Sheet.types.d.ts +14 -0
- package/dist/types/components/data-display/Sheet/Sheet.types.d.ts.map +1 -1
- package/dist/types/components/feedback/StackedModal/StackedModal.hooks.d.ts.map +1 -1
- package/dist/types/components/feedback/StackedModal/modal-stack.d.ts +6 -0
- package/dist/types/components/feedback/StackedModal/modal-stack.d.ts.map +1 -1
- package/dist/types/components/feedback/UsableModal/UsableModal.d.ts +20 -0
- package/dist/types/components/feedback/UsableModal/UsableModal.d.ts.map +1 -0
- package/dist/types/components/feedback/UsableModal/UsableModal.modal.d.ts +11 -0
- package/dist/types/components/feedback/UsableModal/UsableModal.modal.d.ts.map +1 -0
- package/dist/types/components/feedback/UsableModal/UsableModal.sheet.d.ts +17 -0
- package/dist/types/components/feedback/UsableModal/UsableModal.sheet.d.ts.map +1 -0
- package/dist/types/components/feedback/UsableModal/UsableModal.types.d.ts +35 -0
- package/dist/types/components/feedback/UsableModal/UsableModal.types.d.ts.map +1 -0
- package/dist/types/components/feedback/UsableModal/has-footer.d.ts +4 -0
- package/dist/types/components/feedback/UsableModal/has-footer.d.ts.map +1 -0
- package/dist/types/components/feedback/UsableModal/index.d.ts +3 -0
- package/dist/types/components/feedback/UsableModal/index.d.ts.map +1 -0
- package/dist/types/components/feedback/UsableModal/recover-chunk.d.ts +24 -0
- package/dist/types/components/feedback/UsableModal/recover-chunk.d.ts.map +1 -0
- package/dist/user-avatar.js +3 -3
- package/package.json +5 -1
- package/src/components/data-display/Sheet/Sheet.body.tsx +4 -0
- package/src/components/data-display/Sheet/Sheet.md +5 -0
- package/src/components/data-display/Sheet/Sheet.parts.tsx +2 -1
- package/src/components/data-display/Sheet/Sheet.tsx +29 -9
- package/src/components/data-display/Sheet/Sheet.types.ts +14 -0
- package/src/components/feedback/StackedModal/StackedModal.hooks.ts +16 -0
- package/src/components/feedback/StackedModal/modal-stack.tsx +12 -2
- package/src/components/feedback/UsableModal/UsableModal.md +95 -0
- package/src/components/feedback/UsableModal/UsableModal.modal.tsx +76 -0
- package/src/components/feedback/UsableModal/UsableModal.sheet.tsx +65 -0
- package/src/components/feedback/UsableModal/UsableModal.tsx +92 -0
- package/src/components/feedback/UsableModal/UsableModal.types.ts +38 -0
- package/src/components/feedback/UsableModal/has-footer.ts +4 -0
- package/src/components/feedback/UsableModal/index.ts +2 -0
- package/src/components/feedback/UsableModal/recover-chunk.ts +61 -0
- package/dist/chunk-E5OBAS3U.js.map +0 -1
- package/dist/chunk-JZRSHDNY.js.map +0 -1
- package/dist/chunk-LZ5PGB7U.js.map +0 -1
- package/dist/chunk-NASLJO2R.js.map +0 -1
- package/dist/chunk-TSMF7K37.js.map +0 -1
- /package/dist/{chunk-NQDOKJLI.js.map → chunk-2365CQJU.js.map} +0 -0
- /package/dist/{chunk-4E2RQOSQ.js.map → chunk-24G3BWKD.js.map} +0 -0
- /package/dist/{chunk-XE33EZVS.js.map → chunk-2SBQ47RI.js.map} +0 -0
- /package/dist/{chunk-HWZETMO4.js.map → chunk-37SNQQ7P.js.map} +0 -0
- /package/dist/{chunk-2L6TANRY.js.map → chunk-4RF4BALN.js.map} +0 -0
- /package/dist/{chunk-X6D5JEUV.js.map → chunk-4RSFYS2V.js.map} +0 -0
- /package/dist/{chunk-LYVTJLCF.js.map → chunk-56JF5PZK.js.map} +0 -0
- /package/dist/{chunk-7WE432RQ.js.map → chunk-5HXVXW22.js.map} +0 -0
- /package/dist/{chunk-N3GLX64O.js.map → chunk-5I75WRXT.js.map} +0 -0
- /package/dist/{chunk-BP3ZKIPE.js.map → chunk-64UNVW6D.js.map} +0 -0
- /package/dist/{chunk-NQ6P7O7C.js.map → chunk-6AKDAQSS.js.map} +0 -0
- /package/dist/{chunk-PGJIWCQR.js.map → chunk-6EZQLNPK.js.map} +0 -0
- /package/dist/{chunk-EE6DJPB7.js.map → chunk-6HXNFNOB.js.map} +0 -0
- /package/dist/{chunk-4QTPERAY.js.map → chunk-6RW4WNGS.js.map} +0 -0
- /package/dist/{chunk-GBB23QLL.js.map → chunk-6ZAKPYWX.js.map} +0 -0
- /package/dist/{chunk-CWXX5JR3.js.map → chunk-75GAQL2Q.js.map} +0 -0
- /package/dist/{chunk-LY5I3ZSV.js.map → chunk-A2YLFKQU.js.map} +0 -0
- /package/dist/{chunk-6DGNMASB.js.map → chunk-ALREWFRX.js.map} +0 -0
- /package/dist/{chunk-F2UP5ZF4.js.map → chunk-BMC5KGH2.js.map} +0 -0
- /package/dist/{chunk-3ODEBPGT.js.map → chunk-BRFL7OWI.js.map} +0 -0
- /package/dist/{chunk-UIIHUWOV.js.map → chunk-C7IFBYIJ.js.map} +0 -0
- /package/dist/{chunk-FKS2PNJF.js.map → chunk-CSD6SWBZ.js.map} +0 -0
- /package/dist/{chunk-6LGKJVOA.js.map → chunk-E2UOEI7N.js.map} +0 -0
- /package/dist/{chunk-K2VDRODL.js.map → chunk-E4NFH77Z.js.map} +0 -0
- /package/dist/{chunk-VM4UYCD4.js.map → chunk-FTYOCFTV.js.map} +0 -0
- /package/dist/{chunk-JVQ56E3U.js.map → chunk-FWTVIRZZ.js.map} +0 -0
- /package/dist/{chunk-4J62V5OE.js.map → chunk-JIEVKHOH.js.map} +0 -0
- /package/dist/{chunk-MKNW4FRR.js.map → chunk-JOQGKXR5.js.map} +0 -0
- /package/dist/{chunk-Y3FYOKWF.js.map → chunk-KHDKG7XB.js.map} +0 -0
- /package/dist/{chunk-TSID4257.js.map → chunk-KMMFN24G.js.map} +0 -0
- /package/dist/{chunk-LKWXU6NH.js.map → chunk-LV6AD6XC.js.map} +0 -0
- /package/dist/{chunk-WQO5WONV.js.map → chunk-MWXZXCVX.js.map} +0 -0
- /package/dist/{chunk-PNZH6CDD.js.map → chunk-NI3MC742.js.map} +0 -0
- /package/dist/{chunk-BZYLTGOE.js.map → chunk-OKDKKBLI.js.map} +0 -0
- /package/dist/{chunk-AJ6KFHEE.js.map → chunk-PJDAZG65.js.map} +0 -0
- /package/dist/{chunk-ALMGYCHY.js.map → chunk-RLQVJXGW.js.map} +0 -0
- /package/dist/{chunk-FPNVOB52.js.map → chunk-RNIJL54W.js.map} +0 -0
- /package/dist/{chunk-2M3W6ACW.js.map → chunk-S46LGAQ2.js.map} +0 -0
- /package/dist/{chunk-6N2U67KF.js.map → chunk-T3KVZTO3.js.map} +0 -0
- /package/dist/{chunk-GY53SDVL.js.map → chunk-U2SAW6DH.js.map} +0 -0
- /package/dist/{chunk-P772HCHI.js.map → chunk-W676GY42.js.map} +0 -0
- /package/dist/{chunk-T2G4LDU5.js.map → chunk-WLLUARTC.js.map} +0 -0
- /package/dist/{chunk-SI5SKX52.js.map → chunk-WW3F7DCX.js.map} +0 -0
- /package/dist/{chunk-UOKXYV3U.js.map → chunk-XALDXR3F.js.map} +0 -0
- /package/dist/{chunk-ZM6FJCWS.js.map → chunk-XNAI7QGU.js.map} +0 -0
- /package/dist/{chunk-JXK53XJW.js.map → chunk-YOLLISEY.js.map} +0 -0
- /package/dist/{chunk-FKUVFPQZ.js.map → chunk-Z6QFIRD7.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/feedback/StackedModal/modal-stack.tsx"],"sourcesContent":["import type { FC, ReactNode } from 'react';\nimport { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport { MODAL_STACK_BASE_Z_INDEX, MODAL_STACK_Z_INDEX_STEP } from '../../../tokens/layers';\nimport type { ModalInfo, ModalPanelRole, ModalStackContextValue } from './StackedModal.types';\n\n/**\n * MUI Dialog default z-index; each panel in the stack sits 10 above the last.\n *\n * Imported rather than declared here: anything that portals out of a panel has\n * to clear this ladder, so the numbers are shared with the token that tells it\n * how — see `tokens/layers`.\n */\nconst BASE_Z_INDEX = MODAL_STACK_BASE_Z_INDEX;\nconst Z_INDEX_STEP = MODAL_STACK_Z_INDEX_STEP;\n\nconst noop = (): void => {\n /** do nothing */\n};\n\n/** What a `StackedModal` reads with no provider above it: an empty stack nothing can push onto. */\nconst NO_STACK: ModalStackContextValue = {\n stack: [],\n pushModal: noop,\n popModal: noop,\n clearStack: noop,\n currentDepth: 0,\n isModalInStack: () => false,\n getModalRole: () => null,\n};\n\nconst ModalStackContext = createContext<ModalStackContextValue>(NO_STACK);\n\n/**\n * Whether a `ModalStackProvider` is above this point. A component that opens a\n * `StackedModal` on its own (`UsableModal`) brings a provider only when the\n * host has none, so its panel still joins a stack the host already keeps.\n */\nexport const useInModalStack = (): boolean => useContext(ModalStackContext) !== NO_STACK;\n\nexport const useModalStack = (): ModalStackContextValue => {\n const context = useContext(ModalStackContext);\n if (!context) {\n throw new Error('useModalStack must be used within a ModalStackProvider');\n }\n return context;\n};\n\n/** Top of the stack drives the view; the one behind it recedes; the rest are hidden. */\nconst roleAt = (index: number, depth: number): ModalPanelRole => {\n if (index === depth - 1) return 'primary';\n if (index === depth - 2) return 'secondary';\n return 'background';\n};\n\n/** Re-derive every role from stack position — the one place roles are assigned. */\nconst withRoles = (stack: ModalInfo[]): ModalInfo[] =>\n stack.map((modal, index) => ({ ...modal, role: roleAt(index, stack.length) }));\n\n/**\n * Locks body scroll while any modal is open, restoring whatever the page had\n * before. Owned by the provider rather than each modal, so nested panels can't\n * fight over the same style.\n */\nconst useBodyScrollLock = (locked: boolean): void => {\n const originalOverflow = useRef<string>('');\n\n useEffect(() => {\n const restore = (): void => {\n if (!originalOverflow.current) return;\n document.body.style.overflow = originalOverflow.current;\n originalOverflow.current = '';\n };\n\n if (locked) {\n if (!originalOverflow.current) {\n originalOverflow.current = document.body.style.overflow || '';\n }\n document.body.style.overflow = 'hidden';\n } else {\n restore();\n }\n\n return restore;\n }, [locked]);\n};\n\nexport const ModalStackProvider: FC<{ children: ReactNode }> = ({ children }) => {\n const [stack, setStack] = useState<ModalInfo[]>([]);\n\n useBodyScrollLock(stack.length > 0);\n\n const pushModal = useCallback((modalId: string) => {\n setStack((prev) => {\n if (prev.some((m) => m.id === modalId)) return prev;\n const entry: ModalInfo = {\n id: modalId,\n zIndex: BASE_Z_INDEX + prev.length * Z_INDEX_STEP,\n role: 'primary',\n };\n return withRoles([...prev, entry]);\n });\n }, []);\n\n const popModal = useCallback((modalId?: string) => {\n setStack((prev) =>\n withRoles(modalId ? prev.filter((m) => m.id !== modalId) : prev.slice(0, -1)),\n );\n }, []);\n\n const clearStack = useCallback(() => setStack([]), []);\n\n const isModalInStack = useCallback(\n (modalId: string) => stack.some((m) => m.id === modalId),\n [stack],\n );\n\n const getModalRole = useCallback(\n (modalId: string) => stack.find((m) => m.id === modalId)?.role ?? null,\n [stack],\n );\n\n const value = useMemo(\n () => ({\n stack,\n pushModal,\n popModal,\n clearStack,\n currentDepth: stack.length,\n isModalInStack,\n getModalRole,\n }),\n [stack, pushModal, popModal, clearStack, isModalInStack, getModalRole],\n );\n\n return <ModalStackContext.Provider value={value}>{children}</ModalStackContext.Provider>;\n};\n"],"mappings":";;;;;;AACA,SAAS,eAAe,aAAa,YAAY,WAAW,SAAS,QAAQ,gBAAgB;AAqIpF;AA1HT,IAAM,eAAe;AACrB,IAAM,eAAe;AAErB,IAAM,OAAO,MAAY;AAEzB;AAGA,IAAM,WAAmC;AAAA,EACvC,OAAO,CAAC;AAAA,EACR,WAAW;AAAA,EACX,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,cAAc;AAAA,EACd,gBAAgB,MAAM;AAAA,EACtB,cAAc,MAAM;AACtB;AAEA,IAAM,oBAAoB,cAAsC,QAAQ;AAOjE,IAAM,kBAAkB,MAAe,WAAW,iBAAiB,MAAM;AAEzE,IAAM,gBAAgB,MAA8B;AACzD,QAAM,UAAU,WAAW,iBAAiB;AAC5C,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,wDAAwD;AAAA,EAC1E;AACA,SAAO;AACT;AAGA,IAAM,SAAS,CAAC,OAAe,UAAkC;AAC/D,MAAI,UAAU,QAAQ,EAAG,QAAO;AAChC,MAAI,UAAU,QAAQ,EAAG,QAAO;AAChC,SAAO;AACT;AAGA,IAAM,YAAY,CAAC,UACjB,MAAM,IAAI,CAAC,OAAO,WAAW,EAAE,GAAG,OAAO,MAAM,OAAO,OAAO,MAAM,MAAM,EAAE,EAAE;AAO/E,IAAM,oBAAoB,CAAC,WAA0B;AACnD,QAAM,mBAAmB,OAAe,EAAE;AAE1C,YAAU,MAAM;AACd,UAAM,UAAU,MAAY;AAC1B,UAAI,CAAC,iBAAiB,QAAS;AAC/B,eAAS,KAAK,MAAM,WAAW,iBAAiB;AAChD,uBAAiB,UAAU;AAAA,IAC7B;AAEA,QAAI,QAAQ;AACV,UAAI,CAAC,iBAAiB,SAAS;AAC7B,yBAAiB,UAAU,SAAS,KAAK,MAAM,YAAY;AAAA,MAC7D;AACA,eAAS,KAAK,MAAM,WAAW;AAAA,IACjC,OAAO;AACL,cAAQ;AAAA,IACV;AAEA,WAAO;AAAA,EACT,GAAG,CAAC,MAAM,CAAC;AACb;AAEO,IAAM,qBAAkD,CAAC,EAAE,SAAS,MAAM;AAC/E,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAsB,CAAC,CAAC;AAElD,oBAAkB,MAAM,SAAS,CAAC;AAElC,QAAM,YAAY,YAAY,CAAC,YAAoB;AACjD,aAAS,CAAC,SAAS;AACjB,UAAI,KAAK,KAAK,CAAC,MAAM,EAAE,OAAO,OAAO,EAAG,QAAO;AAC/C,YAAM,QAAmB;AAAA,QACvB,IAAI;AAAA,QACJ,QAAQ,eAAe,KAAK,SAAS;AAAA,QACrC,MAAM;AAAA,MACR;AACA,aAAO,UAAU,CAAC,GAAG,MAAM,KAAK,CAAC;AAAA,IACnC,CAAC;AAAA,EACH,GAAG,CAAC,CAAC;AAEL,QAAM,WAAW,YAAY,CAAC,YAAqB;AACjD;AAAA,MAAS,CAAC,SACR,UAAU,UAAU,KAAK,OAAO,CAAC,MAAM,EAAE,OAAO,OAAO,IAAI,KAAK,MAAM,GAAG,EAAE,CAAC;AAAA,IAC9E;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,aAAa,YAAY,MAAM,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC;AAErD,QAAM,iBAAiB;AAAA,IACrB,CAAC,YAAoB,MAAM,KAAK,CAAC,MAAM,EAAE,OAAO,OAAO;AAAA,IACvD,CAAC,KAAK;AAAA,EACR;AAEA,QAAM,eAAe;AAAA,IACnB,CAAC,YAAoB,MAAM,KAAK,CAAC,MAAM,EAAE,OAAO,OAAO,GAAG,QAAQ;AAAA,IAClE,CAAC,KAAK;AAAA,EACR;AAEA,QAAM,QAAQ;AAAA,IACZ,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,cAAc,MAAM;AAAA,MACpB;AAAA,MACA;AAAA,IACF;AAAA,IACA,CAAC,OAAO,WAAW,UAAU,YAAY,gBAAgB,YAAY;AAAA,EACvE;AAEA,SAAO,oBAAC,kBAAkB,UAAlB,EAA2B,OAAe,UAAS;AAC7D;","names":[]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
SettingsSectionChips
|
|
3
|
-
} from "./chunk-GBVNY2LG.js";
|
|
4
1
|
import {
|
|
5
2
|
SettingsSectionHeader
|
|
6
3
|
} from "./chunk-WOXNVM52.js";
|
|
4
|
+
import {
|
|
5
|
+
SettingsSectionChips
|
|
6
|
+
} from "./chunk-GBVNY2LG.js";
|
|
7
7
|
import {
|
|
8
8
|
TOUCH_TARGET,
|
|
9
9
|
atLeastRail,
|
|
@@ -167,4 +167,4 @@ function SettingsPanel({
|
|
|
167
167
|
export {
|
|
168
168
|
SettingsPanel
|
|
169
169
|
};
|
|
170
|
-
//# sourceMappingURL=chunk-
|
|
170
|
+
//# sourceMappingURL=chunk-A2YLFKQU.js.map
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
useMenubarMenus
|
|
3
|
-
} from "./chunk-42VH7N5L.js";
|
|
4
1
|
import {
|
|
5
2
|
MenubarToolbar
|
|
6
3
|
} from "./chunk-X3EB67O2.js";
|
|
7
4
|
import {
|
|
8
5
|
barStyles
|
|
9
6
|
} from "./chunk-UCRGKQUW.js";
|
|
7
|
+
import {
|
|
8
|
+
useMenubarMenus
|
|
9
|
+
} from "./chunk-42VH7N5L.js";
|
|
10
10
|
import {
|
|
11
11
|
withDefaults
|
|
12
12
|
} from "./chunk-HPK33ACY.js";
|
|
@@ -190,4 +190,4 @@ export {
|
|
|
190
190
|
Menubar,
|
|
191
191
|
MenubarGroup
|
|
192
192
|
};
|
|
193
|
-
//# sourceMappingURL=chunk-
|
|
193
|
+
//# sourceMappingURL=chunk-ALREWFRX.js.map
|
|
@@ -5,10 +5,10 @@ import {
|
|
|
5
5
|
} from "./chunk-T7OIVPCO.js";
|
|
6
6
|
import {
|
|
7
7
|
MoreFilters
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-24G3BWKD.js";
|
|
9
9
|
import {
|
|
10
10
|
PillControl
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-PJDAZG65.js";
|
|
12
12
|
import {
|
|
13
13
|
QuickChip
|
|
14
14
|
} from "./chunk-AT6UKTH4.js";
|
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
} from "./chunk-KYUEO2IO.js";
|
|
18
18
|
import {
|
|
19
19
|
RangePill
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-RNIJL54W.js";
|
|
21
21
|
import {
|
|
22
22
|
CollapsedSearch,
|
|
23
23
|
InlineKeyword
|
|
@@ -251,4 +251,4 @@ function FilterSlots({
|
|
|
251
251
|
export {
|
|
252
252
|
InlineFilterControls
|
|
253
253
|
};
|
|
254
|
-
//# sourceMappingURL=chunk-
|
|
254
|
+
//# sourceMappingURL=chunk-BMC5KGH2.js.map
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ToggleField
|
|
3
|
+
} from "./chunk-RLTYBV4N.js";
|
|
1
4
|
import {
|
|
2
5
|
TextField
|
|
3
6
|
} from "./chunk-GB7NTXL2.js";
|
|
@@ -9,10 +12,7 @@ import {
|
|
|
9
12
|
} from "./chunk-KXVWH3JM.js";
|
|
10
13
|
import {
|
|
11
14
|
CategoryField
|
|
12
|
-
} from "./chunk-
|
|
13
|
-
import {
|
|
14
|
-
ToggleField
|
|
15
|
-
} from "./chunk-RLTYBV4N.js";
|
|
15
|
+
} from "./chunk-6AKDAQSS.js";
|
|
16
16
|
import {
|
|
17
17
|
__export
|
|
18
18
|
} from "./chunk-PZ5AY32C.js";
|
|
@@ -30,4 +30,4 @@ __export(Fields_exports, {
|
|
|
30
30
|
export {
|
|
31
31
|
Fields_exports
|
|
32
32
|
};
|
|
33
|
-
//# sourceMappingURL=chunk-
|
|
33
|
+
//# sourceMappingURL=chunk-BRFL7OWI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/feedback/UsableModal/has-footer.ts"],"sourcesContent":["import type { ReactNode } from 'react';\n\n/** A footer worth a bar: `null`, `false` and `undefined` draw none, on either surface. */\nexport const hasFooter = (footer: ReactNode): boolean => footer !== undefined && footer !== null && footer !== false;\n"],"mappings":";AAGO,IAAM,YAAY,CAAC,WAA+B,WAAW,UAAa,WAAW,QAAQ,WAAW;","names":[]}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
2
|
GridMain
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-XNAI7QGU.js";
|
|
4
4
|
import {
|
|
5
5
|
FilterDialog,
|
|
6
6
|
GridFilterPanel
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-OKDKKBLI.js";
|
|
8
8
|
import {
|
|
9
9
|
ShellEmpty
|
|
10
10
|
} from "./chunk-MKVDHR3B.js";
|
|
11
11
|
import {
|
|
12
12
|
InlineFilterControls
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-BMC5KGH2.js";
|
|
14
14
|
import {
|
|
15
15
|
GridHeaderRow
|
|
16
16
|
} from "./chunk-X3AFXHY5.js";
|
|
@@ -24,9 +24,6 @@ import {
|
|
|
24
24
|
toOverflowFields,
|
|
25
25
|
toggleQuick
|
|
26
26
|
} from "./chunk-KYUEO2IO.js";
|
|
27
|
-
import {
|
|
28
|
-
ShellToolbar
|
|
29
|
-
} from "./chunk-SI5SKX52.js";
|
|
30
27
|
import {
|
|
31
28
|
allOnPageSelected,
|
|
32
29
|
resolveSelectionExtra
|
|
@@ -34,6 +31,9 @@ import {
|
|
|
34
31
|
import {
|
|
35
32
|
ScopeTabsSlot
|
|
36
33
|
} from "./chunk-K3PMMW23.js";
|
|
34
|
+
import {
|
|
35
|
+
ShellToolbar
|
|
36
|
+
} from "./chunk-WW3F7DCX.js";
|
|
37
37
|
import {
|
|
38
38
|
SHELL_PROPS,
|
|
39
39
|
useStickyBarTop
|
|
@@ -252,4 +252,4 @@ function GridShell(props) {
|
|
|
252
252
|
export {
|
|
253
253
|
GridShell
|
|
254
254
|
};
|
|
255
|
-
//# sourceMappingURL=chunk-
|
|
255
|
+
//# sourceMappingURL=chunk-C7IFBYIJ.js.map
|
|
@@ -5,6 +5,11 @@ import {
|
|
|
5
5
|
StandaloneContainer,
|
|
6
6
|
useRowLayout
|
|
7
7
|
} from "./chunk-E6K2UZGR.js";
|
|
8
|
+
import {
|
|
9
|
+
DiscloseSlot,
|
|
10
|
+
DragSlot,
|
|
11
|
+
SelectSlot
|
|
12
|
+
} from "./chunk-QO7UJXXO.js";
|
|
8
13
|
import {
|
|
9
14
|
actionProps,
|
|
10
15
|
metaShape,
|
|
@@ -17,11 +22,6 @@ import {
|
|
|
17
22
|
ListCardMeta,
|
|
18
23
|
ListCardTail
|
|
19
24
|
} from "./chunk-CSJ7WNXU.js";
|
|
20
|
-
import {
|
|
21
|
-
DiscloseSlot,
|
|
22
|
-
DragSlot,
|
|
23
|
-
SelectSlot
|
|
24
|
-
} from "./chunk-QO7UJXXO.js";
|
|
25
25
|
import {
|
|
26
26
|
DropIndicator
|
|
27
27
|
} from "./chunk-K4EKTMTC.js";
|
|
@@ -185,4 +185,4 @@ function BaseListCard(props) {
|
|
|
185
185
|
export {
|
|
186
186
|
BaseListCard
|
|
187
187
|
};
|
|
188
|
-
//# sourceMappingURL=chunk-
|
|
188
|
+
//# sourceMappingURL=chunk-CSD6SWBZ.js.map
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-DQ22UKMZ.js";
|
|
4
4
|
import {
|
|
5
5
|
Avatar
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-JIEVKHOH.js";
|
|
7
7
|
import {
|
|
8
8
|
Card
|
|
9
9
|
} from "./chunk-4XBAEKQQ.js";
|
|
@@ -80,4 +80,4 @@ export {
|
|
|
80
80
|
UserAvatar,
|
|
81
81
|
UserMenu
|
|
82
82
|
};
|
|
83
|
-
//# sourceMappingURL=chunk-
|
|
83
|
+
//# sourceMappingURL=chunk-E2UOEI7N.js.map
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import {
|
|
2
|
+
useAsyncSwitch
|
|
3
|
+
} from "./chunk-SALQ65SM.js";
|
|
1
4
|
import {
|
|
2
5
|
SettingSwitchBlock,
|
|
3
6
|
useSettingSwitchIds
|
|
@@ -5,9 +8,6 @@ import {
|
|
|
5
8
|
import {
|
|
6
9
|
useSettingGroup
|
|
7
10
|
} from "./chunk-XJQNSMGA.js";
|
|
8
|
-
import {
|
|
9
|
-
useAsyncSwitch
|
|
10
|
-
} from "./chunk-SALQ65SM.js";
|
|
11
11
|
import {
|
|
12
12
|
flatStyles,
|
|
13
13
|
surfaceStyles,
|
|
@@ -44,4 +44,4 @@ SettingToggle.displayName = "SettingToggle";
|
|
|
44
44
|
export {
|
|
45
45
|
SettingToggle
|
|
46
46
|
};
|
|
47
|
-
//# sourceMappingURL=chunk-
|
|
47
|
+
//# sourceMappingURL=chunk-E4NFH77Z.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
NavigationMegaSection
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-6RW4WNGS.js";
|
|
4
4
|
import {
|
|
5
5
|
NavigationStandardBody
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-NI3MC742.js";
|
|
7
7
|
import {
|
|
8
8
|
LogoBar,
|
|
9
9
|
NavigationShell
|
|
@@ -177,4 +177,4 @@ NavigationMenu.displayName = "NavigationMenu";
|
|
|
177
177
|
export {
|
|
178
178
|
NavigationMenu
|
|
179
179
|
};
|
|
180
|
-
//# sourceMappingURL=chunk-
|
|
180
|
+
//# sourceMappingURL=chunk-FTYOCFTV.js.map
|
|
@@ -3,25 +3,25 @@ import {
|
|
|
3
3
|
} from "./chunk-UOS7DEQZ.js";
|
|
4
4
|
import {
|
|
5
5
|
LightboxThumbnails
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-64UNVW6D.js";
|
|
7
7
|
import {
|
|
8
8
|
LightboxStage
|
|
9
9
|
} from "./chunk-SYGM4SHY.js";
|
|
10
10
|
import {
|
|
11
11
|
LightboxOverlay
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-WLLUARTC.js";
|
|
13
13
|
import {
|
|
14
14
|
LightboxCurrentMedia
|
|
15
15
|
} from "./chunk-RBGUS7WO.js";
|
|
16
|
-
import {
|
|
17
|
-
LightboxCopyProvider
|
|
18
|
-
} from "./chunk-TEQYTEM2.js";
|
|
19
16
|
import {
|
|
20
17
|
useLightbox
|
|
21
18
|
} from "./chunk-HZBDTPPV.js";
|
|
22
19
|
import {
|
|
23
20
|
makeTestId
|
|
24
21
|
} from "./chunk-VQU3CBAL.js";
|
|
22
|
+
import {
|
|
23
|
+
LightboxCopyProvider
|
|
24
|
+
} from "./chunk-TEQYTEM2.js";
|
|
25
25
|
import {
|
|
26
26
|
scrim
|
|
27
27
|
} from "./chunk-XJAD6E3V.js";
|
|
@@ -148,4 +148,4 @@ export {
|
|
|
148
148
|
Lightbox,
|
|
149
149
|
Lightbox_default
|
|
150
150
|
};
|
|
151
|
-
//# sourceMappingURL=chunk-
|
|
151
|
+
//# sourceMappingURL=chunk-FWTVIRZZ.js.map
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
// src/components/feedback/UsableModal/recover-chunk.ts
|
|
2
|
+
var RELOADED_KEY = "12-apps-ui:usable-modal-chunk-reload";
|
|
3
|
+
var RELOAD_SPENT_MS = 5 * 60 * 1e3;
|
|
4
|
+
var Nothing = () => null;
|
|
5
|
+
function readReloaded() {
|
|
6
|
+
try {
|
|
7
|
+
const at = Number(window.sessionStorage.getItem(RELOADED_KEY));
|
|
8
|
+
return at > 0 && Date.now() - at < RELOAD_SPENT_MS;
|
|
9
|
+
} catch {
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function writeReloaded(value) {
|
|
14
|
+
try {
|
|
15
|
+
if (value) window.sessionStorage.setItem(RELOADED_KEY, String(Date.now()));
|
|
16
|
+
else window.sessionStorage.removeItem(RELOADED_KEY);
|
|
17
|
+
} catch {
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function recoverChunk(load) {
|
|
21
|
+
return async () => {
|
|
22
|
+
try {
|
|
23
|
+
const loaded = await load().catch(() => load());
|
|
24
|
+
writeReloaded(false);
|
|
25
|
+
return loaded;
|
|
26
|
+
} catch {
|
|
27
|
+
if (typeof window === "undefined" || readReloaded()) return { default: Nothing };
|
|
28
|
+
writeReloaded(true);
|
|
29
|
+
window.location.reload();
|
|
30
|
+
return new Promise(() => void 0);
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export {
|
|
36
|
+
RELOAD_SPENT_MS,
|
|
37
|
+
recoverChunk
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=chunk-IQDPMLDM.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/feedback/UsableModal/recover-chunk.ts"],"sourcesContent":["import type { ComponentType } from 'react';\n\n/** Remembers, for this tab, WHEN a reload was last spent on a missing chunk. */\nconst RELOADED_KEY = '12-apps-ui:usable-modal-chunk-reload';\n\n/**\n * How long a reload counts as spent. Inside it, a chunk still missing after the\n * reload is not a deploy but a broken build: render nothing rather than loop.\n * Past it, a missing chunk is the NEXT deploy — a tab open for days meets one a\n * day — and earns its own reload; a flag kept for the tab's life would leave\n * the modal silently dead after the second deploy.\n */\nexport const RELOAD_SPENT_MS = 5 * 60 * 1000;\n\ntype Module<P> = { default: ComponentType<P> };\n\n/** Renders nothing: what a surface becomes when its chunk cannot be had at all. */\nconst Nothing = (): null => null;\n\nfunction readReloaded(): boolean {\n try {\n const at = Number(window.sessionStorage.getItem(RELOADED_KEY));\n return at > 0 && Date.now() - at < RELOAD_SPENT_MS;\n } catch {\n return true;\n }\n}\n\nfunction writeReloaded(value: boolean): void {\n try {\n if (value) window.sessionStorage.setItem(RELOADED_KEY, String(Date.now()));\n else window.sessionStorage.removeItem(RELOADED_KEY);\n } catch {\n // Storage refused (private mode, quota): the reload guard is lost, not the modal.\n }\n}\n\n/**\n * A lazy loader that survives a deploy. Every deploy replaces a host's hashed\n * chunks, so a tab opened before it asks for a file that is gone. The import is\n * tried twice; then the page reloads ONCE onto the current build (the same\n * answer as a host's own route loader); if that already happened in this tab\n * in the last `RELOAD_SPENT_MS`,\n * the modal renders nothing rather than handing the failure to the host's\n * error boundary and losing the whole page for opening a modal.\n */\nexport function recoverChunk<P>(load: () => Promise<Module<P>>): () => Promise<Module<P>> {\n return async () => {\n try {\n const loaded = await load().catch(() => load());\n writeReloaded(false);\n return loaded;\n } catch {\n if (typeof window === 'undefined' || readReloaded()) return { default: Nothing };\n writeReloaded(true);\n window.location.reload();\n // The page is going away; nothing should render in the meantime.\n return new Promise<Module<P>>(() => undefined);\n }\n };\n}\n"],"mappings":";AAGA,IAAM,eAAe;AASd,IAAM,kBAAkB,IAAI,KAAK;AAKxC,IAAM,UAAU,MAAY;AAE5B,SAAS,eAAwB;AAC/B,MAAI;AACF,UAAM,KAAK,OAAO,OAAO,eAAe,QAAQ,YAAY,CAAC;AAC7D,WAAO,KAAK,KAAK,KAAK,IAAI,IAAI,KAAK;AAAA,EACrC,QAAQ;AACN,WAAO;AAAA,EACT;AACF;AAEA,SAAS,cAAc,OAAsB;AAC3C,MAAI;AACF,QAAI,MAAO,QAAO,eAAe,QAAQ,cAAc,OAAO,KAAK,IAAI,CAAC,CAAC;AAAA,QACpE,QAAO,eAAe,WAAW,YAAY;AAAA,EACpD,QAAQ;AAAA,EAER;AACF;AAWO,SAAS,aAAgB,MAA0D;AACxF,SAAO,YAAY;AACjB,QAAI;AACF,YAAM,SAAS,MAAM,KAAK,EAAE,MAAM,MAAM,KAAK,CAAC;AAC9C,oBAAc,KAAK;AACnB,aAAO;AAAA,IACT,QAAQ;AACN,UAAI,OAAO,WAAW,eAAe,aAAa,EAAG,QAAO,EAAE,SAAS,QAAQ;AAC/E,oBAAc,IAAI;AAClB,aAAO,SAAS,OAAO;AAEvB,aAAO,IAAI,QAAmB,MAAM,MAAS;AAAA,IAC/C;AAAA,EACF;AACF;","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
useModalStack
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-77FQFWA3.js";
|
|
4
4
|
|
|
5
5
|
// src/components/feedback/StackedModal/StackedModal.hooks.ts
|
|
6
6
|
import { useTheme } from "@mui/material/styles/index.js";
|
|
@@ -68,6 +68,13 @@ var useStackRegistration = (open, modalId) => {
|
|
|
68
68
|
const timer = window.setTimeout(() => popModal(modalId), ROLE_TRANSITION_MS);
|
|
69
69
|
return () => window.clearTimeout(timer);
|
|
70
70
|
}, [open, modalId, popModal, isModalInStack]);
|
|
71
|
+
useEffect(
|
|
72
|
+
() => () => {
|
|
73
|
+
popModal(modalId);
|
|
74
|
+
hasRegisteredRef.current = false;
|
|
75
|
+
},
|
|
76
|
+
[modalId, popModal]
|
|
77
|
+
);
|
|
71
78
|
};
|
|
72
79
|
var usePanelChrome = (options) => {
|
|
73
80
|
const { open, modalId, loading, closeOnEsc, closeOnClickOutside, disableFocusTrap, onClose } = options;
|
|
@@ -144,4 +151,4 @@ var useModalRole = (open, modalId) => {
|
|
|
144
151
|
export {
|
|
145
152
|
usePanelChrome
|
|
146
153
|
};
|
|
147
|
-
//# sourceMappingURL=chunk-
|
|
154
|
+
//# sourceMappingURL=chunk-J4UA744J.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/feedback/StackedModal/StackedModal.hooks.ts"],"sourcesContent":["import { useTheme } from '@mui/material/styles/index.js';\nimport useMediaQuery from '@mui/material/useMediaQuery/index.js';\nimport type { RefObject } from 'react';\nimport { useEffect, useRef, useState } from 'react';\nimport { useModalStack } from './modal-stack';\nimport type { ModalPanelRole } from './StackedModal.types';\n\nconst FOCUSABLE = 'a[href], button, textarea, input, select, [tabindex]:not([tabindex=\"-1\"])';\n/** MUI Dialog's own default, used when the modal isn't registered in the stack yet. */\nconst FALLBACK_Z_INDEX = 1300;\n/** Matches the panel's slide duration, so role swaps animate rather than jump. */\nconst ROLE_TRANSITION_MS = 300;\n\n/** Keeps Tab cycling inside the open panel instead of escaping to the page behind. */\nconst useFocusTrap = (\n ref: RefObject<HTMLElement | null>,\n isActive: boolean,\n disabled?: boolean,\n): void => {\n useEffect(() => {\n if (!isActive || disabled || !ref.current) return;\n\n const element = ref.current;\n const focusable = element.querySelectorAll(FOCUSABLE);\n const first = focusable[0] as HTMLElement | undefined;\n const last = focusable[focusable.length - 1] as HTMLElement | undefined;\n\n window.setTimeout(() => first?.focus(), 100);\n\n const handleTabKey = (e: globalThis.KeyboardEvent): void => {\n if (e.key !== 'Tab') return;\n const atEdge = e.shiftKey ? first : last;\n if (document.activeElement !== atEdge) return;\n e.preventDefault();\n (e.shiftKey ? last : first)?.focus();\n };\n\n element.addEventListener('keydown', handleTabKey);\n return () => element.removeEventListener('keydown', handleTabKey);\n }, [ref, isActive, disabled]);\n};\n\n/** Closes the panel on Escape — only while it is the top one. */\nconst useEscapeToClose = (active: boolean, onClose: () => void): void => {\n useEffect(() => {\n if (!active) return;\n\n const handleEsc = (e: globalThis.KeyboardEvent): void => {\n if (e.key !== 'Escape') return;\n e.preventDefault();\n onClose();\n };\n\n window.addEventListener('keydown', handleEsc);\n return () => window.removeEventListener('keydown', handleEsc);\n }, [active, onClose]);\n};\n\n/** Holds the skeleton a beat past `loading` so the swap to content isn't a flash. */\nconst useSkeleton = (loading: boolean): boolean => {\n const [showSkeleton, setShowSkeleton] = useState(loading);\n\n useEffect(() => {\n if (loading) {\n setShowSkeleton(true);\n return;\n }\n const timer = window.setTimeout(() => setShowSkeleton(false), 200);\n return () => window.clearTimeout(timer);\n }, [loading]);\n\n return showSkeleton;\n};\n\n/** Registers the modal in the stack while open, and unregisters it after it slides out. */\nconst useStackRegistration = (open: boolean, modalId: string): void => {\n const { pushModal, popModal, isModalInStack } = useModalStack();\n const hasRegisteredRef = useRef(false);\n\n useEffect(() => {\n if (open && !hasRegisteredRef.current) {\n pushModal(modalId);\n hasRegisteredRef.current = true;\n } else if (!open) {\n hasRegisteredRef.current = false;\n }\n }, [open, modalId, pushModal]);\n\n useEffect(() => {\n if (open || !isModalInStack(modalId)) return;\n const timer = window.setTimeout(() => popModal(modalId), ROLE_TRANSITION_MS);\n return () => window.clearTimeout(timer);\n }, [open, modalId, popModal, isModalInStack]);\n\n // A panel unmounted while open, or before its slide-out timer fired, still\n // leaves the stack: otherwise its entry stays `primary` and the panel below\n // is stuck as `secondary` (no Esc, no backdrop, a back arrow to nowhere).\n // `popModal(id)` filters by id, so popping one already gone is a no-op, and\n // it is a stable callback, so this runs on unmount (or an id change) only.\n // The registration flag goes with the entry: StrictMode runs this cleanup and\n // then the effects again on the SAME instance, and a flag left `true` would\n // skip the re-push and leave an open panel out of its stack.\n useEffect(\n () => () => {\n popModal(modalId);\n hasRegisteredRef.current = false;\n },\n [modalId, popModal],\n );\n};\n\ninterface PanelChromeOptions {\n open?: boolean;\n modalId: string;\n loading?: boolean;\n closeOnEsc?: boolean;\n closeOnClickOutside?: boolean;\n disableFocusTrap?: boolean;\n onClose: () => void;\n}\n\ninterface PanelChrome {\n dialogRef: RefObject<HTMLDivElement | null>;\n modalRole: ModalPanelRole;\n isAnimating: boolean;\n showSkeleton: boolean;\n zIndex: number;\n isMobile: boolean;\n canGoBack: boolean;\n /**\n * This panel is the bottom of the stack. Read from ITS position, not from the\n * depth: once a child opens, the depth says \"can go back\" for every panel,\n * the receding root included.\n */\n isRoot: boolean;\n handleBack: () => void;\n handleClose: (event: object, reason: 'backdropClick' | 'escapeKeyDown') => void;\n}\n\n/**\n * Everything the panel needs to render itself: its place in the stack, the\n * viewport it is on, and the handlers that dismiss it. Bundled into one hook so\n * the component stays a description of the markup.\n */\nexport const usePanelChrome = (options: PanelChromeOptions): PanelChrome => {\n const { open, modalId, loading, closeOnEsc, closeOnClickOutside, disableFocusTrap, onClose } =\n options;\n\n const dialogRef = useRef<HTMLDivElement>(null);\n const { currentDepth, stack } = useModalStack();\n const { modalRole, isAnimating } = useModalRole(Boolean(open), modalId);\n const showSkeleton = useSkeleton(Boolean(loading));\n const zIndex = usePanelZIndex(modalId, FALLBACK_Z_INDEX);\n\n const theme = useTheme();\n const isMobile = useMediaQuery(theme.breakpoints.down('sm'));\n const isPrimary = modalRole === 'primary';\n const canGoBack = currentDepth > 1;\n // Not yet pushed (its first render) and something already below it: NOT the\n // root — so a child never renders a frame without its back arrow.\n const isRoot = (stack[0]?.id ?? modalId) === modalId;\n\n useFocusTrap(dialogRef, Boolean(open) && isPrimary, disableFocusTrap);\n useEscapeToClose(Boolean(open && closeOnEsc) && isPrimary, onClose);\n\n const { handleBack, handleClose } = useCloseHandlers({\n isPrimary,\n closeOnClickOutside,\n closeOnEsc,\n canGoBack,\n onClose,\n });\n\n return {\n dialogRef,\n modalRole,\n isAnimating,\n showSkeleton,\n zIndex,\n isMobile,\n canGoBack,\n isRoot,\n handleBack,\n handleClose,\n };\n};\n\ninterface CloseHandlerOptions {\n /** Only the top panel responds to a backdrop click or Escape. */\n isPrimary: boolean;\n closeOnClickOutside?: boolean;\n closeOnEsc?: boolean;\n /** Deeper than one panel, so the leading control goes back rather than closing. */\n canGoBack: boolean;\n onClose: () => void;\n}\n\n/** The panel's dismissal handlers, honouring which gestures the caller allows. */\nconst useCloseHandlers = ({\n isPrimary,\n closeOnClickOutside,\n closeOnEsc,\n canGoBack,\n onClose,\n}: CloseHandlerOptions): {\n handleBack: () => void;\n handleClose: (event: object, reason: 'backdropClick' | 'escapeKeyDown') => void;\n} => ({\n handleBack: () => {\n if (canGoBack) onClose();\n },\n handleClose: (_event, reason) => {\n if (!isPrimary) return;\n if (reason === 'backdropClick' && !closeOnClickOutside) return;\n if (reason === 'escapeKeyDown' && !closeOnEsc) return;\n onClose();\n },\n});\n\n/** The z-index this panel was assigned when it joined the stack. */\nconst usePanelZIndex = (modalId: string, fallback: number): number => {\n const { stack } = useModalStack();\n return stack.find((m) => m.id === modalId)?.zIndex ?? fallback;\n};\n\n/**\n * This modal's role in the stack, plus whether it is mid-transition between two\n * roles (which drives the expand/contract animation).\n */\nconst useModalRole = (\n open: boolean,\n modalId: string,\n): { modalRole: ModalPanelRole; isAnimating: boolean } => {\n const { stack } = useModalStack();\n const [modalRole, setModalRole] = useState<ModalPanelRole>('primary');\n const [isAnimating, setIsAnimating] = useState(false);\n\n useStackRegistration(open, modalId);\n\n useEffect(() => {\n if (!open) return;\n\n const newRole = stack.find((m) => m.id === modalId)?.role;\n if (!newRole || newRole === modalRole) return;\n\n setIsAnimating(true);\n setModalRole(newRole);\n const timer = window.setTimeout(() => setIsAnimating(false), ROLE_TRANSITION_MS);\n return () => window.clearTimeout(timer);\n }, [stack, modalId, open, modalRole]);\n\n return { modalRole, isAnimating };\n};\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import {
|
|
2
|
+
recoverChunk
|
|
3
|
+
} from "./chunk-IQDPMLDM.js";
|
|
4
|
+
|
|
5
|
+
// src/components/feedback/UsableModal/UsableModal.tsx
|
|
6
|
+
import { useTheme } from "@mui/material/styles/index.js";
|
|
7
|
+
import useMediaQuery from "@mui/material/useMediaQuery/index.js";
|
|
8
|
+
import { lazy, Suspense, useEffect, useState } from "react";
|
|
9
|
+
import { jsx } from "react/jsx-runtime";
|
|
10
|
+
var StackedSurface = lazy(
|
|
11
|
+
recoverChunk(async () => ({
|
|
12
|
+
default: (await import("./_internal/components/feedback/UsableModal/UsableModal.modal.js")).UsableModalStacked
|
|
13
|
+
}))
|
|
14
|
+
);
|
|
15
|
+
var SheetSurface = lazy(
|
|
16
|
+
recoverChunk(async () => ({
|
|
17
|
+
default: (await import("./_internal/components/feedback/UsableModal/UsableModal.sheet.js")).UsableModalSheet
|
|
18
|
+
}))
|
|
19
|
+
);
|
|
20
|
+
function useViewportSurface(layout) {
|
|
21
|
+
const theme = useTheme();
|
|
22
|
+
const phone = useMediaQuery(theme.breakpoints.down("sm"), { noSsr: true });
|
|
23
|
+
if (layout !== "auto") return layout;
|
|
24
|
+
return phone ? "sheet" : "modal";
|
|
25
|
+
}
|
|
26
|
+
var SURFACE_EXIT_MS = 400;
|
|
27
|
+
function useOpenedSurface(open, layout) {
|
|
28
|
+
const viewport = useViewportSurface(layout);
|
|
29
|
+
const [surface, setSurface] = useState(open ? viewport : null);
|
|
30
|
+
const [wasOpen, setWasOpen] = useState(open);
|
|
31
|
+
if (open !== wasOpen) {
|
|
32
|
+
setWasOpen(open);
|
|
33
|
+
if (open) setSurface(viewport);
|
|
34
|
+
}
|
|
35
|
+
useEffect(() => {
|
|
36
|
+
if (open || surface === null) return;
|
|
37
|
+
const timer = window.setTimeout(() => setSurface(null), SURFACE_EXIT_MS);
|
|
38
|
+
return () => window.clearTimeout(timer);
|
|
39
|
+
}, [open, surface]);
|
|
40
|
+
return surface;
|
|
41
|
+
}
|
|
42
|
+
function UsableModal({ layout = "auto", ...props }) {
|
|
43
|
+
const surface = useOpenedSurface(props.open, layout);
|
|
44
|
+
if (surface === null) return null;
|
|
45
|
+
const Shown = surface === "sheet" ? SheetSurface : StackedSurface;
|
|
46
|
+
return /* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(Shown, { ...props }) });
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export {
|
|
50
|
+
SURFACE_EXIT_MS,
|
|
51
|
+
UsableModal
|
|
52
|
+
};
|
|
53
|
+
//# sourceMappingURL=chunk-J55SDNCE.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/feedback/UsableModal/UsableModal.tsx"],"sourcesContent":["import { useTheme } from '@mui/material/styles/index.js';\nimport useMediaQuery from '@mui/material/useMediaQuery/index.js';\nimport { lazy, Suspense, useEffect, useState, type ComponentType } from 'react';\n\nimport { recoverChunk } from './recover-chunk';\nimport type { UsableModalLayout, UsableModalProps, UsableModalSurfaceProps } from './UsableModal.types';\n\ntype Surface = 'modal' | 'sheet';\n\n/**\n * Each surface is its own chunk (the package builds with `splitting: true`), so\n * a phone never downloads `StackedModal` and a computer never downloads `Sheet`.\n * A chunk a deploy replaced is retried, then the page reloads once onto the\n * current build (`./recover-chunk`) — never the host's error boundary.\n */\nconst StackedSurface = lazy(\n recoverChunk(async (): Promise<{ default: ComponentType<UsableModalSurfaceProps> }> => ({\n default: (await import('./UsableModal.modal')).UsableModalStacked,\n })),\n);\nconst SheetSurface = lazy(\n recoverChunk(async (): Promise<{ default: ComponentType<UsableModalSurfaceProps> }> => ({\n default: (await import('./UsableModal.sheet')).UsableModalSheet,\n })),\n);\n\n/** The surface the viewport asks for now: a sheet below `sm`, a stacked modal from `sm` up. */\nfunction useViewportSurface(layout: UsableModalLayout): Surface {\n const theme = useTheme();\n // `noSsr`: the first render already knows the width, so a phone never mounts\n // (and never fetches) the stacked modal for one frame before the sheet.\n const phone = useMediaQuery(theme.breakpoints.down('sm'), { noSsr: true });\n if (layout !== 'auto') return layout;\n return phone ? 'sheet' : 'modal';\n}\n\n/**\n * How long a closed surface stays mounted: longer than its own way out — the\n * drawer's slide-down (225 ms) and the stacked modal's leaving its stack\n * (300 ms) — so neither is cut off.\n */\nexport const SURFACE_EXIT_MS = 400;\n\n/**\n * The surface is chosen when the modal OPENS and kept until it closes: a phone\n * turned to landscape, or a window narrowed past `sm`, mid-task, does not swap\n * the surface and throw away what the person typed. The next opening asks the\n * viewport again.\n *\n * Once closed, and its way out run, the surface is let go of: every opening\n * starts with a fresh body on both surfaces (the sheet would otherwise keep its\n * content mounted, and the last half-written form, while the stacked modal\n * drops its own), and a closed sheet leaves nothing on the page — not even the\n * drawer's edge strip that swallows taps and swipes the sheet open.\n */\nfunction useOpenedSurface(open: boolean, layout: UsableModalLayout): Surface | null {\n const viewport = useViewportSurface(layout);\n const [surface, setSurface] = useState<Surface | null>(open ? viewport : null);\n const [wasOpen, setWasOpen] = useState(open);\n if (open !== wasOpen) {\n setWasOpen(open);\n if (open) setSurface(viewport);\n }\n useEffect(() => {\n if (open || surface === null) return;\n const timer = window.setTimeout(() => setSurface(null), SURFACE_EXIT_MS);\n return () => window.clearTimeout(timer);\n }, [open, surface]);\n return surface;\n}\n\n/**\n * A modal that is a `StackedModal` on a computer and a bottom `Sheet` on a\n * phone, behind one API: title, body, a pinned footer, and the ways out.\n *\n * Nothing is fetched until the first open: until then it renders nothing.\n * Closing hands the surface `open={false}`, so it runs its own way out — the\n * slide-out, and the stacked modal leaving its stack — and then it unmounts\n * (`SURFACE_EXIT_MS`). While the\n * chunk loads the screen shows no placeholder: a modal that blinks a spinner\n * before its content is worse than one that appears a frame later.\n */\nexport function UsableModal({ layout = 'auto', ...props }: UsableModalProps): React.JSX.Element | null {\n const surface = useOpenedSurface(props.open, layout);\n if (surface === null) return null;\n const Shown = surface === 'sheet' ? SheetSurface : StackedSurface;\n return (\n <Suspense fallback={null}>\n <Shown {...props} />\n </Suspense>\n );\n}\n"],"mappings":";;;;;AAAA,SAAS,gBAAgB;AACzB,OAAO,mBAAmB;AAC1B,SAAS,MAAM,UAAU,WAAW,gBAAoC;AAsFlE;AAzEN,IAAM,iBAAiB;AAAA,EACrB,aAAa,aAA2E;AAAA,IACtF,UAAU,MAAM,OAAO,kEAAqB,GAAG;AAAA,EACjD,EAAE;AACJ;AACA,IAAM,eAAe;AAAA,EACnB,aAAa,aAA2E;AAAA,IACtF,UAAU,MAAM,OAAO,kEAAqB,GAAG;AAAA,EACjD,EAAE;AACJ;AAGA,SAAS,mBAAmB,QAAoC;AAC9D,QAAM,QAAQ,SAAS;AAGvB,QAAM,QAAQ,cAAc,MAAM,YAAY,KAAK,IAAI,GAAG,EAAE,OAAO,KAAK,CAAC;AACzE,MAAI,WAAW,OAAQ,QAAO;AAC9B,SAAO,QAAQ,UAAU;AAC3B;AAOO,IAAM,kBAAkB;AAc/B,SAAS,iBAAiB,MAAe,QAA2C;AAClF,QAAM,WAAW,mBAAmB,MAAM;AAC1C,QAAM,CAAC,SAAS,UAAU,IAAI,SAAyB,OAAO,WAAW,IAAI;AAC7E,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,IAAI;AAC3C,MAAI,SAAS,SAAS;AACpB,eAAW,IAAI;AACf,QAAI,KAAM,YAAW,QAAQ;AAAA,EAC/B;AACA,YAAU,MAAM;AACd,QAAI,QAAQ,YAAY,KAAM;AAC9B,UAAM,QAAQ,OAAO,WAAW,MAAM,WAAW,IAAI,GAAG,eAAe;AACvE,WAAO,MAAM,OAAO,aAAa,KAAK;AAAA,EACxC,GAAG,CAAC,MAAM,OAAO,CAAC;AAClB,SAAO;AACT;AAaO,SAAS,YAAY,EAAE,SAAS,QAAQ,GAAG,MAAM,GAA+C;AACrG,QAAM,UAAU,iBAAiB,MAAM,MAAM,MAAM;AACnD,MAAI,YAAY,KAAM,QAAO;AAC7B,QAAM,QAAQ,YAAY,UAAU,eAAe;AACnD,SACE,oBAAC,YAAS,UAAU,MAClB,8BAAC,SAAO,GAAG,OAAO,GACpB;AAEJ;","names":[]}
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
AVATAR_DEFAULTS,
|
|
3
|
-
contentTypeOf,
|
|
4
|
-
pickAvatarContent
|
|
5
|
-
} from "./chunk-3ZVUNSFF.js";
|
|
6
1
|
import {
|
|
7
2
|
AvatarView
|
|
8
3
|
} from "./chunk-7XSCEHGA.js";
|
|
@@ -12,6 +7,11 @@ import {
|
|
|
12
7
|
GROUP_MAX,
|
|
13
8
|
GROUP_OVERLAP
|
|
14
9
|
} from "./chunk-6ZZGK5DT.js";
|
|
10
|
+
import {
|
|
11
|
+
AVATAR_DEFAULTS,
|
|
12
|
+
contentTypeOf,
|
|
13
|
+
pickAvatarContent
|
|
14
|
+
} from "./chunk-3ZVUNSFF.js";
|
|
15
15
|
import {
|
|
16
16
|
EN_US_UI_LABELS
|
|
17
17
|
} from "./chunk-XOXXG7Q5.js";
|
|
@@ -178,4 +178,4 @@ export {
|
|
|
178
178
|
Avatar,
|
|
179
179
|
AvatarGroup
|
|
180
180
|
};
|
|
181
|
-
//# sourceMappingURL=chunk-
|
|
181
|
+
//# sourceMappingURL=chunk-JIEVKHOH.js.map
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
+
import {
|
|
2
|
+
makeTestId,
|
|
3
|
+
resolveCodeEditorProps
|
|
4
|
+
} from "./chunk-X3OWMTLO.js";
|
|
1
5
|
import {
|
|
2
6
|
EditorToolbar
|
|
3
7
|
} from "./chunk-3TVUW7QE.js";
|
|
4
8
|
import {
|
|
5
9
|
useCodeEditor
|
|
6
10
|
} from "./chunk-OXXIGHZK.js";
|
|
7
|
-
import {
|
|
8
|
-
makeTestId,
|
|
9
|
-
resolveCodeEditorProps
|
|
10
|
-
} from "./chunk-X3OWMTLO.js";
|
|
11
11
|
import {
|
|
12
12
|
fieldRadius
|
|
13
13
|
} from "./chunk-GDN2LUTZ.js";
|
|
@@ -178,4 +178,4 @@ var CodeEditor = (componentProps) => {
|
|
|
178
178
|
export {
|
|
179
179
|
CodeEditor
|
|
180
180
|
};
|
|
181
|
-
//# sourceMappingURL=chunk-
|
|
181
|
+
//# sourceMappingURL=chunk-JOQGKXR5.js.map
|
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
SheetContent,
|
|
3
3
|
SheetFooter,
|
|
4
4
|
SheetHeader
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-QSZYQZZP.js";
|
|
6
6
|
import {
|
|
7
7
|
muiColor
|
|
8
8
|
} from "./chunk-7ZPUN7TV.js";
|
|
@@ -45,6 +45,7 @@ var SheetBody = (props) => {
|
|
|
45
45
|
onFocus,
|
|
46
46
|
onBlur,
|
|
47
47
|
testId,
|
|
48
|
+
titleId,
|
|
48
49
|
isDragging,
|
|
49
50
|
isVerticalSheet,
|
|
50
51
|
isDraggableVariant,
|
|
@@ -82,6 +83,7 @@ var SheetBody = (props) => {
|
|
|
82
83
|
showHandle: showHandle && isVerticalSheet,
|
|
83
84
|
isDraggable: isDraggableVariant && isVerticalSheet,
|
|
84
85
|
onDragStart,
|
|
86
|
+
titleId,
|
|
85
87
|
dataTestId: `${testId}-header`,
|
|
86
88
|
children: header
|
|
87
89
|
}
|
|
@@ -96,4 +98,4 @@ var SheetBody = (props) => {
|
|
|
96
98
|
export {
|
|
97
99
|
SheetBody
|
|
98
100
|
};
|
|
99
|
-
//# sourceMappingURL=chunk-
|
|
101
|
+
//# sourceMappingURL=chunk-JQGDKWFH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/data-display/Sheet/Sheet.body.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport CircularProgress from '@mui/material/CircularProgress/index.js';\nimport React from 'react';\n\nimport { SheetContent, SheetFooter, SheetHeader } from './Sheet.parts';\nimport type { SheetProps } from './Sheet.types';\nimport { sxRem } from '../../../tokens/relative';\nimport { muiColor } from '../../../tokens/scales';\n\nexport interface SheetBodyProps extends Pick<\n SheetProps,\n | 'title'\n | 'description'\n | 'showCloseButton'\n | 'closeLabel'\n | 'showHandle'\n | 'header'\n | 'footer'\n | 'loading'\n | 'color'\n | 'children'\n | 'onClick'\n | 'onFocus'\n | 'onBlur'\n> {\n testId: string;\n /** The title's element id, which a dialog sheet's `aria-labelledby` names. */\n titleId?: string;\n isDragging: boolean;\n isVerticalSheet: boolean;\n isDraggableVariant: boolean;\n onClose: () => void;\n onDragStart: (e: React.MouseEvent | React.TouchEvent) => void;\n}\n\n/**\n * The header earns its place if it would show anything at all — a grab handle,\n * either piece of text, the close button, or caller-supplied content.\n */\nconst needsHeader = (props: SheetBodyProps) =>\n Boolean(\n props.showHandle ||\n props.title ||\n props.description ||\n props.showCloseButton ||\n props.header,\n );\n\n/** The centred spinner shown in place of the children while `loading`. */\nconst SheetLoading: React.FC<Pick<SheetBodyProps, 'color'>> = ({ color }) => (\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n minHeight: sxRem(200),\n }}\n >\n <CircularProgress color={color === undefined ? undefined : muiColor(color, 'inherit')} />\n </Box>\n);\n\n/**\n * What the sheet contains, independent of which drawer is carrying it. The\n * swipeable and plain branches render exactly this — they differ only in the\n * MUI component and its swipe props, so the contents are built once.\n */\nexport const SheetBody: React.FC<SheetBodyProps> = (props) => {\n const {\n title,\n description,\n showCloseButton,\n closeLabel,\n showHandle,\n header,\n footer,\n loading,\n color,\n children,\n onClick,\n onFocus,\n onBlur,\n testId,\n titleId,\n isDragging,\n isVerticalSheet,\n isDraggableVariant,\n onClose,\n onDragStart,\n } = props;\n\n return (\n <Box\n onClick={onClick}\n onFocus={onFocus}\n onBlur={onBlur}\n data-testid={testId}\n sx={{\n // A vertical sheet's panel is a column whose height is its CONTENT, up\n // to the `size` ceiling — so this fills what the panel has rather than\n // asking for a percentage of it, and `minHeight: 0` is what lets it\n // shrink past its content so `SheetContent` scrolls instead of the\n // panel overflowing. A side sheet's panel is full-height already.\n ...(isVerticalSheet ? { flex: '1 1 auto', minHeight: 0 } : { height: '100%' }),\n display: 'flex',\n flexDirection: 'column',\n position: 'relative',\n userSelect: isDragging ? 'none' : 'auto',\n }}\n >\n {needsHeader(props) && (\n <SheetHeader\n title={title}\n description={description}\n showCloseButton={showCloseButton}\n closeLabel={closeLabel}\n onClose={onClose}\n showHandle={showHandle && isVerticalSheet}\n isDraggable={isDraggableVariant && isVerticalSheet}\n onDragStart={onDragStart}\n titleId={titleId}\n dataTestId={`${testId}-header`}\n >\n {header}\n </SheetHeader>\n )}\n\n <SheetContent padded dataTestId={`${testId}-content`}>\n {loading ? <SheetLoading color={color} /> : children}\n </SheetContent>\n\n {footer && (\n <SheetFooter sticky divider dataTestId={`${testId}-footer`}>\n {footer}\n </SheetFooter>\n )}\n </Box>\n );\n};\n"],"mappings":";;;;;;;;;;;;;AAAA,OAAO,SAAS;AAChB,OAAO,sBAAsB;AAyDzB,cAkCA,YAlCA;AAnBJ,IAAM,cAAc,CAAC,UACnB;AAAA,EACE,MAAM,cACN,MAAM,SACN,MAAM,eACN,MAAM,mBACN,MAAM;AACR;AAGF,IAAM,eAAwD,CAAC,EAAE,MAAM,MACrE;AAAA,EAAC;AAAA;AAAA,IACC,IAAI;AAAA,MACF,SAAS;AAAA,MACT,gBAAgB;AAAA,MAChB,YAAY;AAAA,MACZ,WAAW,MAAM,GAAG;AAAA,IACtB;AAAA,IAEA,8BAAC,oBAAiB,OAAO,UAAU,SAAY,SAAY,SAAS,OAAO,SAAS,GAAG;AAAA;AACzF;AAQK,IAAM,YAAsC,CAAC,UAAU;AAC5D,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI;AAEJ,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA;AAAA,MACA,eAAa;AAAA,MACb,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAMF,GAAI,kBAAkB,EAAE,MAAM,YAAY,WAAW,EAAE,IAAI,EAAE,QAAQ,OAAO;AAAA,QAC5E,SAAS;AAAA,QACT,eAAe;AAAA,QACf,UAAU;AAAA,QACV,YAAY,aAAa,SAAS;AAAA,MACpC;AAAA,MAEC;AAAA,oBAAY,KAAK,KAChB;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,YAAY,cAAc;AAAA,YAC1B,aAAa,sBAAsB;AAAA,YACnC;AAAA,YACA;AAAA,YACA,YAAY,GAAG,MAAM;AAAA,YAEpB;AAAA;AAAA,QACH;AAAA,QAGF,oBAAC,gBAAa,QAAM,MAAC,YAAY,GAAG,MAAM,YACvC,oBAAU,oBAAC,gBAAa,OAAc,IAAK,UAC9C;AAAA,QAEC,UACC,oBAAC,eAAY,QAAM,MAAC,SAAO,MAAC,YAAY,GAAG,MAAM,WAC9C,kBACH;AAAA;AAAA;AAAA,EAEJ;AAEJ;","names":[]}
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-YNVTUQ5B.js";
|
|
4
4
|
import {
|
|
5
5
|
DataViewsGrid
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-37SNQQ7P.js";
|
|
7
7
|
import {
|
|
8
8
|
viewStateKey
|
|
9
9
|
} from "./chunk-ZOLAYP2D.js";
|
|
@@ -166,4 +166,4 @@ function renderViewDialogs(ctl, fields, columns, views, testIdPrefix, onSaved) {
|
|
|
166
166
|
export {
|
|
167
167
|
DataViewsTableBase
|
|
168
168
|
};
|
|
169
|
-
//# sourceMappingURL=chunk-
|
|
169
|
+
//# sourceMappingURL=chunk-KHDKG7XB.js.map
|
|
@@ -4,6 +4,9 @@ import {
|
|
|
4
4
|
import {
|
|
5
5
|
CategoryPanel
|
|
6
6
|
} from "./chunk-VMTOLAZ5.js";
|
|
7
|
+
import {
|
|
8
|
+
useCategorySelect
|
|
9
|
+
} from "./chunk-RZVUY2MO.js";
|
|
7
10
|
import {
|
|
8
11
|
useCategoryKeyHandler
|
|
9
12
|
} from "./chunk-USJPZ5Q7.js";
|
|
@@ -13,9 +16,6 @@ import {
|
|
|
13
16
|
import {
|
|
14
17
|
CategoryTrigger
|
|
15
18
|
} from "./chunk-GHP5JLL3.js";
|
|
16
|
-
import {
|
|
17
|
-
useCategorySelect
|
|
18
|
-
} from "./chunk-RZVUY2MO.js";
|
|
19
19
|
import {
|
|
20
20
|
METRICS
|
|
21
21
|
} from "./chunk-VPGDYI63.js";
|
|
@@ -155,4 +155,4 @@ function CategorySelect(props) {
|
|
|
155
155
|
export {
|
|
156
156
|
CategorySelect
|
|
157
157
|
};
|
|
158
|
-
//# sourceMappingURL=chunk-
|
|
158
|
+
//# sourceMappingURL=chunk-KMMFN24G.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
DataViewsDisplayPanel
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-6HXNFNOB.js";
|
|
4
4
|
import {
|
|
5
5
|
DataViewsExportMenu
|
|
6
6
|
} from "./chunk-4NG3LTRX.js";
|
|
@@ -143,4 +143,4 @@ function GridToolbar(props) {
|
|
|
143
143
|
export {
|
|
144
144
|
GridToolbar
|
|
145
145
|
};
|
|
146
|
-
//# sourceMappingURL=chunk-
|
|
146
|
+
//# sourceMappingURL=chunk-LV6AD6XC.js.map
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
+
import {
|
|
2
|
+
usePanelChrome
|
|
3
|
+
} from "./chunk-J4UA744J.js";
|
|
1
4
|
import {
|
|
2
5
|
ModalPanelContents,
|
|
3
6
|
modalAriaIds,
|
|
4
7
|
resolveModalContent
|
|
5
8
|
} from "./chunk-EYFDIUVR.js";
|
|
6
|
-
import {
|
|
7
|
-
usePanelChrome
|
|
8
|
-
} from "./chunk-TSMF7K37.js";
|
|
9
9
|
import {
|
|
10
10
|
STYLE_ONLY_PROPS,
|
|
11
11
|
dialogRootStyles
|
|
@@ -179,4 +179,4 @@ var StackedModal = (props) => {
|
|
|
179
179
|
export {
|
|
180
180
|
StackedModal
|
|
181
181
|
};
|
|
182
|
-
//# sourceMappingURL=chunk-
|
|
182
|
+
//# sourceMappingURL=chunk-MWXZXCVX.js.map
|