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,391 @@
1
+ import { isComponentChange, isElementChange, isTextContentChange, isTokenChange } from "../changes/changesLog.js";
2
+ import { canonicalizeChanges, changeKey, tokenReference } from "../changes/model.js";
3
+ import { getAnyPreviewDiagnostic } from "../changes/previewDiagnostics.js";
4
+ import { formatComponentPropBaseline, formatComponentPropValue, } from "../componentSemantics/changeModel.js";
5
+ import { boundRuntimeEvidence, isRuntimeGeneratedSource, normalizeRuntimeTag, normalizeRuntimeText, } from "../runtime/staticHtmlRuntimeIdentity.js";
6
+ import { getSourceCoordinatePolicy } from "../runtime/runtimeConfig.js";
7
+ import { DEFAULT_CUSTOM_INSTRUCTIONS } from "./promptSettings.js";
8
+ const EMPTY_SENTINEL = "<!-- No changes to export -->\n\nThe changes log is empty. Make a change in the Nudge UI inspector first.";
9
+ function renderPrompt(sections, customInstructions) {
10
+ const lines = [
11
+ "# Requested design changes",
12
+ ];
13
+ for (const section of sections) {
14
+ const content = [...section.lines];
15
+ while (content.at(-1) === "")
16
+ content.pop();
17
+ lines.push("", `## ${section.heading}`, "", ...content);
18
+ }
19
+ const instructions = customInstructions.trim();
20
+ if (instructions) {
21
+ lines.push("", "## Custom instructions", "", instructions);
22
+ }
23
+ return lines.join("\n");
24
+ }
25
+ function groupElementChanges(changes) {
26
+ const map = new Map();
27
+ for (const change of changes) {
28
+ const instanceOverride = change.scope === "rendered-instance" ? change.instanceOverride : undefined;
29
+ const key = [
30
+ change.cid,
31
+ change.file,
32
+ change.line,
33
+ change.selector,
34
+ change.scope ?? "source-site",
35
+ instanceOverride?.id ?? "",
36
+ instanceOverride ? JSON.stringify(instanceOverride.target) : "",
37
+ change.state ?? "base",
38
+ ].join("\u0000");
39
+ let group = map.get(key);
40
+ if (!group) {
41
+ group = {
42
+ key,
43
+ cid: change.cid,
44
+ file: change.file,
45
+ line: change.source.line || change.line,
46
+ column: change.column ?? 0,
47
+ runtimeEvidence: change.runtimeEvidence,
48
+ instanceOverride,
49
+ changes: [],
50
+ };
51
+ map.set(key, group);
52
+ }
53
+ group.changes.push(change);
54
+ }
55
+ return [...map.values()];
56
+ }
57
+ function conflictSuffix(rec) {
58
+ const result = getAnyPreviewDiagnostic(changeKey(rec))?.result;
59
+ if (!result || result.status === "applied")
60
+ return "";
61
+ return ` — preview conflict: browser computed \`${result.computedValue || "(no value)"}\` (${result.reason ?? "cascade conflict"}); implement the requested value without assuming \`!important\``;
62
+ }
63
+ function elementChangeLine(rec) {
64
+ if (rec.newToken && rec.oldToken) {
65
+ return `- \`${rec.property}\`: \`${rec.oldToken.name}\` → \`${rec.newToken.name}\`${conflictSuffix(rec)}`;
66
+ }
67
+ if (rec.newToken) {
68
+ const before = rec.oldRawValue !== undefined ? `\`${rec.oldRawValue}\` → ` : "";
69
+ // Describe exactly the value the managed stylesheet wrote for this swap
70
+ // (adapter literal or var(cssName)); a bare var(name) would be invalid
71
+ // CSS for adapter tokens whose names are not custom-property names.
72
+ return `- \`${rec.property}\`: ${before}\`${tokenReference(rec.newToken)}\`${conflictSuffix(rec)}`;
73
+ }
74
+ if (rec.rawValue !== undefined) {
75
+ const before = rec.oldRawValue !== undefined ? `\`${rec.oldRawValue}\` → ` : "";
76
+ return `- \`${rec.property}\`: ${before}\`${rec.rawValue}\`${conflictSuffix(rec)}`;
77
+ }
78
+ return `- \`${rec.property}\`: (no value)`;
79
+ }
80
+ function sourceIntentLine(rec) {
81
+ if (!rec.sourceProperty || rec.sourceProperty === rec.property)
82
+ return null;
83
+ const authored = rec.sourceAuthoredValue ? `: ${rec.sourceAuthoredValue}` : "";
84
+ return ` - Source declaration (CSSOM): \`${rec.sourceProperty}${authored}\`; preview edit uses physical \`${rec.property}\``;
85
+ }
86
+ function tokenChangeLine(rec) {
87
+ return `- \`${rec.tokenName}\` (${rec.contextLabel}, ${rec.file}:${rec.line}): \`${rec.oldRawValue}\` → \`${rec.rawValue}\`${conflictSuffix(rec)}`;
88
+ }
89
+ function componentChangeLine(rec) {
90
+ const sourceGuidance = rec.authoredAs === "literal"
91
+ ? rec.property === "children"
92
+ ? "replace the literal child text"
93
+ : "replace the invocation prop literal"
94
+ : rec.authoredAs === "default"
95
+ ? "add the prop at this invocation"
96
+ : `preserve the authored ${rec.authoredAs} and update its source logic`;
97
+ const scope = rec.scope === "rendered-instance"
98
+ ? "this rendered item only"
99
+ : "all outputs at this source site";
100
+ return `- \`${rec.property}\`: \`${formatComponentPropBaseline(rec.before)}\` → \`${formatComponentPropValue(rec.after)}\` — ${sourceGuidance}; scope: ${scope}`;
101
+ }
102
+ function textAuthorshipGuidance(authoredAs) {
103
+ if (authoredAs === "literal")
104
+ return "replace the authored literal text";
105
+ if (authoredAs === "expression")
106
+ return "preserve the expression and update its source logic";
107
+ return "update the source that produces this rendered copy";
108
+ }
109
+ /** Keep arbitrary rendered copy valid inside the Markdown prompt. */
110
+ function promptText(value) {
111
+ if (!/[`~\r\n]/.test(value))
112
+ return `\`${value}\``;
113
+ const longestTildeRun = Math.max(...(value.match(/~+/g) ?? [""]).map((run) => run.length));
114
+ const fence = "~".repeat(Math.max(3, longestTildeRun + 1));
115
+ return `${fence}text\n${value}\n${fence}`;
116
+ }
117
+ function textEvidenceLines(target) {
118
+ const sourceLabel = isRuntimeGeneratedSource(target.sourceSite.src)
119
+ ? `${target.sourceSite.cid} (source unknown; runtime-created DOM)`
120
+ : `${target.sourceSite.cid} (\`${target.sourceSite.src}\`)`;
121
+ const lines = [
122
+ ` - Source site: ${sourceLabel}`,
123
+ ];
124
+ const props = boundRuntimeEvidence(target.props);
125
+ const ariaLabel = boundRuntimeEvidence(target.ariaLabel);
126
+ if (props)
127
+ lines.push(` - Props evidence: ${promptText(props)}`);
128
+ if (ariaLabel)
129
+ lines.push(` - Accessible name evidence: ${promptText(ariaLabel)}`);
130
+ return lines;
131
+ }
132
+ function textScopeLines(change) {
133
+ const scope = change.scope === "source-site" ? "source site / all outputs" : "this rendered item only";
134
+ const lines = [` - Scope: ${scope}`];
135
+ if (change.evidence) {
136
+ lines.push(` - Semantic evidence: \`${change.evidence.componentName}.${change.evidence.property}\` at callsite \`${change.evidence.callsiteId}\` (${change.evidence.mountedCount} mounted outputs)`);
137
+ }
138
+ return lines;
139
+ }
140
+ function boundedEvidence(value) {
141
+ return boundRuntimeEvidence(value);
142
+ }
143
+ function sourceSiteLabel(ref) {
144
+ if (isRuntimeGeneratedSource(ref.sourceSite.src)) {
145
+ return `${ref.sourceSite.cid} (source unknown; runtime-created DOM)`;
146
+ }
147
+ return `${ref.sourceSite.cid} (${ref.sourceSite.src})`;
148
+ }
149
+ /** Compare durable rendered-instance identity without child-text evidence. */
150
+ function structuralParentIdentityKey(ref) {
151
+ const { sourceSite, locator } = ref;
152
+ return JSON.stringify([
153
+ sourceSite.cid,
154
+ sourceSite.src,
155
+ locator.occurrence,
156
+ locator.props,
157
+ locator.ariaLabel ?? null,
158
+ ]);
159
+ }
160
+ function runtimeEvidenceLines(group) {
161
+ const evidence = group.runtimeEvidence;
162
+ if (!evidence)
163
+ return [];
164
+ const tagName = normalizeRuntimeTag(evidence.tagName) || "unknown";
165
+ const text = normalizeRuntimeText(evidence.text);
166
+ const ariaLabel = boundRuntimeEvidence(evidence.ariaLabel);
167
+ const props = boundRuntimeEvidence(evidence.props);
168
+ const lines = [
169
+ " - Source: unknown; locate the JavaScript or template that creates this runtime DOM.",
170
+ ` - Rendered element: \`<${tagName}>\``,
171
+ ];
172
+ if (text)
173
+ lines.push(` - Text evidence: ${promptText(text)}`);
174
+ if (ariaLabel)
175
+ lines.push(` - Accessible name evidence: ${promptText(ariaLabel)}`);
176
+ if (props)
177
+ lines.push(` - Props evidence: ${promptText(props)}`);
178
+ return lines;
179
+ }
180
+ /**
181
+ * Coordinate precision follows each element's identity origin, not the
182
+ * document's framework hint (ADR-0011 Stage 5). The active host Adapter
183
+ * declares which origins carry exact authored coordinates through the
184
+ * runtime configuration; hosts that declare nothing are exact everywhere.
185
+ */
186
+ function hasExactAuthoredCoordinates(policy, cid, file) {
187
+ if (policy === null)
188
+ return true;
189
+ if (cid !== undefined && policy.exactCidPrefixes.some((prefix) => cid.startsWith(prefix))) {
190
+ return true;
191
+ }
192
+ return policy.exactFileExtensions.some((extension) => file.endsWith(extension));
193
+ }
194
+ /**
195
+ * Formats one source location for a prompt heading. Exact origins keep the
196
+ * authored column; line-only origins — and sites whose column is unknown —
197
+ * degrade to `file:line` rather than fabricating precision.
198
+ */
199
+ function formatSourceLocation(policy, source) {
200
+ if (hasExactAuthoredCoordinates(policy, source.cid, source.file) && source.column > 0) {
201
+ return `${source.file}:${source.line}:${source.column}`;
202
+ }
203
+ return `${source.file}:${source.line}`;
204
+ }
205
+ function elementGroupSource(group, policy) {
206
+ if (group.runtimeEvidence) {
207
+ return group.runtimeEvidence.reason === "unannotated"
208
+ ? "source unknown; no authored location available"
209
+ : "source unknown; runtime-created DOM";
210
+ }
211
+ return formatSourceLocation(policy, group);
212
+ }
213
+ function renderedInstanceDescription(ref) {
214
+ const text = boundedEvidence(ref.locator.text);
215
+ const ariaLabel = boundedEvidence(ref.locator.ariaLabel ?? null);
216
+ const props = boundedEvidence(ref.locator.props);
217
+ const source = isRuntimeGeneratedSource(ref.sourceSite.src)
218
+ ? sourceSiteLabel(ref)
219
+ : ref.sourceSite.src;
220
+ if (text)
221
+ return `text ${promptText(text)} (${source})`;
222
+ if (ariaLabel)
223
+ return `the element named ${promptText(ariaLabel)} (${source})`;
224
+ if (props)
225
+ return `the element with props ${promptText(props)} (${source})`;
226
+ // With no semantic evidence, the ordinal is the only way to distinguish
227
+ // repeated outputs from the same source site.
228
+ return `rendered instance ${ref.locator.occurrence + 1} of ${sourceSiteLabel(ref)}`;
229
+ }
230
+ function structuralChangeLine(change) {
231
+ const target = renderedInstanceDescription(change.target);
232
+ if (change.kind === "delete") {
233
+ return `- Remove ${target} from the source.`;
234
+ }
235
+ const before = change.destination.before;
236
+ const sourceParent = sourceSiteLabel(change.source.parent);
237
+ const destinationParent = sourceSiteLabel(change.destination.parent);
238
+ if (structuralParentIdentityKey(change.source.parent) !== structuralParentIdentityKey(change.destination.parent)) {
239
+ return before
240
+ ? `- Move ${target} from ${sourceParent} into ${destinationParent}, before ${renderedInstanceDescription(before)}.`
241
+ : `- Move ${target} from ${sourceParent} into ${destinationParent}, at the end.`;
242
+ }
243
+ return before
244
+ ? `- Move ${target} before ${renderedInstanceDescription(before)} in ${destinationParent}.`
245
+ : `- Move ${target} to the end of ${destinationParent}.`;
246
+ }
247
+ function renderedInstanceKey(ref) {
248
+ const { sourceSite, locator } = ref;
249
+ return JSON.stringify([
250
+ sourceSite.cid,
251
+ sourceSite.src,
252
+ locator.props,
253
+ locator.text,
254
+ locator.ariaLabel ?? null,
255
+ ]);
256
+ }
257
+ /** Export final intent, not the gesture history required to replay the preview. */
258
+ function canonicalizeStructuralChanges(changes) {
259
+ const historyByTarget = new Map();
260
+ changes.forEach((change, index) => {
261
+ const targetKey = renderedInstanceKey(change.target);
262
+ const history = historyByTarget.get(targetKey) ?? { changes: [], lastIndex: index };
263
+ history.changes.push(change);
264
+ history.lastIndex = index;
265
+ historyByTarget.set(targetKey, history);
266
+ });
267
+ const canonical = [];
268
+ const histories = [...historyByTarget.entries()]
269
+ .sort(([, a], [, b]) => a.lastIndex - b.lastIndex);
270
+ for (const [targetKey, history] of histories) {
271
+ const latest = history.changes.at(-1);
272
+ if (latest.kind === "delete") {
273
+ canonical.push(latest);
274
+ continue;
275
+ }
276
+ const moves = history.changes.filter((change) => change.kind === "move");
277
+ const first = moves[0];
278
+ const onlyTargetMoves = changes.every((candidate) => candidate.kind === "move"
279
+ && renderedInstanceKey(candidate.target) === targetKey);
280
+ const returnedToStart = moves.length > 1
281
+ && onlyTargetMoves
282
+ && first
283
+ && structuralParentIdentityKey(first.source.parent) === structuralParentIdentityKey(latest.destination.parent)
284
+ && first.presentation.fromIndex === latest.presentation.toIndex;
285
+ if (returnedToStart)
286
+ continue;
287
+ // The final destination is the useful handoff. Keep the first source
288
+ // context when the gesture crossed intermediate containers so the prompt
289
+ // describes the authored move rather than the drag history.
290
+ if (first && first !== latest && latest.kind === "move") {
291
+ canonical.push({
292
+ ...latest,
293
+ source: first.source,
294
+ presentation: {
295
+ ...latest.presentation,
296
+ sourceParentTag: first.presentation.sourceParentTag,
297
+ fromIndex: first.presentation.fromIndex,
298
+ },
299
+ });
300
+ }
301
+ else {
302
+ canonical.push(latest);
303
+ }
304
+ }
305
+ return canonical;
306
+ }
307
+ export function generatePrompt(changes, frameworkHints, structuralChanges = [], customInstructions = DEFAULT_CUSTOM_INSTRUCTIONS) {
308
+ const deduplicated = canonicalizeChanges(changes);
309
+ const structuralIntent = canonicalizeStructuralChanges(structuralChanges);
310
+ if (deduplicated.length === 0 && structuralIntent.length === 0)
311
+ return EMPTY_SENTINEL;
312
+ const tokenChanges = deduplicated.filter(isTokenChange);
313
+ const componentChanges = deduplicated.filter(isComponentChange);
314
+ const textChanges = deduplicated.filter(isTextContentChange);
315
+ const elementChanges = deduplicated.filter(isElementChange);
316
+ const elementGroups = groupElementChanges(elementChanges);
317
+ const coordinatePolicy = getSourceCoordinatePolicy();
318
+ const sections = [];
319
+ if (tokenChanges.length > 0) {
320
+ sections.push({
321
+ heading: "Global token changes",
322
+ lines: tokenChanges.map(tokenChangeLine),
323
+ });
324
+ }
325
+ if (componentChanges.length > 0) {
326
+ const lines = [];
327
+ for (const change of componentChanges) {
328
+ const target = change.target;
329
+ const source = formatSourceLocation(coordinatePolicy, target);
330
+ lines.push(`### ${target.componentName} invocation (${source})`);
331
+ lines.push(componentChangeLine(change));
332
+ lines.push(` - Component contract: \`${target.componentId}\``);
333
+ if (change.evidence) {
334
+ lines.push(` - Rendered evidence: ${change.evidence.mountedCount} mounted outputs`);
335
+ if (change.evidence.props)
336
+ lines.push(` - Props evidence: ${promptText(boundedEvidence(change.evidence.props) ?? "")}`);
337
+ if (change.evidence.ariaLabel)
338
+ lines.push(` - Accessible name evidence: ${promptText(boundedEvidence(change.evidence.ariaLabel) ?? "")}`);
339
+ lines.push(` - Before text: ${promptText(change.evidence.beforeText)}`);
340
+ }
341
+ lines.push("");
342
+ }
343
+ sections.push({ heading: "Component prop changes", lines });
344
+ }
345
+ if (elementGroups.length > 0) {
346
+ const lines = [];
347
+ for (const group of elementGroups) {
348
+ const state = group.changes[0]?.state ?? "base";
349
+ lines.push(`### ${group.cid} (${elementGroupSource(group, coordinatePolicy)}) · ${state}`);
350
+ if (group.instanceOverride) {
351
+ lines.push(`- Applies only to ${renderedInstanceDescription(group.instanceOverride.target)}.`);
352
+ }
353
+ lines.push(...runtimeEvidenceLines(group));
354
+ for (const change of group.changes) {
355
+ lines.push(elementChangeLine(change));
356
+ const intent = sourceIntentLine(change);
357
+ if (intent)
358
+ lines.push(intent);
359
+ }
360
+ lines.push("");
361
+ }
362
+ sections.push({ heading: "Changes", lines });
363
+ }
364
+ if (textChanges.length > 0) {
365
+ const lines = [];
366
+ for (const change of textChanges) {
367
+ const runtimeCreated = isRuntimeGeneratedSource(change.target.sourceSite.src);
368
+ const textSource = runtimeCreated
369
+ ? "source unknown; runtime-created DOM"
370
+ : formatSourceLocation(coordinatePolicy, {
371
+ cid: change.target.sourceSite.cid,
372
+ file: change.source.file,
373
+ line: change.source.line,
374
+ column: change.source.column,
375
+ });
376
+ lines.push(`### ${change.source.component || change.target.sourceSite.cid} (${textSource})`);
377
+ lines.push(`- Rendered text: ${promptText(change.before)} → ${promptText(change.after)} — ${textAuthorshipGuidance(change.authoredAs)}`);
378
+ lines.push(...textScopeLines(change));
379
+ lines.push(...textEvidenceLines(change.target));
380
+ lines.push("");
381
+ }
382
+ sections.push({ heading: "Rendered text changes", lines });
383
+ }
384
+ if (structuralIntent.length > 0) {
385
+ sections.push({
386
+ heading: "Structural changes",
387
+ lines: structuralIntent.map(structuralChangeLine),
388
+ });
389
+ }
390
+ return renderPrompt(sections, customInstructions);
391
+ }
@@ -0,0 +1,8 @@
1
+ /** The default guidance included in every generated prompt. */
2
+ export declare const DEFAULT_CUSTOM_INSTRUCTIONS = "Preserve existing tokens, logical properties, and CSS intent while applying these rendered changes.";
3
+ declare function storageKey(projectId: string): string;
4
+ /** Reads the project-scoped custom prompt instructions from browser storage. */
5
+ export declare function loadCustomInstructions(projectId: string): string;
6
+ /** Persists custom prompt instructions without making storage availability a prerequisite for editing. */
7
+ export declare function saveCustomInstructions(projectId: string, instructions: string): void;
8
+ export { storageKey as promptSettingsStorageKey };
@@ -0,0 +1,28 @@
1
+ /** The default guidance included in every generated prompt. */
2
+ export const DEFAULT_CUSTOM_INSTRUCTIONS = "Preserve existing tokens, logical properties, and CSS intent while applying these rendered changes.";
3
+ function storageKey(projectId) {
4
+ return `nudge-ui:${projectId}:prompt-settings`;
5
+ }
6
+ /** Reads the project-scoped custom prompt instructions from browser storage. */
7
+ export function loadCustomInstructions(projectId) {
8
+ if (typeof localStorage === "undefined")
9
+ return DEFAULT_CUSTOM_INSTRUCTIONS;
10
+ try {
11
+ return localStorage.getItem(storageKey(projectId)) ?? DEFAULT_CUSTOM_INSTRUCTIONS;
12
+ }
13
+ catch {
14
+ return DEFAULT_CUSTOM_INSTRUCTIONS;
15
+ }
16
+ }
17
+ /** Persists custom prompt instructions without making storage availability a prerequisite for editing. */
18
+ export function saveCustomInstructions(projectId, instructions) {
19
+ if (typeof localStorage === "undefined")
20
+ return;
21
+ try {
22
+ localStorage.setItem(storageKey(projectId), instructions);
23
+ }
24
+ catch {
25
+ // Storage can be disabled or full; the in-memory UI state still applies.
26
+ }
27
+ }
28
+ export { storageKey as promptSettingsStorageKey };
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Decides the shared dev gate from one bundler observation and one host
3
+ * observation. Pure so every precedence rule is unit-testable without a
4
+ * particular bundler present.
5
+ *
6
+ * Precedence: an explicit host flag wins (a compiler without a define must
7
+ * still be authoritative); otherwise the bundler define decides; with neither,
8
+ * development is assumed absent — the gate fails closed rather than guessing.
9
+ */
10
+ export declare function resolveNudgeUiDev(bundlerDefinedDev: boolean | undefined, hostFlag: boolean | undefined): boolean;
11
+ /**
12
+ * Records whether the host Adapter is running a development server (ADR-0002).
13
+ *
14
+ * Vite and the standalone esbuild pipeline statically replace
15
+ * `import.meta.env.DEV`, so their bundles need no runtime flag. Hosts whose
16
+ * compiler cannot supply that define — Next.js/SWC has no equivalent of Vite's
17
+ * `define` for `import.meta.env` — must call this before bootstrapping the
18
+ * inspector. Passing `undefined` clears the override and restores the static
19
+ * define as the sole authority.
20
+ *
21
+ * The flag is process-global state by design: every inspector Module shares
22
+ * one dev gate, and a host configures it once per document, not per Module.
23
+ */
24
+ export declare function setNudgeUiHostDevFlag(value: boolean | undefined): void;
25
+ /**
26
+ * Dev-phase gate shared by every inspector Module (ADR-0002).
27
+ */
28
+ export declare function isNudgeUiDev(): boolean;
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Decides the shared dev gate from one bundler observation and one host
3
+ * observation. Pure so every precedence rule is unit-testable without a
4
+ * particular bundler present.
5
+ *
6
+ * Precedence: an explicit host flag wins (a compiler without a define must
7
+ * still be authoritative); otherwise the bundler define decides; with neither,
8
+ * development is assumed absent — the gate fails closed rather than guessing.
9
+ */
10
+ export function resolveNudgeUiDev(bundlerDefinedDev, hostFlag) {
11
+ if (hostFlag !== undefined)
12
+ return hostFlag;
13
+ if (bundlerDefinedDev !== undefined)
14
+ return bundlerDefinedDev;
15
+ return false;
16
+ }
17
+ let hostDevFlag;
18
+ /**
19
+ * Records whether the host Adapter is running a development server (ADR-0002).
20
+ *
21
+ * Vite and the standalone esbuild pipeline statically replace
22
+ * `import.meta.env.DEV`, so their bundles need no runtime flag. Hosts whose
23
+ * compiler cannot supply that define — Next.js/SWC has no equivalent of Vite's
24
+ * `define` for `import.meta.env` — must call this before bootstrapping the
25
+ * inspector. Passing `undefined` clears the override and restores the static
26
+ * define as the sole authority.
27
+ *
28
+ * The flag is process-global state by design: every inspector Module shares
29
+ * one dev gate, and a host configures it once per document, not per Module.
30
+ */
31
+ export function setNudgeUiHostDevFlag(value) {
32
+ hostDevFlag = value;
33
+ }
34
+ /**
35
+ * Dev-phase gate shared by every inspector Module (ADR-0002).
36
+ */
37
+ export function isNudgeUiDev() {
38
+ try {
39
+ // Under Vite (and the standalone esbuild build) this member expression is
40
+ // statically replaced, so the read cannot throw there. In a bundle whose
41
+ // compiler defines nothing — Next.js/SWC — `import.meta.env` is undefined
42
+ // and the bare property read throws a TypeError. A build-mode name (such
43
+ // as the landing demo's `nudge-demo`) must never widen this gate; the
44
+ // demo runtime opens it for its own document instead (ADR-0014).
45
+ return resolveNudgeUiDev(import.meta.env.DEV === true, hostDevFlag);
46
+ }
47
+ catch {
48
+ return resolveNudgeUiDev(undefined, hostDevFlag);
49
+ }
50
+ }
@@ -0,0 +1,19 @@
1
+ import type { TokenCatalogDiagnostic, TokenDefinition } from "../../css/model/index.js";
2
+ import type { NudgeUiRuntimeConfig } from "./runtimeConfig.js";
3
+ /** Evidence collected from the browser's current stylesheet order. */
4
+ export interface DocumentStylesheetOrderEvidence {
5
+ readonly projectPaths: readonly string[];
6
+ /** False when a sheet is cross-origin, inline, unloaded, or duplicated. */
7
+ readonly complete: boolean;
8
+ }
9
+ /** Reads same-origin stylesheet order without making directory order authoritative. */
10
+ export declare function collectDocumentStylesheetOrder(document: Document): DocumentStylesheetOrderEvidence;
11
+ /** Token catalog plus diagnostics produced by document-order reconciliation. */
12
+ export interface DocumentTokenCatalogReconciliation {
13
+ readonly catalog: readonly TokenDefinition[];
14
+ readonly diagnostics: readonly TokenCatalogDiagnostic[];
15
+ }
16
+ /** Reorders duplicate declarations only when browser order evidence is complete. */
17
+ export declare function reconcileDocumentTokenCatalog(catalog: readonly TokenDefinition[], evidence: DocumentStylesheetOrderEvidence): DocumentTokenCatalogReconciliation;
18
+ /** Applies browser stylesheet evidence to a host runtime before bootstrap. */
19
+ export declare function reconcileRuntimeWithDocumentStylesheets(runtime: NudgeUiRuntimeConfig, document: Document): NudgeUiRuntimeConfig;
@@ -0,0 +1,89 @@
1
+ /** Reads same-origin stylesheet order without making directory order authoritative. */
2
+ export function collectDocumentStylesheetOrder(document) {
3
+ const projectPaths = [];
4
+ let complete = true;
5
+ for (let index = 0; index < document.styleSheets.length; index += 1) {
6
+ // SAFETY: CSSStyleSheetList.item() returns a CSSStyleSheet or null.
7
+ const sheet = document.styleSheets.item(index);
8
+ if (!sheet)
9
+ continue;
10
+ try {
11
+ void sheet.cssRules;
12
+ }
13
+ catch {
14
+ complete = false;
15
+ continue;
16
+ }
17
+ const projectPath = stylesheetProjectPath(sheet.href, document);
18
+ if (!projectPath || projectPaths.includes(projectPath)) {
19
+ complete = false;
20
+ continue;
21
+ }
22
+ projectPaths.push(projectPath);
23
+ }
24
+ return { projectPaths, complete };
25
+ }
26
+ /** Reorders duplicate declarations only when browser order evidence is complete. */
27
+ export function reconcileDocumentTokenCatalog(catalog, evidence) {
28
+ const ranks = new Map(evidence.projectPaths.map((path, index) => [path, index]));
29
+ const stride = Math.max(1, ...catalog.map((definition) => definition.declarations.length)) + 1;
30
+ const diagnostics = [];
31
+ const resolved = catalog.map((definition) => {
32
+ if (definition.declarations.length < 2)
33
+ return definition;
34
+ const declarations = definition.declarations.map((declaration, index) => {
35
+ const path = sourcePath(declaration);
36
+ return { declaration, index, path, rank: ranks.get(path) };
37
+ });
38
+ if (!evidence.complete || declarations.some((entry) => entry.rank === undefined)) {
39
+ diagnostics.push({
40
+ code: "token-order-unresolved",
41
+ message: `Kept ${definition.declarations.length} declarations of "${declarationName(definition)}" in discovery order because browser stylesheet order evidence was incomplete.`,
42
+ module: declarations.find((entry) => entry.rank === undefined)?.path || "document-css",
43
+ });
44
+ return definition;
45
+ }
46
+ // The incomplete-rank branch returned above, so these fallbacks are unreachable.
47
+ declarations.sort((left, right) => (left.rank ?? 0) - (right.rank ?? 0) || left.index - right.index);
48
+ return {
49
+ ...definition,
50
+ declarations: declarations.map(({ declaration, rank }, index) => ({
51
+ ...declaration,
52
+ order: (rank ?? 0) * stride + index,
53
+ })),
54
+ };
55
+ });
56
+ const changed = resolved.some((definition, index) => definition !== catalog[index]);
57
+ return { catalog: changed ? resolved : catalog, diagnostics };
58
+ }
59
+ /** Applies browser stylesheet evidence to a host runtime before bootstrap. */
60
+ export function reconcileRuntimeWithDocumentStylesheets(runtime, document) {
61
+ const { catalog: tokenCatalog, diagnostics } = reconcileDocumentTokenCatalog(runtime.tokenCatalog, collectDocumentStylesheetOrder(document));
62
+ const tokenDiagnostics = diagnostics.length === 0
63
+ ? runtime.tokenDiagnostics
64
+ : [...runtime.tokenDiagnostics, ...diagnostics];
65
+ return tokenCatalog === runtime.tokenCatalog && tokenDiagnostics === runtime.tokenDiagnostics
66
+ ? runtime
67
+ : { ...runtime, tokenCatalog, tokenDiagnostics };
68
+ }
69
+ function sourcePath(declaration) {
70
+ const match = declaration.source.match(/^(.*):\d+$/);
71
+ return match?.[1] ?? "";
72
+ }
73
+ function declarationName(definition) {
74
+ return definition.cssName || definition.name;
75
+ }
76
+ function stylesheetProjectPath(href, document) {
77
+ if (!href)
78
+ return null;
79
+ try {
80
+ const url = new URL(href, document.baseURI);
81
+ const origin = document.defaultView?.location.origin;
82
+ if (origin && url.origin !== origin)
83
+ return null;
84
+ return decodeURIComponent(url.pathname).replace(/^\/+/, "");
85
+ }
86
+ catch {
87
+ return null;
88
+ }
89
+ }
@@ -0,0 +1,4 @@
1
+ /** DOM operations for elements that may belong to a same-origin Canvas frame. */
2
+ export declare function getElementWindow(element: Element): Window;
3
+ export declare function getElementComputedStyle(element: Element): CSSStyleDeclaration;
4
+ export declare function isShadowRootInDocument(root: Node, doc: Document): root is ShadowRoot;
@@ -0,0 +1,11 @@
1
+ /** DOM operations for elements that may belong to a same-origin Canvas frame. */
2
+ export function getElementWindow(element) {
3
+ return element.ownerDocument.defaultView ?? window;
4
+ }
5
+ export function getElementComputedStyle(element) {
6
+ return getElementWindow(element).getComputedStyle(element);
7
+ }
8
+ export function isShadowRootInDocument(root, doc) {
9
+ const ShadowRootConstructor = doc.defaultView?.ShadowRoot;
10
+ return ShadowRootConstructor !== undefined && root instanceof ShadowRootConstructor;
11
+ }