symbiote-ui 0.3.0-alpha.4

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 (322) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/LICENSE +21 -0
  3. package/README.md +76 -0
  4. package/canvas/AutoLayout.js +731 -0
  5. package/canvas/Breadcrumb/Breadcrumb.css.js +75 -0
  6. package/canvas/Breadcrumb/Breadcrumb.js +96 -0
  7. package/canvas/Breadcrumb/Breadcrumb.tpl.js +7 -0
  8. package/canvas/CanvasConnectionRenderer.js +971 -0
  9. package/canvas/CanvasGraph/CanvasGraph.css.js +29 -0
  10. package/canvas/CanvasGraph/CanvasGraph.js +1697 -0
  11. package/canvas/CanvasGraph/CanvasGraphDrawState.js +280 -0
  12. package/canvas/CanvasGraph/CanvasGraphGeometry.js +194 -0
  13. package/canvas/CanvasViewport.js +550 -0
  14. package/canvas/ConnectionRenderer.js +1283 -0
  15. package/canvas/FlowSimulator.js +326 -0
  16. package/canvas/ForceLayout.js +226 -0
  17. package/canvas/ForceWorker.js +1303 -0
  18. package/canvas/FrameManager.js +223 -0
  19. package/canvas/GraphExplorerShell/GraphExplorerShell.css.js +136 -0
  20. package/canvas/GraphExplorerShell/GraphExplorerShell.js +129 -0
  21. package/canvas/GraphExplorerShell/GraphExplorerShell.tpl.js +12 -0
  22. package/canvas/GraphTabs/GraphTabs.css.js +101 -0
  23. package/canvas/GraphTabs/GraphTabs.js +189 -0
  24. package/canvas/GraphTabs/GraphTabs.tpl.js +12 -0
  25. package/canvas/LODManager.js +88 -0
  26. package/canvas/Minimap/Minimap.css.js +73 -0
  27. package/canvas/Minimap/Minimap.js +210 -0
  28. package/canvas/Minimap/Minimap.tpl.js +7 -0
  29. package/canvas/NodeCanvas/NodeCanvas.css.js +398 -0
  30. package/canvas/NodeCanvas/NodeCanvas.js +1499 -0
  31. package/canvas/NodeCanvas/NodeCanvas.tpl.js +22 -0
  32. package/canvas/NodeSearch/NodeSearch.css.js +97 -0
  33. package/canvas/NodeSearch/NodeSearch.js +140 -0
  34. package/canvas/NodeSearch/NodeSearch.tpl.js +25 -0
  35. package/canvas/NodeViewManager.js +748 -0
  36. package/canvas/PcbRouteDiagnostics.js +463 -0
  37. package/canvas/PcbRouter.js +1127 -0
  38. package/canvas/PinExpansion.js +134 -0
  39. package/canvas/PseudoConnection.js +84 -0
  40. package/canvas/SelectionSync.js +163 -0
  41. package/canvas/SubgraphManager.js +203 -0
  42. package/canvas/SubgraphRouter.js +452 -0
  43. package/canvas/ViewportActions.js +473 -0
  44. package/canvas/graph-explorer.js +339 -0
  45. package/canvas/graph-layout.js +148 -0
  46. package/canvas/graph-model.js +68 -0
  47. package/canvas/html-in-canvas.js +202 -0
  48. package/canvas/project-graph-builder.js +440 -0
  49. package/canvas/project-graph-model.js +183 -0
  50. package/chat/ChatComposer/ChatComposer.css.js +652 -0
  51. package/chat/ChatComposer/ChatComposer.js +304 -0
  52. package/chat/ChatList/ChatList.css.js +102 -0
  53. package/chat/ChatList/ChatList.js +99 -0
  54. package/chat/ChatList/ChatList.tpl.js +20 -0
  55. package/chat/ChatListItem/ChatListItem.css.js +117 -0
  56. package/chat/ChatListItem/ChatListItem.js +32 -0
  57. package/chat/ChatListItem/ChatListItem.tpl.js +17 -0
  58. package/chat/ChatMessageItem/ChatMessageItem.css.js +628 -0
  59. package/chat/ChatMessageItem/ChatMessageItem.js +156 -0
  60. package/chat/ChatSidebar/ChatSidebar.css.js +150 -0
  61. package/chat/ChatSidebar/ChatSidebar.js +230 -0
  62. package/chat/ChatSidebar/ChatSidebar.tpl.js +18 -0
  63. package/chat/ChatSidebar/constants.js +11 -0
  64. package/chat/ChatSidebarItem/ChatSidebarItem.css.js +445 -0
  65. package/chat/ChatSidebarItem/ChatSidebarItem.js +304 -0
  66. package/chat/ChatTranscript/ChatTranscript.css.js +90 -0
  67. package/chat/ChatTranscript/ChatTranscript.js +244 -0
  68. package/chat/chat-context.js +123 -0
  69. package/chat/message-model.js +156 -0
  70. package/cli.js +20 -0
  71. package/control/Button/Button.css.js +93 -0
  72. package/control/Button/Button.js +78 -0
  73. package/control/Button/Button.tpl.js +3 -0
  74. package/control/Field/Field.css.js +91 -0
  75. package/control/Field/Field.js +17 -0
  76. package/control/Field/Field.tpl.js +3 -0
  77. package/core/Connection.js +47 -0
  78. package/core/Editor.js +449 -0
  79. package/core/Frame.js +33 -0
  80. package/core/GraphMermaid.js +348 -0
  81. package/core/GraphText.js +228 -0
  82. package/core/Node.js +145 -0
  83. package/core/Portal.js +106 -0
  84. package/core/Socket.js +187 -0
  85. package/core/SubgraphNode.js +121 -0
  86. package/core/base-path.js +55 -0
  87. package/core/dom-utils.js +14 -0
  88. package/core/index.js +18 -0
  89. package/core/local-cache.js +26 -0
  90. package/core/state-sync.js +227 -0
  91. package/custom-elements.json +6380 -0
  92. package/discover.js +240 -0
  93. package/display/Badge/Badge.css.js +44 -0
  94. package/display/Badge/Badge.js +17 -0
  95. package/display/Badge/Badge.tpl.js +3 -0
  96. package/display/Banner/Banner.css.js +61 -0
  97. package/display/Banner/Banner.js +17 -0
  98. package/display/Banner/Banner.tpl.js +3 -0
  99. package/display/CodeBlock/CodeBlock.css.js +194 -0
  100. package/display/CodeBlock/CodeBlock.js +220 -0
  101. package/display/CodeBlock/CodeBlock.tpl.js +11 -0
  102. package/display/DataTable/DataTable.css.js +101 -0
  103. package/display/DataTable/DataTable.js +136 -0
  104. package/display/DataTable/DataTable.tpl.js +13 -0
  105. package/display/EmptyState/EmptyState.css.js +33 -0
  106. package/display/EmptyState/EmptyState.js +17 -0
  107. package/display/EmptyState/EmptyState.tpl.js +3 -0
  108. package/display/EventFeed/EventFeed.css.js +145 -0
  109. package/display/EventFeed/EventFeed.js +64 -0
  110. package/display/EventFeed/EventFeed.tpl.js +14 -0
  111. package/display/EventFeed/EventFeedItem.js +116 -0
  112. package/display/EventFeed/EventFeedItem.tpl.js +22 -0
  113. package/display/LoadingOverlay/LoadingOverlay.css.js +91 -0
  114. package/display/LoadingOverlay/LoadingOverlay.js +48 -0
  115. package/display/LoadingOverlay/LoadingOverlay.tpl.js +12 -0
  116. package/display/Metric/Metric.css.js +60 -0
  117. package/display/Metric/Metric.js +17 -0
  118. package/display/Metric/Metric.tpl.js +6 -0
  119. package/display/OutputGraphPreview/OutputGraphPreview.css.js +122 -0
  120. package/display/OutputGraphPreview/OutputGraphPreview.js +89 -0
  121. package/display/OutputGraphPreview/OutputGraphPreview.tpl.js +13 -0
  122. package/display/OutputListPreview/OutputListPreview.css.js +109 -0
  123. package/display/OutputListPreview/OutputListPreview.js +77 -0
  124. package/display/OutputListPreview/OutputListPreview.tpl.js +13 -0
  125. package/display/SourceEditor/SourceEditor.css.js +39 -0
  126. package/display/SourceEditor/SourceEditor.js +129 -0
  127. package/display/SourceEditor/SourceEditor.tpl.js +10 -0
  128. package/display/SourceViewer/SourceViewer.css.js +80 -0
  129. package/display/SourceViewer/SourceViewer.js +418 -0
  130. package/display/SourceViewer/SourceViewer.tpl.js +17 -0
  131. package/display/StatusRibbon/StatusRibbon.css.js +73 -0
  132. package/display/StatusRibbon/StatusRibbon.js +87 -0
  133. package/display/StatusRibbon/StatusRibbon.tpl.js +7 -0
  134. package/display/event-feed-adapter.js +72 -0
  135. package/display/format-utils.js +29 -0
  136. package/display/highlight.js +659 -0
  137. package/display/icons.js +37 -0
  138. package/display/markdown-formatter.js +60 -0
  139. package/display/network-approval-page.js +487 -0
  140. package/display/output-preview.js +261 -0
  141. package/effects/CellBg/CellBg.css.js +33 -0
  142. package/effects/CellBg/CellBg.js +410 -0
  143. package/effects/CellBg/CellBg.tpl.js +5 -0
  144. package/graph/canvas-adapter.js +223 -0
  145. package/graph/graph-algorithms.js +31 -0
  146. package/graph/index.js +46 -0
  147. package/graph/model.js +176 -0
  148. package/graph/project-graph-build.js +66 -0
  149. package/graph/project-graph-metadata.js +253 -0
  150. package/graph/project-package.js +128 -0
  151. package/graph/project-runtime.js +116 -0
  152. package/graph/project-transaction.js +284 -0
  153. package/graph/skeleton-utils.js +84 -0
  154. package/graph/theme-contract.js +36 -0
  155. package/graph/transaction-parser.js +56 -0
  156. package/icons/MaterialSymbols.js +69 -0
  157. package/icons/material-symbols-outlined-400.ttf +0 -0
  158. package/icons/material-symbols.css +24 -0
  159. package/index.js +95 -0
  160. package/inspector/InspectorPanel/InspectorPanel.css.js +375 -0
  161. package/inspector/InspectorPanel/InspectorPanel.js +368 -0
  162. package/inspector/InspectorPanel/InspectorPanel.tpl.js +96 -0
  163. package/inspector/TemplatePreview/TemplatePreview.css.js +104 -0
  164. package/inspector/TemplatePreview/TemplatePreview.js +145 -0
  165. package/inspector/TemplatePreview/TemplatePreview.tpl.js +33 -0
  166. package/interactions/ConnectFlow.js +304 -0
  167. package/interactions/Drag.js +104 -0
  168. package/interactions/Selector.js +133 -0
  169. package/interactions/SnapGrid.js +66 -0
  170. package/interactions/Zoom.js +139 -0
  171. package/layout/ActionZone/ActionZone.css.js +88 -0
  172. package/layout/ActionZone/ActionZone.js +261 -0
  173. package/layout/ActionZone/ActionZone.tpl.js +11 -0
  174. package/layout/CrossLayoutPortalBridge/CrossLayoutPortalBridge.js +255 -0
  175. package/layout/Layout/Layout.css.js +91 -0
  176. package/layout/Layout/Layout.js +637 -0
  177. package/layout/Layout/Layout.tpl.js +27 -0
  178. package/layout/LayoutNode/LayoutNode.css.js +302 -0
  179. package/layout/LayoutNode/LayoutNode.js +509 -0
  180. package/layout/LayoutNode/LayoutNode.tpl.js +39 -0
  181. package/layout/LayoutPreview/LayoutPreview.css.js +46 -0
  182. package/layout/LayoutPreview/LayoutPreview.js +102 -0
  183. package/layout/LayoutPreview/LayoutPreview.tpl.js +6 -0
  184. package/layout/LayoutRouter/LayoutRouter.js +274 -0
  185. package/layout/LayoutRouter/SectionRegistry.js +135 -0
  186. package/layout/LayoutRouter/routerSync.js +250 -0
  187. package/layout/LayoutSidebar/LayoutSidebar.css.js +411 -0
  188. package/layout/LayoutSidebar/LayoutSidebar.js +368 -0
  189. package/layout/LayoutSidebar/LayoutSidebar.tpl.js +26 -0
  190. package/layout/LayoutSidebar/SidebarSection.css.js +20 -0
  191. package/layout/LayoutSidebar/SidebarSection.js +184 -0
  192. package/layout/LayoutSidebar/SidebarSection.tpl.js +22 -0
  193. package/layout/LayoutTree.js +373 -0
  194. package/layout/PanelMenu/PanelMenu.css.js +43 -0
  195. package/layout/PanelMenu/PanelMenu.js +95 -0
  196. package/layout/PanelMenu/PanelMenu.tpl.js +17 -0
  197. package/layout/ProjectTabs/ProjectTabs.css.js +188 -0
  198. package/layout/ProjectTabs/ProjectTabs.js +77 -0
  199. package/layout/ProjectTabs/ProjectTabs.tpl.js +15 -0
  200. package/layout/index.js +40 -0
  201. package/list/ListDetailShell/ListDetailShell.css.js +128 -0
  202. package/list/ListDetailShell/ListDetailShell.js +72 -0
  203. package/list/ListDetailShell/ListDetailShell.tpl.js +36 -0
  204. package/list/ListItem/ListItem.css.js +111 -0
  205. package/list/ListItem/ListItem.js +66 -0
  206. package/list/ListItem/ListItem.tpl.js +18 -0
  207. package/locale/index.js +503 -0
  208. package/manifest/component-registry.js +2446 -0
  209. package/manifest/graph-schema.js +285 -0
  210. package/manifest/index.js +6 -0
  211. package/manifest/project-schema-catalog.js +246 -0
  212. package/manifest/rule-catalog.js +201 -0
  213. package/manifest/theme-catalog.js +2149 -0
  214. package/manifest/ui-schema-catalog.js +334 -0
  215. package/menu/ContextMenu/ContextMenu.css.js +61 -0
  216. package/menu/ContextMenu/ContextMenu.js +82 -0
  217. package/menu/ContextMenu/ContextMenu.tpl.js +19 -0
  218. package/navigation/QuickOpen/QuickOpen.css.js +92 -0
  219. package/navigation/QuickOpen/QuickOpen.js +185 -0
  220. package/navigation/QuickOpen/QuickOpen.tpl.js +15 -0
  221. package/navigation/quick-open-utils.js +101 -0
  222. package/node/CtrlItem/CtrlItem.css.js +41 -0
  223. package/node/CtrlItem/CtrlItem.js +24 -0
  224. package/node/CtrlItem/CtrlItem.tpl.js +17 -0
  225. package/node/GraphFrame/GraphFrame.css.js +66 -0
  226. package/node/GraphFrame/GraphFrame.js +32 -0
  227. package/node/GraphFrame/GraphFrame.tpl.js +13 -0
  228. package/node/GraphNode/GraphNode.css.js +815 -0
  229. package/node/GraphNode/GraphNode.js +173 -0
  230. package/node/GraphNode/GraphNode.tpl.js +33 -0
  231. package/node/NodeCallout/NodeCallout.css.js +91 -0
  232. package/node/NodeCallout/NodeCallout.js +281 -0
  233. package/node/NodeCallout/NodeCallout.tpl.js +8 -0
  234. package/node/NodeSocket/NodeSocket.css.js +68 -0
  235. package/node/NodeSocket/NodeSocket.js +26 -0
  236. package/node/NodeSocket/NodeSocket.tpl.js +7 -0
  237. package/node/PortItem/PortItem.css.js +93 -0
  238. package/node/PortItem/PortItem.js +87 -0
  239. package/node/PortItem/PortItem.tpl.js +10 -0
  240. package/package.json +165 -0
  241. package/palette/PaletteBrowser/PaletteBrowser.css.js +143 -0
  242. package/palette/PaletteBrowser/PaletteBrowser.js +152 -0
  243. package/palette/PaletteBrowser/PaletteBrowser.tpl.js +23 -0
  244. package/plugins/History.js +408 -0
  245. package/plugins/Readonly.js +60 -0
  246. package/rules/symbiote-3x.json +170 -0
  247. package/schemas/component-descriptor-v1.json +91 -0
  248. package/schemas/component-descriptor-v2.json +145 -0
  249. package/schemas/graph-model-v1.json +179 -0
  250. package/schemas/graph-v1.json +91 -0
  251. package/schemas/project-package-v1.json +102 -0
  252. package/schemas/project-transaction-v1.json +114 -0
  253. package/schemas/runtime-ui-v1.json +80 -0
  254. package/schemas/theme-rule-block-v1.json +73 -0
  255. package/shapes/CircleShape.js +79 -0
  256. package/shapes/CommentShape.js +35 -0
  257. package/shapes/DiamondShape.js +130 -0
  258. package/shapes/NodeShape.js +79 -0
  259. package/shapes/PillShape.js +91 -0
  260. package/shapes/RectShape.js +84 -0
  261. package/shapes/SVGShape.js +525 -0
  262. package/shapes/index.js +63 -0
  263. package/surface/Card/Card.css.js +57 -0
  264. package/surface/Card/Card.js +17 -0
  265. package/surface/Card/Card.tpl.js +3 -0
  266. package/themes/Palette.js +30 -0
  267. package/themes/Skin.js +113 -0
  268. package/themes/Theme.js +82 -0
  269. package/themes/carbon.js +135 -0
  270. package/themes/dark.js +140 -0
  271. package/themes/default-dark.js +714 -0
  272. package/themes/default-provider.css +635 -0
  273. package/themes/default-provider.js +718 -0
  274. package/themes/ebook.js +136 -0
  275. package/themes/grey.js +137 -0
  276. package/themes/light.js +139 -0
  277. package/themes/neon.js +138 -0
  278. package/themes/pcb.js +273 -0
  279. package/themes/synthwave.js +138 -0
  280. package/tokens/base.json +29 -0
  281. package/tokens/themes/carbon.json +11 -0
  282. package/tokens/themes/dark.json +12 -0
  283. package/tokens/themes/default-dark.json +1543 -0
  284. package/tokens/themes/default-provider.json +1543 -0
  285. package/tokens/themes/ebook.json +11 -0
  286. package/tokens/themes/grey.json +11 -0
  287. package/tokens/themes/light.json +12 -0
  288. package/tokens/themes/neon.json +11 -0
  289. package/tokens/themes/pcb.json +11 -0
  290. package/tokens/themes/synthwave.json +11 -0
  291. package/toolbar/QuickToolbar/QuickToolbar.css.js +152 -0
  292. package/toolbar/QuickToolbar/QuickToolbar.js +529 -0
  293. package/toolbar/QuickToolbar/QuickToolbar.tpl.js +34 -0
  294. package/tree/TreePanel/TreePanel.css.js +112 -0
  295. package/tree/TreePanel/TreePanel.js +147 -0
  296. package/tree/TreePanel/TreePanel.tpl.js +18 -0
  297. package/tree/TreeView/TreeView.css.js +122 -0
  298. package/tree/TreeView/TreeView.js +365 -0
  299. package/tree/TreeView/TreeView.tpl.js +10 -0
  300. package/ui/dialogs.js +221 -0
  301. package/ui/host-adapters.js +114 -0
  302. package/ui/index.js +660 -0
  303. package/ui/locale.js +50 -0
  304. package/ui/overlay-stack.js +89 -0
  305. package/ui/shared-styles.js +26 -0
  306. package/webmcp.js +37 -0
  307. package/xr/deep-graph.js +646 -0
  308. package/xr/emulation.js +198 -0
  309. package/xr/gesture.js +228 -0
  310. package/xr/html-canvas-renderer.js +472 -0
  311. package/xr/index.js +15 -0
  312. package/xr/layout-projection.js +1046 -0
  313. package/xr/panel-frame.js +128 -0
  314. package/xr/panel-host.js +267 -0
  315. package/xr/pointer.js +258 -0
  316. package/xr/scene-controller.js +242 -0
  317. package/xr/spatial-scene.js +212 -0
  318. package/xr/theme-bridge.js +105 -0
  319. package/xr/three-webxr-adapter.js +3439 -0
  320. package/xr/webgl-layer-renderer.js +419 -0
  321. package/xr/webxr.js +679 -0
  322. package/xr/workbench.js +516 -0
