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
|
@@ -16,7 +16,6 @@ import { SketchEditor } from "./SketchEditor.js";
|
|
|
16
16
|
import { SketchOverlay } from "./SketchOverlay.js";
|
|
17
17
|
import { closeSketchNote, useSketchNote } from "./sketchNote.js";
|
|
18
18
|
import { SketchPromptPanel } from "./SketchPromptPanel.js";
|
|
19
|
-
/** Makes saving a new sketch one step in the session undo history. */
|
|
20
19
|
function recordSketchCreation(document, owner) {
|
|
21
20
|
let snapshot = document;
|
|
22
21
|
recordCanvasChange({
|
|
@@ -66,9 +65,8 @@ export function SketchWorkspace({ hostElement, projectId }) {
|
|
|
66
65
|
const editingDocument = interaction.editingId
|
|
67
66
|
? store.items.find((item) => item.document.id === interaction.editingId)?.document ?? null
|
|
68
67
|
: null;
|
|
69
|
-
//
|
|
70
|
-
//
|
|
71
|
-
// the Changes log a recovery message.
|
|
68
|
+
// Deliberately independent of the localStorage session schema; a failed
|
|
69
|
+
// hydration leaves the inspector usable.
|
|
72
70
|
useEffect(() => {
|
|
73
71
|
clearSketchClipboardHandoff();
|
|
74
72
|
closeSketchNote();
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { type Options } from "modern-screenshot";
|
|
2
|
+
import { getPngDimensions } from "./raster.js";
|
|
1
3
|
export type SketchCaptureErrorCode = "unsupported" | "cancelled" | "capture-failed" | "processing-timeout";
|
|
2
4
|
export declare class SketchCaptureError extends Error {
|
|
3
5
|
readonly code: SketchCaptureErrorCode;
|
|
@@ -29,6 +31,13 @@ export interface SketchCaptureOptions {
|
|
|
29
31
|
readonly signal?: AbortSignal;
|
|
30
32
|
readonly processingTimeoutMs?: number;
|
|
31
33
|
}
|
|
34
|
+
/** The `domToBlob` call shape this module uses: a node plus render options. */
|
|
35
|
+
export type DomCaptureToBlob = (node: Node, options?: Options) => Promise<Blob>;
|
|
36
|
+
/** Replaces the DOM renderer and PNG reader for callers that cannot rasterize, such as jsdom tests. */
|
|
37
|
+
export interface SketchCaptureResources {
|
|
38
|
+
readonly toBlob?: DomCaptureToBlob;
|
|
39
|
+
readonly pngDimensions?: typeof getPngDimensions;
|
|
40
|
+
}
|
|
32
41
|
export interface SketchViewport {
|
|
33
42
|
readonly width: number;
|
|
34
43
|
readonly height: number;
|
|
@@ -44,11 +53,11 @@ export interface SketchScrollPosition {
|
|
|
44
53
|
readonly x: number;
|
|
45
54
|
readonly y: number;
|
|
46
55
|
}
|
|
47
|
-
/**
|
|
56
|
+
/** Browsers expose root scrolling through different APIs. */
|
|
48
57
|
export declare function getSketchScrollPosition(targetWindow: Window): SketchScrollPosition;
|
|
49
58
|
export declare function getSketchViewport(hostElement: HTMLElement): SketchViewport;
|
|
50
|
-
/**
|
|
51
|
-
export declare function captureViewport(options: SketchCaptureOptions): Promise<CapturedSketch>;
|
|
59
|
+
/** DOM-rendered, so no screen-capture permission is required. */
|
|
60
|
+
export declare function captureViewport(options: SketchCaptureOptions, resources?: SketchCaptureResources): Promise<CapturedSketch>;
|
|
52
61
|
export declare function createSketchCaptureOperation(options: SketchCaptureOptions): {
|
|
53
62
|
readonly promise: Promise<CapturedSketch>;
|
|
54
63
|
readonly cancel: () => void;
|
|
@@ -74,7 +74,7 @@ async function waitForLayout(signal, targetDocument) {
|
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
76
|
catch {
|
|
77
|
-
// Font readiness is best effort
|
|
77
|
+
// Font readiness is best effort.
|
|
78
78
|
}
|
|
79
79
|
await waitForAnimationFrame(signal);
|
|
80
80
|
await waitForAnimationFrame(signal);
|
|
@@ -89,7 +89,7 @@ function domContentWidth(hostElement) {
|
|
|
89
89
|
function nonNegativeOffset(...values) {
|
|
90
90
|
return Math.max(0, ...values.filter((value) => Number.isFinite(value)));
|
|
91
91
|
}
|
|
92
|
-
/**
|
|
92
|
+
/** Browsers expose root scrolling through different APIs. */
|
|
93
93
|
export function getSketchScrollPosition(targetWindow) {
|
|
94
94
|
const targetDocument = targetWindow.document;
|
|
95
95
|
const scrollingElement = targetDocument.scrollingElement;
|
|
@@ -253,7 +253,9 @@ async function runWithProcessingTimeout(operation, timeoutMs, parentSignal) {
|
|
|
253
253
|
controller.abort();
|
|
254
254
|
}
|
|
255
255
|
}
|
|
256
|
-
async function captureDomFrame(options, signal) {
|
|
256
|
+
async function captureDomFrame(options, resources, signal) {
|
|
257
|
+
const toBlob = resources.toBlob ?? domToBlob;
|
|
258
|
+
const readPngDimensions = resources.pngDimensions ?? getPngDimensions;
|
|
257
259
|
const surface = getSketchSurface(options.hostElement);
|
|
258
260
|
const viewport = domViewportDimensions(options.hostElement);
|
|
259
261
|
let scale = viewport.scale;
|
|
@@ -272,7 +274,7 @@ async function captureDomFrame(options, signal) {
|
|
|
272
274
|
signal?.addEventListener("abort", restore, { once: true });
|
|
273
275
|
let blob;
|
|
274
276
|
try {
|
|
275
|
-
blob = await
|
|
277
|
+
blob = await toBlob(surface.document.documentElement, {
|
|
276
278
|
type: "image/png",
|
|
277
279
|
width: viewport.width,
|
|
278
280
|
height: viewport.height,
|
|
@@ -286,9 +288,8 @@ async function captureDomFrame(options, signal) {
|
|
|
286
288
|
filter: (node) => node !== options.hostElement && !isGoogleFontStylesheet(node) && videoFrames.filter(node),
|
|
287
289
|
features: { restoreScrollPosition: true },
|
|
288
290
|
timeout: MEDIA_LOAD_TIMEOUT_MS,
|
|
289
|
-
//
|
|
290
|
-
//
|
|
291
|
-
// cannot serialize anyway; computed font styles still remain inline.
|
|
291
|
+
// modern-screenshot cannot serialize cross-origin Google CSS; computed
|
|
292
|
+
// font styles still remain inline.
|
|
292
293
|
font: hasGoogleFontStylesheet(surface.document) ? false : undefined,
|
|
293
294
|
onCloneEachNode: (node) => {
|
|
294
295
|
prepareDomClone(node);
|
|
@@ -302,7 +303,7 @@ async function captureDomFrame(options, signal) {
|
|
|
302
303
|
restore();
|
|
303
304
|
}
|
|
304
305
|
assertNotAborted(signal);
|
|
305
|
-
const dimensions = await
|
|
306
|
+
const dimensions = await readPngDimensions(blob);
|
|
306
307
|
if (!dimensions
|
|
307
308
|
|| dimensions.width > SKETCH_LIMITS.imageEdge
|
|
308
309
|
|| dimensions.height > SKETCH_LIMITS.imageEdge) {
|
|
@@ -315,8 +316,8 @@ async function captureDomFrame(options, signal) {
|
|
|
315
316
|
}
|
|
316
317
|
throw new SketchCaptureError("capture-failed", "This viewport is too detailed to save within the 2 MiB image limit.");
|
|
317
318
|
}
|
|
318
|
-
/**
|
|
319
|
-
export async function captureViewport(options) {
|
|
319
|
+
/** DOM-rendered, so no screen-capture permission is required. */
|
|
320
|
+
export async function captureViewport(options, resources = {}) {
|
|
320
321
|
if (typeof document === "undefined" || typeof window === "undefined") {
|
|
321
322
|
throw new SketchCaptureError("unsupported", "Viewport capture is only available in a browser.");
|
|
322
323
|
}
|
|
@@ -325,7 +326,7 @@ export async function captureViewport(options) {
|
|
|
325
326
|
const surface = getSketchSurface(options.hostElement);
|
|
326
327
|
const frame = await runWithProcessingTimeout(async (processingSignal) => {
|
|
327
328
|
await waitForLayout(processingSignal, surface.document);
|
|
328
|
-
return captureDomFrame(options, processingSignal);
|
|
329
|
+
return captureDomFrame(options, resources, processingSignal);
|
|
329
330
|
}, options.processingTimeoutMs ?? DEFAULT_PROCESSING_TIMEOUT_MS, options.signal);
|
|
330
331
|
assertNotAborted(options.signal);
|
|
331
332
|
const runtime = getNudgeUiRuntimeConfig();
|
|
@@ -1,10 +1,4 @@
|
|
|
1
|
-
/** Copies a saved sketch image automatically after an edit and reports the outcome as a toast. */
|
|
2
1
|
export declare function copySketchImage(image: Blob): Promise<void>;
|
|
3
|
-
/** Copies a sketch image the user asked for; only a failure needs a toast. */
|
|
4
2
|
export declare function copySketchImageOnRequest(image: Blob): Promise<void>;
|
|
5
|
-
/**
|
|
6
|
-
* Starts the clipboard write synchronously (inside the "Done" gesture) and
|
|
7
|
-
* fills it with the image that `save` renders. A failed save skips the toast
|
|
8
|
-
* and rethrows so the caller can show its own error.
|
|
9
|
-
*/
|
|
3
|
+
/** A failed save skips the toast and rethrows so the caller can show its own error; the clipboard write starts before `save` resolves. */
|
|
10
4
|
export declare function saveAndCopySketch(save: () => Promise<Blob>): Promise<void>;
|
|
@@ -7,30 +7,21 @@ function reportCopyFailure(title, error) {
|
|
|
7
7
|
description: error instanceof Error ? error.message : "The sketch image could not be copied.",
|
|
8
8
|
});
|
|
9
9
|
}
|
|
10
|
-
/**
|
|
11
|
-
* Reports a copy made automatically on save. The toast is the only sign the
|
|
12
|
-
* clipboard changed, so success is announced as well as failure.
|
|
13
|
-
*/
|
|
10
|
+
/** The toast is the only sign the clipboard changed, so success is announced too. */
|
|
14
11
|
function reportAutoCopy(copied) {
|
|
15
12
|
void copied.then(() => showToast({ title: "Copied to clipboard" }), (error) => reportCopyFailure("Sketch saved, but not copied", error));
|
|
16
13
|
}
|
|
17
|
-
/** Copies a saved sketch image automatically after an edit and reports the outcome as a toast. */
|
|
18
14
|
export function copySketchImage(image) {
|
|
19
15
|
const copied = copyImageToClipboard(image);
|
|
20
16
|
reportAutoCopy(copied);
|
|
21
17
|
return copied.catch(() => undefined);
|
|
22
18
|
}
|
|
23
|
-
/** Copies a sketch image the user asked for; only a failure needs a toast. */
|
|
24
19
|
export function copySketchImageOnRequest(image) {
|
|
25
20
|
const copied = copyImageToClipboard(image);
|
|
26
21
|
void copied.catch((error) => reportCopyFailure("Sketch not copied", error));
|
|
27
22
|
return copied.catch(() => undefined);
|
|
28
23
|
}
|
|
29
|
-
/**
|
|
30
|
-
* Starts the clipboard write synchronously (inside the "Done" gesture) and
|
|
31
|
-
* fills it with the image that `save` renders. A failed save skips the toast
|
|
32
|
-
* and rethrows so the caller can show its own error.
|
|
33
|
-
*/
|
|
24
|
+
/** A failed save skips the toast and rethrows so the caller can show its own error; the clipboard write starts before `save` resolves. */
|
|
34
25
|
export async function saveAndCopySketch(save) {
|
|
35
26
|
let resolveImage = () => undefined;
|
|
36
27
|
let rejectImage = () => undefined;
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { type SketchPenColor } from "./model.js";
|
|
2
|
-
/** Drawing mode chosen from the canvas toolbar while the sketch tool is active. */
|
|
3
2
|
export type SketchDrawingTool = "pen" | "eraser" | "rectangle";
|
|
4
3
|
export interface SketchDrawingToolsSnapshot {
|
|
5
4
|
readonly tool: SketchDrawingTool;
|
|
@@ -11,7 +10,6 @@ export declare function useSketchDrawingTools(): SketchDrawingToolsSnapshot;
|
|
|
11
10
|
export declare function setSketchDrawingTool(tool: SketchDrawingTool): void;
|
|
12
11
|
/** Choosing a color implies drawing with it, so the eraser hands back to the pen. */
|
|
13
12
|
export declare function setSketchStrokeColor(color: SketchPenColor): void;
|
|
14
|
-
/**
|
|
13
|
+
/** Resets the tool only; the chosen color is kept. */
|
|
15
14
|
export declare function resetSketchDrawingTool(): void;
|
|
16
|
-
/** Restores the default tool and color. */
|
|
17
15
|
export declare function restoreDefaultSketchDrawingTools(): void;
|
|
@@ -37,11 +37,10 @@ export function setSketchDrawingTool(tool) {
|
|
|
37
37
|
export function setSketchStrokeColor(color) {
|
|
38
38
|
publish({ tool: snapshot.tool === "eraser" ? "pen" : snapshot.tool, color });
|
|
39
39
|
}
|
|
40
|
-
/**
|
|
40
|
+
/** Resets the tool only; the chosen color is kept. */
|
|
41
41
|
export function resetSketchDrawingTool() {
|
|
42
42
|
setSketchDrawingTool("pen");
|
|
43
43
|
}
|
|
44
|
-
/** Restores the default tool and color. */
|
|
45
44
|
export function restoreDefaultSketchDrawingTools() {
|
|
46
45
|
snapshot = DEFAULT_SNAPSHOT;
|
|
47
46
|
}
|
|
@@ -1,9 +1,3 @@
|
|
|
1
1
|
import { type CanvasCard } from "../canvas/canvasStore.js";
|
|
2
|
-
/**
|
|
3
|
-
* Names the frame an annotated sketch targets, so the PNG stays actionable when
|
|
4
|
-
* a user copies it to an agent without the handoff prompt. Iterations also name
|
|
5
|
-
* their artifact file: the folder ID is the only stable identity an agent can
|
|
6
|
-
* use to find the right iteration, since canvas iteration numbers are live
|
|
7
|
-
* labels that nothing persists.
|
|
8
|
-
*/
|
|
2
|
+
/** Iterations also name their artifact folder: iteration numbers are live labels that nothing persists. */
|
|
9
3
|
export declare function sketchFrameHeading(captureUrl: string, frameCards?: readonly CanvasCard[]): string;
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { getCanvasCards } from "../canvas/canvasStore.js";
|
|
2
2
|
import { contentSourceUrl } from "../canvas/frameContent.js";
|
|
3
3
|
import { artifactIdFromUrl, htmlTarget } from "../drafts/model.js";
|
|
4
|
-
/** The page path shown in sketch headings; origin, query, and hash stay out. */
|
|
5
4
|
function routePath(url) {
|
|
6
5
|
try {
|
|
7
6
|
return new URL(url).pathname || "/";
|
|
@@ -10,13 +9,7 @@ function routePath(url) {
|
|
|
10
9
|
return url;
|
|
11
10
|
}
|
|
12
11
|
}
|
|
13
|
-
/**
|
|
14
|
-
* Names the frame an annotated sketch targets, so the PNG stays actionable when
|
|
15
|
-
* a user copies it to an agent without the handoff prompt. Iterations also name
|
|
16
|
-
* their artifact file: the folder ID is the only stable identity an agent can
|
|
17
|
-
* use to find the right iteration, since canvas iteration numbers are live
|
|
18
|
-
* labels that nothing persists.
|
|
19
|
-
*/
|
|
12
|
+
/** Iterations also name their artifact folder: iteration numbers are live labels that nothing persists. */
|
|
20
13
|
export function sketchFrameHeading(captureUrl, frameCards = getCanvasCards()) {
|
|
21
14
|
const artifactId = artifactIdFromUrl(captureUrl);
|
|
22
15
|
if (!artifactId)
|
|
@@ -9,5 +9,4 @@ export interface SketchSvgLayerProps {
|
|
|
9
9
|
readonly annotations?: readonly SketchAnnotation[];
|
|
10
10
|
readonly annotationScale?: number;
|
|
11
11
|
}
|
|
12
|
-
/** Renders sketch geometry as DOM-native SVG shapes. */
|
|
13
12
|
export declare function SketchSvgLayer({ strokes, annotations, annotationScale, }: SketchSvgLayerProps): ReactElement;
|
|
@@ -49,7 +49,6 @@ export function sketchStrokePath(stroke, scaleX = 1, scaleY = scaleX) {
|
|
|
49
49
|
return linePath(stroke.points, scaleX, scaleY);
|
|
50
50
|
return getSvgPathFromStroke(sketchStrokeOutline(stroke, scaleX, scaleY));
|
|
51
51
|
}
|
|
52
|
-
/** Renders sketch geometry as DOM-native SVG shapes. */
|
|
53
52
|
export function SketchSvgLayer({ strokes, annotations = [], annotationScale = 1, }) {
|
|
54
53
|
return (_jsxs("g", { "data-test": "sketch-svg-layer", children: [strokes.map((stroke) => {
|
|
55
54
|
const path = sketchStrokePath(stroke);
|
|
@@ -11,13 +11,8 @@ export type SketchElementReference = {
|
|
|
11
11
|
readonly id: string;
|
|
12
12
|
};
|
|
13
13
|
export declare function distanceToSegment(point: SketchPoint, start: SketchPoint, end: SketchPoint): number;
|
|
14
|
-
/** Returns the topmost drawable object under a point in canvas coordinates. */
|
|
15
14
|
export declare function findSketchElementAt(point: SketchPoint, strokes: readonly SketchStroke[], annotations: readonly SketchAnnotation[]): SketchElementReference | null;
|
|
16
15
|
export declare function translateSketchStroke(stroke: SketchStroke, delta: SketchPoint, bounds: SketchBounds): SketchStroke;
|
|
17
16
|
export declare function translateSketchAnnotation(annotation: SketchAnnotation, delta: SketchPoint, bounds: SketchBounds): SketchAnnotation;
|
|
18
|
-
/**
|
|
19
|
-
* Returns the ids of strokes whose drawn line passes within `radius` of the
|
|
20
|
-
* eraser path from `start` to `end`. Rectangles are hit on their outline only,
|
|
21
|
-
* so erasing across the inside of a box leaves it in place.
|
|
22
|
-
*/
|
|
17
|
+
/** Rectangles are hit on their outline only, so erasing inside a box leaves it in place. */
|
|
23
18
|
export declare function findErasedSketchStrokeIds(start: SketchPoint, end: SketchPoint, strokes: readonly SketchStroke[], radius: number): string[];
|
|
@@ -37,7 +37,6 @@ function pointBounds(points) {
|
|
|
37
37
|
}
|
|
38
38
|
return { minX, maxX, minY, maxY };
|
|
39
39
|
}
|
|
40
|
-
/** Returns the topmost drawable object under a point in canvas coordinates. */
|
|
41
40
|
export function findSketchElementAt(point, strokes, annotations) {
|
|
42
41
|
for (let index = annotations.length - 1; index >= 0; index -= 1) {
|
|
43
42
|
const annotation = annotations[index];
|
|
@@ -96,11 +95,7 @@ export function translateSketchAnnotation(annotation, delta, bounds) {
|
|
|
96
95
|
},
|
|
97
96
|
};
|
|
98
97
|
}
|
|
99
|
-
/**
|
|
100
|
-
* Returns the ids of strokes whose drawn line passes within `radius` of the
|
|
101
|
-
* eraser path from `start` to `end`. Rectangles are hit on their outline only,
|
|
102
|
-
* so erasing across the inside of a box leaves it in place.
|
|
103
|
-
*/
|
|
98
|
+
/** Rectangles are hit on their outline only, so erasing inside a box leaves it in place. */
|
|
104
99
|
export function findErasedSketchStrokeIds(start, end, strokes, radius) {
|
|
105
100
|
const steps = Math.max(1, Math.ceil(distance(start, end) / Math.max(1, radius / 2)));
|
|
106
101
|
const samples = [];
|
|
@@ -12,7 +12,6 @@ type SketchHistoryEntry = {
|
|
|
12
12
|
readonly gesture: number;
|
|
13
13
|
readonly erased: readonly ErasedStroke[];
|
|
14
14
|
};
|
|
15
|
-
/** Strokes plus the undo and redo stacks of the edits that produced them. */
|
|
16
15
|
export interface SketchHistory {
|
|
17
16
|
readonly strokes: readonly SketchStroke[];
|
|
18
17
|
readonly undo: readonly SketchHistoryEntry[];
|
|
@@ -20,10 +19,7 @@ export interface SketchHistory {
|
|
|
20
19
|
}
|
|
21
20
|
export declare const EMPTY_SKETCH_HISTORY: SketchHistory;
|
|
22
21
|
export declare function addSketchStroke(history: SketchHistory, stroke: SketchStroke): SketchHistory;
|
|
23
|
-
/**
|
|
24
|
-
* Erases strokes as one undoable edit. Strokes erased by the same `gesture`
|
|
25
|
-
* share an entry, so one eraser drag undoes in a single step.
|
|
26
|
-
*/
|
|
22
|
+
/** Strokes erased by the same `gesture` share one undo entry, so an eraser drag undoes in one step. */
|
|
27
23
|
export declare function eraseSketchStrokes(history: SketchHistory, ids: readonly string[], gesture: number): SketchHistory;
|
|
28
24
|
export declare function undoSketchEdit(history: SketchHistory): SketchHistory;
|
|
29
25
|
export declare function redoSketchEdit(history: SketchHistory): SketchHistory;
|
|
@@ -17,10 +17,7 @@ function removeStrokes(strokes, ids) {
|
|
|
17
17
|
});
|
|
18
18
|
return { strokes: remaining, erased };
|
|
19
19
|
}
|
|
20
|
-
/**
|
|
21
|
-
* Erases strokes as one undoable edit. Strokes erased by the same `gesture`
|
|
22
|
-
* share an entry, so one eraser drag undoes in a single step.
|
|
23
|
-
*/
|
|
20
|
+
/** Strokes erased by the same `gesture` share one undo entry, so an eraser drag undoes in one step. */
|
|
24
21
|
export function eraseSketchStrokes(history, ids, gesture) {
|
|
25
22
|
const { strokes, erased } = removeStrokes(history.strokes, new Set(ids));
|
|
26
23
|
if (erased.length === 0)
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type CapturedSketch } from "./capture.js";
|
|
1
|
+
import { captureViewport, type CapturedSketch } from "./capture.js";
|
|
2
2
|
export type SketchCaptureState = "idle" | "sketching" | "capturing" | "ready" | "error";
|
|
3
3
|
export interface SketchInteractionSnapshot {
|
|
4
4
|
readonly captureState: SketchCaptureState;
|
|
@@ -13,7 +13,7 @@ export declare function useSketchInteraction(): SketchInteractionSnapshot;
|
|
|
13
13
|
export declare function isSketchInteractionActive(): boolean;
|
|
14
14
|
export declare function useSketchInteractionActive(): boolean;
|
|
15
15
|
export declare function beginSketchCapture(): void;
|
|
16
|
-
export declare function completeSketchCapture(hostElement: HTMLElement): Promise<CapturedSketch>;
|
|
16
|
+
export declare function completeSketchCapture(hostElement: HTMLElement, capture?: typeof captureViewport): Promise<CapturedSketch>;
|
|
17
17
|
export declare function cancelSketchInteraction(): void;
|
|
18
18
|
export declare function openSketchEditor(sketchId: string): void;
|
|
19
19
|
export declare function closeSketchEditor(): void;
|
|
@@ -44,14 +44,14 @@ export function beginSketchCapture() {
|
|
|
44
44
|
captureController = null;
|
|
45
45
|
publish({ captureState: "sketching", captured: null, editingId: null, error: null, draftId: getActiveDraftChanges().draftId });
|
|
46
46
|
}
|
|
47
|
-
export function completeSketchCapture(hostElement) {
|
|
47
|
+
export function completeSketchCapture(hostElement, capture = captureViewport) {
|
|
48
48
|
captureController?.abort();
|
|
49
49
|
const controller = new AbortController();
|
|
50
50
|
captureController = controller;
|
|
51
51
|
const draftId = snapshot.draftId;
|
|
52
52
|
publish({ captureState: "capturing", captured: null, editingId: null, error: null, draftId });
|
|
53
53
|
const options = { hostElement, signal: controller.signal };
|
|
54
|
-
return
|
|
54
|
+
return capture(options)
|
|
55
55
|
.then((captured) => {
|
|
56
56
|
if (captureController !== controller)
|
|
57
57
|
return captured;
|
|
@@ -17,16 +17,13 @@ export declare const SKETCH_LIMITS: {
|
|
|
17
17
|
readonly title: 512;
|
|
18
18
|
};
|
|
19
19
|
export declare const SKETCH_STROKE_WIDTH = 6;
|
|
20
|
-
/** Drawn rectangles use a lighter outline than the freehand pen. */
|
|
21
20
|
export declare const SKETCH_RECTANGLE_STROKE_WIDTH = 4;
|
|
22
|
-
/** Opacity of the tint inside a drawn rectangle, in the rectangle's own color. */
|
|
23
21
|
export declare const SKETCH_RECTANGLE_FILL_OPACITY = 0.1;
|
|
24
|
-
/** Default pen color, and the fallback for strokes saved without one. */
|
|
25
22
|
export declare const SKETCH_STROKE_COLOR = "#0096ff";
|
|
26
23
|
/** Annotation markers and the notes panel; independent of the chosen pen color. */
|
|
27
24
|
export declare const SKETCH_ACCENT_COLOR = "#0096ff";
|
|
28
25
|
export declare const SKETCH_STROKE_OUTLINE = "";
|
|
29
|
-
/**
|
|
26
|
+
/** Ordered clockwise around the toolbar's swatch picker. */
|
|
30
27
|
export declare const SKETCH_PEN_COLORS: readonly [{
|
|
31
28
|
readonly id: "red";
|
|
32
29
|
readonly name: "Red";
|
|
@@ -97,11 +94,7 @@ export interface SketchDocument {
|
|
|
97
94
|
readonly strokes: readonly SketchStroke[];
|
|
98
95
|
/** Optional for compatibility with sketches saved before annotations existed. */
|
|
99
96
|
readonly annotations?: readonly SketchAnnotation[];
|
|
100
|
-
/**
|
|
101
|
-
* Size of `annotatedImage`, which can be taller than the capture when a
|
|
102
|
-
* notes panel is appended. `capture.imageWidth`/`imageHeight` size the
|
|
103
|
-
* original screenshot and the stroke coordinate space.
|
|
104
|
-
*/
|
|
97
|
+
/** Size of `annotatedImage` (grows with a notes panel); `capture.imageWidth`/`imageHeight` size the stroke coordinate space. */
|
|
105
98
|
readonly imageWidth: number;
|
|
106
99
|
readonly imageHeight: number;
|
|
107
100
|
readonly originalByteSize: number;
|
|
@@ -16,16 +16,13 @@ export const SKETCH_LIMITS = {
|
|
|
16
16
|
title: 512,
|
|
17
17
|
};
|
|
18
18
|
export const SKETCH_STROKE_WIDTH = 6;
|
|
19
|
-
/** Drawn rectangles use a lighter outline than the freehand pen. */
|
|
20
19
|
export const SKETCH_RECTANGLE_STROKE_WIDTH = 4;
|
|
21
|
-
/** Opacity of the tint inside a drawn rectangle, in the rectangle's own color. */
|
|
22
20
|
export const SKETCH_RECTANGLE_FILL_OPACITY = 0.1;
|
|
23
|
-
/** Default pen color, and the fallback for strokes saved without one. */
|
|
24
21
|
export const SKETCH_STROKE_COLOR = "#0096ff";
|
|
25
22
|
/** Annotation markers and the notes panel; independent of the chosen pen color. */
|
|
26
23
|
export const SKETCH_ACCENT_COLOR = "#0096ff";
|
|
27
24
|
export const SKETCH_STROKE_OUTLINE = "";
|
|
28
|
-
/**
|
|
25
|
+
/** Ordered clockwise around the toolbar's swatch picker. */
|
|
29
26
|
export const SKETCH_PEN_COLORS = [
|
|
30
27
|
{ id: "red", name: "Red", value: "#f03e1e" },
|
|
31
28
|
{ id: "orange", name: "Orange", value: "#ff8a00" },
|
|
@@ -35,8 +32,7 @@ export const SKETCH_PEN_COLORS = [
|
|
|
35
32
|
{ id: "green", name: "Green", value: "#1fc85a" },
|
|
36
33
|
];
|
|
37
34
|
export const SKETCH_ANNOTATION_RADIUS = 16;
|
|
38
|
-
// Keep accepting sketches saved before the annotation color update.
|
|
39
|
-
// PNGs remain unchanged until a user edits and saves them again.
|
|
35
|
+
// Keep accepting sketches saved before the annotation color update.
|
|
40
36
|
const LEGACY_SKETCH_STROKE_COLOR = "#ef4444";
|
|
41
37
|
const LEGACY_SKETCH_STROKE_OUTLINE = "#111827";
|
|
42
38
|
export function createSketchFilename(id, revision) {
|
|
@@ -49,19 +45,16 @@ value) {
|
|
|
49
45
|
return typeof value === "number" && Number.isFinite(value);
|
|
50
46
|
}
|
|
51
47
|
function safeIntegerInRange(
|
|
52
|
-
// Stored sketch fields are untrusted until this check narrows them.
|
|
53
48
|
// oxlint-disable-next-line anti-slop/no-unknown-parameters
|
|
54
49
|
value, minimum, maximum = Number.MAX_SAFE_INTEGER) {
|
|
55
50
|
return typeof value === "number" && Number.isSafeInteger(value) && value >= minimum && value <= maximum;
|
|
56
51
|
}
|
|
57
52
|
function boundedString(
|
|
58
|
-
// Stored sketch fields are untrusted until this check narrows them.
|
|
59
53
|
// oxlint-disable-next-line anti-slop/no-unknown-parameters
|
|
60
54
|
value, maximum, allowEmpty = false) {
|
|
61
55
|
return typeof value === "string" && value.length <= maximum && (allowEmpty || value.length > 0);
|
|
62
56
|
}
|
|
63
57
|
function isBlob(
|
|
64
|
-
// Stored sketch images are untrusted until this check narrows them.
|
|
65
58
|
// oxlint-disable-next-line anti-slop/no-unknown-parameters
|
|
66
59
|
value, mimeType) {
|
|
67
60
|
return typeof Blob !== "undefined"
|
|
@@ -69,7 +62,6 @@ value, mimeType) {
|
|
|
69
62
|
&& (mimeType === undefined || value.type === mimeType);
|
|
70
63
|
}
|
|
71
64
|
function validHttpUrl(
|
|
72
|
-
// Stored sketch fields are untrusted until this check narrows them.
|
|
73
65
|
// oxlint-disable-next-line anti-slop/no-unknown-parameters
|
|
74
66
|
value, maximum) {
|
|
75
67
|
if (!boundedString(value, maximum))
|
|
@@ -83,13 +75,11 @@ value, maximum) {
|
|
|
83
75
|
}
|
|
84
76
|
}
|
|
85
77
|
function isPlainObject(
|
|
86
|
-
// Stored sketch records are untrusted until this check narrows them.
|
|
87
78
|
// oxlint-disable-next-line anti-slop/no-unknown-parameters
|
|
88
79
|
value) {
|
|
89
80
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
90
81
|
}
|
|
91
82
|
export function isSketchCaptureMetadata(
|
|
92
|
-
// Capture metadata is read back from storage and parsed here.
|
|
93
83
|
// oxlint-disable-next-line anti-slop/no-unknown-parameters
|
|
94
84
|
value) {
|
|
95
85
|
if (!isPlainObject(value))
|
|
@@ -130,7 +120,6 @@ value) {
|
|
|
130
120
|
&& safeIntegerInRange(capture.imageHeight, 1, SKETCH_LIMITS.imageEdge);
|
|
131
121
|
}
|
|
132
122
|
export function isSketchPoint(
|
|
133
|
-
// Stored points are untrusted until this check narrows them.
|
|
134
123
|
// oxlint-disable-next-line anti-slop/no-unknown-parameters
|
|
135
124
|
value) {
|
|
136
125
|
if (!isPlainObject(value))
|
|
@@ -146,7 +135,6 @@ value) {
|
|
|
146
135
|
&& point.y <= SKETCH_LIMITS.imageEdge;
|
|
147
136
|
}
|
|
148
137
|
export function isSketchAnnotation(
|
|
149
|
-
// Stored annotations are untrusted until this check narrows them.
|
|
150
138
|
// oxlint-disable-next-line anti-slop/no-unknown-parameters
|
|
151
139
|
value) {
|
|
152
140
|
if (!isPlainObject(value))
|
|
@@ -160,7 +148,6 @@ value) {
|
|
|
160
148
|
&& boundedString(annotation.description, SKETCH_LIMITS.description);
|
|
161
149
|
}
|
|
162
150
|
export function isSketchStroke(
|
|
163
|
-
// Stored strokes are untrusted until this check narrows them.
|
|
164
151
|
// oxlint-disable-next-line anti-slop/no-unknown-parameters
|
|
165
152
|
value) {
|
|
166
153
|
if (!isPlainObject(value))
|
|
@@ -182,7 +169,6 @@ value) {
|
|
|
182
169
|
&& stroke.points.every(isSketchPoint);
|
|
183
170
|
}
|
|
184
171
|
function isSketchStrokeList(
|
|
185
|
-
// Stored stroke lists are untrusted until this check narrows them.
|
|
186
172
|
// oxlint-disable-next-line anti-slop/no-unknown-parameters
|
|
187
173
|
value) {
|
|
188
174
|
return Array.isArray(value)
|
|
@@ -190,7 +176,6 @@ value) {
|
|
|
190
176
|
&& value.every(isSketchStroke);
|
|
191
177
|
}
|
|
192
178
|
function isSketchAnnotationList(
|
|
193
|
-
// Stored annotation lists are untrusted until this check narrows them.
|
|
194
179
|
// oxlint-disable-next-line anti-slop/no-unknown-parameters
|
|
195
180
|
value) {
|
|
196
181
|
return Array.isArray(value)
|
|
@@ -198,7 +183,6 @@ value) {
|
|
|
198
183
|
&& value.every(isSketchAnnotation);
|
|
199
184
|
}
|
|
200
185
|
export function isSketchDocument(
|
|
201
|
-
// Sketch documents are read back from storage and parsed here.
|
|
202
186
|
// oxlint-disable-next-line anti-slop/no-unknown-parameters
|
|
203
187
|
value) {
|
|
204
188
|
if (!isPlainObject(value))
|
|
@@ -248,7 +232,6 @@ value) {
|
|
|
248
232
|
&& document.annotatedImage.size === document.annotatedByteSize;
|
|
249
233
|
}
|
|
250
234
|
export function isSketchHandoffRecord(
|
|
251
|
-
// Handoff records are read back from storage and parsed here.
|
|
252
235
|
// oxlint-disable-next-line anti-slop/no-unknown-parameters
|
|
253
236
|
value) {
|
|
254
237
|
if (!isPlainObject(value))
|
|
@@ -24,7 +24,6 @@ export interface SketchStorage {
|
|
|
24
24
|
}
|
|
25
25
|
export declare function configureSketchStorage(storage: SketchStorage | null): void;
|
|
26
26
|
export declare function readSketchPersistence(projectId: string): Promise<SketchPersistenceSnapshot>;
|
|
27
|
-
/** Writes a document and its initial/current handoff atomically. */
|
|
28
27
|
export declare function writeSketchPersistence(projectId: string, document: SketchDocument, handoff: SketchHandoffRecord): Promise<void>;
|
|
29
28
|
export declare function writeSketchHandoff(projectId: string, handoff: SketchHandoffRecord): Promise<void>;
|
|
30
29
|
export declare function writeSketchHandoffs(projectId: string, handoffs: readonly SketchHandoffRecord[]): Promise<void>;
|
|
@@ -62,7 +62,7 @@ async function openDatabase() {
|
|
|
62
62
|
if (!factory)
|
|
63
63
|
return null;
|
|
64
64
|
// Demo runtimes (the landing page) are session-only: sketches live in the
|
|
65
|
-
// in-memory fallback and never touch IndexedDB
|
|
65
|
+
// in-memory fallback and never touch IndexedDB.
|
|
66
66
|
if (isDemoRuntime())
|
|
67
67
|
return null;
|
|
68
68
|
if (!databasePromise) {
|
|
@@ -121,6 +121,7 @@ export async function readSketchPersistence(projectId) {
|
|
|
121
121
|
try {
|
|
122
122
|
const transaction = database.transaction([SKETCH_DOCUMENTS_STORE, SKETCH_HANDOFFS_STORE], "readonly");
|
|
123
123
|
const done = transactionDone(transaction);
|
|
124
|
+
// Records come back as stored; the store drops anything that fails validation during hydration.
|
|
124
125
|
const documentsPromise = requestResult(transaction.objectStore(SKETCH_DOCUMENTS_STORE).index("projectId").getAll(projectId));
|
|
125
126
|
const handoffsPromise = requestResult(transaction.objectStore(SKETCH_HANDOFFS_STORE).index("projectId").getAll(projectId));
|
|
126
127
|
const [documents, handoffs] = await Promise.all([documentsPromise, handoffsPromise, done]);
|
|
@@ -130,7 +131,6 @@ export async function readSketchPersistence(projectId) {
|
|
|
130
131
|
throw storageError("Sketch storage could not be read.", error);
|
|
131
132
|
}
|
|
132
133
|
}
|
|
133
|
-
/** Writes a document and its initial/current handoff atomically. */
|
|
134
134
|
export async function writeSketchPersistence(projectId, document, handoff) {
|
|
135
135
|
if (configuredStorage) {
|
|
136
136
|
const change = { documents: [document], handoffs: [handoff] };
|
|
@@ -16,10 +16,7 @@ export declare function renderAnnotatedPng(originalImage: Blob, imageWidth: numb
|
|
|
16
16
|
readonly height: number;
|
|
17
17
|
}>;
|
|
18
18
|
export declare function blobToBase64(blob: Blob): Promise<string>;
|
|
19
|
-
/**
|
|
20
|
-
* Accepts a pending blob so callers can start the write inside the user gesture
|
|
21
|
-
* (required by Safari) and resolve the image once rendering finishes.
|
|
22
|
-
*/
|
|
19
|
+
/** The promise form lets callers start the write inside the user gesture (required by Safari). */
|
|
23
20
|
export declare function copyImageToClipboard(blob: Blob | Promise<Blob>): Promise<void>;
|
|
24
21
|
export declare function copyImageAndTextToClipboard(blob: Blob, text: string): Promise<void>;
|
|
25
22
|
export declare function downloadImage(blob: Blob, filename: string): void;
|
|
@@ -14,8 +14,7 @@ export function readPngDimensions(bytes) {
|
|
|
14
14
|
if (bytes[index] !== PNG_SIGNATURE[index])
|
|
15
15
|
return null;
|
|
16
16
|
}
|
|
17
|
-
// IHDR is the first chunk
|
|
18
|
-
// byte offsets 16 and 20 in the complete file.
|
|
17
|
+
// IHDR is the first chunk; dimensions are big-endian at byte offsets 16 and 20.
|
|
19
18
|
if (bytes[12] !== 73 || bytes[13] !== 72 || bytes[14] !== 68 || bytes[15] !== 82)
|
|
20
19
|
return null;
|
|
21
20
|
const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
|
|
@@ -166,7 +165,6 @@ function wrapText(ctx, text, maxWidth) {
|
|
|
166
165
|
lines.push(line);
|
|
167
166
|
return lines;
|
|
168
167
|
}
|
|
169
|
-
/** Wraps the frame heading that names the sketch target to the panel width. */
|
|
170
168
|
function wrapSketchHeading(ctx, width, heading) {
|
|
171
169
|
const text = heading.trim();
|
|
172
170
|
if (!text)
|
|
@@ -174,7 +172,6 @@ function wrapSketchHeading(ctx, width, heading) {
|
|
|
174
172
|
ctx.font = SKETCH_NOTE_TITLE_FONT;
|
|
175
173
|
return wrapText(ctx, text, Math.max(1, width - SKETCH_NOTE_PADDING * 2));
|
|
176
174
|
}
|
|
177
|
-
/** Wraps the description and numbered annotation notes to the panel width. */
|
|
178
175
|
function wrapSketchNotes(ctx, width, description, annotations) {
|
|
179
176
|
const notes = [
|
|
180
177
|
description.trim(),
|
|
@@ -260,10 +257,7 @@ export async function blobToBase64(blob) {
|
|
|
260
257
|
throw new Error("This browser cannot prepare sketch attachments.");
|
|
261
258
|
return btoa(binary);
|
|
262
259
|
}
|
|
263
|
-
/**
|
|
264
|
-
* Accepts a pending blob so callers can start the write inside the user gesture
|
|
265
|
-
* (required by Safari) and resolve the image once rendering finishes.
|
|
266
|
-
*/
|
|
260
|
+
/** The promise form lets callers start the write inside the user gesture (required by Safari). */
|
|
267
261
|
export async function copyImageToClipboard(blob) {
|
|
268
262
|
if (typeof navigator === "undefined" || !navigator.clipboard?.write || typeof ClipboardItem === "undefined") {
|
|
269
263
|
throw new Error("Image clipboard access is unavailable. Use Download image instead.");
|
|
@@ -74,7 +74,6 @@ function randomId(prefix) {
|
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
76
|
catch {
|
|
77
|
-
// Fall through to the deterministic-enough browser fallback.
|
|
78
77
|
}
|
|
79
78
|
return `${prefix}-${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;
|
|
80
79
|
}
|
|
@@ -300,8 +299,8 @@ export function settleSketchDispatch(batchRevision, state, agentRequestId, local
|
|
|
300
299
|
if (hydration)
|
|
301
300
|
await hydration;
|
|
302
301
|
assertWritable(projectId, expectedGeneration);
|
|
303
|
-
//
|
|
304
|
-
//
|
|
302
|
+
// Resolved inside the write queue so an older completion event cannot
|
|
303
|
+
// remove a pending save or requeue.
|
|
305
304
|
const changes = snapshot.items.flatMap(({ document, handoff }) => {
|
|
306
305
|
if (!handoff || handoff.sketchRevision !== document.revision
|
|
307
306
|
|| handoff.transport !== "direct" || handoff.batchRevision !== batchRevision)
|