nudge-ui 0.2.0

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.
Files changed (510) hide show
  1. package/README.md +66 -0
  2. package/bin/nudge-ui.mjs +7 -0
  3. package/dist/LICENSE +21 -0
  4. package/dist/client.mjs +261 -0
  5. package/dist/compiler/ast.d.ts +18 -0
  6. package/dist/compiler/ast.js +75 -0
  7. package/dist/compiler/componentContractTypes.d.ts +19 -0
  8. package/dist/compiler/componentContractTypes.js +1 -0
  9. package/dist/compiler/componentContracts.d.ts +2 -0
  10. package/dist/compiler/componentContracts.js +260 -0
  11. package/dist/compiler/componentInstrumentation.d.ts +32 -0
  12. package/dist/compiler/componentInstrumentation.js +140 -0
  13. package/dist/compiler/componentPolicyResolution.d.ts +71 -0
  14. package/dist/compiler/componentPolicyResolution.js +388 -0
  15. package/dist/compiler/index.d.ts +9 -0
  16. package/dist/compiler/index.js +9 -0
  17. package/dist/compiler/packageComponentContracts.d.ts +32 -0
  18. package/dist/compiler/packageComponentContracts.js +308 -0
  19. package/dist/compiler/reactComponentProtocols.d.ts +145 -0
  20. package/dist/compiler/reactComponentProtocols.js +47 -0
  21. package/dist/compiler/reactIdentity.d.ts +15 -0
  22. package/dist/compiler/reactIdentity.js +339 -0
  23. package/dist/compiler/sourcePaths.d.ts +12 -0
  24. package/dist/compiler/sourcePaths.js +27 -0
  25. package/dist/css/dialects/index.d.ts +62 -0
  26. package/dist/css/dialects/index.js +103 -0
  27. package/dist/css/dialects/tailwind.d.ts +46 -0
  28. package/dist/css/dialects/tailwind.js +119 -0
  29. package/dist/css/dialects/vanillaExtract.d.ts +20 -0
  30. package/dist/css/dialects/vanillaExtract.js +32 -0
  31. package/dist/css/index.d.ts +10 -0
  32. package/dist/css/index.js +10 -0
  33. package/dist/css/model/index.d.ts +190 -0
  34. package/dist/css/model/index.js +10 -0
  35. package/dist/css/token-inventory/index.d.ts +26 -0
  36. package/dist/css/token-inventory/index.js +24 -0
  37. package/dist/css/token-inventory/inventory.d.ts +8 -0
  38. package/dist/css/token-inventory/inventory.js +421 -0
  39. package/dist/css/token-inventory/parseStylesheet.d.ts +16 -0
  40. package/dist/css/token-inventory/parseStylesheet.js +155 -0
  41. package/dist/css/token-inventory/policy.d.ts +47 -0
  42. package/dist/css/token-inventory/policy.js +50 -0
  43. package/dist/css/token-inventory/types.d.ts +97 -0
  44. package/dist/css/token-inventory/types.js +1 -0
  45. package/dist/css/value-semantics/borderSemantics.d.ts +28 -0
  46. package/dist/css/value-semantics/borderSemantics.js +91 -0
  47. package/dist/css/value-semantics/boxSemantics.d.ts +37 -0
  48. package/dist/css/value-semantics/boxSemantics.js +71 -0
  49. package/dist/css/value-semantics/colorSemantics.d.ts +99 -0
  50. package/dist/css/value-semantics/colorSemantics.js +526 -0
  51. package/dist/css/value-semantics/cssSyntax.d.ts +19 -0
  52. package/dist/css/value-semantics/cssSyntax.js +111 -0
  53. package/dist/css/value-semantics/fontSemantics.d.ts +35 -0
  54. package/dist/css/value-semantics/fontSemantics.js +131 -0
  55. package/dist/css/value-semantics/index.d.ts +20 -0
  56. package/dist/css/value-semantics/index.js +15 -0
  57. package/dist/css/value-semantics/propertyPolicy.d.ts +118 -0
  58. package/dist/css/value-semantics/propertyPolicy.js +356 -0
  59. package/dist/css/value-semantics/stringMaps.d.ts +2 -0
  60. package/dist/css/value-semantics/stringMaps.js +1 -0
  61. package/dist/css/value-semantics/structuredValues.d.ts +64 -0
  62. package/dist/css/value-semantics/structuredValues.js +250 -0
  63. package/dist/css/value-semantics/tokenInterpretation.d.ts +90 -0
  64. package/dist/css/value-semantics/tokenInterpretation.js +193 -0
  65. package/dist/css/virtual-design-tokens.d.ts +17 -0
  66. package/dist/hosts/astro/astroRuntimeConfig.d.ts +12 -0
  67. package/dist/hosts/astro/astroRuntimeConfig.js +26 -0
  68. package/dist/hosts/astro/clientAsset.d.ts +12 -0
  69. package/dist/hosts/astro/clientAsset.js +51 -0
  70. package/dist/hosts/astro/clientTransport.d.ts +3 -0
  71. package/dist/hosts/astro/clientTransport.js +57 -0
  72. package/dist/hosts/astro/index.d.ts +3 -0
  73. package/dist/hosts/astro/index.js +2 -0
  74. package/dist/hosts/astro/integration.d.ts +35 -0
  75. package/dist/hosts/astro/integration.js +96 -0
  76. package/dist/hosts/astro/middleware.d.ts +13 -0
  77. package/dist/hosts/astro/middleware.js +22 -0
  78. package/dist/hosts/astro/projectContext.d.ts +11 -0
  79. package/dist/hosts/astro/projectContext.js +34 -0
  80. package/dist/hosts/astro/responseInstrumentation.d.ts +41 -0
  81. package/dist/hosts/astro/responseInstrumentation.js +80 -0
  82. package/dist/hosts/next/index.d.ts +4 -0
  83. package/dist/hosts/next/index.js +7 -0
  84. package/dist/hosts/next/loader.d.ts +66 -0
  85. package/dist/hosts/next/loader.js +346 -0
  86. package/dist/hosts/next/loaders/identity-loader.cjs +228257 -0
  87. package/dist/hosts/next/loaders/loader-plugin.cjs +228257 -0
  88. package/dist/hosts/next/manifest.d.ts +38 -0
  89. package/dist/hosts/next/manifest.js +30 -0
  90. package/dist/hosts/next/mount.d.ts +12 -0
  91. package/dist/hosts/next/mount.js +23 -0
  92. package/dist/hosts/next/repositoryScope.d.ts +20 -0
  93. package/dist/hosts/next/repositoryScope.js +33 -0
  94. package/dist/hosts/next/sidecar.d.ts +27 -0
  95. package/dist/hosts/next/sidecar.js +526 -0
  96. package/dist/hosts/next/wrapper.d.ts +67 -0
  97. package/dist/hosts/next/wrapper.js +310 -0
  98. package/dist/hosts/static/cli.d.ts +12 -0
  99. package/dist/hosts/static/cli.js +77 -0
  100. package/dist/hosts/static/html/bootstrap.d.ts +27 -0
  101. package/dist/hosts/static/html/bootstrap.js +93 -0
  102. package/dist/hosts/static/index.d.ts +4 -0
  103. package/dist/hosts/static/index.js +4 -0
  104. package/dist/hosts/static/manifest.d.ts +18 -0
  105. package/dist/hosts/static/manifest.js +51 -0
  106. package/dist/hosts/static/server.d.ts +72 -0
  107. package/dist/hosts/static/server.js +554 -0
  108. package/dist/hosts/vite/index.d.ts +20 -0
  109. package/dist/hosts/vite/index.js +48 -0
  110. package/dist/hosts/vite/react.d.ts +67 -0
  111. package/dist/hosts/vite/react.js +231 -0
  112. package/dist/hosts/vite/tokens/activeStylesheets.d.ts +28 -0
  113. package/dist/hosts/vite/tokens/activeStylesheets.js +70 -0
  114. package/dist/hosts/vite/tokens/fileMap.d.ts +2 -0
  115. package/dist/hosts/vite/tokens/fileMap.js +1 -0
  116. package/dist/hosts/vite/tokens/viteStylesheetArtifacts.d.ts +46 -0
  117. package/dist/hosts/vite/tokens/viteStylesheetArtifacts.js +104 -0
  118. package/dist/hosts/vite/virtual/design-tokens.d.ts +9 -0
  119. package/dist/hosts/vite/virtual/design-tokens.js +7 -0
  120. package/dist/hosts/vite/virtual-design-tokens.d.ts +1 -0
  121. package/dist/hosts/vite/vite.d.ts +62 -0
  122. package/dist/hosts/vite/vite.js +854 -0
  123. package/dist/html/dom.d.ts +13 -0
  124. package/dist/html/dom.js +46 -0
  125. package/dist/html/identity.d.ts +40 -0
  126. package/dist/html/identity.js +196 -0
  127. package/dist/html/insertions.d.ts +26 -0
  128. package/dist/html/insertions.js +59 -0
  129. package/dist/inspector/agent/McpConnectionDialog.d.ts +26 -0
  130. package/dist/inspector/agent/McpConnectionDialog.js +135 -0
  131. package/dist/inspector/agent/client.d.ts +98 -0
  132. package/dist/inspector/agent/client.js +728 -0
  133. package/dist/inspector/agent/connectionStatus.d.ts +13 -0
  134. package/dist/inspector/agent/connectionStatus.js +35 -0
  135. package/dist/inspector/agent/httpTransport.d.ts +21 -0
  136. package/dist/inspector/agent/httpTransport.js +347 -0
  137. package/dist/inspector/agent/protocol.d.ts +95 -0
  138. package/dist/inspector/agent/protocol.js +9 -0
  139. package/dist/inspector/agent/verification.d.ts +39 -0
  140. package/dist/inspector/agent/verification.js +207 -0
  141. package/dist/inspector/canvas/CanvasCard.d.ts +10 -0
  142. package/dist/inspector/canvas/CanvasCard.js +275 -0
  143. package/dist/inspector/canvas/CanvasElementOverlay.d.ts +2 -0
  144. package/dist/inspector/canvas/CanvasElementOverlay.js +301 -0
  145. package/dist/inspector/canvas/CanvasWorkspace.d.ts +2 -0
  146. package/dist/inspector/canvas/CanvasWorkspace.js +301 -0
  147. package/dist/inspector/canvas/LockedWorkspaceNotice.d.ts +6 -0
  148. package/dist/inspector/canvas/LockedWorkspaceNotice.js +17 -0
  149. package/dist/inspector/canvas/StaleChangeIndicator.d.ts +7 -0
  150. package/dist/inspector/canvas/StaleChangeIndicator.js +43 -0
  151. package/dist/inspector/canvas/agentPresentation.d.ts +87 -0
  152. package/dist/inspector/canvas/agentPresentation.js +421 -0
  153. package/dist/inspector/canvas/canvasGestures.d.ts +12 -0
  154. package/dist/inspector/canvas/canvasGestures.js +21 -0
  155. package/dist/inspector/canvas/canvasStore.d.ts +108 -0
  156. package/dist/inspector/canvas/canvasStore.js +448 -0
  157. package/dist/inspector/canvas/frameProtocol.d.ts +231 -0
  158. package/dist/inspector/canvas/frameProtocol.js +165 -0
  159. package/dist/inspector/canvas/linkEligibility.d.ts +8 -0
  160. package/dist/inspector/canvas/linkEligibility.js +68 -0
  161. package/dist/inspector/canvas/measurementProjection.d.ts +8 -0
  162. package/dist/inspector/canvas/measurementProjection.js +16 -0
  163. package/dist/inspector/canvas/normalizeUrl.d.ts +7 -0
  164. package/dist/inspector/canvas/normalizeUrl.js +27 -0
  165. package/dist/inspector/canvas/projection.d.ts +41 -0
  166. package/dist/inspector/canvas/projection.js +232 -0
  167. package/dist/inspector/canvas/rendererBootstrap.d.ts +4 -0
  168. package/dist/inspector/canvas/rendererBootstrap.js +410 -0
  169. package/dist/inspector/canvas/rendererCidIndex.d.ts +11 -0
  170. package/dist/inspector/canvas/rendererCidIndex.js +21 -0
  171. package/dist/inspector/canvas/rendererElementSelector.d.ts +2 -0
  172. package/dist/inspector/canvas/rendererElementSelector.js +378 -0
  173. package/dist/inspector/canvas/rendererSelectionProxy.d.ts +2 -0
  174. package/dist/inspector/canvas/rendererSelectionProxy.js +61 -0
  175. package/dist/inspector/canvas/rendererStylesheet.d.ts +16 -0
  176. package/dist/inspector/canvas/rendererStylesheet.js +221 -0
  177. package/dist/inspector/canvas/resizeHandleScale.d.ts +13 -0
  178. package/dist/inspector/canvas/resizeHandleScale.js +20 -0
  179. package/dist/inspector/canvas/roleDetection.d.ts +5 -0
  180. package/dist/inspector/canvas/roleDetection.js +21 -0
  181. package/dist/inspector/canvas/sessionStore.d.ts +71 -0
  182. package/dist/inspector/canvas/sessionStore.js +453 -0
  183. package/dist/inspector/canvas/staleChangeDetector.d.ts +11 -0
  184. package/dist/inspector/canvas/staleChangeDetector.js +217 -0
  185. package/dist/inspector/canvas/toolbarScale.d.ts +7 -0
  186. package/dist/inspector/canvas/toolbarScale.js +11 -0
  187. package/dist/inspector/canvas/workspaceLease.d.ts +26 -0
  188. package/dist/inspector/canvas/workspaceLease.js +214 -0
  189. package/dist/inspector/changes/changesLog.d.ts +46 -0
  190. package/dist/inspector/changes/changesLog.js +209 -0
  191. package/dist/inspector/changes/codecs.d.ts +98 -0
  192. package/dist/inspector/changes/codecs.js +389 -0
  193. package/dist/inspector/changes/editModel.d.ts +74 -0
  194. package/dist/inspector/changes/editModel.js +120 -0
  195. package/dist/inspector/changes/managedStyleProjection.d.ts +6 -0
  196. package/dist/inspector/changes/managedStyleProjection.js +109 -0
  197. package/dist/inspector/changes/model.d.ts +13 -0
  198. package/dist/inspector/changes/model.js +163 -0
  199. package/dist/inspector/changes/presentation.d.ts +14 -0
  200. package/dist/inspector/changes/presentation.js +81 -0
  201. package/dist/inspector/changes/previewDiagnostics.d.ts +39 -0
  202. package/dist/inspector/changes/previewDiagnostics.js +172 -0
  203. package/dist/inspector/changes/structuralTypes.d.ts +35 -0
  204. package/dist/inspector/changes/structuralTypes.js +1 -0
  205. package/dist/inspector/changes/types.d.ts +76 -0
  206. package/dist/inspector/changes/types.js +16 -0
  207. package/dist/inspector/changes/workspaceChanges.d.ts +43 -0
  208. package/dist/inspector/changes/workspaceChanges.js +239 -0
  209. package/dist/inspector/clientManifest.d.ts +24 -0
  210. package/dist/inspector/clientManifest.js +69 -0
  211. package/dist/inspector/componentSemantics/ComponentPropsSection.d.ts +5 -0
  212. package/dist/inspector/componentSemantics/ComponentPropsSection.js +44 -0
  213. package/dist/inspector/componentSemantics/adapterRegistry.d.ts +11 -0
  214. package/dist/inspector/componentSemantics/adapterRegistry.js +75 -0
  215. package/dist/inspector/componentSemantics/boundaries.d.ts +2 -0
  216. package/dist/inspector/componentSemantics/boundaries.js +10 -0
  217. package/dist/inspector/componentSemantics/changeAction.d.ts +3 -0
  218. package/dist/inspector/componentSemantics/changeAction.js +6 -0
  219. package/dist/inspector/componentSemantics/changeModel.d.ts +8 -0
  220. package/dist/inspector/componentSemantics/changeModel.js +60 -0
  221. package/dist/inspector/componentSemantics/index.d.ts +4 -0
  222. package/dist/inspector/componentSemantics/index.js +2 -0
  223. package/dist/inspector/componentSemantics/reactRuntime.d.ts +10 -0
  224. package/dist/inspector/componentSemantics/reactRuntime.js +186 -0
  225. package/dist/inspector/componentSemantics/runtimeBridge.d.ts +25 -0
  226. package/dist/inspector/componentSemantics/runtimeBridge.js +161 -0
  227. package/dist/inspector/componentSemantics/runtimeTypes.d.ts +2 -0
  228. package/dist/inspector/componentSemantics/runtimeTypes.js +1 -0
  229. package/dist/inspector/componentSemantics/textBinding.d.ts +69 -0
  230. package/dist/inspector/componentSemantics/textBinding.js +514 -0
  231. package/dist/inspector/componentSemantics/types.d.ts +96 -0
  232. package/dist/inspector/componentSemantics/types.js +5 -0
  233. package/dist/inspector/conformance/borderCases.d.ts +7 -0
  234. package/dist/inspector/conformance/borderCases.js +428 -0
  235. package/dist/inspector/conformance/colorCases.d.ts +8 -0
  236. package/dist/inspector/conformance/colorCases.js +470 -0
  237. package/dist/inspector/conformance/fixture.d.ts +68 -0
  238. package/dist/inspector/conformance/fixture.js +153 -0
  239. package/dist/inspector/conformance/projection.d.ts +2 -0
  240. package/dist/inspector/conformance/projection.js +3 -0
  241. package/dist/inspector/conformance/spacingCases.d.ts +6 -0
  242. package/dist/inspector/conformance/spacingCases.js +417 -0
  243. package/dist/inspector/conformance/typographyCases.d.ts +7 -0
  244. package/dist/inspector/conformance/typographyCases.js +174 -0
  245. package/dist/inspector/editScope.d.ts +4 -0
  246. package/dist/inspector/editScope.js +5 -0
  247. package/dist/inspector/index.d.ts +20 -0
  248. package/dist/inspector/index.js +236 -0
  249. package/dist/inspector/inline-text/inlineTextEditor.d.ts +74 -0
  250. package/dist/inspector/inline-text/inlineTextEditor.js +1207 -0
  251. package/dist/inspector/inline-text/inlineTextLifecycle.d.ts +2 -0
  252. package/dist/inspector/inline-text/inlineTextLifecycle.js +17 -0
  253. package/dist/inspector/inline-text/textChangeBoundary.d.ts +6 -0
  254. package/dist/inspector/inline-text/textChangeBoundary.js +1 -0
  255. package/dist/inspector/inspection/bridge.d.ts +72 -0
  256. package/dist/inspector/inspection/bridge.js +134 -0
  257. package/dist/inspector/inspection/browserCssInspection.d.ts +74 -0
  258. package/dist/inspector/inspection/browserCssInspection.js +317 -0
  259. package/dist/inspector/inspection/browserCssInspectionRegistry.d.ts +12 -0
  260. package/dist/inspector/inspection/browserCssInspectionRegistry.js +66 -0
  261. package/dist/inspector/inspection/selectionProperty.d.ts +32 -0
  262. package/dist/inspector/inspection/selectionProperty.js +33 -0
  263. package/dist/inspector/inspection/useBrowserCssInspection.d.ts +20 -0
  264. package/dist/inspector/inspection/useBrowserCssInspection.js +159 -0
  265. package/dist/inspector/overlay/DropGuideOverlay.d.ts +17 -0
  266. package/dist/inspector/overlay/DropGuideOverlay.js +17 -0
  267. package/dist/inspector/overlay/InspectorOverlay.d.ts +5 -0
  268. package/dist/inspector/overlay/InspectorOverlay.js +328 -0
  269. package/dist/inspector/overlay/MeasurementGuideOverlay.d.ts +19 -0
  270. package/dist/inspector/overlay/MeasurementGuideOverlay.js +40 -0
  271. package/dist/inspector/overlay/clickPolicy.d.ts +7 -0
  272. package/dist/inspector/overlay/clickPolicy.js +13 -0
  273. package/dist/inspector/overlay/dropGuide.d.ts +22 -0
  274. package/dist/inspector/overlay/dropGuide.js +48 -0
  275. package/dist/inspector/overlay/elementSelector.d.ts +1 -0
  276. package/dist/inspector/overlay/elementSelector.js +100 -0
  277. package/dist/inspector/overlay/frameThrottle.d.ts +10 -0
  278. package/dist/inspector/overlay/frameThrottle.js +38 -0
  279. package/dist/inspector/overlay/interactionStyles.d.ts +3 -0
  280. package/dist/inspector/overlay/interactionStyles.js +70 -0
  281. package/dist/inspector/overlay/measurementGeometry.d.ts +25 -0
  282. package/dist/inspector/overlay/measurementGeometry.js +104 -0
  283. package/dist/inspector/overlay/overlayGeometry.d.ts +40 -0
  284. package/dist/inspector/overlay/overlayGeometry.js +59 -0
  285. package/dist/inspector/overlay/selectedGeometry.d.ts +7 -0
  286. package/dist/inspector/overlay/selectedGeometry.js +51 -0
  287. package/dist/inspector/overlay/structuralGestures.d.ts +28 -0
  288. package/dist/inspector/overlay/structuralGestures.js +180 -0
  289. package/dist/inspector/projection/cssEscapes.d.ts +3 -0
  290. package/dist/inspector/projection/cssEscapes.js +20 -0
  291. package/dist/inspector/projection/managedStylesheet.d.ts +33 -0
  292. package/dist/inspector/projection/managedStylesheet.js +240 -0
  293. package/dist/inspector/projection/renderedInstance.d.ts +56 -0
  294. package/dist/inspector/projection/renderedInstance.js +306 -0
  295. package/dist/inspector/projection/structuralProjection.d.ts +93 -0
  296. package/dist/inspector/projection/structuralProjection.js +560 -0
  297. package/dist/inspector/projection/structuralProjectionBoundary.d.ts +5 -0
  298. package/dist/inspector/projection/structuralProjectionBoundary.js +65 -0
  299. package/dist/inspector/projection/textProjection.d.ts +53 -0
  300. package/dist/inspector/projection/textProjection.js +705 -0
  301. package/dist/inspector/projection/workspaceProjection.d.ts +43 -0
  302. package/dist/inspector/projection/workspaceProjection.js +58 -0
  303. package/dist/inspector/prompt/PromptSettingsDialog.d.ts +15 -0
  304. package/dist/inspector/prompt/PromptSettingsDialog.js +17 -0
  305. package/dist/inspector/prompt/clipboardHandoff.d.ts +34 -0
  306. package/dist/inspector/prompt/clipboardHandoff.js +212 -0
  307. package/dist/inspector/prompt/copyToClipboard.d.ts +1 -0
  308. package/dist/inspector/prompt/copyToClipboard.js +34 -0
  309. package/dist/inspector/prompt/detectFramework.d.ts +6 -0
  310. package/dist/inspector/prompt/detectFramework.js +4 -0
  311. package/dist/inspector/prompt/generatePrompt.d.ts +7 -0
  312. package/dist/inspector/prompt/generatePrompt.js +391 -0
  313. package/dist/inspector/prompt/promptSettings.d.ts +8 -0
  314. package/dist/inspector/prompt/promptSettings.js +28 -0
  315. package/dist/inspector/runtime/devFlag.d.ts +28 -0
  316. package/dist/inspector/runtime/devFlag.js +50 -0
  317. package/dist/inspector/runtime/documentStylesheetOrder.d.ts +19 -0
  318. package/dist/inspector/runtime/documentStylesheetOrder.js +89 -0
  319. package/dist/inspector/runtime/domRealm.d.ts +4 -0
  320. package/dist/inspector/runtime/domRealm.js +11 -0
  321. package/dist/inspector/runtime/runtimeConfig.d.ts +119 -0
  322. package/dist/inspector/runtime/runtimeConfig.js +276 -0
  323. package/dist/inspector/runtime/staticHtmlRuntimeIdentity.d.ts +32 -0
  324. package/dist/inspector/runtime/staticHtmlRuntimeIdentity.js +149 -0
  325. package/dist/inspector/runtime/useRuntimeConfig.d.ts +10 -0
  326. package/dist/inspector/runtime/useRuntimeConfig.js +13 -0
  327. package/dist/inspector/selection/editScope.d.ts +32 -0
  328. package/dist/inspector/selection/editScope.js +140 -0
  329. package/dist/inspector/selection/editTarget.d.ts +8 -0
  330. package/dist/inspector/selection/editTarget.js +11 -0
  331. package/dist/inspector/selection/hierarchy.d.ts +7 -0
  332. package/dist/inspector/selection/hierarchy.js +42 -0
  333. package/dist/inspector/selection/resolveSelection.d.ts +10 -0
  334. package/dist/inspector/selection/resolveSelection.js +60 -0
  335. package/dist/inspector/selection/selectionStore.d.ts +41 -0
  336. package/dist/inspector/selection/selectionStore.js +262 -0
  337. package/dist/inspector/selection/selectionTarget.d.ts +5 -0
  338. package/dist/inspector/selection/selectionTarget.js +50 -0
  339. package/dist/inspector/selection/sourceSite.d.ts +2 -0
  340. package/dist/inspector/selection/sourceSite.js +12 -0
  341. package/dist/inspector/selection/styleSelection.d.ts +22 -0
  342. package/dist/inspector/selection/styleSelection.js +104 -0
  343. package/dist/inspector/session/index.d.ts +3 -0
  344. package/dist/inspector/session/index.js +2 -0
  345. package/dist/inspector/session/lifecycle.d.ts +22 -0
  346. package/dist/inspector/session/lifecycle.js +63 -0
  347. package/dist/inspector/session/sessionContext.d.ts +21 -0
  348. package/dist/inspector/session/sessionContext.js +28 -0
  349. package/dist/inspector/session/sessionFactory.d.ts +29 -0
  350. package/dist/inspector/session/sessionFactory.js +73 -0
  351. package/dist/inspector/settings/SettingsDialog.d.ts +12 -0
  352. package/dist/inspector/settings/SettingsDialog.js +46 -0
  353. package/dist/inspector/shell/AppShell.d.ts +2 -0
  354. package/dist/inspector/shell/AppShell.js +9 -0
  355. package/dist/inspector/shell/ChangesLog.d.ts +6 -0
  356. package/dist/inspector/shell/ChangesLog.js +92 -0
  357. package/dist/inspector/shell/CopyPromptButton.d.ts +9 -0
  358. package/dist/inspector/shell/CopyPromptButton.js +159 -0
  359. package/dist/inspector/shell/DomNavigation.d.ts +8 -0
  360. package/dist/inspector/shell/DomNavigation.js +30 -0
  361. package/dist/inspector/shell/EmptyState.d.ts +2 -0
  362. package/dist/inspector/shell/EmptyState.js +15 -0
  363. package/dist/inspector/shell/InspectorShell.d.ts +11 -0
  364. package/dist/inspector/shell/InspectorShell.js +268 -0
  365. package/dist/inspector/shell/openStore.d.ts +6 -0
  366. package/dist/inspector/shell/openStore.js +29 -0
  367. package/dist/inspector/shell/panelLayout.d.ts +2 -0
  368. package/dist/inspector/shell/panelLayout.js +29 -0
  369. package/dist/inspector/shell/shortcuts.d.ts +3 -0
  370. package/dist/inspector/shell/shortcuts.js +25 -0
  371. package/dist/inspector/shell/stateValue.d.ts +3 -0
  372. package/dist/inspector/shell/stateValue.js +34 -0
  373. package/dist/inspector/shell/styleState.d.ts +7 -0
  374. package/dist/inspector/shell/styleState.js +13 -0
  375. package/dist/inspector/spacing/projection.d.ts +43 -0
  376. package/dist/inspector/spacing/projection.js +136 -0
  377. package/dist/inspector/styleEditors/AppearanceSection.d.ts +13 -0
  378. package/dist/inspector/styleEditors/AppearanceSection.js +6 -0
  379. package/dist/inspector/styleEditors/AspectRatioField.d.ts +17 -0
  380. package/dist/inspector/styleEditors/AspectRatioField.js +10 -0
  381. package/dist/inspector/styleEditors/BorderEditor.d.ts +13 -0
  382. package/dist/inspector/styleEditors/BorderEditor.js +295 -0
  383. package/dist/inspector/styleEditors/BorderRadiusEditor.d.ts +14 -0
  384. package/dist/inspector/styleEditors/BorderRadiusEditor.js +108 -0
  385. package/dist/inspector/styleEditors/BoxShadowEditor.d.ts +13 -0
  386. package/dist/inspector/styleEditors/BoxShadowEditor.js +13 -0
  387. package/dist/inspector/styleEditors/ColorPicker.d.ts +15 -0
  388. package/dist/inspector/styleEditors/ColorPicker.js +73 -0
  389. package/dist/inspector/styleEditors/GapField.d.ts +17 -0
  390. package/dist/inspector/styleEditors/GapField.js +12 -0
  391. package/dist/inspector/styleEditors/GridChildSection.d.ts +14 -0
  392. package/dist/inspector/styleEditors/GridChildSection.js +91 -0
  393. package/dist/inspector/styleEditors/GridPicker.d.ts +13 -0
  394. package/dist/inspector/styleEditors/GridPicker.js +179 -0
  395. package/dist/inspector/styleEditors/GridSection.d.ts +17 -0
  396. package/dist/inspector/styleEditors/GridSection.js +27 -0
  397. package/dist/inspector/styleEditors/GridValueField.d.ts +17 -0
  398. package/dist/inspector/styleEditors/GridValueField.js +70 -0
  399. package/dist/inspector/styleEditors/InsetSection.d.ts +15 -0
  400. package/dist/inspector/styleEditors/InsetSection.js +15 -0
  401. package/dist/inspector/styleEditors/LayoutBlockedIndicator.d.ts +6 -0
  402. package/dist/inspector/styleEditors/LayoutBlockedIndicator.js +6 -0
  403. package/dist/inspector/styleEditors/LayoutComboField.d.ts +18 -0
  404. package/dist/inspector/styleEditors/LayoutComboField.js +138 -0
  405. package/dist/inspector/styleEditors/LayoutDropdown.d.ts +14 -0
  406. package/dist/inspector/styleEditors/LayoutDropdown.js +34 -0
  407. package/dist/inspector/styleEditors/LayoutSection.d.ts +13 -0
  408. package/dist/inspector/styleEditors/LayoutSection.js +342 -0
  409. package/dist/inspector/styleEditors/OpacityEditor.d.ts +13 -0
  410. package/dist/inspector/styleEditors/OpacityEditor.js +34 -0
  411. package/dist/inspector/styleEditors/PositionInsets.d.ts +15 -0
  412. package/dist/inspector/styleEditors/PositionInsets.js +12 -0
  413. package/dist/inspector/styleEditors/SpacingBox.d.ts +29 -0
  414. package/dist/inspector/styleEditors/SpacingBox.js +189 -0
  415. package/dist/inspector/styleEditors/Typography.d.ts +13 -0
  416. package/dist/inspector/styleEditors/Typography.js +137 -0
  417. package/dist/inspector/styleEditors/completeCssValue.d.ts +8 -0
  418. package/dist/inspector/styleEditors/completeCssValue.js +34 -0
  419. package/dist/inspector/styleEditors/gridChildModel.d.ts +74 -0
  420. package/dist/inspector/styleEditors/gridChildModel.js +138 -0
  421. package/dist/inspector/styleEditors/layoutValue.d.ts +24 -0
  422. package/dist/inspector/styleEditors/layoutValue.js +103 -0
  423. package/dist/inspector/styleEditors/nudgeValue.d.ts +8 -0
  424. package/dist/inspector/styleEditors/nudgeValue.js +71 -0
  425. package/dist/inspector/styleEditors/rowLookup.d.ts +11 -0
  426. package/dist/inspector/styleEditors/rowLookup.js +13 -0
  427. package/dist/inspector/styleEditors/stringRecord.d.ts +4 -0
  428. package/dist/inspector/styleEditors/stringRecord.js +1 -0
  429. package/dist/inspector/styleEditors/valuePolicy.d.ts +20 -0
  430. package/dist/inspector/styleEditors/valuePolicy.js +82 -0
  431. package/dist/inspector/testing.d.ts +10 -0
  432. package/dist/inspector/testing.js +9 -0
  433. package/dist/inspector/tokens/TokenChip.d.ts +24 -0
  434. package/dist/inspector/tokens/TokenChip.js +23 -0
  435. package/dist/inspector/tokens/TokenDropdown.d.ts +13 -0
  436. package/dist/inspector/tokens/TokenDropdown.js +59 -0
  437. package/dist/inspector/tokens/TokenField.d.ts +68 -0
  438. package/dist/inspector/tokens/TokenField.js +485 -0
  439. package/dist/inspector/tokens/TokenLabel.d.ts +7 -0
  440. package/dist/inspector/tokens/TokenLabel.js +23 -0
  441. package/dist/inspector/tokens/TokensPanel.d.ts +5 -0
  442. package/dist/inspector/tokens/TokensPanel.js +47 -0
  443. package/dist/inspector/tokens/catalog.d.ts +51 -0
  444. package/dist/inspector/tokens/catalog.js +184 -0
  445. package/dist/inspector/tokens/editActions.d.ts +35 -0
  446. package/dist/inspector/tokens/editActions.js +164 -0
  447. package/dist/inspector/tokens/resolution/cascade.d.ts +14 -0
  448. package/dist/inspector/tokens/resolution/cascade.js +31 -0
  449. package/dist/inspector/tokens/resolution/cssomCollector.d.ts +43 -0
  450. package/dist/inspector/tokens/resolution/cssomCollector.js +528 -0
  451. package/dist/inspector/tokens/resolution/selectorSemantics.d.ts +12 -0
  452. package/dist/inspector/tokens/resolution/selectorSemantics.js +106 -0
  453. package/dist/inspector/tokens/resolution.d.ts +56 -0
  454. package/dist/inspector/tokens/resolution.js +1401 -0
  455. package/dist/inspector/tokens/tokenEdits.d.ts +3 -0
  456. package/dist/inspector/tokens/tokenEdits.js +22 -0
  457. package/dist/inspector/tokens/valueSemanticsAdapter.d.ts +6 -0
  458. package/dist/inspector/tokens/valueSemanticsAdapter.js +68 -0
  459. package/dist/inspector/ui/AtRuleContext.d.ts +18 -0
  460. package/dist/inspector/ui/AtRuleContext.js +54 -0
  461. package/dist/inspector/ui/Button.d.ts +9 -0
  462. package/dist/inspector/ui/Button.js +4 -0
  463. package/dist/inspector/ui/ColorSwatch.d.ts +7 -0
  464. package/dist/inspector/ui/ColorSwatch.js +6 -0
  465. package/dist/inspector/ui/ControlSurface.d.ts +14 -0
  466. package/dist/inspector/ui/ControlSurface.js +10 -0
  467. package/dist/inspector/ui/FieldRow.d.ts +14 -0
  468. package/dist/inspector/ui/FieldRow.js +15 -0
  469. package/dist/inspector/ui/IconButton.d.ts +14 -0
  470. package/dist/inspector/ui/IconButton.js +5 -0
  471. package/dist/inspector/ui/InspectorPopover.d.ts +17 -0
  472. package/dist/inspector/ui/InspectorPopover.js +13 -0
  473. package/dist/inspector/ui/PopoverListbox.d.ts +37 -0
  474. package/dist/inspector/ui/PopoverListbox.js +21 -0
  475. package/dist/inspector/ui/SegmentedControl.d.ts +24 -0
  476. package/dist/inspector/ui/SegmentedControl.js +16 -0
  477. package/dist/inspector/ui/Select.d.ts +25 -0
  478. package/dist/inspector/ui/Select.js +56 -0
  479. package/dist/inspector/ui/SideValuesField.d.ts +44 -0
  480. package/dist/inspector/ui/SideValuesField.js +76 -0
  481. package/dist/inspector/ui/StatusCallout.d.ts +9 -0
  482. package/dist/inspector/ui/StatusCallout.js +4 -0
  483. package/dist/inspector/ui/TextInput.d.ts +12 -0
  484. package/dist/inspector/ui/TextInput.js +5 -0
  485. package/dist/inspector/ui/ToggleButton.d.ts +11 -0
  486. package/dist/inspector/ui/ToggleButton.js +6 -0
  487. package/dist/inspector/ui/assets/grid.svg +14 -0
  488. package/dist/inspector/ui/css.d.ts +9 -0
  489. package/dist/inspector/ui/labels.d.ts +1 -0
  490. package/dist/inspector/ui/labels.js +7 -0
  491. package/dist/inspector/ui/styles.d.ts +1 -0
  492. package/dist/inspector/ui/styles.js +68 -0
  493. package/dist/inspector/virtual-modules.d.ts +7 -0
  494. package/dist/inspector/vite-env.d.ts +10 -0
  495. package/dist/internal/agent-protocol.d.ts +232 -0
  496. package/dist/internal/agent-protocol.js +237 -0
  497. package/dist/nudge-ui.mjs +15722 -0
  498. package/dist/project/files.d.ts +19 -0
  499. package/dist/project/files.js +226 -0
  500. package/dist/project/identity.d.ts +6 -0
  501. package/dist/project/identity.js +19 -0
  502. package/dist/project/pathPolicy.d.ts +8 -0
  503. package/dist/project/pathPolicy.js +12 -0
  504. package/dist/project/tokens.d.ts +36 -0
  505. package/dist/project/tokens.js +223 -0
  506. package/dist/transport/index.d.ts +8 -0
  507. package/dist/transport/index.js +8 -0
  508. package/dist/transport/routes.d.ts +13 -0
  509. package/dist/transport/routes.js +16 -0
  510. package/package.json +137 -0
