@12-apps/ui 6.37.0 → 6.39.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/dist/_internal/components/data-display/AsyncStateContainer/AsyncStateContainer.js +4 -4
- package/dist/_internal/components/data-display/CardKit/CardKebab.js +2 -2
- package/dist/_internal/components/data-display/DataGrid/DataGrid.body.js +3 -2
- package/dist/_internal/components/data-display/DataGrid/DataGrid.cells.js +2 -1
- package/dist/_internal/components/data-display/DataGrid/DataGrid.js +4 -4
- package/dist/_internal/components/data-display/DataGrid/DataGrid.model.js +2 -1
- package/dist/_internal/components/data-display/DataViews/DataViewsBoard.js +2 -2
- package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +49 -49
- package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +61 -62
- package/dist/_internal/components/data-display/DataViews/DeleteViewDialog.js +4 -5
- package/dist/_internal/components/data-display/DataViews/ManageViewsDialog.js +4 -5
- package/dist/_internal/components/data-display/DataViews/SaveViewModal.js +9 -10
- package/dist/_internal/components/data-display/DataViews/base-card.js +4 -5
- package/dist/_internal/components/data-display/DataViews/base-list-card-geometry.js +6 -6
- package/dist/_internal/components/data-display/DataViews/base-list-card-slots.js +5 -5
- package/dist/_internal/components/data-display/DataViews/base-list-card.js +9 -10
- package/dist/_internal/components/data-display/DataViews/data-views-category-pill.js +8 -8
- package/dist/_internal/components/data-display/DataViews/data-views-columns-tab.js +2 -2
- package/dist/_internal/components/data-display/DataViews/data-views-columns.js +3 -3
- package/dist/_internal/components/data-display/DataViews/data-views-display-panel.js +6 -6
- package/dist/_internal/components/data-display/DataViews/data-views-display-tabs.js +3 -3
- package/dist/_internal/components/data-display/DataViews/data-views-empty.js +2 -2
- package/dist/_internal/components/data-display/DataViews/data-views-export.js +2 -2
- package/dist/_internal/components/data-display/DataViews/data-views-filter-panel.js +14 -14
- package/dist/_internal/components/data-display/DataViews/data-views-grid-bodies.js +12 -12
- package/dist/_internal/components/data-display/DataViews/data-views-grid-helpers.js +2 -2
- package/dist/_internal/components/data-display/DataViews/data-views-grid-parts.js +46 -46
- package/dist/_internal/components/data-display/DataViews/data-views-header-row.js +2 -2
- package/dist/_internal/components/data-display/DataViews/data-views-inline-bar.js +14 -14
- package/dist/_internal/components/data-display/DataViews/data-views-layout-context.js +1 -1
- package/dist/_internal/components/data-display/DataViews/data-views-more-fields.js +11 -11
- package/dist/_internal/components/data-display/DataViews/data-views-more-filters.js +12 -12
- package/dist/_internal/components/data-display/DataViews/data-views-overflow-costs.js +4 -3
- package/dist/_internal/components/data-display/DataViews/data-views-overflow.js +3 -2
- package/dist/_internal/components/data-display/DataViews/data-views-pagination.js +4 -4
- package/dist/_internal/components/data-display/DataViews/data-views-range-pill.js +2 -2
- package/dist/_internal/components/data-display/DataViews/data-views-scope-tabs.js +2 -2
- package/dist/_internal/components/data-display/DataViews/data-views-select-all-strip.js +2 -2
- package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +18 -18
- package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +18 -19
- package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +17 -17
- package/dist/_internal/components/data-display/DataViews/data-views-view-nav.js +2 -2
- package/dist/_internal/components/data-display/DataViews/list-card-rails.js +2 -2
- package/dist/_internal/components/data-display/DataViews/save-view-preview.js +2 -2
- package/dist/_internal/components/data-display/DataViews/use-data-views-state.js +4 -4
- package/dist/_internal/components/data-display/DescriptionItem/DescriptionItem.js +2 -2
- package/dist/_internal/components/data-display/FleetMap/FleetBody.js +12 -12
- package/dist/_internal/components/data-display/FleetMap/FleetCanvas.js +8 -8
- package/dist/_internal/components/data-display/FleetMap/FleetMap.js +13 -13
- package/dist/_internal/components/data-display/FleetMap/FleetRoster.js +3 -3
- package/dist/_internal/components/data-display/LazyImage/LazyImage.js +3 -3
- package/dist/_internal/components/data-display/LoadingState/LoadingState.js +3 -3
- package/dist/_internal/components/data-display/MapPreview/MapDecorations.js +2 -2
- package/dist/_internal/components/data-display/MapPreview/MapPreview.hooks.js +2 -2
- package/dist/_internal/components/data-display/MapPreview/MapPreview.js +7 -7
- package/dist/_internal/components/data-display/MapPreview/MapTiles.js +2 -2
- package/dist/_internal/components/data-display/MapPreview/StaticMapView.js +4 -4
- package/dist/_internal/components/data-display/MapPreview/mapProjection.js +3 -3
- package/dist/_internal/components/data-display/MapPreview/useMapPreview.js +3 -3
- package/dist/_internal/components/data-display/StatCard/StatCard.js +3 -3
- package/dist/_internal/components/data-display/Table/Table.helpers.js +5 -3
- package/dist/_internal/components/data-display/Table/Table.hooks.js +2 -1
- package/dist/_internal/components/data-display/Table/Table.js +4 -4
- package/dist/_internal/components/data-display/Table/TableParts.hooks.js +4 -2
- package/dist/_internal/components/data-display/Table/TableParts.js +4 -2
- package/dist/_internal/components/data-display/index.js +27 -27
- package/dist/_internal/components/feedback/Dialog/Dialog.js +3 -3
- package/dist/_internal/components/feedback/Dialog/Dialog.styles.js +2 -2
- package/dist/_internal/components/feedback/Modal/Modal.js +3 -2
- package/dist/_internal/components/feedback/Modal/Modal.styles.js +2 -1
- package/dist/_internal/components/feedback/Sonner/Sonner.js +2 -2
- package/dist/_internal/components/feedback/Sonner/SonnerToast.js +1 -1
- package/dist/_internal/components/feedback/StackedModal/StackedModal.js +4 -3
- package/dist/_internal/components/feedback/StackedModal/StackedModal.parts.js +3 -2
- package/dist/_internal/components/feedback/StackedModal/StackedModal.styles.js +2 -1
- package/dist/_internal/components/feedback/Toast/Toast.js +2 -1
- package/dist/_internal/components/feedback/TutorialOverlay/TutorialOverlay.geometry.js +1 -1
- package/dist/_internal/components/feedback/TutorialOverlay/TutorialOverlay.hooks.js +3 -2
- package/dist/_internal/components/feedback/TutorialOverlay/TutorialOverlay.js +5 -4
- package/dist/_internal/components/feedback/TutorialOverlay/TutorialStepBody.js +2 -1
- package/dist/_internal/components/feedback/index.js +14 -15
- package/dist/_internal/components/form/Calendar/Calendar.js +5 -4
- package/dist/_internal/components/form/Calendar/CalendarDay.js +2 -1
- package/dist/_internal/components/form/Calendar/CalendarDayCell.js +3 -2
- package/dist/_internal/components/form/Calendar/CalendarMonth.js +4 -3
- package/dist/_internal/components/form/DateRangePicker/DateRangePicker.js +5 -5
- package/dist/_internal/components/form/Switch/Switch.js +4 -4
- package/dist/_internal/components/form/Switch/Switch.metrics.js +5 -1
- package/dist/_internal/components/form/Switch/Switch.parts.js +3 -3
- package/dist/_internal/components/form/Switch/Switch.styles.js +2 -2
- package/dist/_internal/components/form/index.js +9 -9
- package/dist/_internal/components/form/total-form/FormErrorSnackbar.js +3 -2
- package/dist/_internal/components/index.js +117 -118
- package/dist/_internal/components/layout/Accordion/Accordion.js +3 -2
- package/dist/_internal/components/layout/Accordion/Accordion.styles.js +2 -1
- package/dist/_internal/components/layout/Box/Box.js +1 -1
- package/dist/_internal/components/layout/Card/Card.js +3 -3
- package/dist/_internal/components/layout/Card/Card.styles.js +2 -2
- package/dist/_internal/components/layout/CardGrid/CardGrid.js +2 -1
- package/dist/_internal/components/layout/Collapsible/Collapsible.helpers.js +2 -1
- package/dist/_internal/components/layout/Collapsible/Collapsible.js +3 -2
- package/dist/_internal/components/layout/ContentToolbar/ColumnsMenu.js +1 -1
- package/dist/_internal/components/layout/ContentToolbar/ContentToolbar.js +1 -1
- package/dist/_internal/components/layout/ContentToolbar/FilterTrigger.js +1 -1
- package/dist/_internal/components/layout/ContentToolbar/MultiSelectDropdown.js +1 -1
- package/dist/_internal/components/layout/ContentToolbar/SavedViewsMenu.js +1 -1
- package/dist/_internal/components/layout/ContentToolbar/SortByDropdown.js +1 -1
- package/dist/_internal/components/layout/ContentToolbar/ViewSelector.js +1 -1
- package/dist/_internal/components/layout/Dashboard/Dashboard.js +2 -2
- package/dist/_internal/components/layout/Dashboard/DashboardParts.js +1 -1
- package/dist/_internal/components/layout/Drawer/Drawer.js +2 -1
- package/dist/_internal/components/layout/Resizable/Resizable.helpers.js +8 -3
- package/dist/_internal/components/layout/Resizable/Resizable.hooks.js +3 -2
- package/dist/_internal/components/layout/Resizable/Resizable.js +4 -3
- package/dist/_internal/components/layout/ScrollArea/ScrollArea.helpers.js +1 -1
- package/dist/_internal/components/layout/ScrollArea/ScrollArea.js +6 -5
- package/dist/_internal/components/layout/ScrollArea/ScrollArea.styles.js +6 -3
- package/dist/_internal/components/layout/ScrollArea/ScrollAreaContent.js +2 -1
- package/dist/_internal/components/layout/ScrollArea/ScrollViewport.js +3 -2
- package/dist/_internal/components/layout/Separator/Separator.js +4 -2
- package/dist/_internal/components/layout/Separator/Separator.styles.js +3 -1
- package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.items.js +3 -3
- package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.js +8 -8
- package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.rail.js +4 -4
- package/dist/_internal/components/layout/SettingsLayout/SettingsLayout.styles.js +6 -5
- package/dist/_internal/components/layout/SettingsLayout/SettingsPanel.js +5 -5
- package/dist/_internal/components/layout/SettingsLayout/SettingsSectionChips.js +3 -3
- package/dist/_internal/components/layout/SettingsLayout/SettingsSectionHeader.js +2 -2
- package/dist/_internal/components/layout/SettingsLayout/SettingsStatusMarker.js +2 -2
- package/dist/_internal/components/layout/Sidebar/Sidebar.js +2 -1
- package/dist/_internal/components/layout/Skeleton/Skeleton.js +3 -2
- package/dist/_internal/components/layout/Skeleton/Skeleton.styles.js +6 -3
- package/dist/_internal/components/layout/Spacer/Spacer.js +2 -1
- package/dist/_internal/components/layout/Stack/Stack.js +2 -2
- package/dist/_internal/components/layout/TableFilter/TableFilter.js +1 -1
- package/dist/_internal/components/layout/index.js +31 -32
- package/dist/_internal/components/navigation/AppHeader/AppHeader.brand.js +1 -1
- package/dist/_internal/components/navigation/AppHeader/AppHeader.details.js +3 -4
- package/dist/_internal/components/navigation/AppHeader/AppHeader.identity.js +2 -2
- package/dist/_internal/components/navigation/AppHeader/AppHeader.js +1 -1
- package/dist/_internal/components/navigation/Breadcrumbs/BreadcrumbEntry.js +2 -2
- package/dist/_internal/components/navigation/Breadcrumbs/Breadcrumbs.js +3 -3
- package/dist/_internal/components/navigation/Breadcrumbs/Breadcrumbs.styles.js +1 -1
- package/dist/_internal/components/navigation/CommandPalette/CommandPalette.js +3 -3
- package/dist/_internal/components/navigation/CommandPalette/CommandPaletteResults.js +2 -2
- package/dist/_internal/components/navigation/CommandPalette/ShortcutChip.js +1 -1
- package/dist/_internal/components/navigation/ContextMenu/ContextMenu.js +1 -1
- package/dist/_internal/components/navigation/DropdownMenu/DropdownMenu.js +1 -1
- package/dist/_internal/components/navigation/NavigationMenu/NavigationMegaSection.js +4 -4
- package/dist/_internal/components/navigation/NavigationMenu/NavigationMenu.js +6 -6
- package/dist/_internal/components/navigation/NavigationMenu/NavigationMenu.shell.js +2 -2
- package/dist/_internal/components/navigation/NavigationMenu/NavigationMenu.styles.js +1 -1
- package/dist/_internal/components/navigation/NavigationMenu/NavigationMenuItem.js +2 -2
- package/dist/_internal/components/navigation/NavigationMenu/NavigationStandardBody.js +4 -4
- package/dist/_internal/components/navigation/Pagination/Pagination.js +3 -3
- package/dist/_internal/components/navigation/Pagination/Pagination.styles.js +1 -1
- package/dist/_internal/components/navigation/Pagination/PaginationParts.js +2 -1
- package/dist/_internal/components/navigation/Tabs/Tabs.js +10 -3
- package/dist/_internal/components/navigation/Tabs/Tabs.styles.js +8 -1
- package/dist/_internal/components/navigation/Tabs/TabsPanel.js +2 -1
- package/dist/_internal/components/navigation/index.js +26 -27
- package/dist/_internal/components/typography/Blockquote/Blockquote.js +1 -1
- package/dist/_internal/components/typography/Code/Code.js +1 -1
- package/dist/_internal/components/typography/Text/Text.js +1 -1
- package/dist/_internal/components/typography/index.js +3 -3
- package/dist/_internal/components/utility/AnimatedIcon/AnimatedIcon.animations.js +2 -1
- package/dist/_internal/components/utility/AnimatedIcon/AnimatedIcon.js +3 -3
- package/dist/_internal/components/utility/AnimatedIcon/AnimatedIcon.styles.js +2 -2
- package/dist/_internal/components/utility/AspectRatio/AspectRatio.js +2 -1
- package/dist/_internal/components/utility/InfiniteScroll/InfiniteScroll.hooks.js +1 -1
- package/dist/_internal/components/utility/InfiniteScroll/InfiniteScroll.js +4 -3
- package/dist/_internal/components/utility/InfiniteScroll/InfiniteScroll.parts.js +2 -1
- package/dist/_internal/components/utility/VirtualList/VirtualList.hooks.js +6 -3
- package/dist/_internal/components/utility/VirtualList/VirtualList.js +3 -2
- package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.js +3 -3
- package/dist/_internal/components/utility/WorkflowStep/WorkflowStep.parts.js +1 -1
- package/dist/_internal/components/utility/WorkflowStep/WorkflowStepRow.js +2 -2
- package/dist/_internal/components/utility/index.js +12 -12
- package/dist/_internal/social-login-button/social-login-button.js +6 -7
- package/dist/_internal/tokens/shadow.js +19 -8
- package/dist/_internal/tokens/shadow.js.map +1 -1
- package/dist/_internal/user-avatar/user-avatar.js +4 -5
- package/dist/{chunk-J2DAQQQH.js → chunk-222HN7GK.js} +33 -64
- package/dist/chunk-222HN7GK.js.map +1 -0
- package/dist/{chunk-2BIVCYTO.js → chunk-27LOJVR3.js} +5 -5
- package/dist/{chunk-BLJDCMFU.js → chunk-2ARVNCVU.js} +7 -7
- package/dist/chunk-2ARVNCVU.js.map +1 -0
- package/dist/{chunk-CRZXSZ5O.js → chunk-2S752BIJ.js} +2 -2
- package/dist/{chunk-IYTBTK2M.js → chunk-2WU52FLP.js} +19 -30
- package/dist/chunk-2WU52FLP.js.map +1 -0
- package/dist/{chunk-RSQMPCCR.js → chunk-34643ATX.js} +10 -4
- package/dist/chunk-34643ATX.js.map +1 -0
- package/dist/{chunk-6GRZ77IS.js → chunk-3AIRFAI3.js} +13 -12
- package/dist/chunk-3AIRFAI3.js.map +1 -0
- package/dist/{chunk-Q73PTVNO.js → chunk-3FNXOCBD.js} +24 -12
- package/dist/chunk-3FNXOCBD.js.map +1 -0
- package/dist/{chunk-BAQBUKDU.js → chunk-3KREF4ZF.js} +2 -2
- package/dist/{chunk-EL7CMURV.js → chunk-3LSIFHQK.js} +3 -3
- package/dist/chunk-3LSIFHQK.js.map +1 -0
- package/dist/{chunk-MP4VSWHK.js → chunk-3NJMNMWB.js} +12 -2
- package/dist/chunk-3NJMNMWB.js.map +1 -0
- package/dist/{chunk-N52O2OKZ.js → chunk-3NNO6YIH.js} +8 -3
- package/dist/chunk-3NNO6YIH.js.map +1 -0
- package/dist/{chunk-SYN46YL6.js → chunk-3RMDIO4G.js} +3 -3
- package/dist/{chunk-S3D5VBHW.js → chunk-3YOXVNO4.js} +7 -7
- package/dist/{chunk-MJ3BVWPZ.js → chunk-43G3WMYN.js} +12 -7
- package/dist/chunk-43G3WMYN.js.map +1 -0
- package/dist/{chunk-E7MSDXED.js → chunk-43H66TVT.js} +12 -5
- package/dist/chunk-43H66TVT.js.map +1 -0
- package/dist/{chunk-IL7JZKXY.js → chunk-442FSG7G.js} +3 -3
- package/dist/{chunk-JL75FJRG.js → chunk-4ALF5PB5.js} +4 -4
- package/dist/{chunk-DYVAOEW4.js → chunk-4D4LLSQC.js} +6 -5
- package/dist/chunk-4D4LLSQC.js.map +1 -0
- package/dist/{chunk-NEGCJNGJ.js → chunk-4G47KBTP.js} +9 -9
- package/dist/chunk-4G47KBTP.js.map +1 -0
- package/dist/{chunk-MVXFMIVZ.js → chunk-4GB46HLK.js} +8 -4
- package/dist/chunk-4GB46HLK.js.map +1 -0
- package/dist/{chunk-CS3KOKL3.js → chunk-4GWHYLEB.js} +2 -2
- package/dist/{chunk-XJPJ6ESI.js → chunk-4OAKGKK5.js} +3 -3
- package/dist/{chunk-4OEKIFBC.js → chunk-4VMFS3VJ.js} +6 -3
- package/dist/chunk-4VMFS3VJ.js.map +1 -0
- package/dist/{chunk-6CTPDNNX.js → chunk-52G2KRL4.js} +14 -14
- package/dist/chunk-52G2KRL4.js.map +1 -0
- package/dist/{chunk-4CHROSWR.js → chunk-5ETBB2DG.js} +2 -2
- package/dist/{chunk-E7T3A4IR.js → chunk-5JCGBCFJ.js} +2 -2
- package/dist/{chunk-ATSHKSSD.js → chunk-5KNDAC24.js} +20 -7
- package/dist/chunk-5KNDAC24.js.map +1 -0
- package/dist/{chunk-ULTOQ6ZV.js → chunk-5LWB4BYX.js} +80 -89
- package/dist/chunk-5LWB4BYX.js.map +1 -0
- package/dist/{chunk-FC7NQ6XM.js → chunk-5MW7OYBM.js} +2 -2
- package/dist/{chunk-46UPILLK.js → chunk-5NT2M2JI.js} +2 -2
- package/dist/{chunk-MK4CH4VT.js → chunk-5OUEKIWQ.js} +14 -12
- package/dist/chunk-5OUEKIWQ.js.map +1 -0
- package/dist/{chunk-GHXFCMFP.js → chunk-5QAJ3Y5F.js} +3 -3
- package/dist/{chunk-GHXFCMFP.js.map → chunk-5QAJ3Y5F.js.map} +1 -1
- package/dist/{chunk-CPTY6UZ6.js → chunk-6KEXHOIF.js} +5 -4
- package/dist/chunk-6KEXHOIF.js.map +1 -0
- package/dist/{chunk-H5BEWPEY.js → chunk-6N2EDWMG.js} +2 -2
- package/dist/{chunk-BW62QQAG.js → chunk-6N4AA2Y7.js} +2 -2
- package/dist/{chunk-EFHIMCJN.js → chunk-6P2OFMBX.js} +11 -9
- package/dist/chunk-6P2OFMBX.js.map +1 -0
- package/dist/{chunk-GJQYM3PM.js → chunk-6PU3JYVY.js} +2 -2
- package/dist/{chunk-GUW5BUK7.js → chunk-6WBKOM5K.js} +15 -7
- package/dist/chunk-6WBKOM5K.js.map +1 -0
- package/dist/{chunk-7EIOXZWL.js → chunk-74P3YX7R.js} +4 -4
- package/dist/{chunk-VYSFKR32.js → chunk-75CGLX6Q.js} +3 -3
- package/dist/{chunk-VYSFKR32.js.map → chunk-75CGLX6Q.js.map} +1 -1
- package/dist/{chunk-LVEG6XQL.js → chunk-76X6JRVI.js} +19 -33
- package/dist/chunk-76X6JRVI.js.map +1 -0
- package/dist/{chunk-2NLYGZP3.js → chunk-77JL5XVD.js} +13 -9
- package/dist/chunk-77JL5XVD.js.map +1 -0
- package/dist/{chunk-PUBPZOQJ.js → chunk-AG3DY5TH.js} +8 -5
- package/dist/chunk-AG3DY5TH.js.map +1 -0
- package/dist/{chunk-T3WHW7ZC.js → chunk-BAZXVFLR.js} +10 -6
- package/dist/chunk-BAZXVFLR.js.map +1 -0
- package/dist/{chunk-7F7TTOYN.js → chunk-BEGTLELZ.js} +7 -6
- package/dist/chunk-BEGTLELZ.js.map +1 -0
- package/dist/{chunk-VT5HQ2AD.js → chunk-BFMDA6UO.js} +3 -3
- package/dist/{chunk-R75DZ3AK.js → chunk-BVLMKSHX.js} +2 -2
- package/dist/{chunk-75LOTMSN.js → chunk-BWHOCNGW.js} +5 -5
- package/dist/chunk-BWHOCNGW.js.map +1 -0
- package/dist/{chunk-PMP6WJJS.js → chunk-BWMHGENX.js} +20 -19
- package/dist/chunk-BWMHGENX.js.map +1 -0
- package/dist/{chunk-TUBCN4DJ.js → chunk-CB6DTWD5.js} +7 -7
- package/dist/chunk-CB6DTWD5.js.map +1 -0
- package/dist/{chunk-CAHWCSRE.js → chunk-D46SLMCX.js} +22 -8
- package/dist/chunk-D46SLMCX.js.map +1 -0
- package/dist/{chunk-FFOQZRFC.js → chunk-D4FZ3ANG.js} +15 -5
- package/dist/chunk-D4FZ3ANG.js.map +1 -0
- package/dist/{chunk-2OIP3T5O.js → chunk-DBFRCTI5.js} +4 -4
- package/dist/{chunk-2OIP3T5O.js.map → chunk-DBFRCTI5.js.map} +1 -1
- package/dist/{chunk-HNPWZ3W2.js → chunk-DDRKYNPB.js} +4 -4
- package/dist/{chunk-DLJGBJZW.js → chunk-DGMDQHMI.js} +16 -9
- package/dist/chunk-DGMDQHMI.js.map +1 -0
- package/dist/{chunk-IAGOUTI6.js → chunk-DNT5PZLF.js} +21 -12
- package/dist/chunk-DNT5PZLF.js.map +1 -0
- package/dist/{chunk-HU7TX7RB.js → chunk-DUBTI4DI.js} +4 -4
- package/dist/{chunk-DZA7RSLX.js → chunk-DVSO3EG6.js} +19 -11
- package/dist/chunk-DVSO3EG6.js.map +1 -0
- package/dist/{chunk-RMCNEKBZ.js → chunk-DW6F7354.js} +2 -2
- package/dist/{chunk-Q4BQYYPU.js → chunk-E2QIKJX2.js} +11 -5
- package/dist/chunk-E2QIKJX2.js.map +1 -0
- package/dist/{chunk-XJUEHG72.js → chunk-EERUSI52.js} +2 -2
- package/dist/{chunk-NDNYD4FG.js → chunk-EHYI2WCJ.js} +5 -5
- package/dist/{chunk-NB3FGWU4.js → chunk-EQXIW5MQ.js} +2 -2
- package/dist/{chunk-QAP3FW33.js → chunk-ERY6D2OV.js} +35 -23
- package/dist/chunk-ERY6D2OV.js.map +1 -0
- package/dist/{chunk-NPP44TQG.js → chunk-EYZ6QBTV.js} +2 -2
- package/dist/{chunk-NPP44TQG.js.map → chunk-EYZ6QBTV.js.map} +1 -1
- package/dist/{chunk-2ZIHZLF5.js → chunk-F44R7US6.js} +4 -4
- package/dist/{chunk-AROBXRC5.js → chunk-F7JTIHV5.js} +18 -7
- package/dist/chunk-F7JTIHV5.js.map +1 -0
- package/dist/{chunk-U342T7ZR.js → chunk-FOCU4QT5.js} +13 -10
- package/dist/chunk-FOCU4QT5.js.map +1 -0
- package/dist/{chunk-35S6QI5G.js → chunk-FX26DAFF.js} +2 -2
- package/dist/{chunk-FYTLKHEN.js → chunk-FYKFQPVT.js} +19 -18
- package/dist/chunk-FYKFQPVT.js.map +1 -0
- package/dist/{chunk-TVL5V2JK.js → chunk-GGMB6LJH.js} +7 -3
- package/dist/chunk-GGMB6LJH.js.map +1 -0
- package/dist/{chunk-AYLEZM6T.js → chunk-GLFTIGOF.js} +3 -3
- package/dist/{chunk-QEG3P5D4.js → chunk-GLHNMTP6.js} +13 -13
- package/dist/{chunk-7UZ2TFIK.js → chunk-GNCSDUGY.js} +12 -4
- package/dist/chunk-GNCSDUGY.js.map +1 -0
- package/dist/{chunk-L4UP5VYS.js → chunk-GVH7C2PT.js} +2 -2
- package/dist/{chunk-MBSYD3ZU.js → chunk-GWFAINQ7.js} +3 -3
- package/dist/chunk-GWFAINQ7.js.map +1 -0
- package/dist/{chunk-YU26GBNX.js → chunk-H3AQQOTI.js} +9 -4
- package/dist/chunk-H3AQQOTI.js.map +1 -0
- package/dist/{chunk-HTZNB6IV.js → chunk-H5ZTIELC.js} +23 -8
- package/dist/chunk-H5ZTIELC.js.map +1 -0
- package/dist/{chunk-AER4245J.js → chunk-H67EL3CG.js} +6 -6
- package/dist/{chunk-GSFNH4C5.js → chunk-HBP2OU4Q.js} +15 -8
- package/dist/chunk-HBP2OU4Q.js.map +1 -0
- package/dist/{chunk-57JLS55D.js → chunk-HBRQPG7H.js} +7 -7
- package/dist/{chunk-3D6HXKZM.js → chunk-HDJQDMHB.js} +18 -13
- package/dist/chunk-HDJQDMHB.js.map +1 -0
- package/dist/{chunk-HGMBY5LP.js → chunk-HQWJUHR4.js} +18 -11
- package/dist/chunk-HQWJUHR4.js.map +1 -0
- package/dist/{chunk-UZ6AUTE6.js → chunk-I3F4C5SS.js} +7 -7
- package/dist/{chunk-L7SFH3ED.js → chunk-I7GSRTGQ.js} +37 -28
- package/dist/chunk-I7GSRTGQ.js.map +1 -0
- package/dist/{chunk-Q4CAZ2TP.js → chunk-IG23YZZR.js} +6 -5
- package/dist/chunk-IG23YZZR.js.map +1 -0
- package/dist/{chunk-5W4BLTDI.js → chunk-IWFENXST.js} +7 -6
- package/dist/chunk-IWFENXST.js.map +1 -0
- package/dist/{chunk-HXEBKOSM.js → chunk-J5UZB6Y6.js} +2 -2
- package/dist/chunk-J5UZB6Y6.js.map +1 -0
- package/dist/{chunk-4CXEWFKO.js → chunk-J5VWGQSR.js} +2 -2
- package/dist/{chunk-AJ5SDHX5.js → chunk-JCL7WK4G.js} +2 -2
- package/dist/{chunk-MTFCPPZ5.js → chunk-JWZJSXI5.js} +3 -2
- package/dist/chunk-JWZJSXI5.js.map +1 -0
- package/dist/{chunk-5CKDRLRN.js → chunk-JXECOCNA.js} +35 -19
- package/dist/chunk-JXECOCNA.js.map +1 -0
- package/dist/{chunk-WUTHROII.js → chunk-JYWF76Z5.js} +11 -5
- package/dist/chunk-JYWF76Z5.js.map +1 -0
- package/dist/{chunk-B76QCDCE.js → chunk-K4L42FF6.js} +6 -3
- package/dist/chunk-K4L42FF6.js.map +1 -0
- package/dist/{chunk-4JFL62K3.js → chunk-K7FSTB2K.js} +3 -3
- package/dist/{chunk-WE3LJPRN.js → chunk-KE473LK6.js} +2 -2
- package/dist/{chunk-TBF2CPJW.js → chunk-KIHGTL2D.js} +21 -11
- package/dist/chunk-KIHGTL2D.js.map +1 -0
- package/dist/{chunk-3T5Z5HXF.js → chunk-KM3Y5TCG.js} +40 -36
- package/dist/chunk-KM3Y5TCG.js.map +1 -0
- package/dist/{chunk-C55AWF3U.js → chunk-KRQUPE4K.js} +4 -4
- package/dist/{chunk-SJO3K7SB.js → chunk-KXLUMEDX.js} +4 -4
- package/dist/{chunk-RWTFZ7J5.js → chunk-L4G5BZFF.js} +22 -13
- package/dist/chunk-L4G5BZFF.js.map +1 -0
- package/dist/{chunk-HB7ISSLK.js → chunk-L5RQIQIP.js} +26 -22
- package/dist/chunk-L5RQIQIP.js.map +1 -0
- package/dist/{chunk-CQPFSEJB.js → chunk-L7NQCLFU.js} +2 -2
- package/dist/{chunk-DVAAUWTC.js → chunk-LCHCE2G5.js} +2 -2
- package/dist/{chunk-G4HBNILE.js → chunk-LEHMWJNZ.js} +3 -3
- package/dist/{chunk-OATHOXIU.js → chunk-MC4KYGSX.js} +8 -8
- package/dist/chunk-MC4KYGSX.js.map +1 -0
- package/dist/{chunk-P6TNXBDA.js → chunk-MYKWJCR7.js} +9 -9
- package/dist/chunk-MYKWJCR7.js.map +1 -0
- package/dist/{chunk-YVUD3MY4.js → chunk-N23GCN5U.js} +7 -4
- package/dist/chunk-N23GCN5U.js.map +1 -0
- package/dist/{chunk-2TJOCI54.js → chunk-NCEQWEXT.js} +3 -3
- package/dist/{chunk-2TJOCI54.js.map → chunk-NCEQWEXT.js.map} +1 -1
- package/dist/{chunk-IVIHRZEY.js → chunk-NDMPXMW2.js} +12 -8
- package/dist/chunk-NDMPXMW2.js.map +1 -0
- package/dist/{chunk-UUUMNJPP.js → chunk-NLYNRE7L.js} +10 -10
- package/dist/chunk-NLYNRE7L.js.map +1 -0
- package/dist/{chunk-KLWW67WP.js → chunk-NOKN4HRK.js} +12 -11
- package/dist/chunk-NOKN4HRK.js.map +1 -0
- package/dist/{chunk-LIG7TKIB.js → chunk-NYFNF7I5.js} +11 -6
- package/dist/chunk-NYFNF7I5.js.map +1 -0
- package/dist/{chunk-KK57AHWS.js → chunk-OAEYCKBN.js} +2 -2
- package/dist/{chunk-JGRE56GQ.js → chunk-OB56SZGL.js} +2 -2
- package/dist/{chunk-TQ6FPOPD.js → chunk-ODW2D5PN.js} +39 -30
- package/dist/chunk-ODW2D5PN.js.map +1 -0
- package/dist/{chunk-VRDNUY4H.js → chunk-OHC3F7GJ.js} +4 -4
- package/dist/chunk-OHC3F7GJ.js.map +1 -0
- package/dist/{chunk-E4TNDTWV.js → chunk-OL2BEJZR.js} +2 -2
- package/dist/{chunk-ZTYUKEN3.js → chunk-OVXSQQDK.js} +12 -7
- package/dist/chunk-OVXSQQDK.js.map +1 -0
- package/dist/{chunk-ZQL5RXVE.js → chunk-PA3AA55Q.js} +2 -2
- package/dist/{chunk-ZQL5RXVE.js.map → chunk-PA3AA55Q.js.map} +1 -1
- package/dist/{chunk-IKLOIONQ.js → chunk-PCBZYORN.js} +3 -3
- package/dist/{chunk-CQLPDY2J.js → chunk-PRIBOWX4.js} +3 -3
- package/dist/{chunk-F42MJOHM.js → chunk-PVM7XTLZ.js} +64 -62
- package/dist/chunk-PVM7XTLZ.js.map +1 -0
- package/dist/{chunk-LT4NEKXB.js → chunk-QA2ZGCRL.js} +3 -3
- package/dist/{chunk-3TDVGZZN.js → chunk-QBTBRJ2Q.js} +37 -13
- package/dist/chunk-QBTBRJ2Q.js.map +1 -0
- package/dist/{chunk-2E2WOBID.js → chunk-QGFBIUOK.js} +5 -5
- package/dist/chunk-QGFBIUOK.js.map +1 -0
- package/dist/{chunk-2WFDHFK4.js → chunk-QNCWSDXE.js} +26 -11
- package/dist/chunk-QNCWSDXE.js.map +1 -0
- package/dist/{chunk-PQECNGDE.js → chunk-QSRZOXQI.js} +2 -2
- package/dist/{chunk-RHIDWUK7.js → chunk-QUWK7SYN.js} +1 -2
- package/dist/chunk-QUWK7SYN.js.map +1 -0
- package/dist/{chunk-ROT57BP4.js → chunk-R2XVTUVR.js} +2 -2
- package/dist/{chunk-UN5INW6K.js → chunk-R53ZOW4B.js} +8 -4
- package/dist/chunk-R53ZOW4B.js.map +1 -0
- package/dist/{chunk-MVKYNDT2.js → chunk-RKROWJVF.js} +11 -9
- package/dist/chunk-RKROWJVF.js.map +1 -0
- package/dist/{chunk-DCJSHYE5.js → chunk-RSDYS5B3.js} +4 -4
- package/dist/{chunk-NYZO3JNB.js → chunk-RXJQA3FQ.js} +2 -3
- package/dist/chunk-RXJQA3FQ.js.map +1 -0
- package/dist/{chunk-N5GVW6RO.js → chunk-S6IWKDWT.js} +2 -2
- package/dist/{chunk-DB2ZFZVW.js → chunk-SBIZXZPP.js} +3 -3
- package/dist/{chunk-NCPWLHZT.js → chunk-SKT2V2OX.js} +3 -3
- package/dist/{chunk-EOW2ECB3.js → chunk-SNURSSTN.js} +2 -2
- package/dist/{chunk-GRDPGHQJ.js → chunk-SV6JGFHG.js} +9 -5
- package/dist/chunk-SV6JGFHG.js.map +1 -0
- package/dist/{chunk-CZBND7AY.js → chunk-T7DE44SP.js} +2 -2
- package/dist/{chunk-D5SZXH7Q.js → chunk-TNBJ4DK4.js} +7 -3
- package/dist/chunk-TNBJ4DK4.js.map +1 -0
- package/dist/{chunk-3CVTQZQJ.js → chunk-TNYKM4UU.js} +13 -9
- package/dist/chunk-TNYKM4UU.js.map +1 -0
- package/dist/{chunk-3VMGE7CU.js → chunk-TZFBJ47T.js} +3 -3
- package/dist/chunk-TZFBJ47T.js.map +1 -0
- package/dist/{chunk-VFHGILXI.js → chunk-U3DBQXPI.js} +20 -17
- package/dist/chunk-U3DBQXPI.js.map +1 -0
- package/dist/{chunk-QKPD322X.js → chunk-UFNIS7KC.js} +2 -2
- package/dist/chunk-UFNIS7KC.js.map +1 -0
- package/dist/{chunk-BNEWMFVB.js → chunk-UGGJ3KDT.js} +2 -2
- package/dist/{chunk-L4QCIUTJ.js → chunk-UMNXSQ7I.js} +3 -3
- package/dist/{chunk-L4QCIUTJ.js.map → chunk-UMNXSQ7I.js.map} +1 -1
- package/dist/{chunk-2CTTASUD.js → chunk-V5EWCJBT.js} +7 -4
- package/dist/chunk-V5EWCJBT.js.map +1 -0
- package/dist/{chunk-236V2GRH.js → chunk-VCBV5JM7.js} +49 -41
- package/dist/chunk-VCBV5JM7.js.map +1 -0
- package/dist/{chunk-KREWQAEV.js → chunk-VIRYHNEM.js} +2 -2
- package/dist/{chunk-PT2XADGH.js → chunk-VPRNKJHP.js} +9 -6
- package/dist/chunk-VPRNKJHP.js.map +1 -0
- package/dist/{chunk-JXUWWPZR.js → chunk-VQYR64QB.js} +14 -8
- package/dist/chunk-VQYR64QB.js.map +1 -0
- package/dist/{chunk-72DKEBJM.js → chunk-VRPREI27.js} +3 -3
- package/dist/chunk-VRPREI27.js.map +1 -0
- package/dist/{chunk-N6CSXHFJ.js → chunk-WN5PNP6F.js} +2 -2
- package/dist/{chunk-6QLPSMTA.js → chunk-XEWMY4ZM.js} +52 -47
- package/dist/chunk-XEWMY4ZM.js.map +1 -0
- package/dist/{chunk-XR46FSOH.js → chunk-XIG3DXXX.js} +2 -2
- package/dist/{chunk-GHTBUJ6E.js → chunk-XRUW7DMH.js} +2 -2
- package/dist/{chunk-CSTAQX2B.js → chunk-XWZJLXJT.js} +7 -6
- package/dist/chunk-XWZJLXJT.js.map +1 -0
- package/dist/{chunk-PMOEG36E.js → chunk-XZJM6EPC.js} +8 -6
- package/dist/chunk-XZJM6EPC.js.map +1 -0
- package/dist/{chunk-QF6LTUCE.js → chunk-Y2X7LYIN.js} +4 -4
- package/dist/chunk-Y2X7LYIN.js.map +1 -0
- package/dist/{chunk-MBC55H6M.js → chunk-Y5UTYBZW.js} +12 -6
- package/dist/chunk-Y5UTYBZW.js.map +1 -0
- package/dist/{chunk-WTOYEWW6.js → chunk-YBH4SPMM.js} +4 -3
- package/dist/chunk-YBH4SPMM.js.map +1 -0
- package/dist/{chunk-JLQGRZMN.js → chunk-YCCY77W5.js} +3 -3
- package/dist/{chunk-5QWQR7XT.js → chunk-YHGOPZXW.js} +11 -8
- package/dist/chunk-YHGOPZXW.js.map +1 -0
- package/dist/{chunk-6BDYC4RA.js → chunk-YRSR5LVZ.js} +3 -3
- package/dist/{chunk-57JY4OI2.js → chunk-YUXDVW62.js} +3 -3
- package/dist/chunk-YUXDVW62.js.map +1 -0
- package/dist/{chunk-DF4K5XVW.js → chunk-YZVR5ROE.js} +14 -6
- package/dist/chunk-YZVR5ROE.js.map +1 -0
- package/dist/{chunk-RNEYZTE4.js → chunk-Z6MCTGIK.js} +2 -2
- package/dist/{chunk-RNEYZTE4.js.map → chunk-Z6MCTGIK.js.map} +1 -1
- package/dist/{chunk-AUSUCZYR.js → chunk-ZBVU2YWV.js} +5 -5
- package/dist/chunk-ZBVU2YWV.js.map +1 -0
- package/dist/{chunk-VZIB5W5L.js → chunk-ZGCPDA3F.js} +2 -2
- package/dist/data-display/AsyncStateContainer.js +4 -4
- package/dist/data-display/CardKit.js +2 -2
- package/dist/data-display/DataGrid.js +4 -4
- package/dist/data-display/DataViews.js +68 -69
- package/dist/data-display/DescriptionItem.js +2 -2
- package/dist/data-display/FleetMap.js +13 -13
- package/dist/data-display/LazyImage.js +3 -3
- package/dist/data-display/LoadingState.js +3 -3
- package/dist/data-display/MapPreview.js +7 -7
- package/dist/data-display/StatCard.js +3 -3
- package/dist/data-display/Table.js +4 -4
- package/dist/feedback/Dialog.js +3 -3
- package/dist/feedback/Modal.js +3 -2
- package/dist/feedback/Sonner.js +2 -2
- package/dist/feedback/StackedModal.js +4 -3
- package/dist/feedback/Toast.js +2 -1
- package/dist/feedback/TutorialOverlay.js +5 -4
- package/dist/form/Calendar.js +5 -4
- package/dist/form/DateRangePicker.js +5 -5
- package/dist/form/Switch.js +4 -4
- package/dist/form/total-form.js +2 -2
- package/dist/layout/Accordion.js +3 -2
- package/dist/layout/Box.js +1 -1
- package/dist/layout/Card.js +3 -3
- package/dist/layout/CardGrid.js +2 -1
- package/dist/layout/Collapsible.js +3 -2
- package/dist/layout/ContentToolbar.js +7 -7
- package/dist/layout/Dashboard.js +2 -2
- package/dist/layout/Drawer.js +2 -1
- package/dist/layout/Resizable.js +4 -3
- package/dist/layout/ScrollArea.js +6 -5
- package/dist/layout/Separator.js +4 -2
- package/dist/layout/SettingsLayout.js +8 -8
- package/dist/layout/Sidebar.js +2 -1
- package/dist/layout/Skeleton.js +3 -2
- package/dist/layout/Spacer.js +2 -1
- package/dist/layout/Stack.js +2 -2
- package/dist/layout/TableFilter.js +1 -1
- package/dist/native/form/Switch.js +3 -1
- package/dist/native/form/Switch.js.map +1 -1
- package/dist/navigation/AppHeader.js +6 -7
- package/dist/navigation/Breadcrumbs.js +3 -3
- package/dist/navigation/CommandPalette.js +3 -3
- package/dist/navigation/ContextMenu.js +1 -1
- package/dist/navigation/DropdownMenu.js +1 -1
- package/dist/navigation/NavigationMenu.js +6 -6
- package/dist/navigation/Pagination.js +3 -3
- package/dist/navigation/Tabs.js +10 -3
- package/dist/social-login-button.js +6 -7
- package/dist/types/components/data-display/DataGrid/DataGrid.body.d.ts.map +1 -1
- package/dist/types/components/data-display/DataGrid/DataGrid.cells.d.ts +4 -2
- package/dist/types/components/data-display/DataGrid/DataGrid.cells.d.ts.map +1 -1
- package/dist/types/components/data-display/DataGrid/DataGrid.model.d.ts +7 -1
- package/dist/types/components/data-display/DataGrid/DataGrid.model.d.ts.map +1 -1
- package/dist/types/components/data-display/DataGrid/DataGrid.types.d.ts +10 -4
- package/dist/types/components/data-display/DataGrid/DataGrid.types.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-columns.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-grid-helpers.d.ts +2 -0
- package/dist/types/components/data-display/DataViews/data-views-grid-helpers.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-layout-context.d.ts +7 -3
- package/dist/types/components/data-display/DataViews/data-views-layout-context.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-overflow-costs.d.ts +19 -9
- package/dist/types/components/data-display/DataViews/data-views-overflow-costs.d.ts.map +1 -1
- package/dist/types/components/data-display/DataViews/data-views-overflow.d.ts.map +1 -1
- package/dist/types/components/data-display/MapPreview/MapTiles.d.ts.map +1 -1
- package/dist/types/components/data-display/MapPreview/mapProjection.d.ts +6 -1
- package/dist/types/components/data-display/MapPreview/mapProjection.d.ts.map +1 -1
- package/dist/types/components/data-display/Table/Table.helpers.d.ts +6 -0
- package/dist/types/components/data-display/Table/Table.helpers.d.ts.map +1 -1
- package/dist/types/components/data-display/Table/Table.hooks.d.ts +9 -1
- package/dist/types/components/data-display/Table/Table.hooks.d.ts.map +1 -1
- package/dist/types/components/data-display/Table/Table.types.d.ts +6 -2
- package/dist/types/components/data-display/Table/Table.types.d.ts.map +1 -1
- package/dist/types/components/data-display/Table/TableParts.d.ts +2 -0
- package/dist/types/components/data-display/Table/TableParts.d.ts.map +1 -1
- package/dist/types/components/feedback/Dialog/Dialog.styles.d.ts.map +1 -1
- package/dist/types/components/feedback/Modal/Modal.d.ts.map +1 -1
- package/dist/types/components/feedback/Modal/Modal.styles.d.ts.map +1 -1
- package/dist/types/components/feedback/StackedModal/StackedModal.parts.d.ts.map +1 -1
- package/dist/types/components/feedback/StackedModal/StackedModal.styles.d.ts.map +1 -1
- package/dist/types/components/feedback/Toast/Toast.d.ts.map +1 -1
- package/dist/types/components/feedback/TutorialOverlay/TutorialOverlay.d.ts.map +1 -1
- package/dist/types/components/feedback/TutorialOverlay/TutorialOverlay.geometry.d.ts +3 -1
- package/dist/types/components/feedback/TutorialOverlay/TutorialOverlay.geometry.d.ts.map +1 -1
- package/dist/types/components/feedback/TutorialOverlay/TutorialOverlay.hooks.d.ts.map +1 -1
- package/dist/types/components/feedback/TutorialOverlay/TutorialStepBody.d.ts.map +1 -1
- package/dist/types/components/form/Calendar/Calendar.d.ts.map +1 -1
- package/dist/types/components/form/Calendar/CalendarDay.d.ts.map +1 -1
- package/dist/types/components/form/Calendar/CalendarMonth.d.ts.map +1 -1
- package/dist/types/components/form/Switch/Switch.metrics.d.ts +13 -3
- package/dist/types/components/form/Switch/Switch.metrics.d.ts.map +1 -1
- package/dist/types/components/form/Switch/Switch.styles.d.ts.map +1 -1
- package/dist/types/components/layout/Accordion/Accordion.d.ts.map +1 -1
- package/dist/types/components/layout/Accordion/Accordion.styles.d.ts.map +1 -1
- package/dist/types/components/layout/Box/Box.d.ts +2 -1
- package/dist/types/components/layout/Box/Box.d.ts.map +1 -1
- package/dist/types/components/layout/Card/Card.styles.d.ts.map +1 -1
- package/dist/types/components/layout/CardGrid/CardGrid.d.ts +9 -7
- package/dist/types/components/layout/CardGrid/CardGrid.d.ts.map +1 -1
- package/dist/types/components/layout/Collapsible/Collapsible.d.ts.map +1 -1
- package/dist/types/components/layout/Collapsible/Collapsible.helpers.d.ts +1 -1
- package/dist/types/components/layout/Collapsible/Collapsible.helpers.d.ts.map +1 -1
- package/dist/types/components/layout/Drawer/Drawer.d.ts.map +1 -1
- package/dist/types/components/layout/Resizable/Resizable.d.ts.map +1 -1
- package/dist/types/components/layout/Resizable/Resizable.helpers.d.ts +21 -9
- package/dist/types/components/layout/Resizable/Resizable.helpers.d.ts.map +1 -1
- package/dist/types/components/layout/Resizable/Resizable.hooks.d.ts +13 -3
- package/dist/types/components/layout/Resizable/Resizable.hooks.d.ts.map +1 -1
- package/dist/types/components/layout/Resizable/Resizable.types.d.ts +10 -0
- package/dist/types/components/layout/Resizable/Resizable.types.d.ts.map +1 -1
- package/dist/types/components/layout/ScrollArea/ScrollArea.d.ts.map +1 -1
- package/dist/types/components/layout/ScrollArea/ScrollArea.helpers.d.ts +1 -1
- package/dist/types/components/layout/ScrollArea/ScrollArea.helpers.d.ts.map +1 -1
- package/dist/types/components/layout/ScrollArea/ScrollArea.styles.d.ts +6 -0
- package/dist/types/components/layout/ScrollArea/ScrollArea.styles.d.ts.map +1 -1
- package/dist/types/components/layout/ScrollArea/ScrollArea.types.d.ts +4 -1
- package/dist/types/components/layout/ScrollArea/ScrollArea.types.d.ts.map +1 -1
- package/dist/types/components/layout/ScrollArea/ScrollViewport.d.ts.map +1 -1
- package/dist/types/components/layout/Separator/Separator.d.ts.map +1 -1
- package/dist/types/components/layout/Separator/Separator.styles.d.ts +7 -4
- package/dist/types/components/layout/Separator/Separator.styles.d.ts.map +1 -1
- package/dist/types/components/layout/SettingsLayout/SettingsLayout.items.d.ts.map +1 -1
- package/dist/types/components/layout/SettingsLayout/SettingsLayout.rail.d.ts.map +1 -1
- package/dist/types/components/layout/SettingsLayout/SettingsLayout.styles.d.ts +4 -4
- package/dist/types/components/layout/SettingsLayout/SettingsLayout.styles.d.ts.map +1 -1
- package/dist/types/components/layout/Sidebar/Sidebar.d.ts.map +1 -1
- package/dist/types/components/layout/Skeleton/Skeleton.d.ts.map +1 -1
- package/dist/types/components/layout/Skeleton/Skeleton.styles.d.ts +8 -1
- package/dist/types/components/layout/Skeleton/Skeleton.styles.d.ts.map +1 -1
- package/dist/types/components/layout/Spacer/Spacer.d.ts.map +1 -1
- package/dist/types/components/layout/TableFilter/TableFilter.d.ts.map +1 -1
- package/dist/types/components/navigation/AppHeader/AppHeader.d.ts.map +1 -1
- package/dist/types/components/navigation/AppHeader/AppHeader.details.d.ts.map +1 -1
- package/dist/types/components/navigation/AppHeader/AppHeader.identity.d.ts.map +1 -1
- package/dist/types/components/navigation/Breadcrumbs/Breadcrumbs.styles.d.ts +2 -2
- package/dist/types/components/navigation/Breadcrumbs/Breadcrumbs.styles.d.ts.map +1 -1
- package/dist/types/components/navigation/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/types/components/navigation/NavigationMenu/NavigationMegaSection.d.ts.map +1 -1
- package/dist/types/components/navigation/NavigationMenu/NavigationMenu.d.ts.map +1 -1
- package/dist/types/components/navigation/NavigationMenu/NavigationMenu.shell.d.ts.map +1 -1
- package/dist/types/components/navigation/NavigationMenu/NavigationMenu.styles.d.ts +2 -2
- package/dist/types/components/navigation/NavigationMenu/NavigationMenu.styles.d.ts.map +1 -1
- package/dist/types/components/navigation/NavigationMenu/NavigationStandardBody.d.ts.map +1 -1
- package/dist/types/components/navigation/Pagination/Pagination.d.ts.map +1 -1
- package/dist/types/components/navigation/Pagination/PaginationParts.d.ts.map +1 -1
- package/dist/types/components/navigation/Tabs/Tabs.d.ts.map +1 -1
- package/dist/types/components/navigation/Tabs/Tabs.styles.d.ts.map +1 -1
- package/dist/types/components/navigation/Tabs/TabsPanel.d.ts.map +1 -1
- package/dist/types/components/utility/AnimatedIcon/AnimatedIcon.animations.d.ts +9 -8
- package/dist/types/components/utility/AnimatedIcon/AnimatedIcon.animations.d.ts.map +1 -1
- package/dist/types/components/utility/AnimatedIcon/AnimatedIcon.styles.d.ts +1 -1
- package/dist/types/components/utility/AnimatedIcon/AnimatedIcon.styles.d.ts.map +1 -1
- package/dist/types/components/utility/AspectRatio/AspectRatio.d.ts.map +1 -1
- package/dist/types/components/utility/InfiniteScroll/InfiniteScroll.d.ts.map +1 -1
- package/dist/types/components/utility/InfiniteScroll/InfiniteScroll.hooks.d.ts +3 -2
- package/dist/types/components/utility/InfiniteScroll/InfiniteScroll.hooks.d.ts.map +1 -1
- package/dist/types/components/utility/InfiniteScroll/InfiniteScroll.parts.d.ts +3 -2
- package/dist/types/components/utility/InfiniteScroll/InfiniteScroll.parts.d.ts.map +1 -1
- package/dist/types/components/utility/InfiniteScroll/InfiniteScroll.types.d.ts +9 -0
- package/dist/types/components/utility/InfiniteScroll/InfiniteScroll.types.d.ts.map +1 -1
- package/dist/types/components/utility/VirtualList/VirtualList.d.ts.map +1 -1
- package/dist/types/components/utility/VirtualList/VirtualList.hooks.d.ts +24 -28
- package/dist/types/components/utility/VirtualList/VirtualList.hooks.d.ts.map +1 -1
- package/dist/types/components/utility/VirtualList/VirtualList.types.d.ts +17 -0
- package/dist/types/components/utility/VirtualList/VirtualList.types.d.ts.map +1 -1
- package/dist/types/social-login-button/social-login-button.d.ts.map +1 -1
- package/dist/types-native/components/form/Switch/Switch.metrics.d.ts +13 -3
- package/dist/types-native/components/form/Switch/Switch.metrics.d.ts.map +1 -1
- package/dist/typography/Blockquote.js +1 -1
- package/dist/typography/Code.js +1 -1
- package/dist/typography/Text.js +1 -1
- package/dist/user-avatar.js +4 -5
- package/dist/utility/AnimatedIcon.js +3 -3
- package/dist/utility/AspectRatio.js +2 -1
- package/dist/utility/InfiniteScroll.js +4 -3
- package/dist/utility/VirtualList.js +3 -2
- package/dist/utility/WorkflowStep.js +3 -3
- package/package.json +1 -1
- package/src/components/data-display/DataGrid/DataGrid.body.tsx +27 -7
- package/src/components/data-display/DataGrid/DataGrid.cells.tsx +33 -9
- package/src/components/data-display/DataGrid/DataGrid.model.ts +24 -11
- package/src/components/data-display/DataGrid/DataGrid.types.ts +12 -6
- package/src/components/data-display/DataViews/data-views-columns.ts +14 -3
- package/src/components/data-display/DataViews/data-views-grid-helpers.tsx +5 -3
- package/src/components/data-display/DataViews/data-views-layout-context.tsx +12 -9
- package/src/components/data-display/DataViews/data-views-overflow-costs.ts +32 -14
- package/src/components/data-display/DataViews/data-views-overflow.ts +40 -26
- package/src/components/data-display/MapPreview/MapTiles.tsx +16 -9
- package/src/components/data-display/MapPreview/mapProjection.ts +10 -5
- package/src/components/data-display/Table/Table.helpers.ts +7 -1
- package/src/components/data-display/Table/Table.hooks.ts +16 -5
- package/src/components/data-display/Table/Table.types.ts +6 -2
- package/src/components/data-display/Table/TableParts.tsx +38 -42
- package/src/components/feedback/Dialog/Dialog.styles.ts +16 -28
- package/src/components/feedback/Modal/Modal.styles.ts +9 -8
- package/src/components/feedback/Modal/Modal.tsx +3 -2
- package/src/components/feedback/Sonner/Sonner.tsx +4 -4
- package/src/components/feedback/Sonner/SonnerToast.tsx +9 -9
- package/src/components/feedback/StackedModal/StackedModal.parts.tsx +26 -19
- package/src/components/feedback/StackedModal/StackedModal.styles.ts +11 -9
- package/src/components/feedback/Toast/Toast.tsx +11 -7
- package/src/components/feedback/TutorialOverlay/TutorialOverlay.geometry.ts +2 -3
- package/src/components/feedback/TutorialOverlay/TutorialOverlay.hooks.ts +6 -1
- package/src/components/feedback/TutorialOverlay/TutorialOverlay.tsx +43 -37
- package/src/components/feedback/TutorialOverlay/TutorialStepBody.tsx +3 -2
- package/src/components/form/Calendar/Calendar.tsx +4 -2
- package/src/components/form/Calendar/CalendarDay.tsx +6 -3
- package/src/components/form/Calendar/CalendarMonth.tsx +6 -3
- package/src/components/form/Switch/Switch.metrics.ts +19 -5
- package/src/components/form/Switch/Switch.styles.ts +5 -3
- package/src/components/layout/Accordion/Accordion.styles.ts +8 -6
- package/src/components/layout/Accordion/Accordion.tsx +10 -8
- package/src/components/layout/Box/Box.tsx +18 -5
- package/src/components/layout/Card/Card.styles.ts +22 -30
- package/src/components/layout/CardGrid/CardGrid.tsx +37 -24
- package/src/components/layout/Collapsible/Collapsible.helpers.ts +4 -2
- package/src/components/layout/Collapsible/Collapsible.tsx +8 -4
- package/src/components/layout/ContentToolbar/ColumnsMenu.tsx +1 -1
- package/src/components/layout/ContentToolbar/ContentToolbar.tsx +2 -2
- package/src/components/layout/ContentToolbar/FilterTrigger.tsx +2 -2
- package/src/components/layout/ContentToolbar/MultiSelectDropdown.tsx +1 -1
- package/src/components/layout/ContentToolbar/SavedViewsMenu.tsx +2 -2
- package/src/components/layout/ContentToolbar/SortByDropdown.tsx +2 -2
- package/src/components/layout/ContentToolbar/ViewSelector.tsx +2 -2
- package/src/components/layout/Dashboard/Dashboard.tsx +1 -1
- package/src/components/layout/Dashboard/DashboardParts.tsx +1 -1
- package/src/components/layout/Drawer/Drawer.tsx +23 -10
- package/src/components/layout/Resizable/Resizable.helpers.ts +43 -21
- package/src/components/layout/Resizable/Resizable.hooks.ts +17 -9
- package/src/components/layout/Resizable/Resizable.md +9 -5
- package/src/components/layout/Resizable/Resizable.tsx +20 -8
- package/src/components/layout/Resizable/Resizable.types.ts +10 -0
- package/src/components/layout/ScrollArea/ScrollArea.helpers.ts +0 -2
- package/src/components/layout/ScrollArea/ScrollArea.styles.ts +45 -32
- package/src/components/layout/ScrollArea/ScrollArea.tsx +35 -18
- package/src/components/layout/ScrollArea/ScrollArea.types.ts +4 -1
- package/src/components/layout/ScrollArea/ScrollAreaContent.tsx +2 -2
- package/src/components/layout/ScrollArea/ScrollViewport.tsx +6 -4
- package/src/components/layout/Separator/Separator.styles.ts +30 -9
- package/src/components/layout/Separator/Separator.tsx +4 -3
- package/src/components/layout/SettingsLayout/SettingsLayout.items.tsx +4 -2
- package/src/components/layout/SettingsLayout/SettingsLayout.rail.tsx +6 -5
- package/src/components/layout/SettingsLayout/SettingsLayout.styles.ts +9 -7
- package/src/components/layout/SettingsLayout/SettingsLayout.tsx +2 -2
- package/src/components/layout/SettingsLayout/SettingsPanel.tsx +1 -1
- package/src/components/layout/SettingsLayout/SettingsSectionChips.tsx +3 -3
- package/src/components/layout/SettingsLayout/SettingsSectionHeader.tsx +3 -3
- package/src/components/layout/SettingsLayout/SettingsStatusMarker.tsx +2 -2
- package/src/components/layout/Sidebar/Sidebar.tsx +16 -6
- package/src/components/layout/Skeleton/Skeleton.styles.ts +13 -3
- package/src/components/layout/Skeleton/Skeleton.tsx +6 -4
- package/src/components/layout/Spacer/Spacer.tsx +16 -1
- package/src/components/layout/TableFilter/TableFilter.tsx +2 -1
- package/src/components/navigation/AppHeader/AppHeader.brand.tsx +2 -2
- package/src/components/navigation/AppHeader/AppHeader.details.tsx +9 -7
- package/src/components/navigation/AppHeader/AppHeader.identity.tsx +28 -15
- package/src/components/navigation/AppHeader/AppHeader.tsx +18 -6
- package/src/components/navigation/Breadcrumbs/BreadcrumbEntry.tsx +4 -4
- package/src/components/navigation/Breadcrumbs/Breadcrumbs.styles.tsx +15 -15
- package/src/components/navigation/CommandPalette/CommandPalette.tsx +7 -7
- package/src/components/navigation/CommandPalette/CommandPaletteResults.tsx +5 -5
- package/src/components/navigation/CommandPalette/ShortcutChip.tsx +1 -1
- package/src/components/navigation/ContextMenu/ContextMenu.tsx +8 -8
- package/src/components/navigation/DropdownMenu/DropdownMenu.tsx +25 -16
- package/src/components/navigation/NavigationMenu/NavigationMegaSection.tsx +5 -4
- package/src/components/navigation/NavigationMenu/NavigationMenu.shell.tsx +22 -20
- package/src/components/navigation/NavigationMenu/NavigationMenu.styles.ts +11 -11
- package/src/components/navigation/NavigationMenu/NavigationMenu.tsx +7 -2
- package/src/components/navigation/NavigationMenu/NavigationMenuItem.tsx +12 -12
- package/src/components/navigation/NavigationMenu/NavigationStandardBody.tsx +3 -2
- package/src/components/navigation/Pagination/Pagination.styles.ts +18 -18
- package/src/components/navigation/Pagination/Pagination.tsx +2 -1
- package/src/components/navigation/Pagination/PaginationParts.tsx +4 -3
- package/src/components/navigation/Tabs/Tabs.styles.ts +14 -12
- package/src/components/navigation/Tabs/Tabs.tsx +11 -9
- package/src/components/navigation/Tabs/TabsPanel.tsx +10 -3
- package/src/components/typography/Blockquote/Blockquote.tsx +8 -8
- package/src/components/typography/Code/Code.tsx +17 -17
- package/src/components/typography/Text/Text.tsx +2 -2
- package/src/components/utility/AnimatedIcon/AnimatedIcon.animations.ts +38 -35
- package/src/components/utility/AnimatedIcon/AnimatedIcon.styles.ts +51 -46
- package/src/components/utility/AnimatedIcon/AnimatedIcon.tsx +1 -1
- package/src/components/utility/AspectRatio/AspectRatio.tsx +13 -2
- package/src/components/utility/InfiniteScroll/InfiniteScroll.hooks.ts +5 -4
- package/src/components/utility/InfiniteScroll/InfiniteScroll.parts.tsx +29 -12
- package/src/components/utility/InfiniteScroll/InfiniteScroll.tsx +11 -5
- package/src/components/utility/InfiniteScroll/InfiniteScroll.types.ts +10 -2
- package/src/components/utility/VirtualList/VirtualList.hooks.ts +101 -112
- package/src/components/utility/VirtualList/VirtualList.tsx +36 -65
- package/src/components/utility/VirtualList/VirtualList.types.ts +20 -3
- package/src/components/utility/WorkflowStep/WorkflowStep.parts.tsx +7 -7
- package/src/social-login-button/social-login-button.tsx +25 -8
- package/dist/chunk-236V2GRH.js.map +0 -1
- package/dist/chunk-2CTTASUD.js.map +0 -1
- package/dist/chunk-2E2WOBID.js.map +0 -1
- package/dist/chunk-2NLYGZP3.js.map +0 -1
- package/dist/chunk-2WFDHFK4.js.map +0 -1
- package/dist/chunk-3CVTQZQJ.js.map +0 -1
- package/dist/chunk-3D6HXKZM.js.map +0 -1
- package/dist/chunk-3T5Z5HXF.js.map +0 -1
- package/dist/chunk-3TDVGZZN.js.map +0 -1
- package/dist/chunk-3VMGE7CU.js.map +0 -1
- package/dist/chunk-4OEKIFBC.js.map +0 -1
- package/dist/chunk-57JY4OI2.js.map +0 -1
- package/dist/chunk-5CKDRLRN.js.map +0 -1
- package/dist/chunk-5QWQR7XT.js.map +0 -1
- package/dist/chunk-5W4BLTDI.js.map +0 -1
- package/dist/chunk-6CTPDNNX.js.map +0 -1
- package/dist/chunk-6GRZ77IS.js.map +0 -1
- package/dist/chunk-6QLPSMTA.js.map +0 -1
- package/dist/chunk-72DKEBJM.js.map +0 -1
- package/dist/chunk-73BEVJCS.js +0 -28
- package/dist/chunk-73BEVJCS.js.map +0 -1
- package/dist/chunk-75LOTMSN.js.map +0 -1
- package/dist/chunk-7F7TTOYN.js.map +0 -1
- package/dist/chunk-7UZ2TFIK.js.map +0 -1
- package/dist/chunk-AROBXRC5.js.map +0 -1
- package/dist/chunk-ATSHKSSD.js.map +0 -1
- package/dist/chunk-AUSUCZYR.js.map +0 -1
- package/dist/chunk-B76QCDCE.js.map +0 -1
- package/dist/chunk-BLJDCMFU.js.map +0 -1
- package/dist/chunk-CAHWCSRE.js.map +0 -1
- package/dist/chunk-CPTY6UZ6.js.map +0 -1
- package/dist/chunk-CSTAQX2B.js.map +0 -1
- package/dist/chunk-D5SZXH7Q.js.map +0 -1
- package/dist/chunk-DF4K5XVW.js.map +0 -1
- package/dist/chunk-DLJGBJZW.js.map +0 -1
- package/dist/chunk-DYVAOEW4.js.map +0 -1
- package/dist/chunk-DZA7RSLX.js.map +0 -1
- package/dist/chunk-E7MSDXED.js.map +0 -1
- package/dist/chunk-EFHIMCJN.js.map +0 -1
- package/dist/chunk-EL7CMURV.js.map +0 -1
- package/dist/chunk-F42MJOHM.js.map +0 -1
- package/dist/chunk-FFOQZRFC.js.map +0 -1
- package/dist/chunk-FYTLKHEN.js.map +0 -1
- package/dist/chunk-GRDPGHQJ.js.map +0 -1
- package/dist/chunk-GSFNH4C5.js.map +0 -1
- package/dist/chunk-GUW5BUK7.js.map +0 -1
- package/dist/chunk-HB7ISSLK.js.map +0 -1
- package/dist/chunk-HGMBY5LP.js.map +0 -1
- package/dist/chunk-HTZNB6IV.js.map +0 -1
- package/dist/chunk-HXEBKOSM.js.map +0 -1
- package/dist/chunk-IAGOUTI6.js.map +0 -1
- package/dist/chunk-IVIHRZEY.js.map +0 -1
- package/dist/chunk-IYTBTK2M.js.map +0 -1
- package/dist/chunk-J2DAQQQH.js.map +0 -1
- package/dist/chunk-JXUWWPZR.js.map +0 -1
- package/dist/chunk-KLWW67WP.js.map +0 -1
- package/dist/chunk-L7SFH3ED.js.map +0 -1
- package/dist/chunk-LIG7TKIB.js.map +0 -1
- package/dist/chunk-LVEG6XQL.js.map +0 -1
- package/dist/chunk-MBC55H6M.js.map +0 -1
- package/dist/chunk-MBSYD3ZU.js.map +0 -1
- package/dist/chunk-MJ3BVWPZ.js.map +0 -1
- package/dist/chunk-MK4CH4VT.js.map +0 -1
- package/dist/chunk-MP4VSWHK.js.map +0 -1
- package/dist/chunk-MTFCPPZ5.js.map +0 -1
- package/dist/chunk-MVKYNDT2.js.map +0 -1
- package/dist/chunk-MVXFMIVZ.js.map +0 -1
- package/dist/chunk-N52O2OKZ.js.map +0 -1
- package/dist/chunk-NEGCJNGJ.js.map +0 -1
- package/dist/chunk-NYZO3JNB.js.map +0 -1
- package/dist/chunk-OATHOXIU.js.map +0 -1
- package/dist/chunk-P6TNXBDA.js.map +0 -1
- package/dist/chunk-PMOEG36E.js.map +0 -1
- package/dist/chunk-PMP6WJJS.js.map +0 -1
- package/dist/chunk-PT2XADGH.js.map +0 -1
- package/dist/chunk-PUBPZOQJ.js.map +0 -1
- package/dist/chunk-Q4BQYYPU.js.map +0 -1
- package/dist/chunk-Q4CAZ2TP.js.map +0 -1
- package/dist/chunk-Q73PTVNO.js.map +0 -1
- package/dist/chunk-QAP3FW33.js.map +0 -1
- package/dist/chunk-QF6LTUCE.js.map +0 -1
- package/dist/chunk-QKPD322X.js.map +0 -1
- package/dist/chunk-RHIDWUK7.js.map +0 -1
- package/dist/chunk-RSQMPCCR.js.map +0 -1
- package/dist/chunk-RWTFZ7J5.js.map +0 -1
- package/dist/chunk-T3WHW7ZC.js.map +0 -1
- package/dist/chunk-TBF2CPJW.js.map +0 -1
- package/dist/chunk-TQ6FPOPD.js.map +0 -1
- package/dist/chunk-TUBCN4DJ.js.map +0 -1
- package/dist/chunk-TVL5V2JK.js.map +0 -1
- package/dist/chunk-U342T7ZR.js.map +0 -1
- package/dist/chunk-ULTOQ6ZV.js.map +0 -1
- package/dist/chunk-UN5INW6K.js.map +0 -1
- package/dist/chunk-UUUMNJPP.js.map +0 -1
- package/dist/chunk-VFHGILXI.js.map +0 -1
- package/dist/chunk-VRDNUY4H.js.map +0 -1
- package/dist/chunk-WTOYEWW6.js.map +0 -1
- package/dist/chunk-WUTHROII.js.map +0 -1
- package/dist/chunk-YU26GBNX.js.map +0 -1
- package/dist/chunk-YVUD3MY4.js.map +0 -1
- package/dist/chunk-ZTYUKEN3.js.map +0 -1
- /package/dist/{chunk-2BIVCYTO.js.map → chunk-27LOJVR3.js.map} +0 -0
- /package/dist/{chunk-CRZXSZ5O.js.map → chunk-2S752BIJ.js.map} +0 -0
- /package/dist/{chunk-BAQBUKDU.js.map → chunk-3KREF4ZF.js.map} +0 -0
- /package/dist/{chunk-SYN46YL6.js.map → chunk-3RMDIO4G.js.map} +0 -0
- /package/dist/{chunk-S3D5VBHW.js.map → chunk-3YOXVNO4.js.map} +0 -0
- /package/dist/{chunk-IL7JZKXY.js.map → chunk-442FSG7G.js.map} +0 -0
- /package/dist/{chunk-JL75FJRG.js.map → chunk-4ALF5PB5.js.map} +0 -0
- /package/dist/{chunk-CS3KOKL3.js.map → chunk-4GWHYLEB.js.map} +0 -0
- /package/dist/{chunk-XJPJ6ESI.js.map → chunk-4OAKGKK5.js.map} +0 -0
- /package/dist/{chunk-4CHROSWR.js.map → chunk-5ETBB2DG.js.map} +0 -0
- /package/dist/{chunk-E7T3A4IR.js.map → chunk-5JCGBCFJ.js.map} +0 -0
- /package/dist/{chunk-FC7NQ6XM.js.map → chunk-5MW7OYBM.js.map} +0 -0
- /package/dist/{chunk-46UPILLK.js.map → chunk-5NT2M2JI.js.map} +0 -0
- /package/dist/{chunk-H5BEWPEY.js.map → chunk-6N2EDWMG.js.map} +0 -0
- /package/dist/{chunk-BW62QQAG.js.map → chunk-6N4AA2Y7.js.map} +0 -0
- /package/dist/{chunk-GJQYM3PM.js.map → chunk-6PU3JYVY.js.map} +0 -0
- /package/dist/{chunk-7EIOXZWL.js.map → chunk-74P3YX7R.js.map} +0 -0
- /package/dist/{chunk-VT5HQ2AD.js.map → chunk-BFMDA6UO.js.map} +0 -0
- /package/dist/{chunk-R75DZ3AK.js.map → chunk-BVLMKSHX.js.map} +0 -0
- /package/dist/{chunk-HNPWZ3W2.js.map → chunk-DDRKYNPB.js.map} +0 -0
- /package/dist/{chunk-HU7TX7RB.js.map → chunk-DUBTI4DI.js.map} +0 -0
- /package/dist/{chunk-RMCNEKBZ.js.map → chunk-DW6F7354.js.map} +0 -0
- /package/dist/{chunk-XJUEHG72.js.map → chunk-EERUSI52.js.map} +0 -0
- /package/dist/{chunk-NDNYD4FG.js.map → chunk-EHYI2WCJ.js.map} +0 -0
- /package/dist/{chunk-NB3FGWU4.js.map → chunk-EQXIW5MQ.js.map} +0 -0
- /package/dist/{chunk-2ZIHZLF5.js.map → chunk-F44R7US6.js.map} +0 -0
- /package/dist/{chunk-35S6QI5G.js.map → chunk-FX26DAFF.js.map} +0 -0
- /package/dist/{chunk-AYLEZM6T.js.map → chunk-GLFTIGOF.js.map} +0 -0
- /package/dist/{chunk-QEG3P5D4.js.map → chunk-GLHNMTP6.js.map} +0 -0
- /package/dist/{chunk-L4UP5VYS.js.map → chunk-GVH7C2PT.js.map} +0 -0
- /package/dist/{chunk-AER4245J.js.map → chunk-H67EL3CG.js.map} +0 -0
- /package/dist/{chunk-57JLS55D.js.map → chunk-HBRQPG7H.js.map} +0 -0
- /package/dist/{chunk-UZ6AUTE6.js.map → chunk-I3F4C5SS.js.map} +0 -0
- /package/dist/{chunk-4CXEWFKO.js.map → chunk-J5VWGQSR.js.map} +0 -0
- /package/dist/{chunk-AJ5SDHX5.js.map → chunk-JCL7WK4G.js.map} +0 -0
- /package/dist/{chunk-4JFL62K3.js.map → chunk-K7FSTB2K.js.map} +0 -0
- /package/dist/{chunk-WE3LJPRN.js.map → chunk-KE473LK6.js.map} +0 -0
- /package/dist/{chunk-C55AWF3U.js.map → chunk-KRQUPE4K.js.map} +0 -0
- /package/dist/{chunk-SJO3K7SB.js.map → chunk-KXLUMEDX.js.map} +0 -0
- /package/dist/{chunk-CQPFSEJB.js.map → chunk-L7NQCLFU.js.map} +0 -0
- /package/dist/{chunk-DVAAUWTC.js.map → chunk-LCHCE2G5.js.map} +0 -0
- /package/dist/{chunk-G4HBNILE.js.map → chunk-LEHMWJNZ.js.map} +0 -0
- /package/dist/{chunk-KK57AHWS.js.map → chunk-OAEYCKBN.js.map} +0 -0
- /package/dist/{chunk-JGRE56GQ.js.map → chunk-OB56SZGL.js.map} +0 -0
- /package/dist/{chunk-E4TNDTWV.js.map → chunk-OL2BEJZR.js.map} +0 -0
- /package/dist/{chunk-IKLOIONQ.js.map → chunk-PCBZYORN.js.map} +0 -0
- /package/dist/{chunk-CQLPDY2J.js.map → chunk-PRIBOWX4.js.map} +0 -0
- /package/dist/{chunk-LT4NEKXB.js.map → chunk-QA2ZGCRL.js.map} +0 -0
- /package/dist/{chunk-PQECNGDE.js.map → chunk-QSRZOXQI.js.map} +0 -0
- /package/dist/{chunk-ROT57BP4.js.map → chunk-R2XVTUVR.js.map} +0 -0
- /package/dist/{chunk-DCJSHYE5.js.map → chunk-RSDYS5B3.js.map} +0 -0
- /package/dist/{chunk-N5GVW6RO.js.map → chunk-S6IWKDWT.js.map} +0 -0
- /package/dist/{chunk-DB2ZFZVW.js.map → chunk-SBIZXZPP.js.map} +0 -0
- /package/dist/{chunk-NCPWLHZT.js.map → chunk-SKT2V2OX.js.map} +0 -0
- /package/dist/{chunk-EOW2ECB3.js.map → chunk-SNURSSTN.js.map} +0 -0
- /package/dist/{chunk-CZBND7AY.js.map → chunk-T7DE44SP.js.map} +0 -0
- /package/dist/{chunk-BNEWMFVB.js.map → chunk-UGGJ3KDT.js.map} +0 -0
- /package/dist/{chunk-KREWQAEV.js.map → chunk-VIRYHNEM.js.map} +0 -0
- /package/dist/{chunk-N6CSXHFJ.js.map → chunk-WN5PNP6F.js.map} +0 -0
- /package/dist/{chunk-XR46FSOH.js.map → chunk-XIG3DXXX.js.map} +0 -0
- /package/dist/{chunk-GHTBUJ6E.js.map → chunk-XRUW7DMH.js.map} +0 -0
- /package/dist/{chunk-JLQGRZMN.js.map → chunk-YCCY77W5.js.map} +0 -0
- /package/dist/{chunk-6BDYC4RA.js.map → chunk-YRSR5LVZ.js.map} +0 -0
- /package/dist/{chunk-VZIB5W5L.js.map → chunk-ZGCPDA3F.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/DataViews/data-views-columns.ts"],"sourcesContent":["\"use client\";\n\nimport { useMemo } from \"react\";\n\nimport { type GridColumn } from \"../DataGrid\";\n\nimport {\n buildGridColumns,\n buildRowActionsColumn,\n isActionsColumn,\n} from \"./data-views-grid-helpers\";\nimport type { DataViewColumn, RowAction } from \"./data-views-types\";\n\n/**\n * Every column derivation the DataViews grid needs, in one place: the auto kebab\n * actions column, the id list that seeds a pristine view state, what the grid\n * actually renders once visibility is applied, and the show/hide menu's list.\n */\n\n/** A column the user may show/hide via the toolbar's ColumnsMenu. */\nexport interface HideableColumn {\n id: string;\n label: string;\n}\n\n/**\n * The columns the user may show/hide: explicitly hideable (not `hideable:false`,\n * which marks structural columns like the image thumbnail or actions kebab) and\n * carrying a text header to label the checkbox.\n */\nfunction computeHideableColumns<T extends Record<string, unknown>>(\n columns: DataViewColumn<T>[],\n): HideableColumn[] {\n return columns\n .filter((col) => col.hideable !== false && typeof col.header === \"string\" && col.header !== \"\")\n .map((col) => ({ id: col.id, label: col.header as string }));\n}\n\n/**\n * Append the auto kebab actions column unless the page already defines one. The\n * column is added when there are `rowActions` OR a bespoke `renderRowMenu` (an\n * entity's self-contained menu that owns its own popups).\n */\nfunction appendActionsColumn<T extends Record<string, unknown>>(\n columns: DataViewColumn<T>[],\n opts: {\n rowActions?: RowAction<T>[];\n rowActionsLeading?: (row: T) => React.ReactNode;\n renderRowMenu?: (row: T) => React.ReactNode;\n testIdPrefix: string;\n getRowId: (row: T) => string | number;\n },\n): DataViewColumn<T>[] {\n const { rowActions, rowActionsLeading, renderRowMenu, testIdPrefix, getRowId } = opts;\n if ((!rowActions && !renderRowMenu) || columns.some(isActionsColumn)) return columns;\n return [\n ...columns,\n buildRowActionsColumn({\n rowActions: rowActions ?? [],\n leading: rowActionsLeading,\n testIdPrefix,\n getRowId,\n renderRowMenu,\n }),\n ];\n}\n\n/** Options {@link appendActionsColumn} needs to build the auto kebab column. */\ntype ActionsColumnOpts<T extends Record<string, unknown>> = {\n rowActions?: RowAction<T>[];\n rowActionsLeading?: (row: T) => React.ReactNode;\n renderRowMenu?: (row: T) => React.ReactNode;\n testIdPrefix: string;\n getRowId: (row: T) => string | number;\n};\n\n/**\n * The declared columns plus the auto kebab column (unless the page defines its\n * own), and every column id — which is what seeds a pristine view state's\n * `visibleColumns`, so it is derived BEFORE the state exists.\n */\nexport function useColumnsWithActions<T extends Record<string, unknown>>(\n columns: DataViewColumn<T>[],\n opts: ActionsColumnOpts<T>,\n): { columnsWithActions: DataViewColumn<T>[]; allColumnIds: string[] } {\n const { rowActions, rowActionsLeading, renderRowMenu, testIdPrefix, getRowId } = opts;\n const columnsWithActions = useMemo(\n () =>\n appendActionsColumn(columns, { rowActions, rowActionsLeading, renderRowMenu, testIdPrefix, getRowId }),\n [columns, rowActions, rowActionsLeading, renderRowMenu, testIdPrefix, getRowId],\n );\n const allColumnIds = useMemo(() => columnsWithActions.map((col) => col.id), [columnsWithActions]);\n return { columnsWithActions, allColumnIds };\n}\n\n/**\n * Apply a stored column ORDER, tolerantly.\n *\n * A stored list goes stale in both directions and neither may lose a column: an\n * id the table no longer declares is dropped, and a column the table declares\n * but the list never mentioned (added since the view was saved) falls in AFTER\n * the ordered ones rather than vanishing. Absent order ⇒ declaration order.\n */\nfunction applyOrder<T extends Record<string, unknown>>(\n columns: DataViewColumn<T>[],\n order: string[] | undefined,\n): DataViewColumn<T>[] {\n if (!order || order.length === 0) return columns;\n const byId = new Map(columns.map((column) => [column.id, column]));\n const ordered = order.map((id) => byId.get(id)).filter((c): c is DataViewColumn<T> => Boolean(c));\n const seen = new Set(ordered.map((column) => column.id));\n return [...ordered, ...columns.filter((column) => !seen.has(column.id))];\n}\n\n/** What the grid actually renders: order + visibility applied, plus the menu's list. */\nexport function useRenderedColumns<T extends Record<string, unknown>>(\n columnsWithActions: DataViewColumn<T>[],\n visibleColumns: string[],\n onRowClick: ((row: T) => void) | undefined,\n order?: string[],\n): { gridColumns: GridColumn<T>[]; hideableColumns: HideableColumn[] } {\n const gridColumns = useMemo(\n () => buildGridColumns(applyOrder(columnsWithActions, order), visibleColumns, onRowClick),\n [columnsWithActions, onRowClick, visibleColumns, order],\n );\n const hideableColumns = useMemo(() => computeHideableColumns(columnsWithActions), [columnsWithActions]);\n return { gridColumns, hideableColumns };\n}\n\n"],"mappings":";;;;;;;AAEA,SAAS,eAAe;AA4BxB,SAAS,uBACP,SACkB;AAClB,SAAO,QACJ,OAAO,CAAC,QAAQ,IAAI,aAAa,SAAS,OAAO,IAAI,WAAW,YAAY,IAAI,WAAW,EAAE,EAC7F,IAAI,CAAC,SAAS,EAAE,IAAI,IAAI,IAAI,OAAO,IAAI,OAAiB,EAAE;AAC/D;AAOA,SAAS,oBACP,SACA,MAOqB;AACrB,QAAM,EAAE,YAAY,mBAAmB,eAAe,cAAc,SAAS,IAAI;AACjF,MAAK,CAAC,cAAc,CAAC,iBAAkB,QAAQ,KAAK,eAAe,EAAG,QAAO;AAC7E,SAAO;AAAA,IACL,GAAG;AAAA,IACH,sBAAsB;AAAA,MACpB,YAAY,cAAc,CAAC;AAAA,MAC3B,SAAS;AAAA,MACT;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AACF;AAgBO,SAAS,sBACd,SACA,MACqE;AACrE,QAAM,EAAE,YAAY,mBAAmB,eAAe,cAAc,SAAS,IAAI;AACjF,QAAM,qBAAqB;AAAA,IACzB,MACE,oBAAoB,SAAS,EAAE,YAAY,mBAAmB,eAAe,cAAc,SAAS,CAAC;AAAA,IACvG,CAAC,SAAS,YAAY,mBAAmB,eAAe,cAAc,QAAQ;AAAA,EAChF;AACA,QAAM,eAAe,QAAQ,MAAM,mBAAmB,IAAI,CAAC,QAAQ,IAAI,EAAE,GAAG,CAAC,kBAAkB,CAAC;AAChG,SAAO,EAAE,oBAAoB,aAAa;AAC5C;AAUA,SAAS,WACP,SACA,OACqB;AACrB,MAAI,CAAC,SAAS,MAAM,WAAW,EAAG,QAAO;AACzC,QAAM,OAAO,IAAI,IAAI,QAAQ,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,MAAM,CAAC,CAAC;AACjE,QAAM,UAAU,MAAM,IAAI,CAAC,OAAO,KAAK,IAAI,EAAE,CAAC,EAAE,OAAO,CAAC,MAA8B,QAAQ,CAAC,CAAC;AAChG,QAAM,OAAO,IAAI,IAAI,QAAQ,IAAI,CAAC,WAAW,OAAO,EAAE,CAAC;AACvD,SAAO,CAAC,GAAG,SAAS,GAAG,QAAQ,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,OAAO,EAAE,CAAC,CAAC;AACzE;AAGO,SAAS,mBACd,oBACA,gBACA,YACA,OACqE;AACrE,QAAM,cAAc;AAAA,IAClB,MAAM,iBAAiB,WAAW,oBAAoB,KAAK,GAAG,gBAAgB,UAAU;AAAA,IACxF,CAAC,oBAAoB,YAAY,gBAAgB,KAAK;AAAA,EACxD;AACA,QAAM,kBAAkB,QAAQ,MAAM,uBAAuB,kBAAkB,GAAG,CAAC,kBAAkB,CAAC;AACtG,SAAO,EAAE,aAAa,gBAAgB;AACxC;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/typography/Code/Code.tsx"],"sourcesContent":["import Check from '@mui/icons-material/Check';\nimport ContentCopy from '@mui/icons-material/ContentCopy';\nimport Box from '@mui/material/Box/index.js';\nimport IconButton from '@mui/material/IconButton/index.js';\nimport Tooltip from '@mui/material/Tooltip/index.js';\nimport { alpha, styled } from '@mui/material/styles/index.js';\nimport React, { useState } from 'react';\n\nimport type { CodeProps } from './Code.types';\nimport { modeInk, neutralTones } from '../../../tokens/ink';\nimport { rem } from '../../../tokens/relative';\n\nconst StyledCodeContainer = styled(Box, {\n shouldForwardProp: (prop) =>\n !['customVariant', 'customSize', 'copyable'].includes(prop as string),\n})<{\n customVariant?: string;\n customSize?: string;\n copyable?: boolean;\n component?: React.ElementType;\n}>(({ theme, customVariant = 'inline', customSize = 'md', copyable }) => {\n // Size mapping\n const sizeMap = {\n xs: { fontSize: rem(theme, 12), padding: '2px 4px' },\n sm: { fontSize: rem(theme, 13), padding: '3px 6px' },\n md: { fontSize: rem(theme, 14), padding: '4px 8px' },\n lg: { fontSize: rem(theme, 16), padding: '6px 12px' },\n };\n\n const blockSizeMap = {\n xs: { fontSize: rem(theme, 12), padding: '8px 12px' },\n sm: { fontSize: rem(theme, 13), padding: '12px 16px' },\n md: { fontSize: rem(theme, 14), padding: '16px 20px' },\n lg: { fontSize: rem(theme, 16), padding: '20px 24px' },\n };\n\n const baseStyles = {\n fontFamily: 'Monaco, Menlo, \"Ubuntu Mono\", \"Courier New\", monospace',\n lineHeight: 1.5,\n borderRadius: theme.shape.borderRadius,\n transition: 'all 0.2s ease',\n position: 'relative' as const,\n };\n\n // Variant-specific styles\n const variantStyles = {\n inline: {\n ...baseStyles,\n display: 'inline',\n backgroundColor: alpha(theme.palette.primary.main, 0.08),\n color: theme.palette.primary.main,\n border: `1px solid ${alpha(theme.palette.primary.main, 0.12)}`,\n ...sizeMap[customSize as keyof typeof sizeMap],\n },\n block: {\n ...baseStyles,\n display: 'block',\n backgroundColor:\n theme.palette.mode === 'dark'\n ? alpha(neutralTones(theme).inverseSurface, 0.95)\n : alpha(neutralTones(theme).surface, 0.95),\n color:\n theme.palette.mode === 'dark' ? modeInk(theme) : theme.palette.text.primary,\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n overflow: 'auto',\n whiteSpace: 'pre' as const,\n ...blockSizeMap[customSize as keyof typeof blockSizeMap],\n ...(copyable && {\n paddingTop: blockSizeMap[customSize as keyof typeof blockSizeMap].padding.split(' ')[0],\n paddingRight: '60px',\n }),\n },\n highlight: {\n ...baseStyles,\n display: 'block',\n background: `linear-gradient(135deg, ${alpha(theme.palette.primary.main, 0.1)} 0%, ${alpha(theme.palette.secondary.main, 0.1)} 100%)`,\n color: theme.palette.text.primary,\n border: `1px solid ${alpha(theme.palette.primary.main, 0.2)}`,\n borderLeft: `4px solid ${theme.palette.primary.main}`,\n overflow: 'auto',\n whiteSpace: 'pre' as const,\n ...blockSizeMap[customSize as keyof typeof blockSizeMap],\n ...(copyable && {\n paddingTop: blockSizeMap[customSize as keyof typeof blockSizeMap].padding.split(' ')[0],\n paddingRight: '60px',\n }),\n },\n };\n\n return variantStyles[customVariant as keyof typeof variantStyles] || variantStyles.inline;\n});\n\nconst StyledCode = styled('code')({\n margin: 0,\n padding: 0,\n backgroundColor: 'transparent',\n border: 'none',\n fontFamily: 'inherit',\n fontSize: 'inherit',\n lineHeight: 'inherit',\n color: 'inherit',\n});\n\nconst CopyButton = styled(IconButton)(({ theme }) => ({\n position: 'absolute',\n top: theme.spacing(1),\n right: theme.spacing(1),\n width: 32,\n height: 32,\n backgroundColor:\n theme.palette.mode === 'dark'\n ? alpha(theme.palette.background.paper, 0.8)\n : theme.palette.background.paper,\n backdropFilter: theme.palette.mode === 'dark' ? 'blur(8px)' : 'none',\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n boxShadow: theme.palette.mode === 'light' ? theme.shadows[1] : 'none',\n '&:hover': {\n backgroundColor:\n theme.palette.mode === 'dark'\n ? alpha(theme.palette.background.paper, 0.9)\n : neutralTones(theme).surface,\n transform: 'scale(1.05)',\n },\n '& .MuiSvgIcon-root': {\n fontSize: rem(theme, 16),\n },\n}));\n\nconst LanguageLabel = styled(Box)(({ theme }) => ({\n position: 'absolute',\n top: theme.spacing(1),\n left: theme.spacing(2),\n fontSize: rem(theme, 12),\n fontWeight: 500,\n color: alpha(theme.palette.text.primary, 0.6),\n backgroundColor:\n theme.palette.mode === 'dark'\n ? alpha(theme.palette.background.paper, 0.8)\n : theme.palette.background.paper,\n padding: '2px 8px',\n borderRadius: theme.shape.borderRadius / 2,\n backdropFilter: theme.palette.mode === 'dark' ? 'blur(8px)' : 'none',\n border: `1px solid ${alpha(theme.palette.divider, 0.2)}`,\n boxShadow: theme.palette.mode === 'light' ? theme.shadows[1] : 'none',\n}));\n\n// Renders each source line beside a gutter number. Keys combine the line number\n// with a slice of the content and its length, so editing one line in place does\n// not reshuffle the keys of the lines around it.\nconst renderNumberedLines = (source: string) =>\n source.split('\\n').map((line, index) => {\n const stableKey = `line-${index + 1}-${line.slice(0, 10).replace(/\\s+/g, '')}-${line.length}`;\n\n return (\n <div key={stableKey} style={{ display: 'flex' }}>\n <span\n style={{\n display: 'inline-block',\n minWidth: '3em',\n opacity: 0.5,\n userSelect: 'none',\n marginRight: '1em',\n textAlign: 'right',\n }}\n >\n {index + 1}\n </span>\n <span>{line}</span>\n </div>\n );\n });\n\n// Only block-ish variants get a language label or a copy affordance.\nconst resolveCodeFlags = (\n variant: CodeProps['variant'],\n copyable: boolean,\n language: CodeProps['language'],\n) => {\n const isBlock = variant === 'block' || variant === 'highlight';\n return {\n isBlock,\n showCopy: copyable && isBlock,\n showLanguage: Boolean(language) && isBlock,\n };\n};\n\n// Owns its own \"just copied\" flash. Keeping it here rather than inline in Code\n// means the copied/not-copied branches do not count against the main render, and\n// the flash re-renders only the button. Non-string children are still a no-op on\n// click, exactly as before.\nconst CodeCopyButton: React.FC<{ source: React.ReactNode }> = ({ source }) => {\n const [copied, setCopied] = useState(false);\n\n const handleCopy = async () => {\n if (typeof source !== 'string') return;\n try {\n await navigator.clipboard.writeText(source);\n setCopied(true);\n window.setTimeout(() => setCopied(false), 2000);\n } catch {\n // Silently fail if clipboard access is denied\n }\n };\n\n return (\n <Tooltip title={copied ? 'Copied!' : 'Copy code'}>\n <CopyButton onClick={handleCopy} size=\"small\" color={copied ? 'success' : 'default'}>\n {copied ? <Check /> : <ContentCopy />}\n </CopyButton>\n </Tooltip>\n );\n};\n\nexport const Code = React.forwardRef<HTMLElement, CodeProps>(\n (\n {\n variant = 'inline',\n language,\n copyable = false,\n lineNumbers = false,\n size = 'md',\n children,\n ...props\n },\n ref,\n ) => {\n const { isBlock, showCopy, showLanguage } = resolveCodeFlags(variant, copyable, language);\n\n // Process children for line numbers if needed\n const processedChildren = React.useMemo(() => {\n if (!lineNumbers || !isBlock || typeof children !== 'string') {\n return children;\n }\n\n return renderNumberedLines(children);\n }, [children, lineNumbers, isBlock]);\n\n return (\n <StyledCodeContainer\n ref={ref}\n component={variant === 'inline' ? 'span' : 'div'}\n customVariant={variant}\n customSize={size}\n copyable={showCopy}\n {...props}\n >\n {showLanguage && <LanguageLabel>{language}</LanguageLabel>}\n\n <StyledCode>{processedChildren}</StyledCode>\n\n {showCopy && <CodeCopyButton source={children} />}\n </StyledCodeContainer>\n );\n },\n);\n\nCode.displayName = 'Code';"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/navigation/AppHeader/AppHeader.details.tsx"],"sourcesContent":["'use client';\n\nimport Box from '@mui/material/Box/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { useTheme } from '@mui/material/styles/index.js';\nimport useMediaQuery from '@mui/material/useMediaQuery/index.js';\nimport React from 'react';\n\nimport { accentFor } from '../../../tokens/scales';\nimport { Sheet } from '../../data-display/Sheet/Sheet';\nimport { Button } from '../../form/Button/Button';\nimport { Dialog } from '../../feedback/Dialog/Dialog';\n\nimport type {\n AppHeaderDetailRow,\n AppHeaderDetailsAction,\n AppHeaderDetailsProps,\n} from './AppHeader.types';\n\n/** How wide the dialog presentation grows before it stops. */\nconst DIALOG_WIDTH = 460;\n\n/**\n * Where the smallest phones stop. The theme's scale starts at `xs`/`sm`, so\n * there is no `xxs` breakpoint to ask for — this is that boundary, named once\n * rather than inlined at the place it decides something.\n */\nconst XXS_MAX_WIDTH = 360;\n\n/**\n * The sheet grows to its content and stops at the viewport; it does not take a\n * fixed slab of height.\n *\n * `Sheet`'s vertical presets are absolute (`md` is 400px), which on a phone is\n * shorter than six detail rows plus a button — so the panel scrolled INSIDE a\n * screen that had room to spare, putting the address and the way out below the\n * fold of a sheet using two thirds of the display. `height: auto` sizes it to\n * what is in it, and the cap keeps a long panel on-screen: 100dvh on the\n * smallest phones where every pixel counts, 90dvh above that so the panel still\n * reads as a sheet over a page rather than as a new screen.\n *\n * `dvh` and not `vh` — mobile browser chrome makes `vh` overshoot, which would\n * reintroduce exactly the scroll this removes.\n */\nfunction sheetHeight(xxs: boolean): { height: string; maxHeight: string } {\n return { height: 'auto', maxHeight: xxs ? '100dvh' : '90dvh' };\n}\n\n/** Which surface this viewport calls for. Lifted out to keep the component lean. */\nfunction usesSheet(presentation: AppHeaderDetailsProps['presentation'], compact: boolean): boolean {\n if (presentation === 'sheet') return true;\n if (presentation === 'dialog') return false;\n return compact;\n}\n\n/** One label/value line. The value may wrap to two lines; the label may not. */\nconst DetailRow: React.FC<{ row: AppHeaderDetailRow; last: boolean; dataTestId: string }> = ({\n row,\n last,\n dataTestId,\n}) => {\n const theme = useTheme();\n return (\n <Box\n data-testid={`${dataTestId}-row`}\n data-row={row.id ?? row.label}\n sx={{\n display: 'flex',\n alignItems: 'flex-start',\n justifyContent: 'space-between',\n gap: 2,\n py: 1.5,\n borderBottom: last ? 'none' : `1px solid ${theme.palette.divider}`,\n }}\n >\n <Typography variant=\"body1\" color=\"text.secondary\" component=\"span\" sx={{ flex: '0 0 auto' }}>\n {row.label}\n </Typography>\n <Typography\n variant=\"body1\"\n component=\"span\"\n sx={{\n minWidth: 0,\n textAlign: 'right',\n fontWeight: row.tone ? 700 : 500,\n color: row.tone ? accentFor(theme, row.tone).main : 'text.primary',\n // Newlines in a value are meaningful — an address is two lines.\n whiteSpace: 'pre-line',\n }}\n >\n {row.value}\n </Typography>\n </Box>\n );\n};\n\n/** The rows plus whatever the caller put under them. */\nconst DetailsBody: React.FC<\n Pick<AppHeaderDetailsProps, 'rows' | 'children'> & { dataTestId: string }\n> = ({ rows, children, dataTestId }) => (\n <Box data-testid={`${dataTestId}-body`}>\n {(rows ?? []).map((row, index) => (\n <DetailRow\n key={row.id ?? row.label}\n row={row}\n last={index === (rows?.length ?? 0) - 1 && !children}\n dataTestId={dataTestId}\n />\n ))}\n {children}\n </Box>\n);\n\n/**\n * The single full-width call to action, or nothing.\n *\n * `padded` is for the dialog, which has no footer slot of its own — and the\n * padding lives here rather than at the call site so an action-less panel does\n * not end in a strip of empty space.\n */\nconst DetailsAction: React.FC<{\n action?: AppHeaderDetailsAction;\n dataTestId: string;\n padded?: boolean;\n}> = ({ action, dataTestId, padded = false }) =>\n action ? (\n <Box sx={padded ? { pt: 2 } : undefined}>\n <Button\n variant=\"solid\"\n color={action.color ?? 'primary'}\n size=\"lg\"\n fullWidth\n disabled={action.disabled}\n onClick={action.onClick}\n dataTestId={action.dataTestId ?? `${dataTestId}-action`}\n >\n {action.label}\n </Button>\n </Box>\n ) : null;\n\n/**\n * The panel behind the header's disclosure — the hours, the address, the way\n * out — in the shape the viewport calls for.\n *\n * ONE component with two presentations, because they are one thing to the user\n * and one thing to the caller: a bottom sheet within reach of a thumb, a centred\n * dialog under a pointer. `auto` picks by viewport, so nobody writes that branch\n * at a call site and nobody ships a phone-shaped sheet stretched across a\n * desktop. Force either one with `presentation` when the surrounding layout\n * already decides (a preview frame, a story, a kiosk).\n */\nexport const AppHeaderDetails: React.FC<AppHeaderDetailsProps> = ({\n open,\n onClose,\n title,\n subtitle,\n rows,\n children,\n action,\n presentation = 'auto',\n breakpoint = 'sm',\n className,\n dataTestId = 'app-header-details',\n}) => {\n const theme = useTheme();\n const asSheet = usesSheet(presentation, useMediaQuery(theme.breakpoints.down(breakpoint)));\n const xxs = useMediaQuery(`(max-width:${XXS_MAX_WIDTH - 0.05}px)`);\n\n // Split once, not per branch: a STRING subtitle is the panel's own\n // `description` (both surfaces style it as part of their header), anything\n // richer is a node we render ourselves above the rows.\n const description = typeof subtitle === 'string' ? subtitle : undefined;\n const richSubtitle = description === undefined ? subtitle : null;\n\n const body = (\n <DetailsBody rows={rows} dataTestId={dataTestId}>\n {children}\n </DetailsBody>\n );\n const footer = <DetailsAction action={action} dataTestId={dataTestId} />;\n\n if (asSheet) {\n // No `showHandle`. The grab bar promises a drag this panel does not answer:\n // its height is its content's, so there is no second position to drag it\n // to, and the handle sat above a ✕ that already closes it. Swipe-to-dismiss\n // is `Sheet`'s default and still works — it just stops being advertised by\n // a control that looked resizable and was not.\n return (\n <Sheet\n open={open}\n onClose={onClose}\n onOpenChange={(next) => !next && onClose()}\n position=\"bottom\"\n size=\"md\"\n style={sheetHeight(xxs)}\n className={className}\n title={title}\n description={description}\n showCloseButton\n rounded\n footer={footer}\n dataTestId={dataTestId}\n >\n {richSubtitle}\n {body}\n </Sheet>\n );\n }\n\n return (\n <Dialog\n open={open}\n onClose={onClose}\n title={title}\n description={description}\n showCloseButton\n fullWidth\n className={className}\n dataTestId={dataTestId}\n PaperProps={{ sx: { maxWidth: DIALOG_WIDTH, borderRadius: 3 } }}\n >\n {richSubtitle}\n {body}\n <DetailsAction action={action} dataTestId={dataTestId} padded />\n </Dialog>\n );\n};\n\nAppHeaderDetails.displayName = 'AppHeaderDetails';\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/utility/InfiniteScroll/InfiniteScroll.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport React from 'react';\n\nimport { useLoadMore, useSentinel } from './InfiniteScroll.hooks';\nimport {\n containerStyles,\n DefaultEndMessage,\n DefaultError,\n DefaultLoader,\n} from './InfiniteScroll.parts';\nimport type { InfiniteScrollProps } from './InfiniteScroll.types';\n\nexport const InfiniteScroll: React.FC<InfiniteScrollProps> = ({\n children,\n variant = 'default',\n hasMore,\n loading,\n threshold = 150,\n loadMore,\n loader,\n loadingText,\n endText,\n endMessage,\n error,\n errorComponent,\n onError,\n className,\n style,\n width,\n scrollableTarget,\n testMode = false,\n testTriggerRef,\n}) => {\n const { sentinelRef, isIntersecting } = useSentinel({ testMode, threshold, scrollableTarget });\n\n useLoadMore({\n hasMore,\n loading,\n error,\n loadMore,\n onError,\n isIntersecting,\n testMode,\n testTriggerRef,\n });\n\n // The tail of the list is one of four things: the end message, an error, a\n // spinner, or the sentinel that asks for the next page.\n const renderSentinel = () => {\n if (!hasMore) return endMessage || <DefaultEndMessage endText={endText} />;\n if (error) return errorComponent || <DefaultError error={error} />;\n if (loading) return loader || <DefaultLoader loadingText={loadingText} />;\n\n return (\n <div\n ref={sentinelRef}\n data-testid=\"infinite-scroll-sentinel\"\n style={{\n height: variant === 'horizontal' ? '100%' : '1px',\n width: variant === 'horizontal' ? '1px' : '100%',\n }}\n />\n );\n };\n\n return (\n <Box\n className={className}\n sx={{\n ...containerStyles(variant, width),\n ...style,\n }}\n >\n {variant === 'reverse' && renderSentinel()}\n\n {variant === 'horizontal' ? (\n <Box sx={{ display: 'flex', flexDirection: 'row' }}>{children}</Box>\n ) : (\n children\n )}\n\n {variant !== 'reverse' && renderSentinel()}\n\n {variant === 'horizontal' && renderSentinel()}\n </Box>\n );\n};\n"],"mappings":";;;;;;;;;;;;AAAA,OAAO,SAAS;AAiDuB,cAiBnC,YAjBmC;AArChC,IAAM,iBAAgD,CAAC;AAAA,EAC5D;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA;AAAA,EACA,YAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AACF,MAAM;AACJ,QAAM,EAAE,aAAa,eAAe,IAAI,YAAY,EAAE,UAAU,WAAW,iBAAiB,CAAC;AAE7F,cAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAID,QAAM,iBAAiB,MAAM;AAC3B,QAAI,CAAC,QAAS,QAAO,cAAc,oBAAC,qBAAkB,SAAkB;AACxE,QAAI,MAAO,QAAO,kBAAkB,oBAAC,gBAAa,OAAc;AAChE,QAAI,QAAS,QAAO,UAAU,oBAAC,iBAAc,aAA0B;AAEvE,WACE;AAAA,MAAC;AAAA;AAAA,QACC,KAAK;AAAA,QACL,eAAY;AAAA,QACZ,OAAO;AAAA,UACL,QAAQ,YAAY,eAAe,SAAS;AAAA,UAC5C,OAAO,YAAY,eAAe,QAAQ;AAAA,QAC5C;AAAA;AAAA,IACF;AAAA,EAEJ;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,IAAI;AAAA,QACF,GAAG,gBAAgB,SAAS,KAAK;AAAA,QACjC,GAAG;AAAA,MACL;AAAA,MAEC;AAAA,oBAAY,aAAa,eAAe;AAAA,QAExC,YAAY,eACX,oBAAC,OAAI,IAAI,EAAE,SAAS,QAAQ,eAAe,MAAM,GAAI,UAAS,IAE9D;AAAA,QAGD,YAAY,aAAa,eAAe;AAAA,QAExC,YAAY,gBAAgB,eAAe;AAAA;AAAA;AAAA,EAC9C;AAEJ;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/layout/Box/Box.tsx"],"sourcesContent":["import MuiBox from '@mui/material/Box/index.js';\nimport type { SxProps, Theme } from '@mui/material/styles/index.js';\nimport * as React from 'react';\n\nimport { resolveBoxLayout, splitBoxProps, type BoxLayout } from './box-layout';\nimport type { BoxProps } from './Box.types';\nimport { resolveTestId } from '../../../platform/test-id';\nimport { useUiTheme } from '../../../provider/use-ui-theme';\n\n/**\n * `sx` is not CSS: it reads a bare number on `padding`, `margin` or `gap` as\n * SPACING UNITS, on `borderRadius` as a multiple of `shape.borderRadius`, and a\n * `width` of `1` or less as a fraction. The resolver's numbers are already px,\n * so every one of them is written as a px string — otherwise a `p={2}` box\n * renders 128px of padding on the web and 16dp on native, which is the one\n * thing this component exists to rule out.\n */\nconst PX_KEYS = new Set<keyof BoxLayout>([\n 'paddingTop', 'paddingRight', 'paddingBottom', 'paddingLeft',\n 'marginTop', 'marginRight', 'marginBottom', 'marginLeft',\n 'gap', 'borderRadius', 'borderWidth', 'width', 'height',\n]);\n\nexport function layoutToSx(layout: BoxLayout): Record<string, string | number> {\n return Object.fromEntries(\n Object.entries(layout).map(([key, value]) => [\n key,\n typeof value === 'number' && PX_KEYS.has(key as keyof BoxLayout) ? `${value}px` : value,\n ]),\n );\n}\n\n/**\n * The web `Box`: MUI's, with the neutral layout props resolved into `sx` ahead\n * of whatever `sx` the caller adds — so the caller's escape hatch still wins.\n */\nexport const Box = React.forwardRef<HTMLDivElement, BoxProps>(\n ({ children, sx, ...props }, ref) => {\n const theme = useUiTheme();\n const { layout, rest } = splitBoxProps(props);\n const resolved = layoutToSx(resolveBoxLayout(layout, theme)) as SxProps<Theme>;\n const testId = resolveTestId(layout);\n const merged: SxProps<Theme> = [\n resolved,\n ...(Array.isArray(sx) ? sx : sx === undefined ? [] : [sx]),\n ] as SxProps<Theme>;\n\n return (\n <MuiBox ref={ref} sx={merged} data-testid={testId} {...rest}>\n {children}\n </MuiBox>\n );\n },\n);\n\nBox.displayName = 'Box';\n"],"mappings":";;;;;;;;;;;;AAAA,OAAO,YAAY;AAEnB,YAAY,WAAW;AA8CjB;AA/BN,IAAM,UAAU,oBAAI,IAAqB;AAAA,EACvC;AAAA,EAAc;AAAA,EAAgB;AAAA,EAAiB;AAAA,EAC/C;AAAA,EAAa;AAAA,EAAe;AAAA,EAAgB;AAAA,EAC5C;AAAA,EAAO;AAAA,EAAgB;AAAA,EAAe;AAAA,EAAS;AACjD,CAAC;AAEM,SAAS,WAAW,QAAoD;AAC7E,SAAO,OAAO;AAAA,IACZ,OAAO,QAAQ,MAAM,EAAE,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM;AAAA,MAC3C;AAAA,MACA,OAAO,UAAU,YAAY,QAAQ,IAAI,GAAsB,IAAI,GAAG,KAAK,OAAO;AAAA,IACpF,CAAC;AAAA,EACH;AACF;AAMO,IAAM,MAAY;AAAA,EACvB,CAAC,EAAE,UAAU,IAAI,GAAG,MAAM,GAAG,QAAQ;AACnC,UAAM,QAAQ,WAAW;AACzB,UAAM,EAAE,QAAQ,KAAK,IAAI,cAAc,KAAK;AAC5C,UAAM,WAAW,WAAW,iBAAiB,QAAQ,KAAK,CAAC;AAC3D,UAAM,SAAS,cAAc,MAAM;AACnC,UAAM,SAAyB;AAAA,MAC7B;AAAA,MACA,GAAI,MAAM,QAAQ,EAAE,IAAI,KAAK,OAAO,SAAY,CAAC,IAAI,CAAC,EAAE;AAAA,IAC1D;AAEA,WACE,oBAAC,UAAO,KAAU,IAAI,QAAQ,eAAa,QAAS,GAAG,MACpD,UACH;AAAA,EAEJ;AACF;AAEA,IAAI,cAAc;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/navigation/NavigationMenu/NavigationMenu.shell.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport List from '@mui/material/List/index.js';\nimport ListItemButton from '@mui/material/ListItemButton/index.js';\nimport { alpha, keyframes, styled } from '@mui/material/styles/index.js';\nimport type { CSSProperties, PropsWithChildren, ReactNode } from 'react';\nimport React from 'react';\n\nimport { slideIn } from './NavigationMenu.styles';\nimport { shadowInk } from '../../../tokens/ink';\n\nconst megaMenuSlide = keyframes`\n from {\n opacity: 0;\n transform: translateY(20px);\n }\n to {\n opacity: 1;\n transform: translateY(0);\n }\n`;\n\n// These styled() components stay module-local: their inferred types cannot be\n// named across a module boundary here (TS2742). The plain components exported\n// below are what the layouts import.\nconst NavigationContainer = styled(Box, {\n shouldForwardProp: (prop) => !['variant', 'collapsed', 'minimal'].includes(prop as string),\n})<{ variant?: string; collapsed?: boolean; minimal?: boolean }>(({ theme, variant, collapsed, minimal }) => ({\n display: 'flex',\n position: 'relative',\n animation: `${slideIn} 0.4s ease-out`,\n ...(variant === 'horizontal' && {\n flexDirection: 'row',\n alignItems: 'center',\n width: '100%',\n ...(!minimal && {\n background: `linear-gradient(135deg, ${alpha(theme.palette.background.paper, 0.95)} 0%, ${alpha(theme.palette.background.paper, 0.98)} 100%)`,\n backdropFilter: 'blur(10px)',\n borderRadius: theme.spacing(2),\n boxShadow: `0 8px 32px ${shadowInk(theme, 0.08)}`,\n }),\n }),\n ...(variant === 'vertical' && {\n flexDirection: 'column',\n width: collapsed ? 80 : 280,\n transition: 'all 0.4s cubic-bezier(0.4, 0, 0.2, 1)',\n height: '100%',\n ...(!minimal && {\n background: `linear-gradient(180deg, ${alpha(theme.palette.background.paper, 0.98)} 0%, ${alpha(theme.palette.background.paper, 0.95)} 100%)`,\n backdropFilter: 'blur(12px)',\n borderRadius: theme.spacing(2),\n boxShadow: `0 12px 40px ${shadowInk(theme, 0.1)}`,\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n height: '200px',\n background: `radial-gradient(ellipse at top, ${alpha(theme.palette.primary.main, 0.05)} 0%, transparent 70%)`,\n pointerEvents: 'none',\n },\n }),\n }),\n ...(variant === 'mega' && {\n flexDirection: 'column',\n width: '100%',\n ...(!minimal && {\n background: `linear-gradient(135deg, ${alpha(theme.palette.background.paper, 0.98)} 0%, ${alpha(theme.palette.background.default, 0.95)} 100%)`,\n backdropFilter: 'blur(15px)',\n borderRadius: theme.spacing(3),\n overflow: 'hidden',\n boxShadow: `0 20px 60px ${shadowInk(theme, 0.12)}`,\n }),\n }),\n}));\n\nconst StyledList = styled(List, {\n shouldForwardProp: (prop) => !['variant', 'size'].includes(prop as string),\n})<{ variant?: string; size?: string }>(({ theme, variant }) => ({\n padding: 0,\n width: '100%',\n ...(variant === 'horizontal' && {\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n }),\n ...(variant === 'mega' && {\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fit, minmax(250px, 1fr))',\n gap: theme.spacing(2),\n padding: theme.spacing(2),\n }),\n}));\n\nconst LogoContainer = styled(Box)(({ theme }) => ({\n padding: theme.spacing(2.5),\n marginBottom: theme.spacing(2),\n position: 'relative',\n background: `linear-gradient(135deg, ${alpha(theme.palette.primary.main, 0.08)} 0%, ${alpha(theme.palette.primary.dark, 0.04)} 100%)`,\n borderBottom: `2px solid ${alpha(theme.palette.primary.main, 0.2)}`,\n overflow: 'hidden',\n\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n top: '-50%',\n right: '-50%',\n width: '200%',\n height: '200%',\n background: `radial-gradient(circle, ${alpha(theme.palette.primary.light, 0.1)} 0%, transparent 70%)`,\n animation: `${slideIn} 1s ease-out`,\n },\n\n '& > *': {\n position: 'relative',\n zIndex: 1,\n },\n}));\n\nconst CollapseButton = styled(ListItemButton)(({ theme }) => ({\n borderRadius: theme.spacing(1.5),\n margin: theme.spacing(1),\n background: `linear-gradient(135deg, ${alpha(theme.palette.primary.main, 0.08)} 0%, ${alpha(theme.palette.primary.dark, 0.04)} 100%)`,\n border: `1px solid ${alpha(theme.palette.primary.main, 0.2)}`,\n transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n\n '&:hover': {\n backgroundColor: alpha(theme.palette.primary.main, 0.12),\n transform: 'scale(1.05)',\n boxShadow: `0 6px 20px ${alpha(theme.palette.primary.main, 0.2)}`,\n\n '& .MuiListItemIcon-root': {\n transform: 'rotate(180deg)',\n transition: 'transform 0.3s ease',\n },\n },\n\n '&:active': {\n transform: 'scale(0.98)',\n },\n}));\n\nconst MegaMenuSection = styled(Box)(({ theme }) => ({\n padding: theme.spacing(3),\n borderRadius: theme.spacing(2),\n background: `linear-gradient(145deg, ${theme.palette.background.paper} 0%, ${alpha(theme.palette.background.default, 0.9)} 100%)`,\n boxShadow: `0 10px 30px ${shadowInk(theme, 0.08)}`,\n border: `1px solid ${alpha(theme.palette.divider, 0.08)}`,\n position: 'relative',\n overflow: 'hidden',\n animation: `${megaMenuSlide} 0.5s ease-out`,\n animationFillMode: 'both',\n\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n height: '3px',\n background: `linear-gradient(90deg, ${theme.palette.primary.main} 0%, ${theme.palette.primary.light} 50%, ${theme.palette.primary.main} 100%)`,\n backgroundSize: '200% 100%',\n animation: 'shimmer 3s ease-in-out infinite',\n },\n\n '@keyframes shimmer': {\n '0%': {\n backgroundPosition: '200% 0',\n },\n '100%': {\n backgroundPosition: '-200% 0',\n },\n },\n\n '&:hover': {\n transform: 'translateY(-4px)',\n boxShadow: `0 15px 40px ${shadowInk(theme, 0.12)}`,\n transition: 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n },\n\n '&:nth-of-type(1)': { animationDelay: '0.1s' },\n '&:nth-of-type(2)': { animationDelay: '0.2s' },\n '&:nth-of-type(3)': { animationDelay: '0.3s' },\n '&:nth-of-type(4)': { animationDelay: '0.4s' },\n}));\n\nexport interface NavigationShellProps extends PropsWithChildren {\n variant?: string;\n collapsed?: boolean;\n minimal?: boolean;\n className?: string;\n style?: CSSProperties;\n}\n\nexport const NavigationShell = React.forwardRef<HTMLDivElement, NavigationShellProps>(\n ({ children, ...props }, ref) => (\n <NavigationContainer ref={ref} {...props}>\n {children}\n </NavigationContainer>\n ),\n);\n\nNavigationShell.displayName = 'NavigationShell';\n\nexport const LogoBar: React.FC<PropsWithChildren> = ({ children }) => (\n <LogoContainer>{children}</LogoContainer>\n);\n\nexport const MenuList: React.FC<PropsWithChildren<{ variant?: string; size?: string }>> = ({\n children,\n ...props\n}) => <StyledList {...props}>{children}</StyledList>;\n\nexport const CollapseToggle: React.FC<PropsWithChildren<{ onClick: () => void }>> = ({\n children,\n onClick,\n}) => <CollapseButton onClick={onClick}>{children}</CollapseButton>;\n\nexport const MegaSection: React.FC<{ children: ReactNode }> = ({ children }) => (\n <MegaMenuSection>{children}</MegaMenuSection>\n);\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/MapPreview/MapTiles.tsx"],"sourcesContent":["import { alpha, useTheme } from '@mui/material/styles/index.js';\nimport type { FC } from 'react';\nimport React from 'react';\n\nimport { TILE_SIZE } from './mapProjection';\nimport { tileBackground } from './mapSurface';\nimport type { MapType } from './MapPreview.types';\n\n// Two extra rows and columns so panning does not expose an edge.\nconst VISIBLE_TILES = Math.ceil(800 / TILE_SIZE) + 2;\n// Tile coordinates are only legible once the grid is reasonably fine.\nconst LABEL_MIN_ZOOM = 10;\n\nexport interface MapTilesProps {\n origin: { x: number; y: number } | null;\n zoom: number;\n mapType: MapType;\n panOffset: { x: number; y: number };\n}\n\nexport const MapTiles: FC<MapTilesProps> = ({ origin, zoom, mapType, panOffset }) => {\n const theme = useTheme();\n const borderOpacity = theme.palette.mode === 'dark' ? 0.15 : 0.1;\n const background = tileBackground(mapType, theme);\n const half = Math.floor(VISIBLE_TILES / 2);\n\n return (\n <div\n style={{\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: `translate(calc(-50% + ${panOffset.x}px), calc(-50% + ${panOffset.y}px))`,\n width: TILE_SIZE * VISIBLE_TILES,\n height: TILE_SIZE * VISIBLE_TILES,\n display: 'grid',\n gridTemplateColumns: `repeat(${VISIBLE_TILES}, ${TILE_SIZE}px)`,\n gridTemplateRows: `repeat(${VISIBLE_TILES}, ${TILE_SIZE}px)`,\n transition: 'transform 0.1s ease-out',\n }}\n >\n {Array.from({ length: VISIBLE_TILES * VISIBLE_TILES }).map((_, index) => {\n // The grid is centred on the origin tile, so indices run from -half.\n const tileX = (origin?.x || 0) + (index % VISIBLE_TILES) - half;\n const tileY = (origin?.y || 0) + Math.floor(index / VISIBLE_TILES) - half;\n\n return (\n <div\n key={`tile-${tileX}-${tileY}`}\n style={{\n width: TILE_SIZE,\n height: TILE_SIZE,\n border: `1px solid ${alpha(theme.palette.divider, borderOpacity)}`,\n background,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '10px',\n color: alpha(theme.palette.text.secondary, 0.3),\n fontFamily: 'monospace',\n userSelect: 'none',\n }}\n >\n {zoom > LABEL_MIN_ZOOM && `${tileX},${tileY}`}\n </div>\n );\n })}\n </div>\n );\n};\n"],"mappings":";;;;;;;;AAAA,SAAS,OAAO,gBAAgB;AA+CtB;AAtCV,IAAM,gBAAgB,KAAK,KAAK,MAAM,SAAS,IAAI;AAEnD,IAAM,iBAAiB;AAShB,IAAM,WAA8B,CAAC,EAAE,QAAQ,MAAM,SAAS,UAAU,MAAM;AACnF,QAAM,QAAQ,SAAS;AACvB,QAAM,gBAAgB,MAAM,QAAQ,SAAS,SAAS,OAAO;AAC7D,QAAM,aAAa,eAAe,SAAS,KAAK;AAChD,QAAM,OAAO,KAAK,MAAM,gBAAgB,CAAC;AAEzC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAO;AAAA,QACL,UAAU;AAAA,QACV,KAAK;AAAA,QACL,MAAM;AAAA,QACN,WAAW,yBAAyB,UAAU,CAAC,oBAAoB,UAAU,CAAC;AAAA,QAC9E,OAAO,YAAY;AAAA,QACnB,QAAQ,YAAY;AAAA,QACpB,SAAS;AAAA,QACT,qBAAqB,UAAU,aAAa,KAAK,SAAS;AAAA,QAC1D,kBAAkB,UAAU,aAAa,KAAK,SAAS;AAAA,QACvD,YAAY;AAAA,MACd;AAAA,MAEC,gBAAM,KAAK,EAAE,QAAQ,gBAAgB,cAAc,CAAC,EAAE,IAAI,CAAC,GAAG,UAAU;AAEvE,cAAM,SAAS,QAAQ,KAAK,KAAM,QAAQ,gBAAiB;AAC3D,cAAM,SAAS,QAAQ,KAAK,KAAK,KAAK,MAAM,QAAQ,aAAa,IAAI;AAErE,eACE;AAAA,UAAC;AAAA;AAAA,YAEC,OAAO;AAAA,cACL,OAAO;AAAA,cACP,QAAQ;AAAA,cACR,QAAQ,aAAa,MAAM,MAAM,QAAQ,SAAS,aAAa,CAAC;AAAA,cAChE;AAAA,cACA,SAAS;AAAA,cACT,YAAY;AAAA,cACZ,gBAAgB;AAAA,cAChB,UAAU;AAAA,cACV,OAAO,MAAM,MAAM,QAAQ,KAAK,WAAW,GAAG;AAAA,cAC9C,YAAY;AAAA,cACZ,YAAY;AAAA,YACd;AAAA,YAEC,iBAAO,kBAAkB,GAAG,KAAK,IAAI,KAAK;AAAA;AAAA,UAftC,QAAQ,KAAK,IAAI,KAAK;AAAA,QAgB7B;AAAA,MAEJ,CAAC;AAAA;AAAA,EACH;AAEJ;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/DataGrid/DataGrid.body.tsx"],"sourcesContent":["/**\n * The DataGrid's `<thead>` and `<tbody>`.\n *\n * Split from the shell so each stays inside the size budget and so the\n * virtualization spacers — which are pure layout, not data — sit next to the\n * rows they pad rather than in the middle of the component that owns the paper.\n */\nimport Checkbox from '@mui/material/Checkbox/index.js';\nimport TableBody from '@mui/material/TableBody/index.js';\nimport TableCell from '@mui/material/TableCell/index.js';\nimport TableHead from '@mui/material/TableHead/index.js';\nimport TableRow from '@mui/material/TableRow/index.js';\nimport { useTheme } from '@mui/material/styles/index.js';\nimport type React from 'react';\n\nimport { GridRow, HeaderCell } from './DataGrid.cells';\nimport type { DataGridModel } from './DataGrid.model';\nimport type { DataGridProps } from './DataGrid.types';\n\nexport interface GridSectionProps<T extends Record<string, unknown>> {\n model: DataGridModel<T>;\n props: DataGridProps<T>;\n totalColumns: number;\n}\n\n/** The leading header cells for the selection / expansion columns. */\nfunction HeaderControls<T extends Record<string, unknown>>({\n model,\n props,\n}: GridSectionProps<T>): React.JSX.Element {\n const theme = useTheme();\n const { selection = { mode: 'none' }, expansion, stickyHeader = true } = props;\n const sticky = {\n position: stickyHeader ? ('sticky' as const) : ('static' as const),\n top: 0,\n zIndex: 1,\n backgroundColor: theme.palette.background.paper,\n };\n const total = model.processedRows.length;\n const picked = model.selectedRowIds.length;\n return (\n <>\n {selection.mode !== 'none' && (\n <TableCell padding=\"checkbox\" sx={sticky}>\n {selection.mode === 'multi' && (\n <Checkbox\n indeterminate={picked > 0 && picked < total}\n checked={total > 0 && picked === total}\n onChange={(event) =>\n model.setSelectedRowIds(\n event.target.checked\n ? model.processedRows.map((row, index) => rowIdOf(props, row, index))\n : [],\n )\n }\n inputProps={{ 'aria-label': 'Select all rows' }}\n />\n )}\n </TableCell>\n )}\n {expansion && <TableCell padding=\"checkbox\" sx={sticky} />}\n </>\n );\n}\n\n/** The caller's `getRowId`, or the row's own `id`, or its index. */\nexport function rowIdOf<T extends Record<string, unknown>>(\n props: DataGridProps<T>,\n row: T,\n index: number,\n): string | number {\n if (props.getRowId) return props.getRowId(row, index);\n const candidate = (row as { id?: string | number }).id;\n return candidate ?? index;\n}\n\nexport function GridHeader<T extends Record<string, unknown>>(\n section: GridSectionProps<T>,\n): React.JSX.Element {\n const { model, props } = section;\n const { sorting = {}, stickyHeader = true, headerHeight = 56 } = props;\n const sortable = sorting.mode === 'client' || sorting.mode === 'server';\n return (\n <TableHead data-slot=\"header\">\n <TableRow data-slot=\"header-row\" role=\"row\">\n <HeaderControls {...section} />\n {model.visibleColumns.map((column) => (\n <HeaderCell\n key={column.id}\n column={column}\n sort={model.sortBy.find((entry) => entry.id === column.id)}\n sortable={column.enableSort !== false && sortable}\n stickyHeader={stickyHeader}\n headerHeight={headerHeight}\n onSort={model.onSort}\n />\n ))}\n </TableRow>\n </TableHead>\n );\n}\n\n/** An invisible row standing in for the rows the window is not rendering. */\nfunction Spacer({ height, colSpan }: { height: number; colSpan: number }): React.JSX.Element | null {\n if (height <= 0) return null;\n return (\n <TableRow>\n <TableCell colSpan={colSpan} sx={{ height, border: 'none', p: 0 }} />\n </TableRow>\n );\n}\n\nexport function GridBody<T extends Record<string, unknown>>(\n section: GridSectionProps<T>,\n): React.JSX.Element {\n const { model, props, totalColumns } = section;\n const { start, end } = model.visibleRange;\n const trailing = model.virtualized ? model.processedRows.length - end : 0;\n return (\n <TableBody data-slot=\"body\">\n {model.virtualized ? (\n <Spacer height={start * model.rowHeight} colSpan={totalColumns} />\n ) : null}\n {model.visibleRows.map((row, offset) => {\n const index = model.virtualized ? start + offset : offset;\n const rowId = rowIdOf(props, row, index);\n return (\n <GridRow\n key={rowId}\n row={row}\n index={index}\n rowId={rowId}\n isSelected={model.selectedRowIdsSet.has(rowId)}\n isExpanded={model.expandedRowIdsSet.has(rowId)}\n totalColumns={totalColumns}\n model={model}\n props={props}\n />\n );\n })}\n {model.virtualized ? (\n <Spacer height={trailing * model.rowHeight} colSpan={totalColumns} />\n ) : null}\n </TableBody>\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/layout/TableFilter/TableFilter.tsx"],"sourcesContent":["'use client';\n\nimport CloseIcon from '@mui/icons-material/Close';\nimport SearchIcon from '@mui/icons-material/Search';\nimport Box from '@mui/material/Box/index.js';\nimport Checkbox from '@mui/material/Checkbox/index.js';\nimport Divider from '@mui/material/Divider/index.js';\nimport FormControlLabel from '@mui/material/FormControlLabel/index.js';\nimport IconButton from '@mui/material/IconButton/index.js';\nimport InputAdornment from '@mui/material/InputAdornment/index.js';\nimport Link from '@mui/material/Link/index.js';\nimport TextField from '@mui/material/TextField/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport React, { useRef, useState } from 'react';\n\nimport { TableFilterContext, useTableFilterContext } from './TableFilterContext';\nimport type {\n TableFilterCheckboxFieldProps,\n TableFilterKeywordProps,\n TableFilterLayoutProps,\n TableFilterMainProps,\n TableFilterPanelProps,\n TableFilterProps,\n TableFilterRangeFieldProps,\n TableFilterSectionProps,\n} from './TableFilter.types';\nimport { fieldTextFieldStyles } from '../../../tokens/field-height';\nimport { sxRem } from '../../../tokens/relative';\n\nconst PANEL_WIDTH = 280;\n\n/**\n * Compound filter-panel system, MUI port of the reference `TableFilter`. Provides\n * open/close state; `Panel` slides in from the right beside `Main` (no overlap).\n *\n * @example\n * ```tsx\n * <TableFilter open={open} onOpenChange={setOpen} hasActiveFilters={n > 0}>\n * <TableFilter.Layout>\n * <TableFilter.Main>{table}</TableFilter.Main>\n * <TableFilter.Panel onClearAll={clearAll}>\n * <TableFilter.Keyword value={q} onChange={setQ} />\n * <TableFilter.Section title=\"Attributes\">\n * <TableFilter.CheckboxField label=\"Category\" options={cats} selected={sel} onToggle={toggle} />\n * <TableFilter.RangeField label=\"Price\" unit=\"R$\" value={price} onChange={setPrice} />\n * </TableFilter.Section>\n * </TableFilter.Panel>\n * </TableFilter.Layout>\n * </TableFilter>\n * ```\n */\nexport function TableFilter({\n children,\n open,\n onOpenChange,\n hasActiveFilters = false,\n copy,\n}: TableFilterProps): React.JSX.Element {\n return (\n <TableFilterContext.Provider value={{ open, onOpenChange, hasActiveFilters, copy }}>\n {children}\n </TableFilterContext.Provider>\n );\n}\nTableFilter.displayName = 'TableFilter';\n\nconst TableFilterLayout = ({ children, className }: TableFilterLayoutProps): React.JSX.Element => {\n const { open } = useTableFilterContext();\n return (\n <Box\n className={className}\n sx={{\n display: 'flex',\n minHeight: 0,\n minWidth: 0,\n flex: 1,\n alignItems: 'stretch',\n overflow: 'hidden',\n gap: open ? 2 : 0,\n }}\n >\n {children}\n </Box>\n );\n};\nTableFilterLayout.displayName = 'TableFilter.Layout';\n\nconst TableFilterMain = ({ children, className }: TableFilterMainProps): React.JSX.Element => (\n <Box className={className} sx={{ minWidth: 0, flex: 1, overflowY: 'auto', overflowX: 'hidden' }}>\n {children}\n </Box>\n);\nTableFilterMain.displayName = 'TableFilter.Main';\n\nconst TableFilterPanel = ({\n children,\n onClearAll,\n ariaLabel = 'Filters',\n clearTestId,\n}: TableFilterPanelProps): React.JSX.Element => {\n const { open, copy } = useTableFilterContext();\n return (\n <Box\n component=\"aside\"\n aria-label={ariaLabel}\n aria-hidden={!open}\n sx={{\n display: 'flex',\n minHeight: 0,\n flexShrink: 0,\n flexDirection: 'column',\n alignSelf: 'stretch',\n overflow: 'hidden',\n bgcolor: 'background.paper',\n width: open ? PANEL_WIDTH : 0,\n borderLeft: open ? 1 : 0,\n borderColor: 'divider',\n transition: 'width 300ms ease-in-out',\n '@media (prefers-reduced-motion: reduce)': { transition: 'none' },\n }}\n >\n <Box\n sx={{\n display: 'flex',\n minHeight: 0,\n flex: 1,\n flexDirection: 'column',\n overflowY: 'auto',\n overflowX: 'hidden',\n visibility: open ? 'visible' : 'hidden',\n opacity: open ? 1 : 0,\n pointerEvents: open ? 'auto' : 'none',\n transition: 'opacity 200ms ease-out',\n }}\n >\n <Box sx={{ boxSizing: 'border-box', display: 'flex', width: '100%', minWidth: 0, flexDirection: 'column', gap: 2.5, p: 2 }}>\n <Box sx={{ display: 'flex', justifyContent: 'flex-end' }}>\n <Link\n component=\"button\"\n type=\"button\"\n underline=\"hover\"\n data-testid={clearTestId}\n onClick={onClearAll}\n sx={{ fontSize: sxRem(12), color: 'text.secondary' }}\n >\n {copy.clearAllFilters}\n </Link>\n </Box>\n {children}\n </Box>\n </Box>\n </Box>\n );\n};\nTableFilterPanel.displayName = 'TableFilter.Panel';\n\nconst TableFilterKeyword = ({\n value,\n onChange,\n placeholder = 'Press Enter to filter',\n label = 'Filter by keyword',\n testId,\n}: TableFilterKeywordProps): React.JSX.Element => {\n const { copy } = useTableFilterContext();\n const [draft, setDraft] = useState(value);\n const prevValue = useRef(value);\n if (prevValue.current !== value) {\n prevValue.current = value;\n if (draft !== value) setDraft(value);\n }\n\n const commit = (): void => {\n if (draft !== value) onChange(draft);\n };\n const clearKeyword = (): void => {\n setDraft('');\n if (value !== '') onChange('');\n };\n\n return (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1 }}>\n <Typography component=\"label\" sx={{ fontSize: sxRem(12), fontWeight: 500, color: 'text.secondary' }}>\n {label}\n </Typography>\n <TextField\n size=\"small\"\n sx={fieldTextFieldStyles}\n name=\"keyword\"\n placeholder={placeholder}\n value={draft}\n onChange={(event) => setDraft(event.target.value)}\n onBlur={commit}\n onKeyDown={(event) => {\n if (event.key !== 'Enter') return;\n event.preventDefault();\n commit();\n }}\n inputProps={{ 'aria-label': label, 'data-testid': testId }}\n InputProps={{\n startAdornment: (\n <InputAdornment position=\"start\">\n <SearchIcon sx={{ fontSize: sxRem(16), color: 'text.secondary' }} />\n </InputAdornment>\n ),\n endAdornment:\n draft !== '' ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n aria-label={copy.clearKeyword}\n data-testid={testId ? `${testId}-clear` : undefined}\n onMouseDown={(event) => event.preventDefault()}\n onClick={clearKeyword}\n >\n <CloseIcon sx={{ fontSize: sxRem(16) }} />\n </IconButton>\n </InputAdornment>\n ) : null,\n }}\n />\n </Box>\n );\n};\nTableFilterKeyword.displayName = 'TableFilter.Keyword';\n\nconst TableFilterSection = ({ title, children }: TableFilterSectionProps): React.JSX.Element => (\n <Box>\n <Divider sx={{ mb: 2.5 }} />\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1.5 }}>\n <Typography component=\"h2\" sx={{ fontSize: sxRem(14), fontWeight: 600, color: 'text.primary' }}>\n {title}\n </Typography>\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 2 }}>{children}</Box>\n </Box>\n </Box>\n);\nTableFilterSection.displayName = 'TableFilter.Section';\n\nfunction TableFilterCheckboxField<TValue extends string = string>({\n label,\n options,\n selected,\n onToggle,\n testId,\n}: TableFilterCheckboxFieldProps<TValue>): React.JSX.Element {\n return (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1 }} data-testid={testId}>\n <Typography sx={{ fontSize: sxRem(12), fontWeight: 500, color: 'text.secondary' }}>{label}</Typography>\n <Box sx={{ display: 'flex', flexDirection: 'column' }}>\n {options.map((option) => {\n const checked = selected.has(option.value);\n return (\n <FormControlLabel\n key={option.value}\n control={\n <Checkbox\n size=\"small\"\n checked={checked}\n onChange={(event) => onToggle(option.value, event.target.checked)}\n data-testid={testId ? `${testId}-${option.value}` : undefined}\n sx={{ py: 0.25 }}\n />\n }\n label={\n <Box component=\"span\" sx={{ fontSize: sxRem(14) }}>\n {option.label}\n {option.count != null && (\n <Box component=\"span\" sx={{ color: 'text.secondary' }}>\n {' '}\n ({option.count})\n </Box>\n )}\n </Box>\n }\n sx={{ ml: -0.5, mr: 0 }}\n />\n );\n })}\n </Box>\n </Box>\n );\n}\nTableFilterCheckboxField.displayName = 'TableFilter.CheckboxField';\n\nfunction parseBound(text: string): number | undefined {\n if (text.trim() === '') return undefined;\n const parsed = Number(text);\n return Number.isNaN(parsed) ? undefined : parsed;\n}\n\n/** One numeric bound input (min or max) for {@link TableFilterRangeField}. */\nfunction RangeBound({\n bound,\n error,\n placeholder,\n step,\n ariaLabel,\n testId,\n onChange,\n}: {\n bound: number | undefined;\n error: boolean;\n placeholder: string;\n step?: number;\n ariaLabel: string;\n testId?: string;\n onChange: (next: number | undefined) => void;\n}): React.JSX.Element {\n return (\n <TextField\n size=\"small\"\n sx={fieldTextFieldStyles}\n type=\"number\"\n error={error}\n placeholder={placeholder}\n value={bound != null ? String(bound) : ''}\n onChange={(event) => onChange(parseBound(event.target.value))}\n inputProps={{ step, 'aria-label': ariaLabel, 'data-testid': testId }}\n />\n );\n}\n\n/** Inverted range: both ends set and max < min (surfaced to the user as an error). */\nconst isRangeInverted = (value: { min?: number; max?: number }): boolean =>\n value.min != null && value.max != null && value.max < value.min;\n\nconst TableFilterRangeField = ({\n label,\n value,\n onChange,\n unit,\n step,\n minPlaceholder,\n maxPlaceholder,\n invalidLabel,\n testId,\n}: TableFilterRangeFieldProps): React.JSX.Element => {\n const { copy } = useTableFilterContext();\n const invalid = isRangeInverted(value);\n // A field may override any of the three; unset, they come from the root's\n // table. Neither path reaches an English literal in this package.\n const minText = minPlaceholder ?? copy.rangeMin;\n const maxText = maxPlaceholder ?? copy.rangeMax;\n const invalidText = invalidLabel ?? copy.invalidRange;\n return (\n <Box sx={{ display: 'flex', flexDirection: 'column', gap: 1 }} data-testid={testId}>\n <Typography sx={{ fontSize: sxRem(12), fontWeight: 500, color: 'text.secondary' }}>\n {label}\n {unit ? ` (${unit})` : ''}\n </Typography>\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <RangeBound\n bound={value.min}\n error={invalid}\n placeholder={minText}\n step={step}\n ariaLabel={`${label} ${minText}`}\n testId={testId ? `${testId}-min` : undefined}\n onChange={(min) => onChange({ ...value, min })}\n />\n <Typography component=\"span\" sx={{ color: 'text.secondary' }}>\n –\n </Typography>\n <RangeBound\n bound={value.max}\n error={invalid}\n placeholder={maxText}\n step={step}\n ariaLabel={`${label} ${maxText}`}\n testId={testId ? `${testId}-max` : undefined}\n onChange={(max) => onChange({ ...value, max })}\n />\n </Box>\n {invalid && (\n <Typography\n role=\"alert\"\n data-testid={testId ? `${testId}-error` : undefined}\n sx={{ fontSize: sxRem(11.2), color: 'error.main' }}\n >\n {invalidText}\n </Typography>\n )}\n </Box>\n );\n};\nTableFilterRangeField.displayName = 'TableFilter.RangeField';\n\nTableFilter.Layout = TableFilterLayout;\nTableFilter.Main = TableFilterMain;\nTableFilter.Panel = TableFilterPanel;\nTableFilter.Keyword = TableFilterKeyword;\nTableFilter.Section = TableFilterSection;\nTableFilter.CheckboxField = TableFilterCheckboxField;\nTableFilter.RangeField = TableFilterRangeField;\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/DataViews/data-views-overflow-costs.ts"],"sourcesContent":["/**\n * WHAT EACH THING ON THE TOOLBAR COSTS, IN PIXELS.\n *\n * The pricing half of the collapse ladder, split from `data-views-overflow` at\n * the file-size gate. Pure arithmetic and constants: no React, no measurement,\n * no decisions. `data-views-overflow` measures the row and spends what this\n * says it has.\n *\n * Every number here is either MEASURED in a browser (and says so) or\n * deliberately generous. Over-pricing sheds one control too early, which the\n * \"Mais\" button absorbs invisibly; under-pricing breaks the line.\n */\nimport type { OverflowField } from \"./data-views-overflow\";\nimport type { RangeValue } from \"./data-views-types\";\n\n/**\n * Rough rendered width of a control, in px.\n *\n * An ESTIMATE from the label text rather than a real measurement, deliberately:\n * measuring the true width needs every control mounted first, and mounting them\n * to decide whether to mount them is the layout thrash this hook exists to\n * avoid. The estimate only has to rank controls and find the cut point — being\n * a few px out moves the cut by at most one control, and the overflow catches it.\n */\nexport function estimateWidth(text: string, extra: number): number {\n /**\n * ~7.6px per character at the toolbar's font size, plus 76px of chrome:\n * horizontal padding, the border, and the dropdown chevron. The chrome used\n * to be 52, which under-priced every control by roughly a chevron's width —\n * six of them then \"fitted\" a row they overflowed, and because they are flex\n * children the row paid for it by squeezing labels to \"D…\" and \"V…\" rather\n * than by shedding a control into the overflow.\n *\n * Deliberately generous: over-pricing sheds one control too early, which the\n * \"Mais\" button absorbs invisibly. Under-pricing breaks the line.\n *\n * The chrome was 76, and generous had turned into wrong. MEASURED on the\n * Pedidos bar: \"Pagamento\" renders at 123px against an estimate of 144, and\n * \"Situação\" at 107 against 137 — every pill over-priced by ~22%, which on a\n * phone is the whole difference between one pill on the bar and none. 56 is\n * still above the ~50 measured, so the slack the comment above asks for is\n * intact; it is just slack rather than a second control's worth of budget.\n */\n return Math.round(text.length * 7.6) + 56 + extra;\n}\n\n/** Is a range bounded at either end? */\nexport function isRangeSet(range: RangeValue | undefined): boolean {\n return Boolean(range && (range.min !== undefined || range.max !== undefined));\n}\n\n/** The label a pill actually renders, which is what decides its width. */\nexport function pillText<T extends Record<string, unknown>>(field: OverflowField<T>, values: string[]): string {\n if (values.length === 0) return field.label;\n if (values.length === 1) {\n const option = field.pill?.options.find((entry) => entry.value === values[0]);\n return `${field.label}: ${option?.label ?? values[0]}`;\n }\n return `${field.label}: ${values.length}`;\n}\n\n/** Fixed toolbar furniture the filters have to fit around, in px. */\nexport const RESERVED = {\n /** The search box never shrinks below this. */\n search: 200,\n /**\n * The \"N de N\" counter.\n *\n * MEASURED at 35px, plus its divider and gap. The old 96 was priced for a\n * counter reading \"1.234 de 5.678\"; a phone shows \"3 de 3\", and charging\n * nearly triple its rendered width came straight out of the filter budget.\n */\n counter: 56,\n /**\n * ONE right-hand control (Exibir, or Exportar) WITH its text label.\n *\n * Priced per control rather than for the pair, because the pair is not what\n * every page renders: \"Exportar\" exists only when the host passes an\n * `exportConfig`, and several pages (Pedidos among them) put their export in\n * the PAGE HEADER instead. Charging 216 there billed the filters for a button\n * that was never on the bar — ~108px of budget spent on nothing, which on a\n * phone is the difference between one filter pill and none.\n */\n displayControl: 108,\n /**\n * The same control as an icon only — step 2 of the ladder.\n *\n * MEASURED at 133px for the PAIR (66 each: a Button's minimum tap target is\n * a good deal wider than the 20px glyph inside it); 70 keeps that total's\n * slack at one control's granularity.\n */\n displayControlCompact: 70,\n /**\n * What step 4 leaves behind: the search as a bare magnifier.\n *\n * MEASURED at 30px on the Pedidos bar (`…-search-all-collapsed`); 38 keeps a\n * tap target's worth of slack over it.\n */\n searchIcon: 38,\n /**\n * The narrowest keyword box still worth typing into — below it the operator\n * cannot read back what they wrote, and the box takes over the cluster\n * instead of sharing it (see `searchTakeover`).\n *\n * 120 rather than 140 because this is compared against the ESTIMATE, which\n * over-prices on purpose (see `estimateWidth`). At 140 a large phone took the\n * whole cluster to produce a box barely wider than the one it could have had\n * while keeping its filters — paying for nothing.\n */\n usableSearch: 120,\n /**\n * The \"Mais\" button, only charged when there IS an overflow — and priced by\n * the state it is actually in, like the right-hand cluster beside it.\n *\n * MEASURED: 128px with its label, badge and chevron; 69px once the ladder has\n * it down to icon + badge. One number for both was wrong in BOTH directions —\n * it under-priced the wide bar (the row's own failure mode) and over-priced\n * the narrow one by a whole pill.\n */\n overflowButton: 136,\n overflowButtonCompact: 80,\n /**\n * \"Limpar\", only charged when there IS something to clear.\n *\n * It appears exactly when the row is at its widest — every applied filter\n * has a longer label than the idle one it replaced — so leaving it unpriced\n * would break the line at the one moment the operator most needs it.\n * Measured at 64 as an icon; 72 with slack.\n */\n clearAll: 72,\n /**\n * The row's own padding, plus the gaps BETWEEN the fixed furniture.\n *\n * Not the per-control gaps — `splitFilters` already adds a `GAP` for every\n * filter it keeps, so counting a fourth one here charged one gap twice.\n * MEASURED: 32px of padding (16 each side) + three 8px gaps between the\n * search, the counter and the right cluster.\n */\n chrome: 56,\n} as const;\n\n/** The gap between two controls. */\nexport const GAP = 8;\n\n/** What the right-hand cluster costs, given what the host actually renders. */\nexport function rightClusterCost(hasExport: boolean, compact: boolean): number {\n const one = compact ? RESERVED.displayControlCompact : RESERVED.displayControl;\n return hasExport ? one * 2 : one;\n}\n\n/**\n * What the toolbar furniture costs at a given rung of the ladder — the budget\n * the filter controls have to fit AROUND.\n *\n * This exists because the two halves used to disagree. `splitFilters` priced\n * the furniture at its widest (search 200 + counter 96 + right 216) and shed\n * every filter to make room; the ladder then collapsed those very controls to\n * 44 + 0 + 140 and nobody handed the ~330px back. On a 428px phone that showed\n * as a bar carrying a magnifier, a \"Mais 5\" pill, and a band of nothing.\n */\nexport function furnitureCost(\n flags: { searchCollapsed: boolean; counterHidden: boolean; compactControls: boolean },\n hasExport: boolean,\n): number {\n return (\n (flags.searchCollapsed ? RESERVED.searchIcon : RESERVED.search) +\n (flags.counterHidden ? 0 : RESERVED.counter) +\n rightClusterCost(hasExport, flags.compactControls) +\n RESERVED.chrome\n );\n}\n"],"mappings":";AAwBO,SAAS,cAAc,MAAc,OAAuB;AAmBjE,SAAO,KAAK,MAAM,KAAK,SAAS,GAAG,IAAI,KAAK;AAC9C;AAGO,SAAS,WAAW,OAAwC;AACjE,SAAO,QAAQ,UAAU,MAAM,QAAQ,UAAa,MAAM,QAAQ,OAAU;AAC9E;AAGO,SAAS,SAA4C,OAAyB,QAA0B;AAC7G,MAAI,OAAO,WAAW,EAAG,QAAO,MAAM;AACtC,MAAI,OAAO,WAAW,GAAG;AACvB,UAAM,SAAS,MAAM,MAAM,QAAQ,KAAK,CAAC,UAAU,MAAM,UAAU,OAAO,CAAC,CAAC;AAC5E,WAAO,GAAG,MAAM,KAAK,KAAK,QAAQ,SAAS,OAAO,CAAC,CAAC;AAAA,EACtD;AACA,SAAO,GAAG,MAAM,KAAK,KAAK,OAAO,MAAM;AACzC;AAGO,IAAM,WAAW;AAAA;AAAA,EAEtB,QAAQ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQR,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWT,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQhB,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOvB,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAWZ,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUd,gBAAgB;AAAA,EAChB,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASvB,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASV,QAAQ;AACV;AAGO,IAAM,MAAM;AAGZ,SAAS,iBAAiB,WAAoB,SAA0B;AAC7E,QAAM,MAAM,UAAU,SAAS,wBAAwB,SAAS;AAChE,SAAO,YAAY,MAAM,IAAI;AAC/B;AAYO,SAAS,cACd,OACA,WACQ;AACR,UACG,MAAM,kBAAkB,SAAS,aAAa,SAAS,WACvD,MAAM,gBAAgB,IAAI,SAAS,WACpC,iBAAiB,WAAW,MAAM,eAAe,IACjD,SAAS;AAEb;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/feedback/Modal/Modal.styles.ts"],"sourcesContent":["import { alpha, keyframes } from '@mui/material/styles/index.js';\nimport type { CSSObject, Theme } from '@mui/material/styles/index.js';\n\nimport { scrim, shadowInk } from '../../../tokens/ink';\n\nimport type { ModalProps } from './Modal.types';\n\ntype Variant = NonNullable<ModalProps['variant']>;\ntype Size = NonNullable<ModalProps['size']>;\ntype Radius = NonNullable<ModalProps['borderRadius']>;\n\nconst pulseAnimation = keyframes`\n 0% {\n box-shadow: 0 0 0 0 currentColor;\n opacity: 1;\n }\n 70% {\n box-shadow: 0 0 0 20px currentColor;\n opacity: 0;\n }\n 100% {\n box-shadow: 0 0 0 0 currentColor;\n opacity: 0;\n }\n`;\n\nconst RADII: Record<Radius, (theme: Theme) => number | string> = {\n none: () => 0,\n sm: (theme) => theme.spacing(0.5),\n md: (theme) => theme.spacing(1),\n lg: (theme) => theme.spacing(2),\n xl: (theme) => theme.spacing(3),\n};\n\n/** Every preset is capped at 90vw so the panel never overflows a small screen. */\nconst WIDTHS: Record<Size, number> = { xs: 320, sm: 480, md: 640, lg: 800, xl: 960 };\n\n/**\n * Where the panel sits. Top and bottom are the same layout anchored to opposite\n * edges; centre is the only one that offsets on both axes.\n */\nconst PLACEMENTS: Record<string, CSSObject> = {\n top: { top: '10%', left: '50%', transform: 'translateX(-50%)', maxHeight: '80vh' },\n bottom: { bottom: '10%', left: '50%', transform: 'translateX(-50%)', maxHeight: '80vh' },\n center: {\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n maxHeight: '90vh',\n },\n};\n\ninterface ModalStyleFlags {\n variant: Variant;\n size: Size;\n borderRadius: Radius;\n glass: boolean;\n gradient: boolean;\n glow: boolean;\n pulse: boolean;\n}\n\n/** The ring that expands out of the panel while `pulse` is set. */\nconst pulseRing = (theme: Theme): CSSObject => ({\n content: '\"\"',\n position: 'absolute' as const,\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n borderRadius: 'inherit',\n backgroundColor: theme.palette.primary.main,\n opacity: 0.3,\n animation: `${pulseAnimation} 2s infinite`,\n pointerEvents: 'none' as const,\n zIndex: -1,\n});\n\n/** The surface: its fill, its blur and the shadow that lifts it off the backdrop. */\nconst surface = (theme: Theme, flags: ModalStyleFlags): CSSObject => {\n const { variant, glass, gradient, glow } = flags;\n // The glass variant is the glass flag by another name, so either turns it on.\n const isGlass = glass || variant === 'glass';\n\n const boxShadow = glow\n ? `0 0 40px ${alpha(theme.palette.primary.main, 0.3)}`\n : isGlass\n ? `0 8px 32px ${shadowInk(theme, 0.1)}`\n : theme.shadows[8];\n\n return {\n backgroundColor: isGlass\n ? alpha(theme.palette.background.paper, 0.1)\n : theme.palette.background.paper,\n backdropFilter: isGlass ? 'blur(20px)' : gradient ? 'blur(10px)' : 'none',\n border: isGlass ? `1px solid ${alpha(theme.palette.primary.main, 0.2)}` : 'none',\n boxShadow,\n ...(gradient && {\n background: `linear-gradient(135deg, ${alpha(theme.palette.primary.main, 0.1)}, ${alpha(theme.palette.secondary.main, 0.1)})`,\n }),\n };\n};\n\nexport const panelSx = (theme: Theme, flags: ModalStyleFlags): CSSObject => {\n const { variant, size, borderRadius, pulse } = flags;\n\n return {\n // A pulsing panel positions its own ring, so it becomes the containing block.\n position: pulse ? ('relative' as const) : ('absolute' as const),\n width: WIDTHS[size] ?? WIDTHS.md,\n maxWidth: '90vw',\n borderRadius: (RADII[borderRadius] ?? RADII.lg)(theme),\n outline: 0,\n overflowY: 'auto',\n transition: theme.transitions.create(\n ['box-shadow', 'background-color', 'backdrop-filter', 'transform'],\n { duration: theme.transitions.duration.standard },\n ),\n ...(PLACEMENTS[variant] ?? PLACEMENTS.center),\n ...surface(theme, flags),\n ...(pulse && { '&::after': pulseRing(theme) }),\n };\n};\n\nexport const backdropSx = (theme: Theme, isGlass: boolean): CSSObject => ({\n backgroundColor: scrim(theme, isGlass ? 0.2 : 0.5),\n backdropFilter: isGlass ? 'blur(8px)' : 'none',\n});\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/feedback/Dialog/Dialog.styles.ts"],"sourcesContent":["import type { SxProps, Theme } from '@mui/material/styles/index.js';\nimport { alpha, keyframes } from '@mui/material/styles/index.js';\n\nimport type { DialogBorderRadius, DialogSize, DialogVariant } from './Dialog.base';\nimport {\n DIALOG_BACKDROP,\n DIALOG_BORDER_WIDTH,\n DIALOG_GLASS,\n DIALOG_GLOW,\n DIALOG_GRADIENT,\n DIALOG_MARGIN_UNITS,\n DIALOG_MAX_WIDTH,\n DIALOG_PULSE,\n DIALOG_RADIUS_UNITS,\n DIALOG_WIDTH_PERCENT,\n} from './Dialog.metrics';\nimport { scrim, shadowInk } from '../../../tokens/ink';\nimport { shadowCss } from '../../../tokens/shadow';\nimport { dynamicViewportHeight } from '../../../utils/viewport';\n\n/**\n * Paper/backdrop styling for the Dialog component (FUT-181 gate cleanup):\n * pure helpers so `Dialog.tsx` stays within the size/complexity budget.\n *\n * Every number comes from `Dialog.metrics.ts`, which the native renderer reads\n * too — so a paper cannot be 800px wide on one side and 780 on the other.\n */\n\n// Define pulse animation\nconst pulseAnimation = keyframes`\n 0% {\n box-shadow: 0 0 0 0 currentColor;\n opacity: 1;\n }\n 70% {\n box-shadow: 0 0 0 ${DIALOG_PULSE.spread}px currentColor;\n opacity: 0;\n }\n 100% {\n box-shadow: 0 0 0 0 currentColor;\n opacity: 0;\n }\n`;\n\n/** Style toggles that shape the dialog paper (extracted so each fn stays small). */\ninterface VariantStyleOptions {\n variant: DialogVariant;\n size: DialogSize;\n borderRadius: DialogBorderRadius;\n glass: boolean;\n gradient: boolean;\n glow: boolean;\n pulse: boolean;\n}\n\nfunction borderRadiusOf(theme: Theme, borderRadius: VariantStyleOptions['borderRadius']) {\n const units = DIALOG_RADIUS_UNITS[borderRadius] ?? DIALOG_RADIUS_UNITS.lg;\n // `none` is a bare 0 rather than `spacing(0)`, as this has always written it.\n return units === 0 ? 0 : theme.spacing(units);\n}\n\nfunction maxWidthOf(size: VariantStyleOptions['size']): number {\n return DIALOG_MAX_WIDTH[size] ?? DIALOG_MAX_WIDTH.md;\n}\n\nfunction baseStylesOf(theme: Theme, opts: VariantStyleOptions) {\n return {\n borderRadius: borderRadiusOf(theme, opts.borderRadius),\n maxWidth: maxWidthOf(opts.size),\n width: `${DIALOG_WIDTH_PERCENT}vw`,\n margin: theme.spacing(DIALOG_MARGIN_UNITS),\n transition: theme.transitions.create(\n ['box-shadow', 'background-color', 'backdrop-filter'],\n { duration: theme.transitions.duration.standard },\n ),\n };\n}\n\nfunction glowStylesOf(theme: Theme, glow: boolean) {\n return glow\n ? {\n boxShadow: shadowCss({\n offsetX: 0,\n offsetY: 0,\n blurRadius: DIALOG_GLOW.blurRadius,\n spreadDistance: 0,\n color: alpha(theme.palette.primary.main, DIALOG_GLOW.alpha),\n }),\n }\n : {};\n}\n\nfunction pulseStylesOf(theme: Theme, pulse: boolean) {\n if (!pulse) return {};\n return {\n position: 'relative' as const,\n '&::after': {\n content: '\"\"',\n position: 'absolute' as const,\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n borderRadius: 'inherit',\n backgroundColor: theme.palette.primary.main,\n opacity: DIALOG_PULSE.alpha,\n animation: `${pulseAnimation} ${DIALOG_PULSE.durationMs / 1000}s infinite`,\n pointerEvents: 'none' as const,\n zIndex: DIALOG_PULSE.zIndex,\n },\n };\n}\n\n/** The default variant's paper: optional gradient/glass over the base styles. */\nfunction defaultVariantStyles(theme: Theme, opts: VariantStyleOptions) {\n const gradientStyles = opts.gradient\n ? {\n background: `linear-gradient(${DIALOG_GRADIENT.angleDeg}deg, ${alpha(theme.palette.primary.main, DIALOG_GRADIENT.stopAlpha)}, ${alpha(theme.palette.secondary.main, DIALOG_GRADIENT.stopAlpha)})`,\n backdropFilter: `blur(${DIALOG_GRADIENT.blurPx}px)`,\n }\n : {};\n return {\n ...gradientStyles,\n backgroundColor: opts.glass\n ? alpha(theme.palette.background.paper, DIALOG_GLASS.backgroundAlpha)\n : theme.palette.background.paper,\n backdropFilter: opts.glass ? `blur(${DIALOG_GLASS.blurPx}px)` : 'none',\n border: opts.glass\n ? `${DIALOG_BORDER_WIDTH}px solid ${alpha(theme.palette.primary.main, DIALOG_GLASS.borderAlpha)}`\n : 'none',\n };\n}\n\nexport function variantStylesOf(theme: Theme, opts: VariantStyleOptions): SxProps<Theme> {\n const decorations = {\n ...glowStylesOf(theme, opts.glow),\n ...pulseStylesOf(theme, opts.pulse),\n };\n switch (opts.variant) {\n case 'glass':\n return {\n ...baseStylesOf(theme, opts),\n ...decorations,\n backgroundColor: alpha(theme.palette.background.paper, DIALOG_GLASS.backgroundAlpha),\n backdropFilter: `blur(${DIALOG_GLASS.blurPx}px)`,\n border: `${DIALOG_BORDER_WIDTH}px solid ${alpha(theme.palette.primary.main, DIALOG_GLASS.borderAlpha)}`,\n boxShadow: shadowCss({\n offsetX: 0,\n offsetY: DIALOG_GLASS.shadow.offsetY,\n blurRadius: DIALOG_GLASS.shadow.blurRadius,\n spreadDistance: 0,\n color: shadowInk(theme, DIALOG_GLASS.shadow.alpha),\n }),\n };\n case 'fullscreen':\n return {\n borderRadius: 0,\n margin: 0,\n width: '100vw',\n // `100dvh`, not `100vh` — see `dynamicViewportHeight`.\n ...dynamicViewportHeight('height'),\n maxWidth: 'none',\n maxHeight: 'none',\n ...decorations,\n };\n case 'drawer': {\n const radius = borderRadiusOf(theme, opts.borderRadius);\n return {\n // `radius` is already a length (`theme.spacing(n)` → '16px', or 0): gluing\n // another `px` on wrote '16pxpx', which the browser dropped, leaving the\n // panel's leading corners square.\n borderRadius: `${radius} 0 0 ${radius}`,\n margin: 0,\n width: maxWidthOf(opts.size),\n // Never wider than the screen: a 600px panel on a 375px phone put its\n // title and the start of every line off the left edge.\n maxWidth: '100%',\n ...dynamicViewportHeight('height'),\n maxHeight: 'none',\n ...decorations,\n };\n }\n default:\n return {\n ...baseStylesOf(theme, opts),\n ...decorations,\n ...defaultVariantStyles(theme, opts),\n };\n }\n}\n\nexport function backdropSxOf(theme: Theme, glass: boolean) {\n return {\n backgroundColor: scrim(theme, glass ? DIALOG_BACKDROP.alpha.glass : DIALOG_BACKDROP.alpha.plain),\n backdropFilter: glass ? `blur(${DIALOG_BACKDROP.blurPx}px)` : 'none',\n };\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/utility/VirtualList/VirtualList.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport React, { useRef } from 'react';\n\nimport { useVirtualGrid, useVirtualList } from './VirtualList.hooks';\nimport type { VirtualGridProps, VirtualListProps } from './VirtualList.types';\n\ninterface ContainerProps {\n children: React.ReactNode;\n role: 'list' | 'grid';\n totalHeight: number;\n height: number;\n width: number | string;\n disableInternalScroll: boolean;\n onScroll: (event: React.UIEvent<HTMLDivElement>) => void;\n className?: string;\n style?: React.CSSProperties;\n dataTestId?: string;\n ariaLabel?: string;\n}\n\n/**\n * Two shapes, shared by the list and the grid: when the caller owns the scroll\n * container we render only the full-height content, so their element does the\n * scrolling; otherwise we render our own viewport around it.\n */\nconst VirtualContainer: React.FC<ContainerProps> = ({\n children,\n role,\n totalHeight,\n height,\n width,\n disableInternalScroll,\n onScroll,\n className,\n style,\n dataTestId,\n ariaLabel,\n}) => {\n const internalContainerRef = useRef<HTMLDivElement>(null);\n const identity = {\n className,\n 'data-testid': dataTestId,\n role,\n 'aria-label': ariaLabel,\n };\n\n if (disableInternalScroll) {\n return (\n <Box {...identity} sx={{ height: totalHeight, width, position: 'relative', ...style }}>\n {children}\n </Box>\n );\n }\n\n return (\n <Box\n ref={internalContainerRef}\n {...identity}\n sx={{ height, width, overflow: 'auto', position: 'relative', ...style }}\n onScroll={onScroll}\n >\n <Box sx={{ height: totalHeight, position: 'relative' }}>{children}</Box>\n </Box>\n );\n};\n\nexport const VirtualList: React.FC<VirtualListProps> = ({\n items,\n variant = 'fixed',\n height,\n width = '100%',\n itemHeight = 40,\n estimatedItemHeight = 40,\n overscan = 5,\n renderItem,\n onScroll,\n className,\n style,\n 'data-testid': dataTestId,\n 'aria-label': ariaLabel,\n scrollContainerRef,\n disableInternalScroll = false,\n}) => {\n const { totalHeight, visibleItems, handleScroll } = useVirtualList({\n items,\n variant,\n height,\n itemHeight,\n estimatedItemHeight,\n overscan,\n onScroll,\n scrollContainerRef,\n });\n\n return (\n <VirtualContainer\n role=\"list\"\n totalHeight={totalHeight}\n height={height}\n width={width}\n disableInternalScroll={disableInternalScroll}\n onScroll={handleScroll}\n className={className}\n style={style}\n dataTestId={dataTestId}\n ariaLabel={ariaLabel}\n >\n {visibleItems.map(({ item, index, style: itemStyle }) =>\n renderItem({ item, index, style: itemStyle }),\n )}\n </VirtualContainer>\n );\n};\n\nexport const VirtualGrid: React.FC<VirtualGridProps> = ({\n items,\n height,\n width = '100%',\n columnCount,\n rowHeight,\n columnWidth,\n gap = 0,\n overscan = 5,\n renderItem,\n onScroll,\n className,\n style,\n 'data-testid': dataTestId,\n 'aria-label': ariaLabel,\n scrollContainerRef,\n disableInternalScroll = false,\n}) => {\n const { totalHeight, visibleItems, handleScroll } = useVirtualGrid({\n items,\n height,\n width,\n columnCount,\n rowHeight,\n columnWidth,\n gap,\n overscan,\n onScroll,\n scrollContainerRef,\n });\n\n return (\n <VirtualContainer\n role=\"grid\"\n totalHeight={totalHeight}\n height={height}\n width={width}\n disableInternalScroll={disableInternalScroll}\n onScroll={handleScroll}\n className={className}\n style={style}\n dataTestId={dataTestId}\n ariaLabel={ariaLabel}\n >\n {visibleItems.map(({ item, index, columnIndex, rowIndex, style: itemStyle }) =>\n renderItem({ item, index, columnIndex, rowIndex, style: itemStyle }),\n )}\n </VirtualContainer>\n );\n};\n"],"mappings":";;;;;;AAAA,OAAO,SAAS;AAChB,SAAgB,cAAc;AA+CxB;AAvBN,IAAM,mBAA6C,CAAC;AAAA,EAClD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,uBAAuB,OAAuB,IAAI;AACxD,QAAM,WAAW;AAAA,IACf;AAAA,IACA,eAAe;AAAA,IACf;AAAA,IACA,cAAc;AAAA,EAChB;AAEA,MAAI,uBAAuB;AACzB,WACE,oBAAC,OAAK,GAAG,UAAU,IAAI,EAAE,QAAQ,aAAa,OAAO,UAAU,YAAY,GAAG,MAAM,GACjF,UACH;AAAA,EAEJ;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACJ,GAAG;AAAA,MACJ,IAAI,EAAE,QAAQ,OAAO,UAAU,QAAQ,UAAU,YAAY,GAAG,MAAM;AAAA,MACtE;AAAA,MAEA,8BAAC,OAAI,IAAI,EAAE,QAAQ,aAAa,UAAU,WAAW,GAAI,UAAS;AAAA;AAAA,EACpE;AAEJ;AAEO,IAAM,cAA0C,CAAC;AAAA,EACtD;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,sBAAsB;AAAA,EACtB,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf,cAAc;AAAA,EACd;AAAA,EACA,wBAAwB;AAC1B,MAAM;AACJ,QAAM,EAAE,aAAa,cAAc,aAAa,IAAI,eAAe;AAAA,IACjE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEC,uBAAa;AAAA,QAAI,CAAC,EAAE,MAAM,OAAO,OAAO,UAAU,MACjD,WAAW,EAAE,MAAM,OAAO,OAAO,UAAU,CAAC;AAAA,MAC9C;AAAA;AAAA,EACF;AAEJ;AAEO,IAAM,cAA0C,CAAC;AAAA,EACtD;AAAA,EACA;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA;AAAA,EACA;AAAA,EACA,MAAM;AAAA,EACN,WAAW;AAAA,EACX;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe;AAAA,EACf,cAAc;AAAA,EACd;AAAA,EACA,wBAAwB;AAC1B,MAAM;AACJ,QAAM,EAAE,aAAa,cAAc,aAAa,IAAI,eAAe;AAAA,IACjE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SACE;AAAA,IAAC;AAAA;AAAA,MACC,MAAK;AAAA,MACL;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,UAAU;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MAEC,uBAAa;AAAA,QAAI,CAAC,EAAE,MAAM,OAAO,aAAa,UAAU,OAAO,UAAU,MACxE,WAAW,EAAE,MAAM,OAAO,aAAa,UAAU,OAAO,UAAU,CAAC;AAAA,MACrE;AAAA;AAAA,EACF;AAEJ;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/feedback/Toast/Toast.tsx"],"sourcesContent":["import SuccessIcon from '@mui/icons-material/CheckCircle';\nimport CloseIcon from '@mui/icons-material/Close';\nimport ErrorIcon from '@mui/icons-material/Error';\nimport InfoIcon from '@mui/icons-material/Info';\nimport WarningIcon from '@mui/icons-material/Warning';\nimport type { Theme } from '@mui/material/styles/index.js';\nimport Alert from '@mui/material/Alert/index.js';\nimport Box from '@mui/material/Box/index.js';\nimport Button from '@mui/material/Button/index.js';\nimport CircularProgress from '@mui/material/CircularProgress/index.js';\nimport IconButton from '@mui/material/IconButton/index.js';\nimport Portal from '@mui/material/Portal/index.js';\nimport Slide from '@mui/material/Slide/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { alpha, useTheme } from '@mui/material/styles/index.js';\nimport React, { createContext, useCallback,useContext, useState } from 'react';\n\nimport type { ToastContainerProps, ToastContextType, ToastItem,ToastProps } from './Toast.types';\n\nconst ToastContext = createContext<ToastContextType | null>(null);\n\ntype PromiseToastOptions<T> = {\n loading: string;\n success: string | ((data: T) => string);\n error: string | ((error: unknown) => string);\n};\n\n// success/error may be a literal or a formatter over the settled value.\nconst resolveToastMessage = <T,>(message: string | ((value: T) => string), value: T): string =>\n typeof message === 'function' ? message(value) : message;\n\n// Shows a persistent \"loading\" toast for the life of a promise, then swaps it\n// for a success or error one. Lives outside the provider so the provider body\n// stays readable; it takes add/remove rather than reaching for context.\nconst trackPromiseWithToasts = async <T,>(\n promiseToResolve: Promise<T>,\n options: PromiseToastOptions<T>,\n addToast: (toast: Omit<ToastProps, 'id'>) => string,\n removeToast: (id: string) => void,\n): Promise<T> => {\n const toastId = addToast({\n message: options.loading,\n variant: 'promise',\n persistent: true,\n });\n\n try {\n const data = await promiseToResolve;\n\n removeToast(toastId);\n addToast({ message: resolveToastMessage(options.success, data), variant: 'success' });\n\n return data;\n } catch (error) {\n removeToast(toastId);\n addToast({ message: resolveToastMessage(options.error, error), variant: 'error' });\n\n throw error;\n }\n};\n\nexport const ToastProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {\n const [toasts, setToasts] = useState<ToastItem[]>([]);\n\n const removeToast = useCallback((id: string) => {\n setToasts((prev) => prev.filter((toast) => toast.id !== id));\n }, []);\n\n const addToast = useCallback(\n (toast: Omit<ToastProps, 'id'>): string => {\n const id = `toast-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;\n const newToast: ToastItem = {\n ...toast,\n id,\n timestamp: Date.now(),\n };\n\n setToasts((prev) => [...prev, newToast]);\n\n if (!toast.persistent && toast.duration !== 0) {\n const duration = toast.duration ?? 5000;\n window.setTimeout(() => {\n removeToast(id);\n }, duration);\n }\n\n return id;\n },\n [removeToast],\n );\n\n const clearAllToasts = useCallback(() => {\n setToasts([]);\n }, []);\n\n const promise = useCallback(\n <T,>(promiseToResolve: Promise<T>, options: PromiseToastOptions<T>): Promise<T> =>\n trackPromiseWithToasts(promiseToResolve, options, addToast, removeToast),\n [addToast, removeToast],\n );\n\n const contextValue: ToastContextType = {\n toasts,\n addToast,\n removeToast,\n clearAllToasts,\n promise,\n };\n\n return <ToastContext.Provider value={contextValue}>{children}</ToastContext.Provider>;\n};\n\nexport const useToast = (): ToastContextType => {\n const context = useContext(ToastContext);\n if (!context) {\n throw new Error('useToast must be used within a ToastProvider');\n }\n return context;\n};\n\nconst renderVariantIcon = (variant: ToastProps['variant']) => {\n switch (variant) {\n case 'success':\n return <SuccessIcon />;\n case 'error':\n return <ErrorIcon />;\n case 'warning':\n return <WarningIcon />;\n case 'info':\n return <InfoIcon />;\n case 'promise':\n return <CircularProgress size={20} />;\n default:\n return null;\n }\n};\n\n// 'default' and 'promise' have no MUI severity of their own; both read as info.\nconst toAlertSeverity = (variant: ToastProps['variant']) =>\n variant === 'default' || variant === 'promise' ? 'info' : variant;\n\nconst buildToastStyles = (theme: Theme, glass: boolean) => {\n const baseStyles = {\n borderRadius: theme.spacing(1.5),\n transition: theme.transitions.create(['background-color', 'backdrop-filter'], {\n duration: theme.transitions.duration.standard,\n }),\n };\n\n if (glass) {\n return {\n ...baseStyles,\n backgroundColor: alpha(theme.palette.background.paper, 0.1),\n backdropFilter: 'blur(20px)',\n border: `1px solid ${alpha(theme.palette.primary.main, 0.2)}`,\n };\n }\n\n return baseStyles;\n};\n\nexport const Toast: React.FC<ToastProps> = ({\n id = '',\n message,\n variant = 'default',\n closable = true,\n action,\n glass = false,\n onClose,\n dataTestId = 'toast',\n}) => {\n const theme = useTheme();\n\n const handleClose = () => {\n if (onClose && id) {\n onClose(id);\n }\n };\n\n return (\n <Alert\n data-testid={dataTestId}\n icon={renderVariantIcon(variant)}\n severity={toAlertSeverity(variant)}\n onClose={closable ? handleClose : undefined}\n action={\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n {action && (\n <Button\n data-testid={`${dataTestId}-action`}\n color=\"inherit\"\n size=\"small\"\n onClick={action.onClick}\n >\n {action.label}\n </Button>\n )}\n {closable && (\n <IconButton\n data-testid={`${dataTestId}-close`}\n aria-label=\"close\"\n color=\"inherit\"\n size=\"small\"\n onClick={handleClose}\n >\n <CloseIcon fontSize=\"small\" />\n </IconButton>\n )}\n </Box>\n }\n sx={buildToastStyles(theme, glass)}\n >\n <Typography data-testid={`${dataTestId}-message`} variant=\"body2\">{message}</Typography>\n </Alert>\n );\n};\n\nexport const ToastContainer: React.FC<ToastContainerProps> = ({\n position = 'top-right',\n maxToasts = 5,\n gap = 8,\n className,\n dataTestId = 'toast-container',\n}) => {\n const context = useContext(ToastContext);\n \n if (!context) {\n throw new Error('ToastContainer must be used within a ToastProvider');\n }\n\n const { toasts, removeToast } = context;\n\n const getPositionStyles = (): React.CSSProperties => {\n const baseStyles: React.CSSProperties = {\n position: 'fixed',\n zIndex: 9999,\n display: 'flex',\n flexDirection: 'column',\n gap: `${gap}px`,\n padding: '16px',\n pointerEvents: 'none',\n };\n\n switch (position) {\n case 'top-left':\n return { ...baseStyles, top: 0, left: 0 };\n case 'top-center':\n return { ...baseStyles, top: 0, left: '50%', transform: 'translateX(-50%)' };\n case 'top-right':\n return { ...baseStyles, top: 0, right: 0 };\n case 'bottom-left':\n return { ...baseStyles, bottom: 0, left: 0, flexDirection: 'column-reverse' };\n case 'bottom-center':\n return {\n ...baseStyles,\n bottom: 0,\n left: '50%',\n transform: 'translateX(-50%)',\n flexDirection: 'column-reverse',\n };\n case 'bottom-right':\n return { ...baseStyles, bottom: 0, right: 0, flexDirection: 'column-reverse' };\n default:\n return { ...baseStyles, top: 0, right: 0 };\n }\n };\n\n return (\n <Portal>\n <Box data-testid={dataTestId} className={className} sx={getPositionStyles()}>\n {toasts.slice(0, maxToasts).map((toast, index) => (\n <Slide\n key={toast.id}\n direction={position.includes('left') ? 'right' : 'left'}\n in={true}\n timeout={300}\n style={{ pointerEvents: 'auto' }}\n >\n <Box data-testid={`${dataTestId}-item-${index}`}>\n <Toast {...toast} onClose={removeToast} dataTestId={toast.dataTestId || `toast-${index}`} />\n </Box>\n </Slide>\n ))}\n </Box>\n </Portal>\n );\n};\n"],"mappings":";AAAA,OAAO,iBAAiB;AACxB,OAAO,eAAe;AACtB,OAAO,eAAe;AACtB,OAAO,cAAc;AACrB,OAAO,iBAAiB;AAExB,OAAO,WAAW;AAClB,OAAO,SAAS;AAChB,OAAO,YAAY;AACnB,OAAO,sBAAsB;AAC7B,OAAO,gBAAgB;AACvB,OAAO,YAAY;AACnB,OAAO,WAAW;AAClB,OAAO,gBAAgB;AACvB,SAAS,OAAO,gBAAgB;AAChC,SAAgB,eAAe,aAAY,YAAY,gBAAgB;AA8F9D,cA6ED,YA7EC;AA1FT,IAAM,eAAe,cAAuC,IAAI;AAShE,IAAM,sBAAsB,CAAK,SAA0C,UACzE,OAAO,YAAY,aAAa,QAAQ,KAAK,IAAI;AAKnD,IAAM,yBAAyB,OAC7B,kBACA,SACA,UACA,gBACe;AACf,QAAM,UAAU,SAAS;AAAA,IACvB,SAAS,QAAQ;AAAA,IACjB,SAAS;AAAA,IACT,YAAY;AAAA,EACd,CAAC;AAED,MAAI;AACF,UAAM,OAAO,MAAM;AAEnB,gBAAY,OAAO;AACnB,aAAS,EAAE,SAAS,oBAAoB,QAAQ,SAAS,IAAI,GAAG,SAAS,UAAU,CAAC;AAEpF,WAAO;AAAA,EACT,SAAS,OAAO;AACd,gBAAY,OAAO;AACnB,aAAS,EAAE,SAAS,oBAAoB,QAAQ,OAAO,KAAK,GAAG,SAAS,QAAQ,CAAC;AAEjF,UAAM;AAAA,EACR;AACF;AAEO,IAAM,gBAAyD,CAAC,EAAE,SAAS,MAAM;AACtF,QAAM,CAAC,QAAQ,SAAS,IAAI,SAAsB,CAAC,CAAC;AAEpD,QAAM,cAAc,YAAY,CAAC,OAAe;AAC9C,cAAU,CAAC,SAAS,KAAK,OAAO,CAAC,UAAU,MAAM,OAAO,EAAE,CAAC;AAAA,EAC7D,GAAG,CAAC,CAAC;AAEL,QAAM,WAAW;AAAA,IACf,CAAC,UAA0C;AACzC,YAAM,KAAK,SAAS,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,OAAO,GAAG,CAAC,CAAC;AACzE,YAAM,WAAsB;AAAA,QAC1B,GAAG;AAAA,QACH;AAAA,QACA,WAAW,KAAK,IAAI;AAAA,MACtB;AAEA,gBAAU,CAAC,SAAS,CAAC,GAAG,MAAM,QAAQ,CAAC;AAEvC,UAAI,CAAC,MAAM,cAAc,MAAM,aAAa,GAAG;AAC7C,cAAM,WAAW,MAAM,YAAY;AACnC,eAAO,WAAW,MAAM;AACtB,sBAAY,EAAE;AAAA,QAChB,GAAG,QAAQ;AAAA,MACb;AAEA,aAAO;AAAA,IACT;AAAA,IACA,CAAC,WAAW;AAAA,EACd;AAEA,QAAM,iBAAiB,YAAY,MAAM;AACvC,cAAU,CAAC,CAAC;AAAA,EACd,GAAG,CAAC,CAAC;AAEL,QAAM,UAAU;AAAA,IACd,CAAK,kBAA8B,YACjC,uBAAuB,kBAAkB,SAAS,UAAU,WAAW;AAAA,IACzE,CAAC,UAAU,WAAW;AAAA,EACxB;AAEA,QAAM,eAAiC;AAAA,IACrC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAEA,SAAO,oBAAC,aAAa,UAAb,EAAsB,OAAO,cAAe,UAAS;AAC/D;AAEO,IAAM,WAAW,MAAwB;AAC9C,QAAM,UAAU,WAAW,YAAY;AACvC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,8CAA8C;AAAA,EAChE;AACA,SAAO;AACT;AAEA,IAAM,oBAAoB,CAAC,YAAmC;AAC5D,UAAQ,SAAS;AAAA,IACf,KAAK;AACH,aAAO,oBAAC,eAAY;AAAA,IACtB,KAAK;AACH,aAAO,oBAAC,aAAU;AAAA,IACpB,KAAK;AACH,aAAO,oBAAC,eAAY;AAAA,IACtB,KAAK;AACH,aAAO,oBAAC,YAAS;AAAA,IACnB,KAAK;AACH,aAAO,oBAAC,oBAAiB,MAAM,IAAI;AAAA,IACrC;AACE,aAAO;AAAA,EACX;AACF;AAGA,IAAM,kBAAkB,CAAC,YACvB,YAAY,aAAa,YAAY,YAAY,SAAS;AAE5D,IAAM,mBAAmB,CAAC,OAAc,UAAmB;AACzD,QAAM,aAAa;AAAA,IACjB,cAAc,MAAM,QAAQ,GAAG;AAAA,IAC/B,YAAY,MAAM,YAAY,OAAO,CAAC,oBAAoB,iBAAiB,GAAG;AAAA,MAC5E,UAAU,MAAM,YAAY,SAAS;AAAA,IACvC,CAAC;AAAA,EACH;AAEA,MAAI,OAAO;AACT,WAAO;AAAA,MACL,GAAG;AAAA,MACH,iBAAiB,MAAM,MAAM,QAAQ,WAAW,OAAO,GAAG;AAAA,MAC1D,gBAAgB;AAAA,MAChB,QAAQ,aAAa,MAAM,MAAM,QAAQ,QAAQ,MAAM,GAAG,CAAC;AAAA,IAC7D;AAAA,EACF;AAEA,SAAO;AACT;AAEO,IAAM,QAA8B,CAAC;AAAA,EAC1C,KAAK;AAAA,EACL;AAAA,EACA,UAAU;AAAA,EACV,WAAW;AAAA,EACX;AAAA,EACA,QAAQ;AAAA,EACR;AAAA,EACA,aAAa;AACf,MAAM;AACJ,QAAM,QAAQ,SAAS;AAEvB,QAAM,cAAc,MAAM;AACxB,QAAI,WAAW,IAAI;AACjB,cAAQ,EAAE;AAAA,IACZ;AAAA,EACF;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAa;AAAA,MACb,MAAM,kBAAkB,OAAO;AAAA,MAC/B,UAAU,gBAAgB,OAAO;AAAA,MACjC,SAAS,WAAW,cAAc;AAAA,MAClC,QACE,qBAAC,OAAI,IAAI,EAAE,SAAS,QAAQ,YAAY,UAAU,KAAK,EAAE,GACtD;AAAA,kBACC;AAAA,UAAC;AAAA;AAAA,YACC,eAAa,GAAG,UAAU;AAAA,YAC1B,OAAM;AAAA,YACN,MAAK;AAAA,YACL,SAAS,OAAO;AAAA,YAEf,iBAAO;AAAA;AAAA,QACV;AAAA,QAED,YACC;AAAA,UAAC;AAAA;AAAA,YACC,eAAa,GAAG,UAAU;AAAA,YAC1B,cAAW;AAAA,YACX,OAAM;AAAA,YACN,MAAK;AAAA,YACL,SAAS;AAAA,YAET,8BAAC,aAAU,UAAS,SAAQ;AAAA;AAAA,QAC9B;AAAA,SAEJ;AAAA,MAEF,IAAI,iBAAiB,OAAO,KAAK;AAAA,MAEjC,8BAAC,cAAW,eAAa,GAAG,UAAU,YAAY,SAAQ,SAAS,mBAAQ;AAAA;AAAA,EAC7E;AAEJ;AAEO,IAAM,iBAAgD,CAAC;AAAA,EAC5D,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,MAAM;AAAA,EACN;AAAA,EACA,aAAa;AACf,MAAM;AACJ,QAAM,UAAU,WAAW,YAAY;AAEvC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI,MAAM,oDAAoD;AAAA,EACtE;AAEA,QAAM,EAAE,QAAQ,YAAY,IAAI;AAEhC,QAAM,oBAAoB,MAA2B;AACnD,UAAM,aAAkC;AAAA,MACtC,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,eAAe;AAAA,MACf,KAAK,GAAG,GAAG;AAAA,MACX,SAAS;AAAA,MACT,eAAe;AAAA,IACjB;AAEA,YAAQ,UAAU;AAAA,MAChB,KAAK;AACH,eAAO,EAAE,GAAG,YAAY,KAAK,GAAG,MAAM,EAAE;AAAA,MAC1C,KAAK;AACH,eAAO,EAAE,GAAG,YAAY,KAAK,GAAG,MAAM,OAAO,WAAW,mBAAmB;AAAA,MAC7E,KAAK;AACH,eAAO,EAAE,GAAG,YAAY,KAAK,GAAG,OAAO,EAAE;AAAA,MAC3C,KAAK;AACH,eAAO,EAAE,GAAG,YAAY,QAAQ,GAAG,MAAM,GAAG,eAAe,iBAAiB;AAAA,MAC9E,KAAK;AACH,eAAO;AAAA,UACL,GAAG;AAAA,UACH,QAAQ;AAAA,UACR,MAAM;AAAA,UACN,WAAW;AAAA,UACX,eAAe;AAAA,QACjB;AAAA,MACF,KAAK;AACH,eAAO,EAAE,GAAG,YAAY,QAAQ,GAAG,OAAO,GAAG,eAAe,iBAAiB;AAAA,MAC/E;AACE,eAAO,EAAE,GAAG,YAAY,KAAK,GAAG,OAAO,EAAE;AAAA,IAC7C;AAAA,EACF;AAEA,SACE,oBAAC,UACC,8BAAC,OAAI,eAAa,YAAY,WAAsB,IAAI,kBAAkB,GACvE,iBAAO,MAAM,GAAG,SAAS,EAAE,IAAI,CAAC,OAAO,UACtC;AAAA,IAAC;AAAA;AAAA,MAEC,WAAW,SAAS,SAAS,MAAM,IAAI,UAAU;AAAA,MACjD,IAAI;AAAA,MACJ,SAAS;AAAA,MACT,OAAO,EAAE,eAAe,OAAO;AAAA,MAE/B,8BAAC,OAAI,eAAa,GAAG,UAAU,SAAS,KAAK,IAC3C,8BAAC,SAAO,GAAG,OAAO,SAAS,aAAa,YAAY,MAAM,cAAc,SAAS,KAAK,IAAI,GAC5F;AAAA;AAAA,IARK,MAAM;AAAA,EASb,CACD,GACH,GACF;AAEJ;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/navigation/Tabs/Tabs.tsx"],"sourcesContent":["import Close from '@mui/icons-material/Close';\nimport Badge from '@mui/material/Badge/index.js';\nimport Box from '@mui/material/Box/index.js';\nimport Divider from '@mui/material/Divider/index.js';\nimport MuiTab from '@mui/material/Tab/index.js';\nimport MuiTabs from '@mui/material/Tabs/index.js';\nimport { alpha, styled } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport { CustomTabPanel } from './TabsPanel';\nimport { tabsRootStyles } from './Tabs.styles';\nimport type { TabItem, TabsProps } from './Tabs.types';\nimport { rem } from '../../../tokens/relative';\n\nconst StyledTabs = styled(MuiTabs, {\n shouldForwardProp: (prop) => !['customVariant', 'size', 'showDividers'].includes(prop as string) })<{ customVariant?: string; size?: string; showDividers?: boolean }>(\n ({ theme, customVariant, size, showDividers }) => ({\n ...tabsRootStyles({ theme, customVariant, size, showDividers }) }),\n);\n\nconst CloseButton = styled(Box)(({ theme }) => ({\n marginLeft: theme.spacing(0.5),\n padding: theme.spacing(0.25),\n width: 20,\n height: 20,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n cursor: 'pointer',\n borderRadius: '50%',\n color: theme.palette.action.active,\n '&:hover': {\n backgroundColor: alpha(theme.palette.error.main, 0.1),\n color: theme.palette.error.main } }));\n\nconst BadgeWrapper = styled(Badge)(({ theme }) => ({\n '& .MuiBadge-badge': {\n right: -6,\n top: 4,\n fontSize: rem(theme, 12),\n minWidth: 16,\n height: 16,\n padding: 0 } }));\n\nconst TABS_DEFAULTS: Partial<TabsProps> = {\n variant: 'default',\n size: 'md',\n color: 'primary',\n fullWidth: false,\n orientation: 'horizontal',\n showDividers: false,\n centered: false,\n scrollable: false,\n scrollButtons: 'auto',\n sticky: false,\n stickyOffset: 0,\n animateContent: false,\n animationDuration: 300,\n persistContent: false,\n disabled: false,\n loading: false };\n\n/**\n * The props this component OWNS and MUI's `Tabs` does not understand (12-86).\n *\n * `rest` below is spread onto the DOM node, so anything left in it that React\n * cannot place on an element is reported — five `does not recognize the … prop`\n * warnings and three `Received false for a non-boolean attribute`, on every\n * render, in the browser console and in every host's jsdom output.\n *\n * An explicit list rather than `Object.keys(TABS_DEFAULTS)`, because the two\n * sets differ in both directions: `items`, `closeTabLabel`, `tabPanelProps` and\n * `loadingComponent` have no default and still must not reach the DOM, while\n * `orientation`, `centered` and `indicatorColor` are real MUI props that must.\n * An omission rather than more destructuring, so a prop added to `TabsProps`\n * costs a line here instead of an unused `_name` binding.\n *\n * Deliberately NOT here: `onFocus` and `onBlur`. They are ordinary DOM handlers\n * that reach the element through `rest` and nowhere else, so listing them would\n * silently stop them working.\n */\nconst OWN_PROPS = new Set<string>([\n 'items',\n 'closeTabLabel',\n 'color',\n 'size',\n 'fullWidth',\n 'scrollable',\n 'scrollButtons',\n 'sticky',\n 'stickyOffset',\n 'animateContent',\n 'animationDuration',\n 'persistContent',\n 'tabPanelProps',\n 'loading',\n 'loadingComponent',\n]);\n\n/** `props` with every {@link OWN_PROPS} key dropped — what is left is passthrough. */\nconst domPassthrough = (props: Record<string, unknown>): Record<string, unknown> =>\n Object.fromEntries(Object.entries(props).filter(([key]) => !OWN_PROPS.has(key)));\n\n// Strips explicitly-undefined props before the merge, so `prop={undefined}`\n// still falls back to the default as a destructuring default would.\nconst definedProps = (props: TabsProps): Partial<TabsProps> =>\n Object.fromEntries(\n Object.entries(props).filter(([, value]) => value !== undefined),\n ) as Partial<TabsProps>;\n\n// Once the row is scrollable every accepted scrollButtons value ends up as\n// MUI's 'auto'. That is exactly what the previous nested ternary did — it mapped\n// 'on'/'off'/'desktop' to 'auto', and its remaining branch could only ever be\n// 'auto' anyway — so the behaviour is preserved here rather than quietly\n// changed. Worth knowing that scrollButtons=\"off\" therefore still shows buttons.\nconst resolveScrollButtons = (scrollable?: boolean): 'auto' | false =>\n scrollable ? 'auto' : false;\n\nconst buildTabsSx = ({\n fullWidth,\n sticky,\n stickyOffset,\n indicatorColor,\n disabled }: {\n fullWidth?: boolean;\n sticky?: boolean;\n stickyOffset?: number;\n indicatorColor?: string;\n disabled?: boolean;\n}) => ({\n ...(fullWidth && { width: '100%' }),\n // Pin the tab list while panels scroll beneath it. Opaque background + bottom\n // divider so scrolled content does not show through.\n ...(sticky && {\n position: 'sticky',\n top: stickyOffset,\n zIndex: 2,\n backgroundColor: 'background.default',\n borderBottom: 1,\n borderColor: 'divider' }),\n ...(indicatorColor && {\n '& .MuiTabs-indicator': { backgroundColor: indicatorColor } }),\n ...(disabled && { opacity: 0.6, pointerEvents: 'none' }) });\n\n// A tab's label: icon, text, optional close affordance, optionally badged.\nconst TabLabel: React.FC<{\n item: TabItem;\n closeTabLabel: string;\n onClose: (event: React.MouseEvent | React.KeyboardEvent, tabId: string) => void;\n}> = ({ item, closeTabLabel, onClose }) => {\n const content = (\n <Box sx={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n {item.icon}\n <span>{item.label}</span>\n {item.closable && (\n <CloseButton\n onClick={(e) => onClose(e, item.id)}\n role=\"button\"\n tabIndex={0}\n aria-label={closeTabLabel}\n onKeyDown={(e) => {\n if (e.key !== 'Enter' && e.key !== ' ') return;\n onClose(e, item.id);\n }}\n >\n <Close fontSize=\"inherit\" />\n </CloseButton>\n )}\n </Box>\n );\n\n if (item.badge === undefined) return content;\n\n return (\n <BadgeWrapper badgeContent={item.badge} color=\"error\">\n {content}\n </BadgeWrapper>\n );\n};\n\ntype ResolvedTabs = TabsProps;\n\n// The tab strip. Kept in this file because StyledTabs cannot cross a module\n// boundary (TS2742).\nconst TabsBar: React.FC<\n ResolvedTabs & {\n rest: Record<string, unknown>;\n onChange: (event: React.SyntheticEvent, newValue: string) => void;\n onCloseTab: (event: React.MouseEvent | React.KeyboardEvent, tabId: string) => void;\n }\n> = ({ rest, items, value, onChange, onCloseTab, dataTestId, ...p }) => (\n <StyledTabs\n {...rest}\n value={value}\n onChange={onChange}\n customVariant={p.variant}\n size={p.size}\n showDividers={p.showDividers}\n orientation={p.orientation}\n centered={p.centered}\n // MUI only scrolls when its own `variant` is `scrollable`; map our\n // `scrollable` flag onto it so overflowing tab rows actually scroll.\n variant={p.scrollable ? 'scrollable' : 'standard'}\n data-testid={dataTestId ? `${dataTestId}-list` : 'tabs-list'}\n scrollButtons={resolveScrollButtons(p.scrollable)}\n allowScrollButtonsMobile={p.scrollable}\n textColor={p.color}\n indicatorColor={p.color}\n sx={buildTabsSx({\n fullWidth: p.fullWidth,\n sticky: p.sticky,\n stickyOffset: p.stickyOffset,\n indicatorColor: p.indicatorColor,\n disabled: p.disabled })}\n >\n {items.map((item, index) => (\n <MuiTab\n key={item.id}\n value={item.id}\n label={<TabLabel closeTabLabel={p.closeTabLabel} item={item} onClose={onCloseTab} />}\n disabled={item.disabled || p.disabled}\n className={item.className}\n id={`tab-${item.id}`}\n aria-controls={`tabpanel-${item.id}`}\n aria-disabled={item.disabled || p.disabled}\n data-testid={dataTestId ? `${dataTestId}-tab-${index}` : `tabs-tab-${index}`}\n />\n ))}\n </StyledTabs>\n);\n\nconst TabsPanels: React.FC<ResolvedTabs> = ({\n items,\n value,\n variant,\n animateContent,\n animationDuration,\n persistContent,\n loading,\n loadingComponent,\n tabPanelProps,\n dataTestId }) => (\n <Box sx={{ mt: variant === 'enclosed' ? 0 : 2 }}>\n {items.map((item, index) => (\n <CustomTabPanel\n key={item.id}\n id={item.id}\n value={value}\n animate={animateContent}\n animationDuration={animationDuration}\n persist={persistContent}\n loading={loading}\n loadingComponent={loadingComponent}\n className={tabPanelProps?.className}\n dataTestId={dataTestId}\n index={index}\n >\n {item.content}\n </CustomTabPanel>\n ))}\n </Box>\n);\n\nexport const Tabs = React.forwardRef<HTMLDivElement, TabsProps>(\n (tabsProps, ref) => {\n const resolved = { ...TABS_DEFAULTS, ...definedProps(tabsProps) } as TabsProps;\n const {\n // Destructured only to keep it OUT of `rest`, which is spread onto the\n // DOM node — `{...resolved}` below is what actually carries it to\n // `TabsBar`. Same reason as `value` on the next line.\n closeTabLabel: _closeTabLabel,\n value: _value,\n onChange,\n onTabClose,\n className,\n disabled,\n showDividers,\n variant,\n dataTestId,\n ...rest\n } = resolved;\n\n const handleChange = (event: React.SyntheticEvent, newValue: string) => {\n if (!disabled) onChange(event, newValue);\n };\n\n const handleTabClose = (event: React.MouseEvent | React.KeyboardEvent, tabId: string) => {\n event.stopPropagation();\n onTabClose?.(tabId);\n };\n\n return (\n <Box className={className} ref={ref} data-testid={dataTestId || 'tabs'}>\n <TabsBar\n {...resolved}\n // The destructuring above drops the props this component USES;\n // `domPassthrough` drops the ones it merely OWNS. Both have to go:\n // `rest` is spread onto the DOM node, and the second group is where\n // 12-86's warnings came from.\n rest={domPassthrough(rest as unknown as Record<string, unknown>)}\n onChange={handleChange}\n onCloseTab={handleTabClose}\n />\n\n {showDividers && variant !== 'enclosed' && <Divider />}\n\n <TabsPanels {...resolved} />\n </Box>\n );\n },\n);\n\nTabs.displayName = 'Tabs';\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/layout/ScrollArea/ScrollArea.styles.ts"],"sourcesContent":["import type { CSSObject, Theme } from '@mui/material/styles/index.js';\nimport { alpha } from '@mui/material/styles/index.js';\n\nimport type { ScrollAreaProps } from './ScrollArea.types';\nimport { neutralTones, sheen } from '../../../tokens/ink';\n\nconst SCROLLBAR_SIZES: Record<string, number> = {\n thin: 8,\n thick: 16,\n};\n\nconst DEFAULT_SCROLLBAR_SIZE = 12;\n\n// thin/thick are the named ends of the scale; anything else takes the default.\nconst getScrollbarSize = (scrollbarSize?: string): number =>\n scrollbarSize ? (SCROLLBAR_SIZES[scrollbarSize] ?? DEFAULT_SCROLLBAR_SIZE) : DEFAULT_SCROLLBAR_SIZE;\n\nconst getScrollbarColors = ({\n theme,\n variant,\n scrollbarColor,\n scrollbarTrackColor,\n}: {\n theme: Theme;\n variant?: string;\n scrollbarColor?: string;\n scrollbarTrackColor?: string;\n}) => {\n const defaultScrollbarColor =\n variant === 'glass'\n ? alpha(theme.palette.primary.main, 0.5)\n : theme.palette.mode === 'dark'\n ? neutralTones(theme).emphasis\n : neutralTones(theme).subtle;\n\n const defaultTrackColor =\n variant === 'glass'\n ? alpha(theme.palette.background.paper, 0.1)\n : theme.palette.mode === 'dark'\n ? neutralTones(theme).inverseSurface\n : neutralTones(theme).faint;\n\n return {\n scrollbar: scrollbarColor || defaultScrollbarColor,\n track: scrollbarTrackColor || defaultTrackColor,\n };\n};\n\nexport const getOverflowStyle = ({\n disabled,\n orientation,\n}: {\n disabled?: boolean;\n orientation?: ScrollAreaProps['orientation'];\n}) => {\n if (disabled) return { overflow: 'hidden' as const };\n\n switch (orientation) {\n case 'horizontal':\n return {\n overflow: 'hidden' as const,\n overflowX: 'auto' as const,\n overflowY: 'hidden' as const,\n };\n case 'both':\n return { overflow: 'auto' as const };\n default:\n return {\n overflow: 'hidden' as const,\n overflowY: 'auto' as const,\n overflowX: 'hidden' as const,\n };\n }\n};\n\n// Scrollbar chrome shared by every variant. autoHide fades the thumb out when\n// the area is idle, which is why the colours are parameters rather than read\n// from the variant directly.\nconst autoHideScrollbarStyles = ({\n thumbColor,\n trackColor,\n size,\n orientation,\n shouldShowScrollbar,\n theme,\n scrollbarSize,\n}: {\n thumbColor: string;\n trackColor: string;\n size: number;\n orientation?: ScrollAreaProps['orientation'];\n shouldShowScrollbar: boolean;\n theme: Theme;\n scrollbarSize?: string;\n}) => ({\n '&::-webkit-scrollbar': {\n width: orientation !== 'horizontal' ? size : '100%',\n height: orientation !== 'vertical' ? size : '100%',\n },\n '&::-webkit-scrollbar-track': {\n background: shouldShowScrollbar ? trackColor : 'transparent',\n borderRadius: size / 2,\n transition: 'background 0.3s ease',\n },\n '&::-webkit-scrollbar-thumb': {\n background: shouldShowScrollbar ? thumbColor : 'transparent',\n borderRadius: size / 2,\n transition: 'background 0.3s ease',\n '&:hover': {\n background: shouldShowScrollbar ? theme.palette.primary.main : 'transparent',\n },\n },\n '&::-webkit-scrollbar-corner': {\n background: shouldShowScrollbar ? trackColor : 'transparent',\n },\n // Firefox scrollbar styling\n scrollbarWidth: shouldShowScrollbar\n ? scrollbarSize === 'thin'\n ? ('thin' as const)\n : ('auto' as const)\n : ('none' as const),\n scrollbarColor: shouldShowScrollbar\n ? `${thumbColor} ${trackColor}`\n : 'transparent transparent',\n });\n\ntype VariantArgs = {\n theme: Theme;\n colors: { scrollbar: string; track: string };\n size: number;\n orientation?: ScrollAreaProps['orientation'];\n shouldShowScrollbar: boolean;\n scrollbarSize?: string;\n};\n\n// One entry per scrollbar look. overlay floats above the content, glass tints\n// it, and the default delegates to the shared auto-hide chrome.\nconst VARIANT_SCROLLBARS: Record<string, (args: VariantArgs) => CSSObject> = {\n overlay: ({ theme, colors, size, orientation, shouldShowScrollbar, scrollbarSize }) => ({\n '&::-webkit-scrollbar': {\n width: orientation !== 'horizontal' ? size : '100%',\n height: orientation !== 'vertical' ? size : '100%',\n position: 'absolute',\n right: 0,\n top: 0,\n },\n '&::-webkit-scrollbar-track': {\n background: 'transparent',\n borderRadius: size / 2,\n },\n '&::-webkit-scrollbar-thumb': {\n background: shouldShowScrollbar\n ? alpha(colors.scrollbar, 0.5)\n : 'transparent',\n borderRadius: size / 2,\n transition: 'background 0.3s ease',\n border: '2px solid transparent',\n backgroundClip: 'padding-box',\n '&:hover': {\n background: shouldShowScrollbar ? theme.palette.primary.main : 'transparent',\n },\n },\n '&::-webkit-scrollbar-corner': {\n background: 'transparent',\n },\n scrollbarWidth: shouldShowScrollbar\n ? scrollbarSize === 'thin'\n ? ('thin' as const)\n : ('auto' as const)\n : ('none' as const),\n scrollbarColor: shouldShowScrollbar\n ? `${alpha(colors.scrollbar, 0.5)} transparent`\n : 'transparent transparent',\n }),\n\n // Starts from the shared chrome, then adds what makes it glass: a blurred\n // track and root, and an inner highlight on the thumb. scrollbar-color (the\n // Firefox property) keeps the solid palette colour rather than the gradient —\n // a gradient is not a valid value there, which is why the original picked\n // colors.scrollbar for it.\n glass: ({ theme, colors, size, orientation, shouldShowScrollbar, scrollbarSize }) => {\n const glassThumbColor = `linear-gradient(180deg, ${alpha(theme.palette.primary.main, 0.3)}, ${alpha(theme.palette.secondary.main, 0.3)})`;\n const glassTrackColor = alpha(theme.palette.background.paper, 0.1);\n\n const base = autoHideScrollbarStyles({\n thumbColor: glassThumbColor,\n trackColor: glassTrackColor,\n size,\n orientation,\n shouldShowScrollbar,\n theme,\n scrollbarSize,\n });\n\n return {\n ...base,\n '&::-webkit-scrollbar-track': {\n ...(base['&::-webkit-scrollbar-track'] as object),\n backdropFilter: shouldShowScrollbar ? 'blur(5px)' : 'none',\n },\n '&::-webkit-scrollbar-thumb': {\n ...(base['&::-webkit-scrollbar-thumb'] as object),\n boxShadow: shouldShowScrollbar\n ? `inset 0 0 6px ${sheen(theme, 0.3)}`\n : 'none',\n },\n scrollbarColor: shouldShowScrollbar\n ? `${colors.scrollbar} ${glassTrackColor}`\n : 'transparent transparent',\n backdropFilter: 'blur(10px)',\n };\n },\n\n default: ({ theme, colors, size, orientation, shouldShowScrollbar, scrollbarSize }) =>\n autoHideScrollbarStyles({\n thumbColor: colors.scrollbar,\n trackColor: colors.track,\n size,\n orientation,\n shouldShowScrollbar,\n theme,\n scrollbarSize,\n }),\n};\n\nexport const getVariantStyles = ({\n theme,\n variant,\n orientation,\n scrollbarSize,\n scrollbarColor,\n scrollbarTrackColor,\n shouldShowScrollbar,\n}: {\n theme: Theme;\n variant?: string;\n orientation?: ScrollAreaProps['orientation'];\n scrollbarSize?: string;\n scrollbarColor?: string;\n scrollbarTrackColor?: string;\n shouldShowScrollbar: boolean;\n}) => {\n const colors = getScrollbarColors({ theme, variant, scrollbarColor, scrollbarTrackColor });\n const size = getScrollbarSize(scrollbarSize);\n\n const build = VARIANT_SCROLLBARS[variant ?? 'default'] ?? VARIANT_SCROLLBARS.default!;\n\n return build({ theme, colors, size, orientation, shouldShowScrollbar, scrollbarSize });\n};\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/layout/SettingsLayout/SettingsLayout.styles.ts"],"sourcesContent":["import type { CSSObject, Theme } from '@mui/material/styles/index.js';\n\nimport type { SettingsNavStatus, SettingsRailBreakpoint } from './SettingsLayout.types';\n\n/** Fixed width of the left navigation rail once it has its own column. */\nexport const RAIL_WIDTH = 300;\n\n/** Visually hidden, still read aloud — for text a marker's colour cannot carry. */\nexport const SR_ONLY_SX: CSSObject = {\n position: 'absolute',\n width: '1px',\n height: '1px',\n padding: 0,\n margin: '-1px',\n overflow: 'hidden',\n clip: 'rect(0, 0, 0, 0)',\n whiteSpace: 'nowrap',\n border: 0,\n};\n\n/**\n * The media query for \"the rail has its own column\".\n *\n * `theme.breakpoints.up` takes a NUMBER as happily as a name, which is why\n * `railBreakpoint` accepts one: a settings area whose structural switch is at\n * 1024px has no MUI breakpoint to name (the default `lg` is 1200), and rounding\n * the design to the nearest named breakpoint moves 176px of behaviour to keep a\n * string tidy.\n */\nexport function atLeastRail(theme: Theme, breakpoint: SettingsRailBreakpoint): string {\n return theme.breakpoints.up(breakpoint);\n}\n\n/**\n * A `display` pair across that query: `narrow` below it, `wide` at and above.\n *\n * Everything that changes shape between the two navigation modes goes through\n * this, so \"which width am I?\" is answered once, in CSS, for every part at\n * once — rather than by each part asking a media query in JavaScript and\n * answering slightly differently.\n */\nexport function displayAcrossRail(\n theme: Theme,\n breakpoint: SettingsRailBreakpoint,\n narrow: string,\n wide: string,\n): CSSObject {\n return { display: narrow, [atLeastRail(theme, breakpoint)]: { display: wide } };\n}\n\n/** Minimum touch target, in px. Held down to 320px-wide phones, deliberately. */\nexport const TOUCH_TARGET = 44;\n\n/**\n * Palette role per situation.\n *\n * Returned as theme keys rather than hex so a marker follows the host's theme —\n * and so light and dark do not need two copies of this table.\n */\nexport const STATUS_COLOR: Record<Exclude<SettingsNavStatus, 'locked'>, string> = {\n ok: 'success.main',\n off: 'text.disabled',\n new: 'error.main',\n};\n"],"mappings":";AAKO,IAAM,aAAa;AAGnB,IAAM,aAAwB;AAAA,EACnC,UAAU;AAAA,EACV,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,MAAM;AAAA,EACN,YAAY;AAAA,EACZ,QAAQ;AACV;AAWO,SAAS,YAAY,OAAc,YAA4C;AACpF,SAAO,MAAM,YAAY,GAAG,UAAU;AACxC;AAUO,SAAS,kBACd,OACA,YACA,QACA,MACW;AACX,SAAO,EAAE,SAAS,QAAQ,CAAC,YAAY,OAAO,UAAU,CAAC,GAAG,EAAE,SAAS,KAAK,EAAE;AAChF;AAGO,IAAM,eAAe;AAQrB,IAAM,eAAqE;AAAA,EAChF,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,KAAK;AACP;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/layout/Card/Card.styles.ts"],"sourcesContent":["import { alpha, keyframes } from '@mui/material/styles/index.js';\nimport type { CSSObject, Theme } from '@mui/material/styles/index.js';\n\nimport type { CardBorderRadius, CardVariant } from './Card.base';\nimport {\n CARD_BORDER_WIDTH,\n CARD_ELEVATION,\n CARD_GLASS,\n CARD_GLOW,\n CARD_GRADIENT,\n CARD_INTERACTIVE_LIFT,\n CARD_NEUMORPHIC,\n CARD_PULSE,\n CARD_RADIUS_FULL,\n CARD_RADIUS_UNITS,\n CARD_SECTION_BACKGROUND,\n neumorphicShadows,\n} from './Card.metrics';\nimport { neutralTones, shadowInk, sheen } from '../../../tokens/ink';\nimport { shadowCss, shadowListCss } from '../../../tokens/shadow';\n\ntype BorderRadius = CardBorderRadius;\n\n// Define pulse animation. The 15px spread and the 2s period are the shared\n// metrics, so the native ring grows by exactly as much for exactly as long.\nconst pulseAnimation = keyframes`\n 0% {\n box-shadow: 0 0 0 0 currentColor;\n opacity: 1;\n }\n 70% {\n box-shadow: 0 0 0 ${CARD_PULSE.spread}px currentColor;\n opacity: 0;\n }\n 100% {\n box-shadow: 0 0 0 0 currentColor;\n opacity: 0;\n }\n`;\n\nconst borderRadiusFor = (theme: Theme, radius: BorderRadius): number | string => {\n if (radius === 'full') return CARD_RADIUS_FULL;\n const units = CARD_RADIUS_UNITS[radius] ?? CARD_RADIUS_UNITS.md;\n // `none` is a bare 0 rather than `spacing(0)`, as this has always written it.\n return units === 0 ? 0 : theme.spacing(units);\n};\n\nconst pulseSurface = (theme: Theme): CSSObject => ({\n position: 'relative',\n overflow: 'visible',\n '&::after': {\n content: '\"\"',\n position: 'absolute',\n top: '0',\n left: '0',\n right: '0',\n bottom: '0',\n borderRadius: 'inherit',\n backgroundColor: theme.palette.primary.main,\n opacity: CARD_PULSE.alpha,\n animation: `${pulseAnimation} ${CARD_PULSE.durationMs / 1000}s infinite`,\n pointerEvents: 'none',\n zIndex: CARD_PULSE.zIndex,\n },\n});\n\nconst neumorphicShadow = (theme: Theme, lifted: boolean): string => {\n const { dark, light } = CARD_NEUMORPHIC.alpha;\n const [near, far] =\n theme.palette.mode === 'dark'\n ? [\n shadowInk(theme, dark.near),\n sheen(theme, dark.far),\n ]\n : [\n alpha(neutralTones(theme).subtle, lifted ? light.near.lifted : light.near.rest),\n sheen(theme, lifted ? light.far.lifted : light.far.rest),\n ];\n\n return shadowListCss(neumorphicShadows(lifted, near, far));\n};\n\nconst sectionBackground = (theme: Theme, lifted: boolean): string => {\n const wash = CARD_SECTION_BACKGROUND[theme.palette.mode === 'dark' ? 'dark' : 'light'];\n return lifted ? wash.lifted : wash.rest;\n};\n\nconst glowShadow = (theme: Theme, lifted: boolean): string => {\n const { blurRadius, alpha: opacity } = lifted ? CARD_GLOW.lifted : CARD_GLOW.rest;\n return shadowCss({\n offsetX: 0,\n offsetY: 0,\n blurRadius,\n spreadDistance: 0,\n color: alpha(theme.palette.primary.main, opacity),\n });\n};\n\ninterface Surface {\n surface: CSSObject;\n hover: CSSObject;\n}\n\n/**\n * Each variant contributes a resting surface and whatever it changes on hover.\n * Only `interactive` cards actually move on hover, so the hover half of every\n * variant reads back its resting value when `interactive` is off.\n */\nconst VARIANT_SURFACES: Record<CardVariant, (theme: Theme, lifted: boolean) => Surface> = {\n elevated: (_theme, lifted) => ({\n surface: { elevation: CARD_ELEVATION.rest } as CSSObject,\n hover: { elevation: lifted ? CARD_ELEVATION.lifted : CARD_ELEVATION.rest } as CSSObject,\n }),\n outlined: (theme, lifted) => ({\n surface: {\n border: `${CARD_BORDER_WIDTH}px solid ${theme.palette.divider}`,\n boxShadow: 'none',\n },\n hover: { borderColor: lifted ? theme.palette.primary.main : theme.palette.divider },\n }),\n glass: (theme, lifted) => ({\n surface: {\n backgroundColor: alpha(theme.palette.background.paper, CARD_GLASS.backgroundAlpha.rest),\n backdropFilter: `blur(${CARD_GLASS.blurPx}px)`,\n border: `${CARD_BORDER_WIDTH}px solid ${alpha(theme.palette.primary.main, CARD_GLASS.borderAlpha.rest)}`,\n boxShadow: shadowCss({\n offsetX: 0,\n offsetY: CARD_GLASS.shadow.offsetY,\n blurRadius: CARD_GLASS.shadow.blurRadius,\n spreadDistance: 0,\n color: shadowInk(theme, CARD_GLASS.shadow.alpha),\n }),\n },\n hover: {\n backgroundColor: alpha(\n theme.palette.background.paper,\n lifted ? CARD_GLASS.backgroundAlpha.lifted : CARD_GLASS.backgroundAlpha.rest,\n ),\n border: `${CARD_BORDER_WIDTH}px solid ${alpha(theme.palette.primary.main, CARD_GLASS.borderAlpha.lifted)}`,\n },\n }),\n gradient: (theme, lifted) => ({\n surface: {\n background: cardGradient(theme, false),\n color: theme.palette.primary.contrastText,\n boxShadow: shadowCss({\n offsetX: 0,\n offsetY: CARD_GRADIENT.shadow.offsetY,\n blurRadius: CARD_GRADIENT.shadow.blurRadius,\n spreadDistance: 0,\n color: alpha(theme.palette.primary.main, CARD_GRADIENT.shadow.alpha),\n }),\n },\n hover: { background: cardGradient(theme, lifted) },\n }),\n neumorphic: (theme, lifted) => ({\n surface: {\n backgroundColor:\n theme.palette.mode === 'dark' ? neutralTones(theme).raised : neutralTones(theme).surface,\n boxShadow: neumorphicShadow(theme, false),\n border: 'none',\n },\n hover: { boxShadow: neumorphicShadow(theme, lifted) },\n }),\n section: (theme, lifted) => ({\n surface: {\n backgroundColor: sectionBackground(theme, false),\n border: 'none',\n boxShadow: 'none',\n },\n hover: { backgroundColor: sectionBackground(theme, lifted) },\n }),\n};\n\nconst cardGradient = (theme: Theme, dark: boolean): string =>\n dark\n ? `linear-gradient(${CARD_GRADIENT.angleDeg}deg, ${theme.palette.primary.dark}, ${theme.palette.secondary.dark})`\n : `linear-gradient(${CARD_GRADIENT.angleDeg}deg, ${theme.palette.primary.main}, ${theme.palette.secondary.main})`;\n\n// An unrecognised variant gets the shared base only — no interactive, glow or\n// pulse decoration, as before.\nconst variantSurface = (\n theme: Theme,\n variant: CardVariant,\n interactive: boolean,\n): Surface | null => VARIANT_SURFACES[variant]?.(theme, interactive) ?? null;\n\ninterface CardStyleArgs {\n variant: CardVariant;\n interactive: boolean;\n glow: boolean;\n pulse: boolean;\n borderRadius: BorderRadius;\n}\n\nexport const cardStyles = (\n theme: Theme,\n { variant, interactive, glow, pulse, borderRadius }: CardStyleArgs,\n): CSSObject => {\n const base: CSSObject = {\n borderRadius: borderRadiusFor(theme, borderRadius),\n transition: theme.transitions.create(\n ['box-shadow', 'transform', 'border-color', 'background-color'],\n { duration: theme.transitions.duration.standard },\n ),\n };\n\n const chosen = variantSurface(theme, variant, interactive);\n if (!chosen) return base;\n\n return {\n ...base,\n ...(interactive && { cursor: 'pointer', '&:active': { transform: 'translateY(0)' } }),\n ...(glow && { boxShadow: glowShadow(theme, false) }),\n ...(pulse && pulseSurface(theme)),\n ...chosen.surface,\n '&:hover': {\n ...(interactive && { transform: `translateY(-${CARD_INTERACTIVE_LIFT}px)` }),\n ...(glow && { boxShadow: glowShadow(theme, true) }),\n ...chosen.hover,\n },\n };\n};\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/navigation/NavigationMenu/NavigationMenu.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport Paper from '@mui/material/Paper/index.js';\nimport React, { useState } from 'react';\n\nimport { NavigationMegaSection } from './NavigationMegaSection';\nimport { NavigationStandardBody } from './NavigationStandardBody';\nimport {\n LogoBar,\n NavigationShell } from './NavigationMenu.shell';\nimport type { NavigationMenuItem,NavigationMenuProps } from './NavigationMenu.types';\n\n\n\n\n\n\n// The mega-menu layout is a different shape from the list-based variants: a\n// grid of titled sections rather than a single column.\n// onItemClick and dataTestId are not on NavigationMenuProps; they arrive through\n// the rest props and are forwarded to the item renderer, so they are named here.\ntype MegaMenuLayoutProps = NavigationMenuProps & {\n collapsed: boolean;\n onItemClick?: (item: NavigationMenuItem) => void;\n dataTestId?: string;\n};\n\nconst MegaMenuLayout = React.forwardRef<HTMLDivElement, MegaMenuLayoutProps>(\n (\n {\n variant,\n logo,\n items,\n size,\n minimal,\n dataTestId: _dataTestId,\n className,\n maxWidth,\n style,\n ...props\n },\n ref,\n ) => {\n return (\n <NavigationShell\n ref={ref}\n variant={variant}\n minimal={minimal}\n className={className}\n style={{ maxWidth, ...style }}\n {...props}\n >\n <Paper\n elevation={minimal ? 0 : 1}\n sx={{\n width: '100%',\n overflow: 'hidden',\n background: minimal ? 'transparent' : undefined }}\n >\n {logo && <LogoBar>{logo}</LogoBar>}\n <Box\n sx={{\n display: 'grid',\n gridTemplateColumns: 'repeat(auto-fit, minmax(280px, 1fr))',\n gap: 3,\n p: 3 }}\n >\n {items.map((section, sectionIndex) => (\n <NavigationMegaSection\n key={section.id}\n section={section}\n sectionIndex={sectionIndex}\n variant={variant}\n size={size}\n minimal={minimal}\n />\n ))}\n </Box>\n </Paper>\n </NavigationShell>\n );\n },\n);\n\nMegaMenuLayout.displayName = 'MegaMenuLayout';\n\ntype NavigationDefaultedKeys = 'variant' | 'size' | 'minimal' | 'collapsible' | 'showDividers';\n\ntype ResolvedNavigationProps = NavigationMenuProps &\n Required<Pick<NavigationMenuProps, NavigationDefaultedKeys>>;\n\nconst NAVIGATION_DEFAULTS: Pick<NavigationMenuProps, NavigationDefaultedKeys> = {\n variant: 'vertical',\n size: 'md',\n minimal: false,\n collapsible: false,\n showDividers: false };\n\n// Strips explicitly-undefined props before the merge, so `prop={undefined}` still\n// falls back to the default exactly as a destructuring default would. Applied as\n// a merge rather than destructuring defaults, which would otherwise put five\n// branches into the component's own complexity budget.\nconst resolveProps = (props: NavigationMenuProps): ResolvedNavigationProps =>\n ({\n ...NAVIGATION_DEFAULTS,\n ...(Object.fromEntries(\n Object.entries(props).filter(([, value]) => value !== undefined),\n ) as Partial<NavigationMenuProps>) }) as ResolvedNavigationProps;\n\nexport const NavigationMenu = React.forwardRef<HTMLDivElement, NavigationMenuProps>(\n (componentProps, ref) => {\n const {\n variant,\n items,\n size,\n minimal,\n collapsible,\n collapsed: controlledCollapsed,\n onCollapseChange,\n logo,\n endContent,\n maxWidth,\n showDividers,\n className,\n style,\n ...props\n } = resolveProps(componentProps);\n\n const [internalCollapsed, setInternalCollapsed] = useState(false);\n\n // Controlled when the caller passes `collapsed`, uncontrolled otherwise.\n const isControlled = controlledCollapsed !== undefined;\n const collapsed = isControlled ? controlledCollapsed : internalCollapsed;\n\n const handleCollapseToggle = () => {\n if (!isControlled) setInternalCollapsed(!collapsed);\n onCollapseChange?.(!collapsed);\n };\n\n if (variant === 'mega') {\n return (\n <MegaMenuLayout\n ref={ref}\n variant={variant}\n collapsed={collapsed}\n logo={logo}\n items={items}\n size={size}\n minimal={minimal}\n className={className}\n maxWidth={maxWidth}\n style={style}\n {...props}\n />\n );\n }\n\n return (\n <NavigationShell\n ref={ref}\n variant={variant}\n minimal={minimal}\n collapsed={collapsed}\n className={className}\n style={style}\n {...props}\n >\n <NavigationStandardBody\n variant={variant}\n size={size}\n minimal={minimal}\n collapsed={collapsed}\n collapsible={collapsible}\n showDividers={showDividers}\n items={items}\n logo={logo}\n endContent={endContent}\n onCollapseToggle={handleCollapseToggle}\n />\n </NavigationShell>\n );\n },\n);\n\nNavigationMenu.displayName = 'NavigationMenu';\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/navigation/AppHeader/AppHeader.brand.tsx"],"sourcesContent":["'use client';\n\nimport Box from '@mui/material/Box/index.js';\nimport { useTheme } from '@mui/material/styles/index.js';\nimport type { Theme } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport { rem } from '../../../tokens/relative';\nimport type { SizeValue } from '../../../tokens/scales';\n\nimport { brandGradient, initialsOf } from './AppHeader.colors';\nimport type { AppHeaderBrandProps } from './AppHeader.types';\n\n/** The mark's edge, per house size step. */\nconst MARK_PX: Record<SizeValue, number> = { xs: 24, sm: 32, md: 40, lg: 48, xl: 56 };\n\n/** Initials are set at 40% of the mark so a two-letter pair never touches the edge. */\nconst INITIALS_RATIO = 0.4;\n\n/** The mark's box, lifted out of the component to keep it inside the complexity bar. */\nfunction markSx(\n theme: Theme,\n { edge, round, showLogo, seed }: { edge: number; round: boolean; showLogo: boolean; seed: string },\n): Record<string, unknown> {\n return {\n width: edge,\n height: edge,\n flex: '0 0 auto',\n overflow: 'hidden',\n borderRadius: round ? '50%' : '30%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n // Only the initials need the gradient; a logo covers it entirely, and\n // painting it underneath would show at the corners of a transparent PNG.\n backgroundImage: showLogo ? 'none' : brandGradient(seed),\n backgroundColor: showLogo ? theme.palette.action.hover : 'transparent',\n color: theme.palette.getContrastText(seed),\n fontSize: rem(theme, Math.round(edge * INITIALS_RATIO)),\n fontWeight: 700,\n lineHeight: 1,\n letterSpacing: '0.02em',\n userSelect: 'none',\n };\n}\n\n/**\n * The mark that opens the header: the logo when there is one, the name's\n * initials on a gradient derived from the brand colour when there is not.\n *\n * Both branches occupy the SAME box, so a header does not resize when a logo\n * arrives — or when one fails to load and the initials take over, which is the\n * case a plain `<img>` renders as a torn-page glyph beside the store's name.\n */\nexport const AppHeaderBrand: React.FC<AppHeaderBrandProps> = ({\n name,\n logoUrl,\n seedColor,\n size = 'md',\n shape = 'rounded',\n className,\n dataTestId = 'app-header-brand',\n}) => {\n const theme = useTheme();\n const [broken, setBroken] = React.useState(false);\n // Keyed on the URL so a store that swaps its logo gets a fresh attempt rather\n // than inheriting the previous one's failure.\n React.useEffect(() => setBroken(false), [logoUrl]);\n\n const edge = MARK_PX[size];\n const seed = seedColor || theme.palette.primary.main;\n const showLogo = Boolean(logoUrl) && !broken;\n\n return (\n <Box\n className={className}\n data-testid={dataTestId}\n // `role=\"img\"` + the name: the initials are a picture of the brand, not\n // two letters a screen reader should spell out.\n role=\"img\"\n aria-label={name}\n sx={markSx(theme, { edge, round: shape === 'circle', showLogo, seed })}\n >\n {showLogo ? (\n <Box\n component=\"img\"\n src={logoUrl ?? undefined}\n alt=\"\"\n onError={() => setBroken(true)}\n data-testid={`${dataTestId}-logo`}\n sx={{ width: '100%', height: '100%', objectFit: 'cover', display: 'block' }}\n />\n ) : (\n <Box component=\"span\" aria-hidden data-testid={`${dataTestId}-initials`}>\n {initialsOf(name)}\n </Box>\n )}\n </Box>\n );\n};\n\nAppHeaderBrand.displayName = 'AppHeaderBrand';\n\nexport default AppHeaderBrand;\n"],"mappings":";;;;;;;;;AAEA,OAAO,SAAS;AAChB,SAAS,gBAAgB;AAEzB,OAAO,WAAW;AA+EV;AAtER,IAAM,UAAqC,EAAE,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG;AAGpF,IAAM,iBAAiB;AAGvB,SAAS,OACP,OACA,EAAE,MAAM,OAAO,UAAU,KAAK,GACL;AACzB,SAAO;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,UAAU;AAAA,IACV,cAAc,QAAQ,QAAQ;AAAA,IAC9B,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA;AAAA;AAAA,IAGhB,iBAAiB,WAAW,SAAS,cAAc,IAAI;AAAA,IACvD,iBAAiB,WAAW,MAAM,QAAQ,OAAO,QAAQ;AAAA,IACzD,OAAO,MAAM,QAAQ,gBAAgB,IAAI;AAAA,IACzC,UAAU,IAAI,OAAO,KAAK,MAAM,OAAO,cAAc,CAAC;AAAA,IACtD,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,YAAY;AAAA,EACd;AACF;AAUO,IAAM,iBAAgD,CAAC;AAAA,EAC5D;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP,QAAQ;AAAA,EACR;AAAA,EACA,aAAa;AACf,MAAM;AACJ,QAAM,QAAQ,SAAS;AACvB,QAAM,CAAC,QAAQ,SAAS,IAAI,MAAM,SAAS,KAAK;AAGhD,QAAM,UAAU,MAAM,UAAU,KAAK,GAAG,CAAC,OAAO,CAAC;AAEjD,QAAM,OAAO,QAAQ,IAAI;AACzB,QAAM,OAAO,aAAa,MAAM,QAAQ,QAAQ;AAChD,QAAM,WAAW,QAAQ,OAAO,KAAK,CAAC;AAEtC,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,eAAa;AAAA,MAGb,MAAK;AAAA,MACL,cAAY;AAAA,MACZ,IAAI,OAAO,OAAO,EAAE,MAAM,OAAO,UAAU,UAAU,UAAU,KAAK,CAAC;AAAA,MAEpE,qBACC;AAAA,QAAC;AAAA;AAAA,UACC,WAAU;AAAA,UACV,KAAK,WAAW;AAAA,UAChB,KAAI;AAAA,UACJ,SAAS,MAAM,UAAU,IAAI;AAAA,UAC7B,eAAa,GAAG,UAAU;AAAA,UAC1B,IAAI,EAAE,OAAO,QAAQ,QAAQ,QAAQ,WAAW,SAAS,SAAS,QAAQ;AAAA;AAAA,MAC5E,IAEA,oBAAC,OAAI,WAAU,QAAO,eAAW,MAAC,eAAa,GAAG,UAAU,aACzD,qBAAW,IAAI,GAClB;AAAA;AAAA,EAEJ;AAEJ;AAEA,eAAe,cAAc;AAE7B,IAAO,0BAAQ;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/layout/Accordion/Accordion.styles.ts"],"sourcesContent":["import { alpha } from '@mui/material/styles/index.js';\nimport type { Theme } from '@mui/material/styles/index.js';\n\nimport type { AccordionVariant } from './Accordion.types';\n\nconst BASE_TRANSITION = 'all 0.3s cubic-bezier(0.4, 0, 0.2, 1)';\n\n// Deliberately unannotated: the inferred union of literals assigns to MUI's\n// `sx`, whereas a `CSSObject` return type does not survive being spread into it.\nexport const accordionVariantStyles = (theme: Theme, variant: AccordionVariant) => {\n switch (variant) {\n case 'glass':\n return {\n backgroundColor: alpha(theme.palette.background.paper, 0.08),\n backdropFilter: 'blur(24px) saturate(180%)',\n border: `1px solid ${alpha(theme.palette.primary.main, 0.15)}`,\n borderRadius: theme.spacing(1.5),\n transition: BASE_TRANSITION,\n '&:before': {\n display: 'none',\n },\n '&:hover': {\n backgroundColor: alpha(theme.palette.background.paper, 0.12),\n border: `1px solid ${alpha(theme.palette.primary.main, 0.25)}`,\n transform: 'translateY(-1px)',\n boxShadow: `0 8px 32px ${alpha(theme.palette.primary.main, 0.12)}`,\n },\n '&.Mui-expanded': {\n backgroundColor: alpha(theme.palette.background.paper, 0.15),\n border: `1px solid ${alpha(theme.palette.primary.main, 0.3)}`,\n },\n };\n case 'bordered':\n return {\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: theme.spacing(1),\n transition: BASE_TRANSITION,\n '&:before': {\n display: 'none',\n },\n '&:not(:last-child)': {\n marginBottom: theme.spacing(1),\n },\n '&:hover': {\n borderColor: theme.palette.primary.main,\n boxShadow: `0 0 0 1px ${alpha(theme.palette.primary.main, 0.1)}`,\n },\n '&.Mui-expanded': {\n borderColor: theme.palette.primary.main,\n },\n };\n case 'separated':\n return {\n boxShadow: theme.shadows[2],\n borderRadius: theme.spacing(1.5),\n transition: BASE_TRANSITION,\n '&:before': {\n display: 'none',\n },\n '&:not(:last-child)': {\n marginBottom: theme.spacing(2),\n },\n '&:hover': {\n boxShadow: theme.shadows[4],\n transform: 'translateY(-2px)',\n },\n '&.Mui-expanded': {\n boxShadow: theme.shadows[6],\n transform: 'translateY(-1px)',\n },\n };\n default:\n return {\n transition: BASE_TRANSITION,\n '&:hover': {\n backgroundColor: alpha(theme.palette.action.hover, 0.04),\n },\n };\n }\n};\n"],"mappings":";AAAA,SAAS,aAAa;AAKtB,IAAM,kBAAkB;AAIjB,IAAM,yBAAyB,CAAC,OAAc,YAA8B;AACjF,UAAQ,SAAS;AAAA,IACf,KAAK;AACH,aAAO;AAAA,QACL,iBAAiB,MAAM,MAAM,QAAQ,WAAW,OAAO,IAAI;AAAA,QAC3D,gBAAgB;AAAA,QAChB,QAAQ,aAAa,MAAM,MAAM,QAAQ,QAAQ,MAAM,IAAI,CAAC;AAAA,QAC5D,cAAc,MAAM,QAAQ,GAAG;AAAA,QAC/B,YAAY;AAAA,QACZ,YAAY;AAAA,UACV,SAAS;AAAA,QACX;AAAA,QACA,WAAW;AAAA,UACT,iBAAiB,MAAM,MAAM,QAAQ,WAAW,OAAO,IAAI;AAAA,UAC3D,QAAQ,aAAa,MAAM,MAAM,QAAQ,QAAQ,MAAM,IAAI,CAAC;AAAA,UAC5D,WAAW;AAAA,UACX,WAAW,cAAc,MAAM,MAAM,QAAQ,QAAQ,MAAM,IAAI,CAAC;AAAA,QAClE;AAAA,QACA,kBAAkB;AAAA,UAChB,iBAAiB,MAAM,MAAM,QAAQ,WAAW,OAAO,IAAI;AAAA,UAC3D,QAAQ,aAAa,MAAM,MAAM,QAAQ,QAAQ,MAAM,GAAG,CAAC;AAAA,QAC7D;AAAA,MACF;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,QAAQ,aAAa,MAAM,QAAQ,OAAO;AAAA,QAC1C,cAAc,MAAM,QAAQ,CAAC;AAAA,QAC7B,YAAY;AAAA,QACZ,YAAY;AAAA,UACV,SAAS;AAAA,QACX;AAAA,QACA,sBAAsB;AAAA,UACpB,cAAc,MAAM,QAAQ,CAAC;AAAA,QAC/B;AAAA,QACA,WAAW;AAAA,UACT,aAAa,MAAM,QAAQ,QAAQ;AAAA,UACnC,WAAW,aAAa,MAAM,MAAM,QAAQ,QAAQ,MAAM,GAAG,CAAC;AAAA,QAChE;AAAA,QACA,kBAAkB;AAAA,UAChB,aAAa,MAAM,QAAQ,QAAQ;AAAA,QACrC;AAAA,MACF;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,WAAW,MAAM,QAAQ,CAAC;AAAA,QAC1B,cAAc,MAAM,QAAQ,GAAG;AAAA,QAC/B,YAAY;AAAA,QACZ,YAAY;AAAA,UACV,SAAS;AAAA,QACX;AAAA,QACA,sBAAsB;AAAA,UACpB,cAAc,MAAM,QAAQ,CAAC;AAAA,QAC/B;AAAA,QACA,WAAW;AAAA,UACT,WAAW,MAAM,QAAQ,CAAC;AAAA,UAC1B,WAAW;AAAA,QACb;AAAA,QACA,kBAAkB;AAAA,UAChB,WAAW,MAAM,QAAQ,CAAC;AAAA,UAC1B,WAAW;AAAA,QACb;AAAA,MACF;AAAA,IACF;AACE,aAAO;AAAA,QACL,YAAY;AAAA,QACZ,WAAW;AAAA,UACT,iBAAiB,MAAM,MAAM,QAAQ,OAAO,OAAO,IAAI;AAAA,QACzD;AAAA,MACF;AAAA,EACJ;AACF;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/navigation/NavigationMenu/NavigationMenuItem.tsx"],"sourcesContent":["import ChevronRight from '@mui/icons-material/ChevronRight';\nimport ExpandMore from '@mui/icons-material/ExpandMore';\nimport Box from '@mui/material/Box/index.js';\nimport Collapse from '@mui/material/Collapse/index.js';\nimport Fade from '@mui/material/Fade/index.js';\nimport Grow from '@mui/material/Grow/index.js';\nimport List from '@mui/material/List/index.js';\nimport ListItem from '@mui/material/ListItem/index.js';\nimport ListItemButton from '@mui/material/ListItemButton/index.js';\nimport ListItemIcon from '@mui/material/ListItemIcon/index.js';\nimport ListItemText from '@mui/material/ListItemText/index.js';\nimport Popover from '@mui/material/Popover/index.js';\nimport { alpha, styled } from '@mui/material/styles/index.js';\nimport React, { } from 'react';\n\nimport { useMenuItemState } from './NavigationMenuItem.hooks';\nimport { navItemButtonStyles, pulseGlow } from './NavigationMenu.styles';\nimport type { NavigationMenuItem } from './NavigationMenu.types';\nimport { onMedia, shadowInk, uiInk } from '../../../tokens/ink';\nimport { sxRem } from '../../../tokens/relative';\n\nconst StyledListItem = styled(ListItem, {\n shouldForwardProp: (prop) => !['variant', 'active', 'size', 'level'].includes(prop as string) })<{ variant?: string; active?: boolean; size?: string; level?: number }>(\n ({ theme, variant, level = 0 }) => ({\n padding: 0,\n ...(variant === 'horizontal' && {\n width: 'auto' }),\n ...(level > 0 && {\n paddingLeft: theme.spacing(2 * level) }) }),\n);\n\nconst StyledListItemButton = styled(ListItemButton, {\n shouldForwardProp: (prop) => !['variant', 'active', 'size', 'collapsed', 'minimal'].includes(prop as string) })<{ variant?: string; active?: boolean; size?: string; collapsed?: boolean; minimal?: boolean }>(\n ({ theme, variant, active, size, collapsed, minimal }) => ({\n ...navItemButtonStyles({ theme, variant, active, size, collapsed, minimal }) }),\n);\n\ninterface MenuItemRendererProps {\n item: NavigationMenuItem;\n variant: string;\n size: string;\n collapsed: boolean;\n minimal: boolean;\n level: number;\n onItemClick?: (item: NavigationMenuItem) => void;\n}\n\n// Hover intent and open/anchor state live in NavigationMenuItem.hooks.\n\n// The flyout a horizontal menu opens on hover.\nconst MenuItemPopover: React.FC<{\n anchorEl: HTMLElement | null;\n item: NavigationMenuItem;\n size?: string;\n minimal?: boolean;\n onClose: () => void;\n onMouseEnter: () => void;\n onMouseLeave: () => void;\n onItemClick?: (item: NavigationMenuItem) => void;\n}> = ({ anchorEl, item, size, minimal, onClose, onMouseEnter, onMouseLeave, onItemClick }) => (\n <Popover\n open={Boolean(anchorEl)}\n anchorEl={anchorEl}\n onClose={onClose}\n anchorOrigin={{\n vertical: 'bottom',\n horizontal: 'left' }}\n transformOrigin={{\n vertical: 'top',\n horizontal: 'left' }}\n disableRestoreFocus\n sx={{\n pointerEvents: 'none' }}\n slotProps={{\n paper: {\n onMouseEnter,\n onMouseLeave,\n sx: {\n pointerEvents: 'auto',\n mt: 0.5,\n borderRadius: 2,\n boxShadow: (theme) => `0 12px 40px ${shadowInk(theme, 0.15)}`,\n border: (theme) => `1px solid ${alpha(theme.palette.divider, 0.1)}`,\n background: (theme) =>\n `linear-gradient(145deg, ${theme.palette.background.paper} 0%, ${alpha(theme.palette.background.default, 0.95)} 100%)`,\n backdropFilter: 'blur(10px)',\n minWidth: 200 } } }}\n >\n <List sx={{ p: 1 }}>\n {item.children?.map((child) => {\n const childHasChildren = child.children && child.children.length > 0;\n\n // Only close popover when clicking leaf nodes (items without children)\n if (childHasChildren) {\n return renderMenuItem(child, 'vertical', size, false, minimal, 0, onItemClick);\n }\n\n // For leaf nodes, wrap with onClick to close the popover\n return (\n <Box\n key={child.id}\n onClick={onClose}\n >\n {renderMenuItem(child, 'vertical', size, false, minimal, 0, onItemClick)}\n </Box>\n );\n })}\n </List>\n </Popover>\n);\n\n// Label, badge/chip and the expand chevron, faded out when the rail collapses.\nconst MenuItemLabel: React.FC<{\n item: NavigationMenuItem;\n collapsed?: boolean;\n minimal?: boolean;\n open: boolean;\n hasChildren?: boolean;\n size?: string;\n variant?: string;\n}> = ({ item, collapsed, open, hasChildren, size, variant }) => (\n <Fade in={!collapsed} timeout={400}>\n <Box sx={{ display: 'flex', alignItems: 'center', width: '100%', gap: 1 }}>\n <ListItemText\n primary={item.label}\n secondary={item.description}\n sx={{\n flex: 1,\n minWidth: 0, // Allows text truncation if needed\n }}\n slotProps={{\n primary: {\n variant: size === 'sm' ? 'body2' : size === 'lg' ? 'h6' : 'body1',\n sx: {\n fontWeight: item.active ? 600 : 400,\n transition: 'all 0.3s ease' } },\n secondary: {\n sx: {\n opacity: 0.7,\n transition: 'all 0.3s ease' } } }}\n />\n {item.badge && (\n <Box\n component=\"span\"\n sx={{\n flexShrink: 0,\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n minWidth: 20,\n height: 20,\n px: 0.75,\n borderRadius: '10px',\n fontSize: sxRem(12),\n fontWeight: 600,\n color: (theme) => onMedia(theme),\n background: (theme) =>\n `linear-gradient(135deg, ${uiInk(theme).attention.from} 0%, ${uiInk(theme).attention.to} 100%)`,\n boxShadow: (theme) => `0 2px 8px ${alpha(uiInk(theme).attention.glow, 0.4)}`,\n animation:\n typeof item.badge === 'number' && item.badge > 0\n ? `${pulseGlow} 2s infinite`\n : 'none' }}\n >\n {item.badge}\n </Box>\n )}\n {hasChildren && (\n <Box\n sx={{\n display: 'flex',\n alignItems: 'center',\n flexShrink: 0, // Prevents expand icon from shrinking\n transition: 'transform 0.3s ease',\n transform: open ? 'rotate(180deg)' : 'rotate(0deg)' }}\n >\n {variant === 'horizontal' ? <ChevronRight fontSize=\"small\" /> : <ExpandMore />}\n </Box>\n )}\n </Box>\n </Fade>\n);\n\n// The row itself: icon, label, badge and the expand chevron.\nconst MenuItemContent: React.FC<{\n item: NavigationMenuItem;\n variant?: string;\n size?: string;\n active?: boolean;\n collapsed?: boolean;\n minimal?: boolean;\n level: number;\n open: boolean;\n hasChildren?: boolean;\n onClick: (event: React.MouseEvent<HTMLElement>) => void;\n onMouseEnter: (event: React.MouseEvent<HTMLElement>) => void;\n onMouseLeave: () => void;\n}> = ({\n item,\n variant,\n size,\n active: _active,\n collapsed,\n minimal,\n level,\n open,\n hasChildren,\n onClick,\n onMouseEnter,\n onMouseLeave }) => (\n<StyledListItem key={item.id} variant={variant} active={item.active} size={size} level={level}>\n <StyledListItemButton\n variant={variant}\n active={item.active}\n size={size}\n collapsed={collapsed}\n minimal={minimal}\n disabled={item.disabled}\n onClick={onClick}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n {...(item.href && !hasChildren\n ? {\n component: 'a' as React.ElementType,\n href: item.href,\n target: item.target }\n : {})}\n >\n {item.icon && (\n <ListItemIcon\n sx={{\n minWidth: collapsed ? 0 : 40,\n justifyContent: 'center',\n transition: 'all 0.3s ease',\n '& svg': {\n filter: (theme) => (item.active ? `drop-shadow(0 2px 8px ${shadowInk(theme, 0.15)})` : 'none'),\n transition: 'all 0.3s ease' } }}\n >\n <Grow in={true} timeout={600}>\n <Box>{item.icon}</Box>\n </Grow>\n </ListItemIcon>\n )}\n {!collapsed && (\n <MenuItemLabel\n item={item}\n collapsed={collapsed}\n minimal={minimal}\n open={open}\n hasChildren={hasChildren}\n size={size}\n variant={variant}\n />\n )}\n </StyledListItemButton>\n </StyledListItem>\n);\n\nconst MenuItemRenderer: React.FC<MenuItemRendererProps> = ({\n item,\n variant,\n size,\n collapsed,\n minimal,\n level,\n onItemClick }) => {\n const {\n open,\n anchorEl,\n hasChildren,\n handleClick,\n handleMouseEnter,\n handleMouseLeave,\n handlePopoverMouseEnter,\n handlePopoverMouseLeave,\n closePopover } = useMenuItemState({ item, variant, onItemClick });\n\n const itemContent = (\n <MenuItemContent\n item={item}\n variant={variant}\n size={size}\n active={item.active}\n collapsed={collapsed}\n minimal={minimal}\n level={level}\n open={open}\n hasChildren={hasChildren}\n onClick={handleClick}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n />\n );\n\n // Horizontal variant with children - use Popover\n if (hasChildren && variant === 'horizontal') {\n return (\n <React.Fragment key={item.id}>\n {itemContent}\n <MenuItemPopover\n anchorEl={anchorEl}\n item={item}\n size={size}\n minimal={minimal}\n onClose={closePopover}\n onMouseEnter={handlePopoverMouseEnter}\n onMouseLeave={handlePopoverMouseLeave}\n onItemClick={onItemClick}\n />\n </React.Fragment>\n );\n }\n\n // Vertical variant with children - use Collapse\n if (hasChildren && variant !== 'horizontal') {\n return (\n <React.Fragment key={item.id}>\n {itemContent}\n {!collapsed && (\n <Collapse in={open} timeout=\"auto\" unmountOnExit>\n <List component=\"div\" disablePadding>\n {item.children?.map((child) =>\n renderMenuItem(child, variant, size, collapsed, minimal, level + 1, onItemClick),\n )}\n </List>\n </Collapse>\n )}\n </React.Fragment>\n );\n }\n\n return itemContent;\n};\n\nexport const renderMenuItem = (\n item: NavigationMenuItem,\n variant: string = 'vertical',\n size: string = 'md',\n collapsed: boolean = false,\n minimal: boolean = false,\n level: number = 0,\n onItemClick?: (item: NavigationMenuItem) => void,\n): React.ReactNode => (\n <MenuItemRenderer\n key={item.id}\n item={item}\n variant={variant}\n size={size}\n collapsed={collapsed}\n minimal={minimal}\n level={level}\n onItemClick={onItemClick}\n />\n );\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/layout/Spacer/Spacer.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport { useTheme } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport { SPACER_FLEX_GROW, SPACER_FLEX_SHRINK, spacerDimensions } from './Spacer.metrics';\nimport type { SpacerProps } from './Spacer.types';\nimport { resolveTestId } from '../../../platform/test-id';\n\nexport const Spacer: React.FC<SpacerProps> = ({\n size,\n direction,\n width,\n height,\n flex = false,\n className,\n ...testIdProps\n}) => {\n const theme = useTheme();\n\n // From the shared metrics, not a table of our own: the native `Spacer` reads\n // the same units, so the two renderers cannot disagree on a step.\n const dimensions = spacerDimensions({ size, direction, width, height }, (units) => theme.spacing(units));\n\n return (\n <Box\n className={className}\n data-testid={resolveTestId(testIdProps)}\n sx={{\n width: dimensions.width,\n height: dimensions.height,\n flex: flex ? SPACER_FLEX_GROW : undefined,\n flexShrink: SPACER_FLEX_SHRINK,\n pointerEvents: 'none',\n userSelect: 'none',\n }}\n aria-hidden=\"true\"\n />\n );\n};\n"],"mappings":";;;;;;;;;;AAAA,OAAO,SAAS;AAChB,SAAS,gBAAgB;AAuBrB;AAhBG,IAAM,SAAgC,CAAC;AAAA,EAC5C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,OAAO;AAAA,EACP;AAAA,EACA,GAAG;AACL,MAAM;AACJ,QAAM,QAAQ,SAAS;AAIvB,QAAM,aAAa,iBAAiB,EAAE,MAAM,WAAW,OAAO,OAAO,GAAG,CAAC,UAAU,MAAM,QAAQ,KAAK,CAAC;AAEvG,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,eAAa,cAAc,WAAW;AAAA,MACtC,IAAI;AAAA,QACF,OAAO,WAAW;AAAA,QAClB,QAAQ,WAAW;AAAA,QACnB,MAAM,OAAO,mBAAmB;AAAA,QAChC,YAAY;AAAA,QACZ,eAAe;AAAA,QACf,YAAY;AAAA,MACd;AAAA,MACA,eAAY;AAAA;AAAA,EACd;AAEJ;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/data-display/Table/Table.helpers.ts"],"sourcesContent":["import type { TableProps } from './Table.types';\n\nexport const TABLE_DEFAULTS: Partial<TableProps> = {\n variant: 'default',\n stripeColor: 'neutral',\n glow: false,\n pulse: false,\n hoverable: false,\n loading: false,\n density: 'normal',\n stickyHeader: false,\n selectable: false,\n selectedRows: [],\n sortable: false,\n virtualScrolling: false,\n rowHeight: 52,\n overscan: 5,\n responsive: false,\n showColumnToggle: true,\n};\n\n// Strips explicitly-undefined props before the merge, so `prop={undefined}` still\n// falls back to the default as a destructuring default would. Eighteen separate\n// destructuring defaults were most of this component's branch count.\nexport const definedProps = (props: TableProps): Partial<TableProps> =>\n Object.fromEntries(\n Object.entries(props).filter(([, value]) => value !== undefined),\n ) as Partial<TableProps>;\n\n// The container + styled table + optional header, shared by the loading, empty\n// and populated renders.\n"],"mappings":";AAEO,IAAM,iBAAsC;AAAA,EACjD,SAAS;AAAA,EACT,aAAa;AAAA,EACb,MAAM;AAAA,EACN,OAAO;AAAA,EACP,WAAW;AAAA,EACX,SAAS;AAAA,EACT,SAAS;AAAA,EACT,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,cAAc,CAAC;AAAA,EACf,UAAU;AAAA,EACV,kBAAkB;AAAA,EAClB,WAAW;AAAA,EACX,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,kBAAkB;AACpB;AAKO,IAAM,eAAe,CAAC,UAC3B,OAAO;AAAA,EACL,OAAO,QAAQ,KAAK,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,UAAU,MAAS;AACjE;","names":[]}
|