nudge-ui 0.2.5 → 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 (575) hide show
  1. package/dist/cli/agentCommand.d.ts +0 -1
  2. package/dist/cli/agentCommand.js +0 -1
  3. package/dist/client.mjs +238 -122
  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 +13 -64
  94. package/dist/hosts/projectBridge.d.ts +0 -2
  95. package/dist/hosts/projectBridge.js +0 -2
  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 +1 -6
  125. package/dist/inspector/agent/activity.d.ts +1 -1
  126. package/dist/inspector/agent/activity.js +1 -1
  127. package/dist/inspector/agent/client.d.ts +2 -26
  128. package/dist/inspector/agent/client.js +17 -64
  129. package/dist/inspector/agent/connectionStatus.d.ts +0 -1
  130. package/dist/inspector/agent/connectionStatus.js +0 -1
  131. package/dist/inspector/agent/httpTransport.d.ts +0 -8
  132. package/dist/inspector/agent/httpTransport.js +21 -39
  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 +2 -19
  136. package/dist/inspector/agent/verification.js +7 -43
  137. package/dist/inspector/boot.d.ts +3 -1
  138. package/dist/inspector/boot.js +12 -20
  139. package/dist/inspector/canvas/AgentActivityOverlay.d.ts +1 -1
  140. package/dist/inspector/canvas/AgentActivityOverlay.js +1 -1
  141. package/dist/inspector/canvas/CanvasCard.js +7 -14
  142. package/dist/inspector/canvas/CanvasElementOverlay.js +117 -50
  143. package/dist/inspector/canvas/CanvasWorkspace.js +15 -29
  144. package/dist/inspector/canvas/PageCard.d.ts +0 -1
  145. package/dist/inspector/canvas/PageCard.js +0 -1
  146. package/dist/inspector/canvas/SketchToolOptions.d.ts +0 -1
  147. package/dist/inspector/canvas/SketchToolOptions.js +0 -6
  148. package/dist/inspector/canvas/ToolOptionsDrawer.d.ts +1 -6
  149. package/dist/inspector/canvas/ToolOptionsDrawer.js +2 -8
  150. package/dist/inspector/canvas/activeCanvasDocument.d.ts +0 -2
  151. package/dist/inspector/canvas/activeCanvasDocument.js +0 -2
  152. package/dist/inspector/canvas/agentPresentation.d.ts +2 -13
  153. package/dist/inspector/canvas/agentPresentation.js +3 -14
  154. package/dist/inspector/canvas/canvasFrame.d.ts +2 -6
  155. package/dist/inspector/canvas/canvasFrame.js +1 -2
  156. package/dist/inspector/canvas/canvasResize.d.ts +1 -6
  157. package/dist/inspector/canvas/canvasResize.js +1 -6
  158. package/dist/inspector/canvas/canvasStore.d.ts +4 -12
  159. package/dist/inspector/canvas/canvasStore.js +12 -26
  160. package/dist/inspector/canvas/frameConnection.d.ts +1 -7
  161. package/dist/inspector/canvas/frameContent.d.ts +0 -1
  162. package/dist/inspector/canvas/frameLifecycle.d.ts +12 -0
  163. package/dist/inspector/canvas/frameLifecycle.js +11 -0
  164. package/dist/inspector/canvas/frameProtocol.d.ts +5 -40
  165. package/dist/inspector/canvas/frameProtocol.js +1 -24
  166. package/dist/inspector/canvas/frameScrollbarStyles.d.ts +0 -1
  167. package/dist/inspector/canvas/frameScrollbarStyles.js +0 -1
  168. package/dist/inspector/canvas/layout.d.ts +10 -22
  169. package/dist/inspector/canvas/layout.js +0 -3
  170. package/dist/inspector/canvas/normalizeUrl.js +1 -8
  171. package/dist/inspector/canvas/pageSurface.d.ts +1 -6
  172. package/dist/inspector/canvas/pageSurface.js +1 -6
  173. package/dist/inspector/canvas/projection.d.ts +4 -25
  174. package/dist/inspector/canvas/projection.js +22 -72
  175. package/dist/inspector/canvas/rendererBootstrap.d.ts +8 -1
  176. package/dist/inspector/canvas/rendererBootstrap.js +6 -14
  177. package/dist/inspector/canvas/rendererCidIndex.d.ts +0 -5
  178. package/dist/inspector/canvas/rendererCidIndex.js +0 -5
  179. package/dist/inspector/canvas/rendererElementSelector.js +29 -27
  180. package/dist/inspector/canvas/rendererMessageRouter.d.ts +0 -1
  181. package/dist/inspector/canvas/rendererMessageRouter.js +0 -1
  182. package/dist/inspector/canvas/rendererSelectionProxy.d.ts +1 -5
  183. package/dist/inspector/canvas/rendererSelectionProxy.js +2 -7
  184. package/dist/inspector/canvas/rendererStylesheet.d.ts +0 -1
  185. package/dist/inspector/canvas/rendererStylesheet.js +9 -2
  186. package/dist/inspector/canvas/resizeHandleScale.d.ts +1 -10
  187. package/dist/inspector/canvas/resizeHandleScale.js +1 -10
  188. package/dist/inspector/canvas/sessionStore.d.ts +1 -7
  189. package/dist/inspector/canvas/sessionStore.js +21 -34
  190. package/dist/inspector/canvas/staleChangeDetector.js +1 -4
  191. package/dist/inspector/canvas/toolbarScale.d.ts +1 -4
  192. package/dist/inspector/canvas/toolbarScale.js +1 -4
  193. package/dist/inspector/canvas/useCanvasLayoutAnimation.d.ts +0 -1
  194. package/dist/inspector/canvas/useCanvasLayoutAnimation.js +0 -1
  195. package/dist/inspector/canvas/viewStore.js +1 -1
  196. package/dist/inspector/canvas/wheelPan.d.ts +1 -1
  197. package/dist/inspector/canvas/wheelPan.js +1 -1
  198. package/dist/inspector/canvas/workspaceLease.d.ts +1 -5
  199. package/dist/inspector/canvas/workspaceLease.js +1 -7
  200. package/dist/inspector/changes/codecs.js +2 -1
  201. package/dist/inspector/changes/draftPreview.d.ts +1 -6
  202. package/dist/inspector/changes/draftPreview.js +15 -30
  203. package/dist/inspector/changes/editModel.d.ts +3 -13
  204. package/dist/inspector/changes/editModel.js +1 -2
  205. package/dist/inspector/changes/managedStyleProjection.js +4 -14
  206. package/dist/inspector/changes/model.d.ts +0 -5
  207. package/dist/inspector/changes/model.js +1 -8
  208. package/dist/inspector/changes/previewDiagnostics.d.ts +2 -12
  209. package/dist/inspector/changes/previewDiagnostics.js +4 -20
  210. package/dist/inspector/changes/previewVerification.d.ts +25 -0
  211. package/dist/inspector/changes/previewVerification.js +34 -0
  212. package/dist/inspector/changes/structuralTypes.d.ts +2 -4
  213. package/dist/inspector/changes/types.d.ts +3 -10
  214. package/dist/inspector/clientManifest.d.ts +17 -6
  215. package/dist/inspector/clientManifest.js +16 -3
  216. package/dist/inspector/comments/CommentsOverlay.js +48 -7
  217. package/dist/inspector/comments/element.d.ts +1 -2
  218. package/dist/inspector/comments/element.js +1 -2
  219. package/dist/inspector/comments/store.d.ts +1 -1
  220. package/dist/inspector/comments/store.js +1 -1
  221. package/dist/inspector/comments/verification.d.ts +8 -2
  222. package/dist/inspector/comments/verification.js +18 -10
  223. package/dist/inspector/componentSemantics/ComponentPropsSection.d.ts +8 -0
  224. package/dist/inspector/componentSemantics/ComponentPropsSection.js +10 -7
  225. package/dist/inspector/componentSemantics/adapterRegistry.d.ts +2 -9
  226. package/dist/inspector/componentSemantics/adapterRegistry.js +2 -9
  227. package/dist/inspector/componentSemantics/changeModel.js +2 -4
  228. package/dist/inspector/componentSemantics/react/callsites.d.ts +28 -0
  229. package/dist/inspector/componentSemantics/react/callsites.js +261 -0
  230. package/dist/inspector/componentSemantics/react/devtoolsHook.d.ts +23 -0
  231. package/dist/inspector/componentSemantics/react/devtoolsHook.js +71 -0
  232. package/dist/inspector/componentSemantics/react/fibers.d.ts +17 -0
  233. package/dist/inspector/componentSemantics/react/fibers.js +30 -0
  234. package/dist/inspector/componentSemantics/{reactRuntime.d.ts → react/runtime.d.ts} +3 -2
  235. package/dist/inspector/componentSemantics/{reactRuntime.js → react/runtime.js} +70 -53
  236. package/dist/inspector/componentSemantics/runtimeBridge.d.ts +2 -18
  237. package/dist/inspector/componentSemantics/runtimeBridge.js +5 -19
  238. package/dist/inspector/componentSemantics/textBinding.d.ts +1 -9
  239. package/dist/inspector/componentSemantics/textBinding.js +16 -42
  240. package/dist/inspector/componentSemantics/types.d.ts +8 -27
  241. package/dist/inspector/componentSemantics/types.js +0 -1
  242. package/dist/inspector/conformance/borderCases.d.ts +0 -5
  243. package/dist/inspector/conformance/borderCases.js +0 -5
  244. package/dist/inspector/conformance/colorCases.d.ts +0 -6
  245. package/dist/inspector/conformance/colorCases.js +0 -6
  246. package/dist/inspector/conformance/fixture.d.ts +1 -5
  247. package/dist/inspector/conformance/fixture.js +1 -5
  248. package/dist/inspector/conformance/spacingCases.d.ts +0 -4
  249. package/dist/inspector/conformance/spacingCases.js +0 -4
  250. package/dist/inspector/conformance/typographyCases.d.ts +0 -5
  251. package/dist/inspector/conformance/typographyCases.js +0 -5
  252. package/dist/inspector/drafts/draftStore.d.ts +7 -21
  253. package/dist/inspector/drafts/draftStore.js +15 -5
  254. package/dist/inspector/drafts/model.d.ts +7 -15
  255. package/dist/inspector/drafts/model.js +0 -2
  256. package/dist/inspector/drafts/store.d.ts +1 -8
  257. package/dist/inspector/drafts/store.js +3 -10
  258. package/dist/inspector/editScope.d.ts +0 -1
  259. package/dist/inspector/editScope.js +0 -1
  260. package/dist/inspector/inline-text/inlineTextDiagnostics.d.ts +0 -2
  261. package/dist/inspector/inline-text/inlineTextDiagnostics.js +0 -2
  262. package/dist/inspector/inline-text/inlineTextEditor.d.ts +2 -8
  263. package/dist/inspector/inline-text/inlineTextEditor.js +26 -79
  264. package/dist/inspector/inline-text/inlineTextLifecycle.js +1 -6
  265. package/dist/inspector/inline-text/textEditChange.d.ts +0 -1
  266. package/dist/inspector/inspection/bridge.d.ts +2 -6
  267. package/dist/inspector/inspection/bridge.js +4 -12
  268. package/dist/inspector/inspection/browserCssInspection.d.ts +4 -11
  269. package/dist/inspector/inspection/browserCssInspection.js +4 -8
  270. package/dist/inspector/inspection/browserCssInspectionRegistry.d.ts +0 -7
  271. package/dist/inspector/inspection/browserCssInspectionRegistry.js +1 -16
  272. package/dist/inspector/inspection/selectionProperty.d.ts +1 -6
  273. package/dist/inspector/inspection/selectionProperty.js +1 -5
  274. package/dist/inspector/inspection/useBrowserCssInspection.d.ts +1 -5
  275. package/dist/inspector/inspection/useBrowserCssInspection.js +5 -21
  276. package/dist/inspector/iterations/capture.d.ts +0 -1
  277. package/dist/inspector/iterations/capture.js +4 -9
  278. package/dist/inspector/iterations/client.d.ts +0 -1
  279. package/dist/inspector/iterations/client.js +0 -1
  280. package/dist/inspector/iterations/coordinator.d.ts +0 -1
  281. package/dist/inspector/iterations/coordinator.js +0 -1
  282. package/dist/inspector/iterations/prompt.d.ts +0 -1
  283. package/dist/inspector/iterations/prompt.js +0 -1
  284. package/dist/inspector/overlay/DomNavigator.d.ts +3 -1
  285. package/dist/inspector/overlay/DomNavigator.js +39 -15
  286. package/dist/inspector/overlay/DropGuideOverlay.d.ts +0 -1
  287. package/dist/inspector/overlay/DropGuideOverlay.js +0 -1
  288. package/dist/inspector/overlay/MeasurementGuideOverlay.d.ts +1 -8
  289. package/dist/inspector/overlay/MeasurementGuideOverlay.js +1 -5
  290. package/dist/inspector/overlay/clickPolicy.d.ts +3 -14
  291. package/dist/inspector/overlay/clickPolicy.js +3 -14
  292. package/dist/inspector/overlay/dropGuide.d.ts +0 -3
  293. package/dist/inspector/overlay/dropGuide.js +0 -3
  294. package/dist/inspector/overlay/frameThrottle.d.ts +0 -1
  295. package/dist/inspector/overlay/frameThrottle.js +0 -1
  296. package/dist/inspector/overlay/interactionStyles.d.ts +1 -1
  297. package/dist/inspector/overlay/interactionStyles.js +2 -8
  298. package/dist/inspector/overlay/measurementGeometry.js +4 -12
  299. package/dist/inspector/overlay/selectedGeometry.d.ts +1 -6
  300. package/dist/inspector/overlay/selectedGeometry.js +1 -8
  301. package/dist/inspector/overlay/spacingGestures.d.ts +14 -21
  302. package/dist/inspector/overlay/spacingGestures.js +151 -31
  303. package/dist/inspector/overlay/structuralGestures.d.ts +2 -9
  304. package/dist/inspector/overlay/structuralGestures.js +1 -4
  305. package/dist/inspector/pageInspector.d.ts +4 -13
  306. package/dist/inspector/pageInspector.js +25 -32
  307. package/dist/inspector/projection/cssEscapes.d.ts +0 -1
  308. package/dist/inspector/projection/cssEscapes.js +2 -4
  309. package/dist/inspector/projection/draftProjection.d.ts +2 -14
  310. package/dist/inspector/projection/draftProjection.js +1 -8
  311. package/dist/inspector/projection/managedStylesheet.d.ts +1 -7
  312. package/dist/inspector/projection/managedStylesheet.js +4 -22
  313. package/dist/inspector/projection/renderedInstance.d.ts +5 -28
  314. package/dist/inspector/projection/renderedInstance.js +6 -32
  315. package/dist/inspector/projection/structuralProjection.d.ts +7 -39
  316. package/dist/inspector/projection/structuralProjection.js +17 -52
  317. package/dist/inspector/projection/textProjection.d.ts +2 -14
  318. package/dist/inspector/projection/textProjection.js +17 -70
  319. package/dist/inspector/prompt/PromptSettingsDialog.d.ts +0 -1
  320. package/dist/inspector/prompt/PromptSettingsDialog.js +0 -1
  321. package/dist/inspector/prompt/clipboardHandoff.d.ts +1 -9
  322. package/dist/inspector/prompt/clipboardHandoff.js +1 -9
  323. package/dist/inspector/prompt/generatePrompt.d.ts +1 -1
  324. package/dist/inspector/prompt/generatePrompt.js +10 -25
  325. package/dist/inspector/prompt/promptSettings.d.ts +0 -3
  326. package/dist/inspector/prompt/promptSettings.js +0 -3
  327. package/dist/inspector/runtime/devFlag.d.ts +2 -25
  328. package/dist/inspector/runtime/devFlag.js +4 -31
  329. package/dist/inspector/runtime/documentStylesheetOrder.d.ts +0 -2
  330. package/dist/inspector/runtime/editorShell.d.ts +0 -1
  331. package/dist/inspector/runtime/editorShell.js +0 -1
  332. package/dist/inspector/runtime/inspectorStorage.d.ts +1 -7
  333. package/dist/inspector/runtime/inspectorStorage.js +1 -6
  334. package/dist/inspector/runtime/ownedStylesheets.d.ts +2 -8
  335. package/dist/inspector/runtime/ownedStylesheets.js +2 -8
  336. package/dist/inspector/runtime/runtimeConfig.d.ts +12 -86
  337. package/dist/inspector/runtime/runtimeConfig.js +9 -50
  338. package/dist/inspector/runtime/runtimeIdentityClaims.d.ts +3 -13
  339. package/dist/inspector/runtime/runtimeIdentityClaims.js +9 -19
  340. package/dist/inspector/runtime/staticHtmlRuntimeIdentity.d.ts +4 -36
  341. package/dist/inspector/runtime/staticHtmlRuntimeIdentity.js +7 -40
  342. package/dist/inspector/runtime/useRuntimeConfig.d.ts +1 -8
  343. package/dist/inspector/runtime/useRuntimeConfig.js +1 -8
  344. package/dist/inspector/selection/editScope.d.ts +1 -7
  345. package/dist/inspector/selection/editScope.js +2 -12
  346. package/dist/inspector/selection/editTarget.d.ts +1 -5
  347. package/dist/inspector/selection/hierarchy.d.ts +11 -11
  348. package/dist/inspector/selection/hierarchy.js +42 -24
  349. package/dist/inspector/selection/selectionStore.d.ts +0 -3
  350. package/dist/inspector/selection/selectionStore.js +5 -16
  351. package/dist/inspector/selection/sourceSite.d.ts +1 -5
  352. package/dist/inspector/selection/sourceSite.js +2 -8
  353. package/dist/inspector/selection/styleSelection.d.ts +1 -5
  354. package/dist/inspector/selection/styleSelection.js +1 -5
  355. package/dist/inspector/session/lifecycle.d.ts +1 -9
  356. package/dist/inspector/session/lifecycle.js +0 -1
  357. package/dist/inspector/session/sessionContext.d.ts +0 -4
  358. package/dist/inspector/session/sessionContext.js +0 -4
  359. package/dist/inspector/session/sessionFactory.d.ts +0 -9
  360. package/dist/inspector/session/sessionFactory.js +0 -6
  361. package/dist/inspector/settings/SettingsDialog.d.ts +0 -1
  362. package/dist/inspector/settings/SettingsDialog.js +5 -3
  363. package/dist/inspector/shell/AgentStatusButton.d.ts +3 -2
  364. package/dist/inspector/shell/AgentStatusButton.js +5 -5
  365. package/dist/inspector/shell/ChangesLog.js +3 -4
  366. package/dist/inspector/shell/CopyPromptButton.d.ts +2 -1
  367. package/dist/inspector/shell/CopyPromptButton.js +12 -11
  368. package/dist/inspector/shell/InspectorEditors.d.ts +16 -0
  369. package/dist/inspector/shell/InspectorEditors.js +14 -0
  370. package/dist/inspector/shell/InspectorPanel.d.ts +12 -0
  371. package/dist/inspector/shell/InspectorPanel.js +8 -0
  372. package/dist/inspector/shell/InspectorSelection.d.ts +24 -0
  373. package/dist/inspector/shell/InspectorSelection.js +20 -0
  374. package/dist/inspector/shell/InspectorShell.js +26 -48
  375. package/dist/inspector/shell/NudgeLogoIcon.d.ts +5 -0
  376. package/dist/inspector/shell/NudgeLogoIcon.js +5 -0
  377. package/dist/inspector/shell/PeekOriginalButton.d.ts +0 -5
  378. package/dist/inspector/shell/PeekOriginalButton.js +0 -5
  379. package/dist/inspector/shell/PeekOriginalIcon.d.ts +0 -5
  380. package/dist/inspector/shell/PeekOriginalIcon.js +0 -5
  381. package/dist/inspector/shell/PromptActionButton.d.ts +21 -0
  382. package/dist/inspector/shell/PromptActionButton.js +14 -0
  383. package/dist/inspector/shell/elementName.d.ts +5 -0
  384. package/dist/inspector/shell/elementName.js +29 -0
  385. package/dist/inspector/shell/interactionStatePreview.d.ts +1 -4
  386. package/dist/inspector/shell/interactionStatePreview.js +3 -8
  387. package/dist/inspector/shell/originalPreview.d.ts +1 -6
  388. package/dist/inspector/shell/originalPreview.js +1 -6
  389. package/dist/inspector/shell/stateValue.d.ts +1 -2
  390. package/dist/inspector/shell/stateValue.js +2 -5
  391. package/dist/inspector/shell/styleState.d.ts +1 -2
  392. package/dist/inspector/shell/styleState.js +1 -2
  393. package/dist/inspector/sketch/SketchEditor.js +0 -1
  394. package/dist/inspector/sketch/SketchFrameOverlay.js +8 -12
  395. package/dist/inspector/sketch/SketchOverlay.js +5 -6
  396. package/dist/inspector/sketch/SketchPromptPanel.d.ts +0 -1
  397. package/dist/inspector/sketch/SketchPromptPanel.js +0 -1
  398. package/dist/inspector/sketch/SketchWorkspace.js +2 -4
  399. package/dist/inspector/sketch/capture.d.ts +12 -3
  400. package/dist/inspector/sketch/capture.js +12 -11
  401. package/dist/inspector/sketch/copySketch.d.ts +1 -7
  402. package/dist/inspector/sketch/copySketch.js +2 -11
  403. package/dist/inspector/sketch/drawingTools.d.ts +1 -3
  404. package/dist/inspector/sketch/drawingTools.js +1 -2
  405. package/dist/inspector/sketch/frameHeading.d.ts +1 -7
  406. package/dist/inspector/sketch/frameHeading.js +1 -8
  407. package/dist/inspector/sketch/freehand.d.ts +0 -1
  408. package/dist/inspector/sketch/freehand.js +0 -1
  409. package/dist/inspector/sketch/geometry.d.ts +1 -6
  410. package/dist/inspector/sketch/geometry.js +1 -6
  411. package/dist/inspector/sketch/handoff.js +0 -1
  412. package/dist/inspector/sketch/history.d.ts +1 -5
  413. package/dist/inspector/sketch/history.js +1 -4
  414. package/dist/inspector/sketch/interaction.d.ts +2 -2
  415. package/dist/inspector/sketch/interaction.js +2 -2
  416. package/dist/inspector/sketch/model.d.ts +2 -9
  417. package/dist/inspector/sketch/model.js +2 -19
  418. package/dist/inspector/sketch/persistence.d.ts +0 -1
  419. package/dist/inspector/sketch/persistence.js +2 -2
  420. package/dist/inspector/sketch/raster.d.ts +1 -4
  421. package/dist/inspector/sketch/raster.js +2 -8
  422. package/dist/inspector/sketch/store.js +2 -3
  423. package/dist/inspector/sketch/videoFrames.js +2 -3
  424. package/dist/inspector/spacing/projection.d.ts +0 -8
  425. package/dist/inspector/spacing/projection.js +38 -20
  426. package/dist/inspector/styleEditors/BackgroundEditor.js +1 -1
  427. package/dist/inspector/styleEditors/BorderEditor.js +1 -6
  428. package/dist/inspector/styleEditors/ChildPlacement.d.ts +12 -0
  429. package/dist/inspector/styleEditors/ChildPlacement.js +9 -0
  430. package/dist/inspector/styleEditors/FlexControls.d.ts +35 -0
  431. package/dist/inspector/styleEditors/FlexControls.js +158 -0
  432. package/dist/inspector/styleEditors/GapField.d.ts +5 -2
  433. package/dist/inspector/styleEditors/GapField.js +3 -4
  434. package/dist/inspector/styleEditors/GridChildSection.d.ts +0 -5
  435. package/dist/inspector/styleEditors/GridChildSection.js +0 -5
  436. package/dist/inspector/styleEditors/GridPicker.d.ts +1 -1
  437. package/dist/inspector/styleEditors/GridPicker.js +2 -4
  438. package/dist/inspector/styleEditors/GridSection.d.ts +10 -8
  439. package/dist/inspector/styleEditors/GridSection.js +22 -9
  440. package/dist/inspector/styleEditors/GridValueField.d.ts +1 -5
  441. package/dist/inspector/styleEditors/GridValueField.js +2 -8
  442. package/dist/inspector/styleEditors/ImageBackgroundEditor.d.ts +0 -1
  443. package/dist/inspector/styleEditors/ImageBackgroundEditor.js +0 -1
  444. package/dist/inspector/styleEditors/LayoutBlockedIndicator.d.ts +0 -1
  445. package/dist/inspector/styleEditors/LayoutBlockedIndicator.js +0 -1
  446. package/dist/inspector/styleEditors/LayoutComboField.js +0 -5
  447. package/dist/inspector/styleEditors/LayoutModeRow.d.ts +14 -0
  448. package/dist/inspector/styleEditors/LayoutModeRow.js +60 -0
  449. package/dist/inspector/styleEditors/LayoutSection.d.ts +2 -2
  450. package/dist/inspector/styleEditors/LayoutSection.js +30 -356
  451. package/dist/inspector/styleEditors/OpacityEditor.js +7 -5
  452. package/dist/inspector/styleEditors/PositionControls.d.ts +18 -0
  453. package/dist/inspector/styleEditors/PositionControls.js +16 -0
  454. package/dist/inspector/styleEditors/SizeSection.d.ts +18 -0
  455. package/dist/inspector/styleEditors/SizeSection.js +71 -0
  456. package/dist/inspector/styleEditors/{SpacingBox.d.ts → SpacingField.d.ts} +3 -10
  457. package/dist/inspector/styleEditors/{SpacingBox.js → SpacingField.js} +15 -29
  458. package/dist/inspector/styleEditors/Typography.js +2 -4
  459. package/dist/inspector/styleEditors/borderModel.d.ts +1 -7
  460. package/dist/inspector/styleEditors/borderModel.js +2 -11
  461. package/dist/inspector/styleEditors/completeCssValue.d.ts +1 -5
  462. package/dist/inspector/styleEditors/completeCssValue.js +3 -13
  463. package/dist/inspector/styleEditors/fieldValue.d.ts +20 -0
  464. package/dist/inspector/styleEditors/fieldValue.js +26 -0
  465. package/dist/inspector/styleEditors/gradientValue.d.ts +1 -1
  466. package/dist/inspector/styleEditors/gradientValue.js +3 -2
  467. package/dist/inspector/styleEditors/gridChildModel.d.ts +7 -47
  468. package/dist/inspector/styleEditors/gridChildModel.js +6 -37
  469. package/dist/inspector/styleEditors/hiddenSizeOverrides.d.ts +5 -0
  470. package/dist/inspector/styleEditors/hiddenSizeOverrides.js +42 -0
  471. package/dist/inspector/styleEditors/inlineAuthored.d.ts +1 -8
  472. package/dist/inspector/styleEditors/inlineAuthored.js +3 -17
  473. package/dist/inspector/styleEditors/layoutMode.d.ts +15 -0
  474. package/dist/inspector/styleEditors/layoutMode.js +33 -0
  475. package/dist/inspector/styleEditors/layoutPreviewState.d.ts +0 -1
  476. package/dist/inspector/styleEditors/layoutPreviewState.js +0 -1
  477. package/dist/inspector/styleEditors/layoutValue.d.ts +2 -8
  478. package/dist/inspector/styleEditors/layoutValue.js +4 -12
  479. package/dist/inspector/styleEditors/nudgeValue.d.ts +1 -13
  480. package/dist/inspector/styleEditors/nudgeValue.js +1 -13
  481. package/dist/inspector/styleEditors/rowLookup.d.ts +1 -5
  482. package/dist/inspector/styleEditors/rowLookup.js +1 -5
  483. package/dist/inspector/styleEditors/stringRecord.d.ts +1 -2
  484. package/dist/inspector/styleEditors/stylePresence.d.ts +0 -2
  485. package/dist/inspector/styleEditors/stylePresence.js +1 -4
  486. package/dist/inspector/styleEditors/textRelevance.d.ts +1 -1
  487. package/dist/inspector/styleEditors/textRelevance.js +1 -1
  488. package/dist/inspector/styleEditors/useFieldVisibility.js +1 -2
  489. package/dist/inspector/styleEditors/useLayoutContext.d.ts +13 -0
  490. package/dist/inspector/styleEditors/useLayoutContext.js +53 -0
  491. package/dist/inspector/styleEditors/valuePolicy.d.ts +1 -5
  492. package/dist/inspector/styleEditors/valuePolicy.js +0 -1
  493. package/dist/inspector/testing.d.ts +1 -4
  494. package/dist/inspector/testing.js +1 -4
  495. package/dist/inspector/tokens/TokenChip.d.ts +1 -4
  496. package/dist/inspector/tokens/TokenChip.js +1 -4
  497. package/dist/inspector/tokens/TokenField.d.ts +4 -3
  498. package/dist/inspector/tokens/TokenField.js +19 -29
  499. package/dist/inspector/tokens/catalog.d.ts +2 -10
  500. package/dist/inspector/tokens/catalog.js +5 -12
  501. package/dist/inspector/tokens/dragPointerLock.d.ts +0 -1
  502. package/dist/inspector/tokens/dragPointerLock.js +2 -3
  503. package/dist/inspector/tokens/editActions.d.ts +1 -1
  504. package/dist/inspector/tokens/editActions.js +2 -4
  505. package/dist/inspector/tokens/resolution/cascade.d.ts +1 -5
  506. package/dist/inspector/tokens/resolution/cascade.js +1 -5
  507. package/dist/inspector/tokens/resolution/containerQueryEvaluator.d.ts +1 -5
  508. package/dist/inspector/tokens/resolution/containerQueryEvaluator.js +1 -5
  509. package/dist/inspector/tokens/resolution/cssomCollector.d.ts +4 -19
  510. package/dist/inspector/tokens/resolution/cssomCollector.js +151 -122
  511. package/dist/inspector/tokens/resolution/nestedSelectors.d.ts +1 -5
  512. package/dist/inspector/tokens/resolution/nestedSelectors.js +1 -5
  513. package/dist/inspector/tokens/resolution/ruleMatching.d.ts +4 -14
  514. package/dist/inspector/tokens/resolution/ruleMatching.js +121 -67
  515. package/dist/inspector/tokens/resolution/selectorSemantics.d.ts +3 -14
  516. package/dist/inspector/tokens/resolution/selectorSemantics.js +12 -27
  517. package/dist/inspector/tokens/resolution.d.ts +5 -24
  518. package/dist/inspector/tokens/resolution.js +16 -71
  519. package/dist/inspector/tokens/tokenAvailability.d.ts +2 -14
  520. package/dist/inspector/tokens/tokenAvailability.js +6 -38
  521. package/dist/inspector/tokens/valueSemanticsAdapter.d.ts +0 -1
  522. package/dist/inspector/tokens/valueSemanticsAdapter.js +18 -2
  523. package/dist/inspector/ui/AtRuleContext.d.ts +5 -5
  524. package/dist/inspector/ui/AtRuleContext.js +8 -6
  525. package/dist/inspector/ui/ControlSurface.d.ts +0 -4
  526. package/dist/inspector/ui/Disclosure.d.ts +0 -5
  527. package/dist/inspector/ui/Disclosure.js +0 -4
  528. package/dist/inspector/ui/InlineStyleWarning.d.ts +0 -1
  529. package/dist/inspector/ui/InspectorPopover.d.ts +1 -5
  530. package/dist/inspector/ui/InspectorPopover.js +1 -5
  531. package/dist/inspector/ui/SegmentedControl.d.ts +4 -4
  532. package/dist/inspector/ui/SegmentedControl.js +6 -4
  533. package/dist/inspector/ui/SideValuesField.d.ts +1 -6
  534. package/dist/inspector/ui/SideValuesField.js +2 -8
  535. package/dist/inspector/ui/Toast.d.ts +0 -4
  536. package/dist/inspector/ui/Toast.js +0 -4
  537. package/dist/inspector/ui/atRuleSegments.d.ts +13 -0
  538. package/dist/inspector/ui/atRuleSegments.js +34 -0
  539. package/dist/inspector/ui/classNames.d.ts +0 -1
  540. package/dist/inspector/ui/classNames.js +0 -1
  541. package/dist/inspector/ui/customCursors.d.ts +7 -1
  542. package/dist/inspector/ui/customCursors.js +2 -6
  543. package/dist/inspector/ui/styles.js +18 -20
  544. package/dist/inspector/workspace/controller.js +20 -1
  545. package/dist/inspector/workspace/handoff.d.ts +1 -5
  546. package/dist/inspector/workspace/handoff.js +1 -5
  547. package/dist/inspector/workspace/timeline.d.ts +5 -2
  548. package/dist/inspector/workspace/timeline.js +0 -1
  549. package/dist/internal/agent-protocol.d.ts +20 -42
  550. package/dist/internal/agent-protocol.js +18 -35
  551. package/dist/nudge-ui.mjs +75 -28
  552. package/dist/project/artifacts.js +24 -21
  553. package/dist/project/files.d.ts +0 -1
  554. package/dist/project/files.js +2 -9
  555. package/dist/project/identity.d.ts +1 -5
  556. package/dist/project/identity.js +1 -5
  557. package/dist/project/mcpPackage.d.ts +1 -6
  558. package/dist/project/mcpPackage.js +2 -7
  559. package/dist/project/pathPolicy.d.ts +1 -6
  560. package/dist/project/pathPolicy.js +1 -6
  561. package/dist/project/tokens.d.ts +2 -12
  562. package/dist/project/tokens.js +4 -15
  563. package/dist/transport/editor.d.ts +1 -12
  564. package/dist/transport/editor.js +2 -13
  565. package/dist/transport/index.d.ts +0 -5
  566. package/dist/transport/index.js +0 -5
  567. package/dist/transport/routes.d.ts +0 -5
  568. package/dist/transport/routes.js +0 -5
  569. package/package.json +5 -4
  570. package/dist/inspector/styleEditors/InsetSection.d.ts +0 -15
  571. package/dist/inspector/styleEditors/InsetSection.js +0 -15
  572. package/dist/inspector/styleEditors/PositionInsets.d.ts +0 -15
  573. package/dist/inspector/styleEditors/PositionInsets.js +0 -12
  574. package/dist/inspector/tokens/TokenDropdown.d.ts +0 -13
  575. package/dist/inspector/tokens/TokenDropdown.js +0 -59
