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,18 @@
1
+ /** The subset of Babel nodes needed by the host-neutral compiler. */
2
+ export type SyntaxNode = {
3
+ type: string;
4
+ [key: string]: unknown;
5
+ };
6
+ /** Node keys that never hold children worth visiting. */
7
+ export declare const SKIP_KEYS: Set<string>;
8
+ export declare function isNode(value: unknown): value is SyntaxNode;
9
+ /** Visit every child node with the property name it was reached through. */
10
+ export declare function forEachChild(node: SyntaxNode, visit: (child: SyntaxNode, key: string) => void): void;
11
+ export declare function childNodes(node: SyntaxNode): SyntaxNode[];
12
+ export declare function identifier(node: unknown): string | null;
13
+ /** Dotted name for a JSX element name: `A`, `A.B`, `A.B.C`. */
14
+ export declare function jsxMemberName(node: unknown): string | null;
15
+ /** Dotted name for an identifier expression or a JSX element name. */
16
+ export declare function elementName(node: unknown): string | null;
17
+ /** Parse module source, returning `null` when the source is not parseable. */
18
+ export declare function parseModule(code: string): SyntaxNode | null;
@@ -0,0 +1,75 @@
1
+ import { parse } from "@babel/parser";
2
+ /** Node keys that never hold children worth visiting. */
3
+ export const SKIP_KEYS = new Set([
4
+ "type",
5
+ "loc",
6
+ "range",
7
+ "start",
8
+ "end",
9
+ "extra",
10
+ "leadingComments",
11
+ "trailingComments",
12
+ "innerComments",
13
+ ]);
14
+ export function isNode(value) {
15
+ return typeof value === "object" && value !== null && typeof Reflect.get(value, "type") === "string";
16
+ }
17
+ /** Visit every child node with the property name it was reached through. */
18
+ export function forEachChild(node, visit) {
19
+ for (const [key, value] of Object.entries(node)) {
20
+ if (SKIP_KEYS.has(key))
21
+ continue;
22
+ if (isNode(value)) {
23
+ visit(value, key);
24
+ continue;
25
+ }
26
+ if (!Array.isArray(value))
27
+ continue;
28
+ for (const child of value) {
29
+ if (isNode(child))
30
+ visit(child, key);
31
+ }
32
+ }
33
+ }
34
+ export function childNodes(node) {
35
+ const children = [];
36
+ forEachChild(node, (child) => children.push(child));
37
+ return children;
38
+ }
39
+ export function identifier(node) {
40
+ if (!isNode(node) || (node.type !== "Identifier" && node.type !== "StringLiteral"))
41
+ return null;
42
+ return typeof node.name === "string" ? node.name : typeof node.value === "string" ? node.value : null;
43
+ }
44
+ /** Dotted name for a JSX element name: `A`, `A.B`, `A.B.C`. */
45
+ export function jsxMemberName(node) {
46
+ if (!isNode(node))
47
+ return null;
48
+ if (node.type === "JSXIdentifier")
49
+ return typeof node.name === "string" ? node.name : null;
50
+ if (node.type !== "JSXMemberExpression")
51
+ return null;
52
+ const object = jsxMemberName(node.object);
53
+ const property = jsxMemberName(node.property);
54
+ return object && property ? `${object}.${property}` : null;
55
+ }
56
+ /** Dotted name for an identifier expression or a JSX element name. */
57
+ export function elementName(node) {
58
+ if (!isNode(node))
59
+ return null;
60
+ if (node.type === "Identifier")
61
+ return typeof node.name === "string" ? node.name : null;
62
+ return jsxMemberName(node);
63
+ }
64
+ /** Parse module source, returning `null` when the source is not parseable. */
65
+ export function parseModule(code) {
66
+ try {
67
+ return parse(code, {
68
+ sourceType: "module",
69
+ plugins: ["jsx", "typescript"],
70
+ });
71
+ }
72
+ catch {
73
+ return null;
74
+ }
75
+ }
@@ -0,0 +1,19 @@
1
+ export type ComponentPropValue = string | number | boolean;
2
+ export interface ComponentPropContract {
3
+ name: string;
4
+ /**
5
+ * `text` is deliberately separate from a select. Text edits are allowed to
6
+ * choose an arbitrary string at runtime, while select controls are bounded
7
+ * by their contract options.
8
+ */
9
+ control: "select" | "boolean" | "text";
10
+ options: ComponentPropValue[];
11
+ optional: boolean;
12
+ }
13
+ export interface ComponentContract {
14
+ componentId: string;
15
+ name: string;
16
+ file: string;
17
+ props: ComponentPropContract[];
18
+ provenance: "typescript" | "package-manifest";
19
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ import type { ComponentContract } from "./componentContractTypes.js";
2
+ export declare function extractComponentContracts(code: string, file: string): ComponentContract[];
@@ -0,0 +1,260 @@
1
+ import { parse } from "@babel/parser";
2
+ function isNode(value) {
3
+ return typeof value === "object"
4
+ && value !== null
5
+ && typeof value.type === "string";
6
+ }
7
+ function nodeName(node) {
8
+ if (!node)
9
+ return null;
10
+ if (node.type === "Identifier" || node.type === "JSXIdentifier") {
11
+ return typeof node.name === "string" ? node.name : null;
12
+ }
13
+ if (node.type === "TSQualifiedName") {
14
+ const left = nodeName(node.left);
15
+ const right = nodeName(node.right);
16
+ return left && right ? `${left}.${right}` : null;
17
+ }
18
+ if (node.type === "MemberExpression" || node.type === "OptionalMemberExpression") {
19
+ const object = nodeName(node.object);
20
+ const property = nodeName(node.property);
21
+ return object && property ? `${object}.${property}` : null;
22
+ }
23
+ return null;
24
+ }
25
+ function unwrapTypeAnnotation(node) {
26
+ if (!node)
27
+ return null;
28
+ return node.type === "TSTypeAnnotation"
29
+ ? node.typeAnnotation ?? null
30
+ : node;
31
+ }
32
+ function literalValue(node) {
33
+ if (node.type === "TSLiteralType") {
34
+ return isNode(node.literal) ? literalValue(node.literal) : null;
35
+ }
36
+ if (node.type === "StringLiteral" || node.type === "NumericLiteral" || node.type === "BooleanLiteral") {
37
+ const value = node.value;
38
+ return typeof value === "string" || typeof value === "number" || typeof value === "boolean"
39
+ ? value
40
+ : null;
41
+ }
42
+ return null;
43
+ }
44
+ /**
45
+ * These are the names that a component contract can confidently describe as
46
+ * visible copy. The runtime still requires the current value to be a string
47
+ * equal to the rendered text before offering an inline binding.
48
+ */
49
+ const STRUCTURAL_TEXT_PROPS = new Set([
50
+ "id",
51
+ "className",
52
+ "href",
53
+ "src",
54
+ "role",
55
+ "style",
56
+ ]);
57
+ function isStructuralTextProp(name) {
58
+ return STRUCTURAL_TEXT_PROPS.has(name)
59
+ || name.startsWith("data")
60
+ || name.startsWith("aria");
61
+ }
62
+ function isReactNodeType(node) {
63
+ if (node.type !== "TSTypeReference")
64
+ return false;
65
+ return ["ReactNode", "React.ReactNode", "React.ReactChild", "React.ReactText"]
66
+ .includes(nodeName(node.typeName) ?? "");
67
+ }
68
+ function isTextType(node) {
69
+ return node.type === "TSStringKeyword" || isReactNodeType(node);
70
+ }
71
+ function propertyContract(member) {
72
+ if (member.type !== "TSPropertySignature")
73
+ return null;
74
+ const name = nodeName(member.key);
75
+ const typeNode = unwrapTypeAnnotation(member.typeAnnotation);
76
+ if (!name || !typeNode)
77
+ return null;
78
+ // Project contracts recognize all runtime string props. Structural and
79
+ // implementation names are excluded here; package manifests can still
80
+ // explicitly publish a text control for a project-specific visible prop.
81
+ if (!isStructuralTextProp(name) && isTextType(typeNode)) {
82
+ return {
83
+ name,
84
+ control: "text",
85
+ options: [],
86
+ optional: member.optional === true,
87
+ };
88
+ }
89
+ if (typeNode.type === "TSBooleanKeyword") {
90
+ return {
91
+ name,
92
+ control: "boolean",
93
+ options: [false, true],
94
+ optional: member.optional === true,
95
+ };
96
+ }
97
+ if (typeNode.type !== "TSUnionType")
98
+ return null;
99
+ const values = (typeNode.types ?? [])
100
+ .map(literalValue)
101
+ .filter((value) => value !== null);
102
+ const members = typeNode.types ?? [];
103
+ if (values.length < 2 || values.length !== members.length)
104
+ return null;
105
+ const primitive = typeof values[0];
106
+ if (!values.every((value) => typeof value === primitive))
107
+ return null;
108
+ return {
109
+ name,
110
+ control: "select",
111
+ options: values,
112
+ optional: member.optional === true,
113
+ };
114
+ }
115
+ function membersForType(node, declarations, seen = new Set()) {
116
+ if (!node)
117
+ return [];
118
+ if (node.type === "TSTypeLiteral")
119
+ return node.members ?? [];
120
+ if (node.type === "TSInterfaceBody")
121
+ return node.body ?? [];
122
+ if (node.type === "TSIntersectionType") {
123
+ return (node.types ?? []).flatMap((part) => membersForType(part, declarations, seen));
124
+ }
125
+ if (node.type === "TSTypeReference") {
126
+ const name = nodeName(node.typeName);
127
+ if (!name || seen.has(name))
128
+ return [];
129
+ const declaration = declarations.get(name);
130
+ if (!declaration)
131
+ return [];
132
+ seen.add(name);
133
+ if (declaration.type === "TSInterfaceDeclaration") {
134
+ return membersForType(declaration.body, declarations, seen);
135
+ }
136
+ if (declaration.type === "TSTypeAliasDeclaration") {
137
+ return membersForType(declaration.typeAnnotation, declarations, seen);
138
+ }
139
+ }
140
+ return [];
141
+ }
142
+ function propsTypeFromParam(param) {
143
+ if (!param)
144
+ return null;
145
+ if (param.type === "AssignmentPattern")
146
+ return propsTypeFromParam(param.left);
147
+ return unwrapTypeAnnotation(param.typeAnnotation);
148
+ }
149
+ function propsTypeFromVariableId(id) {
150
+ const annotation = unwrapTypeAnnotation(id.typeAnnotation);
151
+ if (!annotation || annotation.type !== "TSTypeReference")
152
+ return null;
153
+ const typeName = nodeName(annotation.typeName);
154
+ if (typeName !== "React.FC" && typeName !== "FC" && typeName !== "React.FunctionComponent"
155
+ && typeName !== "FunctionComponent")
156
+ return null;
157
+ const params = annotation.typeParameters;
158
+ return params?.params?.[0] ?? null;
159
+ }
160
+ function componentInitializer(node) {
161
+ if (node.type === "ArrowFunctionExpression" || node.type === "FunctionExpression") {
162
+ return { functionNode: node, propsType: null };
163
+ }
164
+ if (node.type !== "CallExpression")
165
+ return null;
166
+ const wrapperName = nodeName(node.callee)?.split(".").at(-1);
167
+ if (wrapperName !== "memo" && wrapperName !== "forwardRef")
168
+ return null;
169
+ const argument = (node.arguments ?? [])[0];
170
+ if (!argument)
171
+ return null;
172
+ const inner = componentInitializer(argument);
173
+ if (!inner)
174
+ return null;
175
+ if (wrapperName !== "forwardRef")
176
+ return inner;
177
+ const typeParameters = (node.typeParameters
178
+ ?? node.typeArguments)?.params ?? [];
179
+ return {
180
+ functionNode: inner.functionNode,
181
+ propsType: inner.propsType ?? typeParameters[1] ?? null,
182
+ };
183
+ }
184
+ function componentContract(name, propsType, declarations, file) {
185
+ if (!/^[A-Z]/.test(name))
186
+ return null;
187
+ const props = membersForType(propsType, declarations)
188
+ .map(propertyContract)
189
+ .filter((prop) => prop !== null);
190
+ if (props.length === 0)
191
+ return null;
192
+ return {
193
+ componentId: `${file.replace(/\.(?:d\.)?[cm]?[jt]sx?$/, "")}#${name}`,
194
+ name,
195
+ file,
196
+ props,
197
+ provenance: "typescript",
198
+ };
199
+ }
200
+ function unwrapExport(node) {
201
+ if (node.type === "ExportNamedDeclaration" || node.type === "ExportDefaultDeclaration") {
202
+ return isNode(node.declaration) ? node.declaration : node;
203
+ }
204
+ return node;
205
+ }
206
+ export function extractComponentContracts(code, file) {
207
+ let ast;
208
+ try {
209
+ ast = parse(code, {
210
+ sourceType: "module",
211
+ plugins: ["jsx", "typescript"],
212
+ });
213
+ }
214
+ catch {
215
+ return [];
216
+ }
217
+ const program = ast.program;
218
+ const body = program?.body ?? [];
219
+ const declarations = new Map();
220
+ for (const statement of body) {
221
+ const node = unwrapExport(statement);
222
+ if (node.type !== "TSInterfaceDeclaration" && node.type !== "TSTypeAliasDeclaration")
223
+ continue;
224
+ const name = nodeName(node.id);
225
+ if (name)
226
+ declarations.set(name, node);
227
+ }
228
+ const contracts = [];
229
+ for (const statement of body) {
230
+ const node = unwrapExport(statement);
231
+ if (node.type === "FunctionDeclaration") {
232
+ const name = nodeName(node.id);
233
+ const param = (node.params ?? [])[0];
234
+ const contract = name
235
+ ? componentContract(name, propsTypeFromParam(param), declarations, file)
236
+ : null;
237
+ if (contract)
238
+ contracts.push(contract);
239
+ continue;
240
+ }
241
+ if (node.type !== "VariableDeclaration")
242
+ continue;
243
+ for (const declaration of node.declarations ?? []) {
244
+ const id = declaration.id;
245
+ const init = declaration.init;
246
+ const name = id ? nodeName(id) : null;
247
+ const initializer = init ? componentInitializer(init) : null;
248
+ if (!id || !initializer || !name)
249
+ continue;
250
+ const param = (initializer.functionNode.params ?? [])[0];
251
+ const propsType = propsTypeFromParam(param)
252
+ ?? initializer.propsType
253
+ ?? propsTypeFromVariableId(id);
254
+ const contract = componentContract(name, propsType, declarations, file);
255
+ if (contract)
256
+ contracts.push(contract);
257
+ }
258
+ }
259
+ return contracts;
260
+ }
@@ -0,0 +1,32 @@
1
+ import { type SyntaxNode } from "./ast.js";
2
+ export type { SyntaxNode } from "./ast.js";
3
+ export interface ComponentInstrumentationOptions {
4
+ /**
5
+ * Package exports whose element type can be replaced by a semantic preview
6
+ * wrapper. Keys are exact import specifiers; values are exported names
7
+ * (`default` for a default import). Discovery of a prop contract does not
8
+ * imply compatibility. Prefer `hostPolicy` when the host can resolve import
9
+ * provenance and rendered slots.
10
+ */
11
+ compatibleComponentImports?: Readonly<Record<string, readonly string[]>>;
12
+ /** Data-only import provenance and slot semantics resolved by the host Adapter. */
13
+ hostPolicy?: import("./componentPolicyResolution.js").HostComponentPolicy;
14
+ }
15
+ export interface ComponentBinding {
16
+ source: string;
17
+ exportName: string | null;
18
+ namespace: boolean;
19
+ }
20
+ export interface ComponentInstrumentationPolicy {
21
+ bindings: Map<string, ComponentBinding>;
22
+ canWrap(componentName: string): boolean;
23
+ rendersChildren(componentName: string): boolean;
24
+ rendersProp(componentName: string, prop: string): boolean;
25
+ componentId(componentName: string): string | null;
26
+ }
27
+ /**
28
+ * Classify bindings before editing JSX. Unknown and shadowed bindings are
29
+ * deliberately excluded: losing a semantic control is safer than changing an
30
+ * application's component protocol. Rendered DOM identity is independent.
31
+ */
32
+ export declare function createComponentInstrumentationPolicy(ast: SyntaxNode, options: ComponentInstrumentationOptions): ComponentInstrumentationPolicy;
@@ -0,0 +1,140 @@
1
+ import { childNodes, identifier, isNode } from "./ast.js";
2
+ /**
3
+ * Classify bindings before editing JSX. Unknown and shadowed bindings are
4
+ * deliberately excluded: losing a semantic control is safer than changing an
5
+ * application's component protocol. Rendered DOM identity is independent.
6
+ */
7
+ export function createComponentInstrumentationPolicy(ast, options) {
8
+ const bindings = new Map();
9
+ const locals = new Set();
10
+ const seen = new Set();
11
+ const ambiguous = new Set();
12
+ const record = (name, local = false) => {
13
+ if (!name)
14
+ return;
15
+ if (seen.has(name))
16
+ ambiguous.add(name);
17
+ seen.add(name);
18
+ if (local)
19
+ locals.add(name);
20
+ };
21
+ const recordPattern = (pattern) => {
22
+ if (!isNode(pattern))
23
+ return;
24
+ if (pattern.type === "Identifier") {
25
+ record(identifier(pattern));
26
+ }
27
+ else if (pattern.type === "RestElement") {
28
+ recordPattern(pattern.argument);
29
+ }
30
+ else if (pattern.type === "AssignmentPattern") {
31
+ recordPattern(pattern.left);
32
+ }
33
+ else if (pattern.type === "ObjectPattern") {
34
+ for (const property of pattern.properties ?? []) {
35
+ recordPattern(property.type === "RestElement" ? property.argument : property.value);
36
+ }
37
+ }
38
+ else if (pattern.type === "ArrayPattern") {
39
+ for (const element of pattern.elements ?? [])
40
+ recordPattern(element);
41
+ }
42
+ };
43
+ const program = isNode(ast.program) ? ast.program : ast;
44
+ for (const statement of program.body ?? []) {
45
+ if (statement.type !== "ImportDeclaration" || !isNode(statement.source))
46
+ continue;
47
+ if (statement.importKind === "type")
48
+ continue;
49
+ const source = String(statement.source.value ?? "");
50
+ for (const specifier of statement.specifiers ?? []) {
51
+ if (specifier.importKind === "type")
52
+ continue;
53
+ const local = identifier(specifier.local);
54
+ if (!local)
55
+ continue;
56
+ record(local);
57
+ bindings.set(local, {
58
+ source,
59
+ exportName: specifier.type === "ImportDefaultSpecifier" ? "default" : identifier(specifier.imported),
60
+ namespace: specifier.type === "ImportNamespaceSpecifier",
61
+ });
62
+ }
63
+ }
64
+ const imported = (name) => {
65
+ const [root, ...members] = name.split(".");
66
+ const binding = root ? bindings.get(root) : undefined;
67
+ if (!binding || ambiguous.has(root))
68
+ return null;
69
+ const exportName = binding.namespace
70
+ ? members.join(".")
71
+ : [binding.exportName, ...members].filter(Boolean).join(".");
72
+ return { source: binding.source, exportName };
73
+ };
74
+ const isLocalDefinition = (value) => {
75
+ if (!isNode(value))
76
+ return false;
77
+ return [
78
+ "ArrowFunctionExpression",
79
+ "FunctionExpression",
80
+ "ClassExpression",
81
+ "CallExpression",
82
+ "TaggedTemplateExpression",
83
+ ].includes(value.type);
84
+ };
85
+ const visit = (node) => {
86
+ if (node.type === "ImportDeclaration")
87
+ return;
88
+ if (node.type === "FunctionDeclaration" || node.type === "ClassDeclaration")
89
+ record(identifier(node.id), true);
90
+ if (node.type === "VariableDeclarator") {
91
+ if (isNode(node.id) && node.id.type === "Identifier")
92
+ record(identifier(node.id), isLocalDefinition(node.init));
93
+ else
94
+ recordPattern(node.id);
95
+ }
96
+ if (Array.isArray(node.params))
97
+ node.params.forEach(recordPattern);
98
+ if (node.type === "CatchClause")
99
+ recordPattern(node.param);
100
+ childNodes(node).forEach(visit);
101
+ };
102
+ visit(program);
103
+ // A definition authored in this module is project-owned by construction: no
104
+ // host resolution applies, and its JSX children are authored here rather
105
+ // than handed to an opaque third-party interface.
106
+ const isProjectLocalComponent = (componentName) => {
107
+ const [root, ...members] = componentName.split(".");
108
+ if (!root || ambiguous.has(root))
109
+ return false;
110
+ return members.length === 0 && imported(componentName) === null && locals.has(root);
111
+ };
112
+ return {
113
+ bindings,
114
+ canWrap(componentName) {
115
+ const binding = imported(componentName);
116
+ if (!binding)
117
+ return isProjectLocalComponent(componentName);
118
+ const resolved = options.hostPolicy?.components[componentName];
119
+ if (resolved)
120
+ return resolved.wrap;
121
+ // No host policy: this is the direct-compiler path, where a package
122
+ // export is only compatible when the caller names it explicitly. The
123
+ // host-resolved policy traces re-exports and namespace members, so this
124
+ // fallback deliberately matches on the authored import alone.
125
+ return options.compatibleComponentImports?.[binding.source]?.includes(binding.exportName) === true;
126
+ },
127
+ rendersChildren(componentName) {
128
+ const resolved = options.hostPolicy?.components[componentName];
129
+ if (resolved)
130
+ return resolved.slots?.children === "rendered";
131
+ return isProjectLocalComponent(componentName);
132
+ },
133
+ rendersProp(componentName, prop) {
134
+ return options.hostPolicy?.components[componentName]?.slots?.[prop] === "rendered";
135
+ },
136
+ componentId(componentName) {
137
+ return options.hostPolicy?.components[componentName]?.componentId ?? null;
138
+ },
139
+ };
140
+ }
@@ -0,0 +1,71 @@
1
+ /** Whether replacing a JSX element type with the semantic boundary is safe. */
2
+ export interface ComponentProtocol {
3
+ readonly wrap: boolean;
4
+ /**
5
+ * JSX-valued slots where the compiler may apply each descendant's resolved
6
+ * protocol. A component that resolves to project-owned source defaults to
7
+ * `wrap: true` with `children: "rendered"`; every other slot stays opaque
8
+ * until a host declares it.
9
+ */
10
+ readonly slots?: Readonly<Record<string, "rendered" | "opaque">>;
11
+ }
12
+ /** Component protocols exported by one canonical module specifier. */
13
+ export interface ComponentModuleProtocol {
14
+ readonly default?: ComponentProtocol;
15
+ readonly exports?: Readonly<Record<string, ComponentProtocol>>;
16
+ }
17
+ export interface ComponentModuleProtocols {
18
+ readonly [source: string]: ComponentModuleProtocol | undefined;
19
+ }
20
+ /** Build-tool operations needed to resolve an authored import to its defining module. */
21
+ export interface ComponentModuleAdapter {
22
+ resolve(specifier: string, importer: string): Promise<string | null>;
23
+ read(id: string): Promise<string | null>;
24
+ isProjectSource(id: string): boolean;
25
+ /** Stable, machine-independent path used by component contracts and callsite identity. */
26
+ sourcePath(id: string): string;
27
+ }
28
+ export interface ResolvedComponentProtocol extends ComponentProtocol {
29
+ readonly componentId: string;
30
+ }
31
+ export type ComponentPolicyDiagnosticCode = "component-import-unresolved" | "component-protocol-unknown" | "component-export-unresolved";
32
+ export interface ComponentPolicyDiagnostic {
33
+ readonly code: ComponentPolicyDiagnosticCode;
34
+ readonly componentName: string;
35
+ readonly source: string;
36
+ readonly exportName: string;
37
+ }
38
+ /** Data-only policy consumed by the source compiler after a host resolves imports. */
39
+ export interface HostComponentPolicy {
40
+ readonly components: Readonly<Record<string, ResolvedComponentProtocol>>;
41
+ readonly diagnostics: readonly ComponentPolicyDiagnostic[];
42
+ }
43
+ export interface ResolveHostComponentPolicyOptions {
44
+ readonly moduleProtocols?: ComponentModuleProtocols;
45
+ /** Backwards-compatible shorthand: these exports may be wrapped but expose no rendered slots. */
46
+ readonly compatibleComponentImports?: Readonly<Record<string, readonly string[]>>;
47
+ }
48
+ /** Merge a host's protocol additions over a shared compatibility catalog. */
49
+ export declare function mergeComponentModuleProtocols(defaults: ComponentModuleProtocols, overrides: ComponentModuleProtocols | undefined): ComponentModuleProtocols;
50
+ /**
51
+ * Resolve the imported JSX values used by one source file.
52
+ *
53
+ * The compiler owns syntax and re-export traversal. The host Adapter owns all
54
+ * build-tool resolution, source ownership, and stable path decisions.
55
+ */
56
+ export declare function resolveHostComponentPolicy(code: string, importer: string, adapter: ComponentModuleAdapter, options?: ResolveHostComponentPolicyOptions): Promise<HostComponentPolicy>;
57
+ /** One actionable message per diagnostic code and source. */
58
+ export interface GroupedComponentPolicyDiagnostic {
59
+ /** Stable dedupe key for host-side "warn once" tracking. */
60
+ readonly key: string;
61
+ readonly source: string;
62
+ readonly componentNames: readonly string[];
63
+ readonly total: number;
64
+ }
65
+ /**
66
+ * Roll per-component diagnostics up so a host emits one warning per package
67
+ * instead of one per skipped export.
68
+ */
69
+ export declare function groupComponentPolicyDiagnostics(diagnostics: readonly ComponentPolicyDiagnostic[], maxNames?: number): GroupedComponentPolicyDiagnostic[];
70
+ /** Host-facing warning text for one grouped diagnostic. */
71
+ export declare function formatComponentPolicyWarning(grouped: GroupedComponentPolicyDiagnostic, location: string, hint?: string): string;