nudge-ui 0.2.5 → 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 +0 -1
- package/dist/client.mjs +238 -122
- 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 +13 -64
- package/dist/hosts/projectBridge.d.ts +0 -2
- package/dist/hosts/projectBridge.js +0 -2
- 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 +1 -6
- package/dist/inspector/agent/activity.d.ts +1 -1
- package/dist/inspector/agent/activity.js +1 -1
- package/dist/inspector/agent/client.d.ts +2 -26
- package/dist/inspector/agent/client.js +17 -64
- package/dist/inspector/agent/connectionStatus.d.ts +0 -1
- package/dist/inspector/agent/connectionStatus.js +0 -1
- package/dist/inspector/agent/httpTransport.d.ts +0 -8
- package/dist/inspector/agent/httpTransport.js +21 -39
- package/dist/inspector/agent/protocol.d.ts +1 -10
- package/dist/inspector/agent/protocol.js +1 -9
- package/dist/inspector/agent/verification.d.ts +2 -19
- package/dist/inspector/agent/verification.js +7 -43
- package/dist/inspector/boot.d.ts +3 -1
- package/dist/inspector/boot.js +12 -20
- package/dist/inspector/canvas/AgentActivityOverlay.d.ts +1 -1
- package/dist/inspector/canvas/AgentActivityOverlay.js +1 -1
- package/dist/inspector/canvas/CanvasCard.js +7 -14
- package/dist/inspector/canvas/CanvasElementOverlay.js +117 -50
- package/dist/inspector/canvas/CanvasWorkspace.js +15 -29
- package/dist/inspector/canvas/PageCard.d.ts +0 -1
- package/dist/inspector/canvas/PageCard.js +0 -1
- package/dist/inspector/canvas/SketchToolOptions.d.ts +0 -1
- package/dist/inspector/canvas/SketchToolOptions.js +0 -6
- package/dist/inspector/canvas/ToolOptionsDrawer.d.ts +1 -6
- package/dist/inspector/canvas/ToolOptionsDrawer.js +2 -8
- package/dist/inspector/canvas/activeCanvasDocument.d.ts +0 -2
- 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/canvasFrame.d.ts +2 -6
- package/dist/inspector/canvas/canvasFrame.js +1 -2
- package/dist/inspector/canvas/canvasResize.d.ts +1 -6
- package/dist/inspector/canvas/canvasResize.js +1 -6
- package/dist/inspector/canvas/canvasStore.d.ts +4 -12
- package/dist/inspector/canvas/canvasStore.js +12 -26
- package/dist/inspector/canvas/frameConnection.d.ts +1 -7
- 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 +5 -40
- package/dist/inspector/canvas/frameProtocol.js +1 -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 +1 -6
- package/dist/inspector/canvas/pageSurface.js +1 -6
- package/dist/inspector/canvas/projection.d.ts +4 -25
- package/dist/inspector/canvas/projection.js +22 -72
- package/dist/inspector/canvas/rendererBootstrap.d.ts +8 -1
- package/dist/inspector/canvas/rendererBootstrap.js +6 -14
- package/dist/inspector/canvas/rendererCidIndex.d.ts +0 -5
- package/dist/inspector/canvas/rendererCidIndex.js +0 -5
- package/dist/inspector/canvas/rendererElementSelector.js +29 -27
- package/dist/inspector/canvas/rendererMessageRouter.d.ts +0 -1
- package/dist/inspector/canvas/rendererMessageRouter.js +0 -1
- package/dist/inspector/canvas/rendererSelectionProxy.d.ts +1 -5
- package/dist/inspector/canvas/rendererSelectionProxy.js +2 -7
- package/dist/inspector/canvas/rendererStylesheet.d.ts +0 -1
- package/dist/inspector/canvas/rendererStylesheet.js +9 -2
- package/dist/inspector/canvas/resizeHandleScale.d.ts +1 -10
- package/dist/inspector/canvas/resizeHandleScale.js +1 -10
- package/dist/inspector/canvas/sessionStore.d.ts +1 -7
- package/dist/inspector/canvas/sessionStore.js +21 -34
- package/dist/inspector/canvas/staleChangeDetector.js +1 -4
- 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.js +2 -1
- package/dist/inspector/changes/draftPreview.d.ts +1 -6
- package/dist/inspector/changes/draftPreview.js +15 -30
- package/dist/inspector/changes/editModel.d.ts +3 -13
- package/dist/inspector/changes/editModel.js +1 -2
- package/dist/inspector/changes/managedStyleProjection.js +4 -14
- 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 +4 -20
- 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 +3 -10
- package/dist/inspector/clientManifest.d.ts +17 -6
- package/dist/inspector/clientManifest.js +16 -3
- package/dist/inspector/comments/CommentsOverlay.js +48 -7
- 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 +1 -1
- package/dist/inspector/comments/verification.d.ts +8 -2
- package/dist/inspector/comments/verification.js +18 -10
- package/dist/inspector/componentSemantics/ComponentPropsSection.d.ts +8 -0
- package/dist/inspector/componentSemantics/ComponentPropsSection.js +10 -7
- package/dist/inspector/componentSemantics/adapterRegistry.d.ts +2 -9
- package/dist/inspector/componentSemantics/adapterRegistry.js +2 -9
- 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 +1 -9
- package/dist/inspector/componentSemantics/textBinding.js +16 -42
- 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 +7 -21
- package/dist/inspector/drafts/draftStore.js +15 -5
- package/dist/inspector/drafts/model.d.ts +7 -15
- package/dist/inspector/drafts/model.js +0 -2
- package/dist/inspector/drafts/store.d.ts +1 -8
- package/dist/inspector/drafts/store.js +3 -10
- package/dist/inspector/editScope.d.ts +0 -1
- package/dist/inspector/editScope.js +0 -1
- 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 +2 -8
- package/dist/inspector/inline-text/inlineTextEditor.js +26 -79
- package/dist/inspector/inline-text/inlineTextLifecycle.js +1 -6
- package/dist/inspector/inline-text/textEditChange.d.ts +0 -1
- package/dist/inspector/inspection/bridge.d.ts +2 -6
- package/dist/inspector/inspection/bridge.js +4 -12
- package/dist/inspector/inspection/browserCssInspection.d.ts +4 -11
- package/dist/inspector/inspection/browserCssInspection.js +4 -8
- package/dist/inspector/inspection/browserCssInspectionRegistry.d.ts +0 -7
- package/dist/inspector/inspection/browserCssInspectionRegistry.js +1 -16
- 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 +5 -21
- package/dist/inspector/iterations/capture.d.ts +0 -1
- package/dist/inspector/iterations/capture.js +4 -9
- package/dist/inspector/iterations/client.d.ts +0 -1
- package/dist/inspector/iterations/client.js +0 -1
- package/dist/inspector/iterations/coordinator.d.ts +0 -1
- package/dist/inspector/iterations/coordinator.js +0 -1
- package/dist/inspector/iterations/prompt.d.ts +0 -1
- package/dist/inspector/iterations/prompt.js +0 -1
- 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 +2 -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 +4 -13
- package/dist/inspector/pageInspector.js +25 -32
- package/dist/inspector/projection/cssEscapes.d.ts +0 -1
- package/dist/inspector/projection/cssEscapes.js +2 -4
- package/dist/inspector/projection/draftProjection.d.ts +2 -14
- package/dist/inspector/projection/draftProjection.js +1 -8
- package/dist/inspector/projection/managedStylesheet.d.ts +1 -7
- package/dist/inspector/projection/managedStylesheet.js +4 -22
- package/dist/inspector/projection/renderedInstance.d.ts +5 -28
- package/dist/inspector/projection/renderedInstance.js +6 -32
- package/dist/inspector/projection/structuralProjection.d.ts +7 -39
- package/dist/inspector/projection/structuralProjection.js +17 -52
- package/dist/inspector/projection/textProjection.d.ts +2 -14
- package/dist/inspector/projection/textProjection.js +17 -70
- 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 -9
- package/dist/inspector/prompt/clipboardHandoff.js +1 -9
- package/dist/inspector/prompt/generatePrompt.d.ts +1 -1
- package/dist/inspector/prompt/generatePrompt.js +10 -25
- package/dist/inspector/prompt/promptSettings.d.ts +0 -3
- package/dist/inspector/prompt/promptSettings.js +0 -3
- 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 +1 -7
- package/dist/inspector/runtime/inspectorStorage.js +1 -6
- package/dist/inspector/runtime/ownedStylesheets.d.ts +2 -8
- package/dist/inspector/runtime/ownedStylesheets.js +2 -8
- package/dist/inspector/runtime/runtimeConfig.d.ts +12 -86
- package/dist/inspector/runtime/runtimeConfig.js +9 -50
- package/dist/inspector/runtime/runtimeIdentityClaims.d.ts +3 -13
- package/dist/inspector/runtime/runtimeIdentityClaims.js +9 -19
- package/dist/inspector/runtime/staticHtmlRuntimeIdentity.d.ts +4 -36
- package/dist/inspector/runtime/staticHtmlRuntimeIdentity.js +7 -40
- package/dist/inspector/runtime/useRuntimeConfig.d.ts +1 -8
- package/dist/inspector/runtime/useRuntimeConfig.js +1 -8
- package/dist/inspector/selection/editScope.d.ts +1 -7
- package/dist/inspector/selection/editScope.js +2 -12
- 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 +5 -5
- package/dist/inspector/shell/ChangesLog.js +3 -4
- package/dist/inspector/shell/CopyPromptButton.d.ts +2 -1
- package/dist/inspector/shell/CopyPromptButton.js +12 -11
- 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.js +26 -48
- 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 +0 -5
- 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 +1 -4
- package/dist/inspector/shell/interactionStatePreview.js +3 -8
- package/dist/inspector/shell/originalPreview.d.ts +1 -6
- package/dist/inspector/shell/originalPreview.js +1 -6
- package/dist/inspector/shell/stateValue.d.ts +1 -2
- package/dist/inspector/shell/stateValue.js +2 -5
- package/dist/inspector/shell/styleState.d.ts +1 -2
- package/dist/inspector/shell/styleState.js +1 -2
- package/dist/inspector/sketch/SketchEditor.js +0 -1
- package/dist/inspector/sketch/SketchFrameOverlay.js +8 -12
- package/dist/inspector/sketch/SketchOverlay.js +5 -6
- package/dist/inspector/sketch/SketchPromptPanel.d.ts +0 -1
- package/dist/inspector/sketch/SketchPromptPanel.js +0 -1
- package/dist/inspector/sketch/SketchWorkspace.js +2 -4
- package/dist/inspector/sketch/capture.d.ts +12 -3
- package/dist/inspector/sketch/capture.js +12 -11
- package/dist/inspector/sketch/copySketch.d.ts +1 -7
- package/dist/inspector/sketch/copySketch.js +2 -11
- package/dist/inspector/sketch/drawingTools.d.ts +1 -3
- package/dist/inspector/sketch/drawingTools.js +1 -2
- package/dist/inspector/sketch/frameHeading.d.ts +1 -7
- package/dist/inspector/sketch/frameHeading.js +1 -8
- package/dist/inspector/sketch/freehand.d.ts +0 -1
- package/dist/inspector/sketch/freehand.js +0 -1
- package/dist/inspector/sketch/geometry.d.ts +1 -6
- package/dist/inspector/sketch/geometry.js +1 -6
- package/dist/inspector/sketch/handoff.js +0 -1
- package/dist/inspector/sketch/history.d.ts +1 -5
- package/dist/inspector/sketch/history.js +1 -4
- package/dist/inspector/sketch/interaction.d.ts +2 -2
- package/dist/inspector/sketch/interaction.js +2 -2
- package/dist/inspector/sketch/model.d.ts +2 -9
- package/dist/inspector/sketch/model.js +2 -19
- package/dist/inspector/sketch/persistence.d.ts +0 -1
- package/dist/inspector/sketch/persistence.js +2 -2
- package/dist/inspector/sketch/raster.d.ts +1 -4
- package/dist/inspector/sketch/raster.js +2 -8
- package/dist/inspector/sketch/store.js +2 -3
- package/dist/inspector/sketch/videoFrames.js +2 -3
- package/dist/inspector/spacing/projection.d.ts +0 -8
- package/dist/inspector/spacing/projection.js +38 -20
- package/dist/inspector/styleEditors/BackgroundEditor.js +1 -1
- package/dist/inspector/styleEditors/BorderEditor.js +1 -6
- 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 +0 -1
- 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 +1 -7
- package/dist/inspector/styleEditors/borderModel.js +2 -11
- 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 +4 -12
- 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 +19 -29
- 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 +1 -1
- package/dist/inspector/tokens/editActions.js +2 -4
- 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 +1 -5
- package/dist/inspector/tokens/resolution/containerQueryEvaluator.js +1 -5
- package/dist/inspector/tokens/resolution/cssomCollector.d.ts +4 -19
- package/dist/inspector/tokens/resolution/cssomCollector.js +151 -122
- package/dist/inspector/tokens/resolution/nestedSelectors.d.ts +1 -5
- package/dist/inspector/tokens/resolution/nestedSelectors.js +1 -5
- package/dist/inspector/tokens/resolution/ruleMatching.d.ts +4 -14
- package/dist/inspector/tokens/resolution/ruleMatching.js +121 -67
- 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 +5 -24
- package/dist/inspector/tokens/resolution.js +16 -71
- package/dist/inspector/tokens/tokenAvailability.d.ts +2 -14
- package/dist/inspector/tokens/tokenAvailability.js +6 -38
- 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/InspectorPopover.d.ts +1 -5
- package/dist/inspector/ui/InspectorPopover.js +1 -5
- 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 +0 -4
- package/dist/inspector/ui/Toast.js +0 -4
- 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 +7 -1
- package/dist/inspector/ui/customCursors.js +2 -6
- package/dist/inspector/ui/styles.js +18 -20
- package/dist/inspector/workspace/controller.js +20 -1
- package/dist/inspector/workspace/handoff.d.ts +1 -5
- package/dist/inspector/workspace/handoff.js +1 -5
- package/dist/inspector/workspace/timeline.d.ts +5 -2
- package/dist/inspector/workspace/timeline.js +0 -1
- package/dist/internal/agent-protocol.d.ts +20 -42
- package/dist/internal/agent-protocol.js +18 -35
- package/dist/nudge-ui.mjs +75 -28
- 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 +1 -6
- package/dist/project/mcpPackage.js +2 -7
- 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 +5 -4
- 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
|
@@ -60,22 +60,16 @@ export function buildManagedStyleRules(changes) {
|
|
|
60
60
|
});
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
|
-
// Source-site rules
|
|
64
|
-
// emitted afterwards so their additional marker specificity wins.
|
|
63
|
+
// Source-site rules are the default; rendered-instance rules come last so their extra marker specificity wins.
|
|
65
64
|
return [...sourceRules.values(), ...instanceRules.values()];
|
|
66
65
|
}
|
|
67
66
|
export function verifyManagedStyleProjection(change, selectedElement, ownerDocument = document) {
|
|
68
|
-
// Deferred verification must use the selection
|
|
69
|
-
// projection was committed. Reading the live selection here can make a
|
|
70
|
-
// host-document change verify against a later canvas selection (or vice
|
|
71
|
-
// versa) and manufacture a conflict for the wrong document.
|
|
67
|
+
// Deferred verification must use the selection from commit time; the live selection can belong to the wrong document and manufacture a conflict.
|
|
72
68
|
const selected = selectedElement === undefined
|
|
73
69
|
? getSelectedElement()?.domElement ?? null
|
|
74
70
|
: selectedElement;
|
|
75
71
|
const requestedValue = requestedStyleValue(change);
|
|
76
|
-
// A Canvas-only selection
|
|
77
|
-
// cannot verify it synchronously; leave its result unknown until the frame
|
|
78
|
-
// has received the canonical projection rather than claiming it is stale.
|
|
72
|
+
// A Canvas-only iframe selection cannot be verified synchronously; leave the result unknown rather than claiming it is stale.
|
|
79
73
|
if (selected && selected.ownerDocument !== ownerDocument) {
|
|
80
74
|
return null;
|
|
81
75
|
}
|
|
@@ -87,11 +81,7 @@ export function verifyManagedStyleProjection(change, selectedElement, ownerDocum
|
|
|
87
81
|
catch {
|
|
88
82
|
targets = [];
|
|
89
83
|
}
|
|
90
|
-
//
|
|
91
|
-
// preview: the reported result is exactly "first conflict ?? first target",
|
|
92
|
-
// so probing the remaining instances cannot change the outcome. A
|
|
93
|
-
// source-site selector matched by many rendered instances (one callsite,
|
|
94
|
-
// hundreds of nodes) otherwise pays a probe + important-rule scan per match.
|
|
84
|
+
// Early exit is safe: the result is "first conflict ?? first target", so later probes cannot change it.
|
|
95
85
|
let firstApplied = null;
|
|
96
86
|
let previewResult = null;
|
|
97
87
|
for (const target of targets) {
|
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
import type { TokenEntry } from "../../css/model/index.js";
|
|
2
2
|
import { type ChangeRecord } from "./types.js";
|
|
3
|
-
/**
|
|
4
|
-
* The CSS value a token swap writes into the managed stylesheet and the
|
|
5
|
-
* prompt must describe: an adapter-provided literal when present, otherwise a
|
|
6
|
-
* var() reference on the authored cssName (falling back to the entry name).
|
|
7
|
-
*/
|
|
8
3
|
export declare function tokenReference(token: TokenEntry): string;
|
|
9
4
|
export declare function changeKey(change: ChangeRecord): string;
|
|
10
5
|
export declare function mergeChange(current: ChangeRecord[], incoming: ChangeRecord): ChangeRecord[];
|
|
@@ -1,9 +1,4 @@
|
|
|
1
1
|
import { isComponentChange, isElementChange, isTextContentChange, isTokenChange, } from "./types.js";
|
|
2
|
-
/**
|
|
3
|
-
* The CSS value a token swap writes into the managed stylesheet and the
|
|
4
|
-
* prompt must describe: an adapter-provided literal when present, otherwise a
|
|
5
|
-
* var() reference on the authored cssName (falling back to the entry name).
|
|
6
|
-
*/
|
|
7
2
|
export function tokenReference(token) {
|
|
8
3
|
return token.cssValue ?? `var(${token.cssName ?? token.name})`;
|
|
9
4
|
}
|
|
@@ -27,9 +22,7 @@ export function changeKey(change) {
|
|
|
27
22
|
].join("\u0000");
|
|
28
23
|
}
|
|
29
24
|
if (isTextContentChange(change)) {
|
|
30
|
-
//
|
|
31
|
-
// part of the durable evidence: two outputs at one source site may have
|
|
32
|
-
// different initial copy and must remain distinct canonical intents.
|
|
25
|
+
// Two outputs at one source site may have different initial copy, so beforeText keeps them distinct.
|
|
33
26
|
return [
|
|
34
27
|
"text-content",
|
|
35
28
|
change.target.sourceSite.cid,
|
|
@@ -14,26 +14,16 @@ export interface PreviewDiagnostic extends PreviewAttempt {
|
|
|
14
14
|
readonly changeKey: string;
|
|
15
15
|
readonly result: PreviewResult;
|
|
16
16
|
}
|
|
17
|
-
/** Returns the stable host-document identity for this inspector lifetime. */
|
|
18
17
|
export declare function getHostPreviewDocument(): PreviewDocument;
|
|
19
|
-
/** Starts or replaces the live session for one logical document. */
|
|
20
18
|
export declare function startPreviewDocumentSession(document: PreviewDocument): void;
|
|
21
|
-
/**
|
|
19
|
+
/** Late results from an invalidated session are rejected. */
|
|
22
20
|
export declare function invalidatePreviewDocumentSession(logicalDocument: string, sessionId?: string): void;
|
|
23
|
-
/** Opens a verification attempt for the currently active document session. */
|
|
24
21
|
export declare function beginPreviewAttempt(document: PreviewDocument, revision?: number): PreviewAttempt | null;
|
|
25
|
-
/** Publishes only a result from the active revision, session, and attempt. */
|
|
26
22
|
export declare function publishPreviewDiagnostic(attempt: PreviewAttempt, changeKey: string, result: PreviewResult): boolean;
|
|
27
|
-
/** Removes diagnostics for the supplied canonical keys across live documents. */
|
|
28
23
|
export declare function clearPreviewDiagnostics(changeKeys?: Iterable<string>): void;
|
|
29
|
-
/** Notifies consumers when verification state changes without a result. */
|
|
30
24
|
export declare function notifyPreviewDiagnostics(): void;
|
|
31
25
|
export declare function getPreviewDiagnostic(changeKey: string, logicalDocument?: string, draftId?: string): PreviewDiagnostic | undefined;
|
|
32
|
-
/**
|
|
33
|
-
* Host-first read across live documents. The per-document store is observable
|
|
34
|
-
* here so a Canvas-only conflict is not write-only; host remains the default
|
|
35
|
-
* for single-document consumers.
|
|
36
|
-
*/
|
|
26
|
+
/** Also reads non-host documents so Canvas-only conflicts are not write-only. */
|
|
37
27
|
export declare function getAnyPreviewDiagnostic(changeKey: string): PreviewDiagnostic | undefined;
|
|
38
28
|
export declare function subscribePreviewDiagnostics(listener: () => void): () => void;
|
|
39
29
|
export declare function getPreviewDiagnosticRevision(): number;
|
|
@@ -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,12 +1,8 @@
|
|
|
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 element has no authored source location.
|
|
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;
|
|
@@ -16,11 +12,10 @@ export interface RuntimeElementEvidence {
|
|
|
16
12
|
domPath?: string | null;
|
|
17
13
|
elementId?: string | null;
|
|
18
14
|
}
|
|
19
|
-
/** Bounded authored facts for one annotated element. */
|
|
20
15
|
export interface SourceElementEvidence {
|
|
21
16
|
tagName: string;
|
|
22
17
|
props: string | null;
|
|
23
|
-
/**
|
|
18
|
+
/** Omitted by older saved changes. */
|
|
24
19
|
text?: string | null;
|
|
25
20
|
ariaLabel?: string | null;
|
|
26
21
|
domPath?: string | null;
|
|
@@ -35,7 +30,6 @@ export interface ElementChangeRecord {
|
|
|
35
30
|
column?: number;
|
|
36
31
|
selector: string;
|
|
37
32
|
property: string;
|
|
38
|
-
/** CSSOM-declared source context that the inspector projection came from. */
|
|
39
33
|
sourceProperty?: string;
|
|
40
34
|
/** Best-effort CSSOM serialization; not an exact source-text quote. */
|
|
41
35
|
sourceAuthoredValue?: string;
|
|
@@ -48,12 +42,11 @@ export interface ElementChangeRecord {
|
|
|
48
42
|
line: number;
|
|
49
43
|
component: string;
|
|
50
44
|
};
|
|
51
|
-
/** Present when the selected element has a document-local runtime identity. */
|
|
52
45
|
runtimeEvidence?: RuntimeElementEvidence;
|
|
53
46
|
/** Authored facts that relocate the source site after its position shifts. */
|
|
54
47
|
sourceEvidence?: SourceElementEvidence;
|
|
55
48
|
scope?: EditScope;
|
|
56
|
-
/**
|
|
49
|
+
/** Presentation only; absent from older edits. */
|
|
57
50
|
sourceInstanceCount?: number;
|
|
58
51
|
/** Durable, controller-owned target for one rendered output. */
|
|
59
52
|
instanceOverride?: RenderedInstanceOverride;
|
|
@@ -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
|
|
@@ -15,6 +15,8 @@ import { commentRoute, getCommentClearRevision, isCommentToolActive, removeComme
|
|
|
15
15
|
import { isReadingCommentSource, readCommentSource, reconcileComments } from "./verification.js";
|
|
16
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
17
|
import { InspectorStyle } from "../ui/InspectorStyle.js";
|
|
18
|
+
const CHECK_DELAY_MS = 450;
|
|
19
|
+
const MAX_CHECK_DELAY_MS = 8_000;
|
|
18
20
|
function sameAnchor(left, right) {
|
|
19
21
|
return left?.left === right?.left && left?.top === right?.top;
|
|
20
22
|
}
|
|
@@ -149,6 +151,35 @@ export function CommentsOverlay() {
|
|
|
149
151
|
useEffect(() => {
|
|
150
152
|
if (!comments.some((comment) => comment.handedOff))
|
|
151
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
|
+
};
|
|
152
183
|
const refresh = () => {
|
|
153
184
|
const documents = new Set([...getRegisteredFrames()].map(([, iframe]) => iframe.contentDocument).filter((doc) => doc !== null));
|
|
154
185
|
for (const [doc, observation] of observations.current) {
|
|
@@ -173,21 +204,31 @@ export function CommentsOverlay() {
|
|
|
173
204
|
return false;
|
|
174
205
|
return true;
|
|
175
206
|
});
|
|
176
|
-
if (
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
clearTimeout(observation.timer);
|
|
180
|
-
observation.timer = setTimeout(() => { void reconcileComments(doc).catch(() => undefined); }, 200);
|
|
181
|
-
}), timer: null };
|
|
207
|
+
if (sourceChanged)
|
|
208
|
+
schedule(doc, observation);
|
|
209
|
+
}), timer: null, checking: false, pending: false, interval: CHECK_DELAY_MS, lastCheckEndedAt: -Infinity };
|
|
182
210
|
observation.observer.observe(doc.documentElement, { subtree: true, childList: true, characterData: true, attributes: true });
|
|
183
211
|
observations.current.set(doc, observation);
|
|
184
|
-
|
|
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);
|
|
185
224
|
}
|
|
186
225
|
};
|
|
187
226
|
refresh();
|
|
188
227
|
const timer = setInterval(refresh, 500);
|
|
228
|
+
window.addEventListener("focus", returned);
|
|
189
229
|
return () => {
|
|
190
230
|
clearInterval(timer);
|
|
231
|
+
window.removeEventListener("focus", returned);
|
|
191
232
|
for (const observation of observations.current.values()) {
|
|
192
233
|
observation.observer.disconnect();
|
|
193
234
|
if (observation.timer)
|
|
@@ -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;
|
|
@@ -94,7 +94,7 @@ export function clearComments(target) {
|
|
|
94
94
|
const cleared = new Set((target ? getCommentsForTarget(target) : getComments()).map((comment) => comment.id));
|
|
95
95
|
publish(getComments().filter((comment) => !cleared.has(comment.id)));
|
|
96
96
|
}
|
|
97
|
-
/**
|
|
97
|
+
/** Marks only exact id+note matches, so an edited note is not marked handed off. */
|
|
98
98
|
export function markCommentsHandedOff(sent) {
|
|
99
99
|
publish(getComments().map((item) => sent.some((candidate) => candidate.id === item.id && candidate.note === item.note)
|
|
100
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>;
|
|
@@ -5,21 +5,25 @@ import { commentFingerprint, commentViewport, resolveCommentElement } from "./el
|
|
|
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;
|