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,4 +1,4 @@
|
|
|
1
|
-
import { getActiveDraftChanges, getDraftChanges } from "
|
|
1
|
+
import { getActiveDraftChanges, getDraftChanges } from "../drafts/store.js";
|
|
2
2
|
const HOST_DOCUMENT = {
|
|
3
3
|
logicalDocument: "host",
|
|
4
4
|
sessionId: "host-document",
|
|
@@ -25,11 +25,9 @@ function notify() {
|
|
|
25
25
|
for (const listener of listeners)
|
|
26
26
|
listener();
|
|
27
27
|
}
|
|
28
|
-
/** Returns the stable host-document identity for this inspector lifetime. */
|
|
29
28
|
export function getHostPreviewDocument() {
|
|
30
29
|
return { ...HOST_DOCUMENT, draftId: getActiveDraftChanges().draftId };
|
|
31
30
|
}
|
|
32
|
-
/** Starts or replaces the live session for one logical document. */
|
|
33
31
|
export function startPreviewDocumentSession(document) {
|
|
34
32
|
const previousSession = activeSessions.get(document.logicalDocument);
|
|
35
33
|
if (previousSession === document.sessionId)
|
|
@@ -46,7 +44,7 @@ export function startPreviewDocumentSession(document) {
|
|
|
46
44
|
if (changed || previousSession !== undefined)
|
|
47
45
|
notify();
|
|
48
46
|
}
|
|
49
|
-
/**
|
|
47
|
+
/** Late results from an invalidated session are rejected. */
|
|
50
48
|
export function invalidatePreviewDocumentSession(logicalDocument, sessionId) {
|
|
51
49
|
const activeSession = activeSessions.get(logicalDocument);
|
|
52
50
|
if (activeSession === undefined || (sessionId !== undefined && activeSession !== sessionId))
|
|
@@ -63,7 +61,6 @@ export function invalidatePreviewDocumentSession(logicalDocument, sessionId) {
|
|
|
63
61
|
if (changed || activeSession !== undefined)
|
|
64
62
|
notify();
|
|
65
63
|
}
|
|
66
|
-
/** Opens a verification attempt for the currently active document session. */
|
|
67
64
|
export function beginPreviewAttempt(document, revision = getDraftChanges(document.draftId ?? getActiveDraftChanges().draftId).revision) {
|
|
68
65
|
const draftId = document.draftId ?? getActiveDraftChanges().draftId;
|
|
69
66
|
if (revision !== getDraftChanges(draftId).revision || activeSessions.get(document.logicalDocument) !== document.sessionId) {
|
|
@@ -71,13 +68,9 @@ export function beginPreviewAttempt(document, revision = getDraftChanges(documen
|
|
|
71
68
|
}
|
|
72
69
|
const attempt = (attemptsBySession.get(sessionKey(document)) ?? 0) + 1;
|
|
73
70
|
attemptsBySession.set(sessionKey(document), attempt);
|
|
74
|
-
//
|
|
75
|
-
// rejects late publishes per key; wiping would drop every other change's
|
|
76
|
-
// status before it is re-verified (and drop all host status when Canvas
|
|
77
|
-
// verification returns null).
|
|
71
|
+
// The attempt stamp already rejects late publishes per key; wiping here would drop other changes' statuses before re-verification.
|
|
78
72
|
return { ...document, draftId, draftRevision: revision, attempt };
|
|
79
73
|
}
|
|
80
|
-
/** Publishes only a result from the active revision, session, and attempt. */
|
|
81
74
|
export function publishPreviewDiagnostic(attempt, changeKey, result) {
|
|
82
75
|
if (attempt.draftRevision !== getDraftChanges(attempt.draftId).revision
|
|
83
76
|
|| activeSessions.get(attempt.logicalDocument) !== attempt.sessionId
|
|
@@ -97,7 +90,6 @@ export function publishPreviewDiagnostic(attempt, changeKey, result) {
|
|
|
97
90
|
notify();
|
|
98
91
|
return true;
|
|
99
92
|
}
|
|
100
|
-
/** Removes diagnostics for the supplied canonical keys across live documents. */
|
|
101
93
|
export function clearPreviewDiagnostics(changeKeys) {
|
|
102
94
|
const keys = changeKeys ? new Set(changeKeys) : null;
|
|
103
95
|
let changed = false;
|
|
@@ -110,25 +102,17 @@ export function clearPreviewDiagnostics(changeKeys) {
|
|
|
110
102
|
if (changed)
|
|
111
103
|
notify();
|
|
112
104
|
}
|
|
113
|
-
/** Notifies consumers when verification state changes without a result. */
|
|
114
105
|
export function notifyPreviewDiagnostics() {
|
|
115
106
|
notify();
|
|
116
107
|
}
|
|
117
108
|
export function getPreviewDiagnostic(changeKey, logicalDocument = HOST_DOCUMENT.logicalDocument, draftId = getActiveDraftChanges().draftId) {
|
|
118
|
-
// Pure getter:
|
|
119
|
-
// StaleChangeIndicator, so side effects here would clear state mid-render.
|
|
120
|
-
// Diagnostics survive workspace revisions until overwritten or explicitly
|
|
121
|
-
// cleared; publish-time stamps reject stale results per key.
|
|
109
|
+
// Pure getter: it runs on the React render path, so side effects here would clear state mid-render.
|
|
122
110
|
const sessionId = activeSessions.get(logicalDocument);
|
|
123
111
|
if (!sessionId)
|
|
124
112
|
return undefined;
|
|
125
113
|
return diagnostics.get(storageKey({ logicalDocument, sessionId, draftId }, changeKey));
|
|
126
114
|
}
|
|
127
|
-
/**
|
|
128
|
-
* Host-first read across live documents. The per-document store is observable
|
|
129
|
-
* here so a Canvas-only conflict is not write-only; host remains the default
|
|
130
|
-
* for single-document consumers.
|
|
131
|
-
*/
|
|
115
|
+
/** Also reads non-host documents so Canvas-only conflicts are not write-only. */
|
|
132
116
|
export function getAnyPreviewDiagnostic(changeKey) {
|
|
133
117
|
const host = getPreviewDiagnostic(changeKey, HOST_DOCUMENT.logicalDocument);
|
|
134
118
|
if (host)
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type ChangeRecord, type PreviewableChangeRecord } from "./types.js";
|
|
2
|
+
import { type PreviewAttempt } from "./previewDiagnostics.js";
|
|
3
|
+
import type { PreviewResult } from "../projection/managedStylesheet.js";
|
|
4
|
+
/** The two effects the cycle performs; tests replace them to observe sequencing. */
|
|
5
|
+
export interface PreviewVerificationEffects {
|
|
6
|
+
verify(change: PreviewableChangeRecord, target: HTMLElement | null, document: Document): PreviewResult | null;
|
|
7
|
+
publish(attempt: PreviewAttempt, key: string, result: PreviewResult): void;
|
|
8
|
+
}
|
|
9
|
+
export interface PreviewVerificationRequest {
|
|
10
|
+
/** The full surviving change set: cascade and specificity make earlier results depend on later rules. */
|
|
11
|
+
readonly changes: readonly ChangeRecord[];
|
|
12
|
+
readonly document: Document;
|
|
13
|
+
readonly attempt: PreviewAttempt;
|
|
14
|
+
/** Resolves the element a change was committed against; null verifies against the document alone. */
|
|
15
|
+
readonly targetFor: (change: PreviewableChangeRecord) => HTMLElement | null;
|
|
16
|
+
/** False when a newer revision replaced this attempt. */
|
|
17
|
+
readonly isCurrent?: () => boolean;
|
|
18
|
+
/** Runs a follow-up check after the browser settles an animation; omitted to skip the retry. */
|
|
19
|
+
readonly retryAnimation?: (run: () => void) => void;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Owns the verify-and-publish cycle shared by the host document and Canvas frames:
|
|
23
|
+
* one preview attempt, every previewable change, one diagnostic per conflict.
|
|
24
|
+
*/
|
|
25
|
+
export declare function verifyPreviewChanges(request: PreviewVerificationRequest, effects?: PreviewVerificationEffects): void;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { changeKey } from "./model.js";
|
|
2
|
+
import { verifyManagedStyleProjection } from "./managedStyleProjection.js";
|
|
3
|
+
import { isPreviewableChange } from "./types.js";
|
|
4
|
+
import { publishPreviewDiagnostic } from "./previewDiagnostics.js";
|
|
5
|
+
const defaultEffects = {
|
|
6
|
+
verify: (change, target, document) => verifyManagedStyleProjection(change, target, document),
|
|
7
|
+
publish: (attempt, key, result) => publishPreviewDiagnostic(attempt, key, result),
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Owns the verify-and-publish cycle shared by the host document and Canvas frames:
|
|
11
|
+
* one preview attempt, every previewable change, one diagnostic per conflict.
|
|
12
|
+
*/
|
|
13
|
+
export function verifyPreviewChanges(request, effects = defaultEffects) {
|
|
14
|
+
for (const change of request.changes) {
|
|
15
|
+
if (!isPreviewableChange(change))
|
|
16
|
+
continue;
|
|
17
|
+
const result = effects.verify(change, request.targetFor(change), request.document);
|
|
18
|
+
if (!result)
|
|
19
|
+
continue;
|
|
20
|
+
effects.publish(request.attempt, changeKey(change), result);
|
|
21
|
+
if (result.status === "conflict" && result.reason === "animation") {
|
|
22
|
+
scheduleSettledRetry(request, change, effects);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function scheduleSettledRetry(request, change, effects) {
|
|
27
|
+
request.retryAnimation?.(() => {
|
|
28
|
+
if (request.isCurrent && !request.isCurrent())
|
|
29
|
+
return;
|
|
30
|
+
const settled = effects.verify(change, request.targetFor(change), request.document);
|
|
31
|
+
if (settled)
|
|
32
|
+
effects.publish(request.attempt, changeKey(change), settled);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
import type { RenderedInstanceRef } from "./editModel.js";
|
|
2
|
-
/** Controller-owned intent to remove one rendered instance. */
|
|
3
2
|
export interface StructuralDelete {
|
|
4
3
|
id: string;
|
|
5
4
|
kind: "delete";
|
|
6
5
|
target: RenderedInstanceRef;
|
|
7
6
|
/** Hash-independent route where the target was captured. */
|
|
8
7
|
route?: string;
|
|
9
|
-
/**
|
|
8
|
+
/** View identity where the target was captured. */
|
|
10
9
|
state?: string;
|
|
11
10
|
}
|
|
12
|
-
/** Controller-owned intent to move one rendered instance. */
|
|
13
11
|
export interface StructuralMove {
|
|
14
12
|
id: string;
|
|
15
13
|
kind: "move";
|
|
@@ -34,6 +32,6 @@ export type StructuralProjectionReason = "target" | "source-parent" | "destinati
|
|
|
34
32
|
export interface StructuralProjectionReport {
|
|
35
33
|
changeId: string;
|
|
36
34
|
status: StructuralProjectionStatus;
|
|
37
|
-
/**
|
|
35
|
+
/** Diagnostic only; never changes canonical structural intent. */
|
|
38
36
|
reason?: StructuralProjectionReason;
|
|
39
37
|
}
|
|
@@ -1,22 +1,25 @@
|
|
|
1
1
|
import type { TokenEntry } from "../../css/model/index.js";
|
|
2
2
|
import type { ComponentChangeRecord } from "../componentSemantics/types.js";
|
|
3
3
|
import type { EditScope, RenderedInstanceOverride, StyleRuleContext, TextContentChangeRecord } from "./editModel.js";
|
|
4
|
-
/** Bounded rendered facts retained for one element without an authored source location. */
|
|
5
4
|
export interface RuntimeElementEvidence {
|
|
6
|
-
/**
|
|
7
|
-
* Why the location is unknown; prompts phrase their guidance accordingly.
|
|
8
|
-
* Omitted by legacy records, which are all runtime-created DOM.
|
|
9
|
-
*/
|
|
5
|
+
/** Omitted by legacy records, which are all runtime-created DOM. */
|
|
10
6
|
reason?: "runtime-created" | "unannotated";
|
|
11
7
|
tagName: string;
|
|
12
8
|
text: string | null;
|
|
13
9
|
props: string | null;
|
|
14
10
|
ariaLabel: string | null;
|
|
11
|
+
/** Nearest-ancestor selector path; omitted by records captured before it existed. */
|
|
12
|
+
domPath?: string | null;
|
|
13
|
+
elementId?: string | null;
|
|
15
14
|
}
|
|
16
|
-
/** Bounded authored facts for one annotated element. */
|
|
17
15
|
export interface SourceElementEvidence {
|
|
18
16
|
tagName: string;
|
|
19
17
|
props: string | null;
|
|
18
|
+
/** Omitted by older saved changes. */
|
|
19
|
+
text?: string | null;
|
|
20
|
+
ariaLabel?: string | null;
|
|
21
|
+
domPath?: string | null;
|
|
22
|
+
elementId?: string | null;
|
|
20
23
|
}
|
|
21
24
|
export interface ElementChangeRecord {
|
|
22
25
|
kind?: "element";
|
|
@@ -27,7 +30,6 @@ export interface ElementChangeRecord {
|
|
|
27
30
|
column?: number;
|
|
28
31
|
selector: string;
|
|
29
32
|
property: string;
|
|
30
|
-
/** CSSOM-declared source context that the inspector projection came from. */
|
|
31
33
|
sourceProperty?: string;
|
|
32
34
|
/** Best-effort CSSOM serialization; not an exact source-text quote. */
|
|
33
35
|
sourceAuthoredValue?: string;
|
|
@@ -40,11 +42,12 @@ export interface ElementChangeRecord {
|
|
|
40
42
|
line: number;
|
|
41
43
|
component: string;
|
|
42
44
|
};
|
|
43
|
-
/** Present when the selected element has a document-local runtime identity. */
|
|
44
45
|
runtimeEvidence?: RuntimeElementEvidence;
|
|
45
46
|
/** Authored facts that relocate the source site after its position shifts. */
|
|
46
47
|
sourceEvidence?: SourceElementEvidence;
|
|
47
48
|
scope?: EditScope;
|
|
49
|
+
/** Presentation only; absent from older edits. */
|
|
50
|
+
sourceInstanceCount?: number;
|
|
48
51
|
/** Durable, controller-owned target for one rendered output. */
|
|
49
52
|
instanceOverride?: RenderedInstanceOverride;
|
|
50
53
|
state?: "base" | "hover" | "active" | "focus" | "focus-visible" | "disabled";
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { type NudgeUiRuntimeConfig } from "./runtime/runtimeConfig.js";
|
|
2
|
+
import { NUDGE_UI_MANIFEST_VERSION } from "../transport/index.js";
|
|
2
3
|
export type { NudgeUiRuntimeConfig, NudgeUiRuntimeFeatures } from "./runtime/runtimeConfig.js";
|
|
3
4
|
export { detectStylingSystem } from "./runtime/runtimeConfig.js";
|
|
4
|
-
/**
|
|
5
|
-
export declare const NUDGE_UI_CLIENT_MANIFEST_VERSION
|
|
6
|
-
|
|
7
|
-
export interface NudgeUiClientManifest {
|
|
5
|
+
/** The client envelope shares one version with the transport module that serves it. */
|
|
6
|
+
export declare const NUDGE_UI_CLIENT_MANIFEST_VERSION: typeof NUDGE_UI_MANIFEST_VERSION;
|
|
7
|
+
export interface NudgeUiClientManifest<Runtime extends NudgeUiRuntimeConfig = NudgeUiRuntimeConfig> {
|
|
8
8
|
readonly version: typeof NUDGE_UI_CLIENT_MANIFEST_VERSION;
|
|
9
9
|
readonly revision: number;
|
|
10
|
-
readonly runtime:
|
|
10
|
+
readonly runtime: Runtime;
|
|
11
11
|
/** Project-owned, loopback-only agent bridge started by the dev host. */
|
|
12
12
|
readonly agentBridge?: {
|
|
13
13
|
readonly baseUrl: string;
|
|
@@ -27,5 +27,16 @@ export interface NudgeUiClientManifest {
|
|
|
27
27
|
/** Set by `NUDGE_UI=1`: automated browsers open the editor instead of the plain app. */
|
|
28
28
|
readonly inspectAutomatedBrowsers?: true;
|
|
29
29
|
}
|
|
30
|
-
/**
|
|
30
|
+
/** Everything host Adapters supply; the envelope fields are owned here. */
|
|
31
|
+
export interface NudgeUiClientManifestInput<Runtime extends NudgeUiRuntimeConfig = NudgeUiRuntimeConfig> {
|
|
32
|
+
readonly runtime: Runtime;
|
|
33
|
+
readonly revision?: number;
|
|
34
|
+
readonly agentBridge?: NudgeUiClientManifest["agentBridge"];
|
|
35
|
+
readonly document?: NudgeUiClientManifest["document"];
|
|
36
|
+
readonly reload?: NudgeUiClientManifest["reload"];
|
|
37
|
+
readonly inspectAutomatedBrowsers?: true;
|
|
38
|
+
}
|
|
39
|
+
/** Builds one envelope so every host publishes the same version and field set. */
|
|
40
|
+
export declare function createNudgeUiClientManifest<Runtime extends NudgeUiRuntimeConfig>(input: NudgeUiClientManifestInput<Runtime>): NudgeUiClientManifest<Runtime>;
|
|
41
|
+
/** Narrows and normalizes an untrusted manifest before it replaces inspector state. */
|
|
31
42
|
export declare function parseNudgeUiClientManifest(value: unknown): NudgeUiClientManifest | null;
|
|
@@ -1,8 +1,21 @@
|
|
|
1
1
|
import { normalizeNudgeUiRuntimeConfig, } from "./runtime/runtimeConfig.js";
|
|
2
|
+
import { NUDGE_UI_MANIFEST_VERSION } from "../transport/index.js";
|
|
2
3
|
export { detectStylingSystem } from "./runtime/runtimeConfig.js";
|
|
3
|
-
/**
|
|
4
|
-
export const NUDGE_UI_CLIENT_MANIFEST_VERSION =
|
|
5
|
-
/**
|
|
4
|
+
/** The client envelope shares one version with the transport module that serves it. */
|
|
5
|
+
export const NUDGE_UI_CLIENT_MANIFEST_VERSION = NUDGE_UI_MANIFEST_VERSION;
|
|
6
|
+
/** Builds one envelope so every host publishes the same version and field set. */
|
|
7
|
+
export function createNudgeUiClientManifest(input) {
|
|
8
|
+
return {
|
|
9
|
+
version: NUDGE_UI_CLIENT_MANIFEST_VERSION,
|
|
10
|
+
revision: input.revision ?? 0,
|
|
11
|
+
runtime: input.runtime,
|
|
12
|
+
...(input.agentBridge ? { agentBridge: input.agentBridge } : {}),
|
|
13
|
+
...(input.document ? { document: input.document } : {}),
|
|
14
|
+
...(input.reload ? { reload: input.reload } : {}),
|
|
15
|
+
...(input.inspectAutomatedBrowsers ? { inspectAutomatedBrowsers: true } : {}),
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/** Narrows and normalizes an untrusted manifest before it replaces inspector state. */
|
|
6
19
|
export function parseNudgeUiClientManifest(
|
|
7
20
|
// JSON is untrusted at this I/O boundary and is narrowed below.
|
|
8
21
|
// oxlint-disable-next-line anti-slop/no-unknown-parameters
|
|
@@ -4,7 +4,9 @@ import { IconCheck, IconTrash } from "@tabler/icons-react";
|
|
|
4
4
|
import { useCanvasMode } from "../canvas/viewStore.js";
|
|
5
5
|
import { getRegisteredFrames } from "../canvas/projection.js";
|
|
6
6
|
import { subscribeCanvasRendererMessages } from "../canvas/rendererMessageRouter.js";
|
|
7
|
-
import {
|
|
7
|
+
import { measureFrameViewport, toViewportPoint } from "../canvas/frameConnection.js";
|
|
8
|
+
import { canvasFrameElement } from "../canvas/canvasFrame.js";
|
|
9
|
+
import { getElementComputedStyle } from "../runtime/domRealm.js";
|
|
8
10
|
import { captureRenderedInstance } from "../projection/renderedInstance.js";
|
|
9
11
|
import { IconButton } from "../ui/IconButton.js";
|
|
10
12
|
import { TextInput } from "../ui/TextInput.js";
|
|
@@ -12,21 +14,23 @@ import { commentFingerprint, commentViewport, resolveCommentElement } from "./el
|
|
|
12
14
|
import { commentRoute, getCommentClearRevision, isCommentToolActive, removeComment, saveComment, subscribeComments, useComments, useCommentToolActive } from "./store.js";
|
|
13
15
|
import { isReadingCommentSource, readCommentSource, reconcileComments } from "./verification.js";
|
|
14
16
|
const styles = ".comment-pin {\n position: fixed;\n z-index: 10;\n display: grid;\n place-items: center;\n width: var(--icon-size-large);\n height: var(--icon-size-large);\n padding: 0;\n border: 2px solid var(--surface-raised-2x);\n border-radius: 50%;\n background: var(--accent);\n box-shadow: var(--shadow-popup);\n cursor: pointer;\n pointer-events: auto;\n}\n\n.comment-editor-backdrop {\n position: fixed;\n inset: 0;\n z-index: 11;\n pointer-events: auto;\n}\n\n.comment-editor {\n position: fixed;\n z-index: 12;\n display: flex;\n align-items: center;\n gap: var(--space-4);\n width: min(384px, calc(100vw - 16px));\n box-sizing: border-box;\n padding: var(--space-8);\n border-radius: var(--radius-12);\n background: var(--surface-raised-2x);\n box-shadow: var(--shadow-popup);\n pointer-events: auto;\n}\n\n.comment-editor .text-input { flex: 1; min-width: 0; padding-inline: var(--space-8); }\n.comment-editor__error { position: absolute; top: 100%; left: 0; padding: var(--space-8); background: var(--surface-raised-2x); color: var(--text-primary); border-radius: var(--radius-control); }\n";
|
|
17
|
+
import { InspectorStyle } from "../ui/InspectorStyle.js";
|
|
18
|
+
const CHECK_DELAY_MS = 450;
|
|
19
|
+
const MAX_CHECK_DELAY_MS = 8_000;
|
|
15
20
|
function sameAnchor(left, right) {
|
|
16
21
|
return left?.left === right?.left && left?.top === right?.top;
|
|
17
22
|
}
|
|
18
23
|
function anchorFor(iframe, element) {
|
|
19
24
|
if (!element.isConnected || iframe.contentDocument !== element.ownerDocument)
|
|
20
25
|
return null;
|
|
21
|
-
// Focus view keeps
|
|
22
|
-
|
|
26
|
+
// Focus view keeps real frames mounted, but their pins must stay hidden.
|
|
27
|
+
const frameElement = canvasFrameElement(iframe);
|
|
28
|
+
if (frameElement && getElementComputedStyle(frameElement).visibility !== "visible")
|
|
23
29
|
return null;
|
|
24
|
-
const frame = iframe
|
|
30
|
+
const frame = measureFrameViewport(iframe);
|
|
25
31
|
const rect = element.getBoundingClientRect();
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
const top = frame.top + rect.top * scale;
|
|
29
|
-
if (top < frame.top || top > frame.bottom || left < frame.left || left > frame.right)
|
|
32
|
+
const { x: left, y: top } = toViewportPoint(frame, { x: rect.right, y: rect.top });
|
|
33
|
+
if (top < frame.top || top > frame.top + frame.height || left < frame.left || left > frame.left + frame.width)
|
|
30
34
|
return null;
|
|
31
35
|
return { left, top };
|
|
32
36
|
}
|
|
@@ -75,17 +79,17 @@ export function CommentsOverlay() {
|
|
|
75
79
|
window.addEventListener("keydown", dismissOnEscape, true);
|
|
76
80
|
return () => window.removeEventListener("keydown", dismissOnEscape, true);
|
|
77
81
|
}, [draft]);
|
|
78
|
-
useEffect(() => subscribeCanvasRendererMessages(({
|
|
82
|
+
useEffect(() => subscribeCanvasRendererMessages(({ frame, message }) => {
|
|
79
83
|
if (message.type === "element-click" && isCommentToolActive()) {
|
|
80
|
-
const element =
|
|
81
|
-
if (element
|
|
82
|
-
openDraft({ element, iframe });
|
|
83
|
-
}
|
|
84
|
+
const element = frame.element(message);
|
|
85
|
+
if (element)
|
|
86
|
+
openDraft({ element, iframe: frame.iframe });
|
|
84
87
|
}
|
|
85
88
|
if (message.type === "element-deselect")
|
|
86
89
|
setDraft(null);
|
|
87
|
-
|
|
88
|
-
|
|
90
|
+
const frameDocument = frame.document();
|
|
91
|
+
if (message.type === "frame-ready" && frameDocument) {
|
|
92
|
+
void reconcileComments(frameDocument).catch(() => undefined);
|
|
89
93
|
}
|
|
90
94
|
}), []);
|
|
91
95
|
useEffect(() => {
|
|
@@ -147,6 +151,35 @@ export function CommentsOverlay() {
|
|
|
147
151
|
useEffect(() => {
|
|
148
152
|
if (!comments.some((comment) => comment.handedOff))
|
|
149
153
|
return;
|
|
154
|
+
// A check briefly removes every preview, so checks that resolve nothing back off to avoid flashing on continuously mutating pages.
|
|
155
|
+
const run = (doc, observation) => {
|
|
156
|
+
observation.timer = null;
|
|
157
|
+
if (observation.checking)
|
|
158
|
+
return;
|
|
159
|
+
observation.checking = true;
|
|
160
|
+
void reconcileComments(doc).then((removed) => {
|
|
161
|
+
observation.interval = removed > 0 ? CHECK_DELAY_MS : Math.min(observation.interval * 2, MAX_CHECK_DELAY_MS);
|
|
162
|
+
}, () => undefined).finally(() => {
|
|
163
|
+
observation.lastCheckEndedAt = Date.now();
|
|
164
|
+
setTimeout(() => {
|
|
165
|
+
observation.checking = false;
|
|
166
|
+
if (!observation.pending || observations.current.get(doc) !== observation)
|
|
167
|
+
return;
|
|
168
|
+
observation.pending = false;
|
|
169
|
+
schedule(doc, observation);
|
|
170
|
+
}, 0);
|
|
171
|
+
});
|
|
172
|
+
};
|
|
173
|
+
const schedule = (doc, observation) => {
|
|
174
|
+
if (observation.checking) {
|
|
175
|
+
observation.pending = true;
|
|
176
|
+
return;
|
|
177
|
+
}
|
|
178
|
+
if (observation.timer !== null)
|
|
179
|
+
return;
|
|
180
|
+
// Let the change that triggered this settle, and keep the backoff interval.
|
|
181
|
+
observation.timer = setTimeout(() => run(doc, observation), Math.max(CHECK_DELAY_MS, observation.lastCheckEndedAt + observation.interval - Date.now()));
|
|
182
|
+
};
|
|
150
183
|
const refresh = () => {
|
|
151
184
|
const documents = new Set([...getRegisteredFrames()].map(([, iframe]) => iframe.contentDocument).filter((doc) => doc !== null));
|
|
152
185
|
for (const [doc, observation] of observations.current) {
|
|
@@ -171,21 +204,31 @@ export function CommentsOverlay() {
|
|
|
171
204
|
return false;
|
|
172
205
|
return true;
|
|
173
206
|
});
|
|
174
|
-
if (
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
clearTimeout(observation.timer);
|
|
178
|
-
observation.timer = setTimeout(() => { void reconcileComments(doc).catch(() => undefined); }, 200);
|
|
179
|
-
}), timer: null };
|
|
207
|
+
if (sourceChanged)
|
|
208
|
+
schedule(doc, observation);
|
|
209
|
+
}), timer: null, checking: false, pending: false, interval: CHECK_DELAY_MS, lastCheckEndedAt: -Infinity };
|
|
180
210
|
observation.observer.observe(doc.documentElement, { subtree: true, childList: true, characterData: true, attributes: true });
|
|
181
211
|
observations.current.set(doc, observation);
|
|
182
|
-
|
|
212
|
+
run(doc, observation);
|
|
213
|
+
}
|
|
214
|
+
};
|
|
215
|
+
// Returning to the page is when an agent's source edit is most likely to have landed.
|
|
216
|
+
const returned = () => {
|
|
217
|
+
for (const [doc, observation] of observations.current) {
|
|
218
|
+
observation.interval = CHECK_DELAY_MS;
|
|
219
|
+
observation.lastCheckEndedAt = -Infinity;
|
|
220
|
+
if (observation.timer)
|
|
221
|
+
clearTimeout(observation.timer);
|
|
222
|
+
observation.timer = null;
|
|
223
|
+
schedule(doc, observation);
|
|
183
224
|
}
|
|
184
225
|
};
|
|
185
226
|
refresh();
|
|
186
227
|
const timer = setInterval(refresh, 500);
|
|
228
|
+
window.addEventListener("focus", returned);
|
|
187
229
|
return () => {
|
|
188
230
|
clearInterval(timer);
|
|
231
|
+
window.removeEventListener("focus", returned);
|
|
189
232
|
for (const observation of observations.current.values()) {
|
|
190
233
|
observation.observer.disconnect();
|
|
191
234
|
if (observation.timer)
|
|
@@ -239,7 +282,7 @@ export function CommentsOverlay() {
|
|
|
239
282
|
}
|
|
240
283
|
if (mode !== "canvas")
|
|
241
284
|
return null;
|
|
242
|
-
return _jsxs(_Fragment, { children: [_jsx(
|
|
285
|
+
return _jsxs(_Fragment, { children: [_jsx(InspectorStyle, { css: styles }), comments.flatMap((comment) => [...anchors].filter(([key]) => key.startsWith(`${comment.id}:`)).map(([key, anchor]) => (_jsx("button", { type: "button", className: "comment-pin", "data-test": "comment-pin", "aria-label": `Comment: ${comment.note}`, title: comment.note, style: anchor, onClick: () => {
|
|
243
286
|
const bound = bindings.current.get(key);
|
|
244
287
|
if (bound)
|
|
245
288
|
openDraft({ ...bound, existing: comment });
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { RenderedInstanceRef } from "../changes/editModel.js";
|
|
2
|
-
/** Retains a changed target only when its source site still identifies one output. */
|
|
3
2
|
export declare function resolveCommentElement(doc: Document, target: RenderedInstanceRef): HTMLElement | null;
|
|
4
3
|
export declare function commentViewport(doc: Document): string;
|
|
5
|
-
/**
|
|
4
|
+
/** Ignores inspector identity attributes and transient cursor styling. */
|
|
6
5
|
export declare function commentFingerprint(element: HTMLElement): string;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { resolveRenderedInstance } from "../projection/renderedInstance.js";
|
|
2
2
|
import { relocateSourceSite, sourceSiteSelector } from "../selection/sourceSite.js";
|
|
3
|
-
/** Retains a changed target only when its source site still identifies one output. */
|
|
4
3
|
export function resolveCommentElement(doc, target) {
|
|
5
4
|
const exact = resolveRenderedInstance(doc, target);
|
|
6
5
|
if (exact.status === "resolved")
|
|
@@ -28,7 +27,7 @@ export function resolveCommentElement(doc, target) {
|
|
|
28
27
|
export function commentViewport(doc) {
|
|
29
28
|
return `${doc.defaultView?.innerWidth}:${doc.defaultView?.innerHeight}`;
|
|
30
29
|
}
|
|
31
|
-
/**
|
|
30
|
+
/** Ignores inspector identity attributes and transient cursor styling. */
|
|
32
31
|
export function commentFingerprint(element) {
|
|
33
32
|
const clone = element.cloneNode(true);
|
|
34
33
|
for (const node of [clone, ...clone.querySelectorAll("*")]) {
|
|
@@ -21,7 +21,7 @@ export declare function removeComment(id: string): void;
|
|
|
21
21
|
export declare function getCommentClearRevision(): number;
|
|
22
22
|
/** Clears saved notes and invalidates any open or saving comment draft. */
|
|
23
23
|
export declare function clearComments(target?: DraftTarget): void;
|
|
24
|
-
/**
|
|
24
|
+
/** Marks only exact id+note matches, so an edited note is not marked handed off. */
|
|
25
25
|
export declare function markCommentsHandedOff(sent: readonly ElementComment[]): void;
|
|
26
26
|
export declare function setCommentToolActive(active: boolean): void;
|
|
27
27
|
export declare function isCommentToolActive(): boolean;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { inspectorStorage } from "../runtime/inspectorStorage.js";
|
|
1
2
|
import { useSyncExternalStore } from "react";
|
|
2
3
|
import { isRenderedInstanceRef } from "../changes/editModel.js";
|
|
3
4
|
import { useCanvasCards, useFocusedCardId, useSelectedCardId } from "../canvas/canvasStore.js";
|
|
@@ -29,7 +30,7 @@ export function getComments() {
|
|
|
29
30
|
loadedKey = key;
|
|
30
31
|
loadedDemo = demo;
|
|
31
32
|
try {
|
|
32
|
-
const saved = demo ? [] : JSON.parse(
|
|
33
|
+
const saved = demo ? [] : JSON.parse(inspectorStorage()?.getItem(key) ?? "[]");
|
|
33
34
|
comments = Array.isArray(saved) ? saved.filter(isComment) : [];
|
|
34
35
|
}
|
|
35
36
|
catch {
|
|
@@ -51,7 +52,7 @@ function publish(next) {
|
|
|
51
52
|
comments = next;
|
|
52
53
|
if (getNudgeUiRuntimeConfig().demo !== true) {
|
|
53
54
|
try {
|
|
54
|
-
|
|
55
|
+
inspectorStorage()?.setItem(storageKey(), JSON.stringify(next));
|
|
55
56
|
}
|
|
56
57
|
catch { }
|
|
57
58
|
}
|
|
@@ -93,7 +94,7 @@ export function clearComments(target) {
|
|
|
93
94
|
const cleared = new Set((target ? getCommentsForTarget(target) : getComments()).map((comment) => comment.id));
|
|
94
95
|
publish(getComments().filter((comment) => !cleared.has(comment.id)));
|
|
95
96
|
}
|
|
96
|
-
/**
|
|
97
|
+
/** Marks only exact id+note matches, so an edited note is not marked handed off. */
|
|
97
98
|
export function markCommentsHandedOff(sent) {
|
|
98
99
|
publish(getComments().map((item) => sent.some((candidate) => candidate.id === item.id && candidate.note === item.note)
|
|
99
100
|
? { ...item, handedOff: true } : item));
|
|
@@ -1,5 +1,11 @@
|
|
|
1
|
+
import { isCanvasProjectionRevisionCurrent, projectDraftToDocument } from "../canvas/projection.js";
|
|
2
|
+
/** Controller transport used while reconciling notes; tests replace the renderer round-trip. */
|
|
3
|
+
export interface CommentProjectionTransport {
|
|
4
|
+
readonly projectDraftToDocument: typeof projectDraftToDocument;
|
|
5
|
+
readonly isCanvasProjectionRevisionCurrent: typeof isCanvasProjectionRevisionCurrent;
|
|
6
|
+
}
|
|
1
7
|
export declare function isReadingCommentSource(doc: Document): boolean;
|
|
2
8
|
/** Serializes clean reads and restores the latest previews even if the read fails. */
|
|
3
|
-
export declare function readCommentSource<T>(doc: Document, read: () => T): Promise<T | null>;
|
|
9
|
+
export declare function readCommentSource<T>(doc: Document, read: () => T, transport?: CommentProjectionTransport): Promise<T | null>;
|
|
4
10
|
/** Changed, uniquely located elements resolve after handoff; missing and ambiguous targets remain. */
|
|
5
|
-
export declare function reconcileComments(doc: Document): Promise<
|
|
11
|
+
export declare function reconcileComments(doc: Document, transport?: CommentProjectionTransport): Promise<number>;
|
|
@@ -1,25 +1,29 @@
|
|
|
1
|
-
import { getDraftChanges } from "../
|
|
1
|
+
import { getDraftChanges } from "../drafts/store.js";
|
|
2
2
|
import { documentTarget, targetKey } from "../drafts/model.js";
|
|
3
3
|
import { isCanvasProjectionRevisionCurrent, projectDraftToDocument } from "../canvas/projection.js";
|
|
4
4
|
import { commentFingerprint, commentViewport, resolveCommentElement } from "./element.js";
|
|
5
5
|
import { commentRoute, getCommentClearRevision, getComments, removeComment } from "./store.js";
|
|
6
6
|
const documentReads = new WeakMap();
|
|
7
7
|
const readingDocuments = new WeakSet();
|
|
8
|
+
const controllerTransport = {
|
|
9
|
+
projectDraftToDocument,
|
|
10
|
+
isCanvasProjectionRevisionCurrent,
|
|
11
|
+
};
|
|
8
12
|
export function isReadingCommentSource(doc) { return readingDocuments.has(doc); }
|
|
9
13
|
/** Serializes clean reads and restores the latest previews even if the read fails. */
|
|
10
|
-
export function readCommentSource(doc, read) {
|
|
14
|
+
export function readCommentSource(doc, read, transport = controllerTransport) {
|
|
11
15
|
const previous = documentReads.get(doc) ?? Promise.resolve();
|
|
12
16
|
const operation = previous.catch(() => undefined).then(async () => {
|
|
13
17
|
readingDocuments.add(doc);
|
|
14
18
|
try {
|
|
15
|
-
const revision = await projectDraftToDocument(doc, { changes: [], structuralChanges: [] });
|
|
16
|
-
if (revision === null || !isCanvasProjectionRevisionCurrent(doc, revision))
|
|
19
|
+
const revision = await transport.projectDraftToDocument(doc, { changes: [], structuralChanges: [] });
|
|
20
|
+
if (revision === null || !transport.isCanvasProjectionRevisionCurrent(doc, revision))
|
|
17
21
|
return null;
|
|
18
22
|
return read();
|
|
19
23
|
}
|
|
20
24
|
finally {
|
|
21
25
|
try {
|
|
22
|
-
await projectDraftToDocument(doc, getDraftChanges(targetKey(documentTarget(doc.location.href))));
|
|
26
|
+
await transport.projectDraftToDocument(doc, getDraftChanges(targetKey(documentTarget(doc.location.href))));
|
|
23
27
|
// Deliver projection mutation records before accepting another source signal.
|
|
24
28
|
await new Promise((resolve) => setTimeout(resolve, 0));
|
|
25
29
|
}
|
|
@@ -32,21 +36,25 @@ export function readCommentSource(doc, read) {
|
|
|
32
36
|
return operation;
|
|
33
37
|
}
|
|
34
38
|
/** Changed, uniquely located elements resolve after handoff; missing and ambiguous targets remain. */
|
|
35
|
-
export async function reconcileComments(doc) {
|
|
39
|
+
export async function reconcileComments(doc, transport = controllerTransport) {
|
|
36
40
|
const revision = getCommentClearRevision();
|
|
37
41
|
const sent = getComments().filter((item) => item.handedOff && item.route === commentRoute(doc));
|
|
38
42
|
if (sent.length === 0)
|
|
39
|
-
return;
|
|
43
|
+
return 0;
|
|
40
44
|
const resolved = await readCommentSource(doc, () => sent.filter((item) => {
|
|
41
45
|
if (item.viewport !== commentViewport(doc))
|
|
42
46
|
return false;
|
|
43
47
|
const element = resolveCommentElement(doc, item.target);
|
|
44
48
|
return element !== null && commentFingerprint(element) !== item.baseline;
|
|
45
|
-
}));
|
|
49
|
+
}), transport);
|
|
46
50
|
if (revision !== getCommentClearRevision())
|
|
47
|
-
return;
|
|
51
|
+
return 0;
|
|
52
|
+
let removed = 0;
|
|
48
53
|
for (const item of resolved ?? []) {
|
|
49
|
-
if (getComments().some((current) => current.id === item.id && current.note === item.note && current.handedOff))
|
|
50
|
-
|
|
54
|
+
if (!getComments().some((current) => current.id === item.id && current.note === item.note && current.handedOff))
|
|
55
|
+
continue;
|
|
56
|
+
removeComment(item.id);
|
|
57
|
+
removed += 1;
|
|
51
58
|
}
|
|
59
|
+
return removed;
|
|
52
60
|
}
|
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
import type { ReactElement } from "react";
|
|
2
2
|
import type { SelectedElement } from "../selection/selectionStore.js";
|
|
3
|
+
import { useChanges } from "../drafts/store.js";
|
|
4
|
+
import type { ComponentPropContract, EditableComponentTarget } from "./types.js";
|
|
5
|
+
export interface ComponentPropsView {
|
|
6
|
+
target: EditableComponentTarget;
|
|
7
|
+
visibleProps: ComponentPropContract[];
|
|
8
|
+
changes: ReturnType<typeof useChanges>;
|
|
9
|
+
}
|
|
10
|
+
export declare function useComponentProps(selected: SelectedElement | null): ComponentPropsView | null;
|
|
3
11
|
export declare function ComponentPropsSection({ selected }: {
|
|
4
12
|
selected: SelectedElement;
|
|
5
13
|
}): ReactElement | null;
|