@@ -0,0 +1,398 @@
1
+ import { css } from '@symbiotejs/symbiote';
2
+
3
+ export let styles = css`
4
+ node-canvas {
5
+ display: block;
6
+ width: 100%;
7
+ height: 100%;
8
+ overflow: hidden;
9
+ position: relative;
10
+ background-color: var(--sn-bg);
11
+ background-image: radial-gradient(
12
+ circle,
13
+ var(--sn-grid-dot) 1px,
14
+ transparent 1px
15
+ );
16
+ background-size: var(--sn-grid-size) var(--sn-grid-size);
17
+ cursor: grab;
18
+ /* Prevent scrollbar oscillation: canvas manages its own viewport internally.
19
+ - size: SVG overflow:visible children cannot influence parent sizing
20
+ - layout: internal layout changes don't trigger parent reflow
21
+ - paint: clips painting to element box */
22
+ contain: size layout paint;
23
+
24
+ &:active {
25
+ cursor: grabbing;
26
+ }
27
+
28
+ & .canvas-container {
29
+ width: 100%;
30
+ height: 100%;
31
+ position: relative;
32
+ overflow: hidden;
33
+ outline: none;
34
+ }
35
+
36
+ &[data-flow-scroll] {
37
+ background-attachment: local;
38
+ }
39
+
40
+ &[data-flow-scroll='vertical'] {
41
+ overflow-y: auto;
42
+ overflow-x: hidden;
43
+ }
44
+
45
+ &[data-flow-scroll='horizontal'] {
46
+ overflow-x: auto;
47
+ overflow-y: hidden;
48
+ }
49
+
50
+ &[data-flow-scroll] .canvas-container {
51
+ width: max(100%, var(--sn-flow-content-width, 100%));
52
+ height: max(100%, var(--sn-flow-content-height, 100%));
53
+ overflow: visible;
54
+ }
55
+
56
+ &[data-flow-scroll] .content {
57
+ width: max(100%, var(--sn-flow-content-width, 100%));
58
+ height: max(100%, var(--sn-flow-content-height, 100%));
59
+ }
60
+
61
+ &[data-readonly] {
62
+ cursor: default;
63
+ }
64
+
65
+ &[data-chrome-none] .sn-minimap-toggle,
66
+ &[data-chrome-none] node-minimap,
67
+ &[data-chrome-none] node-search,
68
+ &[data-chrome-none] graph-breadcrumb,
69
+ &[data-chrome-none] quick-toolbar,
70
+ &[data-chrome-none] context-menu,
71
+ &[data-chrome-none] inspector-panel {
72
+ display: none !important;
73
+ }
74
+
75
+ &[data-panels-none] .sn-minimap-toggle,
76
+ &[data-panels-none] node-minimap,
77
+ &[data-panels-none] node-search,
78
+ &[data-panels-none] graph-breadcrumb,
79
+ &[data-panels-none] inspector-panel {
80
+ display: none !important;
81
+ }
82
+
83
+ & .content {
84
+ position: absolute;
85
+ top: 0;
86
+ left: 0;
87
+ transform-origin: 0 0;
88
+ will-change: transform;
89
+ }
90
+
91
+ & .sn-connections {
92
+ position: absolute;
93
+ top: 0;
94
+ left: 0;
95
+ pointer-events: all;
96
+ overflow: visible;
97
+ width: 1px;
98
+ height: 1px;
99
+ contain: layout style;
100
+ }
101
+
102
+ & .sn-conn-canvas {
103
+ position: absolute;
104
+ top: 0;
105
+ left: 0;
106
+ width: 100%;
107
+ height: 100%;
108
+ pointer-events: none;
109
+ }
110
+
111
+ & .sn-nodes {
112
+ position: relative;
113
+ }
114
+
115
+ & graph-node[data-svg-shape] {
116
+ background: transparent;
117
+ border: none;
118
+ box-shadow: none;
119
+ border-radius: 0;
120
+ overflow: visible;
121
+ }
122
+
123
+ & graph-node[data-svg-shape] > :not(.sn-node-shape-svg):not(.sn-node-media):not(.sn-shape-watermark) {
124
+ position: relative;
125
+ }
126
+
127
+ & .sn-node-shape-svg {
128
+ position: absolute;
129
+ inset: 0;
130
+ width: 100%;
131
+ height: 100%;
132
+ pointer-events: none;
133
+ z-index: 0;
134
+ overflow: visible;
135
+ }
136
+
137
+ & .pseudo-svg {
138
+ position: absolute;
139
+ top: 0;
140
+ left: 0;
141
+ overflow: visible;
142
+ width: 1px;
143
+ height: 1px;
144
+ pointer-events: none;
145
+ z-index: 100;
146
+ }
147
+ }
148
+
149
+ /* Connection paths */
150
+ .sn-conn-path {
151
+ fill: none;
152
+ stroke: var(--sn-conn-color);
153
+ stroke-width: var(--sn-conn-width, 2);
154
+ stroke-linecap: var(--sn-conn-linecap, round);
155
+ stroke-linejoin: var(--sn-conn-linejoin, round);
156
+ opacity: 0.7;
157
+ pointer-events: stroke;
158
+ cursor: pointer;
159
+ /* Prevent sub-pixel anti-aliasing recalcs during parent transform */
160
+ shape-rendering: geometricPrecision;
161
+ vector-effect: non-scaling-stroke;
162
+
163
+ &:hover {
164
+ opacity: 1;
165
+ stroke-width: 3;
166
+ }
167
+
168
+ &[data-selected] {
169
+ stroke: var(--sn-conn-selected);
170
+ stroke-width: 3;
171
+ opacity: 1;
172
+ }
173
+ }
174
+
175
+ /* Kill pointer-events on SVG paths during active zoom/pan to prevent
176
+ CSS :hover thrashing (stroke-width transition) from causing flicker */
177
+ node-canvas[data-interacting] .sn-conn-path {
178
+ pointer-events: none;
179
+ transition: none;
180
+ }
181
+
182
+ /* Connector endpoint dots — hidden by default, shown only for SVG nodes */
183
+ .sn-conn-dot {
184
+ display: none;
185
+ fill: var(--sn-conn-dot-fill, var(--sn-conn-color));
186
+ stroke: var(--sn-conn-dot-stroke, var(--sn-node-bg));
187
+ stroke-width: var(--sn-conn-dot-stroke-width, var(--sn-socket-border-width));
188
+ r: var(
189
+ --sn-conn-dot-r,
190
+ calc((var(--sn-socket-size) + var(--sn-socket-border-width)) / 2)
191
+ );
192
+ opacity: 0.9;
193
+ pointer-events: none;
194
+ /* PERF: removed filter:drop-shadow — 672 GPU layers killed Chrome renderer */
195
+ }
196
+
197
+ .sn-conn-dot[data-svg-wired] {
198
+ display: initial;
199
+ }
200
+
201
+ /* Free dots for unconnected SVG ports */
202
+ .sn-free-dot {
203
+ fill: var(--sn-conn-color);
204
+ stroke: var(--sn-node-bg);
205
+ stroke-width: var(--sn-conn-dot-stroke-width, var(--sn-socket-border-width));
206
+ r: var(
207
+ --sn-conn-dot-r,
208
+ calc((var(--sn-socket-size) + var(--sn-socket-border-width)) / 2)
209
+ );
210
+ opacity: 0.9;
211
+ /* PERF: removed filter:drop-shadow — see .sn-conn-dot */
212
+ }
213
+ .sn-free-dot:hover {
214
+ r: calc(
215
+ var(
216
+ --sn-conn-dot-r,
217
+ calc((var(--sn-socket-size) + var(--sn-socket-border-width)) / 2)
218
+ ) + 1px
219
+ );
220
+ }
221
+
222
+ /* Dot highlight during compatible connector drag */
223
+ .sn-dot-hint {
224
+ r: calc(
225
+ var(
226
+ --sn-conn-dot-r,
227
+ calc((var(--sn-socket-size) + var(--sn-socket-border-width)) / 2)
228
+ ) + 1px
229
+ );
230
+ /* PERF: removed filter:drop-shadow — GPU layer per dot */
231
+ animation: sn-dot-pulse 0.6s ease-in-out infinite;
232
+ }
233
+
234
+ @keyframes sn-dot-pulse {
235
+ 0%,
236
+ 100% {
237
+ opacity: 0.9;
238
+ }
239
+ 50% {
240
+ opacity: 1;
241
+ }
242
+ }
243
+
244
+ @keyframes sn-fire-pulse {
245
+ 0% {
246
+ box-shadow: 0 0 0 0 color-mix(in srgb, var(--sn-success-color) 70%, transparent);
247
+ }
248
+ 50% {
249
+ box-shadow: 0 0 20px 6px color-mix(in srgb, var(--sn-success-color) 50%, transparent);
250
+ }
251
+ 100% {
252
+ box-shadow: 0 0 0 0 transparent;
253
+ }
254
+ }
255
+
256
+ node-canvas graph-node[data-fire-state='pending'] {
257
+ opacity: 0.4;
258
+ transition: opacity 0.15s;
259
+ }
260
+
261
+ node-canvas graph-node[data-fire-state='active'] {
262
+ opacity: 1;
263
+ border-color: var(--sn-success-color);
264
+ animation: sn-fire-pulse 0.6s ease-out;
265
+ z-index: 50;
266
+ }
267
+
268
+ node-canvas graph-node[data-fire-state='complete'] {
269
+ border-color: var(--sn-success-border);
270
+ transition: border-color 2s ease-out;
271
+ }
272
+
273
+ .pseudo-path {
274
+ fill: none;
275
+ stroke: var(--sn-conn-color);
276
+ stroke-width: 2;
277
+ opacity: 0.5;
278
+ stroke-dasharray: 8 4;
279
+ }
280
+
281
+ /* Data flow animation */
282
+ @keyframes sn-flow {
283
+ from {
284
+ stroke-dashoffset: 0;
285
+ }
286
+ to {
287
+ stroke-dashoffset: -20;
288
+ }
289
+ }
290
+
291
+ .sn-conn-path[data-flowing] {
292
+ stroke-dasharray: 10 5;
293
+ animation: sn-flow 0.6s linear infinite;
294
+ opacity: 0.9;
295
+ }
296
+
297
+ /* Plus indicator at connection drag endpoint */
298
+ .plus-indicator {
299
+ circle {
300
+ fill: var(--sn-node-bg);
301
+ stroke: var(--sn-conn-color);
302
+ stroke-width: 1.5;
303
+ opacity: 0.9;
304
+ }
305
+ line {
306
+ stroke: var(--sn-conn-color);
307
+ stroke-width: 1.5;
308
+ stroke-linecap: round;
309
+ }
310
+ }
311
+
312
+ /* Socket highlighting during connection drag */
313
+ @keyframes sn-socket-glow {
314
+ 0%,
315
+ 100% {
316
+ box-shadow: 0 0 4px currentColor;
317
+ }
318
+ 50% {
319
+ box-shadow:
320
+ 0 0 12px currentColor,
321
+ 0 0 20px currentColor;
322
+ }
323
+ }
324
+
325
+ .sn-socket[data-compatible] {
326
+ animation: sn-socket-glow 1s ease-in-out infinite;
327
+ transform: scale(1.3);
328
+ z-index: 10;
329
+ }
330
+
331
+ .sn-socket[data-incompatible] {
332
+ opacity: 0.25;
333
+ transform: scale(0.8);
334
+ }
335
+
336
+ /* Node lift effect when dragging */
337
+ .sn-node-lifted {
338
+ box-shadow: 0 6px 12px var(--sn-shadow-color);
339
+ border-color: var(--sn-node-active-border) !important;
340
+ }
341
+
342
+ /* Connector dot: input vs output side */
343
+ .sn-dot-output {
344
+ fill: var(--sn-dot-output);
345
+ }
346
+ .sn-dot-input {
347
+ fill: var(--sn-dot-input);
348
+ }
349
+
350
+ /* Connector dot: socket type overrides */
351
+ .sn-dot-exec {
352
+ fill: var(--sn-dot-exec);
353
+ r: 6;
354
+ }
355
+ .sn-dot-data {
356
+ /* uses side color by default */
357
+ }
358
+ .sn-dot-ctrl {
359
+ fill: var(--sn-dot-ctrl);
360
+ r: 4;
361
+ }
362
+
363
+ /* Direction arrow on wire midpoint */
364
+ .sn-conn-arrow {
365
+ fill: var(--sn-conn-color);
366
+ opacity: 0.5;
367
+ pointer-events: none;
368
+ }
369
+
370
+ /* Fire trace: sequential node execution highlighting */
371
+ @keyframes sn-fire-pulse {
372
+ 0% {
373
+ box-shadow: 0 0 0 0 color-mix(in srgb, var(--sn-success-color) 60%, transparent);
374
+ }
375
+ 50% {
376
+ box-shadow: 0 0 16px 4px color-mix(in srgb, var(--sn-success-color) 40%, transparent);
377
+ }
378
+ 100% {
379
+ box-shadow: 0 0 0 0 color-mix(in srgb, var(--sn-success-color) 0%, transparent);
380
+ }
381
+ }
382
+
383
+ graph-node[data-fire-state='active'] {
384
+ border-color: var(--sn-success-color) !important;
385
+ animation: sn-fire-pulse 0.6s ease-out;
386
+ z-index: 50;
387
+ }
388
+
389
+ graph-node[data-fire-state='done'] {
390
+ border-color: color-mix(in srgb, var(--sn-success-color) 40%, transparent) !important;
391
+ transition: border-color 2s ease-out;
392
+ }
393
+
394
+ graph-node[data-fire-state='pending'] {
395
+ opacity: 0.5;
396
+ transition: opacity 0.15s;
397
+ }
398
+ `;