@womp/kookie-ui 0.4.0 → 0.6.2
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 +783 -783
- package/dist/cjs/components/_internal/base-menu.utils.d.ts +48 -0
- package/dist/cjs/components/_internal/base-menu.utils.d.ts.map +1 -0
- package/dist/cjs/components/_internal/base-menu.utils.js +2 -0
- package/dist/cjs/components/_internal/base-menu.utils.js.map +7 -0
- package/dist/cjs/components/_internal/dropdown-menu-drill-down.d.ts +77 -59
- package/dist/cjs/components/_internal/dropdown-menu-drill-down.d.ts.map +1 -1
- package/dist/cjs/components/_internal/dropdown-menu-drill-down.js +1 -1
- package/dist/cjs/components/_internal/dropdown-menu-drill-down.js.map +4 -4
- package/dist/cjs/components/_internal/menu-context.d.ts +7 -3
- 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 +4 -4
- package/dist/cjs/components/_internal/shell-bottom.js +1 -1
- package/dist/cjs/components/_internal/shell-bottom.js.map +2 -2
- package/dist/cjs/components/_internal/shell-inspector.js +1 -1
- package/dist/cjs/components/_internal/shell-inspector.js.map +2 -2
- package/dist/cjs/components/_internal/shell-sidebar.js +1 -1
- package/dist/cjs/components/_internal/shell-sidebar.js.map +2 -2
- package/dist/cjs/components/accordion.js +1 -1
- package/dist/cjs/components/alert-dialog.js +1 -1
- package/dist/cjs/components/alert-dialog.js.map +2 -2
- package/dist/cjs/components/badge.js +1 -1
- package/dist/cjs/components/badge.js.map +2 -2
- package/dist/cjs/components/blockquote.js +1 -1
- package/dist/cjs/components/button.js +1 -1
- package/dist/cjs/components/button.js.map +2 -2
- package/dist/cjs/components/callout.js +1 -1
- package/dist/cjs/components/callout.js.map +2 -2
- package/dist/cjs/components/card.js +1 -1
- package/dist/cjs/components/card.js.map +2 -2
- package/dist/cjs/components/chatbar.d.ts +46 -44
- package/dist/cjs/components/chatbar.d.ts.map +1 -1
- package/dist/cjs/components/chatbar.js +2 -2
- package/dist/cjs/components/chatbar.js.map +3 -3
- package/dist/cjs/components/checkbox-cards.js +1 -1
- package/dist/cjs/components/checkbox-cards.js.map +2 -2
- package/dist/cjs/components/checkbox-group.js +1 -1
- package/dist/cjs/components/checkbox.js +1 -1
- package/dist/cjs/components/combobox.d.ts +28 -15
- package/dist/cjs/components/combobox.d.ts.map +1 -1
- package/dist/cjs/components/combobox.js +1 -1
- package/dist/cjs/components/combobox.js.map +4 -4
- package/dist/cjs/components/combobox.props.d.ts +48 -0
- package/dist/cjs/components/combobox.props.d.ts.map +1 -1
- package/dist/cjs/components/combobox.props.js +1 -1
- package/dist/cjs/components/combobox.props.js.map +4 -4
- package/dist/cjs/components/context-menu.d.ts +18 -5
- 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/context-menu.props.d.ts +1 -1
- package/dist/cjs/components/context-menu.props.d.ts.map +1 -1
- package/dist/cjs/components/context-menu.props.js +1 -1
- package/dist/cjs/components/context-menu.props.js.map +3 -3
- package/dist/cjs/components/dialog.js +1 -1
- package/dist/cjs/components/dialog.js.map +2 -2
- package/dist/cjs/components/dropdown-menu.d.ts +11 -18
- 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/heading.js +1 -1
- package/dist/cjs/components/hover-card.js +1 -1
- package/dist/cjs/components/hover-card.js.map +2 -2
- package/dist/cjs/components/icon-button.js +1 -1
- package/dist/cjs/components/icon-button.js.map +2 -2
- package/dist/cjs/components/index.js +5 -5
- package/dist/cjs/components/index.js.map +4 -4
- package/dist/cjs/components/link.js +1 -1
- package/dist/cjs/components/popover.js +1 -1
- package/dist/cjs/components/popover.js.map +2 -2
- package/dist/cjs/components/radio-cards.js +1 -1
- package/dist/cjs/components/radio-cards.js.map +2 -2
- package/dist/cjs/components/radio.js +1 -1
- package/dist/cjs/components/radio.js.map +2 -2
- package/dist/cjs/components/schemas/base-button.schema.d.ts +111 -256
- package/dist/cjs/components/schemas/base-button.schema.d.ts.map +1 -1
- package/dist/cjs/components/schemas/button.schema.d.ts +136 -557
- package/dist/cjs/components/schemas/button.schema.d.ts.map +1 -1
- package/dist/cjs/components/schemas/icon-button.schema.d.ts +123 -240
- package/dist/cjs/components/schemas/icon-button.schema.d.ts.map +1 -1
- package/dist/cjs/components/schemas/index.js +1 -1
- package/dist/cjs/components/schemas/index.js.map +2 -2
- package/dist/cjs/components/schemas/shell.schema.d.ts +592 -851
- package/dist/cjs/components/schemas/shell.schema.d.ts.map +1 -1
- package/dist/cjs/components/schemas/shell.schema.js +1 -1
- package/dist/cjs/components/schemas/shell.schema.js.map +2 -2
- package/dist/cjs/components/schemas/toggle-button.schema.d.ts +138 -1026
- package/dist/cjs/components/schemas/toggle-button.schema.d.ts.map +1 -1
- package/dist/cjs/components/schemas/toggle-icon-button.schema.d.ts +124 -465
- package/dist/cjs/components/schemas/toggle-icon-button.schema.d.ts.map +1 -1
- package/dist/cjs/components/scroll-area.js +1 -1
- package/dist/cjs/components/segmented-control.js +1 -1
- package/dist/cjs/components/select.js +1 -1
- package/dist/cjs/components/select.js.map +2 -2
- package/dist/cjs/components/sheet.js +1 -1
- package/dist/cjs/components/sheet.js.map +2 -2
- package/dist/cjs/components/shell.js +1 -1
- package/dist/cjs/components/shell.js.map +3 -3
- package/dist/cjs/components/sidebar.js +1 -1
- package/dist/cjs/components/sidebar.js.map +4 -4
- package/dist/cjs/components/slider.js +1 -1
- package/dist/cjs/components/slot.d.ts +6 -2
- package/dist/cjs/components/slot.d.ts.map +1 -1
- package/dist/cjs/components/switch.js +1 -1
- package/dist/cjs/components/tab-nav.js +1 -1
- package/dist/cjs/components/text-field.js +2 -2
- package/dist/cjs/components/text.js +1 -1
- package/dist/cjs/components/theme-panel.js +3 -3
- package/dist/cjs/components/theme-panel.js.map +2 -2
- package/dist/cjs/components/theme.js +1 -1
- package/dist/cjs/components/theme.js.map +2 -2
- package/dist/cjs/components/theme.props.d.ts +1 -1
- package/dist/cjs/components/theme.props.js +1 -1
- package/dist/cjs/components/theme.props.js.map +2 -2
- package/dist/cjs/components/toggle-button.js +1 -1
- package/dist/cjs/components/toggle-button.js.map +2 -2
- package/dist/cjs/components/toggle-icon-button.js +1 -1
- package/dist/cjs/components/toggle-icon-button.js.map +2 -2
- package/dist/cjs/components/tooltip.js +1 -1
- package/dist/cjs/components/tooltip.js.map +2 -2
- package/dist/cjs/components/user-card.js +1 -1
- package/dist/cjs/components/user-card.js.map +2 -2
- 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 +4 -4
- package/dist/cjs/helpers/extract-props.js +1 -1
- package/dist/cjs/helpers/extract-props.js.map +2 -2
- package/dist/cjs/helpers/get-margin-styles.js +1 -1
- package/dist/cjs/helpers/get-margin-styles.js.map +2 -2
- package/dist/cjs/hooks/use-breakpoint.d.ts +4 -1
- package/dist/cjs/hooks/use-breakpoint.d.ts.map +1 -1
- package/dist/cjs/hooks/use-breakpoint.js +1 -1
- package/dist/cjs/hooks/use-breakpoint.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 +3 -3
- package/dist/esm/{chunk-P7HYVJSU.js → chunk-2TIADHPD.js} +2 -2
- package/dist/esm/chunk-37OGSEQR.js +2 -0
- package/dist/esm/chunk-37OGSEQR.js.map +7 -0
- package/dist/esm/{chunk-RMKXWYOV.js → chunk-3OBXZUFJ.js} +2 -2
- package/dist/esm/{chunk-S2HA3W3V.js → chunk-3R7XMRV5.js} +2 -2
- package/dist/esm/chunk-4SMJ7D4S.js +2 -0
- package/dist/esm/chunk-4SMJ7D4S.js.map +7 -0
- package/dist/esm/{chunk-S56YSRHP.js → chunk-56TS6OKQ.js} +2 -2
- package/dist/esm/{chunk-2FYJTSOP.js → chunk-5BYHEYO6.js} +2 -2
- package/dist/esm/{chunk-B24BDVG2.js → chunk-5MNBQROW.js} +2 -2
- package/dist/esm/{chunk-W7N7V5YD.js → chunk-7ESHXHHO.js} +2 -2
- package/dist/esm/{chunk-CRWYCLTE.js → chunk-ABSKRHVM.js} +2 -2
- package/dist/esm/chunk-ADBLURLJ.js +2 -0
- package/dist/esm/chunk-ADBLURLJ.js.map +7 -0
- package/dist/esm/{chunk-3MWWP4MW.js → chunk-BBJUB52V.js} +2 -2
- package/dist/esm/{chunk-PTLFMWCN.js → chunk-CQNPBTM5.js} +2 -2
- package/dist/esm/{chunk-GJSGKE7B.js → chunk-CTA5ODAO.js} +2 -2
- package/dist/esm/{chunk-GWXVETMF.js → chunk-DCAZPMOB.js} +2 -2
- package/dist/esm/{chunk-PLWXTEVE.js → chunk-DMJJM5IS.js} +2 -2
- package/dist/esm/{chunk-A2RZGGMY.js → chunk-DQAUX5ZL.js} +2 -2
- package/dist/esm/{chunk-6XGZPIUT.js → chunk-DX5JJYMZ.js} +2 -2
- package/dist/esm/{chunk-6XGZPIUT.js.map → chunk-DX5JJYMZ.js.map} +2 -2
- package/dist/esm/{chunk-YUP6EICB.js → chunk-DXL6V2A5.js} +2 -2
- package/dist/esm/{chunk-XMRIRFM7.js → chunk-FG7XM7KJ.js} +2 -2
- package/dist/esm/{chunk-IKSN4RNB.js → chunk-FIB3XATL.js} +3 -3
- package/dist/esm/chunk-FMBECDL4.js +2 -0
- package/dist/esm/{chunk-4XJY6FIK.js.map → chunk-FMBECDL4.js.map} +3 -3
- package/dist/esm/{chunk-374ZYJUP.js → chunk-HBR42MIX.js} +2 -2
- package/dist/esm/{chunk-2UPAYDKR.js → chunk-HIKVMKYQ.js} +2 -2
- package/dist/esm/{chunk-VX6ARMWP.js → chunk-HSAG7C53.js} +2 -2
- package/dist/esm/{chunk-OSRJRBKP.js → chunk-HW324FK3.js} +2 -2
- package/dist/esm/{chunk-DNHUQLXO.js → chunk-JBO5YOUM.js} +2 -2
- package/dist/esm/{chunk-HF5WY5YE.js → chunk-JGLAE5G7.js} +2 -2
- package/dist/esm/{chunk-4YFJWXL2.js → chunk-JJKQ7CGI.js} +2 -2
- package/dist/esm/chunk-JSW6J6RS.js +2 -0
- package/dist/esm/chunk-JSW6J6RS.js.map +7 -0
- package/dist/esm/chunk-KRDP5SQ7.js +2 -0
- package/dist/esm/chunk-KRDP5SQ7.js.map +7 -0
- package/dist/esm/{chunk-CWRNW44F.js → chunk-L6PVH3RM.js} +2 -2
- package/dist/esm/{chunk-MK2R6DAU.js → chunk-LAOMR7SE.js} +2 -2
- package/dist/esm/{chunk-FHOCUZDR.js → chunk-NIQT45PJ.js} +2 -2
- package/dist/esm/chunk-NKEJTTIL.js +2 -0
- package/dist/esm/chunk-NKEJTTIL.js.map +7 -0
- package/dist/esm/chunk-NVDXXGVW.js +2 -0
- package/dist/esm/chunk-NVDXXGVW.js.map +7 -0
- package/dist/esm/chunk-OS3FCYZY.js +2 -0
- package/dist/esm/{chunk-7QDTSBJF.js → chunk-OYF6YXH7.js} +2 -2
- package/dist/esm/{chunk-WFMYNZXZ.js → chunk-P5OSU4NX.js} +2 -2
- package/dist/esm/{chunk-QEOAXJLN.js → chunk-PTS6QYQW.js} +2 -2
- package/dist/esm/{chunk-CVWCKOHO.js → chunk-RLPKKCBL.js} +2 -2
- package/dist/esm/{chunk-LKAK5GXF.js → chunk-SPIU5JYC.js} +2 -2
- package/dist/esm/chunk-SZTZ2XLI.js +2 -0
- package/dist/esm/chunk-SZTZ2XLI.js.map +7 -0
- package/dist/esm/chunk-T2FZN7G3.js +2 -0
- package/dist/esm/chunk-T2FZN7G3.js.map +7 -0
- package/dist/esm/{chunk-4AQTUBVP.js → chunk-T4UHUQFJ.js} +2 -2
- package/dist/esm/{chunk-K6QZMNCD.js → chunk-TS623UPD.js} +2 -2
- package/dist/esm/{chunk-YV2KYHGR.js → chunk-UBOOUDS4.js} +2 -2
- package/dist/esm/{chunk-D6B7IMZU.js → chunk-UFI53QUC.js} +2 -2
- package/dist/esm/{chunk-AU3D6F42.js → chunk-UIRSGVJG.js} +2 -2
- package/dist/esm/{chunk-FXUUI6Z2.js → chunk-UUUZXUIP.js} +2 -2
- package/dist/esm/{chunk-25WZA7ZU.js → chunk-VA4CTVQL.js} +2 -2
- package/dist/esm/{chunk-TOLLPRMM.js → chunk-VNPNEJI6.js} +2 -2
- package/dist/esm/{chunk-6IGTK4JE.js → chunk-YMUGKYGW.js} +2 -2
- package/dist/esm/chunk-ZWYYPFZW.js +2 -0
- package/dist/esm/chunk-ZWYYPFZW.js.map +7 -0
- package/dist/esm/{chunk-M24UXMOQ.js → chunk-ZXZOH63L.js} +2 -2
- package/dist/esm/components/_internal/base-button.js +1 -1
- package/dist/esm/components/_internal/base-button.props.js +1 -1
- package/dist/esm/components/_internal/base-checkbox.props.js +1 -1
- package/dist/esm/components/_internal/base-menu.props.js +1 -1
- package/dist/esm/components/_internal/base-menu.utils.d.ts +48 -0
- package/dist/esm/components/_internal/base-menu.utils.d.ts.map +1 -0
- package/dist/esm/components/_internal/base-menu.utils.js +2 -0
- package/dist/esm/components/_internal/base-menu.utils.js.map +7 -0
- package/dist/esm/components/_internal/base-radio.props.js +1 -1
- package/dist/esm/components/_internal/base-tab-list.props.js +1 -1
- package/dist/esm/components/_internal/dropdown-menu-drill-down.d.ts +77 -59
- package/dist/esm/components/_internal/dropdown-menu-drill-down.d.ts.map +1 -1
- package/dist/esm/components/_internal/dropdown-menu-drill-down.js +1 -1
- package/dist/esm/components/_internal/menu-context.d.ts +7 -3
- 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/shell-bottom.js +1 -1
- package/dist/esm/components/_internal/shell-handles.js +1 -1
- package/dist/esm/components/_internal/shell-inspector.js +1 -1
- package/dist/esm/components/_internal/shell-prop-helpers.js +1 -1
- package/dist/esm/components/_internal/shell-resize.js +1 -1
- package/dist/esm/components/_internal/shell-sidebar.js +1 -1
- package/dist/esm/components/accessible-icon.js +1 -1
- package/dist/esm/components/accordion.js +1 -1
- package/dist/esm/components/accordion.props.js +1 -1
- package/dist/esm/components/alert-dialog.js +1 -1
- package/dist/esm/components/alert-dialog.props.js +1 -1
- package/dist/esm/components/aspect-ratio.js +1 -1
- package/dist/esm/components/avatar.js +1 -1
- package/dist/esm/components/avatar.props.js +1 -1
- package/dist/esm/components/badge.js +1 -1
- package/dist/esm/components/badge.props.js +1 -1
- package/dist/esm/components/blockquote.js +1 -1
- package/dist/esm/components/blockquote.props.js +1 -1
- package/dist/esm/components/box.js +1 -1
- package/dist/esm/components/box.props.js +1 -1
- package/dist/esm/components/button.js +1 -1
- package/dist/esm/components/button.props.js +1 -1
- package/dist/esm/components/callout.js +1 -1
- package/dist/esm/components/callout.props.js +1 -1
- package/dist/esm/components/card.js +1 -1
- package/dist/esm/components/card.props.js +1 -1
- package/dist/esm/components/chatbar.d.ts +46 -44
- package/dist/esm/components/chatbar.d.ts.map +1 -1
- package/dist/esm/components/chatbar.js +1 -1
- package/dist/esm/components/checkbox-cards.js +1 -1
- package/dist/esm/components/checkbox-cards.props.js +1 -1
- package/dist/esm/components/checkbox-group.js +1 -1
- package/dist/esm/components/checkbox-group.primitive.js +1 -1
- package/dist/esm/components/checkbox-group.props.js +1 -1
- package/dist/esm/components/checkbox.js +1 -1
- package/dist/esm/components/checkbox.props.js +1 -1
- package/dist/esm/components/code.js +1 -1
- package/dist/esm/components/code.props.js +1 -1
- package/dist/esm/components/combobox.d.ts +28 -15
- package/dist/esm/components/combobox.d.ts.map +1 -1
- package/dist/esm/components/combobox.js +1 -1
- package/dist/esm/components/combobox.props.d.ts +48 -0
- package/dist/esm/components/combobox.props.d.ts.map +1 -1
- package/dist/esm/components/combobox.props.js +1 -1
- package/dist/esm/components/container.js +1 -1
- package/dist/esm/components/container.props.js +1 -1
- package/dist/esm/components/context-menu.d.ts +18 -5
- package/dist/esm/components/context-menu.d.ts.map +1 -1
- package/dist/esm/components/context-menu.js +1 -1
- package/dist/esm/components/context-menu.props.d.ts +1 -1
- package/dist/esm/components/context-menu.props.d.ts.map +1 -1
- package/dist/esm/components/context-menu.props.js +1 -1
- package/dist/esm/components/data-list.js +1 -1
- package/dist/esm/components/data-list.props.js +1 -1
- package/dist/esm/components/dialog.js +1 -1
- package/dist/esm/components/dialog.props.js +1 -1
- package/dist/esm/components/dropdown-menu.d.ts +11 -18
- package/dist/esm/components/dropdown-menu.d.ts.map +1 -1
- package/dist/esm/components/dropdown-menu.js +1 -1
- package/dist/esm/components/dropdown-menu.props.js +1 -1
- package/dist/esm/components/em.js +1 -1
- package/dist/esm/components/em.props.js +1 -1
- package/dist/esm/components/flex.js +1 -1
- package/dist/esm/components/flex.props.js +1 -1
- package/dist/esm/components/grid.js +1 -1
- package/dist/esm/components/grid.props.js +1 -1
- package/dist/esm/components/heading.js +1 -1
- package/dist/esm/components/heading.props.js +1 -1
- package/dist/esm/components/hover-card.js +1 -1
- package/dist/esm/components/hover-card.props.js +1 -1
- package/dist/esm/components/icon-button.js +1 -1
- package/dist/esm/components/icon-button.props.js +1 -1
- package/dist/esm/components/icons.js +1 -1
- package/dist/esm/components/image.js +1 -1
- package/dist/esm/components/image.props.js +1 -1
- package/dist/esm/components/index.js +1 -1
- package/dist/esm/components/inset.js +1 -1
- package/dist/esm/components/inset.props.js +1 -1
- package/dist/esm/components/kbd.js +1 -1
- package/dist/esm/components/kbd.props.js +1 -1
- package/dist/esm/components/link.js +1 -1
- package/dist/esm/components/link.props.js +1 -1
- package/dist/esm/components/navbar.js +1 -1
- package/dist/esm/components/navbar.props.js +1 -1
- package/dist/esm/components/popover.js +1 -1
- package/dist/esm/components/popover.props.js +1 -1
- package/dist/esm/components/portal.js +1 -1
- package/dist/esm/components/progress.js +1 -1
- package/dist/esm/components/progress.props.js +1 -1
- package/dist/esm/components/quote.js +1 -1
- package/dist/esm/components/quote.props.js +1 -1
- package/dist/esm/components/radio-cards.js +1 -1
- package/dist/esm/components/radio-cards.props.js +1 -1
- package/dist/esm/components/radio-group.js +1 -1
- package/dist/esm/components/radio-group.props.js +1 -1
- package/dist/esm/components/radio.js +1 -1
- package/dist/esm/components/radio.props.js +1 -1
- package/dist/esm/components/reset.js +1 -1
- package/dist/esm/components/schemas/base-button.schema.d.ts +111 -256
- package/dist/esm/components/schemas/base-button.schema.d.ts.map +1 -1
- package/dist/esm/components/schemas/base-button.schema.js +1 -1
- package/dist/esm/components/schemas/button.schema.d.ts +136 -557
- package/dist/esm/components/schemas/button.schema.d.ts.map +1 -1
- package/dist/esm/components/schemas/button.schema.js +1 -1
- package/dist/esm/components/schemas/icon-button.schema.d.ts +123 -240
- package/dist/esm/components/schemas/icon-button.schema.d.ts.map +1 -1
- package/dist/esm/components/schemas/icon-button.schema.js +1 -1
- package/dist/esm/components/schemas/index.js +1 -1
- package/dist/esm/components/schemas/shell.schema.d.ts +592 -851
- package/dist/esm/components/schemas/shell.schema.d.ts.map +1 -1
- package/dist/esm/components/schemas/shell.schema.js +1 -1
- package/dist/esm/components/schemas/toggle-button.schema.d.ts +138 -1026
- package/dist/esm/components/schemas/toggle-button.schema.d.ts.map +1 -1
- package/dist/esm/components/schemas/toggle-button.schema.js +1 -1
- package/dist/esm/components/schemas/toggle-icon-button.schema.d.ts +124 -465
- package/dist/esm/components/schemas/toggle-icon-button.schema.d.ts.map +1 -1
- package/dist/esm/components/schemas/toggle-icon-button.schema.js +1 -1
- package/dist/esm/components/scroll-area.js +1 -1
- package/dist/esm/components/scroll-area.props.js +1 -1
- package/dist/esm/components/section.js +1 -1
- package/dist/esm/components/section.props.js +1 -1
- package/dist/esm/components/segmented-control.js +1 -1
- package/dist/esm/components/segmented-control.props.js +1 -1
- package/dist/esm/components/select.js +1 -1
- package/dist/esm/components/select.props.js +1 -1
- package/dist/esm/components/separator.js +1 -1
- package/dist/esm/components/separator.props.js +1 -1
- package/dist/esm/components/sheet.js +1 -1
- package/dist/esm/components/shell.context.js +1 -1
- package/dist/esm/components/shell.hooks.js +1 -1
- package/dist/esm/components/shell.js +1 -1
- package/dist/esm/components/shell.types.js +1 -1
- package/dist/esm/components/sidebar.js +1 -1
- package/dist/esm/components/sidebar.props.js +1 -1
- package/dist/esm/components/skeleton.js +1 -1
- package/dist/esm/components/skeleton.props.js +1 -1
- package/dist/esm/components/slider.js +1 -1
- package/dist/esm/components/slider.props.js +1 -1
- package/dist/esm/components/slot.d.ts +6 -2
- package/dist/esm/components/slot.d.ts.map +1 -1
- package/dist/esm/components/slot.js +1 -1
- package/dist/esm/components/spinner.js +1 -1
- package/dist/esm/components/spinner.props.js +1 -1
- package/dist/esm/components/strong.js +1 -1
- package/dist/esm/components/strong.props.js +1 -1
- package/dist/esm/components/switch.js +1 -1
- package/dist/esm/components/switch.props.js +1 -1
- package/dist/esm/components/tab-nav.js +1 -1
- package/dist/esm/components/tab-nav.props.js +1 -1
- package/dist/esm/components/table.js +1 -1
- package/dist/esm/components/table.props.js +1 -1
- package/dist/esm/components/tabs.js +1 -1
- package/dist/esm/components/tabs.props.js +1 -1
- package/dist/esm/components/text-area.js +1 -1
- package/dist/esm/components/text-area.props.js +1 -1
- package/dist/esm/components/text-field.js +1 -1
- package/dist/esm/components/text-field.props.js +1 -1
- package/dist/esm/components/text.js +1 -1
- package/dist/esm/components/text.props.js +1 -1
- package/dist/esm/components/theme-panel.js +1 -1
- package/dist/esm/components/theme.js +1 -1
- package/dist/esm/components/theme.props.d.ts +1 -1
- package/dist/esm/components/theme.props.js +1 -1
- package/dist/esm/components/toggle-button.js +1 -1
- package/dist/esm/components/toggle-icon-button.js +1 -1
- package/dist/esm/components/toolbar.js +1 -1
- package/dist/esm/components/tooltip.js +1 -1
- package/dist/esm/components/tooltip.props.js +1 -1
- package/dist/esm/components/user-card.js +1 -1
- package/dist/esm/components/user-card.props.js +1 -1
- package/dist/esm/components/virtual-menu.d.ts.map +1 -1
- package/dist/esm/components/virtual-menu.js +1 -1
- package/dist/esm/components/visually-hidden.js +1 -1
- package/dist/esm/helpers/compile-prop-defs.js +1 -1
- package/dist/esm/helpers/extract-margin-props.js +1 -1
- package/dist/esm/helpers/extract-props.js +1 -1
- package/dist/esm/helpers/font-config.js +1 -1
- package/dist/esm/helpers/get-margin-styles.js +1 -1
- package/dist/esm/helpers/get-matching-gray-color.js +1 -1
- package/dist/esm/helpers/get-responsive-styles.js +1 -1
- package/dist/esm/helpers/get-subtree.js +1 -1
- package/dist/esm/helpers/has-own-property.js +1 -1
- package/dist/esm/helpers/index.js +1 -1
- package/dist/esm/helpers/inert.js +1 -1
- package/dist/esm/helpers/is-responsive-object.js +1 -1
- package/dist/esm/helpers/map-prop-values.js +1 -1
- package/dist/esm/helpers/merge-styles.js +1 -1
- package/dist/esm/helpers/normalize-to-px.js +1 -1
- package/dist/esm/helpers/require-react-element.js +1 -1
- package/dist/esm/helpers/use-deprecation-warning.js +1 -1
- package/dist/esm/hooks/index.js +1 -1
- package/dist/esm/hooks/use-body-pointer-events-cleanup.js +1 -1
- package/dist/esm/hooks/use-breakpoint.d.ts +4 -1
- package/dist/esm/hooks/use-breakpoint.d.ts.map +1 -1
- package/dist/esm/hooks/use-breakpoint.js +1 -1
- package/dist/esm/hooks/use-live-announcer.js +1 -1
- package/dist/esm/hooks/use-prop-synced-state.js +1 -1
- package/dist/esm/hooks/use-toggle-state.js +1 -1
- package/dist/esm/hooks/use-tooltip-wrapper.js +1 -1
- package/dist/esm/index.js +1 -1
- package/dist/esm/props/as-child.prop.js +1 -1
- package/dist/esm/props/color.prop.js +1 -1
- package/dist/esm/props/font-family.prop.js +1 -1
- package/dist/esm/props/gap.props.js +1 -1
- package/dist/esm/props/height.props.js +1 -1
- package/dist/esm/props/high-contrast.prop.js +1 -1
- package/dist/esm/props/index.js +1 -1
- package/dist/esm/props/layout.props.js +1 -1
- package/dist/esm/props/leading-trim.prop.js +1 -1
- package/dist/esm/props/margin.props.js +1 -1
- package/dist/esm/props/padding.props.js +1 -1
- package/dist/esm/props/prop-def.js +1 -1
- package/dist/esm/props/radius.prop.js +1 -1
- package/dist/esm/props/shadow.props.js +1 -1
- package/dist/esm/props/text-align.prop.js +1 -1
- package/dist/esm/props/text-wrap.prop.js +1 -1
- package/dist/esm/props/truncate.prop.js +1 -1
- package/dist/esm/props/weight.prop.js +1 -1
- package/dist/esm/props/width.props.js +1 -1
- package/fonts.css +2 -0
- package/package.json +36 -36
- package/schemas/base-button.json +66 -60
- package/schemas/button.json +80 -74
- package/schemas/icon-button.json +78 -72
- package/schemas/index.json +390 -360
- package/schemas/toggle-button.json +84 -78
- package/schemas/toggle-icon-button.json +82 -76
- package/src/components/_internal/base-card.css +5 -5
- package/src/components/_internal/base-checkbox.css +17 -3
- package/src/components/_internal/base-dialog.css +4 -4
- package/src/components/_internal/base-menu.css +68 -143
- package/src/components/_internal/base-menu.utils.tsx +144 -0
- package/src/components/_internal/dropdown-menu-drill-down.tsx +281 -183
- package/src/components/_internal/menu-context.tsx +24 -15
- package/src/components/accordion.css +5 -5
- package/src/components/callout.css +5 -5
- package/src/components/chatbar.css +100 -32
- package/src/components/chatbar.tsx +739 -735
- package/src/components/checkbox-cards.css +30 -0
- package/src/components/combobox.css +62 -115
- package/src/components/combobox.props.tsx +14 -0
- package/src/components/combobox.tsx +440 -212
- package/src/components/context-menu.props.tsx +4 -1
- package/src/components/context-menu.tsx +108 -62
- package/src/components/dropdown-menu.css +41 -121
- package/src/components/dropdown-menu.tsx +430 -275
- package/src/components/hover-card.css +3 -3
- package/src/components/popover.css +4 -4
- package/src/components/radio-cards.css +30 -0
- package/src/components/schemas/shell.schema.ts +11 -18
- package/src/components/scroll-area.css +2 -3
- package/src/components/select.css +2 -2
- package/src/components/shell.css +1 -1
- package/src/components/table.css +5 -5
- package/src/components/theme.props.tsx +1 -1
- package/src/components/tooltip.css +1 -1
- package/src/components/virtual-menu.tsx +12 -8
- package/src/hooks/use-breakpoint.ts +19 -3
- package/src/styles/fonts.css +6 -1
- package/src/styles/tokens/font-family.css +13 -5
- package/src/styles/tokens/radius.css +47 -4
- package/styles.css +801 -784
- package/tokens/base.css +19 -2
- package/tokens.css +19 -2
- package/dist/esm/chunk-3XT5P2HO.js +0 -2
- package/dist/esm/chunk-4XJY6FIK.js +0 -2
- package/dist/esm/chunk-4Z33XHOK.js +0 -2
- package/dist/esm/chunk-4Z33XHOK.js.map +0 -7
- package/dist/esm/chunk-E2Z5IA2P.js +0 -2
- package/dist/esm/chunk-E2Z5IA2P.js.map +0 -7
- package/dist/esm/chunk-HVWEPVBH.js +0 -2
- package/dist/esm/chunk-HVWEPVBH.js.map +0 -7
- package/dist/esm/chunk-KKBP2CRH.js +0 -2
- package/dist/esm/chunk-KKBP2CRH.js.map +0 -7
- package/dist/esm/chunk-MOR3NSXQ.js +0 -2
- package/dist/esm/chunk-MOR3NSXQ.js.map +0 -7
- package/dist/esm/chunk-QCNUTT4R.js +0 -2
- package/dist/esm/chunk-QCNUTT4R.js.map +0 -7
- package/dist/esm/chunk-UGD7Z3L4.js +0 -2
- package/dist/esm/chunk-UGD7Z3L4.js.map +0 -7
- package/dist/esm/chunk-YEB3H7QN.js +0 -2
- package/dist/esm/chunk-YEB3H7QN.js.map +0 -7
- package/dist/esm/chunk-ZY6SQWHT.js +0 -2
- package/dist/esm/chunk-ZY6SQWHT.js.map +0 -7
- /package/dist/esm/{chunk-P7HYVJSU.js.map → chunk-2TIADHPD.js.map} +0 -0
- /package/dist/esm/{chunk-RMKXWYOV.js.map → chunk-3OBXZUFJ.js.map} +0 -0
- /package/dist/esm/{chunk-S2HA3W3V.js.map → chunk-3R7XMRV5.js.map} +0 -0
- /package/dist/esm/{chunk-S56YSRHP.js.map → chunk-56TS6OKQ.js.map} +0 -0
- /package/dist/esm/{chunk-2FYJTSOP.js.map → chunk-5BYHEYO6.js.map} +0 -0
- /package/dist/esm/{chunk-B24BDVG2.js.map → chunk-5MNBQROW.js.map} +0 -0
- /package/dist/esm/{chunk-W7N7V5YD.js.map → chunk-7ESHXHHO.js.map} +0 -0
- /package/dist/esm/{chunk-CRWYCLTE.js.map → chunk-ABSKRHVM.js.map} +0 -0
- /package/dist/esm/{chunk-3MWWP4MW.js.map → chunk-BBJUB52V.js.map} +0 -0
- /package/dist/esm/{chunk-PTLFMWCN.js.map → chunk-CQNPBTM5.js.map} +0 -0
- /package/dist/esm/{chunk-GJSGKE7B.js.map → chunk-CTA5ODAO.js.map} +0 -0
- /package/dist/esm/{chunk-GWXVETMF.js.map → chunk-DCAZPMOB.js.map} +0 -0
- /package/dist/esm/{chunk-PLWXTEVE.js.map → chunk-DMJJM5IS.js.map} +0 -0
- /package/dist/esm/{chunk-A2RZGGMY.js.map → chunk-DQAUX5ZL.js.map} +0 -0
- /package/dist/esm/{chunk-YUP6EICB.js.map → chunk-DXL6V2A5.js.map} +0 -0
- /package/dist/esm/{chunk-XMRIRFM7.js.map → chunk-FG7XM7KJ.js.map} +0 -0
- /package/dist/esm/{chunk-IKSN4RNB.js.map → chunk-FIB3XATL.js.map} +0 -0
- /package/dist/esm/{chunk-374ZYJUP.js.map → chunk-HBR42MIX.js.map} +0 -0
- /package/dist/esm/{chunk-2UPAYDKR.js.map → chunk-HIKVMKYQ.js.map} +0 -0
- /package/dist/esm/{chunk-VX6ARMWP.js.map → chunk-HSAG7C53.js.map} +0 -0
- /package/dist/esm/{chunk-OSRJRBKP.js.map → chunk-HW324FK3.js.map} +0 -0
- /package/dist/esm/{chunk-DNHUQLXO.js.map → chunk-JBO5YOUM.js.map} +0 -0
- /package/dist/esm/{chunk-HF5WY5YE.js.map → chunk-JGLAE5G7.js.map} +0 -0
- /package/dist/esm/{chunk-4YFJWXL2.js.map → chunk-JJKQ7CGI.js.map} +0 -0
- /package/dist/esm/{chunk-CWRNW44F.js.map → chunk-L6PVH3RM.js.map} +0 -0
- /package/dist/esm/{chunk-MK2R6DAU.js.map → chunk-LAOMR7SE.js.map} +0 -0
- /package/dist/esm/{chunk-FHOCUZDR.js.map → chunk-NIQT45PJ.js.map} +0 -0
- /package/dist/esm/{chunk-3XT5P2HO.js.map → chunk-OS3FCYZY.js.map} +0 -0
- /package/dist/esm/{chunk-7QDTSBJF.js.map → chunk-OYF6YXH7.js.map} +0 -0
- /package/dist/esm/{chunk-WFMYNZXZ.js.map → chunk-P5OSU4NX.js.map} +0 -0
- /package/dist/esm/{chunk-QEOAXJLN.js.map → chunk-PTS6QYQW.js.map} +0 -0
- /package/dist/esm/{chunk-CVWCKOHO.js.map → chunk-RLPKKCBL.js.map} +0 -0
- /package/dist/esm/{chunk-LKAK5GXF.js.map → chunk-SPIU5JYC.js.map} +0 -0
- /package/dist/esm/{chunk-4AQTUBVP.js.map → chunk-T4UHUQFJ.js.map} +0 -0
- /package/dist/esm/{chunk-K6QZMNCD.js.map → chunk-TS623UPD.js.map} +0 -0
- /package/dist/esm/{chunk-YV2KYHGR.js.map → chunk-UBOOUDS4.js.map} +0 -0
- /package/dist/esm/{chunk-D6B7IMZU.js.map → chunk-UFI53QUC.js.map} +0 -0
- /package/dist/esm/{chunk-AU3D6F42.js.map → chunk-UIRSGVJG.js.map} +0 -0
- /package/dist/esm/{chunk-FXUUI6Z2.js.map → chunk-UUUZXUIP.js.map} +0 -0
- /package/dist/esm/{chunk-25WZA7ZU.js.map → chunk-VA4CTVQL.js.map} +0 -0
- /package/dist/esm/{chunk-TOLLPRMM.js.map → chunk-VNPNEJI6.js.map} +0 -0
- /package/dist/esm/{chunk-6IGTK4JE.js.map → chunk-YMUGKYGW.js.map} +0 -0
- /package/dist/esm/{chunk-M24UXMOQ.js.map → chunk-ZXZOH63L.js.map} +0 -0
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/components/chatbar.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nimport classNames from 'classnames';\nimport { LazyMotion, domAnimation, m } from 'motion/react';\n\nimport { IconButton, type IconButtonProps } from './icon-button.js';\nimport { CloseIcon, FileTextIcon } from './icons.js';\nimport { Flex } from './flex.js';\n\nimport { ScrollArea } from './scroll-area.js';\nimport { Slot } from './slot.js';\nimport { Text } from './text.js';\nimport { useDropzone } from 'react-dropzone';\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\n\n// Avoid SSR warnings by using an isomorphic layout effect\nconst useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\n\ntype ExpandOn = 'none' | 'focus' | 'overflow' | 'both';\ntype SendMode = 'always' | 'whenDirty' | 'never';\n\n// Attachments\n/** Status flag for attachment lifecycle. */\ntype AttachmentStatus = 'idle' | 'uploading' | 'error' | 'done';\n/**\n * Attachment data model used by Chatbar.\n * - `file` exposes the original File object for uploads and processing.\n * - `url` is an object URL used for image previews and is revoked on removal.\n */\ninterface ChatbarAttachment {\n id: string;\n name: string;\n size: number;\n type: string;\n /** Original File object for uploads and processing */\n file: File;\n url?: string;\n status?: AttachmentStatus;\n progress?: number;\n meta?: Record<string, unknown>;\n}\n\ninterface ChatbarContextValue {\n open: boolean;\n setOpen(next: boolean): void;\n isOpenControlled: boolean;\n\n value: string;\n setValue(next: string): void;\n isValueControlled: boolean;\n\n size: '1' | '2' | '3';\n expandOn: ExpandOn;\n minLines: number;\n maxLines: number;\n sendMode: SendMode;\n disabled?: boolean;\n readOnly?: boolean;\n\n // Submit returns both message and attachments\n onSubmit?: (payload: { value: string; attachments: ChatbarAttachment[] }) => void;\n\n rootRef: React.RefObject<HTMLDivElement | null>;\n textareaRef: React.RefObject<HTMLTextAreaElement | null>;\n\n // Attachments state\n attachments: ChatbarAttachment[];\n setAttachments(next: ChatbarAttachment[]): void;\n isAttachmentsControlled: boolean;\n\n // Config\n accept?: string | string[];\n multiple: boolean;\n maxAttachments?: number;\n maxFileSize?: number;\n paste: boolean;\n pasteAccept?: string | string[];\n clearOnSubmit: boolean;\n\n // Dropzone\n dropzone: boolean;\n\n // Events\n onAttachmentReject?: (rejections: { file: File; reason: 'type' | 'size' | 'count' }[]) => void;\n\n // Helpers\n appendFiles(files: File[]): void;\n appendFilesFromPaste(files: File[]): void;\n\n // Guards\n fileDialogOpenRef: React.MutableRefObject<boolean>;\n}\n\nconst ChatbarContext = React.createContext<ChatbarContextValue | null>(null);\nconst useChatbarContext = () => {\n const ctx = React.useContext(ChatbarContext);\n if (!ctx) throw new Error('Chatbar context not found. Wrap parts in <Chatbar.Root>.');\n return ctx;\n};\n\n/**\n * Chatbar container and state provider.\n *\n * Value & Open\n * - Supports controlled/uncontrolled `value` and `open`.\n *\n * Attachments\n * - Controlled/uncontrolled attachments with client-side filtering.\n * - Filters by `accept`/`pasteAccept`, `maxAttachments`, and `maxFileSize`.\n * - Rejections are reported via `onAttachmentReject`.\n *\n * Submit\n * - `onSubmit({ value, attachments })` emits both message and attachments.\n * - `clearOnSubmit` clears message and attachments by default.\n */\ninterface ChatbarRootBaseProps {\n value?: string;\n defaultValue?: string;\n onValueChange?: (value: string) => void;\n\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n\n expandOn?: ExpandOn;\n\n /** Minimum number of lines in compact state (default: 1) */\n minLines?: number;\n /** Maximum number of lines before scrolling (default: 6) */\n maxLines?: number;\n\n sendMode?: SendMode;\n\n disabled?: boolean;\n readOnly?: boolean;\n\n /** Combined submit payload */\n onSubmit?: (payload: { value: string; attachments: ChatbarAttachment[] }) => void;\n\n size?: '1' | '2' | '3';\n variant?: 'surface' | 'outline' | 'classic' | 'ghost' | 'soft';\n /** Accent color for the control (matches TextArea) */\n color?: string;\n /** Optional radius override (matches TextArea) */\n radius?: string | number;\n /** Panel/material translucency flags (matches TextArea) */\n panelBackground?: 'solid' | 'translucent';\n material?: 'solid' | 'translucent';\n\n width?: React.CSSProperties['width'];\n maxWidth?: React.CSSProperties['maxWidth'];\n asChild?: boolean;\n\n // Attachments API\n attachments?: ChatbarAttachment[];\n defaultAttachments?: ChatbarAttachment[];\n onAttachmentsChange?: (attachments: ChatbarAttachment[]) => void;\n accept?: string | string[];\n multiple?: boolean;\n maxAttachments?: number;\n maxFileSize?: number;\n paste?: boolean;\n pasteAccept?: string | string[];\n clearOnSubmit?: boolean;\n onAttachmentReject?: (rejections: { file: File; reason: 'type' | 'size' | 'count' }[]) => void;\n\n /**\n * Enables drag-and-drop file uploads when true.\n *\n * When enabled:\n * - Files can be dropped anywhere on the chatbar\n * - Same validation rules apply (accept, maxFileSize, maxAttachments)\n * - Visual feedback shows during drag operations\n * - Rejected files trigger onAttachmentReject\n *\n * @default true\n */\n dropzone?: boolean;\n\n /**\n * Optional API ref to control Chatbar imperatively without relying on DOM refs.\n * Provides methods to focus the textarea and open the file picker.\n */\n apiRef?: React.Ref<ChatbarApi>;\n}\n\ntype RootElement = React.ElementRef<'div'>;\n/** Imperative API for Chatbar.Root */\nexport interface ChatbarApi {\n /** Focus the textarea input */\n focusTextarea: () => void;\n /** Open the file picker dialog (respects accept/multiple) */\n openFilePicker: () => void;\n}\n/**\n * Chatbar container and state provider.\n *\n * Behavior\n * - Supports controlled and uncontrolled `value` and `open` states via props.\n * - Provides context to subcomponents like `Textarea`, `Row`, and `Send`.\n * - Exposes `data-state`, `data-disabled`, and `data-readonly` attributes for styling.\n * - Sets `aria-expanded` to reflect open/closed state for assistive technologies.\n *\n * Attachments\n * - Controlled/uncontrolled attachments with client-side filtering.\n * - Filters by `accept`/`pasteAccept`, `maxAttachments`, and `maxFileSize`.\n * - Rejections are reported via `onAttachmentReject`.\n * - Paste-to-attach: when `paste` is enabled, pasting files adds attachments.\n *\n * Dropzone\n * - When `dropzone` is true, enables drag-and-drop file uploads.\n * - Files are validated using the same rules as paste and file picker.\n * - Visual feedback via `data-drop-active` attribute during drag operations.\n * - Rejected files trigger `onAttachmentReject` with appropriate reasons.\n *\n * Submit\n * - `onSubmit` receives both message text and attachments array.\n * - `clearOnSubmit` controls whether attachments are cleared after submission.\n *\n * Accessibility\n * - Consumers should label the `Textarea` via `aria-label`/`aria-labelledby`.\n * - `aria-expanded` on the root reflects the disclosure state of the input area.\n * - Dropzone provides proper ARIA attributes for drag and drop operations.\n */\ninterface RootProps extends ComponentPropsWithout<'div', RemovedProps | 'onSubmit'>, ChatbarRootBaseProps {}\n\nconst Root = React.forwardRef<RootElement, RootProps>((props, forwardedRef) => {\n const {\n className,\n style,\n children,\n value: valueProp,\n defaultValue = '',\n onValueChange: onValueChangeProp,\n open: openProp,\n defaultOpen = false,\n onOpenChange: onOpenChangeProp,\n expandOn = 'both',\n minLines = 3,\n maxLines = 6,\n sendMode = 'whenDirty',\n disabled,\n readOnly,\n onSubmit,\n size = '2',\n variant,\n color,\n radius,\n panelBackground,\n material,\n width,\n maxWidth,\n asChild,\n attachments: attachmentsProp,\n defaultAttachments = [],\n onAttachmentsChange,\n accept,\n multiple = true,\n maxAttachments,\n maxFileSize,\n paste = true,\n pasteAccept,\n clearOnSubmit = true,\n onAttachmentReject,\n dropzone = true,\n apiRef,\n ...divProps\n } = props;\n const effectiveMaterial = material || panelBackground;\n\n const isValueControlled = valueProp != null;\n const [valueUncontrolled, setValueUncontrolled] = React.useState<string>(defaultValue);\n const value = isValueControlled ? (valueProp as string) : valueUncontrolled;\n\n const isOpenControlled = openProp != null;\n const [openUncontrolled, setOpenUncontrolled] = React.useState<boolean>(defaultOpen);\n const open = isOpenControlled ? (openProp as boolean) : openUncontrolled;\n\n const rootRef = React.useRef<HTMLDivElement>(null);\n const textareaRef = React.useRef<HTMLTextAreaElement>(null);\n const fileDialogOpenRef = React.useRef<boolean>(false);\n\n // Attachments state\n // Treat `attachments` as controlled if the prop is provided, even if its value is `undefined`.\n // This avoids switching between controlled and uncontrolled when a consumer sets\n // `attachments={undefined}` to clear attachments. In that case we normalize to an empty array.\n const isAttachmentsControlled = 'attachments' in props;\n const [attachmentsUncontrolled, setAttachmentsUncontrolled] = React.useState<ChatbarAttachment[]>(defaultAttachments);\n const attachments = React.useMemo(\n () => (isAttachmentsControlled ? ((attachmentsProp ?? []) as ChatbarAttachment[]) : attachmentsUncontrolled),\n [isAttachmentsControlled, attachmentsProp, attachmentsUncontrolled],\n );\n\n // Track generated object URLs for cleanup\n const generatedUrlSetRef = React.useRef<Set<string>>(new Set());\n\n const toArray = (val: string | string[] | undefined) => (Array.isArray(val) ? val : typeof val === 'string' ? val.split(',').map((s) => s.trim()) : []);\n\n const accepts = toArray(accept);\n const pasteAccepts = toArray(pasteAccept).length > 0 ? toArray(pasteAccept) : accepts;\n\n const matchesAccept = (file: File, patterns: string[]) => {\n if (patterns.length === 0) return true;\n const mime = file.type.toLowerCase();\n const name = file.name.toLowerCase();\n for (const patRaw of patterns) {\n const pat = patRaw.toLowerCase();\n if (pat.includes('/')) {\n const [type, subtype] = pat.split('/');\n const [fmType, fmSubtype] = mime.split('/');\n if (type === '*' || (type === fmType && (subtype === '*' || subtype === fmSubtype))) return true;\n } else if (pat.startsWith('.')) {\n if (name.endsWith(pat)) return true;\n }\n }\n return false;\n };\n\n // Refs for values that change frequently, read inside stable callbacks\n const attachmentsRef = React.useRef(attachments);\n attachmentsRef.current = attachments;\n const acceptsRef = React.useRef(accepts);\n acceptsRef.current = accepts;\n const pasteAcceptsRef = React.useRef(pasteAccepts);\n pasteAcceptsRef.current = pasteAccepts;\n const maxAttachmentsRef = React.useRef(maxAttachments);\n maxAttachmentsRef.current = maxAttachments;\n const maxFileSizeRef = React.useRef(maxFileSize);\n maxFileSizeRef.current = maxFileSize;\n const onAttachmentRejectRef = React.useRef(onAttachmentReject);\n onAttachmentRejectRef.current = onAttachmentReject;\n const onAttachmentsChangeRef = React.useRef(onAttachmentsChange);\n onAttachmentsChangeRef.current = onAttachmentsChange;\n const onOpenChangePropRef = React.useRef(onOpenChangeProp);\n onOpenChangePropRef.current = onOpenChangeProp;\n\n const appendFiles = React.useCallback((files: File[]) => {\n const currentAttachments = attachmentsRef.current;\n const currentAccepts = acceptsRef.current;\n const currentMaxAttachments = maxAttachmentsRef.current;\n const currentMaxFileSize = maxFileSizeRef.current;\n\n const next: ChatbarAttachment[] = [];\n const rejected: { file: File; reason: 'type' | 'size' | 'count' }[] = [];\n const remainingSlots = typeof currentMaxAttachments === 'number' ? Math.max(currentMaxAttachments - currentAttachments.length, 0) : Infinity;\n\n for (const file of files) {\n if (next.length >= remainingSlots) {\n rejected.push({ file, reason: 'count' });\n continue;\n }\n if (typeof currentMaxFileSize === 'number' && file.size > currentMaxFileSize) {\n rejected.push({ file, reason: 'size' });\n continue;\n }\n if (!matchesAccept(file, currentAccepts)) {\n rejected.push({ file, reason: 'type' });\n continue;\n }\n const id = `${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;\n const looksLikeImageByExt = /\\.(png|jpe?g|gif|webp|bmp|svg)$/i.test(file.name);\n const isImageType = (file.type || '').toLowerCase().startsWith('image/');\n const url = isImageType || looksLikeImageByExt ? URL.createObjectURL(file) : undefined;\n if (url) generatedUrlSetRef.current.add(url);\n next.push({ id, name: file.name, size: file.size, type: file.type, file, url, status: 'idle' });\n }\n\n if (next.length > 0) {\n const merged = currentAttachments.concat(next);\n if (!isAttachmentsControlled) setAttachmentsUncontrolled(merged);\n onAttachmentsChangeRef.current?.(merged);\n if (!isOpenControlled) setOpenUncontrolled(true);\n onOpenChangePropRef.current?.(true);\n }\n if (rejected.length > 0) onAttachmentRejectRef.current?.(rejected);\n }, [isAttachmentsControlled, isOpenControlled]);\n\n const appendFilesFromPaste = React.useCallback((files: File[]) => {\n const currentAccepts = acceptsRef.current;\n const currentPasteAccepts = pasteAcceptsRef.current;\n const currentMaxAttachments = maxAttachmentsRef.current;\n const currentMaxFileSize = maxFileSizeRef.current;\n const currentAttachments = attachmentsRef.current;\n\n const patterns = currentPasteAccepts.length > 0 ? currentPasteAccepts : currentAccepts;\n const acceptedFiles: File[] = [];\n const rejected: { file: File; reason: 'type' | 'size' | 'count' }[] = [];\n const remainingSlots = typeof currentMaxAttachments === 'number' ? Math.max(currentMaxAttachments - currentAttachments.length, 0) : Infinity;\n\n for (const file of files) {\n if (acceptedFiles.length >= remainingSlots) {\n rejected.push({ file, reason: 'count' });\n continue;\n }\n if (typeof currentMaxFileSize === 'number' && file.size > currentMaxFileSize) {\n rejected.push({ file, reason: 'size' });\n continue;\n }\n if (!matchesAccept(file, patterns)) {\n rejected.push({ file, reason: 'type' });\n continue;\n }\n acceptedFiles.push(file);\n }\n if (acceptedFiles.length > 0) appendFiles(acceptedFiles);\n if (rejected.length > 0) onAttachmentRejectRef.current?.(rejected);\n }, [appendFiles]);\n\n // Revoke object URLs that are no longer referenced by current attachments\n React.useEffect(() => {\n const currentUrls = new Set(attachments.map((a) => a.url).filter(Boolean) as string[]);\n for (const url of Array.from(generatedUrlSetRef.current)) {\n if (!currentUrls.has(url)) {\n URL.revokeObjectURL(url);\n generatedUrlSetRef.current.delete(url);\n }\n }\n }, [attachments]);\n\n // Revoke any remaining generated URLs on unmount\n React.useEffect(() => {\n const urlSet = generatedUrlSetRef.current;\n return () => {\n for (const url of Array.from(urlSet)) {\n URL.revokeObjectURL(url);\n }\n urlSet.clear();\n };\n }, []);\n\n const Comp = asChild ? Slot : ('div' as any);\n\n // Stable context setters \u2014 avoids new function references on every render\n const handleSetOpen = React.useCallback(\n (next: boolean) => {\n if (!isOpenControlled) setOpenUncontrolled(next);\n onOpenChangeProp?.(next);\n },\n [isOpenControlled, onOpenChangeProp],\n );\n const handleSetValue = React.useCallback(\n (next: string) => {\n if (!isValueControlled) setValueUncontrolled(next);\n onValueChangeProp?.(next);\n },\n [isValueControlled, onValueChangeProp],\n );\n const handleSetAttachments = React.useCallback(\n (next: ChatbarAttachment[]) => {\n if (!isAttachmentsControlled) setAttachmentsUncontrolled(next);\n onAttachmentsChange?.(next);\n },\n [isAttachmentsControlled, onAttachmentsChange],\n );\n\n const handleBlurCapture = React.useCallback(\n (event: React.FocusEvent) => {\n const nextTarget = event.relatedTarget as Node | null;\n const rootEl = rootRef.current;\n if (!rootEl) return;\n // If focus remains within root, ignore\n if (nextTarget && rootEl.contains(nextTarget)) return;\n // If native file dialog is open, avoid collapsing on blur\n if (fileDialogOpenRef.current) return;\n // Collapse when leaving the root if the value is empty\n // Only collapse when both message and attachments are empty\n if ((value?.trim?.() ?? '').length === 0 && attachments.length === 0) {\n if (!isOpenControlled) setOpenUncontrolled(false);\n onOpenChangeProp?.(false);\n }\n },\n [isOpenControlled, onOpenChangeProp, value, attachments],\n );\n\n // Dropzone functionality\n const {\n getRootProps,\n getInputProps,\n isDragActive,\n open: openFileDialog,\n } = useDropzone({\n onDrop: (acceptedFiles, rejectedFiles) => {\n if (acceptedFiles.length > 0) {\n appendFiles(acceptedFiles);\n }\n if (rejectedFiles.length > 0 && onAttachmentReject) {\n const rejections = rejectedFiles.map(({ file, errors }) => {\n const reason = errors[0]?.code === 'file-too-large' ? 'size' : errors[0]?.code === 'file-invalid-type' ? 'type' : 'count';\n return { file, reason: reason as 'type' | 'size' | 'count' };\n });\n onAttachmentReject(rejections);\n }\n },\n accept:\n accepts.length > 0\n ? accepts.reduce(\n (acc, pattern) => {\n if (pattern.includes('/')) {\n // MIME type pattern\n acc[pattern] = [];\n } else if (pattern.startsWith('.')) {\n // File extension pattern\n acc[pattern] = [];\n }\n return acc;\n },\n {} as Record<string, string[]>,\n )\n : undefined,\n multiple,\n maxSize: maxFileSize,\n noClick: true,\n noKeyboard: true,\n disabled: !dropzone || disabled,\n });\n\n // Expose imperative API via apiRef (non-breaking; forwardedRef still receives the DOM node)\n React.useImperativeHandle(\n apiRef,\n () => ({\n focusTextarea: () => textareaRef.current?.focus({ preventScroll: true }),\n openFilePicker: () => {\n // Guard against blur-collapse while native dialog is open\n fileDialogOpenRef.current = true;\n openFileDialog();\n },\n }),\n [openFileDialog],\n );\n\n // Click-to-focus: focus textarea when clicking non-interactive areas inside the container\n const isInteractiveTarget = React.useCallback((target: EventTarget | null) => {\n if (!(target instanceof Element)) return false;\n const el = target as Element;\n if (el.closest('.rt-ChatbarDropOverlay')) return true;\n return !!el.closest('button, [role=\"button\"], a[href], input, textarea, select, [contenteditable], [tabindex]:not([tabindex=\"-1\"])');\n }, []);\n\n const handleContainerPointerDown = React.useCallback(\n (event: React.PointerEvent) => {\n if (disabled) return;\n if (isInteractiveTarget(event.target)) return;\n if (event.pointerType === 'mouse' && event.button !== 0) return;\n event.preventDefault();\n textareaRef.current?.focus({ preventScroll: true });\n },\n [disabled, isInteractiveTarget, textareaRef],\n );\n\n // Clicking the label-wrapped Card will naturally focus the nested textarea.\n\n return (\n <ChatbarContext.Provider\n value={React.useMemo<ChatbarContextValue>(\n () => ({\n open,\n setOpen: handleSetOpen,\n isOpenControlled,\n value,\n setValue: handleSetValue,\n isValueControlled,\n size,\n expandOn,\n minLines,\n maxLines,\n sendMode,\n disabled,\n readOnly,\n onSubmit,\n rootRef,\n textareaRef,\n attachments,\n setAttachments: handleSetAttachments,\n isAttachmentsControlled,\n accept,\n multiple,\n maxAttachments,\n maxFileSize,\n paste,\n pasteAccept,\n clearOnSubmit,\n onAttachmentReject,\n dropzone,\n appendFiles,\n appendFilesFromPaste,\n fileDialogOpenRef,\n }),\n [\n open, handleSetOpen, isOpenControlled,\n value, handleSetValue, isValueControlled,\n size, expandOn, minLines, maxLines, sendMode,\n disabled, readOnly, onSubmit,\n attachments, handleSetAttachments, isAttachmentsControlled,\n accept, multiple, maxAttachments, maxFileSize,\n paste, pasteAccept, clearOnSubmit, onAttachmentReject,\n dropzone, appendFiles, appendFilesFromPaste,\n ],\n )}\n >\n <LazyMotion features={domAnimation}>\n <Comp\n {...divProps}\n ref={(node: HTMLDivElement) => {\n if (typeof forwardedRef === 'function') forwardedRef(node);\n else if (forwardedRef) (forwardedRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n (rootRef as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }}\n className={classNames('rt-ChatbarRoot', `rt-r-size-${size}`, className)}\n style={{ position: 'relative', width, maxWidth, ...style }}\n data-state={open ? 'open' : 'closed'}\n data-disabled={disabled ? '' : undefined}\n data-readonly={readOnly ? '' : undefined}\n data-drop-active={dropzone && isDragActive ? '' : undefined}\n data-accent-color={color}\n data-radius={radius as any}\n data-panel-background={effectiveMaterial}\n data-material={effectiveMaterial}\n aria-expanded={open}\n onBlurCapture={handleBlurCapture}\n >\n {dropzone && <input {...getInputProps()} />}\n <div {...(dropzone ? getRootProps() : {})} style={{ width: '100%', height: '100%' }} onPointerDown={handleContainerPointerDown}>\n <m.div\n className={classNames('rt-ChatbarBox', `rt-variant-${variant ?? 'surface'}`)}\n style={{ position: 'relative' }}\n data-accent-color={color}\n data-radius={radius as any}\n data-panel-background={effectiveMaterial}\n data-material={effectiveMaterial}\n layout\n transition={{\n layout: {\n type: 'spring',\n visualDuration: 0.15,\n bounce: 0.1,\n },\n }}\n >\n <m.div\n className=\"rt-ChatbarGrid\"\n layout=\"position\"\n transition={{\n layout: {\n type: 'spring',\n visualDuration: 0.15,\n bounce: 0.1,\n },\n }}\n >\n {children}\n </m.div>\n {dropzone && isDragActive && (\n <div className=\"rt-ChatbarDropOverlay\">\n <div className=\"rt-ChatbarDropContent\">\n <Text color=\"gray\" size={size} weight=\"medium\">\n Drop files here to attach\n </Text>\n </div>\n </div>\n )}\n </m.div>\n </div>\n </Comp>\n </LazyMotion>\n </ChatbarContext.Provider>\n );\n});\nRoot.displayName = 'Chatbar.Root';\n\n/**\n * Multi-line text input for Chatbar.\n * - Uses onChange to control value and avoid duplicate updates.\n * - Auto-resizes between minLines and maxLines.\n * - Expands on focus/overflow per `expandOn`.\n * - Paste-to-attach: when `paste` is enabled on Root, pasting files adds attachments.\n * - Provide `aria-label` or `aria-labelledby` for an accessible name.\n */\ninterface TextareaProps extends Omit<React.ComponentPropsWithoutRef<'textarea'>, 'size'> {\n asChild?: boolean;\n /**\n * Handler for paste events. This is forwarded to the underlying <textarea>.\n */\n onPaste?: React.ClipboardEventHandler<HTMLTextAreaElement>;\n /**\n * When true, pressing Enter submits via onSend (Shift+Enter inserts newline).\n * Defaults to false.\n */\n submitOnEnter?: boolean;\n}\n\n/**\n * Chatbar multi-line text input.\n *\n * Behavior\n * - Controls the Chatbar value via React onChange. We intentionally do not\n * update state in onInput to avoid duplicate updates per keystroke.\n * - Auto-resizes between minLines and maxLines using layout measurements.\n * - When expandOn is `overflow` or `both`, the Chatbar opens as soon as the\n * content exceeds the compact height.\n * - Height recalculations occur on change, paste, and whenever `value` or `open`\n * changes via an isomorphic layout effect to avoid SSR warnings.\n *\n * Accessibility\n * - Consumers should provide labeling via aria-label or aria-labelledby\n * on this component, as no implicit label is rendered.\n */\nconst Textarea = React.forwardRef<HTMLTextAreaElement, TextareaProps>((props, forwardedRef) => {\n const { className, style, asChild, onFocus, onInput, onChange, onPaste, onKeyDown, submitOnEnter = false, rows, ...textareaProps } = props;\n const ctx = useChatbarContext();\n const { open, minLines, maxLines, expandOn, disabled, readOnly, setOpen, setValue, textareaRef, value, isValueControlled, sendMode, paste, appendFilesFromPaste, size } = ctx;\n\n // Cached metrics to avoid repeated getComputedStyle calls\n const lineHeightRef = React.useRef<number>(0);\n const paddingRef = React.useRef<number>(0);\n const compactHeightRef = React.useRef<number>(0);\n\n const recomputeMetrics = React.useCallback(() => {\n const el = textareaRef.current;\n if (!el) return;\n const computedStyle = window.getComputedStyle(el);\n const lineHeight = parseFloat(computedStyle.lineHeight) || 20;\n const paddingTop = parseFloat(computedStyle.paddingTop) || 0;\n const paddingBottom = parseFloat(computedStyle.paddingBottom) || 0;\n lineHeightRef.current = lineHeight;\n paddingRef.current = paddingTop + paddingBottom;\n compactHeightRef.current = Math.ceil(1 * lineHeight) + paddingTop + paddingBottom;\n }, [textareaRef]);\n\n // Auto-resize logic - optimized for fixed widths\n const updateHeight = React.useCallback(\n (forceOpen?: boolean) => {\n const textarea = textareaRef.current;\n if (!textarea) return;\n\n textarea.style.height = 'auto';\n\n if (lineHeightRef.current === 0) {\n recomputeMetrics();\n }\n const lineHeight = lineHeightRef.current;\n const padding = paddingRef.current;\n\n const isOpen = forceOpen ?? open;\n const effectiveMinLines = isOpen ? minLines : 1;\n const effectiveMaxLines = isOpen ? maxLines : 1;\n\n const minHeight = Math.ceil(effectiveMinLines * lineHeight) + padding;\n const maxHeight = Math.ceil(effectiveMaxLines * lineHeight) + padding;\n\n const contentHeight = Math.max(textarea.scrollHeight, minHeight);\n const finalHeight = Math.min(contentHeight, maxHeight);\n\n textarea.style.height = `${finalHeight}px`;\n\n if (contentHeight > maxHeight) {\n textarea.style.overflowY = 'auto';\n textarea.style.maxHeight = `${maxHeight}px`;\n } else {\n textarea.style.overflowY = 'hidden';\n textarea.style.maxHeight = 'none';\n }\n },\n [open, minLines, maxLines, textareaRef, recomputeMetrics],\n );\n\n // Update height when value or open state changes\n useIsomorphicLayoutEffect(() => {\n updateHeight();\n }, [updateHeight, value, open]);\n\n // Auto-open on external value changes when content overflows one line\n useIsomorphicLayoutEffect(() => {\n if (!(expandOn === 'overflow' || expandOn === 'both')) return;\n if (open) return;\n const el = textareaRef.current;\n if (!el) return;\n // Measure overflow against compact (1-line) height\n el.style.height = 'auto';\n if (compactHeightRef.current === 0) {\n recomputeMetrics();\n }\n const shouldExpand = el.scrollHeight > compactHeightRef.current + 1;\n if (shouldExpand) {\n setOpen(true);\n // Immediately size for open state\n updateHeight(true);\n requestAnimationFrame(() => updateHeight(true));\n }\n }, [value, expandOn, open, setOpen, textareaRef, recomputeMetrics, updateHeight]);\n\n // Recompute metrics on mount and when size changes may affect typography\n useIsomorphicLayoutEffect(() => {\n recomputeMetrics();\n updateHeight();\n }, [recomputeMetrics, updateHeight, size]);\n\n // Observe responsive changes that alter line-height\n React.useEffect(() => {\n const el = textareaRef.current;\n if (!el || typeof ResizeObserver === 'undefined') return;\n let prevLineHeight = lineHeightRef.current;\n const ro = new ResizeObserver(() => {\n const computedStyle = window.getComputedStyle(el);\n const lh = parseFloat(computedStyle.lineHeight) || 20;\n if (lh !== prevLineHeight) {\n prevLineHeight = lh;\n recomputeMetrics();\n requestAnimationFrame(() => updateHeight());\n }\n });\n ro.observe(el);\n return () => ro.disconnect();\n }, [textareaRef, recomputeMetrics, updateHeight]);\n\n // Dev-only warning if no accessible name is provided\n React.useEffect(() => {\n if (process.env.NODE_ENV === 'production') return;\n const hasLabel = textareaProps['aria-label'] != null || textareaProps['aria-labelledby'] != null;\n if (!hasLabel) {\n console.warn('[Chatbar.Textarea] Provide aria-label or aria-labelledby to ensure the control has an accessible name.');\n }\n // warn only on mount\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Note: No MutationObserver is used because <textarea> value changes are not\n // reflected in DOM text nodes. Height updates are handled by effects and events.\n\n const handleFocus = React.useCallback<React.FocusEventHandler<HTMLTextAreaElement>>(\n (event) => {\n if (disabled || readOnly) return;\n if ((expandOn === 'focus' || expandOn === 'both') && !open) setOpen(true);\n onFocus?.(event);\n },\n [disabled, readOnly, expandOn, open, setOpen, onFocus],\n );\n\n const handleChange = React.useCallback<React.ChangeEventHandler<HTMLTextAreaElement>>(\n (event) => {\n const el = event.currentTarget;\n const nextValue = el.value;\n setValue(nextValue);\n\n if ((expandOn === 'overflow' || expandOn === 'both') && !open) {\n el.style.height = 'auto';\n\n if (compactHeightRef.current === 0) {\n recomputeMetrics();\n }\n const shouldExpand = el.scrollHeight > compactHeightRef.current + 1;\n if (shouldExpand) {\n setOpen(true);\n // Immediately size for open state to avoid 1-line + scrollbar flash\n updateHeight(true);\n requestAnimationFrame(() => updateHeight(true));\n }\n }\n\n // Always recalc after any input\n requestAnimationFrame(() => updateHeight());\n onChange?.(event);\n },\n [expandOn, open, setOpen, setValue, onChange, updateHeight, recomputeMetrics],\n );\n\n const handlePaste = React.useCallback<React.ClipboardEventHandler<HTMLTextAreaElement>>(\n (event) => {\n // Attach files from clipboard if enabled\n if (paste) {\n const items = Array.from(event.clipboardData?.items ?? []);\n const files = items\n .filter((i) => i.kind === 'file')\n .map((i) => i.getAsFile())\n .filter((f): f is File => !!f);\n if (files.length > 0) {\n // Prevent pasting the file name or any text representation when files are present\n event.preventDefault();\n appendFilesFromPaste(files);\n }\n }\n setTimeout(() => {\n // If pasting in compact mode, force sizing as open if content overflowed\n if (!open) {\n updateHeight(true);\n } else {\n updateHeight();\n }\n }, 0);\n onPaste?.(event);\n },\n [paste, open, updateHeight, onPaste, appendFilesFromPaste],\n );\n\n const handleKeyDown = React.useCallback<React.KeyboardEventHandler<HTMLTextAreaElement>>(\n (event) => {\n if (!submitOnEnter) {\n onKeyDown?.(event);\n return;\n }\n if (event.key === 'Enter' && !event.shiftKey && !event.altKey && !event.ctrlKey && !event.metaKey && !event.nativeEvent.isComposing) {\n if (disabled || readOnly) {\n onKeyDown?.(event);\n return;\n }\n if (sendMode === 'never') {\n onKeyDown?.(event);\n return;\n }\n const trimmed = value.trim();\n const hasContent = trimmed.length > 0 || ctx.attachments.length > 0;\n if (sendMode === 'whenDirty' && !hasContent) {\n onKeyDown?.(event);\n return;\n }\n event.preventDefault();\n ctx.onSubmit?.({ value, attachments: ctx.attachments });\n if (ctx.clearOnSubmit) {\n if (!isValueControlled) setValue('');\n ctx.setAttachments([]);\n }\n }\n onKeyDown?.(event);\n },\n [submitOnEnter, disabled, readOnly, sendMode, value, isValueControlled, setValue, ctx, onKeyDown],\n );\n\n const Comp = asChild ? Slot : ('textarea' as any);\n return (\n <m.div \n className={classNames('rt-ChatbarField', 'rt-ChatbarTextarea', className)}\n layout=\"position\"\n transition={{\n layout: {\n type: 'spring',\n visualDuration: 0.15,\n bounce: 0.1,\n },\n }}\n >\n <Comp\n {...textareaProps}\n ref={(node: HTMLTextAreaElement) => {\n if (typeof forwardedRef === 'function') forwardedRef(node);\n else if (forwardedRef) (forwardedRef as React.MutableRefObject<HTMLTextAreaElement | null>).current = node;\n (textareaRef as React.MutableRefObject<HTMLTextAreaElement | null>).current = node;\n }}\n className=\"rt-ChatbarInput\"\n value={value}\n onInput={onInput}\n onChange={handleChange}\n onFocus={handleFocus}\n onPaste={handlePaste}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n readOnly={readOnly}\n rows={open ? minLines : 1}\n spellCheck={textareaProps.spellCheck ?? true}\n autoCorrect={textareaProps.autoCorrect ?? 'on'}\n style={style}\n />\n </m.div>\n );\n});\nTextarea.displayName = 'Chatbar.Textarea';\n\ninterface InlineSlotProps extends Omit<React.ComponentPropsWithoutRef<'div'>, 'children'> {\n asChild?: boolean;\n children?: React.ReactNode;\n}\n\nconst InlineStart = React.forwardRef<HTMLDivElement, InlineSlotProps>((props, forwardedRef) => {\n const { children, asChild, style, className, ...divProps } = props;\n const ctx = useChatbarContext();\n if (ctx.open) return null;\n const Comp = asChild ? Slot : ('div' as any);\n return (\n <Comp {...divProps} ref={forwardedRef} className={classNames('rt-ChatbarInlineStart', className)} style={style}>\n {children}\n </Comp>\n );\n});\nInlineStart.displayName = 'Chatbar.InlineStart';\n\nconst InlineEnd = React.forwardRef<HTMLDivElement, InlineSlotProps>((props, forwardedRef) => {\n const { children, asChild, style, className, ...divProps } = props;\n const ctx = useChatbarContext();\n // Use CSS to hide when open instead of unmounting to avoid layout animation scale\n if (ctx.open) return null;\n const Comp = asChild ? Slot : ('div' as any);\n return (\n <Comp {...divProps} ref={forwardedRef} className={classNames('rt-ChatbarInlineEnd', className)} style={style}>\n {children}\n </Comp>\n );\n});\nInlineEnd.displayName = 'Chatbar.InlineEnd';\n\n/**\n * Renders a horizontally scrollable list of attachments above the inline row.\n * Hidden when empty unless `forceMount`. Override per-item with `renderAttachment`.\n */\ninterface AttachmentsRowProps extends Omit<React.ComponentPropsWithoutRef<'div'>, 'children'> {\n asChild?: boolean;\n forceMount?: boolean;\n /** If provided, custom-render a tile; otherwise default tile is used */\n renderAttachment?: (attachment: ChatbarAttachment) => React.ReactNode;\n}\n\nconst AttachmentsRow = React.forwardRef<HTMLDivElement, AttachmentsRowProps>((props, forwardedRef) => {\n const { asChild, forceMount, renderAttachment, className, style, ...divProps } = props;\n const ctx = useChatbarContext();\n const hasItems = ctx.attachments.length > 0;\n if (!hasItems && !forceMount) return null;\n const Comp = asChild ? Slot : ('div' as any);\n return (\n <m.div\n layout=\"position\"\n transition={{\n layout: {\n type: 'spring',\n visualDuration: 0.15,\n bounce: 0.1,\n },\n }}\n >\n <Comp {...divProps} ref={forwardedRef} className={classNames('rt-ChatbarAttachmentsRow', className)} style={style} role=\"list\" aria-label={divProps['aria-label'] ?? 'Attachments'}>\n <ScrollArea className=\"rt-ChatbarScrollArea\" scrollbars=\"horizontal\" size=\"1\">\n <Flex align=\"center\" gap=\"2\" style={{ minWidth: 'fit-content' }}>\n {ctx.attachments.map((att) => (\n <Attachment key={att.id} attachment={att} asChild={!!renderAttachment}>\n {renderAttachment?.(att)}\n </Attachment>\n ))}\n </Flex>\n </ScrollArea>\n </Comp>\n </m.div>\n );\n});\nAttachmentsRow.displayName = 'Chatbar.AttachmentsRow';\n\n/** Default tile renderer for a single attachment. */\ninterface AttachmentProps extends React.ComponentPropsWithoutRef<'div'> {\n attachment: ChatbarAttachment;\n asChild?: boolean;\n}\n\nconst Attachment = React.forwardRef<HTMLDivElement, AttachmentProps>((props, forwardedRef) => {\n const { attachment, asChild, className, style, children, ...divProps } = props;\n const ctx = useChatbarContext();\n const Comp = asChild ? Slot : ('div' as any);\n const isImage = !!attachment.url && attachment.type.startsWith('image/');\n return (\n <Comp {...divProps} ref={forwardedRef} className={classNames('rt-ChatbarAttachment', className)} style={style} role=\"listitem\" data-kind={isImage ? 'image' : 'file'} title={attachment.name}>\n {children ?? (\n // <Card size={ctx.size} variant=\"surface\">\n <Flex align=\"center\" gap=\"2\" pr={!isImage ? '6' : undefined}>\n <div className=\"rt-ChatbarAttachmentPreview\" aria-hidden>\n {isImage ? <img className=\"rt-ChatbarAttachmentImage\" src={attachment.url} alt=\"\" /> : <FileTextIcon />}\n </div>\n {!isImage && (\n <Flex direction=\"column\" gap=\"0\" style={{ minWidth: 0 }}>\n <Text size={ctx.size} weight=\"medium\" style={{ whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' }}>\n {attachment.name}\n </Text>\n <Text size=\"1\" color=\"gray\">\n {Math.ceil(attachment.size / 1024)} KB\n </Text>\n </Flex>\n )}\n <IconButton\n className=\"rt-ChatbarAttachmentRemove\"\n aria-label={`Remove ${attachment.name}`}\n size=\"1\"\n // size={ctx.size}\n variant=\"classic\"\n highContrast\n color=\"gray\"\n onClick={() => ctx.setAttachments(ctx.attachments.filter((a) => a.id !== attachment.id))}\n >\n <CloseIcon />\n </IconButton>\n </Flex>\n // </Card>\n )}\n </Comp>\n );\n});\nAttachment.displayName = 'Chatbar.Attachment';\n\ninterface AttachTriggerProps extends React.ComponentPropsWithoutRef<'button'> {\n asChild?: boolean;\n accept?: string | string[];\n multiple?: boolean;\n}\n\nconst AttachTrigger = React.forwardRef<HTMLButtonElement, AttachTriggerProps>((props, forwardedRef) => {\n const { asChild, accept, multiple, className, style, ...buttonProps } = props;\n const ctx = useChatbarContext();\n const inputRef = React.useRef<HTMLInputElement | null>(null);\n const Comp = asChild ? Slot : ('button' as any);\n // Prefer Chatbar.Root's accept when a local accept is not provided\n const mergedAccept = accept ?? ctx.accept;\n const actualAccept = (Array.isArray(mergedAccept) ? mergedAccept : (mergedAccept?.split(',') ?? [])).join(',');\n React.useEffect(() => {\n const handleWindowFocus = () => {\n // Reset guard when window regains focus after file dialog closes\n ctx.fileDialogOpenRef.current = false;\n };\n window.addEventListener('focus', handleWindowFocus);\n return () => window.removeEventListener('focus', handleWindowFocus);\n }, [ctx.fileDialogOpenRef]);\n return (\n <>\n <Comp\n {...(buttonProps as any)}\n ref={forwardedRef as any}\n className={classNames('rt-ChatbarAttachTrigger', className)}\n style={style}\n type={buttonProps.type ?? 'button'}\n aria-label={buttonProps['aria-label'] ?? 'Add attachments'}\n onPointerDown={(e: any) => {\n // Set guard before blur occurs (Safari fires blur before click)\n ctx.fileDialogOpenRef.current = true;\n buttonProps.onPointerDown?.(e);\n }}\n onMouseDown={(e: any) => {\n // Fallback for environments without Pointer Events\n ctx.fileDialogOpenRef.current = true;\n buttonProps.onMouseDown?.(e);\n }}\n onClick={(e: any) => {\n // Ensure file input opens reliably by clicking it first\n ctx.fileDialogOpenRef.current = true;\n if (inputRef.current) {\n inputRef.current.click();\n }\n // Then call user's onClick if provided\n buttonProps.onClick?.(e);\n }}\n />\n <input\n ref={inputRef}\n type=\"file\"\n accept={actualAccept}\n multiple={multiple ?? ctx.multiple}\n tabIndex={-1}\n style={{ display: 'none' }}\n onChange={(e) => {\n const files = Array.from(e.currentTarget.files ?? []);\n if (files.length > 0) {\n ctx.appendFiles(files);\n }\n // File dialog closed; allow normal blur handling\n ctx.fileDialogOpenRef.current = false;\n // Reset input value to allow selecting the same file again\n e.currentTarget.value = '';\n }}\n />\n </>\n );\n});\nAttachTrigger.displayName = 'Chatbar.AttachTrigger';\ninterface RowProps extends Omit<React.ComponentPropsWithoutRef<'div'>, 'children'> {\n asChild?: boolean;\n children?: React.ReactNode;\n}\n\nconst Row = React.forwardRef<HTMLDivElement, RowProps>((props, forwardedRef) => {\n const { asChild, children, className, style, ...divProps } = props;\n const ctx = useChatbarContext();\n if (!ctx.open) return null;\n const Comp = asChild ? Slot : ('div' as any);\n return (\n <m.div\n layout=\"position\"\n transition={{\n layout: {\n type: 'spring',\n visualDuration: 0.15,\n bounce: 0.1,\n },\n }}\n >\n <Comp {...divProps} ref={forwardedRef} className={classNames('rt-ChatbarRow', className)} style={style}>\n <Flex align=\"center\" justify=\"between\" width=\"100%\">\n {children}\n </Flex>\n </Comp>\n </m.div>\n );\n});\nRow.displayName = 'Chatbar.Row';\n\nconst RowStart = React.forwardRef<HTMLDivElement, React.ComponentPropsWithoutRef<'div'>>((props, forwardedRef) => {\n const { className, style, ...divProps } = props;\n return <div {...divProps} ref={forwardedRef} className={classNames('rt-ChatbarRowStart', className)} style={style} />;\n});\nRowStart.displayName = 'Chatbar.RowStart';\n\nconst RowEnd = React.forwardRef<HTMLDivElement, React.ComponentPropsWithoutRef<'div'>>((props, forwardedRef) => {\n const { className, style, ...divProps } = props;\n return <div {...divProps} ref={forwardedRef} className={classNames('rt-ChatbarRowEnd', className)} style={style} />;\n});\nRowEnd.displayName = 'Chatbar.RowEnd';\n\ntype SendProps = Omit<IconButtonProps, 'aria-label' | 'aria-labelledby'> & {\n /** Optional override for accessible name. Defaults to \"Send\". */\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n asChild?: boolean;\n clearOnSend?: boolean;\n};\n\nconst Send = React.forwardRef<HTMLButtonElement, SendProps>((props, forwardedRef) => {\n const { asChild, clearOnSend = true, disabled, children, className, style, size: sizeProp, variant: variantProp, 'aria-label': ariaLabel, 'aria-labelledby': ariaLabelledby, ...buttonProps } = props;\n const ctx = useChatbarContext();\n\n const trimmed = ctx.value.trim();\n const hasContent = trimmed.length > 0 || ctx.attachments.length > 0;\n const visible = ctx.sendMode === 'always' || (ctx.sendMode === 'whenDirty' && hasContent);\n if (ctx.sendMode === 'never') return null;\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n if (ctx.disabled || ctx.readOnly) return;\n ctx.onSubmit?.({ value: ctx.value, attachments: ctx.attachments });\n if (clearOnSend) {\n if (!ctx.isValueControlled) ctx.setValue('');\n if (ctx.clearOnSubmit) ctx.setAttachments([]);\n }\n buttonProps.onClick?.(event);\n };\n\n return (\n <IconButton\n {...(buttonProps as any)}\n ref={forwardedRef as any}\n size={sizeProp ?? ctx.size}\n variant={variantProp ?? (ctx.open ? 'solid' : 'ghost')}\n disabled={disabled || ctx.disabled || ctx.readOnly}\n className={classNames('rt-ChatbarSend', className)}\n style={{\n opacity: visible ? 1 : 0,\n pointerEvents: visible ? 'auto' : 'none',\n ...style,\n }}\n asChild={asChild}\n onClick={handleClick}\n aria-label={ariaLabel ?? (ariaLabelledby ? undefined : 'Send')}\n aria-labelledby={ariaLabelledby}\n >\n {children ?? (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className=\"lucide lucide-arrow-right-icon lucide-arrow-right\"\n >\n <path d=\"M5 12h14\" />\n <path d=\"m12 5 7 7-7 7\" />\n </svg>\n )}\n </IconButton>\n );\n});\nSend.displayName = 'Chatbar.Send';\n\nexport { Root, Textarea, InlineStart, InlineEnd, AttachmentsRow, Attachment, AttachTrigger, Row, RowStart, RowEnd, Send };\nexport type { RootProps as ChatbarRootProps, TextareaProps as ChatbarTextareaProps, RowProps as ChatbarRowProps, SendProps as ChatbarSendProps, ChatbarAttachment };\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["chatbar_exports", "__export", "AttachTrigger", "Attachment", "AttachmentsRow", "InlineEnd", "InlineStart", "Root", "Row", "RowEnd", "RowStart", "Send", "Textarea", "React", "classNames", "LazyMotion", "domAnimation", "m", "useDropzone", "useIsomorphicLayoutEffect", "ChatbarContext", "useChatbarContext", "ctx", "Root", "props", "forwardedRef", "className", "style", "children", "valueProp", "defaultValue", "onValueChangeProp", "openProp", "defaultOpen", "onOpenChangeProp", "expandOn", "minLines", "maxLines", "sendMode", "disabled", "readOnly", "onSubmit", "size", "variant", "color", "radius", "panelBackground", "material", "width", "maxWidth", "asChild", "attachmentsProp", "defaultAttachments", "onAttachmentsChange", "accept", "multiple", "maxAttachments", "maxFileSize", "paste", "pasteAccept", "clearOnSubmit", "onAttachmentReject", "dropzone", "apiRef", "divProps", "effectiveMaterial", "isValueControlled", "valueUncontrolled", "setValueUncontrolled", "value", "isOpenControlled", "openUncontrolled", "setOpenUncontrolled", "open", "rootRef", "textareaRef", "fileDialogOpenRef", "isAttachmentsControlled", "attachmentsUncontrolled", "setAttachmentsUncontrolled", "attachments", "generatedUrlSetRef", "toArray", "val", "s", "accepts", "pasteAccepts", "matchesAccept", "file", "patterns", "mime", "name", "patRaw", "pat", "type", "subtype", "fmType", "fmSubtype", "attachmentsRef", "acceptsRef", "pasteAcceptsRef", "maxAttachmentsRef", "maxFileSizeRef", "onAttachmentRejectRef", "onAttachmentsChangeRef", "onOpenChangePropRef", "appendFiles", "files", "currentAttachments", "currentAccepts", "currentMaxAttachments", "currentMaxFileSize", "next", "rejected", "remainingSlots", "id", "looksLikeImageByExt", "url", "merged", "appendFilesFromPaste", "currentPasteAccepts", "acceptedFiles", "currentUrls", "a", "urlSet", "Comp", "Slot", "handleSetOpen", "handleSetValue", "handleSetAttachments", "handleBlurCapture", "event", "nextTarget", "rootEl", "getRootProps", "getInputProps", "isDragActive", "openFileDialog", "rejectedFiles", "rejections", "errors", "reason", "acc", "pattern", "isInteractiveTarget", "target", "el", "handleContainerPointerDown", "LazyMotion", "domAnimation", "node", "classNames", "m", "Text", "Textarea", "onFocus", "onInput", "onChange", "onPaste", "onKeyDown", "submitOnEnter", "rows", "textareaProps", "setOpen", "setValue", "lineHeightRef", "paddingRef", "compactHeightRef", "recomputeMetrics", "computedStyle", "lineHeight", "paddingTop", "paddingBottom", "updateHeight", "forceOpen", "textarea", "padding", "isOpen", "effectiveMinLines", "effectiveMaxLines", "minHeight", "maxHeight", "contentHeight", "finalHeight", "prevLineHeight", "ro", "lh", "handleFocus", "handleChange", "nextValue", "handlePaste", "i", "f", "handleKeyDown", "hasContent", "InlineStart", "InlineEnd", "AttachmentsRow", "forceMount", "renderAttachment", "ScrollArea", "Flex", "att", "Attachment", "attachment", "isImage", "FileTextIcon", "IconButton", "CloseIcon", "AttachTrigger", "buttonProps", "inputRef", "mergedAccept", "actualAccept", "handleWindowFocus", "e", "Row", "RowStart", "RowEnd", "Send", "clearOnSend", "sizeProp", "variantProp", "ariaLabel", "ariaLabelledby", "visible", "handleClick"]
|
|
7
|
-
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import*as e from"react";var o=e.createContext({isInsideMenu:!1});function u(n){if(n)return typeof n=="string"?n:n.initial}function s({children:n,size:i}){let t=u(i),r=e.useMemo(()=>({isInsideMenu:!0,size:t}),[t]);return e.createElement(o.Provider,{value:r},n)}function c(){return e.useContext(o)}var d={1:24,2:32};export{s as a,c as b,d as c};
|
|
2
|
-
//# sourceMappingURL=chunk-QCNUTT4R.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/components/_internal/menu-context.tsx"],
|
|
4
|
-
"sourcesContent": ["'use client';\n\nimport * as React from 'react';\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';\n\ninterface MenuContextValue {\n /** Whether we're inside a menu that owns the menu role */\n isInsideMenu: boolean;\n /** Menu size for calculating item heights (resolved to non-responsive value) */\n size?: MenuSize;\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/** Extract the base size from a potentially responsive value */\nfunction resolveSize(size: Responsive<MenuSize> | undefined): MenuSize | undefined {\n if (!size) return undefined;\n if (typeof size === 'string') return size;\n // For responsive objects, use the 'initial' value\n return size.initial;\n}\n\nexport function MenuProvider({ children, size }: MenuProviderProps) {\n const resolvedSize = resolveSize(size);\n const value = React.useMemo(() => ({ isInsideMenu: true, size: resolvedSize }), [resolvedSize]);\n return <MenuContext.Provider value={value}>{children}</MenuContext.Provider>;\n}\n\nexport function useMenuContext() {\n return React.useContext(MenuContext);\n}\n\n/** Map menu size to item height in pixels */\nexport const menuSizeToItemHeight: Record<MenuSize, number> = {\n '1': 24, // --space-5\n '2': 32, // --space-6\n};\n"],
|
|
5
|
-
"mappings": "AAEA,UAAYA,MAAW,QAoBvB,IAAMC,EAAoB,gBAAgC,CAAE,aAAc,EAAM,CAAC,EASjF,SAASC,EAAYC,EAA8D,CACjF,GAAKA,EACL,OAAI,OAAOA,GAAS,SAAiBA,EAE9BA,EAAK,OACd,CAEO,SAASC,EAAa,CAAE,SAAAC,EAAU,KAAAF,CAAK,EAAsB,CAClE,IAAMG,EAAeJ,EAAYC,CAAI,EAC/BI,EAAc,UAAQ,KAAO,CAAE,aAAc,GAAM,KAAMD,CAAa,GAAI,CAACA,CAAY,CAAC,EAC9F,OAAO,gBAACL,EAAY,SAAZ,CAAqB,MAAOM,GAAQF,CAAS,CACvD,CAEO,SAASG,GAAiB,CAC/B,OAAa,aAAWP,CAAW,CACrC,CAGO,IAAMQ,EAAiD,CAC5D,EAAK,GACL,EAAK,EACP",
|
|
6
|
-
"names": ["React", "MenuContext", "resolveSize", "size", "MenuProvider", "children", "resolvedSize", "value", "useMenuContext", "menuSizeToItemHeight"]
|
|
7
|
-
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as U,b as X,c as Y}from"./chunk-FXUUI6Z2.js";import{a as V,b as Q,c as I}from"./chunk-4Z33XHOK.js";import{b as K,c as J}from"./chunk-IX5HIHVI.js";import{a as A}from"./chunk-MJJ7XDIP.js";import{b as H,c as q}from"./chunk-YUP6EICB.js";import{c as j}from"./chunk-FWB47YCH.js";import{a as $}from"./chunk-GSTOGDAJ.js";import{a as w}from"./chunk-6FLLFCBU.js";import{a as xo}from"./chunk-3XT5P2HO.js";var fo={};xo(fo,{Content:()=>ao,Empty:()=>io,Group:()=>lo,Input:()=>no,Item:()=>bo,Label:()=>mo,List:()=>so,Root:()=>eo,Separator:()=>po,Trigger:()=>to,Value:()=>ro});import*as o from"react";import p from"classnames";import{useControllableState as z}from"radix-ui/internal";import{Command as h}from"cmdk";var Z=o.createContext(null),R=t=>{let a=o.useContext(Z);if(!a){let e=t?`Combobox.${t}`:"Combobox components";throw new Error(`${e} must be used within Combobox.Root`)}return a},_=o.createContext(null),oo=()=>o.useContext(_),eo=t=>{let{children:a,size:e=V.size.default,highContrast:r=V.highContrast.default,value:l,defaultValue:n=null,onValueChange:m,open:d,defaultOpen:C=!1,onOpenChange:b,placeholder:s="Select an option",searchPlaceholder:c="Search...",searchValue:P,defaultSearchValue:u="",onSearchValueChange:x,filter:i,shouldFilter:f=!0,loop:g=!0,disabled:S,resetSearchOnSelect:E=!0,color:O,displayValue:v,...co}=t,k=o.useId(),[L,y]=z({prop:d,defaultProp:C,onChange:b}),[N,D]=z({prop:l,defaultProp:n,onChange:m}),[M,T]=z({prop:P,defaultProp:u,onChange:x}),G=o.useMemo(()=>{if(v!=null)return typeof v=="function"?v(N):v},[v,N]),W=o.useCallback(uo=>{D(uo),y(!1),E&&T("")},[y,T,D,E]),Co=o.useMemo(()=>({value:N,onSelect:W,open:L,setOpen:y,size:e,highContrast:r,placeholder:s,searchPlaceholder:c,disabled:S,color:O,displayValue:G,listboxId:k}),[N,W,L,y,e,r,s,c,S,O,G,k]),B=o.useRef({filter:i,shouldFilter:f,loop:g,searchValue:M,setSearchValue:T});return B.current={filter:i,shouldFilter:f,loop:g,searchValue:M,setSearchValue:T},o.createElement(Z.Provider,{value:Co},o.createElement(F.Provider,{value:B},o.createElement(U,{open:L,onOpenChange:y,...co},a)))};eo.displayName="Combobox.Root";var F=o.createContext(null),to=o.forwardRef((t,a)=>{let e=R("Trigger"),{children:r,className:l,placeholder:n,disabled:m,readOnly:d,error:C,loading:b,color:s,radius:c,...P}=w({size:e.size,highContrast:e.highContrast,...t},{size:V.size,highContrast:V.highContrast},Q,$),{material:u,panelBackground:x}=t,i=m??e.disabled,f=s??e.color,g=o.createElement(o.Fragment,null,o.createElement("span",{className:"rt-SelectTriggerInner"},o.createElement("span",{className:"rt-ComboboxValue"},e.displayValue??e.value??n??e.placeholder)),b?o.createElement("div",{className:"rt-SelectIcon rt-SelectLoadingIcon","aria-hidden":"true"},o.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none"},o.createElement("circle",{cx:"8",cy:"8",r:"6.5",stroke:"currentColor",strokeWidth:"1",strokeLinecap:"round",strokeDasharray:"6 34",strokeDashoffset:"0",className:"rt-SelectLoadingSpinner"}))):o.createElement(J,{className:"rt-SelectIcon"})),{type:S,...E}=P;return o.createElement(X,{disabled:i},o.createElement("button",{"data-accent-color":f,"data-radius":c,"data-panel-background":x,"data-material":u,"data-error":C,"data-loading":b,"data-disabled":i||void 0,"data-read-only":d||void 0,...E,role:"combobox","aria-autocomplete":"list","aria-controls":e.open?e.listboxId:void 0,"aria-expanded":e.open,"aria-haspopup":"listbox","aria-disabled":i||void 0,type:S??"button",disabled:i,ref:a,className:p("rt-reset","rt-SelectTrigger","rt-ComboboxTrigger",l)},r?A(r):g))});to.displayName="Combobox.Trigger";var ro=o.forwardRef(({placeholder:t,children:a,className:e,...r},l)=>{let n=R("Value"),m=n.displayValue??n.value??void 0;return o.createElement("span",{...r,ref:l,className:p("rt-ComboboxValue",e)},m??a??t??n.placeholder)});ro.displayName="Combobox.Value";var ao=o.forwardRef((t,a)=>{let e=R("Content"),r=o.useContext(F),l=H(),n=l.panelBackground,m=t.size??e.size??I.size.default,d=t.variant??I.variant.default,C=t.highContrast??e.highContrast??I.highContrast.default,{className:b,children:s,color:c,forceMount:P,container:u,...x}=w({...t,size:m,variant:d,highContrast:C},I),i=c||e.color||l.accentColor,f=o.useMemo(()=>({variant:d,size:String(m),color:i,material:n,highContrast:C,loop:r?.current.loop,shouldFilter:r?.current.shouldFilter,filter:r?.current.filter}),[d,m,i,n,C,r]);return o.createElement(Y,{size:m,"data-accent-color":i,"data-material":n,"data-panel-background":n,align:"start",sideOffset:4,collisionPadding:10,...x,forceMount:P===!0?!0:void 0,container:u,ref:a,className:p("rt-PopperContent","rt-BaseMenuContent","rt-ComboboxContent",b)},o.createElement(q,{asChild:!0},o.createElement(_.Provider,{value:f},o.createElement(h,{loop:r?.current.loop,shouldFilter:r?.current.shouldFilter,filter:r?.current.filter,className:"rt-ComboboxCommand"},s))))});ao.displayName="Combobox.Content";var no=o.forwardRef(({className:t,startAdornment:a,endAdornment:e,placeholder:r,variant:l,value:n,onValueChange:m,...d},C)=>{let b=R("Input"),s=oo(),c=o.useContext(F),P=s?.variant??"solid",u=l??(P==="solid"?"surface":"soft"),x=n??c?.current.searchValue??"",i=m??c?.current.setSearchValue,f=s?.size?`rt-r-size-${s.size}`:void 0,g=o.createElement("div",{className:p("rt-TextFieldRoot","rt-ComboboxInputRoot",f,`rt-variant-${u}`),"data-accent-color":s?.color,"data-material":s?.material,"data-panel-background":s?.material},a?o.createElement("div",{className:"rt-TextFieldSlot"},a):null,o.createElement(h.Input,{...d,ref:C,value:x,onValueChange:i,placeholder:r??b.searchPlaceholder,className:p("rt-reset","rt-TextFieldInput",t)}),e?o.createElement("div",{className:"rt-TextFieldSlot","data-side":"right"},e):null);return s?o.createElement("div",{className:"rt-ComboboxSearch"},g):g});no.displayName="Combobox.Input";var so=o.forwardRef(({className:t,children:a,...e},r)=>{let l=R("List");return o.createElement("div",{className:"rt-ComboboxScrollArea"},o.createElement("div",{className:p("rt-BaseMenuViewport","rt-ComboboxViewport")},o.createElement(h.List,{...e,id:l.listboxId,ref:r,role:"listbox","aria-label":"Options",className:p("rt-ComboboxList",t)},a)))});so.displayName="Combobox.List";var io=o.forwardRef(({className:t,...a},e)=>o.createElement(h.Empty,{...a,ref:e,className:p("rt-ComboboxEmpty",t)}));io.displayName="Combobox.Empty";var lo=o.forwardRef(({className:t,...a},e)=>o.createElement(h.Group,{...a,ref:e,className:p("rt-BaseMenuGroup","rt-ComboboxGroup",t)}));lo.displayName="Combobox.Group";var mo=o.forwardRef(({className:t,...a},e)=>o.createElement("div",{...a,ref:e,className:p("rt-BaseMenuLabel","rt-ComboboxLabel",t)}));mo.displayName="Combobox.Label";var po=o.forwardRef(({className:t,...a},e)=>o.createElement(h.Separator,{...a,ref:e,className:p("rt-BaseMenuSeparator","rt-ComboboxSeparator",t)}));po.displayName="Combobox.Separator";var bo=o.forwardRef(({className:t,children:a,label:e,value:r,disabled:l,onSelect:n,keywords:m,...d},C)=>{let b=R("Item"),s=oo(),c=r!=null&&b.value===r,P=l??b.disabled??!1,u=s?.size?`rt-r-size-${s.size}`:void 0,x=b.onSelect,i=o.useCallback(()=>{r!=null&&(x(r),n?.(r))},[x,r,n]),f=m??(e?[e]:void 0);return o.createElement(h.Item,{...d,value:r,keywords:f,role:"option","aria-selected":c,disabled:P||void 0,ref:C,onSelect:i,className:p("rt-reset","rt-BaseMenuItem","rt-ComboboxItem",t)},c?o.createElement("span",{className:p("rt-BaseMenuItemIndicator","rt-ComboboxItemIndicator",u)},o.createElement(K,{className:p("rt-BaseMenuItemIndicatorIcon","rt-ComboboxItemIndicatorIcon",u)})):null,o.createElement(j,null,a))});bo.displayName="Combobox.Item";export{eo as a,to as b,ro as c,ao as d,no as e,so as f,io as g,lo as h,mo as i,po as j,bo as k,fo as l};
|
|
2
|
-
//# sourceMappingURL=chunk-UGD7Z3L4.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/components/combobox.tsx"],
|
|
4
|
-
"sourcesContent": ["'use client';\n\n/**\n * Combobox - Simplified architecture matching shadcn's approach for optimal performance.\n * Built on Popover + cmdk with minimal context overhead.\n * \n * Key performance optimizations:\n * - Single context instead of 5 separate contexts\n * - No MutationObserver - cmdk handles aria internally\n * - disablePointerSelection - prevents React re-renders on hover\n * - CSS :hover handles visual feedback (no state updates)\n * - No label registration - use displayValue prop for trigger display\n */\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { useControllableState } from 'radix-ui/internal';\nimport { Command as CommandPrimitive } from 'cmdk';\n\nimport { extractProps } from '../helpers/extract-props.js';\nimport { comboboxRootPropDefs, comboboxTriggerPropDefs, comboboxContentPropDefs } from './combobox.props.js';\nimport { marginPropDefs } from '../props/margin.props.js';\nimport { ChevronDownIcon, ThickCheckIcon } from './icons.js';\nimport { Theme, useThemeContext } from './theme.js';\nimport { requireReactElement } from '../helpers/require-react-element.js';\nimport * as Popover from './popover.js';\nimport { Slottable } from './slot.js';\nimport { textFieldRootPropDefs } from './text-field.props.js';\n\nimport type { MarginProps } from '../props/margin.props.js';\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { GetPropDefTypes } from '../props/prop-def.js';\n\ntype TextFieldVariant = (typeof textFieldRootPropDefs.variant.values)[number];\ntype ComboboxValue = string | null;\ntype CommandFilter = (value: string, search: string, keywords?: string[]) => number;\n\n/**\n * Single unified context - contains only essential shared state.\n * This replaces the previous 5 separate contexts for better performance.\n */\ninterface ComboboxContextValue {\n // Selection state\n value: ComboboxValue;\n onSelect: (value: string) => void;\n // Open state\n open: boolean;\n setOpen: (open: boolean) => void;\n // Config (static, rarely changes)\n size?: ComboboxRootOwnProps['size'];\n highContrast?: boolean;\n placeholder?: string;\n searchPlaceholder?: string;\n disabled?: boolean;\n color?: string;\n // Display\n displayValue?: string;\n // Accessibility\n listboxId: string;\n}\n\nconst ComboboxContext = React.createContext<ComboboxContextValue | null>(null);\n\nconst useComboboxContext = (componentName?: string) => {\n const ctx = React.useContext(ComboboxContext);\n if (!ctx) {\n const name = componentName ? `Combobox.${componentName}` : 'Combobox components';\n throw new Error(`${name} must be used within Combobox.Root`);\n }\n return ctx;\n};\n\n/**\n * Context for Content-specific values (variant, material).\n * Separate from main context as it's only needed inside Content.\n */\ninterface ComboboxContentContextValue {\n variant: 'solid' | 'soft';\n size: string;\n color?: string;\n material?: string;\n highContrast?: boolean;\n // cmdk config passed down\n loop?: boolean;\n shouldFilter?: boolean;\n filter?: CommandFilter;\n}\n\nconst ComboboxContentContext = React.createContext<ComboboxContentContextValue | null>(null);\n\nconst useComboboxContentContext = () => React.useContext(ComboboxContentContext);\n\n// ============================================================================\n// Root\n// ============================================================================\n\ntype ComboboxRootOwnProps = GetPropDefTypes<typeof comboboxRootPropDefs> & {\n value?: ComboboxValue;\n defaultValue?: ComboboxValue;\n onValueChange?: (value: ComboboxValue) => void;\n open?: boolean;\n defaultOpen?: boolean;\n onOpenChange?: (open: boolean) => void;\n placeholder?: string;\n searchPlaceholder?: string;\n searchValue?: string;\n defaultSearchValue?: string;\n onSearchValueChange?: (value: string) => void;\n filter?: CommandFilter;\n shouldFilter?: boolean;\n loop?: boolean;\n disabled?: boolean;\n resetSearchOnSelect?: boolean;\n color?: (typeof comboboxTriggerPropDefs.color.values)[number];\n /**\n * Display value for the trigger. Required for optimal performance.\n * Can be a string or function that receives the current value.\n * @example displayValue={(v) => items.find(i => i.value === v)?.label}\n */\n displayValue?: string | ((value: ComboboxValue) => string | undefined);\n};\n\ntype PopoverRootProps = React.ComponentPropsWithoutRef<typeof Popover.Root>;\ninterface ComboboxRootProps extends PopoverRootProps, ComboboxRootOwnProps {}\n\nconst ComboboxRoot: React.FC<ComboboxRootProps> = (props) => {\n const {\n children,\n size = comboboxRootPropDefs.size.default,\n highContrast = comboboxRootPropDefs.highContrast.default,\n value: valueProp,\n defaultValue = null,\n onValueChange,\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n placeholder = 'Select an option',\n searchPlaceholder = 'Search...',\n searchValue: searchValueProp,\n defaultSearchValue = '',\n onSearchValueChange,\n filter,\n shouldFilter = true,\n loop = true,\n disabled,\n resetSearchOnSelect = true,\n color,\n displayValue: displayValueProp,\n ...rootProps\n } = props;\n\n // Generate stable ID for listbox accessibility linkage\n const listboxId = React.useId();\n\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen,\n onChange: onOpenChange,\n });\n\n const [value, setValue] = useControllableState<ComboboxValue>({\n prop: valueProp,\n defaultProp: defaultValue,\n onChange: onValueChange,\n });\n\n const [searchValue, setSearchValue] = useControllableState<string>({\n prop: searchValueProp,\n defaultProp: defaultSearchValue,\n onChange: onSearchValueChange,\n });\n\n // Resolve displayValue\n const resolvedDisplayValue = React.useMemo(() => {\n if (displayValueProp == null) return undefined;\n if (typeof displayValueProp === 'function') {\n return displayValueProp(value);\n }\n return displayValueProp;\n }, [displayValueProp, value]);\n\n // Handle selection - batches all state updates\n const onSelect = React.useCallback(\n (nextValue: string) => {\n setValue(nextValue);\n setOpen(false);\n if (resetSearchOnSelect) {\n setSearchValue('');\n }\n },\n [setOpen, setSearchValue, setValue, resetSearchOnSelect],\n );\n\n // Single context value - memoized for performance\n const contextValue = React.useMemo<ComboboxContextValue>(\n () => ({\n value,\n onSelect,\n open,\n setOpen,\n size,\n highContrast,\n placeholder,\n searchPlaceholder,\n disabled,\n color,\n displayValue: resolvedDisplayValue,\n listboxId,\n }),\n [value, onSelect, open, setOpen, size, highContrast, placeholder, searchPlaceholder, disabled, color, resolvedDisplayValue, listboxId],\n );\n\n // Store cmdk config in a ref to avoid context updates\n const cmdkConfigRef = React.useRef({ filter, shouldFilter, loop, searchValue, setSearchValue });\n cmdkConfigRef.current = { filter, shouldFilter, loop, searchValue, setSearchValue };\n\n return (\n <ComboboxContext.Provider value={contextValue}>\n <CmdkConfigContext.Provider value={cmdkConfigRef}>\n <Popover.Root open={open} onOpenChange={setOpen} {...rootProps}>\n {children}\n </Popover.Root>\n </CmdkConfigContext.Provider>\n </ComboboxContext.Provider>\n );\n};\nComboboxRoot.displayName = 'Combobox.Root';\n\n// Separate ref context for cmdk config to avoid re-renders\nconst CmdkConfigContext = React.createContext<React.MutableRefObject<{\n filter?: CommandFilter;\n shouldFilter: boolean;\n loop: boolean;\n searchValue: string;\n setSearchValue: (value: string) => void;\n}> | null>(null);\n\n// ============================================================================\n// Trigger\n// ============================================================================\n\ntype ComboboxTriggerElement = HTMLButtonElement;\ntype ComboboxTriggerOwnProps = GetPropDefTypes<typeof comboboxTriggerPropDefs>;\ntype NativeTriggerProps = Omit<React.ComponentPropsWithoutRef<'button'>, 'color'>;\ninterface ComboboxTriggerProps extends NativeTriggerProps, MarginProps, ComboboxTriggerOwnProps {}\n\nconst ComboboxTrigger = React.forwardRef<ComboboxTriggerElement, ComboboxTriggerProps>((props, forwardedRef) => {\n const ctx = useComboboxContext('Trigger');\n\n const { children, className, placeholder, disabled, readOnly, error, loading, color, radius, ...triggerProps } = extractProps(\n { size: ctx.size, highContrast: ctx.highContrast, ...props },\n { size: comboboxRootPropDefs.size, highContrast: comboboxRootPropDefs.highContrast },\n comboboxTriggerPropDefs,\n marginPropDefs,\n );\n\n const { material, panelBackground } = props;\n const isDisabled = disabled ?? ctx.disabled;\n const resolvedColor = color ?? ctx.color;\n\n const defaultContent = (\n <>\n <span className=\"rt-SelectTriggerInner\">\n <span className=\"rt-ComboboxValue\">\n {ctx.displayValue ?? ctx.value ?? placeholder ?? ctx.placeholder}\n </span>\n </span>\n {loading ? (\n <div className=\"rt-SelectIcon rt-SelectLoadingIcon\" aria-hidden=\"true\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\">\n <circle cx=\"8\" cy=\"8\" r=\"6.5\" stroke=\"currentColor\" strokeWidth=\"1\" strokeLinecap=\"round\" strokeDasharray=\"6 34\" strokeDashoffset=\"0\" className=\"rt-SelectLoadingSpinner\" />\n </svg>\n </div>\n ) : (\n <ChevronDownIcon className=\"rt-SelectIcon\" />\n )}\n </>\n );\n\n const { type: buttonType, ...restTriggerProps } = triggerProps;\n\n return (\n <Popover.Trigger disabled={isDisabled}>\n <button\n data-accent-color={resolvedColor}\n data-radius={radius}\n data-panel-background={panelBackground}\n data-material={material}\n data-error={error}\n data-loading={loading}\n data-disabled={isDisabled || undefined}\n data-read-only={readOnly || undefined}\n {...restTriggerProps}\n role=\"combobox\"\n aria-autocomplete=\"list\"\n aria-controls={ctx.open ? ctx.listboxId : undefined}\n aria-expanded={ctx.open}\n aria-haspopup=\"listbox\"\n aria-disabled={isDisabled || undefined}\n type={buttonType ?? 'button'}\n disabled={isDisabled}\n ref={forwardedRef}\n className={classNames('rt-reset', 'rt-SelectTrigger', 'rt-ComboboxTrigger', className)}\n >\n {children ? requireReactElement(children) : defaultContent}\n </button>\n </Popover.Trigger>\n );\n});\nComboboxTrigger.displayName = 'Combobox.Trigger';\n\n// ============================================================================\n// Value (standalone, for custom trigger layouts)\n// ============================================================================\n\ntype ComboboxValueElement = HTMLSpanElement;\ninterface ComboboxValueProps extends React.ComponentPropsWithoutRef<'span'> {\n placeholder?: string;\n}\n\nconst ComboboxValue = React.forwardRef<ComboboxValueElement, ComboboxValueProps>(\n ({ placeholder, children, className, ...valueProps }, forwardedRef) => {\n const ctx = useComboboxContext('Value');\n const display = ctx.displayValue ?? ctx.value ?? undefined;\n return (\n <span {...valueProps} ref={forwardedRef} className={classNames('rt-ComboboxValue', className)}>\n {display ?? children ?? placeholder ?? ctx.placeholder}\n </span>\n );\n },\n);\nComboboxValue.displayName = 'Combobox.Value';\n\n// ============================================================================\n// Content\n// ============================================================================\n\ntype ComboboxContentElement = React.ElementRef<typeof Popover.Content>;\ntype ComboboxContentOwnProps = GetPropDefTypes<typeof comboboxContentPropDefs> & {\n container?: React.ComponentPropsWithoutRef<typeof Popover.Content>['container'];\n};\ninterface ComboboxContentProps extends Omit<ComponentPropsWithout<typeof Popover.Content, RemovedProps>, 'size'>, ComboboxContentOwnProps {}\n\nconst ComboboxContent = React.forwardRef<ComboboxContentElement, ComboboxContentProps>((props, forwardedRef) => {\n const ctx = useComboboxContext('Content');\n const cmdkConfigRef = React.useContext(CmdkConfigContext);\n const themeContext = useThemeContext();\n const effectiveMaterial = themeContext.panelBackground;\n\n const sizeProp = props.size ?? ctx.size ?? comboboxContentPropDefs.size.default;\n const variantProp = props.variant ?? comboboxContentPropDefs.variant.default;\n const highContrastProp = props.highContrast ?? ctx.highContrast ?? comboboxContentPropDefs.highContrast.default;\n\n const { className, children, color, forceMount, container, ...contentProps } = extractProps(\n { ...props, size: sizeProp, variant: variantProp, highContrast: highContrastProp },\n comboboxContentPropDefs,\n );\n const resolvedColor = color || ctx.color || themeContext.accentColor;\n\n const contentContextValue = React.useMemo<ComboboxContentContextValue>(\n () => ({\n variant: variantProp,\n size: String(sizeProp),\n color: resolvedColor,\n material: effectiveMaterial,\n highContrast: highContrastProp,\n loop: cmdkConfigRef?.current.loop,\n shouldFilter: cmdkConfigRef?.current.shouldFilter,\n filter: cmdkConfigRef?.current.filter,\n }),\n [variantProp, sizeProp, resolvedColor, effectiveMaterial, highContrastProp, cmdkConfigRef],\n );\n\n return (\n <Popover.Content\n size={sizeProp}\n data-accent-color={resolvedColor}\n data-material={effectiveMaterial}\n data-panel-background={effectiveMaterial}\n align=\"start\"\n sideOffset={4}\n collisionPadding={10}\n {...contentProps}\n forceMount={forceMount === true ? true : undefined}\n container={container}\n ref={forwardedRef}\n className={classNames('rt-PopperContent', 'rt-BaseMenuContent', 'rt-ComboboxContent', className)}\n >\n <Theme asChild>\n <ComboboxContentContext.Provider value={contentContextValue}>\n <CommandPrimitive\n loop={cmdkConfigRef?.current.loop}\n shouldFilter={cmdkConfigRef?.current.shouldFilter}\n filter={cmdkConfigRef?.current.filter}\n className=\"rt-ComboboxCommand\"\n >\n {children}\n </CommandPrimitive>\n </ComboboxContentContext.Provider>\n </Theme>\n </Popover.Content>\n );\n});\nComboboxContent.displayName = 'Combobox.Content';\n\n// ============================================================================\n// Input\n// ============================================================================\n\ntype ComboboxInputElement = React.ElementRef<typeof CommandPrimitive.Input>;\ninterface ComboboxInputProps extends Omit<React.ComponentPropsWithoutRef<typeof CommandPrimitive.Input>, 'value' | 'onValueChange'> {\n startAdornment?: React.ReactNode;\n endAdornment?: React.ReactNode;\n variant?: TextFieldVariant;\n value?: string;\n onValueChange?: (value: string) => void;\n}\n\nconst ComboboxInput = React.forwardRef<ComboboxInputElement, ComboboxInputProps>(\n ({ className, startAdornment, endAdornment, placeholder, variant: inputVariant, value, onValueChange, ...inputProps }, forwardedRef) => {\n const ctx = useComboboxContext('Input');\n const contentContext = useComboboxContentContext();\n const cmdkConfigRef = React.useContext(CmdkConfigContext);\n\n const contentVariant = contentContext?.variant ?? 'solid';\n const textFieldVariant = inputVariant ?? (contentVariant === 'solid' ? 'surface' : 'soft');\n\n // Use controlled search value from ref (avoids context re-renders)\n const searchValue = value ?? cmdkConfigRef?.current.searchValue ?? '';\n const handleSearchChange = onValueChange ?? cmdkConfigRef?.current.setSearchValue;\n\n // Use size from contentContext (already resolved to string) or fallback\n const sizeClass = contentContext?.size ? `rt-r-size-${contentContext.size}` : undefined;\n\n const inputField = (\n <div\n className={classNames('rt-TextFieldRoot', 'rt-ComboboxInputRoot', sizeClass, `rt-variant-${textFieldVariant}`)}\n data-accent-color={contentContext?.color}\n data-material={contentContext?.material}\n data-panel-background={contentContext?.material}\n >\n {startAdornment ? <div className=\"rt-TextFieldSlot\">{startAdornment}</div> : null}\n <CommandPrimitive.Input\n {...inputProps}\n ref={forwardedRef}\n value={searchValue}\n onValueChange={handleSearchChange}\n placeholder={placeholder ?? ctx.searchPlaceholder}\n className={classNames('rt-reset', 'rt-TextFieldInput', className)}\n />\n {endAdornment ? (\n <div className=\"rt-TextFieldSlot\" data-side=\"right\">\n {endAdornment}\n </div>\n ) : null}\n </div>\n );\n\n return contentContext ? <div className=\"rt-ComboboxSearch\">{inputField}</div> : inputField;\n },\n);\nComboboxInput.displayName = 'Combobox.Input';\n\n// ============================================================================\n// List (simplified - no MutationObserver, no ScrollArea wrapper)\n// ============================================================================\n\ntype ComboboxListElement = React.ElementRef<typeof CommandPrimitive.List>;\ninterface ComboboxListProps extends React.ComponentPropsWithoutRef<typeof CommandPrimitive.List> {}\n\nconst ComboboxList = React.forwardRef<ComboboxListElement, ComboboxListProps>(({ className, children, ...listProps }, forwardedRef) => {\n const ctx = useComboboxContext('List');\n return (\n <div className=\"rt-ComboboxScrollArea\">\n <div className={classNames('rt-BaseMenuViewport', 'rt-ComboboxViewport')}>\n <CommandPrimitive.List\n {...listProps}\n id={ctx.listboxId}\n ref={forwardedRef}\n role=\"listbox\"\n aria-label=\"Options\"\n className={classNames('rt-ComboboxList', className)}\n >\n {children}\n </CommandPrimitive.List>\n </div>\n </div>\n );\n});\nComboboxList.displayName = 'Combobox.List';\n\n// ============================================================================\n// Empty\n// ============================================================================\n\ntype ComboboxEmptyElement = React.ElementRef<typeof CommandPrimitive.Empty>;\ninterface ComboboxEmptyProps extends React.ComponentPropsWithoutRef<typeof CommandPrimitive.Empty> {}\n\nconst ComboboxEmpty = React.forwardRef<ComboboxEmptyElement, ComboboxEmptyProps>(({ className, ...emptyProps }, forwardedRef) => (\n <CommandPrimitive.Empty {...emptyProps} ref={forwardedRef} className={classNames('rt-ComboboxEmpty', className)} />\n));\nComboboxEmpty.displayName = 'Combobox.Empty';\n\n// ============================================================================\n// Group\n// ============================================================================\n\ntype ComboboxGroupElement = React.ElementRef<typeof CommandPrimitive.Group>;\ninterface ComboboxGroupProps extends React.ComponentPropsWithoutRef<typeof CommandPrimitive.Group> {}\n\nconst ComboboxGroup = React.forwardRef<ComboboxGroupElement, ComboboxGroupProps>(({ className, ...groupProps }, forwardedRef) => (\n <CommandPrimitive.Group {...groupProps} ref={forwardedRef} className={classNames('rt-BaseMenuGroup', 'rt-ComboboxGroup', className)} />\n));\nComboboxGroup.displayName = 'Combobox.Group';\n\n// ============================================================================\n// Label\n// ============================================================================\n\ntype ComboboxLabelElement = React.ElementRef<'div'>;\ninterface ComboboxLabelProps extends React.ComponentPropsWithoutRef<'div'> {}\n\nconst ComboboxLabel = React.forwardRef<ComboboxLabelElement, ComboboxLabelProps>(({ className, ...labelProps }, forwardedRef) => (\n <div {...labelProps} ref={forwardedRef} className={classNames('rt-BaseMenuLabel', 'rt-ComboboxLabel', className)} />\n));\nComboboxLabel.displayName = 'Combobox.Label';\n\n// ============================================================================\n// Separator\n// ============================================================================\n\ntype ComboboxSeparatorElement = React.ElementRef<typeof CommandPrimitive.Separator>;\ninterface ComboboxSeparatorProps extends React.ComponentPropsWithoutRef<typeof CommandPrimitive.Separator> {}\n\nconst ComboboxSeparator = React.forwardRef<ComboboxSeparatorElement, ComboboxSeparatorProps>(({ className, ...separatorProps }, forwardedRef) => (\n <CommandPrimitive.Separator {...separatorProps} ref={forwardedRef} className={classNames('rt-BaseMenuSeparator', 'rt-ComboboxSeparator', className)} />\n));\nComboboxSeparator.displayName = 'Combobox.Separator';\n\n// ============================================================================\n// Item (simplified - minimal context usage)\n// ============================================================================\n\ntype ComboboxItemElement = React.ElementRef<typeof CommandPrimitive.Item>;\ninterface ComboboxItemProps extends Omit<React.ComponentPropsWithoutRef<typeof CommandPrimitive.Item>, 'keywords' | 'onSelect'> {\n /** Display label for search. Falls back to children text content. */\n label?: string;\n /** Additional keywords for search filtering. */\n keywords?: string[];\n /** Called when item is selected. */\n onSelect?: (value: string) => void;\n}\n\nconst ComboboxItem = React.forwardRef<ComboboxItemElement, ComboboxItemProps>(\n ({ className, children, label, value, disabled, onSelect, keywords, ...itemProps }, forwardedRef) => {\n const ctx = useComboboxContext('Item');\n const contentContext = useComboboxContentContext();\n\n const isSelected = value != null && ctx.value === value;\n const isDisabled = disabled ?? ctx.disabled ?? false;\n const sizeClass = contentContext?.size ? `rt-r-size-${contentContext.size}` : undefined;\n\n // Extract stable onSelect to avoid depending on entire ctx object\n const onSelectFromContext = ctx.onSelect;\n\n // Handle selection\n const handleSelect = React.useCallback(() => {\n if (value != null) {\n onSelectFromContext(value);\n onSelect?.(value);\n }\n }, [onSelectFromContext, value, onSelect]);\n\n // Use provided keywords or label for search\n const searchKeywords = keywords ?? (label ? [label] : undefined);\n\n return (\n <CommandPrimitive.Item\n {...itemProps}\n value={value}\n keywords={searchKeywords}\n role=\"option\"\n aria-selected={isSelected}\n disabled={isDisabled || undefined}\n ref={forwardedRef}\n onSelect={handleSelect}\n className={classNames('rt-reset', 'rt-BaseMenuItem', 'rt-ComboboxItem', className)}\n >\n {isSelected ? (\n <span className={classNames('rt-BaseMenuItemIndicator', 'rt-ComboboxItemIndicator', sizeClass)}>\n <ThickCheckIcon className={classNames('rt-BaseMenuItemIndicatorIcon', 'rt-ComboboxItemIndicatorIcon', sizeClass)} />\n </span>\n ) : null}\n <Slottable>{children}</Slottable>\n </CommandPrimitive.Item>\n );\n },\n);\nComboboxItem.displayName = 'Combobox.Item';\n\n// ============================================================================\n// Exports\n// ============================================================================\n\nexport {\n ComboboxRoot as Root,\n ComboboxTrigger as Trigger,\n ComboboxValue as Value,\n ComboboxContent as Content,\n ComboboxInput as Input,\n ComboboxList as List,\n ComboboxEmpty as Empty,\n ComboboxGroup as Group,\n ComboboxLabel as Label,\n ComboboxSeparator as Separator,\n ComboboxItem as Item,\n};\n\nexport type {\n ComboboxRootProps as RootProps,\n ComboboxTriggerProps as TriggerProps,\n ComboboxValueProps as ValueProps,\n ComboboxContentProps as ContentProps,\n ComboboxInputProps as InputProps,\n ComboboxListProps as ListProps,\n ComboboxEmptyProps as EmptyProps,\n ComboboxGroupProps as GroupProps,\n ComboboxLabelProps as LabelProps,\n ComboboxSeparatorProps as SeparatorProps,\n ComboboxItemProps as ItemProps,\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["combobox_exports", "__export", "ComboboxContent", "ComboboxEmpty", "ComboboxGroup", "ComboboxInput", "ComboboxItem", "ComboboxLabel", "ComboboxList", "ComboboxRoot", "ComboboxSeparator", "ComboboxTrigger", "ComboboxValue", "React", "classNames", "useControllableState", "CommandPrimitive", "ComboboxContext", "useComboboxContext", "componentName", "ctx", "name", "ComboboxContentContext", "useComboboxContentContext", "ComboboxRoot", "props", "children", "size", "comboboxRootPropDefs", "highContrast", "valueProp", "defaultValue", "onValueChange", "openProp", "defaultOpen", "onOpenChange", "placeholder", "searchPlaceholder", "searchValueProp", "defaultSearchValue", "onSearchValueChange", "filter", "shouldFilter", "loop", "disabled", "resetSearchOnSelect", "color", "displayValueProp", "rootProps", "listboxId", "open", "setOpen", "useControllableState", "value", "setValue", "searchValue", "setSearchValue", "resolvedDisplayValue", "onSelect", "nextValue", "contextValue", "cmdkConfigRef", "CmdkConfigContext", "PopoverRoot", "ComboboxTrigger", "forwardedRef", "className", "readOnly", "error", "loading", "radius", "triggerProps", "extractProps", "comboboxTriggerPropDefs", "marginPropDefs", "material", "panelBackground", "isDisabled", "resolvedColor", "defaultContent", "ChevronDownIcon", "buttonType", "restTriggerProps", "PopoverTrigger", "classNames", "requireReactElement", "ComboboxValue", "valueProps", "display", "ComboboxContent", "themeContext", "useThemeContext", "effectiveMaterial", "sizeProp", "comboboxContentPropDefs", "variantProp", "highContrastProp", "forceMount", "container", "contentProps", "contentContextValue", "PopoverContent", "Theme", "CommandPrimitive", "ComboboxInput", "startAdornment", "endAdornment", "inputVariant", "inputProps", "contentContext", "contentVariant", "textFieldVariant", "handleSearchChange", "sizeClass", "inputField", "ComboboxList", "listProps", "ComboboxEmpty", "emptyProps", "ComboboxGroup", "groupProps", "ComboboxLabel", "labelProps", "ComboboxSeparator", "separatorProps", "ComboboxItem", "label", "keywords", "itemProps", "isSelected", "onSelectFromContext", "handleSelect", "searchKeywords", "ThickCheckIcon", "Slottable"]
|
|
7
|
-
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as h}from"./chunk-E67CIG6A.js";import{a as b}from"./chunk-GJSGKE7B.js";import{b as I,d as k}from"./chunk-IX5HIHVI.js";import{a as G}from"./chunk-MJJ7XDIP.js";import{b as E,c as R}from"./chunk-YUP6EICB.js";import{a as v}from"./chunk-5TXQLK4G.js";import{a as f}from"./chunk-6FLLFCBU.js";import{b as p,d as y,e as T,f as N}from"./chunk-HUKPWYG2.js";import{a as J}from"./chunk-3XT5P2HO.js";var Q={};J(Q,{CheckboxItem:()=>A,Content:()=>D,Group:()=>V,Item:()=>O,Label:()=>L,RadioGroup:()=>z,RadioItem:()=>_,Root:()=>B,Separator:()=>q,Sub:()=>K,SubContent:()=>F,SubTrigger:()=>j,Trigger:()=>w});import*as e from"react";import s from"classnames";import{ContextMenu as r,Slot as g}from"radix-ui";var B=t=>e.createElement(r.Root,{...t});B.displayName="ContextMenu.Root";var w=e.forwardRef(({children:t,...n},o)=>e.createElement(r.Trigger,{...n,ref:o,asChild:!0},G(t)));w.displayName="ContextMenu.Trigger";var W=e.createContext({}),D=e.forwardRef((t,n)=>{let o=E();v(t.panelBackground);let u=t.material??t.panelBackground??o.panelBackground,a=e.useMemo(()=>({material:u,accentColor:o.accentColor}),[u,o.accentColor]),{size:i=p.size.default,variant:C=p.variant.default,highContrast:c=p.highContrast.default,material:m=a.material}=t,{className:x,children:M,color:l,container:S,forceMount:d,material:U,panelBackground:X,...H}=f(t,p),P=e.useMemo(()=>l||a.accentColor,[l,a.accentColor]);return e.createElement(r.Portal,{container:S,forceMount:d},e.createElement(R,{asChild:!0},e.createElement(r.Content,{"data-accent-color":P,"data-material":m,"data-panel-background":m,alignOffset:-Number(i)*4,collisionPadding:10,...H,asChild:!1,ref:n,className:s("rt-PopperContent","rt-BaseMenuContent","rt-ContextMenuContent",x)},e.createElement(b,{type:"auto"},e.createElement("div",{className:s("rt-BaseMenuViewport","rt-ContextMenuViewport")},e.createElement(W.Provider,{value:e.useMemo(()=>({size:i,variant:C,color:P,highContrast:c,material:m}),[i,C,P,c,m])},M))))))});D.displayName="ContextMenu.Content";var L=e.forwardRef(({className:t,...n},o)=>e.createElement(r.Label,{...n,asChild:!1,ref:o,className:s("rt-BaseMenuLabel","rt-ContextMenuLabel",t)}));L.displayName="ContextMenu.Label";var O=e.forwardRef((t,n)=>{let{className:o,children:u,color:a=y.color.default,shortcut:i,...C}=t;return e.createElement(r.Item,{"data-accent-color":a,...C,ref:n,className:s("rt-reset","rt-BaseMenuItem","rt-ContextMenuItem",o)},e.createElement(g.Slottable,null,u),i&&e.createElement("div",{className:"rt-BaseMenuShortcut rt-ContextMenuShortcut"},e.createElement(h,{size:"1"},i)))});O.displayName="ContextMenu.Item";var V=e.forwardRef(({className:t,...n},o)=>e.createElement(r.Group,{...n,asChild:!1,ref:o,className:s("rt-BaseMenuGroup","rt-ContextMenuGroup",t)}));V.displayName="ContextMenu.Group";var z=e.forwardRef(({className:t,...n},o)=>e.createElement(r.RadioGroup,{...n,asChild:!1,ref:o,className:s("rt-BaseMenuRadioGroup","rt-ContextMenuRadioGroup",t)}));z.displayName="ContextMenu.RadioGroup";var _=e.forwardRef((t,n)=>{let{children:o,className:u,color:a=N.color.default,...i}=t;return e.createElement(r.RadioItem,{...i,asChild:!1,ref:n,"data-accent-color":a,className:s("rt-BaseMenuItem","rt-BaseMenuRadioItem","rt-ContextMenuItem","rt-ContextMenuRadioItem",u)},e.createElement(g.Slottable,null,o),e.createElement(r.ItemIndicator,{className:"rt-BaseMenuItemIndicator rt-ContextMenuItemIndicator"},e.createElement(I,{className:"rt-BaseMenuItemIndicatorIcon rt-ContextMenuItemIndicatorIcon"})))});_.displayName="ContextMenu.RadioItem";var A=e.forwardRef((t,n)=>{let{children:o,className:u,shortcut:a,color:i=T.color.default,...C}=t;return e.createElement(r.CheckboxItem,{...C,asChild:!1,ref:n,"data-accent-color":i,className:s("rt-BaseMenuItem","rt-BaseMenuCheckboxItem","rt-ContextMenuItem","rt-ContextMenuCheckboxItem",u)},e.createElement(g.Slottable,null,o),e.createElement(r.ItemIndicator,{className:"rt-BaseMenuItemIndicator rt-ContextMenuItemIndicator"},e.createElement(I,{className:"rt-BaseMenuItemIndicatorIcon rt-ContextMenuItemIndicatorIcon"})),a&&e.createElement("div",{className:"rt-BaseMenuShortcut rt-ContextMenuShortcut"},e.createElement(h,{size:"1"},a)))});A.displayName="ContextMenu.CheckboxItem";var K=t=>e.createElement(r.Sub,{...t});K.displayName="ContextMenu.Sub";var j=e.forwardRef((t,n)=>{let{className:o,children:u,...a}=t;return e.createElement(r.SubTrigger,{...a,asChild:!1,ref:n,className:s("rt-BaseMenuItem","rt-BaseMenuSubTrigger","rt-ContextMenuItem","rt-ContextMenuSubTrigger",o)},u,e.createElement("div",{className:"rt-BaseMenuShortcut rt-ContextMenuShortcut"},e.createElement(k,{className:"rt-BaseMenuSubTriggerIcon rt-ContextMenuSubTriggerIcon"})))});j.displayName="ContextMenu.SubTrigger";var F=e.forwardRef((t,n)=>{let{size:o,variant:u,color:a,highContrast:i,material:C}=e.useContext(W),{className:c,children:m,container:x,forceMount:M,material:l,panelBackground:S,...d}=f({size:o,variant:u,color:a,highContrast:i,material:C,...t},p);return e.createElement(r.Portal,{container:x,forceMount:M},e.createElement(R,{asChild:!0},e.createElement(r.SubContent,{"data-accent-color":a,"data-material":C,"data-panel-background":C,alignOffset:-Number(o)*4,sideOffset:1,collisionPadding:10,...d,asChild:!1,ref:n,className:s("rt-PopperContent","rt-BaseMenuContent","rt-BaseMenuSubContent","rt-ContextMenuContent","rt-ContextMenuSubContent",c)},e.createElement(b,{type:"auto"},e.createElement("div",{className:s("rt-BaseMenuViewport","rt-ContextMenuViewport")},m)))))});F.displayName="ContextMenu.SubContent";var q=e.forwardRef(({className:t,...n},o)=>e.createElement(r.Separator,{...n,asChild:!1,ref:o,className:s("rt-BaseMenuSeparator","rt-ContextMenuSeparator",t)}));q.displayName="ContextMenu.Separator";export{B as a,w as b,D as c,L as d,O as e,V as f,z as g,_ as h,A as i,K as j,j as k,F as l,q as m,Q as n};
|
|
2
|
-
//# sourceMappingURL=chunk-YEB3H7QN.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/components/context-menu.tsx"],
|
|
4
|
-
"sourcesContent": ["/**\n * Context Menu component that provides right-click menu functionality.\n * Requires client-side rendering due to event handling and portal usage.\n */\n'use client';\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { ContextMenu as ContextMenuPrimitive, Slot } from 'radix-ui';\n\nimport { ScrollArea } from './scroll-area.js';\nimport {\n contextMenuContentPropDefs,\n contextMenuItemPropDefs,\n contextMenuCheckboxItemPropDefs,\n contextMenuRadioItemPropDefs,\n} from './context-menu.props.js';\nimport { Theme, useThemeContext } from './theme.js';\nimport { ThickCheckIcon, ThickChevronRightIcon } from './icons.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport { requireReactElement } from '../helpers/require-react-element.js';\nimport { Kbd } from './kbd.js';\n\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { GetPropDefTypes } from '../props/prop-def.js';\nimport { useDeprecatedPanelBackgroundWarning } from '../helpers/use-deprecation-warning.js';\n\ninterface ContextMenuRootProps\n extends React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Root> {}\nconst ContextMenuRoot: React.FC<ContextMenuRootProps> = (props) => (\n <ContextMenuPrimitive.Root {...props} />\n);\nContextMenuRoot.displayName = 'ContextMenu.Root';\n\ntype ContextMenuTriggerElement = React.ElementRef<typeof ContextMenuPrimitive.Trigger>;\ninterface ContextMenuTriggerProps\n extends ComponentPropsWithout<typeof ContextMenuPrimitive.Trigger, RemovedProps> {}\nconst ContextMenuTrigger = React.forwardRef<ContextMenuTriggerElement, ContextMenuTriggerProps>(\n ({ children, ...props }, forwardedRef) => (\n <ContextMenuPrimitive.Trigger {...props} ref={forwardedRef} asChild>\n {requireReactElement(children)}\n </ContextMenuPrimitive.Trigger>\n ),\n);\nContextMenuTrigger.displayName = 'ContextMenu.Trigger';\n\ntype ContextMenuContentOwnProps = GetPropDefTypes<typeof contextMenuContentPropDefs>;\ntype ContextMenuContentContextValue = ContextMenuContentOwnProps;\nconst ContextMenuContentContext = React.createContext<ContextMenuContentContextValue>({});\ntype ContextMenuContentElement = React.ElementRef<typeof ContextMenuPrimitive.Content>;\ninterface ContextMenuContentProps\n extends ComponentPropsWithout<typeof ContextMenuPrimitive.Content, RemovedProps>,\n ContextMenuContentContextValue {\n container?: React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Portal>['container'];\n}\nconst ContextMenuContent = React.forwardRef<ContextMenuContentElement, ContextMenuContentProps>(\n (props, forwardedRef) => {\n const themeContext = useThemeContext();\n\n useDeprecatedPanelBackgroundWarning(props.panelBackground);\n\n // Material takes precedence over panelBackground\n const effectiveMaterial =\n props.material ?? props.panelBackground ?? themeContext.panelBackground;\n\n // Memoize theme context values to prevent unnecessary re-renders\n const memoizedThemeContext = React.useMemo(\n () => ({\n material: effectiveMaterial,\n accentColor: themeContext.accentColor,\n }),\n [effectiveMaterial, themeContext.accentColor],\n );\n\n const {\n size = contextMenuContentPropDefs.size.default,\n variant = contextMenuContentPropDefs.variant.default,\n highContrast = contextMenuContentPropDefs.highContrast.default,\n material = memoizedThemeContext.material,\n } = props;\n const {\n className,\n children,\n color,\n container,\n forceMount,\n material: _,\n panelBackground: __,\n ...contentProps\n } = extractProps(props, contextMenuContentPropDefs);\n\n // Memoize color resolution to prevent unnecessary re-renders\n const resolvedColor = React.useMemo(\n () => color || memoizedThemeContext.accentColor,\n [color, memoizedThemeContext.accentColor],\n );\n return (\n <ContextMenuPrimitive.Portal container={container} forceMount={forceMount}>\n <Theme asChild>\n <ContextMenuPrimitive.Content\n data-accent-color={resolvedColor}\n data-material={material}\n data-panel-background={material}\n alignOffset={-Number(size) * 4}\n collisionPadding={10}\n {...contentProps}\n asChild={false}\n ref={forwardedRef}\n className={classNames(\n 'rt-PopperContent',\n 'rt-BaseMenuContent',\n 'rt-ContextMenuContent',\n className,\n )}\n >\n <ScrollArea type=\"auto\">\n <div className={classNames('rt-BaseMenuViewport', 'rt-ContextMenuViewport')}>\n <ContextMenuContentContext.Provider\n value={React.useMemo(\n () => ({ size, variant, color: resolvedColor, highContrast, material }),\n [size, variant, resolvedColor, highContrast, material],\n )}\n >\n {children}\n </ContextMenuContentContext.Provider>\n </div>\n </ScrollArea>\n </ContextMenuPrimitive.Content>\n </Theme>\n </ContextMenuPrimitive.Portal>\n );\n },\n);\nContextMenuContent.displayName = 'ContextMenu.Content';\n\ntype ContextMenuLabelElement = React.ElementRef<typeof ContextMenuPrimitive.Label>;\ninterface ContextMenuLabelProps\n extends ComponentPropsWithout<typeof ContextMenuPrimitive.Label, RemovedProps> {}\nconst ContextMenuLabel = React.forwardRef<ContextMenuLabelElement, ContextMenuLabelProps>(\n ({ className, ...props }, forwardedRef) => (\n <ContextMenuPrimitive.Label\n {...props}\n asChild={false}\n ref={forwardedRef}\n className={classNames('rt-BaseMenuLabel', 'rt-ContextMenuLabel', className)}\n />\n ),\n);\nContextMenuLabel.displayName = 'ContextMenu.Label';\n\ntype ContextMenuItemElement = React.ElementRef<typeof ContextMenuPrimitive.Item>;\ntype ContextMenuItemOwnProps = GetPropDefTypes<typeof contextMenuItemPropDefs>;\ninterface ContextMenuItemProps\n extends ComponentPropsWithout<typeof ContextMenuPrimitive.Item, RemovedProps>,\n ContextMenuItemOwnProps {}\nconst ContextMenuItem = React.forwardRef<ContextMenuItemElement, ContextMenuItemProps>(\n (props, forwardedRef) => {\n const {\n className,\n children,\n color = contextMenuItemPropDefs.color.default,\n shortcut,\n ...itemProps\n } = props;\n return (\n <ContextMenuPrimitive.Item\n data-accent-color={color}\n {...itemProps}\n ref={forwardedRef}\n className={classNames('rt-reset', 'rt-BaseMenuItem', 'rt-ContextMenuItem', className)}\n >\n <Slot.Slottable>{children}</Slot.Slottable>\n {shortcut && (\n <div className=\"rt-BaseMenuShortcut rt-ContextMenuShortcut\">\n <Kbd size=\"1\">{shortcut}</Kbd>\n </div>\n )}\n </ContextMenuPrimitive.Item>\n );\n },\n);\nContextMenuItem.displayName = 'ContextMenu.Item';\n\ntype ContextMenuGroupElement = React.ElementRef<typeof ContextMenuPrimitive.Group>;\ninterface ContextMenuGroupProps\n extends ComponentPropsWithout<typeof ContextMenuPrimitive.Group, RemovedProps> {}\nconst ContextMenuGroup = React.forwardRef<ContextMenuGroupElement, ContextMenuGroupProps>(\n ({ className, ...props }, forwardedRef) => (\n <ContextMenuPrimitive.Group\n {...props}\n asChild={false}\n ref={forwardedRef}\n className={classNames('rt-BaseMenuGroup', 'rt-ContextMenuGroup', className)}\n />\n ),\n);\nContextMenuGroup.displayName = 'ContextMenu.Group';\n\ntype ContextMenuRadioGroupElement = React.ElementRef<typeof ContextMenuPrimitive.RadioGroup>;\ninterface ContextMenuRadioGroupProps\n extends ComponentPropsWithout<typeof ContextMenuPrimitive.RadioGroup, RemovedProps> {}\nconst ContextMenuRadioGroup = React.forwardRef<\n ContextMenuRadioGroupElement,\n ContextMenuRadioGroupProps\n>(({ className, ...props }, forwardedRef) => (\n <ContextMenuPrimitive.RadioGroup\n {...props}\n asChild={false}\n ref={forwardedRef}\n className={classNames('rt-BaseMenuRadioGroup', 'rt-ContextMenuRadioGroup', className)}\n />\n));\nContextMenuRadioGroup.displayName = 'ContextMenu.RadioGroup';\n\ntype ContextMenuRadioItemElement = React.ElementRef<typeof ContextMenuPrimitive.RadioItem>;\ntype ContextMenuRadioItemOwnProps = GetPropDefTypes<typeof contextMenuRadioItemPropDefs>;\ninterface ContextMenuRadioItemProps\n extends ComponentPropsWithout<typeof ContextMenuPrimitive.RadioItem, RemovedProps>,\n ContextMenuRadioItemOwnProps {}\nconst ContextMenuRadioItem = React.forwardRef<\n ContextMenuRadioItemElement,\n ContextMenuRadioItemProps\n>((props, forwardedRef) => {\n const {\n children,\n className,\n color = contextMenuRadioItemPropDefs.color.default,\n ...itemProps\n } = props;\n return (\n <ContextMenuPrimitive.RadioItem\n {...itemProps}\n asChild={false}\n ref={forwardedRef}\n data-accent-color={color}\n className={classNames(\n 'rt-BaseMenuItem',\n 'rt-BaseMenuRadioItem',\n 'rt-ContextMenuItem',\n 'rt-ContextMenuRadioItem',\n className,\n )}\n >\n <Slot.Slottable>{children}</Slot.Slottable>\n <ContextMenuPrimitive.ItemIndicator className=\"rt-BaseMenuItemIndicator rt-ContextMenuItemIndicator\">\n <ThickCheckIcon className=\"rt-BaseMenuItemIndicatorIcon rt-ContextMenuItemIndicatorIcon\" />\n </ContextMenuPrimitive.ItemIndicator>\n </ContextMenuPrimitive.RadioItem>\n );\n});\nContextMenuRadioItem.displayName = 'ContextMenu.RadioItem';\n\ntype ContextMenuCheckboxItemElement = React.ElementRef<typeof ContextMenuPrimitive.CheckboxItem>;\ntype ContextMenuCheckboxItemOwnProps = GetPropDefTypes<typeof contextMenuCheckboxItemPropDefs>;\ninterface ContextMenuCheckboxItemProps\n extends ComponentPropsWithout<typeof ContextMenuPrimitive.CheckboxItem, RemovedProps>,\n ContextMenuCheckboxItemOwnProps {}\nconst ContextMenuCheckboxItem = React.forwardRef<\n ContextMenuCheckboxItemElement,\n ContextMenuCheckboxItemProps\n>((props, forwardedRef) => {\n const {\n children,\n className,\n shortcut,\n color = contextMenuCheckboxItemPropDefs.color.default,\n ...itemProps\n } = props;\n return (\n <ContextMenuPrimitive.CheckboxItem\n {...itemProps}\n asChild={false}\n ref={forwardedRef}\n data-accent-color={color}\n className={classNames(\n 'rt-BaseMenuItem',\n 'rt-BaseMenuCheckboxItem',\n 'rt-ContextMenuItem',\n 'rt-ContextMenuCheckboxItem',\n className,\n )}\n >\n <Slot.Slottable>{children}</Slot.Slottable>\n <ContextMenuPrimitive.ItemIndicator className=\"rt-BaseMenuItemIndicator rt-ContextMenuItemIndicator\">\n <ThickCheckIcon className=\"rt-BaseMenuItemIndicatorIcon rt-ContextMenuItemIndicatorIcon\" />\n </ContextMenuPrimitive.ItemIndicator>\n {shortcut && (\n <div className=\"rt-BaseMenuShortcut rt-ContextMenuShortcut\">\n <Kbd size=\"1\">{shortcut}</Kbd>\n </div>\n )}\n </ContextMenuPrimitive.CheckboxItem>\n );\n});\nContextMenuCheckboxItem.displayName = 'ContextMenu.CheckboxItem';\n\ninterface ContextMenuSubProps\n extends ComponentPropsWithout<typeof ContextMenuPrimitive.Sub, RemovedProps> {}\nconst ContextMenuSub: React.FC<ContextMenuSubProps> = (props) => (\n <ContextMenuPrimitive.Sub {...props} />\n);\nContextMenuSub.displayName = 'ContextMenu.Sub';\n\ntype ContextMenuSubTriggerElement = React.ElementRef<typeof ContextMenuPrimitive.SubTrigger>;\ninterface ContextMenuSubTriggerProps\n extends ComponentPropsWithout<typeof ContextMenuPrimitive.SubTrigger, RemovedProps> {}\nconst ContextMenuSubTrigger = React.forwardRef<\n ContextMenuSubTriggerElement,\n ContextMenuSubTriggerProps\n>((props, forwardedRef) => {\n const { className, children, ...subTriggerProps } = props;\n return (\n <ContextMenuPrimitive.SubTrigger\n {...subTriggerProps}\n asChild={false}\n ref={forwardedRef}\n className={classNames(\n 'rt-BaseMenuItem',\n 'rt-BaseMenuSubTrigger',\n 'rt-ContextMenuItem',\n 'rt-ContextMenuSubTrigger',\n className,\n )}\n >\n {children}\n <div className=\"rt-BaseMenuShortcut rt-ContextMenuShortcut\">\n <ThickChevronRightIcon className=\"rt-BaseMenuSubTriggerIcon rt-ContextMenuSubTriggerIcon\" />\n </div>\n </ContextMenuPrimitive.SubTrigger>\n );\n});\nContextMenuSubTrigger.displayName = 'ContextMenu.SubTrigger';\n\ntype ContextMenuSubContentElement = React.ElementRef<typeof ContextMenuPrimitive.SubContent>;\ninterface ContextMenuSubContentProps\n extends ComponentPropsWithout<typeof ContextMenuPrimitive.SubContent, RemovedProps>,\n ContextMenuContentContextValue {\n container?: React.ComponentPropsWithoutRef<typeof ContextMenuPrimitive.Portal>['container'];\n}\nconst ContextMenuSubContent = React.forwardRef<\n ContextMenuSubContentElement,\n ContextMenuSubContentProps\n>((props, forwardedRef) => {\n const { size, variant, color, highContrast, material } = React.useContext(ContextMenuContentContext);\n\n const {\n className,\n children,\n container,\n forceMount,\n material: _,\n panelBackground: __,\n ...subContentProps\n } = extractProps(\n { size, variant, color, highContrast, material, ...props },\n contextMenuContentPropDefs,\n );\n return (\n <ContextMenuPrimitive.Portal container={container} forceMount={forceMount}>\n <Theme asChild>\n <ContextMenuPrimitive.SubContent\n data-accent-color={color}\n data-material={material}\n data-panel-background={material}\n alignOffset={-Number(size) * 4}\n // Side offset accounts for the outer solid box-shadow\n sideOffset={1}\n collisionPadding={10}\n {...subContentProps}\n asChild={false}\n ref={forwardedRef}\n className={classNames(\n 'rt-PopperContent',\n 'rt-BaseMenuContent',\n 'rt-BaseMenuSubContent',\n 'rt-ContextMenuContent',\n 'rt-ContextMenuSubContent',\n className,\n )}\n >\n <ScrollArea type=\"auto\">\n <div className={classNames('rt-BaseMenuViewport', 'rt-ContextMenuViewport')}>\n {children}\n </div>\n </ScrollArea>\n </ContextMenuPrimitive.SubContent>\n </Theme>\n </ContextMenuPrimitive.Portal>\n );\n});\nContextMenuSubContent.displayName = 'ContextMenu.SubContent';\n\ntype ContextMenuSeparatorElement = React.ElementRef<typeof ContextMenuPrimitive.Separator>;\ninterface ContextMenuSeparatorProps\n extends ComponentPropsWithout<typeof ContextMenuPrimitive.Separator, RemovedProps> {}\nconst ContextMenuSeparator = React.forwardRef<\n ContextMenuSeparatorElement,\n ContextMenuSeparatorProps\n>(({ className, ...props }, forwardedRef) => (\n <ContextMenuPrimitive.Separator\n {...props}\n asChild={false}\n ref={forwardedRef}\n className={classNames('rt-BaseMenuSeparator', 'rt-ContextMenuSeparator', className)}\n />\n));\nContextMenuSeparator.displayName = 'ContextMenu.Separator';\n\nexport {\n ContextMenuRoot as Root,\n ContextMenuTrigger as Trigger,\n ContextMenuContent as Content,\n ContextMenuLabel as Label,\n ContextMenuItem as Item,\n ContextMenuGroup as Group,\n ContextMenuRadioGroup as RadioGroup,\n ContextMenuRadioItem as RadioItem,\n ContextMenuCheckboxItem as CheckboxItem,\n ContextMenuSub as Sub,\n ContextMenuSubTrigger as SubTrigger,\n ContextMenuSubContent as SubContent,\n ContextMenuSeparator as Separator,\n};\n\nexport type {\n ContextMenuRootProps as RootProps,\n ContextMenuTriggerProps as TriggerProps,\n ContextMenuContentProps as ContentProps,\n ContextMenuLabelProps as LabelProps,\n ContextMenuItemProps as ItemProps,\n ContextMenuGroupProps as GroupProps,\n ContextMenuRadioGroupProps as RadioGroupProps,\n ContextMenuRadioItemProps as RadioItemProps,\n ContextMenuCheckboxItemProps as CheckboxItemProps,\n ContextMenuSubProps as SubProps,\n ContextMenuSubTriggerProps as SubTriggerProps,\n ContextMenuSubContentProps as SubContentProps,\n ContextMenuSeparatorProps as SeparatorProps,\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["context_menu_exports", "__export", "ContextMenuCheckboxItem", "ContextMenuContent", "ContextMenuGroup", "ContextMenuItem", "ContextMenuLabel", "ContextMenuRadioGroup", "ContextMenuRadioItem", "ContextMenuRoot", "ContextMenuSeparator", "ContextMenuSub", "ContextMenuSubContent", "ContextMenuSubTrigger", "ContextMenuTrigger", "React", "classNames", "ContextMenuPrimitive", "Slot", "ContextMenuRoot", "props", "ContextMenuPrimitive", "ContextMenuTrigger", "children", "forwardedRef", "requireReactElement", "ContextMenuContentContext", "ContextMenuContent", "themeContext", "useThemeContext", "useDeprecatedPanelBackgroundWarning", "effectiveMaterial", "memoizedThemeContext", "size", "baseMenuContentPropDefs", "variant", "highContrast", "material", "className", "color", "container", "forceMount", "_", "__", "contentProps", "extractProps", "resolvedColor", "Theme", "classNames", "ScrollArea", "ContextMenuLabel", "ContextMenuItem", "baseMenuItemPropDefs", "shortcut", "itemProps", "Slot", "Kbd", "ContextMenuGroup", "ContextMenuRadioGroup", "ContextMenuRadioItem", "baseMenuRadioItemPropDefs", "ThickCheckIcon", "ContextMenuCheckboxItem", "baseMenuCheckboxItemPropDefs", "ContextMenuSub", "ContextMenuSubTrigger", "subTriggerProps", "ThickChevronRightIcon", "ContextMenuSubContent", "subContentProps", "ContextMenuSeparator"]
|
|
7
|
-
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{a as b}from"./chunk-4XJY6FIK.js";import*as e from"react";function h(n,i,u){if(n==null)return u;if(typeof n!="object")return n;let o=n;if(o[i]!==void 0)return o[i];let t=["xl","lg","md","sm","xs","initial"],a=t.indexOf(i);for(let l=a+1;l<t.length;l++){let r=t[l];if(o[r]!==void 0)return o[r]}return u}var D=e.createContext(null),d=e.createContext(null);function g({children:n,submenuBehavior:i}){let{breakpoint:u,ready:o}=b(),[t,a]=e.useState([]),[l,r]=e.useState(null),s=e.useMemo(()=>h(i,u,"cascade"),[i,u]),p=e.useRef(s);e.useEffect(()=>{p.current==="drill-down"&&s==="cascade"&&(a([]),r(null)),p.current=s},[s]);let f=e.useCallback(c=>{r("forward"),a(v=>[...v,c])},[]),w=e.useCallback(()=>{r("backward"),a(c=>c.slice(0,-1))},[]),x=e.useCallback(()=>{a([]),r(null)},[]),m=e.useMemo(()=>({push:f,pop:w,reset:x}),[f,w,x]),R=e.useCallback(c=>t.length===0?!1:t[t.length-1]===c,[t]),C=e.useMemo(()=>({behavior:s,ready:o,stack:t,isActive:R,isRoot:t.length===0,currentId:t.length>0?t[t.length-1]:null,animationDirection:l}),[s,o,t,R,l]);return e.createElement(D.Provider,{value:m},e.createElement(d.Provider,{value:C},n))}function k(){let n=e.useContext(D);if(!n)throw new Error("useDrillDownActions must be used within a DropdownMenu.Content");return n}function V(){let n=e.useContext(d);if(!n)throw new Error("useDrillDownState must be used within a DropdownMenu.Content");return n}function B(){return e.useContext(D)}function P(){return e.useContext(d)}var S=e.createContext(null);function y(){return e.useContext(S)}export{h as a,D as b,d as c,g as d,k as e,V as f,B as g,P as h,S as i,y as j};
|
|
2
|
-
//# sourceMappingURL=chunk-ZY6SQWHT.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../src/components/_internal/dropdown-menu-drill-down.tsx"],
|
|
4
|
-
"sourcesContent": ["'use client';\n\nimport * as React from 'react';\nimport type { Breakpoint, Responsive } from '../../props/prop-def.js';\nimport type { submenuBehaviors } from './base-menu.props.js';\nimport { useBreakpoint } from '../../hooks/use-breakpoint.js';\n\ntype SubmenuBehavior = (typeof submenuBehaviors)[number];\n\n/**\n * Resolves a responsive value to its current value based on the breakpoint.\n * Falls back through smaller breakpoints if the current one isn't defined.\n */\nfunction resolveResponsiveValue<T>(\n value: T | Partial<Record<Breakpoint, T>> | undefined,\n currentBreakpoint: Breakpoint,\n defaultValue: T\n): T {\n if (value === undefined || value === null) {\n return defaultValue;\n }\n\n // Non-object values are returned directly\n if (typeof value !== 'object') {\n return value;\n }\n\n const map = value as Partial<Record<Breakpoint, T>>;\n\n // Check if current breakpoint has a value\n if (map[currentBreakpoint] !== undefined) {\n return map[currentBreakpoint] as T;\n }\n\n // Fall back through smaller breakpoints\n const bpOrder: Breakpoint[] = ['xl', 'lg', 'md', 'sm', 'xs', 'initial'];\n const startIdx = bpOrder.indexOf(currentBreakpoint);\n\n for (let i = startIdx + 1; i < bpOrder.length; i++) {\n const bp = bpOrder[i];\n if (map[bp] !== undefined) {\n return map[bp] as T;\n }\n }\n\n return defaultValue;\n}\n\n// ============================================================================\n// DrillDown Context\n// ============================================================================\n\ntype AnimationDirection = 'forward' | 'backward' | null;\n\n/**\n * Stable actions context - callbacks that don't change identity.\n * Separated from state to prevent unnecessary re-renders of components\n * that only need to call push/pop/reset.\n */\ninterface DrillDownActionsContextValue {\n /** Navigate into a submenu */\n push: (id: string) => void;\n /** Navigate back to parent menu */\n pop: () => void;\n /** Reset to root menu */\n reset: () => void;\n}\n\n/**\n * Mutable state context - values that change when navigation occurs.\n * Subscribers to this context will re-render on stack changes.\n */\ninterface DrillDownStateContextValue {\n /** Current submenu behavior mode */\n behavior: SubmenuBehavior;\n /** Whether the breakpoint has been resolved (client-side only) */\n ready: boolean;\n /** Stack of active submenu IDs. Empty means root menu is shown. */\n stack: string[];\n /** Check if a specific submenu is the currently active one */\n isActive: (id: string) => boolean;\n /** Check if we're at root level (no submenus open) */\n isRoot: boolean;\n /** The currently active submenu ID (or null if at root) */\n currentId: string | null;\n /** Current animation direction for transitions */\n animationDirection: AnimationDirection;\n}\n\nconst DrillDownActionsContext = React.createContext<DrillDownActionsContextValue | null>(null);\nconst DrillDownStateContext = React.createContext<DrillDownStateContextValue | null>(null);\n\ninterface DrillDownProviderProps {\n children: React.ReactNode;\n submenuBehavior: Responsive<SubmenuBehavior> | undefined;\n}\n\nfunction DrillDownProvider({ children, submenuBehavior }: DrillDownProviderProps) {\n const { breakpoint, ready } = useBreakpoint();\n const [stack, setStack] = React.useState<string[]>([]);\n const [animationDirection, setAnimationDirection] = React.useState<AnimationDirection>(null);\n\n // Resolve the current behavior based on breakpoint\n const behavior = React.useMemo(\n () => resolveResponsiveValue(submenuBehavior, breakpoint, 'cascade'),\n [submenuBehavior, breakpoint]\n );\n\n // Reset stack when behavior changes from drill-down to cascade\n const prevBehaviorRef = React.useRef(behavior);\n React.useEffect(() => {\n if (prevBehaviorRef.current === 'drill-down' && behavior === 'cascade') {\n setStack([]);\n setAnimationDirection(null);\n }\n prevBehaviorRef.current = behavior;\n }, [behavior]);\n\n // Stable action callbacks - these never change identity\n const push = React.useCallback((id: string) => {\n setAnimationDirection('forward');\n setStack((prev) => [...prev, id]);\n }, []);\n\n const pop = React.useCallback(() => {\n setAnimationDirection('backward');\n setStack((prev) => prev.slice(0, -1));\n }, []);\n\n const reset = React.useCallback(() => {\n setStack([]);\n setAnimationDirection(null);\n }, []);\n\n // Memoize actions context value - completely stable, never changes\n const actionsValue = React.useMemo(\n (): DrillDownActionsContextValue => ({ push, pop, reset }),\n [push, pop, reset]\n );\n\n // isActive depends on stack - this is expected to change\n const isActive = React.useCallback(\n (id: string) => {\n if (stack.length === 0) return false;\n return stack[stack.length - 1] === id;\n },\n [stack]\n );\n\n // Memoize state context value - changes when stack/behavior changes\n const stateValue = React.useMemo(\n (): DrillDownStateContextValue => ({\n behavior,\n ready,\n stack,\n isActive,\n isRoot: stack.length === 0,\n currentId: stack.length > 0 ? stack[stack.length - 1] : null,\n animationDirection,\n }),\n [behavior, ready, stack, isActive, animationDirection]\n );\n\n return (\n <DrillDownActionsContext.Provider value={actionsValue}>\n <DrillDownStateContext.Provider value={stateValue}>\n {children}\n </DrillDownStateContext.Provider>\n </DrillDownActionsContext.Provider>\n );\n}\n\n/**\n * Hook to access only the stable action callbacks (push, pop, reset).\n * Use this in components that only need to trigger navigation,\n * not react to state changes. Prevents unnecessary re-renders.\n */\nfunction useDrillDownActions() {\n const ctx = React.useContext(DrillDownActionsContext);\n if (!ctx) {\n throw new Error('useDrillDownActions must be used within a DropdownMenu.Content');\n }\n return ctx;\n}\n\n/**\n * Hook to access drill-down state (behavior, stack, isActive, etc.).\n * Components using this will re-render when navigation state changes.\n */\nfunction useDrillDownState() {\n const ctx = React.useContext(DrillDownStateContext);\n if (!ctx) {\n throw new Error('useDrillDownState must be used within a DropdownMenu.Content');\n }\n return ctx;\n}\n\n/**\n * Optional version of useDrillDownActions for components that may be outside Content.\n */\nfunction useDrillDownActionsOptional() {\n return React.useContext(DrillDownActionsContext);\n}\n\n/**\n * Optional version of useDrillDownState for components that may be outside Content.\n */\nfunction useDrillDownStateOptional() {\n return React.useContext(DrillDownStateContext);\n}\n\n// ============================================================================\n// Sub Context (for individual submenu instances)\n// ============================================================================\n\ninterface SubContextValue {\n /** Unique ID for this submenu */\n id: string;\n /** Label for the back button */\n label: React.ReactNode;\n}\n\nconst SubContext = React.createContext<SubContextValue | null>(null);\n\nfunction useSubContext() {\n return React.useContext(SubContext);\n}\n\nexport {\n DrillDownProvider,\n DrillDownActionsContext,\n DrillDownStateContext,\n SubContext,\n useDrillDownActions,\n useDrillDownActionsOptional,\n useDrillDownState,\n useDrillDownStateOptional,\n useSubContext,\n useBreakpoint,\n resolveResponsiveValue,\n};\n\nexport type {\n SubmenuBehavior,\n DrillDownActionsContextValue,\n DrillDownStateContextValue,\n SubContextValue,\n AnimationDirection,\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["React", "resolveResponsiveValue", "value", "currentBreakpoint", "defaultValue", "map", "bpOrder", "startIdx", "i", "bp", "DrillDownActionsContext", "DrillDownStateContext", "DrillDownProvider", "children", "submenuBehavior", "breakpoint", "ready", "useBreakpoint", "stack", "setStack", "animationDirection", "setAnimationDirection", "behavior", "prevBehaviorRef", "push", "id", "prev", "pop", "reset", "actionsValue", "isActive", "stateValue", "useDrillDownActions", "ctx", "useDrillDownState", "useDrillDownActionsOptional", "useDrillDownStateOptional", "SubContext", "useSubContext"]
|
|
7
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|