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
@@ -0,0 +1,16 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { LayoutDropdown } from "./LayoutDropdown.js";
3
+ import { LayoutValueField } from "./FlexControls.js";
4
+ import { SpacingField, projectSpacing } from "./SpacingField.js";
5
+ export const POSITION_OPTIONS = ["static", "relative", "absolute", "fixed", "sticky"];
6
+ export const Z_INDEX_PRESETS = ["auto", "0", "1", "10", "100"];
7
+ const OFFSET_PRESETS = ["auto", "0", "50%", "100%"];
8
+ /** Position, z-index and insets for an element that is not static; static elements set these from the options menu. */
9
+ export function PositionControls({ domElement, editTarget, selection, entries, tokenRows, position, revision, onAfterEdit }) {
10
+ const common = { domElement, editTarget, selection, revision, onAfterEdit };
11
+ const spacing = projectSpacing(domElement, selection, tokenRows);
12
+ const spacingProps = { domElement, editTarget, selection, entries, tokenRows, onAfterEdit };
13
+ const showAnchoredInsets = selection ? selection.supportsRole("inset-position") : position === "absolute" || position === "fixed";
14
+ const showOffsetInsets = selection ? selection.supportsRole("relative-position") : position === "relative" || position === "sticky";
15
+ return (_jsxs(_Fragment, { children: [_jsxs("div", { className: "layout__tool-row", "data-test": "layout-position", children: [_jsx(LayoutDropdown, { property: "position", options: POSITION_OPTIONS, ...common }), _jsx(LayoutValueField, { label: "Z-index", property: "z-index", presets: Z_INDEX_PRESETS, inputOnly: true, ...common })] }), showAnchoredInsets ? (_jsx(SpacingField, { property: "inset", projection: spacing.inset, showLabel: false, showEmptyState: false, suggestions: OFFSET_PRESETS, ...spacingProps })) : null, showOffsetInsets ? _jsx(SpacingField, { property: "inset", projection: spacing.inset, ...spacingProps }) : null] }));
16
+ }
@@ -0,0 +1,18 @@
1
+ import type { ReactElement, ReactNode } from "react";
2
+ import type { ResolvedProperty, TokenEntry } from "../../css/model/index.js";
3
+ import type { EditTarget } from "../selection/editTarget.js";
4
+ import type { StyleSelection } from "../selection/styleSelection.js";
5
+ export interface SizeSectionProps {
6
+ /** Rows shown under the min and max fields while expanded, such as flex or grid child controls. */
7
+ extras?: ReactNode;
8
+ /** Something behind the expander differs from its initial value. */
9
+ modified?: boolean;
10
+ domElement: HTMLElement;
11
+ editTarget: EditTarget;
12
+ selection?: StyleSelection | null;
13
+ entries: TokenEntry[];
14
+ tokenRows: ResolvedProperty[];
15
+ revision: number;
16
+ onAfterEdit?: () => void;
17
+ }
18
+ export declare function SizeSection({ domElement: el, editTarget, selection, entries, tokenRows, revision, onAfterEdit, extras, modified }: SizeSectionProps): ReactElement;
@@ -0,0 +1,71 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useState } from "react";
3
+ import { IconChevronDown, IconChevronUp, IconLetterH, IconLetterW } from "@tabler/icons-react";
4
+ import { TokenField } from "../tokens/TokenField.js";
5
+ import { AspectRatioField } from "./AspectRatioField.js";
6
+ import { meaningfulLayoutValue } from "./layoutValue.js";
7
+ import { IconButton } from "../ui/IconButton.js";
8
+ import { FieldRow } from "../ui/FieldRow.js";
9
+ import { ControlSurface } from "../ui/ControlSurface.js";
10
+ import { Tooltip } from "../ui/Tooltip.js";
11
+ import { getElementComputedStyle, getElementWindow } from "../runtime/domRealm.js";
12
+ const PLAIN_PIXEL_VALUE = /^-?\d*\.?\d+px$/;
13
+ /** The used pixel size of a dimension, kept current as the element resizes. */
14
+ function useResolvedDimension(el, property, revision) {
15
+ const [resolved, setResolved] = useState(() => readResolvedDimension(el, property));
16
+ useEffect(() => {
17
+ const update = () => setResolved(readResolvedDimension(el, property));
18
+ update();
19
+ // SAFETY: the element's window is a same-realm Window, and the runtime realm exposes the observer constructors as project-wide globals.
20
+ const { ResizeObserver: ResizeObserverCtor } = getElementWindow(el);
21
+ if (!ResizeObserverCtor)
22
+ return;
23
+ const observer = new ResizeObserverCtor(update);
24
+ observer.observe(el);
25
+ return () => observer.disconnect();
26
+ }, [el, property, revision]);
27
+ return resolved;
28
+ }
29
+ function readResolvedDimension(el, property) {
30
+ try {
31
+ const pixels = Number.parseFloat(getElementComputedStyle(el)[property]);
32
+ return Number.isFinite(pixels) ? pixels : null;
33
+ }
34
+ catch {
35
+ return null;
36
+ }
37
+ }
38
+ /** Shows the used size beside an authored keyword or expression, so `auto` still tells you how big the element is. */
39
+ function ResolvedDimension({ el, property, revision }) {
40
+ const resolved = useResolvedDimension(el, property, revision);
41
+ const authored = meaningfulLayoutValue(el, property).trim();
42
+ if (resolved === null || PLAIN_PIXEL_VALUE.test(authored))
43
+ return null;
44
+ // Whole pixels keep the label short enough to sit beside the authored value; the title keeps the exact figure.
45
+ return _jsx("span", { className: "layout__resolved", "data-test": `layout-resolved-${property}`, title: `${Math.round(resolved * 100) / 100}px`, children: Math.round(resolved) });
46
+ }
47
+ const SIZE_PRESETS = ["auto", "0", "100%", "fit-content"];
48
+ const MIN_SIZE_PRESETS = ["0", "min-content", "fit-content"];
49
+ const MAX_WIDTH_PRESETS = ["none", "100%", "100vw", "fit-content"];
50
+ const MAX_HEIGHT_PRESETS = ["none", "100%", "100vh", "fit-content"];
51
+ export function SizeSection({ domElement: el, editTarget, selection, entries, tokenRows, revision, onAfterEdit, extras, modified = false }) {
52
+ const [expanded, setExpanded] = useState(false);
53
+ const fields = [
54
+ { property: "width", presets: SIZE_PRESETS },
55
+ { property: "height", presets: SIZE_PRESETS },
56
+ { property: "min-width", presets: MIN_SIZE_PRESETS },
57
+ { property: "min-height", presets: MIN_SIZE_PRESETS },
58
+ { property: "max-width", presets: MAX_WIDTH_PRESETS },
59
+ { property: "max-height", presets: MAX_HEIGHT_PRESETS },
60
+ ];
61
+ const multipleSelected = (selection?.domElements.length ?? 1) > 1;
62
+ function renderTokenField(property, presets) {
63
+ const dimension = property === "width" || property === "height" ? property : null;
64
+ return (_jsx(ControlSurface, { className: property === "width" || property === "height" ? "layout__size-field--icon" : undefined, children: _jsx(TokenField, { property: property, selection: selection, tokenRow: tokenRows.find((row) => row.property === property) ?? null, initialValue: meaningfulLayoutValue(el, property), domElement: el, editTarget: editTarget, entries: entries, suggestions: presets, leading: property === "width"
65
+ ? _jsx(IconLetterW, { size: "var(--icon-size-small)", stroke: 1.8, "aria-hidden": "true" })
66
+ : property === "height"
67
+ ? _jsx(IconLetterH, { size: "var(--icon-size-small)", stroke: 1.8, "aria-hidden": "true" })
68
+ : undefined, trailing: dimension && !multipleSelected ? _jsx(ResolvedDimension, { el: el, property: dimension, revision: revision }) : undefined, onAfterEdit: onAfterEdit }) }));
69
+ }
70
+ return (_jsxs("div", { className: "layout__size", "data-test": "layout-size", "data-expanded": expanded ? "true" : "false", children: [_jsxs("div", { className: "layout__size-grid", children: [_jsx(FieldRow, { label: "Width", hideLabel: true, "data-test": "layout-size-width", className: "layout__size-cell layout__size-cell--width", children: renderTokenField("width", SIZE_PRESETS) }), _jsx(FieldRow, { label: "Height", hideLabel: true, "data-test": "layout-size-height", className: "layout__size-cell layout__size-cell--height", children: renderTokenField("height", SIZE_PRESETS) }), _jsx(Tooltip, { children: _jsx(IconButton, { className: "layout__size-cell layout__size-cell--toggle", variant: "quiet", size: "default", "data-modified": modified ? "true" : undefined, "data-test": expanded ? "layout-size-collapse" : "layout-size-expand", "aria-label": expanded ? "Collapse Size Fields" : "Expand Size Fields", label: expanded ? "Collapse Size Fields" : "Expand Size Fields", onClick: () => setExpanded(!expanded), children: expanded ? (_jsx(IconChevronUp, { size: 16, stroke: 1.8, "aria-hidden": "true" })) : (_jsx(IconChevronDown, { size: 16, stroke: 1.8, "aria-hidden": "true" })) }) }), expanded && fields.slice(2).map(({ property, presets }) => (_jsx(FieldRow, { label: property, "data-test": `layout-size-${property}`, className: `layout__size-cell layout__size-cell--${property}`, children: renderTokenField(property, presets) }, property))), expanded && (_jsx(AspectRatioField, { className: "layout__size-cell layout__size-cell--aspect-ratio", domElement: el, editTarget: editTarget, selection: selection, entries: entries, tokenRow: tokenRows.find((row) => row.property === "aspect-ratio") ?? null, revision: revision, onAfterEdit: onAfterEdit }))] }), expanded ? extras : null] }));
71
+ }
@@ -1,18 +1,11 @@
1
1
  import type { ReactElement } from "react";
