nudge-ui 0.2.5 → 0.2.6

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 (575) hide show
  1. package/dist/cli/agentCommand.d.ts +0 -1
  2. package/dist/cli/agentCommand.js +0 -1
  3. package/dist/client.mjs +238 -122
  4. package/dist/compiler/ast.d.ts +0 -6
  5. package/dist/compiler/ast.js +0 -5
  6. package/dist/compiler/componentContractTypes.d.ts +11 -5
  7. package/dist/compiler/componentContracts.js +3 -9
  8. package/dist/compiler/componentInstrumentation.d.ts +2 -13
  9. package/dist/compiler/componentInstrumentation.js +3 -12
  10. package/dist/compiler/componentPolicyResolution.d.ts +3 -22
  11. package/dist/compiler/componentPolicyResolution.js +6 -38
  12. package/dist/compiler/identityAttributes.d.ts +2 -0
  13. package/dist/compiler/identityAttributes.js +2 -0
  14. package/dist/compiler/index.d.ts +0 -1
  15. package/dist/compiler/index.js +0 -1
  16. package/dist/compiler/packageComponentContracts.d.ts +10 -19
  17. package/dist/compiler/packageComponentContracts.js +60 -43
  18. package/dist/compiler/reactComponentProtocols.d.ts +0 -7
  19. package/dist/compiler/reactComponentProtocols.js +0 -7
  20. package/dist/compiler/reactIdentity.d.ts +2 -2
  21. package/dist/compiler/reactIdentity.js +41 -43
  22. package/dist/compiler/sourcePaths.d.ts +4 -8
  23. package/dist/compiler/sourcePaths.js +6 -8
  24. package/dist/css/dialects/index.d.ts +2 -21
  25. package/dist/css/dialects/index.js +2 -9
  26. package/dist/css/dialects/tailwind.d.ts +2 -16
  27. package/dist/css/dialects/tailwind.js +2 -25
  28. package/dist/css/dialects/vanillaExtract.d.ts +1 -9
  29. package/dist/css/dialects/vanillaExtract.js +0 -1
  30. package/dist/css/index.d.ts +0 -8
  31. package/dist/css/index.js +0 -8
  32. package/dist/css/model/index.d.ts +6 -38
  33. package/dist/css/model/index.js +0 -9
  34. package/dist/css/token-inventory/index.d.ts +0 -23
  35. package/dist/css/token-inventory/index.js +0 -23
  36. package/dist/css/token-inventory/inventory.js +4 -16
  37. package/dist/css/token-inventory/parseStylesheet.d.ts +1 -9
  38. package/dist/css/token-inventory/parseStylesheet.js +5 -42
  39. package/dist/css/token-inventory/policy.d.ts +2 -39
  40. package/dist/css/token-inventory/policy.js +2 -39
  41. package/dist/css/token-inventory/types.d.ts +2 -15
  42. package/dist/css/value-semantics/borderSemantics.d.ts +1 -8
  43. package/dist/css/value-semantics/borderSemantics.js +5 -23
  44. package/dist/css/value-semantics/boxSemantics.d.ts +2 -25
  45. package/dist/css/value-semantics/boxSemantics.js +1 -7
  46. package/dist/css/value-semantics/colorSemantics.d.ts +6 -60
  47. package/dist/css/value-semantics/colorSemantics.js +9 -40
  48. package/dist/css/value-semantics/cssSyntax.d.ts +10 -10
  49. package/dist/css/value-semantics/cssSyntax.js +39 -11
  50. package/dist/css/value-semantics/fontSemantics.d.ts +3 -19
  51. package/dist/css/value-semantics/fontSemantics.js +7 -25
  52. package/dist/css/value-semantics/index.d.ts +1 -12
  53. package/dist/css/value-semantics/index.js +1 -12
  54. package/dist/css/value-semantics/propertyPolicy.d.ts +6 -53
  55. package/dist/css/value-semantics/propertyPolicy.js +47 -59
  56. package/dist/css/value-semantics/stringMaps.d.ts +0 -1
  57. package/dist/css/value-semantics/structuredValues.d.ts +3 -37
  58. package/dist/css/value-semantics/structuredValues.js +6 -17
  59. package/dist/css/value-semantics/tokenInterpretation.d.ts +8 -50
  60. package/dist/css/value-semantics/tokenInterpretation.js +7 -21
  61. package/dist/hosts/astro/astroRuntimeConfig.d.ts +0 -1
  62. package/dist/hosts/astro/astroRuntimeConfig.js +0 -1
  63. package/dist/hosts/astro/clientAsset.d.ts +1 -5
  64. package/dist/hosts/astro/clientAsset.js +1 -5
  65. package/dist/hosts/astro/clientTransport.d.ts +0 -1
  66. package/dist/hosts/astro/clientTransport.js +4 -9
  67. package/dist/hosts/astro/integration.d.ts +2 -28
  68. package/dist/hosts/astro/integration.js +7 -36
  69. package/dist/hosts/astro/markdownIdentity.d.ts +0 -3
  70. package/dist/hosts/astro/markdownIdentity.js +0 -3
  71. package/dist/hosts/astro/middleware.d.ts +1 -12
  72. package/dist/hosts/astro/middleware.js +1 -12
  73. package/dist/hosts/astro/projectContext.d.ts +1 -9
  74. package/dist/hosts/astro/projectContext.js +2 -11
  75. package/dist/hosts/astro/responseInstrumentation.d.ts +4 -33
  76. package/dist/hosts/astro/responseInstrumentation.js +5 -34
  77. package/dist/hosts/environment.d.ts +0 -8
  78. package/dist/hosts/environment.js +0 -1
  79. package/dist/hosts/next/index.js +1 -3
  80. package/dist/hosts/next/loader.d.ts +5 -44
  81. package/dist/hosts/next/loader.js +22 -103
  82. package/dist/hosts/next/loaders/identity-loader.cjs +111 -65
  83. package/dist/hosts/next/loaders/loader-plugin.cjs +111 -65
  84. package/dist/hosts/next/manifest.d.ts +2 -16
  85. package/dist/hosts/next/manifest.js +18 -20
  86. package/dist/hosts/next/mount.d.ts +1 -11
  87. package/dist/hosts/next/mount.js +1 -11
  88. package/dist/hosts/next/repositoryScope.d.ts +2 -17
  89. package/dist/hosts/next/repositoryScope.js +2 -17
  90. package/dist/hosts/next/sidecar.d.ts +0 -13
  91. package/dist/hosts/next/sidecar.js +25 -110
  92. package/dist/hosts/next/wrapper.d.ts +0 -31
  93. package/dist/hosts/next/wrapper.js +13 -64
  94. package/dist/hosts/projectBridge.d.ts +0 -2
  95. package/dist/hosts/projectBridge.js +0 -2
  96. package/dist/hosts/reactRendererCapture.d.ts +2 -0
  97. package/dist/hosts/reactRendererCapture.js +12 -0
  98. package/dist/hosts/static/cli.d.ts +0 -4
  99. package/dist/hosts/static/cli.js +0 -3
  100. package/dist/hosts/static/html/bootstrap.d.ts +1 -18
  101. package/dist/hosts/static/html/bootstrap.js +2 -14
  102. package/dist/hosts/static/manifest.d.ts +2 -15
  103. package/dist/hosts/static/manifest.js +5 -18
  104. package/dist/hosts/static/server.d.ts +4 -38
  105. package/dist/hosts/static/server.js +17 -67
  106. package/dist/hosts/vite/index.d.ts +0 -10
  107. package/dist/hosts/vite/index.js +0 -10
  108. package/dist/hosts/vite/react.d.ts +4 -17
  109. package/dist/hosts/vite/react.js +18 -35
  110. package/dist/hosts/vite/tokens/activeStylesheets.d.ts +1 -10
  111. package/dist/hosts/vite/tokens/activeStylesheets.js +3 -8
  112. package/dist/hosts/vite/tokens/fileMap.d.ts +0 -1
  113. package/dist/hosts/vite/tokens/viteStylesheetArtifacts.d.ts +2 -15
  114. package/dist/hosts/vite/tokens/viteStylesheetArtifacts.js +3 -10
  115. package/dist/hosts/vite/vite.d.ts +5 -26
  116. package/dist/hosts/vite/vite.js +44 -80
  117. package/dist/html/dom.d.ts +0 -1
  118. package/dist/html/dom.js +0 -1
  119. package/dist/html/identity.d.ts +1 -15
  120. package/dist/html/identity.js +1 -8
  121. package/dist/html/insertions.d.ts +2 -8
  122. package/dist/html/insertions.js +1 -1
  123. package/dist/inspector/agent/McpConnectionDialog.d.ts +1 -6
  124. package/dist/inspector/agent/McpConnectionDialog.js +1 -6
  125. package/dist/inspector/agent/activity.d.ts +1 -1
  126. package/dist/inspector/agent/activity.js +1 -1
  127. package/dist/inspector/agent/client.d.ts +2 -26
  128. package/dist/inspector/agent/client.js +17 -64
  129. package/dist/inspector/agent/connectionStatus.d.ts +0 -1
  130. package/dist/inspector/agent/connectionStatus.js +0 -1
  131. package/dist/inspector/agent/httpTransport.d.ts +0 -8
  132. package/dist/inspector/agent/httpTransport.js +21 -39
  133. package/dist/inspector/agent/protocol.d.ts +1 -10
  134. package/dist/inspector/agent/protocol.js +1 -9
  135. package/dist/inspector/agent/verification.d.ts +2 -19
  136. package/dist/inspector/agent/verification.js +7 -43
  137. package/dist/inspector/boot.d.ts +3 -1
  138. package/dist/inspector/boot.js +12 -20
  139. package/dist/inspector/canvas/AgentActivityOverlay.d.ts +1 -1
  140. package/dist/inspector/canvas/AgentActivityOverlay.js +1 -1
  141. package/dist/inspector/canvas/CanvasCard.js +7 -14
  142. package/dist/inspector/canvas/CanvasElementOverlay.js +117 -50
  143. package/dist/inspector/canvas/CanvasWorkspace.js +15 -29
  144. package/dist/inspector/canvas/PageCard.d.ts +0 -1
  145. package/dist/inspector/canvas/PageCard.js +0 -1
  146. package/dist/inspector/canvas/SketchToolOptions.d.ts +0 -1
  147. package/dist/inspector/canvas/SketchToolOptions.js +0 -6
  148. package/dist/inspector/canvas/ToolOptionsDrawer.d.ts +1 -6
  149. package/dist/inspector/canvas/ToolOptionsDrawer.js +2 -8
  150. package/dist/inspector/canvas/activeCanvasDocument.d.ts +0 -2
  151. package/dist/inspector/canvas/activeCanvasDocument.js +0 -2
  152. package/dist/inspector/canvas/agentPresentation.d.ts +2 -13
  153. package/dist/inspector/canvas/agentPresentation.js +3 -14
  154. package/dist/inspector/canvas/canvasFrame.d.ts +2 -6
  155. package/dist/inspector/canvas/canvasFrame.js +1 -2
  156. package/dist/inspector/canvas/canvasResize.d.ts +1 -6
  157. package/dist/inspector/canvas/canvasResize.js +1 -6
  158. package/dist/inspector/canvas/canvasStore.d.ts +4 -12
  159. package/dist/inspector/canvas/canvasStore.js +12 -26
  160. package/dist/inspector/canvas/frameConnection.d.ts +1 -7
  161. package/dist/inspector/canvas/frameContent.d.ts +0 -1
  162. package/dist/inspector/canvas/frameLifecycle.d.ts +12 -0
  163. package/dist/inspector/canvas/frameLifecycle.js +11 -0
  164. package/dist/inspector/canvas/frameProtocol.d.ts +5 -40
  165. package/dist/inspector/canvas/frameProtocol.js +1 -24
  166. package/dist/inspector/canvas/frameScrollbarStyles.d.ts +0 -1
  167. package/dist/inspector/canvas/frameScrollbarStyles.js +0 -1
  168. package/dist/inspector/canvas/layout.d.ts +10 -22
  169. package/dist/inspector/canvas/layout.js +0 -3
  170. package/dist/inspector/canvas/normalizeUrl.js +1 -8
  171. package/dist/inspector/canvas/pageSurface.d.ts +1 -6
  172. package/dist/inspector/canvas/pageSurface.js +1 -6
  173. package/dist/inspector/canvas/projection.d.ts +4 -25
  174. package/dist/inspector/canvas/projection.js +22 -72
  175. package/dist/inspector/canvas/rendererBootstrap.d.ts +8 -1
  176. package/dist/inspector/canvas/rendererBootstrap.js +6 -14
  177. package/dist/inspector/canvas/rendererCidIndex.d.ts +0 -5
  178. package/dist/inspector/canvas/rendererCidIndex.js +0 -5
  179. package/dist/inspector/canvas/rendererElementSelector.js +29 -27
  180. package/dist/inspector/canvas/rendererMessageRouter.d.ts +0 -1
  181. package/dist/inspector/canvas/rendererMessageRouter.js +0 -1
  182. package/dist/inspector/canvas/rendererSelectionProxy.d.ts +1 -5
  183. package/dist/inspector/canvas/rendererSelectionProxy.js +2 -7
  184. package/dist/inspector/canvas/rendererStylesheet.d.ts +0 -1
  185. package/dist/inspector/canvas/rendererStylesheet.js +9 -2
  186. package/dist/inspector/canvas/resizeHandleScale.d.ts +1 -10
  187. package/dist/inspector/canvas/resizeHandleScale.js +1 -10
  188. package/dist/inspector/canvas/sessionStore.d.ts +1 -7
  189. package/dist/inspector/canvas/sessionStore.js +21 -34
  190. package/dist/inspector/canvas/staleChangeDetector.js +1 -4
  191. package/dist/inspector/canvas/toolbarScale.d.ts +1 -4
  192. package/dist/inspector/canvas/toolbarScale.js +1 -4
  193. package/dist/inspector/canvas/useCanvasLayoutAnimation.d.ts +0 -1
  194. package/dist/inspector/canvas/useCanvasLayoutAnimation.js +0 -1
  195. package/dist/inspector/canvas/viewStore.js +1 -1
  196. package/dist/inspector/canvas/wheelPan.d.ts +1 -1
  197. package/dist/inspector/canvas/wheelPan.js +1 -1
  198. package/dist/inspector/canvas/workspaceLease.d.ts +1 -5
  199. package/dist/inspector/canvas/workspaceLease.js +1 -7
  200. package/dist/inspector/changes/codecs.js +2 -1
  201. package/dist/inspector/changes/draftPreview.d.ts +1 -6
  202. package/dist/inspector/changes/draftPreview.js +15 -30
  203. package/dist/inspector/changes/editModel.d.ts +3 -13
  204. package/dist/inspector/changes/editModel.js +1 -2
  205. package/dist/inspector/changes/managedStyleProjection.js +4 -14
  206. package/dist/inspector/changes/model.d.ts +0 -5
  207. package/dist/inspector/changes/model.js +1 -8
  208. package/dist/inspector/changes/previewDiagnostics.d.ts +2 -12
  209. package/dist/inspector/changes/previewDiagnostics.js +4 -20
  210. package/dist/inspector/changes/previewVerification.d.ts +25 -0
  211. package/dist/inspector/changes/previewVerification.js +34 -0
  212. package/dist/inspector/changes/structuralTypes.d.ts +2 -4
  213. package/dist/inspector/changes/types.d.ts +3 -10
  214. package/dist/inspector/clientManifest.d.ts +17 -6
  215. package/dist/inspector/clientManifest.js +16 -3
  216. package/dist/inspector/comments/CommentsOverlay.js +48 -7
  217. package/dist/inspector/comments/element.d.ts +1 -2
  218. package/dist/inspector/comments/element.js +1 -2
  219. package/dist/inspector/comments/store.d.ts +1 -1
  220. package/dist/inspector/comments/store.js +1 -1
  221. package/dist/inspector/comments/verification.d.ts +8 -2
  222. package/dist/inspector/comments/verification.js +18 -10
  223. package/dist/inspector/componentSemantics/ComponentPropsSection.d.ts +8 -0
  224. package/dist/inspector/componentSemantics/ComponentPropsSection.js +10 -7
  225. package/dist/inspector/componentSemantics/adapterRegistry.d.ts +2 -9
  226. package/dist/inspector/componentSemantics/adapterRegistry.js +2 -9
  227. package/dist/inspector/componentSemantics/changeModel.js +2 -4
  228. package/dist/inspector/componentSemantics/react/callsites.d.ts +28 -0
  229. package/dist/inspector/componentSemantics/react/callsites.js +261 -0
  230. package/dist/inspector/componentSemantics/react/devtoolsHook.d.ts +23 -0
  231. package/dist/inspector/componentSemantics/react/devtoolsHook.js +71 -0
  232. package/dist/inspector/componentSemantics/react/fibers.d.ts +17 -0
  233. package/dist/inspector/componentSemantics/react/fibers.js +30 -0
  234. package/dist/inspector/componentSemantics/{reactRuntime.d.ts → react/runtime.d.ts} +3 -2
  235. package/dist/inspector/componentSemantics/{reactRuntime.js → react/runtime.js} +70 -53
  236. package/dist/inspector/componentSemantics/runtimeBridge.d.ts +2 -18
  237. package/dist/inspector/componentSemantics/runtimeBridge.js +5 -19
  238. package/dist/inspector/componentSemantics/textBinding.d.ts +1 -9
  239. package/dist/inspector/componentSemantics/textBinding.js +16 -42
  240. package/dist/inspector/componentSemantics/types.d.ts +8 -27
  241. package/dist/inspector/componentSemantics/types.js +0 -1
  242. package/dist/inspector/conformance/borderCases.d.ts +0 -5
  243. package/dist/inspector/conformance/borderCases.js +0 -5
  244. package/dist/inspector/conformance/colorCases.d.ts +0 -6
  245. package/dist/inspector/conformance/colorCases.js +0 -6
  246. package/dist/inspector/conformance/fixture.d.ts +1 -5
  247. package/dist/inspector/conformance/fixture.js +1 -5
  248. package/dist/inspector/conformance/spacingCases.d.ts +0 -4
  249. package/dist/inspector/conformance/spacingCases.js +0 -4
  250. package/dist/inspector/conformance/typographyCases.d.ts +0 -5
  251. package/dist/inspector/conformance/typographyCases.js +0 -5
  252. package/dist/inspector/drafts/draftStore.d.ts +7 -21
  253. package/dist/inspector/drafts/draftStore.js +15 -5
  254. package/dist/inspector/drafts/model.d.ts +7 -15
  255. package/dist/inspector/drafts/model.js +0 -2
  256. package/dist/inspector/drafts/store.d.ts +1 -8
  257. package/dist/inspector/drafts/store.js +3 -10
  258. package/dist/inspector/editScope.d.ts +0 -1
  259. package/dist/inspector/editScope.js +0 -1
  260. package/dist/inspector/inline-text/inlineTextDiagnostics.d.ts +0 -2
  261. package/dist/inspector/inline-text/inlineTextDiagnostics.js +0 -2
  262. package/dist/inspector/inline-text/inlineTextEditor.d.ts +2 -8
  263. package/dist/inspector/inline-text/inlineTextEditor.js +26 -79
  264. package/dist/inspector/inline-text/inlineTextLifecycle.js +1 -6
  265. package/dist/inspector/inline-text/textEditChange.d.ts +0 -1
  266. package/dist/inspector/inspection/bridge.d.ts +2 -6
  267. package/dist/inspector/inspection/bridge.js +4 -12
  268. package/dist/inspector/inspection/browserCssInspection.d.ts +4 -11
  269. package/dist/inspector/inspection/browserCssInspection.js +4 -8
  270. package/dist/inspector/inspection/browserCssInspectionRegistry.d.ts +0 -7
  271. package/dist/inspector/inspection/browserCssInspectionRegistry.js +1 -16
  272. package/dist/inspector/inspection/selectionProperty.d.ts +1 -6
  273. package/dist/inspector/inspection/selectionProperty.js +1 -5
  274. package/dist/inspector/inspection/useBrowserCssInspection.d.ts +1 -5
  275. package/dist/inspector/inspection/useBrowserCssInspection.js +5 -21
  276. package/dist/inspector/iterations/capture.d.ts +0 -1
  277. package/dist/inspector/iterations/capture.js +4 -9
  278. package/dist/inspector/iterations/client.d.ts +0 -1
  279. package/dist/inspector/iterations/client.js +0 -1
  280. package/dist/inspector/iterations/coordinator.d.ts +0 -1
  281. package/dist/inspector/iterations/coordinator.js +0 -1
  282. package/dist/inspector/iterations/prompt.d.ts +0 -1
  283. package/dist/inspector/iterations/prompt.js +0 -1
  284. package/dist/inspector/overlay/DomNavigator.d.ts +3 -1
  285. package/dist/inspector/overlay/DomNavigator.js +39 -15
  286. package/dist/inspector/overlay/DropGuideOverlay.d.ts +0 -1
  287. package/dist/inspector/overlay/DropGuideOverlay.js +0 -1
  288. package/dist/inspector/overlay/MeasurementGuideOverlay.d.ts +1 -8
  289. package/dist/inspector/overlay/MeasurementGuideOverlay.js +1 -5
  290. package/dist/inspector/overlay/clickPolicy.d.ts +3 -14
  291. package/dist/inspector/overlay/clickPolicy.js +3 -14
  292. package/dist/inspector/overlay/dropGuide.d.ts +0 -3
  293. package/dist/inspector/overlay/dropGuide.js +0 -3
  294. package/dist/inspector/overlay/frameThrottle.d.ts +0 -1
  295. package/dist/inspector/overlay/frameThrottle.js +0 -1
  296. package/dist/inspector/overlay/interactionStyles.d.ts +1 -1
  297. package/dist/inspector/overlay/interactionStyles.js +2 -8
  298. package/dist/inspector/overlay/measurementGeometry.js +4 -12
  299. package/dist/inspector/overlay/selectedGeometry.d.ts +1 -6
  300. package/dist/inspector/overlay/selectedGeometry.js +1 -8
  301. package/dist/inspector/overlay/spacingGestures.d.ts +14 -21
  302. package/dist/inspector/overlay/spacingGestures.js +151 -31
  303. package/dist/inspector/overlay/structuralGestures.d.ts +2 -9
  304. package/dist/inspector/overlay/structuralGestures.js +1 -4
  305. package/dist/inspector/pageInspector.d.ts +4 -13
  306. package/dist/inspector/pageInspector.js +25 -32
  307. package/dist/inspector/projection/cssEscapes.d.ts +0 -1
  308. package/dist/inspector/projection/cssEscapes.js +2 -4
  309. package/dist/inspector/projection/draftProjection.d.ts +2 -14
  310. package/dist/inspector/projection/draftProjection.js +1 -8
  311. package/dist/inspector/projection/managedStylesheet.d.ts +1 -7
  312. package/dist/inspector/projection/managedStylesheet.js +4 -22
  313. package/dist/inspector/projection/renderedInstance.d.ts +5 -28
  314. package/dist/inspector/projection/renderedInstance.js +6 -32
  315. package/dist/inspector/projection/structuralProjection.d.ts +7 -39
  316. package/dist/inspector/projection/structuralProjection.js +17 -52
  317. package/dist/inspector/projection/textProjection.d.ts +2 -14
  318. package/dist/inspector/projection/textProjection.js +17 -70
  319. package/dist/inspector/prompt/PromptSettingsDialog.d.ts +0 -1
  320. package/dist/inspector/prompt/PromptSettingsDialog.js +0 -1
  321. package/dist/inspector/prompt/clipboardHandoff.d.ts +1 -9
  322. package/dist/inspector/prompt/clipboardHandoff.js +1 -9
  323. package/dist/inspector/prompt/generatePrompt.d.ts +1 -1
  324. package/dist/inspector/prompt/generatePrompt.js +10 -25
  325. package/dist/inspector/prompt/promptSettings.d.ts +0 -3
  326. package/dist/inspector/prompt/promptSettings.js +0 -3
  327. package/dist/inspector/runtime/devFlag.d.ts +2 -25
  328. package/dist/inspector/runtime/devFlag.js +4 -31
  329. package/dist/inspector/runtime/documentStylesheetOrder.d.ts +0 -2
  330. package/dist/inspector/runtime/editorShell.d.ts +0 -1
  331. package/dist/inspector/runtime/editorShell.js +0 -1
  332. package/dist/inspector/runtime/inspectorStorage.d.ts +1 -7
  333. package/dist/inspector/runtime/inspectorStorage.js +1 -6
  334. package/dist/inspector/runtime/ownedStylesheets.d.ts +2 -8
  335. package/dist/inspector/runtime/ownedStylesheets.js +2 -8
  336. package/dist/inspector/runtime/runtimeConfig.d.ts +12 -86
  337. package/dist/inspector/runtime/runtimeConfig.js +9 -50
  338. package/dist/inspector/runtime/runtimeIdentityClaims.d.ts +3 -13
  339. package/dist/inspector/runtime/runtimeIdentityClaims.js +9 -19
  340. package/dist/inspector/runtime/staticHtmlRuntimeIdentity.d.ts +4 -36
  341. package/dist/inspector/runtime/staticHtmlRuntimeIdentity.js +7 -40
  342. package/dist/inspector/runtime/useRuntimeConfig.d.ts +1 -8
  343. package/dist/inspector/runtime/useRuntimeConfig.js +1 -8
  344. package/dist/inspector/selection/editScope.d.ts +1 -7
  345. package/dist/inspector/selection/editScope.js +2 -12
  346. package/dist/inspector/selection/editTarget.d.ts +1 -5
  347. package/dist/inspector/selection/hierarchy.d.ts +11 -11
  348. package/dist/inspector/selection/hierarchy.js +42 -24
  349. package/dist/inspector/selection/selectionStore.d.ts +0 -3
  350. package/dist/inspector/selection/selectionStore.js +5 -16
  351. package/dist/inspector/selection/sourceSite.d.ts +1 -5
  352. package/dist/inspector/selection/sourceSite.js +2 -8
  353. package/dist/inspector/selection/styleSelection.d.ts +1 -5
  354. package/dist/inspector/selection/styleSelection.js +1 -5
  355. package/dist/inspector/session/lifecycle.d.ts +1 -9
  356. package/dist/inspector/session/lifecycle.js +0 -1
  357. package/dist/inspector/session/sessionContext.d.ts +0 -4
  358. package/dist/inspector/session/sessionContext.js +0 -4
  359. package/dist/inspector/session/sessionFactory.d.ts +0 -9
  360. package/dist/inspector/session/sessionFactory.js +0 -6
  361. package/dist/inspector/settings/SettingsDialog.d.ts +0 -1
  362. package/dist/inspector/settings/SettingsDialog.js +5 -3
  363. package/dist/inspector/shell/AgentStatusButton.d.ts +3 -2
  364. package/dist/inspector/shell/AgentStatusButton.js +5 -5
  365. package/dist/inspector/shell/ChangesLog.js +3 -4
  366. package/dist/inspector/shell/CopyPromptButton.d.ts +2 -1
  367. package/dist/inspector/shell/CopyPromptButton.js +12 -11
  368. package/dist/inspector/shell/InspectorEditors.d.ts +16 -0
  369. package/dist/inspector/shell/InspectorEditors.js +14 -0
  370. package/dist/inspector/shell/InspectorPanel.d.ts +12 -0
  371. package/dist/inspector/shell/InspectorPanel.js +8 -0
  372. package/dist/inspector/shell/InspectorSelection.d.ts +24 -0
  373. package/dist/inspector/shell/InspectorSelection.js +20 -0
  374. package/dist/inspector/shell/InspectorShell.js +26 -48
  375. package/dist/inspector/shell/NudgeLogoIcon.d.ts +5 -0
  376. package/dist/inspector/shell/NudgeLogoIcon.js +5 -0
  377. package/dist/inspector/shell/PeekOriginalButton.d.ts +0 -5
  378. package/dist/inspector/shell/PeekOriginalButton.js +0 -5
  379. package/dist/inspector/shell/PeekOriginalIcon.d.ts +0 -5
  380. package/dist/inspector/shell/PeekOriginalIcon.js +0 -5
  381. package/dist/inspector/shell/PromptActionButton.d.ts +21 -0
  382. package/dist/inspector/shell/PromptActionButton.js +14 -0
  383. package/dist/inspector/shell/elementName.d.ts +5 -0
  384. package/dist/inspector/shell/elementName.js +29 -0
  385. package/dist/inspector/shell/interactionStatePreview.d.ts +1 -4
  386. package/dist/inspector/shell/interactionStatePreview.js +3 -8
  387. package/dist/inspector/shell/originalPreview.d.ts +1 -6
  388. package/dist/inspector/shell/originalPreview.js +1 -6
  389. package/dist/inspector/shell/stateValue.d.ts +1 -2
  390. package/dist/inspector/shell/stateValue.js +2 -5
  391. package/dist/inspector/shell/styleState.d.ts +1 -2
  392. package/dist/inspector/shell/styleState.js +1 -2
  393. package/dist/inspector/sketch/SketchEditor.js +0 -1
  394. package/dist/inspector/sketch/SketchFrameOverlay.js +8 -12
  395. package/dist/inspector/sketch/SketchOverlay.js +5 -6
  396. package/dist/inspector/sketch/SketchPromptPanel.d.ts +0 -1
  397. package/dist/inspector/sketch/SketchPromptPanel.js +0 -1
  398. package/dist/inspector/sketch/SketchWorkspace.js +2 -4
  399. package/dist/inspector/sketch/capture.d.ts +12 -3
  400. package/dist/inspector/sketch/capture.js +12 -11
  401. package/dist/inspector/sketch/copySketch.d.ts +1 -7
  402. package/dist/inspector/sketch/copySketch.js +2 -11
  403. package/dist/inspector/sketch/drawingTools.d.ts +1 -3
  404. package/dist/inspector/sketch/drawingTools.js +1 -2
  405. package/dist/inspector/sketch/frameHeading.d.ts +1 -7
  406. package/dist/inspector/sketch/frameHeading.js +1 -8
  407. package/dist/inspector/sketch/freehand.d.ts +0 -1
  408. package/dist/inspector/sketch/freehand.js +0 -1
  409. package/dist/inspector/sketch/geometry.d.ts +1 -6
  410. package/dist/inspector/sketch/geometry.js +1 -6
  411. package/dist/inspector/sketch/handoff.js +0 -1
  412. package/dist/inspector/sketch/history.d.ts +1 -5
  413. package/dist/inspector/sketch/history.js +1 -4
  414. package/dist/inspector/sketch/interaction.d.ts +2 -2
  415. package/dist/inspector/sketch/interaction.js +2 -2
  416. package/dist/inspector/sketch/model.d.ts +2 -9
  417. package/dist/inspector/sketch/model.js +2 -19
  418. package/dist/inspector/sketch/persistence.d.ts +0 -1
  419. package/dist/inspector/sketch/persistence.js +2 -2
  420. package/dist/inspector/sketch/raster.d.ts +1 -4
  421. package/dist/inspector/sketch/raster.js +2 -8
  422. package/dist/inspector/sketch/store.js +2 -3
  423. package/dist/inspector/sketch/videoFrames.js +2 -3
  424. package/dist/inspector/spacing/projection.d.ts +0 -8
  425. package/dist/inspector/spacing/projection.js +38 -20
  426. package/dist/inspector/styleEditors/BackgroundEditor.js +1 -1
  427. package/dist/inspector/styleEditors/BorderEditor.js +1 -6
  428. package/dist/inspector/styleEditors/ChildPlacement.d.ts +12 -0
  429. package/dist/inspector/styleEditors/ChildPlacement.js +9 -0
  430. package/dist/inspector/styleEditors/FlexControls.d.ts +35 -0
  431. package/dist/inspector/styleEditors/FlexControls.js +158 -0
  432. package/dist/inspector/styleEditors/GapField.d.ts +5 -2
  433. package/dist/inspector/styleEditors/GapField.js +3 -4
  434. package/dist/inspector/styleEditors/GridChildSection.d.ts +0 -5
  435. package/dist/inspector/styleEditors/GridChildSection.js +0 -5
  436. package/dist/inspector/styleEditors/GridPicker.d.ts +1 -1
  437. package/dist/inspector/styleEditors/GridPicker.js +2 -4
  438. package/dist/inspector/styleEditors/GridSection.d.ts +10 -8
  439. package/dist/inspector/styleEditors/GridSection.js +22 -9
  440. package/dist/inspector/styleEditors/GridValueField.d.ts +1 -5
  441. package/dist/inspector/styleEditors/GridValueField.js +2 -8
  442. package/dist/inspector/styleEditors/ImageBackgroundEditor.d.ts +0 -1
  443. package/dist/inspector/styleEditors/ImageBackgroundEditor.js +0 -1
  444. package/dist/inspector/styleEditors/LayoutBlockedIndicator.d.ts +0 -1
  445. package/dist/inspector/styleEditors/LayoutBlockedIndicator.js +0 -1
  446. package/dist/inspector/styleEditors/LayoutComboField.js +0 -5
  447. package/dist/inspector/styleEditors/LayoutModeRow.d.ts +14 -0
  448. package/dist/inspector/styleEditors/LayoutModeRow.js +60 -0
  449. package/dist/inspector/styleEditors/LayoutSection.d.ts +2 -2
  450. package/dist/inspector/styleEditors/LayoutSection.js +30 -356
  451. package/dist/inspector/styleEditors/OpacityEditor.js +7 -5
  452. package/dist/inspector/styleEditors/PositionControls.d.ts +18 -0
  453. package/dist/inspector/styleEditors/PositionControls.js +16 -0
  454. package/dist/inspector/styleEditors/SizeSection.d.ts +18 -0
  455. package/dist/inspector/styleEditors/SizeSection.js +71 -0
  456. package/dist/inspector/styleEditors/{SpacingBox.d.ts → SpacingField.d.ts} +3 -10
  457. package/dist/inspector/styleEditors/{SpacingBox.js → SpacingField.js} +15 -29
  458. package/dist/inspector/styleEditors/Typography.js +2 -4
  459. package/dist/inspector/styleEditors/borderModel.d.ts +1 -7
  460. package/dist/inspector/styleEditors/borderModel.js +2 -11
  461. package/dist/inspector/styleEditors/completeCssValue.d.ts +1 -5
  462. package/dist/inspector/styleEditors/completeCssValue.js +3 -13
  463. package/dist/inspector/styleEditors/fieldValue.d.ts +20 -0
  464. package/dist/inspector/styleEditors/fieldValue.js +26 -0
  465. package/dist/inspector/styleEditors/gradientValue.d.ts +1 -1
  466. package/dist/inspector/styleEditors/gradientValue.js +3 -2
  467. package/dist/inspector/styleEditors/gridChildModel.d.ts +7 -47
  468. package/dist/inspector/styleEditors/gridChildModel.js +6 -37
  469. package/dist/inspector/styleEditors/hiddenSizeOverrides.d.ts +5 -0
  470. package/dist/inspector/styleEditors/hiddenSizeOverrides.js +42 -0
  471. package/dist/inspector/styleEditors/inlineAuthored.d.ts +1 -8
  472. package/dist/inspector/styleEditors/inlineAuthored.js +3 -17
  473. package/dist/inspector/styleEditors/layoutMode.d.ts +15 -0
  474. package/dist/inspector/styleEditors/layoutMode.js +33 -0
  475. package/dist/inspector/styleEditors/layoutPreviewState.d.ts +0 -1
  476. package/dist/inspector/styleEditors/layoutPreviewState.js +0 -1
  477. package/dist/inspector/styleEditors/layoutValue.d.ts +2 -8
  478. package/dist/inspector/styleEditors/layoutValue.js +4 -12
  479. package/dist/inspector/styleEditors/nudgeValue.d.ts +1 -13
  480. package/dist/inspector/styleEditors/nudgeValue.js +1 -13
  481. package/dist/inspector/styleEditors/rowLookup.d.ts +1 -5
  482. package/dist/inspector/styleEditors/rowLookup.js +1 -5
  483. package/dist/inspector/styleEditors/stringRecord.d.ts +1 -2
  484. package/dist/inspector/styleEditors/stylePresence.d.ts +0 -2
  485. package/dist/inspector/styleEditors/stylePresence.js +1 -4
  486. package/dist/inspector/styleEditors/textRelevance.d.ts +1 -1
  487. package/dist/inspector/styleEditors/textRelevance.js +1 -1
  488. package/dist/inspector/styleEditors/useFieldVisibility.js +1 -2
  489. package/dist/inspector/styleEditors/useLayoutContext.d.ts +13 -0
  490. package/dist/inspector/styleEditors/useLayoutContext.js +53 -0
  491. package/dist/inspector/styleEditors/valuePolicy.d.ts +1 -5
  492. package/dist/inspector/styleEditors/valuePolicy.js +0 -1
  493. package/dist/inspector/testing.d.ts +1 -4
  494. package/dist/inspector/testing.js +1 -4
  495. package/dist/inspector/tokens/TokenChip.d.ts +1 -4
  496. package/dist/inspector/tokens/TokenChip.js +1 -4
  497. package/dist/inspector/tokens/TokenField.d.ts +4 -3
  498. package/dist/inspector/tokens/TokenField.js +19 -29
  499. package/dist/inspector/tokens/catalog.d.ts +2 -10
  500. package/dist/inspector/tokens/catalog.js +5 -12
  501. package/dist/inspector/tokens/dragPointerLock.d.ts +0 -1
  502. package/dist/inspector/tokens/dragPointerLock.js +2 -3
  503. package/dist/inspector/tokens/editActions.d.ts +1 -1
  504. package/dist/inspector/tokens/editActions.js +2 -4
  505. package/dist/inspector/tokens/resolution/cascade.d.ts +1 -5
  506. package/dist/inspector/tokens/resolution/cascade.js +1 -5
  507. package/dist/inspector/tokens/resolution/containerQueryEvaluator.d.ts +1 -5
  508. package/dist/inspector/tokens/resolution/containerQueryEvaluator.js +1 -5
  509. package/dist/inspector/tokens/resolution/cssomCollector.d.ts +4 -19
  510. package/dist/inspector/tokens/resolution/cssomCollector.js +151 -122
  511. package/dist/inspector/tokens/resolution/nestedSelectors.d.ts +1 -5
  512. package/dist/inspector/tokens/resolution/nestedSelectors.js +1 -5
  513. package/dist/inspector/tokens/resolution/ruleMatching.d.ts +4 -14
  514. package/dist/inspector/tokens/resolution/ruleMatching.js +121 -67
  515. package/dist/inspector/tokens/resolution/selectorSemantics.d.ts +3 -14
  516. package/dist/inspector/tokens/resolution/selectorSemantics.js +12 -27
  517. package/dist/inspector/tokens/resolution.d.ts +5 -24
  518. package/dist/inspector/tokens/resolution.js +16 -71
  519. package/dist/inspector/tokens/tokenAvailability.d.ts +2 -14
  520. package/dist/inspector/tokens/tokenAvailability.js +6 -38
  521. package/dist/inspector/tokens/valueSemanticsAdapter.d.ts +0 -1
  522. package/dist/inspector/tokens/valueSemanticsAdapter.js +18 -2
  523. package/dist/inspector/ui/AtRuleContext.d.ts +5 -5
  524. package/dist/inspector/ui/AtRuleContext.js +8 -6
  525. package/dist/inspector/ui/ControlSurface.d.ts +0 -4
  526. package/dist/inspector/ui/Disclosure.d.ts +0 -5
  527. package/dist/inspector/ui/Disclosure.js +0 -4
  528. package/dist/inspector/ui/InlineStyleWarning.d.ts +0 -1
  529. package/dist/inspector/ui/InspectorPopover.d.ts +1 -5
  530. package/dist/inspector/ui/InspectorPopover.js +1 -5
  531. package/dist/inspector/ui/SegmentedControl.d.ts +4 -4
  532. package/dist/inspector/ui/SegmentedControl.js +6 -4
  533. package/dist/inspector/ui/SideValuesField.d.ts +1 -6
  534. package/dist/inspector/ui/SideValuesField.js +2 -8
  535. package/dist/inspector/ui/Toast.d.ts +0 -4
  536. package/dist/inspector/ui/Toast.js +0 -4
  537. package/dist/inspector/ui/atRuleSegments.d.ts +13 -0
  538. package/dist/inspector/ui/atRuleSegments.js +34 -0
  539. package/dist/inspector/ui/classNames.d.ts +0 -1
  540. package/dist/inspector/ui/classNames.js +0 -1
  541. package/dist/inspector/ui/customCursors.d.ts +7 -1
  542. package/dist/inspector/ui/customCursors.js +2 -6
  543. package/dist/inspector/ui/styles.js +18 -20
  544. package/dist/inspector/workspace/controller.js +20 -1
  545. package/dist/inspector/workspace/handoff.d.ts +1 -5
  546. package/dist/inspector/workspace/handoff.js +1 -5
  547. package/dist/inspector/workspace/timeline.d.ts +5 -2
  548. package/dist/inspector/workspace/timeline.js +0 -1
  549. package/dist/internal/agent-protocol.d.ts +20 -42
  550. package/dist/internal/agent-protocol.js +18 -35
  551. package/dist/nudge-ui.mjs +75 -28
  552. package/dist/project/artifacts.js +24 -21
  553. package/dist/project/files.d.ts +0 -1
  554. package/dist/project/files.js +2 -9
  555. package/dist/project/identity.d.ts +1 -5
  556. package/dist/project/identity.js +1 -5
  557. package/dist/project/mcpPackage.d.ts +1 -6
  558. package/dist/project/mcpPackage.js +2 -7
  559. package/dist/project/pathPolicy.d.ts +1 -6
  560. package/dist/project/pathPolicy.js +1 -6
  561. package/dist/project/tokens.d.ts +2 -12
  562. package/dist/project/tokens.js +4 -15
  563. package/dist/transport/editor.d.ts +1 -12
  564. package/dist/transport/editor.js +2 -13
  565. package/dist/transport/index.d.ts +0 -5
  566. package/dist/transport/index.js +0 -5
  567. package/dist/transport/routes.d.ts +0 -5
  568. package/dist/transport/routes.js +0 -5
  569. package/package.json +5 -4
  570. package/dist/inspector/styleEditors/InsetSection.d.ts +0 -15
  571. package/dist/inspector/styleEditors/InsetSection.js +0 -15
  572. package/dist/inspector/styleEditors/PositionInsets.d.ts +0 -15
  573. package/dist/inspector/styleEditors/PositionInsets.js +0 -12
  574. package/dist/inspector/tokens/TokenDropdown.d.ts +0 -13
  575. package/dist/inspector/tokens/TokenDropdown.js +0 -59
