nudge-ui 0.2.4 → 0.2.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/dist/cli/agentCommand.d.ts +0 -1
- package/dist/cli/agentCommand.js +4 -29
- package/dist/client.mjs +987 -221
- package/dist/compiler/ast.d.ts +0 -6
- package/dist/compiler/ast.js +0 -5
- package/dist/compiler/componentContractTypes.d.ts +11 -5
- package/dist/compiler/componentContracts.js +3 -9
- package/dist/compiler/componentInstrumentation.d.ts +2 -13
- package/dist/compiler/componentInstrumentation.js +3 -12
- package/dist/compiler/componentPolicyResolution.d.ts +3 -22
- package/dist/compiler/componentPolicyResolution.js +6 -38
- package/dist/compiler/identityAttributes.d.ts +2 -0
- package/dist/compiler/identityAttributes.js +2 -0
- package/dist/compiler/index.d.ts +0 -1
- package/dist/compiler/index.js +0 -1
- package/dist/compiler/packageComponentContracts.d.ts +10 -19
- package/dist/compiler/packageComponentContracts.js +60 -43
- package/dist/compiler/reactComponentProtocols.d.ts +0 -7
- package/dist/compiler/reactComponentProtocols.js +0 -7
- package/dist/compiler/reactIdentity.d.ts +2 -2
- package/dist/compiler/reactIdentity.js +41 -43
- package/dist/compiler/sourcePaths.d.ts +4 -8
- package/dist/compiler/sourcePaths.js +6 -8
- package/dist/css/dialects/index.d.ts +2 -21
- package/dist/css/dialects/index.js +2 -9
- package/dist/css/dialects/tailwind.d.ts +2 -16
- package/dist/css/dialects/tailwind.js +2 -25
- package/dist/css/dialects/vanillaExtract.d.ts +1 -9
- package/dist/css/dialects/vanillaExtract.js +0 -1
- package/dist/css/index.d.ts +0 -8
- package/dist/css/index.js +0 -8
- package/dist/css/model/index.d.ts +6 -38
- package/dist/css/model/index.js +0 -9
- package/dist/css/token-inventory/index.d.ts +0 -23
- package/dist/css/token-inventory/index.js +0 -23
- package/dist/css/token-inventory/inventory.js +4 -16
- package/dist/css/token-inventory/parseStylesheet.d.ts +1 -9
- package/dist/css/token-inventory/parseStylesheet.js +5 -42
- package/dist/css/token-inventory/policy.d.ts +2 -39
- package/dist/css/token-inventory/policy.js +2 -39
- package/dist/css/token-inventory/types.d.ts +2 -15
- package/dist/css/value-semantics/borderSemantics.d.ts +1 -8
- package/dist/css/value-semantics/borderSemantics.js +5 -23
- package/dist/css/value-semantics/boxSemantics.d.ts +2 -25
- package/dist/css/value-semantics/boxSemantics.js +1 -7
- package/dist/css/value-semantics/colorSemantics.d.ts +6 -60
- package/dist/css/value-semantics/colorSemantics.js +9 -40
- package/dist/css/value-semantics/cssSyntax.d.ts +10 -10
- package/dist/css/value-semantics/cssSyntax.js +39 -11
- package/dist/css/value-semantics/fontSemantics.d.ts +3 -19
- package/dist/css/value-semantics/fontSemantics.js +7 -25
- package/dist/css/value-semantics/index.d.ts +1 -12
- package/dist/css/value-semantics/index.js +1 -12
- package/dist/css/value-semantics/propertyPolicy.d.ts +6 -53
- package/dist/css/value-semantics/propertyPolicy.js +47 -59
- package/dist/css/value-semantics/stringMaps.d.ts +0 -1
- package/dist/css/value-semantics/structuredValues.d.ts +3 -37
- package/dist/css/value-semantics/structuredValues.js +6 -17
- package/dist/css/value-semantics/tokenInterpretation.d.ts +8 -50
- package/dist/css/value-semantics/tokenInterpretation.js +7 -21
- package/dist/hosts/astro/astroRuntimeConfig.d.ts +0 -1
- package/dist/hosts/astro/astroRuntimeConfig.js +0 -1
- package/dist/hosts/astro/clientAsset.d.ts +1 -5
- package/dist/hosts/astro/clientAsset.js +1 -5
- package/dist/hosts/astro/clientTransport.d.ts +0 -1
- package/dist/hosts/astro/clientTransport.js +4 -9
- package/dist/hosts/astro/integration.d.ts +2 -28
- package/dist/hosts/astro/integration.js +7 -36
- package/dist/hosts/astro/markdownIdentity.d.ts +0 -3
- package/dist/hosts/astro/markdownIdentity.js +0 -3
- package/dist/hosts/astro/middleware.d.ts +1 -12
- package/dist/hosts/astro/middleware.js +1 -12
- package/dist/hosts/astro/projectContext.d.ts +1 -9
- package/dist/hosts/astro/projectContext.js +2 -11
- package/dist/hosts/astro/responseInstrumentation.d.ts +4 -33
- package/dist/hosts/astro/responseInstrumentation.js +5 -34
- package/dist/hosts/environment.d.ts +0 -8
- package/dist/hosts/environment.js +0 -1
- package/dist/hosts/next/index.js +1 -3
- package/dist/hosts/next/loader.d.ts +5 -44
- package/dist/hosts/next/loader.js +22 -103
- package/dist/hosts/next/loaders/identity-loader.cjs +111 -65
- package/dist/hosts/next/loaders/loader-plugin.cjs +111 -65
- package/dist/hosts/next/manifest.d.ts +2 -16
- package/dist/hosts/next/manifest.js +18 -20
- package/dist/hosts/next/mount.d.ts +1 -11
- package/dist/hosts/next/mount.js +1 -11
- package/dist/hosts/next/repositoryScope.d.ts +2 -17
- package/dist/hosts/next/repositoryScope.js +2 -17
- package/dist/hosts/next/sidecar.d.ts +0 -13
- package/dist/hosts/next/sidecar.js +25 -110
- package/dist/hosts/next/wrapper.d.ts +0 -31
- package/dist/hosts/next/wrapper.js +14 -71
- package/dist/hosts/projectBridge.d.ts +0 -2
- package/dist/hosts/projectBridge.js +3 -19
- package/dist/hosts/reactRendererCapture.d.ts +2 -0
- package/dist/hosts/reactRendererCapture.js +12 -0
- package/dist/hosts/static/cli.d.ts +0 -4
- package/dist/hosts/static/cli.js +0 -3
- package/dist/hosts/static/html/bootstrap.d.ts +1 -18
- package/dist/hosts/static/html/bootstrap.js +2 -14
- package/dist/hosts/static/manifest.d.ts +2 -15
- package/dist/hosts/static/manifest.js +5 -18
- package/dist/hosts/static/server.d.ts +4 -38
- package/dist/hosts/static/server.js +17 -67
- package/dist/hosts/vite/index.d.ts +0 -10
- package/dist/hosts/vite/index.js +0 -10
- package/dist/hosts/vite/react.d.ts +4 -17
- package/dist/hosts/vite/react.js +18 -35
- package/dist/hosts/vite/tokens/activeStylesheets.d.ts +1 -10
- package/dist/hosts/vite/tokens/activeStylesheets.js +3 -8
- package/dist/hosts/vite/tokens/fileMap.d.ts +0 -1
- package/dist/hosts/vite/tokens/viteStylesheetArtifacts.d.ts +2 -15
- package/dist/hosts/vite/tokens/viteStylesheetArtifacts.js +3 -10
- package/dist/hosts/vite/vite.d.ts +5 -26
- package/dist/hosts/vite/vite.js +44 -80
- package/dist/html/dom.d.ts +0 -1
- package/dist/html/dom.js +0 -1
- package/dist/html/identity.d.ts +1 -15
- package/dist/html/identity.js +1 -8
- package/dist/html/insertions.d.ts +2 -8
- package/dist/html/insertions.js +1 -1
- package/dist/inspector/agent/McpConnectionDialog.d.ts +1 -6
- package/dist/inspector/agent/McpConnectionDialog.js +8 -9
- package/dist/inspector/agent/activity.d.ts +2 -2
- package/dist/inspector/agent/activity.js +4 -3
- package/dist/inspector/agent/client.d.ts +3 -27
- package/dist/inspector/agent/client.js +43 -91
- package/dist/inspector/agent/connectionStatus.d.ts +3 -2
- package/dist/inspector/agent/connectionStatus.js +25 -1
- package/dist/inspector/agent/httpTransport.d.ts +0 -8
- package/dist/inspector/agent/httpTransport.js +42 -176
- package/dist/inspector/agent/protocol.d.ts +1 -10
- package/dist/inspector/agent/protocol.js +1 -9
- package/dist/inspector/agent/verification.d.ts +3 -20
- package/dist/inspector/agent/verification.js +10 -43
- package/dist/inspector/boot.d.ts +5 -0
- package/dist/inspector/boot.js +289 -0
- package/dist/inspector/canvas/AgentActivityOverlay.d.ts +3 -2
- package/dist/inspector/canvas/AgentActivityOverlay.js +7 -4
- package/dist/inspector/canvas/CanvasCard.js +26 -24
- package/dist/inspector/canvas/CanvasElementOverlay.js +196 -174
- package/dist/inspector/canvas/CanvasToolbar.js +2 -1
- package/dist/inspector/canvas/CanvasWorkspace.js +87 -124
- package/dist/inspector/canvas/LockedWorkspaceNotice.d.ts +3 -2
- package/dist/inspector/canvas/LockedWorkspaceNotice.js +10 -6
- package/dist/inspector/canvas/PageCard.d.ts +9 -0
- package/dist/inspector/canvas/PageCard.js +50 -0
- package/dist/inspector/canvas/SketchToolOptions.d.ts +4 -0
- package/dist/inspector/canvas/SketchToolOptions.js +80 -0
- package/dist/inspector/canvas/StaleChangeIndicator.d.ts +1 -1
- package/dist/inspector/canvas/StaleChangeIndicator.js +1 -1
- package/dist/inspector/canvas/ToolOptionsDrawer.d.ts +16 -0
- package/dist/inspector/canvas/ToolOptionsDrawer.js +71 -0
- package/dist/inspector/canvas/activeCanvasDocument.d.ts +3 -4
- package/dist/inspector/canvas/activeCanvasDocument.js +0 -2
- package/dist/inspector/canvas/agentPresentation.d.ts +2 -13
- package/dist/inspector/canvas/agentPresentation.js +3 -14
- package/dist/inspector/canvas/assets/eraser.svg +28 -0
- package/dist/inspector/canvas/assets/pen.svg +25 -0
- package/dist/inspector/canvas/canvasFrame.d.ts +12 -0
- package/dist/inspector/canvas/canvasFrame.js +9 -0
- package/dist/inspector/canvas/canvasGestures.d.ts +0 -1
- package/dist/inspector/canvas/canvasGestures.js +0 -6
- package/dist/inspector/canvas/canvasResize.d.ts +1 -6
- package/dist/inspector/canvas/canvasResize.js +1 -6
- package/dist/inspector/canvas/canvasStore.d.ts +5 -7
- package/dist/inspector/canvas/canvasStore.js +42 -21
- package/dist/inspector/canvas/frameConnection.d.ts +42 -0
- package/dist/inspector/canvas/frameConnection.js +73 -0
- package/dist/inspector/canvas/frameContent.d.ts +0 -1
- package/dist/inspector/canvas/frameLifecycle.d.ts +12 -0
- package/dist/inspector/canvas/frameLifecycle.js +11 -0
- package/dist/inspector/canvas/frameProtocol.d.ts +20 -38
- package/dist/inspector/canvas/frameProtocol.js +37 -24
- package/dist/inspector/canvas/frameScrollbarStyles.d.ts +0 -1
- package/dist/inspector/canvas/frameScrollbarStyles.js +0 -1
- package/dist/inspector/canvas/layout.d.ts +10 -22
- package/dist/inspector/canvas/layout.js +0 -3
- package/dist/inspector/canvas/normalizeUrl.js +1 -8
- package/dist/inspector/canvas/pageSurface.d.ts +6 -0
- package/dist/inspector/canvas/pageSurface.js +29 -0
- package/dist/inspector/canvas/projection.d.ts +14 -25
- package/dist/inspector/canvas/projection.js +64 -87
- package/dist/inspector/canvas/rendererBootstrap.d.ts +8 -1
- package/dist/inspector/canvas/rendererBootstrap.js +10 -15
- package/dist/inspector/canvas/rendererCidIndex.d.ts +0 -5
- package/dist/inspector/canvas/rendererCidIndex.js +0 -5
- package/dist/inspector/canvas/rendererElementSelector.js +38 -28
- package/dist/inspector/canvas/rendererMessageRouter.d.ts +4 -6
- package/dist/inspector/canvas/rendererMessageRouter.js +12 -17
- package/dist/inspector/canvas/rendererSelectionProxy.d.ts +3 -1
- package/dist/inspector/canvas/rendererSelectionProxy.js +7 -40
- package/dist/inspector/canvas/rendererStylesheet.d.ts +0 -1
- package/dist/inspector/canvas/rendererStylesheet.js +23 -1
- package/dist/inspector/canvas/resizeHandleScale.d.ts +1 -10
- package/dist/inspector/canvas/resizeHandleScale.js +1 -10
- package/dist/inspector/canvas/sessionStore.d.ts +3 -9
- package/dist/inspector/canvas/sessionStore.js +33 -43
- package/dist/inspector/canvas/staleChangeDetector.d.ts +1 -1
- package/dist/inspector/canvas/staleChangeDetector.js +11 -26
- package/dist/inspector/canvas/toolbarScale.d.ts +1 -4
- package/dist/inspector/canvas/toolbarScale.js +1 -4
- package/dist/inspector/canvas/useCanvasLayoutAnimation.d.ts +0 -1
- package/dist/inspector/canvas/useCanvasLayoutAnimation.js +0 -1
- package/dist/inspector/canvas/viewStore.js +1 -1
- package/dist/inspector/canvas/wheelPan.d.ts +1 -1
- package/dist/inspector/canvas/wheelPan.js +1 -1
- package/dist/inspector/canvas/workspaceLease.d.ts +1 -5
- package/dist/inspector/canvas/workspaceLease.js +1 -7
- package/dist/inspector/changes/codecs.d.ts +1 -0
- package/dist/inspector/changes/codecs.js +21 -5
- package/dist/inspector/changes/draftPreview.d.ts +7 -0
- package/dist/inspector/changes/draftPreview.js +118 -0
- package/dist/inspector/changes/editModel.d.ts +11 -13
- package/dist/inspector/changes/editModel.js +9 -4
- package/dist/inspector/changes/managedStyleProjection.js +6 -15
- package/dist/inspector/changes/model.d.ts +0 -5
- package/dist/inspector/changes/model.js +1 -8
- package/dist/inspector/changes/previewDiagnostics.d.ts +2 -12
- package/dist/inspector/changes/previewDiagnostics.js +5 -21
- package/dist/inspector/changes/previewVerification.d.ts +25 -0
- package/dist/inspector/changes/previewVerification.js +34 -0
- package/dist/inspector/changes/structuralTypes.d.ts +2 -4
- package/dist/inspector/changes/types.d.ts +11 -8
- package/dist/inspector/clientManifest.d.ts +17 -6
- package/dist/inspector/clientManifest.js +16 -3
- package/dist/inspector/comments/CommentsOverlay.js +66 -23
- package/dist/inspector/comments/element.d.ts +1 -2
- package/dist/inspector/comments/element.js +1 -2
- package/dist/inspector/comments/store.d.ts +1 -1
- package/dist/inspector/comments/store.js +4 -3
- package/dist/inspector/comments/verification.d.ts +8 -2
- package/dist/inspector/comments/verification.js +19 -11
- package/dist/inspector/componentSemantics/ComponentPropsSection.d.ts +8 -0
- package/dist/inspector/componentSemantics/ComponentPropsSection.js +12 -8
- package/dist/inspector/componentSemantics/adapterRegistry.d.ts +2 -9
- package/dist/inspector/componentSemantics/adapterRegistry.js +2 -9
- package/dist/inspector/componentSemantics/changeAction.js +1 -1
- package/dist/inspector/componentSemantics/changeModel.js +2 -4
- package/dist/inspector/componentSemantics/react/callsites.d.ts +28 -0
- package/dist/inspector/componentSemantics/react/callsites.js +261 -0
- package/dist/inspector/componentSemantics/react/devtoolsHook.d.ts +23 -0
- package/dist/inspector/componentSemantics/react/devtoolsHook.js +71 -0
- package/dist/inspector/componentSemantics/react/fibers.d.ts +17 -0
- package/dist/inspector/componentSemantics/react/fibers.js +30 -0
- package/dist/inspector/componentSemantics/{reactRuntime.d.ts → react/runtime.d.ts} +3 -2
- package/dist/inspector/componentSemantics/{reactRuntime.js → react/runtime.js} +70 -53
- package/dist/inspector/componentSemantics/runtimeBridge.d.ts +2 -18
- package/dist/inspector/componentSemantics/runtimeBridge.js +5 -19
- package/dist/inspector/componentSemantics/textBinding.d.ts +2 -11
- package/dist/inspector/componentSemantics/textBinding.js +20 -87
- package/dist/inspector/componentSemantics/types.d.ts +8 -27
- package/dist/inspector/componentSemantics/types.js +0 -1
- package/dist/inspector/conformance/borderCases.d.ts +0 -5
- package/dist/inspector/conformance/borderCases.js +0 -5
- package/dist/inspector/conformance/colorCases.d.ts +0 -6
- package/dist/inspector/conformance/colorCases.js +0 -6
- package/dist/inspector/conformance/fixture.d.ts +1 -5
- package/dist/inspector/conformance/fixture.js +1 -5
- package/dist/inspector/conformance/spacingCases.d.ts +0 -4
- package/dist/inspector/conformance/spacingCases.js +0 -4
- package/dist/inspector/conformance/typographyCases.d.ts +0 -5
- package/dist/inspector/conformance/typographyCases.js +0 -5
- package/dist/inspector/drafts/draftStore.d.ts +95 -0
- package/dist/inspector/drafts/draftStore.js +461 -0
- package/dist/inspector/drafts/model.d.ts +14 -14
- package/dist/inspector/drafts/model.js +4 -2
- package/dist/inspector/drafts/store.d.ts +47 -16
- package/dist/inspector/drafts/store.js +137 -170
- package/dist/inspector/editScope.d.ts +0 -1
- package/dist/inspector/editScope.js +0 -1
- package/dist/inspector/index.d.ts +2 -4
- package/dist/inspector/index.js +2 -264
- package/dist/inspector/inline-text/inlineTextDiagnostics.d.ts +0 -2
- package/dist/inspector/inline-text/inlineTextDiagnostics.js +0 -2
- package/dist/inspector/inline-text/inlineTextEditor.d.ts +3 -9
- package/dist/inspector/inline-text/inlineTextEditor.js +27 -81
- package/dist/inspector/inline-text/inlineTextLifecycle.js +1 -6
- package/dist/inspector/inline-text/textEditChange.d.ts +1 -2
- package/dist/inspector/inspection/bridge.d.ts +3 -7
- package/dist/inspector/inspection/bridge.js +6 -13
- package/dist/inspector/inspection/browserCssInspection.d.ts +12 -11
- package/dist/inspector/inspection/browserCssInspection.js +32 -14
- package/dist/inspector/inspection/browserCssInspectionRegistry.d.ts +0 -7
- package/dist/inspector/inspection/browserCssInspectionRegistry.js +1 -16
- package/dist/inspector/inspection/inspectionSnapshot.d.ts +6 -0
- package/dist/inspector/inspection/inspectionSnapshot.js +10 -0
- package/dist/inspector/inspection/performanceDiagnostics.d.ts +18 -0
- package/dist/inspector/inspection/performanceDiagnostics.js +31 -0
- package/dist/inspector/inspection/selectionProperty.d.ts +1 -6
- package/dist/inspector/inspection/selectionProperty.js +1 -5
- package/dist/inspector/inspection/useBrowserCssInspection.d.ts +1 -5
- package/dist/inspector/inspection/useBrowserCssInspection.js +22 -59
- package/dist/inspector/iterations/capture.d.ts +2 -2
- package/dist/inspector/iterations/capture.js +4 -9
- package/dist/inspector/iterations/client.d.ts +2 -2
- package/dist/inspector/iterations/client.js +0 -1
- package/dist/inspector/iterations/coordinator.d.ts +4 -4
- package/dist/inspector/iterations/coordinator.js +5 -4
- package/dist/inspector/iterations/prompt.d.ts +0 -1
- package/dist/inspector/iterations/prompt.js +9 -9
- package/dist/inspector/overlay/DomNavigator.d.ts +3 -1
- package/dist/inspector/overlay/DomNavigator.js +39 -15
- package/dist/inspector/overlay/DropGuideOverlay.d.ts +0 -1
- package/dist/inspector/overlay/DropGuideOverlay.js +0 -1
- package/dist/inspector/overlay/MeasurementGuideOverlay.d.ts +1 -8
- package/dist/inspector/overlay/MeasurementGuideOverlay.js +1 -5
- package/dist/inspector/overlay/clickPolicy.d.ts +3 -14
- package/dist/inspector/overlay/clickPolicy.js +3 -14
- package/dist/inspector/overlay/dropGuide.d.ts +0 -3
- package/dist/inspector/overlay/dropGuide.js +0 -3
- package/dist/inspector/overlay/frameThrottle.d.ts +0 -1
- package/dist/inspector/overlay/frameThrottle.js +0 -1
- package/dist/inspector/overlay/interactionStyles.d.ts +1 -1
- package/dist/inspector/overlay/interactionStyles.js +19 -8
- package/dist/inspector/overlay/measurementGeometry.js +4 -12
- package/dist/inspector/overlay/selectedGeometry.d.ts +1 -6
- package/dist/inspector/overlay/selectedGeometry.js +1 -8
- package/dist/inspector/overlay/spacingGestures.d.ts +14 -21
- package/dist/inspector/overlay/spacingGestures.js +151 -31
- package/dist/inspector/overlay/structuralGestures.d.ts +2 -9
- package/dist/inspector/overlay/structuralGestures.js +1 -4
- package/dist/inspector/pageInspector.d.ts +33 -0
- package/dist/inspector/pageInspector.js +335 -0
- package/dist/inspector/projection/cssEscapes.d.ts +0 -1
- package/dist/inspector/projection/cssEscapes.js +2 -4
- package/dist/inspector/projection/draftProjection.d.ts +6 -10
- package/dist/inspector/projection/draftProjection.js +8 -7
- package/dist/inspector/projection/managedStylesheet.d.ts +1 -7
- package/dist/inspector/projection/managedStylesheet.js +28 -26
- package/dist/inspector/projection/renderedInstance.d.ts +5 -28
- package/dist/inspector/projection/renderedInstance.js +13 -33
- package/dist/inspector/projection/structuralProjection.d.ts +7 -48
- package/dist/inspector/projection/structuralProjection.js +31 -96
- package/dist/inspector/projection/textProjection.d.ts +7 -13
- package/dist/inspector/projection/textProjection.js +35 -80
- package/dist/inspector/prompt/PromptSettingsDialog.d.ts +0 -1
- package/dist/inspector/prompt/PromptSettingsDialog.js +0 -1
- package/dist/inspector/prompt/clipboardHandoff.d.ts +1 -0
- package/dist/inspector/prompt/clipboardHandoff.js +34 -16
- package/dist/inspector/prompt/generatePrompt.d.ts +2 -2
- package/dist/inspector/prompt/generatePrompt.js +247 -166
- package/dist/inspector/prompt/promptDocument.d.ts +3 -0
- package/dist/inspector/prompt/promptDocument.js +8 -0
- package/dist/inspector/prompt/promptSettings.d.ts +0 -3
- package/dist/inspector/prompt/promptSettings.js +7 -8
- package/dist/inspector/runtime/devFlag.d.ts +2 -25
- package/dist/inspector/runtime/devFlag.js +4 -31
- package/dist/inspector/runtime/documentStylesheetOrder.d.ts +0 -2
- package/dist/inspector/runtime/editorShell.d.ts +0 -1
- package/dist/inspector/runtime/editorShell.js +0 -1
- package/dist/inspector/runtime/inspectorStorage.d.ts +11 -0
- package/dist/inspector/runtime/inspectorStorage.js +37 -0
- package/dist/inspector/runtime/ownedStylesheets.d.ts +14 -0
- package/dist/inspector/runtime/ownedStylesheets.js +66 -0
- package/dist/inspector/runtime/runtimeConfig.d.ts +14 -84
- package/dist/inspector/runtime/runtimeConfig.js +18 -50
- package/dist/inspector/runtime/runtimeIdentityClaims.d.ts +19 -0
- package/dist/inspector/runtime/runtimeIdentityClaims.js +178 -0
- package/dist/inspector/runtime/staticHtmlRuntimeIdentity.d.ts +6 -23
- package/dist/inspector/runtime/staticHtmlRuntimeIdentity.js +103 -52
- package/dist/inspector/runtime/useRuntimeConfig.d.ts +1 -8
- package/dist/inspector/runtime/useRuntimeConfig.js +1 -8
- package/dist/inspector/selection/editScope.d.ts +2 -7
- package/dist/inspector/selection/editScope.js +15 -14
- package/dist/inspector/selection/editTarget.d.ts +1 -5
- package/dist/inspector/selection/hierarchy.d.ts +11 -11
- package/dist/inspector/selection/hierarchy.js +42 -24
- package/dist/inspector/selection/selectionStore.d.ts +0 -3
- package/dist/inspector/selection/selectionStore.js +5 -16
- package/dist/inspector/selection/sourceSite.d.ts +1 -5
- package/dist/inspector/selection/sourceSite.js +2 -8
- package/dist/inspector/selection/styleSelection.d.ts +1 -5
- package/dist/inspector/selection/styleSelection.js +1 -5
- package/dist/inspector/session/lifecycle.d.ts +1 -9
- package/dist/inspector/session/lifecycle.js +0 -1
- package/dist/inspector/session/sessionContext.d.ts +0 -4
- package/dist/inspector/session/sessionContext.js +0 -4
- package/dist/inspector/session/sessionFactory.d.ts +0 -9
- package/dist/inspector/session/sessionFactory.js +0 -6
- package/dist/inspector/settings/SettingsDialog.d.ts +0 -1
- package/dist/inspector/settings/SettingsDialog.js +5 -3
- package/dist/inspector/shell/AgentStatusButton.d.ts +3 -2
- package/dist/inspector/shell/AgentStatusButton.js +7 -7
- package/dist/inspector/shell/AppShell.js +6 -2
- package/dist/inspector/shell/ChangesLog.js +29 -12
- package/dist/inspector/shell/CopyPromptButton.d.ts +2 -1
- package/dist/inspector/shell/CopyPromptButton.js +62 -55
- package/dist/inspector/shell/EmptyState.js +3 -3
- package/dist/inspector/shell/InspectorEditors.d.ts +16 -0
- package/dist/inspector/shell/InspectorEditors.js +14 -0
- package/dist/inspector/shell/InspectorPanel.d.ts +12 -0
- package/dist/inspector/shell/InspectorPanel.js +8 -0
- package/dist/inspector/shell/InspectorSelection.d.ts +24 -0
- package/dist/inspector/shell/InspectorSelection.js +20 -0
- package/dist/inspector/shell/InspectorShell.d.ts +0 -3
- package/dist/inspector/shell/InspectorShell.js +44 -58
- package/dist/inspector/shell/NudgeLogoIcon.d.ts +5 -0
- package/dist/inspector/shell/NudgeLogoIcon.js +5 -0
- package/dist/inspector/shell/PeekOriginalButton.d.ts +0 -5
- package/dist/inspector/shell/PeekOriginalButton.js +3 -8
- package/dist/inspector/shell/PeekOriginalIcon.d.ts +0 -5
- package/dist/inspector/shell/PeekOriginalIcon.js +0 -5
- package/dist/inspector/shell/PromptActionButton.d.ts +21 -0
- package/dist/inspector/shell/PromptActionButton.js +14 -0
- package/dist/inspector/shell/elementName.d.ts +5 -0
- package/dist/inspector/shell/elementName.js +29 -0
- package/dist/inspector/shell/interactionStatePreview.d.ts +6 -0
- package/dist/inspector/shell/interactionStatePreview.js +107 -0
- package/dist/inspector/shell/originalPreview.d.ts +1 -5
- package/dist/inspector/shell/originalPreview.js +5 -37
- package/dist/inspector/shell/stateValue.d.ts +1 -2
- package/dist/inspector/shell/stateValue.js +4 -8
- package/dist/inspector/shell/styleState.d.ts +1 -2
- package/dist/inspector/shell/styleState.js +1 -2
- package/dist/inspector/sketch/SketchEditor.js +5 -5
- package/dist/inspector/sketch/SketchFrameOverlay.d.ts +2 -1
- package/dist/inspector/sketch/SketchFrameOverlay.js +13 -16
- package/dist/inspector/sketch/SketchOverlay.d.ts +3 -5
- package/dist/inspector/sketch/SketchOverlay.js +138 -263
- package/dist/inspector/sketch/SketchPromptPanel.d.ts +1 -2
- package/dist/inspector/sketch/SketchPromptPanel.js +8 -2
- package/dist/inspector/sketch/SketchThumbnail.d.ts +5 -0
- package/dist/inspector/sketch/SketchThumbnail.js +18 -0
- package/dist/inspector/sketch/SketchWorkspace.d.ts +1 -2
- package/dist/inspector/sketch/SketchWorkspace.js +70 -37
- package/dist/inspector/sketch/capture.d.ts +12 -3
- package/dist/inspector/sketch/capture.js +31 -14
- package/dist/inspector/sketch/copySketch.d.ts +4 -0
- package/dist/inspector/sketch/copySketch.js +43 -0
- package/dist/inspector/sketch/drawingTools.d.ts +15 -0
- package/dist/inspector/sketch/drawingTools.js +46 -0
- package/dist/inspector/sketch/frameHeading.d.ts +3 -0
- package/dist/inspector/sketch/frameHeading.js +23 -0
- package/dist/inspector/sketch/freehand.d.ts +0 -1
- package/dist/inspector/sketch/freehand.js +3 -4
- package/dist/inspector/sketch/geometry.d.ts +2 -1
- package/dist/inspector/sketch/geometry.js +15 -1
- package/dist/inspector/sketch/handoff.js +0 -1
- package/dist/inspector/sketch/history.d.ts +26 -0
- package/dist/inspector/sketch/history.js +55 -0
- package/dist/inspector/sketch/interaction.d.ts +3 -5
- package/dist/inspector/sketch/interaction.js +8 -11
- package/dist/inspector/sketch/model.d.ts +33 -6
- package/dist/inspector/sketch/model.js +101 -63
- package/dist/inspector/sketch/persistence.d.ts +14 -1
- package/dist/inspector/sketch/persistence.js +64 -8
- package/dist/inspector/sketch/raster.d.ts +3 -2
- package/dist/inspector/sketch/raster.js +40 -20
- package/dist/inspector/sketch/store.d.ts +1 -1
- package/dist/inspector/sketch/store.js +3 -4
- package/dist/inspector/sketch/videoFrames.d.ts +6 -0
- package/dist/inspector/sketch/videoFrames.js +80 -0
- package/dist/inspector/spacing/projection.d.ts +0 -8
- package/dist/inspector/spacing/projection.js +38 -20
- package/dist/inspector/styleEditors/BackgroundEditor.js +3 -2
- package/dist/inspector/styleEditors/BorderEditor.js +30 -135
- package/dist/inspector/styleEditors/BorderRadiusEditor.js +8 -3
- package/dist/inspector/styleEditors/ChildPlacement.d.ts +12 -0
- package/dist/inspector/styleEditors/ChildPlacement.js +9 -0
- package/dist/inspector/styleEditors/FlexControls.d.ts +35 -0
- package/dist/inspector/styleEditors/FlexControls.js +158 -0
- package/dist/inspector/styleEditors/GapField.d.ts +5 -2
- package/dist/inspector/styleEditors/GapField.js +3 -4
- package/dist/inspector/styleEditors/GridChildSection.d.ts +0 -5
- package/dist/inspector/styleEditors/GridChildSection.js +0 -5
- package/dist/inspector/styleEditors/GridPicker.d.ts +1 -1
- package/dist/inspector/styleEditors/GridPicker.js +2 -4
- package/dist/inspector/styleEditors/GridSection.d.ts +10 -8
- package/dist/inspector/styleEditors/GridSection.js +22 -9
- package/dist/inspector/styleEditors/GridValueField.d.ts +1 -5
- package/dist/inspector/styleEditors/GridValueField.js +2 -8
- package/dist/inspector/styleEditors/ImageBackgroundEditor.d.ts +0 -1
- package/dist/inspector/styleEditors/ImageBackgroundEditor.js +1 -2
- package/dist/inspector/styleEditors/LayoutBlockedIndicator.d.ts +0 -1
- package/dist/inspector/styleEditors/LayoutBlockedIndicator.js +0 -1
- package/dist/inspector/styleEditors/LayoutComboField.js +0 -5
- package/dist/inspector/styleEditors/LayoutModeRow.d.ts +14 -0
- package/dist/inspector/styleEditors/LayoutModeRow.js +60 -0
- package/dist/inspector/styleEditors/LayoutSection.d.ts +2 -2
- package/dist/inspector/styleEditors/LayoutSection.js +30 -356
- package/dist/inspector/styleEditors/OpacityEditor.js +7 -5
- package/dist/inspector/styleEditors/PositionControls.d.ts +18 -0
- package/dist/inspector/styleEditors/PositionControls.js +16 -0
- package/dist/inspector/styleEditors/SizeSection.d.ts +18 -0
- package/dist/inspector/styleEditors/SizeSection.js +71 -0
- package/dist/inspector/styleEditors/{SpacingBox.d.ts → SpacingField.d.ts} +3 -10
- package/dist/inspector/styleEditors/{SpacingBox.js → SpacingField.js} +15 -29
- package/dist/inspector/styleEditors/Typography.js +2 -4
- package/dist/inspector/styleEditors/borderModel.d.ts +36 -0
- package/dist/inspector/styleEditors/borderModel.js +105 -0
- package/dist/inspector/styleEditors/completeCssValue.d.ts +1 -5
- package/dist/inspector/styleEditors/completeCssValue.js +3 -13
- package/dist/inspector/styleEditors/fieldValue.d.ts +20 -0
- package/dist/inspector/styleEditors/fieldValue.js +26 -0
- package/dist/inspector/styleEditors/gradientValue.d.ts +1 -1
- package/dist/inspector/styleEditors/gradientValue.js +3 -2
- package/dist/inspector/styleEditors/gridChildModel.d.ts +7 -47
- package/dist/inspector/styleEditors/gridChildModel.js +6 -37
- package/dist/inspector/styleEditors/hiddenSizeOverrides.d.ts +5 -0
- package/dist/inspector/styleEditors/hiddenSizeOverrides.js +42 -0
- package/dist/inspector/styleEditors/inlineAuthored.d.ts +1 -8
- package/dist/inspector/styleEditors/inlineAuthored.js +3 -17
- package/dist/inspector/styleEditors/layoutMode.d.ts +15 -0
- package/dist/inspector/styleEditors/layoutMode.js +33 -0
- package/dist/inspector/styleEditors/layoutPreviewState.d.ts +0 -1
- package/dist/inspector/styleEditors/layoutPreviewState.js +0 -1
- package/dist/inspector/styleEditors/layoutValue.d.ts +2 -8
- package/dist/inspector/styleEditors/layoutValue.js +6 -15
- package/dist/inspector/styleEditors/nudgeValue.d.ts +1 -13
- package/dist/inspector/styleEditors/nudgeValue.js +1 -13
- package/dist/inspector/styleEditors/rowLookup.d.ts +1 -5
- package/dist/inspector/styleEditors/rowLookup.js +1 -5
- package/dist/inspector/styleEditors/stringRecord.d.ts +1 -2
- package/dist/inspector/styleEditors/stylePresence.d.ts +0 -2
- package/dist/inspector/styleEditors/stylePresence.js +1 -4
- package/dist/inspector/styleEditors/textRelevance.d.ts +1 -1
- package/dist/inspector/styleEditors/textRelevance.js +1 -1
- package/dist/inspector/styleEditors/useFieldVisibility.js +1 -2
- package/dist/inspector/styleEditors/useLayoutContext.d.ts +13 -0
- package/dist/inspector/styleEditors/useLayoutContext.js +53 -0
- package/dist/inspector/styleEditors/valuePolicy.d.ts +1 -5
- package/dist/inspector/styleEditors/valuePolicy.js +0 -1
- package/dist/inspector/testing.d.ts +1 -4
- package/dist/inspector/testing.js +1 -4
- package/dist/inspector/tokens/TokenChip.d.ts +1 -4
- package/dist/inspector/tokens/TokenChip.js +1 -4
- package/dist/inspector/tokens/TokenField.d.ts +4 -3
- package/dist/inspector/tokens/TokenField.js +53 -32
- package/dist/inspector/tokens/TokensPanel.js +2 -1
- package/dist/inspector/tokens/catalog.d.ts +2 -10
- package/dist/inspector/tokens/catalog.js +5 -12
- package/dist/inspector/tokens/dragPointerLock.d.ts +0 -1
- package/dist/inspector/tokens/dragPointerLock.js +2 -3
- package/dist/inspector/tokens/editActions.d.ts +4 -4
- package/dist/inspector/tokens/editActions.js +11 -7
- package/dist/inspector/tokens/resolution/cascade.d.ts +1 -5
- package/dist/inspector/tokens/resolution/cascade.js +1 -5
- package/dist/inspector/tokens/resolution/containerQueryEvaluator.d.ts +11 -0
- package/dist/inspector/tokens/resolution/containerQueryEvaluator.js +82 -0
- package/dist/inspector/tokens/resolution/cssomCollector.d.ts +4 -19
- package/dist/inspector/tokens/resolution/cssomCollector.js +186 -122
- package/dist/inspector/tokens/resolution/nestedSelectors.d.ts +2 -0
- package/dist/inspector/tokens/resolution/nestedSelectors.js +63 -0
- package/dist/inspector/tokens/resolution/ruleMatching.d.ts +4 -14
- package/dist/inspector/tokens/resolution/ruleMatching.js +136 -63
- package/dist/inspector/tokens/resolution/selectorSemantics.d.ts +3 -14
- package/dist/inspector/tokens/resolution/selectorSemantics.js +12 -27
- package/dist/inspector/tokens/resolution.d.ts +11 -27
- package/dist/inspector/tokens/resolution.js +105 -181
- package/dist/inspector/tokens/tokenAvailability.d.ts +2 -14
- package/dist/inspector/tokens/tokenAvailability.js +6 -38
- package/dist/inspector/tokens/tokenEdits.d.ts +1 -1
- package/dist/inspector/tokens/tokenEdits.js +1 -1
- package/dist/inspector/tokens/valueSemanticsAdapter.d.ts +0 -1
- package/dist/inspector/tokens/valueSemanticsAdapter.js +18 -2
- package/dist/inspector/ui/AtRuleContext.d.ts +5 -5
- package/dist/inspector/ui/AtRuleContext.js +8 -6
- package/dist/inspector/ui/ControlSurface.d.ts +0 -4
- package/dist/inspector/ui/Disclosure.d.ts +0 -5
- package/dist/inspector/ui/Disclosure.js +0 -4
- package/dist/inspector/ui/InlineStyleWarning.d.ts +0 -1
- package/dist/inspector/ui/InlineStyleWarning.js +2 -2
- package/dist/inspector/ui/InspectorPopover.d.ts +1 -5
- package/dist/inspector/ui/InspectorPopover.js +1 -5
- package/dist/inspector/ui/InspectorStyle.d.ts +8 -0
- package/dist/inspector/ui/InspectorStyle.js +26 -0
- package/dist/inspector/ui/PopoverListbox.d.ts +2 -1
- package/dist/inspector/ui/PopoverListbox.js +3 -3
- package/dist/inspector/ui/SegmentedControl.d.ts +4 -4
- package/dist/inspector/ui/SegmentedControl.js +6 -4
- package/dist/inspector/ui/SideValuesField.d.ts +1 -6
- package/dist/inspector/ui/SideValuesField.js +2 -8
- package/dist/inspector/ui/Toast.d.ts +10 -0
- package/dist/inspector/ui/Toast.js +26 -0
- package/dist/inspector/ui/assets/canvasIllustration.d.ts +2 -0
- package/dist/inspector/ui/assets/canvasIllustration.js +21 -0
- package/dist/inspector/ui/assets/gridIllustration.d.ts +2 -0
- package/dist/inspector/ui/assets/{grid.svg → gridIllustration.js} +3 -2
- package/dist/inspector/ui/atRuleSegments.d.ts +13 -0
- package/dist/inspector/ui/atRuleSegments.js +34 -0
- package/dist/inspector/ui/classNames.d.ts +0 -1
- package/dist/inspector/ui/classNames.js +0 -1
- package/dist/inspector/ui/customCursors.d.ts +11 -0
- package/dist/inspector/ui/customCursors.js +29 -7
- package/dist/inspector/ui/styles.js +25 -25
- package/dist/inspector/workspace/commands.js +1 -2
- package/dist/inspector/workspace/controller.js +20 -2
- package/dist/inspector/workspace/handoff.d.ts +1 -5
- package/dist/inspector/workspace/handoff.js +4 -7
- package/dist/inspector/workspace/sentItems.d.ts +3 -6
- package/dist/inspector/workspace/sentItems.js +6 -24
- package/dist/inspector/workspace/timeline.d.ts +28 -11
- package/dist/inspector/workspace/timeline.js +117 -96
- package/dist/internal/agent-protocol.d.ts +53 -38
- package/dist/internal/agent-protocol.js +151 -42
- package/dist/nudge-ui.mjs +155 -92
- package/dist/project/artifacts.js +24 -21
- package/dist/project/files.d.ts +0 -1
- package/dist/project/files.js +2 -9
- package/dist/project/identity.d.ts +1 -5
- package/dist/project/identity.js +1 -5
- package/dist/project/mcpPackage.d.ts +3 -0
- package/dist/project/mcpPackage.js +55 -0
- package/dist/project/pathPolicy.d.ts +1 -6
- package/dist/project/pathPolicy.js +1 -6
- package/dist/project/tokens.d.ts +2 -12
- package/dist/project/tokens.js +4 -15
- package/dist/transport/editor.d.ts +1 -12
- package/dist/transport/editor.js +2 -13
- package/dist/transport/index.d.ts +0 -5
- package/dist/transport/index.js +0 -5
- package/dist/transport/routes.d.ts +0 -5
- package/dist/transport/routes.js +0 -5
- package/package.json +16 -5
- package/dist/inspector/canvas/measurementProjection.d.ts +0 -8
- package/dist/inspector/canvas/measurementProjection.js +0 -16
- package/dist/inspector/changes/changesLog.d.ts +0 -49
- package/dist/inspector/changes/changesLog.js +0 -255
- package/dist/inspector/changes/draftChanges.d.ts +0 -58
- package/dist/inspector/changes/draftChanges.js +0 -304
- package/dist/inspector/conformance/projection.d.ts +0 -2
- package/dist/inspector/conformance/projection.js +0 -3
- package/dist/inspector/inline-text/textChangeBoundary.d.ts +0 -6
- package/dist/inspector/inline-text/textChangeBoundary.js +0 -1
- package/dist/inspector/overlay/InspectorOverlay.d.ts +0 -5
- package/dist/inspector/overlay/InspectorOverlay.js +0 -332
- package/dist/inspector/overlay/elementSelector.d.ts +0 -1
- package/dist/inspector/overlay/elementSelector.js +0 -111
- package/dist/inspector/sketch/SketchChanges.d.ts +0 -2
- package/dist/inspector/sketch/SketchChanges.js +0 -72
- package/dist/inspector/sketch/SketchEntryButton.d.ts +0 -4
- package/dist/inspector/sketch/SketchEntryButton.js +0 -11
- package/dist/inspector/sketch/SketchLayersPanel.d.ts +0 -2
- package/dist/inspector/sketch/SketchLayersPanel.js +0 -71
- package/dist/inspector/styleEditors/InsetSection.d.ts +0 -15
- package/dist/inspector/styleEditors/InsetSection.js +0 -15
- package/dist/inspector/styleEditors/PositionInsets.d.ts +0 -15
- package/dist/inspector/styleEditors/PositionInsets.js +0 -12
- package/dist/inspector/tokens/TokenDropdown.d.ts +0 -13
- package/dist/inspector/tokens/TokenDropdown.js +0 -59
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useEffect, useLayoutEffect, useMemo, useReducer, useRef, useState } from "react";
|
|
3
|
-
import {
|
|
3
|
+
import { isElementClickMessage, isInlineTextIntentMessage } from "./frameProtocol.js";
|
|
4
4
|
import { useCanvasCards } from "./canvasStore.js";
|
|
5
5
|
import { useBoardCamera, useCanvasPresentation, useCanvasPresentationTransitioning, useCanvasLayoutTransitioning, getCanvasLayoutTransitioning, useTemporaryAppInteraction, } from "./viewStore.js";
|
|
6
6
|
import { handleElementClick } from "./rendererSelectionProxy.js";
|
|
7
7
|
import { getSelectedElements, useHierarchy, useSelectedElement, useSelectedElements } from "../selection/selectionStore.js";
|
|
8
8
|
import { readBorderWidths, toRect, } from "../overlay/overlayGeometry.js";
|
|
9
|
-
const overlayStyles = ".canvas-element-overlay {\n position: fixed;\n pointer-events: none;\n z-index: 1;\n background: transparent;\n outline: 1px solid var(--accent);\n outline-offset: -1px;\n}\n\n.canvas-spacing-guide {\n position: fixed;\n z-index: 1;\n border-radius: 999px;\n background: var(--accent);\n outline: none;\n box-shadow: none;\n pointer-events: none;\n}\n\n.canvas-spacing-fill {\n position: fixed;\n z-index: 1;\n pointer-events: none;\n background: rgb(59 130 246 / 14%);\n}\n\n.canvas-spacing-fill[data-kind=\"gap\"] {\n background: rgb(236 72 153 / 14%);\n}\n\n.canvas-spacing-guide[data-kind=\"gap\"] {\n background: #ec4899;\n}\n\n.canvas-spacing-value-badge {\n position: fixed;\n z-index: 2;\n transform: translate(-50%, calc(-100% - var(--space-8)));\n padding: var(--space-4) var(--space-8);\n border-radius: var(--radius-8);\n background: var(--surface-raised-2x);\n box-shadow: var(--shadow-popup);\n color: var(--text-primary);\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n font-weight: 400;\n line-height: 1.4;\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n pointer-events: none;\n}\n\n.canvas-selected-outline {\n position: fixed;\n pointer-events: none;\n z-index: 1;\n outline: 1px solid var(--accent);\n outline-offset: -1px;\n}\n\n.canvas-dom-drop-line {\n z-index: 2147483647;\n border-radius: 999px;\n background: #3b82f6;\n box-shadow: 0 0 0 1px rgb(255 255 255 / 95%), 0 1px 5px rgb(37 99 235 / 72%);\n}\n\n.canvas-dom-drop-line::before,\n.canvas-dom-drop-line::after {\n position: absolute;\n top: 50%;\n width: 8px;\n height: 8px;\n border: 2px solid #ffffff;\n border-radius: 50%;\n background: #2563eb;\n content: \"\";\n transform: translateY(-50%);\n}\n\n.canvas-dom-drop-line::before { left: -3px; }\n.canvas-dom-drop-line::after { right: -3px; }\n\n.canvas-dom-drop-line[data-orientation=\"vertical\"]::before,\n.canvas-dom-drop-line[data-orientation=\"vertical\"]::after {\n left: 50%;\n right: auto;\n transform: translateX(-50%);\n}\n\n.canvas-dom-drop-line[data-orientation=\"vertical\"]::before { top: -3px; }\n.canvas-dom-drop-line[data-orientation=\"vertical\"]::after { top: auto; bottom: -3px; }\n\n.canvas-dom-drop-target {\n z-index: 2147483646;\n box-sizing: border-box;\n border: 1px solid rgb(59 130 246 / 72%);\n border-radius: 4px;\n background: rgb(59 130 246 / 5%);\n}\n";
|
|
9
|
+
const overlayStyles = ".canvas-element-overlay {\n position: fixed;\n pointer-events: none;\n z-index: 1;\n background: transparent;\n outline: 1px solid var(--accent);\n outline-offset: -1px;\n}\n\n.canvas-element-overlay[data-linked=\"true\"] {\n outline-color: var(--linked);\n}\n\n.canvas-spacing-guide {\n position: fixed;\n z-index: 1;\n border-radius: 999px;\n background: var(--accent);\n outline: none;\n box-shadow: none;\n pointer-events: none;\n}\n\n.canvas-spacing-fill {\n position: fixed;\n z-index: 1;\n pointer-events: none;\n background: rgb(59 130 246 / 14%);\n}\n\n.canvas-spacing-fill[data-kind=\"gap\"] {\n background: rgb(236 72 153 / 14%);\n}\n\n.canvas-spacing-guide[data-kind=\"gap\"] {\n background: #ec4899;\n}\n\n.canvas-spacing-fill[data-kind=\"margin\"] {\n background: rgb(239 68 68 / 14%);\n}\n\n.canvas-spacing-guide[data-kind=\"margin\"] {\n background: #ef4444;\n}\n\n.canvas-spacing-value-badge {\n position: fixed;\n z-index: 2;\n transform: translate(-50%, calc(-100% - var(--space-8)));\n padding: var(--space-4) var(--space-8);\n border-radius: var(--radius-8);\n background: var(--surface-raised-2x);\n box-shadow: var(--shadow-popup);\n color: var(--text-primary);\n font-family: var(--font-family);\n font-size: var(--font-size-base);\n font-weight: 400;\n line-height: 1.4;\n font-variant-numeric: tabular-nums;\n white-space: nowrap;\n pointer-events: none;\n}\n\n.canvas-selected-outline {\n position: fixed;\n pointer-events: none;\n z-index: 1;\n outline: 1px solid var(--accent);\n outline-offset: -1px;\n}\n\n.canvas-selected-outline[data-linked=\"true\"] {\n outline-color: var(--linked);\n}\n\n.canvas-linked-outline {\n position: fixed;\n pointer-events: none;\n z-index: 1;\n outline: 1px solid var(--linked);\n outline-offset: -1px;\n opacity: 0.6;\n}\n\n.canvas-dom-drop-line {\n z-index: 2147483647;\n border-radius: 999px;\n background: #3b82f6;\n box-shadow: 0 0 0 1px rgb(255 255 255 / 95%), 0 1px 5px rgb(37 99 235 / 72%);\n}\n\n.canvas-dom-drop-line::before,\n.canvas-dom-drop-line::after {\n position: absolute;\n top: 50%;\n width: 8px;\n height: 8px;\n border: 2px solid #ffffff;\n border-radius: 50%;\n background: #2563eb;\n content: \"\";\n transform: translateY(-50%);\n}\n\n.canvas-dom-drop-line::before { left: -3px; }\n.canvas-dom-drop-line::after { right: -3px; }\n\n.canvas-dom-drop-line[data-orientation=\"vertical\"]::before,\n.canvas-dom-drop-line[data-orientation=\"vertical\"]::after {\n left: 50%;\n right: auto;\n transform: translateX(-50%);\n}\n\n.canvas-dom-drop-line[data-orientation=\"vertical\"]::before { top: -3px; }\n.canvas-dom-drop-line[data-orientation=\"vertical\"]::after { top: auto; bottom: -3px; }\n\n.canvas-dom-drop-target {\n z-index: 2147483646;\n box-sizing: border-box;\n border: 1px solid rgb(59 130 246 / 72%);\n border-radius: 4px;\n background: rgb(59 130 246 / 5%);\n}\n";
|
|
10
10
|
import { deleteElement, getDropLocationAtPoint, moveElement, nudgeElement } from "../overlay/structuralGestures.js";
|
|
11
11
|
import { changeKey } from "../changes/model.js";
|
|
12
|
-
import {
|
|
12
|
+
import { getActiveDraftChanges, redo, subscribeActiveDraftChanges, undo } from "../drafts/store.js";
|
|
13
13
|
import { resolveSelectionFromElement } from "../selection/resolveSelection.js";
|
|
14
14
|
import { setSelectedElement } from "../selection/selectionStore.js";
|
|
15
15
|
import { clearDropGuide, showDropGuide, useDropGuide } from "../overlay/dropGuide.js";
|
|
@@ -17,10 +17,12 @@ import { DropGuideOverlay } from "../overlay/DropGuideOverlay.js";
|
|
|
17
17
|
import { getMeasurementGeometry } from "../overlay/measurementGeometry.js";
|
|
18
18
|
import { getElementComputedStyle } from "../runtime/domRealm.js";
|
|
19
19
|
import { MeasurementGuideOverlay } from "../overlay/MeasurementGuideOverlay.js";
|
|
20
|
-
import {
|
|
21
|
-
import {
|
|
20
|
+
import { findCanvasFrameByDocument, getRegisteredFrames } from "./projection.js";
|
|
21
|
+
import { connectFrame, measureFrameViewport, toViewportPoint, toViewportRect } from "./frameConnection.js";
|
|
22
22
|
import { RENDERER_ELEMENT_ID_ATTR } from "./rendererCidIndex.js";
|
|
23
23
|
import { observeSelectedGeometry } from "../overlay/selectedGeometry.js";
|
|
24
|
+
import { getEditScope, sourceSiteSelector } from "../selection/editScope.js";
|
|
25
|
+
import { useComponentProps } from "../componentSemantics/ComponentPropsSection.js";
|
|
24
26
|
import { handleInlineTextEditIntent, useInlineTextSession } from "../inline-text/inlineTextEditor.js";
|
|
25
27
|
import { setInspectorOpen, toggleInspector } from "../shell/openStore.js";
|
|
26
28
|
import { EMPTY_TEXT_PROJECTION_ATTR } from "../projection/textProjection.js";
|
|
@@ -30,21 +32,15 @@ import { getSpacingAffordanceAtPoint, getSpacingAffordanceForDescriptor, getSpac
|
|
|
30
32
|
import { beginLayoutPreview, endLayoutPreview } from "../styleEditors/layoutPreviewState.js";
|
|
31
33
|
import { useNudgeUiRuntimeConfig } from "../runtime/useRuntimeConfig.js";
|
|
32
34
|
import { DomNavigator } from "../overlay/DomNavigator.js";
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
function projectPoint(iframe, x, y, zoom) {
|
|
43
|
-
const frameRect = iframe.getBoundingClientRect();
|
|
44
|
-
return {
|
|
45
|
-
x: frameRect.left + x * zoom,
|
|
46
|
-
y: frameRect.top + y * zoom,
|
|
47
|
-
};
|
|
35
|
+
import { InspectorStyle } from "../ui/InspectorStyle.js";
|
|
36
|
+
/** An element that is already the only selection keeps its record; re-resolving can differ only in derived metadata. */
|
|
37
|
+
function selectGestureElement(element) {
|
|
38
|
+
const current = getSelectedElements();
|
|
39
|
+
if (current.length === 1 && current[0].domElement === element)
|
|
40
|
+
return;
|
|
41
|
+
const selected = resolveSelectionFromElement(element);
|
|
42
|
+
if (selected)
|
|
43
|
+
setSelectedElement(selected);
|
|
48
44
|
}
|
|
49
45
|
function spacingBadgeForDrag(drag, point) {
|
|
50
46
|
return {
|
|
@@ -74,40 +70,18 @@ function spacingGuideStyle(rect) {
|
|
|
74
70
|
height,
|
|
75
71
|
});
|
|
76
72
|
}
|
|
77
|
-
function
|
|
78
|
-
const
|
|
79
|
-
if (!
|
|
80
|
-
return null;
|
|
81
|
-
if (!/^r\d+$/.test(elementId))
|
|
82
|
-
return null;
|
|
83
|
-
const candidates = doc.querySelectorAll(`[${RENDERER_ELEMENT_ID_ATTR}="${elementId}"]`);
|
|
84
|
-
if (candidates.length !== 1)
|
|
85
|
-
return null;
|
|
86
|
-
const candidate = candidates[0] ?? null;
|
|
87
|
-
if (!candidate
|
|
88
|
-
|| candidate.getAttribute("data-cid") !== cid
|
|
89
|
-
|| (candidate.getAttribute("data-src") ?? "") !== src)
|
|
73
|
+
function projectGuideToCanvas(guide) {
|
|
74
|
+
const iframe = findCanvasFrameByDocument(guide?.document);
|
|
75
|
+
if (!guide || !iframe)
|
|
90
76
|
return null;
|
|
91
|
-
const
|
|
92
|
-
return frameWindow && candidate instanceof frameWindow.HTMLElement ? candidate : null;
|
|
93
|
-
}
|
|
94
|
-
function projectGuideToCanvas(guide, zoom) {
|
|
95
|
-
if (!guide)
|
|
96
|
-
return null;
|
|
97
|
-
const iframe = guide.document.defaultView?.frameElement;
|
|
98
|
-
if (!(iframe instanceof HTMLIFrameElement))
|
|
99
|
-
return null;
|
|
100
|
-
const iframeRect = iframe.getBoundingClientRect();
|
|
101
|
-
const project = (rect, scaleWidth, scaleHeight) => ({
|
|
102
|
-
left: iframeRect.left + rect.left * zoom,
|
|
103
|
-
top: iframeRect.top + rect.top * zoom,
|
|
104
|
-
width: scaleWidth ? rect.width * zoom : rect.width,
|
|
105
|
-
height: scaleHeight ? rect.height * zoom : rect.height,
|
|
106
|
-
});
|
|
77
|
+
const viewport = measureFrameViewport(iframe);
|
|
107
78
|
return {
|
|
108
79
|
orientation: guide.orientation,
|
|
109
|
-
line:
|
|
110
|
-
|
|
80
|
+
line: toViewportRect(viewport, guide.line, {
|
|
81
|
+
width: guide.orientation === "horizontal",
|
|
82
|
+
height: guide.orientation === "vertical",
|
|
83
|
+
}),
|
|
84
|
+
target: toViewportRect(viewport, guide.target),
|
|
111
85
|
};
|
|
112
86
|
}
|
|
113
87
|
function spacingDescriptorMatches(affordance, descriptor) {
|
|
@@ -138,14 +112,7 @@ function restoreSpacingPreview(drag) {
|
|
|
138
112
|
}
|
|
139
113
|
endLayoutPreview(drag.element, drag.affordance.property);
|
|
140
114
|
}
|
|
141
|
-
/**
|
|
142
|
-
* Commits a managed rule for the drag's final value. Returns the created change
|
|
143
|
-
* records (empty for a no-op drag). The preview inline is intentionally left
|
|
144
|
-
* applied at the committed value once a record exists; the caller must register
|
|
145
|
-
* a PendingSpacingCommit and release it after the renderer acknowledges the
|
|
146
|
-
* projected sheet. Restoring the authored declaration first would flash the old
|
|
147
|
-
* value for the postMessage round trip the sheet takes.
|
|
148
|
-
*/
|
|
115
|
+
/** On a real change the preview inline stays applied; the caller must register a PendingSpacingCommit. */
|
|
149
116
|
function commitSpacingDrag(drag) {
|
|
150
117
|
if (drag.currentValue === drag.startValue) {
|
|
151
118
|
restoreSpacingPreview(drag);
|
|
@@ -157,9 +124,7 @@ function commitSpacingDrag(drag) {
|
|
|
157
124
|
oldRawValue: spacingValueCss(drag.startValue),
|
|
158
125
|
}]);
|
|
159
126
|
}
|
|
160
|
-
/** Removes
|
|
161
|
-
* reproduces the committed value; keeps it otherwise and retries on the next
|
|
162
|
-
* projection acknowledgement from that frame. */
|
|
127
|
+
/** Removes the preview inline once the projected sheet alone reproduces the value; retries on the next acknowledgement. */
|
|
163
128
|
function tryReleasePendingSpacingCommit(commit) {
|
|
164
129
|
const { element, property, committedValue } = commit;
|
|
165
130
|
if (!element.isConnected)
|
|
@@ -185,13 +150,11 @@ function releasePendingSpacingCommits(pending, iframe) {
|
|
|
185
150
|
}
|
|
186
151
|
pending.length = write;
|
|
187
152
|
}
|
|
188
|
-
/** Restores
|
|
189
|
-
* or cleared before its sheet landed. Runs synchronously with the workspace
|
|
190
|
-
* change, so the inline never outlives the intent behind it. */
|
|
153
|
+
/** Restores a held preview inline whose committed rule was undone, reverted, or cleared. */
|
|
191
154
|
function reconcilePendingSpacingCommits(pending) {
|
|
192
155
|
if (pending.length === 0)
|
|
193
156
|
return;
|
|
194
|
-
const survivingKeys = new Set(
|
|
157
|
+
const survivingKeys = new Set(getActiveDraftChanges().changes.map(changeKey));
|
|
195
158
|
let write = 0;
|
|
196
159
|
for (const commit of pending) {
|
|
197
160
|
if (commit.keys.some((key) => survivingKeys.has(key))) {
|
|
@@ -210,9 +173,7 @@ function reconcilePendingSpacingCommits(pending) {
|
|
|
210
173
|
}
|
|
211
174
|
pending.length = write;
|
|
212
175
|
}
|
|
213
|
-
/**
|
|
214
|
-
* same element and property into the newest one so the held value and the
|
|
215
|
-
* authored baseline both stay coherent across rapid successive drags. */
|
|
176
|
+
/** Folds an older unapplied commit for the same element and property into the newest one. */
|
|
216
177
|
function pushPendingSpacingCommit(pending, next) {
|
|
217
178
|
const existing = pending.findIndex((commit) => commit.iframe === next.iframe
|
|
218
179
|
&& commit.element === next.element
|
|
@@ -227,15 +188,42 @@ function pushPendingSpacingCommit(pending, next) {
|
|
|
227
188
|
originalInlinePriority: pending[existing].originalInlinePriority,
|
|
228
189
|
};
|
|
229
190
|
}
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
191
|
+
const LINKED_PEER_LIMIT = 200;
|
|
192
|
+
/** Frames the follow loop keeps measuring after outlines stop moving, covering the commit that applies a pan. */
|
|
193
|
+
const OUTLINE_IDLE_FRAMES = 8;
|
|
194
|
+
/** Writes the outline boxes straight to the DOM, so a stale React render cannot win; returns whether any moved. */
|
|
195
|
+
function syncOutlinePositions(frame, outlines) {
|
|
196
|
+
const viewport = measureFrameViewport(frame);
|
|
197
|
+
let moved = false;
|
|
198
|
+
for (const [element, node] of outlines) {
|
|
199
|
+
const rect = toViewportRect(viewport, toRect(element.getBoundingClientRect()));
|
|
200
|
+
const box = `${rect.left}|${rect.top}|${rect.width}|${rect.height}`;
|
|
201
|
+
if (node.dataset.box !== box)
|
|
202
|
+
moved = true;
|
|
203
|
+
node.dataset.box = box;
|
|
204
|
+
node.style.left = `${rect.left}px`;
|
|
205
|
+
node.style.top = `${rect.top}px`;
|
|
206
|
+
node.style.width = `${rect.width}px`;
|
|
207
|
+
node.style.height = `${rect.height}px`;
|
|
208
|
+
}
|
|
209
|
+
return moved;
|
|
210
|
+
}
|
|
211
|
+
function isLinkedElement(element) {
|
|
212
|
+
return element !== null && getEditScope(element) === "source-site" && findLinkedPeers(element).length > 0;
|
|
213
|
+
}
|
|
214
|
+
/** Other elements rendered from the selected element's source site. */
|
|
215
|
+
function findLinkedPeers(element) {
|
|
216
|
+
const selector = sourceSiteSelector(element.getAttribute("data-cid") ?? "", element.getAttribute("data-src") ?? "");
|
|
217
|
+
if (!selector)
|
|
218
|
+
return [];
|
|
219
|
+
try {
|
|
220
|
+
return [...element.ownerDocument.querySelectorAll(selector)]
|
|
221
|
+
.filter((candidate) => candidate !== element)
|
|
222
|
+
.slice(0, LINKED_PEER_LIMIT);
|
|
223
|
+
}
|
|
224
|
+
catch {
|
|
225
|
+
return [];
|
|
226
|
+
}
|
|
239
227
|
}
|
|
240
228
|
export function CanvasElementOverlay() {
|
|
241
229
|
const [hover, setHover] = useState(null);
|
|
@@ -257,10 +245,9 @@ export function CanvasElementOverlay() {
|
|
|
257
245
|
setHover(null);
|
|
258
246
|
setMeasureState(null);
|
|
259
247
|
}, [layoutTransitioning]);
|
|
260
|
-
const projectionZoom = presentation === "focus" ? 1 : camera.zoom;
|
|
261
248
|
const cards = useCanvasCards(); // Projected geometry must follow card drag and resize updates.
|
|
262
249
|
const cardGeometryKey = cards.map((card) => `${card.id}:${card.x}:${card.y}:${card.width}:${card.height}`).join("|");
|
|
263
|
-
const projectionGeometryKey = `${presentation}:${camera.x}:${camera.y}:${
|
|
250
|
+
const projectionGeometryKey = `${presentation}:${camera.x}:${camera.y}:${camera.zoom}:${cardGeometryKey}`;
|
|
264
251
|
const previousProjectionGeometryKey = useRef(projectionGeometryKey);
|
|
265
252
|
const dragRef = useRef(null);
|
|
266
253
|
const spacingDragRef = useRef(null);
|
|
@@ -268,35 +255,38 @@ export function CanvasElementOverlay() {
|
|
|
268
255
|
const [spacingDragBadge, setSpacingDragBadge] = useState(null);
|
|
269
256
|
const measureAltKeyRef = useRef(false);
|
|
270
257
|
const dropGuide = useDropGuide("canvas");
|
|
271
|
-
const projectedDropGuide = projectGuideToCanvas(dropGuide
|
|
272
|
-
const selectedFrame = selected?.domElement.ownerDocument
|
|
273
|
-
const selectedInCanvas = selectedFrame
|
|
274
|
-
&& selectedFrame.hasAttribute("data-nudge-ui-canvas-renderer");
|
|
258
|
+
const projectedDropGuide = projectGuideToCanvas(dropGuide);
|
|
259
|
+
const selectedFrame = findCanvasFrameByDocument(selected?.domElement.ownerDocument);
|
|
260
|
+
const selectedInCanvas = selectedFrame !== null;
|
|
275
261
|
const selectedRects = selectedInCanvas
|
|
276
262
|
? selectedElements.map((candidate) => {
|
|
277
|
-
const frame = candidate.domElement.ownerDocument
|
|
263
|
+
const frame = findCanvasFrameByDocument(candidate.domElement.ownerDocument);
|
|
278
264
|
return frame === selectedFrame ? toRect(candidate.domElement.getBoundingClientRect()) : null;
|
|
279
265
|
})
|
|
280
266
|
: [];
|
|
281
267
|
const selectedPrimaryIndex = selectedElements.findIndex((candidate) => candidate.domElement === selected?.domElement);
|
|
282
268
|
const selectedLocalRect = selectedRects[selectedPrimaryIndex >= 0 ? selectedPrimaryIndex : 0] ?? null;
|
|
283
|
-
const
|
|
284
|
-
|
|
269
|
+
const selectedFrameViewport = selectedInCanvas ? measureFrameViewport(selectedFrame) : null;
|
|
270
|
+
const selectedRect = selectedFrameViewport && selectedLocalRect
|
|
271
|
+
? toViewportRect(selectedFrameViewport, selectedLocalRect)
|
|
285
272
|
: null;
|
|
286
|
-
const
|
|
287
|
-
? projectRect(selectedFrame, selectedLocalRect, projectionZoom)
|
|
288
|
-
: null;
|
|
289
|
-
const projectedSelectedGeometry = selectedInCanvas
|
|
273
|
+
const projectedSelectedGeometry = selectedFrameViewport
|
|
290
274
|
? selectedRects.flatMap((rect, index) => {
|
|
291
275
|
const element = selectedElements[index];
|
|
292
276
|
return rect && element
|
|
293
|
-
? [{ element, rect:
|
|
277
|
+
? [{ element, rect: toViewportRect(selectedFrameViewport, rect) }]
|
|
294
278
|
: [];
|
|
295
279
|
})
|
|
296
280
|
: [];
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
281
|
+
const componentProps = useComponentProps(selectedElements.length === 1 ? selected : null);
|
|
282
|
+
const linkedPeers = selectedInCanvas && selectedElements.length === 1 && selected && getEditScope(selected.domElement) === "source-site"
|
|
283
|
+
? findLinkedPeers(selected.domElement)
|
|
284
|
+
: [];
|
|
285
|
+
const projectedLinkedPeers = selectedFrameViewport
|
|
286
|
+
? linkedPeers.map((peer) => ({ peer, rect: toViewportRect(selectedFrameViewport, toRect(peer.getBoundingClientRect())) }))
|
|
287
|
+
: [];
|
|
288
|
+
const selectionIsLinked = componentProps !== null || linkedPeers.length > 0;
|
|
289
|
+
// Camera transforms commit before iframe viewport geometry is readable; re-render once so overlays use the new frame rect.
|
|
300
290
|
useLayoutEffect(() => {
|
|
301
291
|
const geometryChanged = previousProjectionGeometryKey.current !== projectionGeometryKey;
|
|
302
292
|
previousProjectionGeometryKey.current = projectionGeometryKey;
|
|
@@ -306,17 +296,53 @@ export function CanvasElementOverlay() {
|
|
|
306
296
|
const selectedBorders = selectedInCanvas && selected
|
|
307
297
|
? readBorderWidths(selected.domElement)
|
|
308
298
|
: null;
|
|
299
|
+
const outlineNodes = useRef(new Map());
|
|
300
|
+
const outlineRef = (element) => (node) => {
|
|
301
|
+
if (node)
|
|
302
|
+
outlineNodes.current.set(element, node);
|
|
303
|
+
else
|
|
304
|
+
outlineNodes.current.delete(element);
|
|
305
|
+
};
|
|
306
|
+
// React renders a frame or more after a pan or scroll, so outlines follow the live geometry on their own frame loop.
|
|
307
|
+
useEffect(() => {
|
|
308
|
+
if (!selectedFrame)
|
|
309
|
+
return;
|
|
310
|
+
const frameDocument = selectedFrame.contentDocument;
|
|
311
|
+
let raf = null;
|
|
312
|
+
let idleFrames = 0;
|
|
313
|
+
const tick = () => {
|
|
314
|
+
raf = null;
|
|
315
|
+
idleFrames = syncOutlinePositions(selectedFrame, outlineNodes.current) ? 0 : idleFrames + 1;
|
|
316
|
+
if (idleFrames < OUTLINE_IDLE_FRAMES)
|
|
317
|
+
raf = window.requestAnimationFrame(tick);
|
|
318
|
+
};
|
|
319
|
+
const follow = () => {
|
|
320
|
+
idleFrames = 0;
|
|
321
|
+
if (raf === null)
|
|
322
|
+
raf = window.requestAnimationFrame(tick);
|
|
323
|
+
};
|
|
324
|
+
const options = { capture: true, passive: true };
|
|
325
|
+
window.addEventListener("wheel", follow, options);
|
|
326
|
+
frameDocument?.addEventListener("scroll", follow, options);
|
|
327
|
+
return () => {
|
|
328
|
+
window.removeEventListener("wheel", follow, options);
|
|
329
|
+
frameDocument?.removeEventListener("scroll", follow, options);
|
|
330
|
+
if (raf !== null)
|
|
331
|
+
window.cancelAnimationFrame(raf);
|
|
332
|
+
};
|
|
333
|
+
}, [selectedFrame]);
|
|
309
334
|
useEffect(() => {
|
|
310
335
|
if (!selectedInCanvas || !selected)
|
|
311
336
|
return;
|
|
312
|
-
const stops = selectedElements.map((candidate) =>
|
|
337
|
+
const stops = [...selectedElements.map((candidate) => candidate.domElement), ...linkedPeers]
|
|
338
|
+
.map((element) => observeSelectedGeometry(element, refreshSelectedGeometry));
|
|
313
339
|
return () => stops.forEach((stop) => stop());
|
|
314
|
-
}, [selected, selectedElements, selectedInCanvas]);
|
|
340
|
+
}, [selected, selectedElements, selectedInCanvas, linkedPeers.length]);
|
|
315
341
|
useEffect(() => {
|
|
316
342
|
const broadcastMeasureModifier = (altKey) => {
|
|
317
343
|
measureAltKeyRef.current = altKey;
|
|
318
344
|
for (const [cardId, iframe] of getRegisteredFrames()) {
|
|
319
|
-
|
|
345
|
+
connectFrame(cardId, iframe).post({ type: "measure-modifier", altKey });
|
|
320
346
|
}
|
|
321
347
|
};
|
|
322
348
|
const onKeyDown = (event) => {
|
|
@@ -338,9 +364,7 @@ export function CanvasElementOverlay() {
|
|
|
338
364
|
window.removeEventListener("blur", onBlur);
|
|
339
365
|
};
|
|
340
366
|
}, []);
|
|
341
|
-
//
|
|
342
|
-
// (never per hover), so the measurement self-rulers exclusion can compare
|
|
343
|
-
// identities without a per-hover scan of the frame document.
|
|
367
|
+
// Computed once per selection change, never per hover, so the measurement exclusion needs no per-hover scan.
|
|
344
368
|
const selectedIdentity = useMemo(() => {
|
|
345
369
|
const el = selected?.domElement;
|
|
346
370
|
if (!el)
|
|
@@ -348,11 +372,9 @@ export function CanvasElementOverlay() {
|
|
|
348
372
|
const elementId = el.getAttribute(RENDERER_ELEMENT_ID_ATTR);
|
|
349
373
|
return elementId ? { elementId } : null;
|
|
350
374
|
}, [selected?.domElement]);
|
|
351
|
-
//
|
|
352
|
-
// it: undo/redo/revert/clear remove the record synchronously, so restore the
|
|
353
|
-
// authored declaration before the renderer's next replace-styles lands.
|
|
375
|
+
// Undo/redo/revert/clear remove the record synchronously; restore the authored declaration before the next replace-styles lands.
|
|
354
376
|
useEffect(() => {
|
|
355
|
-
return
|
|
377
|
+
return subscribeActiveDraftChanges(() => {
|
|
356
378
|
reconcilePendingSpacingCommits(pendingSpacingCommitsRef.current);
|
|
357
379
|
});
|
|
358
380
|
}, []);
|
|
@@ -389,14 +411,14 @@ export function CanvasElementOverlay() {
|
|
|
389
411
|
};
|
|
390
412
|
});
|
|
391
413
|
};
|
|
392
|
-
const unsubscribe = subscribeCanvasRendererMessages(({
|
|
414
|
+
const unsubscribe = subscribeCanvasRendererMessages(({ frame, message: data }) => {
|
|
393
415
|
if (data.type === "renderer-hello" || data.type === "frame-ready") {
|
|
394
|
-
|
|
416
|
+
frame.post({ type: "measure-modifier", altKey: measureAltKeyRef.current });
|
|
395
417
|
}
|
|
396
418
|
if (data.type === "renderer-hello")
|
|
397
419
|
return;
|
|
398
420
|
if (data.type === "projection-applied") {
|
|
399
|
-
releasePendingSpacingCommits(pendingSpacingCommitsRef.current,
|
|
421
|
+
releasePendingSpacingCommits(pendingSpacingCommitsRef.current, frame.iframe);
|
|
400
422
|
return;
|
|
401
423
|
}
|
|
402
424
|
if (getCanvasLayoutTransitioning())
|
|
@@ -406,18 +428,17 @@ export function CanvasElementOverlay() {
|
|
|
406
428
|
if (!msg.cid)
|
|
407
429
|
return;
|
|
408
430
|
if (msg.rect === null) {
|
|
409
|
-
setHover((current) => current?.cardId ===
|
|
431
|
+
setHover((current) => current?.cardId === frame.cardId ? null : current);
|
|
410
432
|
return;
|
|
411
433
|
}
|
|
412
434
|
const spacingDescriptor = msg.hoverSpacing ?? msg.spacing ?? null;
|
|
413
435
|
const hoverPoint = msg.point ?? null;
|
|
414
|
-
const hoverElement = spacingDescriptor
|
|
415
|
-
|
|
416
|
-
: null;
|
|
436
|
+
const hoverElement = spacingDescriptor ? frame.element(msg) : null;
|
|
437
|
+
const frameDocument = frame.document();
|
|
417
438
|
const hoverAffordance = spacingDescriptor && hoverElement
|
|
418
439
|
? getSpacingAffordanceForDescriptor(hoverElement, spacingDescriptor)
|
|
419
|
-
: spacingDescriptor && hoverPoint &&
|
|
420
|
-
? getSpacingHoverAtPoint(
|
|
440
|
+
: spacingDescriptor && hoverPoint && frameDocument
|
|
441
|
+
? getSpacingHoverAtPoint(frameDocument, hoverPoint.x, hoverPoint.y)
|
|
421
442
|
: null;
|
|
422
443
|
const matchingAffordance = spacingDescriptorMatches(hoverAffordance, spacingDescriptor)
|
|
423
444
|
? hoverAffordance
|
|
@@ -432,44 +453,49 @@ export function CanvasElementOverlay() {
|
|
|
432
453
|
&& spacingDescriptorMatches(handleAffordance, msg.spacing)
|
|
433
454
|
? { point: hoverPoint, value: handleAffordance.value }
|
|
434
455
|
: null;
|
|
435
|
-
|
|
436
|
-
|
|
456
|
+
// Hover messages arrive every frame; the peer query runs once per element entered, not per message.
|
|
457
|
+
const hoverRect = msg.rect;
|
|
458
|
+
setHover((current) => ({
|
|
459
|
+
iframe: frame.iframe,
|
|
437
460
|
identity: { elementId: msg.elementId },
|
|
438
|
-
rect:
|
|
461
|
+
rect: hoverRect,
|
|
439
462
|
borders: msg.borders ?? { top: 0, right: 0, bottom: 0, left: 0 },
|
|
440
|
-
cardId:
|
|
463
|
+
cardId: frame.cardId,
|
|
441
464
|
spacing: spacingGuides.length > 0 ? spacingDescriptor : null,
|
|
442
465
|
spacingGuides,
|
|
443
466
|
spacingAreas,
|
|
444
467
|
spacingHandleBadge,
|
|
445
|
-
|
|
468
|
+
linked: current?.iframe === frame.iframe && current.identity.elementId === msg.elementId
|
|
469
|
+
? current.linked
|
|
470
|
+
: isLinkedElement(hoverElement ?? frame.element(msg)),
|
|
471
|
+
}));
|
|
446
472
|
}
|
|
447
473
|
else if (data.type === "element-measure-state") {
|
|
448
474
|
const msg = data;
|
|
449
475
|
setMeasureState({
|
|
450
|
-
iframe:
|
|
476
|
+
iframe: frame.iframe,
|
|
451
477
|
altKey: msg.altKey,
|
|
452
478
|
pointerOverPage: msg.pointerOverPage,
|
|
453
479
|
});
|
|
454
480
|
}
|
|
455
481
|
else if (data.type === "element-click") {
|
|
456
|
-
if (!isElementClickMessage(data,
|
|
482
|
+
if (!isElementClickMessage(data, frame.identity))
|
|
457
483
|
return;
|
|
458
484
|
const msg = data;
|
|
459
485
|
if (!msg.cid)
|
|
460
486
|
return;
|
|
461
|
-
handleElementClick(msg,
|
|
487
|
+
handleElementClick(msg, frame);
|
|
462
488
|
}
|
|
463
489
|
else if (data.type === "inline-text-intent") {
|
|
464
|
-
if (!isInlineTextIntentMessage(data,
|
|
490
|
+
if (!isInlineTextIntentMessage(data, frame.identity))
|
|
465
491
|
return;
|
|
466
492
|
if (getSelectedElements().length > 1)
|
|
467
493
|
return;
|
|
468
494
|
const emptyProjection = data.emptyProjectionId
|
|
469
|
-
? Array.from(
|
|
495
|
+
? Array.from(frame.document()?.querySelectorAll(`[${EMPTY_TEXT_PROJECTION_ATTR}]`) ?? [])
|
|
470
496
|
.find((candidate) => candidate.getAttribute(EMPTY_TEXT_PROJECTION_ATTR) === data.emptyProjectionId)
|
|
471
497
|
: null;
|
|
472
|
-
const element = emptyProjection ??
|
|
498
|
+
const element = emptyProjection ?? frame.element(data);
|
|
473
499
|
if (!element)
|
|
474
500
|
return;
|
|
475
501
|
handleInlineTextEditIntent(data.intent === "double-click"
|
|
@@ -492,23 +518,24 @@ export function CanvasElementOverlay() {
|
|
|
492
518
|
if (getSelectedElements().length > 1)
|
|
493
519
|
return;
|
|
494
520
|
const msg = data;
|
|
495
|
-
const element =
|
|
521
|
+
const element = frame.element(msg);
|
|
496
522
|
if (!element)
|
|
497
523
|
return;
|
|
498
524
|
clearSpacingDrag(spacingDragRef);
|
|
499
525
|
dragRef.current = null;
|
|
500
526
|
const startPoint = msg.startPoint ?? msg.point;
|
|
527
|
+
const frameDocument = frame.document();
|
|
501
528
|
const spacing = msg.spacing
|
|
502
529
|
? getSpacingAffordanceForDescriptor(element, msg.spacing)
|
|
503
|
-
:
|
|
504
|
-
? getSpacingAffordanceAtPoint(
|
|
530
|
+
: frameDocument
|
|
531
|
+
? getSpacingAffordanceAtPoint(frameDocument, startPoint.x, startPoint.y)
|
|
505
532
|
: null;
|
|
506
533
|
const isSpacingDrag = spacing
|
|
507
534
|
&& spacing.element === element
|
|
508
535
|
&& (!msg.spacing || spacingDescriptorMatches(spacing, msg.spacing));
|
|
509
536
|
if (isSpacingDrag) {
|
|
510
537
|
spacingDragRef.current = {
|
|
511
|
-
iframe:
|
|
538
|
+
iframe: frame.iframe,
|
|
512
539
|
element,
|
|
513
540
|
affordance: spacing,
|
|
514
541
|
start: startPoint,
|
|
@@ -517,34 +544,30 @@ export function CanvasElementOverlay() {
|
|
|
517
544
|
originalInlineValue: element.style.getPropertyValue(spacing.property),
|
|
518
545
|
originalInlinePriority: element.style.getPropertyPriority(spacing.property),
|
|
519
546
|
};
|
|
520
|
-
|
|
521
|
-
if (selectedElement)
|
|
522
|
-
setSelectedElement(selectedElement);
|
|
547
|
+
selectGestureElement(element);
|
|
523
548
|
applySpacingPreview(spacingDragRef.current, msg.point, msg.shiftKey === true);
|
|
524
549
|
setSpacingDragBadge(spacingBadgeForDrag(spacingDragRef.current, msg.point));
|
|
525
550
|
refreshSpacingPreviewOverlay(spacingDragRef.current);
|
|
526
551
|
return;
|
|
527
552
|
}
|
|
528
|
-
dragRef.current = { iframe:
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
setSelectedElement(selectedElement);
|
|
532
|
-
updateDropGuide(msg.point, sourceIframe);
|
|
553
|
+
dragRef.current = { iframe: frame.iframe, element };
|
|
554
|
+
selectGestureElement(element);
|
|
555
|
+
updateDropGuide(msg.point);
|
|
533
556
|
}
|
|
534
557
|
else if (data.type === "element-drag-move") {
|
|
535
558
|
const spacing = spacingDragRef.current;
|
|
536
|
-
if (spacing && spacing.iframe ===
|
|
559
|
+
if (spacing && spacing.iframe === frame.iframe) {
|
|
537
560
|
applySpacingPreview(spacing, data.point, data.shiftKey === true);
|
|
538
561
|
setSpacingDragBadge(spacingBadgeForDrag(spacing, data.point));
|
|
539
562
|
refreshSpacingPreviewOverlay(spacing);
|
|
540
563
|
return;
|
|
541
564
|
}
|
|
542
|
-
updateDropGuide(data.point
|
|
565
|
+
updateDropGuide(data.point);
|
|
543
566
|
}
|
|
544
567
|
else if (data.type === "element-drag-end") {
|
|
545
568
|
const msg = data;
|
|
546
569
|
const spacing = spacingDragRef.current;
|
|
547
|
-
if (spacing && spacing.iframe ===
|
|
570
|
+
if (spacing && spacing.iframe === frame.iframe) {
|
|
548
571
|
spacingDragRef.current = null;
|
|
549
572
|
setSpacingDragBadge(null);
|
|
550
573
|
if (msg.cancelled) {
|
|
@@ -556,7 +579,7 @@ export function CanvasElementOverlay() {
|
|
|
556
579
|
const records = commitSpacingDrag(spacing);
|
|
557
580
|
if (records.length > 0) {
|
|
558
581
|
pushPendingSpacingCommit(pendingSpacingCommitsRef.current, {
|
|
559
|
-
iframe:
|
|
582
|
+
iframe: frame.iframe,
|
|
560
583
|
element: spacing.element,
|
|
561
584
|
property: spacing.affordance.property,
|
|
562
585
|
committedValue: spacingValueCss(spacing.currentValue),
|
|
@@ -569,20 +592,17 @@ export function CanvasElementOverlay() {
|
|
|
569
592
|
}
|
|
570
593
|
clearDropGuide("canvas");
|
|
571
594
|
if (!msg.cancelled) {
|
|
572
|
-
|
|
573
|
-
if (selectedElement)
|
|
574
|
-
setSelectedElement(selectedElement);
|
|
595
|
+
selectGestureElement(spacing.element);
|
|
575
596
|
}
|
|
576
597
|
return;
|
|
577
598
|
}
|
|
578
599
|
const current = dragRef.current;
|
|
579
|
-
|
|
580
|
-
|
|
600
|
+
const frameDocument = frame.document();
|
|
601
|
+
if (!msg.cancelled && current && current.iframe === frame.iframe && frameDocument) {
|
|
602
|
+
const drop = getDropLocationAtPoint(frameDocument, current.element, msg.point.x, msg.point.y);
|
|
581
603
|
if (drop)
|
|
582
604
|
moveElement(current.element, drop);
|
|
583
|
-
|
|
584
|
-
if (selectedElement)
|
|
585
|
-
setSelectedElement(selectedElement);
|
|
605
|
+
selectGestureElement(current.element);
|
|
586
606
|
}
|
|
587
607
|
dragRef.current = null;
|
|
588
608
|
clearDropGuide("canvas");
|
|
@@ -590,8 +610,7 @@ export function CanvasElementOverlay() {
|
|
|
590
610
|
else if (data.type === "element-delete") {
|
|
591
611
|
if (getSelectedElements().length !== 1)
|
|
592
612
|
return;
|
|
593
|
-
const
|
|
594
|
-
const element = findFrameElement(sourceIframe, msg.elementId, msg.cid, msg.src);
|
|
613
|
+
const element = frame.element(data);
|
|
595
614
|
const selectedElement = element ? resolveSelectionFromElement(element) : null;
|
|
596
615
|
if (selectedElement && deleteElement(selectedElement))
|
|
597
616
|
setSelectedElement(null);
|
|
@@ -599,13 +618,10 @@ export function CanvasElementOverlay() {
|
|
|
599
618
|
else if (data.type === "element-nudge") {
|
|
600
619
|
if (getSelectedElements().length !== 1)
|
|
601
620
|
return;
|
|
602
|
-
const
|
|
603
|
-
const
|
|
604
|
-
const record = element ? nudgeElement(element, msg.key) : null;
|
|
621
|
+
const element = frame.element(data);
|
|
622
|
+
const record = element ? nudgeElement(element, data.key) : null;
|
|
605
623
|
if (element && record) {
|
|
606
|
-
|
|
607
|
-
if (selectedElement)
|
|
608
|
-
setSelectedElement(selectedElement);
|
|
624
|
+
selectGestureElement(element);
|
|
609
625
|
}
|
|
610
626
|
}
|
|
611
627
|
else if (data.type === "history-request") {
|
|
@@ -623,16 +639,17 @@ export function CanvasElementOverlay() {
|
|
|
623
639
|
else if (data.type === "inspector-open-request") {
|
|
624
640
|
setInspectorOpen(true);
|
|
625
641
|
}
|
|
626
|
-
function updateDropGuide(point
|
|
642
|
+
function updateDropGuide(point) {
|
|
627
643
|
const current = dragRef.current;
|
|
628
|
-
|
|
644
|
+
const frameDocument = frame.document();
|
|
645
|
+
if (!current || current.iframe !== frame.iframe || !frameDocument)
|
|
629
646
|
return;
|
|
630
|
-
const drop = getDropLocationAtPoint(
|
|
647
|
+
const drop = getDropLocationAtPoint(frameDocument, current.element, point.x, point.y);
|
|
631
648
|
if (!drop) {
|
|
632
649
|
clearDropGuide("canvas");
|
|
633
650
|
return;
|
|
634
651
|
}
|
|
635
|
-
showDropGuide("canvas",
|
|
652
|
+
showDropGuide("canvas", frameDocument, drop);
|
|
636
653
|
}
|
|
637
654
|
});
|
|
638
655
|
return () => {
|
|
@@ -647,41 +664,46 @@ export function CanvasElementOverlay() {
|
|
|
647
664
|
return null;
|
|
648
665
|
if (!hover && projectedSelectedGeometry.length === 0 && !projectedDropGuide)
|
|
649
666
|
return null;
|
|
650
|
-
const
|
|
651
|
-
const
|
|
652
|
-
const
|
|
667
|
+
const hoverViewport = hover ? measureFrameViewport(hover.iframe) : null;
|
|
668
|
+
const projectedHoverRect = hover && hoverViewport ? toViewportRect(hoverViewport, hover.rect) : null;
|
|
669
|
+
const projectedSpacingGuides = hover && hoverViewport ? hover.spacingGuides.map((guide) => toViewportRect(hoverViewport, guide)) : [];
|
|
670
|
+
const projectedSpacingAreas = hover && hoverViewport ? hover.spacingAreas.map((area) => toViewportRect(hoverViewport, area)) : [];
|
|
653
671
|
const spacingBadge = spacingDragBadge
|
|
654
672
|
?? (hover?.spacingHandleBadge ? { iframe: hover.iframe, ...hover.spacingHandleBadge } : null);
|
|
655
673
|
const projectedSpacingBadge = spacingBadge
|
|
656
|
-
?
|
|
674
|
+
? toViewportPoint(measureFrameViewport(spacingBadge.iframe), spacingBadge.point)
|
|
657
675
|
: null;
|
|
658
676
|
const hoverSpacing = hover?.spacing ?? null;
|
|
659
677
|
const measureStateForSelectedFrame = measureState?.iframe === selectedFrame ? measureState : null;
|
|
660
678
|
const hoverInSelectedFrame = hover?.iframe === selectedFrame ? hover : null;
|
|
661
679
|
const showGuideOverlay = Boolean(selectedElements.length === 1
|
|
662
680
|
&& selectedRect
|
|
663
|
-
&&
|
|
681
|
+
&& selectedFrameViewport
|
|
664
682
|
&& measureStateForSelectedFrame?.altKey
|
|
665
683
|
&& measureStateForSelectedFrame.pointerOverPage);
|
|
666
684
|
const isSelfHover = Boolean(hoverInSelectedFrame
|
|
667
685
|
&& selectedIdentity
|
|
668
686
|
&& hoverInSelectedFrame.identity.elementId === selectedIdentity.elementId);
|
|
669
|
-
// Selected elements already have a live
|
|
670
|
-
// is based on a cached renderer message and can lag during spacing previews.
|
|
687
|
+
// Selected elements already have a live outline; the hover outline is cached and can lag during spacing previews.
|
|
671
688
|
const showHoverOutline = Boolean(projectedHoverRect && !isSelfHover);
|
|
672
689
|
const showMeasurement = Boolean(showGuideOverlay
|
|
673
690
|
&& selectedLocalRect
|
|
674
691
|
&& hoverInSelectedFrame
|
|
675
692
|
&& !isSelfHover);
|
|
676
|
-
|
|
677
|
-
|
|
693
|
+
// Segment distances stay in frame CSS pixels so labels read the same at any board zoom.
|
|
694
|
+
const measurementSegments = showMeasurement && selectedFrameViewport && selectedLocalRect && hoverInSelectedFrame
|
|
695
|
+
? getMeasurementGeometry(selectedLocalRect, hoverInSelectedFrame.rect, {
|
|
678
696
|
selectedBorders: selectedBorders ?? undefined,
|
|
679
697
|
hoveredBorders: hoverInSelectedFrame.borders,
|
|
680
|
-
}).segments
|
|
698
|
+
}).segments.map((segment) => ({
|
|
699
|
+
...segment,
|
|
700
|
+
from: toViewportPoint(selectedFrameViewport, segment.from),
|
|
701
|
+
to: toViewportPoint(selectedFrameViewport, segment.to),
|
|
702
|
+
}))
|
|
681
703
|
: [];
|
|
682
704
|
if (presentationTransitioning || layoutTransitioning || temporaryAppInteraction)
|
|
683
|
-
return _jsx(
|
|
684
|
-
return (_jsxs(_Fragment, { children: [_jsx(
|
|
685
|
-
?
|
|
705
|
+
return _jsx(InspectorStyle, { testId: "canvas-element-overlay-styles", css: overlayStyles });
|
|
706
|
+
return (_jsxs(_Fragment, { children: [_jsx(InspectorStyle, { testId: "canvas-element-overlay-styles", css: overlayStyles }), showGuideOverlay && selectedRect && selectedFrameViewport ? (_jsx(MeasurementGuideOverlay, { testId: "canvas-measurement-overlay", selectedRect: selectedRect, guideViewport: selectedFrameViewport, segments: measurementSegments })) : null, projectedHoverRect ? (_jsxs(_Fragment, { children: [hoverSpacing ? projectedSpacingAreas.map((area, index) => (_jsx("div", { className: "canvas-spacing-fill", "data-test": "canvas-spacing-fill", "data-kind": hoverSpacing.kind, "data-property": hoverSpacing.property, "data-side": hoverSpacing.side ?? undefined, "data-area-index": index, style: overlayStyle(area), "aria-hidden": "true" }, `${hoverSpacing.property}-area-${index}`))) : null, showHoverOutline ? (_jsx("div", { className: "canvas-element-overlay", "data-linked": hover?.linked ? "true" : undefined, "data-test": "canvas-hover-outline", style: overlayStyle(projectedHoverRect), "aria-hidden": "true" })) : null, hoverSpacing ? projectedSpacingGuides.map((guide, index) => (_jsx("div", { className: "canvas-spacing-guide", "data-test": "canvas-spacing-guide", "data-kind": hoverSpacing.kind, "data-property": hoverSpacing.property, "data-side": hoverSpacing.side ?? undefined, "data-guide-index": index, style: spacingGuideStyle(guide), "aria-hidden": "true" }, `${hoverSpacing.property}-${index}`))) : null] })) : null, projectedLinkedPeers.map(({ peer, rect }, index) => (_jsx("div", { ref: outlineRef(peer), className: "canvas-linked-outline", "data-test": "canvas-linked-outline", style: overlayStyle(rect), "aria-hidden": "true" }, `${peer.getAttribute("data-cid")}-${index}`))), projectedSelectedGeometry.map(({ element, rect }, index) => (_jsx("div", { ref: outlineRef(element.domElement), className: "canvas-selected-outline", "data-linked": selectionIsLinked ? "true" : undefined, "data-test": "canvas-selected-outline", "data-selected-cid": element.cid, "data-selected-index": index, "data-selected-src": element.src, style: overlayStyle(rect), "aria-hidden": "true" }, `${element.cid}-${index}`))), projectedSpacingBadge && spacingBadge ? (_jsx("div", { className: "canvas-spacing-value-badge", "data-test": "canvas-spacing-value-badge", style: { left: projectedSpacingBadge.x, top: projectedSpacingBadge.y }, "aria-hidden": "true", children: spacingValueCss(spacingBadge.value) })) : null, domNavigationEnabled && !inlineTextSession && !measureStateForSelectedFrame?.altKey && selectedElements.length === 1 && selected && selectedRect && selectedFrameViewport ? (_jsx(DomNavigator, { selected: selected, hierarchy: hierarchy, anchor: selectedRect, linked: selectionIsLinked, project: (element) => element.ownerDocument === selected.domElement.ownerDocument
|
|
707
|
+
? toViewportRect(selectedFrameViewport, toRect(element.getBoundingClientRect()))
|
|
686
708
|
: null })) : null, _jsx(DropGuideOverlay, { guide: projectedDropGuide, lineClassName: "canvas-dom-drop-line", lineTestId: "canvas-dom-drop-line", targetClassName: "canvas-dom-drop-target", targetTestId: "canvas-dom-drop-target" })] }));
|
|
687
709
|
}
|