@12-apps/ui 6.37.0 → 6.38.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/DataViews/DataViewsBoard.js +2 -2
- package/dist/_internal/components/data-display/DataViews/DataViewsGrid.js +40 -40
- package/dist/_internal/components/data-display/DataViews/DataViewsTableBase.js +48 -49
- 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 +5 -6
- package/dist/_internal/components/data-display/DataViews/base-card.js +4 -5
- package/dist/_internal/components/data-display/DataViews/base-list-card-geometry.js +4 -4
- package/dist/_internal/components/data-display/DataViews/base-list-card-slots.js +3 -3
- package/dist/_internal/components/data-display/DataViews/base-list-card.js +7 -8
- 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 +5 -5
- package/dist/_internal/components/data-display/DataViews/data-views-display-tabs.js +2 -2
- 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 +6 -6
- 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 +37 -37
- 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-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-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-select-all-strip.js +2 -2
- package/dist/_internal/components/data-display/DataViews/data-views-shell-toolbar.js +17 -17
- package/dist/_internal/components/data-display/DataViews/data-views-table-parts.js +14 -15
- package/dist/_internal/components/data-display/DataViews/data-views-toolbar.js +16 -16
- package/dist/_internal/components/data-display/DataViews/data-views-view-nav.js +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 +4 -4
- package/dist/_internal/components/data-display/FleetMap/FleetMap.js +5 -5
- 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/StatCard/StatCard.js +3 -3
- package/dist/_internal/components/data-display/index.js +11 -11
- 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/total-form/FormErrorSnackbar.js +3 -2
- package/dist/_internal/components/index.js +83 -84
- 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/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/ScrollArea/ScrollArea.js +5 -4
- 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 +27 -28
- 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/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 +7 -7
- 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-BLJDCMFU.js → chunk-2ARVNCVU.js} +7 -7
- package/dist/chunk-2ARVNCVU.js.map +1 -0
- package/dist/{chunk-SJO3K7SB.js → chunk-2OYFTSG4.js} +4 -4
- 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-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-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-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-E7T3A4IR.js → chunk-5JCGBCFJ.js} +2 -2
- package/dist/{chunk-FC7NQ6XM.js → chunk-5MW7OYBM.js} +2 -2
- package/dist/{chunk-CQLPDY2J.js → chunk-5OBXEMQO.js} +3 -3
- 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-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-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-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-PMP6WJJS.js → chunk-BWMHGENX.js} +20 -19
- package/dist/chunk-BWMHGENX.js.map +1 -0
- package/dist/{chunk-QAP3FW33.js → chunk-C66RGVAS.js} +30 -20
- package/dist/chunk-C66RGVAS.js.map +1 -0
- package/dist/{chunk-UZ6AUTE6.js → chunk-CNQUCNEA.js} +7 -7
- package/dist/{chunk-JL75FJRG.js → chunk-CZIX4BW2.js} +4 -4
- package/dist/{chunk-CAHWCSRE.js → chunk-D46SLMCX.js} +22 -8
- package/dist/chunk-D46SLMCX.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-HU7TX7RB.js → chunk-DUBTI4DI.js} +4 -4
- 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-NPP44TQG.js → chunk-EYZ6QBTV.js} +2 -2
- package/dist/{chunk-NPP44TQG.js.map → chunk-EYZ6QBTV.js.map} +1 -1
- package/dist/{chunk-C55AWF3U.js → chunk-FFCJ7NR2.js} +2 -2
- package/dist/{chunk-U342T7ZR.js → chunk-FOCU4QT5.js} +13 -10
- package/dist/chunk-FOCU4QT5.js.map +1 -0
- 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-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-AER4245J.js → chunk-H67EL3CG.js} +6 -6
- package/dist/{chunk-3D6HXKZM.js → chunk-HDJQDMHB.js} +18 -13
- package/dist/chunk-HDJQDMHB.js.map +1 -0
- package/dist/{chunk-57JLS55D.js → chunk-I4QA2F4L.js} +4 -4
- 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-AJ5SDHX5.js → chunk-JCL7WK4G.js} +2 -2
- 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-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-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-2ZIHZLF5.js → chunk-M2JTIH5M.js} +3 -3
- package/dist/{chunk-OATHOXIU.js → chunk-MC4KYGSX.js} +8 -8
- package/dist/chunk-MC4KYGSX.js.map +1 -0
- package/dist/{chunk-2BIVCYTO.js → chunk-MR2HKBHS.js} +4 -4
- 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-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-NDNYD4FG.js → chunk-OS6KPL4D.js} +4 -4
- 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-75LOTMSN.js → chunk-PPRV4LTM.js} +2 -2
- package/dist/{chunk-LT4NEKXB.js → chunk-QA2ZGCRL.js} +3 -3
- package/dist/{chunk-2E2WOBID.js → chunk-QGFBIUOK.js} +5 -5
- package/dist/chunk-QGFBIUOK.js.map +1 -0
- package/dist/{chunk-ROT57BP4.js → chunk-R2XVTUVR.js} +2 -2
- package/dist/{chunk-QEG3P5D4.js → chunk-R6SN73RX.js} +10 -10
- package/dist/{chunk-MVKYNDT2.js → chunk-RKROWJVF.js} +11 -9
- package/dist/chunk-RKROWJVF.js.map +1 -0
- package/dist/{chunk-NYZO3JNB.js → chunk-RXJQA3FQ.js} +2 -3
- package/dist/chunk-RXJQA3FQ.js.map +1 -0
- package/dist/{chunk-IKLOIONQ.js → chunk-RZYSKQTS.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-DB2ZFZVW.js → chunk-TKC6WHGB.js} +2 -2
- 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-JLQGRZMN.js → chunk-UEVHI62V.js} +2 -2
- package/dist/{chunk-4CXEWFKO.js → chunk-UFJYJHQI.js} +2 -2
- 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-35S6QI5G.js → chunk-XJJXBUPN.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-MBC55H6M.js → chunk-Y5UTYBZW.js} +12 -6
- package/dist/chunk-Y5UTYBZW.js.map +1 -0
- package/dist/{chunk-HNPWZ3W2.js → chunk-Y7F5JBAT.js} +4 -4
- package/dist/{chunk-WTOYEWW6.js → chunk-YBH4SPMM.js} +4 -3
- package/dist/chunk-YBH4SPMM.js.map +1 -0
- 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-RNEYZTE4.js → chunk-Z6MCTGIK.js} +2 -2
- package/dist/{chunk-RNEYZTE4.js.map → chunk-Z6MCTGIK.js.map} +1 -1
- package/dist/{chunk-FFOQZRFC.js → chunk-ZAY6OA6F.js} +2 -2
- package/dist/data-display/AsyncStateContainer.js +4 -4
- package/dist/data-display/CardKit.js +2 -2
- package/dist/data-display/DataViews.js +55 -56
- package/dist/data-display/DescriptionItem.js +2 -2
- package/dist/data-display/FleetMap.js +5 -5
- package/dist/data-display/LazyImage.js +3 -3
- package/dist/data-display/LoadingState.js +3 -3
- package/dist/data-display/StatCard.js +3 -3
- 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/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/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/ScrollArea.js +5 -4
- 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/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/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/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/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/ScrollArea/ScrollArea.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/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/social-login-button/social-login-button.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/WorkflowStep.js +3 -3
- package/package.json +1 -1
- 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/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/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/ScrollArea/ScrollArea.styles.ts +45 -32
- package/src/components/layout/ScrollArea/ScrollArea.tsx +31 -16
- 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/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-3CVTQZQJ.js.map +0 -1
- package/dist/chunk-3D6HXKZM.js.map +0 -1
- package/dist/chunk-3T5Z5HXF.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-7F7TTOYN.js.map +0 -1
- package/dist/chunk-7UZ2TFIK.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-DYVAOEW4.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-FYTLKHEN.js.map +0 -1
- package/dist/chunk-GRDPGHQJ.js.map +0 -1
- package/dist/chunk-GUW5BUK7.js.map +0 -1
- package/dist/chunk-HB7ISSLK.js.map +0 -1
- package/dist/chunk-HXEBKOSM.js.map +0 -1
- package/dist/chunk-IVIHRZEY.js.map +0 -1
- package/dist/chunk-IYTBTK2M.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-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-PMP6WJJS.js.map +0 -1
- package/dist/chunk-PT2XADGH.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-QKPD322X.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-TVL5V2JK.js.map +0 -1
- package/dist/chunk-U342T7ZR.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-YVUD3MY4.js.map +0 -1
- package/dist/chunk-ZTYUKEN3.js.map +0 -1
- /package/dist/{chunk-SJO3K7SB.js.map → chunk-2OYFTSG4.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-IL7JZKXY.js.map → chunk-442FSG7G.js.map} +0 -0
- /package/dist/{chunk-CS3KOKL3.js.map → chunk-4GWHYLEB.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-CQLPDY2J.js.map → chunk-5OBXEMQO.js.map} +0 -0
- /package/dist/{chunk-BW62QQAG.js.map → chunk-6N4AA2Y7.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-UZ6AUTE6.js.map → chunk-CNQUCNEA.js.map} +0 -0
- /package/dist/{chunk-JL75FJRG.js.map → chunk-CZIX4BW2.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-C55AWF3U.js.map → chunk-FFCJ7NR2.js.map} +0 -0
- /package/dist/{chunk-AYLEZM6T.js.map → chunk-GLFTIGOF.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-I4QA2F4L.js.map} +0 -0
- /package/dist/{chunk-AJ5SDHX5.js.map → chunk-JCL7WK4G.js.map} +0 -0
- /package/dist/{chunk-WE3LJPRN.js.map → chunk-KE473LK6.js.map} +0 -0
- /package/dist/{chunk-CQPFSEJB.js.map → chunk-L7NQCLFU.js.map} +0 -0
- /package/dist/{chunk-2ZIHZLF5.js.map → chunk-M2JTIH5M.js.map} +0 -0
- /package/dist/{chunk-2BIVCYTO.js.map → chunk-MR2HKBHS.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-NDNYD4FG.js.map → chunk-OS6KPL4D.js.map} +0 -0
- /package/dist/{chunk-75LOTMSN.js.map → chunk-PPRV4LTM.js.map} +0 -0
- /package/dist/{chunk-LT4NEKXB.js.map → chunk-QA2ZGCRL.js.map} +0 -0
- /package/dist/{chunk-ROT57BP4.js.map → chunk-R2XVTUVR.js.map} +0 -0
- /package/dist/{chunk-QEG3P5D4.js.map → chunk-R6SN73RX.js.map} +0 -0
- /package/dist/{chunk-IKLOIONQ.js.map → chunk-RZYSKQTS.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-DB2ZFZVW.js.map → chunk-TKC6WHGB.js.map} +0 -0
- /package/dist/{chunk-JLQGRZMN.js.map → chunk-UEVHI62V.js.map} +0 -0
- /package/dist/{chunk-4CXEWFKO.js.map → chunk-UFJYJHQI.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-35S6QI5G.js.map → chunk-XJJXBUPN.js.map} +0 -0
- /package/dist/{chunk-GHTBUJ6E.js.map → chunk-XRUW7DMH.js.map} +0 -0
- /package/dist/{chunk-HNPWZ3W2.js.map → chunk-Y7F5JBAT.js.map} +0 -0
- /package/dist/{chunk-6BDYC4RA.js.map → chunk-YRSR5LVZ.js.map} +0 -0
- /package/dist/{chunk-FFOQZRFC.js.map → chunk-ZAY6OA6F.js.map} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/layout/Dashboard/DashboardParts.tsx"],"sourcesContent":["'use client';\n\nimport CloseIcon from '@mui/icons-material/Close';\nimport ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport ExportIcon from '@mui/icons-material/FileDownloadOutlined';\nimport FilterIcon from '@mui/icons-material/FilterListRounded';\nimport InfoIcon from '@mui/icons-material/InfoOutlined';\nimport SettingsIcon from '@mui/icons-material/SettingsOutlined';\nimport Badge from '@mui/material/Badge/index.js';\nimport Box from '@mui/material/Box/index.js';\nimport Dialog from '@mui/material/Dialog/index.js';\nimport DialogContent from '@mui/material/DialogContent/index.js';\nimport DialogTitle from '@mui/material/DialogTitle/index.js';\nimport IconButton from '@mui/material/IconButton/index.js';\nimport Menu from '@mui/material/Menu/index.js';\nimport MenuItem from '@mui/material/MenuItem/index.js';\nimport Popover from '@mui/material/Popover/index.js';\nimport Tooltip from '@mui/material/Tooltip/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport React, { useState } from 'react';\n\nimport { HeaderActions } from '../../form/HeaderActions';\nimport { HeaderButton } from '../../form/HeaderButton';\nimport { useDashboardContext } from './DashboardContext';\nimport type {\n DashboardActionProps,\n DashboardActionsProps,\n DashboardExportFormat,\n DashboardExportProps,\n DashboardFilterToggleProps,\n DashboardInfoProps,\n DashboardSettingsProps,\n} from './Dashboard.types';\nimport { sxRem } from '../../../tokens/relative';\n\n/** Flexible spacer — everything composed after it is pushed to the right. */\nexport const DashboardSpacer = (): React.JSX.Element => <Box sx={{ flex: 1 }} aria-hidden />;\nDashboardSpacer.displayName = 'Dashboard.Spacer';\n\nexport const DashboardInfo = ({\n title = 'About this page',\n children,\n ariaLabel = 'Page information',\n}: DashboardInfoProps): React.JSX.Element => {\n const { testIdPrefix } = useDashboardContext();\n const [anchorEl, setAnchorEl] = useState<HTMLButtonElement | null>(null);\n const open = Boolean(anchorEl);\n return (\n <>\n <Tooltip title={ariaLabel}>\n <IconButton\n size=\"small\"\n aria-label={ariaLabel}\n aria-haspopup=\"dialog\"\n onClick={(e) => setAnchorEl(e.currentTarget)}\n data-testid={`${testIdPrefix}-info-trigger`}\n sx={{ color: 'text.secondary' }}\n >\n <InfoIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n <Popover\n open={open}\n anchorEl={anchorEl}\n onClose={() => setAnchorEl(null)}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }}\n slotProps={{ paper: { sx: { width: 360, maxWidth: '90vw' } } }}\n data-testid={`${testIdPrefix}-info-popover`}\n >\n <Box sx={{ px: 2, py: 1.5, borderBottom: 1, borderColor: 'divider', display: 'flex', gap: 1, alignItems: 'center' }}>\n <InfoIcon fontSize=\"small\" sx={{ color: 'text.secondary' }} />\n <Typography sx={{ fontWeight: 600 }}>{title}</Typography>\n </Box>\n <Box sx={{ px: 2, py: 1.5, fontSize: sxRem(14), color: 'text.secondary' }}>{children}</Box>\n </Popover>\n </>\n );\n};\nDashboardInfo.displayName = 'Dashboard.Info';\n\nexport const DashboardFilterToggle = ({ ariaLabel }: DashboardFilterToggleProps): React.JSX.Element => {\n const { filtersVisible, toggleFilters, activeFilterCount, testIdPrefix } = useDashboardContext();\n const label = ariaLabel ?? (filtersVisible ? 'Hide filters' : 'Show filters');\n return (\n <Tooltip title={label}>\n <IconButton\n size=\"small\"\n aria-label={label}\n aria-pressed={filtersVisible}\n onClick={toggleFilters}\n data-testid={`${testIdPrefix}-filter-toggle`}\n sx={{ color: filtersVisible ? 'primary.main' : 'text.secondary', bgcolor: filtersVisible ? 'action.selected' : 'transparent' }}\n >\n <Badge badgeContent={activeFilterCount} color=\"primary\" overlap=\"circular\">\n <FilterIcon fontSize=\"small\" />\n </Badge>\n </IconButton>\n </Tooltip>\n );\n};\nDashboardFilterToggle.displayName = 'Dashboard.FilterToggle';\n\nexport const DashboardSettings = ({\n title = 'Settings',\n closeLabel,\n children,\n ariaLabel = 'Settings',\n href,\n linkComponent,\n}: DashboardSettingsProps): React.JSX.Element => {\n const { testIdPrefix } = useDashboardContext();\n const [open, setOpen] = useState(false);\n\n // Link mode: the gear navigates to a settings route (e.g. the page's\n // Configuração section) instead of opening an in-page dialog.\n if (href) {\n const LinkComponent = linkComponent ?? 'a';\n return (\n <Tooltip title={ariaLabel}>\n <IconButton\n size=\"small\"\n aria-label={ariaLabel}\n component={LinkComponent}\n href={href}\n data-testid={`${testIdPrefix}-settings-trigger`}\n sx={{ color: 'text.secondary' }}\n >\n <SettingsIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n );\n }\n\n return (\n <>\n <Tooltip title={ariaLabel}>\n <IconButton\n size=\"small\"\n aria-label={ariaLabel}\n aria-haspopup=\"dialog\"\n onClick={() => setOpen(true)}\n data-testid={`${testIdPrefix}-settings-trigger`}\n sx={{ color: 'text.secondary' }}\n >\n <SettingsIcon fontSize=\"small\" />\n </IconButton>\n </Tooltip>\n <Dialog open={open} onClose={() => setOpen(false)} maxWidth=\"sm\" fullWidth data-testid={`${testIdPrefix}-settings-dialog`}>\n <DialogTitle sx={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between' }}>\n {title}\n <IconButton aria-label={closeLabel} size=\"small\" onClick={() => setOpen(false)}>\n <CloseIcon fontSize=\"small\" />\n </IconButton>\n </DialogTitle>\n <DialogContent dividers>{children}</DialogContent>\n </Dialog>\n </>\n );\n};\nDashboardSettings.displayName = 'Dashboard.Settings';\n\nconst DEFAULT_EXPORT_FORMATS: DashboardExportFormat[] = [\n { id: 'csv', label: 'CSV (.csv)' },\n { id: 'xlsx', label: 'Excel (.xlsx)' },\n { id: 'json', label: 'JSON (.json)' },\n];\n\nexport const DashboardExport = ({\n formats = DEFAULT_EXPORT_FORMATS,\n onExport,\n label = 'Export',\n}: DashboardExportProps): React.JSX.Element => {\n const { testIdPrefix } = useDashboardContext();\n const [anchorEl, setAnchorEl] = useState<HTMLElement | null>(null);\n const open = Boolean(anchorEl);\n return (\n <>\n <HeaderButton\n variant=\"outlined\"\n color=\"inherit\"\n text={label}\n icon={<ExportIcon fontSize=\"small\" />}\n endIcon={<ExpandMoreIcon fontSize=\"small\" />}\n onClick={(e) => setAnchorEl(e.currentTarget)}\n aria-haspopup=\"menu\"\n aria-expanded={open}\n dataTestId={`${testIdPrefix}-export-trigger`}\n />\n <Menu anchorEl={anchorEl} open={open} onClose={() => setAnchorEl(null)} data-testid={`${testIdPrefix}-export-menu`}>\n {formats.map((format) => (\n <MenuItem\n key={format.id}\n onClick={() => {\n onExport(format.id);\n setAnchorEl(null);\n }}\n data-testid={`${testIdPrefix}-export-${format.id}`}\n >\n {format.label}\n </MenuItem>\n ))}\n </Menu>\n </>\n );\n};\nDashboardExport.displayName = 'Dashboard.Export';\n\nexport const DashboardAction = ({ children }: DashboardActionProps): React.JSX.Element => (\n <Box sx={{ display: 'inline-flex' }}>{children}</Box>\n);\nDashboardAction.displayName = 'Dashboard.Action';\n\n/**\n * The header's actions, declared as a LIST — `<Dashboard.Action>`'s plural.\n *\n * `<Dashboard.Action>` is a slot: it renders whatever you hand it, once per\n * action, and a page with five of them draws five equally-loud buttons. That is\n * the right primitive for one button and the wrong one for five, and the pages\n * here that grew a fifth action all grew it the same way — by adding a fifth\n * slot, because the slot was the only thing on offer.\n *\n * This part answers the question the slot cannot: given N actions, how many\n * belong on the bar? See {@link HeaderActions} for the rule (0 ⇒ nothing,\n * 1 ⇒ a button, n ⇒ a button and a menu of the rest).\n *\n * Both stay. A header still composes `<Dashboard.Action>` for the one control\n * that is not an action at all — a link, a toggle, a status pill — and reaches\n * for this when it has actions to rank.\n */\nexport const DashboardActions = ({\n actions,\n moreLabel,\n collapseBelow,\n}: DashboardActionsProps): React.JSX.Element => {\n const { testIdPrefix } = useDashboardContext();\n return (\n <HeaderActions\n actions={actions}\n moreLabel={moreLabel}\n collapseBelow={collapseBelow}\n testIdPrefix={`${testIdPrefix}-actions`}\n />\n );\n};\nDashboardActions.displayName = 'Dashboard.Actions';\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/feedback/TutorialOverlay/TutorialOverlay.hooks.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\n\nimport { calculateTooltipPosition, getElementBounds } from './TutorialOverlay.geometry';\nimport type { TutorialOverlayProps } from './TutorialOverlay.types';\n\n// Tracks the highlighted element's box, re-measuring on resize and scroll. Scroll\n// is captured (third argument true) so it fires for any scrolling ancestor, not\n// just the window.\nconst useTargetBounds = ({\n active,\n target,\n}: {\n active: boolean;\n target?: string;\n}) => {\n const [targetBounds, setTargetBounds] = useState<globalThis.DOMRect | null>(null);\n const [isVisible, setIsVisible] = useState(false);\n\n useEffect(() => {\n if (!active || !target) return;\n\n const updateBounds = () => {\n const bounds = getElementBounds(target);\n setTargetBounds(bounds);\n setIsVisible(Boolean(bounds));\n };\n\n updateBounds();\n\n window.addEventListener('resize', updateBounds);\n window.addEventListener('scroll', updateBounds, true);\n\n return () => {\n window.removeEventListener('resize', updateBounds);\n window.removeEventListener('scroll', updateBounds, true);\n };\n }, [active, target]);\n\n return { targetBounds, isVisible };\n};\n\n// Places the tooltip against the measured target once both boxes are known.\nconst useTooltipPlacement = ({\n targetBounds,\n isVisible,\n preferredPosition,\n}: {\n targetBounds: globalThis.DOMRect | null;\n isVisible: boolean;\n preferredPosition?: string;\n}) => {\n const tooltipRef = useRef<HTMLDivElement>(null);\n const [tooltipPosition, setTooltipPosition] = useState({ top: 0, left: 0 });\n const [actualPlacement, setActualPlacement] = useState<string>('bottom');\n\n useEffect(() => {\n if (!targetBounds || !tooltipRef.current || !isVisible) return;\n\n const { position, placement } = calculateTooltipPosition(\n targetBounds,\n tooltipRef.current.getBoundingClientRect(),\n preferredPosition || 'auto',\n );\n\n setTooltipPosition(position);\n setActualPlacement(placement);\n }, [targetBounds, isVisible, preferredPosition]);\n\n return { tooltipRef, tooltipPosition, actualPlacement };\n};\n\n// Arrow keys step through the tour, Escape skips it.\nconst useTutorialKeyboard = ({\n enabled,\n onNext,\n onPrev,\n onSkip,\n}: {\n enabled: boolean;\n onNext: () => void;\n onPrev: () => void;\n onSkip: () => void;\n}) => {\n useEffect(() => {\n if (!enabled) return;\n\n const handleKeyPress = (e: globalThis.KeyboardEvent) => {\n switch (e.key) {\n case 'ArrowLeft':\n onPrev();\n break;\n case 'ArrowRight':\n onNext();\n break;\n case 'Escape':\n onSkip();\n break;\n }\n };\n\n window.addEventListener('keydown', handleKeyPress);\n return () => window.removeEventListener('keydown', handleKeyPress);\n }, [enabled, onNext, onPrev, onSkip]);\n};\n\nexport const useTutorialOverlay = ({\n steps,\n initialStep,\n active,\n allowKeyboardNavigation,\n onComplete,\n onSkip,\n onStepComplete,\n}: {\n steps: TutorialOverlayProps['steps'];\n initialStep: number;\n active: boolean;\n allowKeyboardNavigation: boolean;\n onComplete?: () => void;\n onSkip?: () => void;\n onStepComplete?: (stepId: string) => void;\n}) => {\n const [currentStep, setCurrentStep] = useState(initialStep);\n\n const currentStepData = steps[currentStep];\n const isLastStep = currentStep === steps.length - 1;\n\n const { targetBounds, isVisible } = useTargetBounds({\n active,\n target: currentStepData?.target,\n });\n\n const { tooltipRef, tooltipPosition, actualPlacement } = useTooltipPlacement({\n targetBounds,\n isVisible,\n preferredPosition: currentStepData?.position,\n });\n\n const handleNext = useCallback(() => {\n const currentStepId = steps[currentStep]?.id;\n if (currentStepId) onStepComplete?.(currentStepId);\n\n if (currentStep < steps.length - 1) {\n setCurrentStep(currentStep + 1);\n return;\n }\n\n onComplete?.();\n }, [currentStep, steps, onComplete, onStepComplete]);\n\n const handlePrev = useCallback(() => {\n setCurrentStep((step) => Math.max(step - 1, 0));\n }, []);\n\n const handleSkip = useCallback(() => {\n onSkip?.();\n }, [onSkip]);\n\n const handleRestart = useCallback(() => {\n setCurrentStep(0);\n }, []);\n\n useTutorialKeyboard({\n enabled: allowKeyboardNavigation && active,\n onNext: handleNext,\n onPrev: handlePrev,\n onSkip: handleSkip,\n });\n\n return {\n currentStep,\n currentStepData,\n isLastStep,\n isVisible,\n targetBounds,\n tooltipRef,\n tooltipPosition,\n actualPlacement,\n progress: ((currentStep + 1) / steps.length) * 100,\n handleNext,\n handlePrev,\n handleSkip,\n handleRestart,\n };\n};\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/feedback/StackedModal/StackedModal.parts.tsx"],"sourcesContent":["import ChevronLeftIcon from '@mui/icons-material/ChevronLeft';\nimport CloseIcon from '@mui/icons-material/Close';\nimport Box from '@mui/material/Box/index.js';\nimport CircularProgress from '@mui/material/CircularProgress/index.js';\nimport DialogActions from '@mui/material/DialogActions/index.js';\nimport DialogContent from '@mui/material/DialogContent/index.js';\nimport DialogTitle from '@mui/material/DialogTitle/index.js';\nimport IconButton from '@mui/material/IconButton/index.js';\nimport Skeleton from '@mui/material/Skeleton/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { styled } from '@mui/material/styles/index.js';\nimport type { FC, ReactNode } from 'react';\nimport React from 'react';\nimport { safeAreaBottom } from '../../../utils/viewport';\nimport {\n loadingOverlayStyles,\n modalContentStyles,\n titleLeftStyles,\n titleRightStyles,\n titleStyles,\n} from './StackedModal.styles';\n\nconst StyledDialogTitle = styled(DialogTitle, {\n shouldForwardProp: (prop) => prop !== 'rtl',\n})<{ rtl?: boolean }>(({ theme, rtl }) => titleStyles(theme, rtl));\n\nconst DialogTitleLeft = styled(Box)(({ theme }) => titleLeftStyles(theme));\nconst DialogTitleRight = styled(Box)(({ theme }) => titleRightStyles(theme));\nconst LoadingOverlay = styled(Box)(({ theme }) => loadingOverlayStyles(theme));\n\n/**\n * The padded content wrapper callers put inside a StackedModal. The explicit\n * `typeof DialogContent` annotation keeps its type nameable across package\n * boundaries (TS2742) now that it is re-exported from the barrel.\n */\nexport const StackedModalContent: typeof DialogContent = styled(DialogContent)(({ theme }) =>\n modalContentStyles(theme),\n) as typeof DialogContent;\n\n/** Sub-element test IDs derive from the modal's own, or stay off when it has none. */\nexport const testId = (base: string | undefined, suffix: string): string | undefined =>\n base ? `${base}-${suffix}` : undefined;\n\n/**\n * A wrapper marking the subtree that should render as modal actions — the\n * StackedModal pulls it out of `children` and places it by device.\n */\nexport const StackedModalActions: FC<{ children?: ReactNode }> = ({ children }) => <>{children}</>;\n\n/** Separates the `StackedModalActions` subtree from the rest of the content. */\nconst splitModalChildren = (children: ReactNode): { content: ReactNode; actions: ReactNode } => {\n let actions: ReactNode = null;\n\n React.Children.forEach(children, (child) => {\n if (React.isValidElement<{ children?: ReactNode }>(child) && child.type === StackedModalActions) {\n actions = child.props.children;\n }\n });\n\n const content = React.Children.toArray(children).filter(\n (child) => !(React.isValidElement(child) && child.type === StackedModalActions),\n );\n\n return { content, actions };\n};\n\n/**\n * Works out what renders where: a `StackedModalActions` child wins over the\n * `actions` prop, and on phones those actions move out of the header into a\n * pinned bottom bar.\n */\nexport const resolveModalContent = (\n children: ReactNode,\n actions: ReactNode,\n isMobile: boolean,\n): {\n content: ReactNode;\n modalActions: ReactNode;\n headerActions: ReactNode;\n hasMobileActions: boolean;\n} => {\n const { content, actions: childActions } = splitModalChildren(children);\n const modalActions = childActions ?? actions;\n return {\n content,\n modalActions,\n headerActions: isMobile ? null : modalActions,\n hasMobileActions: Boolean(isMobile && modalActions),\n };\n};\n\n/** The panel's own ARIA ids, unless the caller wired it to its own labels. */\nexport const modalAriaIds = (\n modalId: string,\n ariaLabelledBy?: string,\n ariaDescribedBy?: string,\n): { titleId: string; descId: string } => ({\n titleId: ariaLabelledBy || `modal-title-${modalId}`,\n descId: ariaDescribedBy || `modal-desc-${modalId}`,\n});\n\nexport const ModalLoadingOverlay: FC<{ loadingText?: string; dataTestId?: string }> = ({\n loadingText,\n dataTestId,\n}) => (\n <LoadingOverlay data-testid={testId(dataTestId, 'loading-overlay')}>\n <CircularProgress size={40} data-testid={testId(dataTestId, 'loading-spinner')} />\n {loadingText && (\n <Typography variant=\"body2\" sx={{ mt: 2 }} data-testid={testId(dataTestId, 'loading-text')}>\n {loadingText}\n </Typography>\n )}\n </LoadingOverlay>\n);\n\ninterface ModalHeaderProps {\n titleId: string;\n navigationTitle?: ReactNode;\n /** Deeper than the first panel, so the leading button goes back instead of closing. */\n canGoBack: boolean;\n onBack: () => void;\n /** The back arrow's accessible name — it carries a glyph only. REQUIRED. */\n backLabel: string;\n onClose: () => void;\n /** Renders the bar without its ✕ — the panel's content owns the dismiss. */\n hideClose?: boolean;\n /** Header actions — desktop only; on phones they move to the footer. */\n headerActions?: ReactNode;\n rtl?: boolean;\n dataTestId?: string;\n}\n\n/**\n * The bar's leading control: back at depth ≥2, otherwise close — and nothing at\n * all when the panel's content carries its own ✕ (`hideClose`).\n */\nconst HeaderLeadingButton: FC<\n Pick<\n ModalHeaderProps,\n 'canGoBack' | 'onBack' | 'backLabel' | 'onClose' | 'hideClose' | 'rtl' | 'dataTestId'\n >\n> = ({ canGoBack, onBack, backLabel, onClose, hideClose, rtl, dataTestId }) => {\n if (canGoBack) {\n return (\n <IconButton\n edge=\"start\"\n color=\"inherit\"\n onClick={onBack}\n aria-label={backLabel}\n size=\"small\"\n sx={{ transform: rtl ? 'rotate(180deg)' : 'none' }}\n data-testid={testId(dataTestId, 'back-button')}\n >\n <ChevronLeftIcon />\n </IconButton>\n );\n }\n if (hideClose) return null;\n return (\n <IconButton\n edge=\"start\"\n color=\"inherit\"\n onClick={onClose}\n aria-label=\"close\"\n size=\"small\"\n data-testid={testId(dataTestId, 'close-button')}\n >\n <CloseIcon />\n </IconButton>\n );\n};\n\nexport const ModalHeader: FC<ModalHeaderProps> = ({\n titleId,\n navigationTitle,\n canGoBack,\n onBack,\n onClose,\n hideClose,\n backLabel,\n headerActions,\n rtl,\n dataTestId,\n}) => (\n <StyledDialogTitle id={titleId} rtl={rtl} data-testid={testId(dataTestId, 'header')}>\n <DialogTitleLeft>\n <HeaderLeadingButton\n canGoBack={canGoBack}\n onBack={onBack}\n backLabel={backLabel}\n onClose={onClose}\n hideClose={hideClose}\n rtl={rtl}\n dataTestId={dataTestId}\n />\n {navigationTitle && (\n <Typography\n variant=\"h6\"\n component=\"h2\"\n noWrap\n sx={{ ml: canGoBack || !hideClose ? 1 : 0 }}\n data-testid={testId(dataTestId, 'title')}\n >\n {navigationTitle}\n </Typography>\n )}\n </DialogTitleLeft>\n <DialogTitleRight data-testid={testId(dataTestId, 'header-actions')}>\n {headerActions}\n </DialogTitleRight>\n </StyledDialogTitle>\n);\n\nconst ContentSkeleton: FC = () => (\n <Box sx={{ p: 3 }}>\n <Skeleton variant=\"text\" width=\"60%\" height={32} />\n <Skeleton variant=\"text\" width=\"100%\" />\n <Skeleton variant=\"text\" width=\"100%\" />\n <Skeleton variant=\"rectangular\" height={200} sx={{ mt: 2 }} />\n </Box>\n);\n\ninterface ModalBodyProps {\n descId: string;\n showSkeleton: boolean;\n /** When there is no action bar, the body is what reaches the bottom of the panel. */\n endsPanel: boolean;\n dataTestId?: string;\n children?: ReactNode;\n}\n\nexport const ModalBody: FC<ModalBodyProps> = ({\n descId,\n showSkeleton,\n endsPanel,\n dataTestId,\n children,\n}) => (\n <Box\n id={descId}\n sx={{\n position: 'relative',\n flex: 1,\n overflow: 'auto',\n // iOS momentum scrolling, and no scroll-chaining to the page behind —\n // without `contain`, an overscroll at the end of the list rubber-bands the\n // whole panel and springs back before the last row can be tapped.\n WebkitOverflowScrolling: 'touch',\n overscrollBehavior: 'contain',\n // The content itself ends the panel when there is no action bar, so it has\n // to clear the home indicator on its own.\n ...(endsPanel ? safeAreaBottom(0) : {}),\n }}\n data-testid={testId(dataTestId, 'content')}\n >\n {showSkeleton ? <ContentSkeleton /> : children}\n </Box>\n);\n\n/** The phone-only pinned action bar; on desktop the actions live in the header. */\nexport const ModalFooter: FC<{ dataTestId?: string; children?: ReactNode }> = ({\n dataTestId,\n children,\n}) => (\n <DialogActions\n sx={{\n borderTop: (theme) => `1px solid ${theme.palette.divider}`,\n padding: 2,\n // Never let the action row sit under the iOS home indicator.\n flexShrink: 0,\n ...safeAreaBottom(16),\n }}\n data-testid={testId(dataTestId, 'footer')}\n >\n {children}\n </DialogActions>\n);\n\ninterface PanelContentsProps extends ModalHeaderProps {\n showSkeleton: boolean;\n loadingText?: string;\n descId: string;\n content: ReactNode;\n /** The resolved actions, already placed in the header or destined for the footer. */\n modalActions: ReactNode;\n hasMobileActions: boolean;\n}\n\n/** Everything inside the sliding panel: the loading veil, header, body and action bar. */\nexport const ModalPanelContents: FC<PanelContentsProps> = ({\n showSkeleton,\n loadingText,\n descId,\n content,\n modalActions,\n hasMobileActions,\n ...header\n}) => (\n <>\n {showSkeleton && (\n <ModalLoadingOverlay loadingText={loadingText} dataTestId={header.dataTestId} />\n )}\n <ModalHeader {...header} />\n <ModalBody\n descId={descId}\n showSkeleton={showSkeleton}\n endsPanel={!hasMobileActions}\n dataTestId={header.dataTestId}\n >\n {content}\n </ModalBody>\n {hasMobileActions && (\n <ModalFooter dataTestId={header.dataTestId}>{modalActions}</ModalFooter>\n )}\n </>\n);\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/layout/ScrollArea/ScrollViewport.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport { useTheme } from '@mui/material/styles/index.js';\nimport type { FC, ReactNode, UIEvent } from 'react';\nimport React from 'react';\n\nimport { getOverflowStyle, getVariantStyles } from './ScrollArea.styles';\nimport type { ResolvedScrollAreaProps } from './ScrollArea.helpers';\n\nexport interface ScrollViewportProps\n extends Pick<\n ResolvedScrollAreaProps,\n | 'height'\n | 'maxHeight'\n | 'orientation'\n | 'scrollbarSize'\n | 'scrollbarColor'\n | 'scrollbarTrackColor'\n | 'contentPadding'\n | 'variant'\n | 'disabled'\n | 'loading'\n | 'smoothScroll'\n > {\n /** The scroll region's accessible name. REQUIRED. */\n regionLabel: string;\n children: ReactNode;\n shouldShowScrollbar: boolean;\n setScrollRef: (node: HTMLDivElement | null) => void;\n onScroll: (event: UIEvent<HTMLDivElement>) => void;\n}\n\n// The element that actually scrolls: its own overflow and scrollbar styling,\n// plus the disabled and loading treatments.\nexport const ScrollViewport: FC<ScrollViewportProps> = ({\n regionLabel,\n children,\n height,\n maxHeight,\n orientation,\n scrollbarSize,\n scrollbarColor,\n scrollbarTrackColor,\n contentPadding,\n variant,\n disabled,\n loading,\n smoothScroll,\n shouldShowScrollbar,\n setScrollRef,\n onScroll,\n}) => {\n const theme = useTheme();\n\n return (\n <Box\n ref={setScrollRef}\n onScroll={onScroll}\n role=\"region\"\n aria-label={regionLabel}\n aria-busy={loading}\n tabIndex={disabled ? -1 : 0}\n sx={{\n width: '100%',\n height: '100%',\n // Use an explicit maxHeight when height is 'auto', else inherit.\n maxHeight: height === 'auto' && maxHeight ? maxHeight : '100%',\n padding: contentPadding,\n opacity: loading ? 0.5 : 1,\n pointerEvents: disabled || loading ? 'none' : 'auto',\n transition: 'opacity 0.3s ease',\n '&:focus': {\n outline: 'none',\n '&:focus-visible': {\n outline: `2px solid ${theme.palette.primary.main}`,\n outlineOffset: -2,\n },\n },\n ...getOverflowStyle({ disabled, orientation }),\n ...getVariantStyles({\n theme,\n variant,\n orientation,\n scrollbarSize,\n scrollbarColor,\n scrollbarTrackColor,\n shouldShowScrollbar,\n }),\n }}\n style={{ scrollBehavior: smoothScroll ? 'smooth' : 'auto' }}\n >\n {children}\n </Box>\n );\n};\n"],"mappings":";;;;;;AAAA,OAAO,SAAS;AAChB,SAAS,gBAAgB;AAqDrB;AArBG,IAAM,iBAA0C,CAAC;AAAA,EACtD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,QAAQ,SAAS;AAEvB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,KAAK;AAAA,MACL;AAAA,MACA,MAAK;AAAA,MACL,cAAY;AAAA,MACZ,aAAW;AAAA,MACX,UAAU,WAAW,KAAK;AAAA,MAC1B,IAAI;AAAA,QACF,OAAO;AAAA,QACP,QAAQ;AAAA;AAAA,QAER,WAAW,WAAW,UAAU,YAAY,YAAY;AAAA,QACxD,SAAS;AAAA,QACT,SAAS,UAAU,MAAM;AAAA,QACzB,eAAe,YAAY,UAAU,SAAS;AAAA,QAC9C,YAAY;AAAA,QACZ,WAAW;AAAA,UACT,SAAS;AAAA,UACT,mBAAmB;AAAA,YACjB,SAAS,aAAa,MAAM,QAAQ,QAAQ,IAAI;AAAA,YAChD,eAAe;AAAA,UACjB;AAAA,QACF;AAAA,QACA,GAAG,iBAAiB,EAAE,UAAU,YAAY,CAAC;AAAA,QAC7C,GAAG,iBAAiB;AAAA,UAClB;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AAAA,MACA,OAAO,EAAE,gBAAgB,eAAe,WAAW,OAAO;AAAA,MAEzD;AAAA;AAAA,EACH;AAEJ;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/layout/Drawer/Drawer.tsx"],"sourcesContent":["import Close from '@mui/icons-material/Close';\nimport type { Theme } from '@mui/material/styles/index.js';\nimport Box from '@mui/material/Box/index.js';\nimport MuiDrawer from '@mui/material/Drawer/index.js';\nimport IconButton from '@mui/material/IconButton/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { alpha, useTheme } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport type { DrawerContentProps,DrawerHeaderProps, DrawerProps } from './Drawer.types';\nimport { shadowInk } from '../../../tokens/ink';\n\ntype DrawerAnchor = 'left' | 'right' | 'top' | 'bottom';\n\n// `variant` doubles as a position preset, but an explicit `anchor` always wins.\nconst resolveAnchor = (\n anchor: DrawerProps['anchor'],\n variant: DrawerProps['variant'],\n): DrawerAnchor => {\n if (anchor) return anchor;\n\n // Map variant to anchor position\n switch (variant) {\n case 'right':\n return 'right';\n case 'top':\n return 'top';\n case 'bottom':\n return 'bottom';\n case 'glass':\n return 'right';\n case 'left':\n default:\n return 'left';\n }\n};\n\nconst buildDrawerStyles = (\n theme: Theme,\n anchor: DrawerAnchor,\n variant: DrawerProps['variant'],\n width: DrawerProps['width'],\n height: DrawerProps['height'],\n // Merged LAST into the surface's own rules, so a caller can shape the sliding\n // surface itself (rounded corners on a bottom sheet, a docked panel's offset)\n // without reaching for the MUI paper class from outside. Undefined by default:\n // omit it and the drawer styles exactly as it always has.\n paperSx?: DrawerProps['paperSx'],\n) => {\n const baseStyles = {\n width: ['left', 'right'].includes(anchor) ? width : '100%',\n height: ['top', 'bottom'].includes(anchor) ? height : '100%',\n flexShrink: 0,\n };\n\n if (variant === 'glass') {\n return {\n ...baseStyles,\n '& .MuiDrawer-paper': {\n width,\n height: '100%',\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 boxShadow: `0 8px 32px ${shadowInk(theme, 0.1)}`,\n ...paperSx,\n },\n };\n }\n\n return {\n ...baseStyles,\n '& .MuiDrawer-paper': {\n width: ['left', 'right'].includes(anchor) ? width : '100%',\n height: ['top', 'bottom'].includes(anchor) ? height : '100%',\n boxSizing: 'border-box',\n ...paperSx,\n },\n };\n};\n\nexport const Drawer: React.FC<DrawerProps> = ({\n children,\n open,\n onClose,\n variant = 'left',\n anchor,\n width = 280,\n height = '100%',\n persistent = false,\n backdrop = true,\n hideBackdrop = false,\n keepMounted = false,\n paperSx,\n className,\n dataTestId,\n ...rest\n}) => {\n const theme = useTheme();\n const drawerAnchor = resolveAnchor(anchor, variant);\n\n return (\n <MuiDrawer\n anchor={drawerAnchor}\n open={open}\n onClose={onClose}\n variant={persistent ? 'persistent' : 'temporary'}\n ModalProps={{\n keepMounted,\n hideBackdrop,\n BackdropProps: {\n invisible: !backdrop,\n },\n }}\n sx={buildDrawerStyles(theme, drawerAnchor, variant, width, height, paperSx)}\n className={className}\n data-testid={dataTestId || 'drawer'}\n {...rest}\n >\n {children}\n </MuiDrawer>\n );\n};\n\nexport const DrawerHeader: React.FC<DrawerHeaderProps> = ({\n children,\n onClose,\n showCloseButton = true,\n closeLabel,\n dataTestId,\n}) => {\n const theme = useTheme();\n\n return (\n <Box\n data-testid={dataTestId || 'drawer-header'}\n sx={{\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(2),\n borderBottom: `1px solid ${theme.palette.divider}`,\n minHeight: 64,\n justifyContent: 'space-between',\n }}\n >\n <Box sx={{ flex: 1 }} data-testid={dataTestId ? `${dataTestId}-title` : 'drawer-title'}>\n {typeof children === 'string' ? <Typography variant=\"h6\">{children}</Typography> : children}\n </Box>\n {showCloseButton && onClose && (\n <IconButton\n onClick={onClose}\n edge=\"end\"\n aria-label={closeLabel ?? 'Close drawer'}\n data-testid={dataTestId ? `${dataTestId}-close` : 'drawer-close'}\n >\n <Close />\n </IconButton>\n )}\n </Box>\n );\n};\n\nexport const DrawerContent: React.FC<DrawerContentProps> = ({ children, padding = true, dataTestId }) => {\n const theme = useTheme();\n\n return (\n <Box\n data-testid={dataTestId || 'drawer-content'}\n sx={{\n flex: 1,\n overflow: 'auto',\n padding: padding ? theme.spacing(2) : 0,\n }}\n >\n {children}\n </Box>\n );\n};\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/layout/Collapsible/Collapsible.helpers.ts"],"sourcesContent":["import type { Theme } from '@mui/material/styles/index.js';\n\nimport type { CollapsibleVariant } from './Collapsible.types';\n\n/**\n * `smooth` and `default` share their timing; only `spring` differs, stretching\n * the duration and overshooting past the target before settling.\n */\nexport const transitionSettings = (\n theme: Theme,\n variant: CollapsibleVariant,\n duration: number,\n easing?: string,\n): { duration: number; easing: string } => {\n if (variant === 'spring') {\n return {\n duration: duration * 1.2,\n easing: easing || 'cubic-bezier(0.34, 1.56, 0.64, 1)',\n };\n }\n\n return { duration, easing: easing || theme.transitions.easing.easeInOut };\n};\n\ninterface RegionState {\n open: boolean;\n disabled: boolean;\n dataTestId?: string;\n}\n\n/**\n * Shared by both implementations: a disabled collapsible reads as collapsed to\n * assistive technology whatever its `open` prop says, because it cannot be\n * operated to see the rest.\n */\nexport const regionAttrs = ({ open, disabled, dataTestId }: RegionState) => ({\n 'data-disabled': disabled,\n 'data-testid': dataTestId,\n role: 'region',\n 'aria-expanded': open && !disabled,\n 'aria-hidden': disabled || !open,\n});\n\nexport const dimmedStyles = (disabled: boolean) => ({\n opacity: disabled ? 0.6 : 1,\n pointerEvents: (disabled ? 'none' : 'auto') as 'none' | 'auto',\n});\n\nexport const triggerStyles = (\n theme: Theme,\n { disabled, expanded }: { disabled: boolean; expanded: boolean },\n) => {\n const restingBackground = expanded ? theme.palette.action.selected : 'transparent';\n\n return {\n width: '100%',\n padding: theme.spacing(1, 2),\n border: 'none',\n backgroundColor: restingBackground,\n cursor: disabled ? 'not-allowed' : 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n transition: theme.transitions.create(['background-color', 'opacity'], {\n duration: theme.transitions.duration.short,\n }),\n opacity: disabled ? 0.6 : 1,\n '&:hover': {\n backgroundColor: disabled\n ? 'transparent'\n : expanded\n ? theme.palette.action.selected\n : theme.palette.action.hover,\n },\n '&:focus': {\n outline: `2px solid ${theme.palette.primary.main}`,\n outlineOffset: 2,\n },\n '&:active': {\n backgroundColor: disabled ? 'transparent' : theme.palette.action.focus,\n },\n };\n};\n"],"mappings":";AAQO,IAAM,qBAAqB,CAChC,OACA,SACA,UACA,WACyC;AACzC,MAAI,YAAY,UAAU;AACxB,WAAO;AAAA,MACL,UAAU,WAAW;AAAA,MACrB,QAAQ,UAAU;AAAA,IACpB;AAAA,EACF;AAEA,SAAO,EAAE,UAAU,QAAQ,UAAU,MAAM,YAAY,OAAO,UAAU;AAC1E;AAaO,IAAM,cAAc,CAAC,EAAE,MAAM,UAAU,WAAW,OAAoB;AAAA,EAC3E,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf,MAAM;AAAA,EACN,iBAAiB,QAAQ,CAAC;AAAA,EAC1B,eAAe,YAAY,CAAC;AAC9B;AAEO,IAAM,eAAe,CAAC,cAAuB;AAAA,EAClD,SAAS,WAAW,MAAM;AAAA,EAC1B,eAAgB,WAAW,SAAS;AACtC;AAEO,IAAM,gBAAgB,CAC3B,OACA,EAAE,UAAU,SAAS,MAClB;AACH,QAAM,oBAAoB,WAAW,MAAM,QAAQ,OAAO,WAAW;AAErE,SAAO;AAAA,IACL,OAAO;AAAA,IACP,SAAS,MAAM,QAAQ,GAAG,CAAC;AAAA,IAC3B,QAAQ;AAAA,IACR,iBAAiB;AAAA,IACjB,QAAQ,WAAW,gBAAgB;AAAA,IACnC,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,YAAY,MAAM,YAAY,OAAO,CAAC,oBAAoB,SAAS,GAAG;AAAA,MACpE,UAAU,MAAM,YAAY,SAAS;AAAA,IACvC,CAAC;AAAA,IACD,SAAS,WAAW,MAAM;AAAA,IAC1B,WAAW;AAAA,MACT,iBAAiB,WACb,gBACA,WACE,MAAM,QAAQ,OAAO,WACrB,MAAM,QAAQ,OAAO;AAAA,IAC7B;AAAA,IACA,WAAW;AAAA,MACT,SAAS,aAAa,MAAM,QAAQ,QAAQ,IAAI;AAAA,MAChD,eAAe;AAAA,IACjB;AAAA,IACA,YAAY;AAAA,MACV,iBAAiB,WAAW,gBAAgB,MAAM,QAAQ,OAAO;AAAA,IACnE;AAAA,EACF;AACF;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/layout/Accordion/Accordion.tsx"],"sourcesContent":["import ExpandMoreIcon from '@mui/icons-material/ExpandMore';\nimport MuiAccordion from '@mui/material/Accordion/index.js';\nimport MuiAccordionActions from '@mui/material/AccordionActions/index.js';\nimport MuiAccordionDetails from '@mui/material/AccordionDetails/index.js';\nimport MuiAccordionSummary from '@mui/material/AccordionSummary/index.js';\nimport { alpha, useTheme } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport { accordionVariantStyles } from './Accordion.styles';\nimport type { \n AccordionActionsProps, \n AccordionDetailsProps, \n AccordionProps, \n AccordionSummaryProps} from './Accordion.types';\n\nexport const Accordion: React.FC<AccordionProps> = ({\n children,\n variant = 'default',\n disabled = false,\n defaultExpanded = false,\n expanded,\n onChange,\n sx,\n 'data-testid': testId = 'accordion',\n ...props\n}) => {\n const theme = useTheme();\n\n return (\n <MuiAccordion\n disabled={disabled}\n defaultExpanded={defaultExpanded}\n expanded={expanded}\n onChange={onChange}\n data-testid={testId}\n sx={{\n ...accordionVariantStyles(theme, variant),\n ...sx,\n }}\n {...props}\n >\n {children}\n </MuiAccordion>\n );\n};\n\nexport const AccordionSummary: React.FC<AccordionSummaryProps> = ({\n children,\n expandIcon = <ExpandMoreIcon />,\n disabled = false,\n 'data-testid': testId = 'accordion-summary',\n ...props\n}) => {\n const theme = useTheme();\n\n // Clone expandIcon to add data-testid if it's a valid React element\n const iconWithTestId = React.isValidElement(expandIcon)\n ? React.cloneElement(expandIcon as React.ReactElement<{ 'data-testid'?: string }>, {\n 'data-testid': 'accordion-icon',\n })\n : expandIcon;\n\n return (\n <MuiAccordionSummary\n expandIcon={iconWithTestId}\n disabled={disabled}\n data-testid={testId}\n sx={{\n minHeight: 56,\n '& .MuiAccordionSummary-expandIconWrapper': {\n transition: 'transform 0.3s cubic-bezier(0.4, 0, 0.2, 1)',\n color: theme.palette.text.secondary,\n },\n '& .MuiAccordionSummary-expandIconWrapper.Mui-expanded': {\n transform: 'rotate(180deg)',\n color: theme.palette.primary.main,\n },\n '&:hover': {\n backgroundColor: alpha(theme.palette.action.hover, 0.04),\n '& .MuiAccordionSummary-expandIconWrapper': {\n color: theme.palette.primary.main,\n },\n },\n '&.Mui-focusVisible': {\n outline: `2px solid ${theme.palette.primary.main}`,\n outlineOffset: 2,\n },\n // Enhanced keyboard navigation styles\n '&:focus-visible': {\n outline: `2px solid ${theme.palette.primary.main}`,\n outlineOffset: -2,\n },\n }}\n {...props}\n >\n {children}\n </MuiAccordionSummary>\n );\n};\n\nexport const AccordionDetails: React.FC<AccordionDetailsProps> = ({\n children,\n 'data-testid': testId = 'accordion-details',\n ...props\n}) => {\n const theme = useTheme();\n\n return (\n <MuiAccordionDetails \n data-testid={testId}\n sx={{\n paddingTop: theme.spacing(1),\n paddingBottom: theme.spacing(2),\n borderTop: `1px solid ${alpha(theme.palette.divider, 0.08)}`,\n // Smooth content reveal animation\n '& > *': {\n animation: 'fadeInUp 0.4s ease-out',\n },\n '@keyframes fadeInUp': {\n '0%': {\n opacity: 0,\n transform: 'translateY(8px)',\n },\n '100%': {\n opacity: 1,\n transform: 'translateY(0)',\n },\n },\n }}\n {...props}\n >\n {children}\n </MuiAccordionDetails>\n );\n};\n\nexport const AccordionActions: React.FC<AccordionActionsProps> = ({\n children,\n disableSpacing = false,\n 'data-testid': testId = 'accordion-actions',\n ...props\n}) => {\n const theme = useTheme();\n\n return (\n <MuiAccordionActions \n disableSpacing={disableSpacing}\n data-testid={testId}\n sx={{\n padding: theme.spacing(1, 2),\n borderTop: `1px solid ${alpha(theme.palette.divider, 0.08)}`,\n backgroundColor: alpha(theme.palette.background.paper, 0.5),\n backdropFilter: 'blur(8px)',\n // Animate button entries\n '& > *': {\n transition: 'all 0.2s ease-in-out',\n '&:hover': {\n transform: 'translateY(-1px)',\n },\n },\n }}\n {...props}\n >\n {children}\n </MuiAccordionActions>\n );\n};"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/navigation/CommandPalette/CommandPalette.tsx"],"sourcesContent":["import CloseIcon from '@mui/icons-material/Close';\nimport EnterIcon from '@mui/icons-material/KeyboardReturn';\nimport SearchIcon from '@mui/icons-material/Search';\nimport Box from '@mui/material/Box/index.js';\nimport Dialog from '@mui/material/Dialog/index.js';\nimport DialogContent from '@mui/material/DialogContent/index.js';\nimport IconButton from '@mui/material/IconButton/index.js';\nimport InputBase from '@mui/material/InputBase/index.js';\nimport Paper from '@mui/material/Paper/index.js';\nimport Slide from '@mui/material/Slide/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { alpha, styled, useTheme } from '@mui/material/styles/index.js';\nimport type { TransitionProps } from '@mui/material/transitions/index.js';\nimport type { FC} from 'react';\nimport React, { } from 'react';\n\nimport { useCommandPalette } from './CommandPalette.hooks';\nimport { PaletteResults } from './CommandPaletteResults';\nimport { ShortcutChip } from './ShortcutChip';\nimport type { CommandPaletteProps } from './CommandPalette.types';\nimport type { CommandPaletteCopy } from '../../../copy';\nimport { scrim } from '../../../tokens/ink';\nimport { rem, sxRem } from '../../../tokens/relative';\n\n// Styled components\nconst StyledDialog = styled(Dialog)(({ theme }) => ({\n '& .MuiBackdrop-root': {\n backgroundColor: scrim(theme, 0.6),\n backdropFilter: 'blur(4px)' },\n '& .MuiDialog-paper': {\n position: 'fixed',\n top: '20%',\n margin: 0,\n maxHeight: 'none',\n background: 'transparent',\n boxShadow: 'none',\n overflow: 'visible' } }));\n\nconst PaletteContainer = styled(Paper)(({ theme }) => ({\n width: '100%',\n maxWidth: 640,\n background: `linear-gradient(135deg, ${alpha(theme.palette.background.paper, 0.98)} 0%, ${alpha(theme.palette.background.paper, 0.95)} 100%)`,\n backdropFilter: 'blur(20px)',\n WebkitBackdropFilter: 'blur(20px)',\n border: `1px solid ${alpha(theme.palette.divider, 0.18)}`,\n borderRadius: theme.shape.borderRadius * 2,\n overflow: 'hidden',\n boxShadow: theme.shadows[24] }));\n\nconst SearchContainer = styled(Box)(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n padding: theme.spacing(2),\n borderBottom: `1px solid ${alpha(theme.palette.divider, 0.12)}`,\n background: alpha(theme.palette.background.default, 0.4) }));\n\nconst SearchInput = styled(InputBase)(({ theme }) => ({\n flex: 1,\n fontSize: rem(theme, 18),\n fontWeight: 400,\n '& input': {\n padding: theme.spacing(0, 1),\n '&::placeholder': {\n color: theme.palette.text.secondary,\n opacity: 0.8 } } }));\n\nconst Transition = React.forwardRef<unknown, TransitionProps & { children: React.ReactElement }>(\n function Transition(props, ref) {\n return <Slide direction=\"down\" ref={ref} {...props} />;\n },\n);\n\n// Main component\nconst PaletteSearch: React.FC<{\n inputRef: React.Ref<HTMLInputElement>;\n placeholder?: string;\n value: string;\n dataTestId?: string;\n onChange: (event: React.ChangeEvent<HTMLInputElement>) => void;\n onClose: () => void;\n}> = ({ inputRef, placeholder, value, dataTestId, onChange, onClose }) => (\n <SearchContainer>\n <SearchIcon sx={{ color: 'text.secondary', mr: 1 }} />\n <SearchInput\n ref={inputRef}\n placeholder={placeholder}\n value={value}\n onChange={onChange}\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck=\"false\"\n inputProps={{ 'data-testid': `${dataTestId}-input` }}\n />\n <IconButton size=\"small\" onClick={onClose} sx={{ ml: 1 }}>\n <CloseIcon fontSize=\"small\" />\n </IconButton>\n </SearchContainer>\n);\n\nconst PaletteFooter: React.FC<{ commandCount: number; copy: CommandPaletteCopy }> = ({\n commandCount,\n copy,\n}) => {\n const theme = useTheme();\n\n return (\n <Box\n sx={{\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: 1,\n borderTop: `1px solid ${alpha(theme.palette.divider, 0.12)}`,\n background: alpha(theme.palette.background.default, 0.4) }}\n >\n <Box sx={{ display: 'flex', gap: 1 }}>\n <ShortcutChip\n icon={<EnterIcon sx={{ fontSize: sxRem(12) }} />}\n label={copy.execute}\n size=\"small\"\n />\n <ShortcutChip label={copy.navigate} size=\"small\" />\n <ShortcutChip label={copy.close} size=\"small\" />\n </Box>\n <Typography variant=\"caption\" color=\"text.secondary\">\n {commandCount} commands\n </Typography>\n </Box>\n );\n};\n\nexport const CommandPalette: FC<CommandPaletteProps> = ({\n copy,\n open,\n onClose,\n commands,\n placeholder = 'Type a command or search...',\n width = '640px',\n maxHeight = '400px',\n showRecent = true,\n recentCommands = [],\n onCommandExecute,\n dataTestId = 'command-palette' }) => {\n const {\n searchQuery,\n setSearchQuery,\n selectedIndex,\n setSelectedIndex,\n searchInputRef,\n listRef,\n filteredCommands,\n groupedCommands,\n executeCommand,\n recentCommandIds } = useCommandPalette({\n open,\n commands,\n showRecent,\n recentCommands,\n onCommandExecute,\n onClose });\n\n const handleSearchChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n setSearchQuery(event.target.value);\n };\n\n return (\n <StyledDialog\n open={open}\n onClose={onClose}\n TransitionComponent={Transition}\n maxWidth={false}\n fullWidth\n data-testid={dataTestId}\n >\n <DialogContent sx={{ overflow: 'visible', p: 0 }}>\n <PaletteContainer elevation={24} sx={{ width, maxHeight }}>\n <PaletteSearch\n inputRef={searchInputRef}\n placeholder={placeholder}\n value={searchQuery}\n dataTestId={dataTestId}\n onChange={handleSearchChange}\n onClose={onClose}\n />\n\n <PaletteResults\n copy={copy}\n listRef={listRef}\n dataTestId={dataTestId}\n searchQuery={searchQuery}\n showRecent={showRecent}\n commands={commands}\n recentCommandIds={recentCommandIds}\n filteredCommands={filteredCommands}\n groupedCommands={groupedCommands}\n selectedIndex={selectedIndex}\n onSelect={setSelectedIndex}\n onExecute={executeCommand}\n />\n\n <PaletteFooter copy={copy} commandCount={filteredCommands.length} />\n </PaletteContainer>\n </DialogContent>\n </StyledDialog>\n );\n};\n\n// Export default\nexport default CommandPalette;\n"],"mappings":"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","names":["Transition"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/navigation/DropdownMenu/DropdownMenu.tsx"],"sourcesContent":["import ChevronRight from '@mui/icons-material/ChevronRight';\nimport MoreVert from '@mui/icons-material/MoreVert';\nimport Box from '@mui/material/Box/index.js';\nimport Divider from '@mui/material/Divider/index.js';\nimport ListItemIcon from '@mui/material/ListItemIcon/index.js';\nimport ListItemText from '@mui/material/ListItemText/index.js';\nimport Menu from '@mui/material/Menu/index.js';\nimport MenuItem from '@mui/material/MenuItem/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { alpha, styled } from '@mui/material/styles/index.js';\nimport type { CSSObject, Theme } from '@mui/material/styles/index.js';\nimport React, { cloneElement, isValidElement,useRef, useState } from 'react';\n\nimport type { DropdownMenuItem,DropdownMenuProps } from './DropdownMenu.types';\nimport { modeInk, shadowInk, sheen } from '../../../tokens/ink';\nimport { rem } from '../../../tokens/relative';\n\n// Resolves every light/dark decision once. The inline version repeated\n// `theme.palette.mode === 'dark' ? … : …` nine times, and two of those had the\n// SAME expression on both branches (background.paper, and common.white for the\n// inset highlight) — so they read as mode-dependent while never varying.\nconst glassTokens = (theme: Theme) => {\n const isDark = theme.palette.mode === 'dark';\n\n return {\n edge: modeInk(theme),\n dropShadowAlpha: isDark ? 0.4 : 0.12,\n insetHighlightAlpha: isDark ? 0.2 : 0.8,\n sheenAlpha: isDark ? 0.1 : 0.8,\n };\n};\n\nconst glassMenuStyles = (theme: Theme): CSSObject => {\n const { edge, dropShadowAlpha, insetHighlightAlpha, sheenAlpha } = glassTokens(theme);\n\n return {\n backgroundColor: alpha(theme.palette.background.paper, 0.75),\n backdropFilter: 'blur(24px) saturate(1.8)',\n WebkitBackdropFilter: 'blur(24px) saturate(1.8)', // Safari support\n border: `1px solid ${alpha(edge, 0.12)}`,\n boxShadow: [\n `0 8px 32px ${shadowInk(theme, dropShadowAlpha)}`,\n `0 0 0 1px ${alpha(edge, 0.05)}`,\n `inset 0 1px 0 ${sheen(theme, insetHighlightAlpha)}`,\n ].join(', '),\n // Enhanced glass morphism with subtle gradient overlay\n '&::before': {\n content: '\"\"',\n position: 'absolute',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n background: `linear-gradient(135deg, ${sheen(theme, sheenAlpha)} 0%, transparent 50%)`,\n borderRadius: 'inherit',\n pointerEvents: 'none',\n zIndex: 1,\n },\n // Ensure content appears above the overlay\n '& .MuiList-root': {\n position: 'relative',\n zIndex: 2,\n },\n };\n};\n\nconst StyledMenu = styled(Menu, {\n shouldForwardProp: (prop) => prop !== 'customVariant' && prop !== 'size',\n})<{ customVariant?: string; size?: string }>(({ theme, customVariant, size }) => ({\n '& .MuiPaper-root': {\n minWidth: 180,\n borderRadius: theme.spacing(1),\n\n ...(customVariant === 'glass' && glassMenuStyles(theme)),\n\n ...(customVariant === 'minimal' && {\n boxShadow: `0 2px 8px ${shadowInk(theme, 0.08)}`,\n border: `1px solid ${theme.palette.divider}`,\n }),\n\n ...(size === 'sm' && {\n '& .MuiMenuItem-root': {\n fontSize: rem(theme, 14),\n minHeight: 32,\n padding: theme.spacing(0.75, 2),\n },\n }),\n\n ...(size === 'lg' && {\n '& .MuiMenuItem-root': {\n fontSize: rem(theme, 18),\n minHeight: 48,\n padding: theme.spacing(1.5, 3),\n },\n }),\n },\n}));\n\nconst StyledMenuItem = styled(MenuItem, {\n shouldForwardProp: (prop) => !['color', 'showIconSpace'].includes(prop as string),\n})<{ color?: string; showIconSpace?: boolean }>(({ theme, color, showIconSpace }) => ({\n borderRadius: theme.spacing(0.5),\n margin: theme.spacing(0.5, 1),\n transition: 'all 0.2s ease',\n\n ...(showIconSpace && {\n paddingLeft: theme.spacing(5),\n }),\n\n '&:hover': {\n backgroundColor: alpha(theme.palette.primary.main, 0.08),\n },\n\n ...(color &&\n color !== 'default' && {\n color:\n theme.palette[color as 'primary' | 'secondary' | 'error' | 'warning' | 'info' | 'success']\n ?.main || theme.palette.text.primary,\n '& .MuiListItemIcon-root': {\n color:\n theme.palette[color as 'primary' | 'secondary' | 'error' | 'warning' | 'info' | 'success']\n ?.main || theme.palette.text.primary,\n },\n '&:hover': {\n backgroundColor: alpha(\n theme.palette[color as 'primary' | 'secondary' | 'error' | 'warning' | 'info' | 'success']\n ?.main || theme.palette.primary.main,\n 0.08,\n ),\n },\n }),\n}));\n\nconst MenuHeader = styled(Typography)(({ theme }) => ({\n padding: theme.spacing(1, 2),\n fontSize: rem(theme, 12),\n fontWeight: 600,\n textTransform: 'uppercase',\n color: theme.palette.text.secondary,\n letterSpacing: 0.5,\n}));\n\nconst ShortcutText = styled(Typography)(({ theme }) => ({\n fontSize: rem(theme, 12),\n color: theme.palette.text.secondary,\n marginLeft: 'auto',\n paddingLeft: theme.spacing(2),\n}));\n\nconst renderMenuItem = (\n item: DropdownMenuItem,\n handleItemClick: (item: DropdownMenuItem) => void,\n showIconSpace?: boolean,\n size?: string,\n) => {\n if (item.type === 'divider') {\n return <Divider key={item.id} sx={{ my: 0.5 }} />;\n }\n\n if (item.type === 'header') {\n return <MenuHeader key={item.id}>{item.label}</MenuHeader>;\n }\n\n if (item.component) {\n return (\n <Box key={item.id} sx={{ px: 2, py: 1 }}>\n {item.component}\n </Box>\n );\n }\n\n return renderLeafMenuItem(item, handleItemClick, showIconSpace, size);\n};\n\nconst renderLeafMenuItem = (\n item: DropdownMenuItem,\n handleItemClick: (item: DropdownMenuItem) => void,\n showIconSpace?: boolean,\n size?: string,\n) => {\n const hasIcon = !!item.icon;\n const hasChildren = item.children && item.children.length > 0;\n\n return (\n <StyledMenuItem\n key={item.id}\n disabled={item.disabled}\n onClick={!item.disabled ? () => handleItemClick(item) : undefined} // ← change\n color={item.color}\n showIconSpace={showIconSpace && !hasIcon}\n data-testid={item.dataTestId}\n >\n {hasIcon && (\n <ListItemIcon sx={{ minWidth: size === 'sm' ? 32 : 40 }}>{item.icon}</ListItemIcon>\n )}\n <ListItemText primary={item.label} />\n {item.shortcut && <ShortcutText variant=\"caption\">{item.shortcut}</ShortcutText>}\n {hasChildren && item.showChevron !== false && (\n <ChevronRight fontSize=\"small\" sx={{ ml: 1, opacity: 0.5 }} />\n )}\n </StyledMenuItem>\n );\n};\n\n// Open state and anchor are each either caller-supplied or ours. Resolving both\n// here keeps those four branches out of the render body.\nconst resolveMenuState = (\n controlledOpen: boolean | undefined,\n internalOpen: boolean,\n providedAnchorEl: DropdownMenuProps['anchorEl'],\n anchorRef: React.RefObject<HTMLElement | null>,\n) => {\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : internalOpen;\n const anchorEl = providedAnchorEl || anchorRef.current;\n\n return { isControlled, open, anchorEl, isOpen: Boolean(anchorEl) && open };\n};\n\n// Open/close state is either ours or the caller's; every handler has to respect\n// that, so they are grouped here rather than repeating the isControlled check\n// inline four times in the render.\nconst useDropdownHandlers = ({\n isControlled,\n open,\n setInternalOpen,\n onOpen,\n onClose,\n closeOnItemClick,\n anchorRef,\n}: {\n isControlled: boolean;\n open: boolean;\n setInternalOpen: (value: boolean) => void;\n onOpen?: () => void;\n onClose?: () => void;\n closeOnItemClick?: boolean;\n anchorRef: React.RefObject<HTMLElement | null>;\n}) => {\n const handleOpen = () => {\n if (!isControlled) {\n setInternalOpen(true);\n }\n onOpen?.();\n };\n\n const handleClose = () => {\n if (!isControlled) {\n setInternalOpen(false);\n }\n onClose?.();\n };\n\n const handleItemClick = (item: DropdownMenuItem) => {\n item.onClick?.();\n if (closeOnItemClick && !item.children?.length) {\n handleClose();\n }\n };\n\n const handleTriggerClick = (event: React.MouseEvent<HTMLElement>) => {\n if (isControlled) return;\n\n if (open) {\n handleClose();\n return;\n }\n\n (anchorRef as React.MutableRefObject<HTMLElement>).current = event.currentTarget;\n handleOpen();\n };\n\n return { handleClose, handleItemClick, handleTriggerClick };\n};\n\n// The trigger is either a caller-supplied element we clone to attach our click\n// handler and ref, arbitrary children we wrap, or the default kebab icon.\nconst DropdownTrigger: React.FC<{\n trigger: DropdownMenuProps['trigger'];\n anchorRef: React.RefObject<HTMLElement | null>;\n onTriggerClick: (event: React.MouseEvent<HTMLElement>) => void;\n}> = ({ trigger, anchorRef, onTriggerClick }) => {\n if (isValidElement(trigger)) {\n return cloneElement(\n trigger as React.ReactElement<{\n onClick?: (event: React.MouseEvent<HTMLElement>) => void;\n ref?: React.Ref<HTMLElement>;\n }>,\n { onClick: onTriggerClick, ref: anchorRef },\n );\n }\n\n if (trigger) {\n return (\n <Box ref={anchorRef} onClick={onTriggerClick}>\n {trigger}\n </Box>\n );\n }\n\n return (\n <Box\n ref={anchorRef}\n onClick={onTriggerClick}\n sx={{ cursor: 'pointer', display: 'inline-flex' }}\n >\n <MoreVert />\n </Box>\n );\n};\n\nexport const DropdownMenu = React.forwardRef<HTMLDivElement, DropdownMenuProps>(\n (\n {\n variant = 'default',\n items,\n trigger,\n open: controlledOpen,\n onOpen,\n onClose,\n size = 'md',\n maxHeight = 400,\n minWidth = 180,\n closeOnItemClick = true,\n showIconSpace = false,\n anchorEl: providedAnchorEl,\n ...menuProps\n },\n ref,\n ) => {\n const [internalOpen, setInternalOpen] = useState(false);\n const anchorRef = useRef<HTMLElement>(null);\n\n const { isControlled, open, anchorEl, isOpen } = resolveMenuState(\n controlledOpen,\n internalOpen,\n providedAnchorEl,\n anchorRef,\n );\n\n const { handleClose, handleItemClick, handleTriggerClick } = useDropdownHandlers({\n isControlled,\n open,\n setInternalOpen,\n onOpen,\n onClose,\n closeOnItemClick,\n anchorRef,\n });\n\n const triggerElement = (\n <DropdownTrigger trigger={trigger} anchorRef={anchorRef} onTriggerClick={handleTriggerClick} />\n );\n\n return (\n <>\n {trigger !== undefined && triggerElement}\n <StyledMenu\n ref={ref}\n anchorEl={anchorEl}\n open={isOpen}\n onClose={handleClose}\n customVariant={variant}\n size={size}\n PaperProps={{\n sx: {\n maxHeight,\n minWidth,\n overflow: 'auto',\n },\n }}\n transformOrigin={{ horizontal: 'left', vertical: 'top' }}\n anchorOrigin={{ horizontal: 'left', vertical: 'bottom' }}\n {...menuProps}\n >\n {items.map((item) => renderMenuItem(item, handleItemClick, showIconSpace, size))}\n </StyledMenu>\n </>\n );\n },\n);\n\nDropdownMenu.displayName = 'DropdownMenu';\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/layout/SettingsLayout/SettingsLayout.tsx"],"sourcesContent":["'use client';\n\nimport Box from '@mui/material/Box/index.js';\nimport type { Theme } from '@mui/material/styles/index.js';\nimport React, { useMemo, useState } from 'react';\n\nimport { withDefaults } from '../../../utils/withDefaults';\nimport { activeItemLabel, filterGroups } from './SettingsLayout.filters';\nimport { SettingsRail } from './SettingsLayout.rail';\nimport { atLeastRail } from './SettingsLayout.styles';\nimport { SettingsPanel } from './SettingsPanel';\nimport type { SettingsLayoutProps } from './SettingsLayout.types';\n\n/**\n * The props with every default already applied.\n *\n * A table through `withDefaults` rather than a `= default` per destructured\n * prop: each of those is a branch, and seven of them put the component over the\n * complexity bar before it renders anything. The single cast is what buys the\n * body non-optional values — without it every use site would restate the\n * default as a `??`, which is the same default written twice and free to drift.\n */\ntype ResolvedProps = SettingsLayoutProps &\n Required<\n Pick<\n SettingsLayoutProps,\n | 'searchPlaceholder'\n | 'defaultQuery'\n | 'emptySearchLabel'\n | 'testIdPrefix'\n | 'railBreakpoint'\n | 'navVariant'\n | 'atIndex'\n | 'backLabel'\n >\n >;\n\nconst DEFAULTS = {\n searchPlaceholder: 'Search settings',\n defaultQuery: '',\n emptySearchLabel: 'No settings match your search.',\n testIdPrefix: 'settings',\n railBreakpoint: 'md',\n navVariant: 'switcher',\n atIndex: false,\n backLabel: 'Back',\n} satisfies Partial<SettingsLayoutProps>;\n\n/** Stacked below the rail's breakpoint, two columns at and above it. */\nfunction shellSx(breakpoint: SettingsLayoutProps['railBreakpoint'], fillHeight: boolean) {\n return (theme: Theme) => ({\n display: 'flex',\n flexDirection: 'column' as const,\n alignItems: 'stretch',\n gap: 1.5,\n width: '100%',\n minWidth: 0,\n // Only ever at the wide shape. Narrow, the rail is a disclosure or the page\n // itself, and two independent scrollbars on a phone is a trap rather than a\n // convenience.\n [atLeastRail(theme, breakpoint ?? 'md')]: {\n flexDirection: 'row',\n gap: 3,\n ...(fillHeight ? { height: '100%', minHeight: 0 } : {}),\n },\n });\n}\n\n/**\n * A reusable, agnostic Facebook-style settings shell: a searchable left rail of\n * grouped categories/subcategories and a central panel that renders the selected\n * configuration screen (`children`). Navigation is data-driven via `groups`; the\n * host owns routing (pass `linkComponent` + item `href`, or handle `onSelectItem`).\n *\n * ## Two narrow-width shapes\n *\n * `navVariant=\"switcher\"` (the default) folds the rail into a disclosure above\n * the panel. `navVariant=\"drilldown\"` gives the phone shape instead: at the\n * area's index the LIST is the page, and inside a section the panel is the page\n * with a back link and a scrollable strip of sibling sections above it.\n *\n * ## Why the width decision is CSS and not JavaScript\n *\n * Every part that changes between the two shapes does it through a `display`\n * pair keyed on `railBreakpoint`. Nothing here asks a media query in JS and\n * renders one branch.\n *\n * That is not a performance preference. A layout that RENDERS one navigation and\n * not the other can offer the narrow width less than the wide one, and no test\n * or review catches it — the missing control simply is not in the tree to be\n * asserted about. With both forms always mounted, \"the narrow width reaches\n * everything the wide one does\" holds by construction, and an audit that counts\n * controls per width gets the same answer at both.\n */\nexport const SettingsLayout: React.FC<SettingsLayoutProps> = (props) => {\n const {\n title,\n groups,\n activeItemId,\n onSelectItem,\n searchPlaceholder,\n defaultQuery,\n emptySearchLabel,\n emptySearchAction,\n linkComponent,\n children,\n testIdPrefix,\n railBreakpoint,\n fillHeight = false,\n navVariant,\n atIndex,\n indexHref,\n backLabel,\n sectionChips,\n } = withDefaults(props, DEFAULTS) as ResolvedProps;\n const [query, setQuery] = useState(defaultQuery);\n const [navOpen, setNavOpen] = useState(false);\n const filteredGroups = useMemo(() => filterGroups(groups, query), [groups, query]);\n const activeLabel = useMemo(() => activeItemLabel(groups, activeItemId), [groups, activeItemId]);\n\n const drilldown = navVariant === 'drilldown';\n const ariaLabel = typeof title === 'string' ? title : 'Settings';\n\n return (\n <Box\n data-testid={testIdPrefix}\n data-nav-variant={navVariant}\n data-at-index={atIndex ? 'true' : 'false'}\n sx={shellSx(railBreakpoint, fillHeight)}\n >\n <SettingsRail\n title={title}\n activeLabel={activeLabel}\n navOpen={navOpen}\n onToggleNav={() => setNavOpen((open) => !open)}\n query={query}\n onQueryChange={setQuery}\n searchPlaceholder={searchPlaceholder}\n emptySearchLabel={emptySearchLabel}\n emptySearchAction={emptySearchAction}\n filteredGroups={filteredGroups}\n activeItemId={activeItemId}\n linkComponent={linkComponent}\n onSelectItem={onSelectItem}\n onNavigate={() => setNavOpen(false)}\n testIdPrefix={testIdPrefix}\n variant={navVariant}\n breakpoint={railBreakpoint}\n atIndex={atIndex}\n fillHeight={fillHeight}\n />\n\n <SettingsPanel\n inSection={drilldown && !atIndex}\n hideOnNarrow={drilldown && atIndex}\n breakpoint={railBreakpoint}\n indexHref={indexHref}\n sectionTitle={props.sectionTitle}\n sectionDescription={props.sectionDescription}\n backLabel={backLabel}\n ariaLabel={ariaLabel}\n sectionChips={sectionChips}\n activeItemId={activeItemId}\n linkComponent={linkComponent}\n onSelectItem={onSelectItem}\n testIdPrefix={testIdPrefix}\n fillHeight={fillHeight}\n >\n {children}\n </SettingsPanel>\n </Box>\n );\n};\n\nSettingsLayout.displayName = 'SettingsLayout';\n"],"mappings":";;;;;;;;;;;;;;;;;;AAEA,OAAO,SAAS;AAEhB,SAAgB,SAAS,gBAAgB;AAwHrC,SAME,KANF;AAvFJ,IAAM,WAAW;AAAA,EACf,mBAAmB;AAAA,EACnB,cAAc;AAAA,EACd,kBAAkB;AAAA,EAClB,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,WAAW;AACb;AAGA,SAAS,QAAQ,YAAmD,YAAqB;AACvF,SAAO,CAAC,WAAkB;AAAA,IACxB,SAAS;AAAA,IACT,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,KAAK;AAAA,IACL,OAAO;AAAA,IACP,UAAU;AAAA;AAAA;AAAA;AAAA,IAIV,CAAC,YAAY,OAAO,cAAc,IAAI,CAAC,GAAG;AAAA,MACxC,eAAe;AAAA,MACf,KAAK;AAAA,MACL,GAAI,aAAa,EAAE,QAAQ,QAAQ,WAAW,EAAE,IAAI,CAAC;AAAA,IACvD;AAAA,EACF;AACF;AA4BO,IAAM,iBAAgD,CAAC,UAAU;AACtE,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,IAAI,aAAa,OAAO,QAAQ;AAChC,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,YAAY;AAC/C,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,KAAK;AAC5C,QAAM,iBAAiB,QAAQ,MAAM,aAAa,QAAQ,KAAK,GAAG,CAAC,QAAQ,KAAK,CAAC;AACjF,QAAM,cAAc,QAAQ,MAAM,gBAAgB,QAAQ,YAAY,GAAG,CAAC,QAAQ,YAAY,CAAC;AAE/F,QAAM,YAAY,eAAe;AACjC,QAAM,YAAY,OAAO,UAAU,WAAW,QAAQ;AAEtD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAa;AAAA,MACb,oBAAkB;AAAA,MAClB,iBAAe,UAAU,SAAS;AAAA,MAClC,IAAI,QAAQ,gBAAgB,UAAU;AAAA,MAEtC;AAAA;AAAA,UAAC;AAAA;AAAA,YACC;AAAA,YACA;AAAA,YACA;AAAA,YACA,aAAa,MAAM,WAAW,CAAC,SAAS,CAAC,IAAI;AAAA,YAC7C;AAAA,YACA,eAAe;AAAA,YACf;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA,YAAY,MAAM,WAAW,KAAK;AAAA,YAClC;AAAA,YACA,SAAS;AAAA,YACT,YAAY;AAAA,YACZ;AAAA,YACA;AAAA;AAAA,QACF;AAAA,QAEA;AAAA,UAAC;AAAA;AAAA,YACC,WAAW,aAAa,CAAC;AAAA,YACzB,cAAc,aAAa;AAAA,YAC3B,YAAY;AAAA,YACZ;AAAA,YACA,cAAc,MAAM;AAAA,YACpB,oBAAoB,MAAM;AAAA,YAC1B;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YAEC;AAAA;AAAA,QACH;AAAA;AAAA;AAAA,EACF;AAEJ;AAEA,eAAe,cAAc;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/typography/Text/Text.tsx"],"sourcesContent":["'use client';\n\nimport type { CSSObject, Theme } from '@mui/material/styles/index.js';\nimport Typography from '@mui/material/Typography/index.js';\nimport { alpha, styled } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport {\n CAPTION_FONT_SIZE,\n CAPTION_LETTER_SPACING_EM,\n CAPTION_OPACITY,\n CODE_BACKGROUND_ALPHA,\n CODE_BORDER_ALPHA,\n CODE_FONT_SIZE,\n CODE_PADDING,\n CODE_RADIUS_FACTOR,\n HEADING_DEFAULT_WEIGHT,\n HEADING_LETTER_SPACING_EM,\n TEXT_SIZES,\n TEXT_WEIGHTS,\n} from './Text.metrics';\nimport type { TextProps } from './Text.types';\nimport { resolveTestId, withoutTestIdProps } from '../../../platform/test-id';\nimport type { ColorValue } from '../../../tokens/scales';\nimport { rem } from '../../../tokens/relative';\nimport type { UiTypeStep } from '../../../tokens/theme';\n\nconst getColorFromTheme = (theme: Theme, color: ColorValue): string => {\n if (color === 'neutral') {\n return theme.palette.text.primary;\n }\n\n if (color === 'secondary') {\n return theme.palette.text.secondary;\n }\n\n // Exhaustive over ColorValue on purpose. It was a partial `Record<string, …>`\n // with a silent `|| text.primary` fallback, so `info` — accepted by the type\n // — rendered as ordinary body text. Typing the key means a colour added to\n // the vocabulary cannot reach here without a home.\n const colorMap: Record<Exclude<ColorValue, 'neutral' | 'secondary'>, string> = {\n primary: theme.palette.primary.main,\n success: theme.palette.success.main,\n warning: theme.palette.warning.main,\n info: theme.palette.info.main,\n danger: theme.palette.error.main,\n };\n\n return colorMap[color];\n};\n\n// Derived from the shared metrics, not restated: the native `Text` reads the\n// same table, so the two renderers cannot disagree on a size.\n// The table keeps the design px; the size is converted where it is read.\nconst SIZE_MAP: Readonly<Record<string, UiTypeStep | undefined>> = TEXT_SIZES;\n\nconst fontSizeFor = (theme: Theme, customSize: string | undefined): string | undefined => {\n const drawnAt = SIZE_MAP[customSize ?? 'md']?.fontSize;\n return drawnAt === undefined ? undefined : rem(theme, drawnAt);\n};\n\nconst WEIGHT_MAP: Record<string, number> = TEXT_WEIGHTS;\n\ninterface TextStyleArgs {\n theme: Theme;\n customVariant?: string;\n customColor?: ColorValue;\n customSize?: string;\n customWeight?: string;\n italic?: boolean;\n underline?: boolean;\n strikethrough?: boolean;\n}\n\n// underline and strikethrough combine into one declaration rather than one\n// winning over the other.\nconst decorationFor = (underline?: boolean, strikethrough?: boolean): string =>\n [underline && 'underline', strikethrough && 'line-through'].filter(Boolean).join(' ') || 'none';\n\nconst baseTextStyles = (theme: Theme, a: TextStyleArgs): CSSObject => ({\n color: getColorFromTheme(theme, a.customColor ?? 'neutral'),\n fontSize: fontSizeFor(theme, a.customSize),\n lineHeight: SIZE_MAP[a.customSize ?? 'md']?.lineHeight,\n fontWeight: WEIGHT_MAP[a.customWeight ?? 'normal'],\n fontStyle: a.italic ? 'italic' : 'normal',\n textDecoration: decorationFor(a.underline, a.strikethrough),\n transition: 'all 0.2s ease',\n});\n\n// Captions and code shrink relative to the body scale, but only at the default\n// size — an explicit size wins.\nconst sizeOverride = (\n theme: Theme,\n customSize: string | undefined,\n atDefault: number,\n): string | undefined =>\n (customSize ?? 'md') === 'md' ? rem(theme, atDefault) : fontSizeFor(theme, customSize);\n\nconst textVariantStyles = (theme: Theme, a: TextStyleArgs, base: CSSObject): CSSObject => {\n const weight = a.customWeight ?? 'normal';\n\n switch (a.customVariant) {\n case 'heading':\n return {\n ...base,\n fontFamily: theme.typography.h4.fontFamily,\n fontWeight: weight === 'normal' ? HEADING_DEFAULT_WEIGHT : WEIGHT_MAP[weight],\n letterSpacing: `${HEADING_LETTER_SPACING_EM}em`,\n };\n case 'caption':\n return {\n ...base,\n fontSize: sizeOverride(theme, a.customSize, CAPTION_FONT_SIZE),\n opacity: CAPTION_OPACITY,\n letterSpacing: `${CAPTION_LETTER_SPACING_EM}em`,\n };\n case 'code':\n return {\n ...base,\n fontFamily: 'Monaco, Menlo, \"Ubuntu Mono\", \"Courier New\", monospace',\n fontSize: sizeOverride(theme, a.customSize, CODE_FONT_SIZE),\n backgroundColor: alpha(theme.palette.primary.main, CODE_BACKGROUND_ALPHA),\n padding: `${CODE_PADDING.vertical}px ${CODE_PADDING.horizontal}px`,\n borderRadius: theme.shape.borderRadius * CODE_RADIUS_FACTOR,\n border: `1px solid ${alpha(theme.palette.primary.main, CODE_BORDER_ALPHA)}`,\n };\n default:\n return { ...base, fontFamily: theme.typography.body1.fontFamily };\n }\n};\n\nconst StyledText = styled(Typography, {\n shouldForwardProp: (prop) =>\n ![\n 'customVariant',\n 'customColor',\n 'customSize',\n 'customWeight',\n 'italic',\n 'underline',\n 'strikethrough',\n ].includes(prop as string),\n})<{\n customVariant?: string;\n customColor?: ColorValue;\n customSize?: string;\n customWeight?: string;\n italic?: boolean;\n underline?: boolean;\n strikethrough?: boolean;\n}>((args) => {\n const { theme } = args;\n return textVariantStyles(theme, args, baseTextStyles(theme, args));\n});\n\nexport const Text = React.forwardRef<HTMLElement, TextProps>(\n (\n {\n variant = 'body',\n color = 'neutral',\n size = 'md',\n weight = 'normal',\n as = 'span',\n italic = false,\n underline = false,\n strikethrough = false,\n children,\n ...others\n },\n ref,\n ) => {\n // `testID` and `dataTestId` are the shared contract's spellings; the DOM\n // wants `data-testid`, and must not see the other two as attributes.\n const testId = resolveTestId(others);\n const props = withoutTestIdProps(others);\n return (\n <StyledText\n ref={ref}\n data-testid={testId}\n customVariant={variant}\n customColor={color}\n customSize={size}\n customWeight={weight}\n italic={italic}\n underline={underline}\n strikethrough={strikethrough}\n {...(as && { as })}\n {...props}\n >\n {children}\n </StyledText>\n );\n },\n);\n\nText.displayName = 'Text';"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAGA,OAAO,gBAAgB;AACvB,SAAS,OAAO,cAAc;AAC9B,OAAO,WAAW;AA2KZ;AArJN,IAAM,oBAAoB,CAAC,OAAc,UAA8B;AACrE,MAAI,UAAU,WAAW;AACvB,WAAO,MAAM,QAAQ,KAAK;AAAA,EAC5B;AAEA,MAAI,UAAU,aAAa;AACzB,WAAO,MAAM,QAAQ,KAAK;AAAA,EAC5B;AAMA,QAAM,WAAyE;AAAA,IAC7E,SAAS,MAAM,QAAQ,QAAQ;AAAA,IAC/B,SAAS,MAAM,QAAQ,QAAQ;AAAA,IAC/B,SAAS,MAAM,QAAQ,QAAQ;AAAA,IAC/B,MAAM,MAAM,QAAQ,KAAK;AAAA,IACzB,QAAQ,MAAM,QAAQ,MAAM;AAAA,EAC9B;AAEA,SAAO,SAAS,KAAK;AACvB;AAKA,IAAM,WAA6D;AAEnE,IAAM,cAAc,CAAC,OAAc,eAAuD;AACxF,QAAM,UAAU,SAAS,cAAc,IAAI,GAAG;AAC9C,SAAO,YAAY,SAAY,SAAY,IAAI,OAAO,OAAO;AAC/D;AAEA,IAAM,aAAqC;AAe3C,IAAM,gBAAgB,CAAC,WAAqB,kBAC1C,CAAC,aAAa,aAAa,iBAAiB,cAAc,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,KAAK;AAE3F,IAAM,iBAAiB,CAAC,OAAc,OAAiC;AAAA,EACrE,OAAO,kBAAkB,OAAO,EAAE,eAAe,SAAS;AAAA,EAC1D,UAAU,YAAY,OAAO,EAAE,UAAU;AAAA,EACzC,YAAY,SAAS,EAAE,cAAc,IAAI,GAAG;AAAA,EAC5C,YAAY,WAAW,EAAE,gBAAgB,QAAQ;AAAA,EACjD,WAAW,EAAE,SAAS,WAAW;AAAA,EACjC,gBAAgB,cAAc,EAAE,WAAW,EAAE,aAAa;AAAA,EAC1D,YAAY;AACd;AAIA,IAAM,eAAe,CACnB,OACA,YACA,eAEC,cAAc,UAAU,OAAO,IAAI,OAAO,SAAS,IAAI,YAAY,OAAO,UAAU;AAEvF,IAAM,oBAAoB,CAAC,OAAc,GAAkB,SAA+B;AACxF,QAAM,SAAS,EAAE,gBAAgB;AAEjC,UAAQ,EAAE,eAAe;AAAA,IACvB,KAAK;AACH,aAAO;AAAA,QACL,GAAG;AAAA,QACH,YAAY,MAAM,WAAW,GAAG;AAAA,QAChC,YAAY,WAAW,WAAW,yBAAyB,WAAW,MAAM;AAAA,QAC5E,eAAe,GAAG,yBAAyB;AAAA,MAC7C;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,GAAG;AAAA,QACH,UAAU,aAAa,OAAO,EAAE,YAAY,iBAAiB;AAAA,QAC7D,SAAS;AAAA,QACT,eAAe,GAAG,yBAAyB;AAAA,MAC7C;AAAA,IACF,KAAK;AACH,aAAO;AAAA,QACL,GAAG;AAAA,QACH,YAAY;AAAA,QACZ,UAAU,aAAa,OAAO,EAAE,YAAY,cAAc;AAAA,QAC1D,iBAAiB,MAAM,MAAM,QAAQ,QAAQ,MAAM,qBAAqB;AAAA,QACxE,SAAS,GAAG,aAAa,QAAQ,MAAM,aAAa,UAAU;AAAA,QAC9D,cAAc,MAAM,MAAM,eAAe;AAAA,QACzC,QAAQ,aAAa,MAAM,MAAM,QAAQ,QAAQ,MAAM,iBAAiB,CAAC;AAAA,MAC3E;AAAA,IACF;AACE,aAAO,EAAE,GAAG,MAAM,YAAY,MAAM,WAAW,MAAM,WAAW;AAAA,EACpE;AACF;AAEA,IAAM,aAAa,OAAO,YAAY;AAAA,EACpC,mBAAmB,CAAC,SAClB,CAAC;AAAA,IACC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,EAAE,SAAS,IAAc;AAC7B,CAAC,EAQE,CAAC,SAAS;AACX,QAAM,EAAE,MAAM,IAAI;AAClB,SAAO,kBAAkB,OAAO,MAAM,eAAe,OAAO,IAAI,CAAC;AACnE,CAAC;AAEM,IAAM,OAAO,MAAM;AAAA,EACxB,CACE;AAAA,IACE,UAAU;AAAA,IACV,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,SAAS;AAAA,IACT,KAAK;AAAA,IACL,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB;AAAA,IACA,GAAG;AAAA,EACL,GACA,QACG;AAGH,UAAM,SAAS,cAAc,MAAM;AACnC,UAAM,QAAQ,mBAAmB,MAAM;AACvC,WACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA,eAAa;AAAA,QACb,eAAe;AAAA,QACf,aAAa;AAAA,QACb,YAAY;AAAA,QACZ,cAAc;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,QACC,GAAI,MAAM,EAAE,GAAG;AAAA,QACf,GAAG;AAAA,QAEH;AAAA;AAAA,IACH;AAAA,EAEJ;AACF;AAEA,KAAK,cAAc;","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/layout/Collapsible/Collapsible.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport Collapse from '@mui/material/Collapse/index.js';\nimport { useTheme } from '@mui/material/styles/index.js';\nimport React, { useCallback,useEffect, useRef, useState } from 'react';\n\nimport {\n dimmedStyles,\n regionAttrs,\n transitionSettings,\n triggerStyles,\n} from './Collapsible.helpers';\nimport type { CollapsibleContentProps,CollapsibleProps, CollapsibleTriggerProps } from './Collapsible.types';\n\n/**\n * The smooth and spring variants animate an explicit pixel height, so the content\n * has to be measured after every render that could have changed it.\n */\nconst useMeasuredHeight = (\n open: boolean,\n maxHeight: number | undefined,\n children: React.ReactNode,\n) => {\n const contentRef = useRef<HTMLDivElement>(null);\n const [height, setHeight] = useState<number | 'auto'>('auto');\n\n const measureHeight = useCallback(() => {\n if (contentRef.current) {\n const scrollHeight = contentRef.current.scrollHeight;\n // Cap at maxHeight if provided\n setHeight(maxHeight ? Math.min(scrollHeight, maxHeight) : scrollHeight);\n }\n }, [maxHeight]);\n\n useEffect(() => {\n if (!open) {\n setHeight(0);\n } else if (contentRef.current) {\n measureHeight();\n }\n }, [open, measureHeight, children]);\n\n return { contentRef, height };\n};\n\ntype VariantProps = Omit<CollapsibleProps, 'variant' | 'onToggle'> & {\n duration: number;\n disabled: boolean;\n keepMounted: boolean;\n transition: { duration: number; easing: string };\n};\n\n// Use MUI's built-in Collapse for the default variant.\nconst DefaultCollapsible: React.FC<VariantProps> = ({\n children,\n open,\n duration,\n disabled,\n keepMounted,\n maxHeight,\n sx,\n className,\n dataTestId,\n transition: _transition,\n easing: _easing,\n ...otherProps\n}) => (\n <Collapse\n in={open && !disabled}\n timeout={disabled ? 0 : duration}\n sx={{\n ...dimmedStyles(disabled),\n ...(maxHeight && { maxHeight, overflow: 'hidden' }),\n ...sx,\n }}\n className={className}\n unmountOnExit={!keepMounted}\n {...regionAttrs({ open, disabled, dataTestId })}\n {...otherProps}\n >\n <Box>{children}</Box>\n </Collapse>\n);\n\nconst AnimatedCollapsible: React.FC<VariantProps> = ({\n children,\n open,\n disabled,\n keepMounted,\n maxHeight,\n transition,\n sx,\n className,\n dataTestId,\n duration: _duration,\n easing: _easing,\n ...otherProps\n}) => {\n const { contentRef, height } = useMeasuredHeight(open, maxHeight, children);\n\n return (\n <Box\n component=\"div\"\n sx={{\n overflow: 'hidden',\n height: open && !disabled ? height : 0,\n transition: disabled ? 'none' : `height ${transition.duration}ms ${transition.easing}`,\n willChange: disabled ? 'auto' : 'height',\n ...dimmedStyles(disabled),\n ...sx,\n }}\n className={className}\n {...regionAttrs({ open, disabled, dataTestId })}\n {...otherProps}\n >\n <Box ref={contentRef}>{(keepMounted || (open && !disabled)) && children}</Box>\n </Box>\n );\n};\n\nexport const Collapsible: React.FC<CollapsibleProps> = ({\n variant = 'default',\n duration = 300,\n easing,\n onToggle,\n disabled = false,\n keepMounted = false,\n ...rest\n}) => {\n const theme = useTheme();\n const { open } = rest;\n\n // Trigger onToggle callback when open state changes\n useEffect(() => {\n if (onToggle && !disabled) {\n onToggle(open);\n }\n }, [open, onToggle, disabled]);\n\n const variantProps: VariantProps = {\n ...rest,\n duration,\n easing,\n disabled,\n keepMounted,\n transition: transitionSettings(theme, variant, duration, easing),\n };\n\n return variant === 'default' ? (\n <DefaultCollapsible {...variantProps} />\n ) : (\n <AnimatedCollapsible {...variantProps} />\n );\n};\n\nexport const CollapsibleTrigger: React.FC<CollapsibleTriggerProps> = ({\n children,\n onClick,\n disabled = false,\n expanded = false,\n className,\n dataTestId,\n ...otherProps\n}) => {\n const theme = useTheme();\n\n return (\n <Box\n component=\"button\"\n onClick={disabled ? undefined : onClick}\n disabled={disabled}\n className={className}\n data-testid={dataTestId}\n aria-expanded={expanded}\n aria-disabled={disabled}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n data-state={expanded ? 'open' : 'closed'}\n sx={triggerStyles(theme, { disabled, expanded })}\n {...otherProps}\n >\n {children}\n </Box>\n );\n};\n\nexport const CollapsibleContent: React.FC<CollapsibleContentProps> = ({\n children,\n className,\n ...otherProps\n}) => {\n const theme = useTheme();\n\n return (\n <Box\n className={className}\n sx={{\n padding: theme.spacing(2),\n }}\n {...otherProps}\n >\n {children}\n </Box>\n );\n};\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/navigation/Pagination/Pagination.tsx"],"sourcesContent":["import FirstPage from '@mui/icons-material/FirstPage';\nimport LastPage from '@mui/icons-material/LastPage';\nimport NavigateBefore from '@mui/icons-material/NavigateBefore';\nimport NavigateNext from '@mui/icons-material/NavigateNext';\nimport type { PaginationRenderItemParams } from '@mui/material/Pagination/index.js';\nimport Box from '@mui/material/Box/index.js';\nimport MuiPagination from '@mui/material/Pagination/index.js';\nimport PaginationItem from '@mui/material/PaginationItem/index.js';\nimport { styled } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport type { ResolvedPaginationProps } from './Pagination.helpers';\nimport { makeTestId, muiSizeFor, resolvePaginationProps } from './Pagination.helpers';\nimport { paginationStyles } from './Pagination.styles';\nimport type { PaginationProps } from './Pagination.types';\nimport { ItemsPerPageSelect, PageInfo } from './PaginationParts';\n\nconst StyledPagination = styled(MuiPagination, {\n shouldForwardProp: (prop) => !['customVariant', 'customSize'].includes(prop as string) })<{ customVariant?: string; customSize?: string }>(({ theme, customVariant, customSize }) => ({\n ...paginationStyles({ theme, customVariant, customSize }) }));\n\nconst PaginationContainer = styled(Box)(({ theme }) => ({\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexWrap: 'wrap',\n gap: theme.spacing(1) }));\n\n// Arrow items get a short suffix, pages carry their number. This was two\n// parallel switch statements that differed only in whether the prefix came from\n// dataTestId or the literal 'pagination'.\nconst ITEM_TEST_SUFFIX: Record<string, string> = {\n first: 'first',\n last: 'last',\n previous: 'prev',\n next: 'next' };\n\nconst paginationItemTestId = (\n base: string | undefined,\n item: PaginationRenderItemParams,\n): string | undefined => {\n const prefix = base ?? 'pagination';\n\n if (item.type === 'page') return `${prefix}-page-${item.page}`;\n\n const suffix = ITEM_TEST_SUFFIX[item.type];\n return suffix ? `${prefix}-${suffix}` : undefined;\n};\n\n// A dots-variant page renders as a bare dot; everything else uses MUI's item\n// with our own arrow icons.\nconst renderPaginationItem = ({\n item,\n variant,\n size: _size,\n dataTestId,\n icons }: {\n item: PaginationRenderItemParams;\n variant: string;\n size: string;\n dataTestId?: string;\n icons: {\n firstIcon?: React.ReactNode;\n lastIcon?: React.ReactNode;\n previousIcon?: React.ReactNode;\n nextIcon?: React.ReactNode;\n };\n}) => {\n const { firstIcon, lastIcon, previousIcon, nextIcon } = icons;\n\n const itemTestId = paginationItemTestId(dataTestId, item);\n\n if (variant === 'dots') {\n if (item.type === 'page') {\n return (\n <PaginationItem\n {...item}\n data-testid={itemTestId}\n sx={{\n '&.MuiPaginationItem-page': {\n fontSize: 0,\n overflow: 'hidden',\n textIndent: '-9999px' } }}\n />\n );\n }\n return null; // Hide navigation buttons for dots\n }\n\n // Map custom icons to components\n const iconMap: Record<string, React.ReactElement> = {\n first: firstIcon as React.ReactElement,\n last: lastIcon as React.ReactElement,\n previous: previousIcon as React.ReactElement,\n next: nextIcon as React.ReactElement };\n\n return (\n <PaginationItem\n {...item}\n data-testid={itemTestId}\n components={{\n first: () => iconMap.first || <FirstPage />,\n last: () => iconMap.last || <LastPage />,\n previous: () => iconMap.previous || <NavigateBefore />,\n next: () => iconMap.next || <NavigateNext /> }}\n />\n );\n \n};\n\n// The control itself. Local because StyledPagination cannot cross a module\n// boundary (TS2742).\nconst PaginationControl: React.FC<\n ResolvedPaginationProps & {\n innerRef: React.Ref<HTMLElement>;\n renderItem: (item: PaginationRenderItemParams) => React.ReactNode;\n rest: Record<string, unknown>;\n }\n> = ({ innerRef, renderItem, rest, ...p }) => {\n // The dots variant is a position indicator, not a control: no page numbers\n // around the current one, and no step buttons.\n const isDots = p.variant === 'dots';\n\n return (\n <StyledPagination\n ref={innerRef}\n page={p.page}\n count={p.count}\n onChange={p.onChange}\n customVariant={p.variant}\n customSize={p.size}\n variant=\"outlined\"\n size={muiSizeFor(p.size)}\n boundaryCount={isDots ? 0 : p.boundaryCount}\n siblingCount={isDots ? 0 : p.siblingCount}\n hideNextButton={p.hideNextButton || isDots}\n hidePrevButton={p.hidePrevButton || isDots}\n showFirstButton={p.showFirstButton && !isDots}\n showLastButton={p.showLastButton && !isDots}\n disabled={p.disabled}\n // MUI spells the unaccented pagination colour `standard`; ours is\n // `neutral`, translated here rather than carried as a second name.\n color={p.color === undefined ? undefined : p.color === 'neutral' ? 'standard' : p.color}\n renderItem={renderItem}\n {...rest}\n />\n );\n};\n\nexport const Pagination = React.forwardRef<HTMLElement, PaginationProps>(\n (componentProps, ref) => {\n const resolved = resolvePaginationProps(componentProps);\n const {\n pageSizeLabel,\n variant,\n size,\n page,\n count,\n onChange: _onChange,\n boundaryCount: _boundaryCount,\n siblingCount: _siblingCount,\n hideNextButton: _hideNextButton,\n hidePrevButton: _hidePrevButton,\n showFirstButton: _showFirstButton,\n showLastButton: _showLastButton,\n firstIcon,\n lastIcon,\n previousIcon,\n nextIcon,\n disabled,\n color: _color,\n showPageInfo,\n pageInfoFormat,\n showItemsPerPage,\n itemsPerPageOptions,\n itemsPerPage,\n onItemsPerPageChange,\n className,\n dataTestId,\n ...props\n } = resolved;\n\n const testId = makeTestId(dataTestId);\n\n const renderItem = (item: PaginationRenderItemParams) =>\n renderPaginationItem({\n item,\n variant,\n size,\n dataTestId,\n icons: { firstIcon, lastIcon, previousIcon, nextIcon } });\n\n return (\n <PaginationContainer className={className} data-testid={dataTestId || 'pagination'}>\n {showItemsPerPage && onItemsPerPageChange && (\n <ItemsPerPageSelect\n pageSizeLabel={pageSizeLabel}\n value={itemsPerPage}\n options={itemsPerPageOptions}\n size={size}\n disabled={disabled}\n testId={testId('items-per-page')}\n onChange={onItemsPerPageChange}\n />\n )}\n\n <PaginationControl\n {...resolved}\n innerRef={ref}\n renderItem={renderItem}\n rest={props as unknown as Record<string, unknown>}\n />\n\n {showPageInfo && (\n <PageInfo size={size} testId={testId('info')}>\n {pageInfoFormat(page, count)}\n </PageInfo>\n )}\n </PaginationContainer>\n );\n },\n);\n\nPagination.displayName = 'Pagination';\n"],"mappings":"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","names":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/components/layout/Sidebar/Sidebar.tsx"],"sourcesContent":["import Box from '@mui/material/Box/index.js';\nimport { alpha, useTheme } from '@mui/material/styles/index.js';\nimport React from 'react';\n\nimport type {\n SidebarContentProps,\n SidebarFooterProps,\n SidebarHeaderProps,\n SidebarProps,\n} from './Sidebar.types';\nimport { shadowInk } from '../../../tokens/ink';\n\nexport const Sidebar: React.FC<SidebarProps> = ({\n children,\n variant = 'fixed',\n open = true,\n onToggle: _onToggle,\n width = 280,\n collapsedWidth = 64,\n position = 'left',\n className,\n dataTestId = 'sidebar',\n ...rest\n}) => {\n // Prevent unused variable warning for onToggle\n void _onToggle;\n const theme = useTheme();\n\n const isCollapsed = variant === 'collapsible' && !open;\n const currentWidth = isCollapsed ? collapsedWidth : width;\n\n const getVariantStyles = () => {\n switch (variant) {\n case 'floating':\n return {\n position: 'fixed' as const,\n top: theme.spacing(2),\n bottom: theme.spacing(2),\n [position]: theme.spacing(2),\n borderRadius: theme.spacing(2),\n boxShadow: theme.shadows[8],\n zIndex: theme.zIndex.drawer,\n };\n case 'glass':\n return {\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 boxShadow: `0 8px 32px ${shadowInk(theme, 0.1)}`,\n };\n case 'collapsible':\n return {\n transition: theme.transitions.create('width', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n };\n default:\n return {\n backgroundColor: theme.palette.background.paper,\n borderRight: `1px solid ${theme.palette.divider}`,\n };\n }\n };\n\n return (\n <Box\n className={className}\n data-testid={dataTestId}\n {...rest}\n sx={{\n width: currentWidth,\n height: '100vh',\n display: 'flex',\n flexDirection: 'column',\n overflow: 'hidden',\n ...getVariantStyles(),\n }}\n >\n {children}\n </Box>\n );\n};\n\nexport const SidebarHeader: React.FC<SidebarHeaderProps> = ({ children, dataTestId = 'sidebar-header', ...rest }) => {\n const theme = useTheme();\n\n return (\n <Box\n data-testid={dataTestId}\n {...rest}\n sx={{\n padding: theme.spacing(2),\n borderBottom: `1px solid ${theme.palette.divider}`,\n flexShrink: 0,\n overflow: 'hidden',\n }}\n >\n {children}\n </Box>\n );\n};\n\nexport const SidebarContent: React.FC<SidebarContentProps> = ({ children, dataTestId = 'sidebar-content', ...rest }) => (\n <Box\n data-testid={dataTestId}\n {...rest}\n sx={{\n flex: 1,\n overflow: 'auto',\n }}\n >\n {children}\n </Box>\n );\n\nexport const SidebarFooter: React.FC<SidebarFooterProps> = ({ children, dataTestId = 'sidebar-footer', ...rest }) => {\n const theme = useTheme();\n\n return (\n <Box\n data-testid={dataTestId}\n {...rest}\n sx={{\n padding: theme.spacing(2),\n borderTop: `1px solid ${theme.palette.divider}`,\n flexShrink: 0,\n }}\n >\n {children}\n </Box>\n );\n};\n"],"mappings":";;;;;AAAA,OAAO,SAAS;AAChB,SAAS,OAAO,gBAAgB;AAiE5B;AAtDG,IAAM,UAAkC,CAAC;AAAA,EAC9C;AAAA,EACA,UAAU;AAAA,EACV,OAAO;AAAA,EACP,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,iBAAiB;AAAA,EACjB,WAAW;AAAA,EACX;AAAA,EACA,aAAa;AAAA,EACb,GAAG;AACL,MAAM;AAEJ,OAAK;AACL,QAAM,QAAQ,SAAS;AAEvB,QAAM,cAAc,YAAY,iBAAiB,CAAC;AAClD,QAAM,eAAe,cAAc,iBAAiB;AAEpD,QAAM,mBAAmB,MAAM;AAC7B,YAAQ,SAAS;AAAA,MACf,KAAK;AACH,eAAO;AAAA,UACL,UAAU;AAAA,UACV,KAAK,MAAM,QAAQ,CAAC;AAAA,UACpB,QAAQ,MAAM,QAAQ,CAAC;AAAA,UACvB,CAAC,QAAQ,GAAG,MAAM,QAAQ,CAAC;AAAA,UAC3B,cAAc,MAAM,QAAQ,CAAC;AAAA,UAC7B,WAAW,MAAM,QAAQ,CAAC;AAAA,UAC1B,QAAQ,MAAM,OAAO;AAAA,QACvB;AAAA,MACF,KAAK;AACH,eAAO;AAAA,UACL,iBAAiB,MAAM,MAAM,QAAQ,WAAW,OAAO,GAAG;AAAA,UAC1D,gBAAgB;AAAA,UAChB,QAAQ,aAAa,MAAM,MAAM,QAAQ,QAAQ,MAAM,GAAG,CAAC;AAAA,UAC3D,WAAW,cAAc,UAAU,OAAO,GAAG,CAAC;AAAA,QAChD;AAAA,MACF,KAAK;AACH,eAAO;AAAA,UACL,YAAY,MAAM,YAAY,OAAO,SAAS;AAAA,YAC5C,QAAQ,MAAM,YAAY,OAAO;AAAA,YACjC,UAAU,MAAM,YAAY,SAAS;AAAA,UACvC,CAAC;AAAA,QACH;AAAA,MACF;AACE,eAAO;AAAA,UACL,iBAAiB,MAAM,QAAQ,WAAW;AAAA,UAC1C,aAAa,aAAa,MAAM,QAAQ,OAAO;AAAA,QACjD;AAAA,IACJ;AAAA,EACF;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA,eAAa;AAAA,MACZ,GAAG;AAAA,MACJ,IAAI;AAAA,QACF,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,eAAe;AAAA,QACf,UAAU;AAAA,QACV,GAAG,iBAAiB;AAAA,MACtB;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;AAEO,IAAM,gBAA8C,CAAC,EAAE,UAAU,aAAa,kBAAkB,GAAG,KAAK,MAAM;AACnH,QAAM,QAAQ,SAAS;AAEvB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAa;AAAA,MACZ,GAAG;AAAA,MACJ,IAAI;AAAA,QACF,SAAS,MAAM,QAAQ,CAAC;AAAA,QACxB,cAAc,aAAa,MAAM,QAAQ,OAAO;AAAA,QAChD,YAAY;AAAA,QACZ,UAAU;AAAA,MACZ;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;AAEO,IAAM,iBAAgD,CAAC,EAAE,UAAU,aAAa,mBAAmB,GAAG,KAAK,MAC9G;AAAA,EAAC;AAAA;AAAA,IACC,eAAa;AAAA,IACZ,GAAG;AAAA,IACJ,IAAI;AAAA,MACF,MAAM;AAAA,MACN,UAAU;AAAA,IACZ;AAAA,IAEC;AAAA;AACH;AAGG,IAAM,gBAA8C,CAAC,EAAE,UAAU,aAAa,kBAAkB,GAAG,KAAK,MAAM;AACnH,QAAM,QAAQ,SAAS;AAEvB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,eAAa;AAAA,MACZ,GAAG;AAAA,MACJ,IAAI;AAAA,QACF,SAAS,MAAM,QAAQ,CAAC;AAAA,QACxB,WAAW,aAAa,MAAM,QAAQ,OAAO;AAAA,QAC7C,YAAY;AAAA,MACd;AAAA,MAEC;AAAA;AAAA,EACH;AAEJ;","names":[]}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|