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,60 @@
1
+ import { componentPropBaseline } from "./boundaries.js";
2
+ export function formatComponentPropValue(value) {
3
+ return String(value);
4
+ }
5
+ export function formatComponentPropBaseline(baseline) {
6
+ return baseline.kind === "default"
7
+ ? "(default)"
8
+ : formatComponentPropValue(baseline.value);
9
+ }
10
+ export function createComponentPropChange(target, prop, after, options = {}) {
11
+ const authoredAs = target.meta.authoredProps[prop.name]
12
+ ?? (target.meta.authoredProps["..."] ? "spread" : "default");
13
+ return {
14
+ kind: "component-prop",
15
+ target: {
16
+ framework: target.framework,
17
+ componentId: target.contract.componentId,
18
+ callsiteId: target.meta.callsiteId,
19
+ componentName: target.meta.componentName,
20
+ file: target.meta.file,
21
+ line: target.meta.line,
22
+ column: target.meta.column,
23
+ },
24
+ property: prop.name,
25
+ before: componentPropBaseline(target.props[prop.name]),
26
+ after,
27
+ authoredAs,
28
+ scope: options.scope ?? "source-site",
29
+ evidence: options.evidence,
30
+ };
31
+ }
32
+ export function componentChangeToOverride(change) {
33
+ if (change.authoredAs !== "literal"
34
+ && change.authoredAs !== "expression"
35
+ && change.authoredAs !== "spread"
36
+ && change.authoredAs !== "default")
37
+ return null;
38
+ const mountedCount = change.evidence?.mountedCount;
39
+ if (mountedCount !== undefined
40
+ && (!Number.isSafeInteger(mountedCount) || mountedCount < 0))
41
+ return null;
42
+ // A rendered-instance semantic record is intentionally never projected as a
43
+ // callsite override. Repeated expression/spread props are equally unsafe to
44
+ // broaden, even when a malformed/internal record asks for source-site scope.
45
+ // Repeated literals remain explicitly source-editable.
46
+ if (mountedCount !== undefined && mountedCount > 1) {
47
+ if (change.scope !== "source-site")
48
+ return null;
49
+ if (change.authoredAs === "expression" || change.authoredAs === "spread")
50
+ return null;
51
+ }
52
+ if (change.scope === "rendered-instance")
53
+ return null;
54
+ return {
55
+ framework: change.target.framework,
56
+ callsiteId: change.target.callsiteId,
57
+ prop: change.property,
58
+ value: change.after,
59
+ };
60
+ }
@@ -0,0 +1,4 @@
1
+ export { editableComponentTargets, inspectComponentTargets, registerComponentRuntimeAdapter, replaceComponentOverrideProjection, } from "./adapterRegistry.js";
2
+ export type { AuthoredPropKind, ComponentChangeRecord, ComponentChangeTarget, ComponentContract, ComponentFramework, ComponentInvocationMeta, ComponentOverride, ComponentPropBaseline, ComponentPropContract, ComponentPropValue, EditableComponentTarget, RuntimeComponentTarget, } from "./types.js";
3
+ export { resolveTextBinding, VISIBLE_TEXT_PROP_PRIORITY, } from "./textBinding.js";
4
+ export type { TextBindingCandidate, TextEditBinding, TextEditRejection, TextEditRejectionReason, } from "./textBinding.js";
@@ -0,0 +1,2 @@
1
+ export { editableComponentTargets, inspectComponentTargets, registerComponentRuntimeAdapter, replaceComponentOverrideProjection, } from "./adapterRegistry.js";
2
+ export { resolveTextBinding, VISIBLE_TEXT_PROP_PRIORITY, } from "./textBinding.js";
@@ -0,0 +1,10 @@
1
+ import { type ReactElement } from "react";
2
+ import type { ComponentInvocationMeta, ComponentOverride, ComponentRuntimeAdapter, RuntimeComponentTarget } from "./types.js";
3
+ /** Returns null when this runtime has no mounted boundary for the callsite. */
4
+ export declare function getReactCallsiteMultiplicity(callsiteId: string): number | null;
5
+ /** Test/runtime teardown hook; canonical changes never depend on this state. */
6
+ export declare function resetReactComponentRuntime(): void;
7
+ export declare function instrumentReactComponent(element: ReactElement<Record<string, unknown>>, meta: ComponentInvocationMeta): ReactElement;
8
+ export declare function inspectReactComponentTargets(element: HTMLElement): RuntimeComponentTarget[];
9
+ export declare function replaceReactComponentOverrides(overrides: ComponentOverride[]): void;
10
+ export declare const reactComponentRuntimeAdapter: ComponentRuntimeAdapter;
@@ -0,0 +1,186 @@
1
+ import { cloneElement, createElement, forwardRef, useEffect, useMemo, useSyncExternalStore, version as reactVersion, } from "react";
2
+ import { registerHostRuntimeAdapter } from "./runtimeBridge.js";
3
+ import { getNudgeUiRuntimeConfig } from "../runtime/runtimeConfig.js";
4
+ const BOUNDARY_MARKER = Symbol.for("nudge-ui.react-component-boundary");
5
+ const EMPTY_OVERRIDE = Object.freeze({});
6
+ const REACT_MAJOR_VERSION = Number.parseInt(reactVersion, 10);
7
+ let overridesByCallsite = new Map();
8
+ const listeners = new Set();
9
+ /**
10
+ * Mounted invocation accounting is runtime state, not canonical identity. A
11
+ * boundary registers by its stable transformed callsite and unregisters on
12
+ * unmount. This survives rerenders and React Strict Mode's effect probe, and
13
+ * each Canvas iframe owns an independent registry/module instance.
14
+ */
15
+ const mountedCallsites = new Map();
16
+ function registerMountedCallsite(callsiteId) {
17
+ mountedCallsites.set(callsiteId, (mountedCallsites.get(callsiteId) ?? 0) + 1);
18
+ let active = true;
19
+ return () => {
20
+ if (!active)
21
+ return;
22
+ active = false;
23
+ const count = (mountedCallsites.get(callsiteId) ?? 1) - 1;
24
+ if (count > 0)
25
+ mountedCallsites.set(callsiteId, count);
26
+ else
27
+ mountedCallsites.delete(callsiteId);
28
+ };
29
+ }
30
+ /** Returns null when this runtime has no mounted boundary for the callsite. */
31
+ export function getReactCallsiteMultiplicity(callsiteId) {
32
+ return mountedCallsites.get(callsiteId) ?? null;
33
+ }
34
+ /** Test/runtime teardown hook; canonical changes never depend on this state. */
35
+ export function resetReactComponentRuntime() {
36
+ mountedCallsites.clear();
37
+ overridesByCallsite = new Map();
38
+ listeners.clear();
39
+ }
40
+ function subscribe(listener) {
41
+ listeners.add(listener);
42
+ return () => listeners.delete(listener);
43
+ }
44
+ function overrideFor(callsiteId) {
45
+ return overridesByCallsite.get(callsiteId) ?? EMPTY_OVERRIDE;
46
+ }
47
+ function sameOverrideProjection(next) {
48
+ if (next.size !== overridesByCallsite.size)
49
+ return false;
50
+ for (const [callsiteId, nextProps] of next) {
51
+ const currentProps = overridesByCallsite.get(callsiteId);
52
+ if (!currentProps)
53
+ return false;
54
+ const nextKeys = Object.keys(nextProps);
55
+ const currentKeys = Object.keys(currentProps);
56
+ if (nextKeys.length !== currentKeys.length)
57
+ return false;
58
+ if (nextKeys.some((property) => !Object.hasOwn(currentProps, property)
59
+ || !Object.is(currentProps[property], nextProps[property]))) {
60
+ return false;
61
+ }
62
+ }
63
+ return true;
64
+ }
65
+ function getReactElementRef(element) {
66
+ // React 19 exposes ref as a regular prop and warns when element.ref is read.
67
+ if (Number.isFinite(REACT_MAJOR_VERSION) && REACT_MAJOR_VERSION >= 19) {
68
+ return element.props.ref ?? null;
69
+ }
70
+ return element.ref ?? null;
71
+ }
72
+ function mergeRefs(...refs) {
73
+ if (refs.every((ref) => ref === null))
74
+ return null;
75
+ let cleanup = null;
76
+ return (instance) => {
77
+ cleanup?.();
78
+ cleanup = null;
79
+ if (instance === null)
80
+ return;
81
+ const cleanupCallbacks = refs.map((ref) => {
82
+ if (typeof ref === "function") {
83
+ const result = ref(instance);
84
+ return typeof result === "function" ? result : null;
85
+ }
86
+ if (ref !== null) {
87
+ ref.current = instance;
88
+ }
89
+ return null;
90
+ });
91
+ cleanup = () => {
92
+ refs.forEach((ref, index) => {
93
+ if (typeof ref === "function") {
94
+ const cleanupCallback = cleanupCallbacks[index];
95
+ if (cleanupCallback)
96
+ cleanupCallback();
97
+ else
98
+ ref(null);
99
+ }
100
+ else if (ref !== null) {
101
+ ref.current = null;
102
+ }
103
+ });
104
+ };
105
+ };
106
+ }
107
+ const ReactComponentOverride = forwardRef(function ReactComponentOverride({ element, meta, ...injectedProps }, forwardedRef) {
108
+ useEffect(() => registerMountedCallsite(meta.callsiteId), [meta.callsiteId]);
109
+ const override = useSyncExternalStore(subscribe, () => overrideFor(meta.callsiteId), () => EMPTY_OVERRIDE);
110
+ const elementRef = getReactElementRef(element);
111
+ const mergedRef = useMemo(() => mergeRefs(elementRef, forwardedRef), [elementRef, forwardedRef]);
112
+ const hasInjectedProps = Object.keys(injectedProps).length > 0;
113
+ const hasOverride = Object.keys(override).length > 0;
114
+ if (!hasInjectedProps && !hasOverride && forwardedRef === null)
115
+ return element;
116
+ const props = {
117
+ ...injectedProps,
118
+ ...override,
119
+ };
120
+ if (forwardedRef !== null)
121
+ props.ref = mergedRef;
122
+ return cloneElement(element, props);
123
+ });
124
+ ReactComponentOverride[BOUNDARY_MARKER] = true;
125
+ ReactComponentOverride.displayName = "NudgeUiComponentOverride";
126
+ function isBoundaryType(value) {
127
+ if (value === null || (typeof value !== "function" && typeof value !== "object"))
128
+ return false;
129
+ return Reflect.get(value, BOUNDARY_MARKER) === true;
130
+ }
131
+ function findFiber(element) {
132
+ for (const key of Object.keys(element)) {
133
+ if (/^__reactFiber\$/.test(key) || /^__reactInternalInstance\$/.test(key)) {
134
+ return Reflect.get(element, key) ?? null;
135
+ }
136
+ }
137
+ return null;
138
+ }
139
+ export function instrumentReactComponent(element, meta) {
140
+ return createElement(ReactComponentOverride, { key: element.key ?? undefined, element, meta });
141
+ }
142
+ export function inspectReactComponentTargets(element) {
143
+ if (!getNudgeUiRuntimeConfig().capabilities.componentSemantics)
144
+ return [];
145
+ const targets = [];
146
+ let fiber = findFiber(element);
147
+ while (fiber) {
148
+ if (isBoundaryType(fiber.type) && fiber.memoizedProps?.meta && fiber.memoizedProps.element) {
149
+ const { meta, element: sourceElement } = fiber.memoizedProps;
150
+ targets.push({
151
+ framework: "react",
152
+ meta,
153
+ props: {
154
+ ...sourceElement.props,
155
+ ...overrideFor(meta.callsiteId),
156
+ },
157
+ mountedCount: getReactCallsiteMultiplicity(meta.callsiteId) ?? undefined,
158
+ });
159
+ }
160
+ fiber = fiber.return ?? null;
161
+ }
162
+ return targets;
163
+ }
164
+ export function replaceReactComponentOverrides(overrides) {
165
+ if (!getNudgeUiRuntimeConfig().capabilities.componentSemantics)
166
+ return;
167
+ const next = new Map();
168
+ for (const override of overrides) {
169
+ if (override.framework !== "react")
170
+ continue;
171
+ const props = next.get(override.callsiteId) ?? {};
172
+ props[override.prop] = override.value;
173
+ next.set(override.callsiteId, props);
174
+ }
175
+ if (sameOverrideProjection(next))
176
+ return;
177
+ overridesByCallsite = next;
178
+ listeners.forEach((listener) => listener());
179
+ }
180
+ export const reactComponentRuntimeAdapter = {
181
+ framework: "react",
182
+ inspect: inspectReactComponentTargets,
183
+ replaceOverrides: replaceReactComponentOverrides,
184
+ getCallsiteMultiplicity: getReactCallsiteMultiplicity,
185
+ };
186
+ registerHostRuntimeAdapter(reactComponentRuntimeAdapter);
@@ -0,0 +1,25 @@
1
+ import type { ComponentOverride, ComponentRuntimeAdapter, RuntimeComponentTarget } from "./types.js";
2
+ export type { ComponentFramework, ComponentInvocationMeta, ComponentOverride, ComponentRuntimeAdapter, RuntimeComponentTarget, } from "./types.js";
3
+ /** Version of the page-global host runtime Adapter Interface. */
4
+ export declare const NUDGE_UI_HOST_RUNTIME_VERSION = 1;
5
+ /**
6
+ * Registers a framework runtime Adapter in the host application's module graph.
7
+ *
8
+ * The registry lives on the page global because the self-contained inspector
9
+ * client and the host Adapter intentionally have separate dependency graphs.
10
+ * Registration replaces an older Adapter for the same framework so HMR does
11
+ * not accumulate stale implementations.
12
+ */
13
+ export declare function registerHostRuntimeAdapter(adapter: ComponentRuntimeAdapter): () => void;
14
+ /** Returns the active host runtime Adapters for this browser realm. */
15
+ export declare function getHostRuntimeAdapters(): readonly ComponentRuntimeAdapter[];
16
+ /** Stores the latest projection and sends it to every registered host Adapter. */
17
+ export declare function replaceHostRuntimeAdapterOverrides(overrides: readonly ComponentOverride[]): void;
18
+ /**
19
+ * Copies a host Adapter result into the protocol's plain-data value space.
20
+ * React elements, functions, and other reconciler-owned values never cross
21
+ * the host/client seam.
22
+ */
23
+ export declare function copyRuntimeTarget(target: RuntimeComponentTarget): RuntimeComponentTarget;
24
+ /** Copies override commands before dispatching them into a host Adapter. */
25
+ export declare function copyComponentOverrides(overrides: readonly ComponentOverride[]): ComponentOverride[];
@@ -0,0 +1,161 @@
1
+ import { isComponentFramework } from "./types.js";
2
+ /** Version of the page-global host runtime Adapter Interface. */
3
+ export const NUDGE_UI_HOST_RUNTIME_VERSION = 1;
4
+ const HOST_RUNTIME_KEY = Symbol.for("nudge-ui.host-runtime.v1");
5
+ function registry() {
6
+ // SAFETY: this module exclusively owns the versioned symbol property and
7
+ // validates its initialization before returning the registry.
8
+ const target = globalThis;
9
+ const current = target[HOST_RUNTIME_KEY];
10
+ if (current !== undefined) {
11
+ if (!isHostRuntimeRegistry(current)) {
12
+ throw new Error(`Nudge UI host runtime is incompatible with version ${NUDGE_UI_HOST_RUNTIME_VERSION}.`);
13
+ }
14
+ return current;
15
+ }
16
+ const created = {
17
+ version: NUDGE_UI_HOST_RUNTIME_VERSION,
18
+ adapters: new Map(),
19
+ overrides: new Map(),
20
+ };
21
+ target[HOST_RUNTIME_KEY] = created;
22
+ return created;
23
+ }
24
+ /**
25
+ * Registers a framework runtime Adapter in the host application's module graph.
26
+ *
27
+ * The registry lives on the page global because the self-contained inspector
28
+ * client and the host Adapter intentionally have separate dependency graphs.
29
+ * Registration replaces an older Adapter for the same framework so HMR does
30
+ * not accumulate stale implementations.
31
+ */
32
+ export function registerHostRuntimeAdapter(adapter) {
33
+ assertRuntimeAdapter(adapter);
34
+ const hostRegistry = registry();
35
+ hostRegistry.adapters.set(adapter.framework, adapter);
36
+ const overrides = hostRegistry.overrides.get(adapter.framework);
37
+ if (overrides)
38
+ adapter.replaceOverrides(copyComponentOverrides(overrides));
39
+ return () => {
40
+ if (hostRegistry.adapters.get(adapter.framework) === adapter) {
41
+ hostRegistry.adapters.delete(adapter.framework);
42
+ }
43
+ };
44
+ }
45
+ /** Returns the active host runtime Adapters for this browser realm. */
46
+ export function getHostRuntimeAdapters() {
47
+ return [...registry().adapters.values()];
48
+ }
49
+ /** Stores the latest projection and sends it to every registered host Adapter. */
50
+ export function replaceHostRuntimeAdapterOverrides(overrides) {
51
+ const hostRegistry = registry();
52
+ const frameworks = new Set([
53
+ ...hostRegistry.adapters.keys(),
54
+ ...hostRegistry.overrides.keys(),
55
+ ]);
56
+ for (const override of overrides) {
57
+ assertComponentOverride(override);
58
+ frameworks.add(override.framework);
59
+ }
60
+ for (const framework of frameworks) {
61
+ const projection = copyComponentOverrides(overrides.filter((override) => override.framework === framework));
62
+ hostRegistry.overrides.set(framework, projection);
63
+ hostRegistry.adapters.get(framework)?.replaceOverrides(copyComponentOverrides(projection));
64
+ }
65
+ }
66
+ /**
67
+ * Copies a host Adapter result into the protocol's plain-data value space.
68
+ * React elements, functions, and other reconciler-owned values never cross
69
+ * the host/client seam.
70
+ */
71
+ export function copyRuntimeTarget(target) {
72
+ assertRuntimeTarget(target);
73
+ const props = {};
74
+ for (const [name, value] of Object.entries(target.props)) {
75
+ if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
76
+ props[name] = value;
77
+ }
78
+ }
79
+ return {
80
+ framework: target.framework,
81
+ meta: {
82
+ callsiteId: target.meta.callsiteId,
83
+ componentId: target.meta.componentId,
84
+ componentName: target.meta.componentName,
85
+ file: target.meta.file,
86
+ line: target.meta.line,
87
+ column: target.meta.column,
88
+ authoredProps: { ...target.meta.authoredProps },
89
+ },
90
+ props,
91
+ ...(target.mountedCount === undefined ? {} : { mountedCount: target.mountedCount }),
92
+ };
93
+ }
94
+ /** Copies override commands before dispatching them into a host Adapter. */
95
+ export function copyComponentOverrides(overrides) {
96
+ return overrides.map((override) => {
97
+ assertComponentOverride(override);
98
+ return { ...override };
99
+ });
100
+ }
101
+ function isHostRuntimeRegistry(
102
+ // The page-global value comes from a separately bundled host Adapter.
103
+ // oxlint-disable-next-line anti-slop/no-unknown-parameters
104
+ value) {
105
+ if (typeof value !== "object" || value === null || Array.isArray(value))
106
+ return false;
107
+ // SAFETY: the object check above makes reading these optional candidate fields safe.
108
+ const candidate = value;
109
+ return candidate.version === NUDGE_UI_HOST_RUNTIME_VERSION
110
+ && candidate.adapters instanceof Map
111
+ && candidate.overrides instanceof Map;
112
+ }
113
+ function assertRuntimeAdapter(adapter) {
114
+ if (adapter === null
115
+ || typeof adapter !== "object"
116
+ || !isComponentFramework(adapter.framework)
117
+ || typeof adapter.inspect !== "function"
118
+ || typeof adapter.replaceOverrides !== "function") {
119
+ throw new TypeError("Nudge UI received an invalid host runtime Adapter.");
120
+ }
121
+ }
122
+ function assertRuntimeTarget(target) {
123
+ if (target === null
124
+ || typeof target !== "object"
125
+ || !isComponentFramework(target.framework)
126
+ || target.meta === null
127
+ || typeof target.meta !== "object"
128
+ || target.props === null
129
+ || typeof target.props !== "object"
130
+ || Array.isArray(target.props)) {
131
+ throw new TypeError("Nudge UI received an invalid component target from a host Adapter.");
132
+ }
133
+ const meta = target.meta;
134
+ if (typeof meta.callsiteId !== "string"
135
+ || meta.callsiteId.length === 0
136
+ || typeof meta.componentId !== "string"
137
+ || meta.componentId.length === 0
138
+ || typeof meta.componentName !== "string"
139
+ || meta.componentName.length === 0
140
+ || typeof meta.file !== "string"
141
+ || meta.file.length === 0
142
+ || typeof meta.line !== "number"
143
+ || typeof meta.column !== "number"
144
+ || meta.authoredProps === null
145
+ || typeof meta.authoredProps !== "object"
146
+ || Array.isArray(meta.authoredProps)) {
147
+ throw new TypeError("Nudge UI received invalid component metadata from a host Adapter.");
148
+ }
149
+ }
150
+ function assertComponentOverride(override) {
151
+ if (override === null
152
+ || typeof override !== "object"
153
+ || !isComponentFramework(override.framework)
154
+ || typeof override.callsiteId !== "string"
155
+ || override.callsiteId.length === 0
156
+ || typeof override.prop !== "string"
157
+ || override.prop.length === 0
158
+ || !["string", "number", "boolean"].includes(typeof override.value)) {
159
+ throw new TypeError("Nudge UI received an invalid component override.");
160
+ }
161
+ }
@@ -0,0 +1,2 @@
1
+ /** React runtime props are untrusted external input until inspected. */
2
+ export type RuntimeProps = Record<string, unknown>;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,69 @@
1
+ import type { ComponentChangeTarget, EditableComponentTarget } from "./types.js";
2
+ import type { TextProjectionTarget } from "../inline-text/textChangeBoundary.js";
3
+ import type { TextBindingEvidence, TextProjectionScope } from "../inline-text/textChangeBoundary.js";
4
+ /** The order used when more than one visible prop has the same value. */
5
+ export declare const VISIBLE_TEXT_PROP_PRIORITY: readonly ["children", "label", "text", "caption", "description", "title"];
6
+ export type TextEditRejectionReason = "no-text" | "no-binding" | "ambiguous-binding" | "editing-active" | "unsafe-target";
7
+ export interface TextEditRejection {
8
+ kind: "rejected";
9
+ reason: TextEditRejectionReason;
10
+ message: string;
11
+ }
12
+ export type TextEditBinding = {
13
+ kind: "component-prop";
14
+ property: string;
15
+ target: ComponentChangeTarget;
16
+ } | {
17
+ kind: "rendered-text";
18
+ target: TextProjectionTarget;
19
+ };
20
+ export interface ComponentTextEditBinding {
21
+ kind: "component-prop";
22
+ property: string;
23
+ target: ComponentChangeTarget;
24
+ }
25
+ export interface TextBindingRenderedSource {
26
+ file: string;
27
+ line: number;
28
+ column: number;
29
+ component: string;
30
+ selector: string;
31
+ authoredAs: "literal" | "expression" | "unknown";
32
+ evidence?: TextBindingEvidence;
33
+ }
34
+ export interface TextBindingChoice {
35
+ binding: ComponentTextEditBinding;
36
+ editableTarget: EditableComponentTarget;
37
+ mountedCount: number;
38
+ authoredAs: "literal" | "expression" | "spread" | "default";
39
+ /** Durable target/source evidence for an item-only commit. */
40
+ renderedTarget: TextProjectionTarget | null;
41
+ renderedSource?: TextBindingRenderedSource;
42
+ }
43
+ export interface TextBindingCandidate {
44
+ binding: TextEditBinding;
45
+ /** Runtime target retained privately for semantic canonical records. */
46
+ editableTarget?: EditableComponentTarget;
47
+ element: HTMLElement;
48
+ textNode: Text;
49
+ before: string;
50
+ /** Equal-priority semantic candidates are selected by the inline chooser. */
51
+ bindingChoices?: TextBindingChoice[];
52
+ /** Repeated literal invocations expose this scope choice before commit. */
53
+ scope?: TextProjectionScope;
54
+ scopeChoices?: TextProjectionScope[];
55
+ mountedCount?: number;
56
+ renderedTarget?: TextProjectionTarget;
57
+ renderedSource?: TextBindingRenderedSource;
58
+ /** Existing inspector affordance hidden while its empty node is edited. */
59
+ emptyProjectionMarker?: HTMLElement;
60
+ }
61
+ /**
62
+ * Resolves only a confidently matched semantic string binding. Text nodes and
63
+ * the temporary editor host are not identity: the returned component target is
64
+ * the durable callsite used by the canonical component-prop record.
65
+ */
66
+ export declare function resolveTextBinding(element: HTMLElement, point?: {
67
+ x: number;
68
+ y: number;
69
+ }): TextBindingCandidate | TextEditRejection;