2
2
  import type { ResolvedProperty } from "../../css/model/index.js";
3
3
  import type { TokenEntry } from "../../css/model/index.js";
4
- import type { SelectedElement } from "../selection/selectionStore.js";
5
- import { type InspectorSpacingProjection } from "../spacing/projection.js";
4
+ import { projectInspectorValues, type InspectorSpacingProjection } from "../spacing/projection.js";
6
5
  import type { EditTarget } from "../selection/editTarget.js";
7
6
  import type { StyleSelection } from "../selection/styleSelection.js";
8
- export interface SpacingBoxProps {
9
- element: SelectedElement;
10
- selection?: StyleSelection | null;
11
- entries?: TokenEntry[];
12
- tokenRows?: ResolvedProperty[];
13
- onAfterEdit?: () => void;
14
- }
15
- export declare function SpacingBox(props: SpacingBoxProps): ReactElement;
7
+ /** Values for one selection, projected from its computed styles or the shared selection model. */
8
+ export declare function projectSpacing(element: HTMLElement, selection: StyleSelection | null | undefined, tokenRows: ResolvedProperty[]): ReturnType<typeof projectInspectorValues>["spacing"];
16
9
  export interface SpacingFieldProps {
17
10
  property: "padding" | "margin" | "inset";
18
11
  projection: InspectorSpacingProjection;
@@ -5,28 +5,19 @@ import { TokenField, TokenValueField } from "../tokens/TokenField.js";
5
5
  import { IconButton } from "../ui/IconButton.js";
6
6
  import { SideValuesField, SIDE_NAMES, MarginSideIndicator, } from "../ui/SideValuesField.js";
7
7
  import { setStyles, swapTokens } from "../tokens/editActions.js";
8
+ import { isCalcExpression } from "../../css/value-semantics/index.js";
9
+ import { deriveActiveTokenName, isExpressionRow } from "./fieldValue.js";
8
10
  import { completeCssValue } from "./completeCssValue.js";
9
11
  import { valuePolicyFor } from "./valuePolicy.js";
10
12
  import { projectInspectorValues, projectInspectorValuesForSelection, } from "../spacing/projection.js";
11
- import { getStateStyleValue } from "../shell/stateValue.js";
12
13
  import { isZeroCssValue } from "./stylePresence.js";
13
14
  import { useFieldVisibility } from "./useFieldVisibility.js";
14
15
  import { inlineBlockedBy } from "./inlineAuthored.js";
15
- export function SpacingBox(props) {
16
- const { element, selection, entries, tokenRows = [], onAfterEdit } = props;
17
- const el = element.domElement;
18
- const allEntries = entries ?? [];
19
- const projection = selection
16
+ /** Values for one selection, projected from its computed styles or the shared selection model. */
17
+ export function projectSpacing(element, selection, tokenRows) {
18
+ return (selection
20
19
  ? projectInspectorValuesForSelection(selection)
21
- : projectInspectorValues(el, tokenRows);
22
- const showRelativeInset = selection
23
- ? selection.supportsRole("relative-position")
24
- : (() => {
25
- const value = getStateStyleValue(el, "position", "static").trim().toLowerCase();
26
- return value === "relative" || value === "sticky";
27
- })();
28
- const editTarget = selection?.target ?? el;
29
- return (_jsxs("div", { className: "editor", "data-test": "spacing-box", children: [_jsx("div", { className: "editor__title", children: "Spacing" }), _jsxs("div", { className: "spacing", children: [_jsx(SpacingField, { property: "padding", projection: projection.spacing.padding, domElement: el, editTarget: editTarget, selection: selection, entries: allEntries, tokenRows: tokenRows, onAfterEdit: onAfterEdit }), _jsx(SpacingField, { property: "margin", projection: projection.spacing.margin, domElement: el, editTarget: editTarget, selection: selection, entries: allEntries, tokenRows: tokenRows, onAfterEdit: onAfterEdit }), showRelativeInset ? _jsx(SpacingField, { property: "inset", projection: projection.spacing.inset, domElement: el, editTarget: editTarget, selection: selection, entries: allEntries, tokenRows: tokenRows, onAfterEdit: onAfterEdit }) : null] })] }));
20
+ : projectInspectorValues(element, tokenRows)).spacing;
30
21
  }
31
22
  export function SpacingField({ property, projection: spacingProjection, domElement: el, editTarget, selection, entries, tokenRows, onAfterEdit, showLabel = true, showEmptyState = true, suggestions, }) {
32
23
  const pairDefinitions = [
@@ -40,12 +31,13 @@ export function SpacingField({ property, projection: spacingProjection, domEleme
40
31
  return {
41
32
  side,
42
33
  icon: null,
43
- control: (_jsx(TokenField, { property: sideName, selection: selection, tokenRow: findTokenRow(tokenRows, sideName), domElement: el, editTarget: editTarget, entries: entries, suggestions: suggestions, displayValue: isCalcValue(field.authoredValue) && field.value ? field.value : undefined, editMetadata: metadataFor(findTokenRow(tokenRows, sideName)), onAfterEdit: onAfterEdit, chipVariant: "small", leading: icon })),
34
+ control: (_jsx(TokenField, { property: sideName, selection: selection, tokenRow: findTokenRow(tokenRows, sideName), domElement: el, editTarget: editTarget, entries: entries, suggestions: suggestions, initialValue: property === "inset" ? "auto" : undefined, displayValue: property === "inset" && !field.tokenName
35
+ ? field.authoredValue
36
+ : isCalcExpression(field.authoredValue) && field.value ? field.value : undefined, editMetadata: metadataFor(findTokenRow(tokenRows, sideName)), onAfterEdit: onAfterEdit, chipVariant: "small", leading: icon })),
44
37
  };
45
38
  });
46
39
  const hasSpacing = SIDE_NAMES.some((side) => {
47
- // Zero spacing is visually empty regardless of whether it came from a
48
- // reset, a component rule, or a token. Open editors stay open below.
40
+ // Zero spacing is visually empty whatever its source; open editors stay open below.
49
41
  const value = spacingProjection.fields[side].value.trim();
50
42
  return value !== "" && !isZeroCssValue(value) && (property !== "inset" || value !== "auto");
51
43
  });
@@ -88,14 +80,11 @@ function PairedTokenField({ displayProperty, sideProperties, domElement: el, edi
88
80
  const row = pairTokenRow(displayProperty, axisProjection);
89
81
  const groupMixed = axisProjection.fields.some((field) => field.value === "Mixed");
90
82
  const valuesMatch = axisProjection.state === "shared" && !groupMixed;
91
- const expression = Boolean(row && (row.capability === "raw" || row.capability === "composite"
92
- || row.modifiers?.some((modifier) => modifier.kind === "alpha")));
83
+ const expression = isExpressionRow(row);
93
84
  const calcAuthored = row?.authored ?? row?.declaredValue ?? "";
94
- const isCalcAuthored = isCalcValue(calcAuthored);
95
- const activeTokenName = !valuesMatch || expression || isCalcAuthored ? null : row.tokenName;
96
- // Some browsers expose the used pixel size for horizontal auto margins.
97
- // Keep the authored keyword visible because replacing it with that transient
98
- // size would misrepresent the declaration and change the edit semantics.
85
+ const isCalcAuthored = isCalcExpression(calcAuthored);
86
+ const activeTokenName = deriveActiveTokenName({ row, mixed: !valuesMatch, authored: calcAuthored });
87
+ // Some browsers report the used pixel size for horizontal auto margins; keep the authored keyword.
99
88
  const committedValue = groupMixed
100
89
  ? "Mixed"
101
90
  : valuesMatch
@@ -130,10 +119,7 @@ function PairedTokenField({ displayProperty, sideProperties, domElement: el, edi
130
119
  }, onUnlink: commitAxisValue, leading: leading, blockedBy: blockedBy }));
131
120
  }
132
121
  function fieldDisplayValue(field) {
133
- return isCalcValue(field.authoredValue) ? field.value : field.authoredValue.trim() || field.value;
134
- }
135
- function isCalcValue(value) {
136
- return /\bcalc\s*\(/i.test(value);
122
+ return isCalcExpression(field.authoredValue) ? field.value : field.authoredValue.trim() || field.value;
137
123
  }
138
124
  function splitAxisValue(value) {
139
125
  let depth = 0;
@@ -2,6 +2,7 @@ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useEffect, useState } from "react";
3
3
  import { IconTextSize, IconAlignCenter, IconAlignLeft, IconAlignRight, IconLayoutAlignMiddle, IconLayoutAlignBottom, IconLayoutAlignTop, IconBaseline, IconChevronDown, IconItalic, IconLetterSpacing, IconTypography, } from "@tabler/icons-react";
4
4
  import { findTokenRow, metadataFor } from "./rowLookup.js";
5
+ import { isExpressionRow } from "./fieldValue.js";
5
6
  import { TokenField } from "../tokens/TokenField.js";
6
7
  import { Select } from "../ui/Select.js";
7
8
  import { SegmentedControl } from "../ui/SegmentedControl.js";
@@ -36,10 +37,7 @@ function TypographyTokenField(props) {
36
37
  const tokenName = selectedProperty
37
38
  ? selectedProperty.token.kind === "common" ? selectedProperty.token.name : null
38
39
  : tokenRow?.tokenName;
39
- const hasTokenChip = Boolean(tokenName
40
- && tokenRow?.capability !== "raw"
41
- && tokenRow?.capability !== "composite"
42
- && !tokenRow?.modifiers?.some((modifier) => modifier.kind === "alpha"));
40
+ const hasTokenChip = Boolean(tokenName && !isExpressionRow(tokenRow));
43
41
  return (_jsx(ControlSurface, { className: `typography__field typography__field--${property}`, children: _jsx(TokenField, { property: property, tokenRow: tokenRow, selection: selection, domElement: domElement, editTarget: editTarget, entries: entries, editMetadata: metadataFor(tokenRow), leading: icon, trailing: metric || hasTokenChip ? undefined : _jsx(IconChevronDown, { size: 17, stroke: 1.8, "aria-hidden": "true" }), label: label, chipVariant: chipVariant, onAfterEdit: onAfterEdit }) }));
44
42
  }
45
43
  const FONT_STYLE_OPTIONS = [
@@ -6,22 +6,17 @@ export type BorderSide = (typeof BORDER_SIDES)[number];
6
6
  export type BorderComponent = "width" | "style" | "color";
7
7
  /** Reads a property's computed value for the inspected style state. */
8
8
  export type ComputedStyleReader = (property: string, fallback: string) => string;
9
- /** What the border editor knows about one element: its cascade rows and computed style. */
10
9
  export interface BorderSource {
11
10
  readonly rows: readonly ResolvedProperty[];
12
11
  readonly computed: ComputedStyleReader;
13
12
  }
14
13
  export interface BorderEditorState {
15
- /** Every side shares its width, style, and color. Never true for a group selection. */
16
14
  readonly sidesLinked: boolean;
17
- /** An unstructured `border` shorthand row that only a raw field can edit. */
15
+ /** Editable only through a raw field. */
18
16
  readonly rawShorthandRow: ResolvedProperty | null;
19
- /** The linked style draws a line, so linked width and color are meaningful. */
20
17
  readonly linkedStyleDraws: boolean;
21
- /** Rows backing the linked `border-width`, `border-style`, and `border-color` fields. */
22
18
  readonly linkedRows: Readonly<Record<BorderComponent, ResolvedProperty | null>>;
23
19
  }
24
- /** User choices the border editor turns into declarations. */
25
20
  export type BorderIntent = {
26
21
  readonly kind: "add";
27
22
  } | {
@@ -37,6 +32,5 @@ export declare function borderProperty(component: BorderComponent, side?: Border
37
32
  export declare function readBorderEditor(source: BorderSource, { group }: {
38
33
  readonly group: boolean;
39
34
  }): BorderEditorState;
40
- /** Whether any side draws a visible line, including after stylesheet resets. */
41
35
  export declare function hasVisibleBorder(computed: ComputedStyleReader): boolean;
42
36
  export declare function borderDeclarations(source: BorderSource, intent: BorderIntent): StyleDeclaration[];
@@ -18,10 +18,7 @@ function isBorderStyle(value) {
18
18
  function sideProperties(component) {
19
19
  return BORDER_SIDES.map((side) => borderProperty(component, side));
20
20
  }
21
- /**
22
- * Effective value of one border width, style, or color property. Structured
23
- * shorthand parts win, then authored text, then the computed style.
24
- */
21
+ /** Precedence: structured shorthand parts, then authored text, then computed style. */
25
22
  function borderComponentValue(source, component, property) {
26
23
  const row = findTokenRow(source.rows, property);
27
24
  const fallback = COMPONENT_FALLBACK[component];
@@ -45,11 +42,7 @@ function sideSignature(source, component, property) {
45
42
  return value;
46
43
  return `${value}|${findTokenRow(source.rows, property)?.tokenName ?? ""}`;
47
44
  }
48
- /**
49
- * A component is linked when every side shares its value. A lone shorthand row
50
- * with no per-side rows is linked by construction; four different `border-*`
51
- * shorthands compare by their structured parts, not their full text.
52
- */
45
+ /** A lone shorthand row is linked by construction; per-side rows compare by structured parts. */
53
46
  function componentLinked(source, component) {
54
47
  const properties = sideProperties(component);
55
48
  const hasShorthandRow = findTokenRow(source.rows, borderProperty(component)) !== null;
@@ -83,7 +76,6 @@ export function readBorderEditor(source, { group }) {
83
76
  },
84
77
  };
85
78
  }
86
- /** Whether any side draws a visible line, including after stylesheet resets. */
87
79
  export function hasVisibleBorder(computed) {
88
80
  return BORDER_SIDES.some((side) => {
89
81
  const style = computed(borderProperty("style", side), "none").toLowerCase();
@@ -92,7 +84,6 @@ export function hasVisibleBorder(computed) {
92
84
  return !isZeroCssValue(computed(borderProperty("width", side), "0px"));
93
85
  });
94
86
  }
95
- /** Linking sides writes each component shorthand from the top side's values. */
96
87
  function linkSidesDeclarations(source) {
97
88
  const components = ["style", "width", "color"];
98
89
  return components.map((component) => ({
@@ -1,8 +1,4 @@
1
1
  import type { ValuePolicy } from "./valuePolicy.js";
2
2
  export declare const CSS_NUMBER_SOURCE = "[+-]?(?:(?:\\d+\\.?\\d*)|(?:\\.\\d+))(?:e[+-]?\\d+)?";
3
- /**
4
- * Completes a bare numeric entry with its property's default unit. This is a
5
- * commit-time formatter; it deliberately does not validate or reinterpret
6
- * arbitrary CSS supplied by the user.
7
- */
3
+ /** Commit-time only; never validates or reinterprets arbitrary CSS input. */
8
4
  export declare function completeCssValue(rawValue: string, policy: ValuePolicy): string;
@@ -1,15 +1,7 @@
1
- // CSS <number>, including values such as .5 and 1e3. This intentionally only
2
- // matches the entire value: units, functions, keywords, and compound values
3
- // are all valid raw CSS and must be passed through unchanged.
4
- // Exported as a source fragment so other editors (e.g. nudgeValue) build
5
- // their number-aware patterns from the same single grammar definition.
1
+ // Exported as a source fragment for reuse in nudgeValue; matches only a complete CSS <number>.
6
2
  export const CSS_NUMBER_SOURCE = "[+-]?(?:(?:\\d+\\.?\\d*)|(?:\\.\\d+))(?:e[+-]?\\d+)?";
7
3
  const BARE_NUMBER = new RegExp(`^(?:${CSS_NUMBER_SOURCE})$`, "i");
8
- /**
9
- * Completes a bare numeric entry with its property's default unit. This is a
10
- * commit-time formatter; it deliberately does not validate or reinterpret
11
- * arbitrary CSS supplied by the user.
12
- */
4
+ /** Commit-time only; never validates or reinterprets arbitrary CSS input. */
13
5
  export function completeCssValue(rawValue, policy) {
14
6
  const value = rawValue.trim();
15
7
  if (!BARE_NUMBER.test(value) || Number(value) === 0) {
@@ -17,9 +9,7 @@ export function completeCssValue(rawValue, policy) {
17
9
  }
18
10
  if (policy.kind === "line-height") {
19
11
  const multiplier = Number(value);
20
- // People commonly enter line-height as its CSS multiplier (1.6), while
21
- // larger whole values conventionally represent a percentage (120). Keep
22
- // both convenient forms while committing a single percentage value.
12
+ // Values up to 10 are multipliers (1.6); larger values are conventional percentages (120).
23
13
  if (multiplier > 0 && multiplier <= 10) {
24
14
  return `${formatPercentage(multiplier * 100)}%`;
25
15
  }
@@ -0,0 +1,20 @@
1
+ import type { ResolvedProperty } from "../../css/model/index.js";
2
+ import type { SelectionProperty } from "../inspection/selectionProperty.js";
3
+ /**
4
+ * True when a row reports a value the inspector must treat as an expression,
5
+ * not as a token: raw CSS, a composite shorthand, an alpha modifier, or an
6
+ * authored color expression such as color-mix().
7
+ */
8
+ export declare function isExpressionRow(row: ResolvedProperty | null): boolean;
9
+ export interface ActiveTokenInput {
10
+ readonly row: ResolvedProperty | null;
11
+ readonly selectedProperty?: SelectionProperty | null;
12
+ /** A multi-element selection that disagrees on this property shows "Mixed" and no chip. */
13
+ readonly mixed: boolean;
14
+ /** The authored CSS value; a calc() expression suppresses the chip. */
15
+ readonly authored?: string;
16
+ /** A property-specific token name that outranks the row (opacity's token-backed value). */
17
+ readonly override?: string | null;
18
+ }
19
+ /** The token a field should show as active, or null when the value is not token-backed. */
20
+ export declare function deriveActiveTokenName(input: ActiveTokenInput): string | null;
@@ -0,0 +1,26 @@
1
+ import { isCalcExpression } from "../../css/value-semantics/index.js";
2
+ /**
3
+ * True when a row reports a value the inspector must treat as an expression,
4
+ * not as a token: raw CSS, a composite shorthand, an alpha modifier, or an
5
+ * authored color expression such as color-mix().
6
+ */
7
+ export function isExpressionRow(row) {
8
+ return Boolean(row && (row.capability === "raw"
9
+ || row.capability === "composite"
10
+ || row.modifiers?.some((modifier) => modifier.kind === "alpha")
11
+ || row.color?.isExpression));
12
+ }
13
+ /** The token a field should show as active, or null when the value is not token-backed. */
14
+ export function deriveActiveTokenName(input) {
15
+ const { row, selectedProperty, mixed, authored = "", override } = input;
16
+ if (mixed)
17
+ return null;
18
+ if (override)
19
+ return override;
20
+ if (isExpressionRow(row) || isCalcExpression(authored))
21
+ return null;
22
+ if (selectedProperty) {
23
+ return selectedProperty.token.kind === "common" ? selectedProperty.token.name : null;
24
+ }
25
+ return row?.tokenName ?? null;
26
+ }
@@ -12,6 +12,6 @@ export interface GradientValue {
12
12
  stops: GradientStop[];
13
13
  }
14
14
  export declare function defaultGradient(): GradientValue;
15
- /** Parse editable computed gradients. Leave unsupported syntax in the CSS field. */
15
+ /** Null for gradients the editor cannot represent; callers keep the raw CSS. */
16
16
  export declare function parseGradient(value: string): GradientValue | null;
17
17
  export declare function serializeGradient(gradient: GradientValue): string;
@@ -16,7 +16,7 @@ function angleDegrees(value) {
16
16
  default: return number;
17
17
  }
18
18
  }
19
- /** Parse editable computed gradients. Leave unsupported syntax in the CSS field. */
19
+ /** Null for gradients the editor cannot represent; callers keep the raw CSS. */
20
20
  export function parseGradient(value) {
21
21
  if (splitTopLevel(value, ",").length !== 1)
22
22
  return null;
@@ -35,7 +35,7 @@ export function parseGradient(value) {
35
35
  const direction = /^(to\s+(?:(?:left|right|top|bottom)(?:\s+|$)){1,2})/.exec(prelude)?.[0]?.trim();
36
36
  if (direction) {
37
37
  const directions = { top: 0, "top right": 45, "right top": 45, right: 90, "bottom right": 135, "right bottom": 135, bottom: 180, "bottom left": 225, "left bottom": 225, left: 270, "top left": 315, "left top": 315 };
38
- // Corner directions depend on the element's aspect ratio. Keep them as CSS.
38
+ // Corner directions depend on the element's aspect ratio; keep them as CSS.
39
39
  if (direction.slice(3).includes(" "))
40
40
  return null;
41
41
  angle = directions[direction.slice(3)] ?? 180;
@@ -102,6 +102,7 @@ export function parseGradient(value) {
102
102
  }
103
103
  start = end;
104
104
  }
105
+ // SAFETY: interpolation above fills every null position, so each stop has a numeric position.
105
106
  return { type, repeating: Boolean(match[1]), angle, prelude, stops: stops };
106
107
  }
107
108
  export function serializeGradient(gradient) {
@@ -2,72 +2,32 @@ import type { ChangeRecord } from "../tokens/editActions.js";
2
2
  import { type EditTarget } from "../selection/editTarget.js";
3
3
  /** One grid axis of a grid item: `column` maps to grid-column-*, `row` to grid-row-*. */
4
4
  export type GridAxis = "column" | "row";
5
- /**
6
- * Alignment vocabulary for grid children. `default` defers to the container's
7
- * `justify-items` / `align-items` (authored as `auto`); `fill` is `stretch`.
8
- */
9
5
  export type GridChildAlignment = "auto" | "stretch" | "start" | "center" | "end";
10
6
  export interface GridAxisPlacement {
11
- /** Authored or computed start line token: "auto", a line number, or a named line. */
12
7
  start: string;
13
- /**
14
- * Span when the placement is expressible as start + span N: the end side is
15
- * `span N`, or both sides are definite positive line numbers. Null when the
16
- * end side is auto, a negative line, or not derivable.
17
- */
8
+ /** Expressible as start + span N; null when the end side is auto, negative, or underivable. */
18
9
  span: number | null;
19
10
  }
20
11
  export declare const GRID_CHILD_MAX_TRACKS = 12;
21
- /** Parses a `span N` end-side token into N. */
22
12
  export declare function parseSpanToken(value: string): number | null;
23
- /**
24
- * Reads one placement axis from authored CSS (preferred) falling back to
25
- * computed CSS, which stays correct even when the authored rule uses the
26
- * `grid-column` / `grid-row` shorthand.
27
- */
13
+ /** Computed CSS stays correct even when the authored rule uses the grid-column/grid-row shorthand. */
28
14
  export declare function readGridAxisPlacement(el: HTMLElement, axis: GridAxis): GridAxisPlacement;
29
- /**
30
- * Commits one placement axis as managed longhands. The UI model is
31
- * "start line + span", so editing either side recomposes both:
32
- * a simple span is rewritten as `span N` (or `auto` for 1), while a negative
33
- * end line ("to the last line") and plain auto ends are preserved untouched.
34
- * `span: "keep"` re-commits the currently derived span, if any, so moving the
35
- * start line keeps the item's size.
36
- */
15
+ /** `span: "keep"` re-commits the derived span so moving the start line keeps the item's size. */
37
16
  export declare function commitGridAxisPlacement(target: EditTarget, axis: GridAxis, commit: {
38
17
  start?: string;
39
18
  span?: number | "keep";
40
19
  }): ChangeRecord[];
41
- /**
42
- * Reads one self-alignment axis as a raw CSS token with `normal` mapped to
43
- * `stretch`: on grid items `normal` has stretch behavior (except replaced
44
- * elements), so labeling it "Parent default" would misdescribe the rendering
45
- * and re-committing `auto` for it could change the layout. `auto` alone means
46
- * the item defers to the container's `justify-items` / `align-items`.
47
- */
20
+ /** `normal` maps to `stretch`: that is its grid-item behavior, and re-committing `auto` would change layout. */
48
21
  export declare function readGridChildAlignment(el: HTMLElement, axis: "h" | "v"): string;
49
- /** Friendly alignment labels; `auto` resolves to the container's items alignment. */
50
22
  export declare const GRID_CHILD_ALIGNMENT_OPTIONS: Array<{
51
23
  value: GridChildAlignment;
52
24
  label: string;
53
25
  }>;
54
- /**
55
- * Commits one self-alignment axis. The alignment vocabulary is an open CSS
56
- * set — the friendly pickers cover the common keywords while authored values
57
- * such as `self-start` or `normal` round-trip verbatim — so this accepts any
58
- * self-alignment token the UI puts in its options.
59
- */
26
+ /** Accepts any self-alignment token, not just the picker's keywords. */
60
27
  export declare function commitGridChildAlignment(target: EditTarget, axis: "h" | "v", alignment: string): ChangeRecord[];
61
- /**
62
- * Resolved track count of the parent grid on one axis, when CSS makes it
63
- * definite (auto-fill/auto-fit tracks cannot be counted). Caps at
64
- * GRID_CHILD_MAX_TRACKS to bound generated line options.
65
- */
28
+ /** Null for auto-fill/auto-fit tracks, which CSS leaves indefinite. */
66
29
  export declare function parentTrackCount(el: HTMLElement, axis: GridAxis): number | null;
67
- /**
68
- * Start-line options for one axis: Auto plus explicit line numbers. A grid
69
- * with N tracks has N+1 lines, so the final start line is count + 1.
70
- */
30
+ /** A grid with N tracks has N+1 start lines. */
71
31
  export declare function startLineOptions(trackCount: number | null): Array<{
72
32
  value: string;
73
33
  label: string;
@@ -12,16 +12,11 @@ function normalizeToken(value) {
12
12
  function isLineNumber(value) {
13
13
  return LINE_NUMBER.test(value);
14
14
  }
15
- /** Parses a `span N` end-side token into N. */
16
15
  export function parseSpanToken(value) {
17
16
  const match = SPAN_TOKEN.exec(value.trim());
18
17
  return match ? Number(match[1]) : null;
19
18
  }
20
- /**
21
- * Reads one placement axis from authored CSS (preferred) falling back to
22
- * computed CSS, which stays correct even when the authored rule uses the
23
- * `grid-column` / `grid-row` shorthand.
24
- */
19
+ /** Computed CSS stays correct even when the authored rule uses the grid-column/grid-row shorthand. */
25
20
  export function readGridAxisPlacement(el, axis) {
26
21
  const start = getLayoutValue(el, `grid-${axis}-start`);
27
22
  const end = getLayoutValue(el, `grid-${axis}-end`);
@@ -42,14 +37,7 @@ export function readGridAxisPlacement(el, axis) {
42
37
  }
43
38
  return { start: startToken, span };
44
39
  }
45
- /**
46
- * Commits one placement axis as managed longhands. The UI model is
47
- * "start line + span", so editing either side recomposes both:
48
- * a simple span is rewritten as `span N` (or `auto` for 1), while a negative
49
- * end line ("to the last line") and plain auto ends are preserved untouched.
50
- * `span: "keep"` re-commits the currently derived span, if any, so moving the
51
- * start line keeps the item's size.
52
- */
40
+ /** `span: "keep"` re-commits the derived span so moving the start line keeps the item's size. */
53
41
  export function commitGridAxisPlacement(target, axis, commit) {
54
42
  const elements = targetElements(target);
55
43
  const declarations = [];
@@ -77,20 +65,13 @@ export function commitGridAxisPlacement(target, axis, commit) {
77
65
  declarations.push({ property: `grid-${axis}-end`, value: endValue });
78
66
  return declarations.length > 0 ? setStyles(target, declarations) : [];
79
67
  }
80
- /**
81
- * Reads one self-alignment axis as a raw CSS token with `normal` mapped to
82
- * `stretch`: on grid items `normal` has stretch behavior (except replaced
83
- * elements), so labeling it "Parent default" would misdescribe the rendering
84
- * and re-committing `auto` for it could change the layout. `auto` alone means
85
- * the item defers to the container's `justify-items` / `align-items`.
86
- */
68
+ /** `normal` maps to `stretch`: that is its grid-item behavior, and re-committing `auto` would change layout. */
87
69
  export function readGridChildAlignment(el, axis) {
88
70
  const property = axis === "h" ? "justify-self" : "align-self";
89
71
  const value = getLayoutValue(el, property);
90
72
  const token = normalizeToken(value.authored ?? value.computed);
91
73
  return token === "normal" ? "stretch" : token;
92
74
  }
93
- /** Friendly alignment labels; `auto` resolves to the container's items alignment. */
94
75
  export const GRID_CHILD_ALIGNMENT_OPTIONS = [
95
76
  { value: "auto", label: "Parent default" },
96
77
  { value: "stretch", label: "Fill" },
@@ -98,22 +79,13 @@ export const GRID_CHILD_ALIGNMENT_OPTIONS = [
98
79
  { value: "center", label: "Center" },
99
80
  { value: "end", label: "End" },
100
81
  ];
101
- /**
102
- * Commits one self-alignment axis. The alignment vocabulary is an open CSS
103
- * set — the friendly pickers cover the common keywords while authored values
104
- * such as `self-start` or `normal` round-trip verbatim — so this accepts any
105
- * self-alignment token the UI puts in its options.
106
- */
82
+ /** Accepts any self-alignment token, not just the picker's keywords. */
107
83
  export function commitGridChildAlignment(target, axis, alignment) {
108
84
  const property = axis === "h" ? "justify-self" : "align-self";
109
85
  const record = setStyle(target, property, alignment);
110
86
  return record ? [record] : [];
111
87
  }
112
- /**
113
- * Resolved track count of the parent grid on one axis, when CSS makes it
114
- * definite (auto-fill/auto-fit tracks cannot be counted). Caps at
115
- * GRID_CHILD_MAX_TRACKS to bound generated line options.
116
- */
88
+ /** Null for auto-fill/auto-fit tracks, which CSS leaves indefinite. */
117
89
  export function parentTrackCount(el, axis) {
118
90
  const parent = el.parentElement;
119
91
  if (!parent)
@@ -124,10 +96,7 @@ export function parentTrackCount(el, axis) {
124
96
  return null;
125
97
  return Math.min(count, GRID_CHILD_MAX_TRACKS);
126
98
  }
127
- /**
128
- * Start-line options for one axis: Auto plus explicit line numbers. A grid
129
- * with N tracks has N+1 lines, so the final start line is count + 1.
130
- */
99
+ /** A grid with N tracks has N+1 start lines. */
131
100
  export function startLineOptions(trackCount) {
132
101
  const lineCount = (trackCount ?? GRID_CHILD_MAX_TRACKS) + 1;
133
102
  const options = [{ value: "auto", label: "Auto" }];
@@ -0,0 +1,5 @@
1
+ /** True when anything the size expander hides differs from its initial value, so the toggle can flag it. */
2
+ export declare function hasHiddenSizeOverrides(el: HTMLElement, parent: {
3
+ flexChild: boolean;
4
+ gridChild: boolean;
5
+ }): boolean;