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
|
@@ -21,11 +21,6 @@ function structuredProps(authored, structure, properties) {
|
|
|
21
21
|
},
|
|
22
22
|
]));
|
|
23
23
|
}
|
|
24
|
-
/**
|
|
25
|
-
* Framework-neutral border corpus. Covers shorthand decomposition into width,
|
|
26
|
-
* style, and color longhands (including omitted CSS initials), side-specific
|
|
27
|
-
* shorthands, token attribution, border-radius, and true raw fallbacks.
|
|
28
|
-
*/
|
|
29
24
|
export const BORDER_CASES = [
|
|
30
25
|
{
|
|
31
26
|
id: "border-shorthand-literal",
|
|
@@ -1,8 +1,2 @@
|
|
|
1
1
|
import type { ConformanceFixture } from "./fixture.js";
|
|
2
|
-
/**
|
|
3
|
-
* Framework-neutral color corpus covering `color` and `background-color`.
|
|
4
|
-
* Each fixture asserts authored CSS values and capability against the
|
|
5
|
-
* inspector's resolution pipeline. The gallery lets a human exercise the
|
|
6
|
-
* same cases through the real inspector UI.
|
|
7
|
-
*/
|
|
8
2
|
export declare const COLOR_CASES: ConformanceFixture[];
|
|
@@ -14,12 +14,6 @@ const COLOR_ACCENT = token("--color-accent", "oklch(63% .2 25)", "fixtures/color
|
|
|
14
14
|
const COLOR_PRIMARY = token("--color-primary", "#2563eb", "fixtures/color.css:7");
|
|
15
15
|
const COLOR_DANGER = token("--color-danger", "#dc2626", "fixtures/color.css:8");
|
|
16
16
|
const OPACITY_MUTED = token("--opacity-muted", "0.35", "fixtures/color.css:9");
|
|
17
|
-
/**
|
|
18
|
-
* Framework-neutral color corpus covering `color` and `background-color`.
|
|
19
|
-
* Each fixture asserts authored CSS values and capability against the
|
|
20
|
-
* inspector's resolution pipeline. The gallery lets a human exercise the
|
|
21
|
-
* same cases through the real inspector UI.
|
|
22
|
-
*/
|
|
23
17
|
export const COLOR_CASES = [
|
|
24
18
|
{
|
|
25
19
|
id: "color-named-keywords",
|
|
@@ -59,10 +59,6 @@ export interface ConformanceResult {
|
|
|
59
59
|
preview: PreviewResult | null;
|
|
60
60
|
cleanup(): void;
|
|
61
61
|
}
|
|
62
|
-
/**
|
|
63
|
-
* Mounts one data-led fixture and runs it through the same CSSOM resolver used
|
|
64
|
-
* by the inspector. The caller owns assertions; this module only owns setup,
|
|
65
|
-
* teardown, and the public inspection result.
|
|
66
|
-
*/
|
|
62
|
+
/** Runs a fixture through the same CSSOM resolver the inspector uses; the caller owns assertions. */
|
|
67
63
|
export declare function runConformanceFixture(fixture: ConformanceFixture, doc?: Document): ConformanceResult;
|
|
68
64
|
export declare function assertConformanceFixture(result: ConformanceResult, fixture: ConformanceFixture): string[];
|
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
import { applyRules, verifyPreview } from "../projection/managedStylesheet.js";
|
|
2
2
|
import { projectInspectorValues } from "../spacing/projection.js";
|
|
3
3
|
import { createBrowserCssInspection } from "../inspection/browserCssInspection.js";
|
|
4
|
-
/**
|
|
5
|
-
* Mounts one data-led fixture and runs it through the same CSSOM resolver used
|
|
6
|
-
* by the inspector. The caller owns assertions; this module only owns setup,
|
|
7
|
-
* teardown, and the public inspection result.
|
|
8
|
-
*/
|
|
4
|
+
/** Runs a fixture through the same CSSOM resolver the inspector uses; the caller owns assertions. */
|
|
9
5
|
export function runConformanceFixture(fixture, doc = document) {
|
|
10
6
|
const style = doc.createElement("style");
|
|
11
7
|
style.dataset.conformanceFixture = fixture.id;
|
|
@@ -1,6 +1,2 @@
|
|
|
1
1
|
import type { ConformanceFixture } from "./fixture.js";
|
|
2
|
-
/**
|
|
3
|
-
* Shared spacing corpus. Unit tests run every case through the fixture runner;
|
|
4
|
-
* browser tests select representative cases where real CSSOM behaviour matters.
|
|
5
|
-
*/
|
|
6
2
|
export declare const SPACING_CASES: ConformanceFixture[];
|
|
@@ -10,10 +10,6 @@ const SPACE_ALIAS = token("--space-alias", "var(--space-4)", "fixtures/spacing.c
|
|
|
10
10
|
function boxProperties(values, capability = "box-sides") {
|
|
11
11
|
return Object.fromEntries(Object.entries(values).map(([property, authored]) => [property, { authored, capability }]));
|
|
12
12
|
}
|
|
13
|
-
/**
|
|
14
|
-
* Shared spacing corpus. Unit tests run every case through the fixture runner;
|
|
15
|
-
* browser tests select representative cases where real CSSOM behaviour matters.
|
|
16
|
-
*/
|
|
17
13
|
export const SPACING_CASES = [
|
|
18
14
|
{
|
|
19
15
|
id: "spacing-physical-four-value",
|
|
@@ -1,7 +1,2 @@
|
|
|
1
1
|
import type { ConformanceFixture } from "./fixture.js";
|
|
2
|
-
/**
|
|
3
|
-
* Framework-neutral typography corpus. The fixture runner asserts authored
|
|
4
|
-
* CSS and capability independently from browser-computed output; the gallery
|
|
5
|
-
* lets a human exercise the same cases through the real inspector.
|
|
6
|
-
*/
|
|
7
2
|
export declare const TYPOGRAPHY_CASES: ConformanceFixture[];
|
|
@@ -10,11 +10,6 @@ const TYPE_WEIGHT = token("--type-weight-strong", "650", "fixtures/typography.cs
|
|
|
10
10
|
const TYPE_LEADING = token("--type-leading-body", "1.5", "fixtures/typography.css:4");
|
|
11
11
|
const TYPE_TRACKING = token("--type-tracking-tight", "-0.018em", "fixtures/typography.css:5");
|
|
12
12
|
const TYPE_FAMILY = token("--type-family-body", 'Inter, ui-sans-serif, system-ui, sans-serif', "fixtures/typography.css:6");
|
|
13
|
-
/**
|
|
14
|
-
* Framework-neutral typography corpus. The fixture runner asserts authored
|
|
15
|
-
* CSS and capability independently from browser-computed output; the gallery
|
|
16
|
-
* lets a human exercise the same cases through the real inspector.
|
|
17
|
-
*/
|
|
18
13
|
export const TYPOGRAPHY_CASES = [
|
|
19
14
|
{
|
|
20
15
|
id: "type-direct-literals",
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { type ChangeRecord } from "../changes/types.js";
|
|
2
|
+
import type { StructuralChange } from "../changes/structuralTypes.js";
|
|
3
|
+
import type { SketchDocument } from "../sketch/model.js";
|
|
4
|
+
import type { Timeline } from "../workspace/timeline.js";
|
|
5
|
+
import { type Draft, type DraftContents, type DraftSnapshot } from "./model.js";
|
|
6
|
+
export interface DraftChangesSnapshot extends DraftContents {
|
|
7
|
+
readonly draftId: string;
|
|
8
|
+
readonly revision: number;
|
|
9
|
+
readonly canUndo: boolean;
|
|
10
|
+
readonly canRedo: boolean;
|
|
11
|
+
}
|
|
12
|
+
/** A canonical write result. `blocked` means the lease or a save lock refused the write. */
|
|
13
|
+
export type CommitResult = "applied" | "unchanged" | "blocked";
|
|
14
|
+
/** Why the active draft's preview must be rebuilt. */
|
|
15
|
+
export type DraftProjectionEvent = {
|
|
16
|
+
readonly kind: "edit";
|
|
17
|
+
readonly verificationTargets?: ReadonlyMap<string, HTMLElement | null>;
|
|
18
|
+
} | {
|
|
19
|
+
readonly kind: "reconcile";
|
|
20
|
+
readonly structuralIds: ReadonlySet<string>;
|
|
21
|
+
} | {
|
|
22
|
+
readonly kind: "switch";
|
|
23
|
+
}
|
|
24
|
+
/** The active draft was cleared; every earlier preview diagnostic is void. */
|
|
25
|
+
| {
|
|
26
|
+
readonly kind: "reset";
|
|
27
|
+
};
|
|
28
|
+
export type DraftDiscardTarget = {
|
|
29
|
+
readonly kind: "selector";
|
|
30
|
+
readonly selector: string;
|
|
31
|
+
} | {
|
|
32
|
+
readonly kind: "instance-override";
|
|
33
|
+
readonly id: string;
|
|
34
|
+
};
|
|
35
|
+
export interface DraftStorage {
|
|
36
|
+
read(key: string): string | null;
|
|
37
|
+
write(key: string, value: string): void;
|
|
38
|
+
remove(key: string): void;
|
|
39
|
+
}
|
|
40
|
+
export interface DraftSketchSource {
|
|
41
|
+
getSnapshot(): {
|
|
42
|
+
readonly ready: boolean;
|
|
43
|
+
readonly documents: readonly SketchDocument[];
|
|
44
|
+
};
|
|
45
|
+
subscribe(listener: () => void): () => void;
|
|
46
|
+
}
|
|
47
|
+
export interface DraftStoreSeams {
|
|
48
|
+
/** Whether this tab holds the workspace write lease. */
|
|
49
|
+
canWrite(): boolean;
|
|
50
|
+
readonly timeline: Timeline;
|
|
51
|
+
readonly storage: DraftStorage;
|
|
52
|
+
readonly sketches: DraftSketchSource;
|
|
53
|
+
/** Brings a draft's owning frame back when history replays an edit. */
|
|
54
|
+
revealDraft(draftId: string, cardId?: string): void;
|
|
55
|
+
/** Rebuilds the active draft's preview. Called after subscribers see the new snapshot. */
|
|
56
|
+
project(snapshot: DraftChangesSnapshot, event: DraftProjectionEvent): void;
|
|
57
|
+
}
|
|
58
|
+
export interface DraftStore {
|
|
59
|
+
getActive(): DraftChangesSnapshot;
|
|
60
|
+
/** Fires for any draft content change, active-draft switch, or history change. */
|
|
61
|
+
subscribeActive(listener: () => void): () => void;
|
|
62
|
+
get(id: string): DraftChangesSnapshot;
|
|
63
|
+
ids(): readonly string[];
|
|
64
|
+
getDraft(id: string): Draft | null;
|
|
65
|
+
getSnapshot(): DraftSnapshot;
|
|
66
|
+
subscribe(listener: () => void): () => void;
|
|
67
|
+
canEdit(id?: string): boolean;
|
|
68
|
+
isLocked(id?: string): boolean;
|
|
69
|
+
/** Blocks writes to one draft until the returned release runs. */
|
|
70
|
+
lock(id: string): () => void;
|
|
71
|
+
/** Makes a draft active; `cardId` is the frame history replay should reveal for it. */
|
|
72
|
+
activate(id: string, cardId?: string): void;
|
|
73
|
+
commitChanges(incoming: readonly ChangeRecord[], verificationTargets?: ReadonlyMap<string, HTMLElement | null>): CommitResult;
|
|
74
|
+
revertChange(change: ChangeRecord): boolean;
|
|
75
|
+
discardChanges(target: DraftDiscardTarget): boolean;
|
|
76
|
+
commitStructuralChange(change: StructuralChange): boolean;
|
|
77
|
+
revertStructuralChange(changeId: string): boolean;
|
|
78
|
+
commitContents(next: DraftContents): boolean;
|
|
79
|
+
undo(): boolean;
|
|
80
|
+
redo(): boolean;
|
|
81
|
+
reconcile(id: string, verifiedKeys: ReadonlySet<string>, verifiedStructuralIds: ReadonlySet<string>): number;
|
|
82
|
+
clear(id: string, expectedRevision?: number): boolean;
|
|
83
|
+
clearActive(): boolean;
|
|
84
|
+
forget(id: string): void;
|
|
85
|
+
sketchOwner(document: SketchDocument): string | null;
|
|
86
|
+
assignSketch(draftId: string, sketchId: string): void;
|
|
87
|
+
/** Replaces every in-memory draft with the stored drafts, so a tab that takes over never writes stale edits. */
|
|
88
|
+
load(projectId: string, options?: {
|
|
89
|
+
persistent?: boolean;
|
|
90
|
+
}): void;
|
|
91
|
+
persist(): void;
|
|
92
|
+
discardAll(): void;
|
|
93
|
+
reset(): void;
|
|
94
|
+
}
|
|
95
|
+
export declare function createDraftStore(seams: DraftStoreSeams): DraftStore;
|
|
@@ -0,0 +1,461 @@
|
|
|
1
|
+
import { deserializeChange, isSerializableChange, serializeChange, } from "../changes/codecs.js";
|
|
2
|
+
import { changeKey, mergeChange, sameEffectiveChanges, selectorForChange } from "../changes/model.js";
|
|
3
|
+
import { isElementChange } from "../changes/types.js";
|
|
4
|
+
import { isStructuralChange } from "../projection/structuralProjectionBoundary.js";
|
|
5
|
+
import { applicationTarget, documentTarget, isDraftTarget, targetFromKey, targetKey, } from "./model.js";
|
|
6
|
+
const EMPTY = { changes: [], structuralChanges: [] };
|
|
7
|
+
const PROJECTION_RANK = { edit: 1, reconcile: 2, switch: 3, reset: 4 };
|
|
8
|
+
function cloneValue(value, key) {
|
|
9
|
+
if (key === "oldToken" || key === "newToken")
|
|
10
|
+
return value;
|
|
11
|
+
if (Array.isArray(value))
|
|
12
|
+
return value.map((item) => cloneValue(item));
|
|
13
|
+
if (value !== null && typeof value === "object") {
|
|
14
|
+
const clone = {};
|
|
15
|
+
for (const [childKey, child] of Object.entries(value))
|
|
16
|
+
clone[childKey] = cloneValue(child, childKey);
|
|
17
|
+
return clone;
|
|
18
|
+
}
|
|
19
|
+
return value;
|
|
20
|
+
}
|
|
21
|
+
function freezeValue(value, key) {
|
|
22
|
+
if (key === "oldToken" || key === "newToken")
|
|
23
|
+
return value;
|
|
24
|
+
if (value !== null && typeof value === "object" && !Object.isFrozen(value)) {
|
|
25
|
+
for (const [childKey, child] of Object.entries(value))
|
|
26
|
+
freezeValue(child, childKey);
|
|
27
|
+
Object.freeze(value);
|
|
28
|
+
}
|
|
29
|
+
return value;
|
|
30
|
+
}
|
|
31
|
+
function frozenContents(value) {
|
|
32
|
+
return freezeValue({
|
|
33
|
+
changes: value.changes.map((change) => cloneValue(change)),
|
|
34
|
+
structuralChanges: value.structuralChanges.map((change) => cloneValue(change)),
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
function sameDraftContents(left, right) {
|
|
38
|
+
return sameEffectiveChanges([...left.changes], [...right.changes])
|
|
39
|
+
&& JSON.stringify(left.structuralChanges) === JSON.stringify(right.structuralChanges);
|
|
40
|
+
}
|
|
41
|
+
function mergeProjection(current, next) {
|
|
42
|
+
return current && PROJECTION_RANK[current.kind] > PROJECTION_RANK[next.kind] ? current : next;
|
|
43
|
+
}
|
|
44
|
+
function isPersistedDrafts(value, projectId) {
|
|
45
|
+
if (!value || typeof value !== "object")
|
|
46
|
+
return false;
|
|
47
|
+
const candidate = value;
|
|
48
|
+
if (candidate.schemaVersion !== 2 || candidate.projectId !== projectId || !Array.isArray(candidate.drafts))
|
|
49
|
+
return false;
|
|
50
|
+
const targets = new Set();
|
|
51
|
+
for (const draft of candidate.drafts) {
|
|
52
|
+
if (!draft || !isDraftTarget(draft.target) || targets.has(targetKey(draft.target))
|
|
53
|
+
|| !Number.isSafeInteger(draft.revision) || draft.revision < 1
|
|
54
|
+
|| !draft.contents || !Array.isArray(draft.contents.changes) || !draft.contents.changes.every(isSerializableChange)
|
|
55
|
+
|| !Array.isArray(draft.contents.structuralChanges) || !draft.contents.structuralChanges.every(isStructuralChange))
|
|
56
|
+
return false;
|
|
57
|
+
const textIds = draft.contents.changes
|
|
58
|
+
.filter((change) => change.kind === "text-content")
|
|
59
|
+
.map((change) => "id" in change ? change.id : "");
|
|
60
|
+
if (new Set(textIds).size !== textIds.length)
|
|
61
|
+
return false;
|
|
62
|
+
targets.add(targetKey(draft.target));
|
|
63
|
+
}
|
|
64
|
+
return !!candidate.sketchOwners && typeof candidate.sketchOwners === "object" && !Array.isArray(candidate.sketchOwners)
|
|
65
|
+
&& Object.values(candidate.sketchOwners).every((id) => typeof id === "string" && targetFromKey(id) !== null);
|
|
66
|
+
}
|
|
67
|
+
export function createDraftStore(seams) {
|
|
68
|
+
const drafts = new Map();
|
|
69
|
+
const locked = new Set();
|
|
70
|
+
/** Overrides the capture-URL owner for sketches drawn while another draft was active. */
|
|
71
|
+
const sketchOwners = new Map();
|
|
72
|
+
const activeListeners = new Set();
|
|
73
|
+
const draftListeners = new Set();
|
|
74
|
+
/** Until a frame is activated, edits belong to the current page's draft. */
|
|
75
|
+
let activeDraftId = null;
|
|
76
|
+
let projectId = "";
|
|
77
|
+
let persistent = true;
|
|
78
|
+
let activeSnapshot = null;
|
|
79
|
+
let draftsSnapshot = null;
|
|
80
|
+
let depth = 0;
|
|
81
|
+
let activePending = false;
|
|
82
|
+
let draftsPending = false;
|
|
83
|
+
let pendingProjection = null;
|
|
84
|
+
const activeId = () => activeDraftId ??= targetKey(applicationTarget());
|
|
85
|
+
const storageKey = () => `nudge-ui-drafts:${projectId}:v2`;
|
|
86
|
+
function draftState(id = activeId()) {
|
|
87
|
+
let draft = drafts.get(id);
|
|
88
|
+
if (!draft) {
|
|
89
|
+
draft = { id, revision: 0, contents: EMPTY };
|
|
90
|
+
drafts.set(id, draft);
|
|
91
|
+
}
|
|
92
|
+
return draft;
|
|
93
|
+
}
|
|
94
|
+
function flush() {
|
|
95
|
+
if (activePending) {
|
|
96
|
+
activePending = false;
|
|
97
|
+
for (const listener of activeListeners)
|
|
98
|
+
listener();
|
|
99
|
+
}
|
|
100
|
+
if (draftsPending) {
|
|
101
|
+
draftsPending = false;
|
|
102
|
+
for (const listener of draftListeners)
|
|
103
|
+
listener();
|
|
104
|
+
}
|
|
105
|
+
if (pendingProjection) {
|
|
106
|
+
const event = pendingProjection;
|
|
107
|
+
pendingProjection = null;
|
|
108
|
+
seams.project(getActive(), event);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/** Subscribers and the projector observe only complete, settled state. */
|
|
112
|
+
function mutate(operation) {
|
|
113
|
+
depth += 1;
|
|
114
|
+
try {
|
|
115
|
+
return operation();
|
|
116
|
+
}
|
|
117
|
+
finally {
|
|
118
|
+
depth -= 1;
|
|
119
|
+
if (depth === 0)
|
|
120
|
+
flush();
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
function activeChanged() {
|
|
124
|
+
activeSnapshot = null;
|
|
125
|
+
activePending = true;
|
|
126
|
+
if (depth === 0)
|
|
127
|
+
flush();
|
|
128
|
+
}
|
|
129
|
+
function draftsChanged() {
|
|
130
|
+
draftsSnapshot = null;
|
|
131
|
+
draftsPending = true;
|
|
132
|
+
if (depth === 0)
|
|
133
|
+
flush();
|
|
134
|
+
}
|
|
135
|
+
function contentsChanged() {
|
|
136
|
+
draftsSnapshot = null;
|
|
137
|
+
draftsPending = true;
|
|
138
|
+
activeChanged();
|
|
139
|
+
}
|
|
140
|
+
function project(event) {
|
|
141
|
+
pendingProjection = mergeProjection(pendingProjection, event);
|
|
142
|
+
}
|
|
143
|
+
function replaceContents(draft, next) {
|
|
144
|
+
draft.contents = frozenContents(next);
|
|
145
|
+
draft.revision += 1;
|
|
146
|
+
contentsChanged();
|
|
147
|
+
}
|
|
148
|
+
function resetContents() {
|
|
149
|
+
drafts.clear();
|
|
150
|
+
locked.clear();
|
|
151
|
+
activeDraftId = null;
|
|
152
|
+
seams.timeline.clear();
|
|
153
|
+
}
|
|
154
|
+
function canEdit(id = activeId()) {
|
|
155
|
+
return seams.canWrite() && !locked.has(id);
|
|
156
|
+
}
|
|
157
|
+
function commitActive(next, event = { kind: "edit" }) {
|
|
158
|
+
if (!canEdit())
|
|
159
|
+
return false;
|
|
160
|
+
return mutate(() => {
|
|
161
|
+
const draft = draftState();
|
|
162
|
+
const before = draft.contents;
|
|
163
|
+
replaceContents(draft, next);
|
|
164
|
+
seams.timeline.recordEdit({
|
|
165
|
+
draftId: draft.id,
|
|
166
|
+
focus: { draftId: draft.id, ...(draft.activateCardId ? { cardId: draft.activateCardId } : {}) },
|
|
167
|
+
before,
|
|
168
|
+
after: draft.contents,
|
|
169
|
+
}, sameDraftContents);
|
|
170
|
+
project(event);
|
|
171
|
+
return true;
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
function activate(id, cardId) {
|
|
175
|
+
mutate(() => {
|
|
176
|
+
draftState(id).activateCardId = cardId;
|
|
177
|
+
if (activeId() === id)
|
|
178
|
+
return;
|
|
179
|
+
activeDraftId = id;
|
|
180
|
+
activeChanged();
|
|
181
|
+
project({ kind: "switch" });
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
function replay(direction) {
|
|
185
|
+
if (locked.size > 0 || !seams.canWrite())
|
|
186
|
+
return false;
|
|
187
|
+
return mutate(() => {
|
|
188
|
+
const replayed = seams.timeline.replay(direction, (entry, next) => {
|
|
189
|
+
replaceContents(draftState(entry.draftId), next);
|
|
190
|
+
// Replay always makes the entry's draft active, including when another
|
|
191
|
+
// draft is active; a known frame is revealed before that switch.
|
|
192
|
+
if (entry.focus?.cardId)
|
|
193
|
+
seams.revealDraft(entry.focus.draftId, entry.focus.cardId);
|
|
194
|
+
else
|
|
195
|
+
seams.revealDraft(entry.draftId);
|
|
196
|
+
if (activeId() !== entry.draftId)
|
|
197
|
+
activate(entry.draftId);
|
|
198
|
+
});
|
|
199
|
+
if (replayed)
|
|
200
|
+
project({ kind: "edit" });
|
|
201
|
+
return replayed;
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
function clear(id, event, expectedRevision) {
|
|
205
|
+
const draft = draftState(id);
|
|
206
|
+
if (!canEdit(id) || (expectedRevision !== undefined && draft.revision !== expectedRevision))
|
|
207
|
+
return false;
|
|
208
|
+
mutate(() => {
|
|
209
|
+
replaceContents(draft, EMPTY);
|
|
210
|
+
seams.timeline.discardDraftHistory(id);
|
|
211
|
+
if (id === activeId())
|
|
212
|
+
project(event);
|
|
213
|
+
});
|
|
214
|
+
return true;
|
|
215
|
+
}
|
|
216
|
+
function get(id) {
|
|
217
|
+
const draft = drafts.get(id);
|
|
218
|
+
return {
|
|
219
|
+
draftId: id,
|
|
220
|
+
revision: draft?.revision ?? 0,
|
|
221
|
+
changes: draft?.contents.changes ?? [],
|
|
222
|
+
structuralChanges: draft?.contents.structuralChanges ?? [],
|
|
223
|
+
...seams.timeline.status(),
|
|
224
|
+
};
|
|
225
|
+
}
|
|
226
|
+
function getActive() {
|
|
227
|
+
if (!activeSnapshot) {
|
|
228
|
+
const draft = draftState();
|
|
229
|
+
activeSnapshot = Object.freeze({ draftId: draft.id, revision: draft.revision, ...draft.contents, ...seams.timeline.status() });
|
|
230
|
+
}
|
|
231
|
+
return activeSnapshot;
|
|
232
|
+
}
|
|
233
|
+
function sketchOwner(document) {
|
|
234
|
+
const owner = sketchOwners.get(document.id);
|
|
235
|
+
if (owner)
|
|
236
|
+
return owner;
|
|
237
|
+
try {
|
|
238
|
+
return targetKey(documentTarget(document.capture.url));
|
|
239
|
+
}
|
|
240
|
+
catch {
|
|
241
|
+
return null;
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
function getDraft(id) {
|
|
245
|
+
const target = targetFromKey(id);
|
|
246
|
+
if (!target)
|
|
247
|
+
return null;
|
|
248
|
+
const { revision, changes, structuralChanges } = get(id);
|
|
249
|
+
return {
|
|
250
|
+
id,
|
|
251
|
+
target,
|
|
252
|
+
revision,
|
|
253
|
+
contents: { changes, structuralChanges },
|
|
254
|
+
sketchIds: seams.sketches.getSnapshot().documents.filter((document) => sketchOwner(document) === id).map((document) => document.id),
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
function persisted() {
|
|
258
|
+
const sketches = seams.sketches.getSnapshot();
|
|
259
|
+
const liveSketches = new Set(sketches.documents.map((document) => document.id));
|
|
260
|
+
return {
|
|
261
|
+
schemaVersion: 2,
|
|
262
|
+
projectId,
|
|
263
|
+
drafts: [...drafts.values()].flatMap(({ id, revision, contents }) => {
|
|
264
|
+
const target = targetFromKey(id);
|
|
265
|
+
if (!target || contents.changes.length + contents.structuralChanges.length === 0)
|
|
266
|
+
return [];
|
|
267
|
+
return [{
|
|
268
|
+
target,
|
|
269
|
+
revision,
|
|
270
|
+
contents: {
|
|
271
|
+
changes: contents.changes.flatMap((change) => {
|
|
272
|
+
const serialized = serializeChange(change);
|
|
273
|
+
return serialized ? [serialized] : [];
|
|
274
|
+
}),
|
|
275
|
+
structuralChanges: contents.structuralChanges,
|
|
276
|
+
},
|
|
277
|
+
}];
|
|
278
|
+
}),
|
|
279
|
+
sketchOwners: Object.fromEntries([...sketchOwners].filter(([id]) => !sketches.ready || liveSketches.has(id))),
|
|
280
|
+
};
|
|
281
|
+
}
|
|
282
|
+
function restore() {
|
|
283
|
+
const raw = persistent ? seams.storage.read(storageKey()) : null;
|
|
284
|
+
const stored = raw ? JSON.parse(raw) : null;
|
|
285
|
+
if (!isPersistedDrafts(stored, projectId))
|
|
286
|
+
return;
|
|
287
|
+
for (const draft of stored.drafts) {
|
|
288
|
+
const state = draftState(targetKey(draft.target));
|
|
289
|
+
state.contents = frozenContents({
|
|
290
|
+
changes: draft.contents.changes.map(deserializeChange),
|
|
291
|
+
structuralChanges: draft.contents.structuralChanges,
|
|
292
|
+
});
|
|
293
|
+
state.revision = draft.revision;
|
|
294
|
+
}
|
|
295
|
+
for (const [sketchId, draftId] of Object.entries(stored.sketchOwners))
|
|
296
|
+
sketchOwners.set(sketchId, draftId);
|
|
297
|
+
}
|
|
298
|
+
seams.timeline.subscribe(activeChanged);
|
|
299
|
+
seams.sketches.subscribe(draftsChanged);
|
|
300
|
+
return {
|
|
301
|
+
getActive,
|
|
302
|
+
subscribeActive(listener) {
|
|
303
|
+
activeListeners.add(listener);
|
|
304
|
+
return () => activeListeners.delete(listener);
|
|
305
|
+
},
|
|
306
|
+
get,
|
|
307
|
+
ids: () => [...drafts.keys()],
|
|
308
|
+
getDraft,
|
|
309
|
+
getSnapshot() {
|
|
310
|
+
if (!draftsSnapshot) {
|
|
311
|
+
const ids = new Set([
|
|
312
|
+
...drafts.keys(),
|
|
313
|
+
...seams.sketches.getSnapshot().documents.flatMap((document) => sketchOwner(document) ?? []),
|
|
314
|
+
]);
|
|
315
|
+
draftsSnapshot = { projectId, drafts: [...ids].flatMap((id) => getDraft(id) ?? []) };
|
|
316
|
+
}
|
|
317
|
+
return draftsSnapshot;
|
|
318
|
+
},
|
|
319
|
+
subscribe(listener) {
|
|
320
|
+
draftListeners.add(listener);
|
|
321
|
+
return () => draftListeners.delete(listener);
|
|
322
|
+
},
|
|
323
|
+
canEdit,
|
|
324
|
+
isLocked: (id) => id === undefined ? locked.size > 0 : locked.has(id),
|
|
325
|
+
lock(id) {
|
|
326
|
+
if (locked.has(id))
|
|
327
|
+
throw new Error("This iteration is already saving.");
|
|
328
|
+
locked.add(id);
|
|
329
|
+
return () => { locked.delete(id); };
|
|
330
|
+
},
|
|
331
|
+
activate,
|
|
332
|
+
commitChanges(incoming, verificationTargets) {
|
|
333
|
+
if (incoming.length === 0)
|
|
334
|
+
return "unchanged";
|
|
335
|
+
const contents = draftState().contents;
|
|
336
|
+
const changes = incoming.reduce((current, change) => mergeChange(current, change), [...contents.changes]);
|
|
337
|
+
if (sameEffectiveChanges([...contents.changes], changes))
|
|
338
|
+
return "unchanged";
|
|
339
|
+
return commitActive({ ...contents, changes }, { kind: "edit", verificationTargets }) ? "applied" : "blocked";
|
|
340
|
+
},
|
|
341
|
+
revertChange(change) {
|
|
342
|
+
const contents = draftState().contents;
|
|
343
|
+
const changes = contents.changes.filter((candidate) => changeKey(candidate) !== changeKey(change));
|
|
344
|
+
return changes.length !== contents.changes.length && commitActive({ ...contents, changes });
|
|
345
|
+
},
|
|
346
|
+
discardChanges(target) {
|
|
347
|
+
const contents = draftState().contents;
|
|
348
|
+
const changes = contents.changes.filter((change) => target.kind === "selector"
|
|
349
|
+
? selectorForChange(change) !== target.selector
|
|
350
|
+
: !isElementChange(change) || change.instanceOverride?.id !== target.id);
|
|
351
|
+
return changes.length !== contents.changes.length && commitActive({ ...contents, changes });
|
|
352
|
+
},
|
|
353
|
+
commitStructuralChange(change) {
|
|
354
|
+
const contents = draftState().contents;
|
|
355
|
+
if (contents.structuralChanges.some((candidate) => candidate.id === change.id))
|
|
356
|
+
return false;
|
|
357
|
+
return commitActive({ ...contents, structuralChanges: [...contents.structuralChanges, change] });
|
|
358
|
+
},
|
|
359
|
+
revertStructuralChange(changeId) {
|
|
360
|
+
const contents = draftState().contents;
|
|
361
|
+
const structuralChanges = contents.structuralChanges.filter((change) => change.id !== changeId);
|
|
362
|
+
return structuralChanges.length !== contents.structuralChanges.length && commitActive({ ...contents, structuralChanges });
|
|
363
|
+
},
|
|
364
|
+
commitContents: (next) => !sameDraftContents(draftState().contents, next) && commitActive(next),
|
|
365
|
+
undo: () => replay("undo"),
|
|
366
|
+
redo: () => replay("redo"),
|
|
367
|
+
reconcile(id, verifiedKeys, verifiedStructuralIds) {
|
|
368
|
+
if (!canEdit(id))
|
|
369
|
+
return 0;
|
|
370
|
+
const draft = draftState(id);
|
|
371
|
+
const retain = (value) => ({
|
|
372
|
+
changes: value.changes.filter((change) => !verifiedKeys.has(changeKey(change))),
|
|
373
|
+
structuralChanges: value.structuralChanges.filter((change) => !verifiedStructuralIds.has(change.id)),
|
|
374
|
+
});
|
|
375
|
+
const next = retain(draft.contents);
|
|
376
|
+
const removed = draft.contents.changes.length - next.changes.length
|
|
377
|
+
+ draft.contents.structuralChanges.length - next.structuralChanges.length;
|
|
378
|
+
if (removed === 0)
|
|
379
|
+
return 0;
|
|
380
|
+
mutate(() => {
|
|
381
|
+
replaceContents(draft, next);
|
|
382
|
+
seams.timeline.pruneDraftHistory(id, retain, sameDraftContents);
|
|
383
|
+
if (id === activeId())
|
|
384
|
+
project({ kind: "reconcile", structuralIds: verifiedStructuralIds });
|
|
385
|
+
});
|
|
386
|
+
return removed;
|
|
387
|
+
},
|
|
388
|
+
clear: (id, expectedRevision) => clear(id, { kind: "edit" }, expectedRevision),
|
|
389
|
+
clearActive: () => clear(activeId(), { kind: "reset" }),
|
|
390
|
+
forget(id) {
|
|
391
|
+
if (!drafts.has(id) || locked.has(id))
|
|
392
|
+
return;
|
|
393
|
+
mutate(() => {
|
|
394
|
+
seams.timeline.discardDraftHistory(id);
|
|
395
|
+
drafts.delete(id);
|
|
396
|
+
contentsChanged();
|
|
397
|
+
if (id === activeId())
|
|
398
|
+
project({ kind: "edit" });
|
|
399
|
+
});
|
|
400
|
+
},
|
|
401
|
+
sketchOwner,
|
|
402
|
+
assignSketch(draftId, sketchId) {
|
|
403
|
+
if (sketchOwners.get(sketchId) === draftId || !targetFromKey(draftId))
|
|
404
|
+
return;
|
|
405
|
+
sketchOwners.set(sketchId, draftId);
|
|
406
|
+
draftsChanged();
|
|
407
|
+
},
|
|
408
|
+
load(nextProjectId, options = {}) {
|
|
409
|
+
mutate(() => {
|
|
410
|
+
projectId = nextProjectId;
|
|
411
|
+
persistent = options.persistent ?? true;
|
|
412
|
+
sketchOwners.clear();
|
|
413
|
+
resetContents();
|
|
414
|
+
try {
|
|
415
|
+
restore();
|
|
416
|
+
}
|
|
417
|
+
catch {
|
|
418
|
+
resetContents();
|
|
419
|
+
sketchOwners.clear();
|
|
420
|
+
}
|
|
421
|
+
contentsChanged();
|
|
422
|
+
project({ kind: "switch" });
|
|
423
|
+
});
|
|
424
|
+
},
|
|
425
|
+
persist() {
|
|
426
|
+
if (!projectId || !persistent || !seams.canWrite())
|
|
427
|
+
return;
|
|
428
|
+
try {
|
|
429
|
+
seams.storage.write(storageKey(), JSON.stringify(persisted()));
|
|
430
|
+
}
|
|
431
|
+
catch {
|
|
432
|
+
return;
|
|
433
|
+
}
|
|
434
|
+
},
|
|
435
|
+
discardAll() {
|
|
436
|
+
if (projectId && persistent && seams.canWrite()) {
|
|
437
|
+
try {
|
|
438
|
+
seams.storage.remove(storageKey());
|
|
439
|
+
}
|
|
440
|
+
catch {
|
|
441
|
+
return;
|
|
442
|
+
}
|
|
443
|
+
}
|
|
444
|
+
mutate(() => {
|
|
445
|
+
sketchOwners.clear();
|
|
446
|
+
resetContents();
|
|
447
|
+
contentsChanged();
|
|
448
|
+
project({ kind: "reset" });
|
|
449
|
+
});
|
|
450
|
+
},
|
|
451
|
+
reset() {
|
|
452
|
+
mutate(() => {
|
|
453
|
+
projectId = "";
|
|
454
|
+
persistent = true;
|
|
455
|
+
sketchOwners.clear();
|
|
456
|
+
resetContents();
|
|
457
|
+
contentsChanged();
|
|
458
|
+
});
|
|
459
|
+
},
|
|
460
|
+
};
|
|
461
|
+
}
|