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,16 +1,37 @@
|
|
|
1
|
-
import { isComponentChange, isElementChange, isTextContentChange, isTokenChange } from "../changes/
|
|
2
|
-
import { canonicalizeChanges,
|
|
3
|
-
import { getAnyPreviewDiagnostic } from "../changes/previewDiagnostics.js";
|
|
1
|
+
import { isComponentChange, isElementChange, isTextContentChange, isTokenChange } from "../changes/types.js";
|
|
2
|
+
import { canonicalizeChanges, tokenReference } from "../changes/model.js";
|
|
4
3
|
import { formatComponentPropBaseline, formatComponentPropValue, } from "../componentSemantics/changeModel.js";
|
|
5
4
|
import { boundRuntimeEvidence, isRuntimeGeneratedSource, normalizeRuntimeTag, normalizeRuntimeText, } from "../runtime/staticHtmlRuntimeIdentity.js";
|
|
6
5
|
import { getSourceCoordinatePolicy } from "../runtime/runtimeConfig.js";
|
|
7
6
|
import { DEFAULT_CUSTOM_INSTRUCTIONS } from "./promptSettings.js";
|
|
7
|
+
import { PROMPT_TITLE } from "./promptDocument.js";
|
|
8
8
|
import { getCommentsForTarget } from "../comments/store.js";
|
|
9
9
|
import { documentTarget } from "../drafts/model.js";
|
|
10
10
|
const EMPTY_SENTINEL = "<!-- No changes to export -->\n\nThe changes log is empty. Make a change in the Nudge UI inspector first.";
|
|
11
|
+
/** Labels describe the observed tag, without guessing its role in the page. */
|
|
12
|
+
function elementLabel(tag) {
|
|
13
|
+
const normalized = normalizeRuntimeTag(tag);
|
|
14
|
+
const labels = new Map([
|
|
15
|
+
["p", "Paragraph"], ["button", "Button"], ["a", "Link"], ["img", "Image"], ["input", "Input"],
|
|
16
|
+
["textarea", "Text area"], ["select", "Select"], ["form", "Form"], ["nav", "Navigation"], ["section", "Section"],
|
|
17
|
+
]);
|
|
18
|
+
const label = /^h[1-6]$/.test(normalized) ? "Heading" : labels.get(normalized) ?? "Element";
|
|
19
|
+
return normalized ? `${label} (${promptText(`<${normalized}>`)})` : label;
|
|
20
|
+
}
|
|
21
|
+
/** Runtime IDs identify one DOM element; authored sites can render several items. */
|
|
22
|
+
function elementPromptKey(cid, src, scope, locator) {
|
|
23
|
+
if (!src || isRuntimeGeneratedSource(src))
|
|
24
|
+
return JSON.stringify(["runtime", cid]);
|
|
25
|
+
return JSON.stringify([cid, src, scope, scope === "rendered-instance" ? [
|
|
26
|
+
locator?.occurrence, locator?.props, locator?.ariaLabel ?? null, locator?.invocation?.callsiteId ?? null,
|
|
27
|
+
] : null]);
|
|
28
|
+
}
|
|
29
|
+
function refPromptKey(ref) {
|
|
30
|
+
return elementPromptKey(ref.sourceSite.cid, ref.sourceSite.src, "rendered-instance", ref.locator);
|
|
31
|
+
}
|
|
11
32
|
function renderPrompt(sections, customInstructions) {
|
|
12
33
|
const lines = [
|
|
13
|
-
|
|
34
|
+
PROMPT_TITLE,
|
|
14
35
|
];
|
|
15
36
|
for (const section of sections) {
|
|
16
37
|
const content = [...section.lines];
|
|
@@ -47,6 +68,7 @@ function groupElementChanges(changes) {
|
|
|
47
68
|
line: change.source.line || change.line,
|
|
48
69
|
column: change.column ?? 0,
|
|
49
70
|
runtimeEvidence: change.runtimeEvidence,
|
|
71
|
+
sourceEvidence: change.sourceEvidence,
|
|
50
72
|
instanceOverride,
|
|
51
73
|
changes: [],
|
|
52
74
|
};
|
|
@@ -56,28 +78,22 @@ function groupElementChanges(changes) {
|
|
|
56
78
|
}
|
|
57
79
|
return [...map.values()];
|
|
58
80
|
}
|
|
59
|
-
function conflictSuffix(rec) {
|
|
60
|
-
const result = getAnyPreviewDiagnostic(changeKey(rec))?.result;
|
|
61
|
-
if (!result || result.status === "applied")
|
|
62
|
-
return "";
|
|
63
|
-
return ` — preview conflict: browser computed \`${result.computedValue || "(no value)"}\` (${result.reason ?? "cascade conflict"}); implement the requested value without assuming \`!important\``;
|
|
64
|
-
}
|
|
65
81
|
function elementChangeLine(rec) {
|
|
82
|
+
const state = rec.state && rec.state !== "base" ? ` (${rec.state})` : "";
|
|
83
|
+
const property = `\`${rec.property}\`${state}`;
|
|
66
84
|
if (rec.newToken && rec.oldToken) {
|
|
67
|
-
return `-
|
|
85
|
+
return `- **Change:** ${property}: \`${rec.oldToken.name}\` → \`${rec.newToken.name}\``;
|
|
68
86
|
}
|
|
69
87
|
if (rec.newToken) {
|
|
70
88
|
const before = rec.oldRawValue !== undefined ? `\`${rec.oldRawValue}\` → ` : "";
|
|
71
|
-
//
|
|
72
|
-
|
|
73
|
-
// CSS for adapter tokens whose names are not custom-property names.
|
|
74
|
-
return `- \`${rec.property}\`: ${before}\`${tokenReference(rec.newToken)}\`${conflictSuffix(rec)}`;
|
|
89
|
+
// Adapter token names are not always custom-property names, so emit the literal the stylesheet wrote.
|
|
90
|
+
return `- **Change:** ${property}: ${before}\`${tokenReference(rec.newToken)}\``;
|
|
75
91
|
}
|
|
76
92
|
if (rec.rawValue !== undefined) {
|
|
77
93
|
const before = rec.oldRawValue !== undefined ? `\`${rec.oldRawValue}\` → ` : "";
|
|
78
|
-
return `-
|
|
94
|
+
return `- **Change:** ${property}: ${before}\`${rec.rawValue}\``;
|
|
79
95
|
}
|
|
80
|
-
return `-
|
|
96
|
+
return `- **Change:** ${property}: (no value)`;
|
|
81
97
|
}
|
|
82
98
|
function sourceIntentLine(rec) {
|
|
83
99
|
if (!rec.sourceProperty || rec.sourceProperty === rec.property)
|
|
@@ -86,27 +102,22 @@ function sourceIntentLine(rec) {
|
|
|
86
102
|
return ` - Source declaration (CSSOM): \`${rec.sourceProperty}${authored}\`; preview edit uses physical \`${rec.property}\``;
|
|
87
103
|
}
|
|
88
104
|
function tokenChangeLine(rec) {
|
|
89
|
-
return `- \`${rec.tokenName}\` (${rec.contextLabel}, ${rec.file}:${rec.line}): \`${rec.oldRawValue}\` → \`${rec.rawValue}
|
|
105
|
+
return `- **Change:** \`${rec.tokenName}\` (${rec.contextLabel}, ${rec.file}:${rec.line}): \`${rec.oldRawValue}\` → \`${rec.rawValue}\``;
|
|
90
106
|
}
|
|
91
107
|
function componentChangeLine(rec) {
|
|
92
108
|
const sourceGuidance = rec.authoredAs === "literal"
|
|
93
109
|
? rec.property === "children"
|
|
94
110
|
? "replace the literal child text"
|
|
95
|
-
: "
|
|
111
|
+
: ""
|
|
96
112
|
: rec.authoredAs === "default"
|
|
97
113
|
? "add the prop at this invocation"
|
|
98
114
|
: `preserve the authored ${rec.authoredAs} and update its source logic`;
|
|
99
|
-
|
|
100
|
-
? "this rendered item only"
|
|
101
|
-
: "all outputs at this source site";
|
|
102
|
-
return `- \`${rec.property}\`: \`${formatComponentPropBaseline(rec.before)}\` → \`${formatComponentPropValue(rec.after)}\` — ${sourceGuidance}; scope: ${scope}`;
|
|
115
|
+
return `- **Change:** \`${rec.property}\`: \`${formatComponentPropBaseline(rec.before)}\` → \`${formatComponentPropValue(rec.after)}\`${sourceGuidance ? ` — ${sourceGuidance}` : ""}`;
|
|
103
116
|
}
|
|
104
|
-
function
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
return "preserve the expression and update its source logic";
|
|
109
|
-
return "update the source that produces this rendered copy";
|
|
117
|
+
function editScopeLine(scope) {
|
|
118
|
+
return scope === "rendered-instance"
|
|
119
|
+
? " - Apply to this selected item only; keep other instances unchanged."
|
|
120
|
+
: " - Apply to all items rendered at this source location.";
|
|
110
121
|
}
|
|
111
122
|
/** Keep arbitrary rendered copy valid inside the Markdown prompt. */
|
|
112
123
|
function promptText(value) {
|
|
@@ -116,35 +127,62 @@ function promptText(value) {
|
|
|
116
127
|
const fence = "~".repeat(Math.max(3, longestTildeRun + 1));
|
|
117
128
|
return `${fence}text\n${value}\n${fence}`;
|
|
118
129
|
}
|
|
119
|
-
function
|
|
120
|
-
const
|
|
121
|
-
? `${target.sourceSite.cid} (source unknown; runtime-created DOM)`
|
|
122
|
-
: `${target.sourceSite.cid} (\`${target.sourceSite.src}\`)`;
|
|
123
|
-
const lines = [
|
|
124
|
-
` - Source site: ${sourceLabel}`,
|
|
125
|
-
];
|
|
126
|
-
const props = boundRuntimeEvidence(target.props);
|
|
127
|
-
const ariaLabel = boundRuntimeEvidence(target.ariaLabel);
|
|
128
|
-
if (props)
|
|
129
|
-
lines.push(` - Props evidence: ${promptText(props)}`);
|
|
130
|
-
if (ariaLabel)
|
|
131
|
-
lines.push(` - Accessible name evidence: ${promptText(ariaLabel)}`);
|
|
132
|
-
return lines;
|
|
133
|
-
}
|
|
134
|
-
function textScopeLines(change) {
|
|
135
|
-
const scope = change.scope === "source-site" ? "source site / all outputs" : "this rendered item only";
|
|
136
|
-
const lines = [` - Scope: ${scope}`];
|
|
130
|
+
function textBindingLines(change, sourceLocation) {
|
|
131
|
+
const lines = [];
|
|
137
132
|
if (change.evidence) {
|
|
138
|
-
|
|
133
|
+
const evidence = change.evidence;
|
|
134
|
+
const location = evidence.callsiteId === sourceLocation ? "" : ` at ${promptText(evidence.callsiteId)}`;
|
|
135
|
+
lines.push(` - Text source: ${promptText(`${evidence.componentName}.${evidence.property}`)}${location} (${evidence.mountedCount} rendered instances).`);
|
|
139
136
|
}
|
|
140
137
|
return lines;
|
|
141
138
|
}
|
|
139
|
+
/** Shared presentation for captured facts; these do not change target matching. */
|
|
140
|
+
function targetEvidenceLines(evidence, example = false) {
|
|
141
|
+
const text = normalizeRuntimeText(evidence.text ?? null);
|
|
142
|
+
const ariaLabel = boundRuntimeEvidence(evidence.ariaLabel ?? null);
|
|
143
|
+
const elementId = boundRuntimeEvidence(evidence.elementId ?? null);
|
|
144
|
+
const props = boundRuntimeEvidence(evidence.props ?? null);
|
|
145
|
+
const lines = [];
|
|
146
|
+
if (elementId && !example)
|
|
147
|
+
lines.push(`- Element ID: ${promptText(elementId)}`);
|
|
148
|
+
if (text)
|
|
149
|
+
lines.push(`- ${example ? "Example text" : "Text"}: ${promptText(text)}`);
|
|
150
|
+
if (ariaLabel)
|
|
151
|
+
lines.push(`- ${example ? "Example accessible name" : "Accessible name"}: ${promptText(ariaLabel)}`);
|
|
152
|
+
if (props && props !== `id:${elementId}`)
|
|
153
|
+
lines.push(`- ${example ? "Example props" : "Props"}: ${promptText(props)}`);
|
|
154
|
+
if (evidence.domPath && !example)
|
|
155
|
+
lines.push(`- DOM path: ${promptText(evidence.domPath)}`);
|
|
156
|
+
return lines;
|
|
157
|
+
}
|
|
158
|
+
function readableTargetLabel(text, tag) {
|
|
159
|
+
if (tag)
|
|
160
|
+
return elementLabel(tag);
|
|
161
|
+
const bounded = normalizeRuntimeText(text);
|
|
162
|
+
return bounded ? `Text: ${inlineHeadingText(bounded)}` : "Element";
|
|
163
|
+
}
|
|
164
|
+
/** Use an inline code span even when copy contains Markdown delimiters. */
|
|
165
|
+
function inlineHeadingText(text) {
|
|
166
|
+
const runs = text.match(/`+/g) ?? [];
|
|
167
|
+
const delimiter = "`".repeat(Math.max(0, ...runs.map((run) => run.length)) + 1);
|
|
168
|
+
const padding = text.startsWith("`") || text.endsWith("`") ? " " : "";
|
|
169
|
+
return `${delimiter}${padding}${text}${padding}${delimiter}`;
|
|
170
|
+
}
|
|
142
171
|
function boundedEvidence(value) {
|
|
143
172
|
return boundRuntimeEvidence(value);
|
|
144
173
|
}
|
|
145
174
|
function sourceSiteLabel(ref) {
|
|
146
|
-
if (isRuntimeGeneratedSource(ref.sourceSite.src)) {
|
|
147
|
-
|
|
175
|
+
if (!ref.sourceSite.src || isRuntimeGeneratedSource(ref.sourceSite.src)) {
|
|
176
|
+
const text = boundedEvidence(ref.locator.text);
|
|
177
|
+
const ariaLabel = boundedEvidence(ref.locator.ariaLabel ?? null);
|
|
178
|
+
const props = boundedEvidence(ref.locator.props);
|
|
179
|
+
if (ariaLabel)
|
|
180
|
+
return `the element named ${promptText(ariaLabel)}`;
|
|
181
|
+
if (text)
|
|
182
|
+
return `the element with text ${promptText(text)}`;
|
|
183
|
+
if (props)
|
|
184
|
+
return `the element with props ${promptText(props)}`;
|
|
185
|
+
return "the element";
|
|
148
186
|
}
|
|
149
187
|
return `${ref.sourceSite.cid} (${ref.sourceSite.src})`;
|
|
150
188
|
}
|
|
@@ -159,32 +197,29 @@ function structuralParentIdentityKey(ref) {
|
|
|
159
197
|
locator.ariaLabel ?? null,
|
|
160
198
|
]);
|
|
161
199
|
}
|
|
162
|
-
function
|
|
163
|
-
const evidence = group.runtimeEvidence;
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
const tagName = normalizeRuntimeTag(evidence.tagName) || "unknown";
|
|
167
|
-
const text = normalizeRuntimeText(evidence.text);
|
|
168
|
-
const ariaLabel = boundRuntimeEvidence(evidence.ariaLabel);
|
|
169
|
-
const props = boundRuntimeEvidence(evidence.props);
|
|
170
|
-
const lines = [
|
|
171
|
-
" - Source: unknown; locate the JavaScript or template that creates this runtime DOM.",
|
|
172
|
-
` - Rendered element: \`<${tagName}>\``,
|
|
173
|
-
];
|
|
174
|
-
if (text)
|
|
175
|
-
lines.push(` - Text evidence: ${promptText(text)}`);
|
|
176
|
-
if (ariaLabel)
|
|
177
|
-
lines.push(` - Accessible name evidence: ${promptText(ariaLabel)}`);
|
|
178
|
-
if (props)
|
|
179
|
-
lines.push(` - Props evidence: ${promptText(props)}`);
|
|
180
|
-
return lines;
|
|
200
|
+
function elementEvidenceLines(group, example = false) {
|
|
201
|
+
const evidence = group.runtimeEvidence ?? group.sourceEvidence;
|
|
202
|
+
return evidence ? targetEvidenceLines(evidence, example)
|
|
203
|
+
: group.instanceOverride ? targetEvidenceLines(group.instanceOverride.target.locator, example) : [];
|
|
181
204
|
}
|
|
182
|
-
/**
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
205
|
+
/** Combine identical final requests for individually selected elements. */
|
|
206
|
+
function selectedStyleGroupKey(group) {
|
|
207
|
+
const requests = group.changes.map((change) => JSON.stringify([elementChangeLine(change), sourceIntentLine(change)])).sort();
|
|
208
|
+
return JSON.stringify(["selected-styles", requests]);
|
|
209
|
+
}
|
|
210
|
+
function selectedItemLine(group, sourceLocation) {
|
|
211
|
+
const facts = elementEvidenceLines(group).map((line) => line.slice(2));
|
|
212
|
+
if (sourceLocation)
|
|
213
|
+
facts.unshift(`Source: ${promptText(sourceLocation)}`);
|
|
214
|
+
const invocation = group.instanceOverride?.target.locator.invocation;
|
|
215
|
+
if (invocation)
|
|
216
|
+
facts.push(`Component usage: ${promptText(invocation.callsiteId)}`);
|
|
217
|
+
return ` - ${facts.join("; ") || "Selected element"}`;
|
|
218
|
+
}
|
|
219
|
+
function setHeading(label, tag) {
|
|
220
|
+
return tag ? `${label} (${promptText(`<${normalizeRuntimeTag(tag)}>`)})` : label;
|
|
221
|
+
}
|
|
222
|
+
/** Precision follows each element's identity origin, not the framework hint; hosts that declare nothing are exact everywhere. */
|
|
188
223
|
function hasExactAuthoredCoordinates(policy, cid, file) {
|
|
189
224
|
if (policy === null)
|
|
190
225
|
return true;
|
|
@@ -193,40 +228,26 @@ function hasExactAuthoredCoordinates(policy, cid, file) {
|
|
|
193
228
|
}
|
|
194
229
|
return policy.exactFileExtensions.some((extension) => file.endsWith(extension));
|
|
195
230
|
}
|
|
196
|
-
/**
|
|
197
|
-
* Formats one source location for a prompt heading. Exact origins keep the
|
|
198
|
-
* authored column; line-only origins — and sites whose column is unknown —
|
|
199
|
-
* degrade to `file:line` rather than fabricating precision.
|
|
200
|
-
*/
|
|
201
231
|
function formatSourceLocation(policy, source) {
|
|
202
232
|
if (hasExactAuthoredCoordinates(policy, source.cid, source.file) && source.column > 0) {
|
|
203
233
|
return `${source.file}:${source.line}:${source.column}`;
|
|
204
234
|
}
|
|
205
235
|
return `${source.file}:${source.line}`;
|
|
206
236
|
}
|
|
207
|
-
function elementGroupSource(group, policy) {
|
|
208
|
-
if (group.runtimeEvidence) {
|
|
209
|
-
return group.runtimeEvidence.reason === "unannotated"
|
|
210
|
-
? "source unknown; no authored location available"
|
|
211
|
-
: "source unknown; runtime-created DOM";
|
|
212
|
-
}
|
|
213
|
-
return formatSourceLocation(policy, group);
|
|
214
|
-
}
|
|
215
237
|
function renderedInstanceDescription(ref) {
|
|
216
238
|
const text = boundedEvidence(ref.locator.text);
|
|
217
239
|
const ariaLabel = boundedEvidence(ref.locator.ariaLabel ?? null);
|
|
218
240
|
const props = boundedEvidence(ref.locator.props);
|
|
219
|
-
const source = isRuntimeGeneratedSource(ref.sourceSite.src)
|
|
220
|
-
?
|
|
221
|
-
:
|
|
241
|
+
const source = ref.sourceSite.src && !isRuntimeGeneratedSource(ref.sourceSite.src)
|
|
242
|
+
? ` (${ref.sourceSite.src})`
|
|
243
|
+
: "";
|
|
222
244
|
if (text)
|
|
223
|
-
return `text ${promptText(text)}
|
|
245
|
+
return `text ${promptText(text)}${source}`;
|
|
224
246
|
if (ariaLabel)
|
|
225
|
-
return `the element named ${promptText(ariaLabel)}
|
|
247
|
+
return `the element named ${promptText(ariaLabel)}${source}`;
|
|
226
248
|
if (props)
|
|
227
|
-
return `the element with props ${promptText(props)}
|
|
228
|
-
//
|
|
229
|
-
// repeated outputs from the same source site.
|
|
249
|
+
return `the element with props ${promptText(props)}${source}`;
|
|
250
|
+
// Without semantic evidence, the ordinal is the only way to distinguish repeated outputs from one source site.
|
|
230
251
|
return `rendered instance ${ref.locator.occurrence + 1} of ${sourceSiteLabel(ref)}`;
|
|
231
252
|
}
|
|
232
253
|
function structuralChangeLine(change) {
|
|
@@ -290,9 +311,7 @@ function canonicalizeStructuralChanges(changes) {
|
|
|
290
311
|
&& first.presentation.fromIndex === latest.presentation.toIndex;
|
|
291
312
|
if (returnedToStart)
|
|
292
313
|
continue;
|
|
293
|
-
//
|
|
294
|
-
// context when the gesture crossed intermediate containers so the prompt
|
|
295
|
-
// describes the authored move rather than the drag history.
|
|
314
|
+
// Keep the first source context so the prompt describes the authored move, not the drag history.
|
|
296
315
|
if (first && first !== latest && latest.kind === "move") {
|
|
297
316
|
canonical.push({
|
|
298
317
|
...latest,
|
|
@@ -310,7 +329,7 @@ function canonicalizeStructuralChanges(changes) {
|
|
|
310
329
|
}
|
|
311
330
|
return canonical;
|
|
312
331
|
}
|
|
313
|
-
/** Counts the
|
|
332
|
+
/** Counts the exported intents, not the raw gesture history. */
|
|
314
333
|
export function countPromptChanges(changes, structuralChanges = [], sketchCount = 0) {
|
|
315
334
|
return canonicalizeChanges([...changes]).length + canonicalizeStructuralChanges(structuralChanges).length + sketchCount;
|
|
316
335
|
}
|
|
@@ -332,82 +351,144 @@ export function generatePrompt(changes, frameworkHints, structuralChanges = [],
|
|
|
332
351
|
lines: tokenChanges.map(tokenChangeLine),
|
|
333
352
|
});
|
|
334
353
|
}
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
lines.push(componentChangeLine(change));
|
|
342
|
-
lines.push(` - Component contract: \`${target.componentId}\``);
|
|
343
|
-
if (change.evidence) {
|
|
344
|
-
lines.push(` - Rendered evidence: ${change.evidence.mountedCount} mounted outputs`);
|
|
345
|
-
if (change.evidence.props)
|
|
346
|
-
lines.push(` - Props evidence: ${promptText(boundedEvidence(change.evidence.props) ?? "")}`);
|
|
347
|
-
if (change.evidence.ariaLabel)
|
|
348
|
-
lines.push(` - Accessible name evidence: ${promptText(boundedEvidence(change.evidence.ariaLabel) ?? "")}`);
|
|
349
|
-
lines.push(` - Before text: ${promptText(change.evidence.beforeText)}`);
|
|
350
|
-
}
|
|
351
|
-
lines.push("");
|
|
354
|
+
const groups = new Map();
|
|
355
|
+
function groupFor(key, heading, tag) {
|
|
356
|
+
let group = groups.get(key);
|
|
357
|
+
if (!group) {
|
|
358
|
+
group = { heading, details: new Set(), lines: [] };
|
|
359
|
+
groups.set(key, group);
|
|
352
360
|
}
|
|
353
|
-
|
|
361
|
+
if (tag)
|
|
362
|
+
group.heading = elementLabel(tag);
|
|
363
|
+
return group;
|
|
354
364
|
}
|
|
355
|
-
|
|
356
|
-
const
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
365
|
+
for (const change of componentChanges) {
|
|
366
|
+
const target = change.target;
|
|
367
|
+
const evidence = change.evidence;
|
|
368
|
+
const scope = change.scope ?? "source-site";
|
|
369
|
+
const key = JSON.stringify(["component", target.callsiteId, scope, scope === "rendered-instance"
|
|
370
|
+
? [evidence?.occurrence, evidence?.props, evidence?.ariaLabel] : null]);
|
|
371
|
+
const group = groupFor(key, `${target.componentName} component`);
|
|
372
|
+
group.lines.push(componentChangeLine(change));
|
|
373
|
+
group.lines.push(editScopeLine(scope));
|
|
374
|
+
group.details.add(`- Source: ${promptText(formatSourceLocation(coordinatePolicy, target))}`);
|
|
375
|
+
if (evidence) {
|
|
376
|
+
group.details.add(`- Rendered instances: ${evidence.mountedCount}`);
|
|
377
|
+
if (evidence.props)
|
|
378
|
+
group.details.add(`- Props: ${promptText(boundedEvidence(evidence.props) ?? "")}`);
|
|
379
|
+
if (evidence.ariaLabel)
|
|
380
|
+
group.details.add(`- Accessible name: ${promptText(boundedEvidence(evidence.ariaLabel) ?? "")}`);
|
|
381
|
+
group.details.add(`- Before text: ${promptText(evidence.beforeText)}`);
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
const selectedSets = new Map();
|
|
385
|
+
for (const element of elementGroups) {
|
|
386
|
+
if (!element.instanceOverride && element.changes[0]?.sourceInstanceCount !== 1)
|
|
387
|
+
continue;
|
|
388
|
+
const key = selectedStyleGroupKey(element);
|
|
389
|
+
const selected = selectedSets.get(key) ?? [];
|
|
390
|
+
selected.push(element);
|
|
391
|
+
selectedSets.set(key, selected);
|
|
392
|
+
}
|
|
393
|
+
const exportedSets = new Set();
|
|
394
|
+
for (const element of elementGroups) {
|
|
395
|
+
const first = element.changes[0];
|
|
396
|
+
const runtimeCreated = !!element.runtimeEvidence || !element.file || isRuntimeGeneratedSource(element.file);
|
|
397
|
+
const src = runtimeCreated ? "" : `${element.file}:${element.line}:${element.column}`;
|
|
398
|
+
const key = element.instanceOverride ? refPromptKey(element.instanceOverride.target)
|
|
399
|
+
: first.scope === "rendered-instance" && !runtimeCreated ? `style:${element.key}`
|
|
400
|
+
: elementPromptKey(element.cid, src, "source-site");
|
|
401
|
+
const tag = element.runtimeEvidence?.tagName ?? element.sourceEvidence?.tagName;
|
|
402
|
+
const label = readableTargetLabel(element.runtimeEvidence?.text ?? element.sourceEvidence?.text ?? null, tag);
|
|
403
|
+
const selectedKey = selectedStyleGroupKey(element);
|
|
404
|
+
const selected = element.instanceOverride || first.sourceInstanceCount === 1 ? selectedSets.get(selectedKey) ?? [] : [];
|
|
405
|
+
if (selected.length > 1) {
|
|
406
|
+
if (exportedSets.has(selectedKey))
|
|
407
|
+
continue;
|
|
408
|
+
exportedSets.add(selectedKey);
|
|
409
|
+
const tags = new Set(selected.map((item) => item.runtimeEvidence?.tagName ?? item.sourceEvidence?.tagName));
|
|
410
|
+
const group = groupFor(selectedKey, setHeading("Selected elements", tags.size === 1 ? tag : undefined));
|
|
411
|
+
const locations = selected.map((item) => !item.runtimeEvidence && item.file && !isRuntimeGeneratedSource(item.file)
|
|
412
|
+
? formatSourceLocation(coordinatePolicy, item) : null);
|
|
413
|
+
const sharedLocation = new Set(locations).size === 1 ? locations[0] : null;
|
|
414
|
+
if (sharedLocation)
|
|
415
|
+
group.details.add(`- Source: ${promptText(sharedLocation)}`);
|
|
416
|
+
group.details.add(["- Selected items:", ...selected.map((item, index) => selectedItemLine(item, sharedLocation ? null : locations[index] ?? null))].join("\n"));
|
|
417
|
+
for (const change of element.changes) {
|
|
418
|
+
group.lines.push(`${elementChangeLine(change)} for these selected items.`);
|
|
366
419
|
const intent = sourceIntentLine(change);
|
|
367
420
|
if (intent)
|
|
368
|
-
lines.push(intent);
|
|
421
|
+
group.lines.push(intent);
|
|
369
422
|
}
|
|
370
|
-
|
|
423
|
+
continue;
|
|
371
424
|
}
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
const
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
lines.push(
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
lines.push("");
|
|
425
|
+
const linked = !element.instanceOverride && !runtimeCreated && first.scope !== "rendered-instance"
|
|
426
|
+
&& (element.changes.some((change) => (change.sourceInstanceCount ?? 1) > 1)
|
|
427
|
+
|| first.scope === "source-site" && first.sourceInstanceCount === undefined);
|
|
428
|
+
const group = groupFor(key, label, tag);
|
|
429
|
+
if (linked)
|
|
430
|
+
group.heading = setHeading("Linked elements", tag);
|
|
431
|
+
if (!runtimeCreated) {
|
|
432
|
+
group.details.add(`- Source: \`${formatSourceLocation(coordinatePolicy, element)}\``);
|
|
433
|
+
}
|
|
434
|
+
for (const detail of elementEvidenceLines(element, linked))
|
|
435
|
+
group.details.add(detail);
|
|
436
|
+
for (const change of element.changes) {
|
|
437
|
+
const targetSet = linked ? " for all items rendered at this source location."
|
|
438
|
+
: element.instanceOverride ? " for this selected item." : "";
|
|
439
|
+
group.lines.push(`${elementChangeLine(change)}${targetSet}`);
|
|
440
|
+
const intent = sourceIntentLine(change);
|
|
441
|
+
if (intent)
|
|
442
|
+
group.lines.push(intent);
|
|
391
443
|
}
|
|
392
|
-
sections.push({ heading: "Rendered text changes", lines });
|
|
393
444
|
}
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
445
|
+
for (const change of textChanges) {
|
|
446
|
+
const target = change.target;
|
|
447
|
+
const runtimeCreated = !target.sourceSite.src || isRuntimeGeneratedSource(target.sourceSite.src);
|
|
448
|
+
const scope = change.scope ?? "rendered-instance";
|
|
449
|
+
const key = elementPromptKey(target.sourceSite.cid, target.sourceSite.src, scope, {
|
|
450
|
+
kind: "evidence", occurrence: target.occurrence, props: target.props, text: target.beforeText, ariaLabel: target.ariaLabel,
|
|
398
451
|
});
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
heading: "Element comments",
|
|
403
|
-
lines: comments.flatMap((comment) => [
|
|
404
|
-
`### <${comment.tag}> (${comment.target.sourceSite.src || "source unknown"})`,
|
|
405
|
-
`- Page: ${promptText(comment.route)}`,
|
|
406
|
-
`- Target: ${renderedInstanceDescription(comment.target)}`,
|
|
407
|
-
`- Note: ${promptText(comment.note)}`,
|
|
408
|
-
"",
|
|
409
|
-
]),
|
|
452
|
+
const group = groupFor(key, readableTargetLabel(change.before, target.tagName), target.tagName);
|
|
453
|
+
const sourceLocation = runtimeCreated ? null : formatSourceLocation(coordinatePolicy, {
|
|
454
|
+
cid: target.sourceSite.cid, ...change.source,
|
|
410
455
|
});
|
|
456
|
+
if (sourceLocation)
|
|
457
|
+
group.details.add(`- Source: ${promptText(sourceLocation)}`);
|
|
458
|
+
group.lines.push(`- **Change:** Replace text ${promptText(change.before)} with ${promptText(change.after)}.`);
|
|
459
|
+
if (change.scope)
|
|
460
|
+
group.lines.push(editScopeLine(change.scope));
|
|
461
|
+
if (change.authoredAs === "expression")
|
|
462
|
+
group.lines.push(" - Preserve the expression and update its source logic.");
|
|
463
|
+
group.lines.push(...textBindingLines(change, sourceLocation));
|
|
464
|
+
for (const detail of targetEvidenceLines({
|
|
465
|
+
...target, text: group.heading.startsWith("Text:") ? null : target.beforeText,
|
|
466
|
+
}))
|
|
467
|
+
group.details.add(detail);
|
|
468
|
+
}
|
|
469
|
+
for (const change of structuralIntent) {
|
|
470
|
+
const ref = change.target;
|
|
471
|
+
const group = groupFor(refPromptKey(ref), readableTargetLabel(ref.locator.text));
|
|
472
|
+
group.lines.push(structuralChangeLine(change));
|
|
473
|
+
}
|
|
474
|
+
for (const comment of comments) {
|
|
475
|
+
const ref = comment.target;
|
|
476
|
+
const runtimeCreated = !ref.sourceSite.src || isRuntimeGeneratedSource(ref.sourceSite.src);
|
|
477
|
+
const group = groupFor(refPromptKey(ref), elementLabel(comment.tag), comment.tag);
|
|
478
|
+
if (!runtimeCreated) {
|
|
479
|
+
const parsed = /^(.*):(\d+):(\d+)$/.exec(ref.sourceSite.src);
|
|
480
|
+
const location = parsed ? formatSourceLocation(coordinatePolicy, {
|
|
481
|
+
cid: ref.sourceSite.cid, file: parsed[1], line: Number(parsed[2]), column: Number(parsed[3]),
|
|
482
|
+
}) : ref.sourceSite.src;
|
|
483
|
+
group.details.add(`- Source: ${promptText(location)}`);
|
|
484
|
+
}
|
|
485
|
+
group.details.add(`- Page: ${promptText(comment.route)}`);
|
|
486
|
+
for (const detail of targetEvidenceLines(ref.locator))
|
|
487
|
+
group.details.add(detail);
|
|
488
|
+
group.lines.push(`- **Note:** ${promptText(comment.note)}`);
|
|
489
|
+
}
|
|
490
|
+
for (const group of groups.values()) {
|
|
491
|
+
sections.push({ heading: group.heading, lines: group.details.size > 0 ? [...group.details, "", ...group.lines] : group.lines });
|
|
411
492
|
}
|
|
412
493
|
return renderPrompt(sections, customInstructions);
|
|
413
494
|
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export const PROMPT_TITLE = "# Requested design changes";
|
|
2
|
+
/** Keeps the title first when a host adds page or iteration instructions. */
|
|
3
|
+
export function withPromptContext(context, prompt) {
|
|
4
|
+
const body = prompt === PROMPT_TITLE || prompt.startsWith(`${PROMPT_TITLE}\n`)
|
|
5
|
+
? prompt.slice(PROMPT_TITLE.length).trimStart()
|
|
6
|
+
: prompt;
|
|
7
|
+
return [PROMPT_TITLE, "", ...context, ...(body.trim() ? ["", body] : [])].join("\n");
|
|
8
|
+
}
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
/** The default guidance included in every generated prompt. */
|
|
2
1
|
export declare const DEFAULT_CUSTOM_INSTRUCTIONS = "Preserve existing tokens, logical properties, and CSS intent while applying these rendered changes.";
|
|
3
2
|
declare function storageKey(projectId: string): string;
|
|
4
|
-
/** Reads the project-scoped custom prompt instructions from browser storage. */
|
|
5
3
|
export declare function loadCustomInstructions(projectId: string): string;
|
|
6
|
-
/** Persists custom prompt instructions without making storage availability a prerequisite for editing. */
|
|
7
4
|
export declare function saveCustomInstructions(projectId: string, instructions: string): void;
|
|
8
5
|
export { storageKey as promptSettingsStorageKey };
|
|
@@ -1,25 +1,24 @@
|
|
|
1
|
-
|
|
1
|
+
import { inspectorStorage } from "../runtime/inspectorStorage.js";
|
|
2
|
+
import { isDemoRuntime } from "../runtime/runtimeConfig.js";
|
|
2
3
|
export const DEFAULT_CUSTOM_INSTRUCTIONS = "Preserve existing tokens, logical properties, and CSS intent while applying these rendered changes.";
|
|
3
4
|
function storageKey(projectId) {
|
|
4
5
|
return `nudge-ui:${projectId}:prompt-settings`;
|
|
5
6
|
}
|
|
6
|
-
/** Reads the project-scoped custom prompt instructions from browser storage. */
|
|
7
7
|
export function loadCustomInstructions(projectId) {
|
|
8
|
-
if (
|
|
8
|
+
if (isDemoRuntime())
|
|
9
9
|
return DEFAULT_CUSTOM_INSTRUCTIONS;
|
|
10
10
|
try {
|
|
11
|
-
return
|
|
11
|
+
return inspectorStorage()?.getItem(storageKey(projectId)) ?? DEFAULT_CUSTOM_INSTRUCTIONS;
|
|
12
12
|
}
|
|
13
13
|
catch {
|
|
14
14
|
return DEFAULT_CUSTOM_INSTRUCTIONS;
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
|
-
/** Persists custom prompt instructions without making storage availability a prerequisite for editing. */
|
|
18
17
|
export function saveCustomInstructions(projectId, instructions) {
|
|
19
|
-
if (
|
|
20
|
-
return;
|
|
18
|
+
if (isDemoRuntime())
|
|
19
|
+
return; // demo runtimes never persist
|
|
21
20
|
try {
|
|
22
|
-
|
|
21
|
+
inspectorStorage()?.setItem(storageKey(projectId), instructions);
|
|
23
22
|
}
|
|
24
23
|
catch {
|
|
25
24
|
// Storage can be disabled or full; the in-memory UI state still applies.
|
|
@@ -1,28 +1,5 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Decides the shared dev gate from one bundler observation and one host
|
|
3
|
-
* observation. Pure so every precedence rule is unit-testable without a
|
|
4
|
-
* particular bundler present.
|
|
5
|
-
*
|
|
6
|
-
* Precedence: an explicit host flag wins (a compiler without a define must
|
|
7
|
-
* still be authoritative); otherwise the bundler define decides; with neither,
|
|
8
|
-
* development is assumed absent — the gate fails closed rather than guessing.
|
|
9
|
-
*/
|
|
1
|
+
/** An explicit host flag wins; otherwise the bundler define; neither means not-development. */
|
|
10
2
|
export declare function resolveNudgeUiDev(bundlerDefinedDev: boolean | undefined, hostFlag: boolean | undefined): boolean;
|
|
11
|
-
/**
|
|
12
|
-
* Records whether the host Adapter is running a development server (ADR-0002).
|
|
13
|
-
*
|
|
14
|
-
* Vite and the standalone esbuild pipeline statically replace
|
|
15
|
-
* `import.meta.env.DEV`, so their bundles need no runtime flag. Hosts whose
|
|
16
|
-
* compiler cannot supply that define — Next.js/SWC has no equivalent of Vite's
|
|
17
|
-
* `define` for `import.meta.env` — must call this before bootstrapping the
|
|
18
|
-
* inspector. Passing `undefined` clears the override and restores the static
|
|
19
|
-
* define as the sole authority.
|
|
20
|
-
*
|
|
21
|
-
* The flag is process-global state by design: every inspector Module shares
|
|
22
|
-
* one dev gate, and a host configures it once per document, not per Module.
|
|
23
|
-
*/
|
|
3
|
+
/** For hosts whose compiler cannot supply the bundler define (Next.js/SWC); call before bootstrapping, `undefined` clears it. */
|
|
24
4
|
export declare function setNudgeUiHostDevFlag(value: boolean | undefined): void;
|
|
25
|
-
/**
|
|
26
|
-
* Dev-phase gate shared by every inspector Module (ADR-0002).
|
|
27
|
-
*/
|
|
28
5
|
export declare function isNudgeUiDev(): boolean;
|