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
@@ -0,0 +1,178 @@
1
+ import { boundRuntimeEvidence, isRuntimeGeneratedSource, normalizeRuntimeTag, normalizeRuntimeText, RUNTIME_ELEMENT_CID_PREFIX, runtimeDomPath, } from "./staticHtmlRuntimeIdentity.js";
2
+ const states = new WeakMap();
3
+ function isGeneratedCid(cid) {
4
+ return typeof cid === "string" && cid.startsWith(RUNTIME_ELEMENT_CID_PREFIX);
5
+ }
6
+ /** Generated values contain no characters that selector escaping rewrites. */
7
+ function generatedSourceFromSelector(selector) {
8
+ const match = /\[data-src="([^"\\]*)"\]/.exec(selector);
9
+ return match && isRuntimeGeneratedSource(match[1]) ? match[1] : null;
10
+ }
11
+ function claimFromEvidence(cid, src, evidence) {
12
+ return {
13
+ cid,
14
+ src,
15
+ tagName: evidence.tagName,
16
+ text: evidence.text,
17
+ props: evidence.props,
18
+ ariaLabel: evidence.ariaLabel,
19
+ domPath: evidence.domPath ?? null,
20
+ elementId: evidence.elementId ?? null,
21
+ };
22
+ }
23
+ export function collectRuntimeIdentityClaims({ changes, structuralChanges }) {
24
+ const claims = new Map();
25
+ // The page still renders the text from before an inline text edit, so a text
26
+ // edit's original text wins over evidence captured after the preview.
27
+ const originalText = new Map();
28
+ for (const change of changes) {
29
+ if (change.kind === "text-content") {
30
+ const { sourceSite, beforeText } = change.target;
31
+ if (isGeneratedCid(sourceSite.cid))
32
+ originalText.set(sourceSite.cid, normalizeRuntimeText(beforeText));
33
+ if (!isGeneratedCid(sourceSite.cid) || claims.has(sourceSite.cid))
34
+ continue;
35
+ claims.set(sourceSite.cid, {
36
+ cid: sourceSite.cid,
37
+ src: sourceSite.src || null,
38
+ tagName: change.target.tagName ?? "",
39
+ text: null,
40
+ props: change.target.props,
41
+ ariaLabel: change.target.ariaLabel,
42
+ domPath: change.target.domPath ?? null,
43
+ elementId: change.target.elementId ?? null,
44
+ });
45
+ continue;
46
+ }
47
+ if (change.kind !== undefined && change.kind !== "element")
48
+ continue;
49
+ if (!isGeneratedCid(change.cid) || !change.runtimeEvidence || claims.has(change.cid))
50
+ continue;
51
+ claims.set(change.cid, claimFromEvidence(change.cid, generatedSourceFromSelector(change.selector), change.runtimeEvidence));
52
+ }
53
+ for (const change of structuralChanges) {
54
+ const targets = change.kind === "move"
55
+ ? [change.target, change.source.parent, change.destination.parent, ...(change.destination.before ? [change.destination.before] : [])]
56
+ : [change.target];
57
+ for (const { sourceSite, locator } of targets) {
58
+ if (!isGeneratedCid(sourceSite.cid) || claims.has(sourceSite.cid))
59
+ continue;
60
+ claims.set(sourceSite.cid, {
61
+ cid: sourceSite.cid,
62
+ src: isRuntimeGeneratedSource(sourceSite.src) ? sourceSite.src : null,
63
+ tagName: locator.tagName ?? "",
64
+ text: locator.text,
65
+ props: boundRuntimeEvidence(locator.props),
66
+ ariaLabel: boundRuntimeEvidence(locator.ariaLabel ?? null),
67
+ domPath: locator.domPath ?? null,
68
+ elementId: locator.elementId ?? null,
69
+ });
70
+ }
71
+ }
72
+ return [...claims.values()].map((claim) => (originalText.has(claim.cid) ? { ...claim, text: originalText.get(claim.cid) } : claim));
73
+ }
74
+ function hasStructuralMatch(element, claim) {
75
+ return normalizeRuntimeTag(element.tagName) === claim.tagName
76
+ && boundRuntimeEvidence(element.id || null) === claim.elementId
77
+ && boundRuntimeEvidence(element.getAttribute("aria-label")) === claim.ariaLabel
78
+ && boundRuntimeEvidence(element.getAttribute("data-cprops")) === claim.props
79
+ && (claim.domPath === null || runtimeDomPath(element) === claim.domPath);
80
+ }
81
+ /** Never takes an element that holds authored identity or another claim's identity. */
82
+ function findClaimedElement(doc, claim, claimed) {
83
+ if (!claim.tagName)
84
+ return null;
85
+ let elements;
86
+ try {
87
+ elements = Array.from(doc.getElementsByTagName(claim.tagName));
88
+ }
89
+ catch {
90
+ return null;
91
+ }
92
+ const candidates = elements.filter((element) => {
93
+ const cid = element.getAttribute("data-cid");
94
+ if (cid !== null && (!isGeneratedCid(cid) || claimed.has(cid)))
95
+ return false;
96
+ return hasStructuralMatch(element, claim);
97
+ });
98
+ const byText = candidates.filter((element) => normalizeRuntimeText(element.textContent) === claim.text);
99
+ if (byText.length === 1)
100
+ return byText[0];
101
+ return null;
102
+ }
103
+ function hasIdentity(doc, cid) {
104
+ for (const element of Array.from(doc.querySelectorAll("[data-cid]"))) {
105
+ if (element.getAttribute("data-cid") === cid)
106
+ return true;
107
+ }
108
+ return false;
109
+ }
110
+ function attachClaims(doc, state) {
111
+ const claimed = new Set(state.claims.keys());
112
+ for (const claim of state.claims.values()) {
113
+ if (hasIdentity(doc, claim.cid))
114
+ continue;
115
+ const element = findClaimedElement(doc, claim, claimed);
116
+ if (!element)
117
+ continue;
118
+ element.setAttribute("data-cid", claim.cid);
119
+ if (claim.src !== null)
120
+ element.setAttribute("data-src", claim.src);
121
+ }
122
+ }
123
+ function observe(doc, state) {
124
+ if (state.observer || state.claims.size === 0)
125
+ return;
126
+ const Observer = doc.defaultView?.MutationObserver;
127
+ if (!Observer || !doc.documentElement)
128
+ return;
129
+ // Attaching only writes to an element that lacks the identity, so hydration and route
130
+ // changes cannot feed the observer its own writes.
131
+ state.observer = new Observer(() => {
132
+ if (state.queued)
133
+ return;
134
+ state.queued = true;
135
+ queueMicrotask(() => {
136
+ if (states.get(doc) !== state)
137
+ return;
138
+ state.queued = false;
139
+ attachClaims(doc, state);
140
+ });
141
+ });
142
+ state.observer.observe(doc.documentElement, { childList: true, subtree: true });
143
+ }
144
+ /** Unmatched claims stay pending; their edits simply do not apply. */
145
+ export function applyRuntimeIdentityClaims(doc, claims) {
146
+ if (claims.length === 0) {
147
+ disposeRuntimeIdentityClaims(doc);
148
+ return;
149
+ }
150
+ let state = states.get(doc);
151
+ if (!state) {
152
+ state = { claims: new Map(), observer: null, queued: false };
153
+ states.set(doc, state);
154
+ }
155
+ state.claims = new Map(claims.map((claim) => [claim.cid, claim]));
156
+ attachClaims(doc, state);
157
+ observe(doc, state);
158
+ }
159
+ /** Stops reattachment for a document session, including queued work. */
160
+ export function disposeRuntimeIdentityClaims(doc) {
161
+ states.get(doc)?.observer?.disconnect();
162
+ states.delete(doc);
163
+ }
164
+ /** Runtime validation for claims received from another window. */
165
+ export function isRuntimeIdentityClaim(value) {
166
+ if (!value || typeof value !== "object")
167
+ return false;
168
+ const claim = value;
169
+ const nullableString = (field) => field === null || typeof field === "string";
170
+ return typeof claim.cid === "string" && isGeneratedCid(claim.cid)
171
+ && (claim.src === null || (typeof claim.src === "string" && isRuntimeGeneratedSource(claim.src)))
172
+ && typeof claim.tagName === "string"
173
+ && nullableString(claim.text)
174
+ && nullableString(claim.props)
175
+ && nullableString(claim.ariaLabel)
176
+ && nullableString(claim.domPath)
177
+ && nullableString(claim.elementId);
178
+ }
@@ -1,32 +1,15 @@
1
- /**
2
- * Source identity reserved for elements created by a static HTML page after
3
- * the server's source-preserving pass has completed.
4
- *
5
- * The value intentionally does not match `file:line:column`. It is a
6
- * document-local selector identity, not a claim about source location.
7
- */
1
+ /** Document-local identity for runtime-created elements; intentionally not a file:line:column source claim. */
8
2
  export declare const RUNTIME_UNKNOWN_SOURCE_PREFIX = "nudge-ui:unknown:";
