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,43 +1,36 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
- import { useEffect, useMemo, useState } from "react";
3
- import { IconLayoutSidebarRight } from "@tabler/icons-react";
4
- import { useInspectorOpen, toggleInspector, setInspectorOpen } from "./openStore.js";
2
+ import { InspectorPanel } from "./InspectorPanel.js";
3
+ import { InspectorSelection } from "./InspectorSelection.js";
4
+ import { describeElement } from "./elementName.js";
5
+ import { InspectorEditors } from "./InspectorEditors.js";
6
+ import { useEffect, useMemo, useState, useSyncExternalStore } from "react";
7
+ import { useInspectorOpen, setInspectorOpen } from "./openStore.js";
5
8
  import { useSelectedElement, useSelectedElements, setSelectedElement, removeSelectedElement, } from "../selection/selectionStore.js";
6
9
  import { findTokenRow } from "../styleEditors/rowLookup.js";
7
10
  import { useBrowserCssInspection } from "../inspection/useBrowserCssInspection.js";
8
11
  import { resolveSelectionFromElement } from "../selection/resolveSelection.js";
9
12
  import { AgentStatusButton } from "./AgentStatusButton.js";
10
- import { SpacingBox } from "../styleEditors/SpacingBox.js";
11
- import { Typography } from "../styleEditors/Typography.js";
12
13
  import { isTextRelevant } from "../styleEditors/textRelevance.js";
13
- import { BackgroundEditor } from "../styleEditors/BackgroundEditor.js";
14
- import { ColorPicker } from "../styleEditors/ColorPicker.js";
15
- import { BorderEditor } from "../styleEditors/BorderEditor.js";
16
- import { AppearanceSection } from "../styleEditors/AppearanceSection.js";
17
- import { BoxShadowEditor } from "../styleEditors/BoxShadowEditor.js";
18
- import { LayoutSection } from "../styleEditors/LayoutSection.js";
19
14
  import { ChangesLog } from "./ChangesLog.js";
20
- import { discardChangesForInstanceOverride, undo, redo } from "../changes/changesLog.js";
15
+ import { discardChangesForInstanceOverride, undo, redo } from "../drafts/store.js";
21
16
  import { countSourceSiteMatches, getEditScope, relinkElement, sourceSiteSelector, unlinkElement } from "../selection/editScope.js";
22
17
  import { canEditStyles } from "../tokens/editActions.js";
23
- import { Button } from "../ui/Button.js";
24
18
  import { CopyPromptButton } from "./CopyPromptButton.js";
25
19
  import { PeekOriginalButton } from "./PeekOriginalButton.js";
20
+ import { NudgeLogoIcon } from "./NudgeLogoIcon.js";
26
21
  import { StatusCallout } from "../ui/StatusCallout.js";
27
- import { IconButton } from "../ui/IconButton.js";
28
22
  import { UI_STYLES } from "../ui/styles.js";
29
23
  import { getActiveStyleState, setActiveStyleState } from "./styleState.js";
24
+ import { useInteractionStatePreview } from "./interactionStatePreview.js";
30
25
  import { getInspectorToggleShortcutLabel, isEditableEvent } from "./shortcuts.js";
31
- import { formatInspectorLabel } from "../ui/labels.js";
32
- import { FieldRow } from "../ui/FieldRow.js";
33
- import { Select } from "../ui/Select.js";
34
26
  import { clearSelectedFrameChanges } from "../canvas/sessionStore.js";
35
27
  import { useFocusedCardId, useSelectedCardId, } from "../canvas/canvasStore.js";
36
28
  import { getActiveCanvasFrame } from "../canvas/activeCanvasDocument.js";
29
+ import { canvasFrameHost } from "../canvas/canvasFrame.js";
30
+ import { getFrameRegistryVersion, subscribeFrameRegistry } from "../canvas/projection.js";
37
31
  import { getElementWindow } from "../runtime/domRealm.js";
38
32
  import { deleteElement, nudgeElement } from "../overlay/structuralGestures.js";
39
- import { AtRuleContextProvider } from "../ui/AtRuleContext.js";
40
- import { ComponentPropsSection } from "../componentSemantics/ComponentPropsSection.js";
33
+ import { ComponentPropsSection, useComponentProps } from "../componentSemantics/ComponentPropsSection.js";
41
34
  import { cancelInlineTextEdit, isInlineTextEditingActive, useInlineTextDiagnostic, } from "../inline-text/inlineTextEditor.js";
42
35
  import { getInlineTextFeedback } from "../inline-text/inlineTextFeedback.js";
43
36
  import { useNudgeUiRuntimeConfig } from "../runtime/useRuntimeConfig.js";
@@ -45,10 +38,10 @@ import { EmptyState } from "./EmptyState.js";
45
38
  import { createStyleSelection } from "../selection/styleSelection.js";
46
39
  import { intersectTokenEntries } from "../inspection/selectionProperty.js";
47
40
  import { isNudgeUiDev } from "../runtime/devFlag.js";
48
- import { isDemoRuntime } from "../runtime/runtimeConfig.js";
41
+ import { isDemoRuntime, isNudgeUiFeatureEnabled } from "../runtime/runtimeConfig.js";
49
42
  import { SketchWorkspace } from "../sketch/SketchWorkspace.js";
50
43
  import { useSketchInteractionActive } from "../sketch/interaction.js";
