@womp/kookie-ui 0.22.1 → 0.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/components.css +247 -187
- package/dist/cjs/components/_internal/base-button.d.ts +11 -1
- package/dist/cjs/components/_internal/base-button.d.ts.map +1 -1
- package/dist/cjs/components/_internal/base-button.js +1 -1
- package/dist/cjs/components/_internal/base-button.js.map +4 -4
- package/dist/cjs/components/_internal/menu-context.d.ts +2 -0
- package/dist/cjs/components/_internal/menu-context.d.ts.map +1 -1
- package/dist/cjs/components/_internal/menu-context.js +1 -1
- package/dist/cjs/components/_internal/menu-context.js.map +3 -3
- package/dist/cjs/components/_internal/pane-chrome.d.ts +17 -2
- package/dist/cjs/components/_internal/pane-chrome.d.ts.map +1 -1
- package/dist/cjs/components/_internal/pane-chrome.js +1 -1
- package/dist/cjs/components/_internal/pane-chrome.js.map +4 -4
- package/dist/cjs/components/_internal/shell-sidebar.js +1 -1
- package/dist/cjs/components/_internal/shell-sidebar.js.map +4 -4
- package/dist/cjs/components/accordion.d.ts +2 -2
- package/dist/cjs/components/accordion.d.ts.map +1 -1
- package/dist/cjs/components/accordion.js +1 -1
- package/dist/cjs/components/accordion.js.map +4 -4
- package/dist/cjs/components/alert-dialog.d.ts.map +1 -1
- package/dist/cjs/components/alert-dialog.js +1 -1
- package/dist/cjs/components/alert-dialog.js.map +3 -3
- package/dist/cjs/components/avatar.d.ts +1 -1
- package/dist/cjs/components/avatar.d.ts.map +1 -1
- package/dist/cjs/components/avatar.js +1 -1
- package/dist/cjs/components/avatar.js.map +3 -3
- package/dist/cjs/components/avatar.props.d.ts +8 -0
- package/dist/cjs/components/avatar.props.d.ts.map +1 -1
- package/dist/cjs/components/avatar.props.js +1 -1
- package/dist/cjs/components/avatar.props.js.map +2 -2
- package/dist/cjs/components/blockquote.d.ts +1 -1
- package/dist/cjs/components/blockquote.d.ts.map +1 -1
- package/dist/cjs/components/blockquote.js +1 -1
- package/dist/cjs/components/blockquote.js.map +4 -4
- package/dist/cjs/components/button.js +1 -1
- package/dist/cjs/components/button.js.map +4 -4
- package/dist/cjs/components/chatbar.d.ts.map +1 -1
- package/dist/cjs/components/chatbar.js +1 -1
- package/dist/cjs/components/chatbar.js.map +4 -4
- package/dist/cjs/components/checkbox-group.d.ts.map +1 -1
- package/dist/cjs/components/checkbox-group.js +1 -1
- package/dist/cjs/components/checkbox-group.js.map +3 -3
- package/dist/cjs/components/checkbox-group.primitive.d.ts +12 -5
- package/dist/cjs/components/checkbox-group.primitive.d.ts.map +1 -1
- package/dist/cjs/components/checkbox-group.primitive.js +1 -1
- package/dist/cjs/components/checkbox-group.primitive.js.map +3 -3
- package/dist/cjs/components/checkbox.js +1 -1
- package/dist/cjs/components/checkbox.js.map +3 -3
- package/dist/cjs/components/chip.d.ts.map +1 -1
- package/dist/cjs/components/chip.js +1 -1
- package/dist/cjs/components/chip.js.map +3 -3
- package/dist/cjs/components/code.d.ts.map +1 -1
- package/dist/cjs/components/code.js +1 -1
- package/dist/cjs/components/code.js.map +2 -2
- package/dist/cjs/components/combobox.js +1 -1
- package/dist/cjs/components/combobox.js.map +3 -3
- package/dist/cjs/components/context-menu.d.ts.map +1 -1
- package/dist/cjs/components/context-menu.js +1 -1
- package/dist/cjs/components/context-menu.js.map +4 -4
- package/dist/cjs/components/dialog.d.ts +1 -1
- package/dist/cjs/components/dialog.d.ts.map +1 -1
- package/dist/cjs/components/dialog.js +1 -1
- package/dist/cjs/components/dialog.js.map +3 -3
- package/dist/cjs/components/dropdown-menu.d.ts.map +1 -1
- package/dist/cjs/components/dropdown-menu.js +1 -1
- package/dist/cjs/components/dropdown-menu.js.map +4 -4
- package/dist/cjs/components/icons.d.ts +3 -1
- package/dist/cjs/components/icons.d.ts.map +1 -1
- package/dist/cjs/components/icons.js +1 -1
- package/dist/cjs/components/icons.js.map +3 -3
- package/dist/cjs/components/image.d.ts +23 -0
- package/dist/cjs/components/image.d.ts.map +1 -0
- package/dist/cjs/components/image.js +2 -0
- package/dist/cjs/components/image.js.map +7 -0
- package/dist/cjs/components/image.props.d.ts +19 -0
- package/dist/cjs/components/image.props.d.ts.map +1 -0
- package/dist/cjs/components/image.props.js +2 -0
- package/dist/cjs/components/image.props.js.map +7 -0
- package/dist/cjs/components/index.d.ts +2 -1
- package/dist/cjs/components/index.d.ts.map +1 -1
- package/dist/cjs/components/index.js +2 -10
- package/dist/cjs/components/index.js.map +4 -4
- package/dist/cjs/components/message-scroller.d.ts.map +1 -1
- package/dist/cjs/components/message-scroller.js +1 -1
- package/dist/cjs/components/message-scroller.js.map +4 -4
- package/dist/cjs/components/navbar.d.ts.map +1 -1
- package/dist/cjs/components/navbar.js +1 -1
- package/dist/cjs/components/navbar.js.map +3 -3
- package/dist/cjs/components/notice.d.ts +4 -1
- package/dist/cjs/components/notice.d.ts.map +1 -1
- package/dist/cjs/components/notice.js +1 -1
- package/dist/cjs/components/notice.js.map +4 -4
- package/dist/cjs/components/progress.d.ts.map +1 -1
- package/dist/cjs/components/progress.js +1 -1
- package/dist/cjs/components/progress.js.map +3 -3
- package/dist/cjs/components/schemas/button.schema.d.ts +2 -2
- package/dist/cjs/components/schemas/toggle.schema.d.ts +1 -1
- package/dist/cjs/components/scroll-area.d.ts +3 -1
- package/dist/cjs/components/scroll-area.d.ts.map +1 -1
- package/dist/cjs/components/scroll-area.js +1 -1
- package/dist/cjs/components/scroll-area.js.map +4 -4
- package/dist/cjs/components/segmented-control.d.ts +3 -1
- package/dist/cjs/components/segmented-control.d.ts.map +1 -1
- package/dist/cjs/components/segmented-control.js +1 -1
- package/dist/cjs/components/segmented-control.js.map +3 -3
- package/dist/cjs/components/select.d.ts +1 -2
- package/dist/cjs/components/select.d.ts.map +1 -1
- package/dist/cjs/components/select.js +1 -1
- package/dist/cjs/components/select.js.map +3 -3
- package/dist/cjs/components/separator.d.ts.map +1 -1
- package/dist/cjs/components/separator.js +1 -1
- package/dist/cjs/components/separator.js.map +3 -3
- package/dist/cjs/components/sheet.d.ts +1 -0
- package/dist/cjs/components/sheet.d.ts.map +1 -1
- package/dist/cjs/components/sheet.js +1 -1
- package/dist/cjs/components/sheet.js.map +3 -3
- package/dist/cjs/components/shell.d.ts +12 -1
- package/dist/cjs/components/shell.d.ts.map +1 -1
- package/dist/cjs/components/shell.js +1 -1
- package/dist/cjs/components/shell.js.map +4 -4
- package/dist/cjs/components/sidebar.d.ts.map +1 -1
- package/dist/cjs/components/sidebar.js +1 -1
- package/dist/cjs/components/sidebar.js.map +4 -4
- package/dist/cjs/components/slider.d.ts.map +1 -1
- package/dist/cjs/components/slider.js +1 -1
- package/dist/cjs/components/slider.js.map +3 -3
- package/dist/cjs/components/spinner.d.ts.map +1 -1
- package/dist/cjs/components/spinner.js +1 -1
- package/dist/cjs/components/spinner.js.map +3 -3
- package/dist/cjs/components/table.d.ts.map +1 -1
- package/dist/cjs/components/table.js +1 -1
- package/dist/cjs/components/table.js.map +4 -4
- package/dist/cjs/components/tabs.d.ts.map +1 -1
- package/dist/cjs/components/tabs.js +1 -1
- package/dist/cjs/components/tabs.js.map +2 -2
- package/dist/cjs/components/text-area.js +1 -1
- package/dist/cjs/components/text-area.js.map +2 -2
- package/dist/cjs/components/text-field.js +2 -2
- package/dist/cjs/components/text-field.js.map +2 -2
- package/dist/cjs/components/toggle.d.ts +3 -2
- package/dist/cjs/components/toggle.d.ts.map +1 -1
- package/dist/cjs/components/toggle.js +1 -9
- package/dist/cjs/components/toggle.js.map +4 -4
- package/dist/cjs/components/toolbar.d.ts +80 -8
- package/dist/cjs/components/toolbar.d.ts.map +1 -1
- package/dist/cjs/components/toolbar.js +1 -1
- package/dist/cjs/components/toolbar.js.map +4 -4
- package/dist/cjs/components/virtual-menu.d.ts +3 -5
- package/dist/cjs/components/virtual-menu.d.ts.map +1 -1
- package/dist/cjs/components/virtual-menu.js +1 -1
- package/dist/cjs/components/virtual-menu.js.map +3 -3
- package/dist/cjs/helpers/extract-margin-props.d.ts +7 -7
- package/dist/cjs/hooks/use-scroll-edges.d.ts +4 -2
- package/dist/cjs/hooks/use-scroll-edges.d.ts.map +1 -1
- package/dist/cjs/hooks/use-scroll-edges.js +1 -1
- package/dist/cjs/hooks/use-scroll-edges.js.map +3 -3
- package/dist/cjs/index.js +5 -5
- package/dist/cjs/index.js.map +4 -4
- package/dist/cjs/props/index.js +1 -1
- package/dist/cjs/props/index.js.map +2 -2
- package/dist/esm/chunk-3VTS4C63.js +2 -0
- package/dist/esm/chunk-3VTS4C63.js.map +7 -0
- package/dist/esm/chunk-3WE4E2WQ.js +2 -0
- package/dist/esm/chunk-3WE4E2WQ.js.map +7 -0
- package/dist/esm/chunk-3XUY5WFA.js +2 -0
- package/dist/esm/chunk-3XUY5WFA.js.map +7 -0
- package/dist/esm/chunk-3XZOE2IQ.js +2 -0
- package/dist/esm/chunk-3XZOE2IQ.js.map +7 -0
- package/dist/esm/chunk-432YLNB3.js +2 -0
- package/dist/esm/chunk-432YLNB3.js.map +7 -0
- package/dist/esm/chunk-4QKZYCCH.js +2 -0
- package/dist/esm/chunk-4QKZYCCH.js.map +7 -0
- package/dist/esm/chunk-4R5EMVB3.js +2 -0
- package/dist/esm/chunk-4R5EMVB3.js.map +7 -0
- package/dist/esm/chunk-4ZOVV3TY.js +2 -0
- package/dist/esm/chunk-4ZOVV3TY.js.map +7 -0
- package/dist/esm/{chunk-IX5HIHVI.js → chunk-62ZGP4ET.js} +2 -2
- package/dist/esm/{chunk-IX5HIHVI.js.map → chunk-62ZGP4ET.js.map} +3 -3
- package/dist/esm/chunk-BGAJ2MDF.js +2 -0
- package/dist/esm/chunk-BGAJ2MDF.js.map +7 -0
- package/dist/esm/chunk-CHPT42BY.js +2 -0
- package/dist/esm/{chunk-Y3JYEEFB.js.map → chunk-CHPT42BY.js.map} +2 -2
- package/dist/esm/{chunk-KS4U4VPH.js → chunk-CMHUK7OG.js} +2 -2
- package/dist/esm/{chunk-KS4U4VPH.js.map → chunk-CMHUK7OG.js.map} +2 -2
- package/dist/esm/chunk-CN6F4REJ.js +2 -0
- package/dist/esm/chunk-CN6F4REJ.js.map +7 -0
- package/dist/esm/chunk-DUTZUWZP.js +2 -0
- package/dist/esm/chunk-DUTZUWZP.js.map +7 -0
- package/dist/esm/chunk-EZYXYLR2.js +2 -0
- package/dist/esm/chunk-EZYXYLR2.js.map +7 -0
- package/dist/esm/chunk-FDJV5RXX.js +2 -0
- package/dist/esm/chunk-FDJV5RXX.js.map +7 -0
- package/dist/esm/chunk-G2JD52O5.js +2 -0
- package/dist/esm/{chunk-23KT3D2Z.js.map → chunk-G2JD52O5.js.map} +3 -3
- package/dist/esm/{chunk-PNAB6KCN.js → chunk-G4ETY2NP.js} +2 -2
- package/dist/esm/{chunk-PNAB6KCN.js.map → chunk-G4ETY2NP.js.map} +1 -1
- package/dist/esm/chunk-GPOCLDBR.js +2 -0
- package/dist/esm/chunk-GPOCLDBR.js.map +7 -0
- package/dist/esm/chunk-GYP66ZK2.js +2 -0
- package/dist/esm/chunk-GYP66ZK2.js.map +7 -0
- package/dist/esm/chunk-H5BYPX6V.js +2 -0
- package/dist/esm/chunk-H5BYPX6V.js.map +7 -0
- package/dist/esm/chunk-H5G7UECV.js +2 -0
- package/dist/esm/chunk-H5G7UECV.js.map +7 -0
- package/dist/esm/chunk-I4FLQELQ.js +2 -0
- package/dist/esm/chunk-I4FLQELQ.js.map +7 -0
- package/dist/esm/chunk-JYQGCXXI.js +2 -0
- package/dist/esm/chunk-JYQGCXXI.js.map +7 -0
- package/dist/esm/chunk-KA5UE2VN.js +2 -0
- package/dist/esm/chunk-KA5UE2VN.js.map +7 -0
- package/dist/esm/{chunk-T62PRLPN.js → chunk-KEGCX5VM.js} +2 -2
- package/dist/esm/chunk-KVHKPUZ2.js +2 -0
- package/dist/esm/chunk-KVHKPUZ2.js.map +7 -0
- package/dist/esm/chunk-M7I6ISPL.js +2 -0
- package/dist/esm/chunk-M7I6ISPL.js.map +7 -0
- package/dist/esm/chunk-MYYXOFU5.js +1 -0
- package/dist/esm/{chunk-FFG32ERA.js → chunk-N3WBEQWL.js} +3 -3
- package/dist/esm/chunk-N3WBEQWL.js.map +7 -0
- package/dist/esm/{chunk-HKPXDQ2B.js → chunk-NC3CJUE3.js} +2 -2
- package/dist/esm/chunk-P2MV6HLA.js +2 -0
- package/dist/esm/{chunk-7SS4UUJH.js.map → chunk-P2MV6HLA.js.map} +3 -3
- package/dist/esm/chunk-PALE5UWK.js +2 -0
- package/dist/esm/{chunk-DSPYHO3L.js.map → chunk-PALE5UWK.js.map} +2 -2
- package/dist/esm/chunk-PDMCLVYT.js +2 -0
- package/dist/esm/chunk-PDMCLVYT.js.map +7 -0
- package/dist/esm/chunk-PM6QY3JO.js +2 -0
- package/dist/esm/{chunk-TJL47GIO.js.map → chunk-PM6QY3JO.js.map} +3 -3
- package/dist/esm/chunk-RKZVXVBN.js +2 -0
- package/dist/esm/chunk-RKZVXVBN.js.map +7 -0
- package/dist/esm/chunk-TXQZ5HLV.js +2 -0
- package/dist/esm/chunk-TXQZ5HLV.js.map +7 -0
- package/dist/esm/chunk-UKASIY6M.js +2 -0
- package/dist/esm/chunk-UKASIY6M.js.map +7 -0
- package/dist/esm/{chunk-OJQNLROL.js → chunk-UY6WJUNA.js} +2 -2
- package/dist/esm/chunk-V5O3TF57.js +2 -0
- package/dist/esm/{chunk-3KQE2PSJ.js.map → chunk-V5O3TF57.js.map} +3 -3
- package/dist/esm/chunk-VUNCI6A6.js +2 -0
- package/dist/esm/chunk-VUNCI6A6.js.map +7 -0
- package/dist/esm/{chunk-JBHRV364.js → chunk-VUPIJNG2.js} +2 -2
- package/dist/esm/chunk-W6BN5QLH.js +2 -0
- package/dist/esm/{chunk-ZNDCZM5A.js.map → chunk-W6BN5QLH.js.map} +2 -2
- package/dist/esm/chunk-WG5ORTIW.js +2 -0
- package/dist/esm/chunk-WG5ORTIW.js.map +7 -0
- package/dist/esm/chunk-WMVR2XBR.js +2 -0
- package/dist/esm/{chunk-XKSU3NLG.js.map → chunk-WMVR2XBR.js.map} +2 -2
- package/dist/esm/{chunk-NNZTSXKH.js → chunk-WX7SX5BN.js} +2 -2
- package/dist/esm/chunk-XOACTIBL.js +2 -0
- package/dist/esm/chunk-XOACTIBL.js.map +7 -0
- package/dist/esm/components/_internal/base-button.d.ts +11 -1
- package/dist/esm/components/_internal/base-button.d.ts.map +1 -1
- package/dist/esm/components/_internal/base-button.js +1 -1
- package/dist/esm/components/_internal/menu-context.d.ts +2 -0
- package/dist/esm/components/_internal/menu-context.d.ts.map +1 -1
- package/dist/esm/components/_internal/menu-context.js +1 -1
- package/dist/esm/components/_internal/pane-chrome.d.ts +17 -2
- package/dist/esm/components/_internal/pane-chrome.d.ts.map +1 -1
- package/dist/esm/components/_internal/pane-chrome.js +1 -1
- package/dist/esm/components/_internal/shell-bottom.js +1 -1
- package/dist/esm/components/_internal/shell-inspector.js +1 -1
- package/dist/esm/components/_internal/shell-sidebar.js +1 -1
- package/dist/esm/components/accordion.d.ts +2 -2
- package/dist/esm/components/accordion.d.ts.map +1 -1
- package/dist/esm/components/accordion.js +1 -1
- package/dist/esm/components/alert-dialog.d.ts.map +1 -1
- package/dist/esm/components/alert-dialog.js +1 -1
- package/dist/esm/components/avatar.d.ts +1 -1
- package/dist/esm/components/avatar.d.ts.map +1 -1
- package/dist/esm/components/avatar.js +1 -1
- package/dist/esm/components/avatar.props.d.ts +8 -0
- package/dist/esm/components/avatar.props.d.ts.map +1 -1
- package/dist/esm/components/avatar.props.js +1 -1
- package/dist/esm/components/blockquote.d.ts +1 -1
- package/dist/esm/components/blockquote.d.ts.map +1 -1
- package/dist/esm/components/blockquote.js +1 -1
- package/dist/esm/components/button.js +1 -1
- package/dist/esm/components/chatbar.d.ts.map +1 -1
- package/dist/esm/components/chatbar.js +1 -1
- package/dist/esm/components/checkbox-group.d.ts.map +1 -1
- package/dist/esm/components/checkbox-group.js +1 -1
- package/dist/esm/components/checkbox-group.primitive.d.ts +12 -5
- package/dist/esm/components/checkbox-group.primitive.d.ts.map +1 -1
- package/dist/esm/components/checkbox-group.primitive.js +1 -1
- package/dist/esm/components/checkbox.js +1 -1
- package/dist/esm/components/chip.d.ts.map +1 -1
- package/dist/esm/components/chip.js +1 -1
- package/dist/esm/components/code.d.ts.map +1 -1
- package/dist/esm/components/code.js +1 -1
- package/dist/esm/components/combobox.js +1 -1
- package/dist/esm/components/context-menu.d.ts.map +1 -1
- package/dist/esm/components/context-menu.js +1 -1
- package/dist/esm/components/dialog.d.ts +1 -1
- package/dist/esm/components/dialog.d.ts.map +1 -1
- package/dist/esm/components/dialog.js +1 -1
- package/dist/esm/components/dropdown-menu.d.ts.map +1 -1
- package/dist/esm/components/dropdown-menu.js +1 -1
- package/dist/esm/components/icons.d.ts +3 -1
- package/dist/esm/components/icons.d.ts.map +1 -1
- package/dist/esm/components/icons.js +1 -1
- package/dist/esm/components/image.d.ts +23 -0
- package/dist/esm/components/image.d.ts.map +1 -0
- package/dist/esm/components/image.js +2 -0
- package/dist/esm/components/image.js.map +7 -0
- package/dist/esm/components/image.props.d.ts +19 -0
- package/dist/esm/components/image.props.d.ts.map +1 -0
- package/dist/esm/components/image.props.js +2 -0
- package/dist/esm/components/image.props.js.map +7 -0
- package/dist/esm/components/index.d.ts +2 -1
- package/dist/esm/components/index.d.ts.map +1 -1
- package/dist/esm/components/index.js +1 -1
- package/dist/esm/components/message-scroller.d.ts.map +1 -1
- package/dist/esm/components/message-scroller.js +1 -1
- package/dist/esm/components/navbar.d.ts.map +1 -1
- package/dist/esm/components/navbar.js +1 -1
- package/dist/esm/components/notice.d.ts +4 -1
- package/dist/esm/components/notice.d.ts.map +1 -1
- package/dist/esm/components/notice.js +1 -1
- package/dist/esm/components/progress.d.ts.map +1 -1
- package/dist/esm/components/progress.js +1 -1
- package/dist/esm/components/schemas/button.schema.d.ts +2 -2
- package/dist/esm/components/schemas/toggle.schema.d.ts +1 -1
- package/dist/esm/components/scroll-area.d.ts +3 -1
- package/dist/esm/components/scroll-area.d.ts.map +1 -1
- package/dist/esm/components/scroll-area.js +1 -1
- package/dist/esm/components/segmented-control.d.ts +3 -1
- package/dist/esm/components/segmented-control.d.ts.map +1 -1
- package/dist/esm/components/segmented-control.js +1 -1
- package/dist/esm/components/select.d.ts +1 -2
- package/dist/esm/components/select.d.ts.map +1 -1
- package/dist/esm/components/select.js +1 -1
- package/dist/esm/components/separator.d.ts.map +1 -1
- package/dist/esm/components/separator.js +1 -1
- package/dist/esm/components/sheet.d.ts +1 -0
- package/dist/esm/components/sheet.d.ts.map +1 -1
- package/dist/esm/components/sheet.js +1 -1
- package/dist/esm/components/shell.d.ts +12 -1
- package/dist/esm/components/shell.d.ts.map +1 -1
- package/dist/esm/components/shell.js +1 -1
- package/dist/esm/components/sidebar.d.ts.map +1 -1
- package/dist/esm/components/sidebar.js +1 -1
- package/dist/esm/components/slider.d.ts.map +1 -1
- package/dist/esm/components/slider.js +1 -1
- package/dist/esm/components/spinner.d.ts.map +1 -1
- package/dist/esm/components/spinner.js +1 -1
- package/dist/esm/components/table.d.ts.map +1 -1
- package/dist/esm/components/table.js +1 -1
- package/dist/esm/components/tabs.d.ts.map +1 -1
- package/dist/esm/components/tabs.js +1 -1
- package/dist/esm/components/text-area.js +1 -1
- package/dist/esm/components/text-field.js +1 -1
- package/dist/esm/components/toggle.d.ts +3 -2
- package/dist/esm/components/toggle.d.ts.map +1 -1
- package/dist/esm/components/toggle.js +1 -1
- package/dist/esm/components/toolbar.d.ts +80 -8
- package/dist/esm/components/toolbar.d.ts.map +1 -1
- package/dist/esm/components/toolbar.js +1 -1
- package/dist/esm/components/virtual-menu.d.ts +3 -5
- package/dist/esm/components/virtual-menu.d.ts.map +1 -1
- package/dist/esm/components/virtual-menu.js +1 -1
- package/dist/esm/helpers/extract-margin-props.d.ts +7 -7
- package/dist/esm/helpers/index.js +1 -1
- package/dist/esm/hooks/index.js +1 -1
- package/dist/esm/hooks/use-scroll-edges.d.ts +4 -2
- package/dist/esm/hooks/use-scroll-edges.d.ts.map +1 -1
- package/dist/esm/hooks/use-scroll-edges.js +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/props/index.js +1 -1
- package/package.json +1 -1
- package/src/components/_internal/base-button.css +6 -0
- package/src/components/_internal/base-button.tsx +56 -17
- package/src/components/_internal/base-sidebar-menu.css +8 -0
- package/src/components/_internal/menu-context.tsx +11 -0
- package/src/components/_internal/pane-chrome.tsx +45 -8
- package/src/components/accordion.css +35 -4
- package/src/components/accordion.tsx +12 -16
- package/src/components/alert-dialog.tsx +59 -161
- package/src/components/avatar.props.tsx +6 -0
- package/src/components/avatar.tsx +57 -71
- package/src/components/blockquote.tsx +8 -9
- package/src/components/chatbar.tsx +27 -20
- package/src/components/checkbox-group.primitive.tsx +40 -51
- package/src/components/checkbox-group.tsx +1 -9
- package/src/components/chip.css +18 -20
- package/src/components/chip.tsx +3 -4
- package/src/components/code.tsx +3 -2
- package/src/components/combobox.css +13 -0
- package/src/components/context-menu.tsx +23 -5
- package/src/components/dialog.tsx +59 -160
- package/src/components/dropdown-menu.tsx +8 -5
- package/src/components/icons.tsx +11 -1
- package/src/components/image.css +33 -0
- package/src/components/image.props.ts +18 -0
- package/src/components/image.tsx +71 -0
- package/src/components/index.css +1 -0
- package/src/components/index.tsx +8 -0
- package/src/components/message-scroller.tsx +48 -26
- package/src/components/navbar.tsx +34 -69
- package/src/components/notice.tsx +6 -3
- package/src/components/progress.tsx +6 -3
- package/src/components/scroll-area.css +28 -2
- package/src/components/scroll-area.tsx +49 -3
- package/src/components/segmented-control.css +8 -130
- package/src/components/segmented-control.tsx +36 -5
- package/src/components/select.tsx +100 -32
- package/src/components/separator.tsx +13 -1
- package/src/components/sheet.css +7 -6
- package/src/components/sheet.tsx +76 -143
- package/src/components/shell.css +26 -0
- package/src/components/shell.tsx +29 -8
- package/src/components/sidebar.tsx +27 -16
- package/src/components/slider.css +1 -0
- package/src/components/slider.tsx +54 -44
- package/src/components/spinner.css +19 -1
- package/src/components/spinner.tsx +21 -11
- package/src/components/table.tsx +18 -5
- package/src/components/tabs.css +34 -0
- package/src/components/tabs.tsx +0 -2
- package/src/components/text-area.css +2 -1
- package/src/components/text-area.tsx +1 -1
- package/src/components/text-field.tsx +1 -1
- package/src/components/toggle.tsx +21 -39
- package/src/components/toolbar.css +34 -0
- package/src/components/toolbar.tsx +432 -23
- package/src/components/virtual-menu.tsx +110 -37
- package/src/hooks/use-scroll-edges.ts +11 -2
- package/src/styles/tokens/color.css +1 -22
- package/src/styles/utilities/truncate.css +10 -0
- package/styles.css +252 -208
- package/tokens/base.css +0 -21
- package/tokens.css +0 -21
- package/utilities.css +5 -0
- package/dist/esm/chunk-23KT3D2Z.js +0 -2
- package/dist/esm/chunk-3JA7SJDT.js +0 -2
- package/dist/esm/chunk-3JA7SJDT.js.map +0 -7
- package/dist/esm/chunk-3KQE2PSJ.js +0 -2
- package/dist/esm/chunk-3YWVE5GL.js +0 -2
- package/dist/esm/chunk-3YWVE5GL.js.map +0 -7
- package/dist/esm/chunk-5BWLY27A.js +0 -2
- package/dist/esm/chunk-5BWLY27A.js.map +0 -7
- package/dist/esm/chunk-6CK7UTNH.js +0 -2
- package/dist/esm/chunk-6CK7UTNH.js.map +0 -7
- package/dist/esm/chunk-6RK26HIY.js +0 -2
- package/dist/esm/chunk-6RK26HIY.js.map +0 -7
- package/dist/esm/chunk-7ESWH773.js +0 -2
- package/dist/esm/chunk-7ESWH773.js.map +0 -7
- package/dist/esm/chunk-7SS4UUJH.js +0 -2
- package/dist/esm/chunk-A3YQIJDA.js +0 -2
- package/dist/esm/chunk-A3YQIJDA.js.map +0 -7
- package/dist/esm/chunk-AB3QCCUM.js +0 -2
- package/dist/esm/chunk-AB3QCCUM.js.map +0 -7
- package/dist/esm/chunk-BEP4AH5V.js +0 -2
- package/dist/esm/chunk-BEP4AH5V.js.map +0 -7
- package/dist/esm/chunk-D3U4MWDZ.js +0 -1
- package/dist/esm/chunk-DBROSD2J.js +0 -2
- package/dist/esm/chunk-DBROSD2J.js.map +0 -7
- package/dist/esm/chunk-DSPYHO3L.js +0 -2
- package/dist/esm/chunk-E2D2VWUI.js +0 -2
- package/dist/esm/chunk-E2D2VWUI.js.map +0 -7
- package/dist/esm/chunk-EMNSA65L.js +0 -2
- package/dist/esm/chunk-EMNSA65L.js.map +0 -7
- package/dist/esm/chunk-FFG32ERA.js.map +0 -7
- package/dist/esm/chunk-FHPHEIYJ.js +0 -2
- package/dist/esm/chunk-FHPHEIYJ.js.map +0 -7
- package/dist/esm/chunk-FJFBM7HW.js +0 -2
- package/dist/esm/chunk-FJFBM7HW.js.map +0 -7
- package/dist/esm/chunk-HIKMKGPT.js +0 -2
- package/dist/esm/chunk-HIKMKGPT.js.map +0 -7
- package/dist/esm/chunk-IJRBX6EV.js +0 -2
- package/dist/esm/chunk-IJRBX6EV.js.map +0 -7
- package/dist/esm/chunk-KMDXIZAG.js +0 -2
- package/dist/esm/chunk-KMDXIZAG.js.map +0 -7
- package/dist/esm/chunk-LC5AK2ZD.js +0 -2
- package/dist/esm/chunk-LC5AK2ZD.js.map +0 -7
- package/dist/esm/chunk-LHIS3UKQ.js +0 -2
- package/dist/esm/chunk-LHIS3UKQ.js.map +0 -7
- package/dist/esm/chunk-NLXJZJNN.js +0 -2
- package/dist/esm/chunk-NLXJZJNN.js.map +0 -7
- package/dist/esm/chunk-QOHJIF25.js +0 -2
- package/dist/esm/chunk-QOHJIF25.js.map +0 -7
- package/dist/esm/chunk-R4XJNQX5.js +0 -2
- package/dist/esm/chunk-R4XJNQX5.js.map +0 -7
- package/dist/esm/chunk-TJL47GIO.js +0 -2
- package/dist/esm/chunk-V32EP3S7.js +0 -2
- package/dist/esm/chunk-V32EP3S7.js.map +0 -7
- package/dist/esm/chunk-WKSXMFFF.js +0 -2
- package/dist/esm/chunk-WKSXMFFF.js.map +0 -7
- package/dist/esm/chunk-XKSU3NLG.js +0 -2
- package/dist/esm/chunk-Y3JYEEFB.js +0 -2
- package/dist/esm/chunk-YK3ZUMRQ.js +0 -2
- package/dist/esm/chunk-YK3ZUMRQ.js.map +0 -7
- package/dist/esm/chunk-YZM54IJE.js +0 -2
- package/dist/esm/chunk-YZM54IJE.js.map +0 -7
- package/dist/esm/chunk-ZJI2IK7C.js +0 -2
- package/dist/esm/chunk-ZJI2IK7C.js.map +0 -7
- package/dist/esm/chunk-ZNDCZM5A.js +0 -2
- /package/dist/esm/{chunk-T62PRLPN.js.map → chunk-KEGCX5VM.js.map} +0 -0
- /package/dist/esm/{chunk-D3U4MWDZ.js.map → chunk-MYYXOFU5.js.map} +0 -0
- /package/dist/esm/{chunk-HKPXDQ2B.js.map → chunk-NC3CJUE3.js.map} +0 -0
- /package/dist/esm/{chunk-OJQNLROL.js.map → chunk-UY6WJUNA.js.map} +0 -0
- /package/dist/esm/{chunk-JBHRV364.js.map → chunk-VUPIJNG2.js.map} +0 -0
- /package/dist/esm/{chunk-NNZTSXKH.js.map → chunk-WX7SX5BN.js.map} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/components/image.tsx"],
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nimport classNames from 'classnames';\nimport { useComposedRefs, useLayoutEffect } from 'radix-ui/internal';\n\nimport { imagePropDefs } from './image.props.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport { widthPropDefs } from '../props/width.props.js';\nimport { heightPropDefs } from '../props/height.props.js';\n\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { WidthProps } from '../props/width.props.js';\nimport type { HeightProps } from '../props/height.props.js';\nimport type { GetPropDefTypes } from '../props/prop-def.js';\n\ntype ImageElement = React.ElementRef<'img'>;\ntype ImageOwnProps = GetPropDefTypes<typeof imagePropDefs>;\ntype ImageStatus = 'loading' | 'loaded' | 'error';\n\ninterface ImageProps extends ComponentPropsWithout<'img', RemovedProps | 'width' | 'height' | 'src' | 'alt'>, WidthProps, HeightProps, ImageOwnProps {\n src: string;\n /** Required. Pass `\"\"` for a decorative picture. */\n alt: string;\n}\n\n/**\n * A plain `<img>` that loads lazily, fills its box by `fit` and takes the theme's corner.\n * One element and no wrapper: `width`, `height`, `className` and `style` all land on the\n * `<img>` itself.\n *\n * Until it loads it rests on a quiet neutral fill, which is also what stays if it fails.\n */\nconst Image = React.forwardRef<ImageElement, ImageProps>((props, forwardedRef) => {\n const { className, alt, radius, loading = 'lazy', decoding = 'async', onLoad, onError, ...imageProps } = extractProps(props, imagePropDefs, widthPropDefs, heightPropDefs);\n\n const [status, setStatus] = React.useState<ImageStatus>('loading');\n const ref = React.useRef<HTMLImageElement>(null);\n\n // A cached image, or one that finished before hydration, never fires onLoad for us.\n useLayoutEffect(() => {\n const img = ref.current;\n if (img?.complete) setStatus(img.naturalWidth > 0 ? 'loaded' : 'error');\n else setStatus('loading');\n }, [props.src]);\n\n const setRefs = useComposedRefs(ref, forwardedRef);\n\n return (\n <img\n {...imageProps}\n ref={setRefs}\n alt={alt}\n loading={loading}\n decoding={decoding}\n data-radius={radius}\n data-status={status}\n className={classNames('kui-Image', className)}\n onLoad={(event) => {\n setStatus('loaded');\n onLoad?.(event);\n }}\n onError={(event) => {\n setStatus('error');\n onError?.(event);\n }}\n />\n );\n});\nImage.displayName = 'Image';\n\nexport { Image };\nexport type { ImageProps };\n"],
|
|
5
|
+
"mappings": "2JAAA,UAAYA,MAAW,QACvB,OAAOC,MAAgB,aACvB,OAAS,mBAAAC,EAAiB,mBAAAC,MAAuB,oBA6BjD,IAAMC,EAAc,aAAqC,CAACC,EAAOC,IAAiB,CAChF,GAAM,CAAE,UAAAC,EAAW,IAAAC,EAAK,OAAAC,EAAQ,QAAAC,EAAU,OAAQ,SAAAC,EAAW,QAAS,OAAAC,EAAQ,QAAAC,EAAS,GAAGC,CAAW,EAAIC,EAAaV,EAAOW,EAAeC,EAAeC,CAAc,EAEnK,CAACC,EAAQC,CAAS,EAAU,WAAsB,SAAS,EAC3DC,EAAY,SAAyB,IAAI,EAG/CC,EAAgB,IAAM,CACpB,IAAMC,EAAMF,EAAI,QACZE,GAAK,SAAUH,EAAUG,EAAI,aAAe,EAAI,SAAW,OAAO,EACjEH,EAAU,SAAS,CAC1B,EAAG,CAACf,EAAM,GAAG,CAAC,EAEd,IAAMmB,EAAUC,EAAgBJ,EAAKf,CAAY,EAEjD,OACE,gBAAC,OACE,GAAGQ,EACJ,IAAKU,EACL,IAAKhB,EACL,QAASE,EACT,SAAUC,EACV,cAAaF,EACb,cAAaU,EACb,UAAWO,EAAW,YAAanB,CAAS,EAC5C,OAASoB,GAAU,CACjBP,EAAU,QAAQ,EAClBR,IAASe,CAAK,CAChB,EACA,QAAUA,GAAU,CAClBP,EAAU,OAAO,EACjBP,IAAUc,CAAK,CACjB,EACF,CAEJ,CAAC,EACDvB,EAAM,YAAc",
|
|
6
|
+
"names": ["React", "classNames", "useComposedRefs", "useLayoutEffect", "Image", "props", "forwardedRef", "className", "alt", "radius", "loading", "decoding", "onLoad", "onError", "imageProps", "extractProps", "imagePropDefs", "widthPropDefs", "heightPropDefs", "status", "setStatus", "ref", "useLayoutEffect", "img", "setRefs", "useComposedRefs", "classNames", "event"]
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
//# sourceMappingURL=chunk-MYYXOFU5.js.map
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import{a as
|
|
1
|
+
import{a as z,b as G}from"./chunk-LXTGEI62.js";import{e as B}from"./chunk-3YLYGKFB.js";import{a as q}from"./chunk-ELAW7ZUG.js";import{a as se}from"./chunk-OS3FCYZY.js";var ie={};se(ie,{Root:()=>J,Slot:()=>Q});import*as e from"react";import*as U from"react-dom";import _ from"classnames";import{composeRefs as Z}from"radix-ui/internal";var J=e.forwardRef((h,v)=>{let n=B(h,z.size),f=e.useRef(null),{children:E,className:w,color:k,radius:L,style:C,...a}=q(n,z),x=e.useId(),{"aria-describedby":g,"aria-labelledby":I,"aria-invalid":P}=a,T=!!a.error||P===!0||P==="true",M=e.useMemo(()=>{let o=[];return a.errorMessage&&o.push(x),g&&o.push(g),o.length>0?o.join(" "):void 0},[a.errorMessage,g,x]),y=e.useMemo(()=>({"aria-invalid":T?!0:P,"aria-describedby":M,"aria-labelledby":I}),[T,P,M,I]),{error:s,errorMessage:D,required:N,"aria-describedby":O,"aria-labelledby":m,...d}=a,i=e.useCallback(o=>{let S=o.target;if(S.closest("input, button, a"))return;let p=f.current;if(!p)return;let b=S.closest(`
|
|
2
2
|
.kui-TextFieldSlot[data-side='right'],
|
|
3
3
|
.kui-TextFieldSlot:not([data-side='right']) ~ .kui-TextFieldSlot:not([data-side='left'])
|
|
4
|
-
`)?p.value.length:0;requestAnimationFrame(()=>{try{p.setSelectionRange(b,b)}catch{}p.focus()})},[]);return e.createElement("div",{"data-accent-color":k,"data-radius":L,style:C,className:_("kui-TextFieldRoot",w,{"kui-error":T}),onPointerDown:i},e.createElement("input",{
|
|
5
|
-
//# sourceMappingURL=chunk-
|
|
4
|
+
`)?p.value.length:0;requestAnimationFrame(()=>{try{p.setSelectionRange(b,b)}catch{}p.focus()})},[]);return e.createElement("div",{"data-accent-color":k,"data-radius":L,style:C,className:_("kui-TextFieldRoot",w,{"kui-error":T}),onPointerDown:i},e.createElement("input",{...d,required:N||void 0,...y,ref:Z(f,v),className:"kui-reset kui-TextFieldInput"}),E,a.errorMessage&&e.createElement("div",{id:x,className:"kui-TextFieldErrorMessage",role:"alert"},a.errorMessage))});J.displayName="TextField.Root";var R=(()=>{if(typeof navigator>"u")return!1;let h=navigator.userAgent,v=/^((?!chrome|android).)*safari/i.test(h),n=/firefox/i.test(h);return v||n})(),Q=e.forwardRef((h,v)=>{let{scrub:n,scrubValue:f,scrubStep:E=1,scrubSensitivity:w=1,scrubMin:k,scrubMax:L,scrubShiftMultiplier:C=10,scrubAltMultiplier:a=.1,onScrub:x,...g}=h,{className:I,color:P,side:T,...M}=q(g,G),y=e.useRef(null),[s,D]=e.useState(!1),[N,O]=e.useState({x:0,y:0}),m=e.useRef(0),d=e.useRef(0),i=e.useRef(0),o=e.useRef(null),S=e.useRef(0),p=e.useRef({scrubValue:f,scrubStep:E,scrubSensitivity:w,scrubMin:k,scrubMax:L,scrubShiftMultiplier:C,scrubAltMultiplier:a,onScrub:x});p.current={scrubValue:f,scrubStep:E,scrubSensitivity:w,scrubMin:k,scrubMax:L,scrubShiftMultiplier:C,scrubAltMultiplier:a,onScrub:x};let K=e.useCallback(t=>{if(!n||t.target.closest("input, button, a"))return;t.preventDefault(),m.current=0,d.current=f??0,i.current=t.clientX,O({x:t.clientX,y:t.clientY});let c=y.current;c&&(R?(o.current=t.pointerId,S.current=t.clientX,c.setPointerCapture(t.pointerId),D(!0)):c.requestPointerLock())},[n,f]);e.useEffect(()=>{if(R)return;let t=()=>{let r=document.pointerLockElement===y.current;D(r),r||(p.current.onScrub?.(0,!1),m.current=0,d.current=0)};return document.addEventListener("pointerlockchange",t),()=>{document.removeEventListener("pointerlockchange",t)}},[]);let b=e.useCallback((t,r,c,oe)=>{let u=p.current,A=window.innerWidth,H=window.innerHeight;i.current+=t,i.current>A?i.current=i.current%A:i.current<0&&(i.current=A+i.current%A),O(F=>{let l=F.y+r;return l>H?l=l%H:l<0&&(l=H+l%H),{x:i.current,y:l}}),m.current+=t;let V=m.current/u.scrubSensitivity;if(Math.abs(V)>=1){let F=1;c?F=u.scrubShiftMultiplier:oe&&(F=u.scrubAltMultiplier);let l=Math.trunc(V),W=l*u.scrubStep*F,j=W;if(u.scrubMin!==void 0||u.scrubMax!==void 0){let ne=d.current+W,Y=Math.max(u.scrubMin??-1/0,Math.min(u.scrubMax??1/0,ne));j=Y-d.current,d.current=Y}else d.current+=W;j!==0&&u.onScrub?.(j,!0),m.current=(V-l)*u.scrubSensitivity}},[]),X=e.useCallback(()=>{p.current.onScrub?.(0,!1),m.current=0,d.current=0,o.current=null,D(!1)},[]),$=e.useCallback(t=>{if(!s||!R)return;let r=t.clientX-S.current;S.current=t.clientX,b(r,t.movementY,t.shiftKey,t.altKey)},[s,b]),ee=e.useCallback(t=>{if(!R||o.current!==t.pointerId)return;let r=y.current;r&&o.current!==null&&r.releasePointerCapture(o.current),X()},[X]),te=e.useCallback(()=>{R&&s&&X()},[s,X]);e.useEffect(()=>{if(!s||R)return;let t=c=>{b(c.movementX,c.movementY,c.shiftKey,c.altKey)},r=()=>{document.exitPointerLock()};return document.addEventListener("mousemove",t),document.addEventListener("mouseup",r),document.body.style.userSelect="none",()=>{document.removeEventListener("mousemove",t),document.removeEventListener("mouseup",r),document.body.style.userSelect=""}},[s,b]),e.useEffect(()=>{if(!s||!R)return;let t=document.createElement("style");return t.textContent="* { cursor: none !important; user-select: none !important; }",document.head.appendChild(t),()=>{document.head.removeChild(t)}},[s]);let re=s?U.createPortal(e.createElement("img",{className:"kui-TextFieldSlotScrubCursor",src:"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='black' stroke='white' stroke-width='1' d='M0 12 L5 7 L5 10 L19 10 L19 7 L24 12 L19 17 L19 14 L5 14 L5 17 Z'/%3E%3C/svg%3E",alt:"",style:{position:"fixed",left:N.x,top:N.y,transform:"translate(-50%, -50%)",pointerEvents:"none",zIndex:99999,width:24,height:24},"aria-hidden":"true"}),document.body):null;return e.createElement("div",{"data-accent-color":P,"data-side":T,"data-scrub":n||void 0,"data-scrubbing":s||void 0,...M,ref:Z(y,v),className:_("kui-TextFieldSlot",I),onPointerDown:n?K:void 0,onPointerMove:n?$:void 0,onPointerUp:n?ee:void 0,onLostPointerCapture:n?te:void 0},M.children,re)});Q.displayName="TextField.Slot";export{J as a,Q as b,ie as c};
|
|
5
|
+
//# sourceMappingURL=chunk-N3WBEQWL.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/components/text-field.tsx"],
|
|
4
|
+
"sourcesContent": ["'use client';\n\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom';\nimport classNames from 'classnames';\nimport { composeRefs } from 'radix-ui/internal';\n\nimport { textFieldRootPropDefs, textFieldSlotPropDefs, type TextFieldSlotScrubProps } from './text-field.props.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport { useThemeSizeProps } from '../helpers/theme-size.js';\n\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { NotInputTextualAttributes } from '../helpers/input-attributes.js';\nimport type { GetPropDefTypes } from '../props/prop-def.js';\n\ntype TextFieldRootElement = React.ElementRef<'input'>;\ntype TextFieldRootOwnProps = GetPropDefTypes<typeof textFieldRootPropDefs> & {\n defaultValue?: string | number;\n value?: string | number;\n type?: 'date' | 'datetime-local' | 'email' | 'hidden' | 'month' | 'number' | 'password' | 'search' | 'tel' | 'text' | 'time' | 'url' | 'week';\n};\ntype TextFieldInputProps = ComponentPropsWithout<'input', NotInputTextualAttributes | 'color' | 'defaultValue' | 'size' | 'type' | 'value'>;\ninterface TextFieldRootProps extends TextFieldInputProps, TextFieldRootOwnProps {}\nconst TextFieldRoot = React.forwardRef<TextFieldRootElement, TextFieldRootProps>((ownProps, forwardedRef) => {\n const props = useThemeSizeProps(ownProps, textFieldRootPropDefs.size);\n const inputRef = React.useRef<HTMLInputElement>(null);\n const { children, className, color, radius, style, ...inputProps } = extractProps(props, textFieldRootPropDefs);\n\n // Generate unique IDs for accessibility\n const errorId = React.useId();\n\n const { 'aria-describedby': ariaDescribedby, 'aria-labelledby': ariaLabelledby, 'aria-invalid': ariaInvalid } = inputProps;\n\n // Invalid when `error` is set or the caller passes aria-invalid; the CSS keys on aria-invalid only.\n const isInvalid = Boolean(inputProps.error) || ariaInvalid === true || ariaInvalid === 'true';\n\n // Build aria-describedby string\n const describedBy = React.useMemo(() => {\n const parts = [];\n if (inputProps.errorMessage) parts.push(errorId);\n if (ariaDescribedby) parts.push(ariaDescribedby);\n return parts.length > 0 ? parts.join(' ') : undefined;\n }, [inputProps.errorMessage, ariaDescribedby, errorId]);\n\n // Build aria attributes\n const ariaProps = React.useMemo(\n () => ({\n 'aria-invalid': isInvalid ? true : ariaInvalid,\n 'aria-describedby': describedBy,\n 'aria-labelledby': ariaLabelledby,\n }),\n [isInvalid, ariaInvalid, describedBy, ariaLabelledby],\n );\n\n // Filter out our custom props to avoid DOM warnings\n const { error, errorMessage, required, 'aria-describedby': _ariaDescribedby, 'aria-labelledby': _ariaLabelledby, ...nativeInputProps } = inputProps;\n\n // Memoized pointer event handler\n const handlePointerDown = React.useCallback((event: React.PointerEvent) => {\n const target = event.target as HTMLElement;\n if (target.closest('input, button, a')) return;\n\n const input = inputRef.current;\n if (!input) return;\n\n // Same selector as in the CSS to find the right slot\n const isRightSlot = target.closest(`\n .kui-TextFieldSlot[data-side='right'],\n .kui-TextFieldSlot:not([data-side='right']) ~ .kui-TextFieldSlot:not([data-side='left'])\n `);\n\n const cursorPosition = isRightSlot ? input.value.length : 0;\n\n requestAnimationFrame(() => {\n // Only some input types support this, browsers will throw an error if not supported\n // See: https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/setSelectionRange#:~:text=Note%20that%20according,not%20support%20selection%22.\n try {\n input.setSelectionRange(cursorPosition, cursorPosition);\n } catch {}\n input.focus();\n });\n }, []);\n\n return (\n <div\n data-accent-color={color}\n data-radius={radius}\n style={style}\n className={classNames('kui-TextFieldRoot', className, {\n 'kui-error': isInvalid,\n })}\n onPointerDown={handlePointerDown}\n >\n <input {...nativeInputProps} required={required || undefined} {...ariaProps} ref={composeRefs(inputRef, forwardedRef)} className=\"kui-reset kui-TextFieldInput\" />\n {children}\n {inputProps.errorMessage && (\n <div id={errorId} className=\"kui-TextFieldErrorMessage\" role=\"alert\">\n {inputProps.errorMessage}\n </div>\n )}\n </div>\n );\n});\nTextFieldRoot.displayName = 'TextField.Root';\n\ntype TextFieldSlotElement = React.ElementRef<'div'>;\ntype TextFieldSlotOwnProps = GetPropDefTypes<typeof textFieldSlotPropDefs> & TextFieldSlotScrubProps;\ninterface TextFieldSlotProps extends ComponentPropsWithout<'div', RemovedProps>, TextFieldSlotOwnProps {}\n\n// Detect if we should use pointer capture instead of pointer lock\n// Safari and Firefox show intrusive browser warnings with pointer lock\nconst usePointerCapture = (() => {\n if (typeof navigator === 'undefined') return false;\n const ua = navigator.userAgent;\n const isSafari = /^((?!chrome|android).)*safari/i.test(ua);\n const isFirefox = /firefox/i.test(ua);\n return isSafari || isFirefox;\n})();\n\nconst TextFieldSlot = React.forwardRef<TextFieldSlotElement, TextFieldSlotProps>((props, forwardedRef) => {\n // Extract scrub props first (not part of PropDef system)\n const { scrub, scrubValue, scrubStep = 1, scrubSensitivity = 1, scrubMin, scrubMax, scrubShiftMultiplier = 10, scrubAltMultiplier = 0.1, onScrub, ...restProps } = props;\n\n // Then extract styling props\n const { className, color, side, ...slotProps } = extractProps(restProps, textFieldSlotPropDefs);\n\n const slotRef = React.useRef<HTMLDivElement>(null);\n const [isScrubbing, setIsScrubbing] = React.useState(false);\n // Virtual cursor position - X wraps around viewport, Y follows mouse\n const [cursorPosition, setCursorPosition] = React.useState({ x: 0, y: 0 });\n\n // Track accumulated sub-step movement for precision\n const accumulatedMovement = React.useRef(0);\n // Track current value for clamping (initialized to scrubValue when scrubbing starts)\n const currentValue = React.useRef(0);\n // Track virtual X position for wrap-around (separate from rendered position)\n const virtualX = React.useRef(0);\n // Track pointer ID for capture mode\n const pointerIdRef = React.useRef<number | null>(null);\n // Track last X position for capture mode (movementX calculation)\n const lastXRef = React.useRef(0);\n\n // Store scrub config in refs so document handlers can access latest values\n const scrubConfigRef = React.useRef({\n scrubValue,\n scrubStep,\n scrubSensitivity,\n scrubMin,\n scrubMax,\n scrubShiftMultiplier,\n scrubAltMultiplier,\n onScrub,\n });\n scrubConfigRef.current = {\n scrubValue,\n scrubStep,\n scrubSensitivity,\n scrubMin,\n scrubMax,\n scrubShiftMultiplier,\n scrubAltMultiplier,\n onScrub,\n };\n\n const handlePointerDown = React.useCallback(\n (event: React.PointerEvent) => {\n if (!scrub) return;\n\n // Don't start scrubbing if clicking on interactive elements\n const target = event.target as HTMLElement;\n if (target.closest('input, button, a')) return;\n\n event.preventDefault();\n accumulatedMovement.current = 0;\n // Initialize to current value so min/max clamping works correctly\n currentValue.current = scrubValue ?? 0;\n\n // Initialize virtual cursor at actual mouse position\n virtualX.current = event.clientX;\n setCursorPosition({ x: event.clientX, y: event.clientY });\n\n const slot = slotRef.current;\n if (!slot) return;\n\n if (usePointerCapture) {\n // Safari/Firefox: Use pointer capture (no browser warning)\n pointerIdRef.current = event.pointerId;\n lastXRef.current = event.clientX;\n slot.setPointerCapture(event.pointerId);\n setIsScrubbing(true);\n } else {\n // Chrome: Use pointer lock for infinite movement\n slot.requestPointerLock();\n }\n },\n [scrub, scrubValue],\n );\n\n // Handle pointer lock state changes (Chrome only)\n React.useEffect(() => {\n if (usePointerCapture) return;\n\n const handlePointerLockChange = () => {\n const isLocked = document.pointerLockElement === slotRef.current;\n setIsScrubbing(isLocked);\n if (!isLocked) {\n // Fire callback with isChanging = false when scrubbing ends\n scrubConfigRef.current.onScrub?.(0, false);\n accumulatedMovement.current = 0;\n currentValue.current = 0;\n }\n };\n\n document.addEventListener('pointerlockchange', handlePointerLockChange);\n return () => {\n document.removeEventListener('pointerlockchange', handlePointerLockChange);\n };\n }, []);\n\n // Shared scrub calculation logic\n const processScrubMovement = React.useCallback((movementX: number, movementY: number, shiftKey: boolean, altKey: boolean) => {\n const config = scrubConfigRef.current;\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n\n // Update virtual position with wrap-around at viewport edges\n virtualX.current += movementX;\n if (virtualX.current > viewportWidth) {\n virtualX.current = virtualX.current % viewportWidth;\n } else if (virtualX.current < 0) {\n virtualX.current = viewportWidth + (virtualX.current % viewportWidth);\n }\n\n // Also track Y with wrap-around\n setCursorPosition((prev) => {\n let newY = prev.y + movementY;\n if (newY > viewportHeight) {\n newY = newY % viewportHeight;\n } else if (newY < 0) {\n newY = viewportHeight + (newY % viewportHeight);\n }\n return { x: virtualX.current, y: newY };\n });\n\n // Accumulate movement for sensitivity calculation\n accumulatedMovement.current += movementX;\n\n // Calculate how many steps we've moved\n const stepsFromMovement = accumulatedMovement.current / config.scrubSensitivity;\n\n if (Math.abs(stepsFromMovement) >= 1) {\n // Determine modifier multiplier\n let multiplier = 1;\n if (shiftKey) {\n multiplier = config.scrubShiftMultiplier;\n } else if (altKey) {\n multiplier = config.scrubAltMultiplier;\n }\n\n // Calculate delta\n const wholeSteps = Math.trunc(stepsFromMovement);\n const delta = wholeSteps * config.scrubStep * multiplier;\n\n // Apply min/max clamping if bounds are set\n let clampedDelta = delta;\n if (config.scrubMin !== undefined || config.scrubMax !== undefined) {\n const newValue = currentValue.current + delta;\n const clampedValue = Math.max(config.scrubMin ?? -Infinity, Math.min(config.scrubMax ?? Infinity, newValue));\n clampedDelta = clampedValue - currentValue.current;\n currentValue.current = clampedValue;\n } else {\n currentValue.current += delta;\n }\n\n // Fire callback with clamped delta (isChanging = true during drag)\n if (clampedDelta !== 0) {\n config.onScrub?.(clampedDelta, true);\n }\n\n // Keep the fractional remainder for smooth sub-pixel accumulation\n accumulatedMovement.current = (stepsFromMovement - wholeSteps) * config.scrubSensitivity;\n }\n }, []);\n\n // End scrubbing helper\n const endScrubbing = React.useCallback(() => {\n scrubConfigRef.current.onScrub?.(0, false);\n accumulatedMovement.current = 0;\n currentValue.current = 0;\n pointerIdRef.current = null;\n setIsScrubbing(false);\n }, []);\n\n // Handle pointer capture mode events (Safari/Firefox)\n const handlePointerMove = React.useCallback(\n (event: React.PointerEvent) => {\n if (!isScrubbing || !usePointerCapture) return;\n\n const movementX = event.clientX - lastXRef.current;\n lastXRef.current = event.clientX;\n\n processScrubMovement(movementX, event.movementY, event.shiftKey, event.altKey);\n },\n [isScrubbing, processScrubMovement],\n );\n\n const handlePointerUp = React.useCallback(\n (event: React.PointerEvent) => {\n if (!usePointerCapture || pointerIdRef.current !== event.pointerId) return;\n\n const slot = slotRef.current;\n if (slot && pointerIdRef.current !== null) {\n slot.releasePointerCapture(pointerIdRef.current);\n }\n endScrubbing();\n },\n [endScrubbing],\n );\n\n const handleLostPointerCapture = React.useCallback(() => {\n if (usePointerCapture && isScrubbing) {\n endScrubbing();\n }\n }, [isScrubbing, endScrubbing]);\n\n // Attach document-level listeners for pointer lock mode (Chrome)\n React.useEffect(() => {\n if (!isScrubbing || usePointerCapture) return;\n\n const handleMouseMove = (event: MouseEvent) => {\n processScrubMovement(event.movementX, event.movementY, event.shiftKey, event.altKey);\n };\n\n const handleMouseUp = () => {\n // Exit pointer lock to end scrubbing\n document.exitPointerLock();\n };\n\n // Use mousemove for pointer lock (pointermove doesn't work well with pointer lock)\n document.addEventListener('mousemove', handleMouseMove);\n document.addEventListener('mouseup', handleMouseUp);\n\n // Disable text selection during scrubbing\n document.body.style.userSelect = 'none';\n\n return () => {\n document.removeEventListener('mousemove', handleMouseMove);\n document.removeEventListener('mouseup', handleMouseUp);\n document.body.style.userSelect = '';\n };\n }, [isScrubbing, processScrubMovement]);\n\n // Hide native cursor and disable text selection during pointer capture scrubbing\n React.useEffect(() => {\n if (!isScrubbing || !usePointerCapture) return;\n\n // Create a style element to hide cursor globally during scrub\n const style = document.createElement('style');\n style.textContent = '* { cursor: none !important; user-select: none !important; }';\n document.head.appendChild(style);\n\n return () => {\n document.head.removeChild(style);\n };\n }, [isScrubbing]);\n\n // Render virtual cursor via portal to body so it's not clipped\n // Using a data URI of ew-resize cursor for a native look\n const virtualCursor = isScrubbing\n ? ReactDOM.createPortal(\n <img\n className=\"kui-TextFieldSlotScrubCursor\"\n src=\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' viewBox='0 0 24 24'%3E%3Cpath fill='black' stroke='white' stroke-width='1' d='M0 12 L5 7 L5 10 L19 10 L19 7 L24 12 L19 17 L19 14 L5 14 L5 17 Z'/%3E%3C/svg%3E\"\n alt=\"\"\n style={{\n position: 'fixed',\n left: cursorPosition.x,\n top: cursorPosition.y,\n transform: 'translate(-50%, -50%)',\n pointerEvents: 'none',\n zIndex: 99999,\n width: 24,\n height: 24,\n }}\n aria-hidden=\"true\"\n />,\n document.body,\n )\n : null;\n\n return (\n <div\n data-accent-color={color}\n data-side={side}\n data-scrub={scrub || undefined}\n data-scrubbing={isScrubbing || undefined}\n {...slotProps}\n ref={composeRefs(slotRef, forwardedRef)}\n className={classNames('kui-TextFieldSlot', className)}\n onPointerDown={scrub ? handlePointerDown : undefined}\n onPointerMove={scrub ? handlePointerMove : undefined}\n onPointerUp={scrub ? handlePointerUp : undefined}\n onLostPointerCapture={scrub ? handleLostPointerCapture : undefined}\n >\n {slotProps.children}\n {virtualCursor}\n </div>\n );\n});\nTextFieldSlot.displayName = 'TextField.Slot';\n\nexport { TextFieldRoot as Root, TextFieldSlot as Slot };\nexport type { TextFieldRootProps as RootProps, TextFieldSlotProps as SlotProps };\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["text_field_exports", "__export", "TextFieldRoot", "TextFieldSlot", "React", "ReactDOM", "classNames", "composeRefs", "TextFieldRoot", "ownProps", "forwardedRef", "props", "useThemeSizeProps", "textFieldRootPropDefs", "inputRef", "children", "className", "color", "radius", "style", "inputProps", "extractProps", "errorId", "ariaDescribedby", "ariaLabelledby", "ariaInvalid", "isInvalid", "describedBy", "parts", "ariaProps", "error", "errorMessage", "required", "_ariaDescribedby", "_ariaLabelledby", "nativeInputProps", "handlePointerDown", "event", "target", "input", "cursorPosition", "classNames", "composeRefs", "usePointerCapture", "ua", "isSafari", "isFirefox", "TextFieldSlot", "scrub", "scrubValue", "scrubStep", "scrubSensitivity", "scrubMin", "scrubMax", "scrubShiftMultiplier", "scrubAltMultiplier", "onScrub", "restProps", "side", "slotProps", "textFieldSlotPropDefs", "slotRef", "isScrubbing", "setIsScrubbing", "setCursorPosition", "accumulatedMovement", "currentValue", "virtualX", "pointerIdRef", "lastXRef", "scrubConfigRef", "slot", "handlePointerLockChange", "isLocked", "processScrubMovement", "movementX", "movementY", "shiftKey", "altKey", "config", "viewportWidth", "viewportHeight", "prev", "newY", "stepsFromMovement", "multiplier", "wholeSteps", "delta", "clampedDelta", "newValue", "clampedValue", "endScrubbing", "handlePointerMove", "handlePointerUp", "handleLostPointerCapture", "handleMouseMove", "handleMouseUp", "virtualCursor"]
|
|
7
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as p,b as i}from"./chunk-62ZGP4ET.js";import{e as s}from"./chunk-3YLYGKFB.js";import{a as o}from"./chunk-DNOQ6E3W.js";import{a as c}from"./chunk-ELAW7ZUG.js";import*as e from"react";import b from"classnames";import{Checkbox as h}from"radix-ui";import{useControllableState as P}from"radix-ui/internal";var u=e.forwardRef((a,k)=>{let m=s(a,o.size),{className:n,color:C,checked:d,defaultChecked:t,onCheckedChange:f,...l}=c(m,o),[r,x]=P({prop:d,defaultProp:t??!1,onChange:f});return e.createElement(h.Root,{"data-accent-color":C,...l,defaultChecked:t,checked:r,onCheckedChange:x,asChild:!1,ref:k,className:b("kui-reset","kui-BaseCheckboxRoot","kui-CheckboxRoot",n)},e.createElement(h.Indicator,{asChild:!0,className:"kui-BaseCheckboxIndicator kui-CheckboxIndicator"},r==="indeterminate"?e.createElement(p,null):e.createElement(i,null)))});u.displayName="Checkbox";export{u as a};
|
|
2
|
+
//# sourceMappingURL=chunk-NC3CJUE3.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as p}from"./chunk-SKOYHBIE.js";import{a as t}from"./chunk-ELAW7ZUG.js";import{a as s}from"./chunk-E23RKOQJ.js";import*as r from"react";import l from"classnames";import{Progress as i}from"radix-ui";var c=r.forwardRef((m,a)=>{let{className:P,style:n,color:f,radius:d,duration:g,...e}=t(m,p),o=e.value!=null;return r.createElement(i.Root,{"data-accent-color":f,"data-radius":d,ref:a,className:l("kui-ProgressRoot",P),style:s({"--progress-duration":o?void 0:g,"--progress-value":o?e.value:void 0,"--progress-max":e.max??void 0},n),...e,asChild:!1},r.createElement(i.Indicator,{className:"kui-ProgressIndicator"}))});c.displayName="Progress";export{c as a};
|
|
2
|
+
//# sourceMappingURL=chunk-P2MV6HLA.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/components/progress.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nimport classNames from 'classnames';\nimport { Progress as ProgressPrimitive } from 'radix-ui';\n\nimport { progressPropDefs } from './progress.props.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport { mergeStyles } from '../helpers/merge-styles.js';\n\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { GetPropDefTypes } from '../props/prop-def.js';\n\ntype ProgressElement = React.ElementRef<typeof ProgressPrimitive.Root>;\ntype ProgressOwnProps = GetPropDefTypes<typeof progressPropDefs>;\ninterface ProgressProps\n extends ComponentPropsWithout<typeof ProgressPrimitive.Root, RemovedProps | 'children'>,\n ProgressOwnProps {\n duration?: `${number}s` | `${number}ms`;\n}\nconst Progress = React.forwardRef<ProgressElement, ProgressProps>((props, forwardedRef) => {\n const { className, style, color, radius, duration, ...progressProps } = extractProps(\n props,\n progressPropDefs\n );\n\n return (\n <ProgressPrimitive.Root\n data-accent-color={color}\n data-radius={radius}\n ref={forwardedRef}\n className={classNames('kui-ProgressRoot', className)}\n style={mergeStyles(\n {\n '--progress-duration':
|
|
5
|
-
"mappings": "wHAAA,UAAYA,MAAW,QACvB,OAAOC,MAAgB,aACvB,OAAS,YAAYC,MAAyB,WAgB9C,IAAMC,EAAiB,aAA2C,CAACC,EAAOC,IAAiB,CACzF,GAAM,CAAE,UAAAC,EAAW,MAAAC,EAAO,MAAAC,EAAO,OAAAC,EAAQ,SAAAC,EAAU,GAAGC,CAAc,EAAIC,EACtER,EACAS,CACF,
|
|
6
|
-
"names": ["React", "classNames", "ProgressPrimitive", "Progress", "props", "forwardedRef", "className", "style", "color", "radius", "duration", "progressProps", "extractProps", "progressPropDefs", "ProgressPrimitive", "classNames", "mergeStyles"]
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nimport classNames from 'classnames';\nimport { Progress as ProgressPrimitive } from 'radix-ui';\n\nimport { progressPropDefs } from './progress.props.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport { mergeStyles } from '../helpers/merge-styles.js';\n\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { GetPropDefTypes } from '../props/prop-def.js';\n\ntype ProgressElement = React.ElementRef<typeof ProgressPrimitive.Root>;\ntype ProgressOwnProps = GetPropDefTypes<typeof progressPropDefs>;\ninterface ProgressProps\n extends ComponentPropsWithout<typeof ProgressPrimitive.Root, RemovedProps | 'children'>,\n ProgressOwnProps {\n duration?: `${number}s` | `${number}ms`;\n}\nconst Progress = React.forwardRef<ProgressElement, ProgressProps>((props, forwardedRef) => {\n const { className, style, color, radius, duration, ...progressProps } = extractProps(\n props,\n progressPropDefs\n );\n\n // `null` and `undefined` both mean indeterminate, as in Radix, so both keep a custom duration.\n const isDeterminate = progressProps.value != null;\n\n return (\n <ProgressPrimitive.Root\n data-accent-color={color}\n data-radius={radius}\n ref={forwardedRef}\n className={classNames('kui-ProgressRoot', className)}\n style={mergeStyles(\n {\n '--progress-duration': isDeterminate ? undefined : duration,\n '--progress-value': isDeterminate ? progressProps.value : undefined,\n '--progress-max': progressProps.max ?? undefined,\n },\n style\n )}\n {...progressProps}\n asChild={false}\n >\n <ProgressPrimitive.Indicator className=\"kui-ProgressIndicator\" />\n </ProgressPrimitive.Root>\n );\n});\nProgress.displayName = 'Progress';\n\nexport { Progress };\nexport type { ProgressProps };\n"],
|
|
5
|
+
"mappings": "wHAAA,UAAYA,MAAW,QACvB,OAAOC,MAAgB,aACvB,OAAS,YAAYC,MAAyB,WAgB9C,IAAMC,EAAiB,aAA2C,CAACC,EAAOC,IAAiB,CACzF,GAAM,CAAE,UAAAC,EAAW,MAAAC,EAAO,MAAAC,EAAO,OAAAC,EAAQ,SAAAC,EAAU,GAAGC,CAAc,EAAIC,EACtER,EACAS,CACF,EAGMC,EAAgBH,EAAc,OAAS,KAE7C,OACE,gBAACI,EAAkB,KAAlB,CACC,oBAAmBP,EACnB,cAAaC,EACb,IAAKJ,EACL,UAAWW,EAAW,mBAAoBV,CAAS,EACnD,MAAOW,EACL,CACE,sBAAuBH,EAAgB,OAAYJ,EACnD,mBAAoBI,EAAgBH,EAAc,MAAQ,OAC1D,iBAAkBA,EAAc,KAAO,MACzC,EACAJ,CACF,EACC,GAAGI,EACJ,QAAS,IAET,gBAACI,EAAkB,UAAlB,CAA4B,UAAU,wBAAwB,CACjE,CAEJ,CAAC,EACDZ,EAAS,YAAc",
|
|
6
|
+
"names": ["React", "classNames", "ProgressPrimitive", "Progress", "props", "forwardedRef", "className", "style", "color", "radius", "duration", "progressProps", "extractProps", "progressPropDefs", "isDeterminate", "ProgressPrimitive", "classNames", "mergeStyles"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as i}from"./chunk-IDOZJVO6.js";import{a as r}from"./chunk-KT2CMUS5.js";import{a as p}from"./chunk-ELAW7ZUG.js";import*as o from"react";import b from"classnames";import{Slot as D}from"radix-ui";var R=o.forwardRef((s,n)=>{let{asChild:a,className:l,children:m,color:c,radius:h,tooltip:t,tooltipSide:f="top",tooltipAlign:d="center",tooltipDelayDuration:C,tooltipDisableHoverableContent:P,...u}=p(s,i),y=a?D.Root:"span",e=o.createElement(y,{"data-accent-color":c,"data-radius":h,tabIndex:t?0:void 0,...u,ref:n,className:b("kui-reset","kui-Chip",l)},m);return t?o.createElement(r,{content:t,side:f,align:d,delayDuration:C,disableHoverableContent:P},e):e});R.displayName="Chip";export{R as a};
|
|
2
|
+
//# sourceMappingURL=chunk-PALE5UWK.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/components/chip.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nimport classNames from 'classnames';\nimport { Slot } from 'radix-ui';\n\nimport { chipPropDefs } from './chip.props.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport { Tooltip } from './tooltip.js';\n\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { GetPropDefTypes } from '../props/prop-def.js';\n\ntype ChipElement = React.ElementRef<'span'>;\ntype ChipOwnProps = GetPropDefTypes<typeof chipPropDefs>;\n\n// Tooltip props that can be passed to Chip\ninterface ChipTooltipProps {\n tooltip?: React.ReactNode;\n tooltipSide?: 'top' | 'right' | 'bottom' | 'left';\n tooltipAlign?: 'start' | 'center' | 'end';\n tooltipDelayDuration?: number;\n tooltipDisableHoverableContent?: boolean;\n}\n\ninterface ChipProps\n extends ComponentPropsWithout<'span', RemovedProps>,\n ChipOwnProps,\n ChipTooltipProps {}\n\nconst Chip = React.forwardRef<ChipElement, ChipProps>((props, forwardedRef) => {\n const {\n asChild,\n className,\n children,\n color,\n radius,\n tooltip,\n tooltipSide = 'top',\n tooltipAlign = 'center',\n tooltipDelayDuration,\n tooltipDisableHoverableContent,\n ...chipProps\n } = extractProps(props, chipPropDefs);\n\n
|
|
5
|
-
"mappings": "wHAAA,UAAYA,MAAW,QACvB,OAAOC,MAAgB,aACvB,OAAS,QAAAC,MAAY,WA0BrB,IAAMC,EAAa,aAAmC,CAACC,EAAOC,IAAiB,CAC7E,GAAM,CACJ,QAAAC,EACA,UAAAC,EACA,SAAAC,EACA,MAAAC,EACA,OAAAC,EACA,QAAAC,EACA,YAAAC,EAAc,MACd,aAAAC,EAAe,SACf,qBAAAC,EACA,+BAAAC,EACA,GAAGC,CACL,EAAIC,EAAab,EAAOc,CAAY,
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nimport classNames from 'classnames';\nimport { Slot } from 'radix-ui';\n\nimport { chipPropDefs } from './chip.props.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport { Tooltip } from './tooltip.js';\n\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { GetPropDefTypes } from '../props/prop-def.js';\n\ntype ChipElement = React.ElementRef<'span'>;\ntype ChipOwnProps = GetPropDefTypes<typeof chipPropDefs>;\n\n// Tooltip props that can be passed to Chip\ninterface ChipTooltipProps {\n tooltip?: React.ReactNode;\n tooltipSide?: 'top' | 'right' | 'bottom' | 'left';\n tooltipAlign?: 'start' | 'center' | 'end';\n tooltipDelayDuration?: number;\n tooltipDisableHoverableContent?: boolean;\n}\n\ninterface ChipProps\n extends ComponentPropsWithout<'span', RemovedProps>,\n ChipOwnProps,\n ChipTooltipProps {}\n\nconst Chip = React.forwardRef<ChipElement, ChipProps>((props, forwardedRef) => {\n const {\n asChild,\n className,\n children,\n color,\n radius,\n tooltip,\n tooltipSide = 'top',\n tooltipAlign = 'center',\n tooltipDelayDuration,\n tooltipDisableHoverableContent,\n ...chipProps\n } = extractProps(props, chipPropDefs);\n\n const Comp = asChild ? Slot.Root : 'span';\n\n const chip = (\n <Comp\n data-accent-color={color}\n data-radius={radius}\n // A tooltip opens on focus, so a chip that has one joins the tab order.\n tabIndex={tooltip ? 0 : undefined}\n {...chipProps}\n ref={forwardedRef}\n className={classNames('kui-reset', 'kui-Chip', className)}\n >\n {children}\n </Comp>\n );\n\n // If no tooltip is provided, return the chip as-is\n if (!tooltip) {\n return chip;\n }\n\n // Wrap with Tooltip when tooltip content is provided\n return (\n <Tooltip\n content={tooltip}\n side={tooltipSide}\n align={tooltipAlign}\n delayDuration={tooltipDelayDuration}\n disableHoverableContent={tooltipDisableHoverableContent}\n >\n {chip}\n </Tooltip>\n );\n});\nChip.displayName = 'Chip';\n\nexport { Chip };\nexport type { ChipProps };\n"],
|
|
5
|
+
"mappings": "wHAAA,UAAYA,MAAW,QACvB,OAAOC,MAAgB,aACvB,OAAS,QAAAC,MAAY,WA0BrB,IAAMC,EAAa,aAAmC,CAACC,EAAOC,IAAiB,CAC7E,GAAM,CACJ,QAAAC,EACA,UAAAC,EACA,SAAAC,EACA,MAAAC,EACA,OAAAC,EACA,QAAAC,EACA,YAAAC,EAAc,MACd,aAAAC,EAAe,SACf,qBAAAC,EACA,+BAAAC,EACA,GAAGC,CACL,EAAIC,EAAab,EAAOc,CAAY,EAE9BC,EAAOb,EAAUc,EAAK,KAAO,OAE7BC,EACJ,gBAACF,EAAA,CACC,oBAAmBV,EACnB,cAAaC,EAEb,SAAUC,EAAU,EAAI,OACvB,GAAGK,EACJ,IAAKX,EACL,UAAWiB,EAAW,YAAa,WAAYf,CAAS,GAEvDC,CACH,EAIF,OAAKG,EAMH,gBAACY,EAAA,CACC,QAASZ,EACT,KAAMC,EACN,MAAOC,EACP,cAAeC,EACf,wBAAyBC,GAExBM,CACH,EAbOA,CAeX,CAAC,EACDlB,EAAK,YAAc",
|
|
6
6
|
"names": ["React", "classNames", "Slot", "Chip", "props", "forwardedRef", "asChild", "className", "children", "color", "radius", "tooltip", "tooltipSide", "tooltipAlign", "tooltipDelayDuration", "tooltipDisableHoverableContent", "chipProps", "extractProps", "chipPropDefs", "Comp", "Slot", "chip", "classNames", "Tooltip"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as l}from"./chunk-CLZW2IDD.js";import{e as c}from"./chunk-3YLYGKFB.js";import{a as u}from"./chunk-ELAW7ZUG.js";import{a as V}from"./chunk-OS3FCYZY.js";var D={};V(D,{Item:()=>P,Root:()=>C});import*as e from"react";import g from"classnames";import{ToggleGroup as f}from"radix-ui";import{useComposedRefs as L,useControllableState as E}from"radix-ui/internal";var G=typeof window>"u"?e.useEffect:e.useLayoutEffect,C=e.forwardRef((n,s)=>{let t=c(n,l.size),{className:a,children:r,radius:R,value:S,defaultValue:y,onValueChange:I,style:v,...h}=u(t,l),[m,x]=E({prop:S,onChange:I,defaultProp:y??""}),d=e.useRef(null),b=L(s,d),p=e.Children.toArray(r).filter(e.isValidElement),N=p.length,T=Math.max(0,p.findIndex(o=>o.props.value===m));return G(()=>{let o=d.current;if(!o)return;let i=Array.from(o.querySelectorAll(":scope > .kui-SegmentedControlItem")),k=i.findIndex(w=>w.getAttribute("data-state")==="on");o.style.setProperty("--segmented-control-count",String(i.length||1)),o.style.setProperty("--segmented-control-index",String(Math.max(0,k)))}),e.createElement(f.Root,{"data-disabled":t.disabled||void 0,"data-radius":R,ref:b,style:{"--segmented-control-count":N||1,"--segmented-control-index":T,...v},className:g("kui-SegmentedControlRoot",a),onValueChange:o=>{o&&x(o)},...h,type:"single",value:m,asChild:!1,disabled:!!t.disabled},r,e.createElement("div",{className:"kui-SegmentedControlIndicator"}))});C.displayName="SegmentedControl.Root";var P=e.forwardRef(({children:n,className:s,iconOnly:t,...a},r)=>e.createElement(f.Item,{ref:r,className:g("kui-reset","kui-SegmentedControlItem",s),"data-icon-only":t||void 0,...a,asChild:!1},e.createElement("span",{className:"kui-SegmentedControlItemSeparator"}),e.createElement("span",{className:"kui-SegmentedControlItemLabel"},e.createElement("span",{className:"kui-SegmentedControlItemLabelActive"},n),e.createElement("span",{className:"kui-SegmentedControlItemLabelInactive","aria-hidden":!0},n))));P.displayName="SegmentedControl.Item";export{C as a,P as b,D as c};
|
|
2
|
+
//# sourceMappingURL=chunk-PDMCLVYT.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/components/segmented-control.tsx"],
|
|
4
|
+
"sourcesContent": ["'use client';\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { ToggleGroup as ToggleGroupPrimitive } from 'radix-ui';\nimport { useComposedRefs, useControllableState } from 'radix-ui/internal';\n\nimport { segmentedControlRootPropDefs } from './segmented-control.props.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport { useThemeSizeProps } from '../helpers/theme-size.js';\n\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { GetPropDefTypes } from '../props/prop-def.js';\n\ntype SegmentedControlRootOwnProps = GetPropDefTypes<typeof segmentedControlRootPropDefs>;\n\ninterface SegmentedControlRootProps\n extends ComponentPropsWithout<'div', RemovedProps | 'dir'>,\n SegmentedControlRootOwnProps {\n value?: string;\n defaultValue?: string;\n onValueChange?(value: string): void;\n}\n\nconst useIsomorphicLayoutEffect = typeof window === 'undefined' ? React.useEffect : React.useLayoutEffect;\n\nconst SegmentedControlRoot = React.forwardRef<HTMLDivElement, SegmentedControlRootProps>(\n (ownProps, forwardedRef) => {\n const props = useThemeSizeProps(ownProps, segmentedControlRootPropDefs.size);\n const {\n className,\n children,\n radius,\n value: valueProp,\n defaultValue: defaultValueProp,\n onValueChange: onValueChangeProp,\n style,\n ...rootProps\n } = extractProps(props, segmentedControlRootPropDefs);\n\n const [value, setValue] = useControllableState({\n prop: valueProp,\n onChange: onValueChangeProp,\n defaultProp: defaultValueProp ?? '',\n });\n\n // The indicator is sized and placed from the item count and the selected index, written\n // as custom properties. They are read from the children on render, so the server markup\n // is right, then corrected from the DOM, which also sees items inside fragments or\n // wrapper components.\n const rootRef = React.useRef<HTMLDivElement>(null);\n const composedRef = useComposedRefs(forwardedRef, rootRef);\n const items = React.Children.toArray(children).filter(React.isValidElement);\n const renderedCount = items.length;\n const renderedIndex = Math.max(\n 0,\n items.findIndex((child) => (child.props as { value?: unknown }).value === value),\n );\n useIsomorphicLayoutEffect(() => {\n const root = rootRef.current;\n if (!root) return;\n const domItems = Array.from(root.querySelectorAll(':scope > .kui-SegmentedControlItem'));\n const index = domItems.findIndex((item) => item.getAttribute('data-state') === 'on');\n root.style.setProperty('--segmented-control-count', String(domItems.length || 1));\n root.style.setProperty('--segmented-control-index', String(Math.max(0, index)));\n });\n\n return (\n <ToggleGroupPrimitive.Root\n data-disabled={props.disabled || undefined}\n data-radius={radius}\n ref={composedRef}\n style={\n {\n '--segmented-control-count': renderedCount || 1,\n '--segmented-control-index': renderedIndex,\n ...style,\n } as React.CSSProperties\n }\n className={classNames('kui-SegmentedControlRoot', className)}\n onValueChange={(value) => {\n if (value) {\n setValue(value);\n }\n }}\n {...rootProps}\n type=\"single\"\n value={value}\n asChild={false}\n disabled={!!props.disabled}\n >\n {children}\n <div className=\"kui-SegmentedControlIndicator\" />\n </ToggleGroupPrimitive.Root>\n );\n },\n);\n\nSegmentedControlRoot.displayName = 'SegmentedControl.Root';\n\ninterface SegmentedControlItemOwnProps {\n value: string;\n /** When true, this segment can't be selected. */\n disabled?: boolean;\n /** When true, applies fixed square width for icon-only segments */\n iconOnly?: boolean;\n}\n\ninterface SegmentedControlItemProps\n extends ComponentPropsWithout<\n typeof ToggleGroupPrimitive.Item,\n RemovedProps | 'type' | 'value'\n >,\n SegmentedControlItemOwnProps {}\n\nconst SegmentedControlItem = React.forwardRef<HTMLButtonElement, SegmentedControlItemProps>(\n ({ children, className, iconOnly, ...props }, forwardedRef) => (\n <ToggleGroupPrimitive.Item\n ref={forwardedRef}\n className={classNames('kui-reset', 'kui-SegmentedControlItem', className)}\n data-icon-only={iconOnly || undefined}\n {...props}\n asChild={false}\n >\n <span className=\"kui-SegmentedControlItemSeparator\" />\n <span className=\"kui-SegmentedControlItemLabel\">\n <span className=\"kui-SegmentedControlItemLabelActive\">{children}</span>\n <span className=\"kui-SegmentedControlItemLabelInactive\" aria-hidden>\n {children}\n </span>\n </span>\n </ToggleGroupPrimitive.Item>\n ),\n);\n\nSegmentedControlItem.displayName = 'SegmentedControl.Item';\n\nexport { SegmentedControlRoot as Root, SegmentedControlItem as Item };\nexport type { SegmentedControlRootProps as RootProps, SegmentedControlItemProps as ItemProps };\n"],
|
|
5
|
+
"mappings": "gKAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,UAAAE,EAAA,SAAAC,IAEA,UAAYC,MAAW,QACvB,OAAOC,MAAgB,aACvB,OAAS,eAAeC,MAA4B,WACpD,OAAS,mBAAAC,EAAiB,wBAAAC,MAA4B,oBAmBtD,IAAMC,EAA4B,OAAO,OAAW,IAAoB,YAAkB,kBAEpFC,EAA6B,aACjC,CAACC,EAAUC,IAAiB,CAC1B,IAAMC,EAAQC,EAAkBH,EAAUI,EAA6B,IAAI,EACrE,CACJ,UAAAC,EACA,SAAAC,EACA,OAAAC,EACA,MAAOC,EACP,aAAcC,EACd,cAAeC,EACf,MAAAC,EACA,GAAGC,CACL,EAAIC,EAAaX,EAAOE,CAA4B,EAE9C,CAACU,EAAOC,CAAQ,EAAIC,EAAqB,CAC7C,KAAMR,EACN,SAAUE,EACV,YAAaD,GAAoB,EACnC,CAAC,EAMKQ,EAAgB,SAAuB,IAAI,EAC3CC,EAAcC,EAAgBlB,EAAcgB,CAAO,EACnDG,EAAc,WAAS,QAAQd,CAAQ,EAAE,OAAa,gBAAc,EACpEe,EAAgBD,EAAM,OACtBE,EAAgB,KAAK,IACzB,EACAF,EAAM,UAAWG,GAAWA,EAAM,MAA8B,QAAUT,CAAK,CACjF,EACA,OAAAhB,EAA0B,IAAM,CAC9B,IAAM0B,EAAOP,EAAQ,QACrB,GAAI,CAACO,EAAM,OACX,IAAMC,EAAW,MAAM,KAAKD,EAAK,iBAAiB,oCAAoC,CAAC,EACjFE,EAAQD,EAAS,UAAWE,GAASA,EAAK,aAAa,YAAY,IAAM,IAAI,EACnFH,EAAK,MAAM,YAAY,4BAA6B,OAAOC,EAAS,QAAU,CAAC,CAAC,EAChFD,EAAK,MAAM,YAAY,4BAA6B,OAAO,KAAK,IAAI,EAAGE,CAAK,CAAC,CAAC,CAChF,CAAC,EAGC,gBAACE,EAAqB,KAArB,CACC,gBAAe1B,EAAM,UAAY,OACjC,cAAaK,EACb,IAAKW,EACL,MACE,CACE,4BAA6BG,GAAiB,EAC9C,4BAA6BC,EAC7B,GAAGX,CACL,EAEF,UAAWkB,EAAW,2BAA4BxB,CAAS,EAC3D,cAAgBS,GAAU,CACpBA,GACFC,EAASD,CAAK,CAElB,EACC,GAAGF,EACJ,KAAK,SACL,MAAOE,EACP,QAAS,GACT,SAAU,CAAC,CAACZ,EAAM,UAEjBI,EACD,gBAAC,OAAI,UAAU,gCAAgC,CACjD,CAEJ,CACF,EAEAP,EAAqB,YAAc,wBAiBnC,IAAM+B,EAA6B,aACjC,CAAC,CAAE,SAAAxB,EAAU,UAAAD,EAAW,SAAA0B,EAAU,GAAG7B,CAAM,EAAGD,IAC5C,gBAAC2B,EAAqB,KAArB,CACC,IAAK3B,EACL,UAAW4B,EAAW,YAAa,2BAA4BxB,CAAS,EACxE,iBAAgB0B,GAAY,OAC3B,GAAG7B,EACJ,QAAS,IAET,gBAAC,QAAK,UAAU,oCAAoC,EACpD,gBAAC,QAAK,UAAU,iCACd,gBAAC,QAAK,UAAU,uCAAuCI,CAAS,EAChE,gBAAC,QAAK,UAAU,wCAAwC,cAAW,IAChEA,CACH,CACF,CACF,CAEJ,EAEAwB,EAAqB,YAAc",
|
|
6
|
+
"names": ["segmented_control_exports", "__export", "SegmentedControlItem", "SegmentedControlRoot", "React", "classNames", "ToggleGroupPrimitive", "useComposedRefs", "useControllableState", "useIsomorphicLayoutEffect", "SegmentedControlRoot", "ownProps", "forwardedRef", "props", "useThemeSizeProps", "segmentedControlRootPropDefs", "className", "children", "radius", "valueProp", "defaultValueProp", "onValueChangeProp", "style", "rootProps", "extractProps", "value", "setValue", "useControllableState", "rootRef", "composedRef", "useComposedRefs", "items", "renderedCount", "renderedIndex", "child", "root", "domItems", "index", "item", "ToggleGroupPrimitive", "classNames", "SegmentedControlItem", "iconOnly"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as d}from"./chunk-KEGCX5VM.js";import{a as m}from"./chunk-CN6F4REJ.js";import{a as E}from"./chunk-OS3FCYZY.js";var L={};E(L,{Button:()=>R,Content:()=>M,Item:()=>P,Root:()=>S,Viewport:()=>g,useMessageScroller:()=>f,useMessageScrollerScrollable:()=>V,useMessageScrollerVisibility:()=>N});import*as e from"react";import c from"classnames";import{MessageScroller as a,useMessageScroller as f,useMessageScrollerScrollable as V,useMessageScrollerVisibility as N}from"@shadcn/react/message-scroller";import{useComposedRefs as T}from"radix-ui/internal";var S=e.forwardRef(({autoScroll:o=!0,defaultScrollPosition:t="end",scrollEdgeThreshold:r,scrollMargin:s,className:n,children:i,...l},u)=>e.createElement(a.Provider,{autoScroll:o,defaultScrollPosition:t,...r!=null?{scrollEdgeThreshold:r}:{},...s!=null?{scrollMargin:s}:{}},e.createElement(a.Root,{...l,ref:u,className:c("kui-MessageScrollerRoot",n)},i)));S.displayName="MessageScroller.Root";var g=e.forwardRef(({className:o,"aria-label":t,fade:r=!0,...s},n)=>{let i=m(r),l=T(n,i);return e.createElement(a.Viewport,{"aria-label":t??"",...s,ref:l,"data-fade":r?"":void 0,className:c("kui-MessageScrollerViewport",o)})});g.displayName="MessageScroller.Viewport";var M=e.forwardRef(({className:o,...t},r)=>e.createElement(a.Content,{...t,ref:r,className:c("kui-MessageScrollerContent",o)}));M.displayName="MessageScroller.Content";var P=e.forwardRef(({className:o,...t},r)=>e.createElement(a.Item,{...t,ref:r,className:c("kui-MessageScrollerItem",o)}));P.displayName="MessageScroller.Item";var R=e.forwardRef(({direction:o="end",behavior:t="smooth",className:r,children:s,size:n,variant:i="surface",emphasis:l,color:u="gray",radius:v="full","aria-label":b,onClick:y,...B},w)=>{let{scrollToEnd:h,scrollToStart:C}=f(),k=p=>{if(y?.(p),p.defaultPrevented)return;p.preventDefault(),p.currentTarget.closest(".kui-MessageScrollerRoot")?.querySelector(".kui-MessageScrollerViewport")?.focus({preventScroll:!0}),o==="start"?C({behavior:t}):h({behavior:t})};return e.createElement(a.Button,{direction:o,behavior:t,onClick:k,render:e.createElement(d,{iconOnly:!0,...B,ref:w,size:n,...l?{emphasis:l}:{variant:i},color:u,radius:v,"aria-label":b??(o==="end"?"Jump to the latest":"Jump to the first"),className:c("kui-MessageScrollerButton",r),"data-direction":o},s??e.createElement("svg",{width:"15",height:"15",viewBox:"0 0 15 15",fill:"none","aria-hidden":!0,style:o==="start"?{transform:"rotate(180deg)"}:void 0},e.createElement("path",{d:"M7.5 2.5v10M3.5 8.5l4 4 4-4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})))})});R.displayName="MessageScroller.Button";export{f as a,V as b,N as c,S as d,g as e,M as f,P as g,R as h,L as i};
|
|
2
|
+
//# sourceMappingURL=chunk-PM6QY3JO.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/components/message-scroller.tsx"],
|
|
4
|
-
"sourcesContent": ["'use client';\n\n/**\n * MessageScroller \u2014 a transcript that follows a conversation.\n *\n * The behaviour is shadcn/ui's Message Scroller primitive (`@shadcn/react/message-scroller`,\n * MIT, https://ui.shadcn.com). Streaming, anchoring a new turn, keeping your place when history\n * loads above, and jumping back to the latest are a body of edge cases nobody should rewrite, so\n * Kookie takes the primitive and adds only the surface: the parts, the class names, the button.\n *\n * Anatomy\n * ```tsx\n * <MessageScroller.Root>\n * <MessageScroller.Viewport aria-label=\"Conversation\">\n * <MessageScroller.Content>\n * <MessageScroller.Item messageId=\"u1\" scrollAnchor>\u2026</MessageScroller.Item>\n * <MessageScroller.Item messageId=\"a1\">\u2026</MessageScroller.Item>\n * </MessageScroller.Content>\n * </MessageScroller.Viewport>\n * <MessageScroller.Button aria-label=\"Jump to the latest\" />\n * </MessageScroller.Root>\n * ```\n *\n * The viewport is its own scroller. Kookie's `ScrollArea` is Radix's, and Radix cannot hand its\n * viewport element to another library, so the transcript scrolls natively with a thin scrollbar.\n *\n * Requires React 19, which the primitive needs.\n */\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport {\n MessageScroller as Primitive,\n useMessageScroller,\n useMessageScrollerScrollable,\n useMessageScrollerVisibility,\n type MessageScrollerDefaultScrollPosition,\n type MessageScrollerScrollOptions,\n type MessageScrollerScrollable,\n type MessageScrollerVisibilityState,\n} from '@shadcn/react/message-scroller';\n\nimport { useComposedRefs } from 'radix-ui/internal';\n\nimport { Button as KuiButton } from './button.js';\nimport { useScrollEdges } from '../hooks/use-scroll-edges.js';\nimport type { ButtonProps as KuiButtonProps, ButtonRankProps } from './button.js';\n\ninterface RootProps extends React.ComponentPropsWithoutRef<'div'> {\n /**\n * Keeps the newest content in view while the reader is at the end. Default `true`.\n * Once the reader scrolls up, the transcript stays where they are until they return.\n */\n autoScroll?: boolean;\n /** Where the transcript opens: `end` (default), `start`, or the last anchored message. */\n defaultScrollPosition?: MessageScrollerDefaultScrollPosition;\n /** Distance in pixels from the end that still counts as \"at the end\". */\n scrollEdgeThreshold?: number;\n /** Space in pixels kept above a message when one is scrolled to or anchored. */\n scrollMargin?: number;\n}\n\n/** Holds the scroll state. Everything else goes inside it. */\nconst Root = React.forwardRef<HTMLDivElement, RootProps>(\n ({ autoScroll = true, defaultScrollPosition = 'end', scrollEdgeThreshold, scrollMargin, className, children, ...props }, forwardedRef) => (\n <Primitive.Provider\n autoScroll={autoScroll}\n defaultScrollPosition={defaultScrollPosition}\n {...(scrollEdgeThreshold != null ? { scrollEdgeThreshold } : {})}\n {...(scrollMargin != null ? { scrollMargin } : {})}\n >\n <Primitive.Root {...props} ref={forwardedRef} className={classNames('kui-MessageScrollerRoot', className)}>\n {children}\n </Primitive.Root>\n </Primitive.Provider>\n ),\n);\nRoot.displayName = 'MessageScroller.Root';\n\ninterface ViewportProps extends React.ComponentPropsWithoutRef<'div'> {\n /** Name of the transcript region, e.g. \"Conversation\". */\n 'aria-label'?: string;\n /** Keep the reader's place when older messages are added above. Default `true`. */\n preserveScrollOnPrepend?: boolean;\n /**\n * Fades messages toward the top and bottom edges while there is more past them. A floating\n * band over an edge (a toolbar, a goal tray, a composer) can set `--scroll-fade-start` or\n * `--scroll-fade-end` to its height, so messages fade as they pass under it. Default `true`.\n */\n fade?: boolean;\n}\n\n/** The scrolling element. */\nconst Viewport = React.forwardRef<HTMLDivElement, ViewportProps>(({ className, 'aria-label': label, fade = true, ...props }, forwardedRef) => {\n const setEdgesElement = useScrollEdges<HTMLDivElement>(fade);\n const ref = useComposedRefs(forwardedRef, setEdgesElement);\n return (\n // The primitive names an unnamed viewport \"Messages\", in English. An empty name is skipped by\n // accessible-name computation, so a transcript is only named when the app names it.\n <Primitive.Viewport\n aria-label={label ?? ''}\n {...props}\n ref={ref}\n data-fade={fade ? '' : undefined}\n className={classNames('kui-MessageScrollerViewport', className)}\n />\n );\n});\nViewport.displayName = 'MessageScroller.Viewport';\n\ntype ContentProps = React.ComponentPropsWithoutRef<'div'>;\n\n/** The list of messages, inside the viewport. */\nconst Content = React.forwardRef<HTMLDivElement, ContentProps>(({ className, ...props }, forwardedRef) => (\n <Primitive.Content {...props} ref={forwardedRef} className={classNames('kui-MessageScrollerContent', className)} />\n));\nContent.displayName = 'MessageScroller.Content';\n\ninterface ItemProps extends React.ComponentPropsWithoutRef<'div'> {\n /** A stable id, so the row can be scrolled to with `useMessageScroller().scrollToMessage`. */\n messageId?: string;\n /** Anchor this row near the top when it arrives. Set it on the person's own messages. */\n scrollAnchor?: boolean;\n}\n\n/** One row of the transcript. */\nconst Item = React.forwardRef<HTMLDivElement, ItemProps>(({ className, ...props }, forwardedRef) => (\n <Primitive.Item {...props} ref={forwardedRef} className={classNames('kui-MessageScrollerItem', className)} />\n));\nItem.displayName = 'MessageScroller.Item';\n\ntype ButtonProps = Omit<KuiButtonProps, 'aria-label' | 'aria-labelledby' | 'variant' | 'emphasis' | 'iconOnly' | 'fullWidth'> &\n ButtonRankProps & {\n /** Accessible name, in your words. Default \"Jump to the latest\". */\n 'aria-label'?: string;\n /** `end` jumps to the latest message (default); `start` to the first. */\n direction?: 'start' | 'end';\n /** Scroll behaviour of the jump. Default `smooth`. */\n behavior?: ScrollBehavior;\n};\n\n/**\n * Jumps back to the latest message. It renders only while the reader is away from the end.\n * Place it inside `Root`, after the viewport. It sits over the viewport's bottom edge.\n */\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n ({ direction = 'end', behavior, className, children, size, variant = 'surface', emphasis, color = 'gray', radius = 'full', 'aria-label': label, ...props }
|
|
5
|
-
"mappings": "wHAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,YAAAE,EAAA,YAAAC,EAAA,SAAAC,EAAA,SAAAC,EAAA,aAAAC,EAAA,uBAAAC,EAAA,iCAAAC,EAAA,iCAAAC,IA6BA,UAAYC,MAAW,QACvB,OAAOC,MAAgB,aACvB,OACE,mBAAmBC,EACnB,sBAAAL,EACA,gCAAAC,EACA,gCAAAC,MAKK,iCAEP,OAAS,mBAAAI,MAAuB,oBAqBhC,IAAMC,EAAa,aACjB,CAAC,CAAE,WAAAC,EAAa,GAAM,sBAAAC,EAAwB,MAAO,oBAAAC,EAAqB,aAAAC,EAAc,UAAAC,EAAW,SAAAC,EAAU,GAAGC,CAAM,EAAGC,IACvH,gBAACC,EAAU,SAAV,CACC,WAAYR,EACZ,sBAAuBC,EACtB,GAAIC,GAAuB,KAAO,CAAE,oBAAAA,CAAoB,EAAI,CAAC,EAC7D,GAAIC,GAAgB,KAAO,CAAE,aAAAA,CAAa,EAAI,CAAC,GAEhD,gBAACK,EAAU,KAAV,CAAgB,GAAGF,EAAO,IAAKC,EAAc,UAAWE,EAAW,0BAA2BL,CAAS,GACrGC,CACH,CACF,CAEJ,EACAN,EAAK,YAAc,uBAgBnB,IAAMW,EAAiB,aAA0C,CAAC,CAAE,UAAAN,EAAW,aAAcO,EAAO,KAAAC,EAAO,GAAM,GAAGN,CAAM,EAAGC,IAAiB,CAC5I,IAAMM,EAAkBC,EAA+BF,CAAI,EACrDG,EAAMC,EAAgBT,EAAcM,CAAe,EACzD,OAGE,gBAACL,EAAU,SAAV,CACC,aAAYG,GAAS,GACpB,GAAGL,EACJ,IAAKS,EACL,YAAWH,EAAO,GAAK,OACvB,UAAWH,EAAW,8BAA+BL,CAAS,EAChE,CAEJ,CAAC,EACDM,EAAS,YAAc,2BAKvB,IAAMO,EAAgB,aAAyC,CAAC,CAAE,UAAAb,EAAW,GAAGE,CAAM,EAAGC,IACvF,gBAACC,EAAU,QAAV,CAAmB,GAAGF,EAAO,IAAKC,EAAc,UAAWE,EAAW,6BAA8BL,CAAS,EAAG,CAClH,EACDa,EAAQ,YAAc,0BAUtB,IAAMC,EAAa,aAAsC,CAAC,CAAE,UAAAd,EAAW,GAAGE,CAAM,EAAGC,IACjF,gBAACC,EAAU,KAAV,CAAgB,GAAGF,EAAO,IAAKC,EAAc,UAAWE,EAAW,0BAA2BL,CAAS,EAAG,CAC5G,EACDc,EAAK,YAAc,uBAgBnB,IAAMC,EAAe,aACnB,
|
|
6
|
-
"names": ["message_scroller_exports", "__export", "Button", "Content", "Item", "Root", "Viewport", "useMessageScroller", "useMessageScrollerScrollable", "useMessageScrollerVisibility", "React", "classNames", "Primitive", "useComposedRefs", "Root", "autoScroll", "defaultScrollPosition", "scrollEdgeThreshold", "scrollMargin", "className", "children", "props", "forwardedRef", "Primitive", "classNames", "Viewport", "label", "fade", "setEdgesElement", "useScrollEdges", "ref", "useComposedRefs", "Content", "Item", "Button", "direction", "behavior", "size", "variant", "emphasis", "color", "radius"]
|
|
4
|
+
"sourcesContent": ["'use client';\n\n/**\n * MessageScroller \u2014 a transcript that follows a conversation.\n *\n * The behaviour is shadcn/ui's Message Scroller primitive (`@shadcn/react/message-scroller`,\n * MIT, https://ui.shadcn.com). Streaming, anchoring a new turn, keeping your place when history\n * loads above, and jumping back to the latest are a body of edge cases nobody should rewrite, so\n * Kookie takes the primitive and adds only the surface: the parts, the class names, the button.\n *\n * Anatomy\n * ```tsx\n * <MessageScroller.Root>\n * <MessageScroller.Viewport aria-label=\"Conversation\">\n * <MessageScroller.Content>\n * <MessageScroller.Item messageId=\"u1\" scrollAnchor>\u2026</MessageScroller.Item>\n * <MessageScroller.Item messageId=\"a1\">\u2026</MessageScroller.Item>\n * </MessageScroller.Content>\n * </MessageScroller.Viewport>\n * <MessageScroller.Button aria-label=\"Jump to the latest\" />\n * </MessageScroller.Root>\n * ```\n *\n * The viewport is its own scroller. Kookie's `ScrollArea` is Radix's, and Radix cannot hand its\n * viewport element to another library, so the transcript scrolls natively with a thin scrollbar.\n *\n * Requires React 19, which the primitive needs.\n */\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport {\n MessageScroller as Primitive,\n useMessageScroller,\n useMessageScrollerScrollable,\n useMessageScrollerVisibility,\n type MessageScrollerDefaultScrollPosition,\n type MessageScrollerScrollOptions,\n type MessageScrollerScrollable,\n type MessageScrollerVisibilityState,\n} from '@shadcn/react/message-scroller';\n\nimport { useComposedRefs } from 'radix-ui/internal';\n\nimport { Button as KuiButton } from './button.js';\nimport { useScrollEdges } from '../hooks/use-scroll-edges.js';\nimport type { ButtonProps as KuiButtonProps, ButtonRankProps } from './button.js';\n\ninterface RootProps extends React.ComponentPropsWithoutRef<'div'> {\n /**\n * Keeps the newest content in view while the reader is at the end. Default `true`.\n * Once the reader scrolls up, the transcript stays where they are until they return.\n */\n autoScroll?: boolean;\n /** Where the transcript opens: `end` (default), `start`, or the last anchored message. */\n defaultScrollPosition?: MessageScrollerDefaultScrollPosition;\n /** Distance in pixels from the end that still counts as \"at the end\". */\n scrollEdgeThreshold?: number;\n /** Space in pixels kept above a message when one is scrolled to or anchored. */\n scrollMargin?: number;\n}\n\n/** Holds the scroll state. Everything else goes inside it. */\nconst Root = React.forwardRef<HTMLDivElement, RootProps>(\n ({ autoScroll = true, defaultScrollPosition = 'end', scrollEdgeThreshold, scrollMargin, className, children, ...props }, forwardedRef) => (\n <Primitive.Provider\n autoScroll={autoScroll}\n defaultScrollPosition={defaultScrollPosition}\n {...(scrollEdgeThreshold != null ? { scrollEdgeThreshold } : {})}\n {...(scrollMargin != null ? { scrollMargin } : {})}\n >\n <Primitive.Root {...props} ref={forwardedRef} className={classNames('kui-MessageScrollerRoot', className)}>\n {children}\n </Primitive.Root>\n </Primitive.Provider>\n ),\n);\nRoot.displayName = 'MessageScroller.Root';\n\ninterface ViewportProps extends React.ComponentPropsWithoutRef<'div'> {\n /** Name of the transcript region, e.g. \"Conversation\". */\n 'aria-label'?: string;\n /** Keep the reader's place when older messages are added above. Default `true`. */\n preserveScrollOnPrepend?: boolean;\n /**\n * Fades messages toward the top and bottom edges while there is more past them. A floating\n * band over an edge (a toolbar, a goal tray, a composer) can set `--scroll-fade-start` or\n * `--scroll-fade-end` to its height, so messages fade as they pass under it. Default `true`.\n */\n fade?: boolean;\n}\n\n/** The scrolling element. */\nconst Viewport = React.forwardRef<HTMLDivElement, ViewportProps>(({ className, 'aria-label': label, fade = true, ...props }, forwardedRef) => {\n const setEdgesElement = useScrollEdges<HTMLDivElement>(fade);\n const ref = useComposedRefs(forwardedRef, setEdgesElement);\n return (\n // The primitive names an unnamed viewport \"Messages\", in English. An empty name is skipped by\n // accessible-name computation, so a transcript is only named when the app names it.\n <Primitive.Viewport\n aria-label={label ?? ''}\n {...props}\n ref={ref}\n data-fade={fade ? '' : undefined}\n className={classNames('kui-MessageScrollerViewport', className)}\n />\n );\n});\nViewport.displayName = 'MessageScroller.Viewport';\n\ntype ContentProps = React.ComponentPropsWithoutRef<'div'>;\n\n/** The list of messages, inside the viewport. */\nconst Content = React.forwardRef<HTMLDivElement, ContentProps>(({ className, ...props }, forwardedRef) => (\n <Primitive.Content {...props} ref={forwardedRef} className={classNames('kui-MessageScrollerContent', className)} />\n));\nContent.displayName = 'MessageScroller.Content';\n\ninterface ItemProps extends React.ComponentPropsWithoutRef<'div'> {\n /** A stable id, so the row can be scrolled to with `useMessageScroller().scrollToMessage`. */\n messageId?: string;\n /** Anchor this row near the top when it arrives. Set it on the person's own messages. */\n scrollAnchor?: boolean;\n}\n\n/** One row of the transcript. */\nconst Item = React.forwardRef<HTMLDivElement, ItemProps>(({ className, ...props }, forwardedRef) => (\n <Primitive.Item {...props} ref={forwardedRef} className={classNames('kui-MessageScrollerItem', className)} />\n));\nItem.displayName = 'MessageScroller.Item';\n\ntype ButtonProps = Omit<KuiButtonProps, 'aria-label' | 'aria-labelledby' | 'variant' | 'emphasis' | 'iconOnly' | 'fullWidth'> &\n ButtonRankProps & {\n /** Accessible name, in your words. Default \"Jump to the latest\". */\n 'aria-label'?: string;\n /** `end` jumps to the latest message (default); `start` to the first. */\n direction?: 'start' | 'end';\n /** Scroll behaviour of the jump. Default `smooth`. */\n behavior?: ScrollBehavior;\n};\n\n/**\n * Jumps back to the latest message. It renders only while the reader is away from the end.\n * Place it inside `Root`, after the viewport. It sits over the viewport's bottom edge.\n */\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n { direction = 'end', behavior = 'smooth', className, children, size, variant = 'surface', emphasis, color = 'gray', radius = 'full', 'aria-label': label, onClick, ...props },\n forwardedRef,\n ) => {\n const { scrollToEnd, scrollToStart } = useMessageScroller();\n\n // The primitive blurs the button on click, which drops keyboard focus to the page. Kookie\n // jumps itself and moves focus to the viewport instead, since the button hides at the end.\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (event.defaultPrevented) return;\n event.preventDefault();\n const viewport = event.currentTarget\n .closest('.kui-MessageScrollerRoot')\n ?.querySelector<HTMLElement>('.kui-MessageScrollerViewport');\n viewport?.focus({ preventScroll: true });\n if (direction === 'start') scrollToStart({ behavior });\n else scrollToEnd({ behavior });\n };\n\n return (\n <Primitive.Button\n direction={direction}\n behavior={behavior}\n onClick={handleClick}\n render={\n <KuiButton\n iconOnly\n {...props}\n ref={forwardedRef}\n size={size}\n {...(emphasis ? { emphasis } : { variant })}\n color={color}\n radius={radius}\n aria-label={label ?? (direction === 'end' ? 'Jump to the latest' : 'Jump to the first')}\n className={classNames('kui-MessageScrollerButton', className)}\n data-direction={direction}\n >\n {children ?? (\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 15 15\" fill=\"none\" aria-hidden style={direction === 'start' ? { transform: 'rotate(180deg)' } : undefined}>\n <path d=\"M7.5 2.5v10M3.5 8.5l4 4 4-4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n )}\n </KuiButton>\n }\n />\n );\n },\n);\nButton.displayName = 'MessageScroller.Button';\n\nexport { Root, Viewport, Content, Item, Button, useMessageScroller, useMessageScrollerScrollable, useMessageScrollerVisibility };\nexport type {\n RootProps as MessageScrollerRootProps,\n ViewportProps as MessageScrollerViewportProps,\n ContentProps as MessageScrollerContentProps,\n ItemProps as MessageScrollerItemProps,\n ButtonProps as MessageScrollerButtonProps,\n MessageScrollerDefaultScrollPosition,\n MessageScrollerScrollOptions,\n MessageScrollerScrollable,\n MessageScrollerVisibilityState,\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["message_scroller_exports", "__export", "Button", "Content", "Item", "Root", "Viewport", "useMessageScroller", "useMessageScrollerScrollable", "useMessageScrollerVisibility", "React", "classNames", "Primitive", "useComposedRefs", "Root", "autoScroll", "defaultScrollPosition", "scrollEdgeThreshold", "scrollMargin", "className", "children", "props", "forwardedRef", "Primitive", "classNames", "Viewport", "label", "fade", "setEdgesElement", "useScrollEdges", "ref", "useComposedRefs", "Content", "Item", "Button", "direction", "behavior", "size", "variant", "emphasis", "color", "radius", "onClick", "scrollToEnd", "scrollToStart", "useMessageScroller", "handleClick", "event"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as g}from"./chunk-MHANZINI.js";import{a as P}from"./chunk-MPTTUBFU.js";import{a}from"./chunk-MJJ7XDIP.js";import{c as f}from"./chunk-PPZY7PJA.js";import{a as h}from"./chunk-4P6TKZCA.js";import{a as c}from"./chunk-FNAE6HUI.js";import{e as m}from"./chunk-3YLYGKFB.js";import{a as p}from"./chunk-ELAW7ZUG.js";import{a as W}from"./chunk-OS3FCYZY.js";var B={};W(B,{Close:()=>T,Content:()=>R,Description:()=>D,Root:()=>C,Title:()=>y,Trigger:()=>u});import*as e from"react";import k from"classnames";import{Dialog as r}from"radix-ui";var C=o=>e.createElement(r.Root,{...o,modal:!0});C.displayName="Sheet.Root";var u=e.forwardRef(({children:o,...t},i)=>e.createElement(r.Trigger,{...t,ref:i,asChild:!0},a(o)));u.displayName="Sheet.Trigger";var{align:Q,...w}=c,d=w,S=e.createContext(null),R=e.forwardRef((o,t)=>{let{side:i="start",forceMount:s,container:n,className:v,...E}=o,b=m(E,d.size),N={left:"start",right:"end",start:"start",end:"end",top:"top",bottom:"bottom"}[i],{className:x,...O}=p(b,d),z=e.useRef(0),M=e.useCallback(l=>{typeof t=="function"?t(l):t&&(t.current=l)},[t]);return g(),e.createElement(r.Portal,{container:n,forceMount:s},e.createElement(S.Provider,{value:z},e.createElement(f,{asChild:!0},e.createElement(r.Overlay,{className:"kui-BaseDialogOverlay kui-DialogOverlay kui-SheetOverlay"},e.createElement(r.Content,{...O,ref:M,className:k("kui-BaseDialogContent","kui-SheetContent",v,x),"data-side":N,"aria-modal":"true"})))))});R.displayName="Sheet.Content";var y=e.forwardRef(({size:o="4",weight:t="medium",...i},s)=>{let n=e.useContext(S);return e.useLayoutEffect(()=>{if(n)return n.current+=1,()=>{n.current-=1}},[n]),e.createElement(r.Title,{asChild:!0},e.createElement(P,{ref:s,size:o,weight:t,...i}))});y.displayName="Sheet.Title";var D=e.forwardRef(({size:o="2",emphasis:t="medium",...i},s)=>e.createElement(r.Description,{asChild:!0},e.createElement(h,{ref:s,size:o,emphasis:t,...i})));D.displayName="Sheet.Description";var T=e.forwardRef(({children:o,...t},i)=>e.createElement(r.Close,{...t,ref:i,asChild:!0},a(o)));T.displayName="Sheet.Close";export{C as a,u as b,R as c,y as d,D as e,T as f,B as g};
|
|
2
|
+
//# sourceMappingURL=chunk-RKZVXVBN.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/components/sheet.tsx"],
|
|
4
|
+
"sourcesContent": ["'use client';\n\n/**\n * Sheet\n *\n * A side-placed overlay built on top of Radix Dialog. It inherits accessibility,\n * focus management, overlay behavior, and sizing scales from the base dialog, and\n * adds side placement and slide motion suited for navigation panels and drawers.\n *\n * Structure mirrors Dialog:\n * - Root, Trigger, Content, Title, Description, Close\n *\n * Notes\n * - Side: set with `side` on `Sheet.Content`. Aliases: `left` \u2192 `start`, `right` \u2192 `end`.\n * - Sizing: reuses Dialog content prop defs (width/min/max/height/size). Size follows the\n * Theme size; start/end sheets cap at the size's overlay width unless maxWidth is set.\n * - A11y: provide an accessible name via `Sheet.Title` or `aria-label` on `Sheet.Content`.\n * Radix owns the focus trap, initial focus and the return of focus to the trigger.\n *\n * Example\n * <Sheet.Root>\n * <Sheet.Trigger>\n * <Button>Open</Button>\n * </Sheet.Trigger>\n * <Sheet.Content side=\"end\" width={{ initial: '280px', md: '360px' }}>\n * <Sheet.Title>Details</Sheet.Title>\n * ...\n * <Sheet.Close>\n * <Button>Close</Button>\n * </Sheet.Close>\n * </Sheet.Content>\n * </Sheet.Root>\n */\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { Dialog as DialogPrimitive } from 'radix-ui';\n\nimport { dialogContentPropDefs } from './dialog.props.js';\nimport type { DialogContentOwnProps } from './dialog.props.js';\nimport { Theme } from './theme.js';\nimport { Heading } from './heading.js';\nimport { Text } from './text.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport { useThemeSizeProps } from '../helpers/theme-size.js';\nimport { requireReactElement } from '../helpers/require-react-element.js';\nimport { useBodyPointerEventsCleanup } from '../hooks/use-body-pointer-events-cleanup.js';\n\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { HeadingProps } from './heading.js';\n\n/**\n * Supported sides for the Sheet.\n * Aliases are normalized RTL-aware: `left` \u2192 `start`, `right` \u2192 `end`.\n */\ntype SheetSide = 'start' | 'end' | 'top' | 'bottom' | 'left' | 'right';\n\n/**\n * Sheet is a side-placed overlay built on the Dialog primitive.\n * It reuses Dialog's accessibility, focus, overlay, and size scales, while adding side placement and slide motion.\n */\n\n// Root\n/**\n * Props for `Sheet.Root` (Radix Dialog root with `modal` forced on).\n */\ninterface SheetRootProps extends ComponentPropsWithout<typeof DialogPrimitive.Root, 'modal'> {}\nconst Root: React.FC<SheetRootProps> = (props) => <DialogPrimitive.Root {...props} modal />;\nRoot.displayName = 'Sheet.Root';\n\n// Trigger\n/** Element type for `Sheet.Trigger`. */\ntype SheetTriggerElement = React.ElementRef<typeof DialogPrimitive.Trigger>;\n/** Props for `Sheet.Trigger` (expects a single element child). */\ninterface SheetTriggerProps extends ComponentPropsWithout<typeof DialogPrimitive.Trigger, RemovedProps> {}\nconst Trigger = React.forwardRef<SheetTriggerElement, SheetTriggerProps>(({ children, ...props }, ref) => (\n <DialogPrimitive.Trigger {...props} ref={ref} asChild>\n {requireReactElement(children)}\n </DialogPrimitive.Trigger>\n));\nTrigger.displayName = 'Sheet.Trigger';\n\n// Content\n/** Element type for `Sheet.Content`. */\n// Reuse dialog content prop defs for size/width/height tokens.\n// Built once at module scope: `extractProps` memoises on the identity of the\n// prop def objects it is handed, so rebuilding these per render would recompile\n// them every time a sheet renders.\nconst { align: _alignPropDef, ...dialogPropDefsForSheet } = dialogContentPropDefs;\nconst sheetPropDefs = dialogPropDefsForSheet;\n\n/** Counts the Sheet.Title elements mounted inside a Sheet.Content, for the dev-only name check. */\nconst SheetTitleCountContext = React.createContext<React.MutableRefObject<number> | null>(null);\n\ntype SheetContentElement = React.ElementRef<typeof DialogPrimitive.Content>;\ninterface SheetContentProps extends ComponentPropsWithout<typeof DialogPrimitive.Content, RemovedProps>, DialogContentOwnProps {\n /** Side where the Sheet should appear. `left`/`right` alias to `start`/`end`. */\n side?: SheetSide;\n /** Optional DOM container to portal into. Defaults to `document.body`. */\n container?: React.ComponentPropsWithoutRef<typeof DialogPrimitive.Portal>['container'];\n}\n\n/**\n * Renders the Sheet panel. Normalizes left/right to logical start/end and\n * forwards dialog sizing props. Provide an accessible name via `Sheet.Title`\n * or `aria-label`.\n */\nconst Content = React.forwardRef<SheetContentElement, SheetContentProps>((allProps, forwardedRef) => {\n const { side = 'start', forceMount, container, className, ...ownProps } = allProps;\n const restProps = useThemeSizeProps(ownProps, sheetPropDefs.size);\n const normalizedSideMap: Record<SheetSide, 'start' | 'end' | 'top' | 'bottom'> = {\n left: 'start',\n right: 'end',\n start: 'start',\n end: 'end',\n top: 'top',\n bottom: 'bottom',\n };\n const normalizedSide = normalizedSideMap[side];\n // Size/width/height class names come from the dialog defs \u2014 see `sheetPropDefs`.\n const { className: extractedClassName, ...contentProps } = extractProps(restProps, sheetPropDefs);\n\n // Dev-only a11y guard: the panel needs a name. A Sheet.Title anywhere inside counts it\n // in a layout effect, which runs before this ref is attached, so nesting doesn't matter.\n const titleCountRef = React.useRef(0);\n const combinedRef = React.useCallback(\n (node: HTMLDivElement | null) => {\n if (typeof forwardedRef === 'function') {\n forwardedRef(node);\n } else if (forwardedRef) {\n forwardedRef.current = node;\n }\n if (process.env.NODE_ENV !== 'production' && node) {\n const hasName = titleCountRef.current > 0 || Boolean(node.getAttribute('aria-label')) || Boolean(node.getAttribute('aria-labelledby'));\n if (!hasName) {\n console.warn('Sheet.Content: Missing accessible name. Include Sheet.Title inside it or provide aria-label.');\n }\n }\n },\n [forwardedRef],\n );\n\n useBodyPointerEventsCleanup();\n\n return (\n <DialogPrimitive.Portal container={container} forceMount={forceMount}>\n <SheetTitleCountContext.Provider value={titleCountRef}>\n <Theme asChild>\n <DialogPrimitive.Overlay className=\"kui-BaseDialogOverlay kui-DialogOverlay kui-SheetOverlay\">\n <DialogPrimitive.Content\n {...contentProps}\n ref={combinedRef}\n className={classNames('kui-BaseDialogContent', 'kui-SheetContent', className, extractedClassName)}\n data-side={normalizedSide}\n aria-modal=\"true\"\n />\n </DialogPrimitive.Overlay>\n </Theme>\n </SheetTitleCountContext.Provider>\n </DialogPrimitive.Portal>\n );\n});\nContent.displayName = 'Sheet.Content';\n\n// Title - renders as Heading with sensible defaults\ntype SheetTitleElement = React.ElementRef<typeof Heading>;\ntype SheetTitleProps = HeadingProps;\n/** Accessible title for the Sheet. Renders as Heading with sensible defaults. */\nconst Title = React.forwardRef<SheetTitleElement, SheetTitleProps>(({ size = '4', weight = 'medium', ...props }, ref) => {\n const titleCountRef = React.useContext(SheetTitleCountContext);\n React.useLayoutEffect(() => {\n if (!titleCountRef) return;\n titleCountRef.current += 1;\n return () => {\n titleCountRef.current -= 1;\n };\n }, [titleCountRef]);\n return (\n <DialogPrimitive.Title asChild>\n <Heading ref={ref} size={size} weight={weight} {...props} />\n </DialogPrimitive.Title>\n );\n});\nTitle.displayName = 'Sheet.Title';\n\n// Description - renders as Text with sensible defaults\ntype SheetDescriptionElement = React.ElementRef<typeof Text>;\ntype SheetDescriptionProps = React.ComponentPropsWithoutRef<typeof Text>;\n/** Supplementary description text for Sheet content. Renders as Text with sensible defaults. */\nconst Description = React.forwardRef<SheetDescriptionElement, SheetDescriptionProps>(({ size = '2', emphasis = 'medium', ...rest }, ref) => (\n <DialogPrimitive.Description asChild>\n <Text ref={ref} size={size} emphasis={emphasis} {...rest} />\n </DialogPrimitive.Description>\n));\nDescription.displayName = 'Sheet.Description';\n\ntype SheetCloseElement = React.ElementRef<typeof DialogPrimitive.Close>;\ninterface SheetCloseProps extends ComponentPropsWithout<typeof DialogPrimitive.Close, RemovedProps> {}\n/** Close button for the Sheet. Expects a single element child rendered via `asChild`. */\nconst Close = React.forwardRef<SheetCloseElement, SheetCloseProps>(({ children, ...props }, ref) => (\n <DialogPrimitive.Close {...props} ref={ref} asChild>\n {requireReactElement(children)}\n </DialogPrimitive.Close>\n));\nClose.displayName = 'Sheet.Close';\n\nexport { Root, Trigger, Content, Title, Description, Close };\nexport type {\n SheetRootProps as RootProps,\n SheetTriggerProps as TriggerProps,\n SheetContentProps as ContentProps,\n SheetTitleProps as TitleProps,\n SheetDescriptionProps as DescriptionProps,\n SheetCloseProps as CloseProps,\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["sheet_exports", "__export", "Close", "Content", "Description", "Root", "Title", "Trigger", "React", "classNames", "DialogPrimitive", "Root", "props", "DialogPrimitive", "Trigger", "children", "ref", "requireReactElement", "_alignPropDef", "dialogPropDefsForSheet", "dialogContentPropDefs", "sheetPropDefs", "SheetTitleCountContext", "Content", "allProps", "forwardedRef", "side", "forceMount", "container", "className", "ownProps", "restProps", "useThemeSizeProps", "normalizedSide", "extractedClassName", "contentProps", "extractProps", "titleCountRef", "combinedRef", "node", "useBodyPointerEventsCleanup", "Theme", "classNames", "Title", "size", "weight", "Heading", "Description", "emphasis", "rest", "Text", "Close"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as p,b as R,c as b}from"./chunk-YXLDRDHW.js";import{a as m}from"./chunk-3XZOE2IQ.js";import{e as n}from"./chunk-3YLYGKFB.js";import{a as s}from"./chunk-ELAW7ZUG.js";import{b as d}from"./chunk-PBFSBHBS.js";import{a as k}from"./chunk-OS3FCYZY.js";var x={};k(x,{Body:()=>c,Cell:()=>f,ColumnHeaderCell:()=>C,Header:()=>P,Root:()=>T,Row:()=>i,RowHeaderCell:()=>y});import*as e from"react";import t from"classnames";var T=e.forwardRef((o,l)=>{let a=n(o,p.size),{layout:r,...u}=p,{className:w,children:H,layout:N,"aria-label":h,"aria-labelledby":E,"aria-describedby":v,...D}=s(a,u),B=d({value:N,className:p.layout.className,propValues:p.layout.values});return e.createElement("div",{ref:l,className:t("kui-TableRoot",w),...D},e.createElement(m,null,e.createElement("table",{className:t("kui-TableRootTable",B),"aria-label":h,"aria-labelledby":E,"aria-describedby":v},H)))});T.displayName="Table.Root";var P=e.forwardRef(({className:o,...l},a)=>e.createElement("thead",{...l,ref:a,className:t("kui-TableHeader",o)}));P.displayName="Table.Header";var c=e.forwardRef(({className:o,...l},a)=>e.createElement("tbody",{...l,ref:a,className:t("kui-TableBody",o)}));c.displayName="Table.Body";var i=e.forwardRef((o,l)=>{let{className:a,...r}=s(o,R);return e.createElement("tr",{...r,ref:l,className:t("kui-TableRow",a)})});i.displayName="Table.Row";var f=e.forwardRef((o,l)=>{let{className:a,...r}=s(o,b);return e.createElement("td",{className:t("kui-TableCell",a),ref:l,...r})});f.displayName="Table.Cell";var C=e.forwardRef((o,l)=>{let{className:a,...r}=s(o,b);return e.createElement("th",{className:t("kui-TableCell","kui-TableColumnHeaderCell",a),scope:"col",ref:l,...r})});C.displayName="Table.ColumnHeaderCell";var y=e.forwardRef((o,l)=>{let{className:a,...r}=s(o,b);return e.createElement("th",{className:t("kui-TableCell","kui-TableRowHeaderCell",a),scope:"row",ref:l,...r})});y.displayName="Table.RowHeaderCell";export{T as a,P as b,c,i as d,f as e,C as f,y as g,x as h};
|
|
2
|
+
//# sourceMappingURL=chunk-TXQZ5HLV.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/components/table.tsx"],
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nimport classNames from 'classnames';\n\nimport { tableRootPropDefs, tableRowPropDefs, tableCellPropDefs } from './table.props.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport { useThemeSizeProps } from '../helpers/theme-size.js';\nimport { getResponsiveClassNames } from '../helpers/get-responsive-styles.js';\nimport { ScrollArea } from './scroll-area.js';\n\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { GetPropDefTypes } from '../props/prop-def.js';\n\ntype TableRootElement = React.ElementRef<'div'>;\ntype TableRootOwnProps = GetPropDefTypes<typeof tableRootPropDefs>;\ninterface TableRootProps\n extends ComponentPropsWithout<'div', RemovedProps>,\n TableRootOwnProps {}\nconst TableRoot = React.forwardRef<TableRootElement, TableRootProps>((ownProps, forwardedRef) => {\n const props = useThemeSizeProps(ownProps, tableRootPropDefs.size);\n const { layout: layoutPropDef, ...rootPropDefs } = tableRootPropDefs;\n const {\n className,\n children,\n layout,\n // The table is what gets named, not the scroll wrapper around it.\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-describedby': ariaDescribedBy,\n ...rootProps\n } = extractProps(props, rootPropDefs);\n const tableLayoutClassNames = getResponsiveClassNames({\n value: layout,\n className: tableRootPropDefs.layout.className,\n propValues: tableRootPropDefs.layout.values,\n });\n return (\n <div ref={forwardedRef} className={classNames('kui-TableRoot', className)} {...rootProps}>\n <ScrollArea>\n <table\n className={classNames('kui-TableRootTable', tableLayoutClassNames)}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-describedby={ariaDescribedBy}\n >\n {children}\n </table>\n </ScrollArea>\n </div>\n );\n});\nTableRoot.displayName = 'Table.Root';\n\ntype TableHeaderElement = React.ElementRef<'thead'>;\ninterface TableHeaderProps extends ComponentPropsWithout<'thead', RemovedProps> {}\nconst TableHeader = React.forwardRef<TableHeaderElement, TableHeaderProps>(\n ({ className, ...props }, forwardedRef) => (\n <thead {...props} ref={forwardedRef} className={classNames('kui-TableHeader', className)} />\n )\n);\nTableHeader.displayName = 'Table.Header';\n\ntype TableBodyElement = React.ElementRef<'tbody'>;\ninterface TableBodyProps extends ComponentPropsWithout<'tbody', RemovedProps> {}\nconst TableBody = React.forwardRef<TableBodyElement, TableBodyProps>(\n ({ className, ...props }, forwardedRef) => (\n <tbody {...props} ref={forwardedRef} className={classNames('kui-TableBody', className)} />\n )\n);\nTableBody.displayName = 'Table.Body';\n\ntype TableRowElement = React.ElementRef<'tr'>;\ntype TableRowOwnProps = GetPropDefTypes<typeof tableRowPropDefs>;\ninterface TableRowProps extends ComponentPropsWithout<'tr', RemovedProps>, TableRowOwnProps {}\nconst TableRow = React.forwardRef<TableRowElement, TableRowProps>((props, forwardedRef) => {\n const { className, ...rowProps } = extractProps(props, tableRowPropDefs);\n return <tr {...rowProps} ref={forwardedRef} className={classNames('kui-TableRow', className)} />;\n});\nTableRow.displayName = 'Table.Row';\n\ntype TableCellElement = React.ElementRef<'td'>;\ntype TableCellOwnProps = GetPropDefTypes<typeof tableCellPropDefs>;\ninterface TableCellProps\n extends ComponentPropsWithout<'td', RemovedProps | 'width'>,\n TableCellOwnProps {}\nconst TableCell = React.forwardRef<TableCellElement, TableCellProps>((props, forwardedRef) => {\n const { className, ...cellProps } = extractProps(props, tableCellPropDefs);\n return <td className={classNames('kui-TableCell', className)} ref={forwardedRef} {...cellProps} />;\n});\nTableCell.displayName = 'Table.Cell';\n\ntype TableColumnHeaderCellElement = React.ElementRef<'th'>;\ninterface TableColumnHeaderCellProps\n extends ComponentPropsWithout<'th', RemovedProps>,\n TableCellOwnProps {}\nconst TableColumnHeaderCell = React.forwardRef<\n TableColumnHeaderCellElement,\n TableColumnHeaderCellProps\n>((props, forwardedRef) => {\n const { className, ...cellProps } = extractProps(props, tableCellPropDefs);\n return (\n <th\n className={classNames('kui-TableCell', 'kui-TableColumnHeaderCell', className)}\n scope=\"col\"\n ref={forwardedRef}\n {...cellProps}\n />\n );\n});\nTableColumnHeaderCell.displayName = 'Table.ColumnHeaderCell';\n\ntype TableRowHeaderCellElement = React.ElementRef<'th'>;\ninterface TableRowHeaderCellProps\n extends ComponentPropsWithout<'th', RemovedProps>,\n TableCellOwnProps {}\nconst TableRowHeaderCell = React.forwardRef<TableRowHeaderCellElement, TableRowHeaderCellProps>(\n (props, forwardedRef) => {\n const { className, ...cellProps } = extractProps(props, tableCellPropDefs);\n return (\n <th\n className={classNames('kui-TableCell', 'kui-TableRowHeaderCell', className)}\n scope=\"row\"\n ref={forwardedRef}\n {...cellProps}\n />\n );\n }\n);\nTableRowHeaderCell.displayName = 'Table.RowHeaderCell';\n\nexport {\n TableRoot as Root,\n TableHeader as Header,\n TableBody as Body,\n TableRow as Row,\n TableCell as Cell,\n TableColumnHeaderCell as ColumnHeaderCell,\n TableRowHeaderCell as RowHeaderCell,\n};\n\nexport type {\n TableRootProps as RootProps,\n TableHeaderProps as HeaderProps,\n TableBodyProps as BodyProps,\n TableRowProps as RowProps,\n TableCellProps as CellProps,\n TableColumnHeaderCellProps as ColumnHeaderCellProps,\n TableRowHeaderCellProps as RowHeaderCellProps,\n};\n"],
|
|
5
|
+
"mappings": "8PAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,UAAAE,EAAA,SAAAC,EAAA,qBAAAC,EAAA,WAAAC,EAAA,SAAAC,EAAA,QAAAC,EAAA,kBAAAC,IAAA,UAAYC,MAAW,QACvB,OAAOC,MAAgB,aAgBvB,IAAMC,EAAkB,aAA6C,CAACC,EAAUC,IAAiB,CAC/F,IAAMC,EAAQC,EAAkBH,EAAUI,EAAkB,IAAI,EAC1D,CAAE,OAAQC,EAAe,GAAGC,CAAa,EAAIF,EAC7C,CACJ,UAAAG,EACA,SAAAC,EACA,OAAAC,EAEA,aAAcC,EACd,kBAAmBC,EACnB,mBAAoBC,EACpB,GAAGC,CACL,EAAIC,EAAaZ,EAAOI,CAAY,EAC9BS,EAAwBC,EAAwB,CACpD,MAAOP,EACP,UAAWL,EAAkB,OAAO,UACpC,WAAYA,EAAkB,OAAO,MACvC,CAAC,EACD,OACE,gBAAC,OAAI,IAAKH,EAAc,UAAWgB,EAAW,gBAAiBV,CAAS,EAAI,GAAGM,GAC7E,gBAACK,EAAA,KACC,gBAAC,SACC,UAAWD,EAAW,qBAAsBF,CAAqB,EACjE,aAAYL,EACZ,kBAAiBC,EACjB,mBAAkBC,GAEjBJ,CACH,CACF,CACF,CAEJ,CAAC,EACDT,EAAU,YAAc,aAIxB,IAAMoB,EAAoB,aACxB,CAAC,CAAE,UAAAZ,EAAW,GAAGL,CAAM,EAAGD,IACxB,gBAAC,SAAO,GAAGC,EAAO,IAAKD,EAAc,UAAWgB,EAAW,kBAAmBV,CAAS,EAAG,CAE9F,EACAY,EAAY,YAAc,eAI1B,IAAMC,EAAkB,aACtB,CAAC,CAAE,UAAAb,EAAW,GAAGL,CAAM,EAAGD,IACxB,gBAAC,SAAO,GAAGC,EAAO,IAAKD,EAAc,UAAWgB,EAAW,gBAAiBV,CAAS,EAAG,CAE5F,EACAa,EAAU,YAAc,aAKxB,IAAMC,EAAiB,aAA2C,CAACnB,EAAOD,IAAiB,CACzF,GAAM,CAAE,UAAAM,EAAW,GAAGe,CAAS,EAAIR,EAAaZ,EAAOqB,CAAgB,EACvE,OAAO,gBAAC,MAAI,GAAGD,EAAU,IAAKrB,EAAc,UAAWgB,EAAW,eAAgBV,CAAS,EAAG,CAChG,CAAC,EACDc,EAAS,YAAc,YAOvB,IAAMG,EAAkB,aAA6C,CAACtB,EAAOD,IAAiB,CAC5F,GAAM,CAAE,UAAAM,EAAW,GAAGkB,CAAU,EAAIX,EAAaZ,EAAOwB,CAAiB,EACzE,OAAO,gBAAC,MAAG,UAAWT,EAAW,gBAAiBV,CAAS,EAAG,IAAKN,EAAe,GAAGwB,EAAW,CAClG,CAAC,EACDD,EAAU,YAAc,aAMxB,IAAMG,EAA8B,aAGlC,CAACzB,EAAOD,IAAiB,CACzB,GAAM,CAAE,UAAAM,EAAW,GAAGkB,CAAU,EAAIX,EAAaZ,EAAOwB,CAAiB,EACzE,OACE,gBAAC,MACC,UAAWT,EAAW,gBAAiB,4BAA6BV,CAAS,EAC7E,MAAM,MACN,IAAKN,EACJ,GAAGwB,EACN,CAEJ,CAAC,EACDE,EAAsB,YAAc,yBAMpC,IAAMC,EAA2B,aAC/B,CAAC1B,EAAOD,IAAiB,CACvB,GAAM,CAAE,UAAAM,EAAW,GAAGkB,CAAU,EAAIX,EAAaZ,EAAOwB,CAAiB,EACzE,OACE,gBAAC,MACC,UAAWT,EAAW,gBAAiB,yBAA0BV,CAAS,EAC1E,MAAM,MACN,IAAKN,EACJ,GAAGwB,EACN,CAEJ,CACF,EACAG,EAAmB,YAAc",
|
|
6
|
+
"names": ["table_exports", "__export", "TableBody", "TableCell", "TableColumnHeaderCell", "TableHeader", "TableRoot", "TableRow", "TableRowHeaderCell", "React", "classNames", "TableRoot", "ownProps", "forwardedRef", "props", "useThemeSizeProps", "tableRootPropDefs", "layoutPropDef", "rootPropDefs", "className", "children", "layout", "ariaLabel", "ariaLabelledBy", "ariaDescribedBy", "rootProps", "extractProps", "tableLayoutClassNames", "getResponsiveClassNames", "classNames", "ScrollArea", "TableHeader", "TableBody", "TableRow", "rowProps", "tableRowPropDefs", "TableCell", "cellProps", "tableCellPropDefs", "TableColumnHeaderCell", "TableRowHeaderCell"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as l,b as g,c as R,d as y,e as u}from"./chunk-OY5NT7VT.js";import{c as P}from"./chunk-62ZGP4ET.js";import{c as A}from"./chunk-FWB47YCH.js";import{e as f}from"./chunk-3YLYGKFB.js";import{a as n}from"./chunk-ELAW7ZUG.js";import{a as x}from"./chunk-OS3FCYZY.js";var O={};x(O,{Content:()=>H,Header:()=>v,Item:()=>T,Root:()=>C,Trigger:()=>E});import*as o from"react";import a from"classnames";import{Accordion as p}from"radix-ui";var C=o.forwardRef((e,r)=>{let t=f(e,l.size),{className:c,radius:s,color:w,...I}=n(t,l),i=I;i.type==="single"&&i.collapsible===void 0&&(i.collapsible=!0);let N=o.useCallback(d=>{if(i.type==="multiple"){let m=d.currentTarget.querySelectorAll("[data-radix-accordion-item]");d.key==="Home"?(d.preventDefault(),m[0]?.querySelector("[data-radix-accordion-trigger]")?.focus()):d.key==="End"&&(d.preventDefault(),m[m.length-1]?.querySelector("[data-radix-accordion-trigger]")?.focus())}},[i.type]);return o.createElement(p.Root,{...i,ref:r,className:a("kui-AccordionRoot",c),"data-accent-color":w,"data-radius":s,onKeyDown:N})});C.displayName="Accordion.Root";var T=o.forwardRef((e,r)=>{let{className:t,...c}=n(e,g);return o.createElement(p.Item,{...c,ref:r,className:a("kui-AccordionItem",t)})});T.displayName="Accordion.Item";var v=o.forwardRef((e,r)=>{let{className:t,...c}=n(e,R);return o.createElement(p.Header,{...c,ref:r,className:a("kui-AccordionHeader",t)})});v.displayName="Accordion.Header";var E=o.forwardRef(({children:e,...r},t)=>{let{className:c,...s}=n(r,y);return o.createElement(p.Trigger,{...s,ref:t,className:a("kui-AccordionTrigger",c)},o.createElement(A,null,e),o.createElement(P,{className:"kui-AccordionChevron","aria-hidden":!0}))});E.displayName="Accordion.Trigger";var H=o.forwardRef((e,r)=>{let{className:t,children:c,...s}=n(e,u);return o.createElement(p.Content,{...s,ref:r,className:a("kui-AccordionContent",t)},o.createElement("div",{className:"kui-AccordionContentInner"},c))});H.displayName="Accordion.Content";export{C as a,T as b,v as c,E as d,H as e,O as f};
|
|
2
|
+
//# sourceMappingURL=chunk-UKASIY6M.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/components/accordion.tsx"],
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nimport classNames from 'classnames';\nimport { Accordion as AccordionPrimitive } from 'radix-ui';\n\nimport {\n accordionRootPropDefs,\n accordionItemPropDefs,\n accordionHeaderPropDefs,\n accordionTriggerPropDefs,\n accordionContentPropDefs,\n} from './accordion.props.js';\nimport { ChevronDownIcon } from './icons.js';\nimport { Slottable } from './slot.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport { useThemeSizeProps } from '../helpers/theme-size.js';\n\nimport type {\n AccordionRootOwnProps,\n AccordionItemOwnProps,\n AccordionHeaderOwnProps,\n AccordionTriggerOwnProps,\n AccordionContentOwnProps,\n} from './accordion.props.js';\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\n\n// Root component\ntype AccordionRootElement = React.ElementRef<typeof AccordionPrimitive.Root>;\n// Radix's Root props are a union of single and multiple. Omit each member on its own, so\n// `defaultValue`, `value` and `collapsible` survive with the right type for each `type`.\ntype AccordionRootRadixProps =\n | Omit<AccordionPrimitive.AccordionSingleProps, 'asChild' | 'color'>\n | Omit<AccordionPrimitive.AccordionMultipleProps, 'asChild' | 'color'>;\n\ntype AccordionRootProps = AccordionRootRadixProps & AccordionRootOwnProps;\n\nconst AccordionRoot = React.forwardRef<AccordionRootElement, AccordionRootProps>(\n (ownProps, forwardedRef) => {\n const props = useThemeSizeProps(ownProps, accordionRootPropDefs.size);\n const { className, radius, color, ...extractedRadixProps } =\n extractProps(props, accordionRootPropDefs);\n\n const radixProps = extractedRadixProps as React.ComponentPropsWithoutRef<\n typeof AccordionPrimitive.Root\n >;\n\n\n // Ensure single accordions can collapse by default unless explicitly set\n if (radixProps.type === 'single' && radixProps.collapsible === undefined) {\n radixProps.collapsible = true;\n }\n\n // Handle Home/End key navigation for multi-item accordions\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent) => {\n if (radixProps.type === 'multiple') {\n const items = event.currentTarget.querySelectorAll('[data-radix-accordion-item]');\n\n if (event.key === 'Home') {\n event.preventDefault();\n const firstTrigger = items[0]?.querySelector(\n '[data-radix-accordion-trigger]',\n ) as HTMLElement;\n firstTrigger?.focus();\n } else if (event.key === 'End') {\n event.preventDefault();\n const lastTrigger = items[items.length - 1]?.querySelector(\n '[data-radix-accordion-trigger]',\n ) as HTMLElement;\n lastTrigger?.focus();\n }\n }\n },\n [radixProps.type],\n );\n\n return (\n <AccordionPrimitive.Root\n {...radixProps}\n ref={forwardedRef}\n className={classNames('kui-AccordionRoot', className)}\n data-accent-color={color}\n data-radius={radius}\n onKeyDown={handleKeyDown}\n />\n );\n },\n);\nAccordionRoot.displayName = 'Accordion.Root';\n\n// Item component\ntype AccordionItemElement = React.ElementRef<typeof AccordionPrimitive.Item>;\ninterface AccordionItemProps\n extends ComponentPropsWithout<typeof AccordionPrimitive.Item, RemovedProps>,\n AccordionItemOwnProps {}\n\nconst AccordionItem = React.forwardRef<AccordionItemElement, AccordionItemProps>(\n (props, forwardedRef) => {\n const { className, ...itemProps } = extractProps(props, accordionItemPropDefs);\n\n return (\n <AccordionPrimitive.Item\n {...itemProps}\n ref={forwardedRef}\n className={classNames('kui-AccordionItem', className)}\n />\n );\n },\n);\nAccordionItem.displayName = 'Accordion.Item';\n\n// Header component\ntype AccordionHeaderElement = React.ElementRef<typeof AccordionPrimitive.Header>;\ninterface AccordionHeaderProps\n extends ComponentPropsWithout<typeof AccordionPrimitive.Header, RemovedProps>,\n AccordionHeaderOwnProps {}\n\nconst AccordionHeader = React.forwardRef<AccordionHeaderElement, AccordionHeaderProps>(\n (props, forwardedRef) => {\n const { className, ...headerProps } = extractProps(props, accordionHeaderPropDefs);\n\n return (\n <AccordionPrimitive.Header\n {...headerProps}\n ref={forwardedRef}\n className={classNames('kui-AccordionHeader', className)}\n />\n );\n },\n);\nAccordionHeader.displayName = 'Accordion.Header';\n\n// Trigger component\ntype AccordionTriggerElement = React.ElementRef<typeof AccordionPrimitive.Trigger>;\ninterface AccordionTriggerProps\n extends ComponentPropsWithout<typeof AccordionPrimitive.Trigger, RemovedProps>,\n AccordionTriggerOwnProps {}\n\nconst AccordionTrigger = React.forwardRef<AccordionTriggerElement, AccordionTriggerProps>(\n ({ children, ...props }, forwardedRef) => {\n const { className, ...triggerProps } = extractProps(props, accordionTriggerPropDefs);\n\n return (\n <AccordionPrimitive.Trigger\n {...triggerProps}\n ref={forwardedRef}\n className={classNames('kui-AccordionTrigger', className)}\n >\n <Slottable>{children}</Slottable>\n <ChevronDownIcon className=\"kui-AccordionChevron\" aria-hidden />\n </AccordionPrimitive.Trigger>\n );\n },\n);\nAccordionTrigger.displayName = 'Accordion.Trigger';\n\n// Content component\ntype AccordionContentElement = React.ElementRef<typeof AccordionPrimitive.Content>;\ninterface AccordionContentProps\n extends ComponentPropsWithout<typeof AccordionPrimitive.Content, RemovedProps>,\n AccordionContentOwnProps {}\n\nconst AccordionContent = React.forwardRef<AccordionContentElement, AccordionContentProps>(\n (props, forwardedRef) => {\n const { className, children, ...contentProps } = extractProps(props, accordionContentPropDefs);\n\n return (\n <AccordionPrimitive.Content\n {...contentProps}\n ref={forwardedRef}\n className={classNames('kui-AccordionContent', className)}\n >\n <div className=\"kui-AccordionContentInner\">{children}</div>\n </AccordionPrimitive.Content>\n );\n },\n);\nAccordionContent.displayName = 'Accordion.Content';\n\nexport {\n AccordionRoot as Root,\n AccordionItem as Item,\n AccordionHeader as Header,\n AccordionTrigger as Trigger,\n AccordionContent as Content,\n};\n\nexport type {\n AccordionRootProps as RootProps,\n AccordionItemProps as ItemProps,\n AccordionHeaderProps as HeaderProps,\n AccordionTriggerProps as TriggerProps,\n AccordionContentProps as ContentProps,\n};\n"],
|
|
5
|
+
"mappings": "4QAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,aAAAE,EAAA,WAAAC,EAAA,SAAAC,EAAA,SAAAC,EAAA,YAAAC,IAAA,UAAYC,MAAW,QACvB,OAAOC,MAAgB,aACvB,OAAS,aAAaC,MAA0B,WAiChD,IAAMC,EAAsB,aAC1B,CAACC,EAAUC,IAAiB,CAC1B,IAAMC,EAAQC,EAAkBH,EAAUI,EAAsB,IAAI,EAC9D,CAAE,UAAAC,EAAW,OAAAC,EAAQ,MAAAC,EAAO,GAAGC,CAAoB,EACvDC,EAAaP,EAAOE,CAAqB,EAErCM,EAAaF,EAMfE,EAAW,OAAS,UAAYA,EAAW,cAAgB,SAC7DA,EAAW,YAAc,IAI3B,IAAMC,EAAsB,cACzBC,GAA+B,CAC9B,GAAIF,EAAW,OAAS,WAAY,CAClC,IAAMG,EAAQD,EAAM,cAAc,iBAAiB,6BAA6B,EAE5EA,EAAM,MAAQ,QAChBA,EAAM,eAAe,EACAC,EAAM,CAAC,GAAG,cAC7B,gCACF,GACc,MAAM,GACXD,EAAM,MAAQ,QACvBA,EAAM,eAAe,EACDC,EAAMA,EAAM,OAAS,CAAC,GAAG,cAC3C,gCACF,GACa,MAAM,EAEvB,CACF,EACA,CAACH,EAAW,IAAI,CAClB,EAEA,OACE,gBAACI,EAAmB,KAAnB,CACE,GAAGJ,EACJ,IAAKT,EACL,UAAWc,EAAW,oBAAqBV,CAAS,EACpD,oBAAmBE,EACnB,cAAaD,EACb,UAAWK,EACb,CAEJ,CACF,EACAZ,EAAc,YAAc,iBAQ5B,IAAMiB,EAAsB,aAC1B,CAACd,EAAOD,IAAiB,CACvB,GAAM,CAAE,UAAAI,EAAW,GAAGY,CAAU,EAAIR,EAAaP,EAAOgB,CAAqB,EAE7E,OACE,gBAACJ,EAAmB,KAAnB,CACE,GAAGG,EACJ,IAAKhB,EACL,UAAWc,EAAW,oBAAqBV,CAAS,EACtD,CAEJ,CACF,EACAW,EAAc,YAAc,iBAQ5B,IAAMG,EAAwB,aAC5B,CAACjB,EAAOD,IAAiB,CACvB,GAAM,CAAE,UAAAI,EAAW,GAAGe,CAAY,EAAIX,EAAaP,EAAOmB,CAAuB,EAEjF,OACE,gBAACP,EAAmB,OAAnB,CACE,GAAGM,EACJ,IAAKnB,EACL,UAAWc,EAAW,sBAAuBV,CAAS,EACxD,CAEJ,CACF,EACAc,EAAgB,YAAc,mBAQ9B,IAAMG,EAAyB,aAC7B,CAAC,CAAE,SAAAC,EAAU,GAAGrB,CAAM,EAAGD,IAAiB,CACxC,GAAM,CAAE,UAAAI,EAAW,GAAGmB,CAAa,EAAIf,EAAaP,EAAOuB,CAAwB,EAEnF,OACE,gBAACX,EAAmB,QAAnB,CACE,GAAGU,EACJ,IAAKvB,EACL,UAAWc,EAAW,uBAAwBV,CAAS,GAEvD,gBAACqB,EAAA,KAAWH,CAAS,EACrB,gBAACI,EAAA,CAAgB,UAAU,uBAAuB,cAAW,GAAC,CAChE,CAEJ,CACF,EACAL,EAAiB,YAAc,oBAQ/B,IAAMM,EAAyB,aAC7B,CAAC1B,EAAOD,IAAiB,CACvB,GAAM,CAAE,UAAAI,EAAW,SAAAkB,EAAU,GAAGM,CAAa,EAAIpB,EAAaP,EAAO4B,CAAwB,EAE7F,OACE,gBAAChB,EAAmB,QAAnB,CACE,GAAGe,EACJ,IAAK5B,EACL,UAAWc,EAAW,uBAAwBV,CAAS,GAEvD,gBAAC,OAAI,UAAU,6BAA6BkB,CAAS,CACvD,CAEJ,CACF,EACAK,EAAiB,YAAc",
|
|
6
|
+
"names": ["accordion_exports", "__export", "AccordionContent", "AccordionHeader", "AccordionItem", "AccordionRoot", "AccordionTrigger", "React", "classNames", "AccordionPrimitive", "AccordionRoot", "ownProps", "forwardedRef", "props", "useThemeSizeProps", "accordionRootPropDefs", "className", "radius", "color", "extractedRadixProps", "extractProps", "radixProps", "handleKeyDown", "event", "items", "AccordionPrimitive", "classNames", "AccordionItem", "itemProps", "accordionItemPropDefs", "AccordionHeader", "headerProps", "accordionHeaderPropDefs", "AccordionTrigger", "children", "triggerProps", "accordionTriggerPropDefs", "Slottable", "ChevronDownIcon", "AccordionContent", "contentProps", "accordionContentPropDefs"]
|
|
7
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as r,c as x,f as O,g as M}from"./chunk-3J6AUDID.js";import{a as
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as r,c as x,f as O,g as M}from"./chunk-3J6AUDID.js";import{a as B,e as l}from"./chunk-7CUQMU3T.js";import{a as C,b as S,c as v}from"./chunk-5ROQAZ7J.js";import{o as b}from"./chunk-3PTKPDSA.js";import{a as R,b as y}from"./chunk-VXQQ6KXI.js";import{a as g}from"./chunk-HWQ3NTJP.js";import{a as h}from"./chunk-TBZO22XK.js";import*as e from"react";import se from"classnames";import{useComposedRefs as ie}from"radix-ui/internal";var le={controlled:"open",default:"defaultOpen"},T=e.forwardRef((w,E)=>{let{className:H,presentation:N="fixed",defaultOpen:U,open:k,onOpenChange:I,expandedSize:t=200,minSize:p=100,maxSize:d=400,resizable:m=!1,collapsible:V=!0,onExpand:A,onCollapse:L,onResize:$,onResizeStart:q,onResizeEnd:D,snapPoints:n,snapTolerance:W,collapseThreshold:a,paneId:s,persistence:i,children:_,style:j,size:F,defaultSize:G,onSizeChange:K,sizeUpdate:J,sizeUpdateMs:Q=50,inset:c,id:X,...u}=w,{table:f,attributes:Y}=v(N,"fixed"),o=C({name:"bottom",label:"Bottom",propNames:le,id:X,controlled:r(k),defaultValue:r(U),presentationTable:f,builtIn:x,onChange:(ne,ae)=>I?.(ne!=="closed",{reason:ae}),onExpand:A,onCollapse:L,size:t});b("bottom",c),e.useEffect(()=>{(n!==void 0||a!==void 0||s!==void 0||i!==void 0)&&void 0},[n,a,s,i]);let z=e.useRef(null),Z=ie(E,o.setElement,z),ee=R({name:"bottom",elementId:o.id,elementRef:z,cssVarName:"--bottom-size",orientation:"horizontal",edge:"start",growth:O,expandedSize:t,minSize:p,maxSize:d,resizable:m,collapsible:V,size:F,defaultSize:G,onSizeChange:K,sizeUpdate:J,sizeUpdateMs:Q,onResize:$,onResizeStart:q,onResizeEnd:D,snapPoints:n,snapTolerance:W,collapseThreshold:a,paneId:s,persistence:i,overlaying:o.overlaying,overlayingNow:()=>f[h()]==="overlay",requestCollapse:()=>o.setValue("closed","toggle"),requestToggle:()=>o.toggle("toggle")}),{handles:P,content:oe}=y(_,l),te=m&&o.shown!==!1&&!o.overlaying?e.createElement(g.Provider,{value:ee},P.length>0?P:e.createElement(B,null)):null;return e.createElement("div",{...M(u),id:o.id,ref:Z,className:se("kui-ShellPane","kui-ShellBottom",H),...S(o,Y),"data-inset":c||void 0,tabIndex:o.overlaying?-1:u.tabIndex,style:{...j,"--bottom-expanded-size":`${t}px`,"--bottom-min-size":`${p}px`,"--bottom-max-size":`${d}px`}},e.createElement("div",{className:"kui-ShellBottomContent"},oe),te)});T.displayName="Shell.Bottom";T.Handle=l;export{T as a};
|
|
2
|
+
//# sourceMappingURL=chunk-UY6WJUNA.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{b as u}from"./chunk-KZEZDBE7.js";import*as e from"react";var i=e.createContext({isInsideMenu:!1}),c={1:24,2:30,3:34,4:38};function M(t){return c[t]}function a({children:t,size:s}){let n=u(s,void 0),o=n?M(n):void 0,d=e.useMemo(()=>({isInsideMenu:!0,size:n,itemHeight:o}),[n,o]);return e.createElement(i.Provider,{value:d},t)}function x(){return e.useContext(i)}var r=e.createContext(void 0),f=r.Provider;function m(){return e.useContext(r)}export{c as a,M as b,a as c,x as d,f as e,m as f};
|
|
2
|
+
//# sourceMappingURL=chunk-V5O3TF57.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/components/_internal/menu-context.tsx"],
|
|
4
|
-
"sourcesContent": ["'use client';\n\nimport * as React from 'react';\n\nimport { useResolvedResponsiveValue } from './base-menu.utils.js';\n\nimport type { Responsive } from '../../props/prop-def.js';\n\n/**\n * Context to detect if a component is rendered inside a menu (DropdownMenu, ContextMenu, etc.)\n * Used by VirtualMenu to adjust its behavior:\n * - Skip role=\"menu\" when inside a parent menu (parent owns the role)\n * - Delegate certain keyboard handling to parent\n * - Use the correct item height based on menu size\n */\n\nexport type MenuSize = '1' | '2' | '3' | '4';\n\ninterface MenuContextValue {\n /** Whether we're inside a menu that owns the menu role */\n isInsideMenu: boolean;\n /** Menu size for the current breakpoint */\n size?: MenuSize;\n /** Item height in px for the current size and theme scaling */\n itemHeight?: number;\n}\n\nconst MenuContext = React.createContext<MenuContextValue>({ isInsideMenu: false });\n\ninterface MenuProviderProps {\n children: React.ReactNode;\n /** Menu size passed from parent (DropdownMenu.Content, ContextMenu.Content, etc.) */\n size?: Responsive<MenuSize>;\n}\n\n/**\n * Menu row height in pixels per size: the line height plus --row-inset-N above and below\n * (base-menu.css), never under the 24px target floor.\n */\nexport const menuSizeToItemHeight: Record<MenuSize, number> = {\n '1': 24,\n '2': 30,\n '3': 34,\n '4': 38,\n};\n\nexport function getMenuItemHeight(size: MenuSize): number {\n return menuSizeToItemHeight[size];\n}\n\nexport function MenuProvider({ children, size }: MenuProviderProps) {\n const resolvedSize = useResolvedResponsiveValue<MenuSize | undefined>(size, undefined);\n const itemHeight = resolvedSize ? getMenuItemHeight(resolvedSize) : undefined;\n const value = React.useMemo(\n () => ({ isInsideMenu: true, size: resolvedSize, itemHeight }),\n [resolvedSize, itemHeight],\n );\n return <MenuContext.Provider value={value}>{children}</MenuContext.Provider>;\n}\n\nexport function useMenuContext() {\n return React.useContext(MenuContext);\n}\n"],
|
|
5
|
-
"mappings": "wCAEA,UAAYA,MAAW,QAyBvB,IAAMC,EAAoB,gBAAgC,CAAE,aAAc,EAAM,CAAC,EAYpEC,EAAiD,CAC5D,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,EACP,EAEO,SAASC,EAAkBC,EAAwB,CACxD,OAAOF,EAAqBE,CAAI,CAClC,CAEO,SAASC,EAAa,CAAE,SAAAC,EAAU,KAAAF,CAAK,EAAsB,CAClE,IAAMG,EAAeC,EAAiDJ,EAAM,MAAS,EAC/EK,EAAaF,EAAeJ,EAAkBI,CAAY,EAAI,OAC9DG,EAAc,UAClB,KAAO,CAAE,aAAc,GAAM,KAAMH,EAAc,WAAAE,CAAW,GAC5D,CAACF,EAAcE,CAAU,CAC3B,EACA,OAAO,gBAACR,EAAY,SAAZ,CAAqB,MAAOS,GAAQJ,CAAS,CACvD,CAEO,SAASK,GAAiB,CAC/B,OAAa,aAAWV,CAAW,CACrC",
|
|
6
|
-
"names": ["React", "MenuContext", "menuSizeToItemHeight", "getMenuItemHeight", "size", "MenuProvider", "children", "resolvedSize", "useResolvedResponsiveValue", "itemHeight", "value", "useMenuContext"]
|
|
4
|
+
"sourcesContent": ["'use client';\n\nimport * as React from 'react';\n\nimport { useResolvedResponsiveValue } from './base-menu.utils.js';\n\nimport type { Responsive } from '../../props/prop-def.js';\n\n/**\n * Context to detect if a component is rendered inside a menu (DropdownMenu, ContextMenu, etc.)\n * Used by VirtualMenu to adjust its behavior:\n * - Skip role=\"menu\" when inside a parent menu (parent owns the role)\n * - Delegate certain keyboard handling to parent\n * - Use the correct item height based on menu size\n */\n\nexport type MenuSize = '1' | '2' | '3' | '4';\n\ninterface MenuContextValue {\n /** Whether we're inside a menu that owns the menu role */\n isInsideMenu: boolean;\n /** Menu size for the current breakpoint */\n size?: MenuSize;\n /** Item height in px for the current size and theme scaling */\n itemHeight?: number;\n}\n\nconst MenuContext = React.createContext<MenuContextValue>({ isInsideMenu: false });\n\ninterface MenuProviderProps {\n children: React.ReactNode;\n /** Menu size passed from parent (DropdownMenu.Content, ContextMenu.Content, etc.) */\n size?: Responsive<MenuSize>;\n}\n\n/**\n * Menu row height in pixels per size: the line height plus --row-inset-N above and below\n * (base-menu.css), never under the 24px target floor.\n */\nexport const menuSizeToItemHeight: Record<MenuSize, number> = {\n '1': 24,\n '2': 30,\n '3': 34,\n '4': 38,\n};\n\nexport function getMenuItemHeight(size: MenuSize): number {\n return menuSizeToItemHeight[size];\n}\n\nexport function MenuProvider({ children, size }: MenuProviderProps) {\n const resolvedSize = useResolvedResponsiveValue<MenuSize | undefined>(size, undefined);\n const itemHeight = resolvedSize ? getMenuItemHeight(resolvedSize) : undefined;\n const value = React.useMemo(\n () => ({ isInsideMenu: true, size: resolvedSize, itemHeight }),\n [resolvedSize, itemHeight],\n );\n return <MenuContext.Provider value={value}>{children}</MenuContext.Provider>;\n}\n\nexport function useMenuContext() {\n return React.useContext(MenuContext);\n}\n\n/**\n * Closes the whole menu from inside it. DropdownMenu.Root and ContextMenu.Root provide it,\n * so a VirtualMenu row can close the menu on select the way a menu item does.\n */\nconst MenuCloseContext = React.createContext<(() => void) | undefined>(undefined);\nexport const MenuCloseProvider = MenuCloseContext.Provider;\n\nexport function useMenuClose() {\n return React.useContext(MenuCloseContext);\n}\n"],
|
|
5
|
+
"mappings": "wCAEA,UAAYA,MAAW,QAyBvB,IAAMC,EAAoB,gBAAgC,CAAE,aAAc,EAAM,CAAC,EAYpEC,EAAiD,CAC5D,EAAK,GACL,EAAK,GACL,EAAK,GACL,EAAK,EACP,EAEO,SAASC,EAAkBC,EAAwB,CACxD,OAAOF,EAAqBE,CAAI,CAClC,CAEO,SAASC,EAAa,CAAE,SAAAC,EAAU,KAAAF,CAAK,EAAsB,CAClE,IAAMG,EAAeC,EAAiDJ,EAAM,MAAS,EAC/EK,EAAaF,EAAeJ,EAAkBI,CAAY,EAAI,OAC9DG,EAAc,UAClB,KAAO,CAAE,aAAc,GAAM,KAAMH,EAAc,WAAAE,CAAW,GAC5D,CAACF,EAAcE,CAAU,CAC3B,EACA,OAAO,gBAACR,EAAY,SAAZ,CAAqB,MAAOS,GAAQJ,CAAS,CACvD,CAEO,SAASK,GAAiB,CAC/B,OAAa,aAAWV,CAAW,CACrC,CAMA,IAAMW,EAAyB,gBAAwC,MAAS,EACnEC,EAAoBD,EAAiB,SAE3C,SAASE,GAAe,CAC7B,OAAa,aAAWF,CAAgB,CAC1C",
|
|
6
|
+
"names": ["React", "MenuContext", "menuSizeToItemHeight", "getMenuItemHeight", "size", "MenuProvider", "children", "resolvedSize", "useResolvedResponsiveValue", "itemHeight", "value", "useMenuContext", "MenuCloseContext", "MenuCloseProvider", "useMenuClose"]
|
|
7
7
|
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as Fe,b as Be}from"./chunk-I53SGTKV.js";import{a as Ve}from"./chunk-MGQ4A2FI.js";import{a as De}from"./chunk-WX7SX5BN.js";import{c as re,d as ie,e as ce,h as ye,i as Me,j as Te}from"./chunk-4ZOVV3TY.js";import{a as Oe}from"./chunk-UY6WJUNA.js";import{a as Ae}from"./chunk-VUPIJNG2.js";import{a as $,b as He,c as we,d as Ne,g as Ie}from"./chunk-3J6AUDID.js";import{a as Le,b as de}from"./chunk-7CUQMU3T.js";import{a as ue,b as pe,c as fe}from"./chunk-5ROQAZ7J.js";import{e as le,f as ge,h as be,i as ee,j as Ce,k as ae,l as se,n as Ee,o as te}from"./chunk-3PTKPDSA.js";import{a as xe,b as ke}from"./chunk-VXQQ6KXI.js";import{a as ze}from"./chunk-HWQ3NTJP.js";import{d as ve}from"./chunk-3YLYGKFB.js";import{a as Se}from"./chunk-TBZO22XK.js";import{a as Xe}from"./chunk-OS3FCYZY.js";var nt={};Xe(nt,{Bottom:()=>Oe,Content:()=>je,Header:()=>Ke,Inspector:()=>Ae,Left:()=>$e,PaneFooter:()=>Me,PaneHeader:()=>ye,Panel:()=>Re,Rail:()=>qe,Root:()=>_e,Scroll:()=>Te,Sidebar:()=>De,Trigger:()=>Ge,useResponsivePresentation:()=>Ve,useShell:()=>Be,useSidebarMode:()=>Fe});import*as e from"react";import U from"classnames";import{Slot as Je}from"radix-ui";import{useComposedRefs as Pe}from"radix-ui/internal";var me=0;function Ue(a){me=Math.max(0,me+a);let s=document.documentElement;me>0?s.setAttribute("data-kui-shell-lock",""):s.removeAttribute("data-kui-shell-lock")}var he="data-kui-shell-inert",Qe=30;function q(a,s){return s===null||s===a||s===a.body||s===a.documentElement}function We(a,s,r){for(let u of a.querySelectorAll("[data-shell-trigger][aria-controls]"))if(!(u.getAttribute("aria-controls")!==s||u.closest("[inert]"))&&!(r&&!r.some(h=>h.contains(u))))return u;return null}var Ye={values:["1","2","3"]},_e=e.forwardRef(({className:a,children:s,height:r="full",size:u,style:h,onKeyDown:A,onFocus:L,...x},k)=>{let S=ve(u,Ye),[i]=e.useState(ge),R=e.useCallback(t=>be(i,t),[i]);e.useSyncExternalStore(R,()=>i.version,()=>0);let f=e.useRef(null),C=Pe(k,f),[E,g]=e.useState(()=>new Set),y=e.useCallback(t=>{g(n=>n.has(t)?n:new Set(n).add(t))},[]),M=e.useCallback(t=>{g(n=>{if(!n.has(t))return n;let o=new Set(n);return o.delete(t),o})},[]),m=e.useMemo(()=>({registerInset:y,unregisterInset:M}),[y,M]),c=e.useCallback(()=>{for(let t of i.entries.values())t.overlayLive&&t.setValue("closed","dismiss")},[i]),H=e.useCallback(()=>[...i.entries.values()].filter(t=>t.overlayLive&&t.el).map(t=>({name:t.name,id:t.id,el:t.el})),[i]),v=[...i.entries.values()].filter(t=>t.overlayLive&&t.el).length,W=r!=="full"&&r!=="auto",w=e.useCallback(()=>{let t=f.current;if(!t)return;let n=H().map(o=>o.el);for(let o of t.children){if(!(o instanceof HTMLElement)||o.classList.contains("kui-ShellScrim"))continue;let d=n.some(z=>o===z||o.contains(z));n.length===0||d?o.hasAttribute(he)&&(o.removeAttribute(he),o.inert=!1):o.inert||(o.setAttribute(he,""),o.inert=!0)}},[H]),_=e.useRef(null),j=e.useRef([]),G=e.useRef(null),D=e.useRef(!1),T=e.useRef(0),N=e.useCallback(()=>{T.current&&cancelAnimationFrame(T.current),T.current=0},[]),X=e.useCallback((t,n)=>{N();let o=0,d=()=>{if(T.current=0,!!t.isConnected){if(n(t.ownerDocument.activeElement)){t.focus({preventScroll:!0});return}o+=1,o<Qe&&(T.current=requestAnimationFrame(d))}};T.current=requestAnimationFrame(d)},[N]);e.useEffect(()=>()=>{N(),D.current&&(D.current=!1,Ue(-1))},[N]),e.useEffect(()=>{let t=f.current;if(!t)return;let n=t.ownerDocument,o=H(),d=o.map(l=>l.el),z=!W&&o.length>0;z!==D.current&&(D.current=z,Ue(z?1:-1));let B=j.current;j.current=o;let O=B.filter(l=>{if(d.includes(l.el))return!1;let p=i.entries.get(l.name);return!l.el.isConnected||!p||p.el!==l.el||p.value==="closed"}),K=l=>l!==null&&O.some(p=>p.el.contains(l));if(B.length===0&&o.length>0){let l=n.activeElement,p=l instanceof HTMLElement&&!q(n,l)&&!d.some(P=>P.contains(l))?l:null;if(p&&!t.contains(p)){let P=G.current;P&&P.isConnected&&!d.some(Z=>Z.contains(P))&&(p=P)}_.current=p}if(w(),o.length===0){let l=_.current;if(_.current=null,O.length===0)return;let P=(b=>b!==null&&b.isConnected&&!b.closest("[inert]")&&!K(b))(l)?l:null;for(let b of O)P??(P=We(n,b.id));if(!P)return;let Z=b=>q(n,b)||K(b);Z(n.activeElement)?P.focus({preventScroll:!0}):X(P,Z);return}if(O.length>0){let l=n.activeElement;if(q(n,l)||K(l)){let p=null;for(let P of O)p??(p=We(n,P.id,d));(p??d[d.length-1]).focus({preventScroll:!0})}}let V=d.filter(l=>!B.some(p=>p.el===l)),oe=n.activeElement;V.length>0&&!d.some(l=>l.contains(oe))&&(V[0].focus({preventScroll:!0}),X(V[0],l=>q(n,l)||l instanceof Element&&l.closest("[inert]")!==null))}),e.useEffect(()=>{let t=f.current;if(!t||v===0||typeof MutationObserver>"u")return;let n=new MutationObserver(w);return n.observe(t,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["inert"]}),()=>n.disconnect()},[v,w]);let J=t=>{A?.(t),!(t.key!=="Escape"||t.defaultPrevented||v===0)&&(c(),t.stopPropagation())};e.useEffect(()=>{let t=f.current;if(!t||v===0)return;let n=t.ownerDocument,o=d=>{d.key!=="Escape"||d.defaultPrevented||!q(n,d.target)||c()};return n.addEventListener("keydown",o),()=>n.removeEventListener("keydown",o)},[v,c]);let Q=t=>{L?.(t),t.target instanceof HTMLElement&&f.current?.contains(t.target)&&(G.current=t.target)},I=i.entries.get("rail"),F=I!==void 0&&I.value!==void 0&&I.value!=="closed"?E.has("rail")?`calc(${I.size}px + 2 * var(--shell-inset-gap))`:`${I.size}px`:void 0,ne=r==="full"?{}:r==="auto"?{height:"auto"}:typeof r=="number"?{height:`${r}px`}:{height:r};return e.createElement(Ce.Provider,{value:i},e.createElement(re.Provider,{value:S},e.createElement(ie.Provider,{value:!1},e.createElement(Ee.Provider,{value:m},e.createElement("div",{...x,ref:C,className:U("kui-ShellRoot",a),"data-height":r==="auto"?"auto":void 0,"data-has-inset":E.size>0||void 0,"data-overlay-live":v>0||void 0,onKeyDown:J,onFocus:Q,style:{...ne,...F?{"--shell-rail-offset":F}:{},...h}},s,e.createElement("div",{className:"kui-ShellScrim","aria-hidden":!0,onClick:c}))))))});_e.displayName="Shell.Root";var Ke=e.forwardRef(({className:a,height:s=64,style:r,...u},h)=>e.createElement("header",{...u,ref:h,className:U("kui-ShellHeader",a),style:{...r,"--shell-header-height":`${s}px`}}));Ke.displayName="Shell.Header";var $e=e.forwardRef(({children:a},s)=>(e.useEffect(()=>{},[]),e.createElement(e.Fragment,null,a)));$e.displayName="Shell.Left";var Ze={controlled:"open",default:"defaultOpen"},qe=e.forwardRef((a,s)=>{let{className:r,presentation:u,expandedSize:h=64,collapsible:A,onExpand:L,onCollapse:x,children:k,style:S,open:i,defaultOpen:R,onOpenChange:f,inset:C,id:E,...g}=a,{table:y,attributes:M}=fe(u,"fixed"),m=ue({name:"rail",label:"Rail",propNames:Ze,id:E,controlled:$(i),defaultValue:$(R),presentationTable:y,builtIn:He,onChange:(H,v)=>f?.(H!=="closed",{reason:v}),onExpand:L,onCollapse:x,size:h});te("rail",C);let c=Pe(s,m.setElement);return e.createElement("div",{...g,id:m.id,ref:c,className:U("kui-ShellPane","kui-ShellRail",r),...pe(m,M),"data-inset":C||void 0,tabIndex:m.overlaying?-1:g.tabIndex,style:{...S,"--rail-size":`${h}px`}},e.createElement(et,null,k))});qe.displayName="Shell.Rail";function et({children:a}){let s=e.useContext(re);return e.createElement("div",{className:U("kui-ShellRailContent",`kui-r-size-${s}`)},e.createElement(ce,{presentation:"thin"},a))}var tt={controlled:"open",default:"defaultOpen"},Re=e.forwardRef((a,s)=>{let{className:r,presentation:u,defaultOpen:h,open:A,onOpenChange:L,size:x,defaultSize:k,expandedSize:S=288,minSize:i=100,maxSize:R=800,resizable:f=!1,collapsible:C=!0,onExpand:E,onCollapse:g,onResize:y,onResizeStart:M,onResizeEnd:m,snapPoints:c,snapTolerance:H,collapseThreshold:v,paneId:W,persistence:w,children:_,style:j,onSizeChange:G,sizeUpdate:D,sizeUpdateMs:T=50,inset:N,id:X,...J}=a,Q=ae("Shell.Panel"),I=se(Q,"rail"),Y=fe(u,"fixed"),F=u===void 0,ne=F?I?.presentationTable??le:Y.table,t=F?{"data-presentation-follows":""}:Y.attributes,n=ue({name:"panel",label:"Panel",propNames:tt,id:X,controlled:$(A),defaultValue:$(h),presentationTable:ne,builtIn:we,onChange:(V,oe)=>L?.(V!=="closed",{reason:oe}),onExpand:E,onCollapse:g,size:S});te("panel",N),e.useEffect(()=>{(c!==void 0||v!==void 0||W!==void 0||w!==void 0)&&void 0},[c,v,W,w]);let o=e.useRef(null),d=Pe(s,n.setElement,o),z=xe({name:"panel",elementId:n.id,elementRef:o,cssVarName:"--panel-size",orientation:"vertical",edge:"end",growth:Ne,expandedSize:S,minSize:i,maxSize:R,resizable:f,collapsible:C,size:x,defaultSize:k,onSizeChange:G,sizeUpdate:D,sizeUpdateMs:T,onResize:y,onResizeStart:M,onResizeEnd:m,snapPoints:c,snapTolerance:H,collapseThreshold:v,paneId:W,persistence:w,overlaying:n.overlaying,overlayingNow:()=>(F?Q.entries.get("rail")?.presentationTable??le:Y.table)[Se()]==="overlay",requestCollapse:()=>n.setValue("closed","toggle"),requestToggle:()=>n.toggle("toggle")}),{handles:B,content:O}=ke(_,de),K=f&&n.shown!==!1&&!n.overlaying?e.createElement(ze.Provider,{value:z},B.length>0?B:e.createElement(Le,null)):null;return e.createElement("div",{...Ie(J),id:n.id,ref:d,className:U("kui-ShellPane","kui-ShellPanel",r),...pe(n,t),"data-inset":N||void 0,tabIndex:n.overlaying?-1:J.tabIndex,style:{...j,"--panel-expanded-size":`${S}px`}},e.createElement("div",{className:"kui-ShellPanelContent"},e.createElement(ce,null,O)),K)});Re.displayName="Shell.Panel";Re.Handle=de;var je=e.forwardRef(({className:a,inset:s,children:r,...u},h)=>(te("content",s),e.createElement("main",{...u,ref:h,className:U("kui-ShellContent",a),"data-inset":s||void 0},e.createElement(ie.Provider,{value:!0},r))));je.displayName="Shell.Content";var Ge=e.forwardRef(({target:a,action:s="toggle",peekOnHover:r,asChild:u=!1,onClick:h,onMouseEnter:A,onMouseLeave:L,children:x,...k},S)=>{let i=ae("Shell.Trigger");e.useEffect(()=>{a==="left"&&void 0,r&&void 0},[a,r]);let R=a==="left"?"rail":a,f=se(i,R),C=f?.value===void 0?void 0:f.value!=="closed",E=m=>{if(h?.(m),m.defaultPrevented)return;let c=i.entries.get(R);c&&(i.peek===R&&ee(i,null),s==="toggle"?c.toggle("toggle"):s==="expand"?c.setValue("open","toggle"):c.setValue("closed","toggle"))},g=m=>{if(A?.(m),!r)return;let c=i.entries.get(R);c&&c.value==="closed"&&c.presentation!=="overlay"&&ee(i,R)},y=m=>{L?.(m),r&&i.peek===R&&ee(i,null)},M=u?Je.Root:"button";return e.createElement(M,{...!u&&{type:"button"},"aria-controls":f?.id,"aria-expanded":C,...k,ref:S,onClick:E,onMouseEnter:g,onMouseLeave:y,"data-shell-trigger":a,"data-shell-action":s},x)});Ge.displayName="Shell.Trigger";export{_e as a,Ke as b,$e as c,qe as d,Re as e,je as f,Ge as g,nt as h};
|
|
2
|
+
//# sourceMappingURL=chunk-VUNCI6A6.js.map
|