nudge-ui 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (510) hide show
  1. package/README.md +66 -0
  2. package/bin/nudge-ui.mjs +7 -0
  3. package/dist/LICENSE +21 -0
  4. package/dist/client.mjs +261 -0
  5. package/dist/compiler/ast.d.ts +18 -0
  6. package/dist/compiler/ast.js +75 -0
  7. package/dist/compiler/componentContractTypes.d.ts +19 -0
  8. package/dist/compiler/componentContractTypes.js +1 -0
  9. package/dist/compiler/componentContracts.d.ts +2 -0
  10. package/dist/compiler/componentContracts.js +260 -0
  11. package/dist/compiler/componentInstrumentation.d.ts +32 -0
  12. package/dist/compiler/componentInstrumentation.js +140 -0
  13. package/dist/compiler/componentPolicyResolution.d.ts +71 -0
  14. package/dist/compiler/componentPolicyResolution.js +388 -0
  15. package/dist/compiler/index.d.ts +9 -0
  16. package/dist/compiler/index.js +9 -0
  17. package/dist/compiler/packageComponentContracts.d.ts +32 -0
  18. package/dist/compiler/packageComponentContracts.js +308 -0
  19. package/dist/compiler/reactComponentProtocols.d.ts +145 -0
  20. package/dist/compiler/reactComponentProtocols.js +47 -0
  21. package/dist/compiler/reactIdentity.d.ts +15 -0
  22. package/dist/compiler/reactIdentity.js +339 -0
  23. package/dist/compiler/sourcePaths.d.ts +12 -0
  24. package/dist/compiler/sourcePaths.js +27 -0
  25. package/dist/css/dialects/index.d.ts +62 -0
  26. package/dist/css/dialects/index.js +103 -0
  27. package/dist/css/dialects/tailwind.d.ts +46 -0
  28. package/dist/css/dialects/tailwind.js +119 -0
  29. package/dist/css/dialects/vanillaExtract.d.ts +20 -0
  30. package/dist/css/dialects/vanillaExtract.js +32 -0
  31. package/dist/css/index.d.ts +10 -0
  32. package/dist/css/index.js +10 -0
  33. package/dist/css/model/index.d.ts +190 -0
  34. package/dist/css/model/index.js +10 -0
  35. package/dist/css/token-inventory/index.d.ts +26 -0
  36. package/dist/css/token-inventory/index.js +24 -0
  37. package/dist/css/token-inventory/inventory.d.ts +8 -0
  38. package/dist/css/token-inventory/inventory.js +421 -0
  39. package/dist/css/token-inventory/parseStylesheet.d.ts +16 -0
  40. package/dist/css/token-inventory/parseStylesheet.js +155 -0
  41. package/dist/css/token-inventory/policy.d.ts +47 -0
  42. package/dist/css/token-inventory/policy.js +50 -0
  43. package/dist/css/token-inventory/types.d.ts +97 -0
  44. package/dist/css/token-inventory/types.js +1 -0
  45. package/dist/css/value-semantics/borderSemantics.d.ts +28 -0
  46. package/dist/css/value-semantics/borderSemantics.js +91 -0
  47. package/dist/css/value-semantics/boxSemantics.d.ts +37 -0
  48. package/dist/css/value-semantics/boxSemantics.js +71 -0
  49. package/dist/css/value-semantics/colorSemantics.d.ts +99 -0
  50. package/dist/css/value-semantics/colorSemantics.js +526 -0
  51. package/dist/css/value-semantics/cssSyntax.d.ts +19 -0
  52. package/dist/css/value-semantics/cssSyntax.js +111 -0
  53. package/dist/css/value-semantics/fontSemantics.d.ts +35 -0
  54. package/dist/css/value-semantics/fontSemantics.js +131 -0
  55. package/dist/css/value-semantics/index.d.ts +20 -0
  56. package/dist/css/value-semantics/index.js +15 -0
  57. package/dist/css/value-semantics/propertyPolicy.d.ts +118 -0
  58. package/dist/css/value-semantics/propertyPolicy.js +356 -0
  59. package/dist/css/value-semantics/stringMaps.d.ts +2 -0
  60. package/dist/css/value-semantics/stringMaps.js +1 -0
  61. package/dist/css/value-semantics/structuredValues.d.ts +64 -0
  62. package/dist/css/value-semantics/structuredValues.js +250 -0
  63. package/dist/css/value-semantics/tokenInterpretation.d.ts +90 -0
  64. package/dist/css/value-semantics/tokenInterpretation.js +193 -0
  65. package/dist/css/virtual-design-tokens.d.ts +17 -0
  66. package/dist/hosts/astro/astroRuntimeConfig.d.ts +12 -0
  67. package/dist/hosts/astro/astroRuntimeConfig.js +26 -0
  68. package/dist/hosts/astro/clientAsset.d.ts +12 -0
  69. package/dist/hosts/astro/clientAsset.js +51 -0
  70. package/dist/hosts/astro/clientTransport.d.ts +3 -0
  71. package/dist/hosts/astro/clientTransport.js +57 -0
  72. package/dist/hosts/astro/index.d.ts +3 -0
  73. package/dist/hosts/astro/index.js +2 -0
  74. package/dist/hosts/astro/integration.d.ts +35 -0
  75. package/dist/hosts/astro/integration.js +96 -0
  76. package/dist/hosts/astro/middleware.d.ts +13 -0
  77. package/dist/hosts/astro/middleware.js +22 -0
  78. package/dist/hosts/astro/projectContext.d.ts +11 -0
  79. package/dist/hosts/astro/projectContext.js +34 -0
  80. package/dist/hosts/astro/responseInstrumentation.d.ts +41 -0
  81. package/dist/hosts/astro/responseInstrumentation.js +80 -0
  82. package/dist/hosts/next/index.d.ts +4 -0
  83. package/dist/hosts/next/index.js +7 -0
  84. package/dist/hosts/next/loader.d.ts +66 -0
  85. package/dist/hosts/next/loader.js +346 -0
  86. package/dist/hosts/next/loaders/identity-loader.cjs +228257 -0
  87. package/dist/hosts/next/loaders/loader-plugin.cjs +228257 -0
  88. package/dist/hosts/next/manifest.d.ts +38 -0
  89. package/dist/hosts/next/manifest.js +30 -0
  90. package/dist/hosts/next/mount.d.ts +12 -0
  91. package/dist/hosts/next/mount.js +23 -0
  92. package/dist/hosts/next/repositoryScope.d.ts +20 -0
  93. package/dist/hosts/next/repositoryScope.js +33 -0
  94. package/dist/hosts/next/sidecar.d.ts +27 -0
  95. package/dist/hosts/next/sidecar.js +526 -0
  96. package/dist/hosts/next/wrapper.d.ts +67 -0
  97. package/dist/hosts/next/wrapper.js +310 -0
  98. package/dist/hosts/static/cli.d.ts +12 -0
  99. package/dist/hosts/static/cli.js +77 -0
  100. package/dist/hosts/static/html/bootstrap.d.ts +27 -0
  101. package/dist/hosts/static/html/bootstrap.js +93 -0
  102. package/dist/hosts/static/index.d.ts +4 -0
  103. package/dist/hosts/static/index.js +4 -0
  104. package/dist/hosts/static/manifest.d.ts +18 -0
  105. package/dist/hosts/static/manifest.js +51 -0
  106. package/dist/hosts/static/server.d.ts +72 -0
  107. package/dist/hosts/static/server.js +554 -0
  108. package/dist/hosts/vite/index.d.ts +20 -0
  109. package/dist/hosts/vite/index.js +48 -0
  110. package/dist/hosts/vite/react.d.ts +67 -0
  111. package/dist/hosts/vite/react.js +231 -0
  112. package/dist/hosts/vite/tokens/activeStylesheets.d.ts +28 -0
  113. package/dist/hosts/vite/tokens/activeStylesheets.js +70 -0
  114. package/dist/hosts/vite/tokens/fileMap.d.ts +2 -0
  115. package/dist/hosts/vite/tokens/fileMap.js +1 -0
  116. package/dist/hosts/vite/tokens/viteStylesheetArtifacts.d.ts +46 -0
  117. package/dist/hosts/vite/tokens/viteStylesheetArtifacts.js +104 -0
  118. package/dist/hosts/vite/virtual/design-tokens.d.ts +9 -0
  119. package/dist/hosts/vite/virtual/design-tokens.js +7 -0
  120. package/dist/hosts/vite/virtual-design-tokens.d.ts +1 -0
  121. package/dist/hosts/vite/vite.d.ts +62 -0
  122. package/dist/hosts/vite/vite.js +854 -0
  123. package/dist/html/dom.d.ts +13 -0
  124. package/dist/html/dom.js +46 -0
  125. package/dist/html/identity.d.ts +40 -0
  126. package/dist/html/identity.js +196 -0
  127. package/dist/html/insertions.d.ts +26 -0
  128. package/dist/html/insertions.js +59 -0
  129. package/dist/inspector/agent/McpConnectionDialog.d.ts +26 -0
  130. package/dist/inspector/agent/McpConnectionDialog.js +135 -0
  131. package/dist/inspector/agent/client.d.ts +98 -0
  132. package/dist/inspector/agent/client.js +728 -0
  133. package/dist/inspector/agent/connectionStatus.d.ts +13 -0
  134. package/dist/inspector/agent/connectionStatus.js +35 -0
  135. package/dist/inspector/agent/httpTransport.d.ts +21 -0
  136. package/dist/inspector/agent/httpTransport.js +347 -0
  137. package/dist/inspector/agent/protocol.d.ts +95 -0
  138. package/dist/inspector/agent/protocol.js +9 -0
  139. package/dist/inspector/agent/verification.d.ts +39 -0
  140. package/dist/inspector/agent/verification.js +207 -0
  141. package/dist/inspector/canvas/CanvasCard.d.ts +10 -0
  142. package/dist/inspector/canvas/CanvasCard.js +275 -0
  143. package/dist/inspector/canvas/CanvasElementOverlay.d.ts +2 -0
  144. package/dist/inspector/canvas/CanvasElementOverlay.js +301 -0
  145. package/dist/inspector/canvas/CanvasWorkspace.d.ts +2 -0
  146. package/dist/inspector/canvas/CanvasWorkspace.js +301 -0
  147. package/dist/inspector/canvas/LockedWorkspaceNotice.d.ts +6 -0
  148. package/dist/inspector/canvas/LockedWorkspaceNotice.js +17 -0
  149. package/dist/inspector/canvas/StaleChangeIndicator.d.ts +7 -0
  150. package/dist/inspector/canvas/StaleChangeIndicator.js +43 -0
  151. package/dist/inspector/canvas/agentPresentation.d.ts +87 -0
  152. package/dist/inspector/canvas/agentPresentation.js +421 -0
  153. package/dist/inspector/canvas/canvasGestures.d.ts +12 -0
  154. package/dist/inspector/canvas/canvasGestures.js +21 -0
  155. package/dist/inspector/canvas/canvasStore.d.ts +108 -0
  156. package/dist/inspector/canvas/canvasStore.js +448 -0
  157. package/dist/inspector/canvas/frameProtocol.d.ts +231 -0
  158. package/dist/inspector/canvas/frameProtocol.js +165 -0
  159. package/dist/inspector/canvas/linkEligibility.d.ts +8 -0
  160. package/dist/inspector/canvas/linkEligibility.js +68 -0
  161. package/dist/inspector/canvas/measurementProjection.d.ts +8 -0
  162. package/dist/inspector/canvas/measurementProjection.js +16 -0
  163. package/dist/inspector/canvas/normalizeUrl.d.ts +7 -0
  164. package/dist/inspector/canvas/normalizeUrl.js +27 -0
  165. package/dist/inspector/canvas/projection.d.ts +41 -0
  166. package/dist/inspector/canvas/projection.js +232 -0
  167. package/dist/inspector/canvas/rendererBootstrap.d.ts +4 -0
  168. package/dist/inspector/canvas/rendererBootstrap.js +410 -0
  169. package/dist/inspector/canvas/rendererCidIndex.d.ts +11 -0
  170. package/dist/inspector/canvas/rendererCidIndex.js +21 -0
  171. package/dist/inspector/canvas/rendererElementSelector.d.ts +2 -0
  172. package/dist/inspector/canvas/rendererElementSelector.js +378 -0
  173. package/dist/inspector/canvas/rendererSelectionProxy.d.ts +2 -0
  174. package/dist/inspector/canvas/rendererSelectionProxy.js +61 -0
  175. package/dist/inspector/canvas/rendererStylesheet.d.ts +16 -0
  176. package/dist/inspector/canvas/rendererStylesheet.js +221 -0
  177. package/dist/inspector/canvas/resizeHandleScale.d.ts +13 -0
  178. package/dist/inspector/canvas/resizeHandleScale.js +20 -0
  179. package/dist/inspector/canvas/roleDetection.d.ts +5 -0
  180. package/dist/inspector/canvas/roleDetection.js +21 -0
  181. package/dist/inspector/canvas/sessionStore.d.ts +71 -0
  182. package/dist/inspector/canvas/sessionStore.js +453 -0
  183. package/dist/inspector/canvas/staleChangeDetector.d.ts +11 -0
  184. package/dist/inspector/canvas/staleChangeDetector.js +217 -0
  185. package/dist/inspector/canvas/toolbarScale.d.ts +7 -0
  186. package/dist/inspector/canvas/toolbarScale.js +11 -0
  187. package/dist/inspector/canvas/workspaceLease.d.ts +26 -0
  188. package/dist/inspector/canvas/workspaceLease.js +214 -0
  189. package/dist/inspector/changes/changesLog.d.ts +46 -0
  190. package/dist/inspector/changes/changesLog.js +209 -0
  191. package/dist/inspector/changes/codecs.d.ts +98 -0
  192. package/dist/inspector/changes/codecs.js +389 -0
  193. package/dist/inspector/changes/editModel.d.ts +74 -0
  194. package/dist/inspector/changes/editModel.js +120 -0
  195. package/dist/inspector/changes/managedStyleProjection.d.ts +6 -0
  196. package/dist/inspector/changes/managedStyleProjection.js +109 -0
  197. package/dist/inspector/changes/model.d.ts +13 -0
  198. package/dist/inspector/changes/model.js +163 -0
  199. package/dist/inspector/changes/presentation.d.ts +14 -0
  200. package/dist/inspector/changes/presentation.js +81 -0
  201. package/dist/inspector/changes/previewDiagnostics.d.ts +39 -0
  202. package/dist/inspector/changes/previewDiagnostics.js +172 -0
  203. package/dist/inspector/changes/structuralTypes.d.ts +35 -0
  204. package/dist/inspector/changes/structuralTypes.js +1 -0
  205. package/dist/inspector/changes/types.d.ts +76 -0
  206. package/dist/inspector/changes/types.js +16 -0
  207. package/dist/inspector/changes/workspaceChanges.d.ts +43 -0
  208. package/dist/inspector/changes/workspaceChanges.js +239 -0
  209. package/dist/inspector/clientManifest.d.ts +24 -0
  210. package/dist/inspector/clientManifest.js +69 -0
  211. package/dist/inspector/componentSemantics/ComponentPropsSection.d.ts +5 -0
  212. package/dist/inspector/componentSemantics/ComponentPropsSection.js +44 -0
  213. package/dist/inspector/componentSemantics/adapterRegistry.d.ts +11 -0
  214. package/dist/inspector/componentSemantics/adapterRegistry.js +75 -0
  215. package/dist/inspector/componentSemantics/boundaries.d.ts +2 -0
  216. package/dist/inspector/componentSemantics/boundaries.js +10 -0
  217. package/dist/inspector/componentSemantics/changeAction.d.ts +3 -0
  218. package/dist/inspector/componentSemantics/changeAction.js +6 -0
  219. package/dist/inspector/componentSemantics/changeModel.d.ts +8 -0
  220. package/dist/inspector/componentSemantics/changeModel.js +60 -0
  221. package/dist/inspector/componentSemantics/index.d.ts +4 -0
  222. package/dist/inspector/componentSemantics/index.js +2 -0
  223. package/dist/inspector/componentSemantics/reactRuntime.d.ts +10 -0
  224. package/dist/inspector/componentSemantics/reactRuntime.js +186 -0
  225. package/dist/inspector/componentSemantics/runtimeBridge.d.ts +25 -0
  226. package/dist/inspector/componentSemantics/runtimeBridge.js +161 -0
  227. package/dist/inspector/componentSemantics/runtimeTypes.d.ts +2 -0
  228. package/dist/inspector/componentSemantics/runtimeTypes.js +1 -0
  229. package/dist/inspector/componentSemantics/textBinding.d.ts +69 -0
  230. package/dist/inspector/componentSemantics/textBinding.js +514 -0
  231. package/dist/inspector/componentSemantics/types.d.ts +96 -0
  232. package/dist/inspector/componentSemantics/types.js +5 -0
  233. package/dist/inspector/conformance/borderCases.d.ts +7 -0
  234. package/dist/inspector/conformance/borderCases.js +428 -0
  235. package/dist/inspector/conformance/colorCases.d.ts +8 -0
  236. package/dist/inspector/conformance/colorCases.js +470 -0
  237. package/dist/inspector/conformance/fixture.d.ts +68 -0
  238. package/dist/inspector/conformance/fixture.js +153 -0
  239. package/dist/inspector/conformance/projection.d.ts +2 -0
  240. package/dist/inspector/conformance/projection.js +3 -0
  241. package/dist/inspector/conformance/spacingCases.d.ts +6 -0
  242. package/dist/inspector/conformance/spacingCases.js +417 -0
  243. package/dist/inspector/conformance/typographyCases.d.ts +7 -0
  244. package/dist/inspector/conformance/typographyCases.js +174 -0
  245. package/dist/inspector/editScope.d.ts +4 -0
  246. package/dist/inspector/editScope.js +5 -0
  247. package/dist/inspector/index.d.ts +20 -0
  248. package/dist/inspector/index.js +236 -0
  249. package/dist/inspector/inline-text/inlineTextEditor.d.ts +74 -0
  250. package/dist/inspector/inline-text/inlineTextEditor.js +1207 -0
  251. package/dist/inspector/inline-text/inlineTextLifecycle.d.ts +2 -0
  252. package/dist/inspector/inline-text/inlineTextLifecycle.js +17 -0
  253. package/dist/inspector/inline-text/textChangeBoundary.d.ts +6 -0
  254. package/dist/inspector/inline-text/textChangeBoundary.js +1 -0
  255. package/dist/inspector/inspection/bridge.d.ts +72 -0
  256. package/dist/inspector/inspection/bridge.js +134 -0
  257. package/dist/inspector/inspection/browserCssInspection.d.ts +74 -0
  258. package/dist/inspector/inspection/browserCssInspection.js +317 -0
  259. package/dist/inspector/inspection/browserCssInspectionRegistry.d.ts +12 -0
  260. package/dist/inspector/inspection/browserCssInspectionRegistry.js +66 -0
  261. package/dist/inspector/inspection/selectionProperty.d.ts +32 -0
  262. package/dist/inspector/inspection/selectionProperty.js +33 -0
  263. package/dist/inspector/inspection/useBrowserCssInspection.d.ts +20 -0
  264. package/dist/inspector/inspection/useBrowserCssInspection.js +159 -0
  265. package/dist/inspector/overlay/DropGuideOverlay.d.ts +17 -0
  266. package/dist/inspector/overlay/DropGuideOverlay.js +17 -0
  267. package/dist/inspector/overlay/InspectorOverlay.d.ts +5 -0
  268. package/dist/inspector/overlay/InspectorOverlay.js +328 -0
  269. package/dist/inspector/overlay/MeasurementGuideOverlay.d.ts +19 -0
  270. package/dist/inspector/overlay/MeasurementGuideOverlay.js +40 -0
  271. package/dist/inspector/overlay/clickPolicy.d.ts +7 -0
  272. package/dist/inspector/overlay/clickPolicy.js +13 -0
  273. package/dist/inspector/overlay/dropGuide.d.ts +22 -0
  274. package/dist/inspector/overlay/dropGuide.js +48 -0
  275. package/dist/inspector/overlay/elementSelector.d.ts +1 -0
  276. package/dist/inspector/overlay/elementSelector.js +100 -0
  277. package/dist/inspector/overlay/frameThrottle.d.ts +10 -0
  278. package/dist/inspector/overlay/frameThrottle.js +38 -0
  279. package/dist/inspector/overlay/interactionStyles.d.ts +3 -0
  280. package/dist/inspector/overlay/interactionStyles.js +70 -0
  281. package/dist/inspector/overlay/measurementGeometry.d.ts +25 -0
  282. package/dist/inspector/overlay/measurementGeometry.js +104 -0
  283. package/dist/inspector/overlay/overlayGeometry.d.ts +40 -0
  284. package/dist/inspector/overlay/overlayGeometry.js +59 -0
  285. package/dist/inspector/overlay/selectedGeometry.d.ts +7 -0
  286. package/dist/inspector/overlay/selectedGeometry.js +51 -0
  287. package/dist/inspector/overlay/structuralGestures.d.ts +28 -0
  288. package/dist/inspector/overlay/structuralGestures.js +180 -0
  289. package/dist/inspector/projection/cssEscapes.d.ts +3 -0
  290. package/dist/inspector/projection/cssEscapes.js +20 -0
  291. package/dist/inspector/projection/managedStylesheet.d.ts +33 -0
  292. package/dist/inspector/projection/managedStylesheet.js +240 -0
  293. package/dist/inspector/projection/renderedInstance.d.ts +56 -0
  294. package/dist/inspector/projection/renderedInstance.js +306 -0
  295. package/dist/inspector/projection/structuralProjection.d.ts +93 -0
  296. package/dist/inspector/projection/structuralProjection.js +560 -0
  297. package/dist/inspector/projection/structuralProjectionBoundary.d.ts +5 -0
  298. package/dist/inspector/projection/structuralProjectionBoundary.js +65 -0
  299. package/dist/inspector/projection/textProjection.d.ts +53 -0
  300. package/dist/inspector/projection/textProjection.js +705 -0
  301. package/dist/inspector/projection/workspaceProjection.d.ts +43 -0
  302. package/dist/inspector/projection/workspaceProjection.js +58 -0
  303. package/dist/inspector/prompt/PromptSettingsDialog.d.ts +15 -0
  304. package/dist/inspector/prompt/PromptSettingsDialog.js +17 -0
  305. package/dist/inspector/prompt/clipboardHandoff.d.ts +34 -0
  306. package/dist/inspector/prompt/clipboardHandoff.js +212 -0
  307. package/dist/inspector/prompt/copyToClipboard.d.ts +1 -0
  308. package/dist/inspector/prompt/copyToClipboard.js +34 -0
  309. package/dist/inspector/prompt/detectFramework.d.ts +6 -0
  310. package/dist/inspector/prompt/detectFramework.js +4 -0
  311. package/dist/inspector/prompt/generatePrompt.d.ts +7 -0
  312. package/dist/inspector/prompt/generatePrompt.js +391 -0
  313. package/dist/inspector/prompt/promptSettings.d.ts +8 -0
  314. package/dist/inspector/prompt/promptSettings.js +28 -0
  315. package/dist/inspector/runtime/devFlag.d.ts +28 -0
  316. package/dist/inspector/runtime/devFlag.js +50 -0
  317. package/dist/inspector/runtime/documentStylesheetOrder.d.ts +19 -0
  318. package/dist/inspector/runtime/documentStylesheetOrder.js +89 -0
  319. package/dist/inspector/runtime/domRealm.d.ts +4 -0
  320. package/dist/inspector/runtime/domRealm.js +11 -0
  321. package/dist/inspector/runtime/runtimeConfig.d.ts +119 -0
  322. package/dist/inspector/runtime/runtimeConfig.js +276 -0
  323. package/dist/inspector/runtime/staticHtmlRuntimeIdentity.d.ts +32 -0
  324. package/dist/inspector/runtime/staticHtmlRuntimeIdentity.js +149 -0
  325. package/dist/inspector/runtime/useRuntimeConfig.d.ts +10 -0
  326. package/dist/inspector/runtime/useRuntimeConfig.js +13 -0
  327. package/dist/inspector/selection/editScope.d.ts +32 -0
  328. package/dist/inspector/selection/editScope.js +140 -0
  329. package/dist/inspector/selection/editTarget.d.ts +8 -0
  330. package/dist/inspector/selection/editTarget.js +11 -0
  331. package/dist/inspector/selection/hierarchy.d.ts +7 -0
  332. package/dist/inspector/selection/hierarchy.js +42 -0
  333. package/dist/inspector/selection/resolveSelection.d.ts +10 -0
  334. package/dist/inspector/selection/resolveSelection.js +60 -0
  335. package/dist/inspector/selection/selectionStore.d.ts +41 -0
  336. package/dist/inspector/selection/selectionStore.js +262 -0
  337. package/dist/inspector/selection/selectionTarget.d.ts +5 -0
  338. package/dist/inspector/selection/selectionTarget.js +50 -0
  339. package/dist/inspector/selection/sourceSite.d.ts +2 -0
  340. package/dist/inspector/selection/sourceSite.js +12 -0
  341. package/dist/inspector/selection/styleSelection.d.ts +22 -0
  342. package/dist/inspector/selection/styleSelection.js +104 -0
  343. package/dist/inspector/session/index.d.ts +3 -0
  344. package/dist/inspector/session/index.js +2 -0
  345. package/dist/inspector/session/lifecycle.d.ts +22 -0
  346. package/dist/inspector/session/lifecycle.js +63 -0
  347. package/dist/inspector/session/sessionContext.d.ts +21 -0
  348. package/dist/inspector/session/sessionContext.js +28 -0
  349. package/dist/inspector/session/sessionFactory.d.ts +29 -0
  350. package/dist/inspector/session/sessionFactory.js +73 -0
  351. package/dist/inspector/settings/SettingsDialog.d.ts +12 -0
  352. package/dist/inspector/settings/SettingsDialog.js +46 -0
  353. package/dist/inspector/shell/AppShell.d.ts +2 -0
  354. package/dist/inspector/shell/AppShell.js +9 -0
  355. package/dist/inspector/shell/ChangesLog.d.ts +6 -0
  356. package/dist/inspector/shell/ChangesLog.js +92 -0
  357. package/dist/inspector/shell/CopyPromptButton.d.ts +9 -0
  358. package/dist/inspector/shell/CopyPromptButton.js +159 -0
  359. package/dist/inspector/shell/DomNavigation.d.ts +8 -0
  360. package/dist/inspector/shell/DomNavigation.js +30 -0
  361. package/dist/inspector/shell/EmptyState.d.ts +2 -0
  362. package/dist/inspector/shell/EmptyState.js +15 -0
  363. package/dist/inspector/shell/InspectorShell.d.ts +11 -0
  364. package/dist/inspector/shell/InspectorShell.js +268 -0
  365. package/dist/inspector/shell/openStore.d.ts +6 -0
  366. package/dist/inspector/shell/openStore.js +29 -0
  367. package/dist/inspector/shell/panelLayout.d.ts +2 -0
  368. package/dist/inspector/shell/panelLayout.js +29 -0
  369. package/dist/inspector/shell/shortcuts.d.ts +3 -0
  370. package/dist/inspector/shell/shortcuts.js +25 -0
  371. package/dist/inspector/shell/stateValue.d.ts +3 -0
  372. package/dist/inspector/shell/stateValue.js +34 -0
  373. package/dist/inspector/shell/styleState.d.ts +7 -0
  374. package/dist/inspector/shell/styleState.js +13 -0
  375. package/dist/inspector/spacing/projection.d.ts +43 -0
  376. package/dist/inspector/spacing/projection.js +136 -0
  377. package/dist/inspector/styleEditors/AppearanceSection.d.ts +13 -0
  378. package/dist/inspector/styleEditors/AppearanceSection.js +6 -0
  379. package/dist/inspector/styleEditors/AspectRatioField.d.ts +17 -0
  380. package/dist/inspector/styleEditors/AspectRatioField.js +10 -0
  381. package/dist/inspector/styleEditors/BorderEditor.d.ts +13 -0
  382. package/dist/inspector/styleEditors/BorderEditor.js +295 -0
  383. package/dist/inspector/styleEditors/BorderRadiusEditor.d.ts +14 -0
  384. package/dist/inspector/styleEditors/BorderRadiusEditor.js +108 -0
  385. package/dist/inspector/styleEditors/BoxShadowEditor.d.ts +13 -0
  386. package/dist/inspector/styleEditors/BoxShadowEditor.js +13 -0
  387. package/dist/inspector/styleEditors/ColorPicker.d.ts +15 -0
  388. package/dist/inspector/styleEditors/ColorPicker.js +73 -0
  389. package/dist/inspector/styleEditors/GapField.d.ts +17 -0
  390. package/dist/inspector/styleEditors/GapField.js +12 -0
  391. package/dist/inspector/styleEditors/GridChildSection.d.ts +14 -0
  392. package/dist/inspector/styleEditors/GridChildSection.js +91 -0
  393. package/dist/inspector/styleEditors/GridPicker.d.ts +13 -0
  394. package/dist/inspector/styleEditors/GridPicker.js +179 -0
  395. package/dist/inspector/styleEditors/GridSection.d.ts +17 -0
  396. package/dist/inspector/styleEditors/GridSection.js +27 -0
  397. package/dist/inspector/styleEditors/GridValueField.d.ts +17 -0
  398. package/dist/inspector/styleEditors/GridValueField.js +70 -0
  399. package/dist/inspector/styleEditors/InsetSection.d.ts +15 -0
  400. package/dist/inspector/styleEditors/InsetSection.js +15 -0
  401. package/dist/inspector/styleEditors/LayoutBlockedIndicator.d.ts +6 -0
  402. package/dist/inspector/styleEditors/LayoutBlockedIndicator.js +6 -0
  403. package/dist/inspector/styleEditors/LayoutComboField.d.ts +18 -0
  404. package/dist/inspector/styleEditors/LayoutComboField.js +138 -0
  405. package/dist/inspector/styleEditors/LayoutDropdown.d.ts +14 -0
  406. package/dist/inspector/styleEditors/LayoutDropdown.js +34 -0
  407. package/dist/inspector/styleEditors/LayoutSection.d.ts +13 -0
  408. package/dist/inspector/styleEditors/LayoutSection.js +342 -0
  409. package/dist/inspector/styleEditors/OpacityEditor.d.ts +13 -0
  410. package/dist/inspector/styleEditors/OpacityEditor.js +34 -0
  411. package/dist/inspector/styleEditors/PositionInsets.d.ts +15 -0
  412. package/dist/inspector/styleEditors/PositionInsets.js +12 -0
  413. package/dist/inspector/styleEditors/SpacingBox.d.ts +29 -0
  414. package/dist/inspector/styleEditors/SpacingBox.js +189 -0
  415. package/dist/inspector/styleEditors/Typography.d.ts +13 -0
  416. package/dist/inspector/styleEditors/Typography.js +137 -0
  417. package/dist/inspector/styleEditors/completeCssValue.d.ts +8 -0
  418. package/dist/inspector/styleEditors/completeCssValue.js +34 -0
  419. package/dist/inspector/styleEditors/gridChildModel.d.ts +74 -0
  420. package/dist/inspector/styleEditors/gridChildModel.js +138 -0
  421. package/dist/inspector/styleEditors/layoutValue.d.ts +24 -0
  422. package/dist/inspector/styleEditors/layoutValue.js +103 -0
  423. package/dist/inspector/styleEditors/nudgeValue.d.ts +8 -0
  424. package/dist/inspector/styleEditors/nudgeValue.js +71 -0
  425. package/dist/inspector/styleEditors/rowLookup.d.ts +11 -0
  426. package/dist/inspector/styleEditors/rowLookup.js +13 -0
  427. package/dist/inspector/styleEditors/stringRecord.d.ts +4 -0
  428. package/dist/inspector/styleEditors/stringRecord.js +1 -0
  429. package/dist/inspector/styleEditors/valuePolicy.d.ts +20 -0
  430. package/dist/inspector/styleEditors/valuePolicy.js +82 -0
  431. package/dist/inspector/testing.d.ts +10 -0
  432. package/dist/inspector/testing.js +9 -0
  433. package/dist/inspector/tokens/TokenChip.d.ts +24 -0
  434. package/dist/inspector/tokens/TokenChip.js +23 -0
  435. package/dist/inspector/tokens/TokenDropdown.d.ts +13 -0
  436. package/dist/inspector/tokens/TokenDropdown.js +59 -0
  437. package/dist/inspector/tokens/TokenField.d.ts +68 -0
  438. package/dist/inspector/tokens/TokenField.js +485 -0
  439. package/dist/inspector/tokens/TokenLabel.d.ts +7 -0
  440. package/dist/inspector/tokens/TokenLabel.js +23 -0
  441. package/dist/inspector/tokens/TokensPanel.d.ts +5 -0
  442. package/dist/inspector/tokens/TokensPanel.js +47 -0
  443. package/dist/inspector/tokens/catalog.d.ts +51 -0
  444. package/dist/inspector/tokens/catalog.js +184 -0
  445. package/dist/inspector/tokens/editActions.d.ts +35 -0
  446. package/dist/inspector/tokens/editActions.js +164 -0
  447. package/dist/inspector/tokens/resolution/cascade.d.ts +14 -0
  448. package/dist/inspector/tokens/resolution/cascade.js +31 -0
  449. package/dist/inspector/tokens/resolution/cssomCollector.d.ts +43 -0
  450. package/dist/inspector/tokens/resolution/cssomCollector.js +528 -0
  451. package/dist/inspector/tokens/resolution/selectorSemantics.d.ts +12 -0
  452. package/dist/inspector/tokens/resolution/selectorSemantics.js +106 -0
  453. package/dist/inspector/tokens/resolution.d.ts +56 -0
  454. package/dist/inspector/tokens/resolution.js +1401 -0
  455. package/dist/inspector/tokens/tokenEdits.d.ts +3 -0
  456. package/dist/inspector/tokens/tokenEdits.js +22 -0
  457. package/dist/inspector/tokens/valueSemanticsAdapter.d.ts +6 -0
  458. package/dist/inspector/tokens/valueSemanticsAdapter.js +68 -0
  459. package/dist/inspector/ui/AtRuleContext.d.ts +18 -0
  460. package/dist/inspector/ui/AtRuleContext.js +54 -0
  461. package/dist/inspector/ui/Button.d.ts +9 -0
  462. package/dist/inspector/ui/Button.js +4 -0
  463. package/dist/inspector/ui/ColorSwatch.d.ts +7 -0
  464. package/dist/inspector/ui/ColorSwatch.js +6 -0
  465. package/dist/inspector/ui/ControlSurface.d.ts +14 -0
  466. package/dist/inspector/ui/ControlSurface.js +10 -0
  467. package/dist/inspector/ui/FieldRow.d.ts +14 -0
  468. package/dist/inspector/ui/FieldRow.js +15 -0
  469. package/dist/inspector/ui/IconButton.d.ts +14 -0
  470. package/dist/inspector/ui/IconButton.js +5 -0
  471. package/dist/inspector/ui/InspectorPopover.d.ts +17 -0
  472. package/dist/inspector/ui/InspectorPopover.js +13 -0
  473. package/dist/inspector/ui/PopoverListbox.d.ts +37 -0
  474. package/dist/inspector/ui/PopoverListbox.js +21 -0
  475. package/dist/inspector/ui/SegmentedControl.d.ts +24 -0
  476. package/dist/inspector/ui/SegmentedControl.js +16 -0
  477. package/dist/inspector/ui/Select.d.ts +25 -0
  478. package/dist/inspector/ui/Select.js +56 -0
  479. package/dist/inspector/ui/SideValuesField.d.ts +44 -0
  480. package/dist/inspector/ui/SideValuesField.js +76 -0
  481. package/dist/inspector/ui/StatusCallout.d.ts +9 -0
  482. package/dist/inspector/ui/StatusCallout.js +4 -0
  483. package/dist/inspector/ui/TextInput.d.ts +12 -0
  484. package/dist/inspector/ui/TextInput.js +5 -0
  485. package/dist/inspector/ui/ToggleButton.d.ts +11 -0
  486. package/dist/inspector/ui/ToggleButton.js +6 -0
  487. package/dist/inspector/ui/assets/grid.svg +14 -0
  488. package/dist/inspector/ui/css.d.ts +9 -0
  489. package/dist/inspector/ui/labels.d.ts +1 -0
  490. package/dist/inspector/ui/labels.js +7 -0
  491. package/dist/inspector/ui/styles.d.ts +1 -0
  492. package/dist/inspector/ui/styles.js +68 -0
  493. package/dist/inspector/virtual-modules.d.ts +7 -0
  494. package/dist/inspector/vite-env.d.ts +10 -0
  495. package/dist/internal/agent-protocol.d.ts +232 -0
  496. package/dist/internal/agent-protocol.js +237 -0
  497. package/dist/nudge-ui.mjs +15722 -0
  498. package/dist/project/files.d.ts +19 -0
  499. package/dist/project/files.js +226 -0
  500. package/dist/project/identity.d.ts +6 -0
  501. package/dist/project/identity.js +19 -0
  502. package/dist/project/pathPolicy.d.ts +8 -0
  503. package/dist/project/pathPolicy.js +12 -0
  504. package/dist/project/tokens.d.ts +36 -0
  505. package/dist/project/tokens.js +223 -0
  506. package/dist/transport/index.d.ts +8 -0
  507. package/dist/transport/index.js +8 -0
  508. package/dist/transport/routes.d.ts +13 -0
  509. package/dist/transport/routes.js +16 -0
  510. package/package.json +137 -0
