@womp/kookie-ui 0.16.0 → 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/codemods/space-0.17.py +71 -0
- package/components.css +2857 -5012
- package/dist/cjs/components/_internal/base-button.d.ts +0 -2
- package/dist/cjs/components/_internal/base-button.d.ts.map +1 -1
- package/dist/cjs/components/_internal/base-button.js +1 -1
- package/dist/cjs/components/_internal/base-button.js.map +4 -4
- package/dist/cjs/components/_internal/base-button.props.d.ts +0 -17
- package/dist/cjs/components/_internal/base-button.props.d.ts.map +1 -1
- package/dist/cjs/components/_internal/base-button.props.js +1 -1
- package/dist/cjs/components/_internal/base-button.props.js.map +3 -3
- package/dist/cjs/components/_internal/base-checkbox.props.d.ts +1 -1
- package/dist/cjs/components/_internal/base-checkbox.props.js +1 -1
- package/dist/cjs/components/_internal/base-checkbox.props.js.map +2 -2
- package/dist/cjs/components/_internal/base-menu.props.d.ts +0 -10
- package/dist/cjs/components/_internal/base-menu.props.d.ts.map +1 -1
- package/dist/cjs/components/_internal/base-menu.props.js +1 -1
- package/dist/cjs/components/_internal/base-menu.props.js.map +3 -3
- package/dist/cjs/components/_internal/base-menu.utils.d.ts +3 -9
- package/dist/cjs/components/_internal/base-menu.utils.d.ts.map +1 -1
- package/dist/cjs/components/_internal/base-menu.utils.js +1 -1
- package/dist/cjs/components/_internal/base-menu.utils.js.map +3 -3
- package/dist/cjs/components/_internal/base-radio.props.d.ts +1 -1
- package/dist/cjs/components/_internal/base-radio.props.js +1 -1
- package/dist/cjs/components/_internal/base-radio.props.js.map +2 -2
- package/dist/cjs/components/_internal/base-tab-list.props.d.ts +0 -5
- package/dist/cjs/components/_internal/base-tab-list.props.d.ts.map +1 -1
- package/dist/cjs/components/_internal/base-tab-list.props.js +1 -1
- package/dist/cjs/components/_internal/base-tab-list.props.js.map +3 -3
- package/dist/cjs/components/_internal/menu-context.d.ts +2 -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/pane-chrome.d.ts +14 -2
- package/dist/cjs/components/_internal/pane-chrome.d.ts.map +1 -1
- package/dist/cjs/components/_internal/pane-chrome.js +1 -1
- package/dist/cjs/components/_internal/pane-chrome.js.map +3 -3
- package/dist/cjs/components/_internal/shell-sidebar.js +1 -1
- package/dist/cjs/components/_internal/shell-sidebar.js.map +3 -3
- package/dist/cjs/components/accordion.d.ts.map +1 -1
- package/dist/cjs/components/accordion.js +1 -1
- package/dist/cjs/components/accordion.js.map +4 -4
- package/dist/cjs/components/accordion.props.d.ts +0 -7
- package/dist/cjs/components/accordion.props.d.ts.map +1 -1
- package/dist/cjs/components/accordion.props.js +1 -1
- package/dist/cjs/components/accordion.props.js.map +3 -3
- package/dist/cjs/components/alert-dialog.d.ts.map +1 -1
- package/dist/cjs/components/alert-dialog.js +1 -1
- package/dist/cjs/components/alert-dialog.js.map +4 -4
- package/dist/cjs/components/alert-dialog.props.d.ts +0 -5
- package/dist/cjs/components/alert-dialog.props.d.ts.map +1 -1
- package/dist/cjs/components/alert-dialog.props.js +1 -1
- package/dist/cjs/components/alert-dialog.props.js.map +3 -3
- package/dist/cjs/components/badge.js +1 -1
- package/dist/cjs/components/badge.js.map +4 -4
- package/dist/cjs/components/badge.props.d.ts +1 -1
- package/dist/cjs/components/badge.props.js +1 -1
- package/dist/cjs/components/badge.props.js.map +1 -1
- package/dist/cjs/components/button.js +2 -2
- package/dist/cjs/components/button.js.map +4 -4
- package/dist/cjs/components/button.props.js +1 -1
- package/dist/cjs/components/button.props.js.map +3 -3
- package/dist/cjs/components/card.d.ts.map +1 -1
- package/dist/cjs/components/card.js +1 -1
- package/dist/cjs/components/card.js.map +3 -3
- package/dist/cjs/components/card.props.d.ts +0 -5
- package/dist/cjs/components/card.props.d.ts.map +1 -1
- package/dist/cjs/components/card.props.js +1 -1
- package/dist/cjs/components/card.props.js.map +3 -3
- package/dist/cjs/components/chatbar.d.ts +0 -2
- 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 +4 -4
- package/dist/cjs/components/checkbox-cards.d.ts.map +1 -1
- package/dist/cjs/components/checkbox-cards.js +1 -1
- package/dist/cjs/components/checkbox-cards.js.map +4 -4
- package/dist/cjs/components/checkbox-cards.props.d.ts +0 -5
- package/dist/cjs/components/checkbox-cards.props.d.ts.map +1 -1
- package/dist/cjs/components/checkbox-cards.props.js +1 -1
- package/dist/cjs/components/checkbox-cards.props.js.map +3 -3
- package/dist/cjs/components/checkbox-group.d.ts.map +1 -1
- package/dist/cjs/components/checkbox-group.js +1 -1
- package/dist/cjs/components/checkbox-group.js.map +4 -4
- package/dist/cjs/components/checkbox-group.props.d.ts +1 -1
- package/dist/cjs/components/checkbox-group.props.js +1 -1
- package/dist/cjs/components/checkbox-group.props.js.map +2 -2
- package/dist/cjs/components/checkbox.d.ts.map +1 -1
- package/dist/cjs/components/checkbox.js +1 -1
- package/dist/cjs/components/checkbox.js.map +4 -4
- package/dist/cjs/components/checkbox.props.js +1 -1
- package/dist/cjs/components/checkbox.props.js.map +2 -2
- 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 +0 -9
- 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 +3 -3
- package/dist/cjs/components/context-menu.d.ts.map +1 -1
- package/dist/cjs/components/context-menu.js +1 -1
- package/dist/cjs/components/context-menu.js.map +4 -4
- package/dist/cjs/components/context-menu.props.js +1 -1
- package/dist/cjs/components/context-menu.props.js.map +3 -3
- package/dist/cjs/components/data-list.d.ts.map +1 -1
- package/dist/cjs/components/data-list.js +1 -1
- package/dist/cjs/components/data-list.js.map +4 -4
- package/dist/cjs/components/dialog.d.ts.map +1 -1
- package/dist/cjs/components/dialog.js +1 -1
- package/dist/cjs/components/dialog.js.map +4 -4
- package/dist/cjs/components/dialog.props.d.ts +0 -5
- package/dist/cjs/components/dialog.props.d.ts.map +1 -1
- package/dist/cjs/components/dialog.props.js +1 -1
- package/dist/cjs/components/dialog.props.js.map +3 -3
- package/dist/cjs/components/dropdown-menu.d.ts.map +1 -1
- package/dist/cjs/components/dropdown-menu.js +1 -1
- package/dist/cjs/components/dropdown-menu.js.map +4 -4
- package/dist/cjs/components/dropdown-menu.props.js +1 -1
- package/dist/cjs/components/dropdown-menu.props.js.map +3 -3
- package/dist/cjs/components/hover-card.d.ts.map +1 -1
- package/dist/cjs/components/hover-card.js +1 -1
- package/dist/cjs/components/hover-card.js.map +4 -4
- package/dist/cjs/components/icon-button.js +2 -2
- package/dist/cjs/components/icon-button.js.map +4 -4
- package/dist/cjs/components/icon-button.props.js +1 -1
- package/dist/cjs/components/icon-button.props.js.map +3 -3
- package/dist/cjs/components/index.js +5 -5
- package/dist/cjs/components/index.js.map +4 -4
- package/dist/cjs/components/message-scroller.js +2 -2
- package/dist/cjs/components/message-scroller.js.map +4 -4
- package/dist/cjs/components/navbar.d.ts.map +1 -1
- package/dist/cjs/components/navbar.js +1 -1
- package/dist/cjs/components/navbar.js.map +4 -4
- package/dist/cjs/components/notice.d.ts +1 -3
- package/dist/cjs/components/notice.d.ts.map +1 -1
- package/dist/cjs/components/notice.js +2 -2
- package/dist/cjs/components/notice.js.map +4 -4
- package/dist/cjs/components/popover.d.ts.map +1 -1
- package/dist/cjs/components/popover.js +1 -1
- package/dist/cjs/components/popover.js.map +4 -4
- package/dist/cjs/components/popover.props.d.ts +0 -5
- package/dist/cjs/components/popover.props.d.ts.map +1 -1
- package/dist/cjs/components/popover.props.js +1 -1
- package/dist/cjs/components/popover.props.js.map +3 -3
- package/dist/cjs/components/progress.js +1 -1
- package/dist/cjs/components/progress.js.map +3 -3
- package/dist/cjs/components/progress.props.d.ts +0 -7
- package/dist/cjs/components/progress.props.d.ts.map +1 -1
- package/dist/cjs/components/progress.props.js +1 -1
- package/dist/cjs/components/progress.props.js.map +3 -3
- package/dist/cjs/components/radio-cards.d.ts.map +1 -1
- package/dist/cjs/components/radio-cards.js +1 -1
- package/dist/cjs/components/radio-cards.js.map +4 -4
- package/dist/cjs/components/radio-cards.props.d.ts +0 -5
- package/dist/cjs/components/radio-cards.props.d.ts.map +1 -1
- package/dist/cjs/components/radio-cards.props.js +1 -1
- package/dist/cjs/components/radio-cards.props.js.map +3 -3
- package/dist/cjs/components/radio-group.d.ts.map +1 -1
- package/dist/cjs/components/radio-group.js +1 -1
- package/dist/cjs/components/radio-group.js.map +4 -4
- package/dist/cjs/components/radio-group.props.d.ts +1 -1
- package/dist/cjs/components/radio-group.props.js +1 -1
- package/dist/cjs/components/radio-group.props.js.map +2 -2
- package/dist/cjs/components/radio.d.ts.map +1 -1
- package/dist/cjs/components/radio.js +1 -1
- package/dist/cjs/components/radio.js.map +4 -4
- package/dist/cjs/components/radio.props.js +1 -1
- package/dist/cjs/components/radio.props.js.map +2 -2
- package/dist/cjs/components/schemas/base-button.schema.d.ts +0 -4
- package/dist/cjs/components/schemas/base-button.schema.d.ts.map +1 -1
- package/dist/cjs/components/schemas/base-button.schema.js +1 -1
- package/dist/cjs/components/schemas/base-button.schema.js.map +2 -2
- package/dist/cjs/components/schemas/button.schema.d.ts +0 -4
- package/dist/cjs/components/schemas/button.schema.d.ts.map +1 -1
- package/dist/cjs/components/schemas/button.schema.js +1 -1
- package/dist/cjs/components/schemas/button.schema.js.map +2 -2
- package/dist/cjs/components/schemas/icon-button.schema.d.ts +0 -4
- package/dist/cjs/components/schemas/icon-button.schema.d.ts.map +1 -1
- package/dist/cjs/components/schemas/icon-button.schema.js +1 -1
- package/dist/cjs/components/schemas/icon-button.schema.js.map +2 -2
- package/dist/cjs/components/schemas/index.js +1 -1
- package/dist/cjs/components/schemas/index.js.map +2 -2
- package/dist/cjs/components/schemas/toggle-button.schema.d.ts +0 -4
- package/dist/cjs/components/schemas/toggle-button.schema.d.ts.map +1 -1
- package/dist/cjs/components/schemas/toggle-button.schema.js +1 -1
- package/dist/cjs/components/schemas/toggle-button.schema.js.map +2 -2
- package/dist/cjs/components/schemas/toggle-icon-button.schema.d.ts +0 -4
- package/dist/cjs/components/schemas/toggle-icon-button.schema.d.ts.map +1 -1
- package/dist/cjs/components/schemas/toggle-icon-button.schema.js +1 -1
- package/dist/cjs/components/schemas/toggle-icon-button.schema.js.map +2 -2
- package/dist/cjs/components/scroll-area.d.ts.map +1 -1
- package/dist/cjs/components/scroll-area.js +1 -1
- package/dist/cjs/components/scroll-area.js.map +3 -3
- package/dist/cjs/components/scroll-area.props.d.ts +0 -7
- package/dist/cjs/components/scroll-area.props.d.ts.map +1 -1
- package/dist/cjs/components/scroll-area.props.js +1 -1
- package/dist/cjs/components/scroll-area.props.js.map +3 -3
- package/dist/cjs/components/segmented-control.d.ts.map +1 -1
- package/dist/cjs/components/segmented-control.js +1 -1
- package/dist/cjs/components/segmented-control.js.map +4 -4
- package/dist/cjs/components/segmented-control.props.d.ts +0 -4
- package/dist/cjs/components/segmented-control.props.d.ts.map +1 -1
- package/dist/cjs/components/segmented-control.props.js +1 -1
- package/dist/cjs/components/segmented-control.props.js.map +2 -2
- package/dist/cjs/components/select.d.ts.map +1 -1
- package/dist/cjs/components/select.js +1 -1
- package/dist/cjs/components/select.js.map +4 -4
- package/dist/cjs/components/select.props.d.ts +0 -4
- package/dist/cjs/components/select.props.d.ts.map +1 -1
- package/dist/cjs/components/select.props.js +1 -1
- package/dist/cjs/components/select.props.js.map +2 -2
- package/dist/cjs/components/separator.js +1 -1
- package/dist/cjs/components/separator.js.map +3 -3
- package/dist/cjs/components/separator.props.d.ts +0 -7
- package/dist/cjs/components/separator.props.d.ts.map +1 -1
- package/dist/cjs/components/separator.props.js +1 -1
- package/dist/cjs/components/separator.props.js.map +3 -3
- package/dist/cjs/components/sheet.d.ts +0 -1
- package/dist/cjs/components/sheet.d.ts.map +1 -1
- package/dist/cjs/components/sheet.js +1 -1
- package/dist/cjs/components/sheet.js.map +4 -4
- package/dist/cjs/components/shell.d.ts +1 -1
- package/dist/cjs/components/shell.d.ts.map +1 -1
- package/dist/cjs/components/shell.js +1 -1
- package/dist/cjs/components/shell.js.map +4 -4
- package/dist/cjs/components/sidebar.js +1 -1
- package/dist/cjs/components/sidebar.js.map +4 -4
- package/dist/cjs/components/slider.d.ts.map +1 -1
- package/dist/cjs/components/slider.js +1 -1
- package/dist/cjs/components/slider.js.map +4 -4
- package/dist/cjs/components/spinner.js +1 -1
- package/dist/cjs/components/spinner.js.map +3 -3
- package/dist/cjs/components/spinner.props.d.ts +0 -7
- package/dist/cjs/components/spinner.props.d.ts.map +1 -1
- package/dist/cjs/components/spinner.props.js +1 -1
- package/dist/cjs/components/spinner.props.js.map +3 -3
- package/dist/cjs/components/switch.d.ts.map +1 -1
- package/dist/cjs/components/switch.js +1 -1
- package/dist/cjs/components/switch.js.map +4 -4
- package/dist/cjs/components/switch.props.d.ts.map +1 -1
- package/dist/cjs/components/switch.props.js.map +2 -2
- package/dist/cjs/components/tab-nav.d.ts.map +1 -1
- package/dist/cjs/components/tab-nav.js +1 -1
- package/dist/cjs/components/tab-nav.js.map +4 -4
- package/dist/cjs/components/tab-nav.props.js +1 -1
- package/dist/cjs/components/tab-nav.props.js.map +3 -3
- package/dist/cjs/components/table.d.ts.map +1 -1
- package/dist/cjs/components/table.js +1 -1
- package/dist/cjs/components/table.js.map +4 -4
- package/dist/cjs/components/table.props.d.ts +1 -1
- package/dist/cjs/components/table.props.js +1 -1
- package/dist/cjs/components/table.props.js.map +2 -2
- package/dist/cjs/components/tabs.d.ts.map +1 -1
- package/dist/cjs/components/tabs.js +1 -1
- package/dist/cjs/components/tabs.js.map +4 -4
- package/dist/cjs/components/tabs.props.js +1 -1
- package/dist/cjs/components/tabs.props.js.map +3 -3
- package/dist/cjs/components/text-area.d.ts.map +1 -1
- package/dist/cjs/components/text-area.js +1 -1
- package/dist/cjs/components/text-area.js.map +4 -4
- package/dist/cjs/components/text-area.props.d.ts +0 -5
- package/dist/cjs/components/text-area.props.d.ts.map +1 -1
- package/dist/cjs/components/text-area.props.js +1 -1
- package/dist/cjs/components/text-area.props.js.map +3 -3
- package/dist/cjs/components/text-field.d.ts.map +1 -1
- package/dist/cjs/components/text-field.js +2 -2
- package/dist/cjs/components/text-field.js.map +4 -4
- package/dist/cjs/components/text-field.props.d.ts +0 -5
- package/dist/cjs/components/text-field.props.d.ts.map +1 -1
- package/dist/cjs/components/text-field.props.js +1 -1
- package/dist/cjs/components/text-field.props.js.map +3 -3
- package/dist/cjs/components/theme-panel.d.ts.map +1 -1
- package/dist/cjs/components/theme-panel.js +3 -3
- package/dist/cjs/components/theme-panel.js.map +4 -4
- package/dist/cjs/components/theme.d.ts +3 -6
- package/dist/cjs/components/theme.d.ts.map +1 -1
- package/dist/cjs/components/theme.js +1 -1
- package/dist/cjs/components/theme.js.map +4 -4
- package/dist/cjs/components/theme.props.d.ts +12 -19
- package/dist/cjs/components/theme.props.d.ts.map +1 -1
- package/dist/cjs/components/theme.props.js +1 -1
- package/dist/cjs/components/theme.props.js.map +3 -3
- package/dist/cjs/components/toggle-button.js +3 -3
- package/dist/cjs/components/toggle-button.js.map +4 -4
- package/dist/cjs/components/toggle-icon-button.js +3 -3
- package/dist/cjs/components/toggle-icon-button.js.map +4 -4
- package/dist/cjs/components/toolbar.d.ts.map +1 -1
- package/dist/cjs/components/toolbar.js +2 -2
- package/dist/cjs/components/toolbar.js.map +4 -4
- package/dist/cjs/components/toolbar.props.d.ts +2 -1
- package/dist/cjs/components/toolbar.props.d.ts.map +1 -1
- package/dist/cjs/components/toolbar.props.js.map +2 -2
- package/dist/cjs/components/tooltip.js +1 -1
- package/dist/cjs/components/tooltip.js.map +4 -4
- 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/index.d.ts +1 -0
- package/dist/cjs/helpers/index.d.ts.map +1 -1
- package/dist/cjs/helpers/index.js +3 -3
- package/dist/cjs/helpers/index.js.map +4 -4
- package/dist/cjs/helpers/map-prop-values.d.ts +1 -4
- package/dist/cjs/helpers/map-prop-values.d.ts.map +1 -1
- package/dist/cjs/helpers/map-prop-values.js +1 -1
- package/dist/cjs/helpers/map-prop-values.js.map +3 -3
- package/dist/cjs/helpers/theme-size.d.ts +41 -0
- package/dist/cjs/helpers/theme-size.d.ts.map +1 -0
- package/dist/cjs/helpers/theme-size.js +2 -0
- package/dist/cjs/helpers/theme-size.js.map +7 -0
- package/dist/cjs/index.js +6 -6
- 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-2CNQGDY3.js +2 -0
- package/dist/esm/{chunk-MNC2O6QW.js.map → chunk-2CNQGDY3.js.map} +3 -3
- package/dist/esm/chunk-2O3WL25H.js +2 -0
- package/dist/esm/chunk-2O3WL25H.js.map +7 -0
- package/dist/esm/{chunk-XZ5XZS5O.js → chunk-35HNDWWM.js} +2 -2
- package/dist/esm/chunk-3YLYGKFB.js +2 -0
- package/dist/esm/chunk-3YLYGKFB.js.map +7 -0
- package/dist/esm/chunk-4DE3ONED.js +2 -0
- package/dist/esm/chunk-4DE3ONED.js.map +7 -0
- package/dist/esm/chunk-4M55YJMR.js +2 -0
- package/dist/esm/chunk-4M55YJMR.js.map +7 -0
- package/dist/esm/chunk-4YQXYWDQ.js +2 -0
- package/dist/esm/chunk-4YQXYWDQ.js.map +7 -0
- package/dist/esm/{chunk-R4CN4Q3G.js → chunk-534LGOWC.js} +2 -2
- package/dist/esm/chunk-54KMG7NX.js +2 -0
- package/dist/esm/chunk-54KMG7NX.js.map +7 -0
- package/dist/esm/chunk-5LGWS5QS.js +2 -0
- package/dist/esm/chunk-5LGWS5QS.js.map +7 -0
- package/dist/esm/chunk-5R2WX2FU.js +2 -0
- package/dist/esm/chunk-5R2WX2FU.js.map +7 -0
- package/dist/esm/{chunk-7UW7D77E.js → chunk-5UU2IMGX.js} +2 -2
- package/dist/esm/chunk-5VBJT2VY.js +2 -0
- package/dist/esm/chunk-5VBJT2VY.js.map +7 -0
- package/dist/esm/chunk-6AZV4VFW.js +2 -0
- package/dist/esm/chunk-6AZV4VFW.js.map +7 -0
- package/dist/esm/chunk-6YWDEANN.js +2 -0
- package/dist/esm/chunk-6YWDEANN.js.map +7 -0
- package/dist/esm/chunk-6YWJUNMB.js +2 -0
- package/dist/esm/chunk-6YWJUNMB.js.map +7 -0
- package/dist/esm/{chunk-Y4IB7KDZ.js → chunk-7FZPCM7W.js} +2 -2
- package/dist/esm/chunk-7J2QS2UT.js +5 -0
- package/dist/esm/chunk-7J2QS2UT.js.map +7 -0
- package/dist/esm/chunk-ABS275QZ.js +2 -0
- package/dist/esm/chunk-AKPAHQYE.js +2 -0
- package/dist/esm/chunk-AKPAHQYE.js.map +7 -0
- package/dist/esm/chunk-B6RH4CTY.js +2 -0
- package/dist/esm/chunk-B6RH4CTY.js.map +7 -0
- package/dist/esm/chunk-BN24ZBO7.js +2 -0
- package/dist/esm/chunk-BN24ZBO7.js.map +7 -0
- package/dist/esm/chunk-BZ6YBP2S.js +2 -0
- package/dist/esm/chunk-BZ6YBP2S.js.map +7 -0
- package/dist/esm/chunk-CC4GNSKL.js +2 -0
- package/dist/esm/chunk-CC4GNSKL.js.map +7 -0
- package/dist/esm/chunk-CHPZ3LNC.js +2 -0
- package/dist/esm/chunk-CHPZ3LNC.js.map +7 -0
- package/dist/esm/chunk-CRK34MWY.js +2 -0
- package/dist/esm/chunk-CRK34MWY.js.map +7 -0
- package/dist/esm/{chunk-PAB6HVKC.js → chunk-DFSW4QR4.js} +2 -2
- package/dist/esm/chunk-DJFTDR6Y.js +2 -0
- package/dist/esm/chunk-DJFTDR6Y.js.map +7 -0
- package/dist/esm/{chunk-UI2EFF6F.js → chunk-E3754NJZ.js} +2 -2
- package/dist/esm/chunk-EA2XSEFH.js +2 -0
- package/dist/esm/chunk-EA2XSEFH.js.map +7 -0
- package/dist/esm/{chunk-F2XQYWBE.js → chunk-EHUSLPWN.js} +2 -2
- package/dist/esm/chunk-ENPQJYXZ.js +2 -0
- package/dist/esm/chunk-ENPQJYXZ.js.map +7 -0
- package/dist/esm/chunk-ENSDQ3XQ.js +2 -0
- package/dist/esm/chunk-ENSDQ3XQ.js.map +7 -0
- package/dist/esm/chunk-EO7WQYFO.js +2 -0
- package/dist/esm/chunk-EO7WQYFO.js.map +7 -0
- package/dist/esm/chunk-EUSKAXHP.js +2 -0
- package/dist/esm/chunk-EUSKAXHP.js.map +7 -0
- package/dist/esm/chunk-F3XBIUXB.js +2 -0
- package/dist/esm/chunk-F3XBIUXB.js.map +7 -0
- package/dist/esm/{chunk-6ERCPRXX.js → chunk-FSKZAL5H.js} +2 -2
- package/dist/esm/chunk-GHD3TKCA.js +2 -0
- package/dist/esm/chunk-GHD3TKCA.js.map +7 -0
- package/dist/esm/chunk-GQBQHGEF.js +2 -0
- package/dist/esm/chunk-GQBQHGEF.js.map +7 -0
- package/dist/esm/chunk-GTVFQXLJ.js +2 -0
- package/dist/esm/chunk-GTVFQXLJ.js.map +7 -0
- package/dist/esm/chunk-HIEGLLY7.js +2 -0
- package/dist/esm/chunk-HIEGLLY7.js.map +7 -0
- package/dist/esm/chunk-HZYE46V2.js +2 -0
- package/dist/esm/chunk-HZYE46V2.js.map +7 -0
- package/dist/esm/chunk-IF4PYIUV.js +2 -0
- package/dist/esm/chunk-IF4PYIUV.js.map +7 -0
- package/dist/esm/chunk-IWT3Q2PD.js +2 -0
- package/dist/esm/chunk-IWT3Q2PD.js.map +7 -0
- package/dist/esm/chunk-JCRBBT4X.js +2 -0
- package/dist/esm/chunk-JCRBBT4X.js.map +7 -0
- package/dist/esm/{chunk-ZUOK3KFY.js → chunk-K7VO7TND.js} +1 -1
- package/dist/esm/{chunk-ZUOK3KFY.js.map → chunk-K7VO7TND.js.map} +2 -2
- package/dist/esm/chunk-KFQ4B5YC.js +2 -0
- package/dist/esm/chunk-KFQ4B5YC.js.map +7 -0
- package/dist/esm/{chunk-DIGT74P3.js → chunk-KPACVWV4.js} +1 -1
- package/dist/esm/{chunk-DIGT74P3.js.map → chunk-KPACVWV4.js.map} +2 -2
- package/dist/esm/{chunk-MQT3YJKY.js → chunk-KPPIW4OJ.js} +2 -2
- package/dist/esm/{chunk-PTEAQFHI.js → chunk-KRXCFIRK.js} +2 -2
- package/dist/esm/{chunk-5SQL4ZRC.js → chunk-KSZOVI57.js} +2 -2
- package/dist/esm/{chunk-5SQL4ZRC.js.map → chunk-KSZOVI57.js.map} +1 -1
- package/dist/esm/chunk-KU3LLWFU.js +2 -0
- package/dist/esm/{chunk-UPCRXJB2.js.map → chunk-KU3LLWFU.js.map} +2 -2
- package/dist/esm/chunk-MAI7FEU7.js +2 -0
- package/dist/esm/chunk-MAI7FEU7.js.map +7 -0
- package/dist/esm/chunk-MDHXSEGH.js +2 -0
- package/dist/esm/chunk-MDHXSEGH.js.map +7 -0
- package/dist/esm/{chunk-2PO6TZ7L.js → chunk-MJEYJI5G.js} +2 -2
- package/dist/esm/chunk-MLXHD7YF.js +2 -0
- package/dist/esm/chunk-MLXHD7YF.js.map +7 -0
- package/dist/esm/chunk-MPN33CKR.js +2 -0
- package/dist/esm/chunk-MPN33CKR.js.map +7 -0
- package/dist/esm/chunk-MQDZBF4J.js +2 -0
- package/dist/esm/chunk-MQDZBF4J.js.map +7 -0
- package/dist/esm/chunk-NCDOMH5I.js +2 -0
- package/dist/esm/chunk-NCDOMH5I.js.map +7 -0
- package/dist/esm/chunk-NFVOEHZS.js +2 -0
- package/dist/esm/chunk-NFVOEHZS.js.map +7 -0
- package/dist/esm/{chunk-J43ZS6TI.js → chunk-PAQS6C2A.js} +2 -2
- package/dist/esm/chunk-PUVZFRTQ.js +2 -0
- package/dist/esm/chunk-PUVZFRTQ.js.map +7 -0
- package/dist/esm/chunk-Q7S5LQBQ.js +2 -0
- package/dist/esm/chunk-Q7S5LQBQ.js.map +7 -0
- package/dist/esm/chunk-QAUYOVVL.js +2 -0
- package/dist/esm/chunk-QAUYOVVL.js.map +7 -0
- package/dist/esm/chunk-QOPRXQGR.js +2 -0
- package/dist/esm/chunk-QOPRXQGR.js.map +7 -0
- package/dist/esm/{chunk-MLJLEOZ5.js → chunk-R2FUNQTI.js} +2 -2
- package/dist/esm/{chunk-MLJLEOZ5.js.map → chunk-R2FUNQTI.js.map} +2 -2
- package/dist/esm/chunk-RC7TBVLO.js +2 -0
- package/dist/esm/chunk-RC7TBVLO.js.map +7 -0
- package/dist/esm/chunk-RJ6SA7AY.js +2 -0
- package/dist/esm/chunk-RJ6SA7AY.js.map +7 -0
- package/dist/esm/chunk-RSJSVJ6A.js +2 -0
- package/dist/esm/chunk-RSJSVJ6A.js.map +7 -0
- package/dist/esm/chunk-STMTXK7U.js +2 -0
- package/dist/esm/chunk-STMTXK7U.js.map +7 -0
- package/dist/esm/chunk-U7PDXTRX.js +2 -0
- package/dist/esm/chunk-U7PDXTRX.js.map +7 -0
- package/dist/esm/chunk-UNRG6Z5I.js +2 -0
- package/dist/esm/chunk-UNRG6Z5I.js.map +7 -0
- package/dist/esm/chunk-UONSKZQT.js +2 -0
- package/dist/esm/chunk-UONSKZQT.js.map +7 -0
- package/dist/esm/{chunk-2IPVLV6B.js → chunk-UQZHW3EJ.js} +2 -2
- package/dist/esm/chunk-VIDXAECE.js +2 -0
- package/dist/esm/chunk-VIDXAECE.js.map +7 -0
- package/dist/esm/chunk-VLLJ7A6P.js +2 -0
- package/dist/esm/chunk-VLLJ7A6P.js.map +7 -0
- package/dist/esm/{chunk-ELZEAEN2.js → chunk-VT4AAF7Q.js} +2 -2
- package/dist/esm/chunk-WKMJIWFP.js +2 -0
- package/dist/esm/chunk-WKMJIWFP.js.map +7 -0
- package/dist/esm/chunk-XVKFQSLI.js +2 -0
- package/dist/esm/chunk-XVKFQSLI.js.map +7 -0
- package/dist/esm/chunk-YF3MFME4.js +10 -0
- package/dist/esm/chunk-YF3MFME4.js.map +7 -0
- package/dist/esm/chunk-YGPUKJEB.js +2 -0
- package/dist/esm/chunk-YGPUKJEB.js.map +7 -0
- package/dist/esm/{chunk-MD3QCXRD.js → chunk-YVMQWSHA.js} +2 -2
- package/dist/esm/{chunk-MD3QCXRD.js.map → chunk-YVMQWSHA.js.map} +2 -2
- package/dist/esm/chunk-ZCAI2PRH.js +2 -0
- package/dist/esm/chunk-ZCAI2PRH.js.map +7 -0
- package/dist/esm/{chunk-S53ZQNHK.js → chunk-ZFBLPW3X.js} +2 -2
- package/dist/esm/chunk-ZH2B7WEH.js +2 -0
- package/dist/esm/chunk-ZH2B7WEH.js.map +7 -0
- package/dist/esm/chunk-ZJZIV2JH.js +2 -0
- package/dist/esm/chunk-ZJZIV2JH.js.map +7 -0
- package/dist/esm/components/_internal/base-button.d.ts +0 -2
- package/dist/esm/components/_internal/base-button.d.ts.map +1 -1
- package/dist/esm/components/_internal/base-button.js +1 -1
- package/dist/esm/components/_internal/base-button.props.d.ts +0 -17
- package/dist/esm/components/_internal/base-button.props.d.ts.map +1 -1
- package/dist/esm/components/_internal/base-button.props.js +1 -1
- package/dist/esm/components/_internal/base-checkbox.props.d.ts +1 -1
- package/dist/esm/components/_internal/base-checkbox.props.js +1 -1
- package/dist/esm/components/_internal/base-menu.props.d.ts +0 -10
- package/dist/esm/components/_internal/base-menu.props.d.ts.map +1 -1
- package/dist/esm/components/_internal/base-menu.props.js +1 -1
- package/dist/esm/components/_internal/base-menu.utils.d.ts +3 -9
- package/dist/esm/components/_internal/base-menu.utils.d.ts.map +1 -1
- package/dist/esm/components/_internal/base-menu.utils.js +1 -1
- package/dist/esm/components/_internal/base-radio.props.d.ts +1 -1
- package/dist/esm/components/_internal/base-radio.props.js +1 -1
- package/dist/esm/components/_internal/base-tab-list.props.d.ts +0 -5
- package/dist/esm/components/_internal/base-tab-list.props.d.ts.map +1 -1
- package/dist/esm/components/_internal/base-tab-list.props.js +1 -1
- package/dist/esm/components/_internal/menu-context.d.ts +2 -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/pane-chrome.d.ts +14 -2
- package/dist/esm/components/_internal/pane-chrome.d.ts.map +1 -1
- package/dist/esm/components/_internal/pane-chrome.js +1 -1
- package/dist/esm/components/_internal/shell-sidebar.js +1 -1
- package/dist/esm/components/accordion.d.ts.map +1 -1
- package/dist/esm/components/accordion.js +1 -1
- package/dist/esm/components/accordion.props.d.ts +0 -7
- package/dist/esm/components/accordion.props.d.ts.map +1 -1
- package/dist/esm/components/accordion.props.js +1 -1
- package/dist/esm/components/alert-dialog.d.ts.map +1 -1
- package/dist/esm/components/alert-dialog.js +1 -1
- package/dist/esm/components/alert-dialog.props.d.ts +0 -5
- package/dist/esm/components/alert-dialog.props.d.ts.map +1 -1
- package/dist/esm/components/alert-dialog.props.js +1 -1
- package/dist/esm/components/badge.js +1 -1
- package/dist/esm/components/badge.props.d.ts +1 -1
- package/dist/esm/components/badge.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/card.d.ts.map +1 -1
- package/dist/esm/components/card.js +1 -1
- package/dist/esm/components/card.props.d.ts +0 -5
- package/dist/esm/components/card.props.d.ts.map +1 -1
- package/dist/esm/components/card.props.js +1 -1
- package/dist/esm/components/chatbar.d.ts +0 -2
- package/dist/esm/components/chatbar.d.ts.map +1 -1
- package/dist/esm/components/chatbar.js +1 -1
- package/dist/esm/components/checkbox-cards.d.ts.map +1 -1
- package/dist/esm/components/checkbox-cards.js +1 -1
- package/dist/esm/components/checkbox-cards.props.d.ts +0 -5
- package/dist/esm/components/checkbox-cards.props.d.ts.map +1 -1
- package/dist/esm/components/checkbox-cards.props.js +1 -1
- package/dist/esm/components/checkbox-group.d.ts.map +1 -1
- package/dist/esm/components/checkbox-group.js +1 -1
- package/dist/esm/components/checkbox-group.props.d.ts +1 -1
- package/dist/esm/components/checkbox-group.props.js +1 -1
- package/dist/esm/components/checkbox.d.ts.map +1 -1
- package/dist/esm/components/checkbox.js +1 -1
- package/dist/esm/components/checkbox.props.js +1 -1
- 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 +0 -9
- package/dist/esm/components/combobox.props.d.ts.map +1 -1
- package/dist/esm/components/combobox.props.js +1 -1
- package/dist/esm/components/context-menu.d.ts.map +1 -1
- package/dist/esm/components/context-menu.js +1 -1
- package/dist/esm/components/context-menu.props.js +1 -1
- package/dist/esm/components/data-list.d.ts.map +1 -1
- package/dist/esm/components/data-list.js +1 -1
- package/dist/esm/components/dialog.d.ts.map +1 -1
- package/dist/esm/components/dialog.js +1 -1
- package/dist/esm/components/dialog.props.d.ts +0 -5
- package/dist/esm/components/dialog.props.d.ts.map +1 -1
- package/dist/esm/components/dialog.props.js +1 -1
- package/dist/esm/components/dropdown-menu.d.ts.map +1 -1
- package/dist/esm/components/dropdown-menu.js +1 -1
- package/dist/esm/components/dropdown-menu.props.js +1 -1
- package/dist/esm/components/hover-card.d.ts.map +1 -1
- package/dist/esm/components/hover-card.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/index.js +1 -1
- package/dist/esm/components/message-scroller.js +1 -1
- package/dist/esm/components/navbar.d.ts.map +1 -1
- package/dist/esm/components/navbar.js +1 -1
- package/dist/esm/components/notice.d.ts +1 -3
- package/dist/esm/components/notice.d.ts.map +1 -1
- package/dist/esm/components/notice.js +1 -1
- package/dist/esm/components/popover.d.ts.map +1 -1
- package/dist/esm/components/popover.js +1 -1
- package/dist/esm/components/popover.props.d.ts +0 -5
- package/dist/esm/components/popover.props.d.ts.map +1 -1
- package/dist/esm/components/popover.props.js +1 -1
- package/dist/esm/components/progress.js +1 -1
- package/dist/esm/components/progress.props.d.ts +0 -7
- package/dist/esm/components/progress.props.d.ts.map +1 -1
- package/dist/esm/components/progress.props.js +1 -1
- package/dist/esm/components/radio-cards.d.ts.map +1 -1
- package/dist/esm/components/radio-cards.js +1 -1
- package/dist/esm/components/radio-cards.props.d.ts +0 -5
- package/dist/esm/components/radio-cards.props.d.ts.map +1 -1
- package/dist/esm/components/radio-cards.props.js +1 -1
- package/dist/esm/components/radio-group.d.ts.map +1 -1
- package/dist/esm/components/radio-group.js +1 -1
- package/dist/esm/components/radio-group.props.d.ts +1 -1
- package/dist/esm/components/radio-group.props.js +1 -1
- package/dist/esm/components/radio.d.ts.map +1 -1
- package/dist/esm/components/radio.js +1 -1
- package/dist/esm/components/radio.props.js +1 -1
- package/dist/esm/components/schemas/base-button.schema.d.ts +0 -4
- 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 +0 -4
- 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 +0 -4
- 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/toggle-button.schema.d.ts +0 -4
- 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 +0 -4
- 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.d.ts.map +1 -1
- package/dist/esm/components/scroll-area.js +1 -1
- package/dist/esm/components/scroll-area.props.d.ts +0 -7
- package/dist/esm/components/scroll-area.props.d.ts.map +1 -1
- package/dist/esm/components/scroll-area.props.js +1 -1
- package/dist/esm/components/segmented-control.d.ts.map +1 -1
- package/dist/esm/components/segmented-control.js +1 -1
- package/dist/esm/components/segmented-control.props.d.ts +0 -4
- package/dist/esm/components/segmented-control.props.d.ts.map +1 -1
- package/dist/esm/components/segmented-control.props.js +1 -1
- package/dist/esm/components/select.d.ts.map +1 -1
- package/dist/esm/components/select.js +1 -1
- package/dist/esm/components/select.props.d.ts +0 -4
- package/dist/esm/components/select.props.d.ts.map +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.d.ts +0 -7
- package/dist/esm/components/separator.props.d.ts.map +1 -1
- package/dist/esm/components/separator.props.js +1 -1
- package/dist/esm/components/sheet.d.ts +0 -1
- package/dist/esm/components/sheet.d.ts.map +1 -1
- package/dist/esm/components/sheet.js +1 -1
- package/dist/esm/components/shell.d.ts +1 -1
- package/dist/esm/components/shell.d.ts.map +1 -1
- package/dist/esm/components/shell.js +1 -1
- package/dist/esm/components/sidebar.js +1 -1
- package/dist/esm/components/slider.d.ts.map +1 -1
- package/dist/esm/components/slider.js +1 -1
- package/dist/esm/components/spinner.js +1 -1
- package/dist/esm/components/spinner.props.d.ts +0 -7
- package/dist/esm/components/spinner.props.d.ts.map +1 -1
- package/dist/esm/components/spinner.props.js +1 -1
- package/dist/esm/components/switch.d.ts.map +1 -1
- package/dist/esm/components/switch.js +1 -1
- package/dist/esm/components/switch.props.d.ts.map +1 -1
- package/dist/esm/components/switch.props.js +1 -1
- package/dist/esm/components/tab-nav.d.ts.map +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.d.ts.map +1 -1
- package/dist/esm/components/table.js +1 -1
- package/dist/esm/components/table.props.d.ts +1 -1
- package/dist/esm/components/table.props.js +1 -1
- package/dist/esm/components/tabs.d.ts.map +1 -1
- package/dist/esm/components/tabs.js +1 -1
- package/dist/esm/components/tabs.props.js +1 -1
- package/dist/esm/components/text-area.d.ts.map +1 -1
- package/dist/esm/components/text-area.js +1 -1
- package/dist/esm/components/text-area.props.d.ts +0 -5
- package/dist/esm/components/text-area.props.d.ts.map +1 -1
- package/dist/esm/components/text-area.props.js +1 -1
- package/dist/esm/components/text-field.d.ts.map +1 -1
- package/dist/esm/components/text-field.js +1 -1
- package/dist/esm/components/text-field.props.d.ts +0 -5
- package/dist/esm/components/text-field.props.d.ts.map +1 -1
- package/dist/esm/components/text-field.props.js +1 -1
- package/dist/esm/components/theme-panel.d.ts.map +1 -1
- package/dist/esm/components/theme-panel.js +1 -1
- package/dist/esm/components/theme.d.ts +3 -6
- package/dist/esm/components/theme.d.ts.map +1 -1
- package/dist/esm/components/theme.js +1 -1
- package/dist/esm/components/theme.props.d.ts +12 -19
- package/dist/esm/components/theme.props.d.ts.map +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.d.ts.map +1 -1
- package/dist/esm/components/toolbar.js +1 -1
- package/dist/esm/components/toolbar.props.d.ts +2 -1
- package/dist/esm/components/toolbar.props.d.ts.map +1 -1
- package/dist/esm/components/toolbar.props.js +1 -1
- package/dist/esm/components/tooltip.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/helpers/index.d.ts +1 -0
- package/dist/esm/helpers/index.d.ts.map +1 -1
- package/dist/esm/helpers/index.js +1 -1
- package/dist/esm/helpers/map-prop-values.d.ts +1 -4
- package/dist/esm/helpers/map-prop-values.d.ts.map +1 -1
- package/dist/esm/helpers/map-prop-values.js +1 -1
- package/dist/esm/helpers/theme-size.d.ts +41 -0
- package/dist/esm/helpers/theme-size.d.ts.map +1 -0
- package/dist/esm/helpers/theme-size.js +2 -0
- package/dist/esm/helpers/theme-size.js.map +7 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/props/index.js +1 -1
- package/layout/components.css +48 -48
- package/layout/tokens.css +79 -31
- package/layout.css +127 -79
- package/package.json +2 -1
- package/schemas/base-button.json +0 -8
- package/schemas/button.json +0 -8
- package/schemas/icon-button.json +0 -8
- package/schemas/index.json +0 -40
- package/schemas/toggle-button.json +0 -8
- package/schemas/toggle-icon-button.json +0 -8
- package/src/components/_internal/base-button.css +130 -175
- package/src/components/_internal/base-button.props.ts +0 -26
- package/src/components/_internal/base-button.tsx +47 -14
- package/src/components/_internal/base-card.css +32 -194
- package/src/components/_internal/base-checkbox.css +104 -58
- package/src/components/_internal/base-checkbox.props.ts +1 -1
- package/src/components/_internal/base-dialog.css +13 -45
- package/src/components/_internal/base-menu.css +24 -57
- package/src/components/_internal/base-menu.props.ts +0 -8
- package/src/components/_internal/base-menu.utils.tsx +4 -15
- package/src/components/_internal/base-radio.css +79 -54
- package/src/components/_internal/base-radio.props.ts +1 -1
- package/src/components/_internal/base-sidebar-menu.css +21 -19
- package/src/components/_internal/base-sidebar.css +2 -3
- package/src/components/_internal/base-tab-list.css +39 -78
- package/src/components/_internal/base-tab-list.props.ts +0 -3
- package/src/components/_internal/menu-context.tsx +6 -10
- package/src/components/_internal/pane-chrome.tsx +40 -8
- package/src/components/accordion.css +17 -263
- package/src/components/accordion.props.tsx +0 -4
- package/src/components/accordion.tsx +4 -5
- package/src/components/alert-dialog.props.tsx +0 -4
- package/src/components/alert-dialog.tsx +1 -14
- package/src/components/avatar.css +35 -67
- package/src/components/badge.css +27 -49
- package/src/components/badge.props.tsx +1 -1
- package/src/components/blockquote.css +2 -2
- package/src/components/button.css +5 -175
- package/src/components/card.props.tsx +0 -3
- package/src/components/card.tsx +1 -3
- package/src/components/chatbar.css +44 -124
- package/src/components/chatbar.tsx +10 -11
- package/src/components/checkbox-cards.css +11 -11
- package/src/components/checkbox-cards.props.tsx +0 -3
- package/src/components/checkbox-cards.tsx +0 -5
- package/src/components/checkbox-group.css +7 -12
- package/src/components/checkbox-group.tsx +3 -1
- package/src/components/checkbox.css +6 -11
- package/src/components/checkbox.tsx +3 -1
- package/src/components/combobox.css +4 -9
- package/src/components/combobox.props.tsx +0 -5
- package/src/components/combobox.tsx +4 -12
- package/src/components/context-menu.tsx +9 -20
- package/src/components/data-list.css +4 -4
- package/src/components/data-list.tsx +3 -1
- package/src/components/dialog.css +0 -12
- package/src/components/dialog.props.tsx +0 -3
- package/src/components/dialog.tsx +1 -14
- package/src/components/dropdown-menu.css +1 -1
- package/src/components/dropdown-menu.tsx +8 -20
- package/src/components/hover-card.css +3 -3
- package/src/components/hover-card.tsx +3 -1
- package/src/components/icon-button.css +4 -152
- package/src/components/image.css +1 -1
- package/src/components/kbd.css +14 -14
- package/src/components/message-scroller.css +1 -1
- package/src/components/message-scroller.tsx +1 -1
- package/src/components/navbar.css +6 -6
- package/src/components/navbar.tsx +3 -1
- package/src/components/notice.css +9 -15
- package/src/components/notice.tsx +8 -7
- package/src/components/popover.css +15 -37
- package/src/components/popover.props.tsx +0 -3
- package/src/components/popover.tsx +3 -6
- package/src/components/progress.css +4 -106
- package/src/components/progress.props.tsx +0 -3
- package/src/components/radio-cards.css +6 -6
- package/src/components/radio-cards.props.tsx +0 -3
- package/src/components/radio-cards.tsx +0 -5
- package/src/components/radio-group.css +1 -1
- package/src/components/radio-group.props.tsx +1 -1
- package/src/components/radio-group.tsx +3 -1
- package/src/components/radio.tsx +3 -1
- package/src/components/schemas/base-button.schema.ts +0 -9
- package/src/components/scroll-area.css +13 -34
- package/src/components/scroll-area.props.tsx +0 -3
- package/src/components/scroll-area.tsx +2 -18
- package/src/components/section.css +8 -8
- package/src/components/segmented-control.css +47 -83
- package/src/components/segmented-control.props.tsx +0 -2
- package/src/components/segmented-control.tsx +3 -5
- package/src/components/select.css +87 -424
- package/src/components/select.props.tsx +0 -2
- package/src/components/select.tsx +4 -4
- package/src/components/separator.css +2 -23
- package/src/components/separator.props.tsx +0 -3
- package/src/components/sheet.css +0 -11
- package/src/components/sheet.tsx +1 -18
- package/src/components/shell.css +45 -30
- package/src/components/shell.tsx +8 -2
- package/src/components/sidebar.css +108 -198
- package/src/components/skeleton.css +1 -1
- package/src/components/slider.css +35 -98
- package/src/components/slider.tsx +3 -1
- package/src/components/spinner.css +2 -23
- package/src/components/spinner.props.tsx +0 -4
- package/src/components/switch.css +56 -49
- package/src/components/switch.props.tsx +0 -8
- package/src/components/switch.tsx +3 -1
- package/src/components/tab-nav.tsx +4 -4
- package/src/components/table.css +10 -18
- package/src/components/table.props.tsx +1 -1
- package/src/components/table.tsx +3 -1
- package/src/components/tabs.css +2 -1
- package/src/components/tabs.tsx +4 -4
- package/src/components/text-area.css +71 -236
- package/src/components/text-area.props.tsx +0 -3
- package/src/components/text-area.tsx +9 -9
- package/src/components/text-field.css +136 -342
- package/src/components/text-field.props.tsx +0 -3
- package/src/components/text-field.tsx +9 -9
- package/src/components/theme-panel.css +4 -4
- package/src/components/theme-panel.tsx +19 -236
- package/src/components/theme.props.tsx +10 -15
- package/src/components/theme.tsx +86 -106
- package/src/components/toolbar.css +9 -9
- package/src/components/toolbar.props.tsx +2 -1
- package/src/components/toolbar.tsx +7 -2
- package/src/components/tooltip.css +1 -1
- package/src/components/virtual-menu.tsx +2 -4
- package/src/helpers/index.ts +1 -0
- package/src/helpers/map-prop-values.ts +1 -18
- package/src/helpers/theme-size.ts +73 -0
- package/src/styles/tokens/base.css +0 -2
- package/src/styles/tokens/color.css +4 -32
- package/src/styles/tokens/constants.css +27 -51
- package/src/styles/tokens/layout.css +1 -1
- package/src/styles/tokens/radius.css +24 -24
- package/src/styles/tokens/space.css +107 -24
- package/src/styles/tokens/typography.css +39 -39
- package/styles.css +3091 -5296
- package/tokens/base.css +243 -283
- package/tokens.css +268 -318
- package/dist/esm/chunk-23WDP4JG.js +0 -2
- package/dist/esm/chunk-23WDP4JG.js.map +0 -7
- package/dist/esm/chunk-2IWL4V4H.js +0 -2
- package/dist/esm/chunk-2IWL4V4H.js.map +0 -7
- package/dist/esm/chunk-2MYYU7ST.js +0 -2
- package/dist/esm/chunk-2MYYU7ST.js.map +0 -7
- package/dist/esm/chunk-2NNB4ZZ5.js +0 -2
- package/dist/esm/chunk-2NNB4ZZ5.js.map +0 -7
- package/dist/esm/chunk-2NNCZM7P.js +0 -2
- package/dist/esm/chunk-2NNCZM7P.js.map +0 -7
- package/dist/esm/chunk-2XSRO44Q.js +0 -2
- package/dist/esm/chunk-2XSRO44Q.js.map +0 -7
- package/dist/esm/chunk-3KB2XWBE.js +0 -2
- package/dist/esm/chunk-3KB2XWBE.js.map +0 -7
- package/dist/esm/chunk-3PT3AOD5.js +0 -2
- package/dist/esm/chunk-3PT3AOD5.js.map +0 -7
- package/dist/esm/chunk-4D7OU2UA.js +0 -2
- package/dist/esm/chunk-4D7OU2UA.js.map +0 -7
- package/dist/esm/chunk-4EBCFKNC.js +0 -2
- package/dist/esm/chunk-4EBCFKNC.js.map +0 -7
- package/dist/esm/chunk-5GYIQIPW.js +0 -2
- package/dist/esm/chunk-5GYIQIPW.js.map +0 -7
- package/dist/esm/chunk-5PG5YGIW.js +0 -2
- package/dist/esm/chunk-5PG5YGIW.js.map +0 -7
- package/dist/esm/chunk-5RHODJDJ.js +0 -2
- package/dist/esm/chunk-5RHODJDJ.js.map +0 -7
- package/dist/esm/chunk-7BE6N3KY.js +0 -2
- package/dist/esm/chunk-7BE6N3KY.js.map +0 -7
- package/dist/esm/chunk-BALS3AVM.js +0 -2
- package/dist/esm/chunk-BALS3AVM.js.map +0 -7
- package/dist/esm/chunk-BDOMLGLZ.js +0 -2
- package/dist/esm/chunk-BDOMLGLZ.js.map +0 -7
- package/dist/esm/chunk-CAUFRKTK.js +0 -2
- package/dist/esm/chunk-CAUFRKTK.js.map +0 -7
- package/dist/esm/chunk-CJ4UZDW5.js +0 -2
- package/dist/esm/chunk-CJ4UZDW5.js.map +0 -7
- package/dist/esm/chunk-DD5QHU6R.js +0 -2
- package/dist/esm/chunk-DD5QHU6R.js.map +0 -7
- package/dist/esm/chunk-DDYII5NA.js +0 -2
- package/dist/esm/chunk-DDYII5NA.js.map +0 -7
- package/dist/esm/chunk-DQTJMIRO.js +0 -2
- package/dist/esm/chunk-DQTJMIRO.js.map +0 -7
- package/dist/esm/chunk-E5DJILUI.js +0 -2
- package/dist/esm/chunk-E5DJILUI.js.map +0 -7
- package/dist/esm/chunk-EJG2UNTM.js +0 -2
- package/dist/esm/chunk-EJG2UNTM.js.map +0 -7
- package/dist/esm/chunk-FK6F6ROH.js +0 -2
- package/dist/esm/chunk-FK6F6ROH.js.map +0 -7
- package/dist/esm/chunk-HI3JY3DJ.js +0 -2
- package/dist/esm/chunk-HI3JY3DJ.js.map +0 -7
- package/dist/esm/chunk-HKRQ3E3I.js +0 -2
- package/dist/esm/chunk-HKRQ3E3I.js.map +0 -7
- package/dist/esm/chunk-HVQ3SLQC.js +0 -2
- package/dist/esm/chunk-HVQ3SLQC.js.map +0 -7
- package/dist/esm/chunk-IMYZP5OY.js +0 -2
- package/dist/esm/chunk-IMYZP5OY.js.map +0 -7
- package/dist/esm/chunk-IYXR46Q6.js +0 -5
- package/dist/esm/chunk-IYXR46Q6.js.map +0 -7
- package/dist/esm/chunk-JGB6LNTP.js +0 -2
- package/dist/esm/chunk-JGB6LNTP.js.map +0 -7
- package/dist/esm/chunk-JLHJHYVQ.js +0 -2
- package/dist/esm/chunk-JLHJHYVQ.js.map +0 -7
- package/dist/esm/chunk-K7J23OPW.js +0 -2
- package/dist/esm/chunk-K7J23OPW.js.map +0 -7
- package/dist/esm/chunk-LRFAOQK6.js +0 -2
- package/dist/esm/chunk-LRFAOQK6.js.map +0 -7
- package/dist/esm/chunk-LXSARUXD.js +0 -2
- package/dist/esm/chunk-LXSARUXD.js.map +0 -7
- package/dist/esm/chunk-MGSHX5N5.js +0 -2
- package/dist/esm/chunk-MGSHX5N5.js.map +0 -7
- package/dist/esm/chunk-MNC2O6QW.js +0 -2
- package/dist/esm/chunk-MOMYWKIO.js +0 -2
- package/dist/esm/chunk-MOMYWKIO.js.map +0 -7
- package/dist/esm/chunk-MVW2SY4F.js +0 -2
- package/dist/esm/chunk-MVW2SY4F.js.map +0 -7
- package/dist/esm/chunk-PRRJ4WRE.js +0 -2
- package/dist/esm/chunk-PRRJ4WRE.js.map +0 -7
- package/dist/esm/chunk-PSS45RHX.js +0 -2
- package/dist/esm/chunk-PSS45RHX.js.map +0 -7
- package/dist/esm/chunk-QE2EF7A7.js +0 -2
- package/dist/esm/chunk-QE2EF7A7.js.map +0 -7
- package/dist/esm/chunk-QJFAGWBO.js +0 -2
- package/dist/esm/chunk-QJFAGWBO.js.map +0 -7
- package/dist/esm/chunk-QJSSCW3B.js +0 -2
- package/dist/esm/chunk-QJSSCW3B.js.map +0 -7
- package/dist/esm/chunk-QPNYHS6A.js +0 -2
- package/dist/esm/chunk-QPNYHS6A.js.map +0 -7
- package/dist/esm/chunk-QWFFYUFH.js +0 -2
- package/dist/esm/chunk-QWFFYUFH.js.map +0 -7
- package/dist/esm/chunk-RA4U6VVZ.js +0 -2
- package/dist/esm/chunk-RA4U6VVZ.js.map +0 -7
- package/dist/esm/chunk-RVHKSNMJ.js +0 -2
- package/dist/esm/chunk-RVHKSNMJ.js.map +0 -7
- package/dist/esm/chunk-RYURXQLJ.js +0 -2
- package/dist/esm/chunk-RYURXQLJ.js.map +0 -7
- package/dist/esm/chunk-UA6FP7HS.js +0 -2
- package/dist/esm/chunk-ULSNYQOY.js +0 -2
- package/dist/esm/chunk-ULSNYQOY.js.map +0 -7
- package/dist/esm/chunk-UPCRXJB2.js +0 -2
- package/dist/esm/chunk-URLG45A4.js +0 -2
- package/dist/esm/chunk-URLG45A4.js.map +0 -7
- package/dist/esm/chunk-UZS3BA2Z.js +0 -2
- package/dist/esm/chunk-UZS3BA2Z.js.map +0 -7
- package/dist/esm/chunk-V7UP4SLZ.js +0 -2
- package/dist/esm/chunk-V7UP4SLZ.js.map +0 -7
- package/dist/esm/chunk-W7VAP3WE.js +0 -2
- package/dist/esm/chunk-W7VAP3WE.js.map +0 -7
- package/dist/esm/chunk-WGNIFXUE.js +0 -2
- package/dist/esm/chunk-WGNIFXUE.js.map +0 -7
- package/dist/esm/chunk-WNSG5P3U.js +0 -2
- package/dist/esm/chunk-WNSG5P3U.js.map +0 -7
- package/dist/esm/chunk-X3UTLDGG.js +0 -2
- package/dist/esm/chunk-X3UTLDGG.js.map +0 -7
- package/dist/esm/chunk-XCDXQLWS.js +0 -2
- package/dist/esm/chunk-XCDXQLWS.js.map +0 -7
- package/dist/esm/chunk-XKAWVGBL.js +0 -2
- package/dist/esm/chunk-XKAWVGBL.js.map +0 -7
- package/dist/esm/chunk-XPRPYCII.js +0 -2
- package/dist/esm/chunk-XPRPYCII.js.map +0 -7
- package/dist/esm/chunk-Y3FVBAN2.js +0 -2
- package/dist/esm/chunk-Y3FVBAN2.js.map +0 -7
- package/dist/esm/chunk-YKGLZEXX.js +0 -2
- package/dist/esm/chunk-YKGLZEXX.js.map +0 -7
- package/dist/esm/chunk-YSHEXVBI.js +0 -10
- package/dist/esm/chunk-YSHEXVBI.js.map +0 -7
- package/dist/esm/chunk-Z2LGVLUB.js +0 -2
- package/dist/esm/chunk-Z2LGVLUB.js.map +0 -7
- package/src/styles/tokens/blur.css +0 -63
- package/src/styles/tokens/opacity.css +0 -32
- package/src/styles/tokens/scaling.css +0 -17
- /package/dist/esm/{chunk-XZ5XZS5O.js.map → chunk-35HNDWWM.js.map} +0 -0
- /package/dist/esm/{chunk-R4CN4Q3G.js.map → chunk-534LGOWC.js.map} +0 -0
- /package/dist/esm/{chunk-7UW7D77E.js.map → chunk-5UU2IMGX.js.map} +0 -0
- /package/dist/esm/{chunk-Y4IB7KDZ.js.map → chunk-7FZPCM7W.js.map} +0 -0
- /package/dist/esm/{chunk-UA6FP7HS.js.map → chunk-ABS275QZ.js.map} +0 -0
- /package/dist/esm/{chunk-PAB6HVKC.js.map → chunk-DFSW4QR4.js.map} +0 -0
- /package/dist/esm/{chunk-UI2EFF6F.js.map → chunk-E3754NJZ.js.map} +0 -0
- /package/dist/esm/{chunk-F2XQYWBE.js.map → chunk-EHUSLPWN.js.map} +0 -0
- /package/dist/esm/{chunk-6ERCPRXX.js.map → chunk-FSKZAL5H.js.map} +0 -0
- /package/dist/esm/{chunk-MQT3YJKY.js.map → chunk-KPPIW4OJ.js.map} +0 -0
- /package/dist/esm/{chunk-PTEAQFHI.js.map → chunk-KRXCFIRK.js.map} +0 -0
- /package/dist/esm/{chunk-2PO6TZ7L.js.map → chunk-MJEYJI5G.js.map} +0 -0
- /package/dist/esm/{chunk-J43ZS6TI.js.map → chunk-PAQS6C2A.js.map} +0 -0
- /package/dist/esm/{chunk-2IPVLV6B.js.map → chunk-UQZHW3EJ.js.map} +0 -0
- /package/dist/esm/{chunk-ELZEAEN2.js.map → chunk-VT4AAF7Q.js.map} +0 -0
- /package/dist/esm/{chunk-S53ZQNHK.js.map → chunk-ZFBLPW3X.js.map} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/components/chatbar.tsx"],
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nimport classNames from 'classnames';\nimport { useComposedRefs } from 'radix-ui/internal';\nimport { useDropzone } from 'react-dropzone';\n\nimport { IconButton, type IconButtonProps } from './icon-button.js';\nimport { CloseIcon, FileTextIcon } from './icons.js';\nimport { Flex } from './flex.js';\nimport { ScrollArea } from './scroll-area.js';\nimport { Slot } from './slot.js';\nimport { NoticeSizeContext } from './notice.js';\nimport { useThemeSize } from '../helpers/theme-size.js';\nimport { Spinner } from './spinner.js';\nimport { Text } from './text.js';\nimport { VisuallyHidden } from './visually-hidden.js';\nimport type { ComponentPropsWithout, RemovedProps } from '../helpers/component-props.js';\nimport type { accentColors } from '../props/color.prop.js';\nimport type { radii } from '../props/radius.prop.js';\nimport type { ButtonRankProps } from './button.js';\n\n// Avoid SSR warnings by using an isomorphic layout effect\nconst useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\n\n/**\n * Runs `measure` with the placeholder taken out of layout, so a height read\n * reflects the value alone.\n *\n * A textarea with an empty value lays its placeholder out as real text, so\n * `scrollHeight` reports the placeholder wrapped at whatever width the field\n * has at that instant. That sizes an empty bar to the suggestion showing in it\n * rather than to `minLines`, and when the read lands before the field has its\n * final width -- a panel still animating open, a flex parent whose basis is 0\n * -- it wraps that text at a fraction of the real width and opens the bar at\n * `maxLines`. The first keystroke takes the placeholder out of layout and the\n * height snaps back, which is what made the bug look intermittent rather than\n * simply wrong.\n *\n * The reset to 'auto' and the `scrollHeight` read sit in different functions\n * here, so the whole measurement window is wrapped rather than a single read.\n * Costs one extra style recalc on a path that is already forcing a reflow.\n */\nfunction withoutPlaceholder(el: HTMLTextAreaElement, measure: () => void): void {\n const { placeholder } = el;\n if (!placeholder) {\n measure();\n return;\n }\n el.placeholder = '';\n try {\n measure();\n } finally {\n el.placeholder = placeholder;\n }\n}\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. Chatbar revokes it when the\n * attachment is removed; once an attachment is handed to `onSubmit`, the\n * consumer owns the URL and is responsible for revoking it.\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\ntype ChatbarRejectReason = 'type' | 'size' | 'count';\ninterface ChatbarAttachmentRejection {\n file: File;\n reason: ChatbarRejectReason;\n}\n\ninterface ChatbarSubmitPayload {\n value: string;\n attachments: ChatbarAttachment[];\n}\n\ninterface FilePickerOptions {\n accept?: string | string[];\n multiple?: boolean;\n}\n\ninterface ChatbarContextValue {\n open: boolean;\n setOpen(next: boolean): void;\n\n setValue(next: string): void;\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 paste: boolean;\n clearOnSubmit: boolean;\n multiple: boolean;\n\n textareaRef: React.RefObject<HTMLTextAreaElement | null>;\n\n attachments: ChatbarAttachment[];\n removeAttachment(id: string): void;\n\n /** Validates and submits; returns false when there was nothing to submit */\n submit(clear: boolean): boolean;\n appendFiles(files: File[]): number;\n appendFilesFromPaste(files: File[]): number;\n openFilePicker(options?: FilePickerOptions): void;\n /** Guards blur-collapse between pointerdown on a picker trigger and its click */\n beginFilePickerPress(): void;\n}\n\n/** Chatbar's own range; a Theme size of 4 maps to 3. */\nconst chatbarSizePropDef = { values: ['1', '2', '3'] as const };\n\nconst ChatbarContext = React.createContext<ChatbarContextValue | null>(null);\n// Value lives in its own context so keystrokes only re-render parts that read it\nconst ChatbarValueContext = React.createContext<string>('');\n\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\nconst toArray = (val: string | string[] | undefined) =>\n Array.isArray(val) ? val : typeof val === 'string' ? val.split(',').map((s) => s.trim()).filter(Boolean) : [];\n\nconst 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\nconst IMAGE_EXT_RE = /\\.(png|jpe?g|gif|webp|bmp|svg|avif)$/i;\nconst isImageLike = (name: string, type: string) => (type || '').toLowerCase().startsWith('image/') || IMAGE_EXT_RE.test(name);\n\nconst hasText = (value: string) => value.trim().length > 0;\n\nconst plural = (n: number, word: string) => `${n} ${word}${n === 1 ? '' : 's'}`;\n\nlet attachmentCounter = 0;\nconst createAttachmentId = () => `chatbar-attachment-${Date.now()}-${++attachmentCounter}`;\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`, `multiple`, `maxAttachments`, and `maxFileSize`.\n * - Rejections are reported via `onAttachmentReject`.\n *\n * Submit\n * - `onSubmit({ value, attachments })` emits both message and attachments.\n * - Submitting requires text or at least one attachment.\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 /** When the chatbar expands on its own. `none` leaves open state entirely to the consumer. */\n expandOn?: ExpandOn;\n\n /** Minimum visible lines when expanded (default: 3). The compact state is always one line. */\n minLines?: number;\n /** Maximum number of lines before scrolling (default: 6) */\n maxLines?: number;\n\n /** Controls Send button visibility only. Enter-to-submit is controlled by `Textarea submitOnEnter`. */\n sendMode?: SendMode;\n\n /** Disables text input, submission and every way of adding attachments */\n disabled?: boolean;\n /** Prevents editing, submission and adding attachments */\n readOnly?: boolean;\n\n /** Combined submit payload */\n onSubmit?: (payload: ChatbarSubmitPayload) => void;\n\n size?: '1' | '2' | '3';\n variant?: 'raised' | 'surface' | 'outline' | 'ghost' | 'soft';\n /** Accent color for the control (matches TextArea) */\n color?: (typeof accentColors)[number];\n /** Optional radius override (matches TextArea) */\n radius?: (typeof radii)[number];\n\n width?: React.CSSProperties['width'];\n maxWidth?: React.CSSProperties['maxWidth'];\n\n // Attachments API\n attachments?: ChatbarAttachment[];\n defaultAttachments?: ChatbarAttachment[];\n onAttachmentsChange?: (attachments: ChatbarAttachment[]) => void;\n accept?: string | string[];\n /** Allow more than one file per pick, paste or drop */\n multiple?: boolean;\n maxAttachments?: number;\n maxFileSize?: number;\n paste?: boolean;\n /** Accepted types for pasted files. Replaces `accept` for paste when set. */\n pasteAccept?: string | string[];\n /** Clear message and attachments after submit */\n clearOnSubmit?: boolean;\n onAttachmentReject?: (rejections: ChatbarAttachmentRejection[]) => 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, multiple, 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 /**\n * Messages that need an answer before the next message, such as `Notice` and `Confirmation`.\n * They stack in a column above the chatbar, in the order given, so put the one the next\n * message answers last, nearest the text. They sit outside the box: a button in a notice never\n * submits the message, and pressing one never collapses the chatbar.\n */\n notices?: React.ReactNode;\n /**\n * Short facts that stay true about the conversation, such as the model or the context left.\n * They sit below the chatbar, inset from its sides.\n */\n context?: React.ReactNode;\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). No-op when disabled or read-only. */\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 *\n * Attachments\n * - Paste-to-attach: when `paste` is enabled, pasting files adds attachments.\n * - Additions and rejections are announced through a polite live region.\n *\n * Dropzone\n * - When `dropzone` is true, enables drag-and-drop file uploads.\n * - Visual feedback via `data-drop-active` attribute during drag operations.\n *\n * Accessibility\n * - Consumers should label the `Textarea` via `aria-label`/`aria-labelledby`.\n */\ninterface RootProps extends ComponentPropsWithout<'div', RemovedProps | 'onSubmit' | 'color'>, 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,\n open: openProp,\n defaultOpen = false,\n onOpenChange,\n expandOn = 'both',\n minLines = 3,\n maxLines = 6,\n sendMode = 'whenDirty',\n disabled,\n readOnly,\n onSubmit,\n size: sizeProp,\n variant,\n color,\n radius,\n width,\n maxWidth,\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 onBlurCapture,\n notices,\n context,\n ...divProps\n } = props;\n const size = useThemeSize(sizeProp, chatbarSizePropDef);\n\n const isValueControlled = valueProp != null;\n const [valueUncontrolled, setValueUncontrolled] = React.useState<string>(defaultValue);\n const value = isValueControlled ? valueProp : valueUncontrolled;\n\n const isOpenControlled = openProp != null;\n const [openUncontrolled, setOpenUncontrolled] = React.useState<boolean>(defaultOpen);\n const open = isOpenControlled ? openProp : openUncontrolled;\n\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 ?? []) : attachmentsUncontrolled),\n [isAttachmentsControlled, attachmentsProp, attachmentsUncontrolled],\n );\n\n // `id` changes on every announcement so identical messages still update the live region\n const [announcement, setAnnouncementState] = React.useState({ text: '', id: 0 });\n const announce = React.useCallback((text: string) => setAnnouncementState((prev) => ({ text, id: prev.id + 1 })), []);\n\n const rootRef = React.useRef<HTMLDivElement>(null);\n const composedRootRef = useComposedRefs(forwardedRef, rootRef);\n const textareaRef = React.useRef<HTMLTextAreaElement>(null);\n const fileInputRef = React.useRef<HTMLInputElement>(null);\n\n // Blur-collapse guards: `pickerOpenRef` is true while the native dialog is open,\n // `pressGuardRef` covers the gap between pointerdown on a trigger and its click\n // (Safari blurs the textarea before the click fires).\n const pickerOpenRef = React.useRef(false);\n const pressGuardRef = React.useRef(false);\n const pressGuardTimerRef = React.useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n const pickerRef = React.useRef<{ patterns: string[]; multiple: boolean } | null>(null);\n\n const acceptKey = toArray(accept).join(',');\n const pasteAcceptKey = toArray(pasteAccept).join(',');\n const accepts = React.useMemo(() => toArray(acceptKey), [acceptKey]);\n const pasteAccepts = React.useMemo(() => (pasteAcceptKey ? toArray(pasteAcceptKey) : accepts), [pasteAcceptKey, accepts]);\n\n // Latest props/state for stable callbacks. Synced during render (not in an effect) so\n // child layout effects that call setOpen/setValue see this render's handlers.\n const snapshot = {\n value,\n attachments,\n accepts,\n pasteAccepts,\n multiple,\n maxAttachments,\n maxFileSize,\n disabled,\n readOnly,\n expandOn,\n isValueControlled,\n isOpenControlled,\n isAttachmentsControlled,\n onValueChange,\n onOpenChange,\n onAttachmentsChange,\n onAttachmentReject,\n onSubmit,\n };\n const latest = React.useRef(snapshot);\n // eslint-disable-next-line react-hooks/refs -- read only in callbacks/effects; see comment above\n latest.current = snapshot;\n\n // Attachments set during the current event, before Root re-renders. Cleared at the end\n // of the task so a controlled parent that rejects the change is not overridden.\n const pendingAttachmentsRef = React.useRef<ChatbarAttachment[] | null>(null);\n const getAttachments = React.useCallback(() => pendingAttachmentsRef.current ?? latest.current.attachments, []);\n\n const setOpen = React.useCallback((next: boolean) => {\n if (!latest.current.isOpenControlled) setOpenUncontrolled(next);\n latest.current.onOpenChange?.(next);\n }, []);\n\n const setValue = React.useCallback((next: string) => {\n if (!latest.current.isValueControlled) setValueUncontrolled(next);\n latest.current.onValueChange?.(next);\n }, []);\n\n const setAttachments = React.useCallback((next: ChatbarAttachment[]) => {\n // Back-to-back updates in one event must see each other\n pendingAttachmentsRef.current = next;\n queueMicrotask(() => {\n pendingAttachmentsRef.current = null;\n });\n if (!latest.current.isAttachmentsControlled) setAttachmentsUncontrolled(next);\n latest.current.onAttachmentsChange?.(next);\n }, []);\n\n // Object URLs Chatbar created and still owns\n const ownedUrlsRef = React.useRef<Set<string>>(new Set());\n\n const addFiles = React.useCallback(\n (files: File[], patterns: string[], multiple: boolean = latest.current.multiple): number => {\n const cfg = latest.current;\n if (cfg.disabled || cfg.readOnly || files.length === 0) return 0;\n\n const current = getAttachments();\n const next: ChatbarAttachment[] = [];\n const rejected: ChatbarAttachmentRejection[] = [];\n const remainingSlots = typeof cfg.maxAttachments === 'number' ? Math.max(cfg.maxAttachments - current.length, 0) : Infinity;\n const perActionLimit = multiple ? Infinity : 1;\n\n for (const file of files) {\n if (next.length >= remainingSlots || next.length >= perActionLimit) {\n rejected.push({ file, reason: 'count' });\n continue;\n }\n if (typeof cfg.maxFileSize === 'number' && file.size > cfg.maxFileSize) {\n rejected.push({ file, reason: 'size' });\n continue;\n }\n if (!matchesAccept(file, patterns)) {\n rejected.push({ file, reason: 'type' });\n continue;\n }\n const url = isImageLike(file.name, file.type) ? URL.createObjectURL(file) : undefined;\n if (url) ownedUrlsRef.current.add(url);\n next.push({ id: createAttachmentId(), name: file.name, size: file.size, type: file.type, file, url, status: 'idle' });\n }\n\n const messages: string[] = [];\n if (next.length > 0) {\n setAttachments(current.concat(next));\n if (cfg.expandOn !== 'none') setOpen(true);\n messages.push(`${plural(next.length, 'file')} attached.`);\n }\n if (rejected.length > 0) {\n cfg.onAttachmentReject?.(rejected);\n messages.push(`${plural(rejected.length, 'file')} could not be attached.`);\n }\n if (messages.length > 0) announce(messages.join(' '));\n return next.length;\n },\n [getAttachments, setAttachments, setOpen, announce],\n );\n\n const appendFiles = React.useCallback((files: File[]) => addFiles(files, latest.current.accepts), [addFiles]);\n const appendFilesFromPaste = React.useCallback((files: File[]) => addFiles(files, latest.current.pasteAccepts), [addFiles]);\n\n const removeAttachment = React.useCallback(\n (id: string) => {\n const current = getAttachments();\n const removed = current.find((a) => a.id === id);\n if (!removed) return;\n setAttachments(current.filter((a) => a.id !== id));\n announce(`Removed ${removed.name}.`);\n },\n [getAttachments, setAttachments, announce],\n );\n\n const submit = React.useCallback(\n (clear: boolean) => {\n const cfg = latest.current;\n if (cfg.disabled || cfg.readOnly) return false;\n const current = getAttachments();\n if (!hasText(cfg.value) && current.length === 0) return false;\n const payload = { value: cfg.value, attachments: current };\n // Hand preview URLs to the consumer only when they leave the chatbar; URLs still\n // rendered here stay owned so removing them later revokes them\n if (clear && cfg.onSubmit) {\n for (const att of current) if (att.url) ownedUrlsRef.current.delete(att.url);\n }\n cfg.onSubmit?.(payload);\n if (clear) {\n setValue('');\n setAttachments([]);\n }\n return true;\n },\n [getAttachments, setValue, setAttachments],\n );\n\n // Revoke owned object URLs that are no longer referenced by current attachments\n React.useEffect(() => {\n const owned = ownedUrlsRef.current;\n if (owned.size === 0) return;\n const current = new Set(attachments.map((a) => a.url));\n for (const url of Array.from(owned)) {\n if (!current.has(url)) {\n URL.revokeObjectURL(url);\n owned.delete(url);\n }\n }\n }, [attachments]);\n\n // On unmount, revoke URLs only when Chatbar owns the attachment list;\n // controlled attachments may still be rendered by the parent.\n React.useEffect(() => {\n const owned = ownedUrlsRef.current;\n return () => {\n if (latest.current.isAttachmentsControlled) return;\n for (const url of Array.from(owned)) URL.revokeObjectURL(url);\n owned.clear();\n };\n }, []);\n\n const openFilePicker = React.useCallback((options?: FilePickerOptions) => {\n const cfg = latest.current;\n const input = fileInputRef.current;\n // The picker guard takes over from the press guard\n clearTimeout(pressGuardTimerRef.current);\n pressGuardRef.current = false;\n if (!input || cfg.disabled || cfg.readOnly) return;\n const patterns = options?.accept != null ? toArray(options.accept) : cfg.accepts;\n const multiple = options?.multiple ?? cfg.multiple;\n pickerRef.current = { patterns, multiple };\n input.accept = patterns.join(',');\n input.multiple = multiple;\n pickerOpenRef.current = true;\n input.click();\n // Browsers block the dialog outside a user gesture; if the window kept focus,\n // no dialog opened and no focus/cancel/change event will clear the guard\n setTimeout(() => {\n if (document.hasFocus()) pickerOpenRef.current = false;\n }, 1000);\n }, []);\n\n const beginFilePickerPress = React.useCallback(() => {\n // On touch (notably iOS), the compatibility mousedown, blur and click arrive in later\n // tasks than pointerup, so hold the guard until the click or a timeout\n pressGuardRef.current = true;\n clearTimeout(pressGuardTimerRef.current);\n pressGuardTimerRef.current = setTimeout(() => {\n pressGuardRef.current = false;\n }, 800);\n }, []);\n\n React.useEffect(() => () => clearTimeout(pressGuardTimerRef.current), []);\n\n // Clear the picker guard when the dialog closes, whichever way it closes\n React.useEffect(() => {\n const input = fileInputRef.current;\n const reset = () => {\n pickerOpenRef.current = false;\n };\n window.addEventListener('focus', reset);\n input?.addEventListener('cancel', reset);\n return () => {\n window.removeEventListener('focus', reset);\n input?.removeEventListener('cancel', reset);\n };\n }, []);\n\n const handleFileInputChange = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const input = event.currentTarget;\n const files = Array.from(input.files ?? []);\n const picker = pickerRef.current;\n addFiles(files, picker?.patterns ?? latest.current.accepts, picker?.multiple);\n pickerOpenRef.current = false;\n pickerRef.current = null;\n // Reset so selecting the same file again still fires change\n input.value = '';\n },\n [addFiles],\n );\n\n const handleBlurCapture = React.useCallback(\n (event: React.FocusEvent<HTMLDivElement>) => {\n onBlurCapture?.(event);\n const cfg = latest.current;\n const rootEl = rootRef.current;\n if (!rootEl || cfg.expandOn === 'none') return;\n const nextTarget = event.relatedTarget as Node | null;\n if (nextTarget && rootEl.contains(nextTarget)) return;\n if (pickerOpenRef.current || pressGuardRef.current) return;\n if (!hasText(cfg.value) && getAttachments().length === 0) setOpen(false);\n },\n [onBlurCapture, setOpen, getAttachments],\n );\n\n const handleDrop = React.useCallback((files: File[]) => {\n appendFiles(files);\n }, [appendFiles]);\n\n // Validation happens in addFiles so drop, paste and picker share one rule set\n const { getRootProps, isDragActive } = useDropzone({\n onDrop: handleDrop,\n // Drop any earlier message so it is not re-announced when the drag hint goes away\n onDragEnter: () => announce(''),\n noClick: true,\n noKeyboard: true,\n // Textarea handles paste itself; letting the dropzone see it attaches twice\n noPaste: true,\n disabled: !dropzone || disabled || readOnly,\n });\n const dragActive = dropzone && isDragActive;\n\n React.useImperativeHandle(\n apiRef,\n () => ({\n focusTextarea: () => textareaRef.current?.focus({ preventScroll: true }),\n openFilePicker: () => openFilePicker(),\n }),\n [openFilePicker],\n );\n\n // Click-to-focus: focus textarea when clicking non-interactive areas inside the container\n const handleContainerPointerDown = React.useCallback(\n (event: React.PointerEvent) => {\n if (disabled) return;\n if (event.pointerType === 'mouse' && event.button !== 0) return;\n const target = event.target;\n if (target instanceof Element && target.closest('button, [role=\"button\"], a[href], input, textarea, select, [contenteditable], [tabindex]:not([tabindex=\"-1\"])')) return;\n event.preventDefault();\n textareaRef.current?.focus({ preventScroll: true });\n },\n [disabled],\n );\n\n const contextValue = React.useMemo<ChatbarContextValue>(\n () => ({\n open,\n setOpen,\n setValue,\n size,\n expandOn,\n minLines,\n maxLines,\n sendMode,\n disabled,\n readOnly,\n paste,\n clearOnSubmit,\n multiple,\n textareaRef,\n attachments,\n removeAttachment,\n submit,\n appendFiles,\n appendFilesFromPaste,\n openFilePicker,\n beginFilePickerPress,\n }),\n [\n open, setOpen, setValue, size, expandOn, minLines, maxLines, sendMode, disabled, readOnly, paste,\n clearOnSubmit, multiple, attachments, removeAttachment, submit, appendFiles, appendFilesFromPaste,\n openFilePicker, beginFilePickerPress,\n ],\n );\n\n return (\n <ChatbarContext.Provider value={contextValue}>\n <ChatbarValueContext.Provider value={value}>\n <>\n <div\n {...divProps}\n ref={composedRootRef}\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={dragActive ? '' : undefined}\n data-accent-color={color}\n data-radius={radius}\n onBlurCapture={handleBlurCapture}\n >\n <input\n ref={fileInputRef}\n type=\"file\"\n tabIndex={-1}\n aria-hidden\n style={{ display: 'none' }}\n onChange={handleFileInputChange}\n />\n {notices ? (\n <div className=\"rt-ChatbarNotices\">\n <NoticeSizeContext.Provider value={size}>{notices}</NoticeSizeContext.Provider>\n </div>\n ) : null}\n <div {...(dropzone ? getRootProps() : {})} style={{ width: '100%', flex: '1 1 auto', minHeight: 0 }} onPointerDown={handleContainerPointerDown}>\n <div\n className={classNames('rt-ChatbarBox', `rt-variant-${variant ?? 'raised'}`)}\n style={{ position: 'relative' }}\n data-accent-color={color}\n data-radius={radius}\n >\n <div className=\"rt-ChatbarGrid\">\n {children}\n </div>\n {dragActive && (\n <div className=\"rt-ChatbarDropOverlay\" aria-hidden>\n <div className=\"rt-ChatbarDropContent\">\n <Text emphasis=\"medium\" size={size} weight=\"medium\">\n Drop files here to attach\n </Text>\n </div>\n </div>\n )}\n </div>\n </div>\n {context ? (\n <Text as=\"div\" size={size === '3' ? '2' : '1'} emphasis=\"medium\" className=\"rt-ChatbarContext\">\n {context}\n </Text>\n ) : null}\n <VisuallyHidden role=\"status\" aria-live=\"polite\">\n {dragActive ? 'Drop files here to attach.' : <span key={announcement.id}>{announcement.text}</span>}\n </VisuallyHidden>\n </div>\n </>\n </ChatbarValueContext.Provider>\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' | 'rows' | 'value' | 'defaultValue'> {\n asChild?: boolean;\n /**\n * When true, pressing Enter submits (Shift+Enter inserts a newline).\n * Works with every `sendMode`. 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.\n * - Auto-resizes between minLines and maxLines in a single layout effect, which\n * also opens the Chatbar when content overflows the compact height and\n * `expandOn` is `overflow` or `both`.\n * - Consumer handlers run first; calling `preventDefault` in `onKeyDown` or\n * `onPaste` skips the built-in submit or attach behavior.\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 {\n className,\n style,\n asChild,\n onFocus,\n onChange,\n onPaste,\n onKeyDown,\n onCompositionStart,\n onCompositionEnd,\n submitOnEnter = false,\n ...textareaProps\n } = props;\n const ctx = useChatbarContext();\n const value = React.useContext(ChatbarValueContext);\n const { open, minLines, maxLines, expandOn, disabled, readOnly, setOpen, setValue, textareaRef, paste, appendFilesFromPaste, size, submit, clearOnSubmit } = ctx;\n const composedRef = useComposedRefs(forwardedRef, textareaRef);\n\n // Cached metrics to avoid repeated getComputedStyle calls\n const lineHeightRef = React.useRef(0);\n const paddingRef = React.useRef(0);\n const composingRef = React.useRef(false);\n\n const sizingRef = React.useRef({ open, minLines, maxLines });\n // Declared before the sizing effect so it runs first in the same commit\n useIsomorphicLayoutEffect(() => {\n sizingRef.current = { open, minLines, maxLines };\n }, [open, minLines, maxLines]);\n\n const recomputeMetrics = React.useCallback(() => {\n const el = textareaRef.current;\n if (!el) return;\n const computedStyle = window.getComputedStyle(el);\n lineHeightRef.current = parseFloat(computedStyle.lineHeight) || 20;\n paddingRef.current = (parseFloat(computedStyle.paddingTop) || 0) + (parseFloat(computedStyle.paddingBottom) || 0);\n }, [textareaRef]);\n\n // Sizes `el` for the given open state; caller must have set height to 'auto' first\n const applyHeight = React.useCallback((el: HTMLTextAreaElement, isOpen: boolean) => {\n const { minLines: min, maxLines: max } = sizingRef.current;\n const lineHeight = lineHeightRef.current;\n const padding = paddingRef.current;\n const minHeight = Math.ceil((isOpen ? min : 1) * lineHeight) + padding;\n const maxHeight = Math.ceil((isOpen ? max : 1) * lineHeight) + padding;\n const contentHeight = Math.max(el.scrollHeight, minHeight);\n el.style.height = `${Math.min(contentHeight, maxHeight)}px`;\n const overflowing = contentHeight > maxHeight;\n el.style.overflowY = overflowing ? 'auto' : 'hidden';\n el.style.maxHeight = overflowing ? `${maxHeight}px` : 'none';\n }, []);\n\n // Typography depends on size\n useIsomorphicLayoutEffect(() => {\n recomputeMetrics();\n }, [recomputeMetrics, size]);\n\n // Single place for sizing and overflow auto-open: one height reset, one scrollHeight read\n useIsomorphicLayoutEffect(() => {\n const el = textareaRef.current;\n if (!el) return;\n if (lineHeightRef.current === 0) recomputeMetrics();\n withoutPlaceholder(el, () => {\n el.style.height = 'auto';\n let isOpen = open;\n if (!open && (expandOn === 'overflow' || expandOn === 'both')) {\n const compactHeight = Math.ceil(lineHeightRef.current) + paddingRef.current;\n if (el.scrollHeight > compactHeight + 1) {\n isOpen = true;\n setOpen(true);\n }\n }\n applyHeight(el, isOpen);\n });\n }, [value, open, expandOn, minLines, maxLines, size, setOpen, textareaRef, recomputeMetrics, applyHeight]);\n\n // Width changes re-wrap text; re-measure only when the width actually changes\n React.useEffect(() => {\n const el = textareaRef.current;\n if (!el || typeof ResizeObserver === 'undefined') return;\n let prevWidth = -1;\n const ro = new ResizeObserver((entries) => {\n const width = entries[0]?.contentRect.width ?? 0;\n if (width === prevWidth) return;\n const first = prevWidth === -1;\n prevWidth = width;\n if (first) return;\n recomputeMetrics();\n withoutPlaceholder(el, () => {\n el.style.height = 'auto';\n applyHeight(el, sizingRef.current.open);\n });\n });\n ro.observe(el);\n return () => ro.disconnect();\n }, [textareaRef, recomputeMetrics, applyHeight]);\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 const handleFocus = React.useCallback<React.FocusEventHandler<HTMLTextAreaElement>>(\n (event) => {\n onFocus?.(event);\n if (disabled || readOnly) return;\n if ((expandOn === 'focus' || expandOn === 'both') && !open) setOpen(true);\n },\n [disabled, readOnly, expandOn, open, setOpen, onFocus],\n );\n\n const handleChange = React.useCallback<React.ChangeEventHandler<HTMLTextAreaElement>>(\n (event) => {\n setValue(event.currentTarget.value);\n onChange?.(event);\n },\n [setValue, onChange],\n );\n\n const handlePaste = React.useCallback<React.ClipboardEventHandler<HTMLTextAreaElement>>(\n (event) => {\n onPaste?.(event);\n if (event.defaultPrevented || !paste || disabled || readOnly) return;\n const files = Array.from(event.clipboardData?.items ?? [])\n .filter((item) => item.kind === 'file')\n .map((item) => item.getAsFile())\n .filter((f): f is File => !!f);\n if (files.length === 0) return;\n // Suppress the filename/text representation only when a file was actually attached\n if (appendFilesFromPaste(files) > 0) event.preventDefault();\n },\n [paste, disabled, readOnly, onPaste, appendFilesFromPaste],\n );\n\n const handleCompositionStart = React.useCallback<React.CompositionEventHandler<HTMLTextAreaElement>>(\n (event) => {\n composingRef.current = true;\n onCompositionStart?.(event);\n },\n [onCompositionStart],\n );\n\n const handleCompositionEnd = React.useCallback<React.CompositionEventHandler<HTMLTextAreaElement>>(\n (event) => {\n composingRef.current = false;\n onCompositionEnd?.(event);\n },\n [onCompositionEnd],\n );\n\n const handleKeyDown = React.useCallback<React.KeyboardEventHandler<HTMLTextAreaElement>>(\n (event) => {\n onKeyDown?.(event);\n if (event.defaultPrevented || !submitOnEnter) return;\n if (event.key !== 'Enter' || event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) return;\n // Safari fires the IME-confirming Enter after compositionend with keyCode 229\n if (composingRef.current || event.nativeEvent.isComposing || event.nativeEvent.keyCode === 229) return;\n // Plain Enter never inserts a newline when submitOnEnter is on, even with nothing to send\n event.preventDefault();\n submit(clearOnSubmit);\n },\n [submitOnEnter, onKeyDown, submit, clearOnSubmit],\n );\n\n const Comp = asChild ? Slot : 'textarea';\n return (\n <div className={classNames('rt-ChatbarField', 'rt-ChatbarTextarea', className)}>\n <Comp\n {...textareaProps}\n ref={composedRef}\n className=\"rt-ChatbarInput\"\n value={value}\n onChange={handleChange}\n onFocus={handleFocus}\n onPaste={handlePaste}\n onKeyDown={handleKeyDown}\n onCompositionStart={handleCompositionStart}\n onCompositionEnd={handleCompositionEnd}\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 </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, className, ...divProps } = props;\n const ctx = useChatbarContext();\n if (ctx.open) return null;\n const Comp = asChild ? Slot : 'div';\n return (\n <Comp {...divProps} ref={forwardedRef} className={classNames('rt-ChatbarInlineStart', className)}>\n {children}\n </Comp>\n );\n});\nInlineStart.displayName = 'Chatbar.InlineStart';\n\nconst InlineEnd = React.forwardRef<HTMLDivElement, InlineSlotProps>((props, forwardedRef) => {\n const { children, asChild, className, ...divProps } = props;\n const ctx = useChatbarContext();\n if (ctx.open) return null;\n const Comp = asChild ? Slot : 'div';\n return (\n <Comp {...divProps} ref={forwardedRef} className={classNames('rt-ChatbarInlineEnd', className)}>\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 * `Chatbar.Item`s passed as children follow the attachments in the same row.\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 /** `Chatbar.Item`s: things the message refers to that are not files. */\n children?: React.ReactNode;\n}\n\nconst AttachmentsRow = React.forwardRef<HTMLDivElement, AttachmentsRowProps>((props, forwardedRef) => {\n const { asChild, forceMount, renderAttachment, className, children, ...divProps } = props;\n const ctx = useChatbarContext();\n const hasItems = React.Children.toArray(children).length > 0;\n if (ctx.attachments.length === 0 && !hasItems && !forceMount) return null;\n const Comp = asChild ? Slot : 'div';\n return (\n <div>\n <Comp {...divProps} ref={forwardedRef} className={classNames('rt-ChatbarAttachmentsRow', className)} role=\"list\" aria-label={divProps['aria-label'] ?? 'Attachments'}>\n <ScrollArea className=\"rt-ChatbarScrollArea\" scrollbars=\"horizontal\">\n <Flex align=\"center\" gap=\"3\" minWidth=\"fit-content\">\n {ctx.attachments.map((att) => (\n <Attachment key={att.id} attachment={att} asChild={!!renderAttachment}>\n {renderAttachment?.(att)}\n </Attachment>\n ))}\n {children}\n </Flex>\n </ScrollArea>\n </Comp>\n </div>\n );\n});\nAttachmentsRow.displayName = 'Chatbar.AttachmentsRow';\n\n/**\n * Moves focus off a pill that is about to unmount, to the next pill's remove\n * button, the previous one's, or the text, so keyboard users are not dropped\n * to <body>.\n */\nfunction moveFocusOffPill(button: HTMLButtonElement, textareaRef: React.RefObject<HTMLTextAreaElement | null>) {\n const pill = button.closest('[role=\"listitem\"]');\n const pills = pill?.parentElement ? Array.from(pill.parentElement.children) : [];\n const index = pill ? pills.indexOf(pill) : -1;\n const neighbour = pills[index + 1] ?? pills[index - 1];\n const nextButton = neighbour?.querySelector<HTMLButtonElement>('.rt-ChatbarItemRemove');\n if (nextButton) nextButton.focus();\n else textareaRef.current?.focus({ preventScroll: true });\n}\n\n/** The pill an attachment and an item share: a lead tile, a label and \u00D7. */\nconst Pill: React.FC<{\n lead: React.ReactNode;\n leadKind: 'image' | 'icon';\n label: React.ReactNode;\n /** Read after the label by screen readers only, e.g. a file's size. */\n detail?: string;\n removeLabel: string;\n onRemove?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n}> = ({ lead, leadKind, label, detail, removeLabel, onRemove }) => {\n const ctx = useChatbarContext();\n return (\n <>\n <span className=\"rt-ChatbarItemLead\" data-kind={leadKind} aria-hidden>\n {lead}\n </span>\n <Text className=\"rt-ChatbarItemLabel\" size={ctx.size} truncate>\n {label}\n {detail ? <VisuallyHidden>, {detail}</VisuallyHidden> : null}\n </Text>\n {onRemove && (\n <IconButton className=\"rt-ChatbarItemRemove\" aria-label={removeLabel} size=\"1\" variant=\"ghost\" color=\"gray\" onClick={onRemove}>\n <CloseIcon />\n </IconButton>\n )}\n </>\n );\n};\n\n/** Default tile renderer for a single attachment. */\ninterface AttachmentProps extends React.ComponentPropsWithoutRef<'div'> {\n attachment: ChatbarAttachment;\n asChild?: boolean;\n}\n\nconst STATUS_LABEL: Partial<Record<AttachmentStatus, string>> = { uploading: 'uploading', error: 'failed to upload' };\n\nconst Attachment = React.forwardRef<HTMLDivElement, AttachmentProps>((props, forwardedRef) => {\n const { attachment, asChild, className, children, ...divProps } = props;\n const ctx = useChatbarContext();\n const Comp = asChild ? Slot : 'div';\n const isImage = !!attachment.url && isImageLike(attachment.name, attachment.type);\n const sizeLabel = `${Math.ceil(attachment.size / 1024)} KB`;\n const statusLabel = attachment.status ? STATUS_LABEL[attachment.status] : undefined;\n const locked = ctx.disabled || ctx.readOnly;\n\n const handleRemove = (event: React.MouseEvent<HTMLButtonElement>) => {\n moveFocusOffPill(event.currentTarget, ctx.textareaRef);\n ctx.removeAttachment(attachment.id);\n };\n\n const lead =\n attachment.status === 'uploading' ? (\n <Spinner />\n ) : isImage ? (\n <img className=\"rt-ChatbarAttachmentImage\" src={attachment.url} alt=\"\" />\n ) : (\n <FileTextIcon />\n );\n\n return (\n <Comp\n {...divProps}\n ref={forwardedRef}\n className={classNames(children ? 'rt-ChatbarAttachment' : 'rt-ChatbarAttachment rt-ChatbarItem', className)}\n role=\"listitem\"\n data-kind={isImage ? 'image' : 'file'}\n data-status={attachment.status}\n title={attachment.name}\n >\n {children ?? (\n <Pill\n lead={lead}\n leadKind={isImage && attachment.status !== 'uploading' ? 'image' : 'icon'}\n label={attachment.name}\n detail={statusLabel ? `${sizeLabel}, ${statusLabel}` : sizeLabel}\n removeLabel={`Remove ${attachment.name}`}\n onRemove={locked ? undefined : handleRemove}\n />\n )}\n </Comp>\n );\n});\nAttachment.displayName = 'Chatbar.Attachment';\n\n/**\n * Something the message refers to that is not a file: a scene object, a\n * picked mode, a selection. The same pill as an attachment, placed in\n * `Chatbar.AttachmentsRow` as a child. The app owns the list, so removing one\n * calls `onRemove` and nothing else; leave it out for a pill that cannot be\n * removed.\n */\ninterface ItemProps extends Omit<React.ComponentPropsWithoutRef<'div'>, 'children' | 'color'> {\n /** The label. Also names the remove button: \"Remove {label}\". */\n children: string;\n /** Drawn in the lead tile, tinted with `color`. */\n icon?: React.ReactNode;\n /** A thumbnail for the lead tile, in place of the icon. */\n image?: string;\n /** Tint of the icon tile. Defaults to gray. */\n color?: (typeof accentColors)[number];\n onRemove?: () => void;\n /** Overrides the remove button's label. */\n removeLabel?: string;\n}\n\nconst Item = React.forwardRef<HTMLDivElement, ItemProps>((props, forwardedRef) => {\n const { children, icon, image, color, onRemove, removeLabel, className, ...divProps } = props;\n const ctx = useChatbarContext();\n const locked = ctx.disabled || ctx.readOnly;\n\n const handleRemove = onRemove\n ? (event: React.MouseEvent<HTMLButtonElement>) => {\n moveFocusOffPill(event.currentTarget, ctx.textareaRef);\n onRemove();\n }\n : undefined;\n\n return (\n <div\n {...divProps}\n ref={forwardedRef}\n className={classNames('rt-ChatbarItem', className)}\n role=\"listitem\"\n data-accent-color={image ? undefined : (color ?? 'gray')}\n title={children}\n >\n <Pill\n lead={image ? <img className=\"rt-ChatbarAttachmentImage\" src={image} alt=\"\" /> : icon}\n leadKind={image ? 'image' : 'icon'}\n label={children}\n removeLabel={removeLabel ?? `Remove ${children}`}\n onRemove={locked ? undefined : handleRemove}\n />\n </div>\n );\n});\nItem.displayName = 'Chatbar.Item';\n\ninterface AttachTriggerProps extends React.ComponentPropsWithoutRef<'button'> {\n asChild?: boolean;\n /** Overrides Root `accept` for files chosen through this trigger */\n accept?: string | string[];\n multiple?: boolean;\n}\n\nconst AttachTrigger = React.forwardRef<HTMLButtonElement, AttachTriggerProps>((props, forwardedRef) => {\n const { asChild, accept, multiple, disabled: disabledProp, onPointerDown, onClick, ...buttonProps } = props;\n const ctx = useChatbarContext();\n const disabled = disabledProp || ctx.disabled || ctx.readOnly;\n const Comp = asChild ? Slot : 'button';\n return (\n <Comp\n {...buttonProps}\n ref={forwardedRef}\n className={classNames('rt-ChatbarAttachTrigger', buttonProps.className)}\n type={buttonProps.type ?? 'button'}\n aria-label={buttonProps['aria-label'] ?? 'Add attachments'}\n disabled={disabled}\n onPointerDown={(event: React.PointerEvent<HTMLButtonElement>) => {\n onPointerDown?.(event);\n if (!disabled && !event.defaultPrevented) ctx.beginFilePickerPress();\n }}\n onClick={(event: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (disabled || event.defaultPrevented) return;\n ctx.openFilePicker({ accept, multiple });\n }}\n />\n );\n});\nAttachTrigger.displayName = 'Chatbar.AttachTrigger';\n\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, ...divProps } = props;\n const ctx = useChatbarContext();\n if (!ctx.open) return null;\n const Comp = asChild ? Slot : 'div';\n return (\n <div>\n <Comp {...divProps} ref={forwardedRef} className={classNames('rt-ChatbarRow', className)}>\n <Flex align=\"center\" justify=\"between\" width=\"100%\">\n {children}\n </Flex>\n </Comp>\n </div>\n );\n});\nRow.displayName = 'Chatbar.Row';\n\ntype RowSlotProps = React.ComponentPropsWithoutRef<'div'>;\n\nconst RowStart = React.forwardRef<HTMLDivElement, RowSlotProps>((props, forwardedRef) => {\n const { className, ...divProps } = props;\n return <div {...divProps} ref={forwardedRef} className={classNames('rt-ChatbarRowStart', className)} />;\n});\nRowStart.displayName = 'Chatbar.RowStart';\n\nconst RowEnd = React.forwardRef<HTMLDivElement, RowSlotProps>((props, forwardedRef) => {\n const { className, ...divProps } = props;\n return <div {...divProps} ref={forwardedRef} className={classNames('rt-ChatbarRowEnd', className)} />;\n});\nRowEnd.displayName = 'Chatbar.RowEnd';\n\ntype SendStatus = 'ready' | 'submitted' | 'streaming' | 'error';\n\ntype SendProps = Omit<IconButtonProps, 'aria-label' | 'aria-labelledby' | 'variant' | 'emphasis'> &\n ButtonRankProps & {\n /** Optional override for accessible name. Defaults to \"Send\". */\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n asChild?: boolean;\n /** Clear message and attachments after sending. Defaults to Root `clearOnSubmit`. */\n clearOnSend?: boolean;\n /**\n * What the button means. `ready` sends. While a reply is `submitted` or `streaming` and the\n * box is empty, the button STOPS the reply (`onStop`); with a draft in the box it still sends,\n * and the app decides whether sending interrupts the reply. After an `error`, an empty box\n * makes it RETRY (`onRetry`). Default `ready`.\n */\n status?: SendStatus;\n /** Called when the button is pressed to stop a reply. */\n onStop?: () => void;\n /** Called when the button is pressed to retry after an error. */\n onRetry?: () => void;\n /** Accessible name while it stops. Default \"Stop\". */\n stopLabel?: string;\n /** Accessible name while it retries. Default \"Retry\". */\n retryLabel?: string;\n /** Glyph while it stops. Defaults to a square, or a spinner while `submitted`. */\n stopIcon?: React.ReactNode;\n /** Glyph while it retries. */\n retryIcon?: React.ReactNode;\n};\n\nconst Send = React.forwardRef<HTMLButtonElement, SendProps>((props, forwardedRef) => {\n const {\n asChild,\n clearOnSend,\n disabled,\n children,\n style,\n className,\n size: sizeProp,\n variant: variantProp, emphasis,\n tabIndex,\n onClick,\n status = 'ready',\n onStop,\n onRetry,\n stopLabel = 'Stop',\n retryLabel = 'Retry',\n stopIcon,\n retryIcon,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n ...buttonProps\n } = props;\n const ctx = useChatbarContext();\n const value = React.useContext(ChatbarValueContext);\n\n const hasContent = hasText(value) || ctx.attachments.length > 0;\n const running = status === 'submitted' || status === 'streaming';\n const mode: 'send' | 'stop' | 'retry' = hasContent ? 'send' : running ? 'stop' : status === 'error' ? 'retry' : 'send';\n\n if (ctx.sendMode === 'never' && mode === 'send') return null;\n\n const visible = mode !== 'send' || ctx.sendMode === 'always' || hasContent;\n const inactive = mode === 'send' ? disabled || ctx.disabled || ctx.readOnly || !hasContent : disabled || ctx.disabled;\n\n const sendName = ariaLabel ?? 'Send';\n const labelProps: { 'aria-label': string } | { 'aria-labelledby': string } =\n mode === 'stop' ? { 'aria-label': stopLabel } : mode === 'retry' ? { 'aria-label': retryLabel } : ariaLabelledby ? { 'aria-labelledby': ariaLabelledby } : { 'aria-label': sendName };\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (event.defaultPrevented || inactive) return;\n if (mode === 'stop') {\n onStop?.();\n return;\n }\n if (mode === 'retry') {\n onRetry?.();\n return;\n }\n const clear = clearOnSend ?? ctx.clearOnSubmit;\n // Clearing hides and disables this button; keep keyboard focus in the composer\n if (ctx.submit(clear) && clear) ctx.textareaRef.current?.focus({ preventScroll: true });\n };\n\n const glyph =\n mode === 'stop' ? (\n stopIcon ?? (status === 'submitted' ? <Spinner /> : (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"currentColor\" aria-hidden>\n <rect x=\"7\" y=\"7\" width=\"10\" height=\"10\" rx=\"2\" />\n </svg>\n ))\n ) : mode === 'retry' ? (\n retryIcon ?? (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden>\n <path d=\"M3 12a9 9 0 1 0 3-6.7L3 8\" />\n <path d=\"M3 3v5h5\" />\n </svg>\n )\n ) : (\n children ?? (\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" aria-hidden>\n <path d=\"M5 12h14\" />\n <path d=\"m12 5 7 7-7 7\" />\n </svg>\n )\n );\n\n return (\n <IconButton\n {...buttonProps}\n ref={forwardedRef}\n size={sizeProp ?? ctx.size}\n {...(emphasis ? { emphasis } : { variant: variantProp ?? (ctx.open || mode !== 'send' ? 'solid' : 'ghost') })}\n disabled={inactive}\n className={classNames('rt-ChatbarSend', className)}\n style={{ opacity: visible ? 1 : 0, pointerEvents: visible ? undefined : 'none', ...style }}\n // Hidden Send must not be reachable by keyboard or announced\n aria-hidden={visible ? undefined : true}\n tabIndex={visible ? tabIndex : -1}\n asChild={asChild}\n onClick={handleClick}\n data-status={status}\n data-mode={mode}\n {...labelProps}\n >\n {glyph}\n </IconButton>\n );\n});\nSend.displayName = 'Chatbar.Send';\n\nexport { Root, Textarea, InlineStart, InlineEnd, AttachmentsRow, Attachment, Item, AttachTrigger, Row, RowStart, RowEnd, Send };\nexport type {\n RootProps as ChatbarRootProps,\n TextareaProps as ChatbarTextareaProps,\n InlineSlotProps as ChatbarInlineSlotProps,\n AttachmentsRowProps as ChatbarAttachmentsRowProps,\n AttachmentProps as ChatbarAttachmentProps,\n ItemProps as ChatbarItemProps,\n AttachTriggerProps as ChatbarAttachTriggerProps,\n RowProps as ChatbarRowProps,\n RowSlotProps as ChatbarRowSlotProps,\n SendProps as ChatbarSendProps,\n ChatbarAttachment,\n ChatbarAttachmentRejection,\n ChatbarRejectReason,\n ChatbarSubmitPayload,\n AttachmentStatus as ChatbarAttachmentStatus,\n ExpandOn as ChatbarExpandOn,\n SendMode as ChatbarSendMode,\n SendStatus as ChatbarSendStatus,\n};\n"],
|
|
5
|
+
"mappings": "0cAAA,IAAAA,GAAA,GAAAC,GAAAD,GAAA,mBAAAE,GAAA,eAAAC,GAAA,mBAAAC,GAAA,cAAAC,GAAA,gBAAAC,GAAA,SAAAC,GAAA,SAAAC,GAAA,QAAAC,GAAA,WAAAC,GAAA,aAAAC,GAAA,SAAAC,GAAA,aAAAC,KAAA,UAAYC,MAAW,QACvB,OAAOC,MAAgB,aACvB,OAAS,mBAAAC,OAAuB,oBAChC,OAAS,eAAAC,OAAmB,iBAkB5B,IAAMC,GAA4B,OAAO,OAAW,IAAoB,kBAAwB,YAoBhG,SAASC,GAAmBC,EAAyBC,EAA2B,CAC9E,GAAM,CAAE,YAAAC,CAAY,EAAIF,EACxB,GAAI,CAACE,EAAa,CAChBD,EAAQ,EACR,MACF,CACAD,EAAG,YAAc,GACjB,GAAI,CACFC,EAAQ,CACV,QAAE,CACAD,EAAG,YAAcE,CACnB,CACF,CA4EA,IAAMC,GAAqB,CAAE,OAAQ,CAAC,IAAK,IAAK,GAAG,CAAW,EAExDC,GAAuB,gBAA0C,IAAI,EAErEC,GAA4B,gBAAsB,EAAE,EAEpDC,EAAoB,IAAM,CAC9B,IAAMC,EAAY,aAAWH,EAAc,EAC3C,GAAI,CAACG,EAAK,MAAM,IAAI,MAAM,0DAA0D,EACpF,OAAOA,CACT,EAEMC,GAAWC,GACf,MAAM,QAAQA,CAAG,EAAIA,EAAM,OAAOA,GAAQ,SAAWA,EAAI,MAAM,GAAG,EAAE,IAAKC,GAAMA,EAAE,KAAK,CAAC,EAAE,OAAO,OAAO,EAAI,CAAC,EAExGC,GAAgB,CAACC,EAAYC,IAAuB,CACxD,GAAIA,EAAS,SAAW,EAAG,MAAO,GAClC,IAAMC,EAAOF,EAAK,KAAK,YAAY,EAC7BG,EAAOH,EAAK,KAAK,YAAY,EACnC,QAAWI,KAAUH,EAAU,CAC7B,IAAMI,EAAMD,EAAO,YAAY,EAC/B,GAAIC,EAAI,SAAS,GAAG,EAAG,CACrB,GAAM,CAACC,EAAMC,CAAO,EAAIF,EAAI,MAAM,GAAG,EAC/B,CAACG,EAAQC,CAAS,EAAIP,EAAK,MAAM,GAAG,EAC1C,GAAII,IAAS,KAAQA,IAASE,IAAWD,IAAY,KAAOA,IAAYE,GAAa,MAAO,EAC9F,SAAWJ,EAAI,WAAW,GAAG,GACvBF,EAAK,SAASE,CAAG,EAAG,MAAO,EAEnC,CACA,MAAO,EACT,EAEMK,GAAe,wCACfC,GAAc,CAACR,EAAcG,KAAkBA,GAAQ,IAAI,YAAY,EAAE,WAAW,QAAQ,GAAKI,GAAa,KAAKP,CAAI,EAEvHS,GAAWC,GAAkBA,EAAM,KAAK,EAAE,OAAS,EAEnDC,GAAS,CAACC,EAAWC,IAAiB,GAAGD,CAAC,IAAIC,CAAI,GAAGD,IAAM,EAAI,GAAK,GAAG,GAEzEE,GAAoB,EAClBC,GAAqB,IAAM,sBAAsB,KAAK,IAAI,CAAC,IAAI,EAAED,EAAiB,GAsIlFE,GAAa,aAAmC,CAACC,EAAOC,IAAiB,CAC7E,GAAM,CACJ,UAAAC,EACA,MAAAC,EACA,SAAAC,EACA,MAAOC,EACP,aAAAC,EAAe,GACf,cAAAC,EACA,KAAMC,EACN,YAAAC,EAAc,GACd,aAAAC,EACA,SAAAC,EAAW,OACX,SAAAC,EAAW,EACX,SAAAC,EAAW,EACX,SAAAC,EAAW,YACX,SAAAC,EACA,SAAAC,EACA,SAAAC,EACA,KAAMC,EACN,QAAAC,EACA,MAAAC,EACA,OAAAC,EACA,MAAAC,EACA,SAAAC,EACA,YAAaC,EACb,mBAAAC,EACA,oBAAAC,GACA,OAAAC,EACA,SAAAC,EAAW,GACX,eAAAC,EACA,YAAAC,EACA,MAAAC,EAAQ,GACR,YAAAC,EACA,cAAAC,EAAgB,GAChB,mBAAAC,EACA,SAAAC,EAAW,GACX,OAAAC,GACA,cAAAC,GACA,QAAAC,GACA,QAAAC,GACA,GAAGC,EACL,EAAIxC,EACEyC,EAAOC,GAAaxB,EAAU/C,EAAkB,EAEhDwE,GAAoBtC,GAAa,KACjC,CAACuC,EAAmBC,CAAoB,EAAU,WAAiBvC,CAAY,EAC/Eb,EAAQkD,GAAoBtC,EAAYuC,EAExCE,GAAmBtC,GAAY,KAC/B,CAACuC,EAAkBC,EAAmB,EAAU,WAAkBvC,CAAW,EAC7EwC,GAAOH,GAAmBtC,EAAWuC,EAKrCG,EAA0B,gBAAiBlD,EAC3C,CAACmD,GAAyBC,EAA0B,EAAU,WAA8B,IAAM3B,GAAsB,CAAC,CAAC,EAC1H4B,GAAoB,UACxB,IAAOH,EAA2B1B,GAAmB,CAAC,EAAK2B,GAC3D,CAACD,EAAyB1B,EAAiB2B,EAAuB,CACpE,EAGM,CAACG,GAAcC,EAAoB,EAAU,WAAS,CAAE,KAAM,GAAI,GAAI,CAAE,CAAC,EACzEC,GAAiB,cAAaC,GAAiBF,GAAsBG,IAAU,CAAE,KAAAD,EAAM,GAAIC,EAAK,GAAK,CAAE,EAAE,EAAG,CAAC,CAAC,EAE9GC,GAAgB,SAAuB,IAAI,EAC3CC,GAAkBC,GAAgB5D,EAAc0D,EAAO,EACvDG,GAAoB,SAA4B,IAAI,EACpDC,GAAqB,SAAyB,IAAI,EAKlDC,GAAsB,SAAO,EAAK,EAClCC,GAAsB,SAAO,EAAK,EAClCC,GAA2B,SAAkD,MAAS,EACtFC,GAAkB,SAAyD,IAAI,EAE/EC,GAAY5F,GAAQmD,CAAM,EAAE,KAAK,GAAG,EACpC0C,GAAiB7F,GAAQwD,CAAW,EAAE,KAAK,GAAG,EAC9CsC,GAAgB,UAAQ,IAAM9F,GAAQ4F,EAAS,EAAG,CAACA,EAAS,CAAC,EAC7DG,GAAqB,UAAQ,IAAOF,GAAiB7F,GAAQ6F,EAAc,EAAIC,GAAU,CAACD,GAAgBC,EAAO,CAAC,EAIlHE,GAAW,CACf,MAAA/E,EACA,YAAA4D,GACA,QAAAiB,GACA,aAAAC,GACA,SAAA3C,EACA,eAAAC,EACA,YAAAC,EACA,SAAAf,EACA,SAAAC,EACA,SAAAL,EACA,kBAAAgC,GACA,iBAAAG,GACA,wBAAAI,EACA,cAAA3C,EACA,aAAAG,EACA,oBAAAgB,GACA,mBAAAQ,EACA,SAAAjB,CACF,EACMwD,EAAe,SAAOD,EAAQ,EAEpCC,EAAO,QAAUD,GAIjB,IAAME,GAA8B,SAAmC,IAAI,EACrEC,EAAuB,cAAY,IAAMD,GAAsB,SAAWD,EAAO,QAAQ,YAAa,CAAC,CAAC,EAExGG,GAAgB,cAAaC,GAAkB,CAC9CJ,EAAO,QAAQ,kBAAkBzB,GAAoB6B,CAAI,EAC9DJ,EAAO,QAAQ,eAAeI,CAAI,CACpC,EAAG,CAAC,CAAC,EAECC,GAAiB,cAAaD,GAAiB,CAC9CJ,EAAO,QAAQ,mBAAmB5B,EAAqBgC,CAAI,EAChEJ,EAAO,QAAQ,gBAAgBI,CAAI,CACrC,EAAG,CAAC,CAAC,EAECE,GAAuB,cAAaF,GAA8B,CAEtEH,GAAsB,QAAUG,EAChC,eAAe,IAAM,CACnBH,GAAsB,QAAU,IAClC,CAAC,EACID,EAAO,QAAQ,yBAAyBrB,GAA2ByB,CAAI,EAC5EJ,EAAO,QAAQ,sBAAsBI,CAAI,CAC3C,EAAG,CAAC,CAAC,EAGCG,GAAqB,SAAoB,IAAI,GAAK,EAElDC,GAAiB,cACrB,CAACC,EAAerG,EAAoB+C,EAAoB6C,EAAO,QAAQ,WAAqB,CAC1F,IAAMU,EAAMV,EAAO,QACnB,GAAIU,EAAI,UAAYA,EAAI,UAAYD,EAAM,SAAW,EAAG,MAAO,GAE/D,IAAME,EAAUT,EAAe,EACzBE,EAA4B,CAAC,EAC7BQ,GAAyC,CAAC,EAC1CC,GAAiB,OAAOH,EAAI,gBAAmB,SAAW,KAAK,IAAIA,EAAI,eAAiBC,EAAQ,OAAQ,CAAC,EAAI,IAC7GG,GAAiB3D,EAAW,IAAW,EAE7C,QAAWhD,KAAQsG,EAAO,CACxB,GAAIL,EAAK,QAAUS,IAAkBT,EAAK,QAAUU,GAAgB,CAClEF,GAAS,KAAK,CAAE,KAAAzG,EAAM,OAAQ,OAAQ,CAAC,EACvC,QACF,CACA,GAAI,OAAOuG,EAAI,aAAgB,UAAYvG,EAAK,KAAOuG,EAAI,YAAa,CACtEE,GAAS,KAAK,CAAE,KAAAzG,EAAM,OAAQ,MAAO,CAAC,EACtC,QACF,CACA,GAAI,CAACD,GAAcC,EAAMC,CAAQ,EAAG,CAClCwG,GAAS,KAAK,CAAE,KAAAzG,EAAM,OAAQ,MAAO,CAAC,EACtC,QACF,CACA,IAAM4G,GAAMjG,GAAYX,EAAK,KAAMA,EAAK,IAAI,EAAI,IAAI,gBAAgBA,CAAI,EAAI,OACxE4G,IAAKR,GAAa,QAAQ,IAAIQ,EAAG,EACrCX,EAAK,KAAK,CAAE,GAAI/E,GAAmB,EAAG,KAAMlB,EAAK,KAAM,KAAMA,EAAK,KAAM,KAAMA,EAAK,KAAM,KAAAA,EAAM,IAAA4G,GAAK,OAAQ,MAAO,CAAC,CACtH,CAEA,IAAMC,GAAqB,CAAC,EAC5B,OAAIZ,EAAK,OAAS,IAChBE,GAAeK,EAAQ,OAAOP,CAAI,CAAC,EAC/BM,EAAI,WAAa,QAAQP,GAAQ,EAAI,EACzCa,GAAS,KAAK,GAAG/F,GAAOmF,EAAK,OAAQ,MAAM,CAAC,YAAY,GAEtDQ,GAAS,OAAS,IACpBF,EAAI,qBAAqBE,EAAQ,EACjCI,GAAS,KAAK,GAAG/F,GAAO2F,GAAS,OAAQ,MAAM,CAAC,yBAAyB,GAEvEI,GAAS,OAAS,GAAGjC,GAASiC,GAAS,KAAK,GAAG,CAAC,EAC7CZ,EAAK,MACd,EACA,CAACF,EAAgBI,GAAgBH,GAASpB,EAAQ,CACpD,EAEMkC,GAAoB,cAAaR,GAAkBD,GAASC,EAAOT,EAAO,QAAQ,OAAO,EAAG,CAACQ,EAAQ,CAAC,EACtGU,GAA6B,cAAaT,GAAkBD,GAASC,EAAOT,EAAO,QAAQ,YAAY,EAAG,CAACQ,EAAQ,CAAC,EAEpHW,GAAyB,cAC5BC,GAAe,CACd,IAAMT,EAAUT,EAAe,EACzBmB,EAAUV,EAAQ,KAAMW,GAAMA,EAAE,KAAOF,CAAE,EAC1CC,IACLf,GAAeK,EAAQ,OAAQW,GAAMA,EAAE,KAAOF,CAAE,CAAC,EACjDrC,GAAS,WAAWsC,EAAQ,IAAI,GAAG,EACrC,EACA,CAACnB,EAAgBI,GAAgBvB,EAAQ,CAC3C,EAEMwC,GAAe,cAClBC,GAAmB,CAClB,IAAMd,EAAMV,EAAO,QACnB,GAAIU,EAAI,UAAYA,EAAI,SAAU,MAAO,GACzC,IAAMC,EAAUT,EAAe,EAC/B,GAAI,CAACnF,GAAQ2F,EAAI,KAAK,GAAKC,EAAQ,SAAW,EAAG,MAAO,GACxD,IAAMc,EAAU,CAAE,MAAOf,EAAI,MAAO,YAAaC,CAAQ,EAGzD,GAAIa,GAASd,EAAI,SACf,QAAWgB,KAAOf,EAAae,EAAI,KAAKnB,GAAa,QAAQ,OAAOmB,EAAI,GAAG,EAE7E,OAAAhB,EAAI,WAAWe,CAAO,EAClBD,IACFnB,GAAS,EAAE,EACXC,GAAe,CAAC,CAAC,GAEZ,EACT,EACA,CAACJ,EAAgBG,GAAUC,EAAc,CAC3C,EAGM,YAAU,IAAM,CACpB,IAAMqB,EAAQpB,GAAa,QAC3B,GAAIoB,EAAM,OAAS,EAAG,OACtB,IAAMhB,EAAU,IAAI,IAAI/B,GAAY,IAAK0C,GAAMA,EAAE,GAAG,CAAC,EACrD,QAAWP,KAAO,MAAM,KAAKY,CAAK,EAC3BhB,EAAQ,IAAII,CAAG,IAClB,IAAI,gBAAgBA,CAAG,EACvBY,EAAM,OAAOZ,CAAG,EAGtB,EAAG,CAACnC,EAAW,CAAC,EAIV,YAAU,IAAM,CACpB,IAAM+C,EAAQpB,GAAa,QAC3B,MAAO,IAAM,CACX,GAAI,CAAAP,EAAO,QAAQ,wBACnB,SAAWe,KAAO,MAAM,KAAKY,CAAK,EAAG,IAAI,gBAAgBZ,CAAG,EAC5DY,EAAM,MAAM,EACd,CACF,EAAG,CAAC,CAAC,EAEL,IAAMC,GAAuB,cAAaC,GAAgC,CACxE,IAAMnB,EAAMV,EAAO,QACb8B,EAAQxC,GAAa,QAI3B,GAFA,aAAaG,GAAmB,OAAO,EACvCD,GAAc,QAAU,GACpB,CAACsC,GAASpB,EAAI,UAAYA,EAAI,SAAU,OAC5C,IAAMtG,EAAWyH,GAAS,QAAU,KAAO9H,GAAQ8H,EAAQ,MAAM,EAAInB,EAAI,QACnEvD,EAAW0E,GAAS,UAAYnB,EAAI,SAC1ChB,GAAU,QAAU,CAAE,SAAAtF,EAAU,SAAA+C,CAAS,EACzC2E,EAAM,OAAS1H,EAAS,KAAK,GAAG,EAChC0H,EAAM,SAAW3E,EACjBoC,GAAc,QAAU,GACxBuC,EAAM,MAAM,EAGZ,WAAW,IAAM,CACX,SAAS,SAAS,IAAGvC,GAAc,QAAU,GACnD,EAAG,GAAI,CACT,EAAG,CAAC,CAAC,EAECwC,GAA6B,cAAY,IAAM,CAGnDvC,GAAc,QAAU,GACxB,aAAaC,GAAmB,OAAO,EACvCA,GAAmB,QAAU,WAAW,IAAM,CAC5CD,GAAc,QAAU,EAC1B,EAAG,GAAG,CACR,EAAG,CAAC,CAAC,EAEC,YAAU,IAAM,IAAM,aAAaC,GAAmB,OAAO,EAAG,CAAC,CAAC,EAGlE,YAAU,IAAM,CACpB,IAAMqC,EAAQxC,GAAa,QACrB0C,EAAQ,IAAM,CAClBzC,GAAc,QAAU,EAC1B,EACA,cAAO,iBAAiB,QAASyC,CAAK,EACtCF,GAAO,iBAAiB,SAAUE,CAAK,EAChC,IAAM,CACX,OAAO,oBAAoB,QAASA,CAAK,EACzCF,GAAO,oBAAoB,SAAUE,CAAK,CAC5C,CACF,EAAG,CAAC,CAAC,EAEL,IAAMC,GAA8B,cACjCC,GAA+C,CAC9C,IAAMJ,EAAQI,EAAM,cACdzB,EAAQ,MAAM,KAAKqB,EAAM,OAAS,CAAC,CAAC,EACpCK,EAASzC,GAAU,QACzBc,GAASC,EAAO0B,GAAQ,UAAYnC,EAAO,QAAQ,QAASmC,GAAQ,QAAQ,EAC5E5C,GAAc,QAAU,GACxBG,GAAU,QAAU,KAEpBoC,EAAM,MAAQ,EAChB,EACA,CAACtB,EAAQ,CACX,EAEM4B,GAA0B,cAC7BF,GAA4C,CAC3CtE,KAAgBsE,CAAK,EACrB,IAAMxB,EAAMV,EAAO,QACbqC,EAASnD,GAAQ,QACvB,GAAI,CAACmD,GAAU3B,EAAI,WAAa,OAAQ,OACxC,IAAM4B,EAAaJ,EAAM,cACrBI,GAAcD,EAAO,SAASC,CAAU,GACxC/C,GAAc,SAAWC,GAAc,SACvC,CAACzE,GAAQ2F,EAAI,KAAK,GAAKR,EAAe,EAAE,SAAW,GAAGC,GAAQ,EAAK,CACzE,EACA,CAACvC,GAAeuC,GAASD,CAAc,CACzC,EAEMqC,GAAmB,cAAa9B,GAAkB,CACtDQ,GAAYR,CAAK,CACnB,EAAG,CAACQ,EAAW,CAAC,EAGV,CAAE,aAAAuB,GAAc,aAAAC,EAAa,EAAIC,GAAY,CACjD,OAAQH,GAER,YAAa,IAAMxD,GAAS,EAAE,EAC9B,QAAS,GACT,WAAY,GAEZ,QAAS,GACT,SAAU,CAACrB,GAAYpB,GAAYC,CACrC,CAAC,EACKoG,GAAajF,GAAY+E,GAEzB,sBACJ9E,GACA,KAAO,CACL,cAAe,IAAM0B,GAAY,SAAS,MAAM,CAAE,cAAe,EAAK,CAAC,EACvE,eAAgB,IAAMuC,GAAe,CACvC,GACA,CAACA,EAAc,CACjB,EAGA,IAAMgB,GAAmC,cACtCV,GAA8B,CAE7B,GADI5F,GACA4F,EAAM,cAAgB,SAAWA,EAAM,SAAW,EAAG,OACzD,IAAMW,EAASX,EAAM,OACjBW,aAAkB,SAAWA,EAAO,QAAQ,+GAA+G,IAC/JX,EAAM,eAAe,EACrB7C,GAAY,SAAS,MAAM,CAAE,cAAe,EAAK,CAAC,EACpD,EACA,CAAC/C,CAAQ,CACX,EAEMwG,GAAqB,UACzB,KAAO,CACL,KAAAtE,GACA,QAAA2B,GACA,SAAAE,GACA,KAAArC,EACA,SAAA9B,EACA,SAAAC,EACA,SAAAC,EACA,SAAAC,EACA,SAAAC,EACA,SAAAC,EACA,MAAAe,EACA,cAAAE,EACA,SAAAL,EACA,YAAAkC,GACA,YAAAT,GACA,iBAAAuC,GACA,OAAAI,GACA,YAAAN,GACA,qBAAAC,GACA,eAAAU,GACA,qBAAAG,EACF,GACA,CACEvD,GAAM2B,GAASE,GAAUrC,EAAM9B,EAAUC,EAAUC,EAAUC,EAAUC,EAAUC,EAAUe,EAC3FE,EAAeL,EAAUyB,GAAauC,GAAkBI,GAAQN,GAAaC,GAC7EU,GAAgBG,EAClB,CACF,EAEA,OACE,gBAACpI,GAAe,SAAf,CAAwB,MAAOmJ,IAC9B,gBAAClJ,GAAoB,SAApB,CAA6B,MAAOoB,GACnC,gCACI,gBAAC,OACE,GAAG+C,GACJ,IAAKoB,GACL,UAAW4D,EAAW,iBAAkB,aAAa/E,CAAI,GAAIvC,CAAS,EACtE,MAAO,CAAE,SAAU,WAAY,MAAAoB,EAAO,SAAAC,EAAU,GAAGpB,CAAM,EACzD,aAAY8C,GAAO,OAAS,SAC5B,gBAAelC,EAAW,GAAK,OAC/B,gBAAeC,EAAW,GAAK,OAC/B,mBAAkBoG,GAAa,GAAK,OACpC,oBAAmBhG,EACnB,cAAaC,EACb,cAAewF,IAEf,gBAAC,SACC,IAAK9C,GACL,KAAK,OACL,SAAU,GACV,cAAW,GACX,MAAO,CAAE,QAAS,MAAO,EACzB,SAAU2C,GACZ,EACCpE,GACC,gBAAC,OAAI,UAAU,qBACb,gBAACmF,GAAkB,SAAlB,CAA2B,MAAOhF,GAAOH,EAAQ,CACpD,EACE,KACJ,gBAAC,OAAK,GAAIH,EAAW8E,GAAa,EAAI,CAAC,EAAI,MAAO,CAAE,MAAO,OAAQ,KAAM,WAAY,UAAW,CAAE,EAAG,cAAeI,IAClH,gBAAC,OACC,UAAWG,EAAW,gBAAiB,cAAcrG,GAAW,QAAQ,EAAE,EAC1E,MAAO,CAAE,SAAU,UAAW,EAC9B,oBAAmBC,EACnB,cAAaC,GAEb,gBAAC,OAAI,UAAU,kBACZjB,CACH,EACCgH,IACC,gBAAC,OAAI,UAAU,wBAAwB,cAAW,IAChD,gBAAC,OAAI,UAAU,yBACb,gBAACM,GAAA,CAAK,SAAS,SAAS,KAAMjF,EAAM,OAAO,UAAS,2BAEpD,CACF,CACF,CAEJ,CACF,EACCF,GACC,gBAACmF,GAAA,CAAK,GAAG,MAAM,KAAMjF,IAAS,IAAM,IAAM,IAAK,SAAS,SAAS,UAAU,qBACxEF,EACH,EACE,KACJ,gBAACoF,GAAA,CAAe,KAAK,SAAS,YAAU,UACrCP,GAAa,6BAA+B,gBAAC,QAAK,IAAK9D,GAAa,IAAKA,GAAa,IAAK,CAC9F,CACF,CACJ,CACF,CACF,CAEJ,CAAC,EACDvD,GAAK,YAAc,eAkCnB,IAAM6H,GAAiB,aAA+C,CAAC5H,EAAOC,IAAiB,CAC7F,GAAM,CACJ,UAAAC,EACA,MAAAC,EACA,QAAA0H,EACA,QAAAC,EACA,SAAAC,EACA,QAAAC,EACA,UAAAC,EACA,mBAAAC,EACA,iBAAAC,EACA,cAAAC,EAAgB,GAChB,GAAGC,CACL,EAAIrI,EACEzB,EAAMD,EAAkB,EACxBmB,EAAc,aAAWpB,EAAmB,EAC5C,CAAE,KAAA4E,EAAM,SAAArC,EAAU,SAAAC,EAAU,SAAAF,EAAU,SAAAI,EAAU,SAAAC,EAAU,QAAA4D,EAAS,SAAAE,EAAU,YAAAhB,EAAa,MAAA/B,EAAO,qBAAA4D,EAAsB,KAAAlD,GAAM,OAAAuD,EAAQ,cAAA/D,CAAc,EAAI1D,EACvJ+J,EAAczE,GAAgB5D,EAAc6D,CAAW,EAGvDyE,EAAsB,SAAO,CAAC,EAC9BC,EAAmB,SAAO,CAAC,EAC3BC,EAAqB,SAAO,EAAK,EAEjCC,EAAkB,SAAO,CAAE,KAAAzF,EAAM,SAAArC,EAAU,SAAAC,CAAS,CAAC,EAE3D/C,GAA0B,IAAM,CAC9B4K,EAAU,QAAU,CAAE,KAAAzF,EAAM,SAAArC,EAAU,SAAAC,CAAS,CACjD,EAAG,CAACoC,EAAMrC,EAAUC,CAAQ,CAAC,EAE7B,IAAM8H,EAAyB,cAAY,IAAM,CAC/C,IAAM3K,EAAK8F,EAAY,QACvB,GAAI,CAAC9F,EAAI,OACT,IAAM4K,EAAgB,OAAO,iBAAiB5K,CAAE,EAChDuK,EAAc,QAAU,WAAWK,EAAc,UAAU,GAAK,GAChEJ,EAAW,SAAW,WAAWI,EAAc,UAAU,GAAK,IAAM,WAAWA,EAAc,aAAa,GAAK,EACjH,EAAG,CAAC9E,CAAW,CAAC,EAGV+E,EAAoB,cAAY,CAAC7K,EAAyB8K,IAAoB,CAClF,GAAM,CAAE,SAAUC,EAAK,SAAUC,EAAI,EAAIN,EAAU,QAC7CO,EAAaV,EAAc,QAC3BW,GAAUV,EAAW,QACrBW,GAAY,KAAK,MAAML,EAASC,EAAM,GAAKE,CAAU,EAAIC,GACzDE,EAAY,KAAK,MAAMN,EAASE,GAAM,GAAKC,CAAU,EAAIC,GACzDG,GAAgB,KAAK,IAAIrL,EAAG,aAAcmL,EAAS,EACzDnL,EAAG,MAAM,OAAS,GAAG,KAAK,IAAIqL,GAAeD,CAAS,CAAC,KACvD,IAAME,GAAcD,GAAgBD,EACpCpL,EAAG,MAAM,UAAYsL,GAAc,OAAS,SAC5CtL,EAAG,MAAM,UAAYsL,GAAc,GAAGF,CAAS,KAAO,MACxD,EAAG,CAAC,CAAC,EAGLtL,GAA0B,IAAM,CAC9B6K,EAAiB,CACnB,EAAG,CAACA,EAAkBlG,EAAI,CAAC,EAG3B3E,GAA0B,IAAM,CAC9B,IAAME,EAAK8F,EAAY,QAClB9F,IACDuK,EAAc,UAAY,GAAGI,EAAiB,EAClD5K,GAAmBC,EAAI,IAAM,CAC3BA,EAAG,MAAM,OAAS,OAClB,IAAI8K,EAAS7F,EACb,GAAI,CAACA,IAAStC,IAAa,YAAcA,IAAa,QAAS,CAC7D,IAAM4I,EAAgB,KAAK,KAAKhB,EAAc,OAAO,EAAIC,EAAW,QAChExK,EAAG,aAAeuL,EAAgB,IACpCT,EAAS,GACTlE,EAAQ,EAAI,EAEhB,CACAiE,EAAY7K,EAAI8K,CAAM,CACxB,CAAC,EACH,EAAG,CAACrJ,EAAOwD,EAAMtC,EAAUC,EAAUC,EAAU4B,GAAMmC,EAASd,EAAa6E,EAAkBE,CAAW,CAAC,EAGnG,YAAU,IAAM,CACpB,IAAM7K,EAAK8F,EAAY,QACvB,GAAI,CAAC9F,GAAM,OAAO,eAAmB,IAAa,OAClD,IAAIwL,EAAY,GACVC,EAAK,IAAI,eAAgBC,IAAY,CACzC,IAAMpI,EAAQoI,GAAQ,CAAC,GAAG,YAAY,OAAS,EAC/C,GAAIpI,IAAUkI,EAAW,OACzB,IAAMG,GAAQH,IAAc,GAC5BA,EAAYlI,EACR,CAAAqI,KACJhB,EAAiB,EACjB5K,GAAmBC,EAAI,IAAM,CAC3BA,EAAG,MAAM,OAAS,OAClB6K,EAAY7K,EAAI0K,EAAU,QAAQ,IAAI,CACxC,CAAC,EACH,CAAC,EACD,OAAAe,EAAG,QAAQzL,CAAE,EACN,IAAMyL,EAAG,WAAW,CAC7B,EAAG,CAAC3F,EAAa6E,EAAkBE,CAAW,CAAC,EAGzC,YAAU,IAAM,CAQtB,EAAG,CAAC,CAAC,EAEL,IAAMe,GAAoB,cACvBjD,GAAU,CACTmB,IAAUnB,CAAK,EACX,EAAA5F,GAAYC,KACXL,IAAa,SAAWA,IAAa,SAAW,CAACsC,GAAM2B,EAAQ,EAAI,CAC1E,EACA,CAAC7D,EAAUC,EAAUL,EAAUsC,EAAM2B,EAASkD,CAAO,CACvD,EAEM+B,GAAqB,cACxBlD,GAAU,CACT7B,EAAS6B,EAAM,cAAc,KAAK,EAClCoB,IAAWpB,CAAK,CAClB,EACA,CAAC7B,EAAUiD,CAAQ,CACrB,EAEM+B,GAAoB,cACvBnD,GAAU,CAET,GADAqB,IAAUrB,CAAK,EACXA,EAAM,kBAAoB,CAAC5E,GAAShB,GAAYC,EAAU,OAC9D,IAAMkE,EAAQ,MAAM,KAAKyB,EAAM,eAAe,OAAS,CAAC,CAAC,EACtD,OAAQoD,GAASA,EAAK,OAAS,MAAM,EACrC,IAAKA,GAASA,EAAK,UAAU,CAAC,EAC9B,OAAQC,GAAiB,CAAC,CAACA,CAAC,EAC3B9E,EAAM,SAAW,GAEjBS,EAAqBT,CAAK,EAAI,GAAGyB,EAAM,eAAe,CAC5D,EACA,CAAC5E,EAAOhB,EAAUC,EAAUgH,EAASrC,CAAoB,CAC3D,EAEMsE,GAA+B,cAClCtD,GAAU,CACT8B,EAAa,QAAU,GACvBP,IAAqBvB,CAAK,CAC5B,EACA,CAACuB,CAAkB,CACrB,EAEMgC,GAA6B,cAChCvD,GAAU,CACT8B,EAAa,QAAU,GACvBN,IAAmBxB,CAAK,CAC1B,EACA,CAACwB,CAAgB,CACnB,EAEMgC,EAAsB,cACzBxD,GAAU,CACTsB,IAAYtB,CAAK,EACb,EAAAA,EAAM,kBAAoB,CAACyB,KAC3BzB,EAAM,MAAQ,SAAWA,EAAM,UAAYA,EAAM,QAAUA,EAAM,SAAWA,EAAM,SAElF8B,EAAa,SAAW9B,EAAM,YAAY,aAAeA,EAAM,YAAY,UAAY,MAE3FA,EAAM,eAAe,EACrBX,EAAO/D,CAAa,GACtB,EACA,CAACmG,EAAeH,EAAWjC,EAAQ/D,CAAa,CAClD,EAEMmI,GAAOvC,EAAUwC,EAAO,WAC9B,OACE,gBAAC,OAAI,UAAW7C,EAAW,kBAAmB,qBAAsBtH,CAAS,GAC3E,gBAACkK,GAAA,CACE,GAAG/B,EACJ,IAAKC,EACL,UAAU,kBACV,MAAO7I,EACP,SAAUoK,GACV,QAASD,GACT,QAASE,GACT,UAAWK,EACX,mBAAoBF,GACpB,iBAAkBC,GAClB,SAAUnJ,EACV,SAAUC,EACV,KAAMiC,EAAOrC,EAAW,EACxB,WAAYyH,EAAc,YAAc,GACxC,YAAaA,EAAc,aAAe,KAC1C,MAAOlI,EACT,CACF,CAEJ,CAAC,EACDyH,GAAS,YAAc,mBAOvB,IAAM0C,GAAoB,aAA4C,CAACtK,EAAOC,IAAiB,CAC7F,GAAM,CAAE,SAAAG,EAAU,QAAAyH,EAAS,UAAA3H,EAAW,GAAGsC,CAAS,EAAIxC,EAEtD,OADY1B,EAAkB,EACtB,KAAa,KAGnB,gBAFWuJ,EAAUwC,EAAO,MAE3B,CAAM,GAAG7H,EAAU,IAAKvC,EAAc,UAAWuH,EAAW,wBAAyBtH,CAAS,GAC5FE,CACH,CAEJ,CAAC,EACDkK,GAAY,YAAc,sBAE1B,IAAMC,GAAkB,aAA4C,CAACvK,EAAOC,IAAiB,CAC3F,GAAM,CAAE,SAAAG,EAAU,QAAAyH,EAAS,UAAA3H,EAAW,GAAGsC,CAAS,EAAIxC,EAEtD,OADY1B,EAAkB,EACtB,KAAa,KAGnB,gBAFWuJ,EAAUwC,EAAO,MAE3B,CAAM,GAAG7H,EAAU,IAAKvC,EAAc,UAAWuH,EAAW,sBAAuBtH,CAAS,GAC1FE,CACH,CAEJ,CAAC,EACDmK,GAAU,YAAc,oBAgBxB,IAAMC,GAAuB,aAAgD,CAACxK,EAAOC,IAAiB,CACpG,GAAM,CAAE,QAAA4H,EAAS,WAAA4C,EAAY,iBAAAC,EAAkB,UAAAxK,EAAW,SAAAE,EAAU,GAAGoC,CAAS,EAAIxC,EAC9EzB,EAAMD,EAAkB,EACxBqM,EAAiB,WAAS,QAAQvK,CAAQ,EAAE,OAAS,EAC3D,OAAI7B,EAAI,YAAY,SAAW,GAAK,CAACoM,GAAY,CAACF,EAAmB,KAGnE,gBAAC,WACC,gBAHS5C,EAAUwC,EAAO,MAGzB,CAAM,GAAG7H,EAAU,IAAKvC,EAAc,UAAWuH,EAAW,2BAA4BtH,CAAS,EAAG,KAAK,OAAO,aAAYsC,EAAS,YAAY,GAAK,eACrJ,gBAACoI,GAAA,CAAW,UAAU,uBAAuB,WAAW,cACtD,gBAACC,GAAA,CAAK,MAAM,SAAS,IAAI,IAAI,SAAS,eACnCtM,EAAI,YAAY,IAAK4H,GACpB,gBAAC2E,GAAA,CAAW,IAAK3E,EAAI,GAAI,WAAYA,EAAK,QAAS,CAAC,CAACuE,GAClDA,IAAmBvE,CAAG,CACzB,CACD,EACA/F,CACH,CACF,CACF,CACF,CAEJ,CAAC,EACDoK,GAAe,YAAc,yBAO7B,SAASO,GAAiBC,EAA2BlH,EAA0D,CAC7G,IAAMmH,EAAOD,EAAO,QAAQ,mBAAmB,EACzCE,EAAQD,GAAM,cAAgB,MAAM,KAAKA,EAAK,cAAc,QAAQ,EAAI,CAAC,EACzEE,EAAQF,EAAOC,EAAM,QAAQD,CAAI,EAAI,GAErCG,GADYF,EAAMC,EAAQ,CAAC,GAAKD,EAAMC,EAAQ,CAAC,IACvB,cAAiC,uBAAuB,EAClFC,EAAYA,EAAW,MAAM,EAC5BtH,EAAY,SAAS,MAAM,CAAE,cAAe,EAAK,CAAC,CACzD,CAGA,IAAMuH,GAQD,CAAC,CAAE,KAAAC,EAAM,SAAAC,EAAU,MAAAC,EAAO,OAAAC,EAAQ,YAAAC,EAAa,SAAAC,CAAS,IAAM,CACjE,IAAMpN,EAAMD,EAAkB,EAC9B,OACE,gCACE,gBAAC,QAAK,UAAU,qBAAqB,YAAWiN,EAAU,cAAW,IAClED,CACH,EACA,gBAAC5D,GAAA,CAAK,UAAU,sBAAsB,KAAMnJ,EAAI,KAAM,SAAQ,IAC3DiN,EACAC,EAAS,gBAAC9D,GAAA,KAAe,KAAG8D,CAAO,EAAoB,IAC1D,EACCE,GACC,gBAACC,GAAA,CAAW,UAAU,uBAAuB,aAAYF,EAAa,KAAK,IAAI,QAAQ,QAAQ,MAAM,OAAO,QAASC,GACnH,gBAACE,GAAA,IAAU,CACb,CAEJ,CAEJ,EAQMC,GAA0D,CAAE,UAAW,YAAa,MAAO,kBAAmB,EAE9GhB,GAAmB,aAA4C,CAAC9K,EAAOC,IAAiB,CAC5F,GAAM,CAAE,WAAA8L,EAAY,QAAAlE,EAAS,UAAA3H,EAAW,SAAAE,EAAU,GAAGoC,CAAS,EAAIxC,EAC5DzB,EAAMD,EAAkB,EACxB8L,EAAOvC,EAAUwC,EAAO,MACxB2B,EAAU,CAAC,CAACD,EAAW,KAAOxM,GAAYwM,EAAW,KAAMA,EAAW,IAAI,EAC1EE,EAAY,GAAG,KAAK,KAAKF,EAAW,KAAO,IAAI,CAAC,MAChDG,EAAcH,EAAW,OAASD,GAAaC,EAAW,MAAM,EAAI,OACpEI,EAAS5N,EAAI,UAAYA,EAAI,SAE7B6N,EAAgBzF,GAA+C,CACnEoE,GAAiBpE,EAAM,cAAepI,EAAI,WAAW,EACrDA,EAAI,iBAAiBwN,EAAW,EAAE,CACpC,EAEMT,EACJS,EAAW,SAAW,YACpB,gBAACM,GAAA,IAAQ,EACPL,EACF,gBAAC,OAAI,UAAU,4BAA4B,IAAKD,EAAW,IAAK,IAAI,GAAG,EAEvE,gBAACO,GAAA,IAAa,EAGlB,OACE,gBAAClC,EAAA,CACE,GAAG5H,EACJ,IAAKvC,EACL,UAAWuH,EAAWpH,EAAW,uBAAyB,sCAAuCF,CAAS,EAC1G,KAAK,WACL,YAAW8L,EAAU,QAAU,OAC/B,cAAaD,EAAW,OACxB,MAAOA,EAAW,MAEjB3L,GACC,gBAACiL,GAAA,CACC,KAAMC,EACN,SAAUU,GAAWD,EAAW,SAAW,YAAc,QAAU,OACnE,MAAOA,EAAW,KAClB,OAAQG,EAAc,GAAGD,CAAS,KAAKC,CAAW,GAAKD,EACvD,YAAa,UAAUF,EAAW,IAAI,GACtC,SAAUI,EAAS,OAAYC,EACjC,CAEJ,CAEJ,CAAC,EACDtB,GAAW,YAAc,qBAuBzB,IAAMyB,GAAa,aAAsC,CAACvM,EAAOC,IAAiB,CAChF,GAAM,CAAE,SAAAG,EAAU,KAAAoM,EAAM,MAAAC,EAAO,MAAArL,EAAO,SAAAuK,EAAU,YAAAD,EAAa,UAAAxL,EAAW,GAAGsC,CAAS,EAAIxC,EAClFzB,EAAMD,EAAkB,EACxB6N,EAAS5N,EAAI,UAAYA,EAAI,SAE7B6N,EAAeT,EAChBhF,GAA+C,CAC9CoE,GAAiBpE,EAAM,cAAepI,EAAI,WAAW,EACrDoN,EAAS,CACX,EACA,OAEJ,OACE,gBAAC,OACE,GAAGnJ,EACJ,IAAKvC,EACL,UAAWuH,EAAW,iBAAkBtH,CAAS,EACjD,KAAK,WACL,oBAAmBuM,EAAQ,OAAarL,GAAS,OACjD,MAAOhB,GAEP,gBAACiL,GAAA,CACC,KAAMoB,EAAQ,gBAAC,OAAI,UAAU,4BAA4B,IAAKA,EAAO,IAAI,GAAG,EAAKD,EACjF,SAAUC,EAAQ,QAAU,OAC5B,MAAOrM,EACP,YAAasL,GAAe,UAAUtL,CAAQ,GAC9C,SAAU+L,EAAS,OAAYC,EACjC,CACF,CAEJ,CAAC,EACDG,GAAK,YAAc,eASnB,IAAMG,GAAsB,aAAkD,CAAC1M,EAAOC,IAAiB,CACrG,GAAM,CAAE,QAAA4H,EAAS,OAAAlG,EAAQ,SAAAC,EAAU,SAAU+K,EAAc,cAAAC,EAAe,QAAAC,EAAS,GAAGC,CAAY,EAAI9M,EAChGzB,EAAMD,EAAkB,EACxByC,EAAW4L,GAAgBpO,EAAI,UAAYA,EAAI,SAErD,OACE,gBAFWsJ,EAAUwC,EAAO,SAE3B,CACE,GAAGyC,EACJ,IAAK7M,EACL,UAAWuH,EAAW,0BAA2BsF,EAAY,SAAS,EACtE,KAAMA,EAAY,MAAQ,SAC1B,aAAYA,EAAY,YAAY,GAAK,kBACzC,SAAU/L,EACV,cAAgB4F,GAAiD,CAC/DiG,IAAgBjG,CAAK,EACjB,CAAC5F,GAAY,CAAC4F,EAAM,kBAAkBpI,EAAI,qBAAqB,CACrE,EACA,QAAUoI,GAA+C,CACvDkG,IAAUlG,CAAK,EACX,EAAA5F,GAAY4F,EAAM,mBACtBpI,EAAI,eAAe,CAAE,OAAAoD,EAAQ,SAAAC,CAAS,CAAC,CACzC,EACF,CAEJ,CAAC,EACD8K,GAAc,YAAc,wBAO5B,IAAMK,GAAY,aAAqC,CAAC/M,EAAOC,IAAiB,CAC9E,GAAM,CAAE,QAAA4H,EAAS,SAAAzH,EAAU,UAAAF,EAAW,GAAGsC,CAAS,EAAIxC,EAEtD,OADY1B,EAAkB,EACrB,KAGP,gBAAC,WACC,gBAHSuJ,EAAUwC,EAAO,MAGzB,CAAM,GAAG7H,EAAU,IAAKvC,EAAc,UAAWuH,EAAW,gBAAiBtH,CAAS,GACrF,gBAAC2K,GAAA,CAAK,MAAM,SAAS,QAAQ,UAAU,MAAM,QAC1CzK,CACH,CACF,CACF,EAToB,IAWxB,CAAC,EACD2M,GAAI,YAAc,cAIlB,IAAMC,GAAiB,aAAyC,CAAChN,EAAOC,IAAiB,CACvF,GAAM,CAAE,UAAAC,EAAW,GAAGsC,CAAS,EAAIxC,EACnC,OAAO,gBAAC,OAAK,GAAGwC,EAAU,IAAKvC,EAAc,UAAWuH,EAAW,qBAAsBtH,CAAS,EAAG,CACvG,CAAC,EACD8M,GAAS,YAAc,mBAEvB,IAAMC,GAAe,aAAyC,CAACjN,EAAOC,IAAiB,CACrF,GAAM,CAAE,UAAAC,EAAW,GAAGsC,CAAS,EAAIxC,EACnC,OAAO,gBAAC,OAAK,GAAGwC,EAAU,IAAKvC,EAAc,UAAWuH,EAAW,mBAAoBtH,CAAS,EAAG,CACrG,CAAC,EACD+M,GAAO,YAAc,iBAiCrB,IAAMC,GAAa,aAAyC,CAAClN,EAAOC,IAAiB,CACnF,GAAM,CACJ,QAAA4H,EACA,YAAAsF,EACA,SAAApM,EACA,SAAAX,EACA,MAAAD,EACA,UAAAD,EACA,KAAMgB,EACN,QAASkM,EAAa,SAAAC,EACtB,SAAAC,EACA,QAAAT,EACA,OAAAU,EAAS,QACT,OAAAC,EACA,QAAAC,EACA,UAAAC,EAAY,OACZ,WAAAC,EAAa,QACb,SAAAC,EACA,UAAAC,EACA,aAAcC,EACd,kBAAmBC,EACnB,GAAGjB,CACL,EAAI9M,EACEzB,EAAMD,EAAkB,EACxBmB,EAAc,aAAWpB,EAAmB,EAE5C2P,EAAaxO,GAAQC,CAAK,GAAKlB,EAAI,YAAY,OAAS,EAExD0P,EAAkCD,EAAa,OADrCT,IAAW,aAAeA,IAAW,YACmB,OAASA,IAAW,QAAU,QAAU,OAEhH,GAAIhP,EAAI,WAAa,SAAW0P,IAAS,OAAQ,OAAO,KAExD,IAAMC,EAAUD,IAAS,QAAU1P,EAAI,WAAa,UAAYyP,EAC1DG,EAAWF,IAAS,OAASlN,GAAYxC,EAAI,UAAYA,EAAI,UAAY,CAACyP,EAAajN,GAAYxC,EAAI,SAGvG6P,EACJH,IAAS,OAAS,CAAE,aAAcP,CAAU,EAAIO,IAAS,QAAU,CAAE,aAAcN,CAAW,EAAII,EAAiB,CAAE,kBAAmBA,CAAe,EAAI,CAAE,aAF9ID,GAAa,MAEwJ,EAEhLO,EAAe1H,GAA+C,CAElE,GADAkG,IAAUlG,CAAK,EACXA,EAAM,kBAAoBwH,EAAU,OACxC,GAAIF,IAAS,OAAQ,CACnBT,IAAS,EACT,MACF,CACA,GAAIS,IAAS,QAAS,CACpBR,IAAU,EACV,MACF,CACA,IAAMxH,EAAQkH,GAAe5O,EAAI,cAE7BA,EAAI,OAAO0H,CAAK,GAAKA,GAAO1H,EAAI,YAAY,SAAS,MAAM,CAAE,cAAe,EAAK,CAAC,CACxF,EAEM+P,EACJL,IAAS,OACPL,IAAaL,IAAW,YAAc,gBAAClB,GAAA,IAAQ,EAC7C,gBAAC,OAAI,MAAM,6BAA6B,MAAM,KAAK,OAAO,KAAK,QAAQ,YAAY,KAAK,eAAe,cAAW,IAChH,gBAAC,QAAK,EAAE,IAAI,EAAE,IAAI,MAAM,KAAK,OAAO,KAAK,GAAG,IAAI,CAClD,GAEA4B,IAAS,QACXJ,GACE,gBAAC,OAAI,MAAM,6BAA6B,MAAM,KAAK,OAAO,KAAK,QAAQ,YAAY,KAAK,OAAO,OAAO,eAAe,YAAY,IAAI,cAAc,QAAQ,eAAe,QAAQ,cAAW,IAC3L,gBAAC,QAAK,EAAE,4BAA4B,EACpC,gBAAC,QAAK,EAAE,WAAW,CACrB,EAGFzN,GACE,gBAAC,OAAI,MAAM,6BAA6B,MAAM,KAAK,OAAO,KAAK,QAAQ,YAAY,KAAK,OAAO,OAAO,eAAe,YAAY,IAAI,cAAc,QAAQ,eAAe,QAAQ,cAAW,IAC3L,gBAAC,QAAK,EAAE,WAAW,EACnB,gBAAC,QAAK,EAAE,gBAAgB,CAC1B,EAIN,OACE,gBAACwL,GAAA,CACE,GAAGkB,EACJ,IAAK7M,EACL,KAAMiB,GAAY3C,EAAI,KACrB,GAAI8O,EAAW,CAAE,SAAAA,CAAS,EAAI,CAAE,QAASD,IAAgB7O,EAAI,MAAQ0P,IAAS,OAAS,QAAU,QAAS,EAC3G,SAAUE,EACV,UAAW3G,EAAW,iBAAkBtH,CAAS,EACjD,MAAO,CAAE,QAASgO,EAAU,EAAI,EAAG,cAAeA,EAAU,OAAY,OAAQ,GAAG/N,CAAM,EAEzF,cAAa+N,EAAU,OAAY,GACnC,SAAUA,EAAUZ,EAAW,GAC/B,QAASzF,EACT,QAASwG,EACT,cAAad,EACb,YAAWU,EACV,GAAGG,GAEHE,CACH,CAEJ,CAAC,EACDpB,GAAK,YAAc",
|
|
6
|
+
"names": ["chatbar_exports", "__export", "AttachTrigger", "Attachment", "AttachmentsRow", "InlineEnd", "InlineStart", "Item", "Root", "Row", "RowEnd", "RowStart", "Send", "Textarea", "React", "classNames", "useComposedRefs", "useDropzone", "useIsomorphicLayoutEffect", "withoutPlaceholder", "el", "measure", "placeholder", "chatbarSizePropDef", "ChatbarContext", "ChatbarValueContext", "useChatbarContext", "ctx", "toArray", "val", "s", "matchesAccept", "file", "patterns", "mime", "name", "patRaw", "pat", "type", "subtype", "fmType", "fmSubtype", "IMAGE_EXT_RE", "isImageLike", "hasText", "value", "plural", "n", "word", "attachmentCounter", "createAttachmentId", "Root", "props", "forwardedRef", "className", "style", "children", "valueProp", "defaultValue", "onValueChange", "openProp", "defaultOpen", "onOpenChange", "expandOn", "minLines", "maxLines", "sendMode", "disabled", "readOnly", "onSubmit", "sizeProp", "variant", "color", "radius", "width", "maxWidth", "attachmentsProp", "defaultAttachments", "onAttachmentsChange", "accept", "multiple", "maxAttachments", "maxFileSize", "paste", "pasteAccept", "clearOnSubmit", "onAttachmentReject", "dropzone", "apiRef", "onBlurCapture", "notices", "context", "divProps", "size", "useThemeSize", "isValueControlled", "valueUncontrolled", "setValueUncontrolled", "isOpenControlled", "openUncontrolled", "setOpenUncontrolled", "open", "isAttachmentsControlled", "attachmentsUncontrolled", "setAttachmentsUncontrolled", "attachments", "announcement", "setAnnouncementState", "announce", "text", "prev", "rootRef", "composedRootRef", "useComposedRefs", "textareaRef", "fileInputRef", "pickerOpenRef", "pressGuardRef", "pressGuardTimerRef", "pickerRef", "acceptKey", "pasteAcceptKey", "accepts", "pasteAccepts", "snapshot", "latest", "pendingAttachmentsRef", "getAttachments", "setOpen", "next", "setValue", "setAttachments", "ownedUrlsRef", "addFiles", "files", "cfg", "current", "rejected", "remainingSlots", "perActionLimit", "url", "messages", "appendFiles", "appendFilesFromPaste", "removeAttachment", "id", "removed", "a", "submit", "clear", "payload", "att", "owned", "openFilePicker", "options", "input", "beginFilePickerPress", "reset", "handleFileInputChange", "event", "picker", "handleBlurCapture", "rootEl", "nextTarget", "handleDrop", "getRootProps", "isDragActive", "useDropzone", "dragActive", "handleContainerPointerDown", "target", "contextValue", "classNames", "NoticeSizeContext", "Text", "VisuallyHidden", "Textarea", "asChild", "onFocus", "onChange", "onPaste", "onKeyDown", "onCompositionStart", "onCompositionEnd", "submitOnEnter", "textareaProps", "composedRef", "lineHeightRef", "paddingRef", "composingRef", "sizingRef", "recomputeMetrics", "computedStyle", "applyHeight", "isOpen", "min", "max", "lineHeight", "padding", "minHeight", "maxHeight", "contentHeight", "overflowing", "compactHeight", "prevWidth", "ro", "entries", "first", "handleFocus", "handleChange", "handlePaste", "item", "f", "handleCompositionStart", "handleCompositionEnd", "handleKeyDown", "Comp", "Slot", "InlineStart", "InlineEnd", "AttachmentsRow", "forceMount", "renderAttachment", "hasItems", "ScrollArea", "Flex", "Attachment", "moveFocusOffPill", "button", "pill", "pills", "index", "nextButton", "Pill", "lead", "leadKind", "label", "detail", "removeLabel", "onRemove", "IconButton", "CloseIcon", "STATUS_LABEL", "attachment", "isImage", "sizeLabel", "statusLabel", "locked", "handleRemove", "Spinner", "FileTextIcon", "Item", "icon", "image", "AttachTrigger", "disabledProp", "onPointerDown", "onClick", "buttonProps", "Row", "RowStart", "RowEnd", "Send", "clearOnSend", "variantProp", "emphasis", "tabIndex", "status", "onStop", "onRetry", "stopLabel", "retryLabel", "stopIcon", "retryIcon", "ariaLabel", "ariaLabelledby", "hasContent", "mode", "visible", "inactive", "labelProps", "handleClick", "glyph"]
|
|
7
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as e}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as e}from"./chunk-MJEYJI5G.js";import*as o from"react";import"radix-ui";var r=o.forwardRef((t,n)=>o.createElement(e,{...t,iconOnly:!0,ref:n}));r.displayName="ToggleIconButton";export{r as a};
|
|
2
|
+
//# sourceMappingURL=chunk-EHUSLPWN.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as o}from"./chunk-VX44UTQ5.js";import{a as e}from"./chunk-ERGJN7FJ.js";import{a as t}from"./chunk-NZJGC6ZW.js";var p=["1","2","3","4"],f={...t,size:{type:"enum",className:"rt-r-size",values:p,default:"2",responsive:!0},width:e.width,minWidth:e.minWidth,maxWidth:{...e.maxWidth,default:"480px"},...o};export{f as a};
|
|
2
|
+
//# sourceMappingURL=chunk-ENPQJYXZ.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/components/popover.props.tsx"],
|
|
4
|
+
"sourcesContent": ["import { asChildPropDef } from '../props/as-child.prop.js';\nimport { heightPropDefs } from '../props/height.props.js';\nimport { widthPropDefs } from '../props/width.props.js';\n\nimport type { PropDef, GetPropDefTypes } from '../props/prop-def.js';\n\nconst contentSizes = ['1', '2', '3', '4'] as const;\n\nconst popoverContentPropDefs = {\n ...asChildPropDef,\n size: {\n type: 'enum',\n className: 'rt-r-size',\n values: contentSizes,\n default: '2',\n responsive: true,\n },\n width: widthPropDefs.width,\n minWidth: widthPropDefs.minWidth,\n maxWidth: { ...widthPropDefs.maxWidth, default: '480px' },\n ...heightPropDefs,\n} satisfies {\n width: PropDef<string>;\n minWidth: PropDef<string>;\n maxWidth: PropDef<string>;\n size: PropDef<(typeof contentSizes)[number]>;\n};\n\ntype PopoverContentOwnProps = GetPropDefTypes<\n typeof popoverContentPropDefs &\n typeof asChildPropDef &\n typeof widthPropDefs &\n typeof heightPropDefs\n>;\n\nexport { popoverContentPropDefs };\nexport type { PopoverContentOwnProps };\n"],
|
|
5
|
+
"mappings": "wHAMA,IAAMA,EAAe,CAAC,IAAK,IAAK,IAAK,GAAG,EAElCC,EAAyB,CAC7B,GAAGC,EACH,KAAM,CACJ,KAAM,OACN,UAAW,YACX,OAAQF,EACR,QAAS,IACT,WAAY,EACd,EACA,MAAOG,EAAc,MACrB,SAAUA,EAAc,SACxB,SAAU,CAAE,GAAGA,EAAc,SAAU,QAAS,OAAQ,EACxD,GAAGC,CACL",
|
|
6
|
+
"names": ["contentSizes", "popoverContentPropDefs", "asChildPropDef", "widthPropDefs", "heightPropDefs"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{e as p}from"./chunk-3YLYGKFB.js";import{a as r}from"./chunk-UBSLEGQZ.js";import{a as t}from"./chunk-GSTOGDAJ.js";import{a as e}from"./chunk-PUVZFRTQ.js";import*as o from"react";import R from"classnames";import{composeEventHandlers as c}from"radix-ui/internal";var P=o.forwardRef((a,s)=>{let i=p(a,e.size),{className:n,color:m,onChange:d,onValueChange:u,...f}=r(i,e,t);return o.createElement("input",{type:"radio","data-accent-color":m,...f,onChange:c(d,l=>u?.(l.currentTarget.value)),ref:s,className:R("rt-reset","rt-BaseRadioRoot","rt-RadioRoot",n)})});P.displayName="Radio";export{P as a};
|
|
2
|
+
//# sourceMappingURL=chunk-ENSDQ3XQ.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/components/radio.tsx"],
|
|
4
|
+
"sourcesContent": ["'use client';\n\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { composeEventHandlers } from 'radix-ui/internal';\n\nimport { radioPropDefs } from './radio.props.js';\nimport { marginPropDefs } from '../props/margin.props.js';\nimport { extractProps } from '../helpers/extract-props.js';\nimport { useThemeSizeProps } from '../helpers/theme-size.js';\n\nimport type { MarginProps } from '../props/margin.props.js';\nimport type { ComponentPropsWithout } from '../helpers/component-props.js';\nimport type { NotInputRadioAttributes } from '../helpers/input-attributes.js';\nimport type { GetPropDefTypes } from '../props/prop-def.js';\n\ntype RadioElement = React.ElementRef<'input'>;\ntype RadioOwnProps = GetPropDefTypes<typeof radioPropDefs> & {\n value: string;\n onValueChange?: (value: string) => void;\n};\ntype RadioInputProps = ComponentPropsWithout<\n 'input',\n NotInputRadioAttributes | 'color' | 'defaultValue' | 'value'\n>;\ninterface RadioProps extends RadioInputProps, MarginProps, RadioOwnProps {}\n\nconst Radio = React.forwardRef<RadioElement, RadioProps>((ownProps, forwardedRef) => {\n const props = useThemeSizeProps(ownProps, radioPropDefs.size);\n const { className, color, onChange, onValueChange, ...radioProps } = extractProps(\n props,\n radioPropDefs,\n marginPropDefs,\n );\n return (\n <input\n type=\"radio\"\n data-accent-color={color}\n {...radioProps}\n onChange={composeEventHandlers(onChange, (event) =>\n onValueChange?.(event.currentTarget.value),\n )}\n ref={forwardedRef}\n className={classNames('rt-reset', 'rt-BaseRadioRoot', 'rt-RadioRoot', className)}\n />\n );\n});\nRadio.displayName = 'Radio';\n\nexport { Radio };\nexport type { RadioProps };\n"],
|
|
5
|
+
"mappings": "gKAEA,UAAYA,MAAW,QACvB,OAAOC,MAAgB,aACvB,OAAS,wBAAAC,MAA4B,oBAuBrC,IAAMC,EAAc,aAAqC,CAACC,EAAUC,IAAiB,CACnF,IAAMC,EAAQC,EAAkBH,EAAUI,EAAc,IAAI,EACtD,CAAE,UAAAC,EAAW,MAAAC,EAAO,SAAAC,EAAU,cAAAC,EAAe,GAAGC,CAAW,EAAIC,EACnER,EACAE,EACAO,CACF,EACA,OACE,gBAAC,SACC,KAAK,QACL,oBAAmBL,EAClB,GAAGG,EACJ,SAAUG,EAAqBL,EAAWM,GACxCL,IAAgBK,EAAM,cAAc,KAAK,CAC3C,EACA,IAAKZ,EACL,UAAWa,EAAW,WAAY,mBAAoB,eAAgBT,CAAS,EACjF,CAEJ,CAAC,EACDN,EAAM,YAAc",
|
|
6
|
+
"names": ["React", "classNames", "composeEventHandlers", "Radio", "ownProps", "forwardedRef", "props", "useThemeSizeProps", "baseRadioPropDefs", "className", "color", "onChange", "onValueChange", "radioProps", "extractProps", "marginPropDefs", "composeEventHandlers", "event", "classNames"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as e}from"./chunk-HAGKI7NA.js";import{a as s}from"./chunk-RJ6SA7AY.js";import{a as r}from"./chunk-NZJGC6ZW.js";import{c as o}from"./chunk-34KVYDF6.js";var a=["1","2","3","4","5"],p=s.variant.values,n={...r,size:{type:"enum",className:"rt-r-size",values:a,default:"2",responsive:!0},variant:{type:"enum",className:"rt-variant",values:p,default:"raised"},...o,columns:{...e.columns,default:"repeat(auto-fit, minmax(200px, 1fr))"},gap:{...e.gap,default:"4"}};export{n as a};
|
|
2
|
+
//# sourceMappingURL=chunk-EO7WQYFO.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/components/checkbox-cards.props.tsx"],
|
|
4
|
+
"sourcesContent": ["import { cardPropDefs } from './card.props.js';\nimport { asChildPropDef } from '../props/as-child.prop.js';\nimport { colorPropDef } from '../props/color.prop.js';\nimport { gridPropDefs } from './grid.props.js';\n\nimport type { PropDef } from '../props/prop-def.js';\n\nconst sizes = ['1', '2', '3', '4', '5'] as const;\n// The same list as Card: a selectable card looks like any other card.\nconst variants = cardPropDefs.variant.values;\n\nconst checkboxCardsRootPropDefs = {\n ...asChildPropDef,\n size: { type: 'enum', className: 'rt-r-size', values: sizes, default: '2', responsive: true },\n variant: { type: 'enum', className: 'rt-variant', values: variants, default: 'raised' },\n ...colorPropDef,\n columns: { ...gridPropDefs.columns, default: 'repeat(auto-fit, minmax(200px, 1fr))' },\n gap: { ...gridPropDefs.gap, default: '4' },\n} satisfies {\n size: PropDef<(typeof sizes)[number]>;\n variant: PropDef<(typeof variants)[number]>;\n columns: PropDef<(typeof gridPropDefs.columns.values)[number]>;\n gap: PropDef<(typeof gridPropDefs.gap.values)[number]>;\n};\n\nexport { checkboxCardsRootPropDefs };\n"],
|
|
5
|
+
"mappings": "gKAOA,IAAMA,EAAQ,CAAC,IAAK,IAAK,IAAK,IAAK,GAAG,EAEhCC,EAAWC,EAAa,QAAQ,OAEhCC,EAA4B,CAChC,GAAGC,EACH,KAAM,CAAE,KAAM,OAAQ,UAAW,YAAa,OAAQJ,EAAO,QAAS,IAAK,WAAY,EAAK,EAC5F,QAAS,CAAE,KAAM,OAAQ,UAAW,aAAc,OAAQC,EAAU,QAAS,QAAS,EACtF,GAAGI,EACH,QAAS,CAAE,GAAGC,EAAa,QAAS,QAAS,sCAAuC,EACpF,IAAK,CAAE,GAAGA,EAAa,IAAK,QAAS,GAAI,CAC3C",
|
|
6
|
+
"names": ["sizes", "variants", "cardPropDefs", "checkboxCardsRootPropDefs", "asChildPropDef", "colorPropDef", "gridPropDefs"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as s}from"./chunk-NZJGC6ZW.js";import{c as e}from"./chunk-34KVYDF6.js";var t=["1","2"],r=["cascade","drill-down"],o={size:{type:"enum",className:"rt-r-size",values:t,default:"2",responsive:!0},...e},i={...o,submenuBehavior:{type:"enum",values:r,default:"cascade",responsive:!0}},u=o,a={...s,...e,shortcut:{type:"string"}},f={...e,shortcut:{type:"string"}},c={...e};export{r as a,i as b,u as c,a as d,f as e,c as f};
|
|
2
|
+
//# sourceMappingURL=chunk-EUSKAXHP.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/components/_internal/base-menu.props.ts"],
|
|
4
|
+
"sourcesContent": ["import { asChildPropDef } from '../../props/as-child.prop.js';\nimport { colorPropDef } from '../../props/color.prop.js';\n\nimport type { PropDef } from '../../props/prop-def.js';\n\nconst contentSizes = ['1', '2'] as const;\nconst submenuBehaviors = ['cascade', 'drill-down'] as const;\n\n// Base props shared between Content and SubContent\nconst baseMenuSharedPropDefs = {\n size: {\n type: 'enum',\n className: 'rt-r-size',\n values: contentSizes,\n default: '2',\n responsive: true,\n },\n ...colorPropDef,\n} satisfies {\n size: PropDef<(typeof contentSizes)[number]>;\n};\n\n// Content-specific props (includes submenuBehavior)\nconst baseMenuContentPropDefs = {\n ...baseMenuSharedPropDefs,\n /**\n * Controls how submenus behave.\n * - `cascade`: Default cascading behavior where submenus open to the side (portal-based)\n * - `drill-down`: Mobile-friendly behavior where submenus replace the content inline\n * Supports responsive values: `{ initial: 'drill-down', md: 'cascade' }`\n */\n submenuBehavior: {\n type: 'enum',\n values: submenuBehaviors,\n default: 'cascade',\n responsive: true,\n },\n} satisfies {\n size: PropDef<(typeof contentSizes)[number]>;\n submenuBehavior: PropDef<(typeof submenuBehaviors)[number]>;\n};\n\n// SubContent props (no submenuBehavior)\nconst baseMenuSubContentPropDefs = baseMenuSharedPropDefs;\n\nconst baseMenuItemPropDefs = {\n ...asChildPropDef,\n ...colorPropDef,\n shortcut: { type: 'string' },\n} satisfies {\n shortcut: PropDef<string>;\n};\n\nconst baseMenuCheckboxItemPropDefs = {\n ...colorPropDef,\n shortcut: { type: 'string' },\n} satisfies {\n shortcut: PropDef<string>;\n};\n\nconst baseMenuRadioItemPropDefs = {\n ...colorPropDef,\n};\n\nexport {\n baseMenuContentPropDefs,\n baseMenuSubContentPropDefs,\n baseMenuItemPropDefs,\n baseMenuCheckboxItemPropDefs,\n baseMenuRadioItemPropDefs,\n submenuBehaviors,\n};\n"],
|
|
5
|
+
"mappings": "gFAKA,IAAMA,EAAe,CAAC,IAAK,GAAG,EACxBC,EAAmB,CAAC,UAAW,YAAY,EAG3CC,EAAyB,CAC7B,KAAM,CACJ,KAAM,OACN,UAAW,YACX,OAAQF,EACR,QAAS,IACT,WAAY,EACd,EACA,GAAGG,CACL,EAKMC,EAA0B,CAC9B,GAAGF,EAOH,gBAAiB,CACf,KAAM,OACN,OAAQD,EACR,QAAS,UACT,WAAY,EACd,CACF,EAMMI,EAA6BH,EAE7BI,EAAuB,CAC3B,GAAGC,EACH,GAAGJ,EACH,SAAU,CAAE,KAAM,QAAS,CAC7B,EAIMK,EAA+B,CACnC,GAAGL,EACH,SAAU,CAAE,KAAM,QAAS,CAC7B,EAIMM,EAA4B,CAChC,GAAGN,CACL",
|
|
6
|
+
"names": ["contentSizes", "submenuBehaviors", "baseMenuSharedPropDefs", "colorPropDef", "baseMenuContentPropDefs", "baseMenuSubContentPropDefs", "baseMenuItemPropDefs", "asChildPropDef", "baseMenuCheckboxItemPropDefs", "baseMenuRadioItemPropDefs"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as re,b as ne}from"./chunk-QAUYOVVL.js";import{a as B,b as te,c as M}from"./chunk-MAI7FEU7.js";import{b as ee,c as oe}from"./chunk-IX5HIHVI.js";import{a as Z}from"./chunk-MJJ7XDIP.js";import{b as X,c as Y}from"./chunk-6AZV4VFW.js";import{a as Q}from"./chunk-AGAQC4HH.js";import{c as J}from"./chunk-FWB47YCH.js";import{d as U}from"./chunk-3YLYGKFB.js";import{a as O}from"./chunk-UBSLEGQZ.js";import{a as _}from"./chunk-GSTOGDAJ.js";import{a as Ne}from"./chunk-OS3FCYZY.js";var ze={};Ne(ze,{Content:()=>xe,Empty:()=>Re,Group:()=>he,Input:()=>ge,Item:()=>Se,Label:()=>ve,List:()=>Pe,Root:()=>de,Separator:()=>ye,Trigger:()=>Ce,Value:()=>fe});import*as e from"react";import u from"classnames";import{Popover as ae}from"radix-ui";import{useCallbackRef as A,useComposedRefs as ie,useControllableState as G,useLayoutEffect as W}from"radix-ui/internal";import{Command as N,useCommandState as se}from"cmdk";var Le={size:B.size},we={size:M.size},le=new Set;function De(o){le.has(o)||(le.add(o),console.warn(o))}function Oe(o){let r=o,t=new Set;return{get:()=>r,set:n=>{Object.is(n,r)||(r=n,t.forEach(a=>a()))},subscribe:n=>(t.add(n),()=>{t.delete(n)})}}var me=e.createContext(null),k=o=>{let r=e.useContext(me);if(!r)throw new Error(`Combobox.${o} must be used within Combobox.Root`);return r},ce=e.createContext(null),be=e.createContext(null),pe=e.createContext(null),ue=()=>e.useContext(pe);function Me(o){let r=o.getAttribute("aria-label")?.trim();if(r)return r;let t=o.getAttribute("aria-labelledby");if(t){let a=t.split(/\s+/).map(s=>o.ownerDocument.getElementById(s)?.textContent?.trim()).filter(Boolean).join(" ");if(a)return a}let n=o.labels;if(n&&n.length>0){let a=Array.from(n).map(s=>s.textContent?.trim()).filter(Boolean).join(" ");if(a)return a}}var de=o=>{let{children:r,size:t,value:n,defaultValue:a=null,onValueChange:s,open:l,defaultOpen:d=!1,onOpenChange:i,placeholder:m="Select an option",searchPlaceholder:C="Search...",searchValue:f,defaultSearchValue:V="",onSearchValueChange:P,filter:R,shouldFilter:p=!0,loop:c=!0,disabled:x,resetSearchOnSelect:v=!0,resetSearchOnClose:g=!0,color:E,displayValue:h,...T}=o,S=U(t,B.size),[y,b]=G({prop:l,defaultProp:d,onChange:i}),[I,Ve]=G({prop:n,defaultProp:a,onChange:s}),[j,L]=G({prop:f,defaultProp:V,onChange:P}),K=typeof h=="function"?h(I):h,[w]=e.useState(()=>Oe(I));W(()=>{w.set(I)},[w,I]);let z=A(D=>{b(D),!D&&g&&L("")}),q=A(D=>{Ve(D),b(!1),v&&L("")}),F=e.useRef(null),$=e.useCallback(()=>F.current?Me(F.current):void 0,[]),Ee=e.useMemo(()=>({value:I,displayValue:K,setOpen:z,size:S,placeholder:m,searchPlaceholder:C,disabled:x,color:E,loop:c,shouldFilter:p,filter:R,triggerRef:F,getTriggerLabel:$}),[I,K,z,S,m,C,x,E,c,p,R,$]),Te=e.useMemo(()=>({value:j,setValue:L}),[j,L]),Ie=e.useMemo(()=>({store:w,onSelect:q,disabled:x}),[w,q,x]);return e.createElement(me.Provider,{value:Ee},e.createElement(ce.Provider,{value:Te},e.createElement(be.Provider,{value:Ie},e.createElement(re,{open:y,onOpenChange:z,...T},r))))};de.displayName="Combobox.Root";var Ce=e.forwardRef((o,r)=>{let t=k("Trigger"),{children:n,className:a,placeholder:s,disabled:l,readOnly:d,error:i,loading:m,color:C,radius:f,onClick:V,onKeyDown:P,type:R,...p}=O({size:t.size,...o},Le,te,_),c=l??t.disabled,x=C??t.color,v=!!(d||m),g=t.value==null&&t.displayValue==null,E=ie(r,t.triggerRef),{getTriggerLabel:h}=t;e.useEffect(()=>{},[h]);let T=b=>{V?.(b),v&&b.preventDefault()},S=b=>{P?.(b),!(b.defaultPrevented||v||c)&&b.key==="ArrowDown"&&(b.preventDefault(),t.setOpen(!0))},y=e.createElement(e.Fragment,null,e.createElement("span",{className:"rt-SelectTriggerInner"},e.createElement("span",{className:"rt-ComboboxValue"},t.displayValue??t.value??s??t.placeholder)),m?e.createElement("div",{className:"rt-SelectIcon rt-SelectLoadingIcon","aria-hidden":"true"},e.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none"},e.createElement("circle",{cx:"8",cy:"8",r:"7",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeDasharray:"32",strokeDashoffset:"32",className:"rt-SelectLoadingIconCircle"}))):e.createElement(oe,{className:"rt-SelectIcon"}));return e.createElement(ne,{disabled:c},e.createElement("button",{"data-accent-color":x,"data-radius":f,"data-error":i,"data-loading":m,"data-disabled":c||void 0,"data-read-only":d||void 0,"data-placeholder":g?"":void 0,...p,role:"combobox","aria-disabled":c||void 0,"aria-readonly":d||void 0,"aria-invalid":i||void 0,"aria-busy":m||void 0,type:R??"button",disabled:c,onClick:T,onKeyDown:S,ref:E,className:u("rt-reset","rt-SelectTrigger","rt-ComboboxTrigger",a)},n?Z(n):y))});Ce.displayName="Combobox.Trigger";var fe=e.forwardRef(({placeholder:o,children:r,className:t,...n},a)=>{let s=k("Value"),l=s.displayValue??s.value??void 0;return e.createElement("span",{...n,ref:a,className:u("rt-ComboboxValue",t)},l??r??o??s.placeholder)});fe.displayName="Combobox.Value";function ke(){let o=se(a=>a.filtered.count),r=se(a=>a.search),[t,n]=e.useState("");return e.useEffect(()=>{let a=r?o===0?"No results":`${o} result${o===1?"":"s"}`:"",s=window.setTimeout(()=>n(a),r?400:0);return()=>window.clearTimeout(s)},[o,r]),e.createElement(Q,{role:"status","aria-live":"polite","aria-atomic":"true"},t)}var xe=e.forwardRef((o,r)=>{let t=k("Content"),n=X(),a=t.size==="4"?"3":t.size,s=o.size??a??M.size.default,{className:l,children:d,color:i,forceMount:m,container:C,onOpenAutoFocus:f,"aria-label":V,"aria-labelledby":P,...R}=O({...o,size:s},M),p=i||t.color||n.accentColor,{getTriggerLabel:c}=t,[x,v]=e.useState(c);W(()=>{if(x!==void 0)return;let y=c();y!==void 0&&v(y)},[c,x]);let g=o["aria-label"]??x,E=e.useMemo(()=>({sizeClassName:O({size:s},we).className||void 0,color:p,label:g}),[s,p,g]),h=e.useRef(null),T=y=>{if(f?.(y),y.defaultPrevented)return;let b=h.current;if(!b||b.querySelector("[cmdk-input]"))return;y.preventDefault(),(b.querySelector("[cmdk-list]")??b).focus({preventScroll:!0})},S=t.value?.trim()||void 0;return e.createElement(ae.Portal,{container:C,forceMount:m?!0:void 0},e.createElement(Y,{asChild:!0},e.createElement(ae.Content,{"data-accent-color":p,align:"start",sideOffset:4,collisionPadding:10,"aria-label":P?void 0:g,"aria-labelledby":P,...R,forceMount:m?!0:void 0,onOpenAutoFocus:T,ref:r,className:u("rt-PopperContent","rt-BaseMenuContent","rt-variant-soft","rt-ComboboxContent",l)},e.createElement(pe.Provider,{value:E},e.createElement(N,{ref:h,loop:t.loop,shouldFilter:t.shouldFilter,filter:t.filter,label:g,defaultValue:S,className:"rt-ComboboxCommand"},d,e.createElement(ke,null))))))});xe.displayName="Combobox.Content";var ge=e.forwardRef(({className:o,startAdornment:r,endAdornment:t,placeholder:n,variant:a,value:s,onValueChange:l,...d},i)=>{let m=k("Input"),C=e.useContext(ce),f=ue(),V=a??"soft",P=s??C?.value??"",R=l??C?.setValue,p=e.createElement("div",{className:u("rt-TextFieldRoot","rt-ComboboxInputRoot",f?.sizeClassName,`rt-variant-${V}`),"data-accent-color":f?.color},r?e.createElement("div",{className:"rt-TextFieldSlot"},r):null,e.createElement(N.Input,{...d,ref:i,value:P,onValueChange:R,placeholder:n??m.searchPlaceholder,className:u("rt-reset","rt-TextFieldInput",o)}),t?e.createElement("div",{className:"rt-TextFieldSlot","data-side":"right"},t):null);return f?e.createElement("div",{className:"rt-ComboboxSearch"},p):p});ge.displayName="Combobox.Input";var Pe=e.forwardRef(({className:o,children:r,label:t,...n},a)=>{let s=ue();return e.createElement("div",{className:"rt-ComboboxScrollArea"},e.createElement("div",{className:u("rt-BaseMenuViewport","rt-ComboboxViewport")},e.createElement(N.List,{...n,label:t??s?.label,ref:a,className:u("rt-ComboboxList",o)},r)))});Pe.displayName="Combobox.List";var Re=e.forwardRef(({className:o,...r},t)=>e.createElement(N.Empty,{...r,ref:t,className:u("rt-ComboboxEmpty",o)}));Re.displayName="Combobox.Empty";var he=e.forwardRef(({className:o,...r},t)=>e.createElement(N.Group,{...r,ref:t,className:u("rt-BaseMenuGroup","rt-ComboboxGroup",o)}));he.displayName="Combobox.Group";var ve=e.forwardRef(({className:o,id:r,...t},n)=>{let a=e.useId(),s=r??a,l=e.useRef(null),d=ie(n,l);return W(()=>{let i=l.current?.closest("[cmdk-group-items]");if(!(!i||i.hasAttribute("aria-labelledby")))return i.setAttribute("aria-labelledby",s),()=>{i.getAttribute("aria-labelledby")===s&&i.removeAttribute("aria-labelledby")}},[s]),e.createElement("div",{...t,id:s,ref:d,className:u("rt-BaseMenuLabel","rt-ComboboxLabel",o)})});ve.displayName="Combobox.Label";var ye=e.forwardRef(({className:o,...r},t)=>e.createElement(N.Separator,{...r,ref:t,className:u("rt-BaseMenuSeparator","rt-ComboboxSeparator",o)}));ye.displayName="Combobox.Separator";function H(o){return o==null||typeof o=="boolean"?"":typeof o=="string"||typeof o=="number"?String(o):Array.isArray(o)?o.map(H).join(""):e.isValidElement(o)?H(o.props.children):""}var Se=e.forwardRef(({className:o,children:r,label:t,value:n,disabled:a,onSelect:s,keywords:l,...d},i)=>{let m=e.useContext(be);if(!m)throw new Error("Combobox.Item must be used within Combobox.Root");let{store:C,onSelect:f,disabled:V}=m,P=n??(typeof r=="string"?r.trim():void 0),R=()=>P!==void 0&&C.get()===P,p=e.useSyncExternalStore(C.subscribe,R,R),c=A(s),x=e.useCallback(T=>{let S=n??T;f(S),c(S)},[n,f,c]),v=(t??H(r)).replace(/\s+/g," ").trim(),g=v?l?[v,...l]:[v]:l,E=g?g.join("\0"):"",h=a??V??!1;return e.createElement(N.Item,{key:E,...d,value:n,keywords:g,"aria-checked":p,disabled:h||void 0,ref:i,onSelect:x,className:u("rt-reset","rt-BaseMenuItem","rt-ComboboxItem",o)},p?e.createElement("span",{className:u("rt-BaseMenuItemIndicator","rt-ComboboxItemIndicator")},e.createElement(ee,{className:u("rt-BaseMenuItemIndicatorIcon","rt-ComboboxItemIndicatorIcon")})):null,e.createElement(J,null,r))});Se.displayName="Combobox.Item";export{de as a,Ce as b,fe as c,xe as d,ge as e,Pe as f,Re as g,he as h,ve as i,ye as j,Se as k,ze as l};
|
|
2
|
+
//# sourceMappingURL=chunk-F3XBIUXB.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/components/combobox.tsx"],
|
|
4
|
+
"sourcesContent": ["'use client';\n\n/**\n * Combobox: Radix Popover for positioning, dismissal and focus; cmdk for search,\n * filtering and keyboard navigation.\n *\n * Render path. State is split so an interaction re-renders only what reads it:\n * - `ComboboxContext` (Trigger, Value, Content): config and the selected value.\n * Open state is not in it, so opening and closing re-render no consumer.\n * - `ComboboxSearchContext` (Input only): the search text.\n * - `ComboboxItemContext` (Items): stable values only. Items read \"am I selected\"\n * from a store through `useSyncExternalStore`, so a selection re-renders the old\n * and the new selected item, not all N.\n *\n * Highlight. cmdk's `data-selected` is the single highlight source, driven by both\n * the pointer and the keyboard. There is no separate CSS `:hover` highlight, so two\n * items are never lit at once and Enter always picks the lit item.\n */\n\nimport { warnDeprecated } from '../helpers/warn-deprecated.js';\nimport * as React from 'react';\nimport classNames from 'classnames';\nimport { Popover as PopoverPrimitive } from 'radix-ui';\nimport { useCallbackRef, useComposedRefs, useControllableState, useLayoutEffect } from 'radix-ui/internal';\nimport { Command as CommandPrimitive, useCommandState } from 'cmdk';\n\nimport { extractProps } from '../helpers/extract-props.js';\nimport { useThemeSize } from '../helpers/theme-size.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 { VisuallyHidden } from './visually-hidden.js';\n\nimport type { textFieldRootPropDefs } from './text-field.props.js';\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// Hoisted so extractProps' compiled prop-def cache (keyed by object identity) hits.\nconst triggerSizingPropDefs = { size: comboboxRootPropDefs.size };\nconst contentSizePropDefs = { size: comboboxContentPropDefs.size };\n\nconst warned = new Set<string>();\nfunction warnOnce(message: string) {\n if (warned.has(message)) return;\n warned.add(message);\n console.warn(message);\n}\n\n// ============================================================================\n// Selection store\n// ============================================================================\n\ninterface SelectionStore {\n get: () => ComboboxValue;\n set: (value: ComboboxValue) => void;\n subscribe: (listener: () => void) => () => void;\n}\n\nfunction createSelectionStore(initial: ComboboxValue): SelectionStore {\n let current = initial;\n const listeners = new Set<() => void>();\n return {\n get: () => current,\n set: (next) => {\n if (Object.is(next, current)) return;\n current = next;\n listeners.forEach((listener) => listener());\n },\n subscribe: (listener) => {\n listeners.add(listener);\n return () => {\n listeners.delete(listener);\n };\n },\n };\n}\n\n// ============================================================================\n// Contexts\n// ============================================================================\n\ninterface ComboboxContextValue {\n value: ComboboxValue;\n displayValue?: string;\n setOpen: (open: boolean) => void;\n size?: ComboboxRootOwnProps['size'];\n placeholder?: string;\n searchPlaceholder?: string;\n disabled?: boolean;\n color?: string;\n loop: boolean;\n shouldFilter: boolean;\n filter?: CommandFilter;\n triggerRef: React.RefObject<HTMLButtonElement | null>;\n /** Reads the trigger's accessible name from the DOM (aria-label, aria-labelledby or <label>). */\n getTriggerLabel: () => string | undefined;\n}\n\nconst ComboboxContext = React.createContext<ComboboxContextValue | null>(null);\n\nconst useComboboxContext = (componentName: string) => {\n const ctx = React.useContext(ComboboxContext);\n if (!ctx) {\n throw new Error(`Combobox.${componentName} must be used within Combobox.Root`);\n }\n return ctx;\n};\n\ninterface ComboboxSearchContextValue {\n value: string;\n setValue: (value: string) => void;\n}\n\nconst ComboboxSearchContext = React.createContext<ComboboxSearchContextValue | null>(null);\n\ninterface ComboboxItemContextValue {\n store: SelectionStore;\n onSelect: (value: string) => void;\n disabled?: boolean;\n}\n\nconst ComboboxItemContext = React.createContext<ComboboxItemContextValue | null>(null);\n\n/** Values resolved by Content and read by Input and List. */\ninterface ComboboxContentContextValue {\n sizeClassName?: string;\n color?: string;\n label?: string;\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 /** Clear the search text when an option is selected. Defaults to true. */\n resetSearchOnSelect?: boolean;\n /** Clear the search text when the popup is dismissed without a selection. Defaults to true. */\n resetSearchOnClose?: boolean;\n color?: (typeof comboboxTriggerPropDefs.color.values)[number];\n /**\n * Text shown in the trigger for the selected value. Without it the raw value is shown.\n * Can be a string or a function that receives the current value. Pass a stable\n * function (module scope or `useCallback`): an inline function runs on every render.\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\nfunction readElementLabel(el: HTMLElement): string | undefined {\n const ariaLabel = el.getAttribute('aria-label')?.trim();\n if (ariaLabel) return ariaLabel;\n\n const labelledBy = el.getAttribute('aria-labelledby');\n if (labelledBy) {\n const text = labelledBy\n .split(/\\s+/)\n .map((id) => el.ownerDocument.getElementById(id)?.textContent?.trim())\n .filter(Boolean)\n .join(' ');\n if (text) return text;\n }\n\n const labels = (el as HTMLButtonElement).labels;\n if (labels && labels.length > 0) {\n const text = Array.from(labels)\n .map((label) => label.textContent?.trim())\n .filter(Boolean)\n .join(' ');\n if (text) return text;\n }\n\n return undefined;\n}\n\nconst ComboboxRoot: React.FC<ComboboxRootProps> = (props) => {\n const {\n children,\n size: sizeProp,\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 resetSearchOnClose = true,\n color,\n displayValue: displayValueProp,\n ...rootProps\n } = props;\n const size = useThemeSize(sizeProp, comboboxRootPropDefs.size);\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 const resolvedDisplayValue = typeof displayValueProp === 'function' ? displayValueProp(value) : displayValueProp;\n\n // Items subscribe to this store instead of the context, so a selection\n // re-renders only the items whose selected state flips.\n const [store] = React.useState(() => createSelectionStore(value));\n useLayoutEffect(() => {\n store.set(value);\n }, [store, value]);\n\n // The radix setters change identity whenever their controlled prop changes.\n // Reading them through callback refs keeps these handlers stable, so the\n // contexts below do not change on every keystroke or selection.\n const handleOpenChange = useCallbackRef((nextOpen: boolean) => {\n setOpen(nextOpen);\n if (!nextOpen && resetSearchOnClose) setSearchValue('');\n });\n\n const onSelect = useCallbackRef((nextValue: string) => {\n setValue(nextValue);\n setOpen(false);\n if (resetSearchOnSelect) setSearchValue('');\n });\n\n const triggerRef = React.useRef<HTMLButtonElement | null>(null);\n const getTriggerLabel = React.useCallback(() => (triggerRef.current ? readElementLabel(triggerRef.current) : undefined), []);\n\n const contextValue = React.useMemo<ComboboxContextValue>(\n () => ({\n value,\n displayValue: resolvedDisplayValue,\n setOpen: handleOpenChange,\n size,\n placeholder,\n searchPlaceholder,\n disabled,\n color,\n loop,\n shouldFilter,\n filter,\n triggerRef,\n getTriggerLabel,\n }),\n [value, resolvedDisplayValue, handleOpenChange, size, placeholder, searchPlaceholder, disabled, color, loop, shouldFilter, filter, getTriggerLabel],\n );\n\n const searchContextValue = React.useMemo<ComboboxSearchContextValue>(() => ({ value: searchValue, setValue: setSearchValue }), [searchValue, setSearchValue]);\n\n const itemContextValue = React.useMemo<ComboboxItemContextValue>(() => ({ store, onSelect, disabled }), [store, onSelect, disabled]);\n\n return (\n <ComboboxContext.Provider value={contextValue}>\n <ComboboxSearchContext.Provider value={searchContextValue}>\n <ComboboxItemContext.Provider value={itemContextValue}>\n <Popover.Root open={open} onOpenChange={handleOpenChange} {...rootProps}>\n {children}\n </Popover.Root>\n </ComboboxItemContext.Provider>\n </ComboboxSearchContext.Provider>\n </ComboboxContext.Provider>\n );\n};\nComboboxRoot.displayName = 'Combobox.Root';\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 {\n children,\n className,\n placeholder,\n disabled,\n readOnly,\n error,\n loading,\n color,\n radius,\n onClick,\n onKeyDown,\n type: buttonType,\n ...triggerProps\n } = extractProps({ size: ctx.size, ...props }, triggerSizingPropDefs, comboboxTriggerPropDefs, marginPropDefs);\n\n const isDisabled = disabled ?? ctx.disabled;\n const resolvedColor = color ?? ctx.color;\n // Read-only and loading triggers stay focusable but do not open.\n const isBlocked = Boolean(readOnly || loading);\n const isPlaceholder = ctx.value == null && ctx.displayValue == null;\n\n const composedRef = useComposedRefs(forwardedRef, ctx.triggerRef);\n\n const { getTriggerLabel } = ctx;\n React.useEffect(() => {\n if (process.env.NODE_ENV === 'production') return;\n if (!getTriggerLabel()) {\n warnOnce(\n 'Combobox.Trigger has no accessible name. The combobox role does not take its name from its content. Add `aria-label`, `aria-labelledby`, or a `<label htmlFor>` that points at the trigger.',\n );\n }\n }, [getTriggerLabel]);\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n // Radix skips its open toggle when the event is default-prevented.\n if (isBlocked) event.preventDefault();\n };\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLButtonElement>) => {\n onKeyDown?.(event);\n if (event.defaultPrevented || isBlocked || isDisabled) return;\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n ctx.setOpen(true);\n }\n };\n\n const defaultContent = (\n <>\n <span className=\"rt-SelectTriggerInner\">\n <span className=\"rt-ComboboxValue\">{ctx.displayValue ?? ctx.value ?? placeholder ?? ctx.placeholder}</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\n cx=\"8\"\n cy=\"8\"\n r=\"7\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeDasharray=\"32\"\n strokeDashoffset=\"32\"\n className=\"rt-SelectLoadingIconCircle\"\n />\n </svg>\n </div>\n ) : (\n <ChevronDownIcon className=\"rt-SelectIcon\" />\n )}\n </>\n );\n\n // Radix Popover.Trigger supplies aria-expanded, aria-controls (the popup id) and\n // aria-haspopup=\"dialog\", which matches the Popover dialog this opens.\n return (\n <Popover.Trigger disabled={isDisabled}>\n <button\n data-accent-color={resolvedColor}\n data-radius={radius}\n data-error={error}\n data-loading={loading}\n data-disabled={isDisabled || undefined}\n data-read-only={readOnly || undefined}\n data-placeholder={isPlaceholder ? '' : undefined}\n {...triggerProps}\n // eslint-disable-next-line jsx-a11y/role-has-required-aria-props -- Popover.Trigger (Slot) adds aria-expanded and aria-controls\n role=\"combobox\"\n aria-disabled={isDisabled || undefined}\n aria-readonly={readOnly || undefined}\n aria-invalid={error || undefined}\n aria-busy={loading || undefined}\n type={buttonType ?? 'button'}\n disabled={isDisabled}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n ref={composedRef}\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>(({ 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});\nComboboxValue.displayName = 'Combobox.Value';\n\n// ============================================================================\n// Content\n// ============================================================================\n\ntype ComboboxContentElement = React.ElementRef<typeof PopoverPrimitive.Content>;\ntype ComboboxContentOwnProps = GetPropDefTypes<typeof comboboxContentPropDefs> & {\n container?: React.ComponentPropsWithoutRef<typeof PopoverPrimitive.Portal>['container'];\n};\ninterface ComboboxContentProps extends Omit<ComponentPropsWithout<typeof PopoverPrimitive.Content, RemovedProps>, 'size'>, ComboboxContentOwnProps {}\n\n/** Announces the filtered result count to screen readers after typing settles. */\nfunction ComboboxAnnouncer() {\n const count = useCommandState((state) => state.filtered.count);\n const search = useCommandState((state) => state.search);\n const [message, setMessage] = React.useState('');\n\n React.useEffect(() => {\n const next = !search ? '' : count === 0 ? 'No results' : `${count} result${count === 1 ? '' : 's'}`;\n const timeout = window.setTimeout(() => setMessage(next), search ? 400 : 0);\n return () => window.clearTimeout(timeout);\n }, [count, search]);\n\n return (\n <VisuallyHidden role=\"status\" aria-live=\"polite\" aria-atomic=\"true\">\n {message}\n </VisuallyHidden>\n );\n}\n\nconst ComboboxContent = React.forwardRef<ComboboxContentElement, ComboboxContentProps>((props, forwardedRef) => {\n const ctx = useComboboxContext('Content');\n const themeContext = useThemeContext();\n\n // Menus stop at size 3; a size 4 field opens a size 3 list.\n const rootSize = ctx.size === '4' ? '3' : ctx.size;\n const size = props.size ?? rootSize ?? comboboxContentPropDefs.size.default;\n\n const {\n className,\n children,\n color,\n forceMount,\n container,\n onOpenAutoFocus,\n 'aria-label': _ariaLabel,\n 'aria-labelledby': ariaLabelledByProp,\n ...contentProps\n } = extractProps({ ...props, size }, comboboxContentPropDefs);\n\n const resolvedColor = color || ctx.color || themeContext.accentColor;\n\n\n // The trigger's name labels the popup, the search field and the listbox.\n // Read once per mount (the content remounts on every open); fall back to a\n // layout effect when the trigger was not attached yet (defaultOpen, forceMount).\n const { getTriggerLabel } = ctx;\n const [triggerLabel, setTriggerLabel] = React.useState(getTriggerLabel);\n useLayoutEffect(() => {\n if (triggerLabel !== undefined) return;\n const label = getTriggerLabel();\n if (label !== undefined) setTriggerLabel(label);\n }, [getTriggerLabel, triggerLabel]);\n\n const label = props['aria-label'] ?? triggerLabel;\n\n const contentContextValue = React.useMemo<ComboboxContentContextValue>(\n () => ({\n // Responsive-aware size class for the search field (never String() a responsive object).\n sizeClassName: extractProps({ size }, contentSizePropDefs).className || undefined,\n color: resolvedColor,\n label,\n }),\n [size, resolvedColor, label],\n );\n\n const commandRef = React.useRef<HTMLDivElement>(null);\n\n // Without a search field, focus would land on the popup itself, outside cmdk's\n // keydown handler. Focus the listbox instead so arrow keys and Enter work.\n const handleOpenAutoFocus = (event: Event) => {\n onOpenAutoFocus?.(event);\n if (event.defaultPrevented) return;\n const command = commandRef.current;\n if (!command || command.querySelector('[cmdk-input]')) return;\n event.preventDefault();\n const list = command.querySelector<HTMLElement>('[cmdk-list]');\n (list ?? command).focus({ preventScroll: true });\n };\n\n // Start the highlight on the selected option (cmdk trims item values).\n const initialHighlight = ctx.value?.trim() || undefined;\n\n return (\n <PopoverPrimitive.Portal container={container} forceMount={forceMount ? true : undefined}>\n <Theme asChild>\n <PopoverPrimitive.Content\n data-accent-color={resolvedColor}\n align=\"start\"\n sideOffset={4}\n collisionPadding={10}\n aria-label={ariaLabelledByProp ? undefined : label}\n aria-labelledby={ariaLabelledByProp}\n {...contentProps}\n forceMount={forceMount ? true : undefined}\n onOpenAutoFocus={handleOpenAutoFocus}\n ref={forwardedRef}\n className={classNames('rt-PopperContent', 'rt-BaseMenuContent',\n 'rt-variant-soft', 'rt-ComboboxContent', className)}\n >\n <ComboboxContentContext.Provider value={contentContextValue}>\n <CommandPrimitive\n ref={commandRef}\n loop={ctx.loop}\n shouldFilter={ctx.shouldFilter}\n filter={ctx.filter}\n label={label}\n defaultValue={initialHighlight}\n className=\"rt-ComboboxCommand\"\n >\n {children}\n <ComboboxAnnouncer />\n </CommandPrimitive>\n </ComboboxContentContext.Provider>\n </PopoverPrimitive.Content>\n </Theme>\n </PopoverPrimitive.Portal>\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 search = React.useContext(ComboboxSearchContext);\n const contentContext = useComboboxContentContext();\n\n const textFieldVariant = inputVariant ?? 'soft';\n\n // The search text lives in Root; only this component subscribes to it.\n const searchValue = value ?? search?.value ?? '';\n const handleSearchChange = onValueChange ?? search?.setValue;\n\n const inputField = (\n <div\n className={classNames('rt-TextFieldRoot', 'rt-ComboboxInputRoot', contentContext?.sizeClassName, `rt-variant-${textFieldVariant}`)}\n data-accent-color={contentContext?.color}\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\n// ============================================================================\n\ntype ComboboxListElement = React.ElementRef<typeof CommandPrimitive.List>;\ninterface ComboboxListProps extends React.ComponentPropsWithoutRef<typeof CommandPrimitive.List> {}\n\n// cmdk's List owns its id (referenced by the input's aria-controls), role and\n// aria-label (set from `label`), so none of them are overridden here.\nconst ComboboxList = React.forwardRef<ComboboxListElement, ComboboxListProps>(({ className, children, label, ...listProps }, forwardedRef) => {\n const contentContext = useComboboxContentContext();\n return (\n <div className=\"rt-ComboboxScrollArea\">\n <div className={classNames('rt-BaseMenuViewport', 'rt-ComboboxViewport')}>\n <CommandPrimitive.List {...listProps} label={label ?? contentContext?.label} ref={forwardedRef} className={classNames('rt-ComboboxList', className)}>\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, id: idProp, ...labelProps }, forwardedRef) => {\n const generatedId = React.useId();\n const id = idProp ?? generatedId;\n const localRef = React.useRef<HTMLDivElement>(null);\n const composedRef = useComposedRefs(forwardedRef, localRef);\n\n // cmdk renders the group's role=\"group\" element itself and gives no way to\n // label it from a child, so name it after this label when inside a Group.\n useLayoutEffect(() => {\n const group = localRef.current?.closest('[cmdk-group-items]');\n if (!group || group.hasAttribute('aria-labelledby')) return;\n group.setAttribute('aria-labelledby', id);\n return () => {\n if (group.getAttribute('aria-labelledby') === id) group.removeAttribute('aria-labelledby');\n };\n }, [id]);\n\n return <div {...labelProps} id={id} ref={composedRef} 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\n// ============================================================================\n\n/** Plain text of a React node tree, used as the item's search text. */\nfunction getNodeText(node: React.ReactNode): string {\n if (node == null || typeof node === 'boolean') return '';\n if (typeof node === 'string' || typeof node === 'number') return String(node);\n if (Array.isArray(node)) return node.map(getNodeText).join('');\n if (React.isValidElement<{ children?: React.ReactNode }>(node)) return getNodeText(node.props.children);\n return '';\n}\n\ntype ComboboxItemElement = React.ElementRef<typeof CommandPrimitive.Item>;\ninterface ComboboxItemProps extends Omit<React.ComponentPropsWithoutRef<typeof CommandPrimitive.Item>, 'keywords' | 'onSelect'> {\n /**\n * Text matched by search. Defaults to the text of `children`. Set it when the\n * children are components whose text is not in the JSX (it cannot be read).\n */\n label?: string;\n /** Additional keywords for search filtering. */\n keywords?: string[];\n /** Called when the 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 itemContext = React.useContext(ComboboxItemContext);\n if (!itemContext) {\n throw new Error('Combobox.Item must be used within Combobox.Root');\n }\n const { store, onSelect: onSelectFromRoot, disabled: rootDisabled } = itemContext;\n\n // Without `value`, cmdk uses the trimmed text of string children.\n const itemValue = value ?? (typeof children === 'string' ? children.trim() : undefined);\n const getIsSelected = () => itemValue !== undefined && store.get() === itemValue;\n const isSelected = React.useSyncExternalStore(store.subscribe, getIsSelected, getIsSelected);\n\n const onSelectProp = useCallbackRef(onSelect);\n // cmdk passes its resolved value (the `value` prop, or the text when `value` is omitted).\n const handleSelect = React.useCallback(\n (resolvedValue: string) => {\n const nextValue = value ?? resolvedValue;\n onSelectFromRoot(nextValue);\n onSelectProp(nextValue);\n },\n [value, onSelectFromRoot, onSelectProp],\n );\n\n // cmdk matches only `value` and `keywords`, so add the visible text as a keyword.\n const text = (label ?? getNodeText(children)).replace(/\\s+/g, ' ').trim();\n const searchKeywords = text ? (keywords ? [text, ...keywords] : [text]) : keywords;\n // cmdk stores keywords only when `value` changes. Remount the cmdk item when\n // they change so a new label or keyword list is picked up.\n const keywordsKey = searchKeywords ? searchKeywords.join('\u0000') : '';\n\n const isDisabled = disabled ?? rootDisabled ?? false;\n\n return (\n <CommandPrimitive.Item\n key={keywordsKey}\n {...itemProps}\n value={value}\n keywords={searchKeywords}\n // cmdk owns aria-selected (the highlighted option); the chosen option is aria-checked.\n aria-checked={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')}>\n <ThickCheckIcon className={classNames('rt-BaseMenuItemIndicatorIcon', 'rt-ComboboxItemIndicatorIcon')} />\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", "PopoverPrimitive", "useCallbackRef", "useComposedRefs", "useControllableState", "useLayoutEffect", "CommandPrimitive", "useCommandState", "triggerSizingPropDefs", "comboboxRootPropDefs", "contentSizePropDefs", "comboboxContentPropDefs", "warned", "warnOnce", "message", "createSelectionStore", "initial", "current", "listeners", "next", "listener", "ComboboxContext", "useComboboxContext", "componentName", "ctx", "ComboboxSearchContext", "ComboboxItemContext", "ComboboxContentContext", "useComboboxContentContext", "readElementLabel", "el", "ariaLabel", "labelledBy", "text", "id", "labels", "label", "ComboboxRoot", "props", "children", "sizeProp", "valueProp", "defaultValue", "onValueChange", "openProp", "defaultOpen", "onOpenChange", "placeholder", "searchPlaceholder", "searchValueProp", "defaultSearchValue", "onSearchValueChange", "filter", "shouldFilter", "loop", "disabled", "resetSearchOnSelect", "resetSearchOnClose", "color", "displayValueProp", "rootProps", "size", "useThemeSize", "open", "setOpen", "useControllableState", "value", "setValue", "searchValue", "setSearchValue", "resolvedDisplayValue", "store", "useLayoutEffect", "handleOpenChange", "useCallbackRef", "nextOpen", "onSelect", "nextValue", "triggerRef", "getTriggerLabel", "contextValue", "searchContextValue", "itemContextValue", "PopoverRoot", "ComboboxTrigger", "forwardedRef", "className", "readOnly", "error", "loading", "radius", "onClick", "onKeyDown", "buttonType", "triggerProps", "extractProps", "comboboxTriggerPropDefs", "marginPropDefs", "isDisabled", "resolvedColor", "isBlocked", "isPlaceholder", "composedRef", "useComposedRefs", "handleClick", "event", "handleKeyDown", "defaultContent", "ChevronDownIcon", "PopoverTrigger", "classNames", "requireReactElement", "ComboboxValue", "valueProps", "display", "ComboboxAnnouncer", "count", "useCommandState", "state", "search", "setMessage", "timeout", "VisuallyHidden", "ComboboxContent", "themeContext", "useThemeContext", "rootSize", "forceMount", "container", "onOpenAutoFocus", "_ariaLabel", "ariaLabelledByProp", "contentProps", "triggerLabel", "setTriggerLabel", "contentContextValue", "commandRef", "handleOpenAutoFocus", "command", "initialHighlight", "PopoverPrimitive", "Theme", "CommandPrimitive", "ComboboxInput", "startAdornment", "endAdornment", "inputVariant", "inputProps", "contentContext", "textFieldVariant", "handleSearchChange", "inputField", "ComboboxList", "listProps", "ComboboxEmpty", "emptyProps", "ComboboxGroup", "groupProps", "ComboboxLabel", "idProp", "labelProps", "generatedId", "localRef", "group", "ComboboxSeparator", "separatorProps", "getNodeText", "node", "ComboboxItem", "keywords", "itemProps", "itemContext", "onSelectFromRoot", "rootDisabled", "itemValue", "getIsSelected", "isSelected", "onSelectProp", "handleSelect", "resolvedValue", "searchKeywords", "keywordsKey", "ThickCheckIcon", "Slottable"]
|
|
7
|
+
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{a as s}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{a as s}from"./chunk-E3754NJZ.js";import{z as o}from"zod";var t=s.extend({pressed:o.boolean().optional().describe("Controlled pressed state"),onPressedChange:o.function().optional().describe("Callback when pressed state changes"),defaultPressed:o.boolean().optional().describe("Default pressed state for uncontrolled usage")}).refine(e=>!(e.pressed!==void 0&&e.onPressedChange===void 0),{message:"When using controlled mode (pressed prop), onPressedChange must also be provided",path:["onPressedChange"]}).refine(e=>!(e.pressed!==void 0&&e.defaultPressed!==void 0),{message:"Cannot use both controlled (pressed) and uncontrolled (defaultPressed) props together",path:["pressed","defaultPressed"]});function d(e){return e}export{t as a,d as b};
|
|
2
|
+
//# sourceMappingURL=chunk-FSKZAL5H.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as R}from"./chunk-KPPIW4OJ.js";import{a as m}from"./chunk-7FZPCM7W.js";import{a as u}from"./chunk-O6K6RZXY.js";import{d as p}from"./chunk-3YLYGKFB.js";import*as e from"react";import v from"classnames";var C=e.createContext(void 0),g={values:["1","2","3"]},f=e.forwardRef(({kind:a,size:t="2",color:o="gray",className:c,children:n,trailing:s,leading:i,...l},r)=>e.createElement("div",{role:"status","aria-live":"polite",...l,ref:r,className:v("rt-NoticeRoot",`rt-r-size-${t}`,c),"data-kind":a,"data-accent-color":o},i?e.createElement("span",{className:"rt-NoticeIcon","aria-hidden":!0},i):null,e.createElement(u,{as:"div",size:t,className:"rt-NoticeText"},n),s));f.displayName="Strip";var z=e.forwardRef(({icon:a,action:t,onDismiss:o,dismissLabel:c="Dismiss",size:n,...s},i)=>{let l=e.useContext(C),r=p(n??l,g);return e.createElement(f,{...s,size:r,ref:i,kind:"notice",leading:a,trailing:t||o?e.createElement("span",{className:"rt-NoticeActions"},t,o?e.createElement(R,{size:r,variant:"ghost",color:"gray","aria-label":c,className:"rt-NoticeDismiss",onClick:o},e.createElement("svg",{width:"15",height:"15",viewBox:"0 0 15 15",fill:"none","aria-hidden":!0},e.createElement("path",{d:"M4 4l7 7M11 4l-7 7",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"}))):null):null})});z.displayName="Notice";var x=e.forwardRef(({confirmLabel:a,cancelLabel:t="Not now",onConfirm:o,onCancel:c,busy:n=!1,size:s,color:i="gray",...l},r)=>{let N=e.useContext(C),d=p(s??N,g);return e.createElement(f,{...l,size:d,color:i,ref:r,kind:"confirmation",trailing:e.createElement("span",{className:"rt-NoticeActions"},e.createElement(m,{size:d,variant:"ghost",color:"gray",disabled:n,onClick:c},t),e.createElement(m,{size:d,variant:"solid",color:i,loading:n,onClick:o},a))})});x.displayName="Confirmation";export{C as a,z as b,x as c};
|
|
2
|
+
//# sourceMappingURL=chunk-GHD3TKCA.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/components/notice.tsx"],
|
|
4
|
+
"sourcesContent": ["'use client';\n\n/**\n * Notice and Confirmation \u2014 what the app tells the person while it is true.\n *\n * Two questions place every message: what is it about, and what made it appear.\n *\n * - **Notice** \u2014 a condition that is true now, which nobody just caused: a usage limit, a\n * connection lost, a goal that finished. It takes space in the layout and never floats, so it\n * cannot cover what it is about. At most one action, and that action FIXES the condition. A\n * dismiss button only ACKNOWLEDGES it, and the app owns that state (`onDismiss`), because a\n * component cannot remember a dismissal across a reload.\n * - **Confirmation** \u2014 a question that waits for an answer: a quiet no before a loud yes, and no\n * dismiss button, because closing a question does not answer it. It never takes focus, so a\n * person can answer in the composer instead.\n *\n * Placement is the caller's. In a chat, both go in `Chatbar.Root`'s `notices`.\n * A notice with no action and no dismiss button is just a sentence: use `Text`.\n */\n\nimport * as React from 'react';\nimport classNames from 'classnames';\n\nimport { Button } from './button.js';\nimport { IconButton } from './icon-button.js';\nimport { Text } from './text.js';\nimport { useThemeSize } from '../helpers/theme-size.js';\nimport { accentColorPropDef } from '../props/color.prop.js';\n\ntype NoticeSize = '1' | '2' | '3';\n\n/** The size a notice takes when it doesn't set one. `Chatbar.Root` provides its own size here. */\nconst NoticeSizeContext = React.createContext<NoticeSize | undefined>(undefined);\n\n/** Notice's own range; a Theme size of 4 maps to 3. */\nconst noticeSizePropDef = { values: ['1', '2', '3'] as const };\ntype NoticeColor = (typeof accentColorPropDef)['color']['values'][number];\n\ninterface StripProps extends Omit<React.ComponentPropsWithoutRef<'div'>, 'color' | 'children'> {\n /** Padding, text and button size. Defaults to the nearest Theme's size (3 when the Theme is 4). */\n size?: NoticeSize;\n /**\n * The category of the message, not its volume. Default `gray`. Use a colour only when it adds a\n * fact the words don't already give, such as `red` for something that stops the next step.\n */\n color?: NoticeColor;\n /** The message. */\n children: React.ReactNode;\n}\n\ninterface NoticeProps extends StripProps {\n /** An icon before the message. It is hidden from assistive technology. */\n icon?: React.ReactNode;\n /** One action that fixes the condition, such as `<Button>Add credits</Button>`. */\n action?: React.ReactNode;\n /**\n * Called when the person presses the dismiss button, which shows only when this is set.\n * Dismissing hides the message; it does not fix the condition. Remove the notice and remember\n * the choice in your app.\n */\n onDismiss?: () => void;\n /** Accessible name of the dismiss button. Default \"Dismiss\". */\n dismissLabel?: string;\n}\n\ninterface ConfirmationProps extends StripProps {\n /** The yes. Name the action, such as \"Run\" or \"Allow up to $18\". */\n confirmLabel: string;\n /** The no. Default \"Not now\". */\n cancelLabel?: string;\n onConfirm: () => void;\n onCancel: () => void;\n /** The yes is running: it shows a spinner and the no is disabled. */\n busy?: boolean;\n}\n\nconst Strip = React.forwardRef<HTMLDivElement, StripProps & { kind: 'notice' | 'confirmation'; trailing: React.ReactNode; leading?: React.ReactNode }>(\n ({ kind, size = '2', color = 'gray', className, children, trailing, leading, ...props }, forwardedRef) => (\n <div\n role=\"status\"\n aria-live=\"polite\"\n {...props}\n ref={forwardedRef}\n className={classNames('rt-NoticeRoot', `rt-r-size-${size}`, className)}\n data-kind={kind}\n data-accent-color={color}\n >\n {leading ? (\n <span className=\"rt-NoticeIcon\" aria-hidden>\n {leading}\n </span>\n ) : null}\n <Text as=\"div\" size={size} className=\"rt-NoticeText\">\n {children}\n </Text>\n {trailing}\n </div>\n ),\n);\nStrip.displayName = 'Strip';\n\n/** A condition that is true now, with at most one action that fixes it. */\nconst Notice = React.forwardRef<HTMLDivElement, NoticeProps>(({ icon, action, onDismiss, dismissLabel = 'Dismiss', size: sizeProp, ...props }, forwardedRef) => {\n const contextSize = React.useContext(NoticeSizeContext);\n const size = useThemeSize(sizeProp ?? contextSize, noticeSizePropDef);\n const trailing =\n action || onDismiss ? (\n <span className=\"rt-NoticeActions\">\n {action}\n {onDismiss ? (\n <IconButton size={size} variant=\"ghost\" color=\"gray\" aria-label={dismissLabel} className=\"rt-NoticeDismiss\" onClick={onDismiss}>\n <svg width=\"15\" height=\"15\" viewBox=\"0 0 15 15\" fill=\"none\" aria-hidden>\n <path d=\"M4 4l7 7M11 4l-7 7\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n </IconButton>\n ) : null}\n </span>\n ) : null;\n return <Strip {...props} size={size} ref={forwardedRef} kind=\"notice\" leading={icon} trailing={trailing} />;\n});\nNotice.displayName = 'Notice';\n\n/** A question that waits for an answer: a quiet no, a loud yes, and no dismiss button. */\nconst Confirmation = React.forwardRef<HTMLDivElement, ConfirmationProps>(\n ({ confirmLabel, cancelLabel = 'Not now', onConfirm, onCancel, busy = false, size: sizeProp, color = 'gray', ...props }, forwardedRef) => {\n const contextSize = React.useContext(NoticeSizeContext);\n const size = useThemeSize(sizeProp ?? contextSize, noticeSizePropDef);\n return (\n <Strip\n {...props}\n size={size}\n color={color}\n ref={forwardedRef}\n kind=\"confirmation\"\n trailing={\n <span className=\"rt-NoticeActions\">\n <Button size={size} variant=\"ghost\" color=\"gray\" disabled={busy} onClick={onCancel}>\n {cancelLabel}\n </Button>\n <Button size={size} variant=\"solid\" color={color} loading={busy} onClick={onConfirm}>\n {confirmLabel}\n </Button>\n </span>\n }\n />\n );\n },\n);\nConfirmation.displayName = 'Confirmation';\n\nexport { Notice, Confirmation, NoticeSizeContext };\nexport type { NoticeProps, ConfirmationProps };\n"],
|
|
5
|
+
"mappings": "gKAoBA,UAAYA,MAAW,QACvB,OAAOC,MAAgB,aAWvB,IAAMC,EAA0B,gBAAsC,MAAS,EAGzEC,EAAoB,CAAE,OAAQ,CAAC,IAAK,IAAK,GAAG,CAAW,EAyCvDC,EAAc,aAClB,CAAC,CAAE,KAAAC,EAAM,KAAAC,EAAO,IAAK,MAAAC,EAAQ,OAAQ,UAAAC,EAAW,SAAAC,EAAU,SAAAC,EAAU,QAAAC,EAAS,GAAGC,CAAM,EAAGC,IACvF,gBAAC,OACC,KAAK,SACL,YAAU,SACT,GAAGD,EACJ,IAAKC,EACL,UAAWC,EAAW,gBAAiB,aAAaR,CAAI,GAAIE,CAAS,EACrE,YAAWH,EACX,oBAAmBE,GAElBI,EACC,gBAAC,QAAK,UAAU,gBAAgB,cAAW,IACxCA,CACH,EACE,KACJ,gBAACI,EAAA,CAAK,GAAG,MAAM,KAAMT,EAAM,UAAU,iBAClCG,CACH,EACCC,CACH,CAEJ,EACAN,EAAM,YAAc,QAGpB,IAAMY,EAAe,aAAwC,CAAC,CAAE,KAAAC,EAAM,OAAAC,EAAQ,UAAAC,EAAW,aAAAC,EAAe,UAAW,KAAMC,EAAU,GAAGT,CAAM,EAAGC,IAAiB,CAC9J,IAAMS,EAAoB,aAAWpB,CAAiB,EAChDI,EAAOiB,EAAaF,GAAYC,EAAanB,CAAiB,EAcpE,OAAO,gBAACC,EAAA,CAAO,GAAGQ,EAAO,KAAMN,EAAM,IAAKO,EAAc,KAAK,SAAS,QAASI,EAAM,SAZnFC,GAAUC,EACR,gBAAC,QAAK,UAAU,oBACbD,EACAC,EACC,gBAACK,EAAA,CAAW,KAAMlB,EAAM,QAAQ,QAAQ,MAAM,OAAO,aAAYc,EAAc,UAAU,mBAAmB,QAASD,GACnH,gBAAC,OAAI,MAAM,KAAK,OAAO,KAAK,QAAQ,YAAY,KAAK,OAAO,cAAW,IACrE,gBAAC,QAAK,EAAE,qBAAqB,OAAO,eAAe,YAAY,MAAM,cAAc,QAAQ,CAC7F,CACF,EACE,IACN,EACE,KACmG,CAC3G,CAAC,EACDH,EAAO,YAAc,SAGrB,IAAMS,EAAqB,aACzB,CAAC,CAAE,aAAAC,EAAc,YAAAC,EAAc,UAAW,UAAAC,EAAW,SAAAC,EAAU,KAAAC,EAAO,GAAO,KAAMT,EAAU,MAAAd,EAAQ,OAAQ,GAAGK,CAAM,EAAGC,IAAiB,CACxI,IAAMS,EAAoB,aAAWpB,CAAiB,EAChDI,EAAOiB,EAAaF,GAAYC,EAAanB,CAAiB,EACpE,OACA,gBAACC,EAAA,CACE,GAAGQ,EACJ,KAAMN,EACN,MAAOC,EACP,IAAKM,EACL,KAAK,eACL,SACE,gBAAC,QAAK,UAAU,oBACd,gBAACkB,EAAA,CAAO,KAAMzB,EAAM,QAAQ,QAAQ,MAAM,OAAO,SAAUwB,EAAM,QAASD,GACvEF,CACH,EACA,gBAACI,EAAA,CAAO,KAAMzB,EAAM,QAAQ,QAAQ,MAAOC,EAAO,QAASuB,EAAM,QAASF,GACvEF,CACH,CACF,EAEJ,CAEF,CACF,EACAD,EAAa,YAAc",
|
|
6
|
+
"names": ["React", "classNames", "NoticeSizeContext", "noticeSizePropDef", "Strip", "kind", "size", "color", "className", "children", "trailing", "leading", "props", "forwardedRef", "classNames", "Text", "Notice", "icon", "action", "onDismiss", "dismissLabel", "sizeProp", "contextSize", "useThemeSize", "IconButton", "Confirmation", "confirmLabel", "cancelLabel", "onConfirm", "onCancel", "busy", "Button"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{a as O}from"./chunk-IF4PYIUV.js";import{b as W,d as V,f as L}from"./chunk-IX5HIHVI.js";import{a as D}from"./chunk-MJJ7XDIP.js";import{b as z,c as h}from"./chunk-6AZV4VFW.js";import{c as v}from"./chunk-RSJSVJ6A.js";import{a as S}from"./chunk-ZJZIV2JH.js";import{e as G}from"./chunk-3YLYGKFB.js";import{c as p,d as w,e as B,f as k}from"./chunk-EUSKAXHP.js";import{b as f,c as R,d as I,e as b}from"./chunk-WKMJIWFP.js";import{a as d}from"./chunk-UBSLEGQZ.js";import{a as ee}from"./chunk-OS3FCYZY.js";var te={};ee(te,{CheckboxItem:()=>Q,Content:()=>F,Group:()=>K,Item:()=>q,Label:()=>_,RadioGroup:()=>H,RadioItem:()=>J,Root:()=>A,Separator:()=>Z,Sub:()=>U,SubContent:()=>Y,SubTrigger:()=>X,Trigger:()=>j,Virtual:()=>O});import*as e from"react";import i from"classnames";import{ContextMenu as a,Slot as g}from"radix-ui";var A=t=>e.createElement(a.Root,{...t});A.displayName="ContextMenu.Root";var j=e.forwardRef(({children:t,...n},o)=>e.createElement(a.Trigger,{...n,ref:o,asChild:!0},D(t)));j.displayName="ContextMenu.Trigger";var y=e.createContext({}),F=e.forwardRef((t,n)=>{let o=G(t,p.size),s=z(),{size:r=p.size.default}=o,{className:u,children:C,color:x,container:l,forceMount:T,submenuBehavior:N,virtualized:M=!1,...P}=d(o,p),m=x||s.accentColor,c=f(r,p.size.default),$=e.useMemo(()=>({size:r,color:m}),[r,m]),E=e.createElement(v,{size:r},e.createElement(y.Provider,{value:$},C));return e.createElement(a.Portal,{container:l,forceMount:T},e.createElement(h,{asChild:!0},e.createElement(a.Content,{"data-accent-color":m,alignOffset:R(c),collisionPadding:10,...P,asChild:!1,ref:n,className:i("rt-PopperContent","rt-BaseMenuContent","rt-variant-soft","rt-ContextMenuContent",u)},M?e.createElement("div",{className:i("rt-BaseMenuViewport","rt-ContextMenuViewport","rt-virtualized")},E):e.createElement(S,{type:"auto",scrollbars:"vertical"},e.createElement("div",{className:i("rt-BaseMenuViewport","rt-ContextMenuViewport")},E)))))});F.displayName="ContextMenu.Content";var _=e.forwardRef(({className:t,...n},o)=>e.createElement(a.Label,{...n,asChild:!1,ref:o,className:i("rt-BaseMenuLabel","rt-ContextMenuLabel",t)}));_.displayName="ContextMenu.Label";var q=e.forwardRef((t,n)=>{let{className:o,children:s,color:r=w.color.default,shortcut:u,...C}=t;return e.createElement(a.Item,{"data-accent-color":r,"aria-keyshortcuts":u?I(u):void 0,...C,ref:n,className:i("rt-reset","rt-BaseMenuItem","rt-ContextMenuItem",o)},e.createElement(g.Slottable,null,s),u&&e.createElement(b,{shortcut:u,className:"rt-ContextMenuShortcut"}))});q.displayName="ContextMenu.Item";var K=e.forwardRef(({className:t,...n},o)=>e.createElement(a.Group,{...n,asChild:!1,ref:o,className:i("rt-BaseMenuGroup","rt-ContextMenuGroup",t)}));K.displayName="ContextMenu.Group";var H=e.forwardRef(({className:t,...n},o)=>e.createElement(a.RadioGroup,{...n,asChild:!1,ref:o,className:i("rt-BaseMenuRadioGroup","rt-ContextMenuRadioGroup",t)}));H.displayName="ContextMenu.RadioGroup";var J=e.forwardRef((t,n)=>{let{children:o,className:s,color:r=k.color.default,...u}=t;return e.createElement(a.RadioItem,{...u,asChild:!1,ref:n,"data-accent-color":r,className:i("rt-BaseMenuItem","rt-BaseMenuRadioItem","rt-ContextMenuItem","rt-ContextMenuRadioItem",s)},e.createElement(g.Slottable,null,o),e.createElement(a.ItemIndicator,{className:"rt-BaseMenuItemIndicator rt-ContextMenuItemIndicator"},e.createElement(L,{className:"rt-BaseMenuItemIndicatorIcon rt-ContextMenuItemIndicatorIcon"})))});J.displayName="ContextMenu.RadioItem";var Q=e.forwardRef((t,n)=>{let{children:o,className:s,shortcut:r,color:u=B.color.default,...C}=t;return e.createElement(a.CheckboxItem,{"aria-keyshortcuts":r?I(r):void 0,...C,asChild:!1,ref:n,"data-accent-color":u,className:i("rt-BaseMenuItem","rt-BaseMenuCheckboxItem","rt-ContextMenuItem","rt-ContextMenuCheckboxItem",s)},e.createElement(g.Slottable,null,o),e.createElement(a.ItemIndicator,{className:"rt-BaseMenuItemIndicator rt-ContextMenuItemIndicator"},e.createElement(W,{className:"rt-BaseMenuItemIndicatorIcon rt-ContextMenuItemIndicatorIcon"})),r&&e.createElement(b,{shortcut:r,className:"rt-ContextMenuShortcut"}))});Q.displayName="ContextMenu.CheckboxItem";var U=t=>e.createElement(a.Sub,{...t});U.displayName="ContextMenu.Sub";var X=e.forwardRef((t,n)=>{let{className:o,children:s,...r}=t;return e.createElement(a.SubTrigger,{...r,asChild:!1,ref:n,className:i("rt-BaseMenuItem","rt-BaseMenuSubTrigger","rt-ContextMenuItem","rt-ContextMenuSubTrigger",o)},s,e.createElement("div",{className:"rt-BaseMenuShortcut rt-ContextMenuShortcut"},e.createElement(V,{className:"rt-BaseMenuSubTriggerIcon rt-ContextMenuSubTriggerIcon"})))});X.displayName="ContextMenu.SubTrigger";var Y=e.forwardRef((t,n)=>{let o=e.useContext(y),s=t.size??o.size,r=t.color??o.color,{className:u,children:C,container:x,forceMount:l,color:T,virtualized:N=!1,...M}=d({...t,size:s},p),P=f(s,p.size.default),m=e.useMemo(()=>({size:s,color:r}),[s,r]),c=e.createElement(v,{size:s},e.createElement(y.Provider,{value:m},C));return e.createElement(a.Portal,{container:x,forceMount:l},e.createElement(h,{asChild:!0},e.createElement(a.SubContent,{"data-accent-color":r,alignOffset:R(P),sideOffset:1,collisionPadding:10,...M,asChild:!1,ref:n,className:i("rt-PopperContent","rt-BaseMenuContent","rt-variant-soft","rt-BaseMenuSubContent","rt-ContextMenuContent","rt-ContextMenuSubContent",u)},N?e.createElement("div",{className:i("rt-BaseMenuViewport","rt-ContextMenuViewport","rt-virtualized")},c):e.createElement(S,{type:"auto",scrollbars:"vertical"},e.createElement("div",{className:i("rt-BaseMenuViewport","rt-ContextMenuViewport")},c)))))});Y.displayName="ContextMenu.SubContent";var Z=e.forwardRef(({className:t,...n},o)=>e.createElement(a.Separator,{...n,asChild:!1,ref:o,className:i("rt-BaseMenuSeparator","rt-ContextMenuSeparator",t)}));Z.displayName="ContextMenu.Separator";export{A as a,j as b,F as c,_ as d,q as e,K as f,H as g,J as h,Q as i,U as j,X as k,Y as l,Z as m,te as n};
|
|
2
|
+
//# sourceMappingURL=chunk-GQBQHGEF.js.map
|