@agent-native/core 0.131.5 → 0.131.6
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/corpus/README.md +3 -3
- package/corpus/core/CHANGELOG.md +63 -0
- package/corpus/core/docs/content/agent-native-toolkit.mdx +13 -6
- package/corpus/core/docs/content/cloneable-saas.mdx +5 -5
- package/corpus/core/docs/content/creating-templates.mdx +9 -0
- package/corpus/core/docs/content/deployment.mdx +14 -10
- package/corpus/core/docs/content/doctor.mdx +8 -1
- package/corpus/core/docs/content/drop-in-agent.mdx +1 -1
- package/corpus/core/docs/content/extensions.mdx +18 -18
- package/corpus/core/docs/content/faq.mdx +4 -4
- package/corpus/core/docs/content/key-concepts.mdx +30 -21
- package/corpus/core/docs/content/template-brain-developers.mdx +4 -1
- package/corpus/core/docs/content/template-mail-developers.mdx +4 -1
- package/corpus/core/docs/content/what-is-agent-native.mdx +6 -6
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/a2a/client.ts +449 -66
- package/corpus/core/src/a2a/correlation.ts +31 -0
- package/corpus/core/src/a2a/types.ts +4 -0
- package/corpus/core/src/action.ts +3 -0
- package/corpus/core/src/agent/engine/registry.ts +45 -5
- package/corpus/core/src/agent/production-agent.ts +151 -18
- package/corpus/core/src/agent/run-loop-with-resume.ts +190 -3
- package/corpus/core/src/agent/run-manager.ts +117 -41
- package/corpus/core/src/agent/thread-debug-history.ts +86 -0
- package/corpus/core/src/agent/types.ts +3 -1
- package/corpus/core/src/cli/create.ts +11 -1
- package/corpus/core/src/cli/templates-meta.ts +2 -2
- package/corpus/core/src/client/agent-chat-adapter.ts +91 -13
- package/corpus/core/src/client/resources/McpIntegrationDialog.tsx +11 -9
- package/corpus/core/src/client/sse-event-processor.ts +17 -3
- package/corpus/core/src/db/client.ts +57 -17
- package/corpus/core/src/integrations/adapters/slack.ts +8 -3
- package/corpus/core/src/localization/default-messages.ts +44 -0
- package/corpus/core/src/observability/traces.ts +78 -5
- package/corpus/core/src/scripts/call-agent.ts +290 -9
- package/corpus/core/src/scripts/describe-workspace-apps.ts +2 -2
- package/corpus/core/src/secrets/crypto.ts +126 -34
- package/corpus/core/src/secrets/storage.ts +61 -25
- package/corpus/core/src/server/agent-capabilities.ts +1 -1
- package/corpus/core/src/server/agent-chat/action-filters-a2a.ts +111 -7
- package/corpus/core/src/server/agent-chat/context-tools.ts +2 -0
- package/corpus/core/src/server/agent-chat/plugin-options.ts +34 -1
- package/corpus/core/src/server/agent-chat/prompt-resources.ts +1 -1
- package/corpus/core/src/server/agent-chat-plugin.ts +91 -59
- package/corpus/core/src/templates/default/.agents/skills/secrets/SKILL.md +14 -7
- package/corpus/core/src/templates/headless/.agents/skills/secrets/SKILL.md +14 -7
- package/corpus/core/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +18 -7
- package/corpus/core/src/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +15 -14
- package/corpus/core/src/templates/workspace-core/.agents/skills/secrets/SKILL.md +14 -7
- package/corpus/core/src/vite/client.ts +1 -0
- package/corpus/templates/analytics/.agents/skills/dashboard-ops/SKILL.md +5 -4
- package/corpus/templates/analytics/.agents/skills/gong/SKILL.md +6 -4
- package/corpus/templates/analytics/AGENTS.md +6 -4
- package/corpus/templates/analytics/actions/query-agent-native-analytics.ts +4 -3
- package/corpus/templates/analytics/changelog/2026-07-30-scheduled-dashboard-emails-complete-every-panel-without-pool.md +6 -0
- package/corpus/templates/analytics/scripts/emit-netlify-dashboard-report-cron.ts +28 -1
- package/corpus/templates/analytics/server/jobs/dashboard-report.ts +18 -11
- package/corpus/templates/analytics/server/lib/analytics-connector-catalog.ts +4 -4
- package/corpus/templates/analytics/server/lib/canonical-first-party-dashboard-repair.ts +9 -5
- package/corpus/templates/analytics/server/lib/dashboard-panel-query.ts +6 -2
- package/corpus/templates/analytics/server/lib/dashboard-panel-source-resolver.ts +11 -4
- package/corpus/templates/analytics/server/lib/dashboard-report-render.ts +49 -31
- package/corpus/templates/analytics/server/lib/first-party-analytics.ts +16 -8
- package/corpus/templates/analytics/server/lib/first-party-metric-catalog.ts +9 -3
- package/corpus/templates/analytics/server/lib/production-serverless-runtime.ts +11 -0
- package/corpus/templates/analytics/server/plugins/agent-chat.ts +3 -2
- package/corpus/templates/analytics/server/plugins/analytics-alert-jobs.ts +2 -1
- package/corpus/templates/analytics/server/plugins/dashboard-report-jobs.ts +2 -1
- package/corpus/templates/analytics/server/plugins/uptime-monitor-jobs.ts +1 -12
- package/corpus/templates/brain/.agents/skills/brain/RUNBOOK.md +54 -6
- package/corpus/templates/brain/.agents/skills/brain/SKILL.md +20 -9
- package/corpus/templates/brain/.agents/skills/ingestion-and-connectors/SKILL.md +33 -1
- package/corpus/templates/brain/AGENTS.md +3 -1
- package/corpus/templates/brain/README.md +4 -1
- package/corpus/templates/brain/actions/_schemas.ts +30 -8
- package/corpus/templates/brain/actions/ask-brain.ts +124 -14
- package/corpus/templates/brain/actions/create-source.ts +18 -2
- package/corpus/templates/brain/actions/enqueue-captures-distillation.ts +8 -123
- package/corpus/templates/brain/actions/enqueue-distillation.ts +6 -127
- package/corpus/templates/brain/actions/import-capture.ts +17 -5
- package/corpus/templates/brain/actions/import-transcript.ts +17 -5
- package/corpus/templates/brain/actions/update-source.ts +25 -5
- package/corpus/templates/brain/app/components/layout/Sidebar.tsx +1 -1
- package/corpus/templates/brain/changelog/2026-07-30-blessed-resources-can-feed-cited-company-answers.md +6 -0
- package/corpus/templates/brain/changelog/2026-07-30-the-left-sidebar-no-longer-shows-a-blank-organization-placeh.md +6 -0
- package/corpus/templates/brain/server/lib/brain.ts +49 -19
- package/corpus/templates/brain/server/lib/distillation-queue.ts +147 -0
- package/corpus/templates/brain/server/lib/source-policy.ts +264 -0
- package/corpus/templates/brain/server/plugins/agent-chat.ts +3 -2
- package/corpus/templates/brain/server/routes/api/_agent-native/brain/ingest.post.ts +116 -19
- package/corpus/templates/clips/app/components/meetings/google-oauth-identity-notice.tsx +51 -0
- package/corpus/templates/clips/app/i18n/en-US.ts +4 -0
- package/corpus/templates/clips/app/routes/_app.meetings._index.tsx +3 -1
- package/corpus/templates/clips/changelog/2026-07-30-google-calendar-warning.md +6 -0
- package/corpus/templates/content/app/components/editor/VisualEditor.tsx +72 -8
- package/corpus/templates/content/changelog/2026-07-30-the-slash-command-hint-now-stays-on-only-the-active-empty-li.md +6 -0
- package/corpus/templates/design/.generated/bridge/editor-chrome.generated.ts +506 -11
- package/corpus/templates/design/app/components/design/bridge/editor-chrome.bridge.ts +148 -17
- package/corpus/templates/design/app/components/design/canvas-interactions/design-canvas-interactions.ts +357 -0
- package/corpus/templates/design/app/components/design/inspector/ScrubInput.tsx +7 -466
- package/corpus/templates/design/app/components/design/inspector/scrub-input-utils.ts +15 -311
- package/corpus/templates/design/app/components/visual-editor/CanvasCommentPins.tsx +19 -997
- package/corpus/templates/design/app/components/visual-editor/DrawOverlay.tsx +8 -1216
- package/corpus/templates/design/app/hooks/useDesignHotkeys.ts +31 -38
- package/corpus/templates/design/package.json +0 -1
- package/corpus/templates/dispatch/AGENTS.md +8 -0
- package/corpus/templates/dispatch/DEVELOPING.md +29 -0
- package/corpus/templates/dispatch/actions/view-screen.ts +34 -2
- package/corpus/templates/dispatch/app/i18n-data.ts +457 -0
- package/corpus/templates/dispatch/changelog/2026-07-30-delegated-dispatch-work-continues-reliably-in-the-background.md +6 -0
- package/corpus/templates/dispatch/changelog/2026-07-30-find-failed-runs-across-apps.md +6 -0
- package/corpus/templates/dispatch/netlify.toml +3 -0
- package/corpus/templates/slides/.agents/skills/analytics-data-for-decks/SKILL.md +8 -12
- package/corpus/templates/slides/AGENTS.md +4 -4
- package/corpus/templates/slides/actions/duplicate-deck.ts +19 -4
- package/corpus/templates/slides/app/components/deck/DeckCard.tsx +2 -10
- package/corpus/templates/slides/app/components/deck/MermaidRenderer.tsx +12 -1
- package/corpus/templates/slides/app/components/deck/SlideRenderer.tsx +30 -13
- package/corpus/templates/slides/app/components/editor/DeckEditorSkeleton.tsx +35 -0
- package/corpus/templates/slides/app/components/editor/EditorSidebar.tsx +63 -56
- package/corpus/templates/slides/app/components/editor/EditorToolbar.tsx +21 -76
- package/corpus/templates/slides/app/components/editor/SlideEditor.tsx +1110 -292
- package/corpus/templates/slides/app/components/editor/SlideOverflowWarning.tsx +53 -0
- package/corpus/templates/slides/app/components/editor/SlideStyleInspector.tsx +235 -18
- package/corpus/templates/slides/app/components/editor/SpeakerNotesPanel.tsx +4 -1
- package/corpus/templates/slides/app/components/editor/canvas-interactions/index.ts +11 -0
- package/corpus/templates/slides/app/components/editor/canvas-interactions/slides-canvas-adapter.ts +129 -0
- package/corpus/templates/slides/app/components/editor/selection-overlay-measurement.ts +70 -0
- package/corpus/templates/slides/app/components/editor/slide-object-interactions.ts +519 -65
- package/corpus/templates/slides/app/components/visual-editor/CanvasCommentPins.tsx +36 -426
- package/corpus/templates/slides/app/components/visual-editor/DrawOverlay.tsx +19 -458
- package/corpus/templates/slides/app/context/DeckContext.tsx +179 -72
- package/corpus/templates/slides/app/global.css +105 -0
- package/corpus/templates/slides/app/i18n/en-US.ts +8 -0
- package/corpus/templates/slides/app/lib/deck-editor-loading.ts +26 -0
- package/corpus/templates/slides/app/lib/mermaid-blocks.ts +27 -0
- package/corpus/templates/slides/app/pages/DeckEditor.tsx +71 -38
- package/corpus/templates/slides/app/pages/Index.tsx +98 -41
- package/corpus/templates/slides/changelog/2026-07-30-deck-loading-no-longer-flashes-an-unavailable-message.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-30-duplicating-a-deck-from-the-deck-list-now-opens-the-copy-imm.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-30-layout-overflow-warning-is-readable-and-dismissible.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-30-shared-canvas-annotations.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-30-slide-objects-can-be-moved-as-a-group-copied-and-pasted-with.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-30-slide-text-editing-and-object-controls-now-match-google-slides.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-30-style-panel-now-scrolls-with-speaker-notes-open-shows-the-sl.md +6 -0
- package/corpus/templates/slides/changelog/2026-07-30-top-toolbar-controls-now-use-consistent-sizing-with-undo-and.md +6 -0
- package/corpus/templates/slides/netlify.toml +3 -1
- package/corpus/templates/slides/package.json +0 -1
- package/corpus/templates/slides/server/lib/chat-attachments.ts +18 -0
- package/corpus/templates/slides/server/plugins/agent-chat.ts +5 -0
- package/corpus/templates/slides/vite.config.ts +0 -1
- package/corpus/toolkit/CHANGELOG.md +13 -0
- package/corpus/toolkit/README.md +19 -0
- package/corpus/toolkit/agent-native.eject.json +38 -0
- package/corpus/toolkit/package.json +29 -1
- package/corpus/toolkit/src/canvas-annotations/CanvasCommentPins.tsx +861 -0
- package/corpus/toolkit/src/canvas-annotations/DrawOverlay.tsx +1233 -0
- package/corpus/toolkit/src/canvas-annotations/index.ts +15 -0
- package/corpus/toolkit/src/canvas-annotations/types.ts +14 -0
- package/corpus/toolkit/src/canvas-interactions/canvas-interactions.ts +933 -0
- package/corpus/toolkit/src/canvas-interactions/index.ts +67 -0
- package/corpus/toolkit/src/design-tweaks/scrub-input-utils.ts +311 -0
- package/corpus/toolkit/src/design-tweaks/scrub-input.tsx +491 -0
- package/corpus/toolkit/src/design-tweaks/visual-style-controls.tsx +26 -171
- package/corpus/toolkit/src/index.ts +1 -0
- package/dist/a2a/client.d.ts +23 -0
- package/dist/a2a/client.d.ts.map +1 -1
- package/dist/a2a/client.js +309 -44
- package/dist/a2a/client.js.map +1 -1
- package/dist/a2a/correlation.d.ts +1 -0
- package/dist/a2a/correlation.d.ts.map +1 -1
- package/dist/a2a/correlation.js +27 -0
- package/dist/a2a/correlation.js.map +1 -1
- package/dist/a2a/types.d.ts +4 -0
- package/dist/a2a/types.d.ts.map +1 -1
- package/dist/a2a/types.js.map +1 -1
- package/dist/action.d.ts +3 -0
- package/dist/action.d.ts.map +1 -1
- package/dist/action.js.map +1 -1
- package/dist/agent/engine/registry.d.ts.map +1 -1
- package/dist/agent/engine/registry.js +34 -7
- package/dist/agent/engine/registry.js.map +1 -1
- package/dist/agent/production-agent.d.ts +40 -1
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +113 -15
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/agent/run-loop-with-resume.d.ts +21 -0
- package/dist/agent/run-loop-with-resume.d.ts.map +1 -1
- package/dist/agent/run-loop-with-resume.js +163 -4
- package/dist/agent/run-loop-with-resume.js.map +1 -1
- package/dist/agent/run-manager.d.ts +16 -9
- package/dist/agent/run-manager.d.ts.map +1 -1
- package/dist/agent/run-manager.js +93 -42
- package/dist/agent/run-manager.js.map +1 -1
- package/dist/agent/thread-debug-history.d.ts +10 -0
- package/dist/agent/thread-debug-history.d.ts.map +1 -0
- package/dist/agent/thread-debug-history.js +68 -0
- package/dist/agent/thread-debug-history.js.map +1 -0
- package/dist/agent/types.d.ts +3 -1
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/agent/types.js.map +1 -1
- package/dist/cli/create.d.ts.map +1 -1
- package/dist/cli/create.js +6 -1
- package/dist/cli/create.js.map +1 -1
- package/dist/cli/templates-meta.js +2 -2
- package/dist/cli/templates-meta.js.map +1 -1
- package/dist/client/agent-chat-adapter.d.ts +1 -1
- package/dist/client/agent-chat-adapter.d.ts.map +1 -1
- package/dist/client/agent-chat-adapter.js +76 -13
- package/dist/client/agent-chat-adapter.js.map +1 -1
- package/dist/client/resources/McpIntegrationDialog.d.ts.map +1 -1
- package/dist/client/resources/McpIntegrationDialog.js +1 -1
- package/dist/client/resources/McpIntegrationDialog.js.map +1 -1
- package/dist/client/sse-event-processor.d.ts.map +1 -1
- package/dist/client/sse-event-processor.js +12 -3
- package/dist/client/sse-event-processor.js.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/collab/struct-routes.d.ts +1 -1
- package/dist/db/client.d.ts.map +1 -1
- package/dist/db/client.js +48 -17
- package/dist/db/client.js.map +1 -1
- package/dist/file-upload/actions/upload-image.d.ts +1 -1
- package/dist/integrations/adapters/slack.js +7 -3
- package/dist/integrations/adapters/slack.js.map +1 -1
- package/dist/localization/default-messages.d.ts +43 -0
- package/dist/localization/default-messages.d.ts.map +1 -1
- package/dist/localization/default-messages.js +43 -0
- package/dist/localization/default-messages.js.map +1 -1
- package/dist/mcp/screen-memory-stdio.d.ts +7 -7
- package/dist/mcp/screen-memory-stdio.d.ts.map +1 -1
- package/dist/notifications/routes.d.ts +6 -6
- package/dist/observability/traces.d.ts +3 -1
- package/dist/observability/traces.d.ts.map +1 -1
- package/dist/observability/traces.js +73 -4
- package/dist/observability/traces.js.map +1 -1
- package/dist/progress/routes.d.ts +1 -1
- package/dist/provider-api/actions/custom-provider-registration.d.ts +12 -12
- package/dist/provider-api/actions/provider-api.d.ts +13 -13
- package/dist/provider-api/corpus-jobs.d.ts +2 -2
- package/dist/scripts/call-agent.d.ts.map +1 -1
- package/dist/scripts/call-agent.js +233 -10
- package/dist/scripts/call-agent.js.map +1 -1
- package/dist/scripts/describe-workspace-apps.js +2 -2
- package/dist/scripts/describe-workspace-apps.js.map +1 -1
- package/dist/secrets/crypto.d.ts +31 -21
- package/dist/secrets/crypto.d.ts.map +1 -1
- package/dist/secrets/crypto.js +108 -33
- package/dist/secrets/crypto.js.map +1 -1
- package/dist/secrets/storage.d.ts +3 -5
- package/dist/secrets/storage.d.ts.map +1 -1
- package/dist/secrets/storage.js +40 -25
- package/dist/secrets/storage.js.map +1 -1
- package/dist/server/agent-capabilities.js +1 -1
- package/dist/server/agent-capabilities.js.map +1 -1
- package/dist/server/agent-chat/action-filters-a2a.d.ts +17 -3
- package/dist/server/agent-chat/action-filters-a2a.d.ts.map +1 -1
- package/dist/server/agent-chat/action-filters-a2a.js +92 -3
- package/dist/server/agent-chat/action-filters-a2a.js.map +1 -1
- package/dist/server/agent-chat/context-tools.d.ts.map +1 -1
- package/dist/server/agent-chat/context-tools.js +2 -0
- package/dist/server/agent-chat/context-tools.js.map +1 -1
- package/dist/server/agent-chat/plugin-options.d.ts +23 -0
- package/dist/server/agent-chat/plugin-options.d.ts.map +1 -1
- package/dist/server/agent-chat/plugin-options.js +4 -1
- package/dist/server/agent-chat/plugin-options.js.map +1 -1
- package/dist/server/agent-chat/prompt-resources.js +1 -1
- package/dist/server/agent-chat/prompt-resources.js.map +1 -1
- package/dist/server/agent-chat-plugin.d.ts +2 -1
- package/dist/server/agent-chat-plugin.d.ts.map +1 -1
- package/dist/server/agent-chat-plugin.js +79 -56
- package/dist/server/agent-chat-plugin.js.map +1 -1
- package/dist/server/realtime-token.d.ts +1 -1
- package/dist/templates/default/.agents/skills/secrets/SKILL.md +14 -7
- package/dist/templates/headless/.agents/skills/secrets/SKILL.md +14 -7
- package/dist/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +18 -7
- package/dist/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +15 -14
- package/dist/templates/workspace-core/.agents/skills/secrets/SKILL.md +14 -7
- package/dist/vite/client.d.ts.map +1 -1
- package/dist/vite/client.js +1 -0
- package/dist/vite/client.js.map +1 -1
- package/docs/content/agent-native-toolkit.mdx +13 -6
- package/docs/content/cloneable-saas.mdx +5 -5
- package/docs/content/creating-templates.mdx +9 -0
- package/docs/content/deployment.mdx +14 -10
- package/docs/content/doctor.mdx +8 -1
- package/docs/content/drop-in-agent.mdx +1 -1
- package/docs/content/extensions.mdx +18 -18
- package/docs/content/faq.mdx +4 -4
- package/docs/content/key-concepts.mdx +30 -21
- package/docs/content/template-brain-developers.mdx +4 -1
- package/docs/content/template-mail-developers.mdx +4 -1
- package/docs/content/what-is-agent-native.mdx +6 -6
- package/package.json +2 -2
- package/src/a2a/client.ts +449 -66
- package/src/a2a/correlation.ts +31 -0
- package/src/a2a/types.ts +4 -0
- package/src/action.ts +3 -0
- package/src/agent/engine/registry.ts +45 -5
- package/src/agent/production-agent.ts +151 -18
- package/src/agent/run-loop-with-resume.ts +190 -3
- package/src/agent/run-manager.ts +117 -41
- package/src/agent/thread-debug-history.ts +86 -0
- package/src/agent/types.ts +3 -1
- package/src/cli/create.ts +11 -1
- package/src/cli/templates-meta.ts +2 -2
- package/src/client/agent-chat-adapter.ts +91 -13
- package/src/client/resources/McpIntegrationDialog.tsx +11 -9
- package/src/client/sse-event-processor.ts +17 -3
- package/src/db/client.ts +57 -17
- package/src/integrations/adapters/slack.ts +8 -3
- package/src/localization/default-messages.ts +44 -0
- package/src/observability/traces.ts +78 -5
- package/src/scripts/call-agent.ts +290 -9
- package/src/scripts/describe-workspace-apps.ts +2 -2
- package/src/secrets/crypto.ts +126 -34
- package/src/secrets/storage.ts +61 -25
- package/src/server/agent-capabilities.ts +1 -1
- package/src/server/agent-chat/action-filters-a2a.ts +111 -7
- package/src/server/agent-chat/context-tools.ts +2 -0
- package/src/server/agent-chat/plugin-options.ts +34 -1
- package/src/server/agent-chat/prompt-resources.ts +1 -1
- package/src/server/agent-chat-plugin.ts +91 -59
- package/src/templates/default/.agents/skills/secrets/SKILL.md +14 -7
- package/src/templates/headless/.agents/skills/secrets/SKILL.md +14 -7
- package/src/templates/workspace-core/.agents/skills/a2a-protocol/SKILL.md +18 -7
- package/src/templates/workspace-core/.agents/skills/composable-mini-apps/SKILL.md +15 -14
- package/src/templates/workspace-core/.agents/skills/secrets/SKILL.md +14 -7
- package/src/vite/client.ts +1 -0
|
@@ -4,6 +4,390 @@
|
|
|
4
4
|
/** Compiled IIFE string for editor-chrome.bridge.ts — inject into an iframe via srcdoc or a <script> tag. */
|
|
5
5
|
export const editorChromeBridgeScript: string = `"use strict";
|
|
6
6
|
(() => {
|
|
7
|
+
// ../../packages/toolkit/dist/canvas-interactions/canvas-interactions.js
|
|
8
|
+
var DEFAULT_CANVAS_DRAG_THRESHOLD = 3;
|
|
9
|
+
var DEFAULT_CANVAS_NUDGE = 1;
|
|
10
|
+
var DEFAULT_CANVAS_ACCELERATED_NUDGE = 10;
|
|
11
|
+
var DEFAULT_CANVAS_MIN_SIZE = 24;
|
|
12
|
+
var DEFAULT_CANVAS_INTERACTION_CAPABILITIES = {
|
|
13
|
+
selection: true,
|
|
14
|
+
multiSelection: false,
|
|
15
|
+
move: true,
|
|
16
|
+
resize: true,
|
|
17
|
+
textEditing: true,
|
|
18
|
+
nudge: true,
|
|
19
|
+
duplicate: true,
|
|
20
|
+
clipboard: true,
|
|
21
|
+
delete: true,
|
|
22
|
+
arrange: true,
|
|
23
|
+
snapping: false,
|
|
24
|
+
alignment: false,
|
|
25
|
+
distribution: false,
|
|
26
|
+
grouping: false,
|
|
27
|
+
rotation: false,
|
|
28
|
+
marquee: false
|
|
29
|
+
};
|
|
30
|
+
var DEFAULT_CANVAS_SHORTCUTS = [
|
|
31
|
+
{ command: "select-all", key: "a", modifiers: ["primary"] },
|
|
32
|
+
{ command: "undo", key: "z", modifiers: ["primary"] },
|
|
33
|
+
{ command: "redo", key: "z", modifiers: ["primary", "shift"] },
|
|
34
|
+
{ command: "copy", key: "c", modifiers: ["primary"] },
|
|
35
|
+
{ command: "cut", key: "x", modifiers: ["primary"] },
|
|
36
|
+
{ command: "paste", key: "v", modifiers: ["primary"] },
|
|
37
|
+
{ command: "duplicate", key: "d", modifiers: ["primary"] },
|
|
38
|
+
{ command: "delete", key: "Backspace" },
|
|
39
|
+
{ command: "delete", key: "Delete" },
|
|
40
|
+
{
|
|
41
|
+
command: "arrange-front",
|
|
42
|
+
key: "]",
|
|
43
|
+
code: "BracketRight",
|
|
44
|
+
modifiers: ["primary", "shift"]
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
command: "arrange-back",
|
|
48
|
+
key: "[",
|
|
49
|
+
code: "BracketLeft",
|
|
50
|
+
modifiers: ["primary", "shift"]
|
|
51
|
+
}
|
|
52
|
+
];
|
|
53
|
+
function primaryModifierIsPressed(modifiers) {
|
|
54
|
+
return Boolean(modifiers.metaKey || modifiers.ctrlKey);
|
|
55
|
+
}
|
|
56
|
+
function hasShortcutModifier(modifier, input) {
|
|
57
|
+
switch (modifier) {
|
|
58
|
+
case "primary":
|
|
59
|
+
return primaryModifierIsPressed(input);
|
|
60
|
+
case "shift":
|
|
61
|
+
return Boolean(input.shiftKey);
|
|
62
|
+
case "alt":
|
|
63
|
+
return Boolean(input.altKey);
|
|
64
|
+
case "ctrl":
|
|
65
|
+
return Boolean(input.ctrlKey);
|
|
66
|
+
case "meta":
|
|
67
|
+
return Boolean(input.metaKey);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
function hasOnlyShortcutModifiers(shortcut, input) {
|
|
71
|
+
const modifiers = new Set(shortcut.modifiers ?? []);
|
|
72
|
+
const expectedPrimary = modifiers.has("primary");
|
|
73
|
+
const expectedCtrl = modifiers.has("ctrl") || expectedPrimary;
|
|
74
|
+
const expectedMeta = modifiers.has("meta") || expectedPrimary;
|
|
75
|
+
return Boolean(input.shiftKey) === modifiers.has("shift") && Boolean(input.altKey) === modifiers.has("alt") && (!input.ctrlKey || expectedCtrl) && (!input.metaKey || expectedMeta) && (!expectedPrimary || primaryModifierIsPressed(input));
|
|
76
|
+
}
|
|
77
|
+
function resolveCanvasTextActivation(input, policy = {}) {
|
|
78
|
+
if (!input.textEditable)
|
|
79
|
+
return "select";
|
|
80
|
+
const activation = policy.activation ?? "double-click";
|
|
81
|
+
return input.clickCount >= (activation === "single-click" ? 1 : 2) ? "edit" : "select";
|
|
82
|
+
}
|
|
83
|
+
function resolveCanvasEscape(input, policy = {}) {
|
|
84
|
+
const selectedObjectIds = input.selectedObjectIds ?? [];
|
|
85
|
+
if (input.editingObjectId === null) {
|
|
86
|
+
return { action: "none", editingObjectId: null, selectedObjectIds };
|
|
87
|
+
}
|
|
88
|
+
if ((policy.escapeBehavior ?? "select-object") === "cancel-edit") {
|
|
89
|
+
return { action: "cancel-edit", editingObjectId: null, selectedObjectIds };
|
|
90
|
+
}
|
|
91
|
+
if ((policy.escapeBehavior ?? "select-object") === "clear-selection") {
|
|
92
|
+
return {
|
|
93
|
+
action: "clear-selection",
|
|
94
|
+
editingObjectId: null,
|
|
95
|
+
selectedObjectIds: []
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
return {
|
|
99
|
+
action: "select-object",
|
|
100
|
+
editingObjectId: null,
|
|
101
|
+
selectedObjectIds: [input.editingObjectId]
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
function clientPointToCanvasPoint(point, viewport, canvas) {
|
|
105
|
+
if (viewport.width <= 0 || viewport.height <= 0)
|
|
106
|
+
return { x: 0, y: 0 };
|
|
107
|
+
return {
|
|
108
|
+
x: (point.x - viewport.left) / viewport.width * canvas.width,
|
|
109
|
+
y: (point.y - viewport.top) / viewport.height * canvas.height
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
function clientDeltaToCanvasDelta(delta, viewport, canvas) {
|
|
113
|
+
if (viewport.width <= 0 || viewport.height <= 0)
|
|
114
|
+
return { x: 0, y: 0 };
|
|
115
|
+
return {
|
|
116
|
+
x: delta.x / viewport.width * canvas.width,
|
|
117
|
+
y: delta.y / viewport.height * canvas.height
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
function hasCrossedCanvasDragThreshold(start, current, threshold = DEFAULT_CANVAS_DRAG_THRESHOLD) {
|
|
121
|
+
const dx = current.x - start.x;
|
|
122
|
+
const dy = current.y - start.y;
|
|
123
|
+
return dx * dx + dy * dy >= threshold * threshold;
|
|
124
|
+
}
|
|
125
|
+
function constrainCanvasDragDelta(delta, lockAxis = false) {
|
|
126
|
+
if (!lockAxis)
|
|
127
|
+
return delta;
|
|
128
|
+
return Math.abs(delta.x) >= Math.abs(delta.y) ? { x: delta.x, y: 0 } : { x: 0, y: delta.y };
|
|
129
|
+
}
|
|
130
|
+
function resizeCanvasRect(start, input) {
|
|
131
|
+
const fromWest = input.handle === "nw" || input.handle === "w" || input.handle === "sw";
|
|
132
|
+
const fromEast = input.handle === "ne" || input.handle === "e" || input.handle === "se";
|
|
133
|
+
const fromNorth = input.handle === "nw" || input.handle === "n" || input.handle === "ne";
|
|
134
|
+
const fromSouth = input.handle === "sw" || input.handle === "s" || input.handle === "se";
|
|
135
|
+
const resizesHorizontally = fromWest || fromEast;
|
|
136
|
+
const resizesVertically = fromNorth || fromSouth;
|
|
137
|
+
let width = start.width + (fromWest ? -input.delta.x : fromEast ? input.delta.x : 0);
|
|
138
|
+
let height = start.height + (fromNorth ? -input.delta.y : fromSouth ? input.delta.y : 0);
|
|
139
|
+
const minWidth = input.minWidth ?? DEFAULT_CANVAS_MIN_SIZE;
|
|
140
|
+
const minHeight = input.minHeight ?? DEFAULT_CANVAS_MIN_SIZE;
|
|
141
|
+
if (input.preserveAspectRatio && resizesHorizontally && resizesVertically && start.width > 0 && start.height > 0) {
|
|
142
|
+
const horizontalScale = width / start.width;
|
|
143
|
+
const verticalScale = height / start.height;
|
|
144
|
+
const scale = Math.abs(horizontalScale - 1) >= Math.abs(verticalScale - 1) ? horizontalScale : verticalScale;
|
|
145
|
+
const minScale = Math.max(minWidth / start.width, minHeight / start.height);
|
|
146
|
+
width = start.width * Math.max(minScale, scale);
|
|
147
|
+
height = start.height * Math.max(minScale, scale);
|
|
148
|
+
}
|
|
149
|
+
width = Math.max(minWidth, width);
|
|
150
|
+
height = Math.max(minHeight, height);
|
|
151
|
+
return {
|
|
152
|
+
x: fromWest ? start.x + start.width - width : start.x,
|
|
153
|
+
y: fromNorth ? start.y + start.height - height : start.y,
|
|
154
|
+
width,
|
|
155
|
+
height
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
function shouldDuplicateCanvasDrag(modifiers, duplicateModifier = "alt") {
|
|
159
|
+
switch (duplicateModifier) {
|
|
160
|
+
case "alt":
|
|
161
|
+
return Boolean(modifiers.altKey);
|
|
162
|
+
case "meta":
|
|
163
|
+
return Boolean(modifiers.metaKey);
|
|
164
|
+
case "ctrl":
|
|
165
|
+
return Boolean(modifiers.ctrlKey);
|
|
166
|
+
case "none":
|
|
167
|
+
return false;
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
function resolveCanvasNudge(input, policy = {}) {
|
|
171
|
+
const amount = input.shiftKey ? policy.acceleratedAmount ?? DEFAULT_CANVAS_ACCELERATED_NUDGE : policy.amount ?? DEFAULT_CANVAS_NUDGE;
|
|
172
|
+
switch (input.key) {
|
|
173
|
+
case "ArrowLeft":
|
|
174
|
+
return { command: "nudge-left", delta: { x: -amount, y: 0 } };
|
|
175
|
+
case "ArrowRight":
|
|
176
|
+
return { command: "nudge-right", delta: { x: amount, y: 0 } };
|
|
177
|
+
case "ArrowUp":
|
|
178
|
+
return { command: "nudge-up", delta: { x: 0, y: -amount } };
|
|
179
|
+
case "ArrowDown":
|
|
180
|
+
return { command: "nudge-down", delta: { x: 0, y: amount } };
|
|
181
|
+
default:
|
|
182
|
+
return null;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
function resolveCanvasShortcut(input, shortcuts = DEFAULT_CANVAS_SHORTCUTS) {
|
|
186
|
+
const normalizedKey = input.key.toLowerCase();
|
|
187
|
+
const shortcut = shortcuts.find((candidate) => (candidate.key.toLowerCase() === normalizedKey || candidate.code !== void 0 && candidate.code === input.code) && (candidate.modifiers ?? []).every((modifier) => hasShortcutModifier(modifier, input)) && hasOnlyShortcutModifiers(candidate, input));
|
|
188
|
+
return shortcut?.command ?? null;
|
|
189
|
+
}
|
|
190
|
+
function createCanvasShortcutRegistry(shortcuts = DEFAULT_CANVAS_SHORTCUTS) {
|
|
191
|
+
return {
|
|
192
|
+
shortcuts,
|
|
193
|
+
resolve: (input) => resolveCanvasShortcut(input, shortcuts)
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
function createCanvasInteractionCore(config = {}, adapter) {
|
|
197
|
+
const textEditing = config.textEditing ?? {};
|
|
198
|
+
const capabilities = {
|
|
199
|
+
...DEFAULT_CANVAS_INTERACTION_CAPABILITIES,
|
|
200
|
+
...adapter?.capabilities,
|
|
201
|
+
...config.capabilities
|
|
202
|
+
};
|
|
203
|
+
const drag = config.drag ?? {};
|
|
204
|
+
const nudge = config.nudge ?? {};
|
|
205
|
+
const shortcuts = createCanvasShortcutRegistry(config.shortcuts);
|
|
206
|
+
const supportsCommand = (command) => {
|
|
207
|
+
switch (command.id) {
|
|
208
|
+
case "copy":
|
|
209
|
+
case "cut":
|
|
210
|
+
case "paste":
|
|
211
|
+
return capabilities.clipboard;
|
|
212
|
+
case "duplicate":
|
|
213
|
+
return capabilities.duplicate;
|
|
214
|
+
case "delete":
|
|
215
|
+
return capabilities.delete;
|
|
216
|
+
case "nudge":
|
|
217
|
+
case "nudge-left":
|
|
218
|
+
case "nudge-right":
|
|
219
|
+
case "nudge-up":
|
|
220
|
+
case "nudge-down":
|
|
221
|
+
return capabilities.nudge;
|
|
222
|
+
case "arrange-front":
|
|
223
|
+
case "arrange-back":
|
|
224
|
+
case "bring-forward":
|
|
225
|
+
case "bring-to-front":
|
|
226
|
+
case "send-backward":
|
|
227
|
+
case "send-to-back":
|
|
228
|
+
return capabilities.arrange;
|
|
229
|
+
case "align-left":
|
|
230
|
+
case "align-center":
|
|
231
|
+
case "align-right":
|
|
232
|
+
case "align-top":
|
|
233
|
+
case "align-middle":
|
|
234
|
+
case "align-bottom":
|
|
235
|
+
return capabilities.alignment;
|
|
236
|
+
case "distribute-horizontal":
|
|
237
|
+
case "distribute-vertical":
|
|
238
|
+
return capabilities.distribution;
|
|
239
|
+
case "group":
|
|
240
|
+
case "ungroup":
|
|
241
|
+
return capabilities.grouping;
|
|
242
|
+
case "frame-selection":
|
|
243
|
+
return capabilities.selection;
|
|
244
|
+
default:
|
|
245
|
+
return true;
|
|
246
|
+
}
|
|
247
|
+
};
|
|
248
|
+
return {
|
|
249
|
+
capabilities,
|
|
250
|
+
textActivation: (input) => capabilities.textEditing ? resolveCanvasTextActivation(input, textEditing) : "select",
|
|
251
|
+
escape: (input) => resolveCanvasEscape(input, textEditing),
|
|
252
|
+
clientPointToCanvas: (point, viewport, canvas) => clientPointToCanvasPoint(point, viewport, canvas),
|
|
253
|
+
clientDeltaToCanvas: (delta, viewport, canvas) => clientDeltaToCanvasDelta(delta, viewport, canvas),
|
|
254
|
+
hasCrossedDragThreshold: (start, current) => hasCrossedCanvasDragThreshold(start, current, drag.threshold),
|
|
255
|
+
constrainDrag: (delta, modifiers = {}) => constrainCanvasDragDelta(delta, Boolean(modifiers.shiftKey)),
|
|
256
|
+
resize: (start, input) => resizeCanvasRect(start, {
|
|
257
|
+
...input,
|
|
258
|
+
minWidth: input.minWidth ?? config.minSize,
|
|
259
|
+
minHeight: input.minHeight ?? config.minSize
|
|
260
|
+
}),
|
|
261
|
+
shouldDuplicateDrag: (modifiers) => capabilities.duplicate && shouldDuplicateCanvasDrag(modifiers, drag.duplicateModifier),
|
|
262
|
+
nudge: (input) => capabilities.nudge ? resolveCanvasNudge(input, nudge) : null,
|
|
263
|
+
shortcut: (input) => shortcuts.resolve(input),
|
|
264
|
+
dispatch: (command) => {
|
|
265
|
+
if (!adapter)
|
|
266
|
+
return { handled: false, reason: "no-adapter" };
|
|
267
|
+
if (!supportsCommand(command)) {
|
|
268
|
+
return { handled: false, reason: "unsupported" };
|
|
269
|
+
}
|
|
270
|
+
return adapter.dispatch(command);
|
|
271
|
+
}
|
|
272
|
+
};
|
|
273
|
+
}
|
|
274
|
+
function createCanvasGestureController(config) {
|
|
275
|
+
const core = createCanvasInteractionCore(config);
|
|
276
|
+
let start = null;
|
|
277
|
+
let activeGesture = null;
|
|
278
|
+
const state = () => ({
|
|
279
|
+
phase: activeGesture ? "active" : start ? "pending" : "idle",
|
|
280
|
+
gesture: activeGesture
|
|
281
|
+
});
|
|
282
|
+
const canStart = (kind) => kind === "move" ? core.capabilities.move : core.capabilities.resize;
|
|
283
|
+
const buildGesture = (gestureStart, pointer) => {
|
|
284
|
+
const clientDelta = {
|
|
285
|
+
x: pointer.x - gestureStart.pointer.x,
|
|
286
|
+
y: pointer.y - gestureStart.pointer.y
|
|
287
|
+
};
|
|
288
|
+
const convertedDelta = clientDeltaToCanvasDelta(clientDelta, gestureStart.viewport, gestureStart.canvas);
|
|
289
|
+
const duplicate = gestureStart.kind === "move" && core.capabilities.duplicate ? core.shouldDuplicateDrag(gestureStart.pointer) && core.shouldDuplicateDrag(pointer) : false;
|
|
290
|
+
if (gestureStart.kind === "move") {
|
|
291
|
+
return {
|
|
292
|
+
kind: "move",
|
|
293
|
+
objectIds: gestureStart.objectIds,
|
|
294
|
+
startPointer: gestureStart.pointer,
|
|
295
|
+
pointer,
|
|
296
|
+
clientDelta,
|
|
297
|
+
canvasDelta: core.constrainDrag(convertedDelta, pointer),
|
|
298
|
+
duplicate
|
|
299
|
+
};
|
|
300
|
+
}
|
|
301
|
+
return {
|
|
302
|
+
kind: "resize",
|
|
303
|
+
objectIds: gestureStart.objectIds,
|
|
304
|
+
startPointer: gestureStart.pointer,
|
|
305
|
+
pointer,
|
|
306
|
+
clientDelta,
|
|
307
|
+
canvasDelta: convertedDelta,
|
|
308
|
+
duplicate: false,
|
|
309
|
+
handle: gestureStart.handle,
|
|
310
|
+
startRect: gestureStart.rect,
|
|
311
|
+
rect: core.resize(gestureStart.rect, {
|
|
312
|
+
handle: gestureStart.handle,
|
|
313
|
+
delta: convertedDelta,
|
|
314
|
+
preserveAspectRatio: Boolean(pointer.shiftKey)
|
|
315
|
+
})
|
|
316
|
+
};
|
|
317
|
+
};
|
|
318
|
+
const preview = (gesture) => {
|
|
319
|
+
activeGesture = gesture;
|
|
320
|
+
return {
|
|
321
|
+
phase: "active",
|
|
322
|
+
gesture,
|
|
323
|
+
preview: config.adapter.preview?.(gesture) ?? null,
|
|
324
|
+
state: state()
|
|
325
|
+
};
|
|
326
|
+
};
|
|
327
|
+
const update = (pointer) => {
|
|
328
|
+
if (!start)
|
|
329
|
+
return { phase: "idle", state: state() };
|
|
330
|
+
if (!activeGesture) {
|
|
331
|
+
const crossedThreshold = core.hasCrossedDragThreshold(start.pointer, pointer);
|
|
332
|
+
if (!crossedThreshold)
|
|
333
|
+
return { phase: "pending", state: state() };
|
|
334
|
+
}
|
|
335
|
+
return preview(buildGesture(start, pointer));
|
|
336
|
+
};
|
|
337
|
+
const hasSamePointerState = (first, second) => first.x === second.x && first.y === second.y && Boolean(first.altKey) === Boolean(second.altKey) && Boolean(first.ctrlKey) === Boolean(second.ctrlKey) && Boolean(first.metaKey) === Boolean(second.metaKey) && Boolean(first.shiftKey) === Boolean(second.shiftKey);
|
|
338
|
+
return {
|
|
339
|
+
capabilities: core.capabilities,
|
|
340
|
+
getState: state,
|
|
341
|
+
pointerDown: (gestureStart) => {
|
|
342
|
+
if (start) {
|
|
343
|
+
return { accepted: false, reason: "already-active", state: state() };
|
|
344
|
+
}
|
|
345
|
+
if (!canStart(gestureStart.kind)) {
|
|
346
|
+
return { accepted: false, reason: "unsupported", state: state() };
|
|
347
|
+
}
|
|
348
|
+
if (gestureStart.kind === "resize" && (gestureStart.rect.width <= 0 || gestureStart.rect.height <= 0)) {
|
|
349
|
+
return { accepted: false, reason: "invalid-resize", state: state() };
|
|
350
|
+
}
|
|
351
|
+
start = gestureStart;
|
|
352
|
+
return { accepted: true, state: state() };
|
|
353
|
+
},
|
|
354
|
+
pointerMove: update,
|
|
355
|
+
pointerUp: (pointer) => {
|
|
356
|
+
const shouldUpdate = activeGesture === null || !hasSamePointerState(activeGesture.pointer, pointer);
|
|
357
|
+
const beforeEnd = shouldUpdate ? update(pointer) : { phase: "active", state: state() };
|
|
358
|
+
const gesture = activeGesture;
|
|
359
|
+
start = null;
|
|
360
|
+
activeGesture = null;
|
|
361
|
+
if (!gesture) {
|
|
362
|
+
return {
|
|
363
|
+
committed: false,
|
|
364
|
+
reason: beforeEnd.phase === "idle" ? "idle" : "below-threshold",
|
|
365
|
+
state: state()
|
|
366
|
+
};
|
|
367
|
+
}
|
|
368
|
+
return {
|
|
369
|
+
committed: true,
|
|
370
|
+
gesture,
|
|
371
|
+
result: config.adapter.commit(gesture),
|
|
372
|
+
state: state()
|
|
373
|
+
};
|
|
374
|
+
},
|
|
375
|
+
cancel: () => {
|
|
376
|
+
const gesture = activeGesture;
|
|
377
|
+
start = null;
|
|
378
|
+
activeGesture = null;
|
|
379
|
+
if (!gesture)
|
|
380
|
+
return { cancelled: false, reason: "idle", state: state() };
|
|
381
|
+
return {
|
|
382
|
+
cancelled: true,
|
|
383
|
+
gesture,
|
|
384
|
+
result: config.adapter.cancel?.(gesture) ?? null,
|
|
385
|
+
state: state()
|
|
386
|
+
};
|
|
387
|
+
}
|
|
388
|
+
};
|
|
389
|
+
}
|
|
390
|
+
|
|
7
391
|
// app/components/design/bridge/editor-chrome.bridge.ts
|
|
8
392
|
(function() {
|
|
9
393
|
if (window.__anEditorChromeBridge) return;
|
|
@@ -3287,6 +3671,27 @@ export const editorChromeBridgeScript: string = `"use strict";
|
|
|
3287
3671
|
var pointerGesture = e && e.type && e.type.indexOf("pointer") === 0;
|
|
3288
3672
|
return pointerGesture ? { move: "pointermove", up: "pointerup" } : { move: "mousemove", up: "mouseup" };
|
|
3289
3673
|
}
|
|
3674
|
+
function bridgeGestureViewport() {
|
|
3675
|
+
var width = Math.max(
|
|
3676
|
+
1,
|
|
3677
|
+
window.innerWidth || document.documentElement.clientWidth || 1
|
|
3678
|
+
);
|
|
3679
|
+
var height = Math.max(
|
|
3680
|
+
1,
|
|
3681
|
+
window.innerHeight || document.documentElement.clientHeight || 1
|
|
3682
|
+
);
|
|
3683
|
+
return { left: 0, top: 0, width, height };
|
|
3684
|
+
}
|
|
3685
|
+
function bridgeGesturePointer(e) {
|
|
3686
|
+
return {
|
|
3687
|
+
x: e.clientX,
|
|
3688
|
+
y: e.clientY,
|
|
3689
|
+
altKey: !!e.altKey,
|
|
3690
|
+
ctrlKey: !!e.ctrlKey,
|
|
3691
|
+
metaKey: !!e.metaKey,
|
|
3692
|
+
shiftKey: !!e.shiftKey
|
|
3693
|
+
};
|
|
3694
|
+
}
|
|
3290
3695
|
function elementFromEditorPoint(clientX, clientY) {
|
|
3291
3696
|
lastEditorPointWasBlocked = false;
|
|
3292
3697
|
var shieldPointerEvents = shieldOverlay.style.pointerEvents;
|
|
@@ -6529,8 +6934,42 @@ export const editorChromeBridgeScript: string = `"use strict";
|
|
|
6529
6934
|
var startX = e.clientX;
|
|
6530
6935
|
var startY = e.clientY;
|
|
6531
6936
|
var dragEl = gestureEl;
|
|
6532
|
-
var
|
|
6937
|
+
var gestureViewport = bridgeGestureViewport();
|
|
6533
6938
|
var DRAG_THRESHOLD = 3;
|
|
6939
|
+
var bridgeMoveController = createCanvasGestureController({
|
|
6940
|
+
capabilities: { move: true, resize: true },
|
|
6941
|
+
drag: {
|
|
6942
|
+
// Shield drags already crossed the outer threshold before reaching
|
|
6943
|
+
// startMove. Keeping their controller threshold at zero preserves the
|
|
6944
|
+
// first post-shield delta, while direct selection-chrome drags still
|
|
6945
|
+
// need a real threshold before they preview or persist.
|
|
6946
|
+
threshold: pointerStartParam ? 0 : DRAG_THRESHOLD,
|
|
6947
|
+
duplicateModifier: "alt"
|
|
6948
|
+
},
|
|
6949
|
+
adapter: {
|
|
6950
|
+
preview: function() {
|
|
6951
|
+
return { handled: true };
|
|
6952
|
+
},
|
|
6953
|
+
commit: function() {
|
|
6954
|
+
return { handled: true };
|
|
6955
|
+
},
|
|
6956
|
+
cancel: function() {
|
|
6957
|
+
return { handled: true };
|
|
6958
|
+
}
|
|
6959
|
+
}
|
|
6960
|
+
});
|
|
6961
|
+
bridgeMoveController.pointerDown({
|
|
6962
|
+
kind: "move",
|
|
6963
|
+
objectIds: [getSelector(gestureEl)],
|
|
6964
|
+
// \`e\` is deliberately the event that actually began the legacy move
|
|
6965
|
+
// lifecycle. \`pointerStartParam\` is only Design's outer shield
|
|
6966
|
+
// disambiguation origin; using it here would apply that first
|
|
6967
|
+
// threshold-crossing delta twice.
|
|
6968
|
+
pointer: bridgeGesturePointer(e),
|
|
6969
|
+
viewport: gestureViewport,
|
|
6970
|
+
canvas: { width: gestureViewport.width, height: gestureViewport.height }
|
|
6971
|
+
});
|
|
6972
|
+
var moved = false;
|
|
6534
6973
|
dndLog("start:free", { el: getSelector(gestureEl), isGroup: isGroupDrag });
|
|
6535
6974
|
var currentAutoLayoutTarget = null;
|
|
6536
6975
|
var snapCandidateRects = collectSnapCandidateRects(dragEl, groupOthers);
|
|
@@ -6558,18 +6997,15 @@ export const editorChromeBridgeScript: string = `"use strict";
|
|
|
6558
6997
|
window.requestAnimationFrame(flushCrossScreenDragMove);
|
|
6559
6998
|
}
|
|
6560
6999
|
function onMove(ev) {
|
|
7000
|
+
var controllerMove = bridgeMoveController.pointerMove(
|
|
7001
|
+
bridgeGesturePointer(ev)
|
|
7002
|
+
);
|
|
7003
|
+
if (controllerMove.phase !== "active") return;
|
|
6561
7004
|
if (!moved && Math.hypot(ev.clientX - startX, ev.clientY - startY) > DRAG_THRESHOLD) {
|
|
6562
7005
|
moved = true;
|
|
6563
7006
|
}
|
|
6564
|
-
var rawDx =
|
|
6565
|
-
var rawDy =
|
|
6566
|
-
if (ev.shiftKey) {
|
|
6567
|
-
if (Math.abs(rawDx) > Math.abs(rawDy)) {
|
|
6568
|
-
rawDy = 0;
|
|
6569
|
-
} else {
|
|
6570
|
-
rawDx = 0;
|
|
6571
|
-
}
|
|
6572
|
-
}
|
|
7007
|
+
var rawDx = controllerMove.gesture.canvasDelta.x;
|
|
7008
|
+
var rawDy = controllerMove.gesture.canvasDelta.y;
|
|
6573
7009
|
var nextLeft = originLeft + rawDx;
|
|
6574
7010
|
var nextTop = originTop + rawDy;
|
|
6575
7011
|
var snapBypass = Boolean(ev.metaKey || ev.ctrlKey);
|
|
@@ -6650,6 +7086,7 @@ export const editorChromeBridgeScript: string = `"use strict";
|
|
|
6650
7086
|
crossScreenDragMovePendingEv = null;
|
|
6651
7087
|
}
|
|
6652
7088
|
function cancelMoveDrag() {
|
|
7089
|
+
bridgeMoveController.cancel();
|
|
6653
7090
|
cleanupMoveDrag();
|
|
6654
7091
|
hideTransformBadge();
|
|
6655
7092
|
hideInsertionGuide();
|
|
@@ -6676,6 +7113,16 @@ export const editorChromeBridgeScript: string = `"use strict";
|
|
|
6676
7113
|
cancelMoveDrag();
|
|
6677
7114
|
}
|
|
6678
7115
|
function onUp(ev) {
|
|
7116
|
+
var controllerEnd = bridgeMoveController.pointerUp(
|
|
7117
|
+
bridgeGesturePointer(ev)
|
|
7118
|
+
);
|
|
7119
|
+
if (!controllerEnd.committed) {
|
|
7120
|
+
cleanupMoveDrag();
|
|
7121
|
+
hideTransformBadge();
|
|
7122
|
+
hideInsertionGuide();
|
|
7123
|
+
hideSnapGuides();
|
|
7124
|
+
return;
|
|
7125
|
+
}
|
|
6679
7126
|
cleanupMoveDrag();
|
|
6680
7127
|
hideTransformBadge();
|
|
6681
7128
|
hideInsertionGuide();
|
|
@@ -6810,6 +7257,41 @@ export const editorChromeBridgeScript: string = `"use strict";
|
|
|
6810
7257
|
var startX = e.clientX;
|
|
6811
7258
|
var startY = e.clientY;
|
|
6812
7259
|
var resizeTheta = currentRotation(resizeEl) * Math.PI / 180;
|
|
7260
|
+
var resizeGestureViewport = bridgeGestureViewport();
|
|
7261
|
+
var RESIZE_DRAG_THRESHOLD = 3;
|
|
7262
|
+
var bridgeResizeController = createCanvasGestureController({
|
|
7263
|
+
capabilities: { move: true, resize: true },
|
|
7264
|
+
drag: { threshold: RESIZE_DRAG_THRESHOLD, duplicateModifier: "alt" },
|
|
7265
|
+
minSize: 8,
|
|
7266
|
+
adapter: {
|
|
7267
|
+
preview: function() {
|
|
7268
|
+
return { handled: true };
|
|
7269
|
+
},
|
|
7270
|
+
commit: function() {
|
|
7271
|
+
return { handled: true };
|
|
7272
|
+
},
|
|
7273
|
+
cancel: function() {
|
|
7274
|
+
return { handled: true };
|
|
7275
|
+
}
|
|
7276
|
+
}
|
|
7277
|
+
});
|
|
7278
|
+
bridgeResizeController.pointerDown({
|
|
7279
|
+
kind: "resize",
|
|
7280
|
+
objectIds: [getSelector(resizeEl)],
|
|
7281
|
+
pointer: bridgeGesturePointer(e),
|
|
7282
|
+
viewport: resizeGestureViewport,
|
|
7283
|
+
canvas: {
|
|
7284
|
+
width: resizeGestureViewport.width,
|
|
7285
|
+
height: resizeGestureViewport.height
|
|
7286
|
+
},
|
|
7287
|
+
handle,
|
|
7288
|
+
rect: {
|
|
7289
|
+
x: origin.left,
|
|
7290
|
+
y: origin.top,
|
|
7291
|
+
width: origin.width,
|
|
7292
|
+
height: origin.height
|
|
7293
|
+
}
|
|
7294
|
+
});
|
|
6813
7295
|
var widthTouched = false;
|
|
6814
7296
|
var heightTouched = false;
|
|
6815
7297
|
function nextRect(ev) {
|
|
@@ -6889,6 +7371,10 @@ export const editorChromeBridgeScript: string = `"use strict";
|
|
|
6889
7371
|
};
|
|
6890
7372
|
}
|
|
6891
7373
|
function onMove(ev) {
|
|
7374
|
+
var controllerMove = bridgeResizeController.pointerMove(
|
|
7375
|
+
bridgeGesturePointer(ev)
|
|
7376
|
+
);
|
|
7377
|
+
if (controllerMove.phase !== "active") return;
|
|
6892
7378
|
if (!resizeEl) return;
|
|
6893
7379
|
var rect = nextRect(ev);
|
|
6894
7380
|
if (rect.touchesWidth) widthTouched = true;
|
|
@@ -6923,6 +7409,7 @@ export const editorChromeBridgeScript: string = `"use strict";
|
|
|
6923
7409
|
clearActiveDragCancel(cancelResizeDrag);
|
|
6924
7410
|
}
|
|
6925
7411
|
function cancelResizeDrag() {
|
|
7412
|
+
bridgeResizeController.cancel();
|
|
6926
7413
|
cleanupResizeDrag();
|
|
6927
7414
|
hideTransformBadge();
|
|
6928
7415
|
if (resizeEl && document.documentElement.contains(resizeEl)) {
|
|
@@ -6945,7 +7432,15 @@ export const editorChromeBridgeScript: string = `"use strict";
|
|
|
6945
7432
|
stopNativeInteraction(ev);
|
|
6946
7433
|
cancelResizeDrag();
|
|
6947
7434
|
}
|
|
6948
|
-
function onUp() {
|
|
7435
|
+
function onUp(ev) {
|
|
7436
|
+
var controllerEnd = bridgeResizeController.pointerUp(
|
|
7437
|
+
bridgeGesturePointer(ev)
|
|
7438
|
+
);
|
|
7439
|
+
if (!controllerEnd.committed) {
|
|
7440
|
+
cleanupResizeDrag();
|
|
7441
|
+
hideTransformBadge();
|
|
7442
|
+
return;
|
|
7443
|
+
}
|
|
6949
7444
|
cleanupResizeDrag();
|
|
6950
7445
|
hideTransformBadge();
|
|
6951
7446
|
if (!resizeEl) return;
|