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
@@ -16,7 +16,6 @@ import { SketchEditor } from "./SketchEditor.js";
16
16
  import { SketchOverlay } from "./SketchOverlay.js";
17
17
  import { closeSketchNote, useSketchNote } from "./sketchNote.js";
18
18
  import { SketchPromptPanel } from "./SketchPromptPanel.js";
19
- /** Makes saving a new sketch one step in the session undo history. */
20
19
  function recordSketchCreation(document, owner) {
21
20
  let snapshot = document;
22
21
  recordCanvasChange({
@@ -66,9 +65,8 @@ export function SketchWorkspace({ hostElement, projectId }) {
66
65
  const editingDocument = interaction.editingId
67
66
  ? store.items.find((item) => item.document.id === interaction.editingId)?.document ?? null
68
67
  : null;
69
- // IndexedDB hydration is deliberately independent from the localStorage
70
- // session schema. A failed hydration leaves the inspector usable and gives
71
- // the Changes log a recovery message.
68
+ // Deliberately independent of the localStorage session schema; a failed
69
+ // hydration leaves the inspector usable.
72
70
  useEffect(() => {
73
71
  clearSketchClipboardHandoff();
74
72
  closeSketchNote();
@@ -1,3 +1,5 @@
1
+ import { type Options } from "modern-screenshot";
2
+ import { getPngDimensions } from "./raster.js";
1
3
  export type SketchCaptureErrorCode = "unsupported" | "cancelled" | "capture-failed" | "processing-timeout";
2
4
  export declare class SketchCaptureError extends Error {
3
5
  readonly code: SketchCaptureErrorCode;
@@ -29,6 +31,13 @@ export interface SketchCaptureOptions {
29
31
  readonly signal?: AbortSignal;
30
32
  readonly processingTimeoutMs?: number;
31
33
  }
34
+ /** The `domToBlob` call shape this module uses: a node plus render options. */
35
+ export type DomCaptureToBlob = (node: Node, options?: Options) => Promise<Blob>;
36
+ /** Replaces the DOM renderer and PNG reader for callers that cannot rasterize, such as jsdom tests. */
37
+ export interface SketchCaptureResources {
38
+ readonly toBlob?: DomCaptureToBlob;
39
+ readonly pngDimensions?: typeof getPngDimensions;
40
+ }
32
41
  export interface SketchViewport {
33
42
  readonly width: number;
34
43
  readonly height: number;
@@ -44,11 +53,11 @@ export interface SketchScrollPosition {
44
53
  readonly x: number;
45
54
  readonly y: number;
46
55
  }
47
- /** Reads root scrolling from both window and document APIs. */
56
+ /** Browsers expose root scrolling through different APIs. */
48
57
  export declare function getSketchScrollPosition(targetWindow: Window): SketchScrollPosition;
49
58
  export declare function getSketchViewport(hostElement: HTMLElement): SketchViewport;
50
- /** Renders the current viewport from its DOM without invoking screen capture permissions. */
51
- export declare function captureViewport(options: SketchCaptureOptions): Promise<CapturedSketch>;
59
+ /** DOM-rendered, so no screen-capture permission is required. */
60
+ export declare function captureViewport(options: SketchCaptureOptions, resources?: SketchCaptureResources): Promise<CapturedSketch>;
52
61
  export declare function createSketchCaptureOperation(options: SketchCaptureOptions): {
53
62
  readonly promise: Promise<CapturedSketch>;
54
63
  readonly cancel: () => void;
@@ -74,7 +74,7 @@ async function waitForLayout(signal, targetDocument) {
74
74
  }
75
75
  }
76
76
  catch {
77
- // Font readiness is best effort; the animation-frame settle still runs.
77
+ // Font readiness is best effort.
78
78
  }
79
79
  await waitForAnimationFrame(signal);
80
80
  await waitForAnimationFrame(signal);
@@ -89,7 +89,7 @@ function domContentWidth(hostElement) {
89
89
  function nonNegativeOffset(...values) {
90
90
  return Math.max(0, ...values.filter((value) => Number.isFinite(value)));
91
91
  }
92
- /** Reads root scrolling from both window and document APIs. */
92
+ /** Browsers expose root scrolling through different APIs. */
93
93
  export function getSketchScrollPosition(targetWindow) {
94
94
  const targetDocument = targetWindow.document;
95
95
  const scrollingElement = targetDocument.scrollingElement;
@@ -253,7 +253,9 @@ async function runWithProcessingTimeout(operation, timeoutMs, parentSignal) {
253
253
  controller.abort();
254
254
  }
255
255
  }
256
- async function captureDomFrame(options, signal) {
256
+ async function captureDomFrame(options, resources, signal) {
257
+ const toBlob = resources.toBlob ?? domToBlob;
258
+ const readPngDimensions = resources.pngDimensions ?? getPngDimensions;
257
259
  const surface = getSketchSurface(options.hostElement);
258
260
  const viewport = domViewportDimensions(options.hostElement);
259
261
  let scale = viewport.scale;
@@ -272,7 +274,7 @@ async function captureDomFrame(options, signal) {
272
274
  signal?.addEventListener("abort", restore, { once: true });
273
275
  let blob;
274
276
  try {
275
- blob = await domToBlob(surface.document.documentElement, {
277
+ blob = await toBlob(surface.document.documentElement, {
276
278
  type: "image/png",
277
279
  width: viewport.width,
278
280
  height: viewport.height,
@@ -286,9 +288,8 @@ async function captureDomFrame(options, signal) {
286
288
  filter: (node) => node !== options.hostElement && !isGoogleFontStylesheet(node) && videoFrames.filter(node),
287
289
  features: { restoreScrollPosition: true },
288
290
  timeout: MEDIA_LOAD_TIMEOUT_MS,
289
- // Cross-origin Google CSS cannot be read by modern-screenshot. Skipping
290
- // its font embedding avoids waiting on a stylesheet that the renderer
291
- // cannot serialize anyway; computed font styles still remain inline.
291
+ // modern-screenshot cannot serialize cross-origin Google CSS; computed
292
+ // font styles still remain inline.
292
293
  font: hasGoogleFontStylesheet(surface.document) ? false : undefined,
293
294
  onCloneEachNode: (node) => {
294
295
  prepareDomClone(node);
@@ -302,7 +303,7 @@ async function captureDomFrame(options, signal) {
302
303
  restore();
303
304
  }
304
305
  assertNotAborted(signal);
305
- const dimensions = await getPngDimensions(blob);
306
+ const dimensions = await readPngDimensions(blob);
306
307
  if (!dimensions
307
308
  || dimensions.width > SKETCH_LIMITS.imageEdge
308
309
  || dimensions.height > SKETCH_LIMITS.imageEdge) {
@@ -315,8 +316,8 @@ async function captureDomFrame(options, signal) {
315
316
  }
316
317
  throw new SketchCaptureError("capture-failed", "This viewport is too detailed to save within the 2 MiB image limit.");
317
318
  }
318
- /** Renders the current viewport from its DOM without invoking screen capture permissions. */
319
- export async function captureViewport(options) {
319
+ /** DOM-rendered, so no screen-capture permission is required. */
320
+ export async function captureViewport(options, resources = {}) {
320
321
  if (typeof document === "undefined" || typeof window === "undefined") {
321
322
  throw new SketchCaptureError("unsupported", "Viewport capture is only available in a browser.");
322
323
  }
@@ -325,7 +326,7 @@ export async function captureViewport(options) {
325
326
  const surface = getSketchSurface(options.hostElement);
326
327
  const frame = await runWithProcessingTimeout(async (processingSignal) => {
327
328
  await waitForLayout(processingSignal, surface.document);
328
- return captureDomFrame(options, processingSignal);
329
+ return captureDomFrame(options, resources, processingSignal);
329
330
  }, options.processingTimeoutMs ?? DEFAULT_PROCESSING_TIMEOUT_MS, options.signal);
330
331
  assertNotAborted(options.signal);
331
332
  const runtime = getNudgeUiRuntimeConfig();
@@ -1,10 +1,4 @@
1
- /** Copies a saved sketch image automatically after an edit and reports the outcome as a toast. */
2
1
  export declare function copySketchImage(image: Blob): Promise<void>;
3
- /** Copies a sketch image the user asked for; only a failure needs a toast. */
4
2
  export declare function copySketchImageOnRequest(image: Blob): Promise<void>;
5
- /**
6
- * Starts the clipboard write synchronously (inside the "Done" gesture) and
7
- * fills it with the image that `save` renders. A failed save skips the toast
8
- * and rethrows so the caller can show its own error.
9
- */
3
+ /** A failed save skips the toast and rethrows so the caller can show its own error; the clipboard write starts before `save` resolves. */
10
4
  export declare function saveAndCopySketch(save: () => Promise<Blob>): Promise<void>;
@@ -7,30 +7,21 @@ function reportCopyFailure(title, error) {
7
7
  description: error instanceof Error ? error.message : "The sketch image could not be copied.",
8
8
  });
9
9
  }
10
- /**
11
- * Reports a copy made automatically on save. The toast is the only sign the
12
- * clipboard changed, so success is announced as well as failure.
13
- */
10
+ /** The toast is the only sign the clipboard changed, so success is announced too. */
14
11
  function reportAutoCopy(copied) {
15
12
  void copied.then(() => showToast({ title: "Copied to clipboard" }), (error) => reportCopyFailure("Sketch saved, but not copied", error));
16
13
  }
17
- /** Copies a saved sketch image automatically after an edit and reports the outcome as a toast. */
18
14
  export function copySketchImage(image) {
19
15
  const copied = copyImageToClipboard(image);
20
16
  reportAutoCopy(copied);
21
17
  return copied.catch(() => undefined);
22
18
  }
23
- /** Copies a sketch image the user asked for; only a failure needs a toast. */
24
19
  export function copySketchImageOnRequest(image) {
25
20
  const copied = copyImageToClipboard(image);
26
21
  void copied.catch((error) => reportCopyFailure("Sketch not copied", error));
27
22
  return copied.catch(() => undefined);
28
23
  }
29
- /**
30
- * Starts the clipboard write synchronously (inside the "Done" gesture) and
31
- * fills it with the image that `save` renders. A failed save skips the toast
32
- * and rethrows so the caller can show its own error.
33
- */
24
+ /** A failed save skips the toast and rethrows so the caller can show its own error; the clipboard write starts before `save` resolves. */
34
25
  export async function saveAndCopySketch(save) {
35
26
  let resolveImage = () => undefined;
36
27
  let rejectImage = () => undefined;
@@ -1,5 +1,4 @@
1
1
  import { type SketchPenColor } from "./model.js";
2
- /** Drawing mode chosen from the canvas toolbar while the sketch tool is active. */
3
2
  export type SketchDrawingTool = "pen" | "eraser" | "rectangle";
4
3
  export interface SketchDrawingToolsSnapshot {
5
4
  readonly tool: SketchDrawingTool;
@@ -11,7 +10,6 @@ export declare function useSketchDrawingTools(): SketchDrawingToolsSnapshot;
11
10
  export declare function setSketchDrawingTool(tool: SketchDrawingTool): void;
12
11
  /** Choosing a color implies drawing with it, so the eraser hands back to the pen. */
13
12
  export declare function setSketchStrokeColor(color: SketchPenColor): void;
14
- /** Every sketch session starts with the pen; the chosen color is kept. */
13
+ /** Resets the tool only; the chosen color is kept. */
15
14
  export declare function resetSketchDrawingTool(): void;
16
- /** Restores the default tool and color. */
17
15
  export declare function restoreDefaultSketchDrawingTools(): void;
@@ -37,11 +37,10 @@ export function setSketchDrawingTool(tool) {
37
37
  export function setSketchStrokeColor(color) {
38
38
  publish({ tool: snapshot.tool === "eraser" ? "pen" : snapshot.tool, color });
39
39
  }
40
- /** Every sketch session starts with the pen; the chosen color is kept. */
40
+ /** Resets the tool only; the chosen color is kept. */
41
41
  export function resetSketchDrawingTool() {
42
42
  setSketchDrawingTool("pen");
43
43
  }
44
- /** Restores the default tool and color. */
45
44
  export function restoreDefaultSketchDrawingTools() {
46
45
  snapshot = DEFAULT_SNAPSHOT;
47
46
  }
@@ -1,9 +1,3 @@
1
1
  import { type CanvasCard } from "../canvas/canvasStore.js";
2
- /**
3
- * Names the frame an annotated sketch targets, so the PNG stays actionable when
4
- * a user copies it to an agent without the handoff prompt. Iterations also name
5
- * their artifact file: the folder ID is the only stable identity an agent can
6
- * use to find the right iteration, since canvas iteration numbers are live
7
- * labels that nothing persists.
8
- */
2
+ /** Iterations also name their artifact folder: iteration numbers are live labels that nothing persists. */
9
3
  export declare function sketchFrameHeading(captureUrl: string, frameCards?: readonly CanvasCard[]): string;
@@ -1,7 +1,6 @@
1
1
  import { getCanvasCards } from "../canvas/canvasStore.js";
2
2
  import { contentSourceUrl } from "../canvas/frameContent.js";
3
3
  import { artifactIdFromUrl, htmlTarget } from "../drafts/model.js";
4
- /** The page path shown in sketch headings; origin, query, and hash stay out. */
5
4
  function routePath(url) {
6
5
  try {
7
6
  return new URL(url).pathname || "/";
@@ -10,13 +9,7 @@ function routePath(url) {
10
9
  return url;
11
10
  }
12
11
  }
13
- /**
14
- * Names the frame an annotated sketch targets, so the PNG stays actionable when
15
- * a user copies it to an agent without the handoff prompt. Iterations also name
16
- * their artifact file: the folder ID is the only stable identity an agent can
17
- * use to find the right iteration, since canvas iteration numbers are live
18
- * labels that nothing persists.
19
- */
12
+ /** Iterations also name their artifact folder: iteration numbers are live labels that nothing persists. */
20
13
  export function sketchFrameHeading(captureUrl, frameCards = getCanvasCards()) {
21
14
  const artifactId = artifactIdFromUrl(captureUrl);
22
15
  if (!artifactId)
@@ -9,5 +9,4 @@ export interface SketchSvgLayerProps {
9
9
  readonly annotations?: readonly SketchAnnotation[];
10
10
  readonly annotationScale?: number;
11
11
  }
12
- /** Renders sketch geometry as DOM-native SVG shapes. */
13
12
  export declare function SketchSvgLayer({ strokes, annotations, annotationScale, }: SketchSvgLayerProps): ReactElement;
@@ -49,7 +49,6 @@ export function sketchStrokePath(stroke, scaleX = 1, scaleY = scaleX) {
49
49
  return linePath(stroke.points, scaleX, scaleY);
50
50
  return getSvgPathFromStroke(sketchStrokeOutline(stroke, scaleX, scaleY));
51
51
  }
52
- /** Renders sketch geometry as DOM-native SVG shapes. */
53
52
  export function SketchSvgLayer({ strokes, annotations = [], annotationScale = 1, }) {
54
53
  return (_jsxs("g", { "data-test": "sketch-svg-layer", children: [strokes.map((stroke) => {
55
54
  const path = sketchStrokePath(stroke);
@@ -11,13 +11,8 @@ export type SketchElementReference = {
11
11
  readonly id: string;
12
12
  };
13
13
  export declare function distanceToSegment(point: SketchPoint, start: SketchPoint, end: SketchPoint): number;
14
- /** Returns the topmost drawable object under a point in canvas coordinates. */
15
14
  export declare function findSketchElementAt(point: SketchPoint, strokes: readonly SketchStroke[], annotations: readonly SketchAnnotation[]): SketchElementReference | null;
16
15
  export declare function translateSketchStroke(stroke: SketchStroke, delta: SketchPoint, bounds: SketchBounds): SketchStroke;
17
16
  export declare function translateSketchAnnotation(annotation: SketchAnnotation, delta: SketchPoint, bounds: SketchBounds): SketchAnnotation;
18
- /**
19
- * Returns the ids of strokes whose drawn line passes within `radius` of the
20
- * eraser path from `start` to `end`. Rectangles are hit on their outline only,
21
- * so erasing across the inside of a box leaves it in place.
22
- */
17
+ /** Rectangles are hit on their outline only, so erasing inside a box leaves it in place. */
23
18
  export declare function findErasedSketchStrokeIds(start: SketchPoint, end: SketchPoint, strokes: readonly SketchStroke[], radius: number): string[];
@@ -37,7 +37,6 @@ function pointBounds(points) {
37
37
  }
38
38
  return { minX, maxX, minY, maxY };
39
39
  }
40
- /** Returns the topmost drawable object under a point in canvas coordinates. */
41
40
  export function findSketchElementAt(point, strokes, annotations) {
42
41
  for (let index = annotations.length - 1; index >= 0; index -= 1) {
43
42
  const annotation = annotations[index];
@@ -96,11 +95,7 @@ export function translateSketchAnnotation(annotation, delta, bounds) {
96
95
  },
97
96
  };
98
97
  }
99
- /**
100
- * Returns the ids of strokes whose drawn line passes within `radius` of the
101
- * eraser path from `start` to `end`. Rectangles are hit on their outline only,
102
- * so erasing across the inside of a box leaves it in place.
103
- */
98
+ /** Rectangles are hit on their outline only, so erasing inside a box leaves it in place. */
104
99
  export function findErasedSketchStrokeIds(start, end, strokes, radius) {
105
100
  const steps = Math.max(1, Math.ceil(distance(start, end) / Math.max(1, radius / 2)));
106
101
  const samples = [];
@@ -20,7 +20,6 @@ function randomId() {
20
20
  return crypto.randomUUID();
21
21
  }
22
22
  catch {
23
- // Use the fallback below.
24
23
  }
25
24
  return `${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;
26
25
  }
@@ -12,7 +12,6 @@ type SketchHistoryEntry = {
12
12
  readonly gesture: number;
13
13
  readonly erased: readonly ErasedStroke[];
14
14
  };
15
- /** Strokes plus the undo and redo stacks of the edits that produced them. */
16
15
  export interface SketchHistory {
17
16
  readonly strokes: readonly SketchStroke[];
18
17
  readonly undo: readonly SketchHistoryEntry[];
@@ -20,10 +19,7 @@ export interface SketchHistory {
20
19
  }
21
20
  export declare const EMPTY_SKETCH_HISTORY: SketchHistory;
22
21
  export declare function addSketchStroke(history: SketchHistory, stroke: SketchStroke): SketchHistory;
23
- /**
24
- * Erases strokes as one undoable edit. Strokes erased by the same `gesture`
25
- * share an entry, so one eraser drag undoes in a single step.
26
- */
22
+ /** Strokes erased by the same `gesture` share one undo entry, so an eraser drag undoes in one step. */
27
23
  export declare function eraseSketchStrokes(history: SketchHistory, ids: readonly string[], gesture: number): SketchHistory;
28
24
  export declare function undoSketchEdit(history: SketchHistory): SketchHistory;
29
25
  export declare function redoSketchEdit(history: SketchHistory): SketchHistory;
@@ -17,10 +17,7 @@ function removeStrokes(strokes, ids) {
17
17
  });
18
18
  return { strokes: remaining, erased };
19
19
  }
20
- /**
21
- * Erases strokes as one undoable edit. Strokes erased by the same `gesture`
22
- * share an entry, so one eraser drag undoes in a single step.
23
- */
20
+ /** Strokes erased by the same `gesture` share one undo entry, so an eraser drag undoes in one step. */
24
21
  export function eraseSketchStrokes(history, ids, gesture) {
25
22
  const { strokes, erased } = removeStrokes(history.strokes, new Set(ids));
26
23
  if (erased.length === 0)
@@ -1,4 +1,4 @@
1
- import { type CapturedSketch } from "./capture.js";
1
+ import { captureViewport, type CapturedSketch } from "./capture.js";
2
2
  export type SketchCaptureState = "idle" | "sketching" | "capturing" | "ready" | "error";
3
3
  export interface SketchInteractionSnapshot {
4
4
  readonly captureState: SketchCaptureState;
@@ -13,7 +13,7 @@ export declare function useSketchInteraction(): SketchInteractionSnapshot;
13
13
  export declare function isSketchInteractionActive(): boolean;
14
14
  export declare function useSketchInteractionActive(): boolean;
15
15
  export declare function beginSketchCapture(): void;
16
- export declare function completeSketchCapture(hostElement: HTMLElement): Promise<CapturedSketch>;
16
+ export declare function completeSketchCapture(hostElement: HTMLElement, capture?: typeof captureViewport): Promise<CapturedSketch>;
17
17
  export declare function cancelSketchInteraction(): void;
18
18
  export declare function openSketchEditor(sketchId: string): void;
19
19
  export declare function closeSketchEditor(): void;
@@ -44,14 +44,14 @@ export function beginSketchCapture() {
44
44
  captureController = null;
45
45
  publish({ captureState: "sketching", captured: null, editingId: null, error: null, draftId: getActiveDraftChanges().draftId });
46
46
  }
47
- export function completeSketchCapture(hostElement) {
47
+ export function completeSketchCapture(hostElement, capture = captureViewport) {
48
48
  captureController?.abort();
49
49
  const controller = new AbortController();
50
50
  captureController = controller;
51
51
  const draftId = snapshot.draftId;
52
52
  publish({ captureState: "capturing", captured: null, editingId: null, error: null, draftId });
53
53
  const options = { hostElement, signal: controller.signal };
54
- return captureViewport(options)
54
+ return capture(options)
55
55
  .then((captured) => {
56
56
  if (captureController !== controller)
57
57
  return captured;
@@ -17,16 +17,13 @@ export declare const SKETCH_LIMITS: {
17
17
  readonly title: 512;
18
18
  };
19
19
  export declare const SKETCH_STROKE_WIDTH = 6;
20
- /** Drawn rectangles use a lighter outline than the freehand pen. */
21
20
  export declare const SKETCH_RECTANGLE_STROKE_WIDTH = 4;
22
- /** Opacity of the tint inside a drawn rectangle, in the rectangle's own color. */
23
21
  export declare const SKETCH_RECTANGLE_FILL_OPACITY = 0.1;
24
- /** Default pen color, and the fallback for strokes saved without one. */
25
22
  export declare const SKETCH_STROKE_COLOR = "#0096ff";
26
23
  /** Annotation markers and the notes panel; independent of the chosen pen color. */
27
24
  export declare const SKETCH_ACCENT_COLOR = "#0096ff";
28
25
  export declare const SKETCH_STROKE_OUTLINE = "";
29
- /** Pen palette offered by the canvas toolbar, in clockwise order around its swatch picker. */
26
+ /** Ordered clockwise around the toolbar's swatch picker. */
30
27
  export declare const SKETCH_PEN_COLORS: readonly [{
31
28
  readonly id: "red";
32
29
  readonly name: "Red";
@@ -97,11 +94,7 @@ export interface SketchDocument {
97
94
  readonly strokes: readonly SketchStroke[];
98
95
  /** Optional for compatibility with sketches saved before annotations existed. */
99
96
  readonly annotations?: readonly SketchAnnotation[];
100
- /**
101
- * Size of `annotatedImage`, which can be taller than the capture when a
102
- * notes panel is appended. `capture.imageWidth`/`imageHeight` size the
103
- * original screenshot and the stroke coordinate space.
104
- */
97
+ /** Size of `annotatedImage` (grows with a notes panel); `capture.imageWidth`/`imageHeight` size the stroke coordinate space. */
105
98
  readonly imageWidth: number;
106
99
  readonly imageHeight: number;
107
100
  readonly originalByteSize: number;
@@ -16,16 +16,13 @@ export const SKETCH_LIMITS = {
16
16
  title: 512,
17
17
  };
18
18
  export const SKETCH_STROKE_WIDTH = 6;
19
- /** Drawn rectangles use a lighter outline than the freehand pen. */
20
19
  export const SKETCH_RECTANGLE_STROKE_WIDTH = 4;
21
- /** Opacity of the tint inside a drawn rectangle, in the rectangle's own color. */
22
20
  export const SKETCH_RECTANGLE_FILL_OPACITY = 0.1;
23
- /** Default pen color, and the fallback for strokes saved without one. */
24
21
  export const SKETCH_STROKE_COLOR = "#0096ff";
25
22
  /** Annotation markers and the notes panel; independent of the chosen pen color. */
26
23
  export const SKETCH_ACCENT_COLOR = "#0096ff";
27
24
  export const SKETCH_STROKE_OUTLINE = "";
28
- /** Pen palette offered by the canvas toolbar, in clockwise order around its swatch picker. */
25
+ /** Ordered clockwise around the toolbar's swatch picker. */
29
26
  export const SKETCH_PEN_COLORS = [
30
27
  { id: "red", name: "Red", value: "#f03e1e" },
31
28
  { id: "orange", name: "Orange", value: "#ff8a00" },
@@ -35,8 +32,7 @@ export const SKETCH_PEN_COLORS = [
35
32
  { id: "green", name: "Green", value: "#1fc85a" },
36
33
  ];
37
34
  export const SKETCH_ANNOTATION_RADIUS = 16;
38
- // Keep accepting sketches saved before the annotation color update. Existing
39
- // PNGs remain unchanged until a user edits and saves them again.
35
+ // Keep accepting sketches saved before the annotation color update.
40
36
  const LEGACY_SKETCH_STROKE_COLOR = "#ef4444";
41
37
  const LEGACY_SKETCH_STROKE_OUTLINE = "#111827";
42
38
  export function createSketchFilename(id, revision) {
@@ -49,19 +45,16 @@ value) {
49
45
  return typeof value === "number" && Number.isFinite(value);
50
46
  }
51
47
  function safeIntegerInRange(
52
- // Stored sketch fields are untrusted until this check narrows them.
53
48
  // oxlint-disable-next-line anti-slop/no-unknown-parameters
54
49
  value, minimum, maximum = Number.MAX_SAFE_INTEGER) {
55
50
  return typeof value === "number" && Number.isSafeInteger(value) && value >= minimum && value <= maximum;
56
51
  }
57
52
  function boundedString(
58
- // Stored sketch fields are untrusted until this check narrows them.
59
53
  // oxlint-disable-next-line anti-slop/no-unknown-parameters
60
54
  value, maximum, allowEmpty = false) {
61
55
  return typeof value === "string" && value.length <= maximum && (allowEmpty || value.length > 0);
62
56
  }
63
57
  function isBlob(
64
- // Stored sketch images are untrusted until this check narrows them.
65
58
  // oxlint-disable-next-line anti-slop/no-unknown-parameters
66
59
  value, mimeType) {
67
60
  return typeof Blob !== "undefined"
@@ -69,7 +62,6 @@ value, mimeType) {
69
62
  && (mimeType === undefined || value.type === mimeType);
70
63
  }
71
64
  function validHttpUrl(
72
- // Stored sketch fields are untrusted until this check narrows them.
73
65
  // oxlint-disable-next-line anti-slop/no-unknown-parameters
74
66
  value, maximum) {
75
67
  if (!boundedString(value, maximum))
@@ -83,13 +75,11 @@ value, maximum) {
83
75
  }
84
76
  }
85
77
  function isPlainObject(
86
- // Stored sketch records are untrusted until this check narrows them.
87
78
  // oxlint-disable-next-line anti-slop/no-unknown-parameters
88
79
  value) {
89
80
  return typeof value === "object" && value !== null && !Array.isArray(value);
90
81
  }
91
82
  export function isSketchCaptureMetadata(
92
- // Capture metadata is read back from storage and parsed here.
93
83
  // oxlint-disable-next-line anti-slop/no-unknown-parameters
94
84
  value) {
95
85
  if (!isPlainObject(value))
@@ -130,7 +120,6 @@ value) {
130
120
  && safeIntegerInRange(capture.imageHeight, 1, SKETCH_LIMITS.imageEdge);
131
121
  }
132
122
  export function isSketchPoint(
133
- // Stored points are untrusted until this check narrows them.
134
123
  // oxlint-disable-next-line anti-slop/no-unknown-parameters
135
124
  value) {
136
125
  if (!isPlainObject(value))
@@ -146,7 +135,6 @@ value) {
146
135
  && point.y <= SKETCH_LIMITS.imageEdge;
147
136
  }
148
137
  export function isSketchAnnotation(
149
- // Stored annotations are untrusted until this check narrows them.
150
138
  // oxlint-disable-next-line anti-slop/no-unknown-parameters
151
139
  value) {
152
140
  if (!isPlainObject(value))
@@ -160,7 +148,6 @@ value) {
160
148
  && boundedString(annotation.description, SKETCH_LIMITS.description);
161
149
  }
162
150
  export function isSketchStroke(
163
- // Stored strokes are untrusted until this check narrows them.
164
151
  // oxlint-disable-next-line anti-slop/no-unknown-parameters
165
152
  value) {
166
153
  if (!isPlainObject(value))
@@ -182,7 +169,6 @@ value) {
182
169
  && stroke.points.every(isSketchPoint);
183
170
  }
184
171
  function isSketchStrokeList(
185
- // Stored stroke lists are untrusted until this check narrows them.
186
172
  // oxlint-disable-next-line anti-slop/no-unknown-parameters
187
173
  value) {
188
174
  return Array.isArray(value)
@@ -190,7 +176,6 @@ value) {
190
176
  && value.every(isSketchStroke);
191
177
  }
192
178
  function isSketchAnnotationList(
193
- // Stored annotation lists are untrusted until this check narrows them.
194
179
  // oxlint-disable-next-line anti-slop/no-unknown-parameters
195
180
  value) {
196
181
  return Array.isArray(value)
@@ -198,7 +183,6 @@ value) {
198
183
  && value.every(isSketchAnnotation);
199
184
  }
200
185
  export function isSketchDocument(
201
- // Sketch documents are read back from storage and parsed here.
202
186
  // oxlint-disable-next-line anti-slop/no-unknown-parameters
203
187
  value) {
204
188
  if (!isPlainObject(value))
@@ -248,7 +232,6 @@ value) {
248
232
  && document.annotatedImage.size === document.annotatedByteSize;
249
233
  }
250
234
  export function isSketchHandoffRecord(
251
- // Handoff records are read back from storage and parsed here.
252
235
  // oxlint-disable-next-line anti-slop/no-unknown-parameters
253
236
  value) {
254
237
  if (!isPlainObject(value))
@@ -24,7 +24,6 @@ export interface SketchStorage {
24
24
  }
25
25
  export declare function configureSketchStorage(storage: SketchStorage | null): void;
26
26
  export declare function readSketchPersistence(projectId: string): Promise<SketchPersistenceSnapshot>;
27
- /** Writes a document and its initial/current handoff atomically. */
28
27
  export declare function writeSketchPersistence(projectId: string, document: SketchDocument, handoff: SketchHandoffRecord): Promise<void>;
29
28
  export declare function writeSketchHandoff(projectId: string, handoff: SketchHandoffRecord): Promise<void>;
30
29
  export declare function writeSketchHandoffs(projectId: string, handoffs: readonly SketchHandoffRecord[]): Promise<void>;
@@ -62,7 +62,7 @@ async function openDatabase() {
62
62
  if (!factory)
63
63
  return null;
64
64
  // Demo runtimes (the landing page) are session-only: sketches live in the
65
- // in-memory fallback and never touch IndexedDB, so every visit starts clean.
65
+ // in-memory fallback and never touch IndexedDB.
66
66
  if (isDemoRuntime())
67
67
  return null;
68
68
  if (!databasePromise) {
@@ -121,6 +121,7 @@ export async function readSketchPersistence(projectId) {
121
121
  try {
122
122
  const transaction = database.transaction([SKETCH_DOCUMENTS_STORE, SKETCH_HANDOFFS_STORE], "readonly");
123
123
  const done = transactionDone(transaction);
124
+ // Records come back as stored; the store drops anything that fails validation during hydration.
124
125
  const documentsPromise = requestResult(transaction.objectStore(SKETCH_DOCUMENTS_STORE).index("projectId").getAll(projectId));
125
126
  const handoffsPromise = requestResult(transaction.objectStore(SKETCH_HANDOFFS_STORE).index("projectId").getAll(projectId));
126
127
  const [documents, handoffs] = await Promise.all([documentsPromise, handoffsPromise, done]);
@@ -130,7 +131,6 @@ export async function readSketchPersistence(projectId) {
130
131
  throw storageError("Sketch storage could not be read.", error);
131
132
  }
132
133
  }
133
- /** Writes a document and its initial/current handoff atomically. */
134
134
  export async function writeSketchPersistence(projectId, document, handoff) {
135
135
  if (configuredStorage) {
136
136
  const change = { documents: [document], handoffs: [handoff] };
@@ -16,10 +16,7 @@ export declare function renderAnnotatedPng(originalImage: Blob, imageWidth: numb
16
16
  readonly height: number;
17
17
  }>;
18
18
  export declare function blobToBase64(blob: Blob): Promise<string>;
19
- /**
20
- * Accepts a pending blob so callers can start the write inside the user gesture
21
- * (required by Safari) and resolve the image once rendering finishes.
22
- */
19
+ /** The promise form lets callers start the write inside the user gesture (required by Safari). */
23
20
  export declare function copyImageToClipboard(blob: Blob | Promise<Blob>): Promise<void>;
24
21
  export declare function copyImageAndTextToClipboard(blob: Blob, text: string): Promise<void>;
25
22
  export declare function downloadImage(blob: Blob, filename: string): void;
@@ -14,8 +14,7 @@ export function readPngDimensions(bytes) {
14
14
  if (bytes[index] !== PNG_SIGNATURE[index])
15
15
  return null;
16
16
  }
17
- // IHDR is the first chunk in every PNG. The dimensions are big-endian at
18
- // byte offsets 16 and 20 in the complete file.
17
+ // IHDR is the first chunk; dimensions are big-endian at byte offsets 16 and 20.
19
18
  if (bytes[12] !== 73 || bytes[13] !== 72 || bytes[14] !== 68 || bytes[15] !== 82)
20
19
  return null;
21
20
  const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
@@ -166,7 +165,6 @@ function wrapText(ctx, text, maxWidth) {
166
165
  lines.push(line);
167
166
  return lines;
168
167
  }
169
- /** Wraps the frame heading that names the sketch target to the panel width. */
170
168
  function wrapSketchHeading(ctx, width, heading) {
171
169
  const text = heading.trim();
172
170
  if (!text)
@@ -174,7 +172,6 @@ function wrapSketchHeading(ctx, width, heading) {
174
172
  ctx.font = SKETCH_NOTE_TITLE_FONT;
175
173
  return wrapText(ctx, text, Math.max(1, width - SKETCH_NOTE_PADDING * 2));
176
174
  }
177
- /** Wraps the description and numbered annotation notes to the panel width. */
178
175
  function wrapSketchNotes(ctx, width, description, annotations) {
179
176
  const notes = [
180
177
  description.trim(),
@@ -260,10 +257,7 @@ export async function blobToBase64(blob) {
260
257
  throw new Error("This browser cannot prepare sketch attachments.");
261
258
  return btoa(binary);
262
259
  }
263
- /**
264
- * Accepts a pending blob so callers can start the write inside the user gesture
265
- * (required by Safari) and resolve the image once rendering finishes.
266
- */
260
+ /** The promise form lets callers start the write inside the user gesture (required by Safari). */
267
261
  export async function copyImageToClipboard(blob) {
268
262
  if (typeof navigator === "undefined" || !navigator.clipboard?.write || typeof ClipboardItem === "undefined") {
269
263
  throw new Error("Image clipboard access is unavailable. Use Download image instead.");
@@ -74,7 +74,6 @@ function randomId(prefix) {
74
74
  }
75
75
  }
76
76
  catch {
77
- // Fall through to the deterministic-enough browser fallback.
78
77
  }
79
78
  return `${prefix}-${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`;
80
79
  }
@@ -300,8 +299,8 @@ export function settleSketchDispatch(batchRevision, state, agentRequestId, local
300
299
  if (hydration)
301
300
  await hydration;
302
301
  assertWritable(projectId, expectedGeneration);
303
- // Resolve the current revisions inside the write queue so a pending save
304
- // or requeue cannot be removed by an older completion event.
302
+ // Resolved inside the write queue so an older completion event cannot
303
+ // remove a pending save or requeue.
305
304
  const changes = snapshot.items.flatMap(({ document, handoff }) => {
306
305
  if (!handoff || handoff.sketchRevision !== document.revision
307
306
  || handoff.transport !== "direct" || handoff.batchRevision !== batchRevision)