@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,71 @@
|
|
|
1
|
+
import { validateTreeV2, } from "@vendoai/core";
|
|
2
|
+
/**
|
|
3
|
+
* v2 spec §1 (docs/superpowers/specs/2026-07-18-vendo-v2-format-spec.md) —
|
|
4
|
+
* the v2 renderer IS the v1 render path: a validated `vendo-genui/v2` tree
|
|
5
|
+
* converts mechanically to the v1 tree shape and walks through TreeView, so
|
|
6
|
+
* jail, guard, bindings, `$state`, and outcome containment are shared, not
|
|
7
|
+
* reimplemented. Only the payload surface differs:
|
|
8
|
+
*
|
|
9
|
+
* - `queries` name bare identifiers; the result lives at JSON Pointer
|
|
10
|
+
* `"/" + name` by definition — the walk's path-keyed query shape.
|
|
11
|
+
* - action props use the canonical `{ action: "..." }` shape the compiler
|
|
12
|
+
* emits (wire-v2 D5); the v1 walk dispatches `{ $action }`, so conversion
|
|
13
|
+
* rewrites the key.
|
|
14
|
+
* - component sources ride on the PAYLOAD (app-document level), never the
|
|
15
|
+
* canonical tree — validateTreeV2 rejects tree-carried `components`, so
|
|
16
|
+
* they are lifted off before validation and re-attached for the walk.
|
|
17
|
+
*
|
|
18
|
+
* This module is a PURE converter. The registry registration lives in
|
|
19
|
+
* renderer.tsx next to PayloadView: the ui package is `sideEffects: false`,
|
|
20
|
+
* so a registration-only side-effect import would be tree-shaken out of
|
|
21
|
+
* host bundles (caught live in the Wave 2 browser gate).
|
|
22
|
+
*/
|
|
23
|
+
/** wire-v2 D5 — the canonical action prop shape `{ action: "tool" | "fn:..." }`. */
|
|
24
|
+
const isActionProp = (value) => typeof value.action === "string";
|
|
25
|
+
const convertPropValue = (value) => {
|
|
26
|
+
if (Array.isArray(value))
|
|
27
|
+
return value.map(convertPropValue);
|
|
28
|
+
if (typeof value !== "object" || value === null)
|
|
29
|
+
return value;
|
|
30
|
+
const record = value;
|
|
31
|
+
if (isActionProp(record)) {
|
|
32
|
+
return {
|
|
33
|
+
$action: record.action,
|
|
34
|
+
...(record.payload === undefined ? {} : { payload: convertPropValue(record.payload) }),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
return Object.fromEntries(Object.entries(record).map(([key, child]) => [key, convertPropValue(child)]));
|
|
38
|
+
};
|
|
39
|
+
const convertNode = (node) => node.props === undefined
|
|
40
|
+
? node
|
|
41
|
+
: { ...node, props: convertPropValue(node.props) };
|
|
42
|
+
/** v2 query results reside at `"/" + name` — that pointer is the v1 path. */
|
|
43
|
+
const convertQuery = (query) => ({
|
|
44
|
+
path: `/${query.name}`,
|
|
45
|
+
tool: query.tool,
|
|
46
|
+
...(query.input === undefined ? {} : { input: query.input }),
|
|
47
|
+
});
|
|
48
|
+
export function convertV2Payload(payload) {
|
|
49
|
+
// Sources live at the app-document level; the payload may carry them
|
|
50
|
+
// alongside the tree, but the canonical v2 tree must not (validateTreeV2
|
|
51
|
+
// rejects it), so they are lifted off before the gate.
|
|
52
|
+
const { components, ...tree } = payload;
|
|
53
|
+
const validation = validateTreeV2(tree);
|
|
54
|
+
if (!validation.ok)
|
|
55
|
+
return validation;
|
|
56
|
+
// Payload extras beyond the TreeV2 shape (streaming, furnishings, inClient,
|
|
57
|
+
// pinDrift…) survive the spread at runtime; the shared walk reads them off
|
|
58
|
+
// the tree object (v2 spec §6 — the mechanics survive, the v1 format
|
|
59
|
+
// surface around them is gone).
|
|
60
|
+
const valid = validation.tree;
|
|
61
|
+
return {
|
|
62
|
+
ok: true,
|
|
63
|
+
tree: {
|
|
64
|
+
...valid,
|
|
65
|
+
nodes: valid.nodes.map(convertNode),
|
|
66
|
+
...(valid.queries === undefined ? {} : { queries: valid.queries.map(convertQuery) }),
|
|
67
|
+
...(components === undefined ? {} : { components }),
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=renderer-v2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer-v2.js","sourceRoot":"","sources":["../../src/tree/renderer-v2.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,GAKf,MAAM,eAAe,CAAC;AAEvB;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,oFAAoF;AACpF,MAAM,YAAY,GAAG,CAAC,KAA8B,EAA+C,EAAE,CACnG,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC;AAEnC,MAAM,gBAAgB,GAAG,CAAC,KAAc,EAAW,EAAE;IACnD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC7D,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC;IAC9D,MAAM,MAAM,GAAG,KAAgC,CAAC;IAChD,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;QACzB,OAAO;YACL,OAAO,EAAE,MAAM,CAAC,MAAM;YACtB,GAAG,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;SACvF,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1G,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,IAAc,EAAY,EAAE,CAAC,IAAI,CAAC,KAAK,KAAK,SAAS;IACxE,CAAC,CAAC,IAAI;IACN,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,gBAAgB,CAAC,IAAI,CAAC,KAAK,CAAyB,EAAE,CAAC;AAE7E,6EAA6E;AAC7E,MAAM,YAAY,GAAG,CAAC,KAAkB,EAAgE,EAAE,CAAC,CAAC;IAC1G,IAAI,EAAE,IAAI,KAAK,CAAC,IAAI,EAAE;IACtB,IAAI,EAAE,KAAK,CAAC,IAAI;IAChB,GAAG,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC;CAC7D,CAAC,CAAC;AAQH,MAAM,UAAU,gBAAgB,CAAC,OAAkC;IACjE,qEAAqE;IACrE,yEAAyE;IACzE,uDAAuD;IACvD,MAAM,EAAE,UAAU,EAAE,GAAG,IAAI,EAAE,GAAG,OAAmC,CAAC;IACpE,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,UAAU,CAAC,EAAE;QAAE,OAAO,UAAU,CAAC;IACtC,4EAA4E;IAC5E,2EAA2E;IAC3E,qEAAqE;IACrE,gCAAgC;IAChC,MAAM,KAAK,GAAW,UAAU,CAAC,IAAI,CAAC;IACtC,OAAO;QACL,EAAE,EAAE,IAAI;QACR,IAAI,EAAE;YACJ,GAAG,KAAK;YACR,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC;YACnC,GAAG,CAAC,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;YACpF,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC;SAC7B;KACzB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { type Json, type ToolOutcome, type TreeNode, type UIPayload } from "@vendoai/core";
|
|
2
|
+
import { type ComponentType } from "react";
|
|
3
|
+
export interface TreeViewProps {
|
|
4
|
+
tree: WalkTree;
|
|
5
|
+
components: Record<string, ComponentType>;
|
|
6
|
+
data?: Record<string, Json>;
|
|
7
|
+
onAction(req: {
|
|
8
|
+
nodeId: string;
|
|
9
|
+
action: string;
|
|
10
|
+
payload?: Json;
|
|
11
|
+
}): Promise<ToolOutcome>;
|
|
12
|
+
/**
|
|
13
|
+
* 08-ui §5; 06-apps §6 — additive persistence hook for TreeView-local `$state`.
|
|
14
|
+
* It fires with the complete state map after every jail `state-set` message.
|
|
15
|
+
*/
|
|
16
|
+
onStateChange?(state: Record<string, Json>): void;
|
|
17
|
+
}
|
|
18
|
+
export interface PayloadRendererProps {
|
|
19
|
+
payload: UIPayload;
|
|
20
|
+
components: Record<string, ComponentType>;
|
|
21
|
+
data?: Record<string, Json>;
|
|
22
|
+
onAction(req: {
|
|
23
|
+
nodeId: string;
|
|
24
|
+
action: string;
|
|
25
|
+
payload?: Json;
|
|
26
|
+
}): Promise<ToolOutcome>;
|
|
27
|
+
onStateChange?(state: Record<string, Json>): void;
|
|
28
|
+
}
|
|
29
|
+
type PayloadRenderer = ComponentType<PayloadRendererProps>;
|
|
30
|
+
/** 01-core §8; 08-ui §5 — additive format registration for stored future payloads. */
|
|
31
|
+
export declare function registerTreeRenderer(formatVersion: string, component: PayloadRenderer): void;
|
|
32
|
+
/**
|
|
33
|
+
* v2 spec §6 — the walk's input: the SHARED render mechanics' tree shape
|
|
34
|
+
* (nodes, path-keyed resolved queries, grafted components, payload extras).
|
|
35
|
+
* The v1 format surface around it is gone; renderer-v2 converts the
|
|
36
|
+
* canonical v2 tree into this shape (named queries → "/" + name pointers).
|
|
37
|
+
*/
|
|
38
|
+
export interface WalkTree {
|
|
39
|
+
root: string;
|
|
40
|
+
nodes: TreeNode[];
|
|
41
|
+
data?: Record<string, Json>;
|
|
42
|
+
queries?: Array<{
|
|
43
|
+
path: string;
|
|
44
|
+
tool: string;
|
|
45
|
+
input?: Record<string, Json>;
|
|
46
|
+
}>;
|
|
47
|
+
components?: Record<string, string>;
|
|
48
|
+
}
|
|
49
|
+
/** 01-core §8 — renderer dispatch is exclusively by the payload tag. */
|
|
50
|
+
export declare function PayloadView(props: PayloadRendererProps): import("react").JSX.Element;
|
|
51
|
+
interface ActionBinding {
|
|
52
|
+
$action: string;
|
|
53
|
+
payload?: Json;
|
|
54
|
+
}
|
|
55
|
+
/** 08-ui §5 — renderer-owned additive binding; action names stay opaque. */
|
|
56
|
+
export declare function isActionBinding(value: unknown): value is ActionBinding;
|
|
57
|
+
/**
|
|
58
|
+
* 06-apps §9 — the additive in-client venue verdict a tree payload may carry.
|
|
59
|
+
* SERVER-AUTHORITATIVE: the apps runtime strips any document-carried value and
|
|
60
|
+
* attaches this only from its own hash-pin verification, so `granted: true`
|
|
61
|
+
* here is exactly "a stored approval matches the CURRENT version's content
|
|
62
|
+
* hash". A missing field is the universal default: jailed. One declaration —
|
|
63
|
+
* the wire type — re-exported here so tree consumers see the same shape the
|
|
64
|
+
* client and the parity test cover.
|
|
65
|
+
*/
|
|
66
|
+
export type { InClientVenue } from "../wire-types.js";
|
|
67
|
+
/**
|
|
68
|
+
* 06-apps §8 — the additive pin-drift report a tree payload may carry
|
|
69
|
+
* (`payload.pinDrift`). SERVER-AUTHORITATIVE: the apps runtime strips any
|
|
70
|
+
* document-carried value and attaches this only from its own baseline
|
|
71
|
+
* comparison. Re-exported from the wire type so tree consumers see the same
|
|
72
|
+
* shape the client and the parity test cover.
|
|
73
|
+
*/
|
|
74
|
+
export type { PinDrift } from "../wire-types.js";
|
|
75
|
+
/** A new tree identity owns a fresh `$state` and outcome namespace. */
|
|
76
|
+
export declare function TreeView(props: TreeViewProps): import("react").JSX.Element;
|
|
77
|
+
//# sourceMappingURL=renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/tree/renderer.tsx"],"names":[],"mappings":"AAAA,OAAO,EASL,KAAK,IAAI,EAET,KAAK,WAAW,EAChB,KAAK,QAAQ,EACb,KAAK,SAAS,EACf,MAAM,eAAe,CAAC;AAEvB,OAAO,EAKL,KAAK,aAAa,EAEnB,MAAM,OAAO,CAAC;AAcf,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACxF;;;OAGG;IACH,aAAa,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC;CACnD;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,SAAS,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5B,QAAQ,CAAC,GAAG,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,IAAI,CAAA;KAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IACxF,aAAa,CAAC,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC;CACnD;AAED,KAAK,eAAe,GAAG,aAAa,CAAC,oBAAoB,CAAC,CAAC;AAG3D,sFAAsF;AACtF,wBAAgB,oBAAoB,CAAC,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,GAAG,IAAI,CAE5F;AAED;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5B,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;KAAE,CAAC,CAAC;IAC9E,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAsFD,wEAAwE;AACxE,wBAAgB,WAAW,CAAC,KAAK,EAAE,oBAAoB,+BAUtD;AAED,UAAU,aAAa;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,IAAI,CAAC;CAChB;AAED,4EAA4E;AAC5E,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAItE;AAsGD;;;;;;;;GAQG;AACH,YAAY,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD;;;;;;GAMG;AACH,YAAY,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AA8UjD,uEAAuE;AACvE,wBAAgB,QAAQ,CAAC,KAAK,EAAE,aAAa,+BAE5C"}
|
|
@@ -0,0 +1,376 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { RESERVED_COMPONENT_NAMES, TREE_MAX_COMPONENT_SOURCE_CHARS, TREE_MAX_GENERATED_COMPONENTS, TREE_MAX_TOTAL_COMPONENT_CHARS, applyReshape, isPathBinding, isStateBinding, VENDO_TREE_FORMAT_V2, } from "@vendoai/core";
|
|
3
|
+
import { convertV2Payload } from "./renderer-v2.js";
|
|
4
|
+
import { useCallback, useMemo, useRef, useState, } from "react";
|
|
5
|
+
import { useVendoThemeOrDefault } from "../context.js";
|
|
6
|
+
import { themeCssVariables } from "../theme.js";
|
|
7
|
+
import { resolvePointer } from "./bindings.js";
|
|
8
|
+
import { NodeErrorBoundary } from "./error-boundary.js";
|
|
9
|
+
import { FluidReveal } from "./fluid-reveal.js";
|
|
10
|
+
import { deriveFormShape, FormingSkeleton } from "./forming-skeleton.js";
|
|
11
|
+
import { InClientMount } from "./host-mount.js";
|
|
12
|
+
import { JailedComponent } from "./jail/JailedComponent.js";
|
|
13
|
+
import { ContainedNotice } from "./notice.js";
|
|
14
|
+
import { KIT_COMPONENTS } from "../kit/registry.js";
|
|
15
|
+
import { PREWIRED_COMPONENTS } from "./primitives.js";
|
|
16
|
+
const rendererRegistry = new Map();
|
|
17
|
+
/** 01-core §8; 08-ui §5 — additive format registration for stored future payloads. */
|
|
18
|
+
export function registerTreeRenderer(formatVersion, component) {
|
|
19
|
+
rendererRegistry.set(formatVersion, component);
|
|
20
|
+
}
|
|
21
|
+
const walkFail = (message) => ({ ok: false, error: { code: "provision", message } });
|
|
22
|
+
const isPlainRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
23
|
+
/** The structural render-gate the v1 validator used to provide (per-render
|
|
24
|
+
* hot path): ids unique and rooted, node shapes sane, generated components
|
|
25
|
+
* present. Format-tag checks live one layer up (PayloadView dispatch +
|
|
26
|
+
* validateTreeV2 in renderer-v2). */
|
|
27
|
+
const validateWalkTree = (input) => {
|
|
28
|
+
const ids = new Set();
|
|
29
|
+
if (!Array.isArray(input.nodes))
|
|
30
|
+
return walkFail("nodes must be an array");
|
|
31
|
+
for (const node of input.nodes) {
|
|
32
|
+
if (!isPlainRecord(node))
|
|
33
|
+
return walkFail("each node must be an object");
|
|
34
|
+
if (typeof node.id !== "string" || node.id.length === 0)
|
|
35
|
+
return walkFail("each node must have a non-empty string id");
|
|
36
|
+
if (typeof node.component !== "string")
|
|
37
|
+
return walkFail(`node "${node.id}" must have a string component`);
|
|
38
|
+
if (node.source !== undefined && !["prewired", "host", "generated"].includes(node.source)) {
|
|
39
|
+
return walkFail(`node "${node.id}" has an invalid source`);
|
|
40
|
+
}
|
|
41
|
+
if (node.children !== undefined
|
|
42
|
+
&& (!Array.isArray(node.children) || !node.children.every((child) => typeof child === "string"))) {
|
|
43
|
+
return walkFail(`node "${node.id}" children must be an array of strings`);
|
|
44
|
+
}
|
|
45
|
+
if (node.props !== undefined && !isPlainRecord(node.props))
|
|
46
|
+
return walkFail(`node "${node.id}" props must be a plain object`);
|
|
47
|
+
if (ids.has(node.id))
|
|
48
|
+
return walkFail(`duplicate node id "${node.id}"`);
|
|
49
|
+
ids.add(node.id);
|
|
50
|
+
}
|
|
51
|
+
const components = input.components ?? {};
|
|
52
|
+
// The jail-compile bounds the v1 walk enforced per render survive here:
|
|
53
|
+
// reserved names can never be shadowed and the §8 component caps hold even
|
|
54
|
+
// for payloads that bypassed document validation (direct TreeView input).
|
|
55
|
+
const names = Object.keys(components);
|
|
56
|
+
if (names.length > TREE_MAX_GENERATED_COMPONENTS) {
|
|
57
|
+
return walkFail(`too many generated components (max ${TREE_MAX_GENERATED_COMPONENTS})`);
|
|
58
|
+
}
|
|
59
|
+
let totalChars = 0;
|
|
60
|
+
for (const name of names) {
|
|
61
|
+
if (RESERVED_COMPONENT_NAMES.includes(name)) {
|
|
62
|
+
return walkFail(`generated component "${name}" shadows a reserved primitive name`);
|
|
63
|
+
}
|
|
64
|
+
const source = components[name];
|
|
65
|
+
if (typeof source !== "string")
|
|
66
|
+
return walkFail(`generated component "${name}" source must be a string`);
|
|
67
|
+
if (source.length > TREE_MAX_COMPONENT_SOURCE_CHARS) {
|
|
68
|
+
return walkFail(`generated component "${name}" source is too large`);
|
|
69
|
+
}
|
|
70
|
+
totalChars += source.length;
|
|
71
|
+
}
|
|
72
|
+
if (totalChars > TREE_MAX_TOTAL_COMPONENT_CHARS) {
|
|
73
|
+
return walkFail("generated component sources exceed the total size cap");
|
|
74
|
+
}
|
|
75
|
+
for (const node of input.nodes) {
|
|
76
|
+
if (node.source === "generated" && !Object.prototype.hasOwnProperty.call(components, node.component)) {
|
|
77
|
+
return walkFail(`node "${node.id}" references generated component "${node.component}" with no definition in components`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (typeof input.root !== "string" || !ids.has(input.root)) {
|
|
81
|
+
return walkFail(`root "${String(input.root)}" does not match any node id`);
|
|
82
|
+
}
|
|
83
|
+
return { ok: true, tree: input };
|
|
84
|
+
};
|
|
85
|
+
/** v2 spec §1 — a validated v2 payload converts to the v1 tree shape and
|
|
86
|
+
* walks the SAME TreeView (renderer-v2.tsx documents the mapping). The
|
|
87
|
+
* registration lives here, in PayloadView's own module: the package is
|
|
88
|
+
* `sideEffects: false`, so a registration-only import would be tree-shaken
|
|
89
|
+
* out of host bundles. */
|
|
90
|
+
function VendoTreeV2Renderer({ payload, ...props }) {
|
|
91
|
+
const converted = useMemo(() => convertV2Payload(payload), [payload]);
|
|
92
|
+
if (!converted.ok) {
|
|
93
|
+
return (_jsx(ContainedNotice, { label: "Invalid UI tree", code: converted.error.code, children: `${converted.error.code}: ${converted.error.message}` }));
|
|
94
|
+
}
|
|
95
|
+
return _jsx(TreeView, { tree: converted.tree, ...props });
|
|
96
|
+
}
|
|
97
|
+
registerTreeRenderer(VENDO_TREE_FORMAT_V2, VendoTreeV2Renderer);
|
|
98
|
+
/** 01-core §8 — renderer dispatch is exclusively by the payload tag. */
|
|
99
|
+
export function PayloadView(props) {
|
|
100
|
+
const Renderer = rendererRegistry.get(props.payload.formatVersion);
|
|
101
|
+
if (!Renderer) {
|
|
102
|
+
return (_jsx(ContainedNotice, { label: "Unsupported UI format", children: `No renderer is registered for "${props.payload.formatVersion}".` }));
|
|
103
|
+
}
|
|
104
|
+
return _jsx(Renderer, { ...props });
|
|
105
|
+
}
|
|
106
|
+
/** 08-ui §5 — renderer-owned additive binding; action names stay opaque. */
|
|
107
|
+
export function isActionBinding(value) {
|
|
108
|
+
return typeof value === "object"
|
|
109
|
+
&& value !== null
|
|
110
|
+
&& typeof value.$action === "string";
|
|
111
|
+
}
|
|
112
|
+
/** v2 spec §3 — apply a binding's `$reshape` chain to the resolved value.
|
|
113
|
+
* `applyReshape` is total: absent data passes through (loading is not a
|
|
114
|
+
* mismatch); a real mismatch reports through `onMismatch` and binds
|
|
115
|
+
* `undefined`, and the node renders the contained data-shape notice. */
|
|
116
|
+
function resolveReshaped(resolved, steps, onMismatch) {
|
|
117
|
+
if (steps === undefined)
|
|
118
|
+
return resolved;
|
|
119
|
+
const reshaped = applyReshape(resolved, steps);
|
|
120
|
+
if (!reshaped.ok) {
|
|
121
|
+
onMismatch?.(reshaped.reason);
|
|
122
|
+
return undefined;
|
|
123
|
+
}
|
|
124
|
+
return reshaped.value;
|
|
125
|
+
}
|
|
126
|
+
function bindValue(value, mode, data, state, action, onMismatch) {
|
|
127
|
+
if (isPathBinding(value))
|
|
128
|
+
return resolveReshaped(resolvePointer(data, value.$path), value.$reshape, onMismatch);
|
|
129
|
+
if (isStateBinding(value))
|
|
130
|
+
return resolveReshaped(state[value.$state], value.$reshape, onMismatch);
|
|
131
|
+
if (isActionBinding(value)) {
|
|
132
|
+
const payload = bindValue(value.payload, mode, data, state, action, onMismatch);
|
|
133
|
+
if (mode === "jail") {
|
|
134
|
+
return { $action: value.$action, ...(value.payload === undefined ? {} : { payload }) };
|
|
135
|
+
}
|
|
136
|
+
return () => action(value.$action, value.payload === undefined ? undefined : payload);
|
|
137
|
+
}
|
|
138
|
+
if (Array.isArray(value))
|
|
139
|
+
return value.map((item) => bindValue(item, mode, data, state, action, onMismatch));
|
|
140
|
+
if (typeof value === "object" && value !== null) {
|
|
141
|
+
return Object.fromEntries(Object.entries(value).map(([key, child]) => [
|
|
142
|
+
key,
|
|
143
|
+
bindValue(child, mode, data, state, action, onMismatch),
|
|
144
|
+
]));
|
|
145
|
+
}
|
|
146
|
+
return value;
|
|
147
|
+
}
|
|
148
|
+
/** Binds a node's props, reporting the first reshape mismatch with its prop
|
|
149
|
+
* name (v2 spec §3 — the region shows one contained notice, not a broken
|
|
150
|
+
* component). */
|
|
151
|
+
function bindProps(props, mode, data, state, action) {
|
|
152
|
+
if (props === undefined)
|
|
153
|
+
return { bound: undefined, mismatch: null };
|
|
154
|
+
let mismatch = null;
|
|
155
|
+
let currentProp = "";
|
|
156
|
+
const onMismatch = (reason) => {
|
|
157
|
+
if (mismatch === null)
|
|
158
|
+
mismatch = `prop "${currentProp}": ${reason}`;
|
|
159
|
+
};
|
|
160
|
+
const bound = Object.fromEntries(Object.entries(props).map(([key, child]) => {
|
|
161
|
+
currentProp = key;
|
|
162
|
+
return [key, bindValue(child, mode, data, state, action, onMismatch)];
|
|
163
|
+
}));
|
|
164
|
+
return { bound, mismatch };
|
|
165
|
+
}
|
|
166
|
+
/** v2 spec §3 — the contained data-shape notice: the region says the data
|
|
167
|
+
* didn't match instead of mounting the component with garbage props. */
|
|
168
|
+
const dataShapeNotice = (mismatch) => (_jsx(ContainedNotice, { label: "Data shape", children: `The data didn't match this component's binding — ${mismatch}.` }));
|
|
169
|
+
function outcomeNotice(outcome) {
|
|
170
|
+
if (!outcome || outcome.status === "ok")
|
|
171
|
+
return null;
|
|
172
|
+
if (outcome.status === "pending-approval") {
|
|
173
|
+
return (_jsx(ContainedNotice, { label: "Action pending approval", outcome: outcome.status, children: `Action is waiting for approval (${outcome.approvalId}).` }));
|
|
174
|
+
}
|
|
175
|
+
if (outcome.status === "blocked") {
|
|
176
|
+
return _jsx(ContainedNotice, { label: "Action blocked", outcome: outcome.status, children: outcome.reason });
|
|
177
|
+
}
|
|
178
|
+
if (outcome.status === "error") {
|
|
179
|
+
return (_jsx(ContainedNotice, { label: "Action error", outcome: outcome.status, code: outcome.error.code, children: outcome.error.message }));
|
|
180
|
+
}
|
|
181
|
+
return null;
|
|
182
|
+
}
|
|
183
|
+
const EMPTY_LAYOUT_COMPONENTS = new Set(["Stack", "Row", "Grid"]);
|
|
184
|
+
const hasRenderableTreeContent = (tree) => {
|
|
185
|
+
const nodes = new Map(tree.nodes.map((node) => [node.id, node]));
|
|
186
|
+
const pending = [tree.root];
|
|
187
|
+
const visited = new Set();
|
|
188
|
+
while (pending.length > 0) {
|
|
189
|
+
const id = pending.pop();
|
|
190
|
+
if (id === undefined || visited.has(id))
|
|
191
|
+
continue;
|
|
192
|
+
visited.add(id);
|
|
193
|
+
const node = nodes.get(id);
|
|
194
|
+
// A missing child renders the streaming skeleton, which is intentionally visible.
|
|
195
|
+
if (node === undefined)
|
|
196
|
+
return true;
|
|
197
|
+
if (node.source === "host" || node.source === "generated")
|
|
198
|
+
return true;
|
|
199
|
+
if (node.component === "Text") {
|
|
200
|
+
const text = node.props?.text;
|
|
201
|
+
if (text !== undefined && text !== null && String(text).trim() !== "")
|
|
202
|
+
return true;
|
|
203
|
+
}
|
|
204
|
+
else if (!EMPTY_LAYOUT_COMPONENTS.has(node.component)) {
|
|
205
|
+
return true;
|
|
206
|
+
}
|
|
207
|
+
pending.push(...(node.children ?? []));
|
|
208
|
+
}
|
|
209
|
+
return false;
|
|
210
|
+
};
|
|
211
|
+
function NodeRenderer(props) {
|
|
212
|
+
const node = props.nodes.get(props.nodeId);
|
|
213
|
+
if (!node) {
|
|
214
|
+
return (_jsx("span", { "data-dangling-node": props.nodeId, style: { display: "block", width: "100%" }, children: _jsx(FormingSkeleton, { name: props.nodeId }) }));
|
|
215
|
+
}
|
|
216
|
+
if (props.ancestry.has(node.id)) {
|
|
217
|
+
return _jsx(ContainedNotice, { label: "Cyclic tree node", children: `Node "${node.id}" forms a cycle.` });
|
|
218
|
+
}
|
|
219
|
+
const ancestry = new Set(props.ancestry);
|
|
220
|
+
ancestry.add(node.id);
|
|
221
|
+
const invoke = (action, payload) => props.runAction(node.id, action, payload);
|
|
222
|
+
const children = node.children?.map((childId) => (_jsx(NodeErrorBoundary, { nodeId: childId, retryKey: props.data, children: _jsx(NodeRenderer, { ...props, nodeId: childId, ancestry: ancestry }) }, childId)));
|
|
223
|
+
let content;
|
|
224
|
+
if (node.source === "generated") {
|
|
225
|
+
const source = props.generated[node.component];
|
|
226
|
+
const revealKey = source === undefined ? "forming" : "ready";
|
|
227
|
+
// Stamped era: a missing entry means "this island calls no tools" (least
|
|
228
|
+
// privilege). No stamping at all: undefined, so JailedComponent derives
|
|
229
|
+
// the manifest from the source the host holds.
|
|
230
|
+
const toolManifest = props.componentTools === undefined
|
|
231
|
+
? undefined
|
|
232
|
+
: props.componentTools[node.component] ?? [];
|
|
233
|
+
if (source === undefined) {
|
|
234
|
+
content = props.streaming ? (_jsx("span", { "data-streaming-component": node.component, style: { display: "block", width: "100%" }, children: _jsx(FormingSkeleton, { name: node.component }) })) : (_jsx(ContainedNotice, { label: "Unknown generated component", children: `Generated component "${node.component}" has no source.` }));
|
|
235
|
+
}
|
|
236
|
+
else if (props.inClientGranted) {
|
|
237
|
+
// 06-apps §9 — the approved venue: this exact version's content hash
|
|
238
|
+
// matched a stored approval, so generated code mounts in the host page.
|
|
239
|
+
// The jail element stays wired as the drop-back for any mount failure.
|
|
240
|
+
const hostBind = bindProps(node.props, "host", props.data, props.state, invoke);
|
|
241
|
+
const jailBind = bindProps(node.props, "jail", props.data, props.state, invoke);
|
|
242
|
+
// Reshape mismatches are mode-independent, so both binds report the same one.
|
|
243
|
+
const mismatch = hostBind.mismatch;
|
|
244
|
+
if (mismatch !== null) {
|
|
245
|
+
content = _jsxs(_Fragment, { children: [dataShapeNotice(mismatch), children] });
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
const jailFallback = (_jsx(JailedComponent, { name: node.component, source: source, props: jailBind.bound, furnishing: props.furnishings[node.component], themeVars: props.themeVars, toolManifest: toolManifest, onAction: invoke, onStateSet: props.setViewState }));
|
|
249
|
+
content = (_jsxs(_Fragment, { children: [_jsx(InClientMount, { name: node.component, source: source, props: hostBind.bound, furnishing: props.furnishings[node.component], fallback: jailFallback, onAction: invoke, onStateSet: props.setViewState }), children] }));
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
else {
|
|
253
|
+
const { bound, mismatch } = bindProps(node.props, "jail", props.data, props.state, invoke);
|
|
254
|
+
content = mismatch !== null ? _jsxs(_Fragment, { children: [dataShapeNotice(mismatch), children] }) : (_jsxs(_Fragment, { children: [_jsx(JailedComponent, { name: node.component, source: source, props: bound, furnishing: props.furnishings[node.component], themeVars: props.themeVars, toolManifest: toolManifest, onAction: invoke, onStateSet: props.setViewState }), children] }));
|
|
255
|
+
}
|
|
256
|
+
// ENG-205 render-slot morph: the streaming placeholder and the arrived
|
|
257
|
+
// component share this wrapper, so the swap morphs instead of popping.
|
|
258
|
+
// Pick A: a shape-derived silhouette already holds (approximately) the
|
|
259
|
+
// final geometry, so its reveal crossfades in place (.fl-reveal-fill)
|
|
260
|
+
// instead of running the rise/settle morph; slab fallbacks keep the morph.
|
|
261
|
+
content = (_jsx(FluidReveal, { stateKey: revealKey, className: deriveFormShape(node.component) === "slab" ? undefined : "fl-reveal-fill", children: content }));
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
// W3 Kit adoption — legacy prewired names keep their implementations
|
|
265
|
+
// (retirement is Wave 5); the Kit fills the names the legacy set lacks
|
|
266
|
+
// (Money, DateTime, DataTable, charts, Form, Disclaimer, …).
|
|
267
|
+
const primitive = PREWIRED_COMPONENTS[node.component]
|
|
268
|
+
?? KIT_COMPONENTS[node.component];
|
|
269
|
+
const host = props.components[node.component];
|
|
270
|
+
// v2 spec §2 — an explicit `source: "host"` resolution means the host
|
|
271
|
+
// brand won the name; only an undefined source keeps the historical
|
|
272
|
+
// primitive-first order.
|
|
273
|
+
const Implementation = node.source === "host" ? host ?? primitive : primitive ?? host;
|
|
274
|
+
if (!Implementation) {
|
|
275
|
+
content = (_jsx(ContainedNotice, { label: "Unknown component", children: `Unknown component "${node.component}".` }));
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
const { bound, mismatch } = bindProps(node.props ?? {}, "host", props.data, props.state, invoke);
|
|
279
|
+
// The notice replaces only the mis-bound component, never its subtree —
|
|
280
|
+
// a container (Stack/Grid) with one bad prop must not swallow its valid
|
|
281
|
+
// children (same containment scope as the generated paths above).
|
|
282
|
+
content = mismatch !== null
|
|
283
|
+
? _jsxs(_Fragment, { children: [dataShapeNotice(mismatch), children] })
|
|
284
|
+
: _jsx(Implementation, { ...bound, children: children });
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
const outcome = props.outcomes[node.id];
|
|
288
|
+
return (_jsxs("div", { "data-vendo-node-id": node.id, "data-vendo-outcome": outcome?.status === "ok" ? undefined : outcome?.status, children: [content, outcomeNotice(outcome)] }));
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* 08-ui §5 — render a validated walk tree (the shared render mechanics, v2 spec §6).
|
|
292
|
+
*
|
|
293
|
+
* `$state` is local to this TreeView. Generated code can write through its
|
|
294
|
+
* in-jail `vendo.setState(key, value)` bridge; `onStateChange`, when supplied,
|
|
295
|
+
* receives the complete state map after every change for app-state persistence.
|
|
296
|
+
*/
|
|
297
|
+
function StatefulTreeView({ tree, components, data, onAction, onStateChange, }) {
|
|
298
|
+
const theme = useVendoThemeOrDefault();
|
|
299
|
+
const themeVars = useMemo(() => themeCssVariables(theme), [theme]);
|
|
300
|
+
const streaming = tree.streaming === true;
|
|
301
|
+
const furnishings = tree.furnishings ?? {};
|
|
302
|
+
// W4b — the stamped per-island tool manifests ride the payload beside the
|
|
303
|
+
// component sources (a payload extra, like furnishings).
|
|
304
|
+
const componentTools = tree.componentTools;
|
|
305
|
+
const inClient = tree.inClient;
|
|
306
|
+
// Tolerate a malformed field (like every other payload extra): only an
|
|
307
|
+
// array of well-formed entries renders the notice.
|
|
308
|
+
const pinDriftRaw = tree.pinDrift;
|
|
309
|
+
const pinDrift = (Array.isArray(pinDriftRaw) ? pinDriftRaw : [])
|
|
310
|
+
.filter((entry) => typeof entry === "object" && entry !== null && typeof entry.slot === "string");
|
|
311
|
+
// The host-page mount unlocks on EXACTLY `granted === true` — the value only
|
|
312
|
+
// the server's hash-pin verification writes. Everything else stays jailed.
|
|
313
|
+
const inClientGranted = inClient?.granted === true;
|
|
314
|
+
// A partial stream may close a generated node before its top-level source
|
|
315
|
+
// string closes. Supply validator-only placeholders, then keep the real map
|
|
316
|
+
// empty so NodeRenderer paints a skeleton until the source arrives.
|
|
317
|
+
const validation = validateWalkTree(streaming ? {
|
|
318
|
+
...tree,
|
|
319
|
+
components: Object.fromEntries([
|
|
320
|
+
...Object.entries(tree.components ?? {}),
|
|
321
|
+
...tree.nodes
|
|
322
|
+
.filter((node) => node.source === "generated")
|
|
323
|
+
.map((node) => [node.component, tree.components?.[node.component] ?? ""]),
|
|
324
|
+
]),
|
|
325
|
+
} : tree);
|
|
326
|
+
const [viewState, setViewState] = useState({});
|
|
327
|
+
const stateRef = useRef(viewState);
|
|
328
|
+
const [outcomes, setOutcomes] = useState({});
|
|
329
|
+
const updateState = useCallback((key, value) => {
|
|
330
|
+
const next = { ...stateRef.current, [key]: value };
|
|
331
|
+
stateRef.current = next;
|
|
332
|
+
setViewState(next);
|
|
333
|
+
onStateChange?.(next);
|
|
334
|
+
}, [onStateChange]);
|
|
335
|
+
const runAction = useCallback(async (nodeId, action, payload) => {
|
|
336
|
+
let outcome;
|
|
337
|
+
try {
|
|
338
|
+
outcome = await onAction({ nodeId, action, ...(payload === undefined ? {} : { payload }) });
|
|
339
|
+
}
|
|
340
|
+
catch (error) {
|
|
341
|
+
outcome = {
|
|
342
|
+
status: "error",
|
|
343
|
+
error: {
|
|
344
|
+
code: "action",
|
|
345
|
+
message: error instanceof Error ? error.message : String(error),
|
|
346
|
+
},
|
|
347
|
+
};
|
|
348
|
+
}
|
|
349
|
+
setOutcomes((current) => ({ ...current, [nodeId]: outcome.status === "ok" ? undefined : outcome }));
|
|
350
|
+
return outcome;
|
|
351
|
+
}, [onAction]);
|
|
352
|
+
const nodes = useMemo(() => new Map(validation.ok ? validation.tree.nodes.map((node) => [node.id, node]) : []), [validation.ok ? validation.tree.nodes : validation.error.message]);
|
|
353
|
+
if (!validation.ok) {
|
|
354
|
+
return (_jsx(ContainedNotice, { label: "Invalid UI tree", code: validation.error.code, children: `${validation.error.code}: ${validation.error.message}` }));
|
|
355
|
+
}
|
|
356
|
+
if (!hasRenderableTreeContent(validation.tree)) {
|
|
357
|
+
return (_jsx(ContainedNotice, { label: "Empty UI tree", children: "The app view has no renderable content." }));
|
|
358
|
+
}
|
|
359
|
+
// 06-apps §9 — a version change under an existing approval must be LOUD: the
|
|
360
|
+
// surface drops back to the sandbox and says so, in-surface, above the tree.
|
|
361
|
+
const dropBackNotice = inClient !== undefined && inClient.granted === false
|
|
362
|
+
? (_jsx(ContainedNotice, { label: "In-client approval invalidated", outcome: "blocked", children: "This app changed since it was approved for the host page. It is running in the sandbox again until the new version is re-approved." }))
|
|
363
|
+
: null;
|
|
364
|
+
// 06-apps §8 — a host update under a remixed pin must be LOUD too: the fork
|
|
365
|
+
// keeps rendering (nothing is mutated without the user), but the surface
|
|
366
|
+
// says the host component moved on and a rebase is available.
|
|
367
|
+
const driftNotice = pinDrift.length > 0
|
|
368
|
+
? (_jsx(ContainedNotice, { label: "Remixed component out of date", children: `The host updated ${pinDrift.map((pin) => `"${pin.slot}"`).join(", ")} since ${pinDrift.length === 1 ? "it was" : "they were"} remixed here. Ask the agent to rebase the remix onto the updated component.` }))
|
|
369
|
+
: null;
|
|
370
|
+
return (_jsxs(NodeErrorBoundary, { nodeId: validation.tree.root, retryKey: data ?? validation.tree.data, children: [dropBackNotice, driftNotice, _jsx(NodeRenderer, { nodeId: validation.tree.root, ancestry: new Set(), nodes: nodes, generated: streaming ? tree.components ?? {} : validation.tree.components ?? {}, ...(componentTools === undefined ? {} : { componentTools }), inClientGranted: inClientGranted, furnishings: furnishings, themeVars: themeVars, components: components, data: data ?? validation.tree.data ?? {}, state: viewState, streaming: streaming, outcomes: outcomes, runAction: runAction, setViewState: updateState })] }));
|
|
371
|
+
}
|
|
372
|
+
/** A new tree identity owns a fresh `$state` and outcome namespace. */
|
|
373
|
+
export function TreeView(props) {
|
|
374
|
+
return _jsx(StatefulTreeView, { ...props }, props.tree.root);
|
|
375
|
+
}
|
|
376
|
+
//# sourceMappingURL=renderer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer.js","sourceRoot":"","sources":["../../src/tree/renderer.tsx"],"names":[],"mappings":"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"}
|