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,119 @@
1
+ import type { TokenCatalogDiagnostic, TokenDefinition, TokenEntry } from "../../css/model/index.js";
2
+ import type { ComponentContract } from "../componentSemantics/types.js";
3
+ /** The host Adapter that supplied the active inspector runtime. */
4
+ export type NudgeUiRuntimeHost = "vite-react" | "static-html" | "nextjs-react" | "astro";
5
+ /** The framework semantics enabled for the active inspector runtime. */
6
+ export type NudgeUiRuntimeFramework = "React" | "HTML" | "Astro";
7
+ /**
8
+ * Which identity origins carry exact authored coordinates in prompts
9
+ * (ADR-0011 Stage 5).
10
+ *
11
+ * A host whose pipeline captures `data-src` positions from anything other
12
+ * than the authored source declares the exact subset. Hosts that omit the
13
+ * policy state that every source site is exact.
14
+ */
15
+ export interface SourceCoordinatePolicy {
16
+ /** Cid prefixes whose `data-src` line:column point at authored source. */
17
+ readonly exactCidPrefixes: readonly string[];
18
+ /** File extensions whose `data-src` line:column point at authored source. */
19
+ readonly exactFileExtensions: readonly string[];
20
+ }
21
+ /** Capabilities exposed by the active host Adapter. */
22
+ export interface NudgeUiRuntimeCapabilities {
23
+ /** Whether the multi-page Canvas workspace is available. */
24
+ readonly canvas: boolean;
25
+ /** Whether framework component inspection and prop overrides are available. */
26
+ readonly componentSemantics: boolean;
27
+ /** Whether the experimental DOM navigation section is available. */
28
+ readonly domNavigation?: boolean;
29
+ /**
30
+ * Source-coordinate precision policy for prompts; every source site is
31
+ * exact when the host omits it.
32
+ */
33
+ readonly sourceCoordinates?: SourceCoordinatePolicy;
34
+ /**
35
+ * Regex source matching this host's structural scoping markers, stripped
36
+ * from human-facing selector labels (ADR-0011). The raw selector stays in
37
+ * change records so managed-rule targeting keeps matching the rendered
38
+ * DOM. No stripping when the host omits it.
39
+ */
40
+ readonly scopingSelectorPattern?: string;
41
+ }
42
+ /**
43
+ * Browser knowledge supplied by a host Adapter before the inspector mounts.
44
+ *
45
+ * A host replaces the complete configuration when its document is replaced or
46
+ * its development transport is refreshed. Shared inspector Modules read the
47
+ * current snapshot through `getNudgeUiRuntimeConfig()` and never import a
48
+ * host-specific transport directly.
49
+ */
50
+ export interface NudgeUiRuntimeConfig {
51
+ readonly projectId: string;
52
+ readonly host: NudgeUiRuntimeHost;
53
+ readonly framework: NudgeUiRuntimeFramework;
54
+ readonly stylingSystem: string;
55
+ readonly capabilities: NudgeUiRuntimeCapabilities;
56
+ readonly tokenCatalog: readonly TokenDefinition[];
57
+ readonly tokens: readonly TokenEntry[];
58
+ readonly tokenDiagnostics: readonly TokenCatalogDiagnostic[];
59
+ readonly tokenGeneration: string;
60
+ readonly componentContracts: readonly ComponentContract[];
61
+ /** Whether this runtime is the explicit public landing-page demo. */
62
+ readonly demo?: boolean;
63
+ }
64
+ /**
65
+ * Validates a host-supplied configuration and fills safe defaults.
66
+ *
67
+ * `projectId`, `host`, and `framework` are required identity fields; wrong
68
+ * types or values fail fast at the host seam instead of leaking `undefined`
69
+ * into storage keys or capability checks. Token arrays, the styling-system
70
+ * label, generation string, and capabilities are optional and default to
71
+ * empty/false values so a minimal host still bootstraps honestly.
72
+ *
73
+ * @param input The configuration supplied by a host Adapter.
74
+ * @returns A complete plain-data configuration ready to snapshot.
75
+ */
76
+ export declare function normalizeNudgeUiRuntimeConfig(input: unknown): NudgeUiRuntimeConfig;
77
+ /**
78
+ * Replaces the complete runtime configuration for the active document.
79
+ *
80
+ * The input is validated and incomplete optional fields receive safe defaults
81
+ * (see `normalizeNudgeUiRuntimeConfig`). Replacement is atomic from the
82
+ * inspector's perspective. The returned snapshot owns recursively cloned and
83
+ * frozen plain data, so a host can safely replace its virtual module values
84
+ * during HMR without leaving shared Modules bound to an old transport object
85
+ * or freezing caller-owned values.
86
+ */
87
+ export declare function configureNudgeUiRuntime(config: NudgeUiRuntimeConfig): void;
88
+ /** Returns the immutable runtime snapshot used by shared inspector Modules. */
89
+ export declare function getNudgeUiRuntimeConfig(): NudgeUiRuntimeConfig;
90
+ /**
91
+ * Whether this document runs the explicit public landing demo (ADR-0014 and
92
+ * ADR-0016). The plugin emits `demo: true` for the flagged demo route and for
93
+ * the explicit landing root in development and `nudge-demo` builds, so this is
94
+ * the precise runtime boundary of the demo — narrower than any build-mode
95
+ * name.
96
+ */
97
+ export declare function isDemoRuntime(): boolean;
98
+ /**
99
+ * Returns the active host's source-coordinate policy, or null when the host
100
+ * declares none — every source site is exact in that case.
101
+ */
102
+ export declare function getSourceCoordinatePolicy(): SourceCoordinatePolicy | null;
103
+ /**
104
+ * Returns the active host's structural scoping-marker pattern compiled for
105
+ * global replacement, or null when the host declares none. An invalid regex
106
+ * source degrades to no stripping rather than breaking labeling.
107
+ */
108
+ export declare function getScopingSelectorPattern(): RegExp | null;
109
+ /**
110
+ * Subscribes to complete runtime replacements, such as Vite HMR updates.
111
+ * Listeners run after the new snapshot is installed.
112
+ */
113
+ export declare function subscribeNudgeUiRuntime(listener: () => void): () => void;
114
+ /** Returns the styling-system label represented by a token inventory. */
115
+ export declare function detectStylingSystem(tokens: readonly TokenEntry[]): string;
116
+ /** Returns a mutable container for UI controls that require array props. */
117
+ export declare function getNudgeUiTokenEntries(): TokenEntry[];
118
+ export type { TokenCatalogDiagnostic, TokenDefinition, TokenEntry } from "../../css/model/index.js";
119
+ export type { ComponentContract } from "../componentSemantics/types.js";
@@ -0,0 +1,276 @@
1
+ function cloneAndFreeze(value, seen = new WeakMap()) {
2
+ if (value === null || typeof value !== "object")
3
+ return value;
4
+ const source = value;
5
+ const existing = seen.get(source);
6
+ if (existing)
7
+ return existing;
8
+ // An already-frozen subtree is immutable, so it can be reused by reference.
9
+ // Repeated configuration with the same frozen payload (HMR re-runs, stub
10
+ // spread patterns) keeps array identity stable for identity-keyed caches.
11
+ if (Object.isFrozen(value)) {
12
+ seen.set(source, value);
13
+ return value;
14
+ }
15
+ if (Array.isArray(value)) {
16
+ const copy = [];
17
+ seen.set(source, copy);
18
+ for (const item of value)
19
+ copy.push(cloneAndFreeze(item, seen));
20
+ return Object.freeze(copy);
21
+ }
22
+ const copy = {};
23
+ seen.set(source, copy);
24
+ for (const [key, child] of Object.entries(value)) {
25
+ copy[key] = cloneAndFreeze(child, seen);
26
+ }
27
+ return Object.freeze(copy);
28
+ }
29
+ const DEFAULT_RUNTIME_CONFIG = cloneAndFreeze({
30
+ projectId: "/stub/project",
31
+ host: "vite-react",
32
+ framework: "React",
33
+ stylingSystem: "CSS custom properties",
34
+ capabilities: { canvas: true, componentSemantics: true, domNavigation: false },
35
+ tokenCatalog: [],
36
+ tokens: [],
37
+ tokenDiagnostics: [],
38
+ tokenGeneration: "",
39
+ componentContracts: [],
40
+ });
41
+ const RUNTIME_HOSTS = [
42
+ "vite-react",
43
+ "static-html",
44
+ "nextjs-react",
45
+ "astro",
46
+ ];
47
+ const RUNTIME_FRAMEWORKS = [
48
+ "React",
49
+ "HTML",
50
+ "Astro",
51
+ ];
52
+ const normalizedRuntimeConfigs = new WeakSet();
53
+ function isNormalizedRuntimeConfig(
54
+ // Callers first narrow this value to a non-null object at the runtime boundary.
55
+ // oxlint-disable-next-line anti-slop/no-object-parameters
56
+ value) {
57
+ return normalizedRuntimeConfigs.has(value);
58
+ }
59
+ function isPlainRecord(value) {
60
+ return typeof value === "object" && value !== null && !Array.isArray(value);
61
+ }
62
+ function requireString(input, field) {
63
+ const value = input[field];
64
+ if (typeof value === "string" && value.length > 0)
65
+ return value;
66
+ throw new TypeError(`Nudge UI runtime configuration requires a non-empty string "${field}"; received ${value === undefined ? "undefined" : JSON.stringify(value)}.`);
67
+ }
68
+ function requireEnum(input, field, allowed) {
69
+ const value = input[field];
70
+ if (typeof value === "string" && allowed.includes(value))
71
+ return value;
72
+ throw new TypeError(`Nudge UI runtime configuration requires "${field}" to be one of ${allowed.map((candidate) => JSON.stringify(candidate)).join(", ")}; received ${value === undefined ? "undefined" : JSON.stringify(value)}.`);
73
+ }
74
+ function optionalString(input, field) {
75
+ const value = input[field];
76
+ if (value === undefined)
77
+ return "";
78
+ if (typeof value !== "string") {
79
+ throw new TypeError(`Nudge UI runtime configuration field "${field}" must be a string.`);
80
+ }
81
+ return value;
82
+ }
83
+ function optionalArray(input, field) {
84
+ const value = input[field];
85
+ if (value === undefined)
86
+ return [];
87
+ if (!Array.isArray(value)) {
88
+ throw new TypeError(`Nudge UI runtime configuration field "${field}" must be an array.`);
89
+ }
90
+ return value;
91
+ }
92
+ function optionalBoolean(input, field) {
93
+ const value = input[field];
94
+ if (value === undefined)
95
+ return false;
96
+ if (typeof value !== "boolean") {
97
+ throw new TypeError(`Nudge UI runtime capability "${field}" must be a boolean; received ${JSON.stringify(value)}.`);
98
+ }
99
+ return value;
100
+ }
101
+ function optionalNonEmptyString(input, field) {
102
+ const value = input[field];
103
+ if (value === undefined)
104
+ return undefined;
105
+ if (typeof value !== "string" || value.length === 0) {
106
+ throw new TypeError(`Nudge UI runtime configuration field "${field}" must be a non-empty string.`);
107
+ }
108
+ return value;
109
+ }
110
+ function optionalStringArray(input, field) {
111
+ const value = input[field];
112
+ if (value === undefined)
113
+ return undefined;
114
+ if (!Array.isArray(value) || value.some((item) => typeof item !== "string")) {
115
+ throw new TypeError(`Nudge UI runtime configuration field "${field}" must be an array of strings.`);
116
+ }
117
+ return value;
118
+ }
119
+ function normalizeSourceCoordinatePolicy(input) {
120
+ const policy = input.sourceCoordinates;
121
+ if (policy === undefined)
122
+ return undefined;
123
+ if (!isPlainRecord(policy)) {
124
+ throw new TypeError('Nudge UI runtime capability "sourceCoordinates" must be an object.');
125
+ }
126
+ return {
127
+ exactCidPrefixes: optionalStringArray(policy, "exactCidPrefixes") ?? [],
128
+ exactFileExtensions: optionalStringArray(policy, "exactFileExtensions") ?? [],
129
+ };
130
+ }
131
+ function normalizeCapabilities(input) {
132
+ if (input === undefined)
133
+ return { canvas: false, componentSemantics: false, domNavigation: false };
134
+ if (!isPlainRecord(input)) {
135
+ throw new TypeError('Nudge UI runtime configuration field "capabilities" must be an object.');
136
+ }
137
+ return {
138
+ canvas: optionalBoolean(input, "canvas"),
139
+ componentSemantics: optionalBoolean(input, "componentSemantics"),
140
+ domNavigation: optionalBoolean(input, "domNavigation"),
141
+ sourceCoordinates: normalizeSourceCoordinatePolicy(input),
142
+ scopingSelectorPattern: optionalNonEmptyString(input, "scopingSelectorPattern"),
143
+ };
144
+ }
145
+ function optionalDemoFlag(input) {
146
+ const value = input.demo;
147
+ if (value === undefined || value === false)
148
+ return undefined;
149
+ if (value !== true) {
150
+ throw new TypeError(`Nudge UI runtime configuration field "demo" must be a boolean; received ${JSON.stringify(value)}.`);
151
+ }
152
+ return true;
153
+ }
154
+ /**
155
+ * Validates a host-supplied configuration and fills safe defaults.
156
+ *
157
+ * `projectId`, `host`, and `framework` are required identity fields; wrong
158
+ * types or values fail fast at the host seam instead of leaking `undefined`
159
+ * into storage keys or capability checks. Token arrays, the styling-system
160
+ * label, generation string, and capabilities are optional and default to
161
+ * empty/false values so a minimal host still bootstraps honestly.
162
+ *
163
+ * @param input The configuration supplied by a host Adapter.
164
+ * @returns A complete plain-data configuration ready to snapshot.
165
+ */
166
+ export function normalizeNudgeUiRuntimeConfig(input) {
167
+ if (!isPlainRecord(input)) {
168
+ throw new TypeError("Nudge UI runtime configuration must be an object.");
169
+ }
170
+ if (isNormalizedRuntimeConfig(input))
171
+ return input;
172
+ const demo = optionalDemoFlag(input);
173
+ const normalized = cloneAndFreeze({
174
+ projectId: requireString(input, "projectId"),
175
+ host: requireEnum(input, "host", RUNTIME_HOSTS),
176
+ framework: requireEnum(input, "framework", RUNTIME_FRAMEWORKS),
177
+ stylingSystem: optionalString(input, "stylingSystem"),
178
+ capabilities: normalizeCapabilities(input.capabilities),
179
+ tokenCatalog: optionalArray(input, "tokenCatalog"),
180
+ tokens: optionalArray(input, "tokens"),
181
+ tokenDiagnostics: optionalArray(input, "tokenDiagnostics"),
182
+ tokenGeneration: optionalString(input, "tokenGeneration"),
183
+ componentContracts: optionalArray(input, "componentContracts"),
184
+ ...(demo === true ? { demo: true } : {}),
185
+ });
186
+ normalizedRuntimeConfigs.add(normalized);
187
+ return normalized;
188
+ }
189
+ let activeRuntimeConfig = DEFAULT_RUNTIME_CONFIG;
190
+ const runtimeListeners = new Set();
191
+ /**
192
+ * Replaces the complete runtime configuration for the active document.
193
+ *
194
+ * The input is validated and incomplete optional fields receive safe defaults
195
+ * (see `normalizeNudgeUiRuntimeConfig`). Replacement is atomic from the
196
+ * inspector's perspective. The returned snapshot owns recursively cloned and
197
+ * frozen plain data, so a host can safely replace its virtual module values
198
+ * during HMR without leaving shared Modules bound to an old transport object
199
+ * or freezing caller-owned values.
200
+ */
201
+ export function configureNudgeUiRuntime(config) {
202
+ activeRuntimeConfig = normalizeNudgeUiRuntimeConfig(config);
203
+ for (const listener of runtimeListeners) {
204
+ try {
205
+ listener();
206
+ }
207
+ catch {
208
+ // A runtime listener must not prevent the host from replacing config.
209
+ }
210
+ }
211
+ }
212
+ /** Returns the immutable runtime snapshot used by shared inspector Modules. */
213
+ export function getNudgeUiRuntimeConfig() {
214
+ return activeRuntimeConfig;
215
+ }
216
+ /**
217
+ * Whether this document runs the explicit public landing demo (ADR-0014 and
218
+ * ADR-0016). The plugin emits `demo: true` for the flagged demo route and for
219
+ * the explicit landing root in development and `nudge-demo` builds, so this is
220
+ * the precise runtime boundary of the demo — narrower than any build-mode
221
+ * name.
222
+ */
223
+ export function isDemoRuntime() {
224
+ return getNudgeUiRuntimeConfig().demo === true;
225
+ }
226
+ /**
227
+ * Returns the active host's source-coordinate policy, or null when the host
228
+ * declares none — every source site is exact in that case.
229
+ */
230
+ export function getSourceCoordinatePolicy() {
231
+ return activeRuntimeConfig.capabilities.sourceCoordinates ?? null;
232
+ }
233
+ let compiledScopingPattern = null;
234
+ /**
235
+ * Returns the active host's structural scoping-marker pattern compiled for
236
+ * global replacement, or null when the host declares none. An invalid regex
237
+ * source degrades to no stripping rather than breaking labeling.
238
+ */
239
+ export function getScopingSelectorPattern() {
240
+ const source = activeRuntimeConfig.capabilities.scopingSelectorPattern;
241
+ if (source === undefined)
242
+ return null;
243
+ if (compiledScopingPattern?.source !== source) {
244
+ try {
245
+ compiledScopingPattern = { source, pattern: new RegExp(source, "g") };
246
+ }
247
+ catch {
248
+ compiledScopingPattern = { source, pattern: null };
249
+ }
250
+ }
251
+ return compiledScopingPattern.pattern;
252
+ }
253
+ /**
254
+ * Subscribes to complete runtime replacements, such as Vite HMR updates.
255
+ * Listeners run after the new snapshot is installed.
256
+ */
257
+ export function subscribeNudgeUiRuntime(listener) {
258
+ runtimeListeners.add(listener);
259
+ return () => runtimeListeners.delete(listener);
260
+ }
261
+ /** Returns the styling-system label represented by a token inventory. */
262
+ export function detectStylingSystem(tokens) {
263
+ for (const token of tokens) {
264
+ if (token.adapter === "vanilla-extract")
265
+ return "vanilla-extract (sprinkles)";
266
+ if (token.adapter === "tailwind-v3")
267
+ return "Tailwind v3";
268
+ if (token.adapter === "tailwind-v4")
269
+ return "Tailwind v4";
270
+ }
271
+ return "CSS custom properties";
272
+ }
273
+ /** Returns a mutable container for UI controls that require array props. */
274
+ export function getNudgeUiTokenEntries() {
275
+ return [...activeRuntimeConfig.tokens];
276
+ }
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Source identity reserved for elements created by a static HTML page after
3
+ * the server's source-preserving pass has completed.
4
+ *
5
+ * The value intentionally does not match `file:line:column`. It is a
6
+ * document-local selector identity, not a claim about source location.
7
+ */
8
+ export declare const RUNTIME_UNKNOWN_SOURCE_PREFIX = "nudge-ui:unknown:";
9
+ export declare const RUNTIME_ELEMENT_CID_PREFIX = "nudge-ui-runtime-";
10
+ /** Maximum length retained for any runtime DOM evidence field. */
11
+ export declare const RUNTIME_EVIDENCE_MAX_LENGTH = 120;
12
+ /** Bounds an untrusted runtime evidence string without changing its content. */
13
+ export declare function boundRuntimeEvidence(value: string | null): string | null;
14
+ /** Normalizes rendered text before it becomes durable runtime evidence. */
15
+ export declare function normalizeRuntimeText(value: string | null): string | null;
16
+ /** Keeps a runtime tag suitable for the prompt's inline element notation. */
17
+ export declare function normalizeRuntimeTag(value: string): string;
18
+ /** Returns true for the source values generated for runtime DOM. */
19
+ export declare function isRuntimeGeneratedSource(src: string | null | undefined): boolean;
20
+ /** Returns whether this document-local element received generated identity. */
21
+ export declare function isRuntimeCreatedElement(element: Element | null | undefined): boolean;
22
+ /**
23
+ * Installs document-local identity for eligible elements that a static HTML
24
+ * application creates at runtime.
25
+ *
26
+ * The server owns source locations for the initial response. This Adapter
27
+ * only fills missing attributes, observes added subtrees, and leaves the
28
+ * author document untouched on disk. The returned function disconnects the
29
+ * observer; generated attributes remain available to managed CSS until the
30
+ * page is replaced.
31
+ */
32
+ export declare function installStaticHtmlRuntimeIdentity(doc?: Document): () => void;
@@ -0,0 +1,149 @@
1
+ /**
2
+ * Source identity reserved for elements created by a static HTML page after
3
+ * the server's source-preserving pass has completed.
4
+ *
5
+ * The value intentionally does not match `file:line:column`. It is a
6
+ * document-local selector identity, not a claim about source location.
7
+ */
8
+ export const RUNTIME_UNKNOWN_SOURCE_PREFIX = "nudge-ui:unknown:";
9
+ export const RUNTIME_ELEMENT_CID_PREFIX = "nudge-ui-runtime-";
10
+ /** Maximum length retained for any runtime DOM evidence field. */
11
+ export const RUNTIME_EVIDENCE_MAX_LENGTH = 120;
12
+ /** Bounds an untrusted runtime evidence string without changing its content. */
13
+ export function boundRuntimeEvidence(value) {
14
+ return value === null ? null : value.slice(0, RUNTIME_EVIDENCE_MAX_LENGTH);
15
+ }
16
+ /** Normalizes rendered text before it becomes durable runtime evidence. */
17
+ export function normalizeRuntimeText(value) {
18
+ if (value === null)
19
+ return null;
20
+ const normalized = value.replace(/\s+/g, " ").trim();
21
+ return normalized ? boundRuntimeEvidence(normalized) : null;
22
+ }
23
+ /** Keeps a runtime tag suitable for the prompt's inline element notation. */
24
+ export function normalizeRuntimeTag(value) {
25
+ return boundRuntimeEvidence(value.trim().toLowerCase().replace(/[^a-z0-9-]+/g, "")) ?? "";
26
+ }
27
+ const HTML_NAMESPACE = "http://www.w3.org/1999/xhtml";
28
+ const DOCUMENT_STRUCTURE_TAGS = new Set(["HTML", "HEAD", "BODY"]);
29
+ const EXCLUDED_SUBTREE_TAGS = new Set([
30
+ "SCRIPT",
31
+ "STYLE",
32
+ "TEMPLATE",
33
+ "NOSCRIPT",
34
+ ]);
35
+ const runtimeCreatedElements = new WeakSet();
36
+ /** Returns true for the source values generated for runtime DOM. */
37
+ export function isRuntimeGeneratedSource(src) {
38
+ return typeof src === "string" && src.startsWith(RUNTIME_UNKNOWN_SOURCE_PREFIX);
39
+ }
40
+ /** Returns whether this document-local element received generated identity. */
41
+ export function isRuntimeCreatedElement(element) {
42
+ return element !== null && element !== undefined && runtimeCreatedElements.has(element);
43
+ }
44
+ function isElement(node) {
45
+ return node.nodeType === 1;
46
+ }
47
+ function isEligibleElement(element) {
48
+ if (element.namespaceURI !== HTML_NAMESPACE)
49
+ return false;
50
+ if (DOCUMENT_STRUCTURE_TAGS.has(element.tagName))
51
+ return false;
52
+ let current = element;
53
+ while (current) {
54
+ if (current.namespaceURI !== HTML_NAMESPACE)
55
+ return false;
56
+ if (EXCLUDED_SUBTREE_TAGS.has(current.tagName))
57
+ return false;
58
+ if (current.id === "nudge-ui-root")
59
+ return false;
60
+ current = current.parentElement;
61
+ }
62
+ return true;
63
+ }
64
+ function existingAttributeValues(doc, name) {
65
+ return new Set(Array.from(doc.querySelectorAll(`[${name}]`))
66
+ .map((element) => element.getAttribute(name))
67
+ .filter((value) => value !== null));
68
+ }
69
+ /**
70
+ * Installs document-local identity for eligible elements that a static HTML
71
+ * application creates at runtime.
72
+ *
73
+ * The server owns source locations for the initial response. This Adapter
74
+ * only fills missing attributes, observes added subtrees, and leaves the
75
+ * author document untouched on disk. The returned function disconnects the
76
+ * observer; generated attributes remain available to managed CSS until the
77
+ * page is replaced.
78
+ */
79
+ export function installStaticHtmlRuntimeIdentity(doc = document) {
80
+ const usedCids = existingAttributeValues(doc, "data-cid");
81
+ const usedSources = existingAttributeValues(doc, "data-src");
82
+ let nextId = 1;
83
+ let disposed = false;
84
+ function nextIdentity() {
85
+ while (true) {
86
+ const id = nextId++;
87
+ const cid = `${RUNTIME_ELEMENT_CID_PREFIX}${id}`;
88
+ const src = `${RUNTIME_UNKNOWN_SOURCE_PREFIX}${id}`;
89
+ if (usedCids.has(cid) || usedSources.has(src))
90
+ continue;
91
+ usedCids.add(cid);
92
+ usedSources.add(src);
93
+ return { cid, src };
94
+ }
95
+ }
96
+ function ensureIdentity(element) {
97
+ if (!isEligibleElement(element))
98
+ return;
99
+ const needsCid = element.getAttribute("data-cid") === null;
100
+ const needsSource = element.getAttribute("data-src") === null;
101
+ if (!needsCid && !needsSource)
102
+ return;
103
+ const identity = nextIdentity();
104
+ if (needsCid)
105
+ element.setAttribute("data-cid", identity.cid);
106
+ if (needsSource)
107
+ element.setAttribute("data-src", identity.src);
108
+ runtimeCreatedElements.add(element);
109
+ }
110
+ function scanSubtree(node) {
111
+ if (disposed)
112
+ return;
113
+ if (isElement(node)) {
114
+ ensureIdentity(node);
115
+ for (const descendant of Array.from(node.querySelectorAll("*"))) {
116
+ ensureIdentity(descendant);
117
+ }
118
+ return;
119
+ }
120
+ if (node.nodeType === 11) {
121
+ // SAFETY: nodeType 11 is DOCUMENT_FRAGMENT_NODE, so the node is a DocumentFragment by the DOM spec.
122
+ for (const descendant of Array.from(node.querySelectorAll("*"))) {
123
+ ensureIdentity(descendant);
124
+ }
125
+ }
126
+ }
127
+ const scanRoot = doc.body ?? doc.documentElement;
128
+ if (scanRoot)
129
+ scanSubtree(scanRoot);
130
+ const MutationObserverConstructor = doc.defaultView?.MutationObserver ?? globalThis.MutationObserver;
131
+ if (!MutationObserverConstructor || !doc.documentElement) {
132
+ return () => {
133
+ disposed = true;
134
+ };
135
+ }
136
+ const observer = new MutationObserverConstructor((records) => {
137
+ for (const record of records) {
138
+ for (const node of Array.from(record.addedNodes))
139
+ scanSubtree(node);
140
+ }
141
+ });
142
+ observer.observe(doc.documentElement, { childList: true, subtree: true });
143
+ return () => {
144
+ if (disposed)
145
+ return;
146
+ disposed = true;
147
+ observer.disconnect();
148
+ };
149
+ }
@@ -0,0 +1,10 @@
1
+ import type { NudgeUiRuntimeConfig } from "./runtimeConfig.js";
2
+ /**
3
+ * Reads the immutable runtime snapshot reactively.
4
+ *
5
+ * Components that render runtime-derived UI (token catalogs, capability
6
+ * gating) must use this hook instead of the plain getter, so a host that
7
+ * atomically replaces the configuration during HMR or a dev-transport
8
+ * refresh re-renders the subscribed tree with the new snapshot.
9
+ */
10
+ export declare function useNudgeUiRuntimeConfig(): NudgeUiRuntimeConfig;
@@ -0,0 +1,13 @@
1
+ import { useSyncExternalStore } from "react";
2
+ import { getNudgeUiRuntimeConfig, subscribeNudgeUiRuntime, } from "./runtimeConfig.js";
3
+ /**
4
+ * Reads the immutable runtime snapshot reactively.
5
+ *
6
+ * Components that render runtime-derived UI (token catalogs, capability
7
+ * gating) must use this hook instead of the plain getter, so a host that
8
+ * atomically replaces the configuration during HMR or a dev-transport
9
+ * refresh re-renders the subscribed tree with the new snapshot.
10
+ */
11
+ export function useNudgeUiRuntimeConfig() {
12
+ return useSyncExternalStore(subscribeNudgeUiRuntime, getNudgeUiRuntimeConfig);
13
+ }
@@ -0,0 +1,32 @@
1
+ import type { EditScope } from "../editScope.js";
2
+ import type { RenderedInstanceOverride } from "../changes/editModel.js";
3
+ export { sourceSiteSelector } from "./sourceSite.js";
4
+ export type { EditScope };
5
+ export interface InstanceEvidence {
6
+ renderedIndex: number;
7
+ props: string | null;
8
+ text: string | null;
9
+ ariaLabel: string | null;
10
+ }
11
+ /** Test hook: clears the memoized source-site match counts. */
12
+ export declare function resetSourceSiteMatchCounts(): void;
13
+ /**
14
+ * Counts the rendered elements matching a source site. The result is memoized
15
+ * per (element identity, scope revision) so the selection render path no longer
16
+ * runs a full-document querySelectorAll on every render; it only recomputes
17
+ * when the caller's scope revision changes.
18
+ */
19
+ export declare function countSourceSiteMatches(el: HTMLElement, revision?: number): number;
20
+ export declare function unlinkElement(el: HTMLElement): string | null;
21
+ export declare function relinkElement(el: HTMLElement): string | null;
22
+ export declare function getEditScope(el: HTMLElement): EditScope;
23
+ export interface BatchScopeFields {
24
+ scope: EditScope;
25
+ instanceOverride?: RenderedInstanceOverride;
26
+ }
27
+ /** Returns whether every element can be addressed safely by one batch edit. */
28
+ export declare function canPlanBatchEditScopes(selectedElements: readonly HTMLElement[]): boolean;
29
+ /** Resolves safe scopes immediately before a write is committed. */
30
+ export declare function planBatchEditScopes(selectedElements: readonly HTMLElement[]): ReadonlyMap<HTMLElement, BatchScopeFields> | null;
31
+ export declare function selectorForElement(el: HTMLElement): string | null;
32
+ export declare function getInstanceEvidence(el: HTMLElement): InstanceEvidence;