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,378 @@
1
+ import { PROTOCOL_VERSION, getRendererIdentity, sendToParent, } from "./frameProtocol.js";
2
+ import { findClosestAnchor, isEligibleNavigation, hasDifferentRoute, shouldPreserveNativeLinkActivation, } from "./linkEligibility.js";
3
+ import { readBorderWidths, readMargins } from "../overlay/overlayGeometry.js";
4
+ import { installInteractionStyles } from "../overlay/interactionStyles.js";
5
+ import { createFrameThrottle } from "../overlay/frameThrottle.js";
6
+ import { createCidIndex } from "./rendererCidIndex.js";
7
+ import { isNudgeUiDev } from "../runtime/devFlag.js";
8
+ import { isEditableEvent } from "../shell/shortcuts.js";
9
+ import { resolveSelectionTarget, selectionTargetMode } from "../selection/selectionTarget.js";
10
+ import { escapeCssString } from "../projection/cssEscapes.js";
11
+ import { blockApplicationClick, isApplicationActivationClick } from "../overlay/clickPolicy.js";
12
+ const REACT_FIBER_KEY = /^__reactFiber\$/;
13
+ const REACT_INTERNAL_KEY = /^__reactInternalInstance\$/;
14
+ function findFiber(el) {
15
+ const keys = Object.keys(el);
16
+ for (const key of keys) {
17
+ if (REACT_FIBER_KEY.test(key) || REACT_INTERNAL_KEY.test(key)) {
18
+ return Reflect.get(el, key);
19
+ }
20
+ }
21
+ return undefined;
22
+ }
23
+ function getFiberInfo(el) {
24
+ const fiber = findFiber(el);
25
+ const src = el.getAttribute("data-src") ?? "";
26
+ let file = "";
27
+ let line = 0;
28
+ let component = "Component";
29
+ if (fiber) {
30
+ let node = fiber;
31
+ while (node) {
32
+ const debugSource = node._debugSource;
33
+ if (debugSource) {
34
+ file = debugSource.fileName ?? "";
35
+ line = debugSource.lineNumber ?? 0;
36
+ break;
37
+ }
38
+ node = node._debugOwner
39
+ ?? node.return;
40
+ }
41
+ const fiberType = fiber.type;
42
+ if (typeof fiberType === "string") {
43
+ component = fiberType;
44
+ }
45
+ else if (fiberType && typeof fiberType === "object") {
46
+ const displayName = fiberType.displayName;
47
+ if (typeof displayName === "string") {
48
+ component = displayName;
49
+ }
50
+ else {
51
+ const name = fiberType.name;
52
+ if (typeof name === "string") {
53
+ component = name;
54
+ }
55
+ }
56
+ }
57
+ }
58
+ if (!file) {
59
+ const match = /^(.*):(\d+):(\d+)$/.exec(src);
60
+ if (match) {
61
+ file = match[1] ?? "";
62
+ line = Number(match[2]) || 0;
63
+ }
64
+ }
65
+ return { file, line, component, src };
66
+ }
67
+ export function buildSelector(el) {
68
+ const cid = el.getAttribute("data-cid");
69
+ if (cid)
70
+ return `[data-cid="${escapeCssString(cid)}"]`;
71
+ const tag = el.tagName.toLowerCase();
72
+ const id = el.id ? `#${CSS.escape(el.id)}` : "";
73
+ const classes = Array.from(el.classList).map((c) => `.${CSS.escape(c)}`).join("");
74
+ return tag + id + classes;
75
+ }
76
+ let installed = false;
77
+ const noopDisposal = () => undefined;
78
+ export function installRendererElementSelector() {
79
+ if (!isNudgeUiDev())
80
+ return noopDisposal;
81
+ if (installed)
82
+ return noopDisposal;
83
+ installed = true;
84
+ const removeInteractionStyles = installInteractionStyles();
85
+ const listenerCleanup = [];
86
+ let disposed = false;
87
+ function trackListener(target, type, listener, options) {
88
+ const eventListener = (event) => listener(event);
89
+ target.addEventListener(type, eventListener, options);
90
+ listenerCleanup.push(() => target.removeEventListener(type, eventListener, options));
91
+ }
92
+ const cidIndex = createCidIndex(document);
93
+ const hoverUpdate = createFrameThrottle((pending) => {
94
+ if (disposed)
95
+ return;
96
+ const { element, clear } = pending;
97
+ const identity = getRendererIdentity();
98
+ if (!identity)
99
+ return;
100
+ const cid = element.getAttribute("data-cid");
101
+ const selector = buildSelector(element);
102
+ const src = element.getAttribute("data-src") ?? "";
103
+ const rect = clear ? null : element.getBoundingClientRect();
104
+ const msg = {
105
+ type: "element-hover",
106
+ protocolVersion: PROTOCOL_VERSION,
107
+ cid,
108
+ selector,
109
+ src,
110
+ elementId: cidIndex.elementId(element),
111
+ rect: rect
112
+ ? {
113
+ left: rect.left,
114
+ top: rect.top,
115
+ width: rect.width,
116
+ height: rect.height,
117
+ }
118
+ : null,
119
+ margins: rect ? readMargins(element) : null,
120
+ borders: rect ? readBorderWidths(element) : null,
121
+ ...identity,
122
+ };
123
+ sendToParent(msg);
124
+ });
125
+ let measurePointerOverPage = false;
126
+ let measureAltKey = false;
127
+ function updateMeasureState(altKey, pointerOverPage) {
128
+ if (disposed)
129
+ return;
130
+ if (measureAltKey === altKey && measurePointerOverPage === pointerOverPage)
131
+ return;
132
+ measureAltKey = altKey;
133
+ measurePointerOverPage = pointerOverPage;
134
+ const identity = getRendererIdentity();
135
+ if (!identity)
136
+ return;
137
+ const msg = {
138
+ type: "element-measure-state",
139
+ protocolVersion: PROTOCOL_VERSION,
140
+ altKey,
141
+ pointerOverPage,
142
+ ...identity,
143
+ };
144
+ sendToParent(msg);
145
+ }
146
+ trackListener(document, "mouseover", (event) => {
147
+ updateMeasureState(event.altKey, true);
148
+ const target = event.target;
149
+ if (!(target instanceof Element))
150
+ return;
151
+ const el = resolveSelectionTarget(target, selectionTargetMode(event));
152
+ if (!el)
153
+ return;
154
+ hoverUpdate.schedule({ element: el, clear: false });
155
+ }, true);
156
+ let pendingDrag = null;
157
+ let dragging = false;
158
+ let lastSelected = null;
159
+ const dragMoveUpdate = createFrameThrottle((point) => {
160
+ if (disposed)
161
+ return;
162
+ const identity = getRendererIdentity();
163
+ if (!point || !identity)
164
+ return;
165
+ const msg = { type: "element-drag-move", protocolVersion: PROTOCOL_VERSION, point, ...identity };
166
+ sendToParent(msg);
167
+ });
168
+ trackListener(document, "mousedown", (event) => {
169
+ if (event.button !== 0)
170
+ return;
171
+ const element = resolveSelectionTarget(event.target, selectionTargetMode(event));
172
+ if (!element)
173
+ return;
174
+ lastSelected = element;
175
+ pendingDrag = { element, point: { x: event.clientX, y: event.clientY } };
176
+ }, true);
177
+ trackListener(document, "mousemove", (event) => {
178
+ if (!pendingDrag)
179
+ return;
180
+ if (!dragging && Math.hypot(event.clientX - pendingDrag.point.x, event.clientY - pendingDrag.point.y) < 6)
181
+ return;
182
+ const identity = getRendererIdentity();
183
+ if (!identity)
184
+ return;
185
+ event.preventDefault();
186
+ const point = { x: event.clientX, y: event.clientY };
187
+ if (!dragging) {
188
+ dragging = true;
189
+ const msg = {
190
+ type: "element-drag-start", protocolVersion: PROTOCOL_VERSION,
191
+ cid: pendingDrag.element.getAttribute("data-cid"), src: pendingDrag.element.getAttribute("data-src") ?? "",
192
+ elementId: cidIndex.elementId(pendingDrag.element), point, ...identity,
193
+ };
194
+ sendToParent(msg);
195
+ }
196
+ else {
197
+ dragMoveUpdate.schedule(point);
198
+ }
199
+ }, true);
200
+ function finishDrag(event) {
201
+ dragMoveUpdate.cancel();
202
+ if (dragging) {
203
+ const identity = getRendererIdentity();
204
+ if (identity) {
205
+ event.preventDefault();
206
+ const msg = {
207
+ type: "element-drag-end", protocolVersion: PROTOCOL_VERSION,
208
+ point: { x: event.clientX, y: event.clientY }, ...identity,
209
+ };
210
+ sendToParent(msg);
211
+ }
212
+ }
213
+ pendingDrag = null;
214
+ dragging = false;
215
+ }
216
+ trackListener(document, "mouseup", finishDrag, true);
217
+ trackListener(document, "keydown", (event) => {
218
+ if (event.key === "Alt")
219
+ updateMeasureState(true, measurePointerOverPage);
220
+ if (isEditableEvent(event))
221
+ return;
222
+ const scrollKey = event.code === "Space"
223
+ || event.key === "ArrowUp"
224
+ || event.key === "ArrowDown"
225
+ || event.key === "ArrowLeft"
226
+ || event.key === "ArrowRight";
227
+ if (scrollKey)
228
+ event.preventDefault();
229
+ if ((event.metaKey || event.ctrlKey) && event.key.toLowerCase() === "z") {
230
+ const identity = getRendererIdentity();
231
+ if (!identity)
232
+ return;
233
+ event.preventDefault();
234
+ const msg = {
235
+ type: "history-request",
236
+ protocolVersion: PROTOCOL_VERSION,
237
+ action: event.shiftKey ? "redo" : "undo",
238
+ ...identity,
239
+ };
240
+ sendToParent(msg);
241
+ return;
242
+ }
243
+ if (event.key === "Escape" || event.key === "Esc") {
244
+ event.preventDefault();
245
+ lastSelected = null;
246
+ const identity = getRendererIdentity();
247
+ if (!identity)
248
+ return;
249
+ const msg = {
250
+ type: "element-deselect",
251
+ protocolVersion: PROTOCOL_VERSION,
252
+ ...identity,
253
+ };
254
+ sendToParent(msg);
255
+ return;
256
+ }
257
+ if (!lastSelected)
258
+ return;
259
+ const identity = getRendererIdentity();
260
+ if (!identity)
261
+ return;
262
+ if (event.key === "Delete" || event.key === "Backspace") {
263
+ event.preventDefault();
264
+ const msg = {
265
+ type: "element-delete", protocolVersion: PROTOCOL_VERSION,
266
+ cid: lastSelected.getAttribute("data-cid"), src: lastSelected.getAttribute("data-src") ?? "",
267
+ elementId: cidIndex.elementId(lastSelected), ...identity,
268
+ };
269
+ sendToParent(msg);
270
+ return;
271
+ }
272
+ if (event.key !== "ArrowUp" && event.key !== "ArrowDown" && event.key !== "ArrowLeft" && event.key !== "ArrowRight")
273
+ return;
274
+ event.preventDefault();
275
+ const msg = {
276
+ type: "element-nudge", protocolVersion: PROTOCOL_VERSION,
277
+ cid: lastSelected.getAttribute("data-cid"), src: lastSelected.getAttribute("data-src") ?? "",
278
+ elementId: cidIndex.elementId(lastSelected), key: event.key, ...identity,
279
+ };
280
+ sendToParent(msg);
281
+ }, true);
282
+ trackListener(document, "keyup", (event) => {
283
+ if (event.key === "Alt")
284
+ updateMeasureState(false, measurePointerOverPage);
285
+ }, true);
286
+ trackListener(window, "blur", () => {
287
+ updateMeasureState(false, false);
288
+ });
289
+ trackListener(document, "mouseout", (event) => {
290
+ const target = event.target;
291
+ if (!(target instanceof HTMLElement))
292
+ return;
293
+ const related = event.relatedTarget;
294
+ if (!(related instanceof Node) || !document.contains(related)) {
295
+ updateMeasureState(event.altKey, false);
296
+ }
297
+ if (related instanceof Node && (target.contains(related) || target === related))
298
+ return;
299
+ if (!(target instanceof Element))
300
+ return;
301
+ const el = resolveSelectionTarget(target, selectionTargetMode(event));
302
+ if (!el)
303
+ return;
304
+ if (resolveSelectionTarget(related, selectionTargetMode(event)))
305
+ return;
306
+ hoverUpdate.schedule({ element: el, clear: true });
307
+ }, true);
308
+ trackListener(document, "click", (event) => {
309
+ const target = event.target;
310
+ if (!(target instanceof Element))
311
+ return;
312
+ // Defer to navigation-intent when the user clicked a navigable same-origin
313
+ // anchor that points to a different route. In canvas mode, anchor clicks
314
+ // should create (or focus) a sibling card rather than selecting the anchor
315
+ // itself. The navigation-intent listener is registered AFTER this one, so
316
+ // we must NOT stop propagation here. Left to its own default the click would
317
+ // perform a full-frame navigation inside the iframe; the navigation-intent
318
+ // handler calls preventDefault once it has gathered the anchor href.
319
+ const anchor = findClosestAnchor(target);
320
+ if (anchor && isEligibleNavigation(anchor, event) && hasDifferentRoute(anchor)) {
321
+ return;
322
+ }
323
+ // Command/Ctrl+Shift-click is the deliberate escape hatch for running
324
+ // the application action. All other selected canvas clicks are editing
325
+ // gestures and must not reach the rendered application.
326
+ if (isApplicationActivationClick(event))
327
+ return;
328
+ const preserveNativeLink = anchor
329
+ ? shouldPreserveNativeLinkActivation(anchor, event)
330
+ : false;
331
+ const el = resolveSelectionTarget(target, selectionTargetMode(event));
332
+ if (!el) {
333
+ if (!preserveNativeLink)
334
+ blockApplicationClick(event);
335
+ return;
336
+ }
337
+ lastSelected = el;
338
+ if (!preserveNativeLink)
339
+ blockApplicationClick(event);
340
+ const cid = el.getAttribute("data-cid");
341
+ const selector = buildSelector(el);
342
+ const { file, line, component, src } = getFiberInfo(el);
343
+ const identity = getRendererIdentity();
344
+ if (!identity)
345
+ return;
346
+ const msg = {
347
+ type: "element-click",
348
+ protocolVersion: PROTOCOL_VERSION,
349
+ cid,
350
+ selector,
351
+ src,
352
+ elementId: cidIndex.elementId(el),
353
+ file,
354
+ line,
355
+ component,
356
+ additive: event.shiftKey && !event.ctrlKey && !event.metaKey,
357
+ ...identity,
358
+ };
359
+ sendToParent(msg);
360
+ }, true);
361
+ return () => {
362
+ if (disposed)
363
+ return;
364
+ disposed = true;
365
+ installed = false;
366
+ hoverUpdate.cancel();
367
+ dragMoveUpdate.cancel();
368
+ for (const cleanup of listenerCleanup)
369
+ cleanup();
370
+ listenerCleanup.length = 0;
371
+ removeInteractionStyles();
372
+ pendingDrag = null;
373
+ dragging = false;
374
+ lastSelected = null;
375
+ measurePointerOverPage = false;
376
+ measureAltKey = false;
377
+ };
378
+ }
@@ -0,0 +1,2 @@
1
+ import type { ElementClickMessage } from "./frameProtocol.js";
2
+ export declare function handleElementClick(msg: ElementClickMessage, iframe: HTMLIFrameElement, cardId: string): void;
@@ -0,0 +1,61 @@
1
+ import { getSelectedElements, setSelectedElement, toggleSelectedElement } from "../selection/selectionStore.js";
2
+ import { selectCard } from "./canvasStore.js";
3
+ import { RENDERER_ELEMENT_ID_ATTR } from "./rendererCidIndex.js";
4
+ function isHtmlElementInDocument(node, doc) {
5
+ const frameWindow = doc.defaultView;
6
+ return frameWindow !== null && node instanceof frameWindow.HTMLElement;
7
+ }
8
+ /**
9
+ * Resolve the exact DOM element inside a card's iframe that matches an
10
+ * element-click message. The renderer (running inside the iframe) tells us
11
+ * the clicked element's renderer-owned `elementId`; we re-find the element by
12
+ * that stable data attribute so that the parent app can mutate the same
13
+ * physical DOM node the user clicked.
14
+ *
15
+ * The resolution uses a scoped ID query and never depends on document order.
16
+ *
17
+ * If the exact renderer-owned node no longer exists, fail closed instead of
18
+ * binding the copied component metadata to an unrelated DOM node.
19
+ */
20
+ function findClickedElement(doc, elementId, cid, src) {
21
+ if (!doc)
22
+ return null;
23
+ if (!/^r\d+$/.test(elementId))
24
+ return null;
25
+ const candidates = doc.querySelectorAll(`[${RENDERER_ELEMENT_ID_ATTR}="${elementId}"]`);
26
+ if (candidates.length !== 1)
27
+ return null;
28
+ const candidate = candidates[0] ?? null;
29
+ if (!candidate || candidate.getAttribute("data-cid") !== cid || candidate.getAttribute("data-src") !== src)
30
+ return null;
31
+ return isHtmlElementInDocument(candidate, doc) ? candidate : null;
32
+ }
33
+ export function handleElementClick(msg, iframe, cardId) {
34
+ const doc = iframe.contentDocument;
35
+ const el = findClickedElement(doc, msg.elementId, msg.cid, msg.src);
36
+ if (!el) {
37
+ setSelectedElement(null);
38
+ selectCard(cardId);
39
+ return;
40
+ }
41
+ const selected = {
42
+ cid: msg.cid,
43
+ src: el.getAttribute("data-src") ?? msg.src,
44
+ cprops: el.getAttribute("data-cprops"),
45
+ file: msg.file,
46
+ line: msg.line,
47
+ column: 0,
48
+ domElement: el,
49
+ componentTargets: [],
50
+ };
51
+ // setSelectedElement must run before any side effect that could reload the
52
+ // host page, otherwise the selection would be discarded by the unload.
53
+ const current = getSelectedElements();
54
+ if (msg.additive && current.length > 0 && current.every((candidate) => candidate.domElement.ownerDocument === doc)) {
55
+ toggleSelectedElement(selected);
56
+ }
57
+ else {
58
+ setSelectedElement(selected);
59
+ }
60
+ selectCard(cardId);
61
+ }
@@ -0,0 +1,16 @@
1
+ import { type ReplaceStylesMessage } from "./frameProtocol.js";
2
+ /** Installs renderer diagnostics only after the dev-only renderer bootstrap. */
3
+ export declare function startRendererProjectionDiagnostics(): () => void;
4
+ export declare function getLastAppliedRevision(): number;
5
+ export declare function resetRendererRevision(): void;
6
+ export interface ReplaceStylesValidation {
7
+ valid: true;
8
+ msg: ReplaceStylesMessage;
9
+ }
10
+ export interface ReplaceStylesRejection {
11
+ valid: false;
12
+ reason: string;
13
+ }
14
+ export type ReplaceStylesResult = ReplaceStylesValidation | ReplaceStylesRejection;
15
+ export declare function validateReplaceStyles(msg: unknown, projectId: string, workspaceId: string, cardId: string): ReplaceStylesResult;
16
+ export declare function handleReplaceStyles(msg: ReplaceStylesMessage, projectId: string, workspaceId: string, cardId: string): boolean;
@@ -0,0 +1,221 @@
1
+ import { PROTOCOL_VERSION, getRendererIdentity, sendToParent, } from "./frameProtocol.js";
2
+ import { isComponentOverrideList } from "./frameProtocol.js";
3
+ import { isNudgeUiDev } from "../runtime/devFlag.js";
4
+ import { replaceComponentOverrideProjection } from "../componentSemantics/index.js";
5
+ import { notifyBrowserStylesheetChange } from "../inspection/browserCssInspectionRegistry.js";
6
+ import { isRenderedInstanceOverride } from "../changes/editModel.js";
7
+ import { applyRenderedInstanceProjection, getRenderedInstanceProjectionReports, subscribeRenderedInstanceDiagnostics, } from "../projection/renderedInstance.js";
8
+ import { applyStructuralProjection, getStructuralProjectionReports, isStructuralChange, subscribeStructuralDiagnostics, } from "../projection/structuralProjection.js";
9
+ import { applyTextContentProjection, getTextProjectionReports, subscribeTextProjectionDiagnostics, } from "../projection/textProjection.js";
10
+ import { isTextContentChangeListValue } from "../changes/types.js";
11
+ import { applyWorkspaceProjection, } from "../projection/workspaceProjection.js";
12
+ const SHEET_ID = "nudge-ui-styles";
13
+ function replaceRendererCss(css) {
14
+ let sheet = document.getElementById(SHEET_ID);
15
+ if (!sheet) {
16
+ sheet = document.createElement("style");
17
+ sheet.id = SHEET_ID;
18
+ sheet.setAttribute("data-nudge-ui", "managed");
19
+ document.head.appendChild(sheet);
20
+ }
21
+ sheet.textContent = css;
22
+ notifyBrowserStylesheetChange(document);
23
+ }
24
+ const rendererDocumentProjectionAdapter = {
25
+ applyStructural: (changes) => {
26
+ applyStructuralProjection(document, changes);
27
+ },
28
+ applyRenderedInstances: (overrides) => {
29
+ applyRenderedInstanceProjection(document, overrides);
30
+ },
31
+ applyText: (changes) => {
32
+ applyTextContentProjection(document, changes);
33
+ },
34
+ applyComponents: replaceComponentOverrideProjection,
35
+ applyManagedStyles: (styles) => {
36
+ replaceRendererCss(styles.css);
37
+ },
38
+ };
39
+ function projectionFromReplaceStylesMessage(msg) {
40
+ return {
41
+ sourceRevision: msg.revision,
42
+ managedStyles: { css: msg.css },
43
+ instanceOverrides: msg.instanceOverrides,
44
+ structuralChanges: msg.structuralChanges,
45
+ textContentChanges: msg.textContentChanges,
46
+ componentOverrides: msg.componentOverrides,
47
+ };
48
+ }
49
+ let lastAppliedRevision = -1;
50
+ let lastStructuralReportRevision = null;
51
+ let lastRenderedInstanceReportRevision = null;
52
+ let lastTextProjectionReportRevision = null;
53
+ let stopStructuralDiagnostics = null;
54
+ let stopRenderedInstanceDiagnostics = null;
55
+ let stopTextProjectionDiagnostics = null;
56
+ let activeDiagnosticsOwner = null;
57
+ function stopProjectionDiagnostics() {
58
+ stopStructuralDiagnostics?.();
59
+ stopStructuralDiagnostics = null;
60
+ stopRenderedInstanceDiagnostics?.();
61
+ stopRenderedInstanceDiagnostics = null;
62
+ stopTextProjectionDiagnostics?.();
63
+ stopTextProjectionDiagnostics = null;
64
+ }
65
+ function sendStructuralProjectionReport(revision) {
66
+ const identity = getRendererIdentity();
67
+ if (!identity)
68
+ return;
69
+ const msg = {
70
+ type: "structural-projection-report",
71
+ protocolVersion: PROTOCOL_VERSION,
72
+ revision,
73
+ reports: getStructuralProjectionReports(document).map((report) => ({ ...report })),
74
+ ...identity,
75
+ };
76
+ sendToParent(msg);
77
+ }
78
+ function sendRenderedInstanceProjectionReport(revision) {
79
+ const identity = getRendererIdentity();
80
+ if (!identity)
81
+ return;
82
+ const msg = {
83
+ type: "rendered-instance-projection-report",
84
+ protocolVersion: PROTOCOL_VERSION,
85
+ revision,
86
+ reports: getRenderedInstanceProjectionReports(document).map((report) => ({ ...report })),
87
+ ...identity,
88
+ };
89
+ sendToParent(msg);
90
+ }
91
+ function sendTextProjectionReport(revision) {
92
+ const identity = getRendererIdentity();
93
+ if (!identity)
94
+ return;
95
+ const msg = {
96
+ type: "text-projection-report",
97
+ protocolVersion: PROTOCOL_VERSION,
98
+ revision,
99
+ reports: getTextProjectionReports(document).map((report) => ({ ...report })),
100
+ ...identity,
101
+ };
102
+ sendToParent(msg);
103
+ }
104
+ function sendProjectionApplied(revision) {
105
+ const identity = getRendererIdentity();
106
+ if (!identity)
107
+ return;
108
+ const msg = {
109
+ type: "projection-applied",
110
+ protocolVersion: PROTOCOL_VERSION,
111
+ revision,
112
+ ...identity,
113
+ };
114
+ sendToParent(msg);
115
+ }
116
+ /** Installs renderer diagnostics only after the dev-only renderer bootstrap. */
117
+ export function startRendererProjectionDiagnostics() {
118
+ if (!isNudgeUiDev() || activeDiagnosticsOwner)
119
+ return () => undefined;
120
+ lastAppliedRevision = -1;
121
+ lastStructuralReportRevision = null;
122
+ lastRenderedInstanceReportRevision = null;
123
+ lastTextProjectionReportRevision = null;
124
+ const owner = {};
125
+ activeDiagnosticsOwner = owner;
126
+ stopStructuralDiagnostics = subscribeStructuralDiagnostics(() => {
127
+ if (lastStructuralReportRevision !== null) {
128
+ sendStructuralProjectionReport(lastStructuralReportRevision);
129
+ }
130
+ });
131
+ stopRenderedInstanceDiagnostics = subscribeRenderedInstanceDiagnostics(() => {
132
+ if (lastRenderedInstanceReportRevision !== null) {
133
+ sendRenderedInstanceProjectionReport(lastRenderedInstanceReportRevision);
134
+ }
135
+ });
136
+ stopTextProjectionDiagnostics = subscribeTextProjectionDiagnostics(() => {
137
+ if (lastTextProjectionReportRevision !== null) {
138
+ sendTextProjectionReport(lastTextProjectionReportRevision);
139
+ }
140
+ });
141
+ return () => {
142
+ if (activeDiagnosticsOwner !== owner)
143
+ return;
144
+ activeDiagnosticsOwner = null;
145
+ stopProjectionDiagnostics();
146
+ lastAppliedRevision = -1;
147
+ lastStructuralReportRevision = null;
148
+ lastRenderedInstanceReportRevision = null;
149
+ lastTextProjectionReportRevision = null;
150
+ };
151
+ }
152
+ export function getLastAppliedRevision() {
153
+ return lastAppliedRevision;
154
+ }
155
+ export function resetRendererRevision() {
156
+ activeDiagnosticsOwner = null;
157
+ stopProjectionDiagnostics();
158
+ lastAppliedRevision = -1;
159
+ lastStructuralReportRevision = null;
160
+ lastRenderedInstanceReportRevision = null;
161
+ lastTextProjectionReportRevision = null;
162
+ }
163
+ export function validateReplaceStyles(msg, projectId, workspaceId, cardId) {
164
+ if (!msg || typeof msg !== "object") {
165
+ return { valid: false, reason: "message is not an object" };
166
+ }
167
+ const m = msg;
168
+ if (typeof m.protocolVersion !== "number" || m.protocolVersion !== PROTOCOL_VERSION) {
169
+ return { valid: false, reason: "protocol version mismatch" };
170
+ }
171
+ if (m.type !== "replace-styles") {
172
+ return { valid: false, reason: "not a replace-styles message" };
173
+ }
174
+ if (typeof m.projectId !== "string" || m.projectId !== projectId) {
175
+ return { valid: false, reason: "project ID mismatch" };
176
+ }
177
+ if (typeof m.workspaceId !== "string" || m.workspaceId !== workspaceId) {
178
+ return { valid: false, reason: "workspace ID mismatch" };
179
+ }
180
+ if (typeof m.cardId !== "string" || m.cardId !== cardId) {
181
+ return { valid: false, reason: "card ID mismatch" };
182
+ }
183
+ if (typeof m.revision !== "number" || !Number.isSafeInteger(m.revision) || m.revision < 0) {
184
+ return { valid: false, reason: "revision is not a non-negative safe integer" };
185
+ }
186
+ if (typeof m.css !== "string") {
187
+ return { valid: false, reason: "css is not a string" };
188
+ }
189
+ if (!Array.isArray(m.instanceOverrides) || !m.instanceOverrides.every(isRenderedInstanceOverride)) {
190
+ return { valid: false, reason: "instance overrides are invalid" };
191
+ }
192
+ if (!Array.isArray(m.structuralChanges) || !m.structuralChanges.every(isStructuralChange)) {
193
+ return { valid: false, reason: "structural changes are invalid" };
194
+ }
195
+ if (!isTextContentChangeListValue(m.textContentChanges)) {
196
+ return { valid: false, reason: "text content changes are invalid" };
197
+ }
198
+ if (!isComponentOverrideList(m.componentOverrides)) {
199
+ return { valid: false, reason: "component overrides are invalid" };
200
+ }
201
+ return { valid: true, msg: m };
202
+ }
203
+ export function handleReplaceStyles(msg, projectId, workspaceId, cardId) {
204
+ if (!isNudgeUiDev())
205
+ return false;
206
+ const validation = validateReplaceStyles(msg, projectId, workspaceId, cardId);
207
+ if (!validation.valid)
208
+ return false;
209
+ if (msg.revision <= lastAppliedRevision)
210
+ return false;
211
+ applyWorkspaceProjection(rendererDocumentProjectionAdapter, projectionFromReplaceStylesMessage(msg));
212
+ lastStructuralReportRevision = msg.revision;
213
+ lastRenderedInstanceReportRevision = msg.revision;
214
+ lastTextProjectionReportRevision = msg.revision;
215
+ sendStructuralProjectionReport(msg.revision);
216
+ sendRenderedInstanceProjectionReport(msg.revision);
217
+ sendTextProjectionReport(msg.revision);
218
+ lastAppliedRevision = msg.revision;
219
+ sendProjectionApplied(msg.revision);
220
+ return true;
221
+ }
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Keep the resize handle usable while the board is zoomed without allowing
3
+ * inverse scaling to make it disproportionately large or small.
4
+ */
5
+ export declare const CANVAS_RESIZE_HANDLE_MIN_SCALE: number;
6
+ export declare const CANVAS_RESIZE_HANDLE_MAX_SCALE = 2;
7
+ /**
8
+ * Returns the scale to apply inside the board's zoomed coordinate space.
9
+ *
10
+ * The lower bound matches the inverse of the largest supported camera zoom,
11
+ * and the upper bound follows the toolbar compensation policy.
12
+ */
13
+ export declare function getCanvasResizeHandleScale(zoom: number): number;