nudge-ui 0.2.4 → 0.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/agentCommand.d.ts +0 -1
- package/dist/cli/agentCommand.js +4 -29
- package/dist/client.mjs +987 -221
- package/dist/compiler/ast.d.ts +0 -6
- package/dist/compiler/ast.js +0 -5
- package/dist/compiler/componentContractTypes.d.ts +11 -5
- package/dist/compiler/componentContracts.js +3 -9
- package/dist/compiler/componentInstrumentation.d.ts +2 -13
- package/dist/compiler/componentInstrumentation.js +3 -12
- package/dist/compiler/componentPolicyResolution.d.ts +3 -22
- package/dist/compiler/componentPolicyResolution.js +6 -38
- package/dist/compiler/identityAttributes.d.ts +2 -0
- package/dist/compiler/identityAttributes.js +2 -0
- package/dist/compiler/index.d.ts +0 -1
- package/dist/compiler/index.js +0 -1
- package/dist/compiler/packageComponentContracts.d.ts +10 -19
- package/dist/compiler/packageComponentContracts.js +60 -43
- package/dist/compiler/reactComponentProtocols.d.ts +0 -7
- package/dist/compiler/reactComponentProtocols.js +0 -7
- package/dist/compiler/reactIdentity.d.ts +2 -2
- package/dist/compiler/reactIdentity.js +41 -43
- package/dist/compiler/sourcePaths.d.ts +4 -8
- package/dist/compiler/sourcePaths.js +6 -8
- package/dist/css/dialects/index.d.ts +2 -21
- package/dist/css/dialects/index.js +2 -9
- package/dist/css/dialects/tailwind.d.ts +2 -16
- package/dist/css/dialects/tailwind.js +2 -25
- package/dist/css/dialects/vanillaExtract.d.ts +1 -9
- package/dist/css/dialects/vanillaExtract.js +0 -1
- package/dist/css/index.d.ts +0 -8
- package/dist/css/index.js +0 -8
- package/dist/css/model/index.d.ts +6 -38
- package/dist/css/model/index.js +0 -9
- package/dist/css/token-inventory/index.d.ts +0 -23
- package/dist/css/token-inventory/index.js +0 -23
- package/dist/css/token-inventory/inventory.js +4 -16
- package/dist/css/token-inventory/parseStylesheet.d.ts +1 -9
- package/dist/css/token-inventory/parseStylesheet.js +5 -42
- package/dist/css/token-inventory/policy.d.ts +2 -39
- package/dist/css/token-inventory/policy.js +2 -39
- package/dist/css/token-inventory/types.d.ts +2 -15
- package/dist/css/value-semantics/borderSemantics.d.ts +1 -8
- package/dist/css/value-semantics/borderSemantics.js +5 -23
- package/dist/css/value-semantics/boxSemantics.d.ts +2 -25
- package/dist/css/value-semantics/boxSemantics.js +1 -7
- package/dist/css/value-semantics/colorSemantics.d.ts +6 -60
- package/dist/css/value-semantics/colorSemantics.js +9 -40
- package/dist/css/value-semantics/cssSyntax.d.ts +10 -10
- package/dist/css/value-semantics/cssSyntax.js +39 -11
- package/dist/css/value-semantics/fontSemantics.d.ts +3 -19
- package/dist/css/value-semantics/fontSemantics.js +7 -25
- package/dist/css/value-semantics/index.d.ts +1 -12
- package/dist/css/value-semantics/index.js +1 -12
- package/dist/css/value-semantics/propertyPolicy.d.ts +6 -53
- package/dist/css/value-semantics/propertyPolicy.js +47 -59
- package/dist/css/value-semantics/stringMaps.d.ts +0 -1
- package/dist/css/value-semantics/structuredValues.d.ts +3 -37
- package/dist/css/value-semantics/structuredValues.js +6 -17
- package/dist/css/value-semantics/tokenInterpretation.d.ts +8 -50
- package/dist/css/value-semantics/tokenInterpretation.js +7 -21
- package/dist/hosts/astro/astroRuntimeConfig.d.ts +0 -1
- package/dist/hosts/astro/astroRuntimeConfig.js +0 -1
- package/dist/hosts/astro/clientAsset.d.ts +1 -5
- package/dist/hosts/astro/clientAsset.js +1 -5
- package/dist/hosts/astro/clientTransport.d.ts +0 -1
- package/dist/hosts/astro/clientTransport.js +4 -9
- package/dist/hosts/astro/integration.d.ts +2 -28
- package/dist/hosts/astro/integration.js +7 -36
- package/dist/hosts/astro/markdownIdentity.d.ts +0 -3
- package/dist/hosts/astro/markdownIdentity.js +0 -3
- package/dist/hosts/astro/middleware.d.ts +1 -12
- package/dist/hosts/astro/middleware.js +1 -12
- package/dist/hosts/astro/projectContext.d.ts +1 -9
- package/dist/hosts/astro/projectContext.js +2 -11
- package/dist/hosts/astro/responseInstrumentation.d.ts +4 -33
- package/dist/hosts/astro/responseInstrumentation.js +5 -34
- package/dist/hosts/environment.d.ts +0 -8
- package/dist/hosts/environment.js +0 -1
- package/dist/hosts/next/index.js +1 -3
- package/dist/hosts/next/loader.d.ts +5 -44
- package/dist/hosts/next/loader.js +22 -103
- package/dist/hosts/next/loaders/identity-loader.cjs +111 -65
- package/dist/hosts/next/loaders/loader-plugin.cjs +111 -65
- package/dist/hosts/next/manifest.d.ts +2 -16
- package/dist/hosts/next/manifest.js +18 -20
- package/dist/hosts/next/mount.d.ts +1 -11
- package/dist/hosts/next/mount.js +1 -11
- package/dist/hosts/next/repositoryScope.d.ts +2 -17
- package/dist/hosts/next/repositoryScope.js +2 -17
- package/dist/hosts/next/sidecar.d.ts +0 -13
- package/dist/hosts/next/sidecar.js +25 -110
- package/dist/hosts/next/wrapper.d.ts +0 -31
- package/dist/hosts/next/wrapper.js +14 -71
- package/dist/hosts/projectBridge.d.ts +0 -2
- package/dist/hosts/projectBridge.js +3 -19
- package/dist/hosts/reactRendererCapture.d.ts +2 -0
- package/dist/hosts/reactRendererCapture.js +12 -0
- package/dist/hosts/static/cli.d.ts +0 -4
- package/dist/hosts/static/cli.js +0 -3
- package/dist/hosts/static/html/bootstrap.d.ts +1 -18
- package/dist/hosts/static/html/bootstrap.js +2 -14
- package/dist/hosts/static/manifest.d.ts +2 -15
- package/dist/hosts/static/manifest.js +5 -18
- package/dist/hosts/static/server.d.ts +4 -38
- package/dist/hosts/static/server.js +17 -67
- package/dist/hosts/vite/index.d.ts +0 -10
- package/dist/hosts/vite/index.js +0 -10
- package/dist/hosts/vite/react.d.ts +4 -17
- package/dist/hosts/vite/react.js +18 -35
- package/dist/hosts/vite/tokens/activeStylesheets.d.ts +1 -10
- package/dist/hosts/vite/tokens/activeStylesheets.js +3 -8
- package/dist/hosts/vite/tokens/fileMap.d.ts +0 -1
- package/dist/hosts/vite/tokens/viteStylesheetArtifacts.d.ts +2 -15
- package/dist/hosts/vite/tokens/viteStylesheetArtifacts.js +3 -10
- package/dist/hosts/vite/vite.d.ts +5 -26
- package/dist/hosts/vite/vite.js +44 -80
- package/dist/html/dom.d.ts +0 -1
- package/dist/html/dom.js +0 -1
- package/dist/html/identity.d.ts +1 -15
- package/dist/html/identity.js +1 -8
- package/dist/html/insertions.d.ts +2 -8
- package/dist/html/insertions.js +1 -1
- package/dist/inspector/agent/McpConnectionDialog.d.ts +1 -6
- package/dist/inspector/agent/McpConnectionDialog.js +8 -9
- package/dist/inspector/agent/activity.d.ts +2 -2
- package/dist/inspector/agent/activity.js +4 -3
- package/dist/inspector/agent/client.d.ts +3 -27
- package/dist/inspector/agent/client.js +43 -91
- package/dist/inspector/agent/connectionStatus.d.ts +3 -2
- package/dist/inspector/agent/connectionStatus.js +25 -1
- package/dist/inspector/agent/httpTransport.d.ts +0 -8
- package/dist/inspector/agent/httpTransport.js +42 -176
- package/dist/inspector/agent/protocol.d.ts +1 -10
- package/dist/inspector/agent/protocol.js +1 -9
- package/dist/inspector/agent/verification.d.ts +3 -20
- package/dist/inspector/agent/verification.js +10 -43
- package/dist/inspector/boot.d.ts +5 -0
- package/dist/inspector/boot.js +289 -0
- package/dist/inspector/canvas/AgentActivityOverlay.d.ts +3 -2
- package/dist/inspector/canvas/AgentActivityOverlay.js +7 -4
- package/dist/inspector/canvas/CanvasCard.js +26 -24
- package/dist/inspector/canvas/CanvasElementOverlay.js +196 -174
- package/dist/inspector/canvas/CanvasToolbar.js +2 -1
- package/dist/inspector/canvas/CanvasWorkspace.js +87 -124
- package/dist/inspector/canvas/LockedWorkspaceNotice.d.ts +3 -2
- package/dist/inspector/canvas/LockedWorkspaceNotice.js +10 -6
- package/dist/inspector/canvas/PageCard.d.ts +9 -0
- package/dist/inspector/canvas/PageCard.js +50 -0
- package/dist/inspector/canvas/SketchToolOptions.d.ts +4 -0
- package/dist/inspector/canvas/SketchToolOptions.js +80 -0
- package/dist/inspector/canvas/StaleChangeIndicator.d.ts +1 -1
- package/dist/inspector/canvas/StaleChangeIndicator.js +1 -1
- package/dist/inspector/canvas/ToolOptionsDrawer.d.ts +16 -0
- package/dist/inspector/canvas/ToolOptionsDrawer.js +71 -0
- package/dist/inspector/canvas/activeCanvasDocument.d.ts +3 -4
- package/dist/inspector/canvas/activeCanvasDocument.js +0 -2
- package/dist/inspector/canvas/agentPresentation.d.ts +2 -13
- package/dist/inspector/canvas/agentPresentation.js +3 -14
- package/dist/inspector/canvas/assets/eraser.svg +28 -0
- package/dist/inspector/canvas/assets/pen.svg +25 -0
- package/dist/inspector/canvas/canvasFrame.d.ts +12 -0
- package/dist/inspector/canvas/canvasFrame.js +9 -0
- package/dist/inspector/canvas/canvasGestures.d.ts +0 -1
- package/dist/inspector/canvas/canvasGestures.js +0 -6
- package/dist/inspector/canvas/canvasResize.d.ts +1 -6
- package/dist/inspector/canvas/canvasResize.js +1 -6
- package/dist/inspector/canvas/canvasStore.d.ts +5 -7
- package/dist/inspector/canvas/canvasStore.js +42 -21
- package/dist/inspector/canvas/frameConnection.d.ts +42 -0
- package/dist/inspector/canvas/frameConnection.js +73 -0
- package/dist/inspector/canvas/frameContent.d.ts +0 -1
- package/dist/inspector/canvas/frameLifecycle.d.ts +12 -0
- package/dist/inspector/canvas/frameLifecycle.js +11 -0
- package/dist/inspector/canvas/frameProtocol.d.ts +20 -38
- package/dist/inspector/canvas/frameProtocol.js +37 -24
- package/dist/inspector/canvas/frameScrollbarStyles.d.ts +0 -1
- package/dist/inspector/canvas/frameScrollbarStyles.js +0 -1
- package/dist/inspector/canvas/layout.d.ts +10 -22
- package/dist/inspector/canvas/layout.js +0 -3
- package/dist/inspector/canvas/normalizeUrl.js +1 -8
- package/dist/inspector/canvas/pageSurface.d.ts +6 -0
- package/dist/inspector/canvas/pageSurface.js +29 -0
- package/dist/inspector/canvas/projection.d.ts +14 -25
- package/dist/inspector/canvas/projection.js +64 -87
- package/dist/inspector/canvas/rendererBootstrap.d.ts +8 -1
- package/dist/inspector/canvas/rendererBootstrap.js +10 -15
- package/dist/inspector/canvas/rendererCidIndex.d.ts +0 -5
- package/dist/inspector/canvas/rendererCidIndex.js +0 -5
- package/dist/inspector/canvas/rendererElementSelector.js +38 -28
- package/dist/inspector/canvas/rendererMessageRouter.d.ts +4 -6
- package/dist/inspector/canvas/rendererMessageRouter.js +12 -17
- package/dist/inspector/canvas/rendererSelectionProxy.d.ts +3 -1
- package/dist/inspector/canvas/rendererSelectionProxy.js +7 -40
- package/dist/inspector/canvas/rendererStylesheet.d.ts +0 -1
- package/dist/inspector/canvas/rendererStylesheet.js +23 -1
- package/dist/inspector/canvas/resizeHandleScale.d.ts +1 -10
- package/dist/inspector/canvas/resizeHandleScale.js +1 -10
- package/dist/inspector/canvas/sessionStore.d.ts +3 -9
- package/dist/inspector/canvas/sessionStore.js +33 -43
- package/dist/inspector/canvas/staleChangeDetector.d.ts +1 -1
- package/dist/inspector/canvas/staleChangeDetector.js +11 -26
- package/dist/inspector/canvas/toolbarScale.d.ts +1 -4
- package/dist/inspector/canvas/toolbarScale.js +1 -4
- package/dist/inspector/canvas/useCanvasLayoutAnimation.d.ts +0 -1
- package/dist/inspector/canvas/useCanvasLayoutAnimation.js +0 -1
- package/dist/inspector/canvas/viewStore.js +1 -1
- package/dist/inspector/canvas/wheelPan.d.ts +1 -1
- package/dist/inspector/canvas/wheelPan.js +1 -1
- package/dist/inspector/canvas/workspaceLease.d.ts +1 -5
- package/dist/inspector/canvas/workspaceLease.js +1 -7
- package/dist/inspector/changes/codecs.d.ts +1 -0
- package/dist/inspector/changes/codecs.js +21 -5
- package/dist/inspector/changes/draftPreview.d.ts +7 -0
- package/dist/inspector/changes/draftPreview.js +118 -0
- package/dist/inspector/changes/editModel.d.ts +11 -13
- package/dist/inspector/changes/editModel.js +9 -4
- package/dist/inspector/changes/managedStyleProjection.js +6 -15
- package/dist/inspector/changes/model.d.ts +0 -5
- package/dist/inspector/changes/model.js +1 -8
- package/dist/inspector/changes/previewDiagnostics.d.ts +2 -12
- package/dist/inspector/changes/previewDiagnostics.js +5 -21
- package/dist/inspector/changes/previewVerification.d.ts +25 -0
- package/dist/inspector/changes/previewVerification.js +34 -0
- package/dist/inspector/changes/structuralTypes.d.ts +2 -4
- package/dist/inspector/changes/types.d.ts +11 -8
- package/dist/inspector/clientManifest.d.ts +17 -6
- package/dist/inspector/clientManifest.js +16 -3
- package/dist/inspector/comments/CommentsOverlay.js +66 -23
- package/dist/inspector/comments/element.d.ts +1 -2
- package/dist/inspector/comments/element.js +1 -2
- package/dist/inspector/comments/store.d.ts +1 -1
- package/dist/inspector/comments/store.js +4 -3
- package/dist/inspector/comments/verification.d.ts +8 -2
- package/dist/inspector/comments/verification.js +19 -11
- package/dist/inspector/componentSemantics/ComponentPropsSection.d.ts +8 -0
- package/dist/inspector/componentSemantics/ComponentPropsSection.js +12 -8
- package/dist/inspector/componentSemantics/adapterRegistry.d.ts +2 -9
- package/dist/inspector/componentSemantics/adapterRegistry.js +2 -9
- package/dist/inspector/componentSemantics/changeAction.js +1 -1
- package/dist/inspector/componentSemantics/changeModel.js +2 -4
- package/dist/inspector/componentSemantics/react/callsites.d.ts +28 -0
- package/dist/inspector/componentSemantics/react/callsites.js +261 -0
- package/dist/inspector/componentSemantics/react/devtoolsHook.d.ts +23 -0
- package/dist/inspector/componentSemantics/react/devtoolsHook.js +71 -0
- package/dist/inspector/componentSemantics/react/fibers.d.ts +17 -0
- package/dist/inspector/componentSemantics/react/fibers.js +30 -0
- package/dist/inspector/componentSemantics/{reactRuntime.d.ts → react/runtime.d.ts} +3 -2
- package/dist/inspector/componentSemantics/{reactRuntime.js → react/runtime.js} +70 -53
- package/dist/inspector/componentSemantics/runtimeBridge.d.ts +2 -18
- package/dist/inspector/componentSemantics/runtimeBridge.js +5 -19
- package/dist/inspector/componentSemantics/textBinding.d.ts +2 -11
- package/dist/inspector/componentSemantics/textBinding.js +20 -87
- package/dist/inspector/componentSemantics/types.d.ts +8 -27
- package/dist/inspector/componentSemantics/types.js +0 -1
- package/dist/inspector/conformance/borderCases.d.ts +0 -5
- package/dist/inspector/conformance/borderCases.js +0 -5
- package/dist/inspector/conformance/colorCases.d.ts +0 -6
- package/dist/inspector/conformance/colorCases.js +0 -6
- package/dist/inspector/conformance/fixture.d.ts +1 -5
- package/dist/inspector/conformance/fixture.js +1 -5
- package/dist/inspector/conformance/spacingCases.d.ts +0 -4
- package/dist/inspector/conformance/spacingCases.js +0 -4
- package/dist/inspector/conformance/typographyCases.d.ts +0 -5
- package/dist/inspector/conformance/typographyCases.js +0 -5
- package/dist/inspector/drafts/draftStore.d.ts +95 -0
- package/dist/inspector/drafts/draftStore.js +461 -0
- package/dist/inspector/drafts/model.d.ts +14 -14
- package/dist/inspector/drafts/model.js +4 -2
- package/dist/inspector/drafts/store.d.ts +47 -16
- package/dist/inspector/drafts/store.js +137 -170
- package/dist/inspector/editScope.d.ts +0 -1
- package/dist/inspector/editScope.js +0 -1
- package/dist/inspector/index.d.ts +2 -4
- package/dist/inspector/index.js +2 -264
- package/dist/inspector/inline-text/inlineTextDiagnostics.d.ts +0 -2
- package/dist/inspector/inline-text/inlineTextDiagnostics.js +0 -2
- package/dist/inspector/inline-text/inlineTextEditor.d.ts +3 -9
- package/dist/inspector/inline-text/inlineTextEditor.js +27 -81
- package/dist/inspector/inline-text/inlineTextLifecycle.js +1 -6
- package/dist/inspector/inline-text/textEditChange.d.ts +1 -2
- package/dist/inspector/inspection/bridge.d.ts +3 -7
- package/dist/inspector/inspection/bridge.js +6 -13
- package/dist/inspector/inspection/browserCssInspection.d.ts +12 -11
- package/dist/inspector/inspection/browserCssInspection.js +32 -14
- package/dist/inspector/inspection/browserCssInspectionRegistry.d.ts +0 -7
- package/dist/inspector/inspection/browserCssInspectionRegistry.js +1 -16
- package/dist/inspector/inspection/inspectionSnapshot.d.ts +6 -0
- package/dist/inspector/inspection/inspectionSnapshot.js +10 -0
- package/dist/inspector/inspection/performanceDiagnostics.d.ts +18 -0
- package/dist/inspector/inspection/performanceDiagnostics.js +31 -0
- package/dist/inspector/inspection/selectionProperty.d.ts +1 -6
- package/dist/inspector/inspection/selectionProperty.js +1 -5
- package/dist/inspector/inspection/useBrowserCssInspection.d.ts +1 -5
- package/dist/inspector/inspection/useBrowserCssInspection.js +22 -59
- package/dist/inspector/iterations/capture.d.ts +2 -2
- package/dist/inspector/iterations/capture.js +4 -9
- package/dist/inspector/iterations/client.d.ts +2 -2
- package/dist/inspector/iterations/client.js +0 -1
- package/dist/inspector/iterations/coordinator.d.ts +4 -4
- package/dist/inspector/iterations/coordinator.js +5 -4
- package/dist/inspector/iterations/prompt.d.ts +0 -1
- package/dist/inspector/iterations/prompt.js +9 -9
- package/dist/inspector/overlay/DomNavigator.d.ts +3 -1
- package/dist/inspector/overlay/DomNavigator.js +39 -15
- package/dist/inspector/overlay/DropGuideOverlay.d.ts +0 -1
- package/dist/inspector/overlay/DropGuideOverlay.js +0 -1
- package/dist/inspector/overlay/MeasurementGuideOverlay.d.ts +1 -8
- package/dist/inspector/overlay/MeasurementGuideOverlay.js +1 -5
- package/dist/inspector/overlay/clickPolicy.d.ts +3 -14
- package/dist/inspector/overlay/clickPolicy.js +3 -14
- package/dist/inspector/overlay/dropGuide.d.ts +0 -3
- package/dist/inspector/overlay/dropGuide.js +0 -3
- package/dist/inspector/overlay/frameThrottle.d.ts +0 -1
- package/dist/inspector/overlay/frameThrottle.js +0 -1
- package/dist/inspector/overlay/interactionStyles.d.ts +1 -1
- package/dist/inspector/overlay/interactionStyles.js +19 -8
- package/dist/inspector/overlay/measurementGeometry.js +4 -12
- package/dist/inspector/overlay/selectedGeometry.d.ts +1 -6
- package/dist/inspector/overlay/selectedGeometry.js +1 -8
- package/dist/inspector/overlay/spacingGestures.d.ts +14 -21
- package/dist/inspector/overlay/spacingGestures.js +151 -31
- package/dist/inspector/overlay/structuralGestures.d.ts +2 -9
- package/dist/inspector/overlay/structuralGestures.js +1 -4
- package/dist/inspector/pageInspector.d.ts +33 -0
- package/dist/inspector/pageInspector.js +335 -0
- package/dist/inspector/projection/cssEscapes.d.ts +0 -1
- package/dist/inspector/projection/cssEscapes.js +2 -4
- package/dist/inspector/projection/draftProjection.d.ts +6 -10
- package/dist/inspector/projection/draftProjection.js +8 -7
- package/dist/inspector/projection/managedStylesheet.d.ts +1 -7
- package/dist/inspector/projection/managedStylesheet.js +28 -26
- package/dist/inspector/projection/renderedInstance.d.ts +5 -28
- package/dist/inspector/projection/renderedInstance.js +13 -33
- package/dist/inspector/projection/structuralProjection.d.ts +7 -48
- package/dist/inspector/projection/structuralProjection.js +31 -96
- package/dist/inspector/projection/textProjection.d.ts +7 -13
- package/dist/inspector/projection/textProjection.js +35 -80
- package/dist/inspector/prompt/PromptSettingsDialog.d.ts +0 -1
- package/dist/inspector/prompt/PromptSettingsDialog.js +0 -1
- package/dist/inspector/prompt/clipboardHandoff.d.ts +1 -0
- package/dist/inspector/prompt/clipboardHandoff.js +34 -16
- package/dist/inspector/prompt/generatePrompt.d.ts +2 -2
- package/dist/inspector/prompt/generatePrompt.js +247 -166
- package/dist/inspector/prompt/promptDocument.d.ts +3 -0
- package/dist/inspector/prompt/promptDocument.js +8 -0
- package/dist/inspector/prompt/promptSettings.d.ts +0 -3
- package/dist/inspector/prompt/promptSettings.js +7 -8
- package/dist/inspector/runtime/devFlag.d.ts +2 -25
- package/dist/inspector/runtime/devFlag.js +4 -31
- package/dist/inspector/runtime/documentStylesheetOrder.d.ts +0 -2
- package/dist/inspector/runtime/editorShell.d.ts +0 -1
- package/dist/inspector/runtime/editorShell.js +0 -1
- package/dist/inspector/runtime/inspectorStorage.d.ts +11 -0
- package/dist/inspector/runtime/inspectorStorage.js +37 -0
- package/dist/inspector/runtime/ownedStylesheets.d.ts +14 -0
- package/dist/inspector/runtime/ownedStylesheets.js +66 -0
- package/dist/inspector/runtime/runtimeConfig.d.ts +14 -84
- package/dist/inspector/runtime/runtimeConfig.js +18 -50
- package/dist/inspector/runtime/runtimeIdentityClaims.d.ts +19 -0
- package/dist/inspector/runtime/runtimeIdentityClaims.js +178 -0
- package/dist/inspector/runtime/staticHtmlRuntimeIdentity.d.ts +6 -23
- package/dist/inspector/runtime/staticHtmlRuntimeIdentity.js +103 -52
- package/dist/inspector/runtime/useRuntimeConfig.d.ts +1 -8
- package/dist/inspector/runtime/useRuntimeConfig.js +1 -8
- package/dist/inspector/selection/editScope.d.ts +2 -7
- package/dist/inspector/selection/editScope.js +15 -14
- package/dist/inspector/selection/editTarget.d.ts +1 -5
- package/dist/inspector/selection/hierarchy.d.ts +11 -11
- package/dist/inspector/selection/hierarchy.js +42 -24
- package/dist/inspector/selection/selectionStore.d.ts +0 -3
- package/dist/inspector/selection/selectionStore.js +5 -16
- package/dist/inspector/selection/sourceSite.d.ts +1 -5
- package/dist/inspector/selection/sourceSite.js +2 -8
- package/dist/inspector/selection/styleSelection.d.ts +1 -5
- package/dist/inspector/selection/styleSelection.js +1 -5
- package/dist/inspector/session/lifecycle.d.ts +1 -9
- package/dist/inspector/session/lifecycle.js +0 -1
- package/dist/inspector/session/sessionContext.d.ts +0 -4
- package/dist/inspector/session/sessionContext.js +0 -4
- package/dist/inspector/session/sessionFactory.d.ts +0 -9
- package/dist/inspector/session/sessionFactory.js +0 -6
- package/dist/inspector/settings/SettingsDialog.d.ts +0 -1
- package/dist/inspector/settings/SettingsDialog.js +5 -3
- package/dist/inspector/shell/AgentStatusButton.d.ts +3 -2
- package/dist/inspector/shell/AgentStatusButton.js +7 -7
- package/dist/inspector/shell/AppShell.js +6 -2
- package/dist/inspector/shell/ChangesLog.js +29 -12
- package/dist/inspector/shell/CopyPromptButton.d.ts +2 -1
- package/dist/inspector/shell/CopyPromptButton.js +62 -55
- package/dist/inspector/shell/EmptyState.js +3 -3
- package/dist/inspector/shell/InspectorEditors.d.ts +16 -0
- package/dist/inspector/shell/InspectorEditors.js +14 -0
- package/dist/inspector/shell/InspectorPanel.d.ts +12 -0
- package/dist/inspector/shell/InspectorPanel.js +8 -0
- package/dist/inspector/shell/InspectorSelection.d.ts +24 -0
- package/dist/inspector/shell/InspectorSelection.js +20 -0
- package/dist/inspector/shell/InspectorShell.d.ts +0 -3
- package/dist/inspector/shell/InspectorShell.js +44 -58
- package/dist/inspector/shell/NudgeLogoIcon.d.ts +5 -0
- package/dist/inspector/shell/NudgeLogoIcon.js +5 -0
- package/dist/inspector/shell/PeekOriginalButton.d.ts +0 -5
- package/dist/inspector/shell/PeekOriginalButton.js +3 -8
- package/dist/inspector/shell/PeekOriginalIcon.d.ts +0 -5
- package/dist/inspector/shell/PeekOriginalIcon.js +0 -5
- package/dist/inspector/shell/PromptActionButton.d.ts +21 -0
- package/dist/inspector/shell/PromptActionButton.js +14 -0
- package/dist/inspector/shell/elementName.d.ts +5 -0
- package/dist/inspector/shell/elementName.js +29 -0
- package/dist/inspector/shell/interactionStatePreview.d.ts +6 -0
- package/dist/inspector/shell/interactionStatePreview.js +107 -0
- package/dist/inspector/shell/originalPreview.d.ts +1 -5
- package/dist/inspector/shell/originalPreview.js +5 -37
- package/dist/inspector/shell/stateValue.d.ts +1 -2
- package/dist/inspector/shell/stateValue.js +4 -8
- package/dist/inspector/shell/styleState.d.ts +1 -2
- package/dist/inspector/shell/styleState.js +1 -2
- package/dist/inspector/sketch/SketchEditor.js +5 -5
- package/dist/inspector/sketch/SketchFrameOverlay.d.ts +2 -1
- package/dist/inspector/sketch/SketchFrameOverlay.js +13 -16
- package/dist/inspector/sketch/SketchOverlay.d.ts +3 -5
- package/dist/inspector/sketch/SketchOverlay.js +138 -263
- package/dist/inspector/sketch/SketchPromptPanel.d.ts +1 -2
- package/dist/inspector/sketch/SketchPromptPanel.js +8 -2
- package/dist/inspector/sketch/SketchThumbnail.d.ts +5 -0
- package/dist/inspector/sketch/SketchThumbnail.js +18 -0
- package/dist/inspector/sketch/SketchWorkspace.d.ts +1 -2
- package/dist/inspector/sketch/SketchWorkspace.js +70 -37
- package/dist/inspector/sketch/capture.d.ts +12 -3
- package/dist/inspector/sketch/capture.js +31 -14
- package/dist/inspector/sketch/copySketch.d.ts +4 -0
- package/dist/inspector/sketch/copySketch.js +43 -0
- package/dist/inspector/sketch/drawingTools.d.ts +15 -0
- package/dist/inspector/sketch/drawingTools.js +46 -0
- package/dist/inspector/sketch/frameHeading.d.ts +3 -0
- package/dist/inspector/sketch/frameHeading.js +23 -0
- package/dist/inspector/sketch/freehand.d.ts +0 -1
- package/dist/inspector/sketch/freehand.js +3 -4
- package/dist/inspector/sketch/geometry.d.ts +2 -1
- package/dist/inspector/sketch/geometry.js +15 -1
- package/dist/inspector/sketch/handoff.js +0 -1
- package/dist/inspector/sketch/history.d.ts +26 -0
- package/dist/inspector/sketch/history.js +55 -0
- package/dist/inspector/sketch/interaction.d.ts +3 -5
- package/dist/inspector/sketch/interaction.js +8 -11
- package/dist/inspector/sketch/model.d.ts +33 -6
- package/dist/inspector/sketch/model.js +101 -63
- package/dist/inspector/sketch/persistence.d.ts +14 -1
- package/dist/inspector/sketch/persistence.js +64 -8
- package/dist/inspector/sketch/raster.d.ts +3 -2
- package/dist/inspector/sketch/raster.js +40 -20
- package/dist/inspector/sketch/store.d.ts +1 -1
- package/dist/inspector/sketch/store.js +3 -4
- package/dist/inspector/sketch/videoFrames.d.ts +6 -0
- package/dist/inspector/sketch/videoFrames.js +80 -0
- package/dist/inspector/spacing/projection.d.ts +0 -8
- package/dist/inspector/spacing/projection.js +38 -20
- package/dist/inspector/styleEditors/BackgroundEditor.js +3 -2
- package/dist/inspector/styleEditors/BorderEditor.js +30 -135
- package/dist/inspector/styleEditors/BorderRadiusEditor.js +8 -3
- package/dist/inspector/styleEditors/ChildPlacement.d.ts +12 -0
- package/dist/inspector/styleEditors/ChildPlacement.js +9 -0
- package/dist/inspector/styleEditors/FlexControls.d.ts +35 -0
- package/dist/inspector/styleEditors/FlexControls.js +158 -0
- package/dist/inspector/styleEditors/GapField.d.ts +5 -2
- package/dist/inspector/styleEditors/GapField.js +3 -4
- package/dist/inspector/styleEditors/GridChildSection.d.ts +0 -5
- package/dist/inspector/styleEditors/GridChildSection.js +0 -5
- package/dist/inspector/styleEditors/GridPicker.d.ts +1 -1
- package/dist/inspector/styleEditors/GridPicker.js +2 -4
- package/dist/inspector/styleEditors/GridSection.d.ts +10 -8
- package/dist/inspector/styleEditors/GridSection.js +22 -9
- package/dist/inspector/styleEditors/GridValueField.d.ts +1 -5
- package/dist/inspector/styleEditors/GridValueField.js +2 -8
- package/dist/inspector/styleEditors/ImageBackgroundEditor.d.ts +0 -1
- package/dist/inspector/styleEditors/ImageBackgroundEditor.js +1 -2
- package/dist/inspector/styleEditors/LayoutBlockedIndicator.d.ts +0 -1
- package/dist/inspector/styleEditors/LayoutBlockedIndicator.js +0 -1
- package/dist/inspector/styleEditors/LayoutComboField.js +0 -5
- package/dist/inspector/styleEditors/LayoutModeRow.d.ts +14 -0
- package/dist/inspector/styleEditors/LayoutModeRow.js +60 -0
- package/dist/inspector/styleEditors/LayoutSection.d.ts +2 -2
- package/dist/inspector/styleEditors/LayoutSection.js +30 -356
- package/dist/inspector/styleEditors/OpacityEditor.js +7 -5
- package/dist/inspector/styleEditors/PositionControls.d.ts +18 -0
- package/dist/inspector/styleEditors/PositionControls.js +16 -0
- package/dist/inspector/styleEditors/SizeSection.d.ts +18 -0
- package/dist/inspector/styleEditors/SizeSection.js +71 -0
- package/dist/inspector/styleEditors/{SpacingBox.d.ts → SpacingField.d.ts} +3 -10
- package/dist/inspector/styleEditors/{SpacingBox.js → SpacingField.js} +15 -29
- package/dist/inspector/styleEditors/Typography.js +2 -4
- package/dist/inspector/styleEditors/borderModel.d.ts +36 -0
- package/dist/inspector/styleEditors/borderModel.js +105 -0
- package/dist/inspector/styleEditors/completeCssValue.d.ts +1 -5
- package/dist/inspector/styleEditors/completeCssValue.js +3 -13
- package/dist/inspector/styleEditors/fieldValue.d.ts +20 -0
- package/dist/inspector/styleEditors/fieldValue.js +26 -0
- package/dist/inspector/styleEditors/gradientValue.d.ts +1 -1
- package/dist/inspector/styleEditors/gradientValue.js +3 -2
- package/dist/inspector/styleEditors/gridChildModel.d.ts +7 -47
- package/dist/inspector/styleEditors/gridChildModel.js +6 -37
- package/dist/inspector/styleEditors/hiddenSizeOverrides.d.ts +5 -0
- package/dist/inspector/styleEditors/hiddenSizeOverrides.js +42 -0
- package/dist/inspector/styleEditors/inlineAuthored.d.ts +1 -8
- package/dist/inspector/styleEditors/inlineAuthored.js +3 -17
- package/dist/inspector/styleEditors/layoutMode.d.ts +15 -0
- package/dist/inspector/styleEditors/layoutMode.js +33 -0
- package/dist/inspector/styleEditors/layoutPreviewState.d.ts +0 -1
- package/dist/inspector/styleEditors/layoutPreviewState.js +0 -1
- package/dist/inspector/styleEditors/layoutValue.d.ts +2 -8
- package/dist/inspector/styleEditors/layoutValue.js +6 -15
- package/dist/inspector/styleEditors/nudgeValue.d.ts +1 -13
- package/dist/inspector/styleEditors/nudgeValue.js +1 -13
- package/dist/inspector/styleEditors/rowLookup.d.ts +1 -5
- package/dist/inspector/styleEditors/rowLookup.js +1 -5
- package/dist/inspector/styleEditors/stringRecord.d.ts +1 -2
- package/dist/inspector/styleEditors/stylePresence.d.ts +0 -2
- package/dist/inspector/styleEditors/stylePresence.js +1 -4
- package/dist/inspector/styleEditors/textRelevance.d.ts +1 -1
- package/dist/inspector/styleEditors/textRelevance.js +1 -1
- package/dist/inspector/styleEditors/useFieldVisibility.js +1 -2
- package/dist/inspector/styleEditors/useLayoutContext.d.ts +13 -0
- package/dist/inspector/styleEditors/useLayoutContext.js +53 -0
- package/dist/inspector/styleEditors/valuePolicy.d.ts +1 -5
- package/dist/inspector/styleEditors/valuePolicy.js +0 -1
- package/dist/inspector/testing.d.ts +1 -4
- package/dist/inspector/testing.js +1 -4
- package/dist/inspector/tokens/TokenChip.d.ts +1 -4
- package/dist/inspector/tokens/TokenChip.js +1 -4
- package/dist/inspector/tokens/TokenField.d.ts +4 -3
- package/dist/inspector/tokens/TokenField.js +53 -32
- package/dist/inspector/tokens/TokensPanel.js +2 -1
- package/dist/inspector/tokens/catalog.d.ts +2 -10
- package/dist/inspector/tokens/catalog.js +5 -12
- package/dist/inspector/tokens/dragPointerLock.d.ts +0 -1
- package/dist/inspector/tokens/dragPointerLock.js +2 -3
- package/dist/inspector/tokens/editActions.d.ts +4 -4
- package/dist/inspector/tokens/editActions.js +11 -7
- package/dist/inspector/tokens/resolution/cascade.d.ts +1 -5
- package/dist/inspector/tokens/resolution/cascade.js +1 -5
- package/dist/inspector/tokens/resolution/containerQueryEvaluator.d.ts +11 -0
- package/dist/inspector/tokens/resolution/containerQueryEvaluator.js +82 -0
- package/dist/inspector/tokens/resolution/cssomCollector.d.ts +4 -19
- package/dist/inspector/tokens/resolution/cssomCollector.js +186 -122
- package/dist/inspector/tokens/resolution/nestedSelectors.d.ts +2 -0
- package/dist/inspector/tokens/resolution/nestedSelectors.js +63 -0
- package/dist/inspector/tokens/resolution/ruleMatching.d.ts +4 -14
- package/dist/inspector/tokens/resolution/ruleMatching.js +136 -63
- package/dist/inspector/tokens/resolution/selectorSemantics.d.ts +3 -14
- package/dist/inspector/tokens/resolution/selectorSemantics.js +12 -27
- package/dist/inspector/tokens/resolution.d.ts +11 -27
- package/dist/inspector/tokens/resolution.js +105 -181
- package/dist/inspector/tokens/tokenAvailability.d.ts +2 -14
- package/dist/inspector/tokens/tokenAvailability.js +6 -38
- package/dist/inspector/tokens/tokenEdits.d.ts +1 -1
- package/dist/inspector/tokens/tokenEdits.js +1 -1
- package/dist/inspector/tokens/valueSemanticsAdapter.d.ts +0 -1
- package/dist/inspector/tokens/valueSemanticsAdapter.js +18 -2
- package/dist/inspector/ui/AtRuleContext.d.ts +5 -5
- package/dist/inspector/ui/AtRuleContext.js +8 -6
- package/dist/inspector/ui/ControlSurface.d.ts +0 -4
- package/dist/inspector/ui/Disclosure.d.ts +0 -5
- package/dist/inspector/ui/Disclosure.js +0 -4
- package/dist/inspector/ui/InlineStyleWarning.d.ts +0 -1
- package/dist/inspector/ui/InlineStyleWarning.js +2 -2
- package/dist/inspector/ui/InspectorPopover.d.ts +1 -5
- package/dist/inspector/ui/InspectorPopover.js +1 -5
- package/dist/inspector/ui/InspectorStyle.d.ts +8 -0
- package/dist/inspector/ui/InspectorStyle.js +26 -0
- package/dist/inspector/ui/PopoverListbox.d.ts +2 -1
- package/dist/inspector/ui/PopoverListbox.js +3 -3
- package/dist/inspector/ui/SegmentedControl.d.ts +4 -4
- package/dist/inspector/ui/SegmentedControl.js +6 -4
- package/dist/inspector/ui/SideValuesField.d.ts +1 -6
- package/dist/inspector/ui/SideValuesField.js +2 -8
- package/dist/inspector/ui/Toast.d.ts +10 -0
- package/dist/inspector/ui/Toast.js +26 -0
- package/dist/inspector/ui/assets/canvasIllustration.d.ts +2 -0
- package/dist/inspector/ui/assets/canvasIllustration.js +21 -0
- package/dist/inspector/ui/assets/gridIllustration.d.ts +2 -0
- package/dist/inspector/ui/assets/{grid.svg → gridIllustration.js} +3 -2
- package/dist/inspector/ui/atRuleSegments.d.ts +13 -0
- package/dist/inspector/ui/atRuleSegments.js +34 -0
- package/dist/inspector/ui/classNames.d.ts +0 -1
- package/dist/inspector/ui/classNames.js +0 -1
- package/dist/inspector/ui/customCursors.d.ts +11 -0
- package/dist/inspector/ui/customCursors.js +29 -7
- package/dist/inspector/ui/styles.js +25 -25
- package/dist/inspector/workspace/commands.js +1 -2
- package/dist/inspector/workspace/controller.js +20 -2
- package/dist/inspector/workspace/handoff.d.ts +1 -5
- package/dist/inspector/workspace/handoff.js +4 -7
- package/dist/inspector/workspace/sentItems.d.ts +3 -6
- package/dist/inspector/workspace/sentItems.js +6 -24
- package/dist/inspector/workspace/timeline.d.ts +28 -11
- package/dist/inspector/workspace/timeline.js +117 -96
- package/dist/internal/agent-protocol.d.ts +53 -38
- package/dist/internal/agent-protocol.js +151 -42
- package/dist/nudge-ui.mjs +155 -92
- package/dist/project/artifacts.js +24 -21
- package/dist/project/files.d.ts +0 -1
- package/dist/project/files.js +2 -9
- package/dist/project/identity.d.ts +1 -5
- package/dist/project/identity.js +1 -5
- package/dist/project/mcpPackage.d.ts +3 -0
- package/dist/project/mcpPackage.js +55 -0
- package/dist/project/pathPolicy.d.ts +1 -6
- package/dist/project/pathPolicy.js +1 -6
- package/dist/project/tokens.d.ts +2 -12
- package/dist/project/tokens.js +4 -15
- package/dist/transport/editor.d.ts +1 -12
- package/dist/transport/editor.js +2 -13
- package/dist/transport/index.d.ts +0 -5
- package/dist/transport/index.js +0 -5
- package/dist/transport/routes.d.ts +0 -5
- package/dist/transport/routes.js +0 -5
- package/package.json +16 -5
- package/dist/inspector/canvas/measurementProjection.d.ts +0 -8
- package/dist/inspector/canvas/measurementProjection.js +0 -16
- package/dist/inspector/changes/changesLog.d.ts +0 -49
- package/dist/inspector/changes/changesLog.js +0 -255
- package/dist/inspector/changes/draftChanges.d.ts +0 -58
- package/dist/inspector/changes/draftChanges.js +0 -304
- package/dist/inspector/conformance/projection.d.ts +0 -2
- package/dist/inspector/conformance/projection.js +0 -3
- package/dist/inspector/inline-text/textChangeBoundary.d.ts +0 -6
- package/dist/inspector/inline-text/textChangeBoundary.js +0 -1
- package/dist/inspector/overlay/InspectorOverlay.d.ts +0 -5
- package/dist/inspector/overlay/InspectorOverlay.js +0 -332
- package/dist/inspector/overlay/elementSelector.d.ts +0 -1
- package/dist/inspector/overlay/elementSelector.js +0 -111
- package/dist/inspector/sketch/SketchChanges.d.ts +0 -2
- package/dist/inspector/sketch/SketchChanges.js +0 -72
- package/dist/inspector/sketch/SketchEntryButton.d.ts +0 -4
- package/dist/inspector/sketch/SketchEntryButton.js +0 -11
- package/dist/inspector/sketch/SketchLayersPanel.d.ts +0 -2
- package/dist/inspector/sketch/SketchLayersPanel.js +0 -71
- package/dist/inspector/styleEditors/InsetSection.d.ts +0 -15
- package/dist/inspector/styleEditors/InsetSection.js +0 -15
- package/dist/inspector/styleEditors/PositionInsets.d.ts +0 -15
- package/dist/inspector/styleEditors/PositionInsets.js +0 -12
- package/dist/inspector/tokens/TokenDropdown.d.ts +0 -13
- package/dist/inspector/tokens/TokenDropdown.js +0 -59
|
@@ -1,12 +1,10 @@
|
|
|
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
|
-
export type SketchEntryTool = "pen" | "annotate";
|
|
4
3
|
export interface SketchInteractionSnapshot {
|
|
5
4
|
readonly captureState: SketchCaptureState;
|
|
6
5
|
readonly captured: CapturedSketch | null;
|
|
7
6
|
readonly editingId: string | null;
|
|
8
7
|
readonly error: string | null;
|
|
9
|
-
readonly initialTool: SketchEntryTool;
|
|
10
8
|
readonly draftId: string | null;
|
|
11
9
|
}
|
|
12
10
|
export declare function getSketchInteractionSnapshot(): SketchInteractionSnapshot;
|
|
@@ -14,8 +12,8 @@ export declare function subscribeSketchInteraction(listener: () => void): () =>
|
|
|
14
12
|
export declare function useSketchInteraction(): SketchInteractionSnapshot;
|
|
15
13
|
export declare function isSketchInteractionActive(): boolean;
|
|
16
14
|
export declare function useSketchInteractionActive(): boolean;
|
|
17
|
-
export declare function beginSketchCapture(
|
|
18
|
-
export declare function completeSketchCapture(hostElement: HTMLElement): Promise<CapturedSketch>;
|
|
15
|
+
export declare function beginSketchCapture(): void;
|
|
16
|
+
export declare function completeSketchCapture(hostElement: HTMLElement, capture?: typeof captureViewport): Promise<CapturedSketch>;
|
|
19
17
|
export declare function cancelSketchInteraction(): void;
|
|
20
18
|
export declare function openSketchEditor(sketchId: string): void;
|
|
21
19
|
export declare function closeSketchEditor(): void;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { getActiveDraftChanges } from "../
|
|
1
|
+
import { getActiveDraftChanges } from "../drafts/store.js";
|
|
2
2
|
import { useSyncExternalStore } from "react";
|
|
3
3
|
import { captureViewport, } from "./capture.js";
|
|
4
4
|
const EMPTY_SNAPSHOT = {
|
|
@@ -6,7 +6,6 @@ const EMPTY_SNAPSHOT = {
|
|
|
6
6
|
captured: null,
|
|
7
7
|
editingId: null,
|
|
8
8
|
error: null,
|
|
9
|
-
initialTool: "pen",
|
|
10
9
|
draftId: null,
|
|
11
10
|
};
|
|
12
11
|
let snapshot = EMPTY_SNAPSHOT;
|
|
@@ -40,25 +39,24 @@ export function useSketchInteractionActive() {
|
|
|
40
39
|
const current = useSketchInteraction();
|
|
41
40
|
return current.captureState !== "idle" || current.captured !== null || current.editingId !== null;
|
|
42
41
|
}
|
|
43
|
-
export function beginSketchCapture(
|
|
42
|
+
export function beginSketchCapture() {
|
|
44
43
|
captureController?.abort();
|
|
45
44
|
captureController = null;
|
|
46
|
-
publish({ captureState: "sketching", captured: null, editingId: null, error: null,
|
|
45
|
+
publish({ captureState: "sketching", captured: null, editingId: null, error: null, draftId: getActiveDraftChanges().draftId });
|
|
47
46
|
}
|
|
48
|
-
export function completeSketchCapture(hostElement) {
|
|
47
|
+
export function completeSketchCapture(hostElement, capture = captureViewport) {
|
|
49
48
|
captureController?.abort();
|
|
50
49
|
const controller = new AbortController();
|
|
51
50
|
captureController = controller;
|
|
52
|
-
const initialTool = snapshot.initialTool;
|
|
53
51
|
const draftId = snapshot.draftId;
|
|
54
|
-
publish({ captureState: "capturing", captured: null, editingId: null, error: null,
|
|
52
|
+
publish({ captureState: "capturing", captured: null, editingId: null, error: null, draftId });
|
|
55
53
|
const options = { hostElement, signal: controller.signal };
|
|
56
|
-
return
|
|
54
|
+
return capture(options)
|
|
57
55
|
.then((captured) => {
|
|
58
56
|
if (captureController !== controller)
|
|
59
57
|
return captured;
|
|
60
58
|
captureController = null;
|
|
61
|
-
publish({ captureState: "ready", captured, editingId: null, error: null,
|
|
59
|
+
publish({ captureState: "ready", captured, editingId: null, error: null, draftId });
|
|
62
60
|
return captured;
|
|
63
61
|
})
|
|
64
62
|
.catch((error) => {
|
|
@@ -74,7 +72,6 @@ export function completeSketchCapture(hostElement) {
|
|
|
74
72
|
captured: null,
|
|
75
73
|
editingId: null,
|
|
76
74
|
error: error instanceof Error ? error.message : "The viewport could not be captured.",
|
|
77
|
-
initialTool,
|
|
78
75
|
draftId,
|
|
79
76
|
});
|
|
80
77
|
throw error;
|
|
@@ -88,7 +85,7 @@ export function cancelSketchInteraction() {
|
|
|
88
85
|
export function openSketchEditor(sketchId) {
|
|
89
86
|
captureController?.abort();
|
|
90
87
|
captureController = null;
|
|
91
|
-
publish({ captureState: "idle", captured: null, editingId: sketchId, error: null,
|
|
88
|
+
publish({ captureState: "idle", captured: null, editingId: sketchId, error: null, draftId: null });
|
|
92
89
|
}
|
|
93
90
|
export function closeSketchEditor() {
|
|
94
91
|
if (snapshot.captureState !== "ready" && snapshot.editingId === null)
|
|
@@ -17,8 +17,39 @@ export declare const SKETCH_LIMITS: {
|
|
|
17
17
|
readonly title: 512;
|
|
18
18
|
};
|
|
19
19
|
export declare const SKETCH_STROKE_WIDTH = 6;
|
|
20
|
+
export declare const SKETCH_RECTANGLE_STROKE_WIDTH = 4;
|
|
21
|
+
export declare const SKETCH_RECTANGLE_FILL_OPACITY = 0.1;
|
|
20
22
|
export declare const SKETCH_STROKE_COLOR = "#0096ff";
|
|
23
|
+
/** Annotation markers and the notes panel; independent of the chosen pen color. */
|
|
24
|
+
export declare const SKETCH_ACCENT_COLOR = "#0096ff";
|
|
21
25
|
export declare const SKETCH_STROKE_OUTLINE = "";
|
|
26
|
+
/** Ordered clockwise around the toolbar's swatch picker. */
|
|
27
|
+
export declare const SKETCH_PEN_COLORS: readonly [{
|
|
28
|
+
readonly id: "red";
|
|
29
|
+
readonly name: "Red";
|
|
30
|
+
readonly value: "#f03e1e";
|
|
31
|
+
}, {
|
|
32
|
+
readonly id: "orange";
|
|
33
|
+
readonly name: "Orange";
|
|
34
|
+
readonly value: "#ff8a00";
|
|
35
|
+
}, {
|
|
36
|
+
readonly id: "blue";
|
|
37
|
+
readonly name: "Blue";
|
|
38
|
+
readonly value: "#0096ff";
|
|
39
|
+
}, {
|
|
40
|
+
readonly id: "black";
|
|
41
|
+
readonly name: "Black";
|
|
42
|
+
readonly value: "#242424";
|
|
43
|
+
}, {
|
|
44
|
+
readonly id: "yellow";
|
|
45
|
+
readonly name: "Yellow";
|
|
46
|
+
readonly value: "#ffc800";
|
|
47
|
+
}, {
|
|
48
|
+
readonly id: "green";
|
|
49
|
+
readonly name: "Green";
|
|
50
|
+
readonly value: "#1fc85a";
|
|
51
|
+
}];
|
|
52
|
+
export type SketchPenColor = (typeof SKETCH_PEN_COLORS)[number];
|
|
22
53
|
export declare const SKETCH_ANNOTATION_RADIUS = 16;
|
|
23
54
|
declare const LEGACY_SKETCH_STROKE_COLOR = "#ef4444";
|
|
24
55
|
declare const LEGACY_SKETCH_STROKE_OUTLINE = "#111827";
|
|
@@ -29,7 +60,7 @@ export interface SketchPoint {
|
|
|
29
60
|
readonly x: number;
|
|
30
61
|
readonly y: number;
|
|
31
62
|
}
|
|
32
|
-
type SketchStrokeColor =
|
|
63
|
+
export type SketchStrokeColor = SketchPenColor["value"] | typeof LEGACY_SKETCH_STROKE_COLOR;
|
|
33
64
|
type SketchStrokeOutline = typeof SKETCH_STROKE_OUTLINE | typeof LEGACY_SKETCH_STROKE_OUTLINE;
|
|
34
65
|
export type SketchStrokeKind = "freehand" | "rectangle";
|
|
35
66
|
export interface SketchStroke {
|
|
@@ -63,11 +94,7 @@ export interface SketchDocument {
|
|
|
63
94
|
readonly strokes: readonly SketchStroke[];
|
|
64
95
|
/** Optional for compatibility with sketches saved before annotations existed. */
|
|
65
96
|
readonly annotations?: readonly SketchAnnotation[];
|
|
66
|
-
/**
|
|
67
|
-
* Size of `annotatedImage`, which can be taller than the capture when a
|
|
68
|
-
* notes panel is appended. `capture.imageWidth`/`imageHeight` size the
|
|
69
|
-
* original screenshot and the stroke coordinate space.
|
|
70
|
-
*/
|
|
97
|
+
/** Size of `annotatedImage` (grows with a notes panel); `capture.imageWidth`/`imageHeight` size the stroke coordinate space. */
|
|
71
98
|
readonly imageWidth: number;
|
|
72
99
|
readonly imageHeight: number;
|
|
73
100
|
readonly originalByteSize: number;
|
|
@@ -16,28 +16,54 @@ export const SKETCH_LIMITS = {
|
|
|
16
16
|
title: 512,
|
|
17
17
|
};
|
|
18
18
|
export const SKETCH_STROKE_WIDTH = 6;
|
|
19
|
+
export const SKETCH_RECTANGLE_STROKE_WIDTH = 4;
|
|
20
|
+
export const SKETCH_RECTANGLE_FILL_OPACITY = 0.1;
|
|
19
21
|
export const SKETCH_STROKE_COLOR = "#0096ff";
|
|
22
|
+
/** Annotation markers and the notes panel; independent of the chosen pen color. */
|
|
23
|
+
export const SKETCH_ACCENT_COLOR = "#0096ff";
|
|
20
24
|
export const SKETCH_STROKE_OUTLINE = "";
|
|
25
|
+
/** Ordered clockwise around the toolbar's swatch picker. */
|
|
26
|
+
export const SKETCH_PEN_COLORS = [
|
|
27
|
+
{ id: "red", name: "Red", value: "#f03e1e" },
|
|
28
|
+
{ id: "orange", name: "Orange", value: "#ff8a00" },
|
|
29
|
+
{ id: "blue", name: "Blue", value: SKETCH_STROKE_COLOR },
|
|
30
|
+
{ id: "black", name: "Black", value: "#242424" },
|
|
31
|
+
{ id: "yellow", name: "Yellow", value: "#ffc800" },
|
|
32
|
+
{ id: "green", name: "Green", value: "#1fc85a" },
|
|
33
|
+
];
|
|
21
34
|
export const SKETCH_ANNOTATION_RADIUS = 16;
|
|
22
|
-
// Keep accepting sketches saved before the annotation color update.
|
|
23
|
-
// PNGs remain unchanged until a user edits and saves them again.
|
|
35
|
+
// Keep accepting sketches saved before the annotation color update.
|
|
24
36
|
const LEGACY_SKETCH_STROKE_COLOR = "#ef4444";
|
|
25
37
|
const LEGACY_SKETCH_STROKE_OUTLINE = "#111827";
|
|
26
38
|
export function createSketchFilename(id, revision) {
|
|
27
39
|
return `sketch-${id}-r${revision}.png`;
|
|
28
40
|
}
|
|
29
|
-
export function isFiniteNumber(
|
|
41
|
+
export function isFiniteNumber(
|
|
42
|
+
// Stored sketch fields are untrusted until this check narrows them.
|
|
43
|
+
// oxlint-disable-next-line anti-slop/no-unknown-parameters
|
|
44
|
+
value) {
|
|
30
45
|
return typeof value === "number" && Number.isFinite(value);
|
|
31
46
|
}
|
|
32
|
-
function
|
|
47
|
+
function safeIntegerInRange(
|
|
48
|
+
// oxlint-disable-next-line anti-slop/no-unknown-parameters
|
|
49
|
+
value, minimum, maximum = Number.MAX_SAFE_INTEGER) {
|
|
50
|
+
return typeof value === "number" && Number.isSafeInteger(value) && value >= minimum && value <= maximum;
|
|
51
|
+
}
|
|
52
|
+
function boundedString(
|
|
53
|
+
// oxlint-disable-next-line anti-slop/no-unknown-parameters
|
|
54
|
+
value, maximum, allowEmpty = false) {
|
|
33
55
|
return typeof value === "string" && value.length <= maximum && (allowEmpty || value.length > 0);
|
|
34
56
|
}
|
|
35
|
-
function isBlob(
|
|
57
|
+
function isBlob(
|
|
58
|
+
// oxlint-disable-next-line anti-slop/no-unknown-parameters
|
|
59
|
+
value, mimeType) {
|
|
36
60
|
return typeof Blob !== "undefined"
|
|
37
61
|
&& value instanceof Blob
|
|
38
62
|
&& (mimeType === undefined || value.type === mimeType);
|
|
39
63
|
}
|
|
40
|
-
function validHttpUrl(
|
|
64
|
+
function validHttpUrl(
|
|
65
|
+
// oxlint-disable-next-line anti-slop/no-unknown-parameters
|
|
66
|
+
value, maximum) {
|
|
41
67
|
if (!boundedString(value, maximum))
|
|
42
68
|
return false;
|
|
43
69
|
try {
|
|
@@ -48,9 +74,17 @@ function validHttpUrl(value, maximum) {
|
|
|
48
74
|
return false;
|
|
49
75
|
}
|
|
50
76
|
}
|
|
51
|
-
|
|
52
|
-
|
|
77
|
+
function isPlainObject(
|
|
78
|
+
// oxlint-disable-next-line anti-slop/no-unknown-parameters
|
|
79
|
+
value) {
|
|
80
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
81
|
+
}
|
|
82
|
+
export function isSketchCaptureMetadata(
|
|
83
|
+
// oxlint-disable-next-line anti-slop/no-unknown-parameters
|
|
84
|
+
value) {
|
|
85
|
+
if (!isPlainObject(value))
|
|
53
86
|
return false;
|
|
87
|
+
// SAFETY: the object check above makes reading optional candidate fields safe.
|
|
54
88
|
const capture = value;
|
|
55
89
|
const keys = [
|
|
56
90
|
"url",
|
|
@@ -70,14 +104,9 @@ export function isSketchCaptureMetadata(value) {
|
|
|
70
104
|
return false;
|
|
71
105
|
return validHttpUrl(capture.url, SKETCH_LIMITS.url)
|
|
72
106
|
&& boundedString(capture.title, SKETCH_LIMITS.title, true)
|
|
73
|
-
&&
|
|
74
|
-
&& capture.
|
|
75
|
-
&&
|
|
76
|
-
&& capture.viewportWidth > 0
|
|
77
|
-
&& capture.viewportWidth <= 100_000
|
|
78
|
-
&& Number.isSafeInteger(capture.viewportHeight)
|
|
79
|
-
&& capture.viewportHeight > 0
|
|
80
|
-
&& capture.viewportHeight <= 100_000
|
|
107
|
+
&& safeIntegerInRange(capture.timestamp, 1)
|
|
108
|
+
&& safeIntegerInRange(capture.viewportWidth, 1, 100_000)
|
|
109
|
+
&& safeIntegerInRange(capture.viewportHeight, 1, 100_000)
|
|
81
110
|
&& isFiniteNumber(capture.scrollX)
|
|
82
111
|
&& capture.scrollX >= 0
|
|
83
112
|
&& isFiniteNumber(capture.scrollY)
|
|
@@ -87,16 +116,15 @@ export function isSketchCaptureMetadata(value) {
|
|
|
87
116
|
&& capture.devicePixelRatio <= 100
|
|
88
117
|
&& boundedString(capture.host, 128)
|
|
89
118
|
&& boundedString(capture.framework, 128)
|
|
90
|
-
&&
|
|
91
|
-
&& capture.
|
|
92
|
-
&& capture.imageWidth <= SKETCH_LIMITS.imageEdge
|
|
93
|
-
&& Number.isSafeInteger(capture.imageHeight)
|
|
94
|
-
&& capture.imageHeight > 0
|
|
95
|
-
&& capture.imageHeight <= SKETCH_LIMITS.imageEdge;
|
|
119
|
+
&& safeIntegerInRange(capture.imageWidth, 1, SKETCH_LIMITS.imageEdge)
|
|
120
|
+
&& safeIntegerInRange(capture.imageHeight, 1, SKETCH_LIMITS.imageEdge);
|
|
96
121
|
}
|
|
97
|
-
export function isSketchPoint(
|
|
98
|
-
|
|
122
|
+
export function isSketchPoint(
|
|
123
|
+
// oxlint-disable-next-line anti-slop/no-unknown-parameters
|
|
124
|
+
value) {
|
|
125
|
+
if (!isPlainObject(value))
|
|
99
126
|
return false;
|
|
127
|
+
// SAFETY: the object check above makes reading optional candidate fields safe.
|
|
100
128
|
const point = value;
|
|
101
129
|
return Object.keys(point).every((key) => key === "x" || key === "y")
|
|
102
130
|
&& isFiniteNumber(point.x)
|
|
@@ -106,21 +134,25 @@ export function isSketchPoint(value) {
|
|
|
106
134
|
&& point.y >= 0
|
|
107
135
|
&& point.y <= SKETCH_LIMITS.imageEdge;
|
|
108
136
|
}
|
|
109
|
-
export function isSketchAnnotation(
|
|
110
|
-
|
|
137
|
+
export function isSketchAnnotation(
|
|
138
|
+
// oxlint-disable-next-line anti-slop/no-unknown-parameters
|
|
139
|
+
value) {
|
|
140
|
+
if (!isPlainObject(value))
|
|
111
141
|
return false;
|
|
142
|
+
// SAFETY: the object check above makes reading optional candidate fields safe.
|
|
112
143
|
const annotation = value;
|
|
113
144
|
return Object.keys(annotation).every((key) => ["id", "number", "point", "description"].includes(key))
|
|
114
145
|
&& boundedString(annotation.id, 256)
|
|
115
|
-
&&
|
|
116
|
-
&& annotation.number >= 1
|
|
117
|
-
&& annotation.number <= SKETCH_LIMITS.annotations
|
|
146
|
+
&& safeIntegerInRange(annotation.number, 1, SKETCH_LIMITS.annotations)
|
|
118
147
|
&& isSketchPoint(annotation.point)
|
|
119
148
|
&& boundedString(annotation.description, SKETCH_LIMITS.description);
|
|
120
149
|
}
|
|
121
|
-
export function isSketchStroke(
|
|
122
|
-
|
|
150
|
+
export function isSketchStroke(
|
|
151
|
+
// oxlint-disable-next-line anti-slop/no-unknown-parameters
|
|
152
|
+
value) {
|
|
153
|
+
if (!isPlainObject(value))
|
|
123
154
|
return false;
|
|
155
|
+
// SAFETY: the object check above makes reading optional candidate fields safe.
|
|
124
156
|
const stroke = value;
|
|
125
157
|
return Object.keys(stroke).every((key) => ["id", "kind", "width", "color", "outlineColor", "points"].includes(key))
|
|
126
158
|
&& boundedString(stroke.id, 256)
|
|
@@ -128,16 +160,34 @@ export function isSketchStroke(value) {
|
|
|
128
160
|
&& isFiniteNumber(stroke.width)
|
|
129
161
|
&& stroke.width > 0
|
|
130
162
|
&& stroke.width <= 128
|
|
131
|
-
&& (
|
|
163
|
+
&& (SKETCH_PEN_COLORS.some((color) => color.value === stroke.color)
|
|
164
|
+
|| stroke.color === LEGACY_SKETCH_STROKE_COLOR)
|
|
132
165
|
&& (stroke.outlineColor === SKETCH_STROKE_OUTLINE || stroke.outlineColor === LEGACY_SKETCH_STROKE_OUTLINE)
|
|
133
166
|
&& Array.isArray(stroke.points)
|
|
134
167
|
&& stroke.points.length > 0
|
|
135
168
|
&& stroke.points.length <= SKETCH_LIMITS.points
|
|
136
169
|
&& stroke.points.every(isSketchPoint);
|
|
137
170
|
}
|
|
138
|
-
|
|
139
|
-
|
|
171
|
+
function isSketchStrokeList(
|
|
172
|
+
// oxlint-disable-next-line anti-slop/no-unknown-parameters
|
|
173
|
+
value) {
|
|
174
|
+
return Array.isArray(value)
|
|
175
|
+
&& value.length <= SKETCH_LIMITS.strokes
|
|
176
|
+
&& value.every(isSketchStroke);
|
|
177
|
+
}
|
|
178
|
+
function isSketchAnnotationList(
|
|
179
|
+
// oxlint-disable-next-line anti-slop/no-unknown-parameters
|
|
180
|
+
value) {
|
|
181
|
+
return Array.isArray(value)
|
|
182
|
+
&& value.length <= SKETCH_LIMITS.annotations
|
|
183
|
+
&& value.every(isSketchAnnotation);
|
|
184
|
+
}
|
|
185
|
+
export function isSketchDocument(
|
|
186
|
+
// oxlint-disable-next-line anti-slop/no-unknown-parameters
|
|
187
|
+
value) {
|
|
188
|
+
if (!isPlainObject(value))
|
|
140
189
|
return false;
|
|
190
|
+
// SAFETY: the object check above makes reading optional candidate fields safe.
|
|
141
191
|
const document = value;
|
|
142
192
|
return Object.keys(document).every((key) => [
|
|
143
193
|
"schemaVersion",
|
|
@@ -161,42 +211,32 @@ export function isSketchDocument(value) {
|
|
|
161
211
|
&& document.schemaVersion === SKETCH_SCHEMA_VERSION
|
|
162
212
|
&& boundedString(document.projectId, 256)
|
|
163
213
|
&& boundedString(document.id, 256)
|
|
164
|
-
&&
|
|
165
|
-
&& document.
|
|
166
|
-
&&
|
|
167
|
-
&& Number.isSafeInteger(document.updatedAt)
|
|
214
|
+
&& safeIntegerInRange(document.revision, 1)
|
|
215
|
+
&& safeIntegerInRange(document.createdAt, Number.MIN_SAFE_INTEGER)
|
|
216
|
+
&& safeIntegerInRange(document.updatedAt, Number.MIN_SAFE_INTEGER)
|
|
168
217
|
&& isSketchCaptureMetadata(document.capture)
|
|
169
218
|
&& boundedString(document.description, SKETCH_LIMITS.description, true)
|
|
170
|
-
&&
|
|
171
|
-
&& document.strokes.length <= SKETCH_LIMITS.strokes
|
|
172
|
-
&& document.strokes.every(isSketchStroke)
|
|
219
|
+
&& isSketchStrokeList(document.strokes)
|
|
173
220
|
&& document.strokes.reduce((total, stroke) => total + stroke.points.length, 0) <= SKETCH_LIMITS.points
|
|
174
221
|
&& (document.annotations === undefined
|
|
175
|
-
|| (
|
|
176
|
-
&& document.annotations.length <= SKETCH_LIMITS.annotations
|
|
177
|
-
&& document.annotations.every(isSketchAnnotation)
|
|
222
|
+
|| (isSketchAnnotationList(document.annotations)
|
|
178
223
|
&& new Set(document.annotations.map((annotation) => annotation.number)).size === document.annotations.length))
|
|
179
|
-
&&
|
|
180
|
-
&& document.
|
|
181
|
-
&& document.
|
|
182
|
-
&&
|
|
183
|
-
&& document.imageHeight > 0
|
|
184
|
-
&& document.imageHeight <= SKETCH_LIMITS.imageEdge
|
|
185
|
-
&& Number.isSafeInteger(document.originalByteSize)
|
|
186
|
-
&& document.originalByteSize > 0
|
|
187
|
-
&& document.originalByteSize <= SKETCH_LIMITS.imageBytes
|
|
188
|
-
&& Number.isSafeInteger(document.annotatedByteSize)
|
|
189
|
-
&& document.annotatedByteSize > 0
|
|
190
|
-
&& document.annotatedByteSize <= SKETCH_LIMITS.imageBytes
|
|
224
|
+
&& safeIntegerInRange(document.imageWidth, 1, SKETCH_LIMITS.imageEdge)
|
|
225
|
+
&& safeIntegerInRange(document.imageHeight, 1, SKETCH_LIMITS.imageEdge)
|
|
226
|
+
&& safeIntegerInRange(document.originalByteSize, 1, SKETCH_LIMITS.imageBytes)
|
|
227
|
+
&& safeIntegerInRange(document.annotatedByteSize, 1, SKETCH_LIMITS.imageBytes)
|
|
191
228
|
&& boundedString(document.filename, 256)
|
|
192
229
|
&& isBlob(document.originalImage, "image/png")
|
|
193
230
|
&& isBlob(document.annotatedImage, "image/png")
|
|
194
231
|
&& document.originalImage.size === document.originalByteSize
|
|
195
232
|
&& document.annotatedImage.size === document.annotatedByteSize;
|
|
196
233
|
}
|
|
197
|
-
export function isSketchHandoffRecord(
|
|
198
|
-
|
|
234
|
+
export function isSketchHandoffRecord(
|
|
235
|
+
// oxlint-disable-next-line anti-slop/no-unknown-parameters
|
|
236
|
+
value) {
|
|
237
|
+
if (!isPlainObject(value))
|
|
199
238
|
return false;
|
|
239
|
+
// SAFETY: the object check above makes reading optional candidate fields safe.
|
|
200
240
|
const handoff = value;
|
|
201
241
|
return Object.keys(handoff).every((key) => [
|
|
202
242
|
"id",
|
|
@@ -213,14 +253,12 @@ export function isSketchHandoffRecord(value) {
|
|
|
213
253
|
&& boundedString(handoff.id, 256)
|
|
214
254
|
&& boundedString(handoff.projectId, 256)
|
|
215
255
|
&& boundedString(handoff.sketchId, 256)
|
|
216
|
-
&&
|
|
217
|
-
&& handoff.sketchRevision > 0
|
|
256
|
+
&& safeIntegerInRange(handoff.sketchRevision, 1)
|
|
218
257
|
&& boundedString(handoff.localBatchId, 256)
|
|
219
|
-
&& (handoff.batchRevision === undefined
|
|
220
|
-
|| (Number.isSafeInteger(handoff.batchRevision) && handoff.batchRevision >= 0))
|
|
258
|
+
&& (handoff.batchRevision === undefined || safeIntegerInRange(handoff.batchRevision, 0))
|
|
221
259
|
&& (handoff.transport === "local" || handoff.transport === "clipboard" || handoff.transport === "direct")
|
|
222
260
|
&& (handoff.agentRequestId === undefined || boundedString(handoff.agentRequestId, 256))
|
|
223
|
-
&&
|
|
261
|
+
&& safeIntegerInRange(handoff.timestamp, Number.MIN_SAFE_INTEGER)
|
|
224
262
|
&& (handoff.state === "pending"
|
|
225
263
|
|| handoff.state === "dispatching"
|
|
226
264
|
|| handoff.state === "handing-off"
|
|
@@ -5,12 +5,25 @@ export declare class SketchStorageError extends Error {
|
|
|
5
5
|
cause?: unknown;
|
|
6
6
|
});
|
|
7
7
|
}
|
|
8
|
+
export declare const SKETCH_STORAGE_FULL_MESSAGE = "Browser storage is full. Remove saved sketches you no longer need, then try again.";
|
|
8
9
|
export interface SketchPersistenceSnapshot {
|
|
9
10
|
readonly documents: SketchDocument[];
|
|
10
11
|
readonly handoffs: SketchHandoffRecord[];
|
|
11
12
|
}
|
|
13
|
+
/** One atomic set of puts and deletes against a project's sketch records. */
|
|
14
|
+
export interface SketchStorageChange {
|
|
15
|
+
readonly documents?: readonly SketchDocument[];
|
|
16
|
+
readonly handoffs?: readonly SketchHandoffRecord[];
|
|
17
|
+
readonly deleteDocumentIds?: readonly string[];
|
|
18
|
+
readonly deleteHandoffIds?: readonly string[];
|
|
19
|
+
}
|
|
20
|
+
/** Replaces the page origin's IndexedDB for sketches, for example with extension storage. */
|
|
21
|
+
export interface SketchStorage {
|
|
22
|
+
read(projectId: string): Promise<SketchPersistenceSnapshot>;
|
|
23
|
+
update(projectId: string, change: SketchStorageChange): Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
export declare function configureSketchStorage(storage: SketchStorage | null): void;
|
|
12
26
|
export declare function readSketchPersistence(projectId: string): Promise<SketchPersistenceSnapshot>;
|
|
13
|
-
/** Writes a document and its initial/current handoff atomically. */
|
|
14
27
|
export declare function writeSketchPersistence(projectId: string, document: SketchDocument, handoff: SketchHandoffRecord): Promise<void>;
|
|
15
28
|
export declare function writeSketchHandoff(projectId: string, handoff: SketchHandoffRecord): Promise<void>;
|
|
16
29
|
export declare function writeSketchHandoffs(projectId: string, handoffs: readonly SketchHandoffRecord[]): Promise<void>;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { isDemoRuntime } from "../runtime/runtimeConfig.js";
|
|
1
2
|
import { SKETCH_DATABASE_NAME, SKETCH_DATABASE_VERSION, SKETCH_DOCUMENTS_STORE, SKETCH_HANDOFFS_STORE, } from "./model.js";
|
|
2
3
|
export class SketchStorageError extends Error {
|
|
3
4
|
code = "sketch_storage_error";
|
|
@@ -6,8 +7,30 @@ export class SketchStorageError extends Error {
|
|
|
6
7
|
this.name = "SketchStorageError";
|
|
7
8
|
}
|
|
8
9
|
}
|
|
10
|
+
export const SKETCH_STORAGE_FULL_MESSAGE = "Browser storage is full. Remove saved sketches you no longer need, then try again.";
|
|
11
|
+
// IndexedDB rejects with a QuotaExceededError; `chrome.storage` with a "quota exceeded" message.
|
|
12
|
+
function isQuotaError(error) {
|
|
13
|
+
if (error instanceof DOMException && error.name === "QuotaExceededError")
|
|
14
|
+
return true;
|
|
15
|
+
return error instanceof Error && /quota/i.test(error.message);
|
|
16
|
+
}
|
|
17
|
+
function storageError(message, error) {
|
|
18
|
+
return new SketchStorageError(isQuotaError(error) ? SKETCH_STORAGE_FULL_MESSAGE : message, { cause: error });
|
|
19
|
+
}
|
|
9
20
|
const memoryProjects = new Map();
|
|
10
21
|
let databasePromise = null;
|
|
22
|
+
let configuredStorage = null;
|
|
23
|
+
export function configureSketchStorage(storage) {
|
|
24
|
+
configuredStorage = storage;
|
|
25
|
+
}
|
|
26
|
+
async function updateConfigured(storage, projectId, change, message) {
|
|
27
|
+
try {
|
|
28
|
+
await storage.update(projectId, change);
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
throw storageError(message, error);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
11
34
|
function memoryState(projectId) {
|
|
12
35
|
let state = memoryProjects.get(projectId);
|
|
13
36
|
if (!state) {
|
|
@@ -38,6 +61,10 @@ async function openDatabase() {
|
|
|
38
61
|
const factory = indexedDbFactory();
|
|
39
62
|
if (!factory)
|
|
40
63
|
return null;
|
|
64
|
+
// Demo runtimes (the landing page) are session-only: sketches live in the
|
|
65
|
+
// in-memory fallback and never touch IndexedDB.
|
|
66
|
+
if (isDemoRuntime())
|
|
67
|
+
return null;
|
|
41
68
|
if (!databasePromise) {
|
|
42
69
|
databasePromise = new Promise((resolve, reject) => {
|
|
43
70
|
let request;
|
|
@@ -69,12 +96,20 @@ async function openDatabase() {
|
|
|
69
96
|
request.onblocked = () => reject(new Error("IndexedDB upgrade is blocked by another tab."));
|
|
70
97
|
}).catch((error) => {
|
|
71
98
|
databasePromise = null;
|
|
72
|
-
throw
|
|
99
|
+
throw storageError("Sketch storage is unavailable in this browser.", error);
|
|
73
100
|
});
|
|
74
101
|
}
|
|
75
102
|
return databasePromise;
|
|
76
103
|
}
|
|
77
104
|
export async function readSketchPersistence(projectId) {
|
|
105
|
+
if (configuredStorage) {
|
|
106
|
+
try {
|
|
107
|
+
return await configuredStorage.read(projectId);
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
throw storageError("Sketch storage could not be read.", error);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
78
113
|
const database = await openDatabase();
|
|
79
114
|
if (!database) {
|
|
80
115
|
const state = memoryState(projectId);
|
|
@@ -86,17 +121,21 @@ export async function readSketchPersistence(projectId) {
|
|
|
86
121
|
try {
|
|
87
122
|
const transaction = database.transaction([SKETCH_DOCUMENTS_STORE, SKETCH_HANDOFFS_STORE], "readonly");
|
|
88
123
|
const done = transactionDone(transaction);
|
|
124
|
+
// Records come back as stored; the store drops anything that fails validation during hydration.
|
|
89
125
|
const documentsPromise = requestResult(transaction.objectStore(SKETCH_DOCUMENTS_STORE).index("projectId").getAll(projectId));
|
|
90
126
|
const handoffsPromise = requestResult(transaction.objectStore(SKETCH_HANDOFFS_STORE).index("projectId").getAll(projectId));
|
|
91
127
|
const [documents, handoffs] = await Promise.all([documentsPromise, handoffsPromise, done]);
|
|
92
128
|
return { documents, handoffs };
|
|
93
129
|
}
|
|
94
130
|
catch (error) {
|
|
95
|
-
throw
|
|
131
|
+
throw storageError("Sketch storage could not be read.", error);
|
|
96
132
|
}
|
|
97
133
|
}
|
|
98
|
-
/** Writes a document and its initial/current handoff atomically. */
|
|
99
134
|
export async function writeSketchPersistence(projectId, document, handoff) {
|
|
135
|
+
if (configuredStorage) {
|
|
136
|
+
const change = { documents: [document], handoffs: [handoff] };
|
|
137
|
+
return updateConfigured(configuredStorage, projectId, change, "Sketch could not be saved to browser storage.");
|
|
138
|
+
}
|
|
100
139
|
const database = await openDatabase();
|
|
101
140
|
if (!database) {
|
|
102
141
|
const state = memoryState(projectId);
|
|
@@ -111,10 +150,13 @@ export async function writeSketchPersistence(projectId, document, handoff) {
|
|
|
111
150
|
await transactionDone(transaction);
|
|
112
151
|
}
|
|
113
152
|
catch (error) {
|
|
114
|
-
throw
|
|
153
|
+
throw storageError("Sketch could not be saved to browser storage.", error);
|
|
115
154
|
}
|
|
116
155
|
}
|
|
117
156
|
export async function writeSketchHandoff(projectId, handoff) {
|
|
157
|
+
if (configuredStorage) {
|
|
158
|
+
return updateConfigured(configuredStorage, projectId, { handoffs: [handoff] }, "Sketch handoff state could not be saved.");
|
|
159
|
+
}
|
|
118
160
|
const database = await openDatabase();
|
|
119
161
|
if (!database) {
|
|
120
162
|
memoryState(projectId).handoffs.set(handoff.id, handoff);
|
|
@@ -126,12 +168,15 @@ export async function writeSketchHandoff(projectId, handoff) {
|
|
|
126
168
|
await transactionDone(transaction);
|
|
127
169
|
}
|
|
128
170
|
catch (error) {
|
|
129
|
-
throw
|
|
171
|
+
throw storageError("Sketch handoff state could not be saved.", error);
|
|
130
172
|
}
|
|
131
173
|
}
|
|
132
174
|
export async function writeSketchHandoffs(projectId, handoffs) {
|
|
133
175
|
if (handoffs.length === 0)
|
|
134
176
|
return;
|
|
177
|
+
if (configuredStorage) {
|
|
178
|
+
return updateConfigured(configuredStorage, projectId, { handoffs }, "Sketch handoff state could not be saved.");
|
|
179
|
+
}
|
|
135
180
|
const database = await openDatabase();
|
|
136
181
|
if (!database) {
|
|
137
182
|
const state = memoryState(projectId);
|
|
@@ -145,7 +190,7 @@ export async function writeSketchHandoffs(projectId, handoffs) {
|
|
|
145
190
|
await transactionDone(transaction);
|
|
146
191
|
}
|
|
147
192
|
catch (error) {
|
|
148
|
-
throw
|
|
193
|
+
throw storageError("Sketch handoff state could not be saved.", error);
|
|
149
194
|
}
|
|
150
195
|
}
|
|
151
196
|
export async function deleteSketchPersistence(projectId, sketchId) {
|
|
@@ -153,6 +198,10 @@ export async function deleteSketchPersistence(projectId, sketchId) {
|
|
|
153
198
|
const handoffIds = existing.handoffs
|
|
154
199
|
.filter((handoff) => handoff.sketchId === sketchId)
|
|
155
200
|
.map((handoff) => handoff.id);
|
|
201
|
+
if (configuredStorage) {
|
|
202
|
+
const change = { deleteDocumentIds: [sketchId], deleteHandoffIds: handoffIds };
|
|
203
|
+
return updateConfigured(configuredStorage, projectId, change, "Sketch could not be removed from browser storage.");
|
|
204
|
+
}
|
|
156
205
|
const database = await openDatabase();
|
|
157
206
|
if (!database) {
|
|
158
207
|
const state = memoryState(projectId);
|
|
@@ -168,11 +217,18 @@ export async function deleteSketchPersistence(projectId, sketchId) {
|
|
|
168
217
|
await transactionDone(transaction);
|
|
169
218
|
}
|
|
170
219
|
catch (error) {
|
|
171
|
-
throw
|
|
220
|
+
throw storageError("Sketch could not be removed from browser storage.", error);
|
|
172
221
|
}
|
|
173
222
|
}
|
|
174
223
|
export async function clearSketchPersistence(projectId) {
|
|
175
224
|
const existing = await readSketchPersistence(projectId);
|
|
225
|
+
if (configuredStorage) {
|
|
226
|
+
const change = {
|
|
227
|
+
deleteDocumentIds: existing.documents.map((document) => document.id),
|
|
228
|
+
deleteHandoffIds: existing.handoffs.map((handoff) => handoff.id),
|
|
229
|
+
};
|
|
230
|
+
return updateConfigured(configuredStorage, projectId, change, "Sketch storage could not be cleared.");
|
|
231
|
+
}
|
|
176
232
|
const database = await openDatabase();
|
|
177
233
|
if (!database) {
|
|
178
234
|
const state = memoryState(projectId);
|
|
@@ -189,7 +245,7 @@ export async function clearSketchPersistence(projectId) {
|
|
|
189
245
|
await transactionDone(transaction);
|
|
190
246
|
}
|
|
191
247
|
catch (error) {
|
|
192
|
-
throw
|
|
248
|
+
throw storageError("Sketch storage could not be cleared.", error);
|
|
193
249
|
}
|
|
194
250
|
}
|
|
195
251
|
export async function closeSketchDatabase() {
|
|
@@ -10,12 +10,13 @@ export declare function drawSketchStroke(ctx: CanvasRenderingContext2D, stroke:
|
|
|
10
10
|
export declare function drawSketchStrokes(ctx: CanvasRenderingContext2D, strokes: readonly SketchStroke[], scaleX?: number, scaleY?: number): void;
|
|
11
11
|
export declare function drawSketchAnnotation(ctx: CanvasRenderingContext2D, annotation: Pick<SketchAnnotation, "number" | "point">, scaleX?: number, scaleY?: number): void;
|
|
12
12
|
export declare function drawSketchAnnotations(ctx: CanvasRenderingContext2D, annotations: readonly SketchAnnotation[], scaleX?: number, scaleY?: number): void;
|
|
13
|
-
export declare function renderAnnotatedPng(originalImage: Blob, imageWidth: number, imageHeight: number, strokes: readonly SketchStroke[], annotations?: readonly SketchAnnotation[], description?: string): Promise<{
|
|
13
|
+
export declare function renderAnnotatedPng(originalImage: Blob, imageWidth: number, imageHeight: number, strokes: readonly SketchStroke[], annotations?: readonly SketchAnnotation[], description?: string, heading?: string): Promise<{
|
|
14
14
|
readonly blob: Blob;
|
|
15
15
|
readonly width: number;
|
|
16
16
|
readonly height: number;
|
|
17
17
|
}>;
|
|
18
18
|
export declare function blobToBase64(blob: Blob): Promise<string>;
|
|
19
|
-
|
|
19
|
+
/** The promise form lets callers start the write inside the user gesture (required by Safari). */
|
|
20
|
+
export declare function copyImageToClipboard(blob: Blob | Promise<Blob>): Promise<void>;
|
|
20
21
|
export declare function copyImageAndTextToClipboard(blob: Blob, text: string): Promise<void>;
|
|
21
22
|
export declare function downloadImage(blob: Blob, filename: string): void;
|