nudge-ui 0.2.4 → 0.2.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (642) hide show
  1. package/dist/cli/agentCommand.d.ts +0 -1
  2. package/dist/cli/agentCommand.js +4 -29
  3. package/dist/client.mjs +987 -221
  4. package/dist/compiler/ast.d.ts +0 -6
  5. package/dist/compiler/ast.js +0 -5
  6. package/dist/compiler/componentContractTypes.d.ts +11 -5
  7. package/dist/compiler/componentContracts.js +3 -9
  8. package/dist/compiler/componentInstrumentation.d.ts +2 -13
  9. package/dist/compiler/componentInstrumentation.js +3 -12
  10. package/dist/compiler/componentPolicyResolution.d.ts +3 -22
  11. package/dist/compiler/componentPolicyResolution.js +6 -38
  12. package/dist/compiler/identityAttributes.d.ts +2 -0
  13. package/dist/compiler/identityAttributes.js +2 -0
  14. package/dist/compiler/index.d.ts +0 -1
  15. package/dist/compiler/index.js +0 -1
  16. package/dist/compiler/packageComponentContracts.d.ts +10 -19
  17. package/dist/compiler/packageComponentContracts.js +60 -43
  18. package/dist/compiler/reactComponentProtocols.d.ts +0 -7
  19. package/dist/compiler/reactComponentProtocols.js +0 -7
  20. package/dist/compiler/reactIdentity.d.ts +2 -2
  21. package/dist/compiler/reactIdentity.js +41 -43
  22. package/dist/compiler/sourcePaths.d.ts +4 -8
  23. package/dist/compiler/sourcePaths.js +6 -8
  24. package/dist/css/dialects/index.d.ts +2 -21
  25. package/dist/css/dialects/index.js +2 -9
  26. package/dist/css/dialects/tailwind.d.ts +2 -16
  27. package/dist/css/dialects/tailwind.js +2 -25
  28. package/dist/css/dialects/vanillaExtract.d.ts +1 -9
  29. package/dist/css/dialects/vanillaExtract.js +0 -1
  30. package/dist/css/index.d.ts +0 -8
  31. package/dist/css/index.js +0 -8
  32. package/dist/css/model/index.d.ts +6 -38
  33. package/dist/css/model/index.js +0 -9
  34. package/dist/css/token-inventory/index.d.ts +0 -23
  35. package/dist/css/token-inventory/index.js +0 -23
  36. package/dist/css/token-inventory/inventory.js +4 -16
  37. package/dist/css/token-inventory/parseStylesheet.d.ts +1 -9
  38. package/dist/css/token-inventory/parseStylesheet.js +5 -42
  39. package/dist/css/token-inventory/policy.d.ts +2 -39
  40. package/dist/css/token-inventory/policy.js +2 -39
  41. package/dist/css/token-inventory/types.d.ts +2 -15
  42. package/dist/css/value-semantics/borderSemantics.d.ts +1 -8
  43. package/dist/css/value-semantics/borderSemantics.js +5 -23
  44. package/dist/css/value-semantics/boxSemantics.d.ts +2 -25
  45. package/dist/css/value-semantics/boxSemantics.js +1 -7
  46. package/dist/css/value-semantics/colorSemantics.d.ts +6 -60
  47. package/dist/css/value-semantics/colorSemantics.js +9 -40
  48. package/dist/css/value-semantics/cssSyntax.d.ts +10 -10
  49. package/dist/css/value-semantics/cssSyntax.js +39 -11
  50. package/dist/css/value-semantics/fontSemantics.d.ts +3 -19
  51. package/dist/css/value-semantics/fontSemantics.js +7 -25
  52. package/dist/css/value-semantics/index.d.ts +1 -12
  53. package/dist/css/value-semantics/index.js +1 -12
  54. package/dist/css/value-semantics/propertyPolicy.d.ts +6 -53
  55. package/dist/css/value-semantics/propertyPolicy.js +47 -59
  56. package/dist/css/value-semantics/stringMaps.d.ts +0 -1
  57. package/dist/css/value-semantics/structuredValues.d.ts +3 -37
  58. package/dist/css/value-semantics/structuredValues.js +6 -17
  59. package/dist/css/value-semantics/tokenInterpretation.d.ts +8 -50
  60. package/dist/css/value-semantics/tokenInterpretation.js +7 -21
  61. package/dist/hosts/astro/astroRuntimeConfig.d.ts +0 -1
  62. package/dist/hosts/astro/astroRuntimeConfig.js +0 -1
  63. package/dist/hosts/astro/clientAsset.d.ts +1 -5
  64. package/dist/hosts/astro/clientAsset.js +1 -5
  65. package/dist/hosts/astro/clientTransport.d.ts +0 -1
  66. package/dist/hosts/astro/clientTransport.js +4 -9
  67. package/dist/hosts/astro/integration.d.ts +2 -28
  68. package/dist/hosts/astro/integration.js +7 -36
  69. package/dist/hosts/astro/markdownIdentity.d.ts +0 -3
  70. package/dist/hosts/astro/markdownIdentity.js +0 -3
  71. package/dist/hosts/astro/middleware.d.ts +1 -12
  72. package/dist/hosts/astro/middleware.js +1 -12
  73. package/dist/hosts/astro/projectContext.d.ts +1 -9
  74. package/dist/hosts/astro/projectContext.js +2 -11
  75. package/dist/hosts/astro/responseInstrumentation.d.ts +4 -33
  76. package/dist/hosts/astro/responseInstrumentation.js +5 -34
  77. package/dist/hosts/environment.d.ts +0 -8
  78. package/dist/hosts/environment.js +0 -1
  79. package/dist/hosts/next/index.js +1 -3
  80. package/dist/hosts/next/loader.d.ts +5 -44
  81. package/dist/hosts/next/loader.js +22 -103
  82. package/dist/hosts/next/loaders/identity-loader.cjs +111 -65
  83. package/dist/hosts/next/loaders/loader-plugin.cjs +111 -65
  84. package/dist/hosts/next/manifest.d.ts +2 -16
  85. package/dist/hosts/next/manifest.js +18 -20
  86. package/dist/hosts/next/mount.d.ts +1 -11
  87. package/dist/hosts/next/mount.js +1 -11
  88. package/dist/hosts/next/repositoryScope.d.ts +2 -17
  89. package/dist/hosts/next/repositoryScope.js +2 -17
  90. package/dist/hosts/next/sidecar.d.ts +0 -13
  91. package/dist/hosts/next/sidecar.js +25 -110
  92. package/dist/hosts/next/wrapper.d.ts +0 -31
  93. package/dist/hosts/next/wrapper.js +14 -71
  94. package/dist/hosts/projectBridge.d.ts +0 -2
  95. package/dist/hosts/projectBridge.js +3 -19
  96. package/dist/hosts/reactRendererCapture.d.ts +2 -0
  97. package/dist/hosts/reactRendererCapture.js +12 -0
  98. package/dist/hosts/static/cli.d.ts +0 -4
  99. package/dist/hosts/static/cli.js +0 -3
  100. package/dist/hosts/static/html/bootstrap.d.ts +1 -18
  101. package/dist/hosts/static/html/bootstrap.js +2 -14
  102. package/dist/hosts/static/manifest.d.ts +2 -15
  103. package/dist/hosts/static/manifest.js +5 -18
  104. package/dist/hosts/static/server.d.ts +4 -38
  105. package/dist/hosts/static/server.js +17 -67
  106. package/dist/hosts/vite/index.d.ts +0 -10
  107. package/dist/hosts/vite/index.js +0 -10
  108. package/dist/hosts/vite/react.d.ts +4 -17
  109. package/dist/hosts/vite/react.js +18 -35
  110. package/dist/hosts/vite/tokens/activeStylesheets.d.ts +1 -10
  111. package/dist/hosts/vite/tokens/activeStylesheets.js +3 -8
  112. package/dist/hosts/vite/tokens/fileMap.d.ts +0 -1
  113. package/dist/hosts/vite/tokens/viteStylesheetArtifacts.d.ts +2 -15
  114. package/dist/hosts/vite/tokens/viteStylesheetArtifacts.js +3 -10
  115. package/dist/hosts/vite/vite.d.ts +5 -26
  116. package/dist/hosts/vite/vite.js +44 -80
  117. package/dist/html/dom.d.ts +0 -1
  118. package/dist/html/dom.js +0 -1
  119. package/dist/html/identity.d.ts +1 -15
  120. package/dist/html/identity.js +1 -8
  121. package/dist/html/insertions.d.ts +2 -8
  122. package/dist/html/insertions.js +1 -1
  123. package/dist/inspector/agent/McpConnectionDialog.d.ts +1 -6
  124. package/dist/inspector/agent/McpConnectionDialog.js +8 -9
  125. package/dist/inspector/agent/activity.d.ts +2 -2
  126. package/dist/inspector/agent/activity.js +4 -3
  127. package/dist/inspector/agent/client.d.ts +3 -27
  128. package/dist/inspector/agent/client.js +43 -91
  129. package/dist/inspector/agent/connectionStatus.d.ts +3 -2
  130. package/dist/inspector/agent/connectionStatus.js +25 -1
  131. package/dist/inspector/agent/httpTransport.d.ts +0 -8
  132. package/dist/inspector/agent/httpTransport.js +42 -176
  133. package/dist/inspector/agent/protocol.d.ts +1 -10
  134. package/dist/inspector/agent/protocol.js +1 -9
  135. package/dist/inspector/agent/verification.d.ts +3 -20
  136. package/dist/inspector/agent/verification.js +10 -43
  137. package/dist/inspector/boot.d.ts +5 -0
  138. package/dist/inspector/boot.js +289 -0
  139. package/dist/inspector/canvas/AgentActivityOverlay.d.ts +3 -2
  140. package/dist/inspector/canvas/AgentActivityOverlay.js +7 -4
  141. package/dist/inspector/canvas/CanvasCard.js +26 -24
  142. package/dist/inspector/canvas/CanvasElementOverlay.js +196 -174
  143. package/dist/inspector/canvas/CanvasToolbar.js +2 -1
  144. package/dist/inspector/canvas/CanvasWorkspace.js +87 -124
  145. package/dist/inspector/canvas/LockedWorkspaceNotice.d.ts +3 -2
  146. package/dist/inspector/canvas/LockedWorkspaceNotice.js +10 -6
  147. package/dist/inspector/canvas/PageCard.d.ts +9 -0
  148. package/dist/inspector/canvas/PageCard.js +50 -0
  149. package/dist/inspector/canvas/SketchToolOptions.d.ts +4 -0
  150. package/dist/inspector/canvas/SketchToolOptions.js +80 -0
  151. package/dist/inspector/canvas/StaleChangeIndicator.d.ts +1 -1
  152. package/dist/inspector/canvas/StaleChangeIndicator.js +1 -1
  153. package/dist/inspector/canvas/ToolOptionsDrawer.d.ts +16 -0
  154. package/dist/inspector/canvas/ToolOptionsDrawer.js +71 -0
  155. package/dist/inspector/canvas/activeCanvasDocument.d.ts +3 -4
  156. package/dist/inspector/canvas/activeCanvasDocument.js +0 -2
  157. package/dist/inspector/canvas/agentPresentation.d.ts +2 -13
  158. package/dist/inspector/canvas/agentPresentation.js +3 -14
  159. package/dist/inspector/canvas/assets/eraser.svg +28 -0
  160. package/dist/inspector/canvas/assets/pen.svg +25 -0
  161. package/dist/inspector/canvas/canvasFrame.d.ts +12 -0
  162. package/dist/inspector/canvas/canvasFrame.js +9 -0
  163. package/dist/inspector/canvas/canvasGestures.d.ts +0 -1
  164. package/dist/inspector/canvas/canvasGestures.js +0 -6
  165. package/dist/inspector/canvas/canvasResize.d.ts +1 -6
  166. package/dist/inspector/canvas/canvasResize.js +1 -6
  167. package/dist/inspector/canvas/canvasStore.d.ts +5 -7
  168. package/dist/inspector/canvas/canvasStore.js +42 -21
  169. package/dist/inspector/canvas/frameConnection.d.ts +42 -0
  170. package/dist/inspector/canvas/frameConnection.js +73 -0
  171. package/dist/inspector/canvas/frameContent.d.ts +0 -1
  172. package/dist/inspector/canvas/frameLifecycle.d.ts +12 -0
  173. package/dist/inspector/canvas/frameLifecycle.js +11 -0
  174. package/dist/inspector/canvas/frameProtocol.d.ts +20 -38
  175. package/dist/inspector/canvas/frameProtocol.js +37 -24
  176. package/dist/inspector/canvas/frameScrollbarStyles.d.ts +0 -1
  177. package/dist/inspector/canvas/frameScrollbarStyles.js +0 -1
  178. package/dist/inspector/canvas/layout.d.ts +10 -22
  179. package/dist/inspector/canvas/layout.js +0 -3
  180. package/dist/inspector/canvas/normalizeUrl.js +1 -8
  181. package/dist/inspector/canvas/pageSurface.d.ts +6 -0
  182. package/dist/inspector/canvas/pageSurface.js +29 -0
  183. package/dist/inspector/canvas/projection.d.ts +14 -25
  184. package/dist/inspector/canvas/projection.js +64 -87
  185. package/dist/inspector/canvas/rendererBootstrap.d.ts +8 -1
  186. package/dist/inspector/canvas/rendererBootstrap.js +10 -15
  187. package/dist/inspector/canvas/rendererCidIndex.d.ts +0 -5
  188. package/dist/inspector/canvas/rendererCidIndex.js +0 -5
  189. package/dist/inspector/canvas/rendererElementSelector.js +38 -28
  190. package/dist/inspector/canvas/rendererMessageRouter.d.ts +4 -6
  191. package/dist/inspector/canvas/rendererMessageRouter.js +12 -17
  192. package/dist/inspector/canvas/rendererSelectionProxy.d.ts +3 -1
  193. package/dist/inspector/canvas/rendererSelectionProxy.js +7 -40
  194. package/dist/inspector/canvas/rendererStylesheet.d.ts +0 -1
  195. package/dist/inspector/canvas/rendererStylesheet.js +23 -1
  196. package/dist/inspector/canvas/resizeHandleScale.d.ts +1 -10
  197. package/dist/inspector/canvas/resizeHandleScale.js +1 -10
  198. package/dist/inspector/canvas/sessionStore.d.ts +3 -9
  199. package/dist/inspector/canvas/sessionStore.js +33 -43
  200. package/dist/inspector/canvas/staleChangeDetector.d.ts +1 -1
  201. package/dist/inspector/canvas/staleChangeDetector.js +11 -26
  202. package/dist/inspector/canvas/toolbarScale.d.ts +1 -4
  203. package/dist/inspector/canvas/toolbarScale.js +1 -4
  204. package/dist/inspector/canvas/useCanvasLayoutAnimation.d.ts +0 -1
  205. package/dist/inspector/canvas/useCanvasLayoutAnimation.js +0 -1
  206. package/dist/inspector/canvas/viewStore.js +1 -1
  207. package/dist/inspector/canvas/wheelPan.d.ts +1 -1
  208. package/dist/inspector/canvas/wheelPan.js +1 -1
  209. package/dist/inspector/canvas/workspaceLease.d.ts +1 -5
  210. package/dist/inspector/canvas/workspaceLease.js +1 -7
  211. package/dist/inspector/changes/codecs.d.ts +1 -0
  212. package/dist/inspector/changes/codecs.js +21 -5
  213. package/dist/inspector/changes/draftPreview.d.ts +7 -0
  214. package/dist/inspector/changes/draftPreview.js +118 -0
  215. package/dist/inspector/changes/editModel.d.ts +11 -13
  216. package/dist/inspector/changes/editModel.js +9 -4
  217. package/dist/inspector/changes/managedStyleProjection.js +6 -15
  218. package/dist/inspector/changes/model.d.ts +0 -5
  219. package/dist/inspector/changes/model.js +1 -8
  220. package/dist/inspector/changes/previewDiagnostics.d.ts +2 -12
  221. package/dist/inspector/changes/previewDiagnostics.js +5 -21
  222. package/dist/inspector/changes/previewVerification.d.ts +25 -0
  223. package/dist/inspector/changes/previewVerification.js +34 -0
  224. package/dist/inspector/changes/structuralTypes.d.ts +2 -4
  225. package/dist/inspector/changes/types.d.ts +11 -8
  226. package/dist/inspector/clientManifest.d.ts +17 -6
  227. package/dist/inspector/clientManifest.js +16 -3
  228. package/dist/inspector/comments/CommentsOverlay.js +66 -23
  229. package/dist/inspector/comments/element.d.ts +1 -2
  230. package/dist/inspector/comments/element.js +1 -2
  231. package/dist/inspector/comments/store.d.ts +1 -1
  232. package/dist/inspector/comments/store.js +4 -3
  233. package/dist/inspector/comments/verification.d.ts +8 -2
  234. package/dist/inspector/comments/verification.js +19 -11
  235. package/dist/inspector/componentSemantics/ComponentPropsSection.d.ts +8 -0
  236. package/dist/inspector/componentSemantics/ComponentPropsSection.js +12 -8
  237. package/dist/inspector/componentSemantics/adapterRegistry.d.ts +2 -9
  238. package/dist/inspector/componentSemantics/adapterRegistry.js +2 -9
  239. package/dist/inspector/componentSemantics/changeAction.js +1 -1
  240. package/dist/inspector/componentSemantics/changeModel.js +2 -4
  241. package/dist/inspector/componentSemantics/react/callsites.d.ts +28 -0
  242. package/dist/inspector/componentSemantics/react/callsites.js +261 -0
  243. package/dist/inspector/componentSemantics/react/devtoolsHook.d.ts +23 -0
  244. package/dist/inspector/componentSemantics/react/devtoolsHook.js +71 -0
  245. package/dist/inspector/componentSemantics/react/fibers.d.ts +17 -0
  246. package/dist/inspector/componentSemantics/react/fibers.js +30 -0
  247. package/dist/inspector/componentSemantics/{reactRuntime.d.ts → react/runtime.d.ts} +3 -2
  248. package/dist/inspector/componentSemantics/{reactRuntime.js → react/runtime.js} +70 -53
  249. package/dist/inspector/componentSemantics/runtimeBridge.d.ts +2 -18
  250. package/dist/inspector/componentSemantics/runtimeBridge.js +5 -19
  251. package/dist/inspector/componentSemantics/textBinding.d.ts +2 -11
  252. package/dist/inspector/componentSemantics/textBinding.js +20 -87
  253. package/dist/inspector/componentSemantics/types.d.ts +8 -27
  254. package/dist/inspector/componentSemantics/types.js +0 -1
  255. package/dist/inspector/conformance/borderCases.d.ts +0 -5
  256. package/dist/inspector/conformance/borderCases.js +0 -5
  257. package/dist/inspector/conformance/colorCases.d.ts +0 -6
  258. package/dist/inspector/conformance/colorCases.js +0 -6
  259. package/dist/inspector/conformance/fixture.d.ts +1 -5
  260. package/dist/inspector/conformance/fixture.js +1 -5
  261. package/dist/inspector/conformance/spacingCases.d.ts +0 -4
  262. package/dist/inspector/conformance/spacingCases.js +0 -4
  263. package/dist/inspector/conformance/typographyCases.d.ts +0 -5
  264. package/dist/inspector/conformance/typographyCases.js +0 -5
  265. package/dist/inspector/drafts/draftStore.d.ts +95 -0
  266. package/dist/inspector/drafts/draftStore.js +461 -0
  267. package/dist/inspector/drafts/model.d.ts +14 -14
  268. package/dist/inspector/drafts/model.js +4 -2
  269. package/dist/inspector/drafts/store.d.ts +47 -16
  270. package/dist/inspector/drafts/store.js +137 -170
  271. package/dist/inspector/editScope.d.ts +0 -1
  272. package/dist/inspector/editScope.js +0 -1
  273. package/dist/inspector/index.d.ts +2 -4
  274. package/dist/inspector/index.js +2 -264
  275. package/dist/inspector/inline-text/inlineTextDiagnostics.d.ts +0 -2
  276. package/dist/inspector/inline-text/inlineTextDiagnostics.js +0 -2
  277. package/dist/inspector/inline-text/inlineTextEditor.d.ts +3 -9
  278. package/dist/inspector/inline-text/inlineTextEditor.js +27 -81
  279. package/dist/inspector/inline-text/inlineTextLifecycle.js +1 -6
  280. package/dist/inspector/inline-text/textEditChange.d.ts +1 -2
  281. package/dist/inspector/inspection/bridge.d.ts +3 -7
  282. package/dist/inspector/inspection/bridge.js +6 -13
  283. package/dist/inspector/inspection/browserCssInspection.d.ts +12 -11
  284. package/dist/inspector/inspection/browserCssInspection.js +32 -14
  285. package/dist/inspector/inspection/browserCssInspectionRegistry.d.ts +0 -7
  286. package/dist/inspector/inspection/browserCssInspectionRegistry.js +1 -16
  287. package/dist/inspector/inspection/inspectionSnapshot.d.ts +6 -0
  288. package/dist/inspector/inspection/inspectionSnapshot.js +10 -0
  289. package/dist/inspector/inspection/performanceDiagnostics.d.ts +18 -0
  290. package/dist/inspector/inspection/performanceDiagnostics.js +31 -0
  291. package/dist/inspector/inspection/selectionProperty.d.ts +1 -6
  292. package/dist/inspector/inspection/selectionProperty.js +1 -5
  293. package/dist/inspector/inspection/useBrowserCssInspection.d.ts +1 -5
  294. package/dist/inspector/inspection/useBrowserCssInspection.js +22 -59
  295. package/dist/inspector/iterations/capture.d.ts +2 -2
  296. package/dist/inspector/iterations/capture.js +4 -9
  297. package/dist/inspector/iterations/client.d.ts +2 -2
  298. package/dist/inspector/iterations/client.js +0 -1
  299. package/dist/inspector/iterations/coordinator.d.ts +4 -4
  300. package/dist/inspector/iterations/coordinator.js +5 -4
  301. package/dist/inspector/iterations/prompt.d.ts +0 -1
  302. package/dist/inspector/iterations/prompt.js +9 -9
  303. package/dist/inspector/overlay/DomNavigator.d.ts +3 -1
  304. package/dist/inspector/overlay/DomNavigator.js +39 -15
  305. package/dist/inspector/overlay/DropGuideOverlay.d.ts +0 -1
  306. package/dist/inspector/overlay/DropGuideOverlay.js +0 -1
  307. package/dist/inspector/overlay/MeasurementGuideOverlay.d.ts +1 -8
  308. package/dist/inspector/overlay/MeasurementGuideOverlay.js +1 -5
  309. package/dist/inspector/overlay/clickPolicy.d.ts +3 -14
  310. package/dist/inspector/overlay/clickPolicy.js +3 -14
  311. package/dist/inspector/overlay/dropGuide.d.ts +0 -3
  312. package/dist/inspector/overlay/dropGuide.js +0 -3
  313. package/dist/inspector/overlay/frameThrottle.d.ts +0 -1
  314. package/dist/inspector/overlay/frameThrottle.js +0 -1
  315. package/dist/inspector/overlay/interactionStyles.d.ts +1 -1
  316. package/dist/inspector/overlay/interactionStyles.js +19 -8
  317. package/dist/inspector/overlay/measurementGeometry.js +4 -12
  318. package/dist/inspector/overlay/selectedGeometry.d.ts +1 -6
  319. package/dist/inspector/overlay/selectedGeometry.js +1 -8
  320. package/dist/inspector/overlay/spacingGestures.d.ts +14 -21
  321. package/dist/inspector/overlay/spacingGestures.js +151 -31
  322. package/dist/inspector/overlay/structuralGestures.d.ts +2 -9
  323. package/dist/inspector/overlay/structuralGestures.js +1 -4
  324. package/dist/inspector/pageInspector.d.ts +33 -0
  325. package/dist/inspector/pageInspector.js +335 -0
  326. package/dist/inspector/projection/cssEscapes.d.ts +0 -1
  327. package/dist/inspector/projection/cssEscapes.js +2 -4
  328. package/dist/inspector/projection/draftProjection.d.ts +6 -10
  329. package/dist/inspector/projection/draftProjection.js +8 -7
  330. package/dist/inspector/projection/managedStylesheet.d.ts +1 -7
  331. package/dist/inspector/projection/managedStylesheet.js +28 -26
  332. package/dist/inspector/projection/renderedInstance.d.ts +5 -28
  333. package/dist/inspector/projection/renderedInstance.js +13 -33
  334. package/dist/inspector/projection/structuralProjection.d.ts +7 -48
  335. package/dist/inspector/projection/structuralProjection.js +31 -96
  336. package/dist/inspector/projection/textProjection.d.ts +7 -13
  337. package/dist/inspector/projection/textProjection.js +35 -80
  338. package/dist/inspector/prompt/PromptSettingsDialog.d.ts +0 -1
  339. package/dist/inspector/prompt/PromptSettingsDialog.js +0 -1
  340. package/dist/inspector/prompt/clipboardHandoff.d.ts +1 -0
  341. package/dist/inspector/prompt/clipboardHandoff.js +34 -16
  342. package/dist/inspector/prompt/generatePrompt.d.ts +2 -2
  343. package/dist/inspector/prompt/generatePrompt.js +247 -166
  344. package/dist/inspector/prompt/promptDocument.d.ts +3 -0
  345. package/dist/inspector/prompt/promptDocument.js +8 -0
  346. package/dist/inspector/prompt/promptSettings.d.ts +0 -3
  347. package/dist/inspector/prompt/promptSettings.js +7 -8
  348. package/dist/inspector/runtime/devFlag.d.ts +2 -25
  349. package/dist/inspector/runtime/devFlag.js +4 -31
  350. package/dist/inspector/runtime/documentStylesheetOrder.d.ts +0 -2
  351. package/dist/inspector/runtime/editorShell.d.ts +0 -1
  352. package/dist/inspector/runtime/editorShell.js +0 -1
  353. package/dist/inspector/runtime/inspectorStorage.d.ts +11 -0
  354. package/dist/inspector/runtime/inspectorStorage.js +37 -0
  355. package/dist/inspector/runtime/ownedStylesheets.d.ts +14 -0
  356. package/dist/inspector/runtime/ownedStylesheets.js +66 -0
  357. package/dist/inspector/runtime/runtimeConfig.d.ts +14 -84
  358. package/dist/inspector/runtime/runtimeConfig.js +18 -50
  359. package/dist/inspector/runtime/runtimeIdentityClaims.d.ts +19 -0
  360. package/dist/inspector/runtime/runtimeIdentityClaims.js +178 -0
  361. package/dist/inspector/runtime/staticHtmlRuntimeIdentity.d.ts +6 -23
  362. package/dist/inspector/runtime/staticHtmlRuntimeIdentity.js +103 -52
  363. package/dist/inspector/runtime/useRuntimeConfig.d.ts +1 -8
  364. package/dist/inspector/runtime/useRuntimeConfig.js +1 -8
  365. package/dist/inspector/selection/editScope.d.ts +2 -7
  366. package/dist/inspector/selection/editScope.js +15 -14
  367. package/dist/inspector/selection/editTarget.d.ts +1 -5
  368. package/dist/inspector/selection/hierarchy.d.ts +11 -11
  369. package/dist/inspector/selection/hierarchy.js +42 -24
  370. package/dist/inspector/selection/selectionStore.d.ts +0 -3
  371. package/dist/inspector/selection/selectionStore.js +5 -16
  372. package/dist/inspector/selection/sourceSite.d.ts +1 -5
  373. package/dist/inspector/selection/sourceSite.js +2 -8
  374. package/dist/inspector/selection/styleSelection.d.ts +1 -5
  375. package/dist/inspector/selection/styleSelection.js +1 -5
  376. package/dist/inspector/session/lifecycle.d.ts +1 -9
  377. package/dist/inspector/session/lifecycle.js +0 -1
  378. package/dist/inspector/session/sessionContext.d.ts +0 -4
  379. package/dist/inspector/session/sessionContext.js +0 -4
  380. package/dist/inspector/session/sessionFactory.d.ts +0 -9
  381. package/dist/inspector/session/sessionFactory.js +0 -6
  382. package/dist/inspector/settings/SettingsDialog.d.ts +0 -1
  383. package/dist/inspector/settings/SettingsDialog.js +5 -3
  384. package/dist/inspector/shell/AgentStatusButton.d.ts +3 -2
  385. package/dist/inspector/shell/AgentStatusButton.js +7 -7
  386. package/dist/inspector/shell/AppShell.js +6 -2
  387. package/dist/inspector/shell/ChangesLog.js +29 -12
  388. package/dist/inspector/shell/CopyPromptButton.d.ts +2 -1
  389. package/dist/inspector/shell/CopyPromptButton.js +62 -55
  390. package/dist/inspector/shell/EmptyState.js +3 -3
  391. package/dist/inspector/shell/InspectorEditors.d.ts +16 -0
  392. package/dist/inspector/shell/InspectorEditors.js +14 -0
  393. package/dist/inspector/shell/InspectorPanel.d.ts +12 -0
  394. package/dist/inspector/shell/InspectorPanel.js +8 -0
  395. package/dist/inspector/shell/InspectorSelection.d.ts +24 -0
  396. package/dist/inspector/shell/InspectorSelection.js +20 -0
  397. package/dist/inspector/shell/InspectorShell.d.ts +0 -3
  398. package/dist/inspector/shell/InspectorShell.js +44 -58
  399. package/dist/inspector/shell/NudgeLogoIcon.d.ts +5 -0
  400. package/dist/inspector/shell/NudgeLogoIcon.js +5 -0
  401. package/dist/inspector/shell/PeekOriginalButton.d.ts +0 -5
  402. package/dist/inspector/shell/PeekOriginalButton.js +3 -8
  403. package/dist/inspector/shell/PeekOriginalIcon.d.ts +0 -5
  404. package/dist/inspector/shell/PeekOriginalIcon.js +0 -5
  405. package/dist/inspector/shell/PromptActionButton.d.ts +21 -0
  406. package/dist/inspector/shell/PromptActionButton.js +14 -0
  407. package/dist/inspector/shell/elementName.d.ts +5 -0
  408. package/dist/inspector/shell/elementName.js +29 -0
  409. package/dist/inspector/shell/interactionStatePreview.d.ts +6 -0
  410. package/dist/inspector/shell/interactionStatePreview.js +107 -0
  411. package/dist/inspector/shell/originalPreview.d.ts +1 -5
  412. package/dist/inspector/shell/originalPreview.js +5 -37
  413. package/dist/inspector/shell/stateValue.d.ts +1 -2
  414. package/dist/inspector/shell/stateValue.js +4 -8
  415. package/dist/inspector/shell/styleState.d.ts +1 -2
  416. package/dist/inspector/shell/styleState.js +1 -2
  417. package/dist/inspector/sketch/SketchEditor.js +5 -5
  418. package/dist/inspector/sketch/SketchFrameOverlay.d.ts +2 -1
  419. package/dist/inspector/sketch/SketchFrameOverlay.js +13 -16
  420. package/dist/inspector/sketch/SketchOverlay.d.ts +3 -5
  421. package/dist/inspector/sketch/SketchOverlay.js +138 -263
  422. package/dist/inspector/sketch/SketchPromptPanel.d.ts +1 -2
  423. package/dist/inspector/sketch/SketchPromptPanel.js +8 -2
  424. package/dist/inspector/sketch/SketchThumbnail.d.ts +5 -0
  425. package/dist/inspector/sketch/SketchThumbnail.js +18 -0
  426. package/dist/inspector/sketch/SketchWorkspace.d.ts +1 -2
  427. package/dist/inspector/sketch/SketchWorkspace.js +70 -37
  428. package/dist/inspector/sketch/capture.d.ts +12 -3
  429. package/dist/inspector/sketch/capture.js +31 -14
  430. package/dist/inspector/sketch/copySketch.d.ts +4 -0
  431. package/dist/inspector/sketch/copySketch.js +43 -0
  432. package/dist/inspector/sketch/drawingTools.d.ts +15 -0
  433. package/dist/inspector/sketch/drawingTools.js +46 -0
  434. package/dist/inspector/sketch/frameHeading.d.ts +3 -0
  435. package/dist/inspector/sketch/frameHeading.js +23 -0
  436. package/dist/inspector/sketch/freehand.d.ts +0 -1
  437. package/dist/inspector/sketch/freehand.js +3 -4
  438. package/dist/inspector/sketch/geometry.d.ts +2 -1
  439. package/dist/inspector/sketch/geometry.js +15 -1
  440. package/dist/inspector/sketch/handoff.js +0 -1
  441. package/dist/inspector/sketch/history.d.ts +26 -0
  442. package/dist/inspector/sketch/history.js +55 -0
  443. package/dist/inspector/sketch/interaction.d.ts +3 -5
  444. package/dist/inspector/sketch/interaction.js +8 -11
  445. package/dist/inspector/sketch/model.d.ts +33 -6
  446. package/dist/inspector/sketch/model.js +101 -63
  447. package/dist/inspector/sketch/persistence.d.ts +14 -1
  448. package/dist/inspector/sketch/persistence.js +64 -8
  449. package/dist/inspector/sketch/raster.d.ts +3 -2
  450. package/dist/inspector/sketch/raster.js +40 -20
  451. package/dist/inspector/sketch/store.d.ts +1 -1
  452. package/dist/inspector/sketch/store.js +3 -4
  453. package/dist/inspector/sketch/videoFrames.d.ts +6 -0
  454. package/dist/inspector/sketch/videoFrames.js +80 -0
  455. package/dist/inspector/spacing/projection.d.ts +0 -8
  456. package/dist/inspector/spacing/projection.js +38 -20
  457. package/dist/inspector/styleEditors/BackgroundEditor.js +3 -2
  458. package/dist/inspector/styleEditors/BorderEditor.js +30 -135
  459. package/dist/inspector/styleEditors/BorderRadiusEditor.js +8 -3
  460. package/dist/inspector/styleEditors/ChildPlacement.d.ts +12 -0
  461. package/dist/inspector/styleEditors/ChildPlacement.js +9 -0
  462. package/dist/inspector/styleEditors/FlexControls.d.ts +35 -0
  463. package/dist/inspector/styleEditors/FlexControls.js +158 -0
  464. package/dist/inspector/styleEditors/GapField.d.ts +5 -2
  465. package/dist/inspector/styleEditors/GapField.js +3 -4
  466. package/dist/inspector/styleEditors/GridChildSection.d.ts +0 -5
  467. package/dist/inspector/styleEditors/GridChildSection.js +0 -5
  468. package/dist/inspector/styleEditors/GridPicker.d.ts +1 -1
  469. package/dist/inspector/styleEditors/GridPicker.js +2 -4
  470. package/dist/inspector/styleEditors/GridSection.d.ts +10 -8
  471. package/dist/inspector/styleEditors/GridSection.js +22 -9
  472. package/dist/inspector/styleEditors/GridValueField.d.ts +1 -5
  473. package/dist/inspector/styleEditors/GridValueField.js +2 -8
  474. package/dist/inspector/styleEditors/ImageBackgroundEditor.d.ts +0 -1
  475. package/dist/inspector/styleEditors/ImageBackgroundEditor.js +1 -2
  476. package/dist/inspector/styleEditors/LayoutBlockedIndicator.d.ts +0 -1
  477. package/dist/inspector/styleEditors/LayoutBlockedIndicator.js +0 -1
  478. package/dist/inspector/styleEditors/LayoutComboField.js +0 -5
  479. package/dist/inspector/styleEditors/LayoutModeRow.d.ts +14 -0
  480. package/dist/inspector/styleEditors/LayoutModeRow.js +60 -0
  481. package/dist/inspector/styleEditors/LayoutSection.d.ts +2 -2
  482. package/dist/inspector/styleEditors/LayoutSection.js +30 -356
  483. package/dist/inspector/styleEditors/OpacityEditor.js +7 -5
  484. package/dist/inspector/styleEditors/PositionControls.d.ts +18 -0
  485. package/dist/inspector/styleEditors/PositionControls.js +16 -0
  486. package/dist/inspector/styleEditors/SizeSection.d.ts +18 -0
  487. package/dist/inspector/styleEditors/SizeSection.js +71 -0
  488. package/dist/inspector/styleEditors/{SpacingBox.d.ts → SpacingField.d.ts} +3 -10
  489. package/dist/inspector/styleEditors/{SpacingBox.js → SpacingField.js} +15 -29
  490. package/dist/inspector/styleEditors/Typography.js +2 -4
  491. package/dist/inspector/styleEditors/borderModel.d.ts +36 -0
  492. package/dist/inspector/styleEditors/borderModel.js +105 -0
  493. package/dist/inspector/styleEditors/completeCssValue.d.ts +1 -5
  494. package/dist/inspector/styleEditors/completeCssValue.js +3 -13
  495. package/dist/inspector/styleEditors/fieldValue.d.ts +20 -0
  496. package/dist/inspector/styleEditors/fieldValue.js +26 -0
  497. package/dist/inspector/styleEditors/gradientValue.d.ts +1 -1
  498. package/dist/inspector/styleEditors/gradientValue.js +3 -2
  499. package/dist/inspector/styleEditors/gridChildModel.d.ts +7 -47
  500. package/dist/inspector/styleEditors/gridChildModel.js +6 -37
  501. package/dist/inspector/styleEditors/hiddenSizeOverrides.d.ts +5 -0
  502. package/dist/inspector/styleEditors/hiddenSizeOverrides.js +42 -0
  503. package/dist/inspector/styleEditors/inlineAuthored.d.ts +1 -8
  504. package/dist/inspector/styleEditors/inlineAuthored.js +3 -17
  505. package/dist/inspector/styleEditors/layoutMode.d.ts +15 -0
  506. package/dist/inspector/styleEditors/layoutMode.js +33 -0
  507. package/dist/inspector/styleEditors/layoutPreviewState.d.ts +0 -1
  508. package/dist/inspector/styleEditors/layoutPreviewState.js +0 -1
  509. package/dist/inspector/styleEditors/layoutValue.d.ts +2 -8
  510. package/dist/inspector/styleEditors/layoutValue.js +6 -15
  511. package/dist/inspector/styleEditors/nudgeValue.d.ts +1 -13
  512. package/dist/inspector/styleEditors/nudgeValue.js +1 -13
  513. package/dist/inspector/styleEditors/rowLookup.d.ts +1 -5
  514. package/dist/inspector/styleEditors/rowLookup.js +1 -5
  515. package/dist/inspector/styleEditors/stringRecord.d.ts +1 -2
  516. package/dist/inspector/styleEditors/stylePresence.d.ts +0 -2
  517. package/dist/inspector/styleEditors/stylePresence.js +1 -4
  518. package/dist/inspector/styleEditors/textRelevance.d.ts +1 -1
  519. package/dist/inspector/styleEditors/textRelevance.js +1 -1
  520. package/dist/inspector/styleEditors/useFieldVisibility.js +1 -2
  521. package/dist/inspector/styleEditors/useLayoutContext.d.ts +13 -0
  522. package/dist/inspector/styleEditors/useLayoutContext.js +53 -0
  523. package/dist/inspector/styleEditors/valuePolicy.d.ts +1 -5
  524. package/dist/inspector/styleEditors/valuePolicy.js +0 -1
  525. package/dist/inspector/testing.d.ts +1 -4
  526. package/dist/inspector/testing.js +1 -4
  527. package/dist/inspector/tokens/TokenChip.d.ts +1 -4
  528. package/dist/inspector/tokens/TokenChip.js +1 -4
  529. package/dist/inspector/tokens/TokenField.d.ts +4 -3
  530. package/dist/inspector/tokens/TokenField.js +53 -32
  531. package/dist/inspector/tokens/TokensPanel.js +2 -1
  532. package/dist/inspector/tokens/catalog.d.ts +2 -10
  533. package/dist/inspector/tokens/catalog.js +5 -12
  534. package/dist/inspector/tokens/dragPointerLock.d.ts +0 -1
  535. package/dist/inspector/tokens/dragPointerLock.js +2 -3
  536. package/dist/inspector/tokens/editActions.d.ts +4 -4
  537. package/dist/inspector/tokens/editActions.js +11 -7
  538. package/dist/inspector/tokens/resolution/cascade.d.ts +1 -5
  539. package/dist/inspector/tokens/resolution/cascade.js +1 -5
  540. package/dist/inspector/tokens/resolution/containerQueryEvaluator.d.ts +11 -0
  541. package/dist/inspector/tokens/resolution/containerQueryEvaluator.js +82 -0
  542. package/dist/inspector/tokens/resolution/cssomCollector.d.ts +4 -19
  543. package/dist/inspector/tokens/resolution/cssomCollector.js +186 -122
  544. package/dist/inspector/tokens/resolution/nestedSelectors.d.ts +2 -0
  545. package/dist/inspector/tokens/resolution/nestedSelectors.js +63 -0
  546. package/dist/inspector/tokens/resolution/ruleMatching.d.ts +4 -14
  547. package/dist/inspector/tokens/resolution/ruleMatching.js +136 -63
  548. package/dist/inspector/tokens/resolution/selectorSemantics.d.ts +3 -14
  549. package/dist/inspector/tokens/resolution/selectorSemantics.js +12 -27
  550. package/dist/inspector/tokens/resolution.d.ts +11 -27
  551. package/dist/inspector/tokens/resolution.js +105 -181
  552. package/dist/inspector/tokens/tokenAvailability.d.ts +2 -14
  553. package/dist/inspector/tokens/tokenAvailability.js +6 -38
  554. package/dist/inspector/tokens/tokenEdits.d.ts +1 -1
  555. package/dist/inspector/tokens/tokenEdits.js +1 -1
  556. package/dist/inspector/tokens/valueSemanticsAdapter.d.ts +0 -1
  557. package/dist/inspector/tokens/valueSemanticsAdapter.js +18 -2
  558. package/dist/inspector/ui/AtRuleContext.d.ts +5 -5
  559. package/dist/inspector/ui/AtRuleContext.js +8 -6
  560. package/dist/inspector/ui/ControlSurface.d.ts +0 -4
  561. package/dist/inspector/ui/Disclosure.d.ts +0 -5
  562. package/dist/inspector/ui/Disclosure.js +0 -4
  563. package/dist/inspector/ui/InlineStyleWarning.d.ts +0 -1
  564. package/dist/inspector/ui/InlineStyleWarning.js +2 -2
  565. package/dist/inspector/ui/InspectorPopover.d.ts +1 -5
  566. package/dist/inspector/ui/InspectorPopover.js +1 -5
  567. package/dist/inspector/ui/InspectorStyle.d.ts +8 -0
  568. package/dist/inspector/ui/InspectorStyle.js +26 -0
  569. package/dist/inspector/ui/PopoverListbox.d.ts +2 -1
  570. package/dist/inspector/ui/PopoverListbox.js +3 -3
  571. package/dist/inspector/ui/SegmentedControl.d.ts +4 -4
  572. package/dist/inspector/ui/SegmentedControl.js +6 -4
  573. package/dist/inspector/ui/SideValuesField.d.ts +1 -6
  574. package/dist/inspector/ui/SideValuesField.js +2 -8
  575. package/dist/inspector/ui/Toast.d.ts +10 -0
  576. package/dist/inspector/ui/Toast.js +26 -0
  577. package/dist/inspector/ui/assets/canvasIllustration.d.ts +2 -0
  578. package/dist/inspector/ui/assets/canvasIllustration.js +21 -0
  579. package/dist/inspector/ui/assets/gridIllustration.d.ts +2 -0
  580. package/dist/inspector/ui/assets/{grid.svg → gridIllustration.js} +3 -2
  581. package/dist/inspector/ui/atRuleSegments.d.ts +13 -0
  582. package/dist/inspector/ui/atRuleSegments.js +34 -0
  583. package/dist/inspector/ui/classNames.d.ts +0 -1
  584. package/dist/inspector/ui/classNames.js +0 -1
  585. package/dist/inspector/ui/customCursors.d.ts +11 -0
  586. package/dist/inspector/ui/customCursors.js +29 -7
  587. package/dist/inspector/ui/styles.js +25 -25
  588. package/dist/inspector/workspace/commands.js +1 -2
  589. package/dist/inspector/workspace/controller.js +20 -2
  590. package/dist/inspector/workspace/handoff.d.ts +1 -5
  591. package/dist/inspector/workspace/handoff.js +4 -7
  592. package/dist/inspector/workspace/sentItems.d.ts +3 -6
  593. package/dist/inspector/workspace/sentItems.js +6 -24
  594. package/dist/inspector/workspace/timeline.d.ts +28 -11
  595. package/dist/inspector/workspace/timeline.js +117 -96
  596. package/dist/internal/agent-protocol.d.ts +53 -38
  597. package/dist/internal/agent-protocol.js +151 -42
  598. package/dist/nudge-ui.mjs +155 -92
  599. package/dist/project/artifacts.js +24 -21
  600. package/dist/project/files.d.ts +0 -1
  601. package/dist/project/files.js +2 -9
  602. package/dist/project/identity.d.ts +1 -5
  603. package/dist/project/identity.js +1 -5
  604. package/dist/project/mcpPackage.d.ts +3 -0
  605. package/dist/project/mcpPackage.js +55 -0
  606. package/dist/project/pathPolicy.d.ts +1 -6
  607. package/dist/project/pathPolicy.js +1 -6
  608. package/dist/project/tokens.d.ts +2 -12
  609. package/dist/project/tokens.js +4 -15
  610. package/dist/transport/editor.d.ts +1 -12
  611. package/dist/transport/editor.js +2 -13
  612. package/dist/transport/index.d.ts +0 -5
  613. package/dist/transport/index.js +0 -5
  614. package/dist/transport/routes.d.ts +0 -5
  615. package/dist/transport/routes.js +0 -5
  616. package/package.json +16 -5
  617. package/dist/inspector/canvas/measurementProjection.d.ts +0 -8
  618. package/dist/inspector/canvas/measurementProjection.js +0 -16
  619. package/dist/inspector/changes/changesLog.d.ts +0 -49
  620. package/dist/inspector/changes/changesLog.js +0 -255
  621. package/dist/inspector/changes/draftChanges.d.ts +0 -58
  622. package/dist/inspector/changes/draftChanges.js +0 -304
  623. package/dist/inspector/conformance/projection.d.ts +0 -2
  624. package/dist/inspector/conformance/projection.js +0 -3
  625. package/dist/inspector/inline-text/textChangeBoundary.d.ts +0 -6
  626. package/dist/inspector/inline-text/textChangeBoundary.js +0 -1
  627. package/dist/inspector/overlay/InspectorOverlay.d.ts +0 -5
  628. package/dist/inspector/overlay/InspectorOverlay.js +0 -332
  629. package/dist/inspector/overlay/elementSelector.d.ts +0 -1
  630. package/dist/inspector/overlay/elementSelector.js +0 -111
  631. package/dist/inspector/sketch/SketchChanges.d.ts +0 -2
  632. package/dist/inspector/sketch/SketchChanges.js +0 -72
  633. package/dist/inspector/sketch/SketchEntryButton.d.ts +0 -4
  634. package/dist/inspector/sketch/SketchEntryButton.js +0 -11
  635. package/dist/inspector/sketch/SketchLayersPanel.d.ts +0 -2
  636. package/dist/inspector/sketch/SketchLayersPanel.js +0 -71
  637. package/dist/inspector/styleEditors/InsetSection.d.ts +0 -15
  638. package/dist/inspector/styleEditors/InsetSection.js +0 -15
  639. package/dist/inspector/styleEditors/PositionInsets.d.ts +0 -15
  640. package/dist/inspector/styleEditors/PositionInsets.js +0 -12
  641. package/dist/inspector/tokens/TokenDropdown.d.ts +0 -13
  642. package/dist/inspector/tokens/TokenDropdown.js +0 -59
