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,4 +1,4 @@
1
- import { getActiveDraftChanges, getDraftChanges } from "./draftChanges.js";
1
+ import { getActiveDraftChanges, getDraftChanges } from "../drafts/store.js";
2
2
  const HOST_DOCUMENT = {
3
3
  logicalDocument: "host",
4
4
  sessionId: "host-document",
@@ -25,11 +25,9 @@ function notify() {
25
25
  for (const listener of listeners)
26
26
  listener();
27
27
  }
28
- /** Returns the stable host-document identity for this inspector lifetime. */
29
28
  export function getHostPreviewDocument() {
30
29
  return { ...HOST_DOCUMENT, draftId: getActiveDraftChanges().draftId };
31
30
  }
32
- /** Starts or replaces the live session for one logical document. */
33
31
  export function startPreviewDocumentSession(document) {
34
32
  const previousSession = activeSessions.get(document.logicalDocument);
35
33
  if (previousSession === document.sessionId)
@@ -46,7 +44,7 @@ export function startPreviewDocumentSession(document) {
46
44
  if (changed || previousSession !== undefined)
47
45
  notify();
48
46
  }
49
- /** Invalidates a live document session and rejects all of its late results. */
47
+ /** Late results from an invalidated session are rejected. */
50
48
  export function invalidatePreviewDocumentSession(logicalDocument, sessionId) {
51
49
  const activeSession = activeSessions.get(logicalDocument);
52
50
  if (activeSession === undefined || (sessionId !== undefined && activeSession !== sessionId))
@@ -63,7 +61,6 @@ export function invalidatePreviewDocumentSession(logicalDocument, sessionId) {
63
61
  if (changed || activeSession !== undefined)
64
62
  notify();
65
63
  }
66
- /** Opens a verification attempt for the currently active document session. */
67
64
  export function beginPreviewAttempt(document, revision = getDraftChanges(document.draftId ?? getActiveDraftChanges().draftId).revision) {
68
65
  const draftId = document.draftId ?? getActiveDraftChanges().draftId;
69
66
  if (revision !== getDraftChanges(draftId).revision || activeSessions.get(document.logicalDocument) !== document.sessionId) {
@@ -71,13 +68,9 @@ export function beginPreviewAttempt(document, revision = getDraftChanges(documen
71
68
  }
72
69
  const attempt = (attemptsBySession.get(sessionKey(document)) ?? 0) + 1;
73
70
  attemptsBySession.set(sessionKey(document), attempt);
74
- // Do not delete existing diagnostics here. The attempt stamp already
75
- // rejects late publishes per key; wiping would drop every other change's
76
- // status before it is re-verified (and drop all host status when Canvas
77
- // verification returns null).
71
+ // The attempt stamp already rejects late publishes per key; wiping here would drop other changes' statuses before re-verification.
78
72
  return { ...document, draftId, draftRevision: revision, attempt };
79
73
  }
80
- /** Publishes only a result from the active revision, session, and attempt. */
81
74
  export function publishPreviewDiagnostic(attempt, changeKey, result) {
82
75
  if (attempt.draftRevision !== getDraftChanges(attempt.draftId).revision
83
76
  || activeSessions.get(attempt.logicalDocument) !== attempt.sessionId
@@ -97,7 +90,6 @@ export function publishPreviewDiagnostic(attempt, changeKey, result) {
97
90
  notify();
98
91
  return true;
99
92
  }
100
- /** Removes diagnostics for the supplied canonical keys across live documents. */
101
93
  export function clearPreviewDiagnostics(changeKeys) {
102
94
  const keys = changeKeys ? new Set(changeKeys) : null;
103
95
  let changed = false;
@@ -110,25 +102,17 @@ export function clearPreviewDiagnostics(changeKeys) {
110
102
  if (changed)
111
103
  notify();
112
104
  }
113
- /** Notifies consumers when verification state changes without a result. */
114
105
  export function notifyPreviewDiagnostics() {
115
106
  notify();
116
107
  }
117
108
  export function getPreviewDiagnostic(changeKey, logicalDocument = HOST_DOCUMENT.logicalDocument, draftId = getActiveDraftChanges().draftId) {
118
- // Pure getter: never sync or notify. It runs on the React render path via
119
- // StaleChangeIndicator, so side effects here would clear state mid-render.
120
- // Diagnostics survive workspace revisions until overwritten or explicitly
121
- // cleared; publish-time stamps reject stale results per key.
109
+ // Pure getter: it runs on the React render path, so side effects here would clear state mid-render.
122
110
  const sessionId = activeSessions.get(logicalDocument);
123
111
  if (!sessionId)
124
112
  return undefined;
125
113
  return diagnostics.get(storageKey({ logicalDocument, sessionId, draftId }, changeKey));
126
114
  }
127
- /**
128
- * Host-first read across live documents. The per-document store is observable
129
- * here so a Canvas-only conflict is not write-only; host remains the default
130
- * for single-document consumers.
131
- */
115
+ /** Also reads non-host documents so Canvas-only conflicts are not write-only. */
132
116
  export function getAnyPreviewDiagnostic(changeKey) {
133
117
  const host = getPreviewDiagnostic(changeKey, HOST_DOCUMENT.logicalDocument);
134
118
  if (host)
@@ -0,0 +1,25 @@
1
+ import { type ChangeRecord, type PreviewableChangeRecord } from "./types.js";
2
+ import { type PreviewAttempt } from "./previewDiagnostics.js";
3
+ import type { PreviewResult } from "../projection/managedStylesheet.js";
4
+ /** The two effects the cycle performs; tests replace them to observe sequencing. */
5
+ export interface PreviewVerificationEffects {
6
+ verify(change: PreviewableChangeRecord, target: HTMLElement | null, document: Document): PreviewResult | null;
7
+ publish(attempt: PreviewAttempt, key: string, result: PreviewResult): void;
8
+ }
9
+ export interface PreviewVerificationRequest {
10
+ /** The full surviving change set: cascade and specificity make earlier results depend on later rules. */
11
+ readonly changes: readonly ChangeRecord[];
12
+ readonly document: Document;
13
+ readonly attempt: PreviewAttempt;
14
+ /** Resolves the element a change was committed against; null verifies against the document alone. */
15
+ readonly targetFor: (change: PreviewableChangeRecord) => HTMLElement | null;
16
+ /** False when a newer revision replaced this attempt. */
17
+ readonly isCurrent?: () => boolean;
18
+ /** Runs a follow-up check after the browser settles an animation; omitted to skip the retry. */
19
+ readonly retryAnimation?: (run: () => void) => void;
20
+ }
21
+ /**
22
+ * Owns the verify-and-publish cycle shared by the host document and Canvas frames:
23
+ * one preview attempt, every previewable change, one diagnostic per conflict.
24
+ */
25
+ export declare function verifyPreviewChanges(request: PreviewVerificationRequest, effects?: PreviewVerificationEffects): void;
@@ -0,0 +1,34 @@
1
+ import { changeKey } from "./model.js";
2
+ import { verifyManagedStyleProjection } from "./managedStyleProjection.js";
3
+ import { isPreviewableChange } from "./types.js";
4
+ import { publishPreviewDiagnostic } from "./previewDiagnostics.js";
5
+ const defaultEffects = {
6
+ verify: (change, target, document) => verifyManagedStyleProjection(change, target, document),
7
+ publish: (attempt, key, result) => publishPreviewDiagnostic(attempt, key, result),
8
+ };
9
+ /**
10
+ * Owns the verify-and-publish cycle shared by the host document and Canvas frames:
11
+ * one preview attempt, every previewable change, one diagnostic per conflict.
12
+ */
13
+ export function verifyPreviewChanges(request, effects = defaultEffects) {
14
+ for (const change of request.changes) {
15
+ if (!isPreviewableChange(change))
16
+ continue;
17
+ const result = effects.verify(change, request.targetFor(change), request.document);
18
+ if (!result)
19
+ continue;
20
+ effects.publish(request.attempt, changeKey(change), result);
21
+ if (result.status === "conflict" && result.reason === "animation") {
22
+ scheduleSettledRetry(request, change, effects);
23
+ }
24
+ }
25
+ }
26
+ function scheduleSettledRetry(request, change, effects) {
27
+ request.retryAnimation?.(() => {
28
+ if (request.isCurrent && !request.isCurrent())
29
+ return;
30
+ const settled = effects.verify(change, request.targetFor(change), request.document);
31
+ if (settled)
32
+ effects.publish(request.attempt, changeKey(change), settled);
33
+ });
34
+ }
@@ -1,15 +1,13 @@
1
1
  import type { RenderedInstanceRef } from "./editModel.js";
2
- /** Controller-owned intent to remove one rendered instance. */
3
2
  export interface StructuralDelete {
4
3
  id: string;
5
4
  kind: "delete";
6
5
  target: RenderedInstanceRef;
7
6
  /** Hash-independent route where the target was captured. */
8
7
  route?: string;
9
- /** Bounded view identity where the target was captured. */
8
+ /** View identity where the target was captured. */
10
9
  state?: string;
11
10
  }
12
- /** Controller-owned intent to move one rendered instance. */
13
11
  export interface StructuralMove {
14
12
  id: string;
15
13
  kind: "move";
@@ -34,6 +32,6 @@ export type StructuralProjectionReason = "target" | "source-parent" | "destinati
34
32
  export interface StructuralProjectionReport {
35
33
  changeId: string;
36
34
  status: StructuralProjectionStatus;
37
- /** Bounded diagnostic data; it never changes canonical structural intent. */
35
+ /** Diagnostic only; never changes canonical structural intent. */
38
36
  reason?: StructuralProjectionReason;
39
37
  }
@@ -1,22 +1,25 @@
1
1
  import type { TokenEntry } from "../../css/model/index.js";
2
2
  import type { ComponentChangeRecord } from "../componentSemantics/types.js";
3
3
  import type { EditScope, RenderedInstanceOverride, StyleRuleContext, TextContentChangeRecord } from "./editModel.js";
4
- /** Bounded rendered facts retained for one element without an authored source location. */
5
4
  export interface RuntimeElementEvidence {
6
- /**
7
- * Why the location is unknown; prompts phrase their guidance accordingly.
8
- * Omitted by legacy records, which are all runtime-created DOM.
9
- */
5
+ /** Omitted by legacy records, which are all runtime-created DOM. */
10
6
  reason?: "runtime-created" | "unannotated";
11
7
  tagName: string;
12
8
  text: string | null;
13
9
  props: string | null;
14
10
  ariaLabel: string | null;
11
+ /** Nearest-ancestor selector path; omitted by records captured before it existed. */
12
+ domPath?: string | null;
13
+ elementId?: string | null;
15
14
  }
16
- /** Bounded authored facts for one annotated element. */
17
15
  export interface SourceElementEvidence {
18
16
  tagName: string;
19
17
  props: string | null;
18
+ /** Omitted by older saved changes. */
19
+ text?: string | null;
20
+ ariaLabel?: string | null;
21
+ domPath?: string | null;
22
+ elementId?: string | null;
20
23
  }
21
24
  export interface ElementChangeRecord {
22
25
  kind?: "element";
@@ -27,7 +30,6 @@ export interface ElementChangeRecord {
27
30
  column?: number;
28
31
  selector: string;
29
32
  property: string;
30
- /** CSSOM-declared source context that the inspector projection came from. */
31
33
  sourceProperty?: string;
32
34
  /** Best-effort CSSOM serialization; not an exact source-text quote. */
33
35
  sourceAuthoredValue?: string;
@@ -40,11 +42,12 @@ export interface ElementChangeRecord {
40
42
  line: number;
41
43
  component: string;
42
44
  };
43
- /** Present when the selected element has a document-local runtime identity. */
44
45
  runtimeEvidence?: RuntimeElementEvidence;
45
46
  /** Authored facts that relocate the source site after its position shifts. */
46
47
  sourceEvidence?: SourceElementEvidence;
47
48
  scope?: EditScope;
49
+ /** Presentation only; absent from older edits. */
50
+ sourceInstanceCount?: number;
48
51
  /** Durable, controller-owned target for one rendered output. */
49
52
  instanceOverride?: RenderedInstanceOverride;
50
53
  state?: "base" | "hover" | "active" | "focus" | "focus-visible" | "disabled";
@@ -1,13 +1,13 @@
1
1
  import { type NudgeUiRuntimeConfig } from "./runtime/runtimeConfig.js";
2
+ import { NUDGE_UI_MANIFEST_VERSION } from "../transport/index.js";
2
3
  export type { NudgeUiRuntimeConfig, NudgeUiRuntimeFeatures } from "./runtime/runtimeConfig.js";
3
4
  export { detectStylingSystem } from "./runtime/runtimeConfig.js";
4
- /** Version of the host-to-inspector runtime manifest Interface. */
5
- export declare const NUDGE_UI_CLIENT_MANIFEST_VERSION = 1;
6
- /** Runtime document consumed by the self-contained inspector client. */
7
- export interface NudgeUiClientManifest {
5
+ /** The client envelope shares one version with the transport module that serves it. */
6
+ export declare const NUDGE_UI_CLIENT_MANIFEST_VERSION: typeof NUDGE_UI_MANIFEST_VERSION;
7
+ export interface NudgeUiClientManifest<Runtime extends NudgeUiRuntimeConfig = NudgeUiRuntimeConfig> {
8
8
  readonly version: typeof NUDGE_UI_CLIENT_MANIFEST_VERSION;
9
9
  readonly revision: number;
10
- readonly runtime: NudgeUiRuntimeConfig;
10
+ readonly runtime: Runtime;
11
11
  /** Project-owned, loopback-only agent bridge started by the dev host. */
12
12
  readonly agentBridge?: {
13
13
  readonly baseUrl: string;
@@ -27,5 +27,16 @@ export interface NudgeUiClientManifest {
27
27
  /** Set by `NUDGE_UI=1`: automated browsers open the editor instead of the plain app. */
28
28
  readonly inspectAutomatedBrowsers?: true;
29
29
  }
30
- /** Parses and normalizes an external manifest before it replaces inspector state. */
30
+ /** Everything host Adapters supply; the envelope fields are owned here. */
31
+ export interface NudgeUiClientManifestInput<Runtime extends NudgeUiRuntimeConfig = NudgeUiRuntimeConfig> {
32
+ readonly runtime: Runtime;
33
+ readonly revision?: number;
34
+ readonly agentBridge?: NudgeUiClientManifest["agentBridge"];
35
+ readonly document?: NudgeUiClientManifest["document"];
36
+ readonly reload?: NudgeUiClientManifest["reload"];
37
+ readonly inspectAutomatedBrowsers?: true;
38
+ }
39
+ /** Builds one envelope so every host publishes the same version and field set. */
40
+ export declare function createNudgeUiClientManifest<Runtime extends NudgeUiRuntimeConfig>(input: NudgeUiClientManifestInput<Runtime>): NudgeUiClientManifest<Runtime>;
41
+ /** Narrows and normalizes an untrusted manifest before it replaces inspector state. */
31
42
  export declare function parseNudgeUiClientManifest(value: unknown): NudgeUiClientManifest | null;
@@ -1,8 +1,21 @@
1
1
  import { normalizeNudgeUiRuntimeConfig, } from "./runtime/runtimeConfig.js";
2
+ import { NUDGE_UI_MANIFEST_VERSION } from "../transport/index.js";
2
3
  export { detectStylingSystem } from "./runtime/runtimeConfig.js";
3
- /** Version of the host-to-inspector runtime manifest Interface. */
4
- export const NUDGE_UI_CLIENT_MANIFEST_VERSION = 1;
5
- /** Parses and normalizes an external manifest before it replaces inspector state. */
4
+ /** The client envelope shares one version with the transport module that serves it. */
5
+ export const NUDGE_UI_CLIENT_MANIFEST_VERSION = NUDGE_UI_MANIFEST_VERSION;
6
+ /** Builds one envelope so every host publishes the same version and field set. */
7
+ export function createNudgeUiClientManifest(input) {
8
+ return {
9
+ version: NUDGE_UI_CLIENT_MANIFEST_VERSION,
10
+ revision: input.revision ?? 0,
11
+ runtime: input.runtime,
12
+ ...(input.agentBridge ? { agentBridge: input.agentBridge } : {}),
13
+ ...(input.document ? { document: input.document } : {}),
14
+ ...(input.reload ? { reload: input.reload } : {}),
15
+ ...(input.inspectAutomatedBrowsers ? { inspectAutomatedBrowsers: true } : {}),
16
+ };
17
+ }
18
+ /** Narrows and normalizes an untrusted manifest before it replaces inspector state. */
6
19
  export function parseNudgeUiClientManifest(
7
20
  // JSON is untrusted at this I/O boundary and is narrowed below.
8
21
  // oxlint-disable-next-line anti-slop/no-unknown-parameters
@@ -4,7 +4,9 @@ import { IconCheck, IconTrash } from "@tabler/icons-react";
4
4
  import { useCanvasMode } from "../canvas/viewStore.js";
5
5
  import { getRegisteredFrames } from "../canvas/projection.js";
6
6
  import { subscribeCanvasRendererMessages } from "../canvas/rendererMessageRouter.js";
7
- import { RENDERER_ELEMENT_ID_ATTR } from "../canvas/rendererCidIndex.js";
7
+ import { measureFrameViewport, toViewportPoint } from "../canvas/frameConnection.js";
8
+ import { canvasFrameElement } from "../canvas/canvasFrame.js";
9
+ import { getElementComputedStyle } from "../runtime/domRealm.js";
8
10
  import { captureRenderedInstance } from "../projection/renderedInstance.js";
9
11
  import { IconButton } from "../ui/IconButton.js";
10
12
  import { TextInput } from "../ui/TextInput.js";
@@ -12,21 +14,23 @@ import { commentFingerprint, commentViewport, resolveCommentElement } from "./el
12
14
  import { commentRoute, getCommentClearRevision, isCommentToolActive, removeComment, saveComment, subscribeComments, useComments, useCommentToolActive } from "./store.js";
13
15
  import { isReadingCommentSource, readCommentSource, reconcileComments } from "./verification.js";
14
16
  const styles = ".comment-pin {\n position: fixed;\n z-index: 10;\n display: grid;\n place-items: center;\n width: var(--icon-size-large);\n height: var(--icon-size-large);\n padding: 0;\n border: 2px solid var(--surface-raised-2x);\n border-radius: 50%;\n background: var(--accent);\n box-shadow: var(--shadow-popup);\n cursor: pointer;\n pointer-events: auto;\n}\n\n.comment-editor-backdrop {\n position: fixed;\n inset: 0;\n z-index: 11;\n pointer-events: auto;\n}\n\n.comment-editor {\n position: fixed;\n z-index: 12;\n display: flex;\n align-items: center;\n gap: var(--space-4);\n width: min(384px, calc(100vw - 16px));\n box-sizing: border-box;\n padding: var(--space-8);\n border-radius: var(--radius-12);\n background: var(--surface-raised-2x);\n box-shadow: var(--shadow-popup);\n pointer-events: auto;\n}\n\n.comment-editor .text-input { flex: 1; min-width: 0; padding-inline: var(--space-8); }\n.comment-editor__error { position: absolute; top: 100%; left: 0; padding: var(--space-8); background: var(--surface-raised-2x); color: var(--text-primary); border-radius: var(--radius-control); }\n";
17
+ import { InspectorStyle } from "../ui/InspectorStyle.js";
18
+ const CHECK_DELAY_MS = 450;
19
+ const MAX_CHECK_DELAY_MS = 8_000;
15
20
  function sameAnchor(left, right) {
16
21
  return left?.left === right?.left && left?.top === right?.top;
17
22
  }
18
23
  function anchorFor(iframe, element) {
19
24
  if (!element.isConnected || iframe.contentDocument !== element.ownerDocument)
20
25
  return null;
21
- // Focus view keeps other frames mounted, but their pins must stay hidden.
22
- if (getComputedStyle(iframe).visibility !== "visible")
26
+ // Focus view keeps real frames mounted, but their pins must stay hidden.
27
+ const frameElement = canvasFrameElement(iframe);
28
+ if (frameElement && getElementComputedStyle(frameElement).visibility !== "visible")
23
29
  return null;
24
- const frame = iframe.getBoundingClientRect();
30
+ const frame = measureFrameViewport(iframe);
25
31
  const rect = element.getBoundingClientRect();
26
- const scale = frame.width / (iframe.clientWidth || frame.width);
27
- const left = frame.left + rect.right * scale;
28
- const top = frame.top + rect.top * scale;
29
- if (top < frame.top || top > frame.bottom || left < frame.left || left > frame.right)
32
+ const { x: left, y: top } = toViewportPoint(frame, { x: rect.right, y: rect.top });
33
+ if (top < frame.top || top > frame.top + frame.height || left < frame.left || left > frame.left + frame.width)
30
34
  return null;
31
35
  return { left, top };
32
36
  }
@@ -75,17 +79,17 @@ export function CommentsOverlay() {
75
79
  window.addEventListener("keydown", dismissOnEscape, true);
76
80
  return () => window.removeEventListener("keydown", dismissOnEscape, true);
77
81
  }, [draft]);
78
- useEffect(() => subscribeCanvasRendererMessages(({ iframe, message }) => {
82
+ useEffect(() => subscribeCanvasRendererMessages(({ frame, message }) => {
79
83
  if (message.type === "element-click" && isCommentToolActive()) {
80
- const element = iframe.contentDocument?.querySelector(`[${RENDERER_ELEMENT_ID_ATTR}="${message.elementId}"]`);
81
- if (element && element.getAttribute("data-cid") === message.cid && (element.getAttribute("data-src") ?? "") === message.src) {
82
- openDraft({ element, iframe });
83
- }
84
+ const element = frame.element(message);
85
+ if (element)
86
+ openDraft({ element, iframe: frame.iframe });
84
87
  }
85
88
  if (message.type === "element-deselect")
86
89
  setDraft(null);
87
- if (message.type === "frame-ready" && iframe.contentDocument) {
88
- void reconcileComments(iframe.contentDocument).catch(() => undefined);
90
+ const frameDocument = frame.document();
91
+ if (message.type === "frame-ready" && frameDocument) {
92
+ void reconcileComments(frameDocument).catch(() => undefined);
89
93
  }
90
94
  }), []);
91
95
  useEffect(() => {
@@ -147,6 +151,35 @@ export function CommentsOverlay() {
147
151
  useEffect(() => {
148
152
  if (!comments.some((comment) => comment.handedOff))
149
153
  return;
154
+ // A check briefly removes every preview, so checks that resolve nothing back off to avoid flashing on continuously mutating pages.
155
+ const run = (doc, observation) => {
156
+ observation.timer = null;
157
+ if (observation.checking)
158
+ return;
159
+ observation.checking = true;
160
+ void reconcileComments(doc).then((removed) => {
161
+ observation.interval = removed > 0 ? CHECK_DELAY_MS : Math.min(observation.interval * 2, MAX_CHECK_DELAY_MS);
162
+ }, () => undefined).finally(() => {
163
+ observation.lastCheckEndedAt = Date.now();
164
+ setTimeout(() => {
165
+ observation.checking = false;
166
+ if (!observation.pending || observations.current.get(doc) !== observation)
167
+ return;
168
+ observation.pending = false;
169
+ schedule(doc, observation);
170
+ }, 0);
171
+ });
172
+ };
173
+ const schedule = (doc, observation) => {
174
+ if (observation.checking) {
175
+ observation.pending = true;
176
+ return;
177
+ }
178
+ if (observation.timer !== null)
179
+ return;
180
+ // Let the change that triggered this settle, and keep the backoff interval.
181
+ observation.timer = setTimeout(() => run(doc, observation), Math.max(CHECK_DELAY_MS, observation.lastCheckEndedAt + observation.interval - Date.now()));
182
+ };
150
183
  const refresh = () => {
151
184
  const documents = new Set([...getRegisteredFrames()].map(([, iframe]) => iframe.contentDocument).filter((doc) => doc !== null));
152
185
  for (const [doc, observation] of observations.current) {
@@ -171,21 +204,31 @@ export function CommentsOverlay() {
171
204
  return false;
172
205
  return true;
173
206
  });
174
- if (!sourceChanged)
175
- return;
176
- if (observation.timer)
177
- clearTimeout(observation.timer);
178
- observation.timer = setTimeout(() => { void reconcileComments(doc).catch(() => undefined); }, 200);
179
- }), timer: null };
207
+ if (sourceChanged)
208
+ schedule(doc, observation);
209
+ }), timer: null, checking: false, pending: false, interval: CHECK_DELAY_MS, lastCheckEndedAt: -Infinity };
180
210
  observation.observer.observe(doc.documentElement, { subtree: true, childList: true, characterData: true, attributes: true });
181
211
  observations.current.set(doc, observation);
182
- void reconcileComments(doc).catch(() => undefined);
212
+ run(doc, observation);
213
+ }
214
+ };
215
+ // Returning to the page is when an agent's source edit is most likely to have landed.
216
+ const returned = () => {
217
+ for (const [doc, observation] of observations.current) {
218
+ observation.interval = CHECK_DELAY_MS;
219
+ observation.lastCheckEndedAt = -Infinity;
220
+ if (observation.timer)
221
+ clearTimeout(observation.timer);
222
+ observation.timer = null;
223
+ schedule(doc, observation);
183
224
  }
184
225
  };
185
226
  refresh();
186
227
  const timer = setInterval(refresh, 500);
228
+ window.addEventListener("focus", returned);
187
229
  return () => {
188
230
  clearInterval(timer);
231
+ window.removeEventListener("focus", returned);
189
232
  for (const observation of observations.current.values()) {
190
233
  observation.observer.disconnect();
191
234
  if (observation.timer)
@@ -239,7 +282,7 @@ export function CommentsOverlay() {
239
282
  }
240
283
  if (mode !== "canvas")
241
284
  return null;
242
- return _jsxs(_Fragment, { children: [_jsx("style", { children: styles }), comments.flatMap((comment) => [...anchors].filter(([key]) => key.startsWith(`${comment.id}:`)).map(([key, anchor]) => (_jsx("button", { type: "button", className: "comment-pin", "data-test": "comment-pin", "aria-label": `Comment: ${comment.note}`, title: comment.note, style: anchor, onClick: () => {
285
+ return _jsxs(_Fragment, { children: [_jsx(InspectorStyle, { css: styles }), comments.flatMap((comment) => [...anchors].filter(([key]) => key.startsWith(`${comment.id}:`)).map(([key, anchor]) => (_jsx("button", { type: "button", className: "comment-pin", "data-test": "comment-pin", "aria-label": `Comment: ${comment.note}`, title: comment.note, style: anchor, onClick: () => {
243
286
  const bound = bindings.current.get(key);
244
287
  if (bound)
245
288
  openDraft({ ...bound, existing: comment });
@@ -1,6 +1,5 @@
1
1
  import type { RenderedInstanceRef } from "../changes/editModel.js";
2
- /** Retains a changed target only when its source site still identifies one output. */
3
2
  export declare function resolveCommentElement(doc: Document, target: RenderedInstanceRef): HTMLElement | null;
4
3
  export declare function commentViewport(doc: Document): string;
5
- /** Captures rendered content and appearance, excluding inspector identity and transient cursors. */
4
+ /** Ignores inspector identity attributes and transient cursor styling. */
6
5
  export declare function commentFingerprint(element: HTMLElement): string;
@@ -1,6 +1,5 @@
1
1
  import { resolveRenderedInstance } from "../projection/renderedInstance.js";
2
2
  import { relocateSourceSite, sourceSiteSelector } from "../selection/sourceSite.js";
3
- /** Retains a changed target only when its source site still identifies one output. */
4
3
  export function resolveCommentElement(doc, target) {
5
4
  const exact = resolveRenderedInstance(doc, target);
6
5
  if (exact.status === "resolved")
@@ -28,7 +27,7 @@ export function resolveCommentElement(doc, target) {
28
27
  export function commentViewport(doc) {
29
28
  return `${doc.defaultView?.innerWidth}:${doc.defaultView?.innerHeight}`;
30
29
  }
31
- /** Captures rendered content and appearance, excluding inspector identity and transient cursors. */
30
+ /** Ignores inspector identity attributes and transient cursor styling. */
32
31
  export function commentFingerprint(element) {
33
32
  const clone = element.cloneNode(true);
34
33
  for (const node of [clone, ...clone.querySelectorAll("*")]) {
@@ -21,7 +21,7 @@ export declare function removeComment(id: string): void;
21
21
  export declare function getCommentClearRevision(): number;
22
22
  /** Clears saved notes and invalidates any open or saving comment draft. */
23
23
  export declare function clearComments(target?: DraftTarget): void;
24
- /** Arms only the exact notes successfully copied or accepted by an agent. */
24
+ /** Marks only exact id+note matches, so an edited note is not marked handed off. */
25
25
  export declare function markCommentsHandedOff(sent: readonly ElementComment[]): void;
26
26
  export declare function setCommentToolActive(active: boolean): void;
27
27
  export declare function isCommentToolActive(): boolean;
@@ -1,3 +1,4 @@
1
+ import { inspectorStorage } from "../runtime/inspectorStorage.js";
1
2
  import { useSyncExternalStore } from "react";
2
3
  import { isRenderedInstanceRef } from "../changes/editModel.js";
3
4
  import { useCanvasCards, useFocusedCardId, useSelectedCardId } from "../canvas/canvasStore.js";
@@ -29,7 +30,7 @@ export function getComments() {
29
30
  loadedKey = key;
30
31
  loadedDemo = demo;
31
32
  try {
32
- const saved = demo ? [] : JSON.parse(localStorage.getItem(key) ?? "[]");
33
+ const saved = demo ? [] : JSON.parse(inspectorStorage()?.getItem(key) ?? "[]");
33
34
  comments = Array.isArray(saved) ? saved.filter(isComment) : [];
34
35
  }
35
36
  catch {
@@ -51,7 +52,7 @@ function publish(next) {
51
52
  comments = next;
52
53
  if (getNudgeUiRuntimeConfig().demo !== true) {
53
54
  try {
54
- localStorage.setItem(storageKey(), JSON.stringify(next));
55
+ inspectorStorage()?.setItem(storageKey(), JSON.stringify(next));
55
56
  }
56
57
  catch { }
57
58
  }
@@ -93,7 +94,7 @@ export function clearComments(target) {
93
94
  const cleared = new Set((target ? getCommentsForTarget(target) : getComments()).map((comment) => comment.id));
94
95
  publish(getComments().filter((comment) => !cleared.has(comment.id)));
95
96
  }
96
- /** Arms only the exact notes successfully copied or accepted by an agent. */
97
+ /** Marks only exact id+note matches, so an edited note is not marked handed off. */
97
98
  export function markCommentsHandedOff(sent) {
98
99
  publish(getComments().map((item) => sent.some((candidate) => candidate.id === item.id && candidate.note === item.note)
99
100
  ? { ...item, handedOff: true } : item));
@@ -1,5 +1,11 @@
1
+ import { isCanvasProjectionRevisionCurrent, projectDraftToDocument } from "../canvas/projection.js";
2
+ /** Controller transport used while reconciling notes; tests replace the renderer round-trip. */
3
+ export interface CommentProjectionTransport {
4
+ readonly projectDraftToDocument: typeof projectDraftToDocument;
5
+ readonly isCanvasProjectionRevisionCurrent: typeof isCanvasProjectionRevisionCurrent;
6
+ }
1
7
  export declare function isReadingCommentSource(doc: Document): boolean;
2
8
  /** Serializes clean reads and restores the latest previews even if the read fails. */
3
- export declare function readCommentSource<T>(doc: Document, read: () => T): Promise<T | null>;
9
+ export declare function readCommentSource<T>(doc: Document, read: () => T, transport?: CommentProjectionTransport): Promise<T | null>;
4
10
  /** Changed, uniquely located elements resolve after handoff; missing and ambiguous targets remain. */
5
- export declare function reconcileComments(doc: Document): Promise<void>;
11
+ export declare function reconcileComments(doc: Document, transport?: CommentProjectionTransport): Promise<number>;
@@ -1,25 +1,29 @@
1
- import { getDraftChanges } from "../changes/draftChanges.js";
1
+ import { getDraftChanges } from "../drafts/store.js";
2
2
  import { documentTarget, targetKey } from "../drafts/model.js";
3
3
  import { isCanvasProjectionRevisionCurrent, projectDraftToDocument } from "../canvas/projection.js";
4
4
  import { commentFingerprint, commentViewport, resolveCommentElement } from "./element.js";
5
5
  import { commentRoute, getCommentClearRevision, getComments, removeComment } from "./store.js";
6
6
  const documentReads = new WeakMap();
7
7
  const readingDocuments = new WeakSet();
8
+ const controllerTransport = {
9
+ projectDraftToDocument,
10
+ isCanvasProjectionRevisionCurrent,
11
+ };
8
12
  export function isReadingCommentSource(doc) { return readingDocuments.has(doc); }
9
13
  /** Serializes clean reads and restores the latest previews even if the read fails. */
10
- export function readCommentSource(doc, read) {
14
+ export function readCommentSource(doc, read, transport = controllerTransport) {
11
15
  const previous = documentReads.get(doc) ?? Promise.resolve();
12
16
  const operation = previous.catch(() => undefined).then(async () => {
13
17
  readingDocuments.add(doc);
14
18
  try {
15
- const revision = await projectDraftToDocument(doc, { changes: [], structuralChanges: [] });
16
- if (revision === null || !isCanvasProjectionRevisionCurrent(doc, revision))
19
+ const revision = await transport.projectDraftToDocument(doc, { changes: [], structuralChanges: [] });
20
+ if (revision === null || !transport.isCanvasProjectionRevisionCurrent(doc, revision))
17
21
  return null;
18
22
  return read();
19
23
  }
20
24
  finally {
21
25
  try {
22
- await projectDraftToDocument(doc, getDraftChanges(targetKey(documentTarget(doc.location.href))));
26
+ await transport.projectDraftToDocument(doc, getDraftChanges(targetKey(documentTarget(doc.location.href))));
23
27
  // Deliver projection mutation records before accepting another source signal.
24
28
  await new Promise((resolve) => setTimeout(resolve, 0));
25
29
  }
@@ -32,21 +36,25 @@ export function readCommentSource(doc, read) {
32
36
  return operation;
33
37
  }
34
38
  /** Changed, uniquely located elements resolve after handoff; missing and ambiguous targets remain. */
35
- export async function reconcileComments(doc) {
39
+ export async function reconcileComments(doc, transport = controllerTransport) {
36
40
  const revision = getCommentClearRevision();
37
41
  const sent = getComments().filter((item) => item.handedOff && item.route === commentRoute(doc));
38
42
  if (sent.length === 0)
39
- return;
43
+ return 0;
40
44
  const resolved = await readCommentSource(doc, () => sent.filter((item) => {
41
45
  if (item.viewport !== commentViewport(doc))
42
46
  return false;
43
47
  const element = resolveCommentElement(doc, item.target);
44
48
  return element !== null && commentFingerprint(element) !== item.baseline;
45
- }));
49
+ }), transport);
46
50
  if (revision !== getCommentClearRevision())
47
- return;
51
+ return 0;
52
+ let removed = 0;
48
53
  for (const item of resolved ?? []) {
49
- if (getComments().some((current) => current.id === item.id && current.note === item.note && current.handedOff))
50
- removeComment(item.id);
54
+ if (!getComments().some((current) => current.id === item.id && current.note === item.note && current.handedOff))
55
+ continue;
56
+ removeComment(item.id);
57
+ removed += 1;
51
58
  }
59
+ return removed;
52
60
  }
@@ -1,5 +1,13 @@
1
1
  import type { ReactElement } from "react";
2
2
  import type { SelectedElement } from "../selection/selectionStore.js";
3
+ import { useChanges } from "../drafts/store.js";
4
+ import type { ComponentPropContract, EditableComponentTarget } from "./types.js";
5
+ export interface ComponentPropsView {
6
+ target: EditableComponentTarget;
7
+ visibleProps: ComponentPropContract[];
8
+ changes: ReturnType<typeof useChanges>;
9
+ }
10
+ export declare function useComponentProps(selected: SelectedElement | null): ComponentPropsView | null;
3
11
  export declare function ComponentPropsSection({ selected }: {
4
12
  selected: SelectedElement;
5
13
  }): ReactElement | null;