@mizen-labs/ui 0.0.0-stage → 0.1.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/LICENSE +21 -0
- package/README.md +72 -2
- package/dist/closed.d.ts +5 -0
- package/dist/closed.js +1 -0
- package/dist/components/accordion/accordion.d.ts +28 -0
- package/dist/components/accordion/accordion.js +1 -0
- package/dist/components/accordion/accordion.styles.js +1 -0
- package/dist/components/activity-feed/activity-feed.d.ts +28 -0
- package/dist/components/activity-feed/activity-feed.js +2 -0
- package/dist/components/activity-feed/activity-feed.styles.js +1 -0
- package/dist/components/agent-thinking/agent-thinking.d.ts +25 -0
- package/dist/components/agent-thinking/agent-thinking.js +16 -0
- package/dist/components/agent-thinking/agent-thinking.styles.js +3 -0
- package/dist/components/alert/alert.d.ts +14 -0
- package/dist/components/alert/alert.js +1 -0
- package/dist/components/alert/alert.styles.js +1 -0
- package/dist/components/alert/alert.stylex.js +1 -0
- package/dist/components/alert-dialog/alert-dialog.d.ts +29 -0
- package/dist/components/alert-dialog/alert-dialog.js +1 -0
- package/dist/components/alert-dialog/alert-dialog.styles.js +1 -0
- package/dist/components/approval-card/approval-card.d.ts +38 -0
- package/dist/components/approval-card/approval-card.js +8 -0
- package/dist/components/approval-card/approval-card.styles.js +1 -0
- package/dist/components/area-chart/area-chart.d.ts +29 -0
- package/dist/components/area-chart/area-chart.js +10 -0
- package/dist/components/area-chart/area-chart.styles.js +1 -0
- package/dist/components/aspect-ratio/aspect-ratio.d.ts +7 -0
- package/dist/components/aspect-ratio/aspect-ratio.js +1 -0
- package/dist/components/aspect-ratio/aspect-ratio.styles.js +1 -0
- package/dist/components/attachment/attachment.d.ts +20 -0
- package/dist/components/attachment/attachment.js +1 -0
- package/dist/components/attachment/attachment.styles.js +1 -0
- package/dist/components/avatar/avatar-character.styles.js +1 -0
- package/dist/components/avatar/avatar.d.ts +36 -0
- package/dist/components/avatar/avatar.js +4 -0
- package/dist/components/avatar/avatar.styles.js +1 -0
- package/dist/components/badge/badge.d.ts +8 -0
- package/dist/components/badge/badge.js +1 -0
- package/dist/components/badge/badge.styles.js +1 -0
- package/dist/components/bar-list/bar-list.d.ts +22 -0
- package/dist/components/bar-list/bar-list.js +4 -0
- package/dist/components/bar-list/bar-list.styles.js +1 -0
- package/dist/components/blockquote/blockquote.d.ts +12 -0
- package/dist/components/blockquote/blockquote.js +1 -0
- package/dist/components/blockquote/blockquote.styles.js +1 -0
- package/dist/components/breadcrumb/breadcrumb-link.d.ts +4 -0
- package/dist/components/breadcrumb/breadcrumb-link.js +1 -0
- package/dist/components/breadcrumb/breadcrumb.d.ts +16 -0
- package/dist/components/breadcrumb/breadcrumb.js +2 -0
- package/dist/components/breadcrumb/breadcrumb.styles.js +1 -0
- package/dist/components/button/button-colors.stylex.js +3 -0
- package/dist/components/button/button.css +16 -0
- package/dist/components/button/button.css.d.js +0 -0
- package/dist/components/button/button.d.ts +27 -0
- package/dist/components/button/button.js +1 -0
- package/dist/components/button/button.styles.js +3 -0
- package/dist/components/button-group/button-group.css +115 -0
- package/dist/components/button-group/button-group.d.ts +8 -0
- package/dist/components/button-group/button-group.js +3 -0
- package/dist/components/button-group/button-group.styles.js +1 -0
- package/dist/components/calendar/calendar-components.js +2 -0
- package/dist/components/calendar/calendar-context.js +1 -0
- package/dist/components/calendar/calendar-dropdowns.js +2 -0
- package/dist/components/calendar/calendar-utils.js +1 -0
- package/dist/components/calendar/calendar.d.ts +4 -0
- package/dist/components/calendar/calendar.js +1 -0
- package/dist/components/calendar/calendar.styles.js +1 -0
- package/dist/components/calendar/calendar.types.d.ts +48 -0
- package/dist/components/calendar/calendar.types.js +1 -0
- package/dist/components/calendar-heatmap/calendar-heatmap.d.ts +20 -0
- package/dist/components/calendar-heatmap/calendar-heatmap.js +9 -0
- package/dist/components/card/card.d.ts +17 -0
- package/dist/components/card/card.js +1 -0
- package/dist/components/card/card.styles.js +1 -0
- package/dist/components/carousel/carousel.d.ts +33 -0
- package/dist/components/carousel/carousel.js +21 -0
- package/dist/components/carousel/carousel.styles.js +4 -0
- package/dist/components/category-comparison/category-comparison.d.ts +30 -0
- package/dist/components/category-comparison/category-comparison.js +9 -0
- package/dist/components/category-comparison/category-comparison.styles.js +1 -0
- package/dist/components/chart-frame/arc-path.js +7 -0
- package/dist/components/chart-frame/chart-assert.js +2 -0
- package/dist/components/chart-frame/chart-colors.d.ts +10 -0
- package/dist/components/chart-frame/chart-colors.js +2 -0
- package/dist/components/chart-frame/chart-crosshair.js +6 -0
- package/dist/components/chart-frame/chart-data-table.js +4 -0
- package/dist/components/chart-frame/chart-frame.d.ts +24 -0
- package/dist/components/chart-frame/chart-frame.js +7 -0
- package/dist/components/chart-frame/chart-frame.styles.js +1 -0
- package/dist/components/chart-frame/chart-hover.js +3 -0
- package/dist/components/chart-frame/chart-loading.d.ts +22 -0
- package/dist/components/chart-frame/chart-loading.js +6 -0
- package/dist/components/chart-frame/ring-graphic.js +5 -0
- package/dist/components/chart-legend/chart-legend.d.ts +18 -0
- package/dist/components/chart-legend/chart-legend.js +1 -0
- package/dist/components/chart-legend/chart-legend.styles.js +1 -0
- package/dist/components/chart-tooltip/chart-tooltip.d.ts +14 -0
- package/dist/components/chart-tooltip/chart-tooltip.js +1 -0
- package/dist/components/chart-tooltip/chart-tooltip.styles.js +1 -0
- package/dist/components/checkbox/checkbox-card.d.ts +16 -0
- package/dist/components/checkbox/checkbox-card.js +1 -0
- package/dist/components/checkbox/checkbox-card.styles.js +1 -0
- package/dist/components/checkbox/checkbox.d.ts +13 -0
- package/dist/components/checkbox/checkbox.js +5 -0
- package/dist/components/checkbox/checkbox.styles.js +3 -0
- package/dist/components/checkbox-group/checkbox-group.d.ts +6 -0
- package/dist/components/checkbox-group/checkbox-group.js +1 -0
- package/dist/components/checkbox-group/checkbox-group.styles.js +1 -0
- package/dist/components/citation/citation.d.ts +6 -0
- package/dist/components/citation/citation.js +1 -0
- package/dist/components/citation/citation.styles.js +1 -0
- package/dist/components/code/code.d.ts +5 -0
- package/dist/components/code/code.js +1 -0
- package/dist/components/code/code.styles.js +3 -0
- package/dist/components/code-block/code-block-copy.d.ts +6 -0
- package/dist/components/code-block/code-block-copy.js +1 -0
- package/dist/components/code-block/code-block-highlight.d.ts +31 -0
- package/dist/components/code-block/code-block-highlight.js +8 -0
- package/dist/components/code-block/code-block.d.ts +22 -0
- package/dist/components/code-block/code-block.js +4 -0
- package/dist/components/code-block/code-block.styles.js +3 -0
- package/dist/components/collapsible/collapsible.d.ts +19 -0
- package/dist/components/collapsible/collapsible.js +1 -0
- package/dist/components/collapsible/collapsible.styles.js +1 -0
- package/dist/components/combobox/combobox-chips.js +1 -0
- package/dist/components/combobox/combobox-chips.styles.js +1 -0
- package/dist/components/combobox/combobox-context.d.ts +9 -0
- package/dist/components/combobox/combobox-context.js +1 -0
- package/dist/components/combobox/combobox-field.styles.js +1 -0
- package/dist/components/combobox/combobox-input.js +1 -0
- package/dist/components/combobox/combobox-popup.js +1 -0
- package/dist/components/combobox/combobox-popup.styles.js +1 -0
- package/dist/components/combobox/combobox-structure.js +1 -0
- package/dist/components/combobox/combobox.d.ts +27 -0
- package/dist/components/combobox/combobox.js +1 -0
- package/dist/components/combobox/combobox.types.d.ts +43 -0
- package/dist/components/combobox/combobox.types.js +1 -0
- package/dist/components/command/command-dialog.js +1 -0
- package/dist/components/command/command-dialog.styles.js +1 -0
- package/dist/components/command/command-field.styles.js +1 -0
- package/dist/components/command/command-input.js +1 -0
- package/dist/components/command/command-items.js +1 -0
- package/dist/components/command/command-items.styles.js +1 -0
- package/dist/components/command/command-structure.js +1 -0
- package/dist/components/command/command.d.ts +29 -0
- package/dist/components/command/command.js +2 -0
- package/dist/components/command/command.types.d.ts +28 -0
- package/dist/components/command/command.types.js +1 -0
- package/dist/components/composer/attachment-marker.stylex.js +2 -0
- package/dist/components/composer/composer-clipboard.js +1 -0
- package/dist/components/composer/composer-context-meter.d.ts +36 -0
- package/dist/components/composer/composer-context-meter.js +6 -0
- package/dist/components/composer/composer-dictation.d.ts +17 -0
- package/dist/components/composer/composer-dictation.js +5 -0
- package/dist/components/composer/composer-document.d.ts +32 -0
- package/dist/components/composer/composer-document.js +1 -0
- package/dist/components/composer/composer-editor.d.ts +57 -0
- package/dist/components/composer/composer-editor.js +4 -0
- package/dist/components/composer/composer-history.js +1 -0
- package/dist/components/composer/composer-options.d.ts +45 -0
- package/dist/components/composer/composer-options.js +1 -0
- package/dist/components/composer/composer-parts.d.ts +36 -0
- package/dist/components/composer/composer-parts.js +4 -0
- package/dist/components/composer/composer-parts.styles.js +4 -0
- package/dist/components/composer/composer-picker.d.ts +50 -0
- package/dist/components/composer/composer-picker.js +15 -0
- package/dist/components/composer/composer-progress-ring.js +1 -0
- package/dist/components/composer/composer-query.js +1 -0
- package/dist/components/composer/composer-scroll-area.js +1 -0
- package/dist/components/composer/composer-session.js +3 -0
- package/dist/components/composer/composer-value.d.ts +45 -0
- package/dist/components/composer/composer-value.js +1 -0
- package/dist/components/composer/composer.css +80 -0
- package/dist/components/composer/composer.d.ts +72 -0
- package/dist/components/composer/composer.js +3 -0
- package/dist/components/composer/composer.styles.js +2 -0
- package/dist/components/composer/use-composer-editor.d.ts +8 -0
- package/dist/components/composer/use-composer-editor.js +2 -0
- package/dist/components/context-menu/context-menu-items.d.ts +10 -0
- package/dist/components/context-menu/context-menu-items.js +2 -0
- package/dist/components/context-menu/context-menu-utils.js +1 -0
- package/dist/components/context-menu/context-menu.d.ts +22 -0
- package/dist/components/context-menu/context-menu.js +1 -0
- package/dist/components/context-menu/context-menu.types.d.ts +57 -0
- package/dist/components/context-menu/context-menu.types.js +1 -0
- package/dist/components/conversation/conversation.d.ts +41 -0
- package/dist/components/conversation/conversation.js +6 -0
- package/dist/components/conversation/conversation.styles.js +2 -0
- package/dist/components/data-table/data-table.d.ts +30 -0
- package/dist/components/data-table/data-table.js +13 -0
- package/dist/components/data-table/data-table.styles.js +1 -0
- package/dist/components/data-table/grid-navigation.js +10 -0
- package/dist/components/date-picker/date-picker-date.js +1 -0
- package/dist/components/date-picker/date-picker-icon.js +1 -0
- package/dist/components/date-picker/date-picker-state.js +1 -0
- package/dist/components/date-picker/date-picker.d.ts +4 -0
- package/dist/components/date-picker/date-picker.js +1 -0
- package/dist/components/date-picker/date-picker.styles.js +1 -0
- package/dist/components/date-picker/date-picker.types.d.ts +28 -0
- package/dist/components/date-picker/date-picker.types.js +1 -0
- package/dist/components/date-range-picker/date-range-picker-date.js +1 -0
- package/dist/components/date-range-picker/date-range-picker-state.js +1 -0
- package/dist/components/date-range-picker/date-range-picker-views.js +1 -0
- package/dist/components/date-range-picker/date-range-picker.d.ts +4 -0
- package/dist/components/date-range-picker/date-range-picker.js +1 -0
- package/dist/components/date-range-picker/date-range-picker.styles.js +1 -0
- package/dist/components/date-range-picker/date-range-picker.types.d.ts +37 -0
- package/dist/components/date-range-picker/date-range-picker.types.js +1 -0
- package/dist/components/date-time-input/date-time-input.d.ts +13 -0
- package/dist/components/date-time-input/date-time-input.js +1 -0
- package/dist/components/diagram/diagram-renderer.js +5 -0
- package/dist/components/diagram/diagram.css +51 -0
- package/dist/components/diagram/diagram.d.ts +11 -0
- package/dist/components/diagram/diagram.js +4 -0
- package/dist/components/diagram/diagram.styles.js +6 -0
- package/dist/components/dialog/dialog.d.ts +34 -0
- package/dist/components/dialog/dialog.js +1 -0
- package/dist/components/dialog/dialog.styles.js +1 -0
- package/dist/components/distribution/distribution.d.ts +16 -0
- package/dist/components/distribution/distribution.js +6 -0
- package/dist/components/distribution/distribution.styles.js +1 -0
- package/dist/components/drawer/drawer-affordance.styles.js +1 -0
- package/dist/components/drawer/drawer-bar.js +1 -0
- package/dist/components/drawer/drawer-content.js +1 -0
- package/dist/components/drawer/drawer-layout.js +1 -0
- package/dist/components/drawer/drawer-menu.d.ts +30 -0
- package/dist/components/drawer/drawer-menu.js +1 -0
- package/dist/components/drawer/drawer-menu.styles.js +1 -0
- package/dist/components/drawer/drawer-positions.styles.js +1 -0
- package/dist/components/drawer/drawer.context.js +1 -0
- package/dist/components/drawer/drawer.d.ts +22 -0
- package/dist/components/drawer/drawer.js +2 -0
- package/dist/components/drawer/drawer.styles.js +1 -0
- package/dist/components/drawer/drawer.types.d.ts +53 -0
- package/dist/components/drawer/drawer.types.js +1 -0
- package/dist/components/empty/empty.d.ts +18 -0
- package/dist/components/empty/empty.js +1 -0
- package/dist/components/empty/empty.styles.js +1 -0
- package/dist/components/error-state/error-state.d.ts +15 -0
- package/dist/components/error-state/error-state.js +1 -0
- package/dist/components/error-state/error-state.styles.js +1 -0
- package/dist/components/field/field-context.d.ts +33 -0
- package/dist/components/field/field-context.js +1 -0
- package/dist/components/field/field.d.ts +44 -0
- package/dist/components/field/field.js +3 -0
- package/dist/components/field/field.styles.js +1 -0
- package/dist/components/fieldset/fieldset.d.ts +14 -0
- package/dist/components/fieldset/fieldset.js +1 -0
- package/dist/components/fieldset/fieldset.styles.js +1 -0
- package/dist/components/file-upload/file-upload-context.js +1 -0
- package/dist/components/file-upload/file-upload-controls.d.ts +4 -0
- package/dist/components/file-upload/file-upload-controls.js +7 -0
- package/dist/components/file-upload/file-upload-item-preview.d.ts +5 -0
- package/dist/components/file-upload/file-upload-item-preview.js +3 -0
- package/dist/components/file-upload/file-upload-items.d.ts +8 -0
- package/dist/components/file-upload/file-upload-items.js +5 -0
- package/dist/components/file-upload/file-upload-motion.js +6 -0
- package/dist/components/file-upload/file-upload-validation.d.ts +18 -0
- package/dist/components/file-upload/file-upload-validation.js +1 -0
- package/dist/components/file-upload/file-upload.d.ts +19 -0
- package/dist/components/file-upload/file-upload.js +2 -0
- package/dist/components/file-upload/file-upload.styles.js +2 -0
- package/dist/components/file-upload/file-upload.types.d.ts +87 -0
- package/dist/components/file-upload/file-upload.types.js +1 -0
- package/dist/components/frame/frame.d.ts +13 -0
- package/dist/components/frame/frame.js +1 -0
- package/dist/components/frame/frame.styles.js +1 -0
- package/dist/components/funnel/funnel-flow.js +3 -0
- package/dist/components/funnel/funnel.d.ts +31 -0
- package/dist/components/funnel/funnel.js +4 -0
- package/dist/components/funnel/funnel.styles.js +1 -0
- package/dist/components/grid/grid.d.ts +5 -0
- package/dist/components/grid/grid.js +1 -0
- package/dist/components/grid/grid.styles.js +1 -0
- package/dist/components/group/group.d.ts +5 -0
- package/dist/components/group/group.js +1 -0
- package/dist/components/group/group.styles.js +1 -0
- package/dist/components/heading/heading.d.ts +10 -0
- package/dist/components/heading/heading.js +1 -0
- package/dist/components/heading/heading.styles.js +1 -0
- package/dist/components/heatmap/heatmap-scale.js +3 -0
- package/dist/components/heatmap/heatmap.d.ts +17 -0
- package/dist/components/heatmap/heatmap.js +2 -0
- package/dist/components/inline/inline.d.ts +5 -0
- package/dist/components/inline/inline.js +1 -0
- package/dist/components/inline/inline.styles.js +1 -0
- package/dist/components/inline-citation/citation-source.d.ts +27 -0
- package/dist/components/inline-citation/citation-source.js +13 -0
- package/dist/components/inline-citation/inline-citation.d.ts +22 -0
- package/dist/components/inline-citation/inline-citation.js +10 -0
- package/dist/components/inline-citation/inline-citation.styles.js +1 -0
- package/dist/components/input/input.d.ts +17 -0
- package/dist/components/input/input.js +3 -0
- package/dist/components/input/input.styles.js +1 -0
- package/dist/components/input-group/input-group.d.ts +17 -0
- package/dist/components/input-group/input-group.js +1 -0
- package/dist/components/input-group/input-group.styles.js +1 -0
- package/dist/components/kbd/kbd.d.ts +7 -0
- package/dist/components/kbd/kbd.js +1 -0
- package/dist/components/kbd/kbd.styles.js +1 -0
- package/dist/components/label/label.d.ts +5 -0
- package/dist/components/label/label.js +1 -0
- package/dist/components/label/label.styles.js +1 -0
- package/dist/components/lightbox/lightbox-gallery.d.ts +25 -0
- package/dist/components/lightbox/lightbox-gallery.js +6 -0
- package/dist/components/lightbox/lightbox.d.ts +30 -0
- package/dist/components/lightbox/lightbox.js +6 -0
- package/dist/components/lightbox/lightbox.styles.js +3 -0
- package/dist/components/link/link.d.ts +15 -0
- package/dist/components/link/link.js +1 -0
- package/dist/components/link/link.styles.js +1 -0
- package/dist/components/list/list.d.ts +10 -0
- package/dist/components/list/list.js +2 -0
- package/dist/components/list/list.styles.js +1 -0
- package/dist/components/markdown/markdown.d.ts +34 -0
- package/dist/components/markdown/markdown.js +8 -0
- package/dist/components/markdown/markdown.styles.js +1 -0
- package/dist/components/menu/menu-align-context.js +3 -0
- package/dist/components/menu/menu.d.ts +75 -0
- package/dist/components/menu/menu.js +2 -0
- package/dist/components/menu/menu.styles.js +1 -0
- package/dist/components/menubar/menubar.d.ts +13 -0
- package/dist/components/menubar/menubar.js +1 -0
- package/dist/components/menubar/menubar.styles.js +1 -0
- package/dist/components/message/message.d.ts +47 -0
- package/dist/components/message/message.js +16 -0
- package/dist/components/message/message.styles.js +3 -0
- package/dist/components/message-scroller/message-scroller-store.d.ts +58 -0
- package/dist/components/message-scroller/message-scroller-store.js +27 -0
- package/dist/components/message-scroller/message-scroller.d.ts +76 -0
- package/dist/components/message-scroller/message-scroller.js +30 -0
- package/dist/components/message-scroller/message-scroller.styles.js +4 -0
- package/dist/components/meter/meter.d.ts +30 -0
- package/dist/components/meter/meter.js +2 -0
- package/dist/components/meter/meter.styles.js +1 -0
- package/dist/components/metric/metric.d.ts +17 -0
- package/dist/components/metric/metric.js +4 -0
- package/dist/components/metric/metric.styles.js +1 -0
- package/dist/components/metric-trend/metric-trend.d.ts +26 -0
- package/dist/components/metric-trend/metric-trend.js +6 -0
- package/dist/components/metric-trend/metric-trend.styles.js +1 -0
- package/dist/components/navigation-menu/navigation-menu.d.ts +40 -0
- package/dist/components/navigation-menu/navigation-menu.js +1 -0
- package/dist/components/navigation-menu/navigation-menu.styles.js +1 -0
- package/dist/components/number-field/number-field-context.js +1 -0
- package/dist/components/number-field/number-field.d.ts +11 -0
- package/dist/components/number-field/number-field.js +1 -0
- package/dist/components/number-field/number-field.styles.js +1 -0
- package/dist/components/number-field/number-field.types.d.ts +30 -0
- package/dist/components/number-field/number-field.types.js +1 -0
- package/dist/components/otp-field/otp-field.d.ts +21 -0
- package/dist/components/otp-field/otp-field.js +1 -0
- package/dist/components/otp-field/otp-field.styles.js +1 -0
- package/dist/components/overflow-list/overflow-list.d.ts +10 -0
- package/dist/components/overflow-list/overflow-list.js +3 -0
- package/dist/components/overflow-list/overflow-list.styles.js +1 -0
- package/dist/components/pagination/pagination-link.d.ts +10 -0
- package/dist/components/pagination/pagination-link.js +1 -0
- package/dist/components/pagination/pagination.d.ts +22 -0
- package/dist/components/pagination/pagination.js +2 -0
- package/dist/components/pagination/pagination.styles.js +1 -0
- package/dist/components/part-to-whole/part-to-whole.d.ts +18 -0
- package/dist/components/part-to-whole/part-to-whole.js +2 -0
- package/dist/components/part-to-whole/part-to-whole.styles.js +1 -0
- package/dist/components/popover/popover.d.ts +33 -0
- package/dist/components/popover/popover.js +1 -0
- package/dist/components/popover/popover.styles.js +1 -0
- package/dist/components/preview-card/preview-card.d.ts +21 -0
- package/dist/components/preview-card/preview-card.js +1 -0
- package/dist/components/preview-card/preview-card.styles.js +1 -0
- package/dist/components/progress/progress.d.ts +28 -0
- package/dist/components/progress/progress.js +1 -0
- package/dist/components/progress/progress.styles.js +1 -0
- package/dist/components/progress-rings/progress-rings.d.ts +25 -0
- package/dist/components/progress-rings/progress-rings.js +2 -0
- package/dist/components/progress-rings/progress-rings.styles.js +1 -0
- package/dist/components/property-list/property-list.d.ts +9 -0
- package/dist/components/property-list/property-list.js +1 -0
- package/dist/components/property-list/property-list.styles.js +1 -0
- package/dist/components/question-card/question-card.d.ts +35 -0
- package/dist/components/question-card/question-card.js +13 -0
- package/dist/components/question-card/question-card.styles.js +1 -0
- package/dist/components/radar-chart/radar-chart.d.ts +28 -0
- package/dist/components/radar-chart/radar-chart.js +1 -0
- package/dist/components/radial-bars/radial-bars.d.ts +19 -0
- package/dist/components/radial-bars/radial-bars.js +8 -0
- package/dist/components/radio/radio-card.d.ts +15 -0
- package/dist/components/radio/radio-card.js +1 -0
- package/dist/components/radio/radio.d.ts +9 -0
- package/dist/components/radio/radio.js +1 -0
- package/dist/components/radio/radio.styles.js +1 -0
- package/dist/components/radio-group/radio-group.d.ts +3 -0
- package/dist/components/radio-group/radio-group.js +1 -0
- package/dist/components/sankey-chart/sankey-chart.d.ts +16 -0
- package/dist/components/sankey-chart/sankey-chart.js +1 -0
- package/dist/components/sankey-chart/sankey-layout.d.ts +34 -0
- package/dist/components/sankey-chart/sankey-layout.js +5 -0
- package/dist/components/scatter-chart/scatter-chart.d.ts +30 -0
- package/dist/components/scatter-chart/scatter-chart.js +6 -0
- package/dist/components/scatter-chart/scatter-chart.styles.js +1 -0
- package/dist/components/score-gauge/score-gauge.d.ts +24 -0
- package/dist/components/score-gauge/score-gauge.js +8 -0
- package/dist/components/score-gauge/score-gauge.styles.js +1 -0
- package/dist/components/scroll-area/scroll-area.d.ts +26 -0
- package/dist/components/scroll-area/scroll-area.js +1 -0
- package/dist/components/scroll-area/scroll-area.styles.js +2 -0
- package/dist/components/section/section.d.ts +5 -0
- package/dist/components/section/section.js +1 -0
- package/dist/components/section/section.styles.js +1 -0
- package/dist/components/segmented-control/segmented-control.d.ts +10 -0
- package/dist/components/segmented-control/segmented-control.js +1 -0
- package/dist/components/segmented-control/segmented-control.styles.js +1 -0
- package/dist/components/select/select.d.ts +55 -0
- package/dist/components/select/select.js +1 -0
- package/dist/components/select/select.styles.js +1 -0
- package/dist/components/separator/separator.d.ts +5 -0
- package/dist/components/separator/separator.js +1 -0
- package/dist/components/separator/separator.styles.js +1 -0
- package/dist/components/sheet/sheet-layout.js +1 -0
- package/dist/components/sheet/sheet-positions.styles.js +1 -0
- package/dist/components/sheet/sheet.d.ts +15 -0
- package/dist/components/sheet/sheet.js +1 -0
- package/dist/components/sheet/sheet.styles.js +1 -0
- package/dist/components/sheet/sheet.types.d.ts +32 -0
- package/dist/components/sheet/sheet.types.js +1 -0
- package/dist/components/skeleton/skeleton.d.ts +8 -0
- package/dist/components/skeleton/skeleton.js +1 -0
- package/dist/components/skeleton/skeleton.styles.js +1 -0
- package/dist/components/slider/slider-context.d.ts +23 -0
- package/dist/components/slider/slider-context.js +9 -0
- package/dist/components/slider/slider-default-anatomy.js +1 -0
- package/dist/components/slider/slider-ref-utils.js +1 -0
- package/dist/components/slider/slider-slot.js +1 -0
- package/dist/components/slider/slider.d.ts +15 -0
- package/dist/components/slider/slider.js +1 -0
- package/dist/components/slider/slider.styles.js +1 -0
- package/dist/components/slider/slider.types.d.ts +36 -0
- package/dist/components/slider/slider.types.js +1 -0
- package/dist/components/sources/sources.d.ts +22 -0
- package/dist/components/sources/sources.js +6 -0
- package/dist/components/sources/sources.styles.js +3 -0
- package/dist/components/spacer/spacer.d.ts +5 -0
- package/dist/components/spacer/spacer.js +1 -0
- package/dist/components/spacer/spacer.styles.js +1 -0
- package/dist/components/spinner/spinner.d.ts +18 -0
- package/dist/components/spinner/spinner.js +9 -0
- package/dist/components/spinner/spinner.styles.js +11 -0
- package/dist/components/stack/stack.d.ts +9 -0
- package/dist/components/stack/stack.js +1 -0
- package/dist/components/stack/stack.styles.d.ts +76 -0
- package/dist/components/stack/stack.styles.js +2 -0
- package/dist/components/status-dot/status-dot.d.ts +9 -0
- package/dist/components/status-dot/status-dot.js +1 -0
- package/dist/components/status-dot/status-dot.styles.js +1 -0
- package/dist/components/stepper/stepper.d.ts +42 -0
- package/dist/components/stepper/stepper.js +2 -0
- package/dist/components/stepper/stepper.styles.js +1 -0
- package/dist/components/streaming-text/streaming-text-words.d.ts +29 -0
- package/dist/components/streaming-text/streaming-text-words.js +19 -0
- package/dist/components/streaming-text/streaming-text.d.ts +35 -0
- package/dist/components/streaming-text/streaming-text.js +13 -0
- package/dist/components/streaming-text/streaming-text.styles.js +6 -0
- package/dist/components/suggestion/suggestion.d.ts +23 -0
- package/dist/components/suggestion/suggestion.js +7 -0
- package/dist/components/suggestion/suggestion.styles.js +3 -0
- package/dist/components/switch/switch.d.ts +12 -0
- package/dist/components/switch/switch.js +1 -0
- package/dist/components/switch/switch.styles.js +1 -0
- package/dist/components/table/table.d.ts +64 -0
- package/dist/components/table/table.js +1 -0
- package/dist/components/table/table.styles.js +1 -0
- package/dist/components/tabs/tabs.d.ts +32 -0
- package/dist/components/tabs/tabs.js +1 -0
- package/dist/components/tabs/tabs.styles.js +1 -0
- package/dist/components/task-list/task-list.d.ts +34 -0
- package/dist/components/task-list/task-list.js +10 -0
- package/dist/components/task-list/task-list.styles.js +2 -0
- package/dist/components/terminal/ansi.js +11 -0
- package/dist/components/terminal/terminal.d.ts +23 -0
- package/dist/components/terminal/terminal.js +15 -0
- package/dist/components/terminal/terminal.styles.js +1 -0
- package/dist/components/text/text.d.ts +11 -0
- package/dist/components/text/text.js +1 -0
- package/dist/components/text/text.styles.js +1 -0
- package/dist/components/textarea/textarea.d.ts +13 -0
- package/dist/components/textarea/textarea.js +3 -0
- package/dist/components/textarea/textarea.styles.js +1 -0
- package/dist/components/thumbnail/thumbnail.d.ts +9 -0
- package/dist/components/thumbnail/thumbnail.js +2 -0
- package/dist/components/thumbnail/thumbnail.styles.js +1 -0
- package/dist/components/time-input/time-input.d.ts +13 -0
- package/dist/components/time-input/time-input.js +1 -0
- package/dist/components/time-series/time-format.d.ts +16 -0
- package/dist/components/time-series/time-format.js +10 -0
- package/dist/components/time-series/time-series.d.ts +30 -0
- package/dist/components/time-series/time-series.js +10 -0
- package/dist/components/time-series/time-series.styles.js +1 -0
- package/dist/components/timestamp/timestamp.d.ts +15 -0
- package/dist/components/timestamp/timestamp.js +4 -0
- package/dist/components/timestamp/timestamp.styles.js +1 -0
- package/dist/components/toast/toast-anchored.styles.js +1 -0
- package/dist/components/toast/toast-animation.styles.js +1 -0
- package/dist/components/toast/toast-icons.js +1 -0
- package/dist/components/toast/toast-stacked.styles.js +1 -0
- package/dist/components/toast/toast-utils.js +1 -0
- package/dist/components/toast/toast-views.js +1 -0
- package/dist/components/toast/toast.d.ts +8 -0
- package/dist/components/toast/toast.js +1 -0
- package/dist/components/toast/toast.styles.js +1 -0
- package/dist/components/toast/toast.types.d.ts +18 -0
- package/dist/components/toast/toast.types.js +1 -0
- package/dist/components/toggle/toggle-colors.stylex.js +2 -0
- package/dist/components/toggle/toggle.d.ts +33 -0
- package/dist/components/toggle/toggle.js +1 -0
- package/dist/components/toggle/toggle.styles.js +1 -0
- package/dist/components/token/token.d.ts +16 -0
- package/dist/components/token/token.js +1 -0
- package/dist/components/token/token.styles.js +1 -0
- package/dist/components/tool-call/tool-call-group.d.ts +17 -0
- package/dist/components/tool-call/tool-call-group.js +6 -0
- package/dist/components/tool-call/tool-call.d.ts +36 -0
- package/dist/components/tool-call/tool-call.js +12 -0
- package/dist/components/tool-call/tool-call.styles.js +3 -0
- package/dist/components/toolbar/toolbar-context.js +2 -0
- package/dist/components/toolbar/toolbar.d.ts +37 -0
- package/dist/components/toolbar/toolbar.js +1 -0
- package/dist/components/toolbar/toolbar.styles.js +1 -0
- package/dist/components/tooltip/tooltip.d.ts +25 -0
- package/dist/components/tooltip/tooltip.js +1 -0
- package/dist/components/tooltip/tooltip.styles.js +1 -0
- package/dist/components/tree/tree.d.ts +31 -0
- package/dist/components/tree/tree.js +5 -0
- package/dist/components/tree/tree.styles.js +3 -0
- package/dist/components/visually-hidden/visually-hidden.d.ts +6 -0
- package/dist/components/visually-hidden/visually-hidden.js +1 -0
- package/dist/components/visually-hidden/visually-hidden.styles.js +1 -0
- package/dist/control-label.js +3 -0
- package/dist/copy-button.js +1 -0
- package/dist/form.d.ts +2 -0
- package/dist/form.js +2 -0
- package/dist/icon-masks.stylex.js +3 -0
- package/dist/icons.js +5 -0
- package/dist/index.d.ts +275 -0
- package/dist/index.js +1 -0
- package/dist/loading-indicator.js +3 -0
- package/dist/motion.js +9 -0
- package/dist/ref-utils.js +1 -0
- package/dist/render-utils.js +3 -0
- package/dist/styles/application-structure.stylex.js +1 -0
- package/dist/styles/colors.stylex.d.ts +50 -0
- package/dist/styles/colors.stylex.js +1 -0
- package/dist/styles/conditions.stylex.d.ts +9 -0
- package/dist/styles/conditions.stylex.js +1 -0
- package/dist/styles/dimensions.stylex.d.ts +14 -0
- package/dist/styles/dimensions.stylex.js +1 -0
- package/dist/styles/floating-item-colors.stylex.js +1 -0
- package/dist/styles/fonts.stylex.d.ts +5 -0
- package/dist/styles/fonts.stylex.js +1 -0
- package/dist/styles/interaction.stylex.d.ts +23 -0
- package/dist/styles/interaction.stylex.js +4 -0
- package/dist/styles/motion.stylex.d.ts +22 -0
- package/dist/styles/motion.stylex.js +3 -0
- package/dist/styles/overlay-layers.styles.js +1 -0
- package/dist/styles/palette.stylex.d.ts +26 -0
- package/dist/styles/palette.stylex.js +1 -0
- package/dist/styles/shadows.stylex.d.ts +10 -0
- package/dist/styles/shadows.stylex.js +1 -0
- package/dist/styles/shape.stylex.d.ts +9 -0
- package/dist/styles/shape.stylex.js +1 -0
- package/dist/styles/spacing.stylex.d.ts +14 -0
- package/dist/styles/spacing.stylex.js +3 -0
- package/dist/styles/themes.d.ts +49 -0
- package/dist/styles/themes.js +1 -0
- package/dist/styles/typography.styles.d.ts +90 -0
- package/dist/styles/typography.styles.js +8 -0
- package/dist/styles/typography.stylex.d.ts +35 -0
- package/dist/styles/typography.stylex.js +5 -0
- package/dist/styles.css +2125 -0
- package/dist/theme/index.d.ts +11 -0
- package/dist/theme/index.js +1 -0
- package/dist/theme/initialize.d.ts +4 -0
- package/dist/theme/initialize.js +1 -0
- package/dist/theme/theme-provider.d.ts +3 -0
- package/dist/theme/theme-provider.js +4 -0
- package/dist/theme/theme-root.js +1 -0
- package/dist/theme/theme-script.d.ts +3 -0
- package/dist/theme/theme-script.js +1 -0
- package/dist/theme/theme-storage.js +1 -0
- package/dist/theme/theme-tokens.js +1 -0
- package/dist/theme/theme-transition-guard.js +1 -0
- package/dist/theme/types.d.ts +25 -0
- package/dist/theme/types.js +1 -0
- package/dist/use-copy-to-clipboard.d.ts +17 -0
- package/dist/use-copy-to-clipboard.js +6 -0
- package/dist/use-elapsed.js +4 -0
- package/package.json +769 -3
- package/src/closed.ts +7 -0
- package/src/components/accordion/accordion.styles.ts +246 -0
- package/src/components/accordion/accordion.tsx +221 -0
- package/src/components/activity-feed/activity-feed.styles.ts +135 -0
- package/src/components/activity-feed/activity-feed.tsx +182 -0
- package/src/components/agent-thinking/agent-thinking.styles.ts +140 -0
- package/src/components/agent-thinking/agent-thinking.tsx +275 -0
- package/src/components/alert/alert.styles.ts +135 -0
- package/src/components/alert/alert.stylex.ts +6 -0
- package/src/components/alert/alert.tsx +123 -0
- package/src/components/alert-dialog/alert-dialog.styles.ts +29 -0
- package/src/components/alert-dialog/alert-dialog.tsx +197 -0
- package/src/components/approval-card/approval-card.styles.ts +69 -0
- package/src/components/approval-card/approval-card.tsx +379 -0
- package/src/components/area-chart/area-chart.styles.ts +14 -0
- package/src/components/area-chart/area-chart.tsx +571 -0
- package/src/components/aspect-ratio/aspect-ratio.styles.ts +20 -0
- package/src/components/aspect-ratio/aspect-ratio.tsx +43 -0
- package/src/components/attachment/attachment.styles.ts +71 -0
- package/src/components/attachment/attachment.tsx +132 -0
- package/src/components/avatar/avatar-character.styles.ts +32 -0
- package/src/components/avatar/avatar.styles.ts +118 -0
- package/src/components/avatar/avatar.tsx +262 -0
- package/src/components/badge/badge.styles.ts +116 -0
- package/src/components/badge/badge.tsx +66 -0
- package/src/components/bar-list/bar-list.styles.ts +72 -0
- package/src/components/bar-list/bar-list.tsx +157 -0
- package/src/components/blockquote/blockquote.styles.ts +26 -0
- package/src/components/blockquote/blockquote.tsx +75 -0
- package/src/components/breadcrumb/breadcrumb-link.tsx +32 -0
- package/src/components/breadcrumb/breadcrumb.styles.ts +114 -0
- package/src/components/breadcrumb/breadcrumb.tsx +137 -0
- package/src/components/button/button-colors.stylex.ts +7 -0
- package/src/components/button/button.css +16 -0
- package/src/components/button/button.css.d.ts +1 -0
- package/src/components/button/button.styles.ts +457 -0
- package/src/components/button/button.tsx +168 -0
- package/src/components/button-group/button-group.css +115 -0
- package/src/components/button-group/button-group.styles.ts +24 -0
- package/src/components/button-group/button-group.tsx +46 -0
- package/src/components/calendar/calendar-components.tsx +187 -0
- package/src/components/calendar/calendar-context.ts +16 -0
- package/src/components/calendar/calendar-dropdowns.tsx +84 -0
- package/src/components/calendar/calendar-utils.ts +67 -0
- package/src/components/calendar/calendar.styles.ts +270 -0
- package/src/components/calendar/calendar.tsx +244 -0
- package/src/components/calendar/calendar.types.ts +55 -0
- package/src/components/calendar-heatmap/calendar-heatmap.tsx +384 -0
- package/src/components/card/card.styles.ts +122 -0
- package/src/components/card/card.tsx +154 -0
- package/src/components/carousel/carousel.styles.ts +142 -0
- package/src/components/carousel/carousel.tsx +786 -0
- package/src/components/category-comparison/category-comparison.styles.ts +14 -0
- package/src/components/category-comparison/category-comparison.tsx +567 -0
- package/src/components/chart-frame/arc-path.ts +33 -0
- package/src/components/chart-frame/chart-assert.ts +47 -0
- package/src/components/chart-frame/chart-colors.ts +14 -0
- package/src/components/chart-frame/chart-crosshair.ts +129 -0
- package/src/components/chart-frame/chart-data-table.tsx +15 -0
- package/src/components/chart-frame/chart-frame.styles.ts +48 -0
- package/src/components/chart-frame/chart-frame.tsx +223 -0
- package/src/components/chart-frame/chart-hover.tsx +127 -0
- package/src/components/chart-frame/chart-loading.tsx +130 -0
- package/src/components/chart-frame/ring-graphic.tsx +100 -0
- package/src/components/chart-legend/chart-legend.styles.ts +80 -0
- package/src/components/chart-legend/chart-legend.tsx +107 -0
- package/src/components/chart-tooltip/chart-tooltip.styles.ts +71 -0
- package/src/components/chart-tooltip/chart-tooltip.tsx +94 -0
- package/src/components/checkbox/checkbox-card.styles.ts +75 -0
- package/src/components/checkbox/checkbox-card.tsx +71 -0
- package/src/components/checkbox/checkbox.styles.ts +199 -0
- package/src/components/checkbox/checkbox.tsx +104 -0
- package/src/components/checkbox-group/checkbox-group.styles.ts +11 -0
- package/src/components/checkbox-group/checkbox-group.tsx +29 -0
- package/src/components/citation/citation.styles.ts +7 -0
- package/src/components/citation/citation.tsx +30 -0
- package/src/components/code/code.styles.ts +22 -0
- package/src/components/code/code.tsx +22 -0
- package/src/components/code-block/code-block-copy.tsx +62 -0
- package/src/components/code-block/code-block-highlight.tsx +69 -0
- package/src/components/code-block/code-block.styles.ts +129 -0
- package/src/components/code-block/code-block.tsx +128 -0
- package/src/components/collapsible/collapsible.styles.ts +22 -0
- package/src/components/collapsible/collapsible.tsx +109 -0
- package/src/components/combobox/combobox-chips.styles.ts +182 -0
- package/src/components/combobox/combobox-chips.tsx +164 -0
- package/src/components/combobox/combobox-context.tsx +26 -0
- package/src/components/combobox/combobox-field.styles.ts +156 -0
- package/src/components/combobox/combobox-input.tsx +185 -0
- package/src/components/combobox/combobox-popup.styles.ts +190 -0
- package/src/components/combobox/combobox-popup.tsx +113 -0
- package/src/components/combobox/combobox-structure.tsx +138 -0
- package/src/components/combobox/combobox.tsx +162 -0
- package/src/components/combobox/combobox.types.ts +77 -0
- package/src/components/command/command-dialog.styles.ts +43 -0
- package/src/components/command/command-dialog.tsx +126 -0
- package/src/components/command/command-field.styles.ts +59 -0
- package/src/components/command/command-input.tsx +59 -0
- package/src/components/command/command-items.styles.ts +169 -0
- package/src/components/command/command-items.tsx +99 -0
- package/src/components/command/command-structure.tsx +172 -0
- package/src/components/command/command.tsx +157 -0
- package/src/components/command/command.types.ts +58 -0
- package/src/components/composer/attachment-marker.stylex.ts +4 -0
- package/src/components/composer/composer-clipboard.ts +49 -0
- package/src/components/composer/composer-context-meter.tsx +179 -0
- package/src/components/composer/composer-dictation.tsx +56 -0
- package/src/components/composer/composer-document.ts +508 -0
- package/src/components/composer/composer-editor.ts +544 -0
- package/src/components/composer/composer-history.ts +74 -0
- package/src/components/composer/composer-options.ts +51 -0
- package/src/components/composer/composer-parts.styles.ts +456 -0
- package/src/components/composer/composer-parts.tsx +245 -0
- package/src/components/composer/composer-picker.tsx +375 -0
- package/src/components/composer/composer-progress-ring.tsx +44 -0
- package/src/components/composer/composer-query.ts +52 -0
- package/src/components/composer/composer-scroll-area.tsx +29 -0
- package/src/components/composer/composer-session.ts +593 -0
- package/src/components/composer/composer-value.ts +46 -0
- package/src/components/composer/composer.css +80 -0
- package/src/components/composer/composer.styles.ts +236 -0
- package/src/components/composer/composer.tsx +581 -0
- package/src/components/composer/use-composer-editor.ts +153 -0
- package/src/components/context-menu/context-menu-items.tsx +230 -0
- package/src/components/context-menu/context-menu-utils.tsx +65 -0
- package/src/components/context-menu/context-menu.tsx +198 -0
- package/src/components/context-menu/context-menu.types.ts +97 -0
- package/src/components/conversation/conversation.styles.ts +56 -0
- package/src/components/conversation/conversation.tsx +142 -0
- package/src/components/data-table/data-table.styles.ts +63 -0
- package/src/components/data-table/data-table.tsx +723 -0
- package/src/components/data-table/grid-navigation.ts +186 -0
- package/src/components/date-picker/date-picker-date.ts +142 -0
- package/src/components/date-picker/date-picker-icon.tsx +6 -0
- package/src/components/date-picker/date-picker-state.ts +193 -0
- package/src/components/date-picker/date-picker.styles.ts +53 -0
- package/src/components/date-picker/date-picker.tsx +213 -0
- package/src/components/date-picker/date-picker.types.ts +32 -0
- package/src/components/date-range-picker/date-range-picker-date.ts +191 -0
- package/src/components/date-range-picker/date-range-picker-state.ts +235 -0
- package/src/components/date-range-picker/date-range-picker-views.tsx +144 -0
- package/src/components/date-range-picker/date-range-picker.styles.ts +80 -0
- package/src/components/date-range-picker/date-range-picker.tsx +208 -0
- package/src/components/date-range-picker/date-range-picker.types.ts +41 -0
- package/src/components/date-time-input/date-time-input.tsx +30 -0
- package/src/components/diagram/diagram-renderer.ts +35 -0
- package/src/components/diagram/diagram.css +51 -0
- package/src/components/diagram/diagram.styles.ts +130 -0
- package/src/components/diagram/diagram.tsx +238 -0
- package/src/components/dialog/dialog.styles.ts +226 -0
- package/src/components/dialog/dialog.tsx +227 -0
- package/src/components/distribution/distribution.styles.ts +14 -0
- package/src/components/distribution/distribution.tsx +450 -0
- package/src/components/drawer/drawer-affordance.styles.ts +61 -0
- package/src/components/drawer/drawer-bar.tsx +53 -0
- package/src/components/drawer/drawer-content.tsx +25 -0
- package/src/components/drawer/drawer-layout.tsx +129 -0
- package/src/components/drawer/drawer-menu.styles.ts +52 -0
- package/src/components/drawer/drawer-menu.tsx +222 -0
- package/src/components/drawer/drawer-positions.styles.ts +138 -0
- package/src/components/drawer/drawer.context.tsx +25 -0
- package/src/components/drawer/drawer.styles.ts +233 -0
- package/src/components/drawer/drawer.tsx +278 -0
- package/src/components/drawer/drawer.types.ts +85 -0
- package/src/components/empty/empty.styles.ts +118 -0
- package/src/components/empty/empty.tsx +175 -0
- package/src/components/error-state/error-state.styles.ts +97 -0
- package/src/components/error-state/error-state.tsx +151 -0
- package/src/components/field/field-context.ts +83 -0
- package/src/components/field/field.styles.ts +141 -0
- package/src/components/field/field.tsx +212 -0
- package/src/components/fieldset/fieldset.styles.ts +28 -0
- package/src/components/fieldset/fieldset.tsx +68 -0
- package/src/components/file-upload/file-upload-context.tsx +191 -0
- package/src/components/file-upload/file-upload-controls.tsx +280 -0
- package/src/components/file-upload/file-upload-item-preview.tsx +56 -0
- package/src/components/file-upload/file-upload-items.tsx +339 -0
- package/src/components/file-upload/file-upload-motion.ts +85 -0
- package/src/components/file-upload/file-upload-validation.ts +141 -0
- package/src/components/file-upload/file-upload.styles.ts +426 -0
- package/src/components/file-upload/file-upload.tsx +278 -0
- package/src/components/file-upload/file-upload.types.ts +161 -0
- package/src/components/frame/frame.styles.ts +66 -0
- package/src/components/frame/frame.tsx +126 -0
- package/src/components/funnel/funnel-flow.tsx +198 -0
- package/src/components/funnel/funnel.styles.ts +73 -0
- package/src/components/funnel/funnel.tsx +177 -0
- package/src/components/grid/grid.styles.ts +15 -0
- package/src/components/grid/grid.tsx +22 -0
- package/src/components/group/group.styles.ts +13 -0
- package/src/components/group/group.tsx +22 -0
- package/src/components/heading/heading.styles.ts +10 -0
- package/src/components/heading/heading.tsx +52 -0
- package/src/components/heatmap/heatmap-scale.tsx +92 -0
- package/src/components/heatmap/heatmap.tsx +402 -0
- package/src/components/inline/inline.styles.ts +13 -0
- package/src/components/inline/inline.tsx +22 -0
- package/src/components/inline-citation/citation-source.tsx +105 -0
- package/src/components/inline-citation/inline-citation.styles.ts +94 -0
- package/src/components/inline-citation/inline-citation.tsx +199 -0
- package/src/components/input/input.styles.ts +95 -0
- package/src/components/input/input.tsx +147 -0
- package/src/components/input-group/input-group.styles.ts +183 -0
- package/src/components/input-group/input-group.tsx +215 -0
- package/src/components/kbd/kbd.styles.ts +42 -0
- package/src/components/kbd/kbd.tsx +70 -0
- package/src/components/label/label.styles.ts +8 -0
- package/src/components/label/label.tsx +29 -0
- package/src/components/lightbox/lightbox-gallery.tsx +208 -0
- package/src/components/lightbox/lightbox.styles.ts +196 -0
- package/src/components/lightbox/lightbox.tsx +137 -0
- package/src/components/link/link.styles.ts +41 -0
- package/src/components/link/link.tsx +48 -0
- package/src/components/list/list.styles.ts +49 -0
- package/src/components/list/list.tsx +105 -0
- package/src/components/markdown/markdown.styles.ts +104 -0
- package/src/components/markdown/markdown.tsx +268 -0
- package/src/components/menu/menu-align-context.ts +8 -0
- package/src/components/menu/menu.styles.ts +281 -0
- package/src/components/menu/menu.tsx +485 -0
- package/src/components/menubar/menubar.styles.ts +97 -0
- package/src/components/menubar/menubar.tsx +89 -0
- package/src/components/message/message.styles.ts +145 -0
- package/src/components/message/message.tsx +501 -0
- package/src/components/message-scroller/message-scroller-store.ts +457 -0
- package/src/components/message-scroller/message-scroller.styles.ts +177 -0
- package/src/components/message-scroller/message-scroller.tsx +417 -0
- package/src/components/meter/meter.styles.ts +48 -0
- package/src/components/meter/meter.tsx +176 -0
- package/src/components/metric/metric.styles.ts +64 -0
- package/src/components/metric/metric.tsx +134 -0
- package/src/components/metric-trend/metric-trend.styles.ts +103 -0
- package/src/components/metric-trend/metric-trend.tsx +188 -0
- package/src/components/navigation-menu/navigation-menu.styles.ts +183 -0
- package/src/components/navigation-menu/navigation-menu.tsx +255 -0
- package/src/components/number-field/number-field-context.tsx +46 -0
- package/src/components/number-field/number-field.styles.ts +229 -0
- package/src/components/number-field/number-field.tsx +268 -0
- package/src/components/number-field/number-field.types.ts +46 -0
- package/src/components/otp-field/otp-field.styles.ts +138 -0
- package/src/components/otp-field/otp-field.tsx +174 -0
- package/src/components/overflow-list/overflow-list.styles.ts +25 -0
- package/src/components/overflow-list/overflow-list.tsx +84 -0
- package/src/components/pagination/pagination-link.tsx +96 -0
- package/src/components/pagination/pagination.styles.ts +137 -0
- package/src/components/pagination/pagination.tsx +153 -0
- package/src/components/part-to-whole/part-to-whole.styles.ts +56 -0
- package/src/components/part-to-whole/part-to-whole.tsx +329 -0
- package/src/components/popover/popover.styles.ts +177 -0
- package/src/components/popover/popover.tsx +197 -0
- package/src/components/preview-card/preview-card.styles.ts +61 -0
- package/src/components/preview-card/preview-card.tsx +94 -0
- package/src/components/progress/progress.styles.ts +82 -0
- package/src/components/progress/progress.tsx +153 -0
- package/src/components/progress-rings/progress-rings.styles.ts +65 -0
- package/src/components/progress-rings/progress-rings.tsx +163 -0
- package/src/components/property-list/property-list.styles.ts +49 -0
- package/src/components/property-list/property-list.tsx +91 -0
- package/src/components/question-card/question-card.styles.ts +106 -0
- package/src/components/question-card/question-card.tsx +525 -0
- package/src/components/radar-chart/radar-chart.tsx +281 -0
- package/src/components/radial-bars/radial-bars.tsx +197 -0
- package/src/components/radio/radio-card.tsx +57 -0
- package/src/components/radio/radio.styles.ts +57 -0
- package/src/components/radio/radio.tsx +61 -0
- package/src/components/radio-group/radio-group.tsx +29 -0
- package/src/components/sankey-chart/sankey-chart.tsx +340 -0
- package/src/components/sankey-chart/sankey-layout.ts +107 -0
- package/src/components/scatter-chart/scatter-chart.styles.ts +7 -0
- package/src/components/scatter-chart/scatter-chart.tsx +509 -0
- package/src/components/score-gauge/score-gauge.styles.ts +77 -0
- package/src/components/score-gauge/score-gauge.tsx +236 -0
- package/src/components/scroll-area/scroll-area.styles.ts +174 -0
- package/src/components/scroll-area/scroll-area.tsx +202 -0
- package/src/components/section/section.styles.ts +11 -0
- package/src/components/section/section.tsx +29 -0
- package/src/components/segmented-control/segmented-control.styles.ts +107 -0
- package/src/components/segmented-control/segmented-control.tsx +98 -0
- package/src/components/select/select.styles.ts +295 -0
- package/src/components/select/select.tsx +335 -0
- package/src/components/separator/separator.styles.ts +14 -0
- package/src/components/separator/separator.tsx +24 -0
- package/src/components/sheet/sheet-layout.tsx +92 -0
- package/src/components/sheet/sheet-positions.styles.ts +104 -0
- package/src/components/sheet/sheet.styles.ts +209 -0
- package/src/components/sheet/sheet.tsx +182 -0
- package/src/components/sheet/sheet.types.ts +67 -0
- package/src/components/skeleton/skeleton.styles.ts +52 -0
- package/src/components/skeleton/skeleton.tsx +35 -0
- package/src/components/slider/slider-context.tsx +414 -0
- package/src/components/slider/slider-default-anatomy.tsx +71 -0
- package/src/components/slider/slider-ref-utils.ts +16 -0
- package/src/components/slider/slider-slot.ts +7 -0
- package/src/components/slider/slider.styles.ts +368 -0
- package/src/components/slider/slider.tsx +303 -0
- package/src/components/slider/slider.types.ts +57 -0
- package/src/components/sources/sources.styles.ts +105 -0
- package/src/components/sources/sources.tsx +150 -0
- package/src/components/spacer/spacer.styles.ts +11 -0
- package/src/components/spacer/spacer.tsx +25 -0
- package/src/components/spinner/spinner.styles.ts +231 -0
- package/src/components/spinner/spinner.tsx +153 -0
- package/src/components/stack/stack.styles.ts +37 -0
- package/src/components/stack/stack.tsx +34 -0
- package/src/components/status-dot/status-dot.styles.ts +27 -0
- package/src/components/status-dot/status-dot.tsx +55 -0
- package/src/components/stepper/stepper.styles.ts +564 -0
- package/src/components/stepper/stepper.tsx +349 -0
- package/src/components/streaming-text/streaming-text-words.tsx +275 -0
- package/src/components/streaming-text/streaming-text.styles.ts +166 -0
- package/src/components/streaming-text/streaming-text.tsx +299 -0
- package/src/components/suggestion/suggestion.styles.ts +55 -0
- package/src/components/suggestion/suggestion.tsx +125 -0
- package/src/components/switch/switch.styles.ts +195 -0
- package/src/components/switch/switch.tsx +69 -0
- package/src/components/table/table.styles.ts +198 -0
- package/src/components/table/table.tsx +290 -0
- package/src/components/tabs/tabs.styles.ts +245 -0
- package/src/components/tabs/tabs.tsx +186 -0
- package/src/components/task-list/task-list.styles.ts +82 -0
- package/src/components/task-list/task-list.tsx +430 -0
- package/src/components/terminal/ansi.ts +86 -0
- package/src/components/terminal/terminal.styles.ts +20 -0
- package/src/components/terminal/terminal.tsx +339 -0
- package/src/components/text/text.styles.ts +8 -0
- package/src/components/text/text.tsx +47 -0
- package/src/components/textarea/textarea.styles.ts +85 -0
- package/src/components/textarea/textarea.tsx +163 -0
- package/src/components/thumbnail/thumbnail.styles.ts +33 -0
- package/src/components/thumbnail/thumbnail.tsx +63 -0
- package/src/components/time-input/time-input.tsx +30 -0
- package/src/components/time-series/time-format.ts +172 -0
- package/src/components/time-series/time-series.styles.ts +18 -0
- package/src/components/time-series/time-series.tsx +521 -0
- package/src/components/timestamp/timestamp.styles.ts +9 -0
- package/src/components/timestamp/timestamp.tsx +162 -0
- package/src/components/toast/toast-anchored.styles.ts +146 -0
- package/src/components/toast/toast-animation.styles.ts +64 -0
- package/src/components/toast/toast-icons.tsx +58 -0
- package/src/components/toast/toast-stacked.styles.ts +129 -0
- package/src/components/toast/toast-utils.ts +53 -0
- package/src/components/toast/toast-views.tsx +223 -0
- package/src/components/toast/toast.styles.ts +198 -0
- package/src/components/toast/toast.tsx +59 -0
- package/src/components/toast/toast.types.ts +41 -0
- package/src/components/toggle/toggle-colors.stylex.ts +27 -0
- package/src/components/toggle/toggle.styles.ts +267 -0
- package/src/components/toggle/toggle.tsx +193 -0
- package/src/components/token/token.styles.ts +135 -0
- package/src/components/token/token.tsx +208 -0
- package/src/components/tool-call/tool-call-group.tsx +147 -0
- package/src/components/tool-call/tool-call.styles.ts +146 -0
- package/src/components/tool-call/tool-call.tsx +324 -0
- package/src/components/toolbar/toolbar-context.ts +6 -0
- package/src/components/toolbar/toolbar.styles.ts +120 -0
- package/src/components/toolbar/toolbar.tsx +219 -0
- package/src/components/tooltip/tooltip.styles.ts +104 -0
- package/src/components/tooltip/tooltip.tsx +106 -0
- package/src/components/tree/tree.styles.ts +133 -0
- package/src/components/tree/tree.tsx +862 -0
- package/src/components/visually-hidden/visually-hidden.styles.ts +15 -0
- package/src/components/visually-hidden/visually-hidden.tsx +36 -0
- package/src/control-label.tsx +48 -0
- package/src/copy-button.tsx +38 -0
- package/src/form.ts +44 -0
- package/src/icon-masks.stylex.ts +7 -0
- package/src/icons.ts +43 -0
- package/src/index.ts +1392 -0
- package/src/loading-indicator.tsx +45 -0
- package/src/motion.tsx +124 -0
- package/src/ref-utils.ts +27 -0
- package/src/render-utils.ts +35 -0
- package/src/styles/application-structure.stylex.ts +5 -0
- package/src/styles/colors.stylex.ts +64 -0
- package/src/styles/conditions.stylex.ts +10 -0
- package/src/styles/dimensions.stylex.ts +17 -0
- package/src/styles/floating-item-colors.stylex.ts +22 -0
- package/src/styles/fonts.stylex.ts +9 -0
- package/src/styles/interaction.stylex.ts +34 -0
- package/src/styles/motion.stylex.ts +28 -0
- package/src/styles/overlay-layers.styles.ts +26 -0
- package/src/styles/palette.stylex.ts +28 -0
- package/src/styles/shadows.stylex.ts +14 -0
- package/src/styles/shape.stylex.ts +11 -0
- package/src/styles/spacing.stylex.ts +18 -0
- package/src/styles/themes.ts +57 -0
- package/src/styles/typography.styles.ts +116 -0
- package/src/styles/typography.stylex.ts +44 -0
- package/src/theme/index.ts +25 -0
- package/src/theme/initialize.ts +31 -0
- package/src/theme/theme-provider.tsx +189 -0
- package/src/theme/theme-root.ts +37 -0
- package/src/theme/theme-script.tsx +35 -0
- package/src/theme/theme-storage.ts +256 -0
- package/src/theme/theme-tokens.ts +11 -0
- package/src/theme/theme-transition-guard.ts +102 -0
- package/src/theme/types.ts +33 -0
- package/src/use-copy-to-clipboard.ts +57 -0
- package/src/use-elapsed.ts +40 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { type ComponentProps, type MouseEvent, type ReactElement, type ReactNode } from "react";
|
|
2
|
+
import { type ComposerEditorController, type ComposerItemValue, type ComposerValue, type UseComposerEditorOptions } from "./use-composer-editor";
|
|
3
|
+
type ComposerEditorOptions = Omit<UseComposerEditorOptions, "value" | "onValueChange"> & {
|
|
4
|
+
value?: ComposerValue;
|
|
5
|
+
defaultValue?: ComposerValue;
|
|
6
|
+
onValueChange?: UseComposerEditorOptions["onValueChange"];
|
|
7
|
+
name?: string;
|
|
8
|
+
getSuggestionsAnnouncement?: (count: number) => string;
|
|
9
|
+
};
|
|
10
|
+
type ComposerContextValue = Omit<ComposerEditorController, "reset"> & {
|
|
11
|
+
reset: () => void;
|
|
12
|
+
};
|
|
13
|
+
declare function useComposerEditorContext(): ComposerContextValue | null;
|
|
14
|
+
declare function useComposerContext(): Pick<ComposerContextValue, "value" | "isEmpty" | "canSubmit" | "disabled" | "readOnly" | "status" | "submit" | "insertTrigger" | "reset">;
|
|
15
|
+
declare function ComposerEditorProvider({ children, value, defaultValue, onValueChange, getSuggestionsAnnouncement, ...options }: ComposerEditorOptions & {
|
|
16
|
+
children: ReactNode;
|
|
17
|
+
}): ReactElement;
|
|
18
|
+
interface MountedOption {
|
|
19
|
+
disabled: boolean;
|
|
20
|
+
element: HTMLElement;
|
|
21
|
+
}
|
|
22
|
+
interface SuggestionContext {
|
|
23
|
+
highlightedId: string | undefined;
|
|
24
|
+
highlightItem: (item: ComposerItemValue) => void;
|
|
25
|
+
inputProps: ComponentProps<"div">;
|
|
26
|
+
items: readonly ComposerItemValue[];
|
|
27
|
+
listId: string;
|
|
28
|
+
registerItem: (id: string, option: MountedOption | null) => void;
|
|
29
|
+
registerList: (element: HTMLElement | null) => void;
|
|
30
|
+
selectItem: (item: ComposerItemValue) => void;
|
|
31
|
+
}
|
|
32
|
+
declare function useComposerSuggestionsContext(): SuggestionContext | null;
|
|
33
|
+
declare function useComposerItem(value: ComposerItemValue | undefined, disabled: boolean): {
|
|
34
|
+
highlighted: boolean;
|
|
35
|
+
props: {
|
|
36
|
+
onClick(): void;
|
|
37
|
+
onMouseDown(event: MouseEvent<HTMLButtonElement>): void;
|
|
38
|
+
onPointerMove(): void;
|
|
39
|
+
"aria-disabled": true | undefined;
|
|
40
|
+
"aria-selected": boolean | undefined;
|
|
41
|
+
"data-disabled": string | undefined;
|
|
42
|
+
"data-highlighted": string | undefined;
|
|
43
|
+
id: string | undefined;
|
|
44
|
+
role: "option" | undefined;
|
|
45
|
+
tabIndex: number | undefined;
|
|
46
|
+
};
|
|
47
|
+
ref: (element: HTMLElement | null) => void;
|
|
48
|
+
};
|
|
49
|
+
declare function focusComposerInput(event: MouseEvent<HTMLFormElement>, preventDefault: boolean): void;
|
|
50
|
+
declare function bindInputLayout(input: HTMLElement | null): (() => void) | undefined;
|
|
51
|
+
declare function useComposerInputLayout(): {
|
|
52
|
+
inputRef: typeof bindInputLayout;
|
|
53
|
+
};
|
|
54
|
+
export { readToken as readComposerToken } from "./composer-document";
|
|
55
|
+
export { type ComposerChangeDetails, type ComposerItemValue, type ComposerPart, type ComposerQuery, type ComposerTokenPart, type ComposerTrigger, type ComposerTriggerState, type ComposerValue, getComposerText, useComposerFilter, } from "./use-composer-editor";
|
|
56
|
+
export type { ComposerEditorOptions };
|
|
57
|
+
export { ComposerEditorProvider, focusComposerInput, useComposerContext, useComposerEditorContext, useComposerInputLayout, useComposerItem, useComposerSuggestionsContext, };
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
"use client";import{Popover}from"@base-ui/react/popover";import{props as stylexProps}from"@stylexjs/stylex";import{createContext,createElement,useCallback,useContext,useId,useState}from"react";import{visuallyHiddenStyles}from"../visually-hidden/visually-hidden.styles";import{useComposerEditor}from"./use-composer-editor";const EditorContext=createContext(null);function useComposerEditorContext(){return useContext(EditorContext);}function useComposerContext(){const editor=useComposerEditorContext();if(!editor){throw new Error("useComposerContext must be used within Composer.");}return{canSubmit:editor.canSubmit,disabled:editor.disabled,insertTrigger:editor.insertTrigger,isEmpty:editor.isEmpty,readOnly:editor.readOnly,reset:editor.reset,status:editor.status,submit:editor.submit,value:editor.value};}const EMPTY=[];function ComposerEditorProvider({children,value,defaultValue=EMPTY,onValueChange,getSuggestionsAnnouncement,...options}){const[local,setLocal]=useState(defaultValue);const editor=useComposerEditor({...options,onValueChange(next,details){if(value===undefined){setLocal(next);}onValueChange?.(next,details);},value:value??local},defaultValue);return createElement(EditorContext,{value:{...editor,reset:()=>editor.reset(defaultValue)}},createElement(Suggestions,{...editor.suggestions,getSuggestionsAnnouncement},children));}const OptionsContext=createContext(null);function useComposerSuggestionsContext(){return useContext(OptionsContext);}function announcement(count){return`${count} suggestion${count===1?"":"s"} available. Use the up and down arrow keys to navigate.`;}function keyboardAllowed(event,open){return open&&!event.defaultPrevented&&!event.nativeEvent.isComposing&&event.nativeEvent.keyCode!==229;}function Suggestions({children,enabled,items,open,onOpenChange,onItemSelect,submitOnEmptySuggestions,getSuggestionsAnnouncement=announcement}){const listId=useId();const[list,registerList]=useState(null);const[mounted,setMounted]=useState(()=>new Map());const[chosen,choose]=useState();const registerItem=useCallback((id,option)=>{setMounted(old=>{const next=new Map(old);if(option){next.set(id,option);}else{next.delete(id);}return next;});},[]);const available=items.filter(item=>!item.disabled&&mounted.has(item.id)&&!mounted.get(item.id)?.disabled);const active=available.find(item=>item.id===chosen)??available[0];function close(){choose(undefined);onOpenChange(false);}function select(item){const current=available.find(candidate=>candidate.id===item.id);if(!(open&¤t)){return;}onItemSelect(current);close();}function step(event,delta){event.preventDefault();const index=available.indexOf(active);const next=available[(index+delta+available.length)%available.length];if(!next){return;}choose(next.id);mounted.get(next.id)?.element.scrollIntoView({block:"nearest"});}function enter(event){if(event.shiftKey){close();return;}if(!available.length&&submitOnEmptySuggestions){return;}event.preventDefault();if(active){select(active);}}const commands={arrowdown:event=>step(event,1),arrowup:event=>step(event,-1),enter,escape(event){event.preventDefault();event.stopPropagation();close();},tab:close};const inputProps=listInputProps(enabled,open,list,active?mounted.get(active.id)?.element:undefined);return createElement(OptionsContext,{value:{highlightedId:active?.id,highlightItem:item=>choose(item.id),inputProps:{...inputProps,onKeyDown(event){if(keyboardAllowed(event,open)){commands[event.key.toLowerCase()]?.(event);}}},items,listId,registerItem,registerList,selectItem:select}},createElement(Popover.Root,{onOpenChange(next){if(!next){choose(undefined);}onOpenChange(next);},open},children,createElement("span",{"aria-atomic":true,role:"status",...stylexProps(visuallyHiddenStyles.root)},open&&list&&available.length>0?getSuggestionsAnnouncement(available.length):"")));}function listInputProps(enabled,open,list,active){return{"aria-activedescendant":open&&list?active?.id||undefined:undefined,"aria-autocomplete":enabled?"list":undefined,"aria-controls":open&&list?list.id:undefined,"aria-haspopup":enabled?"listbox":undefined};}function useComposerItem(value,disabled){const context=useComposerSuggestionsContext();const register=context?.registerItem;const id=value?.id;const ref=useCallback(element=>{if(id!==undefined){register?.(id,element?{disabled,element}:null);}},[id,register,disabled]);const highlighted=id!==undefined&&context?.highlightedId===id;return{highlighted,props:{...optionAttributes(context,id,disabled,highlighted),onClick(){if(value&&!disabled){context?.selectItem(value);}},onMouseDown(event){if(context){event.preventDefault();}},onPointerMove(){if(value&&!disabled){context?.highlightItem(value);}}},ref};}function optionAttributes(context,id,disabled,highlighted){return{"aria-disabled":disabled||undefined,"aria-selected":context?highlighted:undefined,"data-disabled":disabled?"":undefined,"data-highlighted":highlighted?"":undefined,id:context&&id!==undefined?`${context.listId}-${encodeURIComponent(id)}`:undefined,role:context?"option":undefined,tabIndex:context?-1:undefined};}// A press belongs to the draft only when no descendant owns that interaction.
|
|
2
|
+
const POINTER_OWNERS=["a","button","input","select","textarea","label","summary","[contenteditable]","[data-slot='composer-input']","[role='button']","[role='combobox']","[role='menuitem']","[tabindex]:not([tabindex='-1'])"].join(",");function isFrameSurface(frame,target){if(!(target instanceof Element)){return false;}// React also bubbles presses from portalled Composer content to the frame.
|
|
3
|
+
if(!frame.contains(target)){return true;}let node=target;while(node&&node!==frame){if(node.matches(POINTER_OWNERS)){return false;}node=node.parentElement;}return node===frame;}function focusComposerInput(event,preventDefault){if(event.defaultPrevented||!isFrameSurface(event.currentTarget,event.target)){return;}const draft=event.currentTarget.querySelector('[data-slot="composer-input"]');if(draft?.matches(":not(:disabled):not([aria-disabled='true'])")){if(preventDefault){event.preventDefault();}draft.focus();}}function measureLayout({input,scroll,frame}){const computed=getComputedStyle(input);const line=Number.parseFloat(computed.lineHeight)||Number.parseFloat(computed.fontSize)*1.2;const padding=Number.parseFloat(computed.paddingTop)+Number.parseFloat(computed.paddingBottom);for(const[property,value]of[["--composer-line-height",`${line}px`],["--composer-input-padding",`${padding}px`]]){if(scroll.style.getPropertyValue(property)!==value){scroll.style.setProperty(property,value);}}if(!frame){return;}frame.removeAttribute("data-multiline");if(frame.dataset.layout!=="adaptive"||!frame.querySelector('[data-slot="composer-action-group"]')){return;}const rows=Number.parseFloat(computed.getPropertyValue("--composer-min-rows"));frame.toggleAttribute("data-multiline",rows>1||intrinsicHeight(input)>line*1.5+padding);}function intrinsicHeight(input){const value=input.style.getPropertyValue("min-height");const priority=input.style.getPropertyPriority("min-height");input.style.setProperty("min-height","0px","important");const height=input.scrollHeight;if(value){input.style.setProperty("min-height",value,priority);}else{input.style.removeProperty("min-height");}return height;}function bindInputLayout(input){const scroll=input?.closest('[data-slot="composer-scroll-area"]');if(!(input&&scroll)){return;}const frame=scroll.closest('[data-slot="composer"]');const layout={frame,input,scroll};const doc=input.ownerDocument;let pending;let watched=[];function schedule(){if(pending!==undefined){return;}pending=requestAnimationFrame(()=>{pending=undefined;measure();});}const resize=new ResizeObserver(schedule);const mutations=new MutationObserver(schedule);function measure(){const groups=Array.from(frame?.querySelectorAll(':scope > [data-slot="composer-actions"] > [data-slot="composer-action-group"]')??[]);const targets=[input,...groups];if(frame){targets.push(frame);}if(!sameElements(watched,targets)){resize.disconnect();for(const target of targets){resize.observe(target);}watched=targets;}measureLayout(layout);mutations.takeRecords();}measure();if(frame){mutations.observe(frame,{attributes:true,characterData:true,childList:true,subtree:true});}input.addEventListener("input",schedule);window.addEventListener("resize",schedule);doc.fonts.addEventListener("loadingdone",schedule);return()=>{if(pending!==undefined){cancelAnimationFrame(pending);}resize.disconnect();mutations.disconnect();input.removeEventListener("input",schedule);window.removeEventListener("resize",schedule);doc.fonts.removeEventListener("loadingdone",schedule);};}function sameElements(a,b){return a.length===b.length&&a.every((element,index)=>element===b[index]);}function useComposerInputLayout(){return{inputRef:bindInputLayout};}// biome-ignore lint/performance/noBarrelFile: This module assembles the editor controller and its draft helpers.
|
|
4
|
+
export{readToken as readComposerToken}from"./composer-document";export{getComposerText,useComposerFilter}from"./use-composer-editor";export{ComposerEditorProvider,focusComposerInput,useComposerContext,useComposerEditorContext,useComposerInputLayout,useComposerItem,useComposerSuggestionsContext};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{equalValue}from"./composer-document";const GROUPABLE=new Set(["insertText","deleteContentBackward","deleteContentForward"]);function adjacent(a,b){return a?.anchor===b?.anchor&&a?.focus===b?.focus;}/** A cursor over accepted transactions. New edits truncate the redo branch. */export class ComposerHistory{entries=[];cursor=0;reset(value){this.entries=[{input:"",selection:null,time:0,value}];this.cursor=0;}matches(value){return equalValue(this.entries[this.cursor]?.value??[],value);}record(value,before,after,input){const previous=this.entries[this.cursor];if(!previous||equalValue(previous.value,value)){return;}const time=Date.now();const group=GROUPABLE.has(input)&&previous.input===input&&time-previous.time<1000&&adjacent(previous.selection,before);this.entries.length=this.cursor+1;if(group){this.entries[this.cursor]={input,selection:after,time,value};}else{previous.selection=before;this.entries.push({input,selection:after,time,value});this.cursor+=1;}if(this.entries.length>101){this.entries.shift();this.cursor-=1;}}move(direction,selection){const next=this.entries[this.cursor+direction];if(!next){return;}this.entries[this.cursor].selection=selection;this.cursor+=direction;next.input="";return next;}}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { ComponentProps, RefObject } from "react";
|
|
2
|
+
import type { ComposerItemValue, ComposerQuery, ComposerTrigger, ComposerValue } from "./composer-value";
|
|
3
|
+
export interface ComposerChangeDetails {
|
|
4
|
+
reason: "input" | "selection" | "history" | "reset";
|
|
5
|
+
}
|
|
6
|
+
export interface UseComposerEditorOptions {
|
|
7
|
+
allowEmpty?: boolean;
|
|
8
|
+
disabled?: boolean;
|
|
9
|
+
onAction?: (item: ComposerItemValue, query: ComposerQuery) => void;
|
|
10
|
+
onQueryChange?: (query: ComposerQuery | null) => void;
|
|
11
|
+
onSubmit?: (value: ComposerValue) => void;
|
|
12
|
+
onValueChange: (value: ComposerValue, details: ComposerChangeDetails) => void;
|
|
13
|
+
readOnly?: boolean;
|
|
14
|
+
submitDisabled?: boolean;
|
|
15
|
+
submitOnEmptySuggestions?: boolean;
|
|
16
|
+
submitOnEnter?: "desktop" | "always" | "never";
|
|
17
|
+
triggers?: readonly ComposerTrigger[];
|
|
18
|
+
value: ComposerValue;
|
|
19
|
+
}
|
|
20
|
+
export interface ComposerEditorController {
|
|
21
|
+
canSubmit: boolean;
|
|
22
|
+
disabled: boolean;
|
|
23
|
+
formProps: Pick<ComponentProps<"form">, "onSubmit">;
|
|
24
|
+
inputProps: ComponentProps<"div">;
|
|
25
|
+
insertTrigger: (character: string) => void;
|
|
26
|
+
isComposing: boolean;
|
|
27
|
+
isEmpty: boolean;
|
|
28
|
+
isTextarea: boolean;
|
|
29
|
+
readOnly: boolean;
|
|
30
|
+
reset: (value?: ComposerValue) => void;
|
|
31
|
+
rootRef: RefObject<HTMLFormElement | null>;
|
|
32
|
+
status: "ready" | "loading" | "error";
|
|
33
|
+
submit: () => void;
|
|
34
|
+
suggestions: {
|
|
35
|
+
enabled: boolean;
|
|
36
|
+
submitOnEmptySuggestions: boolean;
|
|
37
|
+
items: readonly ComposerItemValue[];
|
|
38
|
+
open: boolean;
|
|
39
|
+
onOpenChange: (open: boolean) => void;
|
|
40
|
+
onItemSelect: (item: ComposerItemValue) => void;
|
|
41
|
+
};
|
|
42
|
+
syncRootRef: (root: HTMLFormElement | null) => void;
|
|
43
|
+
tokenHosts: readonly HTMLSpanElement[];
|
|
44
|
+
value: ComposerValue;
|
|
45
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { ComponentPropsWithRef, ReactNode } from "react";
|
|
2
|
+
import type { Closed } from "../../closed";
|
|
3
|
+
type Part<T> = Omit<Closed<T>, "children" | "data-slot">;
|
|
4
|
+
export type ComposerAttachmentsProps = Part<ComponentPropsWithRef<"ul">> & {
|
|
5
|
+
"aria-label"?: string;
|
|
6
|
+
children: ReactNode;
|
|
7
|
+
};
|
|
8
|
+
/** The tray of files above the composer input. */
|
|
9
|
+
export declare function ComposerAttachments({ "aria-label": ariaLabel, children, ref, ...rest }: ComposerAttachmentsProps): import("react").JSX.Element;
|
|
10
|
+
export type ComposerAttachmentProps = Part<ComponentPropsWithRef<"li">> & {
|
|
11
|
+
/** Opens the file in a new tab. */
|
|
12
|
+
href?: string;
|
|
13
|
+
name: string;
|
|
14
|
+
/** Opens the file in place, such as an image in a Lightbox. */
|
|
15
|
+
onOpen?: () => void;
|
|
16
|
+
onRemove?: () => void;
|
|
17
|
+
/** An image URL; files without one show their extension. */
|
|
18
|
+
preview?: string;
|
|
19
|
+
/** Upload share from 0 to 100; the tile dims until it reaches 100. */
|
|
20
|
+
progress?: number;
|
|
21
|
+
};
|
|
22
|
+
/** One file in the tray: a 56px tile with a thumbnail or the file's type. */
|
|
23
|
+
export declare function ComposerAttachment({ href, name, onOpen, onRemove, preview, progress, ref, ...rest }: ComposerAttachmentProps): import("react").JSX.Element;
|
|
24
|
+
export type ComposerStatusBarProps = Part<ComponentPropsWithRef<"div">> & {
|
|
25
|
+
children: ReactNode;
|
|
26
|
+
};
|
|
27
|
+
/** A quiet row under the composer: where the agent works and how much room is left. */
|
|
28
|
+
export declare function ComposerStatusBar({ children, ref, ...rest }: ComposerStatusBarProps): import("react").JSX.Element;
|
|
29
|
+
export type ComposerStatusBarGroupProps = ComposerStatusBarProps;
|
|
30
|
+
export declare function ComposerStatusBarGroup({ children, ref, ...rest }: ComposerStatusBarGroupProps): import("react").JSX.Element;
|
|
31
|
+
export type ComposerStatusItemProps = Part<ComponentPropsWithRef<"button">> & {
|
|
32
|
+
children: ReactNode;
|
|
33
|
+
};
|
|
34
|
+
/** One fact in the status bar, such as the branch; it can open a menu. */
|
|
35
|
+
export declare function ComposerStatusItem({ children, ref, type, ...rest }: ComposerStatusItemProps): import("react").JSX.Element;
|
|
36
|
+
export {};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{props}from"@stylexjs/stylex";import{IconFile,IconX}from"../../icons";import{typeRoles}from"../../styles/typography.styles";import{VisuallyHidden}from"../visually-hidden/visually-hidden";import{attachmentMarker}from"./attachment-marker.stylex";import{composerPartStyles as styles}from"./composer-parts.styles";import{ProgressRing}from"./composer-progress-ring";import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";/** The tray of files above the composer input. */export function ComposerAttachments({"aria-label":ariaLabel="Attachments",children,ref,...rest}){return/*#__PURE__*/_jsx("ul",{...rest,"aria-label":ariaLabel,"data-slot":"composer-attachments",ref:ref,...props(styles.attachments),children:children});}function extensionOf(name){const dot=name.lastIndexOf(".");return dot>0?name.slice(dot+1,dot+5):"file";}function RemoveButton({name,onRemove}){if(!onRemove){return null;}return/*#__PURE__*/_jsx("button",{"aria-label":`Remove ${name}`,onClick:onRemove,type:"button",...props(styles.attachmentRemove),children:/*#__PURE__*/_jsx(IconX,{"aria-hidden":"true",size:14,stroke:2.25})});}// Covers the tile, so the whole tile opens the file. Remove stays above it.
|
|
2
|
+
function OpenTarget({href,label,onOpen}){if(onOpen){return/*#__PURE__*/_jsx("button",{"data-slot":"composer-attachment-open",onClick:onOpen,type:"button",...props(styles.attachmentOpen),children:/*#__PURE__*/_jsx(VisuallyHidden,{children:label})});}if(href){return/*#__PURE__*/_jsx("a",{"data-slot":"composer-attachment-open",href:href,rel:"noopener noreferrer",target:"_blank",...props(styles.attachmentOpen),children:/*#__PURE__*/_jsxs(VisuallyHidden,{children:[label,", opens in a new tab"]})});}return/*#__PURE__*/_jsx(VisuallyHidden,{children:label});}// A file shows its glyph and type; while uploading, a ring and its share.
|
|
3
|
+
function FileFace({name,progress}){const uploading=progress!==undefined&&progress<100;return/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx("span",{"aria-hidden":"true",...props(styles.attachmentGlyph),children:uploading?/*#__PURE__*/_jsx(ProgressRing,{share:progress/100}):/*#__PURE__*/_jsx(IconFile,{size:16,stroke:1.75})}),/*#__PURE__*/_jsx("span",{"aria-hidden":"true",...props(styles.attachmentMeta),children:uploading?`${Math.round(progress)}%`:extensionOf(name).toUpperCase()})]});}/** One file in the tray: a 56px tile with a thumbnail or the file's type. */export function ComposerAttachment({href,name,onOpen,onRemove,preview,progress,ref,...rest}){const uploading=progress!==undefined&&progress<100;const label=uploading?`${name}, uploading ${Math.round(progress)}%`:name;return/*#__PURE__*/_jsxs("li",{...rest,"data-slot":"composer-attachment",ref:ref,title:name,...props(attachmentMarker,styles.attachment,Boolean(href||onOpen)&&styles.attachmentOpenable),children:[preview?/*#__PURE__*/// biome-ignore lint/performance/noImgElement: Keep this UI component framework-neutral instead of coupling it to Next.js image optimization.
|
|
4
|
+
_jsx("img",{alt:"",height:56,src:preview,width:56,...props(styles.attachmentImage)}):/*#__PURE__*/_jsx(FileFace,{name:name,progress:progress}),/*#__PURE__*/_jsx(OpenTarget,{href:href,label:label,onOpen:onOpen}),/*#__PURE__*/_jsx(RemoveButton,{name:name,onRemove:onRemove})]});}/** A quiet row under the composer: where the agent works and how much room is left. */export function ComposerStatusBar({children,ref,...rest}){return/*#__PURE__*/_jsx("div",{...rest,"data-slot":"composer-status-bar",ref:ref,...props(styles.statusBar,typeRoles.ui),children:children});}export function ComposerStatusBarGroup({children,ref,...rest}){return/*#__PURE__*/_jsx("div",{...rest,"data-slot":"composer-status-bar-group",ref:ref,...props(styles.statusBarGroup),children:children});}/** One fact in the status bar, such as the branch; it can open a menu. */export function ComposerStatusItem({children,ref,type="button",...rest}){return/*#__PURE__*/_jsx("button",{...rest,"data-slot":"composer-status-item",ref:ref,type:type,...props(styles.statusItem),children:children});}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{create,keyframes,when}from"@stylexjs/stylex";import"../../styles/colors.stylex";import{colors}from"../../styles/colors.stylex";import"../../styles/conditions.stylex";import{conditions}from"../../styles/conditions.stylex";import"../../styles/dimensions.stylex";import{controlSize,glyphSize}from"../../styles/dimensions.stylex";import"../../styles/interaction.stylex";import{borderWidth}from"../../styles/interaction.stylex";import"../../styles/motion.stylex";import{duration,easing}from"../../styles/motion.stylex";import"../../styles/shape.stylex";import{shape}from"../../styles/shape.stylex";import"../../styles/spacing.stylex";import{space}from"../../styles/spacing.stylex";import"../../styles/typography.stylex";import{fontSize,fontWeight,lineHeight}from"../../styles/typography.stylex";import"./attachment-marker.stylex";import{attachmentMarker}from"./attachment-marker.stylex";// The light's angle around the composer: one slow lap.
|
|
2
|
+
const lap="x10pjk1s-B";// The recording ring grows a little and fades, then comes back.
|
|
3
|
+
const breathe="xbgr7u9-B";const WORKING=":is([data-working] > *)";// The bands sit deeper, inside the glow's rings.
|
|
4
|
+
const WORKING_BAND=":is([data-working] *)";export const composerPartStyles={attachment:{kVAM5u:"x155xxfk",kaIpWk:"x2b34ud",ksu8eU:"x1y0btm7",kMzoRj:"x1cdonsl",kB7OPa:"x9f619",kMwMTN:"x125omll",k1xSpc:"x78zum5",kXwgrk:"xdt5ytf",kmuXW:"x2lah0s",kZKoxP:"xvx1h12",kjj79g:"x1qughib",kmVPX3:"x1btfdvn",kVAEAm:"x1n2onr6",kzqmXN:"x68t8f4",$$css:true},attachmentGlyph:{k1xSpc:"x78zum5",kZKoxP:"x1a05dn3",kzqmXN:"xmpb2e4",$$css:true},attachmentImage:{kaIpWk:"x1am189j",k1xSpc:"x1lliihq",kZKoxP:"x5yr21d",kpwlN0:"x10a8y8t",kVIFPx:"xl1xv1r",kVAEAm:"x10l6tqk",kzqmXN:"xh8yej3",$$css:true},attachmentMeta:{kGuDYH:"x1ws78te",kcqcaj:"xss6m8b",k63SB2:"xuku2lm",kLWn49:"x76y1r9",$$css:true},attachmentOpen:{kysU6D:"xjyslct",kWkggS:"xjbqb8w",kaIpWk:"x1am189j",kMzoRj:"xc342km",kkrTdU:"x1ypdohk",kpwlN0:"x10a8y8t",kjBf7l:"x4dprnk x1uczgqu",kInvED:"x4jx5dk",k3XXqK:"x9v5kkp x1t137rt",kMeerF:"x1vhx2qj",kmVPX3:"x1717udv",kVAEAm:"x10l6tqk",$$css:true},attachmentOpenable:{kVAM5u:"xgshqkf x155xxfk",$$css:true},attachmentRemove:{kGNEyG:"x6s0dn4",k6WDB:"xpivpjv",kWkggS:"xwdq16j",kaIpWk:"x16rqkct",kMzoRj:"xc342km",kMwMTN:"xzr6qem x125omll",kkrTdU:"x1ypdohk",k1xSpc:"x3nfvp2",kZKoxP:"xud2w1",k87sOh:"x1v5m63d",kt4wiu:"x1vld3ni",kjj79g:"xl56j7k",kSiTet:"x9nm1xz x10usv9n x1s37bwl x1hc1fzr",kjBf7l:"x4dprnk x1uczgqu",kInvED:"x1wfwxd8",k3XXqK:"xaatb59",kMeerF:"x1vhx2qj",kmVPX3:"x1717udv",kVAEAm:"x10l6tqk",kIyJzY:"x1e471i8 x1j5v3x2",k1ekBW:"x1mz1wvm",kAMwcw:"xvhdtae",kzqmXN:"x1sxroq0",$$css:true},attachments:{k1xSpc:"x78zum5",kwnvtZ:"x1a02dak",kOIVth:"xp4ho6d",kB88ic:"xe8uvvx",kogj98:"x1ghz6dp",kLKAdn:"xvdlrvc",kg3NbH:"xb5xqfq",$$css:true},contextCard:{k1xSpc:"x78zum5",kXwgrk:"xdt5ytf",kOIVth:"xiw8qbs",kzqmXN:"x1e67fm3",ks0D6T:"x193iq5w",$$css:true},contextCost:{kMwMTN:"x125omll",$$css:true},contextLabel:{kMwMTN:"x125omll",$$css:true},contextRow:{kGNEyG:"x1pha0wt",k1xSpc:"x78zum5",kOIVth:"xiw8qbs",kjj79g:"x1qughib",$$css:true},contextRows:{k1xSpc:"x78zum5",kXwgrk:"xdt5ytf",kOIVth:"x13hh4mm",kogj98:"x1ghz6dp",$$css:true},contextTitle:{k63SB2:"xuku2lm",$$css:true},contextTotal:{kLZC3w:"xcadu6e",kPef9Z:"x13fuv20",kEafiO:"x1vfp6xi",k63SB2:"xuku2lm",kLKAdn:"xyfr97a",$$css:true},contextValue:{kcqcaj:"xss6m8b",kogj98:"x1ghz6dp",khDVqt:"xuxw1ft",$$css:true},dictation:{kdFwpH:"xhktotb",kh3gPk:"x1ret9bn",kVUETb:"x13ee8us",kFguJn:"ximzmp x10dsxo9 xlkbn08",kYqdJW:"x1mb4bye",kXtpa:"x1npql3u",kUfP38:"x2coff9",kbwMcY:"x86avzo",kPGmMm:"x1lewlws",k5JduY:"x1s928wv",kv0HGH:"x16gvljb",kypkao:"xlu6zno xmf22ne",kwXMNM:"x1j6awrg",kMwMTN:"xhifqdv",k1xSpc:"x78zum5",kVAEAm:"x1n2onr6",$$css:true},glow:{kpwlN0:"x10a8y8t",kSiTet:"xgqk1za xg01cxk",kfzvcC:"x47corl",kVAEAm:"x10l6tqk",kIyJzY:"x1e471i8 x18kz1lc",k1ekBW:"x19991ni",$$css:true},glowBand:{k44tkh:"xeaay5l",ko0y90:"xa4qsjk",kKVMdj:"x1tzfbnl x1qsy7q1",k5bvn2:"x1hkdb0d xorstpt",kyAemX:"x1esw782",kOBAk4:"x1plog1",kKwaWg:"x14nz3uv xhbf78z",k87sOh:"xwa60dl",kLqNvP:"xbudbmw",kVAEAm:"x10l6tqk",k3aq6I:"x11lhmoz",kzqmXN:"xw90zxv",$$css:true},glowBloom:{ku685b:"xj2j9hd",kpwlN0:"x10a8y8t",kSiTet:"x197sbye",kVAEAm:"x10l6tqk",$$css:true},glowRing:{kaIpWk:"x63lw5n",kpwlN0:"x10a8y8t",kSYUrQ:"x13bagxo",kQB4zb:"x19wp0b7",kX1K2I:"x1d20nd",kVQacm:"xb3r6kr",kmVPX3:"x1i3ajwb",kVAEAm:"x10l6tqk",$$css:true},meter:{kmuXW:"x2lah0s",kcqcaj:"xss6m8b",$$css:true},picker:{kGNEyG:"x6s0dn4",kysU6D:"xjyslct",kWkggS:"x1225k3z xxsa5ao x12ribo7 xjbqb8w",kaIpWk:"x2b34ud",kMzoRj:"xc342km",kMwMTN:"x1x6ed8x xzr6qem x16j0kd1 x125omll",kkrTdU:"x1ypdohk",k1xSpc:"x3nfvp2",kMv6JI:"xjb2p0i",kOIVth:"x13hh4mm",ks0D6T:"x193iq5w",kAzted:"x1vigsvi",k7Eaqz:"xeuugli",kjBf7l:"x4dprnk x1uczgqu",kInvED:"x1wfwxd8",k3XXqK:"xaatb59",kMeerF:"x1vhx2qj",kg3NbH:"xb5xqfq",kIyJzY:"x1e471i8 x1j5v3x2",k1ekBW:"xs2xxs2",khDVqt:"xuxw1ft",$$css:true},pickerChevron:{kmuXW:"x2lah0s",$$css:true},pickerChoice:{k7Eaqz:"xeuugli",kVQacm:"xb3r6kr",kg5iWk:"xlyipyv",$$css:true},pickerDescription:{kMwMTN:"x125omll",$$css:true},pickerEffort:{kGNEyG:"x6s0dn4",kWkggS:"x1o7hn9x",kaIpWk:"xvozwe9",kMwMTN:"x125omll",k1xSpc:"x3nfvp2",kmuXW:"x2lah0s",kOIVth:"x195vfkc",kwRFfy:"x1a7jdvm",kZCmMZ:"xt0na8i",khDVqt:"xuxw1ft",$$css:true},pickerEffortChevron:{k3aq6I:"x19axjrm x1c071of",$$css:true},pickerFirstLine:{kSGwAc:"xqcrz7y",keoZOQ:"xr9ek0c",$$css:true},pickerHeader:{kGNEyG:"x6s0dn4",k1xSpc:"x78zum5",kOIVth:"xp4ho6d",kjj79g:"x1qughib",kAzted:"xvfbv0m",kZCmMZ:"xt0na8i",$$css:true},pickerIcon:{k1xSpc:"x78zum5",kmuXW:"x2lah0s",$$css:true},pickerLearnMore:{kaIpWk:"xvozwe9",kMwMTN:"xzr6qem x9gkq5x x125omll",kkrTdU:"x1ypdohk",kGuDYH:"x1ws78te",kLWn49:"x76y1r9",kjBf7l:"x4dprnk x1uczgqu",k3XXqK:"xaatb59",kMeerF:"x1vhx2qj",k8WAf4:"x1lmimt7",kg3NbH:"xb5xqfq",kybGjl:"x1hl2dhg",kIyJzY:"x1e471i8 x1j5v3x2",k1ekBW:"xt3l3uh",$$css:true},pickerOption:{k1xSpc:"x78zum5",kXwgrk:"xdt5ytf",kzQI83:"x1iyjqo2",kOIVth:"x195vfkc",k7Eaqz:"xeuugli",$$css:true},pickerRadio:{kGNEyG:"x6s0dn4",kSGwAc:"xqcrz7y",k1xSpc:"x3nfvp2",kmuXW:"x2lah0s",kjj79g:"xl56j7k",keoZOQ:"xr9ek0c",$$css:true},pickerRadioDot:{kSiTet:"xvyzedd xg01cxk",$$css:true},pickerTitle:{kMwMTN:"x125omll",kGuDYH:"x1ws78te",k63SB2:"xuku2lm",kLWn49:"x76y1r9",$$css:true},pickerTriggerEffort:{kMwMTN:"x125omll",$$css:true},statusBar:{kGNEyG:"x7a106z",kMwMTN:"x125omll",k1xSpc:"x78zum5",kOIVth:"xp4ho6d",kjj79g:"x1qughib",k7Eaqz:"xeuugli",kg3NbH:"xy7odpl",$$css:true},statusBarGroup:{kGNEyG:"x6s0dn4",k1xSpc:"x78zum5",kwnvtZ:"x1a02dak",kOIVth:"xiw8qbs",k7Eaqz:"xeuugli",$$css:true},statusItem:{kGNEyG:"x6s0dn4",kWkggS:"xjbqb8w",kaIpWk:"xvozwe9",kMzoRj:"xc342km",kMwMTN:"xzr6qem x1x6ed8x x125omll",kkrTdU:"x1ypdohk",k1xSpc:"x3nfvp2",kMv6JI:"xjb2p0i",kGuDYH:"x1qlqyl8",k63SB2:"x1lo1l87",kOIVth:"x13hh4mm",kLWn49:"x15bjb6t",kUOVxO:"xonvl67",kAzted:"xvfbv0m",kjBf7l:"x4dprnk x1uczgqu",kInvED:"x1wfwxd8",k3XXqK:"xaatb59",kMeerF:"x1vhx2qj",k8WAf4:"xt970qd",kg3NbH:"xdbhxi8",kIyJzY:"x1e471i8 x1j5v3x2",k1ekBW:"xt3l3uh",kAMwcw:"xvhdtae",khDVqt:"xuxw1ft",$$css:true}};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
/** A level of reasoning effort, such as "High". */
|
|
3
|
+
export interface ComposerPickerEffort {
|
|
4
|
+
description?: string;
|
|
5
|
+
label: string;
|
|
6
|
+
value: string;
|
|
7
|
+
}
|
|
8
|
+
export interface ComposerPickerOption<Value extends string = string> {
|
|
9
|
+
/** One line on what choosing it means, shown in the menu. */
|
|
10
|
+
description?: string;
|
|
11
|
+
/**
|
|
12
|
+
* The effort levels this option offers, as the model's API names them.
|
|
13
|
+
* Once chosen, its row opens them to the side.
|
|
14
|
+
*/
|
|
15
|
+
efforts?: readonly ComposerPickerEffort[];
|
|
16
|
+
/**
|
|
17
|
+
* A heading the option sits under, such as its provider. Options that
|
|
18
|
+
* share a heading are listed together, in the order they first appear.
|
|
19
|
+
*/
|
|
20
|
+
group?: string;
|
|
21
|
+
/** A glyph before the label, in the menu and on the trigger once chosen. */
|
|
22
|
+
icon?: ReactNode;
|
|
23
|
+
label: string;
|
|
24
|
+
value: Value;
|
|
25
|
+
}
|
|
26
|
+
export interface ComposerPickerProps<Value extends string = string> {
|
|
27
|
+
/**
|
|
28
|
+
* The chosen effort level. When the chosen option has none by this
|
|
29
|
+
* value, such as after switching models, the trigger leaves it out.
|
|
30
|
+
*/
|
|
31
|
+
effort?: string;
|
|
32
|
+
/** A glyph for choices that have none of their own. */
|
|
33
|
+
icon?: ReactNode;
|
|
34
|
+
/** What is picked, such as "Model". It names the menu and the trigger. */
|
|
35
|
+
label: string;
|
|
36
|
+
/** Adds a "Learn more" link beside the menu's title. */
|
|
37
|
+
learnMoreHref?: string;
|
|
38
|
+
/** Called with a level from the chosen option's `efforts`. */
|
|
39
|
+
onEffortChange?: (effort: string) => void;
|
|
40
|
+
onValueChange: (value: Value) => void;
|
|
41
|
+
options: readonly ComposerPickerOption<Value>[];
|
|
42
|
+
value: Value;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* A choice in the composer's toolbar, such as the model or the permission
|
|
46
|
+
* mode: a quiet label that opens a menu of options, each with a line on
|
|
47
|
+
* what it means. Options can carry icons, sit under headings such as their
|
|
48
|
+
* provider, and offer effort levels that open from the chosen row.
|
|
49
|
+
*/
|
|
50
|
+
export declare function ComposerPicker<Value extends string = string>({ effort, icon, label, learnMoreHref, onEffortChange, onValueChange, options, value, }: ComposerPickerProps<Value>): import("react").JSX.Element;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use client";import{props}from"@stylexjs/stylex";import{useCallback}from"react";import{IconChevronDown,IconChevronRight}from"../../icons";import{typeRoles}from"../../styles/typography.styles";import{checkboxStyles}from"../checkbox/checkbox.styles";import{Menu,MenuGroup,MenuGroupLabel,MenuPopup,MenuPrimitive,MenuRadioGroup,MenuSeparator,MenuSubPopup,MenuTrigger}from"../menu/menu";import{menuStyles}from"../menu/menu.styles";import{radioStyles}from"../radio/radio.styles";import{VisuallyHidden}from"../visually-hidden/visually-hidden";import{composerPartStyles as styles}from"./composer-parts.styles";/** A level of reasoning effort, such as "High". */import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";function sectionsOf(options){const sections=new Map();for(const option of options){const section=sections.get(option.group)??{group:option.group,options:[]};section.options.push(option);sections.set(option.group,section);}return[...sections.values()];}function Glyph({children,inMenu=false}){if(!children){return null;}return/*#__PURE__*/_jsx("span",{"aria-hidden":"true",...props(styles.pickerIcon,inMenu&&styles.pickerFirstLine),children:children});}// A radio circle, filled when chosen. A row that is not a radio item, such
|
|
2
|
+
// as the chosen model that opens its effort levels, draws a static one.
|
|
3
|
+
function RadioMark({checked}){return/*#__PURE__*/_jsx("span",{"aria-hidden":"true","data-checked":checked?"":undefined,...props(checkboxStyles.base,checkboxStyles.forcedColorsSelected,radioStyles.root,radioStyles.sizeSm,styles.pickerRadio),children:/*#__PURE__*/_jsx("span",{...props(radioStyles.indicator,styles.pickerRadioDot)})});}function OptionBody({description,icon,label}){return/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(Glyph,{inMenu:true,children:icon}),/*#__PURE__*/_jsxs("span",{...props(styles.pickerOption),children:[/*#__PURE__*/_jsx("span",{children:label}),description?/*#__PURE__*/_jsx("span",{...props(typeRoles.caption,styles.pickerDescription),children:description}):null]})]});}// One choice. The form Radio's circle sits at the row's end, so labels and
|
|
4
|
+
// icons line up on the leading edge.
|
|
5
|
+
function Option({option}){return/*#__PURE__*/_jsxs(MenuPrimitive.RadioItem,{closeOnClick:true,"data-slot":"menu-radio-item",value:option.value,...props(menuStyles.item,menuStyles.itemDefault),children:[/*#__PURE__*/_jsx(OptionBody,{description:option.description,icon:option.icon,label:option.label}),/*#__PURE__*/_jsx(MenuPrimitive.RadioItemIndicator,{keepMounted:true,...props(checkboxStyles.base,checkboxStyles.forcedColorsSelected,radioStyles.root,radioStyles.sizeSm,styles.pickerRadio),children:/*#__PURE__*/_jsx("span",{...props(radioStyles.indicator,styles.pickerRadioDot)})})]});}// The chosen option, when it has effort levels: its row shows the current
|
|
6
|
+
// level and opens the list of levels to the side.
|
|
7
|
+
function EffortRow({effort,onEffortChange,option}){const levels=option.efforts??[];const current=levels.find(level=>level.value===effort);const change=useCallback(next=>onEffortChange(next),[onEffortChange]);return/*#__PURE__*/_jsxs(MenuPrimitive.SubmenuRoot,{children:[/*#__PURE__*/_jsxs(MenuPrimitive.SubmenuTrigger,{"data-slot":"composer-picker-effort",...props(menuStyles.item,menuStyles.itemDefault,menuStyles.subTrigger),children:[/*#__PURE__*/_jsx(OptionBody,{description:option.description,icon:option.icon,label:option.label}),/*#__PURE__*/_jsx(VisuallyHidden,{children:", chosen, effort"}),/*#__PURE__*/_jsxs("span",{...props(typeRoles.caption,styles.pickerEffort),children:[current?.label??"Effort",/*#__PURE__*/_jsx(IconChevronRight,{"aria-hidden":"true",size:12,...props(styles.pickerEffortChevron)})]}),/*#__PURE__*/_jsx(RadioMark,{checked:true})]}),/*#__PURE__*/_jsx(MenuSubPopup,{children:/*#__PURE__*/_jsxs(MenuGroup,{children:[/*#__PURE__*/_jsx(MenuGroupLabel,{children:"Effort"}),/*#__PURE__*/_jsx(MenuRadioGroup,{"aria-label":"Effort",onValueChange:change,value:effort,children:levels.map(level=>/*#__PURE__*/_jsx(Option,{option:level},level.value))})]})})]});}function Header({href,label}){return/*#__PURE__*/_jsxs("div",{...props(styles.pickerHeader),children:[/*#__PURE__*/_jsx("span",{"aria-hidden":"true",...props(styles.pickerTitle),children:label}),href?/*#__PURE__*/_jsx(MenuPrimitive.LinkItem,{href:href,...props(styles.pickerLearnMore),children:"Learn more"}):null]});}// The trigger's text: the choice, and its effort level when it has one.
|
|
8
|
+
function TriggerLabel({chosen,effort,label,value}){const level=chosen?.efforts?.find(item=>item.value===effort);return/*#__PURE__*/_jsxs("span",{...props(styles.pickerChoice),children:[/*#__PURE__*/_jsxs(VisuallyHidden,{children:[label,": "]}),chosen?.label??value,level?/*#__PURE__*/_jsxs("span",{...props(styles.pickerTriggerEffort),children:[" · ",level.label]}):null]});}function Row({effort,onEffortChange,option,value}){if(option.value===value&&option.efforts?.length&&onEffortChange){return/*#__PURE__*/_jsx(EffortRow,{effort:effort,onEffortChange:onEffortChange,option:option});}return/*#__PURE__*/_jsx(Option,{option:option});}/**
|
|
9
|
+
* A choice in the composer's toolbar, such as the model or the permission
|
|
10
|
+
* mode: a quiet label that opens a menu of options, each with a line on
|
|
11
|
+
* what it means. Options can carry icons, sit under headings such as their
|
|
12
|
+
* provider, and offer effort levels that open from the chosen row.
|
|
13
|
+
*/export function ComposerPicker({effort,icon,label,learnMoreHref,onEffortChange,onValueChange,options,value}){const chosen=options.find(option=>option.value===value);const sections=sectionsOf(options);// Provider headings already title a grouped list; a second title above
|
|
14
|
+
// them is noise unless it carries the link.
|
|
15
|
+
const titled=learnMoreHref!==undefined||sections[0]?.group===undefined;const change=useCallback(next=>onValueChange(next),[onValueChange]);return/*#__PURE__*/_jsxs(Menu,{children:[/*#__PURE__*/_jsxs(MenuTrigger,{render:/*#__PURE__*/_jsx("button",{"data-slot":"composer-picker",type:"button",...props(typeRoles.ui,styles.picker)}),children:[/*#__PURE__*/_jsx(Glyph,{children:chosen?.icon??icon}),/*#__PURE__*/_jsx(TriggerLabel,{chosen:chosen,effort:effort,label:label,value:value}),/*#__PURE__*/_jsx(IconChevronDown,{"aria-hidden":"true",size:14,...props(styles.pickerChevron)})]}),/*#__PURE__*/_jsxs(MenuPopup,{align:"start",side:"top",children:[titled?/*#__PURE__*/_jsx(Header,{href:learnMoreHref,label:label}):null,/*#__PURE__*/_jsx(MenuRadioGroup,{"aria-label":label,onValueChange:change,value:value,children:sections.map((section,index)=>/*#__PURE__*/_jsxs(MenuGroup,{children:[index>0?/*#__PURE__*/_jsx(MenuSeparator,{}):null,section.group?/*#__PURE__*/_jsx(MenuGroupLabel,{children:section.group}):null,section.options.map(option=>/*#__PURE__*/_jsx(Row,{effort:effort,onEffortChange:onEffortChange,option:option,value:value},option.value))]},section.group??""))})]})]});}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{create,props}from"@stylexjs/stylex";import"../../styles/colors.stylex";import{colors}from"../../styles/colors.stylex";import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";const RADIUS=6;const LENGTH=2*Math.PI*RADIUS;/** A 16px ring showing a 0–1 share; decorative, so pair it with text. */export function ProgressRing({share}){const done=Math.min(Math.max(share,0),1)*LENGTH;return/*#__PURE__*/_jsxs("svg",{"aria-hidden":"true",height:"16",viewBox:"0 0 16 16",width:"16",...{className:"x1lliihq x2lah0s x9tu13d"},children:[/*#__PURE__*/_jsx("circle",{cx:"8",cy:"8",fill:"none",r:RADIUS,strokeWidth:"2",...{className:"x120t28g"}}),/*#__PURE__*/_jsx("circle",{cx:"8",cy:"8",fill:"none",r:RADIUS,strokeDasharray:`${done} ${LENGTH}`,strokeLinecap:"round",strokeWidth:"2",...{className:"x1tsy410"}})]});}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const SPACES=/\p{Zs}+/gu;const WORD=/^[\p{L}\p{M}\p{N}_.’'-]$/u;const SPACE=/^\p{Zs}$/u;const BOUNDARY=/\s/u;/** Find the nearest trigger, then scan the query without crossing punctuation. */export function getComposerQuery(text,caret,triggers){const candidates=triggers.filter(character=>character.length>0&&character.length<=caret).map(character=>({character,start:text.lastIndexOf(character,caret-character.length)})).sort((a,b)=>b.start-a.start);const[match]=candidates;if(!match||match.start<0){return null;}if(match.start>0&&!BOUNDARY.test(text.charAt(match.start-1))){return null;}const prefix=text.slice(match.start+match.character.length,caret);if(SPACE.test(Array.from(prefix)[0]??"")){return null;}if(!Array.from(prefix).every(letter=>WORD.test(letter)||SPACE.test(letter))){return null;}let end=caret;for(const letter of text.slice(caret)){if(!WORD.test(letter)){break;}end+=letter.length;}return{...match,end,text:text.slice(match.start+match.character.length,end).replace(SPACES," ").trim()};}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{ScrollArea}from"@base-ui/react/scroll-area";import{presentation}from"./composer.styles";/** Closed scroll regions: Base UI owns measurement and scrollbar lifetimes. */import{jsx as _jsx,jsxs as _jsxs}from"react/jsx-runtime";export function ComposerScrollArea({children,region}){const draft=region==="draft";return/*#__PURE__*/_jsxs(ScrollArea.Root,{...presentation(draft?"scroll":"listScroll"),"data-slot":draft?"composer-scroll-area":"composer-suggestions-scroll",children:[/*#__PURE__*/_jsx(ScrollArea.Viewport,{"data-slot":"composer-viewport",children:/*#__PURE__*/_jsx(ScrollArea.Content,{"data-slot":"composer-content",children:children})}),/*#__PURE__*/_jsx(ScrollArea.Scrollbar,{...presentation("scrollbar"),children:/*#__PURE__*/_jsx(ScrollArea.Thumb,{...presentation("thumb")})})]});}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{flushSync}from"react-dom";import{COMPOSER_CLIPBOARD_TYPE,parseComposerClipboard}from"./composer-clipboard";import{currentQuery,editorRange,equalValue,getComposerText,insertItem,insertPlainText,queryRange,readSelection,readValue,replaceRange,restoreSelection,writeValue}from"./composer-document";import{ComposerHistory}from"./composer-history";const SPACE=/\s/u;const INITIAL={composing:false,hosts:[],query:null,textarea:false};function plain(value){const text=getComposerText(value);return text?[{text,type:"text"}]:[];}function sameHosts(a,b){return a.length===b.length&&a.every((host,i)=>host===b[i]);}function ignoreKey(event,composing){return event.defaultPrevented||composing||event.nativeEvent.isComposing||event.nativeEvent.keyCode===229;}function undoDirection(event){if(event.altKey||!(event.metaKey||event.ctrlKey)){return 0;}if(event.key.toLowerCase()==="z"){return event.shiftKey?1:-1;}return event.ctrlKey&&event.key.toLowerCase()==="y"?1:0;}const getServerSnapshot=()=>INITIAL;/** Transient editing state belongs to the mounted input; values belong to React. */export class ComposerSession{options;input=null;view=INITIAL;observers=new Set();history=new ComposerHistory();before=null;inputType="";savedSelection=null;dismissed=null;compositionOwner=[];compositionInput=null;finishingComposition=false;resetValue=[];rootRef={current:null};constructor(options){this.options=options;this.history.reset(options.value);}getSnapshot=()=>this.view;getServerSnapshot=getServerSnapshot;subscribe=notify=>{this.observers.add(notify);return()=>{this.observers.delete(notify);};};update(patch){if(Object.entries(patch).every(([key,value])=>this.view[key]===value)){return;}this.view={...this.view,...patch};for(const notify of this.observers){notify();}}commit(options,resetValue){this.options=options;this.resetValue=resetValue;this.reconcile();}bind=input=>{if(!input){return;}this.input=input;const composing=this.view.composing&&this.compositionInput===input;if(!composing){this.compositionInput=null;}this.update({composing,textarea:input.tagName==="TEXTAREA"});this.reconcile();const doc=input.ownerDocument;doc.addEventListener("selectionchange",this.selectionChanged);doc.addEventListener("beforeinput",this.beforeInput);return()=>{doc.removeEventListener("selectionchange",this.selectionChanged);doc.removeEventListener("beforeinput",this.beforeInput);this.input=null;queueMicrotask(()=>{if(!this.input){this.compositionInput=null;this.setQuery(null);this.update({composing:false,hosts:[]});}});};};bindRoot(root){this.rootRef.current=root;const form=root.tagName==="FORM"?root:root.closest("form");const boundary=root.getRootNode();const reset=event=>{if(event.target!==form){return;}queueMicrotask(()=>{if(this.rootRef.current===root&&!event.defaultPrevented){this.reset(this.resetValue);}});};boundary.addEventListener("reset",reset);return()=>{boundary.removeEventListener("reset",reset);if(this.rootRef.current===root){this.rootRef.current=null;}};}editable(){return!(this.options.disabled||this.options.readOnly||this.view.composing);}rich(){return this.view.textarea?null:this.input;}reconcile(){const{input}=this;if(!input||this.view.composing){return;}const owned=this.view.textarea?plain(this.options.value):this.options.value;if(!this.history.matches(owned)){this.history.reset(owned);this.savedSelection=null;}if(!equalValue(readValue(input),owned)){const selection=readSelection(input);writeValue(input,owned);restoreSelection(input,selection);this.setQuery(null);this.dismissed=null;}if(!this.queryEnabled()){this.setQuery(null);}this.collectHosts(input);}queryEnabled(){return this.editable()&&!!this.options.triggers?.some(({character})=>character===this.view.query?.character);}collectHosts(input){const hosts=Array.from(input.querySelectorAll('[data-slot="composer-token-renderer"]'));for(const host of hosts){const fallback=host.previousElementSibling;if(fallback instanceof HTMLElement){fallback.hidden=true;}}if(!sameHosts(hosts,this.view.hosts)){this.update({hosts});}}setQuery(query){if(query?.key===this.view.query?.key&&query?.node===this.view.query?.node){return;}this.update({query});this.options.onQueryChange?.(query?{character:query.character,key:query.key,text:query.text}:null);}refreshQuery=()=>{const input=this.rich();const active=input&&this.editable()&&input.ownerDocument.activeElement===input;const query=active?currentQuery(input,this.options.triggers??[]):null;if(query?.key!==this.dismissed){this.dismissed=null;}this.setQuery(query?.key===this.dismissed?null:query);};selectionChanged=()=>{const{input}=this;if(!input||input.ownerDocument.activeElement!==input||this.view.composing){return;}this.savedSelection=readSelection(input);this.refreshQuery();};dismiss=()=>{this.dismissed=this.view.query?.key??null;this.setQuery(null);};blur=()=>{if(this.input){this.savedSelection=readSelection(this.input)??this.savedSelection;}this.dismiss();};prepare(type){this.before=this.input?readSelection(this.input):null;this.inputType=type;}beforeInput=event=>{const{input}=this;if(!(event instanceof InputEvent)||event.defaultPrevented||!eventInInput(input,event)){return;}if(blockedInput(this.options,event)){event.preventDefault();return;}if(this.view.textarea){return;}const direction={historyRedo:1,historyUndo:-1}[event.inputType];if(direction){event.preventDefault();this.travel(direction);}else if(!this.view.composing){this.prepare(event.inputType);}};publish(reason="input"){const{input}=this;if(!(input&&this.editable())){return;}const value=readValue(input);if(!this.view.textarea){this.history.record(value,this.before,readSelection(input),this.inputType);}this.inputType="";this.before=null;if(!equalValue(value,this.options.value)){flushSync(()=>this.options.onValueChange(value,{reason}));}this.reconcile();this.dismissed=null;this.refreshQuery();}inputChanged=()=>{if(Boolean(this.finishingComposition)===false){this.publish();}};startComposition=()=>{this.prepare("composition");this.compositionOwner=this.options.value;this.compositionInput=this.input;this.update({composing:true});this.setQuery(null);};endComposition=()=>{this.compositionInput=null;this.update({composing:false});this.finishingComposition=true;queueMicrotask(()=>{this.finishingComposition=false;});if(equalValue(this.compositionOwner,this.options.value)){this.publish();}else{this.reconcile();}};select=item=>{const input=this.rich();const{query}=this.view;if(!(input&&query&&this.editable())||item.disabled||!input.contains(query.node)){return;}this.prepare("selection");if(item.type==="action"&&this.options.onAction){replaceRange(input,queryRange(query),[]);this.publish("selection");this.setQuery(null);this.options.onAction(item,query);}else{insertItem(input,query,item);this.publish("selection");this.setQuery(null);}};insertTrigger=character=>{const input=this.rich();if(!(input&&this.editable()&&this.options.triggers?.some(source=>source.character===character))){return;}const text=getComposerText(readValue(input));const selection=readSelection(input)??this.savedSelection??{anchor:text.length,focus:text.length};const start=Math.min(selection.anchor,selection.focus);const end=Math.max(selection.anchor,selection.focus);const prefix=separator(text.charAt(start-1));const suffix=separator(text.charAt(end));input.focus({preventScroll:true});restoreSelection(input,selection);this.prepare("trigger");insertPlainText(input,prefix+character+suffix);const caret=start+prefix.length+character.length;restoreSelection(input,{anchor:caret,focus:caret});this.publish();this.savedSelection=readSelection(input);};travel(direction){const input=this.rich();if(!(input&&this.editable())){return;}const snapshot=this.history.move(direction,readSelection(input));if(!snapshot){return;}writeValue(input,snapshot.value);restoreSelection(input,snapshot.selection);flushSync(()=>this.options.onValueChange(snapshot.value,{reason:"history"}));this.reconcile();this.dismiss();}reset=(value=[])=>{this.savedSelection=null;this.history.reset(value);this.dismiss();flushSync(()=>this.options.onValueChange(value,{reason:"reset"}));this.reconcile();// A reset triggered by a trusted click can run its native default action
|
|
2
|
+
// after this microtask. Keep that action aligned with the owner's result.
|
|
3
|
+
if(this.input instanceof HTMLTextAreaElement){this.input.defaultValue=this.input.value;}};canSubmit(){return this.editable()&&!this.options.submitDisabled&&(!!this.options.allowEmpty||!!getComposerText(this.options.value).trim());}performSubmit=()=>{if(!this.canSubmit()){return;}this.dismiss();this.options.onSubmit?.(this.options.value);};submit=()=>{if(!this.canSubmit()){return;}if(this.rootRef.current instanceof HTMLFormElement){this.rootRef.current.requestSubmit();}else{this.performSubmit();}};keyDown=event=>{if(ignoreKey(event,this.view.composing)){return;}const direction=this.view.textarea?0:undoDirection(event);if(direction){event.preventDefault();this.travel(direction);return;}if(event.key!=="Enter"||event.shiftKey){return;}const policy=this.options.submitOnEnter??"always";const sends=policy==="always"||policy==="desktop"&&matchMedia("(pointer: fine)").matches;if(sends){event.preventDefault();this.submit();}};copy=event=>{if(event.defaultPrevented||this.view.textarea){return null;}const range=editorRange(event.currentTarget);if(!range||range.collapsed){return null;}const container=event.currentTarget.ownerDocument.createElement("div");container.append(range.cloneContents());const value=readValue(container,false);event.clipboardData.setData("text/plain",getComposerText(value));event.clipboardData.setData(COMPOSER_CLIPBOARD_TYPE,JSON.stringify(value));event.preventDefault();return range;};cut=event=>{const range=this.copy(event);if(!(range&&this.editable())){return;}this.prepare("cut");range.deleteContents();this.publish();};paste=event=>{if(event.defaultPrevented||this.view.textarea){return;}event.preventDefault();if(!this.editable()){return;}const range=editorRange(event.currentTarget);if(!range){return;}this.prepare("paste");const value=parseComposerClipboard(event.clipboardData.getData(COMPOSER_CLIPBOARD_TYPE));if(value){replaceRange(event.currentTarget,range,value);}else{insertPlainText(event.currentTarget,event.clipboardData.getData("text/plain"));}this.publish();};drop=event=>{if(event.defaultPrevented||this.view.textarea){return;}event.preventDefault();if(!this.editable()){return;}const text=event.dataTransfer.getData("text/plain");if(!(text&&dropSelection(event.currentTarget,event.clientX,event.clientY))){return;}event.currentTarget.focus({preventScroll:true});this.prepare("drop");insertPlainText(event.currentTarget,text);this.publish();};}function separator(character){return character&&!SPACE.test(character)?" ":"";}function eventInInput(input,event){return event.target instanceof Node&&!!input?.contains(event.target);}function blockedInput(options,event){return!!options.disabled||!!options.readOnly||event.inputType.startsWith("format");}function dropPoint(doc,x,y){const position=doc.caretPositionFromPoint?.(x,y);if(position){return[position.offsetNode,position.offset];}const range=doc.caretRangeFromPoint?.(x,y);return range?[range.startContainer,range.startOffset]:null;}function dropSelection(input,x,y){const doc=input.ownerDocument;const point=dropPoint(doc,x,y);if(!(point&&input.contains(point[0]))){return false;}const[node,offset]=point;const element=node instanceof Element?node:node.parentElement;const token=element?.closest("[data-composer-token]");if(token?.parentNode){doc.getSelection()?.collapse(token.parentNode,Array.from(token.parentNode.childNodes).indexOf(token)+1);}else{doc.getSelection()?.collapse(node,offset);}return true;}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { ReactNode } from "react";
|
|
2
|
+
/** Data retained when a suggestion becomes part of the draft. */
|
|
3
|
+
interface TokenData {
|
|
4
|
+
data?: string;
|
|
5
|
+
id: string;
|
|
6
|
+
kind?: string;
|
|
7
|
+
label: string;
|
|
8
|
+
text?: string;
|
|
9
|
+
}
|
|
10
|
+
type TokenKind = "mention" | "action";
|
|
11
|
+
/** Inserted tokens have a concrete kind and the trigger that produced them. */
|
|
12
|
+
export type ComposerTokenPart = TokenData & {
|
|
13
|
+
trigger: string;
|
|
14
|
+
type: TokenKind;
|
|
15
|
+
};
|
|
16
|
+
export type ComposerPart = ComposerTokenPart | {
|
|
17
|
+
text: string;
|
|
18
|
+
type: "text";
|
|
19
|
+
};
|
|
20
|
+
export type ComposerValue = readonly ComposerPart[];
|
|
21
|
+
/** Suggestions add display and availability metadata to the insertion data. */
|
|
22
|
+
export interface ComposerItemValue extends TokenData {
|
|
23
|
+
description?: string;
|
|
24
|
+
disabled?: boolean;
|
|
25
|
+
icon?: ReactNode;
|
|
26
|
+
type?: TokenKind;
|
|
27
|
+
}
|
|
28
|
+
/** A query identifies the trigger, current search text, and request identity. */
|
|
29
|
+
export interface ComposerQuery {
|
|
30
|
+
character: string;
|
|
31
|
+
key: string;
|
|
32
|
+
text: string;
|
|
33
|
+
}
|
|
34
|
+
export type ComposerTriggerState = "ready" | "loading" | "error";
|
|
35
|
+
/** Sources provide items synchronously; itemsFor identifies an async response. */
|
|
36
|
+
export interface ComposerTrigger extends Pick<ComposerQuery, "character"> {
|
|
37
|
+
filter?: ((item: ComposerItemValue, query: string) => boolean) | null;
|
|
38
|
+
items: readonly ComposerItemValue[];
|
|
39
|
+
itemsFor?: string;
|
|
40
|
+
maxQueryLength?: number;
|
|
41
|
+
queryKey?: string;
|
|
42
|
+
showEmpty?: boolean;
|
|
43
|
+
status?: ComposerTriggerState;
|
|
44
|
+
}
|
|
45
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{};
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/* Layout variables are scoped to each frame, including nested composers. */
|
|
2
|
+
[data-slot="composer"] {
|
|
3
|
+
--composer-preferred-rows: initial;
|
|
4
|
+
|
|
5
|
+
--composer-columns: none;
|
|
6
|
+
--composer-rows: none;
|
|
7
|
+
|
|
8
|
+
--composer-frame-inset: 0px;
|
|
9
|
+
--composer-scroll-inset: var(--composer-padding);
|
|
10
|
+
--composer-text-inset: 0.75rem;
|
|
11
|
+
--composer-editor-column: auto;
|
|
12
|
+
--composer-editor-row: auto;
|
|
13
|
+
|
|
14
|
+
--composer-actions-column: auto;
|
|
15
|
+
--composer-actions-row: auto;
|
|
16
|
+
--composer-group-row: auto;
|
|
17
|
+
--composer-start-column: auto;
|
|
18
|
+
--composer-end-column: auto;
|
|
19
|
+
--composer-group-gap: initial;
|
|
20
|
+
}
|
|
21
|
+
[data-slot="composer"][data-layout="adaptive"] {
|
|
22
|
+
--composer-preferred-rows: 1;
|
|
23
|
+
|
|
24
|
+
--composer-columns: auto minmax(0, 1fr) auto;
|
|
25
|
+
--composer-editor-row: 1;
|
|
26
|
+
--composer-editor-column: 1 / -1;
|
|
27
|
+
--composer-actions-row: 2;
|
|
28
|
+
--composer-actions-column: 1 / -1;
|
|
29
|
+
--composer-rows: minmax(0, 1fr) auto;
|
|
30
|
+
}
|
|
31
|
+
[data-slot="composer"][data-layout="adaptive"]:not([data-multiline]) {
|
|
32
|
+
--composer-rows: none;
|
|
33
|
+
--composer-frame-inset: var(--composer-padding);
|
|
34
|
+
--composer-scroll-inset: 0px;
|
|
35
|
+
--composer-text-inset: 4px;
|
|
36
|
+
--composer-editor-column: 2;
|
|
37
|
+
|
|
38
|
+
--composer-group-row: 1;
|
|
39
|
+
--composer-start-column: 1;
|
|
40
|
+
--composer-end-column: 3;
|
|
41
|
+
--composer-group-gap: 8px;
|
|
42
|
+
}
|
|
43
|
+
[data-slot="composer-input"] {
|
|
44
|
+
min-height: calc(var(--composer-min-rows, 1) * 1lh + 0.75rem);
|
|
45
|
+
}
|
|
46
|
+
[data-layout="adaptive"] > [data-slot="composer-scroll-area"] {
|
|
47
|
+
--composer-min-rows: 1;
|
|
48
|
+
}
|
|
49
|
+
[data-slot="composer-scroll-area"] > [data-slot="composer-viewport"] {
|
|
50
|
+
--composer-row-limit: calc(
|
|
51
|
+
var(--composer-max-rows) *
|
|
52
|
+
var(--composer-line-height, 1.5rem) +
|
|
53
|
+
var(--composer-input-padding, 0.75rem)
|
|
54
|
+
);
|
|
55
|
+
height: auto;
|
|
56
|
+
min-height: 0;
|
|
57
|
+
max-height: min(50dvh, var(--composer-max-height, var(--composer-row-limit)));
|
|
58
|
+
overscroll-behavior: contain;
|
|
59
|
+
}
|
|
60
|
+
[data-slot="composer-suggestions-scroll"] > [data-slot="composer-viewport"] {
|
|
61
|
+
height: auto;
|
|
62
|
+
max-height: min(16rem, var(--available-height, 16rem));
|
|
63
|
+
}
|
|
64
|
+
[data-slot="composer-token-icon"] {
|
|
65
|
+
& > svg {
|
|
66
|
+
display: inline-block;
|
|
67
|
+
width: 0.875em;
|
|
68
|
+
height: 0.875em;
|
|
69
|
+
vertical-align: -0.125em;
|
|
70
|
+
}
|
|
71
|
+
&::after {
|
|
72
|
+
content: "\2060\00a0";
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
@supports (field-sizing: content) {
|
|
77
|
+
[data-slot="composer-input"] {
|
|
78
|
+
field-sizing: content;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { Button as ButtonPrimitive } from "@base-ui/react/button";
|
|
2
|
+
import { Popover as PopoverPrimitive } from "@base-ui/react/popover";
|
|
3
|
+
import { useRender } from "@base-ui/react/use-render";
|
|
4
|
+
import { type ComponentProps, type ReactElement, type ReactNode } from "react";
|
|
5
|
+
import type { Closed } from "../../closed";
|
|
6
|
+
import { type ComposerEditorOptions, type ComposerItemValue, type ComposerTokenPart } from "./composer-editor";
|
|
7
|
+
import "./composer.css";
|
|
8
|
+
type ComposerPopupProps = Closed<ComponentProps<typeof PopoverPrimitive.Popup> & {
|
|
9
|
+
anchor?: ComponentProps<typeof PopoverPrimitive.Positioner>["anchor"];
|
|
10
|
+
side?: ComponentProps<typeof PopoverPrimitive.Positioner>["side"];
|
|
11
|
+
align?: ComponentProps<typeof PopoverPrimitive.Positioner>["align"];
|
|
12
|
+
sideOffset?: ComponentProps<typeof PopoverPrimitive.Positioner>["sideOffset"];
|
|
13
|
+
alignOffset?: ComponentProps<typeof PopoverPrimitive.Positioner>["alignOffset"];
|
|
14
|
+
portalProps?: Closed<ComponentProps<typeof PopoverPrimitive.Portal>>;
|
|
15
|
+
}>;
|
|
16
|
+
type ComposerFormProps = Closed<useRender.ComponentProps<"form">>;
|
|
17
|
+
type ComposerLayout = "stacked" | "adaptive";
|
|
18
|
+
type ComposerTokenVariant = "default" | "chip";
|
|
19
|
+
export type ComposerProps = Closed<Omit<ComposerFormProps, "defaultValue" | "onSubmit" | "name"> & ComposerEditorOptions & {
|
|
20
|
+
layout?: ComposerLayout;
|
|
21
|
+
/**
|
|
22
|
+
* Stops the agent. While `working`, the submit button becomes Stop and
|
|
23
|
+
* Enter no longer sends.
|
|
24
|
+
*/
|
|
25
|
+
onStop?: () => void;
|
|
26
|
+
/** The agent is working on the last message; the composer glows. */
|
|
27
|
+
working?: boolean;
|
|
28
|
+
}>;
|
|
29
|
+
export declare function Composer({ value, defaultValue, onValueChange, onSubmit, onQueryChange, onAction, triggers, disabled, readOnly, submitDisabled, allowEmpty, submitOnEnter, submitOnEmptySuggestions, getSuggestionsAnnouncement, working, onStop, ...frame }: ComposerProps): ReactElement;
|
|
30
|
+
export declare function ComposerInput({ placeholder, renderToken, ...external }: Closed<useRender.ComponentProps<"div"> & {
|
|
31
|
+
placeholder?: string;
|
|
32
|
+
renderToken?: (token: ComposerTokenPart) => ReactNode;
|
|
33
|
+
}>): ReactElement;
|
|
34
|
+
export declare function ComposerToken({ token, variant, icon, children, ...external }: Closed<Omit<ComponentProps<"span">, "contentEditable"> & {
|
|
35
|
+
token: ComposerTokenPart;
|
|
36
|
+
variant?: ComposerTokenVariant;
|
|
37
|
+
icon?: ReactNode;
|
|
38
|
+
}>): ReactElement;
|
|
39
|
+
export declare function ComposerPopup({ portalProps, anchor, side, align, sideOffset, alignOffset, ...external }: ComposerPopupProps): ReactElement;
|
|
40
|
+
export declare function ComposerList({ children, ...external }: Closed<Omit<useRender.ComponentProps<"div">, "children"> & {
|
|
41
|
+
children?: ReactNode | ((item: ComposerItemValue, index: number) => ReactNode);
|
|
42
|
+
}>): ReactElement;
|
|
43
|
+
export declare function ComposerItem({ value, disabled, render, ref, ...external }: Closed<Omit<useRender.ComponentProps<"button", {
|
|
44
|
+
highlighted: boolean;
|
|
45
|
+
disabled: boolean;
|
|
46
|
+
}>, "value"> & {
|
|
47
|
+
value?: ComposerItemValue;
|
|
48
|
+
}>): ReactElement;
|
|
49
|
+
export declare function ComposerStatus(external: Closed<useRender.ComponentProps<"div">>): ReactElement;
|
|
50
|
+
export declare function ComposerActions(external: Closed<ComponentProps<"div">>): ReactElement;
|
|
51
|
+
export declare function ComposerActionGroup({ align, ...external }: Closed<ComponentProps<"div"> & {
|
|
52
|
+
align?: "start" | "end";
|
|
53
|
+
}>): ReactElement;
|
|
54
|
+
export declare function ComposerSubmit({ disabled, render, ref, ...external }: Closed<Omit<ComponentProps<typeof ButtonPrimitive>, "type">>): ReactElement;
|
|
55
|
+
export type { ComposerContextCost, ComposerContextMeterProps, ComposerContextUsage, } from "./composer-context-meter";
|
|
56
|
+
export { ComposerContextMeter } from "./composer-context-meter";
|
|
57
|
+
export type { ComposerDictationProps } from "./composer-dictation";
|
|
58
|
+
export { ComposerDictation } from "./composer-dictation";
|
|
59
|
+
export { type ComposerChangeDetails, type ComposerItemValue, type ComposerPart, type ComposerQuery, type ComposerTokenPart, type ComposerTrigger, type ComposerTriggerState, type ComposerValue, getComposerText, useComposerContext, useComposerFilter, } from "./composer-editor";
|
|
60
|
+
export type { ComposerAttachmentProps, ComposerAttachmentsProps, ComposerStatusBarGroupProps, ComposerStatusBarProps, ComposerStatusItemProps, } from "./composer-parts";
|
|
61
|
+
export { ComposerAttachment, ComposerAttachments, ComposerStatusBar, ComposerStatusBarGroup, ComposerStatusItem, } from "./composer-parts";
|
|
62
|
+
export type { ComposerPickerEffort, ComposerPickerOption, ComposerPickerProps, } from "./composer-picker";
|
|
63
|
+
export { ComposerPicker } from "./composer-picker";
|
|
64
|
+
export type { ComposerPopupProps, ComposerTokenVariant };
|
|
65
|
+
export type ComposerInputProps = Closed<ComponentProps<typeof ComposerInput>>;
|
|
66
|
+
export type ComposerTokenProps = Closed<ComponentProps<typeof ComposerToken>>;
|
|
67
|
+
export type ComposerActionsProps = Closed<ComponentProps<typeof ComposerActions>>;
|
|
68
|
+
export type ComposerActionGroupProps = Closed<ComponentProps<typeof ComposerActionGroup>>;
|
|
69
|
+
export type ComposerSubmitProps = Closed<ComponentProps<typeof ComposerSubmit>>;
|
|
70
|
+
export type ComposerListProps = Closed<ComponentProps<typeof ComposerList>>;
|
|
71
|
+
export type ComposerItemProps = Closed<ComponentProps<typeof ComposerItem>>;
|
|
72
|
+
export type ComposerStatusProps = Closed<ComponentProps<typeof ComposerStatus>>;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
"use client";import{Button as ButtonPrimitive}from"@base-ui/react/button";import{mergeProps}from"@base-ui/react/merge-props";import{Popover as PopoverPrimitive}from"@base-ui/react/popover";import{useRender}from"@base-ui/react/use-render";import{props as stylexProps}from"@stylexjs/stylex";import{createContext,useContext}from"react";import{createPortal}from"react-dom";import{IconArrowUp,IconPlayerStopFilled}from"../../icons";import{Button}from"../button/button";import{presentation}from"./composer.styles";import{ComposerEditorProvider,focusComposerInput,getComposerText,readComposerToken,useComposerEditorContext,useComposerInputLayout,useComposerItem,useComposerSuggestionsContext}from"./composer-editor";import{composerPartStyles}from"./composer-parts.styles";import{ComposerScrollArea}from"./composer-scroll-area";import"./composer.css";import{jsx as _jsx,jsxs as _jsxs,Fragment as _Fragment}from"react/jsx-runtime";const StopAction=createContext(undefined);// All renderable div parts share the same ownership and event-merging rules.
|
|
2
|
+
function useDivPart(name,external,defaults,refs=[]){const{render,ref,...rest}=external;Reflect.deleteProperty(rest,"data-slot");return useRender({defaultTagName:"div",props:mergeProps({...defaults,...{"data-slot":name}},rest),ref:[...refs,ref??null],render});}function WorkingLight(){const band=/*#__PURE__*/_jsx("span",{...stylexProps(composerPartStyles.glowBand)});return/*#__PURE__*/_jsxs("span",{"aria-hidden":"true","data-slot":"composer-glow",...stylexProps(composerPartStyles.glow),children:[/*#__PURE__*/_jsx("span",{...stylexProps(composerPartStyles.glowRing),children:band}),/*#__PURE__*/_jsx("span",{...stylexProps(composerPartStyles.glowBloom),children:/*#__PURE__*/_jsx("span",{...stylexProps(composerPartStyles.glowRing),children:band})})]});}function ComposerFrame({layout="stacked",name,render,ref,children,...external}){const editor=useComposerEditorContext();if(!editor){throw new Error("ComposerFrame requires Composer.");}Reflect.deleteProperty(external,"data-slot");const contents=/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(WorkingLight,{}),children,name?/*#__PURE__*/_jsx("input",{disabled:editor.disabled,name:name,type:"hidden",value:getComposerText(editor.value)}):null]});return useRender({defaultTagName:"form",props:mergeProps({...presentation("frame"),children:contents,...{"data-base-ui-swipe-ignore":""},...{"data-disabled":editor.disabled?"":undefined},...{"data-layout":layout},...{"data-readonly":editor.readOnly?"":undefined},...{"data-slot":"composer"},onClick:event=>focusComposerInput(event,false),onMouseDown:event=>focusComposerInput(event,true)},editor.formProps,external),ref:[editor.rootRef,editor.syncRootRef,ref??null],render});}export function Composer({value,defaultValue,onValueChange,onSubmit,onQueryChange,onAction,triggers,disabled,readOnly,submitDisabled,allowEmpty,submitOnEnter,submitOnEmptySuggestions,getSuggestionsAnnouncement,working,onStop,...frame}){const stop=working?onStop:undefined;const options={allowEmpty,defaultValue,disabled,getSuggestionsAnnouncement,onAction,onQueryChange,onSubmit,onValueChange,readOnly,submitDisabled:submitDisabled||stop!==undefined,submitOnEmptySuggestions,submitOnEnter,triggers,value};return/*#__PURE__*/_jsx(ComposerEditorProvider,{...options,children:/*#__PURE__*/_jsx(StopAction,{value:stop,children:/*#__PURE__*/_jsx(ComposerFrame,{...frame,"data-working":working?"":undefined})})});}function tokenPortal(host,index,renderToken){if(!host.parentElement){return null;}const token=readComposerToken(host.parentElement);const content=renderToken?.(token)??/*#__PURE__*/_jsx(ComposerToken,{token:token});return createPortal(content,host,String(index));}export function ComposerInput({placeholder,renderToken,...external}){const editor=useComposerEditorContext();const suggestions=useComposerSuggestionsContext();const layout=useComposerInputLayout();if(!editor){throw new Error("ComposerInput requires Composer.");}const{ref,...events}=editor.inputProps;const semantics=external.render===undefined?{"aria-multiline":true,contentEditable:true,role:"textbox",suppressContentEditableWarning:true}:{};const mode=editor.isTextarea?{contentEditable:undefined,disabled:editor.disabled,placeholder,readOnly:editor.readOnly}:suggestions?.inputProps;const draft=useDivPart("composer-input",external,mergeProps({...presentation("input"),...semantics,"aria-placeholder":placeholder,...{"data-empty":!editor.isTextarea&&editor.isEmpty&&!editor.isComposing?"":undefined},...{"data-placeholder":placeholder}},events,mode),[ref??null,layout.inputRef]);return/*#__PURE__*/_jsxs(_Fragment,{children:[/*#__PURE__*/_jsx(ComposerScrollArea,{region:"draft",children:draft}),editor.tokenHosts.map((host,index)=>tokenPortal(host,index,renderToken))]});}export function ComposerToken({token,variant="default",icon,children,...external}){Reflect.deleteProperty(external,"data-slot");const chip=variant==="chip";const glyph=chip&&icon?/*#__PURE__*/_jsx("span",{...presentation("icon"),"aria-hidden":"true","data-slot":"composer-token-icon",children:icon}):null;return/*#__PURE__*/_jsxs("span",{...presentation(...(chip?["token","chip"]:["token"])),contentEditable:false,"data-kind":token.kind,"data-slot":"composer-token","data-type":token.type,"data-variant":variant,...external,children:[glyph,/*#__PURE__*/_jsxs("span",{"data-slot":"composer-token-label",children:[chip?null:token.trigger,children??token.label]})]});}export function ComposerPopup({portalProps,anchor,side="top",align="start",sideOffset=4,alignOffset,...external}){const editor=useComposerEditorContext();Reflect.deleteProperty(external,"data-slot");const focus=editor?{finalFocus:false,initialFocus:false,role:"presentation"}:{};const panel=/*#__PURE__*/_jsx(PopoverPrimitive.Popup,{...presentation("popup"),"data-slot":"composer-popup",...focus,...external});return/*#__PURE__*/_jsx(PopoverPrimitive.Portal,{...portalProps,children:/*#__PURE__*/_jsx(PopoverPrimitive.Positioner,{...presentation("positioner"),align:align,alignOffset:alignOffset,anchor:anchor??editor?.rootRef,"data-slot":"composer-positioner",side:side,sideOffset:sideOffset,children:panel})});}export function ComposerList({children,...external}){const options=useComposerSuggestionsContext();const content=typeof children==="function"?options?.items.map(children):children;const list=useDivPart("composer-list",external,{...presentation("list"),"aria-label":options?"Suggestions":undefined,children:content,id:options?.listId,role:options?"listbox":undefined},[options?.registerList??null]);return/*#__PURE__*/_jsx(ComposerScrollArea,{region:"suggestions",children:list});}export function ComposerItem({value,disabled,render,ref,...external}){const unavailable=Boolean(disabled||value?.disabled);const option=useComposerItem(value,unavailable);Reflect.deleteProperty(external,"data-slot");return useRender({defaultTagName:"button",props:mergeProps({...option.props,...presentation("item"),...{"data-slot":"composer-item"},disabled:unavailable,type:"button"},external),ref:[option.ref,ref??null],render,state:{disabled:unavailable,highlighted:option.highlighted}});}export function ComposerStatus(external){return useDivPart("composer-status",external,{...presentation("status"),role:"status"});}export function ComposerActions(external){const{"data-slot":_slot,...rest}=external;return/*#__PURE__*/_jsx("div",{...presentation("actions"),"data-slot":"composer-actions",...rest});}export function ComposerActionGroup({align="start",...external}){Reflect.deleteProperty(external,"data-slot");return/*#__PURE__*/_jsx("div",{...presentation("group",align),"data-align":align,"data-slot":"composer-action-group",...external});}function keepDraftFocus(event,root){if(event.button!==0){return;}const draft=root?.querySelector('[data-slot="composer-input"]');if(draft===event.currentTarget.ownerDocument.activeElement){event.preventDefault();}}export function ComposerSubmit({disabled,render,ref,...external}){const editor=useComposerEditorContext();const stop=useContext(StopAction);Reflect.deleteProperty(external,"data-slot");const unavailable=disabled??!editor?.canSubmit;function send(event){if(disabled||event.defaultPrevented){return;}event.preventDefault();editor?.submit();}function halt(event){stop?.();event.currentTarget.closest('[data-slot="composer"]')?.querySelector('[data-slot="composer-input"]')?.focus();}const behavior=stop?{onClick:halt}:mergeProps({disabled:unavailable,onClick:send,onPointerDown:event=>keepDraftFocus(event,editor?.rootRef.current)},external);const sendFace=/*#__PURE__*/_jsx(Button,{"aria-label":"Send message",size:"icon-sm",variant:unavailable?"secondary":"default",children:/*#__PURE__*/_jsx(IconArrowUp,{"aria-hidden":"true",size:18})});const stopFace=/*#__PURE__*/_jsx(Button,{"aria-label":"Stop",size:"icon-sm",children:/*#__PURE__*/_jsx(IconPlayerStopFilled,{"aria-hidden":"true",size:14})});return/*#__PURE__*/_jsx(ButtonPrimitive,{"data-slot":"composer-submit",type:"button",...behavior,ref:ref,render:stop?stopFace:render??sendFace});}// biome-ignore lint/performance/noBarrelFile: The component entry point exposes its draft contract, editor hook, and parts.
|
|
3
|
+
export{ComposerContextMeter}from"./composer-context-meter";export{ComposerDictation}from"./composer-dictation";export{getComposerText,useComposerContext,useComposerFilter}from"./composer-editor";export{ComposerAttachment,ComposerAttachments,ComposerStatusBar,ComposerStatusBarGroup,ComposerStatusItem}from"./composer-parts";export{ComposerPicker}from"./composer-picker";
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{create,props}from"@stylexjs/stylex";import"../../styles/colors.stylex";import{colors}from"../../styles/colors.stylex";import"../../styles/conditions.stylex";import{conditions}from"../../styles/conditions.stylex";import"../../styles/interaction.stylex";import{borderWidth}from"../../styles/interaction.stylex";import"../../styles/motion.stylex";import{duration,easing}from"../../styles/motion.stylex";import"../../styles/shadows.stylex";import{shadows}from"../../styles/shadows.stylex";import"../../styles/shape.stylex";import{shape}from"../../styles/shape.stylex";import"../../styles/spacing.stylex";import{space}from"../../styles/spacing.stylex";import"../../styles/typography.stylex";import{fontSize,fontWeight,lineHeight}from"../../styles/typography.stylex";// Recipes share visual rules; layout decisions belong to the frame's CSS variables.
|
|
2
|
+
const shared={motion:{kIyJzY:"x1j5v3x2 x1e471i8",kAMwcw:"xvhdtae",$$css:true},row:{kGNEyG:"x6s0dn4",k1xSpc:"x78zum5",k7Eaqz:"xeuugli",$$css:true},smallText:{kGuDYH:"xlh8hku",kLWn49:"x2xzzt7",$$css:true},surface:{kWkggS:"xwn18cz",kVAM5u:"x155xxfk",kaIpWk:"x1yl01a3",ksu8eU:"x1y0btm7",kMzoRj:"x1cdonsl",kMwMTN:"x14tvo57",$$css:true}};const slots={actions:{k1xSpc:"x1qh6cmi x78zum5",kmuXW:"x2lah0s",kwnvtZ:"x1a02dak",kOIVth:"xp4ho6d",kBCFzs:"xlpbpvi",kbNqZ1:"xgp7ahr",kjj79g:"x1qughib",kUOVxO:"x111xfez",$$css:true},chip:{kWkggS:"x16d8uok",kaIpWk:"x2b34ud",kmVPX3:"xlxy37g",$$css:true},end:{kBCFzs:"xv0y7cv",kjj79g:"x7v6yn8",keTefX:"x1uq2ew1",$$css:true},frame:{"--composer-max-rows":"x1xydwir xx2xmjc","--composer-min-rows":"x37a3tf xic22q3","--composer-padding":"x1x20h7e",kGNEyG:"xyg4dbn x13iwyz6",kVAM5u:"x1mpj4at x155xxfk",kGVxlE:"x10ilepr",kB7OPa:"x9f619",kkrTdU:"x1ed109x",k1xSpc:"x1hr9ey5 x78zum5",kXwgrk:"xdt5ytf",kumcoG:"x126v9vc",k9llMU:"x1d6wznv",kAzted:"x2lwn1j",k7Eaqz:"xeuugli",kSiTet:"x1oebp99 x1hc1fzr",kGO01o:"x1ibyohj",kwRFfy:"x98mbmy",kZCmMZ:"xmdlf1d",kLKAdn:"x1tybij7",kVAEAm:"x1n2onr6",k1ekBW:"x12zzom9",kzqmXN:"xh8yej3",$$css:true},group:{kwnvtZ:"x1a02dak",kOIVth:"x13hh4mm",kbNqZ1:"xdk1yc6",$$css:true},icon:{k1xSpc:"xt0psk2",khDVqt:"xuxw1ft",$$css:true},input:{kxBb7d:"x1ywmx03",kgeoSG:"x6w7v62 xnahlnb",km8f2m:"xkk1bqk",kEoFBp:"x1hmns74",k8Qsv1:"x10l60j5",kysU6D:"xjyslct",kWkggS:"xjbqb8w",kMzoRj:"xc342km",kB7OPa:"x9f619",kMwMTN:"x1heor9g",k1xSpc:"x1lliihq",kMv6JI:"xjb2p0i",kGuDYH:"x12ama9c",k63SB2:"x1lo1l87",kLWn49:"x1rn0pvf",k7Eaqz:"xeuugli",kI3sdo:"x1a2a7pz",kHjlTd:"xj0a0fe",k8WAf4:"x1lmimt7",kwRFfy:"xrw0n5k",kZCmMZ:"xpuzrt6",kVAEAm:"x1n2onr6",kHenm0:"xtt52l0",khDVqt:"x126k92a",kzqmXN:"xh8yej3",$$css:true},item:{kGNEyG:"x6s0dn4",kWkggS:"x1qtvqpc xjbqb8w",kaIpWk:"x2b34ud",kMzoRj:"xc342km",kMwMTN:"x1tnz15l x14tvo57",kkrTdU:"xt0e3qv",k1xSpc:"x78zum5",kMv6JI:"xjb2p0i",kOIVth:"xp4ho6d",kAzted:"x1in32aq",kSiTet:"x1oebp99 x1hc1fzr",kI3sdo:"x1a2a7pz",k8WAf4:"x1lmimt7",kg3NbH:"xb5xqfq",k9WMMc:"x1yc453h",kfSwDN:"x87ps6o",kzqmXN:"xh8yej3",$$css:true},list:{kHjlTd:"xj0a0fe",kmVPX3:"x1btfdvn",k2VNRW:"xzdc7cb",$$css:true},listScroll:{kskxy:"x8mbr27",kAzted:"x2lwn1j",$$css:true},popup:{kWkggS:"xui3q9s",kGVxlE:"x1mhlhek",ks0D6T:"x7k7lee",kSiTet:"xiyypsa x1hw7zpd x1hc1fzr",kI3sdo:"x1a2a7pz",k3aq6I:"x8o36ph x1nvizax x1c071of",k1ekBW:"x6o7n8i",kzqmXN:"x1hhjr3y",$$css:true},positioner:{kzqmXN:"x1hhjr3y",kY2c9j:"xa9119d",$$css:true},scroll:{kfmiAY:"xu25z0z",krdFHd:"x1fmog5m",kBCFzs:"xheteqw",kbNqZ1:"x1oea0wp",kAzted:"x2lwn1j",k7Eaqz:"xeuugli",kLKAdn:"xkvoga1",$$css:true},scrollbar:{kg3NbH:"x1gbt3hs",kzqmXN:"xrkia0p",$$css:true},start:{kBCFzs:"xq4xcwx",k71WvV:"x1c9zpoa",$$css:true},status:{kGNEyG:"x6s0dn4",kMwMTN:"x125omll",k1xSpc:"x78zum5",kGuDYH:"xlh8hku",kOIVth:"xp4ho6d",kjj79g:"x1qughib",k8WAf4:"x391bbb",kg3NbH:"xy7odpl",$$css:true},thumb:{kWkggS:"x1jhsfs9",kaIpWk:"x10hpsqq",$$css:true},token:{keMLs9:"xyh5bb9",kMwMTN:"xdnyjpo",kkrTdU:"xt0e3qv",k63SB2:"xuku2lm",kHjlTd:"xj0a0fe",kXLuUW:"x11njtxf",$$css:true}};const recipes={actions:[shared.row,slots.actions],chip:[slots.chip],end:[slots.end],frame:[shared.surface,shared.motion,slots.frame],group:[shared.row,slots.group],icon:[slots.icon],input:[slots.input],item:[shared.smallText,slots.item],list:[slots.list],listScroll:[slots.listScroll],popup:[shared.surface,shared.motion,slots.popup],positioner:[slots.positioner],scroll:[slots.scroll],scrollbar:[slots.scrollbar],start:[slots.start],status:[slots.status],thumb:[slots.thumb],token:[slots.token]};export function presentation(...names){return props(names.map(name=>recipes[name]));}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Autocomplete } from "@base-ui/react/autocomplete";
|
|
2
|
+
import type { ComposerEditorController, UseComposerEditorOptions } from "./composer-options";
|
|
3
|
+
import type { ComposerValue } from "./composer-value";
|
|
4
|
+
export declare function useComposerEditor(options: UseComposerEditorOptions, resetValue?: ComposerValue): ComposerEditorController;
|
|
5
|
+
export declare const useComposerFilter: typeof Autocomplete.useFilter;
|
|
6
|
+
export { getComposerText } from "./composer-document";
|
|
7
|
+
export type { ComposerChangeDetails, ComposerEditorController, UseComposerEditorOptions, } from "./composer-options";
|
|
8
|
+
export type { ComposerItemValue, ComposerPart, ComposerQuery, ComposerTokenPart, ComposerTrigger, ComposerTriggerState, ComposerValue, } from "./composer-value";
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
"use client";import{Autocomplete}from"@base-ui/react/autocomplete";import{useCallback,useState,useSyncExternalStore}from"react";import{getComposerText,getFilteredItems,hasVisibleItems}from"./composer-document";import{ComposerSession}from"./composer-session";const EMPTY=[];function editorState(options,view){const disabled=options.disabled??false;const readOnly=options.readOnly??false;const editable=!(disabled||readOnly||view.composing);return{canSubmit:editable&&!options.submitDisabled&&(!!options.allowEmpty||!!getComposerText(options.value).trim()),disabled,editable,isComposing:view.composing,isEmpty:!getComposerText(options.value),isTextarea:view.textarea,readOnly,value:options.value};}function inputProps(session,state){return{"aria-disabled":state.disabled||undefined,"aria-multiline":true,"aria-readonly":state.readOnly||undefined,contentEditable:state.isTextarea?undefined:!(state.disabled||state.readOnly),onBlur:session.blur,onClick:session.refreshQuery,onCompositionEnd:session.endComposition,onCompositionStart:session.startComposition,onCopy:session.copy,onCut:session.cut,onDrop:session.drop,onInput:session.inputChanged,onKeyDown:session.keyDown,onKeyUp(event){if(!(event.defaultPrevented||state.isComposing)){session.refreshQuery();}},onPaste:session.paste,ref:session.bind,role:"textbox",suppressContentEditableWarning:true,tabIndex:state.disabled?-1:0};}export function useComposerEditor(options,resetValue=EMPTY){const[session]=useState(()=>new ComposerSession(options));const view=useSyncExternalStore(session.subscribe,session.getSnapshot,session.getServerSnapshot);const{contains}=useComposerFilter();const trigger=options.triggers?.find(({character})=>character===view.query?.character);const items=getFilteredItems(trigger,view.query,contains);const state=editorState(options,view);const enabled=suggestionsEnabled(state.editable,view,options);const syncRootRef=useCallback(root=>{if(!root){return;}session.commit(options,resetValue);return session.bindRoot(root);},[session,options,resetValue]);return{...state,formProps:{onSubmit(event){if(event.defaultPrevented||event.target!==event.currentTarget){return;}event.preventDefault();session.performSubmit();}},inputProps:inputProps(session,state),insertTrigger:session.insertTrigger,reset:session.reset,rootRef:session.rootRef,status:trigger?.status??"ready",submit:session.submit,suggestions:{enabled,items,onItemSelect:session.select,onOpenChange(open){if(!open){session.dismiss();}},open:enabled&&!!view.query&&hasVisibleItems(trigger,items),submitOnEmptySuggestions:options.submitOnEmptySuggestions??false},syncRootRef,tokenHosts:view.hosts};}export const useComposerFilter=Autocomplete.useFilter;// biome-ignore lint/performance/noBarrelFile: Preserve public Composer exports.
|
|
2
|
+
export{getComposerText}from"./composer-document";function suggestionsEnabled(editable,view,options){return editable&&!view.textarea&&!!options.triggers?.length;}
|