@@ -60,22 +60,16 @@ export function buildManagedStyleRules(changes) {
60
60
  });
61
61
  }
62
62
  }
63
- // Source-site rules remain the default; exact rendered-instance rules are
64
- // emitted afterwards so their additional marker specificity wins.
63
+ // Source-site rules are the default; rendered-instance rules come last so their extra marker specificity wins.
65
64
  return [...sourceRules.values(), ...instanceRules.values()];
66
65
  }
67
66
  export function verifyManagedStyleProjection(change, selectedElement, ownerDocument = document) {
68
- // Deferred verification must use the selection that existed when the
69
- // projection was committed. Reading the live selection here can make a
70
- // host-document change verify against a later canvas selection (or vice
71
- // versa) and manufacture a conflict for the wrong document.
67
+ // Deferred verification must use the selection from commit time; the live selection can belong to the wrong document and manufacture a conflict.
72
68
  const selected = selectedElement === undefined
73
69
  ? getSelectedElement()?.domElement ?? null
74
70
  : selectedElement;
75
71
  const requestedValue = requestedStyleValue(change);
76
- // A Canvas-only selection belongs to an iframe. The controller stylesheet
77
- // cannot verify it synchronously; leave its result unknown until the frame
78
- // has received the canonical projection rather than claiming it is stale.
72
+ // A Canvas-only iframe selection cannot be verified synchronously; leave the result unknown rather than claiming it is stale.
79
73
  if (selected && selected.ownerDocument !== ownerDocument) {
80
74
  return null;
81
75
  }
@@ -87,11 +81,7 @@ export function verifyManagedStyleProjection(change, selectedElement, ownerDocum
87
81
  catch {
88
82
  targets = [];
89
83
  }
90
- // Probe targets lazily in DOM order and stop at the first conflicting
91
- // preview: the reported result is exactly "first conflict ?? first target",
92
- // so probing the remaining instances cannot change the outcome. A
93
- // source-site selector matched by many rendered instances (one callsite,
94
- // hundreds of nodes) otherwise pays a probe + important-rule scan per match.
84
+ // Early exit is safe: the result is "first conflict ?? first target", so later probes cannot change it.
95
85
  let firstApplied = null;
96
86
  let previewResult = null;
97
87
  for (const target of targets) {
@@ -1,10 +1,5 @@
1
1
  import type { TokenEntry } from "../../css/model/index.js";
2
2
  import { type ChangeRecord } from "./types.js";
3
- /**
4
- * The CSS value a token swap writes into the managed stylesheet and the
5
- * prompt must describe: an adapter-provided literal when present, otherwise a
6
- * var() reference on the authored cssName (falling back to the entry name).
7
- */
8
3
  export declare function tokenReference(token: TokenEntry): string;
9
4
  export declare function changeKey(change: ChangeRecord): string;
10
5
  export declare function mergeChange(current: ChangeRecord[], incoming: ChangeRecord): ChangeRecord[];
@@ -1,9 +1,4 @@
1
1
  import { isComponentChange, isElementChange, isTextContentChange, isTokenChange, } from "./types.js";
2
- /**
3
- * The CSS value a token swap writes into the managed stylesheet and the
4
- * prompt must describe: an adapter-provided literal when present, otherwise a
5
- * var() reference on the authored cssName (falling back to the entry name).
6
- */
7
2
  export function tokenReference(token) {
8
3
  return token.cssValue ?? `var(${token.cssName ?? token.name})`;
9
4
  }
@@ -27,9 +22,7 @@ export function changeKey(change) {
27
22
  ].join("\u0000");
28
23
  }
29
24
  if (isTextContentChange(change)) {
30
- // The marker id is document-local projection identity. `beforeText` is
31
- // part of the durable evidence: two outputs at one source site may have
32
- // different initial copy and must remain distinct canonical intents.
25
+ // Two outputs at one source site may have different initial copy, so beforeText keeps them distinct.
33
26
  return [
34
27
  "text-content",
35
28
  change.target.sourceSite.cid,
@@ -14,26 +14,16 @@ export interface PreviewDiagnostic extends PreviewAttempt {
14
14
  readonly changeKey: string;
15
15
  readonly result: PreviewResult;
16
16
  }
17
- /** Returns the stable host-document identity for this inspector lifetime. */
18
17
  export declare function getHostPreviewDocument(): PreviewDocument;
19
- /** Starts or replaces the live session for one logical document. */
20
18
  export declare function startPreviewDocumentSession(document: PreviewDocument): void;
21
- /** Invalidates a live document session and rejects all of its late results. */
19
+ /** Late results from an invalidated session are rejected. */
22
20
  export declare function invalidatePreviewDocumentSession(logicalDocument: string, sessionId?: string): void;
23
- /** Opens a verification attempt for the currently active document session. */
24
21
  export declare function beginPreviewAttempt(document: PreviewDocument, revision?: number): PreviewAttempt | null;
25
- /** Publishes only a result from the active revision, session, and attempt. */
26
22
  export declare function publishPreviewDiagnostic(attempt: PreviewAttempt, changeKey: string, result: PreviewResult): boolean;
27
- /** Removes diagnostics for the supplied canonical keys across live documents. */
28
23
  export declare function clearPreviewDiagnostics(changeKeys?: Iterable<string>): void;
29
- /** Notifies consumers when verification state changes without a result. */
30
24
  export declare function notifyPreviewDiagnostics(): void;
31
25
  export declare function getPreviewDiagnostic(changeKey: string, logicalDocument?: string, draftId?: string): PreviewDiagnostic | undefined;
32
- /**
33
- * Host-first read across live documents. The per-document store is observable
34
- * here so a Canvas-only conflict is not write-only; host remains the default
35
- * for single-document consumers.
36
- */
26
+ /** Also reads non-host documents so Canvas-only conflicts are not write-only. */
37
27
  export declare function getAnyPreviewDiagnostic(changeKey: string): PreviewDiagnostic | undefined;
38
28
  export declare function subscribePreviewDiagnostics(listener: () => void): () => void;
39
29
  export declare function getPreviewDiagnosticRevision(): number;
@@ -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,12 +1,8 @@
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 element has no authored source location.
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;
@@ -16,11 +12,10 @@ export interface RuntimeElementEvidence {
16
12
  domPath?: string | null;
17
13
  elementId?: string | null;
18
14
  }
19
- /** Bounded authored facts for one annotated element. */
20
15
  export interface SourceElementEvidence {
21
16
  tagName: string;
22
17
  props: string | null;
23
- /** Rendered identification details; omitted by older saved changes. */
18
+ /** Omitted by older saved changes. */
24
19
  text?: string | null;
25
20
  ariaLabel?: string | null;
26
21
  domPath?: string | null;
@@ -35,7 +30,6 @@ export interface ElementChangeRecord {
35
30
  column?: number;
36
31
  selector: string;
37
32
  property: string;
38
- /** CSSOM-declared source context that the inspector projection came from. */
39
33
  sourceProperty?: string;
40
34
  /** Best-effort CSSOM serialization; not an exact source-text quote. */
41
35
  sourceAuthoredValue?: string;
@@ -48,12 +42,11 @@ export interface ElementChangeRecord {
48
42
  line: number;
49
43
  component: string;
50
44
  };
51
- /** Present when the selected element has a document-local runtime identity. */
52
45
  runtimeEvidence?: RuntimeElementEvidence;
53
46
  /** Authored facts that relocate the source site after its position shifts. */
54
47
  sourceEvidence?: SourceElementEvidence;
55
48
  scope?: EditScope;
56
- /** Matching rendered items when captured; presentation only, absent in older edits. */
49
+ /** Presentation only; absent from older edits. */
57
50
  sourceInstanceCount?: number;
58
51
  /** Durable, controller-owned target for one rendered output. */
59
52
  instanceOverride?: RenderedInstanceOverride;
@@ -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
@@ -15,6 +15,8 @@ import { commentRoute, getCommentClearRevision, isCommentToolActive, removeComme
15
15
  import { isReadingCommentSource, readCommentSource, reconcileComments } from "./verification.js";
16
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
17
  import { InspectorStyle } from "../ui/InspectorStyle.js";
18
+ const CHECK_DELAY_MS = 450;
19
+ const MAX_CHECK_DELAY_MS = 8_000;
18
20
  function sameAnchor(left, right) {
19
21
  return left?.left === right?.left && left?.top === right?.top;
20
22
  }
@@ -149,6 +151,35 @@ export function CommentsOverlay() {
149
151
  useEffect(() => {
150
152
  if (!comments.some((comment) => comment.handedOff))
151
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
+ };
152
183
  const refresh = () => {
153
184
  const documents = new Set([...getRegisteredFrames()].map(([, iframe]) => iframe.contentDocument).filter((doc) => doc !== null));
154
185
  for (const [doc, observation] of observations.current) {
@@ -173,21 +204,31 @@ export function CommentsOverlay() {
173
204
  return false;
174
205
  return true;
175
206
  });
176
- if (!sourceChanged)
177
- return;
178
- if (observation.timer)
179
- clearTimeout(observation.timer);
180
- observation.timer = setTimeout(() => { void reconcileComments(doc).catch(() => undefined); }, 200);
181
- }), timer: null };
207
+ if (sourceChanged)
208
+ schedule(doc, observation);
209
+ }), timer: null, checking: false, pending: false, interval: CHECK_DELAY_MS, lastCheckEndedAt: -Infinity };
182
210
  observation.observer.observe(doc.documentElement, { subtree: true, childList: true, characterData: true, attributes: true });
183
211
  observations.current.set(doc, observation);
184
- 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);
185
224
  }
186
225
  };
187
226
  refresh();
188
227
  const timer = setInterval(refresh, 500);
228
+ window.addEventListener("focus", returned);
189
229
  return () => {
190
230
  clearInterval(timer);
231
+ window.removeEventListener("focus", returned);
191
232
  for (const observation of observations.current.values()) {
192
233
  observation.observer.disconnect();
193
234
  if (observation.timer)
@@ -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;
@@ -94,7 +94,7 @@ export function clearComments(target) {
94
94
  const cleared = new Set((target ? getCommentsForTarget(target) : getComments()).map((comment) => comment.id));
95
95
  publish(getComments().filter((comment) => !cleared.has(comment.id)));
96
96
  }
97
- /** 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. */
98
98
  export function markCommentsHandedOff(sent) {
99
99
  publish(getComments().map((item) => sent.some((candidate) => candidate.id === item.id && candidate.note === item.note)
100
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>;
@@ -5,21 +5,25 @@ import { commentFingerprint, commentViewport, resolveCommentElement } from "./el
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;