9
3
  export declare const RUNTIME_ELEMENT_CID_PREFIX = "nudge-ui-runtime-";
10
- /** Maximum length retained for any runtime DOM evidence field. */
11
4
  export declare const RUNTIME_EVIDENCE_MAX_LENGTH = 120;
12
- /** Bounds an untrusted runtime evidence string without changing its content. */
13
5
  export declare function boundRuntimeEvidence(value: string | null): string | null;
14
- /** Normalizes rendered text before it becomes durable runtime evidence. */
6
+ /** Ancestor description so a prompt without source locations still carries searchable ids, classes, and test ids. */
7
+ export declare function runtimeDomPath(element: Element): string | null;
15
8
  export declare function normalizeRuntimeText(value: string | null): string | null;
16
- /** Keeps a runtime tag suitable for the prompt's inline element notation. */
17
9
  export declare function normalizeRuntimeTag(value: string): string;
18
- /** Returns true for the source values generated for runtime DOM. */
19
10
  export declare function isRuntimeGeneratedSource(src: string | null | undefined): boolean;
20
- /** Returns whether this document-local element received generated identity. */
21
11
  export declare function isRuntimeCreatedElement(element: Element | null | undefined): boolean;
22
- /**
23
- * Installs document-local identity for eligible elements that a static HTML
24
- * application creates at runtime.
25
- *
26
- * The server owns source locations for the initial response. This Adapter
27
- * only fills missing attributes, observes added subtrees, and leaves the
28
- * author document untouched on disk. The returned function disconnects the
29
- * observer; generated attributes remain available to managed CSS until the
30
- * page is replaced.
31
- */
12
+ /** Fills only missing identity attributes and observes added subtrees; the returned function disconnects the observer. */
32
13
  export declare function installStaticHtmlRuntimeIdentity(doc?: Document): () => void;
