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,5 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { isComponentChange
|
|
2
|
+
import { isComponentChange } from "../changes/types.js";
|
|
3
|
+
import { useChanges } from "../drafts/store.js";
|
|
3
4
|
import { FieldRow } from "../ui/FieldRow.js";
|
|
4
5
|
import { Select } from "../ui/Select.js";
|
|
5
6
|
import { SegmentedControl } from "../ui/SegmentedControl.js";
|
|
@@ -20,18 +21,21 @@ function pendingValue(target, prop, changes) {
|
|
|
20
21
|
function valueFromOption(prop, serialized) {
|
|
21
22
|
return prop.options.find((option) => String(option) === serialized) ?? serialized;
|
|
22
23
|
}
|
|
23
|
-
export function
|
|
24
|
+
export function useComponentProps(selected) {
|
|
24
25
|
const changes = useChanges();
|
|
25
|
-
const target = editableComponentTargets(selected.componentTargets)[0];
|
|
26
|
+
const target = selected ? editableComponentTargets(selected.componentTargets)[0] : undefined;
|
|
26
27
|
if (!target)
|
|
27
28
|
return null;
|
|
28
|
-
// Text
|
|
29
|
-
// panel input would turn every keystroke into an independent history entry;
|
|
30
|
-
// a single-commit panel transaction belongs to a later interaction design.
|
|
29
|
+
// Text props are owned by the scoped inline editor, not this panel.
|
|
31
30
|
const visibleProps = target.contract.props.filter((prop) => prop.control !== "text" && pendingValue(target, prop, changes) !== undefined);
|
|
32
|
-
|
|
31
|
+
return visibleProps.length === 0 ? null : { target, visibleProps, changes };
|
|
32
|
+
}
|
|
33
|
+
export function ComponentPropsSection({ selected }) {
|
|
34
|
+
const view = useComponentProps(selected);
|
|
35
|
+
if (!view)
|
|
33
36
|
return null;
|
|
34
|
-
|
|
37
|
+
const { target, visibleProps, changes } = view;
|
|
38
|
+
return (_jsxs("section", { className: "editor component-props", "data-test": "component-props-section", "data-component": target.meta.componentName, children: [target.livePreview === false ? (_jsx("div", { className: "component-props__hint", "data-test": "component-props-prompt-only", children: "Live preview isn't available here. Changes are added to the prompt." })) : null, visibleProps.map((prop) => {
|
|
35
39
|
const current = pendingValue(target, prop, changes);
|
|
36
40
|
return (_jsx(FieldRow, { label: prop.name, property: prop.name, "data-test": "component-prop", children: prop.control === "boolean" ? (_jsx(SegmentedControl, { "aria-label": `${prop.name} component prop`, "data-test": "component-prop-boolean", "data-property": prop.name, value: current ? "true" : "false", options: [
|
|
37
41
|
{ value: "false", label: "Off" },
|
|
@@ -1,16 +1,9 @@
|
|
|
1
1
|
import type { ComponentOverride, ComponentRootInvocation, ComponentRuntimeAdapter, EditableComponentTarget, RuntimeComponentTarget } from "./types.js";
|
|
2
|
-
/** Register a framework adapter without coupling semantic resolution to React. */
|
|
3
2
|
export declare function registerComponentRuntimeAdapter(adapter: ComponentRuntimeAdapter): () => void;
|
|
4
3
|
export declare function inspectComponentTargets(element: HTMLElement): RuntimeComponentTarget[];
|
|
5
|
-
/**
|
|
6
|
-
* Returns the invocations, nearest first, whose entire rendered output is this
|
|
7
|
-
* element. Null means no enabled runtime could read the element's ancestry.
|
|
8
|
-
*/
|
|
4
|
+
/** Nearest first; null means no enabled runtime could read the element's ancestry. */
|
|
9
5
|
export declare function inspectRootInvocations(element: HTMLElement): ComponentRootInvocation[] | null;
|
|
10
|
-
/**
|
|
11
|
-
* Resolve multiplicity through the owning runtime Adapter. The inspector does
|
|
12
|
-
* not infer it from DOM order or retain a React fiber as durable identity.
|
|
13
|
-
*/
|
|
6
|
+
/** Multiplicity is never inferred from DOM order. */
|
|
14
7
|
export declare function callsiteMultiplicity(target: RuntimeComponentTarget): number | null;
|
|
15
8
|
export declare function editableComponentTargets(targets: RuntimeComponentTarget[]): EditableComponentTarget[];
|
|
16
9
|
export declare function replaceComponentOverrideProjection(overrides: ComponentOverride[]): void;
|
|
@@ -6,7 +6,6 @@ function enabledRuntimeAdapters(ownerGlobal) {
|
|
|
6
6
|
return [];
|
|
7
7
|
return [...getHostRuntimeAdapters(ownerGlobal)];
|
|
8
8
|
}
|
|
9
|
-
/** Register a framework adapter without coupling semantic resolution to React. */
|
|
10
9
|
export function registerComponentRuntimeAdapter(adapter) {
|
|
11
10
|
return registerHostRuntimeAdapter(adapter);
|
|
12
11
|
}
|
|
@@ -42,10 +41,7 @@ export function inspectComponentTargets(element) {
|
|
|
42
41
|
}
|
|
43
42
|
return targets;
|
|
44
43
|
}
|
|
45
|
-
/**
|
|
46
|
-
* Returns the invocations, nearest first, whose entire rendered output is this
|
|
47
|
-
* element. Null means no enabled runtime could read the element's ancestry.
|
|
48
|
-
*/
|
|
44
|
+
/** Nearest first; null means no enabled runtime could read the element's ancestry. */
|
|
49
45
|
export function inspectRootInvocations(element) {
|
|
50
46
|
let invocations = null;
|
|
51
47
|
const ownerGlobal = element.ownerDocument.defaultView ?? globalThis;
|
|
@@ -70,10 +66,7 @@ function diagnoseAdapter(adapter, detail) {
|
|
|
70
66
|
diagnosedAdapters.add(adapter);
|
|
71
67
|
console.warn(`[nudge-ui] Ignored invalid ${adapter.framework} Adapter inspection: ${detail}`);
|
|
72
68
|
}
|
|
73
|
-
/**
|
|
74
|
-
* Resolve multiplicity through the owning runtime Adapter. The inspector does
|
|
75
|
-
* not infer it from DOM order or retain a React fiber as durable identity.
|
|
76
|
-
*/
|
|
69
|
+
/** Multiplicity is never inferred from DOM order. */
|
|
77
70
|
export function callsiteMultiplicity(target) {
|
|
78
71
|
return target.mountedCount === undefined ? null : target.mountedCount;
|
|
79
72
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { appendChange } from "../
|
|
1
|
+
import { appendChange } from "../drafts/store.js";
|
|
2
2
|
import { createComponentPropChange } from "./changeModel.js";
|
|
3
3
|
export { createComponentPropChange } from "./changeModel.js";
|
|
4
4
|
export function setComponentProp(target, prop, value) {
|
|
@@ -39,10 +39,8 @@ export function componentChangeToOverride(change) {
|
|
|
39
39
|
if (mountedCount !== undefined
|
|
40
40
|
&& (!Number.isSafeInteger(mountedCount) || mountedCount < 0))
|
|
41
41
|
return null;
|
|
42
|
-
//
|
|
43
|
-
//
|
|
44
|
-
// broaden, even when a malformed/internal record asks for source-site scope.
|
|
45
|
-
// Repeated literals remain explicitly source-editable.
|
|
42
|
+
// Rendered-instance records and repeated expression/spread props must never
|
|
43
|
+
// broaden to a callsite override; repeated literals stay source-editable.
|
|
46
44
|
if (mountedCount !== undefined && mountedCount > 1) {
|
|
47
45
|
if (change.scope !== "source-site")
|
|
48
46
|
return null;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { ComponentInvocationMeta, ComponentRootInvocation } from "../types.js";
|
|
2
|
+
import { type Fiber, type FiberProps } from "./fibers.js";
|
|
3
|
+
import { type FiberRoot } from "./devtoolsHook.js";
|
|
4
|
+
export interface TaggedInvocation {
|
|
5
|
+
meta: ComponentInvocationMeta;
|
|
6
|
+
fiber: Fiber;
|
|
7
|
+
/** Distance above the inspected host fiber, for ordering against boundaries. */
|
|
8
|
+
depth: number;
|
|
9
|
+
root: FiberRoot | null;
|
|
10
|
+
}
|
|
11
|
+
/** Called from transformed modules before any of their JSX renders. */
|
|
12
|
+
export declare function registerReactCallsites(metas: readonly ComponentInvocationMeta[]): void;
|
|
13
|
+
export declare function invocationProps(fiber: Fiber): FiberProps;
|
|
14
|
+
/**
|
|
15
|
+
* Nearest invocation first. One callsite can span several fibers (memo/forwardRef
|
|
16
|
+
* layers, or a component spreading props onward): with no host output between
|
|
17
|
+
* them they are one invocation owned by the outermost layer; a repeat above is recursive.
|
|
18
|
+
*/
|
|
19
|
+
export declare function taggedInvocationsAbove(host: Fiber): TaggedInvocation[];
|
|
20
|
+
export declare function taggedRootInvocations(host: Fiber): Array<ComponentRootInvocation & {
|
|
21
|
+
depth: number;
|
|
22
|
+
}>;
|
|
23
|
+
export declare function taggedCallsiteMultiplicity(callsiteId: string, root?: FiberRoot | null): number | null;
|
|
24
|
+
export declare function canPreviewLive(root: FiberRoot | null): boolean;
|
|
25
|
+
/** Overrides for registered callsites only; wrapped callsites keep their boundary. */
|
|
26
|
+
export declare function replaceTaggedOverrides(next: ReadonlyMap<string, FiberProps>): void;
|
|
27
|
+
/** Test/runtime teardown hook. */
|
|
28
|
+
export declare function resetTaggedCallsites(): void;
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
import { IDENTITY_ATTRIBUTES } from "../../../compiler/identityAttributes.js";
|
|
2
|
+
import { HOST_ROOT_TAG, hostOutputCount, isHostOutput } from "./fibers.js";
|
|
3
|
+
import { commitGeneration, onCommit, propEditingRenderer, rememberRoot, trackedRoots, trackedRootsAvailable, } from "./devtoolsHook.js";
|
|
4
|
+
// React keeps `data-src` on a component's fiber whether or not the component forwards it to the DOM.
|
|
5
|
+
const IDENTITY_PROPS = new Set(IDENTITY_ATTRIBUTES);
|
|
6
|
+
const callsites = new Map();
|
|
7
|
+
let overridesByCallsite = new Map();
|
|
8
|
+
/** Called from transformed modules before any of their JSX renders. */
|
|
9
|
+
export function registerReactCallsites(metas) {
|
|
10
|
+
for (const meta of metas)
|
|
11
|
+
callsites.set(meta.callsiteId, meta);
|
|
12
|
+
registrations += 1;
|
|
13
|
+
observeCommits();
|
|
14
|
+
}
|
|
15
|
+
function taggedCallsite(fiber) {
|
|
16
|
+
if (isHostOutput(fiber))
|
|
17
|
+
return null;
|
|
18
|
+
const src = fiber.memoizedProps?.["data-src"];
|
|
19
|
+
return typeof src === "string" ? callsites.get(src) ?? null : null;
|
|
20
|
+
}
|
|
21
|
+
export function invocationProps(fiber) {
|
|
22
|
+
const props = {};
|
|
23
|
+
for (const [name, value] of Object.entries(fiber.memoizedProps ?? {})) {
|
|
24
|
+
if (!IDENTITY_PROPS.has(name))
|
|
25
|
+
props[name] = value;
|
|
26
|
+
}
|
|
27
|
+
return props;
|
|
28
|
+
}
|
|
29
|
+
function resolveRoot(host) {
|
|
30
|
+
let top = host;
|
|
31
|
+
while (top.return)
|
|
32
|
+
top = top.return;
|
|
33
|
+
if (top.tag !== HOST_ROOT_TAG)
|
|
34
|
+
return { root: null, onCurrentTree: true };
|
|
35
|
+
// SAFETY: a HostRoot fiber's stateNode is its FiberRoot; it is checked to be an object below.
|
|
36
|
+
const root = top.stateNode;
|
|
37
|
+
if (!root || typeof root !== "object")
|
|
38
|
+
return { root: null, onCurrentTree: true };
|
|
39
|
+
rememberRoot(root);
|
|
40
|
+
return { root, onCurrentTree: root.current === top };
|
|
41
|
+
}
|
|
42
|
+
function displayedFiber(fiber, onCurrentTree) {
|
|
43
|
+
return onCurrentTree ? fiber : fiber.alternate ?? fiber;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Nearest invocation first. One callsite can span several fibers (memo/forwardRef
|
|
47
|
+
* layers, or a component spreading props onward): with no host output between
|
|
48
|
+
* them they are one invocation owned by the outermost layer; a repeat above is recursive.
|
|
49
|
+
*/
|
|
50
|
+
export function taggedInvocationsAbove(host) {
|
|
51
|
+
if (callsites.size === 0)
|
|
52
|
+
return [];
|
|
53
|
+
const { root, onCurrentTree } = resolveRoot(host);
|
|
54
|
+
const found = new Map();
|
|
55
|
+
let chain = null;
|
|
56
|
+
let depth = 0;
|
|
57
|
+
for (let fiber = host.return ?? null; fiber; fiber = fiber.return ?? null) {
|
|
58
|
+
depth += 1;
|
|
59
|
+
if (isHostOutput(fiber)) {
|
|
60
|
+
chain = null;
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
const meta = taggedCallsite(fiber);
|
|
64
|
+
if (!meta)
|
|
65
|
+
continue;
|
|
66
|
+
const existing = found.get(meta.callsiteId);
|
|
67
|
+
if (existing && chain === meta.callsiteId) {
|
|
68
|
+
existing.fiber = displayedFiber(fiber, onCurrentTree);
|
|
69
|
+
}
|
|
70
|
+
else if (!existing) {
|
|
71
|
+
found.set(meta.callsiteId, { meta, fiber: displayedFiber(fiber, onCurrentTree), depth, root });
|
|
72
|
+
chain = meta.callsiteId;
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
chain = null;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return [...found.values()];
|
|
79
|
+
}
|
|
80
|
+
export function taggedRootInvocations(host) {
|
|
81
|
+
if (callsites.size === 0)
|
|
82
|
+
return [];
|
|
83
|
+
const invocations = [];
|
|
84
|
+
const seen = new Set();
|
|
85
|
+
let depth = 0;
|
|
86
|
+
for (let fiber = host.return ?? null; fiber && !isHostOutput(fiber); fiber = fiber.return ?? null) {
|
|
87
|
+
depth += 1;
|
|
88
|
+
const meta = taggedCallsite(fiber);
|
|
89
|
+
if (!meta || seen.has(meta.callsiteId))
|
|
90
|
+
continue;
|
|
91
|
+
if (hostOutputCount(fiber) !== 1)
|
|
92
|
+
break;
|
|
93
|
+
seen.add(meta.callsiteId);
|
|
94
|
+
invocations.push({ callsiteId: meta.callsiteId, componentName: meta.componentName, depth });
|
|
95
|
+
}
|
|
96
|
+
return invocations;
|
|
97
|
+
}
|
|
98
|
+
// A mounted tree only changes at a commit, so one walk per root serves every inspection
|
|
99
|
+
// until the next commit; without an observer there is no signal, so nothing is cached.
|
|
100
|
+
let registrations = 0;
|
|
101
|
+
const walkedRoots = new WeakMap();
|
|
102
|
+
function mountedInvocations(roots) {
|
|
103
|
+
const merged = new Map();
|
|
104
|
+
const commits = commitGeneration();
|
|
105
|
+
const version = commits === null ? null : `${commits}:${registrations}`;
|
|
106
|
+
for (const root of roots) {
|
|
107
|
+
const cached = walkedRoots.get(root);
|
|
108
|
+
const invocations = version !== null && cached?.version === version
|
|
109
|
+
? cached.invocations
|
|
110
|
+
: walkRoot(root);
|
|
111
|
+
if (version !== null)
|
|
112
|
+
walkedRoots.set(root, { version, invocations });
|
|
113
|
+
for (const [callsiteId, fibers] of invocations) {
|
|
114
|
+
merged.set(callsiteId, [...(merged.get(callsiteId) ?? []), ...fibers]);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return merged;
|
|
118
|
+
}
|
|
119
|
+
function walkRoot(root) {
|
|
120
|
+
const invocations = new Map();
|
|
121
|
+
const top = root.current;
|
|
122
|
+
if (!top)
|
|
123
|
+
return invocations;
|
|
124
|
+
const stack = [[top, null]];
|
|
125
|
+
while (stack.length > 0) {
|
|
126
|
+
const [fiber, chain] = stack.pop();
|
|
127
|
+
let next = chain;
|
|
128
|
+
if (isHostOutput(fiber)) {
|
|
129
|
+
next = null;
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
const meta = taggedCallsite(fiber);
|
|
133
|
+
if (meta && meta.callsiteId !== chain) {
|
|
134
|
+
const list = invocations.get(meta.callsiteId) ?? [];
|
|
135
|
+
list.push(fiber);
|
|
136
|
+
invocations.set(meta.callsiteId, list);
|
|
137
|
+
next = meta.callsiteId;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
for (let child = fiber.child ?? null; child; child = child.sibling ?? null) {
|
|
141
|
+
stack.push([child, next]);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
return invocations;
|
|
145
|
+
}
|
|
146
|
+
function rootsIncluding(root) {
|
|
147
|
+
const roots = trackedRoots();
|
|
148
|
+
return root && !roots.includes(root) ? [...roots, root] : roots;
|
|
149
|
+
}
|
|
150
|
+
export function taggedCallsiteMultiplicity(callsiteId, root = null) {
|
|
151
|
+
if (!callsites.has(callsiteId))
|
|
152
|
+
return null;
|
|
153
|
+
const count = mountedInvocations(rootsIncluding(root)).get(callsiteId)?.length ?? 0;
|
|
154
|
+
return count > 0 ? count : null;
|
|
155
|
+
}
|
|
156
|
+
export function canPreviewLive(root) {
|
|
157
|
+
return propEditingRenderer(root ?? undefined) !== null;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* The authored value a prop had before its override. A rendered value that is not
|
|
161
|
+
* the last applied override came from a parent render and replaces the record;
|
|
162
|
+
* both fibers of an invocation share the record because React alternates between them.
|
|
163
|
+
*/
|
|
164
|
+
const authoredValues = new WeakMap();
|
|
165
|
+
function authoredFor(fiber) {
|
|
166
|
+
const existing = authoredValues.get(fiber) ?? (fiber.alternate ? authoredValues.get(fiber.alternate) : undefined);
|
|
167
|
+
const record = existing ?? new Map();
|
|
168
|
+
authoredValues.set(fiber, record);
|
|
169
|
+
if (fiber.alternate)
|
|
170
|
+
authoredValues.set(fiber.alternate, record);
|
|
171
|
+
return record;
|
|
172
|
+
}
|
|
173
|
+
/** React's override starts from the last rendered props, so two calls before a render would lose the first. */
|
|
174
|
+
function editInvocation(renderer, fiber, overrides, restoring) {
|
|
175
|
+
const rendered = fiber.memoizedProps ?? {};
|
|
176
|
+
const next = { ...rendered };
|
|
177
|
+
const authored = authoredFor(fiber);
|
|
178
|
+
let changed = false;
|
|
179
|
+
for (const prop of restoring ?? []) {
|
|
180
|
+
const original = authored.get(prop);
|
|
181
|
+
if (!original)
|
|
182
|
+
continue;
|
|
183
|
+
authored.delete(prop);
|
|
184
|
+
if (original.present)
|
|
185
|
+
next[prop] = original.value;
|
|
186
|
+
else
|
|
187
|
+
delete next[prop];
|
|
188
|
+
changed = true;
|
|
189
|
+
}
|
|
190
|
+
for (const [prop, value] of Object.entries(overrides ?? {})) {
|
|
191
|
+
if (Object.is(rendered[prop], value))
|
|
192
|
+
continue;
|
|
193
|
+
const record = authored.get(prop);
|
|
194
|
+
if (record && Object.is(rendered[prop], record.applied)) {
|
|
195
|
+
record.applied = value;
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
authored.set(prop, { present: Object.hasOwn(rendered, prop), value: rendered[prop], applied: value });
|
|
199
|
+
}
|
|
200
|
+
next[prop] = value;
|
|
201
|
+
changed = true;
|
|
202
|
+
}
|
|
203
|
+
if (changed)
|
|
204
|
+
renderer.overrideProps?.(fiber, [], next);
|
|
205
|
+
}
|
|
206
|
+
function applyOverrides(restoring = new Map()) {
|
|
207
|
+
if (overridesByCallsite.size === 0 && restoring.size === 0)
|
|
208
|
+
return;
|
|
209
|
+
const callsiteIds = new Set([...overridesByCallsite.keys(), ...restoring.keys()]);
|
|
210
|
+
for (const root of trackedRoots()) {
|
|
211
|
+
const renderer = propEditingRenderer(root);
|
|
212
|
+
if (!renderer?.overrideProps)
|
|
213
|
+
continue;
|
|
214
|
+
const invocations = mountedInvocations([root]);
|
|
215
|
+
for (const callsiteId of callsiteIds) {
|
|
216
|
+
for (const fiber of invocations.get(callsiteId) ?? []) {
|
|
217
|
+
editInvocation(renderer, fiber, overridesByCallsite.get(callsiteId), restoring.get(callsiteId));
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
/** Overrides for registered callsites only; wrapped callsites keep their boundary. */
|
|
223
|
+
export function replaceTaggedOverrides(next) {
|
|
224
|
+
const registered = new Map([...next].filter(([callsiteId]) => callsites.has(callsiteId)));
|
|
225
|
+
const restoring = new Map();
|
|
226
|
+
for (const [callsiteId, props] of overridesByCallsite) {
|
|
227
|
+
const following = registered.get(callsiteId);
|
|
228
|
+
const dropped = Object.keys(props).filter((prop) => !following || !Object.hasOwn(following, prop));
|
|
229
|
+
if (dropped.length > 0)
|
|
230
|
+
restoring.set(callsiteId, new Set(dropped));
|
|
231
|
+
}
|
|
232
|
+
overridesByCallsite = registered;
|
|
233
|
+
observeCommits();
|
|
234
|
+
applyOverrides(restoring);
|
|
235
|
+
}
|
|
236
|
+
// Overrides are reapplied after every commit because a parent render hands an
|
|
237
|
+
// invocation its authored props again; skipping unchanged values ends the cycle.
|
|
238
|
+
let reapplyQueued = false;
|
|
239
|
+
let stopObserving = null;
|
|
240
|
+
function observeCommits() {
|
|
241
|
+
if (stopObserving)
|
|
242
|
+
return;
|
|
243
|
+
const stop = onCommit(() => {
|
|
244
|
+
if (overridesByCallsite.size === 0 || reapplyQueued)
|
|
245
|
+
return;
|
|
246
|
+
reapplyQueued = true;
|
|
247
|
+
queueMicrotask(() => {
|
|
248
|
+
reapplyQueued = false;
|
|
249
|
+
applyOverrides();
|
|
250
|
+
});
|
|
251
|
+
});
|
|
252
|
+
if (trackedRootsAvailable())
|
|
253
|
+
stopObserving = stop;
|
|
254
|
+
}
|
|
255
|
+
/** Test/runtime teardown hook. */
|
|
256
|
+
export function resetTaggedCallsites() {
|
|
257
|
+
callsites.clear();
|
|
258
|
+
overridesByCallsite = new Map();
|
|
259
|
+
stopObserving?.();
|
|
260
|
+
stopObserving = null;
|
|
261
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { Fiber, FiberProps } from "./fibers.js";
|
|
2
|
+
/** The private seam React DevTools edits props through; read defensively because it is not public API. */
|
|
3
|
+
export interface ReactRendererInternals {
|
|
4
|
+
/** An empty path replaces the whole props object, which is the only form used here. */
|
|
5
|
+
overrideProps?: (fiber: Fiber, path: [], value: FiberProps) => void;
|
|
6
|
+
}
|
|
7
|
+
export interface FiberRoot {
|
|
8
|
+
current?: Fiber | null;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* A fiber must only be edited by its own renderer: a known owner without the toolkit
|
|
12
|
+
* (a production build) answers null rather than borrowing another copy's; an unknown
|
|
13
|
+
* owner resolves only when exactly one capable renderer exists.
|
|
14
|
+
*/
|
|
15
|
+
export declare function propEditingRenderer(root?: FiberRoot): ReactRendererInternals | null;
|
|
16
|
+
/** Commits seen so far, or null when commits cannot be observed. */
|
|
17
|
+
export declare function commitGeneration(): number | null;
|
|
18
|
+
/** True once commits are observable, which needs a hook on the page. */
|
|
19
|
+
export declare function trackedRootsAvailable(): boolean;
|
|
20
|
+
export declare function trackedRoots(): FiberRoot[];
|
|
21
|
+
/** Records a root found from the DOM, for trees that committed before observation began. */
|
|
22
|
+
export declare function rememberRoot(root: FiberRoot): void;
|
|
23
|
+
export declare function onCommit(listener: (root: FiberRoot) => void): () => void;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
const COMMIT_OBSERVER = Symbol.for("nudge-ui.react-commit-observer");
|
|
2
|
+
function hook() {
|
|
3
|
+
// SAFETY: the global is absent or a hook object installed by React Refresh,
|
|
4
|
+
// React DevTools, or the capture script; members are checked before use.
|
|
5
|
+
const value = globalThis.__REACT_DEVTOOLS_GLOBAL_HOOK__;
|
|
6
|
+
return typeof value === "object" && value !== null ? value : null;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* A fiber must only be edited by its own renderer: a known owner without the toolkit
|
|
10
|
+
* (a production build) answers null rather than borrowing another copy's; an unknown
|
|
11
|
+
* owner resolves only when exactly one capable renderer exists.
|
|
12
|
+
*/
|
|
13
|
+
export function propEditingRenderer(root) {
|
|
14
|
+
const renderers = hook()?.renderers;
|
|
15
|
+
if (!(renderers instanceof Map))
|
|
16
|
+
return null;
|
|
17
|
+
const rendererId = root ? commitObserver()?.roots.get(root) : undefined;
|
|
18
|
+
if (rendererId !== undefined && rendererId >= 0) {
|
|
19
|
+
const owner = renderers.get(rendererId);
|
|
20
|
+
return typeof owner?.overrideProps === "function" ? owner : null;
|
|
21
|
+
}
|
|
22
|
+
const capable = [...renderers.values()].filter((renderer) => typeof renderer?.overrideProps === "function");
|
|
23
|
+
return capable.length === 1 ? capable[0] : null;
|
|
24
|
+
}
|
|
25
|
+
/** Observes commits through the hook once per realm; roots are recorded so the runtime can walk mounted trees without a DOM query. */
|
|
26
|
+
function commitObserver() {
|
|
27
|
+
const target = hook();
|
|
28
|
+
if (!target)
|
|
29
|
+
return null;
|
|
30
|
+
const existing = target[COMMIT_OBSERVER];
|
|
31
|
+
if (existing)
|
|
32
|
+
return existing;
|
|
33
|
+
const observer = { roots: new Map(), listeners: new Set(), generation: 0 };
|
|
34
|
+
const previous = target.onCommitFiberRoot;
|
|
35
|
+
target.onCommitFiberRoot = function onCommitFiberRoot(rendererId, root, ...details) {
|
|
36
|
+
if (typeof previous === "function")
|
|
37
|
+
previous.call(this, rendererId, root, ...details);
|
|
38
|
+
observer.generation += 1;
|
|
39
|
+
if (root && typeof root === "object") {
|
|
40
|
+
observer.roots.set(root, rendererId);
|
|
41
|
+
for (const listener of observer.listeners)
|
|
42
|
+
listener(root);
|
|
43
|
+
}
|
|
44
|
+
};
|
|
45
|
+
target[COMMIT_OBSERVER] = observer;
|
|
46
|
+
return observer;
|
|
47
|
+
}
|
|
48
|
+
/** Commits seen so far, or null when commits cannot be observed. */
|
|
49
|
+
export function commitGeneration() {
|
|
50
|
+
return commitObserver()?.generation ?? null;
|
|
51
|
+
}
|
|
52
|
+
/** True once commits are observable, which needs a hook on the page. */
|
|
53
|
+
export function trackedRootsAvailable() {
|
|
54
|
+
return commitObserver() !== null;
|
|
55
|
+
}
|
|
56
|
+
export function trackedRoots() {
|
|
57
|
+
return [...(commitObserver()?.roots.keys() ?? [])];
|
|
58
|
+
}
|
|
59
|
+
/** Records a root found from the DOM, for trees that committed before observation began. */
|
|
60
|
+
export function rememberRoot(root) {
|
|
61
|
+
const observer = commitObserver();
|
|
62
|
+
if (observer && !observer.roots.has(root))
|
|
63
|
+
observer.roots.set(root, -1);
|
|
64
|
+
}
|
|
65
|
+
export function onCommit(listener) {
|
|
66
|
+
const observer = commitObserver();
|
|
67
|
+
if (!observer)
|
|
68
|
+
return () => undefined;
|
|
69
|
+
observer.listeners.add(listener);
|
|
70
|
+
return () => observer.listeners.delete(listener);
|
|
71
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** Props exactly as the application passed them; values are read and checked individually. */
|
|
2
|
+
export type FiberProps = Readonly<Record<string, unknown>>;
|
|
3
|
+
export interface Fiber {
|
|
4
|
+
type?: unknown;
|
|
5
|
+
tag?: number;
|
|
6
|
+
memoizedProps?: FiberProps | null;
|
|
7
|
+
return?: Fiber | null;
|
|
8
|
+
child?: Fiber | null;
|
|
9
|
+
sibling?: Fiber | null;
|
|
10
|
+
alternate?: Fiber | null;
|
|
11
|
+
stateNode?: unknown;
|
|
12
|
+
}
|
|
13
|
+
export declare const HOST_ROOT_TAG = 3;
|
|
14
|
+
export declare function findFiber(element: Element): Fiber | null;
|
|
15
|
+
export declare function isHostOutput(fiber: Fiber): boolean;
|
|
16
|
+
/** Counts top-level host outputs below a fiber, stopping once there are two. */
|
|
17
|
+
export declare function hostOutputCount(fiber: Fiber): number;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/** React work tags for host output that has no string element type. */
|
|
2
|
+
const HOST_PORTAL_TAG = 4;
|
|
3
|
+
const HOST_TEXT_TAG = 6;
|
|
4
|
+
export const HOST_ROOT_TAG = 3;
|
|
5
|
+
export function findFiber(element) {
|
|
6
|
+
for (const key of Object.keys(element)) {
|
|
7
|
+
if (key.startsWith("__reactFiber$") || key.startsWith("__reactInternalInstance$")) {
|
|
8
|
+
// SAFETY: React DOM stores the node's fiber under this generated key; every field is read defensively.
|
|
9
|
+
return element[key] ?? null;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
return null;
|
|
13
|
+
}
|
|
14
|
+
export function isHostOutput(fiber) {
|
|
15
|
+
return typeof fiber.type === "string" || fiber.tag === HOST_TEXT_TAG || fiber.tag === HOST_PORTAL_TAG;
|
|
16
|
+
}
|
|
17
|
+
/** Counts top-level host outputs below a fiber, stopping once there are two. */
|
|
18
|
+
export function hostOutputCount(fiber) {
|
|
19
|
+
let count = 0;
|
|
20
|
+
const visit = (parent) => {
|
|
21
|
+
for (let child = parent.child ?? null; child && count < 2; child = child.sibling ?? null) {
|
|
22
|
+
if (isHostOutput(child))
|
|
23
|
+
count += 1;
|
|
24
|
+
else
|
|
25
|
+
visit(child);
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
visit(fiber);
|
|
29
|
+
return count;
|
|
30
|
+
}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { type ReactElement } from "react";
|
|
2
|
-
import type { ComponentInvocationMeta, ComponentOverride, ComponentRootInvocation, ComponentRuntimeAdapter, RuntimeComponentTarget } from "
|
|
3
|
-
|
|
2
|
+
import type { ComponentInvocationMeta, ComponentOverride, ComponentRootInvocation, ComponentRuntimeAdapter, RuntimeComponentTarget } from "../types.js";
|
|
3
|
+
export { registerReactCallsites } from "./callsites.js";
|
|
4
4
|
export declare function getReactCallsiteMultiplicity(callsiteId: string): number | null;
|
|
5
5
|
/** Test/runtime teardown hook; canonical changes never depend on this state. */
|
|
6
6
|
export declare function resetReactComponentRuntime(): void;
|
|
7
7
|
export declare function instrumentReactComponent(element: ReactElement<Record<string, unknown>>, meta: ComponentInvocationMeta): ReactElement;
|
|
8
|
+
/** Wrapped callsites answer through their boundary, others through their fiber's identity tag; both merge nearest first. */
|
|
8
9
|
export declare function inspectReactComponentTargets(element: HTMLElement): RuntimeComponentTarget[];
|
|
9
10
|
export declare function inspectReactRootInvocations(element: HTMLElement): ComponentRootInvocation[] | null;
|
|
10
11
|
export declare function replaceReactComponentOverrides(overrides: ComponentOverride[]): void;
|