@vendoai/ui 0.4.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 +202 -0
- package/README.md +7 -0
- package/dist/chrome/activity-ledger.d.ts +14 -0
- package/dist/chrome/activity-ledger.d.ts.map +1 -0
- package/dist/chrome/activity-ledger.js +40 -0
- package/dist/chrome/activity-ledger.js.map +1 -0
- package/dist/chrome/activity-panel.d.ts +7 -0
- package/dist/chrome/activity-panel.d.ts.map +1 -0
- package/dist/chrome/activity-panel.js +27 -0
- package/dist/chrome/activity-panel.js.map +1 -0
- package/dist/chrome/activity-semantics.d.ts +42 -0
- package/dist/chrome/activity-semantics.d.ts.map +1 -0
- package/dist/chrome/activity-semantics.js +119 -0
- package/dist/chrome/activity-semantics.js.map +1 -0
- package/dist/chrome/approval-card.d.ts +22 -0
- package/dist/chrome/approval-card.d.ts.map +1 -0
- package/dist/chrome/approval-card.js +95 -0
- package/dist/chrome/approval-card.js.map +1 -0
- package/dist/chrome/approval-sheet.d.ts +23 -0
- package/dist/chrome/approval-sheet.d.ts.map +1 -0
- package/dist/chrome/approval-sheet.js +72 -0
- package/dist/chrome/approval-sheet.js.map +1 -0
- package/dist/chrome/automations-panel.d.ts +3 -0
- package/dist/chrome/automations-panel.d.ts.map +1 -0
- package/dist/chrome/automations-panel.js +305 -0
- package/dist/chrome/automations-panel.js.map +1 -0
- package/dist/chrome/build-beat.d.ts +70 -0
- package/dist/chrome/build-beat.d.ts.map +1 -0
- package/dist/chrome/build-beat.js +101 -0
- package/dist/chrome/build-beat.js.map +1 -0
- package/dist/chrome/chrome-css.d.ts +7 -0
- package/dist/chrome/chrome-css.d.ts.map +1 -0
- package/dist/chrome/chrome-css.js +2042 -0
- package/dist/chrome/chrome-css.js.map +1 -0
- package/dist/chrome/chrome-root.d.ts +13 -0
- package/dist/chrome/chrome-root.d.ts.map +1 -0
- package/dist/chrome/chrome-root.js +39 -0
- package/dist/chrome/chrome-root.js.map +1 -0
- package/dist/chrome/clipboard.d.ts +4 -0
- package/dist/chrome/clipboard.d.ts.map +1 -0
- package/dist/chrome/clipboard.js +49 -0
- package/dist/chrome/clipboard.js.map +1 -0
- package/dist/chrome/connect-card.d.ts +19 -0
- package/dist/chrome/connect-card.d.ts.map +1 -0
- package/dist/chrome/connect-card.js +57 -0
- package/dist/chrome/connect-card.js.map +1 -0
- package/dist/chrome/connect-dock.d.ts +25 -0
- package/dist/chrome/connect-dock.d.ts.map +1 -0
- package/dist/chrome/connect-dock.js +192 -0
- package/dist/chrome/connect-dock.js.map +1 -0
- package/dist/chrome/connected-accounts-panel.d.ts +14 -0
- package/dist/chrome/connected-accounts-panel.d.ts.map +1 -0
- package/dist/chrome/connected-accounts-panel.js +157 -0
- package/dist/chrome/connected-accounts-panel.js.map +1 -0
- package/dist/chrome/dev-mode.d.ts +5 -0
- package/dist/chrome/dev-mode.d.ts.map +1 -0
- package/dist/chrome/dev-mode.js +7 -0
- package/dist/chrome/dev-mode.js.map +1 -0
- package/dist/chrome/discoverability.d.ts +33 -0
- package/dist/chrome/discoverability.d.ts.map +1 -0
- package/dist/chrome/discoverability.js +63 -0
- package/dist/chrome/discoverability.js.map +1 -0
- package/dist/chrome/embeds.d.ts +21 -0
- package/dist/chrome/embeds.d.ts.map +1 -0
- package/dist/chrome/embeds.js +181 -0
- package/dist/chrome/embeds.js.map +1 -0
- package/dist/chrome/fluid-thinking.d.ts +15 -0
- package/dist/chrome/fluid-thinking.d.ts.map +1 -0
- package/dist/chrome/fluid-thinking.js +37 -0
- package/dist/chrome/fluid-thinking.js.map +1 -0
- package/dist/chrome/humanize.d.ts +46 -0
- package/dist/chrome/humanize.d.ts.map +1 -0
- package/dist/chrome/humanize.js +104 -0
- package/dist/chrome/humanize.js.map +1 -0
- package/dist/chrome/index.d.ts +39 -0
- package/dist/chrome/index.d.ts.map +1 -0
- package/dist/chrome/index.js +38 -0
- package/dist/chrome/index.js.map +1 -0
- package/dist/chrome/markdown.d.ts +23 -0
- package/dist/chrome/markdown.d.ts.map +1 -0
- package/dist/chrome/markdown.js +149 -0
- package/dist/chrome/markdown.js.map +1 -0
- package/dist/chrome/morph-toast.d.ts +43 -0
- package/dist/chrome/morph-toast.d.ts.map +1 -0
- package/dist/chrome/morph-toast.js +89 -0
- package/dist/chrome/morph-toast.js.map +1 -0
- package/dist/chrome/no-policy-notice.d.ts +8 -0
- package/dist/chrome/no-policy-notice.d.ts.map +1 -0
- package/dist/chrome/no-policy-notice.js +18 -0
- package/dist/chrome/no-policy-notice.js.map +1 -0
- package/dist/chrome/onest-font.gen.d.ts +10 -0
- package/dist/chrome/onest-font.gen.d.ts.map +1 -0
- package/dist/chrome/onest-font.gen.js +10 -0
- package/dist/chrome/onest-font.gen.js.map +1 -0
- package/dist/chrome/overlay-registry.d.ts +66 -0
- package/dist/chrome/overlay-registry.d.ts.map +1 -0
- package/dist/chrome/overlay-registry.js +103 -0
- package/dist/chrome/overlay-registry.js.map +1 -0
- package/dist/chrome/palette-hotkey.d.ts +42 -0
- package/dist/chrome/palette-hotkey.d.ts.map +1 -0
- package/dist/chrome/palette-hotkey.js +91 -0
- package/dist/chrome/palette-hotkey.js.map +1 -0
- package/dist/chrome/policy-notice-body.d.ts +3 -0
- package/dist/chrome/policy-notice-body.d.ts.map +1 -0
- package/dist/chrome/policy-notice-body.js +6 -0
- package/dist/chrome/policy-notice-body.js.map +1 -0
- package/dist/chrome/takeover-portal.d.ts +16 -0
- package/dist/chrome/takeover-portal.d.ts.map +1 -0
- package/dist/chrome/takeover-portal.js +21 -0
- package/dist/chrome/takeover-portal.js.map +1 -0
- package/dist/chrome/thread/attachments.d.ts +24 -0
- package/dist/chrome/thread/attachments.d.ts.map +1 -0
- package/dist/chrome/thread/attachments.js +50 -0
- package/dist/chrome/thread/attachments.js.map +1 -0
- package/dist/chrome/thread/composer.d.ts +63 -0
- package/dist/chrome/thread/composer.d.ts.map +1 -0
- package/dist/chrome/thread/composer.js +259 -0
- package/dist/chrome/thread/composer.js.map +1 -0
- package/dist/chrome/thread/index.d.ts +41 -0
- package/dist/chrome/thread/index.d.ts.map +1 -0
- package/dist/chrome/thread/index.js +258 -0
- package/dist/chrome/thread/index.js.map +1 -0
- package/dist/chrome/thread/message-data.d.ts +35 -0
- package/dist/chrome/thread/message-data.d.ts.map +1 -0
- package/dist/chrome/thread/message-data.js +127 -0
- package/dist/chrome/thread/message-data.js.map +1 -0
- package/dist/chrome/thread/message-list.d.ts +30 -0
- package/dist/chrome/thread/message-list.d.ts.map +1 -0
- package/dist/chrome/thread/message-list.js +11 -0
- package/dist/chrome/thread/message-list.js.map +1 -0
- package/dist/chrome/thread/message.d.ts +18 -0
- package/dist/chrome/thread/message.d.ts.map +1 -0
- package/dist/chrome/thread/message.js +57 -0
- package/dist/chrome/thread/message.js.map +1 -0
- package/dist/chrome/thread/parts.d.ts +53 -0
- package/dist/chrome/thread/parts.d.ts.map +1 -0
- package/dist/chrome/thread/parts.js +184 -0
- package/dist/chrome/thread/parts.js.map +1 -0
- package/dist/chrome/thread/scrolling.d.ts +26 -0
- package/dist/chrome/thread/scrolling.d.ts.map +1 -0
- package/dist/chrome/thread/scrolling.js +214 -0
- package/dist/chrome/thread/scrolling.js.map +1 -0
- package/dist/chrome/truncate.d.ts +12 -0
- package/dist/chrome/truncate.d.ts.map +1 -0
- package/dist/chrome/truncate.js +18 -0
- package/dist/chrome/truncate.js.map +1 -0
- package/dist/chrome/vendo-activities.d.ts +24 -0
- package/dist/chrome/vendo-activities.d.ts.map +1 -0
- package/dist/chrome/vendo-activities.js +38 -0
- package/dist/chrome/vendo-activities.js.map +1 -0
- package/dist/chrome/vendo-overlay.d.ts +63 -0
- package/dist/chrome/vendo-overlay.d.ts.map +1 -0
- package/dist/chrome/vendo-overlay.js +256 -0
- package/dist/chrome/vendo-overlay.js.map +1 -0
- package/dist/chrome/vendo-page.d.ts +3 -0
- package/dist/chrome/vendo-page.d.ts.map +1 -0
- package/dist/chrome/vendo-page.js +162 -0
- package/dist/chrome/vendo-page.js.map +1 -0
- package/dist/chrome/vendo-palette.d.ts +29 -0
- package/dist/chrome/vendo-palette.d.ts.map +1 -0
- package/dist/chrome/vendo-palette.js +95 -0
- package/dist/chrome/vendo-palette.js.map +1 -0
- package/dist/chrome/vendo-slot.d.ts +79 -0
- package/dist/chrome/vendo-slot.d.ts.map +1 -0
- package/dist/chrome/vendo-slot.js +153 -0
- package/dist/chrome/vendo-slot.js.map +1 -0
- package/dist/chrome/vendo-toasts.d.ts +40 -0
- package/dist/chrome/vendo-toasts.d.ts.map +1 -0
- package/dist/chrome/vendo-toasts.js +135 -0
- package/dist/chrome/vendo-toasts.js.map +1 -0
- package/dist/chrome/vendo-trigger.d.ts +24 -0
- package/dist/chrome/vendo-trigger.d.ts.map +1 -0
- package/dist/chrome/vendo-trigger.js +30 -0
- package/dist/chrome/vendo-trigger.js.map +1 -0
- package/dist/chrome/waiting-queue.d.ts +8 -0
- package/dist/chrome/waiting-queue.d.ts.map +1 -0
- package/dist/chrome/waiting-queue.js +21 -0
- package/dist/chrome/waiting-queue.js.map +1 -0
- package/dist/client-impl.d.ts +4 -0
- package/dist/client-impl.d.ts.map +1 -0
- package/dist/client-impl.js +160 -0
- package/dist/client-impl.js.map +1 -0
- package/dist/client.d.ts +136 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +2 -0
- package/dist/client.js.map +1 -0
- package/dist/context.d.ts +97 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +71 -0
- package/dist/context.js.map +1 -0
- package/dist/eject-templates/activities/index.tsx +113 -0
- package/dist/eject-templates/templates.json +29 -0
- package/dist/eject-templates/thread/attachments.tsx +69 -0
- package/dist/eject-templates/thread/composer.tsx +409 -0
- package/dist/eject-templates/thread/index.tsx +422 -0
- package/dist/eject-templates/thread/message-data.ts +151 -0
- package/dist/eject-templates/thread/message-list.tsx +123 -0
- package/dist/eject-templates/thread/message.tsx +149 -0
- package/dist/eject-templates/thread/parts.tsx +293 -0
- package/dist/eject-templates/thread/scrolling.ts +223 -0
- package/dist/embeds.d.ts +28 -0
- package/dist/embeds.d.ts.map +1 -0
- package/dist/embeds.js +2 -0
- package/dist/embeds.js.map +1 -0
- package/dist/hooks/index.d.ts +18 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +19 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/scripted-transport.d.ts +44 -0
- package/dist/hooks/scripted-transport.d.ts.map +1 -0
- package/dist/hooks/scripted-transport.js +58 -0
- package/dist/hooks/scripted-transport.js.map +1 -0
- package/dist/hooks/use-activity.d.ts +17 -0
- package/dist/hooks/use-activity.d.ts.map +1 -0
- package/dist/hooks/use-activity.js +50 -0
- package/dist/hooks/use-activity.js.map +1 -0
- package/dist/hooks/use-app.d.ts +19 -0
- package/dist/hooks/use-app.d.ts.map +1 -0
- package/dist/hooks/use-app.js +66 -0
- package/dist/hooks/use-app.js.map +1 -0
- package/dist/hooks/use-approvals.d.ts +13 -0
- package/dist/hooks/use-approvals.d.ts.map +1 -0
- package/dist/hooks/use-approvals.js +14 -0
- package/dist/hooks/use-approvals.js.map +1 -0
- package/dist/hooks/use-apps.d.ts +17 -0
- package/dist/hooks/use-apps.d.ts.map +1 -0
- package/dist/hooks/use-apps.js +30 -0
- package/dist/hooks/use-apps.js.map +1 -0
- package/dist/hooks/use-automations.d.ts +25 -0
- package/dist/hooks/use-automations.d.ts.map +1 -0
- package/dist/hooks/use-automations.js +30 -0
- package/dist/hooks/use-automations.js.map +1 -0
- package/dist/hooks/use-connections.d.ts +12 -0
- package/dist/hooks/use-connections.d.ts.map +1 -0
- package/dist/hooks/use-connections.js +15 -0
- package/dist/hooks/use-connections.js.map +1 -0
- package/dist/hooks/use-connector-catalog.d.ts +8 -0
- package/dist/hooks/use-connector-catalog.d.ts.map +1 -0
- package/dist/hooks/use-connector-catalog.js +52 -0
- package/dist/hooks/use-connector-catalog.js.map +1 -0
- package/dist/hooks/use-grants.d.ts +13 -0
- package/dist/hooks/use-grants.d.ts.map +1 -0
- package/dist/hooks/use-grants.js +14 -0
- package/dist/hooks/use-grants.js.map +1 -0
- package/dist/hooks/use-mobile-takeover.d.ts +22 -0
- package/dist/hooks/use-mobile-takeover.d.ts.map +1 -0
- package/dist/hooks/use-mobile-takeover.js +66 -0
- package/dist/hooks/use-mobile-takeover.js.map +1 -0
- package/dist/hooks/use-resource.d.ts +21 -0
- package/dist/hooks/use-resource.d.ts.map +1 -0
- package/dist/hooks/use-resource.js +79 -0
- package/dist/hooks/use-resource.js.map +1 -0
- package/dist/hooks/use-slot-app.d.ts +19 -0
- package/dist/hooks/use-slot-app.d.ts.map +1 -0
- package/dist/hooks/use-slot-app.js +18 -0
- package/dist/hooks/use-slot-app.js.map +1 -0
- package/dist/hooks/use-threads.d.ts +16 -0
- package/dist/hooks/use-threads.d.ts.map +1 -0
- package/dist/hooks/use-threads.js +15 -0
- package/dist/hooks/use-threads.js.map +1 -0
- package/dist/hooks/use-vendo-overlay.d.ts +31 -0
- package/dist/hooks/use-vendo-overlay.d.ts.map +1 -0
- package/dist/hooks/use-vendo-overlay.js +23 -0
- package/dist/hooks/use-vendo-overlay.js.map +1 -0
- package/dist/hooks/use-vendo-status.d.ts +6 -0
- package/dist/hooks/use-vendo-status.d.ts.map +1 -0
- package/dist/hooks/use-vendo-status.js +28 -0
- package/dist/hooks/use-vendo-status.js.map +1 -0
- package/dist/hooks/use-vendo-thread.d.ts +39 -0
- package/dist/hooks/use-vendo-thread.d.ts.map +1 -0
- package/dist/hooks/use-vendo-thread.js +185 -0
- package/dist/hooks/use-vendo-thread.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/kit/charts/bar.d.ts +16 -0
- package/dist/kit/charts/bar.d.ts.map +1 -0
- package/dist/kit/charts/bar.js +21 -0
- package/dist/kit/charts/bar.js.map +1 -0
- package/dist/kit/charts/donut.d.ts +16 -0
- package/dist/kit/charts/donut.d.ts.map +1 -0
- package/dist/kit/charts/donut.js +17 -0
- package/dist/kit/charts/donut.js.map +1 -0
- package/dist/kit/charts/line.d.ts +19 -0
- package/dist/kit/charts/line.d.ts.map +1 -0
- package/dist/kit/charts/line.js +21 -0
- package/dist/kit/charts/line.js.map +1 -0
- package/dist/kit/charts/progress.d.ts +12 -0
- package/dist/kit/charts/progress.d.ts.map +1 -0
- package/dist/kit/charts/progress.js +25 -0
- package/dist/kit/charts/progress.js.map +1 -0
- package/dist/kit/charts/sanitize.d.ts +24 -0
- package/dist/kit/charts/sanitize.d.ts.map +1 -0
- package/dist/kit/charts/sanitize.js +50 -0
- package/dist/kit/charts/sanitize.js.map +1 -0
- package/dist/kit/charts/sparkline.d.ts +11 -0
- package/dist/kit/charts/sparkline.d.ts.map +1 -0
- package/dist/kit/charts/sparkline.js +17 -0
- package/dist/kit/charts/sparkline.js.map +1 -0
- package/dist/kit/data/badge.d.ts +13 -0
- package/dist/kit/data/badge.d.ts.map +1 -0
- package/dist/kit/data/badge.js +12 -0
- package/dist/kit/data/badge.js.map +1 -0
- package/dist/kit/data/card-list.d.ts +23 -0
- package/dist/kit/data/card-list.d.ts.map +1 -0
- package/dist/kit/data/card-list.js +43 -0
- package/dist/kit/data/card-list.js.map +1 -0
- package/dist/kit/data/data-table.d.ts +32 -0
- package/dist/kit/data/data-table.d.ts.map +1 -0
- package/dist/kit/data/data-table.js +153 -0
- package/dist/kit/data/data-table.js.map +1 -0
- package/dist/kit/data/stat.d.ts +15 -0
- package/dist/kit/data/stat.d.ts.map +1 -0
- package/dist/kit/data/stat.js +28 -0
- package/dist/kit/data/stat.js.map +1 -0
- package/dist/kit/feedback/accordion.d.ts +15 -0
- package/dist/kit/feedback/accordion.d.ts.map +1 -0
- package/dist/kit/feedback/accordion.js +33 -0
- package/dist/kit/feedback/accordion.js.map +1 -0
- package/dist/kit/feedback/callout.d.ts +13 -0
- package/dist/kit/feedback/callout.d.ts.map +1 -0
- package/dist/kit/feedback/callout.js +24 -0
- package/dist/kit/feedback/callout.js.map +1 -0
- package/dist/kit/feedback/tabs.d.ts +14 -0
- package/dist/kit/feedback/tabs.d.ts.map +1 -0
- package/dist/kit/feedback/tabs.js +37 -0
- package/dist/kit/feedback/tabs.js.map +1 -0
- package/dist/kit/format.d.ts +60 -0
- package/dist/kit/format.d.ts.map +1 -0
- package/dist/kit/format.js +123 -0
- package/dist/kit/format.js.map +1 -0
- package/dist/kit/forms/button.d.ts +17 -0
- package/dist/kit/forms/button.d.ts.map +1 -0
- package/dist/kit/forms/button.js +33 -0
- package/dist/kit/forms/button.js.map +1 -0
- package/dist/kit/forms/checkbox.d.ts +9 -0
- package/dist/kit/forms/checkbox.d.ts.map +1 -0
- package/dist/kit/forms/checkbox.js +9 -0
- package/dist/kit/forms/checkbox.js.map +1 -0
- package/dist/kit/forms/date-picker.d.ts +13 -0
- package/dist/kit/forms/date-picker.d.ts.map +1 -0
- package/dist/kit/forms/date-picker.js +9 -0
- package/dist/kit/forms/date-picker.js.map +1 -0
- package/dist/kit/forms/disclaimer.d.ts +8 -0
- package/dist/kit/forms/disclaimer.d.ts.map +1 -0
- package/dist/kit/forms/disclaimer.js +20 -0
- package/dist/kit/forms/disclaimer.js.map +1 -0
- package/dist/kit/forms/field.d.ts +18 -0
- package/dist/kit/forms/field.d.ts.map +1 -0
- package/dist/kit/forms/field.js +19 -0
- package/dist/kit/forms/field.js.map +1 -0
- package/dist/kit/forms/form.d.ts +10 -0
- package/dist/kit/forms/form.d.ts.map +1 -0
- package/dist/kit/forms/form.js +9 -0
- package/dist/kit/forms/form.js.map +1 -0
- package/dist/kit/forms/input.d.ts +14 -0
- package/dist/kit/forms/input.d.ts.map +1 -0
- package/dist/kit/forms/input.js +9 -0
- package/dist/kit/forms/input.js.map +1 -0
- package/dist/kit/forms/select.d.ts +21 -0
- package/dist/kit/forms/select.d.ts.map +1 -0
- package/dist/kit/forms/select.js +35 -0
- package/dist/kit/forms/select.js.map +1 -0
- package/dist/kit/forms/textarea.d.ts +12 -0
- package/dist/kit/forms/textarea.d.ts.map +1 -0
- package/dist/kit/forms/textarea.js +9 -0
- package/dist/kit/forms/textarea.js.map +1 -0
- package/dist/kit/index.d.ts +42 -0
- package/dist/kit/index.d.ts.map +1 -0
- package/dist/kit/index.js +45 -0
- package/dist/kit/index.js.map +1 -0
- package/dist/kit/kit-prompt.d.ts +7 -0
- package/dist/kit/kit-prompt.d.ts.map +1 -0
- package/dist/kit/kit-prompt.js +7 -0
- package/dist/kit/kit-prompt.js.map +1 -0
- package/dist/kit/layout.d.ts +29 -0
- package/dist/kit/layout.d.ts.map +1 -0
- package/dist/kit/layout.js +64 -0
- package/dist/kit/layout.js.map +1 -0
- package/dist/kit/registry.d.ts +11 -0
- package/dist/kit/registry.d.ts.map +1 -0
- package/dist/kit/registry.js +34 -0
- package/dist/kit/registry.js.map +1 -0
- package/dist/kit/schema.d.ts +9 -0
- package/dist/kit/schema.d.ts.map +1 -0
- package/dist/kit/schema.js +9 -0
- package/dist/kit/schema.js.map +1 -0
- package/dist/kit/tokens.d.ts +33 -0
- package/dist/kit/tokens.d.ts.map +1 -0
- package/dist/kit/tokens.js +48 -0
- package/dist/kit/tokens.js.map +1 -0
- package/dist/kit/values.d.ts +55 -0
- package/dist/kit/values.d.ts.map +1 -0
- package/dist/kit/values.js +108 -0
- package/dist/kit/values.js.map +1 -0
- package/dist/theme.d.ts +25 -0
- package/dist/theme.d.ts.map +1 -0
- package/dist/theme.js +100 -0
- package/dist/theme.js.map +1 -0
- package/dist/tree/bindings.d.ts +4 -0
- package/dist/tree/bindings.d.ts.map +1 -0
- package/dist/tree/bindings.js +20 -0
- package/dist/tree/bindings.js.map +1 -0
- package/dist/tree/branded.d.ts +124 -0
- package/dist/tree/branded.d.ts.map +1 -0
- package/dist/tree/branded.js +319 -0
- package/dist/tree/branded.js.map +1 -0
- package/dist/tree/error-boundary.d.ts +22 -0
- package/dist/tree/error-boundary.d.ts.map +1 -0
- package/dist/tree/error-boundary.js +25 -0
- package/dist/tree/error-boundary.js.map +1 -0
- package/dist/tree/fluid-reveal.d.ts +22 -0
- package/dist/tree/fluid-reveal.d.ts.map +1 -0
- package/dist/tree/fluid-reveal.js +28 -0
- package/dist/tree/fluid-reveal.js.map +1 -0
- package/dist/tree/forming-skeleton.d.ts +14 -0
- package/dist/tree/forming-skeleton.d.ts.map +1 -0
- package/dist/tree/forming-skeleton.js +36 -0
- package/dist/tree/forming-skeleton.js.map +1 -0
- package/dist/tree/frames.d.ts +52 -0
- package/dist/tree/frames.d.ts.map +1 -0
- package/dist/tree/frames.js +143 -0
- package/dist/tree/frames.js.map +1 -0
- package/dist/tree/host-mount.d.ts +24 -0
- package/dist/tree/host-mount.d.ts.map +1 -0
- package/dist/tree/host-mount.js +0 -0
- package/dist/tree/host-mount.js.map +1 -0
- package/dist/tree/index.d.ts +9 -0
- package/dist/tree/index.d.ts.map +1 -0
- package/dist/tree/index.js +9 -0
- package/dist/tree/index.js.map +1 -0
- package/dist/tree/jail/JailedComponent.d.ts +41 -0
- package/dist/tree/jail/JailedComponent.d.ts.map +1 -0
- package/dist/tree/jail/JailedComponent.js +269 -0
- package/dist/tree/jail/JailedComponent.js.map +1 -0
- package/dist/tree/jail/runtime-bundle.gen.d.ts +3 -0
- package/dist/tree/jail/runtime-bundle.gen.d.ts.map +1 -0
- package/dist/tree/jail/runtime-bundle.gen.js +3 -0
- package/dist/tree/jail/runtime-bundle.gen.js.map +1 -0
- package/dist/tree/jail/runtime-entry.d.ts +18 -0
- package/dist/tree/jail/runtime-entry.d.ts.map +1 -0
- package/dist/tree/jail/runtime-entry.js +440 -0
- package/dist/tree/jail/runtime-entry.js.map +1 -0
- package/dist/tree/jail/viewport-css.d.ts +17 -0
- package/dist/tree/jail/viewport-css.d.ts.map +1 -0
- package/dist/tree/jail/viewport-css.js +32 -0
- package/dist/tree/jail/viewport-css.js.map +1 -0
- package/dist/tree/mcp-shim/entry.d.ts +2 -0
- package/dist/tree/mcp-shim/entry.d.ts.map +1 -0
- package/dist/tree/mcp-shim/entry.js +45 -0
- package/dist/tree/mcp-shim/entry.js.map +1 -0
- package/dist/tree/mcp-shim/http-open-card.d.ts +5 -0
- package/dist/tree/mcp-shim/http-open-card.d.ts.map +1 -0
- package/dist/tree/mcp-shim/http-open-card.js +61 -0
- package/dist/tree/mcp-shim/http-open-card.js.map +1 -0
- package/dist/tree/mcp-shim/shim-core.d.ts +58 -0
- package/dist/tree/mcp-shim/shim-core.d.ts.map +1 -0
- package/dist/tree/mcp-shim/shim-core.js +176 -0
- package/dist/tree/mcp-shim/shim-core.js.map +1 -0
- package/dist/tree/mcp-shim/theme.d.ts +8 -0
- package/dist/tree/mcp-shim/theme.d.ts.map +1 -0
- package/dist/tree/mcp-shim/theme.js +36 -0
- package/dist/tree/mcp-shim/theme.js.map +1 -0
- package/dist/tree/notice.d.ts +8 -0
- package/dist/tree/notice.d.ts.map +1 -0
- package/dist/tree/notice.js +30 -0
- package/dist/tree/notice.js.map +1 -0
- package/dist/tree/primitives.d.ts +30 -0
- package/dist/tree/primitives.d.ts.map +1 -0
- package/dist/tree/primitives.js +105 -0
- package/dist/tree/primitives.js.map +1 -0
- package/dist/tree/renderer-v2.d.ts +15 -0
- package/dist/tree/renderer-v2.d.ts.map +1 -0
- package/dist/tree/renderer-v2.js +71 -0
- package/dist/tree/renderer-v2.js.map +1 -0
- package/dist/tree/renderer.d.ts +77 -0
- package/dist/tree/renderer.d.ts.map +1 -0
- package/dist/tree/renderer.js +376 -0
- package/dist/tree/renderer.js.map +1 -0
- package/dist/voice/driver.d.ts +94 -0
- package/dist/voice/driver.d.ts.map +1 -0
- package/dist/voice/driver.js +2 -0
- package/dist/voice/driver.js.map +1 -0
- package/dist/voice/index.d.ts +7 -0
- package/dist/voice/index.d.ts.map +1 -0
- package/dist/voice/index.js +5 -0
- package/dist/voice/index.js.map +1 -0
- package/dist/voice/realtime-driver.d.ts +57 -0
- package/dist/voice/realtime-driver.d.ts.map +1 -0
- package/dist/voice/realtime-driver.js +592 -0
- package/dist/voice/realtime-driver.js.map +1 -0
- package/dist/voice/stage.d.ts +12 -0
- package/dist/voice/stage.d.ts.map +1 -0
- package/dist/voice/stage.js +259 -0
- package/dist/voice/stage.js.map +1 -0
- package/dist/voice/use-voice-approvals.d.ts +16 -0
- package/dist/voice/use-voice-approvals.d.ts.map +1 -0
- package/dist/voice/use-voice-approvals.js +77 -0
- package/dist/voice/use-voice-approvals.js.map +1 -0
- package/dist/voice/use-voice.d.ts +26 -0
- package/dist/voice/use-voice.d.ts.map +1 -0
- package/dist/voice/use-voice.js +201 -0
- package/dist/voice/use-voice.js.map +1 -0
- package/dist/voice/voice-act.d.ts +13 -0
- package/dist/voice/voice-act.d.ts.map +1 -0
- package/dist/voice/voice-act.js +301 -0
- package/dist/voice/voice-act.js.map +1 -0
- package/dist/voice/voice-blob.d.ts +17 -0
- package/dist/voice/voice-blob.d.ts.map +1 -0
- package/dist/voice/voice-blob.js +67 -0
- package/dist/voice/voice-blob.js.map +1 -0
- package/dist/voice/voice-consent.d.ts +17 -0
- package/dist/voice/voice-consent.d.ts.map +1 -0
- package/dist/voice/voice-consent.js +45 -0
- package/dist/voice/voice-consent.js.map +1 -0
- package/dist/voice/voice-drawer.d.ts +10 -0
- package/dist/voice/voice-drawer.d.ts.map +1 -0
- package/dist/voice/voice-drawer.js +22 -0
- package/dist/voice/voice-drawer.js.map +1 -0
- package/dist/wire-types.d.ts +238 -0
- package/dist/wire-types.d.ts.map +1 -0
- package/dist/wire-types.js +2 -0
- package/dist/wire-types.js.map +1 -0
- package/package.json +106 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { UIMessage } from "ai";
|
|
2
|
+
/** A picked File → an ai-SDK FileUIPart (data URL) so it can ride the turn.
|
|
3
|
+
Lane pick 2F — the optional `onProgress` (0..1) feeds the chip's read ring:
|
|
4
|
+
attachments are now read eagerly at attach time (progress visible, failures
|
|
5
|
+
surfaced per-chip with retry) instead of silently at send time. */
|
|
6
|
+
export declare function fileToPart(file: File, onProgress?: (fraction: number) => void): Promise<{
|
|
7
|
+
type: "file";
|
|
8
|
+
mediaType: string;
|
|
9
|
+
filename: string;
|
|
10
|
+
url: string;
|
|
11
|
+
}>;
|
|
12
|
+
/** The `.fl-att-ext` badge text — the filename's extension, bounded so a long
|
|
13
|
+
or missing one still reads as a badge. */
|
|
14
|
+
export declare function fileExt(name: string | undefined): string;
|
|
15
|
+
export declare function formatBytes(size: number): string;
|
|
16
|
+
export type FilePart = Extract<UIMessage["parts"][number], {
|
|
17
|
+
type: "file";
|
|
18
|
+
}>;
|
|
19
|
+
/** ENG-225 — a sent attachment in the transcript: images render as the designed
|
|
20
|
+
`.fl-msg-img` thumbnail, anything else as a `.fl-msg-file` download pill. */
|
|
21
|
+
export declare function SentAttachment({ part }: {
|
|
22
|
+
part: FilePart;
|
|
23
|
+
}): import("react").JSX.Element;
|
|
24
|
+
//# sourceMappingURL=attachments.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachments.d.ts","sourceRoot":"","sources":["../../../src/chrome/thread/attachments.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC;AAEpC;;;sEAGsE;AACtE,wBAAgB,UAAU,CACxB,IAAI,EAAE,IAAI,EACV,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,GACtC,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CAoB7E;AAED;6CAC6C;AAC7C,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAGxD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIhD;AAED,MAAM,MAAM,QAAQ,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC;AAE7E;gFACgF;AAChF,wBAAgB,cAAc,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,+BAe1D"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/** A picked File → an ai-SDK FileUIPart (data URL) so it can ride the turn.
|
|
3
|
+
Lane pick 2F — the optional `onProgress` (0..1) feeds the chip's read ring:
|
|
4
|
+
attachments are now read eagerly at attach time (progress visible, failures
|
|
5
|
+
surfaced per-chip with retry) instead of silently at send time. */
|
|
6
|
+
export function fileToPart(file, onProgress) {
|
|
7
|
+
return new Promise((resolve, reject) => {
|
|
8
|
+
const reader = new FileReader();
|
|
9
|
+
reader.onerror = () => reject(reader.error ?? new Error("file read failed"));
|
|
10
|
+
if (onProgress) {
|
|
11
|
+
reader.onprogress = event => {
|
|
12
|
+
if (event.lengthComputable && event.total > 0)
|
|
13
|
+
onProgress(event.loaded / event.total);
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
reader.onload = () => {
|
|
17
|
+
onProgress?.(1);
|
|
18
|
+
resolve({
|
|
19
|
+
type: "file",
|
|
20
|
+
mediaType: file.type || "application/octet-stream",
|
|
21
|
+
filename: file.name,
|
|
22
|
+
url: String(reader.result),
|
|
23
|
+
});
|
|
24
|
+
};
|
|
25
|
+
reader.readAsDataURL(file);
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
/** The `.fl-att-ext` badge text — the filename's extension, bounded so a long
|
|
29
|
+
or missing one still reads as a badge. */
|
|
30
|
+
export function fileExt(name) {
|
|
31
|
+
const ext = name?.match(/\.([a-z0-9]+)$/i)?.[1];
|
|
32
|
+
return (ext ?? "file").slice(0, 4).toUpperCase();
|
|
33
|
+
}
|
|
34
|
+
export function formatBytes(size) {
|
|
35
|
+
if (size < 1024)
|
|
36
|
+
return `${size} B`;
|
|
37
|
+
if (size < 1024 * 1024)
|
|
38
|
+
return `${(size / 1024).toFixed(0)} KB`;
|
|
39
|
+
return `${(size / (1024 * 1024)).toFixed(1)} MB`;
|
|
40
|
+
}
|
|
41
|
+
/** ENG-225 — a sent attachment in the transcript: images render as the designed
|
|
42
|
+
`.fl-msg-img` thumbnail, anything else as a `.fl-msg-file` download pill. */
|
|
43
|
+
export function SentAttachment({ part }) {
|
|
44
|
+
const name = part.filename ?? "attachment";
|
|
45
|
+
if (part.mediaType?.startsWith("image/") === true) {
|
|
46
|
+
return (_jsx("span", { className: "fl-msg-img", children: _jsx("img", { src: part.url, alt: name }) }));
|
|
47
|
+
}
|
|
48
|
+
return (_jsxs("a", { className: "fl-msg-file", href: part.url, download: name, children: [_jsx("span", { className: "fl-att-ext", "aria-hidden": "true", children: fileExt(part.filename) }), _jsx("span", { className: "fl-att-name", children: name })] }));
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=attachments.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachments.js","sourceRoot":"","sources":["../../../src/chrome/thread/attachments.tsx"],"names":[],"mappings":";AAEA;;;sEAGsE;AACtE,MAAM,UAAU,UAAU,CACxB,IAAU,EACV,UAAuC;IAEvC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QACrC,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;QAChC,MAAM,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC,CAAC;QAC7E,IAAI,UAAU,EAAE,CAAC;YACf,MAAM,CAAC,UAAU,GAAG,KAAK,CAAC,EAAE;gBAC1B,IAAI,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,KAAK,GAAG,CAAC;oBAAE,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;YACxF,CAAC,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,MAAM,GAAG,GAAG,EAAE;YACnB,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC;YAChB,OAAO,CAAC;gBACN,IAAI,EAAE,MAAM;gBACZ,SAAS,EAAE,IAAI,CAAC,IAAI,IAAI,0BAA0B;gBAClD,QAAQ,EAAE,IAAI,CAAC,IAAI;gBACnB,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;aAC3B,CAAC,CAAC;QACL,CAAC,CAAC;QACF,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;AACL,CAAC;AAED;6CAC6C;AAC7C,MAAM,UAAU,OAAO,CAAC,IAAwB;IAC9C,MAAM,GAAG,GAAG,IAAI,EAAE,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,IAAI,MAAM,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,IAAI,IAAI,GAAG,IAAI;QAAE,OAAO,GAAG,IAAI,IAAI,CAAC;IACpC,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI;QAAE,OAAO,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;IAChE,OAAO,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;AACnD,CAAC;AAID;gFACgF;AAChF,MAAM,UAAU,cAAc,CAAC,EAAE,IAAI,EAAsB;IACzD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,IAAI,YAAY,CAAC;IAC3C,IAAI,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC;QAClD,OAAO,CACL,eAAM,SAAS,EAAC,YAAY,YAC1B,cAAK,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,GAAI,GAC5B,CACR,CAAC;IACJ,CAAC;IACD,OAAO,CACL,aAAG,SAAS,EAAC,aAAa,EAAC,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,aACvD,eAAM,SAAS,EAAC,YAAY,iBAAa,MAAM,YAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAQ,EAC/E,eAAM,SAAS,EAAC,aAAa,YAAE,IAAI,GAAQ,IACzC,CACL,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { fileToPart } from "./attachments.js";
|
|
2
|
+
/** The message shape the composer commits — mirrors useVendoThread.sendMessage. */
|
|
3
|
+
type OutgoingMessage = {
|
|
4
|
+
text: string;
|
|
5
|
+
files?: Awaited<ReturnType<typeof fileToPart>>[];
|
|
6
|
+
};
|
|
7
|
+
/** Lane pick 2F — one attachment's eager-read lifecycle (drives the chip ring). */
|
|
8
|
+
type AttachmentRead = {
|
|
9
|
+
status: "reading" | "ready" | "error";
|
|
10
|
+
/** 0..1 read progress; meaningful while `reading`. */
|
|
11
|
+
progress: number;
|
|
12
|
+
part?: Awaited<ReturnType<typeof fileToPart>>;
|
|
13
|
+
};
|
|
14
|
+
/** ENG-225 — drag-drop attach: only reacts to drags that actually carry files
|
|
15
|
+
(text selections dragged across the composer must not flash the drop zone).
|
|
16
|
+
Exported for the thread-level drop surface (lane pick 2E). */
|
|
17
|
+
export declare const dragHasFiles: (event: React.DragEvent) => boolean;
|
|
18
|
+
/** All composer state and send/queue mechanics, lifted to the thread level so
|
|
19
|
+
the draft (and queued slot) survive the landing ↔ transcript flip. The
|
|
20
|
+
Composer component below is the matching presentation. */
|
|
21
|
+
export declare function useComposer({ busy, sendMessage }: {
|
|
22
|
+
busy: boolean;
|
|
23
|
+
sendMessage: (message: OutgoingMessage) => unknown;
|
|
24
|
+
}): {
|
|
25
|
+
draft: string;
|
|
26
|
+
setDraft: import("react").Dispatch<import("react").SetStateAction<string>>;
|
|
27
|
+
files: File[];
|
|
28
|
+
setFiles: import("react").Dispatch<import("react").SetStateAction<File[]>>;
|
|
29
|
+
dragDepth: number;
|
|
30
|
+
setDragDepth: import("react").Dispatch<import("react").SetStateAction<number>>;
|
|
31
|
+
attachmentPreviews: Map<File, string>;
|
|
32
|
+
attachmentReads: Map<File, AttachmentRead>;
|
|
33
|
+
retryRead: (file: File) => void;
|
|
34
|
+
dockOpen: boolean;
|
|
35
|
+
setDockOpen: import("react").Dispatch<import("react").SetStateAction<boolean>>;
|
|
36
|
+
dockButtonRef: import("react").RefObject<HTMLButtonElement | null>;
|
|
37
|
+
queued: {
|
|
38
|
+
text: string;
|
|
39
|
+
files: File[];
|
|
40
|
+
} | null;
|
|
41
|
+
setQueued: import("react").Dispatch<import("react").SetStateAction<{
|
|
42
|
+
text: string;
|
|
43
|
+
files: File[];
|
|
44
|
+
} | null>>;
|
|
45
|
+
attachError: string | undefined;
|
|
46
|
+
fileRef: import("react").RefObject<HTMLInputElement | null>;
|
|
47
|
+
textareaRef: import("react").RefObject<HTMLTextAreaElement | null>;
|
|
48
|
+
send: (override?: string) => void;
|
|
49
|
+
};
|
|
50
|
+
export type ComposerApi = ReturnType<typeof useComposer>;
|
|
51
|
+
export interface ComposerProps {
|
|
52
|
+
composer: ComposerApi;
|
|
53
|
+
busy: boolean;
|
|
54
|
+
/** The live transport status + error for the sr-only announcement span. */
|
|
55
|
+
status: string;
|
|
56
|
+
errorMessage?: string;
|
|
57
|
+
onStop: () => void;
|
|
58
|
+
onVoice?: (() => void) | undefined;
|
|
59
|
+
}
|
|
60
|
+
/** The message composer (08-ui §4): attachments, drag-drop, queueing, dock. */
|
|
61
|
+
export declare function Composer({ composer, busy, status, errorMessage, onStop, onVoice }: ComposerProps): import("react").JSX.Element;
|
|
62
|
+
export {};
|
|
63
|
+
//# sourceMappingURL=composer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composer.d.ts","sourceRoot":"","sources":["../../../src/chrome/thread/composer.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAW,UAAU,EAAe,MAAM,kBAAkB,CAAC;AAEpE,mFAAmF;AACnF,KAAK,eAAe,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC,EAAE,CAAA;CAAE,CAAC;AAE1F,mFAAmF;AACnF,KAAK,cAAc,GAAG;IACpB,MAAM,EAAE,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;IACtC,sDAAsD;IACtD,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC,CAAC;CAC/C,CAAC;AAEF;;iEAEiE;AACjE,eAAO,MAAM,YAAY,GAAI,OAAO,KAAK,CAAC,SAAS,YACY,CAAC;AAEhE;;6DAE6D;AAC7D,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE;IACjD,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC;CACpD;;;;;;;;;sBA2C0B,IAAI;;;;;cAmDgB,MAAM;eAAS,IAAI,EAAE;;;cAArB,MAAM;eAAS,IAAI,EAAE;;;;;sBA2BzC,MAAM;EA+EhC;AAED,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAEzD,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,WAAW,CAAC;IACtB,IAAI,EAAE,OAAO,CAAC;IACd,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,OAAO,CAAC,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAAC;CACpC;AAED,+EAA+E;AAC/E,wBAAgB,QAAQ,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,aAAa,+BA+JhG"}
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useContext, useEffect, useRef, useState } from "react";
|
|
3
|
+
import { ConnectDockButton, ConnectTray } from "../connect-dock.js";
|
|
4
|
+
import { PrefillScopeContext, registerPrefillConsumer } from "../overlay-registry.js";
|
|
5
|
+
import { fileExt, fileToPart, formatBytes } from "./attachments.js";
|
|
6
|
+
/** ENG-225 — drag-drop attach: only reacts to drags that actually carry files
|
|
7
|
+
(text selections dragged across the composer must not flash the drop zone).
|
|
8
|
+
Exported for the thread-level drop surface (lane pick 2E). */
|
|
9
|
+
export const dragHasFiles = (event) => Array.from(event.dataTransfer?.types ?? []).includes("Files");
|
|
10
|
+
/** All composer state and send/queue mechanics, lifted to the thread level so
|
|
11
|
+
the draft (and queued slot) survive the landing ↔ transcript flip. The
|
|
12
|
+
Composer component below is the matching presentation. */
|
|
13
|
+
export function useComposer({ busy, sendMessage }) {
|
|
14
|
+
const [draft, setDraft] = useState("");
|
|
15
|
+
const fileRef = useRef(null);
|
|
16
|
+
const textareaRef = useRef(null);
|
|
17
|
+
const [files, setFiles] = useState([]);
|
|
18
|
+
// ENG-225 — drag-drop attach. A depth counter, not a boolean: dragging over
|
|
19
|
+
// the composer's children fires enter/leave pairs for every element crossed.
|
|
20
|
+
const [dragDepth, setDragDepth] = useState(0);
|
|
21
|
+
// ENG-225 — object-URL thumbnails for image attachments in the chip strip.
|
|
22
|
+
// Keyed by File identity; a URL is minted once per file and revoked only when
|
|
23
|
+
// that file leaves the set — never recreated for files still shown (which
|
|
24
|
+
// would briefly point a mounted <img> at a revoked URL, Devin review). The
|
|
25
|
+
// ref mirrors the state so the unmount cleanup revokes the final set.
|
|
26
|
+
const [attachmentPreviews, setAttachmentPreviews] = useState(new Map());
|
|
27
|
+
const previewsRef = useRef(attachmentPreviews);
|
|
28
|
+
previewsRef.current = attachmentPreviews;
|
|
29
|
+
useEffect(() => {
|
|
30
|
+
if (typeof URL.createObjectURL !== "function")
|
|
31
|
+
return;
|
|
32
|
+
setAttachmentPreviews(prev => {
|
|
33
|
+
const next = new Map();
|
|
34
|
+
for (const file of files) {
|
|
35
|
+
if (!file.type.startsWith("image/"))
|
|
36
|
+
continue;
|
|
37
|
+
next.set(file, prev.get(file) ?? URL.createObjectURL(file));
|
|
38
|
+
}
|
|
39
|
+
// Revoke only URLs for files that are no longer attached.
|
|
40
|
+
for (const [file, url] of prev) {
|
|
41
|
+
if (!next.has(file))
|
|
42
|
+
URL.revokeObjectURL(url);
|
|
43
|
+
}
|
|
44
|
+
return next;
|
|
45
|
+
});
|
|
46
|
+
}, [files]);
|
|
47
|
+
// Final cleanup on unmount: revoke whatever is still live.
|
|
48
|
+
useEffect(() => () => {
|
|
49
|
+
for (const url of previewsRef.current.values())
|
|
50
|
+
URL.revokeObjectURL(url);
|
|
51
|
+
}, []);
|
|
52
|
+
// Lane pick 2F — attachments read EAGERLY at attach time. Each file's read
|
|
53
|
+
// progress (FileReader onprogress) drives the chip ring; a failed read marks
|
|
54
|
+
// that chip (inline retry) instead of surfacing only as a text line at send.
|
|
55
|
+
// The finished part is cached so send doesn't re-read. Keyed by File identity,
|
|
56
|
+
// mirroring the previews map; entries leave with their file.
|
|
57
|
+
const [attachmentReads, setAttachmentReads] = useState(new Map());
|
|
58
|
+
const readsRef = useRef(attachmentReads);
|
|
59
|
+
readsRef.current = attachmentReads;
|
|
60
|
+
const startRead = (file) => {
|
|
61
|
+
setAttachmentReads(prev => {
|
|
62
|
+
const next = new Map(prev);
|
|
63
|
+
next.set(file, { status: "reading", progress: 0 });
|
|
64
|
+
return next;
|
|
65
|
+
});
|
|
66
|
+
fileToPart(file, fraction => {
|
|
67
|
+
setAttachmentReads(prev => {
|
|
68
|
+
const current = prev.get(file);
|
|
69
|
+
if (!current || current.status !== "reading")
|
|
70
|
+
return prev;
|
|
71
|
+
const next = new Map(prev);
|
|
72
|
+
next.set(file, { ...current, progress: fraction });
|
|
73
|
+
return next;
|
|
74
|
+
});
|
|
75
|
+
}).then(part => setAttachmentReads(prev => {
|
|
76
|
+
if (!prev.has(file))
|
|
77
|
+
return prev;
|
|
78
|
+
const next = new Map(prev);
|
|
79
|
+
next.set(file, { status: "ready", progress: 1, part });
|
|
80
|
+
return next;
|
|
81
|
+
}), () => setAttachmentReads(prev => {
|
|
82
|
+
if (!prev.has(file))
|
|
83
|
+
return prev;
|
|
84
|
+
const next = new Map(prev);
|
|
85
|
+
next.set(file, { status: "error", progress: 0 });
|
|
86
|
+
return next;
|
|
87
|
+
}));
|
|
88
|
+
};
|
|
89
|
+
useEffect(() => {
|
|
90
|
+
setAttachmentReads(prev => {
|
|
91
|
+
const next = new Map();
|
|
92
|
+
for (const file of files) {
|
|
93
|
+
const existing = prev.get(file);
|
|
94
|
+
if (existing)
|
|
95
|
+
next.set(file, existing);
|
|
96
|
+
}
|
|
97
|
+
return next.size === prev.size && files.every(f => prev.has(f)) ? prev : next;
|
|
98
|
+
});
|
|
99
|
+
for (const file of files) {
|
|
100
|
+
if (!readsRef.current.has(file))
|
|
101
|
+
startRead(file);
|
|
102
|
+
}
|
|
103
|
+
// startRead closes over stable setters only; files is the real trigger.
|
|
104
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
105
|
+
}, [files]);
|
|
106
|
+
// ENG-225 — the connect dock's liquid tray, anchored over the composer.
|
|
107
|
+
const [dockOpen, setDockOpen] = useState(false);
|
|
108
|
+
const dockButtonRef = useRef(null);
|
|
109
|
+
// ENG-215 — a message the user sent DURING a turn: it parks here (visible as a
|
|
110
|
+
// pill) and auto-sends the instant the turn finishes. A single slot — a second
|
|
111
|
+
// send while one is parked replaces it — because there is only ever one "next"
|
|
112
|
+
// turn. Stop stays the explicit interrupt; queueing never cancels the stream.
|
|
113
|
+
const [queued, setQueued] = useState(null);
|
|
114
|
+
const [attachError, setAttachError] = useState();
|
|
115
|
+
// ENG-215 — commit a turn to the transport (attachment parts come from the
|
|
116
|
+
// eager-read cache when ready, else a fresh read). Used both by an immediate
|
|
117
|
+
// send and by the deferred flush of a queued message.
|
|
118
|
+
const dispatch = (text, pending) => {
|
|
119
|
+
void (async () => {
|
|
120
|
+
let parts;
|
|
121
|
+
try {
|
|
122
|
+
parts = await Promise.all(pending.map(file => {
|
|
123
|
+
const cached = readsRef.current.get(file);
|
|
124
|
+
return cached?.status === "ready" && cached.part ? Promise.resolve(cached.part) : fileToPart(file);
|
|
125
|
+
}));
|
|
126
|
+
}
|
|
127
|
+
catch (reason) {
|
|
128
|
+
// A file read failed — surface it and restore the message so it never
|
|
129
|
+
// vanishes silently.
|
|
130
|
+
setAttachError(reason instanceof Error ? reason.message : "Couldn't read an attachment.");
|
|
131
|
+
setDraft(current => current || text);
|
|
132
|
+
setFiles(current => (current.length > 0 ? current : pending));
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
setAttachError(undefined);
|
|
136
|
+
void sendMessage(parts.length > 0 ? { text, files: parts } : { text });
|
|
137
|
+
})();
|
|
138
|
+
};
|
|
139
|
+
const send = (override) => {
|
|
140
|
+
const text = (override ?? draft).trim();
|
|
141
|
+
const pending = files;
|
|
142
|
+
if (!text && pending.length === 0)
|
|
143
|
+
return;
|
|
144
|
+
// The message leaves the input immediately (whether it sends now or parks).
|
|
145
|
+
setDraft("");
|
|
146
|
+
setFiles([]);
|
|
147
|
+
if (fileRef.current)
|
|
148
|
+
fileRef.current.value = "";
|
|
149
|
+
if (busy) {
|
|
150
|
+
setQueued({ text, files: pending });
|
|
151
|
+
return;
|
|
152
|
+
}
|
|
153
|
+
dispatch(text, pending);
|
|
154
|
+
};
|
|
155
|
+
// The enclosing overlay's prefill scope (null for embedded threads/pages):
|
|
156
|
+
// registry-delivered prompts are directed at one overlay's composer.
|
|
157
|
+
const prefillScope = useContext(PrefillScopeContext);
|
|
158
|
+
// The listeners below register once but must send with CURRENT composer
|
|
159
|
+
// state: a first-render `send` closure sees busy=false forever, so a remix
|
|
160
|
+
// fired mid-stream would dispatch concurrently instead of parking in the
|
|
161
|
+
// queued slot (the single-in-flight contract).
|
|
162
|
+
const sendRef = useRef(send);
|
|
163
|
+
sendRef.current = send;
|
|
164
|
+
// Remix bridge: a host affordance (slot remix, a trigger button, the legacy
|
|
165
|
+
// `vendo:prefill` event) opens this surface and hands it the request to
|
|
166
|
+
// type + send, so the whole build happens here — the one conversational
|
|
167
|
+
// place (08-ui §4). The registry consumer also drains a prompt parked while
|
|
168
|
+
// this composer was still mounting (overlay first open / fresh conversation).
|
|
169
|
+
useEffect(() => {
|
|
170
|
+
const prefill = (prompt, sendNow) => {
|
|
171
|
+
setDraft(prompt);
|
|
172
|
+
if (sendNow)
|
|
173
|
+
queueMicrotask(() => sendRef.current(prompt));
|
|
174
|
+
};
|
|
175
|
+
const onPrefill = (event) => {
|
|
176
|
+
const detail = event.detail;
|
|
177
|
+
if (typeof detail?.prompt !== "string")
|
|
178
|
+
return;
|
|
179
|
+
prefill(detail.prompt, detail.send === true);
|
|
180
|
+
};
|
|
181
|
+
window.addEventListener("vendo:prefill", onPrefill);
|
|
182
|
+
const unregister = registerPrefillConsumer(parked => prefill(parked.prompt, parked.send), prefillScope);
|
|
183
|
+
return () => {
|
|
184
|
+
window.removeEventListener("vendo:prefill", onPrefill);
|
|
185
|
+
unregister();
|
|
186
|
+
};
|
|
187
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps -- sendRef tracks the latest send; scope is mount-stable
|
|
188
|
+
}, []);
|
|
189
|
+
// Flush the queued message the moment the active turn finishes. A ref-tracked
|
|
190
|
+
// busy edge keeps this from firing on unrelated re-renders.
|
|
191
|
+
const wasBusyRef = useRef(busy);
|
|
192
|
+
useEffect(() => {
|
|
193
|
+
if (wasBusyRef.current && !busy && queued) {
|
|
194
|
+
const pending = queued;
|
|
195
|
+
setQueued(null);
|
|
196
|
+
dispatch(pending.text, pending.files);
|
|
197
|
+
}
|
|
198
|
+
wasBusyRef.current = busy;
|
|
199
|
+
// dispatch is recreated each render but closes only over stable setters and
|
|
200
|
+
// thread.sendMessage; the busy edge + queued slot are the real triggers.
|
|
201
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
202
|
+
}, [busy, queued]);
|
|
203
|
+
// ENG-215 — autogrow: the textarea tracks its content height (CSS caps it at
|
|
204
|
+
// max-height and scrolls past that). Runs on every draft change, including the
|
|
205
|
+
// programmatic reset on send and the refill on edit.
|
|
206
|
+
useEffect(() => {
|
|
207
|
+
const node = textareaRef.current;
|
|
208
|
+
if (!node)
|
|
209
|
+
return;
|
|
210
|
+
node.style.height = "auto";
|
|
211
|
+
node.style.height = `${node.scrollHeight}px`;
|
|
212
|
+
}, [draft]);
|
|
213
|
+
return {
|
|
214
|
+
draft, setDraft, files, setFiles, dragDepth, setDragDepth,
|
|
215
|
+
attachmentPreviews, attachmentReads, retryRead: startRead,
|
|
216
|
+
dockOpen, setDockOpen, dockButtonRef,
|
|
217
|
+
queued, setQueued, attachError, fileRef, textareaRef, send,
|
|
218
|
+
};
|
|
219
|
+
}
|
|
220
|
+
/** The message composer (08-ui §4): attachments, drag-drop, queueing, dock. */
|
|
221
|
+
export function Composer({ composer, busy, status, errorMessage, onStop, onVoice }) {
|
|
222
|
+
const { draft, setDraft, files, setFiles, attachmentPreviews, attachmentReads, retryRead, dockOpen, setDockOpen, dockButtonRef, queued, setQueued, attachError, fileRef, textareaRef, send, } = composer;
|
|
223
|
+
return (_jsxs("div", { className: "fl-dock-anchor", children: [dockOpen ? (_jsx(ConnectTray, { anchorRef: dockButtonRef, onClose: () => {
|
|
224
|
+
setDockOpen(false);
|
|
225
|
+
queueMicrotask(() => dockButtonRef.current?.focus());
|
|
226
|
+
} })) : null, _jsxs("form", { className: "fl-composer", "aria-label": "Message composer", onSubmit: event => { event.preventDefault(); send(); }, children: [attachError ? _jsx("div", { className: "fl-att-error", role: "alert", children: attachError }) : null, queued ? (_jsxs("div", { className: "fl-queued", role: "status", "aria-live": "polite", children: [_jsx("span", { className: "fl-queued-tag", children: "Queued" }), _jsx("span", { className: "fl-queued-text", children: queued.text || `${queued.files.length} attachment(s)` }), _jsx("span", { className: "fl-queued-hint", children: "sends when the reply finishes" }), _jsx("button", { type: "button", className: "fl-queued-now", onClick: onStop, children: "Send now" }), _jsx("button", { type: "button", className: "fl-att-rm fl-queued-rm", "aria-label": "Cancel queued message", onClick: () => setQueued(null), children: "\u00D7" })] })) : null, files.length > 0 ? (_jsx("div", { className: "fl-att-chips", children: files.map((file, i) => {
|
|
227
|
+
const preview = attachmentPreviews.get(file);
|
|
228
|
+
const read = attachmentReads.get(file);
|
|
229
|
+
// An errored image renders as the file-style error chip, so its
|
|
230
|
+
// remove button needs the file-chip placement too.
|
|
231
|
+
const asFileChip = preview === undefined || read?.status === "error";
|
|
232
|
+
const remove = (_jsx("button", { type: "button", className: `fl-att-rm${asFileChip ? " fl-att-rm-file" : ""}`, "aria-label": `Remove ${file.name}`, onClick: () => setFiles(current => current.filter((_, j) => j !== i)), children: "\u00D7" }));
|
|
233
|
+
// ENG-225 — images preview as the designed thumbnail chip; other
|
|
234
|
+
// files carry an extension badge plus name and size. An image whose
|
|
235
|
+
// READ failed falls through to the error file-chip below (retry in
|
|
236
|
+
// place) instead of silently posing as attachable — the object-URL
|
|
237
|
+
// thumbnail says nothing about whether FileReader could read it
|
|
238
|
+
// (AI-review catch).
|
|
239
|
+
if (preview !== undefined && read?.status !== "error") {
|
|
240
|
+
return (_jsxs("span", { className: "fl-att-img", children: [_jsx("img", { src: preview, alt: file.name }), remove] }, `${file.name}-${i}`));
|
|
241
|
+
}
|
|
242
|
+
// Lane pick 2F — the chip narrates its read: progress ring while
|
|
243
|
+
// reading, error + inline retry on failure, quiet size when ready.
|
|
244
|
+
const failed = read?.status === "error";
|
|
245
|
+
const reading = read?.status === "reading";
|
|
246
|
+
const ring = 2 * Math.PI * 7;
|
|
247
|
+
return (_jsxs("span", { className: `fl-att-file${failed ? " fl-att-file--error" : ""}`, children: [reading ? (_jsx("span", { className: "fl-att-ring", "aria-hidden": "true", children: _jsxs("svg", { width: "18", height: "18", viewBox: "0 0 18 18", children: [_jsx("circle", { className: "fl-att-ring-bg", cx: "9", cy: "9", r: "7" }), _jsx("circle", { className: "fl-att-ring-fg", cx: "9", cy: "9", r: "7", strokeDasharray: ring, strokeDashoffset: ring * (1 - (read?.progress ?? 0)) })] }) })) : (_jsx("span", { className: "fl-att-ext", "aria-hidden": "true", children: fileExt(file.name) })), _jsxs("span", { className: "fl-att-meta", children: [_jsx("span", { className: "fl-att-name", children: file.name }), failed ? (_jsxs("small", { className: "fl-att-fail", role: "alert", children: ["couldn\u2019t read \u2014 ", _jsx("button", { type: "button", className: "fl-att-retry", onClick: () => retryRead(file), children: "retry" })] })) : (_jsx("small", { children: reading ? "reading…" : formatBytes(file.size) }))] }), remove] }, `${file.name}-${i}`));
|
|
248
|
+
}) })) : null, _jsxs("div", { className: "fl-composer-row", children: [_jsx("input", { ref: fileRef, type: "file", multiple: true, hidden: true, "aria-hidden": "true", onChange: event => { if (event.target.files)
|
|
249
|
+
setFiles(current => [...current, ...Array.from(event.target.files)]); } }), _jsx(ConnectDockButton, { ref: dockButtonRef, open: dockOpen, onToggle: () => setDockOpen(value => !value) }), _jsx("button", { type: "button", className: "fl-icon-btn fl-attach", "aria-label": "Attach files", onClick: () => fileRef.current?.click(), children: _jsx("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: _jsx("path", { d: "m21.44 11.05-9.19 9.19a6 6 0 0 1-8.49-8.49l8.57-8.57A4 4 0 1 1 18 8.84l-8.59 8.57a2 2 0 0 1-2.83-2.83l8.49-8.48" }) }) }), _jsxs("label", { style: { display: "contents" }, children: [_jsx("span", { className: "fl-sr-only", children: "Message" }), _jsx("textarea", { ref: textareaRef, "aria-label": "Message", placeholder: "Ask anything", rows: 1, value: draft,
|
|
250
|
+
// ENG-215 — never disabled: typing (and queueing) stays live through
|
|
251
|
+
// the whole turn, and the composer never dumps focus to <body>.
|
|
252
|
+
onChange: event => setDraft(event.currentTarget.value), onKeyDown: (event) => {
|
|
253
|
+
if (event.key === "Enter" && !event.shiftKey) {
|
|
254
|
+
event.preventDefault();
|
|
255
|
+
send();
|
|
256
|
+
}
|
|
257
|
+
} })] }), onVoice ? (_jsx("button", { type: "button", className: "fl-icon-btn", "aria-label": "Start voice", onClick: onVoice, children: _jsxs("svg", { width: "17", height: "17", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [_jsx("rect", { x: "9", y: "2", width: "6", height: "12", rx: "3" }), _jsx("path", { d: "M5 10a7 7 0 0 0 14 0M12 19v3" })] }) })) : null, busy ? (_jsxs("button", { className: "fl-icon-btn fl-stop", type: "button", "aria-label": "Stop", onClick: onStop, children: [_jsx("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "currentColor", "aria-hidden": "true", children: _jsx("rect", { x: "6", y: "6", width: "12", height: "12", rx: "2.5" }) }), _jsx("span", { className: "fl-sr-only", children: "Stop" })] })) : null, _jsxs("button", { className: "fl-icon-btn fl-send", type: "submit", "aria-label": "Send", disabled: !draft.trim() && files.length === 0, children: [_jsxs("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: [_jsx("path", { d: "M12 19V5" }), _jsx("path", { d: "m5 12 7-7 7 7" })] }), _jsx("span", { className: "fl-sr-only", children: "Send" })] })] }), _jsxs("div", { className: "fl-hintrow", "aria-hidden": "true", children: [_jsxs("span", { children: [_jsx("kbd", { className: "fl-kbd", children: "\u21E7\u21B5" }), " new line"] }), _jsxs("span", { children: [_jsx("kbd", { className: "fl-kbd", children: "\u2318K" }), " commands"] }), _jsx("span", { children: "drop files anywhere" })] }), _jsx("span", { role: "status", "aria-live": "polite", className: "fl-sr-only", children: errorMessage !== undefined ? `error: ${errorMessage}` : status })] })] }));
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=composer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"composer.js","sourceRoot":"","sources":["../../../src/chrome/thread/composer.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { type VendoDiscoverability, type VendoGreeting } from "../discoverability.js";
|
|
2
|
+
/** Lane pick 4B — a rich landing suggestion: two-line starter card. */
|
|
3
|
+
export interface VendoSuggestionCard {
|
|
4
|
+
/** Card headline (verb-first reads best: "Build a view"). */
|
|
5
|
+
title: string;
|
|
6
|
+
/** One concrete outcome line under the title. */
|
|
7
|
+
description: string;
|
|
8
|
+
/** Sent as the message on tap; defaults to the title. */
|
|
9
|
+
prompt?: string;
|
|
10
|
+
/** Optional host-supplied leading icon node. */
|
|
11
|
+
icon?: import("react").ReactNode;
|
|
12
|
+
}
|
|
13
|
+
export interface VendoThreadProps {
|
|
14
|
+
threadId?: string;
|
|
15
|
+
/** Landing headline shown above the composer while the thread is empty. */
|
|
16
|
+
greeting?: string;
|
|
17
|
+
/** Starter prompts on the empty landing; clicking sends one. Lane pick 4B —
|
|
18
|
+
* a plain string keeps today's pill chip; the object form renders a two-line
|
|
19
|
+
* starter card (title + concrete outcome, optional icon) with more scent. */
|
|
20
|
+
suggestions?: (string | VendoSuggestionCard)[];
|
|
21
|
+
/** Show a mic affordance in the composer that launches the host's voice surface. */
|
|
22
|
+
onVoice?: () => void;
|
|
23
|
+
/** ENG-222 — fires with the effective thread id once it is known, including
|
|
24
|
+
* the fresh `thr_` the server mints for a new conversation. Lets a host
|
|
25
|
+
* surface (e.g. VendoPage's sidebar) pull the new conversation into its list. */
|
|
26
|
+
onThreadId?: (threadId: string) => void;
|
|
27
|
+
/** The discoverability dial (ui-usage-dx §6), overriding the provider's:
|
|
28
|
+
* `"quiet"` disables the fire-once greeting-as-tutorial below. */
|
|
29
|
+
discoverability?: VendoDiscoverability;
|
|
30
|
+
/** Greeting-as-tutorial content (intro + prompt chips) overriding the
|
|
31
|
+
* provider's `greeting`. Distinct from `greeting` above (the returning-user
|
|
32
|
+
* landing headline) — this one renders once per user, ever. */
|
|
33
|
+
firstRunGreeting?: VendoGreeting;
|
|
34
|
+
/** Rendered directly above the composer in both landing and conversation
|
|
35
|
+
* layouts — the seam VendoOverlay uses for its command chip strip (the
|
|
36
|
+
* one-surface ⌘K design). Presentation-only; the thread never reads it. */
|
|
37
|
+
composerAccessory?: import("react").ReactNode;
|
|
38
|
+
}
|
|
39
|
+
/** 08-ui §4 — conversation chrome over the headless thread transport. */
|
|
40
|
+
export declare function VendoThread({ threadId, greeting, suggestions, onVoice, onThreadId, discoverability, firstRunGreeting, composerAccessory, }: VendoThreadProps): import("react").JSX.Element;
|
|
41
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/chrome/thread/index.tsx"],"names":[],"mappings":"AAMA,OAAO,EAA2C,KAAK,oBAAoB,EAAE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAO/H,uEAAuE;AACvE,MAAM,WAAW,mBAAmB;IAClC,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd,iDAAiD;IACjD,WAAW,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,IAAI,CAAC,EAAE,OAAO,OAAO,EAAE,SAAS,CAAC;CAClC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;iFAE6E;IAC7E,WAAW,CAAC,EAAE,CAAC,MAAM,GAAG,mBAAmB,CAAC,EAAE,CAAC;IAC/C,oFAAoF;IACpF,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB;;qFAEiF;IACjF,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC;sEACkE;IAClE,eAAe,CAAC,EAAE,oBAAoB,CAAC;IACvC;;mEAE+D;IAC/D,gBAAgB,CAAC,EAAE,aAAa,CAAC;IACjC;;+EAE2E;IAC3E,iBAAiB,CAAC,EAAE,OAAO,OAAO,EAAE,SAAS,CAAC;CAC/C;AAED,yEAAyE;AACzE,wBAAgB,WAAW,CAAC,EAC1B,QAAQ,EACR,QAAuC,EACvC,WAAgB,EAChB,OAAO,EACP,UAAU,EACV,eAAe,EACf,gBAAgB,EAChB,iBAAiB,GAClB,EAAE,gBAAgB,+BAkWlB"}
|