@@ -1,12 +1,10 @@
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
- export type SketchEntryTool = "pen" | "annotate";
4
3
  export interface SketchInteractionSnapshot {
5
4
  readonly captureState: SketchCaptureState;
6
5
  readonly captured: CapturedSketch | null;
7
6
  readonly editingId: string | null;
8
7
  readonly error: string | null;
9
- readonly initialTool: SketchEntryTool;
10
8
  readonly draftId: string | null;
11
9
  }
12
10
  export declare function getSketchInteractionSnapshot(): SketchInteractionSnapshot;
@@ -14,8 +12,8 @@ export declare function subscribeSketchInteraction(listener: () => void): () =>
14
12
  export declare function useSketchInteraction(): SketchInteractionSnapshot;
15
13
  export declare function isSketchInteractionActive(): boolean;
16
14
  export declare function useSketchInteractionActive(): boolean;
17
- export declare function beginSketchCapture(initialTool?: SketchEntryTool): void;
18
- export declare function completeSketchCapture(hostElement: HTMLElement): Promise<CapturedSketch>;
15
+ export declare function beginSketchCapture(): void;
16
+ export declare function completeSketchCapture(hostElement: HTMLElement, capture?: typeof captureViewport): Promise<CapturedSketch>;
19
17
  export declare function cancelSketchInteraction(): void;
