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,232 @@
1
+ import { getWorkspaceChanges } from "../changes/workspaceChanges.js";
2
+ import { getCanvasMode } from "./canvasStore.js";
3
+ import { PROTOCOL_VERSION } from "./frameProtocol.js";
4
+ import { clearCanvasRenderedInstanceProjectionReports, } from "../projection/renderedInstance.js";
5
+ import { clearCanvasTextProjectionReports, } from "../projection/textProjection.js";
6
+ import { clearCanvasStructuralProjectionReports } from "../projection/structuralProjection.js";
7
+ import { invalidatePreviewDocumentSession, startPreviewDocumentSession, } from "../changes/previewDiagnostics.js";
8
+ import { applyHostWorkspaceProjection, compileWorkspaceProjection, } from "../projection/workspaceProjection.js";
9
+ import { disposeBrowserCssInspection } from "../inspection/browserCssInspectionRegistry.js";
10
+ export const PROJECT_ID = window.location.origin;
11
+ export const WORKSPACE_ID = crypto.randomUUID?.() ?? `ws-${Date.now()}`;
12
+ let revision = 0;
13
+ let lastRulesKey = null;
14
+ const frameProjectionStates = new Map();
15
+ const previewDocuments = new Map();
16
+ const projectionAcknowledgementListeners = new Set();
17
+ let projectionAcknowledgementVersion = 0;
18
+ let nextPreviewSessionId = 1;
19
+ function createPreviewDocumentIdentity(cardId) {
20
+ const previewDocument = {
21
+ logicalDocument: `canvas:${cardId}`,
22
+ sessionId: `canvas-session-${nextPreviewSessionId++}`,
23
+ };
24
+ previewDocuments.set(cardId, previewDocument);
25
+ return previewDocument;
26
+ }
27
+ /** Returns the current value-based identity for one Canvas card document. */
28
+ export function getCanvasPreviewDocument(cardId) {
29
+ // Pure getter: no session activation or notify. Creation (identity only) is
30
+ // idempotent here; registerCardFrame owns session activation.
31
+ return previewDocuments.get(cardId) ?? createPreviewDocumentIdentity(cardId);
32
+ }
33
+ /** Invalidates a card's current document before its iframe is replaced. */
34
+ export function invalidateCanvasPreviewDocument(cardId) {
35
+ const state = frameProjectionStates.get(cardId);
36
+ if (state?.document)
37
+ disposeBrowserCssInspection(state.document);
38
+ const previewDocument = previewDocuments.get(cardId);
39
+ if (!previewDocument)
40
+ return;
41
+ invalidatePreviewDocumentSession(previewDocument.logicalDocument, previewDocument.sessionId);
42
+ previewDocuments.delete(cardId);
43
+ }
44
+ function projectionKey(plan) {
45
+ // Revision ordering protects every controller-owned projection dimension.
46
+ // In particular, a delete-only snapshot has empty CSS but must still advance
47
+ // past the snapshot already accepted by ready Canvas renderers.
48
+ return `${plan.managedStyles.css}\u0000${JSON.stringify(plan.instanceOverrides)}\u0000${JSON.stringify(plan.structuralChanges)}\u0000${JSON.stringify(plan.textContentChanges)}\u0000${JSON.stringify(plan.componentOverrides)}`;
49
+ }
50
+ export function computeProjection() {
51
+ const plan = compileWorkspaceProjection(getWorkspaceChanges());
52
+ applyHostWorkspaceProjection(plan);
53
+ const key = projectionKey(plan);
54
+ if (key !== lastRulesKey) {
55
+ lastRulesKey = key;
56
+ revision += 1;
57
+ }
58
+ return { ...plan, css: plan.managedStyles.css, revision };
59
+ }
60
+ export function resetProjectionRevision() {
61
+ revision = 0;
62
+ lastRulesKey = null;
63
+ for (const state of frameProjectionStates.values()) {
64
+ state.sentRevision = -1;
65
+ state.appliedRevision = -1;
66
+ }
67
+ projectionAcknowledgementVersion += 1;
68
+ notifyProjectionAcknowledgementListeners();
69
+ }
70
+ export function sendProjectionToCard(card, iframe) {
71
+ const win = iframe.contentWindow;
72
+ if (!win)
73
+ return;
74
+ const { css, revision: rev, instanceOverrides, structuralChanges, textContentChanges, componentOverrides } = computeProjection();
75
+ const msg = {
76
+ type: "replace-styles",
77
+ protocolVersion: PROTOCOL_VERSION,
78
+ projectId: PROJECT_ID,
79
+ workspaceId: WORKSPACE_ID,
80
+ cardId: card.id,
81
+ css,
82
+ revision: rev,
83
+ instanceOverrides: [...instanceOverrides],
84
+ structuralChanges: [...structuralChanges],
85
+ textContentChanges: [...textContentChanges],
86
+ componentOverrides: [...componentOverrides],
87
+ };
88
+ markProjectionSent(card.id, iframe, rev);
89
+ win.postMessage(msg, window.location.origin);
90
+ }
91
+ const frameRegistry = new Map();
92
+ const frameSourceRegistry = new Map();
93
+ export function registerCardFrameSource(cardId, iframe) {
94
+ frameSourceRegistry.set(cardId, iframe);
95
+ }
96
+ export function registerCardFrame(cardId, iframe) {
97
+ const frameDocument = getFrameDocument(iframe);
98
+ const existing = frameProjectionStates.get(cardId);
99
+ if (!existing || existing.iframe !== iframe || existing.document !== frameDocument) {
100
+ if (existing) {
101
+ invalidatePreviewDocumentSession(existing.previewDocument.logicalDocument, existing.previewDocument.sessionId);
102
+ previewDocuments.delete(cardId);
103
+ }
104
+ const previewDocument = previewDocuments.get(cardId) ?? createPreviewDocumentIdentity(cardId);
105
+ startPreviewDocumentSession(previewDocument);
106
+ frameProjectionStates.set(cardId, {
107
+ iframe,
108
+ document: frameDocument,
109
+ previewDocument,
110
+ sentRevision: -1,
111
+ appliedRevision: -1,
112
+ });
113
+ }
114
+ else {
115
+ startPreviewDocumentSession(existing.previewDocument);
116
+ }
117
+ frameSourceRegistry.set(cardId, iframe);
118
+ frameRegistry.set(cardId, iframe);
119
+ notifyFrameRegistryListeners();
120
+ }
121
+ export function unregisterCardFrame(cardId) {
122
+ frameSourceRegistry.delete(cardId);
123
+ frameRegistry.delete(cardId);
124
+ invalidateCanvasPreviewDocument(cardId);
125
+ frameProjectionStates.delete(cardId);
126
+ clearCanvasStructuralProjectionReports(cardId);
127
+ clearCanvasRenderedInstanceProjectionReports(cardId);
128
+ clearCanvasTextProjectionReports(cardId);
129
+ notifyFrameRegistryListeners();
130
+ }
131
+ export function getRegisteredFrames() {
132
+ return frameRegistry;
133
+ }
134
+ export function findCanvasFrameBySource(source) {
135
+ for (const [cardId, iframe] of frameSourceRegistry) {
136
+ if (iframe.contentWindow === source)
137
+ return { cardId, iframe };
138
+ }
139
+ return null;
140
+ }
141
+ const frameRegistryListeners = new Set();
142
+ export function subscribeFrameRegistry(listener) {
143
+ frameRegistryListeners.add(listener);
144
+ return () => {
145
+ frameRegistryListeners.delete(listener);
146
+ };
147
+ }
148
+ function getFrameDocument(iframe) {
149
+ try {
150
+ return iframe.contentDocument;
151
+ }
152
+ catch {
153
+ return null;
154
+ }
155
+ }
156
+ function markProjectionSent(cardId, iframe, sentRevision) {
157
+ const state = frameProjectionStates.get(cardId);
158
+ if (!state || state.iframe !== iframe)
159
+ return;
160
+ state.sentRevision = Math.max(state.sentRevision, sentRevision);
161
+ }
162
+ /** Records the highest complete projection revision accepted by one frame. */
163
+ export function recordCanvasProjectionApplied(cardId, appliedRevision) {
164
+ const state = frameProjectionStates.get(cardId);
165
+ if (!state || appliedRevision > state.sentRevision || appliedRevision <= state.appliedRevision)
166
+ return;
167
+ state.appliedRevision = appliedRevision;
168
+ projectionAcknowledgementVersion += 1;
169
+ notifyProjectionAcknowledgementListeners();
170
+ }
171
+ /** Returns projection progress for the document containing a selected element. */
172
+ export function getCanvasProjectionStatus(doc) {
173
+ for (const state of frameProjectionStates.values()) {
174
+ if (state.document !== doc)
175
+ continue;
176
+ return {
177
+ sentRevision: state.sentRevision,
178
+ appliedRevision: state.appliedRevision,
179
+ };
180
+ }
181
+ return null;
182
+ }
183
+ export function subscribeCanvasProjectionAcknowledgements(listener) {
184
+ projectionAcknowledgementListeners.add(listener);
185
+ return () => {
186
+ projectionAcknowledgementListeners.delete(listener);
187
+ };
188
+ }
189
+ export function getCanvasProjectionAcknowledgementVersion() {
190
+ return projectionAcknowledgementVersion;
191
+ }
192
+ function notifyProjectionAcknowledgementListeners() {
193
+ for (const listener of projectionAcknowledgementListeners) {
194
+ try {
195
+ listener();
196
+ }
197
+ catch { /* ignore */ }
198
+ }
199
+ }
200
+ function notifyFrameRegistryListeners() {
201
+ for (const listener of frameRegistryListeners) {
202
+ try {
203
+ listener();
204
+ }
205
+ catch { /* ignore */ }
206
+ }
207
+ }
208
+ export function projectToAllReadyCards() {
209
+ if (getCanvasMode() !== "canvas")
210
+ return;
211
+ const { css, revision: rev, instanceOverrides, structuralChanges, textContentChanges, componentOverrides } = computeProjection();
212
+ for (const [cardId, iframe] of frameRegistry) {
213
+ const win = iframe.contentWindow;
214
+ if (!win)
215
+ continue;
216
+ const msg = {
217
+ type: "replace-styles",
218
+ protocolVersion: PROTOCOL_VERSION,
219
+ projectId: PROJECT_ID,
220
+ workspaceId: WORKSPACE_ID,
221
+ cardId,
222
+ css,
223
+ revision: rev,
224
+ instanceOverrides: [...instanceOverrides],
225
+ structuralChanges: [...structuralChanges],
226
+ textContentChanges: [...textContentChanges],
227
+ componentOverrides: [...componentOverrides],
228
+ };
229
+ markProjectionSent(cardId, iframe, rev);
230
+ win.postMessage(msg, window.location.origin);
231
+ }
232
+ }
@@ -0,0 +1,4 @@
1
+ export interface RendererBootstrapHandle {
2
+ teardown(): void;
3
+ }
4
+ export declare function bootstrapRenderer(): RendererBootstrapHandle | undefined;
@@ -0,0 +1,410 @@
1
+ import { PROTOCOL_VERSION, clearRendererIdentity, getRendererIdentity, isRendererMessageFor, sendToParent, setRendererIdentity, } from "./frameProtocol.js";
2
+ import { handleReplaceStyles, startRendererProjectionDiagnostics } from "./rendererStylesheet.js";
3
+ import { findClosestAnchor, isEligibleNavigation, hasDifferentRoute } from "./linkEligibility.js";
4
+ import { installRendererElementSelector } from "./rendererElementSelector.js";
5
+ import { createFrameThrottle } from "../overlay/frameThrottle.js";
6
+ import { isNudgeUiDev } from "../runtime/devFlag.js";
7
+ import { getNudgeUiRuntimeConfig } from "../runtime/runtimeConfig.js";
8
+ let activeRendererBootstrap = null;
9
+ function ownsRendererBootstrap(owner) {
10
+ return owner.active && activeRendererBootstrap?.owner === owner;
11
+ }
12
+ function sendFrameReady(owner) {
13
+ if (!ownsRendererBootstrap(owner))
14
+ return;
15
+ const identity = getRendererIdentity();
16
+ if (!identity)
17
+ return;
18
+ const msg = {
19
+ type: "frame-ready",
20
+ protocolVersion: PROTOCOL_VERSION,
21
+ url: window.location.href,
22
+ title: document.title,
23
+ ...identity,
24
+ };
25
+ sendToParent(msg);
26
+ }
27
+ function sendFrameMetadata(owner) {
28
+ if (!ownsRendererBootstrap(owner))
29
+ return;
30
+ const identity = getRendererIdentity();
31
+ if (!identity)
32
+ return;
33
+ const msg = {
34
+ type: "frame-metadata",
35
+ protocolVersion: PROTOCOL_VERSION,
36
+ url: window.location.href,
37
+ title: document.title,
38
+ ...identity,
39
+ };
40
+ sendToParent(msg);
41
+ }
42
+ function observeFrameMetadata(owner) {
43
+ const onPopState = () => sendFrameMetadata(owner);
44
+ window.addEventListener("popstate", onPopState);
45
+ owner.listenerRemovers.push(() => window.removeEventListener("popstate", onPopState));
46
+ const onHashChange = () => sendFrameMetadata(owner);
47
+ window.addEventListener("hashchange", onHashChange);
48
+ owner.listenerRemovers.push(() => window.removeEventListener("hashchange", onHashChange));
49
+ for (const method of ["pushState", "replaceState"]) {
50
+ const descriptor = Object.getOwnPropertyDescriptor(history, method);
51
+ const original = history[method];
52
+ const patched = function (...args) {
53
+ const result = original.apply(this, args);
54
+ if (ownsRendererBootstrap(owner)) {
55
+ queueMicrotask(() => sendFrameMetadata(owner));
56
+ }
57
+ return result;
58
+ };
59
+ history[method] = patched;
60
+ owner.historyPatchRestorers.push(() => {
61
+ if (history[method] === patched) {
62
+ if (descriptor) {
63
+ Object.defineProperty(history, method, descriptor);
64
+ }
65
+ else {
66
+ delete history[method];
67
+ }
68
+ }
69
+ });
70
+ }
71
+ const titleEl = document.querySelector("title");
72
+ if (titleEl) {
73
+ const observer = new MutationObserver(() => sendFrameMetadata(owner));
74
+ observer.observe(titleEl, { subtree: true, characterData: true, childList: true });
75
+ owner.observers.push(observer);
76
+ }
77
+ }
78
+ function scheduleRendererTimer(owner, callback, delay) {
79
+ const timer = window.setTimeout(() => {
80
+ owner.timers.delete(timer);
81
+ if (!ownsRendererBootstrap(owner))
82
+ return;
83
+ callback();
84
+ }, delay);
85
+ owner.timers.add(timer);
86
+ }
87
+ function teardownRenderer(owner) {
88
+ if (!owner.active)
89
+ return;
90
+ // Invalidate callbacks before releasing any resource. A queued microtask or
91
+ // frame can still run after its source has been cancelled.
92
+ owner.active = false;
93
+ if (activeRendererBootstrap?.owner === owner) {
94
+ activeRendererBootstrap = null;
95
+ }
96
+ for (const timer of owner.timers)
97
+ window.clearTimeout(timer);
98
+ owner.timers.clear();
99
+ for (const throttle of owner.frameThrottles)
100
+ throttle.cancel();
101
+ owner.frameThrottles.length = 0;
102
+ for (const observer of owner.observers)
103
+ observer.disconnect();
104
+ owner.observers.length = 0;
105
+ for (const removeListener of owner.listenerRemovers.splice(0))
106
+ removeListener();
107
+ for (const disposeResource of owner.resourceDisposers.splice(0))
108
+ disposeResource();
109
+ for (const restoreHistoryPatch of owner.historyPatchRestorers.splice(0))
110
+ restoreHistoryPatch();
111
+ clearRendererIdentity();
112
+ }
113
+ export function bootstrapRenderer() {
114
+ if (!getNudgeUiRuntimeConfig().capabilities.canvas)
115
+ return;
116
+ if (!isNudgeUiDev())
117
+ return;
118
+ if (activeRendererBootstrap)
119
+ return activeRendererBootstrap.handle;
120
+ const owner = {
121
+ active: true,
122
+ listenerRemovers: [],
123
+ resourceDisposers: [],
124
+ observers: [],
125
+ timers: new Set(),
126
+ frameThrottles: [],
127
+ historyPatchRestorers: [],
128
+ };
129
+ const handle = {
130
+ teardown: () => teardownRenderer(owner),
131
+ };
132
+ activeRendererBootstrap = { owner, handle };
133
+ try {
134
+ observeFrameMetadata(owner);
135
+ const disposeDiagnostics = startRendererProjectionDiagnostics();
136
+ if (disposeDiagnostics)
137
+ owner.resourceDisposers.push(disposeDiagnostics);
138
+ const disposeSelector = installRendererElementSelector();
139
+ if (disposeSelector)
140
+ owner.resourceDisposers.push(disposeSelector);
141
+ installRendererPanProxy(owner);
142
+ const onClick = (event) => {
143
+ if (!ownsRendererBootstrap(owner))
144
+ return;
145
+ const anchor = findClosestAnchor(event.target);
146
+ if (!anchor)
147
+ return;
148
+ if (!isEligibleNavigation(anchor, event)) {
149
+ if (isPrimarySelfNavigation(anchor, event)) {
150
+ event.preventDefault();
151
+ const identity = getRendererIdentity();
152
+ if (!identity)
153
+ return;
154
+ const msg = {
155
+ type: "external-navigation",
156
+ protocolVersion: PROTOCOL_VERSION,
157
+ url: anchor.href,
158
+ ...identity,
159
+ };
160
+ sendToParent(msg);
161
+ }
162
+ return;
163
+ }
164
+ if (!hasDifferentRoute(anchor))
165
+ return;
166
+ event.preventDefault();
167
+ const identity = getRendererIdentity();
168
+ if (!identity)
169
+ return;
170
+ const msg = {
171
+ type: "navigation-intent",
172
+ protocolVersion: PROTOCOL_VERSION,
173
+ url: anchor.href,
174
+ ...identity,
175
+ };
176
+ sendToParent(msg);
177
+ };
178
+ document.addEventListener("click", onClick, true);
179
+ owner.listenerRemovers.push(() => document.removeEventListener("click", onClick, true));
180
+ const onMessage = (event) => {
181
+ if (!ownsRendererBootstrap(owner))
182
+ return;
183
+ if (event.origin !== window.location.origin)
184
+ return;
185
+ if (event.source !== window.parent)
186
+ return;
187
+ const msg = event.data;
188
+ if (msg && typeof msg === "object" && msg.type === "parent-ready") {
189
+ if (typeof msg.protocolVersion !== "number" || msg.protocolVersion !== PROTOCOL_VERSION)
190
+ return;
191
+ const pr = msg;
192
+ setRendererIdentity({
193
+ projectId: pr.projectId,
194
+ workspaceId: pr.workspaceId,
195
+ cardId: pr.cardId,
196
+ });
197
+ sendFrameReady(owner);
198
+ return;
199
+ }
200
+ if (msg &&
201
+ typeof msg === "object" &&
202
+ msg.type === "replace-styles" &&
203
+ getRendererIdentity()) {
204
+ const identity = getRendererIdentity();
205
+ handleReplaceStyles(msg, identity.projectId, identity.workspaceId, identity.cardId);
206
+ }
207
+ };
208
+ window.addEventListener("message", onMessage);
209
+ owner.listenerRemovers.push(() => window.removeEventListener("message", onMessage));
210
+ // Solicit the handshake, then retry briefly. The controller answers on
211
+ // iframe load AND on every hello it receives, but its answering listener
212
+ // attaches when the card component commits — normally long before any
213
+ // renderer finishes booting. The retries cover the residual window where
214
+ // a renderer's listeners go live before the controller's do (fast boot,
215
+ // slow controller compile). Every path is idempotent: setRendererIdentity
216
+ // overwrites, re-registration replaces, projection re-sends are safe.
217
+ let helloAttempts = 0;
218
+ const solicitHandshake = () => {
219
+ if (!ownsRendererBootstrap(owner) || getRendererIdentity() || helloAttempts >= 5)
220
+ return;
221
+ helloAttempts += 1;
222
+ const hello = {
223
+ type: "renderer-hello",
224
+ protocolVersion: PROTOCOL_VERSION,
225
+ };
226
+ sendToParent(hello);
227
+ scheduleRendererTimer(owner, solicitHandshake, 400 * helloAttempts);
228
+ };
229
+ solicitHandshake();
230
+ }
231
+ catch (error) {
232
+ teardownRenderer(owner);
233
+ throw error;
234
+ }
235
+ return handle;
236
+ }
237
+ function isPrimarySelfNavigation(anchor, event) {
238
+ if (event.ctrlKey || event.metaKey || event.shiftKey || event.button !== 0)
239
+ return false;
240
+ if (anchor.hasAttribute("download"))
241
+ return false;
242
+ if (anchor.target && anchor.target !== "" && anchor.target !== "_self")
243
+ return false;
244
+ return anchor.protocol === "http:" || anchor.protocol === "https:";
245
+ }
246
+ function installRendererPanProxy(owner) {
247
+ let spaceHeld = false;
248
+ let panning = false;
249
+ const panMoveUpdate = createFrameThrottle((point) => {
250
+ if (!ownsRendererBootstrap(owner))
251
+ return;
252
+ const identity = getRendererIdentity();
253
+ if (!identity)
254
+ return;
255
+ const message = {
256
+ type: "pan-move",
257
+ protocolVersion: PROTOCOL_VERSION,
258
+ point,
259
+ ...identity,
260
+ };
261
+ sendToParent(message);
262
+ });
263
+ owner.frameThrottles.push(panMoveUpdate);
264
+ function isEditableTarget(target) {
265
+ return target instanceof HTMLElement
266
+ && (target.tagName === "INPUT" || target.tagName === "TEXTAREA" || target.isContentEditable);
267
+ }
268
+ function sendSpaceState() {
269
+ if (!ownsRendererBootstrap(owner))
270
+ return;
271
+ const identity = getRendererIdentity();
272
+ if (!identity)
273
+ return;
274
+ const message = {
275
+ type: "pan-modifier",
276
+ protocolVersion: PROTOCOL_VERSION,
277
+ spaceHeld,
278
+ ...identity,
279
+ };
280
+ sendToParent(message);
281
+ }
282
+ const onMessage = (event) => {
283
+ if (!ownsRendererBootstrap(owner))
284
+ return;
285
+ if (event.origin !== window.location.origin || event.source !== window.parent)
286
+ return;
287
+ const identity = getRendererIdentity();
288
+ if (!identity || !isRendererMessageFor(event.data, identity))
289
+ return;
290
+ if (event.data.type === "pan-modifier") {
291
+ spaceHeld = event.data.spaceHeld;
292
+ }
293
+ };
294
+ window.addEventListener("message", onMessage);
295
+ owner.listenerRemovers.push(() => window.removeEventListener("message", onMessage));
296
+ const onKeyDown = (event) => {
297
+ if (!ownsRendererBootstrap(owner))
298
+ return;
299
+ if (event.code === "Space" && !event.repeat && !isEditableTarget(event.target)) {
300
+ spaceHeld = true;
301
+ if (getRendererIdentity())
302
+ event.preventDefault();
303
+ sendSpaceState();
304
+ }
305
+ };
306
+ window.addEventListener("keydown", onKeyDown, true);
307
+ owner.listenerRemovers.push(() => window.removeEventListener("keydown", onKeyDown, true));
308
+ const onKeyUp = (event) => {
309
+ if (!ownsRendererBootstrap(owner))
310
+ return;
311
+ if (event.code === "Space") {
312
+ spaceHeld = false;
313
+ sendSpaceState();
314
+ }
315
+ };
316
+ window.addEventListener("keyup", onKeyUp, true);
317
+ owner.listenerRemovers.push(() => window.removeEventListener("keyup", onKeyUp, true));
318
+ function endPan() {
319
+ if (!ownsRendererBootstrap(owner)) {
320
+ panMoveUpdate.cancel();
321
+ panning = false;
322
+ return;
323
+ }
324
+ if (!panning) {
325
+ panMoveUpdate.cancel();
326
+ return;
327
+ }
328
+ // Pointer-up can arrive before the next animation frame. Deliver the
329
+ // latest point before pan-end so the final drag position is not lost.
330
+ panMoveUpdate.flush();
331
+ panning = false;
332
+ const identity = getRendererIdentity();
333
+ if (!identity)
334
+ return;
335
+ const message = {
336
+ type: "pan-end",
337
+ protocolVersion: PROTOCOL_VERSION,
338
+ ...identity,
339
+ };
340
+ sendToParent(message);
341
+ }
342
+ const onPointerDown = (event) => {
343
+ if (!ownsRendererBootstrap(owner))
344
+ return;
345
+ if (!spaceHeld || event.button !== 0 || isEditableTarget(event.target))
346
+ return;
347
+ const identity = getRendererIdentity();
348
+ if (!identity)
349
+ return;
350
+ panning = true;
351
+ event.preventDefault();
352
+ const target = event.target;
353
+ if (target instanceof HTMLElement)
354
+ target.setPointerCapture?.(event.pointerId);
355
+ const message = {
356
+ type: "pan-start",
357
+ protocolVersion: PROTOCOL_VERSION,
358
+ point: { x: event.clientX, y: event.clientY },
359
+ ...identity,
360
+ };
361
+ sendToParent(message);
362
+ };
363
+ document.addEventListener("pointerdown", onPointerDown, true);
364
+ owner.listenerRemovers.push(() => document.removeEventListener("pointerdown", onPointerDown, true));
365
+ const onPointerMove = (event) => {
366
+ if (!ownsRendererBootstrap(owner))
367
+ return;
368
+ if (!panning)
369
+ return;
370
+ event.preventDefault();
371
+ panMoveUpdate.schedule({ x: event.clientX, y: event.clientY });
372
+ };
373
+ document.addEventListener("pointermove", onPointerMove, true);
374
+ owner.listenerRemovers.push(() => document.removeEventListener("pointermove", onPointerMove, true));
375
+ document.addEventListener("pointerup", endPan, true);
376
+ owner.listenerRemovers.push(() => document.removeEventListener("pointerup", endPan, true));
377
+ document.addEventListener("pointercancel", endPan, true);
378
+ owner.listenerRemovers.push(() => document.removeEventListener("pointercancel", endPan, true));
379
+ const onBlur = () => {
380
+ if (!ownsRendererBootstrap(owner))
381
+ return;
382
+ spaceHeld = false;
383
+ sendSpaceState();
384
+ endPan();
385
+ };
386
+ window.addEventListener("blur", onBlur);
387
+ owner.listenerRemovers.push(() => window.removeEventListener("blur", onBlur));
388
+ const onWheel = (event) => {
389
+ if (!ownsRendererBootstrap(owner))
390
+ return;
391
+ if (!event.ctrlKey && !event.metaKey)
392
+ return;
393
+ const identity = getRendererIdentity();
394
+ if (!identity)
395
+ return;
396
+ event.preventDefault();
397
+ event.stopPropagation();
398
+ const message = {
399
+ type: "zoom",
400
+ protocolVersion: PROTOCOL_VERSION,
401
+ deltaY: event.deltaY,
402
+ point: { x: event.clientX, y: event.clientY },
403
+ ...identity,
404
+ };
405
+ sendToParent(message);
406
+ };
407
+ const wheelOptions = { capture: true, passive: false };
408
+ window.addEventListener("wheel", onWheel, wheelOptions);
409
+ owner.listenerRemovers.push(() => window.removeEventListener("wheel", onWheel, wheelOptions));
410
+ }
@@ -0,0 +1,11 @@
1
+ /** Renderer-owned identity that survives DOM reorders for the lifetime of a node. */
2
+ export declare const RENDERER_ELEMENT_ID_ATTR = "data-renderer-id";
3
+ export interface CidIndex {
4
+ elementId(el: HTMLElement): string;
5
+ }
6
+ /**
7
+ * Retains the historical factory name while replacing positional indexes with
8
+ * node identities. IDs are attached to the actual DOM node, so reorders and
9
+ * sibling insertions cannot redirect a delayed controller message.
10
+ */
11
+ export declare function createCidIndex(_doc: Document): CidIndex;
@@ -0,0 +1,21 @@
1
+ /** Renderer-owned identity that survives DOM reorders for the lifetime of a node. */
2
+ export const RENDERER_ELEMENT_ID_ATTR = "data-renderer-id";
3
+ /**
4
+ * Retains the historical factory name while replacing positional indexes with
5
+ * node identities. IDs are attached to the actual DOM node, so reorders and
6
+ * sibling insertions cannot redirect a delayed controller message.
7
+ */
8
+ export function createCidIndex(_doc) {
9
+ let nextId = 1;
10
+ const ids = new WeakMap();
11
+ function elementId(el) {
12
+ const existing = ids.get(el);
13
+ if (existing)
14
+ return existing;
15
+ const id = `r${nextId++}`;
16
+ ids.set(el, id);
17
+ el.setAttribute(RENDERER_ELEMENT_ID_ATTR, id);
18
+ return id;
19
+ }
20
+ return { elementId };
21
+ }
@@ -0,0 +1,2 @@
1
+ export declare function buildSelector(el: HTMLElement): string;
2
+ export declare function installRendererElementSelector(): () => void;