@womp/kookie-ui 0.22.1 → 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 +247 -187
- 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/image.d.ts +23 -0
- package/dist/cjs/components/image.d.ts.map +1 -0
- package/dist/cjs/components/image.js +2 -0
- package/dist/cjs/components/image.js.map +7 -0
- package/dist/cjs/components/image.props.d.ts +19 -0
- package/dist/cjs/components/image.props.d.ts.map +1 -0
- package/dist/cjs/components/image.props.js +2 -0
- package/dist/cjs/components/image.props.js.map +7 -0
- package/dist/cjs/components/index.d.ts +2 -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 +1 -2
- package/dist/cjs/components/select.d.ts.map +1 -1
- package/dist/cjs/components/select.js +1 -1
- package/dist/cjs/components/select.js.map +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-EZYXYLR2.js +2 -0
- package/dist/esm/chunk-EZYXYLR2.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-PNAB6KCN.js → chunk-G4ETY2NP.js} +2 -2
- package/dist/esm/{chunk-PNAB6KCN.js.map → chunk-G4ETY2NP.js.map} +1 -1
- 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-T62PRLPN.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-M7I6ISPL.js +2 -0
- package/dist/esm/chunk-M7I6ISPL.js.map +7 -0
- package/dist/esm/chunk-MYYXOFU5.js +1 -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-TJL47GIO.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/image.d.ts +23 -0
- package/dist/esm/components/image.d.ts.map +1 -0
- package/dist/esm/components/image.js +2 -0
- package/dist/esm/components/image.js.map +7 -0
- package/dist/esm/components/image.props.d.ts +19 -0
- package/dist/esm/components/image.props.d.ts.map +1 -0
- package/dist/esm/components/image.props.js +2 -0
- package/dist/esm/components/image.props.js.map +7 -0
- package/dist/esm/components/index.d.ts +2 -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 +1 -2
- 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/helpers/index.js +1 -1
- 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.css +6 -0
- package/src/components/_internal/base-button.tsx +56 -17
- 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 -4
- 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/combobox.css +13 -0
- 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/image.css +33 -0
- package/src/components/image.props.ts +18 -0
- package/src/components/image.tsx +71 -0
- package/src/components/index.css +1 -0
- package/src/components/index.tsx +8 -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 +100 -32
- 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 +26 -0
- package/src/components/shell.tsx +29 -8
- package/src/components/sidebar.tsx +27 -16
- package/src/components/slider.css +1 -0
- package/src/components/slider.tsx +54 -44
- package/src/components/spinner.css +19 -1
- package/src/components/spinner.tsx +21 -11
- 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/tokens/color.css +1 -22
- package/src/styles/utilities/truncate.css +10 -0
- package/styles.css +252 -208
- package/tokens/base.css +0 -21
- package/tokens.css +0 -21
- 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-3YWVE5GL.js +0 -2
- package/dist/esm/chunk-3YWVE5GL.js.map +0 -7
- 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-A3YQIJDA.js +0 -2
- package/dist/esm/chunk-A3YQIJDA.js.map +0 -7
- 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-D3U4MWDZ.js +0 -1
- 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-HIKMKGPT.js +0 -2
- package/dist/esm/chunk-HIKMKGPT.js.map +0 -7
- package/dist/esm/chunk-IJRBX6EV.js +0 -2
- package/dist/esm/chunk-IJRBX6EV.js.map +0 -7
- package/dist/esm/chunk-KMDXIZAG.js +0 -2
- package/dist/esm/chunk-KMDXIZAG.js.map +0 -7
- package/dist/esm/chunk-LC5AK2ZD.js +0 -2
- package/dist/esm/chunk-LC5AK2ZD.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-NLXJZJNN.js +0 -2
- package/dist/esm/chunk-NLXJZJNN.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-TJL47GIO.js +0 -2
- package/dist/esm/chunk-V32EP3S7.js +0 -2
- package/dist/esm/chunk-V32EP3S7.js.map +0 -7
- package/dist/esm/chunk-WKSXMFFF.js +0 -2
- package/dist/esm/chunk-WKSXMFFF.js.map +0 -7
- package/dist/esm/chunk-XKSU3NLG.js +0 -2
- package/dist/esm/chunk-Y3JYEEFB.js +0 -2
- package/dist/esm/chunk-YK3ZUMRQ.js +0 -2
- package/dist/esm/chunk-YK3ZUMRQ.js.map +0 -7
- package/dist/esm/chunk-YZM54IJE.js +0 -2
- package/dist/esm/chunk-YZM54IJE.js.map +0 -7
- 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-T62PRLPN.js.map → chunk-KEGCX5VM.js.map} +0 -0
- /package/dist/esm/{chunk-D3U4MWDZ.js.map → chunk-MYYXOFU5.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
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as A}from"./chunk-3XUY5WFA.js";import{a as L}from"./chunk-MJJ7XDIP.js";import{b as V,c as S}from"./chunk-PPZY7PJA.js";import{c as h,e as D}from"./chunk-V5O3TF57.js";import{a as k}from"./chunk-3XZOE2IQ.js";import{b as E,d as G,f as w}from"./chunk-62ZGP4ET.js";import{e as B}from"./chunk-3YLYGKFB.js";import{c as C,d as z,e as O,f as W}from"./chunk-3XHTJZNP.js";import{b as R,c as b,d as I,e as v}from"./chunk-KZEZDBE7.js";import{a as f}from"./chunk-ELAW7ZUG.js";import{a as te}from"./chunk-OS3FCYZY.js";var ne={};te(ne,{CheckboxItem:()=>Q,Content:()=>_,Group:()=>U,Item:()=>K,Label:()=>q,RadioGroup:()=>H,RadioItem:()=>J,Root:()=>j,Separator:()=>$,Sub:()=>X,SubContent:()=>Z,SubTrigger:()=>Y,Trigger:()=>F,Virtual:()=>A});import*as e from"react";import s from"classnames";import{ContextMenu as a,Slot as g}from"radix-ui";import{useCallbackRef as oe}from"radix-ui/internal";var j=t=>{let{open:n,onOpenChange:o}=t,[u,r]=e.useState(!1),i=n??u,p=oe(o),c=e.useCallback(l=>{r(l),p(l)},[p]),m=e.useCallback(()=>c(!1),[c]);return e.createElement(D,{value:m},e.createElement(a.Root,{...t,open:i,onOpenChange:c}))};j.displayName="ContextMenu.Root";var F=e.forwardRef(({children:t,...n},o)=>e.createElement(a.Trigger,{...n,ref:o,asChild:!0},L(t)));F.displayName="ContextMenu.Trigger";var y=e.createContext({}),_=e.forwardRef((t,n)=>{let o=B(t,C.size),u=V(),{size:r=C.size.default}=o,{className:i,children:p,color:c,container:m,forceMount:l,submenuBehavior:T,virtualized:d=!1,...P}=f(o,C),x=c||u.accentColor,M=R(r,C.size.default),ee=e.useMemo(()=>({size:r,color:x}),[r,x]),N=e.createElement(h,{size:r},e.createElement(y.Provider,{value:ee},p));return e.createElement(a.Portal,{container:m,forceMount:l},e.createElement(S,{asChild:!0},e.createElement(a.Content,{"data-accent-color":x,alignOffset:b(M),collisionPadding:10,...P,asChild:!1,ref:n,className:s("kui-PopperContent","kui-BaseMenuContent","kui-variant-soft","kui-ContextMenuContent",i)},d?e.createElement("div",{className:s("kui-BaseMenuViewport","kui-ContextMenuViewport","kui-virtualized")},N):e.createElement(k,{type:"auto",scrollbars:"vertical"},e.createElement("div",{className:s("kui-BaseMenuViewport","kui-ContextMenuViewport")},N)))))});_.displayName="ContextMenu.Content";var q=e.forwardRef(({className:t,...n},o)=>e.createElement(a.Label,{...n,asChild:!1,ref:o,className:s("kui-BaseMenuLabel","kui-ContextMenuLabel",t)}));q.displayName="ContextMenu.Label";var K=e.forwardRef((t,n)=>{let{className:o,children:u,color:r=z.color.default,shortcut:i,...p}=t;return e.createElement(a.Item,{"data-accent-color":r,"aria-keyshortcuts":i?I(i):void 0,...p,ref:n,className:s("kui-reset","kui-BaseMenuItem","kui-ContextMenuItem",o)},e.createElement(g.Slottable,null,u),i&&e.createElement(v,{shortcut:i,className:"kui-ContextMenuShortcut"}))});K.displayName="ContextMenu.Item";var U=e.forwardRef(({className:t,...n},o)=>e.createElement(a.Group,{...n,asChild:!1,ref:o,className:s("kui-BaseMenuGroup","kui-ContextMenuGroup",t)}));U.displayName="ContextMenu.Group";var H=e.forwardRef(({className:t,...n},o)=>e.createElement(a.RadioGroup,{...n,asChild:!1,ref:o,className:s("kui-BaseMenuRadioGroup","kui-ContextMenuRadioGroup",t)}));H.displayName="ContextMenu.RadioGroup";var J=e.forwardRef((t,n)=>{let{children:o,className:u,color:r=W.color.default,...i}=t;return e.createElement(a.RadioItem,{...i,asChild:!1,ref:n,"data-accent-color":r,className:s("kui-BaseMenuItem","kui-BaseMenuRadioItem","kui-ContextMenuItem","kui-ContextMenuRadioItem",u)},e.createElement(g.Slottable,null,o),e.createElement(a.ItemIndicator,{className:"kui-BaseMenuItemIndicator kui-ContextMenuItemIndicator"},e.createElement(w,{className:"kui-BaseMenuItemIndicatorIcon kui-ContextMenuItemIndicatorIcon"})))});J.displayName="ContextMenu.RadioItem";var Q=e.forwardRef((t,n)=>{let{children:o,className:u,shortcut:r,color:i=O.color.default,...p}=t;return e.createElement(a.CheckboxItem,{"aria-keyshortcuts":r?I(r):void 0,...p,asChild:!1,ref:n,"data-accent-color":i,className:s("kui-BaseMenuItem","kui-BaseMenuCheckboxItem","kui-ContextMenuItem","kui-ContextMenuCheckboxItem",u)},e.createElement(g.Slottable,null,o),e.createElement(a.ItemIndicator,{className:"kui-BaseMenuItemIndicator kui-ContextMenuItemIndicator"},e.createElement(E,{className:"kui-BaseMenuItemIndicatorIcon kui-ContextMenuItemIndicatorIcon"})),r&&e.createElement(v,{shortcut:r,className:"kui-ContextMenuShortcut"}))});Q.displayName="ContextMenu.CheckboxItem";var X=t=>e.createElement(a.Sub,{...t});X.displayName="ContextMenu.Sub";var Y=e.forwardRef((t,n)=>{let{className:o,children:u,...r}=t;return e.createElement(a.SubTrigger,{...r,asChild:!1,ref:n,className:s("kui-BaseMenuItem","kui-BaseMenuSubTrigger","kui-ContextMenuItem","kui-ContextMenuSubTrigger",o)},u,e.createElement("div",{className:"kui-BaseMenuShortcut kui-ContextMenuShortcut"},e.createElement(G,{className:"kui-BaseMenuSubTriggerIcon kui-ContextMenuSubTriggerIcon"})))});Y.displayName="ContextMenu.SubTrigger";var Z=e.forwardRef((t,n)=>{let o=e.useContext(y),u=t.size??o.size,r=t.color??o.color,{className:i,children:p,container:c,forceMount:m,color:l,virtualized:T=!1,...d}=f({...t,size:u},C),P=R(u,C.size.default),x=e.useMemo(()=>({size:u,color:r}),[u,r]),M=e.createElement(h,{size:u},e.createElement(y.Provider,{value:x},p));return e.createElement(a.Portal,{container:c,forceMount:m},e.createElement(S,{asChild:!0},e.createElement(a.SubContent,{"data-accent-color":r,alignOffset:b(P),sideOffset:1,collisionPadding:10,...d,asChild:!1,ref:n,className:s("kui-PopperContent","kui-BaseMenuContent","kui-variant-soft","kui-BaseMenuSubContent","kui-ContextMenuContent","kui-ContextMenuSubContent",i)},T?e.createElement("div",{className:s("kui-BaseMenuViewport","kui-ContextMenuViewport","kui-virtualized")},M):e.createElement(k,{type:"auto",scrollbars:"vertical"},e.createElement("div",{className:s("kui-BaseMenuViewport","kui-ContextMenuViewport")},M)))))});Z.displayName="ContextMenu.SubContent";var $=e.forwardRef(({className:t,...n},o)=>e.createElement(a.Separator,{...n,asChild:!1,ref:o,className:s("kui-BaseMenuSeparator","kui-ContextMenuSeparator",t)}));$.displayName="ContextMenu.Separator";export{j as a,F as b,_ as c,q as d,K as e,U as f,H as g,J as h,Q as i,X as j,Y as k,Z as l,$ as m,ne as n};
|
|
2
|
+
//# sourceMappingURL=chunk-3VTS4C63.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/components/context-menu.tsx"],
|
|
4
|
+
"sourcesContent": ["/**\n * Context Menu component that provides right-click menu functionality.\n * Requires client-side rendering due to event handling and portal usage.\n */\n'use client';\n\nimport * as React from 'react';\nimport { VirtualMenu } from './virtual-menu.js';\nimport classNames from 'classnames';\nimport { ContextMenu as ContextMenuPrimitive, Slot } from 'radix-ui';\nimport { useCallbackRef } from 'radix-ui/internal';\n\nimport { ScrollArea } from './scroll-area.js';\nimport {\n contextMenuContentPropDefs,\n contextMenuSubContentPropDefs,\n contextMenuItemPropDefs,\n contextMenuCheckboxItemPropDefs,\n contextMenuRadioItemPropDefs,\n} from './context-menu.props.js';\nimport { Theme, useThemeContext } from './theme.js';\nimport { ThickCheckIcon, ThickChevronRightIcon, ThickDotIcon } from './icons.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport { useThemeSizeProps } from '../helpers/theme-size.js';\nimport { requireReactElement } from '../helpers/require-react-element.js';\nimport { MenuCloseProvider, MenuProvider } from './_internal/menu-context.js';\nimport {\n MenuShortcut,\n getMenuAlignOffset,\n toAriaKeyShortcuts,\n useResolvedResponsiveValue,\n} from './_internal/base-menu.utils.js';\n\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { GetPropDefTypes, Responsive } from '../props/prop-def.js';\n\ninterface ContextMenuRootProps\n extends React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Root> {}\nconst ContextMenuRoot: React.FC<ContextMenuRootProps> = (props) => {\n const { open: openProp, onOpenChange } = props;\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(false);\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 const close = React.useCallback(() => handleOpenChange(false), [handleOpenChange]);\n\n return (\n <MenuCloseProvider value={close}>\n <ContextMenuPrimitive.Root {...props} open={open} onOpenChange={handleOpenChange} />\n </MenuCloseProvider>\n );\n};\nContextMenuRoot.displayName = 'ContextMenu.Root';\n\ntype ContextMenuTriggerElement = React.ElementRef<typeof ContextMenuPrimitive.Trigger>;\ninterface ContextMenuTriggerProps\n extends ComponentPropsWithout<typeof ContextMenuPrimitive.Trigger, RemovedProps> {}\nconst ContextMenuTrigger = React.forwardRef<ContextMenuTriggerElement, ContextMenuTriggerProps>(\n ({ children, ...props }, forwardedRef) => (\n <ContextMenuPrimitive.Trigger {...props} ref={forwardedRef} asChild>\n {requireReactElement(children)}\n </ContextMenuPrimitive.Trigger>\n ),\n);\nContextMenuTrigger.displayName = 'ContextMenu.Trigger';\n\n/** Visual props shared by Content and SubContent. */\ntype ContextMenuSurfaceProps = GetPropDefTypes<typeof contextMenuContentPropDefs>;\n\ntype ContextMenuContentContextValue = {\n size?: ContextMenuSurfaceProps['size'];\n color?: ContextMenuSurfaceProps['color'];\n};\nconst ContextMenuContentContext = React.createContext<ContextMenuContentContextValue>({});\ntype ContextMenuContentElement = React.ElementRef<typeof ContextMenuPrimitive.Content>;\ninterface ContextMenuContentProps\n extends ComponentPropsWithout<typeof ContextMenuPrimitive.Content, RemovedProps>,\n ContextMenuSurfaceProps {\n container?: React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Portal>['container'];\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 context menu.\n */\n virtualized?: boolean;\n /**\n * @deprecated Has no effect. ContextMenu submenus always cascade.\n */\n submenuBehavior?: Responsive<'cascade' | 'drill-down'>;\n}\nconst ContextMenuContent = React.forwardRef<ContextMenuContentElement, ContextMenuContentProps>(\n (ownProps, forwardedRef) => {\n const props = useThemeSizeProps(ownProps, contextMenuContentPropDefs.size);\n const themeContext = useThemeContext();\n const {\n size = contextMenuContentPropDefs.size.default,\n } = props;\n const {\n className,\n children,\n color,\n container,\n forceMount,\n submenuBehavior: _submenuBehavior,\n virtualized = false,\n ...contentProps\n } = extractProps(props, contextMenuContentPropDefs);\n\n const resolvedColor = color || themeContext.accentColor;\n const scalarSize = useResolvedResponsiveValue(size, contextMenuContentPropDefs.size.default);\n\n const contextValue = React.useMemo(\n () => ({ size, color: resolvedColor }),\n [size, resolvedColor],\n );\n\n const body = (\n <MenuProvider size={size}>\n <ContextMenuContentContext.Provider value={contextValue}>{children}</ContextMenuContentContext.Provider>\n </MenuProvider>\n );\n\n return (\n <ContextMenuPrimitive.Portal container={container} forceMount={forceMount}>\n <Theme asChild>\n <ContextMenuPrimitive.Content\n data-accent-color={resolvedColor}\n alignOffset={getMenuAlignOffset(scalarSize)}\n collisionPadding={10}\n {...contentProps}\n asChild={false}\n ref={forwardedRef}\n className={classNames(\n 'kui-PopperContent',\n 'kui-BaseMenuContent',\n 'kui-variant-soft',\n 'kui-ContextMenuContent',\n className,\n )}\n >\n {virtualized ? (\n <div className={classNames('kui-BaseMenuViewport', 'kui-ContextMenuViewport', 'kui-virtualized')}>\n {body}\n </div>\n ) : (\n <ScrollArea type=\"auto\" scrollbars=\"vertical\">\n <div className={classNames('kui-BaseMenuViewport', 'kui-ContextMenuViewport')}>{body}</div>\n </ScrollArea>\n )}\n </ContextMenuPrimitive.Content>\n </Theme>\n </ContextMenuPrimitive.Portal>\n );\n },\n);\nContextMenuContent.displayName = 'ContextMenu.Content';\n\ntype ContextMenuLabelElement = React.ElementRef<typeof ContextMenuPrimitive.Label>;\ninterface ContextMenuLabelProps\n extends ComponentPropsWithout<typeof ContextMenuPrimitive.Label, RemovedProps> {}\nconst ContextMenuLabel = React.forwardRef<ContextMenuLabelElement, ContextMenuLabelProps>(\n ({ className, ...props }, forwardedRef) => (\n <ContextMenuPrimitive.Label\n {...props}\n asChild={false}\n ref={forwardedRef}\n className={classNames('kui-BaseMenuLabel', 'kui-ContextMenuLabel', className)}\n />\n ),\n);\nContextMenuLabel.displayName = 'ContextMenu.Label';\n\ntype ContextMenuItemElement = React.ElementRef<typeof ContextMenuPrimitive.Item>;\ntype ContextMenuItemOwnProps = GetPropDefTypes<typeof contextMenuItemPropDefs>;\ninterface ContextMenuItemProps\n extends ComponentPropsWithout<typeof ContextMenuPrimitive.Item, RemovedProps>,\n ContextMenuItemOwnProps {}\nconst ContextMenuItem = React.forwardRef<ContextMenuItemElement, ContextMenuItemProps>(\n (props, forwardedRef) => {\n const {\n className,\n children,\n color = contextMenuItemPropDefs.color.default,\n shortcut,\n ...itemProps\n } = props;\n return (\n <ContextMenuPrimitive.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-ContextMenuItem', className)}\n >\n <Slot.Slottable>{children}</Slot.Slottable>\n {shortcut && <MenuShortcut shortcut={shortcut} className=\"kui-ContextMenuShortcut\" />}\n </ContextMenuPrimitive.Item>\n );\n },\n);\nContextMenuItem.displayName = 'ContextMenu.Item';\n\ntype ContextMenuGroupElement = React.ElementRef<typeof ContextMenuPrimitive.Group>;\ninterface ContextMenuGroupProps\n extends ComponentPropsWithout<typeof ContextMenuPrimitive.Group, RemovedProps> {}\nconst ContextMenuGroup = React.forwardRef<ContextMenuGroupElement, ContextMenuGroupProps>(\n ({ className, ...props }, forwardedRef) => (\n <ContextMenuPrimitive.Group\n {...props}\n asChild={false}\n ref={forwardedRef}\n className={classNames('kui-BaseMenuGroup', 'kui-ContextMenuGroup', className)}\n />\n ),\n);\nContextMenuGroup.displayName = 'ContextMenu.Group';\n\ntype ContextMenuRadioGroupElement = React.ElementRef<typeof ContextMenuPrimitive.RadioGroup>;\ninterface ContextMenuRadioGroupProps\n extends ComponentPropsWithout<typeof ContextMenuPrimitive.RadioGroup, RemovedProps> {}\nconst ContextMenuRadioGroup = React.forwardRef<\n ContextMenuRadioGroupElement,\n ContextMenuRadioGroupProps\n>(({ className, ...props }, forwardedRef) => (\n <ContextMenuPrimitive.RadioGroup\n {...props}\n asChild={false}\n ref={forwardedRef}\n className={classNames('kui-BaseMenuRadioGroup', 'kui-ContextMenuRadioGroup', className)}\n />\n));\nContextMenuRadioGroup.displayName = 'ContextMenu.RadioGroup';\n\ntype ContextMenuRadioItemElement = React.ElementRef<typeof ContextMenuPrimitive.RadioItem>;\ntype ContextMenuRadioItemOwnProps = GetPropDefTypes<typeof contextMenuRadioItemPropDefs>;\ninterface ContextMenuRadioItemProps\n extends ComponentPropsWithout<typeof ContextMenuPrimitive.RadioItem, RemovedProps>,\n ContextMenuRadioItemOwnProps {}\nconst ContextMenuRadioItem = React.forwardRef<\n ContextMenuRadioItemElement,\n ContextMenuRadioItemProps\n>((props, forwardedRef) => {\n const {\n children,\n className,\n color = contextMenuRadioItemPropDefs.color.default,\n ...itemProps\n } = props;\n return (\n <ContextMenuPrimitive.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-ContextMenuItem',\n 'kui-ContextMenuRadioItem',\n className,\n )}\n >\n <Slot.Slottable>{children}</Slot.Slottable>\n <ContextMenuPrimitive.ItemIndicator className=\"kui-BaseMenuItemIndicator kui-ContextMenuItemIndicator\">\n <ThickDotIcon className=\"kui-BaseMenuItemIndicatorIcon kui-ContextMenuItemIndicatorIcon\" />\n </ContextMenuPrimitive.ItemIndicator>\n </ContextMenuPrimitive.RadioItem>\n );\n});\nContextMenuRadioItem.displayName = 'ContextMenu.RadioItem';\n\ntype ContextMenuCheckboxItemElement = React.ElementRef<typeof ContextMenuPrimitive.CheckboxItem>;\ntype ContextMenuCheckboxItemOwnProps = GetPropDefTypes<typeof contextMenuCheckboxItemPropDefs>;\ninterface ContextMenuCheckboxItemProps\n extends ComponentPropsWithout<typeof ContextMenuPrimitive.CheckboxItem, RemovedProps>,\n ContextMenuCheckboxItemOwnProps {}\nconst ContextMenuCheckboxItem = React.forwardRef<\n ContextMenuCheckboxItemElement,\n ContextMenuCheckboxItemProps\n>((props, forwardedRef) => {\n const {\n children,\n className,\n shortcut,\n color = contextMenuCheckboxItemPropDefs.color.default,\n ...itemProps\n } = props;\n return (\n <ContextMenuPrimitive.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-ContextMenuItem',\n 'kui-ContextMenuCheckboxItem',\n className,\n )}\n >\n <Slot.Slottable>{children}</Slot.Slottable>\n <ContextMenuPrimitive.ItemIndicator className=\"kui-BaseMenuItemIndicator kui-ContextMenuItemIndicator\">\n <ThickCheckIcon className=\"kui-BaseMenuItemIndicatorIcon kui-ContextMenuItemIndicatorIcon\" />\n </ContextMenuPrimitive.ItemIndicator>\n {shortcut && <MenuShortcut shortcut={shortcut} className=\"kui-ContextMenuShortcut\" />}\n </ContextMenuPrimitive.CheckboxItem>\n );\n});\nContextMenuCheckboxItem.displayName = 'ContextMenu.CheckboxItem';\n\ninterface ContextMenuSubProps\n extends ComponentPropsWithout<typeof ContextMenuPrimitive.Sub, RemovedProps> {}\nconst ContextMenuSub: React.FC<ContextMenuSubProps> = (props) => (\n <ContextMenuPrimitive.Sub {...props} />\n);\nContextMenuSub.displayName = 'ContextMenu.Sub';\n\ntype ContextMenuSubTriggerElement = React.ElementRef<typeof ContextMenuPrimitive.SubTrigger>;\ninterface ContextMenuSubTriggerProps\n extends ComponentPropsWithout<typeof ContextMenuPrimitive.SubTrigger, RemovedProps> {}\nconst ContextMenuSubTrigger = React.forwardRef<\n ContextMenuSubTriggerElement,\n ContextMenuSubTriggerProps\n>((props, forwardedRef) => {\n const { className, children, ...subTriggerProps } = props;\n return (\n <ContextMenuPrimitive.SubTrigger\n {...subTriggerProps}\n asChild={false}\n ref={forwardedRef}\n className={classNames(\n 'kui-BaseMenuItem',\n 'kui-BaseMenuSubTrigger',\n 'kui-ContextMenuItem',\n 'kui-ContextMenuSubTrigger',\n className,\n )}\n >\n {children}\n <div className=\"kui-BaseMenuShortcut kui-ContextMenuShortcut\">\n <ThickChevronRightIcon className=\"kui-BaseMenuSubTriggerIcon kui-ContextMenuSubTriggerIcon\" />\n </div>\n </ContextMenuPrimitive.SubTrigger>\n );\n});\nContextMenuSubTrigger.displayName = 'ContextMenu.SubTrigger';\n\ntype ContextMenuSubContentElement = React.ElementRef<typeof ContextMenuPrimitive.SubContent>;\ninterface ContextMenuSubContentProps\n extends ComponentPropsWithout<typeof ContextMenuPrimitive.SubContent, RemovedProps>,\n ContextMenuSurfaceProps {\n container?: React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Portal>['container'];\n /**\n * When true, skips the ScrollArea wrapper to allow VirtualMenu to handle its own scrolling.\n */\n virtualized?: boolean;\n}\nconst ContextMenuSubContent = React.forwardRef<\n ContextMenuSubContentElement,\n ContextMenuSubContentProps\n>((props, forwardedRef) => {\n const parent = React.useContext(ContextMenuContentContext);\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 }, contextMenuSubContentPropDefs);\n\n const scalarSize = useResolvedResponsiveValue(size, contextMenuSubContentPropDefs.size.default);\n\n const contextValue = React.useMemo(\n () => ({ size, color }),\n [size, color],\n );\n\n const body = (\n <MenuProvider size={size}>\n <ContextMenuContentContext.Provider value={contextValue}>{children}</ContextMenuContentContext.Provider>\n </MenuProvider>\n );\n\n return (\n <ContextMenuPrimitive.Portal container={container} forceMount={forceMount}>\n <Theme asChild>\n <ContextMenuPrimitive.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-ContextMenuContent',\n 'kui-ContextMenuSubContent',\n className,\n )}\n >\n {virtualized ? (\n <div className={classNames('kui-BaseMenuViewport', 'kui-ContextMenuViewport', 'kui-virtualized')}>\n {body}\n </div>\n ) : (\n <ScrollArea type=\"auto\" scrollbars=\"vertical\">\n <div className={classNames('kui-BaseMenuViewport', 'kui-ContextMenuViewport')}>{body}</div>\n </ScrollArea>\n )}\n </ContextMenuPrimitive.SubContent>\n </Theme>\n </ContextMenuPrimitive.Portal>\n );\n});\nContextMenuSubContent.displayName = 'ContextMenu.SubContent';\n\ntype ContextMenuSeparatorElement = React.ElementRef<typeof ContextMenuPrimitive.Separator>;\ninterface ContextMenuSeparatorProps\n extends ComponentPropsWithout<typeof ContextMenuPrimitive.Separator, RemovedProps> {}\nconst ContextMenuSeparator = React.forwardRef<\n ContextMenuSeparatorElement,\n ContextMenuSeparatorProps\n>(({ className, ...props }, forwardedRef) => (\n <ContextMenuPrimitive.Separator\n {...props}\n asChild={false}\n ref={forwardedRef}\n className={classNames('kui-BaseMenuSeparator', 'kui-ContextMenuSeparator', className)}\n />\n));\nContextMenuSeparator.displayName = 'ContextMenu.Separator';\n\nexport {\n ContextMenuRoot as Root,\n ContextMenuTrigger as Trigger,\n ContextMenuContent as Content,\n ContextMenuLabel as Label,\n ContextMenuItem as Item,\n ContextMenuGroup as Group,\n ContextMenuRadioGroup as RadioGroup,\n ContextMenuRadioItem as RadioItem,\n ContextMenuCheckboxItem as CheckboxItem,\n ContextMenuSub as Sub,\n ContextMenuSubTrigger as SubTrigger,\n ContextMenuSubContent as SubContent,\n ContextMenuSeparator as Separator,\n VirtualMenu as Virtual,\n};\n\nexport type {\n ContextMenuRootProps as RootProps,\n ContextMenuTriggerProps as TriggerProps,\n ContextMenuContentProps as ContentProps,\n ContextMenuLabelProps as LabelProps,\n ContextMenuItemProps as ItemProps,\n ContextMenuGroupProps as GroupProps,\n ContextMenuRadioGroupProps as RadioGroupProps,\n ContextMenuRadioItemProps as RadioItemProps,\n ContextMenuCheckboxItemProps as CheckboxItemProps,\n ContextMenuSubProps as SubProps,\n ContextMenuSubTriggerProps as SubTriggerProps,\n ContextMenuSubContentProps as SubContentProps,\n ContextMenuSeparatorProps as SeparatorProps,\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["context_menu_exports", "__export", "ContextMenuCheckboxItem", "ContextMenuContent", "ContextMenuGroup", "ContextMenuItem", "ContextMenuLabel", "ContextMenuRadioGroup", "ContextMenuRadioItem", "ContextMenuRoot", "ContextMenuSeparator", "ContextMenuSub", "ContextMenuSubContent", "ContextMenuSubTrigger", "ContextMenuTrigger", "VirtualMenu", "React", "classNames", "ContextMenuPrimitive", "Slot", "useCallbackRef", "ContextMenuRoot", "props", "openProp", "onOpenChange", "uncontrolledOpen", "setUncontrolledOpen", "open", "handleOpenChangeProp", "useCallbackRef", "handleOpenChange", "next", "close", "MenuCloseProvider", "ContextMenuPrimitive", "ContextMenuTrigger", "children", "forwardedRef", "requireReactElement", "ContextMenuContentContext", "ContextMenuContent", "ownProps", "useThemeSizeProps", "baseMenuSubContentPropDefs", "themeContext", "useThemeContext", "size", "className", "color", "container", "forceMount", "_submenuBehavior", "virtualized", "contentProps", "extractProps", "resolvedColor", "scalarSize", "useResolvedResponsiveValue", "contextValue", "body", "MenuProvider", "Theme", "getMenuAlignOffset", "classNames", "ScrollArea", "ContextMenuLabel", "ContextMenuItem", "baseMenuItemPropDefs", "shortcut", "itemProps", "toAriaKeyShortcuts", "Slot", "MenuShortcut", "ContextMenuGroup", "ContextMenuRadioGroup", "ContextMenuRadioItem", "baseMenuRadioItemPropDefs", "ThickDotIcon", "ContextMenuCheckboxItem", "baseMenuCheckboxItemPropDefs", "ThickCheckIcon", "ContextMenuSub", "ContextMenuSubTrigger", "subTriggerProps", "ThickChevronRightIcon", "ContextMenuSubContent", "parent", "_color", "subContentProps", "ContextMenuSeparator"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as U}from"./chunk-DUTZUWZP.js";import{a as K,b as F,c as j,e as D,f as O}from"./chunk-432YLNB3.js";import{a as k}from"./chunk-PALE5UWK.js";import{a as H,b as z,c as W}from"./chunk-FDHWAC6W.js";import{b as v}from"./chunk-4ZOVV3TY.js";import{d as G}from"./chunk-62ZGP4ET.js";import{b as L}from"./chunk-FWB47YCH.js";import{a as x}from"./chunk-RWTSGUVJ.js";import{a as ne}from"./chunk-OS3FCYZY.js";var ie={};ne(ie,{Group:()=>ee,GroupContent:()=>te,GroupLabel:()=>re,Menu:()=>$,MenuButton:()=>Q,MenuItem:()=>X,MenuSub:()=>Y,MenuSubContent:()=>_,MenuSubTrigger:()=>Z,Search:()=>ae,Separator:()=>V});import*as e from"react";import p from"classnames";import*as m 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 oe(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 A(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},A(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=A(t.props?.children);return e.cloneElement(t,{...t.props},i)}return r}function J(r){if(r.key!=="ArrowDown"&&r.key!=="ArrowUp")return;let t=r.currentTarget.closest(".kui-SidebarContent, .kui-SidebarSearchPopover"),n=t?Array.from(t.querySelectorAll(".kui-SidebarMenuButton")).filter(d=>d.offsetParent!==null):[],a=n.indexOf(r.currentTarget),i=n[a+(r.key==="ArrowDown"?1:-1)];a!==-1&&i&&(r.preventDefault(),i.focus())}var Q=e.forwardRef(({asChild:r=!1,isActive:t=!1,shortcut:n,badge:a,className:i,children:d,onKeyDown:l,...f},s)=>{let u=v(),c=u?.size??"2",y=u?.presentation==="thin",C=r?L:"button",g=e.useCallback(o=>{J(o),l?.(o)},[l]),S=e.useMemo(()=>A(d),[d]),{icons:R,labels:N}=e.useMemo(()=>y?oe(d):{icons:[],labels:[]},[y,d]),T=e.useMemo(()=>{if(!r)return null;try{let o=e.Children.only(S),M=o.props?.children,P=e.createElement(e.Fragment,null,M,a&&e.createElement("div",{className:"kui-SidebarMenuBadge"},typeof a=="string"?e.createElement(k,{size:c,variant:"soft"},a):e.createElement(k,{size:a.size||c,variant:a.variant||"soft",color:a.color,radius:a.radius},a.content)),n&&e.createElement("div",{className:"kui-BaseMenuShortcut kui-SidebarMenuShortcut"},e.createElement(x,{size:c},n)));return e.cloneElement(o,{...o.props},P)}catch{return S}},[r,S,a,n,c]);return e.createElement(C,{...f,ref:s,"aria-current":t?"page":void 0,className:p("kui-reset","kui-BaseMenuItem","kui-SidebarMenuButton",i),"data-active":t||void 0,onKeyDown:g},r?T:y&&R.length>0?e.createElement(e.Fragment,null,e.createElement("span",{className:"kui-SidebarMenuIconWrapper"},R),N.map((o,M)=>e.createElement(e.Fragment,{key:M},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(k,{size:c,variant:"soft"},a):e.createElement(k,{size:a.size||c,variant:a.variant||"soft",color:a.color,radius:a.radius},a.content)),n&&e.createElement("div",{className:"kui-BaseMenuShortcut kui-SidebarMenuShortcut"},e.createElement(x,{size:c},n))))});Q.displayName="Sidebar.MenuButton";var I=e.createContext("accordion"),Y=e.forwardRef(({defaultOpen:r=!1,children:t,...n},a)=>(v()?.presentation==="thin"?"dropdown":"accordion")==="dropdown"?e.createElement("div",{...n,ref:a},e.createElement(K,null,e.createElement(I.Provider,{value:"dropdown"},t))):e.createElement("div",{...n,ref:a},e.createElement(I.Provider,{value:"accordion"},e.createElement(m.Root,{type:"single",collapsible:!0,defaultValue:r?"item":void 0},e.createElement(m.Item,{value:"item"},t)))));Y.displayName="Sidebar.MenuSub";var Z=e.forwardRef(({asChild:r=!1,className:t,children:n,onKeyDown:a,...i},d)=>e.useContext(I)==="dropdown"?e.createElement(F,null,e.createElement("button",{...i,onKeyDown:a,ref:d,type:"button","aria-haspopup":"menu",className:p("kui-reset","kui-BaseMenuItem","kui-SidebarMenuButton","kui-SidebarMenuSubTrigger",t)},n)):e.createElement(m.Header,{asChild:!0},e.createElement("div",null,e.createElement(m.Trigger,{...i,onKeyDown:f=>{J(f),a?.(f)},ref:d,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")}))))));Z.displayName="Sidebar.MenuSubTrigger";var _=e.forwardRef(({className:r,children:t,...n},a)=>{let i=v();if(e.useContext(I)==="dropdown"){let l=s=>{if(Array.isArray(s))return s.map((u,c)=>e.createElement(e.Fragment,{key:c},l(u)));if(e.isValidElement(s)){if(s.type?.displayName==="Sidebar.MenuButton")return s.props?.children;let c=s.props?.children;if(c!==void 0)return e.cloneElement(s,{...s.props,children:l(c)})}return s},f=e.Children.map(t,(s,u)=>{if(e.isValidElement(s)&&s.type?.displayName==="Sidebar.MenuItem"){let c=s.props?.children,y=l(c);return e.createElement(D,{key:u,asChild:!0},y)}return e.createElement(D,{key:u,asChild:!0},l(s))});return e.createElement(j,{size:i?.size,className:p(r)},e.createElement(O,null,f))}return e.createElement(m.Content,{...n,ref:a,className:p("kui-SidebarMenuSubContent",r)},e.createElement("ul",{className:"kui-SidebarMenuSubList"},t))});_.displayName="Sidebar.MenuSubContent";var ee=e.forwardRef(({className:r,...t},n)=>e.createElement("div",{...t,ref:n,className:p("kui-BaseMenuGroup","kui-SidebarGroup",r)}));ee.displayName="Sidebar.Group";var re=e.forwardRef(({asChild:r=!1,className:t,...n},a)=>e.createElement(r?L:"div",{...n,ref:a,className:p("kui-BaseMenuLabel","kui-SidebarGroupLabel",t)}));re.displayName="Sidebar.GroupLabel";var te=e.forwardRef(({className:r,...t},n)=>e.createElement("div",{...t,ref:n,className:p("kui-SidebarGroupContent",r)}));te.displayName="Sidebar.GroupContent";var E=({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"})),ae=e.forwardRef(({value:r,onValueChange:t,placeholder:n="Search...",children:a,className:i,...d},l)=>{let f=v(),s=f?.presentation==="thin",u=e.useRef(null),c=e.useRef(null),C=`${e.useId()}-results`,g=e.useRef(r);g.current=r;let S=e.useRef(t);S.current=t;let R=n.replace(/\.+$/,""),N=e.useCallback(o=>{o.key==="Escape"&&g.current&&(o.preventDefault(),o.stopPropagation(),S.current(""),u.current?.focus())},[]),T=e.useCallback(o=>{let M=c.current;if(!M)return;let P=M.querySelector('[role="group"]');if(!P)return;let b=Array.from(P.querySelectorAll("a, button"));if(b.length===0)return;let B=document.activeElement,w=B===u.current,h=b.indexOf(B);if(o.key.length===1&&!o.ctrlKey&&!o.metaKey&&!o.altKey&&!w&&h!==-1){u.current?.focus();return}switch(o.key){case"ArrowDown":{o.preventDefault(),w||h===-1?b[0]?.focus():h<b.length-1&&b[h+1]?.focus();break}case"ArrowUp":{o.preventDefault(),h<=0?u.current?.focus():b[h-1]?.focus();break}case"Home":{w||(o.preventDefault(),b[0]?.focus());break}case"End":{w||(o.preventDefault(),b[b.length-1]?.focus());break}}},[]);return s?e.createElement("div",{...d,ref:l,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(E,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:c,className:"kui-SidebarSearchPopover",role:"search",onKeyDown:T},e.createElement("div",{className:"kui-SidebarSearchInputWrapper"},e.createElement(E,{className:"kui-SidebarSearchIcon"}),e.createElement("input",{ref:u,type:"search",className:"kui-SidebarSearchInput",value:r,onChange:o=>t(o.target.value),onKeyDown:N,placeholder:n,"aria-label":R,"aria-controls":a?C:void 0,autoFocus:!0}),r&&e.createElement("button",{type:"button",className:"kui-reset kui-SidebarSearchClear",onClick:()=>{t(""),u.current?.focus()},"aria-label":"Clear search"},e.createElement(q,null))),a&&e.createElement("div",{id:C,role:"group","aria-label":"Search results"},a))))):e.createElement("div",{...d,ref:l,className:p("kui-SidebarSearch","kui-SidebarSearch--expanded","kui-ShellPaneChrome",`kui-r-size-${f?.size??"2"}`,i),role:"search"},e.createElement("div",{className:"kui-SidebarSearchInputWrapper"},e.createElement(E,{className:"kui-SidebarSearchIcon"}),e.createElement("input",{ref:u,type:"search",className:"kui-SidebarSearchInput",value:r,onChange:o=>t(o.target.value),onKeyDown:N,placeholder:n,"aria-label":R}),r&&e.createElement("button",{type:"button",className:"kui-reset kui-SidebarSearchClear",onClick:()=>{t(""),u.current?.focus()},"aria-label":"Clear search"},e.createElement(q,null))))});ae.displayName="Sidebar.Search";export{V as a,$ as b,X as c,Q as d,Y as e,Z as f,_ as g,ee as h,re as i,te as j,ae as k,ie as l};
|
|
2
|
+
//# sourceMappingURL=chunk-3WE4E2WQ.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
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\n// Arrow Up and Down move between the visible buttons of the same sidebar, as a\n// convenience on top of Tab. Sub-menu triggers take part, so the one-item Accordion\n// behind each sub-menu doesn't keep focus on its own trigger.\nfunction focusAdjacentSidebarButton(event: React.KeyboardEvent<HTMLElement>) {\n if (event.key !== 'ArrowDown' && event.key !== 'ArrowUp') return;\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\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.\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLButtonElement>) => {\n focusAdjacentSidebarButton(event);\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, onKeyDown, ...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 onKeyDown={onKeyDown}\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 onKeyDown={(event) => {\n // Runs before the Accordion's own arrow handling, which would keep focus here.\n focusAdjacentSidebarButton(event);\n onKeyDown?.(event);\n }}\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 <ul className=\"kui-SidebarMenuSubList\">{children}</ul>\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", "focusAdjacentSidebarButton", "event", "scope", "buttons", "next", "SidebarMenuButton", "asChild", "isActive", "shortcut", "badge", "children", "onKeyDown", "visual", "useSidebarVisual", "sidebarSize", "isThinMode", "Comp", "Slot", "handleKeyDown", "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
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{b as H,d as P,f as F}from"./chunk-V5O3TF57.js";import*as t from"react";import C from"classnames";import{useVirtualizer as ne}from"@tanstack/react-virtual";var re=t.memo(function({label:n,isHighlighted:c,id:s,style:d,tabIndex:m,"data-highlighted":o,"data-index":f,onMouseEnter:p,onMouseLeave:k,onClick:l,onKeyDown:y}){return t.createElement("div",{id:s,role:"menuitem",className:C("kui-reset","kui-BaseMenuItem","kui-VirtualMenuItem"),style:d,tabIndex:m,"data-highlighted":o,"data-index":f,onMouseEnter:p,onMouseLeave:k,onClick:l,onKeyDown:y},n)},(r,n)=>!(r.label!==n.label||r["data-highlighted"]!==n["data-highlighted"]||r.style.height!==n.style.height||r.style.transform!==n.style.transform||r.tabIndex!==n.tabIndex||r.id!==n.id));function ae(r,n,c){let[s,d]=t.useState(void 0);return t.useLayoutEffect(()=>{let m=r.current;if(!n||!m)return;let o=document.createElement("div");o.className="kui-reset kui-BaseMenuItem kui-VirtualMenuItem",o.setAttribute("aria-hidden","true"),o.style.visibility="hidden",o.textContent="\xA0",m.appendChild(o);let f=o.getBoundingClientRect().height;o.remove(),d(f>0?f:void 0)},[r,n,c]),n?s:void 0}function ie({items:r,itemLabel:n,renderItem:c,size:s,estimatedItemSize:d,overscan:m=5,onSelect:o,className:f,style:p,"aria-label":k},l){let y=t.useId(),E=t.useRef(null),[x,h]=t.useState(-1),{isInsideMenu:g,size:V,itemHeight:$}=P(),L=F(),j=t.useCallback(e=>{E.current=e,typeof l=="function"?l(e):l&&(l.current=e)},[l]),O=ae(E,g&&s==null&&d==null,V),I=d??(s?H(s):O??$??H(V??"2"));if(!n&&!c)throw new Error("VirtualMenu requires either itemLabel or renderItem prop");let _=t.useMemo(()=>n?typeof n=="function"?n:e=>e[n]:null,[n]),b=t.useMemo(()=>r.length===0||x<0?-1:Math.min(x,r.length-1),[x,r.length]),q=t.useMemo(()=>typeof I=="function"?I:()=>I,[I]),R=ne({count:r.length,getScrollElement:()=>E.current,estimateSize:q,overscan:m}),U=R.getVirtualItems();t.useLayoutEffect(()=>{R.measure()},[R,I]),t.useEffect(()=>{let e=E.current;if(!g||!e)return;let a=e.closest("[data-radix-menu-content]");if(!a)return;let u=i=>{i.target===a&&e.focus({preventScroll:!0})};return a.addEventListener("focusin",u),document.activeElement===a&&e.focus({preventScroll:!0}),()=>a.removeEventListener("focusin",u)},[g]);let T=t.useRef(r),D=t.useRef(o),N=t.useRef(L);T.current=r,D.current=o,N.current=L;let M=t.useCallback(e=>{let a=T.current;e<0||e>=a.length||(D.current?.(a[e],e),N.current?.())},[]),v=t.useRef(R.scrollToIndex);v.current=R.scrollToIndex;let S=t.useRef(b);S.current=b;let W=t.useCallback(e=>{let a=e.currentTarget.dataset.index;a!=null&&h(Number(a))},[]),Y=t.useCallback(e=>{let a=e.currentTarget.dataset.index;a!=null&&M(Number(a))},[M]),G=t.useCallback(()=>{},[]),J=t.useCallback(e=>{if(e.key==="Enter"||e.key===" "){e.preventDefault(),e.stopPropagation();let a=e.currentTarget.dataset.index;a!=null&&M(Number(a))}},[M]),Q=t.useCallback(e=>{let a=T.current,u=S.current;switch(e.key){case"ArrowDown":{e.preventDefault();let i=u<a.length-1?u+1:0;h(i),v.current(i,{align:"auto"});break}case"ArrowUp":{e.preventDefault();let i=u>0?u-1:a.length-1;h(i),v.current(i,{align:"auto"});break}case"Home":{e.preventDefault(),h(0),v.current(0,{align:"start"});break}case"End":{e.preventDefault();let i=a.length-1;h(i),v.current(i,{align:"end"});break}case"Enter":case" ":{e.preventDefault(),M(u);break}case"Tab":{e.preventDefault();break}case"Escape":{g||e.currentTarget.blur();break}}},[M,g]),X=t.useCallback(e=>{e.target===e.currentTarget&&S.current<0&&T.current.length>0&&h(0)},[]),z=t.useCallback(e=>`${y}-item-${e}`,[y]),Z=t.useMemo(()=>({overflow:"auto",position:"relative",...p}),[p]),w=R.getTotalSize(),ee=t.useMemo(()=>({height:`${w}px`,width:"100%",position:"relative"}),[w]);return t.createElement("div",{ref:j,role:g?"group":"menu","aria-label":k,"aria-activedescendant":b>=0?z(b):void 0,tabIndex:0,onKeyDown:Q,onFocus:X,className:C("kui-VirtualMenuRoot",f),style:Z},t.createElement("div",{className:"kui-VirtualMenuViewport",style:ee},U.map(e=>{let a=r[e.index],u=e.index,i=b===u,te={height:e.size,transform:`translateY(${e.start}px)`},K={id:z(u),isHighlighted:i,style:te,tabIndex:i?0:-1,"data-highlighted":i?!0:void 0,"data-index":u,onMouseEnter:W,onMouseLeave:G,onClick:Y,onKeyDown:J};return c?t.createElement(c,{key:e.key,item:a,index:u,...K}):t.createElement(re,{key:e.key,label:_(a),...K})})))}var A=t.forwardRef(ie);A.displayName="VirtualMenu";var B=t.forwardRef(({className:r,children:n,...c},s)=>t.createElement("div",{ref:s,role:"menuitem",className:C("kui-reset","kui-BaseMenuItem","kui-VirtualMenuItem",r),...c},n));B.displayName="VirtualMenu.Item";var ue=t.memo(B,(r,n)=>{let c=r.style,s=n.style;return!(c?.height!==s?.height||c?.transform!==s?.transform||r["data-highlighted"]!==n["data-highlighted"]||r.tabIndex!==n.tabIndex||r.id!==n.id||r.className!==n.className||r.children!==n.children)}),le=Object.assign(A,{Item:ue});export{le as a};
|
|
2
|
+
//# sourceMappingURL=chunk-3XUY5WFA.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
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, useMenuClose, 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\n/**\n * Measures the row height the menu's CSS draws (--base-menu-item-height), so rows follow\n * the theme scale instead of the fixed 100% table. Returns undefined until measured.\n */\nfunction useMeasuredRowHeight(\n rootRef: React.RefObject<HTMLDivElement | null>,\n enabled: boolean,\n size: MenuSize | undefined,\n) {\n const [height, setHeight] = React.useState<number | undefined>(undefined);\n React.useLayoutEffect(() => {\n const root = rootRef.current;\n if (!enabled || !root) return;\n const probe = document.createElement('div');\n probe.className = 'kui-reset kui-BaseMenuItem kui-VirtualMenuItem';\n probe.setAttribute('aria-hidden', 'true');\n probe.style.visibility = 'hidden';\n probe.textContent = '\\u00a0';\n root.appendChild(probe);\n const measured = probe.getBoundingClientRect().height;\n probe.remove();\n setHeight(measured > 0 ? measured : undefined);\n }, [rootRef, enabled, size]);\n return enabled ? height : undefined;\n}\n\nfunction VirtualMenuRootInner<T>(\n {\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 forwardedRef: React.ForwardedRef<HTMLDivElement>,\n) {\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 const closeMenu = useMenuClose();\n\n const setRootRef = React.useCallback(\n (node: HTMLDivElement | null) => {\n parentRef.current = node;\n if (typeof forwardedRef === 'function') forwardedRef(node);\n else if (forwardedRef) forwardedRef.current = node;\n },\n [forwardedRef],\n );\n\n // Inside a menu, the CSS row height is measured so it tracks the theme scale.\n const measuredItemHeight = useMeasuredRowHeight(\n parentRef,\n isInsideMenu && sizeProp == null && estimatedItemSizeProp == null,\n contextSize,\n );\n\n // Resolve item height: explicit prop > own size > measured CSS row > parent menu > default size '2'.\n const estimatedItemSize =\n estimatedItemSizeProp ??\n (sizeProp\n ? getMenuItemHeight(sizeProp)\n : (measuredItemHeight ?? 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 // Re-measure cached rows when the resolved row height changes.\n React.useLayoutEffect(() => {\n virtualizer.measure();\n }, [virtualizer, estimatedItemSize]);\n\n // Inside a menu, the menu focuses its own content on open (and a submenu on keyboard\n // open). Hand that focus to the list so arrow keys reach the rows.\n React.useEffect(() => {\n const root = parentRef.current;\n if (!isInsideMenu || !root) return;\n const content = root.closest<HTMLElement>('[data-radix-menu-content]');\n if (!content) return;\n const handleFocusIn = (event: FocusEvent) => {\n if (event.target === content) root.focus({ preventScroll: true });\n };\n content.addEventListener('focusin', handleFocusIn);\n if (document.activeElement === content) root.focus({ preventScroll: true });\n return () => content.removeEventListener('focusin', handleFocusIn);\n }, [isInsideMenu]);\n\n // Refs for stable handler references\n const itemsRef = React.useRef(items);\n const onSelectRef = React.useRef(onSelect);\n const closeMenuRef = React.useRef(closeMenu);\n itemsRef.current = items;\n onSelectRef.current = onSelect;\n closeMenuRef.current = closeMenu;\n\n // Choosing a row calls onSelect, then closes the parent menu like a menu item does.\n const selectIndex = React.useCallback((idx: number) => {\n const currentItems = itemsRef.current;\n if (idx < 0 || idx >= currentItems.length) return;\n onSelectRef.current?.(currentItems[idx], idx);\n closeMenuRef.current?.();\n }, []);\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) selectIndex(Number(index));\n }, [selectIndex]);\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 e.stopPropagation();\n const index = e.currentTarget.dataset.index;\n if (index != null) selectIndex(Number(index));\n }\n }, [selectIndex]);\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 selectIndex(currentHighlightedIndex);\n break;\n }\n case 'Tab': {\n e.preventDefault();\n break;\n }\n case 'Escape': {\n // Inside a menu, the menu handles Escape and returns focus to its trigger.\n if (!isInsideMenu) (e.currentTarget as HTMLElement).blur();\n break;\n }\n }\n }, [selectIndex, isInsideMenu]);\n\n // Keyboard focus on the list highlights the first row when none is highlighted.\n const handleFocus = React.useCallback((e: React.FocusEvent<HTMLDivElement>) => {\n if (e.target !== e.currentTarget) return;\n if (highlightedIndexRef.current < 0 && itemsRef.current.length > 0) setHighlightedIndex(0);\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={setRootRef}\n role={isInsideMenu ? 'group' : 'menu'}\n aria-label={ariaLabel}\n aria-activedescendant={safeHighlightedIndex >= 0 ? getItemId(safeHighlightedIndex) : undefined}\n tabIndex={0}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\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\nconst VirtualMenuRoot = React.forwardRef(VirtualMenuRootInner) as (<T>(\n props: VirtualMenuProps<T> & React.RefAttributes<HTMLDivElement>,\n) => React.ReactElement) & { displayName?: string };\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", "useMeasuredRowHeight", "rootRef", "enabled", "size", "height", "setHeight", "root", "probe", "measured", "VirtualMenuRootInner", "items", "itemLabel", "RenderItem", "sizeProp", "estimatedItemSizeProp", "overscan", "onSelect", "className", "ariaLabel", "forwardedRef", "menuId", "parentRef", "highlightedIndex", "setHighlightedIndex", "isInsideMenu", "contextSize", "contextItemHeight", "useMenuContext", "closeMenu", "useMenuClose", "setRootRef", "node", "measuredItemHeight", "estimatedItemSize", "getMenuItemHeight", "getLabel", "item", "safeHighlightedIndex", "getItemSize", "virtualizer", "useVirtualizer", "virtualItems", "content", "handleFocusIn", "event", "itemsRef", "onSelectRef", "closeMenuRef", "selectIndex", "idx", "currentItems", "scrollToIndexRef", "highlightedIndexRef", "handleItemMouseEnter", "index", "handleItemClick", "noop", "handleItemKeyDown", "handleKeyDown", "currentHighlightedIndex", "nextIndex", "prevIndex", "lastIndex", "handleFocus", "getItemId", "rootStyle", "totalSize", "viewportStyle", "virtualRow", "isHighlighted", "itemStyle", "commonProps", "VirtualMenuRoot", "VirtualMenuItemInner", "children", "props", "VirtualMenuItem", "prevProps", "nextProps", "prevStyle", "nextStyle", "VirtualMenu"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as A}from"./chunk-IWCFJJBI.js";import{a as p}from"./chunk-UONSKZQT.js";import{a as h}from"./chunk-CN6F4REJ.js";import{a as P}from"./chunk-PS6NEG5A.js";import{a as S}from"./chunk-NUVUXNHF.js";import{a as b}from"./chunk-EKTVL6SS.js";import{a as u}from"./chunk-ELAW7ZUG.js";import*as r from"react";import H from"classnames";import{ScrollArea as l}from"radix-ui";import{useComposedRefs as C}from"radix-ui/internal";var W='[role="menu"], [role="listbox"]';function k(e,s){r.useEffect(()=>{if(!s||!e||e.closest(W))return;let o=0,a=()=>{o=0,e.scrollHeight>e.clientHeight||e.scrollWidth>e.clientWidth?e.setAttribute("tabindex","0"):e.removeAttribute("tabindex")},n=()=>{o||(o=requestAnimationFrame(a))};a();let t=typeof ResizeObserver>"u"?null:new ResizeObserver(n);t?.observe(e);for(let i of Array.from(e.children))t?.observe(i);return()=>{o&&cancelAnimationFrame(o),t?.disconnect()}},[e,s])}var x=r.forwardRef((e,s)=>{let{asChild:o,children:a,className:n,style:t,type:i,scrollHideDelay:v=i!=="scroll"?0:void 0,dir:y,radius:d=p.radius.default,scrollbars:m=p.scrollbars.default,fade:f=p.fade.default,...c}=u(e,b,S),[R,w]=r.useState(null),D=h(f),N=A(),T=C(s,D,N,w);k(R,c.tabIndex===void 0);let g=c["aria-label"]!==void 0||c["aria-labelledby"]!==void 0;return r.createElement(l.Root,{type:i,scrollHideDelay:v,dir:y,className:H("kui-ScrollAreaRoot",n),"data-fade":f?"":void 0,style:t,asChild:o},P({asChild:o,children:a},E=>r.createElement(r.Fragment,null,r.createElement(l.Viewport,{role:g?"region":void 0,...c,ref:T,className:"kui-ScrollAreaViewport"},E),r.createElement("div",{className:"kui-ScrollAreaViewportFocusRing"}),m!=="vertical"?r.createElement(l.Scrollbar,{"data-radius":d,orientation:"horizontal",className:"kui-ScrollAreaScrollbar"},r.createElement(l.Thumb,{className:"kui-ScrollAreaThumb"})):null,m!=="horizontal"?r.createElement(l.Scrollbar,{"data-radius":d,orientation:"vertical",className:"kui-ScrollAreaScrollbar"},r.createElement(l.Thumb,{className:"kui-ScrollAreaThumb"})):null,m==="both"?r.createElement(l.Corner,{className:"kui-ScrollAreaCorner"}):null)))});x.displayName="ScrollArea";export{x as a};
|
|
2
|
+
//# sourceMappingURL=chunk-3XZOE2IQ.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/components/scroll-area.tsx"],
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nimport classNames from 'classnames';\nimport { ScrollArea as ScrollAreaPrimitive } from 'radix-ui';\nimport { useComposedRefs } from 'radix-ui/internal';\n\nimport { scrollAreaPropDefs } from './scroll-area.props.js';\nimport { useScrollEdges } from '../hooks/use-scroll-edges.js';\nimport { useThumbSync } from '../hooks/use-thumb-sync.js';\nimport { getSubtree } from '../helpers/get-subtree.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport { widthPropDefs } from '../props/width.props.js';\nimport { heightPropDefs } from '../props/height.props.js';\n\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { GetPropDefTypes } from '../props/prop-def.js';\nimport type { WidthProps } from '../props/width.props.js';\nimport type { HeightProps } from '../props/height.props.js';\n\ntype ScrollAreaElement = React.ElementRef<typeof ScrollAreaPrimitive.Viewport>;\ntype ScrollAreaOwnProps = GetPropDefTypes<typeof scrollAreaPropDefs>;\ninterface ScrollAreaProps\n extends ComponentPropsWithout<typeof ScrollAreaPrimitive.Root, RemovedProps>,\n ComponentPropsWithout<typeof ScrollAreaPrimitive.Viewport, RemovedProps | 'dir'>,\n ScrollAreaOwnProps,\n WidthProps,\n HeightProps {}\n\n/** Menus and listboxes move focus between their items, so a scroller inside one stays out of the tab order. */\nconst OWNS_FOCUS = '[role=\"menu\"], [role=\"listbox\"]';\n\n/**\n * Puts the viewport in the tab order while it has something to scroll, so a keyboard can reach it\n * and scroll it with the arrow keys. A `tabIndex` the caller set wins.\n */\nfunction useFocusableWhileScrollable(element: HTMLDivElement | null, enabled: boolean) {\n React.useEffect(() => {\n if (!enabled || !element || element.closest(OWNS_FOCUS)) return;\n let frame = 0;\n const update = () => {\n frame = 0;\n const scrollable = element.scrollHeight > element.clientHeight || element.scrollWidth > element.clientWidth;\n if (scrollable) element.setAttribute('tabindex', '0');\n else element.removeAttribute('tabindex');\n };\n const schedule = () => {\n if (!frame) frame = requestAnimationFrame(update);\n };\n update();\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 return () => {\n if (frame) cancelAnimationFrame(frame);\n // The attribute stays: a caller who now sets `tabIndex` has already written it.\n observer?.disconnect();\n };\n }, [element, enabled]);\n}\n\nconst ScrollArea = React.forwardRef<ScrollAreaElement, ScrollAreaProps>((props, forwardedRef) => {\n const {\n asChild,\n children,\n className,\n style,\n type,\n scrollHideDelay = type !== 'scroll' ? 0 : undefined,\n dir,\n radius = scrollAreaPropDefs.radius.default,\n scrollbars = scrollAreaPropDefs.scrollbars.default,\n fade = scrollAreaPropDefs.fade.default,\n ...viewportProps\n } = extractProps(props, widthPropDefs, heightPropDefs);\n const [viewport, setViewport] = React.useState<HTMLDivElement | null>(null);\n const setEdgesElement = useScrollEdges<HTMLDivElement>(fade);\n const setThumbViewport = useThumbSync<HTMLDivElement>();\n const viewportRef = useComposedRefs(forwardedRef, setEdgesElement, setThumbViewport, setViewport);\n useFocusableWhileScrollable(viewport, viewportProps.tabIndex === undefined);\n // A named scroller is a region, so a screen reader can find it and say what it holds.\n const named = viewportProps['aria-label'] !== undefined || viewportProps['aria-labelledby'] !== undefined;\n\n return (\n <ScrollAreaPrimitive.Root\n type={type}\n scrollHideDelay={scrollHideDelay}\n dir={dir}\n className={classNames('kui-ScrollAreaRoot', className)}\n data-fade={fade ? '' : undefined}\n style={style}\n asChild={asChild}\n >\n {getSubtree({ asChild, children }, (children) => (\n <>\n <ScrollAreaPrimitive.Viewport\n role={named ? 'region' : undefined}\n {...viewportProps}\n ref={viewportRef}\n className=\"kui-ScrollAreaViewport\"\n >\n {children}\n </ScrollAreaPrimitive.Viewport>\n\n <div className=\"kui-ScrollAreaViewportFocusRing\" />\n\n {scrollbars !== 'vertical' ? (\n <ScrollAreaPrimitive.Scrollbar\n data-radius={radius}\n orientation=\"horizontal\"\n className=\"kui-ScrollAreaScrollbar\"\n >\n <ScrollAreaPrimitive.Thumb className=\"kui-ScrollAreaThumb\" />\n </ScrollAreaPrimitive.Scrollbar>\n ) : null}\n\n {scrollbars !== 'horizontal' ? (\n <ScrollAreaPrimitive.Scrollbar\n data-radius={radius}\n orientation=\"vertical\"\n className=\"kui-ScrollAreaScrollbar\"\n >\n <ScrollAreaPrimitive.Thumb className=\"kui-ScrollAreaThumb\" />\n </ScrollAreaPrimitive.Scrollbar>\n ) : null}\n\n {scrollbars === 'both' ? (\n <ScrollAreaPrimitive.Corner className=\"kui-ScrollAreaCorner\" />\n ) : null}\n </>\n ))}\n </ScrollAreaPrimitive.Root>\n );\n});\nScrollArea.displayName = 'ScrollArea';\n\nexport { ScrollArea };\nexport type { ScrollAreaProps };\n"],
|
|
5
|
+
"mappings": "wRAAA,UAAYA,MAAW,QACvB,OAAOC,MAAgB,aACvB,OAAS,cAAcC,MAA2B,WAClD,OAAS,mBAAAC,MAAuB,oBAyBhC,IAAMC,EAAa,kCAMnB,SAASC,EAA4BC,EAAgCC,EAAkB,CAC/E,YAAU,IAAM,CACpB,GAAI,CAACA,GAAW,CAACD,GAAWA,EAAQ,QAAQF,CAAU,EAAG,OACzD,IAAII,EAAQ,EACNC,EAAS,IAAM,CACnBD,EAAQ,EACWF,EAAQ,aAAeA,EAAQ,cAAgBA,EAAQ,YAAcA,EAAQ,YAChFA,EAAQ,aAAa,WAAY,GAAG,EAC/CA,EAAQ,gBAAgB,UAAU,CACzC,EACMI,EAAW,IAAM,CAChBF,IAAOA,EAAQ,sBAAsBC,CAAM,EAClD,EACAA,EAAO,EACP,IAAME,EAAW,OAAO,eAAmB,IAAc,KAAO,IAAI,eAAeD,CAAQ,EAC3FC,GAAU,QAAQL,CAAO,EACzB,QAAWM,KAAS,MAAM,KAAKN,EAAQ,QAAQ,EAAGK,GAAU,QAAQC,CAAK,EACzE,MAAO,IAAM,CACPJ,GAAO,qBAAqBA,CAAK,EAErCG,GAAU,WAAW,CACvB,CACF,EAAG,CAACL,EAASC,CAAO,CAAC,CACvB,CAEA,IAAMM,EAAmB,aAA+C,CAACC,EAAOC,IAAiB,CAC/F,GAAM,CACJ,QAAAC,EACA,SAAAC,EACA,UAAAC,EACA,MAAAC,EACA,KAAAC,EACA,gBAAAC,EAAkBD,IAAS,SAAW,EAAI,OAC1C,IAAAE,EACA,OAAAC,EAASC,EAAmB,OAAO,QACnC,WAAAC,EAAaD,EAAmB,WAAW,QAC3C,KAAAE,EAAOF,EAAmB,KAAK,QAC/B,GAAGG,CACL,EAAIC,EAAad,EAAOe,EAAeC,CAAc,EAC/C,CAACC,EAAUC,CAAW,EAAU,WAAgC,IAAI,EACpEC,EAAkBC,EAA+BR,CAAI,EACrDS,EAAmBC,EAA6B,EAChDC,EAAcC,EAAgBvB,EAAckB,EAAiBE,EAAkBH,CAAW,EAChG3B,EAA4B0B,EAAUJ,EAAc,WAAa,MAAS,EAE1E,IAAMY,EAAQZ,EAAc,YAAY,IAAM,QAAaA,EAAc,iBAAiB,IAAM,OAEhG,OACE,gBAACa,EAAoB,KAApB,CACC,KAAMpB,EACN,gBAAiBC,EACjB,IAAKC,EACL,UAAWmB,EAAW,qBAAsBvB,CAAS,EACrD,YAAWQ,EAAO,GAAK,OACvB,MAAOP,EACP,QAASH,GAER0B,EAAW,CAAE,QAAA1B,EAAS,SAAAC,CAAS,EAAIA,GAClC,gCACE,gBAACuB,EAAoB,SAApB,CACC,KAAMD,EAAQ,SAAW,OACxB,GAAGZ,EACJ,IAAKU,EACL,UAAU,0BAETpB,CACH,EAEA,gBAAC,OAAI,UAAU,kCAAkC,EAEhDQ,IAAe,WACd,gBAACe,EAAoB,UAApB,CACC,cAAajB,EACb,YAAY,aACZ,UAAU,2BAEV,gBAACiB,EAAoB,MAApB,CAA0B,UAAU,sBAAsB,CAC7D,EACE,KAEHf,IAAe,aACd,gBAACe,EAAoB,UAApB,CACC,cAAajB,EACb,YAAY,WACZ,UAAU,2BAEV,gBAACiB,EAAoB,MAApB,CAA0B,UAAU,sBAAsB,CAC7D,EACE,KAEHf,IAAe,OACd,gBAACe,EAAoB,OAApB,CAA2B,UAAU,uBAAuB,EAC3D,IACN,CACD,CACH,CAEJ,CAAC,EACD3B,EAAW,YAAc",
|
|
6
|
+
"names": ["React", "classNames", "ScrollAreaPrimitive", "useComposedRefs", "OWNS_FOCUS", "useFocusableWhileScrollable", "element", "enabled", "frame", "update", "schedule", "observer", "child", "ScrollArea", "props", "forwardedRef", "asChild", "children", "className", "style", "type", "scrollHideDelay", "dir", "radius", "scrollAreaPropDefs", "scrollbars", "fade", "viewportProps", "extractProps", "widthPropDefs", "heightPropDefs", "viewport", "setViewport", "setEdgesElement", "useScrollEdges", "setThumbViewport", "useThumbSync", "viewportRef", "useComposedRefs", "named", "ScrollAreaPrimitive", "classNames", "getSubtree"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as re}from"./chunk-3XUY5WFA.js";import{a as ne}from"./chunk-MJJ7XDIP.js";import{b as oe,c as G}from"./chunk-PPZY7PJA.js";import{c as B,e as ee}from"./chunk-V5O3TF57.js";import{a as O}from"./chunk-3XZOE2IQ.js";import{b as W,c as V,d as k,e as A,f as F}from"./chunk-62ZGP4ET.js";import{e as j}from"./chunk-3YLYGKFB.js";import{b as v,c as h,d as H,e as U,f as Y}from"./chunk-3XHTJZNP.js";import{b as y,c as q,d as T,e as x}from"./chunk-KZEZDBE7.js";import{a as S}from"./chunk-ELAW7ZUG.js";import{a as f,b as I,c as X,d as $,e as E,f as J,g as Q,h as Z,i as N}from"./chunk-2E4P5XQL.js";import{a as he}from"./chunk-OS3FCYZY.js";var Be={};he(Be,{CheckboxItem:()=>De,Content:()=>pe,Group:()=>ce,Item:()=>le,Label:()=>de,RadioGroup:()=>me,RadioItem:()=>we,Root:()=>ae,Separator:()=>Pe,Sub:()=>Me,SubContent:()=>Re,SubTrigger:()=>fe,Trigger:()=>ue,TriggerIcon:()=>ge,Virtual:()=>re});import*as e from"react";import d from"classnames";import{DropdownMenu as s,Slot as z}from"radix-ui";import{useCallbackRef as te}from"radix-ui/internal";var ie=e.createContext(!1),ae=o=>{let{open:n,defaultOpen:r=!1,onOpenChange:a}=o,[i,t]=e.useState(r),u=n??i,l=te(a),p=e.useCallback(m=>{t(m),l(m)},[l]),w=e.useCallback(()=>p(!1),[p]);return e.createElement(ie.Provider,{value:u},e.createElement(ee,{value:w},e.createElement(s.Root,{...o,open:u,onOpenChange:p})))};ae.displayName="DropdownMenu.Root";var ue=e.forwardRef(({children:o,...n},r)=>e.createElement(s.Trigger,{...n,ref:r,asChild:!0},ne(o)));ue.displayName="DropdownMenu.Trigger";var L=e.createContext({}),ye={ltr:"ArrowLeft",rtl:"ArrowRight"},Te={ltr:"ArrowRight",rtl:"ArrowLeft"};function xe(o){return o instanceof HTMLElement&&(o.isContentEditable||o.tagName==="INPUT"||o.tagName==="TEXTAREA")}function se(o){return o?.closest("[dir]")?.getAttribute("dir")==="rtl"?"rtl":"ltr"}var pe=e.forwardRef((o,n)=>{let r=j(o,v.size),a=oe(),{size:i=v.size.default}=r,{className:t,children:u,color:l,container:p,forceMount:w,submenuBehavior:m,virtualized:c=!1,onEscapeKeyDown:R,onKeyDown:C,...P}=S(r,v),D=l||a.accentColor,b=y(m,"cascade"),_=b==="drill-down",Ie=e.useContext(ie),g=X(),ve=M=>{R?.(M),!(M.defaultPrevented||!_||g.getDepth()===0)&&(M.preventDefault(),g.pop("keyboard"))},Se=M=>{C?.(M),!(M.defaultPrevented||!_||g.getDepth()===0)&&(xe(M.target)||M.key===ye[se(M.currentTarget)]&&(M.preventDefault(),g.pop("keyboard")))},ke=e.useMemo(()=>({size:i,color:D}),[i,D]),K=e.createElement(B,{size:i},e.createElement(L.Provider,{value:ke},e.createElement($,{store:g,behavior:b,open:Ie},u)));return e.createElement(s.Portal,{container:p,forceMount:w},e.createElement(G,{asChild:!0},e.createElement(s.Content,{"data-accent-color":D,align:"start",sideOffset:4,collisionPadding:10,...P,onEscapeKeyDown:ve,onKeyDown:Se,asChild:!1,ref:n,className:d("kui-PopperContent","kui-BaseMenuContent","kui-variant-soft","kui-DropdownMenuContent",t)},c?e.createElement("div",{className:d("kui-BaseMenuViewport","kui-DropdownMenuViewport","kui-virtualized")},K):e.createElement(O,{type:"auto",scrollbars:"vertical"},e.createElement("div",{className:d("kui-BaseMenuViewport","kui-DropdownMenuViewport")},K)))))});pe.displayName="DropdownMenu.Content";var de=e.forwardRef(({className:o,...n},r)=>e.useContext(f)?e.createElement(s.Label,{...n,asChild:!1,ref:r,className:d("kui-BaseMenuLabel","kui-DropdownMenuLabel",o)}):null);de.displayName="DropdownMenu.Label";var le=e.forwardRef((o,n)=>{let{className:r,children:a,color:i=H.color.default,shortcut:t,...u}=o;return e.useContext(f)?e.createElement(s.Item,{"data-accent-color":i,"aria-keyshortcuts":t?T(t):void 0,...u,ref:n,className:d("kui-reset","kui-BaseMenuItem","kui-DropdownMenuItem",r)},e.createElement(z.Slottable,null,a),t&&e.createElement(x,{shortcut:t,className:"kui-DropdownMenuShortcut"})):null});le.displayName="DropdownMenu.Item";var ce=e.forwardRef(({className:o,...n},r)=>e.createElement(s.Group,{...n,asChild:!1,ref:r,className:d("kui-BaseMenuGroup","kui-DropdownMenuGroup",o)}));ce.displayName="DropdownMenu.Group";var me=e.forwardRef(({className:o,...n},r)=>e.createElement(s.RadioGroup,{...n,asChild:!1,ref:r,className:d("kui-BaseMenuRadioGroup","kui-DropdownMenuRadioGroup",o)}));me.displayName="DropdownMenu.RadioGroup";var we=e.forwardRef((o,n)=>{let{children:r,className:a,color:i=Y.color.default,...t}=o;return e.useContext(f)?e.createElement(s.RadioItem,{...t,asChild:!1,ref:n,"data-accent-color":i,className:d("kui-BaseMenuItem","kui-BaseMenuRadioItem","kui-DropdownMenuItem","kui-DropdownMenuRadioItem",a)},e.createElement(z.Slottable,null,r),e.createElement(s.ItemIndicator,{className:"kui-BaseMenuItemIndicator kui-DropdownMenuItemIndicator"},e.createElement(F,{className:"kui-BaseMenuItemIndicatorIcon kui-DropdownMenuItemIndicatorIcon"}))):null});we.displayName="DropdownMenu.RadioItem";var De=e.forwardRef((o,n)=>{let{children:r,className:a,shortcut:i,color:t=U.color.default,...u}=o;return e.useContext(f)?e.createElement(s.CheckboxItem,{"aria-keyshortcuts":i?T(i):void 0,...u,asChild:!1,ref:n,"data-accent-color":t,className:d("kui-BaseMenuItem","kui-BaseMenuCheckboxItem","kui-DropdownMenuItem","kui-DropdownMenuCheckboxItem",a)},e.createElement(z.Slottable,null,r),e.createElement(s.ItemIndicator,{className:"kui-BaseMenuItemIndicator kui-DropdownMenuItemIndicator"},e.createElement(W,{className:"kui-BaseMenuItemIndicatorIcon kui-DropdownMenuItemIndicatorIcon"})),i&&e.createElement(x,{shortcut:i,className:"kui-DropdownMenuShortcut"})):null});De.displayName="DropdownMenu.CheckboxItem";var Me=({label:o="Back",open:n,defaultOpen:r,onOpenChange:a,children:i})=>{let t=I(),u=e.useId(),l=e.useMemo(()=>({id:u,label:o}),[u,o]),p=E(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 w=e.useRef(r);e.useLayoutEffect(()=>{t&&w.current&&n===void 0&&t.push(u,null)},[]);let m=te(a),c=e.useRef(p);return e.useEffect(()=>{!t||c.current===p||(c.current=p,m(p))},[t,p,m]),e.createElement(Z.Provider,{value:l},e.createElement(s.Sub,{open:n,defaultOpen:r,onOpenChange:t?void 0:a},i))};Me.displayName="DropdownMenu.Sub";var fe=e.forwardRef((o,n)=>{let{className:r,children:a,onKeyDown:i,...t}=o,u=I(),l=N(),p=e.useContext(f);if(u&&l){if(!p)return null;let w=c=>{c.preventDefault(),u.push(l.id)},m=c=>{i?.(c),!(c.defaultPrevented||t.disabled)&&c.key===Te[se(c.currentTarget)]&&(c.preventDefault(),u.push(l.id,"keyboard"))};return e.createElement(s.Item,{"aria-haspopup":"menu",...t,"data-drill-down-trigger":l.id,"data-drill-down-name":t.textValue,onSelect:w,onKeyDown:m,ref:n,className:d("kui-reset","kui-BaseMenuItem","kui-BaseMenuSubTrigger","kui-DropdownMenuItem","kui-DropdownMenuSubTrigger","kui-DropdownMenuDrillDownSubTrigger",r)},a,e.createElement("div",{className:"kui-BaseMenuShortcut kui-DropdownMenuShortcut"},e.createElement(k,{className:"kui-BaseMenuSubTriggerIcon kui-DropdownMenuSubTriggerIcon"})))}return e.createElement(s.SubTrigger,{...t,onKeyDown:i,asChild:!1,ref:n,className:d("kui-BaseMenuItem","kui-BaseMenuSubTrigger","kui-DropdownMenuItem","kui-DropdownMenuSubTrigger",r)},a,e.createElement("div",{className:"kui-BaseMenuShortcut kui-DropdownMenuShortcut"},e.createElement(k,{className:"kui-BaseMenuSubTriggerIcon kui-DropdownMenuSubTriggerIcon"})))});fe.displayName="DropdownMenu.SubTrigger";var Pe=e.forwardRef(({className:o,...n},r)=>e.useContext(f)?e.createElement(s.Separator,{...n,asChild:!1,ref:r,className:d("kui-BaseMenuSeparator","kui-DropdownMenuSeparator",o)}):null);Pe.displayName="DropdownMenu.Separator";function Ee({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(s.Item,{"aria-label":t,textValue:i||"Back",onSelect:a,className:d("kui-reset","kui-BaseMenuItem","kui-DropdownMenuItem","kui-DropdownMenuDrillDownBackItem")},e.createElement(A,{className:"kui-BaseMenuSubTriggerIcon kui-DropdownMenuDrillDownBackIcon"}),e.createElement("span",{className:"kui-DropdownMenuDrillDownBackLabel"},o))}function Ne(o){let{loop:n,onEscapeKeyDown:r,onPointerDownOutside:a,onFocusOutside:i,onInteractOutside:t,sideOffset:u,alignOffset:l,avoidCollisions:p,collisionBoundary:w,collisionPadding:m,arrowPadding:c,sticky:R,hideWhenDetached:C,updatePositionStrategy:P,...D}=o;return D}var Re=e.forwardRef((o,n)=>{let r=I(),a=N();return r&&a?e.createElement(be,{...o,ref:n,store:r,sub:a}):e.createElement(Ce,{...o,ref:n})});Re.displayName="DropdownMenu.SubContent";var Ce=e.forwardRef((o,n)=>{let r=e.useContext(L),a=o.size??r.size,i=o.color??r.color,{className:t,children:u,container:l,forceMount:p,color:w,virtualized:m=!1,...c}=S({...o,size:a},h),R=y(a,h.size.default),C=e.useMemo(()=>({size:a,color:i}),[a,i]),P=e.createElement(B,{size:a},e.createElement(L.Provider,{value:C},u));return e.createElement(s.Portal,{container:l,forceMount:p},e.createElement(G,{asChild:!0},e.createElement(s.SubContent,{"data-accent-color":i,alignOffset:q(R),sideOffset:1,collisionPadding:10,...c,asChild:!1,ref:n,className:d("kui-PopperContent","kui-BaseMenuContent","kui-variant-soft","kui-BaseMenuSubContent","kui-DropdownMenuContent","kui-DropdownMenuSubContent",t)},m?e.createElement("div",{className:d("kui-BaseMenuViewport","kui-DropdownMenuViewport","kui-virtualized")},P):e.createElement(O,{type:"auto",scrollbars:"vertical"},e.createElement("div",{className:d("kui-BaseMenuViewport","kui-DropdownMenuViewport")},P)))))});Ce.displayName="DropdownMenu.CascadeSubContent";var be=e.forwardRef(({store:o,sub:n,...r},a)=>{let i=E(o,n.id),t=J(o,n.id),u=Q(i==="top"?o:null);if(i==="closed")return null;let{className:l,children:p,container:w,forceMount:m,virtualized:c,size:R,color:C,...P}=Ne(r),D=i==="top",b=t?.name||(typeof n.label=="string"?n.label:"");return e.createElement("div",{role:"group","aria-label":b||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:d("kui-DropdownMenuDrillDownPanel",l)},D&&e.createElement(e.Fragment,null,e.createElement(Ee,{label:n.label,name:b}),e.createElement(s.Separator,{className:"kui-BaseMenuSeparator kui-DropdownMenuSeparator"})),e.createElement(f.Provider,{value:D},p))});be.displayName="DropdownMenu.DrillDownPanel";var ge=e.forwardRef(({className:o,...n},r)=>e.createElement(V,{...n,ref:r,className:d("kui-DropdownMenuTriggerIcon",o)}));ge.displayName="DropdownMenu.TriggerIcon";export{ae as a,ue as b,pe as c,de as d,le as e,ce as f,me as g,we as h,De as i,Me as j,fe as k,Pe as l,Re as m,ge as n,Be as o};
|
|
2
|
+
//# sourceMappingURL=chunk-432YLNB3.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/components/dropdown-menu.tsx"],
|
|
4
|
+
"sourcesContent": ["'use client';\n\nimport * as React from 'react';\nimport { 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 { MenuCloseProvider, 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 const close = React.useCallback(() => handleOpenChange(false), [handleOpenChange]);\n\n return (\n <DropdownMenuOpenContext.Provider value={open}>\n <MenuCloseProvider value={close}>\n <DropdownMenuPrimitive.Root {...props} open={open} onOpenChange={handleOpenChange} />\n </MenuCloseProvider>\n </DropdownMenuOpenContext.Provider>\n );\n};\nDropdownMenuRoot.displayName = 'DropdownMenu.Root';\n\ntype DropdownMenuTriggerElement = React.ElementRef<typeof DropdownMenuPrimitive.Trigger>;\ninterface DropdownMenuTriggerProps\n extends ComponentPropsWithout<typeof DropdownMenuPrimitive.Trigger, RemovedProps> {}\nconst DropdownMenuTrigger = React.forwardRef<DropdownMenuTriggerElement, DropdownMenuTriggerProps>(\n ({ children, ...props }, forwardedRef) => (\n <DropdownMenuPrimitive.Trigger {...props} ref={forwardedRef} asChild>\n {requireReactElement(children)}\n </DropdownMenuPrimitive.Trigger>\n ),\n);\nDropdownMenuTrigger.displayName = 'DropdownMenu.Trigger';\n\n/** Visual props shared by Content and SubContent. */\ntype DropdownMenuSurfaceProps = GetPropDefTypes<typeof dropdownMenuSubContentPropDefs>;\n\ntype DropdownMenuContentContextValue = {\n size?: DropdownMenuSurfaceProps['size'];\n color?: DropdownMenuSurfaceProps['color'];\n};\nconst DropdownMenuContentContext = React.createContext<DropdownMenuContentContextValue>({});\n\n/** Keys that navigate back one drill-down level, by writing direction. */\nconst BACK_KEYS = { ltr: 'ArrowLeft', rtl: 'ArrowRight' } as const;\nconst FORWARD_KEYS = { ltr: 'ArrowRight', rtl: 'ArrowLeft' } as const;\n\nfunction isTextEntryTarget(target: EventTarget | null) {\n return (\n target instanceof HTMLElement &&\n (target.isContentEditable || target.tagName === 'INPUT' || target.tagName === 'TEXTAREA')\n );\n}\n\nfunction getDirection(element: HTMLElement | null): 'ltr' | 'rtl' {\n return element?.closest('[dir]')?.getAttribute('dir') === 'rtl' ? 'rtl' : 'ltr';\n}\n\ntype DropdownMenuContentElement = React.ElementRef<typeof DropdownMenuPrimitive.Content>;\ninterface DropdownMenuContentProps\n extends ComponentPropsWithout<typeof DropdownMenuPrimitive.Content, RemovedProps>,\n DropdownMenuSurfaceProps {\n container?: React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Portal>['container'];\n /**\n * Controls how submenus behave.\n * - `cascade`: Default cascading behavior where submenus open to the side (portal-based)\n * - `drill-down`: Mobile-friendly behavior where submenus replace the content inline\n * Supports responsive values: `{ initial: 'drill-down', md: 'cascade' }`\n */\n submenuBehavior?: Responsive<SubmenuBehavior>;\n /**\n * When true, skips the ScrollArea wrapper to allow VirtualMenu to handle its own scrolling.\n * Use this when rendering virtualized lists inside the dropdown.\n */\n virtualized?: boolean;\n}\nconst DropdownMenuContent = React.forwardRef<DropdownMenuContentElement, DropdownMenuContentProps>(\n (ownProps, forwardedRef) => {\n const props = useThemeSizeProps(ownProps, dropdownMenuContentPropDefs.size);\n const themeContext = useThemeContext();\n const {\n size = dropdownMenuContentPropDefs.size.default,\n } = props;\n const {\n className,\n children,\n color,\n container,\n forceMount,\n submenuBehavior,\n virtualized = false,\n onEscapeKeyDown,\n onKeyDown,\n ...contentProps\n } = extractProps(props, dropdownMenuContentPropDefs);\n\n const resolvedColor = color || themeContext.accentColor;\n const behavior = useResolvedResponsiveValue<SubmenuBehavior>(submenuBehavior, 'cascade');\n const isDrillDown = behavior === 'drill-down';\n const open = React.useContext(DropdownMenuOpenContext);\n const drillDownStore = useCreateDrillDownStore();\n\n // Escape goes back one drill-down level before it closes the menu.\n const handleEscapeKeyDown = (event: KeyboardEvent) => {\n onEscapeKeyDown?.(event);\n if (event.defaultPrevented || !isDrillDown || drillDownStore.getDepth() === 0) return;\n event.preventDefault();\n drillDownStore.pop('keyboard');\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n onKeyDown?.(event);\n if (event.defaultPrevented || !isDrillDown || drillDownStore.getDepth() === 0) return;\n if (isTextEntryTarget(event.target)) return;\n if (event.key === BACK_KEYS[getDirection(event.currentTarget)]) {\n event.preventDefault();\n drillDownStore.pop('keyboard');\n }\n };\n\n const contextValue = React.useMemo(\n () => ({ size, color: resolvedColor }),\n [size, resolvedColor],\n );\n\n const contentBody = (\n <MenuProvider size={size}>\n <DropdownMenuContentContext.Provider value={contextValue}>\n <DrillDownRoot store={drillDownStore} behavior={behavior} open={open}>\n {children}\n </DrillDownRoot>\n </DropdownMenuContentContext.Provider>\n </MenuProvider>\n );\n\n return (\n <DropdownMenuPrimitive.Portal container={container} forceMount={forceMount}>\n <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 <Slot.Slottable>{children}</Slot.Slottable>\n <DropdownMenuPrimitive.ItemIndicator className=\"kui-BaseMenuItemIndicator kui-DropdownMenuItemIndicator\">\n <ThickDotIcon className=\"kui-BaseMenuItemIndicatorIcon kui-DropdownMenuItemIndicatorIcon\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </DropdownMenuPrimitive.RadioItem>\n );\n});\nDropdownMenuRadioItem.displayName = 'DropdownMenu.RadioItem';\n\ntype DropdownMenuCheckboxItemElement = React.ElementRef<typeof DropdownMenuPrimitive.CheckboxItem>;\ntype DropdownMenuCheckboxItemOwnProps = GetPropDefTypes<typeof dropdownMenuCheckboxItemPropDefs>;\ninterface DropdownMenuCheckboxItemProps\n extends ComponentPropsWithout<typeof DropdownMenuPrimitive.CheckboxItem, RemovedProps>,\n DropdownMenuCheckboxItemOwnProps {}\nconst DropdownMenuCheckboxItem = React.forwardRef<\n DropdownMenuCheckboxItemElement,\n DropdownMenuCheckboxItemProps\n>((props, forwardedRef) => {\n const {\n children,\n className,\n shortcut,\n color = dropdownMenuCheckboxItemPropDefs.color.default,\n ...itemProps\n } = props;\n if (!React.useContext(DrillDownLevelContext)) return null;\n return (\n <DropdownMenuPrimitive.CheckboxItem\n aria-keyshortcuts={shortcut ? toAriaKeyShortcuts(shortcut) : undefined}\n {...itemProps}\n asChild={false}\n ref={forwardedRef}\n data-accent-color={color}\n className={classNames(\n 'kui-BaseMenuItem',\n 'kui-BaseMenuCheckboxItem',\n 'kui-DropdownMenuItem',\n 'kui-DropdownMenuCheckboxItem',\n className,\n )}\n >\n <Slot.Slottable>{children}</Slot.Slottable>\n <DropdownMenuPrimitive.ItemIndicator className=\"kui-BaseMenuItemIndicator kui-DropdownMenuItemIndicator\">\n <ThickCheckIcon className=\"kui-BaseMenuItemIndicatorIcon kui-DropdownMenuItemIndicatorIcon\" />\n </DropdownMenuPrimitive.ItemIndicator>\n {shortcut && <MenuShortcut shortcut={shortcut} className=\"kui-DropdownMenuShortcut\" />}\n </DropdownMenuPrimitive.CheckboxItem>\n );\n});\nDropdownMenuCheckboxItem.displayName = 'DropdownMenu.CheckboxItem';\n\ninterface DropdownMenuSubProps\n extends React.ComponentPropsWithoutRef<typeof DropdownMenuPrimitive.Sub> {\n /**\n * Label displayed in the back button when using drill-down mode.\n * If not provided, defaults to \"Back\".\n */\n label?: React.ReactNode;\n}\nconst DropdownMenuSub: React.FC<DropdownMenuSubProps> = ({\n label = 'Back',\n open,\n defaultOpen,\n onOpenChange,\n children,\n}) => {\n const drillDownStore = useDrillDownStore();\n const id = React.useId();\n const subContextValue = React.useMemo(() => ({ id, label }), [id, label]);\n const isOpenInDrillDown = usePanelPosition(drillDownStore, id) !== 'closed';\n\n // 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", "close", "MenuCloseProvider", "DropdownMenuPrimitive", "DropdownMenuTrigger", "children", "forwardedRef", "requireReactElement", "DropdownMenuContentContext", "BACK_KEYS", "FORWARD_KEYS", "isTextEntryTarget", "target", "getDirection", "element", "DropdownMenuContent", "ownProps", "useThemeSizeProps", "baseMenuContentPropDefs", "themeContext", "useThemeContext", "size", "className", "color", "container", "forceMount", "submenuBehavior", "virtualized", "onEscapeKeyDown", "onKeyDown", "contentProps", "extractProps", "resolvedColor", "behavior", "useResolvedResponsiveValue", "isDrillDown", "drillDownStore", "useCreateDrillDownStore", "handleEscapeKeyDown", "event", "handleKeyDown", "contextValue", "contentBody", "MenuProvider", "DrillDownRoot", "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
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as r}from"./chunk-KEGCX5VM.js";import*as e from"react";import d from"classnames";import{Toggle as g}from"radix-ui";var i=e.forwardRef(({pressed:o,onPressedChange:t,defaultPressed:s,children:a,className:l,...n},p)=>{delete n.done;let u=e.useRef(!1);return e.useEffect(()=>{},[o,t]),e.createElement(g.Root,{pressed:o,onPressedChange:t,defaultPressed:s,asChild:!0},e.createElement(r,{...n,ref:p,className:d("kui-Toggle",l)},a))});i.displayName="Toggle";export{i as a};
|
|
2
|
+
//# sourceMappingURL=chunk-4QKZYCCH.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
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';\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` and `done`: a toggle's state is `pressed`, and a\n * tick in place of its icon would read as a second state. 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' | 'done'> &\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 // `done` is not a Toggle prop; a call that slips past the type drops it rather than showing a tick.\n delete (buttonProps as { done?: boolean }).done;\n // aria-pressed is the whole announcement: a screen reader reads the new state on its own.\n const warnedRef = React.useRef(false);\n React.useEffect(() => {\n if (\n process.env.NODE_ENV === 'development' &&\n pressed !== undefined &&\n onPressedChange === undefined &&\n !warnedRef.current\n ) {\n warnedRef.current = true;\n console.warn(\n 'Toggle: You provided a `pressed` prop without an `onPressedChange` handler. ' +\n 'This will result in a read-only toggle button. If you want the button to be interactive, ' +\n 'you should provide an `onPressedChange` handler.',\n );\n }\n }, [pressed, onPressedChange]);\n\n return (\n <TogglePrimitive.Root pressed={pressed} onPressedChange={onPressedChange} 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": "wCAAA,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,CAEnG,OAAQD,EAAmC,KAE3C,IAAME,EAAkB,SAAO,EAAK,EACpC,OAAM,YAAU,IAAM,CActB,EAAG,CAACP,EAASC,CAAe,CAAC,EAG3B,gBAACO,EAAgB,KAAhB,CAAqB,QAASR,EAAS,gBAAiBC,EAAiB,eAAgBC,EAAgB,QAAO,IAC/G,gBAACO,EAAA,CAAQ,GAAIJ,EAA6B,IAAKC,EAAc,UAAWI,EAAW,aAAcN,CAAS,GACvGD,CACH,CACF,CAEJ,CACF,EACAJ,EAAO,YAAc",
|
|
6
|
+
"names": ["React", "classNames", "TogglePrimitive", "Toggle", "pressed", "onPressedChange", "defaultPressed", "children", "className", "buttonProps", "forwardedRef", "warnedRef", "TogglePrimitive", "Button", "classNames"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as w}from"./chunk-H5G7UECV.js";import{a as S}from"./chunk-BJUCBOGU.js";import{k as O}from"./chunk-62ZGP4ET.js";import{e as v}from"./chunk-3YLYGKFB.js";import{a as h}from"./chunk-BWLCTTTN.js";import{a as M}from"./chunk-ELAW7ZUG.js";import*as e from"react";import K from"classnames";import{Slot as Q}from"radix-ui";import{useComposedRefs as U,useLayoutEffect as Y}from"radix-ui/internal";var Z=e.forwardRef((d,i)=>{let t=v(d,h.size),{className:g,children:a,asChild:r,as:l,color:L,radius:j,disabled:u,done:m=!1,...f}=M(t,h),p=!!t.loading,B=!!u||p,{onClick:N,"aria-describedby":C}=f,F=e.useCallback(n=>{if(B){n.preventDefault();return}N?.(n)},[B,N]),H=e.useMemo(()=>{let n=r&&e.isValidElement(a)?a.props.children:a,c=P(n),s=o=>e.isValidElement(o)&&o.type==="svg";return{iconStart:s(c[0]),iconEnd:s(c[c.length-1])}},[r,a]),[V,A]=e.useState(null),k=e.useRef(null),_=U(i,k);Y(()=>{let n=k.current;if(!n||p||m)return;let c=I(n,"start"),s=I(n,"end");A(o=>o&&o.iconStart===c&&o.iconEnd===s?o:{iconStart:c,iconEnd:s})});let{iconStart:b,iconEnd:z}=V??H,T=!!f["data-icon-only"],D=e.useMemo(()=>{if(!m)return a;let n=e.createElement(O,{key:"kui-done-tick",className:"kui-BaseButtonTick","aria-hidden":!0}),c=s=>{if(T)return n;let o=P(s),x=o.findIndex(R=>!(typeof R=="string"&&!R.trim()));return b&&x!==-1?o.map((R,J)=>J===x?n:R):[n,...o]};if(r&&e.isValidElement(a)){let s=a;return e.cloneElement(s,void 0,c(s.props.children))}return c(a)},[m,a,T,b,r]),G=r?Q.Root:l||"button",y=r||!l||["button","input","textarea","select"].includes(l),W=!r&&(!l||l==="button"),X="type"in f,$=e.useId(),E=p?`${$}-loading`:void 0,q=e.useMemo(()=>p?{"aria-busy":!0,"aria-disabled":!0,"aria-describedby":[C,E].filter(Boolean).join(" ")}:u&&(!y||r)?{"aria-disabled":!0}:{},[p,E,C,u,y,r]);return e.createElement(G,{"data-accent-color":L,"data-radius":j,"data-icon-start":b||void 0,"data-icon-end":z||void 0,"data-done":m||void 0,...f,...q,"data-disabled":B||void 0,onClick:F,ref:_,className:K("kui-reset","kui-BaseButton",g),...y&&{disabled:u},...W&&!X?{type:"button"}:{}},t.loading?e.createElement(e.Fragment,null,e.createElement("span",{className:"kui-BaseButtonContent","aria-hidden":!0},D),e.createElement("span",{className:"kui-sr-only"},e.createElement("span",{id:E,"aria-hidden":!0},"Loading"),a),e.createElement(S,{asChild:!0,align:"center",justify:"center",position:"absolute",inset:"0"},e.createElement("span",null,e.createElement(w,{"aria-hidden":"true"})))):D)});Z.displayName="BaseButton";function P(d){return e.Children.toArray(d).flatMap(i=>e.isValidElement(i)&&i.type===e.Fragment?P(i.props.children):[i])}function I(d,i){let t=i==="start"?d.firstChild:d.lastChild;for(;t&&(t.nodeType===Node.COMMENT_NODE||t.nodeType===Node.TEXT_NODE&&!t.textContent?.trim());)t=i==="start"?t.nextSibling:t.previousSibling;return t?.nodeType===Node.ELEMENT_NODE&&t.localName==="svg"}export{Z as a};
|
|
2
|
+
//# sourceMappingURL=chunk-4R5EMVB3.js.map
|