@womp/kookie-ui 0.23.0 → 0.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components.css +190 -185
- package/dist/cjs/components/_internal/base-button.d.ts +11 -1
- package/dist/cjs/components/_internal/base-button.d.ts.map +1 -1
- package/dist/cjs/components/_internal/base-button.js +1 -1
- package/dist/cjs/components/_internal/base-button.js.map +4 -4
- package/dist/cjs/components/_internal/menu-context.d.ts +2 -0
- package/dist/cjs/components/_internal/menu-context.d.ts.map +1 -1
- package/dist/cjs/components/_internal/menu-context.js +1 -1
- package/dist/cjs/components/_internal/menu-context.js.map +3 -3
- package/dist/cjs/components/_internal/pane-chrome.d.ts +17 -2
- package/dist/cjs/components/_internal/pane-chrome.d.ts.map +1 -1
- package/dist/cjs/components/_internal/pane-chrome.js +1 -1
- package/dist/cjs/components/_internal/pane-chrome.js.map +4 -4
- package/dist/cjs/components/_internal/shell-sidebar.js +1 -1
- package/dist/cjs/components/_internal/shell-sidebar.js.map +4 -4
- package/dist/cjs/components/accordion.d.ts +2 -2
- package/dist/cjs/components/accordion.d.ts.map +1 -1
- package/dist/cjs/components/accordion.js +1 -1
- package/dist/cjs/components/accordion.js.map +4 -4
- package/dist/cjs/components/alert-dialog.d.ts.map +1 -1
- package/dist/cjs/components/alert-dialog.js +1 -1
- package/dist/cjs/components/alert-dialog.js.map +3 -3
- package/dist/cjs/components/avatar.d.ts +1 -1
- package/dist/cjs/components/avatar.d.ts.map +1 -1
- package/dist/cjs/components/avatar.js +1 -1
- package/dist/cjs/components/avatar.js.map +3 -3
- package/dist/cjs/components/avatar.props.d.ts +8 -0
- package/dist/cjs/components/avatar.props.d.ts.map +1 -1
- package/dist/cjs/components/avatar.props.js +1 -1
- package/dist/cjs/components/avatar.props.js.map +2 -2
- package/dist/cjs/components/blockquote.d.ts +1 -1
- package/dist/cjs/components/blockquote.d.ts.map +1 -1
- package/dist/cjs/components/blockquote.js +1 -1
- package/dist/cjs/components/blockquote.js.map +4 -4
- package/dist/cjs/components/button.js +1 -1
- package/dist/cjs/components/button.js.map +4 -4
- package/dist/cjs/components/chatbar.d.ts.map +1 -1
- package/dist/cjs/components/chatbar.js +1 -1
- package/dist/cjs/components/chatbar.js.map +4 -4
- package/dist/cjs/components/checkbox-group.d.ts.map +1 -1
- package/dist/cjs/components/checkbox-group.js +1 -1
- package/dist/cjs/components/checkbox-group.js.map +3 -3
- package/dist/cjs/components/checkbox-group.primitive.d.ts +12 -5
- package/dist/cjs/components/checkbox-group.primitive.d.ts.map +1 -1
- package/dist/cjs/components/checkbox-group.primitive.js +1 -1
- package/dist/cjs/components/checkbox-group.primitive.js.map +3 -3
- package/dist/cjs/components/checkbox.js +1 -1
- package/dist/cjs/components/checkbox.js.map +3 -3
- package/dist/cjs/components/chip.d.ts.map +1 -1
- package/dist/cjs/components/chip.js +1 -1
- package/dist/cjs/components/chip.js.map +3 -3
- package/dist/cjs/components/code.d.ts.map +1 -1
- package/dist/cjs/components/code.js +1 -1
- package/dist/cjs/components/code.js.map +2 -2
- package/dist/cjs/components/combobox.js +1 -1
- package/dist/cjs/components/combobox.js.map +3 -3
- package/dist/cjs/components/context-menu.d.ts.map +1 -1
- package/dist/cjs/components/context-menu.js +1 -1
- package/dist/cjs/components/context-menu.js.map +4 -4
- package/dist/cjs/components/dialog.d.ts +1 -1
- package/dist/cjs/components/dialog.d.ts.map +1 -1
- package/dist/cjs/components/dialog.js +1 -1
- package/dist/cjs/components/dialog.js.map +3 -3
- package/dist/cjs/components/dropdown-menu.d.ts.map +1 -1
- package/dist/cjs/components/dropdown-menu.js +1 -1
- package/dist/cjs/components/dropdown-menu.js.map +4 -4
- package/dist/cjs/components/icons.d.ts +3 -1
- package/dist/cjs/components/icons.d.ts.map +1 -1
- package/dist/cjs/components/icons.js +1 -1
- package/dist/cjs/components/icons.js.map +3 -3
- package/dist/cjs/components/index.d.ts +1 -1
- package/dist/cjs/components/index.d.ts.map +1 -1
- package/dist/cjs/components/index.js +2 -10
- package/dist/cjs/components/index.js.map +4 -4
- package/dist/cjs/components/message-scroller.d.ts.map +1 -1
- package/dist/cjs/components/message-scroller.js +1 -1
- package/dist/cjs/components/message-scroller.js.map +4 -4
- package/dist/cjs/components/navbar.d.ts.map +1 -1
- package/dist/cjs/components/navbar.js +1 -1
- package/dist/cjs/components/navbar.js.map +3 -3
- package/dist/cjs/components/notice.d.ts +4 -1
- package/dist/cjs/components/notice.d.ts.map +1 -1
- package/dist/cjs/components/notice.js +1 -1
- package/dist/cjs/components/notice.js.map +4 -4
- package/dist/cjs/components/progress.d.ts.map +1 -1
- package/dist/cjs/components/progress.js +1 -1
- package/dist/cjs/components/progress.js.map +3 -3
- package/dist/cjs/components/schemas/button.schema.d.ts +2 -2
- package/dist/cjs/components/schemas/toggle.schema.d.ts +1 -1
- package/dist/cjs/components/scroll-area.d.ts +3 -1
- package/dist/cjs/components/scroll-area.d.ts.map +1 -1
- package/dist/cjs/components/scroll-area.js +1 -1
- package/dist/cjs/components/scroll-area.js.map +4 -4
- package/dist/cjs/components/segmented-control.d.ts +3 -1
- package/dist/cjs/components/segmented-control.d.ts.map +1 -1
- package/dist/cjs/components/segmented-control.js +1 -1
- package/dist/cjs/components/segmented-control.js.map +3 -3
- package/dist/cjs/components/select.d.ts.map +1 -1
- package/dist/cjs/components/select.js +1 -1
- package/dist/cjs/components/select.js.map +3 -3
- package/dist/cjs/components/separator.d.ts.map +1 -1
- package/dist/cjs/components/separator.js +1 -1
- package/dist/cjs/components/separator.js.map +3 -3
- package/dist/cjs/components/sheet.d.ts +1 -0
- package/dist/cjs/components/sheet.d.ts.map +1 -1
- package/dist/cjs/components/sheet.js +1 -1
- package/dist/cjs/components/sheet.js.map +3 -3
- package/dist/cjs/components/shell.d.ts +12 -1
- package/dist/cjs/components/shell.d.ts.map +1 -1
- package/dist/cjs/components/shell.js +1 -1
- package/dist/cjs/components/shell.js.map +4 -4
- package/dist/cjs/components/sidebar.d.ts.map +1 -1
- package/dist/cjs/components/sidebar.js +1 -1
- package/dist/cjs/components/sidebar.js.map +4 -4
- package/dist/cjs/components/slider.d.ts.map +1 -1
- package/dist/cjs/components/slider.js +1 -1
- package/dist/cjs/components/slider.js.map +3 -3
- package/dist/cjs/components/spinner.d.ts.map +1 -1
- package/dist/cjs/components/spinner.js +1 -1
- package/dist/cjs/components/spinner.js.map +3 -3
- package/dist/cjs/components/table.d.ts.map +1 -1
- package/dist/cjs/components/table.js +1 -1
- package/dist/cjs/components/table.js.map +4 -4
- package/dist/cjs/components/tabs.d.ts.map +1 -1
- package/dist/cjs/components/tabs.js +1 -1
- package/dist/cjs/components/tabs.js.map +2 -2
- package/dist/cjs/components/text-area.js +1 -1
- package/dist/cjs/components/text-area.js.map +2 -2
- package/dist/cjs/components/text-field.js +2 -2
- package/dist/cjs/components/text-field.js.map +2 -2
- package/dist/cjs/components/toggle.d.ts +3 -2
- package/dist/cjs/components/toggle.d.ts.map +1 -1
- package/dist/cjs/components/toggle.js +1 -9
- package/dist/cjs/components/toggle.js.map +4 -4
- package/dist/cjs/components/toolbar.d.ts +80 -8
- package/dist/cjs/components/toolbar.d.ts.map +1 -1
- package/dist/cjs/components/toolbar.js +1 -1
- package/dist/cjs/components/toolbar.js.map +4 -4
- package/dist/cjs/components/virtual-menu.d.ts +3 -5
- package/dist/cjs/components/virtual-menu.d.ts.map +1 -1
- package/dist/cjs/components/virtual-menu.js +1 -1
- package/dist/cjs/components/virtual-menu.js.map +3 -3
- package/dist/cjs/helpers/extract-margin-props.d.ts +7 -7
- package/dist/cjs/hooks/use-scroll-edges.d.ts +4 -2
- package/dist/cjs/hooks/use-scroll-edges.d.ts.map +1 -1
- package/dist/cjs/hooks/use-scroll-edges.js +1 -1
- package/dist/cjs/hooks/use-scroll-edges.js.map +3 -3
- package/dist/cjs/index.js +5 -5
- package/dist/cjs/index.js.map +4 -4
- package/dist/cjs/props/index.js +1 -1
- package/dist/cjs/props/index.js.map +2 -2
- package/dist/esm/chunk-3VTS4C63.js +2 -0
- package/dist/esm/chunk-3VTS4C63.js.map +7 -0
- package/dist/esm/chunk-3WE4E2WQ.js +2 -0
- package/dist/esm/chunk-3WE4E2WQ.js.map +7 -0
- package/dist/esm/chunk-3XUY5WFA.js +2 -0
- package/dist/esm/chunk-3XUY5WFA.js.map +7 -0
- package/dist/esm/chunk-3XZOE2IQ.js +2 -0
- package/dist/esm/chunk-3XZOE2IQ.js.map +7 -0
- package/dist/esm/chunk-432YLNB3.js +2 -0
- package/dist/esm/chunk-432YLNB3.js.map +7 -0
- package/dist/esm/chunk-4QKZYCCH.js +2 -0
- package/dist/esm/chunk-4QKZYCCH.js.map +7 -0
- package/dist/esm/chunk-4R5EMVB3.js +2 -0
- package/dist/esm/chunk-4R5EMVB3.js.map +7 -0
- package/dist/esm/chunk-4ZOVV3TY.js +2 -0
- package/dist/esm/chunk-4ZOVV3TY.js.map +7 -0
- package/dist/esm/{chunk-IX5HIHVI.js → chunk-62ZGP4ET.js} +2 -2
- package/dist/esm/{chunk-IX5HIHVI.js.map → chunk-62ZGP4ET.js.map} +3 -3
- package/dist/esm/chunk-BGAJ2MDF.js +2 -0
- package/dist/esm/chunk-BGAJ2MDF.js.map +7 -0
- package/dist/esm/chunk-CHPT42BY.js +2 -0
- package/dist/esm/{chunk-Y3JYEEFB.js.map → chunk-CHPT42BY.js.map} +2 -2
- package/dist/esm/{chunk-KS4U4VPH.js → chunk-CMHUK7OG.js} +2 -2
- package/dist/esm/{chunk-KS4U4VPH.js.map → chunk-CMHUK7OG.js.map} +2 -2
- package/dist/esm/chunk-CN6F4REJ.js +2 -0
- package/dist/esm/chunk-CN6F4REJ.js.map +7 -0
- package/dist/esm/chunk-DUTZUWZP.js +2 -0
- package/dist/esm/chunk-DUTZUWZP.js.map +7 -0
- package/dist/esm/chunk-FDJV5RXX.js +2 -0
- package/dist/esm/chunk-FDJV5RXX.js.map +7 -0
- package/dist/esm/chunk-G2JD52O5.js +2 -0
- package/dist/esm/{chunk-23KT3D2Z.js.map → chunk-G2JD52O5.js.map} +3 -3
- package/dist/esm/{chunk-6DDOR73D.js → chunk-G4ETY2NP.js} +2 -2
- package/dist/esm/chunk-GPOCLDBR.js +2 -0
- package/dist/esm/chunk-GPOCLDBR.js.map +7 -0
- package/dist/esm/chunk-GYP66ZK2.js +2 -0
- package/dist/esm/chunk-GYP66ZK2.js.map +7 -0
- package/dist/esm/chunk-H5BYPX6V.js +2 -0
- package/dist/esm/chunk-H5BYPX6V.js.map +7 -0
- package/dist/esm/chunk-H5G7UECV.js +2 -0
- package/dist/esm/chunk-H5G7UECV.js.map +7 -0
- package/dist/esm/chunk-I4FLQELQ.js +2 -0
- package/dist/esm/chunk-I4FLQELQ.js.map +7 -0
- package/dist/esm/chunk-JYQGCXXI.js +2 -0
- package/dist/esm/chunk-JYQGCXXI.js.map +7 -0
- package/dist/esm/chunk-KA5UE2VN.js +2 -0
- package/dist/esm/chunk-KA5UE2VN.js.map +7 -0
- package/dist/esm/{chunk-QGCXTULQ.js → chunk-KEGCX5VM.js} +2 -2
- package/dist/esm/chunk-KVHKPUZ2.js +2 -0
- package/dist/esm/chunk-KVHKPUZ2.js.map +7 -0
- package/dist/esm/{chunk-FFG32ERA.js → chunk-N3WBEQWL.js} +3 -3
- package/dist/esm/chunk-N3WBEQWL.js.map +7 -0
- package/dist/esm/{chunk-HKPXDQ2B.js → chunk-NC3CJUE3.js} +2 -2
- package/dist/esm/chunk-P2MV6HLA.js +2 -0
- package/dist/esm/{chunk-7SS4UUJH.js.map → chunk-P2MV6HLA.js.map} +3 -3
- package/dist/esm/chunk-PALE5UWK.js +2 -0
- package/dist/esm/{chunk-DSPYHO3L.js.map → chunk-PALE5UWK.js.map} +2 -2
- package/dist/esm/chunk-PDMCLVYT.js +2 -0
- package/dist/esm/chunk-PDMCLVYT.js.map +7 -0
- package/dist/esm/chunk-PM6QY3JO.js +2 -0
- package/dist/esm/{chunk-ZEX2DECM.js.map → chunk-PM6QY3JO.js.map} +3 -3
- package/dist/esm/chunk-RKZVXVBN.js +2 -0
- package/dist/esm/chunk-RKZVXVBN.js.map +7 -0
- package/dist/esm/chunk-TXQZ5HLV.js +2 -0
- package/dist/esm/chunk-TXQZ5HLV.js.map +7 -0
- package/dist/esm/chunk-UKASIY6M.js +2 -0
- package/dist/esm/chunk-UKASIY6M.js.map +7 -0
- package/dist/esm/{chunk-OJQNLROL.js → chunk-UY6WJUNA.js} +2 -2
- package/dist/esm/chunk-V5O3TF57.js +2 -0
- package/dist/esm/{chunk-3KQE2PSJ.js.map → chunk-V5O3TF57.js.map} +3 -3
- package/dist/esm/chunk-VUNCI6A6.js +2 -0
- package/dist/esm/chunk-VUNCI6A6.js.map +7 -0
- package/dist/esm/{chunk-JBHRV364.js → chunk-VUPIJNG2.js} +2 -2
- package/dist/esm/chunk-W6BN5QLH.js +2 -0
- package/dist/esm/{chunk-ZNDCZM5A.js.map → chunk-W6BN5QLH.js.map} +2 -2
- package/dist/esm/chunk-WG5ORTIW.js +2 -0
- package/dist/esm/chunk-WG5ORTIW.js.map +7 -0
- package/dist/esm/chunk-WMVR2XBR.js +2 -0
- package/dist/esm/{chunk-XKSU3NLG.js.map → chunk-WMVR2XBR.js.map} +2 -2
- package/dist/esm/{chunk-NNZTSXKH.js → chunk-WX7SX5BN.js} +2 -2
- package/dist/esm/chunk-XOACTIBL.js +2 -0
- package/dist/esm/chunk-XOACTIBL.js.map +7 -0
- package/dist/esm/components/_internal/base-button.d.ts +11 -1
- package/dist/esm/components/_internal/base-button.d.ts.map +1 -1
- package/dist/esm/components/_internal/base-button.js +1 -1
- package/dist/esm/components/_internal/menu-context.d.ts +2 -0
- package/dist/esm/components/_internal/menu-context.d.ts.map +1 -1
- package/dist/esm/components/_internal/menu-context.js +1 -1
- package/dist/esm/components/_internal/pane-chrome.d.ts +17 -2
- package/dist/esm/components/_internal/pane-chrome.d.ts.map +1 -1
- package/dist/esm/components/_internal/pane-chrome.js +1 -1
- package/dist/esm/components/_internal/shell-bottom.js +1 -1
- package/dist/esm/components/_internal/shell-inspector.js +1 -1
- package/dist/esm/components/_internal/shell-sidebar.js +1 -1
- package/dist/esm/components/accordion.d.ts +2 -2
- package/dist/esm/components/accordion.d.ts.map +1 -1
- package/dist/esm/components/accordion.js +1 -1
- package/dist/esm/components/alert-dialog.d.ts.map +1 -1
- package/dist/esm/components/alert-dialog.js +1 -1
- package/dist/esm/components/avatar.d.ts +1 -1
- package/dist/esm/components/avatar.d.ts.map +1 -1
- package/dist/esm/components/avatar.js +1 -1
- package/dist/esm/components/avatar.props.d.ts +8 -0
- package/dist/esm/components/avatar.props.d.ts.map +1 -1
- package/dist/esm/components/avatar.props.js +1 -1
- package/dist/esm/components/blockquote.d.ts +1 -1
- package/dist/esm/components/blockquote.d.ts.map +1 -1
- package/dist/esm/components/blockquote.js +1 -1
- package/dist/esm/components/button.js +1 -1
- package/dist/esm/components/chatbar.d.ts.map +1 -1
- package/dist/esm/components/chatbar.js +1 -1
- package/dist/esm/components/checkbox-group.d.ts.map +1 -1
- package/dist/esm/components/checkbox-group.js +1 -1
- package/dist/esm/components/checkbox-group.primitive.d.ts +12 -5
- package/dist/esm/components/checkbox-group.primitive.d.ts.map +1 -1
- package/dist/esm/components/checkbox-group.primitive.js +1 -1
- package/dist/esm/components/checkbox.js +1 -1
- package/dist/esm/components/chip.d.ts.map +1 -1
- package/dist/esm/components/chip.js +1 -1
- package/dist/esm/components/code.d.ts.map +1 -1
- package/dist/esm/components/code.js +1 -1
- package/dist/esm/components/combobox.js +1 -1
- package/dist/esm/components/context-menu.d.ts.map +1 -1
- package/dist/esm/components/context-menu.js +1 -1
- package/dist/esm/components/dialog.d.ts +1 -1
- package/dist/esm/components/dialog.d.ts.map +1 -1
- package/dist/esm/components/dialog.js +1 -1
- package/dist/esm/components/dropdown-menu.d.ts.map +1 -1
- package/dist/esm/components/dropdown-menu.js +1 -1
- package/dist/esm/components/icons.d.ts +3 -1
- package/dist/esm/components/icons.d.ts.map +1 -1
- package/dist/esm/components/icons.js +1 -1
- package/dist/esm/components/index.d.ts +1 -1
- package/dist/esm/components/index.d.ts.map +1 -1
- package/dist/esm/components/index.js +1 -1
- package/dist/esm/components/message-scroller.d.ts.map +1 -1
- package/dist/esm/components/message-scroller.js +1 -1
- package/dist/esm/components/navbar.d.ts.map +1 -1
- package/dist/esm/components/navbar.js +1 -1
- package/dist/esm/components/notice.d.ts +4 -1
- package/dist/esm/components/notice.d.ts.map +1 -1
- package/dist/esm/components/notice.js +1 -1
- package/dist/esm/components/progress.d.ts.map +1 -1
- package/dist/esm/components/progress.js +1 -1
- package/dist/esm/components/schemas/button.schema.d.ts +2 -2
- package/dist/esm/components/schemas/toggle.schema.d.ts +1 -1
- package/dist/esm/components/scroll-area.d.ts +3 -1
- package/dist/esm/components/scroll-area.d.ts.map +1 -1
- package/dist/esm/components/scroll-area.js +1 -1
- package/dist/esm/components/segmented-control.d.ts +3 -1
- package/dist/esm/components/segmented-control.d.ts.map +1 -1
- package/dist/esm/components/segmented-control.js +1 -1
- package/dist/esm/components/select.d.ts.map +1 -1
- package/dist/esm/components/select.js +1 -1
- package/dist/esm/components/separator.d.ts.map +1 -1
- package/dist/esm/components/separator.js +1 -1
- package/dist/esm/components/sheet.d.ts +1 -0
- package/dist/esm/components/sheet.d.ts.map +1 -1
- package/dist/esm/components/sheet.js +1 -1
- package/dist/esm/components/shell.d.ts +12 -1
- package/dist/esm/components/shell.d.ts.map +1 -1
- package/dist/esm/components/shell.js +1 -1
- package/dist/esm/components/sidebar.d.ts.map +1 -1
- package/dist/esm/components/sidebar.js +1 -1
- package/dist/esm/components/slider.d.ts.map +1 -1
- package/dist/esm/components/slider.js +1 -1
- package/dist/esm/components/spinner.d.ts.map +1 -1
- package/dist/esm/components/spinner.js +1 -1
- package/dist/esm/components/table.d.ts.map +1 -1
- package/dist/esm/components/table.js +1 -1
- package/dist/esm/components/tabs.d.ts.map +1 -1
- package/dist/esm/components/tabs.js +1 -1
- package/dist/esm/components/text-area.js +1 -1
- package/dist/esm/components/text-field.js +1 -1
- package/dist/esm/components/toggle.d.ts +3 -2
- package/dist/esm/components/toggle.d.ts.map +1 -1
- package/dist/esm/components/toggle.js +1 -1
- package/dist/esm/components/toolbar.d.ts +80 -8
- package/dist/esm/components/toolbar.d.ts.map +1 -1
- package/dist/esm/components/toolbar.js +1 -1
- package/dist/esm/components/virtual-menu.d.ts +3 -5
- package/dist/esm/components/virtual-menu.d.ts.map +1 -1
- package/dist/esm/components/virtual-menu.js +1 -1
- package/dist/esm/helpers/extract-margin-props.d.ts +7 -7
- package/dist/esm/hooks/index.js +1 -1
- package/dist/esm/hooks/use-scroll-edges.d.ts +4 -2
- package/dist/esm/hooks/use-scroll-edges.d.ts.map +1 -1
- package/dist/esm/hooks/use-scroll-edges.js +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/props/index.js +1 -1
- package/package.json +1 -1
- package/src/components/_internal/base-button.tsx +51 -12
- package/src/components/_internal/base-sidebar-menu.css +8 -0
- package/src/components/_internal/menu-context.tsx +11 -0
- package/src/components/_internal/pane-chrome.tsx +45 -8
- package/src/components/accordion.css +35 -3
- package/src/components/accordion.tsx +12 -16
- package/src/components/alert-dialog.tsx +59 -161
- package/src/components/avatar.props.tsx +6 -0
- package/src/components/avatar.tsx +57 -71
- package/src/components/blockquote.tsx +8 -9
- package/src/components/chatbar.tsx +27 -20
- package/src/components/checkbox-group.primitive.tsx +40 -51
- package/src/components/checkbox-group.tsx +1 -9
- package/src/components/chip.css +18 -20
- package/src/components/chip.tsx +3 -4
- package/src/components/code.tsx +3 -2
- package/src/components/context-menu.tsx +23 -5
- package/src/components/dialog.tsx +59 -160
- package/src/components/dropdown-menu.tsx +8 -5
- package/src/components/icons.tsx +11 -1
- package/src/components/index.tsx +7 -0
- package/src/components/message-scroller.tsx +48 -26
- package/src/components/navbar.tsx +34 -69
- package/src/components/notice.tsx +6 -3
- package/src/components/progress.tsx +6 -3
- package/src/components/scroll-area.css +28 -2
- package/src/components/scroll-area.tsx +49 -3
- package/src/components/segmented-control.css +8 -130
- package/src/components/segmented-control.tsx +36 -5
- package/src/components/select.tsx +23 -3
- package/src/components/separator.tsx +13 -1
- package/src/components/sheet.css +7 -6
- package/src/components/sheet.tsx +76 -143
- package/src/components/shell.css +14 -0
- package/src/components/shell.tsx +29 -8
- package/src/components/sidebar.tsx +27 -16
- package/src/components/slider.tsx +51 -32
- package/src/components/spinner.tsx +10 -2
- package/src/components/table.tsx +18 -5
- package/src/components/tabs.css +34 -0
- package/src/components/tabs.tsx +0 -2
- package/src/components/text-area.css +2 -1
- package/src/components/text-area.tsx +1 -1
- package/src/components/text-field.tsx +1 -1
- package/src/components/toggle.tsx +21 -39
- package/src/components/toolbar.css +34 -0
- package/src/components/toolbar.tsx +432 -23
- package/src/components/virtual-menu.tsx +110 -37
- package/src/hooks/use-scroll-edges.ts +11 -2
- package/src/styles/utilities/truncate.css +10 -0
- package/styles.css +195 -185
- package/utilities.css +5 -0
- package/dist/esm/chunk-23KT3D2Z.js +0 -2
- package/dist/esm/chunk-3JA7SJDT.js +0 -2
- package/dist/esm/chunk-3JA7SJDT.js.map +0 -7
- package/dist/esm/chunk-3KQE2PSJ.js +0 -2
- package/dist/esm/chunk-5BWLY27A.js +0 -2
- package/dist/esm/chunk-5BWLY27A.js.map +0 -7
- package/dist/esm/chunk-6CK7UTNH.js +0 -2
- package/dist/esm/chunk-6CK7UTNH.js.map +0 -7
- package/dist/esm/chunk-6RK26HIY.js +0 -2
- package/dist/esm/chunk-6RK26HIY.js.map +0 -7
- package/dist/esm/chunk-7ESWH773.js +0 -2
- package/dist/esm/chunk-7ESWH773.js.map +0 -7
- package/dist/esm/chunk-7SS4UUJH.js +0 -2
- package/dist/esm/chunk-AB3QCCUM.js +0 -2
- package/dist/esm/chunk-AB3QCCUM.js.map +0 -7
- package/dist/esm/chunk-BEP4AH5V.js +0 -2
- package/dist/esm/chunk-BEP4AH5V.js.map +0 -7
- package/dist/esm/chunk-BOL3VVSN.js +0 -2
- package/dist/esm/chunk-BOL3VVSN.js.map +0 -7
- package/dist/esm/chunk-DBROSD2J.js +0 -2
- package/dist/esm/chunk-DBROSD2J.js.map +0 -7
- package/dist/esm/chunk-DSPYHO3L.js +0 -2
- package/dist/esm/chunk-E2D2VWUI.js +0 -2
- package/dist/esm/chunk-E2D2VWUI.js.map +0 -7
- package/dist/esm/chunk-EMNSA65L.js +0 -2
- package/dist/esm/chunk-EMNSA65L.js.map +0 -7
- package/dist/esm/chunk-FFG32ERA.js.map +0 -7
- package/dist/esm/chunk-FHPHEIYJ.js +0 -2
- package/dist/esm/chunk-FHPHEIYJ.js.map +0 -7
- package/dist/esm/chunk-FJFBM7HW.js +0 -2
- package/dist/esm/chunk-FJFBM7HW.js.map +0 -7
- package/dist/esm/chunk-FYT7TYGS.js +0 -2
- package/dist/esm/chunk-FYT7TYGS.js.map +0 -7
- package/dist/esm/chunk-GLV7VGBH.js +0 -2
- package/dist/esm/chunk-GLV7VGBH.js.map +0 -7
- package/dist/esm/chunk-HIKMKGPT.js +0 -2
- package/dist/esm/chunk-HIKMKGPT.js.map +0 -7
- package/dist/esm/chunk-L2R62BOB.js +0 -2
- package/dist/esm/chunk-L2R62BOB.js.map +0 -7
- package/dist/esm/chunk-LHIS3UKQ.js +0 -2
- package/dist/esm/chunk-LHIS3UKQ.js.map +0 -7
- package/dist/esm/chunk-NQDMTOGB.js +0 -2
- package/dist/esm/chunk-NQDMTOGB.js.map +0 -7
- package/dist/esm/chunk-Q6MFPATL.js +0 -2
- package/dist/esm/chunk-Q6MFPATL.js.map +0 -7
- package/dist/esm/chunk-QOHJIF25.js +0 -2
- package/dist/esm/chunk-QOHJIF25.js.map +0 -7
- package/dist/esm/chunk-R4XJNQX5.js +0 -2
- package/dist/esm/chunk-R4XJNQX5.js.map +0 -7
- package/dist/esm/chunk-UE3HATOA.js +0 -2
- package/dist/esm/chunk-UE3HATOA.js.map +0 -7
- package/dist/esm/chunk-V32EP3S7.js +0 -2
- package/dist/esm/chunk-V32EP3S7.js.map +0 -7
- package/dist/esm/chunk-XKSU3NLG.js +0 -2
- package/dist/esm/chunk-XRCMPBAY.js +0 -2
- package/dist/esm/chunk-XRCMPBAY.js.map +0 -7
- package/dist/esm/chunk-Y3JYEEFB.js +0 -2
- package/dist/esm/chunk-YZM54IJE.js +0 -2
- package/dist/esm/chunk-YZM54IJE.js.map +0 -7
- package/dist/esm/chunk-ZEX2DECM.js +0 -2
- package/dist/esm/chunk-ZJI2IK7C.js +0 -2
- package/dist/esm/chunk-ZJI2IK7C.js.map +0 -7
- package/dist/esm/chunk-ZNDCZM5A.js +0 -2
- /package/dist/esm/{chunk-6DDOR73D.js.map → chunk-G4ETY2NP.js.map} +0 -0
- /package/dist/esm/{chunk-QGCXTULQ.js.map → chunk-KEGCX5VM.js.map} +0 -0
- /package/dist/esm/{chunk-HKPXDQ2B.js.map → chunk-NC3CJUE3.js.map} +0 -0
- /package/dist/esm/{chunk-OJQNLROL.js.map → chunk-UY6WJUNA.js.map} +0 -0
- /package/dist/esm/{chunk-JBHRV364.js.map → chunk-VUPIJNG2.js.map} +0 -0
- /package/dist/esm/{chunk-NNZTSXKH.js.map → chunk-WX7SX5BN.js.map} +0 -0
|
@@ -2,13 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
import * as React from 'react';
|
|
4
4
|
import { Checkbox as CheckboxPrimitive, Direction } from 'radix-ui';
|
|
5
|
-
import {
|
|
6
|
-
Context,
|
|
7
|
-
Primitive,
|
|
8
|
-
useComposedRefs,
|
|
9
|
-
RovingFocus,
|
|
10
|
-
useControllableState,
|
|
11
|
-
} from 'radix-ui/internal';
|
|
5
|
+
import { Context, Primitive, useControllableState } from 'radix-ui/internal';
|
|
12
6
|
|
|
13
7
|
const { useDirection } = Direction;
|
|
14
8
|
|
|
@@ -20,9 +14,8 @@ const CHECKBOX_GROUP_NAME = 'CheckboxGroup';
|
|
|
20
14
|
type ScopedProps<P> = P & { __scopeCheckboxGroup?: Context.Scope };
|
|
21
15
|
const [createCheckboxGroupContext, createCheckboxGroupScope] = Context.createContextScope(
|
|
22
16
|
CHECKBOX_GROUP_NAME,
|
|
23
|
-
[
|
|
17
|
+
[CheckboxPrimitive.createCheckboxScope],
|
|
24
18
|
);
|
|
25
|
-
const useRovingFocusGroupScope = RovingFocus.createRovingFocusGroupScope();
|
|
26
19
|
const useCheckboxScope = CheckboxPrimitive.createCheckboxScope();
|
|
27
20
|
|
|
28
21
|
type CheckboxGroupContextValue = {
|
|
@@ -38,15 +31,22 @@ const [CheckboxGroupProvider, useCheckboxGroupContext] =
|
|
|
38
31
|
createCheckboxGroupContext<CheckboxGroupContextValue>(CHECKBOX_GROUP_NAME);
|
|
39
32
|
|
|
40
33
|
type CheckboxGroupElement = React.ElementRef<typeof Primitive.div>;
|
|
41
|
-
type RovingFocusGroupProps = React.ComponentPropsWithoutRef<typeof RovingFocus.Root>;
|
|
42
34
|
type PrimitiveDivProps = React.ComponentPropsWithoutRef<typeof Primitive.div>;
|
|
43
35
|
interface CheckboxGroupProps extends PrimitiveDivProps {
|
|
44
36
|
name?: CheckboxGroupContextValue['name'];
|
|
45
37
|
required?: React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>['required'];
|
|
46
38
|
disabled?: React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root>['disabled'];
|
|
47
|
-
dir?:
|
|
48
|
-
|
|
49
|
-
|
|
39
|
+
dir?: 'ltr' | 'rtl';
|
|
40
|
+
/**
|
|
41
|
+
* @deprecated Has no effect. Each checkbox is its own tab stop, as with native checkboxes,
|
|
42
|
+
* so there is no arrow-key navigation to orient.
|
|
43
|
+
*/
|
|
44
|
+
orientation?: 'horizontal' | 'vertical';
|
|
45
|
+
/**
|
|
46
|
+
* @deprecated Has no effect. Each checkbox is its own tab stop, as with native checkboxes,
|
|
47
|
+
* so there is no arrow-key navigation to loop.
|
|
48
|
+
*/
|
|
49
|
+
loop?: boolean;
|
|
50
50
|
defaultValue?: string[];
|
|
51
51
|
value?: CheckboxGroupContextValue['value'];
|
|
52
52
|
onValueChange?: (value: string[]) => void;
|
|
@@ -61,13 +61,12 @@ const CheckboxGroup = React.forwardRef<CheckboxGroupElement, CheckboxGroupProps>
|
|
|
61
61
|
value: valueProp,
|
|
62
62
|
required = false,
|
|
63
63
|
disabled = false,
|
|
64
|
-
orientation,
|
|
64
|
+
orientation: _orientation,
|
|
65
65
|
dir,
|
|
66
|
-
loop
|
|
66
|
+
loop: _loop,
|
|
67
67
|
onValueChange,
|
|
68
68
|
...groupProps
|
|
69
69
|
} = props;
|
|
70
|
-
const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeCheckboxGroup);
|
|
71
70
|
const direction = useDirection(dir);
|
|
72
71
|
const [value = [], setValue] = useControllableState({
|
|
73
72
|
prop: valueProp,
|
|
@@ -96,21 +95,13 @@ const CheckboxGroup = React.forwardRef<CheckboxGroupElement, CheckboxGroupProps>
|
|
|
96
95
|
onItemCheck={handleItemCheck}
|
|
97
96
|
onItemUncheck={handleItemUncheck}
|
|
98
97
|
>
|
|
99
|
-
<
|
|
100
|
-
|
|
101
|
-
{
|
|
102
|
-
orientation={orientation}
|
|
98
|
+
<Primitive.div
|
|
99
|
+
role="group"
|
|
100
|
+
data-disabled={disabled ? '' : undefined}
|
|
103
101
|
dir={direction}
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
role="group"
|
|
108
|
-
data-disabled={disabled ? '' : undefined}
|
|
109
|
-
dir={direction}
|
|
110
|
-
{...groupProps}
|
|
111
|
-
ref={forwardedRef}
|
|
112
|
-
/>
|
|
113
|
-
</RovingFocus.Root>
|
|
102
|
+
{...groupProps}
|
|
103
|
+
ref={forwardedRef}
|
|
104
|
+
/>
|
|
114
105
|
</CheckboxGroupProvider>
|
|
115
106
|
);
|
|
116
107
|
},
|
|
@@ -136,31 +127,29 @@ const CheckboxGroupItem = React.forwardRef<CheckboxGroupItemElement, CheckboxGro
|
|
|
136
127
|
const { __scopeCheckboxGroup, disabled, ...itemProps } = props;
|
|
137
128
|
const context = useCheckboxGroupContext(ITEM_NAME, __scopeCheckboxGroup);
|
|
138
129
|
const isDisabled = context.disabled || disabled;
|
|
139
|
-
const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeCheckboxGroup);
|
|
140
130
|
const checkboxScope = useCheckboxScope(__scopeCheckboxGroup);
|
|
141
|
-
const ref = React.useRef<React.ElementRef<typeof CheckboxPrimitive.Root>>(null);
|
|
142
|
-
const composedRefs = useComposedRefs(forwardedRef, ref);
|
|
143
131
|
const checked = context.value?.includes(itemProps.value);
|
|
132
|
+
// A required group needs at least one box checked, not every box: the items are
|
|
133
|
+
// required only while none is checked.
|
|
134
|
+
const isRequired = context.required && (context.value?.length ?? 0) === 0;
|
|
144
135
|
|
|
145
136
|
return (
|
|
146
|
-
<
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
/>
|
|
163
|
-
</RovingFocus.Item>
|
|
137
|
+
<CheckboxPrimitive.Root
|
|
138
|
+
name={context.name}
|
|
139
|
+
disabled={isDisabled}
|
|
140
|
+
required={isRequired}
|
|
141
|
+
checked={checked}
|
|
142
|
+
{...checkboxScope}
|
|
143
|
+
{...itemProps}
|
|
144
|
+
ref={forwardedRef}
|
|
145
|
+
onCheckedChange={(checked) => {
|
|
146
|
+
if (checked) {
|
|
147
|
+
context.onItemCheck(props.value);
|
|
148
|
+
} else {
|
|
149
|
+
context.onItemUncheck(props.value);
|
|
150
|
+
}
|
|
151
|
+
}}
|
|
152
|
+
/>
|
|
164
153
|
);
|
|
165
154
|
},
|
|
166
155
|
);
|
|
@@ -76,21 +76,13 @@ const CheckboxGroupItem = React.forwardRef<CheckboxGroupItemElement, CheckboxGro
|
|
|
76
76
|
const { __scopeCheckboxGroup, children, className, style, ...props } = _props;
|
|
77
77
|
const { size } = useCheckboxGroupContext('CheckboxGroupItem', __scopeCheckboxGroup);
|
|
78
78
|
|
|
79
|
-
// Helper to safely convert size to Text-compatible size
|
|
80
|
-
const getTextSize = (sizeValue: any): '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' => {
|
|
81
|
-
if (typeof sizeValue === 'string' && /^[1-9]$/.test(sizeValue)) {
|
|
82
|
-
return sizeValue as any;
|
|
83
|
-
}
|
|
84
|
-
return '3';
|
|
85
|
-
};
|
|
86
|
-
|
|
87
79
|
// Render `<Text as="label">` if children are provided, otherwise render
|
|
88
80
|
// the solo checkbox to allow building out your custom layouts with it.
|
|
89
81
|
if (children) {
|
|
90
82
|
return (
|
|
91
83
|
<Text
|
|
92
84
|
as="label"
|
|
93
|
-
size={
|
|
85
|
+
size={size}
|
|
94
86
|
className={classNames('kui-CheckboxGroupItem', className)}
|
|
95
87
|
style={style}
|
|
96
88
|
>
|
package/src/components/chip.css
CHANGED
|
@@ -19,6 +19,20 @@
|
|
|
19
19
|
|
|
20
20
|
isolation: isolate;
|
|
21
21
|
|
|
22
|
+
/* An icon is one line tall, so it never changes the chip's height. */
|
|
23
|
+
/* stylelint-disable-next-line selector-max-type */
|
|
24
|
+
& :where(svg) {
|
|
25
|
+
flex: none;
|
|
26
|
+
width: var(--chip-icon-size);
|
|
27
|
+
height: var(--chip-icon-size);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/* A chip with a tooltip is focusable, and shows the ring every control does. */
|
|
31
|
+
&:where(:focus-visible) {
|
|
32
|
+
outline: var(--focus-ring-width) solid var(--focus-8);
|
|
33
|
+
outline-offset: var(--focus-ring-offset);
|
|
34
|
+
}
|
|
35
|
+
|
|
22
36
|
/* Forced colors support */
|
|
23
37
|
@media (forced-colors: active) {
|
|
24
38
|
border: 1px solid CanvasText;
|
|
@@ -37,6 +51,7 @@
|
|
|
37
51
|
@breakpoints {
|
|
38
52
|
.kui-Chip {
|
|
39
53
|
&:where(.kui-r-size-1) {
|
|
54
|
+
--chip-icon-size: var(--icon-size-1);
|
|
40
55
|
font-size: var(--font-size-1);
|
|
41
56
|
line-height: var(--line-height-1);
|
|
42
57
|
letter-spacing: var(--letter-spacing-1);
|
|
@@ -45,6 +60,7 @@
|
|
|
45
60
|
border-radius: max(calc(var(--radius-1) * var(--spacing-multiplier-medium)), var(--radius-full));
|
|
46
61
|
}
|
|
47
62
|
&:where(.kui-r-size-2) {
|
|
63
|
+
--chip-icon-size: var(--icon-size-2);
|
|
48
64
|
font-size: var(--font-size-1);
|
|
49
65
|
line-height: var(--line-height-1);
|
|
50
66
|
letter-spacing: var(--letter-spacing-1);
|
|
@@ -57,6 +73,7 @@
|
|
|
57
73
|
}
|
|
58
74
|
}
|
|
59
75
|
&:where(.kui-r-size-3) {
|
|
76
|
+
--chip-icon-size: var(--icon-size-3);
|
|
60
77
|
font-size: var(--font-size-2);
|
|
61
78
|
line-height: var(--line-height-2);
|
|
62
79
|
letter-spacing: var(--letter-spacing-2);
|
|
@@ -70,6 +87,7 @@
|
|
|
70
87
|
}
|
|
71
88
|
}
|
|
72
89
|
&:where(.kui-r-size-4) {
|
|
90
|
+
--chip-icon-size: var(--icon-size-4);
|
|
73
91
|
font-size: var(--font-size-3);
|
|
74
92
|
line-height: var(--line-height-3);
|
|
75
93
|
letter-spacing: var(--letter-spacing-3);
|
|
@@ -95,14 +113,6 @@
|
|
|
95
113
|
.kui-Chip:where(.kui-variant-solid) {
|
|
96
114
|
background-color: var(--accent-solid);
|
|
97
115
|
color: var(--accent-solid-contrast);
|
|
98
|
-
|
|
99
|
-
&:where([data-disabled]) {
|
|
100
|
-
color: var(--neutral-a8);
|
|
101
|
-
background-color: var(--neutral-a3);
|
|
102
|
-
outline: none;
|
|
103
|
-
filter: none;
|
|
104
|
-
cursor: default;
|
|
105
|
-
}
|
|
106
116
|
}
|
|
107
117
|
|
|
108
118
|
/* surface */
|
|
@@ -117,22 +127,10 @@
|
|
|
117
127
|
|
|
118
128
|
.kui-Chip:where(.kui-variant-soft, .kui-variant-ghost) {
|
|
119
129
|
color: var(--accent-ink);
|
|
120
|
-
|
|
121
|
-
&:where([data-disabled]) {
|
|
122
|
-
color: var(--neutral-a8);
|
|
123
|
-
background-color: var(--neutral-a3);
|
|
124
|
-
cursor: default;
|
|
125
|
-
}
|
|
126
130
|
}
|
|
127
131
|
|
|
128
132
|
.kui-Chip:where(.kui-variant-soft) {
|
|
129
133
|
background-color: var(--accent-3);
|
|
130
|
-
|
|
131
|
-
&:where([data-disabled]) {
|
|
132
|
-
color: var(--neutral-a8);
|
|
133
|
-
background-color: var(--neutral-a3);
|
|
134
|
-
cursor: default;
|
|
135
|
-
}
|
|
136
134
|
}
|
|
137
135
|
|
|
138
136
|
/* outline */
|
package/src/components/chip.tsx
CHANGED
|
@@ -41,15 +41,14 @@ const Chip = React.forwardRef<ChipElement, ChipProps>((props, forwardedRef) => {
|
|
|
41
41
|
...chipProps
|
|
42
42
|
} = extractProps(props, chipPropDefs);
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
// Memoize component variable to prevent unnecessary re-renders
|
|
47
|
-
const Comp = React.useMemo(() => (asChild ? Slot.Root : 'span'), [asChild]);
|
|
44
|
+
const Comp = asChild ? Slot.Root : 'span';
|
|
48
45
|
|
|
49
46
|
const chip = (
|
|
50
47
|
<Comp
|
|
51
48
|
data-accent-color={color}
|
|
52
49
|
data-radius={radius}
|
|
50
|
+
// A tooltip opens on focus, so a chip that has one joins the tab order.
|
|
51
|
+
tabIndex={tooltip ? 0 : undefined}
|
|
53
52
|
{...chipProps}
|
|
54
53
|
ref={forwardedRef}
|
|
55
54
|
className={classNames('kui-reset', 'kui-Chip', className)}
|
package/src/components/code.tsx
CHANGED
|
@@ -18,8 +18,9 @@ const Code = React.forwardRef<CodeElement, CodeProps>((props, forwardedRef) => {
|
|
|
18
18
|
props,
|
|
19
19
|
codePropDefs,
|
|
20
20
|
);
|
|
21
|
-
//
|
|
22
|
-
|
|
21
|
+
// A ghost Code has no fill, so it rests on the surrounding text colour: only a colour the caller
|
|
22
|
+
// set reaches it, never the gray default.
|
|
23
|
+
const resolvedColor = props.variant === 'ghost' && !props.color ? undefined : color;
|
|
23
24
|
const Comp = asChild ? Slot.Root : 'code';
|
|
24
25
|
return (
|
|
25
26
|
<Comp
|
|
@@ -4,11 +4,11 @@
|
|
|
4
4
|
*/
|
|
5
5
|
'use client';
|
|
6
6
|
|
|
7
|
-
import { warnDeprecated } from '../helpers/warn-deprecated.js';
|
|
8
7
|
import * as React from 'react';
|
|
9
8
|
import { VirtualMenu } from './virtual-menu.js';
|
|
10
9
|
import classNames from 'classnames';
|
|
11
10
|
import { ContextMenu as ContextMenuPrimitive, Slot } from 'radix-ui';
|
|
11
|
+
import { useCallbackRef } from 'radix-ui/internal';
|
|
12
12
|
|
|
13
13
|
import { ScrollArea } from './scroll-area.js';
|
|
14
14
|
import {
|
|
@@ -23,7 +23,7 @@ import { ThickCheckIcon, ThickChevronRightIcon, ThickDotIcon } from './icons.js'
|
|
|
23
23
|
import { extractProps } from '../helpers/extract-props.js';
|
|
24
24
|
import { useThemeSizeProps } from '../helpers/theme-size.js';
|
|
25
25
|
import { requireReactElement } from '../helpers/require-react-element.js';
|
|
26
|
-
import { MenuProvider } from './_internal/menu-context.js';
|
|
26
|
+
import { MenuCloseProvider, MenuProvider } from './_internal/menu-context.js';
|
|
27
27
|
import {
|
|
28
28
|
MenuShortcut,
|
|
29
29
|
getMenuAlignOffset,
|
|
@@ -36,9 +36,27 @@ import type { GetPropDefTypes, Responsive } from '../props/prop-def.js';
|
|
|
36
36
|
|
|
37
37
|
interface ContextMenuRootProps
|
|
38
38
|
extends React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Root> {}
|
|
39
|
-
const ContextMenuRoot: React.FC<ContextMenuRootProps> = (props) =>
|
|
40
|
-
|
|
41
|
-
);
|
|
39
|
+
const ContextMenuRoot: React.FC<ContextMenuRootProps> = (props) => {
|
|
40
|
+
const { open: openProp, onOpenChange } = props;
|
|
41
|
+
const [uncontrolledOpen, setUncontrolledOpen] = React.useState(false);
|
|
42
|
+
const open = openProp ?? uncontrolledOpen;
|
|
43
|
+
|
|
44
|
+
const handleOpenChangeProp = useCallbackRef(onOpenChange);
|
|
45
|
+
const handleOpenChange = React.useCallback(
|
|
46
|
+
(next: boolean) => {
|
|
47
|
+
setUncontrolledOpen(next);
|
|
48
|
+
handleOpenChangeProp(next);
|
|
49
|
+
},
|
|
50
|
+
[handleOpenChangeProp],
|
|
51
|
+
);
|
|
52
|
+
const close = React.useCallback(() => handleOpenChange(false), [handleOpenChange]);
|
|
53
|
+
|
|
54
|
+
return (
|
|
55
|
+
<MenuCloseProvider value={close}>
|
|
56
|
+
<ContextMenuPrimitive.Root {...props} open={open} onOpenChange={handleOpenChange} />
|
|
57
|
+
</MenuCloseProvider>
|
|
58
|
+
);
|
|
59
|
+
};
|
|
42
60
|
ContextMenuRoot.displayName = 'ContextMenu.Root';
|
|
43
61
|
|
|
44
62
|
type ContextMenuTriggerElement = React.ElementRef<typeof ContextMenuPrimitive.Trigger>;
|
|
@@ -12,196 +12,95 @@ import { requireReactElement } from '../helpers/require-react-element.js';
|
|
|
12
12
|
import { useBodyPointerEventsCleanup } from '../hooks/use-body-pointer-events-cleanup.js';
|
|
13
13
|
|
|
14
14
|
import type { DialogContentOwnProps } from './dialog.props.js';
|
|
15
|
-
import type {
|
|
16
|
-
ComponentPropsWithout,
|
|
17
|
-
RemovedProps,
|
|
18
|
-
ComponentPropsAs,
|
|
19
|
-
} from '../helpers/component-props.js';
|
|
15
|
+
import type { ComponentPropsWithout, RemovedProps, ComponentPropsAs } from '../helpers/component-props.js';
|
|
20
16
|
|
|
21
17
|
interface DialogRootProps extends ComponentPropsWithout<typeof DialogPrimitive.Root, 'modal'> {}
|
|
22
18
|
const DialogRoot: React.FC<DialogRootProps> = (props) => <DialogPrimitive.Root {...props} modal />;
|
|
23
19
|
DialogRoot.displayName = 'Dialog.Root';
|
|
24
20
|
|
|
25
21
|
type DialogTriggerElement = React.ElementRef<typeof DialogPrimitive.Trigger>;
|
|
26
|
-
interface DialogTriggerProps
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
</DialogPrimitive.Trigger>
|
|
33
|
-
),
|
|
34
|
-
);
|
|
22
|
+
interface DialogTriggerProps extends ComponentPropsWithout<typeof DialogPrimitive.Trigger, RemovedProps> {}
|
|
23
|
+
const DialogTrigger = React.forwardRef<DialogTriggerElement, DialogTriggerProps>(({ children, ...props }, forwardedRef) => (
|
|
24
|
+
<DialogPrimitive.Trigger {...props} ref={forwardedRef} asChild>
|
|
25
|
+
{requireReactElement(children)}
|
|
26
|
+
</DialogPrimitive.Trigger>
|
|
27
|
+
));
|
|
35
28
|
DialogTrigger.displayName = 'Dialog.Trigger';
|
|
36
29
|
|
|
37
30
|
// Split once at module scope. `extractProps` memoises on the identity of the
|
|
38
31
|
// prop def objects it is handed, so rebuilding these per render would recompile
|
|
39
32
|
// them on every render.
|
|
40
|
-
const {
|
|
41
|
-
align: alignPropDef,
|
|
42
|
-
...contentPropDefs
|
|
43
|
-
} = dialogContentPropDefs;
|
|
33
|
+
const { align: alignPropDef, ...contentPropDefs } = dialogContentPropDefs;
|
|
44
34
|
const alignPropDefs = { align: alignPropDef };
|
|
45
35
|
|
|
46
36
|
type DialogContentElement = React.ElementRef<typeof DialogPrimitive.Content>;
|
|
47
|
-
interface DialogContentProps
|
|
48
|
-
extends ComponentPropsWithout<typeof DialogPrimitive.Content, RemovedProps>,
|
|
49
|
-
DialogContentOwnProps {
|
|
37
|
+
interface DialogContentProps extends ComponentPropsWithout<typeof DialogPrimitive.Content, RemovedProps>, DialogContentOwnProps {
|
|
50
38
|
container?: React.ComponentPropsWithoutRef<typeof DialogPrimitive.Portal>['container'];
|
|
51
39
|
}
|
|
52
|
-
const DialogContent = React.forwardRef<DialogContentElement, DialogContentProps>(
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
} =
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
useBodyPointerEventsCleanup();
|
|
80
|
-
|
|
81
|
-
// Focus trap effect
|
|
82
|
-
React.useEffect(() => {
|
|
83
|
-
// SSR safety - only run on client
|
|
84
|
-
if (typeof window === 'undefined') return;
|
|
85
|
-
|
|
86
|
-
const content = contentRef.current;
|
|
87
|
-
if (!content) return;
|
|
88
|
-
|
|
89
|
-
const focusableElements = content.querySelectorAll(
|
|
90
|
-
'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])',
|
|
91
|
-
);
|
|
92
|
-
|
|
93
|
-
if (focusableElements.length === 0) return;
|
|
94
|
-
|
|
95
|
-
const firstElement = focusableElements[0] as HTMLElement;
|
|
96
|
-
const lastElement = focusableElements[focusableElements.length - 1] as HTMLElement;
|
|
97
|
-
|
|
98
|
-
const handleKeyDown = (event: KeyboardEvent) => {
|
|
99
|
-
if (event.key === 'Tab') {
|
|
100
|
-
if (event.shiftKey) {
|
|
101
|
-
if (document.activeElement === firstElement) {
|
|
102
|
-
event.preventDefault();
|
|
103
|
-
lastElement.focus();
|
|
104
|
-
}
|
|
105
|
-
} else {
|
|
106
|
-
if (document.activeElement === lastElement) {
|
|
107
|
-
event.preventDefault();
|
|
108
|
-
firstElement.focus();
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
};
|
|
113
|
-
|
|
114
|
-
content.addEventListener('keydown', handleKeyDown);
|
|
115
|
-
|
|
116
|
-
// Focus first element when dialog opens
|
|
117
|
-
firstElement.focus();
|
|
118
|
-
|
|
119
|
-
return () => {
|
|
120
|
-
content.removeEventListener('keydown', handleKeyDown);
|
|
121
|
-
};
|
|
122
|
-
}, []);
|
|
123
|
-
|
|
124
|
-
return (
|
|
125
|
-
<DialogPrimitive.Portal container={container} forceMount={forceMount}>
|
|
126
|
-
<Theme asChild>
|
|
127
|
-
<DialogPrimitive.Overlay className="kui-BaseDialogOverlay kui-DialogOverlay">
|
|
128
|
-
<div className="kui-BaseDialogScroll kui-DialogScroll">
|
|
129
|
-
<div
|
|
130
|
-
className={`kui-BaseDialogScrollPadding kui-DialogScrollPadding ${alignClassName}`}
|
|
131
|
-
>
|
|
132
|
-
<DialogPrimitive.Content
|
|
133
|
-
{...contentProps}
|
|
134
|
-
ref={combinedRef}
|
|
135
|
-
className={classNames('kui-BaseDialogContent', 'kui-DialogContent', className)}
|
|
136
|
-
tabIndex={-1}
|
|
137
|
-
role="dialog"
|
|
138
|
-
aria-modal="true"
|
|
139
|
-
onCloseAutoFocus={(event) => {
|
|
140
|
-
// Prevent default focus behavior
|
|
141
|
-
event.preventDefault();
|
|
142
|
-
// Restore pointer-events to body (Radix UI fix for issue #1241)
|
|
143
|
-
document.body.style.pointerEvents = '';
|
|
144
|
-
}}
|
|
145
|
-
/>
|
|
146
|
-
{/* ARIA live region for screen reader announcements */}
|
|
147
|
-
<div
|
|
148
|
-
aria-live="polite"
|
|
149
|
-
aria-atomic="true"
|
|
150
|
-
className="kui-sr-only"
|
|
151
|
-
id="dialog-announcement"
|
|
152
|
-
/>
|
|
153
|
-
</div>
|
|
40
|
+
const DialogContent = React.forwardRef<DialogContentElement, DialogContentProps>(({ align, ...ownProps }, forwardedRef) => {
|
|
41
|
+
const props = useThemeSizeProps(ownProps, contentPropDefs.size);
|
|
42
|
+
const { className: alignClassName } = extractProps({ align }, alignPropDefs);
|
|
43
|
+
|
|
44
|
+
const { className, forceMount, container, onCloseAutoFocus, ...contentProps } = extractProps(props, contentPropDefs);
|
|
45
|
+
|
|
46
|
+
// Cleanup stuck pointer-events on body
|
|
47
|
+
useBodyPointerEventsCleanup();
|
|
48
|
+
|
|
49
|
+
return (
|
|
50
|
+
<DialogPrimitive.Portal container={container} forceMount={forceMount}>
|
|
51
|
+
<Theme asChild>
|
|
52
|
+
<DialogPrimitive.Overlay className="kui-BaseDialogOverlay kui-DialogOverlay">
|
|
53
|
+
<div className="kui-BaseDialogScroll kui-DialogScroll">
|
|
54
|
+
<div className={`kui-BaseDialogScrollPadding kui-DialogScrollPadding ${alignClassName}`}>
|
|
55
|
+
<DialogPrimitive.Content
|
|
56
|
+
{...contentProps}
|
|
57
|
+
ref={forwardedRef}
|
|
58
|
+
className={classNames('kui-BaseDialogContent', 'kui-DialogContent', className)}
|
|
59
|
+
aria-modal="true"
|
|
60
|
+
onCloseAutoFocus={(event) => {
|
|
61
|
+
// Radix returns focus to the trigger unless the caller prevents it.
|
|
62
|
+
onCloseAutoFocus?.(event);
|
|
63
|
+
// Restore pointer-events to body (Radix UI fix for issue #1241)
|
|
64
|
+
document.body.style.pointerEvents = '';
|
|
65
|
+
}}
|
|
66
|
+
/>
|
|
154
67
|
</div>
|
|
155
|
-
</
|
|
156
|
-
</
|
|
157
|
-
</
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
);
|
|
68
|
+
</div>
|
|
69
|
+
</DialogPrimitive.Overlay>
|
|
70
|
+
</Theme>
|
|
71
|
+
</DialogPrimitive.Portal>
|
|
72
|
+
);
|
|
73
|
+
});
|
|
161
74
|
DialogContent.displayName = 'Dialog.Content';
|
|
162
75
|
|
|
163
76
|
type DialogTitleElement = React.ElementRef<typeof Heading>;
|
|
164
77
|
type DialogTitleProps = ComponentPropsWithout<typeof Heading, 'asChild'>;
|
|
165
|
-
const DialogTitle = React.forwardRef<DialogTitleElement, DialogTitleProps>(
|
|
166
|
-
|
|
167
|
-
<
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
),
|
|
171
|
-
);
|
|
78
|
+
const DialogTitle = React.forwardRef<DialogTitleElement, DialogTitleProps>((props, forwardedRef) => (
|
|
79
|
+
<DialogPrimitive.Title asChild>
|
|
80
|
+
<Heading size="5" trim="start" {...props} asChild={false} ref={forwardedRef} />
|
|
81
|
+
</DialogPrimitive.Title>
|
|
82
|
+
));
|
|
172
83
|
DialogTitle.displayName = 'Dialog.Title';
|
|
173
84
|
|
|
174
85
|
type DialogDescriptionElement = HTMLParagraphElement;
|
|
175
86
|
type DialogDescriptionProps = ComponentPropsAs<typeof Text, 'p'>;
|
|
176
|
-
const DialogDescription = React.forwardRef<DialogDescriptionElement, DialogDescriptionProps>(
|
|
177
|
-
|
|
178
|
-
<
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
),
|
|
182
|
-
);
|
|
87
|
+
const DialogDescription = React.forwardRef<DialogDescriptionElement, DialogDescriptionProps>((props, forwardedRef) => (
|
|
88
|
+
<DialogPrimitive.Description asChild>
|
|
89
|
+
<Text as="p" size="3" {...props} asChild={false} ref={forwardedRef} />
|
|
90
|
+
</DialogPrimitive.Description>
|
|
91
|
+
));
|
|
183
92
|
DialogDescription.displayName = 'Dialog.Description';
|
|
184
93
|
|
|
185
94
|
type DialogCloseElement = React.ElementRef<typeof DialogPrimitive.Close>;
|
|
186
|
-
interface DialogCloseProps
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
</DialogPrimitive.Close>
|
|
193
|
-
),
|
|
194
|
-
);
|
|
95
|
+
interface DialogCloseProps extends ComponentPropsWithout<typeof DialogPrimitive.Close, RemovedProps> {}
|
|
96
|
+
const DialogClose = React.forwardRef<DialogCloseElement, DialogCloseProps>(({ children, ...props }, forwardedRef) => (
|
|
97
|
+
<DialogPrimitive.Close {...props} ref={forwardedRef} asChild>
|
|
98
|
+
{requireReactElement(children)}
|
|
99
|
+
</DialogPrimitive.Close>
|
|
100
|
+
));
|
|
195
101
|
DialogClose.displayName = 'Dialog.Close';
|
|
196
102
|
|
|
197
|
-
export {
|
|
198
|
-
DialogRoot as Root,
|
|
199
|
-
DialogTrigger as Trigger,
|
|
200
|
-
DialogContent as Content,
|
|
201
|
-
DialogTitle as Title,
|
|
202
|
-
DialogDescription as Description,
|
|
203
|
-
DialogClose as Close,
|
|
204
|
-
};
|
|
103
|
+
export { DialogRoot as Root, DialogTrigger as Trigger, DialogContent as Content, DialogTitle as Title, DialogDescription as Description, DialogClose as Close };
|
|
205
104
|
|
|
206
105
|
export type {
|
|
207
106
|
DialogRootProps as RootProps,
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
'use client';
|
|
2
2
|
|
|
3
|
-
import { warnDeprecated } from '../helpers/warn-deprecated.js';
|
|
4
3
|
import * as React from 'react';
|
|
5
4
|
import { VirtualMenu } from './virtual-menu.js';
|
|
6
5
|
import classNames from 'classnames';
|
|
@@ -30,7 +29,7 @@ import {
|
|
|
30
29
|
useStackEntry,
|
|
31
30
|
useSubContext,
|
|
32
31
|
} from './_internal/dropdown-menu-drill-down.js';
|
|
33
|
-
import { MenuProvider } from './_internal/menu-context.js';
|
|
32
|
+
import { MenuCloseProvider, MenuProvider } from './_internal/menu-context.js';
|
|
34
33
|
import {
|
|
35
34
|
MenuShortcut,
|
|
36
35
|
getMenuAlignOffset,
|
|
@@ -66,9 +65,13 @@ const DropdownMenuRoot: React.FC<DropdownMenuRootProps> = (props) => {
|
|
|
66
65
|
[handleOpenChangeProp],
|
|
67
66
|
);
|
|
68
67
|
|
|
68
|
+
const close = React.useCallback(() => handleOpenChange(false), [handleOpenChange]);
|
|
69
|
+
|
|
69
70
|
return (
|
|
70
71
|
<DropdownMenuOpenContext.Provider value={open}>
|
|
71
|
-
<
|
|
72
|
+
<MenuCloseProvider value={close}>
|
|
73
|
+
<DropdownMenuPrimitive.Root {...props} open={open} onOpenChange={handleOpenChange} />
|
|
74
|
+
</MenuCloseProvider>
|
|
72
75
|
</DropdownMenuOpenContext.Provider>
|
|
73
76
|
);
|
|
74
77
|
};
|
|
@@ -338,7 +341,7 @@ const DropdownMenuRadioItem = React.forwardRef<
|
|
|
338
341
|
className,
|
|
339
342
|
)}
|
|
340
343
|
>
|
|
341
|
-
{children}
|
|
344
|
+
<Slot.Slottable>{children}</Slot.Slottable>
|
|
342
345
|
<DropdownMenuPrimitive.ItemIndicator className="kui-BaseMenuItemIndicator kui-DropdownMenuItemIndicator">
|
|
343
346
|
<ThickDotIcon className="kui-BaseMenuItemIndicatorIcon kui-DropdownMenuItemIndicatorIcon" />
|
|
344
347
|
</DropdownMenuPrimitive.ItemIndicator>
|
|
@@ -379,7 +382,7 @@ const DropdownMenuCheckboxItem = React.forwardRef<
|
|
|
379
382
|
className,
|
|
380
383
|
)}
|
|
381
384
|
>
|
|
382
|
-
{children}
|
|
385
|
+
<Slot.Slottable>{children}</Slot.Slottable>
|
|
383
386
|
<DropdownMenuPrimitive.ItemIndicator className="kui-BaseMenuItemIndicator kui-DropdownMenuItemIndicator">
|
|
384
387
|
<ThickCheckIcon className="kui-BaseMenuItemIndicatorIcon kui-DropdownMenuItemIndicatorIcon" />
|
|
385
388
|
</DropdownMenuPrimitive.ItemIndicator>
|
package/src/components/icons.tsx
CHANGED
|
@@ -146,4 +146,14 @@ const FileTextIcon = React.forwardRef<IconElement, IconProps>((_props, _forwarde
|
|
|
146
146
|
});
|
|
147
147
|
FileTextIcon.displayName = 'FileTextIcon';
|
|
148
148
|
|
|
149
|
-
|
|
149
|
+
/** The tick a button shows in place of its icon while `done`. Drawn on the 24 grid at the icon set's stroke. */
|
|
150
|
+
const TickIcon = React.forwardRef<IconElement, IconProps>((props, forwardedRef) => {
|
|
151
|
+
return (
|
|
152
|
+
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" {...props} ref={forwardedRef}>
|
|
153
|
+
<path d="M5 12.75L9.5 17.25L19 7.25" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round" />
|
|
154
|
+
</svg>
|
|
155
|
+
);
|
|
156
|
+
});
|
|
157
|
+
TickIcon.displayName = 'TickIcon';
|
|
158
|
+
|
|
159
|
+
export { CloseIcon, PaperclipIcon, FileIcon, FileTextIcon, TickIcon };
|