@@ -63,13 +63,7 @@ function copyContribution(contribution) {
63
63
  function sameObservationFacts(observation, artifact) {
64
64
  return JSON.stringify(observation.artifact) === JSON.stringify(artifact);
65
65
  }
66
- /**
67
- * Scalar-only equality over stylesheet artifacts, used as a cheap pre-parse
68
- * no-op guard: identical re-feeds (the common HMR case) must not pay for a
69
- * PostCSS parse. Every field is enumerated so a future artifact field cannot
70
- * silently bypass the guard; diagnostics are rare and small, so they alone
71
- * compare by serialization — content strings never do.
72
- */
66
+ /** Each artifact field is enumerated so a new one cannot silently bypass the pre-parse no-op guard. */
73
67
  function sameArtifactScalars(a, b) {
74
68
  return a.buildTool === b.buildTool
75
69
  && a.id === b.id
@@ -136,8 +130,7 @@ function reconcileObservations(entry) {
136
130
  const authoredNames = new Set(authored?.contribution.definitions.map((definition) => definition.cssName) ?? []);
137
131
  return facts.contribution.definitions.map((definition) => {
138
132
  const transformOnly = authored !== undefined && !authoredNames.has(definition.cssName);
139
- // Project compilers own transform-only names, but package ownership is
140
- // stronger provenance and survives compilation.
133
+ // Transform-only names are compiler-owned; package provenance is stronger and survives compilation.
141
134
  const origin = transformOnly && facts.artifact.provenance !== "package"
142
135
  ? "generated"
143
136
  : facts.artifact.provenance;
@@ -256,8 +249,7 @@ export function createTokenInventory() {
256
249
  }
257
250
  const current = artifact.stage === "authored" ? entry.authored : entry.transformed;
258
251
  const isRecoveringFailedTransform = artifact.stage === "transformed" && entry.transformFailed === true;
259
- // Cheap pre-parse guard. A transformed-stage re-feed while the failure
260
- // flag is set always falls through so recovery still lands.
252
+ // A transformed-stage re-feed while the failure flag is set always falls through so recovery lands.
261
253
  if (current && !isRecoveringFailedTransform
262
254
  && sameArtifactScalars(current.artifact, artifact))
263
255
  return;
@@ -340,11 +332,7 @@ export function createTokenInventory() {
340
332
  };
341
333
  }
342
334
  }
343
- // Definition-level enrichment by cssName: contributed declarations
344
- // append, `name`/`adapter` win, and
345
- // `origin`/`editable` are applied only when the stylesheet-derived
346
- // definition has none. Unmatched entries are ignored (a contract
347
- // variable absent from active CSS adds no row).
335
+ // Contributed declarations append; name/adapter override, origin/editable only fill gaps.
348
336
  for (const definition of contribution.definitions ?? []) {
349
337
  const existing = merged.get(definition.cssName);
350
338
  if (!existing)
@@ -1,16 +1,8 @@
1
1
  import type { TokenDefinition } from "../model/index.js";
2
2
  import type { InventoryDiagnostic, StylesheetArtifact } from "./types.js";
3
- /** The parsed contribution of one stylesheet artifact. */
4
3
  export interface ParsedContribution {
5
4
  readonly definitions: readonly TokenDefinition[];
6
5
  readonly diagnostics: readonly InventoryDiagnostic[];
7
6
  }
8
- /**
9
- * Parse one stylesheet artifact into grouped definitions plus diagnostics.
10
- *
11
- * The returned declarations carry `id` (stable per declaration) and the
12
- * definition list preserves source order. `order` is assigned by the
13
- * inventory during snapshot assembly because it is a positional fact across
14
- * artifacts, not a per-artifact one.
15
- */
7
+ /** `order` is assigned by the inventory because it is positional across artifacts, not per-artifact. */
16
8
  export declare function parseStylesheetArtifact(artifact: StylesheetArtifact): ParsedContribution;
@@ -1,28 +1,6 @@
1
- /**
2
- * Internal ordinary-CSS parsing for the token inventory.
3
- *
4
- * This is the canonical home of the parsing previously owned by the plugin's
5
- * legacy `parseTokens`/`parseTokenCatalog` projections (removed in S2-D).
6
- * Behavior is preserved exactly for root/host themes, contextual selectors,
7
- * wrapper capture, duplicate declarations, importance, and source locations;
8
- * the two differences are:
9
- *
10
- * 1. Declarations carry a deterministic `id` and a `source`-anchored local
11
- * order so the inventory can aggregate without Vite.
12
- * 2. Malformed CSS no longer silently yields an empty list — it produces a
13
- * structured `stylesheet-parse-failed` diagnostic plus an empty
14
- * contribution for that artifact.
15
- *
16
- * This module runs at build time only (Node) and is not reachable from the
17
- * browser-safe subpaths.
18
- */
19
1
  import postcss, {} from "postcss";
20
2
  import { GLOBAL_TOKEN_AT_RULES, MIN_THEME_TABLE_DECLARATIONS } from "./policy.js";
21
- /**
22
- * Deterministic declaration identity, keyed by (artifact id, cssName, source
23
- * line, context, local order). The id does not depend on event-batch timing:
24
- * the same facts always produce the same ids.
25
- */
3
+ /** Deterministic per declaration: identical facts always produce the same id. */
26
4
  function declarationId(artifact, cssName, source, context, localOrder) {
27
5
  return `${artifact.buildTool}\u0000${artifact.id}\u0000${artifact.stage}`
28
6
  + `\u0000${cssName}\u0000${source}\u0000${JSON.stringify(context)}\u0000${localOrder}`;
@@ -37,12 +15,7 @@ function isRootOnlySelector(rule) {
37
15
  const parts = rule.selector.split(",").map((s) => s.trim());
38
16
  return parts.length > 0 && parts.every(isRootSelectorPart);
39
17
  }
40
- /**
41
- * Scoped theme-table policy — see `policy.ts` for the named constant and
42
- * rationale. A sufficiently large rule made entirely of custom properties is a
43
- * theme table, not a component-local variable declaration; its selector is
44
- * retained in the catalog and resolved against the selected element later.
45
- */
18
+ /** A large rule made entirely of custom properties is a theme table; see the policy in `policy.ts`. */
46
19
  function isScopedThemeTable(rule) {
47
20
  const declarations = rule.nodes?.filter((node) => node.type === "decl") ?? [];
48
21
  return declarations.length >= MIN_THEME_TABLE_DECLARATIONS
@@ -55,9 +28,7 @@ function isAtRule(node) {
55
28
  return node.type === "atrule";
56
29
  }
57
30
  function nearestGlobalAncestor(decl) {
58
- // Walk up; return true ONLY if we encounter a :root rule or a global at-rule
59
- // BEFORE encountering any non-:root rule. A non-:root rule (e.g. .button)
60
- // inside @layer still means the declaration is local, not a global token.
31
+ // Global only when a :root rule or global at-rule is reached before any other rule.
61
32
  let cur = decl.parent;
62
33
  while (cur) {
63
34
  if (isRule(cur)) {
@@ -84,8 +55,7 @@ function declarationContext(decl) {
84
55
  }
85
56
  else if (isAtRule(current)) {
86
57
  if (current.name === "media" || current.name === "supports" || current.name === "scope" || current.name === "layer") {
87
- // Parents are visited inner-to-outer; prepend to preserve the source
88
- // nesting order and retain repeated/interleaved wrapper kinds.
58
+ // Parents are visited inner-to-outer, so prepend to keep source nesting order.
89
59
  wrappers.unshift({ kind: current.name, params: current.params });
90
60
  }
91
61
  }
@@ -95,14 +65,7 @@ function declarationContext(decl) {
95
65
  context.wrappers = wrappers;
96
66
  return context;
97
67
  }
98
- /**
99
- * Parse one stylesheet artifact into grouped definitions plus diagnostics.
100
- *
101
- * The returned declarations carry `id` (stable per declaration) and the
102
- * definition list preserves source order. `order` is assigned by the
103
- * inventory during snapshot assembly because it is a positional fact across
104
- * artifacts, not a per-artifact one.
105
- */
68
+ /** `order` is assigned by the inventory because it is positional across artifacts, not per-artifact. */
106
69
  export function parseStylesheetArtifact(artifact) {
107
70
  const content = artifact.content ?? "";
108
71
  let root;
@@ -1,43 +1,6 @@
1
- /**
2
- * Explicit inventory policies behind ordinary CSS parsing.
3
- *
4
- * Parsing must not bury heuristics as unexplained constants. This module names
5
- * each policy, documents its rationale, and pins both directions of the
6
- * trade-off with tests in `parseStylesheet.test.ts`.
7
- */
8
- /**
9
- * At-rules that make a nested custom-property declaration global regardless of
10
- * an enclosing selector: `@theme` (Tailwind v4), `@layer`, and `@scope`.
11
- *
12
- * Deliberately NOT included: `@media`, `@supports`, and `@container`. A bare
13
- * custom property directly inside those wrappers (without `:root`/`:host`) is
14
- * not a global token — see the false-positive guards in the parsing tests.
15
- */
1
+ /** Custom properties directly under these at-rules are global; `@media`, `@supports` and `@container` deliberately are not. */
16
2
  export declare const GLOBAL_TOKEN_AT_RULES: Set<string>;
17
- /**
18
- * Minimum declaration count for a scoped rule to be treated as a theme table.
19
- *
20
- * Rationale: published design systems often scope an entire theme beneath a
21
- * class on the application shell (for example to support multiple themes on
22
- * one page) instead of `:root`. A rule that is large enough AND made entirely
23
- * of custom-property declarations is treated as a theme table, so its selector
24
- * is retained in the catalog and resolved against the selected element later.
25
- *
26
- * The threshold is a deliberately explicit policy with two documented edges,
27
- * both pinned by tests:
28
- *
29
- * - False positive: a component-local rule with many custom properties (at or
30
- * above the threshold) is admitted as a theme table even though it is local
31
- * to the component. Accepted so genuine multi-variable theme tables keep
32
- * working; a cleaner fix needs selector heuristics that are out of scope for
33
- * ordinary-CSS parsing.
34
- * - False negative: a real theme table with fewer than the threshold
35
- * declarations is rejected. Accepted so small component-local rules do not
36
- * leak into the global catalog.
37
- *
38
- * The threshold is a count of direct custom-property declarations on the rule,
39
- * not a line count and not an estimate of selector breadth.
40
- */
3
+ /** At or above this many direct custom-property declarations a scoped rule is treated as a theme table. */
41
4
  export declare const MIN_THEME_TABLE_DECLARATIONS = 8;
42
5
  export interface ScopedThemeTablePolicy {
43
6
  readonly minDeclarations: number;
@@ -1,43 +1,6 @@
1
- /**
2
- * Explicit inventory policies behind ordinary CSS parsing.
3
- *
4
- * Parsing must not bury heuristics as unexplained constants. This module names
5
- * each policy, documents its rationale, and pins both directions of the
6
- * trade-off with tests in `parseStylesheet.test.ts`.
7
- */
8
- /**
9
- * At-rules that make a nested custom-property declaration global regardless of
10
- * an enclosing selector: `@theme` (Tailwind v4), `@layer`, and `@scope`.
11
- *
12
- * Deliberately NOT included: `@media`, `@supports`, and `@container`. A bare
13
- * custom property directly inside those wrappers (without `:root`/`:host`) is
14
- * not a global token — see the false-positive guards in the parsing tests.
15
- */
1
+ /** Custom properties directly under these at-rules are global; `@media`, `@supports` and `@container` deliberately are not. */
16
2
  export const GLOBAL_TOKEN_AT_RULES = new Set(["theme", "layer", "scope"]);
17
- /**
18
- * Minimum declaration count for a scoped rule to be treated as a theme table.
19
- *
20
- * Rationale: published design systems often scope an entire theme beneath a
21
- * class on the application shell (for example to support multiple themes on
22
- * one page) instead of `:root`. A rule that is large enough AND made entirely
23
- * of custom-property declarations is treated as a theme table, so its selector
24
- * is retained in the catalog and resolved against the selected element later.
25
- *
26
- * The threshold is a deliberately explicit policy with two documented edges,
27
- * both pinned by tests:
28
- *
29
- * - False positive: a component-local rule with many custom properties (at or
30
- * above the threshold) is admitted as a theme table even though it is local
31
- * to the component. Accepted so genuine multi-variable theme tables keep
32
- * working; a cleaner fix needs selector heuristics that are out of scope for
33
- * ordinary-CSS parsing.
34
- * - False negative: a real theme table with fewer than the threshold
35
- * declarations is rejected. Accepted so small component-local rules do not
36
- * leak into the global catalog.
37
- *
38
- * The threshold is a count of direct custom-property declarations on the rule,
39
- * not a line count and not an estimate of selector breadth.
40
- */
3
+ /** At or above this many direct custom-property declarations a scoped rule is treated as a theme table. */
41
4
  export const MIN_THEME_TABLE_DECLARATIONS = 8;
42
5
  export const SCOPED_THEME_TABLE_POLICY = {
43
6
  minDeclarations: MIN_THEME_TABLE_DECLARATIONS,
@@ -1,20 +1,12 @@
1
- /**
2
- * Token inventory contracts: artifact input, normalized styling contributions,
3
- * diagnostics, and immutable snapshots.
4
- *
5
- * This Node/build-time seam is intentionally absent from the browser-safe
6
- * `nudge-ui/css` export graph.
7
- */
8
1
  import type { TokenCatalogDiagnosticCode, TokenDefinition, TokenDeclaration, TokenEntry, TokenOrigin } from "../model/index.js";
9
2
  export type ArtifactStage = "authored" | "transformed";
10
3
  export type ArtifactProvenance = TokenOrigin;
11
- /** One authored or transformed observation supplied by a build-tool Adapter. */
12
4
  export interface StylesheetArtifact {
13
5
  readonly buildTool: string;
14
6
  readonly id: string;
15
7
  readonly stage: ArtifactStage;
16
8
  readonly provenance: ArtifactProvenance;
17
- /** Authoritative stylesheet/import order, only when the Adapter can prove it. */
9
+ /** Only when the Adapter can prove the stylesheet/import order. */
18
10
  readonly order?: number;
19
11
  /** Deterministic scan rank when browser/cascade order is not known. */
20
12
  readonly discoveryOrder?: number;
@@ -23,7 +15,6 @@ export interface StylesheetArtifact {
23
15
  readonly adapter?: string;
24
16
  /** A recoverable transformed-observation failure; authored facts are retained. */
25
17
  readonly failed?: boolean;
26
- /** Adapter failures associated with this observation. */
27
18
  readonly diagnostics?: readonly ArtifactDiagnosticInput[];
28
19
  }
29
20
  export interface ArtifactDiagnosticInput {
@@ -68,17 +59,13 @@ export interface InventoryTokenDeclaration extends Omit<TokenDeclaration, "order
68
59
  export interface InventoryTokenDefinition extends Omit<TokenDefinition, "declarations"> {
69
60
  readonly declarations: readonly InventoryTokenDeclaration[];
70
61
  }
71
- /** Declarative metadata rewrite for matching aggregated definitions. */
72
62
  export interface TokenDefinitionRelabelling {
73
63
  readonly adapter: string;
74
64
  readonly fromOrigin: TokenOrigin;
75
65
  readonly origin?: TokenOrigin;
76
66
  readonly editable?: boolean;
77
67
  }
78
- /**
79
- * A normalized styling contribution. Re-applying the same `id` replaces its
80
- * prior facts; contribution order is explicit or deterministically id-based.
81
- */
68
+ /** Re-applying the same `id` replaces its prior facts. */
82
69
  export interface TokenContribution {
83
70
  readonly id: string;
84
71
  readonly tokens?: readonly TokenEntry[];
@@ -9,7 +9,6 @@ export declare const BORDER_INITIAL: {
9
9
  readonly style: "none";
10
10
  readonly color: "currentcolor";
11
11
  };
12
- /** Width/style/color components of a decomposable border value. */
13
12
  export interface BorderComponents {
14
13
  width: string;
15
14
  style: string;
@@ -18,11 +17,5 @@ export interface BorderComponents {
18
17
  styleResult: TokenValueInterpretation;
19
18
  colorResult: TokenValueInterpretation;
20
19
  }
21
- /**
22
- * Conservative border-shorthand classification: splits the authored value
23
- * into width/style/color components with CSS initial values for omitted parts,
24
- * and interprets each distinct component once. Returns null when the value
25
- * cannot be decomposed faithfully (ambiguous component order, image layers,
26
- * non-token slash forms, css-wide keywords, or multi-value junk).
27
- */
20
+ /** Conservative decomposition; null when the value cannot be split faithfully. */
28
21
  export declare function parseBorderComponents(value: string, tokenContext: TokenInterpretationContext): BorderComponents | null;
@@ -1,15 +1,4 @@
1
- /**
2
- * Border shorthand structure (plan slice 3.5).
3
- *
4
- * One browser-safe Module owns the conservative `border` / `border-side`
5
- * shorthand decomposition: width/style/color parts, CSS initial values for
6
- * omitted components, css-wide-keyword rejection, and the explicit rejection
7
- * of image layers, non-token slash forms, and ambiguous component counts.
8
- *
9
- * Browser-safe contract: this module imports only the shared model and the
10
- * value-semantics token interpreter. It never touches the DOM or CSSOM.
11
- */
12
- import { splitTopLevelWhitespace } from "./cssSyntax.js";
1
+ import { isSingleVarReference, splitTopLevelWhitespace } from "./cssSyntax.js";
13
2
  import { interpretTokenValue, } from "./tokenInterpretation.js";
14
3
  export const BORDER_STYLES = new Set(["none", "hidden", "dotted", "dashed", "solid", "double", "groove", "ridge", "inset", "outset"]);
15
4
  export const BORDER_WIDTHS = new Set(["thin", "medium", "thick"]);
@@ -17,13 +6,7 @@ export const COLOR_KEYWORDS = new Set(["transparent", "currentcolor", "black", "
17
6
  export const BORDER_CSS_WIDE = new Set(["inherit", "initial", "unset", "revert", "revert-layer"]);
18
7
  /** CSS initial values for omitted `border` / `border-*` shorthand components. */
19
8
  export const BORDER_INITIAL = { width: "medium", style: "none", color: "currentcolor" };
20
- /**
21
- * Conservative border-shorthand classification: splits the authored value
22
- * into width/style/color components with CSS initial values for omitted parts,
23
- * and interprets each distinct component once. Returns null when the value
24
- * cannot be decomposed faithfully (ambiguous component order, image layers,
25
- * non-token slash forms, css-wide keywords, or multi-value junk).
26
- */
9
+ /** Conservative decomposition; null when the value cannot be split faithfully. */
27
10
  export function parseBorderComponents(value, tokenContext) {
28
11
  const trimmed = value.trim();
29
12
  if (!trimmed || BORDER_CSS_WIDE.has(trimmed.toLowerCase()))
@@ -51,11 +34,10 @@ export function parseBorderComponents(value, tokenContext) {
51
34
  }
52
35
  if (part.includes("/") && !/^var\(/i.test(part))
53
36
  return null;
54
- const isVariable = /^var\(\s*--[\w-]+(?:\s*,[\s\S]*)?\s*\)$/i.test(part);
37
+ const isVariable = isSingleVarReference(part);
55
38
  const interpreted = isVariable ? interpret(part).resolvedValue.trim() : part;
56
- // A custom property can substitute an entire shorthand. If its grammar is
57
- // unresolved or expands to multiple components, assigning it to one slot
58
- // would invent structure that the authored declaration does not prove.
39
+ // A custom property can substitute an entire shorthand; unresolved or
40
+ // multi-component results cannot be assigned to one slot.
59
41
  if (isVariable && (/^var\(/i.test(interpreted) || splitTopLevelWhitespace(interpreted).length !== 1))
60
42
  return null;
61
43
  const candidate = interpreted.toLowerCase();
@@ -1,37 +1,14 @@
1
- /**
2
- * Box and spacing value semantics (plan slice 3.5).
3
- *
4
- * One browser-safe Module owns physical and logical box-value expansion:
5
- * 1–4 value shorthand expansion for `margin`/`padding`/`inset`, two-value
6
- * expansion for `gap`, border-radius corner names, and the logical→physical
7
- * side mapping. The logical mapping is a pure function over an explicit
8
- * `Directionality` fact supplied by the integration (browser CSS inspection
9
- * reads direction/writing-mode from the selected element); this module never
10
- * touches the DOM or CSSOM.
11
- */
12
1
  import type { StringArrayMap } from "./stringMaps.js";
13
2
  export declare const SPACING_SIDES: StringArrayMap;
14
3
  /** CSS `gap` shorthand order: row gap, then column gap. */
15
4
  export declare const GAP_AXES: StringArrayMap;
16
5
  export declare const BORDER_RADIUS_CORNERS: StringArrayMap;
17
- /**
18
- * Explicit, DOM-free writing facts for logical→physical side mapping. The
19
- * integration reads `direction` and `writing-mode` from the selected element's
20
- * computed style and passes them here; the neutral Module applies them.
21
- */
6
+ /** Writing facts the integration reads from the selected element's computed style. */
22
7
  export interface Directionality {
23
- /** CSS `direction` value, e.g. `"ltr"` or `"rtl"`. */
24
8
  direction: string;
25
- /** CSS `writing-mode` value, e.g. `"horizontal-tb"` or `"vertical-rl"`. */
26
9
  writingMode: string;
27
10
  }
28
11
  export declare function expandFourValueShorthand<T>(values: readonly T[]): [T, T, T, T] | null;
29
12
  export declare function expandTwoValueShorthand<T>(values: readonly T[]): [T, T] | null;
30
- /**
31
- * Maps a logical `margin`/`padding`/`inset` property (inline/block forms,
32
- * with optional start/end edges) to the physical sides it paints, using the
33
- * element's writing-mode/direction facts. Returns null for non-logical
34
- * properties. Without directionality the mapping assumes `ltr` /
35
- * `horizontal-tb`, matching the resolver's element-less behaviour.
36
- */
13
+ /** Maps logical margin/padding/inset properties to physical sides; null for non-logical properties. */
37
14
  export declare function logicalPhysicalSides(property: string, directionality?: Directionality): string[] | null;
@@ -33,13 +33,7 @@ export function expandTwoValueShorthand(values) {
33
33
  return null;
34
34
  return values.length === 1 ? [values[0], values[0]] : [values[0], values[1]];
35
35
  }
36
- /**
37
- * Maps a logical `margin`/`padding`/`inset` property (inline/block forms,
38
- * with optional start/end edges) to the physical sides it paints, using the
39
- * element's writing-mode/direction facts. Returns null for non-logical
40
- * properties. Without directionality the mapping assumes `ltr` /
41
- * `horizontal-tb`, matching the resolver's element-less behaviour.
42
- */
36
+ /** Maps logical margin/padding/inset properties to physical sides; null for non-logical properties. */
43
37
  export function logicalPhysicalSides(property, directionality) {
44
38
  const match = /^(margin|padding|inset)-(inline|block)(?:-(start|end))?$/.exec(property.toLowerCase());
45
39
  if (!match)
@@ -1,46 +1,18 @@
1
- /**
2
- * Color value semantics (plan slice 3.4).
3
- *
4
- * One browser-safe Module owns color format recognition, embedded-alpha
5
- * detection, opacity modifier interpretation, `color-mix()` handling, color
6
- * token replacement, and meaning-preserving opacity edits. Interpretation
7
- * takes explicit token knowledge (a token table, local aliases, and an
8
- * optional token-reference resolver) and never touches the DOM or CSSOM.
9
- *
10
- * Interface invariants:
11
- * - interpretation never throws on arbitrary input;
12
- * - edits either preserve the authored meaning or return an explicit
13
- * `ok: false` result — never a plausible but lossy string;
14
- * - token-plus-alpha and opacity-token distinctions survive swaps;
15
- * - framework-specific attribution (Tailwind v3 direct literals and `--tw-*`
16
- * aliases) stays behind the injected `resolveTokenReference` context.
17
- */
18
1
  import type { ColorOpacity, ColorValueFacts, TokenEntry, TokenReference, TokenTable } from "../model/index.js";
19
- /** The resolved facts about one token-backed component of a color expression. */
20
2
  export interface ColorComponentResolution {
21
3
  tokenName: string | null;
22
4
  resolvedValue: string;
23
5
  tokens: TokenReference[];
24
6
  }
25
- /** Explicit, DOM-free facts the color interpretation needs. */
26
7
  export interface ColorSemanticsContext {
27
8
  /** Resolved token table (custom-property name → entry). */
28
9
  tokenTable: TokenTable;
29
10
  /** Local aliases collected from the selected element's cascade. */
30
11
  localAliases?: ReadonlyMap<string, string>;
31
- /**
32
- * Resolves a `var()` component (for example an opacity token) to its
33
- * concrete value and attribution. Supplied by the token interpretation so
34
- * alias and framework attribution stay in one place. Absent → token-backed
35
- * components fall back to local aliases, fallbacks, or the raw text.
36
- */
12
+ /** Resolves a `var()` component (e.g. an opacity token); absent → local aliases, fallbacks, or the raw text. */
37
13
  resolveTokenReference?: (value: string) => ColorComponentResolution | null;
38
14
  }
39
- /**
40
- * A meaning-preserving color edit. `ok: true` carries the rewritten value;
41
- * `ok: false` reports explicitly that the transformation cannot be
42
- * represented faithfully. Callers must treat `ok: false` as "no change".
43
- */
15
+ /** Callers must treat `ok: false` as "no change". */
44
16
  export type ColorEditResult = {
45
17
  ok: true;
46
18
  value: string;
@@ -48,46 +20,21 @@ export type ColorEditResult = {
48
20
  ok: false;
49
21
  reason: "unsupported" | "invalid-opacity";
50
22
  };
51
- /** One high-level color interpretation consumed by token interpretation and UI projection. */
52
23
  export interface ColorValueInterpretation {
53
24
  opacity?: ColorOpacity;
54
25
  facts: ColorValueFacts;
55
26
  }
56
- /**
57
- * Normalizes an authored opacity to a clamped percent string. Accepts `%`
58
- * and `0..1` forms; returns null when the input is not a parseable opacity.
59
- */
27
+ /** Accepts `%` or `0..1` forms; null when the input is not a parseable opacity. */
60
28
  export declare function normalizeOpacityPercent(value: string): string | null;
61
- /**
62
- * Interprets the alpha component of one authored color value. Returns a
63
- * `ColorOpacity` when the value carries a recognized alpha channel (hex,
64
- * rgb/hsl, or color-mix against transparent), and undefined otherwise.
65
- */
29
+ /** Alpha of hex, rgb/hsl, or `color-mix(... transparent)` values; undefined otherwise. */
66
30
  export declare function interpretColorOpacity(value: string, ctx: ColorSemanticsContext): ColorOpacity | undefined;
67
- /** Returns whether a color value carries its own alpha channel. */
68
31
  export declare function colorValueHasEmbeddedAlpha(value: string): boolean;
69
- /** Interprets UI-relevant color shape through the value-semantics seam. */
70
32
  export declare function interpretColorValue(value: string, ctx: ColorSemanticsContext): ColorValueInterpretation;
71
- /**
72
- * Rewrites the alpha of a supported color expression to a normalized opacity
73
- * percent. Hex alpha channels are rewritten digit-for-digit, rgb/hsl slash or
74
- * comma alpha is replaced, `color-mix(... transparent)` reconciles its
75
- * percentage (or its 100−p mirror), and a bare `var()` wraps into
76
- * `color-mix(in srgb, var(...) <pct>, transparent)` — unwrapping back to the
77
- * plain `var()` when the opacity reaches 100%. Unsupported value shapes and
78
- * unparseable opacities return an explicit `ok: false`.
79
- */
80
33
  export declare function applyColorOpacity(value: string, opacity: string): ColorEditResult;
81
- /** Applies opacity using RGB channels for hex colors so field edits retain percentage precision. */
34
+ /** Converts hex to RGB channels so field edits retain percentage precision. */
82
35
  export declare function withColorOpacity(color: string, opacity: string): ColorEditResult;
83
- /** Preserves the previous opacity when the replacement color has no explicit alpha. */
84
36
  export declare function replaceColorPreservingOpacity(previous: string, color: string, context: ColorSemanticsContext): ColorEditResult;
85
- /**
86
- * Replaces only the color token in a separable color expression. Keeping this
87
- * separate from a plain token swap preserves authored alpha modifiers, for
88
- * example Tailwind's `color-mix(... var(--color-red-500) 10%, transparent)`
89
- * keeps its `10%` when the color token changes.
90
- */
37
+ /** Replaces only the color token so authored alpha modifiers survive the swap. */
91
38
  export declare function applyColorTokenReplacement(value: string, oldToken: TokenEntry, newToken: TokenEntry): ColorEditResult;
92
39
  export type ValueEditRequest = {
93
40
  kind: "color-opacity";
@@ -99,5 +46,4 @@ export type ValueEditRequest = {
99
46
  currentToken: TokenEntry;
100
47
  nextToken: TokenEntry;
101
48
  };
102
- /** The public meaning-preserving edit operation for supported value edits. */
103
49
  export declare function applyValueEdit(request: ValueEditRequest): ColorEditResult;
@@ -1,4 +1,4 @@
1
- import { extractVarCalls, splitTopLevel, splitTopLevelWhitespace, topLevelSlashIndex } from "./cssSyntax.js";
1
+ import { extractVarCalls, isSingleVarReference, splitTopLevel, splitTopLevelWhitespace, topLevelSlashIndex } from "./cssSyntax.js";
2
2
  const MIX_PERCENTAGE_OR_TOKEN = /^(?:\d+\.?\d*|\.\d+)%$|^var\([\s\S]+\)$/i;
3
3
  const COLOR_FUNCTIONS_WITH_ALPHA_SYNTAX = new Set(["rgb", "hsl", "hwb", "lab", "lch", "oklab", "oklch", "color"]);
4
4
  const COLOR_FUNCTION_NAMES = new Set([
@@ -6,9 +6,8 @@ const COLOR_FUNCTION_NAMES = new Set([
6
6
  "rgba",
7
7
  "hsla",
8
8
  ]);
9
- // CSS named colors are valid color values even though they do not have an
10
- // explicit alpha syntax. Opacity edits represent them with color-mix(), while
11
- // full opacity preserves the authored keyword.
9
+ // Valid color values without an alpha syntax; opacity edits wrap them in
10
+ // color-mix(), while full opacity preserves the authored keyword.
12
11
  const NAMED_COLOR_KEYWORDS = new Set([
13
12
  "aliceblue", "antiquewhite", "aqua", "aquamarine", "azure", "beige", "bisque", "black",
14
13
  "blanchedalmond", "blue", "blueviolet", "brown", "burlywood", "cadetblue", "chartreuse",
@@ -50,10 +49,7 @@ function parseOpacityPercent(value, clamp = true) {
50
49
  const percent = isPercent ? numeric : numeric * 100;
51
50
  return clamp ? Math.max(0, Math.min(100, percent)) : percent;
52
51
  }
53
- /**
54
- * Normalizes an authored opacity to a clamped percent string. Accepts `%`
55
- * and `0..1` forms; returns null when the input is not a parseable opacity.
56
- */
52
+ /** Accepts `%` or `0..1` forms; null when the input is not a parseable opacity. */
57
53
  export function normalizeOpacityPercent(value) {
58
54
  const percent = parseOpacityPercent(value);
59
55
  return percent === null ? null : formatOpacityPercent(percent);
@@ -121,12 +117,7 @@ function resolveOpacityPercentage(authoredValue, ctx, clamp = true) {
121
117
  function resolveOpacityComponent(authoredValue, ctx) {
122
118
  return resolveOpacityPercentage(authoredValue, ctx)?.component ?? null;
123
119
  }
124
- /**
125
- * Derives the alpha component of a `color-mix(...)` whose second argument
126
- * reconciles a color against `transparent`. The component is the color item's
127
- * percentage, or the 100−p mirror of the transparent item's percentage when
128
- * only that one is authored.
129
- */
120
+ /** Opacity of a `color-mix(... transparent)` value: the color item's percentage, or the 100−p mirror when only the transparent item is authored. */
130
121
  function resolveColorMixOpacity(value, ctx) {
131
122
  const open = value.indexOf("(");
132
123
  const close = value.lastIndexOf(")");
@@ -185,11 +176,7 @@ function resolveColorMixOpacity(value, ctx) {
185
176
  source: "color-mix",
186
177
  };
187
178
  }
188
- /**
189
- * Interprets the alpha component of one authored color value. Returns a
190
- * `ColorOpacity` when the value carries a recognized alpha channel (hex,
191
- * rgb/hsl, or color-mix against transparent), and undefined otherwise.
192
- */
179
+ /** Alpha of hex, rgb/hsl, or `color-mix(... transparent)` values; undefined otherwise. */
193
180
  export function interpretColorOpacity(value, ctx) {
194
181
  const trimmed = value.trim();
195
182
  const hex = /^#([\da-f]{4}|[\da-f]{8})$/i.exec(trimmed);
@@ -225,7 +212,6 @@ export function interpretColorOpacity(value, ctx) {
225
212
  return resolveColorMixOpacity(trimmed, ctx);
226
213
  return undefined;
227
214
  }
228
- /** Returns whether a color value carries its own alpha channel. */
229
215
  export function colorValueHasEmbeddedAlpha(value) {
230
216
  const trimmed = value.trim();
231
217
  if (/^transparent$/i.test(trimmed))
@@ -253,7 +239,6 @@ export function colorValueHasEmbeddedAlpha(value) {
253
239
  return item.color.toLowerCase() === "transparent" || colorValueHasEmbeddedAlpha(item.color);
254
240
  });
255
241
  }
256
- /** Interprets UI-relevant color shape through the value-semantics seam. */
257
242
  export function interpretColorValue(value, ctx) {
258
243
  const trimmed = value.trim();
259
244
  return {
@@ -338,21 +323,12 @@ function replaceColorMixOpacity(value, opacity) {
338
323
  }
339
324
  return `${value.slice(0, open + 1)}${updated.join(", ")}${value.slice(close)}`;
340
325
  }
341
- /**
342
- * Rewrites the alpha of a supported color expression to a normalized opacity
343
- * percent. Hex alpha channels are rewritten digit-for-digit, rgb/hsl slash or
344
- * comma alpha is replaced, `color-mix(... transparent)` reconciles its
345
- * percentage (or its 100−p mirror), and a bare `var()` wraps into
346
- * `color-mix(in srgb, var(...) <pct>, transparent)` — unwrapping back to the
347
- * plain `var()` when the opacity reaches 100%. Unsupported value shapes and
348
- * unparseable opacities return an explicit `ok: false`.
349
- */
350
326
  export function applyColorOpacity(value, opacity) {
351
327
  const normalized = normalizeOpacityPercent(opacity);
352
328
  if (normalized === null)
353
329
  return { ok: false, reason: "invalid-opacity" };
354
330
  const trimmed = value.trim();
355
- if (/^var\(\s*--[\w-]+(?:\s*,[\s\S]*)?\s*\)$/i.test(trimmed)) {
331
+ if (isSingleVarReference(trimmed)) {
356
332
  return normalized === "100%"
357
333
  ? { ok: true, value: trimmed }
358
334
  : { ok: true, value: `color-mix(in srgb, ${trimmed} ${normalized}, transparent)` };
@@ -398,7 +374,7 @@ export function applyColorOpacity(value, opacity) {
398
374
  }
399
375
  return { ok: false, reason: "unsupported" };
400
376
  }
401
- /** Applies opacity using RGB channels for hex colors so field edits retain percentage precision. */
377
+ /** Converts hex to RGB channels so field edits retain percentage precision. */
402
378
  export function withColorOpacity(color, opacity) {
403
379
  const hex = /^#([\da-f]{3}|[\da-f]{4}|[\da-f]{6}|[\da-f]{8})$/i.exec(color.trim());
404
380
  if (hex) {
@@ -408,7 +384,6 @@ export function withColorOpacity(color, opacity) {
408
384
  }
409
385
  return applyColorOpacity(color, opacity);
410
386
  }
411
- /** Preserves the previous opacity when the replacement color has no explicit alpha. */
412
387
  export function replaceColorPreservingOpacity(previous, color, context) {
413
388
  const opacity = interpretColorOpacity(previous, context);
414
389
  return opacity && !colorValueHasEmbeddedAlpha(color)
@@ -498,12 +473,7 @@ function replaceColorMixColor(value, oldValue, nextColor) {
498
473
  function escapeRegExp(value) {
499
474
  return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
500
475
  }
501
- /**
502
- * Replaces only the color token in a separable color expression. Keeping this
503
- * separate from a plain token swap preserves authored alpha modifiers, for
504
- * example Tailwind's `color-mix(... var(--color-red-500) 10%, transparent)`
505
- * keeps its `10%` when the color token changes.
506
- */
476
+ /** Replaces only the color token so authored alpha modifiers survive the swap. */
507
477
  export function applyColorTokenReplacement(value, oldToken, newToken) {
508
478
  const nextName = tokenReferenceName(newToken);
509
479
  if (nextName) {
@@ -534,7 +504,6 @@ export function applyColorTokenReplacement(value, oldToken, newToken) {
534
504
  return { ok: true, value: mixReplacement };
535
505
  return { ok: false, reason: "unsupported" };
536
506
  }
537
- /** The public meaning-preserving edit operation for supported value edits. */
538
507
  export function applyValueEdit(request) {
539
508
  if (request.kind === "color-opacity") {
540
509
  return applyColorOpacity(request.authored, request.opacity);