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
|
@@ -35,7 +35,7 @@ function videoFrame(video) {
|
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
37
|
catch {
|
|
38
|
-
// Cross-origin frames can taint a canvas
|
|
38
|
+
// Cross-origin frames can taint a canvas; the poster or empty frame is kept.
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
return image;
|
|
@@ -51,8 +51,7 @@ export function prepareSketchVideoFrames(targetDocument) {
|
|
|
51
51
|
placeholder.hidden = true;
|
|
52
52
|
placeholder.src = EMPTY_FRAME;
|
|
53
53
|
placeholder.setAttribute(FRAME_ATTRIBUTE, id);
|
|
54
|
-
//
|
|
55
|
-
// the application's video. Only its clone receives the video's styles.
|
|
54
|
+
// A hidden sibling placeholder preserves capture order without touching the live video.
|
|
56
55
|
video.before(placeholder);
|
|
57
56
|
placeholders.push(placeholder);
|
|
58
57
|
}
|
|
@@ -29,15 +29,7 @@ export interface InspectorSpacingProjection {
|
|
|
29
29
|
export interface InspectorProjection {
|
|
30
30
|
spacing: Record<ProjectionGroup, InspectorSpacingProjection>;
|
|
31
31
|
}
|
|
32
|
-
/**
|
|
33
|
-
* Projects resolved physical side facts into the compact spacing UI shape.
|
|
34
|
-
* Authored value, token identity, computed value, and source property all
|
|
35
|
-
* participate in shared/mixed detection so visually equal values cannot
|
|
36
|
-
* accidentally discard authored CSS intent. Source properties remain on each
|
|
37
|
-
* field as provenance but do not by themselves force expansion.
|
|
38
|
-
*/
|
|
39
32
|
export declare function projectInspectorValues(el: HTMLElement, rows: ResolvedProperty[]): InspectorProjection;
|
|
40
|
-
/** Projects computed group values into the existing spacing editor model. */
|
|
41
33
|
export declare function projectInspectorValuesForSelection(selection: StyleSelection): InspectorProjection;
|
|
42
34
|
export declare function projectionSides(axis: ProjectionAxis): readonly [ProjectionSide, ProjectionSide];
|
|
43
35
|
export {};
|
|
@@ -1,23 +1,22 @@
|
|
|
1
1
|
import { getStateStyleValue } from "../shell/stateValue.js";
|
|
2
|
+
import { readAuthoredStyleValue } from "../styleEditors/layoutValue.js";
|
|
2
3
|
const SIDES = ["top", "right", "bottom", "left"];
|
|
3
4
|
const AXIS_SIDES = {
|
|
4
|
-
//
|
|
5
|
-
// horizontal value read as right, left and a mixed vertical value as top,
|
|
6
|
-
// bottom when the compact editor renders both values.
|
|
5
|
+
// CSS physical-side order per axis, so a mixed pair reads right/left, top/bottom.
|
|
7
6
|
horizontal: ["right", "left"],
|
|
8
7
|
vertical: ["top", "bottom"],
|
|
9
8
|
};
|
|
10
9
|
function fieldProjection(el, rows, property) {
|
|
11
10
|
const row = rows.find((candidate) => candidate.property === property) ?? null;
|
|
12
|
-
//
|
|
13
|
-
// one render behind while the debounced inspector refreshes, so use the
|
|
14
|
-
// live computed side value for grouping when available and retain the row
|
|
15
|
-
// for authored/token/source provenance.
|
|
11
|
+
// Resolved rows can be one render behind; the live value is the grouping authority, the row only supplies provenance.
|
|
16
12
|
const liveValue = getStateStyleValue(el, property);
|
|
17
13
|
const rowValue = row?.computed || row?.resolvedValue;
|
|
18
14
|
const rowIsCurrent = !liveValue || !row || Boolean(row.sourceProperty) || !rowValue || rowValue === liveValue;
|
|
19
15
|
const effectiveRow = rowIsCurrent ? row : null;
|
|
20
|
-
const
|
|
16
|
+
const computedValue = liveValue || row?.resolvedValue || "";
|
|
17
|
+
if (isInsetSide(property))
|
|
18
|
+
return insetFieldProjection(el, property, effectiveRow, computedValue);
|
|
19
|
+
const value = computedValue;
|
|
21
20
|
return {
|
|
22
21
|
property,
|
|
23
22
|
authoredValue: effectiveRow?.authored ?? effectiveRow?.declaredValue ?? value,
|
|
@@ -27,11 +26,23 @@ function fieldProjection(el, rows, property) {
|
|
|
27
26
|
row: effectiveRow,
|
|
28
27
|
};
|
|
29
28
|
}
|
|
29
|
+
function isInsetSide(property) {
|
|
30
|
+
return SIDES.includes(property);
|
|
31
|
+
}
|
|
32
|
+
/** Inset sides report the browser's used offset even when unauthored, so only authored values are shown. */
|
|
33
|
+
function insetFieldProjection(el, property, row, computedValue) {
|
|
34
|
+
const authoredValue = (row?.authored ?? row?.declaredValue ?? readAuthoredStyleValue(el, property) ?? "").trim() || "auto";
|
|
35
|
+
return {
|
|
36
|
+
property,
|
|
37
|
+
authoredValue,
|
|
38
|
+
value: authoredValue === "auto" ? "auto" : computedValue || authoredValue,
|
|
39
|
+
tokenName: row?.tokenName ?? null,
|
|
40
|
+
sourceProperty: row?.sourceProperty,
|
|
41
|
+
row,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
30
44
|
function fieldSignature(field) {
|
|
31
|
-
// Source property is provenance, not
|
|
32
|
-
// longhands with the same authored/token value may still use the compact
|
|
33
|
-
// axis control; the individual source properties remain attached to their
|
|
34
|
-
// fields for prompt generation and edit metadata.
|
|
45
|
+
// Source property is provenance, not value identity, so it stays out of the signature.
|
|
35
46
|
return [field.authoredValue, field.tokenName ?? "", field.value].join("|");
|
|
36
47
|
}
|
|
37
48
|
function axisProjection(axis, fields) {
|
|
@@ -61,13 +72,6 @@ function spacingProjection(el, rows, property) {
|
|
|
61
72
|
},
|
|
62
73
|
};
|
|
63
74
|
}
|
|
64
|
-
/**
|
|
65
|
-
* Projects resolved physical side facts into the compact spacing UI shape.
|
|
66
|
-
* Authored value, token identity, computed value, and source property all
|
|
67
|
-
* participate in shared/mixed detection so visually equal values cannot
|
|
68
|
-
* accidentally discard authored CSS intent. Source properties remain on each
|
|
69
|
-
* field as provenance but do not by themselves force expansion.
|
|
70
|
-
*/
|
|
71
75
|
export function projectInspectorValues(el, rows) {
|
|
72
76
|
return {
|
|
73
77
|
spacing: {
|
|
@@ -82,6 +86,8 @@ function selectionField(selection, property) {
|
|
|
82
86
|
const mixed = selectedProperty?.value.kind === "mixed";
|
|
83
87
|
const value = selectedProperty?.value.kind === "common" ? selectedProperty.value.value : "";
|
|
84
88
|
const row = selectedProperty?.primaryRow ?? null;
|
|
89
|
+
if (isInsetSide(property))
|
|
90
|
+
return selectionInsetField(selection, property, row, selectedProperty?.token.kind === "common" ? selectedProperty.token.name : null);
|
|
85
91
|
return {
|
|
86
92
|
property,
|
|
87
93
|
authoredValue: mixed ? "Mixed" : value,
|
|
@@ -91,6 +97,19 @@ function selectionField(selection, property) {
|
|
|
91
97
|
row,
|
|
92
98
|
};
|
|
93
99
|
}
|
|
100
|
+
function selectionInsetField(selection, property, row, tokenName) {
|
|
101
|
+
const authored = selection.domElements.map((el) => readAuthoredStyleValue(el, property) ?? "auto");
|
|
102
|
+
const mixed = new Set(authored).size > 1;
|
|
103
|
+
const value = mixed ? "Mixed" : authored[0] ?? "auto";
|
|
104
|
+
return {
|
|
105
|
+
property,
|
|
106
|
+
authoredValue: value,
|
|
107
|
+
value,
|
|
108
|
+
tokenName: mixed || value === "auto" ? null : tokenName,
|
|
109
|
+
sourceProperty: row?.sourceProperty,
|
|
110
|
+
row,
|
|
111
|
+
};
|
|
112
|
+
}
|
|
94
113
|
function selectionAxis(axis, fields) {
|
|
95
114
|
const sides = AXIS_SIDES[axis];
|
|
96
115
|
const pair = [fields[sides[0]], fields[sides[1]]];
|
|
@@ -118,7 +137,6 @@ function selectionSpacing(selection, property) {
|
|
|
118
137
|
},
|
|
119
138
|
};
|
|
120
139
|
}
|
|
121
|
-
/** Projects computed group values into the existing spacing editor model. */
|
|
122
140
|
export function projectInspectorValuesForSelection(selection) {
|
|
123
141
|
if (selection.elements.length === 1) {
|
|
124
142
|
return projectInspectorValues(selection.primary.domElement, [...selection.primaryRows]);
|
|
@@ -176,7 +176,7 @@ function BackgroundLayerEditor(props) {
|
|
|
176
176
|
const match = /^([+-]?(?:\d*\.)?\d+)(?:deg)?$/.exec(raw.trim());
|
|
177
177
|
if (match && Number.isFinite(Number(match[1])))
|
|
178
178
|
commitGradient({ ...gradient, angle: Number(match[1]) });
|
|
179
|
-
}) : null, _jsx(IconButton, { variant: "
|
|
179
|
+
}) : null, _jsx(IconButton, { variant: "secondary", label: "Reverse gradient", disabled: blockedBy !== null, onClick: () => commitGradient({ ...gradient, stops: [...gradient.stops].reverse().map((stop) => ({ ...stop, position: 100 - stop.position })) }), children: _jsx(IconArrowsDiff, { "aria-hidden": "true" }) }), _jsx(IconButton, { variant: "quiet", label: "Add gradient stop", disabled: blockedBy !== null, onClick: () => addStop(), children: _jsx(IconPlus, { "aria-hidden": "true" }) })] }), gradient.stops.map((stop, index) => ({ stop, index })).sort((a, b) => a.stop.position - b.stop.position).map(({ stop, index }) => {
|
|
180
180
|
const color = interpretTokenValue(stop.color, { table: tokenTable });
|
|
181
181
|
return _jsxs("div", { className: "background-editor__stop-row", role: "group", "aria-label": `Stop ${index + 1}`, children: [rawField(`Stop ${index + 1} position`, `${Number(stop.position.toFixed(3))}%`, (raw) => {
|
|
182
182
|
const match = /^([+-]?(?:\d*\.)?\d+)%?$/.exec(raw.trim());
|
|
@@ -20,7 +20,6 @@ import { BORDER_SIDES, BORDER_STYLES, borderDeclarations, borderProperty, hasVis
|
|
|
20
20
|
function stateStyleReader(el) {
|
|
21
21
|
return (property, fallback) => getStateStyleValue(el, property, fallback);
|
|
22
22
|
}
|
|
23
|
-
/** Reports whether the intent produced any declarations to write. */
|
|
24
23
|
function commitBorderIntent(target, source, intent, onAfterEdit) {
|
|
25
24
|
const declarations = borderDeclarations(source, intent);
|
|
26
25
|
if (declarations.length === 0)
|
|
@@ -29,11 +28,7 @@ function commitBorderIntent(target, source, intent, onAfterEdit) {
|
|
|
29
28
|
onAfterEdit?.();
|
|
30
29
|
return true;
|
|
31
30
|
}
|
|
32
|
-
/**
|
|
33
|
-
* Linked presentation from cascade data + optional user toggle.
|
|
34
|
-
* Divergent faces always open; equal faces start linked but can expand.
|
|
35
|
-
* Linking divergent faces is optimistic until cascade rows catch up.
|
|
36
|
-
*/
|
|
31
|
+
/** User toggle is optimistic: it holds until the cascade-derived state catches up. */
|
|
37
32
|
function useBorderLinkedState(dataLinked, resetKey) {
|
|
38
33
|
const [userUnlinked, setUserUnlinked] = useState(false);
|
|
39
34
|
const [userLinked, setUserLinked] = useState(false);
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ReactElement } from "react";
|
|
2
|
+
import type { EditTarget } from "../selection/editTarget.js";
|
|
3
|
+
import type { StyleSelection } from "../selection/styleSelection.js";
|
|
4
|
+
export interface FlexChildControlsProps {
|
|
5
|
+
domElement: HTMLElement;
|
|
6
|
+
editTarget?: EditTarget;
|
|
7
|
+
selection?: StyleSelection | null;
|
|
8
|
+
revision?: number;
|
|
9
|
+
onAfterEdit?: () => void;
|
|
10
|
+
}
|
|
11
|
+
/** How a flex item shares its parent's space; shown behind the size expander. */
|
|
12
|
+
export declare function FlexChildControls(props: FlexChildControlsProps): ReactElement;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { FlexChildSettingsMenu, LayoutValueField } from "./FlexControls.js";
|
|
3
|
+
const FLEX_GROW_PRESETS = ["0", "1", "2", "3"];
|
|
4
|
+
const FLEX_SHRINK_PRESETS = ["0", "1"];
|
|
5
|
+
const FLEX_BASIS_PRESETS = ["auto", "0", "0%", "100%", "50%", "fit-content"];
|
|
6
|
+
/** How a flex item shares its parent's space; shown behind the size expander. */
|
|
7
|
+
export function FlexChildControls(props) {
|
|
8
|
+
return (_jsxs("div", { className: "layout__group layout__group--bottom-rule", "data-test": "layout-flex-child", children: [_jsxs("div", { className: "layout__flex-heading", children: [_jsx("div", { className: "editor__title", children: "Flex Child" }), _jsx(FlexChildSettingsMenu, { ...props })] }), _jsxs("div", { className: "layout__flex-child-fields", children: [_jsx(LayoutValueField, { label: "Grow", property: "flex-grow", presets: FLEX_GROW_PRESETS, inputOnly: true, ...props }), _jsx(LayoutValueField, { label: "Shrink", property: "flex-shrink", presets: FLEX_SHRINK_PRESETS, inputOnly: true, ...props }), _jsx(LayoutValueField, { label: "Basis", property: "flex-basis", presets: FLEX_BASIS_PRESETS, inputOnly: true, ...props })] })] }));
|
|
9
|
+
}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { ReactElement } 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 FlexControlProps {
|
|
6
|
+
domElement: HTMLElement;
|
|
7
|
+
editTarget?: EditTarget;
|
|
8
|
+
selection?: StyleSelection | null;
|
|
9
|
+
revision?: number;
|
|
10
|
+
onAfterEdit?: () => void;
|
|
11
|
+
}
|
|
12
|
+
export interface LayoutValueFieldProps extends FlexControlProps {
|
|
13
|
+
label: string;
|
|
14
|
+
property: string;
|
|
15
|
+
presets: string[];
|
|
16
|
+
inputOnly?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare function LayoutValueField({ label, property, presets, inputOnly, domElement, editTarget, selection, revision, onAfterEdit }: LayoutValueFieldProps): ReactElement;
|
|
19
|
+
export declare function FlexChildSettingsMenu({ domElement, editTarget, selection, revision, onAfterEdit }: FlexControlProps): ReactElement;
|
|
20
|
+
export interface FlexGapFieldProps extends FlexControlProps {
|
|
21
|
+
property: "row-gap" | "column-gap";
|
|
22
|
+
entries: TokenEntry[];
|
|
23
|
+
tokenRows: ResolvedProperty[];
|
|
24
|
+
}
|
|
25
|
+
export declare function FlexGapField({ property, domElement, editTarget, selection, entries, tokenRows, onAfterEdit }: FlexGapFieldProps): ReactElement;
|
|
26
|
+
export declare function FlexWrapToggle({ domElement, editTarget, selection, revision, onAfterEdit }: FlexControlProps): ReactElement;
|
|
27
|
+
/**
|
|
28
|
+
* The main-axis gap. Spreading the items (`justify-content: space-*`) replaces the fixed gap, so
|
|
29
|
+
* the field reads Auto, keeps the gap as a faint value, and typing `auto` spreads between.
|
|
30
|
+
*/
|
|
31
|
+
export declare function FlexMainGapField({ property, domElement, editTarget, selection, entries, tokenRows, revision, onAfterEdit }: FlexGapFieldProps & {
|
|
32
|
+
revision?: number;
|
|
33
|
+
}): ReactElement;
|
|
34
|
+
export declare function FlexAlignmentGrid({ domElement, editTarget, selection, revision, onAfterEdit }: FlexControlProps): ReactElement;
|
|
35
|
+
export declare function useComputedLayoutValue(domElement: HTMLElement, property: string, fallback: string, revision: number): [string, (value: string) => void];
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useRef, useState } from "react";
|
|
3
|
+
import { IconCheck, IconChevronDown, IconSettings, IconSpacingHorizontal, IconSpacingVertical, IconTextWrap } from "@tabler/icons-react";
|
|
4
|
+
import { LayoutDropdown } from "./LayoutDropdown.js";
|
|
5
|
+
import { LayoutComboField } from "./LayoutComboField.js";
|
|
6
|
+
import { GapField } from "./GapField.js";
|
|
7
|
+
import { inlineBlockedBy } from "./inlineAuthored.js";
|
|
8
|
+
import { setStyle, setStyles } from "../tokens/editActions.js";
|
|
9
|
+
import { IconButton } from "../ui/IconButton.js";
|
|
10
|
+
import { InspectorPopover } from "../ui/InspectorPopover.js";
|
|
11
|
+
import { PopoverListbox } from "../ui/PopoverListbox.js";
|
|
12
|
+
import { getStateStyleValue } from "../shell/stateValue.js";
|
|
13
|
+
import { formatInspectorLabel } from "../ui/labels.js";
|
|
14
|
+
import { FieldRow } from "../ui/FieldRow.js";
|
|
15
|
+
import { ControlSurface } from "../ui/ControlSurface.js";
|
|
16
|
+
import { Tooltip } from "../ui/Tooltip.js";
|
|
17
|
+
import { inlineStyleWarningContent } from "../ui/InlineStyleWarning.js";
|
|
18
|
+
const ALIGN_SELF_OPTIONS = ["auto", "stretch", "flex-start", "flex-end", "center", "baseline"];
|
|
19
|
+
const ORDER_PRESETS = ["-1", "0", "1", "2", "3"];
|
|
20
|
+
const FLEX_ALIGNMENT_OPTIONS = ["flex-start", "center", "flex-end"];
|
|
21
|
+
const FLEX_DISTRIBUTION_OPTIONS = ["space-between", "space-around", "space-evenly"];
|
|
22
|
+
export function LayoutValueField({ label, property, presets, inputOnly = false, domElement, editTarget, selection, revision = 0, onAfterEdit }) {
|
|
23
|
+
return (_jsx(FieldRow, { label: label, className: "layout__flex-child-field", children: _jsx(LayoutComboField, { property: property, presets: presets, domElement: domElement, editTarget: editTarget, selection: selection, inputOnly: inputOnly, revision: revision, onAfterEdit: onAfterEdit }) }));
|
|
24
|
+
}
|
|
25
|
+
export function FlexChildSettingsMenu({ domElement, editTarget, selection, revision = 0, onAfterEdit }) {
|
|
26
|
+
const [open, setOpen] = useState(false);
|
|
27
|
+
return (_jsx(InspectorPopover, { "data-test": "layout-flex-child-settings", side: "left", align: "start", triggerTooltip: "Flex child settings", triggerElement: (_jsx(IconButton, { variant: "quiet", size: "default", label: "Flex child settings", "data-test": "layout-flex-child-settings", children: _jsx(IconSettings, { size: 16, stroke: 1.8, "aria-hidden": "true" }) })), open: open, onOpenChange: setOpen, children: _jsxs("div", { className: "layout__flex-child-settings", "data-test": "layout-flex-child-settings-content", children: [_jsx("div", { className: "layout__flex-child-settings-title", children: "Flex Child Settings" }), _jsx(LayoutDropdown, { property: "align-self", options: ALIGN_SELF_OPTIONS, domElement: domElement, editTarget: editTarget, selection: selection, stacked: true, revision: revision, onAfterEdit: onAfterEdit }), _jsx(LayoutValueField, { label: "Order", property: "order", presets: ORDER_PRESETS, domElement: domElement, editTarget: editTarget, selection: selection, revision: revision, onAfterEdit: onAfterEdit })] }) }));
|
|
28
|
+
}
|
|
29
|
+
export function FlexGapField({ property, domElement, editTarget, selection, entries, tokenRows, onAfterEdit }) {
|
|
30
|
+
const GapIcon = property === "column-gap" ? IconSpacingHorizontal : IconSpacingVertical;
|
|
31
|
+
return (_jsx(ControlSurface, { className: "layout__spacing-field", children: _jsx(GapField, { property: property, domElement: domElement, editTarget: editTarget, selection: selection, entries: entries, tokenRows: tokenRows, leading: (_jsx(GapIcon, { className: "layout__spacing-icon", size: "var(--icon-size-small)", stroke: 1.8, "aria-hidden": "true", "data-test": `layout-spacing-icon-${property}` })), onAfterEdit: onAfterEdit }) }));
|
|
32
|
+
}
|
|
33
|
+
export function FlexWrapToggle({ domElement, editTarget, selection, revision = 0, onAfterEdit }) {
|
|
34
|
+
const [wrap] = useComputedLayoutValue(domElement, "flex-wrap", "nowrap", revision);
|
|
35
|
+
const selectedWrap = selection?.getProperty("flex-wrap")?.value;
|
|
36
|
+
const mixed = selectedWrap?.kind === "mixed";
|
|
37
|
+
const sharedWrap = selectedWrap?.kind === "common" ? selectedWrap.value : wrap;
|
|
38
|
+
const isWrapped = !mixed && sharedWrap !== "nowrap";
|
|
39
|
+
const blockedBy = inlineBlockedBy(selection?.domElements ?? [domElement], "flex-wrap");
|
|
40
|
+
function toggleWrap() {
|
|
41
|
+
if (blockedBy)
|
|
42
|
+
return;
|
|
43
|
+
setStyle(editTarget ?? domElement, "flex-wrap", isWrapped ? "nowrap" : "wrap");
|
|
44
|
+
onAfterEdit?.();
|
|
45
|
+
}
|
|
46
|
+
return (_jsx(Tooltip, { content: inlineStyleWarningContent(blockedBy), children: _jsx(IconButton, { variant: "quiet", size: "default", "data-active": isWrapped, "data-test": "layout-flex-wrap-toggle", label: mixed ? "Set Flex Wrap" : isWrapped ? "Disable Flex Wrap" : "Enable Flex Wrap", "aria-pressed": mixed ? "mixed" : isWrapped, disabled: blockedBy !== null, onClick: toggleWrap, children: _jsx(IconTextWrap, { size: 16, stroke: 1.8, "aria-hidden": "true" }) }) }));
|
|
47
|
+
}
|
|
48
|
+
const DISTRIBUTION_ITEMS = [
|
|
49
|
+
{ value: "packed", label: "Keep grouped" },
|
|
50
|
+
{ value: "space-between", label: "Spread between" },
|
|
51
|
+
{ value: "space-around", label: "Spread around" },
|
|
52
|
+
{ value: "space-evenly", label: "Spread evenly" },
|
|
53
|
+
];
|
|
54
|
+
/**
|
|
55
|
+
* The main-axis gap. Spreading the items (`justify-content: space-*`) replaces the fixed gap, so
|
|
56
|
+
* the field reads Auto, keeps the gap as a faint value, and typing `auto` spreads between.
|
|
57
|
+
*/
|
|
58
|
+
export function FlexMainGapField({ property, domElement, editTarget, selection, entries, tokenRows, revision = 0, onAfterEdit }) {
|
|
59
|
+
const GapIcon = property === "column-gap" ? IconSpacingHorizontal : IconSpacingVertical;
|
|
60
|
+
const [computedJustify] = useComputedLayoutValue(domElement, "justify-content", "flex-start", revision);
|
|
61
|
+
const justify = normalizeFlexJustify(computedJustify);
|
|
62
|
+
const distributed = FLEX_DISTRIBUTION_OPTIONS.includes(justify);
|
|
63
|
+
const lastPlacement = useRef("flex-start");
|
|
64
|
+
const [open, setOpen] = useState(false);
|
|
65
|
+
const blockedBy = inlineBlockedBy(selection?.domElements ?? [domElement], "justify-content");
|
|
66
|
+
const target = editTarget ?? domElement;
|
|
67
|
+
const gapPixels = Number.parseFloat(getStateStyleValue(domElement, property));
|
|
68
|
+
useEffect(() => {
|
|
69
|
+
if (FLEX_ALIGNMENT_OPTIONS.includes(justify))
|
|
70
|
+
lastPlacement.current = justify;
|
|
71
|
+
}, [justify]);
|
|
72
|
+
function setJustifyContent(value) {
|
|
73
|
+
if (blockedBy)
|
|
74
|
+
return;
|
|
75
|
+
setStyle(target, "justify-content", value);
|
|
76
|
+
onAfterEdit?.();
|
|
77
|
+
}
|
|
78
|
+
function interceptRaw(value) {
|
|
79
|
+
if (value.trim().toLowerCase() === "auto") {
|
|
80
|
+
if (!distributed)
|
|
81
|
+
setJustifyContent("space-between");
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
// A typed gap takes the items back out of a spread; the gap value itself is written by the field,
|
|
85
|
+
// which still saves it when justify-content is authored inline and cannot be changed here.
|
|
86
|
+
if (distributed)
|
|
87
|
+
setJustifyContent(lastPlacement.current);
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
const chevron = (_jsx(PopoverListbox, { query: "", value: distributed ? justify : "packed", open: open, triggerElement: (_jsx(IconButton, { variant: "quiet", size: "compact", label: "Item distribution", "data-test": "layout-flex-distribution", children: _jsx(IconChevronDown, { size: 16, stroke: 1.8, "aria-hidden": "true" }) })), triggerDataTest: "layout-flex-distribution", triggerAriaLabel: "Item distribution", triggerTooltip: inlineStyleWarningContent(blockedBy), disabled: blockedBy !== null, items: DISTRIBUTION_ITEMS.map((item) => ({
|
|
91
|
+
...item,
|
|
92
|
+
leading: (distributed ? justify : "packed") === item.value
|
|
93
|
+
? _jsx(IconCheck, { size: 14, stroke: 2, "aria-hidden": "true" })
|
|
94
|
+
: undefined,
|
|
95
|
+
"data-test": `layout-flex-distribution-${item.value}`,
|
|
96
|
+
})), onQueryChange: () => undefined, onOpenChange: setOpen, onSelect: (next) => {
|
|
97
|
+
setJustifyContent(next === "packed" ? lastPlacement.current : next);
|
|
98
|
+
setOpen(false);
|
|
99
|
+
} }));
|
|
100
|
+
return (_jsx(ControlSurface, { className: "layout__spacing-field", children: _jsx(GapField, { property: property, domElement: domElement, editTarget: editTarget, selection: selection, entries: entries, tokenRows: tokenRows, ...(distributed ? { displayOverride: "Auto" } : {}), interceptRaw: interceptRaw, trailing: (_jsxs(_Fragment, { children: [distributed && Number.isFinite(gapPixels) ? (_jsx("span", { className: "layout__resolved", "data-test": "layout-gap-value", children: Math.round(gapPixels) })) : null, chevron] })), leading: (_jsx(GapIcon, { className: "layout__spacing-icon", size: "var(--icon-size-small)", stroke: 1.8, "aria-hidden": "true", "data-test": `layout-spacing-icon-${property}` })), onAfterEdit: onAfterEdit }) }));
|
|
101
|
+
}
|
|
102
|
+
export function FlexAlignmentGrid({ domElement, editTarget, selection, revision = 0, onAfterEdit }) {
|
|
103
|
+
const [direction] = useComputedLayoutValue(domElement, "flex-direction", "row", revision);
|
|
104
|
+
const [computedJustify, setJustify] = useComputedLayoutValue(domElement, "justify-content", "flex-start", revision);
|
|
105
|
+
const [computedAlign, setAlign] = useComputedLayoutValue(domElement, "align-items", "stretch", revision);
|
|
106
|
+
const justify = normalizeFlexJustify(computedJustify);
|
|
107
|
+
const align = normalizeFlexAlign(computedAlign);
|
|
108
|
+
const isColumn = direction.startsWith("column");
|
|
109
|
+
const isReverse = direction.endsWith("-reverse");
|
|
110
|
+
const distributed = FLEX_DISTRIBUTION_OPTIONS.includes(justify);
|
|
111
|
+
const blockedBy = inlineBlockedBy(selection?.domElements ?? [domElement], "justify-content", "align-items");
|
|
112
|
+
// The grid shows physical positions: justify-content runs along the main axis, so column containers transpose the axes.
|
|
113
|
+
const rowValues = isColumn
|
|
114
|
+
? isReverse ? [...FLEX_ALIGNMENT_OPTIONS].reverse() : FLEX_ALIGNMENT_OPTIONS
|
|
115
|
+
: FLEX_ALIGNMENT_OPTIONS;
|
|
116
|
+
const columnValues = !isColumn && isReverse
|
|
117
|
+
? [...FLEX_ALIGNMENT_OPTIONS].reverse()
|
|
118
|
+
: FLEX_ALIGNMENT_OPTIONS;
|
|
119
|
+
function selectAlignment(nextJustify, nextAlign) {
|
|
120
|
+
if (blockedBy)
|
|
121
|
+
return;
|
|
122
|
+
// A grid click changing cross-axis alignment must not replace an explicit distribution choice.
|
|
123
|
+
const resolvedJustify = distributed ? justify : nextJustify;
|
|
124
|
+
setJustify(resolvedJustify);
|
|
125
|
+
setAlign(nextAlign);
|
|
126
|
+
setStyles(editTarget ?? domElement, [
|
|
127
|
+
{ property: "justify-content", value: resolvedJustify },
|
|
128
|
+
{ property: "align-items", value: nextAlign },
|
|
129
|
+
]);
|
|
130
|
+
onAfterEdit?.();
|
|
131
|
+
}
|
|
132
|
+
const grid = (_jsxs("div", { className: "layout__alignment-grid", role: "group", "aria-label": "Place flex items", "data-direction": isColumn ? "column" : "row", "data-justify": justify, "data-align": align, "data-distributed": distributed, children: [distributed ? (_jsxs("span", { className: "layout__distribution-preview", "aria-hidden": "true", children: [_jsx("span", {}), _jsx("span", {}), _jsx("span", {})] })) : null, rowValues.flatMap((rowValue) => columnValues.map((columnValue) => {
|
|
133
|
+
const justifyValue = isColumn ? rowValue : columnValue;
|
|
134
|
+
const alignValue = isColumn ? columnValue : rowValue;
|
|
135
|
+
const active = justify === justifyValue && align === alignValue;
|
|
136
|
+
const label = formatInspectorLabel(`Align ${alignValue.replace("flex-", "")} And Distribute ${justifyValue.replace("flex-", "")}`);
|
|
137
|
+
return (_jsx(Tooltip, { children: _jsx(IconButton, { size: "default", variant: "quiet", className: "layout__alignment-button", "data-active": active, "data-test": `layout-align-${alignValue}-${justifyValue}`, label: label, "aria-pressed": active, disabled: blockedBy !== null, onClick: () => selectAlignment(justifyValue, alignValue), children: _jsx("span", {}) }) }, `${alignValue}-${justifyValue}`));
|
|
138
|
+
}))] }));
|
|
139
|
+
return _jsx(Tooltip, { content: inlineStyleWarningContent(blockedBy), disabled: blockedBy === null, children: grid });
|
|
140
|
+
}
|
|
141
|
+
function normalizeFlexJustify(value) {
|
|
142
|
+
// Computed `normal` behaves as `flex-start` for flex containers, so show the physical placement.
|
|
143
|
+
return value === "normal" ? "flex-start" : value;
|
|
144
|
+
}
|
|
145
|
+
function normalizeFlexAlign(value) {
|
|
146
|
+
// `normal` resolves to stretch for flex items.
|
|
147
|
+
return value === "normal" ? "stretch" : value;
|
|
148
|
+
}
|
|
149
|
+
export function useComputedLayoutValue(domElement, property, fallback, revision) {
|
|
150
|
+
const [value, setValue] = useState(() => readLayoutValue(domElement, property, fallback));
|
|
151
|
+
useEffect(() => {
|
|
152
|
+
setValue(readLayoutValue(domElement, property, fallback));
|
|
153
|
+
}, [domElement, property, fallback, revision]);
|
|
154
|
+
return [value, setValue];
|
|
155
|
+
}
|
|
156
|
+
function readLayoutValue(domElement, property, fallback) {
|
|
157
|
+
return getStateStyleValue(domElement, property, fallback);
|
|
158
|
+
}
|
|
@@ -12,7 +12,10 @@ export interface GapFieldProps {
|
|
|
12
12
|
entries: TokenEntry[];
|
|
13
13
|
tokenRows: ResolvedProperty[];
|
|
14
14
|
leading?: ReactNode;
|
|
15
|
+
trailing?: ReactNode;
|
|
16
|
+
/** Replaces the shown value (and ignores the token) while another property overrides the gap, such as `Auto`. */
|
|
17
|
+
displayOverride?: string;
|
|
18
|
+
interceptRaw?: (value: string) => boolean;
|
|
15
19
|
onAfterEdit?: () => void;
|
|
16
20
|
}
|
|
17
|
-
|
|
18
|
-
export declare function GapField({ property, domElement: el, editTarget, selection, entries, tokenRows, leading, onAfterEdit, }: GapFieldProps): ReactElement;
|
|
21
|
+
export declare function GapField({ property, domElement: el, editTarget, selection, entries, tokenRows, leading, trailing, displayOverride, interceptRaw, onAfterEdit, }: GapFieldProps): ReactElement;
|
|
@@ -3,8 +3,7 @@ import { TokenField } from "../tokens/TokenField.js";
|
|
|
3
3
|
import { formatInspectorLabel } from "../ui/labels.js";
|
|
4
4
|
import { meaningfulLayoutValue } from "./layoutValue.js";
|
|
5
5
|
export const GAP_PRESETS = ["0", "0.25rem", "0.5rem", "0.75rem", "1rem", "1.5rem", "2rem", "3rem"];
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
return (_jsx("span", { className: "layout-combo", "data-test": "layout-combo", "data-property": property, children: _jsx(TokenField, { property: property, selection: selection, tokenRow: tokenRow, initialValue: meaningfulLayoutValue(el, property), domElement: el, editTarget: editTarget, entries: entries, suggestions: GAP_PRESETS, leading: leading, inputDataTest: `layout-combo-input-${property}`, label: formatInspectorLabel(property), chipVariant: "small", inlineWarningDataTest: "layout-combo-blocked", inlineWarningTooltipDataTest: "layout-combo-blocked-tooltip", onAfterEdit: onAfterEdit }) }));
|
|
6
|
+
export function GapField({ property, domElement: el, editTarget, selection, entries, tokenRows, leading, trailing, displayOverride, interceptRaw, onAfterEdit, }) {
|
|
7
|
+
const tokenRow = displayOverride !== undefined ? null : tokenRows.find((row) => row.property === property) ?? null;
|
|
8
|
+
return (_jsx("span", { className: "layout-combo", "data-test": "layout-combo", "data-property": property, children: _jsx(TokenField, { property: property, selection: selection, tokenRow: tokenRow, initialValue: meaningfulLayoutValue(el, property), displayValue: displayOverride, domElement: el, editTarget: editTarget, entries: entries, suggestions: GAP_PRESETS, leading: leading, trailing: trailing, interceptRaw: interceptRaw, inputDataTest: `layout-combo-input-${property}`, label: formatInspectorLabel(property), chipVariant: "small", inlineWarningDataTest: "layout-combo-blocked", inlineWarningTooltipDataTest: "layout-combo-blocked-tooltip", onAfterEdit: onAfterEdit }) }));
|
|
10
9
|
}
|
|
@@ -6,9 +6,4 @@ export interface GridChildSectionProps {
|
|
|
6
6
|
revision?: number;
|
|
7
7
|
onAfterEdit?: () => void;
|
|
8
8
|
}
|
|
9
|
-
/**
|
|
10
|
-
* Grid child controls expose only placement starts and per-axis alignment.
|
|
11
|
-
* All edits commit as managed CSS declarations. Moving a start line preserves
|
|
12
|
-
* an existing span where CSS makes that span unambiguous.
|
|
13
|
-
*/
|
|
14
9
|
export declare function GridChildSection({ domElement: el, editTarget, revision, onAfterEdit, }: GridChildSectionProps): ReactElement;
|
|
@@ -67,11 +67,6 @@ function AlignmentControl({ axis, value, elements, onChange }) {
|
|
|
67
67
|
testId: `layout-grid-child-align-${axis}-${option.value}`,
|
|
68
68
|
})), onChange: onChange, allowDeselect: true, onDeselect: () => onChange("auto") }), _jsx(InlineStyleWarning, { blockedBy: blockedBy })] }));
|
|
69
69
|
}
|
|
70
|
-
/**
|
|
71
|
-
* Grid child controls expose only placement starts and per-axis alignment.
|
|
72
|
-
* All edits commit as managed CSS declarations. Moving a start line preserves
|
|
73
|
-
* an existing span where CSS makes that span unambiguous.
|
|
74
|
-
*/
|
|
75
70
|
export function GridChildSection({ domElement: el, editTarget, revision = 0, onAfterEdit, }) {
|
|
76
71
|
const target = editTarget ?? el;
|
|
77
72
|
const elements = targetElements(target);
|
|
@@ -8,6 +8,6 @@ export interface GridPickerProps {
|
|
|
8
8
|
revision?: number;
|
|
9
9
|
onAfterEdit?: () => void;
|
|
10
10
|
}
|
|
11
|
-
/**
|
|
11
|
+
/** Null when the browser determines the track count (auto-fill/auto-fit, none, subgrid). */
|
|
12
12
|
export declare function countGridTracks(value: string): number | null;
|
|
13
13
|
export declare function GridPicker({ domElement: el, editTarget, revision, onAfterEdit }: GridPickerProps): ReactElement;
|
|
@@ -47,7 +47,7 @@ function splitTrackList(value) {
|
|
|
47
47
|
parts.push(value.slice(start).trim());
|
|
48
48
|
return parts;
|
|
49
49
|
}
|
|
50
|
-
/**
|
|
50
|
+
/** Null when the browser determines the track count (auto-fill/auto-fit, none, subgrid). */
|
|
51
51
|
export function countGridTracks(value) {
|
|
52
52
|
const trimmed = value.trim();
|
|
53
53
|
if (!trimmed || /^(?:none|subgrid)$/i.test(trimmed))
|
|
@@ -112,9 +112,7 @@ export function GridPicker({ domElement: el, editTarget, revision = 0, onAfterEd
|
|
|
112
112
|
if (!picker)
|
|
113
113
|
return;
|
|
114
114
|
const target = event.target;
|
|
115
|
-
//
|
|
116
|
-
// retargeted `event.target`. Use the composed path so pointer-downs on
|
|
117
|
-
// the grid cells are not mistaken for outside clicks.
|
|
115
|
+
// Shadow-root events are retargeted to the host for document listeners, so use the composed path.
|
|
118
116
|
if (event.composedPath().includes(picker))
|
|
119
117
|
return;
|
|
120
118
|
if (target instanceof Node && picker.contains(target))
|
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
import type { ReactElement } from "react";
|
|
2
|
-
import type { TokenEntry } from "../../css/model/index.js";
|
|
3
|
-
import type { ResolvedProperty } from "../../css/model/index.js";
|
|
2
|
+
import type { ResolvedProperty, TokenEntry } from "../../css/model/index.js";
|
|
4
3
|
import type { EditTarget } from "../selection/editTarget.js";
|
|
5
4
|
import type { StyleSelection } from "../selection/styleSelection.js";
|
|
6
|
-
export interface
|
|
5
|
+
export interface GridControlProps {
|
|
7
6
|
domElement: HTMLElement;
|
|
8
7
|
editTarget?: EditTarget;
|
|
9
8
|
selection?: StyleSelection | null;
|
|
10
|
-
entries: TokenEntry[];
|
|
11
|
-
tokenRows: ResolvedProperty[];
|
|
12
|
-
showContainer: boolean;
|
|
13
|
-
showChild: boolean;
|
|
14
9
|
revision?: number;
|
|
15
10
|
onAfterEdit?: () => void;
|
|
16
11
|
}
|
|
17
|
-
export
|
|
12
|
+
export interface GridContainerControlsProps extends GridControlProps {
|
|
13
|
+
entries: TokenEntry[];
|
|
14
|
+
tokenRows: ResolvedProperty[];
|
|
15
|
+
}
|
|
16
|
+
/** Track templates, flow and content alignment: the grid container settings the cell picker does not cover. */
|
|
17
|
+
export declare function GridAdvancedFields({ domElement, editTarget, selection, revision, onAfterEdit, }: GridControlProps): ReactElement;
|
|
18
|
+
/** The cell picker beside the row and column gap fields. */
|
|
19
|
+
export declare function GridContainerControls({ domElement, editTarget, selection, entries, tokenRows, revision, onAfterEdit, }: GridContainerControlsProps): ReactElement;
|
|
@@ -1,14 +1,10 @@
|
|
|
1
|
-
import { jsx as _jsx, jsxs as _jsxs
|
|
2
|
-
import {
|
|
3
|
-
import { IconSettings, IconSpacingHorizontal, IconSpacingVertical } from "@tabler/icons-react";
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { IconSpacingHorizontal, IconSpacingVertical } from "@tabler/icons-react";
|
|
4
3
|
import { GridPicker } from "./GridPicker.js";
|
|
5
4
|
import { GapField } from "./GapField.js";
|
|
6
5
|
import { LayoutDropdown } from "./LayoutDropdown.js";
|
|
7
6
|
import { GridValueField } from "./GridValueField.js";
|
|
8
|
-
import { GridChildSection } from "./GridChildSection.js";
|
|
9
7
|
import { ControlSurface } from "../ui/ControlSurface.js";
|
|
10
|
-
import { IconButton } from "../ui/IconButton.js";
|
|
11
|
-
import { InspectorPopover } from "../ui/InspectorPopover.js";
|
|
12
8
|
const GRID_AUTO_FLOW_OPTIONS = ["row", "column", "row dense", "column dense"];
|
|
13
9
|
const GRID_CONTENT_ALIGNMENT_OPTIONS = [
|
|
14
10
|
"normal",
|
|
@@ -21,7 +17,24 @@ const GRID_CONTENT_ALIGNMENT_OPTIONS = [
|
|
|
21
17
|
"space-evenly",
|
|
22
18
|
];
|
|
23
19
|
const GRID_ITEM_ALIGNMENT_OPTIONS = ["normal", "stretch", "start", "end", "center", "self-start", "self-end"];
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
20
|
+
const GRID_ALIGNMENT_FIELDS = [
|
|
21
|
+
{ property: "justify-content", options: GRID_CONTENT_ALIGNMENT_OPTIONS },
|
|
22
|
+
{ property: "align-content", options: GRID_CONTENT_ALIGNMENT_OPTIONS },
|
|
23
|
+
{ property: "justify-items", options: GRID_ITEM_ALIGNMENT_OPTIONS },
|
|
24
|
+
{ property: "align-items", options: GRID_ITEM_ALIGNMENT_OPTIONS },
|
|
25
|
+
];
|
|
26
|
+
const GRID_TRACK_PROPERTIES = ["grid-template-columns", "grid-template-rows"];
|
|
27
|
+
const GRID_AUTO_TRACK_PROPERTIES = ["grid-auto-columns", "grid-auto-rows"];
|
|
28
|
+
/** Track templates, flow and content alignment: the grid container settings the cell picker does not cover. */
|
|
29
|
+
export function GridAdvancedFields({ domElement, editTarget, selection, revision = 0, onAfterEdit, }) {
|
|
30
|
+
const shared = { domElement, editTarget, selection, revision, onAfterEdit };
|
|
31
|
+
return (_jsxs("div", { className: "layout__grid-advanced", "data-test": "layout-grid-advanced", children: [_jsx("div", { className: "editor__title", children: "Advanced grid CSS" }), _jsxs("div", { className: "layout__grid-fields", children: [GRID_TRACK_PROPERTIES.map((property) => _jsx(GridValueField, { property: property, ...shared }, property)), _jsx(LayoutDropdown, { property: "grid-auto-flow", options: GRID_AUTO_FLOW_OPTIONS, ...shared }), GRID_AUTO_TRACK_PROPERTIES.map((property) => _jsx(GridValueField, { property: property, ...shared }, property))] }), _jsx("div", { className: "layout__grid-alignment", "data-test": "layout-grid-alignment", children: GRID_ALIGNMENT_FIELDS.map(({ property, options }) => (_jsx(LayoutDropdown, { property: property, options: [...options], stacked: true, ...shared }, property))) })] }));
|
|
32
|
+
}
|
|
33
|
+
/** The cell picker beside the row and column gap fields. */
|
|
34
|
+
export function GridContainerControls({ domElement, editTarget, selection, entries, tokenRows, revision = 0, onAfterEdit, }) {
|
|
35
|
+
const gaps = [
|
|
36
|
+
{ property: "row-gap", Icon: IconSpacingVertical },
|
|
37
|
+
{ property: "column-gap", Icon: IconSpacingHorizontal },
|
|
38
|
+
];
|
|
39
|
+
return (_jsxs("div", { className: "layout__grid-primary", "data-test": "layout-grid-container", children: [_jsx(GridPicker, { domElement: domElement, editTarget: editTarget, revision: revision, onAfterEdit: onAfterEdit }), _jsx("div", { className: "layout__grid-gap-fields", "data-test": "layout-grid-gap", children: gaps.map(({ property, Icon }) => (_jsx(ControlSurface, { className: "layout__spacing-field", "data-test": `layout-grid-${property}`, children: _jsx(GapField, { property: property, domElement: domElement, editTarget: editTarget, selection: selection, entries: entries, tokenRows: tokenRows, leading: (_jsx(Icon, { className: "layout__spacing-icon", size: "var(--icon-size-small)", stroke: 1.8, "aria-hidden": "true", "data-test": `layout-spacing-icon-${property}` })), onAfterEdit: onAfterEdit }) }, property))) })] }));
|
|
27
40
|
}
|
|
@@ -9,9 +9,5 @@ export interface GridValueFieldProps {
|
|
|
9
9
|
revision?: number;
|
|
10
10
|
onAfterEdit?: () => void;
|
|
11
11
|
}
|
|
12
|
-
/**
|
|
13
|
-
* Raw CSS editor for Grid grammar. Track lists and line placement are not
|
|
14
|
-
* safely decomposable into numeric controls, so the authored expression is
|
|
15
|
-
* retained verbatim and committed as one managed longhand.
|
|
16
|
-
*/
|
|
12
|
+
/** Grid track lists and line placement are not safely decomposable into numeric controls. */
|
|
17
13
|
export declare function GridValueField({ property, domElement: el, editTarget, selection, revision, onAfterEdit, }: GridValueFieldProps): ReactElement;
|
|
@@ -15,11 +15,7 @@ const DEFAULT_GRID_VALUES = {
|
|
|
15
15
|
"grid-column": "auto",
|
|
16
16
|
"grid-row": "auto",
|
|
17
17
|
};
|
|
18
|
-
/**
|
|
19
|
-
* Raw CSS editor for Grid grammar. Track lists and line placement are not
|
|
20
|
-
* safely decomposable into numeric controls, so the authored expression is
|
|
21
|
-
* retained verbatim and committed as one managed longhand.
|
|
22
|
-
*/
|
|
18
|
+
/** Grid track lists and line placement are not safely decomposable into numeric controls. */
|
|
23
19
|
export function GridValueField({ property, domElement: el, editTarget, selection, revision = 0, onAfterEdit, }) {
|
|
24
20
|
const atRules = useFieldAtRules(property);
|
|
25
21
|
const mixed = selection?.getProperty(property)?.value.kind === "mixed";
|
|
@@ -30,9 +26,7 @@ export function GridValueField({ property, domElement: el, editTarget, selection
|
|
|
30
26
|
};
|
|
31
27
|
const [value, setValue] = useState(readValue);
|
|
32
28
|
const [draft, setDraft] = useState(value);
|
|
33
|
-
// Commit reads the ref, not state: Escape reverts
|
|
34
|
-
// within the same event, before React re-renders, so a state-only read
|
|
35
|
-
// would commit the pre-escape draft.
|
|
29
|
+
// Commit reads the ref, not state: Escape reverts then blurs in one event, before React re-renders.
|
|
36
30
|
const draftRef = useRef(value);
|
|
37
31
|
useEffect(() => {
|
|
38
32
|
const next = readValue();
|
|
@@ -13,6 +13,5 @@ interface ImageBackgroundEditorProps {
|
|
|
13
13
|
onCss(value: string): boolean;
|
|
14
14
|
onSizing(declarations: StyleDeclaration[]): boolean;
|
|
15
15
|
}
|
|
16
|
-
/** Preview uploaded images through the existing workspace style edits. */
|
|
17
16
|
export declare function ImageBackgroundEditor({ element, elements, value, mixed, sizingValues, onUpload, onCss, onSizing }: ImageBackgroundEditorProps): ReactElement;
|
|
18
17
|
export {};
|