@12-apps/ui 6.91.0 → 6.92.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/components-catalog.md +2 -2
- package/dist/_internal/components/data-display/Alert/Alert.js +2 -2
- package/dist/_internal/components/data-display/AsyncStateContainer/AsyncStateContainer.js +3 -3
- package/dist/_internal/components/data-display/Badge/Badge.js +2 -2
- package/dist/_internal/components/data-display/CardKit/card-actions-context.js +3 -3
- package/dist/_internal/components/data-display/CardKit/use-remove-confirm.js +4 -4
- package/dist/_internal/components/data-display/Chart/Chart.js +3 -3
- package/dist/_internal/components/data-display/Chart/SpecChart.js +5 -5
- package/dist/_internal/components/data-display/Chart/chart-renderers.js +2 -2
- package/dist/_internal/components/data-display/Chip/Chip.js +3 -3
- package/dist/_internal/components/data-display/Chip/Chip.styles.js +2 -2
- package/dist/_internal/components/data-display/DataGrid/DataGrid.js +2 -2
- package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +20 -20
- package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +26 -26
- 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 +5 -5
- 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 +17 -17
- package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +7 -7
- package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +5 -5
- package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +6 -6
- package/dist/_internal/components/data-display/DataViews/data-views-range-bounds.js +2 -2
- package/dist/_internal/components/data-display/DataViews/data-views-range-calendar.js +1 -1
- package/dist/_internal/components/data-display/DataViews/data-views-range-pill.js +4 -4
- package/dist/_internal/components/data-display/DataViews/data-views-range-summary.js +1 -1
- 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 +1 -1
- package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +4 -4
- package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +1 -1
- package/dist/_internal/components/data-display/DayRuler/DayRuler.en-US.js +1 -1
- package/dist/_internal/components/data-display/DayRuler/DayRuler.js +5 -5
- package/dist/_internal/components/data-display/DayRuler/DayRuler.labels.js +3 -3
- package/dist/_internal/components/data-display/DayRuler/DayRuler.parts.js +9 -4
- package/dist/_internal/components/data-display/DayRuler/DayRuler.pt-BR.js +1 -1
- package/dist/_internal/components/data-display/DayRuler/DayRuler.styles.js +9 -1
- package/dist/_internal/components/data-display/EmptyState/EmptyState.js +2 -2
- package/dist/_internal/components/data-display/FleetMap/FleetBody.js +5 -5
- package/dist/_internal/components/data-display/FleetMap/FleetCanvas.js +4 -4
- package/dist/_internal/components/data-display/FleetMap/FleetMap.js +9 -9
- package/dist/_internal/components/data-display/InteractiveTooltip/InteractiveTooltip.js +2 -2
- package/dist/_internal/components/data-display/Lightbox/Lightbox.js +2 -2
- package/dist/_internal/components/data-display/MapPreview/MapLayers.js +2 -2
- package/dist/_internal/components/data-display/MapPreview/MapPreview.js +3 -3
- package/dist/_internal/components/data-display/RegionMap/RegionMap.js +2 -2
- package/dist/_internal/components/data-display/ScheduleGrid/ScheduleGrid.js +4 -3
- package/dist/_internal/components/data-display/ScheduleGrid/ScheduleGrid.parts.js +3 -2
- package/dist/_internal/components/data-display/ScheduleGrid/schedule-header-host.styles.js +12 -0
- package/dist/_internal/components/data-display/ScheduleGrid/schedule-header-host.styles.js.map +1 -0
- package/dist/_internal/components/data-display/SectionOnboarding/SectionOnboarding.js +3 -3
- package/dist/_internal/components/data-display/index.js +42 -41
- package/dist/_internal/components/feedback/NotificationStatusNotice/NotificationStatusNotice.js +3 -3
- package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.js +5 -5
- package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.overview.js +4 -4
- package/dist/_internal/components/feedback/SequenceResolver/SequenceResolver.parts.js +3 -3
- package/dist/_internal/components/feedback/index.js +6 -6
- package/dist/_internal/components/index.js +60 -59
- package/dist/_internal/components/layout/SettingCard/SettingCard.js +8 -8
- package/dist/_internal/components/layout/SettingCard/SettingCard.parts.js +4 -4
- package/dist/_internal/components/layout/SettingCard/SettingCard.summary.js +7 -7
- package/dist/_internal/components/layout/SettingCard/SettingGrid.js +5 -5
- package/dist/_internal/components/layout/SettingCard/SettingGroup.js +9 -9
- package/dist/_internal/components/layout/SettingCard/SettingSwitch.js +8 -8
- package/dist/_internal/components/layout/SettingCard/SettingToggle.js +9 -9
- package/dist/_internal/components/layout/index.js +12 -12
- package/dist/_internal/components/navigation/SectionNav/SectionNav.bar.js +6 -6
- package/dist/_internal/components/navigation/SectionNav/SectionNav.js +9 -9
- package/dist/_internal/components/navigation/SectionNav/SectionNav.parts.js +3 -3
- package/dist/_internal/components/navigation/SectionNav/SectionNav.primary.js +4 -4
- package/dist/_internal/components/navigation/SectionNav/SectionNav.rail.js +5 -5
- package/dist/_internal/components/navigation/SectionNav/SectionNav.railCreate.js +4 -4
- package/dist/_internal/components/navigation/SectionNav/SectionNav.sheet.js +4 -4
- package/dist/_internal/components/navigation/index.js +9 -9
- package/dist/charts.js +6 -6
- package/dist/{chunk-HC6OZ7QK.js → chunk-3EIRRLCQ.js} +2 -2
- package/dist/{chunk-U2AEM3K4.js → chunk-3PQL2EN5.js} +2 -2
- package/dist/{chunk-7NP2JHGM.js → chunk-3WYEENUH.js} +11 -6
- package/dist/chunk-3WYEENUH.js.map +1 -0
- package/dist/{chunk-M3XJVD5G.js → chunk-5357QUVE.js} +2 -2
- package/dist/{chunk-Z7T4EFEC.js → chunk-5I75WRXT.js} +4 -4
- package/dist/chunk-5MXVKZKZ.js +30 -0
- package/dist/chunk-5MXVKZKZ.js.map +1 -0
- package/dist/{chunk-5E2CRRD4.js → chunk-66VKX6JE.js} +5 -5
- package/dist/{chunk-N5PVD4J5.js → chunk-6DO672AG.js} +7 -7
- package/dist/{chunk-76DX2IMH.js → chunk-7F6D73NL.js} +2 -2
- package/dist/{chunk-SNWCT6JN.js → chunk-AMIUZRDQ.js} +3 -3
- package/dist/{chunk-A3DDEKLV.js → chunk-BOADHYTA.js} +2 -2
- package/dist/{chunk-JKZPGCN7.js → chunk-BXZMV6QC.js} +12 -12
- package/dist/{chunk-JH2XLVWM.js → chunk-CW5Z67NA.js} +2 -2
- package/dist/{chunk-3JZ3KEQQ.js → chunk-CZVAVX5L.js} +4 -4
- package/dist/{chunk-O3OU3ED7.js → chunk-D7R6SRJB.js} +3 -3
- package/dist/{chunk-O3OU3ED7.js.map → chunk-D7R6SRJB.js.map} +1 -1
- package/dist/{chunk-DVX4HDNP.js → chunk-DBPFKGXX.js} +2 -2
- package/dist/{chunk-QN7FVZQD.js → chunk-DHAXUVMR.js} +4 -4
- package/dist/{chunk-XCUHGPPZ.js → chunk-DTZOP4ZR.js} +2 -2
- package/dist/{chunk-BLZDSCIZ.js → chunk-DYHOBKPU.js} +6 -6
- package/dist/{chunk-MX2RF34M.js → chunk-E73C73UD.js} +15 -7
- package/dist/chunk-E73C73UD.js.map +1 -0
- package/dist/{chunk-42D7KBDH.js → chunk-EOIRU62W.js} +2 -2
- package/dist/{chunk-HNW7IZPV.js → chunk-EZBBLLEU.js} +5 -5
- package/dist/{chunk-HNW7IZPV.js.map → chunk-EZBBLLEU.js.map} +1 -1
- package/dist/{chunk-K3IB7S7Q.js → chunk-F2ZUUEXC.js} +3 -2
- package/dist/{chunk-K3IB7S7Q.js.map → chunk-F2ZUUEXC.js.map} +1 -1
- package/dist/{chunk-2M3W6ACW.js → chunk-FAUNQ3FS.js} +3 -3
- package/dist/{chunk-FORAVDJF.js → chunk-FC7UCFFA.js} +35 -7
- package/dist/chunk-FC7UCFFA.js.map +1 -0
- package/dist/{chunk-PJNIJIE6.js → chunk-FQNDJITD.js} +2 -2
- package/dist/{chunk-ZIHSCBMN.js → chunk-FWTVIRZZ.js} +4 -4
- package/dist/{chunk-L3PDY7CJ.js → chunk-FYUNROLW.js} +2 -2
- package/dist/{chunk-KJKD6Y6V.js → chunk-GBB23QLL.js} +3 -3
- package/dist/{chunk-MICX23P4.js → chunk-HRES2S3Q.js} +85 -8
- package/dist/chunk-HRES2S3Q.js.map +1 -0
- package/dist/{chunk-XILMDEGZ.js → chunk-IEUVP6UV.js} +3 -3
- package/dist/{chunk-3IDL7NK7.js → chunk-K2VDRODL.js} +2 -2
- package/dist/{chunk-K3PMMW23.js → chunk-K6VEN5VN.js} +4 -4
- package/dist/{chunk-UKUGSU3Y.js → chunk-L4V7FZJI.js} +2 -2
- package/dist/{chunk-24HHUCWB.js → chunk-LDCZPZPD.js} +2 -2
- package/dist/{chunk-42TOCPXB.js → chunk-LXIPBHNJ.js} +5 -5
- package/dist/{chunk-ILJ3FXIC.js → chunk-MM3QESLI.js} +2 -2
- package/dist/{chunk-PGANINQD.js → chunk-NI67M453.js} +5 -5
- package/dist/{chunk-JN2IANXD.js → chunk-OCGPOACB.js} +2 -2
- package/dist/{chunk-RDCIST7P.js → chunk-OCT5VCLP.js} +2 -2
- package/dist/{chunk-G2PVUPE7.js → chunk-OJZLFFG4.js} +41 -3
- package/dist/chunk-OJZLFFG4.js.map +1 -0
- package/dist/{chunk-F7LBTMCA.js → chunk-P53ANKZV.js} +4 -4
- package/dist/{chunk-HMEGQKNQ.js → chunk-PCQ5JWLF.js} +15 -7
- package/dist/chunk-PCQ5JWLF.js.map +1 -0
- package/dist/{chunk-QVDEGBME.js → chunk-PEAUGQKU.js} +4 -4
- package/dist/{chunk-HS662RLW.js → chunk-RZWU2KYP.js} +2 -2
- package/dist/{chunk-U2QXQ7D4.js → chunk-S2VZUBM7.js} +4 -4
- package/dist/{chunk-HOPRZEBM.js → chunk-SKIAWOUC.js} +3 -3
- package/dist/{chunk-WCF56ZCD.js → chunk-TMINUTQQ.js} +2 -2
- package/dist/{chunk-ACM3HHZY.js → chunk-UDBOGSFO.js} +68 -2
- package/dist/chunk-UDBOGSFO.js.map +1 -0
- package/dist/{chunk-MZAYIG2I.js → chunk-VCJ72ODU.js} +2 -2
- package/dist/{chunk-YGQM6GFQ.js → chunk-VHE7UEG5.js} +2 -2
- package/dist/{chunk-QHIWV55K.js → chunk-VWRXSBT2.js} +2 -2
- package/dist/chunk-WLDP7C4K.js +44 -0
- package/dist/chunk-WLDP7C4K.js.map +1 -0
- package/dist/{chunk-TSEBMVYY.js → chunk-X2GWR75Q.js} +3 -3
- package/dist/{chunk-NKEFH3RS.js → chunk-XNAI7QGU.js} +2 -2
- package/dist/{chunk-L6JAALMX.js → chunk-XRV4QFEQ.js} +3 -3
- package/dist/{chunk-WH3LUOCQ.js → chunk-YE7M7URT.js} +2 -2
- package/dist/{chunk-DA3D5X5Z.js → chunk-YVDNCV2D.js} +6 -6
- package/dist/{chunk-G3JFESKD.js → chunk-Z5WUSI47.js} +6 -6
- package/dist/{chunk-5HADIIWN.js → chunk-ZDAAHCIS.js} +3 -3
- package/dist/{chunk-D3OXTS7Y.js → chunk-ZHCZOPKE.js} +3 -2
- package/dist/{chunk-D3OXTS7Y.js.map → chunk-ZHCZOPKE.js.map} +1 -1
- package/dist/{chunk-4KWDNGMA.js → chunk-ZVHHFLYY.js} +3 -3
- package/dist/data-display/Alert.js +2 -2
- package/dist/data-display/AsyncStateContainer.js +3 -3
- package/dist/data-display/Badge.js +2 -2
- package/dist/data-display/CardKit.js +7 -7
- package/dist/data-display/Chart.js +6 -6
- package/dist/data-display/Chip.js +3 -3
- package/dist/data-display/DataGrid.js +2 -2
- package/dist/data-display/DataViews.js +35 -35
- package/dist/data-display/DayRuler.js +7 -7
- package/dist/data-display/EmptyState.js +2 -2
- package/dist/data-display/FleetMap.js +9 -9
- package/dist/data-display/InteractiveTooltip.js +2 -2
- package/dist/data-display/Lightbox.js +2 -2
- package/dist/data-display/MapPreview.js +3 -3
- package/dist/data-display/RegionMap.js +2 -2
- package/dist/data-display/ScheduleGrid.js +4 -3
- package/dist/data-display/SectionOnboarding.js +3 -3
- package/dist/feedback/NotificationStatusNotice.js +3 -3
- package/dist/feedback/SequenceResolver.js +5 -5
- package/dist/layout/SettingCard.js +12 -12
- package/dist/navigation/SectionNav.js +9 -9
- package/dist/types/components/data-display/DataViews/data-views-range-bounds.d.ts +6 -1
- package/dist/types/components/data-display/DataViews/data-views-range-bounds.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-range-calendar.d.ts +13 -1
- package/dist/types/components/data-display/DataViews/data-views-range-calendar.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-range-pill.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-range-summary.d.ts +4 -5
- package/dist/types/components/data-display/DataViews/data-views-range-summary.d.ts.map +1 -1
- package/dist/types/components/data-display/DayRuler/DayRuler.d.ts.map +1 -1
- package/dist/types/components/data-display/DayRuler/DayRuler.en-US.d.ts.map +1 -1
- package/dist/types/components/data-display/DayRuler/DayRuler.labels.d.ts +2 -0
- package/dist/types/components/data-display/DayRuler/DayRuler.labels.d.ts.map +1 -1
- package/dist/types/components/data-display/DayRuler/DayRuler.parts.d.ts +13 -1
- package/dist/types/components/data-display/DayRuler/DayRuler.parts.d.ts.map +1 -1
- package/dist/types/components/data-display/DayRuler/DayRuler.pt-BR.d.ts.map +1 -1
- package/dist/types/components/data-display/DayRuler/DayRuler.styles.d.ts +16 -0
- package/dist/types/components/data-display/DayRuler/DayRuler.styles.d.ts.map +1 -1
- package/dist/types/components/data-display/DayRuler/DayRuler.types.d.ts +44 -1
- package/dist/types/components/data-display/DayRuler/DayRuler.types.d.ts.map +1 -1
- package/dist/types/components/data-display/DayRuler/index.d.ts +1 -1
- package/dist/types/components/data-display/DayRuler/index.d.ts.map +1 -1
- package/dist/types/components/data-display/ScheduleGrid/ScheduleGrid.parts.d.ts +3 -1
- package/dist/types/components/data-display/ScheduleGrid/ScheduleGrid.parts.d.ts.map +1 -1
- package/dist/types/components/data-display/ScheduleGrid/ScheduleGrid.types.d.ts +12 -0
- package/dist/types/components/data-display/ScheduleGrid/ScheduleGrid.types.d.ts.map +1 -1
- package/dist/types/components/data-display/ScheduleGrid/schedule-header-host.styles.d.ts +16 -0
- package/dist/types/components/data-display/ScheduleGrid/schedule-header-host.styles.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/components/data-display/DataViews/RESPONSIVE-BEHAVIOUR.md +8 -4
- package/src/components/data-display/DataViews/data-views-range-bounds.tsx +57 -3
- package/src/components/data-display/DataViews/data-views-range-calendar.tsx +122 -8
- package/src/components/data-display/DataViews/data-views-range-pill.tsx +5 -0
- package/src/components/data-display/DataViews/data-views-range-summary.tsx +9 -22
- package/src/components/data-display/DayRuler/DayRuler.en-US.ts +1 -0
- package/src/components/data-display/DayRuler/DayRuler.labels.ts +2 -0
- package/src/components/data-display/DayRuler/DayRuler.md +3 -2
- package/src/components/data-display/DayRuler/DayRuler.parts.tsx +120 -1
- package/src/components/data-display/DayRuler/DayRuler.pt-BR.ts +1 -0
- package/src/components/data-display/DayRuler/DayRuler.styles.ts +50 -1
- package/src/components/data-display/DayRuler/DayRuler.tsx +10 -1
- package/src/components/data-display/DayRuler/DayRuler.types.ts +30 -1
- package/src/components/data-display/DayRuler/index.ts +2 -0
- package/src/components/data-display/ScheduleGrid/ScheduleGrid.md +3 -2
- package/src/components/data-display/ScheduleGrid/ScheduleGrid.parts.tsx +18 -3
- package/src/components/data-display/ScheduleGrid/ScheduleGrid.tsx +1 -1
- package/src/components/data-display/ScheduleGrid/ScheduleGrid.types.ts +12 -0
- package/src/components/data-display/ScheduleGrid/schedule-header-host.styles.ts +35 -0
- package/dist/chunk-7NP2JHGM.js.map +0 -1
- package/dist/chunk-ACM3HHZY.js.map +0 -1
- package/dist/chunk-FORAVDJF.js.map +0 -1
- package/dist/chunk-G2PVUPE7.js.map +0 -1
- package/dist/chunk-HMEGQKNQ.js.map +0 -1
- package/dist/chunk-J2AVWIMM.js +0 -60
- package/dist/chunk-J2AVWIMM.js.map +0 -1
- package/dist/chunk-MICX23P4.js.map +0 -1
- package/dist/chunk-MX2RF34M.js.map +0 -1
- /package/dist/{chunk-HC6OZ7QK.js.map → chunk-3EIRRLCQ.js.map} +0 -0
- /package/dist/{chunk-U2AEM3K4.js.map → chunk-3PQL2EN5.js.map} +0 -0
- /package/dist/{chunk-M3XJVD5G.js.map → chunk-5357QUVE.js.map} +0 -0
- /package/dist/{chunk-Z7T4EFEC.js.map → chunk-5I75WRXT.js.map} +0 -0
- /package/dist/{chunk-5E2CRRD4.js.map → chunk-66VKX6JE.js.map} +0 -0
- /package/dist/{chunk-N5PVD4J5.js.map → chunk-6DO672AG.js.map} +0 -0
- /package/dist/{chunk-76DX2IMH.js.map → chunk-7F6D73NL.js.map} +0 -0
- /package/dist/{chunk-SNWCT6JN.js.map → chunk-AMIUZRDQ.js.map} +0 -0
- /package/dist/{chunk-A3DDEKLV.js.map → chunk-BOADHYTA.js.map} +0 -0
- /package/dist/{chunk-JKZPGCN7.js.map → chunk-BXZMV6QC.js.map} +0 -0
- /package/dist/{chunk-JH2XLVWM.js.map → chunk-CW5Z67NA.js.map} +0 -0
- /package/dist/{chunk-3JZ3KEQQ.js.map → chunk-CZVAVX5L.js.map} +0 -0
- /package/dist/{chunk-DVX4HDNP.js.map → chunk-DBPFKGXX.js.map} +0 -0
- /package/dist/{chunk-QN7FVZQD.js.map → chunk-DHAXUVMR.js.map} +0 -0
- /package/dist/{chunk-XCUHGPPZ.js.map → chunk-DTZOP4ZR.js.map} +0 -0
- /package/dist/{chunk-BLZDSCIZ.js.map → chunk-DYHOBKPU.js.map} +0 -0
- /package/dist/{chunk-42D7KBDH.js.map → chunk-EOIRU62W.js.map} +0 -0
- /package/dist/{chunk-2M3W6ACW.js.map → chunk-FAUNQ3FS.js.map} +0 -0
- /package/dist/{chunk-PJNIJIE6.js.map → chunk-FQNDJITD.js.map} +0 -0
- /package/dist/{chunk-ZIHSCBMN.js.map → chunk-FWTVIRZZ.js.map} +0 -0
- /package/dist/{chunk-L3PDY7CJ.js.map → chunk-FYUNROLW.js.map} +0 -0
- /package/dist/{chunk-KJKD6Y6V.js.map → chunk-GBB23QLL.js.map} +0 -0
- /package/dist/{chunk-XILMDEGZ.js.map → chunk-IEUVP6UV.js.map} +0 -0
- /package/dist/{chunk-3IDL7NK7.js.map → chunk-K2VDRODL.js.map} +0 -0
- /package/dist/{chunk-K3PMMW23.js.map → chunk-K6VEN5VN.js.map} +0 -0
- /package/dist/{chunk-UKUGSU3Y.js.map → chunk-L4V7FZJI.js.map} +0 -0
- /package/dist/{chunk-24HHUCWB.js.map → chunk-LDCZPZPD.js.map} +0 -0
- /package/dist/{chunk-42TOCPXB.js.map → chunk-LXIPBHNJ.js.map} +0 -0
- /package/dist/{chunk-ILJ3FXIC.js.map → chunk-MM3QESLI.js.map} +0 -0
- /package/dist/{chunk-PGANINQD.js.map → chunk-NI67M453.js.map} +0 -0
- /package/dist/{chunk-JN2IANXD.js.map → chunk-OCGPOACB.js.map} +0 -0
- /package/dist/{chunk-RDCIST7P.js.map → chunk-OCT5VCLP.js.map} +0 -0
- /package/dist/{chunk-F7LBTMCA.js.map → chunk-P53ANKZV.js.map} +0 -0
- /package/dist/{chunk-QVDEGBME.js.map → chunk-PEAUGQKU.js.map} +0 -0
- /package/dist/{chunk-HS662RLW.js.map → chunk-RZWU2KYP.js.map} +0 -0
- /package/dist/{chunk-U2QXQ7D4.js.map → chunk-S2VZUBM7.js.map} +0 -0
- /package/dist/{chunk-HOPRZEBM.js.map → chunk-SKIAWOUC.js.map} +0 -0
- /package/dist/{chunk-WCF56ZCD.js.map → chunk-TMINUTQQ.js.map} +0 -0
- /package/dist/{chunk-MZAYIG2I.js.map → chunk-VCJ72ODU.js.map} +0 -0
- /package/dist/{chunk-YGQM6GFQ.js.map → chunk-VHE7UEG5.js.map} +0 -0
- /package/dist/{chunk-QHIWV55K.js.map → chunk-VWRXSBT2.js.map} +0 -0
- /package/dist/{chunk-TSEBMVYY.js.map → chunk-X2GWR75Q.js.map} +0 -0
- /package/dist/{chunk-NKEFH3RS.js.map → chunk-XNAI7QGU.js.map} +0 -0
- /package/dist/{chunk-L6JAALMX.js.map → chunk-XRV4QFEQ.js.map} +0 -0
- /package/dist/{chunk-WH3LUOCQ.js.map → chunk-YE7M7URT.js.map} +0 -0
- /package/dist/{chunk-DA3D5X5Z.js.map → chunk-YVDNCV2D.js.map} +0 -0
- /package/dist/{chunk-G3JFESKD.js.map → chunk-Z5WUSI47.js.map} +0 -0
- /package/dist/{chunk-5HADIIWN.js.map → chunk-ZDAAHCIS.js.map} +0 -0
- /package/dist/{chunk-4KWDNGMA.js.map → chunk-ZVHHFLYY.js.map} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/ScheduleGrid/ScheduleGrid.tsx"],"sourcesContent":["'use client';\n\nimport Box from '@mui/material/Box/index.js';\nimport React, { useEffect, useRef } from 'react';\n\nimport { resolveLabels } from '../../../utils/resolve-labels';\nimport { EN_US_SCHEDULE_GRID_LABELS } from './ScheduleGrid.en-US';\nimport { focusables, handleGridKey } from './ScheduleGrid.keyboard';\nimport { GridBody, GridHeader, type CellAbilities } from './ScheduleGrid.parts';\nimport { frameSx, headerSx, rootSx, rowGridSx, scrollSx, SR_ONLY_SX } from './ScheduleGrid.styles';\nimport type { ScheduleGridProps } from './ScheduleGrid.types';\nimport { useAnnouncer } from './useAnnouncer';\nimport { useGridDrag } from './useGridDrag';\nimport { useScrollToDay } from './useScrollToDay';\nimport { useSidewaysScroll } from './useSidewaysScroll';\n\n/**\n * After a keyboard move the host re-renders the block in its new cell (a new\n * element): focus follows it there. After a create on an empty day's \"+\" (Enter,\n * Space or a click) the \"+\" gives way to the host's new block: focus moves to\n * it, so the arrows go on from there — after a click without scrolling. A host\n * that refused keeps focus where it was; the next key or pointer press forgets\n * the wait.\n */\ntype FollowTarget = { kind: 'move'; id: string; day: number } | { kind: 'create'; row: string; day: number; pointer: boolean };\n\n/** The empty day's \"+\" an event landed on, if any. */\nfunction plusOf(target: EventTarget): HTMLElement | null {\n if (!(target instanceof HTMLElement)) return null;\n const plus = target.closest<HTMLElement>('button[data-sg-focus]');\n return plus && plus.dataset.sgBlock === undefined && plus.dataset.sgRow !== undefined ? plus : null;\n}\n\nfunction useFollowFocus(rootRef: React.RefObject<HTMLElement | null>) {\n const pending = useRef<FollowTarget | null>(null);\n useEffect(() => {\n const follow = pending.current;\n if (!follow || !rootRef.current) return;\n const block = focusables(rootRef.current).find((el) =>\n Number(el.dataset.sgDay) !== follow.day || el.dataset.sgBlock === undefined\n ? false\n : follow.kind === 'move'\n ? el.dataset.sgBlock === follow.id\n : el.dataset.sgRow === follow.row,\n );\n if (!block) return;\n // After a click the cell stays where the pointer left it: no scroll at all (FUT-3825 R1).\n block.focus(follow.kind === 'create' && follow.pointer ? { preventScroll: true } : undefined);\n pending.current = null;\n });\n return {\n follow: (id: string, day: number): void => {\n pending.current = { kind: 'move', id, day };\n },\n /** A key that presses an empty day's \"+\" (its click creates there). */\n followCreate: (event: React.KeyboardEvent): void => {\n const plus = plusOf(event.target);\n if ((event.key !== 'Enter' && event.key !== ' ') || !plus?.dataset.sgRow) return;\n pending.current = { kind: 'create', row: plus.dataset.sgRow, day: Number(plus.dataset.sgDay), pointer: false };\n },\n /** A pointer click on an empty day's \"+\" (a key's click, `detail` 0, is the key's). */\n followClickCreate: (event: React.MouseEvent): void => {\n const plus = plusOf(event.target);\n if (event.detail === 0 || !plus?.dataset.sgRow) return;\n pending.current = { kind: 'create', row: plus.dataset.sgRow, day: Number(plus.dataset.sgDay), pointer: true };\n },\n forget: (): void => {\n pending.current = null;\n },\n };\n}\n\n/** The body shows the days' rows: not the skeleton, the host's error or its empty state. */\nfunction daysDrawn(props: ScheduleGridProps, rowCount: number): boolean {\n return !props.loading && !props.error && rowCount > 0;\n}\n\nfunction abilitiesOf(props: ScheduleGridProps): CellAbilities {\n const open = !props.readOnly && !props.loading;\n return { create: open && Boolean(props.onCreate), copy: open && Boolean(props.onCopy), move: open && Boolean(props.onMove) };\n}\n\n/**\n * People (or resources) as rows, days as columns, and blocks with a start and\n * an end in the cells — the week grid of a staff schedule (FUT-3825).\n *\n * Click an empty cell to create on that day; drag across empty cells of a row\n * to create on each; drag a block's edge grip along its row to copy it; drag\n * its middle to move it to another day or row; click it to open it. Touch\n * scrolls and never drags. Every gesture has a keyboard twin.\n *\n * The grid reports gestures; the hours, limits and refusals are the host's.\n */\nexport function ScheduleGrid(props: ScheduleGridProps): React.JSX.Element {\n const { columns, groups, cell, onCreate, onCopy, onMove } = props;\n const testId = props.dataTestId ?? 'schedule-grid';\n const labels = resolveLabels(EN_US_SCHEDULE_GRID_LABELS, props.labels);\n const rootRef = useRef<HTMLDivElement | null>(null);\n const { text: announcement, say } = useAnnouncer();\n const focus = useFollowFocus(rootRef);\n const dragApi = useGridDrag(rootRef, { cell, onCreate, onCopy, onMove });\n const can = abilitiesOf(props);\n const rows = groups.flatMap((group) => group.rows);\n const hasTotal = props.totalLabel !== undefined || rows.some((row) => row.total !== undefined);\n const rowSx = rowGridSx(columns.length, hasTotal);\n\n const headRef = useRef<HTMLDivElement | null>(null);\n const bodyRef = useRef<HTMLDivElement | null>(null);\n const sideways = useSidewaysScroll(headRef, bodyRef);\n useScrollToDay(headRef, bodyRef, { day: props.scrollToDay, dayCount: columns.length, drawn: daysDrawn(props, rows.length) }, sideways.follow);\n\n const onKeyDown = (event: React.KeyboardEvent): void => {\n sideways.release();\n focus.forget();\n if (!rootRef.current) return;\n if (can.create) focus.followCreate(event);\n handleGridKey(event, { root: rootRef.current, rows, columns, cell, can, onCopy, onMove, labels, say, follow: focus.follow });\n };\n\n return (\n <Box sx={rootSx} data-testid={testId}>\n <Box\n ref={rootRef}\n role=\"table\"\n aria-label={props['aria-label']}\n aria-busy={props.loading || undefined}\n aria-description={props.loading ? labels.loading : undefined}\n sx={frameSx(columns.length, hasTotal)}\n onKeyDown={onKeyDown}\n onPointerDownCapture={focus.forget}\n onClickCapture={can.create ? focus.followClickCreate : undefined}\n >\n {/* The header row sits outside the sideways scroller, so it sticks to the page; it follows the days sideways. */}\n <Box ref={headRef} role=\"none\" sx={headerSx(props.stickyTop ?? 0)} data-sg-head=\"\" data-testid={`${testId}-head`} onWheel={sideways.forwardWheel}>\n <GridHeader columns={columns} totalLabel={hasTotal ? (props.totalLabel ?? '') : undefined} rowSx={rowSx} testId={testId} />\n </Box>\n <Box ref={bodyRef} role=\"none\" sx={scrollSx} data-sg-scroll=\"\" data-testid={`${testId}-scroll`} onScroll={sideways.follow}\n onFocus={sideways.bringOut}\n onPointerDownCapture={sideways.press}\n >\n <GridBody grid={props} rows={rows} rowSx={rowSx} hasTotal={hasTotal} can={can} dragApi={dragApi} labels={labels} testId={testId} />\n </Box>\n </Box>\n <Box sx={SR_ONLY_SX} aria-live=\"polite\" role=\"status\" data-testid={`${testId}-live`}>\n {announcement}\n </Box>\n </Box>\n );\n}\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../src/components/data-display/ScheduleGrid/ScheduleGrid.tsx"],"sourcesContent":["'use client';\n\nimport Box from '@mui/material/Box/index.js';\nimport React, { useEffect, useRef } from 'react';\n\nimport { resolveLabels } from '../../../utils/resolve-labels';\nimport { EN_US_SCHEDULE_GRID_LABELS } from './ScheduleGrid.en-US';\nimport { focusables, handleGridKey } from './ScheduleGrid.keyboard';\nimport { GridBody, GridHeader, type CellAbilities } from './ScheduleGrid.parts';\nimport { frameSx, headerSx, rootSx, rowGridSx, scrollSx, SR_ONLY_SX } from './ScheduleGrid.styles';\nimport type { ScheduleGridProps } from './ScheduleGrid.types';\nimport { useAnnouncer } from './useAnnouncer';\nimport { useGridDrag } from './useGridDrag';\nimport { useScrollToDay } from './useScrollToDay';\nimport { useSidewaysScroll } from './useSidewaysScroll';\n\n/**\n * After a keyboard move the host re-renders the block in its new cell (a new\n * element): focus follows it there. After a create on an empty day's \"+\" (Enter,\n * Space or a click) the \"+\" gives way to the host's new block: focus moves to\n * it, so the arrows go on from there — after a click without scrolling. A host\n * that refused keeps focus where it was; the next key or pointer press forgets\n * the wait.\n */\ntype FollowTarget = { kind: 'move'; id: string; day: number } | { kind: 'create'; row: string; day: number; pointer: boolean };\n\n/** The empty day's \"+\" an event landed on, if any. */\nfunction plusOf(target: EventTarget): HTMLElement | null {\n if (!(target instanceof HTMLElement)) return null;\n const plus = target.closest<HTMLElement>('button[data-sg-focus]');\n return plus && plus.dataset.sgBlock === undefined && plus.dataset.sgRow !== undefined ? plus : null;\n}\n\nfunction useFollowFocus(rootRef: React.RefObject<HTMLElement | null>) {\n const pending = useRef<FollowTarget | null>(null);\n useEffect(() => {\n const follow = pending.current;\n if (!follow || !rootRef.current) return;\n const block = focusables(rootRef.current).find((el) =>\n Number(el.dataset.sgDay) !== follow.day || el.dataset.sgBlock === undefined\n ? false\n : follow.kind === 'move'\n ? el.dataset.sgBlock === follow.id\n : el.dataset.sgRow === follow.row,\n );\n if (!block) return;\n // After a click the cell stays where the pointer left it: no scroll at all (FUT-3825 R1).\n block.focus(follow.kind === 'create' && follow.pointer ? { preventScroll: true } : undefined);\n pending.current = null;\n });\n return {\n follow: (id: string, day: number): void => {\n pending.current = { kind: 'move', id, day };\n },\n /** A key that presses an empty day's \"+\" (its click creates there). */\n followCreate: (event: React.KeyboardEvent): void => {\n const plus = plusOf(event.target);\n if ((event.key !== 'Enter' && event.key !== ' ') || !plus?.dataset.sgRow) return;\n pending.current = { kind: 'create', row: plus.dataset.sgRow, day: Number(plus.dataset.sgDay), pointer: false };\n },\n /** A pointer click on an empty day's \"+\" (a key's click, `detail` 0, is the key's). */\n followClickCreate: (event: React.MouseEvent): void => {\n const plus = plusOf(event.target);\n if (event.detail === 0 || !plus?.dataset.sgRow) return;\n pending.current = { kind: 'create', row: plus.dataset.sgRow, day: Number(plus.dataset.sgDay), pointer: true };\n },\n forget: (): void => {\n pending.current = null;\n },\n };\n}\n\n/** The body shows the days' rows: not the skeleton, the host's error or its empty state. */\nfunction daysDrawn(props: ScheduleGridProps, rowCount: number): boolean {\n return !props.loading && !props.error && rowCount > 0;\n}\n\nfunction abilitiesOf(props: ScheduleGridProps): CellAbilities {\n const open = !props.readOnly && !props.loading;\n return { create: open && Boolean(props.onCreate), copy: open && Boolean(props.onCopy), move: open && Boolean(props.onMove) };\n}\n\n/**\n * People (or resources) as rows, days as columns, and blocks with a start and\n * an end in the cells — the week grid of a staff schedule (FUT-3825).\n *\n * Click an empty cell to create on that day; drag across empty cells of a row\n * to create on each; drag a block's edge grip along its row to copy it; drag\n * its middle to move it to another day or row; click it to open it. Touch\n * scrolls and never drags. Every gesture has a keyboard twin.\n *\n * The grid reports gestures; the hours, limits and refusals are the host's.\n */\nexport function ScheduleGrid(props: ScheduleGridProps): React.JSX.Element {\n const { columns, groups, cell, onCreate, onCopy, onMove } = props;\n const testId = props.dataTestId ?? 'schedule-grid';\n const labels = resolveLabels(EN_US_SCHEDULE_GRID_LABELS, props.labels);\n const rootRef = useRef<HTMLDivElement | null>(null);\n const { text: announcement, say } = useAnnouncer();\n const focus = useFollowFocus(rootRef);\n const dragApi = useGridDrag(rootRef, { cell, onCreate, onCopy, onMove });\n const can = abilitiesOf(props);\n const rows = groups.flatMap((group) => group.rows);\n const hasTotal = props.totalLabel !== undefined || rows.some((row) => row.total !== undefined);\n const rowSx = rowGridSx(columns.length, hasTotal);\n\n const headRef = useRef<HTMLDivElement | null>(null);\n const bodyRef = useRef<HTMLDivElement | null>(null);\n const sideways = useSidewaysScroll(headRef, bodyRef);\n useScrollToDay(headRef, bodyRef, { day: props.scrollToDay, dayCount: columns.length, drawn: daysDrawn(props, rows.length) }, sideways.follow);\n\n const onKeyDown = (event: React.KeyboardEvent): void => {\n sideways.release();\n focus.forget();\n if (!rootRef.current) return;\n if (can.create) focus.followCreate(event);\n handleGridKey(event, { root: rootRef.current, rows, columns, cell, can, onCopy, onMove, labels, say, follow: focus.follow });\n };\n\n return (\n <Box sx={rootSx} data-testid={testId}>\n <Box\n ref={rootRef}\n role=\"table\"\n aria-label={props['aria-label']}\n aria-busy={props.loading || undefined}\n aria-description={props.loading ? labels.loading : undefined}\n sx={frameSx(columns.length, hasTotal)}\n onKeyDown={onKeyDown}\n onPointerDownCapture={focus.forget}\n onClickCapture={can.create ? focus.followClickCreate : undefined}\n >\n {/* The header row sits outside the sideways scroller, so it sticks to the page; it follows the days sideways. */}\n <Box ref={headRef} role=\"none\" sx={headerSx(props.stickyTop ?? 0)} data-sg-head=\"\" data-testid={`${testId}-head`} onWheel={sideways.forwardWheel}>\n <GridHeader columns={columns} totalLabel={hasTotal ? (props.totalLabel ?? '') : undefined} corner={props.corner} rowSx={rowSx} testId={testId} />\n </Box>\n <Box ref={bodyRef} role=\"none\" sx={scrollSx} data-sg-scroll=\"\" data-testid={`${testId}-scroll`} onScroll={sideways.follow}\n onFocus={sideways.bringOut}\n onPointerDownCapture={sideways.press}\n >\n <GridBody grid={props} rows={rows} rowSx={rowSx} hasTotal={hasTotal} can={can} dragApi={dragApi} labels={labels} testId={testId} />\n </Box>\n </Box>\n <Box sx={SR_ONLY_SX} aria-live=\"polite\" role=\"status\" data-testid={`${testId}-live`}>\n {announcement}\n </Box>\n </Box>\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
useCardActions
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-FQNDJITD.js";
|
|
4
4
|
import {
|
|
5
5
|
ConfirmActionDialog
|
|
6
6
|
} from "./chunk-7W5X3KQ2.js";
|
|
@@ -50,4 +50,4 @@ function useRemoveConfirm({
|
|
|
50
50
|
export {
|
|
51
51
|
useRemoveConfirm
|
|
52
52
|
};
|
|
53
|
-
//# sourceMappingURL=chunk-
|
|
53
|
+
//# sourceMappingURL=chunk-DBPFKGXX.js.map
|
|
@@ -1,6 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
chipKeyAction
|
|
3
|
-
} from "./chunk-BF4FYOAR.js";
|
|
4
1
|
import {
|
|
5
2
|
CHIP_SIZES,
|
|
6
3
|
CHIP_TRANSITION_EASING,
|
|
@@ -10,6 +7,9 @@ import {
|
|
|
10
7
|
SOFT_GROUND_ALPHA,
|
|
11
8
|
SOFT_HOVER_ALPHA
|
|
12
9
|
} from "./chunk-E5I776YW.js";
|
|
10
|
+
import {
|
|
11
|
+
chipKeyAction
|
|
12
|
+
} from "./chunk-BF4FYOAR.js";
|
|
13
13
|
import {
|
|
14
14
|
shadowInk
|
|
15
15
|
} from "./chunk-XJAD6E3V.js";
|
|
@@ -110,4 +110,4 @@ export {
|
|
|
110
110
|
chipStyles,
|
|
111
111
|
iconWithTestId
|
|
112
112
|
};
|
|
113
|
-
//# sourceMappingURL=chunk-
|
|
113
|
+
//# sourceMappingURL=chunk-DHAXUVMR.js.map
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
CountedIcon,
|
|
5
5
|
controlProps,
|
|
6
6
|
focusRing
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-LDCZPZPD.js";
|
|
8
8
|
import {
|
|
9
9
|
Drawer,
|
|
10
10
|
DrawerContent,
|
|
@@ -175,4 +175,4 @@ function SectionNavSheet({
|
|
|
175
175
|
export {
|
|
176
176
|
SectionNavSheet
|
|
177
177
|
};
|
|
178
|
-
//# sourceMappingURL=chunk-
|
|
178
|
+
//# sourceMappingURL=chunk-DTZOP4ZR.js.map
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DataGridEmpty,
|
|
3
|
+
DataGridError,
|
|
4
|
+
DataGridLoading
|
|
5
|
+
} from "./chunk-EARWC6PD.js";
|
|
1
6
|
import {
|
|
2
7
|
useDataGridModel
|
|
3
8
|
} from "./chunk-LDROG4QI.js";
|
|
@@ -5,11 +10,6 @@ import {
|
|
|
5
10
|
GridBody,
|
|
6
11
|
GridHeader
|
|
7
12
|
} from "./chunk-5RYPVYWP.js";
|
|
8
|
-
import {
|
|
9
|
-
DataGridEmpty,
|
|
10
|
-
DataGridError,
|
|
11
|
-
DataGridLoading
|
|
12
|
-
} from "./chunk-EARWC6PD.js";
|
|
13
13
|
|
|
14
14
|
// src/components/data-display/DataGrid/DataGrid.tsx
|
|
15
15
|
import Paper from "@mui/material/Paper/index.js";
|
|
@@ -120,4 +120,4 @@ export {
|
|
|
120
120
|
DataGrid,
|
|
121
121
|
GRID_ONLY_PROPS
|
|
122
122
|
};
|
|
123
|
-
//# sourceMappingURL=chunk-
|
|
123
|
+
//# sourceMappingURL=chunk-DYHOBKPU.js.map
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
+
import {
|
|
2
|
+
cornerSx,
|
|
3
|
+
headerAdornmentSx
|
|
4
|
+
} from "./chunk-5MXVKZKZ.js";
|
|
1
5
|
import {
|
|
2
6
|
daysBetween,
|
|
3
7
|
isOpen
|
|
4
8
|
} from "./chunk-E6UMTR2G.js";
|
|
5
|
-
import {
|
|
6
|
-
ScheduleNameCell
|
|
7
|
-
} from "./chunk-TZ44F6W7.js";
|
|
8
9
|
import {
|
|
9
10
|
SR_ONLY_SX,
|
|
10
11
|
blockSx,
|
|
@@ -24,6 +25,9 @@ import {
|
|
|
24
25
|
totalCellSx,
|
|
25
26
|
totalHeaderSx
|
|
26
27
|
} from "./chunk-RYJ6XGFA.js";
|
|
28
|
+
import {
|
|
29
|
+
ScheduleNameCell
|
|
30
|
+
} from "./chunk-TZ44F6W7.js";
|
|
27
31
|
import {
|
|
28
32
|
SCHEDULE_GRID_METRICS
|
|
29
33
|
} from "./chunk-3R6BR22L.js";
|
|
@@ -173,12 +177,15 @@ function NameCell({ row }) {
|
|
|
173
177
|
const sizes = { name: SCHEDULE_GRID_METRICS.rowName, meta: SCHEDULE_GRID_METRICS.rowMeta, chipsTop: 0.5 };
|
|
174
178
|
return /* @__PURE__ */ jsx(ScheduleNameCell, { row, role: "rowheader", sx: nameCellSx, sizes });
|
|
175
179
|
}
|
|
180
|
+
function keepRangesWhole(node) {
|
|
181
|
+
return typeof node === "string" ? node.replace(/(\S)–(\S)/g, "$1\u2060\u2013\u2060$2") : node;
|
|
182
|
+
}
|
|
176
183
|
function keepDatesWhole(label) {
|
|
177
184
|
return label.replace(/ (?=\d)/g, "\xA0");
|
|
178
185
|
}
|
|
179
|
-
function GridHeader({ columns, totalLabel, rowSx, testId }) {
|
|
186
|
+
function GridHeader({ columns, totalLabel, corner, rowSx, testId }) {
|
|
180
187
|
return /* @__PURE__ */ jsxs(Box, { role: "row", sx: [rowSx, headerRowSx], "data-testid": `${testId}-header`, children: [
|
|
181
|
-
/* @__PURE__ */ jsx("span",
|
|
188
|
+
/* @__PURE__ */ jsx(Box, { component: "span", role: "cell", "data-sg-corner": "", sx: cornerSx, "data-testid": `${testId}-corner`, children: keepRangesWhole(corner) }),
|
|
182
189
|
columns.map((column, day) => /* @__PURE__ */ jsxs(
|
|
183
190
|
Box,
|
|
184
191
|
{
|
|
@@ -187,7 +194,8 @@ function GridHeader({ columns, totalLabel, rowSx, testId }) {
|
|
|
187
194
|
"data-sg-past": column.past ? "" : void 0,
|
|
188
195
|
children: [
|
|
189
196
|
/* @__PURE__ */ jsx("span", { "data-sg-col": "full", title: column.label, children: keepDatesWhole(column.label) }),
|
|
190
|
-
column.sublabel ? /* @__PURE__ */ jsx(Box, { component: "span", sx: headerSublabelSx, "data-sg-col": "sub", children: column.sublabel }) : null
|
|
197
|
+
column.sublabel ? /* @__PURE__ */ jsx(Box, { component: "span", sx: headerSublabelSx, "data-sg-col": "sub", children: column.sublabel }) : null,
|
|
198
|
+
column.adornment ? /* @__PURE__ */ jsx(Box, { component: "span", sx: headerAdornmentSx, "data-sg-col": "adornment", "data-testid": `${testId}-adornment-${day}`, children: column.adornment }) : null
|
|
191
199
|
]
|
|
192
200
|
},
|
|
193
201
|
`${day}-${column.label}`
|
|
@@ -246,4 +254,4 @@ export {
|
|
|
246
254
|
GridHeader,
|
|
247
255
|
GridBody
|
|
248
256
|
};
|
|
249
|
-
//# sourceMappingURL=chunk-
|
|
257
|
+
//# sourceMappingURL=chunk-E73C73UD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/data-display/ScheduleGrid/ScheduleGrid.parts.tsx"],"sourcesContent":["import AddIcon from '@mui/icons-material/Add';\nimport Box from '@mui/material/Box/index.js';\nimport type { CSSObject, Theme } from '@mui/material/styles/index.js';\nimport type * as React from 'react';\n\nimport type { ScheduleGridLabels } from './ScheduleGrid.labels';\nimport { daysBetween, isOpen } from './schedule-grid-model';\nimport { SCHEDULE_GRID_METRICS } from './ScheduleGrid.metrics';\nimport {\n blockedLabelSx,\n blockSx,\n breakSx,\n cellSx,\n ghostSx,\n gripSx,\n groupTitleSx,\n headerCellSx,\n headerSublabelSx,\n headerRowSx,\n nameCellSx,\n personRowSx,\n plusButtonSx,\n skeletonCellSx,\n SR_ONLY_SX,\n totalCellSx,\n totalHeaderSx,\n} from './ScheduleGrid.styles';\nimport { cornerSx, headerAdornmentSx } from './schedule-header-host.styles';\nimport type { CellLook } from './ScheduleGrid.styles';\nimport type {\n ScheduleGridBlock,\n ScheduleGridCell,\n ScheduleGridColumn,\n ScheduleGridProps,\n ScheduleGridRow,\n} from './ScheduleGrid.types';\nimport { ScheduleNameCell } from './ScheduleNameCell';\nimport type { GridDrag, GridDragApi } from './useGridDrag';\n\n/** What the grid lets a cell do, resolved once per render. */\nexport interface CellAbilities {\n create: boolean;\n copy: boolean;\n move: boolean;\n}\n\n/** A row's shared columns, as an `sx` part. */\ntype RowSx = (theme: Theme) => CSSObject;\n\ninterface CellProps {\n row: ScheduleGridRow;\n day: number;\n column: ScheduleGridColumn;\n cell: ScheduleGridCell;\n drag: GridDrag | null;\n dragApi: GridDragApi;\n can: CellAbilities;\n createPreview?: (rowId: string) => string;\n onCreate?: (rowId: string, days: number[]) => void;\n onBlockClick?: (blockId: string) => void;\n labels: ScheduleGridLabels;\n testId: string;\n}\n\n/** The ghost text this cell shows during a create or copy, or `null` when the gesture does not land here. */\nfunction ghostFor(props: CellProps): string | null {\n const { drag, row, day, cell, createPreview } = props;\n if (!drag || drag.mode === 'move' || drag.rowId !== row.id || !isOpen(cell)) return null;\n if (!daysBetween(drag.anchor, drag.day).includes(day)) return null;\n if (drag.mode === 'copy') return day === drag.anchor ? null : drag.preview;\n return createPreview?.(row.id) ?? '';\n}\n\n/** The keys a block answers to, for `aria-keyshortcuts`. */\nfunction shortcutsOf(movable: boolean, copyable: boolean): string | undefined {\n const keys = [movable ? 'Alt+ArrowLeft Alt+ArrowRight' : '', copyable ? 'Shift+ArrowLeft Shift+ArrowRight' : ''];\n return keys.filter(Boolean).join(' ') || undefined;\n}\n\nconst titleOf = (block: ScheduleGridBlock): string => block.title ?? [block.label, block.note].filter(Boolean).join(' · ');\n\ninterface BlockProps {\n block: ScheduleGridBlock;\n row: ScheduleGridRow;\n day: number;\n can: CellAbilities;\n dragApi: GridDragApi;\n onBlockClick?: (blockId: string) => void;\n testId: string;\n}\n\nfunction Grip({ side, onPointerDown, testId }: { side: 'l' | 'r'; onPointerDown: (event: React.PointerEvent) => void; testId: string }) {\n return <Box component=\"span\" aria-hidden sx={gripSx(side)} onPointerDown={onPointerDown} data-sg-grip=\"\" data-testid={testId} />;\n}\n\n/** The block's break, kept inside it whatever the host sent. */\nfunction BreakBand({ span, testId }: { span: { start: number; end: number }; testId: string }): React.JSX.Element | null {\n const start = Math.min(1, Math.max(0, span.start));\n const end = Math.min(1, Math.max(0, span.end));\n if (!(end > start)) return null;\n return <Box component=\"span\" aria-hidden sx={breakSx({ start, end })} data-sg-break=\"\" data-testid={testId} />;\n}\n\nfunction BlockButton({ block, row, day, can, dragApi, onBlockClick, testId }: BlockProps): React.JSX.Element {\n const movable = can.move && Boolean(block.movable);\n const copyable = can.copy && Boolean(block.copyable);\n const startCopy = (event: React.PointerEvent): void => dragApi.startCopy(event, block.id, row.id, day, block.label);\n const startMove = (event: React.PointerEvent): void => dragApi.startMove(event, block.id, row.id, day);\n return (\n <Box\n component=\"button\"\n type=\"button\"\n sx={blockSx(block.tone, { selected: Boolean(block.selected), movable })}\n title={titleOf(block)}\n aria-keyshortcuts={shortcutsOf(movable, copyable)}\n aria-current={block.selected ? 'true' : undefined}\n data-sg-focus=\"\"\n data-sg-row={row.id}\n data-sg-day={day}\n data-sg-block={block.id}\n data-tone={block.tone}\n data-testid={`${testId}-block-${block.id}`}\n onPointerDown={movable ? startMove : undefined}\n onClick={() => {\n if (!dragApi.takeClick()) onBlockClick?.(block.id);\n }}\n >\n {block.breakSpan ? <BreakBand span={block.breakSpan} testId={`${testId}-break-${block.id}`} /> : null}\n {copyable ? <Grip side=\"l\" onPointerDown={startCopy} testId={`${testId}-grip-l-${block.id}`} /> : null}\n <span data-sg-line=\"label\">{block.label}</span>\n {block.note ? <span data-sg-line=\"note\">{block.note}</span> : null}\n {copyable ? <Grip side=\"r\" onPointerDown={startCopy} testId={`${testId}-grip-r-${block.id}`} /> : null}\n </Box>\n );\n}\n\n/**\n * The empty cell's \"+\". It stays mounted while a drag shows the ghost in it, so\n * a press and release in place is still its click.\n */\nfunction PlusButton({ props, ghost }: { props: CellProps; ghost: string | null }): React.JSX.Element {\n const { row, day, column, dragApi, onCreate, labels } = props;\n return (\n <Box\n component=\"button\"\n type=\"button\"\n sx={plusButtonSx}\n aria-label={labels.createCell(row.label, column.label)}\n data-ghost={ghost === null ? undefined : ''}\n data-sg-focus=\"\"\n data-sg-row={row.id}\n data-sg-day={day}\n onPointerDown={(event: React.PointerEvent) => dragApi.startCreate(event, row.id, day)}\n onClick={() => {\n if (!dragApi.takeClick()) onCreate?.(row.id, [day]);\n }}\n >\n {ghost === null ? <AddIcon aria-hidden /> : <Ghost text={ghost} />}\n </Box>\n );\n}\n\nfunction Ghost({ text }: { text: string }): React.JSX.Element {\n return (\n <Box component=\"span\" sx={ghostSx} aria-hidden>\n {text}\n </Box>\n );\n}\n\n/** What fills a cell after its blocks: the \"+\" (or the ghost in it), a lone ghost, or a closed day's label. */\nfunction CellFill({ props, ghost }: { props: CellProps; ghost: string | null }): React.JSX.Element | null {\n const { cell, can } = props;\n if (can.create && isOpen(cell)) return <PlusButton props={props} ghost={ghost} />;\n if (ghost !== null) return <Ghost text={ghost} />;\n if (!cell.blocked || cell.blocks.length > 0 || !cell.blockedLabel) return null;\n return (\n <Box component=\"span\" sx={blockedLabelSx} aria-hidden title={cell.blockedLabel}>\n {cell.blockedLabel}\n </Box>\n );\n}\n\n/** A gone day's words for a screen reader (\"Já passou\"): visually hidden, and only when the host gives them. */\nfunction ClosedWords({ cell }: { cell: ScheduleGridCell }): React.JSX.Element | null {\n if (!cell.closed || cell.blocked || !cell.closedLabel) return null;\n return (\n <Box component=\"span\" sx={SR_ONLY_SX}>\n {cell.closedLabel}\n </Box>\n );\n}\n\n/** How the cell is drawn right now. */\nfunction lookOf(props: CellProps, ghost: string | null): CellLook {\n const { row, day, column, cell, drag, can } = props;\n return {\n today: Boolean(column.today),\n blocked: Boolean(cell.blocked),\n closed: Boolean(cell.closed),\n target: ghost !== null,\n over: drag?.mode === 'move' && drag.moved && drag.rowId === row.id && drag.day === day,\n interactive: can.create && isOpen(cell),\n };\n}\n\n/** One day of one row: its blocks, a \"+\" when it is empty, the hatch when it is closed. */\nexport function GridCell(props: CellProps): React.JSX.Element {\n const { row, day, column, cell, can, labels, testId } = props;\n const ghost = ghostFor(props);\n const look = lookOf(props, ghost);\n const blocked = look.blocked;\n const closedName = blocked && cell.blocks.length === 0 ? (cell.blockedLabel ?? labels.blockedCell(row.label, column.label)) : undefined;\n return (\n <Box\n role=\"cell\"\n sx={cellSx(look)}\n data-sg-cell=\"\"\n data-sg-row={row.id}\n data-sg-day={day}\n data-testid={`${testId}-cell-${row.id}-${day}`}\n aria-label={closedName}\n >\n {cell.blocks.map((block) => (\n <BlockButton\n key={block.id}\n block={block}\n row={row}\n day={day}\n can={can}\n dragApi={props.dragApi}\n onBlockClick={props.onBlockClick}\n testId={testId}\n />\n ))}\n <CellFill props={props} ghost={ghost} />\n <ClosedWords cell={cell} />\n </Box>\n );\n}\n\n/** The first column: the person, as both views draw it. */\nfunction NameCell({ row }: { row: ScheduleGridRow }): React.JSX.Element {\n const sizes = { name: SCHEDULE_GRID_METRICS.rowName, meta: SCHEDULE_GRID_METRICS.rowMeta, chipsTop: 0.5 };\n return <ScheduleNameCell row={row} role=\"rowheader\" sx={nameCellSx} sizes={sizes} />;\n}\n\ninterface HeaderProps {\n columns: readonly ScheduleGridColumn[];\n /** Present when the grid has a last column. */\n totalLabel?: string;\n /** Above the names (`ScheduleGridProps.corner`). */\n corner?: React.ReactNode;\n rowSx: RowSx;\n testId: string;\n}\n\n/** The days, their counts and the total column's header — pinned while the grid scrolls. */\n\n/** A range (\"11h–23h\") breaks before or after it, never at its dash; a spaced dash (\"11h – 23h\") keeps its spaces. */\nfunction keepRangesWhole(node: React.ReactNode): React.ReactNode {\n return typeof node === 'string' ? node.replace(/(\\S)–(\\S)/g, '$1\\u2060–\\u2060$2') : node;\n}\n\n/** A label wraps between words, never inside \"Seg 19/10\": the space before a number holds. */\nfunction keepDatesWhole(label: string): string {\n return label.replace(/ (?=\\d)/g, '\\u00a0');\n}\n\nexport function GridHeader({ columns, totalLabel, corner, rowSx, testId }: HeaderProps): React.JSX.Element {\n return (\n <Box role=\"row\" sx={[rowSx, headerRowSx]} data-testid={`${testId}-header`}>\n {/* Above the names: a cell of the header row, with nothing to head but the host's corner words. */}\n <Box component=\"span\" role=\"cell\" data-sg-corner=\"\" sx={cornerSx} data-testid={`${testId}-corner`}>\n {keepRangesWhole(corner)}\n </Box>\n {columns.map((column, day) => (\n <Box\n role=\"columnheader\"\n key={`${day}-${column.label}`}\n sx={headerCellSx(Boolean(column.today), Boolean(column.past))}\n data-sg-past={column.past ? '' : undefined}\n >\n <span data-sg-col=\"full\" title={column.label}>\n {keepDatesWhole(column.label)}\n </span>\n {column.sublabel ? (\n <Box component=\"span\" sx={headerSublabelSx} data-sg-col=\"sub\">\n {column.sublabel}\n </Box>\n ) : null}\n {column.adornment ? (\n <Box component=\"span\" sx={headerAdornmentSx} data-sg-col=\"adornment\" data-testid={`${testId}-adornment-${day}`}>\n {column.adornment}\n </Box>\n ) : null}\n </Box>\n ))}\n {totalLabel !== undefined ? (\n <Box role=\"columnheader\" sx={totalHeaderSx}>\n {totalLabel}\n </Box>\n ) : null}\n </Box>\n );\n}\n\ninterface BodyProps {\n grid: ScheduleGridProps;\n rows: readonly ScheduleGridRow[];\n rowSx: RowSx;\n hasTotal: boolean;\n can: CellAbilities;\n dragApi: GridDragApi;\n labels: ScheduleGridLabels;\n testId: string;\n}\n\nfunction SkeletonRows({ grid, rowSx, testId }: Pick<BodyProps, 'grid' | 'rowSx' | 'testId'>): React.JSX.Element {\n return (\n <>\n {Array.from({ length: SCHEDULE_GRID_METRICS.skeletonRows }, (_, index) => (\n <Box key={index} sx={[rowSx, personRowSx]} aria-hidden data-testid={`${testId}-loading`}>\n <Box sx={skeletonCellSx} />\n {grid.columns.map((column, day) => (\n <Box key={`${day}-${column.label}`} sx={skeletonCellSx} />\n ))}\n </Box>\n ))}\n </>\n );\n}\n\nfunction PersonRow({ row, body }: { row: ScheduleGridRow; body: BodyProps }): React.JSX.Element {\n const { grid, rowSx, hasTotal, can, dragApi, labels, testId } = body;\n return (\n <Box role=\"row\" sx={[rowSx, personRowSx]} data-testid={`${testId}-row-${row.id}`}>\n <NameCell row={row} />\n {grid.columns.map((column, day) => (\n <GridCell\n key={`${day}-${column.label}`}\n row={row}\n day={day}\n column={column}\n cell={grid.cell(row.id, day)}\n drag={dragApi.drag}\n dragApi={dragApi}\n can={can}\n createPreview={grid.createPreview}\n onCreate={grid.onCreate}\n onBlockClick={grid.onBlockClick}\n labels={labels}\n testId={testId}\n />\n ))}\n {hasTotal ? (\n <Box role=\"cell\" sx={totalCellSx}>\n {row.total}\n </Box>\n ) : null}\n </Box>\n );\n}\n\n/** The host's error or empty node, as the table's one full-width row (a table holds rows only). */\nfunction MessageRow({ children, testId }: { children: React.ReactNode; testId: string }): React.JSX.Element | null {\n if (children === null || children === undefined || children === false) return null;\n return (\n <Box role=\"row\" data-testid={`${testId}-message`}>\n <Box role=\"cell\">{children}</Box>\n </Box>\n );\n}\n\n/** The groups and their rows — or the skeleton, the host's error, or the host's empty state. */\nexport function GridBody(body: BodyProps): React.JSX.Element | null {\n const { grid, rows } = body;\n if (grid.error) return <MessageRow testId={body.testId}>{grid.error}</MessageRow>;\n if (grid.loading) return <SkeletonRows grid={grid} rowSx={body.rowSx} testId={body.testId} />;\n if (rows.length === 0) return <MessageRow testId={body.testId}>{grid.empty}</MessageRow>;\n return (\n <>\n {grid.groups.map((group, index) => (\n <Box role=\"rowgroup\" key={`${index}-${group.title ?? ''}`} aria-label={group.title}>\n {group.title ? (\n <Box component=\"p\" sx={groupTitleSx} aria-hidden data-sg-group-title=\"\">\n {group.title}\n </Box>\n ) : null}\n {group.rows.map((row) => (\n <PersonRow key={row.id} row={row} body={body} />\n ))}\n </Box>\n ))}\n </>\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-EWFBDAB7.js";
|
|
4
4
|
import {
|
|
5
5
|
EmptyState
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-LXIPBHNJ.js";
|
|
7
7
|
|
|
8
8
|
// src/components/data-display/SectionOnboarding/SectionOnboarding.tsx
|
|
9
9
|
import CheckCircle from "@mui/icons-material/CheckCircle";
|
|
@@ -193,4 +193,4 @@ export {
|
|
|
193
193
|
SectionOnboarding,
|
|
194
194
|
SectionOnboarding_default
|
|
195
195
|
};
|
|
196
|
-
//# sourceMappingURL=chunk-
|
|
196
|
+
//# sourceMappingURL=chunk-EOIRU62W.js.map
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
PT_BR_DAY_RULER_LABELS
|
|
3
|
-
} from "./chunk-D3OXTS7Y.js";
|
|
4
1
|
import {
|
|
5
2
|
EN_US_DAY_RULER_LABELS
|
|
6
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-F2ZUUEXC.js";
|
|
4
|
+
import {
|
|
5
|
+
PT_BR_DAY_RULER_LABELS
|
|
6
|
+
} from "./chunk-ZHCZOPKE.js";
|
|
7
7
|
|
|
8
8
|
// src/components/data-display/DayRuler/DayRuler.labels.ts
|
|
9
9
|
var DAY_RULER_LABELS = {
|
|
@@ -14,4 +14,4 @@ var DAY_RULER_LABELS = {
|
|
|
14
14
|
export {
|
|
15
15
|
DAY_RULER_LABELS
|
|
16
16
|
};
|
|
17
|
-
//# sourceMappingURL=chunk-
|
|
17
|
+
//# sourceMappingURL=chunk-EZBBLLEU.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/DayRuler/DayRuler.labels.ts"],"sourcesContent":["/**\n * `DayRuler`'s words, in both languages. They live with the component rather\n * than in `UiLabels` so they load only with it: `EN_US_UI_LABELS` and\n * `PT_BR_UI_LABELS` are imported by eagerly loaded components (`Avatar`), and\n * every family in them ships to every host that renders any of those (FUT-3831).\n *\n * Each language is a named pack beside the component (`DayRuler.pt-BR.ts`,\n * `DayRuler.en-US.ts`). A pt-BR host passes `DAY_RULER_LABELS['pt-BR']` to\n * `labels`; the ruler falls back to `'en-US'` on its own.\n */\nimport { EN_US_DAY_RULER_LABELS } from './DayRuler.en-US';\nimport { PT_BR_DAY_RULER_LABELS } from './DayRuler.pt-BR';\n\n/** `DayRuler`'s track names and the sentences its live region reads after a keyboard move or resize. */\nexport interface DayRulerLabels {\n /** A row's empty track: Enter schedules this row. */\n createTrack(row: string): string;\n /** After Alt+←/→ moved a block; `range` is \"20:45–00:45\". */\n moved(block: string, range: string): string;\n /** After Shift(+Alt)+←/→ changed a block's end or start. */\n resized(block: string, range: string): string;\n /** A keyboard move or resize past the ruler's ends or under the shortest length. */\n refused: string;\n /** Shift/Alt+←/→ on a block that is not `movable` / `resizable`: the block is fixed. */\n notMovable: string;\n /** The ruler's busy state. */\n loading: string;\n}\n\n/**\n * Both packs, in the shape `locales.ts`'s `pack(...)` yields. The component\n * itself imports only the en-US file, its fallback.\n */\nexport const DAY_RULER_LABELS: { readonly 'pt-BR': DayRulerLabels; readonly 'en-US': DayRulerLabels } = {\n 'pt-BR': PT_BR_DAY_RULER_LABELS,\n 'en-US': EN_US_DAY_RULER_LABELS,\n};\n"],"mappings":";;;;;;;;
|
|
1
|
+
{"version":3,"sources":["../src/components/data-display/DayRuler/DayRuler.labels.ts"],"sourcesContent":["/**\n * `DayRuler`'s words, in both languages. They live with the component rather\n * than in `UiLabels` so they load only with it: `EN_US_UI_LABELS` and\n * `PT_BR_UI_LABELS` are imported by eagerly loaded components (`Avatar`), and\n * every family in them ships to every host that renders any of those (FUT-3831).\n *\n * Each language is a named pack beside the component (`DayRuler.pt-BR.ts`,\n * `DayRuler.en-US.ts`). A pt-BR host passes `DAY_RULER_LABELS['pt-BR']` to\n * `labels`; the ruler falls back to `'en-US'` on its own.\n */\nimport { EN_US_DAY_RULER_LABELS } from './DayRuler.en-US';\nimport { PT_BR_DAY_RULER_LABELS } from './DayRuler.pt-BR';\n\n/** `DayRuler`'s track names and the sentences its live region reads after a keyboard move or resize. */\nexport interface DayRulerLabels {\n /** A row's empty track: Enter schedules this row. */\n createTrack(row: string): string;\n /** After Alt+←/→ moved a block; `range` is \"20:45–00:45\". */\n moved(block: string, range: string): string;\n /** After Shift(+Alt)+←/→ changed a block's end or start. */\n resized(block: string, range: string): string;\n /** A keyboard move or resize past the ruler's ends or under the shortest length. */\n refused: string;\n /** Shift/Alt+←/→ on a block that is not `movable` / `resizable`: the block is fixed. */\n notMovable: string;\n /** The ruler's busy state. */\n loading: string;\n /** Said after a group footer's marked hour when the host gives it no `title` (FUT-3882). */\n footerMarked: string;\n}\n\n/**\n * Both packs, in the shape `locales.ts`'s `pack(...)` yields. The component\n * itself imports only the en-US file, its fallback.\n */\nexport const DAY_RULER_LABELS: { readonly 'pt-BR': DayRulerLabels; readonly 'en-US': DayRulerLabels } = {\n 'pt-BR': PT_BR_DAY_RULER_LABELS,\n 'en-US': EN_US_DAY_RULER_LABELS,\n};\n"],"mappings":";;;;;;;;AAmCO,IAAM,mBAA2F;AAAA,EACtG,SAAS;AAAA,EACT,SAAS;AACX;","names":[]}
|
|
@@ -5,10 +5,11 @@ var EN_US_DAY_RULER_LABELS = {
|
|
|
5
5
|
resized: (block, range) => `${block} now ${range}`,
|
|
6
6
|
refused: "It cannot go further",
|
|
7
7
|
notMovable: "This shift cannot be changed here",
|
|
8
|
-
loading: "Loading the day"
|
|
8
|
+
loading: "Loading the day",
|
|
9
|
+
footerMarked: "short of people"
|
|
9
10
|
};
|
|
10
11
|
|
|
11
12
|
export {
|
|
12
13
|
EN_US_DAY_RULER_LABELS
|
|
13
14
|
};
|
|
14
|
-
//# sourceMappingURL=chunk-
|
|
15
|
+
//# sourceMappingURL=chunk-F2ZUUEXC.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/DayRuler/DayRuler.en-US.ts"],"sourcesContent":["/** `DayRuler`'s en-US words, and the component's own fallback when `labels` is not given. */\nimport type { DayRulerLabels } from './DayRuler.labels';\n\nexport const EN_US_DAY_RULER_LABELS: DayRulerLabels = {\n createTrack: (row) => `Schedule ${row}`,\n moved: (block, range) => `${block} now ${range}`,\n resized: (block, range) => `${block} now ${range}`,\n refused: \"It cannot go further\",\n notMovable: \"This shift cannot be changed here\",\n loading: \"Loading the day\",\n};\n"],"mappings":";AAGO,IAAM,yBAAyC;AAAA,EACpD,aAAa,CAAC,QAAQ,YAAY,GAAG;AAAA,EACrC,OAAO,CAAC,OAAO,UAAU,GAAG,KAAK,QAAQ,KAAK;AAAA,EAC9C,SAAS,CAAC,OAAO,UAAU,GAAG,KAAK,QAAQ,KAAK;AAAA,EAChD,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,SAAS;
|
|
1
|
+
{"version":3,"sources":["../src/components/data-display/DayRuler/DayRuler.en-US.ts"],"sourcesContent":["/** `DayRuler`'s en-US words, and the component's own fallback when `labels` is not given. */\nimport type { DayRulerLabels } from './DayRuler.labels';\n\nexport const EN_US_DAY_RULER_LABELS: DayRulerLabels = {\n createTrack: (row) => `Schedule ${row}`,\n moved: (block, range) => `${block} now ${range}`,\n resized: (block, range) => `${block} now ${range}`,\n refused: \"It cannot go further\",\n notMovable: \"This shift cannot be changed here\",\n loading: \"Loading the day\",\n footerMarked: \"short of people\",\n};\n"],"mappings":";AAGO,IAAM,yBAAyC;AAAA,EACpD,aAAa,CAAC,QAAQ,YAAY,GAAG;AAAA,EACrC,OAAO,CAAC,OAAO,UAAU,GAAG,KAAK,QAAQ,KAAK;AAAA,EAC9C,SAAS,CAAC,OAAO,UAAU,GAAG,KAAK,QAAQ,KAAK;AAAA,EAChD,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,cAAc;AAChB;","names":[]}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
SectionNavRail
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-AMIUZRDQ.js";
|
|
4
4
|
import {
|
|
5
5
|
SectionNavBar
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-P53ANKZV.js";
|
|
7
7
|
|
|
8
8
|
// src/components/navigation/SectionNav/SectionNav.tsx
|
|
9
9
|
import { jsx } from "react/jsx-runtime";
|
|
@@ -55,4 +55,4 @@ function SectionNav({
|
|
|
55
55
|
export {
|
|
56
56
|
SectionNav
|
|
57
57
|
};
|
|
58
|
-
//# sourceMappingURL=chunk-
|
|
58
|
+
//# sourceMappingURL=chunk-FAUNQ3FS.js.map
|
|
@@ -12,9 +12,11 @@ import {
|
|
|
12
12
|
} from "./chunk-CBOB5AV6.js";
|
|
13
13
|
import {
|
|
14
14
|
DayRangeCalendar
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-HRES2S3Q.js";
|
|
16
16
|
import {
|
|
17
|
-
isRangeInverted
|
|
17
|
+
isRangeInverted,
|
|
18
|
+
isRangeSet,
|
|
19
|
+
rangeChipLabel
|
|
18
20
|
} from "./chunk-GCZJH4XL.js";
|
|
19
21
|
import {
|
|
20
22
|
useDataViewsCopy
|
|
@@ -29,7 +31,7 @@ import {
|
|
|
29
31
|
// src/components/data-display/DataViews/data-views-range-bounds.tsx
|
|
30
32
|
import Box from "@mui/material/Box/index.js";
|
|
31
33
|
import Typography from "@mui/material/Typography/index.js";
|
|
32
|
-
import { useState } from "react";
|
|
34
|
+
import { useEffect, useRef, useState } from "react";
|
|
33
35
|
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
34
36
|
function BoundField({
|
|
35
37
|
field,
|
|
@@ -66,6 +68,28 @@ function BoundField({
|
|
|
66
68
|
}
|
|
67
69
|
);
|
|
68
70
|
}
|
|
71
|
+
function useFocusDeAfterClear(key, testId) {
|
|
72
|
+
const rootRef = useRef(null);
|
|
73
|
+
const pending = useRef(false);
|
|
74
|
+
useEffect(() => {
|
|
75
|
+
if (!pending.current) return;
|
|
76
|
+
pending.current = false;
|
|
77
|
+
rootRef.current?.querySelector(`[data-testid="${testId}-min"]`)?.focus();
|
|
78
|
+
}, [key, testId]);
|
|
79
|
+
return {
|
|
80
|
+
rootRef,
|
|
81
|
+
clearToDe: (clear, fromKeyboard) => {
|
|
82
|
+
pending.current = fromKeyboard;
|
|
83
|
+
clear();
|
|
84
|
+
}
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
function hintLineProps(field, value, clear) {
|
|
88
|
+
return { summary: appliedWindow(field, value), onClear: clear };
|
|
89
|
+
}
|
|
90
|
+
function appliedWindow(field, value) {
|
|
91
|
+
return isRangeSet(value) ? rangeChipLabel(field, value) : void 0;
|
|
92
|
+
}
|
|
69
93
|
function BoundCell({ grow, children }) {
|
|
70
94
|
if (!grow) return /* @__PURE__ */ jsx(Fragment, { children });
|
|
71
95
|
return /* @__PURE__ */ jsx(Box, { sx: { flex: "1 1 0", minWidth: 0 }, children });
|
|
@@ -105,17 +129,20 @@ function RangeBounds({
|
|
|
105
129
|
testId,
|
|
106
130
|
calendarMonths = 1,
|
|
107
131
|
showCalendar = true,
|
|
108
|
-
fillRow = false
|
|
132
|
+
fillRow = false,
|
|
133
|
+
summaryOnHint = false
|
|
109
134
|
}) {
|
|
110
135
|
const copy = useDataViewsCopy();
|
|
111
136
|
const { key, emitted } = useOutsideResetKey(value);
|
|
137
|
+
const { rootRef, clearToDe } = useFocusDeAfterClear(key, testId);
|
|
138
|
+
const hintLine = summaryOnHint ? hintLineProps(field, value, (fromKeyboard) => clearToDe(() => onChange({}), fromKeyboard)) : {};
|
|
112
139
|
const [typed, setTyped] = useState(0);
|
|
113
140
|
const typedChange = (range) => {
|
|
114
141
|
setTyped((n) => n + 1);
|
|
115
142
|
onChange(emitted(range));
|
|
116
143
|
};
|
|
117
144
|
const day = field.kind === "day";
|
|
118
|
-
return /* @__PURE__ */ jsxs(Box, { "data-testid": `${testId}-panel`, children: [
|
|
145
|
+
return /* @__PURE__ */ jsxs(Box, { ref: rootRef, "data-testid": `${testId}-panel`, children: [
|
|
119
146
|
/* @__PURE__ */ jsx(Box, { sx: { "&:not(:empty)": { mb: { xs: 1, sm: 1.5 } } }, children: /* @__PURE__ */ jsx(RangePresets, { presets: presetsFor(field, copy), value, onChange, testId }) }),
|
|
120
147
|
/* @__PURE__ */ jsxs(Box, { sx: { display: "flex", alignItems: "flex-start", gap: 1.5 }, children: [
|
|
121
148
|
/* @__PURE__ */ jsx(BoundCell, { grow: day || fillRow, children: /* @__PURE__ */ jsx(
|
|
@@ -152,7 +179,8 @@ function RangeBounds({
|
|
|
152
179
|
onChange: (range) => onChange(emitted(range)),
|
|
153
180
|
months: calendarMonths,
|
|
154
181
|
viewKey: `${key}-${typed}`,
|
|
155
|
-
testId
|
|
182
|
+
testId,
|
|
183
|
+
...hintLine
|
|
156
184
|
}
|
|
157
185
|
)
|
|
158
186
|
] });
|
|
@@ -161,4 +189,4 @@ function RangeBounds({
|
|
|
161
189
|
export {
|
|
162
190
|
RangeBounds
|
|
163
191
|
};
|
|
164
|
-
//# sourceMappingURL=chunk-
|
|
192
|
+
//# sourceMappingURL=chunk-FC7UCFFA.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/data-display/DataViews/data-views-range-bounds.tsx"],"sourcesContent":["'use client';\n\n/**\n * The `De`/`Até` pair of a range filter, its preset chips, the line under it\n * and — for a day range — the calendar under that (FUT-4144). Shared by the\n * pill's popover, the slide-in panel and the \"Mais\" sheet, so the three cannot\n * drift on what a bound accepts or how it clears.\n */\nimport Box from '@mui/material/Box/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport React, { useEffect, useRef, useState } from 'react';\n\nimport { useDataViewsCopy } from './data-views-copy-context';\nimport { DayBoundInput } from './data-views-day-input';\nimport { NumberBoundInput } from './data-views-number-input';\nimport { RangePresets } from './data-views-preset-chips';\nimport { DayRangeCalendar } from './data-views-range-calendar';\nimport { presetsFor } from './data-views-range-presets';\nimport { useOutsideResetKey } from './data-views-range-reset';\nimport { isRangeInverted, isRangeSet, rangeChipLabel } from './data-views-range-values';\nimport type { RangeFieldConfig, RangeValue } from './data-views-types';\nimport { sxRem } from '../../../tokens/relative';\n\n/**\n * One end of the range. A day keeps its `AAAA-MM-DD` string verbatim (the form\n * both the field and the backend speak) and is typed through the masked\n * `dd/mm/aaaa` field rather than a native date input — see\n * {@link DayBoundInput} for why. A number parses, and an unparseable/blank\n * entry CLEARS the bound rather than writing `NaN`.\n */\nfunction BoundField<T extends Record<string, unknown>>({\n field,\n label,\n value,\n onChange,\n testId,\n fill,\n}: {\n field: RangeFieldConfig<T>;\n label: string;\n value: number | string | undefined;\n onChange: (bound: number | string | undefined) => void;\n testId: string;\n /** A number box takes its cell's width; a day box always does. */\n fill: boolean;\n}): React.JSX.Element {\n const copy = useDataViewsCopy();\n if (field.kind === 'day') {\n return (\n <DayBoundInput\n fill\n mask={copy.filters.dayMask}\n invalidMessage={copy.filters.dayInvalid}\n label={label}\n value={value == null ? undefined : String(value)}\n onChange={onChange}\n testId={testId}\n />\n );\n }\n return (\n <NumberBoundInput\n fill={fill}\n label={label}\n value={value}\n unit={field.unit}\n onChange={onChange}\n testId={testId}\n />\n );\n}\n\n\n/**\n * After the line's \"Limpar\" pressed from the keyboard, focus goes to the\n * cleared \"De\" — the next thing to type — instead of falling to the page with\n * the button that held it. A tap leaves focus alone: focusing \"De\" there would\n * open the phone's keyboard over the calendar the next tap is for.\n * The boxes remount on a clear, so focus waits for the reset key to move.\n */\nfunction useFocusDeAfterClear(\n key: number,\n testId: string,\n): { rootRef: React.RefObject<HTMLDivElement | null>; clearToDe: (clear: () => void, fromKeyboard: boolean) => void } {\n const rootRef = useRef<HTMLDivElement>(null);\n const pending = useRef(false);\n useEffect(() => {\n if (!pending.current) return;\n pending.current = false;\n rootRef.current?.querySelector<HTMLInputElement>(`[data-testid=\"${testId}-min\"]`)?.focus();\n }, [key, testId]);\n return {\n rootRef,\n clearToDe: (clear, fromKeyboard) => {\n pending.current = fromKeyboard;\n clear();\n },\n };\n}\n\n/**\n * The window and \"Limpar\" for the hint line, where the host asks for them.\n * `clear` goes straight to the host, not through `emitted`: it is an outside\n * write, so the boxes and the calendar re-open on the empty range.\n */\nfunction hintLineProps<T extends Record<string, unknown>>(\n field: RangeFieldConfig<T>,\n value: RangeValue,\n clear: (fromKeyboard: boolean) => void,\n): { summary: string | undefined; onClear: (fromKeyboard: boolean) => void } {\n return { summary: appliedWindow(field, value), onClear: clear };\n}\n\n/** The applied window in words (\"Data: 01/10–15/10\"), or nothing while none is. */\nfunction appliedWindow<T extends Record<string, unknown>>(field: RangeFieldConfig<T>, value: RangeValue): string | undefined {\n return isRangeSet(value) ? rangeChipLabel(field, value) : undefined;\n}\n\n/** One box of the pair: an equal share of the row for a day, as it was for a number. */\nfunction BoundCell({ grow, children }: { grow: boolean; children: React.ReactNode }): React.JSX.Element {\n if (!grow) return <>{children}</>;\n return <Box sx={{ flex: '1 1 0', minWidth: 0 }}>{children}</Box>;\n}\n\n/**\n * The line under the pair: why an inverted window matches nothing, or — for a\n * day range — that BOTH days are in the result. Saying so is FUT-668's other\n * half: the bounds compare as ISO strings precisely so `até` keeps its whole\n * day, and nothing on screen would otherwise tell the merchant that.\n */\nfunction RangeNote({\n day,\n inverted,\n testId,\n}: {\n day: boolean;\n inverted: boolean;\n testId: string;\n}): React.JSX.Element | null {\n const copy = useDataViewsCopy();\n if (inverted) {\n return (\n <Typography\n component=\"p\"\n data-testid={`${testId}-inverted`}\n sx={{ mt: 0.75, fontSize: sxRem(12), color: 'error.main' }}\n >\n {copy.filters.rangeInvalid}\n </Typography>\n );\n }\n if (!day) return null;\n return (\n <Typography\n component=\"p\"\n data-testid={`${testId}-inclusive`}\n // `text.secondary`, not `disabled`: the note is read, and disabled grey\n // at 12px is 2.68:1 (FUT-4144 UI review).\n sx={{ mt: { xs: 0.25, sm: 0.75 }, fontSize: sxRem(12), color: 'text.secondary' }}\n >\n {copy.filters.rangeInclusiveNote}\n </Typography>\n );\n}\n\n/** Props of {@link RangeBounds}. */\ninterface RangeBoundsProps<T extends Record<string, unknown>> {\n field: RangeFieldConfig<T>;\n value: RangeValue;\n onChange: (range: RangeValue) => void;\n testId: string;\n /**\n * Months the day calendar shows side by side (FUT-4144). Two where the\n * popover has the room; one, with the month/year selectors, on a phone and\n * in the panels.\n */\n calendarMonths?: 1 | 2;\n /**\n * Whether the day calendar is mounted. A host that keeps the pair mounted\n * while hidden (the slide-in panel) passes its open state, so a closed panel\n * holds no calendar of its own.\n */\n showCalendar?: boolean;\n /**\n * A NUMBER pair splits the row equally too, as a day pair always does. Set\n * by the panels, whose width is the row's; the pill's popover sizes itself to\n * its content and keeps the boxes' own width.\n */\n fillRow?: boolean;\n /**\n * Say the applied window, and its \"Limpar\", on the day calendar's hint line.\n * The pill's popover sets it; a panel has them in its own header.\n */\n summaryOnHint?: boolean;\n}\n\n/**\n * The `De`/`Até` pair for a range — shared by the pill's popover and the\n * slide-in panel's day fields, so the two surfaces cannot drift on what a bound\n * accepts or how it clears.\n */\nexport function RangeBounds<T extends Record<string, unknown>>({\n field,\n value,\n onChange,\n testId,\n calendarMonths = 1,\n showCalendar = true,\n fillRow = false,\n summaryOnHint = false,\n}: RangeBoundsProps<T>): React.JSX.Element {\n const copy = useDataViewsCopy();\n const { key, emitted } = useOutsideResetKey(value);\n const { rootRef, clearToDe } = useFocusDeAfterClear(key, testId);\n const hintLine = summaryOnHint ? hintLineProps(field, value, (fromKeyboard) => clearToDe(() => onChange({}), fromKeyboard)) : {};\n // Moves the calendar to a TYPED day. A typed write is the fields' own, so\n // the outside key above does not see it; a tap on the calendar moves\n // neither, which is what keeps it still under the finger.\n const [typed, setTyped] = useState(0);\n const typedChange = (range: RangeValue) => {\n setTyped((n) => n + 1);\n onChange(emitted(range));\n };\n const day = field.kind === 'day';\n return (\n <Box ref={rootRef} data-testid={`${testId}-panel`}>\n {/* Above the inputs, not below: the presets are the answer for most\n merchants, and the two date pickers are the escape hatch. */}\n <Box sx={{ '&:not(:empty)': { mb: { xs: 1, sm: 1.5 } } }}>\n <RangePresets presets={presetsFor(field, copy)} value={value} onChange={onChange} testId={testId} />\n </Box>\n {/* Top-aligned: a day that does not exist grows ITS field by a message\n line, and centring would push the other box half a line down. The two\n boxes are one height, so with no message this is the same row. */}\n <Box sx={{ display: 'flex', alignItems: 'flex-start', gap: 1.5 }}>\n {/* A day pair shares the row equally, so it spans the calendar under\n it; a number pair keeps its own widths. */}\n <BoundCell grow={day || fillRow}>\n <BoundField\n key={`min-${key}`}\n field={field}\n label={copy.filters.rangeStart}\n value={value.min}\n onChange={(min) => typedChange({ ...value, min })}\n testId={`${testId}-min`}\n fill={fillRow}\n />\n </BoundCell>\n <BoundCell grow={day || fillRow}>\n <BoundField\n key={`max-${key}`}\n field={field}\n label={copy.filters.rangeEnd}\n value={value.max}\n onChange={(max) => typedChange({ ...value, max })}\n testId={`${testId}-max`}\n fill={fillRow}\n />\n </BoundCell>\n </Box>\n <RangeNote day={day} inverted={isRangeInverted(value)} testId={testId} />\n {/* Under the boxes and the note, with no button to reach it: the typed\n path stays as short as it was, and a period is two taps (FUT-4144). */}\n {day && showCalendar && (\n <DayRangeCalendar\n fieldLabel={field.label}\n value={value}\n onChange={(range) => onChange(emitted(range))}\n months={calendarMonths}\n viewKey={`${key}-${typed}`}\n testId={testId}\n {...hintLine}\n />\n )}\n </Box>\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Alert
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-PEAUGQKU.js";
|
|
4
4
|
|
|
5
5
|
// src/components/data-display/CardKit/card-actions-context.tsx
|
|
6
6
|
import { createContext, useCallback, useContext, useState } from "react";
|
|
@@ -58,4 +58,4 @@ export {
|
|
|
58
58
|
CardActionsProvider,
|
|
59
59
|
useCardActions
|
|
60
60
|
};
|
|
61
|
-
//# sourceMappingURL=chunk-
|
|
61
|
+
//# sourceMappingURL=chunk-FQNDJITD.js.map
|
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
resolveLightboxProps
|
|
3
3
|
} from "./chunk-UOS7DEQZ.js";
|
|
4
|
+
import {
|
|
5
|
+
LightboxThumbnails
|
|
6
|
+
} from "./chunk-64UNVW6D.js";
|
|
4
7
|
import {
|
|
5
8
|
LightboxStage
|
|
6
9
|
} from "./chunk-SYGM4SHY.js";
|
|
@@ -13,9 +16,6 @@ import {
|
|
|
13
16
|
import {
|
|
14
17
|
useLightbox
|
|
15
18
|
} from "./chunk-HZBDTPPV.js";
|
|
16
|
-
import {
|
|
17
|
-
LightboxThumbnails
|
|
18
|
-
} from "./chunk-64UNVW6D.js";
|
|
19
19
|
import {
|
|
20
20
|
makeTestId
|
|
21
21
|
} from "./chunk-VQU3CBAL.js";
|
|
@@ -148,4 +148,4 @@ export {
|
|
|
148
148
|
Lightbox,
|
|
149
149
|
Lightbox_default
|
|
150
150
|
};
|
|
151
|
-
//# sourceMappingURL=chunk-
|
|
151
|
+
//# sourceMappingURL=chunk-FWTVIRZZ.js.map
|
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
} from "./chunk-AJ6KFHEE.js";
|
|
4
4
|
import {
|
|
5
5
|
PanelRangeField
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-3WYEENUH.js";
|
|
7
7
|
import {
|
|
8
8
|
useDataViewsCopy
|
|
9
9
|
} from "./chunk-KHG57NAE.js";
|
|
@@ -157,4 +157,4 @@ export {
|
|
|
157
157
|
GridFilterPanel,
|
|
158
158
|
FilterDialog
|
|
159
159
|
};
|
|
160
|
-
//# sourceMappingURL=chunk-
|
|
160
|
+
//# sourceMappingURL=chunk-FYUNROLW.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
2
|
SettingSwitchBlock,
|
|
3
3
|
useSettingSwitchIds
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-ZDAAHCIS.js";
|
|
5
5
|
import {
|
|
6
6
|
SettingGroupContext
|
|
7
7
|
} from "./chunk-XJQNSMGA.js";
|
|
@@ -10,7 +10,7 @@ import {
|
|
|
10
10
|
} from "./chunk-SALQ65SM.js";
|
|
11
11
|
import {
|
|
12
12
|
partTestId
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-3EIRRLCQ.js";
|
|
14
14
|
import {
|
|
15
15
|
dependentsStyles,
|
|
16
16
|
hintStyles,
|
|
@@ -84,4 +84,4 @@ SettingGroup.displayName = "SettingGroup";
|
|
|
84
84
|
export {
|
|
85
85
|
SettingGroup
|
|
86
86
|
};
|
|
87
|
-
//# sourceMappingURL=chunk-
|
|
87
|
+
//# sourceMappingURL=chunk-GBB23QLL.js.map
|