nudge-ui 0.2.0

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 (510) hide show
  1. package/README.md +66 -0
  2. package/bin/nudge-ui.mjs +7 -0
  3. package/dist/LICENSE +21 -0
  4. package/dist/client.mjs +261 -0
  5. package/dist/compiler/ast.d.ts +18 -0
  6. package/dist/compiler/ast.js +75 -0
  7. package/dist/compiler/componentContractTypes.d.ts +19 -0
  8. package/dist/compiler/componentContractTypes.js +1 -0
  9. package/dist/compiler/componentContracts.d.ts +2 -0
  10. package/dist/compiler/componentContracts.js +260 -0
  11. package/dist/compiler/componentInstrumentation.d.ts +32 -0
  12. package/dist/compiler/componentInstrumentation.js +140 -0
  13. package/dist/compiler/componentPolicyResolution.d.ts +71 -0
  14. package/dist/compiler/componentPolicyResolution.js +388 -0
  15. package/dist/compiler/index.d.ts +9 -0
  16. package/dist/compiler/index.js +9 -0
  17. package/dist/compiler/packageComponentContracts.d.ts +32 -0
  18. package/dist/compiler/packageComponentContracts.js +308 -0
  19. package/dist/compiler/reactComponentProtocols.d.ts +145 -0
  20. package/dist/compiler/reactComponentProtocols.js +47 -0
  21. package/dist/compiler/reactIdentity.d.ts +15 -0
  22. package/dist/compiler/reactIdentity.js +339 -0
  23. package/dist/compiler/sourcePaths.d.ts +12 -0
  24. package/dist/compiler/sourcePaths.js +27 -0
  25. package/dist/css/dialects/index.d.ts +62 -0
  26. package/dist/css/dialects/index.js +103 -0
  27. package/dist/css/dialects/tailwind.d.ts +46 -0
  28. package/dist/css/dialects/tailwind.js +119 -0
  29. package/dist/css/dialects/vanillaExtract.d.ts +20 -0
  30. package/dist/css/dialects/vanillaExtract.js +32 -0
  31. package/dist/css/index.d.ts +10 -0
  32. package/dist/css/index.js +10 -0
  33. package/dist/css/model/index.d.ts +190 -0
  34. package/dist/css/model/index.js +10 -0
  35. package/dist/css/token-inventory/index.d.ts +26 -0
  36. package/dist/css/token-inventory/index.js +24 -0
  37. package/dist/css/token-inventory/inventory.d.ts +8 -0
  38. package/dist/css/token-inventory/inventory.js +421 -0
  39. package/dist/css/token-inventory/parseStylesheet.d.ts +16 -0
  40. package/dist/css/token-inventory/parseStylesheet.js +155 -0
  41. package/dist/css/token-inventory/policy.d.ts +47 -0
  42. package/dist/css/token-inventory/policy.js +50 -0
  43. package/dist/css/token-inventory/types.d.ts +97 -0
  44. package/dist/css/token-inventory/types.js +1 -0
  45. package/dist/css/value-semantics/borderSemantics.d.ts +28 -0
  46. package/dist/css/value-semantics/borderSemantics.js +91 -0
  47. package/dist/css/value-semantics/boxSemantics.d.ts +37 -0
  48. package/dist/css/value-semantics/boxSemantics.js +71 -0
  49. package/dist/css/value-semantics/colorSemantics.d.ts +99 -0
  50. package/dist/css/value-semantics/colorSemantics.js +526 -0
  51. package/dist/css/value-semantics/cssSyntax.d.ts +19 -0
  52. package/dist/css/value-semantics/cssSyntax.js +111 -0
  53. package/dist/css/value-semantics/fontSemantics.d.ts +35 -0
  54. package/dist/css/value-semantics/fontSemantics.js +131 -0
  55. package/dist/css/value-semantics/index.d.ts +20 -0
  56. package/dist/css/value-semantics/index.js +15 -0
  57. package/dist/css/value-semantics/propertyPolicy.d.ts +118 -0
  58. package/dist/css/value-semantics/propertyPolicy.js +356 -0
  59. package/dist/css/value-semantics/stringMaps.d.ts +2 -0
  60. package/dist/css/value-semantics/stringMaps.js +1 -0
  61. package/dist/css/value-semantics/structuredValues.d.ts +64 -0
  62. package/dist/css/value-semantics/structuredValues.js +250 -0
  63. package/dist/css/value-semantics/tokenInterpretation.d.ts +90 -0
  64. package/dist/css/value-semantics/tokenInterpretation.js +193 -0
  65. package/dist/css/virtual-design-tokens.d.ts +17 -0
  66. package/dist/hosts/astro/astroRuntimeConfig.d.ts +12 -0
  67. package/dist/hosts/astro/astroRuntimeConfig.js +26 -0
  68. package/dist/hosts/astro/clientAsset.d.ts +12 -0
  69. package/dist/hosts/astro/clientAsset.js +51 -0
  70. package/dist/hosts/astro/clientTransport.d.ts +3 -0
  71. package/dist/hosts/astro/clientTransport.js +57 -0
  72. package/dist/hosts/astro/index.d.ts +3 -0
  73. package/dist/hosts/astro/index.js +2 -0
  74. package/dist/hosts/astro/integration.d.ts +35 -0
  75. package/dist/hosts/astro/integration.js +96 -0
  76. package/dist/hosts/astro/middleware.d.ts +13 -0
  77. package/dist/hosts/astro/middleware.js +22 -0
  78. package/dist/hosts/astro/projectContext.d.ts +11 -0
  79. package/dist/hosts/astro/projectContext.js +34 -0
  80. package/dist/hosts/astro/responseInstrumentation.d.ts +41 -0
  81. package/dist/hosts/astro/responseInstrumentation.js +80 -0
  82. package/dist/hosts/next/index.d.ts +4 -0
  83. package/dist/hosts/next/index.js +7 -0
  84. package/dist/hosts/next/loader.d.ts +66 -0
  85. package/dist/hosts/next/loader.js +346 -0
  86. package/dist/hosts/next/loaders/identity-loader.cjs +228257 -0
  87. package/dist/hosts/next/loaders/loader-plugin.cjs +228257 -0
  88. package/dist/hosts/next/manifest.d.ts +38 -0
  89. package/dist/hosts/next/manifest.js +30 -0
  90. package/dist/hosts/next/mount.d.ts +12 -0
  91. package/dist/hosts/next/mount.js +23 -0
  92. package/dist/hosts/next/repositoryScope.d.ts +20 -0
  93. package/dist/hosts/next/repositoryScope.js +33 -0
  94. package/dist/hosts/next/sidecar.d.ts +27 -0
  95. package/dist/hosts/next/sidecar.js +526 -0
  96. package/dist/hosts/next/wrapper.d.ts +67 -0
  97. package/dist/hosts/next/wrapper.js +310 -0
  98. package/dist/hosts/static/cli.d.ts +12 -0
  99. package/dist/hosts/static/cli.js +77 -0
  100. package/dist/hosts/static/html/bootstrap.d.ts +27 -0
  101. package/dist/hosts/static/html/bootstrap.js +93 -0
  102. package/dist/hosts/static/index.d.ts +4 -0
  103. package/dist/hosts/static/index.js +4 -0
  104. package/dist/hosts/static/manifest.d.ts +18 -0
  105. package/dist/hosts/static/manifest.js +51 -0
  106. package/dist/hosts/static/server.d.ts +72 -0
  107. package/dist/hosts/static/server.js +554 -0
  108. package/dist/hosts/vite/index.d.ts +20 -0
  109. package/dist/hosts/vite/index.js +48 -0
  110. package/dist/hosts/vite/react.d.ts +67 -0
  111. package/dist/hosts/vite/react.js +231 -0
  112. package/dist/hosts/vite/tokens/activeStylesheets.d.ts +28 -0
  113. package/dist/hosts/vite/tokens/activeStylesheets.js +70 -0
  114. package/dist/hosts/vite/tokens/fileMap.d.ts +2 -0
  115. package/dist/hosts/vite/tokens/fileMap.js +1 -0
  116. package/dist/hosts/vite/tokens/viteStylesheetArtifacts.d.ts +46 -0
  117. package/dist/hosts/vite/tokens/viteStylesheetArtifacts.js +104 -0
  118. package/dist/hosts/vite/virtual/design-tokens.d.ts +9 -0
  119. package/dist/hosts/vite/virtual/design-tokens.js +7 -0
  120. package/dist/hosts/vite/virtual-design-tokens.d.ts +1 -0
  121. package/dist/hosts/vite/vite.d.ts +62 -0
  122. package/dist/hosts/vite/vite.js +854 -0
  123. package/dist/html/dom.d.ts +13 -0
  124. package/dist/html/dom.js +46 -0
  125. package/dist/html/identity.d.ts +40 -0
  126. package/dist/html/identity.js +196 -0
  127. package/dist/html/insertions.d.ts +26 -0
  128. package/dist/html/insertions.js +59 -0
  129. package/dist/inspector/agent/McpConnectionDialog.d.ts +26 -0
  130. package/dist/inspector/agent/McpConnectionDialog.js +135 -0
  131. package/dist/inspector/agent/client.d.ts +98 -0
  132. package/dist/inspector/agent/client.js +728 -0
  133. package/dist/inspector/agent/connectionStatus.d.ts +13 -0
  134. package/dist/inspector/agent/connectionStatus.js +35 -0
  135. package/dist/inspector/agent/httpTransport.d.ts +21 -0
  136. package/dist/inspector/agent/httpTransport.js +347 -0
  137. package/dist/inspector/agent/protocol.d.ts +95 -0
  138. package/dist/inspector/agent/protocol.js +9 -0
  139. package/dist/inspector/agent/verification.d.ts +39 -0
  140. package/dist/inspector/agent/verification.js +207 -0
  141. package/dist/inspector/canvas/CanvasCard.d.ts +10 -0
  142. package/dist/inspector/canvas/CanvasCard.js +275 -0
  143. package/dist/inspector/canvas/CanvasElementOverlay.d.ts +2 -0
  144. package/dist/inspector/canvas/CanvasElementOverlay.js +301 -0
  145. package/dist/inspector/canvas/CanvasWorkspace.d.ts +2 -0
  146. package/dist/inspector/canvas/CanvasWorkspace.js +301 -0
  147. package/dist/inspector/canvas/LockedWorkspaceNotice.d.ts +6 -0
  148. package/dist/inspector/canvas/LockedWorkspaceNotice.js +17 -0
  149. package/dist/inspector/canvas/StaleChangeIndicator.d.ts +7 -0
  150. package/dist/inspector/canvas/StaleChangeIndicator.js +43 -0
  151. package/dist/inspector/canvas/agentPresentation.d.ts +87 -0
  152. package/dist/inspector/canvas/agentPresentation.js +421 -0
  153. package/dist/inspector/canvas/canvasGestures.d.ts +12 -0
  154. package/dist/inspector/canvas/canvasGestures.js +21 -0
  155. package/dist/inspector/canvas/canvasStore.d.ts +108 -0
  156. package/dist/inspector/canvas/canvasStore.js +448 -0
  157. package/dist/inspector/canvas/frameProtocol.d.ts +231 -0
  158. package/dist/inspector/canvas/frameProtocol.js +165 -0
  159. package/dist/inspector/canvas/linkEligibility.d.ts +8 -0
  160. package/dist/inspector/canvas/linkEligibility.js +68 -0
  161. package/dist/inspector/canvas/measurementProjection.d.ts +8 -0
  162. package/dist/inspector/canvas/measurementProjection.js +16 -0
  163. package/dist/inspector/canvas/normalizeUrl.d.ts +7 -0
  164. package/dist/inspector/canvas/normalizeUrl.js +27 -0
  165. package/dist/inspector/canvas/projection.d.ts +41 -0
  166. package/dist/inspector/canvas/projection.js +232 -0
  167. package/dist/inspector/canvas/rendererBootstrap.d.ts +4 -0
  168. package/dist/inspector/canvas/rendererBootstrap.js +410 -0
  169. package/dist/inspector/canvas/rendererCidIndex.d.ts +11 -0
  170. package/dist/inspector/canvas/rendererCidIndex.js +21 -0
  171. package/dist/inspector/canvas/rendererElementSelector.d.ts +2 -0
  172. package/dist/inspector/canvas/rendererElementSelector.js +378 -0
  173. package/dist/inspector/canvas/rendererSelectionProxy.d.ts +2 -0
  174. package/dist/inspector/canvas/rendererSelectionProxy.js +61 -0
  175. package/dist/inspector/canvas/rendererStylesheet.d.ts +16 -0
  176. package/dist/inspector/canvas/rendererStylesheet.js +221 -0
  177. package/dist/inspector/canvas/resizeHandleScale.d.ts +13 -0
  178. package/dist/inspector/canvas/resizeHandleScale.js +20 -0
  179. package/dist/inspector/canvas/roleDetection.d.ts +5 -0
  180. package/dist/inspector/canvas/roleDetection.js +21 -0
  181. package/dist/inspector/canvas/sessionStore.d.ts +71 -0
  182. package/dist/inspector/canvas/sessionStore.js +453 -0
  183. package/dist/inspector/canvas/staleChangeDetector.d.ts +11 -0
  184. package/dist/inspector/canvas/staleChangeDetector.js +217 -0
  185. package/dist/inspector/canvas/toolbarScale.d.ts +7 -0
  186. package/dist/inspector/canvas/toolbarScale.js +11 -0
  187. package/dist/inspector/canvas/workspaceLease.d.ts +26 -0
  188. package/dist/inspector/canvas/workspaceLease.js +214 -0
  189. package/dist/inspector/changes/changesLog.d.ts +46 -0
  190. package/dist/inspector/changes/changesLog.js +209 -0
  191. package/dist/inspector/changes/codecs.d.ts +98 -0
  192. package/dist/inspector/changes/codecs.js +389 -0
  193. package/dist/inspector/changes/editModel.d.ts +74 -0
  194. package/dist/inspector/changes/editModel.js +120 -0
  195. package/dist/inspector/changes/managedStyleProjection.d.ts +6 -0
  196. package/dist/inspector/changes/managedStyleProjection.js +109 -0
  197. package/dist/inspector/changes/model.d.ts +13 -0
  198. package/dist/inspector/changes/model.js +163 -0
  199. package/dist/inspector/changes/presentation.d.ts +14 -0
  200. package/dist/inspector/changes/presentation.js +81 -0
  201. package/dist/inspector/changes/previewDiagnostics.d.ts +39 -0
  202. package/dist/inspector/changes/previewDiagnostics.js +172 -0
  203. package/dist/inspector/changes/structuralTypes.d.ts +35 -0
  204. package/dist/inspector/changes/structuralTypes.js +1 -0
  205. package/dist/inspector/changes/types.d.ts +76 -0
  206. package/dist/inspector/changes/types.js +16 -0
  207. package/dist/inspector/changes/workspaceChanges.d.ts +43 -0
  208. package/dist/inspector/changes/workspaceChanges.js +239 -0
  209. package/dist/inspector/clientManifest.d.ts +24 -0
  210. package/dist/inspector/clientManifest.js +69 -0
  211. package/dist/inspector/componentSemantics/ComponentPropsSection.d.ts +5 -0
  212. package/dist/inspector/componentSemantics/ComponentPropsSection.js +44 -0
  213. package/dist/inspector/componentSemantics/adapterRegistry.d.ts +11 -0
  214. package/dist/inspector/componentSemantics/adapterRegistry.js +75 -0
  215. package/dist/inspector/componentSemantics/boundaries.d.ts +2 -0
  216. package/dist/inspector/componentSemantics/boundaries.js +10 -0
  217. package/dist/inspector/componentSemantics/changeAction.d.ts +3 -0
  218. package/dist/inspector/componentSemantics/changeAction.js +6 -0
  219. package/dist/inspector/componentSemantics/changeModel.d.ts +8 -0
  220. package/dist/inspector/componentSemantics/changeModel.js +60 -0
  221. package/dist/inspector/componentSemantics/index.d.ts +4 -0
  222. package/dist/inspector/componentSemantics/index.js +2 -0
  223. package/dist/inspector/componentSemantics/reactRuntime.d.ts +10 -0
  224. package/dist/inspector/componentSemantics/reactRuntime.js +186 -0
  225. package/dist/inspector/componentSemantics/runtimeBridge.d.ts +25 -0
  226. package/dist/inspector/componentSemantics/runtimeBridge.js +161 -0
  227. package/dist/inspector/componentSemantics/runtimeTypes.d.ts +2 -0
  228. package/dist/inspector/componentSemantics/runtimeTypes.js +1 -0
  229. package/dist/inspector/componentSemantics/textBinding.d.ts +69 -0
  230. package/dist/inspector/componentSemantics/textBinding.js +514 -0
  231. package/dist/inspector/componentSemantics/types.d.ts +96 -0
  232. package/dist/inspector/componentSemantics/types.js +5 -0
  233. package/dist/inspector/conformance/borderCases.d.ts +7 -0
  234. package/dist/inspector/conformance/borderCases.js +428 -0
  235. package/dist/inspector/conformance/colorCases.d.ts +8 -0
  236. package/dist/inspector/conformance/colorCases.js +470 -0
  237. package/dist/inspector/conformance/fixture.d.ts +68 -0
  238. package/dist/inspector/conformance/fixture.js +153 -0
  239. package/dist/inspector/conformance/projection.d.ts +2 -0
  240. package/dist/inspector/conformance/projection.js +3 -0
  241. package/dist/inspector/conformance/spacingCases.d.ts +6 -0
  242. package/dist/inspector/conformance/spacingCases.js +417 -0
  243. package/dist/inspector/conformance/typographyCases.d.ts +7 -0
  244. package/dist/inspector/conformance/typographyCases.js +174 -0
  245. package/dist/inspector/editScope.d.ts +4 -0
  246. package/dist/inspector/editScope.js +5 -0
  247. package/dist/inspector/index.d.ts +20 -0
  248. package/dist/inspector/index.js +236 -0
  249. package/dist/inspector/inline-text/inlineTextEditor.d.ts +74 -0
  250. package/dist/inspector/inline-text/inlineTextEditor.js +1207 -0
  251. package/dist/inspector/inline-text/inlineTextLifecycle.d.ts +2 -0
  252. package/dist/inspector/inline-text/inlineTextLifecycle.js +17 -0
  253. package/dist/inspector/inline-text/textChangeBoundary.d.ts +6 -0
  254. package/dist/inspector/inline-text/textChangeBoundary.js +1 -0
  255. package/dist/inspector/inspection/bridge.d.ts +72 -0
  256. package/dist/inspector/inspection/bridge.js +134 -0
  257. package/dist/inspector/inspection/browserCssInspection.d.ts +74 -0
  258. package/dist/inspector/inspection/browserCssInspection.js +317 -0
  259. package/dist/inspector/inspection/browserCssInspectionRegistry.d.ts +12 -0
  260. package/dist/inspector/inspection/browserCssInspectionRegistry.js +66 -0
  261. package/dist/inspector/inspection/selectionProperty.d.ts +32 -0
  262. package/dist/inspector/inspection/selectionProperty.js +33 -0
  263. package/dist/inspector/inspection/useBrowserCssInspection.d.ts +20 -0
  264. package/dist/inspector/inspection/useBrowserCssInspection.js +159 -0
  265. package/dist/inspector/overlay/DropGuideOverlay.d.ts +17 -0
  266. package/dist/inspector/overlay/DropGuideOverlay.js +17 -0
  267. package/dist/inspector/overlay/InspectorOverlay.d.ts +5 -0
  268. package/dist/inspector/overlay/InspectorOverlay.js +328 -0
  269. package/dist/inspector/overlay/MeasurementGuideOverlay.d.ts +19 -0
  270. package/dist/inspector/overlay/MeasurementGuideOverlay.js +40 -0
  271. package/dist/inspector/overlay/clickPolicy.d.ts +7 -0
  272. package/dist/inspector/overlay/clickPolicy.js +13 -0
  273. package/dist/inspector/overlay/dropGuide.d.ts +22 -0
  274. package/dist/inspector/overlay/dropGuide.js +48 -0
  275. package/dist/inspector/overlay/elementSelector.d.ts +1 -0
  276. package/dist/inspector/overlay/elementSelector.js +100 -0
  277. package/dist/inspector/overlay/frameThrottle.d.ts +10 -0
  278. package/dist/inspector/overlay/frameThrottle.js +38 -0
  279. package/dist/inspector/overlay/interactionStyles.d.ts +3 -0
  280. package/dist/inspector/overlay/interactionStyles.js +70 -0
  281. package/dist/inspector/overlay/measurementGeometry.d.ts +25 -0
  282. package/dist/inspector/overlay/measurementGeometry.js +104 -0
  283. package/dist/inspector/overlay/overlayGeometry.d.ts +40 -0
  284. package/dist/inspector/overlay/overlayGeometry.js +59 -0
  285. package/dist/inspector/overlay/selectedGeometry.d.ts +7 -0
  286. package/dist/inspector/overlay/selectedGeometry.js +51 -0
  287. package/dist/inspector/overlay/structuralGestures.d.ts +28 -0
  288. package/dist/inspector/overlay/structuralGestures.js +180 -0
  289. package/dist/inspector/projection/cssEscapes.d.ts +3 -0
  290. package/dist/inspector/projection/cssEscapes.js +20 -0
  291. package/dist/inspector/projection/managedStylesheet.d.ts +33 -0
  292. package/dist/inspector/projection/managedStylesheet.js +240 -0
  293. package/dist/inspector/projection/renderedInstance.d.ts +56 -0
  294. package/dist/inspector/projection/renderedInstance.js +306 -0
  295. package/dist/inspector/projection/structuralProjection.d.ts +93 -0
  296. package/dist/inspector/projection/structuralProjection.js +560 -0
  297. package/dist/inspector/projection/structuralProjectionBoundary.d.ts +5 -0
  298. package/dist/inspector/projection/structuralProjectionBoundary.js +65 -0
  299. package/dist/inspector/projection/textProjection.d.ts +53 -0
  300. package/dist/inspector/projection/textProjection.js +705 -0
  301. package/dist/inspector/projection/workspaceProjection.d.ts +43 -0
  302. package/dist/inspector/projection/workspaceProjection.js +58 -0
  303. package/dist/inspector/prompt/PromptSettingsDialog.d.ts +15 -0
  304. package/dist/inspector/prompt/PromptSettingsDialog.js +17 -0
  305. package/dist/inspector/prompt/clipboardHandoff.d.ts +34 -0
  306. package/dist/inspector/prompt/clipboardHandoff.js +212 -0
  307. package/dist/inspector/prompt/copyToClipboard.d.ts +1 -0
  308. package/dist/inspector/prompt/copyToClipboard.js +34 -0
  309. package/dist/inspector/prompt/detectFramework.d.ts +6 -0
  310. package/dist/inspector/prompt/detectFramework.js +4 -0
  311. package/dist/inspector/prompt/generatePrompt.d.ts +7 -0
  312. package/dist/inspector/prompt/generatePrompt.js +391 -0
  313. package/dist/inspector/prompt/promptSettings.d.ts +8 -0
  314. package/dist/inspector/prompt/promptSettings.js +28 -0
  315. package/dist/inspector/runtime/devFlag.d.ts +28 -0
  316. package/dist/inspector/runtime/devFlag.js +50 -0
  317. package/dist/inspector/runtime/documentStylesheetOrder.d.ts +19 -0
  318. package/dist/inspector/runtime/documentStylesheetOrder.js +89 -0
  319. package/dist/inspector/runtime/domRealm.d.ts +4 -0
  320. package/dist/inspector/runtime/domRealm.js +11 -0
  321. package/dist/inspector/runtime/runtimeConfig.d.ts +119 -0
  322. package/dist/inspector/runtime/runtimeConfig.js +276 -0
  323. package/dist/inspector/runtime/staticHtmlRuntimeIdentity.d.ts +32 -0
  324. package/dist/inspector/runtime/staticHtmlRuntimeIdentity.js +149 -0
  325. package/dist/inspector/runtime/useRuntimeConfig.d.ts +10 -0
  326. package/dist/inspector/runtime/useRuntimeConfig.js +13 -0
  327. package/dist/inspector/selection/editScope.d.ts +32 -0
  328. package/dist/inspector/selection/editScope.js +140 -0
  329. package/dist/inspector/selection/editTarget.d.ts +8 -0
  330. package/dist/inspector/selection/editTarget.js +11 -0
  331. package/dist/inspector/selection/hierarchy.d.ts +7 -0
  332. package/dist/inspector/selection/hierarchy.js +42 -0
  333. package/dist/inspector/selection/resolveSelection.d.ts +10 -0
  334. package/dist/inspector/selection/resolveSelection.js +60 -0
  335. package/dist/inspector/selection/selectionStore.d.ts +41 -0
  336. package/dist/inspector/selection/selectionStore.js +262 -0
  337. package/dist/inspector/selection/selectionTarget.d.ts +5 -0
  338. package/dist/inspector/selection/selectionTarget.js +50 -0
  339. package/dist/inspector/selection/sourceSite.d.ts +2 -0
  340. package/dist/inspector/selection/sourceSite.js +12 -0
  341. package/dist/inspector/selection/styleSelection.d.ts +22 -0
  342. package/dist/inspector/selection/styleSelection.js +104 -0
  343. package/dist/inspector/session/index.d.ts +3 -0
  344. package/dist/inspector/session/index.js +2 -0
  345. package/dist/inspector/session/lifecycle.d.ts +22 -0
  346. package/dist/inspector/session/lifecycle.js +63 -0
  347. package/dist/inspector/session/sessionContext.d.ts +21 -0
  348. package/dist/inspector/session/sessionContext.js +28 -0
  349. package/dist/inspector/session/sessionFactory.d.ts +29 -0
  350. package/dist/inspector/session/sessionFactory.js +73 -0
  351. package/dist/inspector/settings/SettingsDialog.d.ts +12 -0
  352. package/dist/inspector/settings/SettingsDialog.js +46 -0
  353. package/dist/inspector/shell/AppShell.d.ts +2 -0
  354. package/dist/inspector/shell/AppShell.js +9 -0
  355. package/dist/inspector/shell/ChangesLog.d.ts +6 -0
  356. package/dist/inspector/shell/ChangesLog.js +92 -0
  357. package/dist/inspector/shell/CopyPromptButton.d.ts +9 -0
  358. package/dist/inspector/shell/CopyPromptButton.js +159 -0
  359. package/dist/inspector/shell/DomNavigation.d.ts +8 -0
  360. package/dist/inspector/shell/DomNavigation.js +30 -0
  361. package/dist/inspector/shell/EmptyState.d.ts +2 -0
  362. package/dist/inspector/shell/EmptyState.js +15 -0
  363. package/dist/inspector/shell/InspectorShell.d.ts +11 -0
  364. package/dist/inspector/shell/InspectorShell.js +268 -0
  365. package/dist/inspector/shell/openStore.d.ts +6 -0
  366. package/dist/inspector/shell/openStore.js +29 -0
  367. package/dist/inspector/shell/panelLayout.d.ts +2 -0
  368. package/dist/inspector/shell/panelLayout.js +29 -0
  369. package/dist/inspector/shell/shortcuts.d.ts +3 -0
  370. package/dist/inspector/shell/shortcuts.js +25 -0
  371. package/dist/inspector/shell/stateValue.d.ts +3 -0
  372. package/dist/inspector/shell/stateValue.js +34 -0
  373. package/dist/inspector/shell/styleState.d.ts +7 -0
  374. package/dist/inspector/shell/styleState.js +13 -0
  375. package/dist/inspector/spacing/projection.d.ts +43 -0
  376. package/dist/inspector/spacing/projection.js +136 -0
  377. package/dist/inspector/styleEditors/AppearanceSection.d.ts +13 -0
  378. package/dist/inspector/styleEditors/AppearanceSection.js +6 -0
  379. package/dist/inspector/styleEditors/AspectRatioField.d.ts +17 -0
  380. package/dist/inspector/styleEditors/AspectRatioField.js +10 -0
  381. package/dist/inspector/styleEditors/BorderEditor.d.ts +13 -0
  382. package/dist/inspector/styleEditors/BorderEditor.js +295 -0
  383. package/dist/inspector/styleEditors/BorderRadiusEditor.d.ts +14 -0
  384. package/dist/inspector/styleEditors/BorderRadiusEditor.js +108 -0
  385. package/dist/inspector/styleEditors/BoxShadowEditor.d.ts +13 -0
  386. package/dist/inspector/styleEditors/BoxShadowEditor.js +13 -0
  387. package/dist/inspector/styleEditors/ColorPicker.d.ts +15 -0
  388. package/dist/inspector/styleEditors/ColorPicker.js +73 -0
  389. package/dist/inspector/styleEditors/GapField.d.ts +17 -0
  390. package/dist/inspector/styleEditors/GapField.js +12 -0
  391. package/dist/inspector/styleEditors/GridChildSection.d.ts +14 -0
  392. package/dist/inspector/styleEditors/GridChildSection.js +91 -0
  393. package/dist/inspector/styleEditors/GridPicker.d.ts +13 -0
  394. package/dist/inspector/styleEditors/GridPicker.js +179 -0
  395. package/dist/inspector/styleEditors/GridSection.d.ts +17 -0
  396. package/dist/inspector/styleEditors/GridSection.js +27 -0
  397. package/dist/inspector/styleEditors/GridValueField.d.ts +17 -0
  398. package/dist/inspector/styleEditors/GridValueField.js +70 -0
  399. package/dist/inspector/styleEditors/InsetSection.d.ts +15 -0
  400. package/dist/inspector/styleEditors/InsetSection.js +15 -0
  401. package/dist/inspector/styleEditors/LayoutBlockedIndicator.d.ts +6 -0
  402. package/dist/inspector/styleEditors/LayoutBlockedIndicator.js +6 -0
  403. package/dist/inspector/styleEditors/LayoutComboField.d.ts +18 -0
  404. package/dist/inspector/styleEditors/LayoutComboField.js +138 -0
  405. package/dist/inspector/styleEditors/LayoutDropdown.d.ts +14 -0
  406. package/dist/inspector/styleEditors/LayoutDropdown.js +34 -0
  407. package/dist/inspector/styleEditors/LayoutSection.d.ts +13 -0
  408. package/dist/inspector/styleEditors/LayoutSection.js +342 -0
  409. package/dist/inspector/styleEditors/OpacityEditor.d.ts +13 -0
  410. package/dist/inspector/styleEditors/OpacityEditor.js +34 -0
  411. package/dist/inspector/styleEditors/PositionInsets.d.ts +15 -0
  412. package/dist/inspector/styleEditors/PositionInsets.js +12 -0
  413. package/dist/inspector/styleEditors/SpacingBox.d.ts +29 -0
  414. package/dist/inspector/styleEditors/SpacingBox.js +189 -0
  415. package/dist/inspector/styleEditors/Typography.d.ts +13 -0
  416. package/dist/inspector/styleEditors/Typography.js +137 -0
  417. package/dist/inspector/styleEditors/completeCssValue.d.ts +8 -0
  418. package/dist/inspector/styleEditors/completeCssValue.js +34 -0
  419. package/dist/inspector/styleEditors/gridChildModel.d.ts +74 -0
  420. package/dist/inspector/styleEditors/gridChildModel.js +138 -0
  421. package/dist/inspector/styleEditors/layoutValue.d.ts +24 -0
  422. package/dist/inspector/styleEditors/layoutValue.js +103 -0
  423. package/dist/inspector/styleEditors/nudgeValue.d.ts +8 -0
  424. package/dist/inspector/styleEditors/nudgeValue.js +71 -0
  425. package/dist/inspector/styleEditors/rowLookup.d.ts +11 -0
  426. package/dist/inspector/styleEditors/rowLookup.js +13 -0
  427. package/dist/inspector/styleEditors/stringRecord.d.ts +4 -0
  428. package/dist/inspector/styleEditors/stringRecord.js +1 -0
  429. package/dist/inspector/styleEditors/valuePolicy.d.ts +20 -0
  430. package/dist/inspector/styleEditors/valuePolicy.js +82 -0
  431. package/dist/inspector/testing.d.ts +10 -0
  432. package/dist/inspector/testing.js +9 -0
  433. package/dist/inspector/tokens/TokenChip.d.ts +24 -0
  434. package/dist/inspector/tokens/TokenChip.js +23 -0
  435. package/dist/inspector/tokens/TokenDropdown.d.ts +13 -0
  436. package/dist/inspector/tokens/TokenDropdown.js +59 -0
  437. package/dist/inspector/tokens/TokenField.d.ts +68 -0
  438. package/dist/inspector/tokens/TokenField.js +485 -0
  439. package/dist/inspector/tokens/TokenLabel.d.ts +7 -0
  440. package/dist/inspector/tokens/TokenLabel.js +23 -0
  441. package/dist/inspector/tokens/TokensPanel.d.ts +5 -0
  442. package/dist/inspector/tokens/TokensPanel.js +47 -0
  443. package/dist/inspector/tokens/catalog.d.ts +51 -0
  444. package/dist/inspector/tokens/catalog.js +184 -0
  445. package/dist/inspector/tokens/editActions.d.ts +35 -0
  446. package/dist/inspector/tokens/editActions.js +164 -0
  447. package/dist/inspector/tokens/resolution/cascade.d.ts +14 -0
  448. package/dist/inspector/tokens/resolution/cascade.js +31 -0
  449. package/dist/inspector/tokens/resolution/cssomCollector.d.ts +43 -0
  450. package/dist/inspector/tokens/resolution/cssomCollector.js +528 -0
  451. package/dist/inspector/tokens/resolution/selectorSemantics.d.ts +12 -0
  452. package/dist/inspector/tokens/resolution/selectorSemantics.js +106 -0
  453. package/dist/inspector/tokens/resolution.d.ts +56 -0
  454. package/dist/inspector/tokens/resolution.js +1401 -0
  455. package/dist/inspector/tokens/tokenEdits.d.ts +3 -0
  456. package/dist/inspector/tokens/tokenEdits.js +22 -0
  457. package/dist/inspector/tokens/valueSemanticsAdapter.d.ts +6 -0
  458. package/dist/inspector/tokens/valueSemanticsAdapter.js +68 -0
  459. package/dist/inspector/ui/AtRuleContext.d.ts +18 -0
  460. package/dist/inspector/ui/AtRuleContext.js +54 -0
  461. package/dist/inspector/ui/Button.d.ts +9 -0
  462. package/dist/inspector/ui/Button.js +4 -0
  463. package/dist/inspector/ui/ColorSwatch.d.ts +7 -0
  464. package/dist/inspector/ui/ColorSwatch.js +6 -0
  465. package/dist/inspector/ui/ControlSurface.d.ts +14 -0
  466. package/dist/inspector/ui/ControlSurface.js +10 -0
  467. package/dist/inspector/ui/FieldRow.d.ts +14 -0
  468. package/dist/inspector/ui/FieldRow.js +15 -0
  469. package/dist/inspector/ui/IconButton.d.ts +14 -0
  470. package/dist/inspector/ui/IconButton.js +5 -0
  471. package/dist/inspector/ui/InspectorPopover.d.ts +17 -0
  472. package/dist/inspector/ui/InspectorPopover.js +13 -0
  473. package/dist/inspector/ui/PopoverListbox.d.ts +37 -0
  474. package/dist/inspector/ui/PopoverListbox.js +21 -0
  475. package/dist/inspector/ui/SegmentedControl.d.ts +24 -0
  476. package/dist/inspector/ui/SegmentedControl.js +16 -0
  477. package/dist/inspector/ui/Select.d.ts +25 -0
  478. package/dist/inspector/ui/Select.js +56 -0
  479. package/dist/inspector/ui/SideValuesField.d.ts +44 -0
  480. package/dist/inspector/ui/SideValuesField.js +76 -0
  481. package/dist/inspector/ui/StatusCallout.d.ts +9 -0
  482. package/dist/inspector/ui/StatusCallout.js +4 -0
  483. package/dist/inspector/ui/TextInput.d.ts +12 -0
  484. package/dist/inspector/ui/TextInput.js +5 -0
  485. package/dist/inspector/ui/ToggleButton.d.ts +11 -0
  486. package/dist/inspector/ui/ToggleButton.js +6 -0
  487. package/dist/inspector/ui/assets/grid.svg +14 -0
  488. package/dist/inspector/ui/css.d.ts +9 -0
  489. package/dist/inspector/ui/labels.d.ts +1 -0
  490. package/dist/inspector/ui/labels.js +7 -0
  491. package/dist/inspector/ui/styles.d.ts +1 -0
  492. package/dist/inspector/ui/styles.js +68 -0
  493. package/dist/inspector/virtual-modules.d.ts +7 -0
  494. package/dist/inspector/vite-env.d.ts +10 -0
  495. package/dist/internal/agent-protocol.d.ts +232 -0
  496. package/dist/internal/agent-protocol.js +237 -0
  497. package/dist/nudge-ui.mjs +15722 -0
  498. package/dist/project/files.d.ts +19 -0
  499. package/dist/project/files.js +226 -0
  500. package/dist/project/identity.d.ts +6 -0
  501. package/dist/project/identity.js +19 -0
  502. package/dist/project/pathPolicy.d.ts +8 -0
  503. package/dist/project/pathPolicy.js +12 -0
  504. package/dist/project/tokens.d.ts +36 -0
  505. package/dist/project/tokens.js +223 -0
  506. package/dist/transport/index.d.ts +8 -0
  507. package/dist/transport/index.js +8 -0
  508. package/dist/transport/routes.d.ts +13 -0
  509. package/dist/transport/routes.js +16 -0
  510. package/package.json +137 -0
