@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 @@
|
|
|
1
|
+
{"version":3,"file":"chrome-css.js","sourceRoot":"","sources":["../../src/chrome/chrome-css.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD;;;;+DAI+D;AAC/D,MAAM,CAAC,MAAM,UAAU,GAAG,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAk/D1C,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type ReactNode } from "react";
|
|
2
|
+
/** Inject the chrome stylesheet once. Exported for surfaces that portal OUT of
|
|
3
|
+
a ChromeRoot's DOM subtree (MorphToast, VendoToasts) and hand-roll their own
|
|
4
|
+
`.vendo-root` theme boundary on document.body. */
|
|
5
|
+
export declare function ensureChromeStyles(): void;
|
|
6
|
+
export declare function useChromeRootPresence(): boolean;
|
|
7
|
+
/** 08-ui §4, §6 — one shared theme/style/notice boundary per chrome surface. */
|
|
8
|
+
export declare function ChromeRoot({ children, className, automaticPolicyNotice, }: {
|
|
9
|
+
children: ReactNode;
|
|
10
|
+
className?: string;
|
|
11
|
+
automaticPolicyNotice?: boolean;
|
|
12
|
+
}): import("react").JSX.Element;
|
|
13
|
+
//# sourceMappingURL=chrome-root.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chrome-root.d.ts","sourceRoot":"","sources":["../../src/chrome/chrome-root.tsx"],"names":[],"mappings":"AAAA,OAAO,EAA4D,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAQjG;;qDAEqD;AACrD,wBAAgB,kBAAkB,IAAI,IAAI,CAMzC;AAID,wBAAgB,qBAAqB,IAAI,OAAO,CAE/C;AAiCD,gFAAgF;AAChF,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,SAAS,EACT,qBAA4B,GAC7B,EAAE;IACD,QAAQ,EAAE,SAAS,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC,+BAIA"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { createContext, useContext, useEffect } from "react";
|
|
3
|
+
import { useVendoTheme } from "../context.js";
|
|
4
|
+
import { useVendoStatus } from "../hooks/use-vendo-status.js";
|
|
5
|
+
import { themeCssVariables } from "../theme.js";
|
|
6
|
+
import { PolicyNoticeBody } from "./policy-notice-body.js";
|
|
7
|
+
import { CHROME_CSS } from "./chrome-css.js";
|
|
8
|
+
/** Inject the chrome stylesheet once. Exported for surfaces that portal OUT of
|
|
9
|
+
a ChromeRoot's DOM subtree (MorphToast, VendoToasts) and hand-roll their own
|
|
10
|
+
`.vendo-root` theme boundary on document.body. */
|
|
11
|
+
export function ensureChromeStyles() {
|
|
12
|
+
if (typeof document === "undefined" || document.querySelector("style[data-vendo-chrome]"))
|
|
13
|
+
return;
|
|
14
|
+
const style = document.createElement("style");
|
|
15
|
+
style.dataset.vendoChrome = "";
|
|
16
|
+
style.textContent = CHROME_CSS;
|
|
17
|
+
document.head.append(style);
|
|
18
|
+
}
|
|
19
|
+
const ChromeRootContext = createContext(false);
|
|
20
|
+
export function useChromeRootPresence() {
|
|
21
|
+
return useContext(ChromeRootContext);
|
|
22
|
+
}
|
|
23
|
+
function AutomaticPolicyNotice() {
|
|
24
|
+
const { posture, connected } = useVendoStatus();
|
|
25
|
+
return connected && posture === "unconfigured" ? _jsx(PolicyNoticeBody, {}) : null;
|
|
26
|
+
}
|
|
27
|
+
function ChromeBoundary({ children, className, automaticPolicyNotice, }) {
|
|
28
|
+
const theme = useVendoTheme();
|
|
29
|
+
useEffect(ensureChromeStyles, []);
|
|
30
|
+
return (_jsx(ChromeRootContext.Provider, { value: true, children: _jsxs("div", { className: ["vendo-root", className].filter(Boolean).join(" "), "data-vendo-motion": theme.motion, "data-vendo-density": theme.density, style: { ...themeCssVariables(theme), fontFamily: "var(--vendo-font-family)", fontSize: "var(--vendo-font-size)" }, children: [automaticPolicyNotice ? _jsx(AutomaticPolicyNotice, {}) : null, children] }) }));
|
|
31
|
+
}
|
|
32
|
+
/** 08-ui §4, §6 — one shared theme/style/notice boundary per chrome surface. */
|
|
33
|
+
export function ChromeRoot({ children, className, automaticPolicyNotice = true, }) {
|
|
34
|
+
const nested = useChromeRootPresence();
|
|
35
|
+
if (nested)
|
|
36
|
+
return _jsx(_Fragment, { children: children });
|
|
37
|
+
return _jsx(ChromeBoundary, { className: className, automaticPolicyNotice: automaticPolicyNotice, children: children });
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=chrome-root.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chrome-root.js","sourceRoot":"","sources":["../../src/chrome/chrome-root.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAsC,MAAM,OAAO,CAAC;AACjG,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C;;qDAEqD;AACrD,MAAM,UAAU,kBAAkB;IAChC,IAAI,OAAO,QAAQ,KAAK,WAAW,IAAI,QAAQ,CAAC,aAAa,CAAC,0BAA0B,CAAC;QAAE,OAAO;IAClG,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9C,KAAK,CAAC,OAAO,CAAC,WAAW,GAAG,EAAE,CAAC;IAC/B,KAAK,CAAC,WAAW,GAAG,UAAU,CAAC;IAC/B,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED,MAAM,iBAAiB,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;AAE/C,MAAM,UAAU,qBAAqB;IACnC,OAAO,UAAU,CAAC,iBAAiB,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,qBAAqB;IAC5B,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,cAAc,EAAE,CAAC;IAChD,OAAO,SAAS,IAAI,OAAO,KAAK,cAAc,CAAC,CAAC,CAAC,KAAC,gBAAgB,KAAG,CAAC,CAAC,CAAC,IAAI,CAAC;AAC/E,CAAC;AAED,SAAS,cAAc,CAAC,EACtB,QAAQ,EACR,SAAS,EACT,qBAAqB,GAKtB;IACC,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;IAC9B,SAAS,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;IAClC,OAAO,CACL,KAAC,iBAAiB,CAAC,QAAQ,IAAC,KAAK,kBAC/B,eACE,SAAS,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,uBAC3C,KAAK,CAAC,MAAM,wBACX,KAAK,CAAC,OAAO,EACjC,KAAK,EAAE,EAAE,GAAG,iBAAiB,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,0BAA0B,EAAE,QAAQ,EAAE,wBAAwB,EAAmB,aAElI,qBAAqB,CAAC,CAAC,CAAC,KAAC,qBAAqB,KAAG,CAAC,CAAC,CAAC,IAAI,EACxD,QAAQ,IACL,GACqB,CAC9B,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,UAAU,CAAC,EACzB,QAAQ,EACR,SAAS,EACT,qBAAqB,GAAG,IAAI,GAK7B;IACC,MAAM,MAAM,GAAG,qBAAqB,EAAE,CAAC;IACvC,IAAI,MAAM;QAAE,OAAO,4BAAG,QAAQ,GAAI,CAAC;IACnC,OAAO,KAAC,cAAc,IAAC,SAAS,EAAE,SAAS,EAAE,qBAAqB,EAAE,qBAAqB,YAAG,QAAQ,GAAkB,CAAC;AACzH,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** Transient copied feedback: flips true after a successful write, settles back
|
|
2
|
+
after `holdMs`. The timer is owned here so unmount never leaks it. */
|
|
3
|
+
export declare function useCopyFeedback(holdMs?: number): [boolean, (text: string) => void];
|
|
4
|
+
//# sourceMappingURL=clipboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clipboard.d.ts","sourceRoot":"","sources":["../../src/chrome/clipboard.ts"],"names":[],"mappings":"AA+BA;yEACyE;AACzE,wBAAgB,eAAe,CAAC,MAAM,SAAO,GAAG,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,CAahF"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/** ENG-225 — one clipboard write for every copy affordance (turn copy, code
|
|
2
|
+
copy). `navigator.clipboard` needs a secure context; the execCommand path
|
|
3
|
+
keeps copy alive on plain-http dev hosts. Resolves to whether the text made
|
|
4
|
+
it out so callers only show "Copied" when it's true. */
|
|
5
|
+
import { useEffect, useRef, useState } from "react";
|
|
6
|
+
async function writeClipboard(text) {
|
|
7
|
+
try {
|
|
8
|
+
if (typeof navigator !== "undefined" && navigator.clipboard !== undefined) {
|
|
9
|
+
await navigator.clipboard.writeText(text);
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
// Permission or focus refusal — try the legacy path below.
|
|
15
|
+
}
|
|
16
|
+
try {
|
|
17
|
+
const area = document.createElement("textarea");
|
|
18
|
+
area.value = text;
|
|
19
|
+
area.setAttribute("readonly", "");
|
|
20
|
+
area.style.position = "fixed";
|
|
21
|
+
area.style.opacity = "0";
|
|
22
|
+
document.body.appendChild(area);
|
|
23
|
+
area.select();
|
|
24
|
+
const copied = document.execCommand("copy");
|
|
25
|
+
area.remove();
|
|
26
|
+
return copied;
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/** Transient copied feedback: flips true after a successful write, settles back
|
|
33
|
+
after `holdMs`. The timer is owned here so unmount never leaks it. */
|
|
34
|
+
export function useCopyFeedback(holdMs = 1600) {
|
|
35
|
+
const [copied, setCopied] = useState(false);
|
|
36
|
+
const timer = useRef(undefined);
|
|
37
|
+
useEffect(() => () => clearTimeout(timer.current), []);
|
|
38
|
+
const copy = (text) => {
|
|
39
|
+
void writeClipboard(text).then(ok => {
|
|
40
|
+
if (!ok)
|
|
41
|
+
return;
|
|
42
|
+
setCopied(true);
|
|
43
|
+
clearTimeout(timer.current);
|
|
44
|
+
timer.current = setTimeout(() => setCopied(false), holdMs);
|
|
45
|
+
});
|
|
46
|
+
};
|
|
47
|
+
return [copied, copy];
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=clipboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clipboard.js","sourceRoot":"","sources":["../../src/chrome/clipboard.ts"],"names":[],"mappings":"AAAA;;;2DAG2D;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAEpD,KAAK,UAAU,cAAc,CAAC,IAAY;IACxC,IAAI,CAAC;QACH,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAC1E,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAC1C,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,2DAA2D;IAC7D,CAAC;IACD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAChD,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,YAAY,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;QACzB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,EAAE,CAAC;QACd,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;yEACyE;AACzE,MAAM,UAAU,eAAe,CAAC,MAAM,GAAG,IAAI;IAC3C,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,KAAK,GAAG,MAAM,CAA4C,SAAS,CAAC,CAAC;IAC3E,SAAS,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IACvD,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,EAAE;QAC5B,KAAK,cAAc,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;YAClC,IAAI,CAAC,EAAE;gBAAE,OAAO;YAChB,SAAS,CAAC,IAAI,CAAC,CAAC;YAChB,YAAY,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5B,KAAK,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IACF,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface ConnectCardProps {
|
|
2
|
+
connector: string;
|
|
3
|
+
toolkit: string;
|
|
4
|
+
message: string;
|
|
5
|
+
/** Fired once the broker reports the account active — the thread retries the call. */
|
|
6
|
+
onConnected(): void | PromiseLike<void>;
|
|
7
|
+
}
|
|
8
|
+
/** 04-actions §3 / 08-ui §4 — the inline connect card: a connector call ended
|
|
9
|
+
* `connect-required`, so offer the broker's OAuth redirect in place, poll the
|
|
10
|
+
* connection status while the user completes it, then retry the call. Follows
|
|
11
|
+
* the approval-card pattern (same chrome, keyed to the same tool call).
|
|
12
|
+
* The initiate → OAuth window → poll-to-active loop is `completeConnection`,
|
|
13
|
+
* shared with the connect dock (ENG-225).
|
|
14
|
+
*
|
|
15
|
+
* Lane pick 2-A — brand-forward: the proper-case toolkit name (never the raw
|
|
16
|
+
* slug), the toolkit's real mark in the icon well (link glyph fallback), and
|
|
17
|
+
* an OAuth chip. The ask reads as the product, not the plumbing. */
|
|
18
|
+
export declare function ConnectCard({ connector, toolkit, message, onConnected }: ConnectCardProps): import("react").JSX.Element;
|
|
19
|
+
//# sourceMappingURL=connect-card.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect-card.d.ts","sourceRoot":"","sources":["../../src/chrome/connect-card.tsx"],"names":[],"mappings":"AAQA,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,sFAAsF;IACtF,WAAW,IAAI,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;CACzC;AAID;;;;;;;;;oEASoE;AACpE,wBAAgB,WAAW,CAAC,EAAE,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,EAAE,gBAAgB,+BAqGzF"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useRef, useState } from "react";
|
|
3
|
+
import { useVendoContext } from "../context.js";
|
|
4
|
+
import { useConnectorCatalog } from "../hooks/use-connector-catalog.js";
|
|
5
|
+
import { toolkitLogoUrl } from "./build-beat.js";
|
|
6
|
+
import { ChromeRoot } from "./chrome-root.js";
|
|
7
|
+
import { completeConnection } from "./connect-dock.js";
|
|
8
|
+
import { toolkitDisplayName } from "./humanize.js";
|
|
9
|
+
/** 04-actions §3 / 08-ui §4 — the inline connect card: a connector call ended
|
|
10
|
+
* `connect-required`, so offer the broker's OAuth redirect in place, poll the
|
|
11
|
+
* connection status while the user completes it, then retry the call. Follows
|
|
12
|
+
* the approval-card pattern (same chrome, keyed to the same tool call).
|
|
13
|
+
* The initiate → OAuth window → poll-to-active loop is `completeConnection`,
|
|
14
|
+
* shared with the connect dock (ENG-225).
|
|
15
|
+
*
|
|
16
|
+
* Lane pick 2-A — brand-forward: the proper-case toolkit name (never the raw
|
|
17
|
+
* slug), the toolkit's real mark in the icon well (link glyph fallback), and
|
|
18
|
+
* an OAuth chip. The ask reads as the product, not the plumbing. */
|
|
19
|
+
export function ConnectCard({ connector, toolkit, message, onConnected }) {
|
|
20
|
+
const { client } = useVendoContext();
|
|
21
|
+
const { options: connectors } = useConnectorCatalog();
|
|
22
|
+
const [phase, setPhase] = useState("idle");
|
|
23
|
+
const [error, setError] = useState();
|
|
24
|
+
// Keyed to the toolkit so a failed mark for one toolkit never suppresses
|
|
25
|
+
// branding after the prop changes.
|
|
26
|
+
const [logoFailedFor, setLogoFailedFor] = useState();
|
|
27
|
+
const cancelled = useRef(false);
|
|
28
|
+
useEffect(() => () => {
|
|
29
|
+
cancelled.current = true;
|
|
30
|
+
}, []);
|
|
31
|
+
// The host's catalog label wins when it named this toolkit (same rule as
|
|
32
|
+
// the connect dock); otherwise the proper-cased toolkit.
|
|
33
|
+
const option = connectors.find(candidate => candidate.toolkit === toolkit);
|
|
34
|
+
const displayName = option?.label ?? toolkitDisplayName(toolkit);
|
|
35
|
+
const logoUrl = logoFailedFor === toolkit ? undefined : toolkitLogoUrl(toolkit);
|
|
36
|
+
const connect = async () => {
|
|
37
|
+
setPhase("connecting");
|
|
38
|
+
setError(undefined);
|
|
39
|
+
try {
|
|
40
|
+
await completeConnection(client, { toolkit, connector }, () => cancelled.current);
|
|
41
|
+
if (cancelled.current)
|
|
42
|
+
return;
|
|
43
|
+
setPhase("connected");
|
|
44
|
+
await onConnected();
|
|
45
|
+
}
|
|
46
|
+
catch (reason) {
|
|
47
|
+
if (cancelled.current)
|
|
48
|
+
return;
|
|
49
|
+
setPhase("failed");
|
|
50
|
+
setError(reason instanceof Error ? reason.message : String(reason));
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
return (_jsx(ChromeRoot, { children: _jsxs("article", { className: "fl-approval fl-item-in", "aria-label": `Connect ${displayName}`, children: [_jsxs("div", { className: "fl-approval-head", children: [_jsx("span", { className: "fl-approval-ic", "aria-hidden": "true", children: logoUrl ? (
|
|
54
|
+
// eslint-disable-next-line @next/next/no-img-element -- chrome surface, plain img by design
|
|
55
|
+
_jsx("img", { src: logoUrl, alt: "", width: 16, height: 16, style: { display: "block", objectFit: "contain" }, onError: () => setLogoFailedFor(toolkit) })) : (_jsx("svg", { width: "15", height: "15", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: _jsx("path", { d: "M9 17H7A5 5 0 0 1 7 7h2M15 7h2a5 5 0 1 1 0 10h-2M8 12h8" }) })) }), _jsxs("div", { className: "fl-approval-heading", children: [_jsx("div", { className: "fl-approval-eyebrow", children: "CONNECT" }), _jsx("div", { className: "fl-approval-title", children: displayName })] }), _jsx("span", { className: "fl-chip", title: connector, style: { marginLeft: "auto", padding: "2px 7px", fontSize: "10px", cursor: "default" }, children: "OAuth" })] }), _jsx("p", { className: "fl-approval-more", style: { marginTop: "8px" }, children: message }), error ? _jsx("div", { role: "alert", className: "fl-error", children: error }) : null, _jsx("div", { className: "fl-approval-actions", children: phase === "connected" ? (_jsx("span", { role: "status", className: "fl-approval-more", children: "Connected \u2014 retrying\u2026" })) : (_jsxs(_Fragment, { children: [_jsx("button", { className: "fl-btn fl-btn-primary", type: "button", "aria-label": `Connect ${displayName}`, disabled: phase === "connecting", onClick: () => void connect(), children: phase === "connecting" ? "Waiting for connection…" : `Connect ${displayName}` }), phase === "connecting" ? (_jsx("span", { role: "status", className: "fl-approval-more", children: "Finish signing in, then come back." })) : null] })) })] }) }));
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=connect-card.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect-card.js","sourceRoot":"","sources":["../../src/chrome/connect-card.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { useVendoContext } from "../context.js";
|
|
2
|
+
/** Initiate a broker connection and poll it to `active` (the ConnectCard flow,
|
|
3
|
+
shared). Opens the hosted OAuth redirect in its own window. */
|
|
4
|
+
export declare function completeConnection(client: ReturnType<typeof useVendoContext>["client"], input: {
|
|
5
|
+
toolkit: string;
|
|
6
|
+
connector?: string;
|
|
7
|
+
}, isCancelled: () => boolean): Promise<void>;
|
|
8
|
+
/** The dock button in the composer row. Renders nothing when the effective
|
|
9
|
+
catalog is empty — an explicit `connectors={[]}`, or an auto catalog that
|
|
10
|
+
resolved to nothing. The inner component owns the /connections fetch, so a
|
|
11
|
+
thread whose catalog is empty never polls accounts; auto mode costs one
|
|
12
|
+
shared /connections/catalog read (useConnectorCatalog). */
|
|
13
|
+
export declare const ConnectDockButton: import("react").ForwardRefExoticComponent<{
|
|
14
|
+
open: boolean;
|
|
15
|
+
onToggle(): void;
|
|
16
|
+
} & import("react").RefAttributes<HTMLButtonElement>>;
|
|
17
|
+
/** The liquid tray: rendered by VendoThread inside `.fl-dock-anchor`, above the
|
|
18
|
+
composer it docks onto. `anchorRef` is the dock button that opened it — an
|
|
19
|
+
outside-press on THAT button must not close (the button's own click toggles;
|
|
20
|
+
closing here first would let the toggle reopen it, Devin/Greptile review). */
|
|
21
|
+
export declare function ConnectTray({ onClose, anchorRef }: {
|
|
22
|
+
onClose(): void;
|
|
23
|
+
anchorRef?: React.RefObject<HTMLButtonElement | null>;
|
|
24
|
+
}): import("react").JSX.Element;
|
|
25
|
+
//# sourceMappingURL=connect-dock.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect-dock.d.ts","sourceRoot":"","sources":["../../src/chrome/connect-dock.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAE,eAAe,EAAwB,MAAM,eAAe,CAAC;AAUtE;kEACkE;AAClE,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC,QAAQ,CAAC,EACpD,KAAK,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,EAC9C,WAAW,EAAE,MAAM,OAAO,GACzB,OAAO,CAAC,IAAI,CAAC,CAef;AAOD;;;;8DAI8D;AAC9D,eAAO,MAAM,iBAAiB;UAAyC,OAAO;gBAAc,IAAI;qDAM/F,CAAC;AA0CF;;;iFAGiF;AACjF,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE;IAClD,OAAO,IAAI,IAAI,CAAC;IAChB,SAAS,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAAC;CACvD,+BAkMA"}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
/** ENG-225 — the connect dock: the in-bar connect-tools entry (.fl-dock) and
|
|
3
|
+
the liquid tray it opens over the composer (.fl-tray). The dock badge counts
|
|
4
|
+
active accounts; the tray is the designed connection selector — search, the
|
|
5
|
+
host's connectable toolkits, one-click OAuth through the broker (04 §3.1),
|
|
6
|
+
the observed-connect bloom on success.
|
|
7
|
+
|
|
8
|
+
The tray must dock flush onto the composer, so `VendoThread` owns the
|
|
9
|
+
open/close state and renders `<ConnectTray>` inside the `.fl-dock-anchor`
|
|
10
|
+
that wraps its composer; `<ConnectDockButton>` rides in the composer row. */
|
|
11
|
+
import { forwardRef, useEffect, useMemo, useRef, useState } from "react";
|
|
12
|
+
import { useVendoContext } from "../context.js";
|
|
13
|
+
import { useConnections } from "../hooks/use-connections.js";
|
|
14
|
+
import { useConnectorCatalog } from "../hooks/use-connector-catalog.js";
|
|
15
|
+
import { toolkitLogoUrl } from "./build-beat.js";
|
|
16
|
+
import { toolkitDisplayName } from "./humanize.js";
|
|
17
|
+
const POLL_INTERVAL_MS = 1_500;
|
|
18
|
+
const POLL_DEADLINE_MS = 120_000;
|
|
19
|
+
/** Initiate a broker connection and poll it to `active` (the ConnectCard flow,
|
|
20
|
+
shared). Opens the hosted OAuth redirect in its own window. */
|
|
21
|
+
export async function completeConnection(client, input, isCancelled) {
|
|
22
|
+
const initiated = await client.connections.initiate(input);
|
|
23
|
+
window.open(initiated.redirectUrl, "_blank", "noopener");
|
|
24
|
+
const deadline = Date.now() + POLL_DEADLINE_MS;
|
|
25
|
+
while (!isCancelled() && Date.now() < deadline) {
|
|
26
|
+
const account = await client.connections
|
|
27
|
+
.status(initiated.id, initiated.connector)
|
|
28
|
+
.catch(() => undefined);
|
|
29
|
+
if (account?.status === "active")
|
|
30
|
+
return;
|
|
31
|
+
if (account?.status === "failed" || account?.status === "expired") {
|
|
32
|
+
throw new Error(`The ${input.toolkit} connection ${account.status} — try again.`);
|
|
33
|
+
}
|
|
34
|
+
await new Promise(resolve => setTimeout(resolve, POLL_INTERVAL_MS));
|
|
35
|
+
}
|
|
36
|
+
if (!isCancelled())
|
|
37
|
+
throw new Error(`Timed out waiting for the ${input.toolkit} connection — try again.`);
|
|
38
|
+
}
|
|
39
|
+
function displayName(option) {
|
|
40
|
+
if (option.label !== undefined)
|
|
41
|
+
return option.label;
|
|
42
|
+
return toolkitDisplayName(option.toolkit);
|
|
43
|
+
}
|
|
44
|
+
/** The dock button in the composer row. Renders nothing when the effective
|
|
45
|
+
catalog is empty — an explicit `connectors={[]}`, or an auto catalog that
|
|
46
|
+
resolved to nothing. The inner component owns the /connections fetch, so a
|
|
47
|
+
thread whose catalog is empty never polls accounts; auto mode costs one
|
|
48
|
+
shared /connections/catalog read (useConnectorCatalog). */
|
|
49
|
+
export const ConnectDockButton = forwardRef(function ConnectDockButton(props, ref) {
|
|
50
|
+
const { options, resolved } = useConnectorCatalog();
|
|
51
|
+
if (!resolved || options.length === 0)
|
|
52
|
+
return null;
|
|
53
|
+
return _jsx(DockButtonInner, { ...props, buttonRef: ref });
|
|
54
|
+
});
|
|
55
|
+
function DockButtonInner({ open, onToggle, buttonRef }) {
|
|
56
|
+
// Devin/ENG-225 review: the badge and the tray hold separate useConnections
|
|
57
|
+
// instances (useResource is per-hook), so a connect made in the tray never
|
|
58
|
+
// reached the badge. Poll so the count converges after a connect — the same
|
|
59
|
+
// cross-instance freshness pattern the approvals surfaces use (ENG-219).
|
|
60
|
+
const { connections } = useConnections({ pollMs: 3_000 });
|
|
61
|
+
const active = connections.filter(account => account.status === "active").length;
|
|
62
|
+
return (_jsxs("span", { className: "fl-dock", children: [_jsx("span", { className: "fl-dock-ripple", children: _jsx("button", { ref: buttonRef, type: "button", className: "fl-icon-btn fl-dock-btn", "aria-label": "Connect tools", "aria-expanded": open, onClick: onToggle, children: _jsx("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("path", { d: "M9 17H7A5 5 0 0 1 7 7h2M15 7h2a5 5 0 1 1 0 10h-2M8 12h8" }) }) }) }), active > 0 ? _jsx("span", { className: "fl-dock-badge", "aria-hidden": "true", children: active }) : null] }));
|
|
63
|
+
}
|
|
64
|
+
/** The liquid tray: rendered by VendoThread inside `.fl-dock-anchor`, above the
|
|
65
|
+
composer it docks onto. `anchorRef` is the dock button that opened it — an
|
|
66
|
+
outside-press on THAT button must not close (the button's own click toggles;
|
|
67
|
+
closing here first would let the toggle reopen it, Devin/Greptile review). */
|
|
68
|
+
export function ConnectTray({ onClose, anchorRef }) {
|
|
69
|
+
const { client } = useVendoContext();
|
|
70
|
+
const { options: connectors } = useConnectorCatalog();
|
|
71
|
+
const { connections, refresh } = useConnections();
|
|
72
|
+
const [query, setQuery] = useState("");
|
|
73
|
+
const [connecting, setConnecting] = useState();
|
|
74
|
+
const [justConnected, setJustConnected] = useState();
|
|
75
|
+
const [error, setError] = useState();
|
|
76
|
+
// 3-A′ — toolkits whose brand mark failed to load fall back to the monogram.
|
|
77
|
+
const [failedLogos, setFailedLogos] = useState(new Set());
|
|
78
|
+
const trayRef = useRef(null);
|
|
79
|
+
const searchRef = useRef(null);
|
|
80
|
+
const cancelledRef = useRef(false);
|
|
81
|
+
useEffect(() => () => {
|
|
82
|
+
cancelledRef.current = true;
|
|
83
|
+
}, []);
|
|
84
|
+
// --fl-tray-max: the room actually above the bar within this surface, so the
|
|
85
|
+
// tray never runs off the top — the picker scrolls internally instead.
|
|
86
|
+
useEffect(() => {
|
|
87
|
+
const tray = trayRef.current;
|
|
88
|
+
if (!tray)
|
|
89
|
+
return;
|
|
90
|
+
const surface = tray.closest(".fl-thread") ?? undefined;
|
|
91
|
+
if (surface) {
|
|
92
|
+
const room = tray.parentElement.getBoundingClientRect().top - surface.getBoundingClientRect().top - 12;
|
|
93
|
+
if (room > 80)
|
|
94
|
+
tray.style.setProperty("--fl-tray-max", `${Math.round(room)}px`);
|
|
95
|
+
}
|
|
96
|
+
searchRef.current?.focus();
|
|
97
|
+
}, []);
|
|
98
|
+
// Escape and outside-press close the tray (focus restoration is the
|
|
99
|
+
// caller's job — it owns the dock button).
|
|
100
|
+
useEffect(() => {
|
|
101
|
+
const onKey = (event) => {
|
|
102
|
+
if (event.key === "Escape")
|
|
103
|
+
onClose();
|
|
104
|
+
};
|
|
105
|
+
const onPress = (event) => {
|
|
106
|
+
const tray = trayRef.current;
|
|
107
|
+
if (!tray || !(event.target instanceof Node))
|
|
108
|
+
return;
|
|
109
|
+
if (tray.contains(event.target))
|
|
110
|
+
return;
|
|
111
|
+
// The dock button owns its own toggle; let it close the tray itself.
|
|
112
|
+
if (anchorRef?.current?.contains(event.target))
|
|
113
|
+
return;
|
|
114
|
+
onClose();
|
|
115
|
+
};
|
|
116
|
+
document.addEventListener("keydown", onKey);
|
|
117
|
+
document.addEventListener("mousedown", onPress);
|
|
118
|
+
return () => {
|
|
119
|
+
document.removeEventListener("keydown", onKey);
|
|
120
|
+
document.removeEventListener("mousedown", onPress);
|
|
121
|
+
};
|
|
122
|
+
}, [onClose, anchorRef]);
|
|
123
|
+
const rows = useMemo(() => {
|
|
124
|
+
const activeByToolkit = new Map();
|
|
125
|
+
for (const account of connections) {
|
|
126
|
+
if (account.status === "active")
|
|
127
|
+
activeByToolkit.set(account.toolkit, account);
|
|
128
|
+
}
|
|
129
|
+
const connected = [];
|
|
130
|
+
const available = [];
|
|
131
|
+
const listed = new Set();
|
|
132
|
+
for (const option of connectors) {
|
|
133
|
+
listed.add(option.toolkit);
|
|
134
|
+
const account = activeByToolkit.get(option.toolkit);
|
|
135
|
+
const row = {
|
|
136
|
+
key: option.toolkit,
|
|
137
|
+
name: displayName(option),
|
|
138
|
+
toolkit: option.toolkit,
|
|
139
|
+
...(option.connector !== undefined ? { connector: option.connector } : {}),
|
|
140
|
+
...(account !== undefined ? { account } : {}),
|
|
141
|
+
};
|
|
142
|
+
(account !== undefined ? connected : available).push(row);
|
|
143
|
+
}
|
|
144
|
+
// Accounts outside the host catalog still show as connected — the list is
|
|
145
|
+
// the user's truth, not the catalog's.
|
|
146
|
+
for (const [toolkit, account] of activeByToolkit) {
|
|
147
|
+
if (listed.has(toolkit))
|
|
148
|
+
continue;
|
|
149
|
+
connected.push({
|
|
150
|
+
key: toolkit,
|
|
151
|
+
name: toolkitDisplayName(toolkit),
|
|
152
|
+
toolkit,
|
|
153
|
+
connector: account.connector,
|
|
154
|
+
account,
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
const match = (row) => row.name.toLowerCase().includes(query.toLowerCase()) || row.toolkit.toLowerCase().includes(query.toLowerCase());
|
|
158
|
+
return { connected: connected.filter(match), available: available.filter(match) };
|
|
159
|
+
}, [connections, connectors, query]);
|
|
160
|
+
const connect = async (row) => {
|
|
161
|
+
setConnecting(row.toolkit);
|
|
162
|
+
setError(undefined);
|
|
163
|
+
try {
|
|
164
|
+
await completeConnection(client, { toolkit: row.toolkit, ...(row.connector !== undefined ? { connector: row.connector } : {}) }, () => cancelledRef.current);
|
|
165
|
+
if (cancelledRef.current)
|
|
166
|
+
return;
|
|
167
|
+
await refresh();
|
|
168
|
+
setJustConnected(row.toolkit);
|
|
169
|
+
}
|
|
170
|
+
catch (reason) {
|
|
171
|
+
if (!cancelledRef.current)
|
|
172
|
+
setError(reason instanceof Error ? reason.message : String(reason));
|
|
173
|
+
}
|
|
174
|
+
finally {
|
|
175
|
+
if (!cancelledRef.current)
|
|
176
|
+
setConnecting(undefined);
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
const item = (row) => {
|
|
180
|
+
const isConnected = row.account !== undefined;
|
|
181
|
+
const isConnecting = connecting === row.toolkit;
|
|
182
|
+
// Lane pick 3-A′ — real brand marks in the tray rows; the two-letter
|
|
183
|
+
// monogram stays as the fallback for toolkits without a mapped domain or
|
|
184
|
+
// whose mark failed to load.
|
|
185
|
+
const logoUrl = failedLogos.has(row.toolkit) ? undefined : toolkitLogoUrl(row.toolkit);
|
|
186
|
+
return (_jsxs("li", { className: `fl-picker-item${isConnected ? " is-connected" : ""}${justConnected === row.toolkit ? " is-just-connected" : ""}`, children: [_jsx("span", { className: "fl-picker-ic", "aria-hidden": "true", children: logoUrl ? (
|
|
187
|
+
// eslint-disable-next-line @next/next/no-img-element -- chrome surface, plain img by design
|
|
188
|
+
_jsx("img", { src: logoUrl, alt: "", width: 15, height: 15, onError: () => setFailedLogos(previous => new Set(previous).add(row.toolkit)) })) : (row.name.slice(0, 2).toUpperCase()) }), _jsx("span", { className: "fl-picker-nm", children: row.name }), _jsx("span", { className: "fl-picker-status", children: isConnected ? (_jsx("span", { className: "fl-picker-on", role: "img", "aria-label": `${row.name} connected` })) : isConnecting ? (_jsx("span", { className: "fl-picker-connecting", role: "status", "aria-label": `Connecting ${row.name}`, children: _jsxs("span", { className: "fl-typing", "aria-hidden": "true", children: [_jsx("span", {}), _jsx("span", {}), _jsx("span", {})] }) })) : (_jsx("button", { type: "button", className: "fl-picker-add", "aria-label": `Connect ${row.name}`, disabled: connecting !== undefined, onClick: () => void connect(row), children: "+" })) })] }, row.key));
|
|
189
|
+
};
|
|
190
|
+
return (_jsx("div", { ref: trayRef, className: "fl-tray", role: "dialog", "aria-label": "Connect tools", children: _jsxs("div", { className: "fl-picker", children: [_jsxs("div", { className: "fl-picker-toprow", children: [_jsx("input", { ref: searchRef, className: "fl-picker-search", type: "search", "aria-label": "Search tools", placeholder: "Search tools", value: query, onChange: event => setQuery(event.currentTarget.value) }), _jsx("button", { type: "button", className: "fl-picker-close", "aria-label": "Close connect tray", onClick: onClose, children: _jsx("svg", { width: "13", height: "13", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": "true", children: _jsx("path", { d: "M18 6 6 18M6 6l12 12" }) }) })] }), error !== undefined ? _jsx("div", { role: "alert", className: "fl-att-error", children: error }) : null, rows.connected.length > 0 ? (_jsxs(_Fragment, { children: [_jsx("div", { className: "fl-picker-group", children: "Connected" }), _jsx("ul", { className: "fl-picker-grid", style: { listStyle: "none", margin: 0 }, children: rows.connected.map(item) })] })) : null, rows.available.length > 0 ? (_jsxs(_Fragment, { children: [_jsx("div", { className: "fl-picker-group", children: "Available" }), _jsx("ul", { className: "fl-picker-grid", style: { listStyle: "none", margin: 0 }, children: rows.available.map(item) })] })) : null, rows.connected.length === 0 && rows.available.length === 0 ? (_jsx("div", { className: "fl-auto-sub", role: "status", children: "No matching tools" })) : null] }) }));
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=connect-dock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect-dock.js","sourceRoot":"","sources":["../../src/chrome/connect-dock.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface ConnectedAccountsPanelProps {
|
|
2
|
+
/** The undo window (ms) between confirming a disconnect and the wire call
|
|
3
|
+
* actually firing. Undo inside the window cancels; navigating away flushes
|
|
4
|
+
* the pending disconnect immediately. Default 10s. */
|
|
5
|
+
undoMs?: number;
|
|
6
|
+
}
|
|
7
|
+
/** 04-actions §3 / 08-ui §4 — the persistent connected-accounts settings
|
|
8
|
+
* surface: every external account the signed-in user has connected through
|
|
9
|
+
* the broker, with real service identity (logo, display name, status chip)
|
|
10
|
+
* and a consequence-aware, reversible disconnect. Connecting normally happens
|
|
11
|
+
* in-flow (the connect card); the empty state additionally offers connecting
|
|
12
|
+
* ahead of time via the same broker redirect. */
|
|
13
|
+
export declare function ConnectedAccountsPanel({ undoMs }?: ConnectedAccountsPanelProps): import("react").JSX.Element;
|
|
14
|
+
//# sourceMappingURL=connected-accounts-panel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connected-accounts-panel.d.ts","sourceRoot":"","sources":["../../src/chrome/connected-accounts-panel.tsx"],"names":[],"mappings":"AAoDA,MAAM,WAAW,2BAA2B;IAC1C;;2DAEuD;IACvD,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;iDAKiD;AACjD,wBAAgB,sBAAsB,CAAC,EAAE,MAAe,EAAE,GAAE,2BAAgC,+BAkN3F"}
|