@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
|
@@ -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 };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Image: one <img>. It fills its box by `fit`, takes the theme's corner, rests on a quiet
|
|
3
|
+
* neutral fill until it has loaded, so the box holds its place and a failed image keeps it.
|
|
4
|
+
* No fade-in: v1 has had no motion since 0.15. The fill clears once loaded so a transparent
|
|
5
|
+
* picture shows what is behind it.
|
|
6
|
+
*/
|
|
7
|
+
.kui-Image {
|
|
8
|
+
display: block;
|
|
9
|
+
max-width: 100%;
|
|
10
|
+
object-fit: var(--image-object-fit, cover);
|
|
11
|
+
border-radius: var(--radius-2);
|
|
12
|
+
background-color: var(--neutral-a3);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
.kui-Image:where([data-status='loaded']) {
|
|
16
|
+
background-color: transparent;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.kui-Image:where(.kui-r-fit-cover) {
|
|
20
|
+
--image-object-fit: cover;
|
|
21
|
+
}
|
|
22
|
+
.kui-Image:where(.kui-r-fit-contain) {
|
|
23
|
+
--image-object-fit: contain;
|
|
24
|
+
}
|
|
25
|
+
.kui-Image:where(.kui-r-fit-fill) {
|
|
26
|
+
--image-object-fit: fill;
|
|
27
|
+
}
|
|
28
|
+
.kui-Image:where(.kui-r-fit-scale-down) {
|
|
29
|
+
--image-object-fit: scale-down;
|
|
30
|
+
}
|
|
31
|
+
.kui-Image:where(.kui-r-fit-none) {
|
|
32
|
+
--image-object-fit: none;
|
|
33
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { radiusPropDef } from '../props/radius.prop.js';
|
|
2
|
+
|
|
3
|
+
import type { PropDef } from '../props/prop-def.js';
|
|
4
|
+
|
|
5
|
+
const objectFitValues = ['cover', 'contain', 'fill', 'scale-down', 'none'] as const;
|
|
6
|
+
|
|
7
|
+
const imagePropDefs = {
|
|
8
|
+
...radiusPropDef,
|
|
9
|
+
/**
|
|
10
|
+
* How the picture fills its box, as CSS `object-fit`.
|
|
11
|
+
* @link https://developer.mozilla.org/en-US/docs/Web/CSS/object-fit
|
|
12
|
+
*/
|
|
13
|
+
fit: { type: 'enum', className: 'kui-r-fit', values: objectFitValues, default: 'cover' },
|
|
14
|
+
} satisfies {
|
|
15
|
+
fit: PropDef<(typeof objectFitValues)[number]>;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export { imagePropDefs };
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import classNames from 'classnames';
|
|
3
|
+
import { useComposedRefs, useLayoutEffect } from 'radix-ui/internal';
|
|
4
|
+
|
|
5
|
+
import { imagePropDefs } from './image.props.js';
|
|
6
|
+
import { extractProps } from '../helpers/extract-props.js';
|
|
7
|
+
import { widthPropDefs } from '../props/width.props.js';
|
|
8
|
+
import { heightPropDefs } from '../props/height.props.js';
|
|
9
|
+
|
|
10
|
+
import type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';
|
|
11
|
+
import type { WidthProps } from '../props/width.props.js';
|
|
12
|
+
import type { HeightProps } from '../props/height.props.js';
|
|
13
|
+
import type { GetPropDefTypes } from '../props/prop-def.js';
|
|
14
|
+
|
|
15
|
+
type ImageElement = React.ElementRef<'img'>;
|
|
16
|
+
type ImageOwnProps = GetPropDefTypes<typeof imagePropDefs>;
|
|
17
|
+
type ImageStatus = 'loading' | 'loaded' | 'error';
|
|
18
|
+
|
|
19
|
+
interface ImageProps extends ComponentPropsWithout<'img', RemovedProps | 'width' | 'height' | 'src' | 'alt'>, WidthProps, HeightProps, ImageOwnProps {
|
|
20
|
+
src: string;
|
|
21
|
+
/** Required. Pass `""` for a decorative picture. */
|
|
22
|
+
alt: string;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* A plain `<img>` that loads lazily, fills its box by `fit` and takes the theme's corner.
|
|
27
|
+
* One element and no wrapper: `width`, `height`, `className` and `style` all land on the
|
|
28
|
+
* `<img>` itself.
|
|
29
|
+
*
|
|
30
|
+
* Until it loads it rests on a quiet neutral fill, which is also what stays if it fails.
|
|
31
|
+
*/
|
|
32
|
+
const Image = React.forwardRef<ImageElement, ImageProps>((props, forwardedRef) => {
|
|
33
|
+
const { className, alt, radius, loading = 'lazy', decoding = 'async', onLoad, onError, ...imageProps } = extractProps(props, imagePropDefs, widthPropDefs, heightPropDefs);
|
|
34
|
+
|
|
35
|
+
const [status, setStatus] = React.useState<ImageStatus>('loading');
|
|
36
|
+
const ref = React.useRef<HTMLImageElement>(null);
|
|
37
|
+
|
|
38
|
+
// A cached image, or one that finished before hydration, never fires onLoad for us.
|
|
39
|
+
useLayoutEffect(() => {
|
|
40
|
+
const img = ref.current;
|
|
41
|
+
if (img?.complete) setStatus(img.naturalWidth > 0 ? 'loaded' : 'error');
|
|
42
|
+
else setStatus('loading');
|
|
43
|
+
}, [props.src]);
|
|
44
|
+
|
|
45
|
+
const setRefs = useComposedRefs(ref, forwardedRef);
|
|
46
|
+
|
|
47
|
+
return (
|
|
48
|
+
<img
|
|
49
|
+
{...imageProps}
|
|
50
|
+
ref={setRefs}
|
|
51
|
+
alt={alt}
|
|
52
|
+
loading={loading}
|
|
53
|
+
decoding={decoding}
|
|
54
|
+
data-radius={radius}
|
|
55
|
+
data-status={status}
|
|
56
|
+
className={classNames('kui-Image', className)}
|
|
57
|
+
onLoad={(event) => {
|
|
58
|
+
setStatus('loaded');
|
|
59
|
+
onLoad?.(event);
|
|
60
|
+
}}
|
|
61
|
+
onError={(event) => {
|
|
62
|
+
setStatus('error');
|
|
63
|
+
onError?.(event);
|
|
64
|
+
}}
|
|
65
|
+
/>
|
|
66
|
+
);
|
|
67
|
+
});
|
|
68
|
+
Image.displayName = 'Image';
|
|
69
|
+
|
|
70
|
+
export { Image };
|
|
71
|
+
export type { ImageProps };
|
package/src/components/index.css
CHANGED
package/src/components/index.tsx
CHANGED
|
@@ -24,6 +24,7 @@ export {
|
|
|
24
24
|
ThickChevronRightIcon,
|
|
25
25
|
ThickDividerHorizontalIcon,
|
|
26
26
|
} from './icons.js';
|
|
27
|
+
export { Image, type ImageProps } from './image.js';
|
|
27
28
|
export { Kbd, type KbdProps } from './kbd.js';
|
|
28
29
|
export { Link, type LinkProps } from './link.js';
|
|
29
30
|
export * as Navbar from './navbar.js';
|
|
@@ -54,11 +55,18 @@ export {
|
|
|
54
55
|
ToolbarButton,
|
|
55
56
|
ToolbarSeparator,
|
|
56
57
|
ToolbarTitle,
|
|
58
|
+
ToolbarOverflow,
|
|
59
|
+
ToolbarSlot,
|
|
60
|
+
ToolbarFill,
|
|
61
|
+
useToolbarOverflow,
|
|
57
62
|
type ToolbarProps,
|
|
58
63
|
type ToolbarGroupProps,
|
|
59
64
|
type ToolbarButtonProps,
|
|
60
65
|
type ToolbarSeparatorProps,
|
|
61
66
|
type ToolbarTitleProps,
|
|
67
|
+
type ToolbarOverflowProps,
|
|
68
|
+
type ToolbarSlotProps,
|
|
69
|
+
type ToolbarFillProps,
|
|
62
70
|
} from './toolbar.js';
|
|
63
71
|
export { Tooltip, type TooltipProps } from './tooltip.js';
|
|
64
72
|
export { VirtualMenu, type VirtualMenuProps, type VirtualMenuItemProps, type VirtualMenuRenderItemProps } from './virtual-menu.js';
|
|
@@ -144,32 +144,54 @@ type ButtonProps = Omit<KuiButtonProps, 'aria-label' | 'aria-labelledby' | 'vari
|
|
|
144
144
|
* Place it inside `Root`, after the viewport. It sits over the viewport's bottom edge.
|
|
145
145
|
*/
|
|
146
146
|
const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
|
|
147
|
-
(
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
147
|
+
(
|
|
148
|
+
{ direction = 'end', behavior = 'smooth', className, children, size, variant = 'surface', emphasis, color = 'gray', radius = 'full', 'aria-label': label, onClick, ...props },
|
|
149
|
+
forwardedRef,
|
|
150
|
+
) => {
|
|
151
|
+
const { scrollToEnd, scrollToStart } = useMessageScroller();
|
|
152
|
+
|
|
153
|
+
// The primitive blurs the button on click, which drops keyboard focus to the page. Kookie
|
|
154
|
+
// jumps itself and moves focus to the viewport instead, since the button hides at the end.
|
|
155
|
+
const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {
|
|
156
|
+
onClick?.(event);
|
|
157
|
+
if (event.defaultPrevented) return;
|
|
158
|
+
event.preventDefault();
|
|
159
|
+
const viewport = event.currentTarget
|
|
160
|
+
.closest('.kui-MessageScrollerRoot')
|
|
161
|
+
?.querySelector<HTMLElement>('.kui-MessageScrollerViewport');
|
|
162
|
+
viewport?.focus({ preventScroll: true });
|
|
163
|
+
if (direction === 'start') scrollToStart({ behavior });
|
|
164
|
+
else scrollToEnd({ behavior });
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
return (
|
|
168
|
+
<Primitive.Button
|
|
169
|
+
direction={direction}
|
|
170
|
+
behavior={behavior}
|
|
171
|
+
onClick={handleClick}
|
|
172
|
+
render={
|
|
173
|
+
<KuiButton
|
|
174
|
+
iconOnly
|
|
175
|
+
{...props}
|
|
176
|
+
ref={forwardedRef}
|
|
177
|
+
size={size}
|
|
178
|
+
{...(emphasis ? { emphasis } : { variant })}
|
|
179
|
+
color={color}
|
|
180
|
+
radius={radius}
|
|
181
|
+
aria-label={label ?? (direction === 'end' ? 'Jump to the latest' : 'Jump to the first')}
|
|
182
|
+
className={classNames('kui-MessageScrollerButton', className)}
|
|
183
|
+
data-direction={direction}
|
|
184
|
+
>
|
|
185
|
+
{children ?? (
|
|
186
|
+
<svg width="15" height="15" viewBox="0 0 15 15" fill="none" aria-hidden style={direction === 'start' ? { transform: 'rotate(180deg)' } : undefined}>
|
|
187
|
+
<path d="M7.5 2.5v10M3.5 8.5l4 4 4-4" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round" />
|
|
188
|
+
</svg>
|
|
189
|
+
)}
|
|
190
|
+
</KuiButton>
|
|
191
|
+
}
|
|
192
|
+
/>
|
|
193
|
+
);
|
|
194
|
+
},
|
|
173
195
|
);
|
|
174
196
|
Button.displayName = 'MessageScroller.Button';
|
|
175
197
|
|