@@ -0,0 +1,310 @@
1
+ import { fileURLToPath } from "node:url";
2
+ import { createRequire } from "node:module";
3
+ import { dirname, join, relative, resolve } from "node:path";
4
+ import { ensureSidecar } from "./sidecar.js";
5
+ import { buildManifest } from "./manifest.js";
6
+ import { nudgeUiRepositoryPackagePath } from "./repositoryScope.js";
7
+ import { NUDGE_UI_ROUTE_PREFIX } from "../../transport/index.js";
8
+ const NAMESPACE_PREFIX = NUDGE_UI_ROUTE_PREFIX.slice(0, -1);
9
+ const SUPPORTED_NEXT_RANGE = ">=15.3 <17";
10
+ /**
11
+ * Resolved from the package root so the path is identical whether this module
12
+ * runs from `src/hosts/next/` during development or `dist/hosts/next/` when
13
+ * installed. The loaders only ever exist in `dist`.
14
+ */
15
+ function loaderPaths() {
16
+ const loaders = new URL("../../../dist/hosts/next/loaders/", import.meta.url);
17
+ return {
18
+ plugin: fileURLToPath(new URL("loader-plugin.cjs", loaders)),
19
+ identity: fileURLToPath(new URL("identity-loader.cjs", loaders)),
20
+ };
21
+ }
22
+ /** Absolute directory of a package installed in the host project, or null. */
23
+ function hostPackageDir(root, name) {
24
+ try {
25
+ const require = createRequire(join(root, "package.json"));
26
+ return dirname(require.resolve(`${name}/package.json`));
27
+ }
28
+ catch {
29
+ return null;
30
+ }
31
+ }
32
+ /** Absolute path for an Adapter-owned package export, resolved beside this package. */
33
+ function adapterPackageExport(specifier) {
34
+ try {
35
+ return createRequire(import.meta.url).resolve(specifier);
36
+ }
37
+ catch {
38
+ return null;
39
+ }
40
+ }
41
+ function relativeTurbopackAlias(root, target) {
42
+ const value = relative(root, target).split("\\").join("/");
43
+ return value.startsWith(".") ? value : `./${value}`;
44
+ }
45
+ function resolveNextVersion(root) {
46
+ try {
47
+ const require = createRequire(join(root, "package.json"));
48
+ return require("next/package.json").version ?? null;
49
+ }
50
+ catch {
51
+ return null;
52
+ }
53
+ }
54
+ /**
55
+ * ADR-0010 gates instrumentation on the supported range: a RESOLVED version
56
+ * outside it fails closed (no registration) with a diagnostic — instrumenting
57
+ * an unsupported compiler risks breaking the host build. An unresolvable
58
+ * version gets the benefit of the doubt and proceeds with a diagnostic,
59
+ * since refusing to work because we could not read a version number would
60
+ * make the adapter brittle for no safety gain.
61
+ */
62
+ function gateUnsupportedVersion(version) {
63
+ if (version && isVersionSupported(version))
64
+ return true;
65
+ console.warn(`[nudge-ui] Next.js ${version ?? "(version unavailable)"} is outside the tested range `
66
+ + `${SUPPORTED_NEXT_RANGE} (ADR-0010). Skipping instrumentation — remove `
67
+ + `withNudgeUi() or align versions to enable Nudge UI.`);
68
+ return false;
69
+ }
70
+ function isVersionSupported(version) {
71
+ const match = /^(\d+)\.(\d+)/.exec(version);
72
+ if (!match)
73
+ return false;
74
+ const major = Number(match[1]);
75
+ const minor = Number(match[2]);
76
+ // >=15.3 <17
77
+ return (major === 15 && minor >= 3) || (major >= 16 && major < 17);
78
+ }
79
+ function collectUserRewriteSources(rewrites) {
80
+ return [
81
+ ...(rewrites.beforeFiles ?? []),
82
+ ...(rewrites.afterFiles ?? []),
83
+ ...(rewrites.fallback ?? []),
84
+ ]
85
+ .map((rule) => rule.source)
86
+ .filter((source) => source.startsWith(NAMESPACE_PREFIX));
87
+ }
88
+ /** Mirrors next/constants PHASE_DEVELOPMENT_SERVER. */
89
+ export const DEVELOPMENT_SERVER_PHASE = "phase-development-server";
90
+ /**
91
+ * Returns whether this config evaluation belongs to Next's development
92
+ * server. The phase argument is supplied by Next when it invokes a config
93
+ * factory, so object exports are converted to factories before any
94
+ * instrumentation can run. Keeping the phase check here means an object
95
+ * export cannot accidentally instrument `next build` when a caller has
96
+ * forced `NODE_ENV=development`.
97
+ */
98
+ function isDevelopmentEvaluation(phase) {
99
+ return process.env.NODE_ENV === "development" && phase === DEVELOPMENT_SERVER_PHASE;
100
+ }
101
+ export function withNudgeUi(config = {}, options = {}) {
102
+ const factory = typeof config === "function"
103
+ ? config
104
+ : () => config;
105
+ return (phase) => {
106
+ const resolved = factory(phase);
107
+ if (!isDevelopmentEvaluation(phase))
108
+ return resolved;
109
+ return instrumentConfig(resolved, options);
110
+ };
111
+ }
112
+ function instrumentConfig(config, options) {
113
+ // Consumers pass their real NextConfig object; the structural subset is an
114
+ // internal view so this package stays typecheckable without next installed.
115
+ const source = config;
116
+ const root = process.cwd();
117
+ // Fail closed per ADR-0010 when the resolved version is unsupported.
118
+ if (!gateUnsupportedVersion(resolveNextVersion(root))) {
119
+ return config;
120
+ }
121
+ const sourceRoots = options.sourceRoots?.map((sourceRoot) => resolve(root, sourceRoot));
122
+ // ensureSidecar is a per-process singleton; awaiting it wherever the port
123
+ // is needed removes any config-evaluation race. The same authored roots
124
+ // reach token discovery so workspace CSS is visible to both integrations.
125
+ const sidecarPort = () => ensureSidecar(root, {
126
+ manifest: buildManifest({ root }),
127
+ tokens: true,
128
+ ...(sourceRoots ? { sourceRoots } : {}),
129
+ })
130
+ .then((handle) => handle.port)
131
+ .catch((error) => {
132
+ console.warn("[nudge-ui] sidecar failed to start:", error);
133
+ return 0;
134
+ });
135
+ const nextConfig = { ...source };
136
+ // --- transpilePackages -------------------------------------------------
137
+ // Workspace Nudge UI packages ship raw TypeScript that SWC refuses to
138
+ // compile from node_modules unless listed (see feature-plan appendix).
139
+ const nudgeUiPackages = [
140
+ "nudge-ui",
141
+ "../../inspector/index.ts",
142
+ "../../css/index.ts",
143
+ ];
144
+ const userTranspile = Array.isArray(source.transpilePackages)
145
+ ? source.transpilePackages
146
+ : [];
147
+ nextConfig.transpilePackages = [
148
+ ...userTranspile,
149
+ ...nudgeUiPackages.filter((name) => !userTranspile.includes(name)),
150
+ ];
151
+ // --- Turbopack rules (primary compiler) ---------------------------------
152
+ const turbopackRules = {
153
+ ...(source.turbopack?.rules ?? {}),
154
+ };
155
+ const paths = loaderPaths();
156
+ const loaderOptions = {
157
+ root,
158
+ ...(options.componentProtocols ? { componentProtocols: options.componentProtocols } : {}),
159
+ ...(sourceRoots ? { sourceRoots } : {}),
160
+ };
161
+ if (process.env.NUDGE_UI_NEXT_TURBOPACK_RULES !== "0") {
162
+ const identityRule = {
163
+ loaders: [{
164
+ loader: paths.plugin,
165
+ options: loaderOptions,
166
+ }],
167
+ // 'foreign' is Turbopack's builtin condition for dependency code, so
168
+ // `not: foreign` confines the loader to first-party sources. The path
169
+ // guard additionally keeps build output (.next) out of scope.
170
+ condition: {
171
+ all: [
172
+ { not: "foreign" },
173
+ { not: { path: "(**/)?\\.next/**" } },
174
+ // Workspace symlinks are NOT foreign (they are source-backed), so
175
+ // the Nudge UI packages themselves must be excluded explicitly:
176
+ // instrumenting the inspector's own UI would wrap every control in
177
+ // override boundaries and pollute the panel with identity attrs.
178
+ // The list is shared with the loader's runtime scope check.
179
+ {
180
+ not: {
181
+ path: nudgeUiRepositoryPackagePath,
182
+ },
183
+ },
184
+ ],
185
+ },
186
+ };
187
+ /**
188
+ * Rules are COMPOSED with any user rule for the same key by building a
189
+ * rule collection (Next supports arrays of items per glob) — silently
190
+ * overwriting host configuration is never acceptable.
191
+ */
192
+ const compose = (key, rule) => {
193
+ const existing = turbopackRules[key];
194
+ if (existing === undefined) {
195
+ turbopackRules[key] = rule;
196
+ return;
197
+ }
198
+ // [].concat flattens one level, so an existing collection stays flat.
199
+ turbopackRules[key] = [].concat(existing, rule);
200
+ };
201
+ compose("*.tsx", { ...identityRule });
202
+ compose("*.jsx", { ...identityRule });
203
+ }
204
+ // --- Single React instance (ADR-0004 via module resolution) -------------
205
+ // Nudge UI packages carry their own react dependency for standalone
206
+ // consumers. Without an alias, SWC resolves their `react` imports against
207
+ // those copies while the host application runs its own — two Reacts in one
208
+ // document, and inspector state updates silently stop rendering. Aliasing
209
+ // to the host project's copies pins one instance for every compilation.
210
+ const hostReact = hostPackageDir(root, "react");
211
+ const hostReactDom = hostPackageDir(root, "react-dom");
212
+ const componentRuntime = adapterPackageExport("nudge-ui/internal/component-runtime");
213
+ if (hostReact || hostReactDom || componentRuntime) {
214
+ const userAlias = source.turbopack?.resolveAlias ?? {};
215
+ nextConfig.turbopack = {
216
+ ...nextConfig.turbopack,
217
+ resolveAlias: {
218
+ ...(hostReact ? { react: relativeTurbopackAlias(root, hostReact) } : {}),
219
+ ...(hostReactDom ? { "react-dom": relativeTurbopackAlias(root, hostReactDom) } : {}),
220
+ ...(componentRuntime
221
+ ? {
222
+ "nudge-ui/internal/component-runtime": relativeTurbopackAlias(root, componentRuntime),
223
+ }
224
+ : {}),
225
+ ...userAlias,
226
+ },
227
+ };
228
+ }
229
+ nextConfig.turbopack = {
230
+ ...(nextConfig.turbopack ?? {}),
231
+ rules: turbopackRules,
232
+ };
233
+ // --- Webpack mode (secondary target, Stage 6 verifies parity) ----------
234
+ const userWebpack = source.webpack;
235
+ nextConfig.webpack = (webpackConfig, context) => {
236
+ const merged = userWebpack ? userWebpack(webpackConfig, context) : webpackConfig;
237
+ if (!context.dev)
238
+ return merged;
239
+ const module = (merged.module ?? {});
240
+ const resolveConfig = (merged.resolve ?? {});
241
+ const userAlias = (resolveConfig.alias ?? {});
242
+ const rules = Array.isArray(module.rules) ? [...module.rules] : [];
243
+ const paths = loaderPaths();
244
+ // Next 16 removed the webpack CSS pipeline entirely
245
+ // (nextjs.org/docs/messages/built-in-css-disabled): applications using
246
+ // stylesheets cannot run under `next dev --webpack` on 16 at all,
247
+ // with or without Nudge UI. Registration stays so Next 15.x within
248
+ // the supported range keeps working; flag the combination loudly.
249
+ const version = resolveNextVersion(root);
250
+ if (version && Number(version.split(".")[0]) >= 16) {
251
+ console.warn("[nudge-ui] Next.js " + version + " webpack dev mode has no CSS support "
252
+ + "(removed upstream); CSS-bearing applications will fail to compile "
253
+ + "independent of Nudge UI. Prefer Turbopack (default) or Next 15.x.");
254
+ }
255
+ rules.push({
256
+ test: /\.(tsx|jsx)$/,
257
+ exclude: /node_modules/,
258
+ enforce: "pre",
259
+ use: [{
260
+ loader: paths.identity,
261
+ options: loaderOptions,
262
+ }],
263
+ });
264
+ return {
265
+ ...merged,
266
+ resolve: {
267
+ ...resolveConfig,
268
+ alias: {
269
+ ...(componentRuntime
270
+ ? { "nudge-ui/internal/component-runtime": componentRuntime }
271
+ : {}),
272
+ ...userAlias,
273
+ },
274
+ },
275
+ module: { ...module, rules },
276
+ };
277
+ };
278
+ // --- Manifest transport rewrite ----------------------------------------
279
+ const proxyRewrite = (port) => ({
280
+ source: `${NUDGE_UI_ROUTE_PREFIX}:path*`,
281
+ destination: `http://127.0.0.1:${port}${NUDGE_UI_ROUTE_PREFIX}:path*`,
282
+ });
283
+ const resolveRewrites = async () => {
284
+ const port = await sidecarPort();
285
+ const userRewrites = typeof source.rewrites === "function"
286
+ ? await source.rewrites()
287
+ : source.rewrites;
288
+ const shape = Array.isArray(userRewrites)
289
+ ? { afterFiles: userRewrites }
290
+ : (userRewrites ?? {});
291
+ const collisions = collectUserRewriteSources(shape);
292
+ if (collisions.length > 0) {
293
+ console.warn("[nudge-ui] /__nudge_ui__ is a reserved namespace (ADR-0010); "
294
+ + "your rewrites also declare it and will be shadowed:", collisions);
295
+ }
296
+ return {
297
+ // Port 0 (sidecar failed to bind) yields a dead destination; the mount
298
+ // surfaces an honest fetch failure instead of silently pretending to
299
+ // work.
300
+ beforeFiles: [proxyRewrite(port), ...(shape.beforeFiles ?? [])],
301
+ afterFiles: shape.afterFiles ?? [],
302
+ fallback: shape.fallback ?? [],
303
+ };
304
+ };
305
+ // Preserve callability while keeping our async resolver.
306
+ nextConfig.rewrites = resolveRewrites;
307
+ // The structural view carries every original field through the spread;
308
+ // consumers keep their NextConfig typing via the generic passthrough.
309
+ return nextConfig;
310
+ }
@@ -0,0 +1,12 @@
1
+ /** Parsed arguments for `nudge-ui serve`. */
2
+ export interface ServeCommandOptions {
3
+ readonly rootDirectory: string;
4
+ readonly host: "127.0.0.1" | "::1" | "localhost";
5
+ readonly port: number;
6
+ }
7
+ /** Parses the standalone CLI's intentionally small command surface. */
8
+ export declare function parseServeArguments(args: readonly string[], currentDirectory?: string): ServeCommandOptions;
9
+ /** Starts the CLI server and waits until the process receives a termination signal. */
10
+ export declare function runServeCommand(options: ServeCommandOptions): Promise<void>;
11
+ /** Runs the standalone command. */
12
+ export declare function main(args?: string[]): Promise<void>;
@@ -0,0 +1,77 @@
1
+ import { resolve } from "node:path";
2
+ import { createStandaloneServer } from "./server.js";
3
+ /** Parses the standalone CLI's intentionally small command surface. */
4
+ export function parseServeArguments(args, currentDirectory = process.cwd()) {
5
+ if (args[0] !== "serve") {
6
+ throw new Error("Usage: nudge-ui serve [directory] [--port <port>] [--host <loopback>]");
7
+ }
8
+ let directory = ".";
9
+ let host = "127.0.0.1";
10
+ let port = 4173;
11
+ let directoryProvided = false;
12
+ for (let index = 1; index < args.length; index += 1) {
13
+ const argument = args[index];
14
+ if (argument === "--port") {
15
+ port = parsePort(args[++index]);
16
+ }
17
+ else if (argument.startsWith("--port=")) {
18
+ port = parsePort(argument.slice("--port=".length));
19
+ }
20
+ else if (argument === "--host") {
21
+ host = parseHost(args[++index]);
22
+ }
23
+ else if (argument.startsWith("--host=")) {
24
+ host = parseHost(argument.slice("--host=".length));
25
+ }
26
+ else if (argument.startsWith("-")) {
27
+ throw new Error(`Unknown option: ${argument}`);
28
+ }
29
+ else if (!directoryProvided) {
30
+ directory = argument;
31
+ directoryProvided = true;
32
+ }
33
+ else {
34
+ throw new Error(`Unexpected argument: ${argument}`);
35
+ }
36
+ }
37
+ return { rootDirectory: resolve(currentDirectory, directory), host, port };
38
+ }
39
+ /** Starts the CLI server and waits until the process receives a termination signal. */
40
+ export async function runServeCommand(options) {
41
+ const server = createStandaloneServer(options);
42
+ const address = await server.start();
43
+ console.log(`Nudge UI serving ${server.rootDirectory} at ${address.url}`);
44
+ await waitForTermination(server);
45
+ }
46
+ /** Runs the standalone command. */
47
+ export async function main(args = process.argv.slice(2)) {
48
+ const options = parseServeArguments(args);
49
+ await runServeCommand(options);
50
+ }
51
+ async function waitForTermination(server) {
52
+ await new Promise((resolveWait) => {
53
+ let finished = false;
54
+ const finish = () => {
55
+ if (finished)
56
+ return;
57
+ finished = true;
58
+ void server.close().finally(resolveWait);
59
+ };
60
+ process.once("SIGINT", finish);
61
+ process.once("SIGTERM", finish);
62
+ });
63
+ }
64
+ function parsePort(value) {
65
+ if (!value)
66
+ throw new Error("--port requires a value.");
67
+ const port = Number(value);
68
+ if (!Number.isInteger(port) || port < 0 || port > 65_535) {
69
+ throw new Error(`Port must be an integer from 0 to 65535; received ${value}.`);
70
+ }
71
+ return port;
72
+ }
73
+ function parseHost(value) {
74
+ if (value === "127.0.0.1" || value === "::1" || value === "localhost")
75
+ return value;
76
+ throw new Error(`Host must be loopback (127.0.0.1, ::1, or localhost); received ${value ?? ""}.`);
77
+ }
@@ -0,0 +1,27 @@
1
+ /** Options for source-preserving standalone bootstrap injection. */
2
+ export interface StandaloneBootstrapOptions {
3
+ /** The browser client URL. */
4
+ readonly clientPath?: string;
5
+ /** The runtime manifest URL passed to the browser client. */
6
+ readonly manifestPath?: string;
7
+ }
8
+ /** The result of injecting the standalone bootstrap into one HTML response. */
9
+ export interface StandaloneBootstrapResult {
10
+ /** The response source after any missing bootstrap nodes are inserted. */
11
+ readonly html: string;
12
+ /** Whether at least one node was inserted. */
13
+ readonly injected: boolean;
14
+ }
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
+ */
27
+ export declare function injectStandaloneBootstrap(html: string, options?: StandaloneBootstrapOptions): StandaloneBootstrapResult;
@@ -0,0 +1,93 @@
1
+ import { NUDGE_UI_CLIENT_PATH, NUDGE_UI_MOUNT_ID, NUDGE_UI_MANIFEST_PATH, } from "../manifest.js";
2
+ import { parse } from "parse5";
3
+ const CLIENT_MARKER = "data-nudge-ui-client";
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
+ */
17
+ export function injectStandaloneBootstrap(html, options = {}) {
18
+ const clientPath = options.clientPath ?? NUDGE_UI_CLIENT_PATH;
19
+ const manifestPath = options.manifestPath ?? NUDGE_UI_MANIFEST_PATH;
20
+ const document = parse(html, { sourceCodeLocationInfo: true });
21
+ const sourceFacts = inspectSource(document, clientPath);
22
+ const nodes = [];
23
+ if (!sourceFacts.hasMount) {
24
+ nodes.push(`<div id="${NUDGE_UI_MOUNT_ID}" ${MOUNT_MARKER}></div>`);
25
+ }
26
+ if (!sourceFacts.hasClient) {
27
+ nodes.push(`<script type="module" src="${escapeAttributeValue(clientPath)}" ${CLIENT_MARKER} data-nudge-ui-manifest="${escapeAttributeValue(manifestPath)}"></script>`);
28
+ }
29
+ if (nodes.length === 0)
30
+ return { html, injected: false };
31
+ const injection = `\n${nodes.join("\n")}\n`;
32
+ const offset = sourceFacts.bodyEndOffset ?? sourceFacts.htmlEndOffset ?? html.length;
33
+ return {
34
+ html: `${html.slice(0, offset)}${injection}${html.slice(offset)}`,
35
+ injected: true,
36
+ };
37
+ }
38
+ function inspectSource(document, clientPath) {
39
+ const facts = {
40
+ hasMount: false,
41
+ hasClient: false,
42
+ bodyEndOffset: null,
43
+ htmlEndOffset: null,
44
+ };
45
+ let body = null;
46
+ visitElements(document, (element) => {
47
+ if (element.namespaceURI !== "http://www.w3.org/1999/xhtml")
48
+ return;
49
+ const tagName = element.tagName.toLowerCase();
50
+ if (tagName === "body")
51
+ body = element;
52
+ if (tagName === "script"
53
+ && (attributeValue(element, CLIENT_MARKER) !== null
54
+ || attributeValue(element, "src") === clientPath)) {
55
+ facts.hasClient = true;
56
+ }
57
+ const endOffset = element.sourceCodeLocation?.endTag?.startOffset;
58
+ if (tagName === "body" && endOffset !== undefined)
59
+ facts.bodyEndOffset = endOffset;
60
+ if (tagName === "html" && endOffset !== undefined)
61
+ facts.htmlEndOffset = endOffset;
62
+ });
63
+ // Only live body descendants can reserve the mount. Template content is
64
+ // inert and must not suppress injection into the document.
65
+ if (body) {
66
+ visitElements(body, (element) => {
67
+ if (element !== body && attributeValue(element, "id") === NUDGE_UI_MOUNT_ID) {
68
+ facts.hasMount = true;
69
+ }
70
+ });
71
+ }
72
+ return facts;
73
+ }
74
+ function visitElements(parent, visit) {
75
+ for (const child of parent.childNodes) {
76
+ if (!("tagName" in child) || typeof child.tagName !== "string")
77
+ continue;
78
+ if (child.tagName.toLowerCase() === "template")
79
+ continue;
80
+ visit(child);
81
+ visitElements(child, visit);
82
+ }
83
+ }
84
+ function attributeValue(element, name) {
85
+ return element.attrs.find((attribute) => attribute.name === name)?.value ?? null;
86
+ }
87
+ function escapeAttributeValue(value) {
88
+ return value
89
+ .replaceAll("&", "&amp;")
90
+ .replaceAll('"', "&quot;")
91
+ .replaceAll("<", "&lt;")
92
+ .replaceAll(">", "&gt;");
93
+ }
@@ -0,0 +1,4 @@
1
+ export { instrumentSourceHtml, type HtmlIdentityDiagnostic, type HtmlIdentityDiagnosticCode, type HtmlIdentityResult, } from "../../html/identity.js";
2
+ export { injectStandaloneBootstrap, type StandaloneBootstrapOptions, type StandaloneBootstrapResult, } from "./html/bootstrap.js";
3
+ export { createStandaloneRuntimeManifest, NUDGE_UI_CLIENT_PATH, NUDGE_UI_MANIFEST_PATH, NUDGE_UI_RELOAD_PATH, NUDGE_UI_ROUTE_PREFIX, type StandaloneRuntimeManifest, } from "./manifest.js";
4
+ export { contentTypeForPath, createStandaloneProjectId, createStandaloneServer, isReservedNudgeUiRoute, resolveStaticFile, type StandaloneServer, type StandaloneServerAddress, type StandaloneServerOptions, type StaticFileResolution, } from "./server.js";
@@ -0,0 +1,4 @@
1
+ export { instrumentSourceHtml, } from "../../html/identity.js";
2
+ export { injectStandaloneBootstrap, } from "./html/bootstrap.js";
3
+ export { createStandaloneRuntimeManifest, NUDGE_UI_CLIENT_PATH, NUDGE_UI_MANIFEST_PATH, NUDGE_UI_RELOAD_PATH, NUDGE_UI_ROUTE_PREFIX, } from "./manifest.js";
4
+ export { contentTypeForPath, createStandaloneProjectId, createStandaloneServer, isReservedNudgeUiRoute, resolveStaticFile, } from "./server.js";
@@ -0,0 +1,18 @@
1
+ import type { NudgeUiClientManifest } from "../../inspector/clientManifest.js";
2
+ import type { ProjectTokenSnapshot } from "../../project/tokens.js";
3
+ export { NUDGE_UI_CLIENT_PATH, NUDGE_UI_MANIFEST_PATH, NUDGE_UI_MOUNT_ID, NUDGE_UI_RELOAD_PATH, NUDGE_UI_ROUTE_PREFIX, } from "../../transport/index.js";
4
+ /** The serializable runtime document sent to a standalone client. */
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
+ */
18
+ export declare function createStandaloneRuntimeManifest(projectId: string, tokenSnapshot?: ProjectTokenSnapshot, revision?: number): StandaloneRuntimeManifest;
@@ -0,0 +1,51 @@
1
+ import { NUDGE_UI_MANIFEST_VERSION, NUDGE_UI_RELOAD_PATH } from "../../transport/index.js";
2
+ export { NUDGE_UI_CLIENT_PATH, NUDGE_UI_MANIFEST_PATH, NUDGE_UI_MOUNT_ID, NUDGE_UI_RELOAD_PATH, NUDGE_UI_ROUTE_PREFIX, } from "../../transport/index.js";
3
+ /**
4
+ * Creates the first valid static-HTML runtime snapshot.
5
+ *
6
+ * Stage 4 replaces the empty token arrays with the CSS token-inventory
7
+ * snapshot. Keeping this constructor here makes the manifest contract
8
+ * explicit and prevents the server from manufacturing a partial runtime
9
+ * configuration.
10
+ *
11
+ * @param projectId The deterministic identity of the served project.
12
+ * @returns A complete runtime manifest with no framework contracts or tokens.
13
+ */
14
+ export function createStandaloneRuntimeManifest(projectId, tokenSnapshot = emptyTokenSnapshot(), revision = 0) {
15
+ return {
16
+ version: NUDGE_UI_MANIFEST_VERSION,
17
+ revision,
18
+ runtime: {
19
+ projectId,
20
+ host: "static-html",
21
+ framework: "HTML",
22
+ stylingSystem: "CSS custom properties",
23
+ // Canvas shares the Vite host's controller/renderer runtime (ADR-0012):
24
+ // every served document carries the bootstrap, so card iframes boot as
25
+ // renderers without host-specific code.
26
+ capabilities: { canvas: true, componentSemantics: false },
27
+ tokenCatalog: tokenSnapshot.tokenCatalog,
28
+ tokens: tokenSnapshot.tokens,
29
+ tokenDiagnostics: tokenSnapshot.tokenDiagnostics,
30
+ tokenGeneration: tokenSnapshot.tokenGeneration,
31
+ componentContracts: [],
32
+ },
33
+ document: {
34
+ runtimeIdentity: "static-html",
35
+ stylesheetOrder: "browser",
36
+ },
37
+ reload: {
38
+ endpoint: NUDGE_UI_RELOAD_PATH,
39
+ strategy: "reload-document",
40
+ events: ["ready", "reload"],
41
+ },
42
+ };
43
+ }
44
+ function emptyTokenSnapshot() {
45
+ return {
46
+ tokenCatalog: [],
47
+ tokens: [],
48
+ tokenDiagnostics: [],
49
+ tokenGeneration: "empty",
50
+ };
51
+ }
@@ -0,0 +1,72 @@
1
+ import { type Server } from "node:http";
2
+ import { type StandaloneRuntimeManifest } from "./manifest.js";
3
+ /** Options for the loopback-only standalone static server. */
4
+ export interface StandaloneServerOptions {
5
+ /** The explicit directory whose files may be served. */
6
+ readonly rootDirectory: string;
7
+ /** The loopback address to bind. Defaults to `127.0.0.1`. */
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
+ readonly port?: number;
11
+ /** The prebuilt browser client artifact. */
12
+ readonly clientPath?: string;
13
+ /** Override the deterministic project identity in tests or embedding hosts. */
14
+ readonly projectId?: string;
15
+ /** Debounce interval for source changes before one reload revision. */
16
+ readonly watchDebounceMs?: number;
17
+ }
18
+ /** A canonical file resolved below the configured project root. */
19
+ export interface StaticFileResolution {
20
+ /** The canonical file path on disk. */
21
+ readonly absolutePath: string;
22
+ /** The slash-separated project-relative path used for source identity. */
23
+ readonly projectPath: string;
24
+ }
25
+ /** The address returned after the server starts listening. */
26
+ export interface StandaloneServerAddress {
27
+ readonly host: string;
28
+ readonly port: number;
29
+ readonly url: string;
30
+ }
31
+ /** The running standalone server and its lifecycle methods. */
32
+ export interface StandaloneServer {
33
+ readonly httpServer: Server;
34
+ readonly rootDirectory: string;
35
+ readonly projectId: string;
36
+ readonly manifest: StandaloneRuntimeManifest;
37
+ start(): Promise<StandaloneServerAddress>;
38
+ close(): Promise<void>;
39
+ }
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
+ */
51
+ 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
+ */
66
+ export declare function resolveStaticFile(rootDirectory: string, requestPath: string): StaticFileResolution | null;
67
+ /** Returns the deterministic project identity used for session persistence. */
68
+ export declare function createStandaloneProjectId(rootDirectory: string): string;
69
+ /** Returns a common response content type for a project-relative file. */
70
+ 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;