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
|
@@ -9,8 +9,9 @@ import { resolveSelectionTarget, selectionTargetMode } from "../selection/select
|
|
|
9
9
|
import { escapeCssString } from "../projection/cssEscapes.js";
|
|
10
10
|
import { APPLICATION_GESTURE_EVENTS, blockApplicationClick, blockApplicationGesture, isInlineEditorTarget, isUserClick, } from "../overlay/clickPolicy.js";
|
|
11
11
|
import { EMPTY_TEXT_PROJECTION_ATTR } from "../projection/textProjection.js";
|
|
12
|
-
import {
|
|
12
|
+
import { getElementSpacingAtPoint, getElementSpacingHandleAtPoint, toSpacingDescriptor, } from "../overlay/spacingGestures.js";
|
|
13
13
|
import { COMMENT_CURSOR, INTERACTION_CURSOR_PROPERTY, rendererCursorValue } from "../ui/customCursors.js";
|
|
14
|
+
import { isInspectorUiEvent, isPageSurface } from "./pageSurface.js";
|
|
14
15
|
const REACT_FIBER_KEY = /^__reactFiber\$/;
|
|
15
16
|
const REACT_INTERNAL_KEY = /^__reactInternalInstance\$/;
|
|
16
17
|
const HOVER_SCROLL_SETTLE_DELAY = 150;
|
|
@@ -94,7 +95,11 @@ export function installRendererElementSelector(acceptsClick = isUserClick) {
|
|
|
94
95
|
let suppressHoverDuringSpacingDrag = false;
|
|
95
96
|
let lastHoverPoint = null;
|
|
96
97
|
function trackListener(target, type, listener, options) {
|
|
97
|
-
const eventListener = (event) =>
|
|
98
|
+
const eventListener = (event) => {
|
|
99
|
+
if (isInspectorUiEvent(event))
|
|
100
|
+
return;
|
|
101
|
+
listener(event);
|
|
102
|
+
};
|
|
98
103
|
target.addEventListener(type, eventListener, options);
|
|
99
104
|
listenerCleanup.push(() => target.removeEventListener(type, eventListener, options));
|
|
100
105
|
}
|
|
@@ -166,24 +171,22 @@ export function installRendererElementSelector(acceptsClick = isUserClick) {
|
|
|
166
171
|
appliedRootCursor = cursor;
|
|
167
172
|
}
|
|
168
173
|
function reportHover(pending) {
|
|
169
|
-
const {
|
|
174
|
+
const { clear } = pending;
|
|
170
175
|
const identity = getRendererIdentity();
|
|
171
176
|
if (!identity)
|
|
172
177
|
return;
|
|
178
|
+
// Only the handle hit starts a drag and changes the cursor; the area-wide match is purely visual.
|
|
179
|
+
const elementSpacing = !commentMode && !clear && pending.point
|
|
180
|
+
? getElementSpacingAtPoint(document, pending.element, pending.point.x, pending.point.y)
|
|
181
|
+
: null;
|
|
182
|
+
// A margin belongs to a child of the hovered element; hovering it reports that child.
|
|
183
|
+
const element = elementSpacing?.handle?.element ?? elementSpacing?.area?.element ?? pending.element;
|
|
184
|
+
const spacing = elementSpacing?.handle?.element === element ? elementSpacing.handle : null;
|
|
185
|
+
const hoverSpacing = elementSpacing?.area?.element === element ? elementSpacing.area : null;
|
|
173
186
|
const cid = element.getAttribute("data-cid");
|
|
174
187
|
const selector = buildSelector(element);
|
|
175
188
|
const src = element.getAttribute("data-src") ?? "";
|
|
176
189
|
const rect = clear ? null : element.getBoundingClientRect();
|
|
177
|
-
// The handle hit is the only target that starts a drag, so it is the only
|
|
178
|
-
// one that changes the cursor. The area-wide match is purely visual.
|
|
179
|
-
const rawSpacing = !commentMode && !clear && pending.point
|
|
180
|
-
? getSpacingAffordanceAtPoint(document, pending.point.x, pending.point.y)
|
|
181
|
-
: null;
|
|
182
|
-
const spacing = rawSpacing && rawSpacing.element === element ? rawSpacing : null;
|
|
183
|
-
const rawHoverSpacing = !commentMode && !clear && pending.point
|
|
184
|
-
? getSpacingHoverAtPoint(document, pending.point.x, pending.point.y)
|
|
185
|
-
: null;
|
|
186
|
-
const hoverSpacing = rawHoverSpacing && rawHoverSpacing.element === element ? rawHoverSpacing : null;
|
|
187
190
|
if (spacing) {
|
|
188
191
|
setSpacingCursor(spacing.element, spacing.cursor);
|
|
189
192
|
}
|
|
@@ -277,7 +280,8 @@ export function installRendererElementSelector(acceptsClick = isUserClick) {
|
|
|
277
280
|
if (interactionsSuspended)
|
|
278
281
|
return;
|
|
279
282
|
updateMeasureState(event.altKey, true);
|
|
280
|
-
|
|
283
|
+
// Like mousemove, a pressed pointer reports drag moves, not hovers.
|
|
284
|
+
if (suppressHoverDuringSpacingDrag || pendingDrag)
|
|
281
285
|
return;
|
|
282
286
|
const target = event.target;
|
|
283
287
|
if (!(target instanceof Element))
|
|
@@ -293,6 +297,8 @@ export function installRendererElementSelector(acceptsClick = isUserClick) {
|
|
|
293
297
|
trackListener(window, "scroll", suppressHoverDuringScroll, true);
|
|
294
298
|
let pendingDrag = null;
|
|
295
299
|
let dragging = false;
|
|
300
|
+
// The browser clicks the common ancestor after a drag; that click must not reselect the ancestor.
|
|
301
|
+
let suppressClickAfterDrag = false;
|
|
296
302
|
let lastDragPoint = null;
|
|
297
303
|
let lastSelected = null;
|
|
298
304
|
trackListener(window, "nudge-ui:open", () => {
|
|
@@ -405,19 +411,15 @@ export function installRendererElementSelector(acceptsClick = isUserClick) {
|
|
|
405
411
|
const element = resolveSelectionTarget(event.target, selectionTargetMode(event));
|
|
406
412
|
if (!element)
|
|
407
413
|
return;
|
|
408
|
-
const spacingAffordance =
|
|
409
|
-
const spacing = spacingAffordance
|
|
410
|
-
? toSpacingDescriptor(spacingAffordance)
|
|
411
|
-
: null;
|
|
414
|
+
const spacingAffordance = getElementSpacingHandleAtPoint(document, element, event.clientX, event.clientY);
|
|
415
|
+
const spacing = spacingAffordance ? toSpacingDescriptor(spacingAffordance) : null;
|
|
412
416
|
if (spacing) {
|
|
413
417
|
suppressHoverDuringSpacingDrag = true;
|
|
414
418
|
hoverUpdate.cancel();
|
|
415
419
|
lastHoverPoint = null;
|
|
416
420
|
}
|
|
417
421
|
const identity = getRendererIdentity();
|
|
418
|
-
// A spacing drag owns the
|
|
419
|
-
// attempt for the same down event; padding and gaps are intentionally not
|
|
420
|
-
// editable text targets.
|
|
422
|
+
// A spacing drag owns the gesture; padding and gaps are not editable text targets.
|
|
421
423
|
if (identity && !spacing) {
|
|
422
424
|
const emptyProjectionId = event.target instanceof Element
|
|
423
425
|
? event.target.closest(`[${EMPTY_TEXT_PROJECTION_ATTR}]`)?.getAttribute(EMPTY_TEXT_PROJECTION_ATTR) ?? undefined
|
|
@@ -436,9 +438,10 @@ export function installRendererElementSelector(acceptsClick = isUserClick) {
|
|
|
436
438
|
};
|
|
437
439
|
sendToParent(message);
|
|
438
440
|
}
|
|
439
|
-
|
|
441
|
+
const owner = spacingAffordance?.element ?? element;
|
|
442
|
+
lastSelected = owner;
|
|
440
443
|
pendingDrag = {
|
|
441
|
-
element,
|
|
444
|
+
element: owner,
|
|
442
445
|
point: { x: event.clientX, y: event.clientY },
|
|
443
446
|
spacing,
|
|
444
447
|
};
|
|
@@ -496,6 +499,8 @@ export function installRendererElementSelector(acceptsClick = isUserClick) {
|
|
|
496
499
|
function finishDrag(event) {
|
|
497
500
|
dragMoveUpdate.cancel();
|
|
498
501
|
if (dragging) {
|
|
502
|
+
suppressClickAfterDrag = true;
|
|
503
|
+
window.setTimeout(() => { suppressClickAfterDrag = false; }, 0);
|
|
499
504
|
event.preventDefault();
|
|
500
505
|
const point = { x: event.clientX, y: event.clientY };
|
|
501
506
|
lastDragPoint = point;
|
|
@@ -507,6 +512,9 @@ export function installRendererElementSelector(acceptsClick = isUserClick) {
|
|
|
507
512
|
}
|
|
508
513
|
trackListener(document, "mouseup", finishDrag, true);
|
|
509
514
|
function forwardKeyboardShortcut(event, phase) {
|
|
515
|
+
// The controller's own window listeners already see page-surface keys.
|
|
516
|
+
if (isPageSurface())
|
|
517
|
+
return false;
|
|
510
518
|
const code = isKeyboardShortcutCode(event.code) ? event.code : null;
|
|
511
519
|
if (!code)
|
|
512
520
|
return false;
|
|
@@ -537,9 +545,7 @@ export function installRendererElementSelector(acceptsClick = isUserClick) {
|
|
|
537
545
|
sendToParent(message);
|
|
538
546
|
return phase === "keydown";
|
|
539
547
|
}
|
|
540
|
-
//
|
|
541
|
-
// the iframe document. A page-level window handler can otherwise stop the
|
|
542
|
-
// event before it reaches the document listener.
|
|
548
|
+
// Must run before application capture handlers on the iframe document, which can stop the event.
|
|
543
549
|
trackListener(window, "keydown", (event) => {
|
|
544
550
|
if (isEditableEvent(event))
|
|
545
551
|
return;
|
|
@@ -684,11 +690,15 @@ export function installRendererElementSelector(acceptsClick = isUserClick) {
|
|
|
684
690
|
trackListener(document, "click", (event) => {
|
|
685
691
|
if (interactionsSuspended || !acceptsClick(event))
|
|
686
692
|
return;
|
|
693
|
+
if (suppressClickAfterDrag) {
|
|
694
|
+
suppressClickAfterDrag = false;
|
|
695
|
+
blockApplicationClick(event);
|
|
696
|
+
return;
|
|
697
|
+
}
|
|
687
698
|
const target = event.target;
|
|
688
699
|
if (!(target instanceof Element))
|
|
689
700
|
return;
|
|
690
|
-
// Design-tool clicks are editing gestures and must not reach the
|
|
691
|
-
// rendered application; the Select tool is how the app receives them.
|
|
701
|
+
// Design-tool clicks are editing gestures and must not reach the rendered application.
|
|
692
702
|
const el = resolveSelectionTarget(target, selectionTargetMode(event));
|
|
693
703
|
if (!el) {
|
|
694
704
|
blockApplicationClick(event);
|
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
import { type
|
|
1
|
+
import { type RendererToControllerMessage } from "./frameProtocol.js";
|
|
2
|
+
import { type FrameConnection } from "./frameConnection.js";
|
|
2
3
|
export interface CanvasRendererMessage {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
identity: FrameIdentity;
|
|
6
|
-
message: FrameProtocolMessage;
|
|
4
|
+
frame: FrameConnection;
|
|
5
|
+
message: RendererToControllerMessage;
|
|
7
6
|
}
|
|
8
7
|
type CanvasRendererMessageListener = (event: CanvasRendererMessage) => void;
|
|
9
|
-
/** Subscribes to same-origin messages from registered Canvas renderer frames. */
|
|
10
8
|
export declare function subscribeCanvasRendererMessages(listener: CanvasRendererMessageListener): () => void;
|
|
11
9
|
export {};
|
|
@@ -1,36 +1,31 @@
|
|
|
1
|
-
import { isRendererMessageFor, PROTOCOL_VERSION, } from "./frameProtocol.js";
|
|
2
|
-
import {
|
|
1
|
+
import { isRendererMessageFor, isRendererMessageType, PROTOCOL_VERSION, } from "./frameProtocol.js";
|
|
2
|
+
import { connectFrame } from "./frameConnection.js";
|
|
3
|
+
import { findCanvasFrameBySource } from "./projection.js";
|
|
3
4
|
const listeners = new Set();
|
|
4
5
|
function routeRendererMessage(event) {
|
|
5
6
|
if (event.origin !== window.location.origin || !event.data || typeof event.data !== "object")
|
|
6
7
|
return;
|
|
7
|
-
const
|
|
8
|
-
if (!
|
|
8
|
+
const source = findCanvasFrameBySource(event.source);
|
|
9
|
+
if (!source)
|
|
9
10
|
return;
|
|
10
|
-
const
|
|
11
|
-
projectId: PROJECT_ID,
|
|
12
|
-
workspaceId: WORKSPACE_ID,
|
|
13
|
-
cardId: frame.cardId,
|
|
14
|
-
};
|
|
11
|
+
const frame = connectFrame(source.cardId, source.iframe);
|
|
15
12
|
// SAFETY: The object guard above makes the optional discriminator fields safe to inspect.
|
|
16
13
|
const candidate = event.data;
|
|
14
|
+
if (!isRendererMessageType(candidate.type))
|
|
15
|
+
return;
|
|
17
16
|
if (candidate.type === "renderer-hello") {
|
|
18
17
|
if (candidate.protocolVersion !== PROTOCOL_VERSION)
|
|
19
18
|
return;
|
|
20
19
|
}
|
|
21
|
-
else if (!isRendererMessageFor(event.data, identity)) {
|
|
20
|
+
else if (!isRendererMessageFor(event.data, frame.identity)) {
|
|
22
21
|
return;
|
|
23
22
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
// SAFETY: Subscribers narrow the discriminated protocol union before reading message-specific fields.
|
|
28
|
-
message: event.data,
|
|
29
|
-
};
|
|
23
|
+
// SAFETY: The type is a known renderer message; subscribers narrow it and
|
|
24
|
+
// apply the strict per-message schema before trusting message-specific fields.
|
|
25
|
+
const routed = { frame, message: event.data };
|
|
30
26
|
for (const listener of listeners)
|
|
31
27
|
listener(routed);
|
|
32
28
|
}
|
|
33
|
-
/** Subscribes to same-origin messages from registered Canvas renderer frames. */
|
|
34
29
|
export function subscribeCanvasRendererMessages(listener) {
|
|
35
30
|
if (listeners.size === 0)
|
|
36
31
|
window.addEventListener("message", routeRendererMessage);
|
|
@@ -1,2 +1,4 @@
|
|
|
1
1
|
import type { ElementClickMessage } from "./frameProtocol.js";
|
|
2
|
-
|
|
2
|
+
import type { FrameConnection } from "./frameConnection.js";
|
|
3
|
+
/** Selects the exact DOM node the user clicked. Falls back to the card when that node is gone. */
|
|
4
|
+
export declare function handleElementClick(msg: ElementClickMessage, frame: FrameConnection): void;
|
|
@@ -1,44 +1,12 @@
|
|
|
1
1
|
import { getSelectedElements, setSelectedElement, toggleSelectedElement } from "../selection/selectionStore.js";
|
|
2
2
|
import { selectCard } from "./canvasStore.js";
|
|
3
|
-
import { RENDERER_ELEMENT_ID_ATTR } from "./rendererCidIndex.js";
|
|
4
3
|
import { inspectComponentTargets } from "../componentSemantics/index.js";
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
}
|
|
9
|
-
/**
|
|
10
|
-
* Resolve the exact DOM element inside a card's iframe that matches an
|
|
11
|
-
* element-click message. The renderer (running inside the iframe) tells us
|
|
12
|
-
* the clicked element's renderer-owned `elementId`; we re-find the element by
|
|
13
|
-
* that stable data attribute so that the parent app can mutate the same
|
|
14
|
-
* physical DOM node the user clicked.
|
|
15
|
-
*
|
|
16
|
-
* The resolution uses a scoped ID query and never depends on document order.
|
|
17
|
-
*
|
|
18
|
-
* If the exact renderer-owned node no longer exists, fail closed instead of
|
|
19
|
-
* binding the copied component metadata to an unrelated DOM node.
|
|
20
|
-
*/
|
|
21
|
-
function findClickedElement(doc, elementId, cid, src) {
|
|
22
|
-
if (!doc)
|
|
23
|
-
return null;
|
|
24
|
-
if (!/^r\d+$/.test(elementId))
|
|
25
|
-
return null;
|
|
26
|
-
const candidates = doc.querySelectorAll(`[${RENDERER_ELEMENT_ID_ATTR}="${elementId}"]`);
|
|
27
|
-
if (candidates.length !== 1)
|
|
28
|
-
return null;
|
|
29
|
-
const candidate = candidates[0] ?? null;
|
|
30
|
-
if (!candidate
|
|
31
|
-
|| candidate.getAttribute("data-cid") !== cid
|
|
32
|
-
|| (candidate.getAttribute("data-src") ?? "") !== src)
|
|
33
|
-
return null;
|
|
34
|
-
return isHtmlElementInDocument(candidate, doc) ? candidate : null;
|
|
35
|
-
}
|
|
36
|
-
export function handleElementClick(msg, iframe, cardId) {
|
|
37
|
-
const doc = iframe.contentDocument;
|
|
38
|
-
const el = findClickedElement(doc, msg.elementId, msg.cid, msg.src);
|
|
4
|
+
/** Selects the exact DOM node the user clicked. Falls back to the card when that node is gone. */
|
|
5
|
+
export function handleElementClick(msg, frame) {
|
|
6
|
+
const el = frame.element(msg);
|
|
39
7
|
if (!el) {
|
|
40
8
|
setSelectedElement(null);
|
|
41
|
-
selectCard(cardId);
|
|
9
|
+
selectCard(frame.cardId);
|
|
42
10
|
return;
|
|
43
11
|
}
|
|
44
12
|
const componentTargets = inspectComponentTargets(el);
|
|
@@ -52,14 +20,13 @@ export function handleElementClick(msg, iframe, cardId) {
|
|
|
52
20
|
domElement: el,
|
|
53
21
|
componentTargets,
|
|
54
22
|
};
|
|
55
|
-
//
|
|
56
|
-
// host page, otherwise the selection would be discarded by the unload.
|
|
23
|
+
// Must run before any side effect that could reload the host page, which would drop the selection.
|
|
57
24
|
const current = getSelectedElements();
|
|
58
|
-
if (msg.additive && current.length > 0 && current.every((candidate) => candidate.domElement.ownerDocument ===
|
|
25
|
+
if (msg.additive && current.length > 0 && current.every((candidate) => candidate.domElement.ownerDocument === el.ownerDocument)) {
|
|
59
26
|
toggleSelectedElement(selected);
|
|
60
27
|
}
|
|
61
28
|
else {
|
|
62
29
|
setSelectedElement(selected);
|
|
63
30
|
}
|
|
64
|
-
selectCard(cardId);
|
|
31
|
+
selectCard(frame.cardId);
|
|
65
32
|
}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { type ReplaceStylesMessage } from "./frameProtocol.js";
|
|
2
|
-
/** Installs renderer diagnostics only after the dev-only renderer bootstrap. */
|
|
3
2
|
export declare function startRendererProjectionDiagnostics(): () => void;
|
|
4
3
|
export declare function getLastAppliedRevision(): number;
|
|
5
4
|
export declare function resetRendererRevision(): void;
|
|
@@ -9,9 +9,24 @@ import { applyStructuralProjection, getStructuralProjectionReports, isStructural
|
|
|
9
9
|
import { applyTextContentProjection, getTextProjectionReports, subscribeTextProjectionDiagnostics, } from "../projection/textProjection.js";
|
|
10
10
|
import { isTextContentChangeListValue } from "../changes/types.js";
|
|
11
11
|
import { applyDraftProjection, } from "../projection/draftProjection.js";
|
|
12
|
+
import { adoptStylesheet, allowsStyleElements, getAdoptedStylesheet } from "../runtime/ownedStylesheets.js";
|
|
13
|
+
import { applyRuntimeIdentityClaims, isRuntimeIdentityClaim } from "../runtime/runtimeIdentityClaims.js";
|
|
12
14
|
const SHEET_ID = "nudge-ui-styles";
|
|
15
|
+
let adoptedCss = null;
|
|
13
16
|
function replaceRendererCss(css) {
|
|
17
|
+
if (!allowsStyleElements(document)) {
|
|
18
|
+
// Structural and text projections resend unchanged CSS; rewriting it would discard cached resolutions.
|
|
19
|
+
const adopted = getAdoptedStylesheet(document, SHEET_ID);
|
|
20
|
+
if (adopted && adoptedCss === css && document.adoptedStyleSheets.includes(adopted))
|
|
21
|
+
return;
|
|
22
|
+
adoptStylesheet(document, SHEET_ID, css);
|
|
23
|
+
adoptedCss = css;
|
|
24
|
+
notifyBrowserStylesheetChange(document);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
14
27
|
let sheet = document.getElementById(SHEET_ID);
|
|
28
|
+
if (sheet?.textContent === css)
|
|
29
|
+
return;
|
|
15
30
|
if (!sheet) {
|
|
16
31
|
sheet = document.createElement("style");
|
|
17
32
|
sheet.id = SHEET_ID;
|
|
@@ -22,6 +37,9 @@ function replaceRendererCss(css) {
|
|
|
22
37
|
notifyBrowserStylesheetChange(document);
|
|
23
38
|
}
|
|
24
39
|
const rendererDocumentProjectionAdapter = {
|
|
40
|
+
applyRuntimeIdentities: (claims) => {
|
|
41
|
+
applyRuntimeIdentityClaims(document, claims);
|
|
42
|
+
},
|
|
25
43
|
applyStructural: (changes) => {
|
|
26
44
|
applyStructuralProjection(document, changes);
|
|
27
45
|
},
|
|
@@ -44,6 +62,7 @@ function projectionFromReplaceStylesMessage(msg) {
|
|
|
44
62
|
structuralChanges: msg.structuralChanges,
|
|
45
63
|
textContentChanges: msg.textContentChanges,
|
|
46
64
|
componentOverrides: msg.componentOverrides,
|
|
65
|
+
runtimeIdentities: msg.runtimeIdentities,
|
|
47
66
|
};
|
|
48
67
|
}
|
|
49
68
|
let lastAppliedRevision = -1;
|
|
@@ -113,7 +132,6 @@ function sendProjectionApplied(revision) {
|
|
|
113
132
|
};
|
|
114
133
|
sendToParent(msg);
|
|
115
134
|
}
|
|
116
|
-
/** Installs renderer diagnostics only after the dev-only renderer bootstrap. */
|
|
117
135
|
export function startRendererProjectionDiagnostics() {
|
|
118
136
|
if (!isNudgeUiDev() || activeDiagnosticsOwner)
|
|
119
137
|
return () => undefined;
|
|
@@ -195,6 +213,10 @@ export function validateReplaceStyles(msg, projectId, workspaceId, cardId) {
|
|
|
195
213
|
if (!isTextContentChangeListValue(m.textContentChanges)) {
|
|
196
214
|
return { valid: false, reason: "text content changes are invalid" };
|
|
197
215
|
}
|
|
216
|
+
if (m.runtimeIdentities !== undefined
|
|
217
|
+
&& (!Array.isArray(m.runtimeIdentities) || !m.runtimeIdentities.every(isRuntimeIdentityClaim))) {
|
|
218
|
+
return { valid: false, reason: "runtime identities are invalid" };
|
|
219
|
+
}
|
|
198
220
|
if (!isComponentOverrideList(m.componentOverrides)) {
|
|
199
221
|
return { valid: false, reason: "component overrides are invalid" };
|
|
200
222
|
}
|
|
@@ -1,13 +1,4 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Keep the resize handle usable while the board is zoomed without allowing
|
|
3
|
-
* inverse scaling to make it disproportionately large or small.
|
|
4
|
-
*/
|
|
1
|
+
/** Keeps the resize handle usable at any zoom without letting inverse scaling make it disproportionately large or small. */
|
|
5
2
|
export declare const CANVAS_RESIZE_HANDLE_MIN_SCALE: number;
|
|
6
3
|
export declare const CANVAS_RESIZE_HANDLE_MAX_SCALE = 2;
|
|
7
|
-
/**
|
|
8
|
-
* Returns the scale to apply inside the board's zoomed coordinate space.
|
|
9
|
-
*
|
|
10
|
-
* The lower bound matches the inverse of the largest supported camera zoom,
|
|
11
|
-
* and the upper bound follows the toolbar compensation policy.
|
|
12
|
-
*/
|
|
13
4
|
export declare function getCanvasResizeHandleScale(zoom: number): number;
|
|
@@ -1,17 +1,8 @@
|
|
|
1
1
|
import { MAX_CAMERA_ZOOM } from "./viewStore.js";
|
|
2
2
|
import { CANVAS_TOOLBAR_MAX_SCALE } from "./toolbarScale.js";
|
|
3
|
-
/**
|
|
4
|
-
* Keep the resize handle usable while the board is zoomed without allowing
|
|
5
|
-
* inverse scaling to make it disproportionately large or small.
|
|
6
|
-
*/
|
|
3
|
+
/** Keeps the resize handle usable at any zoom without letting inverse scaling make it disproportionately large or small. */
|
|
7
4
|
export const CANVAS_RESIZE_HANDLE_MIN_SCALE = 1 / MAX_CAMERA_ZOOM;
|
|
8
5
|
export const CANVAS_RESIZE_HANDLE_MAX_SCALE = CANVAS_TOOLBAR_MAX_SCALE;
|
|
9
|
-
/**
|
|
10
|
-
* Returns the scale to apply inside the board's zoomed coordinate space.
|
|
11
|
-
*
|
|
12
|
-
* The lower bound matches the inverse of the largest supported camera zoom,
|
|
13
|
-
* and the upper bound follows the toolbar compensation policy.
|
|
14
|
-
*/
|
|
15
6
|
export function getCanvasResizeHandleScale(zoom) {
|
|
16
7
|
if (!Number.isFinite(zoom) || zoom <= 0) {
|
|
17
8
|
return CANVAS_RESIZE_HANDLE_MAX_SCALE;
|
|
@@ -33,22 +33,16 @@ export interface DurableSession {
|
|
|
33
33
|
export type { SerializableChange, SerializableComponentChange, SerializableElementChange, SerializableTextContentChange, SerializableTokenChange, SerializableTokenRef, } from "../changes/codecs.js";
|
|
34
34
|
export interface HydrationResult {
|
|
35
35
|
restored: boolean;
|
|
36
|
-
changeCount: number;
|
|
37
36
|
}
|
|
38
37
|
export declare function serializeSession(): DurableSession;
|
|
39
38
|
export declare function persistSession(): boolean;
|
|
40
39
|
export declare function hydrateSession(): HydrationResult;
|
|
41
|
-
/** Clears the active
|
|
42
|
-
export declare function clearSelectedFrameChanges(): void
|
|
40
|
+
/** Clears the active draft, its comments, and project sketches while preserving canvas geometry and other drafts. */
|
|
41
|
+
export declare function clearSelectedFrameChanges(): Promise<void>;
|
|
43
42
|
export declare function clearSession(): void;
|
|
44
43
|
export declare function enableAutoSave(): void;
|
|
45
|
-
/**
|
|
46
|
-
* Coalesces the synchronous full-session `JSON.stringify` + `localStorage`
|
|
47
|
-
* write behind a trailing timer so commits never block on persistence. A
|
|
48
|
-
* refresh or close inside the debounce window still flushes on `beforeunload`.
|
|
49
|
-
*/
|
|
44
|
+
/** Coalesces the synchronous full-session write behind a trailing timer; `beforeunload` still flushes it. */
|
|
50
45
|
export declare function scheduleAutoSave(): void;
|
|
51
|
-
export declare function scheduleCanvasSave(): void;
|
|
52
46
|
export declare function flushAutoSave(): void;
|
|
53
47
|
export declare function getRestoreCount(): number;
|
|
54
48
|
export declare function setRestoreCount(count: number): void;
|
|
@@ -1,11 +1,12 @@
|
|
|
1
|
+
import { inspectorStorage } from "../runtime/inspectorStorage.js";
|
|
1
2
|
import { isFrameContent } from "./frameContent.js";
|
|
2
3
|
import { clearComments } from "../comments/store.js";
|
|
4
|
+
import { clearSketchesForProject } from "../sketch/store.js";
|
|
5
|
+
import { clearSketchClipboardHandoff } from "../sketch/handoff.js";
|
|
3
6
|
import { documentTarget, targetFromKey } from "../drafts/model.js";
|
|
4
|
-
import { canEditDraft, getActiveDraftChanges, isDraftLocked } from "../changes/draftChanges.js";
|
|
5
7
|
import { getFrameGroups, isFrameGroup, getCanvasCards, getFocusedCardId, getSelectedCardId, hydrateCanvasStore, removeCanvasCard, } from "./canvasStore.js";
|
|
6
8
|
import { getCanvasMode, getCanvasPresentation, getBoardCamera, setBoardCamera, } from "./viewStore.js";
|
|
7
9
|
import { applyRules } from "../projection/managedStylesheet.js";
|
|
8
|
-
import { clearActiveDraft } from "../changes/changesLog.js";
|
|
9
10
|
import { removeManagedSheet } from "../projection/managedStylesheet.js";
|
|
10
11
|
import { setSelectedElement } from "../selection/selectionStore.js";
|
|
11
12
|
import { canWriteWorkspace } from "./workspaceLease.js";
|
|
@@ -13,7 +14,7 @@ import { resetStructuralDeleteProjection, } from "../projection/structuralProjec
|
|
|
13
14
|
import { projectToAllReadyCards } from "./projection.js";
|
|
14
15
|
import { getNudgeUiRuntimeConfig } from "../runtime/runtimeConfig.js";
|
|
15
16
|
import { clearClipboardHandoff, getClipboardHandoffSnapshot, hydrateClipboardHandoff, isClipboardHandoffSnapshot, } from "../prompt/clipboardHandoff.js";
|
|
16
|
-
import { activateDraftForCard, clearDrafts, persistDrafts } from "../drafts/store.js";
|
|
17
|
+
import { activateDraftForCard, canEditDraft, clearActiveDraft, clearDrafts, getActiveDraftChanges, isDraftLocked, persistDrafts, } from "../drafts/store.js";
|
|
17
18
|
const SCHEMA_VERSION = 17;
|
|
18
19
|
const STORAGE_PREFIX = "nudge-ui";
|
|
19
20
|
function projectId() {
|
|
@@ -69,70 +70,67 @@ export function persistSession() {
|
|
|
69
70
|
return false;
|
|
70
71
|
return persistSessionUnchecked();
|
|
71
72
|
}
|
|
72
|
-
/**
|
|
73
|
-
* Serializes and writes the session without the write-lease gate. The public
|
|
74
|
-
* persistence path checks the lease before calling this helper.
|
|
75
|
-
*/
|
|
73
|
+
/** Skips the write-lease gate; the public persistence path checks the lease first. */
|
|
76
74
|
function persistSessionUnchecked() {
|
|
77
75
|
if (!projectId())
|
|
78
76
|
return false;
|
|
79
77
|
try {
|
|
80
78
|
persistDrafts();
|
|
81
79
|
const session = buildSession();
|
|
82
|
-
|
|
80
|
+
inspectorStorage()?.setItem(storageKey(projectId()), JSON.stringify(session));
|
|
83
81
|
return true;
|
|
84
82
|
}
|
|
85
83
|
catch {
|
|
86
|
-
// Storage unavailable or quota exceeded
|
|
84
|
+
// Storage unavailable or quota exceeded
|
|
87
85
|
return false;
|
|
88
86
|
}
|
|
89
87
|
}
|
|
90
88
|
export function hydrateSession() {
|
|
91
89
|
if (!projectId())
|
|
92
|
-
return { restored: false
|
|
90
|
+
return { restored: false };
|
|
93
91
|
let raw = null;
|
|
94
92
|
try {
|
|
95
|
-
raw =
|
|
93
|
+
raw = inspectorStorage()?.getItem(storageKey(projectId())) ?? null;
|
|
96
94
|
}
|
|
97
95
|
catch {
|
|
98
|
-
return { restored: false
|
|
96
|
+
return { restored: false };
|
|
99
97
|
}
|
|
100
98
|
if (!raw)
|
|
101
|
-
return { restored: false
|
|
99
|
+
return { restored: false };
|
|
102
100
|
let session;
|
|
103
101
|
try {
|
|
104
102
|
session = JSON.parse(raw);
|
|
105
103
|
}
|
|
106
104
|
catch {
|
|
107
105
|
safeDiscard();
|
|
108
|
-
return { restored: false
|
|
106
|
+
return { restored: false };
|
|
109
107
|
}
|
|
110
108
|
if (!session || typeof session !== "object") {
|
|
111
109
|
safeDiscard();
|
|
112
|
-
return { restored: false
|
|
110
|
+
return { restored: false };
|
|
113
111
|
}
|
|
114
112
|
const s = session;
|
|
115
113
|
if (typeof s.schemaVersion !== "number" || s.schemaVersion !== SCHEMA_VERSION) {
|
|
116
114
|
safeDiscard();
|
|
117
|
-
return { restored: false
|
|
115
|
+
return { restored: false };
|
|
118
116
|
}
|
|
119
117
|
if (typeof s.projectId !== "string" || s.projectId !== projectId()) {
|
|
120
118
|
safeDiscard();
|
|
121
|
-
return { restored: false
|
|
119
|
+
return { restored: false };
|
|
122
120
|
}
|
|
123
121
|
if (typeof s.mode !== "string" || (s.mode !== "inspect" && s.mode !== "canvas")) {
|
|
124
122
|
safeDiscard();
|
|
125
|
-
return { restored: false
|
|
123
|
+
return { restored: false };
|
|
126
124
|
}
|
|
127
125
|
if (!isSameOriginUrl(s.inspectUrl)) {
|
|
128
126
|
safeDiscard();
|
|
129
|
-
return { restored: false
|
|
127
|
+
return { restored: false };
|
|
130
128
|
}
|
|
131
129
|
const inspectRouteChanged = s.mode === "inspect" && s.inspectUrl !== window.location.href;
|
|
132
130
|
const cards = Array.isArray(s.cards) ? s.cards : null;
|
|
133
131
|
if (!cards) {
|
|
134
132
|
safeDiscard();
|
|
135
|
-
return { restored: false
|
|
133
|
+
return { restored: false };
|
|
136
134
|
}
|
|
137
135
|
const serializableCards = [];
|
|
138
136
|
for (const card of cards) {
|
|
@@ -147,7 +145,7 @@ export function hydrateSession() {
|
|
|
147
145
|
candidate.width <= 0 ||
|
|
148
146
|
candidate.height <= 0) {
|
|
149
147
|
safeDiscard();
|
|
150
|
-
return { restored: false
|
|
148
|
+
return { restored: false };
|
|
151
149
|
}
|
|
152
150
|
const c = card;
|
|
153
151
|
serializableCards.push({
|
|
@@ -163,7 +161,7 @@ export function hydrateSession() {
|
|
|
163
161
|
}
|
|
164
162
|
if (new Set(serializableCards.map((card) => card.id)).size !== serializableCards.length) {
|
|
165
163
|
safeDiscard();
|
|
166
|
-
return { restored: false
|
|
164
|
+
return { restored: false };
|
|
167
165
|
}
|
|
168
166
|
const cardsById = new Map(serializableCards.map((card) => [card.id, card]));
|
|
169
167
|
const cameraRaw = s.camera;
|
|
@@ -172,18 +170,18 @@ export function hydrateSession() {
|
|
|
172
170
|
!isFiniteNumber(cameraRaw.y) ||
|
|
173
171
|
!isFiniteNumber(cameraRaw.zoom)) {
|
|
174
172
|
safeDiscard();
|
|
175
|
-
return { restored: false
|
|
173
|
+
return { restored: false };
|
|
176
174
|
}
|
|
177
175
|
const presentation = s.presentation ?? "focus";
|
|
178
176
|
const groups = Array.isArray(s.groups) ? s.groups.filter((group) => group?.kind !== "linked") : s.groups ?? [];
|
|
179
177
|
if ((presentation !== "focus" && presentation !== "canvas") || !Array.isArray(groups) || !groups.every(isFrameGroup)) {
|
|
180
178
|
safeDiscard();
|
|
181
|
-
return { restored: false
|
|
179
|
+
return { restored: false };
|
|
182
180
|
}
|
|
183
181
|
const clipboardHandoff = s.clipboardHandoff;
|
|
184
182
|
if (!isClipboardHandoffSnapshot(clipboardHandoff)) {
|
|
185
183
|
safeDiscard();
|
|
186
|
-
return { restored: false
|
|
184
|
+
return { restored: false };
|
|
187
185
|
}
|
|
188
186
|
const camera = {
|
|
189
187
|
x: cameraRaw.x,
|
|
@@ -197,38 +195,36 @@ export function hydrateSession() {
|
|
|
197
195
|
: undefined;
|
|
198
196
|
if (focusedCardId === undefined) {
|
|
199
197
|
safeDiscard();
|
|
200
|
-
return { restored: false
|
|
198
|
+
return { restored: false };
|
|
201
199
|
}
|
|
202
200
|
hydrateCanvasStore(s.mode, serializableCards, camera, focusedCardId, presentation, groups);
|
|
203
201
|
hydrateClipboardHandoff(clipboardHandoff);
|
|
204
|
-
// A
|
|
205
|
-
// active. Keep the durable edits, but adopt the new route instead of
|
|
206
|
-
// sending the user back to the previous page. On refresh, the URLs already
|
|
207
|
-
// match and restoration remains unchanged.
|
|
202
|
+
// A changed URL means the user navigated while Inspect was active: keep the edits but adopt the new route.
|
|
208
203
|
if (inspectRouteChanged)
|
|
209
204
|
persistSessionUnchecked();
|
|
210
|
-
return { restored: true
|
|
205
|
+
return { restored: true };
|
|
211
206
|
}
|
|
212
207
|
function safeDiscard() {
|
|
213
208
|
try {
|
|
214
|
-
|
|
209
|
+
inspectorStorage()?.removeItem(storageKey(projectId()));
|
|
215
210
|
}
|
|
216
211
|
catch {
|
|
217
|
-
// ignore
|
|
218
212
|
}
|
|
219
213
|
}
|
|
220
|
-
/** Clears the active
|
|
214
|
+
/** Clears the active draft, its comments, and project sketches while preserving canvas geometry and other drafts. */
|
|
221
215
|
export function clearSelectedFrameChanges() {
|
|
222
216
|
if (!canEditDraft())
|
|
223
|
-
return;
|
|
217
|
+
return Promise.resolve();
|
|
224
218
|
const cardId = getSelectedCardId() ?? getFocusedCardId();
|
|
225
219
|
if (cardId)
|
|
226
220
|
activateDraftForCard(cardId);
|
|
227
221
|
clearComments(targetFromKey(getActiveDraftChanges().draftId) ?? documentTarget(window.location.href));
|
|
228
222
|
clearActiveDraft();
|
|
223
|
+
clearSketchClipboardHandoff();
|
|
229
224
|
setSelectedElement(null);
|
|
230
225
|
projectToAllReadyCards();
|
|
231
226
|
scheduleAutoSave();
|
|
227
|
+
return clearSketchesForProject();
|
|
232
228
|
}
|
|
233
229
|
export function clearSession() {
|
|
234
230
|
if (isDraftLocked())
|
|
@@ -236,10 +232,9 @@ export function clearSession() {
|
|
|
236
232
|
if (!canWriteWorkspace())
|
|
237
233
|
return;
|
|
238
234
|
try {
|
|
239
|
-
|
|
235
|
+
inspectorStorage()?.removeItem(storageKey(projectId()));
|
|
240
236
|
}
|
|
241
237
|
catch {
|
|
242
|
-
// ignore
|
|
243
238
|
}
|
|
244
239
|
clearComments();
|
|
245
240
|
clearActiveDraft();
|
|
@@ -269,11 +264,7 @@ export function enableAutoSave() {
|
|
|
269
264
|
autoSaveEnabled = true;
|
|
270
265
|
window.addEventListener("beforeunload", flushAutoSave);
|
|
271
266
|
}
|
|
272
|
-
/**
|
|
273
|
-
* Coalesces the synchronous full-session `JSON.stringify` + `localStorage`
|
|
274
|
-
* write behind a trailing timer so commits never block on persistence. A
|
|
275
|
-
* refresh or close inside the debounce window still flushes on `beforeunload`.
|
|
276
|
-
*/
|
|
267
|
+
/** Coalesces the synchronous full-session write behind a trailing timer; `beforeunload` still flushes it. */
|
|
277
268
|
export function scheduleAutoSave() {
|
|
278
269
|
if (!autoSaveEnabled)
|
|
279
270
|
return;
|
|
@@ -288,7 +279,6 @@ export function scheduleAutoSave() {
|
|
|
288
279
|
autoSaveDirty = false;
|
|
289
280
|
}, AUTOSAVE_DEBOUNCE_MS);
|
|
290
281
|
}
|
|
291
|
-
export function scheduleCanvasSave() { scheduleAutoSave(); }
|
|
292
282
|
export function flushAutoSave() {
|
|
293
283
|
if (autosaveTimer !== null) {
|
|
294
284
|
clearTimeout(autosaveTimer);
|