14
+ /** Install before the inspector so its capture listeners run first. */
15
+ export declare function installLazyRuntimeIdentity(doc?: Document): () => void;
@@ -1,26 +1,47 @@
1
- /**
2
- * Source identity reserved for elements created by a static HTML page after
3
- * the server's source-preserving pass has completed.
4
- *
5
- * The value intentionally does not match `file:line:column`. It is a
6
- * document-local selector identity, not a claim about source location.
7
- */
1
+ /** Document-local identity for runtime-created elements; intentionally not a file:line:column source claim. */
8
2
  export const RUNTIME_UNKNOWN_SOURCE_PREFIX = "nudge-ui:unknown:";
9
3
  export const RUNTIME_ELEMENT_CID_PREFIX = "nudge-ui-runtime-";
10
- /** Maximum length retained for any runtime DOM evidence field. */
11
4
  export const RUNTIME_EVIDENCE_MAX_LENGTH = 120;
12
- /** Bounds an untrusted runtime evidence string without changing its content. */
13
5
  export function boundRuntimeEvidence(value) {
14
6
  return value === null ? null : value.slice(0, RUNTIME_EVIDENCE_MAX_LENGTH);
15
7
  }
16
- /** Normalizes rendered text before it becomes durable runtime evidence. */
8
+ const DOM_PATH_MAX_LENGTH = 240;
9
+ const DOM_PATH_MAX_DEPTH = 4;
10
+ const DOM_PATH_MAX_CLASSES = 3;
11
+ const TEST_ID_ATTRIBUTES = ["data-testid", "data-test", "data-qa"];
12
+ function domPathSegment(element) {
13
+ let segment = element.localName;
14
+ if (element.id)
15
+ segment += `#${element.id}`;
16
+ const testAttribute = TEST_ID_ATTRIBUTES.find((name) => element.hasAttribute(name));
17
+ if (testAttribute)
18
+ segment += `[${testAttribute}="${element.getAttribute(testAttribute)}"]`;
19
+ const classes = Array.from(element.classList).slice(0, DOM_PATH_MAX_CLASSES);
20
+ if (classes.length > 0)
21
+ segment += `.${classes.join(".")}`;
22
+ return segment;
23
+ }
24
+ /** Ancestor description so a prompt without source locations still carries searchable ids, classes, and test ids. */
25
+ export function runtimeDomPath(element) {
26
+ const segments = [];
27
+ let current = element;
28
+ while (current && segments.length < DOM_PATH_MAX_DEPTH && !DOCUMENT_STRUCTURE_TAGS.has(current.tagName)) {
29
+ segments.unshift(domPathSegment(current));
30
+ if (current.id)
31
+ break;
32
+ current = current.parentElement;
33
+ }
34
+ if (segments.length === 0)
35
+ return null;
36
+ const path = segments.join(" > ");
37
+ return path.length > DOM_PATH_MAX_LENGTH ? `…${path.slice(-DOM_PATH_MAX_LENGTH)}` : path;
38
+ }
17
39
  export function normalizeRuntimeText(value) {
18
40
  if (value === null)
19
41
  return null;
20
42
  const normalized = value.replace(/\s+/g, " ").trim();
21
43
  return normalized ? boundRuntimeEvidence(normalized) : null;
22
44
  }
