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,76 @@
1
+ import type { TokenEntry } from "../../css/model/index.js";
2
+ import type { ComponentChangeRecord } from "../componentSemantics/types.js";
3
+ import type { EditScope, RenderedInstanceOverride, StyleRuleContext, TextContentChangeRecord } from "./editModel.js";
4
+ /** Bounded rendered facts retained for one element without an authored source location. */
5
+ export interface RuntimeElementEvidence {
6
+ /**
7
+ * Why the location is unknown; prompts phrase their guidance accordingly.
8
+ * Omitted by legacy records, which are all runtime-created DOM.
9
+ */
10
+ reason?: "runtime-created" | "unannotated";
11
+ tagName: string;
12
+ text: string | null;
13
+ props: string | null;
14
+ ariaLabel: string | null;
15
+ }
16
+ export interface ElementChangeRecord {
17
+ kind?: "element";
18
+ cid: string;
19
+ file: string;
20
+ line: number;
21
+ /** Exact source column for static HTML; omitted by legacy React records. */
22
+ column?: number;
23
+ selector: string;
24
+ property: string;
25
+ /** CSSOM-declared source context that the inspector projection came from. */
26
+ sourceProperty?: string;
27
+ /** Best-effort CSSOM serialization; not an exact source-text quote. */
28
+ sourceAuthoredValue?: string;
29
+ oldToken: TokenEntry | null;
30
+ newToken: TokenEntry | null;
31
+ rawValue?: string;
32
+ oldRawValue?: string;
33
+ source: {
34
+ file: string;
35
+ line: number;
36
+ component: string;
37
+ };
38
+ /** Present when the selected element has a document-local runtime identity. */
39
+ runtimeEvidence?: RuntimeElementEvidence;
40
+ scope?: EditScope;
41
+ /** Durable, controller-owned target for one rendered output. */
42
+ instanceOverride?: RenderedInstanceOverride;
43
+ state?: "base" | "hover" | "active" | "focus" | "focus-visible" | "disabled";
44
+ }
45
+ export interface TokenChangeRecord {
46
+ kind: "token";
47
+ tokenName: string;
48
+ file: string;
49
+ line: number;
50
+ selector: string;
51
+ property: string;
52
+ rawValue: string;
53
+ oldRawValue: string;
54
+ important: boolean;
55
+ context: StyleRuleContext;
56
+ contextLabel: string;
57
+ source: {
58
+ file: string;
59
+ line: number;
60
+ component: string;
61
+ };
62
+ cid?: undefined;
63
+ oldToken?: null;
64
+ newToken?: null;
65
+ scope?: undefined;
66
+ }
67
+ export type ChangeRecord = ElementChangeRecord | TokenChangeRecord | ComponentChangeRecord | TextContentChangeRecord;
68
+ export type PreviewableChangeRecord = ElementChangeRecord | TokenChangeRecord;
69
+ export declare function isTokenChange(change: ChangeRecord): change is TokenChangeRecord;
70
+ export declare function isComponentChange(change: ChangeRecord): change is ComponentChangeRecord;
71
+ export declare function isTextContentChange(change: ChangeRecord): change is TextContentChangeRecord;
72
+ export declare function isElementChange(change: ChangeRecord): change is ElementChangeRecord;
73
+ export declare function isPreviewableChange(change: ChangeRecord): change is PreviewableChangeRecord;
74
+ export type { ComponentChangeRecord } from "../componentSemantics/types.js";
75
+ export type { TextBindingEvidence, TextContentChangeRecord, TextProjectionScope, TextProjectionSourceSite, TextProjectionTarget, } from "./editModel.js";
76
+ export { isTextContentChangeListValue, isTextContentChangeValue, isTextProjectionTargetValue, } from "./editModel.js";
@@ -0,0 +1,16 @@
1
+ export function isTokenChange(change) {
2
+ return change.kind === "token";
3
+ }
4
+ export function isComponentChange(change) {
5
+ return change.kind === "component-prop";
6
+ }
7
+ export function isTextContentChange(change) {
8
+ return change.kind === "text-content";
9
+ }
10
+ export function isElementChange(change) {
11
+ return !isTokenChange(change) && !isComponentChange(change) && !isTextContentChange(change);
12
+ }
13
+ export function isPreviewableChange(change) {
14
+ return isElementChange(change) || isTokenChange(change);
15
+ }
16
+ export { isTextContentChangeListValue, isTextContentChangeValue, isTextProjectionTargetValue, } from "./editModel.js";
@@ -0,0 +1,43 @@
1
+ import type { ChangeRecord } from "./types.js";
2
+ import type { StructuralChange } from "./structuralTypes.js";
3
+ export interface WorkspaceContents {
4
+ readonly changes: readonly ChangeRecord[];
5
+ readonly structuralChanges: readonly StructuralChange[];
6
+ }
7
+ export interface WorkspaceChangesSnapshot extends WorkspaceContents {
8
+ readonly revision: number;
9
+ readonly canUndo: boolean;
10
+ readonly canRedo: boolean;
11
+ }
12
+ export type WorkspaceProjector = (snapshot: WorkspaceChangesSnapshot) => void;
13
+ export type CommitResult = "applied" | "unchanged" | "blocked";
14
+ export interface WorkspaceChangeStore {
15
+ getSnapshot(): WorkspaceChangesSnapshot;
16
+ subscribe(listener: () => void): () => void;
17
+ commitChangeRecords(incoming: readonly ChangeRecord[]): CommitResult;
18
+ revertChangeRecord(change: ChangeRecord): boolean;
19
+ discardChangeRecords(target: {
20
+ kind: "selector";
21
+ selector: string;
22
+ } | {
23
+ kind: "instance-override";
24
+ id: string;
25
+ }): boolean;
26
+ commitStructuralChange(change: StructuralChange): boolean;
27
+ revertStructuralChangeRecord(changeId: string): boolean;
28
+ reconcileWorkspaceChanges(verifiedKeys: ReadonlySet<string>, verifiedStructuralIds: ReadonlySet<string>): number;
29
+ undoWorkspaceChange(): boolean;
30
+ redoWorkspaceChange(): boolean;
31
+ restoreWorkspaceChanges(next: WorkspaceContents): void;
32
+ clearWorkspaceChanges(): void;
33
+ }
34
+ export declare const workspaceChangeStore: WorkspaceChangeStore;
35
+ /** Compatibility accessors retained for callers that have not adopted the store seam. */
36
+ export declare function getWorkspaceChanges(): WorkspaceChangesSnapshot;
37
+ export declare function subscribeWorkspaceChanges(listener: () => void): () => void;
38
+ export declare function commitChangeRecords(incoming: readonly ChangeRecord[], project: WorkspaceProjector): CommitResult;
39
+ export declare function commitStructuralChange(change: StructuralChange, project: WorkspaceProjector): boolean;
40
+ export declare function undoWorkspaceChange(project: WorkspaceProjector): boolean;
41
+ export declare function redoWorkspaceChange(project: WorkspaceProjector): boolean;
42
+ export declare function restoreWorkspaceChanges(next: WorkspaceContents, project: WorkspaceProjector): void;
43
+ export declare function resetWorkspaceChanges(): void;
@@ -0,0 +1,239 @@
1
+ import { canWriteWorkspace } from "../canvas/workspaceLease.js";
2
+ import { changeKey, mergeChange, sameEffectiveChanges, selectorForChange } from "./model.js";
3
+ import { isElementChange } from "./types.js";
4
+ let contents = { changes: [], structuralChanges: [] };
5
+ let revision = 0;
6
+ let undoStack = [];
7
+ let redoStack = [];
8
+ let snapshot = createSnapshot();
9
+ const listeners = new Set();
10
+ function cloneContents(value) {
11
+ return {
12
+ changes: value.changes.map((change) => cloneValue(change)),
13
+ structuralChanges: value.structuralChanges.map((change) => cloneValue(change)),
14
+ };
15
+ }
16
+ function cloneValue(value, key) {
17
+ // Token entries belong to the shared catalog. Preserve their identity so
18
+ // callers can continue to correlate a change with its catalog entry.
19
+ if (key === "oldToken" || key === "newToken")
20
+ return value;
21
+ if (Array.isArray(value))
22
+ return value.map((item) => cloneValue(item));
23
+ if (value !== null && typeof value === "object") {
24
+ const clone = {};
25
+ for (const [key, child] of Object.entries(value)) {
26
+ clone[key] = cloneValue(child, key);
27
+ }
28
+ return clone;
29
+ }
30
+ return value;
31
+ }
32
+ function freezeValue(value, key) {
33
+ if (key === "oldToken" || key === "newToken")
34
+ return value;
35
+ if (value !== null && typeof value === "object" && !Object.isFrozen(value)) {
36
+ for (const [childKey, child] of Object.entries(value))
37
+ freezeValue(child, childKey);
38
+ Object.freeze(value);
39
+ }
40
+ return value;
41
+ }
42
+ function createSnapshot() {
43
+ const snapshotContents = freezeValue(cloneContents(contents));
44
+ return Object.freeze({
45
+ revision,
46
+ changes: snapshotContents.changes,
47
+ structuralChanges: snapshotContents.structuralChanges,
48
+ canUndo: undoStack.length > 0,
49
+ canRedo: redoStack.length > 0,
50
+ });
51
+ }
52
+ function publish() {
53
+ revision += 1;
54
+ snapshot = createSnapshot();
55
+ for (const listener of listeners)
56
+ listener();
57
+ }
58
+ function commit(next) {
59
+ if (!canWriteWorkspace())
60
+ return false;
61
+ const before = cloneContents(contents);
62
+ contents = cloneContents(next);
63
+ undoStack.push({ before, after: cloneContents(contents) });
64
+ redoStack = [];
65
+ publish();
66
+ return true;
67
+ }
68
+ function getSnapshot() {
69
+ return snapshot;
70
+ }
71
+ function subscribe(listener) {
72
+ listeners.add(listener);
73
+ return () => listeners.delete(listener);
74
+ }
75
+ function commitChangeRecordsImpl(incoming) {
76
+ if (incoming.length === 0)
77
+ return "unchanged";
78
+ const nextChanges = incoming.reduce((current, change) => mergeChange(current, change), [...contents.changes]);
79
+ if (sameEffectiveChanges([...contents.changes], nextChanges))
80
+ return "unchanged";
81
+ return commit({ ...contents, changes: nextChanges }) ? "applied" : "blocked";
82
+ }
83
+ function revertChangeRecordImpl(change) {
84
+ const key = changeKey(change);
85
+ const changes = contents.changes.filter((candidate) => changeKey(candidate) !== key);
86
+ if (changes.length === contents.changes.length)
87
+ return false;
88
+ return commit({ ...contents, changes });
89
+ }
90
+ function discardChangeRecordsImpl(target) {
91
+ const changes = contents.changes.filter((change) => target.kind === "selector"
92
+ ? selectorForChange(change) !== target.selector
93
+ : !isElementChange(change) || change.instanceOverride?.id !== target.id);
94
+ if (changes.length === contents.changes.length)
95
+ return false;
96
+ return commit({ ...contents, changes });
97
+ }
98
+ function commitStructuralChangeImpl(change) {
99
+ if (contents.structuralChanges.some((candidate) => candidate.id === change.id))
100
+ return false;
101
+ return commit({
102
+ ...contents,
103
+ structuralChanges: [...contents.structuralChanges, change],
104
+ });
105
+ }
106
+ function revertStructuralChangeRecordImpl(changeId) {
107
+ const structuralChanges = contents.structuralChanges.filter((change) => change.id !== changeId);
108
+ if (structuralChanges.length === contents.structuralChanges.length)
109
+ return false;
110
+ return commit({ ...contents, structuralChanges });
111
+ }
112
+ function reconcileWorkspaceChangesImpl(verifiedKeys, verifiedStructuralIds) {
113
+ if (!canWriteWorkspace())
114
+ return 0;
115
+ const retain = (value) => ({
116
+ changes: value.changes.filter((change) => !verifiedKeys.has(changeKey(change))),
117
+ structuralChanges: value.structuralChanges.filter((change) => !verifiedStructuralIds.has(change.id)),
118
+ });
119
+ const next = retain(contents);
120
+ const removed = contents.changes.length - next.changes.length
121
+ + contents.structuralChanges.length - next.structuralChanges.length;
122
+ if (removed === 0)
123
+ return 0;
124
+ contents = next;
125
+ const prune = (entries) => entries
126
+ .map((entry) => ({ before: retain(entry.before), after: retain(entry.after) }))
127
+ .filter((entry) => !sameWorkspaceContents(entry.before, entry.after));
128
+ undoStack = prune(undoStack);
129
+ redoStack = prune(redoStack);
130
+ publish();
131
+ return removed;
132
+ }
133
+ function sameWorkspaceContents(left, right) {
134
+ return sameEffectiveChanges([...left.changes], [...right.changes])
135
+ && sameStructuralChanges(left.structuralChanges, right.structuralChanges);
136
+ }
137
+ function sameStructuralChanges(left, right) {
138
+ // Structural intent is an ordered list of small, immutable JSON records.
139
+ // Equality must include operation order and the complete target payload.
140
+ return JSON.stringify(left) === JSON.stringify(right);
141
+ }
142
+ function undoWorkspaceChangeImpl() {
143
+ if (!canWriteWorkspace())
144
+ return false;
145
+ const entry = undoStack.at(-1);
146
+ if (!entry)
147
+ return false;
148
+ undoStack.pop();
149
+ contents = cloneContents(entry.before);
150
+ redoStack.push(entry);
151
+ publish();
152
+ return true;
153
+ }
154
+ function redoWorkspaceChangeImpl() {
155
+ if (!canWriteWorkspace())
156
+ return false;
157
+ const entry = redoStack.at(-1);
158
+ if (!entry)
159
+ return false;
160
+ redoStack.pop();
161
+ contents = cloneContents(entry.after);
162
+ undoStack.push(entry);
163
+ publish();
164
+ return true;
165
+ }
166
+ function restoreWorkspaceChangesImpl(next) {
167
+ contents = cloneContents(next);
168
+ undoStack = [];
169
+ redoStack = [];
170
+ publish();
171
+ }
172
+ function clearWorkspaceChangesImpl() {
173
+ contents = { changes: [], structuralChanges: [] };
174
+ undoStack = [];
175
+ redoStack = [];
176
+ publish();
177
+ }
178
+ /** Resets controller state for teardown and tests without requiring a lease. */
179
+ function resetWorkspaceChangesImpl() {
180
+ contents = { changes: [], structuralChanges: [] };
181
+ undoStack = [];
182
+ redoStack = [];
183
+ revision = 0;
184
+ snapshot = createSnapshot();
185
+ for (const listener of listeners)
186
+ listener();
187
+ }
188
+ export const workspaceChangeStore = {
189
+ getSnapshot,
190
+ subscribe,
191
+ commitChangeRecords: commitChangeRecordsImpl,
192
+ revertChangeRecord: revertChangeRecordImpl,
193
+ discardChangeRecords: discardChangeRecordsImpl,
194
+ commitStructuralChange: commitStructuralChangeImpl,
195
+ revertStructuralChangeRecord: revertStructuralChangeRecordImpl,
196
+ reconcileWorkspaceChanges: reconcileWorkspaceChangesImpl,
197
+ undoWorkspaceChange: undoWorkspaceChangeImpl,
198
+ redoWorkspaceChange: redoWorkspaceChangeImpl,
199
+ restoreWorkspaceChanges: restoreWorkspaceChangesImpl,
200
+ clearWorkspaceChanges: clearWorkspaceChangesImpl,
201
+ };
202
+ /** Compatibility accessors retained for callers that have not adopted the store seam. */
203
+ export function getWorkspaceChanges() {
204
+ return workspaceChangeStore.getSnapshot();
205
+ }
206
+ export function subscribeWorkspaceChanges(listener) {
207
+ return workspaceChangeStore.subscribe(listener);
208
+ }
209
+ export function commitChangeRecords(incoming, project) {
210
+ const result = workspaceChangeStore.commitChangeRecords(incoming);
211
+ if (result === "applied")
212
+ project(workspaceChangeStore.getSnapshot());
213
+ return result;
214
+ }
215
+ export function commitStructuralChange(change, project) {
216
+ const changed = workspaceChangeStore.commitStructuralChange(change);
217
+ if (changed)
218
+ project(workspaceChangeStore.getSnapshot());
219
+ return changed;
220
+ }
221
+ export function undoWorkspaceChange(project) {
222
+ const changed = workspaceChangeStore.undoWorkspaceChange();
223
+ if (changed)
224
+ project(workspaceChangeStore.getSnapshot());
225
+ return changed;
226
+ }
227
+ export function redoWorkspaceChange(project) {
228
+ const changed = workspaceChangeStore.redoWorkspaceChange();
229
+ if (changed)
230
+ project(workspaceChangeStore.getSnapshot());
231
+ return changed;
232
+ }
233
+ export function restoreWorkspaceChanges(next, project) {
234
+ workspaceChangeStore.restoreWorkspaceChanges(next);
235
+ project(workspaceChangeStore.getSnapshot());
236
+ }
237
+ export function resetWorkspaceChanges() {
238
+ resetWorkspaceChangesImpl();
239
+ }
@@ -0,0 +1,24 @@
1
+ import { type NudgeUiRuntimeConfig } from "./runtime/runtimeConfig.js";
2
+ export type { NudgeUiRuntimeConfig } from "./runtime/runtimeConfig.js";
3
+ export { detectStylingSystem } from "./runtime/runtimeConfig.js";
4
+ /** Version of the host-to-inspector runtime manifest Interface. */
5
+ export declare const NUDGE_UI_CLIENT_MANIFEST_VERSION = 1;
6
+ /** Runtime document consumed by the self-contained inspector client. */
7
+ export interface NudgeUiClientManifest {
8
+ readonly version: typeof NUDGE_UI_CLIENT_MANIFEST_VERSION;
9
+ readonly revision: number;
10
+ readonly runtime: NudgeUiRuntimeConfig;
11
+ /** Optional document preparation requested by the host Adapter. */
12
+ readonly document?: {
13
+ readonly runtimeIdentity?: "static-html";
14
+ readonly stylesheetOrder?: "browser";
15
+ };
16
+ /** Optional development reload transport owned by the host Adapter. */
17
+ readonly reload?: {
18
+ readonly endpoint: string;
19
+ readonly strategy: "refresh-manifest" | "reload-document";
20
+ readonly events?: readonly string[];
21
+ };
22
+ }
23
+ /** Parses and normalizes an external manifest before it replaces inspector state. */
24
+ export declare function parseNudgeUiClientManifest(value: unknown): NudgeUiClientManifest | null;
@@ -0,0 +1,69 @@
1
+ import { normalizeNudgeUiRuntimeConfig, } from "./runtime/runtimeConfig.js";
2
+ export { detectStylingSystem } from "./runtime/runtimeConfig.js";
3
+ /** Version of the host-to-inspector runtime manifest Interface. */
4
+ export const NUDGE_UI_CLIENT_MANIFEST_VERSION = 1;
5
+ /** Parses and normalizes an external manifest before it replaces inspector state. */
6
+ export function parseNudgeUiClientManifest(
7
+ // JSON is untrusted at this I/O boundary and is narrowed below.
8
+ // oxlint-disable-next-line anti-slop/no-unknown-parameters
9
+ value) {
10
+ if (!isRecord(value)
11
+ || value.version !== NUDGE_UI_CLIENT_MANIFEST_VERSION
12
+ || typeof value.revision !== "number"
13
+ || !Number.isInteger(value.revision)
14
+ || value.revision < 0
15
+ || !isDocumentOptions(value.document)
16
+ || !isReloadOptions(value.reload))
17
+ return null;
18
+ try {
19
+ return {
20
+ version: NUDGE_UI_CLIENT_MANIFEST_VERSION,
21
+ revision: value.revision,
22
+ runtime: normalizeNudgeUiRuntimeConfig(value.runtime),
23
+ ...(value.document === undefined ? {} : { document: value.document }),
24
+ ...(value.reload === undefined ? {} : { reload: value.reload }),
25
+ };
26
+ }
27
+ catch {
28
+ return null;
29
+ }
30
+ }
31
+ function isDocumentOptions(
32
+ // Optional manifest capability is parsed before use.
33
+ // oxlint-disable-next-line anti-slop/no-unknown-parameters
34
+ value) {
35
+ if (value === undefined)
36
+ return true;
37
+ if (typeof value !== "object" || value === null || Array.isArray(value))
38
+ return false;
39
+ // SAFETY: the object check above makes reading optional candidate fields safe.
40
+ const candidate = value;
41
+ return (candidate.runtimeIdentity === undefined || candidate.runtimeIdentity === "static-html")
42
+ && (candidate.stylesheetOrder === undefined || candidate.stylesheetOrder === "browser");
43
+ }
44
+ function isReloadOptions(
45
+ // Optional manifest capability is parsed before use.
46
+ // oxlint-disable-next-line anti-slop/no-unknown-parameters
47
+ value) {
48
+ if (value === undefined)
49
+ return true;
50
+ if (typeof value !== "object" || value === null || Array.isArray(value))
51
+ return false;
52
+ // SAFETY: the object check above makes reading optional candidate fields safe.
53
+ const candidate = value;
54
+ if (typeof candidate.endpoint !== "string"
55
+ || !candidate.endpoint.startsWith("/__nudge_ui__/")
56
+ || (candidate.strategy !== "refresh-manifest" && candidate.strategy !== "reload-document")) {
57
+ return false;
58
+ }
59
+ return candidate.events === undefined
60
+ || (Array.isArray(candidate.events)
61
+ && candidate.events.length > 0
62
+ && candidate.events.every((event) => typeof event === "string" && event.trim().length > 0));
63
+ }
64
+ function isRecord(
65
+ // This is the first structural parser for the untrusted JSON value.
66
+ // oxlint-disable-next-line anti-slop/no-unknown-parameters
67
+ value) {
68
+ return typeof value === "object" && value !== null && !Array.isArray(value);
69
+ }
@@ -0,0 +1,5 @@
1
+ import type { ReactElement } from "react";
2
+ import type { SelectedElement } from "../selection/selectionStore.js";
3
+ export declare function ComponentPropsSection({ selected }: {
4
+ selected: SelectedElement;
5
+ }): ReactElement | null;
@@ -0,0 +1,44 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { isComponentChange, useChanges } from "../changes/changesLog.js";
3
+ import { FieldRow } from "../ui/FieldRow.js";
4
+ import { Select } from "../ui/Select.js";
5
+ import { SegmentedControl } from "../ui/SegmentedControl.js";
6
+ import { editableComponentTargets } from "./index.js";
7
+ import { setComponentProp } from "./changeAction.js";
8
+ function pendingValue(target, prop, changes) {
9
+ const pending = changes.find((change) => isComponentChange(change)
10
+ && change.target.framework === target.framework
11
+ && change.target.callsiteId === target.meta.callsiteId
12
+ && change.property === prop.name);
13
+ if (pending && isComponentChange(pending))
14
+ return pending.after;
15
+ const current = target.props[prop.name];
16
+ return typeof current === "string" || typeof current === "number" || typeof current === "boolean"
17
+ ? current
18
+ : undefined;
19
+ }
20
+ function valueFromOption(prop, serialized) {
21
+ return prop.options.find((option) => String(option) === serialized) ?? serialized;
22
+ }
23
+ export function ComponentPropsSection({ selected }) {
24
+ const changes = useChanges();
25
+ const target = editableComponentTargets(selected.componentTargets)[0];
26
+ if (!target)
27
+ return null;
28
+ // Text contracts are owned by the scoped inline editor in this slice. A
29
+ // panel input would turn every keystroke into an independent history entry;
30
+ // a single-commit panel transaction belongs to a later interaction design.
31
+ const visibleProps = target.contract.props.filter((prop) => prop.control !== "text" && pendingValue(target, prop, changes) !== undefined);
32
+ if (visibleProps.length === 0)
33
+ return null;
34
+ return (_jsxs("section", { className: "editor component-props", "data-test": "component-props-section", "data-component": target.meta.componentName, children: [_jsx("div", { className: "editor__title-row", children: _jsx("div", { className: "editor__title", children: target.meta.componentName }) }), visibleProps.map((prop) => {
35
+ const current = pendingValue(target, prop, changes);
36
+ return (_jsx(FieldRow, { label: prop.name, property: prop.name, "data-test": "component-prop", children: prop.control === "boolean" ? (_jsx(SegmentedControl, { "aria-label": `${prop.name} component prop`, "data-test": "component-prop-boolean", "data-property": prop.name, value: current ? "true" : "false", options: [
37
+ { value: "false", label: "Off" },
38
+ { value: "true", label: "On" },
39
+ ], onChange: (value) => setComponentProp(target, prop, value === "true") })) : (_jsx(Select, { "data-test": `component-prop-${prop.name}`, value: String(current), options: prop.options.map((option) => ({
40
+ value: String(option),
41
+ label: String(option),
42
+ })), onValueChange: (value) => setComponentProp(target, prop, valueFromOption(prop, value)) })) }, prop.name));
43
+ })] }));
44
+ }
@@ -0,0 +1,11 @@
1
+ import type { ComponentOverride, ComponentRuntimeAdapter, EditableComponentTarget, RuntimeComponentTarget } from "./types.js";
2
+ /** Register a framework adapter without coupling semantic resolution to React. */
3
+ export declare function registerComponentRuntimeAdapter(adapter: ComponentRuntimeAdapter): () => void;
4
+ export declare function inspectComponentTargets(element: HTMLElement): RuntimeComponentTarget[];
5
+ /**
6
+ * Resolve multiplicity through the owning runtime Adapter. The inspector does
7
+ * not infer it from DOM order or retain a React fiber as durable identity.
8
+ */
9
+ export declare function callsiteMultiplicity(target: RuntimeComponentTarget): number | null;
10
+ export declare function editableComponentTargets(targets: RuntimeComponentTarget[]): EditableComponentTarget[];
11
+ export declare function replaceComponentOverrideProjection(overrides: ComponentOverride[]): void;
@@ -0,0 +1,75 @@
1
+ import { getNudgeUiRuntimeConfig } from "../runtime/runtimeConfig.js";
2
+ import { copyComponentOverrides, copyRuntimeTarget, getHostRuntimeAdapters, registerHostRuntimeAdapter, replaceHostRuntimeAdapterOverrides, } from "./runtimeBridge.js";
3
+ const diagnosedAdapters = new WeakSet();
4
+ function enabledRuntimeAdapters() {
5
+ if (!getNudgeUiRuntimeConfig().capabilities.componentSemantics)
6
+ return [];
7
+ return [...getHostRuntimeAdapters()];
8
+ }
9
+ /** Register a framework adapter without coupling semantic resolution to React. */
10
+ export function registerComponentRuntimeAdapter(adapter) {
11
+ return registerHostRuntimeAdapter(adapter);
12
+ }
13
+ export function inspectComponentTargets(element) {
14
+ const targets = [];
15
+ for (const adapter of enabledRuntimeAdapters()) {
16
+ let inspected;
17
+ try {
18
+ inspected = adapter.inspect(element);
19
+ if (!Array.isArray(inspected)) {
20
+ throw new TypeError("A host runtime Adapter returned a non-array inspection result.");
21
+ }
22
+ }
23
+ catch (error) {
24
+ diagnoseAdapter(adapter, error instanceof Error ? error.message : String(error));
25
+ continue;
26
+ }
27
+ for (const value of inspected) {
28
+ try {
29
+ const target = copyRuntimeTarget(value);
30
+ targets.push({
31
+ ...target,
32
+ mountedCount: target.mountedCount
33
+ ?? adapter.getCallsiteMultiplicity?.(target.meta.callsiteId)
34
+ ?? undefined,
35
+ });
36
+ }
37
+ catch (error) {
38
+ diagnoseAdapter(adapter, error instanceof Error ? error.message : String(error));
39
+ }
40
+ }
41
+ }
42
+ return targets;
43
+ }
44
+ function diagnoseAdapter(adapter, detail) {
45
+ if (diagnosedAdapters.has(adapter))
46
+ return;
47
+ diagnosedAdapters.add(adapter);
48
+ console.warn(`[nudge-ui] Ignored invalid ${adapter.framework} Adapter inspection: ${detail}`);
49
+ }
50
+ /**
51
+ * Resolve multiplicity through the owning runtime Adapter. The inspector does
52
+ * not infer it from DOM order or retain a React fiber as durable identity.
53
+ */
54
+ export function callsiteMultiplicity(target) {
55
+ return target.mountedCount === undefined ? null : target.mountedCount;
56
+ }
57
+ export function editableComponentTargets(targets) {
58
+ if (!getNudgeUiRuntimeConfig().capabilities.componentSemantics)
59
+ return [];
60
+ const { componentContracts } = getNudgeUiRuntimeConfig();
61
+ return targets.flatMap((target) => {
62
+ const exact = componentContracts.filter((contract) => contract.componentId === target.meta.componentId);
63
+ const matches = exact.length > 0
64
+ ? exact
65
+ : componentContracts.filter((contract) => contract.name === target.meta.componentName);
66
+ if (matches.length !== 1)
67
+ return [];
68
+ return [{ ...target, contract: matches[0] }];
69
+ });
70
+ }
71
+ export function replaceComponentOverrideProjection(overrides) {
72
+ if (!getNudgeUiRuntimeConfig().capabilities.componentSemantics)
73
+ return;
74
+ replaceHostRuntimeAdapterOverrides(copyComponentOverrides(overrides));
75
+ }
@@ -0,0 +1,2 @@
1
+ import type { ComponentPropBaseline } from "./types.js";
2
+ export declare function componentPropBaseline(value: unknown): ComponentPropBaseline;
@@ -0,0 +1,10 @@
1
+ function isPropValue(value) {
2
+ return typeof value === "string"
3
+ || typeof value === "number"
4
+ || typeof value === "boolean";
5
+ }
6
+ export function componentPropBaseline(value) {
7
+ return isPropValue(value)
8
+ ? { kind: "value", value }
9
+ : { kind: "default" };
10
+ }
@@ -0,0 +1,3 @@
1
+ import type { ComponentPropContract, ComponentPropValue, EditableComponentTarget } from "./types.js";
2
+ export { createComponentPropChange } from "./changeModel.js";
3
+ export declare function setComponentProp(target: EditableComponentTarget, prop: ComponentPropContract, value: ComponentPropValue): void;
@@ -0,0 +1,6 @@
1
+ import { appendChange } from "../changes/changesLog.js";
2
+ import { createComponentPropChange } from "./changeModel.js";
3
+ export { createComponentPropChange } from "./changeModel.js";
4
+ export function setComponentProp(target, prop, value) {
5
+ appendChange(createComponentPropChange(target, prop, value));
6
+ }
@@ -0,0 +1,8 @@
1
+ import type { ComponentChangeRecord, ComponentOverride, ComponentPropBaseline, ComponentPropContract, ComponentPropValue, ComponentChangeScope, ComponentInvocationEvidence, EditableComponentTarget } from "./types.js";
2
+ export declare function formatComponentPropValue(value: ComponentPropValue): string;
3
+ export declare function formatComponentPropBaseline(baseline: ComponentPropBaseline): string;
4
+ export declare function createComponentPropChange(target: EditableComponentTarget, prop: ComponentPropContract, after: ComponentPropValue, options?: {
5
+ scope?: ComponentChangeScope;
6
+ evidence?: ComponentInvocationEvidence;
7
+ }): ComponentChangeRecord;
8
+ export declare function componentChangeToOverride(change: ComponentChangeRecord): ComponentOverride | null;