@@ -0,0 +1,70 @@
1
+ const INTERACTION_STYLE_ID = "nudge-ui-interaction-styles";
2
+ const interactionStyleDocuments = new Set();
3
+ const INTERACTION_CSS = `
4
+ [data-cid], [data-cid] * {
5
+ cursor: default !important;
6
+ -webkit-user-select: none !important;
7
+ user-select: none !important;
8
+ }
9
+
10
+ [data-cid] input,
11
+ [data-cid] textarea,
12
+ [data-cid] [contenteditable="true"],
13
+ [data-cid] [contenteditable="plaintext-only"] {
14
+ cursor: text !important;
15
+ -webkit-user-select: text !important;
16
+ user-select: text !important;
17
+ outline: 0 !important;
18
+ }
19
+
20
+ /*
21
+ * An empty rendered-text projection has no glyph for the browser to hit
22
+ * test. The projection module inserts this inspector-owned slot beside the
23
+ * original empty Text node. It is intentionally borderless: the blue fill
24
+ * is the affordance, while the normal selected-element outline remains a
25
+ * separate overlay.
26
+ */
27
+ [data-empty-text] {
28
+ display: inline-block !important;
29
+ width: 0.75em !important;
30
+ min-width: 0.75em !important;
31
+ height: 1em !important;
32
+ min-height: 1em !important;
33
+ vertical-align: baseline !important;
34
+ border: 0 !important;
35
+ border-radius: 2px !important;
36
+ background: rgba(59, 130, 246, 0.16) !important;
37
+ cursor: text !important;
38
+ -webkit-user-select: none !important;
39
+ user-select: none !important;
40
+ outline: 0 !important;
41
+ }
42
+ `;
43
+ export function isInteractionStylesInstalled(doc = document) {
44
+ return interactionStyleDocuments.has(doc);
45
+ }
46
+ /** Installs temporary interaction affordances without mutating tracked nodes. */
47
+ export function installInteractionStyles(doc = document) {
48
+ // SAFETY: getElementById returns an Element; the style element is created as HTMLStyleElement below when missing.
49
+ let style = doc.getElementById(INTERACTION_STYLE_ID);
50
+ let created = false;
51
+ if (!style) {
52
+ style = doc.createElement("style");
53
+ style.id = INTERACTION_STYLE_ID;
54
+ style.textContent = INTERACTION_CSS;
55
+ doc.head.append(style);
56
+ created = true;
57
+ }
58
+ interactionStyleDocuments.add(doc);
59
+ for (const slot of Array.from(doc.querySelectorAll("[data-empty-text]"))) {
60
+ slot.hidden = false;
61
+ }
62
+ return () => {
63
+ interactionStyleDocuments.delete(doc);
64
+ for (const slot of Array.from(doc.querySelectorAll("[data-empty-text]"))) {
65
+ slot.hidden = true;
66
+ }
67
+ if (created)
68
+ style?.remove();
69
+ };
70
+ }
@@ -0,0 +1,25 @@
1
+ import type { BorderWidths, Rect } from "./overlayGeometry.js";
2
+ export type MeasurementAxis = "horizontal" | "vertical";
3
+ export interface MeasurementSegment {
4
+ id: string;
5
+ kind: "ruler" | "projection";
6
+ axis: MeasurementAxis;
7
+ from: {
8
+ x: number;
9
+ y: number;
10
+ };
11
+ to: {
12
+ x: number;
13
+ y: number;
14
+ };
15
+ /** A ruler has a visible, rounded pixel label; projections do not. */
16
+ distance?: number;
17
+ }
18
+ export interface MeasurementGeometry {
19
+ segments: MeasurementSegment[];
20
+ }
21
+ export interface MeasurementGeometryOptions {
22
+ selectedBorders?: BorderWidths;
23
+ hoveredBorders?: BorderWidths;
24
+ }
25
+ export declare function getMeasurementGeometry(selected: Rect, hovered: Rect, options?: MeasurementGeometryOptions): MeasurementGeometry;
@@ -0,0 +1,104 @@
1
+ const EPSILON = 0.01;
2
+ function bounds(rect, axis) {
3
+ return axis === "horizontal"
4
+ ? { min: rect.left, max: rect.left + rect.width }
5
+ : { min: rect.top, max: rect.top + rect.height };
6
+ }
7
+ function innerBounds(rect, borders, axis) {
8
+ const outer = bounds(rect, axis);
9
+ if (!borders)
10
+ return outer;
11
+ return axis === "horizontal"
12
+ ? { min: outer.min + borders.left, max: outer.max - borders.right }
13
+ : { min: outer.min + borders.top, max: outer.max - borders.bottom };
14
+ }
15
+ function center(rect, axis) {
16
+ const range = bounds(rect, axis);
17
+ return (range.min + range.max) / 2;
18
+ }
19
+ function centerFromBounds(range) {
20
+ return (range.min + range.max) / 2;
21
+ }
22
+ function hasLength(from, to) {
23
+ return Math.abs(to - from) > EPSILON;
24
+ }
25
+ /**
26
+ * Finds the labelled ruler(s) for one axis. A positive gap gets a single
27
+ * nearest-edge ruler. On overlap, the measurement changes to the hovered
28
+ * element's far edge; containment has two meaningful inset measurements.
29
+ */
30
+ function getAxisRulers(selected, hovered, selectedInner, hoveredInner) {
31
+ if (selected.max < hovered.min - EPSILON) {
32
+ return [{ selectedEdge: selected.max, hoveredEdge: hovered.min }];
33
+ }
34
+ if (hovered.max < selected.min - EPSILON) {
35
+ return [{ selectedEdge: selected.min, hoveredEdge: hovered.max }];
36
+ }
37
+ const selectedContainsHovered = selected.min <= hovered.min + EPSILON
38
+ && selected.max >= hovered.max - EPSILON;
39
+ const hoveredContainsSelected = hovered.min <= selected.min + EPSILON
40
+ && hovered.max >= selected.max - EPSILON;
41
+ if (selectedContainsHovered && hoveredContainsSelected) {
42
+ return [
43
+ { selectedEdge: selected.min, hoveredEdge: hovered.min },
44
+ { selectedEdge: selected.max, hoveredEdge: hovered.max },
45
+ ].filter((ruler) => hasLength(ruler.selectedEdge, ruler.hoveredEdge));
46
+ }
47
+ if (selectedContainsHovered) {
48
+ return [
49
+ { selectedEdge: selectedInner.min, hoveredEdge: hovered.min },
50
+ { selectedEdge: selectedInner.max, hoveredEdge: hovered.max },
51
+ ].filter((ruler) => hasLength(ruler.selectedEdge, ruler.hoveredEdge));
52
+ }
53
+ if (hoveredContainsSelected) {
54
+ return [
55
+ { selectedEdge: selected.min, hoveredEdge: hoveredInner.min },
56
+ { selectedEdge: selected.max, hoveredEdge: hoveredInner.max },
57
+ ].filter((ruler) => hasLength(ruler.selectedEdge, ruler.hoveredEdge));
58
+ }
59
+ // The boxes partially overlap. Measure from the selected outside edge to
60
+ // the hover's far edge rather than rendering a zero or negative gap.
61
+ if (centerFromBounds(selected) >= centerFromBounds(hovered)) {
62
+ return [{ selectedEdge: selected.min, hoveredEdge: hovered.min }];
63
+ }
64
+ return [{ selectedEdge: selected.max, hoveredEdge: hovered.max }];
65
+ }
66
+ function createSegment(id, kind, axis, from, to, cross) {
67
+ const horizontal = axis === "horizontal";
68
+ return {
69
+ id,
70
+ kind,
71
+ axis,
72
+ from: horizontal ? { x: from, y: cross } : { x: cross, y: from },
73
+ to: horizontal ? { x: to, y: cross } : { x: cross, y: to },
74
+ ...(kind === "ruler" ? { distance: Math.abs(to - from) } : {}),
75
+ };
76
+ }
77
+ /**
78
+ * Solid rulers always run through the selected element's centerline. If the
79
+ * centerline does not meet the hovered edge, a perpendicular dotted extension
80
+ * starts at that hovered edge and joins the ruler.
81
+ */
82
+ function appendPrimaryRulers(segments, selected, hovered, axis, options) {
83
+ const crossAxis = axis === "horizontal" ? "vertical" : "horizontal";
84
+ const cross = center(selected, crossAxis);
85
+ const hoveredCross = bounds(hovered, crossAxis);
86
+ const rulers = getAxisRulers(bounds(selected, axis), bounds(hovered, axis), innerBounds(selected, options.selectedBorders, axis), innerBounds(hovered, options.hoveredBorders, axis));
87
+ rulers.forEach((ruler, index) => {
88
+ segments.push(createSegment(`primary-${axis}-${index}`, "ruler", axis, ruler.selectedEdge, ruler.hoveredEdge, cross));
89
+ const hoveredNearestCrossEdge = cross < hoveredCross.min - EPSILON
90
+ ? hoveredCross.min
91
+ : cross > hoveredCross.max + EPSILON
92
+ ? hoveredCross.max
93
+ : null;
94
+ if (hoveredNearestCrossEdge === null || !hasLength(hoveredNearestCrossEdge, cross))
95
+ return;
96
+ segments.push(createSegment(`projection-${axis}-${index}`, "projection", crossAxis, hoveredNearestCrossEdge, cross, ruler.hoveredEdge));
97
+ });
98
+ }
99
+ export function getMeasurementGeometry(selected, hovered, options = {}) {
100
+ const segments = [];
101
+ appendPrimaryRulers(segments, selected, hovered, "horizontal", options);
102
+ appendPrimaryRulers(segments, selected, hovered, "vertical", options);
103
+ return { segments };
104
+ }
@@ -0,0 +1,40 @@
1
+ export interface Rect {
2
+ left: number;
3
+ top: number;
4
+ width: number;
5
+ height: number;
6
+ }
7
+ export interface Margins {
8
+ top: number;
9
+ right: number;
10
+ bottom: number;
11
+ left: number;
12
+ }
13
+ export interface BorderWidths {
14
+ top: number;
15
+ right: number;
16
+ bottom: number;
17
+ left: number;
18
+ }
19
+ export type MarginGuideSide = keyof Margins;
20
+ export interface MarginGuide {
21
+ side: MarginGuideSide;
22
+ axis: "horizontal" | "vertical";
23
+ distance: number;
24
+ left: number;
25
+ top: number;
26
+ width: number;
27
+ height: number;
28
+ }
29
+ export interface MarginFill {
30
+ side: MarginGuideSide;
31
+ left: number;
32
+ top: number;
33
+ width: number;
34
+ height: number;
35
+ }
36
+ export declare function toRect(domRect: DOMRect): Rect;
37
+ export declare function readMargins(element: HTMLElement): Margins;
38
+ export declare function readBorderWidths(element: HTMLElement): BorderWidths;
39
+ export declare function getMarginGuides(rect: Rect, margins: Margins): MarginGuide[];
40
+ export declare function getMarginFills(rect: Rect, margins: Margins): MarginFill[];
@@ -0,0 +1,59 @@
1
+ import { getElementComputedStyle } from "../runtime/domRealm.js";
2
+ export function toRect(domRect) {
3
+ return {
4
+ left: domRect.left,
5
+ top: domRect.top,
6
+ width: domRect.width,
7
+ height: domRect.height,
8
+ };
9
+ }
10
+ function toPixels(value) {
11
+ const parsed = Number.parseFloat(value);
12
+ return Number.isFinite(parsed) ? parsed : 0;
13
+ }
14
+ export function readMargins(element) {
15
+ const style = getElementComputedStyle(element);
16
+ return {
17
+ top: toPixels(style.marginTop),
18
+ right: toPixels(style.marginRight),
19
+ bottom: toPixels(style.marginBottom),
20
+ left: toPixels(style.marginLeft),
21
+ };
22
+ }
23
+ export function readBorderWidths(element) {
24
+ const style = getElementComputedStyle(element);
25
+ return {
26
+ top: toPixels(style.borderTopWidth),
27
+ right: toPixels(style.borderRightWidth),
28
+ bottom: toPixels(style.borderBottomWidth),
29
+ left: toPixels(style.borderLeftWidth),
30
+ };
31
+ }
32
+ export function getMarginGuides(rect, margins) {
33
+ const guides = [];
34
+ const right = rect.left + rect.width;
35
+ const bottom = rect.top + rect.height;
36
+ if (Math.abs(margins.top) > 0.01)
37
+ guides.push({ side: "top", axis: "horizontal", distance: margins.top, left: rect.left, top: rect.top - margins.top, width: rect.width, height: 0 });
38
+ if (Math.abs(margins.right) > 0.01)
39
+ guides.push({ side: "right", axis: "vertical", distance: margins.right, left: right + margins.right, top: rect.top, width: 0, height: rect.height });
40
+ if (Math.abs(margins.bottom) > 0.01)
41
+ guides.push({ side: "bottom", axis: "horizontal", distance: margins.bottom, left: rect.left, top: bottom + margins.bottom, width: rect.width, height: 0 });
42
+ if (Math.abs(margins.left) > 0.01)
43
+ guides.push({ side: "left", axis: "vertical", distance: margins.left, left: rect.left - margins.left, top: rect.top, width: 0, height: rect.height });
44
+ return guides;
45
+ }
46
+ export function getMarginFills(rect, margins) {
47
+ const fills = [];
48
+ const right = rect.left + rect.width;
49
+ const bottom = rect.top + rect.height;
50
+ if (margins.top > 0.01)
51
+ fills.push({ side: "top", left: rect.left, top: rect.top - margins.top, width: rect.width, height: margins.top });
52
+ if (margins.right > 0.01)
53
+ fills.push({ side: "right", left: right, top: rect.top, width: margins.right, height: rect.height });
54
+ if (margins.bottom > 0.01)
55
+ fills.push({ side: "bottom", left: rect.left, top: bottom, width: rect.width, height: margins.bottom });
56
+ if (margins.left > 0.01)
57
+ fills.push({ side: "left", left: rect.left - margins.left, top: rect.top, width: margins.left, height: rect.height });
58
+ return fills;
59
+ }
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Watches the small set of browser events that can change a selected element's
3
+ * viewport rect without changing its selection identity. Structural gestures
4
+ * can move a selected element between containers, so the child-list observer
5
+ * follows the element's current parent after each mutation.
6
+ */
7
+ export declare function observeSelectedGeometry(element: HTMLElement, onChange: () => void): () => void;
@@ -0,0 +1,51 @@
1
+ import { getElementWindow } from "../runtime/domRealm.js";
2
+ /**
3
+ * Watches the small set of browser events that can change a selected element's
4
+ * viewport rect without changing its selection identity. Structural gestures
5
+ * can move a selected element between containers, so the child-list observer
6
+ * follows the element's current parent after each mutation.
7
+ */
8
+ export function observeSelectedGeometry(element, onChange) {
9
+ const view = getElementWindow(element);
10
+ // getElementWindow returns the cross-realm Window interface, while the
11
+ // project-wide browser global also carries the observer constructors.
12
+ // SAFETY: view is a same-realm Window, and the runtime realm exposes the observer constructors as project-wide globals.
13
+ const { ResizeObserver: ResizeObserverCtor, MutationObserver: MutationObserverCtor } = view;
14
+ let frame = null;
15
+ function schedule() {
16
+ if (frame !== null)
17
+ return;
18
+ frame = view.requestAnimationFrame(() => {
19
+ frame = null;
20
+ onChange();
21
+ });
22
+ }
23
+ const resizeObserver = ResizeObserverCtor
24
+ ? new ResizeObserverCtor(schedule)
25
+ : null;
26
+ resizeObserver?.observe(element);
27
+ let observedParent = null;
28
+ const mutationObserver = MutationObserverCtor ? new MutationObserverCtor(() => {
29
+ const currentParent = element.parentElement;
30
+ if (currentParent !== observedParent) {
31
+ observedParent = currentParent;
32
+ mutationObserver?.disconnect();
33
+ if (observedParent)
34
+ mutationObserver?.observe(observedParent, { childList: true });
35
+ }
36
+ schedule();
37
+ }) : null;
38
+ observedParent = element.parentElement;
39
+ if (observedParent)
40
+ mutationObserver?.observe(observedParent, { childList: true });
41
+ view.addEventListener("resize", schedule);
42
+ view.addEventListener("scroll", schedule, true);
43
+ return () => {
44
+ if (frame !== null)
45
+ view.cancelAnimationFrame(frame);
46
+ resizeObserver?.disconnect();
47
+ mutationObserver?.disconnect();
48
+ view.removeEventListener("resize", schedule);
49
+ view.removeEventListener("scroll", schedule, true);
50
+ };
51
+ }
@@ -0,0 +1,28 @@
1
+ import type { SelectedElement } from "../selection/selectionStore.js";
2
+ import { type StructuralDelete, type StructuralMove } from "../projection/structuralProjection.js";
3
+ export type StructuralNudgeKey = "ArrowUp" | "ArrowDown" | "ArrowLeft" | "ArrowRight";
4
+ /**
5
+ * A temporary, document-local insertion point. It is intentionally not a
6
+ * structural record: `moveElement` captures durable rendered-instance refs
7
+ * before handing the canonical action to structuralProjection.
8
+ */
9
+ export interface DropLocation {
10
+ parent: HTMLElement;
11
+ before: Node | null;
12
+ orientation: "horizontal" | "vertical";
13
+ left: number;
14
+ top: number;
15
+ width: number;
16
+ height: number;
17
+ }
18
+ /** Conservative HTML guard shared with canonical capture and document replay. */
19
+ export declare function canContainElement(parent: HTMLElement, child: HTMLElement): boolean;
20
+ /** Derives a safe insertion point; its nodes never leave this gesture module. */
21
+ export declare function getDropLocationForElement(dragged: HTMLElement, target: HTMLElement, beforeTarget: boolean, preferContainer?: boolean): DropLocation | null;
22
+ export declare function getDropLocationAtPoint(doc: Document, dragged: HTMLElement, x: number, y: number): DropLocation | null;
23
+ /** Capture the move as canonical intent, then project only the controller host. */
24
+ export declare function moveElement(node: HTMLElement, destination: DropLocation): StructuralMove | null;
25
+ /** Reorder only same-parent siblings; horizontal movement needs a flex row. */
26
+ export declare function nudgeElement(node: HTMLElement, key: StructuralNudgeKey): StructuralMove | null;
27
+ /** Capture delete intent and project only the controller host. */
28
+ export declare function deleteElement(selected: SelectedElement): StructuralDelete | null;
@@ -0,0 +1,180 @@
1
+ import { applyStructuralProjection, canContainElement as canContainStructuralElement, createStructuralDelete, createStructuralMove, getStructuralMoveLegality, getStructuralChanges, } from "../projection/structuralProjection.js";
2
+ /** Conservative HTML guard shared with canonical capture and document replay. */
3
+ export function canContainElement(parent, child) {
4
+ return canContainStructuralElement(parent, child);
5
+ }
6
+ function isContainerCandidate(element, dragged) {
7
+ return getStructuralMoveLegality(dragged, { parent: element, before: null }).valid;
8
+ }
9
+ function isFlexRow(parent) {
10
+ const style = parent.ownerDocument.defaultView?.getComputedStyle(parent);
11
+ return (style?.display === "flex" || style?.display === "inline-flex")
12
+ && (style.flexDirection || "row").startsWith("row");
13
+ }
14
+ function isFlexRowReverse(parent) {
15
+ return parent.ownerDocument.defaultView?.getComputedStyle(parent).flexDirection === "row-reverse";
16
+ }
17
+ function rightOf(rect) {
18
+ return Number.isFinite(rect.right) ? rect.right : rect.left + rect.width;
19
+ }
20
+ function bottomOf(rect) {
21
+ return Number.isFinite(rect.bottom) ? rect.bottom : rect.top + rect.height;
22
+ }
23
+ function lineFor(parent, before, flexGapCentre) {
24
+ const parentRect = parent.getBoundingClientRect();
25
+ // SAFETY: before.nodeType === 1 was checked above, so it is an HTMLElement.
26
+ const beforeElement = before?.nodeType === 1 ? before : null;
27
+ const reference = beforeElement ?? parent.lastElementChild;
28
+ const referenceRect = reference?.getBoundingClientRect();
29
+ const parentRight = rightOf(parentRect);
30
+ const parentBottom = bottomOf(parentRect);
31
+ const horizontalInset = Math.min(8, Math.max(2, parentRect.width / 12));
32
+ if (isFlexRow(parent)) {
33
+ const reverse = isFlexRowReverse(parent);
34
+ const intendedLeft = flexGapCentre ?? (beforeElement
35
+ ? (reverse ? rightOf(referenceRect ?? parentRect) : referenceRect?.left ?? parentRect.left)
36
+ : (reverse ? referenceRect?.left ?? parentRect.left : rightOf(referenceRect ?? parentRect)));
37
+ const verticalInset = Math.min(8, Math.max(2, parentRect.height / 12));
38
+ return {
39
+ orientation: "vertical",
40
+ left: Math.max(parentRect.left + 2, Math.min(intendedLeft, parentRight - 2)),
41
+ top: parentRect.top + verticalInset,
42
+ width: 4,
43
+ height: Math.max(0, parentRect.height - verticalInset * 2),
44
+ };
45
+ }
46
+ const intendedTop = beforeElement
47
+ ? referenceRect?.top ?? parentRect.top
48
+ : referenceRect ? bottomOf(referenceRect) : parentRect.top + 8;
49
+ return {
50
+ orientation: "horizontal",
51
+ left: parentRect.left + horizontalInset,
52
+ top: Math.max(parentRect.top + 4, Math.min(intendedTop, parentBottom - 4)),
53
+ width: Math.max(0, parentRect.width - horizontalInset * 2),
54
+ height: 4,
55
+ };
56
+ }
57
+ function flexRowGapAtPoint(parent, dragged, x, y) {
58
+ const style = parent.ownerDocument.defaultView?.getComputedStyle(parent);
59
+ if ((style?.flexWrap && style.flexWrap !== "nowrap") || !canContainElement(parent, dragged))
60
+ return null;
61
+ const parentRect = parent.getBoundingClientRect();
62
+ if (y < parentRect.top || y > bottomOf(parentRect))
63
+ return null;
64
+ let left = null;
65
+ let right = null;
66
+ const HTMLElementConstructor = parent.ownerDocument.defaultView.HTMLElement;
67
+ for (const child of Array.from(parent.children)) {
68
+ if (!(child instanceof HTMLElementConstructor))
69
+ continue;
70
+ const rect = child.getBoundingClientRect();
71
+ if (rightOf(rect) <= x && (!left || rightOf(rect) > rightOf(left.rect)))
72
+ left = { element: child, rect };
73
+ if (rect.left >= x && (!right || rect.left < right.rect.left))
74
+ right = { element: child, rect };
75
+ }
76
+ if (!left || !right)
77
+ return null;
78
+ const gapStart = rightOf(left.rect);
79
+ const gapEnd = right.rect.left;
80
+ if (gapEnd - gapStart < 4)
81
+ return null;
82
+ const before = isFlexRowReverse(parent) ? left.element : right.element;
83
+ if (!getStructuralMoveLegality(dragged, { parent, before }).valid)
84
+ return null;
85
+ return { parent, before, ...lineFor(parent, before, (gapStart + gapEnd) / 2) };
86
+ }
87
+ function flexRowChildAtTarget(dragged, target) {
88
+ let child = target;
89
+ while (child?.parentElement) {
90
+ const parent = child.parentElement;
91
+ if (isFlexRow(parent) && canContainElement(parent, dragged)
92
+ && child !== dragged && !dragged.contains(child))
93
+ return child;
94
+ child = parent;
95
+ }
96
+ return null;
97
+ }
98
+ /** Derives a safe insertion point; its nodes never leave this gesture module. */
99
+ export function getDropLocationForElement(dragged, target, beforeTarget, preferContainer = true) {
100
+ if (target === dragged || dragged.contains(target))
101
+ return null;
102
+ if (preferContainer && isContainerCandidate(target, dragged)) {
103
+ const directChild = Array.from(target.children).find((child) => child.contains(dragged));
104
+ if (!directChild) {
105
+ const legality = getStructuralMoveLegality(dragged, { parent: target, before: null });
106
+ if (legality.valid)
107
+ return { parent: target, before: null, ...lineFor(target, null) };
108
+ }
109
+ }
110
+ let candidate = target;
111
+ while (candidate) {
112
+ const parent = candidate.parentElement;
113
+ if (parent && canContainElement(parent, dragged) && candidate !== dragged && !dragged.contains(candidate)) {
114
+ const before = beforeTarget ? candidate : candidate.nextElementSibling;
115
+ const legality = getStructuralMoveLegality(dragged, { parent, before });
116
+ if (legality.valid)
117
+ return { parent, before, ...lineFor(parent, before) };
118
+ return null;
119
+ }
120
+ candidate = parent;
121
+ }
122
+ return null;
123
+ }
124
+ export function getDropLocationAtPoint(doc, dragged, x, y) {
125
+ const target = doc.elementFromPoint(x, y);
126
+ if (!(target instanceof doc.defaultView.HTMLElement))
127
+ return null;
128
+ if (isFlexRow(target)) {
129
+ const gapDrop = flexRowGapAtPoint(target, dragged, x, y);
130
+ if (gapDrop)
131
+ return gapDrop;
132
+ }
133
+ const flexRowChild = flexRowChildAtTarget(dragged, target);
134
+ if (flexRowChild) {
135
+ const rect = flexRowChild.getBoundingClientRect();
136
+ const reverse = isFlexRowReverse(flexRowChild.parentElement);
137
+ return getDropLocationForElement(dragged, flexRowChild, reverse ? x > rect.left + rect.width / 2 : x < rect.left + rect.width / 2, false);
138
+ }
139
+ const rect = target.getBoundingClientRect();
140
+ const edgeBand = Math.min(24, Math.max(8, rect.height * 0.3));
141
+ const inContainerInterior = y - rect.top > edgeBand && y - rect.top < rect.height - edgeBand;
142
+ return getDropLocationForElement(dragged, target, y < rect.top + rect.height / 2, inContainerInterior);
143
+ }
144
+ /** Capture the move as canonical intent, then project only the controller host. */
145
+ export function moveElement(node, destination) {
146
+ if (!getStructuralMoveLegality(node, destination).valid)
147
+ return null;
148
+ const change = createStructuralMove(node, destination);
149
+ if (!change)
150
+ return null;
151
+ // `document` belongs to the controller runtime. A Canvas source element is
152
+ // deliberately not projected here; its renderer receives this snapshot once.
153
+ applyStructuralProjection(document, getStructuralChanges());
154
+ return change;
155
+ }
156
+ /** Reorder only same-parent siblings; horizontal movement needs a flex row. */
157
+ export function nudgeElement(node, key) {
158
+ const parent = node.parentElement;
159
+ if (!parent || !node.isConnected)
160
+ return null;
161
+ if ((key === "ArrowLeft" || key === "ArrowRight") && !isFlexRow(parent))
162
+ return null;
163
+ const moveEarlier = key === "ArrowUp" || key === "ArrowLeft";
164
+ const sibling = moveEarlier ? node.previousElementSibling : node.nextElementSibling;
165
+ if (!sibling)
166
+ return null;
167
+ const before = moveEarlier ? sibling : sibling.nextElementSibling;
168
+ return moveElement(node, { parent, before, ...lineFor(parent, before) });
169
+ }
170
+ /** Capture delete intent and project only the controller host. */
171
+ export function deleteElement(selected) {
172
+ const node = selected.domElement;
173
+ if (!node.parentElement || !node.isConnected)
174
+ return null;
175
+ const change = createStructuralDelete(node);
176
+ if (!change)
177
+ return null;
178
+ applyStructuralProjection(document, getStructuralChanges());
179
+ return change;
180
+ }
@@ -0,0 +1,3 @@
1
+ /** CSS-string escaping for selectors assembled from runtime DOM metadata. */
2
+ export declare function escapeCssString(value: string): string;
3
+ export declare function escapeAttrValue(value: string): string;
@@ -0,0 +1,20 @@
1
+ /** CSS-string escaping for selectors assembled from runtime DOM metadata. */
2
+ export function escapeCssString(value) {
3
+ // Keep ordinary source selectors readable and byte-compatible. Once a
4
+ // string contains a quote, backslash, or control character, hex-escape the
5
+ // complete value so punctuation cannot terminate the CSS string early.
6
+ if (!/["\\\0-\x1f\x7f]/.test(value))
7
+ return value;
8
+ let escaped = "";
9
+ for (const character of value) {
10
+ if (/^[A-Za-z0-9 _-]$/.test(character)) {
11
+ escaped += character;
12
+ continue;
13
+ }
14
+ escaped += `\\${character.codePointAt(0).toString(16)} `;
15
+ }
16
+ return escaped;
17
+ }
18
+ export function escapeAttrValue(value) {
19
+ return escapeCssString(value);
20
+ }
@@ -0,0 +1,33 @@
1
+ import type { StyleRuleContext } from "../changes/editModel.js";
2
+ export { escapeAttrValue, escapeCssString } from "./cssEscapes.js";
3
+ export type { StyleRuleContext } from "../changes/editModel.js";
4
+ declare global {
5
+ interface Window {
6
+ __nudgeUiGetManagedSheetText?: () => string;
7
+ }
8
+ }
9
+ export interface StyleRule {
10
+ selector: string;
11
+ declarations: Record<string, string>;
12
+ context?: StyleRuleContext;
13
+ }
14
+ export type PreviewConflictReason = "higher-specificity" | "inline-style" | "important" | "animation" | "transition" | "target-missing" | "token-drift";
15
+ export interface PreviewResult {
16
+ requestedValue: string;
17
+ computedValue: string;
18
+ status: "applied" | "conflict";
19
+ reason?: PreviewConflictReason;
20
+ }
21
+ export declare function ensureManagedSheet(): void;
22
+ export declare function rulesToCssText(rules: StyleRule[]): string;
23
+ /** Synchronous serialized view of the rules currently projected into the managed sheet. */
24
+ export declare function getManagedSheetText(): string;
25
+ /**
26
+ * Replaces the managed sheet with the canonical projection. Keeping the
27
+ * serialized rules authoritative avoids stale CSSStyleRule references when a
28
+ * framework dev server reparses or reattaches style nodes during a render.
29
+ */
30
+ export declare function applyRules(rules: StyleRule[]): void;
31
+ /** Verify what the browser painted after the managed sheet was projected. */
32
+ export declare function verifyPreview(el: HTMLElement | null, property: string, requestedValue: string): PreviewResult;
33
+ export declare function removeManagedSheet(): void;