51
- import { Tooltip } from "../ui/Tooltip.js";
44
+ import { InspectorStyle } from "../ui/InspectorStyle.js";
52
45
  function findFirstTokenRow(rows, properties) {
53
46
  for (const property of properties) {
54
47
  const row = findTokenRow(rows, property);
@@ -62,7 +55,6 @@ function findFirstTokenRow(rows, properties) {
62
55
  }
63
56
  return null;
64
57
  }
65
- export { toggleInspector, setInspectorOpen };
66
58
  function nodeMatchesSelector(node, selector) {
67
59
  if (!selector || node.nodeType !== node.ELEMENT_NODE)
68
60
  return false;
@@ -88,32 +80,34 @@ function scopeMutationAffectsSelection(records, selected) {
88
80
  export function InspectorShell() {
89
81
  const isOpen = useInspectorOpen();
90
82
  const runtimeConfig = useNudgeUiRuntimeConfig();
91
- const sketchEnabled = isNudgeUiDev() && !isDemoRuntime();
83
+ const sketchEnabled = isNudgeUiDev()
84
+ && !runtimeConfig.inspectionUnavailableReason
85
+ && (!isDemoRuntime() || isNudgeUiFeatureEnabled(runtimeConfig.features, "sketch"));
92
86
  const sketchActive = useSketchInteractionActive();
93
87
  const selectedCardId = useSelectedCardId();
94
88
  const focusedCardId = useFocusedCardId();
95
- const sketchHost = selectedCardId || focusedCardId ? getActiveCanvasFrame() : null;
89
+ useSyncExternalStore(subscribeFrameRegistry, getFrameRegistryVersion);
90
+ const sketchHost = selectedCardId || focusedCardId ? canvasFrameHost(getActiveCanvasFrame()) : null;
96
91
  const selected = useSelectedElement();
97
92
  const selectedElements = useSelectedElements();
93
+ const componentProps = useComponentProps(selected);
98
94
  const inlineTextFeedback = getInlineTextFeedback(useInlineTextDiagnostic());
99
95
  const [settingsOpen, setSettingsOpen] = useState(false);
100
96
  const [settingsSection, setSettingsSection] = useState("instructions");
101
97
  const [scopeRevision, refreshScope] = useState(0);
102
98
  const [styleState, setStyleState] = useState(getActiveStyleState());
99
+ useInteractionStatePreview(selectedElements.length === 1 ? selectedElements[0].domElement : null, styleState);
103
100
  const cssInspection = useBrowserCssInspection(selectedElements, styleState);
104
101
  const isMultiSelection = selectedElements.length > 1;
105
102
  useEffect(() => {
106
- // A new selection should never inherit an incidental state from the
107
- // previous element. Base is the inspector's deliberate default.
103
+ // A new selection must not inherit an incidental state from the previous element; base is the deliberate default.
108
104
  setActiveStyleState("base");
109
105
  setStyleState("base");
110
106
  }, [selected?.domElement, isMultiSelection]);
111
107
  useEffect(() => {
112
108
  if (!selected)
113
109
  return;
114
- // The selected element can live inside a card iframe (canvas mode); observe
115
- // its own ownerDocument rather than the parent app's document, otherwise
116
- // removal inside the iframe would never be noticed.
110
+ // In canvas mode the element can live in a card iframe, so observe its ownerDocument, not the parent app's.
117
111
  const observers = [];
118
112
  const roots = new Map();
119
113
  for (const target of selectedElements) {
@@ -144,7 +138,7 @@ export function InspectorShell() {
144
138
  return () => observers.forEach((observer) => observer.disconnect());
145
139
  }, [selectedElements, scopeRevision]);
146
140
  useEffect(() => {
147
- if (sketchActive)
141
+ if (sketchActive || runtimeConfig.inspectionUnavailableReason)
148
142
  return;
149
143
  function onKeydown(event) {
150
144
  if (isInlineTextEditingActive())
@@ -177,8 +171,7 @@ export function InspectorShell() {
177
171
  setSelectedElement(null);
178
172
  return;
179
173
  }
180
- // macOS labels the physical Backspace key as Delete, while browsers
181
- // report it as "Backspace". Support both without stealing text edits.
174
+ // macOS labels the physical Backspace key as Delete; browsers report "Backspace". Support both.
182
175
  if (event.key === "Delete" || event.key === "Backspace") {
183
176
  event.preventDefault();
184
177
  if (!isMultiSelection && deleteElement(selected))
@@ -197,7 +190,7 @@ export function InspectorShell() {
197
190
  }
198
191
  window.addEventListener("keydown", onKeydown);
199
192
  return () => window.removeEventListener("keydown", onKeydown);
200
- }, [isMultiSelection, selected, sketchActive]);
193
+ }, [isMultiSelection, selected, sketchActive, runtimeConfig.inspectionUnavailableReason]);
201
194
  const inspectionSnapshot = cssInspection.element;
202
195
  const styleSelection = useMemo(() => createStyleSelection(selectedElements, cssInspection.elements, selected), [cssInspection.elements, selected, selectedElements]);
203
196
  const selectionEditable = useMemo(() => styleSelection ? canEditStyles(styleSelection.target) : false, [scopeRevision, styleSelection]);
@@ -205,7 +198,6 @@ export function InspectorShell() {
205
198
  const tokenRows = useMemo(() => styleSelection ? [...styleSelection.primaryRows] : [], [styleSelection]);
206
199
  const availableInteractionStates = inspectionSnapshot?.availableStates ?? [];
207
200
  const showText = selectedElements.length > 0 && selectedElements.every((element, index) => isTextRelevant(element.domElement, cssInspection.elements[index]?.properties ?? []));
208
- const showInteractionState = !isMultiSelection && availableInteractionStates.length > 2;
209
201
  const paintedBackgroundRow = findFirstTokenRow(tokenRows, ["background-color", "background"]);
210
202
  const backgroundTokenRow = useMemo(() => {
211
203
  if (!selected)
@@ -220,8 +212,6 @@ export function InspectorShell() {
220
212
  const sourceSiteMatchCount = selected && editScope === "source-site"
221
213
  ? countSourceSiteMatches(selected.domElement, scopeRevision)
222
214
  : 0;
223
- const hasEditScopeCallout = !isMultiSelection
224
- && (editScope === "rendered-instance" || sourceSiteMatchCount > 1);
225
215
  function refreshScopeState() {
226
216
  refreshScope((revision) => revision + 1);
227
217
  }
@@ -230,27 +220,23 @@ export function InspectorShell() {
230
220
  setSettingsOpen(true);
231
221
  }
232
222
  function clearInspectorSession() {
233
- clearSelectedFrameChanges();
223
+ // Sketch persistence failures are reported by the sketch store in the panel.
224
+ void clearSelectedFrameChanges().catch(() => undefined);
234
225
  }
235
- return (_jsxs(_Fragment, { children: [_jsx("style", { "data-test": "inspector-styles", children: UI_STYLES }), _jsxs("div", { className: "panel", "data-open": isOpen ? "true" : "false", children: [_jsxs("div", { className: "panel__tabs", "aria-label": "Inspector controls", children: [_jsxs("div", { className: "panel__header-row", "data-test": "inspect-tab", children: [_jsx(Tooltip, { content: "Hide inspector", shortcut: getInspectorToggleShortcutLabel(), stableTrigger: true, children: _jsx(IconButton, { variant: "quiet", label: "Collapse inspector", "data-test": "collapse-inspector", disabled: sketchActive, style: { marginLeft: "calc(var(--space-8) * -1)" }, onClick: () => {
236
- cancelInlineTextEdit();
237
- setInspectorOpen(false);
238
- }, children: _jsx(IconLayoutSidebarRight, { size: "var(--icon-size-small)", stroke: 1.8, "aria-hidden": "true" }) }) }), _jsxs("div", { className: "panel__header-actions", children: [_jsx(PeekOriginalButton, {}), _jsx(AgentStatusButton, { onOpenSettings: openSettings })] })] }), _jsx("div", { className: "panel__copy-row", children: _jsx(CopyPromptButton, { settingsOpen: settingsOpen, settingsSection: settingsSection, onOpenSettings: openSettings, onSettingsOpenChange: setSettingsOpen }) })] }), _jsxs("div", { className: "panel__body", children: [inlineTextFeedback ? (_jsx(StatusCallout, { tone: "danger", className: "inline-text-diagnostic", "data-test": "inline-text-diagnostic", role: "status", "aria-live": "polite", "aria-atomic": "true", children: _jsx("span", { children: inlineTextFeedback.message }) })) : null, selected ? (_jsxs(_Fragment, { children: [isMultiSelection || showInteractionState || hasEditScopeCallout ? (_jsxs("div", { className: `selection${hasEditScopeCallout ? "" : " selection--without-scope-callout"}`, "data-test": "selection", "data-selected-cid": selected.cid, "data-selected-src": selected.src, "data-selected-count": selectedElements.length, children: [isMultiSelection ? (_jsx("div", { className: "selection__summary", "data-test": "multi-selection-summary", children: _jsxs("span", { className: "selection__count", children: [selectedElements.length, " elements selected"] }) })) : null, hasEditScopeCallout ? (_jsx(StatusCallout, { tone: editScope === "rendered-instance" ? "neutral" : "accent", "data-test": "edit-scope", "data-lost": "false", children: editScope === "rendered-instance" ? (_jsxs("div", { className: "scope__unlinked", children: [_jsx("span", { children: "Element unlinked" }), _jsx(Button, { size: "compact", className: "scope__action", "data-test": "relink-element", onClick: () => {
239
- const overrideId = relinkElement(selected.domElement);
240
- if (overrideId)
241
- discardChangesForInstanceOverride(overrideId);
242
- refreshScopeState();
243
- }, children: "Relink" })] })) : (_jsxs("div", { className: "scope__linked", children: [_jsxs("span", { children: ["Affects ", sourceSiteMatchCount, " elements."] }), _jsx(Button, { size: "compact", variant: "quiet", "data-test": "unlink-element", onClick: () => {
244
- unlinkElement(selected.domElement);
245
- refreshScopeState();
246
- }, children: "Unlink" })] })) })) : null, showInteractionState ? (_jsx(FieldRow, { label: "State", className: "style-state", "data-test": "style-state", children: _jsx(Select, { value: styleState, "data-test": "style-state-select", "aria-label": "Style State", options: availableInteractionStates.map((state) => ({
247
- value: state,
248
- label: formatInspectorLabel(state),
249
- })), onValueChange: (state) => {
250
- const nextState = availableInteractionStates.find((candidate) => candidate === state);
251
- if (!nextState)
252
- return;
253
- setActiveStyleState(nextState);
254
- setStyleState(nextState);
255
- } }) })) : null] })) : null, !isMultiSelection ? _jsx(ComponentPropsSection, { selected: selected }) : null, selectionEditable ? (_jsx(AtRuleContextProvider, { rows: tokenRows, children: _jsxs("div", { className: "style-editors", "data-test": "style-editors", children: [_jsx(LayoutSection, { element: selected, selection: styleSelection, entries: tokenEntries, tokenRows: tokenRows }, `layout-${styleState}`), _jsx(SpacingBox, { element: selected, selection: styleSelection, entries: tokenEntries, tokenRows: tokenRows }, `spacing-${styleState}`), _jsx(AppearanceSection, { element: selected, selection: styleSelection, entries: tokenEntries, tokenRows: tokenRows }, `appearance-${styleState}`), showText ? _jsxs(_Fragment, { children: [_jsx(Typography, { element: selected, selection: styleSelection, entries: tokenEntries, tokenRows: tokenRows }, `type-${styleState}`), _jsx(ColorPicker, { element: selected, selection: styleSelection, property: "color", entries: tokenEntries, tokenRow: findTokenRow(tokenRows, "color") }, `color-${styleState}`)] }) : null, _jsx(BackgroundEditor, { element: selected, selection: styleSelection, entries: tokenEntries, tokenRow: backgroundTokenRow }, `background-${styleState}`), _jsx(BorderEditor, { element: selected, selection: styleSelection, entries: tokenEntries, tokenRows: tokenRows }, `border-${styleState}`), _jsx(BoxShadowEditor, { element: selected, selection: styleSelection, entries: tokenEntries, tokenRows: tokenRows }, `box-shadow-${styleState}`)] }) })) : (_jsx(StatusCallout, { tone: "neutral", "data-test": "multi-selection-uneditable", children: "These repeated items are indistinguishable, so Nudge UI cannot safely target only part of the group. Select every repeated item to edit them together." }))] })) : (_jsx(EmptyState, {})), _jsx(ChangesLog, { onClearSession: clearInspectorSession })] })] }), sketchEnabled ? (_jsx(SketchWorkspace, { hostElement: sketchHost, projectId: runtimeConfig.projectId })) : null, !isOpen ? (_jsx("div", { className: "panel__restore", children: _jsx(Tooltip, { children: _jsx(IconButton, { variant: "quiet", label: "Show inspector", className: "panel__restore-button", "data-test": "show-inspector", onClick: () => setInspectorOpen(true), children: _jsx(IconLayoutSidebarRight, { size: "var(--icon-size-small)", stroke: "var(--icon-stroke-width)", "aria-hidden": "true" }) }) }) })) : null] }));
226
+ return (_jsxs(_Fragment, { children: [_jsx(InspectorStyle, { testId: "inspector-styles", css: UI_STYLES }), _jsxs(InspectorPanel, { isOpen: isOpen, collapseDisabled: sketchActive, toggleShortcut: getInspectorToggleShortcutLabel(), onOpenChange: (open) => {
227
+ if (!open)
228
+ cancelInlineTextEdit();
229
+ setInspectorOpen(open);
230
+ }, headerActions: _jsxs(_Fragment, { children: [_jsx(PeekOriginalButton, {}), _jsx(AgentStatusButton, { onOpenSettings: openSettings })] }), prompt: _jsx(CopyPromptButton, { settingsOpen: settingsOpen, settingsSection: settingsSection, onOpenSettings: openSettings, onSettingsOpenChange: setSettingsOpen, onClearChanges: clearInspectorSession }), children: [inlineTextFeedback ? (_jsx(StatusCallout, { tone: "danger", className: "inline-text-diagnostic", "data-test": "inline-text-diagnostic", role: "status", "aria-live": "polite", "aria-atomic": "true", children: _jsx("span", { children: inlineTextFeedback.message }) })) : null, runtimeConfig.inspectionUnavailableReason ? (_jsxs(StatusCallout, { tone: "danger", "data-test": "page-inspection-error", role: "status", children: ["Can\u2019t load Nudge on this page due to ", runtimeConfig.inspectionUnavailableReason, "."] })) : selected ? (_jsxs(_Fragment, { children: [_jsx(InspectorSelection, { identity: selected, count: selectedElements.length, isComponent: !isMultiSelection && componentProps !== null, name: isMultiSelection ? { title: `${selectedElements.length} elements` } : componentProps ? { title: componentProps.target.meta.componentName } : describeElement(selected.domElement), editScope: editScope, sourceSiteMatchCount: sourceSiteMatchCount, styleState: styleState, availableInteractionStates: availableInteractionStates, onStyleStateChange: (state) => {
231
+ setActiveStyleState(state);
232
+ setStyleState(state);
233
+ }, onRelink: () => {
234
+ const overrideId = relinkElement(selected.domElement);
235
+ if (overrideId)
236
+ discardChangesForInstanceOverride(overrideId);
237
+ refreshScopeState();
238
+ }, onUnlink: () => {
239
+ unlinkElement(selected.domElement);
240
+ refreshScopeState();
241
+ }, children: !isMultiSelection ? _jsx(ComponentPropsSection, { selected: selected }) : null }), selectionEditable ? (_jsx(InspectorEditors, { selected: selected, styleSelection: styleSelection, tokenEntries: tokenEntries, tokenRows: tokenRows, styleState: styleState, showText: showText, backgroundTokenRow: backgroundTokenRow })) : (_jsx(StatusCallout, { tone: "neutral", "data-test": "multi-selection-uneditable", children: "These repeated items are indistinguishable, so Nudge UI cannot safely target only part of the group. Select every repeated item to edit them together." }))] })) : (_jsx(EmptyState, {})), _jsx(ChangesLog, { onClearSession: clearInspectorSession })] }), sketchEnabled ? (_jsx(SketchWorkspace, { hostElement: sketchHost, projectId: runtimeConfig.projectId })) : null] }));
256
242
  }
@@ -0,0 +1,5 @@
1
+ import type { ReactElement } from "react";
2
+ /** Same artwork as the extension and landing favicons. */
3
+ export declare function NudgeLogoIcon({ size }: {
4
+ size?: string;
5
+ }): ReactElement;
@@ -0,0 +1,5 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /** Same artwork as the extension and landing favicons. */
3
+ export function NudgeLogoIcon({ size = "var(--icon-size-small)" }) {
4
+ return (_jsxs("svg", { viewBox: "5 4 35 35", width: size, height: size, fill: "currentColor", "aria-hidden": "true", children: [_jsx("path", { d: "M14.7742 6C27.6015 6 38 16.569 38 29.6066V38H30.7742V29.6066C30.7742 20.6251 23.6107 13.3443 14.7742 13.3443H13.2258V38H6V6H14.7742Z" }), _jsx("path", { d: "M39 15.6629C37 11.5 33 7 28.4919 5H39V15.6629Z" })] }));
5
+ }
@@ -1,7 +1,2 @@
1
1
  import { type ReactElement } from "react";
2
- /**
3
- * Press-and-hold button that previews the page without inspector changes
4
- * (NUD-30). Releasing restores the edited preview; canonical intent is never
5
- * cleared, so nothing is lost while held.
6
- */
7
2
  export declare function PeekOriginalButton(): ReactElement;
@@ -3,19 +3,14 @@ import { useEffect, useSyncExternalStore } from "react";
3
3
  import { IconButton } from "../ui/IconButton.js";
4
4
  import { Tooltip } from "../ui/Tooltip.js";
5
5
  import { PeekOriginalIcon } from "./PeekOriginalIcon.js";
6
- import { draftChangeStore } from "../changes/draftChanges.js";
6
+ import { getActiveDraftChanges, subscribeActiveDraftChanges } from "../drafts/store.js";
7
7
  import { setOriginalPreviewActive, useOriginalPreviewActive, } from "./originalPreview.js";
8
8
  function useDraftChangeCount() {
9
- return useSyncExternalStore(draftChangeStore.subscribe, () => {
10
- const snapshot = draftChangeStore.getSnapshot();
9
+ return useSyncExternalStore(subscribeActiveDraftChanges, () => {
10
+ const snapshot = getActiveDraftChanges();
11
11
  return snapshot.changes.length + snapshot.structuralChanges.length;
12
12
  }, () => 0);
13
13
  }
14
- /**
15
- * Press-and-hold button that previews the page without inspector changes
16
- * (NUD-30). Releasing restores the edited preview; canonical intent is never
17
- * cleared, so nothing is lost while held.
18
- */
19
14
  export function PeekOriginalButton() {
20
15
  const active = useOriginalPreviewActive();
21
16
  const changeCount = useDraftChangeCount();
@@ -1,7 +1,2 @@
1
1
  import type { ReactElement } from "react";
2
- /**
3
- * Before/after comparison glyph for the hold-to-view-original button.
4
- * Custom artwork rendered with the shared inspector icon tokens so it
5
- * matches the neighboring header icons.
6
- */
7
2
  export declare function PeekOriginalIcon(): ReactElement;
@@ -1,9 +1,4 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- /**
3
- * Before/after comparison glyph for the hold-to-view-original button.
4
- * Custom artwork rendered with the shared inspector icon tokens so it
5
- * matches the neighboring header icons.
6
- */
7
2
  export function PeekOriginalIcon() {
8
3
  return (_jsxs("svg", { viewBox: "0 0 24 24", width: "var(--icon-size-small)", height: "var(--icon-size-small)", "aria-hidden": "true", children: [_jsx("path", { d: "M8.66667 5L6 5C4.34315 5 3 6.34315 3 8L3 16C3 17.6569 4.34315 19 6 19L12 19", fill: "none", stroke: "currentColor", strokeLinecap: "round", strokeWidth: "var(--icon-stroke-width)" }), _jsx("path", { d: "M13 5L18 5C19.6569 5 21 6.34315 21 8L21 16C21 17.6569 19.6569 19 18 19L16.3333 19", fill: "none", stroke: "currentColor", strokeLinecap: "round", strokeWidth: "var(--icon-stroke-width)" }), _jsx("line", { x1: "13.7721", y1: "22.2984", x2: "8.29835", y2: "2.22788", fill: "none", stroke: "currentColor", strokeLinecap: "round", strokeWidth: "var(--icon-stroke-width)" })] }));
9
4
  }
@@ -0,0 +1,21 @@
1
+ import { type ReactElement, type ReactNode } from "react";
2
+ import { type ButtonProps } from "../ui/Button.js";
3
+ export interface PromptActionButtonProps extends ButtonProps {
4
+ readonly copied?: boolean;
5
+ readonly agentState?: string;
6
+ readonly busy?: boolean;
7
+ readonly icon?: ReactNode;
8
+ readonly label?: ReactNode;
9
+ readonly badgeCount?: number;
10
+ readonly hasMenu?: boolean;
11
+ }
12
+ /** Presents a prompt action without owning clipboard or agent connections. */
13
+ export declare const PromptActionButton: import("react").ForwardRefExoticComponent<PromptActionButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
14
+ export interface PromptActionRowProps {
15
+ readonly children: ReactNode;
16
+ /** Clears the pending changes; the clear changes action stays beside the prompt action and disables without changes. */
17
+ readonly onClear?: () => void;
18
+ readonly hasChanges?: boolean;
19
+ }
20
+ /** A prompt action with a matching clear changes action beside it, disabled until there are changes. */
21
+ export declare function PromptActionRow({ children, onClear, hasChanges }: PromptActionRowProps): ReactElement;
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { forwardRef } from "react";
3
+ import { IconChevronDown, IconCopy, IconRestore } from "@tabler/icons-react";
4
+ import { Button } from "../ui/Button.js";
5
+ import { IconButton } from "../ui/IconButton.js";
6
+ import { Tooltip } from "../ui/Tooltip.js";
7
+ /** Presents a prompt action without owning clipboard or agent connections. */
8
+ export const PromptActionButton = forwardRef(function PromptActionButton({ copied = false, agentState = "disconnected", busy = false, icon = _jsx(IconCopy, { size: "var(--icon-size-small)", stroke: "var(--icon-stroke-width)", "aria-hidden": "true" }), label = "Copy prompt", badgeCount = 0, hasMenu = false, ...props }, ref) {
9
+ return _jsxs(Button, { ref: ref, variant: "primary", className: "copy-prompt__main", "data-test": "copy-prompt", type: "button", "data-copied": copied ? "true" : "false", "data-agent-state": agentState, "aria-busy": busy ? "true" : undefined, ...props, children: [icon, label, badgeCount > 0 ? _jsx("span", { className: "copy-prompt__change-count", "data-test": "copy-prompt-change-count", children: badgeCount }) : null, hasMenu ? _jsx(IconChevronDown, { size: "var(--icon-size-small)", stroke: "var(--icon-stroke-width)", "aria-hidden": "true" }) : null] });
10
+ });
11
+ /** A prompt action with a matching clear changes action beside it, disabled until there are changes. */
12
+ export function PromptActionRow({ children, onClear, hasChanges = false }) {
13
+ return (_jsxs("div", { className: "copy-prompt__row", children: [children, onClear ? (_jsx(Tooltip, { children: _jsx(IconButton, { className: "copy-prompt__clear-changes", variant: "secondary", label: "Clear changes", "data-test": "copy-prompt-clear", disabled: !hasChanges, onClick: onClear, children: _jsx(IconRestore, { size: "var(--icon-size-small)", "aria-hidden": "true" }) }) })) : null] }));
14
+ }
@@ -0,0 +1,5 @@
1
+ export interface ElementName {
2
+ readonly title: string;
3
+ }
4
+ /** The title is derived from the tag, with an accessible name when the author gave one. */
5
+ export declare function describeElement(element: HTMLElement): ElementName;
@@ -0,0 +1,29 @@
1
+ const TAG_LABELS = new Map([
2
+ ["a", "Link"],
3
+ ["article", "Article"],
4
+ ["aside", "Aside"],
5
+ ["button", "Button"],
6
+ ["footer", "Footer"],
7
+ ["form", "Form"],
8
+ ["header", "Header"],
9
+ ["img", "Image"],
10
+ ["input", "Input"],
11
+ ["label", "Label"],
12
+ ["li", "List item"],
13
+ ["main", "Main"],
14
+ ["nav", "Navigation"],
15
+ ["ol", "List"],
16
+ ["p", "Paragraph"],
17
+ ["section", "Section"],
18
+ ["select", "Select"],
19
+ ["svg", "Icon"],
20
+ ["textarea", "Text area"],
21
+ ["ul", "List"],
22
+ ]);
23
+ /** The title is derived from the tag, with an accessible name when the author gave one. */
24
+ export function describeElement(element) {
25
+ const tag = element.localName.toLowerCase();
26
+ const base = /^h[1-6]$/.test(tag) ? `Heading ${tag.slice(1)}` : TAG_LABELS.get(tag) ?? (tag.charAt(0).toUpperCase() + tag.slice(1));
27
+ const accessible = element.getAttribute("aria-label")?.trim();
28
+ return { title: accessible ? `${base} · ${accessible}` : base };
29
+ }
@@ -0,0 +1,6 @@
1
+ import { type InteractionState } from "./styleState.js";
2
+ /** Matches native interaction states and the Inspector's temporary CSS state. */
3
+ export declare function selectorForInteractionStatePreview(selector: string): string;
4
+ /** Previews interaction states without dispatching events or changing application state. */
5
+ export declare function startInteractionStatePreview(element: HTMLElement, state: InteractionState): () => void;
6
+ export declare function useInteractionStatePreview(element: HTMLElement | null, state: InteractionState): void;
@@ -0,0 +1,107 @@
1
+ import { useLayoutEffect } from "react";
2
+ import { collectRules, invalidateStyleResolutionCache, subscribeDocumentRevision } from "../tokens/resolution/cssomCollector.js";
3
+ import { selectorPseudoClasses, splitSelectorAtTopLevel } from "../tokens/resolution/selectorSemantics.js";
4
+ import { adoptStylesheet, allowsStyleElements, releaseAdoptedStylesheet, STATE_PREVIEW_SHEET_ID } from "../runtime/ownedStylesheets.js";
5
+ import { INTERACTION_STATES } from "./styleState.js";
6
+ const MARKER = "data-nudge-ui-state-preview";
7
+ const interactionStates = new Set(INTERACTION_STATES);
8
+ /** Matches native interaction states and the Inspector's temporary CSS state. */
9
+ export function selectorForInteractionStatePreview(selector) {
10
+ let transformed = selector;
11
+ for (const pseudo of [...selectorPseudoClasses(selector)].reverse()) {
12
+ if (!interactionStates.has(pseudo.name))
13
+ continue;
14
+ // :where() keeps the replacement at the original pseudo-class specificity.
15
+ const replacement = `:is(:${pseudo.name}:where(:not([${MARKER}])), [${MARKER}="${pseudo.name}"])`;
16
+ transformed = transformed.slice(0, pseudo.start) + replacement + transformed.slice(pseudo.end);
17
+ }
18
+ return transformed;
19
+ }
20
+ function previewSelector(selector) {
21
+ const transformed = selectorForInteractionStatePreview(selector);
22
+ // Same added specificity on every branch preserves their relative cascade while overriding native pointer states.
23
+ const scope = `:where([${MARKER}], [${MARKER}] *):is(#${STATE_PREVIEW_SHEET_ID}, *)`;
24
+ // A scope must precede a pseudo-element, which cannot take an attribute.
25
+ let parentheses = 0;
26
+ let brackets = 0;
27
+ let quote = null;
28
+ for (let index = 0; index < transformed.length; index++) {
29
+ const character = transformed[index];
30
+ if (character === "\\") {
31
+ index++;
32
+ continue;
33
+ }
34
+ if (quote) {
35
+ if (character === quote)
36
+ quote = null;
37
+ continue;
38
+ }
39
+ if (character === '"' || character === "'") {
40
+ quote = character;
41
+ continue;
42
+ }
43
+ if (character === "[")
44
+ brackets++;
45
+ else if (character === "]")
46
+ brackets--;
47
+ else if (brackets === 0) {
48
+ if (character === "(")
49
+ parentheses++;
50
+ else if (character === ")")
51
+ parentheses--;
52
+ else if (parentheses === 0 && /^::|^:(?:before|after|first-line|first-letter)\b/.test(transformed.slice(index))) {
53
+ return transformed.slice(0, index) + scope + transformed.slice(index);
54
+ }
55
+ }
56
+ }
57
+ return transformed + scope;
58
+ }
59
+ /** Previews interaction states without dispatching events or changing application state. */
60
+ export function startInteractionStatePreview(element, state) {
61
+ if (state === "base")
62
+ return () => undefined;
63
+ const doc = element.ownerDocument;
64
+ const previousMarker = element.getAttribute(MARKER);
65
+ element.setAttribute(MARKER, state);
66
+ const style = allowsStyleElements(doc) ? doc.createElement("style") : null;
67
+ if (style) {
68
+ style.id = STATE_PREVIEW_SHEET_ID;
69
+ style.setAttribute("data-nudge-ui", "state-preview");
70
+ (doc.head ?? doc.documentElement).appendChild(style);
71
+ }
72
+ const refresh = () => {
73
+ const css = collectRules(doc).rules.map((rule) => {
74
+ const selector = splitSelectorAtTopLevel(rule.selectorText, ",")
75
+ .map((branch) => previewSelector(branch.trim())).join(", ");
76
+ const declarations = rule.declarations.map(({ property, value, important }) => `${property}: ${value}${important ? " !important" : ""};`).join(" ");
77
+ let text = `${selector} { ${declarations} }`;
78
+ for (const wrapper of [...(rule.atRules ?? [])].reverse()) {
79
+ text = `@${wrapper.kind} ${wrapper.params} { ${text} }`;
80
+ }
81
+ if (rule.layer)
82
+ text = `@layer ${rule.layer} { ${text} }`;
83
+ return text;
84
+ }).join("\n");
85
+ if (style)
86
+ style.textContent = css;
87
+ else
88
+ adoptStylesheet(doc, STATE_PREVIEW_SHEET_ID, css);
89
+ };
90
+ refresh();
91
+ // Inspection excludes the preview sheet, but its painted values have changed.
92
+ invalidateStyleResolutionCache(doc);
93
+ const unsubscribe = subscribeDocumentRevision(doc, refresh);
94
+ return () => {
95
+ unsubscribe();
96
+ style?.remove();
97
+ releaseAdoptedStylesheet(doc, STATE_PREVIEW_SHEET_ID);
98
+ if (previousMarker === null)
99
+ element.removeAttribute(MARKER);
100
+ else
101
+ element.setAttribute(MARKER, previousMarker);
102
+ invalidateStyleResolutionCache(doc);
103
+ };
104
+ }
105
+ export function useInteractionStatePreview(element, state) {
106
+ useLayoutEffect(() => element ? startInteractionStatePreview(element, state) : undefined, [element, state]);
107
+ }
@@ -1,9 +1,5 @@
1
1
  export declare function isOriginalPreviewActive(): boolean;
2
2
  export declare function subscribeOriginalPreview(listener: () => void): () => void;
3
3
  export declare function useOriginalPreviewActive(): boolean;
4
- /**
5
- * Hold-to-view-original (NUD-30). While active the host document shows the
6
- * page without any inspector changes. Canonical intent stays in the workspace
7
- * store, so releasing restores the edited preview without loss.
8
- */
4
+ /** While active the document shows the page without inspector changes; canonical intent is never cleared. */
9
5
  export declare function setOriginalPreviewActive(next: boolean): void;
@@ -1,7 +1,4 @@
1
1
  import { useSyncExternalStore } from "react";
2
- import { draftChangeStore } from "../changes/draftChanges.js";
3
- import { applyHostDraftProjection, compileDraftProjection, } from "../projection/draftProjection.js";
4
- import { isEditorShellDocument } from "../runtime/editorShell.js";
5
2
  let previewingOriginal = false;
6
3
  const listeners = new Set();
7
4
  export function isOriginalPreviewActive() {
@@ -16,7 +13,11 @@ export function subscribeOriginalPreview(listener) {
16
13
  export function useOriginalPreviewActive() {
17
14
  return useSyncExternalStore(subscribeOriginalPreview, () => previewingOriginal, () => false);
18
15
  }
19
- function notifyOriginalPreviewListeners() {
16
+ /** While active the document shows the page without inspector changes; canonical intent is never cleared. */
17
+ export function setOriginalPreviewActive(next) {
18
+ if (next === previewingOriginal)
19
+ return;
20
+ previewingOriginal = next;
20
21
  for (const listener of listeners) {
21
22
  try {
22
23
  listener();
@@ -26,36 +27,3 @@ function notifyOriginalPreviewListeners() {
26
27
  }
27
28
  }
28
29
  }
29
- function applyEmptyHostProjection() {
30
- if (isEditorShellDocument())
31
- return;
32
- const { revision } = draftChangeStore.getSnapshot();
33
- applyHostDraftProjection({
34
- sourceRevision: revision,
35
- managedStyles: { rules: [], css: "" },
36
- instanceOverrides: [],
37
- structuralChanges: [],
38
- textContentChanges: [],
39
- componentOverrides: [],
40
- });
41
- }
42
- function applyCanonicalHostProjection() {
43
- if (isEditorShellDocument())
44
- return;
45
- applyHostDraftProjection(compileDraftProjection(draftChangeStore.getSnapshot()));
46
- }
47
- /**
48
- * Hold-to-view-original (NUD-30). While active the host document shows the
49
- * page without any inspector changes. Canonical intent stays in the workspace
50
- * store, so releasing restores the edited preview without loss.
51
- */
52
- export function setOriginalPreviewActive(next) {
53
- if (next === previewingOriginal)
54
- return;
55
- previewingOriginal = next;
56
- if (previewingOriginal)
57
- applyEmptyHostProjection();
58
- else
59
- applyCanonicalHostProjection();
60
- notifyOriginalPreviewListeners();
61
- }
@@ -1,3 +1,2 @@
1
- /** Read an inspector value from the selected authored state, falling back to
2
- * the browser only when CSSOM has no declaration to attribute. */
1
+ /** Reads from the authored state; the browser is only the fallback when CSSOM has no declaration to attribute. */
3
2
  export declare function getStateStyleValue(el: HTMLElement, property: string, fallback?: string): string;
@@ -1,14 +1,11 @@
1
1
  import { getActiveStyleState } from "./styleState.js";
2
- import { getBrowserCssInspection } from "../inspection/browserCssInspectionRegistry.js";
2
+ import { readInspectionSnapshot } from "../inspection/inspectionSnapshot.js";
3
3
  import { getElementComputedStyle } from "../runtime/domRealm.js";
4
- /** Read an inspector value from the selected authored state, falling back to
5
- * the browser only when CSSOM has no declaration to attribute. */
4
+ /** Reads from the authored state; the browser is only the fallback when CSSOM has no declaration to attribute. */
6
5
  export function getStateStyleValue(el, property, fallback = "") {
7
6
  try {
8
7
  const state = getActiveStyleState();
9
- // Keep the browser's exact computed value for ordinary Base inspection.
10
- // Authored resolution is needed when the live element is transiently
11
- // interacted with, or when the user explicitly selected another state.
8
+ // Base inspection uses the browser's computed value unless the element is transiently hovered or focused.
12
9
  const hasLiveInteraction = [":hover", ":active", ":focus", ":focus-visible"].some((selector) => {
13
10
  try {
14
11
  return el.matches(selector);
@@ -20,8 +17,7 @@ export function getStateStyleValue(el, property, fallback = "") {
20
17
  if (state === "base" && !hasLiveInteraction) {
21
18
  return getElementComputedStyle(el).getPropertyValue(property).trim() || fallback;
22
19
  }
23
- const rows = getBrowserCssInspection(el.ownerDocument ?? document)
24
- .inspect(el, { state }).properties;
20
+ const rows = readInspectionSnapshot(el, state)?.properties ?? [];
25
21
  const row = rows.find((candidate) => candidate.property === property)
26
22
  ?? (property === "background-color" ? rows.find((candidate) => candidate.property === "background") : undefined);
27
23
  if (row?.resolvedValue)
@@ -1,7 +1,6 @@
1
1
  export declare const INTERACTION_STATES: readonly ["hover", "active", "focus", "focus-visible", "disabled"];
2
2
  export type InteractionState = "base" | (typeof INTERACTION_STATES)[number];
3
- /** The selected authored interaction state. Kept outside React so edit actions
4
- * and history have the same context as the panel that initiated an edit. */
3
+ /** Kept outside React so edit actions and history share the panel's context. */
5
4
  export declare function getActiveStyleState(): InteractionState;
6
5
  export declare function setActiveStyleState(state: InteractionState): void;
7
6
  export declare function selectorForInteractionState(selector: string, state: InteractionState): string;
@@ -1,7 +1,6 @@
1
1
  export const INTERACTION_STATES = ["hover", "active", "focus", "focus-visible", "disabled"];
2
2
  let activeState = "base";
3
- /** The selected authored interaction state. Kept outside React so edit actions
4
- * and history have the same context as the panel that initiated an edit. */
3
+ /** Kept outside React so edit actions and history share the panel's context. */
5
4
  export function getActiveStyleState() {
6
5
  return activeState;
7
6
  }