20
18
  export declare function openSketchEditor(sketchId: string): void;
21
19
  export declare function closeSketchEditor(): void;
@@ -1,4 +1,4 @@
1
- import { getActiveDraftChanges } from "../changes/draftChanges.js";
1
+ import { getActiveDraftChanges } from "../drafts/store.js";
2
2
  import { useSyncExternalStore } from "react";
3
3
  import { captureViewport, } from "./capture.js";
4
4
  const EMPTY_SNAPSHOT = {
@@ -6,7 +6,6 @@ const EMPTY_SNAPSHOT = {
6
6
  captured: null,
7
7
  editingId: null,
8
8
  error: null,
9
- initialTool: "pen",
10
9
  draftId: null,
11
10
  };
12
11
  let snapshot = EMPTY_SNAPSHOT;
@@ -40,25 +39,24 @@ export function useSketchInteractionActive() {
40
39
  const current = useSketchInteraction();
41
40
  return current.captureState !== "idle" || current.captured !== null || current.editingId !== null;
42
41
  }
43
- export function beginSketchCapture(initialTool = "pen") {
42
+ export function beginSketchCapture() {
44
43
  captureController?.abort();
45
44
  captureController = null;
46
- publish({ captureState: "sketching", captured: null, editingId: null, error: null, initialTool, draftId: getActiveDraftChanges().draftId });
45
+ publish({ captureState: "sketching", captured: null, editingId: null, error: null, draftId: getActiveDraftChanges().draftId });
47
46
  }
48
- export function completeSketchCapture(hostElement) {
47
+ export function completeSketchCapture(hostElement, capture = captureViewport) {
49
48
  captureController?.abort();
50
49
  const controller = new AbortController();
51
50
  captureController = controller;
52
- const initialTool = snapshot.initialTool;
53
51
  const draftId = snapshot.draftId;
54
- publish({ captureState: "capturing", captured: null, editingId: null, error: null, initialTool, draftId });
52
+ publish({ captureState: "capturing", captured: null, editingId: null, error: null, draftId });
55
53
  const options = { hostElement, signal: controller.signal };
56
- return captureViewport(options)
54
+ return capture(options)
57
55
  .then((captured) => {
58
56
  if (captureController !== controller)
59
57
  return captured;
60
58
  captureController = null;
61
- publish({ captureState: "ready", captured, editingId: null, error: null, initialTool, draftId });
59
+ publish({ captureState: "ready", captured, editingId: null, error: null, draftId });
62
60
  return captured;
63
61
  })
64
62
  .catch((error) => {
@@ -74,7 +72,6 @@ export function completeSketchCapture(hostElement) {
74
72
  captured: null,
75
73
  editingId: null,
76
74
  error: error instanceof Error ? error.message : "The viewport could not be captured.",
77
- initialTool,
78
75
  draftId,
79
76
  });
80
77
  throw error;
@@ -88,7 +85,7 @@ export function cancelSketchInteraction() {
88
85
  export function openSketchEditor(sketchId) {
89
86
  captureController?.abort();
90
87
  captureController = null;
91
- publish({ captureState: "idle", captured: null, editingId: sketchId, error: null, initialTool: "pen", draftId: null });
88
+ publish({ captureState: "idle", captured: null, editingId: sketchId, error: null, draftId: null });
92
89
  }
93
90
  export function closeSketchEditor() {
94
91
  if (snapshot.captureState !== "ready" && snapshot.editingId === null)
@@ -17,8 +17,39 @@ export declare const SKETCH_LIMITS: {
17
17
  readonly title: 512;
18
18
  };
19
19
  export declare const SKETCH_STROKE_WIDTH = 6;
20
+ export declare const SKETCH_RECTANGLE_STROKE_WIDTH = 4;
21
+ export declare const SKETCH_RECTANGLE_FILL_OPACITY = 0.1;
20
22
  export declare const SKETCH_STROKE_COLOR = "#0096ff";
23
+ /** Annotation markers and the notes panel; independent of the chosen pen color. */
24
+ export declare const SKETCH_ACCENT_COLOR = "#0096ff";
21
25
  export declare const SKETCH_STROKE_OUTLINE = "";
26
+ /** Ordered clockwise around the toolbar's swatch picker. */
27
+ export declare const SKETCH_PEN_COLORS: readonly [{
28
+ readonly id: "red";
29
+ readonly name: "Red";
30
+ readonly value: "#f03e1e";
31
+ }, {
32
+ readonly id: "orange";
33
+ readonly name: "Orange";
34
+ readonly value: "#ff8a00";
35
+ }, {
36
+ readonly id: "blue";
37
+ readonly name: "Blue";
38
+ readonly value: "#0096ff";
39
+ }, {
40
+ readonly id: "black";
41
+ readonly name: "Black";
42
+ readonly value: "#242424";
43
+ }, {
44
+ readonly id: "yellow";
45
+ readonly name: "Yellow";
46
+ readonly value: "#ffc800";
47
+ }, {
48
+ readonly id: "green";
49
+ readonly name: "Green";
50
+ readonly value: "#1fc85a";
51
+ }];
52
+ export type SketchPenColor = (typeof SKETCH_PEN_COLORS)[number];
22
53
  export declare const SKETCH_ANNOTATION_RADIUS = 16;
23
54
  declare const LEGACY_SKETCH_STROKE_COLOR = "#ef4444";
24
55
  declare const LEGACY_SKETCH_STROKE_OUTLINE = "#111827";
@@ -29,7 +60,7 @@ export interface SketchPoint {
29
60
  readonly x: number;
30
61
  readonly y: number;
31
62
  }
32
- type SketchStrokeColor = typeof SKETCH_STROKE_COLOR | typeof LEGACY_SKETCH_STROKE_COLOR;
63
+ export type SketchStrokeColor = SketchPenColor["value"] | typeof LEGACY_SKETCH_STROKE_COLOR;
33
64
  type SketchStrokeOutline = typeof SKETCH_STROKE_OUTLINE | typeof LEGACY_SKETCH_STROKE_OUTLINE;
34
65
  export type SketchStrokeKind = "freehand" | "rectangle";
35
66
  export interface SketchStroke {
@@ -63,11 +94,7 @@ export interface SketchDocument {
63
94
  readonly strokes: readonly SketchStroke[];
64
95
  /** Optional for compatibility with sketches saved before annotations existed. */
65
96
  readonly annotations?: readonly SketchAnnotation[];
66
- /**
67
- * Size of `annotatedImage`, which can be taller than the capture when a
68
- * notes panel is appended. `capture.imageWidth`/`imageHeight` size the
69
- * original screenshot and the stroke coordinate space.
70
- */
97
+ /** Size of `annotatedImage` (grows with a notes panel); `capture.imageWidth`/`imageHeight` size the stroke coordinate space. */
71
98
  readonly imageWidth: number;
72
99
  readonly imageHeight: number;
73
100
  readonly originalByteSize: number;
@@ -16,28 +16,54 @@ export const SKETCH_LIMITS = {
16
16
  title: 512,
17
17
  };
18
18
  export const SKETCH_STROKE_WIDTH = 6;
19
+ export const SKETCH_RECTANGLE_STROKE_WIDTH = 4;
20
+ export const SKETCH_RECTANGLE_FILL_OPACITY = 0.1;
19
21
  export const SKETCH_STROKE_COLOR = "#0096ff";
22
+ /** Annotation markers and the notes panel; independent of the chosen pen color. */
23
+ export const SKETCH_ACCENT_COLOR = "#0096ff";
20
24
  export const SKETCH_STROKE_OUTLINE = "";
25
+ /** Ordered clockwise around the toolbar's swatch picker. */
26
+ export const SKETCH_PEN_COLORS = [
27
+ { id: "red", name: "Red", value: "#f03e1e" },
28
+ { id: "orange", name: "Orange", value: "#ff8a00" },
29
+ { id: "blue", name: "Blue", value: SKETCH_STROKE_COLOR },
30
+ { id: "black", name: "Black", value: "#242424" },
31
+ { id: "yellow", name: "Yellow", value: "#ffc800" },
32
+ { id: "green", name: "Green", value: "#1fc85a" },
33
+ ];
21
34
  export const SKETCH_ANNOTATION_RADIUS = 16;
22
- // Keep accepting sketches saved before the annotation color update. Existing
23
- // PNGs remain unchanged until a user edits and saves them again.
35
+ // Keep accepting sketches saved before the annotation color update.
24
36
  const LEGACY_SKETCH_STROKE_COLOR = "#ef4444";
25
37
  const LEGACY_SKETCH_STROKE_OUTLINE = "#111827";
26
38
  export function createSketchFilename(id, revision) {
27
39
  return `sketch-${id}-r${revision}.png`;
28
40
  }
29
- export function isFiniteNumber(value) {
41
+ export function isFiniteNumber(
42
+ // Stored sketch fields are untrusted until this check narrows them.
43
+ // oxlint-disable-next-line anti-slop/no-unknown-parameters
44
+ value) {
30
45
  return typeof value === "number" && Number.isFinite(value);
31
46
  }
32
- function boundedString(value, maximum, allowEmpty = false) {
47
+ function safeIntegerInRange(
48
+ // oxlint-disable-next-line anti-slop/no-unknown-parameters
49
+ value, minimum, maximum = Number.MAX_SAFE_INTEGER) {
50
+ return typeof value === "number" && Number.isSafeInteger(value) && value >= minimum && value <= maximum;
51
+ }
52
+ function boundedString(
53
+ // oxlint-disable-next-line anti-slop/no-unknown-parameters
54
+ value, maximum, allowEmpty = false) {
33
55
  return typeof value === "string" && value.length <= maximum && (allowEmpty || value.length > 0);
34
56
  }
35
- function isBlob(value, mimeType) {
57
+ function isBlob(
58
+ // oxlint-disable-next-line anti-slop/no-unknown-parameters
59
+ value, mimeType) {
36
60
  return typeof Blob !== "undefined"
37
61
  && value instanceof Blob
38
62
  && (mimeType === undefined || value.type === mimeType);
39
63
  }
40
- function validHttpUrl(value, maximum) {
64
+ function validHttpUrl(
65
+ // oxlint-disable-next-line anti-slop/no-unknown-parameters
66
+ value, maximum) {
41
67
  if (!boundedString(value, maximum))
42
68
  return false;
43
69
  try {
@@ -48,9 +74,17 @@ function validHttpUrl(value, maximum) {
48
74
  return false;
49
75
  }
50
76
  }
51
- export function isSketchCaptureMetadata(value) {
52
- if (!value || typeof value !== "object" || Array.isArray(value))
77
+ function isPlainObject(
78
+ // oxlint-disable-next-line anti-slop/no-unknown-parameters
79
+ value) {
80
+ return typeof value === "object" && value !== null && !Array.isArray(value);
81
+ }
82
+ export function isSketchCaptureMetadata(
83
+ // oxlint-disable-next-line anti-slop/no-unknown-parameters
84
+ value) {
85
+ if (!isPlainObject(value))
53
86
  return false;
87
+ // SAFETY: the object check above makes reading optional candidate fields safe.
54
88
  const capture = value;
55
89
  const keys = [
56
90
  "url",
@@ -70,14 +104,9 @@ export function isSketchCaptureMetadata(value) {
70
104
  return false;
71
105
  return validHttpUrl(capture.url, SKETCH_LIMITS.url)
72
106
  && boundedString(capture.title, SKETCH_LIMITS.title, true)
73
- && Number.isSafeInteger(capture.timestamp)
74
- && capture.timestamp > 0
75
- && Number.isSafeInteger(capture.viewportWidth)
76
- && capture.viewportWidth > 0
77
- && capture.viewportWidth <= 100_000
78
- && Number.isSafeInteger(capture.viewportHeight)
79
- && capture.viewportHeight > 0
80
- && capture.viewportHeight <= 100_000
107
+ && safeIntegerInRange(capture.timestamp, 1)
108
+ && safeIntegerInRange(capture.viewportWidth, 1, 100_000)
109
+ && safeIntegerInRange(capture.viewportHeight, 1, 100_000)
81
110
  && isFiniteNumber(capture.scrollX)
82
111
  && capture.scrollX >= 0
83
112
  && isFiniteNumber(capture.scrollY)
@@ -87,16 +116,15 @@ export function isSketchCaptureMetadata(value) {
87
116
  && capture.devicePixelRatio <= 100
88
117
  && boundedString(capture.host, 128)
89
118
  && boundedString(capture.framework, 128)
90
- && Number.isSafeInteger(capture.imageWidth)
91
- && capture.imageWidth > 0
92
- && capture.imageWidth <= SKETCH_LIMITS.imageEdge
93
- && Number.isSafeInteger(capture.imageHeight)
94
- && capture.imageHeight > 0
95
- && capture.imageHeight <= SKETCH_LIMITS.imageEdge;
119
+ && safeIntegerInRange(capture.imageWidth, 1, SKETCH_LIMITS.imageEdge)
120
+ && safeIntegerInRange(capture.imageHeight, 1, SKETCH_LIMITS.imageEdge);
96
121
  }
97
- export function isSketchPoint(value) {
98
- if (!value || typeof value !== "object" || Array.isArray(value))
122
+ export function isSketchPoint(
123
+ // oxlint-disable-next-line anti-slop/no-unknown-parameters
124
+ value) {
125
+ if (!isPlainObject(value))
99
126
  return false;
127
+ // SAFETY: the object check above makes reading optional candidate fields safe.
100
128
  const point = value;
101
129
  return Object.keys(point).every((key) => key === "x" || key === "y")
102
130
  && isFiniteNumber(point.x)
@@ -106,21 +134,25 @@ export function isSketchPoint(value) {
106
134
  && point.y >= 0
107
135
  && point.y <= SKETCH_LIMITS.imageEdge;
108
136
  }
109
- export function isSketchAnnotation(value) {
110
- if (!value || typeof value !== "object" || Array.isArray(value))
137
+ export function isSketchAnnotation(
138
+ // oxlint-disable-next-line anti-slop/no-unknown-parameters
139
+ value) {
140
+ if (!isPlainObject(value))
111
141
  return false;
142
+ // SAFETY: the object check above makes reading optional candidate fields safe.
112
143
  const annotation = value;
113
144
  return Object.keys(annotation).every((key) => ["id", "number", "point", "description"].includes(key))
114
145
  && boundedString(annotation.id, 256)
115
- && Number.isSafeInteger(annotation.number)
116
- && annotation.number >= 1
117
- && annotation.number <= SKETCH_LIMITS.annotations
146
+ && safeIntegerInRange(annotation.number, 1, SKETCH_LIMITS.annotations)
118
147
  && isSketchPoint(annotation.point)
119
148
  && boundedString(annotation.description, SKETCH_LIMITS.description);
120
149
  }
121
- export function isSketchStroke(value) {
122
- if (!value || typeof value !== "object" || Array.isArray(value))
150
+ export function isSketchStroke(
151
+ // oxlint-disable-next-line anti-slop/no-unknown-parameters
152
+ value) {
153
+ if (!isPlainObject(value))
123
154
  return false;
155
+ // SAFETY: the object check above makes reading optional candidate fields safe.
124
156
  const stroke = value;
125
157
  return Object.keys(stroke).every((key) => ["id", "kind", "width", "color", "outlineColor", "points"].includes(key))
126
158
  && boundedString(stroke.id, 256)
@@ -128,16 +160,34 @@ export function isSketchStroke(value) {
128
160
  && isFiniteNumber(stroke.width)
129
161
  && stroke.width > 0
130
162
  && stroke.width <= 128
131
- && (stroke.color === SKETCH_STROKE_COLOR || stroke.color === LEGACY_SKETCH_STROKE_COLOR)
163
+ && (SKETCH_PEN_COLORS.some((color) => color.value === stroke.color)
164
+ || stroke.color === LEGACY_SKETCH_STROKE_COLOR)
132
165
  && (stroke.outlineColor === SKETCH_STROKE_OUTLINE || stroke.outlineColor === LEGACY_SKETCH_STROKE_OUTLINE)
133
166
  && Array.isArray(stroke.points)
134
167
  && stroke.points.length > 0
135
168
  && stroke.points.length <= SKETCH_LIMITS.points
136
169
  && stroke.points.every(isSketchPoint);
137
170
  }
138
- export function isSketchDocument(value) {
139
- if (!value || typeof value !== "object" || Array.isArray(value))
171
+ function isSketchStrokeList(
172
+ // oxlint-disable-next-line anti-slop/no-unknown-parameters
173
+ value) {
174
+ return Array.isArray(value)
175
+ && value.length <= SKETCH_LIMITS.strokes
176
+ && value.every(isSketchStroke);
177
+ }
178
+ function isSketchAnnotationList(
179
+ // oxlint-disable-next-line anti-slop/no-unknown-parameters
180
+ value) {
181
+ return Array.isArray(value)
182
+ && value.length <= SKETCH_LIMITS.annotations
183
+ && value.every(isSketchAnnotation);
184
+ }
185
+ export function isSketchDocument(
186
+ // oxlint-disable-next-line anti-slop/no-unknown-parameters
187
+ value) {
188
+ if (!isPlainObject(value))
140
189
  return false;
190
+ // SAFETY: the object check above makes reading optional candidate fields safe.
141
191
  const document = value;
142
192
  return Object.keys(document).every((key) => [
143
193
  "schemaVersion",
@@ -161,42 +211,32 @@ export function isSketchDocument(value) {
161
211
  && document.schemaVersion === SKETCH_SCHEMA_VERSION
162
212
  && boundedString(document.projectId, 256)
163
213
  && boundedString(document.id, 256)
164
- && Number.isSafeInteger(document.revision)
165
- && document.revision > 0
166
- && Number.isSafeInteger(document.createdAt)
167
- && Number.isSafeInteger(document.updatedAt)
214
+ && safeIntegerInRange(document.revision, 1)
215
+ && safeIntegerInRange(document.createdAt, Number.MIN_SAFE_INTEGER)
216
+ && safeIntegerInRange(document.updatedAt, Number.MIN_SAFE_INTEGER)
168
217
  && isSketchCaptureMetadata(document.capture)
169
218
  && boundedString(document.description, SKETCH_LIMITS.description, true)
170
- && Array.isArray(document.strokes)
171
- && document.strokes.length <= SKETCH_LIMITS.strokes
172
- && document.strokes.every(isSketchStroke)
219
+ && isSketchStrokeList(document.strokes)
173
220
  && document.strokes.reduce((total, stroke) => total + stroke.points.length, 0) <= SKETCH_LIMITS.points
174
221
  && (document.annotations === undefined
175
- || (Array.isArray(document.annotations)
176
- && document.annotations.length <= SKETCH_LIMITS.annotations
177
- && document.annotations.every(isSketchAnnotation)
222
+ || (isSketchAnnotationList(document.annotations)
178
223
  && new Set(document.annotations.map((annotation) => annotation.number)).size === document.annotations.length))
179
- && Number.isSafeInteger(document.imageWidth)
180
- && document.imageWidth > 0
181
- && document.imageWidth <= SKETCH_LIMITS.imageEdge
182
- && Number.isSafeInteger(document.imageHeight)
183
- && document.imageHeight > 0
184
- && document.imageHeight <= SKETCH_LIMITS.imageEdge
185
- && Number.isSafeInteger(document.originalByteSize)
186
- && document.originalByteSize > 0
187
- && document.originalByteSize <= SKETCH_LIMITS.imageBytes
188
- && Number.isSafeInteger(document.annotatedByteSize)
189
- && document.annotatedByteSize > 0
190
- && document.annotatedByteSize <= SKETCH_LIMITS.imageBytes
224
+ && safeIntegerInRange(document.imageWidth, 1, SKETCH_LIMITS.imageEdge)
225
+ && safeIntegerInRange(document.imageHeight, 1, SKETCH_LIMITS.imageEdge)
226
+ && safeIntegerInRange(document.originalByteSize, 1, SKETCH_LIMITS.imageBytes)
227
+ && safeIntegerInRange(document.annotatedByteSize, 1, SKETCH_LIMITS.imageBytes)
191
228
  && boundedString(document.filename, 256)
192
229
  && isBlob(document.originalImage, "image/png")
193
230
  && isBlob(document.annotatedImage, "image/png")
194
231
  && document.originalImage.size === document.originalByteSize
195
232
  && document.annotatedImage.size === document.annotatedByteSize;
196
233
  }
197
- export function isSketchHandoffRecord(value) {
198
- if (!value || typeof value !== "object" || Array.isArray(value))
234
+ export function isSketchHandoffRecord(
235
+ // oxlint-disable-next-line anti-slop/no-unknown-parameters
236
+ value) {
237
+ if (!isPlainObject(value))
199
238
  return false;
239
+ // SAFETY: the object check above makes reading optional candidate fields safe.
200
240
  const handoff = value;
201
241
  return Object.keys(handoff).every((key) => [
202
242
  "id",
@@ -213,14 +253,12 @@ export function isSketchHandoffRecord(value) {
213
253
  && boundedString(handoff.id, 256)
214
254
  && boundedString(handoff.projectId, 256)
215
255
  && boundedString(handoff.sketchId, 256)
216
- && Number.isSafeInteger(handoff.sketchRevision)
217
- && handoff.sketchRevision > 0
256
+ && safeIntegerInRange(handoff.sketchRevision, 1)
218
257
  && boundedString(handoff.localBatchId, 256)
219
- && (handoff.batchRevision === undefined
220
- || (Number.isSafeInteger(handoff.batchRevision) && handoff.batchRevision >= 0))
258
+ && (handoff.batchRevision === undefined || safeIntegerInRange(handoff.batchRevision, 0))
221
259
  && (handoff.transport === "local" || handoff.transport === "clipboard" || handoff.transport === "direct")
222
260
  && (handoff.agentRequestId === undefined || boundedString(handoff.agentRequestId, 256))
223
- && Number.isSafeInteger(handoff.timestamp)
261
+ && safeIntegerInRange(handoff.timestamp, Number.MIN_SAFE_INTEGER)
224
262
  && (handoff.state === "pending"
225
263
  || handoff.state === "dispatching"
226
264
  || handoff.state === "handing-off"
@@ -5,12 +5,25 @@ export declare class SketchStorageError extends Error {
5
5
  cause?: unknown;
6
6
  });
7
7
  }
8
+ export declare const SKETCH_STORAGE_FULL_MESSAGE = "Browser storage is full. Remove saved sketches you no longer need, then try again.";
8
9
  export interface SketchPersistenceSnapshot {
9
10
  readonly documents: SketchDocument[];
10
11
  readonly handoffs: SketchHandoffRecord[];
11
12
  }
13
+ /** One atomic set of puts and deletes against a project's sketch records. */
14
+ export interface SketchStorageChange {
15
+ readonly documents?: readonly SketchDocument[];
16
+ readonly handoffs?: readonly SketchHandoffRecord[];
17
+ readonly deleteDocumentIds?: readonly string[];
18
+ readonly deleteHandoffIds?: readonly string[];
19
+ }
20
+ /** Replaces the page origin's IndexedDB for sketches, for example with extension storage. */
21
+ export interface SketchStorage {
22
+ read(projectId: string): Promise<SketchPersistenceSnapshot>;
23
+ update(projectId: string, change: SketchStorageChange): Promise<void>;
24
+ }
25
+ export declare function configureSketchStorage(storage: SketchStorage | null): void;
12
26
  export declare function readSketchPersistence(projectId: string): Promise<SketchPersistenceSnapshot>;
13
- /** Writes a document and its initial/current handoff atomically. */
14
27
  export declare function writeSketchPersistence(projectId: string, document: SketchDocument, handoff: SketchHandoffRecord): Promise<void>;
15
28
  export declare function writeSketchHandoff(projectId: string, handoff: SketchHandoffRecord): Promise<void>;
16
29
  export declare function writeSketchHandoffs(projectId: string, handoffs: readonly SketchHandoffRecord[]): Promise<void>;
@@ -1,3 +1,4 @@
1
+ import { isDemoRuntime } from "../runtime/runtimeConfig.js";
1
2
  import { SKETCH_DATABASE_NAME, SKETCH_DATABASE_VERSION, SKETCH_DOCUMENTS_STORE, SKETCH_HANDOFFS_STORE, } from "./model.js";
2
3
  export class SketchStorageError extends Error {
3
4
  code = "sketch_storage_error";
@@ -6,8 +7,30 @@ export class SketchStorageError extends Error {
6
7
  this.name = "SketchStorageError";
7
8
  }
8
9
  }
10
+ export const SKETCH_STORAGE_FULL_MESSAGE = "Browser storage is full. Remove saved sketches you no longer need, then try again.";
11
+ // IndexedDB rejects with a QuotaExceededError; `chrome.storage` with a "quota exceeded" message.
12
+ function isQuotaError(error) {
13
+ if (error instanceof DOMException && error.name === "QuotaExceededError")
14
+ return true;
15
+ return error instanceof Error && /quota/i.test(error.message);
16
+ }
17
+ function storageError(message, error) {
18
+ return new SketchStorageError(isQuotaError(error) ? SKETCH_STORAGE_FULL_MESSAGE : message, { cause: error });
19
+ }
9
20
  const memoryProjects = new Map();
10
21
  let databasePromise = null;
22
+ let configuredStorage = null;
23
+ export function configureSketchStorage(storage) {
24
+ configuredStorage = storage;
25
+ }
26
+ async function updateConfigured(storage, projectId, change, message) {
27
+ try {
28
+ await storage.update(projectId, change);
29
+ }
30
+ catch (error) {
31
+ throw storageError(message, error);
32
+ }
33
+ }
11
34
  function memoryState(projectId) {
12
35
  let state = memoryProjects.get(projectId);
13
36
  if (!state) {
@@ -38,6 +61,10 @@ async function openDatabase() {
38
61
  const factory = indexedDbFactory();
39
62
  if (!factory)
40
63
  return null;
64
+ // Demo runtimes (the landing page) are session-only: sketches live in the
65
+ // in-memory fallback and never touch IndexedDB.
66
+ if (isDemoRuntime())
67
+ return null;
41
68
  if (!databasePromise) {
42
69
  databasePromise = new Promise((resolve, reject) => {
43
70
  let request;
@@ -69,12 +96,20 @@ async function openDatabase() {
69
96
  request.onblocked = () => reject(new Error("IndexedDB upgrade is blocked by another tab."));
70
97
  }).catch((error) => {
71
98
  databasePromise = null;
72
- throw new SketchStorageError("Sketch storage is unavailable in this browser.", { cause: error });
99
+ throw storageError("Sketch storage is unavailable in this browser.", error);
73
100
  });
74
101
  }
75
102
  return databasePromise;
76
103
  }
77
104
  export async function readSketchPersistence(projectId) {
105
+ if (configuredStorage) {
106
+ try {
107
+ return await configuredStorage.read(projectId);
108
+ }
109
+ catch (error) {
110
+ throw storageError("Sketch storage could not be read.", error);
111
+ }
112
+ }
78
113
  const database = await openDatabase();
79
114
  if (!database) {
80
115
  const state = memoryState(projectId);
@@ -86,17 +121,21 @@ export async function readSketchPersistence(projectId) {
86
121
  try {
87
122
  const transaction = database.transaction([SKETCH_DOCUMENTS_STORE, SKETCH_HANDOFFS_STORE], "readonly");
88
123
  const done = transactionDone(transaction);
124
+ // Records come back as stored; the store drops anything that fails validation during hydration.
89
125
  const documentsPromise = requestResult(transaction.objectStore(SKETCH_DOCUMENTS_STORE).index("projectId").getAll(projectId));
90
126
  const handoffsPromise = requestResult(transaction.objectStore(SKETCH_HANDOFFS_STORE).index("projectId").getAll(projectId));
91
127
  const [documents, handoffs] = await Promise.all([documentsPromise, handoffsPromise, done]);
92
128
  return { documents, handoffs };
93
129
  }
94
130
  catch (error) {
95
- throw new SketchStorageError("Sketch storage could not be read.", { cause: error });
131
+ throw storageError("Sketch storage could not be read.", error);
96
132
  }
97
133
  }
98
- /** Writes a document and its initial/current handoff atomically. */
99
134
  export async function writeSketchPersistence(projectId, document, handoff) {
135
+ if (configuredStorage) {
136
+ const change = { documents: [document], handoffs: [handoff] };
137
+ return updateConfigured(configuredStorage, projectId, change, "Sketch could not be saved to browser storage.");
138
+ }
100
139
  const database = await openDatabase();
101
140
  if (!database) {
102
141
  const state = memoryState(projectId);
@@ -111,10 +150,13 @@ export async function writeSketchPersistence(projectId, document, handoff) {
111
150
  await transactionDone(transaction);
112
151
  }
113
152
  catch (error) {
114
- throw new SketchStorageError("Sketch could not be saved to browser storage.", { cause: error });
153
+ throw storageError("Sketch could not be saved to browser storage.", error);
115
154
  }
116
155
  }
117
156
  export async function writeSketchHandoff(projectId, handoff) {
157
+ if (configuredStorage) {
158
+ return updateConfigured(configuredStorage, projectId, { handoffs: [handoff] }, "Sketch handoff state could not be saved.");
159
+ }
118
160
  const database = await openDatabase();
119
161
  if (!database) {
120
162
  memoryState(projectId).handoffs.set(handoff.id, handoff);
@@ -126,12 +168,15 @@ export async function writeSketchHandoff(projectId, handoff) {
126
168
  await transactionDone(transaction);
127
169
  }
128
170
  catch (error) {
129
- throw new SketchStorageError("Sketch handoff state could not be saved.", { cause: error });
171
+ throw storageError("Sketch handoff state could not be saved.", error);
130
172
  }
131
173
  }
132
174
  export async function writeSketchHandoffs(projectId, handoffs) {
133
175
  if (handoffs.length === 0)
134
176
  return;
177
+ if (configuredStorage) {
178
+ return updateConfigured(configuredStorage, projectId, { handoffs }, "Sketch handoff state could not be saved.");
179
+ }
135
180
  const database = await openDatabase();
136
181
  if (!database) {
137
182
  const state = memoryState(projectId);
@@ -145,7 +190,7 @@ export async function writeSketchHandoffs(projectId, handoffs) {
145
190
  await transactionDone(transaction);
146
191
  }
147
192
  catch (error) {
148
- throw new SketchStorageError("Sketch handoff state could not be saved.", { cause: error });
193
+ throw storageError("Sketch handoff state could not be saved.", error);
149
194
  }
150
195
  }
151
196
  export async function deleteSketchPersistence(projectId, sketchId) {
@@ -153,6 +198,10 @@ export async function deleteSketchPersistence(projectId, sketchId) {
153
198
  const handoffIds = existing.handoffs
154
199
  .filter((handoff) => handoff.sketchId === sketchId)
155
200
  .map((handoff) => handoff.id);
201
+ if (configuredStorage) {
202
+ const change = { deleteDocumentIds: [sketchId], deleteHandoffIds: handoffIds };
203
+ return updateConfigured(configuredStorage, projectId, change, "Sketch could not be removed from browser storage.");
204
+ }
156
205
  const database = await openDatabase();
157
206
  if (!database) {
158
207
  const state = memoryState(projectId);
@@ -168,11 +217,18 @@ export async function deleteSketchPersistence(projectId, sketchId) {
168
217
  await transactionDone(transaction);
169
218
  }
170
219
  catch (error) {
171
- throw new SketchStorageError("Sketch could not be removed from browser storage.", { cause: error });
220
+ throw storageError("Sketch could not be removed from browser storage.", error);
172
221
  }
173
222
  }
174
223
  export async function clearSketchPersistence(projectId) {
175
224
  const existing = await readSketchPersistence(projectId);
225
+ if (configuredStorage) {
226
+ const change = {
227
+ deleteDocumentIds: existing.documents.map((document) => document.id),
228
+ deleteHandoffIds: existing.handoffs.map((handoff) => handoff.id),
229
+ };
230
+ return updateConfigured(configuredStorage, projectId, change, "Sketch storage could not be cleared.");
231
+ }
176
232
  const database = await openDatabase();
177
233
  if (!database) {
178
234
  const state = memoryState(projectId);
@@ -189,7 +245,7 @@ export async function clearSketchPersistence(projectId) {
189
245
  await transactionDone(transaction);
190
246
  }
191
247
  catch (error) {
192
- throw new SketchStorageError("Sketch storage could not be cleared.", { cause: error });
248
+ throw storageError("Sketch storage could not be cleared.", error);
193
249
  }
194
250
  }
195
251
  export async function closeSketchDatabase() {
@@ -10,12 +10,13 @@ export declare function drawSketchStroke(ctx: CanvasRenderingContext2D, stroke:
10
10
  export declare function drawSketchStrokes(ctx: CanvasRenderingContext2D, strokes: readonly SketchStroke[], scaleX?: number, scaleY?: number): void;
11
11
  export declare function drawSketchAnnotation(ctx: CanvasRenderingContext2D, annotation: Pick<SketchAnnotation, "number" | "point">, scaleX?: number, scaleY?: number): void;
12
12
  export declare function drawSketchAnnotations(ctx: CanvasRenderingContext2D, annotations: readonly SketchAnnotation[], scaleX?: number, scaleY?: number): void;
13
- export declare function renderAnnotatedPng(originalImage: Blob, imageWidth: number, imageHeight: number, strokes: readonly SketchStroke[], annotations?: readonly SketchAnnotation[], description?: string): Promise<{
13
+ export declare function renderAnnotatedPng(originalImage: Blob, imageWidth: number, imageHeight: number, strokes: readonly SketchStroke[], annotations?: readonly SketchAnnotation[], description?: string, heading?: string): Promise<{
14
14
  readonly blob: Blob;
15
15
  readonly width: number;
16
16
  readonly height: number;
17
17
  }>;
18
18
  export declare function blobToBase64(blob: Blob): Promise<string>;
19
- export declare function copyImageToClipboard(blob: Blob): Promise<void>;
19
+ /** The promise form lets callers start the write inside the user gesture (required by Safari). */
20
+ export declare function copyImageToClipboard(blob: Blob | Promise<Blob>): Promise<void>;
20
21
  export declare function copyImageAndTextToClipboard(blob: Blob, text: string): Promise<void>;
21
22
  export declare function downloadImage(blob: Blob, filename: string): void;