@kismet-ux/constellation 1.9.0 → 1.11.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/brand/Logo/logo.css +4 -1
- package/dist/form/Checkbox/checkbox.css +48 -34
- package/dist/form/Checkbox/checkbox.d.ts +5 -0
- package/dist/form/Checkbox/checkbox.d.ts.map +1 -1
- package/dist/form/Checkbox/checkbox.js +6 -55
- package/dist/form/Checkbox/checkbox.js.map +1 -1
- package/dist/form/Checkbox/checkbox.module.scss.js +1 -1
- package/dist/form/Combobox/combobox.css +35 -0
- package/dist/form/Combobox/combobox.d.ts +41 -0
- package/dist/form/Combobox/combobox.d.ts.map +1 -0
- package/dist/form/Combobox/combobox.js +152 -0
- package/dist/form/Combobox/combobox.js.map +1 -0
- package/dist/form/Combobox/combobox.module.scss.js +6 -0
- package/dist/form/Combobox/combobox.module.scss.js.map +1 -0
- package/dist/form/Combobox/index.d.ts +2 -0
- package/dist/form/Combobox/index.d.ts.map +1 -0
- package/dist/form/DatePicker/date-picker.d.ts.map +1 -1
- package/dist/form/DatePicker/date-picker.js +5 -53
- package/dist/form/DatePicker/date-picker.js.map +1 -1
- package/dist/form/Input/input.css +12 -0
- package/dist/form/Input/input.d.ts +1 -1
- package/dist/form/Input/input.d.ts.map +1 -1
- package/dist/form/Input/input.js +23 -3
- package/dist/form/Input/input.js.map +1 -1
- package/dist/form/Select/select.css +46 -2
- package/dist/form/Select/select.d.ts +31 -3
- package/dist/form/Select/select.d.ts.map +1 -1
- package/dist/form/Select/select.js +35 -21
- package/dist/form/Select/select.js.map +1 -1
- package/dist/form/Select/select.module.scss.js +2 -2
- package/dist/form/index.d.ts +1 -0
- package/dist/form/index.d.ts.map +1 -1
- package/dist/form.d.ts +1 -1
- package/dist/form.js +2 -1
- package/dist/form.js.map +1 -1
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/layout/index.d.ts +1 -0
- package/dist/hooks/layout/index.d.ts.map +1 -1
- package/dist/hooks/layout/use-flip.d.ts +37 -0
- package/dist/hooks/layout/use-flip.d.ts.map +1 -0
- package/dist/hooks/layout/use-flip.js +128 -0
- package/dist/hooks/layout/use-flip.js.map +1 -0
- package/dist/hooks/use-motion.d.ts +30 -0
- package/dist/hooks/use-motion.d.ts.map +1 -0
- package/dist/hooks/use-motion.js +93 -0
- package/dist/hooks/use-motion.js.map +1 -0
- package/dist/index-2nHZOukj.d.ts +200 -0
- package/dist/index-3Ui8TAHy.d.ts +200 -0
- package/dist/index-59JuNTZm.d.ts +537 -0
- package/dist/index-5QXWn0de.d.ts +200 -0
- package/dist/index-98ozinMf.d.ts +498 -0
- package/dist/index-Ah3YQTri.d.ts +566 -0
- package/dist/index-As2iBOIu.d.ts +527 -0
- package/dist/index-B1Vw0zoR.d.ts +566 -0
- package/dist/index-B25sLBMr.d.ts +498 -0
- package/dist/index-B4B8aA9X.d.ts +272 -0
- package/dist/index-B97hn7Xp.d.ts +514 -0
- package/dist/index-B9B7JjTb.d.ts +204 -0
- package/dist/index-BFWt_pYt.d.ts +566 -0
- package/dist/index-BFZp_Pu6.d.ts +566 -0
- package/dist/index-BGL4DvKQ.d.ts +293 -0
- package/dist/index-BGP_J4I2.d.ts +498 -0
- package/dist/index-BHhoIUD_.d.ts +354 -0
- package/dist/index-BI0iaWmp.d.ts +222 -0
- package/dist/index-BMSRpHb6.d.ts +273 -0
- package/dist/index-BRQWKmfq.d.ts +566 -0
- package/dist/index-BTARYt96.d.ts +537 -0
- package/dist/index-BTrpuZdU.d.ts +566 -0
- package/dist/index-BWTwKQsp.d.ts +354 -0
- package/dist/index-B_05Skyi.d.ts +566 -0
- package/dist/index-BcQqBGNu.d.ts +200 -0
- package/dist/index-Be23E9xD.d.ts +298 -0
- package/dist/index-Bf44Z8ak.d.ts +514 -0
- package/dist/index-Bg42sKjg.d.ts +498 -0
- package/dist/index-Bg_0OPMx.d.ts +566 -0
- package/dist/index-BgjRk9l7.d.ts +537 -0
- package/dist/index-BhLEMn3N.d.ts +537 -0
- package/dist/index-BiqECuUj.d.ts +204 -0
- package/dist/index-BjUQiAs1.d.ts +130 -0
- package/dist/index-BlKqvax0.d.ts +204 -0
- package/dist/index-Bnb0JFqx.d.ts +514 -0
- package/dist/index-BpSD6t7A.d.ts +566 -0
- package/dist/index-BpxKwrv_.d.ts +537 -0
- package/dist/index-Brh7JZAQ.d.ts +514 -0
- package/dist/index-BxBAq63A.d.ts +354 -0
- package/dist/index-C-n7hM4G.d.ts +354 -0
- package/dist/index-C0wKb28S.d.ts +514 -0
- package/dist/index-C129uthr.d.ts +566 -0
- package/dist/index-C1ef0QtQ.d.ts +204 -0
- package/dist/index-C4BACHGE.d.ts +272 -0
- package/dist/index-C5JU8WTE.d.ts +514 -0
- package/dist/index-C63UYi-T.d.ts +195 -0
- package/dist/index-C8LoYkC7.d.ts +250 -0
- package/dist/index-C9-ECLyr.d.ts +566 -0
- package/dist/index-C9B1F-mr.d.ts +293 -0
- package/dist/index-CAVmbwa8.d.ts +514 -0
- package/dist/index-CBz-v5eM.d.ts +184 -0
- package/dist/index-CCpdo0n4.d.ts +130 -0
- package/dist/index-CDC_ZncW.d.ts +566 -0
- package/dist/index-CFQj-KtR.d.ts +184 -0
- package/dist/index-CFaxW5hv.d.ts +184 -0
- package/dist/index-CG9DKbG9.d.ts +498 -0
- package/dist/index-CGhG7YeI.d.ts +354 -0
- package/dist/index-CHC6kRbR.d.ts +537 -0
- package/dist/index-CH_q-5fk.d.ts +537 -0
- package/dist/index-CIK_SmBm.d.ts +200 -0
- package/dist/index-CJ1KPFOf.d.ts +537 -0
- package/dist/index-CJ5FEGRG.d.ts +537 -0
- package/dist/index-CKX2VNKk.d.ts +240 -0
- package/dist/index-CL7kYZ90.d.ts +231 -0
- package/dist/index-CNl03fCW.d.ts +498 -0
- package/dist/index-CO8Jq0pz.d.ts +298 -0
- package/dist/index-CQ-aS-rp.d.ts +566 -0
- package/dist/index-CQjzBv4q.d.ts +537 -0
- package/dist/index-CRVO4SlF.d.ts +537 -0
- package/dist/index-CSQFy2xe.d.ts +195 -0
- package/dist/index-CWM2ewRz.d.ts +566 -0
- package/dist/index-CY6Xq36O.d.ts +204 -0
- package/dist/index-CYGOs6JT.d.ts +273 -0
- package/dist/index-CYPFkjfk.d.ts +204 -0
- package/dist/index-C_hJJ1fH.d.ts +527 -0
- package/dist/index-CcM-XHTL.d.ts +273 -0
- package/dist/index-CdGF_eEO.d.ts +514 -0
- package/dist/index-CdJTE9Lh.d.ts +566 -0
- package/dist/index-CdOt-pqR.d.ts +537 -0
- package/dist/index-CgeR_2Gi.d.ts +220 -0
- package/dist/index-CjUoZbDi.d.ts +354 -0
- package/dist/index-CjV6KsFc.d.ts +263 -0
- package/dist/index-Ck8LtgBW.d.ts +557 -0
- package/dist/index-Cknm9FUU.d.ts +299 -0
- package/dist/index-Clv3CnXv.d.ts +184 -0
- package/dist/index-Cm4wnJ29.d.ts +514 -0
- package/dist/index-Cmz3q-CI.d.ts +273 -0
- package/dist/index-CnMBzCft.d.ts +514 -0
- package/dist/index-CnVW0FnZ.d.ts +272 -0
- package/dist/index-CpIHT-uo.d.ts +231 -0
- package/dist/index-CtBEDM0b.d.ts +514 -0
- package/dist/index-CtVSiQeY.d.ts +130 -0
- package/dist/index-Cu107rOs.d.ts +293 -0
- package/dist/index-CxyTd3Ag.d.ts +354 -0
- package/dist/index-CywSNvOU.d.ts +200 -0
- package/dist/index-CzJL7Lro.d.ts +566 -0
- package/dist/index-CzJnKY3r.d.ts +272 -0
- package/dist/index-D-R9eOxe.d.ts +354 -0
- package/dist/index-D-hdgIbs.d.ts +273 -0
- package/dist/index-D-slQ9w4.d.ts +537 -0
- package/dist/index-D0jdNDaH.d.ts +204 -0
- package/dist/index-D1ir--Li.d.ts +566 -0
- package/dist/index-D29_-MCZ.d.ts +354 -0
- package/dist/index-D2glATpo.d.ts +273 -0
- package/dist/index-D3J_UMR7.d.ts +566 -0
- package/dist/index-D6ATtbor.d.ts +298 -0
- package/dist/index-D6HktSlo.d.ts +514 -0
- package/dist/index-DB4UBCvy.d.ts +537 -0
- package/dist/index-DBd0PU9y.d.ts +222 -0
- package/dist/index-DE2Nm-iT.d.ts +354 -0
- package/dist/index-DEeJuuvm.d.ts +231 -0
- package/dist/index-DHhzBSfL.d.ts +498 -0
- package/dist/index-DKpWNCb6.d.ts +204 -0
- package/dist/index-DMewi97i.d.ts +566 -0
- package/dist/index-DN0gtpck.d.ts +354 -0
- package/dist/index-DO23vZ-R.d.ts +514 -0
- package/dist/index-DTb2-z6E.d.ts +130 -0
- package/dist/index-DV-CN7c0.d.ts +231 -0
- package/dist/index-DWgCs62z.d.ts +566 -0
- package/dist/index-D_6Qu6ia.d.ts +200 -0
- package/dist/index-D_vn8O-I.d.ts +293 -0
- package/dist/index-Daq4m4Rf.d.ts +514 -0
- package/dist/index-Db6cXpr6.d.ts +537 -0
- package/dist/index-DbZ1s2E-.d.ts +514 -0
- package/dist/index-DbevJPuY.d.ts +354 -0
- package/dist/index-DepmPwP7.d.ts +537 -0
- package/dist/index-DfnTWQCz.d.ts +514 -0
- package/dist/index-Dfu8WhiS.d.ts +273 -0
- package/dist/index-DggMYd7c.d.ts +298 -0
- package/dist/index-DhS2nQjt.d.ts +200 -0
- package/dist/index-Dn3bC8Ki.d.ts +222 -0
- package/dist/index-Dn9bGZvU.d.ts +195 -0
- package/dist/index-DnDt7A4Y.d.ts +354 -0
- package/dist/index-DpdYKBP2.d.ts +498 -0
- package/dist/index-DunP9qIK.d.ts +537 -0
- package/dist/index-DxO6-qt5.d.ts +498 -0
- package/dist/index-ESQ8WM_8.d.ts +130 -0
- package/dist/index-GVz409cm.d.ts +222 -0
- package/dist/index-HAx-aLZ0.d.ts +273 -0
- package/dist/index-Iuzs6nt9.d.ts +498 -0
- package/dist/index-LnEpnlTq.d.ts +566 -0
- package/dist/index-Mm1i2OdU.d.ts +537 -0
- package/dist/index-P0oxVi77.d.ts +537 -0
- package/dist/index-Q5JuPFoN.d.ts +293 -0
- package/dist/index-RJviLtvo.d.ts +566 -0
- package/dist/index-SnQCbfte.d.ts +498 -0
- package/dist/index-Th9It0ZT.d.ts +354 -0
- package/dist/index-UHHmyQM5.d.ts +272 -0
- package/dist/index-VyGmJYQZ.d.ts +537 -0
- package/dist/index-WYH70le_.d.ts +195 -0
- package/dist/index-Wj9RYtTX.d.ts +273 -0
- package/dist/index-Y-wMZeUG.d.ts +298 -0
- package/dist/index-Zo2rSdXz.d.ts +273 -0
- package/dist/index-ZwpWgV4n.d.ts +272 -0
- package/dist/index-_oZ4knIl.d.ts +272 -0
- package/dist/index-an222nAK.d.ts +354 -0
- package/dist/index-daV0QTe0.d.ts +537 -0
- package/dist/index-eGZu2HLC.d.ts +231 -0
- package/dist/index-eswPA0Un.d.ts +204 -0
- package/dist/index-gf6-wf_1.d.ts +566 -0
- package/dist/index-hdVr9Wrv.d.ts +566 -0
- package/dist/index-iygiXYw2.d.ts +537 -0
- package/dist/index-jR29ZGLD.d.ts +514 -0
- package/dist/index-kHgI28TP.d.ts +272 -0
- package/dist/index-lY4_UCOs.d.ts +566 -0
- package/dist/index-miXK87yJ.d.ts +231 -0
- package/dist/index-mwbGtZkk.d.ts +273 -0
- package/dist/index-ru2DFXcm.d.ts +195 -0
- package/dist/index-uj1ll_u-.d.ts +204 -0
- package/dist/index-vfq-aH7U.d.ts +537 -0
- package/dist/index-xqUz9XjP.d.ts +537 -0
- package/dist/index.css +74 -18
- package/dist/index.d.ts +121 -13
- package/dist/index.js +34 -28
- package/dist/index.js.map +1 -1
- package/dist/internal/use-scroll-lock.d.ts +15 -0
- package/dist/internal/use-scroll-lock.d.ts.map +1 -1
- package/dist/internal/use-scroll-lock.js +26 -8
- package/dist/internal/use-scroll-lock.js.map +1 -1
- package/dist/layout/AppContent/app-content.css +1 -1
- package/dist/layout/AppContentBands/app-content-bands.css +21 -0
- package/dist/layout/AppContentBands/app-content-bands.d.ts +26 -0
- package/dist/layout/AppContentBands/app-content-bands.d.ts.map +1 -0
- package/dist/layout/AppContentBands/app-content-bands.js +65 -0
- package/dist/layout/AppContentBands/app-content-bands.js.map +1 -0
- package/dist/layout/AppContentBands/app-content-bands.module.scss.js +6 -0
- package/dist/layout/AppContentBands/app-content-bands.module.scss.js.map +1 -0
- package/dist/layout/AppContentBands/index.d.ts +2 -0
- package/dist/layout/AppContentBands/index.d.ts.map +1 -0
- package/dist/layout/AppContentFooter/app-content-footer.css +9 -0
- package/dist/layout/AppContentFooter/app-content-footer.d.ts +38 -0
- package/dist/layout/AppContentFooter/app-content-footer.d.ts.map +1 -0
- package/dist/layout/AppContentFooter/app-content-footer.js +42 -0
- package/dist/layout/AppContentFooter/app-content-footer.js.map +1 -0
- package/dist/layout/AppContentFooter/app-content-footer.module.scss.js +6 -0
- package/dist/layout/AppContentFooter/app-content-footer.module.scss.js.map +1 -0
- package/dist/layout/AppContentFooter/index.d.ts +2 -0
- package/dist/layout/AppContentFooter/index.d.ts.map +1 -0
- package/dist/layout/AppContentMain/app-content-main.css +6 -0
- package/dist/layout/AppContentMain/app-content-main.d.ts +37 -0
- package/dist/layout/AppContentMain/app-content-main.d.ts.map +1 -0
- package/dist/layout/AppContentMain/app-content-main.js +41 -0
- package/dist/layout/AppContentMain/app-content-main.js.map +1 -0
- package/dist/layout/AppContentMain/app-content-main.module.scss.js +6 -0
- package/dist/layout/AppContentMain/app-content-main.module.scss.js.map +1 -0
- package/dist/layout/AppContentMain/index.d.ts +2 -0
- package/dist/layout/AppContentMain/index.d.ts.map +1 -0
- package/dist/layout/AppFooter/app-footer.js +1 -1
- package/dist/layout/AppSidebar/app-sidebar.js +2 -2
- package/dist/layout/AppSidebar/app-sidebar.js.map +1 -1
- package/dist/layout/AppSidebarHeader/app-sidebar-header.css +2 -3
- package/dist/layout/AppSidebarHeader/app-sidebar-header.d.ts +10 -2
- package/dist/layout/AppSidebarHeader/app-sidebar-header.d.ts.map +1 -1
- package/dist/layout/AppSidebarHeader/app-sidebar-header.js +12 -32
- package/dist/layout/AppSidebarHeader/app-sidebar-header.js.map +1 -1
- package/dist/layout/Collapse/collapse.css +4 -1
- package/dist/layout/Column/column.css +6 -0
- package/dist/layout/Column/column.d.ts.map +1 -1
- package/dist/layout/Column/column.js +3 -1
- package/dist/layout/Column/column.js.map +1 -1
- package/dist/layout/Column/column.module.scss.js +1 -1
- package/dist/layout/Container/container.css +42 -0
- package/dist/layout/Container/container.d.ts.map +1 -1
- package/dist/layout/Container/container.js +37 -9
- package/dist/layout/Container/container.js.map +1 -1
- package/dist/layout/Container/container.module.scss.js +1 -1
- package/dist/layout/Grid/grid.css +28 -0
- package/dist/layout/Grid/grid.d.ts.map +1 -1
- package/dist/layout/Grid/grid.js +40 -4
- package/dist/layout/Grid/grid.js.map +1 -1
- package/dist/layout/Grid/grid.module.scss.js +1 -1
- package/dist/layout/Row/row.css +42 -0
- package/dist/layout/Row/row.d.ts.map +1 -1
- package/dist/layout/Row/row.js +5 -3
- package/dist/layout/Row/row.js.map +1 -1
- package/dist/layout/Row/row.module.scss.js +1 -1
- package/dist/layout/Sidebar/sidebar.css +4 -2
- package/dist/layout/Sidebar/sidebar.js +1 -1
- package/dist/layout/index.d.ts +2 -0
- package/dist/layout/index.d.ts.map +1 -1
- package/dist/layout.d.ts +4 -4
- package/dist/layout.js +2 -0
- package/dist/layout.js.map +1 -1
- package/dist/nav-user-CilmWvtr.d.ts +52 -0
- package/dist/navigation/DropdownMenu/dropdown-menu.d.ts.map +1 -1
- package/dist/navigation/DropdownMenu/dropdown-menu.js +1 -1
- package/dist/navigation/DropdownMenu/dropdown-menu.js.map +1 -1
- package/dist/navigation/NavUser/nav-user.js +2 -2
- package/dist/navigation/Sheet/sheet.css +40 -6
- package/dist/navigation/Sheet/sheet.d.ts +22 -0
- package/dist/navigation/Sheet/sheet.d.ts.map +1 -1
- package/dist/navigation/Sheet/sheet.js +5 -30
- package/dist/navigation/Sheet/sheet.js.map +1 -1
- package/dist/navigation/Sheet/sheet.module.scss.js +1 -1
- package/dist/navigation.d.ts +24 -2
- package/dist/row-CuhTBQhK.d.ts +21 -0
- package/dist/settings/AppearanceDropdown/appearance-dropdown.js +1 -1
- package/dist/settings/AppearanceTabs/appearance-tabs.js +2 -27
- package/dist/settings/AppearanceTabs/appearance-tabs.js.map +1 -1
- package/dist/tokens.css +59 -17
- package/dist/tooltip-1qYeAGE9.d.ts +45 -0
- package/dist/tooltip-3IOkYFQ-.d.ts +45 -0
- package/dist/tooltip-540OmbEG.d.ts +46 -0
- package/dist/tooltip-91Nq_Hl8.d.ts +46 -0
- package/dist/tooltip-B56sWYK0.d.ts +46 -0
- package/dist/tooltip-BIrIF-4z.d.ts +45 -0
- package/dist/tooltip-BOipKW5l.d.ts +46 -0
- package/dist/tooltip-BPC0RH8i.d.ts +46 -0
- package/dist/tooltip-BST1BOCn.d.ts +45 -0
- package/dist/tooltip-BhuxNQwX.d.ts +45 -0
- package/dist/tooltip-BpAJwi3K.d.ts +46 -0
- package/dist/tooltip-C0LBu2Iu.d.ts +45 -0
- package/dist/tooltip-C1ZwALiG.d.ts +45 -0
- package/dist/tooltip-C55-HA0w.d.ts +45 -0
- package/dist/tooltip-CHn6WuDv.d.ts +46 -0
- package/dist/tooltip-CNjH7zKO.d.ts +45 -0
- package/dist/tooltip-CSBby1OT.d.ts +45 -0
- package/dist/tooltip-CXFRzR0L.d.ts +45 -0
- package/dist/tooltip-ChpsbkOU.d.ts +46 -0
- package/dist/tooltip-CspTy2ZW.d.ts +46 -0
- package/dist/tooltip-CvComAZD.d.ts +46 -0
- package/dist/tooltip-D19vhhRn.d.ts +45 -0
- package/dist/tooltip-D32S1g-7.d.ts +46 -0
- package/dist/tooltip-DAvBN683.d.ts +45 -0
- package/dist/tooltip-DQz4_i4m.d.ts +45 -0
- package/dist/tooltip-DVYPUAb1.d.ts +46 -0
- package/dist/tooltip-DXoSckt9.d.ts +46 -0
- package/dist/tooltip-Dtoq3bn_.d.ts +46 -0
- package/dist/tooltip-DxO_DWMO.d.ts +46 -0
- package/dist/tooltip-DxdGb3dX.d.ts +45 -0
- package/dist/tooltip-DzAzC0d7.d.ts +45 -0
- package/dist/tooltip-Lk4RpuSh.d.ts +45 -0
- package/dist/tooltip-ReFyHDhU.d.ts +45 -0
- package/dist/tooltip-_wdlSYAb.d.ts +46 -0
- package/dist/tooltip-nKcM19C9.d.ts +45 -0
- package/dist/types/layout/container.d.ts +28 -1
- package/dist/types/layout/container.d.ts.map +1 -1
- package/dist/types/layout/grid.d.ts +42 -0
- package/dist/types/layout/grid.d.ts.map +1 -1
- package/dist/types/layout/row.d.ts +7 -0
- package/dist/types/layout/row.d.ts.map +1 -1
- package/dist/types/navigation.d.ts +11 -0
- package/dist/types/navigation.d.ts.map +1 -1
- package/dist/typography/Typography/typography-variants.d.ts +3 -0
- package/dist/typography/Typography/typography-variants.d.ts.map +1 -1
- package/dist/typography/Typography/typography-variants.js +25 -0
- package/dist/typography/Typography/typography-variants.js.map +1 -1
- package/dist/typography/Typography/typography.css +105 -41
- package/dist/typography/Typography/typography.d.ts +20 -0
- package/dist/typography/Typography/typography.d.ts.map +1 -1
- package/dist/typography/Typography/typography.js +11 -2
- package/dist/typography/Typography/typography.js.map +1 -1
- package/dist/typography/Typography/typography.module.scss.js +1 -1
- package/dist/typography-CTGVc_Gg.d.ts +41 -0
- package/dist/typography.d.ts +2 -2
- package/dist/ui/Alert/alert-provider.d.ts.map +1 -1
- package/dist/ui/Alert/alert-provider.js +1 -1
- package/dist/ui/Alert/alert-provider.js.map +1 -1
- package/dist/ui/Button/button-variants.d.ts +1 -0
- package/dist/ui/Button/button-variants.d.ts.map +1 -1
- package/dist/ui/Button/button-variants.js +3 -0
- package/dist/ui/Button/button-variants.js.map +1 -1
- package/dist/ui/Button/button.css +68 -14
- package/dist/ui/Button/button.d.ts.map +1 -1
- package/dist/ui/Button/button.js +2 -2
- package/dist/ui/Button/button.js.map +1 -1
- package/dist/ui/Button/button.module.scss.js +1 -1
- package/dist/ui/Chip/chip.css +32 -11
- package/dist/ui/Chip/chip.d.ts +16 -0
- package/dist/ui/Chip/chip.d.ts.map +1 -1
- package/dist/ui/Chip/chip.js +4 -2
- package/dist/ui/Chip/chip.js.map +1 -1
- package/dist/ui/CodeBlock/code-block.css +8 -3
- package/dist/ui/Dialog/dialog.css +70 -0
- package/dist/ui/Dialog/dialog.d.ts +45 -2
- package/dist/ui/Dialog/dialog.d.ts.map +1 -1
- package/dist/ui/Dialog/dialog.js +256 -7
- package/dist/ui/Dialog/dialog.js.map +1 -1
- package/dist/ui/Dialog/dialog.module.scss.js +1 -1
- package/dist/ui/Icon/icon.css +14 -7
- package/dist/ui/ProgressBar/progress-bar.css +10 -3
- package/dist/ui/StatCard/stat-card.css +13 -0
- package/dist/ui/StatCard/stat-card.d.ts +9 -0
- package/dist/ui/StatCard/stat-card.d.ts.map +1 -1
- package/dist/ui/StatCard/stat-card.js +2 -2
- package/dist/ui/StatCard/stat-card.js.map +1 -1
- package/dist/ui/StatusDot/status-dot.css +4 -1
- package/dist/ui/StepProgress/step-progress.css +12 -4
- package/dist/ui/Switch/switch.css +6 -2
- package/dist/ui/Tooltip/tooltip.d.ts.map +1 -1
- package/dist/ui/Tooltip/tooltip.js +1 -1
- package/dist/ui/Tooltip/tooltip.js.map +1 -1
- package/dist/ui.d.ts +3 -3
- package/dist/user/UserInfo/user-info.js +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/portal.d.ts +34 -0
- package/dist/utils/portal.d.ts.map +1 -0
- package/dist/utils/portal.js +40 -0
- package/dist/utils/portal.js.map +1 -0
- package/dist/utils.d.ts +35 -1
- package/dist/utils.js +1 -0
- package/dist/utils.js.map +1 -1
- package/package.json +4 -3
- package/src/styles/_mixins.scss +30 -0
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import cn from 'clsx';
|
|
3
|
+
import * as React from 'react';
|
|
4
|
+
import s from './app-content-bands.module.scss.js';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Publish the band's height on the content area, as a CSS custom property.
|
|
8
|
+
*
|
|
9
|
+
* Anything else that sticks to the top of the same scrollport has to clear the
|
|
10
|
+
* header, and its height is not a constant — it grows with a wrapped toolbar,
|
|
11
|
+
* an error line, an environment banner. So it is measured and written where
|
|
12
|
+
* CSS can read it: `--app-content-header-height`, on the nearest content area
|
|
13
|
+
* (or the document, if the band is used outside one).
|
|
14
|
+
*
|
|
15
|
+
* This is the one part of a sticky band that cannot be CSS: a rendered height
|
|
16
|
+
* is a number the stylesheet has no way to ask for.
|
|
17
|
+
*/
|
|
18
|
+
function usePublishedHeight(ref, property, enabled) {
|
|
19
|
+
React.useLayoutEffect(() => {
|
|
20
|
+
const el = ref.current;
|
|
21
|
+
if (!el || !enabled)
|
|
22
|
+
return undefined;
|
|
23
|
+
const target = el.closest('[data-slot="app-content"]') ??
|
|
24
|
+
document.documentElement;
|
|
25
|
+
const write = () => {
|
|
26
|
+
target.style.setProperty(property, `${el.getBoundingClientRect().height}px`);
|
|
27
|
+
};
|
|
28
|
+
write();
|
|
29
|
+
const observer = new ResizeObserver(write);
|
|
30
|
+
observer.observe(el);
|
|
31
|
+
return () => {
|
|
32
|
+
observer.disconnect();
|
|
33
|
+
target.style.removeProperty(property);
|
|
34
|
+
};
|
|
35
|
+
}, [ref, property, enabled]);
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* The band at the top of a content area, pinned while the page scrolls.
|
|
39
|
+
*
|
|
40
|
+
* Opaque on purpose: it paints over the content passing beneath it, and a
|
|
41
|
+
* translucent one shows the list sliding through the title.
|
|
42
|
+
*/
|
|
43
|
+
function AppContentHeader({ children, className, el, sticky = true, ...props }) {
|
|
44
|
+
const ref = React.useRef(null);
|
|
45
|
+
usePublishedHeight(ref, '--app-content-header-height', sticky);
|
|
46
|
+
const El = (el ?? 'header');
|
|
47
|
+
return (jsx(El, { ref: ref, "data-slot": 'app-content-header', className: cn(s['app-content-header'], !sticky && s['band-static'], className), ...props, children: children }));
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* The band at the foot of a content area — a search field, a toolbar, the
|
|
51
|
+
* action that commits the page.
|
|
52
|
+
*
|
|
53
|
+
* Sticky, not fixed: fixed is measured against the viewport, so in an app with
|
|
54
|
+
* a sidebar the band runs underneath it and has to be inset by hand for every
|
|
55
|
+
* layout the sidebar can be in. Sticky is measured against this content area,
|
|
56
|
+
* which is where it belongs, and it costs real space at the end of the scroll
|
|
57
|
+
* instead of needing the page padded to clear it.
|
|
58
|
+
*/
|
|
59
|
+
function AppContentFooter({ children, className, el, ...props }) {
|
|
60
|
+
const El = (el ?? 'footer');
|
|
61
|
+
return (jsx(El, { "data-slot": 'app-content-footer', className: cn(s['app-content-footer'], className), ...props, children: children }));
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
export { AppContentFooter, AppContentHeader };
|
|
65
|
+
//# sourceMappingURL=app-content-bands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-content-bands.js","sources":["../../../src/layout/AppContentBands/app-content-bands.tsx"],"sourcesContent":["import cn from 'clsx';\nimport * as React from 'react';\nimport s from './app-content-bands.module.scss';\n\nexport interface AppContentBandProps extends React.HTMLAttributes<HTMLDivElement> {\n /** The element to render. Defaults to `header` / `footer` respectively. */\n el?: React.ElementType<React.HTMLAttributes<HTMLDivElement>>;\n}\n\n/*\n * The header measures itself, so its element has to accept a ref — which the\n * bare `ElementType` union does not promise (it spans every tag, including the\n * ones whose ref is not an HTMLElement).\n */\ntype BandElement = React.ElementType<\n React.HTMLAttributes<HTMLElement> & { ref?: React.Ref<HTMLElement> }\n>;\n\n/**\n * Publish the band's height on the content area, as a CSS custom property.\n *\n * Anything else that sticks to the top of the same scrollport has to clear the\n * header, and its height is not a constant — it grows with a wrapped toolbar,\n * an error line, an environment banner. So it is measured and written where\n * CSS can read it: `--app-content-header-height`, on the nearest content area\n * (or the document, if the band is used outside one).\n *\n * This is the one part of a sticky band that cannot be CSS: a rendered height\n * is a number the stylesheet has no way to ask for.\n */\nfunction usePublishedHeight(\n ref: React.RefObject<HTMLElement | null>,\n property: string,\n enabled: boolean,\n) {\n React.useLayoutEffect(() => {\n const el = ref.current;\n if (!el || !enabled) return undefined;\n\n const target =\n (el.closest('[data-slot=\"app-content\"]') as HTMLElement | null) ??\n document.documentElement;\n\n const write = () => {\n target.style.setProperty(property, `${el.getBoundingClientRect().height}px`);\n };\n\n write();\n const observer = new ResizeObserver(write);\n observer.observe(el);\n return () => {\n observer.disconnect();\n target.style.removeProperty(property);\n };\n }, [ref, property, enabled]);\n}\n\n/**\n * The band at the top of a content area, pinned while the page scrolls.\n *\n * Opaque on purpose: it paints over the content passing beneath it, and a\n * translucent one shows the list sliding through the title.\n */\nexport function AppContentHeader({\n children, className, el, sticky = true, ...props\n}: AppContentBandProps & { sticky?: boolean }) {\n const ref = React.useRef<HTMLElement>(null);\n usePublishedHeight(ref, '--app-content-header-height', sticky);\n const El = (el ?? 'header') as BandElement;\n\n return (\n <El\n ref={ref}\n data-slot={'app-content-header'}\n className={cn(s['app-content-header'], !sticky && s['band-static'], className)}\n {...props}\n >\n {children}\n </El>\n );\n}\n\n/**\n * The band at the foot of a content area — a search field, a toolbar, the\n * action that commits the page.\n *\n * Sticky, not fixed: fixed is measured against the viewport, so in an app with\n * a sidebar the band runs underneath it and has to be inset by hand for every\n * layout the sidebar can be in. Sticky is measured against this content area,\n * which is where it belongs, and it costs real space at the end of the scroll\n * instead of needing the page padded to clear it.\n */\nexport function AppContentFooter({\n children, className, el, ...props\n}: AppContentBandProps) {\n const El = (el ?? 'footer') as React.ElementType<React.HTMLAttributes<HTMLDivElement>>;\n\n return (\n <El\n data-slot={'app-content-footer'}\n className={cn(s['app-content-footer'], className)}\n {...props}\n >\n {children}\n </El>\n );\n}\n"],"names":["_jsx"],"mappings":";;;;;AAkBA;;;;;;;;;;;AAWG;AACH,SAAS,kBAAkB,CACzB,GAAwC,EACxC,QAAgB,EAChB,OAAgB,EAAA;AAEhB,IAAA,KAAK,CAAC,eAAe,CAAC,MAAK;AACzB,QAAA,MAAM,EAAE,GAAG,GAAG,CAAC,OAAO;AACtB,QAAA,IAAI,CAAC,EAAE,IAAI,CAAC,OAAO;AAAE,YAAA,OAAO,SAAS;AAErC,QAAA,MAAM,MAAM,GACT,EAAE,CAAC,OAAO,CAAC,2BAA2B,CAAwB;YAC/D,QAAQ,CAAC,eAAe;QAE1B,MAAM,KAAK,GAAG,MAAK;AACjB,YAAA,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAA,EAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC,MAAM,CAAA,EAAA,CAAI,CAAC;AAC9E,QAAA,CAAC;AAED,QAAA,KAAK,EAAE;AACP,QAAA,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,KAAK,CAAC;AAC1C,QAAA,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;AACpB,QAAA,OAAO,MAAK;YACV,QAAQ,CAAC,UAAU,EAAE;AACrB,YAAA,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,QAAQ,CAAC;AACvC,QAAA,CAAC;IACH,CAAC,EAAE,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC9B;AAEA;;;;;AAKG;SACa,gBAAgB,CAAC,EAC/B,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,GAAG,IAAI,EAAE,GAAG,KAAK,EACL,EAAA;IAC3C,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAc,IAAI,CAAC;AAC3C,IAAA,kBAAkB,CAAC,GAAG,EAAE,6BAA6B,EAAE,MAAM,CAAC;AAC9D,IAAA,MAAM,EAAE,IAAI,EAAE,IAAI,QAAQ,CAAgB;AAE1C,IAAA,QACEA,GAAA,CAAC,EAAE,EAAA,EACD,GAAG,EAAE,GAAG,EAAA,WAAA,EACG,oBAAoB,EAC/B,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,aAAa,CAAC,EAAE,SAAS,CAAC,KAC1E,KAAK,EAAA,QAAA,EAER,QAAQ,EAAA,CACN;AAET;AAEA;;;;;;;;;AASG;AACG,SAAU,gBAAgB,CAAC,EAC/B,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,KAAK,EACb,EAAA;AACpB,IAAA,MAAM,EAAE,IAAI,EAAE,IAAI,QAAQ,CAA4D;IAEtF,QACEA,IAAC,EAAE,EAAA,EAAA,WAAA,EACU,oBAAoB,EAC/B,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC,EAAE,SAAS,CAAC,EAAA,GAC7C,KAAK,EAAA,QAAA,EAER,QAAQ,EAAA,CACN;AAET;;"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import './app-content-bands.css';
|
|
2
|
+
|
|
3
|
+
var s = {"app-content-header":"app-content-bands-module_app-content-header__BUehL","app-content-footer":"app-content-bands-module_app-content-footer__aQGGo","band-static":"app-content-bands-module_band-static__qgY7r"};
|
|
4
|
+
|
|
5
|
+
export { s as default };
|
|
6
|
+
//# sourceMappingURL=app-content-bands.module.scss.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-content-bands.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layout/AppContentBands/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
.app-content-footer-module_app-content-footer__B1kjp {
|
|
2
|
+
backdrop-filter: blur(12px);
|
|
3
|
+
background-color: color-mix(in srgb, var(--background-default) 88%, transparent);
|
|
4
|
+
border-top: 1px solid var(--divider);
|
|
5
|
+
flex: 0 0 auto;
|
|
6
|
+
margin-top: auto;
|
|
7
|
+
padding-bottom: env(safe-area-inset-bottom);
|
|
8
|
+
z-index: var(--z-sticky);
|
|
9
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export interface AppContentFooterProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
3
|
+
/** The element to render. Defaults to `footer`. */
|
|
4
|
+
el?: React.ElementType<React.HTMLAttributes<HTMLDivElement>>;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* The band at the foot of a content area — a search field, a toolbar, the
|
|
8
|
+
* action that commits the page.
|
|
9
|
+
*
|
|
10
|
+
* ⚠️ It must be a SIBLING of `AppContentMain`, not a child of it:
|
|
11
|
+
*
|
|
12
|
+
* ```tsx
|
|
13
|
+
* <AppContent>
|
|
14
|
+
* <AppSidebarHeader />
|
|
15
|
+
* <AppContentMain>{page}</AppContentMain>
|
|
16
|
+
* <AppContentFooter>{search}</AppContentFooter>
|
|
17
|
+
* </AppContent>
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* Nothing here is pinned. `AppContent` is a full-height column and only the
|
|
21
|
+
* middle band scrolls, so the foot of the column IS the foot of the screen and
|
|
22
|
+
* the band stays there by arithmetic rather than by being told to.
|
|
23
|
+
*
|
|
24
|
+
* It was `position: sticky; bottom: 0` inside the scrolling area, and that
|
|
25
|
+
* cannot work however the offsets are tuned: a sticky element travels only
|
|
26
|
+
* within its containing block, and a band that is the LAST child of the page it
|
|
27
|
+
* scrolls with has nothing below it to travel over. It docked on short pages,
|
|
28
|
+
* where there was no scrolling to survive, and scrolled away on long ones.
|
|
29
|
+
*
|
|
30
|
+
* Fixed positioning is the other wrong answer — it is measured against the
|
|
31
|
+
* viewport, so in an app with a sidebar the band runs underneath it and has to
|
|
32
|
+
* be inset by hand for every state the sidebar can be in.
|
|
33
|
+
*
|
|
34
|
+
* There is no matching header band; the shell's header is already a band of the
|
|
35
|
+
* same column, so it is always in view without being told to be.
|
|
36
|
+
*/
|
|
37
|
+
export declare function AppContentFooter({ children, className, el, ...props }: AppContentFooterProps): React.JSX.Element;
|
|
38
|
+
//# sourceMappingURL=app-content-footer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-content-footer.d.ts","sourceRoot":"","sources":["../../../src/layout/AppContentFooter/app-content-footer.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,WAAW,qBAAsB,SAAQ,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC;IACjF,mDAAmD;IACnD,EAAE,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC,CAAC;CAC9D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,qBAAqB,qBAY5F"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import cn from 'clsx';
|
|
3
|
+
import s from './app-content-footer.module.scss.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* The band at the foot of a content area — a search field, a toolbar, the
|
|
7
|
+
* action that commits the page.
|
|
8
|
+
*
|
|
9
|
+
* ⚠️ It must be a SIBLING of `AppContentMain`, not a child of it:
|
|
10
|
+
*
|
|
11
|
+
* ```tsx
|
|
12
|
+
* <AppContent>
|
|
13
|
+
* <AppSidebarHeader />
|
|
14
|
+
* <AppContentMain>{page}</AppContentMain>
|
|
15
|
+
* <AppContentFooter>{search}</AppContentFooter>
|
|
16
|
+
* </AppContent>
|
|
17
|
+
* ```
|
|
18
|
+
*
|
|
19
|
+
* Nothing here is pinned. `AppContent` is a full-height column and only the
|
|
20
|
+
* middle band scrolls, so the foot of the column IS the foot of the screen and
|
|
21
|
+
* the band stays there by arithmetic rather than by being told to.
|
|
22
|
+
*
|
|
23
|
+
* It was `position: sticky; bottom: 0` inside the scrolling area, and that
|
|
24
|
+
* cannot work however the offsets are tuned: a sticky element travels only
|
|
25
|
+
* within its containing block, and a band that is the LAST child of the page it
|
|
26
|
+
* scrolls with has nothing below it to travel over. It docked on short pages,
|
|
27
|
+
* where there was no scrolling to survive, and scrolled away on long ones.
|
|
28
|
+
*
|
|
29
|
+
* Fixed positioning is the other wrong answer — it is measured against the
|
|
30
|
+
* viewport, so in an app with a sidebar the band runs underneath it and has to
|
|
31
|
+
* be inset by hand for every state the sidebar can be in.
|
|
32
|
+
*
|
|
33
|
+
* There is no matching header band; the shell's header is already a band of the
|
|
34
|
+
* same column, so it is always in view without being told to be.
|
|
35
|
+
*/
|
|
36
|
+
function AppContentFooter({ children, className, el, ...props }) {
|
|
37
|
+
const El = (el ?? 'footer');
|
|
38
|
+
return (jsx(El, { "data-slot": 'app-content-footer', className: cn(s['app-content-footer'], className), ...props, children: children }));
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
export { AppContentFooter };
|
|
42
|
+
//# sourceMappingURL=app-content-footer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-content-footer.js","sources":["../../../src/layout/AppContentFooter/app-content-footer.tsx"],"sourcesContent":["import cn from 'clsx';\nimport * as React from 'react';\nimport s from './app-content-footer.module.scss';\n\nexport interface AppContentFooterProps extends React.HTMLAttributes<HTMLDivElement> {\n /** The element to render. Defaults to `footer`. */\n el?: React.ElementType<React.HTMLAttributes<HTMLDivElement>>;\n}\n\n/**\n * The band at the foot of a content area — a search field, a toolbar, the\n * action that commits the page.\n *\n * ⚠️ It must be a SIBLING of `AppContentMain`, not a child of it:\n *\n * ```tsx\n * <AppContent>\n * <AppSidebarHeader />\n * <AppContentMain>{page}</AppContentMain>\n * <AppContentFooter>{search}</AppContentFooter>\n * </AppContent>\n * ```\n *\n * Nothing here is pinned. `AppContent` is a full-height column and only the\n * middle band scrolls, so the foot of the column IS the foot of the screen and\n * the band stays there by arithmetic rather than by being told to.\n *\n * It was `position: sticky; bottom: 0` inside the scrolling area, and that\n * cannot work however the offsets are tuned: a sticky element travels only\n * within its containing block, and a band that is the LAST child of the page it\n * scrolls with has nothing below it to travel over. It docked on short pages,\n * where there was no scrolling to survive, and scrolled away on long ones.\n *\n * Fixed positioning is the other wrong answer — it is measured against the\n * viewport, so in an app with a sidebar the band runs underneath it and has to\n * be inset by hand for every state the sidebar can be in.\n *\n * There is no matching header band; the shell's header is already a band of the\n * same column, so it is always in view without being told to be.\n */\nexport function AppContentFooter({ children, className, el, ...props }: AppContentFooterProps) {\n const El = (el ?? 'footer') as React.ElementType<React.HTMLAttributes<HTMLDivElement>>;\n\n return (\n <El\n data-slot={'app-content-footer'}\n className={cn(s['app-content-footer'], className)}\n {...props}\n >\n {children}\n </El>\n );\n}\n"],"names":["_jsx"],"mappings":";;;;AASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BG;AACG,SAAU,gBAAgB,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,KAAK,EAAyB,EAAA;AAC3F,IAAA,MAAM,EAAE,IAAI,EAAE,IAAI,QAAQ,CAA4D;IAEtF,QACEA,IAAC,EAAE,EAAA,EAAA,WAAA,EACU,oBAAoB,EAC/B,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,oBAAoB,CAAC,EAAE,SAAS,CAAC,EAAA,GAC7C,KAAK,EAAA,QAAA,EAER,QAAQ,EAAA,CACN;AAET;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-content-footer.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layout/AppContentFooter/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export interface AppContentMainProps extends React.HTMLAttributes<HTMLElement> {
|
|
3
|
+
/** The element to render. Defaults to `main`. */
|
|
4
|
+
el?: React.ElementType<React.HTMLAttributes<HTMLElement>>;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* The scrolling middle band of a content area.
|
|
8
|
+
*
|
|
9
|
+
* `AppContent` is a column of exactly three bands — header, this, footer — and
|
|
10
|
+
* this is the only one that scrolls. It takes whatever height the other two
|
|
11
|
+
* leave and scrolls inside itself, so the bands above and below it are always
|
|
12
|
+
* on screen without being pinned there.
|
|
13
|
+
*
|
|
14
|
+
* That is why the footer does not need to be sticky, and why a page must not
|
|
15
|
+
* put its footer INSIDE this band hoping `position: sticky; bottom: 0` will
|
|
16
|
+
* dock it. A sticky element can only travel within its containing block, and a
|
|
17
|
+
* band that is the last child of the thing it scrolls in has no room below it
|
|
18
|
+
* to travel — it looks docked on a short page (where nothing scrolls anyway)
|
|
19
|
+
* and scrolls away on a long one, which is the case it was added for.
|
|
20
|
+
*
|
|
21
|
+
* The composition, and the only one that docks a footer:
|
|
22
|
+
*
|
|
23
|
+
* ```tsx
|
|
24
|
+
* <AppContent>
|
|
25
|
+
* <AppSidebarHeader />
|
|
26
|
+
* <AppContentMain>{page}</AppContentMain>
|
|
27
|
+
* <AppContentFooter>{search}</AppContentFooter>
|
|
28
|
+
* </AppContent>
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* A sticky band INSIDE the page still works, and now pins to this element
|
|
32
|
+
* rather than to the window — but note that sticky offsets are measured from
|
|
33
|
+
* the scroller's PADDING edge, so a band meant to sit flush against the top of
|
|
34
|
+
* the scrollport has to offset by this element's own padding.
|
|
35
|
+
*/
|
|
36
|
+
export declare function AppContentMain({ children, className, el, ...props }: AppContentMainProps): React.JSX.Element;
|
|
37
|
+
//# sourceMappingURL=app-content-main.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-content-main.d.ts","sourceRoot":"","sources":["../../../src/layout/AppContentMain/app-content-main.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,WAAW,mBAAoB,SAAQ,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC;IAC5E,iDAAiD;IACjD,EAAE,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC;CAC3D;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,cAAc,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,KAAK,EAAE,EAAE,mBAAmB,qBAQxF"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { jsx } from 'react/jsx-runtime';
|
|
2
|
+
import cn from 'clsx';
|
|
3
|
+
import s from './app-content-main.module.scss.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* The scrolling middle band of a content area.
|
|
7
|
+
*
|
|
8
|
+
* `AppContent` is a column of exactly three bands — header, this, footer — and
|
|
9
|
+
* this is the only one that scrolls. It takes whatever height the other two
|
|
10
|
+
* leave and scrolls inside itself, so the bands above and below it are always
|
|
11
|
+
* on screen without being pinned there.
|
|
12
|
+
*
|
|
13
|
+
* That is why the footer does not need to be sticky, and why a page must not
|
|
14
|
+
* put its footer INSIDE this band hoping `position: sticky; bottom: 0` will
|
|
15
|
+
* dock it. A sticky element can only travel within its containing block, and a
|
|
16
|
+
* band that is the last child of the thing it scrolls in has no room below it
|
|
17
|
+
* to travel — it looks docked on a short page (where nothing scrolls anyway)
|
|
18
|
+
* and scrolls away on a long one, which is the case it was added for.
|
|
19
|
+
*
|
|
20
|
+
* The composition, and the only one that docks a footer:
|
|
21
|
+
*
|
|
22
|
+
* ```tsx
|
|
23
|
+
* <AppContent>
|
|
24
|
+
* <AppSidebarHeader />
|
|
25
|
+
* <AppContentMain>{page}</AppContentMain>
|
|
26
|
+
* <AppContentFooter>{search}</AppContentFooter>
|
|
27
|
+
* </AppContent>
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* A sticky band INSIDE the page still works, and now pins to this element
|
|
31
|
+
* rather than to the window — but note that sticky offsets are measured from
|
|
32
|
+
* the scroller's PADDING edge, so a band meant to sit flush against the top of
|
|
33
|
+
* the scrollport has to offset by this element's own padding.
|
|
34
|
+
*/
|
|
35
|
+
function AppContentMain({ children, className, el, ...props }) {
|
|
36
|
+
const El = (el ?? 'main');
|
|
37
|
+
return (jsx(El, { "data-slot": 'app-content-main', className: cn(s['app-content-main'], className), ...props, children: children }));
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export { AppContentMain };
|
|
41
|
+
//# sourceMappingURL=app-content-main.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-content-main.js","sources":["../../../src/layout/AppContentMain/app-content-main.tsx"],"sourcesContent":["import cn from 'clsx';\nimport * as React from 'react';\nimport s from './app-content-main.module.scss';\n\nexport interface AppContentMainProps extends React.HTMLAttributes<HTMLElement> {\n /** The element to render. Defaults to `main`. */\n el?: React.ElementType<React.HTMLAttributes<HTMLElement>>;\n}\n\n/**\n * The scrolling middle band of a content area.\n *\n * `AppContent` is a column of exactly three bands — header, this, footer — and\n * this is the only one that scrolls. It takes whatever height the other two\n * leave and scrolls inside itself, so the bands above and below it are always\n * on screen without being pinned there.\n *\n * That is why the footer does not need to be sticky, and why a page must not\n * put its footer INSIDE this band hoping `position: sticky; bottom: 0` will\n * dock it. A sticky element can only travel within its containing block, and a\n * band that is the last child of the thing it scrolls in has no room below it\n * to travel — it looks docked on a short page (where nothing scrolls anyway)\n * and scrolls away on a long one, which is the case it was added for.\n *\n * The composition, and the only one that docks a footer:\n *\n * ```tsx\n * <AppContent>\n * <AppSidebarHeader />\n * <AppContentMain>{page}</AppContentMain>\n * <AppContentFooter>{search}</AppContentFooter>\n * </AppContent>\n * ```\n *\n * A sticky band INSIDE the page still works, and now pins to this element\n * rather than to the window — but note that sticky offsets are measured from\n * the scroller's PADDING edge, so a band meant to sit flush against the top of\n * the scrollport has to offset by this element's own padding.\n */\nexport function AppContentMain({ children, className, el, ...props }: AppContentMainProps) {\n const El = (el ?? 'main') as React.ElementType<React.HTMLAttributes<HTMLElement>>;\n\n return (\n <El data-slot={'app-content-main'} className={cn(s['app-content-main'], className)} {...props}>\n {children}\n </El>\n );\n}\n"],"names":["_jsx"],"mappings":";;;;AASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BG;AACG,SAAU,cAAc,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,KAAK,EAAuB,EAAA;AACvF,IAAA,MAAM,EAAE,IAAI,EAAE,IAAI,MAAM,CAAyD;IAEjF,QACEA,IAAC,EAAE,EAAA,EAAA,WAAA,EAAY,kBAAkB,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,EAAE,SAAS,CAAC,EAAA,GAAM,KAAK,EAAA,QAAA,EAC1F,QAAQ,EAAA,CACN;AAET;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-content-main.module.scss.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/layout/AppContentMain/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import * as React from 'react';
|
|
2
3
|
import { useSidebar } from '../../hooks/layout/use-sidebar.js';
|
|
3
4
|
import '../../ui/Alert/alert-context.js';
|
|
4
|
-
import * as React from 'react';
|
|
5
5
|
import '../../ui/Table/table-sort-context.js';
|
|
6
6
|
import { Row } from '../Row/row.js';
|
|
7
7
|
import { Link } from '../../navigation/Link/link.js';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import 'react';
|
|
2
3
|
import { useSidebar } from '../../hooks/layout/use-sidebar.js';
|
|
3
4
|
import '../../ui/Alert/alert-context.js';
|
|
4
|
-
import 'react';
|
|
5
5
|
import '../../ui/Table/table-sort-context.js';
|
|
6
6
|
import { useMobileNavigation } from '../../hooks/use-mobile-navigation.js';
|
|
7
7
|
import { useRouterAdapter } from '../../navigation/Router/router-context.js';
|
|
@@ -61,7 +61,7 @@ function AppSidebar({ logo, homeHref = '/dashboard', currentPath = '', linkCompo
|
|
|
61
61
|
return (jsxs(Fragment, { children: [jsxs(Sidebar, { "data-slot": 'app-sidebar', collapsible: 'icon', variant: 'inset', children: [jsx(SidebarHeader, { children: jsx(SidebarMenu, { children: jsx(SidebarMenuItem, { children: jsx(SidebarMenuButton, { size: 'lg', asChild: true, children: LinkComp ? (jsx(LinkComp, { href: homeHref, onClick: handleNavigation, children: logo })) : (jsx("a", { href: homeHref, onClick: handleNavigation, children: logo })) }) }) }) }), jsx(SidebarContent, { children: sections.map(section => (jsxs(SidebarGroup, { children: [jsx(SidebarGroupLabel, { children: section.label }), jsx(SidebarMenu, { children: section.items.map(item => {
|
|
62
62
|
const isActive = item.href === bestMatch;
|
|
63
63
|
if (section.renderItem) {
|
|
64
|
-
return (jsx(SidebarMenuItem, { children: section.renderItem(item, { isActive }) }, item.title));
|
|
64
|
+
return (jsx(SidebarMenuItem, { children: section.renderItem(item, { isActive, onNavigate: handleNavigation }) }, item.title));
|
|
65
65
|
}
|
|
66
66
|
return (jsx(SidebarMenuItem, { children: jsx(SidebarMenuButton, { asChild: true, isActive: isActive, tooltip: { children: item.title }, children: jsx(NavLink, { item: item, linkComponent: LinkComp, onNavigate: handleNavigation }) }) }, item.title));
|
|
67
67
|
}) })] }, section.label))) }), footerItems?.length ? (jsxs(Fragment, { children: [footerSeparator && jsx(Separator, {}), jsx(SidebarFooter, { children: jsx(SidebarMenu, { children: footerItems.map(item => (jsx(SidebarMenuItem, { children: jsx(SidebarMenuButton, { asChild: true, isActive: item.href === bestMatch, tooltip: { children: item.title }, children: jsx(NavLink, { item: item, linkComponent: LinkComp, onNavigate: handleNavigation }) }) }, item.title))) }) })] })) : null] }), children] }));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-sidebar.js","sources":["../../../src/layout/AppSidebar/app-sidebar.tsx"],"sourcesContent":["import { useSidebar } from '@constellation/hooks';\nimport { useMobileNavigation } from '@constellation/hooks/use-mobile-navigation';\nimport { useRouterAdapter } from '@constellation/navigation/Router';\nimport { type SidebarNavItem, type SidebarSection } from '@constellation/types';\nimport { Separator } from '@constellation/ui/Separator';\nimport * as React from 'react';\nimport { flushSync } from 'react-dom';\nimport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n} from '../Sidebar';\n\nexport interface AppSidebarProps {\n logo: React.ReactNode;\n homeHref?: string;\n currentPath?: string;\n linkComponent?: React.ElementType;\n sections: SidebarSection[];\n footerItems?: SidebarNavItem[];\n footerSeparator?: boolean;\n children?: React.ReactNode;\n}\n\ntype NavLinkProps = {\n item: SidebarNavItem;\n linkComponent?: React.ElementType;\n onNavigate?: (event: React.MouseEvent<HTMLAnchorElement>) => void;\n} & React.AnchorHTMLAttributes<HTMLAnchorElement>;\n\nfunction NavLink({ item, linkComponent: LinkComp, onNavigate, onClick, ...props }: NavLinkProps) {\n const handleClick = (event: React.MouseEvent<HTMLAnchorElement>) => {\n onClick?.(event);\n if (event.defaultPrevented) {\n return;\n }\n\n onNavigate?.(event);\n };\n\n if (item.href.startsWith('http')) {\n return (\n <a\n href={item.href}\n target={'_blank'}\n rel={'noopener noreferrer'}\n onClick={handleClick}\n {...props}\n >\n {item.icon}\n <span>{item.title}</span>\n <span className={'srOnly'}>(opens in new tab)</span>\n </a>\n );\n }\n\n if (!LinkComp) {\n return (\n <a href={item.href} onClick={handleClick} {...props}>\n {item.icon}\n <span>{item.title}</span>\n </a>\n );\n }\n\n return (\n <LinkComp href={item.href} onClick={handleClick} {...props}>\n {item.icon}\n <span>{item.title}</span>\n </LinkComp>\n );\n}\n\nexport function AppSidebar({\n logo,\n homeHref = '/dashboard',\n currentPath = '',\n linkComponent,\n sections,\n footerItems,\n footerSeparator,\n children,\n}: AppSidebarProps) {\n const { isMobile, openMobile, setOpenMobile } = useSidebar();\n // Falls back to the RouterProvider's link component, so configuring the\n // router once upgrades the whole sidebar without threading a prop here.\n const { linkComponent: adapterLink } = useRouterAdapter();\n const LinkComp = linkComponent ?? adapterLink;\n const cleanupMobileNavigation = useMobileNavigation();\n const allHrefs = [\n ...sections.flatMap(s => s.items.map(i => i.href)),\n ...(footerItems ?? []).map(i => i.href),\n ];\n const bestMatch =\n allHrefs\n .filter(\n href =>\n currentPath === href ||\n currentPath.startsWith(href + '/') ||\n currentPath.startsWith(href + '?'),\n )\n .sort((a, b) => b.length - a.length)[0] ?? '';\n\n const handleNavigation = (event: React.MouseEvent<HTMLAnchorElement>) => {\n if (!isMobile || !openMobile || event.button !== 0) {\n return;\n }\n\n if (event.metaKey || event.altKey || event.ctrlKey || event.shiftKey) {\n return;\n }\n\n const currentTarget = event.currentTarget;\n const target = currentTarget.getAttribute('target');\n if ((target && target.toLowerCase() !== '_self') || currentTarget.hasAttribute('download')) {\n return;\n }\n\n flushSync(() => {\n setOpenMobile(false);\n });\n cleanupMobileNavigation();\n };\n\n return (\n <>\n <Sidebar data-slot={'app-sidebar'} collapsible={'icon'} variant={'inset'}>\n <SidebarHeader>\n <SidebarMenu>\n <SidebarMenuItem>\n <SidebarMenuButton size={'lg'} asChild>\n {LinkComp ? (\n <LinkComp href={homeHref} onClick={handleNavigation}>\n {logo}\n </LinkComp>\n ) : (\n <a href={homeHref} onClick={handleNavigation}>\n {logo}\n </a>\n )}\n </SidebarMenuButton>\n </SidebarMenuItem>\n </SidebarMenu>\n </SidebarHeader>\n <SidebarContent>\n {sections.map(section => (\n <SidebarGroup key={section.label}>\n <SidebarGroupLabel>{section.label}</SidebarGroupLabel>\n <SidebarMenu>\n {section.items.map(item => {\n const isActive = item.href === bestMatch;\n\n if (section.renderItem) {\n return (\n <SidebarMenuItem key={item.title}>\n {section.renderItem(item, { isActive })}\n </SidebarMenuItem>\n );\n }\n\n return (\n <SidebarMenuItem key={item.title}>\n <SidebarMenuButton\n asChild\n isActive={isActive}\n tooltip={{ children: item.title }}\n >\n <NavLink\n item={item}\n linkComponent={LinkComp}\n onNavigate={handleNavigation}\n />\n </SidebarMenuButton>\n </SidebarMenuItem>\n );\n })}\n </SidebarMenu>\n </SidebarGroup>\n ))}\n </SidebarContent>\n {footerItems?.length ? (\n <>\n {footerSeparator && <Separator />}\n <SidebarFooter>\n <SidebarMenu>\n {footerItems.map(item => (\n <SidebarMenuItem key={item.title}>\n <SidebarMenuButton\n asChild\n isActive={item.href === bestMatch}\n tooltip={{ children: item.title }}\n >\n <NavLink item={item} linkComponent={LinkComp} onNavigate={handleNavigation} />\n </SidebarMenuButton>\n </SidebarMenuItem>\n ))}\n </SidebarMenu>\n </SidebarFooter>\n </>\n ) : null}\n </Sidebar>\n {children}\n </>\n );\n}\n"],"names":["_jsxs","_jsx","_Fragment"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"app-sidebar.js","sources":["../../../src/layout/AppSidebar/app-sidebar.tsx"],"sourcesContent":["import { useSidebar } from '@constellation/hooks';\nimport { useMobileNavigation } from '@constellation/hooks/use-mobile-navigation';\nimport { useRouterAdapter } from '@constellation/navigation/Router';\nimport { type SidebarNavItem, type SidebarSection } from '@constellation/types';\nimport { Separator } from '@constellation/ui/Separator';\nimport * as React from 'react';\nimport { flushSync } from 'react-dom';\nimport {\n Sidebar,\n SidebarContent,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarMenu,\n SidebarMenuButton,\n SidebarMenuItem,\n} from '../Sidebar';\n\nexport interface AppSidebarProps {\n logo: React.ReactNode;\n homeHref?: string;\n currentPath?: string;\n linkComponent?: React.ElementType;\n sections: SidebarSection[];\n footerItems?: SidebarNavItem[];\n footerSeparator?: boolean;\n children?: React.ReactNode;\n}\n\ntype NavLinkProps = {\n item: SidebarNavItem;\n linkComponent?: React.ElementType;\n onNavigate?: (event: React.MouseEvent<HTMLAnchorElement>) => void;\n} & React.AnchorHTMLAttributes<HTMLAnchorElement>;\n\nfunction NavLink({ item, linkComponent: LinkComp, onNavigate, onClick, ...props }: NavLinkProps) {\n const handleClick = (event: React.MouseEvent<HTMLAnchorElement>) => {\n onClick?.(event);\n if (event.defaultPrevented) {\n return;\n }\n\n onNavigate?.(event);\n };\n\n if (item.href.startsWith('http')) {\n return (\n <a\n href={item.href}\n target={'_blank'}\n rel={'noopener noreferrer'}\n onClick={handleClick}\n {...props}\n >\n {item.icon}\n <span>{item.title}</span>\n <span className={'srOnly'}>(opens in new tab)</span>\n </a>\n );\n }\n\n if (!LinkComp) {\n return (\n <a href={item.href} onClick={handleClick} {...props}>\n {item.icon}\n <span>{item.title}</span>\n </a>\n );\n }\n\n return (\n <LinkComp href={item.href} onClick={handleClick} {...props}>\n {item.icon}\n <span>{item.title}</span>\n </LinkComp>\n );\n}\n\nexport function AppSidebar({\n logo,\n homeHref = '/dashboard',\n currentPath = '',\n linkComponent,\n sections,\n footerItems,\n footerSeparator,\n children,\n}: AppSidebarProps) {\n const { isMobile, openMobile, setOpenMobile } = useSidebar();\n // Falls back to the RouterProvider's link component, so configuring the\n // router once upgrades the whole sidebar without threading a prop here.\n const { linkComponent: adapterLink } = useRouterAdapter();\n const LinkComp = linkComponent ?? adapterLink;\n const cleanupMobileNavigation = useMobileNavigation();\n const allHrefs = [\n ...sections.flatMap(s => s.items.map(i => i.href)),\n ...(footerItems ?? []).map(i => i.href),\n ];\n const bestMatch =\n allHrefs\n .filter(\n href =>\n currentPath === href ||\n currentPath.startsWith(href + '/') ||\n currentPath.startsWith(href + '?'),\n )\n .sort((a, b) => b.length - a.length)[0] ?? '';\n\n const handleNavigation = (event: React.MouseEvent<HTMLAnchorElement>) => {\n if (!isMobile || !openMobile || event.button !== 0) {\n return;\n }\n\n if (event.metaKey || event.altKey || event.ctrlKey || event.shiftKey) {\n return;\n }\n\n const currentTarget = event.currentTarget;\n const target = currentTarget.getAttribute('target');\n if ((target && target.toLowerCase() !== '_self') || currentTarget.hasAttribute('download')) {\n return;\n }\n\n flushSync(() => {\n setOpenMobile(false);\n });\n cleanupMobileNavigation();\n };\n\n return (\n <>\n <Sidebar data-slot={'app-sidebar'} collapsible={'icon'} variant={'inset'}>\n <SidebarHeader>\n <SidebarMenu>\n <SidebarMenuItem>\n <SidebarMenuButton size={'lg'} asChild>\n {LinkComp ? (\n <LinkComp href={homeHref} onClick={handleNavigation}>\n {logo}\n </LinkComp>\n ) : (\n <a href={homeHref} onClick={handleNavigation}>\n {logo}\n </a>\n )}\n </SidebarMenuButton>\n </SidebarMenuItem>\n </SidebarMenu>\n </SidebarHeader>\n <SidebarContent>\n {sections.map(section => (\n <SidebarGroup key={section.label}>\n <SidebarGroupLabel>{section.label}</SidebarGroupLabel>\n <SidebarMenu>\n {section.items.map(item => {\n const isActive = item.href === bestMatch;\n\n if (section.renderItem) {\n return (\n <SidebarMenuItem key={item.title}>\n {section.renderItem(item, { isActive, onNavigate: handleNavigation })}\n </SidebarMenuItem>\n );\n }\n\n return (\n <SidebarMenuItem key={item.title}>\n <SidebarMenuButton\n asChild\n isActive={isActive}\n tooltip={{ children: item.title }}\n >\n <NavLink\n item={item}\n linkComponent={LinkComp}\n onNavigate={handleNavigation}\n />\n </SidebarMenuButton>\n </SidebarMenuItem>\n );\n })}\n </SidebarMenu>\n </SidebarGroup>\n ))}\n </SidebarContent>\n {footerItems?.length ? (\n <>\n {footerSeparator && <Separator />}\n <SidebarFooter>\n <SidebarMenu>\n {footerItems.map(item => (\n <SidebarMenuItem key={item.title}>\n <SidebarMenuButton\n asChild\n isActive={item.href === bestMatch}\n tooltip={{ children: item.title }}\n >\n <NavLink item={item} linkComponent={LinkComp} onNavigate={handleNavigation} />\n </SidebarMenuButton>\n </SidebarMenuItem>\n ))}\n </SidebarMenu>\n </SidebarFooter>\n </>\n ) : null}\n </Sidebar>\n {children}\n </>\n );\n}\n"],"names":["_jsxs","_jsx","_Fragment"],"mappings":";;;;;;;;;;;AAoCA,SAAS,OAAO,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,KAAK,EAAgB,EAAA;AAC7F,IAAA,MAAM,WAAW,GAAG,CAAC,KAA0C,KAAI;AACjE,QAAA,OAAO,GAAG,KAAK,CAAC;AAChB,QAAA,IAAI,KAAK,CAAC,gBAAgB,EAAE;YAC1B;QACF;AAEA,QAAA,UAAU,GAAG,KAAK,CAAC;AACrB,IAAA,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;AAChC,QAAA,QACEA,IAAA,CAAA,GAAA,EAAA,EACE,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,MAAM,EAAE,QAAQ,EAChB,GAAG,EAAE,qBAAqB,EAC1B,OAAO,EAAE,WAAW,EAAA,GAChB,KAAK,aAER,IAAI,CAAC,IAAI,EACVC,GAAA,CAAA,MAAA,EAAA,EAAA,QAAA,EAAO,IAAI,CAAC,KAAK,EAAA,CAAQ,EACzBA,cAAM,SAAS,EAAE,QAAQ,EAAA,QAAA,EAAA,oBAAA,EAAA,CAA2B,CAAA,EAAA,CAClD;IAER;IAEA,IAAI,CAAC,QAAQ,EAAE;QACb,QACED,IAAA,CAAA,GAAA,EAAA,EAAG,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,EAAA,GAAM,KAAK,EAAA,QAAA,EAAA,CAChD,IAAI,CAAC,IAAI,EACVC,GAAA,CAAA,MAAA,EAAA,EAAA,QAAA,EAAO,IAAI,CAAC,KAAK,EAAA,CAAQ,CAAA,EAAA,CACvB;IAER;IAEA,QACED,IAAA,CAAC,QAAQ,EAAA,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,WAAW,EAAA,GAAM,KAAK,EAAA,QAAA,EAAA,CACvD,IAAI,CAAC,IAAI,EACVC,GAAA,CAAA,MAAA,EAAA,EAAA,QAAA,EAAO,IAAI,CAAC,KAAK,EAAA,CAAQ,CAAA,EAAA,CAChB;AAEf;AAEM,SAAU,UAAU,CAAC,EACzB,IAAI,EACJ,QAAQ,GAAG,YAAY,EACvB,WAAW,GAAG,EAAE,EAChB,aAAa,EACb,QAAQ,EACR,WAAW,EACX,eAAe,EACf,QAAQ,GACQ,EAAA;IAChB,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,UAAU,EAAE;;;IAG5D,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,GAAG,gBAAgB,EAAE;AACzD,IAAA,MAAM,QAAQ,GAAG,aAAa,IAAI,WAAW;AAC7C,IAAA,MAAM,uBAAuB,GAAG,mBAAmB,EAAE;AACrD,IAAA,MAAM,QAAQ,GAAG;QACf,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC;AAClD,QAAA,GAAG,CAAC,WAAW,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;KACxC;IACD,MAAM,SAAS,GACb;AACG,SAAA,MAAM,CACL,IAAI,IACF,WAAW,KAAK,IAAI;AACpB,QAAA,WAAW,CAAC,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC;AAClC,QAAA,WAAW,CAAC,UAAU,CAAC,IAAI,GAAG,GAAG,CAAC;SAErC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;AAEjD,IAAA,MAAM,gBAAgB,GAAG,CAAC,KAA0C,KAAI;AACtE,QAAA,IAAI,CAAC,QAAQ,IAAI,CAAC,UAAU,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;YAClD;QACF;AAEA,QAAA,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE;YACpE;QACF;AAEA,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,aAAa;QACzC,MAAM,MAAM,GAAG,aAAa,CAAC,YAAY,CAAC,QAAQ,CAAC;AACnD,QAAA,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,OAAO,KAAK,aAAa,CAAC,YAAY,CAAC,UAAU,CAAC,EAAE;YAC1F;QACF;QAEA,SAAS,CAAC,MAAK;YACb,aAAa,CAAC,KAAK,CAAC;AACtB,QAAA,CAAC,CAAC;AACF,QAAA,uBAAuB,EAAE;AAC3B,IAAA,CAAC;IAED,QACED,4BACEA,IAAA,CAAC,OAAO,iBAAY,aAAa,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAA,QAAA,EAAA,CACtEC,GAAA,CAAC,aAAa,EAAA,EAAA,QAAA,EACZA,IAAC,WAAW,EAAA,EAAA,QAAA,EACVA,GAAA,CAAC,eAAe,EAAA,EAAA,QAAA,EACdA,GAAA,CAAC,iBAAiB,EAAA,EAAC,IAAI,EAAE,IAAI,EAAE,OAAO,kBACnC,QAAQ,IACPA,GAAA,CAAC,QAAQ,EAAA,EAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAA,QAAA,EAChD,IAAI,EAAA,CACI,KAEXA,GAAA,CAAA,GAAA,EAAA,EAAG,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,gBAAgB,EAAA,QAAA,EACzC,IAAI,EAAA,CACH,CACL,EAAA,CACiB,EAAA,CACJ,EAAA,CACN,EAAA,CACA,EAChBA,GAAA,CAAC,cAAc,EAAA,EAAA,QAAA,EACZ,QAAQ,CAAC,GAAG,CAAC,OAAO,KACnBD,IAAA,CAAC,YAAY,EAAA,EAAA,QAAA,EAAA,CACXC,IAAC,iBAAiB,EAAA,EAAA,QAAA,EAAE,OAAO,CAAC,KAAK,EAAA,CAAqB,EACtDA,GAAA,CAAC,WAAW,EAAA,EAAA,QAAA,EACT,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAG;AACxB,wCAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,KAAK,SAAS;AAExC,wCAAA,IAAI,OAAO,CAAC,UAAU,EAAE;4CACtB,QACEA,GAAA,CAAC,eAAe,EAAA,EAAA,QAAA,EACb,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC,EAAA,EADjD,IAAI,CAAC,KAAK,CAEd;wCAEtB;wCAEA,QACEA,IAAC,eAAe,EAAA,EAAA,QAAA,EACdA,IAAC,iBAAiB,EAAA,EAChB,OAAO,EAAA,IAAA,EACP,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,YAEjCA,GAAA,CAAC,OAAO,IACN,IAAI,EAAE,IAAI,EACV,aAAa,EAAE,QAAQ,EACvB,UAAU,EAAE,gBAAgB,GAC5B,EAAA,CACgB,EAAA,EAXA,IAAI,CAAC,KAAK,CAYd;oCAEtB,CAAC,CAAC,GACU,CAAA,EAAA,EA9BG,OAAO,CAAC,KAAK,CA+BjB,CAChB,CAAC,EAAA,CACa,EAChB,WAAW,EAAE,MAAM,IAClBD,IAAA,CAAAE,QAAA,EAAA,EAAA,QAAA,EAAA,CACG,eAAe,IAAID,GAAA,CAAC,SAAS,EAAA,EAAA,CAAG,EACjCA,GAAA,CAAC,aAAa,cACZA,GAAA,CAAC,WAAW,cACT,WAAW,CAAC,GAAG,CAAC,IAAI,KACnBA,GAAA,CAAC,eAAe,EAAA,EAAA,QAAA,EACdA,GAAA,CAAC,iBAAiB,EAAA,EAChB,OAAO,EAAA,IAAA,EACP,QAAQ,EAAE,IAAI,CAAC,IAAI,KAAK,SAAS,EACjC,OAAO,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,KAAK,EAAE,EAAA,QAAA,EAEjCA,GAAA,CAAC,OAAO,EAAA,EAAC,IAAI,EAAE,IAAI,EAAE,aAAa,EAAE,QAAQ,EAAE,UAAU,EAAE,gBAAgB,GAAI,EAAA,CAC5D,EAAA,EAPA,IAAI,CAAC,KAAK,CAQd,CACnB,CAAC,EAAA,CACU,GACA,CAAA,EAAA,CACf,IACD,IAAI,IACA,EACT,QAAQ,CAAA,EAAA,CACR;AAEP;;"}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
.app-sidebar-header-module_app-sidebar-header__h-3UU {
|
|
2
2
|
border-bottom: 1px solid var(--sidebar-border);
|
|
3
3
|
flex-shrink: 0;
|
|
4
|
-
|
|
5
|
-
padding: 0 var(--size-1);
|
|
4
|
+
padding: 0 var(--size-0-5);
|
|
6
5
|
transition: all var(--sidebar-transition-duration) var(--sidebar-transition-ease);
|
|
7
6
|
}
|
|
8
7
|
@media (min-width: 769px) {
|
|
9
8
|
.app-sidebar-header-module_app-sidebar-header__h-3UU {
|
|
10
|
-
padding: 0 var(--size-
|
|
9
|
+
padding: 0 var(--size-1);
|
|
11
10
|
}
|
|
12
11
|
}
|
|
13
12
|
.app-sidebar-header-module_app-sidebar-header__h-3UU {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type NavUserProps } from '@constellation/navigation/NavUser';
|
|
2
2
|
import { type BreadcrumbItemData } from '@constellation/types';
|
|
3
3
|
import * as React from 'react';
|
|
4
|
-
export interface AppSidebarHeaderProps {
|
|
4
|
+
export interface AppSidebarHeaderProps extends React.HTMLAttributes<HTMLElement> {
|
|
5
5
|
breadcrumbs?: BreadcrumbItemData[];
|
|
6
6
|
/** Omit to hide the account menu (e.g. on signed-out chrome). */
|
|
7
7
|
user?: NavUserProps['user'];
|
|
@@ -9,5 +9,13 @@ export interface AppSidebarHeaderProps {
|
|
|
9
9
|
/** Extra controls between the appearance toggle and the account menu. */
|
|
10
10
|
actions?: React.ReactNode;
|
|
11
11
|
}
|
|
12
|
-
|
|
12
|
+
/**
|
|
13
|
+
* The header band of a content area.
|
|
14
|
+
*
|
|
15
|
+
* `className` and any other DOM props reach the `header` element. They used to
|
|
16
|
+
* be dropped on the floor — the component took four named props and spread
|
|
17
|
+
* nothing — so a caller passing `className` got no error and no class, and
|
|
18
|
+
* spent the difference looking at its own stylesheet.
|
|
19
|
+
*/
|
|
20
|
+
export declare function AppSidebarHeader({ breadcrumbs, user, userMenu, actions, className, ...props }: AppSidebarHeaderProps): React.JSX.Element;
|
|
13
21
|
//# sourceMappingURL=app-sidebar-header.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-sidebar-header.d.ts","sourceRoot":"","sources":["../../../src/layout/AppSidebarHeader/app-sidebar-header.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAE/E,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"app-sidebar-header.d.ts","sourceRoot":"","sources":["../../../src/layout/AppSidebarHeader/app-sidebar-header.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,mCAAmC,CAAC;AAE/E,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,WAAW,qBAAsB,SAAQ,KAAK,CAAC,cAAc,CAAC,WAAW,CAAC;IAC9E,WAAW,CAAC,EAAE,kBAAkB,EAAE,CAAC;IACnC,iEAAiE;IACjE,IAAI,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;IAC5B,QAAQ,CAAC,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IACtC,yEAAyE;IACzE,OAAO,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,WAAgB,EAChB,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,SAAS,EACT,GAAG,KAAK,EACT,EAAE,qBAAqB,qBA4BvB"}
|
|
@@ -1,47 +1,27 @@
|
|
|
1
1
|
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
2
|
+
import 'react';
|
|
2
3
|
import { useSidebar } from '../../hooks/layout/use-sidebar.js';
|
|
3
4
|
import '../../ui/Alert/alert-context.js';
|
|
4
|
-
import 'react';
|
|
5
5
|
import '../../ui/Table/table-sort-context.js';
|
|
6
6
|
import { Row } from '../Row/row.js';
|
|
7
7
|
import { SidebarTrigger } from '../Sidebar/sidebar.js';
|
|
8
8
|
import { Breadcrumbs } from '../../navigation/Breadcrumbs/breadcrumbs.js';
|
|
9
9
|
import { NavUser } from '../../navigation/NavUser/nav-user.js';
|
|
10
|
-
import { AppearanceToggleDropdown } from '../../settings/AppearanceDropdown/appearance-dropdown.js';
|
|
11
|
-
import '../../ui/Alert/alert.js';
|
|
12
|
-
import 'react-dom';
|
|
13
|
-
import '../../ui/Alert/alert.css';
|
|
14
|
-
import '../../ui/Avatar/avatar.js';
|
|
15
|
-
import '../../ui/Button/button.js';
|
|
16
|
-
import '../../ui/Chip/chip.js';
|
|
17
|
-
import '../../ui/CodeBlock/code-block.js';
|
|
18
10
|
import cn from 'clsx';
|
|
19
|
-
import '../../ui/DevIndicator/dev-indicator.css';
|
|
20
|
-
import '../../ui/Dialog/dialog.js';
|
|
21
|
-
import '../../ui/EmptyState/empty-state.js';
|
|
22
|
-
import '../../ui/Icon/icon.js';
|
|
23
|
-
import '../../ui/List/list.js';
|
|
24
|
-
import '../../ui/Pagination/pagination.js';
|
|
25
|
-
import '../../ui/ProgressBar/progress-bar.js';
|
|
26
|
-
import '../../ui/Separator/separator.js';
|
|
27
|
-
import '../../ui/StatCard/stat-card.js';
|
|
28
|
-
import '../../ui/StatusDot/status-dot.js';
|
|
29
|
-
import '../../ui/StatusDot/status-dot-variants.js';
|
|
30
|
-
import '../../ui/StepProgress/step-progress.js';
|
|
31
|
-
import '../../ui/Switch/switch.js';
|
|
32
|
-
import '../../ui/Table/table.js';
|
|
33
|
-
import '../../ui/TableActionCell/table-action-cell.js';
|
|
34
|
-
import '../../ui/TableToolbar/table-toolbar.js';
|
|
35
|
-
import '../../ui/Toggle/toggle.js';
|
|
36
|
-
import '../../ui/ToggleGroup/toggle-group.js';
|
|
37
|
-
import '../../ui/Tooltip/tooltip.js';
|
|
38
|
-
import 'lucide-react';
|
|
39
|
-
import '../../settings/AppearanceTabs/appearance-tabs.css';
|
|
40
11
|
import s from './app-sidebar-header.module.scss.js';
|
|
12
|
+
import { AppearanceToggleDropdown } from '../../settings/AppearanceDropdown/appearance-dropdown.js';
|
|
41
13
|
|
|
42
|
-
|
|
14
|
+
/**
|
|
15
|
+
* The header band of a content area.
|
|
16
|
+
*
|
|
17
|
+
* `className` and any other DOM props reach the `header` element. They used to
|
|
18
|
+
* be dropped on the floor — the component took four named props and spread
|
|
19
|
+
* nothing — so a caller passing `className` got no error and no class, and
|
|
20
|
+
* spent the difference looking at its own stylesheet.
|
|
21
|
+
*/
|
|
22
|
+
function AppSidebarHeader({ breadcrumbs = [], user, userMenu, actions, className, ...props }) {
|
|
43
23
|
const { state } = useSidebar();
|
|
44
|
-
return (jsxs(Row, { "data-slot": 'app-sidebar-header', el: 'header', align: 'center', gap: 1, justify: 'space-between', className: cn(s['app-sidebar-header'], state === 'collapsed' && s['sidebar-header-collapsed']), children: [jsxs(Row, { gap: 1, children: [jsx(SidebarTrigger, {}), jsx(Breadcrumbs, { breadcrumbs: breadcrumbs })] }), jsxs(Row, { gap: 1, align: 'center', children: [actions, jsx(AppearanceToggleDropdown, {}), user && jsx(NavUser, { user: user, ...userMenu })] })] }));
|
|
24
|
+
return (jsxs(Row, { "data-slot": 'app-sidebar-header', el: 'header', align: 'center', gap: 1, justify: 'space-between', className: cn(s['app-sidebar-header'], state === 'collapsed' && s['sidebar-header-collapsed'], className), ...props, children: [jsxs(Row, { gap: 1, children: [jsx(SidebarTrigger, {}), jsx(Breadcrumbs, { breadcrumbs: breadcrumbs })] }), jsxs(Row, { gap: 1, align: 'center', children: [actions, jsx(AppearanceToggleDropdown, {}), user && jsx(NavUser, { user: user, ...userMenu })] })] }));
|
|
45
25
|
}
|
|
46
26
|
|
|
47
27
|
export { AppSidebarHeader };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-sidebar-header.js","sources":["../../../src/layout/AppSidebarHeader/app-sidebar-header.tsx"],"sourcesContent":["import { useSidebar } from '@constellation/hooks';\nimport { Row } from '@constellation/layout/Row';\nimport { SidebarTrigger } from '@constellation/layout/Sidebar';\nimport { Breadcrumbs } from '@constellation/navigation/Breadcrumbs';\nimport { NavUser, type NavUserProps } from '@constellation/navigation/NavUser';\nimport { AppearanceToggleDropdown } from '@constellation/settings';\nimport { type BreadcrumbItemData } from '@constellation/types';\nimport cn from 'clsx';\nimport * as React from 'react';\nimport s from './app-sidebar-header.module.scss';\n\nexport interface AppSidebarHeaderProps {\n breadcrumbs?: BreadcrumbItemData[];\n /** Omit to hide the account menu (e.g. on signed-out chrome). */\n user?: NavUserProps['user'];\n userMenu?: Omit<NavUserProps, 'user'>;\n /** Extra controls between the appearance toggle and the account menu. */\n actions?: React.ReactNode;\n}\n\nexport function AppSidebarHeader({\n breadcrumbs = [],\n user,\n userMenu,\n actions,\n}: AppSidebarHeaderProps) {\n const { state } = useSidebar();\n\n return (\n <Row\n data-slot={'app-sidebar-header'}\n el={'header'}\n align={'center'}\n gap={1}\n justify={'space-between'}\n className={cn(\n s['app-sidebar-header'],\n state === 'collapsed' && s['sidebar-header-collapsed'],\n )}\n >\n <Row gap={1}>\n <SidebarTrigger />\n <Breadcrumbs breadcrumbs={breadcrumbs} />\n </Row>\n <Row gap={1} align={'center'}>\n {actions}\n <AppearanceToggleDropdown />\n {user && <NavUser user={user} {...userMenu} />}\n </Row>\n </Row>\n );\n}\n"],"names":["_jsxs","_jsx"],"mappings":"
|
|
1
|
+
{"version":3,"file":"app-sidebar-header.js","sources":["../../../src/layout/AppSidebarHeader/app-sidebar-header.tsx"],"sourcesContent":["import { useSidebar } from '@constellation/hooks';\nimport { Row } from '@constellation/layout/Row';\nimport { SidebarTrigger } from '@constellation/layout/Sidebar';\nimport { Breadcrumbs } from '@constellation/navigation/Breadcrumbs';\nimport { NavUser, type NavUserProps } from '@constellation/navigation/NavUser';\nimport { AppearanceToggleDropdown } from '@constellation/settings';\nimport { type BreadcrumbItemData } from '@constellation/types';\nimport cn from 'clsx';\nimport * as React from 'react';\nimport s from './app-sidebar-header.module.scss';\n\nexport interface AppSidebarHeaderProps extends React.HTMLAttributes<HTMLElement> {\n breadcrumbs?: BreadcrumbItemData[];\n /** Omit to hide the account menu (e.g. on signed-out chrome). */\n user?: NavUserProps['user'];\n userMenu?: Omit<NavUserProps, 'user'>;\n /** Extra controls between the appearance toggle and the account menu. */\n actions?: React.ReactNode;\n}\n\n/**\n * The header band of a content area.\n *\n * `className` and any other DOM props reach the `header` element. They used to\n * be dropped on the floor — the component took four named props and spread\n * nothing — so a caller passing `className` got no error and no class, and\n * spent the difference looking at its own stylesheet.\n */\nexport function AppSidebarHeader({\n breadcrumbs = [],\n user,\n userMenu,\n actions,\n className,\n ...props\n}: AppSidebarHeaderProps) {\n const { state } = useSidebar();\n\n return (\n <Row\n data-slot={'app-sidebar-header'}\n el={'header'}\n align={'center'}\n gap={1}\n justify={'space-between'}\n className={cn(\n s['app-sidebar-header'],\n state === 'collapsed' && s['sidebar-header-collapsed'],\n className,\n )}\n {...props}\n >\n <Row gap={1}>\n <SidebarTrigger />\n <Breadcrumbs breadcrumbs={breadcrumbs} />\n </Row>\n <Row gap={1} align={'center'}>\n {actions}\n <AppearanceToggleDropdown />\n {user && <NavUser user={user} {...userMenu} />}\n </Row>\n </Row>\n );\n}\n"],"names":["_jsxs","_jsx"],"mappings":";;;;;;;;;;;;;AAoBA;;;;;;;AAOG;SACa,gBAAgB,CAAC,EAC/B,WAAW,GAAG,EAAE,EAChB,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,SAAS,EACT,GAAG,KAAK,EACc,EAAA;AACtB,IAAA,MAAM,EAAE,KAAK,EAAE,GAAG,UAAU,EAAE;IAE9B,QACEA,KAAC,GAAG,EAAA,EAAA,WAAA,EACS,oBAAoB,EAC/B,EAAE,EAAE,QAAQ,EACZ,KAAK,EAAE,QAAQ,EACf,GAAG,EAAE,CAAC,EACN,OAAO,EAAE,eAAe,EACxB,SAAS,EAAE,EAAE,CACX,CAAC,CAAC,oBAAoB,CAAC,EACvB,KAAK,KAAK,WAAW,IAAI,CAAC,CAAC,0BAA0B,CAAC,EACtD,SAAS,CACV,EAAA,GACG,KAAK,EAAA,QAAA,EAAA,CAETA,IAAA,CAAC,GAAG,EAAA,EAAC,GAAG,EAAE,CAAC,aACTC,GAAA,CAAC,cAAc,KAAG,EAClBA,GAAA,CAAC,WAAW,EAAA,EAAC,WAAW,EAAE,WAAW,EAAA,CAAI,IACrC,EACND,IAAA,CAAC,GAAG,EAAA,EAAC,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAA,QAAA,EAAA,CACzB,OAAO,EACRC,GAAA,CAAC,wBAAwB,EAAA,EAAA,CAAG,EAC3B,IAAI,IAAIA,GAAA,CAAC,OAAO,EAAA,EAAC,IAAI,EAAE,IAAI,EAAA,GAAM,QAAQ,EAAA,CAAI,CAAA,EAAA,CAC1C,CAAA,EAAA,CACF;AAEV;;"}
|
|
@@ -13,7 +13,10 @@
|
|
|
13
13
|
}
|
|
14
14
|
|
|
15
15
|
@media (prefers-reduced-motion: reduce) {
|
|
16
|
-
.collapse-module_collapse__KvKxi {
|
|
16
|
+
:root:not([data-motion=full]) .collapse-module_collapse__KvKxi {
|
|
17
17
|
transition: none;
|
|
18
18
|
}
|
|
19
|
+
}
|
|
20
|
+
:root[data-motion=reduced] .collapse-module_collapse__KvKxi {
|
|
21
|
+
transition: none;
|
|
19
22
|
}
|
|
@@ -5,9 +5,15 @@
|
|
|
5
5
|
.column-module_column__wLC8A.column-module_gap-0__AAHBe {
|
|
6
6
|
gap: 0;
|
|
7
7
|
}
|
|
8
|
+
.column-module_column__wLC8A.column-module_gap-0-5__htvan {
|
|
9
|
+
gap: var(--size-0-5);
|
|
10
|
+
}
|
|
8
11
|
.column-module_column__wLC8A.column-module_gap-1__uPPtg {
|
|
9
12
|
gap: var(--size-1);
|
|
10
13
|
}
|
|
14
|
+
.column-module_column__wLC8A.column-module_gap-1-5__hokuy {
|
|
15
|
+
gap: var(--size-1-5);
|
|
16
|
+
}
|
|
11
17
|
.column-module_column__wLC8A.column-module_gap-2__sc1tv {
|
|
12
18
|
gap: var(--size-2);
|
|
13
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"column.d.ts","sourceRoot":"","sources":["../../../src/layout/Column/column.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,
|
|
1
|
+
{"version":3,"file":"column.d.ts","sourceRoot":"","sources":["../../../src/layout/Column/column.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAExD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,eAAO,MAAM,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC,WAAW,CAiCxC,CAAC"}
|
|
@@ -4,7 +4,9 @@ import s from './column.module.scss.js';
|
|
|
4
4
|
|
|
5
5
|
const Column = ({ children, className, style, el, gap = 0, full = false, fullHeight = false, align, flex, ...props }) => {
|
|
6
6
|
const Component = (el ?? 'div');
|
|
7
|
-
|
|
7
|
+
// `0.5` -> `gap-0-5`: a dot is not valid in a class name, so the numeric
|
|
8
|
+
// prop is sanitised here rather than making callers write the string.
|
|
9
|
+
const gapClass = gap ? s[`gap-${String(gap).replace('.', '-')}`] : undefined;
|
|
8
10
|
const flexClass = flex ? s[`flex-${flex}`] : undefined;
|
|
9
11
|
const rootClassName = cn(className, s.column, gapClass, full && s['full-width'], fullHeight && s.full, align && s[`align-${align}`], flexClass);
|
|
10
12
|
return (jsx(Component, { "data-slot": 'column', style: style, className: rootClassName, ...props, children: children }));
|