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
|
@@ -63,13 +63,7 @@ function copyContribution(contribution) {
|
|
|
63
63
|
function sameObservationFacts(observation, artifact) {
|
|
64
64
|
return JSON.stringify(observation.artifact) === JSON.stringify(artifact);
|
|
65
65
|
}
|
|
66
|
-
/**
|
|
67
|
-
* Scalar-only equality over stylesheet artifacts, used as a cheap pre-parse
|
|
68
|
-
* no-op guard: identical re-feeds (the common HMR case) must not pay for a
|
|
69
|
-
* PostCSS parse. Every field is enumerated so a future artifact field cannot
|
|
70
|
-
* silently bypass the guard; diagnostics are rare and small, so they alone
|
|
71
|
-
* compare by serialization — content strings never do.
|
|
72
|
-
*/
|
|
66
|
+
/** Each artifact field is enumerated so a new one cannot silently bypass the pre-parse no-op guard. */
|
|
73
67
|
function sameArtifactScalars(a, b) {
|
|
74
68
|
return a.buildTool === b.buildTool
|
|
75
69
|
&& a.id === b.id
|
|
@@ -136,8 +130,7 @@ function reconcileObservations(entry) {
|
|
|
136
130
|
const authoredNames = new Set(authored?.contribution.definitions.map((definition) => definition.cssName) ?? []);
|
|
137
131
|
return facts.contribution.definitions.map((definition) => {
|
|
138
132
|
const transformOnly = authored !== undefined && !authoredNames.has(definition.cssName);
|
|
139
|
-
//
|
|
140
|
-
// stronger provenance and survives compilation.
|
|
133
|
+
// Transform-only names are compiler-owned; package provenance is stronger and survives compilation.
|
|
141
134
|
const origin = transformOnly && facts.artifact.provenance !== "package"
|
|
142
135
|
? "generated"
|
|
143
136
|
: facts.artifact.provenance;
|
|
@@ -256,8 +249,7 @@ export function createTokenInventory() {
|
|
|
256
249
|
}
|
|
257
250
|
const current = artifact.stage === "authored" ? entry.authored : entry.transformed;
|
|
258
251
|
const isRecoveringFailedTransform = artifact.stage === "transformed" && entry.transformFailed === true;
|
|
259
|
-
//
|
|
260
|
-
// flag is set always falls through so recovery still lands.
|
|
252
|
+
// A transformed-stage re-feed while the failure flag is set always falls through so recovery lands.
|
|
261
253
|
if (current && !isRecoveringFailedTransform
|
|
262
254
|
&& sameArtifactScalars(current.artifact, artifact))
|
|
263
255
|
return;
|
|
@@ -340,11 +332,7 @@ export function createTokenInventory() {
|
|
|
340
332
|
};
|
|
341
333
|
}
|
|
342
334
|
}
|
|
343
|
-
//
|
|
344
|
-
// append, `name`/`adapter` win, and
|
|
345
|
-
// `origin`/`editable` are applied only when the stylesheet-derived
|
|
346
|
-
// definition has none. Unmatched entries are ignored (a contract
|
|
347
|
-
// variable absent from active CSS adds no row).
|
|
335
|
+
// Contributed declarations append; name/adapter override, origin/editable only fill gaps.
|
|
348
336
|
for (const definition of contribution.definitions ?? []) {
|
|
349
337
|
const existing = merged.get(definition.cssName);
|
|
350
338
|
if (!existing)
|
|
@@ -1,16 +1,8 @@
|
|
|
1
1
|
import type { TokenDefinition } from "../model/index.js";
|
|
2
2
|
import type { InventoryDiagnostic, StylesheetArtifact } from "./types.js";
|
|
3
|
-
/** The parsed contribution of one stylesheet artifact. */
|
|
4
3
|
export interface ParsedContribution {
|
|
5
4
|
readonly definitions: readonly TokenDefinition[];
|
|
6
5
|
readonly diagnostics: readonly InventoryDiagnostic[];
|
|
7
6
|
}
|
|
8
|
-
/**
|
|
9
|
-
* Parse one stylesheet artifact into grouped definitions plus diagnostics.
|
|
10
|
-
*
|
|
11
|
-
* The returned declarations carry `id` (stable per declaration) and the
|
|
12
|
-
* definition list preserves source order. `order` is assigned by the
|
|
13
|
-
* inventory during snapshot assembly because it is a positional fact across
|
|
14
|
-
* artifacts, not a per-artifact one.
|
|
15
|
-
*/
|
|
7
|
+
/** `order` is assigned by the inventory because it is positional across artifacts, not per-artifact. */
|
|
16
8
|
export declare function parseStylesheetArtifact(artifact: StylesheetArtifact): ParsedContribution;
|
|
@@ -1,28 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Internal ordinary-CSS parsing for the token inventory.
|
|
3
|
-
*
|
|
4
|
-
* This is the canonical home of the parsing previously owned by the plugin's
|
|
5
|
-
* legacy `parseTokens`/`parseTokenCatalog` projections (removed in S2-D).
|
|
6
|
-
* Behavior is preserved exactly for root/host themes, contextual selectors,
|
|
7
|
-
* wrapper capture, duplicate declarations, importance, and source locations;
|
|
8
|
-
* the two differences are:
|
|
9
|
-
*
|
|
10
|
-
* 1. Declarations carry a deterministic `id` and a `source`-anchored local
|
|
11
|
-
* order so the inventory can aggregate without Vite.
|
|
12
|
-
* 2. Malformed CSS no longer silently yields an empty list — it produces a
|
|
13
|
-
* structured `stylesheet-parse-failed` diagnostic plus an empty
|
|
14
|
-
* contribution for that artifact.
|
|
15
|
-
*
|
|
16
|
-
* This module runs at build time only (Node) and is not reachable from the
|
|
17
|
-
* browser-safe subpaths.
|
|
18
|
-
*/
|
|
19
1
|
import postcss, {} from "postcss";
|
|
20
2
|
import { GLOBAL_TOKEN_AT_RULES, MIN_THEME_TABLE_DECLARATIONS } from "./policy.js";
|
|
21
|
-
/**
|
|
22
|
-
* Deterministic declaration identity, keyed by (artifact id, cssName, source
|
|
23
|
-
* line, context, local order). The id does not depend on event-batch timing:
|
|
24
|
-
* the same facts always produce the same ids.
|
|
25
|
-
*/
|
|
3
|
+
/** Deterministic per declaration: identical facts always produce the same id. */
|
|
26
4
|
function declarationId(artifact, cssName, source, context, localOrder) {
|
|
27
5
|
return `${artifact.buildTool}\u0000${artifact.id}\u0000${artifact.stage}`
|
|
28
6
|
+ `\u0000${cssName}\u0000${source}\u0000${JSON.stringify(context)}\u0000${localOrder}`;
|
|
@@ -37,12 +15,7 @@ function isRootOnlySelector(rule) {
|
|
|
37
15
|
const parts = rule.selector.split(",").map((s) => s.trim());
|
|
38
16
|
return parts.length > 0 && parts.every(isRootSelectorPart);
|
|
39
17
|
}
|
|
40
|
-
/**
|
|
41
|
-
* Scoped theme-table policy — see `policy.ts` for the named constant and
|
|
42
|
-
* rationale. A sufficiently large rule made entirely of custom properties is a
|
|
43
|
-
* theme table, not a component-local variable declaration; its selector is
|
|
44
|
-
* retained in the catalog and resolved against the selected element later.
|
|
45
|
-
*/
|
|
18
|
+
/** A large rule made entirely of custom properties is a theme table; see the policy in `policy.ts`. */
|
|
46
19
|
function isScopedThemeTable(rule) {
|
|
47
20
|
const declarations = rule.nodes?.filter((node) => node.type === "decl") ?? [];
|
|
48
21
|
return declarations.length >= MIN_THEME_TABLE_DECLARATIONS
|
|
@@ -55,9 +28,7 @@ function isAtRule(node) {
|
|
|
55
28
|
return node.type === "atrule";
|
|
56
29
|
}
|
|
57
30
|
function nearestGlobalAncestor(decl) {
|
|
58
|
-
//
|
|
59
|
-
// BEFORE encountering any non-:root rule. A non-:root rule (e.g. .button)
|
|
60
|
-
// inside @layer still means the declaration is local, not a global token.
|
|
31
|
+
// Global only when a :root rule or global at-rule is reached before any other rule.
|
|
61
32
|
let cur = decl.parent;
|
|
62
33
|
while (cur) {
|
|
63
34
|
if (isRule(cur)) {
|
|
@@ -84,8 +55,7 @@ function declarationContext(decl) {
|
|
|
84
55
|
}
|
|
85
56
|
else if (isAtRule(current)) {
|
|
86
57
|
if (current.name === "media" || current.name === "supports" || current.name === "scope" || current.name === "layer") {
|
|
87
|
-
// Parents are visited inner-to-outer
|
|
88
|
-
// nesting order and retain repeated/interleaved wrapper kinds.
|
|
58
|
+
// Parents are visited inner-to-outer, so prepend to keep source nesting order.
|
|
89
59
|
wrappers.unshift({ kind: current.name, params: current.params });
|
|
90
60
|
}
|
|
91
61
|
}
|
|
@@ -95,14 +65,7 @@ function declarationContext(decl) {
|
|
|
95
65
|
context.wrappers = wrappers;
|
|
96
66
|
return context;
|
|
97
67
|
}
|
|
98
|
-
/**
|
|
99
|
-
* Parse one stylesheet artifact into grouped definitions plus diagnostics.
|
|
100
|
-
*
|
|
101
|
-
* The returned declarations carry `id` (stable per declaration) and the
|
|
102
|
-
* definition list preserves source order. `order` is assigned by the
|
|
103
|
-
* inventory during snapshot assembly because it is a positional fact across
|
|
104
|
-
* artifacts, not a per-artifact one.
|
|
105
|
-
*/
|
|
68
|
+
/** `order` is assigned by the inventory because it is positional across artifacts, not per-artifact. */
|
|
106
69
|
export function parseStylesheetArtifact(artifact) {
|
|
107
70
|
const content = artifact.content ?? "";
|
|
108
71
|
let root;
|
|
@@ -1,43 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Explicit inventory policies behind ordinary CSS parsing.
|
|
3
|
-
*
|
|
4
|
-
* Parsing must not bury heuristics as unexplained constants. This module names
|
|
5
|
-
* each policy, documents its rationale, and pins both directions of the
|
|
6
|
-
* trade-off with tests in `parseStylesheet.test.ts`.
|
|
7
|
-
*/
|
|
8
|
-
/**
|
|
9
|
-
* At-rules that make a nested custom-property declaration global regardless of
|
|
10
|
-
* an enclosing selector: `@theme` (Tailwind v4), `@layer`, and `@scope`.
|
|
11
|
-
*
|
|
12
|
-
* Deliberately NOT included: `@media`, `@supports`, and `@container`. A bare
|
|
13
|
-
* custom property directly inside those wrappers (without `:root`/`:host`) is
|
|
14
|
-
* not a global token — see the false-positive guards in the parsing tests.
|
|
15
|
-
*/
|
|
1
|
+
/** Custom properties directly under these at-rules are global; `@media`, `@supports` and `@container` deliberately are not. */
|
|
16
2
|
export declare const GLOBAL_TOKEN_AT_RULES: Set<string>;
|
|
17
|
-
/**
|
|
18
|
-
* Minimum declaration count for a scoped rule to be treated as a theme table.
|
|
19
|
-
*
|
|
20
|
-
* Rationale: published design systems often scope an entire theme beneath a
|
|
21
|
-
* class on the application shell (for example to support multiple themes on
|
|
22
|
-
* one page) instead of `:root`. A rule that is large enough AND made entirely
|
|
23
|
-
* of custom-property declarations is treated as a theme table, so its selector
|
|
24
|
-
* is retained in the catalog and resolved against the selected element later.
|
|
25
|
-
*
|
|
26
|
-
* The threshold is a deliberately explicit policy with two documented edges,
|
|
27
|
-
* both pinned by tests:
|
|
28
|
-
*
|
|
29
|
-
* - False positive: a component-local rule with many custom properties (at or
|
|
30
|
-
* above the threshold) is admitted as a theme table even though it is local
|
|
31
|
-
* to the component. Accepted so genuine multi-variable theme tables keep
|
|
32
|
-
* working; a cleaner fix needs selector heuristics that are out of scope for
|
|
33
|
-
* ordinary-CSS parsing.
|
|
34
|
-
* - False negative: a real theme table with fewer than the threshold
|
|
35
|
-
* declarations is rejected. Accepted so small component-local rules do not
|
|
36
|
-
* leak into the global catalog.
|
|
37
|
-
*
|
|
38
|
-
* The threshold is a count of direct custom-property declarations on the rule,
|
|
39
|
-
* not a line count and not an estimate of selector breadth.
|
|
40
|
-
*/
|
|
3
|
+
/** At or above this many direct custom-property declarations a scoped rule is treated as a theme table. */
|
|
41
4
|
export declare const MIN_THEME_TABLE_DECLARATIONS = 8;
|
|
42
5
|
export interface ScopedThemeTablePolicy {
|
|
43
6
|
readonly minDeclarations: number;
|
|
@@ -1,43 +1,6 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Explicit inventory policies behind ordinary CSS parsing.
|
|
3
|
-
*
|
|
4
|
-
* Parsing must not bury heuristics as unexplained constants. This module names
|
|
5
|
-
* each policy, documents its rationale, and pins both directions of the
|
|
6
|
-
* trade-off with tests in `parseStylesheet.test.ts`.
|
|
7
|
-
*/
|
|
8
|
-
/**
|
|
9
|
-
* At-rules that make a nested custom-property declaration global regardless of
|
|
10
|
-
* an enclosing selector: `@theme` (Tailwind v4), `@layer`, and `@scope`.
|
|
11
|
-
*
|
|
12
|
-
* Deliberately NOT included: `@media`, `@supports`, and `@container`. A bare
|
|
13
|
-
* custom property directly inside those wrappers (without `:root`/`:host`) is
|
|
14
|
-
* not a global token — see the false-positive guards in the parsing tests.
|
|
15
|
-
*/
|
|
1
|
+
/** Custom properties directly under these at-rules are global; `@media`, `@supports` and `@container` deliberately are not. */
|
|
16
2
|
export const GLOBAL_TOKEN_AT_RULES = new Set(["theme", "layer", "scope"]);
|
|
17
|
-
/**
|
|
18
|
-
* Minimum declaration count for a scoped rule to be treated as a theme table.
|
|
19
|
-
*
|
|
20
|
-
* Rationale: published design systems often scope an entire theme beneath a
|
|
21
|
-
* class on the application shell (for example to support multiple themes on
|
|
22
|
-
* one page) instead of `:root`. A rule that is large enough AND made entirely
|
|
23
|
-
* of custom-property declarations is treated as a theme table, so its selector
|
|
24
|
-
* is retained in the catalog and resolved against the selected element later.
|
|
25
|
-
*
|
|
26
|
-
* The threshold is a deliberately explicit policy with two documented edges,
|
|
27
|
-
* both pinned by tests:
|
|
28
|
-
*
|
|
29
|
-
* - False positive: a component-local rule with many custom properties (at or
|
|
30
|
-
* above the threshold) is admitted as a theme table even though it is local
|
|
31
|
-
* to the component. Accepted so genuine multi-variable theme tables keep
|
|
32
|
-
* working; a cleaner fix needs selector heuristics that are out of scope for
|
|
33
|
-
* ordinary-CSS parsing.
|
|
34
|
-
* - False negative: a real theme table with fewer than the threshold
|
|
35
|
-
* declarations is rejected. Accepted so small component-local rules do not
|
|
36
|
-
* leak into the global catalog.
|
|
37
|
-
*
|
|
38
|
-
* The threshold is a count of direct custom-property declarations on the rule,
|
|
39
|
-
* not a line count and not an estimate of selector breadth.
|
|
40
|
-
*/
|
|
3
|
+
/** At or above this many direct custom-property declarations a scoped rule is treated as a theme table. */
|
|
41
4
|
export const MIN_THEME_TABLE_DECLARATIONS = 8;
|
|
42
5
|
export const SCOPED_THEME_TABLE_POLICY = {
|
|
43
6
|
minDeclarations: MIN_THEME_TABLE_DECLARATIONS,
|
|
@@ -1,20 +1,12 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Token inventory contracts: artifact input, normalized styling contributions,
|
|
3
|
-
* diagnostics, and immutable snapshots.
|
|
4
|
-
*
|
|
5
|
-
* This Node/build-time seam is intentionally absent from the browser-safe
|
|
6
|
-
* `nudge-ui/css` export graph.
|
|
7
|
-
*/
|
|
8
1
|
import type { TokenCatalogDiagnosticCode, TokenDefinition, TokenDeclaration, TokenEntry, TokenOrigin } from "../model/index.js";
|
|
9
2
|
export type ArtifactStage = "authored" | "transformed";
|
|
10
3
|
export type ArtifactProvenance = TokenOrigin;
|
|
11
|
-
/** One authored or transformed observation supplied by a build-tool Adapter. */
|
|
12
4
|
export interface StylesheetArtifact {
|
|
13
5
|
readonly buildTool: string;
|
|
14
6
|
readonly id: string;
|
|
15
7
|
readonly stage: ArtifactStage;
|
|
16
8
|
readonly provenance: ArtifactProvenance;
|
|
17
|
-
/**
|
|
9
|
+
/** Only when the Adapter can prove the stylesheet/import order. */
|
|
18
10
|
readonly order?: number;
|
|
19
11
|
/** Deterministic scan rank when browser/cascade order is not known. */
|
|
20
12
|
readonly discoveryOrder?: number;
|
|
@@ -23,7 +15,6 @@ export interface StylesheetArtifact {
|
|
|
23
15
|
readonly adapter?: string;
|
|
24
16
|
/** A recoverable transformed-observation failure; authored facts are retained. */
|
|
25
17
|
readonly failed?: boolean;
|
|
26
|
-
/** Adapter failures associated with this observation. */
|
|
27
18
|
readonly diagnostics?: readonly ArtifactDiagnosticInput[];
|
|
28
19
|
}
|
|
29
20
|
export interface ArtifactDiagnosticInput {
|
|
@@ -68,17 +59,13 @@ export interface InventoryTokenDeclaration extends Omit<TokenDeclaration, "order
|
|
|
68
59
|
export interface InventoryTokenDefinition extends Omit<TokenDefinition, "declarations"> {
|
|
69
60
|
readonly declarations: readonly InventoryTokenDeclaration[];
|
|
70
61
|
}
|
|
71
|
-
/** Declarative metadata rewrite for matching aggregated definitions. */
|
|
72
62
|
export interface TokenDefinitionRelabelling {
|
|
73
63
|
readonly adapter: string;
|
|
74
64
|
readonly fromOrigin: TokenOrigin;
|
|
75
65
|
readonly origin?: TokenOrigin;
|
|
76
66
|
readonly editable?: boolean;
|
|
77
67
|
}
|
|
78
|
-
/**
|
|
79
|
-
* A normalized styling contribution. Re-applying the same `id` replaces its
|
|
80
|
-
* prior facts; contribution order is explicit or deterministically id-based.
|
|
81
|
-
*/
|
|
68
|
+
/** Re-applying the same `id` replaces its prior facts. */
|
|
82
69
|
export interface TokenContribution {
|
|
83
70
|
readonly id: string;
|
|
84
71
|
readonly tokens?: readonly TokenEntry[];
|
|
@@ -9,7 +9,6 @@ export declare const BORDER_INITIAL: {
|
|
|
9
9
|
readonly style: "none";
|
|
10
10
|
readonly color: "currentcolor";
|
|
11
11
|
};
|
|
12
|
-
/** Width/style/color components of a decomposable border value. */
|
|
13
12
|
export interface BorderComponents {
|
|
14
13
|
width: string;
|
|
15
14
|
style: string;
|
|
@@ -18,11 +17,5 @@ export interface BorderComponents {
|
|
|
18
17
|
styleResult: TokenValueInterpretation;
|
|
19
18
|
colorResult: TokenValueInterpretation;
|
|
20
19
|
}
|
|
21
|
-
/**
|
|
22
|
-
* Conservative border-shorthand classification: splits the authored value
|
|
23
|
-
* into width/style/color components with CSS initial values for omitted parts,
|
|
24
|
-
* and interprets each distinct component once. Returns null when the value
|
|
25
|
-
* cannot be decomposed faithfully (ambiguous component order, image layers,
|
|
26
|
-
* non-token slash forms, css-wide keywords, or multi-value junk).
|
|
27
|
-
*/
|
|
20
|
+
/** Conservative decomposition; null when the value cannot be split faithfully. */
|
|
28
21
|
export declare function parseBorderComponents(value: string, tokenContext: TokenInterpretationContext): BorderComponents | null;
|
|
@@ -1,15 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* Border shorthand structure (plan slice 3.5).
|
|
3
|
-
*
|
|
4
|
-
* One browser-safe Module owns the conservative `border` / `border-side`
|
|
5
|
-
* shorthand decomposition: width/style/color parts, CSS initial values for
|
|
6
|
-
* omitted components, css-wide-keyword rejection, and the explicit rejection
|
|
7
|
-
* of image layers, non-token slash forms, and ambiguous component counts.
|
|
8
|
-
*
|
|
9
|
-
* Browser-safe contract: this module imports only the shared model and the
|
|
10
|
-
* value-semantics token interpreter. It never touches the DOM or CSSOM.
|
|
11
|
-
*/
|
|
12
|
-
import { splitTopLevelWhitespace } from "./cssSyntax.js";
|
|
1
|
+
import { isSingleVarReference, splitTopLevelWhitespace } from "./cssSyntax.js";
|
|
13
2
|
import { interpretTokenValue, } from "./tokenInterpretation.js";
|
|
14
3
|
export const BORDER_STYLES = new Set(["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]);
|
|
15
4
|
export const BORDER_WIDTHS = new Set(["thin", "medium", "thick"]);
|
|
@@ -17,13 +6,7 @@ export const COLOR_KEYWORDS = new Set(["transparent", "currentcolor", "black", "
|
|
|
17
6
|
export const BORDER_CSS_WIDE = new Set(["inherit", "initial", "unset", "revert", "revert-layer"]);
|
|
18
7
|
/** CSS initial values for omitted `border` / `border-*` shorthand components. */
|
|
19
8
|
export const BORDER_INITIAL = { width: "medium", style: "none", color: "currentcolor" };
|
|
20
|
-
/**
|
|
21
|
-
* Conservative border-shorthand classification: splits the authored value
|
|
22
|
-
* into width/style/color components with CSS initial values for omitted parts,
|
|
23
|
-
* and interprets each distinct component once. Returns null when the value
|
|
24
|
-
* cannot be decomposed faithfully (ambiguous component order, image layers,
|
|
25
|
-
* non-token slash forms, css-wide keywords, or multi-value junk).
|
|
26
|
-
*/
|
|
9
|
+
/** Conservative decomposition; null when the value cannot be split faithfully. */
|
|
27
10
|
export function parseBorderComponents(value, tokenContext) {
|
|
28
11
|
const trimmed = value.trim();
|
|
29
12
|
if (!trimmed || BORDER_CSS_WIDE.has(trimmed.toLowerCase()))
|
|
@@ -51,11 +34,10 @@ export function parseBorderComponents(value, tokenContext) {
|
|
|
51
34
|
}
|
|
52
35
|
if (part.includes("/") && !/^var\(/i.test(part))
|
|
53
36
|
return null;
|
|
54
|
-
const isVariable =
|
|
37
|
+
const isVariable = isSingleVarReference(part);
|
|
55
38
|
const interpreted = isVariable ? interpret(part).resolvedValue.trim() : part;
|
|
56
|
-
// A custom property can substitute an entire shorthand
|
|
57
|
-
//
|
|
58
|
-
// would invent structure that the authored declaration does not prove.
|
|
39
|
+
// A custom property can substitute an entire shorthand; unresolved or
|
|
40
|
+
// multi-component results cannot be assigned to one slot.
|
|
59
41
|
if (isVariable && (/^var\(/i.test(interpreted) || splitTopLevelWhitespace(interpreted).length !== 1))
|
|
60
42
|
return null;
|
|
61
43
|
const candidate = interpreted.toLowerCase();
|
|
@@ -1,37 +1,14 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Box and spacing value semantics (plan slice 3.5).
|
|
3
|
-
*
|
|
4
|
-
* One browser-safe Module owns physical and logical box-value expansion:
|
|
5
|
-
* 1–4 value shorthand expansion for `margin`/`padding`/`inset`, two-value
|
|
6
|
-
* expansion for `gap`, border-radius corner names, and the logical→physical
|
|
7
|
-
* side mapping. The logical mapping is a pure function over an explicit
|
|
8
|
-
* `Directionality` fact supplied by the integration (browser CSS inspection
|
|
9
|
-
* reads direction/writing-mode from the selected element); this module never
|
|
10
|
-
* touches the DOM or CSSOM.
|
|
11
|
-
*/
|
|
12
1
|
import type { StringArrayMap } from "./stringMaps.js";
|
|
13
2
|
export declare const SPACING_SIDES: StringArrayMap;
|
|
14
3
|
/** CSS `gap` shorthand order: row gap, then column gap. */
|
|
15
4
|
export declare const GAP_AXES: StringArrayMap;
|
|
16
5
|
export declare const BORDER_RADIUS_CORNERS: StringArrayMap;
|
|
17
|
-
/**
|
|
18
|
-
* Explicit, DOM-free writing facts for logical→physical side mapping. The
|
|
19
|
-
* integration reads `direction` and `writing-mode` from the selected element's
|
|
20
|
-
* computed style and passes them here; the neutral Module applies them.
|
|
21
|
-
*/
|
|
6
|
+
/** Writing facts the integration reads from the selected element's computed style. */
|
|
22
7
|
export interface Directionality {
|
|
23
|
-
/** CSS `direction` value, e.g. `"ltr"` or `"rtl"`. */
|
|
24
8
|
direction: string;
|
|
25
|
-
/** CSS `writing-mode` value, e.g. `"horizontal-tb"` or `"vertical-rl"`. */
|
|
26
9
|
writingMode: string;
|
|
27
10
|
}
|
|
28
11
|
export declare function expandFourValueShorthand<T>(values: readonly T[]): [T, T, T, T] | null;
|
|
29
12
|
export declare function expandTwoValueShorthand<T>(values: readonly T[]): [T, T] | null;
|
|
30
|
-
/**
|
|
31
|
-
* Maps a logical `margin`/`padding`/`inset` property (inline/block forms,
|
|
32
|
-
* with optional start/end edges) to the physical sides it paints, using the
|
|
33
|
-
* element's writing-mode/direction facts. Returns null for non-logical
|
|
34
|
-
* properties. Without directionality the mapping assumes `ltr` /
|
|
35
|
-
* `horizontal-tb`, matching the resolver's element-less behaviour.
|
|
36
|
-
*/
|
|
13
|
+
/** Maps logical margin/padding/inset properties to physical sides; null for non-logical properties. */
|
|
37
14
|
export declare function logicalPhysicalSides(property: string, directionality?: Directionality): string[] | null;
|
|
@@ -33,13 +33,7 @@ export function expandTwoValueShorthand(values) {
|
|
|
33
33
|
return null;
|
|
34
34
|
return values.length === 1 ? [values[0], values[0]] : [values[0], values[1]];
|
|
35
35
|
}
|
|
36
|
-
/**
|
|
37
|
-
* Maps a logical `margin`/`padding`/`inset` property (inline/block forms,
|
|
38
|
-
* with optional start/end edges) to the physical sides it paints, using the
|
|
39
|
-
* element's writing-mode/direction facts. Returns null for non-logical
|
|
40
|
-
* properties. Without directionality the mapping assumes `ltr` /
|
|
41
|
-
* `horizontal-tb`, matching the resolver's element-less behaviour.
|
|
42
|
-
*/
|
|
36
|
+
/** Maps logical margin/padding/inset properties to physical sides; null for non-logical properties. */
|
|
43
37
|
export function logicalPhysicalSides(property, directionality) {
|
|
44
38
|
const match = /^(margin|padding|inset)-(inline|block)(?:-(start|end))?$/.exec(property.toLowerCase());
|
|
45
39
|
if (!match)
|
|
@@ -1,46 +1,18 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Color value semantics (plan slice 3.4).
|
|
3
|
-
*
|
|
4
|
-
* One browser-safe Module owns color format recognition, embedded-alpha
|
|
5
|
-
* detection, opacity modifier interpretation, `color-mix()` handling, color
|
|
6
|
-
* token replacement, and meaning-preserving opacity edits. Interpretation
|
|
7
|
-
* takes explicit token knowledge (a token table, local aliases, and an
|
|
8
|
-
* optional token-reference resolver) and never touches the DOM or CSSOM.
|
|
9
|
-
*
|
|
10
|
-
* Interface invariants:
|
|
11
|
-
* - interpretation never throws on arbitrary input;
|
|
12
|
-
* - edits either preserve the authored meaning or return an explicit
|
|
13
|
-
* `ok: false` result — never a plausible but lossy string;
|
|
14
|
-
* - token-plus-alpha and opacity-token distinctions survive swaps;
|
|
15
|
-
* - framework-specific attribution (Tailwind v3 direct literals and `--tw-*`
|
|
16
|
-
* aliases) stays behind the injected `resolveTokenReference` context.
|
|
17
|
-
*/
|
|
18
1
|
import type { ColorOpacity, ColorValueFacts, TokenEntry, TokenReference, TokenTable } from "../model/index.js";
|
|
19
|
-
/** The resolved facts about one token-backed component of a color expression. */
|
|
20
2
|
export interface ColorComponentResolution {
|
|
21
3
|
tokenName: string | null;
|
|
22
4
|
resolvedValue: string;
|
|
23
5
|
tokens: TokenReference[];
|
|
24
6
|
}
|
|
25
|
-
/** Explicit, DOM-free facts the color interpretation needs. */
|
|
26
7
|
export interface ColorSemanticsContext {
|
|
27
8
|
/** Resolved token table (custom-property name → entry). */
|
|
28
9
|
tokenTable: TokenTable;
|
|
29
10
|
/** Local aliases collected from the selected element's cascade. */
|
|
30
11
|
localAliases?: ReadonlyMap<string, string>;
|
|
31
|
-
/**
|
|
32
|
-
* Resolves a `var()` component (for example an opacity token) to its
|
|
33
|
-
* concrete value and attribution. Supplied by the token interpretation so
|
|
34
|
-
* alias and framework attribution stay in one place. Absent → token-backed
|
|
35
|
-
* components fall back to local aliases, fallbacks, or the raw text.
|
|
36
|
-
*/
|
|
12
|
+
/** Resolves a `var()` component (e.g. an opacity token); absent → local aliases, fallbacks, or the raw text. */
|
|
37
13
|
resolveTokenReference?: (value: string) => ColorComponentResolution | null;
|
|
38
14
|
}
|
|
39
|
-
/**
|
|
40
|
-
* A meaning-preserving color edit. `ok: true` carries the rewritten value;
|
|
41
|
-
* `ok: false` reports explicitly that the transformation cannot be
|
|
42
|
-
* represented faithfully. Callers must treat `ok: false` as "no change".
|
|
43
|
-
*/
|
|
15
|
+
/** Callers must treat `ok: false` as "no change". */
|
|
44
16
|
export type ColorEditResult = {
|
|
45
17
|
ok: true;
|
|
46
18
|
value: string;
|
|
@@ -48,46 +20,21 @@ export type ColorEditResult = {
|
|
|
48
20
|
ok: false;
|
|
49
21
|
reason: "unsupported" | "invalid-opacity";
|
|
50
22
|
};
|
|
51
|
-
/** One high-level color interpretation consumed by token interpretation and UI projection. */
|
|
52
23
|
export interface ColorValueInterpretation {
|
|
53
24
|
opacity?: ColorOpacity;
|
|
54
25
|
facts: ColorValueFacts;
|
|
55
26
|
}
|
|
56
|
-
/**
|
|
57
|
-
* Normalizes an authored opacity to a clamped percent string. Accepts `%`
|
|
58
|
-
* and `0..1` forms; returns null when the input is not a parseable opacity.
|
|
59
|
-
*/
|
|
27
|
+
/** Accepts `%` or `0..1` forms; null when the input is not a parseable opacity. */
|
|
60
28
|
export declare function normalizeOpacityPercent(value: string): string | null;
|
|
61
|
-
/**
|
|
62
|
-
* Interprets the alpha component of one authored color value. Returns a
|
|
63
|
-
* `ColorOpacity` when the value carries a recognized alpha channel (hex,
|
|
64
|
-
* rgb/hsl, or color-mix against transparent), and undefined otherwise.
|
|
65
|
-
*/
|
|
29
|
+
/** Alpha of hex, rgb/hsl, or `color-mix(... transparent)` values; undefined otherwise. */
|
|
66
30
|
export declare function interpretColorOpacity(value: string, ctx: ColorSemanticsContext): ColorOpacity | undefined;
|
|
67
|
-
/** Returns whether a color value carries its own alpha channel. */
|
|
68
31
|
export declare function colorValueHasEmbeddedAlpha(value: string): boolean;
|
|
69
|
-
/** Interprets UI-relevant color shape through the value-semantics seam. */
|
|
70
32
|
export declare function interpretColorValue(value: string, ctx: ColorSemanticsContext): ColorValueInterpretation;
|
|
71
|
-
/**
|
|
72
|
-
* Rewrites the alpha of a supported color expression to a normalized opacity
|
|
73
|
-
* percent. Hex alpha channels are rewritten digit-for-digit, rgb/hsl slash or
|
|
74
|
-
* comma alpha is replaced, `color-mix(... transparent)` reconciles its
|
|
75
|
-
* percentage (or its 100−p mirror), and a bare `var()` wraps into
|
|
76
|
-
* `color-mix(in srgb, var(...) <pct>, transparent)` — unwrapping back to the
|
|
77
|
-
* plain `var()` when the opacity reaches 100%. Unsupported value shapes and
|
|
78
|
-
* unparseable opacities return an explicit `ok: false`.
|
|
79
|
-
*/
|
|
80
33
|
export declare function applyColorOpacity(value: string, opacity: string): ColorEditResult;
|
|
81
|
-
/**
|
|
34
|
+
/** Converts hex to RGB channels so field edits retain percentage precision. */
|
|
82
35
|
export declare function withColorOpacity(color: string, opacity: string): ColorEditResult;
|
|
83
|
-
/** Preserves the previous opacity when the replacement color has no explicit alpha. */
|
|
84
36
|
export declare function replaceColorPreservingOpacity(previous: string, color: string, context: ColorSemanticsContext): ColorEditResult;
|
|
85
|
-
/**
|
|
86
|
-
* Replaces only the color token in a separable color expression. Keeping this
|
|
87
|
-
* separate from a plain token swap preserves authored alpha modifiers, for
|
|
88
|
-
* example Tailwind's `color-mix(... var(--color-red-500) 10%, transparent)`
|
|
89
|
-
* keeps its `10%` when the color token changes.
|
|
90
|
-
*/
|
|
37
|
+
/** Replaces only the color token so authored alpha modifiers survive the swap. */
|
|
91
38
|
export declare function applyColorTokenReplacement(value: string, oldToken: TokenEntry, newToken: TokenEntry): ColorEditResult;
|
|
92
39
|
export type ValueEditRequest = {
|
|
93
40
|
kind: "color-opacity";
|
|
@@ -99,5 +46,4 @@ export type ValueEditRequest = {
|
|
|
99
46
|
currentToken: TokenEntry;
|
|
100
47
|
nextToken: TokenEntry;
|
|
101
48
|
};
|
|
102
|
-
/** The public meaning-preserving edit operation for supported value edits. */
|
|
103
49
|
export declare function applyValueEdit(request: ValueEditRequest): ColorEditResult;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { extractVarCalls, splitTopLevel, splitTopLevelWhitespace, topLevelSlashIndex } from "./cssSyntax.js";
|
|
1
|
+
import { extractVarCalls, isSingleVarReference, splitTopLevel, splitTopLevelWhitespace, topLevelSlashIndex } from "./cssSyntax.js";
|
|
2
2
|
const MIX_PERCENTAGE_OR_TOKEN = /^(?:\d+\.?\d*|\.\d+)%$|^var\([\s\S]+\)$/i;
|
|
3
3
|
const COLOR_FUNCTIONS_WITH_ALPHA_SYNTAX = new Set(["rgb", "hsl", "hwb", "lab", "lch", "oklab", "oklch", "color"]);
|
|
4
4
|
const COLOR_FUNCTION_NAMES = new Set([
|
|
@@ -6,9 +6,8 @@ const COLOR_FUNCTION_NAMES = new Set([
|
|
|
6
6
|
"rgba",
|
|
7
7
|
"hsla",
|
|
8
8
|
]);
|
|
9
|
-
//
|
|
10
|
-
//
|
|
11
|
-
// full opacity preserves the authored keyword.
|
|
9
|
+
// Valid color values without an alpha syntax; opacity edits wrap them in
|
|
10
|
+
// color-mix(), while full opacity preserves the authored keyword.
|
|
12
11
|
const NAMED_COLOR_KEYWORDS = new Set([
|
|
13
12
|
"aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black",
|
|
14
13
|
"blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse",
|
|
@@ -50,10 +49,7 @@ function parseOpacityPercent(value, clamp = true) {
|
|
|
50
49
|
const percent = isPercent ? numeric : numeric * 100;
|
|
51
50
|
return clamp ? Math.max(0, Math.min(100, percent)) : percent;
|
|
52
51
|
}
|
|
53
|
-
/**
|
|
54
|
-
* Normalizes an authored opacity to a clamped percent string. Accepts `%`
|
|
55
|
-
* and `0..1` forms; returns null when the input is not a parseable opacity.
|
|
56
|
-
*/
|
|
52
|
+
/** Accepts `%` or `0..1` forms; null when the input is not a parseable opacity. */
|
|
57
53
|
export function normalizeOpacityPercent(value) {
|
|
58
54
|
const percent = parseOpacityPercent(value);
|
|
59
55
|
return percent === null ? null : formatOpacityPercent(percent);
|
|
@@ -121,12 +117,7 @@ function resolveOpacityPercentage(authoredValue, ctx, clamp = true) {
|
|
|
121
117
|
function resolveOpacityComponent(authoredValue, ctx) {
|
|
122
118
|
return resolveOpacityPercentage(authoredValue, ctx)?.component ?? null;
|
|
123
119
|
}
|
|
124
|
-
/**
|
|
125
|
-
* Derives the alpha component of a `color-mix(...)` whose second argument
|
|
126
|
-
* reconciles a color against `transparent`. The component is the color item's
|
|
127
|
-
* percentage, or the 100−p mirror of the transparent item's percentage when
|
|
128
|
-
* only that one is authored.
|
|
129
|
-
*/
|
|
120
|
+
/** Opacity of a `color-mix(... transparent)` value: the color item's percentage, or the 100−p mirror when only the transparent item is authored. */
|
|
130
121
|
function resolveColorMixOpacity(value, ctx) {
|
|
131
122
|
const open = value.indexOf("(");
|
|
132
123
|
const close = value.lastIndexOf(")");
|
|
@@ -185,11 +176,7 @@ function resolveColorMixOpacity(value, ctx) {
|
|
|
185
176
|
source: "color-mix",
|
|
186
177
|
};
|
|
187
178
|
}
|
|
188
|
-
/**
|
|
189
|
-
* Interprets the alpha component of one authored color value. Returns a
|
|
190
|
-
* `ColorOpacity` when the value carries a recognized alpha channel (hex,
|
|
191
|
-
* rgb/hsl, or color-mix against transparent), and undefined otherwise.
|
|
192
|
-
*/
|
|
179
|
+
/** Alpha of hex, rgb/hsl, or `color-mix(... transparent)` values; undefined otherwise. */
|
|
193
180
|
export function interpretColorOpacity(value, ctx) {
|
|
194
181
|
const trimmed = value.trim();
|
|
195
182
|
const hex = /^#([\da-f]{4}|[\da-f]{8})$/i.exec(trimmed);
|
|
@@ -225,7 +212,6 @@ export function interpretColorOpacity(value, ctx) {
|
|
|
225
212
|
return resolveColorMixOpacity(trimmed, ctx);
|
|
226
213
|
return undefined;
|
|
227
214
|
}
|
|
228
|
-
/** Returns whether a color value carries its own alpha channel. */
|
|
229
215
|
export function colorValueHasEmbeddedAlpha(value) {
|
|
230
216
|
const trimmed = value.trim();
|
|
231
217
|
if (/^transparent$/i.test(trimmed))
|
|
@@ -253,7 +239,6 @@ export function colorValueHasEmbeddedAlpha(value) {
|
|
|
253
239
|
return item.color.toLowerCase() === "transparent" || colorValueHasEmbeddedAlpha(item.color);
|
|
254
240
|
});
|
|
255
241
|
}
|
|
256
|
-
/** Interprets UI-relevant color shape through the value-semantics seam. */
|
|
257
242
|
export function interpretColorValue(value, ctx) {
|
|
258
243
|
const trimmed = value.trim();
|
|
259
244
|
return {
|
|
@@ -338,21 +323,12 @@ function replaceColorMixOpacity(value, opacity) {
|
|
|
338
323
|
}
|
|
339
324
|
return `${value.slice(0, open + 1)}${updated.join(", ")}${value.slice(close)}`;
|
|
340
325
|
}
|
|
341
|
-
/**
|
|
342
|
-
* Rewrites the alpha of a supported color expression to a normalized opacity
|
|
343
|
-
* percent. Hex alpha channels are rewritten digit-for-digit, rgb/hsl slash or
|
|
344
|
-
* comma alpha is replaced, `color-mix(... transparent)` reconciles its
|
|
345
|
-
* percentage (or its 100−p mirror), and a bare `var()` wraps into
|
|
346
|
-
* `color-mix(in srgb, var(...) <pct>, transparent)` — unwrapping back to the
|
|
347
|
-
* plain `var()` when the opacity reaches 100%. Unsupported value shapes and
|
|
348
|
-
* unparseable opacities return an explicit `ok: false`.
|
|
349
|
-
*/
|
|
350
326
|
export function applyColorOpacity(value, opacity) {
|
|
351
327
|
const normalized = normalizeOpacityPercent(opacity);
|
|
352
328
|
if (normalized === null)
|
|
353
329
|
return { ok: false, reason: "invalid-opacity" };
|
|
354
330
|
const trimmed = value.trim();
|
|
355
|
-
if (
|
|
331
|
+
if (isSingleVarReference(trimmed)) {
|
|
356
332
|
return normalized === "100%"
|
|
357
333
|
? { ok: true, value: trimmed }
|
|
358
334
|
: { ok: true, value: `color-mix(in srgb, ${trimmed} ${normalized}, transparent)` };
|
|
@@ -398,7 +374,7 @@ export function applyColorOpacity(value, opacity) {
|
|
|
398
374
|
}
|
|
399
375
|
return { ok: false, reason: "unsupported" };
|
|
400
376
|
}
|
|
401
|
-
/**
|
|
377
|
+
/** Converts hex to RGB channels so field edits retain percentage precision. */
|
|
402
378
|
export function withColorOpacity(color, opacity) {
|
|
403
379
|
const hex = /^#([\da-f]{3}|[\da-f]{4}|[\da-f]{6}|[\da-f]{8})$/i.exec(color.trim());
|
|
404
380
|
if (hex) {
|
|
@@ -408,7 +384,6 @@ export function withColorOpacity(color, opacity) {
|
|
|
408
384
|
}
|
|
409
385
|
return applyColorOpacity(color, opacity);
|
|
410
386
|
}
|
|
411
|
-
/** Preserves the previous opacity when the replacement color has no explicit alpha. */
|
|
412
387
|
export function replaceColorPreservingOpacity(previous, color, context) {
|
|
413
388
|
const opacity = interpretColorOpacity(previous, context);
|
|
414
389
|
return opacity && !colorValueHasEmbeddedAlpha(color)
|
|
@@ -498,12 +473,7 @@ function replaceColorMixColor(value, oldValue, nextColor) {
|
|
|
498
473
|
function escapeRegExp(value) {
|
|
499
474
|
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
500
475
|
}
|
|
501
|
-
/**
|
|
502
|
-
* Replaces only the color token in a separable color expression. Keeping this
|
|
503
|
-
* separate from a plain token swap preserves authored alpha modifiers, for
|
|
504
|
-
* example Tailwind's `color-mix(... var(--color-red-500) 10%, transparent)`
|
|
505
|
-
* keeps its `10%` when the color token changes.
|
|
506
|
-
*/
|
|
476
|
+
/** Replaces only the color token so authored alpha modifiers survive the swap. */
|
|
507
477
|
export function applyColorTokenReplacement(value, oldToken, newToken) {
|
|
508
478
|
const nextName = tokenReferenceName(newToken);
|
|
509
479
|
if (nextName) {
|
|
@@ -534,7 +504,6 @@ export function applyColorTokenReplacement(value, oldToken, newToken) {
|
|
|
534
504
|
return { ok: true, value: mixReplacement };
|
|
535
505
|
return { ok: false, reason: "unsupported" };
|
|
536
506
|
}
|
|
537
|
-
/** The public meaning-preserving edit operation for supported value edits. */
|
|
538
507
|
export function applyValueEdit(request) {
|
|
539
508
|
if (request.kind === "color-opacity") {
|
|
540
509
|
return applyColorOpacity(request.authored, request.opacity);
|