nudge-ui 0.2.5 → 0.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/agentCommand.d.ts +0 -1
- package/dist/cli/agentCommand.js +0 -1
- package/dist/client.mjs +238 -122
- package/dist/compiler/ast.d.ts +0 -6
- package/dist/compiler/ast.js +0 -5
- package/dist/compiler/componentContractTypes.d.ts +11 -5
- package/dist/compiler/componentContracts.js +3 -9
- package/dist/compiler/componentInstrumentation.d.ts +2 -13
- package/dist/compiler/componentInstrumentation.js +3 -12
- package/dist/compiler/componentPolicyResolution.d.ts +3 -22
- package/dist/compiler/componentPolicyResolution.js +6 -38
- package/dist/compiler/identityAttributes.d.ts +2 -0
- package/dist/compiler/identityAttributes.js +2 -0
- package/dist/compiler/index.d.ts +0 -1
- package/dist/compiler/index.js +0 -1
- package/dist/compiler/packageComponentContracts.d.ts +10 -19
- package/dist/compiler/packageComponentContracts.js +60 -43
- package/dist/compiler/reactComponentProtocols.d.ts +0 -7
- package/dist/compiler/reactComponentProtocols.js +0 -7
- package/dist/compiler/reactIdentity.d.ts +2 -2
- package/dist/compiler/reactIdentity.js +41 -43
- package/dist/compiler/sourcePaths.d.ts +4 -8
- package/dist/compiler/sourcePaths.js +6 -8
- package/dist/css/dialects/index.d.ts +2 -21
- package/dist/css/dialects/index.js +2 -9
- package/dist/css/dialects/tailwind.d.ts +2 -16
- package/dist/css/dialects/tailwind.js +2 -25
- package/dist/css/dialects/vanillaExtract.d.ts +1 -9
- package/dist/css/dialects/vanillaExtract.js +0 -1
- package/dist/css/index.d.ts +0 -8
- package/dist/css/index.js +0 -8
- package/dist/css/model/index.d.ts +6 -38
- package/dist/css/model/index.js +0 -9
- package/dist/css/token-inventory/index.d.ts +0 -23
- package/dist/css/token-inventory/index.js +0 -23
- package/dist/css/token-inventory/inventory.js +4 -16
- package/dist/css/token-inventory/parseStylesheet.d.ts +1 -9
- package/dist/css/token-inventory/parseStylesheet.js +5 -42
- package/dist/css/token-inventory/policy.d.ts +2 -39
- package/dist/css/token-inventory/policy.js +2 -39
- package/dist/css/token-inventory/types.d.ts +2 -15
- package/dist/css/value-semantics/borderSemantics.d.ts +1 -8
- package/dist/css/value-semantics/borderSemantics.js +5 -23
- package/dist/css/value-semantics/boxSemantics.d.ts +2 -25
- package/dist/css/value-semantics/boxSemantics.js +1 -7
- package/dist/css/value-semantics/colorSemantics.d.ts +6 -60
- package/dist/css/value-semantics/colorSemantics.js +9 -40
- package/dist/css/value-semantics/cssSyntax.d.ts +10 -10
- package/dist/css/value-semantics/cssSyntax.js +39 -11
- package/dist/css/value-semantics/fontSemantics.d.ts +3 -19
- package/dist/css/value-semantics/fontSemantics.js +7 -25
- package/dist/css/value-semantics/index.d.ts +1 -12
- package/dist/css/value-semantics/index.js +1 -12
- package/dist/css/value-semantics/propertyPolicy.d.ts +6 -53
- package/dist/css/value-semantics/propertyPolicy.js +47 -59
- package/dist/css/value-semantics/stringMaps.d.ts +0 -1
- package/dist/css/value-semantics/structuredValues.d.ts +3 -37
- package/dist/css/value-semantics/structuredValues.js +6 -17
- package/dist/css/value-semantics/tokenInterpretation.d.ts +8 -50
- package/dist/css/value-semantics/tokenInterpretation.js +7 -21
- package/dist/hosts/astro/astroRuntimeConfig.d.ts +0 -1
- package/dist/hosts/astro/astroRuntimeConfig.js +0 -1
- package/dist/hosts/astro/clientAsset.d.ts +1 -5
- package/dist/hosts/astro/clientAsset.js +1 -5
- package/dist/hosts/astro/clientTransport.d.ts +0 -1
- package/dist/hosts/astro/clientTransport.js +4 -9
- package/dist/hosts/astro/integration.d.ts +2 -28
- package/dist/hosts/astro/integration.js +7 -36
- package/dist/hosts/astro/markdownIdentity.d.ts +0 -3
- package/dist/hosts/astro/markdownIdentity.js +0 -3
- package/dist/hosts/astro/middleware.d.ts +1 -12
- package/dist/hosts/astro/middleware.js +1 -12
- package/dist/hosts/astro/projectContext.d.ts +1 -9
- package/dist/hosts/astro/projectContext.js +2 -11
- package/dist/hosts/astro/responseInstrumentation.d.ts +4 -33
- package/dist/hosts/astro/responseInstrumentation.js +5 -34
- package/dist/hosts/environment.d.ts +0 -8
- package/dist/hosts/environment.js +0 -1
- package/dist/hosts/next/index.js +1 -3
- package/dist/hosts/next/loader.d.ts +5 -44
- package/dist/hosts/next/loader.js +22 -103
- package/dist/hosts/next/loaders/identity-loader.cjs +111 -65
- package/dist/hosts/next/loaders/loader-plugin.cjs +111 -65
- package/dist/hosts/next/manifest.d.ts +2 -16
- package/dist/hosts/next/manifest.js +18 -20
- package/dist/hosts/next/mount.d.ts +1 -11
- package/dist/hosts/next/mount.js +1 -11
- package/dist/hosts/next/repositoryScope.d.ts +2 -17
- package/dist/hosts/next/repositoryScope.js +2 -17
- package/dist/hosts/next/sidecar.d.ts +0 -13
- package/dist/hosts/next/sidecar.js +25 -110
- package/dist/hosts/next/wrapper.d.ts +0 -31
- package/dist/hosts/next/wrapper.js +13 -64
- package/dist/hosts/projectBridge.d.ts +0 -2
- package/dist/hosts/projectBridge.js +0 -2
- package/dist/hosts/reactRendererCapture.d.ts +2 -0
- package/dist/hosts/reactRendererCapture.js +12 -0
- package/dist/hosts/static/cli.d.ts +0 -4
- package/dist/hosts/static/cli.js +0 -3
- package/dist/hosts/static/html/bootstrap.d.ts +1 -18
- package/dist/hosts/static/html/bootstrap.js +2 -14
- package/dist/hosts/static/manifest.d.ts +2 -15
- package/dist/hosts/static/manifest.js +5 -18
- package/dist/hosts/static/server.d.ts +4 -38
- package/dist/hosts/static/server.js +17 -67
- package/dist/hosts/vite/index.d.ts +0 -10
- package/dist/hosts/vite/index.js +0 -10
- package/dist/hosts/vite/react.d.ts +4 -17
- package/dist/hosts/vite/react.js +18 -35
- package/dist/hosts/vite/tokens/activeStylesheets.d.ts +1 -10
- package/dist/hosts/vite/tokens/activeStylesheets.js +3 -8
- package/dist/hosts/vite/tokens/fileMap.d.ts +0 -1
- package/dist/hosts/vite/tokens/viteStylesheetArtifacts.d.ts +2 -15
- package/dist/hosts/vite/tokens/viteStylesheetArtifacts.js +3 -10
- package/dist/hosts/vite/vite.d.ts +5 -26
- package/dist/hosts/vite/vite.js +44 -80
- package/dist/html/dom.d.ts +0 -1
- package/dist/html/dom.js +0 -1
- package/dist/html/identity.d.ts +1 -15
- package/dist/html/identity.js +1 -8
- package/dist/html/insertions.d.ts +2 -8
- package/dist/html/insertions.js +1 -1
- package/dist/inspector/agent/McpConnectionDialog.d.ts +1 -6
- package/dist/inspector/agent/McpConnectionDialog.js +1 -6
- package/dist/inspector/agent/activity.d.ts +1 -1
- package/dist/inspector/agent/activity.js +1 -1
- package/dist/inspector/agent/client.d.ts +2 -26
- package/dist/inspector/agent/client.js +17 -64
- package/dist/inspector/agent/connectionStatus.d.ts +0 -1
- package/dist/inspector/agent/connectionStatus.js +0 -1
- package/dist/inspector/agent/httpTransport.d.ts +0 -8
- package/dist/inspector/agent/httpTransport.js +21 -39
- package/dist/inspector/agent/protocol.d.ts +1 -10
- package/dist/inspector/agent/protocol.js +1 -9
- package/dist/inspector/agent/verification.d.ts +2 -19
- package/dist/inspector/agent/verification.js +7 -43
- package/dist/inspector/boot.d.ts +3 -1
- package/dist/inspector/boot.js +12 -20
- package/dist/inspector/canvas/AgentActivityOverlay.d.ts +1 -1
- package/dist/inspector/canvas/AgentActivityOverlay.js +1 -1
- package/dist/inspector/canvas/CanvasCard.js +7 -14
- package/dist/inspector/canvas/CanvasElementOverlay.js +117 -50
- package/dist/inspector/canvas/CanvasWorkspace.js +15 -29
- package/dist/inspector/canvas/PageCard.d.ts +0 -1
- package/dist/inspector/canvas/PageCard.js +0 -1
- package/dist/inspector/canvas/SketchToolOptions.d.ts +0 -1
- package/dist/inspector/canvas/SketchToolOptions.js +0 -6
- package/dist/inspector/canvas/ToolOptionsDrawer.d.ts +1 -6
- package/dist/inspector/canvas/ToolOptionsDrawer.js +2 -8
- package/dist/inspector/canvas/activeCanvasDocument.d.ts +0 -2
- package/dist/inspector/canvas/activeCanvasDocument.js +0 -2
- package/dist/inspector/canvas/agentPresentation.d.ts +2 -13
- package/dist/inspector/canvas/agentPresentation.js +3 -14
- package/dist/inspector/canvas/canvasFrame.d.ts +2 -6
- package/dist/inspector/canvas/canvasFrame.js +1 -2
- package/dist/inspector/canvas/canvasResize.d.ts +1 -6
- package/dist/inspector/canvas/canvasResize.js +1 -6
- package/dist/inspector/canvas/canvasStore.d.ts +4 -12
- package/dist/inspector/canvas/canvasStore.js +12 -26
- package/dist/inspector/canvas/frameConnection.d.ts +1 -7
- package/dist/inspector/canvas/frameContent.d.ts +0 -1
- package/dist/inspector/canvas/frameLifecycle.d.ts +12 -0
- package/dist/inspector/canvas/frameLifecycle.js +11 -0
- package/dist/inspector/canvas/frameProtocol.d.ts +5 -40
- package/dist/inspector/canvas/frameProtocol.js +1 -24
- package/dist/inspector/canvas/frameScrollbarStyles.d.ts +0 -1
- package/dist/inspector/canvas/frameScrollbarStyles.js +0 -1
- package/dist/inspector/canvas/layout.d.ts +10 -22
- package/dist/inspector/canvas/layout.js +0 -3
- package/dist/inspector/canvas/normalizeUrl.js +1 -8
- package/dist/inspector/canvas/pageSurface.d.ts +1 -6
- package/dist/inspector/canvas/pageSurface.js +1 -6
- package/dist/inspector/canvas/projection.d.ts +4 -25
- package/dist/inspector/canvas/projection.js +22 -72
- package/dist/inspector/canvas/rendererBootstrap.d.ts +8 -1
- package/dist/inspector/canvas/rendererBootstrap.js +6 -14
- package/dist/inspector/canvas/rendererCidIndex.d.ts +0 -5
- package/dist/inspector/canvas/rendererCidIndex.js +0 -5
- package/dist/inspector/canvas/rendererElementSelector.js +29 -27
- package/dist/inspector/canvas/rendererMessageRouter.d.ts +0 -1
- package/dist/inspector/canvas/rendererMessageRouter.js +0 -1
- package/dist/inspector/canvas/rendererSelectionProxy.d.ts +1 -5
- package/dist/inspector/canvas/rendererSelectionProxy.js +2 -7
- package/dist/inspector/canvas/rendererStylesheet.d.ts +0 -1
- package/dist/inspector/canvas/rendererStylesheet.js +9 -2
- package/dist/inspector/canvas/resizeHandleScale.d.ts +1 -10
- package/dist/inspector/canvas/resizeHandleScale.js +1 -10
- package/dist/inspector/canvas/sessionStore.d.ts +1 -7
- package/dist/inspector/canvas/sessionStore.js +21 -34
- package/dist/inspector/canvas/staleChangeDetector.js +1 -4
- package/dist/inspector/canvas/toolbarScale.d.ts +1 -4
- package/dist/inspector/canvas/toolbarScale.js +1 -4
- package/dist/inspector/canvas/useCanvasLayoutAnimation.d.ts +0 -1
- package/dist/inspector/canvas/useCanvasLayoutAnimation.js +0 -1
- package/dist/inspector/canvas/viewStore.js +1 -1
- package/dist/inspector/canvas/wheelPan.d.ts +1 -1
- package/dist/inspector/canvas/wheelPan.js +1 -1
- package/dist/inspector/canvas/workspaceLease.d.ts +1 -5
- package/dist/inspector/canvas/workspaceLease.js +1 -7
- package/dist/inspector/changes/codecs.js +2 -1
- package/dist/inspector/changes/draftPreview.d.ts +1 -6
- package/dist/inspector/changes/draftPreview.js +15 -30
- package/dist/inspector/changes/editModel.d.ts +3 -13
- package/dist/inspector/changes/editModel.js +1 -2
- package/dist/inspector/changes/managedStyleProjection.js +4 -14
- package/dist/inspector/changes/model.d.ts +0 -5
- package/dist/inspector/changes/model.js +1 -8
- package/dist/inspector/changes/previewDiagnostics.d.ts +2 -12
- package/dist/inspector/changes/previewDiagnostics.js +4 -20
- package/dist/inspector/changes/previewVerification.d.ts +25 -0
- package/dist/inspector/changes/previewVerification.js +34 -0
- package/dist/inspector/changes/structuralTypes.d.ts +2 -4
- package/dist/inspector/changes/types.d.ts +3 -10
- package/dist/inspector/clientManifest.d.ts +17 -6
- package/dist/inspector/clientManifest.js +16 -3
- package/dist/inspector/comments/CommentsOverlay.js +48 -7
- package/dist/inspector/comments/element.d.ts +1 -2
- package/dist/inspector/comments/element.js +1 -2
- package/dist/inspector/comments/store.d.ts +1 -1
- package/dist/inspector/comments/store.js +1 -1
- package/dist/inspector/comments/verification.d.ts +8 -2
- package/dist/inspector/comments/verification.js +18 -10
- package/dist/inspector/componentSemantics/ComponentPropsSection.d.ts +8 -0
- package/dist/inspector/componentSemantics/ComponentPropsSection.js +10 -7
- package/dist/inspector/componentSemantics/adapterRegistry.d.ts +2 -9
- package/dist/inspector/componentSemantics/adapterRegistry.js +2 -9
- package/dist/inspector/componentSemantics/changeModel.js +2 -4
- package/dist/inspector/componentSemantics/react/callsites.d.ts +28 -0
- package/dist/inspector/componentSemantics/react/callsites.js +261 -0
- package/dist/inspector/componentSemantics/react/devtoolsHook.d.ts +23 -0
- package/dist/inspector/componentSemantics/react/devtoolsHook.js +71 -0
- package/dist/inspector/componentSemantics/react/fibers.d.ts +17 -0
- package/dist/inspector/componentSemantics/react/fibers.js +30 -0
- package/dist/inspector/componentSemantics/{reactRuntime.d.ts → react/runtime.d.ts} +3 -2
- package/dist/inspector/componentSemantics/{reactRuntime.js → react/runtime.js} +70 -53
- package/dist/inspector/componentSemantics/runtimeBridge.d.ts +2 -18
- package/dist/inspector/componentSemantics/runtimeBridge.js +5 -19
- package/dist/inspector/componentSemantics/textBinding.d.ts +1 -9
- package/dist/inspector/componentSemantics/textBinding.js +16 -42
- package/dist/inspector/componentSemantics/types.d.ts +8 -27
- package/dist/inspector/componentSemantics/types.js +0 -1
- package/dist/inspector/conformance/borderCases.d.ts +0 -5
- package/dist/inspector/conformance/borderCases.js +0 -5
- package/dist/inspector/conformance/colorCases.d.ts +0 -6
- package/dist/inspector/conformance/colorCases.js +0 -6
- package/dist/inspector/conformance/fixture.d.ts +1 -5
- package/dist/inspector/conformance/fixture.js +1 -5
- package/dist/inspector/conformance/spacingCases.d.ts +0 -4
- package/dist/inspector/conformance/spacingCases.js +0 -4
- package/dist/inspector/conformance/typographyCases.d.ts +0 -5
- package/dist/inspector/conformance/typographyCases.js +0 -5
- package/dist/inspector/drafts/draftStore.d.ts +7 -21
- package/dist/inspector/drafts/draftStore.js +15 -5
- package/dist/inspector/drafts/model.d.ts +7 -15
- package/dist/inspector/drafts/model.js +0 -2
- package/dist/inspector/drafts/store.d.ts +1 -8
- package/dist/inspector/drafts/store.js +3 -10
- package/dist/inspector/editScope.d.ts +0 -1
- package/dist/inspector/editScope.js +0 -1
- package/dist/inspector/inline-text/inlineTextDiagnostics.d.ts +0 -2
- package/dist/inspector/inline-text/inlineTextDiagnostics.js +0 -2
- package/dist/inspector/inline-text/inlineTextEditor.d.ts +2 -8
- package/dist/inspector/inline-text/inlineTextEditor.js +26 -79
- package/dist/inspector/inline-text/inlineTextLifecycle.js +1 -6
- package/dist/inspector/inline-text/textEditChange.d.ts +0 -1
- package/dist/inspector/inspection/bridge.d.ts +2 -6
- package/dist/inspector/inspection/bridge.js +4 -12
- package/dist/inspector/inspection/browserCssInspection.d.ts +4 -11
- package/dist/inspector/inspection/browserCssInspection.js +4 -8
- package/dist/inspector/inspection/browserCssInspectionRegistry.d.ts +0 -7
- package/dist/inspector/inspection/browserCssInspectionRegistry.js +1 -16
- package/dist/inspector/inspection/selectionProperty.d.ts +1 -6
- package/dist/inspector/inspection/selectionProperty.js +1 -5
- package/dist/inspector/inspection/useBrowserCssInspection.d.ts +1 -5
- package/dist/inspector/inspection/useBrowserCssInspection.js +5 -21
- package/dist/inspector/iterations/capture.d.ts +0 -1
- package/dist/inspector/iterations/capture.js +4 -9
- package/dist/inspector/iterations/client.d.ts +0 -1
- package/dist/inspector/iterations/client.js +0 -1
- package/dist/inspector/iterations/coordinator.d.ts +0 -1
- package/dist/inspector/iterations/coordinator.js +0 -1
- package/dist/inspector/iterations/prompt.d.ts +0 -1
- package/dist/inspector/iterations/prompt.js +0 -1
- package/dist/inspector/overlay/DomNavigator.d.ts +3 -1
- package/dist/inspector/overlay/DomNavigator.js +39 -15
- package/dist/inspector/overlay/DropGuideOverlay.d.ts +0 -1
- package/dist/inspector/overlay/DropGuideOverlay.js +0 -1
- package/dist/inspector/overlay/MeasurementGuideOverlay.d.ts +1 -8
- package/dist/inspector/overlay/MeasurementGuideOverlay.js +1 -5
- package/dist/inspector/overlay/clickPolicy.d.ts +3 -14
- package/dist/inspector/overlay/clickPolicy.js +3 -14
- package/dist/inspector/overlay/dropGuide.d.ts +0 -3
- package/dist/inspector/overlay/dropGuide.js +0 -3
- package/dist/inspector/overlay/frameThrottle.d.ts +0 -1
- package/dist/inspector/overlay/frameThrottle.js +0 -1
- package/dist/inspector/overlay/interactionStyles.d.ts +1 -1
- package/dist/inspector/overlay/interactionStyles.js +2 -8
- package/dist/inspector/overlay/measurementGeometry.js +4 -12
- package/dist/inspector/overlay/selectedGeometry.d.ts +1 -6
- package/dist/inspector/overlay/selectedGeometry.js +1 -8
- package/dist/inspector/overlay/spacingGestures.d.ts +14 -21
- package/dist/inspector/overlay/spacingGestures.js +151 -31
- package/dist/inspector/overlay/structuralGestures.d.ts +2 -9
- package/dist/inspector/overlay/structuralGestures.js +1 -4
- package/dist/inspector/pageInspector.d.ts +4 -13
- package/dist/inspector/pageInspector.js +25 -32
- package/dist/inspector/projection/cssEscapes.d.ts +0 -1
- package/dist/inspector/projection/cssEscapes.js +2 -4
- package/dist/inspector/projection/draftProjection.d.ts +2 -14
- package/dist/inspector/projection/draftProjection.js +1 -8
- package/dist/inspector/projection/managedStylesheet.d.ts +1 -7
- package/dist/inspector/projection/managedStylesheet.js +4 -22
- package/dist/inspector/projection/renderedInstance.d.ts +5 -28
- package/dist/inspector/projection/renderedInstance.js +6 -32
- package/dist/inspector/projection/structuralProjection.d.ts +7 -39
- package/dist/inspector/projection/structuralProjection.js +17 -52
- package/dist/inspector/projection/textProjection.d.ts +2 -14
- package/dist/inspector/projection/textProjection.js +17 -70
- package/dist/inspector/prompt/PromptSettingsDialog.d.ts +0 -1
- package/dist/inspector/prompt/PromptSettingsDialog.js +0 -1
- package/dist/inspector/prompt/clipboardHandoff.d.ts +1 -9
- package/dist/inspector/prompt/clipboardHandoff.js +1 -9
- package/dist/inspector/prompt/generatePrompt.d.ts +1 -1
- package/dist/inspector/prompt/generatePrompt.js +10 -25
- package/dist/inspector/prompt/promptSettings.d.ts +0 -3
- package/dist/inspector/prompt/promptSettings.js +0 -3
- package/dist/inspector/runtime/devFlag.d.ts +2 -25
- package/dist/inspector/runtime/devFlag.js +4 -31
- package/dist/inspector/runtime/documentStylesheetOrder.d.ts +0 -2
- package/dist/inspector/runtime/editorShell.d.ts +0 -1
- package/dist/inspector/runtime/editorShell.js +0 -1
- package/dist/inspector/runtime/inspectorStorage.d.ts +1 -7
- package/dist/inspector/runtime/inspectorStorage.js +1 -6
- package/dist/inspector/runtime/ownedStylesheets.d.ts +2 -8
- package/dist/inspector/runtime/ownedStylesheets.js +2 -8
- package/dist/inspector/runtime/runtimeConfig.d.ts +12 -86
- package/dist/inspector/runtime/runtimeConfig.js +9 -50
- package/dist/inspector/runtime/runtimeIdentityClaims.d.ts +3 -13
- package/dist/inspector/runtime/runtimeIdentityClaims.js +9 -19
- package/dist/inspector/runtime/staticHtmlRuntimeIdentity.d.ts +4 -36
- package/dist/inspector/runtime/staticHtmlRuntimeIdentity.js +7 -40
- package/dist/inspector/runtime/useRuntimeConfig.d.ts +1 -8
- package/dist/inspector/runtime/useRuntimeConfig.js +1 -8
- package/dist/inspector/selection/editScope.d.ts +1 -7
- package/dist/inspector/selection/editScope.js +2 -12
- package/dist/inspector/selection/editTarget.d.ts +1 -5
- package/dist/inspector/selection/hierarchy.d.ts +11 -11
- package/dist/inspector/selection/hierarchy.js +42 -24
- package/dist/inspector/selection/selectionStore.d.ts +0 -3
- package/dist/inspector/selection/selectionStore.js +5 -16
- package/dist/inspector/selection/sourceSite.d.ts +1 -5
- package/dist/inspector/selection/sourceSite.js +2 -8
- package/dist/inspector/selection/styleSelection.d.ts +1 -5
- package/dist/inspector/selection/styleSelection.js +1 -5
- package/dist/inspector/session/lifecycle.d.ts +1 -9
- package/dist/inspector/session/lifecycle.js +0 -1
- package/dist/inspector/session/sessionContext.d.ts +0 -4
- package/dist/inspector/session/sessionContext.js +0 -4
- package/dist/inspector/session/sessionFactory.d.ts +0 -9
- package/dist/inspector/session/sessionFactory.js +0 -6
- package/dist/inspector/settings/SettingsDialog.d.ts +0 -1
- package/dist/inspector/settings/SettingsDialog.js +5 -3
- package/dist/inspector/shell/AgentStatusButton.d.ts +3 -2
- package/dist/inspector/shell/AgentStatusButton.js +5 -5
- package/dist/inspector/shell/ChangesLog.js +3 -4
- package/dist/inspector/shell/CopyPromptButton.d.ts +2 -1
- package/dist/inspector/shell/CopyPromptButton.js +12 -11
- package/dist/inspector/shell/InspectorEditors.d.ts +16 -0
- package/dist/inspector/shell/InspectorEditors.js +14 -0
- package/dist/inspector/shell/InspectorPanel.d.ts +12 -0
- package/dist/inspector/shell/InspectorPanel.js +8 -0
- package/dist/inspector/shell/InspectorSelection.d.ts +24 -0
- package/dist/inspector/shell/InspectorSelection.js +20 -0
- package/dist/inspector/shell/InspectorShell.js +26 -48
- package/dist/inspector/shell/NudgeLogoIcon.d.ts +5 -0
- package/dist/inspector/shell/NudgeLogoIcon.js +5 -0
- package/dist/inspector/shell/PeekOriginalButton.d.ts +0 -5
- package/dist/inspector/shell/PeekOriginalButton.js +0 -5
- package/dist/inspector/shell/PeekOriginalIcon.d.ts +0 -5
- package/dist/inspector/shell/PeekOriginalIcon.js +0 -5
- package/dist/inspector/shell/PromptActionButton.d.ts +21 -0
- package/dist/inspector/shell/PromptActionButton.js +14 -0
- package/dist/inspector/shell/elementName.d.ts +5 -0
- package/dist/inspector/shell/elementName.js +29 -0
- package/dist/inspector/shell/interactionStatePreview.d.ts +1 -4
- package/dist/inspector/shell/interactionStatePreview.js +3 -8
- package/dist/inspector/shell/originalPreview.d.ts +1 -6
- package/dist/inspector/shell/originalPreview.js +1 -6
- package/dist/inspector/shell/stateValue.d.ts +1 -2
- package/dist/inspector/shell/stateValue.js +2 -5
- package/dist/inspector/shell/styleState.d.ts +1 -2
- package/dist/inspector/shell/styleState.js +1 -2
- package/dist/inspector/sketch/SketchEditor.js +0 -1
- package/dist/inspector/sketch/SketchFrameOverlay.js +8 -12
- package/dist/inspector/sketch/SketchOverlay.js +5 -6
- package/dist/inspector/sketch/SketchPromptPanel.d.ts +0 -1
- package/dist/inspector/sketch/SketchPromptPanel.js +0 -1
- package/dist/inspector/sketch/SketchWorkspace.js +2 -4
- package/dist/inspector/sketch/capture.d.ts +12 -3
- package/dist/inspector/sketch/capture.js +12 -11
- package/dist/inspector/sketch/copySketch.d.ts +1 -7
- package/dist/inspector/sketch/copySketch.js +2 -11
- package/dist/inspector/sketch/drawingTools.d.ts +1 -3
- package/dist/inspector/sketch/drawingTools.js +1 -2
- package/dist/inspector/sketch/frameHeading.d.ts +1 -7
- package/dist/inspector/sketch/frameHeading.js +1 -8
- package/dist/inspector/sketch/freehand.d.ts +0 -1
- package/dist/inspector/sketch/freehand.js +0 -1
- package/dist/inspector/sketch/geometry.d.ts +1 -6
- package/dist/inspector/sketch/geometry.js +1 -6
- package/dist/inspector/sketch/handoff.js +0 -1
- package/dist/inspector/sketch/history.d.ts +1 -5
- package/dist/inspector/sketch/history.js +1 -4
- package/dist/inspector/sketch/interaction.d.ts +2 -2
- package/dist/inspector/sketch/interaction.js +2 -2
- package/dist/inspector/sketch/model.d.ts +2 -9
- package/dist/inspector/sketch/model.js +2 -19
- package/dist/inspector/sketch/persistence.d.ts +0 -1
- package/dist/inspector/sketch/persistence.js +2 -2
- package/dist/inspector/sketch/raster.d.ts +1 -4
- package/dist/inspector/sketch/raster.js +2 -8
- package/dist/inspector/sketch/store.js +2 -3
- package/dist/inspector/sketch/videoFrames.js +2 -3
- package/dist/inspector/spacing/projection.d.ts +0 -8
- package/dist/inspector/spacing/projection.js +38 -20
- package/dist/inspector/styleEditors/BackgroundEditor.js +1 -1
- package/dist/inspector/styleEditors/BorderEditor.js +1 -6
- package/dist/inspector/styleEditors/ChildPlacement.d.ts +12 -0
- package/dist/inspector/styleEditors/ChildPlacement.js +9 -0
- package/dist/inspector/styleEditors/FlexControls.d.ts +35 -0
- package/dist/inspector/styleEditors/FlexControls.js +158 -0
- package/dist/inspector/styleEditors/GapField.d.ts +5 -2
- package/dist/inspector/styleEditors/GapField.js +3 -4
- package/dist/inspector/styleEditors/GridChildSection.d.ts +0 -5
- package/dist/inspector/styleEditors/GridChildSection.js +0 -5
- package/dist/inspector/styleEditors/GridPicker.d.ts +1 -1
- package/dist/inspector/styleEditors/GridPicker.js +2 -4
- package/dist/inspector/styleEditors/GridSection.d.ts +10 -8
- package/dist/inspector/styleEditors/GridSection.js +22 -9
- package/dist/inspector/styleEditors/GridValueField.d.ts +1 -5
- package/dist/inspector/styleEditors/GridValueField.js +2 -8
- package/dist/inspector/styleEditors/ImageBackgroundEditor.d.ts +0 -1
- package/dist/inspector/styleEditors/ImageBackgroundEditor.js +0 -1
- package/dist/inspector/styleEditors/LayoutBlockedIndicator.d.ts +0 -1
- package/dist/inspector/styleEditors/LayoutBlockedIndicator.js +0 -1
- package/dist/inspector/styleEditors/LayoutComboField.js +0 -5
- package/dist/inspector/styleEditors/LayoutModeRow.d.ts +14 -0
- package/dist/inspector/styleEditors/LayoutModeRow.js +60 -0
- package/dist/inspector/styleEditors/LayoutSection.d.ts +2 -2
- package/dist/inspector/styleEditors/LayoutSection.js +30 -356
- package/dist/inspector/styleEditors/OpacityEditor.js +7 -5
- package/dist/inspector/styleEditors/PositionControls.d.ts +18 -0
- package/dist/inspector/styleEditors/PositionControls.js +16 -0
- package/dist/inspector/styleEditors/SizeSection.d.ts +18 -0
- package/dist/inspector/styleEditors/SizeSection.js +71 -0
- package/dist/inspector/styleEditors/{SpacingBox.d.ts → SpacingField.d.ts} +3 -10
- package/dist/inspector/styleEditors/{SpacingBox.js → SpacingField.js} +15 -29
- package/dist/inspector/styleEditors/Typography.js +2 -4
- package/dist/inspector/styleEditors/borderModel.d.ts +1 -7
- package/dist/inspector/styleEditors/borderModel.js +2 -11
- package/dist/inspector/styleEditors/completeCssValue.d.ts +1 -5
- package/dist/inspector/styleEditors/completeCssValue.js +3 -13
- package/dist/inspector/styleEditors/fieldValue.d.ts +20 -0
- package/dist/inspector/styleEditors/fieldValue.js +26 -0
- package/dist/inspector/styleEditors/gradientValue.d.ts +1 -1
- package/dist/inspector/styleEditors/gradientValue.js +3 -2
- package/dist/inspector/styleEditors/gridChildModel.d.ts +7 -47
- package/dist/inspector/styleEditors/gridChildModel.js +6 -37
- package/dist/inspector/styleEditors/hiddenSizeOverrides.d.ts +5 -0
- package/dist/inspector/styleEditors/hiddenSizeOverrides.js +42 -0
- package/dist/inspector/styleEditors/inlineAuthored.d.ts +1 -8
- package/dist/inspector/styleEditors/inlineAuthored.js +3 -17
- package/dist/inspector/styleEditors/layoutMode.d.ts +15 -0
- package/dist/inspector/styleEditors/layoutMode.js +33 -0
- package/dist/inspector/styleEditors/layoutPreviewState.d.ts +0 -1
- package/dist/inspector/styleEditors/layoutPreviewState.js +0 -1
- package/dist/inspector/styleEditors/layoutValue.d.ts +2 -8
- package/dist/inspector/styleEditors/layoutValue.js +4 -12
- package/dist/inspector/styleEditors/nudgeValue.d.ts +1 -13
- package/dist/inspector/styleEditors/nudgeValue.js +1 -13
- package/dist/inspector/styleEditors/rowLookup.d.ts +1 -5
- package/dist/inspector/styleEditors/rowLookup.js +1 -5
- package/dist/inspector/styleEditors/stringRecord.d.ts +1 -2
- package/dist/inspector/styleEditors/stylePresence.d.ts +0 -2
- package/dist/inspector/styleEditors/stylePresence.js +1 -4
- package/dist/inspector/styleEditors/textRelevance.d.ts +1 -1
- package/dist/inspector/styleEditors/textRelevance.js +1 -1
- package/dist/inspector/styleEditors/useFieldVisibility.js +1 -2
- package/dist/inspector/styleEditors/useLayoutContext.d.ts +13 -0
- package/dist/inspector/styleEditors/useLayoutContext.js +53 -0
- package/dist/inspector/styleEditors/valuePolicy.d.ts +1 -5
- package/dist/inspector/styleEditors/valuePolicy.js +0 -1
- package/dist/inspector/testing.d.ts +1 -4
- package/dist/inspector/testing.js +1 -4
- package/dist/inspector/tokens/TokenChip.d.ts +1 -4
- package/dist/inspector/tokens/TokenChip.js +1 -4
- package/dist/inspector/tokens/TokenField.d.ts +4 -3
- package/dist/inspector/tokens/TokenField.js +19 -29
- package/dist/inspector/tokens/catalog.d.ts +2 -10
- package/dist/inspector/tokens/catalog.js +5 -12
- package/dist/inspector/tokens/dragPointerLock.d.ts +0 -1
- package/dist/inspector/tokens/dragPointerLock.js +2 -3
- package/dist/inspector/tokens/editActions.d.ts +1 -1
- package/dist/inspector/tokens/editActions.js +2 -4
- package/dist/inspector/tokens/resolution/cascade.d.ts +1 -5
- package/dist/inspector/tokens/resolution/cascade.js +1 -5
- package/dist/inspector/tokens/resolution/containerQueryEvaluator.d.ts +1 -5
- package/dist/inspector/tokens/resolution/containerQueryEvaluator.js +1 -5
- package/dist/inspector/tokens/resolution/cssomCollector.d.ts +4 -19
- package/dist/inspector/tokens/resolution/cssomCollector.js +151 -122
- package/dist/inspector/tokens/resolution/nestedSelectors.d.ts +1 -5
- package/dist/inspector/tokens/resolution/nestedSelectors.js +1 -5
- package/dist/inspector/tokens/resolution/ruleMatching.d.ts +4 -14
- package/dist/inspector/tokens/resolution/ruleMatching.js +121 -67
- package/dist/inspector/tokens/resolution/selectorSemantics.d.ts +3 -14
- package/dist/inspector/tokens/resolution/selectorSemantics.js +12 -27
- package/dist/inspector/tokens/resolution.d.ts +5 -24
- package/dist/inspector/tokens/resolution.js +16 -71
- package/dist/inspector/tokens/tokenAvailability.d.ts +2 -14
- package/dist/inspector/tokens/tokenAvailability.js +6 -38
- package/dist/inspector/tokens/valueSemanticsAdapter.d.ts +0 -1
- package/dist/inspector/tokens/valueSemanticsAdapter.js +18 -2
- package/dist/inspector/ui/AtRuleContext.d.ts +5 -5
- package/dist/inspector/ui/AtRuleContext.js +8 -6
- package/dist/inspector/ui/ControlSurface.d.ts +0 -4
- package/dist/inspector/ui/Disclosure.d.ts +0 -5
- package/dist/inspector/ui/Disclosure.js +0 -4
- package/dist/inspector/ui/InlineStyleWarning.d.ts +0 -1
- package/dist/inspector/ui/InspectorPopover.d.ts +1 -5
- package/dist/inspector/ui/InspectorPopover.js +1 -5
- package/dist/inspector/ui/SegmentedControl.d.ts +4 -4
- package/dist/inspector/ui/SegmentedControl.js +6 -4
- package/dist/inspector/ui/SideValuesField.d.ts +1 -6
- package/dist/inspector/ui/SideValuesField.js +2 -8
- package/dist/inspector/ui/Toast.d.ts +0 -4
- package/dist/inspector/ui/Toast.js +0 -4
- package/dist/inspector/ui/atRuleSegments.d.ts +13 -0
- package/dist/inspector/ui/atRuleSegments.js +34 -0
- package/dist/inspector/ui/classNames.d.ts +0 -1
- package/dist/inspector/ui/classNames.js +0 -1
- package/dist/inspector/ui/customCursors.d.ts +7 -1
- package/dist/inspector/ui/customCursors.js +2 -6
- package/dist/inspector/ui/styles.js +18 -20
- package/dist/inspector/workspace/controller.js +20 -1
- package/dist/inspector/workspace/handoff.d.ts +1 -5
- package/dist/inspector/workspace/handoff.js +1 -5
- package/dist/inspector/workspace/timeline.d.ts +5 -2
- package/dist/inspector/workspace/timeline.js +0 -1
- package/dist/internal/agent-protocol.d.ts +20 -42
- package/dist/internal/agent-protocol.js +18 -35
- package/dist/nudge-ui.mjs +75 -28
- package/dist/project/artifacts.js +24 -21
- package/dist/project/files.d.ts +0 -1
- package/dist/project/files.js +2 -9
- package/dist/project/identity.d.ts +1 -5
- package/dist/project/identity.js +1 -5
- package/dist/project/mcpPackage.d.ts +1 -6
- package/dist/project/mcpPackage.js +2 -7
- package/dist/project/pathPolicy.d.ts +1 -6
- package/dist/project/pathPolicy.js +1 -6
- package/dist/project/tokens.d.ts +2 -12
- package/dist/project/tokens.js +4 -15
- package/dist/transport/editor.d.ts +1 -12
- package/dist/transport/editor.js +2 -13
- package/dist/transport/index.d.ts +0 -5
- package/dist/transport/index.js +0 -5
- package/dist/transport/routes.d.ts +0 -5
- package/dist/transport/routes.js +0 -5
- package/package.json +5 -4
- package/dist/inspector/styleEditors/InsetSection.d.ts +0 -15
- package/dist/inspector/styleEditors/InsetSection.js +0 -15
- package/dist/inspector/styleEditors/PositionInsets.d.ts +0 -15
- package/dist/inspector/styleEditors/PositionInsets.js +0 -12
- package/dist/inspector/tokens/TokenDropdown.d.ts +0 -13
- package/dist/inspector/tokens/TokenDropdown.js +0 -59
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { LayoutDropdown } from "./LayoutDropdown.js";
|
|
3
|
+
import { LayoutValueField } from "./FlexControls.js";
|
|
4
|
+
import { SpacingField, projectSpacing } from "./SpacingField.js";
|
|
5
|
+
export const POSITION_OPTIONS = ["static", "relative", "absolute", "fixed", "sticky"];
|
|
6
|
+
export const Z_INDEX_PRESETS = ["auto", "0", "1", "10", "100"];
|
|
7
|
+
const OFFSET_PRESETS = ["auto", "0", "50%", "100%"];
|
|
8
|
+
/** Position, z-index and insets for an element that is not static; static elements set these from the options menu. */
|
|
9
|
+
export function PositionControls({ domElement, editTarget, selection, entries, tokenRows, position, revision, onAfterEdit }) {
|
|
10
|
+
const common = { domElement, editTarget, selection, revision, onAfterEdit };
|
|
11
|
+
const spacing = projectSpacing(domElement, selection, tokenRows);
|
|
12
|
+
const spacingProps = { domElement, editTarget, selection, entries, tokenRows, onAfterEdit };
|
|
13
|
+
const showAnchoredInsets = selection ? selection.supportsRole("inset-position") : position === "absolute" || position === "fixed";
|
|
14
|
+
const showOffsetInsets = selection ? selection.supportsRole("relative-position") : position === "relative" || position === "sticky";
|
|
15
|
+
return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "layout__tool-row", "data-test": "layout-position", children: [_jsx(LayoutDropdown, { property: "position", options: POSITION_OPTIONS, ...common }), _jsx(LayoutValueField, { label: "Z-index", property: "z-index", presets: Z_INDEX_PRESETS, inputOnly: true, ...common })] }), showAnchoredInsets ? (_jsx(SpacingField, { property: "inset", projection: spacing.inset, showLabel: false, showEmptyState: false, suggestions: OFFSET_PRESETS, ...spacingProps })) : null, showOffsetInsets ? _jsx(SpacingField, { property: "inset", projection: spacing.inset, ...spacingProps }) : null] }));
|
|
16
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ReactElement, ReactNode } from "react";
|
|
2
|
+
import type { ResolvedProperty, TokenEntry } from "../../css/model/index.js";
|
|
3
|
+
import type { EditTarget } from "../selection/editTarget.js";
|
|
4
|
+
import type { StyleSelection } from "../selection/styleSelection.js";
|
|
5
|
+
export interface SizeSectionProps {
|
|
6
|
+
/** Rows shown under the min and max fields while expanded, such as flex or grid child controls. */
|
|
7
|
+
extras?: ReactNode;
|
|
8
|
+
/** Something behind the expander differs from its initial value. */
|
|
9
|
+
modified?: boolean;
|
|
10
|
+
domElement: HTMLElement;
|
|
11
|
+
editTarget: EditTarget;
|
|
12
|
+
selection?: StyleSelection | null;
|
|
13
|
+
entries: TokenEntry[];
|
|
14
|
+
tokenRows: ResolvedProperty[];
|
|
15
|
+
revision: number;
|
|
16
|
+
onAfterEdit?: () => void;
|
|
17
|
+
}
|
|
18
|
+
export declare function SizeSection({ domElement: el, editTarget, selection, entries, tokenRows, revision, onAfterEdit, extras, modified }: SizeSectionProps): ReactElement;
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useState } from "react";
|
|
3
|
+
import { IconChevronDown, IconChevronUp, IconLetterH, IconLetterW } from "@tabler/icons-react";
|
|
4
|
+
import { TokenField } from "../tokens/TokenField.js";
|
|
5
|
+
import { AspectRatioField } from "./AspectRatioField.js";
|
|
6
|
+
import { meaningfulLayoutValue } from "./layoutValue.js";
|
|
7
|
+
import { IconButton } from "../ui/IconButton.js";
|
|
8
|
+
import { FieldRow } from "../ui/FieldRow.js";
|
|
9
|
+
import { ControlSurface } from "../ui/ControlSurface.js";
|
|
10
|
+
import { Tooltip } from "../ui/Tooltip.js";
|
|
11
|
+
import { getElementComputedStyle, getElementWindow } from "../runtime/domRealm.js";
|
|
12
|
+
const PLAIN_PIXEL_VALUE = /^-?\d*\.?\d+px$/;
|
|
13
|
+
/** The used pixel size of a dimension, kept current as the element resizes. */
|
|
14
|
+
function useResolvedDimension(el, property, revision) {
|
|
15
|
+
const [resolved, setResolved] = useState(() => readResolvedDimension(el, property));
|
|
16
|
+
useEffect(() => {
|
|
17
|
+
const update = () => setResolved(readResolvedDimension(el, property));
|
|
18
|
+
update();
|
|
19
|
+
// SAFETY: the element's window is a same-realm Window, and the runtime realm exposes the observer constructors as project-wide globals.
|
|
20
|
+
const { ResizeObserver: ResizeObserverCtor } = getElementWindow(el);
|
|
21
|
+
if (!ResizeObserverCtor)
|
|
22
|
+
return;
|
|
23
|
+
const observer = new ResizeObserverCtor(update);
|
|
24
|
+
observer.observe(el);
|
|
25
|
+
return () => observer.disconnect();
|
|
26
|
+
}, [el, property, revision]);
|
|
27
|
+
return resolved;
|
|
28
|
+
}
|
|
29
|
+
function readResolvedDimension(el, property) {
|
|
30
|
+
try {
|
|
31
|
+
const pixels = Number.parseFloat(getElementComputedStyle(el)[property]);
|
|
32
|
+
return Number.isFinite(pixels) ? pixels : null;
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/** Shows the used size beside an authored keyword or expression, so `auto` still tells you how big the element is. */
|
|
39
|
+
function ResolvedDimension({ el, property, revision }) {
|
|
40
|
+
const resolved = useResolvedDimension(el, property, revision);
|
|
41
|
+
const authored = meaningfulLayoutValue(el, property).trim();
|
|
42
|
+
if (resolved === null || PLAIN_PIXEL_VALUE.test(authored))
|
|
43
|
+
return null;
|
|
44
|
+
// Whole pixels keep the label short enough to sit beside the authored value; the title keeps the exact figure.
|
|
45
|
+
return _jsx("span", { className: "layout__resolved", "data-test": `layout-resolved-${property}`, title: `${Math.round(resolved * 100) / 100}px`, children: Math.round(resolved) });
|
|
46
|
+
}
|
|
47
|
+
const SIZE_PRESETS = ["auto", "0", "100%", "fit-content"];
|
|
48
|
+
const MIN_SIZE_PRESETS = ["0", "min-content", "fit-content"];
|
|
49
|
+
const MAX_WIDTH_PRESETS = ["none", "100%", "100vw", "fit-content"];
|
|
50
|
+
const MAX_HEIGHT_PRESETS = ["none", "100%", "100vh", "fit-content"];
|
|
51
|
+
export function SizeSection({ domElement: el, editTarget, selection, entries, tokenRows, revision, onAfterEdit, extras, modified = false }) {
|
|
52
|
+
const [expanded, setExpanded] = useState(false);
|
|
53
|
+
const fields = [
|
|
54
|
+
{ property: "width", presets: SIZE_PRESETS },
|
|
55
|
+
{ property: "height", presets: SIZE_PRESETS },
|
|
56
|
+
{ property: "min-width", presets: MIN_SIZE_PRESETS },
|
|
57
|
+
{ property: "min-height", presets: MIN_SIZE_PRESETS },
|
|
58
|
+
{ property: "max-width", presets: MAX_WIDTH_PRESETS },
|
|
59
|
+
{ property: "max-height", presets: MAX_HEIGHT_PRESETS },
|
|
60
|
+
];
|
|
61
|
+
const multipleSelected = (selection?.domElements.length ?? 1) > 1;
|
|
62
|
+
function renderTokenField(property, presets) {
|
|
63
|
+
const dimension = property === "width" || property === "height" ? property : null;
|
|
64
|
+
return (_jsx(ControlSurface, { className: property === "width" || property === "height" ? "layout__size-field--icon" : undefined, children: _jsx(TokenField, { property: property, selection: selection, tokenRow: tokenRows.find((row) => row.property === property) ?? null, initialValue: meaningfulLayoutValue(el, property), domElement: el, editTarget: editTarget, entries: entries, suggestions: presets, leading: property === "width"
|
|
65
|
+
? _jsx(IconLetterW, { size: "var(--icon-size-small)", stroke: 1.8, "aria-hidden": "true" })
|
|
66
|
+
: property === "height"
|
|
67
|
+
? _jsx(IconLetterH, { size: "var(--icon-size-small)", stroke: 1.8, "aria-hidden": "true" })
|
|
68
|
+
: undefined, trailing: dimension && !multipleSelected ? _jsx(ResolvedDimension, { el: el, property: dimension, revision: revision }) : undefined, onAfterEdit: onAfterEdit }) }));
|
|
69
|
+
}
|
|
70
|
+
return (_jsxs("div", { className: "layout__size", "data-test": "layout-size", "data-expanded": expanded ? "true" : "false", children: [_jsxs("div", { className: "layout__size-grid", children: [_jsx(FieldRow, { label: "Width", hideLabel: true, "data-test": "layout-size-width", className: "layout__size-cell layout__size-cell--width", children: renderTokenField("width", SIZE_PRESETS) }), _jsx(FieldRow, { label: "Height", hideLabel: true, "data-test": "layout-size-height", className: "layout__size-cell layout__size-cell--height", children: renderTokenField("height", SIZE_PRESETS) }), _jsx(Tooltip, { children: _jsx(IconButton, { className: "layout__size-cell layout__size-cell--toggle", variant: "quiet", size: "default", "data-modified": modified ? "true" : undefined, "data-test": expanded ? "layout-size-collapse" : "layout-size-expand", "aria-label": expanded ? "Collapse Size Fields" : "Expand Size Fields", label: expanded ? "Collapse Size Fields" : "Expand Size Fields", onClick: () => setExpanded(!expanded), children: expanded ? (_jsx(IconChevronUp, { size: 16, stroke: 1.8, "aria-hidden": "true" })) : (_jsx(IconChevronDown, { size: 16, stroke: 1.8, "aria-hidden": "true" })) }) }), expanded && fields.slice(2).map(({ property, presets }) => (_jsx(FieldRow, { label: property, "data-test": `layout-size-${property}`, className: `layout__size-cell layout__size-cell--${property}`, children: renderTokenField(property, presets) }, property))), expanded && (_jsx(AspectRatioField, { className: "layout__size-cell layout__size-cell--aspect-ratio", domElement: el, editTarget: editTarget, selection: selection, entries: entries, tokenRow: tokenRows.find((row) => row.property === "aspect-ratio") ?? null, revision: revision, onAfterEdit: onAfterEdit }))] }), expanded ? extras : null] }));
|
|
71
|
+
}
|
|
@@ -1,18 +1,11 @@
|
|
|
1
1
|
import type { ReactElement } from "react";
|
|
2
2
|
import type { ResolvedProperty } from "../../css/model/index.js";
|
|
3
3
|
import type { TokenEntry } from "../../css/model/index.js";
|
|
4
|
-
import type
|
|
5
|
-
import { type InspectorSpacingProjection } from "../spacing/projection.js";
|
|
4
|
+
import { projectInspectorValues, type InspectorSpacingProjection } from "../spacing/projection.js";
|
|
6
5
|
import type { EditTarget } from "../selection/editTarget.js";
|
|
7
6
|
import type { StyleSelection } from "../selection/styleSelection.js";
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
selection?: StyleSelection | null;
|
|
11
|
-
entries?: TokenEntry[];
|
|
12
|
-
tokenRows?: ResolvedProperty[];
|
|
13
|
-
onAfterEdit?: () => void;
|
|
14
|
-
}
|
|
15
|
-
export declare function SpacingBox(props: SpacingBoxProps): ReactElement;
|
|
7
|
+
/** Values for one selection, projected from its computed styles or the shared selection model. */
|
|
8
|
+
export declare function projectSpacing(element: HTMLElement, selection: StyleSelection | null | undefined, tokenRows: ResolvedProperty[]): ReturnType<typeof projectInspectorValues>["spacing"];
|
|
16
9
|
export interface SpacingFieldProps {
|
|
17
10
|
property: "padding" | "margin" | "inset";
|
|
18
11
|
projection: InspectorSpacingProjection;
|
|
@@ -5,28 +5,19 @@ import { TokenField, TokenValueField } from "../tokens/TokenField.js";
|
|
|
5
5
|
import { IconButton } from "../ui/IconButton.js";
|
|
6
6
|
import { SideValuesField, SIDE_NAMES, MarginSideIndicator, } from "../ui/SideValuesField.js";
|
|
7
7
|
import { setStyles, swapTokens } from "../tokens/editActions.js";
|
|
8
|
+
import { isCalcExpression } from "../../css/value-semantics/index.js";
|
|
9
|
+
import { deriveActiveTokenName, isExpressionRow } from "./fieldValue.js";
|
|
8
10
|
import { completeCssValue } from "./completeCssValue.js";
|
|
9
11
|
import { valuePolicyFor } from "./valuePolicy.js";
|
|
10
12
|
import { projectInspectorValues, projectInspectorValuesForSelection, } from "../spacing/projection.js";
|
|
11
|
-
import { getStateStyleValue } from "../shell/stateValue.js";
|
|
12
13
|
import { isZeroCssValue } from "./stylePresence.js";
|
|
13
14
|
import { useFieldVisibility } from "./useFieldVisibility.js";
|
|
14
15
|
import { inlineBlockedBy } from "./inlineAuthored.js";
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const allEntries = entries ?? [];
|
|
19
|
-
const projection = selection
|
|
16
|
+
/** Values for one selection, projected from its computed styles or the shared selection model. */
|
|
17
|
+
export function projectSpacing(element, selection, tokenRows) {
|
|
18
|
+
return (selection
|
|
20
19
|
? projectInspectorValuesForSelection(selection)
|
|
21
|
-
: projectInspectorValues(
|
|
22
|
-
const showRelativeInset = selection
|
|
23
|
-
? selection.supportsRole("relative-position")
|
|
24
|
-
: (() => {
|
|
25
|
-
const value = getStateStyleValue(el, "position", "static").trim().toLowerCase();
|
|
26
|
-
return value === "relative" || value === "sticky";
|
|
27
|
-
})();
|
|
28
|
-
const editTarget = selection?.target ?? el;
|
|
29
|
-
return (_jsxs("div", { className: "editor", "data-test": "spacing-box", children: [_jsx("div", { className: "editor__title", children: "Spacing" }), _jsxs("div", { className: "spacing", children: [_jsx(SpacingField, { property: "padding", projection: projection.spacing.padding, domElement: el, editTarget: editTarget, selection: selection, entries: allEntries, tokenRows: tokenRows, onAfterEdit: onAfterEdit }), _jsx(SpacingField, { property: "margin", projection: projection.spacing.margin, domElement: el, editTarget: editTarget, selection: selection, entries: allEntries, tokenRows: tokenRows, onAfterEdit: onAfterEdit }), showRelativeInset ? _jsx(SpacingField, { property: "inset", projection: projection.spacing.inset, domElement: el, editTarget: editTarget, selection: selection, entries: allEntries, tokenRows: tokenRows, onAfterEdit: onAfterEdit }) : null] })] }));
|
|
20
|
+
: projectInspectorValues(element, tokenRows)).spacing;
|
|
30
21
|
}
|
|
31
22
|
export function SpacingField({ property, projection: spacingProjection, domElement: el, editTarget, selection, entries, tokenRows, onAfterEdit, showLabel = true, showEmptyState = true, suggestions, }) {
|
|
32
23
|
const pairDefinitions = [
|
|
@@ -40,12 +31,13 @@ export function SpacingField({ property, projection: spacingProjection, domEleme
|
|
|
40
31
|
return {
|
|
41
32
|
side,
|
|
42
33
|
icon: null,
|
|
43
|
-
control: (_jsx(TokenField, { property: sideName, selection: selection, tokenRow: findTokenRow(tokenRows, sideName), domElement: el, editTarget: editTarget, entries: entries, suggestions: suggestions,
|
|
34
|
+
control: (_jsx(TokenField, { property: sideName, selection: selection, tokenRow: findTokenRow(tokenRows, sideName), domElement: el, editTarget: editTarget, entries: entries, suggestions: suggestions, initialValue: property === "inset" ? "auto" : undefined, displayValue: property === "inset" && !field.tokenName
|
|
35
|
+
? field.authoredValue
|
|
36
|
+
: isCalcExpression(field.authoredValue) && field.value ? field.value : undefined, editMetadata: metadataFor(findTokenRow(tokenRows, sideName)), onAfterEdit: onAfterEdit, chipVariant: "small", leading: icon })),
|
|
44
37
|
};
|
|
45
38
|
});
|
|
46
39
|
const hasSpacing = SIDE_NAMES.some((side) => {
|
|
47
|
-
// Zero spacing is visually empty
|
|
48
|
-
// reset, a component rule, or a token. Open editors stay open below.
|
|
40
|
+
// Zero spacing is visually empty whatever its source; open editors stay open below.
|
|
49
41
|
const value = spacingProjection.fields[side].value.trim();
|
|
50
42
|
return value !== "" && !isZeroCssValue(value) && (property !== "inset" || value !== "auto");
|
|
51
43
|
});
|
|
@@ -88,14 +80,11 @@ function PairedTokenField({ displayProperty, sideProperties, domElement: el, edi
|
|
|
88
80
|
const row = pairTokenRow(displayProperty, axisProjection);
|
|
89
81
|
const groupMixed = axisProjection.fields.some((field) => field.value === "Mixed");
|
|
90
82
|
const valuesMatch = axisProjection.state === "shared" && !groupMixed;
|
|
91
|
-
const expression =
|
|
92
|
-
|| row.modifiers?.some((modifier) => modifier.kind === "alpha")));
|
|
83
|
+
const expression = isExpressionRow(row);
|
|
93
84
|
const calcAuthored = row?.authored ?? row?.declaredValue ?? "";
|
|
94
|
-
const isCalcAuthored =
|
|
95
|
-
const activeTokenName =
|
|
96
|
-
// Some browsers
|
|
97
|
-
// Keep the authored keyword visible because replacing it with that transient
|
|
98
|
-
// size would misrepresent the declaration and change the edit semantics.
|
|
85
|
+
const isCalcAuthored = isCalcExpression(calcAuthored);
|
|
86
|
+
const activeTokenName = deriveActiveTokenName({ row, mixed: !valuesMatch, authored: calcAuthored });
|
|
87
|
+
// Some browsers report the used pixel size for horizontal auto margins; keep the authored keyword.
|
|
99
88
|
const committedValue = groupMixed
|
|
100
89
|
? "Mixed"
|
|
101
90
|
: valuesMatch
|
|
@@ -130,10 +119,7 @@ function PairedTokenField({ displayProperty, sideProperties, domElement: el, edi
|
|
|
130
119
|
}, onUnlink: commitAxisValue, leading: leading, blockedBy: blockedBy }));
|
|
131
120
|
}
|
|
132
121
|
function fieldDisplayValue(field) {
|
|
133
|
-
return
|
|
134
|
-
}
|
|
135
|
-
function isCalcValue(value) {
|
|
136
|
-
return /\bcalc\s*\(/i.test(value);
|
|
122
|
+
return isCalcExpression(field.authoredValue) ? field.value : field.authoredValue.trim() || field.value;
|
|
137
123
|
}
|
|
138
124
|
function splitAxisValue(value) {
|
|
139
125
|
let depth = 0;
|
|
@@ -2,6 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
|
2
2
|
import { useEffect, useState } from "react";
|
|
3
3
|
import { IconTextSize, IconAlignCenter, IconAlignLeft, IconAlignRight, IconLayoutAlignMiddle, IconLayoutAlignBottom, IconLayoutAlignTop, IconBaseline, IconChevronDown, IconItalic, IconLetterSpacing, IconTypography, } from "@tabler/icons-react";
|
|
4
4
|
import { findTokenRow, metadataFor } from "./rowLookup.js";
|
|
5
|
+
import { isExpressionRow } from "./fieldValue.js";
|
|
5
6
|
import { TokenField } from "../tokens/TokenField.js";
|
|
6
7
|
import { Select } from "../ui/Select.js";
|
|
7
8
|
import { SegmentedControl } from "../ui/SegmentedControl.js";
|
|
@@ -36,10 +37,7 @@ function TypographyTokenField(props) {
|
|
|
36
37
|
const tokenName = selectedProperty
|
|
37
38
|
? selectedProperty.token.kind === "common" ? selectedProperty.token.name : null
|
|
38
39
|
: tokenRow?.tokenName;
|
|
39
|
-
const hasTokenChip = Boolean(tokenName
|
|
40
|
-
&& tokenRow?.capability !== "raw"
|
|
41
|
-
&& tokenRow?.capability !== "composite"
|
|
42
|
-
&& !tokenRow?.modifiers?.some((modifier) => modifier.kind === "alpha"));
|
|
40
|
+
const hasTokenChip = Boolean(tokenName && !isExpressionRow(tokenRow));
|
|
43
41
|
return (_jsx(ControlSurface, { className: `typography__field typography__field--${property}`, children: _jsx(TokenField, { property: property, tokenRow: tokenRow, selection: selection, domElement: domElement, editTarget: editTarget, entries: entries, editMetadata: metadataFor(tokenRow), leading: icon, trailing: metric || hasTokenChip ? undefined : _jsx(IconChevronDown, { size: 17, stroke: 1.8, "aria-hidden": "true" }), label: label, chipVariant: chipVariant, onAfterEdit: onAfterEdit }) }));
|
|
44
42
|
}
|
|
45
43
|
const FONT_STYLE_OPTIONS = [
|
|
@@ -6,22 +6,17 @@ export type BorderSide = (typeof BORDER_SIDES)[number];
|
|
|
6
6
|
export type BorderComponent = "width" | "style" | "color";
|
|
7
7
|
/** Reads a property's computed value for the inspected style state. */
|
|
8
8
|
export type ComputedStyleReader = (property: string, fallback: string) => string;
|
|
9
|
-
/** What the border editor knows about one element: its cascade rows and computed style. */
|
|
10
9
|
export interface BorderSource {
|
|
11
10
|
readonly rows: readonly ResolvedProperty[];
|
|
12
11
|
readonly computed: ComputedStyleReader;
|
|
13
12
|
}
|
|
14
13
|
export interface BorderEditorState {
|
|
15
|
-
/** Every side shares its width, style, and color. Never true for a group selection. */
|
|
16
14
|
readonly sidesLinked: boolean;
|
|
17
|
-
/**
|
|
15
|
+
/** Editable only through a raw field. */
|
|
18
16
|
readonly rawShorthandRow: ResolvedProperty | null;
|
|
19
|
-
/** The linked style draws a line, so linked width and color are meaningful. */
|
|
20
17
|
readonly linkedStyleDraws: boolean;
|
|
21
|
-
/** Rows backing the linked `border-width`, `border-style`, and `border-color` fields. */
|
|
22
18
|
readonly linkedRows: Readonly<Record<BorderComponent, ResolvedProperty | null>>;
|
|
23
19
|
}
|
|
24
|
-
/** User choices the border editor turns into declarations. */
|
|
25
20
|
export type BorderIntent = {
|
|
26
21
|
readonly kind: "add";
|
|
27
22
|
} | {
|
|
@@ -37,6 +32,5 @@ export declare function borderProperty(component: BorderComponent, side?: Border
|
|
|
37
32
|
export declare function readBorderEditor(source: BorderSource, { group }: {
|
|
38
33
|
readonly group: boolean;
|
|
39
34
|
}): BorderEditorState;
|
|
40
|
-
/** Whether any side draws a visible line, including after stylesheet resets. */
|
|
41
35
|
export declare function hasVisibleBorder(computed: ComputedStyleReader): boolean;
|
|
42
36
|
export declare function borderDeclarations(source: BorderSource, intent: BorderIntent): StyleDeclaration[];
|
|
@@ -18,10 +18,7 @@ function isBorderStyle(value) {
|
|
|
18
18
|
function sideProperties(component) {
|
|
19
19
|
return BORDER_SIDES.map((side) => borderProperty(component, side));
|
|
20
20
|
}
|
|
21
|
-
/**
|
|
22
|
-
* Effective value of one border width, style, or color property. Structured
|
|
23
|
-
* shorthand parts win, then authored text, then the computed style.
|
|
24
|
-
*/
|
|
21
|
+
/** Precedence: structured shorthand parts, then authored text, then computed style. */
|
|
25
22
|
function borderComponentValue(source, component, property) {
|
|
26
23
|
const row = findTokenRow(source.rows, property);
|
|
27
24
|
const fallback = COMPONENT_FALLBACK[component];
|
|
@@ -45,11 +42,7 @@ function sideSignature(source, component, property) {
|
|
|
45
42
|
return value;
|
|
46
43
|
return `${value}|${findTokenRow(source.rows, property)?.tokenName ?? ""}`;
|
|
47
44
|
}
|
|
48
|
-
/**
|
|
49
|
-
* A component is linked when every side shares its value. A lone shorthand row
|
|
50
|
-
* with no per-side rows is linked by construction; four different `border-*`
|
|
51
|
-
* shorthands compare by their structured parts, not their full text.
|
|
52
|
-
*/
|
|
45
|
+
/** A lone shorthand row is linked by construction; per-side rows compare by structured parts. */
|
|
53
46
|
function componentLinked(source, component) {
|
|
54
47
|
const properties = sideProperties(component);
|
|
55
48
|
const hasShorthandRow = findTokenRow(source.rows, borderProperty(component)) !== null;
|
|
@@ -83,7 +76,6 @@ export function readBorderEditor(source, { group }) {
|
|
|
83
76
|
},
|
|
84
77
|
};
|
|
85
78
|
}
|
|
86
|
-
/** Whether any side draws a visible line, including after stylesheet resets. */
|
|
87
79
|
export function hasVisibleBorder(computed) {
|
|
88
80
|
return BORDER_SIDES.some((side) => {
|
|
89
81
|
const style = computed(borderProperty("style", side), "none").toLowerCase();
|
|
@@ -92,7 +84,6 @@ export function hasVisibleBorder(computed) {
|
|
|
92
84
|
return !isZeroCssValue(computed(borderProperty("width", side), "0px"));
|
|
93
85
|
});
|
|
94
86
|
}
|
|
95
|
-
/** Linking sides writes each component shorthand from the top side's values. */
|
|
96
87
|
function linkSidesDeclarations(source) {
|
|
97
88
|
const components = ["style", "width", "color"];
|
|
98
89
|
return components.map((component) => ({
|
|
@@ -1,8 +1,4 @@
|
|
|
1
1
|
import type { ValuePolicy } from "./valuePolicy.js";
|
|
2
2
|
export declare const CSS_NUMBER_SOURCE = "[+-]?(?:(?:\\d+\\.?\\d*)|(?:\\.\\d+))(?:e[+-]?\\d+)?";
|
|
3
|
-
/**
|
|
4
|
-
* Completes a bare numeric entry with its property's default unit. This is a
|
|
5
|
-
* commit-time formatter; it deliberately does not validate or reinterpret
|
|
6
|
-
* arbitrary CSS supplied by the user.
|
|
7
|
-
*/
|
|
3
|
+
/** Commit-time only; never validates or reinterprets arbitrary CSS input. */
|
|
8
4
|
export declare function completeCssValue(rawValue: string, policy: ValuePolicy): string;
|
|
@@ -1,15 +1,7 @@
|
|
|
1
|
-
//
|
|
2
|
-
// matches the entire value: units, functions, keywords, and compound values
|
|
3
|
-
// are all valid raw CSS and must be passed through unchanged.
|
|
4
|
-
// Exported as a source fragment so other editors (e.g. nudgeValue) build
|
|
5
|
-
// their number-aware patterns from the same single grammar definition.
|
|
1
|
+
// Exported as a source fragment for reuse in nudgeValue; matches only a complete CSS <number>.
|
|
6
2
|
export const CSS_NUMBER_SOURCE = "[+-]?(?:(?:\\d+\\.?\\d*)|(?:\\.\\d+))(?:e[+-]?\\d+)?";
|
|
7
3
|
const BARE_NUMBER = new RegExp(`^(?:${CSS_NUMBER_SOURCE})$`, "i");
|
|
8
|
-
/**
|
|
9
|
-
* Completes a bare numeric entry with its property's default unit. This is a
|
|
10
|
-
* commit-time formatter; it deliberately does not validate or reinterpret
|
|
11
|
-
* arbitrary CSS supplied by the user.
|
|
12
|
-
*/
|
|
4
|
+
/** Commit-time only; never validates or reinterprets arbitrary CSS input. */
|
|
13
5
|
export function completeCssValue(rawValue, policy) {
|
|
14
6
|
const value = rawValue.trim();
|
|
15
7
|
if (!BARE_NUMBER.test(value) || Number(value) === 0) {
|
|
@@ -17,9 +9,7 @@ export function completeCssValue(rawValue, policy) {
|
|
|
17
9
|
}
|
|
18
10
|
if (policy.kind === "line-height") {
|
|
19
11
|
const multiplier = Number(value);
|
|
20
|
-
//
|
|
21
|
-
// larger whole values conventionally represent a percentage (120). Keep
|
|
22
|
-
// both convenient forms while committing a single percentage value.
|
|
12
|
+
// Values up to 10 are multipliers (1.6); larger values are conventional percentages (120).
|
|
23
13
|
if (multiplier > 0 && multiplier <= 10) {
|
|
24
14
|
return `${formatPercentage(multiplier * 100)}%`;
|
|
25
15
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ResolvedProperty } from "../../css/model/index.js";
|
|
2
|
+
import type { SelectionProperty } from "../inspection/selectionProperty.js";
|
|
3
|
+
/**
|
|
4
|
+
* True when a row reports a value the inspector must treat as an expression,
|
|
5
|
+
* not as a token: raw CSS, a composite shorthand, an alpha modifier, or an
|
|
6
|
+
* authored color expression such as color-mix().
|
|
7
|
+
*/
|
|
8
|
+
export declare function isExpressionRow(row: ResolvedProperty | null): boolean;
|
|
9
|
+
export interface ActiveTokenInput {
|
|
10
|
+
readonly row: ResolvedProperty | null;
|
|
11
|
+
readonly selectedProperty?: SelectionProperty | null;
|
|
12
|
+
/** A multi-element selection that disagrees on this property shows "Mixed" and no chip. */
|
|
13
|
+
readonly mixed: boolean;
|
|
14
|
+
/** The authored CSS value; a calc() expression suppresses the chip. */
|
|
15
|
+
readonly authored?: string;
|
|
16
|
+
/** A property-specific token name that outranks the row (opacity's token-backed value). */
|
|
17
|
+
readonly override?: string | null;
|
|
18
|
+
}
|
|
19
|
+
/** The token a field should show as active, or null when the value is not token-backed. */
|
|
20
|
+
export declare function deriveActiveTokenName(input: ActiveTokenInput): string | null;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { isCalcExpression } from "../../css/value-semantics/index.js";
|
|
2
|
+
/**
|
|
3
|
+
* True when a row reports a value the inspector must treat as an expression,
|
|
4
|
+
* not as a token: raw CSS, a composite shorthand, an alpha modifier, or an
|
|
5
|
+
* authored color expression such as color-mix().
|
|
6
|
+
*/
|
|
7
|
+
export function isExpressionRow(row) {
|
|
8
|
+
return Boolean(row && (row.capability === "raw"
|
|
9
|
+
|| row.capability === "composite"
|
|
10
|
+
|| row.modifiers?.some((modifier) => modifier.kind === "alpha")
|
|
11
|
+
|| row.color?.isExpression));
|
|
12
|
+
}
|
|
13
|
+
/** The token a field should show as active, or null when the value is not token-backed. */
|
|
14
|
+
export function deriveActiveTokenName(input) {
|
|
15
|
+
const { row, selectedProperty, mixed, authored = "", override } = input;
|
|
16
|
+
if (mixed)
|
|
17
|
+
return null;
|
|
18
|
+
if (override)
|
|
19
|
+
return override;
|
|
20
|
+
if (isExpressionRow(row) || isCalcExpression(authored))
|
|
21
|
+
return null;
|
|
22
|
+
if (selectedProperty) {
|
|
23
|
+
return selectedProperty.token.kind === "common" ? selectedProperty.token.name : null;
|
|
24
|
+
}
|
|
25
|
+
return row?.tokenName ?? null;
|
|
26
|
+
}
|
|
@@ -12,6 +12,6 @@ export interface GradientValue {
|
|
|
12
12
|
stops: GradientStop[];
|
|
13
13
|
}
|
|
14
14
|
export declare function defaultGradient(): GradientValue;
|
|
15
|
-
/**
|
|
15
|
+
/** Null for gradients the editor cannot represent; callers keep the raw CSS. */
|
|
16
16
|
export declare function parseGradient(value: string): GradientValue | null;
|
|
17
17
|
export declare function serializeGradient(gradient: GradientValue): string;
|
|
@@ -16,7 +16,7 @@ function angleDegrees(value) {
|
|
|
16
16
|
default: return number;
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
|
-
/**
|
|
19
|
+
/** Null for gradients the editor cannot represent; callers keep the raw CSS. */
|
|
20
20
|
export function parseGradient(value) {
|
|
21
21
|
if (splitTopLevel(value, ",").length !== 1)
|
|
22
22
|
return null;
|
|
@@ -35,7 +35,7 @@ export function parseGradient(value) {
|
|
|
35
35
|
const direction = /^(to\s+(?:(?:left|right|top|bottom)(?:\s+|$)){1,2})/.exec(prelude)?.[0]?.trim();
|
|
36
36
|
if (direction) {
|
|
37
37
|
const directions = { top: 0, "top right": 45, "right top": 45, right: 90, "bottom right": 135, "right bottom": 135, bottom: 180, "bottom left": 225, "left bottom": 225, left: 270, "top left": 315, "left top": 315 };
|
|
38
|
-
// Corner directions depend on the element's aspect ratio
|
|
38
|
+
// Corner directions depend on the element's aspect ratio; keep them as CSS.
|
|
39
39
|
if (direction.slice(3).includes(" "))
|
|
40
40
|
return null;
|
|
41
41
|
angle = directions[direction.slice(3)] ?? 180;
|
|
@@ -102,6 +102,7 @@ export function parseGradient(value) {
|
|
|
102
102
|
}
|
|
103
103
|
start = end;
|
|
104
104
|
}
|
|
105
|
+
// SAFETY: interpolation above fills every null position, so each stop has a numeric position.
|
|
105
106
|
return { type, repeating: Boolean(match[1]), angle, prelude, stops: stops };
|
|
106
107
|
}
|
|
107
108
|
export function serializeGradient(gradient) {
|
|
@@ -2,72 +2,32 @@ import type { ChangeRecord } from "../tokens/editActions.js";
|
|
|
2
2
|
import { type EditTarget } from "../selection/editTarget.js";
|
|
3
3
|
/** One grid axis of a grid item: `column` maps to grid-column-*, `row` to grid-row-*. */
|
|
4
4
|
export type GridAxis = "column" | "row";
|
|
5
|
-
/**
|
|
6
|
-
* Alignment vocabulary for grid children. `default` defers to the container's
|
|
7
|
-
* `justify-items` / `align-items` (authored as `auto`); `fill` is `stretch`.
|
|
8
|
-
*/
|
|
9
5
|
export type GridChildAlignment = "auto" | "stretch" | "start" | "center" | "end";
|
|
10
6
|
export interface GridAxisPlacement {
|
|
11
|
-
/** Authored or computed start line token: "auto", a line number, or a named line. */
|
|
12
7
|
start: string;
|
|
13
|
-
/**
|
|
14
|
-
* Span when the placement is expressible as start + span N: the end side is
|
|
15
|
-
* `span N`, or both sides are definite positive line numbers. Null when the
|
|
16
|
-
* end side is auto, a negative line, or not derivable.
|
|
17
|
-
*/
|
|
8
|
+
/** Expressible as start + span N; null when the end side is auto, negative, or underivable. */
|
|
18
9
|
span: number | null;
|
|
19
10
|
}
|
|
20
11
|
export declare const GRID_CHILD_MAX_TRACKS = 12;
|
|
21
|
-
/** Parses a `span N` end-side token into N. */
|
|
22
12
|
export declare function parseSpanToken(value: string): number | null;
|
|
23
|
-
/**
|
|
24
|
-
* Reads one placement axis from authored CSS (preferred) falling back to
|
|
25
|
-
* computed CSS, which stays correct even when the authored rule uses the
|
|
26
|
-
* `grid-column` / `grid-row` shorthand.
|
|
27
|
-
*/
|
|
13
|
+
/** Computed CSS stays correct even when the authored rule uses the grid-column/grid-row shorthand. */
|
|
28
14
|
export declare function readGridAxisPlacement(el: HTMLElement, axis: GridAxis): GridAxisPlacement;
|
|
29
|
-
/**
|
|
30
|
-
* Commits one placement axis as managed longhands. The UI model is
|
|
31
|
-
* "start line + span", so editing either side recomposes both:
|
|
32
|
-
* a simple span is rewritten as `span N` (or `auto` for 1), while a negative
|
|
33
|
-
* end line ("to the last line") and plain auto ends are preserved untouched.
|
|
34
|
-
* `span: "keep"` re-commits the currently derived span, if any, so moving the
|
|
35
|
-
* start line keeps the item's size.
|
|
36
|
-
*/
|
|
15
|
+
/** `span: "keep"` re-commits the derived span so moving the start line keeps the item's size. */
|
|
37
16
|
export declare function commitGridAxisPlacement(target: EditTarget, axis: GridAxis, commit: {
|
|
38
17
|
start?: string;
|
|
39
18
|
span?: number | "keep";
|
|
40
19
|
}): ChangeRecord[];
|
|
41
|
-
/**
|
|
42
|
-
* Reads one self-alignment axis as a raw CSS token with `normal` mapped to
|
|
43
|
-
* `stretch`: on grid items `normal` has stretch behavior (except replaced
|
|
44
|
-
* elements), so labeling it "Parent default" would misdescribe the rendering
|
|
45
|
-
* and re-committing `auto` for it could change the layout. `auto` alone means
|
|
46
|
-
* the item defers to the container's `justify-items` / `align-items`.
|
|
47
|
-
*/
|
|
20
|
+
/** `normal` maps to `stretch`: that is its grid-item behavior, and re-committing `auto` would change layout. */
|
|
48
21
|
export declare function readGridChildAlignment(el: HTMLElement, axis: "h" | "v"): string;
|
|
49
|
-
/** Friendly alignment labels; `auto` resolves to the container's items alignment. */
|
|
50
22
|
export declare const GRID_CHILD_ALIGNMENT_OPTIONS: Array<{
|
|
51
23
|
value: GridChildAlignment;
|
|
52
24
|
label: string;
|
|
53
25
|
}>;
|
|
54
|
-
/**
|
|
55
|
-
* Commits one self-alignment axis. The alignment vocabulary is an open CSS
|
|
56
|
-
* set — the friendly pickers cover the common keywords while authored values
|
|
57
|
-
* such as `self-start` or `normal` round-trip verbatim — so this accepts any
|
|
58
|
-
* self-alignment token the UI puts in its options.
|
|
59
|
-
*/
|
|
26
|
+
/** Accepts any self-alignment token, not just the picker's keywords. */
|
|
60
27
|
export declare function commitGridChildAlignment(target: EditTarget, axis: "h" | "v", alignment: string): ChangeRecord[];
|
|
61
|
-
/**
|
|
62
|
-
* Resolved track count of the parent grid on one axis, when CSS makes it
|
|
63
|
-
* definite (auto-fill/auto-fit tracks cannot be counted). Caps at
|
|
64
|
-
* GRID_CHILD_MAX_TRACKS to bound generated line options.
|
|
65
|
-
*/
|
|
28
|
+
/** Null for auto-fill/auto-fit tracks, which CSS leaves indefinite. */
|
|
66
29
|
export declare function parentTrackCount(el: HTMLElement, axis: GridAxis): number | null;
|
|
67
|
-
/**
|
|
68
|
-
* Start-line options for one axis: Auto plus explicit line numbers. A grid
|
|
69
|
-
* with N tracks has N+1 lines, so the final start line is count + 1.
|
|
70
|
-
*/
|
|
30
|
+
/** A grid with N tracks has N+1 start lines. */
|
|
71
31
|
export declare function startLineOptions(trackCount: number | null): Array<{
|
|
72
32
|
value: string;
|
|
73
33
|
label: string;
|
|
@@ -12,16 +12,11 @@ function normalizeToken(value) {
|
|
|
12
12
|
function isLineNumber(value) {
|
|
13
13
|
return LINE_NUMBER.test(value);
|
|
14
14
|
}
|
|
15
|
-
/** Parses a `span N` end-side token into N. */
|
|
16
15
|
export function parseSpanToken(value) {
|
|
17
16
|
const match = SPAN_TOKEN.exec(value.trim());
|
|
18
17
|
return match ? Number(match[1]) : null;
|
|
19
18
|
}
|
|
20
|
-
/**
|
|
21
|
-
* Reads one placement axis from authored CSS (preferred) falling back to
|
|
22
|
-
* computed CSS, which stays correct even when the authored rule uses the
|
|
23
|
-
* `grid-column` / `grid-row` shorthand.
|
|
24
|
-
*/
|
|
19
|
+
/** Computed CSS stays correct even when the authored rule uses the grid-column/grid-row shorthand. */
|
|
25
20
|
export function readGridAxisPlacement(el, axis) {
|
|
26
21
|
const start = getLayoutValue(el, `grid-${axis}-start`);
|
|
27
22
|
const end = getLayoutValue(el, `grid-${axis}-end`);
|
|
@@ -42,14 +37,7 @@ export function readGridAxisPlacement(el, axis) {
|
|
|
42
37
|
}
|
|
43
38
|
return { start: startToken, span };
|
|
44
39
|
}
|
|
45
|
-
/**
|
|
46
|
-
* Commits one placement axis as managed longhands. The UI model is
|
|
47
|
-
* "start line + span", so editing either side recomposes both:
|
|
48
|
-
* a simple span is rewritten as `span N` (or `auto` for 1), while a negative
|
|
49
|
-
* end line ("to the last line") and plain auto ends are preserved untouched.
|
|
50
|
-
* `span: "keep"` re-commits the currently derived span, if any, so moving the
|
|
51
|
-
* start line keeps the item's size.
|
|
52
|
-
*/
|
|
40
|
+
/** `span: "keep"` re-commits the derived span so moving the start line keeps the item's size. */
|
|
53
41
|
export function commitGridAxisPlacement(target, axis, commit) {
|
|
54
42
|
const elements = targetElements(target);
|
|
55
43
|
const declarations = [];
|
|
@@ -77,20 +65,13 @@ export function commitGridAxisPlacement(target, axis, commit) {
|
|
|
77
65
|
declarations.push({ property: `grid-${axis}-end`, value: endValue });
|
|
78
66
|
return declarations.length > 0 ? setStyles(target, declarations) : [];
|
|
79
67
|
}
|
|
80
|
-
/**
|
|
81
|
-
* Reads one self-alignment axis as a raw CSS token with `normal` mapped to
|
|
82
|
-
* `stretch`: on grid items `normal` has stretch behavior (except replaced
|
|
83
|
-
* elements), so labeling it "Parent default" would misdescribe the rendering
|
|
84
|
-
* and re-committing `auto` for it could change the layout. `auto` alone means
|
|
85
|
-
* the item defers to the container's `justify-items` / `align-items`.
|
|
86
|
-
*/
|
|
68
|
+
/** `normal` maps to `stretch`: that is its grid-item behavior, and re-committing `auto` would change layout. */
|
|
87
69
|
export function readGridChildAlignment(el, axis) {
|
|
88
70
|
const property = axis === "h" ? "justify-self" : "align-self";
|
|
89
71
|
const value = getLayoutValue(el, property);
|
|
90
72
|
const token = normalizeToken(value.authored ?? value.computed);
|
|
91
73
|
return token === "normal" ? "stretch" : token;
|
|
92
74
|
}
|
|
93
|
-
/** Friendly alignment labels; `auto` resolves to the container's items alignment. */
|
|
94
75
|
export const GRID_CHILD_ALIGNMENT_OPTIONS = [
|
|
95
76
|
{ value: "auto", label: "Parent default" },
|
|
96
77
|
{ value: "stretch", label: "Fill" },
|
|
@@ -98,22 +79,13 @@ export const GRID_CHILD_ALIGNMENT_OPTIONS = [
|
|
|
98
79
|
{ value: "center", label: "Center" },
|
|
99
80
|
{ value: "end", label: "End" },
|
|
100
81
|
];
|
|
101
|
-
/**
|
|
102
|
-
* Commits one self-alignment axis. The alignment vocabulary is an open CSS
|
|
103
|
-
* set — the friendly pickers cover the common keywords while authored values
|
|
104
|
-
* such as `self-start` or `normal` round-trip verbatim — so this accepts any
|
|
105
|
-
* self-alignment token the UI puts in its options.
|
|
106
|
-
*/
|
|
82
|
+
/** Accepts any self-alignment token, not just the picker's keywords. */
|
|
107
83
|
export function commitGridChildAlignment(target, axis, alignment) {
|
|
108
84
|
const property = axis === "h" ? "justify-self" : "align-self";
|
|
109
85
|
const record = setStyle(target, property, alignment);
|
|
110
86
|
return record ? [record] : [];
|
|
111
87
|
}
|
|
112
|
-
/**
|
|
113
|
-
* Resolved track count of the parent grid on one axis, when CSS makes it
|
|
114
|
-
* definite (auto-fill/auto-fit tracks cannot be counted). Caps at
|
|
115
|
-
* GRID_CHILD_MAX_TRACKS to bound generated line options.
|
|
116
|
-
*/
|
|
88
|
+
/** Null for auto-fill/auto-fit tracks, which CSS leaves indefinite. */
|
|
117
89
|
export function parentTrackCount(el, axis) {
|
|
118
90
|
const parent = el.parentElement;
|
|
119
91
|
if (!parent)
|
|
@@ -124,10 +96,7 @@ export function parentTrackCount(el, axis) {
|
|
|
124
96
|
return null;
|
|
125
97
|
return Math.min(count, GRID_CHILD_MAX_TRACKS);
|
|
126
98
|
}
|
|
127
|
-
/**
|
|
128
|
-
* Start-line options for one axis: Auto plus explicit line numbers. A grid
|
|
129
|
-
* with N tracks has N+1 lines, so the final start line is count + 1.
|
|
130
|
-
*/
|
|
99
|
+
/** A grid with N tracks has N+1 start lines. */
|
|
131
100
|
export function startLineOptions(trackCount) {
|
|
132
101
|
const lineCount = (trackCount ?? GRID_CHILD_MAX_TRACKS) + 1;
|
|
133
102
|
const options = [{ value: "auto", label: "Auto" }];
|