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
|
@@ -1,27 +1,10 @@
|
|
|
1
|
-
/** Options for source-preserving standalone bootstrap injection. */
|
|
2
1
|
export interface StandaloneBootstrapOptions {
|
|
3
|
-
/** The browser client URL. */
|
|
4
2
|
readonly clientPath?: string;
|
|
5
|
-
/** The runtime manifest URL passed to the browser client. */
|
|
6
3
|
readonly manifestPath?: string;
|
|
7
4
|
}
|
|
8
|
-
/** The result of injecting the standalone bootstrap into one HTML response. */
|
|
9
5
|
export interface StandaloneBootstrapResult {
|
|
10
|
-
/** The response source after any missing bootstrap nodes are inserted. */
|
|
11
6
|
readonly html: string;
|
|
12
|
-
/** Whether at least one node was inserted. */
|
|
13
7
|
readonly injected: boolean;
|
|
14
8
|
}
|
|
15
|
-
/**
|
|
16
|
-
* Adds the standalone mount and external client script to an HTML response.
|
|
17
|
-
*
|
|
18
|
-
* The function only inserts text at an existing HTML boundary. It does not
|
|
19
|
-
* parse and reserialize the document, so authored bytes remain unchanged
|
|
20
|
-
* except for the server-owned nodes. Marker checks make a second response
|
|
21
|
-
* pass idempotent.
|
|
22
|
-
*
|
|
23
|
-
* @param html The transformed HTML response body.
|
|
24
|
-
* @param options Bootstrap URLs and mount identity.
|
|
25
|
-
* @returns The response body and whether anything was added.
|
|
26
|
-
*/
|
|
9
|
+
/** Inserts text at an existing boundary rather than reserializing, and marker checks make a second pass idempotent. */
|
|
27
10
|
export declare function injectStandaloneBootstrap(html: string, options?: StandaloneBootstrapOptions): StandaloneBootstrapResult;
|
|
@@ -2,18 +2,7 @@ import { NUDGE_UI_CLIENT_PATH, NUDGE_UI_MOUNT_ID, NUDGE_UI_MANIFEST_PATH, } from
|
|
|
2
2
|
import { parse } from "parse5";
|
|
3
3
|
const CLIENT_MARKER = "data-nudge-ui-client";
|
|
4
4
|
const MOUNT_MARKER = "data-nudge-ui-mount";
|
|
5
|
-
/**
|
|
6
|
-
* Adds the standalone mount and external client script to an HTML response.
|
|
7
|
-
*
|
|
8
|
-
* The function only inserts text at an existing HTML boundary. It does not
|
|
9
|
-
* parse and reserialize the document, so authored bytes remain unchanged
|
|
10
|
-
* except for the server-owned nodes. Marker checks make a second response
|
|
11
|
-
* pass idempotent.
|
|
12
|
-
*
|
|
13
|
-
* @param html The transformed HTML response body.
|
|
14
|
-
* @param options Bootstrap URLs and mount identity.
|
|
15
|
-
* @returns The response body and whether anything was added.
|
|
16
|
-
*/
|
|
5
|
+
/** Inserts text at an existing boundary rather than reserializing, and marker checks make a second pass idempotent. */
|
|
17
6
|
export function injectStandaloneBootstrap(html, options = {}) {
|
|
18
7
|
const clientPath = options.clientPath ?? NUDGE_UI_CLIENT_PATH;
|
|
19
8
|
const manifestPath = options.manifestPath ?? NUDGE_UI_MANIFEST_PATH;
|
|
@@ -60,8 +49,7 @@ function inspectSource(document, clientPath) {
|
|
|
60
49
|
if (tagName === "html" && endOffset !== undefined)
|
|
61
50
|
facts.htmlEndOffset = endOffset;
|
|
62
51
|
});
|
|
63
|
-
//
|
|
64
|
-
// inert and must not suppress injection into the document.
|
|
52
|
+
// Template content is inert, so only live body descendants can reserve the mount.
|
|
65
53
|
if (body) {
|
|
66
54
|
visitElements(body, (element) => {
|
|
67
55
|
if (element !== body && attributeValue(element, "id") === NUDGE_UI_MOUNT_ID) {
|
|
@@ -1,18 +1,5 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type NudgeUiClientManifest } from "../../inspector/clientManifest.js";
|
|
2
2
|
import type { ProjectTokenSnapshot } from "../../project/tokens.js";
|
|
3
3
|
export { NUDGE_UI_CLIENT_PATH, NUDGE_UI_EDITOR_PATH, NUDGE_UI_MANIFEST_PATH, NUDGE_UI_MOUNT_ID, NUDGE_UI_RELOAD_PATH, NUDGE_UI_ROUTE_PREFIX, } from "../../transport/index.js";
|
|
4
|
-
|
|
5
|
-
export interface StandaloneRuntimeManifest extends NudgeUiClientManifest {
|
|
6
|
-
}
|
|
7
|
-
/**
|
|
8
|
-
* Creates the first valid static-HTML runtime snapshot.
|
|
9
|
-
*
|
|
10
|
-
* Stage 4 replaces the empty token arrays with the CSS token-inventory
|
|
11
|
-
* snapshot. Keeping this constructor here makes the manifest contract
|
|
12
|
-
* explicit and prevents the server from manufacturing a partial runtime
|
|
13
|
-
* configuration.
|
|
14
|
-
*
|
|
15
|
-
* @param projectId The deterministic identity of the served project.
|
|
16
|
-
* @returns A complete runtime manifest with no framework contracts or tokens.
|
|
17
|
-
*/
|
|
4
|
+
export type StandaloneRuntimeManifest = NudgeUiClientManifest;
|
|
18
5
|
export declare function createStandaloneRuntimeManifest(projectId: string, tokenSnapshot?: ProjectTokenSnapshot, revision?: number): StandaloneRuntimeManifest;
|
|
@@ -1,29 +1,16 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createNudgeUiClientManifest, } from "../../inspector/clientManifest.js";
|
|
2
|
+
import { NUDGE_UI_RELOAD_PATH } from "../../transport/index.js";
|
|
2
3
|
import { automationManifestFields } from "../environment.js";
|
|
3
4
|
export { NUDGE_UI_CLIENT_PATH, NUDGE_UI_EDITOR_PATH, NUDGE_UI_MANIFEST_PATH, NUDGE_UI_MOUNT_ID, NUDGE_UI_RELOAD_PATH, NUDGE_UI_ROUTE_PREFIX, } from "../../transport/index.js";
|
|
4
|
-
/**
|
|
5
|
-
* Creates the first valid static-HTML runtime snapshot.
|
|
6
|
-
*
|
|
7
|
-
* Stage 4 replaces the empty token arrays with the CSS token-inventory
|
|
8
|
-
* snapshot. Keeping this constructor here makes the manifest contract
|
|
9
|
-
* explicit and prevents the server from manufacturing a partial runtime
|
|
10
|
-
* configuration.
|
|
11
|
-
*
|
|
12
|
-
* @param projectId The deterministic identity of the served project.
|
|
13
|
-
* @returns A complete runtime manifest with no framework contracts or tokens.
|
|
14
|
-
*/
|
|
15
5
|
export function createStandaloneRuntimeManifest(projectId, tokenSnapshot = emptyTokenSnapshot(), revision = 0) {
|
|
16
|
-
return {
|
|
17
|
-
version: NUDGE_UI_MANIFEST_VERSION,
|
|
6
|
+
return createNudgeUiClientManifest({
|
|
18
7
|
revision,
|
|
19
8
|
runtime: {
|
|
20
9
|
projectId,
|
|
21
10
|
host: "static-html",
|
|
22
11
|
framework: "HTML",
|
|
23
12
|
stylingSystem: "CSS custom properties",
|
|
24
|
-
// Canvas shares the Vite host's controller/renderer runtime (ADR-0012)
|
|
25
|
-
// every served document carries the bootstrap, so card iframes boot as
|
|
26
|
-
// renderers without host-specific code.
|
|
13
|
+
// Canvas shares the Vite host's controller/renderer runtime (ADR-0012).
|
|
27
14
|
capabilities: { canvas: true, componentSemantics: false, domNavigation: true },
|
|
28
15
|
tokenCatalog: tokenSnapshot.tokenCatalog,
|
|
29
16
|
tokens: tokenSnapshot.tokens,
|
|
@@ -41,7 +28,7 @@ export function createStandaloneRuntimeManifest(projectId, tokenSnapshot = empty
|
|
|
41
28
|
events: ["ready", "reload"],
|
|
42
29
|
},
|
|
43
30
|
...automationManifestFields(),
|
|
44
|
-
};
|
|
31
|
+
});
|
|
45
32
|
}
|
|
46
33
|
function emptyTokenSnapshot() {
|
|
47
34
|
return {
|
|
@@ -1,34 +1,27 @@
|
|
|
1
1
|
import { type Server } from "node:http";
|
|
2
2
|
import { type StandaloneRuntimeManifest } from "./manifest.js";
|
|
3
|
-
|
|
3
|
+
import { isReservedNudgeUiRoute } from "../../transport/index.js";
|
|
4
|
+
export { isReservedNudgeUiRoute };
|
|
4
5
|
export interface StandaloneServerOptions {
|
|
5
6
|
/** The explicit directory whose files may be served. */
|
|
6
7
|
readonly rootDirectory: string;
|
|
7
|
-
/** The loopback address to bind. Defaults to `127.0.0.1`. */
|
|
8
8
|
readonly host?: "127.0.0.1" | "::1" | "localhost";
|
|
9
|
-
/** The TCP port. Use `0` to ask the operating system for an available port. */
|
|
10
9
|
readonly port?: number;
|
|
11
|
-
/** The prebuilt browser client artifact. */
|
|
12
10
|
readonly clientPath?: string;
|
|
13
11
|
/** Override the deterministic project identity in tests or embedding hosts. */
|
|
14
12
|
readonly projectId?: string;
|
|
15
13
|
/** Debounce interval for source changes before one reload revision. */
|
|
16
14
|
readonly watchDebounceMs?: number;
|
|
17
15
|
}
|
|
18
|
-
/** A canonical file resolved below the configured project root. */
|
|
19
16
|
export interface StaticFileResolution {
|
|
20
|
-
/** The canonical file path on disk. */
|
|
21
17
|
readonly absolutePath: string;
|
|
22
|
-
/** The slash-separated project-relative path used for source identity. */
|
|
23
18
|
readonly projectPath: string;
|
|
24
19
|
}
|
|
25
|
-
/** The address returned after the server starts listening. */
|
|
26
20
|
export interface StandaloneServerAddress {
|
|
27
21
|
readonly host: string;
|
|
28
22
|
readonly port: number;
|
|
29
23
|
readonly url: string;
|
|
30
24
|
}
|
|
31
|
-
/** The running standalone server and its lifecycle methods. */
|
|
32
25
|
export interface StandaloneServer {
|
|
33
26
|
readonly httpServer: Server;
|
|
34
27
|
readonly rootDirectory: string;
|
|
@@ -37,36 +30,9 @@ export interface StandaloneServer {
|
|
|
37
30
|
start(): Promise<StandaloneServerAddress>;
|
|
38
31
|
close(): Promise<void>;
|
|
39
32
|
}
|
|
40
|
-
/**
|
|
41
|
-
* Creates a Nudge UI-owned static server for one explicit project root.
|
|
42
|
-
*
|
|
43
|
-
* The server binds to loopback, reserves its own route namespace, and only
|
|
44
|
-
* reads prototype files. HTML instrumentation and bootstrap nodes exist in
|
|
45
|
-
* response memory; the configured source directory is never rewritten.
|
|
46
|
-
*
|
|
47
|
-
* @param options Server root, address, port, and client artifact options.
|
|
48
|
-
* @returns A server that has not started listening yet.
|
|
49
|
-
* @throws If the root is missing, not a directory, or the host is not loopback.
|
|
50
|
-
*/
|
|
33
|
+
/** Serves one explicit project root over loopback, reserving its own route namespace; the configured source directory is never rewritten. */
|
|
51
34
|
export declare function createStandaloneServer(options: StandaloneServerOptions): StandaloneServer;
|
|
52
|
-
/**
|
|
53
|
-
* Resolves one URL pathname to a canonical file under the project root.
|
|
54
|
-
*
|
|
55
|
-
* URL decoding occurs before path normalization, which makes encoded dot
|
|
56
|
-
* segments subject to the same confinement check as ordinary traversal. The
|
|
57
|
-
* canonical existing ancestor check also rejects a symlink that escapes the
|
|
58
|
-
* root when the requested leaf does not yet exist. Hidden path segments are
|
|
59
|
-
* refused, including encoded and multiply encoded forms, and a visible
|
|
60
|
-
* symlink cannot be used to reach a hidden target.
|
|
61
|
-
*
|
|
62
|
-
* @param rootDirectory The configured project root.
|
|
63
|
-
* @param requestPath A request target or URL pathname.
|
|
64
|
-
* @returns A file resolution, or `null` for malformed, missing, or unsafe paths.
|
|
65
|
-
*/
|
|
35
|
+
/** Decodes before normalizing so encoded dot segments face the same confinement check; the canonical-ancestor check also rejects escaping symlinks. */
|
|
66
36
|
export declare function resolveStaticFile(rootDirectory: string, requestPath: string): StaticFileResolution | null;
|
|
67
|
-
/** Returns the deterministic project identity used for session persistence. */
|
|
68
37
|
export declare function createStandaloneProjectId(rootDirectory: string): string;
|
|
69
|
-
/** Returns a common response content type for a project-relative file. */
|
|
70
38
|
export declare function contentTypeForPath(filePath: string): string;
|
|
71
|
-
/** Returns whether a decoded pathname belongs to the server-owned route space. */
|
|
72
|
-
export declare function isReservedNudgeUiRoute(pathname: string): boolean;
|
|
@@ -8,7 +8,9 @@ import { createRequire } from "node:module";
|
|
|
8
8
|
import { instrumentSourceHtml } from "../../html/identity.js";
|
|
9
9
|
import { injectStandaloneBootstrap } from "./html/bootstrap.js";
|
|
10
10
|
import { createNudgeUiEditorDocument, isNudgeUiEditorDocumentRequest } from "../../transport/editor.js";
|
|
11
|
-
import { createStandaloneRuntimeManifest, NUDGE_UI_CLIENT_PATH, NUDGE_UI_EDITOR_PATH, NUDGE_UI_MANIFEST_PATH, NUDGE_UI_RELOAD_PATH,
|
|
11
|
+
import { createStandaloneRuntimeManifest, NUDGE_UI_CLIENT_PATH, NUDGE_UI_EDITOR_PATH, NUDGE_UI_MANIFEST_PATH, NUDGE_UI_RELOAD_PATH, } from "./manifest.js";
|
|
12
|
+
import { isReservedNudgeUiRoute } from "../../transport/index.js";
|
|
13
|
+
export { isReservedNudgeUiRoute };
|
|
12
14
|
import { startOptionalProjectBridge } from "../projectBridge.js";
|
|
13
15
|
import { createProjectTokenSnapshot, EMPTY_PROJECT_TOKEN_SNAPSHOT } from "../../project/tokens.js";
|
|
14
16
|
import { createProjectFileWatcher, isSensitiveProjectPath, } from "../../project/files.js";
|
|
@@ -16,17 +18,7 @@ const LOOPBACK_HOSTS = new Set(["127.0.0.1", "::1", "localhost"]);
|
|
|
16
18
|
const HTML_EXTENSIONS = new Set([".html", ".htm"]);
|
|
17
19
|
const DEFAULT_PORT = 4173;
|
|
18
20
|
const packageRequire = createRequire(import.meta.url);
|
|
19
|
-
/**
|
|
20
|
-
* Creates a Nudge UI-owned static server for one explicit project root.
|
|
21
|
-
*
|
|
22
|
-
* The server binds to loopback, reserves its own route namespace, and only
|
|
23
|
-
* reads prototype files. HTML instrumentation and bootstrap nodes exist in
|
|
24
|
-
* response memory; the configured source directory is never rewritten.
|
|
25
|
-
*
|
|
26
|
-
* @param options Server root, address, port, and client artifact options.
|
|
27
|
-
* @returns A server that has not started listening yet.
|
|
28
|
-
* @throws If the root is missing, not a directory, or the host is not loopback.
|
|
29
|
-
*/
|
|
21
|
+
/** Serves one explicit project root over loopback, reserving its own route namespace; the configured source directory is never rewritten. */
|
|
30
22
|
export function createStandaloneServer(options) {
|
|
31
23
|
const rootDirectory = canonicalDirectory(options.rootDirectory);
|
|
32
24
|
const host = options.host ?? "127.0.0.1";
|
|
@@ -40,14 +32,12 @@ export function createStandaloneServer(options) {
|
|
|
40
32
|
let revision = 0;
|
|
41
33
|
let manifest = createStandaloneRuntimeManifest(projectId, EMPTY_PROJECT_TOKEN_SNAPSHOT, revision);
|
|
42
34
|
let projectBridge = null;
|
|
43
|
-
//
|
|
44
|
-
// request and manifest always observe the complete project token knowledge.
|
|
35
|
+
// start() awaits the initial scan so the first request observes complete token knowledge.
|
|
45
36
|
const initialTokens = createProjectTokenSnapshot({ rootDirectory, generationLabel: "static-html" }).then((tokens) => {
|
|
46
37
|
manifest = createStandaloneRuntimeManifest(projectId, tokens, revision);
|
|
47
38
|
return tokens;
|
|
48
39
|
});
|
|
49
|
-
//
|
|
50
|
-
// prevents an unhandled rejection when a server is created but never started.
|
|
40
|
+
// Prevents an unhandled rejection when a server is created but never started.
|
|
51
41
|
void initialTokens.catch(() => undefined);
|
|
52
42
|
const reloadClients = new Set();
|
|
53
43
|
let fileWatcher = null;
|
|
@@ -77,10 +67,8 @@ export function createStandaloneServer(options) {
|
|
|
77
67
|
};
|
|
78
68
|
const processSettledChanges = (_changes) => {
|
|
79
69
|
changeQueue = changeQueue.then(async () => {
|
|
80
|
-
//
|
|
81
|
-
//
|
|
82
|
-
// The scan is asynchronous and bounded to the project root; rebuilding
|
|
83
|
-
// once per settled batch keeps the manifest coherent before reload.
|
|
70
|
+
// fs.watch can omit a filename, so CSS changes cannot be identified by extension:
|
|
71
|
+
// rebuild once per settled batch to keep the manifest coherent before reload.
|
|
84
72
|
const tokens = await createProjectTokenSnapshot({ rootDirectory, generationLabel: "static-html" });
|
|
85
73
|
manifest = {
|
|
86
74
|
...createStandaloneRuntimeManifest(projectId, tokens, revision + 1),
|
|
@@ -89,9 +77,7 @@ export function createStandaloneServer(options) {
|
|
|
89
77
|
revision += 1;
|
|
90
78
|
notifyReload();
|
|
91
79
|
}).catch((error) => {
|
|
92
|
-
// A
|
|
93
|
-
// callback. Source edits must not terminate the static server, but a
|
|
94
|
-
// skipped reload must be visible to the developer.
|
|
80
|
+
// A failed rebuild must not terminate the server, but a skipped reload must stay visible.
|
|
95
81
|
console.warn("Nudge UI standalone reload was skipped because rebuilding token knowledge failed:", error);
|
|
96
82
|
});
|
|
97
83
|
};
|
|
@@ -218,20 +204,7 @@ export function createStandaloneServer(options) {
|
|
|
218
204
|
};
|
|
219
205
|
return server;
|
|
220
206
|
}
|
|
221
|
-
/**
|
|
222
|
-
* Resolves one URL pathname to a canonical file under the project root.
|
|
223
|
-
*
|
|
224
|
-
* URL decoding occurs before path normalization, which makes encoded dot
|
|
225
|
-
* segments subject to the same confinement check as ordinary traversal. The
|
|
226
|
-
* canonical existing ancestor check also rejects a symlink that escapes the
|
|
227
|
-
* root when the requested leaf does not yet exist. Hidden path segments are
|
|
228
|
-
* refused, including encoded and multiply encoded forms, and a visible
|
|
229
|
-
* symlink cannot be used to reach a hidden target.
|
|
230
|
-
*
|
|
231
|
-
* @param rootDirectory The configured project root.
|
|
232
|
-
* @param requestPath A request target or URL pathname.
|
|
233
|
-
* @returns A file resolution, or `null` for malformed, missing, or unsafe paths.
|
|
234
|
-
*/
|
|
207
|
+
/** Decodes before normalizing so encoded dot segments face the same confinement check; the canonical-ancestor check also rejects escaping symlinks. */
|
|
235
208
|
export function resolveStaticFile(rootDirectory, requestPath) {
|
|
236
209
|
const root = canonicalDirectoryOrNull(rootDirectory);
|
|
237
210
|
if (!root)
|
|
@@ -274,21 +247,14 @@ function resolveDecodedStaticFile(root, decodedPath) {
|
|
|
274
247
|
return null;
|
|
275
248
|
return { absolutePath: filePath, projectPath: relativePath };
|
|
276
249
|
}
|
|
277
|
-
/** Returns the deterministic project identity used for session persistence. */
|
|
278
250
|
export function createStandaloneProjectId(rootDirectory) {
|
|
279
251
|
const canonicalRoot = canonicalDirectory(rootDirectory);
|
|
280
252
|
const digest = createHash("sha256").update(canonicalRoot).digest("hex").slice(0, 24);
|
|
281
253
|
return `static-html:${digest}`;
|
|
282
254
|
}
|
|
283
|
-
/** Returns a common response content type for a project-relative file. */
|
|
284
255
|
export function contentTypeForPath(filePath) {
|
|
285
256
|
const extension = extname(filePath).toLowerCase();
|
|
286
|
-
return MIME_TYPES
|
|
287
|
-
}
|
|
288
|
-
/** Returns whether a decoded pathname belongs to the server-owned route space. */
|
|
289
|
-
export function isReservedNudgeUiRoute(pathname) {
|
|
290
|
-
return pathname === NUDGE_UI_ROUTE_PREFIX.slice(0, -1)
|
|
291
|
-
|| pathname.startsWith(NUDGE_UI_ROUTE_PREFIX);
|
|
257
|
+
return MIME_TYPES.get(extension) ?? "application/octet-stream";
|
|
292
258
|
}
|
|
293
259
|
function canonicalDirectory(directory) {
|
|
294
260
|
const canonical = canonicalDirectoryOrNull(directory);
|
|
@@ -327,12 +293,7 @@ function decodeRequestPath(requestPath) {
|
|
|
327
293
|
return null;
|
|
328
294
|
return pathname;
|
|
329
295
|
}
|
|
330
|
-
/**
|
|
331
|
-
* Detects suspicious paths that become hidden or traversal paths after a
|
|
332
|
-
* second URL decode. The server resolves request URLs exactly once so literal
|
|
333
|
-
* percent-containing filenames continue to work, but nested encodings must
|
|
334
|
-
* not provide an alternate spelling for a sensitive path.
|
|
335
|
-
*/
|
|
296
|
+
/** Request URLs are decoded exactly once, so a second decode must not yield an alternate spelling of a sensitive path. */
|
|
336
297
|
function hasNestedUnsafePathEncoding(pathname) {
|
|
337
298
|
let candidate = pathname;
|
|
338
299
|
for (let depth = 0; depth < 5; depth += 1) {
|
|
@@ -414,11 +375,8 @@ async function handleRequest(input) {
|
|
|
414
375
|
const isHtml = HTML_EXTENSIONS.has(extname(resolution.projectPath).toLowerCase());
|
|
415
376
|
const contentType = contentTypeForPath(resolution.projectPath);
|
|
416
377
|
if (request.method === "HEAD") {
|
|
417
|
-
// HEAD answers headers without
|
|
418
|
-
//
|
|
419
|
-
// known without performing it. Content-Length is omitted for HTML so the
|
|
420
|
-
// header cannot disagree with a subsequent GET body; untransformed files
|
|
421
|
-
// report their exact length.
|
|
378
|
+
// HEAD answers headers without the response transform; Content-Length is omitted for
|
|
379
|
+
// HTML so it cannot disagree with a subsequent GET body.
|
|
422
380
|
const body = await readProjectFile(resolution.absolutePath);
|
|
423
381
|
if (isHtml) {
|
|
424
382
|
response.writeHead(200, {
|
|
@@ -439,15 +397,7 @@ async function handleRequest(input) {
|
|
|
439
397
|
}
|
|
440
398
|
sendBody(response, 200, body, contentType, isHtml ? { "Cache-Control": "no-cache" } : {});
|
|
441
399
|
}
|
|
442
|
-
/**
|
|
443
|
-
* Instruments one HTML response while guaranteeing byte preservation.
|
|
444
|
-
*
|
|
445
|
-
* The identity inserter only edits the decoded string at parser offsets, so
|
|
446
|
-
* the decode itself must be lossless. A non-UTF-8 document cannot round-trip
|
|
447
|
-
* through `toString("utf8")` without replacing every invalid sequence with
|
|
448
|
-
* U+FFFD, so such documents are served untouched with a warning instead of
|
|
449
|
-
* being silently corrupted.
|
|
450
|
-
*/
|
|
400
|
+
/** Served untouched when not valid UTF-8: identity insertion works at parser offsets, so a lossy decode would corrupt the document. */
|
|
451
401
|
function instrumentHtmlResponse(body, projectPath) {
|
|
452
402
|
let source;
|
|
453
403
|
try {
|
|
@@ -570,7 +520,7 @@ function sendBody(response, status, body, contentType, headers = {}) {
|
|
|
570
520
|
else
|
|
571
521
|
response.end();
|
|
572
522
|
}
|
|
573
|
-
const MIME_TYPES = {
|
|
523
|
+
const MIME_TYPES = new Map(Object.entries({
|
|
574
524
|
".avif": "image/avif",
|
|
575
525
|
".css": "text/css; charset=utf-8",
|
|
576
526
|
".csv": "text/csv; charset=utf-8",
|
|
@@ -596,4 +546,4 @@ const MIME_TYPES = {
|
|
|
596
546
|
".woff": "font/woff",
|
|
597
547
|
".woff2": "font/woff2",
|
|
598
548
|
".xml": "application/xml; charset=utf-8",
|
|
599
|
-
};
|
|
549
|
+
}));
|
|
@@ -1,16 +1,6 @@
|
|
|
1
1
|
import type { Plugin, UserConfigExport } from "vite";
|
|
2
2
|
import { type NudgeUiOptions } from "./vite.js";
|
|
3
|
-
/**
|
|
4
|
-
* Composes two independent halves: `./vite.ts` owns the build tool and knows
|
|
5
|
-
* nothing about JSX, `./react.ts` owns React and knows nothing about Vite.
|
|
6
|
-
* This is deliberately the only file that names both.
|
|
7
|
-
*/
|
|
8
3
|
export declare function nudgeUi(options?: NudgeUiOptions): Plugin[];
|
|
9
|
-
/**
|
|
10
|
-
* Adds this host to an existing Vite configuration export. Object, promise,
|
|
11
|
-
* and function forms are resolved at the same boundary Vite uses, so the host
|
|
12
|
-
* keeps ownership of its runtime root and dependency graph.
|
|
13
|
-
*/
|
|
14
4
|
export declare function withNudgeUi(config: UserConfigExport, options?: NudgeUiOptions): UserConfigExport;
|
|
15
5
|
export type { NudgeUiOptions, VanillaExtractOptions } from "./vite.js";
|
|
16
6
|
export { extractViteModuleCss, transformIndexHtmlHtml } from "./vite.js";
|
package/dist/hosts/vite/index.js
CHANGED
|
@@ -1,18 +1,8 @@
|
|
|
1
1
|
import { createVitePlugins } from "./vite.js";
|
|
2
2
|
import { createReactSupport } from "./react.js";
|
|
3
|
-
/**
|
|
4
|
-
* Composes two independent halves: `./vite.ts` owns the build tool and knows
|
|
5
|
-
* nothing about JSX, `./react.ts` owns React and knows nothing about Vite.
|
|
6
|
-
* This is deliberately the only file that names both.
|
|
7
|
-
*/
|
|
8
3
|
export function nudgeUi(options = {}) {
|
|
9
4
|
return createVitePlugins(options, createReactSupport);
|
|
10
5
|
}
|
|
11
|
-
/**
|
|
12
|
-
* Adds this host to an existing Vite configuration export. Object, promise,
|
|
13
|
-
* and function forms are resolved at the same boundary Vite uses, so the host
|
|
14
|
-
* keeps ownership of its runtime root and dependency graph.
|
|
15
|
-
*/
|
|
16
6
|
export function withNudgeUi(config, options = {}) {
|
|
17
7
|
if (typeof config === "function") {
|
|
18
8
|
// SAFETY: The typeof guard selects the function form of UserConfigExport, whose signature this cast states.
|
|
@@ -3,42 +3,32 @@ import { injectIdentity } from "../../compiler/reactIdentity.js";
|
|
|
3
3
|
import type { ComponentContract } from "../../compiler/index.js";
|
|
4
4
|
import { type ComponentInstrumentationOptions, type ComponentModuleProtocols } from "../../compiler/index.js";
|
|
5
5
|
export interface ReactOptions {
|
|
6
|
-
/**
|
|
7
|
-
* Skip the React aliases used only by the legacy bundled landing demo.
|
|
8
|
-
* @deprecated Normal development clients no longer add React aliases.
|
|
9
|
-
*/
|
|
6
|
+
/** @deprecated Normal development clients no longer add React aliases. */
|
|
10
7
|
skipReactAliases?: boolean;
|
|
11
8
|
/** Fills gaps for packages whose public type graph cannot describe an editable prop. */
|
|
12
9
|
componentMetadata?: ComponentContract[];
|
|
13
10
|
/** Package imports are fail-closed unless listed here or described by a component protocol. */
|
|
14
11
|
compatibleComponentImports?: ComponentInstrumentationOptions["compatibleComponentImports"];
|
|
15
|
-
/** Additional package or project component protocols resolved by the host. */
|
|
16
12
|
componentProtocols?: ComponentModuleProtocols;
|
|
17
13
|
}
|
|
18
|
-
/** Everything React needs from whichever host is driving it. */
|
|
19
14
|
export interface FrameworkHost {
|
|
20
15
|
root(): string | undefined;
|
|
21
|
-
/** True when a module belongs to the application rather than a dependency. */
|
|
22
16
|
isHostSource(id: string): boolean;
|
|
23
17
|
/** The project-relative path recorded in contracts and diagnostics. */
|
|
24
18
|
catalogPath(id: string): string;
|
|
25
19
|
}
|
|
26
|
-
/** The parts of a transform hook React uses, named without the build tool. */
|
|
27
20
|
export interface FrameworkTransformContext {
|
|
28
21
|
resolve(specifier: string, importer: string): Promise<string | null>;
|
|
29
22
|
warn(message: string): void;
|
|
30
23
|
}
|
|
31
24
|
export declare function createReactSupport(options: ReactOptions, host: FrameworkHost): {
|
|
32
|
-
/** Manifest labels for a host composing React. */
|
|
33
25
|
hostLabel: "vite-react";
|
|
34
26
|
framework: "React";
|
|
35
27
|
virtualModuleId: string;
|
|
28
|
+
/** Lets live preview reach React's renderer, which loads before any module the host controls. */
|
|
29
|
+
documentHeadScript: string;
|
|
36
30
|
owns(id: string): boolean;
|
|
37
|
-
/**
|
|
38
|
-
* Dedupe is the load-bearing part: instrumented callsites must use the
|
|
39
|
-
* application's own React, and a linked or nested copy would create a
|
|
40
|
-
* second runtime.
|
|
41
|
-
*/
|
|
31
|
+
/** Dedupe is load-bearing: instrumented callsites must use the application's own React, not a linked or nested copy. */
|
|
42
32
|
viteConfig(context: {
|
|
43
33
|
projectRoot: string;
|
|
44
34
|
demo: boolean;
|
|
@@ -54,14 +44,11 @@ export declare function createReactSupport(options: ReactOptions, host: Framewor
|
|
|
54
44
|
};
|
|
55
45
|
/** Not fatal, but a packed install that cannot resolve it fails later at the importing module. */
|
|
56
46
|
unresolvedRuntimeWarning(): string | null;
|
|
57
|
-
/** Cold-start scan, so the first manifest is not missing every contract. */
|
|
58
47
|
warmUp(): void;
|
|
59
48
|
observe(id: string, code: string, refreshPackages?: boolean): void;
|
|
60
|
-
/** Drops a module whose source could not be read after a change. */
|
|
61
49
|
forget(id: string): void;
|
|
62
50
|
transform(context: FrameworkTransformContext, code: string, id: string): Promise<ReturnType<typeof injectIdentity>>;
|
|
63
51
|
contracts(): ComponentContract[];
|
|
64
52
|
serializeVirtualModule(contracts: readonly ComponentContract[]): string;
|
|
65
53
|
};
|
|
66
|
-
/** The framework support a host composes, or `null` for no framework at all. */
|
|
67
54
|
export type FrameworkSupport = ReturnType<typeof createReactSupport>;
|
package/dist/hosts/vite/react.js
CHANGED
|
@@ -3,25 +3,19 @@ import { createRequire } from "node:module";
|
|
|
3
3
|
import { join } from "node:path";
|
|
4
4
|
import { injectIdentity } from "../../compiler/reactIdentity.js";
|
|
5
5
|
import { extractComponentContracts } from "../../compiler/componentContracts.js";
|
|
6
|
-
import {
|
|
6
|
+
import { collectPackageComponentImports, extractPackageComponentContractCatalog, } from "../../compiler/packageComponentContracts.js";
|
|
7
|
+
import { REACT_RENDERER_CAPTURE_SCRIPT } from "../reactRendererCapture.js";
|
|
7
8
|
import { defaultReactComponentProtocols, formatComponentPolicyWarning, groupComponentPolicyDiagnostics, mergeComponentModuleProtocols, resolveHostComponentPolicy, } from "../../compiler/index.js";
|
|
8
|
-
/**
|
|
9
|
-
* What React means to a host, with no knowledge of which host is asking. The
|
|
10
|
-
* Vite host owns the build tool; this module owns React semantics. `FrameworkHost`
|
|
11
|
-
* is everything React needs back, and the Vite host accepts `null` in its place,
|
|
12
|
-
* which is what proves it does not secretly depend on any of this.
|
|
13
|
-
*/
|
|
14
9
|
const COMPONENT_EXTENSION = /\.(?:tsx|jsx)(?:$|[?#])/;
|
|
15
10
|
const COMPONENT_RUNTIME_MODULE = "nudge-ui/internal/component-runtime";
|
|
16
11
|
const packageRequire = createRequire(import.meta.url);
|
|
17
12
|
export function createReactSupport(options, host) {
|
|
18
13
|
const contractsByFile = new Map();
|
|
19
|
-
const
|
|
14
|
+
const packageImportsByFile = new Map();
|
|
20
15
|
const reportedPolicyDiagnostics = new Set();
|
|
21
16
|
const manualComponentIds = new Set(options.componentMetadata?.map((contract) => contract.componentId) ?? []);
|
|
22
17
|
let packageFingerprint = "";
|
|
23
|
-
// Aliased so the injected specifier resolves in a packed install, where the
|
|
24
|
-
// application's dependency graph has never heard of it.
|
|
18
|
+
// Aliased so the injected specifier resolves in a packed install, where the application's graph has never heard of it.
|
|
25
19
|
const componentRuntimePath = resolveComponentRuntime();
|
|
26
20
|
if (options.componentMetadata?.length) {
|
|
27
21
|
contractsByFile.set("package-manifests", options.componentMetadata.map((contract) => ({
|
|
@@ -29,22 +23,15 @@ export function createReactSupport(options, host) {
|
|
|
29
23
|
provenance: "package-manifest",
|
|
30
24
|
})));
|
|
31
25
|
}
|
|
32
|
-
/**
|
|
33
|
-
* Fingerprinted on the module-to-importer mapping so an unchanged import
|
|
34
|
-
* graph costs nothing; every component edit reaches this path.
|
|
35
|
-
*/
|
|
26
|
+
/** Fingerprinted on the rendered package exports, so an unchanged import graph costs nothing. */
|
|
36
27
|
function refreshPackageContracts() {
|
|
37
|
-
const
|
|
38
|
-
for (const
|
|
39
|
-
for (const
|
|
40
|
-
|
|
41
|
-
hostByModule.set(moduleSpecifier, hostFile);
|
|
28
|
+
const importsByKey = new Map();
|
|
29
|
+
for (const imports of packageImportsByFile.values()) {
|
|
30
|
+
for (const packageImport of imports) {
|
|
31
|
+
importsByKey.set(`${packageImport.moduleSpecifier}#${packageImport.exportName}`, packageImport);
|
|
42
32
|
}
|
|
43
33
|
}
|
|
44
|
-
const fingerprint = [...
|
|
45
|
-
.sort(([left], [right]) => left.localeCompare(right))
|
|
46
|
-
.map(([moduleSpecifier, hostFile]) => `${moduleSpecifier}\0${hostFile}`)
|
|
47
|
-
.join("\n");
|
|
34
|
+
const fingerprint = [...importsByKey.keys()].sort().join("\n");
|
|
48
35
|
if (fingerprint === packageFingerprint)
|
|
49
36
|
return;
|
|
50
37
|
for (const key of [...contractsByFile.keys()]) {
|
|
@@ -55,27 +42,25 @@ export function createReactSupport(options, host) {
|
|
|
55
42
|
const catalog = root
|
|
56
43
|
? extractPackageComponentContractCatalog({
|
|
57
44
|
hostFile: join(root, "__nudge_ui_package_contracts__.tsx"),
|
|
58
|
-
|
|
45
|
+
imports: [...importsByKey.values()],
|
|
59
46
|
})
|
|
60
47
|
: [];
|
|
61
|
-
|
|
48
|
+
const moduleSpecifiers = new Set([...importsByKey.values()].map((entry) => entry.moduleSpecifier));
|
|
49
|
+
for (const moduleSpecifier of moduleSpecifiers) {
|
|
62
50
|
contractsByFile.set(`package-types:${moduleSpecifier}`, catalog.filter((contract) => contract.file === moduleSpecifier && !manualComponentIds.has(contract.componentId)));
|
|
63
51
|
}
|
|
64
52
|
packageFingerprint = fingerprint;
|
|
65
53
|
}
|
|
66
54
|
return {
|
|
67
|
-
/** Manifest labels for a host composing React. */
|
|
68
55
|
hostLabel: "vite-react",
|
|
69
56
|
framework: "React",
|
|
70
57
|
virtualModuleId: "virtual:nudge-ui-components",
|
|
58
|
+
/** Lets live preview reach React's renderer, which loads before any module the host controls. */
|
|
59
|
+
documentHeadScript: REACT_RENDERER_CAPTURE_SCRIPT,
|
|
71
60
|
owns(id) {
|
|
72
61
|
return COMPONENT_EXTENSION.test(id);
|
|
73
62
|
},
|
|
74
|
-
/**
|
|
75
|
-
* Dedupe is the load-bearing part: instrumented callsites must use the
|
|
76
|
-
* application's own React, and a linked or nested copy would create a
|
|
77
|
-
* second runtime.
|
|
78
|
-
*/
|
|
63
|
+
/** Dedupe is load-bearing: instrumented callsites must use the application's own React, not a linked or nested copy. */
|
|
79
64
|
viteConfig(context) {
|
|
80
65
|
const demoAliases = context.demo && options.skipReactAliases !== true
|
|
81
66
|
? resolveReactAliases(context.projectRoot)
|
|
@@ -105,7 +90,6 @@ export function createReactSupport(options, host) {
|
|
|
105
90
|
return `[nudge-ui] Could not resolve ${COMPONENT_RUNTIME_MODULE} from the Vite adapter. `
|
|
106
91
|
+ "Semantic component callsites will fall back to application resolution of that specifier.";
|
|
107
92
|
},
|
|
108
|
-
/** Cold-start scan, so the first manifest is not missing every contract. */
|
|
109
93
|
warmUp() {
|
|
110
94
|
const root = host.root();
|
|
111
95
|
if (!root)
|
|
@@ -125,14 +109,13 @@ export function createReactSupport(options, host) {
|
|
|
125
109
|
return;
|
|
126
110
|
const fileId = id.split(/[?#]/, 1)[0] ?? id;
|
|
127
111
|
contractsByFile.set(fileId, extractComponentContracts(code, host.catalogPath(fileId)));
|
|
128
|
-
|
|
112
|
+
packageImportsByFile.set(fileId, collectPackageComponentImports(code, fileId));
|
|
129
113
|
if (refreshPackages)
|
|
130
114
|
refreshPackageContracts();
|
|
131
115
|
},
|
|
132
|
-
/** Drops a module whose source could not be read after a change. */
|
|
133
116
|
forget(id) {
|
|
134
117
|
contractsByFile.set(id, []);
|
|
135
|
-
|
|
118
|
+
packageImportsByFile.delete(id);
|
|
136
119
|
refreshPackageContracts();
|
|
137
120
|
},
|
|
138
121
|
async transform(context, code, id) {
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* The token catalog must follow only stylesheets the application imports. This
|
|
3
|
-
* small graph walker deliberately has no filesystem traversal: callers supply
|
|
4
|
-
* the host CSS entry files, a Vite-backed resolver, and a reader.
|
|
5
|
-
*/
|
|
6
1
|
export interface CssImportGraph {
|
|
7
2
|
files: Map<string, string>;
|
|
8
3
|
/** CSS cascade order: imported sheets precede the sheet that imports them. */
|
|
@@ -19,10 +14,6 @@ export interface CssImportGraphDependencies {
|
|
|
19
14
|
}
|
|
20
15
|
export declare function stripCssQuery(id: string): string;
|
|
21
16
|
export declare function isCssStylesheet(id: string): boolean;
|
|
22
|
-
/** Extract quoted and url(...) @import targets while ignoring CSS comments. */
|
|
23
17
|
export declare function cssImportSpecifiers(css: string): string[];
|
|
24
|
-
/**
|
|
25
|
-
* Resolve every CSS file reached from the supplied host stylesheets. Missing
|
|
26
|
-
* and unreadable imports are reported but never make the catalog unavailable.
|
|
27
|
-
*/
|
|
18
|
+
/** Missing and unreadable imports are reported, never fatal to the catalog. */
|
|
28
19
|
export declare function discoverCssImportGraph(entryFiles: readonly string[], dependencies: CssImportGraphDependencies): Promise<CssImportGraph>;
|
|
@@ -4,7 +4,6 @@ export function stripCssQuery(id) {
|
|
|
4
4
|
export function isCssStylesheet(id) {
|
|
5
5
|
return /\.css(?:$|[?#])/i.test(id);
|
|
6
6
|
}
|
|
7
|
-
/** Extract quoted and url(...) @import targets while ignoring CSS comments. */
|
|
8
7
|
export function cssImportSpecifiers(css) {
|
|
9
8
|
const withoutComments = css.replace(/\/\*[\s\S]*?\*\//g, "");
|
|
10
9
|
const imports = [];
|
|
@@ -17,10 +16,7 @@ export function cssImportSpecifiers(css) {
|
|
|
17
16
|
}
|
|
18
17
|
return imports;
|
|
19
18
|
}
|
|
20
|
-
/**
|
|
21
|
-
* Resolve every CSS file reached from the supplied host stylesheets. Missing
|
|
22
|
-
* and unreadable imports are reported but never make the catalog unavailable.
|
|
23
|
-
*/
|
|
19
|
+
/** Missing and unreadable imports are reported, never fatal to the catalog. */
|
|
24
20
|
export async function discoverCssImportGraph(entryFiles, dependencies) {
|
|
25
21
|
const files = new Map();
|
|
26
22
|
const order = [];
|
|
@@ -54,9 +50,8 @@ export async function discoverCssImportGraph(entryFiles, dependencies) {
|
|
|
54
50
|
unresolved.push({ importer: fileId, specifier });
|
|
55
51
|
continue;
|
|
56
52
|
}
|
|
57
|
-
// A processor-owned import such as Tailwind's package entry may resolve
|
|
58
|
-
//
|
|
59
|
-
// ordinary-CSS graph, but it is not an unresolved stylesheet failure.
|
|
53
|
+
// A processor-owned import such as Tailwind's package entry may resolve to JavaScript
|
|
54
|
+
// and emit CSS during transform; it is outside this graph, not an unresolved failure.
|
|
60
55
|
if (!isCssStylesheet(resolved))
|
|
61
56
|
continue;
|
|
62
57
|
await visit(resolved);
|