@womp/kookie-ui 0.23.0 → 0.24.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 +190 -185
- package/dist/cjs/components/_internal/base-button.d.ts +11 -1
- package/dist/cjs/components/_internal/base-button.d.ts.map +1 -1
- package/dist/cjs/components/_internal/base-button.js +1 -1
- package/dist/cjs/components/_internal/base-button.js.map +4 -4
- package/dist/cjs/components/_internal/menu-context.d.ts +2 -0
- package/dist/cjs/components/_internal/menu-context.d.ts.map +1 -1
- package/dist/cjs/components/_internal/menu-context.js +1 -1
- package/dist/cjs/components/_internal/menu-context.js.map +3 -3
- package/dist/cjs/components/_internal/pane-chrome.d.ts +17 -2
- 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/shell-sidebar.js +1 -1
- package/dist/cjs/components/_internal/shell-sidebar.js.map +4 -4
- package/dist/cjs/components/accordion.d.ts +2 -2
- package/dist/cjs/components/accordion.d.ts.map +1 -1
- package/dist/cjs/components/accordion.js +1 -1
- package/dist/cjs/components/accordion.js.map +4 -4
- package/dist/cjs/components/alert-dialog.d.ts.map +1 -1
- package/dist/cjs/components/alert-dialog.js +1 -1
- package/dist/cjs/components/alert-dialog.js.map +3 -3
- package/dist/cjs/components/avatar.d.ts +1 -1
- package/dist/cjs/components/avatar.d.ts.map +1 -1
- package/dist/cjs/components/avatar.js +1 -1
- package/dist/cjs/components/avatar.js.map +3 -3
- package/dist/cjs/components/avatar.props.d.ts +8 -0
- package/dist/cjs/components/avatar.props.d.ts.map +1 -1
- package/dist/cjs/components/avatar.props.js +1 -1
- package/dist/cjs/components/avatar.props.js.map +2 -2
- package/dist/cjs/components/blockquote.d.ts +1 -1
- package/dist/cjs/components/blockquote.d.ts.map +1 -1
- package/dist/cjs/components/blockquote.js +1 -1
- package/dist/cjs/components/blockquote.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.d.ts.map +1 -1
- package/dist/cjs/components/chatbar.js +1 -1
- package/dist/cjs/components/chatbar.js.map +4 -4
- package/dist/cjs/components/checkbox-group.d.ts.map +1 -1
- package/dist/cjs/components/checkbox-group.js +1 -1
- package/dist/cjs/components/checkbox-group.js.map +3 -3
- package/dist/cjs/components/checkbox-group.primitive.d.ts +12 -5
- package/dist/cjs/components/checkbox-group.primitive.d.ts.map +1 -1
- package/dist/cjs/components/checkbox-group.primitive.js +1 -1
- package/dist/cjs/components/checkbox-group.primitive.js.map +3 -3
- package/dist/cjs/components/checkbox.js +1 -1
- package/dist/cjs/components/checkbox.js.map +3 -3
- package/dist/cjs/components/chip.d.ts.map +1 -1
- package/dist/cjs/components/chip.js +1 -1
- package/dist/cjs/components/chip.js.map +3 -3
- package/dist/cjs/components/code.d.ts.map +1 -1
- package/dist/cjs/components/code.js +1 -1
- package/dist/cjs/components/code.js.map +2 -2
- package/dist/cjs/components/combobox.js +1 -1
- package/dist/cjs/components/combobox.js.map +3 -3
- 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.d.ts +1 -1
- package/dist/cjs/components/dialog.d.ts.map +1 -1
- package/dist/cjs/components/dialog.js +1 -1
- package/dist/cjs/components/dialog.js.map +3 -3
- 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/icons.d.ts +3 -1
- package/dist/cjs/components/icons.d.ts.map +1 -1
- package/dist/cjs/components/icons.js +1 -1
- package/dist/cjs/components/icons.js.map +3 -3
- package/dist/cjs/components/index.d.ts +1 -1
- package/dist/cjs/components/index.d.ts.map +1 -1
- package/dist/cjs/components/index.js +2 -10
- package/dist/cjs/components/index.js.map +4 -4
- package/dist/cjs/components/message-scroller.d.ts.map +1 -1
- package/dist/cjs/components/message-scroller.js +1 -1
- package/dist/cjs/components/message-scroller.js.map +4 -4
- package/dist/cjs/components/navbar.d.ts.map +1 -1
- package/dist/cjs/components/navbar.js +1 -1
- package/dist/cjs/components/navbar.js.map +3 -3
- package/dist/cjs/components/notice.d.ts +4 -1
- package/dist/cjs/components/notice.d.ts.map +1 -1
- package/dist/cjs/components/notice.js +1 -1
- package/dist/cjs/components/notice.js.map +4 -4
- package/dist/cjs/components/progress.d.ts.map +1 -1
- package/dist/cjs/components/progress.js +1 -1
- package/dist/cjs/components/progress.js.map +3 -3
- package/dist/cjs/components/schemas/button.schema.d.ts +2 -2
- package/dist/cjs/components/schemas/toggle.schema.d.ts +1 -1
- package/dist/cjs/components/scroll-area.d.ts +3 -1
- package/dist/cjs/components/scroll-area.d.ts.map +1 -1
- package/dist/cjs/components/scroll-area.js +1 -1
- package/dist/cjs/components/scroll-area.js.map +4 -4
- package/dist/cjs/components/segmented-control.d.ts +3 -1
- package/dist/cjs/components/segmented-control.d.ts.map +1 -1
- package/dist/cjs/components/segmented-control.js +1 -1
- package/dist/cjs/components/segmented-control.js.map +3 -3
- 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 +3 -3
- package/dist/cjs/components/separator.d.ts.map +1 -1
- package/dist/cjs/components/separator.js +1 -1
- package/dist/cjs/components/separator.js.map +3 -3
- package/dist/cjs/components/sheet.d.ts +1 -0
- package/dist/cjs/components/sheet.d.ts.map +1 -1
- package/dist/cjs/components/sheet.js +1 -1
- package/dist/cjs/components/sheet.js.map +3 -3
- package/dist/cjs/components/shell.d.ts +12 -1
- 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.d.ts.map +1 -1
- package/dist/cjs/components/sidebar.js +1 -1
- package/dist/cjs/components/sidebar.js.map +4 -4
- package/dist/cjs/components/slider.d.ts.map +1 -1
- package/dist/cjs/components/slider.js +1 -1
- package/dist/cjs/components/slider.js.map +3 -3
- 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 +3 -3
- package/dist/cjs/components/table.d.ts.map +1 -1
- package/dist/cjs/components/table.js +1 -1
- package/dist/cjs/components/table.js.map +4 -4
- package/dist/cjs/components/tabs.d.ts.map +1 -1
- package/dist/cjs/components/tabs.js +1 -1
- package/dist/cjs/components/tabs.js.map +2 -2
- 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.js +2 -2
- package/dist/cjs/components/text-field.js.map +2 -2
- package/dist/cjs/components/toggle.d.ts +3 -2
- package/dist/cjs/components/toggle.d.ts.map +1 -1
- package/dist/cjs/components/toggle.js +1 -9
- package/dist/cjs/components/toggle.js.map +4 -4
- package/dist/cjs/components/toolbar.d.ts +80 -8
- package/dist/cjs/components/toolbar.d.ts.map +1 -1
- package/dist/cjs/components/toolbar.js +1 -1
- package/dist/cjs/components/toolbar.js.map +4 -4
- package/dist/cjs/components/virtual-menu.d.ts +3 -5
- package/dist/cjs/components/virtual-menu.d.ts.map +1 -1
- package/dist/cjs/components/virtual-menu.js +1 -1
- package/dist/cjs/components/virtual-menu.js.map +3 -3
- package/dist/cjs/helpers/extract-margin-props.d.ts +7 -7
- package/dist/cjs/hooks/use-scroll-edges.d.ts +4 -2
- package/dist/cjs/hooks/use-scroll-edges.d.ts.map +1 -1
- package/dist/cjs/hooks/use-scroll-edges.js +1 -1
- package/dist/cjs/hooks/use-scroll-edges.js.map +3 -3
- package/dist/cjs/index.js +5 -5
- package/dist/cjs/index.js.map +4 -4
- package/dist/cjs/props/index.js +1 -1
- package/dist/cjs/props/index.js.map +2 -2
- package/dist/esm/chunk-3VTS4C63.js +2 -0
- package/dist/esm/chunk-3VTS4C63.js.map +7 -0
- package/dist/esm/chunk-3WE4E2WQ.js +2 -0
- package/dist/esm/chunk-3WE4E2WQ.js.map +7 -0
- package/dist/esm/chunk-3XUY5WFA.js +2 -0
- package/dist/esm/chunk-3XUY5WFA.js.map +7 -0
- package/dist/esm/chunk-3XZOE2IQ.js +2 -0
- package/dist/esm/chunk-3XZOE2IQ.js.map +7 -0
- package/dist/esm/chunk-432YLNB3.js +2 -0
- package/dist/esm/chunk-432YLNB3.js.map +7 -0
- package/dist/esm/chunk-4QKZYCCH.js +2 -0
- package/dist/esm/chunk-4QKZYCCH.js.map +7 -0
- package/dist/esm/chunk-4R5EMVB3.js +2 -0
- package/dist/esm/chunk-4R5EMVB3.js.map +7 -0
- package/dist/esm/chunk-4ZOVV3TY.js +2 -0
- package/dist/esm/chunk-4ZOVV3TY.js.map +7 -0
- package/dist/esm/{chunk-IX5HIHVI.js → chunk-62ZGP4ET.js} +2 -2
- package/dist/esm/{chunk-IX5HIHVI.js.map → chunk-62ZGP4ET.js.map} +3 -3
- package/dist/esm/chunk-BGAJ2MDF.js +2 -0
- package/dist/esm/chunk-BGAJ2MDF.js.map +7 -0
- package/dist/esm/chunk-CHPT42BY.js +2 -0
- package/dist/esm/{chunk-Y3JYEEFB.js.map → chunk-CHPT42BY.js.map} +2 -2
- package/dist/esm/{chunk-KS4U4VPH.js → chunk-CMHUK7OG.js} +2 -2
- package/dist/esm/{chunk-KS4U4VPH.js.map → chunk-CMHUK7OG.js.map} +2 -2
- package/dist/esm/chunk-CN6F4REJ.js +2 -0
- package/dist/esm/chunk-CN6F4REJ.js.map +7 -0
- package/dist/esm/chunk-DUTZUWZP.js +2 -0
- package/dist/esm/chunk-DUTZUWZP.js.map +7 -0
- package/dist/esm/chunk-FDJV5RXX.js +2 -0
- package/dist/esm/chunk-FDJV5RXX.js.map +7 -0
- package/dist/esm/chunk-G2JD52O5.js +2 -0
- package/dist/esm/{chunk-23KT3D2Z.js.map → chunk-G2JD52O5.js.map} +3 -3
- package/dist/esm/{chunk-6DDOR73D.js → chunk-G4ETY2NP.js} +2 -2
- package/dist/esm/chunk-GPOCLDBR.js +2 -0
- package/dist/esm/chunk-GPOCLDBR.js.map +7 -0
- package/dist/esm/chunk-GYP66ZK2.js +2 -0
- package/dist/esm/chunk-GYP66ZK2.js.map +7 -0
- package/dist/esm/chunk-H5BYPX6V.js +2 -0
- package/dist/esm/chunk-H5BYPX6V.js.map +7 -0
- package/dist/esm/chunk-H5G7UECV.js +2 -0
- package/dist/esm/chunk-H5G7UECV.js.map +7 -0
- package/dist/esm/chunk-I4FLQELQ.js +2 -0
- package/dist/esm/chunk-I4FLQELQ.js.map +7 -0
- package/dist/esm/chunk-JYQGCXXI.js +2 -0
- package/dist/esm/chunk-JYQGCXXI.js.map +7 -0
- package/dist/esm/chunk-KA5UE2VN.js +2 -0
- package/dist/esm/chunk-KA5UE2VN.js.map +7 -0
- package/dist/esm/{chunk-QGCXTULQ.js → chunk-KEGCX5VM.js} +2 -2
- package/dist/esm/chunk-KVHKPUZ2.js +2 -0
- package/dist/esm/chunk-KVHKPUZ2.js.map +7 -0
- package/dist/esm/{chunk-FFG32ERA.js → chunk-N3WBEQWL.js} +3 -3
- package/dist/esm/chunk-N3WBEQWL.js.map +7 -0
- package/dist/esm/{chunk-HKPXDQ2B.js → chunk-NC3CJUE3.js} +2 -2
- package/dist/esm/chunk-P2MV6HLA.js +2 -0
- package/dist/esm/{chunk-7SS4UUJH.js.map → chunk-P2MV6HLA.js.map} +3 -3
- package/dist/esm/chunk-PALE5UWK.js +2 -0
- package/dist/esm/{chunk-DSPYHO3L.js.map → chunk-PALE5UWK.js.map} +2 -2
- package/dist/esm/chunk-PDMCLVYT.js +2 -0
- package/dist/esm/chunk-PDMCLVYT.js.map +7 -0
- package/dist/esm/chunk-PM6QY3JO.js +2 -0
- package/dist/esm/{chunk-ZEX2DECM.js.map → chunk-PM6QY3JO.js.map} +3 -3
- package/dist/esm/chunk-RKZVXVBN.js +2 -0
- package/dist/esm/chunk-RKZVXVBN.js.map +7 -0
- package/dist/esm/chunk-TXQZ5HLV.js +2 -0
- package/dist/esm/chunk-TXQZ5HLV.js.map +7 -0
- package/dist/esm/chunk-UKASIY6M.js +2 -0
- package/dist/esm/chunk-UKASIY6M.js.map +7 -0
- package/dist/esm/{chunk-OJQNLROL.js → chunk-UY6WJUNA.js} +2 -2
- package/dist/esm/chunk-V5O3TF57.js +2 -0
- package/dist/esm/{chunk-3KQE2PSJ.js.map → chunk-V5O3TF57.js.map} +3 -3
- package/dist/esm/chunk-VUNCI6A6.js +2 -0
- package/dist/esm/chunk-VUNCI6A6.js.map +7 -0
- package/dist/esm/{chunk-JBHRV364.js → chunk-VUPIJNG2.js} +2 -2
- package/dist/esm/chunk-W6BN5QLH.js +2 -0
- package/dist/esm/{chunk-ZNDCZM5A.js.map → chunk-W6BN5QLH.js.map} +2 -2
- package/dist/esm/chunk-WG5ORTIW.js +2 -0
- package/dist/esm/chunk-WG5ORTIW.js.map +7 -0
- package/dist/esm/chunk-WMVR2XBR.js +2 -0
- package/dist/esm/{chunk-XKSU3NLG.js.map → chunk-WMVR2XBR.js.map} +2 -2
- package/dist/esm/{chunk-NNZTSXKH.js → chunk-WX7SX5BN.js} +2 -2
- package/dist/esm/chunk-XOACTIBL.js +2 -0
- package/dist/esm/chunk-XOACTIBL.js.map +7 -0
- package/dist/esm/components/_internal/base-button.d.ts +11 -1
- package/dist/esm/components/_internal/base-button.d.ts.map +1 -1
- package/dist/esm/components/_internal/base-button.js +1 -1
- package/dist/esm/components/_internal/menu-context.d.ts +2 -0
- package/dist/esm/components/_internal/menu-context.d.ts.map +1 -1
- package/dist/esm/components/_internal/menu-context.js +1 -1
- package/dist/esm/components/_internal/pane-chrome.d.ts +17 -2
- 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/shell-bottom.js +1 -1
- package/dist/esm/components/_internal/shell-inspector.js +1 -1
- package/dist/esm/components/_internal/shell-sidebar.js +1 -1
- package/dist/esm/components/accordion.d.ts +2 -2
- package/dist/esm/components/accordion.d.ts.map +1 -1
- package/dist/esm/components/accordion.js +1 -1
- package/dist/esm/components/alert-dialog.d.ts.map +1 -1
- package/dist/esm/components/alert-dialog.js +1 -1
- package/dist/esm/components/avatar.d.ts +1 -1
- package/dist/esm/components/avatar.d.ts.map +1 -1
- package/dist/esm/components/avatar.js +1 -1
- package/dist/esm/components/avatar.props.d.ts +8 -0
- package/dist/esm/components/avatar.props.d.ts.map +1 -1
- package/dist/esm/components/avatar.props.js +1 -1
- package/dist/esm/components/blockquote.d.ts +1 -1
- package/dist/esm/components/blockquote.d.ts.map +1 -1
- package/dist/esm/components/blockquote.js +1 -1
- package/dist/esm/components/button.js +1 -1
- package/dist/esm/components/chatbar.d.ts.map +1 -1
- package/dist/esm/components/chatbar.js +1 -1
- package/dist/esm/components/checkbox-group.d.ts.map +1 -1
- package/dist/esm/components/checkbox-group.js +1 -1
- package/dist/esm/components/checkbox-group.primitive.d.ts +12 -5
- package/dist/esm/components/checkbox-group.primitive.d.ts.map +1 -1
- package/dist/esm/components/checkbox-group.primitive.js +1 -1
- package/dist/esm/components/checkbox.js +1 -1
- package/dist/esm/components/chip.d.ts.map +1 -1
- package/dist/esm/components/chip.js +1 -1
- package/dist/esm/components/code.d.ts.map +1 -1
- package/dist/esm/components/code.js +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.d.ts +1 -1
- package/dist/esm/components/dialog.d.ts.map +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/icons.d.ts +3 -1
- package/dist/esm/components/icons.d.ts.map +1 -1
- package/dist/esm/components/icons.js +1 -1
- package/dist/esm/components/index.d.ts +1 -1
- package/dist/esm/components/index.d.ts.map +1 -1
- package/dist/esm/components/index.js +1 -1
- package/dist/esm/components/message-scroller.d.ts.map +1 -1
- package/dist/esm/components/message-scroller.js +1 -1
- package/dist/esm/components/navbar.d.ts.map +1 -1
- package/dist/esm/components/navbar.js +1 -1
- package/dist/esm/components/notice.d.ts +4 -1
- package/dist/esm/components/notice.d.ts.map +1 -1
- package/dist/esm/components/notice.js +1 -1
- package/dist/esm/components/progress.d.ts.map +1 -1
- package/dist/esm/components/progress.js +1 -1
- package/dist/esm/components/schemas/button.schema.d.ts +2 -2
- package/dist/esm/components/schemas/toggle.schema.d.ts +1 -1
- package/dist/esm/components/scroll-area.d.ts +3 -1
- package/dist/esm/components/scroll-area.d.ts.map +1 -1
- package/dist/esm/components/scroll-area.js +1 -1
- package/dist/esm/components/segmented-control.d.ts +3 -1
- package/dist/esm/components/segmented-control.d.ts.map +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.d.ts.map +1 -1
- package/dist/esm/components/separator.js +1 -1
- package/dist/esm/components/sheet.d.ts +1 -0
- package/dist/esm/components/sheet.d.ts.map +1 -1
- package/dist/esm/components/sheet.js +1 -1
- package/dist/esm/components/shell.d.ts +12 -1
- package/dist/esm/components/shell.d.ts.map +1 -1
- package/dist/esm/components/shell.js +1 -1
- package/dist/esm/components/sidebar.d.ts.map +1 -1
- package/dist/esm/components/sidebar.js +1 -1
- package/dist/esm/components/slider.d.ts.map +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/table.d.ts.map +1 -1
- package/dist/esm/components/table.js +1 -1
- package/dist/esm/components/tabs.d.ts.map +1 -1
- package/dist/esm/components/tabs.js +1 -1
- package/dist/esm/components/text-area.js +1 -1
- package/dist/esm/components/text-field.js +1 -1
- package/dist/esm/components/toggle.d.ts +3 -2
- package/dist/esm/components/toggle.d.ts.map +1 -1
- package/dist/esm/components/toggle.js +1 -1
- package/dist/esm/components/toolbar.d.ts +80 -8
- package/dist/esm/components/toolbar.d.ts.map +1 -1
- package/dist/esm/components/toolbar.js +1 -1
- package/dist/esm/components/virtual-menu.d.ts +3 -5
- package/dist/esm/components/virtual-menu.d.ts.map +1 -1
- package/dist/esm/components/virtual-menu.js +1 -1
- package/dist/esm/helpers/extract-margin-props.d.ts +7 -7
- package/dist/esm/hooks/index.js +1 -1
- package/dist/esm/hooks/use-scroll-edges.d.ts +4 -2
- package/dist/esm/hooks/use-scroll-edges.d.ts.map +1 -1
- package/dist/esm/hooks/use-scroll-edges.js +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/props/index.js +1 -1
- package/package.json +1 -1
- package/src/components/_internal/base-button.tsx +51 -12
- package/src/components/_internal/base-sidebar-menu.css +8 -0
- package/src/components/_internal/menu-context.tsx +11 -0
- package/src/components/_internal/pane-chrome.tsx +45 -8
- package/src/components/accordion.css +35 -3
- package/src/components/accordion.tsx +12 -16
- package/src/components/alert-dialog.tsx +59 -161
- package/src/components/avatar.props.tsx +6 -0
- package/src/components/avatar.tsx +57 -71
- package/src/components/blockquote.tsx +8 -9
- package/src/components/chatbar.tsx +27 -20
- package/src/components/checkbox-group.primitive.tsx +40 -51
- package/src/components/checkbox-group.tsx +1 -9
- package/src/components/chip.css +18 -20
- package/src/components/chip.tsx +3 -4
- package/src/components/code.tsx +3 -2
- package/src/components/context-menu.tsx +23 -5
- package/src/components/dialog.tsx +59 -160
- package/src/components/dropdown-menu.tsx +8 -5
- package/src/components/icons.tsx +11 -1
- package/src/components/index.tsx +7 -0
- package/src/components/message-scroller.tsx +48 -26
- package/src/components/navbar.tsx +34 -69
- package/src/components/notice.tsx +6 -3
- package/src/components/progress.tsx +6 -3
- package/src/components/scroll-area.css +28 -2
- package/src/components/scroll-area.tsx +49 -3
- package/src/components/segmented-control.css +8 -130
- package/src/components/segmented-control.tsx +36 -5
- package/src/components/select.tsx +23 -3
- package/src/components/separator.tsx +13 -1
- package/src/components/sheet.css +7 -6
- package/src/components/sheet.tsx +76 -143
- package/src/components/shell.css +14 -0
- package/src/components/shell.tsx +29 -8
- package/src/components/sidebar.tsx +27 -16
- package/src/components/slider.tsx +51 -32
- package/src/components/spinner.tsx +10 -2
- package/src/components/table.tsx +18 -5
- package/src/components/tabs.css +34 -0
- package/src/components/tabs.tsx +0 -2
- package/src/components/text-area.css +2 -1
- package/src/components/text-area.tsx +1 -1
- package/src/components/text-field.tsx +1 -1
- package/src/components/toggle.tsx +21 -39
- package/src/components/toolbar.css +34 -0
- package/src/components/toolbar.tsx +432 -23
- package/src/components/virtual-menu.tsx +110 -37
- package/src/hooks/use-scroll-edges.ts +11 -2
- package/src/styles/utilities/truncate.css +10 -0
- package/styles.css +195 -185
- package/utilities.css +5 -0
- package/dist/esm/chunk-23KT3D2Z.js +0 -2
- package/dist/esm/chunk-3JA7SJDT.js +0 -2
- package/dist/esm/chunk-3JA7SJDT.js.map +0 -7
- package/dist/esm/chunk-3KQE2PSJ.js +0 -2
- package/dist/esm/chunk-5BWLY27A.js +0 -2
- package/dist/esm/chunk-5BWLY27A.js.map +0 -7
- package/dist/esm/chunk-6CK7UTNH.js +0 -2
- package/dist/esm/chunk-6CK7UTNH.js.map +0 -7
- package/dist/esm/chunk-6RK26HIY.js +0 -2
- package/dist/esm/chunk-6RK26HIY.js.map +0 -7
- package/dist/esm/chunk-7ESWH773.js +0 -2
- package/dist/esm/chunk-7ESWH773.js.map +0 -7
- package/dist/esm/chunk-7SS4UUJH.js +0 -2
- package/dist/esm/chunk-AB3QCCUM.js +0 -2
- package/dist/esm/chunk-AB3QCCUM.js.map +0 -7
- package/dist/esm/chunk-BEP4AH5V.js +0 -2
- package/dist/esm/chunk-BEP4AH5V.js.map +0 -7
- package/dist/esm/chunk-BOL3VVSN.js +0 -2
- package/dist/esm/chunk-BOL3VVSN.js.map +0 -7
- package/dist/esm/chunk-DBROSD2J.js +0 -2
- package/dist/esm/chunk-DBROSD2J.js.map +0 -7
- package/dist/esm/chunk-DSPYHO3L.js +0 -2
- package/dist/esm/chunk-E2D2VWUI.js +0 -2
- package/dist/esm/chunk-E2D2VWUI.js.map +0 -7
- package/dist/esm/chunk-EMNSA65L.js +0 -2
- package/dist/esm/chunk-EMNSA65L.js.map +0 -7
- package/dist/esm/chunk-FFG32ERA.js.map +0 -7
- package/dist/esm/chunk-FHPHEIYJ.js +0 -2
- package/dist/esm/chunk-FHPHEIYJ.js.map +0 -7
- package/dist/esm/chunk-FJFBM7HW.js +0 -2
- package/dist/esm/chunk-FJFBM7HW.js.map +0 -7
- package/dist/esm/chunk-FYT7TYGS.js +0 -2
- package/dist/esm/chunk-FYT7TYGS.js.map +0 -7
- package/dist/esm/chunk-GLV7VGBH.js +0 -2
- package/dist/esm/chunk-GLV7VGBH.js.map +0 -7
- package/dist/esm/chunk-HIKMKGPT.js +0 -2
- package/dist/esm/chunk-HIKMKGPT.js.map +0 -7
- package/dist/esm/chunk-L2R62BOB.js +0 -2
- package/dist/esm/chunk-L2R62BOB.js.map +0 -7
- package/dist/esm/chunk-LHIS3UKQ.js +0 -2
- package/dist/esm/chunk-LHIS3UKQ.js.map +0 -7
- package/dist/esm/chunk-NQDMTOGB.js +0 -2
- package/dist/esm/chunk-NQDMTOGB.js.map +0 -7
- package/dist/esm/chunk-Q6MFPATL.js +0 -2
- package/dist/esm/chunk-Q6MFPATL.js.map +0 -7
- package/dist/esm/chunk-QOHJIF25.js +0 -2
- package/dist/esm/chunk-QOHJIF25.js.map +0 -7
- package/dist/esm/chunk-R4XJNQX5.js +0 -2
- package/dist/esm/chunk-R4XJNQX5.js.map +0 -7
- package/dist/esm/chunk-UE3HATOA.js +0 -2
- package/dist/esm/chunk-UE3HATOA.js.map +0 -7
- package/dist/esm/chunk-V32EP3S7.js +0 -2
- package/dist/esm/chunk-V32EP3S7.js.map +0 -7
- package/dist/esm/chunk-XKSU3NLG.js +0 -2
- package/dist/esm/chunk-XRCMPBAY.js +0 -2
- package/dist/esm/chunk-XRCMPBAY.js.map +0 -7
- package/dist/esm/chunk-Y3JYEEFB.js +0 -2
- package/dist/esm/chunk-YZM54IJE.js +0 -2
- package/dist/esm/chunk-YZM54IJE.js.map +0 -7
- package/dist/esm/chunk-ZEX2DECM.js +0 -2
- package/dist/esm/chunk-ZJI2IK7C.js +0 -2
- package/dist/esm/chunk-ZJI2IK7C.js.map +0 -7
- package/dist/esm/chunk-ZNDCZM5A.js +0 -2
- /package/dist/esm/{chunk-6DDOR73D.js.map → chunk-G4ETY2NP.js.map} +0 -0
- /package/dist/esm/{chunk-QGCXTULQ.js.map → chunk-KEGCX5VM.js.map} +0 -0
- /package/dist/esm/{chunk-HKPXDQ2B.js.map → chunk-NC3CJUE3.js.map} +0 -0
- /package/dist/esm/{chunk-OJQNLROL.js.map → chunk-UY6WJUNA.js.map} +0 -0
- /package/dist/esm/{chunk-JBHRV364.js.map → chunk-VUPIJNG2.js.map} +0 -0
- /package/dist/esm/{chunk-NNZTSXKH.js.map → chunk-WX7SX5BN.js.map} +0 -0
package/utilities.css
CHANGED
|
@@ -13959,6 +13959,11 @@
|
|
|
13959
13959
|
text-overflow: ellipsis;
|
|
13960
13960
|
white-space: nowrap;
|
|
13961
13961
|
}
|
|
13962
|
+
.kui-truncate:where(span, code, a, label) {
|
|
13963
|
+
display: inline-block;
|
|
13964
|
+
max-width: 100%;
|
|
13965
|
+
vertical-align: bottom;
|
|
13966
|
+
}
|
|
13962
13967
|
.kui-r-va-baseline {
|
|
13963
13968
|
vertical-align: baseline;
|
|
13964
13969
|
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as h,e as f,f as l,g as R}from"./chunk-V32EP3S7.js";import{a as i}from"./chunk-VPSMETY2.js";import{b as P}from"./chunk-IX5HIHVI.js";import{a as G}from"./chunk-4P6TKZCA.js";import{d as b}from"./chunk-3YLYGKFB.js";import{a}from"./chunk-ELAW7ZUG.js";import{a as S}from"./chunk-OS3FCYZY.js";var z={};S(z,{Item:()=>N,Root:()=>v});import*as o from"react";import n from"classnames";import{Context as E}from"radix-ui/internal";var I="CheckboxGroup",[_]=E.createContextScope(I,[h]),d=h(),[T,y]=_(I),v=o.forwardRef(({color:s=i.color.default,size:e,variant:t=i.variant.default,...r},p)=>{let m=b(e,i.size),{__scopeCheckboxGroup:c,className:u,...C}=r,x=d(c);return o.createElement(T,{scope:c,color:s,size:m,variant:t},o.createElement(f,{...x,...C,ref:p,className:n("kui-CheckboxGroupRoot",u)}))});v.displayName="CheckboxGroup.Root";var N=o.forwardRef((s,e)=>{let{__scopeCheckboxGroup:t,children:r,className:p,style:m,...c}=s,{size:u}=y("CheckboxGroupItem",t),C=x=>typeof x=="string"&&/^[1-9]$/.test(x)?x:"3";return r?o.createElement(G,{as:"label",size:C(u),className:n("kui-CheckboxGroupItem",p),style:m},o.createElement(k,{__scopeCheckboxGroup:t,...c,ref:e}),r&&o.createElement("span",{className:"kui-CheckboxGroupItemInner"},r)):o.createElement(k,{__scopeCheckboxGroup:t,...c,ref:e,className:p,style:m})});N.displayName="CheckboxGroup.Item";var k=o.forwardRef(({__scopeCheckboxGroup:s,...e},t)=>{let r=y("CheckboxGroupItemCheckbox",s),p=d(s),{color:m,className:c}=a({...e,...r},i);return o.createElement(l,{...p,"data-accent-color":m,...e,ref:t,className:n("kui-reset","kui-BaseCheckboxRoot","kui-CheckboxGroupItemCheckbox",c)},o.createElement(R,{...p,asChild:!0,className:"kui-BaseCheckboxIndicator"},o.createElement(P,null)))});k.displayName="CheckboxGroup.ItemCheckbox";export{v as a,N as b,z as c};
|
|
2
|
-
//# sourceMappingURL=chunk-23KT3D2Z.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as oe}from"./chunk-BEP4AH5V.js";import{b as J,c as Q,d as G,e as Z,f as ee}from"./chunk-IX5HIHVI.js";import{a as $}from"./chunk-MJJ7XDIP.js";import{b as X,c as O}from"./chunk-PPZY7PJA.js";import{c as N}from"./chunk-3KQE2PSJ.js";import{a as B}from"./chunk-R4XJNQX5.js";import{e as K}from"./chunk-3YLYGKFB.js";import{b as v,c as k,d as W,e as V,f as A}from"./chunk-3XHTJZNP.js";import{b as y,c as F,d as S,e as T}from"./chunk-KZEZDBE7.js";import{a as h}from"./chunk-ELAW7ZUG.js";import{a as f,b as I,c as j,d as H,e as x,f as U,g as Y,h as q,i as E}from"./chunk-2E4P5XQL.js";import{a as he}from"./chunk-OS3FCYZY.js";var Ne={};he(Ne,{CheckboxItem:()=>me,Content:()=>ue,Group:()=>de,Item:()=>se,Label:()=>pe,RadioGroup:()=>le,RadioItem:()=>ce,Root:()=>te,Separator:()=>Me,Sub:()=>we,SubContent:()=>fe,SubTrigger:()=>De,Trigger:()=>ie,TriggerIcon:()=>Ce,Virtual:()=>oe});import*as e from"react";import s from"classnames";import{DropdownMenu as p,Slot as ke}from"radix-ui";import{useCallbackRef as ne}from"radix-ui/internal";var re=e.createContext(!1),te=o=>{let{open:n,defaultOpen:r=!1,onOpenChange:a}=o,[i,t]=e.useState(r),u=n??i,d=ne(a),l=e.useCallback(m=>{t(m),d(m)},[d]);return e.createElement(re.Provider,{value:u},e.createElement(p.Root,{...o,onOpenChange:l}))};te.displayName="DropdownMenu.Root";var ie=e.forwardRef(({children:o,...n},r)=>e.createElement(p.Trigger,{...n,ref:r,asChild:!0},$(o)));ie.displayName="DropdownMenu.Trigger";var L=e.createContext({}),ye={ltr:"ArrowLeft",rtl:"ArrowRight"},Se={ltr:"ArrowRight",rtl:"ArrowLeft"};function Te(o){return o instanceof HTMLElement&&(o.isContentEditable||o.tagName==="INPUT"||o.tagName==="TEXTAREA")}function ae(o){return o?.closest("[dir]")?.getAttribute("dir")==="rtl"?"rtl":"ltr"}var ue=e.forwardRef((o,n)=>{let r=K(o,v.size),a=X(),{size:i=v.size.default}=r,{className:t,children:u,color:d,container:l,forceMount:m,submenuBehavior:w,virtualized:c=!1,onEscapeKeyDown:R,onKeyDown:C,...P}=h(r,v),D=d||a.accentColor,g=y(w,"cascade"),z=g==="drill-down",ge=e.useContext(re),b=j(),be=M=>{R?.(M),!(M.defaultPrevented||!z||b.getDepth()===0)&&(M.preventDefault(),b.pop("keyboard"))},Ie=M=>{C?.(M),!(M.defaultPrevented||!z||b.getDepth()===0)&&(Te(M.target)||M.key===ye[ae(M.currentTarget)]&&(M.preventDefault(),b.pop("keyboard")))},ve=e.useMemo(()=>({size:i,color:D}),[i,D]),_=e.createElement(N,{size:i},e.createElement(L.Provider,{value:ve},e.createElement(H,{store:b,behavior:g,open:ge},u)));return e.createElement(p.Portal,{container:l,forceMount:m},e.createElement(O,{asChild:!0},e.createElement(p.Content,{"data-accent-color":D,align:"start",sideOffset:4,collisionPadding:10,...P,onEscapeKeyDown:be,onKeyDown:Ie,asChild:!1,ref:n,className:s("kui-PopperContent","kui-BaseMenuContent","kui-variant-soft","kui-DropdownMenuContent",t)},c?e.createElement("div",{className:s("kui-BaseMenuViewport","kui-DropdownMenuViewport","kui-virtualized")},_):e.createElement(B,{type:"auto",scrollbars:"vertical"},e.createElement("div",{className:s("kui-BaseMenuViewport","kui-DropdownMenuViewport")},_)))))});ue.displayName="DropdownMenu.Content";var pe=e.forwardRef(({className:o,...n},r)=>e.useContext(f)?e.createElement(p.Label,{...n,asChild:!1,ref:r,className:s("kui-BaseMenuLabel","kui-DropdownMenuLabel",o)}):null);pe.displayName="DropdownMenu.Label";var se=e.forwardRef((o,n)=>{let{className:r,children:a,color:i=W.color.default,shortcut:t,...u}=o;return e.useContext(f)?e.createElement(p.Item,{"data-accent-color":i,"aria-keyshortcuts":t?S(t):void 0,...u,ref:n,className:s("kui-reset","kui-BaseMenuItem","kui-DropdownMenuItem",r)},e.createElement(ke.Slottable,null,a),t&&e.createElement(T,{shortcut:t,className:"kui-DropdownMenuShortcut"})):null});se.displayName="DropdownMenu.Item";var de=e.forwardRef(({className:o,...n},r)=>e.createElement(p.Group,{...n,asChild:!1,ref:r,className:s("kui-BaseMenuGroup","kui-DropdownMenuGroup",o)}));de.displayName="DropdownMenu.Group";var le=e.forwardRef(({className:o,...n},r)=>e.createElement(p.RadioGroup,{...n,asChild:!1,ref:r,className:s("kui-BaseMenuRadioGroup","kui-DropdownMenuRadioGroup",o)}));le.displayName="DropdownMenu.RadioGroup";var ce=e.forwardRef((o,n)=>{let{children:r,className:a,color:i=A.color.default,...t}=o;return e.useContext(f)?e.createElement(p.RadioItem,{...t,asChild:!1,ref:n,"data-accent-color":i,className:s("kui-BaseMenuItem","kui-BaseMenuRadioItem","kui-DropdownMenuItem","kui-DropdownMenuRadioItem",a)},r,e.createElement(p.ItemIndicator,{className:"kui-BaseMenuItemIndicator kui-DropdownMenuItemIndicator"},e.createElement(ee,{className:"kui-BaseMenuItemIndicatorIcon kui-DropdownMenuItemIndicatorIcon"}))):null});ce.displayName="DropdownMenu.RadioItem";var me=e.forwardRef((o,n)=>{let{children:r,className:a,shortcut:i,color:t=V.color.default,...u}=o;return e.useContext(f)?e.createElement(p.CheckboxItem,{"aria-keyshortcuts":i?S(i):void 0,...u,asChild:!1,ref:n,"data-accent-color":t,className:s("kui-BaseMenuItem","kui-BaseMenuCheckboxItem","kui-DropdownMenuItem","kui-DropdownMenuCheckboxItem",a)},r,e.createElement(p.ItemIndicator,{className:"kui-BaseMenuItemIndicator kui-DropdownMenuItemIndicator"},e.createElement(J,{className:"kui-BaseMenuItemIndicatorIcon kui-DropdownMenuItemIndicatorIcon"})),i&&e.createElement(T,{shortcut:i,className:"kui-DropdownMenuShortcut"})):null});me.displayName="DropdownMenu.CheckboxItem";var we=({label:o="Back",open:n,defaultOpen:r,onOpenChange:a,children:i})=>{let t=I(),u=e.useId(),d=e.useMemo(()=>({id:u,label:o}),[u,o]),l=x(t,u)!=="closed";e.useLayoutEffect(()=>{!t||n===void 0||(n&&!t.isOpen(u)?t.push(u,null):!n&&t.isOpen(u)&&t.close(u))},[t,n,u]);let m=e.useRef(r);e.useLayoutEffect(()=>{t&&m.current&&n===void 0&&t.push(u,null)},[]);let w=ne(a),c=e.useRef(l);return e.useEffect(()=>{!t||c.current===l||(c.current=l,w(l))},[t,l,w]),e.createElement(q.Provider,{value:d},e.createElement(p.Sub,{open:n,defaultOpen:r,onOpenChange:t?void 0:a},i))};we.displayName="DropdownMenu.Sub";var De=e.forwardRef((o,n)=>{let{className:r,children:a,onKeyDown:i,...t}=o,u=I(),d=E(),l=e.useContext(f);if(u&&d){if(!l)return null;let m=c=>{c.preventDefault(),u.push(d.id)},w=c=>{i?.(c),!(c.defaultPrevented||t.disabled)&&c.key===Se[ae(c.currentTarget)]&&(c.preventDefault(),u.push(d.id,"keyboard"))};return e.createElement(p.Item,{"aria-haspopup":"menu",...t,"data-drill-down-trigger":d.id,"data-drill-down-name":t.textValue,onSelect:m,onKeyDown:w,ref:n,className:s("kui-reset","kui-BaseMenuItem","kui-BaseMenuSubTrigger","kui-DropdownMenuItem","kui-DropdownMenuSubTrigger","kui-DropdownMenuDrillDownSubTrigger",r)},a,e.createElement("div",{className:"kui-BaseMenuShortcut kui-DropdownMenuShortcut"},e.createElement(G,{className:"kui-BaseMenuSubTriggerIcon kui-DropdownMenuSubTriggerIcon"})))}return e.createElement(p.SubTrigger,{...t,onKeyDown:i,asChild:!1,ref:n,className:s("kui-BaseMenuItem","kui-BaseMenuSubTrigger","kui-DropdownMenuItem","kui-DropdownMenuSubTrigger",r)},a,e.createElement("div",{className:"kui-BaseMenuShortcut kui-DropdownMenuShortcut"},e.createElement(G,{className:"kui-BaseMenuSubTriggerIcon kui-DropdownMenuSubTriggerIcon"})))});De.displayName="DropdownMenu.SubTrigger";var Me=e.forwardRef(({className:o,...n},r)=>e.useContext(f)?e.createElement(p.Separator,{...n,asChild:!1,ref:r,className:s("kui-BaseMenuSeparator","kui-DropdownMenuSeparator",o)}):null);Me.displayName="DropdownMenu.Separator";function xe({label:o,name:n}){let r=I(),a=e.useCallback(u=>{u.preventDefault(),r?.pop()},[r]),i=typeof o=="string"?o:n,t=i&&i!=="Back"?`Back from ${i}`:void 0;return e.createElement(p.Item,{"aria-label":t,textValue:i||"Back",onSelect:a,className:s("kui-reset","kui-BaseMenuItem","kui-DropdownMenuItem","kui-DropdownMenuDrillDownBackItem")},e.createElement(Z,{className:"kui-BaseMenuSubTriggerIcon kui-DropdownMenuDrillDownBackIcon"}),e.createElement("span",{className:"kui-DropdownMenuDrillDownBackLabel"},o))}function Ee(o){let{loop:n,onEscapeKeyDown:r,onPointerDownOutside:a,onFocusOutside:i,onInteractOutside:t,sideOffset:u,alignOffset:d,avoidCollisions:l,collisionBoundary:m,collisionPadding:w,arrowPadding:c,sticky:R,hideWhenDetached:C,updatePositionStrategy:P,...D}=o;return D}var fe=e.forwardRef((o,n)=>{let r=I(),a=E();return r&&a?e.createElement(Re,{...o,ref:n,store:r,sub:a}):e.createElement(Pe,{...o,ref:n})});fe.displayName="DropdownMenu.SubContent";var Pe=e.forwardRef((o,n)=>{let r=e.useContext(L),a=o.size??r.size,i=o.color??r.color,{className:t,children:u,container:d,forceMount:l,color:m,virtualized:w=!1,...c}=h({...o,size:a},k),R=y(a,k.size.default),C=e.useMemo(()=>({size:a,color:i}),[a,i]),P=e.createElement(N,{size:a},e.createElement(L.Provider,{value:C},u));return e.createElement(p.Portal,{container:d,forceMount:l},e.createElement(O,{asChild:!0},e.createElement(p.SubContent,{"data-accent-color":i,alignOffset:F(R),sideOffset:1,collisionPadding:10,...c,asChild:!1,ref:n,className:s("kui-PopperContent","kui-BaseMenuContent","kui-variant-soft","kui-BaseMenuSubContent","kui-DropdownMenuContent","kui-DropdownMenuSubContent",t)},w?e.createElement("div",{className:s("kui-BaseMenuViewport","kui-DropdownMenuViewport","kui-virtualized")},P):e.createElement(B,{type:"auto",scrollbars:"vertical"},e.createElement("div",{className:s("kui-BaseMenuViewport","kui-DropdownMenuViewport")},P)))))});Pe.displayName="DropdownMenu.CascadeSubContent";var Re=e.forwardRef(({store:o,sub:n,...r},a)=>{let i=x(o,n.id),t=U(o,n.id),u=Y(i==="top"?o:null);if(i==="closed")return null;let{className:d,children:l,container:m,forceMount:w,virtualized:c,size:R,color:C,...P}=Ee(r),D=i==="top",g=t?.name||(typeof n.label=="string"?n.label:"");return e.createElement("div",{role:"group","aria-label":g||void 0,...P,ref:a,"data-drill-down-panel":n.id,"data-drill-down-active":D?!0:void 0,"data-animation-direction":D?u??void 0:void 0,className:s("kui-DropdownMenuDrillDownPanel",d)},D&&e.createElement(e.Fragment,null,e.createElement(xe,{label:n.label,name:g}),e.createElement(p.Separator,{className:"kui-BaseMenuSeparator kui-DropdownMenuSeparator"})),e.createElement(f.Provider,{value:D},l))});Re.displayName="DropdownMenu.DrillDownPanel";var Ce=e.forwardRef(({className:o,...n},r)=>e.createElement(Q,{...n,ref:r,className:s("kui-DropdownMenuTriggerIcon",o)}));Ce.displayName="DropdownMenu.TriggerIcon";export{te as a,ie as b,ue as c,pe as d,se as e,de as f,le as g,ce as h,me as i,we as j,De as k,Me as l,fe as m,Ce as n,Ne as o};
|
|
2
|
-
//# sourceMappingURL=chunk-3JA7SJDT.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/components/dropdown-menu.tsx"],
|
|
4
|
-
"sourcesContent": ["'use client';\n\nimport { warnDeprecated } from '../helpers/warn-deprecated.js';\nimport * as React from 'react';\nimport { VirtualMenu } from './virtual-menu.js';\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 { Theme, useThemeContext } from './theme.js';\nimport { ChevronDownIcon, ThickCheckIcon, ThickChevronLeftIcon, ThickChevronRightIcon, ThickDotIcon } from './icons.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport { useThemeSizeProps } from '../helpers/theme-size.js';\nimport {\n DrillDownLevelContext,\n DrillDownRoot,\n SubContext,\n useCreateDrillDownStore,\n useDrillDownDirection,\n useDrillDownStore,\n usePanelPosition,\n useStackEntry,\n useSubContext,\n} from './_internal/dropdown-menu-drill-down.js';\nimport { MenuProvider } 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 return (\n <DropdownMenuOpenContext.Provider value={open}>\n <DropdownMenuPrimitive.Root {...props} onOpenChange={handleOpenChange} />\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 <Theme 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 </Theme>\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, ...props }, forwardedRef) => {\n if (!React.useContext(DrillDownLevelContext)) return null;\n return (\n <DropdownMenuPrimitive.Label\n {...props}\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, ...props }, forwardedRef) => (\n <DropdownMenuPrimitive.Group\n {...props}\n asChild={false}\n ref={forwardedRef}\n className={classNames('kui-BaseMenuGroup', 'kui-DropdownMenuGroup', className)}\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, ...props }, forwardedRef) => (\n <DropdownMenuPrimitive.RadioGroup\n {...props}\n asChild={false}\n ref={forwardedRef}\n className={classNames('kui-BaseMenuRadioGroup', 'kui-DropdownMenuRadioGroup', className)}\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 {children}\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 {children}\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 // Drill-down: `open` and `defaultOpen` drive the stack; the stack drives\n // `onOpenChange`. A controlled `open` is applied when it changes.\n React.useLayoutEffect(() => {\n if (!drillDownStore || open === undefined) return;\n if (open && !drillDownStore.isOpen(id)) drillDownStore.push(id, null);\n else if (!open && drillDownStore.isOpen(id)) drillDownStore.close(id);\n }, [drillDownStore, open, id]);\n\n const defaultOpenRef = React.useRef(defaultOpen);\n React.useLayoutEffect(() => {\n if (drillDownStore && defaultOpenRef.current && open === undefined) drillDownStore.push(id, null);\n // Only on mount, like an uncontrolled default.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n const handleOpenChange = useCallbackRef(onOpenChange);\n const wasOpenRef = React.useRef(isOpenInDrillDown);\n React.useEffect(() => {\n if (!drillDownStore || wasOpenRef.current === isOpenInDrillDown) return;\n wasOpenRef.current = isOpenInDrillDown;\n handleOpenChange(isOpenInDrillDown);\n }, [drillDownStore, isOpenInDrillDown, handleOpenChange]);\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 <DropdownMenuPrimitive.Item\n aria-haspopup=\"menu\"\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 <Theme 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 </Theme>\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 const direction = useDrillDownDirection(position === 'top' ? store : null);\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 data-animation-direction={isTop ? (direction ?? undefined) : 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 <DrillDownLevelContext.Provider value={isTop}>{children}</DrillDownLevelContext.Provider>\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 VirtualMenu as Virtual,\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", "VirtualMenu", "React", "classNames", "DropdownMenuPrimitive", "Slot", "useCallbackRef", "DropdownMenuOpenContext", "DropdownMenuRoot", "props", "openProp", "defaultOpen", "onOpenChange", "uncontrolledOpen", "setUncontrolledOpen", "open", "handleOpenChangeProp", "useCallbackRef", "handleOpenChange", "next", "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", "Theme", "classNames", "ScrollArea", "DropdownMenuLabel", "DrillDownLevelContext", "DropdownMenuItem", "baseMenuItemPropDefs", "shortcut", "itemProps", "toAriaKeyShortcuts", "Slot", "MenuShortcut", "DropdownMenuGroup", "DropdownMenuRadioGroup", "DropdownMenuRadioItem", "baseMenuRadioItemPropDefs", "ThickDotIcon", "DropdownMenuCheckboxItem", "baseMenuCheckboxItemPropDefs", "ThickCheckIcon", "DropdownMenuSub", "label", "useDrillDownStore", "id", "subContextValue", "isOpenInDrillDown", "usePanelPosition", "defaultOpenRef", "wasOpenRef", "SubContext", "DropdownMenuSubTrigger", "subTriggerProps", "subContext", "useSubContext", "isLevelVisible", "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", "direction", "useDrillDownDirection", "_container", "_forceMount", "_virtualized", "_size", "panelProps", "isTop", "DropdownMenuTriggerIcon", "ChevronDownIcon"]
|
|
7
|
-
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{b as i}from"./chunk-KZEZDBE7.js";import*as e from"react";var u=e.createContext({isInsideMenu:!1}),c={1:24,2:30,3:34,4:38};function d(t){return c[t]}function M({children:t,size:r}){let n=i(r,void 0),o=n?d(n):void 0,s=e.useMemo(()=>({isInsideMenu:!0,size:n,itemHeight:o}),[n,o]);return e.createElement(u.Provider,{value:s},t)}function a(){return e.useContext(u)}export{c as a,d as b,M as c,a as d};
|
|
2
|
-
//# sourceMappingURL=chunk-3KQE2PSJ.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import*as o from"react";function f(l){let[e,a]=o.useState(null);return o.useEffect(()=>{if(!l||!e)return;let t=0,c=()=>{t=0;let n=Math.max(0,e.scrollTop),u=Math.max(0,e.scrollHeight-e.clientHeight-e.scrollTop);e.style.setProperty("--scroll-overflow-start",`${n}px`),e.style.setProperty("--scroll-overflow-end",`${u}px`)},r=()=>{t||(t=requestAnimationFrame(c))};c(),e.addEventListener("scroll",r,{passive:!0});let s=typeof ResizeObserver>"u"?null:new ResizeObserver(r);s?.observe(e);for(let n of Array.from(e.children))s?.observe(n);let i=typeof MutationObserver>"u"?null:new MutationObserver(r);return i?.observe(e,{childList:!0}),()=>{t&&cancelAnimationFrame(t),e.removeEventListener("scroll",r),s?.disconnect(),i?.disconnect(),e.style.removeProperty("--scroll-overflow-start"),e.style.removeProperty("--scroll-overflow-end")}},[l,e]),a}export{f as a};
|
|
2
|
-
//# sourceMappingURL=chunk-5BWLY27A.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/hooks/use-scroll-edges.ts"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\n\n/**\n * Publishes how much content is hidden past each block edge of a scroller, as\n * `--scroll-overflow-start` and `--scroll-overflow-end` (px) on the element.\n * The scroll fade reads them, so an edge fades only while content is hidden\n * there, and the fade ramps in over the first pixels of scrolling.\n *\n * Writes happen at most once per frame, on scroll and when the element or its\n * content resizes. Nothing re-renders.\n */\nexport function useScrollEdges<T extends HTMLElement>(enabled: boolean) {\n const [element, setElement] = React.useState<T | null>(null);\n\n React.useEffect(() => {\n if (!enabled || !element) return;\n let frame = 0;\n const write = () => {\n frame = 0;\n const start = Math.max(0, element.scrollTop);\n const end = Math.max(0, element.scrollHeight - element.clientHeight - element.scrollTop);\n element.style.setProperty('--scroll-overflow-start', `${start}px`);\n element.style.setProperty('--scroll-overflow-end', `${end}px`);\n };\n const schedule = () => {\n if (!frame) frame = requestAnimationFrame(write);\n };\n write();\n element.addEventListener('scroll', schedule, { passive: true });\n const observer = typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(schedule);\n observer?.observe(element);\n for (const child of Array.from(element.children)) observer?.observe(child);\n const mutations = typeof MutationObserver === 'undefined' ? null : new MutationObserver(schedule);\n mutations?.observe(element, { childList: true });\n return () => {\n if (frame) cancelAnimationFrame(frame);\n element.removeEventListener('scroll', schedule);\n observer?.disconnect();\n mutations?.disconnect();\n element.style.removeProperty('--scroll-overflow-start');\n element.style.removeProperty('--scroll-overflow-end');\n };\n }, [enabled, element]);\n\n return setElement;\n}\n"],
|
|
5
|
-
"mappings": "AAAA,UAAYA,MAAW,QAWhB,SAASC,EAAsCC,EAAkB,CACtE,GAAM,CAACC,EAASC,CAAU,EAAU,WAAmB,IAAI,EAE3D,OAAM,YAAU,IAAM,CACpB,GAAI,CAACF,GAAW,CAACC,EAAS,OAC1B,IAAIE,EAAQ,EACNC,EAAQ,IAAM,CAClBD,EAAQ,EACR,IAAME,EAAQ,KAAK,IAAI,EAAGJ,EAAQ,SAAS,EACrCK,EAAM,KAAK,IAAI,EAAGL,EAAQ,aAAeA,EAAQ,aAAeA,EAAQ,SAAS,EACvFA,EAAQ,MAAM,YAAY,0BAA2B,GAAGI,CAAK,IAAI,EACjEJ,EAAQ,MAAM,YAAY,wBAAyB,GAAGK,CAAG,IAAI,CAC/D,EACMC,EAAW,IAAM,CAChBJ,IAAOA,EAAQ,sBAAsBC,CAAK,EACjD,EACAA,EAAM,EACNH,EAAQ,iBAAiB,SAAUM,EAAU,CAAE,QAAS,EAAK,CAAC,EAC9D,IAAMC,EAAW,OAAO,eAAmB,IAAc,KAAO,IAAI,eAAeD,CAAQ,EAC3FC,GAAU,QAAQP,CAAO,EACzB,QAAWQ,KAAS,MAAM,KAAKR,EAAQ,QAAQ,EAAGO,GAAU,QAAQC,CAAK,EACzE,IAAMC,EAAY,OAAO,iBAAqB,IAAc,KAAO,IAAI,iBAAiBH,CAAQ,EAChG,OAAAG,GAAW,QAAQT,EAAS,CAAE,UAAW,EAAK,CAAC,EACxC,IAAM,CACPE,GAAO,qBAAqBA,CAAK,EACrCF,EAAQ,oBAAoB,SAAUM,CAAQ,EAC9CC,GAAU,WAAW,EACrBE,GAAW,WAAW,EACtBT,EAAQ,MAAM,eAAe,yBAAyB,EACtDA,EAAQ,MAAM,eAAe,uBAAuB,CACtD,CACF,EAAG,CAACD,EAASC,CAAO,CAAC,EAEdC,CACT",
|
|
6
|
-
"names": ["React", "useScrollEdges", "enabled", "element", "setElement", "frame", "write", "start", "end", "schedule", "observer", "child", "mutations"]
|
|
7
|
-
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as s}from"./chunk-CLZW2IDD.js";import{e as p}from"./chunk-3YLYGKFB.js";import{a as l}from"./chunk-ELAW7ZUG.js";import{a as I}from"./chunk-OS3FCYZY.js";var h={};I(h,{Item:()=>g,Root:()=>u});import*as e from"react";import i from"classnames";import{ToggleGroup as d}from"radix-ui";import{useControllableState as y}from"radix-ui/internal";var u=e.forwardRef((t,r)=>{let o=p(t,s.size),{className:n,children:a,radius:f,value:C,defaultValue:P,onValueChange:c,...S}=l(o,s),[R,v]=y({prop:C,onChange:c,defaultProp:P??""});return e.createElement(d.Root,{"data-disabled":o.disabled||void 0,"data-radius":f,ref:r,className:i("kui-SegmentedControlRoot",n),onValueChange:m=>{m&&v(m)},...S,type:"single",value:R,asChild:!1,disabled:!!o.disabled},a,e.createElement("div",{className:"kui-SegmentedControlIndicator"}))});u.displayName="SegmentedControl.Root";var g=e.forwardRef(({children:t,className:r,iconOnly:o,...n},a)=>e.createElement(d.Item,{ref:a,className:i("kui-reset","kui-SegmentedControlItem",r),"data-icon-only":o||void 0,...n,disabled:!1,asChild:!1},e.createElement("span",{className:"kui-SegmentedControlItemSeparator"}),e.createElement("span",{className:"kui-SegmentedControlItemLabel"},e.createElement("span",{className:"kui-SegmentedControlItemLabelActive"},t),e.createElement("span",{className:"kui-SegmentedControlItemLabelInactive","aria-hidden":!0},t))));g.displayName="SegmentedControl.Item";export{u as a,g as b,h as c};
|
|
2
|
-
//# sourceMappingURL=chunk-6CK7UTNH.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/components/segmented-control.tsx"],
|
|
4
|
-
"sourcesContent": ["'use client';\n\nimport { warnDeprecated } from '../helpers/warn-deprecated.js';\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { ToggleGroup as ToggleGroupPrimitive } from 'radix-ui';\nimport { useControllableState } from 'radix-ui/internal';\n\nimport { segmentedControlRootPropDefs } from './segmented-control.props.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport { useThemeSizeProps } from '../helpers/theme-size.js';\n\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { GetPropDefTypes } from '../props/prop-def.js';\n\ntype SegmentedControlRootOwnProps = GetPropDefTypes<typeof segmentedControlRootPropDefs>;\n\ninterface SegmentedControlRootProps\n extends ComponentPropsWithout<'div', RemovedProps | 'dir'>,\n SegmentedControlRootOwnProps {\n value?: string;\n defaultValue?: string;\n onValueChange?(value: string): void;\n}\n\nconst SegmentedControlRoot = React.forwardRef<HTMLDivElement, SegmentedControlRootProps>(\n (ownProps, forwardedRef) => {\n const props = useThemeSizeProps(ownProps, segmentedControlRootPropDefs.size);\n const {\n className,\n children,\n radius,\n value: valueProp,\n defaultValue: defaultValueProp,\n onValueChange: onValueChangeProp,\n ...rootProps\n } = extractProps(props, segmentedControlRootPropDefs);\n\n const [value, setValue] = useControllableState({\n prop: valueProp,\n onChange: onValueChangeProp,\n defaultProp: defaultValueProp ?? '',\n });\n\n return (\n <ToggleGroupPrimitive.Root\n data-disabled={props.disabled || undefined}\n data-radius={radius}\n ref={forwardedRef}\n className={classNames('kui-SegmentedControlRoot', className)}\n onValueChange={(value) => {\n if (value) {\n setValue(value);\n }\n }}\n {...rootProps}\n type=\"single\"\n value={value}\n asChild={false}\n disabled={!!props.disabled}\n >\n {children}\n <div className=\"kui-SegmentedControlIndicator\" />\n </ToggleGroupPrimitive.Root>\n );\n },\n);\n\nSegmentedControlRoot.displayName = 'SegmentedControl.Root';\n\ninterface SegmentedControlItemOwnProps {\n value: string;\n /** When true, applies fixed square width for icon-only segments */\n iconOnly?: boolean;\n}\n\ninterface SegmentedControlItemProps\n extends ComponentPropsWithout<\n typeof ToggleGroupPrimitive.Item,\n RemovedProps | 'disabled' | 'type' | 'value'\n >,\n SegmentedControlItemOwnProps {}\n\nconst SegmentedControlItem = React.forwardRef<HTMLButtonElement, SegmentedControlItemProps>(\n ({ children, className, iconOnly, ...props }, forwardedRef) => (\n <ToggleGroupPrimitive.Item\n ref={forwardedRef}\n className={classNames('kui-reset', 'kui-SegmentedControlItem', className)}\n data-icon-only={iconOnly || undefined}\n {...props}\n disabled={false}\n asChild={false}\n >\n <span className=\"kui-SegmentedControlItemSeparator\" />\n <span className=\"kui-SegmentedControlItemLabel\">\n <span className=\"kui-SegmentedControlItemLabelActive\">{children}</span>\n <span className=\"kui-SegmentedControlItemLabelInactive\" aria-hidden>\n {children}\n </span>\n </span>\n </ToggleGroupPrimitive.Item>\n ),\n);\n\nSegmentedControlItem.displayName = 'SegmentedControl.Item';\n\nexport { SegmentedControlRoot as Root, SegmentedControlItem as Item };\nexport type { SegmentedControlRootProps as RootProps, SegmentedControlItemProps as ItemProps };\n"],
|
|
5
|
-
"mappings": "gKAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,UAAAE,EAAA,SAAAC,IAGA,UAAYC,MAAW,QACvB,OAAOC,MAAgB,aACvB,OAAS,eAAeC,MAA4B,WACpD,OAAS,wBAAAC,MAA4B,oBAmBrC,IAAMC,EAA6B,aACjC,CAACC,EAAUC,IAAiB,CAC1B,IAAMC,EAAQC,EAAkBH,EAAUI,EAA6B,IAAI,EACrE,CACJ,UAAAC,EACA,SAAAC,EACA,OAAAC,EACA,MAAOC,EACP,aAAcC,EACd,cAAeC,EACf,GAAGC,CACL,EAAIC,EAAaV,EAAOE,CAA4B,EAE9C,CAACS,EAAOC,CAAQ,EAAIC,EAAqB,CAC7C,KAAMP,EACN,SAAUE,EACV,YAAaD,GAAoB,EACnC,CAAC,EAED,OACE,gBAACO,EAAqB,KAArB,CACC,gBAAed,EAAM,UAAY,OACjC,cAAaK,EACb,IAAKN,EACL,UAAWgB,EAAW,2BAA4BZ,CAAS,EAC3D,cAAgBQ,GAAU,CACpBA,GACFC,EAASD,CAAK,CAElB,EACC,GAAGF,EACJ,KAAK,SACL,MAAOE,EACP,QAAS,GACT,SAAU,CAAC,CAACX,EAAM,UAEjBI,EACD,gBAAC,OAAI,UAAU,gCAAgC,CACjD,CAEJ,CACF,EAEAP,EAAqB,YAAc,wBAenC,IAAMmB,EAA6B,aACjC,CAAC,CAAE,SAAAZ,EAAU,UAAAD,EAAW,SAAAc,EAAU,GAAGjB,CAAM,EAAGD,IAC5C,gBAACe,EAAqB,KAArB,CACC,IAAKf,EACL,UAAWgB,EAAW,YAAa,2BAA4BZ,CAAS,EACxE,iBAAgBc,GAAY,OAC3B,GAAGjB,EACJ,SAAU,GACV,QAAS,IAET,gBAAC,QAAK,UAAU,oCAAoC,EACpD,gBAAC,QAAK,UAAU,iCACd,gBAAC,QAAK,UAAU,uCAAuCI,CAAS,EAChE,gBAAC,QAAK,UAAU,wCAAwC,cAAW,IAChEA,CACH,CACF,CACF,CAEJ,EAEAY,EAAqB,YAAc",
|
|
6
|
-
"names": ["segmented_control_exports", "__export", "SegmentedControlItem", "SegmentedControlRoot", "React", "classNames", "ToggleGroupPrimitive", "useControllableState", "SegmentedControlRoot", "ownProps", "forwardedRef", "props", "useThemeSizeProps", "segmentedControlRootPropDefs", "className", "children", "radius", "valueProp", "defaultValueProp", "onValueChangeProp", "rootProps", "extractProps", "value", "setValue", "useControllableState", "ToggleGroupPrimitive", "classNames", "SegmentedControlItem", "iconOnly"]
|
|
7
|
-
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as U}from"./chunk-LHIS3UKQ.js";import{a as K,b as F,c as j,e as E,f as O}from"./chunk-3JA7SJDT.js";import{a as N}from"./chunk-DSPYHO3L.js";import{a as H,b as z,c as W}from"./chunk-FDHWAC6W.js";import{d as G}from"./chunk-IX5HIHVI.js";import{b as g}from"./chunk-AB3QCCUM.js";import{b as x}from"./chunk-FWB47YCH.js";import{a as D}from"./chunk-RWTSGUVJ.js";import{a as ae}from"./chunk-OS3FCYZY.js";var oe={};ae(oe,{Group:()=>_,GroupContent:()=>re,GroupLabel:()=>ee,Menu:()=>$,MenuButton:()=>J,MenuItem:()=>X,MenuSub:()=>Q,MenuSubContent:()=>Z,MenuSubTrigger:()=>Y,Search:()=>te,Separator:()=>V});import*as e from"react";import p from"classnames";import*as f from"@radix-ui/react-accordion";var V=e.forwardRef(({className:r,...t},n)=>e.createElement(U,{...t,ref:n,className:p("kui-SidebarSeparator",r)}));V.displayName="Sidebar.Separator";var $=e.forwardRef(({className:r,...t},n)=>e.createElement("ul",{...t,ref:n,className:p("kui-SidebarMenu",r)}));$.displayName="Sidebar.Menu";var X=e.forwardRef(({className:r,...t},n)=>e.createElement("li",{...t,ref:n,className:p("kui-SidebarMenuItem",r)}));X.displayName="Sidebar.MenuItem";function ne(r){let t=[],n=[];return e.Children.forEach(r,a=>{if(typeof a=="string"||typeof a=="number")n.push(e.createElement("span",{key:n.length,className:"kui-SidebarMenuLabel"},a));else if(e.isValidElement(a)){let i=a;i.type==="svg"||i.props&&i.props.icon||typeof i.type=="function"&&(i.type.displayName?.includes("Icon")||i.type.name?.includes("Icon"))?t.push(a):n.push(a)}else a&&n.push(a)}),{icons:t,labels:n}}function B(r){if(typeof r=="string"||typeof r=="number")return e.createElement("span",{className:"kui-SidebarMenuLabel"},r);if(Array.isArray(r))return r.map((t,n)=>e.createElement(e.Fragment,{key:n},B(t)));if(e.isValidElement(r)){let t=r,n=t.props&&t.props.className||"";if(typeof t.type=="string"&&n.split(" ").includes("kui-SidebarMenuLabel"))return t;let i=B(t.props?.children);return e.cloneElement(t,{...t.props},i)}return r}var J=e.forwardRef(({asChild:r=!1,isActive:t=!1,shortcut:n,badge:a,className:i,children:l,onKeyDown:m,...M},s)=>{let c=g(),u=c?.size??"2",h=c?.presentation==="thin",P=r?x:"button",w=e.useCallback(o=>{if(o.key==="ArrowDown"||o.key==="ArrowUp"){let b=o.currentTarget.closest(".kui-SidebarContent, .kui-SidebarSearchPopover"),y=b?Array.from(b.querySelectorAll(".kui-SidebarMenuButton")).filter(v=>v.offsetParent!==null):[],d=y.indexOf(o.currentTarget),C=y[d+(o.key==="ArrowDown"?1:-1)];d!==-1&&C&&(o.preventDefault(),C.focus())}m?.(o)},[m]),S=e.useMemo(()=>B(l),[l]),{icons:R,labels:I}=e.useMemo(()=>h?ne(l):{icons:[],labels:[]},[h,l]),L=e.useMemo(()=>{if(!r)return null;try{let o=e.Children.only(S),b=o.props?.children,y=e.createElement(e.Fragment,null,b,a&&e.createElement("div",{className:"kui-SidebarMenuBadge"},typeof a=="string"?e.createElement(N,{size:u,variant:"soft"},a):e.createElement(N,{size:a.size||u,variant:a.variant||"soft",color:a.color,radius:a.radius},a.content)),n&&e.createElement("div",{className:"kui-BaseMenuShortcut kui-SidebarMenuShortcut"},e.createElement(D,{size:u},n)));return e.cloneElement(o,{...o.props},y)}catch{return S}},[r,S,a,n,u]);return e.createElement(P,{...M,ref:s,"aria-current":t?"page":void 0,className:p("kui-reset","kui-BaseMenuItem","kui-SidebarMenuButton",i),"data-active":t||void 0,onKeyDown:w},r?L:h&&R.length>0?e.createElement(e.Fragment,null,e.createElement("span",{className:"kui-SidebarMenuIconWrapper"},R),I.map((o,b)=>e.createElement(e.Fragment,{key:b},typeof o=="string"||typeof o=="number"?e.createElement("span",{className:"kui-SidebarMenuLabel"},o):o))):e.createElement(e.Fragment,null,S,a&&e.createElement("div",{className:"kui-SidebarMenuBadge"},typeof a=="string"?e.createElement(N,{size:u,variant:"soft"},a):e.createElement(N,{size:a.size||u,variant:a.variant||"soft",color:a.color,radius:a.radius},a.content)),n&&e.createElement("div",{className:"kui-BaseMenuShortcut kui-SidebarMenuShortcut"},e.createElement(D,{size:u},n))))});J.displayName="Sidebar.MenuButton";var T=e.createContext("accordion"),Q=e.forwardRef(({defaultOpen:r=!1,children:t,...n},a)=>(g()?.presentation==="thin"?"dropdown":"accordion")==="dropdown"?e.createElement("div",{...n,ref:a},e.createElement(K,null,e.createElement(T.Provider,{value:"dropdown"},t))):e.createElement("div",{...n,ref:a},e.createElement(T.Provider,{value:"accordion"},e.createElement(f.Root,{type:"single",collapsible:!0,defaultValue:r?"item":void 0},e.createElement(f.Item,{value:"item"},t)))));Q.displayName="Sidebar.MenuSub";var Y=e.forwardRef(({asChild:r=!1,className:t,children:n,...a},i)=>e.useContext(T)==="dropdown"?e.createElement(F,null,e.createElement("button",{...a,ref:i,type:"button","aria-haspopup":"menu",className:p("kui-reset","kui-BaseMenuItem","kui-SidebarMenuButton","kui-SidebarMenuSubTrigger",t)},n)):e.createElement(f.Header,{asChild:!0},e.createElement("div",null,e.createElement(f.Trigger,{...a,ref:i,asChild:r,className:p("kui-reset","kui-BaseMenuItem","kui-SidebarMenuButton","kui-SidebarMenuSubTrigger",t)},r?n:e.createElement(e.Fragment,null,n,e.createElement(G,{className:p("kui-BaseMenuSubTriggerIcon","kui-SidebarMenuSubTriggerIcon")}))))));Y.displayName="Sidebar.MenuSubTrigger";var Z=e.forwardRef(({className:r,children:t,...n},a)=>{let i=g();if(e.useContext(T)==="dropdown"){let m=s=>{if(Array.isArray(s))return s.map((c,u)=>e.createElement(e.Fragment,{key:u},m(c)));if(e.isValidElement(s)){if(s.type?.displayName==="Sidebar.MenuButton")return s.props?.children;let u=s.props?.children;if(u!==void 0)return e.cloneElement(s,{...s.props,children:m(u)})}return s},M=e.Children.map(t,(s,c)=>{if(e.isValidElement(s)&&s.type?.displayName==="Sidebar.MenuItem"){let u=s.props?.children,h=m(u);return e.createElement(E,{key:c,asChild:!0},h)}return e.createElement(E,{key:c,asChild:!0},m(s))});return e.createElement(j,{size:i?.size,className:p(r)},e.createElement(O,null,M))}return e.createElement(f.Content,{...n,ref:a,className:p("kui-SidebarMenuSubContent",r)},e.createElement("div",{className:"kui-SidebarMenuSubList"},t))});Z.displayName="Sidebar.MenuSubContent";var _=e.forwardRef(({className:r,...t},n)=>e.createElement("div",{...t,ref:n,className:p("kui-BaseMenuGroup","kui-SidebarGroup",r)}));_.displayName="Sidebar.Group";var ee=e.forwardRef(({asChild:r=!1,className:t,...n},a)=>e.createElement(r?x:"div",{...n,ref:a,className:p("kui-BaseMenuLabel","kui-SidebarGroupLabel",t)}));ee.displayName="Sidebar.GroupLabel";var re=e.forwardRef(({className:r,...t},n)=>e.createElement("div",{...t,ref:n,className:p("kui-SidebarGroupContent",r)}));re.displayName="Sidebar.GroupContent";var A=({className:r})=>e.createElement("svg",{className:r,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true"},e.createElement("circle",{cx:"11",cy:"11",r:"8"}),e.createElement("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"})),q=({className:r})=>e.createElement("svg",{className:r,width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true"},e.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),e.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"})),te=e.forwardRef(({value:r,onValueChange:t,placeholder:n="Search...",children:a,className:i,...l},m)=>{let M=g(),s=M?.presentation==="thin",c=e.useRef(null),u=e.useRef(null),P=`${e.useId()}-results`,w=e.useRef(r);w.current=r;let S=e.useRef(t);S.current=t;let R=n.replace(/\.+$/,""),I=e.useCallback(o=>{o.key==="Escape"&&w.current&&(o.preventDefault(),o.stopPropagation(),S.current(""),c.current?.focus())},[]),L=e.useCallback(o=>{let b=u.current;if(!b)return;let y=b.querySelector('[role="group"]');if(!y)return;let d=Array.from(y.querySelectorAll("a, button"));if(d.length===0)return;let C=document.activeElement,v=C===c.current,k=d.indexOf(C);if(o.key.length===1&&!o.ctrlKey&&!o.metaKey&&!o.altKey&&!v&&k!==-1){c.current?.focus();return}switch(o.key){case"ArrowDown":{o.preventDefault(),v||k===-1?d[0]?.focus():k<d.length-1&&d[k+1]?.focus();break}case"ArrowUp":{o.preventDefault(),k<=0?c.current?.focus():d[k-1]?.focus();break}case"Home":{v||(o.preventDefault(),d[0]?.focus());break}case"End":{v||(o.preventDefault(),d[d.length-1]?.focus());break}}},[]);return s?e.createElement("div",{...l,ref:m,className:p("kui-SidebarSearch","kui-SidebarSearch--thin",i)},e.createElement(H,null,e.createElement(z,null,e.createElement("button",{type:"button",className:p("kui-reset","kui-BaseMenuItem","kui-SidebarMenuButton","kui-SidebarSearchTrigger"),"aria-label":R},e.createElement("span",{className:"kui-SidebarMenuIconWrapper"},e.createElement(A,null)),e.createElement("span",{className:"kui-SidebarMenuLabel"},"Search"))),e.createElement(W,{side:"right",align:"start",size:"2",width:"280px","aria-label":R},e.createElement("div",{ref:u,className:"kui-SidebarSearchPopover",role:"search",onKeyDown:L},e.createElement("div",{className:"kui-SidebarSearchInputWrapper"},e.createElement(A,{className:"kui-SidebarSearchIcon"}),e.createElement("input",{ref:c,type:"search",className:"kui-SidebarSearchInput",value:r,onChange:o=>t(o.target.value),onKeyDown:I,placeholder:n,"aria-label":R,"aria-controls":a?P:void 0,autoFocus:!0}),r&&e.createElement("button",{type:"button",className:"kui-reset kui-SidebarSearchClear",onClick:()=>{t(""),c.current?.focus()},"aria-label":"Clear search"},e.createElement(q,null))),a&&e.createElement("div",{id:P,role:"group","aria-label":"Search results"},a))))):e.createElement("div",{...l,ref:m,className:p("kui-SidebarSearch","kui-SidebarSearch--expanded","kui-ShellPaneChrome",`kui-r-size-${M?.size??"2"}`,i),role:"search"},e.createElement("div",{className:"kui-SidebarSearchInputWrapper"},e.createElement(A,{className:"kui-SidebarSearchIcon"}),e.createElement("input",{ref:c,type:"search",className:"kui-SidebarSearchInput",value:r,onChange:o=>t(o.target.value),onKeyDown:I,placeholder:n,"aria-label":R}),r&&e.createElement("button",{type:"button",className:"kui-reset kui-SidebarSearchClear",onClick:()=>{t(""),c.current?.focus()},"aria-label":"Clear search"},e.createElement(q,null))))});te.displayName="Sidebar.Search";export{V as a,$ as b,X as c,J as d,Q as e,Y as f,Z as g,_ as h,ee as i,re as j,te as k,oe as l};
|
|
2
|
-
//# sourceMappingURL=chunk-6RK26HIY.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/components/sidebar.tsx"],
|
|
4
|
-
"sourcesContent": ["'use client';\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { Slot } from './slot.js';\nimport * as Accordion from '@radix-ui/react-accordion';\nimport * as DropdownMenu from './dropdown-menu.js';\nimport * as Popover from './popover.js';\n\nimport { Separator } from './separator.js';\nimport { ThickChevronRightIcon } from './icons.js';\nimport { Kbd } from './kbd.js';\nimport { Chip } from './chip.js';\nimport { useSidebarVisual } from './_internal/pane-chrome.js';\n\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { ChipProps } from './chip.js';\n\n// Chip configuration for the `badge` slot of sidebar menu buttons\ntype BadgeConfig = {\n content: React.ReactNode;\n variant?: ChipProps['variant'];\n size?: ChipProps['size'];\n color?: ChipProps['color'];\n radius?: ChipProps['radius'];\n};\n\n// Sidebar separator\ninterface SidebarSeparatorProps extends ComponentPropsWithout<typeof Separator, RemovedProps> {}\n\nconst SidebarSeparator = React.forwardRef<React.ComponentRef<typeof Separator>, SidebarSeparatorProps>(({ className, ...props }, forwardedRef) => (\n <Separator {...props} ref={forwardedRef} className={classNames('kui-SidebarSeparator', className)} />\n));\nSidebarSeparator.displayName = 'Sidebar.Separator';\n\n// Menu components - styled like dropdown menus, but semantically a navigation list.\n// No menu/menuitem roles: those promise an application menu, which a list of links is not.\ninterface SidebarMenuProps extends React.ComponentPropsWithoutRef<'ul'> {}\n\nconst SidebarMenu = React.forwardRef<HTMLUListElement, SidebarMenuProps>(({ className, ...props }, forwardedRef) => (\n <ul {...props} ref={forwardedRef} className={classNames('kui-SidebarMenu', className)} />\n));\nSidebarMenu.displayName = 'Sidebar.Menu';\n\ninterface SidebarMenuItemProps extends React.ComponentPropsWithoutRef<'li'> {}\n\nconst SidebarMenuItem = React.forwardRef<HTMLLIElement, SidebarMenuItemProps>(({ className, ...props }, forwardedRef) => (\n <li {...props} ref={forwardedRef} className={classNames('kui-SidebarMenuItem', className)} />\n));\nSidebarMenuItem.displayName = 'Sidebar.MenuItem';\n\ninterface SidebarMenuButtonProps extends React.ComponentPropsWithoutRef<'button'> {\n asChild?: boolean;\n isActive?: boolean;\n shortcut?: React.ReactNode;\n badge?: string | BadgeConfig;\n}\n\n// Extracted to module scope to avoid re-creation on every render\nfunction separateIconsAndLabels(node: React.ReactNode): { icons: React.ReactNode[]; labels: React.ReactNode[] } {\n const icons: React.ReactNode[] = [];\n const labels: React.ReactNode[] = [];\n\n React.Children.forEach(node, (child) => {\n if (typeof child === 'string' || typeof child === 'number') {\n labels.push(<span key={labels.length} className=\"kui-SidebarMenuLabel\">{child}</span>);\n } else if (React.isValidElement(child)) {\n const el = child as React.ReactElement<any>;\n if (el.type === 'svg' || (el.props && el.props.icon) || (typeof el.type === 'function' && ((el.type as any).displayName?.includes('Icon') || (el.type as any).name?.includes('Icon')))) {\n icons.push(child);\n } else {\n labels.push(child);\n }\n } else if (child) {\n labels.push(child);\n }\n });\n\n return { icons, labels };\n}\n\nfunction wrapTextNodes(node: React.ReactNode): React.ReactNode {\n if (typeof node === 'string' || typeof node === 'number') {\n return <span className=\"kui-SidebarMenuLabel\">{node}</span>;\n }\n if (Array.isArray(node)) {\n return node.map((child, index) => <React.Fragment key={index}>{wrapTextNodes(child)}</React.Fragment>);\n }\n if (React.isValidElement(node)) {\n const el = node as React.ReactElement<any>;\n const className: string = (el.props && (el.props as any).className) || '';\n const isAlreadyLabel = typeof el.type === 'string' && className.split(' ').includes('kui-SidebarMenuLabel');\n if (isAlreadyLabel) return el;\n const newChildren = wrapTextNodes((el.props as any)?.children);\n return React.cloneElement(el, { ...(el.props as any) }, newChildren);\n }\n return node;\n}\n\nconst SidebarMenuButton = React.forwardRef<HTMLButtonElement, SidebarMenuButtonProps>(\n ({ asChild = false, isActive = false, shortcut, badge, className, children, onKeyDown, ...props }, forwardedRef) => {\n const visual = useSidebarVisual();\n const sidebarSize = visual?.size ?? '2';\n const isThinMode = visual?.presentation === 'thin';\n\n const Comp = asChild ? Slot : 'button';\n\n // Enter and Space are left to the native button or link. Arrow keys move between\n // the visible buttons of the same sidebar, as a convenience on top of Tab.\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLButtonElement>) => {\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n const scope = event.currentTarget.closest('.kui-SidebarContent, .kui-SidebarSearchPopover');\n const buttons = scope\n ? Array.from(scope.querySelectorAll<HTMLElement>('.kui-SidebarMenuButton')).filter((el) => el.offsetParent !== null)\n : [];\n const index = buttons.indexOf(event.currentTarget);\n const next = buttons[index + (event.key === 'ArrowDown' ? 1 : -1)];\n if (index !== -1 && next) {\n event.preventDefault();\n next.focus();\n }\n }\n onKeyDown?.(event);\n },\n [onKeyDown],\n );\n\n // Memoize child processing to avoid re-traversal on every render\n const processedChildren = React.useMemo(() => wrapTextNodes(children), [children]);\n\n // For thin mode, separate icons into a wrapper for targeted background styling\n const { icons, labels } = React.useMemo(\n () => isThinMode ? separateIconsAndLabels(children) : { icons: [] as React.ReactNode[], labels: [] as React.ReactNode[] },\n [isThinMode, children],\n );\n\n // When rendering asChild, Slot expects a single child element. We still want to\n // append optional badge/shortcut inside that element so they render with Link.\n const slottedChildren = React.useMemo(() => {\n if (!asChild) return null;\n try {\n const onlyChild = React.Children.only(processedChildren as React.ReactElement<any>) as React.ReactElement<any>;\n const originalInnerChildren = (onlyChild.props as any)?.children;\n const enhancedInnerChildren = (\n <>\n {originalInnerChildren}\n {badge && (\n <div className=\"kui-SidebarMenuBadge\">\n {typeof badge === 'string' ? (\n <Chip size={sidebarSize} variant=\"soft\">\n {badge}\n </Chip>\n ) : (\n <Chip size={badge.size || sidebarSize} variant={badge.variant || 'soft'} color={badge.color} radius={badge.radius}>\n {badge.content}\n </Chip>\n )}\n </div>\n )}\n {shortcut && (\n <div className=\"kui-BaseMenuShortcut kui-SidebarMenuShortcut\">\n <Kbd size={sidebarSize}>{shortcut}</Kbd>\n </div>\n )}\n </>\n );\n return React.cloneElement(onlyChild, { ...(onlyChild.props as any) }, enhancedInnerChildren);\n } catch {\n // Fallback: if multiple children were passed incorrectly, just return processedChildren\n return processedChildren as React.ReactNode;\n }\n }, [asChild, processedChildren, badge, shortcut, sidebarSize]);\n\n return (\n <Comp\n {...props}\n ref={forwardedRef}\n aria-current={isActive ? 'page' : undefined}\n className={classNames('kui-reset', 'kui-BaseMenuItem', 'kui-SidebarMenuButton', className)}\n data-active={isActive || undefined}\n onKeyDown={handleKeyDown}\n >\n {asChild ? (\n slottedChildren\n ) : isThinMode && icons.length > 0 ? (\n <>\n <span className=\"kui-SidebarMenuIconWrapper\">{icons}</span>\n {labels.map((label, index) => (\n <React.Fragment key={index}>\n {typeof label === 'string' || typeof label === 'number' ? (\n <span className=\"kui-SidebarMenuLabel\">{label}</span>\n ) : (\n label\n )}\n </React.Fragment>\n ))}\n </>\n ) : (\n <>\n {processedChildren}\n {badge && (\n <div className=\"kui-SidebarMenuBadge\">\n {typeof badge === 'string' ? (\n <Chip size={sidebarSize} variant=\"soft\">\n {badge}\n </Chip>\n ) : (\n <Chip size={badge.size || sidebarSize} variant={badge.variant || 'soft'} color={badge.color} radius={badge.radius}>\n {badge.content}\n </Chip>\n )}\n </div>\n )}\n {shortcut && (\n <div className=\"kui-BaseMenuShortcut kui-SidebarMenuShortcut\">\n <Kbd size={sidebarSize}>{shortcut}</Kbd>\n </div>\n )}\n </>\n )}\n </Comp>\n );\n },\n);\nSidebarMenuButton.displayName = 'Sidebar.MenuButton';\n\n// Sub-menu components: Accordion in expanded, Dropdown in thin\nconst SidebarSubMenuModeContext = React.createContext<'accordion' | 'dropdown'>('accordion');\ninterface SidebarMenuSubProps extends React.ComponentPropsWithoutRef<'div'> {\n defaultOpen?: boolean;\n}\n\nconst SidebarMenuSub = React.forwardRef<HTMLDivElement, SidebarMenuSubProps>(({ defaultOpen = false, children, ...props }, forwardedRef) => {\n const visual = useSidebarVisual();\n const mode: 'accordion' | 'dropdown' = visual?.presentation === 'thin' ? 'dropdown' : 'accordion';\n\n if (mode === 'dropdown') {\n return (\n <div {...props} ref={forwardedRef}>\n <DropdownMenu.Root>\n <SidebarSubMenuModeContext.Provider value=\"dropdown\">{children}</SidebarSubMenuModeContext.Provider>\n </DropdownMenu.Root>\n </div>\n );\n }\n\n return (\n <div {...props} ref={forwardedRef}>\n <SidebarSubMenuModeContext.Provider value=\"accordion\">\n <Accordion.Root type=\"single\" collapsible defaultValue={defaultOpen ? 'item' : undefined}>\n <Accordion.Item value=\"item\">{children}</Accordion.Item>\n </Accordion.Root>\n </SidebarSubMenuModeContext.Provider>\n </div>\n );\n});\nSidebarMenuSub.displayName = 'Sidebar.MenuSub';\n\ninterface SidebarMenuSubTriggerProps extends React.ComponentPropsWithoutRef<typeof Accordion.Trigger> {\n asChild?: boolean;\n}\n\nconst SidebarMenuSubTrigger = React.forwardRef<React.ElementRef<typeof Accordion.Trigger>, SidebarMenuSubTriggerProps>(\n ({ asChild = false, className, children, ...props }, forwardedRef) => {\n const mode = React.useContext(SidebarSubMenuModeContext);\n\n if (mode === 'dropdown') {\n return (\n <DropdownMenu.Trigger>\n <button\n {...(props as any)}\n ref={forwardedRef as any}\n type=\"button\"\n aria-haspopup=\"menu\"\n className={classNames('kui-reset', 'kui-BaseMenuItem', 'kui-SidebarMenuButton', 'kui-SidebarMenuSubTrigger', className)}\n >\n {children}\n </button>\n </DropdownMenu.Trigger>\n );\n }\n\n return (\n <Accordion.Header asChild>\n <div>\n <Accordion.Trigger\n {...props}\n ref={forwardedRef}\n asChild={asChild}\n className={classNames('kui-reset', 'kui-BaseMenuItem', 'kui-SidebarMenuButton', 'kui-SidebarMenuSubTrigger', className)}\n >\n {asChild ? (\n children\n ) : (\n <>\n {children}\n <ThickChevronRightIcon className={classNames('kui-BaseMenuSubTriggerIcon', 'kui-SidebarMenuSubTriggerIcon')} />\n </>\n )}\n </Accordion.Trigger>\n </div>\n </Accordion.Header>\n );\n },\n);\nSidebarMenuSubTrigger.displayName = 'Sidebar.MenuSubTrigger';\n\ninterface SidebarMenuSubContentProps extends React.ComponentPropsWithoutRef<typeof Accordion.Content> {}\n\nconst SidebarMenuSubContent = React.forwardRef<React.ElementRef<typeof Accordion.Content>, SidebarMenuSubContentProps>(({ className, children, ...props }, forwardedRef) => {\n const visual = useSidebarVisual();\n const mode = React.useContext(SidebarSubMenuModeContext);\n\n if (mode === 'dropdown') {\n const unwrapMenuButton = (node: React.ReactNode): React.ReactNode => {\n if (Array.isArray(node)) {\n return node.map((n, i) => <React.Fragment key={i}>{unwrapMenuButton(n)}</React.Fragment>);\n }\n if (React.isValidElement(node)) {\n const typeDisplay = (node.type as any)?.displayName;\n if (typeDisplay === 'Sidebar.MenuButton') {\n return (node.props as any)?.children;\n }\n const child = (node.props as any)?.children;\n if (child !== undefined) {\n return React.cloneElement(node as any, { ...(node.props as any), children: unwrapMenuButton(child) });\n }\n }\n return node;\n };\n\n const normalized = React.Children.map(children as React.ReactNode, (child, index) => {\n if (React.isValidElement(child) && (child.type as any)?.displayName === 'Sidebar.MenuItem') {\n const itemChildren = (child.props as any)?.children;\n const content = unwrapMenuButton(itemChildren);\n return (\n <DropdownMenu.Item key={index} asChild>\n {content as any}\n </DropdownMenu.Item>\n );\n }\n // Fallback: wrap raw nodes too for consistent menu styling\n return (\n <DropdownMenu.Item key={index} asChild>\n {unwrapMenuButton(child) as any}\n </DropdownMenu.Item>\n );\n });\n\n return (\n <DropdownMenu.Content size={visual?.size} className={classNames(className)}>\n <DropdownMenu.Group>{normalized}</DropdownMenu.Group>\n </DropdownMenu.Content>\n );\n }\n\n return (\n <Accordion.Content {...props} ref={forwardedRef} className={classNames('kui-SidebarMenuSubContent', className)}>\n <div className=\"kui-SidebarMenuSubList\">{children}</div>\n </Accordion.Content>\n );\n});\nSidebarMenuSubContent.displayName = 'Sidebar.MenuSubContent';\n\n// Group components. The label is plain text: no role, so it isn't announced as an empty group.\ninterface SidebarGroupProps extends React.ComponentPropsWithoutRef<'div'> {}\n\nconst SidebarGroup = React.forwardRef<HTMLDivElement, SidebarGroupProps>(({ className, ...props }, forwardedRef) => (\n <div {...props} ref={forwardedRef} className={classNames('kui-BaseMenuGroup', 'kui-SidebarGroup', className)} />\n));\nSidebarGroup.displayName = 'Sidebar.Group';\n\ninterface SidebarGroupLabelProps extends React.ComponentPropsWithoutRef<'div'> {\n asChild?: boolean;\n}\n\nconst SidebarGroupLabel = React.forwardRef<HTMLDivElement, SidebarGroupLabelProps>(({ asChild = false, className, ...props }, forwardedRef) => {\n const Comp = asChild ? Slot : 'div';\n\n return <Comp {...props} ref={forwardedRef} className={classNames('kui-BaseMenuLabel', 'kui-SidebarGroupLabel', className)} />;\n});\nSidebarGroupLabel.displayName = 'Sidebar.GroupLabel';\n\ninterface SidebarGroupContentProps extends React.ComponentPropsWithoutRef<'div'> {}\n\nconst SidebarGroupContent = React.forwardRef<HTMLDivElement, SidebarGroupContentProps>(({ className, ...props }, forwardedRef) => (\n <div {...props} ref={forwardedRef} className={classNames('kui-SidebarGroupContent', className)} />\n));\nSidebarGroupContent.displayName = 'Sidebar.GroupContent';\n\n// Search component: inline input in expanded, popover trigger in thin\ninterface SidebarSearchProps extends React.ComponentPropsWithoutRef<'div'> {\n value: string;\n onValueChange: (value: string) => void;\n placeholder?: string;\n children?: React.ReactNode;\n}\n\nconst SearchIcon = ({ className }: { className?: string }) => (\n <svg className={className} viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" y1=\"21\" x2=\"16.65\" y2=\"16.65\" />\n </svg>\n);\n\nconst ClearIcon = ({ className }: { className?: string }) => (\n <svg className={className} width=\"14\" height=\"14\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden=\"true\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\" />\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\" />\n </svg>\n);\n\nconst SidebarSearch = React.forwardRef<HTMLDivElement, SidebarSearchProps>(\n ({ value, onValueChange, placeholder = 'Search...', children, className, ...props }, forwardedRef) => {\n const visual = useSidebarVisual();\n const isThin = visual?.presentation === 'thin';\n const inputRef = React.useRef<HTMLInputElement>(null);\n const popoverRef = React.useRef<HTMLDivElement>(null);\n const searchId = React.useId();\n const resultsId = `${searchId}-results`;\n\n // Stable refs for values used in callbacks \u2014 avoids recreating handlers on every keystroke\n const valueRef = React.useRef(value);\n valueRef.current = value;\n const onValueChangeRef = React.useRef(onValueChange);\n onValueChangeRef.current = onValueChange;\n\n // Derive a clean aria-label from placeholder (strip trailing dots/ellipsis)\n const searchLabel = placeholder.replace(/\\.+$/, '');\n\n const handleKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLInputElement>) => {\n if (e.key === 'Escape' && valueRef.current) {\n e.preventDefault();\n e.stopPropagation();\n onValueChangeRef.current('');\n inputRef.current?.focus();\n }\n },\n [],\n );\n\n // Arrow key navigation within the popover (input \u2194 results)\n const handlePopoverKeyDown = React.useCallback(\n (e: React.KeyboardEvent<HTMLDivElement>) => {\n const container = popoverRef.current;\n if (!container) return;\n\n const resultsGroup = container.querySelector('[role=\"group\"]');\n if (!resultsGroup) return;\n\n const items = Array.from(\n resultsGroup.querySelectorAll<HTMLElement>('a, button'),\n );\n if (items.length === 0) return;\n\n const active = document.activeElement as HTMLElement;\n const isOnInput = active === inputRef.current;\n const currentIndex = items.indexOf(active);\n\n // Typing while a result is focused \u2192 redirect focus to input\n if (\n e.key.length === 1 &&\n !e.ctrlKey &&\n !e.metaKey &&\n !e.altKey &&\n !isOnInput &&\n currentIndex !== -1\n ) {\n inputRef.current?.focus();\n return;\n }\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault();\n if (isOnInput || currentIndex === -1) {\n items[0]?.focus();\n } else if (currentIndex < items.length - 1) {\n items[currentIndex + 1]?.focus();\n }\n break;\n }\n case 'ArrowUp': {\n e.preventDefault();\n if (currentIndex <= 0) {\n inputRef.current?.focus();\n } else {\n items[currentIndex - 1]?.focus();\n }\n break;\n }\n case 'Home': {\n // Only intercept when focused on a result, not the input (where Home moves cursor)\n if (!isOnInput) {\n e.preventDefault();\n items[0]?.focus();\n }\n break;\n }\n case 'End': {\n if (!isOnInput) {\n e.preventDefault();\n items[items.length - 1]?.focus();\n }\n break;\n }\n }\n },\n [],\n );\n\n if (isThin) {\n return (\n <div {...props} ref={forwardedRef} className={classNames('kui-SidebarSearch', 'kui-SidebarSearch--thin', className)}>\n <Popover.Root>\n <Popover.Trigger>\n <button\n type=\"button\"\n className={classNames('kui-reset', 'kui-BaseMenuItem', 'kui-SidebarMenuButton', 'kui-SidebarSearchTrigger')}\n aria-label={searchLabel}\n >\n <span className=\"kui-SidebarMenuIconWrapper\">\n <SearchIcon />\n </span>\n <span className=\"kui-SidebarMenuLabel\">Search</span>\n </button>\n </Popover.Trigger>\n <Popover.Content side=\"right\" align=\"start\" size=\"2\" width=\"280px\" aria-label={searchLabel}>\n {/* eslint-disable-next-line jsx-a11y/no-noninteractive-element-interactions -- keyDown manages arrow-key navigation between input and results, which is accessibility-enhancing */}\n <div\n ref={popoverRef}\n className=\"kui-SidebarSearchPopover\"\n role=\"search\"\n onKeyDown={handlePopoverKeyDown}\n >\n <div className=\"kui-SidebarSearchInputWrapper\">\n <SearchIcon className=\"kui-SidebarSearchIcon\" />\n <input\n ref={inputRef}\n type=\"search\"\n className=\"kui-SidebarSearchInput\"\n value={value}\n onChange={(e) => onValueChange(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n aria-label={searchLabel}\n aria-controls={children ? resultsId : undefined}\n // eslint-disable-next-line jsx-a11y/no-autofocus -- intentional: popover opens on user action, focusing the input is expected UX\n autoFocus\n />\n {value && (\n <button\n type=\"button\"\n className=\"kui-reset kui-SidebarSearchClear\"\n onClick={() => {\n onValueChange('');\n inputRef.current?.focus();\n }}\n aria-label=\"Clear search\"\n >\n <ClearIcon />\n </button>\n )}\n </div>\n {children && (\n <div id={resultsId} role=\"group\" aria-label=\"Search results\">\n {children}\n </div>\n )}\n </div>\n </Popover.Content>\n </Popover.Root>\n </div>\n );\n }\n\n // Expanded mode: inline input\n return (\n <div {...props} ref={forwardedRef} className={classNames('kui-SidebarSearch', 'kui-SidebarSearch--expanded', 'kui-ShellPaneChrome', `kui-r-size-${visual?.size ?? '2'}`, className)} role=\"search\">\n <div className=\"kui-SidebarSearchInputWrapper\">\n <SearchIcon className=\"kui-SidebarSearchIcon\" />\n <input\n ref={inputRef}\n type=\"search\"\n className=\"kui-SidebarSearchInput\"\n value={value}\n onChange={(e) => onValueChange(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={placeholder}\n aria-label={searchLabel}\n />\n {value && (\n <button\n type=\"button\"\n className=\"kui-reset kui-SidebarSearchClear\"\n onClick={() => {\n onValueChange('');\n inputRef.current?.focus();\n }}\n aria-label=\"Clear search\"\n >\n <ClearIcon />\n </button>\n )}\n </div>\n </div>\n );\n },\n);\nSidebarSearch.displayName = 'Sidebar.Search';\n\n// Export all components following shadcn's pattern\nexport {\n SidebarSeparator as Separator,\n SidebarMenu as Menu,\n SidebarMenuItem as MenuItem,\n SidebarMenuButton as MenuButton,\n SidebarMenuSub as MenuSub,\n SidebarMenuSubTrigger as MenuSubTrigger,\n SidebarMenuSubContent as MenuSubContent,\n SidebarGroup as Group,\n SidebarGroupLabel as GroupLabel,\n SidebarGroupContent as GroupContent,\n SidebarSearch as Search,\n};\n\nexport type { BadgeConfig };\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["sidebar_exports", "__export", "SidebarGroup", "SidebarGroupContent", "SidebarGroupLabel", "SidebarMenu", "SidebarMenuButton", "SidebarMenuItem", "SidebarMenuSub", "SidebarMenuSubContent", "SidebarMenuSubTrigger", "SidebarSearch", "SidebarSeparator", "React", "classNames", "Accordion", "SidebarSeparator", "className", "props", "forwardedRef", "Separator", "classNames", "SidebarMenu", "SidebarMenuItem", "separateIconsAndLabels", "node", "icons", "labels", "child", "el", "wrapTextNodes", "index", "newChildren", "SidebarMenuButton", "asChild", "isActive", "shortcut", "badge", "children", "onKeyDown", "visual", "useSidebarVisual", "sidebarSize", "isThinMode", "Comp", "Slot", "handleKeyDown", "event", "scope", "buttons", "next", "processedChildren", "slottedChildren", "onlyChild", "originalInnerChildren", "enhancedInnerChildren", "Chip", "Kbd", "label", "SidebarSubMenuModeContext", "SidebarMenuSub", "defaultOpen", "DropdownMenuRoot", "SidebarMenuSubTrigger", "DropdownMenuTrigger", "ThickChevronRightIcon", "SidebarMenuSubContent", "unwrapMenuButton", "n", "i", "normalized", "itemChildren", "content", "DropdownMenuItem", "DropdownMenuContent", "DropdownMenuGroup", "SidebarGroup", "SidebarGroupLabel", "SidebarGroupContent", "SearchIcon", "ClearIcon", "SidebarSearch", "value", "onValueChange", "placeholder", "isThin", "inputRef", "popoverRef", "resultsId", "valueRef", "onValueChangeRef", "searchLabel", "e", "handlePopoverKeyDown", "container", "resultsGroup", "items", "active", "isOnInput", "currentIndex", "PopoverRoot", "PopoverTrigger", "PopoverContent"]
|
|
7
|
-
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as P}from"./chunk-MPTTUBFU.js";import{a as s}from"./chunk-MJJ7XDIP.js";import{c as u}from"./chunk-PPZY7PJA.js";import{a as d}from"./chunk-4P6TKZCA.js";import{a as f}from"./chunk-DFGY2NZB.js";import{e as A}from"./chunk-3YLYGKFB.js";import{a as c}from"./chunk-ELAW7ZUG.js";import{a as L}from"./chunk-OS3FCYZY.js";var B={};L(B,{Action:()=>h,Cancel:()=>N,Content:()=>v,Description:()=>E,Root:()=>y,Title:()=>T,Trigger:()=>R});import*as e from"react";import O from"classnames";import{AlertDialog as l}from"radix-ui";var y=t=>e.createElement(l.Root,{...t});y.displayName="AlertDialog.Root";var R=e.forwardRef(({children:t,...o},i)=>e.createElement(l.Trigger,{...o,ref:i,asChild:!0},s(t)));R.displayName="AlertDialog.Trigger";var{align:S,...C}=f,z={align:S},v=e.forwardRef(({align:t,...o},i)=>{let x=A(o,C.size),{className:k}=c({align:t},z),{className:b,forceMount:w,container:H,...M}=c(x,C),g=e.useRef(null),W=e.useMemo(()=>r=>{g.current=r,typeof i=="function"?i(r):i&&(i.current=r)},[i]);return e.useEffect(()=>{if(typeof window>"u")return;let r=g.current;if(!r)return;let a=r.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])');if(a.length===0)return;let p=a[0],m=a[a.length-1],D=n=>{n.key==="Tab"&&(n.shiftKey?document.activeElement===p&&(n.preventDefault(),m.focus()):document.activeElement===m&&(n.preventDefault(),p.focus()))};return r.addEventListener("keydown",D),p.focus(),()=>{r.removeEventListener("keydown",D)}},[]),e.createElement(l.Portal,{container:H,forceMount:w},e.createElement(u,{asChild:!0},e.createElement(l.Overlay,{className:"kui-BaseDialogOverlay kui-AlertDialogOverlay"},e.createElement("div",{className:"kui-BaseDialogScroll kui-AlertDialogScroll"},e.createElement("div",{className:`kui-BaseDialogScrollPadding kui-AlertDialogScrollPadding ${k}`},e.createElement(l.Content,{...M,ref:W,className:O("kui-BaseDialogContent","kui-AlertDialogContent",b),tabIndex:-1,role:"alertdialog","aria-modal":"true","aria-describedby":"alert-dialog-description",onCloseAutoFocus:r=>{r.preventDefault(),document.body.style.pointerEvents=""}}),e.createElement("div",{"aria-live":"assertive","aria-atomic":"true",className:"kui-sr-only",id:"alert-dialog-announcement"}))))))});v.displayName="AlertDialog.Content";var T=e.forwardRef((t,o)=>e.createElement(l.Title,{asChild:!0},e.createElement(P,{size:"5",trim:"start",...t,asChild:!1,ref:o})));T.displayName="AlertDialog.Title";var E=e.forwardRef((t,o)=>e.createElement(l.Description,{asChild:!0},e.createElement(d,{as:"p",size:"3",...t,asChild:!1,ref:o})));E.displayName="AlertDialog.Description";var h=e.forwardRef(({children:t,...o},i)=>e.createElement(l.Action,{...o,ref:i,asChild:!0},s(t)));h.displayName="AlertDialog.Action";var N=e.forwardRef(({children:t,...o},i)=>e.createElement(l.Cancel,{...o,ref:i,asChild:!0},s(t)));N.displayName="AlertDialog.Cancel";export{y as a,R as b,v as c,T as d,E as e,h as f,N as g,B as h};
|
|
2
|
-
//# sourceMappingURL=chunk-7ESWH773.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/components/alert-dialog.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nimport classNames from 'classnames';\nimport { AlertDialog as AlertDialogPrimitive } from 'radix-ui';\n\nimport { alertDialogContentPropDefs } from './alert-dialog.props.js';\nimport { Heading } from './heading.js';\nimport { Text } from './text.js';\nimport { Theme } from './theme.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport { useThemeSizeProps } from '../helpers/theme-size.js';\nimport { requireReactElement } from '../helpers/require-react-element.js';\n\nimport type { AlertDialogContentOwnProps } from './alert-dialog.props.js';\nimport type {\n ComponentPropsWithout,\n RemovedProps,\n ComponentPropsAs,\n} from '../helpers/component-props.js';\n\ninterface AlertDialogRootProps\n extends React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Root> {}\nconst AlertDialogRoot: React.FC<AlertDialogRootProps> = (props) => (\n <AlertDialogPrimitive.Root {...props} />\n);\nAlertDialogRoot.displayName = 'AlertDialog.Root';\n\ntype AlertDialogTriggerElement = React.ElementRef<typeof AlertDialogPrimitive.Trigger>;\ninterface AlertDialogTriggerProps\n extends ComponentPropsWithout<typeof AlertDialogPrimitive.Trigger, RemovedProps> {}\nconst AlertDialogTrigger = React.forwardRef<AlertDialogTriggerElement, AlertDialogTriggerProps>(\n ({ children, ...props }, forwardedRef) => (\n <AlertDialogPrimitive.Trigger {...props} ref={forwardedRef} asChild>\n {requireReactElement(children)}\n </AlertDialogPrimitive.Trigger>\n ),\n);\nAlertDialogTrigger.displayName = 'AlertDialog.Trigger';\n\n// Split once at module scope. `extractProps` memoises on the identity of the\n// prop def objects it is handed, so rebuilding these per render would recompile\n// them on every render.\nconst {\n align: alignPropDef,\n ...contentPropDefs\n} = alertDialogContentPropDefs;\nconst alignPropDefs = { align: alignPropDef };\n\ntype AlertDialogContentElement = React.ElementRef<typeof AlertDialogPrimitive.Content>;\ninterface AlertDialogContentProps\n extends ComponentPropsWithout<typeof AlertDialogPrimitive.Content, RemovedProps>,\n AlertDialogContentOwnProps {\n container?: React.ComponentPropsWithoutRef<typeof AlertDialogPrimitive.Portal>['container'];\n}\nconst AlertDialogContent = React.forwardRef<AlertDialogContentElement, AlertDialogContentProps>(\n ({ align, ...ownProps }, forwardedRef) => {\n const props = useThemeSizeProps(ownProps, contentPropDefs.size);\n const { className: alignClassName } = extractProps({ align }, alignPropDefs);\n\n const {\n className,\n forceMount,\n container,\n ...contentProps\n } = extractProps(props, contentPropDefs);\n\n // Focus management\n const contentRef = React.useRef<HTMLDivElement>(null);\n const combinedRef = React.useMemo(\n () => (node: HTMLDivElement | null) => {\n contentRef.current = node;\n if (typeof forwardedRef === 'function') {\n forwardedRef(node);\n } else if (forwardedRef) {\n forwardedRef.current = node;\n }\n },\n [forwardedRef],\n );\n\n // Focus trap effect\n React.useEffect(() => {\n // SSR safety - only run on client\n if (typeof window === 'undefined') return;\n\n const content = contentRef.current;\n if (!content) return;\n\n const focusableElements = content.querySelectorAll(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])',\n );\n\n if (focusableElements.length === 0) return;\n\n const firstElement = focusableElements[0] as HTMLElement;\n const lastElement = focusableElements[focusableElements.length - 1] as HTMLElement;\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Tab') {\n if (event.shiftKey) {\n if (document.activeElement === firstElement) {\n event.preventDefault();\n lastElement.focus();\n }\n } else {\n if (document.activeElement === lastElement) {\n event.preventDefault();\n firstElement.focus();\n }\n }\n }\n };\n\n content.addEventListener('keydown', handleKeyDown);\n\n // Focus first element when dialog opens\n firstElement.focus();\n\n return () => {\n content.removeEventListener('keydown', handleKeyDown);\n };\n }, []);\n\n return (\n <AlertDialogPrimitive.Portal container={container} forceMount={forceMount}>\n <Theme asChild>\n <AlertDialogPrimitive.Overlay className=\"kui-BaseDialogOverlay kui-AlertDialogOverlay\">\n <div className=\"kui-BaseDialogScroll kui-AlertDialogScroll\">\n <div\n className={`kui-BaseDialogScrollPadding kui-AlertDialogScrollPadding ${alignClassName}`}\n >\n <AlertDialogPrimitive.Content\n {...contentProps}\n ref={combinedRef}\n className={classNames('kui-BaseDialogContent', 'kui-AlertDialogContent', className)}\n tabIndex={-1}\n role=\"alertdialog\"\n aria-modal=\"true\"\n aria-describedby=\"alert-dialog-description\"\n onCloseAutoFocus={(event) => {\n // Prevent default focus behavior\n event.preventDefault();\n // Restore pointer-events to body (Radix UI fix for issue #1241)\n document.body.style.pointerEvents = '';\n }}\n />\n {/* ARIA live region for screen reader announcements */}\n <div\n aria-live=\"assertive\"\n aria-atomic=\"true\"\n className=\"kui-sr-only\"\n id=\"alert-dialog-announcement\"\n />\n </div>\n </div>\n </AlertDialogPrimitive.Overlay>\n </Theme>\n </AlertDialogPrimitive.Portal>\n );\n },\n);\nAlertDialogContent.displayName = 'AlertDialog.Content';\n\ntype AlertDialogTitleElement = React.ElementRef<typeof Heading>;\ntype AlertDialogTitleProps = ComponentPropsWithout<typeof Heading, 'asChild'>;\nconst AlertDialogTitle = React.forwardRef<AlertDialogTitleElement, AlertDialogTitleProps>(\n (props, forwardedRef) => (\n <AlertDialogPrimitive.Title asChild>\n <Heading size=\"5\" trim=\"start\" {...props} asChild={false} ref={forwardedRef} />\n </AlertDialogPrimitive.Title>\n ),\n);\nAlertDialogTitle.displayName = 'AlertDialog.Title';\n\ntype AlertDialogDescriptionElement = HTMLParagraphElement;\ntype AlertDialogDescriptionProps = ComponentPropsAs<typeof Text, 'p'>;\nconst AlertDialogDescription = React.forwardRef<\n AlertDialogDescriptionElement,\n AlertDialogDescriptionProps\n>((props, forwardedRef) => (\n <AlertDialogPrimitive.Description asChild>\n <Text as=\"p\" size=\"3\" {...props} asChild={false} ref={forwardedRef} />\n </AlertDialogPrimitive.Description>\n));\nAlertDialogDescription.displayName = 'AlertDialog.Description';\n\ntype AlertDialogActionElement = React.ElementRef<typeof AlertDialogPrimitive.Action>;\ninterface AlertDialogActionProps\n extends ComponentPropsWithout<typeof AlertDialogPrimitive.Action, RemovedProps> {}\nconst AlertDialogAction = React.forwardRef<AlertDialogActionElement, AlertDialogActionProps>(\n ({ children, ...props }, forwardedRef) => (\n <AlertDialogPrimitive.Action {...props} ref={forwardedRef} asChild>\n {requireReactElement(children)}\n </AlertDialogPrimitive.Action>\n ),\n);\nAlertDialogAction.displayName = 'AlertDialog.Action';\n\ntype AlertDialogCancelElement = React.ElementRef<typeof AlertDialogPrimitive.Cancel>;\ninterface AlertDialogCancelProps\n extends ComponentPropsWithout<typeof AlertDialogPrimitive.Cancel, RemovedProps> {}\nconst AlertDialogCancel = React.forwardRef<AlertDialogCancelElement, AlertDialogCancelProps>(\n ({ children, ...props }, forwardedRef) => (\n <AlertDialogPrimitive.Cancel {...props} ref={forwardedRef} asChild>\n {requireReactElement(children)}\n </AlertDialogPrimitive.Cancel>\n ),\n);\nAlertDialogCancel.displayName = 'AlertDialog.Cancel';\n\nexport {\n AlertDialogRoot as Root,\n AlertDialogTrigger as Trigger,\n AlertDialogContent as Content,\n AlertDialogTitle as Title,\n AlertDialogDescription as Description,\n AlertDialogAction as Action,\n AlertDialogCancel as Cancel,\n};\n\nexport type {\n AlertDialogRootProps as RootProps,\n AlertDialogTriggerProps as TriggerProps,\n AlertDialogContentProps as ContentProps,\n AlertDialogTitleProps as TitleProps,\n AlertDialogDescriptionProps as DescriptionProps,\n AlertDialogActionProps as ActionProps,\n AlertDialogCancelProps as CancelProps,\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["alert_dialog_exports", "__export", "AlertDialogAction", "AlertDialogCancel", "AlertDialogContent", "AlertDialogDescription", "AlertDialogRoot", "AlertDialogTitle", "AlertDialogTrigger", "React", "classNames", "AlertDialogPrimitive", "AlertDialogRoot", "props", "AlertDialogPrimitive", "AlertDialogTrigger", "children", "forwardedRef", "requireReactElement", "alignPropDef", "contentPropDefs", "alertDialogContentPropDefs", "alignPropDefs", "AlertDialogContent", "align", "ownProps", "useThemeSizeProps", "alignClassName", "extractProps", "className", "forceMount", "container", "contentProps", "contentRef", "combinedRef", "node", "content", "focusableElements", "firstElement", "lastElement", "handleKeyDown", "event", "Theme", "classNames", "AlertDialogTitle", "Heading", "AlertDialogDescription", "Text", "AlertDialogAction", "AlertDialogCancel"]
|
|
7
|
-
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as t}from"./chunk-SKOYHBIE.js";import{a as s}from"./chunk-ELAW7ZUG.js";import{a as o}from"./chunk-E23RKOQJ.js";import*as e from"react";import g from"classnames";import{Progress as p}from"radix-ui";var l=e.forwardRef((i,m)=>{let{className:a,style:P,color:n,radius:f,duration:d,...r}=s(i,t);return e.createElement(p.Root,{"data-accent-color":n,"data-radius":f,ref:m,className:g("kui-ProgressRoot",a),style:o({"--progress-duration":"value"in r?void 0:d,"--progress-value":"value"in r?r.value:void 0,"--progress-max":"max"in r?r.max:void 0},P),...r,asChild:!1},e.createElement(p.Indicator,{className:"kui-ProgressIndicator"}))});l.displayName="Progress";export{l as a};
|
|
2
|
-
//# sourceMappingURL=chunk-7SS4UUJH.js.map
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as S}from"./chunk-R4XJNQX5.js";import*as e from"react";import d from"classnames";var P=e.createContext(null);function f(){return e.useContext(P)}var c=e.createContext("2");function h({children:t,presentation:a}){let n=e.useContext(c),o=e.useMemo(()=>({size:n,menuVariant:"soft",presentation:a}),[n,a]);return e.createElement(P.Provider,{value:o},t)}function u(){let t=f(),a=e.useContext(c),n=t?.size??a,o=t?.menuVariant??"soft";return["kui-ShellPaneChrome",`kui-r-size-${n}`,`kui-menu-variant-${o}`]}var p={1:"2",2:"3",3:"4",4:"4"},s=e.createContext(null);function b(){return e.useContext(s)}function m(){let t=f(),a=e.useContext(c);return p[t?.size??a]}var v=e.forwardRef(({className:t,float:a,children:n,...o},r)=>{let i=u(),l=m();return e.createElement("div",{...o,ref:r,"data-float":a||void 0,className:d("kui-ShellPaneHeader","kui-SidebarHeader","kui-SidebarHeader--container",...i,t)},e.createElement(s.Provider,{value:l},n))});v.displayName="Shell.PaneHeader";var C=e.forwardRef(({className:t,float:a,children:n,...o},r)=>{let i=u(),l=m();return e.createElement("div",{...o,ref:r,"data-float":a||void 0,className:d("kui-ShellPaneFooter","kui-SidebarFooter","kui-SidebarFooter--container",...i,t)},e.createElement(s.Provider,{value:l},n))});C.displayName="Shell.PaneFooter";var x=e.forwardRef(({className:t,children:a,fade:n=!1,...o},r)=>{let i=u();return e.createElement(S,{type:"hover",fade:n,className:"kui-ShellScroll"},e.createElement("div",{...o,ref:r,className:d("kui-BaseMenuContent","kui-SidebarContent",...i,t)},e.createElement(s.Provider,{value:null},e.createElement("div",{className:"kui-BaseMenuViewport"},a))))});x.displayName="Shell.Scroll";export{P as a,f as b,c,h as d,p as e,b as f,v as g,C as h,x as i};
|
|
2
|
-
//# sourceMappingURL=chunk-AB3QCCUM.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/components/_internal/pane-chrome.tsx"],
|
|
4
|
-
"sourcesContent": ["'use client';\n\n/**\n * A pane's own chrome: a header row, a scrolling region and a footer row.\n *\n * Shell.Sidebar and Shell.Panel render these as `Shell.PaneHeader`, `Shell.Scroll` and\n * `Shell.PaneFooter`. The pane renders anything; with these parts it is the presentation, so\n * Sidebar's menu parts work inside it with no `Sidebar.Root`. The index comes from the nearest\n * Shell (`Shell.Root size`), or from a deprecated `Sidebar.Root` that still wraps them.\n */\n\nimport * as React from 'react';\nimport classNames from 'classnames';\n\nimport { ScrollArea } from '../scroll-area.js';\n\ntype PaneSize = '1' | '2' | '3';\n\ntype SidebarVisualContextValue = {\n size: PaneSize;\n menuVariant: 'solid' | 'soft';\n presentation?: 'thin' | 'expanded';\n color?: string;\n};\n\n/** Size, menu highlight and presentation for the Sidebar parts. Internal: not exported. */\nconst SidebarVisualContext = React.createContext<SidebarVisualContextValue | null>(null);\n\nfunction useSidebarVisual() {\n return React.useContext(SidebarVisualContext);\n}\n\n/** The Shell's index. `Shell.Root size` sets it; panes hand it to their chrome. */\nconst ShellSizeContext = React.createContext<PaneSize>('2');\n\n/**\n * Gives a Shell pane's children the Shell's index, so Sidebar parts size themselves. In a Rail\n * the rows are `thin`: icon tiles with a small label, sub-menus as dropdowns.\n */\nfunction PaneChromeScope({ children, presentation }: { children: React.ReactNode; presentation?: 'thin' }) {\n const size = React.useContext(ShellSizeContext);\n const value = React.useMemo<SidebarVisualContextValue>(() => ({ size, menuVariant: 'soft', presentation }), [size, presentation]);\n return <SidebarVisualContext.Provider value={value}>{children}</SidebarVisualContext.Provider>;\n}\n\nfunction useChromeClasses() {\n const visual = useSidebarVisual();\n // A pane with no scope (Inspector, Bottom) still takes the Shell's index.\n const shellSize = React.useContext(ShellSizeContext);\n const size = visual?.size ?? shellSize;\n const menuVariant = visual?.menuVariant ?? 'soft';\n return ['kui-ShellPaneChrome', `kui-r-size-${size}`, `kui-menu-variant-${menuVariant}`];\n}\n\ntype BandSize = '1' | '2' | '3' | '4';\n\n/**\n * The index a Toolbar in a pane's header or footer rests at when it states none: one step above\n * the Shell's, so the band reads as chrome over the rows (v2 BAND_STEP). 4 has no step above.\n */\nconst BAND_STEP = { '1': '2', '2': '3', '3': '4', '4': '4' } as const satisfies Record<BandSize, BandSize>;\n\n/** Set by `Shell.PaneHeader` and `Shell.PaneFooter`; read by Toolbar as its fallback size. Null elsewhere. */\nconst PaneBandSizeContext = React.createContext<BandSize | null>(null);\n\nfunction usePaneBandSize() {\n return React.useContext(PaneBandSizeContext);\n}\n\nfunction useBandSize(): BandSize {\n const visual = useSidebarVisual();\n const shellSize = React.useContext(ShellSizeContext);\n return BAND_STEP[visual?.size ?? shellSize];\n}\n\ninterface PaneHeaderProps extends React.ComponentPropsWithoutRef<'div'> {\n /**\n * Floats the row over the top of `Shell.Scroll`, so the list scrolls behind it. The list\n * starts below the row, and `Shell.Scroll fade` fades it out under the row. The row paints\n * nothing and lets clicks through between its controls; a `Toolbar backdrop` in it keeps\n * the controls readable.\n */\n float?: boolean;\n}\n\n/** A pane's header row, pinned above its scrolling region. */\nconst PaneHeader = React.forwardRef<HTMLDivElement, PaneHeaderProps>(({ className, float, children, ...props }, forwardedRef) => {\n const chrome = useChromeClasses();\n const band = useBandSize();\n return (\n <div\n {...props}\n ref={forwardedRef}\n data-float={float || undefined}\n className={classNames('kui-ShellPaneHeader', 'kui-SidebarHeader', 'kui-SidebarHeader--container', ...chrome, className)}\n >\n <PaneBandSizeContext.Provider value={band}>{children}</PaneBandSizeContext.Provider>\n </div>\n );\n});\nPaneHeader.displayName = 'Shell.PaneHeader';\n\ninterface PaneFooterProps extends React.ComponentPropsWithoutRef<'div'> {\n /** Floats the row over the bottom of `Shell.Scroll`, the way `Shell.PaneHeader float` does at the top. */\n float?: boolean;\n}\n\n/** A pane's footer row, pinned below its scrolling region. */\nconst PaneFooter = React.forwardRef<HTMLDivElement, PaneFooterProps>(({ className, float, children, ...props }, forwardedRef) => {\n const chrome = useChromeClasses();\n const band = useBandSize();\n return (\n <div\n {...props}\n ref={forwardedRef}\n data-float={float || undefined}\n className={classNames('kui-ShellPaneFooter', 'kui-SidebarFooter', 'kui-SidebarFooter--container', ...chrome, className)}\n >\n <PaneBandSizeContext.Provider value={band}>{children}</PaneBandSizeContext.Provider>\n </div>\n );\n});\nPaneFooter.displayName = 'Shell.PaneFooter';\n\ninterface ScrollProps extends React.ComponentPropsWithoutRef<'div'> {\n /** Fades the list out toward an edge with more past it, and under a floating header or footer. */\n fade?: boolean;\n}\n\n/**\n * The one region of a pane that scrolls; it takes the room the header and footer leave.\n * It is not a landmark: for navigation, pass `role=\"navigation\"` and an `aria-label`.\n */\nconst Scroll = React.forwardRef<HTMLDivElement, ScrollProps>(({ className, children, fade = false, ...props }, forwardedRef) => {\n const chrome = useChromeClasses();\n return (\n <ScrollArea type=\"hover\" fade={fade} className=\"kui-ShellScroll\">\n <div {...props} ref={forwardedRef} className={classNames('kui-BaseMenuContent', 'kui-SidebarContent', ...chrome, className)}>\n {/* A header's band does not reach a Toolbar in the scrolling list. */}\n <PaneBandSizeContext.Provider value={null}>\n <div className=\"kui-BaseMenuViewport\">{children}</div>\n </PaneBandSizeContext.Provider>\n </div>\n </ScrollArea>\n );\n});\nScroll.displayName = 'Shell.Scroll';\n\nexport { SidebarVisualContext, useSidebarVisual, ShellSizeContext, PaneChromeScope, PaneHeader, PaneFooter, Scroll, BAND_STEP, usePaneBandSize };\nexport type { SidebarVisualContextValue, PaneSize, BandSize, PaneHeaderProps, PaneFooterProps, ScrollProps };\n"],
|
|
5
|
-
"mappings": "wCAWA,UAAYA,MAAW,QACvB,OAAOC,MAAgB,aAcvB,IAAMC,EAA6B,gBAAgD,IAAI,EAEvF,SAASC,GAAmB,CAC1B,OAAa,aAAWD,CAAoB,CAC9C,CAGA,IAAME,EAAyB,gBAAwB,GAAG,EAM1D,SAASC,EAAgB,CAAE,SAAAC,EAAU,aAAAC,CAAa,EAAyD,CACzG,IAAMC,EAAa,aAAWJ,CAAgB,EACxCK,EAAc,UAAmC,KAAO,CAAE,KAAAD,EAAM,YAAa,OAAQ,aAAAD,CAAa,GAAI,CAACC,EAAMD,CAAY,CAAC,EAChI,OAAO,gBAACL,EAAqB,SAArB,CAA8B,MAAOO,GAAQH,CAAS,CAChE,CAEA,SAASI,GAAmB,CAC1B,IAAMC,EAASR,EAAiB,EAE1BS,EAAkB,aAAWR,CAAgB,EAC7CI,EAAOG,GAAQ,MAAQC,EACvBC,EAAcF,GAAQ,aAAe,OAC3C,MAAO,CAAC,sBAAuB,cAAcH,CAAI,GAAI,oBAAoBK,CAAW,EAAE,CACxF,CAQA,IAAMC,EAAY,CAAE,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,GAAI,EAGrDC,EAA4B,gBAA+B,IAAI,EAErE,SAASC,GAAkB,CACzB,OAAa,aAAWD,CAAmB,CAC7C,CAEA,SAASE,GAAwB,CAC/B,IAAMN,EAASR,EAAiB,EAC1BS,EAAkB,aAAWR,CAAgB,EACnD,OAAOU,EAAUH,GAAQ,MAAQC,CAAS,CAC5C,CAaA,IAAMM,EAAmB,aAA4C,CAAC,CAAE,UAAAC,EAAW,MAAAC,EAAO,SAAAd,EAAU,GAAGe,CAAM,EAAGC,IAAiB,CAC/H,IAAMC,EAASb,EAAiB,EAC1Bc,EAAOP,EAAY,EACzB,OACE,gBAAC,OACE,GAAGI,EACJ,IAAKC,EACL,aAAYF,GAAS,OACrB,UAAWK,EAAW,sBAAuB,oBAAqB,+BAAgC,GAAGF,EAAQJ,CAAS,GAEtH,gBAACJ,EAAoB,SAApB,CAA6B,MAAOS,GAAOlB,CAAS,CACvD,CAEJ,CAAC,EACDY,EAAW,YAAc,mBAQzB,IAAMQ,EAAmB,aAA4C,CAAC,CAAE,UAAAP,EAAW,MAAAC,EAAO,SAAAd,EAAU,GAAGe,CAAM,EAAGC,IAAiB,CAC/H,IAAMC,EAASb,EAAiB,EAC1Bc,EAAOP,EAAY,EACzB,OACE,gBAAC,OACE,GAAGI,EACJ,IAAKC,EACL,aAAYF,GAAS,OACrB,UAAWK,EAAW,sBAAuB,oBAAqB,+BAAgC,GAAGF,EAAQJ,CAAS,GAEtH,gBAACJ,EAAoB,SAApB,CAA6B,MAAOS,GAAOlB,CAAS,CACvD,CAEJ,CAAC,EACDoB,EAAW,YAAc,mBAWzB,IAAMC,EAAe,aAAwC,CAAC,CAAE,UAAAR,EAAW,SAAAb,EAAU,KAAAsB,EAAO,GAAO,GAAGP,CAAM,EAAGC,IAAiB,CAC9H,IAAMC,EAASb,EAAiB,EAChC,OACE,gBAACmB,EAAA,CAAW,KAAK,QAAQ,KAAMD,EAAM,UAAU,mBAC7C,gBAAC,OAAK,GAAGP,EAAO,IAAKC,EAAc,UAAWG,EAAW,sBAAuB,qBAAsB,GAAGF,EAAQJ,CAAS,GAExH,gBAACJ,EAAoB,SAApB,CAA6B,MAAO,MACnC,gBAAC,OAAI,UAAU,wBAAwBT,CAAS,CAClD,CACF,CACF,CAEJ,CAAC,EACDqB,EAAO,YAAc",
|
|
6
|
-
"names": ["React", "classNames", "SidebarVisualContext", "useSidebarVisual", "ShellSizeContext", "PaneChromeScope", "children", "presentation", "size", "value", "useChromeClasses", "visual", "shellSize", "menuVariant", "BAND_STEP", "PaneBandSizeContext", "usePaneBandSize", "useBandSize", "PaneHeader", "className", "float", "props", "forwardedRef", "chrome", "band", "classNames", "PaneFooter", "Scroll", "fade", "ScrollArea"]
|
|
7
|
-
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{b as S,d as D}from"./chunk-3KQE2PSJ.js";import*as e from"react";import E from"classnames";import{useVirtualizer as F}from"@tanstack/react-virtual";var G=e.memo(function({label:a,isHighlighted:o,id:u,style:y,tabIndex:x,"data-highlighted":m,"data-index":p,onMouseEnter:f,onMouseLeave:v,onClick:h,onKeyDown:g}){return e.createElement("div",{id:u,role:"menuitem",className:E("kui-reset","kui-BaseMenuItem","kui-VirtualMenuItem"),style:y,tabIndex:x,"data-highlighted":m,"data-index":p,onMouseEnter:f,onMouseLeave:v,onClick:h,onKeyDown:g},a)},(n,a)=>!(n.label!==a.label||n["data-highlighted"]!==a["data-highlighted"]||n.style.height!==a.style.height||n.style.transform!==a.style.transform||n.tabIndex!==a.tabIndex||n.id!==a.id));function N({items:n,itemLabel:a,renderItem:o,size:u,estimatedItemSize:y,overscan:x=5,onSelect:m,className:p,style:f,"aria-label":v}){let h=e.useId(),g=e.useRef(null),[k,l]=e.useState(-1),{isInsideMenu:L,size:w,itemHeight:K}=D(),M=y??(u?S(u):K??S(w??"2"));if(!a&&!o)throw new Error("VirtualMenu requires either itemLabel or renderItem prop");let P=e.useMemo(()=>a?typeof a=="function"?a:t=>t[a]:null,[a]),c=e.useMemo(()=>n.length===0||k<0?-1:Math.min(k,n.length-1),[k,n.length]),$=e.useMemo(()=>typeof M=="function"?M:()=>M,[M]),I=F({count:n.length,getScrollElement:()=>g.current,estimateSize:$,overscan:x}),j=I.getVirtualItems(),R=e.useRef(n),b=e.useRef(m);R.current=n,b.current=m;let d=e.useRef(I.scrollToIndex);d.current=I.scrollToIndex;let T=e.useRef(c);T.current=c;let A=e.useCallback(t=>{let s=t.currentTarget.dataset.index;s!=null&&l(Number(s))},[]),B=e.useCallback(t=>{let s=t.currentTarget.dataset.index;if(s!=null){let r=Number(s),i=R.current;r>=0&&r<i.length&&b.current?.(i[r],r)}},[]),_=e.useCallback(()=>{},[]),q=e.useCallback(t=>{if(t.key==="Enter"||t.key===" "){t.preventDefault();let s=t.currentTarget.dataset.index;if(s!=null){let r=Number(s),i=R.current;r>=0&&r<i.length&&b.current?.(i[r],r)}}},[]),O=e.useCallback(t=>{let s=R.current,r=T.current;switch(t.key){case"ArrowDown":{t.preventDefault();let i=r<s.length-1?r+1:0;l(i),d.current(i,{align:"auto"});break}case"ArrowUp":{t.preventDefault();let i=r>0?r-1:s.length-1;l(i),d.current(i,{align:"auto"});break}case"Home":{t.preventDefault(),l(0),d.current(0,{align:"start"});break}case"End":{t.preventDefault();let i=s.length-1;l(i),d.current(i,{align:"end"});break}case"Enter":case" ":{t.preventDefault(),r>=0&&r<s.length&&b.current?.(s[r],r);break}case"Tab":{t.preventDefault();break}case"Escape":{t.currentTarget.blur();break}}},[]),H=e.useCallback(t=>`${h}-item-${t}`,[h]),U=e.useMemo(()=>({overflow:"auto",position:"relative",...f}),[f]),V=I.getTotalSize(),W=e.useMemo(()=>({height:`${V}px`,width:"100%",position:"relative"}),[V]);return e.createElement("div",{ref:g,role:L?"group":"menu","aria-label":v,"aria-activedescendant":c>=0?H(c):void 0,tabIndex:0,onKeyDown:O,className:E("kui-VirtualMenuRoot",p),style:U},e.createElement("div",{className:"kui-VirtualMenuViewport",style:W},j.map(t=>{let s=n[t.index],r=t.index,i=c===r,Y={height:t.size,transform:`translateY(${t.start}px)`},C={id:H(r),isHighlighted:i,style:Y,tabIndex:i?0:-1,"data-highlighted":i?!0:void 0,"data-index":r,onMouseEnter:A,onMouseLeave:_,onClick:B,onKeyDown:q};return o?e.createElement(o,{key:t.key,item:s,index:r,...C}):e.createElement(G,{key:t.key,label:P(s),...C})})))}N.displayName="VirtualMenu";var z=e.forwardRef(({className:n,children:a,...o},u)=>e.createElement("div",{ref:u,role:"menuitem",className:E("kui-reset","kui-BaseMenuItem","kui-VirtualMenuItem",n),...o},a));z.displayName="VirtualMenu.Item";var J=e.memo(z,(n,a)=>{let o=n.style,u=a.style;return!(o?.height!==u?.height||o?.transform!==u?.transform||n["data-highlighted"]!==a["data-highlighted"]||n.tabIndex!==a.tabIndex||n.id!==a.id||n.className!==a.className||n.children!==a.children)}),ee=Object.assign(N,{Item:J});export{ee as a};
|
|
2
|
-
//# sourceMappingURL=chunk-BEP4AH5V.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/components/virtual-menu.tsx"],
|
|
4
|
-
"sourcesContent": ["'use client';\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { useVirtualizer } from '@tanstack/react-virtual';\nimport { useMenuContext, getMenuItemHeight } from './_internal/menu-context.js';\n\nimport type { MenuSize } from './_internal/menu-context.js';\n\n/**\n * VirtualMenu - A virtualized menu component for rendering large lists efficiently.\n *\n * Uses TanStack Virtual to render only visible items.\n * Works inside any container (DropdownMenu.Content, Popover.Content, etc.)\n *\n * @example\n * // Simple usage with itemLabel\n * <VirtualMenu\n * items={items}\n * itemLabel={(item) => item.name}\n * onSelect={handleSelect}\n * />\n *\n * @example\n * // Custom rendering with renderItem\n * const UserItem = React.memo(({ item, ...props }) => (\n * <VirtualMenu.Item {...props}>\n * <Avatar src={item.avatar} />\n * {item.name}\n * </VirtualMenu.Item>\n * ));\n *\n * <VirtualMenu items={users} renderItem={UserItem} onSelect={handleSelect} />\n */\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** Props passed to custom renderItem components */\ninterface VirtualMenuRenderItemProps<T> {\n /** The item data */\n item: T;\n /** Index in the items array */\n index: number;\n /** Whether this item is currently highlighted */\n isHighlighted: boolean;\n /** Unique ID for accessibility */\n id: string;\n /** Positioning styles - must be applied */\n style: React.CSSProperties;\n /** Tab index for focus management */\n tabIndex: number;\n /** Data attribute for CSS styling */\n 'data-highlighted': true | undefined;\n /** Data attribute for event delegation */\n 'data-index': number;\n /** Mouse enter handler */\n onMouseEnter: (e: React.MouseEvent<HTMLElement>) => void;\n /** Mouse leave handler */\n onMouseLeave: () => void;\n /** Click handler */\n onClick: (e: React.MouseEvent<HTMLElement>) => void;\n /** Keyboard handler for Enter/Space activation */\n onKeyDown: (e: React.KeyboardEvent<HTMLElement>) => void;\n}\n\ninterface VirtualMenuProps<T> {\n /** Array of items to render */\n items: T[];\n /**\n * Simple label accessor for basic text items.\n * Can be a property key or a function.\n * @example\n * itemLabel=\"name\"\n * itemLabel={(item) => item.name}\n */\n itemLabel?: keyof T | ((item: T) => React.ReactNode);\n /**\n * Custom component for rendering items.\n * Must be memoized (React.memo) for optimal performance.\n * @example\n * const MyItem = React.memo(({ item, ...props }) => (\n * <VirtualMenu.Item {...props}>{item.name}</VirtualMenu.Item>\n * ));\n * <VirtualMenu items={items} renderItem={MyItem} />\n */\n renderItem?: React.ComponentType<VirtualMenuRenderItemProps<T>>;\n /**\n * Menu size - controls item height.\n * Automatically inherited from parent DropdownMenu.Content/ContextMenu.Content.\n * Only set manually when using VirtualMenu outside of a menu context.\n * @default '2' (or inherited from context)\n */\n size?: MenuSize;\n /**\n * Estimated height of each item in pixels.\n * Can be a number (same for all) or a function (per-item).\n * Usually not needed - height is automatically derived from size prop/context.\n * Use this only for custom item heights (e.g., variable height items).\n */\n estimatedItemSize?: number | ((index: number) => number);\n /** Number of items to render outside visible area */\n overscan?: number;\n /** Callback when an item is selected */\n onSelect?: (item: T, index: number) => void;\n /** Additional class name */\n className?: string;\n /** Additional styles */\n style?: React.CSSProperties;\n /** Accessible label for the menu */\n 'aria-label'?: string;\n}\n\n// ============================================================================\n// Internal Memoized Item Component\n// ============================================================================\n\ninterface SimpleItemProps {\n label: React.ReactNode;\n isHighlighted: boolean;\n id: string;\n style: React.CSSProperties;\n tabIndex: number;\n 'data-highlighted': true | undefined;\n 'data-index': number;\n onMouseEnter: (e: React.MouseEvent<HTMLElement>) => void;\n onMouseLeave: () => void;\n onClick: (e: React.MouseEvent<HTMLElement>) => void;\n onKeyDown: (e: React.KeyboardEvent<HTMLElement>) => void;\n}\n\nconst SimpleItem = React.memo(\n function SimpleItem({\n label,\n isHighlighted: _isHighlighted,\n id,\n style,\n tabIndex,\n 'data-highlighted': dataHighlighted,\n 'data-index': dataIndex,\n onMouseEnter,\n onMouseLeave,\n onClick,\n onKeyDown,\n }: SimpleItemProps) {\n return (\n <div\n id={id}\n role=\"menuitem\"\n className={classNames('kui-reset', 'kui-BaseMenuItem', 'kui-VirtualMenuItem')}\n style={style}\n tabIndex={tabIndex}\n data-highlighted={dataHighlighted}\n data-index={dataIndex}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onMouseLeave}\n onClick={onClick}\n onKeyDown={onKeyDown}\n >\n {label}\n </div>\n );\n },\n (prev, next) => {\n // Custom comparison - only re-render if these change\n if (prev.label !== next.label) return false;\n if (prev['data-highlighted'] !== next['data-highlighted']) return false;\n if (prev.style.height !== next.style.height) return false;\n if (prev.style.transform !== next.style.transform) return false;\n if (prev.tabIndex !== next.tabIndex) return false;\n if (prev.id !== next.id) return false;\n // Event handlers are stable, skip comparison\n return true;\n },\n);\n\n// ============================================================================\n// VirtualMenu Component\n// ============================================================================\n\nfunction VirtualMenuRoot<T>({\n items,\n itemLabel,\n renderItem: RenderItem,\n size: sizeProp,\n estimatedItemSize: estimatedItemSizeProp,\n overscan = 5,\n onSelect,\n className,\n style,\n 'aria-label': ariaLabel,\n}: VirtualMenuProps<T>) {\n const menuId = React.useId();\n const parentRef = React.useRef<HTMLDivElement>(null);\n const [highlightedIndex, setHighlightedIndex] = React.useState<number>(-1);\n const { isInsideMenu, size: contextSize, itemHeight: contextItemHeight } = useMenuContext();\n\n // Resolve item height: explicit prop > own size > parent menu > default size '2'.\n // Heights follow the theme scaling, like the --base-menu-item-height token.\n const estimatedItemSize =\n estimatedItemSizeProp ??\n (sizeProp\n ? getMenuItemHeight(sizeProp)\n : (contextItemHeight ?? getMenuItemHeight(contextSize ?? '2')));\n\n // Validate props\n if (!itemLabel && !RenderItem) {\n throw new Error('VirtualMenu requires either itemLabel or renderItem prop');\n }\n\n // Normalize itemLabel to a function\n const getLabel = React.useMemo(() => {\n if (!itemLabel) return null;\n if (typeof itemLabel === 'function') return itemLabel;\n return (item: T) => item[itemLabel] as React.ReactNode;\n }, [itemLabel]);\n\n // Derive safe highlighted index\n const safeHighlightedIndex = React.useMemo(() => {\n if (items.length === 0) return -1;\n if (highlightedIndex < 0) return -1;\n return Math.min(highlightedIndex, items.length - 1);\n }, [highlightedIndex, items.length]);\n\n // Normalize estimatedItemSize to a function\n const getItemSize = React.useMemo(\n () =>\n typeof estimatedItemSize === 'function'\n ? estimatedItemSize\n : () => estimatedItemSize,\n [estimatedItemSize],\n );\n\n const virtualizer = useVirtualizer({\n count: items.length,\n getScrollElement: () => parentRef.current,\n estimateSize: getItemSize,\n overscan,\n });\n\n const virtualItems = virtualizer.getVirtualItems();\n\n // Refs for stable handler references\n const itemsRef = React.useRef(items);\n const onSelectRef = React.useRef(onSelect);\n itemsRef.current = items;\n onSelectRef.current = onSelect;\n\n const scrollToIndexRef = React.useRef(virtualizer.scrollToIndex);\n scrollToIndexRef.current = virtualizer.scrollToIndex;\n\n const highlightedIndexRef = React.useRef(safeHighlightedIndex);\n highlightedIndexRef.current = safeHighlightedIndex;\n\n // Stable event handlers\n const handleItemMouseEnter = React.useCallback((e: React.MouseEvent<HTMLElement>) => {\n const index = e.currentTarget.dataset.index;\n if (index != null) {\n setHighlightedIndex(Number(index));\n }\n }, []);\n\n const handleItemClick = React.useCallback((e: React.MouseEvent<HTMLElement>) => {\n const index = e.currentTarget.dataset.index;\n if (index != null) {\n const idx = Number(index);\n const currentItems = itemsRef.current;\n if (idx >= 0 && idx < currentItems.length) {\n onSelectRef.current?.(currentItems[idx], idx);\n }\n }\n }, []);\n\n const noop = React.useCallback(() => {}, []);\n\n // Item-level keyboard handler for Enter/Space activation (satisfies a11y lint rule)\n const handleItemKeyDown = React.useCallback((e: React.KeyboardEvent<HTMLElement>) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n const index = e.currentTarget.dataset.index;\n if (index != null) {\n const idx = Number(index);\n const currentItems = itemsRef.current;\n if (idx >= 0 && idx < currentItems.length) {\n onSelectRef.current?.(currentItems[idx], idx);\n }\n }\n }\n }, []);\n\n // Keyboard navigation\n const handleKeyDown = React.useCallback((e: React.KeyboardEvent) => {\n const currentItems = itemsRef.current;\n const currentHighlightedIndex = highlightedIndexRef.current;\n\n switch (e.key) {\n case 'ArrowDown': {\n e.preventDefault();\n const nextIndex =\n currentHighlightedIndex < currentItems.length - 1 ? currentHighlightedIndex + 1 : 0;\n setHighlightedIndex(nextIndex);\n scrollToIndexRef.current(nextIndex, { align: 'auto' });\n break;\n }\n case 'ArrowUp': {\n e.preventDefault();\n const prevIndex =\n currentHighlightedIndex > 0 ? currentHighlightedIndex - 1 : currentItems.length - 1;\n setHighlightedIndex(prevIndex);\n scrollToIndexRef.current(prevIndex, { align: 'auto' });\n break;\n }\n case 'Home': {\n e.preventDefault();\n setHighlightedIndex(0);\n scrollToIndexRef.current(0, { align: 'start' });\n break;\n }\n case 'End': {\n e.preventDefault();\n const lastIndex = currentItems.length - 1;\n setHighlightedIndex(lastIndex);\n scrollToIndexRef.current(lastIndex, { align: 'end' });\n break;\n }\n case 'Enter':\n case ' ': {\n e.preventDefault();\n if (currentHighlightedIndex >= 0 && currentHighlightedIndex < currentItems.length) {\n onSelectRef.current?.(currentItems[currentHighlightedIndex], currentHighlightedIndex);\n }\n break;\n }\n case 'Tab': {\n e.preventDefault();\n break;\n }\n case 'Escape': {\n (e.currentTarget as HTMLElement).blur();\n break;\n }\n }\n }, []);\n\n // Item ID generator\n const getItemId = React.useCallback(\n (index: number) => `${menuId}-item-${index}`,\n [menuId],\n );\n\n // Memoize styles\n const rootStyle = React.useMemo(\n () => ({\n overflow: 'auto' as const,\n position: 'relative' as const,\n ...style,\n }),\n [style],\n );\n\n const totalSize = virtualizer.getTotalSize();\n const viewportStyle = React.useMemo(\n () => ({\n height: `${totalSize}px`,\n width: '100%' as const,\n position: 'relative' as const,\n }),\n [totalSize],\n );\n\n return (\n <div\n ref={parentRef}\n role={isInsideMenu ? 'group' : 'menu'}\n aria-label={ariaLabel}\n aria-activedescendant={safeHighlightedIndex >= 0 ? getItemId(safeHighlightedIndex) : undefined}\n tabIndex={0}\n onKeyDown={handleKeyDown}\n className={classNames('kui-VirtualMenuRoot', className)}\n style={rootStyle}\n >\n <div className=\"kui-VirtualMenuViewport\" style={viewportStyle}>\n {virtualItems.map((virtualRow) => {\n const item = items[virtualRow.index];\n const index = virtualRow.index;\n const isHighlighted = safeHighlightedIndex === index;\n\n const itemStyle: React.CSSProperties = {\n height: virtualRow.size,\n transform: `translateY(${virtualRow.start}px)`,\n };\n\n const commonProps = {\n id: getItemId(index),\n isHighlighted,\n style: itemStyle,\n tabIndex: isHighlighted ? 0 : -1,\n 'data-highlighted': isHighlighted ? true as const : undefined,\n 'data-index': index,\n onMouseEnter: handleItemMouseEnter,\n onMouseLeave: noop,\n onClick: handleItemClick,\n onKeyDown: handleItemKeyDown,\n };\n\n // Use renderItem if provided, otherwise use SimpleItem with itemLabel\n if (RenderItem) {\n return (\n <RenderItem\n key={virtualRow.key}\n item={item}\n index={index}\n {...commonProps}\n />\n );\n }\n\n return (\n <SimpleItem\n key={virtualRow.key}\n label={getLabel!(item)}\n {...commonProps}\n />\n );\n })}\n </div>\n </div>\n );\n}\n\nVirtualMenuRoot.displayName = 'VirtualMenu';\n\n// ============================================================================\n// VirtualMenu.Item Component (for custom renderItem usage)\n// ============================================================================\n\ninterface VirtualMenuItemProps extends React.ComponentPropsWithoutRef<'div'> {\n children: React.ReactNode;\n /** Data attribute for highlight styling */\n 'data-highlighted'?: true | undefined;\n /** Data attribute for event delegation */\n 'data-index'?: number;\n}\n\nconst VirtualMenuItemInner = React.forwardRef<HTMLDivElement, VirtualMenuItemProps>(\n ({ className, children, ...props }, forwardedRef) => {\n return (\n <div\n ref={forwardedRef}\n role=\"menuitem\"\n className={classNames('kui-reset', 'kui-BaseMenuItem', 'kui-VirtualMenuItem', className)}\n {...props}\n >\n {children}\n </div>\n );\n },\n);\n\nVirtualMenuItemInner.displayName = 'VirtualMenu.Item';\n\n// Memoized with custom comparison\nconst VirtualMenuItem = React.memo(VirtualMenuItemInner, (prevProps, nextProps) => {\n const prevStyle = prevProps.style as React.CSSProperties | undefined;\n const nextStyle = nextProps.style as React.CSSProperties | undefined;\n if (prevStyle?.height !== nextStyle?.height) return false;\n if (prevStyle?.transform !== nextStyle?.transform) return false;\n if (prevProps['data-highlighted'] !== nextProps['data-highlighted']) return false;\n if (prevProps.tabIndex !== nextProps.tabIndex) return false;\n if (prevProps.id !== nextProps.id) return false;\n if (prevProps.className !== nextProps.className) return false;\n if (prevProps.children !== nextProps.children) return false;\n return true;\n});\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nconst VirtualMenu = Object.assign(VirtualMenuRoot, {\n Item: VirtualMenuItem,\n});\n\nexport { VirtualMenu };\nexport type { VirtualMenuProps, VirtualMenuItemProps, VirtualMenuRenderItemProps };\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["React", "classNames", "useVirtualizer", "SimpleItem", "label", "_isHighlighted", "id", "style", "tabIndex", "dataHighlighted", "dataIndex", "onMouseEnter", "onMouseLeave", "onClick", "onKeyDown", "classNames", "prev", "next", "VirtualMenuRoot", "items", "itemLabel", "RenderItem", "sizeProp", "estimatedItemSizeProp", "overscan", "onSelect", "className", "ariaLabel", "menuId", "parentRef", "highlightedIndex", "setHighlightedIndex", "isInsideMenu", "contextSize", "contextItemHeight", "useMenuContext", "estimatedItemSize", "getMenuItemHeight", "getLabel", "item", "safeHighlightedIndex", "getItemSize", "virtualizer", "useVirtualizer", "virtualItems", "itemsRef", "onSelectRef", "scrollToIndexRef", "highlightedIndexRef", "handleItemMouseEnter", "e", "index", "handleItemClick", "idx", "currentItems", "noop", "handleItemKeyDown", "handleKeyDown", "currentHighlightedIndex", "nextIndex", "prevIndex", "lastIndex", "getItemId", "rootStyle", "totalSize", "viewportStyle", "virtualRow", "isHighlighted", "itemStyle", "commonProps", "VirtualMenuItemInner", "children", "props", "forwardedRef", "VirtualMenuItem", "prevProps", "nextProps", "prevStyle", "nextStyle", "VirtualMenu"]
|
|
7
|
-
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as g}from"./chunk-BE7LMBBC.js";import{a as l}from"./chunk-QGCXTULQ.js";import*as e from"react";import d from"classnames";import{Toggle as P}from"radix-ui";var T=e.forwardRef(({pressed:a,onPressedChange:i,defaultPressed:p,children:t,className:u,...s},m)=>{let{"aria-label":n,"aria-labelledby":o}=s,r=e.useRef(null);e.useEffect(()=>{r.current=null},[o]);let c=e.useCallback(()=>n||(o?(r.current===null&&(r.current=document.getElementById(o)?.textContent||"Toggle"),r.current):typeof t=="string"?t:e.isValidElement(t)&&typeof t.props?.children=="string"?t.props.children:"Toggle"),[n,o,t]),{handlePressedChange:f}=g({pressed:a,onPressedChange:i,getAccessibleName:c,componentName:"Toggle"});return e.createElement(P.Root,{pressed:a,onPressedChange:f,defaultPressed:p,asChild:!0},e.createElement(l,{...s,ref:m,className:d("kui-Toggle",u)},t))});T.displayName="Toggle";export{T as a};
|
|
2
|
-
//# sourceMappingURL=chunk-BOL3VVSN.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/components/toggle.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nimport classNames from 'classnames';\nimport { Toggle as TogglePrimitive } from 'radix-ui';\nimport { Button } from './button.js';\nimport type { ButtonIconOnlyProps, ButtonProps, ButtonRankProps } from './button.js';\nimport { useToggleState } from '../hooks/use-toggle-state.js';\n\ntype ToggleOwnProps = {\n /** Whether the toggle is on. The controlled counterpart of `defaultPressed`. */\n pressed?: boolean;\n /** Fires when the pressed state changes, with the new state. */\n onPressedChange?: (pressed: boolean) => void;\n /** Whether the toggle starts on. The uncontrolled counterpart of `pressed`. */\n defaultPressed?: boolean;\n};\n\n/**\n * Toggle takes every `Button` prop except `as`. Set `iconOnly` for a square toggle holding only\n * an icon; the type then requires `aria-label` or `aria-labelledby`.\n */\ntype ToggleProps = Omit<ButtonProps<'button'>, 'as' | 'variant' | 'emphasis' | 'iconOnly'> &\n ButtonRankProps &\n ButtonIconOnlyProps &\n ToggleOwnProps;\n\ntype ToggleElement = React.ElementRef<typeof Button>;\n\n/**\n * A button that stays pressed: bold in a formatting bar, a filter that is on or off. One\n * control, two states, `aria-pressed` from the primitive. It is a `Button` in every other\n * respect, and wears Button's pressed look while on.\n *\n * Picking one of several is a `SegmentedControl`.\n *\n * @example\n * ```tsx\n * <Toggle defaultPressed={false}>Show hidden</Toggle>\n *\n * <Toggle iconOnly aria-label=\"Bold\" pressed={bold} onPressedChange={setBold}>\n * <BoldIcon />\n * </Toggle>\n * ```\n */\nconst Toggle = React.forwardRef<ToggleElement, ToggleProps>(\n ({ pressed, onPressedChange, defaultPressed, children, className, ...buttonProps }, forwardedRef) => {\n const { 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledBy } = buttonProps as {\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n };\n\n // The label behind aria-labelledby is read once per id, not on every press.\n const cachedLabelRef = React.useRef<string | null>(null);\n React.useEffect(() => {\n cachedLabelRef.current = null;\n }, [ariaLabelledBy]);\n\n /**\n * The name announced when the pressed state changes: aria-label, then the label\n * aria-labelledby points at, then visible text.\n */\n const getAccessibleName = React.useCallback(() => {\n if (ariaLabel) return ariaLabel;\n if (ariaLabelledBy) {\n if (cachedLabelRef.current === null) {\n cachedLabelRef.current = document.getElementById(ariaLabelledBy)?.textContent || 'Toggle';\n }\n return cachedLabelRef.current;\n }\n if (typeof children === 'string') return children;\n if (React.isValidElement(children) && typeof (children.props as { children?: unknown })?.children === 'string') {\n return (children.props as { children: string }).children;\n }\n return 'Toggle';\n }, [ariaLabel, ariaLabelledBy, children]);\n\n // Shared toggle state hook: accessibility announcements and controlled-state warnings.\n const { handlePressedChange } = useToggleState({\n pressed,\n onPressedChange,\n getAccessibleName,\n componentName: 'Toggle',\n });\n\n return (\n <TogglePrimitive.Root pressed={pressed} onPressedChange={handlePressedChange} defaultPressed={defaultPressed} asChild>\n <Button {...(buttonProps as ButtonProps)} ref={forwardedRef} className={classNames('kui-Toggle', className)}>\n {children}\n </Button>\n </TogglePrimitive.Root>\n );\n },\n);\nToggle.displayName = 'Toggle';\n\nexport { Toggle };\nexport type { ToggleProps };\n"],
|
|
5
|
-
"mappings": "gFAAA,UAAYA,MAAW,QACvB,OAAOC,MAAgB,aACvB,OAAS,UAAUC,MAAuB,WAyC1C,IAAMC,EAAe,aACnB,CAAC,CAAE,QAAAC,EAAS,gBAAAC,EAAiB,eAAAC,EAAgB,SAAAC,EAAU,UAAAC,EAAW,GAAGC,CAAY,EAAGC,IAAiB,CACnG,GAAM,CAAE,aAAcC,EAAW,kBAAmBC,CAAe,EAAIH,EAMjEI,EAAuB,SAAsB,IAAI,EACjD,YAAU,IAAM,CACpBA,EAAe,QAAU,IAC3B,EAAG,CAACD,CAAc,CAAC,EAMnB,IAAME,EAA0B,cAAY,IACtCH,IACAC,GACEC,EAAe,UAAY,OAC7BA,EAAe,QAAU,SAAS,eAAeD,CAAc,GAAG,aAAe,UAE5EC,EAAe,SAEpB,OAAON,GAAa,SAAiBA,EAC/B,iBAAeA,CAAQ,GAAK,OAAQA,EAAS,OAAkC,UAAa,SAC5FA,EAAS,MAA+B,SAE3C,UACN,CAACI,EAAWC,EAAgBL,CAAQ,CAAC,EAGlC,CAAE,oBAAAQ,CAAoB,EAAIC,EAAe,CAC7C,QAAAZ,EACA,gBAAAC,EACA,kBAAAS,EACA,cAAe,QACjB,CAAC,EAED,OACE,gBAACG,EAAgB,KAAhB,CAAqB,QAASb,EAAS,gBAAiBW,EAAqB,eAAgBT,EAAgB,QAAO,IACnH,gBAACY,EAAA,CAAQ,GAAIT,EAA6B,IAAKC,EAAc,UAAWS,EAAW,aAAcX,CAAS,GACvGD,CACH,CACF,CAEJ,CACF,EACAJ,EAAO,YAAc",
|
|
6
|
-
"names": ["React", "classNames", "TogglePrimitive", "Toggle", "pressed", "onPressedChange", "defaultPressed", "children", "className", "buttonProps", "forwardedRef", "ariaLabel", "ariaLabelledBy", "cachedLabelRef", "getAccessibleName", "handlePressedChange", "useToggleState", "TogglePrimitive", "Button", "classNames"]
|
|
7
|
-
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as p,b as R,c as n}from"./chunk-YXLDRDHW.js";import{a as b}from"./chunk-R4XJNQX5.js";import{e as d}from"./chunk-3YLYGKFB.js";import{a as s}from"./chunk-ELAW7ZUG.js";import{b as m}from"./chunk-PBFSBHBS.js";import{a as v}from"./chunk-OS3FCYZY.js";var D={};v(D,{Body:()=>c,Cell:()=>C,ColumnHeaderCell:()=>i,Header:()=>P,Root:()=>T,Row:()=>f,RowHeaderCell:()=>y});import*as e from"react";import r from"classnames";var T=e.forwardRef((o,l)=>{let a=d(o,p.size),{layout:t,...u}=p,{className:w,children:H,layout:N,...h}=s(a,u),E=m({value:N,className:p.layout.className,propValues:p.layout.values});return e.createElement("div",{ref:l,className:r("kui-TableRoot",w),...h},e.createElement(b,null,e.createElement("table",{className:r("kui-TableRootTable",E)},H)))});T.displayName="Table.Root";var P=e.forwardRef(({className:o,...l},a)=>e.createElement("thead",{...l,ref:a,className:r("kui-TableHeader",o)}));P.displayName="Table.Header";var c=e.forwardRef(({className:o,...l},a)=>e.createElement("tbody",{...l,ref:a,className:r("kui-TableBody",o)}));c.displayName="Table.Body";var f=e.forwardRef((o,l)=>{let{className:a,...t}=s(o,R);return e.createElement("tr",{...t,ref:l,className:r("kui-TableRow",a)})});f.displayName="Table.Row";var C=e.forwardRef((o,l)=>{let{className:a,...t}=s(o,n);return e.createElement("td",{className:r("kui-TableCell",a),ref:l,...t})});C.displayName="Table.Cell";var i=e.forwardRef((o,l)=>{let{className:a,...t}=s(o,n);return e.createElement("th",{className:r("kui-TableCell","kui-TableColumnHeaderCell",a),scope:"col",ref:l,...t})});i.displayName="Table.ColumnHeaderCell";var y=e.forwardRef((o,l)=>{let{className:a,...t}=s(o,n);return e.createElement("th",{className:r("kui-TableCell","kui-TableRowHeaderCell",a),scope:"row",ref:l,...t})});y.displayName="Table.RowHeaderCell";export{T as a,P as b,c,f as d,C as e,i as f,y as g,D as h};
|
|
2
|
-
//# sourceMappingURL=chunk-DBROSD2J.js.map
|