@@ -0,0 +1,22 @@
1
+ import type { SelectedElement } from "./selectionStore.js";
2
+ import type { EditTarget } from "./editTarget.js";
3
+ import type { InspectionSnapshot } from "../inspection/browserCssInspection.js";
4
+ import type { ResolvedProperty } from "../../css/model/index.js";
5
+ import { type SelectionProperty } from "../inspection/selectionProperty.js";
6
+ /** Layout roles whose controls are only safe when shared by every target. */
7
+ export type StyleRole = "flex-container" | "flex-child" | "grid-container" | "grid-child" | "relative-position" | "inset-position";
8
+ export interface StyleSelection {
9
+ primary: SelectedElement;
10
+ elements: readonly SelectedElement[];
11
+ domElements: readonly HTMLElement[];
12
+ target: EditTarget;
13
+ primaryRows: readonly ResolvedProperty[];
14
+ getProperty(property: string): SelectionProperty | null;
15
+ supportsRole(role: StyleRole): boolean;
16
+ }
17
+ /**
18
+ * Builds the group style projection used by all style editors. Computed CSS
19
+ * is the value source, while individual inspection snapshots provide authored
20
+ * and token provenance where it exists.
21
+ */
22
+ export declare function createStyleSelection(elements: readonly SelectedElement[], snapshots: readonly InspectionSnapshot[], selectedPrimary?: SelectedElement | null): StyleSelection | null;
@@ -0,0 +1,104 @@
1
+ import { projectSelectionProperty, } from "../inspection/selectionProperty.js";
2
+ import { getElementComputedStyle } from "../runtime/domRealm.js";
3
+ import { getStateStyleValue } from "../shell/stateValue.js";
4
+ import { getActiveStyleState } from "../shell/styleState.js";
5
+ function displayIs(element, values) {
6
+ const display = getElementComputedStyle(element).display;
7
+ return values.includes(display);
8
+ }
9
+ function isFlexContainer(element) {
10
+ return displayIs(element, ["flex", "inline-flex"]);
11
+ }
12
+ function isGridContainer(element) {
13
+ return displayIs(element, ["grid", "inline-grid"]);
14
+ }
15
+ function parentDisplayIs(element, values) {
16
+ const parent = element.parentElement;
17
+ return parent ? displayIs(parent, values) : false;
18
+ }
19
+ function supportsRole(element, role) {
20
+ switch (role) {
21
+ case "flex-container":
22
+ return isFlexContainer(element);
23
+ case "flex-child":
24
+ return parentDisplayIs(element, ["flex", "inline-flex"]);
25
+ case "grid-container":
26
+ return isGridContainer(element);
27
+ case "grid-child":
28
+ return parentDisplayIs(element, ["grid", "inline-grid"]);
29
+ case "relative-position": {
30
+ const position = getStateStyleValue(element, "position", "static").trim().toLowerCase();
31
+ return position === "relative" || position === "sticky";
32
+ }
33
+ case "inset-position": {
34
+ const position = getStateStyleValue(element, "position", "static").trim().toLowerCase();
35
+ return position === "absolute" || position === "fixed";
36
+ }
37
+ }
38
+ }
39
+ /**
40
+ * Builds the group style projection used by all style editors. Computed CSS
41
+ * is the value source, while individual inspection snapshots provide authored
42
+ * and token provenance where it exists.
43
+ */
44
+ export function createStyleSelection(elements, snapshots, selectedPrimary) {
45
+ const primary = selectedPrimary && elements.some((element) => element.domElement === selectedPrimary.domElement)
46
+ ? selectedPrimary
47
+ : elements.at(-1);
48
+ if (!primary || snapshots.length !== elements.length)
49
+ return null;
50
+ const primaryIndex = elements.findIndex((element) => element.domElement === primary.domElement);
51
+ const activeState = getActiveStyleState();
52
+ const shouldUseInspection = elements.map(({ domElement }) => activeState !== "base"
53
+ || [":hover", ":active", ":focus", ":focus-visible"].some((selector) => {
54
+ try {
55
+ return domElement.matches(selector);
56
+ }
57
+ catch {
58
+ return false;
59
+ }
60
+ }));
61
+ const rowsByProperty = snapshots.map((snapshot) => new Map(snapshot.properties.map((row) => [row.property, row])));
62
+ const computedStyles = elements.map(({ domElement }) => {
63
+ try {
64
+ return getElementComputedStyle(domElement);
65
+ }
66
+ catch {
67
+ return null;
68
+ }
69
+ });
70
+ const propertyCache = new Map();
71
+ function getProperty(property) {
72
+ const cached = propertyCache.get(property);
73
+ if (cached)
74
+ return cached;
75
+ const rows = rowsByProperty.map((candidateRows) => candidateRows.get(property)
76
+ ?? (property === "background-color" ? candidateRows.get("background") : undefined)
77
+ ?? null);
78
+ const values = computedStyles.map((style, index) => {
79
+ if (shouldUseInspection[index]) {
80
+ const row = rows[index];
81
+ if (row?.resolvedValue)
82
+ return row.resolvedValue;
83
+ }
84
+ return style?.getPropertyValue(property).trim() ?? "";
85
+ });
86
+ const projected = projectSelectionProperty(property, rows, values, primaryIndex);
87
+ if (projected)
88
+ propertyCache.set(property, projected);
89
+ return projected;
90
+ }
91
+ const domElements = elements.map((element) => element.domElement);
92
+ const target = domElements.length > 1 ? domElements : primary.domElement;
93
+ return {
94
+ primary,
95
+ elements,
96
+ domElements,
97
+ target,
98
+ primaryRows: snapshots[primaryIndex]?.properties ?? [],
99
+ getProperty,
100
+ supportsRole(role) {
101
+ return domElements.every((element) => supportsRole(element, role));
102
+ },
103
+ };
104
+ }
@@ -0,0 +1,3 @@
1
+ export { createDocumentSession, createInspectorSession, createWorkspace, type DocumentSession, type InspectorHost, type InspectorSession, type Workspace, } from "./sessionFactory.js";
2
+ export { InspectorSessionProvider, useDocumentSession, useInspectorSession, useSessionContext, type InspectorSessionProviderProps, type SessionContextValue, } from "./sessionContext.js";
3
+ export type { CleanupCallback, SessionOwner } from "./lifecycle.js";
@@ -0,0 +1,2 @@
1
+ export { createDocumentSession, createInspectorSession, createWorkspace, } from "./sessionFactory.js";
2
+ export { InspectorSessionProvider, useDocumentSession, useInspectorSession, useSessionContext, } from "./sessionContext.js";
@@ -0,0 +1,22 @@
1
+ /** A callback released when its owning session is disposed. */
2
+ export type CleanupCallback = () => void;
3
+ /**
4
+ * The lifecycle surface shared by workspace and session handles.
5
+ *
6
+ * Registration after disposal is ignored and returns a no-op unregister
7
+ * function. Disposal is idempotent. Implementations dispose adopted children
8
+ * before their own callbacks.
9
+ */
10
+ export interface SessionOwner {
11
+ readonly id: string;
12
+ readonly disposed: boolean;
13
+ registerCleanup(callback: CleanupCallback): () => void;
14
+ dispose(): void;
15
+ }
16
+ export interface SessionOwnerImplementation extends SessionOwner {
17
+ adopt(child: SessionOwner): void;
18
+ }
19
+ type SessionKind = "workspace" | "inspector" | "document";
20
+ /** Creates the small lifecycle implementation used by session handles. */
21
+ export declare function createSessionOwner(kind: SessionKind): SessionOwnerImplementation;
22
+ export {};
@@ -0,0 +1,63 @@
1
+ const NOOP = () => { };
2
+ let nextOwnerId = 0;
3
+ function nextId(kind) {
4
+ nextOwnerId += 1;
5
+ return `${kind}-${nextOwnerId}`;
6
+ }
7
+ /** Creates the small lifecycle implementation used by session handles. */
8
+ export function createSessionOwner(kind) {
9
+ let disposed = false;
10
+ const children = new Set();
11
+ const callbacks = new Set();
12
+ function registerCleanup(callback) {
13
+ if (disposed)
14
+ return NOOP;
15
+ const registration = { callback };
16
+ callbacks.add(registration);
17
+ return () => {
18
+ callbacks.delete(registration);
19
+ };
20
+ }
21
+ function dispose() {
22
+ if (disposed)
23
+ return;
24
+ disposed = true;
25
+ const errors = [];
26
+ const run = (callback) => {
27
+ try {
28
+ callback();
29
+ }
30
+ catch (error) {
31
+ errors.push(error);
32
+ }
33
+ };
34
+ for (const child of children)
35
+ run(() => child.dispose());
36
+ for (const { callback } of callbacks)
37
+ run(callback);
38
+ children.clear();
39
+ callbacks.clear();
40
+ if (errors.length === 1)
41
+ throw errors[0];
42
+ if (errors.length > 1)
43
+ throw new AggregateError(errors, `Failed to dispose ${kind} owner.`);
44
+ }
45
+ return {
46
+ id: nextId(kind),
47
+ get disposed() {
48
+ return disposed;
49
+ },
50
+ registerCleanup,
51
+ adopt(child) {
52
+ if (disposed) {
53
+ child.dispose();
54
+ return;
55
+ }
56
+ if (child.disposed)
57
+ return;
58
+ children.add(child);
59
+ child.registerCleanup(() => children.delete(child));
60
+ },
61
+ dispose,
62
+ };
63
+ }
@@ -0,0 +1,21 @@
1
+ import type { ReactElement, ReactNode } from "react";
2
+ import type { DocumentSession, InspectorSession, Workspace } from "./sessionFactory.js";
3
+ /** Handles delivered to editors through React without carrying domain state. */
4
+ export interface SessionContextValue {
5
+ readonly workspace: Workspace;
6
+ readonly inspector: InspectorSession;
7
+ readonly document: DocumentSession | null;
8
+ }
9
+ export interface InspectorSessionProviderProps {
10
+ readonly inspector: InspectorSession;
11
+ readonly documentSession?: DocumentSession | null;
12
+ readonly children?: ReactNode;
13
+ }
14
+ /** Delivers the active inspector and document handles to editor descendants. */
15
+ export declare function InspectorSessionProvider({ inspector, documentSession, children, }: InspectorSessionProviderProps): ReactElement;
16
+ /** Returns all active session handles, or throws when no provider is mounted. */
17
+ export declare function useSessionContext(): SessionContextValue;
18
+ /** Returns the active mounted-inspector handle. */
19
+ export declare function useInspectorSession(): InspectorSession;
20
+ /** Returns the active inspected-document handle, when one is mounted. */
21
+ export declare function useDocumentSession(): DocumentSession | null;
@@ -0,0 +1,28 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createContext, useContext, useMemo } from "react";
3
+ const SessionContext = createContext(null);
4
+ /** Delivers the active inspector and document handles to editor descendants. */
5
+ export function InspectorSessionProvider({ inspector, documentSession = null, children, }) {
6
+ const value = useMemo(() => ({
7
+ workspace: inspector.workspace,
8
+ inspector,
9
+ document: documentSession,
10
+ }), [documentSession, inspector]);
11
+ return _jsx(SessionContext.Provider, { value: value, children: children });
12
+ }
13
+ /** Returns all active session handles, or throws when no provider is mounted. */
14
+ export function useSessionContext() {
15
+ const value = useContext(SessionContext);
16
+ if (!value) {
17
+ throw new Error("useSessionContext must be used inside InspectorSessionProvider.");
18
+ }
19
+ return value;
20
+ }
21
+ /** Returns the active mounted-inspector handle. */
22
+ export function useInspectorSession() {
23
+ return useSessionContext().inspector;
24
+ }
25
+ /** Returns the active inspected-document handle, when one is mounted. */
26
+ export function useDocumentSession() {
27
+ return useSessionContext().document;
28
+ }
@@ -0,0 +1,29 @@
1
+ import { type SessionOwner } from "./lifecycle.js";
2
+ /** The mounted DOM node that hosts an inspector session. */
3
+ export type InspectorHost = HTMLElement;
4
+ /** Resources that survive inspector remounts. */
5
+ export interface Workspace extends SessionOwner {
6
+ createInspectorSession(host: InspectorHost): InspectorSession;
7
+ createDocumentSession(doc: Document): DocumentSession;
8
+ }
9
+ /** Resources owned by one mounted inspector. */
10
+ export interface InspectorSession extends SessionOwner {
11
+ readonly host: InspectorHost;
12
+ readonly workspace: Workspace;
13
+ createDocumentSession(doc: Document): DocumentSession;
14
+ }
15
+ /** Resources and caches associated with one inspected document lifetime. */
16
+ export interface DocumentSession extends SessionOwner {
17
+ readonly document: Document;
18
+ readonly inspector: InspectorSession | null;
19
+ readonly workspace: Workspace;
20
+ }
21
+ /**
22
+ * Creates the workspace owner. A workspace owns mounted inspector sessions
23
+ * and any document sessions created directly from the workspace.
24
+ */
25
+ export declare function createWorkspace(): Workspace;
26
+ /** Creates an inspector session owned by the supplied workspace. */
27
+ export declare function createInspectorSession(workspace: Workspace, host: InspectorHost): InspectorSession;
28
+ /** Creates a document session owned by a workspace or mounted inspector. */
29
+ export declare function createDocumentSession(owner: Workspace | InspectorSession, doc: Document): DocumentSession;
@@ -0,0 +1,73 @@
1
+ import { createSessionOwner, } from "./lifecycle.js";
2
+ function createDocumentSessionFor(workspace, inspector, parent, doc) {
3
+ const owner = createSessionOwner("document");
4
+ const session = {
5
+ get id() {
6
+ return owner.id;
7
+ },
8
+ get disposed() {
9
+ return owner.disposed;
10
+ },
11
+ registerCleanup: owner.registerCleanup,
12
+ dispose: owner.dispose,
13
+ document: doc,
14
+ inspector,
15
+ workspace,
16
+ };
17
+ parent.adopt(owner);
18
+ return session;
19
+ }
20
+ function createInspectorSessionFor(workspace, parent, host) {
21
+ const owner = createSessionOwner("inspector");
22
+ let session;
23
+ session = {
24
+ get id() {
25
+ return owner.id;
26
+ },
27
+ get disposed() {
28
+ return owner.disposed;
29
+ },
30
+ registerCleanup: owner.registerCleanup,
31
+ dispose: owner.dispose,
32
+ host,
33
+ workspace,
34
+ createDocumentSession(doc) {
35
+ return createDocumentSessionFor(workspace, session, owner, doc);
36
+ },
37
+ };
38
+ parent.adopt(owner);
39
+ return session;
40
+ }
41
+ /**
42
+ * Creates the workspace owner. A workspace owns mounted inspector sessions
43
+ * and any document sessions created directly from the workspace.
44
+ */
45
+ export function createWorkspace() {
46
+ const owner = createSessionOwner("workspace");
47
+ let workspace;
48
+ workspace = {
49
+ get id() {
50
+ return owner.id;
51
+ },
52
+ get disposed() {
53
+ return owner.disposed;
54
+ },
55
+ registerCleanup: owner.registerCleanup,
56
+ dispose: owner.dispose,
57
+ createInspectorSession(host) {
58
+ return createInspectorSessionFor(workspace, owner, host);
59
+ },
60
+ createDocumentSession(doc) {
61
+ return createDocumentSessionFor(workspace, null, owner, doc);
62
+ },
63
+ };
64
+ return workspace;
65
+ }
66
+ /** Creates an inspector session owned by the supplied workspace. */
67
+ export function createInspectorSession(workspace, host) {
68
+ return workspace.createInspectorSession(host);
69
+ }
70
+ /** Creates a document session owned by a workspace or mounted inspector. */
71
+ export function createDocumentSession(owner, doc) {
72
+ return owner.createDocumentSession(doc);
73
+ }
@@ -0,0 +1,12 @@
1
+ import type { ReactElement } from "react";
2
+ import { type McpConnectionContentProps } from "../agent/McpConnectionDialog.js";
3
+ export type SettingsSection = "instructions" | "mcp" | "tokens";
4
+ export interface SettingsDialogProps extends McpConnectionContentProps {
5
+ readonly open: boolean;
6
+ readonly initialSection: SettingsSection;
7
+ readonly value: string;
8
+ readonly onValueChange: (value: string) => void;
9
+ readonly onOpenChange: (open: boolean) => void;
10
+ }
11
+ /** Provides one settings surface for prompt, MCP, and token configuration. */
12
+ export declare function SettingsDialog({ open, initialSection, value, onValueChange, onOpenChange, projectId, origin, snapshot, onConnect, onDisconnect, onCheckAgain, }: SettingsDialogProps): ReactElement;
@@ -0,0 +1,46 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useRef, useState } from "react";
3
+ import { Dialog } from "@base-ui/react/dialog";
4
+ import { IconColorSwatch, IconPlugConnected, IconSettings, IconX, } from "@tabler/icons-react";
5
+ import { useBrowserCssInspection } from "../inspection/useBrowserCssInspection.js";
6
+ import { McpConnectionContent, } from "../agent/McpConnectionDialog.js";
7
+ import { PromptSettingsFields, } from "../prompt/PromptSettingsDialog.js";
8
+ import { TokensPanel } from "../tokens/TokensPanel.js";
9
+ const SETTINGS_SECTIONS = [
10
+ {
11
+ id: "instructions",
12
+ label: "Custom instructions",
13
+ icon: _jsx(IconSettings, { size: "var(--icon-size-small)", stroke: 1.8, "aria-hidden": "true" }),
14
+ },
15
+ {
16
+ id: "mcp",
17
+ label: "MCP",
18
+ icon: _jsx(IconPlugConnected, { size: "var(--icon-size-small)", stroke: 1.8, "aria-hidden": "true" }),
19
+ },
20
+ {
21
+ id: "tokens",
22
+ label: "Tokens",
23
+ icon: _jsx(IconColorSwatch, { size: "var(--icon-size-small)", stroke: 1.8, "aria-hidden": "true" }),
24
+ },
25
+ ];
26
+ function portalContainer() {
27
+ return typeof document !== "undefined"
28
+ ? document.getElementById("nudge-ui-root")?.shadowRoot ?? document.body
29
+ : null;
30
+ }
31
+ /** Provides one settings surface for prompt, MCP, and token configuration. */
32
+ export function SettingsDialog({ open, initialSection, value, onValueChange, onOpenChange, projectId, origin, snapshot, onConnect, onDisconnect, onCheckAgain, }) {
33
+ const [activeSection, setActiveSection] = useState(initialSection);
34
+ const closeRef = useRef(null);
35
+ const instructionsRef = useRef(null);
36
+ const tokenInspection = useBrowserCssInspection(null, "base", {
37
+ includeDocumentTokens: activeSection === "tokens",
38
+ });
39
+ const tokenRows = tokenInspection.documentTokens?.tokens ?? [];
40
+ const activeDefinition = SETTINGS_SECTIONS.find((section) => section.id === activeSection) ?? SETTINGS_SECTIONS[0];
41
+ useEffect(() => {
42
+ if (open)
43
+ setActiveSection(initialSection);
44
+ }, [initialSection, open]);
45
+ return (_jsx(Dialog.Root, { open: open, onOpenChange: onOpenChange, children: _jsxs(Dialog.Portal, { container: portalContainer(), children: [_jsx(Dialog.Backdrop, { className: "settings__backdrop", "data-test": "settings-backdrop" }), _jsxs(Dialog.Popup, { className: "settings__popup", "data-test": "settings-dialog", initialFocus: closeRef, children: [_jsx(Dialog.Title, { className: "settings__visually-hidden", children: "Settings" }), _jsx(Dialog.Description, { className: "settings__visually-hidden", children: "Configure how Nudge connects to your coding agent and uses your design system." }), _jsx(Dialog.Close, { ref: closeRef, className: "icon-button icon-button--quiet settings__close", "aria-label": "Close settings", "data-test": "settings-close", type: "button", children: _jsx(IconX, { size: "var(--icon-size-small)", stroke: 1.8, "aria-hidden": "true" }) }), _jsxs("div", { className: "settings__body", children: [_jsxs("nav", { className: "settings__nav", "aria-label": "Settings sections", children: [_jsx("span", { className: "settings__nav-label", children: "Settings" }), _jsx("div", { className: "settings__nav-items", children: SETTINGS_SECTIONS.map((section) => (_jsxs("button", { className: `settings__nav-item${activeSection === section.id ? " settings__nav-item--active" : ""}`, "data-test": `settings-nav-${section.id}`, type: "button", "aria-current": activeSection === section.id ? "page" : undefined, onClick: () => setActiveSection(section.id), children: [section.icon, _jsx("span", { className: "settings__nav-item-label", children: section.label })] }, section.id))) })] }), _jsxs("main", { className: "settings__content", "data-test": "settings-content", children: [activeSection === "instructions" ? (_jsxs("section", { className: "settings__section", "data-test": "prompt-settings-dialog", "data-settings-section": "instructions", children: [_jsx("h2", { className: "settings__section-title", children: activeDefinition.label }), _jsx("p", { className: "settings__section-description", children: "These instructions are added to the end of every copied prompt." }), _jsx(PromptSettingsFields, { value: value, onChange: onValueChange, instructionsRef: instructionsRef })] })) : null, activeSection === "mcp" ? (_jsxs("section", { className: "settings__section", "data-test": "settings-section-mcp", children: [_jsx("h2", { className: "settings__section-title", children: activeDefinition.label }), _jsx("div", { "data-test": "mcp-connection-dialog", children: _jsx(McpConnectionContent, { projectId: projectId, origin: origin, snapshot: snapshot, onConnect: onConnect, onDisconnect: onDisconnect, onCheckAgain: onCheckAgain }) })] })) : null, activeSection === "tokens" ? (_jsxs("section", { className: "settings__section", "data-test": "settings-section-tokens", children: [_jsx("h2", { className: "settings__section-title", children: activeDefinition.label }), _jsx("p", { className: "settings__section-description", children: "Inspect and edit the design tokens available in this page." }), _jsx(TokensPanel, { rows: tokenRows })] })) : null] })] })] })] }) }));
46
+ }
@@ -0,0 +1,2 @@
1
+ import type { ReactElement } from "react";
2
+ export declare function AppShell(): ReactElement;
@@ -0,0 +1,9 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { InspectorShell } from "./InspectorShell.js";
3
+ import { CanvasWorkspace } from "../canvas/CanvasWorkspace.js";
4
+ import { CanvasElementOverlay } from "../canvas/CanvasElementOverlay.js";
5
+ import { useNudgeUiRuntimeConfig } from "../runtime/useRuntimeConfig.js";
6
+ export function AppShell() {
7
+ const canvasEnabled = useNudgeUiRuntimeConfig().capabilities.canvas;
8
+ return (_jsxs(_Fragment, { children: [canvasEnabled ? _jsx(CanvasWorkspace, {}) : null, canvasEnabled ? _jsx(CanvasElementOverlay, {}) : null, _jsx(InspectorShell, {})] }));
9
+ }
@@ -0,0 +1,6 @@
1
+ import type { ReactElement } from "react";
2
+ interface ChangesLogProps {
3
+ onClearSession?: () => void;
4
+ }
5
+ export declare function ChangesLog({ onClearSession }: ChangesLogProps): ReactElement | null;
6
+ export {};
@@ -0,0 +1,92 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useMemo, useSyncExternalStore } from "react";
3
+ import { IconChevronDown } from "@tabler/icons-react";
4
+ import { isElementChange, useChanges, revertChange } from "../changes/changesLog.js";
5
+ import { StaleChangeIndicator } from "../canvas/StaleChangeIndicator.js";
6
+ import { Button } from "../ui/Button.js";
7
+ import { presentChange } from "../changes/presentation.js";
8
+ import { getStructuralChanges, getStructuralChangeDiagnostics, getStructuralDiagnosticRevision, revertStructuralChange, subscribeStructuralChanges, subscribeStructuralDiagnostics, } from "../projection/structuralProjection.js";
9
+ import { getRenderedInstanceChangeDiagnostics, getRenderedInstanceDiagnosticRevision, subscribeRenderedInstanceDiagnostics, } from "../projection/renderedInstance.js";
10
+ import { getTextContentChangeDiagnostics, getTextProjectionDiagnosticRevision, subscribeTextProjectionDiagnostics, } from "../projection/textProjection.js";
11
+ function groupChanges(changes) {
12
+ const map = new Map();
13
+ for (const change of changes) {
14
+ const presentation = presentChange(change);
15
+ const key = presentation.groupKey;
16
+ let group = map.get(key);
17
+ if (!group) {
18
+ group = {
19
+ key,
20
+ label: presentation.groupLabel,
21
+ file: presentation.file,
22
+ changes: [],
23
+ };
24
+ map.set(key, group);
25
+ }
26
+ group.changes.push(change);
27
+ }
28
+ return Array.from(map.values());
29
+ }
30
+ function sourceFile(change) {
31
+ return change.target.sourceSite.src.split(":").slice(0, -2).join(":") || change.target.sourceSite.src;
32
+ }
33
+ function structuralParentLabel(change, side) {
34
+ const parent = side === "source" ? change.source.parent : change.destination.parent;
35
+ const tag = side === "source" ? change.presentation.sourceParentTag : change.presentation.destinationParentTag;
36
+ return `${parent.sourceSite.cid} (${tag})`;
37
+ }
38
+ function structuralParentIdentityKey(ref) {
39
+ const { sourceSite, locator } = ref;
40
+ return JSON.stringify([
41
+ sourceSite.cid,
42
+ sourceSite.src,
43
+ locator.occurrence,
44
+ locator.props,
45
+ locator.ariaLabel ?? null,
46
+ ]);
47
+ }
48
+ function structuralReasonLabel(reason) {
49
+ switch (reason) {
50
+ case "target": return "target address";
51
+ case "source-parent": return "source parent address";
52
+ case "destination-parent": return "destination parent address";
53
+ case "anchor": return "destination anchor";
54
+ case "illegal-destination": return "illegal destination";
55
+ case "react-override": return "React override";
56
+ }
57
+ }
58
+ function structuralDiagnosticText(diagnostic) {
59
+ return `${diagnostic.document}: ${diagnostic.status}${diagnostic.reason ? ` (${structuralReasonLabel(diagnostic.reason)})` : ""}`;
60
+ }
61
+ export function ChangesLog({ onClearSession }) {
62
+ const changes = useChanges();
63
+ const structuralChanges = useSyncExternalStore(subscribeStructuralChanges, getStructuralChanges, getStructuralChanges);
64
+ // Diagnostics arrive independently from structural state when a renderer
65
+ // resolves a snapshot or its document observer detects a reconciliation.
66
+ useSyncExternalStore(subscribeStructuralDiagnostics, getStructuralDiagnosticRevision, getStructuralDiagnosticRevision);
67
+ useSyncExternalStore(subscribeRenderedInstanceDiagnostics, getRenderedInstanceDiagnosticRevision, getRenderedInstanceDiagnosticRevision);
68
+ useSyncExternalStore(subscribeTextProjectionDiagnostics, getTextProjectionDiagnosticRevision, getTextProjectionDiagnosticRevision);
69
+ const groups = useMemo(() => groupChanges(changes), [changes]);
70
+ const total = changes.length + structuralChanges.length;
71
+ if (total === 0)
72
+ return null;
73
+ return (_jsxs(_Fragment, { children: [_jsxs("details", { className: "changes", "data-test": "changes-log", children: [_jsxs("summary", { className: "changes__title", "data-test": "changes-toggle", children: [_jsx("span", { className: "changes__title-label", children: "Changes" }), total > 0 ? _jsx("span", { className: "changes__count", children: total }) : null, _jsx(IconChevronDown, { className: "changes__toggle-icon", size: 15, stroke: 2, "aria-hidden": "true" })] }), _jsx("div", { className: "changes__content", children: groups.length === 0 && structuralChanges.length === 0 ? (_jsx("div", { className: "changes__empty", "data-test": "changes-empty", children: "No changes yet" })) : (_jsxs(_Fragment, { children: [groups.map((group) => (_jsxs("div", { className: "changes__group", "data-test": "changes-group", "data-cid": group.label, children: [_jsxs("div", { className: "changes__group-title", children: [_jsx("span", { children: group.label }), _jsx("span", { className: "changes__group-file", children: group.file })] }), group.changes.map((change, i) => {
74
+ const presentation = presentChange(change);
75
+ const instanceDiagnostics = isElementChange(change) && change.scope === "rendered-instance"
76
+ && change.instanceOverride
77
+ ? getRenderedInstanceChangeDiagnostics(change.instanceOverride.id)
78
+ : [];
79
+ const textDiagnostics = change.kind === "text-content"
80
+ ? getTextContentChangeDiagnostics(change.id)
81
+ : [];
82
+ return (_jsxs("div", { className: "changes__row", "data-test": "change-row", "data-property": presentation.property, children: [_jsx("span", { className: "changes__prop", children: presentation.propertyLabel }), _jsxs("span", { className: "changes__value", children: [_jsx("span", { className: "changes__before", children: presentation.before }), _jsx("span", { className: "changes__arrow", children: "\u2192" }), _jsx("span", { className: "changes__after", children: presentation.after })] }), presentation.scope ? (_jsx("span", { className: "changes__scope", "data-test": "change-scope", children: presentation.scope === "source-site" ? "All outputs at source site" : "This rendered item only" })) : null, presentation.evidence ? (_jsx("span", { className: "changes__evidence", "data-test": "change-evidence", children: presentation.evidence })) : null, _jsx(StaleChangeIndicator, { change: change }), instanceDiagnostics.map((diagnostic) => (_jsxs("span", { className: "changes__diagnostic", "data-test": "instance-diagnostic", "data-document": diagnostic.document, "data-status": diagnostic.status, children: [diagnostic.document, ": ", diagnostic.status] }, `${diagnostic.document}:${diagnostic.status}`))), textDiagnostics.map((diagnostic) => (_jsxs("span", { className: "changes__diagnostic", "data-test": "text-projection-diagnostic", "data-document": diagnostic.document, "data-status": diagnostic.status, children: [diagnostic.document, ": ", diagnostic.status] }, `${diagnostic.document}:${diagnostic.status}`))), _jsx(Button, { size: "compact", className: "changes__revert", "data-test": "change-revert", "data-property": presentation.property, onClick: () => revertChange(change), children: "Revert" })] }, `${group.key}\u0000${presentation.property}\u0000${i}`));
83
+ })] }, group.key))), structuralChanges.map((change) => (_jsxs("div", { className: "changes__group", "data-test": "dom-change", "data-cid": change.target.sourceSite.cid, children: [_jsxs("div", { className: "changes__group-title", children: [_jsx("span", { children: change.target.sourceSite.cid }), _jsx("span", { className: "changes__group-file", children: sourceFile(change) })] }), _jsxs("div", { className: "changes__row", "data-test": "dom-change-row", "data-action": change.kind, children: [_jsxs("span", { className: "changes__source-site", "data-test": "structural-source-site", children: ["Source site: ", change.target.sourceSite.cid] }), _jsx("span", { className: "changes__prop", children: change.kind === "move" ? "Move in DOM" : "Delete from DOM" }), _jsxs("span", { className: "changes__value", children: [_jsx("span", { className: "changes__before", children: change.kind === "move"
84
+ ? structuralParentIdentityKey(change.source.parent) === structuralParentIdentityKey(change.destination.parent)
85
+ ? `${change.presentation.sourceParentTag} position ${change.presentation.fromIndex + 1}`
86
+ : `${structuralParentLabel(change, "source")} position ${change.presentation.fromIndex + 1}`
87
+ : "Visible" }), _jsx("span", { className: "changes__arrow", children: "\u2192" }), _jsx("span", { className: "changes__after", children: change.kind === "move"
88
+ ? structuralParentIdentityKey(change.source.parent) === structuralParentIdentityKey(change.destination.parent)
89
+ ? `${change.presentation.destinationParentTag} position ${change.presentation.toIndex + 1}`
90
+ : `${structuralParentLabel(change, "destination")} position ${change.presentation.toIndex + 1}`
91
+ : "Removed" })] }), _jsx("span", { className: "changes__scope", "data-test": "structural-scope", children: "This rendered item only" }), getStructuralChangeDiagnostics(change.id).map((diagnostic) => (_jsx("span", { className: "changes__diagnostic", "data-test": "structural-diagnostic", "data-document": diagnostic.document, "data-status": diagnostic.status, "data-reason": diagnostic.reason, children: structuralDiagnosticText(diagnostic) }, `${diagnostic.document}:${diagnostic.status}:${diagnostic.reason ?? ""}`))), _jsx(Button, { size: "compact", className: "changes__revert", "data-test": "dom-change-revert", onClick: () => revertStructuralChange(change.id), children: "Revert" })] })] }, change.id)))] })) })] }), onClearSession ? (_jsx("div", { className: "changes__session-action", "data-test": "session-actions", children: _jsx(Button, { variant: "secondary", type: "button", "data-test": "clear-session", onClick: onClearSession, children: "Clear Changes" }) })) : null] }));
92
+ }
@@ -0,0 +1,9 @@
1
+ import type { ReactElement } from "react";
2
+ import { type SettingsSection } from "../settings/SettingsDialog.js";
3
+ export interface CopyPromptButtonProps {
4
+ readonly settingsOpen?: boolean;
5
+ readonly settingsSection?: SettingsSection;
6
+ readonly onOpenSettings?: (section: SettingsSection) => void;
7
+ readonly onSettingsOpenChange?: (open: boolean) => void;
8
+ }
9
+ export declare function CopyPromptButton({ settingsOpen: controlledSettingsOpen, settingsSection: controlledSettingsSection, onOpenSettings, onSettingsOpenChange, }?: CopyPromptButtonProps): ReactElement;