23
- /** Keeps a runtime tag suitable for the prompt's inline element notation. */
24
45
  export function normalizeRuntimeTag(value) {
25
46
  return boundRuntimeEvidence(value.trim().toLowerCase().replace(/[^a-z0-9-]+/g, "")) ?? "";
26
47
  }
@@ -33,11 +54,9 @@ const EXCLUDED_SUBTREE_TAGS = new Set([
33
54
  "NOSCRIPT",
34
55
  ]);
35
56
  const runtimeCreatedElements = new WeakSet();
36
- /** Returns true for the source values generated for runtime DOM. */
37
57
  export function isRuntimeGeneratedSource(src) {
38
58
  return typeof src === "string" && src.startsWith(RUNTIME_UNKNOWN_SOURCE_PREFIX);
39
59
  }
40
- /** Returns whether this document-local element received generated identity. */
41
60
  export function isRuntimeCreatedElement(element) {
42
61
  return element !== null && element !== undefined && runtimeCreatedElements.has(element);
43
62
  }
@@ -66,47 +85,10 @@ function existingAttributeValues(doc, name) {
66
85
  .map((element) => element.getAttribute(name))
67
86
  .filter((value) => value !== null));
68
87
  }
69
- /**
70
- * Installs document-local identity for eligible elements that a static HTML
71
- * application creates at runtime.
72
- *
73
- * The server owns source locations for the initial response. This Adapter
74
- * only fills missing attributes, observes added subtrees, and leaves the
75
- * author document untouched on disk. The returned function disconnects the
76
- * observer; generated attributes remain available to managed CSS until the
77
- * page is replaced.
78
- */
88
+ /** Fills only missing identity attributes and observes added subtrees; the returned function disconnects the observer. */
79
89
  export function installStaticHtmlRuntimeIdentity(doc = document) {
80
- const usedCids = existingAttributeValues(doc, "data-cid");
81
- const usedSources = existingAttributeValues(doc, "data-src");
82
- let nextId = 1;
90
+ const ensureIdentity = createIdentityAllocator(doc);
83
91
  let disposed = false;
84
- function nextIdentity() {
85
- while (true) {
86
- const id = nextId++;
87
- const cid = `${RUNTIME_ELEMENT_CID_PREFIX}${id}`;
88
- const src = `${RUNTIME_UNKNOWN_SOURCE_PREFIX}${id}`;
89
- if (usedCids.has(cid) || usedSources.has(src))
90
- continue;
91
- usedCids.add(cid);
92
- usedSources.add(src);
93
- return { cid, src };
94
- }
95
- }
96
- function ensureIdentity(element) {
97
- if (!isEligibleElement(element))
98
- return;
99
- const needsCid = element.getAttribute("data-cid") === null;
100
- const needsSource = element.getAttribute("data-src") === null;
101
- if (!needsCid && !needsSource)
102
- return;
103
- const identity = nextIdentity();
104
- if (needsCid)
105
- element.setAttribute("data-cid", identity.cid);
106
- if (needsSource)
107
- element.setAttribute("data-src", identity.src);
108
- runtimeCreatedElements.add(element);
109
- }
110
92
  function scanSubtree(node) {
111
93
  if (disposed)
112
94
  return;
@@ -147,3 +129,72 @@ export function installStaticHtmlRuntimeIdentity(doc = document) {
147
129
  observer.disconnect();
148
130
  };
149
131
  }
132
+ const LAZY_IDENTITY_EVENTS = ["pointerover", "pointerdown", "mousedown", "click", "dblclick"];
133
+ const LAZY_DESCENDANT_DEPTH = 2;
134
+ /** Install before the inspector so its capture listeners run first. */
135
+ export function installLazyRuntimeIdentity(doc = document) {
136
+ // Pointer order differs between page loads, so sequential numbers could hand a saved
137
+ // edit's identity to a different element; a per-install scope keeps fresh identities
138
+ // distinct from saved ones, which `runtimeIdentityClaims` re-attaches by evidence.
139
+ const ensureIdentity = createIdentityAllocator(doc, `${Math.random().toString(36).slice(2, 8)}-`);
140
+ function tagDescendants(element, depth) {
141
+ if (depth === 0)
142
+ return;
143
+ for (const child of Array.from(element.children)) {
144
+ ensureIdentity(child);
145
+ tagDescendants(child, depth - 1);
146
+ }
147
+ }
148
+ function onPointer(event) {
149
+ const target = event.target;
150
+ if (!(target instanceof Element) || !isEligibleElement(target))
151
+ return;
152
+ for (let current = target; current; current = current.parentElement) {
153
+ // Ancestors of a tagged element were tagged with it.
154
+ if (current.hasAttribute("data-cid") && current !== target)
155
+ break;
156
+ ensureIdentity(current);
157
+ }
158
+ tagDescendants(target, LAZY_DESCENDANT_DEPTH);
159
+ if (target.parentElement)
160
+ tagDescendants(target.parentElement, 1);
161
+ }
162
+ for (const type of LAZY_IDENTITY_EVENTS)
163
+ doc.addEventListener(type, onPointer, true);
164
+ return () => {
165
+ for (const type of LAZY_IDENTITY_EVENTS)
166
+ doc.removeEventListener(type, onPointer, true);
167
+ };
168
+ }
169
+ function createIdentityAllocator(doc, scope = "") {
170
+ const usedCids = existingAttributeValues(doc, "data-cid");
171
+ const usedSources = existingAttributeValues(doc, "data-src");
172
+ let nextId = 1;
173
+ function nextIdentity() {
174
+ while (true) {
175
+ const id = nextId++;
176
+ const cid = `${RUNTIME_ELEMENT_CID_PREFIX}${scope}${id}`;
177
+ const src = `${RUNTIME_UNKNOWN_SOURCE_PREFIX}${scope}${id}`;
178
+ if (usedCids.has(cid) || usedSources.has(src))
179
+ continue;
180
+ usedCids.add(cid);
181
+ usedSources.add(src);
182
+ return { cid, src };
183
+ }
184
+ }
185
+ function ensureIdentity(element) {
186
+ if (!isEligibleElement(element))
187
+ return;
188
+ const needsCid = element.getAttribute("data-cid") === null;
189
+ const needsSource = element.getAttribute("data-src") === null;
190
+ if (!needsCid && !needsSource)
191
+ return;
192
+ const identity = nextIdentity();
193
+ if (needsCid)
194
+ element.setAttribute("data-cid", identity.cid);
195
+ if (needsSource)
196
+ element.setAttribute("data-src", identity.src);
197
+ runtimeCreatedElements.add(element);
198
+ }
199
+ return ensureIdentity;
200
+ }
@@ -1,10 +1,3 @@
1
1
  import type { NudgeUiRuntimeConfig } from "./runtimeConfig.js";
2
- /**
3
- * Reads the immutable runtime snapshot reactively.
4
- *
5
- * Components that render runtime-derived UI (token catalogs, capability
6
- * gating) must use this hook instead of the plain getter, so a host that
7
- * atomically replaces the configuration during HMR or a dev-transport
8
- * refresh re-renders the subscribed tree with the new snapshot.
9
- */
2
+ /** Components rendering runtime-derived UI must subscribe here, not through the plain getter. */
10
3
  export declare function useNudgeUiRuntimeConfig(): NudgeUiRuntimeConfig;
@@ -1,13 +1,6 @@
1
1
  import { useSyncExternalStore } from "react";
2
2
  import { getNudgeUiRuntimeConfig, subscribeNudgeUiRuntime, } from "./runtimeConfig.js";
3
- /**
4
- * Reads the immutable runtime snapshot reactively.
5
- *
6
- * Components that render runtime-derived UI (token catalogs, capability
7
- * gating) must use this hook instead of the plain getter, so a host that
8
- * atomically replaces the configuration during HMR or a dev-transport
9
- * refresh re-renders the subscribed tree with the new snapshot.
10
- */
3
+ /** Components rendering runtime-derived UI must subscribe here, not through the plain getter. */
11
4
  export function useNudgeUiRuntimeConfig() {
12
5
  return useSyncExternalStore(subscribeNudgeUiRuntime, getNudgeUiRuntimeConfig);
13
6
  }
@@ -10,21 +10,16 @@ export interface InstanceEvidence {
10
10
  }
11
11
  /** Test hook: clears the memoized source-site match counts. */
12
12
  export declare function resetSourceSiteMatchCounts(): void;
13
- /**
14
- * Counts the rendered elements matching a source site. The result is memoized
15
- * per (element identity, scope revision) so the selection render path no longer
16
- * runs a full-document querySelectorAll on every render; it only recomputes
17
- * when the caller's scope revision changes.
18
- */
13
+ /** Memoized per element and scope revision so the render path avoids repeated full-document queries. */
19
14
  export declare function countSourceSiteMatches(el: HTMLElement, revision?: number): number;
20
15
  export declare function unlinkElement(el: HTMLElement): string | null;
21
16
  export declare function relinkElement(el: HTMLElement): string | null;
22
17
  export declare function getEditScope(el: HTMLElement): EditScope;
23
18
  export interface BatchScopeFields {
24
19
  scope: EditScope;
20
+ sourceInstanceCount?: number;
25
21
  instanceOverride?: RenderedInstanceOverride;
26
22
  }
27
- /** Returns whether every element can be addressed safely by one batch edit. */
28
23
  export declare function canPlanBatchEditScopes(selectedElements: readonly HTMLElement[]): boolean;
29
24
  /** Resolves safe scopes immediately before a write is committed. */
30
25
  export declare function planBatchEditScopes(selectedElements: readonly HTMLElement[]): ReadonlyMap<HTMLElement, BatchScopeFields> | null;
@@ -20,12 +20,7 @@ function querySourceSiteMatches(el) {
20
20
  return 0;
21
21
  }
22
22
  }
