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
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ReactElement, ReactNode } from "react";
|
|
2
|
+
export interface InspectorPanelProps {
|
|
3
|
+
readonly isOpen: boolean;
|
|
4
|
+
readonly collapseDisabled?: boolean;
|
|
5
|
+
readonly toggleShortcut?: string;
|
|
6
|
+
readonly headerActions: ReactNode;
|
|
7
|
+
readonly prompt: ReactNode;
|
|
8
|
+
readonly children: ReactNode;
|
|
9
|
+
readonly onOpenChange: (open: boolean) => void;
|
|
10
|
+
}
|
|
11
|
+
/** Shared panel layout. The host supplies state, content, and commands. */
|
|
12
|
+
export declare function InspectorPanel({ isOpen, collapseDisabled, toggleShortcut, headerActions, prompt, children, onOpenChange }: InspectorPanelProps): ReactElement;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { IconLayoutSidebarRight } from "@tabler/icons-react";
|
|
3
|
+
import { IconButton } from "../ui/IconButton.js";
|
|
4
|
+
import { Tooltip } from "../ui/Tooltip.js";
|
|
5
|
+
/** Shared panel layout. The host supplies state, content, and commands. */
|
|
6
|
+
export function InspectorPanel({ isOpen, collapseDisabled, toggleShortcut, headerActions, prompt, children, onOpenChange }) {
|
|
7
|
+
return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "panel", "data-open": isOpen ? "true" : "false", children: [_jsxs("div", { className: "panel__tabs", "aria-label": "Inspector controls", children: [_jsxs("div", { className: "panel__header-row", "data-test": "inspect-tab", children: [_jsx(Tooltip, { content: "Hide inspector", shortcut: toggleShortcut, stableTrigger: true, children: _jsx(IconButton, { variant: "quiet", label: "Collapse inspector", "data-test": "collapse-inspector", disabled: collapseDisabled, style: { marginLeft: "calc(var(--space-8) * -1)" }, onClick: () => onOpenChange(false), children: _jsx(IconLayoutSidebarRight, { size: "var(--icon-size-small)", stroke: 1.8, "aria-hidden": "true" }) }) }), _jsx("div", { className: "panel__header-actions", children: headerActions })] }), _jsx("div", { className: "panel__copy-row", children: prompt })] }), _jsx("div", { className: "panel__body", children: children })] }), !isOpen ? (_jsx("div", { className: "panel__restore", children: _jsx(Tooltip, { children: _jsx(IconButton, { variant: "quiet", label: "Show inspector", className: "panel__restore-button", "data-test": "show-inspector", onClick: () => onOpenChange(true), children: _jsx(IconLayoutSidebarRight, { size: "var(--icon-size-small)", stroke: "var(--icon-stroke-width)", "aria-hidden": "true" }) }) }) })) : null] }));
|
|
8
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { ReactElement, ReactNode } from "react";
|
|
2
|
+
import type { InteractionState } from "./styleState.js";
|
|
3
|
+
import type { ElementName } from "./elementName.js";
|
|
4
|
+
export interface InspectorSelectionProps {
|
|
5
|
+
readonly identity?: {
|
|
6
|
+
readonly cid: string;
|
|
7
|
+
readonly src: string;
|
|
8
|
+
};
|
|
9
|
+
readonly count: number;
|
|
10
|
+
readonly name: ElementName | null;
|
|
11
|
+
/** The selection has editable component props, which links it like a shared source site does. */
|
|
12
|
+
readonly isComponent?: boolean;
|
|
13
|
+
/** Component props, shown between the name and the link status. */
|
|
14
|
+
readonly children?: ReactNode;
|
|
15
|
+
readonly editScope: "source-site" | "rendered-instance" | null;
|
|
16
|
+
readonly sourceSiteMatchCount: number;
|
|
17
|
+
readonly styleState: InteractionState;
|
|
18
|
+
readonly availableInteractionStates: readonly InteractionState[];
|
|
19
|
+
readonly onStyleStateChange: (state: InteractionState) => void;
|
|
20
|
+
readonly onRelink: () => void;
|
|
21
|
+
readonly onUnlink: () => void;
|
|
22
|
+
}
|
|
23
|
+
/** Presents selection scope and interaction states without reading the DOM. */
|
|
24
|
+
export declare function InspectorSelection({ identity, count, name, isComponent, children, editScope, sourceSiteMatchCount, styleState, availableInteractionStates, onStyleStateChange, onRelink, onUnlink }: InspectorSelectionProps): ReactElement;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { StatusCallout } from "../ui/StatusCallout.js";
|
|
3
|
+
import { IconLink, IconSquareRotated, IconUnlink } from "@tabler/icons-react";
|
|
4
|
+
import { IconButton } from "../ui/IconButton.js";
|
|
5
|
+
import { FieldRow } from "../ui/FieldRow.js";
|
|
6
|
+
import { Select } from "../ui/Select.js";
|
|
7
|
+
import { formatInspectorLabel } from "../ui/labels.js";
|
|
8
|
+
/** Presents selection scope and interaction states without reading the DOM. */
|
|
9
|
+
export function InspectorSelection({ identity, count, name, isComponent = false, children, editScope, sourceSiteMatchCount, styleState, availableInteractionStates, onStyleStateChange, onRelink, onUnlink }) {
|
|
10
|
+
const showInteractionState = count === 1 && availableInteractionStates.length > 1;
|
|
11
|
+
const hasEditScopeCallout = count === 1 && (editScope === "rendered-instance" || sourceSiteMatchCount > 1);
|
|
12
|
+
return _jsx(_Fragment, { children: name || children || showInteractionState || hasEditScopeCallout ? (_jsxs("div", { className: `selection${hasEditScopeCallout ? "" : " selection--without-scope-callout"}`, "data-test": "selection", "data-selected-cid": identity?.cid, "data-selected-src": identity?.src, "data-selected-count": count, children: [name ? (_jsxs("div", { className: "editor__title-row selection__name", "data-test": "selection-name", children: [isComponent || (hasEditScopeCallout && editScope === "source-site") ? (_jsx(IconSquareRotated, { className: "selection__linked-icon", size: 14, stroke: 2, "aria-hidden": "true", "data-test": "selection-linked-icon" })) : null, _jsx("div", { className: "editor__title", children: name.title }), hasEditScopeCallout ? (_jsx(StatusCallout, { tone: editScope === "rendered-instance" ? "neutral" : "accent", className: "selection__scope", "data-test": "edit-scope", "data-lost": "false", children: editScope === "rendered-instance" ? (_jsxs("div", { className: "scope__unlinked", children: [_jsx("span", { children: "Unlinked" }), _jsx(IconButton, { variant: "quiet", label: "Relink element", className: "scope__action", "data-test": "relink-element", onClick: onRelink, children: _jsx(IconLink, { size: "var(--icon-size-small)", stroke: 1.8, "aria-hidden": "true" }) })] })) : (_jsxs("div", { className: "scope__linked", children: [_jsxs("span", { children: ["Linked (", sourceSiteMatchCount, ")"] }), _jsx(IconButton, { variant: "quiet", label: "Unlink element", "data-test": "unlink-element", onClick: onUnlink, children: _jsx(IconUnlink, { size: "var(--icon-size-small)", stroke: 1.8, "aria-hidden": "true" }) })] })) })) : null] })) : null, children, showInteractionState ? (_jsx(FieldRow, { label: "State", className: "style-state", "data-test": "style-state", children: _jsx(Select, { value: styleState, "data-test": "style-state-select", "aria-label": "Style State", options: availableInteractionStates.map((state) => ({
|
|
13
|
+
value: state,
|
|
14
|
+
label: formatInspectorLabel(state),
|
|
15
|
+
})), onValueChange: (state) => {
|
|
16
|
+
const next = availableInteractionStates.find((candidate) => candidate === state);
|
|
17
|
+
if (next)
|
|
18
|
+
onStyleStateChange(next);
|
|
19
|
+
} }) })) : null] })) : null });
|
|
20
|
+
}
|
|
@@ -1,37 +1,28 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { InspectorPanel } from "./InspectorPanel.js";
|
|
3
|
+
import { InspectorSelection } from "./InspectorSelection.js";
|
|
4
|
+
import { describeElement } from "./elementName.js";
|
|
5
|
+
import { InspectorEditors } from "./InspectorEditors.js";
|
|
2
6
|
import { useEffect, useMemo, useState, useSyncExternalStore } from "react";
|
|
3
|
-
import { IconLayoutSidebarRight } from "@tabler/icons-react";
|
|
4
7
|
import { useInspectorOpen, setInspectorOpen } from "./openStore.js";
|
|
5
8
|
import { useSelectedElement, useSelectedElements, setSelectedElement, removeSelectedElement, } from "../selection/selectionStore.js";
|
|
6
9
|
import { findTokenRow } from "../styleEditors/rowLookup.js";
|
|
7
10
|
import { useBrowserCssInspection } from "../inspection/useBrowserCssInspection.js";
|
|
8
11
|
import { resolveSelectionFromElement } from "../selection/resolveSelection.js";
|
|
9
12
|
import { AgentStatusButton } from "./AgentStatusButton.js";
|
|
10
|
-
import { SpacingBox } from "../styleEditors/SpacingBox.js";
|
|
11
|
-
import { Typography } from "../styleEditors/Typography.js";
|
|
12
13
|
import { isTextRelevant } from "../styleEditors/textRelevance.js";
|
|
13
|
-
import { BackgroundEditor } from "../styleEditors/BackgroundEditor.js";
|
|
14
|
-
import { ColorPicker } from "../styleEditors/ColorPicker.js";
|
|
15
|
-
import { BorderEditor } from "../styleEditors/BorderEditor.js";
|
|
16
|
-
import { AppearanceSection } from "../styleEditors/AppearanceSection.js";
|
|
17
|
-
import { BoxShadowEditor } from "../styleEditors/BoxShadowEditor.js";
|
|
18
|
-
import { LayoutSection } from "../styleEditors/LayoutSection.js";
|
|
19
14
|
import { ChangesLog } from "./ChangesLog.js";
|
|
20
15
|
import { discardChangesForInstanceOverride, undo, redo } from "../drafts/store.js";
|
|
21
16
|
import { countSourceSiteMatches, getEditScope, relinkElement, sourceSiteSelector, unlinkElement } from "../selection/editScope.js";
|
|
22
17
|
import { canEditStyles } from "../tokens/editActions.js";
|
|
23
|
-
import { Button } from "../ui/Button.js";
|
|
24
18
|
import { CopyPromptButton } from "./CopyPromptButton.js";
|
|
25
19
|
import { PeekOriginalButton } from "./PeekOriginalButton.js";
|
|
20
|
+
import { NudgeLogoIcon } from "./NudgeLogoIcon.js";
|
|
26
21
|
import { StatusCallout } from "../ui/StatusCallout.js";
|
|
27
|
-
import { IconButton } from "../ui/IconButton.js";
|
|
28
22
|
import { UI_STYLES } from "../ui/styles.js";
|
|
29
23
|
import { getActiveStyleState, setActiveStyleState } from "./styleState.js";
|
|
30
24
|
import { useInteractionStatePreview } from "./interactionStatePreview.js";
|
|
31
25
|
import { getInspectorToggleShortcutLabel, isEditableEvent } from "./shortcuts.js";
|
|
32
|
-
import { formatInspectorLabel } from "../ui/labels.js";
|
|
33
|
-
import { FieldRow } from "../ui/FieldRow.js";
|
|
34
|
-
import { Select } from "../ui/Select.js";
|
|
35
26
|
import { clearSelectedFrameChanges } from "../canvas/sessionStore.js";
|
|
36
27
|
import { useFocusedCardId, useSelectedCardId, } from "../canvas/canvasStore.js";
|
|
37
28
|
import { getActiveCanvasFrame } from "../canvas/activeCanvasDocument.js";
|
|
@@ -39,8 +30,7 @@ import { canvasFrameHost } from "../canvas/canvasFrame.js";
|
|
|
39
30
|
import { getFrameRegistryVersion, subscribeFrameRegistry } from "../canvas/projection.js";
|
|
40
31
|
import { getElementWindow } from "../runtime/domRealm.js";
|
|
41
32
|
import { deleteElement, nudgeElement } from "../overlay/structuralGestures.js";
|
|
42
|
-
import {
|
|
43
|
-
import { ComponentPropsSection } from "../componentSemantics/ComponentPropsSection.js";
|
|
33
|
+
import { ComponentPropsSection, useComponentProps } from "../componentSemantics/ComponentPropsSection.js";
|
|
44
34
|
import { cancelInlineTextEdit, isInlineTextEditingActive, useInlineTextDiagnostic, } from "../inline-text/inlineTextEditor.js";
|
|
45
35
|
import { getInlineTextFeedback } from "../inline-text/inlineTextFeedback.js";
|
|
46
36
|
import { useNudgeUiRuntimeConfig } from "../runtime/useRuntimeConfig.js";
|
|
@@ -51,7 +41,6 @@ import { isNudgeUiDev } from "../runtime/devFlag.js";
|
|
|
51
41
|
import { isDemoRuntime, isNudgeUiFeatureEnabled } from "../runtime/runtimeConfig.js";
|
|
52
42
|
import { SketchWorkspace } from "../sketch/SketchWorkspace.js";
|
|
53
43
|
import { useSketchInteractionActive } from "../sketch/interaction.js";
|
|
54
|
-
import { Tooltip } from "../ui/Tooltip.js";
|
|
55
44
|
import { InspectorStyle } from "../ui/InspectorStyle.js";
|
|
56
45
|
function findFirstTokenRow(rows, properties) {
|
|
57
46
|
for (const property of properties) {
|
|
@@ -101,6 +90,7 @@ export function InspectorShell() {
|
|
|
101
90
|
const sketchHost = selectedCardId || focusedCardId ? canvasFrameHost(getActiveCanvasFrame()) : null;
|
|
102
91
|
const selected = useSelectedElement();
|
|
103
92
|
const selectedElements = useSelectedElements();
|
|
93
|
+
const componentProps = useComponentProps(selected);
|
|
104
94
|
const inlineTextFeedback = getInlineTextFeedback(useInlineTextDiagnostic());
|
|
105
95
|
const [settingsOpen, setSettingsOpen] = useState(false);
|
|
106
96
|
const [settingsSection, setSettingsSection] = useState("instructions");
|
|
@@ -110,17 +100,14 @@ export function InspectorShell() {
|
|
|
110
100
|
const cssInspection = useBrowserCssInspection(selectedElements, styleState);
|
|
111
101
|
const isMultiSelection = selectedElements.length > 1;
|
|
112
102
|
useEffect(() => {
|
|
113
|
-
// A new selection
|
|
114
|
-
// previous element. Base is the inspector's deliberate default.
|
|
103
|
+
// A new selection must not inherit an incidental state from the previous element; base is the deliberate default.
|
|
115
104
|
setActiveStyleState("base");
|
|
116
105
|
setStyleState("base");
|
|
117
106
|
}, [selected?.domElement, isMultiSelection]);
|
|
118
107
|
useEffect(() => {
|
|
119
108
|
if (!selected)
|
|
120
109
|
return;
|
|
121
|
-
//
|
|
122
|
-
// its own ownerDocument rather than the parent app's document, otherwise
|
|
123
|
-
// removal inside the iframe would never be noticed.
|
|
110
|
+
// In canvas mode the element can live in a card iframe, so observe its ownerDocument, not the parent app's.
|
|
124
111
|
const observers = [];
|
|
125
112
|
const roots = new Map();
|
|
126
113
|
for (const target of selectedElements) {
|
|
@@ -184,8 +171,7 @@ export function InspectorShell() {
|
|
|
184
171
|
setSelectedElement(null);
|
|
185
172
|
return;
|
|
186
173
|
}
|
|
187
|
-
// macOS labels the physical Backspace key as Delete
|
|
188
|
-
// report it as "Backspace". Support both without stealing text edits.
|
|
174
|
+
// macOS labels the physical Backspace key as Delete; browsers report "Backspace". Support both.
|
|
189
175
|
if (event.key === "Delete" || event.key === "Backspace") {
|
|
190
176
|
event.preventDefault();
|
|
191
177
|
if (!isMultiSelection && deleteElement(selected))
|
|
@@ -212,7 +198,6 @@ export function InspectorShell() {
|
|
|
212
198
|
const tokenRows = useMemo(() => styleSelection ? [...styleSelection.primaryRows] : [], [styleSelection]);
|
|
213
199
|
const availableInteractionStates = inspectionSnapshot?.availableStates ?? [];
|
|
214
200
|
const showText = selectedElements.length > 0 && selectedElements.every((element, index) => isTextRelevant(element.domElement, cssInspection.elements[index]?.properties ?? []));
|
|
215
|
-
const showInteractionState = !isMultiSelection && availableInteractionStates.length > 1;
|
|
216
201
|
const paintedBackgroundRow = findFirstTokenRow(tokenRows, ["background-color", "background"]);
|
|
217
202
|
const backgroundTokenRow = useMemo(() => {
|
|
218
203
|
if (!selected)
|
|
@@ -227,8 +212,6 @@ export function InspectorShell() {
|
|
|
227
212
|
const sourceSiteMatchCount = selected && editScope === "source-site"
|
|
228
213
|
? countSourceSiteMatches(selected.domElement, scopeRevision)
|
|
229
214
|
: 0;
|
|
230
|
-
const hasEditScopeCallout = !isMultiSelection
|
|
231
|
-
&& (editScope === "rendered-instance" || sourceSiteMatchCount > 1);
|
|
232
215
|
function refreshScopeState() {
|
|
233
216
|
refreshScope((revision) => revision + 1);
|
|
234
217
|
}
|
|
@@ -240,25 +223,20 @@ export function InspectorShell() {
|
|
|
240
223
|
// Sketch persistence failures are reported by the sketch store in the panel.
|
|
241
224
|
void clearSelectedFrameChanges().catch(() => undefined);
|
|
242
225
|
}
|
|
243
|
-
return (_jsxs(_Fragment, { children: [_jsx(InspectorStyle, { testId: "inspector-styles", css: UI_STYLES }), _jsxs(
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
if (!nextState)
|
|
260
|
-
return;
|
|
261
|
-
setActiveStyleState(nextState);
|
|
262
|
-
setStyleState(nextState);
|
|
263
|
-
} }) })) : null] })) : null, !isMultiSelection ? _jsx(ComponentPropsSection, { selected: selected }) : null, selectionEditable ? (_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(SpacingBox, { element: selected, selection: styleSelection, entries: tokenEntries, tokenRows: tokenRows }, `spacing-${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}`)] }) })) : (_jsx(StatusCallout, { tone: "neutral", "data-test": "multi-selection-uneditable", children: "These repeated items are indistinguishable, so Nudge UI cannot safely target only part of the group. Select every repeated item to edit them together." }))] })) : (_jsx(EmptyState, {})), _jsx(ChangesLog, { onClearSession: clearInspectorSession })] })] }), sketchEnabled ? (_jsx(SketchWorkspace, { hostElement: sketchHost, projectId: runtimeConfig.projectId })) : null, !isOpen ? (_jsx("div", { className: "panel__restore", children: _jsx(Tooltip, { children: _jsx(IconButton, { variant: "quiet", label: "Show inspector", className: "panel__restore-button", "data-test": "show-inspector", onClick: () => setInspectorOpen(true), children: _jsx(IconLayoutSidebarRight, { size: "var(--icon-size-small)", stroke: "var(--icon-stroke-width)", "aria-hidden": "true" }) }) }) })) : null] }));
|
|
226
|
+
return (_jsxs(_Fragment, { children: [_jsx(InspectorStyle, { testId: "inspector-styles", css: UI_STYLES }), _jsxs(InspectorPanel, { isOpen: isOpen, collapseDisabled: sketchActive, toggleShortcut: getInspectorToggleShortcutLabel(), onOpenChange: (open) => {
|
|
227
|
+
if (!open)
|
|
228
|
+
cancelInlineTextEdit();
|
|
229
|
+
setInspectorOpen(open);
|
|
230
|
+
}, headerActions: _jsxs(_Fragment, { children: [_jsx(PeekOriginalButton, {}), _jsx(AgentStatusButton, { onOpenSettings: openSettings })] }), prompt: _jsx(CopyPromptButton, { settingsOpen: settingsOpen, settingsSection: settingsSection, onOpenSettings: openSettings, onSettingsOpenChange: setSettingsOpen, onClearChanges: clearInspectorSession }), children: [inlineTextFeedback ? (_jsx(StatusCallout, { tone: "danger", className: "inline-text-diagnostic", "data-test": "inline-text-diagnostic", role: "status", "aria-live": "polite", "aria-atomic": "true", children: _jsx("span", { children: inlineTextFeedback.message }) })) : null, runtimeConfig.inspectionUnavailableReason ? (_jsxs(StatusCallout, { tone: "danger", "data-test": "page-inspection-error", role: "status", children: ["Can\u2019t load Nudge on this page due to ", runtimeConfig.inspectionUnavailableReason, "."] })) : selected ? (_jsxs(_Fragment, { children: [_jsx(InspectorSelection, { identity: selected, count: selectedElements.length, isComponent: !isMultiSelection && componentProps !== null, name: isMultiSelection ? { title: `${selectedElements.length} elements` } : componentProps ? { title: componentProps.target.meta.componentName } : describeElement(selected.domElement), editScope: editScope, sourceSiteMatchCount: sourceSiteMatchCount, styleState: styleState, availableInteractionStates: availableInteractionStates, onStyleStateChange: (state) => {
|
|
231
|
+
setActiveStyleState(state);
|
|
232
|
+
setStyleState(state);
|
|
233
|
+
}, onRelink: () => {
|
|
234
|
+
const overrideId = relinkElement(selected.domElement);
|
|
235
|
+
if (overrideId)
|
|
236
|
+
discardChangesForInstanceOverride(overrideId);
|
|
237
|
+
refreshScopeState();
|
|
238
|
+
}, onUnlink: () => {
|
|
239
|
+
unlinkElement(selected.domElement);
|
|
240
|
+
refreshScopeState();
|
|
241
|
+
}, children: !isMultiSelection ? _jsx(ComponentPropsSection, { selected: selected }) : null }), selectionEditable ? (_jsx(InspectorEditors, { selected: selected, styleSelection: styleSelection, tokenEntries: tokenEntries, tokenRows: tokenRows, styleState: styleState, showText: showText, backgroundTokenRow: backgroundTokenRow })) : (_jsx(StatusCallout, { tone: "neutral", "data-test": "multi-selection-uneditable", children: "These repeated items are indistinguishable, so Nudge UI cannot safely target only part of the group. Select every repeated item to edit them together." }))] })) : (_jsx(EmptyState, {})), _jsx(ChangesLog, { onClearSession: clearInspectorSession })] }), sketchEnabled ? (_jsx(SketchWorkspace, { hostElement: sketchHost, projectId: runtimeConfig.projectId })) : null] }));
|
|
264
242
|
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/** Same artwork as the extension and landing favicons. */
|
|
3
|
+
export function NudgeLogoIcon({ size = "var(--icon-size-small)" }) {
|
|
4
|
+
return (_jsxs("svg", { viewBox: "5 4 35 35", width: size, height: size, fill: "currentColor", "aria-hidden": "true", children: [_jsx("path", { d: "M14.7742 6C27.6015 6 38 16.569 38 29.6066V38H30.7742V29.6066C30.7742 20.6251 23.6107 13.3443 14.7742 13.3443H13.2258V38H6V6H14.7742Z" }), _jsx("path", { d: "M39 15.6629C37 11.5 33 7 28.4919 5H39V15.6629Z" })] }));
|
|
5
|
+
}
|
|
@@ -1,7 +1,2 @@
|
|
|
1
1
|
import { type ReactElement } from "react";
|
|
2
|
-
/**
|
|
3
|
-
* Press-and-hold button that previews the page without inspector changes
|
|
4
|
-
* (NUD-30). Releasing restores the edited preview; canonical intent is never
|
|
5
|
-
* cleared, so nothing is lost while held.
|
|
6
|
-
*/
|
|
7
2
|
export declare function PeekOriginalButton(): ReactElement;
|
|
@@ -11,11 +11,6 @@ function useDraftChangeCount() {
|
|
|
11
11
|
return snapshot.changes.length + snapshot.structuralChanges.length;
|
|
12
12
|
}, () => 0);
|
|
13
13
|
}
|
|
14
|
-
/**
|
|
15
|
-
* Press-and-hold button that previews the page without inspector changes
|
|
16
|
-
* (NUD-30). Releasing restores the edited preview; canonical intent is never
|
|
17
|
-
* cleared, so nothing is lost while held.
|
|
18
|
-
*/
|
|
19
14
|
export function PeekOriginalButton() {
|
|
20
15
|
const active = useOriginalPreviewActive();
|
|
21
16
|
const changeCount = useDraftChangeCount();
|
|
@@ -1,7 +1,2 @@
|
|
|
1
1
|
import type { ReactElement } from "react";
|
|
2
|
-
/**
|
|
3
|
-
* Before/after comparison glyph for the hold-to-view-original button.
|
|
4
|
-
* Custom artwork rendered with the shared inspector icon tokens so it
|
|
5
|
-
* matches the neighboring header icons.
|
|
6
|
-
*/
|
|
7
2
|
export declare function PeekOriginalIcon(): ReactElement;
|
|
@@ -1,9 +1,4 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
/**
|
|
3
|
-
* Before/after comparison glyph for the hold-to-view-original button.
|
|
4
|
-
* Custom artwork rendered with the shared inspector icon tokens so it
|
|
5
|
-
* matches the neighboring header icons.
|
|
6
|
-
*/
|
|
7
2
|
export function PeekOriginalIcon() {
|
|
8
3
|
return (_jsxs("svg", { viewBox: "0 0 24 24", width: "var(--icon-size-small)", height: "var(--icon-size-small)", "aria-hidden": "true", children: [_jsx("path", { d: "M8.66667 5L6 5C4.34315 5 3 6.34315 3 8L3 16C3 17.6569 4.34315 19 6 19L12 19", fill: "none", stroke: "currentColor", strokeLinecap: "round", strokeWidth: "var(--icon-stroke-width)" }), _jsx("path", { d: "M13 5L18 5C19.6569 5 21 6.34315 21 8L21 16C21 17.6569 19.6569 19 18 19L16.3333 19", fill: "none", stroke: "currentColor", strokeLinecap: "round", strokeWidth: "var(--icon-stroke-width)" }), _jsx("line", { x1: "13.7721", y1: "22.2984", x2: "8.29835", y2: "2.22788", fill: "none", stroke: "currentColor", strokeLinecap: "round", strokeWidth: "var(--icon-stroke-width)" })] }));
|
|
9
4
|
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { type ReactElement, type ReactNode } from "react";
|
|
2
|
+
import { type ButtonProps } from "../ui/Button.js";
|
|
3
|
+
export interface PromptActionButtonProps extends ButtonProps {
|
|
4
|
+
readonly copied?: boolean;
|
|
5
|
+
readonly agentState?: string;
|
|
6
|
+
readonly busy?: boolean;
|
|
7
|
+
readonly icon?: ReactNode;
|
|
8
|
+
readonly label?: ReactNode;
|
|
9
|
+
readonly badgeCount?: number;
|
|
10
|
+
readonly hasMenu?: boolean;
|
|
11
|
+
}
|
|
12
|
+
/** Presents a prompt action without owning clipboard or agent connections. */
|
|
13
|
+
export declare const PromptActionButton: import("react").ForwardRefExoticComponent<PromptActionButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
|
|
14
|
+
export interface PromptActionRowProps {
|
|
15
|
+
readonly children: ReactNode;
|
|
16
|
+
/** Clears the pending changes; the clear changes action stays beside the prompt action and disables without changes. */
|
|
17
|
+
readonly onClear?: () => void;
|
|
18
|
+
readonly hasChanges?: boolean;
|
|
19
|
+
}
|
|
20
|
+
/** A prompt action with a matching clear changes action beside it, disabled until there are changes. */
|
|
21
|
+
export declare function PromptActionRow({ children, onClear, hasChanges }: PromptActionRowProps): ReactElement;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { forwardRef } from "react";
|
|
3
|
+
import { IconChevronDown, IconCopy, IconRestore } from "@tabler/icons-react";
|
|
4
|
+
import { Button } from "../ui/Button.js";
|
|
5
|
+
import { IconButton } from "../ui/IconButton.js";
|
|
6
|
+
import { Tooltip } from "../ui/Tooltip.js";
|
|
7
|
+
/** Presents a prompt action without owning clipboard or agent connections. */
|
|
8
|
+
export const PromptActionButton = forwardRef(function PromptActionButton({ copied = false, agentState = "disconnected", busy = false, icon = _jsx(IconCopy, { size: "var(--icon-size-small)", stroke: "var(--icon-stroke-width)", "aria-hidden": "true" }), label = "Copy prompt", badgeCount = 0, hasMenu = false, ...props }, ref) {
|
|
9
|
+
return _jsxs(Button, { ref: ref, variant: "primary", className: "copy-prompt__main", "data-test": "copy-prompt", type: "button", "data-copied": copied ? "true" : "false", "data-agent-state": agentState, "aria-busy": busy ? "true" : undefined, ...props, children: [icon, label, badgeCount > 0 ? _jsx("span", { className: "copy-prompt__change-count", "data-test": "copy-prompt-change-count", children: badgeCount }) : null, hasMenu ? _jsx(IconChevronDown, { size: "var(--icon-size-small)", stroke: "var(--icon-stroke-width)", "aria-hidden": "true" }) : null] });
|
|
10
|
+
});
|
|
11
|
+
/** A prompt action with a matching clear changes action beside it, disabled until there are changes. */
|
|
12
|
+
export function PromptActionRow({ children, onClear, hasChanges = false }) {
|
|
13
|
+
return (_jsxs("div", { className: "copy-prompt__row", children: [children, onClear ? (_jsx(Tooltip, { children: _jsx(IconButton, { className: "copy-prompt__clear-changes", variant: "secondary", label: "Clear changes", "data-test": "copy-prompt-clear", disabled: !hasChanges, onClick: onClear, children: _jsx(IconRestore, { size: "var(--icon-size-small)", "aria-hidden": "true" }) }) })) : null] }));
|
|
14
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
const TAG_LABELS = new Map([
|
|
2
|
+
["a", "Link"],
|
|
3
|
+
["article", "Article"],
|
|
4
|
+
["aside", "Aside"],
|
|
5
|
+
["button", "Button"],
|
|
6
|
+
["footer", "Footer"],
|
|
7
|
+
["form", "Form"],
|
|
8
|
+
["header", "Header"],
|
|
9
|
+
["img", "Image"],
|
|
10
|
+
["input", "Input"],
|
|
11
|
+
["label", "Label"],
|
|
12
|
+
["li", "List item"],
|
|
13
|
+
["main", "Main"],
|
|
14
|
+
["nav", "Navigation"],
|
|
15
|
+
["ol", "List"],
|
|
16
|
+
["p", "Paragraph"],
|
|
17
|
+
["section", "Section"],
|
|
18
|
+
["select", "Select"],
|
|
19
|
+
["svg", "Icon"],
|
|
20
|
+
["textarea", "Text area"],
|
|
21
|
+
["ul", "List"],
|
|
22
|
+
]);
|
|
23
|
+
/** The title is derived from the tag, with an accessible name when the author gave one. */
|
|
24
|
+
export function describeElement(element) {
|
|
25
|
+
const tag = element.localName.toLowerCase();
|
|
26
|
+
const base = /^h[1-6]$/.test(tag) ? `Heading ${tag.slice(1)}` : TAG_LABELS.get(tag) ?? (tag.charAt(0).toUpperCase() + tag.slice(1));
|
|
27
|
+
const accessible = element.getAttribute("aria-label")?.trim();
|
|
28
|
+
return { title: accessible ? `${base} · ${accessible}` : base };
|
|
29
|
+
}
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
import { type InteractionState } from "./styleState.js";
|
|
2
2
|
/** Matches native interaction states and the Inspector's temporary CSS state. */
|
|
3
3
|
export declare function selectorForInteractionStatePreview(selector: string): string;
|
|
4
|
-
/**
|
|
5
|
-
* Projects CSS interaction states into the selected element's document.
|
|
6
|
-
* This previews styles without dispatching events or changing application state.
|
|
7
|
-
*/
|
|
4
|
+
/** Previews interaction states without dispatching events or changing application state. */
|
|
8
5
|
export declare function startInteractionStatePreview(element: HTMLElement, state: InteractionState): () => void;
|
|
9
6
|
export declare function useInteractionStatePreview(element: HTMLElement | null, state: InteractionState): void;
|
|
@@ -11,8 +11,7 @@ export function selectorForInteractionStatePreview(selector) {
|
|
|
11
11
|
for (const pseudo of [...selectorPseudoClasses(selector)].reverse()) {
|
|
12
12
|
if (!interactionStates.has(pseudo.name))
|
|
13
13
|
continue;
|
|
14
|
-
//
|
|
15
|
-
// selected element. :where() keeps the original pseudo-class specificity.
|
|
14
|
+
// :where() keeps the replacement at the original pseudo-class specificity.
|
|
16
15
|
const replacement = `:is(:${pseudo.name}:where(:not([${MARKER}])), [${MARKER}="${pseudo.name}"])`;
|
|
17
16
|
transformed = transformed.slice(0, pseudo.start) + replacement + transformed.slice(pseudo.end);
|
|
18
17
|
}
|
|
@@ -20,8 +19,7 @@ export function selectorForInteractionStatePreview(selector) {
|
|
|
20
19
|
}
|
|
21
20
|
function previewSelector(selector) {
|
|
22
21
|
const transformed = selectorForInteractionStatePreview(selector);
|
|
23
|
-
//
|
|
24
|
-
// relative cascade while overriding native pointer states on the target.
|
|
22
|
+
// Same added specificity on every branch preserves their relative cascade while overriding native pointer states.
|
|
25
23
|
const scope = `:where([${MARKER}], [${MARKER}] *):is(#${STATE_PREVIEW_SHEET_ID}, *)`;
|
|
26
24
|
// A scope must precede a pseudo-element, which cannot take an attribute.
|
|
27
25
|
let parentheses = 0;
|
|
@@ -58,10 +56,7 @@ function previewSelector(selector) {
|
|
|
58
56
|
}
|
|
59
57
|
return transformed + scope;
|
|
60
58
|
}
|
|
61
|
-
/**
|
|
62
|
-
* Projects CSS interaction states into the selected element's document.
|
|
63
|
-
* This previews styles without dispatching events or changing application state.
|
|
64
|
-
*/
|
|
59
|
+
/** Previews interaction states without dispatching events or changing application state. */
|
|
65
60
|
export function startInteractionStatePreview(element, state) {
|
|
66
61
|
if (state === "base")
|
|
67
62
|
return () => undefined;
|
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
export declare function isOriginalPreviewActive(): boolean;
|
|
2
2
|
export declare function subscribeOriginalPreview(listener: () => void): () => void;
|
|
3
3
|
export declare function useOriginalPreviewActive(): boolean;
|
|
4
|
-
/**
|
|
5
|
-
* Hold-to-view-original (NUD-30). While active the host document shows the
|
|
6
|
-
* page without any inspector changes; the draft preview owns that projection.
|
|
7
|
-
* Canonical intent stays in the workspace, so releasing restores the edited
|
|
8
|
-
* preview without loss.
|
|
9
|
-
*/
|
|
4
|
+
/** While active the document shows the page without inspector changes; canonical intent is never cleared. */
|
|
10
5
|
export declare function setOriginalPreviewActive(next: boolean): void;
|
|
@@ -13,12 +13,7 @@ export function subscribeOriginalPreview(listener) {
|
|
|
13
13
|
export function useOriginalPreviewActive() {
|
|
14
14
|
return useSyncExternalStore(subscribeOriginalPreview, () => previewingOriginal, () => false);
|
|
15
15
|
}
|
|
16
|
-
/**
|
|
17
|
-
* Hold-to-view-original (NUD-30). While active the host document shows the
|
|
18
|
-
* page without any inspector changes; the draft preview owns that projection.
|
|
19
|
-
* Canonical intent stays in the workspace, so releasing restores the edited
|
|
20
|
-
* preview without loss.
|
|
21
|
-
*/
|
|
16
|
+
/** While active the document shows the page without inspector changes; canonical intent is never cleared. */
|
|
22
17
|
export function setOriginalPreviewActive(next) {
|
|
23
18
|
if (next === previewingOriginal)
|
|
24
19
|
return;
|
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* the browser only when CSSOM has no declaration to attribute. */
|
|
1
|
+
/** Reads from the authored state; the browser is only the fallback when CSSOM has no declaration to attribute. */
|
|
3
2
|
export declare function getStateStyleValue(el: HTMLElement, property: string, fallback?: string): string;
|
|
@@ -1,14 +1,11 @@
|
|
|
1
1
|
import { getActiveStyleState } from "./styleState.js";
|
|
2
2
|
import { readInspectionSnapshot } from "../inspection/inspectionSnapshot.js";
|
|
3
3
|
import { getElementComputedStyle } from "../runtime/domRealm.js";
|
|
4
|
-
/**
|
|
5
|
-
* the browser only when CSSOM has no declaration to attribute. */
|
|
4
|
+
/** Reads from the authored state; the browser is only the fallback when CSSOM has no declaration to attribute. */
|
|
6
5
|
export function getStateStyleValue(el, property, fallback = "") {
|
|
7
6
|
try {
|
|
8
7
|
const state = getActiveStyleState();
|
|
9
|
-
//
|
|
10
|
-
// Authored resolution is needed when the live element is transiently
|
|
11
|
-
// interacted with, or when the user explicitly selected another state.
|
|
8
|
+
// Base inspection uses the browser's computed value unless the element is transiently hovered or focused.
|
|
12
9
|
const hasLiveInteraction = [":hover", ":active", ":focus", ":focus-visible"].some((selector) => {
|
|
13
10
|
try {
|
|
14
11
|
return el.matches(selector);
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
export declare const INTERACTION_STATES: readonly ["hover", "active", "focus", "focus-visible", "disabled"];
|
|
2
2
|
export type InteractionState = "base" | (typeof INTERACTION_STATES)[number];
|
|
3
|
-
/**
|
|
4
|
-
* and history have the same context as the panel that initiated an edit. */
|
|
3
|
+
/** Kept outside React so edit actions and history share the panel's context. */
|
|
5
4
|
export declare function getActiveStyleState(): InteractionState;
|
|
6
5
|
export declare function setActiveStyleState(state: InteractionState): void;
|
|
7
6
|
export declare function selectorForInteractionState(selector: string, state: InteractionState): string;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
export const INTERACTION_STATES = ["hover", "active", "focus", "focus-visible", "disabled"];
|
|
2
2
|
let activeState = "base";
|
|
3
|
-
/**
|
|
4
|
-
* and history have the same context as the panel that initiated an edit. */
|
|
3
|
+
/** Kept outside React so edit actions and history share the panel's context. */
|
|
5
4
|
export function getActiveStyleState() {
|
|
6
5
|
return activeState;
|
|
7
6
|
}
|
|
@@ -273,7 +273,6 @@ export function SketchEditor({ open, document: sketchDocument, captured, onCance
|
|
|
273
273
|
event.currentTarget.releasePointerCapture(event.pointerId);
|
|
274
274
|
}
|
|
275
275
|
catch {
|
|
276
|
-
// The pointer may already have been released by the browser.
|
|
277
276
|
}
|
|
278
277
|
if (draftPointLimitReached.current) {
|
|
279
278
|
draftPointLimitReached.current = false;
|
|
@@ -8,13 +8,11 @@ import { sketchBelongsToCard, useDrafts } from "../drafts/store.js";
|
|
|
8
8
|
export function sketchRouteKey(url) {
|
|
9
9
|
try {
|
|
10
10
|
const parsed = new URL(url);
|
|
11
|
-
//
|
|
12
|
-
//
|
|
13
|
-
// the canvas, and a direct editor launch.
|
|
11
|
+
// Inspector-host params: removing them keeps one sketch attached across
|
|
12
|
+
// Focus mode, the canvas, and direct launch.
|
|
14
13
|
parsed.searchParams.delete("__nudge_ui_direct");
|
|
15
14
|
parsed.searchParams.delete("nudge-ui");
|
|
16
|
-
// Hashes
|
|
17
|
-
// Keep saved marks attached when navigation changes only the anchor.
|
|
15
|
+
// Hashes are in-document anchors, so marks stay attached when only the anchor changes.
|
|
18
16
|
return `${parsed.origin}${parsed.pathname}${parsed.search}`;
|
|
19
17
|
}
|
|
20
18
|
catch {
|
|
@@ -43,9 +41,8 @@ export function projectSketchPoint(point, document, frameWindow, width, height)
|
|
|
43
41
|
const viewportWidth = Math.max(1, frameWindow.innerWidth || width);
|
|
44
42
|
const viewportHeight = Math.max(1, frameWindow.innerHeight || height);
|
|
45
43
|
const scroll = getSketchScrollPosition(frameWindow);
|
|
46
|
-
//
|
|
47
|
-
//
|
|
48
|
-
// page scrolling still moves the sketch with the content.
|
|
44
|
+
// Horizontal position scales with the responsive iframe width; the scroll
|
|
45
|
+
// delta is applied separately.
|
|
49
46
|
const captureLocalX = (point.x / imageWidth) * capture.viewportWidth;
|
|
50
47
|
const currentLocalX = (captureLocalX / Math.max(1, capture.viewportWidth)) * viewportWidth
|
|
51
48
|
- (scroll.x - capture.scrollX);
|
|
@@ -101,10 +98,9 @@ export function SketchFrameOverlay({ cardId, iframe, cardUrl, artifactId, ready
|
|
|
101
98
|
const frameWindow = iframe?.contentWindow ?? null;
|
|
102
99
|
const layers = useMemo(() => {
|
|
103
100
|
if (!iframe || !frameWindow || documents.length === 0) {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
};
|
|
101
|
+
const strokes = [];
|
|
102
|
+
const annotations = [];
|
|
103
|
+
return { strokes, annotations };
|
|
108
104
|
}
|
|
109
105
|
const strokes = [];
|
|
110
106
|
const annotations = [];
|
|
@@ -13,7 +13,7 @@ import { isEditableEvent } from "../shell/shortcuts.js";
|
|
|
13
13
|
import { ERASER_CURSOR, SKETCH_CURSOR } from "../ui/customCursors.js";
|
|
14
14
|
import { useTemporaryAppInteraction } from "../canvas/viewStore.js";
|
|
15
15
|
import { portalContainer } from "../ui/portalContainer.js";
|
|
16
|
-
/**
|
|
16
|
+
/** Screen-pixel eraser reach; must match the cursor ring. */
|
|
17
17
|
const ERASER_RADIUS_PX = 8;
|
|
18
18
|
function sketchCursor(tool) {
|
|
19
19
|
if (tool === "eraser")
|
|
@@ -121,9 +121,8 @@ export function SketchOverlay({ open, hostElement, selectTarget, onCancel, onDon
|
|
|
121
121
|
if (open)
|
|
122
122
|
svgRef.current?.focus();
|
|
123
123
|
}, [open]);
|
|
124
|
-
//
|
|
125
|
-
//
|
|
126
|
-
// Text fields keep their native undo.
|
|
124
|
+
// Window-level so shortcuts work while focus is in the canvas toolbar; text
|
|
125
|
+
// fields keep their native undo.
|
|
127
126
|
useEffect(() => {
|
|
128
127
|
if (!open)
|
|
129
128
|
return;
|
|
@@ -165,8 +164,8 @@ export function SketchOverlay({ open, hostElement, selectTarget, onCancel, onDon
|
|
|
165
164
|
|| event.clientY < drawingViewport.offsetY || event.clientY > drawingViewport.offsetY + drawingViewport.displayHeight)
|
|
166
165
|
return;
|
|
167
166
|
const point = pointFromEvent(event, drawingViewport);
|
|
168
|
-
// Drawing cancels the browser's focus change, so move focus here
|
|
169
|
-
//
|
|
167
|
+
// Drawing cancels the browser's focus change, so move focus here or undo
|
|
168
|
+
// goes to the note or toolbar.
|
|
170
169
|
event.preventDefault();
|
|
171
170
|
svgRef.current?.focus({ preventScroll: true });
|
|
172
171
|
pointerId.current = event.pointerId;
|
|
@@ -11,5 +11,4 @@ export interface SketchPromptPanelProps {
|
|
|
11
11
|
readonly onDone: () => void | Promise<void>;
|
|
12
12
|
readonly onCancel?: () => void;
|
|
13
13
|
}
|
|
14
|
-
/** The small note editor shared by a new live sketch and saved sketch layers. */
|
|
15
14
|
export declare function SketchPromptPanel({ dataTest, className, description, error, disabled, saving, autoFocus, onDescriptionChange, onDone, onCancel, }: SketchPromptPanelProps): ReactElement;
|
|
@@ -3,7 +3,6 @@ import { IconAlertTriangleFilled } from "@tabler/icons-react";
|
|
|
3
3
|
import { useRef } from "react";
|
|
4
4
|
import { Button } from "../ui/Button.js";
|
|
5
5
|
import { SKETCH_LIMITS } from "./model.js";
|
|
6
|
-
/** The small note editor shared by a new live sketch and saved sketch layers. */
|
|
7
6
|
export function SketchPromptPanel({ dataTest, className, description, error = null, disabled = false, saving = false, autoFocus = false, onDescriptionChange, onDone, onCancel, }) {
|
|
8
7
|
// Keep the last message while the banner collapses so its text does not vanish mid-animation.
|
|
9
8
|
const lastError = useRef(error);
|