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,328 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useRef, useState } from "react";
3
+ import { useInspectorOpen } from "../shell/openStore.js";
4
+ import { getSelectedElements, useSelectedElement, useSelectedElements } from "../selection/selectionStore.js";
5
+ import { installElementSelector } from "./elementSelector.js";
6
+ import { getMarginFills, getMarginGuides, readBorderWidths, readMargins, toRect, } from "./overlayGeometry.js";
7
+ import { observeSelectedGeometry } from "./selectedGeometry.js";
8
+ import { getDropLocationAtPoint, moveElement } from "./structuralGestures.js";
9
+ import { resolveSelectionFromElement } from "../selection/resolveSelection.js";
10
+ import { setSelectedElement } from "../selection/selectionStore.js";
11
+ import { installInteractionStyles } from "./interactionStyles.js";
12
+ import { clearDropGuide, showDropGuide, useDropGuide } from "./dropGuide.js";
13
+ import { DropGuideOverlay } from "./DropGuideOverlay.js";
14
+ import { createFrameThrottle } from "./frameThrottle.js";
15
+ import { getMeasurementGeometry } from "./measurementGeometry.js";
16
+ import { MeasurementGuideOverlay } from "./MeasurementGuideOverlay.js";
17
+ import { resolveSelectionTarget, selectionTargetMode } from "../selection/selectionTarget.js";
18
+ import { isInlineTextEditingActive, useInlineTextSession } from "../inline-text/inlineTextEditor.js";
19
+ import { EMPTY_TEXT_PROJECTION_ATTR } from "../projection/textProjection.js";
20
+ export { getMarginFills, getMarginGuides, } from "./overlayGeometry.js";
21
+ function overlayStyle(rect) {
22
+ return {
23
+ position: "fixed",
24
+ left: rect.left,
25
+ top: rect.top,
26
+ width: rect.width,
27
+ height: rect.height,
28
+ pointerEvents: "none",
29
+ };
30
+ }
31
+ export function InspectorOverlay({ host }) {
32
+ const open = useInspectorOpen();
33
+ const selected = useSelectedElement();
34
+ const selectedElements = useSelectedElements();
35
+ const inlineTextSession = useInlineTextSession();
36
+ const [hoverRect, setHoverRect] = useState(null);
37
+ const [hoverMargins, setHoverMargins] = useState(null);
38
+ const [hoverBorders, setHoverBorders] = useState(null);
39
+ const [selectedRects, setSelectedRects] = useState([]);
40
+ const [selectedBorders, setSelectedBorders] = useState(null);
41
+ const [optionDown, setOptionDown] = useState(false);
42
+ const [pointerOverPage, setPointerOverPage] = useState(false);
43
+ const dropGuide = useDropGuide("inspect");
44
+ const hoverElRef = useRef(null);
45
+ const isDraggingRef = useRef(false);
46
+ const rafRef = useRef(0);
47
+ useEffect(() => {
48
+ if (!open) {
49
+ setHoverRect(null);
50
+ setHoverMargins(null);
51
+ setHoverBorders(null);
52
+ hoverElRef.current = null;
53
+ setPointerOverPage(false);
54
+ return;
55
+ }
56
+ let observedHover = null;
57
+ const ResizeObserverCtor = window.ResizeObserver;
58
+ const hoverResizeObserver = ResizeObserverCtor ? new ResizeObserverCtor(scheduleHoverRecalc) : null;
59
+ function clearHover() {
60
+ hoverElRef.current = null;
61
+ setHoverRect(null);
62
+ setHoverMargins(null);
63
+ setHoverBorders(null);
64
+ hoverResizeObserver?.disconnect();
65
+ observedHover = null;
66
+ }
67
+ function observeHover(el) {
68
+ if (observedHover === el)
69
+ return;
70
+ hoverResizeObserver?.disconnect();
71
+ hoverResizeObserver?.observe(el);
72
+ observedHover = el;
73
+ }
74
+ function recalcHover() {
75
+ if (isDraggingRef.current)
76
+ return;
77
+ const el = hoverElRef.current;
78
+ if (!el) {
79
+ setHoverRect(null);
80
+ setHoverMargins(null);
81
+ setHoverBorders(null);
82
+ return;
83
+ }
84
+ setHoverRect(toRect(el.getBoundingClientRect()));
85
+ setHoverMargins(readMargins(el));
86
+ setHoverBorders(readBorderWidths(el));
87
+ }
88
+ function scheduleHoverRecalc() {
89
+ if (isDraggingRef.current)
90
+ return;
91
+ cancelAnimationFrame(rafRef.current);
92
+ rafRef.current = requestAnimationFrame(recalcHover);
93
+ }
94
+ function onMouseOver(e) {
95
+ if (isDraggingRef.current)
96
+ return;
97
+ const target = e.target;
98
+ if (!(target instanceof HTMLElement))
99
+ return;
100
+ if (host === target || host.contains(target)) {
101
+ setPointerOverPage(false);
102
+ clearHover();
103
+ return;
104
+ }
105
+ setPointerOverPage(true);
106
+ const el = resolveSelectionTarget(target, selectionTargetMode(e));
107
+ if (!el) {
108
+ clearHover();
109
+ return;
110
+ }
111
+ hoverElRef.current = el;
112
+ observeHover(el);
113
+ scheduleHoverRecalc();
114
+ }
115
+ function onMouseOut(e) {
116
+ if (isDraggingRef.current)
117
+ return;
118
+ const related = e.relatedTarget;
119
+ if (!related || !(related instanceof Node)) {
120
+ setPointerOverPage(false);
121
+ clearHover();
122
+ return;
123
+ }
124
+ if (host === related || host.contains(related)) {
125
+ setPointerOverPage(false);
126
+ clearHover();
127
+ return;
128
+ }
129
+ const nearest = resolveSelectionTarget(related, selectionTargetMode(e));
130
+ if (nearest !== hoverElRef.current)
131
+ clearHover();
132
+ }
133
+ document.addEventListener("mouseover", onMouseOver, true);
134
+ document.addEventListener("mouseout", onMouseOut, true);
135
+ window.addEventListener("resize", scheduleHoverRecalc);
136
+ window.addEventListener("scroll", scheduleHoverRecalc, true);
137
+ const removeClickCapture = installElementSelector(host);
138
+ return () => {
139
+ cancelAnimationFrame(rafRef.current);
140
+ document.removeEventListener("mouseover", onMouseOver, true);
141
+ document.removeEventListener("mouseout", onMouseOut, true);
142
+ removeClickCapture();
143
+ window.removeEventListener("resize", scheduleHoverRecalc);
144
+ window.removeEventListener("scroll", scheduleHoverRecalc, true);
145
+ hoverResizeObserver?.disconnect();
146
+ };
147
+ }, [open, host]);
148
+ useEffect(() => {
149
+ let raf = 0;
150
+ function recalc() {
151
+ setSelectedRects(selectedElements.map((candidate) => toRect(candidate.domElement.getBoundingClientRect())));
152
+ if (selected) {
153
+ setSelectedBorders(readBorderWidths(selected.domElement));
154
+ }
155
+ else {
156
+ setSelectedBorders(null);
157
+ }
158
+ }
159
+ function schedule() {
160
+ cancelAnimationFrame(raf);
161
+ raf = requestAnimationFrame(recalc);
162
+ }
163
+ recalc();
164
+ const stopObserving = selectedElements.map((candidate) => observeSelectedGeometry(candidate.domElement, schedule));
165
+ return () => {
166
+ cancelAnimationFrame(raf);
167
+ stopObserving.forEach((stop) => stop());
168
+ };
169
+ }, [selectedElements]);
170
+ useEffect(() => {
171
+ if (!open) {
172
+ setOptionDown(false);
173
+ return;
174
+ }
175
+ function updateOptionState(event) {
176
+ setOptionDown(event.altKey);
177
+ }
178
+ function clearOptionState() {
179
+ setOptionDown(false);
180
+ }
181
+ window.addEventListener("keydown", updateOptionState);
182
+ window.addEventListener("keyup", updateOptionState);
183
+ window.addEventListener("blur", clearOptionState);
184
+ return () => {
185
+ window.removeEventListener("keydown", updateOptionState);
186
+ window.removeEventListener("keyup", updateOptionState);
187
+ window.removeEventListener("blur", clearOptionState);
188
+ };
189
+ }, [open]);
190
+ useEffect(() => {
191
+ if (!open)
192
+ return;
193
+ const removeInteractionStyles = installInteractionStyles();
194
+ let candidate = null;
195
+ let dragging = false;
196
+ let start = null;
197
+ function updateGuide(point) {
198
+ if (!candidate)
199
+ return;
200
+ const drop = getDropLocationAtPoint(document, candidate, point.x, point.y);
201
+ if (drop)
202
+ showDropGuide("inspect", document, drop);
203
+ else
204
+ clearDropGuide("inspect");
205
+ }
206
+ const guideUpdate = createFrameThrottle(updateGuide);
207
+ function clear() {
208
+ guideUpdate.cancel();
209
+ isDraggingRef.current = false;
210
+ candidate = null;
211
+ dragging = false;
212
+ start = null;
213
+ clearDropGuide("inspect");
214
+ }
215
+ function onPointerDown(event) {
216
+ if (isInlineTextEditingActive())
217
+ return;
218
+ if (getSelectedElements().length > 1)
219
+ return;
220
+ if (event.button !== 0 || !(event.target instanceof HTMLElement))
221
+ return;
222
+ if (host === event.target || host.contains(event.target))
223
+ return;
224
+ if (event.target.closest(`[${EMPTY_TEXT_PROJECTION_ATTR}]`))
225
+ return;
226
+ const target = resolveSelectionTarget(event.target, selectionTargetMode(event));
227
+ if (!target)
228
+ return;
229
+ candidate = target;
230
+ start = { x: event.clientX, y: event.clientY };
231
+ }
232
+ function onPointerMove(event) {
233
+ if (isInlineTextEditingActive())
234
+ return;
235
+ if (!candidate || !start)
236
+ return;
237
+ if (!dragging && Math.hypot(event.clientX - start.x, event.clientY - start.y) < 6)
238
+ return;
239
+ event.preventDefault();
240
+ const point = { x: event.clientX, y: event.clientY };
241
+ if (!dragging) {
242
+ dragging = true;
243
+ isDraggingRef.current = true;
244
+ hoverElRef.current = null;
245
+ setHoverRect(null);
246
+ setHoverMargins(null);
247
+ const selected = resolveSelectionFromElement(candidate);
248
+ if (selected)
249
+ setSelectedElement(selected);
250
+ updateGuide(point);
251
+ return;
252
+ }
253
+ guideUpdate.schedule(point);
254
+ }
255
+ function onPointerUp(event) {
256
+ if (isInlineTextEditingActive())
257
+ return;
258
+ if (!candidate || !dragging) {
259
+ clear();
260
+ return;
261
+ }
262
+ event.preventDefault();
263
+ const drop = getDropLocationAtPoint(document, candidate, event.clientX, event.clientY);
264
+ if (drop)
265
+ moveElement(candidate, drop);
266
+ const selected = resolveSelectionFromElement(candidate);
267
+ if (selected)
268
+ setSelectedElement(selected);
269
+ clear();
270
+ }
271
+ document.addEventListener("mousedown", onPointerDown, true);
272
+ document.addEventListener("mousemove", onPointerMove, true);
273
+ document.addEventListener("mouseup", onPointerUp, true);
274
+ return () => {
275
+ document.removeEventListener("mousedown", onPointerDown, true);
276
+ document.removeEventListener("mousemove", onPointerMove, true);
277
+ document.removeEventListener("mouseup", onPointerUp, true);
278
+ guideUpdate.cancel();
279
+ isDraggingRef.current = false;
280
+ clearDropGuide("inspect");
281
+ removeInteractionStyles();
282
+ };
283
+ }, [open, host]);
284
+ const selectedGeometry = selectedElements.flatMap((candidate, index) => {
285
+ const rect = selectedRects[index];
286
+ return rect ? [{ element: candidate, rect }] : [];
287
+ });
288
+ const selectedPrimaryIndex = selectedElements.findIndex((candidate) => candidate.domElement === selected?.domElement);
289
+ const selectedRect = selectedRects[selectedPrimaryIndex >= 0 ? selectedPrimaryIndex : 0] ?? null;
290
+ const hoverStyle = hoverRect ? overlayStyle(hoverRect) : { display: "none" };
291
+ const hoverMarginGuides = hoverRect && hoverMargins
292
+ ? getMarginGuides(hoverRect, hoverMargins)
293
+ : [];
294
+ const hoverMarginFills = hoverRect && hoverMargins
295
+ ? getMarginFills(hoverRect, hoverMargins)
296
+ : [];
297
+ const showGuideOverlay = open
298
+ && selectedElements.length === 1
299
+ && optionDown
300
+ && pointerOverPage
301
+ && selectedRect;
302
+ const showMeasurement = showGuideOverlay
303
+ && hoverRect
304
+ && hoverElRef.current !== selected?.domElement;
305
+ const measurement = showMeasurement && selectedRect && hoverRect
306
+ ? getMeasurementGeometry(selectedRect, hoverRect, {
307
+ selectedBorders: selectedBorders ?? undefined,
308
+ hoveredBorders: hoverBorders ?? undefined,
309
+ })
310
+ : null;
311
+ return (_jsxs(_Fragment, { children: [showGuideOverlay && selectedRect ? (_jsx(MeasurementGuideOverlay, { selectedRect: selectedRect, segments: measurement?.segments ?? [] })) : null, open && hoverRect ? (_jsxs(_Fragment, { children: [hoverMarginFills.map((fill) => (_jsx("div", { className: "hover-margin-fill", "data-side": fill.side, style: {
312
+ position: "fixed",
313
+ left: fill.left,
314
+ top: fill.top,
315
+ width: fill.width,
316
+ height: fill.height,
317
+ pointerEvents: "none",
318
+ }, "aria-hidden": "true" }, fill.side))), _jsx("div", { className: "hover-outline", style: hoverStyle, "aria-hidden": "true" }), hoverMarginGuides.map((guide) => (_jsx("div", { className: "hover-margin", "data-axis": guide.axis, "data-distance": guide.distance, "data-side": guide.side, style: {
319
+ position: "fixed",
320
+ left: guide.left,
321
+ top: guide.top,
322
+ width: guide.width,
323
+ height: guide.height,
324
+ pointerEvents: "none",
325
+ }, "aria-hidden": "true" }, guide.side)))] })) : null, open && !inlineTextSession ? selectedGeometry.map(({ element, rect }, index) => (_jsx("div", { className: "selected-outline", "data-test": "selected-outline", "data-selected-cid": element.cid, "data-selected-index": index, "data-selected-src": element.src, style: overlayStyle(rect), "aria-hidden": "true" }, `${element.domElement.getAttribute("data-cid") ?? "element"}-${index}`))) : null, open && selectedElements.length === 1 ? _jsx(DropGuideOverlay, { guide: dropGuide?.document === document
326
+ ? { orientation: dropGuide.orientation, line: dropGuide.line, target: dropGuide.target }
327
+ : null, lineClassName: "dom-drop-line", lineTestId: "dom-drop-line", targetClassName: "dom-drop-target", targetTestId: "dom-drop-target" }) : null] }));
328
+ }
@@ -0,0 +1,19 @@
1
+ import { type ReactElement } from "react";
2
+ import type { Rect } from "./overlayGeometry.js";
3
+ import type { MeasurementSegment } from "./measurementGeometry.js";
4
+ interface MeasurementGuideOverlayProps {
5
+ /** The selected element in the overlay's screen coordinate system. */
6
+ selectedRect: Rect;
7
+ /** The viewport that alignment guides should span. */
8
+ guideViewport?: Rect;
9
+ /** Measurement geometry in the overlay's screen coordinate system. */
10
+ segments: MeasurementSegment[];
11
+ testId?: string;
12
+ }
13
+ /**
14
+ * Renders measurement geometry over a viewport. The Inspect surface passes
15
+ * browser coordinates directly; Canvas projects iframe-local coordinates into
16
+ * the same screen coordinate system before rendering here.
17
+ */
18
+ export declare function MeasurementGuideOverlay({ selectedRect, guideViewport, segments, testId, }: MeasurementGuideOverlayProps): ReactElement;
19
+ export {};
@@ -0,0 +1,40 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useState } from "react";
3
+ /**
4
+ * Renders measurement geometry over a viewport. The Inspect surface passes
5
+ * browser coordinates directly; Canvas projects iframe-local coordinates into
6
+ * the same screen coordinate system before rendering here.
7
+ */
8
+ export function MeasurementGuideOverlay({ selectedRect, guideViewport, segments, testId = "measurement-overlay", }) {
9
+ const [windowViewport, setWindowViewport] = useState(() => ({
10
+ width: window.innerWidth,
11
+ height: window.innerHeight,
12
+ }));
13
+ useEffect(() => {
14
+ function updateViewport() {
15
+ setWindowViewport({ width: window.innerWidth, height: window.innerHeight });
16
+ }
17
+ window.addEventListener("resize", updateViewport);
18
+ return () => window.removeEventListener("resize", updateViewport);
19
+ }, []);
20
+ const resolvedGuideViewport = guideViewport ?? {
21
+ left: 0,
22
+ top: 0,
23
+ width: windowViewport.width,
24
+ height: windowViewport.height,
25
+ };
26
+ const guideRight = resolvedGuideViewport.left + resolvedGuideViewport.width;
27
+ const guideBottom = resolvedGuideViewport.top + resolvedGuideViewport.height;
28
+ const selectedRight = selectedRect.left + selectedRect.width;
29
+ const selectedBottom = selectedRect.top + selectedRect.height;
30
+ return (_jsxs("svg", { className: "measurement-overlay", "data-test": testId, width: windowViewport.width, height: windowViewport.height, viewBox: `0 0 ${windowViewport.width} ${windowViewport.height}`, "aria-hidden": "true", children: [_jsx("line", { className: "alignment-guide", x1: resolvedGuideViewport.left, y1: selectedRect.top, x2: guideRight, y2: selectedRect.top }), _jsx("line", { className: "alignment-guide", x1: resolvedGuideViewport.left, y1: selectedBottom, x2: guideRight, y2: selectedBottom }), _jsx("line", { className: "alignment-guide", x1: selectedRect.left, y1: resolvedGuideViewport.top, x2: selectedRect.left, y2: guideBottom }), _jsx("line", { className: "alignment-guide", x1: selectedRight, y1: resolvedGuideViewport.top, x2: selectedRight, y2: guideBottom }), segments.map((segment) => {
31
+ const labelX = (segment.from.x + segment.to.x) / 2;
32
+ const labelY = (segment.from.y + segment.to.y) / 2;
33
+ const isHorizontal = segment.axis === "horizontal";
34
+ const labelText = segment.distance === undefined ? null : `${Math.round(segment.distance)}px`;
35
+ const labelWidth = labelText ? labelText.length * 7 + 10 : 0;
36
+ const textX = isHorizontal ? labelX : labelX + 6;
37
+ const textY = isHorizontal ? labelY - 6 : labelY + 4;
38
+ return (_jsxs("g", { children: [_jsx("line", { className: segment.kind === "projection" ? "measurement-projection" : "measurement-ruler", "data-test": segment.kind === "projection" ? "measurement-projection" : "measurement-ruler", "data-segment-id": segment.id, "data-axis": segment.axis, x1: segment.from.x, y1: segment.from.y, x2: segment.to.x, y2: segment.to.y }), labelText ? (_jsxs(_Fragment, { children: [_jsx("rect", { className: "measurement-label-chip", "data-test": "measurement-label-chip", x: isHorizontal ? textX - labelWidth / 2 : textX - 4, y: textY - 12, width: labelWidth, height: "16", rx: "2" }), _jsx("text", { className: "measurement-label", "data-test": "measurement-label", x: textX, y: textY, textAnchor: isHorizontal ? "middle" : "start", children: labelText })] })) : null] }, segment.id));
39
+ })] }));
40
+ }
@@ -0,0 +1,7 @@
1
+ export type ClickModifiers = Pick<MouseEvent, "ctrlKey" | "metaKey" | "shiftKey">;
2
+ /** Command/Ctrl-click selects the deepest tracked element unless Shift is held. */
3
+ export declare function isDeepSelectionClick(event: ClickModifiers): boolean;
4
+ /** Command/Ctrl+Shift-click intentionally lets the application receive its click. */
5
+ export declare function isApplicationActivationClick(event: ClickModifiers): boolean;
6
+ /** Prevent an inspected application click from reaching the host application. */
7
+ export declare function blockApplicationClick(event: MouseEvent): void;
@@ -0,0 +1,13 @@
1
+ /** Command/Ctrl-click selects the deepest tracked element unless Shift is held. */
2
+ export function isDeepSelectionClick(event) {
3
+ return (event.ctrlKey || event.metaKey) && !event.shiftKey;
4
+ }
5
+ /** Command/Ctrl+Shift-click intentionally lets the application receive its click. */
6
+ export function isApplicationActivationClick(event) {
7
+ return (event.ctrlKey || event.metaKey) && event.shiftKey;
8
+ }
9
+ /** Prevent an inspected application click from reaching the host application. */
10
+ export function blockApplicationClick(event) {
11
+ event.preventDefault();
12
+ event.stopPropagation();
13
+ }
@@ -0,0 +1,22 @@
1
+ import type { DropLocation } from "./structuralGestures.js";
2
+ export type DropGuideOwner = "inspect" | "canvas";
3
+ export interface DropGuideRect {
4
+ left: number;
5
+ top: number;
6
+ width: number;
7
+ height: number;
8
+ }
9
+ /** A document-local guide. Visual adapters are responsible for projecting it. */
10
+ export interface DropGuide {
11
+ owner: DropGuideOwner;
12
+ document: Document;
13
+ orientation: DropLocation["orientation"];
14
+ line: DropGuideRect;
15
+ target: DropGuideRect;
16
+ }
17
+ /** Publishes one guide model from a DOM insertion location. */
18
+ export declare function showDropGuide(owner: DropGuideOwner, document: Document, drop: DropLocation): void;
19
+ /** Clears only the guide belonging to the caller, preserving another active view. */
20
+ export declare function clearDropGuide(owner: DropGuideOwner): void;
21
+ /** Subscribes a visual adapter to its guide without exposing shared mutable state. */
22
+ export declare function useDropGuide(owner: DropGuideOwner): DropGuide | null;
@@ -0,0 +1,48 @@
1
+ import { useSyncExternalStore } from "react";
2
+ let currentGuide = null;
3
+ const listeners = new Set();
4
+ function notify() {
5
+ listeners.forEach((listener) => listener());
6
+ }
7
+ function subscribe(listener) {
8
+ listeners.add(listener);
9
+ return () => listeners.delete(listener);
10
+ }
11
+ function snapshotFor(owner) {
12
+ return currentGuide?.owner === owner ? currentGuide : null;
13
+ }
14
+ function sameRect(left, right) {
15
+ return left.left === right.left
16
+ && left.top === right.top
17
+ && left.width === right.width
18
+ && left.height === right.height;
19
+ }
20
+ /** Publishes one guide model from a DOM insertion location. */
21
+ export function showDropGuide(owner, document, drop) {
22
+ const target = drop.parent.getBoundingClientRect();
23
+ const nextGuide = {
24
+ owner,
25
+ document,
26
+ orientation: drop.orientation,
27
+ line: { left: drop.left, top: drop.top, width: drop.width, height: drop.height },
28
+ target: { left: target.left, top: target.top, width: target.width, height: target.height },
29
+ };
30
+ if (currentGuide?.owner === owner
31
+ && currentGuide.document === document
32
+ && sameRect(currentGuide.line, nextGuide.line)
33
+ && sameRect(currentGuide.target, nextGuide.target))
34
+ return;
35
+ currentGuide = nextGuide;
36
+ notify();
37
+ }
38
+ /** Clears only the guide belonging to the caller, preserving another active view. */
39
+ export function clearDropGuide(owner) {
40
+ if (currentGuide?.owner !== owner)
41
+ return;
42
+ currentGuide = null;
43
+ notify();
44
+ }
45
+ /** Subscribes a visual adapter to its guide without exposing shared mutable state. */
46
+ export function useDropGuide(owner) {
47
+ return useSyncExternalStore(subscribe, () => snapshotFor(owner), () => null);
48
+ }
@@ -0,0 +1 @@
1
+ export declare function installElementSelector(inspectorHost: HTMLElement): () => void;
@@ -0,0 +1,100 @@
1
+ import { getSelectedElements, setSelectedElement, toggleSelectedElement } from "../selection/selectionStore.js";
2
+ import { getOpen } from "../shell/openStore.js";
3
+ import { resolveSelectionFromEvent } from "../selection/resolveSelection.js";
4
+ import { handleInlineTextEditIntent, isInlineTextEditingActive, } from "../inline-text/inlineTextEditor.js";
5
+ import { EMPTY_TEXT_PROJECTION_ATTR } from "../projection/textProjection.js";
6
+ import { blockApplicationClick, isApplicationActivationClick } from "./clickPolicy.js";
7
+ export function installElementSelector(inspectorHost) {
8
+ function applyInlineTextDisposition(event, disposition) {
9
+ if (disposition === "pass-through")
10
+ return;
11
+ if (disposition === "suppress")
12
+ event.preventDefault();
13
+ event.stopPropagation();
14
+ }
15
+ function onDoubleClick(e) {
16
+ if (!getOpen())
17
+ return;
18
+ if (isInsideInspectorUi(e))
19
+ return;
20
+ if (getSelectedElements().length > 1) {
21
+ e.preventDefault();
22
+ e.stopPropagation();
23
+ return;
24
+ }
25
+ if (!(e.target instanceof Element))
26
+ return;
27
+ applyInlineTextDisposition(e, handleInlineTextEditIntent({
28
+ kind: "double-click",
29
+ target: e.target,
30
+ point: { x: e.clientX, y: e.clientY },
31
+ }));
32
+ }
33
+ function isInsideInspectorUi(event) {
34
+ const target = event.target;
35
+ if (!(target instanceof Element))
36
+ return false;
37
+ if (inspectorHost === target || inspectorHost.contains(target))
38
+ return true;
39
+ // Composed clicks originating inside the inspector's shadow root are
40
+ // retargeted to the host before document-level listeners observe them;
41
+ // this branch covers dispatch paths where retargeting has not applied.
42
+ const root = target.getRootNode();
43
+ return root instanceof ShadowRoot && root.host === inspectorHost;
44
+ }
45
+ function onClick(e) {
46
+ if (!getOpen())
47
+ return;
48
+ if (isInsideInspectorUi(e)) {
49
+ // The selector guards the inspected application only. Clicks on the
50
+ // inspector's own controls must keep their native behavior, so they
51
+ // pass through untouched (no preventDefault / stopPropagation).
52
+ return;
53
+ }
54
+ if (isInlineTextEditingActive()) {
55
+ e.preventDefault();
56
+ e.stopPropagation();
57
+ return;
58
+ }
59
+ if (e.target instanceof Element
60
+ && e.target.closest(`[${EMPTY_TEXT_PROJECTION_ATTR}]`)) {
61
+ blockApplicationClick(e);
62
+ return;
63
+ }
64
+ if (isApplicationActivationClick(e))
65
+ return;
66
+ // The inspector is an editing surface while open. Capture every ordinary
67
+ // application click so buttons, links, and untracked controls cannot run
68
+ // alongside selection. Shift-click toggles the primary target in the
69
+ // ordered group; Command/Ctrl-click still selects the deepest tracked
70
+ // element, and Command/Ctrl+Shift-click remains the activation escape hatch.
71
+ const sel = resolveSelectionFromEvent(e, inspectorHost);
72
+ blockApplicationClick(e);
73
+ if (sel) {
74
+ if (e.shiftKey && !e.metaKey && !e.ctrlKey)
75
+ toggleSelectedElement(sel);
76
+ else
77
+ setSelectedElement(sel);
78
+ }
79
+ }
80
+ function onMouseDown(e) {
81
+ if (!getOpen() || isInsideInspectorUi(e))
82
+ return;
83
+ if (!(e.target instanceof Element))
84
+ return;
85
+ applyInlineTextDisposition(e, handleInlineTextEditIntent({
86
+ kind: "pointer-down",
87
+ target: e.target,
88
+ point: { x: e.clientX, y: e.clientY },
89
+ clickCount: e.detail,
90
+ }));
91
+ }
92
+ document.addEventListener("mousedown", onMouseDown, true);
93
+ document.addEventListener("dblclick", onDoubleClick, true);
94
+ document.addEventListener("click", onClick, true);
95
+ return () => {
96
+ document.removeEventListener("mousedown", onMouseDown, true);
97
+ document.removeEventListener("dblclick", onDoubleClick, true);
98
+ document.removeEventListener("click", onClick, true);
99
+ };
100
+ }
@@ -0,0 +1,10 @@
1
+ export interface FrameScheduler {
2
+ request(callback: FrameRequestCallback): number;
3
+ cancel(handle: number): void;
4
+ }
5
+ /** Retains only the newest value and performs at most one update per frame. */
6
+ export declare function createFrameThrottle<T>(run: (value: T) => void, scheduler?: FrameScheduler): {
7
+ schedule(value: T): void;
8
+ flush: () => void;
9
+ cancel(): void;
10
+ };
@@ -0,0 +1,38 @@
1
+ const browserScheduler = {
2
+ request: (callback) => requestAnimationFrame(callback),
3
+ cancel: (handle) => cancelAnimationFrame(handle),
4
+ };
5
+ /** Retains only the newest value and performs at most one update per frame. */
6
+ export function createFrameThrottle(run, scheduler = browserScheduler) {
7
+ let handle = 0;
8
+ let latest = null;
9
+ function runLatest() {
10
+ handle = 0;
11
+ const value = latest;
12
+ latest = null;
13
+ if (value !== null)
14
+ run(value);
15
+ }
16
+ function flush() {
17
+ if (handle)
18
+ scheduler.cancel(handle);
19
+ runLatest();
20
+ }
21
+ const scheduledFlush = () => {
22
+ runLatest();
23
+ };
24
+ return {
25
+ schedule(value) {
26
+ latest = value;
27
+ if (!handle)
28
+ handle = scheduler.request(scheduledFlush);
29
+ },
30
+ flush,
31
+ cancel() {
32
+ if (handle)
33
+ scheduler.cancel(handle);
34
+ handle = 0;
35
+ latest = null;
36
+ },
37
+ };
38
+ }
@@ -0,0 +1,3 @@
1
+ export declare function isInteractionStylesInstalled(doc?: Document): boolean;
2
+ /** Installs temporary interaction affordances without mutating tracked nodes. */
3
+ export declare function installInteractionStyles(doc?: Document): () => void;