nudge-ui 0.2.4 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (642) hide show
  1. package/dist/cli/agentCommand.d.ts +0 -1
  2. package/dist/cli/agentCommand.js +4 -29
  3. package/dist/client.mjs +987 -221
  4. package/dist/compiler/ast.d.ts +0 -6
  5. package/dist/compiler/ast.js +0 -5
  6. package/dist/compiler/componentContractTypes.d.ts +11 -5
  7. package/dist/compiler/componentContracts.js +3 -9
  8. package/dist/compiler/componentInstrumentation.d.ts +2 -13
  9. package/dist/compiler/componentInstrumentation.js +3 -12
  10. package/dist/compiler/componentPolicyResolution.d.ts +3 -22
  11. package/dist/compiler/componentPolicyResolution.js +6 -38
  12. package/dist/compiler/identityAttributes.d.ts +2 -0
  13. package/dist/compiler/identityAttributes.js +2 -0
  14. package/dist/compiler/index.d.ts +0 -1
  15. package/dist/compiler/index.js +0 -1
  16. package/dist/compiler/packageComponentContracts.d.ts +10 -19
  17. package/dist/compiler/packageComponentContracts.js +60 -43
  18. package/dist/compiler/reactComponentProtocols.d.ts +0 -7
  19. package/dist/compiler/reactComponentProtocols.js +0 -7
  20. package/dist/compiler/reactIdentity.d.ts +2 -2
  21. package/dist/compiler/reactIdentity.js +41 -43
  22. package/dist/compiler/sourcePaths.d.ts +4 -8
  23. package/dist/compiler/sourcePaths.js +6 -8
  24. package/dist/css/dialects/index.d.ts +2 -21
  25. package/dist/css/dialects/index.js +2 -9
  26. package/dist/css/dialects/tailwind.d.ts +2 -16
  27. package/dist/css/dialects/tailwind.js +2 -25
  28. package/dist/css/dialects/vanillaExtract.d.ts +1 -9
  29. package/dist/css/dialects/vanillaExtract.js +0 -1
  30. package/dist/css/index.d.ts +0 -8
  31. package/dist/css/index.js +0 -8
  32. package/dist/css/model/index.d.ts +6 -38
  33. package/dist/css/model/index.js +0 -9
  34. package/dist/css/token-inventory/index.d.ts +0 -23
  35. package/dist/css/token-inventory/index.js +0 -23
  36. package/dist/css/token-inventory/inventory.js +4 -16
  37. package/dist/css/token-inventory/parseStylesheet.d.ts +1 -9
  38. package/dist/css/token-inventory/parseStylesheet.js +5 -42
  39. package/dist/css/token-inventory/policy.d.ts +2 -39
  40. package/dist/css/token-inventory/policy.js +2 -39
  41. package/dist/css/token-inventory/types.d.ts +2 -15
  42. package/dist/css/value-semantics/borderSemantics.d.ts +1 -8
  43. package/dist/css/value-semantics/borderSemantics.js +5 -23
  44. package/dist/css/value-semantics/boxSemantics.d.ts +2 -25
  45. package/dist/css/value-semantics/boxSemantics.js +1 -7
  46. package/dist/css/value-semantics/colorSemantics.d.ts +6 -60
  47. package/dist/css/value-semantics/colorSemantics.js +9 -40
  48. package/dist/css/value-semantics/cssSyntax.d.ts +10 -10
  49. package/dist/css/value-semantics/cssSyntax.js +39 -11
  50. package/dist/css/value-semantics/fontSemantics.d.ts +3 -19
  51. package/dist/css/value-semantics/fontSemantics.js +7 -25
  52. package/dist/css/value-semantics/index.d.ts +1 -12
  53. package/dist/css/value-semantics/index.js +1 -12
  54. package/dist/css/value-semantics/propertyPolicy.d.ts +6 -53
  55. package/dist/css/value-semantics/propertyPolicy.js +47 -59
  56. package/dist/css/value-semantics/stringMaps.d.ts +0 -1
  57. package/dist/css/value-semantics/structuredValues.d.ts +3 -37
  58. package/dist/css/value-semantics/structuredValues.js +6 -17
  59. package/dist/css/value-semantics/tokenInterpretation.d.ts +8 -50
  60. package/dist/css/value-semantics/tokenInterpretation.js +7 -21
  61. package/dist/hosts/astro/astroRuntimeConfig.d.ts +0 -1
  62. package/dist/hosts/astro/astroRuntimeConfig.js +0 -1
  63. package/dist/hosts/astro/clientAsset.d.ts +1 -5
  64. package/dist/hosts/astro/clientAsset.js +1 -5
  65. package/dist/hosts/astro/clientTransport.d.ts +0 -1
  66. package/dist/hosts/astro/clientTransport.js +4 -9
  67. package/dist/hosts/astro/integration.d.ts +2 -28
  68. package/dist/hosts/astro/integration.js +7 -36
  69. package/dist/hosts/astro/markdownIdentity.d.ts +0 -3
  70. package/dist/hosts/astro/markdownIdentity.js +0 -3
  71. package/dist/hosts/astro/middleware.d.ts +1 -12
  72. package/dist/hosts/astro/middleware.js +1 -12
  73. package/dist/hosts/astro/projectContext.d.ts +1 -9
  74. package/dist/hosts/astro/projectContext.js +2 -11
  75. package/dist/hosts/astro/responseInstrumentation.d.ts +4 -33
  76. package/dist/hosts/astro/responseInstrumentation.js +5 -34
  77. package/dist/hosts/environment.d.ts +0 -8
  78. package/dist/hosts/environment.js +0 -1
  79. package/dist/hosts/next/index.js +1 -3
  80. package/dist/hosts/next/loader.d.ts +5 -44
  81. package/dist/hosts/next/loader.js +22 -103
  82. package/dist/hosts/next/loaders/identity-loader.cjs +111 -65
  83. package/dist/hosts/next/loaders/loader-plugin.cjs +111 -65
  84. package/dist/hosts/next/manifest.d.ts +2 -16
  85. package/dist/hosts/next/manifest.js +18 -20
  86. package/dist/hosts/next/mount.d.ts +1 -11
  87. package/dist/hosts/next/mount.js +1 -11
  88. package/dist/hosts/next/repositoryScope.d.ts +2 -17
  89. package/dist/hosts/next/repositoryScope.js +2 -17
  90. package/dist/hosts/next/sidecar.d.ts +0 -13
  91. package/dist/hosts/next/sidecar.js +25 -110
  92. package/dist/hosts/next/wrapper.d.ts +0 -31
  93. package/dist/hosts/next/wrapper.js +14 -71
  94. package/dist/hosts/projectBridge.d.ts +0 -2
  95. package/dist/hosts/projectBridge.js +3 -19
  96. package/dist/hosts/reactRendererCapture.d.ts +2 -0
  97. package/dist/hosts/reactRendererCapture.js +12 -0
  98. package/dist/hosts/static/cli.d.ts +0 -4
  99. package/dist/hosts/static/cli.js +0 -3
  100. package/dist/hosts/static/html/bootstrap.d.ts +1 -18
  101. package/dist/hosts/static/html/bootstrap.js +2 -14
  102. package/dist/hosts/static/manifest.d.ts +2 -15
  103. package/dist/hosts/static/manifest.js +5 -18
  104. package/dist/hosts/static/server.d.ts +4 -38
  105. package/dist/hosts/static/server.js +17 -67
  106. package/dist/hosts/vite/index.d.ts +0 -10
  107. package/dist/hosts/vite/index.js +0 -10
  108. package/dist/hosts/vite/react.d.ts +4 -17
  109. package/dist/hosts/vite/react.js +18 -35
  110. package/dist/hosts/vite/tokens/activeStylesheets.d.ts +1 -10
  111. package/dist/hosts/vite/tokens/activeStylesheets.js +3 -8
  112. package/dist/hosts/vite/tokens/fileMap.d.ts +0 -1
  113. package/dist/hosts/vite/tokens/viteStylesheetArtifacts.d.ts +2 -15
  114. package/dist/hosts/vite/tokens/viteStylesheetArtifacts.js +3 -10
  115. package/dist/hosts/vite/vite.d.ts +5 -26
  116. package/dist/hosts/vite/vite.js +44 -80
  117. package/dist/html/dom.d.ts +0 -1
  118. package/dist/html/dom.js +0 -1
  119. package/dist/html/identity.d.ts +1 -15
  120. package/dist/html/identity.js +1 -8
  121. package/dist/html/insertions.d.ts +2 -8
  122. package/dist/html/insertions.js +1 -1
  123. package/dist/inspector/agent/McpConnectionDialog.d.ts +1 -6
  124. package/dist/inspector/agent/McpConnectionDialog.js +8 -9
  125. package/dist/inspector/agent/activity.d.ts +2 -2
  126. package/dist/inspector/agent/activity.js +4 -3
  127. package/dist/inspector/agent/client.d.ts +3 -27
  128. package/dist/inspector/agent/client.js +43 -91
  129. package/dist/inspector/agent/connectionStatus.d.ts +3 -2
  130. package/dist/inspector/agent/connectionStatus.js +25 -1
  131. package/dist/inspector/agent/httpTransport.d.ts +0 -8
  132. package/dist/inspector/agent/httpTransport.js +42 -176
  133. package/dist/inspector/agent/protocol.d.ts +1 -10
  134. package/dist/inspector/agent/protocol.js +1 -9
  135. package/dist/inspector/agent/verification.d.ts +3 -20
  136. package/dist/inspector/agent/verification.js +10 -43
  137. package/dist/inspector/boot.d.ts +5 -0
  138. package/dist/inspector/boot.js +289 -0
  139. package/dist/inspector/canvas/AgentActivityOverlay.d.ts +3 -2
  140. package/dist/inspector/canvas/AgentActivityOverlay.js +7 -4
  141. package/dist/inspector/canvas/CanvasCard.js +26 -24
  142. package/dist/inspector/canvas/CanvasElementOverlay.js +196 -174
  143. package/dist/inspector/canvas/CanvasToolbar.js +2 -1
  144. package/dist/inspector/canvas/CanvasWorkspace.js +87 -124
  145. package/dist/inspector/canvas/LockedWorkspaceNotice.d.ts +3 -2
  146. package/dist/inspector/canvas/LockedWorkspaceNotice.js +10 -6
  147. package/dist/inspector/canvas/PageCard.d.ts +9 -0
  148. package/dist/inspector/canvas/PageCard.js +50 -0
  149. package/dist/inspector/canvas/SketchToolOptions.d.ts +4 -0
  150. package/dist/inspector/canvas/SketchToolOptions.js +80 -0
  151. package/dist/inspector/canvas/StaleChangeIndicator.d.ts +1 -1
  152. package/dist/inspector/canvas/StaleChangeIndicator.js +1 -1
  153. package/dist/inspector/canvas/ToolOptionsDrawer.d.ts +16 -0
  154. package/dist/inspector/canvas/ToolOptionsDrawer.js +71 -0
  155. package/dist/inspector/canvas/activeCanvasDocument.d.ts +3 -4
  156. package/dist/inspector/canvas/activeCanvasDocument.js +0 -2
  157. package/dist/inspector/canvas/agentPresentation.d.ts +2 -13
  158. package/dist/inspector/canvas/agentPresentation.js +3 -14
  159. package/dist/inspector/canvas/assets/eraser.svg +28 -0
  160. package/dist/inspector/canvas/assets/pen.svg +25 -0
  161. package/dist/inspector/canvas/canvasFrame.d.ts +12 -0
  162. package/dist/inspector/canvas/canvasFrame.js +9 -0
  163. package/dist/inspector/canvas/canvasGestures.d.ts +0 -1
  164. package/dist/inspector/canvas/canvasGestures.js +0 -6
  165. package/dist/inspector/canvas/canvasResize.d.ts +1 -6
  166. package/dist/inspector/canvas/canvasResize.js +1 -6
  167. package/dist/inspector/canvas/canvasStore.d.ts +5 -7
  168. package/dist/inspector/canvas/canvasStore.js +42 -21
  169. package/dist/inspector/canvas/frameConnection.d.ts +42 -0
  170. package/dist/inspector/canvas/frameConnection.js +73 -0
  171. package/dist/inspector/canvas/frameContent.d.ts +0 -1
  172. package/dist/inspector/canvas/frameLifecycle.d.ts +12 -0
  173. package/dist/inspector/canvas/frameLifecycle.js +11 -0
  174. package/dist/inspector/canvas/frameProtocol.d.ts +20 -38
  175. package/dist/inspector/canvas/frameProtocol.js +37 -24
  176. package/dist/inspector/canvas/frameScrollbarStyles.d.ts +0 -1
  177. package/dist/inspector/canvas/frameScrollbarStyles.js +0 -1
  178. package/dist/inspector/canvas/layout.d.ts +10 -22
  179. package/dist/inspector/canvas/layout.js +0 -3
  180. package/dist/inspector/canvas/normalizeUrl.js +1 -8
  181. package/dist/inspector/canvas/pageSurface.d.ts +6 -0
  182. package/dist/inspector/canvas/pageSurface.js +29 -0
  183. package/dist/inspector/canvas/projection.d.ts +14 -25
  184. package/dist/inspector/canvas/projection.js +64 -87
  185. package/dist/inspector/canvas/rendererBootstrap.d.ts +8 -1
  186. package/dist/inspector/canvas/rendererBootstrap.js +10 -15
  187. package/dist/inspector/canvas/rendererCidIndex.d.ts +0 -5
  188. package/dist/inspector/canvas/rendererCidIndex.js +0 -5
  189. package/dist/inspector/canvas/rendererElementSelector.js +38 -28
  190. package/dist/inspector/canvas/rendererMessageRouter.d.ts +4 -6
  191. package/dist/inspector/canvas/rendererMessageRouter.js +12 -17
  192. package/dist/inspector/canvas/rendererSelectionProxy.d.ts +3 -1
  193. package/dist/inspector/canvas/rendererSelectionProxy.js +7 -40
  194. package/dist/inspector/canvas/rendererStylesheet.d.ts +0 -1
  195. package/dist/inspector/canvas/rendererStylesheet.js +23 -1
  196. package/dist/inspector/canvas/resizeHandleScale.d.ts +1 -10
  197. package/dist/inspector/canvas/resizeHandleScale.js +1 -10
  198. package/dist/inspector/canvas/sessionStore.d.ts +3 -9
  199. package/dist/inspector/canvas/sessionStore.js +33 -43
  200. package/dist/inspector/canvas/staleChangeDetector.d.ts +1 -1
  201. package/dist/inspector/canvas/staleChangeDetector.js +11 -26
  202. package/dist/inspector/canvas/toolbarScale.d.ts +1 -4
  203. package/dist/inspector/canvas/toolbarScale.js +1 -4
  204. package/dist/inspector/canvas/useCanvasLayoutAnimation.d.ts +0 -1
  205. package/dist/inspector/canvas/useCanvasLayoutAnimation.js +0 -1
  206. package/dist/inspector/canvas/viewStore.js +1 -1
  207. package/dist/inspector/canvas/wheelPan.d.ts +1 -1
  208. package/dist/inspector/canvas/wheelPan.js +1 -1
  209. package/dist/inspector/canvas/workspaceLease.d.ts +1 -5
  210. package/dist/inspector/canvas/workspaceLease.js +1 -7
  211. package/dist/inspector/changes/codecs.d.ts +1 -0
  212. package/dist/inspector/changes/codecs.js +21 -5
  213. package/dist/inspector/changes/draftPreview.d.ts +7 -0
  214. package/dist/inspector/changes/draftPreview.js +118 -0
  215. package/dist/inspector/changes/editModel.d.ts +11 -13
  216. package/dist/inspector/changes/editModel.js +9 -4
  217. package/dist/inspector/changes/managedStyleProjection.js +6 -15
  218. package/dist/inspector/changes/model.d.ts +0 -5
  219. package/dist/inspector/changes/model.js +1 -8
  220. package/dist/inspector/changes/previewDiagnostics.d.ts +2 -12
  221. package/dist/inspector/changes/previewDiagnostics.js +5 -21
  222. package/dist/inspector/changes/previewVerification.d.ts +25 -0
  223. package/dist/inspector/changes/previewVerification.js +34 -0
  224. package/dist/inspector/changes/structuralTypes.d.ts +2 -4
  225. package/dist/inspector/changes/types.d.ts +11 -8
  226. package/dist/inspector/clientManifest.d.ts +17 -6
  227. package/dist/inspector/clientManifest.js +16 -3
  228. package/dist/inspector/comments/CommentsOverlay.js +66 -23
  229. package/dist/inspector/comments/element.d.ts +1 -2
  230. package/dist/inspector/comments/element.js +1 -2
  231. package/dist/inspector/comments/store.d.ts +1 -1
  232. package/dist/inspector/comments/store.js +4 -3
  233. package/dist/inspector/comments/verification.d.ts +8 -2
  234. package/dist/inspector/comments/verification.js +19 -11
  235. package/dist/inspector/componentSemantics/ComponentPropsSection.d.ts +8 -0
  236. package/dist/inspector/componentSemantics/ComponentPropsSection.js +12 -8
  237. package/dist/inspector/componentSemantics/adapterRegistry.d.ts +2 -9
  238. package/dist/inspector/componentSemantics/adapterRegistry.js +2 -9
  239. package/dist/inspector/componentSemantics/changeAction.js +1 -1
  240. package/dist/inspector/componentSemantics/changeModel.js +2 -4
  241. package/dist/inspector/componentSemantics/react/callsites.d.ts +28 -0
  242. package/dist/inspector/componentSemantics/react/callsites.js +261 -0
  243. package/dist/inspector/componentSemantics/react/devtoolsHook.d.ts +23 -0
  244. package/dist/inspector/componentSemantics/react/devtoolsHook.js +71 -0
  245. package/dist/inspector/componentSemantics/react/fibers.d.ts +17 -0
  246. package/dist/inspector/componentSemantics/react/fibers.js +30 -0
  247. package/dist/inspector/componentSemantics/{reactRuntime.d.ts → react/runtime.d.ts} +3 -2
  248. package/dist/inspector/componentSemantics/{reactRuntime.js → react/runtime.js} +70 -53
  249. package/dist/inspector/componentSemantics/runtimeBridge.d.ts +2 -18
  250. package/dist/inspector/componentSemantics/runtimeBridge.js +5 -19
  251. package/dist/inspector/componentSemantics/textBinding.d.ts +2 -11
  252. package/dist/inspector/componentSemantics/textBinding.js +20 -87
  253. package/dist/inspector/componentSemantics/types.d.ts +8 -27
  254. package/dist/inspector/componentSemantics/types.js +0 -1
  255. package/dist/inspector/conformance/borderCases.d.ts +0 -5
  256. package/dist/inspector/conformance/borderCases.js +0 -5
  257. package/dist/inspector/conformance/colorCases.d.ts +0 -6
  258. package/dist/inspector/conformance/colorCases.js +0 -6
  259. package/dist/inspector/conformance/fixture.d.ts +1 -5
  260. package/dist/inspector/conformance/fixture.js +1 -5
  261. package/dist/inspector/conformance/spacingCases.d.ts +0 -4
  262. package/dist/inspector/conformance/spacingCases.js +0 -4
  263. package/dist/inspector/conformance/typographyCases.d.ts +0 -5
  264. package/dist/inspector/conformance/typographyCases.js +0 -5
  265. package/dist/inspector/drafts/draftStore.d.ts +95 -0
  266. package/dist/inspector/drafts/draftStore.js +461 -0
  267. package/dist/inspector/drafts/model.d.ts +14 -14
  268. package/dist/inspector/drafts/model.js +4 -2
  269. package/dist/inspector/drafts/store.d.ts +47 -16
  270. package/dist/inspector/drafts/store.js +137 -170
  271. package/dist/inspector/editScope.d.ts +0 -1
  272. package/dist/inspector/editScope.js +0 -1
  273. package/dist/inspector/index.d.ts +2 -4
  274. package/dist/inspector/index.js +2 -264
  275. package/dist/inspector/inline-text/inlineTextDiagnostics.d.ts +0 -2
  276. package/dist/inspector/inline-text/inlineTextDiagnostics.js +0 -2
  277. package/dist/inspector/inline-text/inlineTextEditor.d.ts +3 -9
  278. package/dist/inspector/inline-text/inlineTextEditor.js +27 -81
  279. package/dist/inspector/inline-text/inlineTextLifecycle.js +1 -6
  280. package/dist/inspector/inline-text/textEditChange.d.ts +1 -2
  281. package/dist/inspector/inspection/bridge.d.ts +3 -7
  282. package/dist/inspector/inspection/bridge.js +6 -13
  283. package/dist/inspector/inspection/browserCssInspection.d.ts +12 -11
  284. package/dist/inspector/inspection/browserCssInspection.js +32 -14
  285. package/dist/inspector/inspection/browserCssInspectionRegistry.d.ts +0 -7
  286. package/dist/inspector/inspection/browserCssInspectionRegistry.js +1 -16
  287. package/dist/inspector/inspection/inspectionSnapshot.d.ts +6 -0
  288. package/dist/inspector/inspection/inspectionSnapshot.js +10 -0
  289. package/dist/inspector/inspection/performanceDiagnostics.d.ts +18 -0
  290. package/dist/inspector/inspection/performanceDiagnostics.js +31 -0
  291. package/dist/inspector/inspection/selectionProperty.d.ts +1 -6
  292. package/dist/inspector/inspection/selectionProperty.js +1 -5
  293. package/dist/inspector/inspection/useBrowserCssInspection.d.ts +1 -5
  294. package/dist/inspector/inspection/useBrowserCssInspection.js +22 -59
  295. package/dist/inspector/iterations/capture.d.ts +2 -2
  296. package/dist/inspector/iterations/capture.js +4 -9
  297. package/dist/inspector/iterations/client.d.ts +2 -2
  298. package/dist/inspector/iterations/client.js +0 -1
  299. package/dist/inspector/iterations/coordinator.d.ts +4 -4
  300. package/dist/inspector/iterations/coordinator.js +5 -4
  301. package/dist/inspector/iterations/prompt.d.ts +0 -1
  302. package/dist/inspector/iterations/prompt.js +9 -9
  303. package/dist/inspector/overlay/DomNavigator.d.ts +3 -1
  304. package/dist/inspector/overlay/DomNavigator.js +39 -15
  305. package/dist/inspector/overlay/DropGuideOverlay.d.ts +0 -1
  306. package/dist/inspector/overlay/DropGuideOverlay.js +0 -1
  307. package/dist/inspector/overlay/MeasurementGuideOverlay.d.ts +1 -8
  308. package/dist/inspector/overlay/MeasurementGuideOverlay.js +1 -5
  309. package/dist/inspector/overlay/clickPolicy.d.ts +3 -14
  310. package/dist/inspector/overlay/clickPolicy.js +3 -14
  311. package/dist/inspector/overlay/dropGuide.d.ts +0 -3
  312. package/dist/inspector/overlay/dropGuide.js +0 -3
  313. package/dist/inspector/overlay/frameThrottle.d.ts +0 -1
  314. package/dist/inspector/overlay/frameThrottle.js +0 -1
  315. package/dist/inspector/overlay/interactionStyles.d.ts +1 -1
  316. package/dist/inspector/overlay/interactionStyles.js +19 -8
  317. package/dist/inspector/overlay/measurementGeometry.js +4 -12
  318. package/dist/inspector/overlay/selectedGeometry.d.ts +1 -6
  319. package/dist/inspector/overlay/selectedGeometry.js +1 -8
  320. package/dist/inspector/overlay/spacingGestures.d.ts +14 -21
  321. package/dist/inspector/overlay/spacingGestures.js +151 -31
  322. package/dist/inspector/overlay/structuralGestures.d.ts +2 -9
  323. package/dist/inspector/overlay/structuralGestures.js +1 -4
  324. package/dist/inspector/pageInspector.d.ts +33 -0
  325. package/dist/inspector/pageInspector.js +335 -0
  326. package/dist/inspector/projection/cssEscapes.d.ts +0 -1
  327. package/dist/inspector/projection/cssEscapes.js +2 -4
  328. package/dist/inspector/projection/draftProjection.d.ts +6 -10
  329. package/dist/inspector/projection/draftProjection.js +8 -7
  330. package/dist/inspector/projection/managedStylesheet.d.ts +1 -7
  331. package/dist/inspector/projection/managedStylesheet.js +28 -26
  332. package/dist/inspector/projection/renderedInstance.d.ts +5 -28
  333. package/dist/inspector/projection/renderedInstance.js +13 -33
  334. package/dist/inspector/projection/structuralProjection.d.ts +7 -48
  335. package/dist/inspector/projection/structuralProjection.js +31 -96
  336. package/dist/inspector/projection/textProjection.d.ts +7 -13
  337. package/dist/inspector/projection/textProjection.js +35 -80
  338. package/dist/inspector/prompt/PromptSettingsDialog.d.ts +0 -1
  339. package/dist/inspector/prompt/PromptSettingsDialog.js +0 -1
  340. package/dist/inspector/prompt/clipboardHandoff.d.ts +1 -0
  341. package/dist/inspector/prompt/clipboardHandoff.js +34 -16
  342. package/dist/inspector/prompt/generatePrompt.d.ts +2 -2
  343. package/dist/inspector/prompt/generatePrompt.js +247 -166
  344. package/dist/inspector/prompt/promptDocument.d.ts +3 -0
  345. package/dist/inspector/prompt/promptDocument.js +8 -0
  346. package/dist/inspector/prompt/promptSettings.d.ts +0 -3
  347. package/dist/inspector/prompt/promptSettings.js +7 -8
  348. package/dist/inspector/runtime/devFlag.d.ts +2 -25
  349. package/dist/inspector/runtime/devFlag.js +4 -31
  350. package/dist/inspector/runtime/documentStylesheetOrder.d.ts +0 -2
  351. package/dist/inspector/runtime/editorShell.d.ts +0 -1
  352. package/dist/inspector/runtime/editorShell.js +0 -1
  353. package/dist/inspector/runtime/inspectorStorage.d.ts +11 -0
  354. package/dist/inspector/runtime/inspectorStorage.js +37 -0
  355. package/dist/inspector/runtime/ownedStylesheets.d.ts +14 -0
  356. package/dist/inspector/runtime/ownedStylesheets.js +66 -0
  357. package/dist/inspector/runtime/runtimeConfig.d.ts +14 -84
  358. package/dist/inspector/runtime/runtimeConfig.js +18 -50
  359. package/dist/inspector/runtime/runtimeIdentityClaims.d.ts +19 -0
  360. package/dist/inspector/runtime/runtimeIdentityClaims.js +178 -0
  361. package/dist/inspector/runtime/staticHtmlRuntimeIdentity.d.ts +6 -23
  362. package/dist/inspector/runtime/staticHtmlRuntimeIdentity.js +103 -52
  363. package/dist/inspector/runtime/useRuntimeConfig.d.ts +1 -8
  364. package/dist/inspector/runtime/useRuntimeConfig.js +1 -8
  365. package/dist/inspector/selection/editScope.d.ts +2 -7
  366. package/dist/inspector/selection/editScope.js +15 -14
  367. package/dist/inspector/selection/editTarget.d.ts +1 -5
  368. package/dist/inspector/selection/hierarchy.d.ts +11 -11
  369. package/dist/inspector/selection/hierarchy.js +42 -24
  370. package/dist/inspector/selection/selectionStore.d.ts +0 -3
  371. package/dist/inspector/selection/selectionStore.js +5 -16
  372. package/dist/inspector/selection/sourceSite.d.ts +1 -5
  373. package/dist/inspector/selection/sourceSite.js +2 -8
  374. package/dist/inspector/selection/styleSelection.d.ts +1 -5
  375. package/dist/inspector/selection/styleSelection.js +1 -5
  376. package/dist/inspector/session/lifecycle.d.ts +1 -9
  377. package/dist/inspector/session/lifecycle.js +0 -1
  378. package/dist/inspector/session/sessionContext.d.ts +0 -4
  379. package/dist/inspector/session/sessionContext.js +0 -4
  380. package/dist/inspector/session/sessionFactory.d.ts +0 -9
  381. package/dist/inspector/session/sessionFactory.js +0 -6
  382. package/dist/inspector/settings/SettingsDialog.d.ts +0 -1
  383. package/dist/inspector/settings/SettingsDialog.js +5 -3
  384. package/dist/inspector/shell/AgentStatusButton.d.ts +3 -2
  385. package/dist/inspector/shell/AgentStatusButton.js +7 -7
  386. package/dist/inspector/shell/AppShell.js +6 -2
  387. package/dist/inspector/shell/ChangesLog.js +29 -12
  388. package/dist/inspector/shell/CopyPromptButton.d.ts +2 -1
  389. package/dist/inspector/shell/CopyPromptButton.js +62 -55
  390. package/dist/inspector/shell/EmptyState.js +3 -3
  391. package/dist/inspector/shell/InspectorEditors.d.ts +16 -0
  392. package/dist/inspector/shell/InspectorEditors.js +14 -0
  393. package/dist/inspector/shell/InspectorPanel.d.ts +12 -0
  394. package/dist/inspector/shell/InspectorPanel.js +8 -0
  395. package/dist/inspector/shell/InspectorSelection.d.ts +24 -0
  396. package/dist/inspector/shell/InspectorSelection.js +20 -0
  397. package/dist/inspector/shell/InspectorShell.d.ts +0 -3
  398. package/dist/inspector/shell/InspectorShell.js +44 -58
  399. package/dist/inspector/shell/NudgeLogoIcon.d.ts +5 -0
  400. package/dist/inspector/shell/NudgeLogoIcon.js +5 -0
  401. package/dist/inspector/shell/PeekOriginalButton.d.ts +0 -5
  402. package/dist/inspector/shell/PeekOriginalButton.js +3 -8
  403. package/dist/inspector/shell/PeekOriginalIcon.d.ts +0 -5
  404. package/dist/inspector/shell/PeekOriginalIcon.js +0 -5
  405. package/dist/inspector/shell/PromptActionButton.d.ts +21 -0
  406. package/dist/inspector/shell/PromptActionButton.js +14 -0
  407. package/dist/inspector/shell/elementName.d.ts +5 -0
  408. package/dist/inspector/shell/elementName.js +29 -0
  409. package/dist/inspector/shell/interactionStatePreview.d.ts +6 -0
  410. package/dist/inspector/shell/interactionStatePreview.js +107 -0
  411. package/dist/inspector/shell/originalPreview.d.ts +1 -5
  412. package/dist/inspector/shell/originalPreview.js +5 -37
  413. package/dist/inspector/shell/stateValue.d.ts +1 -2
  414. package/dist/inspector/shell/stateValue.js +4 -8
  415. package/dist/inspector/shell/styleState.d.ts +1 -2
  416. package/dist/inspector/shell/styleState.js +1 -2
  417. package/dist/inspector/sketch/SketchEditor.js +5 -5
  418. package/dist/inspector/sketch/SketchFrameOverlay.d.ts +2 -1
  419. package/dist/inspector/sketch/SketchFrameOverlay.js +13 -16
  420. package/dist/inspector/sketch/SketchOverlay.d.ts +3 -5
  421. package/dist/inspector/sketch/SketchOverlay.js +138 -263
  422. package/dist/inspector/sketch/SketchPromptPanel.d.ts +1 -2
  423. package/dist/inspector/sketch/SketchPromptPanel.js +8 -2
  424. package/dist/inspector/sketch/SketchThumbnail.d.ts +5 -0
  425. package/dist/inspector/sketch/SketchThumbnail.js +18 -0
  426. package/dist/inspector/sketch/SketchWorkspace.d.ts +1 -2
  427. package/dist/inspector/sketch/SketchWorkspace.js +70 -37
  428. package/dist/inspector/sketch/capture.d.ts +12 -3
  429. package/dist/inspector/sketch/capture.js +31 -14
  430. package/dist/inspector/sketch/copySketch.d.ts +4 -0
  431. package/dist/inspector/sketch/copySketch.js +43 -0
  432. package/dist/inspector/sketch/drawingTools.d.ts +15 -0
  433. package/dist/inspector/sketch/drawingTools.js +46 -0
  434. package/dist/inspector/sketch/frameHeading.d.ts +3 -0
  435. package/dist/inspector/sketch/frameHeading.js +23 -0
  436. package/dist/inspector/sketch/freehand.d.ts +0 -1
  437. package/dist/inspector/sketch/freehand.js +3 -4
  438. package/dist/inspector/sketch/geometry.d.ts +2 -1
  439. package/dist/inspector/sketch/geometry.js +15 -1
  440. package/dist/inspector/sketch/handoff.js +0 -1
  441. package/dist/inspector/sketch/history.d.ts +26 -0
  442. package/dist/inspector/sketch/history.js +55 -0
  443. package/dist/inspector/sketch/interaction.d.ts +3 -5
  444. package/dist/inspector/sketch/interaction.js +8 -11
  445. package/dist/inspector/sketch/model.d.ts +33 -6
  446. package/dist/inspector/sketch/model.js +101 -63
  447. package/dist/inspector/sketch/persistence.d.ts +14 -1
  448. package/dist/inspector/sketch/persistence.js +64 -8
  449. package/dist/inspector/sketch/raster.d.ts +3 -2
  450. package/dist/inspector/sketch/raster.js +40 -20
  451. package/dist/inspector/sketch/store.d.ts +1 -1
  452. package/dist/inspector/sketch/store.js +3 -4
  453. package/dist/inspector/sketch/videoFrames.d.ts +6 -0
  454. package/dist/inspector/sketch/videoFrames.js +80 -0
  455. package/dist/inspector/spacing/projection.d.ts +0 -8
  456. package/dist/inspector/spacing/projection.js +38 -20
  457. package/dist/inspector/styleEditors/BackgroundEditor.js +3 -2
  458. package/dist/inspector/styleEditors/BorderEditor.js +30 -135
  459. package/dist/inspector/styleEditors/BorderRadiusEditor.js +8 -3
  460. package/dist/inspector/styleEditors/ChildPlacement.d.ts +12 -0
  461. package/dist/inspector/styleEditors/ChildPlacement.js +9 -0
  462. package/dist/inspector/styleEditors/FlexControls.d.ts +35 -0
  463. package/dist/inspector/styleEditors/FlexControls.js +158 -0
  464. package/dist/inspector/styleEditors/GapField.d.ts +5 -2
  465. package/dist/inspector/styleEditors/GapField.js +3 -4
  466. package/dist/inspector/styleEditors/GridChildSection.d.ts +0 -5
  467. package/dist/inspector/styleEditors/GridChildSection.js +0 -5
  468. package/dist/inspector/styleEditors/GridPicker.d.ts +1 -1
  469. package/dist/inspector/styleEditors/GridPicker.js +2 -4
  470. package/dist/inspector/styleEditors/GridSection.d.ts +10 -8
  471. package/dist/inspector/styleEditors/GridSection.js +22 -9
  472. package/dist/inspector/styleEditors/GridValueField.d.ts +1 -5
  473. package/dist/inspector/styleEditors/GridValueField.js +2 -8
  474. package/dist/inspector/styleEditors/ImageBackgroundEditor.d.ts +0 -1
  475. package/dist/inspector/styleEditors/ImageBackgroundEditor.js +1 -2
  476. package/dist/inspector/styleEditors/LayoutBlockedIndicator.d.ts +0 -1
  477. package/dist/inspector/styleEditors/LayoutBlockedIndicator.js +0 -1
  478. package/dist/inspector/styleEditors/LayoutComboField.js +0 -5
  479. package/dist/inspector/styleEditors/LayoutModeRow.d.ts +14 -0
  480. package/dist/inspector/styleEditors/LayoutModeRow.js +60 -0
  481. package/dist/inspector/styleEditors/LayoutSection.d.ts +2 -2
  482. package/dist/inspector/styleEditors/LayoutSection.js +30 -356
  483. package/dist/inspector/styleEditors/OpacityEditor.js +7 -5
  484. package/dist/inspector/styleEditors/PositionControls.d.ts +18 -0
  485. package/dist/inspector/styleEditors/PositionControls.js +16 -0
  486. package/dist/inspector/styleEditors/SizeSection.d.ts +18 -0
  487. package/dist/inspector/styleEditors/SizeSection.js +71 -0
  488. package/dist/inspector/styleEditors/{SpacingBox.d.ts → SpacingField.d.ts} +3 -10
  489. package/dist/inspector/styleEditors/{SpacingBox.js → SpacingField.js} +15 -29
  490. package/dist/inspector/styleEditors/Typography.js +2 -4
  491. package/dist/inspector/styleEditors/borderModel.d.ts +36 -0
  492. package/dist/inspector/styleEditors/borderModel.js +105 -0
  493. package/dist/inspector/styleEditors/completeCssValue.d.ts +1 -5
  494. package/dist/inspector/styleEditors/completeCssValue.js +3 -13
  495. package/dist/inspector/styleEditors/fieldValue.d.ts +20 -0
  496. package/dist/inspector/styleEditors/fieldValue.js +26 -0
  497. package/dist/inspector/styleEditors/gradientValue.d.ts +1 -1
  498. package/dist/inspector/styleEditors/gradientValue.js +3 -2
  499. package/dist/inspector/styleEditors/gridChildModel.d.ts +7 -47
  500. package/dist/inspector/styleEditors/gridChildModel.js +6 -37
  501. package/dist/inspector/styleEditors/hiddenSizeOverrides.d.ts +5 -0
  502. package/dist/inspector/styleEditors/hiddenSizeOverrides.js +42 -0
  503. package/dist/inspector/styleEditors/inlineAuthored.d.ts +1 -8
  504. package/dist/inspector/styleEditors/inlineAuthored.js +3 -17
  505. package/dist/inspector/styleEditors/layoutMode.d.ts +15 -0
  506. package/dist/inspector/styleEditors/layoutMode.js +33 -0
  507. package/dist/inspector/styleEditors/layoutPreviewState.d.ts +0 -1
  508. package/dist/inspector/styleEditors/layoutPreviewState.js +0 -1
  509. package/dist/inspector/styleEditors/layoutValue.d.ts +2 -8
  510. package/dist/inspector/styleEditors/layoutValue.js +6 -15
  511. package/dist/inspector/styleEditors/nudgeValue.d.ts +1 -13
  512. package/dist/inspector/styleEditors/nudgeValue.js +1 -13
  513. package/dist/inspector/styleEditors/rowLookup.d.ts +1 -5
  514. package/dist/inspector/styleEditors/rowLookup.js +1 -5
  515. package/dist/inspector/styleEditors/stringRecord.d.ts +1 -2
  516. package/dist/inspector/styleEditors/stylePresence.d.ts +0 -2
  517. package/dist/inspector/styleEditors/stylePresence.js +1 -4
  518. package/dist/inspector/styleEditors/textRelevance.d.ts +1 -1
  519. package/dist/inspector/styleEditors/textRelevance.js +1 -1
  520. package/dist/inspector/styleEditors/useFieldVisibility.js +1 -2
  521. package/dist/inspector/styleEditors/useLayoutContext.d.ts +13 -0
  522. package/dist/inspector/styleEditors/useLayoutContext.js +53 -0
  523. package/dist/inspector/styleEditors/valuePolicy.d.ts +1 -5
  524. package/dist/inspector/styleEditors/valuePolicy.js +0 -1
  525. package/dist/inspector/testing.d.ts +1 -4
  526. package/dist/inspector/testing.js +1 -4
  527. package/dist/inspector/tokens/TokenChip.d.ts +1 -4
  528. package/dist/inspector/tokens/TokenChip.js +1 -4
  529. package/dist/inspector/tokens/TokenField.d.ts +4 -3
  530. package/dist/inspector/tokens/TokenField.js +53 -32
  531. package/dist/inspector/tokens/TokensPanel.js +2 -1
  532. package/dist/inspector/tokens/catalog.d.ts +2 -10
  533. package/dist/inspector/tokens/catalog.js +5 -12
  534. package/dist/inspector/tokens/dragPointerLock.d.ts +0 -1
  535. package/dist/inspector/tokens/dragPointerLock.js +2 -3
  536. package/dist/inspector/tokens/editActions.d.ts +4 -4
  537. package/dist/inspector/tokens/editActions.js +11 -7
  538. package/dist/inspector/tokens/resolution/cascade.d.ts +1 -5
  539. package/dist/inspector/tokens/resolution/cascade.js +1 -5
  540. package/dist/inspector/tokens/resolution/containerQueryEvaluator.d.ts +11 -0
  541. package/dist/inspector/tokens/resolution/containerQueryEvaluator.js +82 -0
  542. package/dist/inspector/tokens/resolution/cssomCollector.d.ts +4 -19
  543. package/dist/inspector/tokens/resolution/cssomCollector.js +186 -122
  544. package/dist/inspector/tokens/resolution/nestedSelectors.d.ts +2 -0
  545. package/dist/inspector/tokens/resolution/nestedSelectors.js +63 -0
  546. package/dist/inspector/tokens/resolution/ruleMatching.d.ts +4 -14
  547. package/dist/inspector/tokens/resolution/ruleMatching.js +136 -63
  548. package/dist/inspector/tokens/resolution/selectorSemantics.d.ts +3 -14
  549. package/dist/inspector/tokens/resolution/selectorSemantics.js +12 -27
  550. package/dist/inspector/tokens/resolution.d.ts +11 -27
  551. package/dist/inspector/tokens/resolution.js +105 -181
  552. package/dist/inspector/tokens/tokenAvailability.d.ts +2 -14
  553. package/dist/inspector/tokens/tokenAvailability.js +6 -38
  554. package/dist/inspector/tokens/tokenEdits.d.ts +1 -1
  555. package/dist/inspector/tokens/tokenEdits.js +1 -1
  556. package/dist/inspector/tokens/valueSemanticsAdapter.d.ts +0 -1
  557. package/dist/inspector/tokens/valueSemanticsAdapter.js +18 -2
  558. package/dist/inspector/ui/AtRuleContext.d.ts +5 -5
  559. package/dist/inspector/ui/AtRuleContext.js +8 -6
  560. package/dist/inspector/ui/ControlSurface.d.ts +0 -4
  561. package/dist/inspector/ui/Disclosure.d.ts +0 -5
  562. package/dist/inspector/ui/Disclosure.js +0 -4
  563. package/dist/inspector/ui/InlineStyleWarning.d.ts +0 -1
  564. package/dist/inspector/ui/InlineStyleWarning.js +2 -2
  565. package/dist/inspector/ui/InspectorPopover.d.ts +1 -5
  566. package/dist/inspector/ui/InspectorPopover.js +1 -5
  567. package/dist/inspector/ui/InspectorStyle.d.ts +8 -0
  568. package/dist/inspector/ui/InspectorStyle.js +26 -0
  569. package/dist/inspector/ui/PopoverListbox.d.ts +2 -1
  570. package/dist/inspector/ui/PopoverListbox.js +3 -3
  571. package/dist/inspector/ui/SegmentedControl.d.ts +4 -4
  572. package/dist/inspector/ui/SegmentedControl.js +6 -4
  573. package/dist/inspector/ui/SideValuesField.d.ts +1 -6
  574. package/dist/inspector/ui/SideValuesField.js +2 -8
  575. package/dist/inspector/ui/Toast.d.ts +10 -0
  576. package/dist/inspector/ui/Toast.js +26 -0
  577. package/dist/inspector/ui/assets/canvasIllustration.d.ts +2 -0
  578. package/dist/inspector/ui/assets/canvasIllustration.js +21 -0
  579. package/dist/inspector/ui/assets/gridIllustration.d.ts +2 -0
  580. package/dist/inspector/ui/assets/{grid.svg → gridIllustration.js} +3 -2
  581. package/dist/inspector/ui/atRuleSegments.d.ts +13 -0
  582. package/dist/inspector/ui/atRuleSegments.js +34 -0
  583. package/dist/inspector/ui/classNames.d.ts +0 -1
  584. package/dist/inspector/ui/classNames.js +0 -1
  585. package/dist/inspector/ui/customCursors.d.ts +11 -0
  586. package/dist/inspector/ui/customCursors.js +29 -7
  587. package/dist/inspector/ui/styles.js +25 -25
  588. package/dist/inspector/workspace/commands.js +1 -2
  589. package/dist/inspector/workspace/controller.js +20 -2
  590. package/dist/inspector/workspace/handoff.d.ts +1 -5
  591. package/dist/inspector/workspace/handoff.js +4 -7
  592. package/dist/inspector/workspace/sentItems.d.ts +3 -6
  593. package/dist/inspector/workspace/sentItems.js +6 -24
  594. package/dist/inspector/workspace/timeline.d.ts +28 -11
  595. package/dist/inspector/workspace/timeline.js +117 -96
  596. package/dist/internal/agent-protocol.d.ts +53 -38
  597. package/dist/internal/agent-protocol.js +151 -42
  598. package/dist/nudge-ui.mjs +155 -92
  599. package/dist/project/artifacts.js +24 -21
  600. package/dist/project/files.d.ts +0 -1
  601. package/dist/project/files.js +2 -9
  602. package/dist/project/identity.d.ts +1 -5
  603. package/dist/project/identity.js +1 -5
  604. package/dist/project/mcpPackage.d.ts +3 -0
  605. package/dist/project/mcpPackage.js +55 -0
  606. package/dist/project/pathPolicy.d.ts +1 -6
  607. package/dist/project/pathPolicy.js +1 -6
  608. package/dist/project/tokens.d.ts +2 -12
  609. package/dist/project/tokens.js +4 -15
  610. package/dist/transport/editor.d.ts +1 -12
  611. package/dist/transport/editor.js +2 -13
  612. package/dist/transport/index.d.ts +0 -5
  613. package/dist/transport/index.js +0 -5
  614. package/dist/transport/routes.d.ts +0 -5
  615. package/dist/transport/routes.js +0 -5
  616. package/package.json +16 -5
  617. package/dist/inspector/canvas/measurementProjection.d.ts +0 -8
  618. package/dist/inspector/canvas/measurementProjection.js +0 -16
  619. package/dist/inspector/changes/changesLog.d.ts +0 -49
  620. package/dist/inspector/changes/changesLog.js +0 -255
  621. package/dist/inspector/changes/draftChanges.d.ts +0 -58
  622. package/dist/inspector/changes/draftChanges.js +0 -304
  623. package/dist/inspector/conformance/projection.d.ts +0 -2
  624. package/dist/inspector/conformance/projection.js +0 -3
  625. package/dist/inspector/inline-text/textChangeBoundary.d.ts +0 -6
  626. package/dist/inspector/inline-text/textChangeBoundary.js +0 -1
  627. package/dist/inspector/overlay/InspectorOverlay.d.ts +0 -5
  628. package/dist/inspector/overlay/InspectorOverlay.js +0 -332
  629. package/dist/inspector/overlay/elementSelector.d.ts +0 -1
  630. package/dist/inspector/overlay/elementSelector.js +0 -111
  631. package/dist/inspector/sketch/SketchChanges.d.ts +0 -2
  632. package/dist/inspector/sketch/SketchChanges.js +0 -72
  633. package/dist/inspector/sketch/SketchEntryButton.d.ts +0 -4
  634. package/dist/inspector/sketch/SketchEntryButton.js +0 -11
  635. package/dist/inspector/sketch/SketchLayersPanel.d.ts +0 -2
  636. package/dist/inspector/sketch/SketchLayersPanel.js +0 -71
  637. package/dist/inspector/styleEditors/InsetSection.d.ts +0 -15
  638. package/dist/inspector/styleEditors/InsetSection.js +0 -15
  639. package/dist/inspector/styleEditors/PositionInsets.d.ts +0 -15
  640. package/dist/inspector/styleEditors/PositionInsets.js +0 -12
  641. package/dist/inspector/tokens/TokenDropdown.d.ts +0 -13
  642. package/dist/inspector/tokens/TokenDropdown.js +0 -59
