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
|
@@ -21,30 +21,48 @@ export function computeHierarchy(el) {
|
|
|
21
21
|
}
|
|
22
22
|
return chain;
|
|
23
23
|
}
|
|
24
|
-
/**
|
|
25
|
-
export
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
24
|
+
/** Direct children listed in the DOM navigator before the rest collapse into a count. */
|
|
25
|
+
export const NAVIGATOR_CHILD_LIMIT = 50;
|
|
26
|
+
function htmlElementConstructor(el) {
|
|
27
|
+
return el.ownerDocument.defaultView?.HTMLElement ?? null;
|
|
28
|
+
}
|
|
29
|
+
/** The nearest tracked elements below `el` in document order, looking through untracked wrappers. */
|
|
30
|
+
export function computeTrackedChildren(el, limit = NAVIGATOR_CHILD_LIMIT) {
|
|
31
|
+
const constructor = htmlElementConstructor(el);
|
|
32
|
+
const result = { elements: [], hidden: 0 };
|
|
33
|
+
if (!constructor)
|
|
34
|
+
return result;
|
|
35
|
+
const visit = (parent) => {
|
|
36
|
+
for (const child of parent.children) {
|
|
37
|
+
if (!(child instanceof constructor))
|
|
38
|
+
continue;
|
|
39
|
+
if (!child.hasAttribute("data-cid"))
|
|
40
|
+
visit(child);
|
|
41
|
+
else if (result.elements.length < limit)
|
|
42
|
+
result.elements.push(child);
|
|
43
|
+
else
|
|
44
|
+
result.hidden += 1;
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
visit(el);
|
|
48
|
+
return result;
|
|
49
|
+
}
|
|
50
|
+
export function hasTrackedChildren(el) {
|
|
51
|
+
const constructor = htmlElementConstructor(el);
|
|
52
|
+
if (!constructor)
|
|
53
|
+
return false;
|
|
54
|
+
const visit = (parent) => {
|
|
55
|
+
for (const child of parent.children) {
|
|
56
|
+
if (!(child instanceof constructor))
|
|
57
|
+
continue;
|
|
58
|
+
if (child.hasAttribute("data-cid") || visit(child))
|
|
59
|
+
return true;
|
|
36
60
|
}
|
|
37
|
-
return
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
.sort((left, right) => left.depth - right.depth || left.order - right.order);
|
|
41
|
-
return descendants.slice(0, maxNodes).map(({ element, depth }) => ({ element, depth }));
|
|
61
|
+
return false;
|
|
62
|
+
};
|
|
63
|
+
return visit(el);
|
|
42
64
|
}
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
return [
|
|
47
|
-
...parents.map((element, index) => ({ element, direction: "up", depth: index + 1 })),
|
|
48
|
-
...children.map(({ element, depth }) => ({ element, direction: "down", depth })),
|
|
49
|
-
];
|
|
65
|
+
/** Nearest tracked ancestors, fewer when children also fill the menu. */
|
|
66
|
+
export function computeNavigationParents(hierarchy, hasChildren) {
|
|
67
|
+
return hierarchy.slice(1, (hasChildren ? 2 : 4) + 1);
|
|
50
68
|
}
|
|
@@ -10,7 +10,6 @@ export interface SelectedElement {
|
|
|
10
10
|
fiber?: unknown;
|
|
11
11
|
componentTargets: RuntimeComponentTarget[];
|
|
12
12
|
}
|
|
13
|
-
/** The ordered selection presented to the inspector. */
|
|
14
13
|
export interface Selection {
|
|
15
14
|
elements: readonly SelectedElement[];
|
|
16
15
|
primary: SelectedElement;
|
|
@@ -22,11 +21,9 @@ declare function getSelection(): Selection | null;
|
|
|
22
21
|
declare function getHierarchy(): HTMLElement[];
|
|
23
22
|
declare function getHierarchyIndex(): number;
|
|
24
23
|
export declare function setSelectedElement(el: SelectedElement | null): void;
|
|
25
|
-
/** Replaces the selection with one or more ordered targets. */
|
|
26
24
|
export declare function setSelectedElements(elements: readonly SelectedElement[]): void;
|
|
27
25
|
/** Adds or removes one target while keeping the toggled target primary. */
|
|
28
26
|
export declare function toggleSelectedElement(el: SelectedElement): void;
|
|
29
|
-
/** Removes one rendered node from the group, preserving the remaining order. */
|
|
30
27
|
export declare function removeSelectedElement(el: HTMLElement): void;
|
|
31
28
|
/** Refreshes metadata for one selected DOM node without collapsing a group. */
|
|
32
29
|
export declare function refreshSelectedElement(el: SelectedElement): void;
|
|
@@ -37,7 +37,7 @@ function sameComponentTargets(a, b) {
|
|
|
37
37
|
return false;
|
|
38
38
|
return a.every((left, index) => {
|
|
39
39
|
const right = b[index];
|
|
40
|
-
if (!right || left.framework !== right.framework)
|
|
40
|
+
if (!right || left.framework !== right.framework || left.livePreview !== right.livePreview)
|
|
41
41
|
return false;
|
|
42
42
|
const leftMeta = left.meta;
|
|
43
43
|
const rightMeta = right.meta;
|
|
@@ -50,10 +50,7 @@ function sameComponentTargets(a, b) {
|
|
|
50
50
|
|| JSON.stringify(leftMeta.authoredProps) !== JSON.stringify(rightMeta.authoredProps)) {
|
|
51
51
|
return false;
|
|
52
52
|
}
|
|
53
|
-
// Runtime props can
|
|
54
|
-
// intentionally unstable object identities. Only primitive values are
|
|
55
|
-
// consumed by the editable component-prop controls, so compare those and
|
|
56
|
-
// ignore opaque values that cannot affect this panel.
|
|
53
|
+
// Runtime props can hold React elements and fibers with unstable identities; only primitives affect the editable prop controls.
|
|
57
54
|
const keys = new Set([...Object.keys(left.props), ...Object.keys(right.props)]);
|
|
58
55
|
for (const key of keys) {
|
|
59
56
|
const leftValue = left.props[key];
|
|
@@ -91,18 +88,13 @@ export function setSelectedElement(el) {
|
|
|
91
88
|
}
|
|
92
89
|
const current = currentSelection?.primary ?? null;
|
|
93
90
|
if ((currentSelection?.elements.length ?? 0) > 1) {
|
|
94
|
-
//
|
|
95
|
-
// Canvas selection, and single-target actions. It must collapse a group
|
|
96
|
-
// even when the clicked node is already the primary target.
|
|
91
|
+
// The replacement API must collapse a group even when the clicked node is already primary.
|
|
97
92
|
publishSelection([el], el);
|
|
98
93
|
return;
|
|
99
94
|
}
|
|
100
95
|
if (current === el)
|
|
101
96
|
return;
|
|
102
|
-
//
|
|
103
|
-
// source-site identity. Keep the existing selection and hierarchy step so
|
|
104
|
-
// the panel pipeline does not churn (including after step-up); edits still
|
|
105
|
-
// refresh the panel via the document revision subscription.
|
|
97
|
+
// A re-resolved object with the same source-site identity keeps the current selection and hierarchy step.
|
|
106
98
|
if (el && current
|
|
107
99
|
&& current.cid === el.cid
|
|
108
100
|
&& current.src === el.src
|
|
@@ -159,14 +151,12 @@ function publishSelection(elements, primary) {
|
|
|
159
151
|
index = 0;
|
|
160
152
|
}
|
|
161
153
|
else {
|
|
162
|
-
// Hierarchy stepping is a single-element operation
|
|
163
|
-
// prevents a stale parent chain from being rendered for a group.
|
|
154
|
+
// Hierarchy stepping is a single-element operation; a stale parent chain must not render for a group.
|
|
164
155
|
chain = [];
|
|
165
156
|
index = 0;
|
|
166
157
|
}
|
|
167
158
|
notify();
|
|
168
159
|
}
|
|
169
|
-
/** Replaces the selection with one or more ordered targets. */
|
|
170
160
|
export function setSelectedElements(elements) {
|
|
171
161
|
const primary = elements.at(-1);
|
|
172
162
|
if (!primary) {
|
|
@@ -191,7 +181,6 @@ export function toggleSelectedElement(el) {
|
|
|
191
181
|
}
|
|
192
182
|
publishSelection([...selectedElements, el], el);
|
|
193
183
|
}
|
|
194
|
-
/** Removes one rendered node from the group, preserving the remaining order. */
|
|
195
184
|
export function removeSelectedElement(el) {
|
|
196
185
|
const selectedElements = getSelectedElements();
|
|
197
186
|
const remaining = selectedElements.filter((selected) => selected.domElement !== el);
|
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
/** Stable JSX instrumentation selector, shared by source and instance edits. */
|
|
2
2
|
export declare function sourceSiteSelector(cid: string, src: string): string | null;
|
|
3
|
-
/**
|
|
4
|
-
* Finds a source site whose position moved because its file gained or lost
|
|
5
|
-
* lines. It returns a site only when the original renders nothing and exactly
|
|
6
|
-
* one other position in the same file and component renders matching elements.
|
|
7
|
-
*/
|
|
3
|
+
/** Returns a moved position only when the original renders nothing and exactly one other position in the file matches. */
|
|
8
4
|
export declare function relocateSourceSite(doc: Document, site: {
|
|
9
5
|
readonly cid: string;
|
|
10
6
|
readonly src: string;
|
|
@@ -6,16 +6,10 @@ export function sourceSiteSelector(cid, src) {
|
|
|
6
6
|
return null;
|
|
7
7
|
if (!src)
|
|
8
8
|
return `[data-cid="${escapeAttrValue(cid)}"]`;
|
|
9
|
-
//
|
|
10
|
-
// Vite transform. Keeping only file:line makes separate JSX elements on a
|
|
11
|
-
// single formatted line share a managed rule.
|
|
9
|
+
// File:line alone would merge separate JSX elements on one formatted line into a single managed rule.
|
|
12
10
|
return `[data-cid="${escapeAttrValue(cid)}"][data-src="${escapeAttrValue(src)}"]`;
|
|
13
11
|
}
|
|
14
|
-
/**
|
|
15
|
-
* Finds a source site whose position moved because its file gained or lost
|
|
16
|
-
* lines. It returns a site only when the original renders nothing and exactly
|
|
17
|
-
* one other position in the same file and component renders matching elements.
|
|
18
|
-
*/
|
|
12
|
+
/** Returns a moved position only when the original renders nothing and exactly one other position in the file matches. */
|
|
19
13
|
export function relocateSourceSite(doc, site, matches) {
|
|
20
14
|
const file = SOURCE_POSITION.exec(site.src)?.[1];
|
|
21
15
|
const exact = sourceSiteSelector(site.cid, site.src);
|
|
@@ -14,9 +14,5 @@ export interface StyleSelection {
|
|
|
14
14
|
getProperty(property: string): SelectionProperty | null;
|
|
15
15
|
supportsRole(role: StyleRole): boolean;
|
|
16
16
|
}
|
|
17
|
-
/**
|
|
18
|
-
* Builds the group style projection used by all style editors. Computed CSS
|
|
19
|
-
* is the value source, while individual inspection snapshots provide authored
|
|
20
|
-
* and token provenance where it exists.
|
|
21
|
-
*/
|
|
17
|
+
/** Computed CSS is the value source; snapshots add authored and token provenance where it exists. */
|
|
22
18
|
export declare function createStyleSelection(elements: readonly SelectedElement[], snapshots: readonly InspectionSnapshot[], selectedPrimary?: SelectedElement | null): StyleSelection | null;
|
|
@@ -36,11 +36,7 @@ function supportsRole(element, role) {
|
|
|
36
36
|
}
|
|
37
37
|
}
|
|
38
38
|
}
|
|
39
|
-
/**
|
|
40
|
-
* Builds the group style projection used by all style editors. Computed CSS
|
|
41
|
-
* is the value source, while individual inspection snapshots provide authored
|
|
42
|
-
* and token provenance where it exists.
|
|
43
|
-
*/
|
|
39
|
+
/** Computed CSS is the value source; snapshots add authored and token provenance where it exists. */
|
|
44
40
|
export function createStyleSelection(elements, snapshots, selectedPrimary) {
|
|
45
41
|
const primary = selectedPrimary && elements.some((element) => element.domElement === selectedPrimary.domElement)
|
|
46
42
|
? selectedPrimary
|
|
@@ -1,12 +1,5 @@
|
|
|
1
|
-
/** A callback released when its owning session is disposed. */
|
|
2
1
|
export type CleanupCallback = () => void;
|
|
3
|
-
/**
|
|
4
|
-
* The lifecycle surface shared by workspace and session handles.
|
|
5
|
-
*
|
|
6
|
-
* Registration after disposal is ignored and returns a no-op unregister
|
|
7
|
-
* function. Disposal is idempotent. Implementations dispose adopted children
|
|
8
|
-
* before their own callbacks.
|
|
9
|
-
*/
|
|
2
|
+
/** Registration after disposal returns a no-op; disposal is idempotent and disposes adopted children before own callbacks. */
|
|
10
3
|
export interface SessionOwner {
|
|
11
4
|
readonly id: string;
|
|
12
5
|
readonly disposed: boolean;
|
|
@@ -17,6 +10,5 @@ export interface SessionOwnerImplementation extends SessionOwner {
|
|
|
17
10
|
adopt(child: SessionOwner): void;
|
|
18
11
|
}
|
|
19
12
|
type SessionKind = "workspace" | "inspector" | "document";
|
|
20
|
-
/** Creates the small lifecycle implementation used by session handles. */
|
|
21
13
|
export declare function createSessionOwner(kind: SessionKind): SessionOwnerImplementation;
|
|
22
14
|
export {};
|
|
@@ -11,11 +11,7 @@ export interface InspectorSessionProviderProps {
|
|
|
11
11
|
readonly documentSession?: DocumentSession | null;
|
|
12
12
|
readonly children?: ReactNode;
|
|
13
13
|
}
|
|
14
|
-
/** Delivers the active inspector and document handles to editor descendants. */
|
|
15
14
|
export declare function InspectorSessionProvider({ inspector, documentSession, children, }: InspectorSessionProviderProps): ReactElement;
|
|
16
|
-
/** Returns all active session handles, or throws when no provider is mounted. */
|
|
17
15
|
export declare function useSessionContext(): SessionContextValue;
|
|
18
|
-
/** Returns the active mounted-inspector handle. */
|
|
19
16
|
export declare function useInspectorSession(): InspectorSession;
|
|
20
|
-
/** Returns the active inspected-document handle, when one is mounted. */
|
|
21
17
|
export declare function useDocumentSession(): DocumentSession | null;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import { createContext, useContext, useMemo } from "react";
|
|
3
3
|
const SessionContext = createContext(null);
|
|
4
|
-
/** Delivers the active inspector and document handles to editor descendants. */
|
|
5
4
|
export function InspectorSessionProvider({ inspector, documentSession = null, children, }) {
|
|
6
5
|
const value = useMemo(() => ({
|
|
7
6
|
workspace: inspector.workspace,
|
|
@@ -10,7 +9,6 @@ export function InspectorSessionProvider({ inspector, documentSession = null, ch
|
|
|
10
9
|
}), [documentSession, inspector]);
|
|
11
10
|
return _jsx(SessionContext.Provider, { value: value, children: children });
|
|
12
11
|
}
|
|
13
|
-
/** Returns all active session handles, or throws when no provider is mounted. */
|
|
14
12
|
export function useSessionContext() {
|
|
15
13
|
const value = useContext(SessionContext);
|
|
16
14
|
if (!value) {
|
|
@@ -18,11 +16,9 @@ export function useSessionContext() {
|
|
|
18
16
|
}
|
|
19
17
|
return value;
|
|
20
18
|
}
|
|
21
|
-
/** Returns the active mounted-inspector handle. */
|
|
22
19
|
export function useInspectorSession() {
|
|
23
20
|
return useSessionContext().inspector;
|
|
24
21
|
}
|
|
25
|
-
/** Returns the active inspected-document handle, when one is mounted. */
|
|
26
22
|
export function useDocumentSession() {
|
|
27
23
|
return useSessionContext().document;
|
|
28
24
|
}
|
|
@@ -1,29 +1,20 @@
|
|
|
1
1
|
import { type SessionOwner } from "./lifecycle.js";
|
|
2
|
-
/** The mounted DOM node that hosts an inspector session. */
|
|
3
2
|
export type InspectorHost = HTMLElement;
|
|
4
3
|
/** Resources that survive inspector remounts. */
|
|
5
4
|
export interface Workspace extends SessionOwner {
|
|
6
5
|
createInspectorSession(host: InspectorHost): InspectorSession;
|
|
7
6
|
createDocumentSession(doc: Document): DocumentSession;
|
|
8
7
|
}
|
|
9
|
-
/** Resources owned by one mounted inspector. */
|
|
10
8
|
export interface InspectorSession extends SessionOwner {
|
|
11
9
|
readonly host: InspectorHost;
|
|
12
10
|
readonly workspace: Workspace;
|
|
13
11
|
createDocumentSession(doc: Document): DocumentSession;
|
|
14
12
|
}
|
|
15
|
-
/** Resources and caches associated with one inspected document lifetime. */
|
|
16
13
|
export interface DocumentSession extends SessionOwner {
|
|
17
14
|
readonly document: Document;
|
|
18
15
|
readonly inspector: InspectorSession | null;
|
|
19
16
|
readonly workspace: Workspace;
|
|
20
17
|
}
|
|
21
|
-
/**
|
|
22
|
-
* Creates the workspace owner. A workspace owns mounted inspector sessions
|
|
23
|
-
* and any document sessions created directly from the workspace.
|
|
24
|
-
*/
|
|
25
18
|
export declare function createWorkspace(): Workspace;
|
|
26
|
-
/** Creates an inspector session owned by the supplied workspace. */
|
|
27
19
|
export declare function createInspectorSession(workspace: Workspace, host: InspectorHost): InspectorSession;
|
|
28
|
-
/** Creates a document session owned by a workspace or mounted inspector. */
|
|
29
20
|
export declare function createDocumentSession(owner: Workspace | InspectorSession, doc: Document): DocumentSession;
|
|
@@ -38,10 +38,6 @@ function createInspectorSessionFor(workspace, parent, host) {
|
|
|
38
38
|
parent.adopt(owner);
|
|
39
39
|
return session;
|
|
40
40
|
}
|
|
41
|
-
/**
|
|
42
|
-
* Creates the workspace owner. A workspace owns mounted inspector sessions
|
|
43
|
-
* and any document sessions created directly from the workspace.
|
|
44
|
-
*/
|
|
45
41
|
export function createWorkspace() {
|
|
46
42
|
const owner = createSessionOwner("workspace");
|
|
47
43
|
let workspace;
|
|
@@ -63,11 +59,9 @@ export function createWorkspace() {
|
|
|
63
59
|
};
|
|
64
60
|
return workspace;
|
|
65
61
|
}
|
|
66
|
-
/** Creates an inspector session owned by the supplied workspace. */
|
|
67
62
|
export function createInspectorSession(workspace, host) {
|
|
68
63
|
return workspace.createInspectorSession(host);
|
|
69
64
|
}
|
|
70
|
-
/** Creates a document session owned by a workspace or mounted inspector. */
|
|
71
65
|
export function createDocumentSession(owner, doc) {
|
|
72
66
|
return owner.createDocumentSession(doc);
|
|
73
67
|
}
|
|
@@ -8,5 +8,4 @@ export interface SettingsDialogProps extends McpConnectionContentProps {
|
|
|
8
8
|
readonly onValueChange: (value: string) => void;
|
|
9
9
|
readonly onOpenChange: (open: boolean) => void;
|
|
10
10
|
}
|
|
11
|
-
/** Provides one settings surface for prompt, MCP, and token configuration. */
|
|
12
11
|
export declare function SettingsDialog({ open, initialSection, value, onValueChange, onOpenChange, projectId, origin, snapshot, onConnect, onTakeOver, onDisconnect, onCheckAgain, }: SettingsDialogProps): ReactElement;
|
|
@@ -5,6 +5,7 @@ import { IconColorSwatch, IconPlugConnected, IconSettings, IconX, IconTrash, } f
|
|
|
5
5
|
import { useBrowserCssInspection } from "../inspection/useBrowserCssInspection.js";
|
|
6
6
|
import { McpConnectionContent, } from "../agent/McpConnectionDialog.js";
|
|
7
7
|
import { PromptSettingsFields, } from "../prompt/PromptSettingsDialog.js";
|
|
8
|
+
import { getNudgeUiRuntimeConfig, isNudgeUiFeatureEnabled } from "../runtime/runtimeConfig.js";
|
|
8
9
|
import { TokensPanel } from "../tokens/TokensPanel.js";
|
|
9
10
|
import { useSelectedElement } from "../selection/selectionStore.js";
|
|
10
11
|
import { useFocusedCardId, useSelectedCardId } from "../canvas/canvasStore.js";
|
|
@@ -34,7 +35,6 @@ const SETTINGS_SECTIONS = [
|
|
|
34
35
|
icon: _jsx(IconColorSwatch, { size: "var(--icon-size-small)", stroke: 1.8, "aria-hidden": "true" }),
|
|
35
36
|
},
|
|
36
37
|
];
|
|
37
|
-
/** Provides one settings surface for prompt, MCP, and token configuration. */
|
|
38
38
|
export function SettingsDialog({ open, initialSection, value, onValueChange, onOpenChange, projectId, origin, snapshot, onConnect, onTakeOver, onDisconnect, onCheckAgain, }) {
|
|
39
39
|
const [activeSection, setActiveSection] = useState(initialSection);
|
|
40
40
|
const closeRef = useRef(null);
|
|
@@ -49,7 +49,9 @@ export function SettingsDialog({ open, initialSection, value, onValueChange, onO
|
|
|
49
49
|
session: getBrowserCssInspection(activeDocument),
|
|
50
50
|
});
|
|
51
51
|
const tokenRows = tokenInspection.documentTokens?.tokens ?? [];
|
|
52
|
-
const
|
|
52
|
+
const mcpEnabled = isNudgeUiFeatureEnabled(getNudgeUiRuntimeConfig().features, "mcp");
|
|
53
|
+
const sections = SETTINGS_SECTIONS.filter((section) => section.id !== "mcp" || mcpEnabled);
|
|
54
|
+
const activeDefinition = sections.find((section) => section.id === activeSection) ?? sections[0];
|
|
53
55
|
useEffect(() => {
|
|
54
56
|
if (open)
|
|
55
57
|
setActiveSection(initialSection);
|
|
@@ -65,5 +67,5 @@ export function SettingsDialog({ open, initialSection, value, onValueChange, onO
|
|
|
65
67
|
void clearSketchesForProject(projectId).catch(() => undefined);
|
|
66
68
|
onOpenChange(false);
|
|
67
69
|
}
|
|
68
|
-
return (_jsx(Dialog.Root, { open: open, onOpenChange: onOpenChange, children: _jsxs(Dialog.Portal, { container: portalContainer(), children: [_jsx(Dialog.Backdrop, { className: "settings__backdrop", "data-test": "settings-backdrop" }), _jsxs(Dialog.Popup, { className: "settings__popup", "data-test": "settings-dialog", initialFocus: closeRef, children: [_jsx(Dialog.Title, { className: "settings__visually-hidden", children: "Settings" }), _jsx(Dialog.Description, { className: "settings__visually-hidden", children: "Configure how Nudge connects to your coding agent and uses your design system." }), _jsx(Dialog.Close, { ref: closeRef, className: "icon-button icon-button--quiet settings__close", "aria-label": "Close settings", "data-test": "settings-close", type: "button", children: _jsx(IconX, { size: "var(--icon-size-small)", stroke: 1.8, "aria-hidden": "true" }) }), _jsxs("div", { className: "settings__body", children: [_jsxs("nav", { className: "settings__nav", "aria-label": "Settings sections", children: [_jsx("span", { className: "settings__nav-label", children: "Settings" }), _jsx("div", { className: "settings__nav-items", children:
|
|
70
|
+
return (_jsx(Dialog.Root, { open: open, onOpenChange: onOpenChange, children: _jsxs(Dialog.Portal, { container: portalContainer(), children: [_jsx(Dialog.Backdrop, { className: "settings__backdrop", "data-test": "settings-backdrop" }), _jsxs(Dialog.Popup, { className: "settings__popup", "data-test": "settings-dialog", initialFocus: closeRef, children: [_jsx(Dialog.Title, { className: "settings__visually-hidden", children: "Settings" }), _jsx(Dialog.Description, { className: "settings__visually-hidden", children: "Configure how Nudge connects to your coding agent and uses your design system." }), _jsx(Dialog.Close, { ref: closeRef, className: "icon-button icon-button--quiet settings__close", "aria-label": "Close settings", "data-test": "settings-close", type: "button", children: _jsx(IconX, { size: "var(--icon-size-small)", stroke: 1.8, "aria-hidden": "true" }) }), _jsxs("div", { className: "settings__body", children: [_jsxs("nav", { className: "settings__nav", "aria-label": "Settings sections", children: [_jsx("span", { className: "settings__nav-label", children: "Settings" }), _jsx("div", { className: "settings__nav-items", children: sections.map((section) => (_jsxs("button", { className: `settings__nav-item${activeDefinition.id === section.id ? " settings__nav-item--active" : ""}`, "data-test": `settings-nav-${section.id}`, type: "button", "aria-current": activeDefinition.id === section.id ? "page" : undefined, onClick: () => setActiveSection(section.id), children: [section.icon, _jsx("span", { className: "settings__nav-item-label", children: section.label })] }, section.id))) }), _jsxs("button", { className: "settings__nav-item settings__reset-canvas", "data-test": "settings-reset-canvas", type: "button", onClick: resetCanvas, children: [_jsx(IconTrash, { size: "var(--icon-size-small)", stroke: 1.8, "aria-hidden": "true" }), _jsx("span", { className: "settings__nav-item-label", children: "Reset canvas" })] })] }), _jsxs("main", { className: "settings__content", "data-test": "settings-content", children: [activeDefinition.id === "instructions" ? (_jsxs("section", { className: "settings__section", "data-test": "prompt-settings-dialog", "data-settings-section": "instructions", children: [_jsx("h2", { className: "settings__section-title", children: "Custom instructions" }), _jsx("p", { className: "settings__section-description", children: "These instructions are added to the end of every copied prompt." }), _jsx(PromptSettingsFields, { value: value, onChange: onValueChange, instructionsRef: instructionsRef })] })) : null, activeDefinition.id === "mcp" ? (_jsxs("section", { className: "settings__section", "data-test": "settings-section-mcp", children: [_jsx("h2", { className: "settings__section-title", children: activeDefinition.label }), _jsx("div", { "data-test": "mcp-connection-dialog", children: _jsx(McpConnectionContent, { projectId: projectId, origin: origin, snapshot: snapshot, onConnect: onConnect, onTakeOver: onTakeOver, onDisconnect: onDisconnect, onCheckAgain: onCheckAgain }) })] })) : null, activeDefinition.id === "tokens" ? (_jsxs("section", { className: "settings__section", "data-test": "settings-section-tokens", children: [_jsx("h2", { className: "settings__section-title", children: activeDefinition.label }), _jsx("p", { className: "settings__section-description", children: "Inspect and edit the design tokens available in this page." }), _jsx(TokensPanel, { rows: tokenRows })] })) : null] })] })] })] }) }));
|
|
69
71
|
}
|
|
@@ -3,9 +3,10 @@ import { type AgentClientSnapshot } from "../agent/client.js";
|
|
|
3
3
|
import type { SettingsSection } from "../settings/SettingsDialog.js";
|
|
4
4
|
export interface AgentStatusButtonProps {
|
|
5
5
|
onOpenSettings: (section: SettingsSection) => void;
|
|
6
|
+
/** Shows the agent logos and opens the MCP section; hosts without MCP keep a plain Settings button. */
|
|
7
|
+
mcpEnabled?: boolean;
|
|
6
8
|
}
|
|
7
9
|
export declare function AgentStatusButton({ onOpenSettings }: AgentStatusButtonProps): ReactElement;
|
|
8
|
-
|
|
9
|
-
export declare function AgentStatusButtonView({ agent, onOpenSettings }: AgentStatusButtonProps & {
|
|
10
|
+
export declare function AgentStatusButtonView({ agent, onOpenSettings, mcpEnabled }: AgentStatusButtonProps & {
|
|
10
11
|
agent: AgentClientSnapshot;
|
|
11
12
|
}): ReactElement;
|
|
@@ -2,10 +2,10 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { IconRobot } from "@tabler/icons-react";
|
|
3
3
|
import { useAgentClient } from "../agent/client.js";
|
|
4
4
|
import { useAgentConnectionStatus } from "../agent/connectionStatus.js";
|
|
5
|
+
import { isNudgeUiFeatureEnabled } from "../runtime/runtimeConfig.js";
|
|
5
6
|
import { useNudgeUiRuntimeConfig } from "../runtime/useRuntimeConfig.js";
|
|
6
7
|
import { Button } from "../ui/Button.js";
|
|
7
8
|
import { Tooltip } from "../ui/Tooltip.js";
|
|
8
|
-
/** Renders a known MCP client logo, or a generic robot avatar. */
|
|
9
9
|
function ConnectedAgentAvatar({ name }) {
|
|
10
10
|
const harness = name?.toLowerCase().match(/(?:^|[^a-z])(codex|claude|cursor)(?:$|[^a-z])/)?.[1];
|
|
11
11
|
return (_jsx("span", { className: "agent-status-button__avatars", role: "img", "aria-label": harness === "codex" ? "Codex" : harness === "claude" ? "Claude" : harness === "cursor" ? "Cursor" : "Agent", children: harness === "codex" ? _jsx(CodexAvatar, {})
|
|
@@ -25,12 +25,12 @@ function CursorAvatar() {
|
|
|
25
25
|
export function AgentStatusButton({ onOpenSettings }) {
|
|
26
26
|
const runtimeConfig = useNudgeUiRuntimeConfig();
|
|
27
27
|
const agent = useAgentClient(runtimeConfig.projectId);
|
|
28
|
-
|
|
28
|
+
const mcpEnabled = isNudgeUiFeatureEnabled(runtimeConfig.features, "mcp");
|
|
29
|
+
return _jsx(AgentStatusButtonView, { agent: agent, onOpenSettings: onOpenSettings, mcpEnabled: mcpEnabled });
|
|
29
30
|
}
|
|
30
|
-
|
|
31
|
-
export function AgentStatusButtonView({ agent, onOpenSettings }) {
|
|
31
|
+
export function AgentStatusButtonView({ agent, onOpenSettings, mcpEnabled = true }) {
|
|
32
32
|
const status = useAgentConnectionStatus(agent);
|
|
33
33
|
const connected = agent.paired || agent.pairedElsewhere;
|
|
34
34
|
const listening = connected && agent.listenerActive;
|
|
35
|
-
return (_jsx(Tooltip, { content: connected ? status.label : "Agent & MCP settings", stableTrigger: true, children: _jsxs(Button, { variant: "quiet", className: "agent-status-button", "aria-label": connected ? `MCP · ${status.label}` : "Settings", "data-test": "settings-button", "data-mcp-connected": connected ? "true" : "false", "data-mcp-listening": listening ? "true" : "false", onClick: () => onOpenSettings("mcp"), children: [connected ? _jsx(ConnectedAgentAvatar, { name: agent.agentClientName }) : _jsxs("span", { className: "agent-status-button__avatars", children: [_jsx(CodexAvatar, {}), _jsx(ClaudeAvatar, {}), _jsx(CursorAvatar, {})] }), _jsx("span", { className: "agent-status-button__label", children: connected ? "MCP" : "Settings" }), connected ? (_jsx("span", { className: "agent-status-button__dot", "data-test": "agent-status-dot", "aria-hidden": "true" })) : null] }) }));
|
|
35
|
+
return (_jsx(Tooltip, { content: connected ? status.label : mcpEnabled ? "Agent & MCP settings" : "Settings", stableTrigger: true, children: _jsxs(Button, { variant: "quiet", className: "agent-status-button", "aria-label": connected ? `MCP · ${status.label}` : "Settings", "data-test": "settings-button", "data-mcp-connected": connected ? "true" : "false", "data-mcp-listening": listening ? "true" : "false", onClick: () => onOpenSettings(mcpEnabled ? "mcp" : "instructions"), children: [connected ? _jsx(ConnectedAgentAvatar, { name: agent.agentClientName }) : mcpEnabled ? _jsxs("span", { className: "agent-status-button__avatars", children: [_jsx(CodexAvatar, {}), _jsx(ClaudeAvatar, {}), _jsx(CursorAvatar, {})] }) : null, _jsx("span", { className: "agent-status-button__label", children: connected ? "MCP" : "Settings" }), connected ? (_jsx("span", { className: "agent-status-button__dot", "data-test": "agent-status-dot", "aria-hidden": "true" })) : null] }) }));
|
|
36
36
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
2
|
import { useMemo, useState, useSyncExternalStore } from "react";
|
|
3
|
-
import { IconArrowBackUp } from "@tabler/icons-react";
|
|
3
|
+
import { IconArrowBackUp, IconRestore } from "@tabler/icons-react";
|
|
4
4
|
import { isComponentChange, isElementChange, isTextContentChange, isTokenChange, } from "../changes/types.js";
|
|
5
5
|
import { useChanges, revertChange } from "../drafts/store.js";
|
|
6
6
|
import { StaleChangeIndicator } from "../canvas/StaleChangeIndicator.js";
|
|
@@ -102,8 +102,7 @@ export function ChangesLog({ onClearSession }) {
|
|
|
102
102
|
const sketchStore = useSketchStore();
|
|
103
103
|
const sketches = sketchStore.items;
|
|
104
104
|
const structuralChanges = useSyncExternalStore(subscribeStructuralChanges, getStructuralChanges, getStructuralChanges);
|
|
105
|
-
// Diagnostics
|
|
106
|
-
// resolves a snapshot or its document observer detects a reconciliation.
|
|
105
|
+
// Diagnostics update independently of structural state, so they need their own subscriptions.
|
|
107
106
|
useSyncExternalStore(subscribeStructuralDiagnostics, getStructuralDiagnosticRevision, getStructuralDiagnosticRevision);
|
|
108
107
|
useSyncExternalStore(subscribeRenderedInstanceDiagnostics, getRenderedInstanceDiagnosticRevision, getRenderedInstanceDiagnosticRevision);
|
|
109
108
|
useSyncExternalStore(subscribeTextProjectionDiagnostics, getTextProjectionDiagnosticRevision, getTextProjectionDiagnosticRevision);
|
|
@@ -130,5 +129,5 @@ export function ChangesLog({ onClearSession }) {
|
|
|
130
129
|
? structuralParentIdentityKey(change.source.parent) === structuralParentIdentityKey(change.destination.parent)
|
|
131
130
|
? `${change.presentation.destinationParentTag} position ${change.presentation.toIndex + 1}`
|
|
132
131
|
: `${structuralParentLabel(change, "destination")} position ${change.presentation.toIndex + 1}`
|
|
133
|
-
: "Removed" })] }), _jsx("span", { className: "changes__scope", "data-test": "structural-scope", children: "This rendered item only" }), getStructuralChangeDiagnostics(change.id).map((diagnostic) => (_jsx("span", { className: "changes__diagnostic", "data-test": "structural-diagnostic", "data-document": diagnostic.document, "data-status": diagnostic.status, "data-reason": diagnostic.reason, children: structuralDiagnosticText(diagnostic) }, `${diagnostic.document}:${diagnostic.status}:${diagnostic.reason ?? ""}`)))] }), _jsx(RevertButton, { dataTest: "dom-change-revert", onClick: () => revertStructuralChange(change.id) })] }) }, change.id))), sketches.map((item) => _jsx(SketchChangeRow, { item: item }, `${item.document.id}:${item.document.revision}`)), sketchStore.error ? _jsx(StatusCallout, { tone: "warning", "data-test": "sketch-storage-error", children: sketchStore.error }) : null] })) }) : null, onClearSession ? (_jsx("div", { className: "changes__session-action", "data-test": "session-actions", children:
|
|
132
|
+
: "Removed" })] }), _jsx("span", { className: "changes__scope", "data-test": "structural-scope", children: "This rendered item only" }), getStructuralChangeDiagnostics(change.id).map((diagnostic) => (_jsx("span", { className: "changes__diagnostic", "data-test": "structural-diagnostic", "data-document": diagnostic.document, "data-status": diagnostic.status, "data-reason": diagnostic.reason, children: structuralDiagnosticText(diagnostic) }, `${diagnostic.document}:${diagnostic.status}:${diagnostic.reason ?? ""}`)))] }), _jsx(RevertButton, { dataTest: "dom-change-revert", onClick: () => revertStructuralChange(change.id) })] }) }, change.id))), sketches.map((item) => _jsx(SketchChangeRow, { item: item }, `${item.document.id}:${item.document.revision}`)), sketchStore.error ? _jsx(StatusCallout, { tone: "warning", "data-test": "sketch-storage-error", children: sketchStore.error }) : null] })) }) : null, onClearSession ? (_jsx("div", { className: "changes__session-action", "data-test": "session-actions", children: _jsxs(Button, { variant: "quiet", type: "button", "data-test": "clear-session", onClick: onClearSession, children: [_jsx(IconRestore, { size: "var(--icon-size-small)", stroke: "var(--icon-stroke-width)", "aria-hidden": "true" }), "Clear Changes"] }) })) : null] }));
|
|
134
133
|
}
|
|
@@ -5,5 +5,6 @@ export interface CopyPromptButtonProps {
|
|
|
5
5
|
readonly settingsSection?: SettingsSection;
|
|
6
6
|
readonly onOpenSettings?: (section: SettingsSection) => void;
|
|
7
7
|
readonly onSettingsOpenChange?: (open: boolean) => void;
|
|
8
|
+
readonly onClearChanges?: () => void;
|
|
8
9
|
}
|
|
9
|
-
export declare function CopyPromptButton({ settingsOpen: controlledSettingsOpen, settingsSection: controlledSettingsSection, onOpenSettings, onSettingsOpenChange, }?: CopyPromptButtonProps): ReactElement;
|
|
10
|
+
export declare function CopyPromptButton({ settingsOpen: controlledSettingsOpen, settingsSection: controlledSettingsSection, onOpenSettings, onSettingsOpenChange, onClearChanges, }?: CopyPromptButtonProps): ReactElement;
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { PromptActionButton, PromptActionRow } from "./PromptActionButton.js";
|
|
2
3
|
import { Menu } from "@base-ui/react/menu";
|
|
3
4
|
import { iterationId } from "../canvas/frameContent.js";
|
|
4
5
|
import { useEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
|
|
5
|
-
import { IconArtboard, IconBoltFilled, IconCheck,
|
|
6
|
+
import { IconArtboard, IconBoltFilled, IconCheck, IconCopy, IconPencil, IconPlugConnected, IconSend, IconX, } from "@tabler/icons-react";
|
|
6
7
|
import { useChanges } from "../drafts/store.js";
|
|
7
8
|
import { countPromptChanges } from "../prompt/generatePrompt.js";
|
|
8
9
|
import { loadCustomInstructions, saveCustomInstructions } from "../prompt/promptSettings.js";
|
|
@@ -32,7 +33,7 @@ import { copyToClipboard } from "../prompt/copyToClipboard.js";
|
|
|
32
33
|
import { useFrameComments } from "../comments/store.js";
|
|
33
34
|
import { reconcileComments } from "../comments/verification.js";
|
|
34
35
|
import { getRegisteredFrames } from "../canvas/projection.js";
|
|
35
|
-
export function CopyPromptButton({ settingsOpen: controlledSettingsOpen, settingsSection: controlledSettingsSection, onOpenSettings, onSettingsOpenChange, } = {}) {
|
|
36
|
+
export function CopyPromptButton({ settingsOpen: controlledSettingsOpen, settingsSection: controlledSettingsSection, onOpenSettings, onSettingsOpenChange, onClearChanges, } = {}) {
|
|
36
37
|
const changes = useChanges();
|
|
37
38
|
const comments = useFrameComments();
|
|
38
39
|
useDrafts();
|
|
@@ -323,15 +324,15 @@ export function CopyPromptButton({ settingsOpen: controlledSettingsOpen, setting
|
|
|
323
324
|
: canSend
|
|
324
325
|
? "Send to the connected agent"
|
|
325
326
|
: "Edits made in the inspector";
|
|
326
|
-
const promptButton = (
|
|
327
|
-
return (_jsxs("div", { className: "copy-prompt__stack", "data-test": "copy-prompt-control", children: [hasMenu ? (_jsxs(Menu.Root, { modal: false, children: [_jsx(Menu.Trigger, { render: promptButton }), _jsx(Menu.Portal, { container: portalContainer(), children: _jsx(Menu.Positioner, { className: "inspector-popover__positioner", side: "bottom", align: "start", sideOffset: 6, children: _jsxs(Menu.Popup, { className: "inspector-popover__popup copy-prompt__menu", "data-test": "copy-prompt-menu", children: [activeArtifactId ? (_jsxs(_Fragment, { children: [_jsxs(Menu.Item, { className: "copy-prompt__menu-item", "data-test": "copy-iteration-prompt", label: "Copy iteration prompt", onClick: () => void copyIterationPrompt("iteration"), children: [_jsx(IconArtboard, { className: "copy-prompt__menu-icon", size: "var(--icon-size-small)", stroke: "var(--icon-stroke-width)", "aria-hidden": "true" }), _jsxs("span", { className: "copy-prompt__menu-content", children: [_jsx("span", { className: "copy-prompt__menu-title", children: "Copy iteration prompt" }), _jsx("span", { className: "copy-prompt__menu-description", children: "Continue editing this HTML iteration." })] })] }), _jsxs(Menu.Item, { className: "copy-prompt__menu-item", "data-test": "copy-iteration-implementation", label: "Copy prompt for live app", onClick: () => void copyIterationPrompt("application"), children: [_jsx(IconBoltFilled, { className: "copy-prompt__menu-icon copy-prompt__menu-icon--live", size: "var(--icon-size-small)", "aria-hidden": "true" }), _jsxs("span", { className: "copy-prompt__menu-content", children: [_jsx("span", { className: "copy-prompt__menu-title", children: "Copy prompt for live app" }), _jsx("span", { className: "copy-prompt__menu-description", children: "Implement design in real app" })] })] })] })) : (_jsxs(Menu.Item, { className: "copy-prompt__menu-item", "data-test": "copy-style-edit-prompt", label: styleEditLabel, disabled: !canConnect && changeCount === 0, onClick: () => void onClick(), children: [canConnect
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
327
|
+
const promptButton = (_jsx(PromptActionButton, { disabled: disabled, copied: copied, agentState: agent.state, busy: preparing || working || connecting, onClick: hasMenu ? undefined : onClick, icon: icon, label: label, badgeCount: badgeCount, hasMenu: hasMenu }));
|
|
328
|
+
return (_jsxs("div", { className: "copy-prompt__stack", "data-test": "copy-prompt-control", children: [_jsx(PromptActionRow, { onClear: onClearChanges, hasChanges: changeCount > 0, children: hasMenu ? (_jsxs(Menu.Root, { modal: false, children: [_jsx(Menu.Trigger, { render: promptButton }), _jsx(Menu.Portal, { container: portalContainer(), children: _jsx(Menu.Positioner, { className: "inspector-popover__positioner", side: "bottom", align: "start", sideOffset: 6, children: _jsxs(Menu.Popup, { className: "inspector-popover__popup copy-prompt__menu", "data-test": "copy-prompt-menu", children: [activeArtifactId ? (_jsxs(_Fragment, { children: [_jsxs(Menu.Item, { className: "copy-prompt__menu-item", "data-test": "copy-iteration-prompt", label: "Copy iteration prompt", onClick: () => void copyIterationPrompt("iteration"), children: [_jsx(IconArtboard, { className: "copy-prompt__menu-icon", size: "var(--icon-size-small)", stroke: "var(--icon-stroke-width)", "aria-hidden": "true" }), _jsxs("span", { className: "copy-prompt__menu-content", children: [_jsx("span", { className: "copy-prompt__menu-title", children: "Copy iteration prompt" }), _jsx("span", { className: "copy-prompt__menu-description", children: "Continue editing this HTML iteration." })] })] }), _jsxs(Menu.Item, { className: "copy-prompt__menu-item", "data-test": "copy-iteration-implementation", label: "Copy prompt for live app", onClick: () => void copyIterationPrompt("application"), children: [_jsx(IconBoltFilled, { className: "copy-prompt__menu-icon copy-prompt__menu-icon--live", size: "var(--icon-size-small)", "aria-hidden": "true" }), _jsxs("span", { className: "copy-prompt__menu-content", children: [_jsx("span", { className: "copy-prompt__menu-title", children: "Copy prompt for live app" }), _jsx("span", { className: "copy-prompt__menu-description", children: "Implement design in real app" })] })] })] })) : (_jsxs(Menu.Item, { className: "copy-prompt__menu-item", "data-test": "copy-style-edit-prompt", label: styleEditLabel, disabled: !canConnect && changeCount === 0, onClick: () => void onClick(), children: [canConnect
|
|
329
|
+
? _jsx(IconPlugConnected, { className: "copy-prompt__menu-icon", size: "var(--icon-size-small)", stroke: "var(--icon-stroke-width)", "aria-hidden": "true" })
|
|
330
|
+
: canSend
|
|
331
|
+
? _jsx(IconSend, { className: "copy-prompt__menu-icon", size: "var(--icon-size-small)", stroke: "var(--icon-stroke-width)", "aria-hidden": "true" })
|
|
332
|
+
: _jsx(IconPencil, { className: "copy-prompt__menu-icon", size: "var(--icon-size-small)", stroke: "var(--icon-stroke-width)", "aria-hidden": "true" }), _jsxs("span", { className: "copy-prompt__menu-content", children: [_jsx("span", { className: "copy-prompt__menu-title", children: styleEditLabel }), _jsx("span", { className: "copy-prompt__menu-description", children: styleEditDescription })] })] })), visibleSketches.length > 0 ? _jsx(Menu.Separator, { className: "copy-prompt__menu-separator" }) : null, visibleSketches.map((item, index) => {
|
|
333
|
+
const busy = item.status === "dispatching" || item.status === "handing-off";
|
|
334
|
+
return (_jsxs("div", { className: "copy-prompt__menu-row", children: [_jsxs(Menu.Item, { className: "copy-prompt__menu-item copy-prompt__menu-item--sketch", "data-test": "copy-sketch", "data-sketch-id": item.document.id, label: `Copy Sketch ${index + 1}`, disabled: busy, onClick: () => void copySketchImageOnRequest(item.document.annotatedImage), children: [_jsx(SketchThumbnail, { item: item }), _jsxs("span", { className: "copy-prompt__menu-content", children: [_jsxs("span", { className: "copy-prompt__menu-title", children: ["Copy Sketch ", index + 1] }), item.document.description ? (_jsx("span", { className: "copy-prompt__menu-description copy-prompt__menu-description--truncate", children: item.document.description })) : null] })] }), _jsx(IconButton, { className: "copy-prompt__menu-delete", variant: "quiet", size: "compact", label: `Delete Sketch ${index + 1}`, "data-test": "copy-sketch-delete", disabled: busy, onClick: () => void deleteSketch(item.document.id), children: _jsx(IconX, { size: "var(--icon-size-small)", "aria-hidden": "true" }) })] }, item.document.id));
|
|
335
|
+
})] }) }) })] }, activeDraftCardId)) : promptButton }), statusAction || agentStatus.kind === "connected-not-listening" ? (_jsx(StatusCallout, { className: "copy-prompt__agent-status", tone: agentStatus.tone, "data-test": "agent-connection-status", children: _jsxs("div", { className: "copy-prompt__agent-status-content", children: [_jsx("span", { role: "status", children: agentStatus.label }), statusAction ? (_jsx(Button, { size: "compact", variant: "quiet", "data-test": "agent-status-action", "data-action": statusAction.kind, type: "button", onClick: () => void handleAgentStatusAction(), children: statusAction.label })) : null] }) })) : null, showImplemented ? (_jsxs("p", { className: "copy-prompt__hint copy-prompt__hint--centered copy-prompt__hint--implemented", "data-test": "handoff-implemented-hint", role: "status", children: ["Changes implemented.", remainingCount > 0 ? (_jsxs(_Fragment, { children: [" ", _jsx("button", { type: "button", className: "copy-prompt__hint-action", "data-test": "handoff-clear-remaining", onClick: clearRemaining, children: "Clear stale edits" })] })) : null] })) : null, saveMessage ? (_jsx("p", { className: "copy-prompt__hint copy-prompt__hint--centered", "data-test": "iteration-save-hint", role: "status", children: saveMessage })) : null, sketchFallback ? (_jsxs(StatusCallout, { className: "copy-prompt__sketch-fallback", tone: "warning", "data-test": "sketch-dispatch-error", children: [_jsx("span", { children: sketchFallback.error }), _jsx(Button, { size: "compact", variant: "secondary", type: "button", "data-test": "sketch-copy-fallback", onClick: () => {
|
|
335
336
|
void copyHandoff(sketchFallback.handoff).then(() => {
|
|
336
337
|
setSketchFallback(null);
|
|
337
338
|
}).catch(() => undefined);
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ReactElement } from "react";
|
|
2
|
+
import type { ResolvedProperty, TokenEntry } from "../../css/model/index.js";
|
|
3
|
+
import type { SelectedElement } from "../selection/selectionStore.js";
|
|
4
|
+
import type { StyleSelection } from "../selection/styleSelection.js";
|
|
5
|
+
import type { InteractionState } from "./styleState.js";
|
|
6
|
+
export interface InspectorEditorsProps {
|
|
7
|
+
readonly selected: SelectedElement;
|
|
8
|
+
readonly styleSelection: StyleSelection | null;
|
|
9
|
+
readonly tokenEntries: TokenEntry[];
|
|
10
|
+
readonly tokenRows: ResolvedProperty[];
|
|
11
|
+
readonly styleState: InteractionState;
|
|
12
|
+
readonly showText: boolean;
|
|
13
|
+
readonly backgroundTokenRow: ResolvedProperty | null;
|
|
14
|
+
}
|
|
15
|
+
/** Composes the same style editors for the live inspector and fixture hosts. */
|
|
16
|
+
export declare function InspectorEditors({ selected, styleSelection, tokenEntries, tokenRows, styleState, showText, backgroundTokenRow }: InspectorEditorsProps): ReactElement;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { findTokenRow } from "../styleEditors/rowLookup.js";
|
|
3
|
+
import { Typography } from "../styleEditors/Typography.js";
|
|
4
|
+
import { BackgroundEditor } from "../styleEditors/BackgroundEditor.js";
|
|
5
|
+
import { ColorPicker } from "../styleEditors/ColorPicker.js";
|
|
6
|
+
import { BorderEditor } from "../styleEditors/BorderEditor.js";
|
|
7
|
+
import { AppearanceSection } from "../styleEditors/AppearanceSection.js";
|
|
8
|
+
import { BoxShadowEditor } from "../styleEditors/BoxShadowEditor.js";
|
|
9
|
+
import { LayoutSection } from "../styleEditors/LayoutSection.js";
|
|
10
|
+
import { AtRuleContextProvider } from "../ui/AtRuleContext.js";
|
|
11
|
+
/** Composes the same style editors for the live inspector and fixture hosts. */
|
|
12
|
+
export function InspectorEditors({ selected, styleSelection, tokenEntries, tokenRows, styleState, showText, backgroundTokenRow }) {
|
|
13
|
+
return (_jsx(AtRuleContextProvider, { rows: tokenRows, children: _jsxs("div", { className: "style-editors", "data-test": "style-editors", children: [_jsx(LayoutSection, { element: selected, selection: styleSelection, entries: tokenEntries, tokenRows: tokenRows }, `layout-${styleState}`), _jsx(AppearanceSection, { element: selected, selection: styleSelection, entries: tokenEntries, tokenRows: tokenRows }, `appearance-${styleState}`), showText ? _jsxs(_Fragment, { children: [_jsx(Typography, { element: selected, selection: styleSelection, entries: tokenEntries, tokenRows: tokenRows }, `type-${styleState}`), _jsx(ColorPicker, { element: selected, selection: styleSelection, property: "color", entries: tokenEntries, tokenRow: findTokenRow(tokenRows, "color") }, `color-${styleState}`)] }) : null, _jsx(BackgroundEditor, { element: selected, selection: styleSelection, entries: tokenEntries, tokenRow: backgroundTokenRow }, `background-${styleState}`), _jsx(BorderEditor, { element: selected, selection: styleSelection, entries: tokenEntries, tokenRows: tokenRows }, `border-${styleState}`), _jsx(BoxShadowEditor, { element: selected, selection: styleSelection, entries: tokenEntries, tokenRows: tokenRows }, `box-shadow-${styleState}`)] }) }));
|
|
14
|
+
}
|