23
- /**
24
- * Counts the rendered elements matching a source site. The result is memoized
25
- * per (element identity, scope revision) so the selection render path no longer
26
- * runs a full-document querySelectorAll on every render; it only recomputes
27
- * when the caller's scope revision changes.
28
- */
23
+ /** Memoized per element and scope revision so the render path avoids repeated full-document queries. */
29
24
  export function countSourceSiteMatches(el, revision = 0) {
30
25
  const cid = el.getAttribute("data-cid") ?? "";
31
26
  const src = el.getAttribute("data-src") ?? "";
@@ -59,11 +54,7 @@ export function relinkElement(el) {
59
54
  export function getEditScope(el) {
60
55
  return getRenderedInstanceOverride(el) ? "rendered-instance" : "source-site";
61
56
  }
62
- /**
63
- * Plans the scope for every target in a batch edit without mutating the DOM or
64
- * transient instance state. A partial repeated-source group is editable only
65
- * when each selected output has evidence that resolves uniquely.
66
- */
57
+ /** A partial repeated-source group is editable only when each selected output resolves uniquely. */
67
58
  function analyzeBatchEditScopes(selectedElements) {
68
59
  const plan = new Map();
69
60
  if (selectedElements.length <= 1) {
@@ -108,7 +99,6 @@ function analyzeBatchEditScopes(selectedElements) {
108
99
  }
109
100
  return plan;
110
101
  }
111
- /** Returns whether every element can be addressed safely by one batch edit. */
112
102
  export function canPlanBatchEditScopes(selectedElements) {
113
103
  return analyzeBatchEditScopes(selectedElements) !== null;
114
104
  }
@@ -118,13 +108,24 @@ export function planBatchEditScopes(selectedElements) {
118
108
  if (!decisions)
119
109
  return null;
120
110
  const plan = new Map();
111
+ const sourceCounts = new WeakMap();
121
112
  for (const [element, decision] of decisions) {
122
- plan.set(element, decision.scope === "new-rendered-instance"
113
+ const selector = selectorForElement(element);
114
+ let counts = sourceCounts.get(element.ownerDocument);
115
+ if (!counts) {
116
+ counts = new Map();
117
+ sourceCounts.set(element.ownerDocument, counts);
118
+ }
119
+ const count = selector ? counts.get(selector) ?? querySourceSiteMatches(element) : 0;
120
+ if (selector)
121
+ counts.set(selector, count);
122
+ const fields = decision.scope === "new-rendered-instance"
123
123
  ? {
124
124
  scope: "rendered-instance",
125
125
  instanceOverride: buildRenderedInstanceOverrideForTarget(decision.target),
126
126
  }
127
- : decision);
127
+ : decision;
128
+ plan.set(element, count > 0 ? { ...fields, sourceInstanceCount: count } : fields);
128
129
  }
129
130
  return plan;
130
131
  }
@@ -1,8 +1,4 @@
1
- /**
2
- * A style edit target is deliberately smaller than the selection model. The
3
- * editor only needs the rendered DOM nodes that will receive one declaration;
4
- * source metadata and selection ordering stay inside the selection module.
5
- */
1
+ /** Deliberately just the DOM nodes receiving a declaration; source metadata stays in the selection module. */
6
2
  export type EditTarget = HTMLElement | readonly HTMLElement[];
7
3
  export declare function targetElements(target: EditTarget): readonly HTMLElement[];
8
4
  export declare function isMultiTarget(target: EditTarget): boolean;
@@ -1,13 +1,13 @@
1
1
  export declare function computeHierarchy(el: HTMLElement): HTMLElement[];
2
- export interface DescendantNode {
3
- element: HTMLElement;
4
- depth: number;
2
+ /** Direct children listed in the DOM navigator before the rest collapse into a count. */
3
+ export declare const NAVIGATOR_CHILD_LIMIT = 50;
4
+ export interface TrackedChildren {
5
+ elements: HTMLElement[];
6
+ /** Tracked children past the limit. */
7
+ hidden: number;
5
8
  }
6
- export interface NavigationNode {
7
- element: HTMLElement;
8
- direction: "up" | "down";
9
- depth: number;
10
- }
11
- /** Returns the nearest tracked descendants, breadth-first and document-ordered. */
12
- export declare function computeDescendants(el: HTMLElement, maxDepth?: number, maxNodes?: number): DescendantNode[];
13
- export declare function computeNavigationNodes(el: HTMLElement, hierarchy?: HTMLElement[]): NavigationNode[];
9
+ /** The nearest tracked elements below `el` in document order, looking through untracked wrappers. */
10
+ export declare function computeTrackedChildren(el: HTMLElement, limit?: number): TrackedChildren;
11
+ export declare function hasTrackedChildren(el: HTMLElement): boolean;
12
+ /** Nearest tracked ancestors, fewer when children also fill the menu. */
13
+ export declare function computeNavigationParents(hierarchy: readonly HTMLElement[], hasChildren: boolean): HTMLElement[];
@@ -21,30 +21,48 @@ export function computeHierarchy(el) {
21
21
  }
22
22
  return chain;
23
23
  }
24
- /** Returns the nearest tracked descendants, breadth-first and document-ordered. */
25
- export function computeDescendants(el, maxDepth = 2, maxNodes = 2) {
26
- if (maxDepth < 1 || maxNodes < 1)
27
- return [];
28
- const descendants = Array.from(el.querySelectorAll('[data-cid]'))
29
- .map((element, order) => {
30
- let depth = 1;
31
- let ancestor = element.parentElement;
32
- while (ancestor && ancestor !== el) {
33
- if (ancestor.hasAttribute('data-cid'))
34
- depth += 1;
35
- ancestor = ancestor.parentElement;
24
+ /** Direct children listed in the DOM navigator before the rest collapse into a count. */
25
+ export const NAVIGATOR_CHILD_LIMIT = 50;
26
+ function htmlElementConstructor(el) {
27
+ return el.ownerDocument.defaultView?.HTMLElement ?? null;
28
+ }
29
+ /** The nearest tracked elements below `el` in document order, looking through untracked wrappers. */
30
+ export function computeTrackedChildren(el, limit = NAVIGATOR_CHILD_LIMIT) {
31
+ const constructor = htmlElementConstructor(el);
32
+ const result = { elements: [], hidden: 0 };
33
+ if (!constructor)
34
+ return result;
35
+ const visit = (parent) => {
36
+ for (const child of parent.children) {
37
+ if (!(child instanceof constructor))
38
+ continue;
39
+ if (!child.hasAttribute("data-cid"))
40
+ visit(child);
41
+ else if (result.elements.length < limit)
42
+ result.elements.push(child);
43
+ else
44
+ result.hidden += 1;
45
+ }
46
+ };
47
+ visit(el);
48
+ return result;
49
+ }
50
+ export function hasTrackedChildren(el) {
51
+ const constructor = htmlElementConstructor(el);
52
+ if (!constructor)
53
+ return false;
54
+ const visit = (parent) => {
55
+ for (const child of parent.children) {
56
+ if (!(child instanceof constructor))
57
+ continue;
58
+ if (child.hasAttribute("data-cid") || visit(child))
59
+ return true;
36
60
  }
37
- return ancestor === el ? { element, depth, order } : null;
38
- })
39
- .filter((node) => node !== null && node.depth <= maxDepth)
40
- .sort((left, right) => left.depth - right.depth || left.order - right.order);
41
- return descendants.slice(0, maxNodes).map(({ element, depth }) => ({ element, depth }));
61
+ return false;
62
+ };
63
+ return visit(el);
42
64
  }
43
- export function computeNavigationNodes(el, hierarchy = computeHierarchy(el)) {
44
- const children = computeDescendants(el, 2, 2);
45
- const parents = hierarchy.slice(1, (children.length > 0 ? 2 : 4) + 1);
46
- return [
47
- ...parents.map((element, index) => ({ element, direction: "up", depth: index + 1 })),
48
- ...children.map(({ element, depth }) => ({ element, direction: "down", depth })),
49
- ];
65
+ /** Nearest tracked ancestors, fewer when children also fill the menu. */
66
+ export function computeNavigationParents(hierarchy, hasChildren) {
67
+ return hierarchy.slice(1, (hasChildren ? 2 : 4) + 1);
50
68
  }
@@ -10,7 +10,6 @@ export interface SelectedElement {
10
10
  fiber?: unknown;
11
11
  componentTargets: RuntimeComponentTarget[];
12
12
  }
13
- /** The ordered selection presented to the inspector. */
14
13
  export interface Selection {
15
14
  elements: readonly SelectedElement[];
16
15
  primary: SelectedElement;
@@ -22,11 +21,9 @@ declare function getSelection(): Selection | null;
22
21
  declare function getHierarchy(): HTMLElement[];
23
22
  declare function getHierarchyIndex(): number;
24
23
  export declare function setSelectedElement(el: SelectedElement | null): void;
25
- /** Replaces the selection with one or more ordered targets. */
26
24
  export declare function setSelectedElements(elements: readonly SelectedElement[]): void;
27
25
  /** Adds or removes one target while keeping the toggled target primary. */
28
26
  export declare function toggleSelectedElement(el: SelectedElement): void;
29
- /** Removes one rendered node from the group, preserving the remaining order. */
30
27
  export declare function removeSelectedElement(el: HTMLElement): void;
31
28
  /** Refreshes metadata for one selected DOM node without collapsing a group. */
32
29
  export declare function refreshSelectedElement(el: SelectedElement): void;