@@ -1,16 +1,37 @@
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";
1
+ import { isComponentChange, isElementChange, isTextContentChange, isTokenChange } from "../changes/types.js";
2
+ import { canonicalizeChanges, tokenReference } from "../changes/model.js";
4
3
  import { formatComponentPropBaseline, formatComponentPropValue, } from "../componentSemantics/changeModel.js";
5
4
  import { boundRuntimeEvidence, isRuntimeGeneratedSource, normalizeRuntimeTag, normalizeRuntimeText, } from "../runtime/staticHtmlRuntimeIdentity.js";
6
5
  import { getSourceCoordinatePolicy } from "../runtime/runtimeConfig.js";
7
6
  import { DEFAULT_CUSTOM_INSTRUCTIONS } from "./promptSettings.js";
7
+ import { PROMPT_TITLE } from "./promptDocument.js";
8
8
  import { getCommentsForTarget } from "../comments/store.js";
9
9
  import { documentTarget } from "../drafts/model.js";
10
10
  const EMPTY_SENTINEL = "<!-- No changes to export -->\n\nThe changes log is empty. Make a change in the Nudge UI inspector first.";
11
+ /** Labels describe the observed tag, without guessing its role in the page. */
12
+ function elementLabel(tag) {
13
+ const normalized = normalizeRuntimeTag(tag);
14
+ const labels = new Map([
15
+ ["p", "Paragraph"], ["button", "Button"], ["a", "Link"], ["img", "Image"], ["input", "Input"],
16
+ ["textarea", "Text area"], ["select", "Select"], ["form", "Form"], ["nav", "Navigation"], ["section", "Section"],
17
+ ]);
18
+ const label = /^h[1-6]$/.test(normalized) ? "Heading" : labels.get(normalized) ?? "Element";
19
+ return normalized ? `${label} (${promptText(`<${normalized}>`)})` : label;
20
+ }
21
+ /** Runtime IDs identify one DOM element; authored sites can render several items. */
22
+ function elementPromptKey(cid, src, scope, locator) {
23
+ if (!src || isRuntimeGeneratedSource(src))
24
+ return JSON.stringify(["runtime", cid]);
25
+ return JSON.stringify([cid, src, scope, scope === "rendered-instance" ? [
26
+ locator?.occurrence, locator?.props, locator?.ariaLabel ?? null, locator?.invocation?.callsiteId ?? null,
27
+ ] : null]);
28
+ }
29
+ function refPromptKey(ref) {
30
+ return elementPromptKey(ref.sourceSite.cid, ref.sourceSite.src, "rendered-instance", ref.locator);
31
+ }
11
32
  function renderPrompt(sections, customInstructions) {
12
33
  const lines = [
13
- "# Requested design changes",
34
+ PROMPT_TITLE,
14
35
  ];
15
36
  for (const section of sections) {
16
37
  const content = [...section.lines];
@@ -47,6 +68,7 @@ function groupElementChanges(changes) {
47
68
  line: change.source.line || change.line,
48
69
  column: change.column ?? 0,
49
70
  runtimeEvidence: change.runtimeEvidence,
71
+ sourceEvidence: change.sourceEvidence,
50
72
  instanceOverride,
51
73
  changes: [],
52
74
  };
@@ -56,28 +78,22 @@ function groupElementChanges(changes) {
56
78
  }
57
79
  return [...map.values()];
58
80
  }
59
- function conflictSuffix(rec) {
60
- const result = getAnyPreviewDiagnostic(changeKey(rec))?.result;
61
- if (!result || result.status === "applied")
62
- return "";
63
- return ` — preview conflict: browser computed \`${result.computedValue || "(no value)"}\` (${result.reason ?? "cascade conflict"}); implement the requested value without assuming \`!important\``;
64
- }
65
81
  function elementChangeLine(rec) {
82
+ const state = rec.state && rec.state !== "base" ? ` (${rec.state})` : "";
83
+ const property = `\`${rec.property}\`${state}`;
66
84
  if (rec.newToken && rec.oldToken) {
67
- return `- \`${rec.property}\`: \`${rec.oldToken.name}\` → \`${rec.newToken.name}\`${conflictSuffix(rec)}`;
85
+ return `- **Change:** ${property}: \`${rec.oldToken.name}\` → \`${rec.newToken.name}\``;
68
86
  }
69
87
  if (rec.newToken) {
70
88
  const before = rec.oldRawValue !== undefined ? `\`${rec.oldRawValue}\` → ` : "";
71
- // Describe exactly the value the managed stylesheet wrote for this swap
72
- // (adapter literal or var(cssName)); a bare var(name) would be invalid
73
- // CSS for adapter tokens whose names are not custom-property names.
74
- return `- \`${rec.property}\`: ${before}\`${tokenReference(rec.newToken)}\`${conflictSuffix(rec)}`;
89
+ // Adapter token names are not always custom-property names, so emit the literal the stylesheet wrote.
90
+ return `- **Change:** ${property}: ${before}\`${tokenReference(rec.newToken)}\``;
75
91
  }
76
92
  if (rec.rawValue !== undefined) {
77
93
  const before = rec.oldRawValue !== undefined ? `\`${rec.oldRawValue}\` → ` : "";
78
- return `- \`${rec.property}\`: ${before}\`${rec.rawValue}\`${conflictSuffix(rec)}`;
94
+ return `- **Change:** ${property}: ${before}\`${rec.rawValue}\``;
79
95
  }
80
- return `- \`${rec.property}\`: (no value)`;
96
+ return `- **Change:** ${property}: (no value)`;
81
97
  }
82
98
  function sourceIntentLine(rec) {
83
99
  if (!rec.sourceProperty || rec.sourceProperty === rec.property)
@@ -86,27 +102,22 @@ function sourceIntentLine(rec) {
86
102
  return ` - Source declaration (CSSOM): \`${rec.sourceProperty}${authored}\`; preview edit uses physical \`${rec.property}\``;
87
103
  }
88
104
  function tokenChangeLine(rec) {
89
- return `- \`${rec.tokenName}\` (${rec.contextLabel}, ${rec.file}:${rec.line}): \`${rec.oldRawValue}\` → \`${rec.rawValue}\`${conflictSuffix(rec)}`;
105
+ return `- **Change:** \`${rec.tokenName}\` (${rec.contextLabel}, ${rec.file}:${rec.line}): \`${rec.oldRawValue}\` → \`${rec.rawValue}\``;
90
106
  }
91
107
  function componentChangeLine(rec) {
92
108
  const sourceGuidance = rec.authoredAs === "literal"
93
109
  ? rec.property === "children"
94
110
  ? "replace the literal child text"
95
- : "replace the invocation prop literal"
111
+ : ""
96
112
  : rec.authoredAs === "default"
97
113
  ? "add the prop at this invocation"
98
114
  : `preserve the authored ${rec.authoredAs} and update its source logic`;
99
- const scope = rec.scope === "rendered-instance"
100
- ? "this rendered item only"
101
- : "all outputs at this source site";
102
- return `- \`${rec.property}\`: \`${formatComponentPropBaseline(rec.before)}\` → \`${formatComponentPropValue(rec.after)}\` — ${sourceGuidance}; scope: ${scope}`;
115
+ return `- **Change:** \`${rec.property}\`: \`${formatComponentPropBaseline(rec.before)}\` → \`${formatComponentPropValue(rec.after)}\`${sourceGuidance ? ` — ${sourceGuidance}` : ""}`;
103
116
  }
104
- function textAuthorshipGuidance(authoredAs) {
105
- if (authoredAs === "literal")
106
- return "replace the authored literal text";
107
- if (authoredAs === "expression")
108
- return "preserve the expression and update its source logic";
109
- return "update the source that produces this rendered copy";
117
+ function editScopeLine(scope) {
118
+ return scope === "rendered-instance"
119
+ ? " - Apply to this selected item only; keep other instances unchanged."
120
+ : " - Apply to all items rendered at this source location.";
110
121
  }
111
122
  /** Keep arbitrary rendered copy valid inside the Markdown prompt. */
112
123
  function promptText(value) {
@@ -116,35 +127,62 @@ function promptText(value) {
116
127
  const fence = "~".repeat(Math.max(3, longestTildeRun + 1));
117
128
  return `${fence}text\n${value}\n${fence}`;
118
129
  }
119
- function textEvidenceLines(target) {
120
- const sourceLabel = isRuntimeGeneratedSource(target.sourceSite.src)
121
- ? `${target.sourceSite.cid} (source unknown; runtime-created DOM)`
122
- : `${target.sourceSite.cid} (\`${target.sourceSite.src}\`)`;
123
- const lines = [
124
- ` - Source site: ${sourceLabel}`,
125
- ];
126
- const props = boundRuntimeEvidence(target.props);
127
- const ariaLabel = boundRuntimeEvidence(target.ariaLabel);
128
- if (props)
129
- lines.push(` - Props evidence: ${promptText(props)}`);
130
- if (ariaLabel)
131
- lines.push(` - Accessible name evidence: ${promptText(ariaLabel)}`);
132
- return lines;
133
- }
134
- function textScopeLines(change) {
135
- const scope = change.scope === "source-site" ? "source site / all outputs" : "this rendered item only";
136
- const lines = [` - Scope: ${scope}`];
130
+ function textBindingLines(change, sourceLocation) {
131
+ const lines = [];
137
132
  if (change.evidence) {
138
- lines.push(` - Semantic evidence: \`${change.evidence.componentName}.${change.evidence.property}\` at callsite \`${change.evidence.callsiteId}\` (${change.evidence.mountedCount} mounted outputs)`);
133
+ const evidence = change.evidence;
134
+ const location = evidence.callsiteId === sourceLocation ? "" : ` at ${promptText(evidence.callsiteId)}`;
135
+ lines.push(` - Text source: ${promptText(`${evidence.componentName}.${evidence.property}`)}${location} (${evidence.mountedCount} rendered instances).`);
139
136
  }
140
137
  return lines;
141
138
  }
139
+ /** Shared presentation for captured facts; these do not change target matching. */
140
+ function targetEvidenceLines(evidence, example = false) {
141
+ const text = normalizeRuntimeText(evidence.text ?? null);
142
+ const ariaLabel = boundRuntimeEvidence(evidence.ariaLabel ?? null);
143
+ const elementId = boundRuntimeEvidence(evidence.elementId ?? null);
144
+ const props = boundRuntimeEvidence(evidence.props ?? null);
145
+ const lines = [];
146
+ if (elementId && !example)
147
+ lines.push(`- Element ID: ${promptText(elementId)}`);
148
+ if (text)
149
+ lines.push(`- ${example ? "Example text" : "Text"}: ${promptText(text)}`);
150
+ if (ariaLabel)
151
+ lines.push(`- ${example ? "Example accessible name" : "Accessible name"}: ${promptText(ariaLabel)}`);
152
+ if (props && props !== `id:${elementId}`)
153
+ lines.push(`- ${example ? "Example props" : "Props"}: ${promptText(props)}`);
154
+ if (evidence.domPath && !example)
155
+ lines.push(`- DOM path: ${promptText(evidence.domPath)}`);
156
+ return lines;
157
+ }
158
+ function readableTargetLabel(text, tag) {
159
+ if (tag)
160
+ return elementLabel(tag);
161
+ const bounded = normalizeRuntimeText(text);
162
+ return bounded ? `Text: ${inlineHeadingText(bounded)}` : "Element";
163
+ }
164
+ /** Use an inline code span even when copy contains Markdown delimiters. */
165
+ function inlineHeadingText(text) {
166
+ const runs = text.match(/`+/g) ?? [];
167
+ const delimiter = "`".repeat(Math.max(0, ...runs.map((run) => run.length)) + 1);
168
+ const padding = text.startsWith("`") || text.endsWith("`") ? " " : "";
169
+ return `${delimiter}${padding}${text}${padding}${delimiter}`;
170
+ }
142
171
  function boundedEvidence(value) {
143
172
  return boundRuntimeEvidence(value);
144
173
  }
145
174
  function sourceSiteLabel(ref) {
146
- if (isRuntimeGeneratedSource(ref.sourceSite.src)) {
147
- return `${ref.sourceSite.cid} (source unknown; runtime-created DOM)`;
175
+ if (!ref.sourceSite.src || isRuntimeGeneratedSource(ref.sourceSite.src)) {
176
+ const text = boundedEvidence(ref.locator.text);
177
+ const ariaLabel = boundedEvidence(ref.locator.ariaLabel ?? null);
178
+ const props = boundedEvidence(ref.locator.props);
179
+ if (ariaLabel)
180
+ return `the element named ${promptText(ariaLabel)}`;
181
+ if (text)
182
+ return `the element with text ${promptText(text)}`;
183
+ if (props)
184
+ return `the element with props ${promptText(props)}`;
185
+ return "the element";
148
186
  }
149
187
  return `${ref.sourceSite.cid} (${ref.sourceSite.src})`;
150
188
  }
@@ -159,32 +197,29 @@ function structuralParentIdentityKey(ref) {
159
197
  locator.ariaLabel ?? null,
160
198
  ]);
161
199
  }
162
- function runtimeEvidenceLines(group) {
163
- const evidence = group.runtimeEvidence;
164
- if (!evidence)
165
- return [];
166
- const tagName = normalizeRuntimeTag(evidence.tagName) || "unknown";
167
- const text = normalizeRuntimeText(evidence.text);
168
- const ariaLabel = boundRuntimeEvidence(evidence.ariaLabel);
169
- const props = boundRuntimeEvidence(evidence.props);
170
- const lines = [
171
- " - Source: unknown; locate the JavaScript or template that creates this runtime DOM.",
172
- ` - Rendered element: \`<${tagName}>\``,
173
- ];
174
- if (text)
175
- lines.push(` - Text evidence: ${promptText(text)}`);
176
- if (ariaLabel)
177
- lines.push(` - Accessible name evidence: ${promptText(ariaLabel)}`);
178
- if (props)
179
- lines.push(` - Props evidence: ${promptText(props)}`);
180
- return lines;
200
+ function elementEvidenceLines(group, example = false) {
201
+ const evidence = group.runtimeEvidence ?? group.sourceEvidence;
202
+ return evidence ? targetEvidenceLines(evidence, example)
203
+ : group.instanceOverride ? targetEvidenceLines(group.instanceOverride.target.locator, example) : [];
181
204
  }
182
- /**
183
- * Coordinate precision follows each element's identity origin, not the
184
- * document's framework hint (ADR-0011 Stage 5). The active host Adapter
185
- * declares which origins carry exact authored coordinates through the
186
- * runtime configuration; hosts that declare nothing are exact everywhere.
187
- */
205
+ /** Combine identical final requests for individually selected elements. */
206
+ function selectedStyleGroupKey(group) {
207
+ const requests = group.changes.map((change) => JSON.stringify([elementChangeLine(change), sourceIntentLine(change)])).sort();
208
+ return JSON.stringify(["selected-styles", requests]);
209
+ }
210
+ function selectedItemLine(group, sourceLocation) {
211
+ const facts = elementEvidenceLines(group).map((line) => line.slice(2));
212
+ if (sourceLocation)
213
+ facts.unshift(`Source: ${promptText(sourceLocation)}`);
214
+ const invocation = group.instanceOverride?.target.locator.invocation;
215
+ if (invocation)
216
+ facts.push(`Component usage: ${promptText(invocation.callsiteId)}`);
217
+ return ` - ${facts.join("; ") || "Selected element"}`;
218
+ }
219
+ function setHeading(label, tag) {
220
+ return tag ? `${label} (${promptText(`<${normalizeRuntimeTag(tag)}>`)})` : label;
221
+ }
222
+ /** Precision follows each element's identity origin, not the framework hint; hosts that declare nothing are exact everywhere. */
188
223
  function hasExactAuthoredCoordinates(policy, cid, file) {
189
224
  if (policy === null)
190
225
  return true;
@@ -193,40 +228,26 @@ function hasExactAuthoredCoordinates(policy, cid, file) {
193
228
  }
194
229
  return policy.exactFileExtensions.some((extension) => file.endsWith(extension));
195
230
  }
196
- /**
197
- * Formats one source location for a prompt heading. Exact origins keep the
198
- * authored column; line-only origins — and sites whose column is unknown —
199
- * degrade to `file:line` rather than fabricating precision.
200
- */
201
231
  function formatSourceLocation(policy, source) {
202
232
  if (hasExactAuthoredCoordinates(policy, source.cid, source.file) && source.column > 0) {
203
233
  return `${source.file}:${source.line}:${source.column}`;
204
234
  }
205
235
  return `${source.file}:${source.line}`;
206
236
  }
207
- function elementGroupSource(group, policy) {
208
- if (group.runtimeEvidence) {
209
- return group.runtimeEvidence.reason === "unannotated"
210
- ? "source unknown; no authored location available"
211
- : "source unknown; runtime-created DOM";
212
- }
213
- return formatSourceLocation(policy, group);
214
- }
215
237
  function renderedInstanceDescription(ref) {
216
238
  const text = boundedEvidence(ref.locator.text);
217
239
  const ariaLabel = boundedEvidence(ref.locator.ariaLabel ?? null);
218
240
  const props = boundedEvidence(ref.locator.props);
219
- const source = isRuntimeGeneratedSource(ref.sourceSite.src)
220
- ? sourceSiteLabel(ref)
221
- : ref.sourceSite.src;
241
+ const source = ref.sourceSite.src && !isRuntimeGeneratedSource(ref.sourceSite.src)
242
+ ? ` (${ref.sourceSite.src})`
243
+ : "";
222
244
  if (text)
223
- return `text ${promptText(text)} (${source})`;
245
+ return `text ${promptText(text)}${source}`;
224
246
  if (ariaLabel)
225
- return `the element named ${promptText(ariaLabel)} (${source})`;
247
+ return `the element named ${promptText(ariaLabel)}${source}`;
226
248
  if (props)
227
- return `the element with props ${promptText(props)} (${source})`;
228
- // With no semantic evidence, the ordinal is the only way to distinguish
229
- // repeated outputs from the same source site.
249
+ return `the element with props ${promptText(props)}${source}`;
250
+ // Without semantic evidence, the ordinal is the only way to distinguish repeated outputs from one source site.
230
251
  return `rendered instance ${ref.locator.occurrence + 1} of ${sourceSiteLabel(ref)}`;
231
252
  }
232
253
  function structuralChangeLine(change) {
@@ -290,9 +311,7 @@ function canonicalizeStructuralChanges(changes) {
290
311
  && first.presentation.fromIndex === latest.presentation.toIndex;
291
312
  if (returnedToStart)
292
313
  continue;
293
- // The final destination is the useful handoff. Keep the first source
294
- // context when the gesture crossed intermediate containers so the prompt
295
- // describes the authored move rather than the drag history.
314
+ // Keep the first source context so the prompt describes the authored move, not the drag history.
296
315
  if (first && first !== latest && latest.kind === "move") {
297
316
  canonical.push({
298
317
  ...latest,
@@ -310,7 +329,7 @@ function canonicalizeStructuralChanges(changes) {
310
329
  }
311
330
  return canonical;
312
331
  }
313
- /** Counts the final edit intents exported by the prompt, preserving gesture history for undo. */
332
+ /** Counts the exported intents, not the raw gesture history. */
314
333
  export function countPromptChanges(changes, structuralChanges = [], sketchCount = 0) {
315
334
  return canonicalizeChanges([...changes]).length + canonicalizeStructuralChanges(structuralChanges).length + sketchCount;
316
335
  }
@@ -332,82 +351,144 @@ export function generatePrompt(changes, frameworkHints, structuralChanges = [],
332
351
  lines: tokenChanges.map(tokenChangeLine),
333
352
  });
334
353
  }
335
- if (componentChanges.length > 0) {
336
- const lines = [];
337
- for (const change of componentChanges) {
338
- const target = change.target;
339
- const source = formatSourceLocation(coordinatePolicy, target);
340
- lines.push(`### ${target.componentName} invocation (${source})`);
341
- lines.push(componentChangeLine(change));
342
- lines.push(` - Component contract: \`${target.componentId}\``);
343
- if (change.evidence) {
344
- lines.push(` - Rendered evidence: ${change.evidence.mountedCount} mounted outputs`);
345
- if (change.evidence.props)
346
- lines.push(` - Props evidence: ${promptText(boundedEvidence(change.evidence.props) ?? "")}`);
347
- if (change.evidence.ariaLabel)
348
- lines.push(` - Accessible name evidence: ${promptText(boundedEvidence(change.evidence.ariaLabel) ?? "")}`);
349
- lines.push(` - Before text: ${promptText(change.evidence.beforeText)}`);
350
- }
351
- lines.push("");
354
+ const groups = new Map();
355
+ function groupFor(key, heading, tag) {
356
+ let group = groups.get(key);
357
+ if (!group) {
358
+ group = { heading, details: new Set(), lines: [] };
359
+ groups.set(key, group);
352
360
  }
353
- sections.push({ heading: "Component prop changes", lines });
361
+ if (tag)
362
+ group.heading = elementLabel(tag);
363
+ return group;
354
364
  }
355
- if (elementGroups.length > 0) {
356
- const lines = [];
357
- for (const group of elementGroups) {
358
- const state = group.changes[0]?.state ?? "base";
359
- lines.push(`### ${group.cid} (${elementGroupSource(group, coordinatePolicy)}) · ${state}`);
360
- if (group.instanceOverride) {
361
- lines.push(`- Applies only to ${renderedInstanceDescription(group.instanceOverride.target)}.`);
362
- }
363
- lines.push(...runtimeEvidenceLines(group));
364
- for (const change of group.changes) {
365
- lines.push(elementChangeLine(change));
365
+ for (const change of componentChanges) {
366
+ const target = change.target;
367
+ const evidence = change.evidence;
368
+ const scope = change.scope ?? "source-site";
369
+ const key = JSON.stringify(["component", target.callsiteId, scope, scope === "rendered-instance"
370
+ ? [evidence?.occurrence, evidence?.props, evidence?.ariaLabel] : null]);
371
+ const group = groupFor(key, `${target.componentName} component`);
372
+ group.lines.push(componentChangeLine(change));
373
+ group.lines.push(editScopeLine(scope));
374
+ group.details.add(`- Source: ${promptText(formatSourceLocation(coordinatePolicy, target))}`);
375
+ if (evidence) {
376
+ group.details.add(`- Rendered instances: ${evidence.mountedCount}`);
377
+ if (evidence.props)
378
+ group.details.add(`- Props: ${promptText(boundedEvidence(evidence.props) ?? "")}`);
379
+ if (evidence.ariaLabel)
380
+ group.details.add(`- Accessible name: ${promptText(boundedEvidence(evidence.ariaLabel) ?? "")}`);
381
+ group.details.add(`- Before text: ${promptText(evidence.beforeText)}`);
382
+ }
383
+ }
384
+ const selectedSets = new Map();
385
+ for (const element of elementGroups) {
386
+ if (!element.instanceOverride && element.changes[0]?.sourceInstanceCount !== 1)
387
+ continue;
388
+ const key = selectedStyleGroupKey(element);
389
+ const selected = selectedSets.get(key) ?? [];
390
+ selected.push(element);
391
+ selectedSets.set(key, selected);
392
+ }
393
+ const exportedSets = new Set();
394
+ for (const element of elementGroups) {
395
+ const first = element.changes[0];
396
+ const runtimeCreated = !!element.runtimeEvidence || !element.file || isRuntimeGeneratedSource(element.file);
397
+ const src = runtimeCreated ? "" : `${element.file}:${element.line}:${element.column}`;
398
+ const key = element.instanceOverride ? refPromptKey(element.instanceOverride.target)
399
+ : first.scope === "rendered-instance" && !runtimeCreated ? `style:${element.key}`
400
+ : elementPromptKey(element.cid, src, "source-site");
401
+ const tag = element.runtimeEvidence?.tagName ?? element.sourceEvidence?.tagName;
402
+ const label = readableTargetLabel(element.runtimeEvidence?.text ?? element.sourceEvidence?.text ?? null, tag);
403
+ const selectedKey = selectedStyleGroupKey(element);
404
+ const selected = element.instanceOverride || first.sourceInstanceCount === 1 ? selectedSets.get(selectedKey) ?? [] : [];
405
+ if (selected.length > 1) {
406
+ if (exportedSets.has(selectedKey))
407
+ continue;
408
+ exportedSets.add(selectedKey);
409
+ const tags = new Set(selected.map((item) => item.runtimeEvidence?.tagName ?? item.sourceEvidence?.tagName));
410
+ const group = groupFor(selectedKey, setHeading("Selected elements", tags.size === 1 ? tag : undefined));
411
+ const locations = selected.map((item) => !item.runtimeEvidence && item.file && !isRuntimeGeneratedSource(item.file)
412
+ ? formatSourceLocation(coordinatePolicy, item) : null);
413
+ const sharedLocation = new Set(locations).size === 1 ? locations[0] : null;
414
+ if (sharedLocation)
415
+ group.details.add(`- Source: ${promptText(sharedLocation)}`);
416
+ group.details.add(["- Selected items:", ...selected.map((item, index) => selectedItemLine(item, sharedLocation ? null : locations[index] ?? null))].join("\n"));
417
+ for (const change of element.changes) {
418
+ group.lines.push(`${elementChangeLine(change)} for these selected items.`);
366
419
  const intent = sourceIntentLine(change);
367
420
  if (intent)
368
- lines.push(intent);
421
+ group.lines.push(intent);
369
422
  }
370
- lines.push("");
423
+ continue;
371
424
  }
372
- sections.push({ heading: "Changes", lines });
373
- }
374
- if (textChanges.length > 0) {
375
- const lines = [];
376
- for (const change of textChanges) {
377
- const runtimeCreated = isRuntimeGeneratedSource(change.target.sourceSite.src);
378
- const textSource = runtimeCreated
379
- ? "source unknown; runtime-created DOM"
380
- : formatSourceLocation(coordinatePolicy, {
381
- cid: change.target.sourceSite.cid,
382
- file: change.source.file,
383
- line: change.source.line,
384
- column: change.source.column,
385
- });
386
- lines.push(`### ${change.source.component || change.target.sourceSite.cid} (${textSource})`);
387
- lines.push(`- Rendered text: ${promptText(change.before)} → ${promptText(change.after)} — ${textAuthorshipGuidance(change.authoredAs)}`);
388
- lines.push(...textScopeLines(change));
389
- lines.push(...textEvidenceLines(change.target));
390
- lines.push("");
425
+ const linked = !element.instanceOverride && !runtimeCreated && first.scope !== "rendered-instance"
426
+ && (element.changes.some((change) => (change.sourceInstanceCount ?? 1) > 1)
427
+ || first.scope === "source-site" && first.sourceInstanceCount === undefined);
428
+ const group = groupFor(key, label, tag);
429
+ if (linked)
430
+ group.heading = setHeading("Linked elements", tag);
431
+ if (!runtimeCreated) {
432
+ group.details.add(`- Source: \`${formatSourceLocation(coordinatePolicy, element)}\``);
433
+ }
434
+ for (const detail of elementEvidenceLines(element, linked))
435
+ group.details.add(detail);
436
+ for (const change of element.changes) {
437
+ const targetSet = linked ? " for all items rendered at this source location."
438
+ : element.instanceOverride ? " for this selected item." : "";
439
+ group.lines.push(`${elementChangeLine(change)}${targetSet}`);
440
+ const intent = sourceIntentLine(change);
441
+ if (intent)
442
+ group.lines.push(intent);
391
443
  }
392
- sections.push({ heading: "Rendered text changes", lines });
393
444
  }
394
- if (structuralIntent.length > 0) {
395
- sections.push({
396
- heading: "Structural changes",
397
- lines: structuralIntent.map(structuralChangeLine),
445
+ for (const change of textChanges) {
446
+ const target = change.target;
447
+ const runtimeCreated = !target.sourceSite.src || isRuntimeGeneratedSource(target.sourceSite.src);
448
+ const scope = change.scope ?? "rendered-instance";
449
+ const key = elementPromptKey(target.sourceSite.cid, target.sourceSite.src, scope, {
450
+ kind: "evidence", occurrence: target.occurrence, props: target.props, text: target.beforeText, ariaLabel: target.ariaLabel,
398
451
  });
399
- }
400
- if (comments.length > 0) {
401
- sections.push({
402
- heading: "Element comments",
403
- lines: comments.flatMap((comment) => [
404
- `### <${comment.tag}> (${comment.target.sourceSite.src || "source unknown"})`,
405
- `- Page: ${promptText(comment.route)}`,
406
- `- Target: ${renderedInstanceDescription(comment.target)}`,
407
- `- Note: ${promptText(comment.note)}`,
408
- "",
409
- ]),
452
+ const group = groupFor(key, readableTargetLabel(change.before, target.tagName), target.tagName);
453
+ const sourceLocation = runtimeCreated ? null : formatSourceLocation(coordinatePolicy, {
454
+ cid: target.sourceSite.cid, ...change.source,
410
455
  });
456
+ if (sourceLocation)
457
+ group.details.add(`- Source: ${promptText(sourceLocation)}`);
458
+ group.lines.push(`- **Change:** Replace text ${promptText(change.before)} with ${promptText(change.after)}.`);
459
+ if (change.scope)
460
+ group.lines.push(editScopeLine(change.scope));
461
+ if (change.authoredAs === "expression")
462
+ group.lines.push(" - Preserve the expression and update its source logic.");
463
+ group.lines.push(...textBindingLines(change, sourceLocation));
464
+ for (const detail of targetEvidenceLines({
465
+ ...target, text: group.heading.startsWith("Text:") ? null : target.beforeText,
466
+ }))
467
+ group.details.add(detail);
468
+ }
469
+ for (const change of structuralIntent) {
470
+ const ref = change.target;
471
+ const group = groupFor(refPromptKey(ref), readableTargetLabel(ref.locator.text));
472
+ group.lines.push(structuralChangeLine(change));
473
+ }
474
+ for (const comment of comments) {
475
+ const ref = comment.target;
476
+ const runtimeCreated = !ref.sourceSite.src || isRuntimeGeneratedSource(ref.sourceSite.src);
477
+ const group = groupFor(refPromptKey(ref), elementLabel(comment.tag), comment.tag);
478
+ if (!runtimeCreated) {
479
+ const parsed = /^(.*):(\d+):(\d+)$/.exec(ref.sourceSite.src);
480
+ const location = parsed ? formatSourceLocation(coordinatePolicy, {
481
+ cid: ref.sourceSite.cid, file: parsed[1], line: Number(parsed[2]), column: Number(parsed[3]),
482
+ }) : ref.sourceSite.src;
483
+ group.details.add(`- Source: ${promptText(location)}`);
484
+ }
485
+ group.details.add(`- Page: ${promptText(comment.route)}`);
486
+ for (const detail of targetEvidenceLines(ref.locator))
487
+ group.details.add(detail);
488
+ group.lines.push(`- **Note:** ${promptText(comment.note)}`);
489
+ }
490
+ for (const group of groups.values()) {
491
+ sections.push({ heading: group.heading, lines: group.details.size > 0 ? [...group.details, "", ...group.lines] : group.lines });
411
492
  }
412
493
  return renderPrompt(sections, customInstructions);
413
494
  }
@@ -0,0 +1,3 @@
1
+ export declare const PROMPT_TITLE = "# Requested design changes";
2
+ /** Keeps the title first when a host adds page or iteration instructions. */
3
+ export declare function withPromptContext(context: readonly string[], prompt: string): string;
@@ -0,0 +1,8 @@
1
+ export const PROMPT_TITLE = "# Requested design changes";
2
+ /** Keeps the title first when a host adds page or iteration instructions. */
3
+ export function withPromptContext(context, prompt) {
4
+ const body = prompt === PROMPT_TITLE || prompt.startsWith(`${PROMPT_TITLE}\n`)
5
+ ? prompt.slice(PROMPT_TITLE.length).trimStart()
6
+ : prompt;
7
+ return [PROMPT_TITLE, "", ...context, ...(body.trim() ? ["", body] : [])].join("\n");
8
+ }
@@ -1,8 +1,5 @@
1
- /** The default guidance included in every generated prompt. */
2
1
  export declare const DEFAULT_CUSTOM_INSTRUCTIONS = "Preserve existing tokens, logical properties, and CSS intent while applying these rendered changes.";
3
2
  declare function storageKey(projectId: string): string;
4
- /** Reads the project-scoped custom prompt instructions from browser storage. */
5
3
  export declare function loadCustomInstructions(projectId: string): string;
6
- /** Persists custom prompt instructions without making storage availability a prerequisite for editing. */
7
4
  export declare function saveCustomInstructions(projectId: string, instructions: string): void;
8
5
  export { storageKey as promptSettingsStorageKey };
@@ -1,25 +1,24 @@
1
- /** The default guidance included in every generated prompt. */
1
+ import { inspectorStorage } from "../runtime/inspectorStorage.js";
2
+ import { isDemoRuntime } from "../runtime/runtimeConfig.js";
2
3
  export const DEFAULT_CUSTOM_INSTRUCTIONS = "Preserve existing tokens, logical properties, and CSS intent while applying these rendered changes.";
3
4
  function storageKey(projectId) {
4
5
  return `nudge-ui:${projectId}:prompt-settings`;
5
6
  }
6
- /** Reads the project-scoped custom prompt instructions from browser storage. */
7
7
  export function loadCustomInstructions(projectId) {
8
- if (typeof localStorage === "undefined")
8
+ if (isDemoRuntime())
9
9
  return DEFAULT_CUSTOM_INSTRUCTIONS;
10
10
  try {
11
- return localStorage.getItem(storageKey(projectId)) ?? DEFAULT_CUSTOM_INSTRUCTIONS;
11
+ return inspectorStorage()?.getItem(storageKey(projectId)) ?? DEFAULT_CUSTOM_INSTRUCTIONS;
12
12
  }
13
13
  catch {
14
14
  return DEFAULT_CUSTOM_INSTRUCTIONS;
15
15
  }
16
16
  }
17
- /** Persists custom prompt instructions without making storage availability a prerequisite for editing. */
18
17
  export function saveCustomInstructions(projectId, instructions) {
19
- if (typeof localStorage === "undefined")
20
- return;
18
+ if (isDemoRuntime())
19
+ return; // demo runtimes never persist
21
20
  try {
22
- localStorage.setItem(storageKey(projectId), instructions);
21
+ inspectorStorage()?.setItem(storageKey(projectId), instructions);
23
22
  }
24
23
  catch {
25
24
  // Storage can be disabled or full; the in-memory UI state still applies.
@@ -1,28 +1,5 @@
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
- */
1
+ /** An explicit host flag wins; otherwise the bundler define; neither means not-development. */
10
2
  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
- */
3
+ /** For hosts whose compiler cannot supply the bundler define (Next.js/SWC); call before bootstrapping, `undefined` clears it. */
24
4
  export declare function setNudgeUiHostDevFlag(value: boolean | undefined): void;
25
- /**
26
- * Dev-phase gate shared by every inspector Module (ADR-0002).
27
- */
28
5
  export declare function isNudgeUiDev(): boolean;