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,339 @@
1
+ import MagicString, {} from "magic-string";
2
+ import { posix } from "node:path";
3
+ import { elementName, isNode, jsxMemberName, parseModule, SKIP_KEYS, } from "./ast.js";
4
+ import { createComponentInstrumentationPolicy, } from "./componentInstrumentation.js";
5
+ import { relativePath, stripModuleExtension } from "./sourcePaths.js";
6
+ export const DEFAULT_COMPONENT_RUNTIME_MODULE = "nudge-ui/internal/component-runtime";
7
+ const PARSEABLE_EXT = /\.(tsx|jsx)$/;
8
+ const EXPRESSION_SCOPE_TYPES = new Set([
9
+ "FunctionExpression",
10
+ "ArrowFunctionExpression",
11
+ "ClassExpression",
12
+ ]);
13
+ // Scopes that contribute an id to the scope stack: declarations push their
14
+ // own name; expressions are pushed at their VariableDeclarator binding, or
15
+ // here by their own id (may be null) when anonymous.
16
+ const ALL_SCOPE_TYPES = new Set([
17
+ "FunctionDeclaration",
18
+ "ClassDeclaration",
19
+ ...EXPRESSION_SCOPE_TYPES,
20
+ ]);
21
+ const IDENTITY_ATTRS = new Set(["data-cid", "data-src", "data-cprops"]);
22
+ function isComponentName(name) {
23
+ return /^[A-Z]/.test(name);
24
+ }
25
+ function getScopeName(node) {
26
+ const id = node.id;
27
+ return id?.name ?? "";
28
+ }
29
+ function hasAttr(attrs, attrName) {
30
+ return attrs.some((a) => a.type === "JSXAttribute" &&
31
+ a.name?.type ===
32
+ "JSXIdentifier" &&
33
+ a.name.name === attrName);
34
+ }
35
+ function resolveCid(openingName, scopeStack) {
36
+ const name = jsxMemberName(openingName);
37
+ if (name && isComponentName(name))
38
+ return name;
39
+ for (let i = scopeStack.length - 1; i >= 0; i--) {
40
+ const scope = scopeStack[i];
41
+ if (scope && isComponentName(scope))
42
+ return scope;
43
+ }
44
+ return "Anonymous";
45
+ }
46
+ function serialiseAttribute(attr) {
47
+ if (attr.type !== "JSXAttribute")
48
+ return null;
49
+ const nameNode = attr.name;
50
+ if (nameNode?.type !== "JSXIdentifier")
51
+ return null;
52
+ const key = nameNode.name ?? "";
53
+ if (!key || IDENTITY_ATTRS.has(key))
54
+ return null;
55
+ const value = attr.value;
56
+ if (value === null || value === undefined) {
57
+ return `${key}:true`;
58
+ }
59
+ if (value.type === "StringLiteral") {
60
+ return `${key}:${String(value.value)}`;
61
+ }
62
+ if (value.type === "NumericLiteral") {
63
+ return `${key}:${String(value.value)}`;
64
+ }
65
+ if (value.type === "BooleanLiteral") {
66
+ return `${key}:${value.value ? "true" : "false"}`;
67
+ }
68
+ if (value.type === "JSXExpressionContainer") {
69
+ const expr = value.expression;
70
+ if (!expr)
71
+ return null;
72
+ if (expr.type === "StringLiteral") {
73
+ return `${key}:${String(expr.value)}`;
74
+ }
75
+ if (expr.type === "NumericLiteral") {
76
+ return `${key}:${String(expr.value)}`;
77
+ }
78
+ if (expr.type === "BooleanLiteral") {
79
+ return `${key}:${expr.value ? "true" : "false"}`;
80
+ }
81
+ // Inline function expressions are rendered as `fn(key)` per PLAN.md.
82
+ // Bare identifiers are omitted (they may reference any type — PLAN.md's
83
+ // canonical example omits `onClick={handleClick}`).
84
+ if (expr.type === "ArrowFunctionExpression" ||
85
+ expr.type === "FunctionExpression") {
86
+ return `${key}:fn(${key})`;
87
+ }
88
+ return null;
89
+ }
90
+ return null;
91
+ }
92
+ function buildCprops(attrs) {
93
+ const parts = [];
94
+ for (const a of attrs) {
95
+ const part = serialiseAttribute(a);
96
+ if (part)
97
+ parts.push(part);
98
+ }
99
+ if (parts.length === 0)
100
+ return null;
101
+ return parts.join(",");
102
+ }
103
+ function escapeJsxAttribute(value) {
104
+ return value
105
+ .replaceAll("&", "&")
106
+ .replaceAll('"', """)
107
+ .replaceAll("<", "&lt;")
108
+ .replaceAll(">", "&gt;");
109
+ }
110
+ function authoredPropKinds(attrs, children = []) {
111
+ const result = {};
112
+ for (const attr of attrs) {
113
+ if (attr.type === "JSXSpreadAttribute") {
114
+ result["..."] = "spread";
115
+ continue;
116
+ }
117
+ if (attr.type !== "JSXAttribute")
118
+ continue;
119
+ const name = elementName(attr.name);
120
+ if (!name || IDENTITY_ATTRS.has(name) || name === "key" || name === "ref")
121
+ continue;
122
+ const value = attr.value;
123
+ result[name] = value === null || value === undefined
124
+ || value.type === "StringLiteral"
125
+ || (value.type === "JSXExpressionContainer"
126
+ && isNode(value.expression)
127
+ && (value.expression.type === "StringLiteral"
128
+ || value.expression.type === "NumericLiteral"
129
+ || value.expression.type === "BooleanLiteral"))
130
+ ? "literal"
131
+ : "expression";
132
+ }
133
+ const childKind = authoredChildrenKind(children);
134
+ if (childKind)
135
+ result.children = childKind;
136
+ return result;
137
+ }
138
+ /**
139
+ * Preserve the authored shape of primitive JSX children in invocation
140
+ * metadata. This is metadata for the dev runtime only; it does not add a
141
+ * production attribute or wrapper to the application output.
142
+ */
143
+ function authoredChildrenKind(children) {
144
+ if (children.length === 0)
145
+ return null;
146
+ let kind = null;
147
+ for (const child of children) {
148
+ if (child.type === "JSXText") {
149
+ if (String(child.value ?? "").trim() === "")
150
+ continue;
151
+ kind = kind === "spread" || kind === "expression" ? kind : "literal";
152
+ continue;
153
+ }
154
+ if (child.type === "JSXSpreadChild") {
155
+ kind = "spread";
156
+ continue;
157
+ }
158
+ if (child.type !== "JSXExpressionContainer")
159
+ continue;
160
+ const expression = child.expression;
161
+ if (!expression || expression.type === "JSXEmptyExpression")
162
+ continue;
163
+ const literal = expression.type === "StringLiteral"
164
+ || expression.type === "NumericLiteral"
165
+ || expression.type === "BooleanLiteral";
166
+ if (kind === "spread")
167
+ continue;
168
+ kind = literal && (kind === null || kind === "literal") ? "literal" : "expression";
169
+ }
170
+ return kind;
171
+ }
172
+ function componentIdFor(componentName, relPath, bindings) {
173
+ const [rootName, ...members] = componentName.split(".");
174
+ const binding = rootName ? bindings.get(rootName) : undefined;
175
+ if (!binding)
176
+ return `${stripModuleExtension(relPath)}#${componentName}`;
177
+ const moduleId = binding.source.startsWith(".")
178
+ ? stripModuleExtension(posix.normalize(posix.join(posix.dirname(relPath), binding.source)))
179
+ : stripModuleExtension(binding.source);
180
+ const exportName = binding.namespace
181
+ ? members.join(".") || rootName
182
+ : binding.exportName ?? rootName;
183
+ return `${moduleId}#${exportName}`;
184
+ }
185
+ function walkChildren(node, scopeStack, ms, relPath, options, state, allowComponentWrapping) {
186
+ const opening = node.type === "JSXElement" ? node.openingElement : node;
187
+ const componentName = opening.type === "JSXOpeningElement" ? elementName(opening.name) : null;
188
+ const customElement = componentName !== null && (isComponentName(componentName) || componentName.includes("."));
189
+ for (const key of Object.keys(node)) {
190
+ if (SKIP_KEYS.has(key))
191
+ continue;
192
+ const value = node[key];
193
+ if (Array.isArray(value)) {
194
+ for (const child of value) {
195
+ if (isNode(child)) {
196
+ // A component can inspect its children or slot props before React
197
+ // renders them. Preserve those element values unless the receiving
198
+ // interface explicitly promises to render them.
199
+ const renderedChild = !customElement
200
+ || (key === "children" && state.componentPolicy.rendersChildren(componentName))
201
+ || (key === "attributes" && state.componentPolicy.rendersProp(componentName, elementName(child.name) ?? ""))
202
+ || (key !== "children" && key !== "attributes");
203
+ walk(child, node, scopeStack, ms, relPath, options, state, allowComponentWrapping && renderedChild);
204
+ }
205
+ }
206
+ }
207
+ else if (isNode(value)) {
208
+ walk(value, node, scopeStack, ms, relPath, options, state, allowComponentWrapping);
209
+ }
210
+ }
211
+ }
212
+ function walk(node, parent, scopeStack, ms, relPath, options, state, allowComponentWrapping) {
213
+ // A function/class expression bound to a variable inherits the variable's
214
+ // name as its component name (arrows have no own id).
215
+ if (node.type === "VariableDeclarator") {
216
+ const init = node.init ?? null;
217
+ const varName = node.id?.name ?? null;
218
+ if (init && varName && EXPRESSION_SCOPE_TYPES.has(init.type)) {
219
+ scopeStack.push(varName);
220
+ walkChildren(init, scopeStack, ms, relPath, options, state, allowComponentWrapping);
221
+ scopeStack.pop();
222
+ return;
223
+ }
224
+ }
225
+ if (ALL_SCOPE_TYPES.has(node.type)) {
226
+ // Named/anonymous function and class scopes: push their own id (may be null).
227
+ scopeStack.push(getScopeName(node));
228
+ walkChildren(node, scopeStack, ms, relPath, options, state, allowComponentWrapping);
229
+ scopeStack.pop();
230
+ return;
231
+ }
232
+ if (node.type === "JSXElement" && options.instrumentComponents && allowComponentWrapping) {
233
+ const opening = node.openingElement;
234
+ const openingName = opening?.name;
235
+ const componentName = elementName(openingName);
236
+ const start = node.start;
237
+ const end = node.end;
238
+ const loc = openingName?.loc;
239
+ const line = loc?.start?.line;
240
+ const column = loc?.start?.column;
241
+ if (componentName
242
+ && (isComponentName(componentName) || componentName.includes("."))
243
+ && state.componentPolicy.canWrap(componentName)
244
+ && typeof start === "number"
245
+ && typeof end === "number"
246
+ && typeof line === "number"
247
+ && typeof column === "number") {
248
+ const attrs = opening?.attributes ?? [];
249
+ const meta = {
250
+ callsiteId: `${relPath}:${line}:${column + 1}`,
251
+ componentId: state.componentPolicy.componentId(componentName)
252
+ ?? componentIdFor(componentName, relPath, state.componentPolicy.bindings),
253
+ componentName,
254
+ file: relPath,
255
+ line,
256
+ column: column + 1,
257
+ authoredProps: authoredPropKinds(attrs, node.children ?? []),
258
+ };
259
+ const needsExpression = parent?.type === "JSXElement" || parent?.type === "JSXFragment";
260
+ // appendRight preserves insertion order when two JSX siblings have no
261
+ // whitespace between them. At the shared `</First><Second>` boundary,
262
+ // the first component's closing wrapper must be emitted before the
263
+ // second component's opening wrapper.
264
+ ms.appendRight(start, `${needsExpression ? "{" : ""}__nudgeUiInstrumentComponent(`);
265
+ ms.appendRight(end, `, ${JSON.stringify(meta)})${needsExpression ? "}" : ""}`);
266
+ state.changed = true;
267
+ state.instrumentedComponents = true;
268
+ }
269
+ }
270
+ if (node.type === "JSXOpeningElement") {
271
+ const attrs = node.attributes ?? [];
272
+ const nameNode = node.name;
273
+ // TypeScript JSX type arguments sit between the component name and its
274
+ // attributes (`<Button<Props> size="small" />`). Injecting immediately
275
+ // after the name would produce the invalid `<Button data-cid...<Props>`
276
+ // shape, so place identity attributes after the complete type argument
277
+ // list when one is present.
278
+ const typeArguments = node.typeArguments ??
279
+ node.typeParameters;
280
+ const end = typeArguments?.end ??
281
+ nameNode.end ??
282
+ null;
283
+ if (typeof end === "number") {
284
+ if (!hasAttr(attrs, "data-cid")) {
285
+ const cid = resolveCid(nameNode, scopeStack);
286
+ ms.appendRight(end, ` data-cid="${cid}"`);
287
+ state.changed = true;
288
+ }
289
+ if (!hasAttr(attrs, "data-src")) {
290
+ const loc = nameNode.loc;
291
+ const line = loc?.start?.line;
292
+ const col = loc?.start?.column;
293
+ // Babel columns are 0-indexed; emit 1-indexed to match __source.
294
+ if (typeof line === "number" && typeof col === "number") {
295
+ ms.appendRight(end, ` data-src="${relPath}:${line}:${col + 1}"`);
296
+ state.changed = true;
297
+ }
298
+ }
299
+ if (!hasAttr(attrs, "data-cprops")) {
300
+ const cprops = buildCprops(attrs);
301
+ if (cprops) {
302
+ ms.appendRight(end, ` data-cprops="${escapeJsxAttribute(cprops)}"`);
303
+ state.changed = true;
304
+ }
305
+ }
306
+ }
307
+ }
308
+ walkChildren(node, scopeStack, ms, relPath, options, state, allowComponentWrapping);
309
+ }
310
+ export function injectIdentity(code, id, root, options = {}) {
311
+ if (id.includes("/node_modules/"))
312
+ return null;
313
+ if (!PARSEABLE_EXT.test(id))
314
+ return null;
315
+ const ast = parseModule(code);
316
+ if (!ast)
317
+ return null;
318
+ const ms = new MagicString(code);
319
+ const relPath = relativePath(id, root);
320
+ const state = {
321
+ changed: false,
322
+ instrumentedComponents: false,
323
+ componentPolicy: createComponentInstrumentationPolicy(ast, options),
324
+ };
325
+ walk(ast, null, [], ms, relPath, options, state, true);
326
+ if (!state.changed)
327
+ return null;
328
+ if (state.instrumentedComponents) {
329
+ const runtimeModule = options.componentRuntimeModule ?? DEFAULT_COMPONENT_RUNTIME_MODULE;
330
+ ms.prepend(`import { instrumentReactComponent as __nudgeUiInstrumentComponent } from ${JSON.stringify(runtimeModule)};\n`);
331
+ }
332
+ return {
333
+ code: ms.toString(),
334
+ map: ms.generateMap({ source: id, hires: true }),
335
+ };
336
+ }
337
+ export function injectDataCid(code, id, root) {
338
+ return injectIdentity(code, id, root);
339
+ }
@@ -0,0 +1,12 @@
1
+ /** Strip a TypeScript or JavaScript module extension from a resolved path. */
2
+ export declare function stripModuleExtension(value: string): string;
3
+ /**
4
+ * Project-relative source path used by `data-src`, callsite identity, and
5
+ * catalog keys.
6
+ *
7
+ * A file outside the project root (an authored workspace package) keeps a
8
+ * `../`-prefixed relative path, so identity stays unique across packages and
9
+ * machine paths never reach the DOM or a prompt. Every host Adapter reads this
10
+ * function so their identity strings cannot drift.
11
+ */
12
+ export declare function relativePath(id: string, root?: string): string;
@@ -0,0 +1,27 @@
1
+ import { posix } from "node:path";
2
+ /** Strip a TypeScript or JavaScript module extension from a resolved path. */
3
+ export function stripModuleExtension(value) {
4
+ return value.replace(/\.(?:d\.)?[cm]?[jt]sx?$/, "");
5
+ }
6
+ /**
7
+ * Project-relative source path used by `data-src`, callsite identity, and
8
+ * catalog keys.
9
+ *
10
+ * A file outside the project root (an authored workspace package) keeps a
11
+ * `../`-prefixed relative path, so identity stays unique across packages and
12
+ * machine paths never reach the DOM or a prompt. Every host Adapter reads this
13
+ * function so their identity strings cannot drift.
14
+ */
15
+ export function relativePath(id, root) {
16
+ if (root) {
17
+ const rootPrefix = root.endsWith("/") ? root : `${root}/`;
18
+ if (id.startsWith(rootPrefix))
19
+ return id.slice(rootPrefix.length);
20
+ if (id.startsWith("/") && root.startsWith("/")) {
21
+ const relativeId = posix.relative(root, id);
22
+ if (relativeId && relativeId !== ".")
23
+ return relativeId;
24
+ }
25
+ }
26
+ return id.replace(/^\//, "");
27
+ }
@@ -0,0 +1,62 @@
1
+ import type { TokenCatalogDiagnostic } from "../model/index.js";
2
+ import type { InventoryDiagnostic, TokenContribution } from "../token-inventory/types.js";
3
+ export * from "./tailwind.js";
4
+ export * from "./vanillaExtract.js";
5
+ /**
6
+ * Host-neutral interpretation of CSS dialects. Hosts see very different things
7
+ * — a Vite host watches the whole transform pipeline, a static-file host only
8
+ * reads `.css` off disk — so each supplies the evidence it can observe and this
9
+ * module turns exactly that into token knowledge. It is pure, so the same
10
+ * evidence yields the same tokens on every host and dialect behaviour can be
11
+ * tested without a build tool. A host that observes less reports less through
12
+ * `DialectObservation` rather than quietly producing a thinner catalog.
13
+ */
14
+ export type DialectName = "tailwind-v3" | "tailwind-v4" | "vanilla-extract";
15
+ export interface TailwindV3Evidence {
16
+ readonly config: unknown;
17
+ /** Path recorded on the resulting tokens. */
18
+ readonly source?: string;
19
+ }
20
+ /** A theme contract written inline in host configuration. */
21
+ export interface InlineThemeContractEvidence {
22
+ readonly contract: unknown;
23
+ /** Compiled values by custom-property name, when the host observed the CSS. */
24
+ readonly cssValues?: Readonly<Record<string, string>>;
25
+ readonly source?: string;
26
+ }
27
+ /** A theme contract loaded from a published module. */
28
+ export interface PublishedThemeContractEvidence {
29
+ /** Separates "never looked" from "looked and found nothing"; only the latter clears a held contract. */
30
+ readonly attempted: boolean;
31
+ readonly contract: unknown;
32
+ /** Whether the contract came from a dependency rather than project source. */
33
+ readonly fromPackage?: boolean;
34
+ readonly prefix?: string;
35
+ readonly source?: string;
36
+ readonly diagnostics?: readonly TokenCatalogDiagnostic[];
37
+ }
38
+ /** Everything a host managed to observe about the project's dialects. */
39
+ export interface DialectEvidence {
40
+ readonly tailwindV3?: TailwindV3Evidence;
41
+ /** True when any observed stylesheet carried Tailwind v4 markers. */
42
+ readonly tailwindV4Css?: boolean;
43
+ readonly inlineThemeContract?: InlineThemeContractEvidence;
44
+ readonly publishedThemeContract?: PublishedThemeContractEvidence;
45
+ readonly diagnostics?: readonly InventoryDiagnostic[];
46
+ }
47
+ export interface DialectObservation {
48
+ readonly dialect: DialectName;
49
+ readonly evidence: "none" | "config" | "contract" | "css";
50
+ readonly tokenCount: number;
51
+ }
52
+ export interface DialectInterpretation {
53
+ /** Apply to the token inventory in this order. */
54
+ readonly contributions: readonly TokenContribution[];
55
+ readonly observed: readonly DialectObservation[];
56
+ }
57
+ /**
58
+ * Every contribution is emitted on every call, empty when a dialect has no
59
+ * evidence: they are id-keyed and replaceable, so omitting one would leave
60
+ * stale facts in the inventory rather than clearing them.
61
+ */
62
+ export declare function interpretDialects(evidence?: DialectEvidence): DialectInterpretation;
@@ -0,0 +1,103 @@
1
+ import { isTailwindV3Config, readTailwindV3Config, tailwindV4Relabelling } from "./tailwind.js";
2
+ import { readThemeContract } from "./vanillaExtract.js";
3
+ export * from "./tailwind.js";
4
+ export * from "./vanillaExtract.js";
5
+ /**
6
+ * Every contribution is emitted on every call, empty when a dialect has no
7
+ * evidence: they are id-keyed and replaceable, so omitting one would leave
8
+ * stale facts in the inventory rather than clearing them.
9
+ */
10
+ export function interpretDialects(evidence = {}) {
11
+ const observed = [];
12
+ const tailwindV3Tokens = readTailwindV3Evidence(evidence.tailwindV3);
13
+ observed.push({
14
+ dialect: "tailwind-v3",
15
+ evidence: evidence.tailwindV3 === undefined ? "none" : "config",
16
+ tokenCount: tailwindV3Tokens.length,
17
+ });
18
+ const inlineTokens = readInlineContract(evidence.inlineThemeContract);
19
+ const contributions = [{
20
+ id: "dialect-tokens",
21
+ order: -1,
22
+ tokens: [...tailwindV3Tokens, ...inlineTokens],
23
+ diagnostics: [...(evidence.diagnostics ?? [])],
24
+ }];
25
+ const tailwindV4 = evidence.tailwindV4Css === true;
26
+ contributions.push(tailwindV4 ? tailwindV4Relabelling() : { id: "tailwind-v4-naming", order: 0 });
27
+ observed.push({
28
+ dialect: "tailwind-v4",
29
+ evidence: tailwindV4 ? "css" : "none",
30
+ // v4 tokens are already in the parsed CSS; this dialect only relabels them.
31
+ tokenCount: 0,
32
+ });
33
+ const published = readPublishedContract(evidence.publishedThemeContract);
34
+ contributions.push(published.contribution);
35
+ observed.push({
36
+ dialect: "vanilla-extract",
37
+ evidence: inlineTokens.length + published.count > 0 ? "contract" : "none",
38
+ tokenCount: inlineTokens.length + published.count,
39
+ });
40
+ return { contributions, observed };
41
+ }
42
+ function readTailwindV3Evidence(evidence) {
43
+ if (evidence === undefined || !isTailwindV3Config(evidence.config))
44
+ return [];
45
+ return readTailwindV3Config(evidence.config, evidence.source);
46
+ }
47
+ function readInlineContract(evidence) {
48
+ if (evidence === undefined)
49
+ return [];
50
+ return readThemeContract(evidence.contract, {
51
+ source: evidence.source ?? "theme-contract.ts",
52
+ origin: "project",
53
+ editable: true,
54
+ ...(evidence.cssValues === undefined ? {} : { cssValues: evidence.cssValues }),
55
+ });
56
+ }
57
+ /**
58
+ * Contributes identity only: the emitted CSS stays authoritative on value,
59
+ * cascade, and editability, so entries carry no declarations and merge by CSS name.
60
+ */
61
+ function readPublishedContract(evidence) {
62
+ const empty = { id: "vanilla-extract-contract", order: 1 };
63
+ if (evidence === undefined || !evidence.attempted)
64
+ return { contribution: empty, count: 0 };
65
+ const diagnostics = evidence.diagnostics ?? [];
66
+ if (diagnostics.length > 0) {
67
+ return {
68
+ contribution: {
69
+ ...empty,
70
+ diagnostics: diagnostics.map((diagnostic) => ({
71
+ code: diagnostic.code,
72
+ artifact: diagnostic.module,
73
+ message: diagnostic.message,
74
+ ...(diagnostic.exportName === undefined ? {} : { exportName: diagnostic.exportName }),
75
+ })),
76
+ },
77
+ count: 0,
78
+ };
79
+ }
80
+ if (evidence.contract === null || evidence.contract === undefined) {
81
+ return { contribution: empty, count: 0 };
82
+ }
83
+ const entries = readThemeContract(evidence.contract, {
84
+ ...(evidence.prefix === undefined ? {} : { prefix: evidence.prefix }),
85
+ source: evidence.source ?? "theme-contract",
86
+ origin: evidence.fromPackage === true ? "package" : "project",
87
+ editable: false,
88
+ });
89
+ return {
90
+ contribution: {
91
+ ...empty,
92
+ definitions: entries.map((entry) => ({
93
+ cssName: entry.cssName ?? entry.name,
94
+ name: entry.name,
95
+ adapter: entry.adapter,
96
+ origin: entry.origin,
97
+ editable: entry.editable,
98
+ declarations: [],
99
+ })),
100
+ },
101
+ count: entries.length,
102
+ };
103
+ }
@@ -0,0 +1,46 @@
1
+ import type { TokenEntry } from "../model/index.js";
2
+ import type { TokenContribution } from "../token-inventory/types.js";
3
+ /** Markers proving a stylesheet participates in Tailwind v4. */
4
+ export declare function detectTailwindV4(css: string): boolean;
5
+ /**
6
+ * v4 tokens reach the CSS whether authored or Tailwind-generated, and the
7
+ * generic parser cannot tell those apart. Authored `@theme` entries stay
8
+ * project-owned and editable; generated ones are framework-owned and are not.
9
+ */
10
+ export declare function tailwindV4Relabelling(): TokenContribution;
11
+ /** A color utility that applies alpha to a catalog token, e.g. `bg-brand/40`. */
12
+ export interface TailwindAlphaUtility {
13
+ readonly utility: string;
14
+ /** The base catalog token the utility draws its color from. */
15
+ readonly baseName: string;
16
+ /** Normalized alpha, always percent-suffixed. */
17
+ readonly alpha: string;
18
+ }
19
+ /**
20
+ * Null when the class is not an alpha utility. The build-time catalog and the
21
+ * browser runtime both parse this and must agree, or an edit gets attributed
22
+ * to the wrong token.
23
+ */
24
+ export declare function readTailwindV4AlphaUtility(className: string): TailwindAlphaUtility | null;
25
+ /** The CSS Tailwind v4 emits for an alpha utility. */
26
+ export declare function tailwindV4AlphaExpression(baseCssName: string, alpha: string): string;
27
+ /** The parts of a v3 config that carry design tokens. */
28
+ export interface TailwindV3Config {
29
+ theme?: {
30
+ colors?: Record<string, unknown>;
31
+ spacing?: Record<string, unknown>;
32
+ borderWidth?: Record<string, unknown>;
33
+ borderRadius?: Record<string, unknown>;
34
+ fontSize?: Record<string, unknown>;
35
+ fontWeight?: Record<string, unknown>;
36
+ lineHeight?: Record<string, unknown>;
37
+ letterSpacing?: Record<string, unknown>;
38
+ extend?: Record<string, Record<string, unknown>>;
39
+ };
40
+ plugins?: unknown[];
41
+ [key: string]: unknown;
42
+ }
43
+ /** Distinguishes a v3 config object from a v4 one, which has no `theme` key. */
44
+ export declare function isTailwindV3Config(config: unknown): config is TailwindV3Config;
45
+ /** Flattens a v3 config's theme into token entries, applying `theme.extend`. */
46
+ export declare function readTailwindV3Config(config: TailwindV3Config, source?: string): TokenEntry[];