@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,38 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useId, useState } from "react";
|
|
3
|
+
import { useActivity } from "../hooks/use-activity.js";
|
|
4
|
+
import { useApprovals } from "../hooks/use-approvals.js";
|
|
5
|
+
import { useVendoTools } from "../context.js";
|
|
6
|
+
import { ActivityLedger } from "./activity-ledger.js";
|
|
7
|
+
import { ApprovalCard } from "./approval-card.js";
|
|
8
|
+
import { ChromeRoot } from "./chrome-root.js";
|
|
9
|
+
/**
|
|
10
|
+
* The shelf's drop-in feed of what the agent did + what it is waiting on
|
|
11
|
+
* (ui-usage-dx §2) — placeable in any host page. Pending approvals render as
|
|
12
|
+
* ONE card with a "1 of N" pager (ui-lane-panels pick B): deciding slides the
|
|
13
|
+
* next approval into place instead of stacking a wall of cards. Recent
|
|
14
|
+
* activity renders as the shared icon ledger below. When nothing has happened
|
|
15
|
+
* yet it shows a quiet one-line empty state rather than rendering nothing —
|
|
16
|
+
* hosts place this in their own pages, and an invisible component would read
|
|
17
|
+
* as broken.
|
|
18
|
+
*/
|
|
19
|
+
export function VendoActivities({ pollMs = 5000, maxItems = 8 } = {}) {
|
|
20
|
+
const poll = pollMs > 0 ? { pollMs } : undefined;
|
|
21
|
+
const { pending, decide } = useApprovals(poll);
|
|
22
|
+
const { events, isLoading } = useActivity(poll);
|
|
23
|
+
const tools = useVendoTools();
|
|
24
|
+
const headingId = useId();
|
|
25
|
+
const recent = events.slice(0, Math.max(0, maxItems));
|
|
26
|
+
// The pager holds a POSITION, not an approval: deciding removes the current
|
|
27
|
+
// approval from `pending`, so the next one shifts into the same index and
|
|
28
|
+
// slides in (keyed by approval id). Clamp when the queue shrinks below it.
|
|
29
|
+
const [rawIndex, setRawIndex] = useState(0);
|
|
30
|
+
const index = Math.min(rawIndex, Math.max(0, pending.length - 1));
|
|
31
|
+
const current = pending[index];
|
|
32
|
+
const paged = pending.length > 1;
|
|
33
|
+
return (_jsx(ChromeRoot, { children: _jsxs("section", { "aria-label": "Vendo activity", style: { display: "grid", gap: "14px" }, children: [current ? (_jsxs("section", { "aria-labelledby": `${headingId}-approvals`, style: { display: "grid", gap: "10px" }, children: [_jsxs("header", { children: [_jsxs("div", { className: paged ? "fl-approvals-pager" : undefined, children: [_jsx("h2", { id: `${headingId}-approvals`, className: "fl-act-head-lbl", style: { margin: 0, fontSize: "14px" }, children: "Needs your approval" }), paged ? (_jsxs(_Fragment, { children: [_jsxs("p", { className: "fl-act-now", style: { margin: 0, fontSize: "11.5px" }, "aria-live": "polite", children: ["\u00B7 ", index + 1, " of ", pending.length] }), _jsx("span", { className: "fl-approvals-dots", "aria-hidden": "true", children: pending.map((approval, i) => (_jsx("span", { className: `fl-approvals-dot${i === index ? " fl-approvals-dot--on" : ""}` }, approval.id))) })] })) : null] }), _jsx("p", { className: "fl-act-now", style: { margin: "3px 0 0", fontSize: "12.5px" }, children: "An agent asked to act on your account. Review the exact request before it runs." })] }), _jsxs("div", { className: "fl-approvals-stack", children: [_jsx("div", { className: "fl-approvals-slide", children: _jsx(ApprovalCard, { approval: current, onDecide: async (decision) => {
|
|
34
|
+
await decide(current.id, decision);
|
|
35
|
+
setRawIndex(value => Math.min(value, Math.max(0, pending.length - 2)));
|
|
36
|
+
} }) }, current.id), index < pending.length - 1 ? _jsx("div", { className: "fl-approvals-ghost", "aria-hidden": "true" }) : null] })] })) : null, _jsxs("section", { className: "fl-act", "aria-labelledby": `${headingId}-recent`, children: [_jsxs("header", { className: "fl-act-head", style: { cursor: "default" }, children: [_jsx("span", { className: "fl-act-ic fl-act-tick", "aria-hidden": "true", children: "\u2713" }), _jsx("h2", { id: `${headingId}-recent`, className: "fl-act-head-lbl", style: { margin: 0 }, children: "Recent activity" })] }), recent.length === 0 ? (_jsx("p", { className: "fl-act-row fl-act-now", children: isLoading ? "Loading activity…" : "No recent agent activity yet." })) : (_jsxs(_Fragment, { children: [_jsx("p", { className: "fl-act-cap", style: { margin: 0 }, children: "Actions performed as your account" }), _jsx(ActivityLedger, { events: recent, tools: tools })] }))] })] }) }));
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=vendo-activities.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vendo-activities.js","sourceRoot":"","sources":["../../src/chrome/vendo-activities.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { type ComponentType, type ReactNode } from "react";
|
|
2
|
+
import { type VendoDiscoverability, type VendoGreeting } from "./discoverability.js";
|
|
3
|
+
import { type VendoThreadProps } from "./thread/index.js";
|
|
4
|
+
export interface VendoOverlayProps {
|
|
5
|
+
/** Controlled open state — pair with `onOpenChange`. Omit for uncontrolled. */
|
|
6
|
+
open?: boolean;
|
|
7
|
+
/** Initial state in uncontrolled mode (default `false`). */
|
|
8
|
+
defaultOpen?: boolean;
|
|
9
|
+
/** Fires for every open/close request: launcher click, close button, Escape, scrim click, or programmatic toggles. */
|
|
10
|
+
onOpenChange?(open: boolean): void;
|
|
11
|
+
/**
|
|
12
|
+
* Built-in launcher placement and content. The default is a fixed pill in
|
|
13
|
+
* the given viewport corner carrying the morphing accent blob and a
|
|
14
|
+
* WHITE-LABEL text — "AI agent", never a product name (ui-lane-entry). Pass
|
|
15
|
+
* `"none"` to hide it and drive the overlay programmatically (via
|
|
16
|
+
* `open`/`onOpenChange` or the `useVendoOverlay` hook), or the object form
|
|
17
|
+
* to customize: `label` accepts any host string (`null` collapses the pill
|
|
18
|
+
* to a blob-only orb) and `icon` swaps the blob for a host element.
|
|
19
|
+
*/
|
|
20
|
+
launcher?: "bottom-right" | "bottom-left" | "none" | {
|
|
21
|
+
position?: "bottom-right" | "bottom-left";
|
|
22
|
+
/** Pill text. Default "AI agent"; `null` renders the blob-only orb. */
|
|
23
|
+
label?: string | null;
|
|
24
|
+
/** Replaces the morph-blob mark (a host logo, custom glyph, …). */
|
|
25
|
+
icon?: ReactNode;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Change to discard the current conversation and start a fresh thread
|
|
29
|
+
* (ENG-221). `useVendoOverlay().newConversation()` drives this for you;
|
|
30
|
+
* hosts managing their own state can bump any number/string. The panel's
|
|
31
|
+
* built-in new-conversation button works with or without this prop.
|
|
32
|
+
*/
|
|
33
|
+
conversationKey?: string | number;
|
|
34
|
+
/**
|
|
35
|
+
* The one sanctioned component-injection point (the eject seam): a thread
|
|
36
|
+
* component the panel renders in place of the built-in `VendoThread`. The
|
|
37
|
+
* overlay stays the positioning shell — portal, scrim, focus, mobile sheet —
|
|
38
|
+
* while an ejected (or fully custom) thread supplies the conversation
|
|
39
|
+
* pixels. It receives `VendoThreadProps` (all optional), so a plain
|
|
40
|
+
* zero-prop component works too.
|
|
41
|
+
*/
|
|
42
|
+
thread?: ComponentType<VendoThreadProps>;
|
|
43
|
+
/**
|
|
44
|
+
* The discoverability dial (ui-usage-dx §6), overriding the provider's.
|
|
45
|
+
* `"default"` keeps the fire-once whisper on the launcher pill (and the
|
|
46
|
+
* thread's greeting-as-tutorial); `"quiet"` turns both off. Nothing here
|
|
47
|
+
* ever fires twice for the same user — the whisper marks itself seen the
|
|
48
|
+
* moment it first renders.
|
|
49
|
+
*/
|
|
50
|
+
discoverability?: VendoDiscoverability;
|
|
51
|
+
/**
|
|
52
|
+
* Greeting-as-tutorial content for the thread's one-time first message
|
|
53
|
+
* (intro + prompt chips — the `.vendo/greeting.json` shape), overriding the
|
|
54
|
+
* provider's `greeting`.
|
|
55
|
+
*/
|
|
56
|
+
greeting?: VendoGreeting;
|
|
57
|
+
}
|
|
58
|
+
/** 08-ui §4 — floating modal launcher with focus containment and restoration.
|
|
59
|
+
* Supported entry API (ENG-220): positioned launcher by default, controlled +
|
|
60
|
+
* uncontrolled programmatic open/close, panel portaled to document.body with
|
|
61
|
+
* body scroll-lock and an inert background while open. */
|
|
62
|
+
export declare function VendoOverlay({ open: openProp, defaultOpen, onOpenChange, launcher, conversationKey, thread: Thread, discoverability, greeting, }?: VendoOverlayProps): import("react").JSX.Element;
|
|
63
|
+
//# sourceMappingURL=vendo-overlay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vendo-overlay.d.ts","sourceRoot":"","sources":["../../src/chrome/vendo-overlay.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAkE,KAAK,aAAa,EAA0C,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAMnK,OAAO,EAAqB,KAAK,oBAAoB,EAAE,KAAK,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAExG,OAAO,EAAe,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAIvE,MAAM,WAAW,iBAAiB;IAChC,+EAA+E;IAC/E,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,4DAA4D;IAC5D,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,sHAAsH;IACtH,YAAY,CAAC,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,CAAC;IACnC;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,cAAc,GAAG,aAAa,GAAG,MAAM,GAAG;QACnD,QAAQ,CAAC,EAAE,cAAc,GAAG,aAAa,CAAC;QAC1C,uEAAuE;QACvE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,mEAAmE;QACnE,IAAI,CAAC,EAAE,SAAS,CAAC;KAClB,CAAC;IACF;;;;;OAKG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAClC;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,aAAa,CAAC,gBAAgB,CAAC,CAAC;IACzC;;;;;;OAMG;IACH,eAAe,CAAC,EAAE,oBAAoB,CAAC;IACvC;;;;OAIG;IACH,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B;AAoCD;;;2DAG2D;AAC3D,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EAAE,QAAQ,EACd,WAAmB,EACnB,YAAY,EACZ,QAAyB,EACzB,eAAe,EACf,MAAM,EAAE,MAAoB,EAC5B,eAAe,EACf,QAAQ,GACT,GAAE,iBAAsB,+BAuTxB"}
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useEffect, useRef, useState, useSyncExternalStore } from "react";
|
|
3
|
+
import { createPortal } from "react-dom";
|
|
4
|
+
import { useVendoDiscoverability, useVendoTheme } from "../context.js";
|
|
5
|
+
import { useMobileTakeover } from "../hooks/use-mobile-takeover.js";
|
|
6
|
+
import { themeCssVariables } from "../theme.js";
|
|
7
|
+
import { ChromeRoot } from "./chrome-root.js";
|
|
8
|
+
import { hasSeen, markSeen } from "./discoverability.js";
|
|
9
|
+
import { deliverPrefill, getConversationCommands, PrefillScopeContext, registerOverlayOpener, subscribeConversationCommands } from "./overlay-registry.js";
|
|
10
|
+
import { VendoThread } from "./thread/index.js";
|
|
11
|
+
const FOCUSABLE = "button:not([disabled]),input:not([disabled]),textarea:not([disabled]),select:not([disabled]),a[href],[tabindex]:not([tabindex='-1'])";
|
|
12
|
+
/** Whisper caption duration — long enough to read two short lines, short
|
|
13
|
+
* enough to stay ambient (~6s per the §6 decision). */
|
|
14
|
+
const WHISPER_MS = 6000;
|
|
15
|
+
/** The per-kind glyph on a command chip (mirrors the old palette row icons). */
|
|
16
|
+
function CommandGlyph({ kind }) {
|
|
17
|
+
return (_jsx("svg", { width: "12", height: "12", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: kind === "new-conversation" ? (_jsx("path", { d: "M12 5v14M5 12h14" })) : kind === "open-app" ? (_jsxs(_Fragment, { children: [_jsx("rect", { width: "7", height: "7", x: "3", y: "3", rx: "1" }), _jsx("rect", { width: "7", height: "7", x: "14", y: "3", rx: "1" }), _jsx("rect", { width: "7", height: "7", x: "3", y: "14", rx: "1" }), _jsx("rect", { width: "7", height: "7", x: "14", y: "14", rx: "1" })] })) : (_jsxs(_Fragment, { children: [_jsx("path", { d: "M3 3v18h18" }), _jsx("path", { d: "m7 16 4-5 4 3 4-7" })] })) }));
|
|
18
|
+
}
|
|
19
|
+
/** display:none/visibility:hidden elements silently swallow focus() — skip them. */
|
|
20
|
+
function canReceiveFocus(element) {
|
|
21
|
+
if (!element || !element.isConnected)
|
|
22
|
+
return false;
|
|
23
|
+
const style = window.getComputedStyle(element);
|
|
24
|
+
return style.display !== "none" && style.visibility !== "hidden";
|
|
25
|
+
}
|
|
26
|
+
/** 08-ui §4 — floating modal launcher with focus containment and restoration.
|
|
27
|
+
* Supported entry API (ENG-220): positioned launcher by default, controlled +
|
|
28
|
+
* uncontrolled programmatic open/close, panel portaled to document.body with
|
|
29
|
+
* body scroll-lock and an inert background while open. */
|
|
30
|
+
export function VendoOverlay({ open: openProp, defaultOpen = false, onOpenChange, launcher = "bottom-right", conversationKey, thread: Thread = VendoThread, discoverability, greeting, } = {}) {
|
|
31
|
+
const controlled = openProp !== undefined;
|
|
32
|
+
const [uncontrolledOpen, setUncontrolledOpen] = useState(defaultOpen);
|
|
33
|
+
const open = controlled ? openProp : uncontrolledOpen;
|
|
34
|
+
// ENG-221: closing must HIDE the panel, not unmount it — the conversation
|
|
35
|
+
// (VendoThread's chat state + adopted thr_ id) lives in the portal subtree
|
|
36
|
+
// and survives every close/reopen within the page session. Mount lazily on
|
|
37
|
+
// first open, then keep mounted (render-phase derived state, no extra pass).
|
|
38
|
+
const [hasOpened, setHasOpened] = useState(open);
|
|
39
|
+
if (open && !hasOpened)
|
|
40
|
+
setHasOpened(true);
|
|
41
|
+
// The explicit new-conversation affordance: remount VendoThread under a new
|
|
42
|
+
// key so the next turn starts with no threadId (the server mints a fresh
|
|
43
|
+
// one). Combined with the prop so the hook's newConversation() works too.
|
|
44
|
+
const [conversationEpoch, setConversationEpoch] = useState(0);
|
|
45
|
+
const theme = useVendoTheme();
|
|
46
|
+
const takeover = useMobileTakeover();
|
|
47
|
+
const providerDial = useVendoDiscoverability();
|
|
48
|
+
const dial = discoverability ?? providerDial;
|
|
49
|
+
// Launcher normalization: string forms keep their exact old meaning; the
|
|
50
|
+
// object form adds white-label text/icon control. Default label is "AI
|
|
51
|
+
// agent" — deliberately not a product name (white-label rule).
|
|
52
|
+
const launcherConfig = typeof launcher === "object" ? launcher : {};
|
|
53
|
+
const launcherPosition = typeof launcher === "string" && launcher !== "none" ? launcher : launcherConfig.position ?? "bottom-right";
|
|
54
|
+
const launcherHidden = launcher === "none";
|
|
55
|
+
// Empty/whitespace labels collapse to the blob-only orb exactly like null —
|
|
56
|
+
// otherwise `label: ""` would render an icon-only button with no accessible
|
|
57
|
+
// name (cubic PR#391 finding).
|
|
58
|
+
const configuredLabel = launcherConfig.label === undefined ? "AI agent" : launcherConfig.label;
|
|
59
|
+
const launcherLabel = configuredLabel !== null && configuredLabel.trim() === "" ? null : configuredLabel;
|
|
60
|
+
// The palette's command set renders as a chip strip above the composer —
|
|
61
|
+
// the one-surface replacement for the palette dialog (pick P-C).
|
|
62
|
+
const commandSet = useSyncExternalStore(subscribeConversationCommands, getConversationCommands, getConversationCommands);
|
|
63
|
+
const commandStrip = commandSet && commandSet.commands.length > 0 ? (_jsx("div", { className: "fl-cmdstrip", role: "toolbar", "aria-label": "Commands", children: commandSet.commands.map(command => (_jsxs("button", { type: "button", className: "fl-cmd-chip", onClick: () => commandSet.select(command), children: [_jsx(CommandGlyph, { kind: command.kind }), command.label] }, command.id))) })) : null;
|
|
64
|
+
// ui-usage-dx §6 — the whisper: the first time a user actually faces the
|
|
65
|
+
// pill, it pulses once and a small caption says the app can be reshaped,
|
|
66
|
+
// then never again (fire-once store). Arming is REACTIVE, not mount-frozen
|
|
67
|
+
// (PR #365 review): quiet dial, launcher="none", and overlay-already-open
|
|
68
|
+
// states are not eligible and do not burn the flag — the moment the pill
|
|
69
|
+
// becomes genuinely visible (dial flipped, launcher enabled, overlay
|
|
70
|
+
// closed) is the first showing, and only that showing burns it.
|
|
71
|
+
const [whisperActive, setWhisperActive] = useState(false);
|
|
72
|
+
useEffect(() => {
|
|
73
|
+
if (whisperActive || open || launcherHidden || dial === "quiet")
|
|
74
|
+
return;
|
|
75
|
+
if (hasSeen("whisper"))
|
|
76
|
+
return;
|
|
77
|
+
// Seen is recorded on first SHOWING, not on dismiss: a reload
|
|
78
|
+
// mid-animation must never replay the whisper.
|
|
79
|
+
markSeen("whisper");
|
|
80
|
+
setWhisperActive(true);
|
|
81
|
+
}, [whisperActive, open, launcherHidden, dial]);
|
|
82
|
+
// The whisper ends after ~6s — or the instant the overlay opens, because
|
|
83
|
+
// the user has found the entry point it exists to point at.
|
|
84
|
+
useEffect(() => {
|
|
85
|
+
if (!whisperActive)
|
|
86
|
+
return;
|
|
87
|
+
if (open) {
|
|
88
|
+
setWhisperActive(false);
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
const timer = window.setTimeout(() => setWhisperActive(false), WHISPER_MS);
|
|
92
|
+
return () => window.clearTimeout(timer);
|
|
93
|
+
}, [whisperActive, open]);
|
|
94
|
+
const launcherRef = useRef(null);
|
|
95
|
+
const dialog = useRef(null);
|
|
96
|
+
const portalRoot = useRef(null);
|
|
97
|
+
const opener = useRef(null);
|
|
98
|
+
const wasOpen = useRef(false);
|
|
99
|
+
const setOpen = useCallback((next) => {
|
|
100
|
+
if (next && !open && document.activeElement instanceof HTMLElement && document.activeElement !== document.body) {
|
|
101
|
+
opener.current = document.activeElement;
|
|
102
|
+
}
|
|
103
|
+
if (!controlled)
|
|
104
|
+
setUncontrolledOpen(next);
|
|
105
|
+
onOpenChange?.(next);
|
|
106
|
+
}, [controlled, onOpenChange, open]);
|
|
107
|
+
// Focus correctness across BOTH modes (controlled flips never pass through
|
|
108
|
+
// setOpen, so transitions are observed here): on open, capture the invoking
|
|
109
|
+
// element and autofocus the composer; on close, restore focus to the invoker
|
|
110
|
+
// — falling back to the launcher — skipping anything that cannot visibly
|
|
111
|
+
// receive focus (e.g. a display:none launcher) so focus never lands on body.
|
|
112
|
+
useEffect(() => {
|
|
113
|
+
if (open === wasOpen.current)
|
|
114
|
+
return;
|
|
115
|
+
wasOpen.current = open;
|
|
116
|
+
if (open) {
|
|
117
|
+
if (!opener.current && document.activeElement instanceof HTMLElement && document.activeElement !== document.body) {
|
|
118
|
+
opener.current = document.activeElement;
|
|
119
|
+
}
|
|
120
|
+
queueMicrotask(() => {
|
|
121
|
+
const panel = dialog.current;
|
|
122
|
+
const composer = panel?.querySelector("textarea:not([disabled])");
|
|
123
|
+
(composer ?? panel?.querySelector(FOCUSABLE))?.focus();
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
const invoker = opener.current;
|
|
128
|
+
opener.current = null;
|
|
129
|
+
queueMicrotask(() => {
|
|
130
|
+
for (const candidate of [invoker, launcherRef.current]) {
|
|
131
|
+
if (canReceiveFocus(candidate)) {
|
|
132
|
+
candidate.focus();
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
}, [open]);
|
|
139
|
+
// While open: lock body scroll and make everything behind the portal inert
|
|
140
|
+
// (the scrim + panel live in their own body-level subtree). Restored on
|
|
141
|
+
// close AND on unmount-while-open via the effect cleanup.
|
|
142
|
+
useEffect(() => {
|
|
143
|
+
if (!open)
|
|
144
|
+
return;
|
|
145
|
+
const wrapper = portalRoot.current;
|
|
146
|
+
const { body } = document;
|
|
147
|
+
const previousOverflow = body.style.overflow;
|
|
148
|
+
body.style.overflow = "hidden";
|
|
149
|
+
const inerted = [];
|
|
150
|
+
const inert = (child) => {
|
|
151
|
+
if (child === wrapper || child.tagName === "SCRIPT" || child.tagName === "STYLE" || child.hasAttribute("inert"))
|
|
152
|
+
return;
|
|
153
|
+
// Never inert another modal surface: the palette's takeover portal can
|
|
154
|
+
// mount above this overlay (Cmd/Ctrl+K while open) and must stay
|
|
155
|
+
// interactive — an inert ancestor would freeze the whole dialog.
|
|
156
|
+
if (child.matches('[aria-modal="true"]') || child.querySelector('[aria-modal="true"]'))
|
|
157
|
+
return;
|
|
158
|
+
child.setAttribute("inert", "");
|
|
159
|
+
inerted.push(child);
|
|
160
|
+
};
|
|
161
|
+
for (const child of Array.from(body.children))
|
|
162
|
+
inert(child);
|
|
163
|
+
// ENG-228: body children can also appear WHILE the overlay is open — the
|
|
164
|
+
// page/palette TakeoverPortals mount on a breakpoint flip, hosts mint
|
|
165
|
+
// toast portals. The open-time snapshot alone would leave those
|
|
166
|
+
// interactive behind the modal scrim, so keep watching.
|
|
167
|
+
const observer = new MutationObserver(records => {
|
|
168
|
+
for (const record of records) {
|
|
169
|
+
for (const node of record.addedNodes) {
|
|
170
|
+
if (node instanceof Element && node.parentElement === body)
|
|
171
|
+
inert(node);
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
observer.observe(body, { childList: true });
|
|
176
|
+
return () => {
|
|
177
|
+
observer.disconnect();
|
|
178
|
+
body.style.overflow = previousOverflow;
|
|
179
|
+
for (const element of inerted)
|
|
180
|
+
element.removeAttribute("inert");
|
|
181
|
+
};
|
|
182
|
+
}, [open]);
|
|
183
|
+
const close = () => setOpen(false);
|
|
184
|
+
// The prefill scope: this overlay's composer registers under it, so a
|
|
185
|
+
// delivered prompt reaches THIS overlay's thread — not an embedded
|
|
186
|
+
// VendoThread/VendoPage composer that happened to register later.
|
|
187
|
+
const prefillScope = useRef(Symbol("vendo-overlay-prefill"));
|
|
188
|
+
// Registry opener (ui-usage-dx §2): lets slot remix / trigger / palette
|
|
189
|
+
// affordances open this overlay — optionally preloading a prompt or starting
|
|
190
|
+
// fresh — without a ref. The prompt goes through the registry's scoped
|
|
191
|
+
// prefill hand-off, which parks it until the thread's composer mounts
|
|
192
|
+
// (first open) or delivers immediately (already mounted, even while
|
|
193
|
+
// hidden). newConversation defers delivery past the outgoing composer:
|
|
194
|
+
// the epoch bump remounts the thread, and only the fresh composer may
|
|
195
|
+
// drain the prompt (a live delivery would hand it to the one unmounting).
|
|
196
|
+
useEffect(() => registerOverlayOpener(options => {
|
|
197
|
+
// The one-surface ⌘K path: a toggle request closes an open overlay instead
|
|
198
|
+
// of no-opping; every other affordance strictly opens.
|
|
199
|
+
if (options?.toggle === true && open) {
|
|
200
|
+
setOpen(false);
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
if (options?.close === true) {
|
|
204
|
+
if (open)
|
|
205
|
+
setOpen(false);
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
setOpen(true);
|
|
209
|
+
const fresh = options?.newConversation === true;
|
|
210
|
+
if (fresh)
|
|
211
|
+
setConversationEpoch(epoch => epoch + 1);
|
|
212
|
+
if (typeof options?.prompt === "string" && options.prompt.length > 0) {
|
|
213
|
+
deliverPrefill({ prompt: options.prompt, send: options.send === true }, { scope: prefillScope.current, defer: fresh });
|
|
214
|
+
}
|
|
215
|
+
}), [setOpen, open]);
|
|
216
|
+
const newConversation = () => {
|
|
217
|
+
setConversationEpoch(epoch => epoch + 1);
|
|
218
|
+
// The remounted thread lands on the empty composer — put focus there so
|
|
219
|
+
// the affordance reads as "ready for a fresh start", not a dead click.
|
|
220
|
+
queueMicrotask(() => dialog.current?.querySelector("textarea:not([disabled])")?.focus());
|
|
221
|
+
};
|
|
222
|
+
const onKeyDown = (event) => {
|
|
223
|
+
if (event.key === "Escape") {
|
|
224
|
+
event.preventDefault();
|
|
225
|
+
close();
|
|
226
|
+
return;
|
|
227
|
+
}
|
|
228
|
+
if (event.key !== "Tab")
|
|
229
|
+
return;
|
|
230
|
+
const focusable = [...(dialog.current?.querySelectorAll(FOCUSABLE) ?? [])];
|
|
231
|
+
if (focusable.length === 0)
|
|
232
|
+
return;
|
|
233
|
+
const first = focusable[0];
|
|
234
|
+
const last = focusable.at(-1);
|
|
235
|
+
if (event.shiftKey && document.activeElement === first) {
|
|
236
|
+
event.preventDefault();
|
|
237
|
+
last.focus();
|
|
238
|
+
}
|
|
239
|
+
else if (!event.shiftKey && document.activeElement === last) {
|
|
240
|
+
event.preventDefault();
|
|
241
|
+
first.focus();
|
|
242
|
+
}
|
|
243
|
+
};
|
|
244
|
+
// The panel escapes the host's stacking/transform/filter context entirely:
|
|
245
|
+
// it is portaled to document.body. The wrapper is display:contents but
|
|
246
|
+
// carries the .vendo-root token bridge + contract variables, so the panel
|
|
247
|
+
// stays fully brand-themed outside the host ChromeRoot.
|
|
248
|
+
const portal = hasOpened && typeof document !== "undefined" ? createPortal(_jsxs("div", { ref: portalRoot, className: "vendo-root fl-overlay-portal", "data-vendo-motion": theme.motion, "data-vendo-density": theme.density,
|
|
249
|
+
// Closed = hidden, NOT unmounted (ENG-221): inline display:none beats the
|
|
250
|
+
// class's display:contents, drops the subtree out of the a11y tree and
|
|
251
|
+
// tab order, and replays the open animation on reveal — while the thread
|
|
252
|
+
// state (and any in-flight stream) lives on underneath.
|
|
253
|
+
style: { ...themeCssVariables(theme), fontFamily: "var(--vendo-font-family)", fontSize: "var(--vendo-font-size)", ...(open ? {} : { display: "none" }) }, children: [_jsx("div", { className: "fl-overlay-scrim", onClick: close }), _jsxs("div", { ref: dialog, id: "vendo-overlay-dialog", className: `fl-overlay-panel${takeover.active ? " fl-takeover" : ""}`, style: takeover.style, role: "dialog", "aria-modal": "true", "aria-label": "Vendo assistant", onKeyDown: onKeyDown, children: [_jsx("strong", { className: "fl-sr-only", children: "Vendo" }), _jsxs("button", { className: "fl-overlay-close fl-overlay-new", type: "button", "aria-label": "New conversation", onClick: newConversation, children: [_jsx("svg", { width: "15", height: "15", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", "aria-hidden": "true", children: _jsx("path", { d: "M12 5v14M5 12h14" }) }), _jsx("span", { className: "fl-sr-only", children: "New conversation" })] }), _jsxs("button", { className: "fl-overlay-close", type: "button", "aria-label": "Close Vendo", onClick: close, children: [_jsx("svg", { width: "15", height: "15", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", "aria-hidden": "true", children: _jsx("path", { d: "M18 6 6 18M6 6l12 12" }) }), _jsx("span", { className: "fl-sr-only", children: "Close" })] }), _jsx(PrefillScopeContext.Provider, { value: prefillScope.current, children: _jsx(Thread, { discoverability: dial, firstRunGreeting: greeting, composerAccessory: commandStrip }, `${conversationKey ?? 0}:${conversationEpoch}`) })] })] }), document.body) : null;
|
|
254
|
+
return (_jsxs(ChromeRoot, { children: [launcherHidden ? null : (_jsxs("button", { ref: launcherRef, className: "fl-launcher", "data-vendo-launcher": launcherPosition, ...(launcherLabel === null ? { "data-vendo-launcher-bare": "" } : {}), ...(whisperActive && !open ? { "data-vendo-whisper": "" } : {}), type: "button", "aria-expanded": open, "aria-controls": "vendo-overlay-dialog", ...(launcherLabel === null ? { "aria-label": "AI agent" } : {}), onClick: () => setOpen(!open), children: [launcherConfig.icon ?? _jsx("span", { className: "fl-launcher-blob", "aria-hidden": "true" }), launcherLabel] })), !launcherHidden && whisperActive && !open ? (_jsxs("div", { className: "fl-whisper", "data-vendo-launcher": launcherPosition, role: "status", children: [_jsx("strong", { children: "You can reshape this app" }), _jsx("span", { children: "Ask Vendo to build the view you need." })] })) : null, portal] }));
|
|
255
|
+
}
|
|
256
|
+
//# sourceMappingURL=vendo-overlay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vendo-overlay.js","sourceRoot":"","sources":["../../src/chrome/vendo-overlay.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vendo-page.d.ts","sourceRoot":"","sources":["../../src/chrome/vendo-page.tsx"],"names":[],"mappings":"AAmNA,yEAAyE;AACzE,wBAAgB,SAAS,gCA4ExB"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
3
|
+
import { useVendoContext } from "../context.js";
|
|
4
|
+
import { useApp } from "../hooks/use-app.js";
|
|
5
|
+
import { useApps } from "../hooks/use-apps.js";
|
|
6
|
+
import { useMobileTakeover } from "../hooks/use-mobile-takeover.js";
|
|
7
|
+
import { useThreads } from "../hooks/use-threads.js";
|
|
8
|
+
import { AppFrame } from "../tree/frames.js";
|
|
9
|
+
import { ActivityPanel } from "./activity-panel.js";
|
|
10
|
+
import { AutomationsPanel } from "./automations-panel.js";
|
|
11
|
+
import { ChromeRoot } from "./chrome-root.js";
|
|
12
|
+
import { ACTIVITY_ANCHOR_ATTRIBUTE, ACTIVITY_BUMP_EVENT } from "./morph-toast.js";
|
|
13
|
+
import { ConnectedAccountsPanel } from "./connected-accounts-panel.js";
|
|
14
|
+
import { TakeoverPortal } from "./takeover-portal.js";
|
|
15
|
+
import { VendoThread } from "./thread/index.js";
|
|
16
|
+
import { WaitingQueue } from "./waiting-queue.js";
|
|
17
|
+
const TABS = ["chat", "apps", "automations", "accounts", "activity"];
|
|
18
|
+
// How long a minted-thread sidebar retry waits before re-polling GET /threads
|
|
19
|
+
// (the mint header lands at turn START; the thread row persists at turn END).
|
|
20
|
+
const MINTED_RETRY_MS = 1_000;
|
|
21
|
+
function title(tab) {
|
|
22
|
+
return tab[0].toUpperCase() + tab.slice(1);
|
|
23
|
+
}
|
|
24
|
+
function ChatWorkspace() {
|
|
25
|
+
const takeover = useMobileTakeover();
|
|
26
|
+
const { threads, isLoading, error: threadsError, refresh } = useThreads();
|
|
27
|
+
const [selected, setSelected] = useState();
|
|
28
|
+
// ENG-222 — the thr_ the server mints for a "New conversation" turn. Tracked
|
|
29
|
+
// separately from `selected` (which drives VendoThread's threadId prop) so a
|
|
30
|
+
// fresh mint highlights the sidebar without remounting the live conversation.
|
|
31
|
+
const [minted, setMinted] = useState();
|
|
32
|
+
const activeId = selected ?? minted;
|
|
33
|
+
// Default to the most recent conversation until the user makes an explicit
|
|
34
|
+
// choice. `userChose` is set synchronously in the button handlers so that an
|
|
35
|
+
// explicit "New conversation" (selected → undefined) can never be clobbered by
|
|
36
|
+
// this effect — which, being passive, may flush AFTER the click and would
|
|
37
|
+
// otherwise resurrect the previous thread via `?? threads[0]` (ENG-222).
|
|
38
|
+
const userChose = useRef(false);
|
|
39
|
+
useEffect(() => {
|
|
40
|
+
if (userChose.current || threads.length === 0)
|
|
41
|
+
return;
|
|
42
|
+
setSelected(current => current ?? threads[0]?.id);
|
|
43
|
+
}, [threads]);
|
|
44
|
+
const onThreadId = useCallback((id) => setMinted(id), []);
|
|
45
|
+
// ENG-222 — a conversation started via "New conversation" mints a thr_ the
|
|
46
|
+
// sidebar list has never seen; refresh so it appears (and highlights). The
|
|
47
|
+
// mint arrives at turn START while the row persists at turn END, and every
|
|
48
|
+
// refresh replaces `threads` with a fresh array — so a list that still lacks
|
|
49
|
+
// the id re-arms a SLOW timer instead of re-firing immediately (which would
|
|
50
|
+
// hot-loop GET /threads at network-RTT cadence for the whole turn).
|
|
51
|
+
const refreshedForRef = useRef(undefined);
|
|
52
|
+
useEffect(() => {
|
|
53
|
+
if (minted === undefined || threads.some(thread => thread.id === minted))
|
|
54
|
+
return;
|
|
55
|
+
if (refreshedForRef.current !== minted) {
|
|
56
|
+
refreshedForRef.current = minted;
|
|
57
|
+
void refresh();
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const timer = setTimeout(() => void refresh(), MINTED_RETRY_MS);
|
|
61
|
+
return () => clearTimeout(timer);
|
|
62
|
+
}, [minted, threads, refresh]);
|
|
63
|
+
return (_jsxs("div", { className: "fl-page-pane", style: {
|
|
64
|
+
display: "grid",
|
|
65
|
+
gap: 14,
|
|
66
|
+
// ENG-228: the sidebar+thread two-column grid is what crushed the
|
|
67
|
+
// thread to one character per line at 375px — below the breakpoint
|
|
68
|
+
// the conversation list stacks above a full-width thread.
|
|
69
|
+
gridTemplateColumns: takeover.active ? "minmax(0, 1fr)" : "minmax(180px, 240px) minmax(0, 1fr)",
|
|
70
|
+
gridTemplateRows: takeover.active ? "auto minmax(0, 1fr)" : undefined,
|
|
71
|
+
padding: 14,
|
|
72
|
+
}, children: [_jsxs("nav", { className: "fl-picker", "aria-label": "Conversations", style: { alignSelf: "stretch", display: "flex", flexDirection: "column", gap: 8, maxHeight: "none", maxWidth: "none", padding: 12 }, children: [_jsx("button", { type: "button", className: "fl-btn fl-btn-primary", onClick: () => { userChose.current = true; setSelected(undefined); setMinted(undefined); }, children: "New conversation" }), threads.map(thread => (_jsx("button", { type: "button", className: `fl-btn${activeId === thread.id ? " fl-btn-primary" : ""}`, "aria-current": activeId === thread.id ? "page" : undefined, onClick: () => { userChose.current = true; setSelected(thread.id); setMinted(undefined); }, style: { justifyContent: "flex-start", textAlign: "left" }, children: thread.title }, thread.id)))] }), _jsxs("div", { style: { display: "flex", flexDirection: "column", gap: 12, minHeight: 0 }, children: [_jsx(WaitingQueue, {}), _jsx("div", { style: { flex: 1, minHeight: 0, display: "flex", flexDirection: "column" }, children: _jsx(VendoThread, { threadId: selected, onThreadId: onThreadId, discoverability: userChose.current || (!isLoading && threadsError === undefined && threads.length === 0)
|
|
73
|
+
? undefined
|
|
74
|
+
: "quiet" }) })] })] }));
|
|
75
|
+
}
|
|
76
|
+
function OpenApp({ appId }) {
|
|
77
|
+
const { client, components } = useVendoContext();
|
|
78
|
+
const { surface, refresh } = useApp(appId);
|
|
79
|
+
// Wave 7 H2 — same keepalive as VendoSlot's MountedApp (see frames.tsx).
|
|
80
|
+
const keepalive = useMemo(() => ({ ping: () => client.apps.pingMachine(appId), reopen: refresh }), [appId, client, refresh]);
|
|
81
|
+
if (!surface)
|
|
82
|
+
return _jsx("div", { role: "status", children: "Opening app\u2026" });
|
|
83
|
+
return _jsx(AppFrame, { surface: surface, components: components, keepalive: keepalive, onAction: ({ action, payload }) => client.apps.call(appId, action, payload ?? {}) }, appId);
|
|
84
|
+
}
|
|
85
|
+
function AppsWorkspace() {
|
|
86
|
+
const { apps, create, fork, remove } = useApps();
|
|
87
|
+
const [selected, setSelected] = useState();
|
|
88
|
+
const [prompt, setPrompt] = useState("");
|
|
89
|
+
const [error, setError] = useState();
|
|
90
|
+
const during = async (action) => {
|
|
91
|
+
setError(undefined);
|
|
92
|
+
try {
|
|
93
|
+
await action();
|
|
94
|
+
}
|
|
95
|
+
catch (reason) {
|
|
96
|
+
setError(reason instanceof Error ? reason.message : String(reason));
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
const submit = async (event) => {
|
|
100
|
+
event.preventDefault();
|
|
101
|
+
const value = prompt.trim();
|
|
102
|
+
if (!value)
|
|
103
|
+
return;
|
|
104
|
+
await during(async () => {
|
|
105
|
+
const app = await create(value);
|
|
106
|
+
setPrompt("");
|
|
107
|
+
setSelected(app.id);
|
|
108
|
+
});
|
|
109
|
+
};
|
|
110
|
+
return (_jsxs("div", { className: "fl-page-pane", style: { gap: 14, overflowY: "auto", padding: 14 }, children: [error ? _jsx("div", { role: "alert", className: "fl-error", children: error }) : null, _jsxs("form", { className: "fl-picker-toprow", "aria-label": "Create app", onSubmit: event => void submit(event), children: [_jsxs("label", { style: { flex: 1 }, children: [_jsx("span", { className: "fl-picker-group", style: { display: "block", margin: "0 2px 7px" }, children: "Describe a new app" }), _jsx("input", { className: "fl-picker-search", value: prompt, onChange: event => setPrompt(event.currentTarget.value) })] }), _jsx("button", { className: "fl-btn fl-btn-primary", type: "submit", disabled: !prompt.trim(), children: "Create" })] }), _jsx("div", { className: "fl-picker-grid", children: apps.map(app => (_jsxs("article", { className: "fl-picker-item fl-automation", style: { alignItems: "stretch", flexDirection: "column", padding: 0 }, children: [_jsxs("div", { className: "fl-auto-head", children: [_jsx("span", { className: "fl-auto-ic", "aria-hidden": "true", children: _jsxs("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("rect", { width: "7", height: "7", x: "3", y: "3", rx: "1" }), _jsx("rect", { width: "7", height: "7", x: "14", y: "3", rx: "1" }), _jsx("rect", { width: "7", height: "7", x: "3", y: "14", rx: "1" }), _jsx("rect", { width: "7", height: "7", x: "14", y: "14", rx: "1" })] }) }), _jsxs("div", { children: [_jsx("strong", { className: "fl-auto-title", children: app.name }), app.description ? _jsx("p", { className: "fl-auto-sub", style: { marginBottom: 0 }, children: app.description }) : null] })] }), _jsxs("div", { className: "fl-auto-flow", style: { gap: 8 }, children: [_jsx("button", { className: "fl-btn fl-btn-primary", type: "button", onClick: () => setSelected(app.id), children: "Open" }), _jsx("button", { className: "fl-btn", type: "button", onClick: () => void during(async () => { await fork(app.id); }), children: "Fork" }), _jsx("button", { className: "fl-btn fl-btn-ceremony", type: "button", onClick: () => {
|
|
111
|
+
if (globalThis.confirm?.(`Remove ${app.name}?`)) {
|
|
112
|
+
void during(async () => {
|
|
113
|
+
await remove(app.id);
|
|
114
|
+
if (selected === app.id)
|
|
115
|
+
setSelected(undefined);
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}, children: "Remove" })] })] }, app.id))) }), selected ? _jsx("section", { className: "fl-glass", "aria-label": "Open app", children: _jsx(OpenApp, { appId: selected }, selected) }) : null] }));
|
|
119
|
+
}
|
|
120
|
+
/** 08-ui §4 — full workspace with WAI-ARIA automatic-activation tabs. */
|
|
121
|
+
export function VendoPage() {
|
|
122
|
+
const takeover = useMobileTakeover();
|
|
123
|
+
const [tab, setTab] = useState("chat");
|
|
124
|
+
const tabRefs = useRef([]);
|
|
125
|
+
// Lane pick 4-C — the Activity tab is the morph's dock anchor: the approved
|
|
126
|
+
// pill shrinks into it and this pulse answers, teaching where receipts live.
|
|
127
|
+
const [activityBump, setActivityBump] = useState(false);
|
|
128
|
+
useEffect(() => {
|
|
129
|
+
let timer;
|
|
130
|
+
const onBump = () => {
|
|
131
|
+
setActivityBump(false);
|
|
132
|
+
requestAnimationFrame(() => setActivityBump(true));
|
|
133
|
+
if (timer !== undefined)
|
|
134
|
+
window.clearTimeout(timer);
|
|
135
|
+
timer = window.setTimeout(() => setActivityBump(false), 700);
|
|
136
|
+
};
|
|
137
|
+
window.addEventListener(ACTIVITY_BUMP_EVENT, onBump);
|
|
138
|
+
return () => {
|
|
139
|
+
window.removeEventListener(ACTIVITY_BUMP_EVENT, onBump);
|
|
140
|
+
if (timer !== undefined)
|
|
141
|
+
window.clearTimeout(timer);
|
|
142
|
+
};
|
|
143
|
+
}, []);
|
|
144
|
+
const move = (event, index) => {
|
|
145
|
+
let next = index;
|
|
146
|
+
if (event.key === "ArrowRight")
|
|
147
|
+
next = (index + 1) % TABS.length;
|
|
148
|
+
else if (event.key === "ArrowLeft")
|
|
149
|
+
next = (index - 1 + TABS.length) % TABS.length;
|
|
150
|
+
else if (event.key === "Home")
|
|
151
|
+
next = 0;
|
|
152
|
+
else if (event.key === "End")
|
|
153
|
+
next = TABS.length - 1;
|
|
154
|
+
else
|
|
155
|
+
return;
|
|
156
|
+
event.preventDefault();
|
|
157
|
+
setTab(TABS[next]);
|
|
158
|
+
tabRefs.current[next]?.focus();
|
|
159
|
+
};
|
|
160
|
+
return (_jsx(ChromeRoot, { children: _jsx(TakeoverPortal, { active: takeover.active, children: _jsxs("main", { className: `fl-page${takeover.active ? " fl-takeover" : ""}`, style: takeover.style, "aria-label": "Vendo workspace", children: [_jsx("div", { className: "fl-tabbar", role: "tablist", "aria-label": "Workspace sections", children: TABS.map((item, index) => (_jsx("button", { ref: node => { tabRefs.current[index] = node; }, className: `fl-tab${item === "activity" && activityBump ? " fl-tab--bump" : ""}`, id: `vendo-tab-${item}`, type: "button", role: "tab", "aria-selected": tab === item, "aria-controls": `vendo-panel-${item}`, tabIndex: tab === item ? 0 : -1, onClick: () => setTab(item), onKeyDown: event => move(event, index), ...(item === "activity" ? { [ACTIVITY_ANCHOR_ATTRIBUTE]: "" } : {}), children: title(item) }, item))) }), _jsx("div", { className: "fl-page-body", children: _jsxs("section", { className: "fl-page-pane", id: `vendo-panel-${tab}`, role: "tabpanel", "aria-labelledby": `vendo-tab-${tab}`, children: [tab === "chat" ? _jsx(ChatWorkspace, {}) : null, tab === "apps" ? _jsx(AppsWorkspace, {}) : null, tab === "automations" ? _jsx(AutomationsPanel, {}) : null, tab === "accounts" ? _jsx(ConnectedAccountsPanel, {}) : null, tab === "activity" ? _jsx(ActivityPanel, {}) : null] }) })] }) }) }));
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=vendo-page.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vendo-page.js","sourceRoot":"","sources":["../../src/chrome/vendo-page.tsx"],"names":[],"mappings":"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"}
|