@womp/kookie-ui 0.26.2 → 0.27.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/components.css +165 -4
- package/dist/cjs/components/_internal/base-button.js +1 -1
- package/dist/cjs/components/_internal/base-button.js.map +2 -2
- package/dist/cjs/components/_internal/pane-band-context.d.ts +4 -3
- package/dist/cjs/components/_internal/pane-band-context.d.ts.map +1 -1
- package/dist/cjs/components/_internal/pane-band-context.js.map +2 -2
- package/dist/cjs/components/_internal/pane-chrome.d.ts +7 -1
- package/dist/cjs/components/_internal/pane-chrome.d.ts.map +1 -1
- package/dist/cjs/components/_internal/pane-chrome.js +1 -1
- package/dist/cjs/components/_internal/pane-chrome.js.map +4 -4
- package/dist/cjs/components/_internal/portal-theme.d.ts +9 -0
- package/dist/cjs/components/_internal/portal-theme.d.ts.map +1 -0
- package/dist/cjs/components/_internal/portal-theme.js +3 -0
- package/dist/cjs/components/_internal/portal-theme.js.map +7 -0
- package/dist/cjs/components/_internal/shell-page-scroll.d.ts +15 -0
- package/dist/cjs/components/_internal/shell-page-scroll.d.ts.map +1 -0
- package/dist/cjs/components/_internal/shell-page-scroll.js +3 -0
- package/dist/cjs/components/_internal/shell-page-scroll.js.map +7 -0
- package/dist/cjs/components/_internal/shell-sidebar.js +1 -1
- package/dist/cjs/components/_internal/shell-sidebar.js.map +4 -4
- package/dist/cjs/components/alert-dialog.js +1 -1
- package/dist/cjs/components/alert-dialog.js.map +4 -4
- package/dist/cjs/components/button.js +1 -1
- package/dist/cjs/components/button.js.map +4 -4
- package/dist/cjs/components/chatbar.js +1 -1
- package/dist/cjs/components/chatbar.js.map +4 -4
- package/dist/cjs/components/chip.js +1 -1
- package/dist/cjs/components/chip.js.map +4 -4
- package/dist/cjs/components/combobox.d.ts.map +1 -1
- package/dist/cjs/components/combobox.js +1 -1
- package/dist/cjs/components/combobox.js.map +4 -4
- package/dist/cjs/components/context-menu.d.ts.map +1 -1
- package/dist/cjs/components/context-menu.js +1 -1
- package/dist/cjs/components/context-menu.js.map +4 -4
- package/dist/cjs/components/dialog.js +1 -1
- package/dist/cjs/components/dialog.js.map +4 -4
- package/dist/cjs/components/dropdown-menu.d.ts.map +1 -1
- package/dist/cjs/components/dropdown-menu.js +1 -1
- package/dist/cjs/components/dropdown-menu.js.map +4 -4
- package/dist/cjs/components/index.js +2 -2
- package/dist/cjs/components/index.js.map +4 -4
- package/dist/cjs/components/message-scroller.js +1 -1
- package/dist/cjs/components/message-scroller.js.map +4 -4
- package/dist/cjs/components/notice.js +1 -1
- package/dist/cjs/components/notice.js.map +4 -4
- package/dist/cjs/components/popover.js +1 -1
- package/dist/cjs/components/popover.js.map +4 -4
- package/dist/cjs/components/schemas/index.js +1 -1
- package/dist/cjs/components/schemas/index.js.map +2 -2
- package/dist/cjs/components/schemas/shell.schema.d.ts +1 -0
- package/dist/cjs/components/schemas/shell.schema.d.ts.map +1 -1
- package/dist/cjs/components/schemas/shell.schema.js +1 -1
- package/dist/cjs/components/schemas/shell.schema.js.map +2 -2
- package/dist/cjs/components/select.d.ts.map +1 -1
- package/dist/cjs/components/select.js +1 -1
- package/dist/cjs/components/select.js.map +4 -4
- package/dist/cjs/components/sheet.js +1 -1
- package/dist/cjs/components/sheet.js.map +4 -4
- package/dist/cjs/components/shell.d.ts +11 -0
- package/dist/cjs/components/shell.d.ts.map +1 -1
- package/dist/cjs/components/shell.js +1 -1
- package/dist/cjs/components/shell.js.map +4 -4
- package/dist/cjs/components/sidebar.js +1 -1
- package/dist/cjs/components/sidebar.js.map +4 -4
- package/dist/cjs/components/spinner.d.ts.map +1 -1
- package/dist/cjs/components/spinner.js +1 -1
- package/dist/cjs/components/spinner.js.map +2 -2
- package/dist/cjs/components/text-area.d.ts.map +1 -1
- package/dist/cjs/components/text-area.js +1 -1
- package/dist/cjs/components/text-area.js.map +2 -2
- package/dist/cjs/components/text-field.d.ts.map +1 -1
- package/dist/cjs/components/text-field.js +2 -2
- package/dist/cjs/components/text-field.js.map +2 -2
- package/dist/cjs/components/theme.d.ts.map +1 -1
- package/dist/cjs/components/theme.js +1 -1
- package/dist/cjs/components/theme.js.map +4 -4
- package/dist/cjs/components/toggle.js +1 -1
- package/dist/cjs/components/toggle.js.map +4 -4
- package/dist/cjs/components/toolbar.js +1 -1
- package/dist/cjs/components/toolbar.js.map +4 -4
- package/dist/cjs/components/tooltip.js +1 -1
- package/dist/cjs/components/tooltip.js.map +4 -4
- package/dist/cjs/index.js +4 -4
- package/dist/cjs/index.js.map +4 -4
- package/dist/esm/{chunk-6M6HGIGN.js → chunk-25ZRMILM.js} +2 -2
- package/dist/esm/chunk-2E57H3NH.js +3 -0
- package/dist/esm/chunk-2E57H3NH.js.map +7 -0
- package/dist/esm/chunk-2S7HPQVX.js +3 -0
- package/dist/esm/chunk-2S7HPQVX.js.map +7 -0
- package/dist/esm/{chunk-UG73IGRF.js → chunk-2ZKEQS76.js} +2 -2
- package/dist/esm/{chunk-H2TSRYQ5.js → chunk-324VC67W.js} +2 -2
- package/dist/esm/{chunk-UR5BUNNT.js → chunk-3MFSQ6PN.js} +2 -2
- package/dist/esm/{chunk-OTCVSJT7.js → chunk-4MNRLB57.js} +2 -2
- package/dist/esm/{chunk-TFFU435D.js → chunk-5BX2YZV6.js} +2 -2
- package/dist/esm/chunk-5BX2YZV6.js.map +7 -0
- package/dist/esm/chunk-67UEMB4K.js +3 -0
- package/dist/esm/chunk-67UEMB4K.js.map +7 -0
- package/dist/esm/chunk-6HEORZNJ.js +3 -0
- package/dist/esm/chunk-6HEORZNJ.js.map +7 -0
- package/dist/esm/{chunk-K55IQP5H.js → chunk-6YWHNLSC.js} +2 -2
- package/dist/esm/chunk-6YWHNLSC.js.map +7 -0
- package/dist/esm/{chunk-NYBE3U3V.js → chunk-7QBNXNEN.js} +2 -2
- package/dist/esm/{chunk-E6BDD3PN.js → chunk-7V6M3MIR.js} +2 -2
- package/dist/esm/{chunk-KQIZMPSW.js → chunk-ANQLWGFN.js} +1 -1
- package/dist/esm/{chunk-KQIZMPSW.js.map → chunk-ANQLWGFN.js.map} +2 -2
- package/dist/esm/chunk-AQKSO3SW.js +3 -0
- package/dist/esm/chunk-AQKSO3SW.js.map +7 -0
- package/dist/esm/{chunk-ONJYRJ66.js → chunk-B6OFKABP.js} +2 -2
- package/dist/esm/chunk-BUXK5VGR.js +3 -0
- package/dist/esm/chunk-BUXK5VGR.js.map +7 -0
- package/dist/esm/{chunk-7QP6JFPO.js → chunk-C67MM24U.js} +2 -2
- package/dist/esm/chunk-CZ24FOFS.js +3 -0
- package/dist/esm/chunk-CZ24FOFS.js.map +7 -0
- package/dist/esm/{chunk-LFAUMDU5.js → chunk-D2C2A2ZK.js} +2 -2
- package/dist/esm/{chunk-UBUGG2OB.js → chunk-DP7MPGR7.js} +2 -2
- package/dist/esm/{chunk-BVQDDN5Q.js → chunk-EB4AG3OL.js} +2 -2
- package/dist/esm/{chunk-5PQCTVZB.js → chunk-ENQV6SEA.js} +2 -2
- package/dist/esm/{chunk-VVLUY4WR.js → chunk-EPGIYTFK.js} +2 -2
- package/dist/esm/{chunk-2TWPPDII.js → chunk-FMVOB367.js} +2 -2
- package/dist/esm/chunk-FVRVBB6O.js +3 -0
- package/dist/esm/chunk-FVRVBB6O.js.map +7 -0
- package/dist/esm/{chunk-TFFMELAL.js → chunk-FYTLUDL3.js} +2 -2
- package/dist/esm/{chunk-W4CPV4PO.js → chunk-H2J25HXP.js} +2 -2
- package/dist/esm/{chunk-C2WKAIZM.js → chunk-H73AMXCH.js} +2 -2
- package/dist/esm/{chunk-AJANJ22M.js → chunk-HBO7W7SS.js} +2 -2
- package/dist/esm/{chunk-F364PDDM.js → chunk-HLIOHDEX.js} +2 -2
- package/dist/esm/{chunk-5FWEGTP6.js → chunk-HR2VHGJ5.js} +2 -2
- package/dist/esm/chunk-HR2VHGJ5.js.map +7 -0
- package/dist/esm/{chunk-ZKQCSGL3.js → chunk-ISCZ57VL.js} +2 -2
- package/dist/esm/{chunk-TFGUTYZK.js → chunk-J54GYD7A.js} +2 -2
- package/dist/esm/{chunk-HVMRB3AH.js → chunk-JD4KR6VZ.js} +2 -2
- package/dist/esm/{chunk-MS2ONKJJ.js → chunk-JKQN6QCP.js} +2 -2
- package/dist/esm/{chunk-NS573D6O.js → chunk-JP36JSNP.js} +2 -2
- package/dist/esm/chunk-K3GDM26A.js +3 -0
- package/dist/esm/{chunk-M7IQIKB4.js.map → chunk-K3GDM26A.js.map} +2 -2
- package/dist/esm/{chunk-ULCHGKI3.js → chunk-KJZSXLIX.js} +2 -2
- package/dist/esm/{chunk-N3B6EGXL.js → chunk-LABMK6Q7.js} +2 -2
- package/dist/esm/{chunk-VIVM525H.js → chunk-MGWGD6KI.js} +2 -2
- package/dist/esm/{chunk-RD4T2MCC.js → chunk-MJKVVGGV.js} +2 -2
- package/dist/esm/chunk-MJKVVGGV.js.map +7 -0
- package/dist/esm/{chunk-TXVZOS3E.js → chunk-MMDZBPSX.js} +2 -2
- package/dist/esm/{chunk-EERKYRYI.js → chunk-NWXODCTD.js} +2 -2
- package/dist/esm/{chunk-VCZ2GYOF.js → chunk-Q5SANVIW.js} +2 -2
- package/dist/esm/chunk-QEDKL23P.js +3 -0
- package/dist/esm/chunk-QEDKL23P.js.map +7 -0
- package/dist/esm/{chunk-LGZCNQBS.js → chunk-QPRUTOLI.js} +2 -2
- package/dist/esm/{chunk-TTW3EAQT.js → chunk-QRV32INS.js} +2 -2
- package/dist/esm/{chunk-3QN4C5LW.js → chunk-REORAMUH.js} +2 -2
- package/dist/esm/{chunk-GOXGRJO6.js → chunk-SUQJ7DD4.js} +2 -2
- package/dist/esm/chunk-TSWHVZ47.js +3 -0
- package/dist/esm/chunk-TSWHVZ47.js.map +7 -0
- package/dist/esm/chunk-VQDCHBZR.js +3 -0
- package/dist/esm/chunk-VQDCHBZR.js.map +7 -0
- package/dist/esm/{chunk-TF6WAIUQ.js → chunk-W4Z6ORYO.js} +2 -2
- package/dist/esm/{chunk-F2722F7B.js → chunk-WAXRIARV.js} +2 -2
- package/dist/esm/chunk-WAXRIARV.js.map +7 -0
- package/dist/esm/{chunk-ADL3LEOQ.js → chunk-WD66RYF6.js} +2 -2
- package/dist/esm/{chunk-DIY2XQKR.js → chunk-X7JHZ3HA.js} +2 -2
- package/dist/esm/{chunk-H33NTGVF.js → chunk-XD3C3GVF.js} +2 -2
- package/dist/esm/{chunk-VPUFKJQA.js → chunk-YMUERC2J.js} +2 -2
- package/dist/esm/chunk-ZOUIIO4C.js +6 -0
- package/dist/esm/chunk-ZOUIIO4C.js.map +7 -0
- package/dist/esm/components/_internal/base-button.js +1 -1
- package/dist/esm/components/_internal/base-menu.utils.js +1 -1
- package/dist/esm/components/_internal/menu-context.js +1 -1
- package/dist/esm/components/_internal/pane-band-context.d.ts +4 -3
- package/dist/esm/components/_internal/pane-band-context.d.ts.map +1 -1
- package/dist/esm/components/_internal/pane-band-context.js +1 -1
- package/dist/esm/components/_internal/pane-chrome.d.ts +7 -1
- package/dist/esm/components/_internal/pane-chrome.d.ts.map +1 -1
- package/dist/esm/components/_internal/pane-chrome.js +1 -1
- package/dist/esm/components/_internal/portal-theme.d.ts +9 -0
- package/dist/esm/components/_internal/portal-theme.d.ts.map +1 -0
- package/dist/esm/components/_internal/portal-theme.js +3 -0
- package/dist/esm/components/_internal/portal-theme.js.map +7 -0
- package/dist/esm/components/_internal/shell-bottom.js +1 -1
- package/dist/esm/components/_internal/shell-inspector.js +1 -1
- package/dist/esm/components/_internal/shell-page-scroll.d.ts +15 -0
- package/dist/esm/components/_internal/shell-page-scroll.d.ts.map +1 -0
- package/dist/esm/components/_internal/shell-page-scroll.js +3 -0
- package/dist/esm/components/_internal/shell-page-scroll.js.map +7 -0
- package/dist/esm/components/_internal/shell-sidebar.js +1 -1
- package/dist/esm/components/accordion.js +1 -1
- package/dist/esm/components/alert-dialog.js +1 -1
- package/dist/esm/components/avatar.js +1 -1
- package/dist/esm/components/blockquote.js +1 -1
- package/dist/esm/components/box.js +1 -1
- package/dist/esm/components/button.js +1 -1
- package/dist/esm/components/card.js +1 -1
- package/dist/esm/components/chatbar.js +1 -1
- package/dist/esm/components/checkbox-group.js +1 -1
- package/dist/esm/components/checkbox.js +1 -1
- package/dist/esm/components/chip.js +1 -1
- package/dist/esm/components/code.js +1 -1
- package/dist/esm/components/combobox.d.ts.map +1 -1
- package/dist/esm/components/combobox.js +1 -1
- package/dist/esm/components/context-menu.d.ts.map +1 -1
- package/dist/esm/components/context-menu.js +1 -1
- package/dist/esm/components/dialog.js +1 -1
- package/dist/esm/components/dropdown-menu.d.ts.map +1 -1
- package/dist/esm/components/dropdown-menu.js +1 -1
- package/dist/esm/components/flex.js +1 -1
- package/dist/esm/components/grid.js +1 -1
- package/dist/esm/components/heading.js +1 -1
- package/dist/esm/components/image.js +1 -1
- package/dist/esm/components/index.js +1 -1
- package/dist/esm/components/kbd.js +1 -1
- package/dist/esm/components/link.js +1 -1
- package/dist/esm/components/message-scroller.js +1 -1
- package/dist/esm/components/navbar.js +1 -1
- package/dist/esm/components/notice.js +1 -1
- package/dist/esm/components/popover.js +1 -1
- package/dist/esm/components/progress.js +1 -1
- package/dist/esm/components/radio-group.js +1 -1
- package/dist/esm/components/radio.js +1 -1
- package/dist/esm/components/schemas/index.js +1 -1
- package/dist/esm/components/schemas/shell.schema.d.ts +1 -0
- package/dist/esm/components/schemas/shell.schema.d.ts.map +1 -1
- package/dist/esm/components/schemas/shell.schema.js +1 -1
- package/dist/esm/components/scroll-area.js +1 -1
- package/dist/esm/components/segmented-control.js +1 -1
- package/dist/esm/components/select.d.ts.map +1 -1
- package/dist/esm/components/select.js +1 -1
- package/dist/esm/components/separator.js +1 -1
- package/dist/esm/components/sheet.js +1 -1
- package/dist/esm/components/shell.d.ts +11 -0
- package/dist/esm/components/shell.d.ts.map +1 -1
- package/dist/esm/components/shell.js +1 -1
- package/dist/esm/components/sidebar.js +1 -1
- package/dist/esm/components/slider.js +1 -1
- package/dist/esm/components/spinner.d.ts.map +1 -1
- package/dist/esm/components/spinner.js +1 -1
- package/dist/esm/components/switch.js +1 -1
- package/dist/esm/components/table.js +1 -1
- package/dist/esm/components/tabs.js +1 -1
- package/dist/esm/components/text-area.d.ts.map +1 -1
- package/dist/esm/components/text-area.js +1 -1
- package/dist/esm/components/text-field.d.ts.map +1 -1
- package/dist/esm/components/text-field.js +1 -1
- package/dist/esm/components/text.js +1 -1
- package/dist/esm/components/theme.d.ts.map +1 -1
- package/dist/esm/components/theme.js +1 -1
- package/dist/esm/components/toggle.js +1 -1
- package/dist/esm/components/toolbar.js +1 -1
- package/dist/esm/components/tooltip.js +1 -1
- package/dist/esm/components/virtual-menu.js +1 -1
- package/dist/esm/index.js +1 -1
- package/package.json +1 -1
- package/schemas/index.json +6 -1
- package/schemas/shell-root.json +6 -1
- package/src/components/_internal/pane-band-context.ts +4 -3
- package/src/components/_internal/pane-chrome.tsx +15 -2
- package/src/components/_internal/portal-theme.tsx +18 -0
- package/src/components/_internal/shell-page-scroll.ts +49 -0
- package/src/components/alert-dialog.tsx +3 -3
- package/src/components/combobox.tsx +4 -3
- package/src/components/context-menu.tsx +6 -5
- package/src/components/dialog.tsx +3 -3
- package/src/components/dropdown-menu.tsx +6 -5
- package/src/components/popover.tsx +3 -3
- package/src/components/schemas/shell.schema.ts +4 -1
- package/src/components/select.tsx +4 -3
- package/src/components/sheet.tsx +3 -3
- package/src/components/shell.css +201 -0
- package/src/components/shell.tsx +128 -22
- package/src/components/spinner.css +16 -1
- package/src/components/spinner.tsx +14 -13
- package/src/components/text-area.css +7 -2
- package/src/components/text-area.tsx +10 -8
- package/src/components/text-field.css +7 -2
- package/src/components/text-field.tsx +10 -8
- package/src/components/theme.tsx +24 -30
- package/src/components/tooltip.tsx +3 -3
- package/styles.css +165 -4
- package/dist/esm/chunk-3C4Q6PMS.js +0 -3
- package/dist/esm/chunk-3C4Q6PMS.js.map +0 -7
- package/dist/esm/chunk-3ZWHKNHI.js +0 -3
- package/dist/esm/chunk-3ZWHKNHI.js.map +0 -7
- package/dist/esm/chunk-457Z4R5W.js +0 -3
- package/dist/esm/chunk-457Z4R5W.js.map +0 -7
- package/dist/esm/chunk-5FWEGTP6.js.map +0 -7
- package/dist/esm/chunk-5MEWNLNH.js +0 -3
- package/dist/esm/chunk-5MEWNLNH.js.map +0 -7
- package/dist/esm/chunk-BEHAT3GI.js +0 -3
- package/dist/esm/chunk-BEHAT3GI.js.map +0 -7
- package/dist/esm/chunk-DG2KIH54.js +0 -6
- package/dist/esm/chunk-DG2KIH54.js.map +0 -7
- package/dist/esm/chunk-DQCE7DHY.js +0 -3
- package/dist/esm/chunk-DQCE7DHY.js.map +0 -7
- package/dist/esm/chunk-F2722F7B.js.map +0 -7
- package/dist/esm/chunk-GE7FRBZ4.js +0 -3
- package/dist/esm/chunk-GE7FRBZ4.js.map +0 -7
- package/dist/esm/chunk-K55IQP5H.js.map +0 -7
- package/dist/esm/chunk-M7IQIKB4.js +0 -3
- package/dist/esm/chunk-POP5NB33.js +0 -3
- package/dist/esm/chunk-POP5NB33.js.map +0 -7
- package/dist/esm/chunk-RD4T2MCC.js.map +0 -7
- package/dist/esm/chunk-SCIFT27R.js +0 -3
- package/dist/esm/chunk-SCIFT27R.js.map +0 -7
- package/dist/esm/chunk-TFFU435D.js.map +0 -7
- /package/dist/esm/{chunk-6M6HGIGN.js.map → chunk-25ZRMILM.js.map} +0 -0
- /package/dist/esm/{chunk-UG73IGRF.js.map → chunk-2ZKEQS76.js.map} +0 -0
- /package/dist/esm/{chunk-H2TSRYQ5.js.map → chunk-324VC67W.js.map} +0 -0
- /package/dist/esm/{chunk-UR5BUNNT.js.map → chunk-3MFSQ6PN.js.map} +0 -0
- /package/dist/esm/{chunk-OTCVSJT7.js.map → chunk-4MNRLB57.js.map} +0 -0
- /package/dist/esm/{chunk-NYBE3U3V.js.map → chunk-7QBNXNEN.js.map} +0 -0
- /package/dist/esm/{chunk-E6BDD3PN.js.map → chunk-7V6M3MIR.js.map} +0 -0
- /package/dist/esm/{chunk-ONJYRJ66.js.map → chunk-B6OFKABP.js.map} +0 -0
- /package/dist/esm/{chunk-7QP6JFPO.js.map → chunk-C67MM24U.js.map} +0 -0
- /package/dist/esm/{chunk-LFAUMDU5.js.map → chunk-D2C2A2ZK.js.map} +0 -0
- /package/dist/esm/{chunk-UBUGG2OB.js.map → chunk-DP7MPGR7.js.map} +0 -0
- /package/dist/esm/{chunk-BVQDDN5Q.js.map → chunk-EB4AG3OL.js.map} +0 -0
- /package/dist/esm/{chunk-5PQCTVZB.js.map → chunk-ENQV6SEA.js.map} +0 -0
- /package/dist/esm/{chunk-VVLUY4WR.js.map → chunk-EPGIYTFK.js.map} +0 -0
- /package/dist/esm/{chunk-2TWPPDII.js.map → chunk-FMVOB367.js.map} +0 -0
- /package/dist/esm/{chunk-TFFMELAL.js.map → chunk-FYTLUDL3.js.map} +0 -0
- /package/dist/esm/{chunk-W4CPV4PO.js.map → chunk-H2J25HXP.js.map} +0 -0
- /package/dist/esm/{chunk-C2WKAIZM.js.map → chunk-H73AMXCH.js.map} +0 -0
- /package/dist/esm/{chunk-AJANJ22M.js.map → chunk-HBO7W7SS.js.map} +0 -0
- /package/dist/esm/{chunk-F364PDDM.js.map → chunk-HLIOHDEX.js.map} +0 -0
- /package/dist/esm/{chunk-ZKQCSGL3.js.map → chunk-ISCZ57VL.js.map} +0 -0
- /package/dist/esm/{chunk-TFGUTYZK.js.map → chunk-J54GYD7A.js.map} +0 -0
- /package/dist/esm/{chunk-HVMRB3AH.js.map → chunk-JD4KR6VZ.js.map} +0 -0
- /package/dist/esm/{chunk-MS2ONKJJ.js.map → chunk-JKQN6QCP.js.map} +0 -0
- /package/dist/esm/{chunk-NS573D6O.js.map → chunk-JP36JSNP.js.map} +0 -0
- /package/dist/esm/{chunk-ULCHGKI3.js.map → chunk-KJZSXLIX.js.map} +0 -0
- /package/dist/esm/{chunk-N3B6EGXL.js.map → chunk-LABMK6Q7.js.map} +0 -0
- /package/dist/esm/{chunk-VIVM525H.js.map → chunk-MGWGD6KI.js.map} +0 -0
- /package/dist/esm/{chunk-TXVZOS3E.js.map → chunk-MMDZBPSX.js.map} +0 -0
- /package/dist/esm/{chunk-EERKYRYI.js.map → chunk-NWXODCTD.js.map} +0 -0
- /package/dist/esm/{chunk-VCZ2GYOF.js.map → chunk-Q5SANVIW.js.map} +0 -0
- /package/dist/esm/{chunk-LGZCNQBS.js.map → chunk-QPRUTOLI.js.map} +0 -0
- /package/dist/esm/{chunk-TTW3EAQT.js.map → chunk-QRV32INS.js.map} +0 -0
- /package/dist/esm/{chunk-3QN4C5LW.js.map → chunk-REORAMUH.js.map} +0 -0
- /package/dist/esm/{chunk-GOXGRJO6.js.map → chunk-SUQJ7DD4.js.map} +0 -0
- /package/dist/esm/{chunk-TF6WAIUQ.js.map → chunk-W4Z6ORYO.js.map} +0 -0
- /package/dist/esm/{chunk-ADL3LEOQ.js.map → chunk-WD66RYF6.js.map} +0 -0
- /package/dist/esm/{chunk-DIY2XQKR.js.map → chunk-X7JHZ3HA.js.map} +0 -0
- /package/dist/esm/{chunk-H33NTGVF.js.map → chunk-XD3C3GVF.js.map} +0 -0
- /package/dist/esm/{chunk-VPUFKJQA.js.map → chunk-YMUERC2J.js.map} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/components/dropdown-menu.tsx"],
|
|
4
|
+
"sourcesContent": ["'use client';\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { DropdownMenu as DropdownMenuPrimitive, Slot } from 'radix-ui';\nimport { useCallbackRef } from 'radix-ui/internal';\n\nimport { ScrollArea } from './scroll-area.js';\nimport {\n dropdownMenuContentPropDefs,\n dropdownMenuSubContentPropDefs,\n dropdownMenuItemPropDefs,\n dropdownMenuCheckboxItemPropDefs,\n dropdownMenuRadioItemPropDefs,\n} from './dropdown-menu.props.js';\nimport { useThemeContext } from './theme.js';\nimport { PortalTheme } from './_internal/portal-theme.js';\nimport { ChevronDownIcon, ThickCheckIcon, ThickChevronLeftIcon, ThickChevronRightIcon, ThickDotIcon } from './icons.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport { useThemeSizeProps } from '../hooks/theme-size.js';\nimport {\n DrillDownLevelContext,\n DrillDownRoot,\n SubContext,\n useCreateDrillDownStore,\n useDrillDownStore,\n usePanelPosition,\n useStackEntry,\n useSubContext,\n} from './_internal/dropdown-menu-drill-down.js';\nimport {\n MenuCloseProvider,\n MenuGroupLabelProvider,\n MenuProvider,\n useMenuGroupLabelId,\n useMenuGroupLabelledBy,\n} from './_internal/menu-context.js';\nimport {\n MenuShortcut,\n getMenuAlignOffset,\n toAriaKeyShortcuts,\n useResolvedResponsiveValue,\n} from './_internal/base-menu.utils.js';\nimport { requireReactElement } from '../helpers/require-react-element.js';\n\nimport type { SubmenuBehavior } from './_internal/dropdown-menu-drill-down.js';\nimport type { IconProps } from './icons.js';\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { GetPropDefTypes, Responsive } from '../props/prop-def.js';\n\n/**\n * Open state of the menu, mirrored from Root so Content can reset drill-down\n * navigation when a force-mounted menu opens again.\n */\nconst DropdownMenuOpenContext = React.createContext(false);\n\ninterface DropdownMenuRootProps\n extends React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Root> {}\nconst DropdownMenuRoot: React.FC<DropdownMenuRootProps> = (props) => {\n const { open: openProp, defaultOpen = false, onOpenChange } = props;\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(defaultOpen);\n const open = openProp ?? uncontrolledOpen;\n\n const handleOpenChangeProp = useCallbackRef(onOpenChange);\n const handleOpenChange = React.useCallback(\n (next: boolean) => {\n setUncontrolledOpen(next);\n handleOpenChangeProp(next);\n },\n [handleOpenChangeProp],\n );\n\n const close = React.useCallback(() => handleOpenChange(false), [handleOpenChange]);\n\n return (\n <DropdownMenuOpenContext.Provider value={open}>\n <MenuCloseProvider value={close}>\n <DropdownMenuPrimitive.Root {...props} open={open} onOpenChange={handleOpenChange} />\n </MenuCloseProvider>\n </DropdownMenuOpenContext.Provider>\n );\n};\nDropdownMenuRoot.displayName = 'DropdownMenu.Root';\n\ntype DropdownMenuTriggerElement = React.ElementRef<typeof DropdownMenuPrimitive.Trigger>;\ninterface DropdownMenuTriggerProps\n extends ComponentPropsWithout<typeof DropdownMenuPrimitive.Trigger, RemovedProps> {}\nconst DropdownMenuTrigger = React.forwardRef<DropdownMenuTriggerElement, DropdownMenuTriggerProps>(\n ({ children, ...props }, forwardedRef) => (\n <DropdownMenuPrimitive.Trigger {...props} ref={forwardedRef} asChild>\n {requireReactElement(children)}\n </DropdownMenuPrimitive.Trigger>\n ),\n);\nDropdownMenuTrigger.displayName = 'DropdownMenu.Trigger';\n\n/** Visual props shared by Content and SubContent. */\ntype DropdownMenuSurfaceProps = GetPropDefTypes<typeof dropdownMenuSubContentPropDefs>;\n\ntype DropdownMenuContentContextValue = {\n size?: DropdownMenuSurfaceProps['size'];\n color?: DropdownMenuSurfaceProps['color'];\n};\nconst DropdownMenuContentContext = React.createContext<DropdownMenuContentContextValue>({});\n\n/** Keys that navigate back one drill-down level, by writing direction. */\nconst BACK_KEYS = { ltr: 'ArrowLeft', rtl: 'ArrowRight' } as const;\nconst FORWARD_KEYS = { ltr: 'ArrowRight', rtl: 'ArrowLeft' } as const;\n\nfunction isTextEntryTarget(target: EventTarget | null) {\n return (\n target instanceof HTMLElement &&\n (target.isContentEditable || target.tagName === 'INPUT' || target.tagName === 'TEXTAREA')\n );\n}\n\nfunction getDirection(element: HTMLElement | null): 'ltr' | 'rtl' {\n return element?.closest('[dir]')?.getAttribute('dir') === 'rtl' ? 'rtl' : 'ltr';\n}\n\ntype DropdownMenuContentElement = React.ElementRef<typeof DropdownMenuPrimitive.Content>;\ninterface DropdownMenuContentProps\n extends ComponentPropsWithout<typeof DropdownMenuPrimitive.Content, RemovedProps>,\n DropdownMenuSurfaceProps {\n container?: React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Portal>['container'];\n /**\n * Controls how submenus behave.\n * - `cascade`: Default cascading behavior where submenus open to the side (portal-based)\n * - `drill-down`: Mobile-friendly behavior where submenus replace the content inline\n * Supports responsive values: `{ initial: 'drill-down', md: 'cascade' }`\n */\n submenuBehavior?: Responsive<SubmenuBehavior>;\n /**\n * When true, skips the ScrollArea wrapper to allow VirtualMenu to handle its own scrolling.\n * Use this when rendering virtualized lists inside the dropdown.\n */\n virtualized?: boolean;\n}\nconst DropdownMenuContent = React.forwardRef<DropdownMenuContentElement, DropdownMenuContentProps>(\n (ownProps, forwardedRef) => {\n const props = useThemeSizeProps(ownProps, dropdownMenuContentPropDefs.size);\n const themeContext = useThemeContext();\n const {\n size = dropdownMenuContentPropDefs.size.default,\n } = props;\n const {\n className,\n children,\n color,\n container,\n forceMount,\n submenuBehavior,\n virtualized = false,\n onEscapeKeyDown,\n onKeyDown,\n ...contentProps\n } = extractProps(props, dropdownMenuContentPropDefs);\n\n const resolvedColor = color || themeContext.accentColor;\n const behavior = useResolvedResponsiveValue<SubmenuBehavior>(submenuBehavior, 'cascade');\n const isDrillDown = behavior === 'drill-down';\n const open = React.useContext(DropdownMenuOpenContext);\n const drillDownStore = useCreateDrillDownStore();\n\n // Escape goes back one drill-down level before it closes the menu.\n const handleEscapeKeyDown = (event: KeyboardEvent) => {\n onEscapeKeyDown?.(event);\n if (event.defaultPrevented || !isDrillDown || drillDownStore.getDepth() === 0) return;\n event.preventDefault();\n drillDownStore.pop('keyboard');\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(event);\n if (event.defaultPrevented || !isDrillDown || drillDownStore.getDepth() === 0) return;\n if (isTextEntryTarget(event.target)) return;\n if (event.key === BACK_KEYS[getDirection(event.currentTarget)]) {\n event.preventDefault();\n drillDownStore.pop('keyboard');\n }\n };\n\n const contextValue = React.useMemo(\n () => ({ size, color: resolvedColor }),\n [size, resolvedColor],\n );\n\n const contentBody = (\n <MenuProvider size={size}>\n <DropdownMenuContentContext.Provider value={contextValue}>\n <DrillDownRoot store={drillDownStore} behavior={behavior} open={open}>\n {children}\n </DrillDownRoot>\n </DropdownMenuContentContext.Provider>\n </MenuProvider>\n );\n\n return (\n <DropdownMenuPrimitive.Portal container={container} forceMount={forceMount}>\n <PortalTheme asChild>\n <DropdownMenuPrimitive.Content\n data-accent-color={resolvedColor}\n align=\"start\"\n sideOffset={4}\n collisionPadding={10}\n {...contentProps}\n onEscapeKeyDown={handleEscapeKeyDown}\n onKeyDown={handleKeyDown}\n asChild={false}\n ref={forwardedRef}\n className={classNames(\n 'kui-PopperContent',\n 'kui-BaseMenuContent',\n 'kui-variant-soft',\n 'kui-DropdownMenuContent',\n className,\n )}\n >\n {virtualized ? (\n <div className={classNames('kui-BaseMenuViewport', 'kui-DropdownMenuViewport', 'kui-virtualized')}>\n {contentBody}\n </div>\n ) : (\n <ScrollArea type=\"auto\" scrollbars=\"vertical\">\n <div className={classNames('kui-BaseMenuViewport', 'kui-DropdownMenuViewport')}>\n {contentBody}\n </div>\n </ScrollArea>\n )}\n </DropdownMenuPrimitive.Content>\n </PortalTheme>\n </DropdownMenuPrimitive.Portal>\n );\n },\n);\nDropdownMenuContent.displayName = 'DropdownMenu.Content';\n\ntype DropdownMenuLabelElement = React.ElementRef<typeof DropdownMenuPrimitive.Label>;\ninterface DropdownMenuLabelProps\n extends ComponentPropsWithout<typeof DropdownMenuPrimitive.Label, RemovedProps> {}\nconst DropdownMenuLabel = React.forwardRef<DropdownMenuLabelElement, DropdownMenuLabelProps>(\n ({ className, id: idProp, ...props }, forwardedRef) => {\n const isLevelVisible = React.useContext(DrillDownLevelContext);\n const id = useMenuGroupLabelId(idProp, isLevelVisible);\n if (!isLevelVisible) return null;\n return (\n <DropdownMenuPrimitive.Label\n {...props}\n id={id}\n asChild={false}\n ref={forwardedRef}\n className={classNames('kui-BaseMenuLabel', 'kui-DropdownMenuLabel', className)}\n />\n );\n },\n);\nDropdownMenuLabel.displayName = 'DropdownMenu.Label';\n\ntype DropdownMenuItemElement = React.ElementRef<typeof DropdownMenuPrimitive.Item>;\ntype DropdownMenuItemOwnProps = GetPropDefTypes<typeof dropdownMenuItemPropDefs>;\ninterface DropdownMenuItemProps\n extends ComponentPropsWithout<typeof DropdownMenuPrimitive.Item, RemovedProps>,\n DropdownMenuItemOwnProps {}\nconst DropdownMenuItem = React.forwardRef<DropdownMenuItemElement, DropdownMenuItemProps>(\n (props, forwardedRef) => {\n const {\n className,\n children,\n color = dropdownMenuItemPropDefs.color.default,\n shortcut,\n ...itemProps\n } = props;\n // In drill-down mode, items of levels that are not on screen do not mount.\n if (!React.useContext(DrillDownLevelContext)) return null;\n return (\n <DropdownMenuPrimitive.Item\n data-accent-color={color}\n aria-keyshortcuts={shortcut ? toAriaKeyShortcuts(shortcut) : undefined}\n {...itemProps}\n ref={forwardedRef}\n className={classNames('kui-reset', 'kui-BaseMenuItem', 'kui-DropdownMenuItem', className)}\n >\n <Slot.Slottable>{children}</Slot.Slottable>\n {shortcut && <MenuShortcut shortcut={shortcut} className=\"kui-DropdownMenuShortcut\" />}\n </DropdownMenuPrimitive.Item>\n );\n },\n);\nDropdownMenuItem.displayName = 'DropdownMenu.Item';\n\ntype DropdownMenuGroupElement = React.ElementRef<typeof DropdownMenuPrimitive.Group>;\ninterface DropdownMenuGroupProps\n extends ComponentPropsWithout<typeof DropdownMenuPrimitive.Group, RemovedProps> {}\nconst DropdownMenuGroup = React.forwardRef<DropdownMenuGroupElement, DropdownMenuGroupProps>(\n ({ className, 'aria-labelledby': ariaLabelledBy, ...props }, forwardedRef) => {\n const [labelledBy, setLabelId] = useMenuGroupLabelledBy(ariaLabelledBy);\n // A drill-down level that is not on screen keeps its groups only to hold the open path.\n const isLevelVisible = React.useContext(DrillDownLevelContext);\n return (\n <MenuGroupLabelProvider value={setLabelId}>\n <DropdownMenuPrimitive.Group\n {...(isLevelVisible ? { 'aria-labelledby': labelledBy } : { role: 'none' })}\n {...props}\n asChild={false}\n ref={forwardedRef}\n className={classNames('kui-BaseMenuGroup', 'kui-DropdownMenuGroup', className)}\n />\n </MenuGroupLabelProvider>\n );\n },\n);\nDropdownMenuGroup.displayName = 'DropdownMenu.Group';\n\ntype DropdownMenuRadioGroupElement = React.ElementRef<typeof DropdownMenuPrimitive.RadioGroup>;\ninterface DropdownMenuRadioGroupProps\n extends ComponentPropsWithout<typeof DropdownMenuPrimitive.RadioGroup, RemovedProps> {}\nconst DropdownMenuRadioGroup = React.forwardRef<\n DropdownMenuRadioGroupElement,\n DropdownMenuRadioGroupProps\n>(({ className, 'aria-labelledby': ariaLabelledBy, ...props }, forwardedRef) => {\n const [labelledBy, setLabelId] = useMenuGroupLabelledBy(ariaLabelledBy);\n const isLevelVisible = React.useContext(DrillDownLevelContext);\n return (\n <MenuGroupLabelProvider value={setLabelId}>\n <DropdownMenuPrimitive.RadioGroup\n {...(isLevelVisible ? { 'aria-labelledby': labelledBy } : { role: 'none' })}\n {...props}\n asChild={false}\n ref={forwardedRef}\n className={classNames('kui-BaseMenuRadioGroup', 'kui-DropdownMenuRadioGroup', className)}\n />\n </MenuGroupLabelProvider>\n );\n});\nDropdownMenuRadioGroup.displayName = 'DropdownMenu.RadioGroup';\n\ntype DropdownMenuRadioItemElement = React.ElementRef<typeof DropdownMenuPrimitive.RadioItem>;\ntype DropdownMenuRadioItemOwnProps = GetPropDefTypes<typeof dropdownMenuRadioItemPropDefs>;\ninterface DropdownMenuRadioItemProps\n extends ComponentPropsWithout<typeof DropdownMenuPrimitive.RadioItem, RemovedProps>,\n DropdownMenuRadioItemOwnProps {}\nconst DropdownMenuRadioItem = React.forwardRef<\n DropdownMenuRadioItemElement,\n DropdownMenuRadioItemProps\n>((props, forwardedRef) => {\n const {\n children,\n className,\n color = dropdownMenuRadioItemPropDefs.color.default,\n ...itemProps\n } = props;\n if (!React.useContext(DrillDownLevelContext)) return null;\n return (\n <DropdownMenuPrimitive.RadioItem\n {...itemProps}\n asChild={false}\n ref={forwardedRef}\n data-accent-color={color}\n className={classNames(\n 'kui-BaseMenuItem',\n 'kui-BaseMenuRadioItem',\n 'kui-DropdownMenuItem',\n 'kui-DropdownMenuRadioItem',\n className,\n )}\n >\n <Slot.Slottable>{children}</Slot.Slottable>\n <DropdownMenuPrimitive.ItemIndicator className=\"kui-BaseMenuItemIndicator kui-DropdownMenuItemIndicator\">\n <ThickDotIcon className=\"kui-BaseMenuItemIndicatorIcon kui-DropdownMenuItemIndicatorIcon\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </DropdownMenuPrimitive.RadioItem>\n );\n});\nDropdownMenuRadioItem.displayName = 'DropdownMenu.RadioItem';\n\ntype DropdownMenuCheckboxItemElement = React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>;\ntype DropdownMenuCheckboxItemOwnProps = GetPropDefTypes<typeof dropdownMenuCheckboxItemPropDefs>;\ninterface DropdownMenuCheckboxItemProps\n extends ComponentPropsWithout<typeof DropdownMenuPrimitive.CheckboxItem, RemovedProps>,\n DropdownMenuCheckboxItemOwnProps {}\nconst DropdownMenuCheckboxItem = React.forwardRef<\n DropdownMenuCheckboxItemElement,\n DropdownMenuCheckboxItemProps\n>((props, forwardedRef) => {\n const {\n children,\n className,\n shortcut,\n color = dropdownMenuCheckboxItemPropDefs.color.default,\n ...itemProps\n } = props;\n if (!React.useContext(DrillDownLevelContext)) return null;\n return (\n <DropdownMenuPrimitive.CheckboxItem\n aria-keyshortcuts={shortcut ? toAriaKeyShortcuts(shortcut) : undefined}\n {...itemProps}\n asChild={false}\n ref={forwardedRef}\n data-accent-color={color}\n className={classNames(\n 'kui-BaseMenuItem',\n 'kui-BaseMenuCheckboxItem',\n 'kui-DropdownMenuItem',\n 'kui-DropdownMenuCheckboxItem',\n className,\n )}\n >\n <Slot.Slottable>{children}</Slot.Slottable>\n <DropdownMenuPrimitive.ItemIndicator className=\"kui-BaseMenuItemIndicator kui-DropdownMenuItemIndicator\">\n <ThickCheckIcon className=\"kui-BaseMenuItemIndicatorIcon kui-DropdownMenuItemIndicatorIcon\" />\n </DropdownMenuPrimitive.ItemIndicator>\n {shortcut && <MenuShortcut shortcut={shortcut} className=\"kui-DropdownMenuShortcut\" />}\n </DropdownMenuPrimitive.CheckboxItem>\n );\n});\nDropdownMenuCheckboxItem.displayName = 'DropdownMenu.CheckboxItem';\n\ninterface DropdownMenuSubProps\n extends React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Sub> {\n /**\n * Label displayed in the back button when using drill-down mode.\n * If not provided, defaults to \"Back\".\n */\n label?: React.ReactNode;\n}\nconst DropdownMenuSub: React.FC<DropdownMenuSubProps> = ({\n label = 'Back',\n open,\n defaultOpen,\n onOpenChange,\n children,\n}) => {\n const drillDownStore = useDrillDownStore();\n const id = React.useId();\n const subContextValue = React.useMemo(() => ({ id, label }), [id, label]);\n const isOpenInDrillDown = usePanelPosition(drillDownStore, id) !== 'closed';\n\n const handleOpenChange = useCallbackRef(onOpenChange);\n const isControlled = open !== undefined;\n\n // Drill-down, controlled: navigating asks `onOpenChange` and leaves the stack to `open`.\n React.useLayoutEffect(() => {\n if (!drillDownStore || !isControlled) return;\n drillDownStore.setController(id, handleOpenChange);\n return () => drillDownStore.setController(id, null);\n }, [drillDownStore, isControlled, id, handleOpenChange]);\n\n React.useLayoutEffect(() => {\n if (!drillDownStore || open === undefined) return;\n if (open && !drillDownStore.isOpen(id)) drillDownStore.open(id, drillDownStore.takePendingModality(id));\n else if (!open && drillDownStore.isOpen(id)) drillDownStore.close(id, drillDownStore.takePendingModality(id));\n }, [drillDownStore, open, id]);\n\n // A `defaultOpen` push on mount is the starting state, not a change to report.\n const defaultOpenRef = React.useRef(open === undefined && Boolean(defaultOpen));\n React.useLayoutEffect(() => {\n if (drillDownStore && defaultOpenRef.current) drillDownStore.open(id);\n else defaultOpenRef.current = false;\n // Only on mount, like an uncontrolled default.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Uncontrolled, the stack drives `onOpenChange`. Controlled, it reports only a close\n // the `open` prop did not ask for, such as a parent level closing.\n const wasOpenRef = React.useRef(isOpenInDrillDown);\n React.useEffect(() => {\n if (!drillDownStore || wasOpenRef.current === isOpenInDrillDown) return;\n wasOpenRef.current = isOpenInDrillDown;\n if (isOpenInDrillDown && defaultOpenRef.current) {\n defaultOpenRef.current = false;\n return;\n }\n if (open !== undefined && open === isOpenInDrillDown) return;\n handleOpenChange(isOpenInDrillDown);\n }, [drillDownStore, isOpenInDrillDown, handleOpenChange, open]);\n\n // Radix Sub stays mounted in both behaviors so switching behavior does not\n // remount the subtree. It only renders context; in drill-down its trigger\n // and content are never rendered, so it reports no open changes of its own.\n return (\n <SubContext.Provider value={subContextValue}>\n <DropdownMenuPrimitive.Sub\n open={open}\n defaultOpen={defaultOpen}\n onOpenChange={drillDownStore ? undefined : onOpenChange}\n >\n {children}\n </DropdownMenuPrimitive.Sub>\n </SubContext.Provider>\n );\n};\nDropdownMenuSub.displayName = 'DropdownMenu.Sub';\n\ntype DropdownMenuSubTriggerElement = React.ElementRef<typeof DropdownMenuPrimitive.SubTrigger>;\ninterface DropdownMenuSubTriggerProps\n extends ComponentPropsWithout<typeof DropdownMenuPrimitive.SubTrigger, RemovedProps> {}\nconst DropdownMenuSubTrigger = React.forwardRef<\n DropdownMenuSubTriggerElement,\n DropdownMenuSubTriggerProps\n>((props, forwardedRef) => {\n const { className, children, onKeyDown, ...subTriggerProps } = props;\n const drillDownStore = useDrillDownStore();\n const subContext = useSubContext();\n const isLevelVisible = React.useContext(DrillDownLevelContext);\n\n if (drillDownStore && subContext) {\n if (!isLevelVisible) return null;\n\n const handleSelect = (event: Event) => {\n // Navigating does not close the menu.\n event.preventDefault();\n drillDownStore.push(subContext.id);\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(event);\n if (event.defaultPrevented || subTriggerProps.disabled) return;\n if (event.key === FORWARD_KEYS[getDirection(event.currentTarget)]) {\n event.preventDefault();\n drillDownStore.push(subContext.id, 'keyboard');\n }\n };\n\n return (\n // The row navigates within the same menu, so it announces no popup.\n <DropdownMenuPrimitive.Item\n {...subTriggerProps}\n data-drill-down-trigger={subContext.id}\n data-drill-down-name={subTriggerProps.textValue}\n onSelect={handleSelect}\n onKeyDown={handleKeyDown}\n ref={forwardedRef}\n className={classNames(\n 'kui-reset',\n 'kui-BaseMenuItem',\n 'kui-BaseMenuSubTrigger',\n 'kui-DropdownMenuItem',\n 'kui-DropdownMenuSubTrigger',\n 'kui-DropdownMenuDrillDownSubTrigger',\n className,\n )}\n >\n {children}\n <div className=\"kui-BaseMenuShortcut kui-DropdownMenuShortcut\">\n <ThickChevronRightIcon className=\"kui-BaseMenuSubTriggerIcon kui-DropdownMenuSubTriggerIcon\" />\n </div>\n </DropdownMenuPrimitive.Item>\n );\n }\n\n return (\n <DropdownMenuPrimitive.SubTrigger\n {...subTriggerProps}\n onKeyDown={onKeyDown}\n asChild={false}\n ref={forwardedRef}\n className={classNames(\n 'kui-BaseMenuItem',\n 'kui-BaseMenuSubTrigger',\n 'kui-DropdownMenuItem',\n 'kui-DropdownMenuSubTrigger',\n className,\n )}\n >\n {children}\n <div className=\"kui-BaseMenuShortcut kui-DropdownMenuShortcut\">\n <ThickChevronRightIcon className=\"kui-BaseMenuSubTriggerIcon kui-DropdownMenuSubTriggerIcon\" />\n </div>\n </DropdownMenuPrimitive.SubTrigger>\n );\n});\nDropdownMenuSubTrigger.displayName = 'DropdownMenu.SubTrigger';\n\ntype DropdownMenuSeparatorElement = React.ElementRef<typeof DropdownMenuPrimitive.Separator>;\ninterface DropdownMenuSeparatorProps\n extends ComponentPropsWithout<typeof DropdownMenuPrimitive.Separator, RemovedProps> {}\nconst DropdownMenuSeparator = React.forwardRef<\n DropdownMenuSeparatorElement,\n DropdownMenuSeparatorProps\n>(({ className, ...props }, forwardedRef) => {\n if (!React.useContext(DrillDownLevelContext)) return null;\n return (\n <DropdownMenuPrimitive.Separator\n {...props}\n asChild={false}\n ref={forwardedRef}\n className={classNames('kui-BaseMenuSeparator', 'kui-DropdownMenuSeparator', className)}\n />\n );\n});\nDropdownMenuSeparator.displayName = 'DropdownMenu.Separator';\n\n/** The row at the top of a drill-down panel that returns to the parent level. */\nfunction DrillDownBackItem({ label, name }: { label: React.ReactNode; name: string }) {\n const drillDownStore = useDrillDownStore();\n\n const handleSelect = React.useCallback(\n (event: Event) => {\n // Navigating does not close the menu.\n event.preventDefault();\n drillDownStore?.pop();\n },\n [drillDownStore],\n );\n\n // The visible label is often the submenu title, so the accessible name says\n // what the row does while still containing the visible text.\n const labelText = typeof label === 'string' ? label : name;\n const ariaLabel = labelText && labelText !== 'Back' ? `Back from ${labelText}` : undefined;\n\n return (\n <DropdownMenuPrimitive.Item\n aria-label={ariaLabel}\n textValue={labelText || 'Back'}\n onSelect={handleSelect}\n className={classNames(\n 'kui-reset',\n 'kui-BaseMenuItem',\n 'kui-DropdownMenuItem',\n 'kui-DropdownMenuDrillDownBackItem',\n )}\n >\n <ThickChevronLeftIcon className=\"kui-BaseMenuSubTriggerIcon kui-DropdownMenuDrillDownBackIcon\" />\n <span className=\"kui-DropdownMenuDrillDownBackLabel\">{label}</span>\n </DropdownMenuPrimitive.Item>\n );\n}\n\n/** Radix positioning and layer props that have no meaning for an inline drill-down panel. */\ntype PopperOnlyProps =\n | 'loop'\n | 'onEscapeKeyDown'\n | 'onPointerDownOutside'\n | 'onFocusOutside'\n | 'onInteractOutside'\n | 'sideOffset'\n | 'alignOffset'\n | 'avoidCollisions'\n | 'collisionBoundary'\n | 'collisionPadding'\n | 'arrowPadding'\n | 'sticky'\n | 'hideWhenDetached'\n | 'updatePositionStrategy';\n\nfunction omitPopperProps<T extends Record<string, unknown>>(props: T): Omit<T, PopperOnlyProps> {\n const {\n loop: _loop,\n onEscapeKeyDown: _onEscapeKeyDown,\n onPointerDownOutside: _onPointerDownOutside,\n onFocusOutside: _onFocusOutside,\n onInteractOutside: _onInteractOutside,\n sideOffset: _sideOffset,\n alignOffset: _alignOffset,\n avoidCollisions: _avoidCollisions,\n collisionBoundary: _collisionBoundary,\n collisionPadding: _collisionPadding,\n arrowPadding: _arrowPadding,\n sticky: _sticky,\n hideWhenDetached: _hideWhenDetached,\n updatePositionStrategy: _updatePositionStrategy,\n ...rest\n } = props;\n return rest;\n}\n\ntype DropdownMenuSubContentElement = React.ElementRef<typeof DropdownMenuPrimitive.SubContent>;\ninterface DropdownMenuSubContentProps\n extends ComponentPropsWithout<typeof DropdownMenuPrimitive.SubContent, RemovedProps>,\n DropdownMenuSurfaceProps {\n container?: React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Portal>['container'];\n /**\n * When true, skips the ScrollArea wrapper so a VirtualMenu can handle its own\n * scrolling. Applies to cascade submenus; a drill-down panel scrolls with the\n * root content.\n */\n virtualized?: boolean;\n}\nconst DropdownMenuSubContent = React.forwardRef<\n DropdownMenuSubContentElement,\n DropdownMenuSubContentProps\n>((props, forwardedRef) => {\n const drillDownStore = useDrillDownStore();\n const subContext = useSubContext();\n\n if (drillDownStore && subContext) {\n return (\n <DrillDownPanel {...props} ref={forwardedRef} store={drillDownStore} sub={subContext} />\n );\n }\n return <CascadeSubContent {...props} ref={forwardedRef} />;\n});\nDropdownMenuSubContent.displayName = 'DropdownMenu.SubContent';\n\nconst CascadeSubContent = React.forwardRef<DropdownMenuSubContentElement, DropdownMenuSubContentProps>(\n (props, forwardedRef) => {\n const parent = React.useContext(DropdownMenuContentContext);\n\n // A submenu inherits the parent surface, and its own props win.\n const size = props.size ?? parent.size;\n const color = props.color ?? parent.color;\n\n const {\n className,\n children,\n container,\n forceMount,\n color: _color,\n virtualized = false,\n ...subContentProps\n } = extractProps({ ...props, size }, dropdownMenuSubContentPropDefs);\n\n const scalarSize = useResolvedResponsiveValue(size, dropdownMenuSubContentPropDefs.size.default);\n\n const contextValue = React.useMemo(\n () => ({ size, color }),\n [size, color],\n );\n\n const body = (\n <MenuProvider size={size}>\n <DropdownMenuContentContext.Provider value={contextValue}>{children}</DropdownMenuContentContext.Provider>\n </MenuProvider>\n );\n\n return (\n <DropdownMenuPrimitive.Portal container={container} forceMount={forceMount}>\n <PortalTheme asChild>\n <DropdownMenuPrimitive.SubContent\n data-accent-color={color}\n alignOffset={getMenuAlignOffset(scalarSize)}\n // Side offset accounts for the outer solid box-shadow\n sideOffset={1}\n collisionPadding={10}\n {...subContentProps}\n asChild={false}\n ref={forwardedRef}\n className={classNames(\n 'kui-PopperContent',\n 'kui-BaseMenuContent',\n 'kui-variant-soft',\n 'kui-BaseMenuSubContent',\n 'kui-DropdownMenuContent',\n 'kui-DropdownMenuSubContent',\n className,\n )}\n >\n {virtualized ? (\n <div className={classNames('kui-BaseMenuViewport', 'kui-DropdownMenuViewport', 'kui-virtualized')}>\n {body}\n </div>\n ) : (\n <ScrollArea type=\"auto\" scrollbars=\"vertical\">\n <div className={classNames('kui-BaseMenuViewport', 'kui-DropdownMenuViewport')}>{body}</div>\n </ScrollArea>\n )}\n </DropdownMenuPrimitive.SubContent>\n </PortalTheme>\n </DropdownMenuPrimitive.Portal>\n );\n },\n);\nCascadeSubContent.displayName = 'DropdownMenu.CascadeSubContent';\n\ninterface DrillDownPanelProps extends DropdownMenuSubContentProps {\n store: NonNullable<ReturnType<typeof useDrillDownStore>>;\n sub: NonNullable<ReturnType<typeof useSubContext>>;\n}\n\n/**\n * A submenu rendered inline in drill-down mode. It mounts its children only\n * while it is on the navigation stack, and shows its own items only while it\n * is the top level; deeper panels inside it stay mounted.\n */\nconst DrillDownPanel = React.forwardRef<DropdownMenuSubContentElement, DrillDownPanelProps>(\n ({ store, sub, ...props }, forwardedRef) => {\n const position = usePanelPosition(store, sub.id);\n const entry = useStackEntry(store, sub.id);\n\n if (position === 'closed') return null;\n\n const {\n className,\n children,\n container: _container,\n forceMount: _forceMount,\n virtualized: _virtualized,\n size: _size,\n color: _color,\n ...panelProps\n } = omitPopperProps(props);\n\n const isTop = position === 'top';\n const name = entry?.name || (typeof sub.label === 'string' ? sub.label : '');\n\n return (\n <div\n role=\"group\"\n aria-label={name || undefined}\n {...panelProps}\n ref={forwardedRef}\n data-drill-down-panel={sub.id}\n data-drill-down-active={isTop ? true : undefined}\n className={classNames('kui-DropdownMenuDrillDownPanel', className)}\n >\n {isTop && (\n <>\n <DrillDownBackItem label={sub.label} name={name} />\n <DropdownMenuPrimitive.Separator className=\"kui-BaseMenuSeparator kui-DropdownMenuSeparator\" />\n </>\n )}\n <MenuGroupLabelProvider value={null}>\n <DrillDownLevelContext.Provider value={isTop}>{children}</DrillDownLevelContext.Provider>\n </MenuGroupLabelProvider>\n </div>\n );\n },\n);\nDrillDownPanel.displayName = 'DropdownMenu.DrillDownPanel';\n\ntype DropdownMenuTriggerIconElement = React.ElementRef<'svg'>;\ninterface DropdownMenuTriggerIconProps extends IconProps {}\nconst DropdownMenuTriggerIcon = React.forwardRef<\n DropdownMenuTriggerIconElement,\n DropdownMenuTriggerIconProps\n>(({ className, ...props }, forwardedRef) => (\n <ChevronDownIcon\n {...props}\n ref={forwardedRef}\n className={classNames('kui-DropdownMenuTriggerIcon', className)}\n />\n));\nDropdownMenuTriggerIcon.displayName = 'DropdownMenu.TriggerIcon';\n\nexport {\n DropdownMenuRoot as Root,\n DropdownMenuTrigger as Trigger,\n DropdownMenuTriggerIcon as TriggerIcon,\n DropdownMenuContent as Content,\n DropdownMenuLabel as Label,\n DropdownMenuItem as Item,\n DropdownMenuGroup as Group,\n DropdownMenuRadioGroup as RadioGroup,\n DropdownMenuRadioItem as RadioItem,\n DropdownMenuCheckboxItem as CheckboxItem,\n DropdownMenuSub as Sub,\n DropdownMenuSubTrigger as SubTrigger,\n DropdownMenuSubContent as SubContent,\n DropdownMenuSeparator as Separator,\n};\n\nexport type {\n DropdownMenuRootProps as RootProps,\n DropdownMenuTriggerProps as TriggerProps,\n DropdownMenuTriggerIconProps as TriggerIconProps,\n DropdownMenuContentProps as ContentProps,\n DropdownMenuLabelProps as LabelProps,\n DropdownMenuItemProps as ItemProps,\n DropdownMenuGroupProps as GroupProps,\n DropdownMenuRadioGroupProps as RadioGroupProps,\n DropdownMenuRadioItemProps as RadioItemProps,\n DropdownMenuCheckboxItemProps as CheckboxItemProps,\n DropdownMenuSubProps as SubProps,\n DropdownMenuSubTriggerProps as SubTriggerProps,\n DropdownMenuSubContentProps as SubContentProps,\n DropdownMenuSeparatorProps as SeparatorProps,\n SubmenuBehavior,\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["dropdown_menu_exports", "__export", "DropdownMenuCheckboxItem", "DropdownMenuContent", "DropdownMenuGroup", "DropdownMenuItem", "DropdownMenuLabel", "DropdownMenuRadioGroup", "DropdownMenuRadioItem", "DropdownMenuRoot", "DropdownMenuSeparator", "DropdownMenuSub", "DropdownMenuSubContent", "DropdownMenuSubTrigger", "DropdownMenuTrigger", "DropdownMenuTriggerIcon", "React", "classNames", "DropdownMenuPrimitive", "Slot", "useCallbackRef", "DropdownMenuOpenContext", "DropdownMenuRoot", "props", "openProp", "defaultOpen", "onOpenChange", "uncontrolledOpen", "setUncontrolledOpen", "open", "handleOpenChangeProp", "useCallbackRef", "handleOpenChange", "next", "close", "MenuCloseProvider", "DropdownMenuPrimitive", "DropdownMenuTrigger", "children", "forwardedRef", "requireReactElement", "DropdownMenuContentContext", "BACK_KEYS", "FORWARD_KEYS", "isTextEntryTarget", "target", "getDirection", "element", "DropdownMenuContent", "ownProps", "useThemeSizeProps", "baseMenuContentPropDefs", "themeContext", "useThemeContext", "size", "className", "color", "container", "forceMount", "submenuBehavior", "virtualized", "onEscapeKeyDown", "onKeyDown", "contentProps", "extractProps", "resolvedColor", "behavior", "useResolvedResponsiveValue", "isDrillDown", "drillDownStore", "useCreateDrillDownStore", "handleEscapeKeyDown", "event", "handleKeyDown", "contextValue", "contentBody", "MenuProvider", "DrillDownRoot", "PortalTheme", "classNames", "ScrollArea", "DropdownMenuLabel", "idProp", "isLevelVisible", "DrillDownLevelContext", "id", "useMenuGroupLabelId", "DropdownMenuItem", "baseMenuItemPropDefs", "shortcut", "itemProps", "toAriaKeyShortcuts", "Slot", "MenuShortcut", "DropdownMenuGroup", "ariaLabelledBy", "labelledBy", "setLabelId", "useMenuGroupLabelledBy", "MenuGroupLabelProvider", "DropdownMenuRadioGroup", "DropdownMenuRadioItem", "baseMenuRadioItemPropDefs", "ThickDotIcon", "DropdownMenuCheckboxItem", "baseMenuCheckboxItemPropDefs", "ThickCheckIcon", "DropdownMenuSub", "label", "useDrillDownStore", "subContextValue", "isOpenInDrillDown", "usePanelPosition", "isControlled", "defaultOpenRef", "wasOpenRef", "SubContext", "DropdownMenuSubTrigger", "subTriggerProps", "subContext", "useSubContext", "handleSelect", "ThickChevronRightIcon", "DropdownMenuSeparator", "DrillDownBackItem", "name", "labelText", "ariaLabel", "ThickChevronLeftIcon", "omitPopperProps", "_loop", "_onEscapeKeyDown", "_onPointerDownOutside", "_onFocusOutside", "_onInteractOutside", "_sideOffset", "_alignOffset", "_avoidCollisions", "_collisionBoundary", "_collisionPadding", "_arrowPadding", "_sticky", "_hideWhenDetached", "_updatePositionStrategy", "rest", "DropdownMenuSubContent", "DrillDownPanel", "CascadeSubContent", "parent", "_color", "subContentProps", "baseMenuSubContentPropDefs", "scalarSize", "body", "getMenuAlignOffset", "store", "sub", "position", "entry", "useStackEntry", "_container", "_forceMount", "_virtualized", "_size", "panelProps", "isTop", "DropdownMenuTriggerIcon", "ChevronDownIcon"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import{a as Ge,b as Ye}from"./chunk-4G3FJUER.js";import{a as Xe}from"./chunk-ZG2XQUOH.js";import{a as Ke}from"./chunk-YMUERC2J.js";import{a as je}from"./chunk-H73AMXCH.js";import{c as ue,d as pe,e as we,f as fe,i as Ae,j as Ie,k as Ne}from"./chunk-TSWHVZ47.js";import{c as xe,d as ke}from"./chunk-QEDKL23P.js";import{b as Ee}from"./chunk-5ON3XLRD.js";import{a as Le}from"./chunk-ANQLWGFN.js";import{a as $e}from"./chunk-QRV32INS.js";import{a as Fe,b as me}from"./chunk-3QWGSRYC.js";import{a as Pe,b as he,c as ve}from"./chunk-LTUW36HM.js";import{a as De,b as Be,c as Ve}from"./chunk-QKCNGEX4.js";import{a as Oe}from"./chunk-WEBNIUEX.js";import{a as J,b as We,c as _e,d as Ue,g as qe}from"./chunk-XUCR7L4G.js";import{a as ye}from"./chunk-G66WDIIV.js";import{e as ie,f as Te,h as Me,i as ne,j as ze,k as ce,l as de,n as He,o as oe}from"./chunk-GHWEXMF6.js";import{a as st}from"./chunk-VQPANPMI.js";var Pt={};st(Pt,{Bottom:()=>$e,Content:()=>at,Header:()=>nt,Inspector:()=>Ke,Left:()=>ot,PaneFooter:()=>Ie,PaneHeader:()=>Ae,Panel:()=>Ce,Rail:()=>lt,Root:()=>tt,Scroll:()=>Ne,Sidebar:()=>je,Trigger:()=>rt,useResponsivePresentation:()=>Xe,useShell:()=>Ye,useSidebarMode:()=>Ge});import*as e from"react";import $ from"classnames";import{Slot as it}from"radix-ui";import{useComposedRefs as be,useLayoutEffect as ct}from"radix-ui/internal";var Re=0;function Je(a){Re=Math.max(0,Re+a);let r=document.documentElement;Re>0?r.setAttribute("data-kui-shell-lock",""):r.removeAttribute("data-kui-shell-lock")}var Se="data-kui-shell-inert",dt=30;function Q(a,r){return r===null||r===a||r===a.body||r===a.documentElement}function Qe(a,r,s){for(let u of a.querySelectorAll("[data-shell-trigger][aria-controls]"))if(!(u.getAttribute("aria-controls")!==r||u.closest("[inert]"))&&!(s&&!s.some(R=>R.contains(u))))return u;return null}var ut={values:["1","2","3"]},et=e.createContext(null),Ze=64;function ge(a){return a.querySelector(":scope > .kui-ShellContent > .kui-ShellScroll > .kui-ScrollAreaViewport")??a.querySelector(":scope > .kui-ShellContent")}var tt=e.forwardRef(({className:a,children:r,height:s="full",contained:u,size:R,style:g,onKeyDown:F,onFocus:x,...k},T)=>{let P=Ee(R,ut),[i]=e.useState(Te),C=e.useCallback(t=>Me(i,t),[i]);e.useSyncExternalStore(C,()=>i.version,()=>0);let S=e.useRef(null),D=be(T,S),[E,w]=e.useState(()=>new Set),A=e.useCallback(t=>{w(n=>n.has(t)?n:new Set(n).add(t))},[]),f=e.useCallback(t=>{w(n=>{if(!n.has(t))return n;let o=new Set(n);return o.delete(t),o})},[]),m=e.useMemo(()=>({registerInset:A,unregisterInset:f}),[A,f]),I=e.useCallback(()=>{for(let t of i.entries.values())t.overlayLive&&t.setValue("closed","dismiss")},[i]),M=e.useCallback(()=>[...i.entries.values()].filter(t=>t.overlayLive&&t.el).map(t=>({name:t.name,id:t.id,el:t.el})),[i]),y=[...i.entries.values()].filter(t=>t.overlayLive&&t.el).length,N=u===!0||s!=="full"&&s!=="auto",V=!N&&s==="full",[Z,le]=e.useState(void 0);e.useEffect(()=>{if(!V)return;let t=S.current,n=t?.ownerDocument.defaultView;if(!t||!n||typeof n.matchMedia!="function")return;let o=xe(),c=o?n.scrollY:ge(t)?.scrollTop??0,h=0,v=0,L=()=>{v&&cancelAnimationFrame(v),v=requestAnimationFrame(()=>{v=0})},U=()=>{o&&!v&&(c=n.scrollY)},q=l=>{!o&&!v&&l.target instanceof HTMLElement&&l.target===ge(t)&&(c=l.target.scrollTop)};n.addEventListener("resize",L),n.addEventListener("scroll",U,{passive:!0}),t.addEventListener("scroll",q,{passive:!0,capture:!0});let se=ke(l=>{o=l;let d=c;h&&cancelAnimationFrame(h),h=requestAnimationFrame(()=>{if(h=0,l)n.scrollTo(0,d);else{let p=ge(t);p&&(p.scrollTop=d)}})});return()=>{h&&cancelAnimationFrame(h),v&&cancelAnimationFrame(v),n.removeEventListener("resize",L),n.removeEventListener("scroll",U),t.removeEventListener("scroll",q,{capture:!0}),se()}},[V]);let K=e.useCallback(()=>{let t=S.current;if(!t)return;let n=M().map(o=>o.el);for(let o of t.children){if(!(o instanceof HTMLElement)||o.classList.contains("kui-ShellScrim"))continue;let c=n.some(h=>o===h||o.contains(h));n.length===0||c?o.hasAttribute(Se)&&(o.removeAttribute(Se),o.inert=!1):o.inert||(o.setAttribute(Se,""),o.inert=!0)}},[M]),j=e.useRef(null),G=e.useRef([]),ee=e.useRef(null),O=e.useRef(!1),z=e.useRef(0),W=e.useCallback(()=>{z.current&&cancelAnimationFrame(z.current),z.current=0},[]),_=e.useCallback((t,n)=>{W();let o=0,c=()=>{if(z.current=0,!!t.isConnected){if(n(t.ownerDocument.activeElement)){t.focus({preventScroll:!0});return}o+=1,o<dt&&(z.current=requestAnimationFrame(c))}};z.current=requestAnimationFrame(c)},[W]);e.useEffect(()=>()=>{W(),O.current&&(O.current=!1,Je(-1))},[W]),e.useEffect(()=>{let t=S.current;if(!t)return;let n=t.ownerDocument,o=M(),c=o.map(l=>l.el),h=!N&&o.length>0;h!==O.current&&(O.current=h,Je(h?1:-1));let v=G.current;G.current=o;let L=v.filter(l=>{if(c.includes(l.el))return!1;let d=i.entries.get(l.name);return!l.el.isConnected||!d||d.el!==l.el||d.value==="closed"}),U=l=>l!==null&&L.some(d=>d.el.contains(l));if(v.length===0&&o.length>0){let l=n.activeElement,d=l instanceof HTMLElement&&!Q(n,l)&&!c.some(p=>p.contains(l))?l:null;if(d&&!t.contains(d)){let p=ee.current;p&&p.isConnected&&!c.some(te=>te.contains(p))&&(d=p)}j.current=d}if(K(),o.length===0){let l=j.current;if(j.current=null,L.length===0)return;let p=(H=>H!==null&&H.isConnected&&!H.closest("[inert]")&&!U(H))(l)?l:null;for(let H of L)p??(p=Qe(n,H.id));if(!p)return;let te=H=>Q(n,H)||U(H);te(n.activeElement)?p.focus({preventScroll:!0}):_(p,te);return}if(L.length>0){let l=n.activeElement;if(Q(n,l)||U(l)){let d=null;for(let p of L)d??(d=Qe(n,p.id,c));(d??c[c.length-1]).focus({preventScroll:!0})}}let q=c.filter(l=>!v.some(d=>d.el===l)),se=n.activeElement;q.length>0&&!c.some(l=>l.contains(se))&&(q[0].focus({preventScroll:!0}),_(q[0],l=>Q(n,l)||l instanceof Element&&l.closest("[inert]")!==null))}),e.useEffect(()=>{let t=S.current;if(!t||y===0||typeof MutationObserver>"u")return;let n=new MutationObserver(K);return n.observe(t,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["inert"]}),()=>n.disconnect()},[y,K]);let Y=t=>{F?.(t),!(t.key!=="Escape"||t.defaultPrevented||y===0)&&(I(),t.stopPropagation())};e.useEffect(()=>{let t=S.current;if(!t||y===0)return;let n=t.ownerDocument,o=c=>{c.key!=="Escape"||c.defaultPrevented||!Q(n,c.target)||I()};return n.addEventListener("keydown",o),()=>n.removeEventListener("keydown",o)},[y,I]);let ae=t=>{x?.(t),t.target instanceof HTMLElement&&S.current?.contains(t.target)&&(ee.current=t.target)},B=i.entries.get("rail"),X=B!==void 0&&B.value!==void 0&&B.value!=="closed"?E.has("rail")?`calc(${B.size}px + 2 * var(--shell-inset-gap))`:`${B.size}px`:void 0,re=s==="full"?{}:s==="auto"?{height:"auto"}:typeof s=="number"?{height:`${s}px`}:{height:s};return e.createElement(ze.Provider,{value:i},e.createElement(ue.Provider,{value:P},e.createElement(pe.Provider,{value:!1},e.createElement(we.Provider,{value:V},e.createElement(et.Provider,{value:le},e.createElement(He.Provider,{value:m},e.createElement(Le.Provider,{value:void 0},e.createElement("div",{...k,ref:D,className:$("kui-ShellRoot",a),"data-height":s==="auto"&&!N?"auto":void 0,"data-contained":N||void 0,"data-window":V||void 0,"data-has-inset":E.size>0||void 0,"data-overlay-live":y>0||void 0,onKeyDown:Y,onFocus:ae,style:{...re,...X?{"--shell-rail-offset":X}:{},...Z!==void 0?{"--kui-shell-header-h":`${Z}px`}:{},...g}},r,e.createElement("div",{className:"kui-ShellScrim","aria-hidden":!0,onClick:I})))))))))});tt.displayName="Shell.Root";var nt=e.forwardRef(({className:a,height:r=Ze,style:s,...u},R)=>{let g=e.useContext(et);return ct(()=>{if(g)return g(r===Ze?void 0:r),()=>g(void 0)},[g,r]),e.createElement("header",{...u,ref:R,className:$("kui-ShellHeader",a),style:{...s,"--shell-header-height":`${r}px`}})});nt.displayName="Shell.Header";var ot=e.forwardRef(({children:a},r)=>(e.useEffect(()=>{},[]),e.createElement(e.Fragment,null,a)));ot.displayName="Shell.Left";var pt={controlled:"open",default:"defaultOpen"},lt=e.forwardRef((a,r)=>{let{className:s,presentation:u,expandedSize:R=64,collapsible:g,onExpand:F,onCollapse:x,children:k,style:T,open:P,defaultOpen:i,onOpenChange:C,inset:S,id:D,...E}=a,{table:w,attributes:A}=ve(u,"fixed"),f=Pe({name:"rail",label:"Rail",propNames:pt,id:D,controlled:J(P),defaultValue:J(i),presentationTable:w,builtIn:We,onChange:(I,M)=>C?.(I!=="closed",{reason:M}),onExpand:F,onCollapse:x,size:R});oe("rail",S);let m=be(r,f.setElement);return e.createElement("div",{...E,role:E.role??"navigation",id:f.id,ref:m,className:$("kui-ShellPane","kui-ShellRail",s),...he(f,A),"data-inset":S||void 0,tabIndex:f.overlaying?-1:E.tabIndex,style:{...T,"--rail-size":`${R}px`}},e.createElement(ft,null,k))});lt.displayName="Shell.Rail";function ft({children:a}){let r=e.useContext(ue);return e.createElement("div",{className:$("kui-ShellRailContent",`kui-r-size-${r}`)},e.createElement(fe,{presentation:"thin"},a))}var mt={controlled:"open",default:"defaultOpen"},Ce=e.forwardRef((a,r)=>{let{className:s,presentation:u,defaultOpen:R,open:g,onOpenChange:F,size:x,defaultSize:k,expandedSize:T=288,minSize:P=100,maxSize:i=800,resizable:C=!1,collapsible:S=!0,onExpand:D,onCollapse:E,onResize:w,onResizeStart:A,onResizeEnd:f,snapPoints:m,snapTolerance:I,collapseThreshold:M,paneId:y,persistence:N,children:V,style:Z,onSizeChange:le,sizeUpdate:K,sizeUpdateMs:j=50,inset:G,id:ee,...O}=a,z=ce("Shell.Panel"),W=de(z,"rail"),_=ve(u,"fixed"),Y=u===void 0,ae=Y?W?.presentationTable??ie:_.table,B=Y?{"data-presentation-follows":""}:_.attributes,b=Pe({name:"panel",label:"Panel",propNames:mt,id:ee,controlled:J(g),defaultValue:J(R),presentationTable:ae,builtIn:_e,onChange:(v,L)=>F?.(v!=="closed",{reason:L}),onExpand:D,onCollapse:E,size:T});oe("panel",G),e.useEffect(()=>{(m!==void 0||M!==void 0||y!==void 0||N!==void 0)&&void 0},[m,M,y,N]);let X=e.useRef(null),re=be(r,b.setElement,X),t=Be({name:"panel",elementId:b.id,elementRef:X,cssVarName:"--panel-size",orientation:"vertical",edge:"end",growth:Ue,expandedSize:T,minSize:P,maxSize:i,resizable:C,collapsible:S,size:x,defaultSize:k,onSizeChange:le,sizeUpdate:K,sizeUpdateMs:j,onResize:w,onResizeStart:A,onResizeEnd:f,snapPoints:m,snapTolerance:I,collapseThreshold:M,paneId:y,persistence:N,overlaying:b.overlaying,overlayingNow:()=>(Y?z.entries.get("rail")?.presentationTable??ie:_.table)[ye()]==="overlay",requestCollapse:()=>b.setValue("closed","toggle"),requestToggle:()=>b.toggle("toggle")}),n=De(x,k,P,i),{handles:o,content:c}=Ve(V,me),h=C&&b.shown!==!1&&!b.overlaying?e.createElement(Oe.Provider,{value:t},o.length>0?o:e.createElement(Fe,null)):null;return e.createElement("div",{...qe(O),role:O.role??"navigation",id:b.id,ref:re,className:$("kui-ShellPane","kui-ShellPanel",s),...he(b,B),"data-inset":G||void 0,tabIndex:b.overlaying?-1:O.tabIndex,style:{...Z,"--panel-expanded-size":`${T}px`,...n?{"--panel-size":n}:{}}},e.createElement("div",{className:"kui-ShellPanelContent"},e.createElement(fe,null,c)),h)});Ce.displayName="Shell.Panel";Ce.Handle=me;var at=e.forwardRef(({className:a,inset:r,children:s,...u},R)=>(oe("content",r),e.createElement("main",{...u,ref:R,className:$("kui-ShellContent",a),"data-inset":r||void 0},e.createElement(pe.Provider,{value:!0},s))));at.displayName="Shell.Content";var rt=e.forwardRef(({target:a,action:r="toggle",peekOnHover:s,asChild:u=!1,onClick:R,onMouseEnter:g,onMouseLeave:F,children:x,...k},T)=>{let P=ce("Shell.Trigger");e.useEffect(()=>{a==="left"&&void 0,s&&void 0},[a,s]);let i=a==="left"?"rail":a,C=de(P,i),S=C?.value===void 0?void 0:C.value!=="closed",D=f=>{if(R?.(f),f.defaultPrevented)return;let m=P.entries.get(i);m&&(P.peek===i&&ne(P,null),r==="toggle"?m.toggle("toggle"):r==="expand"?m.setValue("open","toggle"):m.setValue("closed","toggle"))},E=f=>{if(g?.(f),!s)return;let m=P.entries.get(i);m&&m.value==="closed"&&m.presentation!=="overlay"&&ne(P,i)},w=f=>{F?.(f),s&&P.peek===i&&ne(P,null)},A=u?it.Root:"button";return e.createElement(A,{...!u&&{type:"button"},"aria-controls":C?.id,"aria-expanded":S,...k,ref:T,onClick:D,onMouseEnter:E,onMouseLeave:w,"data-shell-trigger":a,"data-shell-action":r},x)});rt.displayName="Shell.Trigger";export{tt as a,nt as b,ot as c,lt as d,Ce as e,at as f,rt as g,Pt as h};
|
|
3
|
+
//# sourceMappingURL=chunk-6HEORZNJ.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/components/shell.tsx"],
|
|
4
|
+
"sourcesContent": ["/**\n * Shell: the app frame.\n *\n * Since 0.8.0 the Shell is built on kookie-ui-v2's model, behind v1's API:\n *\n * - The Root is a CSS grid and renders its children as given, in JSX order.\n * Each pane claims its own grid area, so the Root never scans or reorders\n * children, any child renders, and a pane mounted after the Root works.\n * - State lives on each pane: `auto` (untouched), `open` or `closed`. An\n * untouched pane follows the window, resolved by the\n * stylesheet, so first paint needs no script and no open-state callback\n * fires on mount or on a resize.\n * - A pane is one element at every width. `overlay` is a posture of that\n * element, not a Sheet swapped in: crossing a breakpoint keeps its scroll\n * position, its focus and its children's state.\n * - The Root owns what an overlay needs: one scrim, `inert` on everything\n * else, focus moved in and returned, Escape, and a scroll lock.\n * - Nothing links panes to each other. A Rail closing no longer closes the\n * Panel; an app that wants that writes it in `onOpenChange`.\n */\n'use client';\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { Slot } from 'radix-ui';\nimport { useComposedRefs, useLayoutEffect } from 'radix-ui/internal';\nimport { PaneResizeContext } from './_internal/shell-resize.js';\nimport { PaneHandle, PanelHandle } from './_internal/shell-handles.js';\nimport { Sidebar } from './_internal/shell-sidebar.js';\nimport type { SidebarPublicProps } from './_internal/shell-sidebar.js';\nimport { Bottom } from './_internal/shell-bottom.js';\nimport type { BottomPublicProps } from './_internal/shell-bottom.js';\nimport { Inspector } from './_internal/shell-inspector.js';\nimport type { InspectorPublicProps } from './_internal/shell-inspector.js';\nimport { usePane, paneAttributes, usePresentationTable } from './_internal/shell-pane.js';\nimport { splitHandles, useInitialPaneSize, useResizablePane } from './_internal/shell-resizable.js';\nimport {\n FIXED_TABLE,\n ShellInsetContext,\n ShellStoreContext,\n createShellStore,\n setShellPeek,\n subscribeShellStore,\n useInsetRegistration,\n usePaneEntry,\n useShellStore,\n warnOnce,\n type InsetPaneId,\n} from './_internal/shell-store.js';\nimport { navigationRest, detailRest, toPaneValue, startAnchoredGrowth, withoutRemovedPaneProps } from './_internal/shell-rest.js';\nimport { useShell, useSidebarMode } from './shell.context.js';\nimport { useResponsivePresentation } from './shell.hooks.js';\nimport { readBreakpoint } from '../hooks/use-breakpoint.js';\nimport { useThemeSize } from '../hooks/theme-size.js';\nimport { PaneChromeScope, PaneFooter, PaneHeader, Scroll, ShellContentContext, ShellSizeContext, ShellWindowContext } from './_internal/pane-chrome.js';\nimport { onPageScrollMediaChange, pageScrollMatches } from './_internal/shell-page-scroll.js';\nimport type { PaneSize, PaneHeaderProps, PaneFooterProps, ScrollProps } from './_internal/pane-chrome.js';\nimport { PaneBandSizeContext } from './_internal/pane-band-context.js';\nimport type { Breakpoint, CSSPropertiesWithVars, PaneBaseProps, PaneMode, PaneName, PaneTarget, ResponsivePresentation, SidebarMode } from './shell.types.js';\n\n/* \u2500\u2500 Root \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\nexport interface ShellRootProps extends React.ComponentPropsWithoutRef<'div'> {\n children: React.ReactNode;\n /**\n * The Shell's height. `full` (the default) is the window's height; on a narrow touch screen the\n * page scrolls instead of the content, so the browser can hide its toolbars. `auto` grows with\n * the content. Any other value is the Shell's own height, and makes it contained.\n */\n height?: 'full' | 'auto' | string | number;\n /**\n * Makes the Shell fill its parent instead of the window, and always scroll inside itself. Its\n * overlays cover only its own box and leave the page free to scroll. Use it for a Shell in a\n * card, a demo or a canvas. An explicit `height` implies it.\n */\n contained?: boolean;\n /** The index the panes' chrome takes: `Shell.PaneHeader`, `Shell.Scroll`, `Shell.PaneFooter` and the Sidebar rows in them. Defaults to the nearest Theme's size (3 when the Theme is 4), else `2`. */\n size?: PaneSize;\n}\n\n/**\n * Every Shell with a live overlay holds the page still, counted across Shells,\n * through an attribute the stylesheet reads. Saving and restoring the\n * document's inline `overflow` would fight any other scroll lock on the page.\n */\nlet pageLockHolders = 0;\nfunction updatePageLock(delta: 1 | -1) {\n pageLockHolders = Math.max(0, pageLockHolders + delta);\n const doc = document.documentElement;\n if (pageLockHolders > 0) doc.setAttribute('data-kui-shell-lock', '');\n else doc.removeAttribute('data-kui-shell-lock');\n}\n\n/** Marks a child the Root made inert, so closing removes only what the Root added. */\nconst INERT_MARK = 'data-kui-shell-inert';\n\n/** How many frames a focus rescue watches after an overlay opens or closes. */\nconst RESCUE_FRAMES = 30;\n\n/** Focus that is nowhere useful: the document, or nothing at all. */\nfunction isNowhere(doc: Document, el: Element | EventTarget | null): boolean {\n return el === null || el === doc || el === doc.body || el === doc.documentElement;\n}\n\n/** A Trigger that drives the pane with this id and can take focus, optionally only inside `within`. */\nfunction triggerFor(doc: Document, id: string, within?: HTMLElement[]): HTMLElement | null {\n for (const el of doc.querySelectorAll<HTMLElement>('[data-shell-trigger][aria-controls]')) {\n if (el.getAttribute('aria-controls') !== id || el.closest('[inert]')) continue;\n if (within && !within.some((pane) => pane.contains(el))) continue;\n return el;\n }\n return null;\n}\n\ntype LivePane = { name: PaneName; id: string; el: HTMLElement };\n\n/** Shell.Root's own range; a Theme size above it maps to 3. */\nconst shellSizePropDef = { values: ['1', '2', '3'] as const };\n\n/** Lets a Shell.Header tell the Root its height, for the rows that stick beneath it while the page scrolls. */\nconst ShellHeaderHeightContext = React.createContext<((height: number | undefined) => void) | null>(null);\n\n/** The Shell.Header's default height, which the stylesheet assumes until a Header says otherwise. */\nconst DEFAULT_HEADER_HEIGHT = 64;\n\n/** The content's scroller while the frame scrolls: the Shell.Scroll's viewport, or the content itself. */\nfunction frameScroller(rootEl: HTMLElement): HTMLElement | null {\n return rootEl.querySelector<HTMLElement>(':scope > .kui-ShellContent > .kui-ShellScroll > .kui-ScrollAreaViewport') ?? rootEl.querySelector<HTMLElement>(':scope > .kui-ShellContent');\n}\n\nconst Root = React.forwardRef<HTMLDivElement, ShellRootProps>(({ className, children, height = 'full', contained: containedProp, size: sizeProp, style, onKeyDown, onFocus, ...props }, ref) => {\n // No size of its own: the nearest Theme's, mapped into 1-3.\n const size = useThemeSize(sizeProp, shellSizePropDef);\n const [store] = React.useState(createShellStore);\n const subscribe = React.useCallback((listener: () => void) => subscribeShellStore(store, listener), [store]);\n // Subscribed for the re-render, not for a value: a pane opening or closing\n // must bring the Root back so containment and the scrim follow it.\n React.useSyncExternalStore(\n subscribe,\n () => store.version,\n () => 0,\n );\n\n const rootRef = React.useRef<HTMLDivElement | null>(null);\n const composedRef = useComposedRefs(ref, rootRef);\n\n // Inset: the Root paints the backdrop while any pane is inset.\n const [insetPanes, setInsetPanes] = React.useState<ReadonlySet<InsetPaneId>>(() => new Set());\n const registerInset = React.useCallback((id: InsetPaneId) => {\n setInsetPanes((prev) => (prev.has(id) ? prev : new Set(prev).add(id)));\n }, []);\n const unregisterInset = React.useCallback((id: InsetPaneId) => {\n setInsetPanes((prev) => {\n if (!prev.has(id)) return prev;\n const next = new Set(prev);\n next.delete(id);\n return next;\n });\n }, []);\n const insetContext = React.useMemo(() => ({ registerInset, unregisterInset }), [registerInset, unregisterInset]);\n\n const closeOverlays = React.useCallback(() => {\n for (const entry of store.entries.values()) {\n if (entry.overlayLive) entry.setValue('closed', 'dismiss');\n }\n }, [store]);\n\n const livePanes = React.useCallback(\n (): LivePane[] => [...store.entries.values()].filter((entry) => entry.overlayLive && entry.el).map((entry) => ({ name: entry.name, id: entry.id, el: entry.el as HTMLElement })),\n [store],\n );\n const liveCount = [...store.entries.values()].filter((entry) => entry.overlayLive && entry.el).length;\n\n // A contained Shell sits inside a page, and its overlays cover only its box:\n // it holds no page lock. A height of its own implies it. `full` is the\n // window, and `auto` grows with its content, so its overlays are placed on\n // the window. Only a `full` Shell lets the page scroll on a phone.\n const contained = containedProp === true || (height !== 'full' && height !== 'auto');\n const windowShell = !contained && height === 'full';\n\n const [headerHeight, setHeaderHeight] = React.useState<number | undefined>(undefined);\n\n /*\n * The reading position crosses with the scroller. When a touch window\n * crosses the narrow boundary (a phone rotating, an iPad entering Split\n * View), the scroller changes between the content and the page, and the new\n * one starts at the top. The offset is remembered on `scroll` from whichever\n * scroller is live, because by the time the change is reported the old one\n * has already been laid out again and clamped. Only the live scroller is\n * heard. The clamp itself is reported as a scroll in the same frame as the\n * resize and before the media change, so scrolls are not heard from a resize\n * until that frame's animation callbacks.\n */\n React.useEffect(() => {\n if (!windowShell) return;\n const rootEl = rootRef.current;\n const win = rootEl?.ownerDocument.defaultView;\n if (!rootEl || !win || typeof win.matchMedia !== 'function') return;\n let pageScrolls = pageScrollMatches();\n let offset = pageScrolls ? win.scrollY : (frameScroller(rootEl)?.scrollTop ?? 0);\n let frame = 0;\n let resizing = 0;\n const onResize = () => {\n if (resizing) cancelAnimationFrame(resizing);\n resizing = requestAnimationFrame(() => {\n resizing = 0;\n });\n };\n const fromPage = () => {\n if (pageScrolls && !resizing) offset = win.scrollY;\n };\n const fromFrame = (event: Event) => {\n if (!pageScrolls && !resizing && event.target instanceof HTMLElement && event.target === frameScroller(rootEl)) offset = event.target.scrollTop;\n };\n win.addEventListener('resize', onResize);\n win.addEventListener('scroll', fromPage, { passive: true });\n rootEl.addEventListener('scroll', fromFrame, { passive: true, capture: true });\n const stop = onPageScrollMediaChange((matches) => {\n pageScrolls = matches;\n const carried = offset;\n if (frame) cancelAnimationFrame(frame);\n frame = requestAnimationFrame(() => {\n frame = 0;\n if (matches) win.scrollTo(0, carried);\n else {\n const el = frameScroller(rootEl);\n if (el) el.scrollTop = carried;\n }\n });\n });\n return () => {\n if (frame) cancelAnimationFrame(frame);\n if (resizing) cancelAnimationFrame(resizing);\n win.removeEventListener('resize', onResize);\n win.removeEventListener('scroll', fromPage);\n rootEl.removeEventListener('scroll', fromFrame, { capture: true });\n stop();\n };\n }, [windowShell]);\n\n /*\n * Containment is the Root's, not the pane's. Only the Root can see every live\n * overlay and every child at once. A per-pane effect, given two overlays,\n * inerts the other live overlay and restores values the other effect wrote,\n * which can leave the whole frame inert for good.\n *\n * Exempt are the scrim and each root child that CONTAINS a live overlay, so\n * a pane wrapped in a plain element is not inerted with its wrapper. A child\n * the Root inerts is marked, and closing clears only marked children, so\n * `inert` the app sets on a child is the app's before, during and after.\n */\n const contain = React.useCallback(() => {\n const rootEl = rootRef.current;\n if (!rootEl) return;\n const liveEls = livePanes().map((pane) => pane.el);\n for (const child of rootEl.children) {\n if (!(child instanceof HTMLElement) || child.classList.contains('kui-ShellScrim')) continue;\n const holdsLive = liveEls.some((el) => child === el || child.contains(el));\n if (liveEls.length === 0 || holdsLive) {\n if (child.hasAttribute(INERT_MARK)) {\n child.removeAttribute(INERT_MARK);\n child.inert = false;\n }\n } else if (!child.inert) {\n child.setAttribute(INERT_MARK, '');\n child.inert = true;\n }\n }\n }, [livePanes]);\n\n const returnFocusTo = React.useRef<HTMLElement | null>(null);\n const lastLive = React.useRef<LivePane[]>([]);\n const lastFocusInRoot = React.useRef<HTMLElement | null>(null);\n const holdsLock = React.useRef(false);\n\n /*\n * Focus can be taken away after the commit that moved it: a menu that\n * opened or closed a pane restores focus to its own trigger when it\n * finishes closing, which may be inert or hidden by then. For a few frames\n * after an overlay opens or closes, focus that ends up nowhere useful is\n * put back where it belongs.\n */\n const rescueFrame = React.useRef(0);\n const cancelRescue = React.useCallback(() => {\n if (rescueFrame.current) cancelAnimationFrame(rescueFrame.current);\n rescueFrame.current = 0;\n }, []);\n const rescueFocus = React.useCallback(\n (target: HTMLElement, lost: (active: Element | null) => boolean) => {\n cancelRescue();\n let frames = 0;\n const tick = () => {\n rescueFrame.current = 0;\n if (!target.isConnected) return;\n if (lost(target.ownerDocument.activeElement)) {\n target.focus({ preventScroll: true });\n return;\n }\n frames += 1;\n if (frames < RESCUE_FRAMES) rescueFrame.current = requestAnimationFrame(tick);\n };\n rescueFrame.current = requestAnimationFrame(tick);\n },\n [cancelRescue],\n );\n\n React.useEffect(\n () => () => {\n cancelRescue();\n if (holdsLock.current) {\n holdsLock.current = false;\n updatePageLock(-1);\n }\n },\n [cancelRescue],\n );\n\n // No dependency array, on purpose: a pane opening or closing is a render\n // of this component, and so is a child appearing through the Root.\n React.useEffect(() => {\n const rootEl = rootRef.current;\n if (!rootEl) return;\n const doc = rootEl.ownerDocument;\n const live = livePanes();\n const liveEls = live.map((pane) => pane.el);\n\n const wantsLock = !contained && live.length > 0;\n if (wantsLock !== holdsLock.current) {\n holdsLock.current = wantsLock;\n updatePageLock(wantsLock ? 1 : -1);\n }\n\n const previous = lastLive.current;\n lastLive.current = live;\n // A pane that left the live set because it closed, as opposed to one\n // that is still open but stopped being an overlay at a breakpoint.\n const closed = previous.filter((pane) => {\n if (liveEls.includes(pane.el)) return false;\n const entry = store.entries.get(pane.name);\n return !pane.el.isConnected || !entry || entry.el !== pane.el || entry.value === 'closed';\n });\n const inClosed = (active: Element | null) => active !== null && closed.some((pane) => pane.el.contains(active));\n\n // The return target is taken on the opening edge, before inerting: inerting\n // the subtree that holds the trigger blurs it. Focus already inside the\n // overlay (a pane that became one at a breakpoint) is no place to return\n // to, and an opener in a portal (a menu item) goes away with its menu, so\n // the last place focus held inside the frame stands in for it.\n if (previous.length === 0 && live.length > 0) {\n const active = doc.activeElement;\n let target = active instanceof HTMLElement && !isNowhere(doc, active) && !liveEls.some((el) => el.contains(active)) ? active : null;\n if (target && !rootEl.contains(target)) {\n const inRoot = lastFocusInRoot.current;\n if (inRoot && inRoot.isConnected && !liveEls.some((el) => el.contains(inRoot))) target = inRoot;\n }\n returnFocusTo.current = target;\n }\n\n contain();\n\n if (live.length === 0) {\n const before = returnFocusTo.current;\n returnFocusTo.current = null;\n // Every overlay that left only stopped being one: focus stays where it is.\n if (closed.length === 0) return;\n const usable = (el: HTMLElement | null) => el !== null && el.isConnected && !el.closest('[inert]') && !inClosed(el);\n let target = usable(before) ? before : null;\n for (const pane of closed) target ??= triggerFor(doc, pane.id);\n if (!target) return;\n const lost = (active: Element | null) => isNowhere(doc, active) || inClosed(active);\n if (lost(doc.activeElement)) target.focus({ preventScroll: true });\n else rescueFocus(target, lost);\n return;\n }\n\n // Some overlays closed while others stay: focus left in a closed one goes\n // to the Trigger that opened it, if a live pane holds it, or to the pane\n // on top.\n if (closed.length > 0) {\n const active = doc.activeElement;\n if (isNowhere(doc, active) || inClosed(active)) {\n let target: HTMLElement | null = null;\n for (const pane of closed) target ??= triggerFor(doc, pane.id, liveEls);\n (target ?? liveEls[liveEls.length - 1]).focus({ preventScroll: true });\n }\n }\n\n // Focus moves in on the opening edge and nowhere else, and only when it\n // is not already somewhere the user put it inside the live set.\n const opened = liveEls.filter((el) => !previous.some((pane) => pane.el === el));\n const active = doc.activeElement;\n if (opened.length > 0 && !liveEls.some((el) => el.contains(active))) {\n opened[0].focus({ preventScroll: true });\n rescueFocus(opened[0], (now) => isNowhere(doc, now) || (now instanceof Element && now.closest('[inert]') !== null));\n }\n });\n\n // A child that appears through its own state while an overlay is live does\n // not render the Root, so the Root watches its children while one is.\n React.useEffect(() => {\n const rootEl = rootRef.current;\n if (!rootEl || liveCount === 0 || typeof MutationObserver === 'undefined') return;\n const observer = new MutationObserver(contain);\n observer.observe(rootEl, { childList: true, subtree: true, attributes: true, attributeFilter: ['inert'] });\n return () => observer.disconnect();\n }, [liveCount, contain]);\n\n /*\n * Escape closes the overlays. It is handled as a React event on the Root, so\n * a component inside a pane that answers Escape in its own onKeyDown runs\n * first, and its preventDefault() or stopPropagation() keeps the pane open.\n * When the Root closes something it stops the event there, so a React\n * Escape handler above the Shell does not act on it too. A layer that\n * listens on the document in the capture phase (Radix dialogs, menus and\n * popovers) answers first and calls preventDefault() when it closes, so an\n * enclosing Kookie Dialog closes before a Shell inside it is asked.\n */\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(event);\n if (event.key !== 'Escape' || event.defaultPrevented || liveCount === 0) return;\n closeOverlays();\n event.stopPropagation();\n };\n\n // With focus on the document itself (a pane closed under it, or a menu that\n // closed and took focus with it), the Root never sees the key. While an\n // overlay is live the document answers that one case.\n React.useEffect(() => {\n const rootEl = rootRef.current;\n if (!rootEl || liveCount === 0) return;\n const doc = rootEl.ownerDocument;\n const onDocumentKeyDown = (event: KeyboardEvent) => {\n if (event.key !== 'Escape' || event.defaultPrevented || !isNowhere(doc, event.target)) return;\n closeOverlays();\n };\n doc.addEventListener('keydown', onDocumentKeyDown);\n return () => doc.removeEventListener('keydown', onDocumentKeyDown);\n }, [liveCount, closeOverlays]);\n\n const handleFocus = (event: React.FocusEvent<HTMLDivElement>) => {\n onFocus?.(event);\n if (event.target instanceof HTMLElement && rootRef.current?.contains(event.target)) lastFocusInRoot.current = event.target;\n };\n\n // A floating Panel sits beside the Rail when the Rail is showing, and\n // beside its card when the Rail is inset.\n const rail = store.entries.get('rail');\n const railShown = rail !== undefined && rail.value !== undefined && rail.value !== 'closed';\n const railOffset = railShown ? (insetPanes.has('rail') ? `calc(${rail.size}px + 2 * var(--shell-inset-gap))` : `${rail.size}px`) : undefined;\n\n // `full` writes no inline height: the stylesheet states it as 100vh with a\n // 100dvh override where supported, and an inline value would beat both.\n const heightStyle: React.CSSProperties = height === 'full' ? {} : height === 'auto' ? { height: 'auto' } : typeof height === 'number' ? { height: `${height}px` } : { height };\n\n return (\n <ShellStoreContext.Provider value={store}>\n <ShellSizeContext.Provider value={size}>\n <ShellContentContext.Provider value={false}>\n <ShellWindowContext.Provider value={windowShell}>\n <ShellHeaderHeightContext.Provider value={setHeaderHeight}>\n <ShellInsetContext.Provider value={insetContext}>\n {/* A Shell inside a portalled surface's Theme starts with no band, like any other. */}\n <PaneBandSizeContext.Provider value={undefined}>\n {/* The Root is not a widget: it hears Escape bubbling up from the panes,\n after their own handlers, to close the overlays. */}\n {/* eslint-disable-next-line jsx-a11y/no-static-element-interactions */}\n <div\n {...props}\n ref={composedRef}\n className={classNames('kui-ShellRoot', className)}\n data-height={height === 'auto' && !contained ? 'auto' : undefined}\n data-contained={contained || undefined}\n data-window={windowShell || undefined}\n data-has-inset={insetPanes.size > 0 || undefined}\n data-overlay-live={liveCount > 0 || undefined}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n style={{\n ...heightStyle,\n ...(railOffset ? ({ '--shell-rail-offset': railOffset } as CSSPropertiesWithVars) : {}),\n ...(headerHeight !== undefined ? ({ '--kui-shell-header-h': `${headerHeight}px` } as CSSPropertiesWithVars) : {}),\n ...style,\n }}\n >\n {children}\n {/* Root-owned and always mounted. The stylesheet shows it while an\n overlay is live; containment takes the rest of the frame out of\n the accessibility tree, so the scrim itself is hidden from it. */}\n <div className=\"kui-ShellScrim\" aria-hidden onClick={closeOverlays} />\n </div>\n </PaneBandSizeContext.Provider>\n </ShellInsetContext.Provider>\n </ShellHeaderHeightContext.Provider>\n </ShellWindowContext.Provider>\n </ShellContentContext.Provider>\n </ShellSizeContext.Provider>\n </ShellStoreContext.Provider>\n );\n});\nRoot.displayName = 'Shell.Root';\n\n/* \u2500\u2500 Header \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\ninterface ShellHeaderProps extends React.ComponentPropsWithoutRef<'header'> {\n height?: number;\n}\n\nconst Header = React.forwardRef<HTMLElement, ShellHeaderProps>(({ className, height = DEFAULT_HEADER_HEIGHT, style, ...props }, ref) => {\n // Rows that stick beneath the header while the page scrolls need its height. The stylesheet\n // assumes the default, so only another height is told to the Root.\n const setHeaderHeight = React.useContext(ShellHeaderHeightContext);\n useLayoutEffect(() => {\n if (!setHeaderHeight) return;\n setHeaderHeight(height === DEFAULT_HEADER_HEIGHT ? undefined : height);\n return () => setHeaderHeight(undefined);\n }, [setHeaderHeight, height]);\n return (\n <header\n {...props}\n ref={ref}\n className={classNames('kui-ShellHeader', className)}\n style={\n {\n ...style,\n '--shell-header-height': `${height}px`,\n } as CSSPropertiesWithVars\n }\n />\n );\n});\nHeader.displayName = 'Shell.Header';\n\n/* \u2500\u2500 Left (deprecated) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\ninterface LeftProps extends React.ComponentPropsWithoutRef<'div'> {\n presentation?: ResponsivePresentation;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean, meta: { reason: 'init' | 'toggle' | 'panel' | 'responsive' | 'dismiss' }) => void;\n collapsible?: boolean;\n onExpand?: () => void;\n onCollapse?: () => void;\n inset?: boolean;\n}\n\n/**\n * @deprecated The Root no longer wraps the Rail and Panel in a Left\n * container: each is its own pane. `Shell.Left` renders its children and\n * ignores its own props. Removed in 1.0.\n */\nconst Left = React.forwardRef<HTMLDivElement, LeftProps>(({ children }, _ref) => {\n React.useEffect(() => {\n warnOnce('Shell.Left is deprecated and is removed in 1.0. Render Shell.Rail and Shell.Panel directly in Shell.Root.');\n }, []);\n return <>{children}</>;\n});\nLeft.displayName = 'Shell.Left';\n\n/* \u2500\u2500 Rail \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\ntype RailOpenChangeMeta = { reason: 'init' | 'toggle' | 'responsive' | 'panel' | 'dismiss' };\n\ntype RailControlledProps = { open: boolean | Partial<Record<Breakpoint, boolean>>; onOpenChange?: (open: boolean, meta: RailOpenChangeMeta) => void; defaultOpen?: never };\ntype RailUncontrolledProps = { defaultOpen?: boolean | Partial<Record<Breakpoint, boolean>>; onOpenChange?: (open: boolean, meta: RailOpenChangeMeta) => void; open?: never };\n\ntype RailProps = React.ComponentPropsWithoutRef<'div'> & {\n presentation?: ResponsivePresentation;\n expandedSize?: number;\n collapsible?: boolean;\n /** @deprecated Use `onOpenChange`. */\n onExpand?: () => void;\n /** @deprecated Use `onOpenChange`. */\n onCollapse?: () => void;\n /** When true, adds margin and triggers the gray backdrop on the Shell. */\n inset?: boolean;\n} & (RailControlledProps | RailUncontrolledProps);\n\nconst RAIL_PROP_NAMES = { controlled: 'open', default: 'defaultOpen' };\n\nconst Rail = React.forwardRef<HTMLDivElement, RailProps>((props, ref) => {\n const { className, presentation, expandedSize = 64, collapsible: _collapsible, onExpand, onCollapse, children, style, open, defaultOpen, onOpenChange, inset, id, ...domProps } = props;\n const { table, attributes } = usePresentationTable(presentation, 'fixed');\n const pane = usePane({\n name: 'rail',\n label: 'Rail',\n propNames: RAIL_PROP_NAMES,\n id,\n controlled: toPaneValue(open),\n defaultValue: toPaneValue(defaultOpen),\n presentationTable: table,\n builtIn: navigationRest,\n onChange: (value, reason) => onOpenChange?.(value !== 'closed', { reason }),\n onExpand,\n onCollapse,\n size: expandedSize,\n });\n useInsetRegistration('rail', inset);\n const composedRef = useComposedRefs(ref, pane.setElement);\n\n return (\n <div\n {...domProps}\n role={domProps.role ?? 'navigation'}\n id={pane.id}\n ref={composedRef}\n className={classNames('kui-ShellPane', 'kui-ShellRail', className)}\n {...paneAttributes(pane, attributes)}\n data-inset={inset || undefined}\n tabIndex={pane.overlaying ? -1 : domProps.tabIndex}\n style={{ ...style, '--rail-size': `${expandedSize}px` } as CSSPropertiesWithVars}\n >\n <RailContent>{children}</RailContent>\n </div>\n );\n});\nRail.displayName = 'Shell.Rail';\n\n/** The Rail's content carries the index, so the thin row styles can size themselves by it. */\nfunction RailContent({ children }: { children: React.ReactNode }) {\n const size = React.useContext(ShellSizeContext);\n return (\n <div className={classNames('kui-ShellRailContent', `kui-r-size-${size}`)}>\n <PaneChromeScope presentation=\"thin\">{children}</PaneChromeScope>\n </div>\n );\n}\n\n/* \u2500\u2500 Panel \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\ntype HandleComponent = React.ForwardRefExoticComponent<React.ComponentPropsWithoutRef<'div'> & React.RefAttributes<HTMLDivElement>>;\n\ntype PanelOpenChangeMeta = { reason: 'toggle' | 'left' | 'init' | 'responsive' | 'dismiss' };\ntype PanelControlledProps = { open: boolean | Partial<Record<Breakpoint, boolean>>; onOpenChange?: (open: boolean, meta: PanelOpenChangeMeta) => void; defaultOpen?: never };\ntype PanelUncontrolledProps = { defaultOpen?: boolean | Partial<Record<Breakpoint, boolean>>; onOpenChange?: (open: boolean, meta: PanelOpenChangeMeta) => void; open?: never };\n\ntype PanelSizeControlledProps = { size: number | string; defaultSize?: never };\ntype PanelSizeUncontrolledProps = { defaultSize?: number | string; size?: never };\n\ntype PanelSizeChangeMeta = { reason: 'init' | 'resize' | 'controlled' };\ntype PanelPublicProps = PaneBaseProps &\n (PanelControlledProps | PanelUncontrolledProps) &\n (PanelSizeControlledProps | PanelSizeUncontrolledProps) & {\n onSizeChange?: (size: number, meta: PanelSizeChangeMeta) => void;\n sizeUpdate?: 'throttle' | 'debounce';\n sizeUpdateMs?: number;\n /** When true, adds margin and triggers the gray backdrop on the Shell. */\n inset?: boolean;\n };\ntype PanelComponent = React.ForwardRefExoticComponent<PanelPublicProps & React.RefAttributes<HTMLDivElement>> & {\n Handle: HandleComponent;\n};\n\nconst PANEL_PROP_NAMES = { controlled: 'open', default: 'defaultOpen' };\n\n/**\n * A Panel with a `presentation` of its own uses it. One without follows the\n * Rail rendered before it, which is how 0.7 placed a Panel; the stylesheet\n * reads the Rail's attributes for the first paint and the registry carries\n * the Rail's table for the JS mirror.\n */\nconst Panel = React.forwardRef<HTMLDivElement, PanelPublicProps>((props, ref) => {\n const {\n className,\n presentation,\n defaultOpen,\n open,\n onOpenChange,\n size,\n defaultSize,\n expandedSize = 288,\n minSize = 100,\n maxSize = 800,\n resizable = false,\n collapsible = true,\n onExpand,\n onCollapse,\n onResize,\n onResizeStart,\n onResizeEnd,\n snapPoints,\n snapTolerance,\n collapseThreshold,\n paneId,\n persistence,\n children,\n style,\n onSizeChange,\n sizeUpdate,\n sizeUpdateMs = 50,\n inset,\n id,\n ...domProps\n } = props;\n const store = useShellStore('Shell.Panel');\n const rail = usePaneEntry(store, 'rail');\n const own = usePresentationTable(presentation, 'fixed');\n const followsRail = presentation === undefined;\n const presentationTable = followsRail ? (rail?.presentationTable ?? FIXED_TABLE) : own.table;\n const presentationAttributes = followsRail ? { 'data-presentation-follows': '' } : own.attributes;\n\n const pane = usePane({\n name: 'panel',\n label: 'Panel',\n propNames: PANEL_PROP_NAMES,\n id,\n controlled: toPaneValue(open),\n defaultValue: toPaneValue(defaultOpen),\n presentationTable,\n builtIn: detailRest,\n onChange: (value, reason) => onOpenChange?.(value !== 'closed', { reason }),\n onExpand,\n onCollapse,\n size: expandedSize,\n });\n useInsetRegistration('panel', inset);\n\n React.useEffect(() => {\n if (snapPoints !== undefined || collapseThreshold !== undefined || paneId !== undefined || persistence !== undefined) {\n warnOnce('Shell.Panel: `snapPoints`, `collapseThreshold`, `paneId` and `persistence` are deprecated and are removed in 1.0. Keep the size in your own state with `size`/`onSizeChange`.');\n }\n }, [snapPoints, collapseThreshold, paneId, persistence]);\n\n const elementRef = React.useRef<HTMLElement | null>(null);\n const composedRef = useComposedRefs(ref, pane.setElement, elementRef);\n\n const resize = useResizablePane({\n name: 'panel',\n elementId: pane.id,\n elementRef,\n cssVarName: '--panel-size',\n orientation: 'vertical',\n edge: 'end',\n growth: startAnchoredGrowth,\n expandedSize,\n minSize,\n maxSize,\n resizable,\n collapsible,\n size,\n defaultSize,\n onSizeChange,\n sizeUpdate,\n sizeUpdateMs,\n onResize,\n onResizeStart,\n onResizeEnd,\n snapPoints,\n snapTolerance,\n collapseThreshold,\n paneId,\n persistence,\n overlaying: pane.overlaying,\n // Asked when the effect runs: the Rail registers its table after this\n // Panel first renders, so the render's answer can be out of date.\n overlayingNow: () => {\n const table = followsRail ? (store.entries.get('rail')?.presentationTable ?? FIXED_TABLE) : own.table;\n return table[readBreakpoint()] === 'overlay';\n },\n requestCollapse: () => pane.setValue('closed', 'toggle'),\n requestToggle: () => pane.toggle('toggle'),\n });\n\n // The starting size is in the server HTML, so the pane does not jump on hydration.\n const initialSize = useInitialPaneSize(size, defaultSize, minSize, maxSize);\n const { handles, content } = splitHandles(children, PanelHandle);\n const handle = resizable && pane.shown !== false && !pane.overlaying ? <PaneResizeContext.Provider value={resize}>{handles.length > 0 ? handles : <PaneHandle />}</PaneResizeContext.Provider> : null;\n\n return (\n <div\n {...withoutRemovedPaneProps(domProps)}\n role={domProps.role ?? 'navigation'}\n id={pane.id}\n ref={composedRef}\n className={classNames('kui-ShellPane', 'kui-ShellPanel', className)}\n {...paneAttributes(pane, presentationAttributes)}\n data-inset={inset || undefined}\n tabIndex={pane.overlaying ? -1 : domProps.tabIndex}\n style={\n {\n ...style,\n '--panel-expanded-size': `${expandedSize}px`,\n ...(initialSize ? { '--panel-size': initialSize } : {}),\n } as CSSPropertiesWithVars\n }\n >\n <div className=\"kui-ShellPanelContent\">\n <PaneChromeScope>{content}</PaneChromeScope>\n </div>\n {handle}\n </div>\n );\n}) as PanelComponent;\nPanel.displayName = 'Shell.Panel';\nPanel.Handle = PanelHandle;\n\n/* \u2500\u2500 Content \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\ninterface ShellContentProps extends React.ComponentPropsWithoutRef<'main'> {\n /** When true, adds margin and triggers the gray backdrop on the Shell. */\n inset?: boolean;\n}\n\n/**\n * The work area. It scrolls as it is; with a `Shell.Scroll` child it becomes a column and the\n * Scroll scrolls instead, so a `Shell.PaneHeader float` beside it stays pinned over the page.\n */\nconst Content = React.forwardRef<HTMLElement, ShellContentProps>(({ className, inset, children, ...props }, ref) => {\n useInsetRegistration('content', inset);\n return (\n <main {...props} ref={ref} className={classNames('kui-ShellContent', className)} data-inset={inset || undefined}>\n <ShellContentContext.Provider value={true}>{children}</ShellContentContext.Provider>\n </main>\n );\n});\nContent.displayName = 'Shell.Content';\n\n/* \u2500\u2500 Trigger \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\ntype TriggerAction = 'toggle' | 'expand' | 'collapse';\n\ninterface TriggerProps extends React.ComponentPropsWithoutRef<'button'> {\n target: PaneTarget;\n action?: TriggerAction;\n /**\n * Renders the single child in place of the trigger's own button, with the trigger's click,\n * `aria-controls`, `aria-expanded` and data attributes merged onto it. Use it to make a\n * `Button` the trigger: `<Shell.Trigger asChild><Button iconOnly aria-label=\"Toggle sidebar\">\u2026</Button></Shell.Trigger>`.\n */\n asChild?: boolean;\n /**\n * Whether to show a preview of the target pane on hover while it is closed\n * and not an overlay. Defaults to false.\n *\n * @deprecated Removed in 1.0. A preview reachable only by mouse hover has no\n * keyboard or touch equivalent; open the pane instead.\n */\n peekOnHover?: boolean;\n}\n\n/**\n * A button that drives a pane by name, through the registry. It sets\n * `aria-controls` and `aria-expanded` (left off while an untouched pane\n * cannot know its state yet), renders `type=\"button\"`, and runs the\n * consumer's `onClick` first: calling `preventDefault()` there cancels it. With `asChild` the\n * child is the button, and its own `type` stands.\n */\nconst Trigger = React.forwardRef<HTMLButtonElement, TriggerProps>(({ target, action = 'toggle', peekOnHover, asChild = false, onClick, onMouseEnter, onMouseLeave, children, ...props }, ref) => {\n const store = useShellStore('Shell.Trigger');\n React.useEffect(() => {\n if (target === 'left') warnOnce('Shell.Trigger target=\"left\" is deprecated and is removed in 1.0. Use target=\"rail\".');\n if (peekOnHover) warnOnce('Shell.Trigger: `peekOnHover` is deprecated and is removed in 1.0.');\n }, [target, peekOnHover]);\n const name: PaneName = target === 'left' ? 'rail' : target;\n // Subscribes to its own pane only.\n const entry = usePaneEntry(store, name);\n const shown = entry?.value === undefined ? undefined : entry.value !== 'closed';\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (event.defaultPrevented) return;\n const current = store.entries.get(name);\n if (!current) return;\n if (store.peek === name) setShellPeek(store, null);\n if (action === 'toggle') current.toggle('toggle');\n else if (action === 'expand') current.setValue('open', 'toggle');\n else current.setValue('closed', 'toggle');\n };\n\n const handleMouseEnter = (event: React.MouseEvent<HTMLButtonElement>) => {\n onMouseEnter?.(event);\n if (!peekOnHover) return;\n const current = store.entries.get(name);\n if (current && current.value === 'closed' && current.presentation !== 'overlay') setShellPeek(store, name);\n };\n\n const handleMouseLeave = (event: React.MouseEvent<HTMLButtonElement>) => {\n onMouseLeave?.(event);\n if (peekOnHover && store.peek === name) setShellPeek(store, null);\n };\n\n const Comp = asChild ? Slot.Root : 'button';\n return (\n <Comp\n // A button's default type is `submit`. Stated before the spread, so a consumer's own wins.\n // An asChild child states its own (Button already says `button`; a link has none), so the\n // key is left off rather than passed as undefined.\n {...(!asChild && { type: 'button' as const })}\n aria-controls={entry?.id}\n aria-expanded={shown}\n {...props}\n ref={ref}\n onClick={handleClick}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n data-shell-trigger={target}\n data-shell-action={action}\n >\n {children}\n </Comp>\n );\n});\nTrigger.displayName = 'Shell.Trigger';\n\n// Exports\nexport {\n Root,\n Header,\n Left,\n Rail,\n Panel,\n Sidebar,\n Content,\n Inspector,\n Bottom,\n Trigger,\n PaneHeader,\n PaneFooter,\n Scroll,\n useShell,\n useSidebarMode,\n useResponsivePresentation,\n type PaneMode,\n type SidebarMode,\n type ResponsivePresentation,\n type PaneTarget,\n type TriggerAction,\n type ShellRootProps as RootProps,\n type ShellHeaderProps as HeaderProps,\n type RailProps,\n type PanelPublicProps as PanelProps,\n type SidebarPublicProps as SidebarProps,\n type ShellContentProps as ContentProps,\n type InspectorPublicProps as InspectorProps,\n type BottomPublicProps as BottomProps,\n type TriggerProps,\n type PaneHeaderProps,\n type PaneFooterProps,\n type ScrollProps,\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["shell_exports", "__export", "Bottom", "Content", "Header", "Inspector", "Left", "PaneFooter", "PaneHeader", "Panel", "Rail", "Root", "Scroll", "Sidebar", "Trigger", "useResponsivePresentation", "useShell", "useSidebarMode", "React", "classNames", "Slot", "useComposedRefs", "useLayoutEffect", "pageLockHolders", "updatePageLock", "delta", "doc", "INERT_MARK", "RESCUE_FRAMES", "isNowhere", "el", "triggerFor", "id", "within", "pane", "shellSizePropDef", "ShellHeaderHeightContext", "DEFAULT_HEADER_HEIGHT", "frameScroller", "rootEl", "Root", "className", "children", "height", "containedProp", "sizeProp", "style", "onKeyDown", "onFocus", "props", "ref", "size", "useThemeSize", "store", "createShellStore", "subscribe", "listener", "subscribeShellStore", "rootRef", "composedRef", "useComposedRefs", "insetPanes", "setInsetPanes", "registerInset", "prev", "unregisterInset", "next", "insetContext", "closeOverlays", "entry", "livePanes", "liveCount", "contained", "windowShell", "headerHeight", "setHeaderHeight", "win", "pageScrolls", "pageScrollMatches", "offset", "frame", "resizing", "onResize", "fromPage", "fromFrame", "event", "stop", "onPageScrollMediaChange", "matches", "carried", "contain", "liveEls", "child", "holdsLive", "returnFocusTo", "lastLive", "lastFocusInRoot", "holdsLock", "rescueFrame", "cancelRescue", "rescueFocus", "target", "lost", "frames", "tick", "live", "wantsLock", "previous", "closed", "inClosed", "active", "inRoot", "before", "opened", "now", "observer", "handleKeyDown", "onDocumentKeyDown", "handleFocus", "rail", "railOffset", "heightStyle", "ShellStoreContext", "ShellSizeContext", "ShellContentContext", "ShellWindowContext", "ShellInsetContext", "PaneBandSizeContext", "classNames", "Header", "useLayoutEffect", "Left", "_ref", "RAIL_PROP_NAMES", "Rail", "presentation", "expandedSize", "_collapsible", "onExpand", "onCollapse", "open", "defaultOpen", "onOpenChange", "inset", "domProps", "table", "attributes", "usePresentationTable", "usePane", "toPaneValue", "navigationRest", "value", "reason", "useInsetRegistration", "paneAttributes", "RailContent", "PaneChromeScope", "PANEL_PROP_NAMES", "Panel", "defaultSize", "minSize", "maxSize", "resizable", "collapsible", "onResizeStart", "onResizeEnd", "snapPoints", "snapTolerance", "collapseThreshold", "paneId", "persistence", "onSizeChange", "sizeUpdate", "sizeUpdateMs", "useShellStore", "usePaneEntry", "own", "followsRail", "presentationTable", "FIXED_TABLE", "presentationAttributes", "detailRest", "elementRef", "resize", "useResizablePane", "startAnchoredGrowth", "readBreakpoint", "initialSize", "useInitialPaneSize", "handles", "content", "splitHandles", "PanelHandle", "handle", "PaneResizeContext", "PaneHandle", "withoutRemovedPaneProps", "Content", "Trigger", "action", "peekOnHover", "asChild", "onClick", "onMouseEnter", "onMouseLeave", "name", "shown", "handleClick", "current", "setShellPeek", "handleMouseEnter", "handleMouseLeave", "Comp", "Slot"]
|
|
7
|
+
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import{a as
|
|
3
|
-
//# sourceMappingURL=chunk-
|
|
2
|
+
import{a as P}from"./chunk-4MNRLB57.js";import{a as e}from"./chunk-L54FWKJE.js";import{c as s}from"./chunk-OKQAVYW4.js";import{a as l}from"./chunk-AQKSO3SW.js";import*as o from"react";import W from"classnames";import{Tooltip as t}from"radix-ui";var a={content:{type:"ReactNode",required:!0},width:e.width,minWidth:e.minWidth,maxWidth:{...e.maxWidth,default:"360px"}};var m=200,f=o.createContext(!1);function N({delayDuration:i=m,children:r,...p}){return o.createElement(f.Provider,{value:!0},o.createElement(t.Provider,{delayDuration:i,...p},r))}N.displayName="TooltipProvider";var g=o.forwardRef((i,r)=>{let{children:p,className:d,open:T,defaultOpen:c,onOpenChange:v,delayDuration:y,disableHoverableContent:h,content:u,container:R,forceMount:C,...D}=s(i,a),x={open:T,defaultOpen:c,onOpenChange:v,delayDuration:y,disableHoverableContent:h},w=o.useContext(f),n=o.createElement(t.Root,{...x},o.createElement(t.Trigger,{asChild:!0},p),o.createElement(t.Portal,{container:R,forceMount:C},o.createElement(l,{asChild:!0},o.createElement(t.Content,{sideOffset:4,collisionPadding:10,...D,asChild:!1,ref:r,className:W("kui-TooltipContent",d)},o.createElement(P,{as:"p",className:"kui-TooltipText",size:"1"},u),o.createElement(t.Arrow,{className:"kui-TooltipArrow"})))));return w?n:o.createElement(t.Provider,{delayDuration:m},n)});g.displayName="Tooltip";export{N as a,g as b};
|
|
3
|
+
//# sourceMappingURL=chunk-6YWHNLSC.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/components/tooltip.tsx", "../../src/components/tooltip.props.tsx"],
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nimport classNames from 'classnames';\nimport { Tooltip as TooltipPrimitive } from 'radix-ui';\n\nimport { Text } from './text.js';\nimport { PortalTheme } from './_internal/portal-theme.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport { tooltipPropDefs } from './tooltip.props.js';\n\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { GetPropDefTypes } from '../props/prop-def.js';\n\n/** The rest before a tooltip opens, in milliseconds. */\nconst TOOLTIP_DELAY = 200;\n\n/** True inside a `TooltipProvider`, so a Tooltip knows it need not bring its own. */\nconst TooltipProviderContext = React.createContext(false);\n\ninterface TooltipProviderProps extends React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Provider> {}\n\n/**\n * Groups the tooltips inside it: the first one waits `delayDuration` (200ms), and the next ones\n * open at once while the pointer moves between them. Put it once near the root of the app.\n * A Tooltip outside one still works, with the same delay, but each one waits on its own.\n */\nfunction TooltipProvider({ delayDuration = TOOLTIP_DELAY, children, ...props }: TooltipProviderProps) {\n return (\n <TooltipProviderContext.Provider value={true}>\n <TooltipPrimitive.Provider delayDuration={delayDuration} {...props}>\n {children}\n </TooltipPrimitive.Provider>\n </TooltipProviderContext.Provider>\n );\n}\nTooltipProvider.displayName = 'TooltipProvider';\n\ntype TooltipElement = React.ElementRef<typeof TooltipPrimitive.Content>;\ntype TooltipOwnProps = GetPropDefTypes<typeof tooltipPropDefs>;\ninterface TooltipProps\n extends React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Root>,\n ComponentPropsWithout<typeof TooltipPrimitive.Content, RemovedProps | 'content'>,\n TooltipOwnProps {\n content: React.ReactNode;\n container?: React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Portal>['container'];\n}\nconst Tooltip = React.forwardRef<TooltipElement, TooltipProps>((props, forwardedRef) => {\n const {\n children,\n className,\n open,\n defaultOpen,\n onOpenChange,\n delayDuration,\n disableHoverableContent,\n content,\n container,\n forceMount,\n ...tooltipContentProps\n } = extractProps(props, tooltipPropDefs);\n const rootProps = { open, defaultOpen, onOpenChange, delayDuration, disableHoverableContent };\n const hasProvider = React.useContext(TooltipProviderContext);\n const tooltip = (\n <TooltipPrimitive.Root {...rootProps}>\n <TooltipPrimitive.Trigger asChild>{children}</TooltipPrimitive.Trigger>\n <TooltipPrimitive.Portal container={container} forceMount={forceMount}>\n <PortalTheme asChild>\n <TooltipPrimitive.Content\n sideOffset={4}\n collisionPadding={10}\n {...tooltipContentProps}\n asChild={false}\n ref={forwardedRef}\n className={classNames('kui-TooltipContent', className)}\n >\n <Text as=\"p\" className=\"kui-TooltipText\" size=\"1\">\n {content}\n </Text>\n <TooltipPrimitive.Arrow className=\"kui-TooltipArrow\" />\n </TooltipPrimitive.Content>\n </PortalTheme>\n </TooltipPrimitive.Portal>\n </TooltipPrimitive.Root>\n );\n // Radix needs a provider above every tooltip. Outside a TooltipProvider, bring one.\n return hasProvider ? tooltip : <TooltipPrimitive.Provider delayDuration={TOOLTIP_DELAY}>{tooltip}</TooltipPrimitive.Provider>;\n});\nTooltip.displayName = 'Tooltip';\n\nexport { Tooltip, TooltipProvider };\nexport type { TooltipProps, TooltipProviderProps };\n", "import { widthPropDefs } from '../props/width.props.js';\n\nimport type { PropDef, GetPropDefTypes } from '../props/prop-def.js';\n\nconst tooltipPropDefs = {\n content: { type: 'ReactNode', required: true },\n width: widthPropDefs.width,\n minWidth: widthPropDefs.minWidth,\n maxWidth: { ...widthPropDefs.maxWidth, default: '360px' },\n} satisfies {\n width: PropDef<string>;\n minWidth: PropDef<string>;\n maxWidth: PropDef<string>;\n content: PropDef<React.ReactNode>;\n};\n\ntype TooltipOwnProps = GetPropDefTypes<typeof tooltipPropDefs & typeof widthPropDefs>;\n\nexport { tooltipPropDefs };\nexport type { TooltipOwnProps };\n"],
|
|
5
|
+
"mappings": ";gKAAA,UAAYA,MAAW,QACvB,OAAOC,MAAgB,aACvB,OAAS,WAAWC,MAAwB,WCE5C,IAAMC,EAAkB,CACtB,QAAS,CAAE,KAAM,YAAa,SAAU,EAAK,EAC7C,MAAOC,EAAc,MACrB,SAAUA,EAAc,SACxB,SAAU,CAAE,GAAGA,EAAc,SAAU,QAAS,OAAQ,CAC1D,EDIA,IAAMC,EAAgB,IAGhBC,EAA+B,gBAAc,EAAK,EASxD,SAASC,EAAgB,CAAE,cAAAC,EAAgBH,EAAe,SAAAI,EAAU,GAAGC,CAAM,EAAyB,CACpG,OACE,gBAACJ,EAAuB,SAAvB,CAAgC,MAAO,IACtC,gBAACK,EAAiB,SAAjB,CAA0B,cAAeH,EAAgB,GAAGE,GAC1DD,CACH,CACF,CAEJ,CACAF,EAAgB,YAAc,kBAW9B,IAAMK,EAAgB,aAAyC,CAACF,EAAOG,IAAiB,CACtF,GAAM,CACJ,SAAAJ,EACA,UAAAK,EACA,KAAAC,EACA,YAAAC,EACA,aAAAC,EACA,cAAAT,EACA,wBAAAU,EACA,QAAAC,EACA,UAAAC,EACA,WAAAC,EACA,GAAGC,CACL,EAAIC,EAAab,EAAOc,CAAe,EACjCC,EAAY,CAAE,KAAAV,EAAM,YAAAC,EAAa,aAAAC,EAAc,cAAAT,EAAe,wBAAAU,CAAwB,EACtFQ,EAAoB,aAAWpB,CAAsB,EACrDqB,EACJ,gBAAChB,EAAiB,KAAjB,CAAuB,GAAGc,GACzB,gBAACd,EAAiB,QAAjB,CAAyB,QAAO,IAAEF,CAAS,EAC5C,gBAACE,EAAiB,OAAjB,CAAwB,UAAWS,EAAW,WAAYC,GACzD,gBAACO,EAAA,CAAY,QAAO,IAClB,gBAACjB,EAAiB,QAAjB,CACC,WAAY,EACZ,iBAAkB,GACjB,GAAGW,EACJ,QAAS,GACT,IAAKT,EACL,UAAWgB,EAAW,qBAAsBf,CAAS,GAErD,gBAACgB,EAAA,CAAK,GAAG,IAAI,UAAU,kBAAkB,KAAK,KAC3CX,CACH,EACA,gBAACR,EAAiB,MAAjB,CAAuB,UAAU,mBAAmB,CACvD,CACF,CACF,CACF,EAGF,OAAOe,EAAcC,EAAU,gBAAChB,EAAiB,SAAjB,CAA0B,cAAeN,GAAgBsB,CAAQ,CACnG,CAAC,EACDf,EAAQ,YAAc",
|
|
6
|
+
"names": ["React", "classNames", "TooltipPrimitive", "tooltipPropDefs", "widthPropDefs", "TOOLTIP_DELAY", "TooltipProviderContext", "TooltipProvider", "delayDuration", "children", "props", "TooltipPrimitive", "Tooltip", "forwardedRef", "className", "open", "defaultOpen", "onOpenChange", "disableHoverableContent", "content", "container", "forceMount", "tooltipContentProps", "extractProps", "tooltipPropDefs", "rootProps", "hasProvider", "tooltip", "PortalTheme", "classNames", "Text"]
|
|
7
|
+
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import{b as P,d as $,f as A}from"./chunk-
|
|
3
|
-
//# sourceMappingURL=chunk-
|
|
2
|
+
import{b as P,d as $,f as A}from"./chunk-ISCZ57VL.js";import*as t from"react";import L from"classnames";import{useVirtualizer as oe}from"@tanstack/react-virtual";import{useLayoutEffect as B}from"radix-ui/internal";function q(r,a){if(r.style?.height!==a.style?.height||r.style?.transform!==a.style?.transform)return!1;let c=Object.keys(r);return c.length!==Object.keys(a).length?!1:c.every(s=>s==="style"||Object.is(r[s],a[s]))}var ce=t.memo(function({label:a,isHighlighted:c,id:s,style:f,tabIndex:h,"data-highlighted":o,"data-index":R,"aria-setsize":I,"aria-posinset":y,onMouseEnter:E,onMouseLeave:H,onClick:d,onKeyDown:T}){return t.createElement("div",{id:s,role:"menuitem",className:L("kui-reset","kui-BaseMenuItem","kui-VirtualMenuItem"),style:f,tabIndex:h,"data-highlighted":o,"data-index":R,"aria-setsize":I,"aria-posinset":y,onMouseEnter:E,onMouseLeave:H,onClick:d,onKeyDown:T},a)},q);function le(r,a,c){let[s,f]=t.useState(void 0);return B(()=>{let h=r.current;if(!a||!h)return;let o=document.createElement("div");o.className="kui-reset kui-BaseMenuItem kui-VirtualMenuItem",o.setAttribute("aria-hidden","true"),o.style.visibility="hidden",o.textContent="\xA0",h.appendChild(o);let R=o.getBoundingClientRect().height;o.remove(),f(R>0?R:void 0)},[r,a,c]),a?s:void 0}function de({items:r,itemLabel:a,renderItem:c,size:s,estimatedItemSize:f,overscan:h=5,onSelect:o,className:R,style:I,onKeyDown:y,onFocus:E,...H},d){let T=t.useId(),x=t.useRef(null),[S,m]=t.useState(-1),{isInsideMenu:l,size:C,itemHeight:U}=$(),D=A(),Y=t.useCallback(e=>{x.current=e,typeof d=="function"?d(e):d&&(d.current=e)},[d]),G=le(x,l&&s==null&&f==null,C),p=f??(s?P(s):G??U??P(C??"2"));if(!a&&!c)throw new Error("VirtualMenu requires either itemLabel or renderItem prop");let J=t.useMemo(()=>a?typeof a=="function"?a:e=>e[a]:null,[a]),v=t.useMemo(()=>r.length===0||S<0?-1:Math.min(S,r.length-1),[S,r.length]),Q=t.useMemo(()=>typeof p=="function"?p:()=>p,[p]),M=oe({count:r.length,getScrollElement:()=>x.current,estimateSize:Q,overscan:h}),X=M.getVirtualItems();B(()=>{M.measure()},[M,p]),t.useEffect(()=>{let e=x.current;if(!l||!e)return;let n=e.closest("[data-radix-menu-content]");if(!n)return;let i=u=>{u.target===n&&e.focus({preventScroll:!0})};return n.addEventListener("focusin",i),document.activeElement===n&&e.focus({preventScroll:!0}),()=>n.removeEventListener("focusin",i)},[l]);let z=t.useRef(y),w=t.useRef(E);z.current=y,w.current=E;let k=t.useRef(r),N=t.useRef(o),K=t.useRef(D);k.current=r,N.current=o,K.current=D;let g=t.useCallback(e=>{let n=k.current;e<0||e>=n.length||(N.current?.(n[e],e),K.current?.())},[]),b=t.useRef(M.scrollToIndex);b.current=M.scrollToIndex;let V=t.useRef(v);V.current=v;let Z=t.useCallback(e=>{let n=e.currentTarget.dataset.index;n!=null&&m(Number(n))},[]),ee=t.useCallback(e=>{let n=e.currentTarget.dataset.index;n!=null&&g(Number(n))},[g]),te=t.useCallback(e=>{let n=Number(e.currentTarget.dataset.index);m(i=>i===n?-1:i)},[]),ne=t.useCallback(e=>{if(e.key==="Enter"||e.key===" "){e.preventDefault(),e.stopPropagation();let n=e.currentTarget.dataset.index;n!=null&&g(Number(n))}},[g]),re=t.useCallback(e=>{if(z.current?.(e),e.defaultPrevented)return;let n=k.current,i=V.current;switch(e.key){case"ArrowDown":{e.preventDefault();let u=i<n.length-1?i+1:0;m(u),b.current(u,{align:"auto"});break}case"ArrowUp":{e.preventDefault();let u=i>0?i-1:n.length-1;m(u),b.current(u,{align:"auto"});break}case"Home":{e.preventDefault(),m(0),b.current(0,{align:"start"});break}case"End":{e.preventDefault();let u=n.length-1;m(u),b.current(u,{align:"end"});break}case"Enter":case" ":{e.preventDefault(),g(i);break}case"Tab":{l&&e.preventDefault();break}case"Escape":{l||e.currentTarget.blur();break}default:l&&e.key.length===1&&!e.ctrlKey&&!e.altKey&&!e.metaKey&&e.stopPropagation()}},[g,l]),ae=t.useCallback(e=>{w.current?.(e),e.target===e.currentTarget&&V.current<0&&k.current.length>0&&m(0)},[]),O=t.useCallback(e=>`${T}-item-${e}`,[T]),ie=t.useMemo(()=>({overflow:"auto",position:"relative",...I}),[I]),j=M.getTotalSize(),se=t.useMemo(()=>({height:`${j}px`,width:"100%",position:"relative"}),[j]);return t.createElement("div",{...H,ref:Y,role:l?"group":"menu","aria-activedescendant":v>=0?O(v):void 0,tabIndex:0,onKeyDown:re,onFocus:ae,className:L("kui-VirtualMenuRoot",!l&&`kui-r-size-${s??"2"}`,R),style:ie},t.createElement("div",{className:"kui-VirtualMenuViewport",style:se},X.map(e=>{let n=r[e.index],i=e.index,u=v===i,ue={height:e.size,transform:`translateY(${e.start}px)`},F={id:O(i),isHighlighted:u,style:ue,tabIndex:-1,"data-highlighted":u?!0:void 0,"data-index":i,"aria-setsize":r.length,"aria-posinset":i+1,onMouseEnter:Z,onMouseLeave:te,onClick:ee,onKeyDown:ne};return c?t.createElement(c,{key:e.key,item:n,index:i,...F}):t.createElement(ce,{key:e.key,label:J(n),...F})})))}var W=t.forwardRef(de);W.displayName="VirtualMenu";var _=t.forwardRef(({className:r,children:a,...c},s)=>t.createElement("div",{ref:s,role:"menuitem",className:L("kui-reset","kui-BaseMenuItem","kui-VirtualMenuItem",r),...c},a));_.displayName="VirtualMenu.Item";var me=t.memo(_,q),ge=Object.assign(W,{Item:me});export{ge as a};
|
|
3
|
+
//# sourceMappingURL=chunk-7QBNXNEN.js.map
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import{a as d}from"./chunk-
|
|
3
|
-
//# sourceMappingURL=chunk-
|
|
2
|
+
import{a as d}from"./chunk-KJZSXLIX.js";import{a as R}from"./chunk-4MNRLB57.js";import{a as u,b as f}from"./chunk-5ON3XLRD.js";import*as e from"react";import z from"classnames";var v=e.createContext(void 0),C={values:["1","2","3","4"]},N=e.forwardRef(({kind:r,size:o="2",color:t="gray",className:c,children:a,trailing:s,leading:i,...l},n)=>e.createElement("div",{role:"status","aria-live":"polite",...l,ref:n,className:z("kui-NoticeRoot",`kui-r-size-${o}`,c),"data-kind":r,"data-accent-color":t},i?e.createElement("span",{className:"kui-NoticeIcon","aria-hidden":!0},i):null,e.createElement(R,{as:"div",size:o,className:"kui-NoticeText"},a),s));N.displayName="Strip";var g=e.forwardRef(({icon:r,action:o,onDismiss:t,dismissLabel:c="Dismiss",size:a,...s},i)=>{let l=e.useContext(v),n=f(a??l,C),p=o||t?e.createElement("span",{className:"kui-NoticeActions"},o?e.createElement(u.Provider,{value:n},o):null,t?e.createElement(d,{iconOnly:!0,size:n,variant:"ghost",color:"gray","aria-label":c,className:"kui-NoticeDismiss",onClick:t},e.createElement("svg",{width:"15",height:"15",viewBox:"0 0 15 15",fill:"none","aria-hidden":!0},e.createElement("path",{d:"M4 4l7 7M11 4l-7 7",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}))):null):null;return e.createElement(N,{...s,size:n,ref:i,kind:"notice",leading:r,trailing:p})});g.displayName="Notice";var k=e.forwardRef(({confirmLabel:r,cancelLabel:o="Not now",onConfirm:t,onCancel:c,busy:a=!1,size:s,color:i="gray",...l},n)=>{let p=e.useContext(v),m=f(s??p,C);return e.createElement(N,{...l,size:m,color:i,ref:n,kind:"confirmation",trailing:e.createElement("span",{className:"kui-NoticeActions"},e.createElement(d,{size:m,variant:"ghost",color:"gray",disabled:a,onClick:c},o),e.createElement(d,{size:m,variant:"solid",color:i,loading:a,onClick:t},r))})});k.displayName="Confirmation";export{v as a,g as b,k as c};
|
|
3
|
+
//# sourceMappingURL=chunk-7V6M3MIR.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/components/_internal/pane-band-context.ts"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\n\ntype BandSize = '1' | '2' | '3' | '4';\n\n/**\n * Set by `Shell.PaneHeader` and `Shell.PaneFooter` to their band size, and by `Shell.Scroll` to\n * null (a scrolling list has no band).
|
|
5
|
-
"mappings": ";AAAA,UAAYA,MAAW,
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\n\ntype BandSize = '1' | '2' | '3' | '4';\n\n/**\n * Set by `Shell.PaneHeader` and `Shell.PaneFooter` to their band size, and by `Shell.Scroll` to\n * null (a scrolling list has no band). `PortalTheme`, the root of every portalled surface\n * (Popover, Dialog, Sheet, menus), sets null too, so a Toolbar in one does not take the Shell's\n * step; a `Theme asChild` an app nests in a pane leaves it alone. `Shell.Root` clears it again.\n * Unset (`undefined`) everywhere else.\n *\n * Its own module so PortalTheme can reset it without bringing the Shell.\n */\nconst PaneBandSizeContext = React.createContext<BandSize | null | undefined>(undefined);\n\nexport { PaneBandSizeContext };\nexport type { BandSize };\n"],
|
|
5
|
+
"mappings": ";AAAA,UAAYA,MAAW,QAavB,IAAMC,EAA4B,gBAA2C,MAAS",
|
|
6
6
|
"names": ["React", "PaneBandSizeContext"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import{c as t}from"./chunk-FVRVBB6O.js";import{a as o}from"./chunk-ANQLWGFN.js";import*as e from"react";var m=e.forwardRef((r,a)=>e.createElement(o.Provider,{value:null},e.createElement(t,{...r,ref:a})));m.displayName="PortalTheme";export{m as a};
|
|
3
|
+
//# sourceMappingURL=chunk-AQKSO3SW.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/components/_internal/portal-theme.tsx"],
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\n\nimport { Theme } from '../theme.js';\nimport { PaneBandSizeContext } from './pane-band-context.js';\n\n/**\n * The Theme at the root of a portalled surface (Popover, Dialog, Sheet, menus, Tooltip). The\n * surface renders outside any Shell pane even though context flows into it, so a Toolbar in it\n * does not take the pane's band size. A `Theme asChild` an app nests in a pane keeps the band.\n */\nconst PortalTheme = React.forwardRef<HTMLDivElement, React.ComponentPropsWithoutRef<typeof Theme>>((props, forwardedRef) => (\n <PaneBandSizeContext.Provider value={null}>\n <Theme {...props} ref={forwardedRef} />\n </PaneBandSizeContext.Provider>\n));\nPortalTheme.displayName = 'PortalTheme';\n\nexport { PortalTheme };\n"],
|
|
5
|
+
"mappings": ";gFAAA,UAAYA,MAAW,QAUvB,IAAMC,EAAoB,aAAyE,CAACC,EAAOC,IACzG,gBAACC,EAAoB,SAApB,CAA6B,MAAO,MACnC,gBAACC,EAAA,CAAO,GAAGH,EAAO,IAAKC,EAAc,CACvC,CACD,EACDF,EAAY,YAAc",
|
|
6
|
+
"names": ["React", "PortalTheme", "props", "forwardedRef", "PaneBandSizeContext", "Theme"]
|
|
7
|
+
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import{c as
|
|
3
|
-
//# sourceMappingURL=chunk-
|
|
2
|
+
import{c as j}from"./chunk-OKQAVYW4.js";import{c as I}from"./chunk-5ON3XLRD.js";import{c as E}from"./chunk-HBWBPBSA.js";import{b as L}from"./chunk-XU74PNM2.js";import*as r from"react";import re from"classnames";import{Direction as ae,Slider as v}from"radix-ui";var te=["1","2","3","4"],g={size:{type:"enum",className:"kui-r-size",values:te,default:"2",responsive:!0},showTickLabels:{type:"boolean"},snapToTicks:{type:"boolean"},...E,...L};var ne=r.forwardRef((K,O)=>{let W=I(K,g.size),{className:B,color:G,radius:A,tabIndex:C,...H}=j(W,g),{ticks:c,unit:u,showTickLabels:U,snapToTicks:y,value:$,defaultValue:q,onValueChange:x,onValueCommit:p,"aria-label":F,"aria-labelledby":J,...i}=H,k=i.min??0,d=i.max??100,[Q,X]=r.useState(()=>q??[k]),P=$!==void 0,s=P?$:Q,D=r.useId(),Y=i.step,l=r.useMemo(()=>c?[...c].sort((e,t)=>e.value-t.value):[],[c]),m=r.useCallback(e=>{let t=l[0].value;for(let a of l)Math.abs(a.value-e)<Math.abs(t-e)&&(t=a.value);return t},[l]),R=r.useCallback((e,t)=>{let a=m(e);return e>t&&a<=t?l.find(n=>n.value>t)?.value??t:e<t&&a>=t?[...l].reverse().find(n=>n.value<t)?.value??t:a},[m,l]),f=r.useRef(!1),N=r.useCallback(e=>{let t=a=>u?`${a} ${u}`:a.toString();return e.length===1?`${t(e[0])} out of ${t(d)}`:e.length===2?`${t(e[0])} to ${t(e[1])} out of ${t(d)}`:`${e.map(t).join(", ")} out of ${t(d)}`},[u,d]),Z=ae.useDirection(i.dir),T=i.orientation??"horizontal",V=T==="vertical"?!i.inverted:Z==="rtl"!=!!i.inverted,S=r.useMemo(()=>c?c.map((e,t)=>{let a=(e.value-k)/(d-k)*100;return{...e,percentage:V?100-a:a,index:t}}):null,[c,k,d,V]),b=r.useRef(null),h=r.useRef(null),_=r.useCallback(e=>{b.current&&(b.current.textContent=N(e),h.current&&clearTimeout(h.current),h.current=setTimeout(()=>{b.current&&(b.current.textContent="")},1e3))},[N]),w=r.useCallback(e=>{let a=y&&l.length>0?e.map((n,o)=>f.current&&s[o]!==void 0?R(n,s[o]):m(n)):e;P||X(a),x?.(a)},[y,l,R,m,s,x,P]),ee=r.useCallback(e=>{if(!p)return;if(!y||l.length===0){p(e);return}let t=f.current,a=e.map((n,o)=>t&&s[o]!==void 0?R(n,s[o]):m(n));t&&a.every((n,o)=>n===s[o])||p(a)},[p,y,l,R,m,s]);return r.useEffect(()=>()=>{h.current&&clearTimeout(h.current)},[]),r.createElement("div",{className:"kui-SliderContainer","data-orientation":T,"data-has-ticks":S?"":void 0},r.createElement("div",{ref:b,"aria-live":"polite","aria-atomic":"true",className:"kui-sr-only"}),r.createElement(v.Root,{"data-accent-color":G,"data-radius":A,ref:O,...i,value:s,step:Y,onKeyDown:e=>{f.current=!0,i.onKeyDown?.(e)},onPointerDown:e=>{f.current=!1,i.onPointerDown?.(e)},onValueChange:w,onValueCommit:ee,asChild:!1,className:re("kui-SliderRoot",B)},r.createElement(v.Track,{className:"kui-SliderTrack"},r.createElement(v.Range,{className:"kui-SliderRange","data-inverted":i.inverted?"":void 0})),s.map((e,t)=>r.createElement(v.Thumb,{key:t,className:"kui-SliderThumb",...C!==void 0?{tabIndex:C}:void 0,"aria-label":F,"aria-labelledby":J,"aria-valuetext":u?`${e} ${u}`:void 0}))),S&&r.createElement("div",{className:"kui-SliderTicks","data-orientation":T,role:"group","aria-label":"Slider tick marks"},S.map(e=>r.createElement("button",{key:e.index,className:"kui-SliderTick",style:T==="vertical"?{top:`${e.percentage}%`}:{left:`${e.percentage}%`},disabled:i.disabled,onClick:()=>{let t=0;s.forEach((n,o)=>{let M=Math.abs(n-e.value),z=Math.abs(s[t]-e.value);(M<z||M===z&&e.value>n)&&(t=o)});let a=s.map((n,o)=>o===t?e.value:n).sort((n,o)=>n-o);f.current=!1,w(a),p?.(a),_(a)},"aria-label":`Set to ${e.label||(u?`${e.value} ${u}`:e.value)}`,"aria-describedby":e.label?void 0:`${D}-tick-${e.index}`,type:"button"},r.createElement("div",{className:"kui-SliderTickMark"}),e.label&&U!==!1&&r.createElement("div",{className:"kui-SliderTickLabel"},e.label),!e.label&&r.createElement("span",{id:`${D}-tick-${e.index}`,className:"kui-sr-only"},u?`${e.value} ${u}`:e.value)))))});ne.displayName="Slider";export{ne as a};
|
|
3
|
+
//# sourceMappingURL=chunk-B6OFKABP.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import{a as o}from"./chunk-KVVRFWGQ.js";import{c as i}from"./chunk-OKQAVYW4.js";import*as e from"react";import l from"classnames";var t={loading:{type:"boolean",default:!0}};var u=e.forwardRef((f,d)=>{let{className:m,children:s,loading:n,...p}=i(f,t);if(s===void 0&&!n)return null;let a=p["aria-label"]!==void 0||p["aria-labelledby"]!==void 0,r=e.createElement("span",{role:a?"status":void 0,"aria-hidden":a?void 0:!0,...p,ref:d,className:l("kui-Spinner",m)},e.createElement("span",{className:"kui-SpinnerWheel"},e.createElement("span",{className:"kui-SpinnerLeaf"}),e.createElement("span",{className:"kui-SpinnerLeaf"}),e.createElement("span",{className:"kui-SpinnerLeaf"}),e.createElement("span",{className:"kui-SpinnerLeaf"}),e.createElement("span",{className:"kui-SpinnerLeaf"}),e.createElement("span",{className:"kui-SpinnerLeaf"}),e.createElement("span",{className:"kui-SpinnerLeaf"}),e.createElement("span",{className:"kui-SpinnerLeaf"})),typeof p["aria-label"]=="string"?e.createElement("span",{className:"kui-sr-only"},p["aria-label"]):null);return s===void 0?r:e.createElement("span",{className:"kui-SpinnerHost","data-loading":n||void 0,"aria-busy":n||void 0},e.createElement("span",{"aria-hidden":n||void 0,className:l("kui-SpinnerChildren",n&&"kui-SpinnerHiddenChildren")},s),n?e.createElement(o,{asChild:!0,align:"center",justify:"center",position:"absolute",inset:"0"},e.createElement("span",null,r)):null)});u.displayName="Spinner";export{u as a};
|
|
3
|
+
//# sourceMappingURL=chunk-BUXK5VGR.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/components/spinner.tsx", "../../src/components/spinner.props.tsx"],
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nimport classNames from 'classnames';\n\nimport { Flex } from './flex.js';\nimport { spinnerPropDefs } from './spinner.props.js';\nimport { extractProps } from '../helpers/extract-props.js';\n\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { GetPropDefTypes } from '../props/prop-def.js';\n\ntype SpinnerElement = React.ElementRef<'span'>;\ntype SpinnerOwnProps = GetPropDefTypes<typeof spinnerPropDefs>;\ninterface SpinnerProps\n extends ComponentPropsWithout<'span', RemovedProps>,\n SpinnerOwnProps {}\nconst Spinner = React.forwardRef<SpinnerElement, SpinnerProps>((props, forwardedRef) => {\n const { className, children, loading, ...spinnerProps } = extractProps(\n props,\n spinnerPropDefs\n );\n\n // Without children a Spinner is only the wheel, shown while loading.\n if (children === undefined && !loading) return null;\n\n // Decorative unless named: a named spinner is a status message, an unnamed one is hidden.\n const named =\n spinnerProps['aria-label'] !== undefined || spinnerProps['aria-labelledby'] !== undefined;\n\n const spinner = (\n <span\n role={named ? 'status' : undefined}\n aria-hidden={named ? undefined : true}\n {...spinnerProps}\n ref={forwardedRef} className={classNames('kui-Spinner', className)}>\n <span className=\"kui-SpinnerWheel\">\n <span className=\"kui-SpinnerLeaf\" />\n <span className=\"kui-SpinnerLeaf\" />\n <span className=\"kui-SpinnerLeaf\" />\n <span className=\"kui-SpinnerLeaf\" />\n <span className=\"kui-SpinnerLeaf\" />\n <span className=\"kui-SpinnerLeaf\" />\n <span className=\"kui-SpinnerLeaf\" />\n <span className=\"kui-SpinnerLeaf\" />\n </span>\n {/* A live region reads its text, not its aria-label, so the name is also its content. */}\n {typeof spinnerProps['aria-label'] === 'string' ? (\n <span className=\"kui-sr-only\">{spinnerProps['aria-label']}</span>\n ) : null}\n </span>\n );\n\n if (children === undefined) return spinner;\n\n // With children, one tree whether loading or not, so starting or stopping never remounts them\n // (their state, focus and refs survive). At rest the host is `display: contents`; while loading\n // it centres the wheel over the children, which keep their space but are hidden.\n return (\n <span className=\"kui-SpinnerHost\" data-loading={loading || undefined} aria-busy={loading || undefined}>\n {/* `display: contents` removes the content from the accessibility tree in some browsers, so\n while loading it is removed with `aria-hidden` too. */}\n <span aria-hidden={loading || undefined} className={classNames('kui-SpinnerChildren', loading && 'kui-SpinnerHiddenChildren')}>\n {children}\n </span>\n {loading ? (\n <Flex asChild align=\"center\" justify=\"center\" position=\"absolute\" inset=\"0\">\n <span>{spinner}</span>\n </Flex>\n ) : null}\n </span>\n );\n});\nSpinner.displayName = 'Spinner';\n\nexport { Spinner };\nexport type { SpinnerProps };\n", "import type { PropDef } from '../props/prop-def.js';\n\nconst spinnerPropDefs = {\n loading: { type: 'boolean', default: true },\n} satisfies {\n loading: PropDef<boolean>;\n};\n\nexport { spinnerPropDefs };\n"],
|
|
5
|
+
"mappings": ";gFAAA,UAAYA,MAAW,QACvB,OAAOC,MAAgB,aCCvB,IAAMC,EAAkB,CACtB,QAAS,CAAE,KAAM,UAAW,QAAS,EAAK,CAC5C,EDWA,IAAMC,EAAgB,aAAyC,CAACC,EAAOC,IAAiB,CACtF,GAAM,CAAE,UAAAC,EAAW,SAAAC,EAAU,QAAAC,EAAS,GAAGC,CAAa,EAAIC,EACxDN,EACAO,CACF,EAGA,GAAIJ,IAAa,QAAa,CAACC,EAAS,OAAO,KAG/C,IAAMI,EACJH,EAAa,YAAY,IAAM,QAAaA,EAAa,iBAAiB,IAAM,OAE5EI,EACJ,gBAAC,QACC,KAAMD,EAAQ,SAAW,OACzB,cAAaA,EAAQ,OAAY,GAChC,GAAGH,EACJ,IAAKJ,EAAc,UAAWS,EAAW,cAAeR,CAAS,GACjE,gBAAC,QAAK,UAAU,oBACd,gBAAC,QAAK,UAAU,kBAAkB,EAClC,gBAAC,QAAK,UAAU,kBAAkB,EAClC,gBAAC,QAAK,UAAU,kBAAkB,EAClC,gBAAC,QAAK,UAAU,kBAAkB,EAClC,gBAAC,QAAK,UAAU,kBAAkB,EAClC,gBAAC,QAAK,UAAU,kBAAkB,EAClC,gBAAC,QAAK,UAAU,kBAAkB,EAClC,gBAAC,QAAK,UAAU,kBAAkB,CACpC,EAEC,OAAOG,EAAa,YAAY,GAAM,SACrC,gBAAC,QAAK,UAAU,eAAeA,EAAa,YAAY,CAAE,EACxD,IACN,EAGF,OAAIF,IAAa,OAAkBM,EAMjC,gBAAC,QAAK,UAAU,kBAAkB,eAAcL,GAAW,OAAW,YAAWA,GAAW,QAG1F,gBAAC,QAAK,cAAaA,GAAW,OAAW,UAAWM,EAAW,sBAAuBN,GAAW,2BAA2B,GACzHD,CACH,EACCC,EACC,gBAACO,EAAA,CAAK,QAAO,GAAC,MAAM,SAAS,QAAQ,SAAS,SAAS,WAAW,MAAM,KACtE,gBAAC,YAAMF,CAAQ,CACjB,EACE,IACN,CAEJ,CAAC,EACDV,EAAQ,YAAc",
|
|
6
|
+
"names": ["React", "classNames", "spinnerPropDefs", "Spinner", "props", "forwardedRef", "className", "children", "loading", "spinnerProps", "extractProps", "spinnerPropDefs", "named", "spinner", "classNames", "Flex"]
|
|
7
|
+
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import{a}from"./chunk-
|
|
3
|
-
//# sourceMappingURL=chunk-
|
|
2
|
+
import{a}from"./chunk-4MNRLB57.js";import{a as s}from"./chunk-BQC2P3SN.js";import{b as n,c as i,d as m}from"./chunk-UJ7JERJ5.js";import{c as t}from"./chunk-OKQAVYW4.js";import{d as p}from"./chunk-HBWBPBSA.js";import{a as r}from"./chunk-CLJ6SEGP.js";import*as e from"react";import L from"classnames";var y=["1","2","3","4","5","6","7","8","9"],D=["auto","always","hover","none"],f={...r,size:{type:"enum",className:"kui-r-size",values:y,responsive:!0},...m,...s,...i,...n,underline:{type:"enum",className:"kui-underline",values:D,default:"auto"},...p};var h=e.forwardRef((l,c)=>{let{children:o,className:P,color:u,asChild:d,...k}=t(l,f);return e.createElement(a,{...k,"data-accent-color":u,ref:c,asChild:!0,className:L("kui-reset","kui-Link",P)},d?o:e.createElement("a",null,o))});h.displayName="Link";export{h as a};
|
|
3
|
+
//# sourceMappingURL=chunk-C67MM24U.js.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import{z as e}from"zod";var h=e.enum(["expanded","collapsed"]).describe("Pane state mode"),l=e.enum(["collapsed","expanded"]).describe("Sidebar state"),b=e.enum(["fixed","overlay","stacked"]).describe("Presentation mode"),z=e.enum(["initial","xs","sm","md","lg","xl"]).describe("Responsive breakpoint"),u=e.enum(["left","rail","panel","sidebar","inspector","bottom"]).describe("Pane target. `left` is deprecated: use `rail`."),m=e.enum(["toggle","expand","collapse"]).describe("Trigger action"),d=e.enum(["toggle","dismiss"]).describe("Why the state changed: `toggle` for a trigger or the resize handle, `dismiss` for Escape or the scrim"),S=e.enum(["init","resize","controlled"]).describe("Why the size changed");function r(n){return e.union([n,e.object({initial:n.optional(),xs:n.optional(),sm:n.optional(),md:n.optional(),lg:n.optional(),xl:n.optional()})])}var x=r(h).describe("Responsive pane mode configuration"),p=r(l).describe("Responsive sidebar state"),o=r(b).describe("Responsive presentation configuration"),c=r(e.boolean()).describe("Responsive open state"),f=e.object({load:e.function({output:e.union([e.number(),e.promise(e.number()),e.undefined()])}).optional(),save:e.function({input:[e.number()],output:e.union([e.void(),e.promise(e.void())])}).optional()}).describe("Deprecated, removed in 1.0. Keep the size in your own state with `size`/`onSizeChange`."),t=e.record(e.string(),e.union([e.string(),e.number()])).optional().describe("Inline styles"),a={open:e.union([e.boolean(),c]).optional().describe("The open state, when controlled. A responsive object is deprecated."),defaultOpen:e.union([e.boolean(),c]).optional().describe("The starting state. A responsive object leaves the pane untouched, with that object as the answer at each breakpoint."),onOpenChange:e.function({input:[e.boolean(),e.object({reason:d})],output:e.void()}).optional().describe("Called when a user opens or closes the pane. Never called on mount or on a resize.")},i={id:e.string().optional().describe("The pane id. A Trigger points `aria-controls` at it."),presentation:o.optional(),expandedSize:e.number().optional(),inset:e.boolean().optional().describe("Lifts the pane off the frame and paints the backdrop behind it"),onExpand:e.function({output:e.void()}).optional().describe("Deprecated: use `onOpenChange`"),onCollapse:e.function({output:e.void()}).optional().describe("Deprecated: use `onOpenChange`"),className:e.string().optional().describe("Additional CSS class name"),style:t,children:e.any().optional()},s={minSize:e.number().optional(),maxSize:e.number().optional().describe("The largest size. A drag also stops before the handle leaves the frame."),resizable:e.boolean().optional(),collapsible:e.boolean().optional().describe("A double-click on the handle closes the pane"),size:e.union([e.number(),e.string()]).optional().describe("The size, when controlled"),defaultSize:e.union([e.number(),e.string()]).optional().describe("The starting size"),onSizeChange:e.function({input:[e.number(),e.object({reason:S})],output:e.void()}).optional(),sizeUpdate:e.enum(["throttle","debounce"]).optional().describe("Rate-limits onSizeChange across repeated resize ends, such as key presses on the handle. A drag calls it once, when the drag ends; use onResize for live sizes."),sizeUpdateMs:e.number().optional(),onResize:e.function({input:[e.number()],output:e.void()}).optional().describe("Called during a drag, at most once per animation frame"),onResizeStart:e.function({input:[e.number()],output:e.void()}).optional(),onResizeEnd:e.function({input:[e.number()],output:e.void()}).optional(),snapPoints:e.array(e.number()).optional().describe("Deprecated, removed in 1.0"),snapTolerance:e.number().optional().describe("Deprecated, removed in 1.0"),collapseThreshold:e.number().optional().describe("Deprecated, removed in 1.0"),paneId:e.string().optional().describe("Deprecated, removed in 1.0"),persistence:f.optional()},P=e.object({height:e.union([e.literal("full"),e.literal("auto"),e.string(),e.number()]).default("full").describe("Height of the frame. `full` is the window: 100dvh, with 100vh where dvh is not supported, and on a narrow touch screen the page scrolls. Any value other than `full` or `auto` makes the Shell contained."),contained:e.boolean().default(!1).describe("Fills the parent instead of the window and always scrolls inside itself. An explicit `height` implies it."),size:e.enum(["1","2","3"]).default("2").describe("Index of the pane chrome and the Sidebar rows in it"),className:e.string().optional().describe("Additional CSS class name"),style:t,children:e.any().optional().describe("The Shell parts, and anything else, rendered in order")}).strict(),y=e.object({height:e.number().default(64).describe("Height of the header, in pixels"),className:e.string().optional().describe("Additional CSS class name"),style:t,children:e.any().optional().describe("Header content")}).strict(),v=e.object({...i,...a,presentation:o.default("fixed").describe("Presentation mode"),expandedSize:e.number().default(64).describe("Width in pixels"),collapsible:e.boolean().optional()}).strict(),w=e.object({...i,...a,...s,presentation:o.optional().describe("Presentation mode. With no value the panel follows the Rail's."),expandedSize:e.number().default(288).describe("Open width in pixels"),minSize:e.number().default(100).describe("Minimum width when resizing"),maxSize:e.number().default(800).describe("Maximum width when resizing"),resizable:e.boolean().default(!1).describe("Whether the panel can be resized"),collapsible:e.boolean().default(!0).describe("Whether a double-click on the handle closes the panel")}).strict(),R=e.object({...i,...s,state:e.union([l,p]).optional().describe("The state, when controlled. A responsive object is deprecated."),defaultState:p.optional().describe("The starting state. With no value the sidebar is open where it is in the frame and closed where it is an overlay."),onStateChange:e.function({input:[l,e.object({reason:d})],output:e.void()}).optional().describe("Called when a user changes the state. Never called on mount or on a resize."),presentation:o.default({initial:"overlay",sm:"fixed"}).describe("Presentation mode"),expandedSize:e.number().default(288).describe("Open width in pixels"),minSize:e.number().default(200).describe("Minimum width when resizing"),maxSize:e.number().default(400).describe("Maximum width when resizing"),resizable:e.boolean().default(!1).describe("Whether the sidebar can be resized"),collapsible:e.boolean().default(!0).describe("Whether a double-click on the handle closes the sidebar")}).strict(),T=e.object({inset:e.boolean().optional().describe("Lifts the pane off the frame and paints the backdrop behind it"),className:e.string().optional().describe("Additional CSS class name"),style:t,children:e.any().optional().describe("Main content")}).strict(),C=e.object({...i,...a,...s,presentation:o.default({initial:"overlay",sm:"fixed"}).describe("Presentation mode"),expandedSize:e.number().default(320).describe("Open width in pixels"),minSize:e.number().default(200).describe("Minimum width when resizing"),maxSize:e.number().default(500).describe("Maximum width when resizing"),resizable:e.boolean().default(!1).describe("Whether the inspector can be resized"),collapsible:e.boolean().default(!0).describe("Whether a double-click on the handle closes the inspector")}).strict(),N=e.object({...i,...a,...s,presentation:o.default("fixed").describe("Presentation mode"),expandedSize:e.number().default(200).describe("Open height in pixels"),minSize:e.number().default(100).describe("Minimum height when resizing"),maxSize:e.number().default(400).describe("Maximum height when resizing"),resizable:e.boolean().default(!1).describe("Whether the bottom panel can be resized"),collapsible:e.boolean().default(!0).describe("Whether a double-click on the handle closes the panel")}).strict(),k=e.object({target:u.describe("Which pane to drive"),action:m.default("toggle").describe("Action to perform"),peekOnHover:e.boolean().default(!1).describe("Deprecated, removed in 1.0. Shows a preview of a closed pane on hover."),type:e.enum(["button","submit","reset"]).default("button").describe("The button type"),className:e.string().optional().describe("Additional CSS class name"),style:t,children:e.any().optional().describe("Trigger content"),onClick:e.function().optional().describe("Runs before the trigger acts. Call `event.preventDefault()` to cancel it."),onMouseEnter:e.function().optional().describe("Mouse enter handler"),onMouseLeave:e.function().optional().describe("Mouse leave handler"),"aria-label":e.string().optional().describe("ARIA label for accessibility"),"aria-labelledby":e.string().optional().describe("ARIA labelled by reference"),"aria-describedby":e.string().optional().describe("ARIA described by reference")}).strict(),A=e.object({className:e.string().optional().describe("Additional CSS class name"),style:t,children:e.any().optional().describe("Handle content")}).strict();function M(n){return n}function E(n){return n}function O(n){return n}function j(n){return n}function D(n){return n}function H(n){return n}function W(n){return n}function _(n){return n}function I(n){return n}function V(n){return n}export{P as a,y as b,v as c,w as d,R as e,T as f,C as g,N as h,k as i,A as j,M as k,E as l,O as m,j as n,D as o,H as p,W as q,_ as r,I as s,V as t};
|
|
3
|
+
//# sourceMappingURL=chunk-CZ24FOFS.js.map
|