@angflow/angular 0.0.12 → 0.0.14

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 (161) hide show
  1. package/README.md +14 -4
  2. package/dist/base.css +417 -411
  3. package/dist/esm/lib/components/a11y-descriptions/a11y-descriptions.component.d.ts +4 -0
  4. package/dist/esm/lib/components/a11y-descriptions/a11y-descriptions.component.d.ts.map +1 -1
  5. package/dist/esm/lib/components/a11y-descriptions/a11y-descriptions.component.js +24 -20
  6. package/dist/esm/lib/components/a11y-descriptions/a11y-descriptions.component.js.map +1 -1
  7. package/dist/esm/lib/components/attribution/attribution.component.d.ts +4 -0
  8. package/dist/esm/lib/components/attribution/attribution.component.d.ts.map +1 -1
  9. package/dist/esm/lib/components/attribution/attribution.component.js +22 -18
  10. package/dist/esm/lib/components/attribution/attribution.component.js.map +1 -1
  11. package/dist/esm/lib/components/background/background.component.d.ts +20 -0
  12. package/dist/esm/lib/components/background/background.component.d.ts.map +1 -1
  13. package/dist/esm/lib/components/background/background.component.js +159 -140
  14. package/dist/esm/lib/components/background/background.component.js.map +1 -1
  15. package/dist/esm/lib/components/connection-line/connection-line.component.d.ts +7 -0
  16. package/dist/esm/lib/components/connection-line/connection-line.component.d.ts.map +1 -1
  17. package/dist/esm/lib/components/connection-line/connection-line.component.js +7 -0
  18. package/dist/esm/lib/components/connection-line/connection-line.component.js.map +1 -1
  19. package/dist/esm/lib/components/controls/controls.component.d.ts +21 -0
  20. package/dist/esm/lib/components/controls/controls.component.d.ts.map +1 -1
  21. package/dist/esm/lib/components/controls/controls.component.js +21 -1
  22. package/dist/esm/lib/components/controls/controls.component.js.map +1 -1
  23. package/dist/esm/lib/components/edge-label-renderer/edge-label-renderer.component.d.ts +4 -0
  24. package/dist/esm/lib/components/edge-label-renderer/edge-label-renderer.component.d.ts.map +1 -1
  25. package/dist/esm/lib/components/edge-label-renderer/edge-label-renderer.component.js +4 -0
  26. package/dist/esm/lib/components/edge-label-renderer/edge-label-renderer.component.js.map +1 -1
  27. package/dist/esm/lib/components/edge-toolbar/edge-toolbar.component.d.ts +12 -0
  28. package/dist/esm/lib/components/edge-toolbar/edge-toolbar.component.d.ts.map +1 -1
  29. package/dist/esm/lib/components/edge-toolbar/edge-toolbar.component.js +12 -0
  30. package/dist/esm/lib/components/edge-toolbar/edge-toolbar.component.js.map +1 -1
  31. package/dist/esm/lib/components/edges/base-edge.component.d.ts +23 -0
  32. package/dist/esm/lib/components/edges/base-edge.component.d.ts.map +1 -1
  33. package/dist/esm/lib/components/edges/base-edge.component.js +63 -40
  34. package/dist/esm/lib/components/edges/base-edge.component.js.map +1 -1
  35. package/dist/esm/lib/components/edges/bezier-edge.component.d.ts +4 -0
  36. package/dist/esm/lib/components/edges/bezier-edge.component.d.ts.map +1 -1
  37. package/dist/esm/lib/components/edges/bezier-edge.component.js +4 -0
  38. package/dist/esm/lib/components/edges/bezier-edge.component.js.map +1 -1
  39. package/dist/esm/lib/components/edges/edge-text.component.d.ts +4 -0
  40. package/dist/esm/lib/components/edges/edge-text.component.d.ts.map +1 -1
  41. package/dist/esm/lib/components/edges/edge-text.component.js +30 -26
  42. package/dist/esm/lib/components/edges/edge-text.component.js.map +1 -1
  43. package/dist/esm/lib/components/edges/simple-bezier-edge.component.d.ts +4 -0
  44. package/dist/esm/lib/components/edges/simple-bezier-edge.component.d.ts.map +1 -1
  45. package/dist/esm/lib/components/edges/simple-bezier-edge.component.js +4 -0
  46. package/dist/esm/lib/components/edges/simple-bezier-edge.component.js.map +1 -1
  47. package/dist/esm/lib/components/edges/smooth-step-edge.component.d.ts +1 -0
  48. package/dist/esm/lib/components/edges/smooth-step-edge.component.d.ts.map +1 -1
  49. package/dist/esm/lib/components/edges/smooth-step-edge.component.js +1 -0
  50. package/dist/esm/lib/components/edges/smooth-step-edge.component.js.map +1 -1
  51. package/dist/esm/lib/components/edges/step-edge.component.d.ts +1 -0
  52. package/dist/esm/lib/components/edges/step-edge.component.d.ts.map +1 -1
  53. package/dist/esm/lib/components/edges/step-edge.component.js +1 -0
  54. package/dist/esm/lib/components/edges/step-edge.component.js.map +1 -1
  55. package/dist/esm/lib/components/edges/straight-edge.component.d.ts +1 -0
  56. package/dist/esm/lib/components/edges/straight-edge.component.d.ts.map +1 -1
  57. package/dist/esm/lib/components/edges/straight-edge.component.js +1 -0
  58. package/dist/esm/lib/components/edges/straight-edge.component.js.map +1 -1
  59. package/dist/esm/lib/components/handle/handle.component.d.ts +20 -1
  60. package/dist/esm/lib/components/handle/handle.component.d.ts.map +1 -1
  61. package/dist/esm/lib/components/handle/handle.component.js +25 -2
  62. package/dist/esm/lib/components/handle/handle.component.js.map +1 -1
  63. package/dist/esm/lib/components/minimap/minimap.component.d.ts +34 -0
  64. package/dist/esm/lib/components/minimap/minimap.component.d.ts.map +1 -1
  65. package/dist/esm/lib/components/minimap/minimap.component.js +30 -4
  66. package/dist/esm/lib/components/minimap/minimap.component.js.map +1 -1
  67. package/dist/esm/lib/components/ng-flow-provider/ng-flow-provider.component.d.ts +14 -0
  68. package/dist/esm/lib/components/ng-flow-provider/ng-flow-provider.component.d.ts.map +1 -1
  69. package/dist/esm/lib/components/ng-flow-provider/ng-flow-provider.component.js +14 -0
  70. package/dist/esm/lib/components/ng-flow-provider/ng-flow-provider.component.js.map +1 -1
  71. package/dist/esm/lib/components/node-resizer/node-resizer.component.d.ts +29 -0
  72. package/dist/esm/lib/components/node-resizer/node-resizer.component.d.ts.map +1 -1
  73. package/dist/esm/lib/components/node-resizer/node-resizer.component.js +153 -124
  74. package/dist/esm/lib/components/node-resizer/node-resizer.component.js.map +1 -1
  75. package/dist/esm/lib/components/node-toolbar/node-toolbar.component.d.ts +21 -1
  76. package/dist/esm/lib/components/node-toolbar/node-toolbar.component.d.ts.map +1 -1
  77. package/dist/esm/lib/components/node-toolbar/node-toolbar.component.js +21 -1
  78. package/dist/esm/lib/components/node-toolbar/node-toolbar.component.js.map +1 -1
  79. package/dist/esm/lib/components/nodes/default-node.component.d.ts +4 -0
  80. package/dist/esm/lib/components/nodes/default-node.component.d.ts.map +1 -1
  81. package/dist/esm/lib/components/nodes/default-node.component.js +13 -9
  82. package/dist/esm/lib/components/nodes/default-node.component.js.map +1 -1
  83. package/dist/esm/lib/components/nodes/group-node.component.d.ts +5 -0
  84. package/dist/esm/lib/components/nodes/group-node.component.d.ts.map +1 -1
  85. package/dist/esm/lib/components/nodes/group-node.component.js +5 -0
  86. package/dist/esm/lib/components/nodes/group-node.component.js.map +1 -1
  87. package/dist/esm/lib/components/nodes/input-node.component.d.ts +4 -0
  88. package/dist/esm/lib/components/nodes/input-node.component.d.ts.map +1 -1
  89. package/dist/esm/lib/components/nodes/input-node.component.js +11 -7
  90. package/dist/esm/lib/components/nodes/input-node.component.js.map +1 -1
  91. package/dist/esm/lib/components/nodes/output-node.component.d.ts +4 -0
  92. package/dist/esm/lib/components/nodes/output-node.component.d.ts.map +1 -1
  93. package/dist/esm/lib/components/nodes/output-node.component.js +11 -7
  94. package/dist/esm/lib/components/nodes/output-node.component.js.map +1 -1
  95. package/dist/esm/lib/components/panel/panel.component.d.ts +12 -0
  96. package/dist/esm/lib/components/panel/panel.component.d.ts.map +1 -1
  97. package/dist/esm/lib/components/panel/panel.component.js +12 -0
  98. package/dist/esm/lib/components/panel/panel.component.js.map +1 -1
  99. package/dist/esm/lib/components/viewport-portal/viewport-portal.component.d.ts +5 -0
  100. package/dist/esm/lib/components/viewport-portal/viewport-portal.component.d.ts.map +1 -1
  101. package/dist/esm/lib/components/viewport-portal/viewport-portal.component.js +5 -0
  102. package/dist/esm/lib/components/viewport-portal/viewport-portal.component.js.map +1 -1
  103. package/dist/esm/lib/container/edge-renderer/edge-renderer.component.d.ts.map +1 -1
  104. package/dist/esm/lib/container/edge-renderer/edge-renderer.component.js +35 -3
  105. package/dist/esm/lib/container/edge-renderer/edge-renderer.component.js.map +1 -1
  106. package/dist/esm/lib/container/ng-flow/ng-flow.component.d.ts +154 -1
  107. package/dist/esm/lib/container/ng-flow/ng-flow.component.d.ts.map +1 -1
  108. package/dist/esm/lib/container/ng-flow/ng-flow.component.js +162 -23
  109. package/dist/esm/lib/container/ng-flow/ng-flow.component.js.map +1 -1
  110. package/dist/esm/lib/container/node-renderer/node-renderer.component.d.ts +3 -1
  111. package/dist/esm/lib/container/node-renderer/node-renderer.component.d.ts.map +1 -1
  112. package/dist/esm/lib/container/node-renderer/node-renderer.component.js +50 -8
  113. package/dist/esm/lib/container/node-renderer/node-renderer.component.js.map +1 -1
  114. package/dist/esm/lib/container/pane/pane.component.d.ts +0 -1
  115. package/dist/esm/lib/container/pane/pane.component.d.ts.map +1 -1
  116. package/dist/esm/lib/container/pane/pane.component.js +18 -25
  117. package/dist/esm/lib/container/pane/pane.component.js.map +1 -1
  118. package/dist/esm/lib/container/viewport/viewport.component.d.ts +4 -0
  119. package/dist/esm/lib/container/viewport/viewport.component.d.ts.map +1 -1
  120. package/dist/esm/lib/container/viewport/viewport.component.js +4 -0
  121. package/dist/esm/lib/container/viewport/viewport.component.js.map +1 -1
  122. package/dist/esm/lib/directives/drag.directive.d.ts +17 -0
  123. package/dist/esm/lib/directives/drag.directive.d.ts.map +1 -1
  124. package/dist/esm/lib/directives/drag.directive.js +17 -0
  125. package/dist/esm/lib/directives/drag.directive.js.map +1 -1
  126. package/dist/esm/lib/directives/key-handler.directive.d.ts +13 -0
  127. package/dist/esm/lib/directives/key-handler.directive.d.ts.map +1 -1
  128. package/dist/esm/lib/directives/key-handler.directive.js +13 -0
  129. package/dist/esm/lib/directives/key-handler.directive.js.map +1 -1
  130. package/dist/esm/lib/public-api.d.ts +1 -0
  131. package/dist/esm/lib/public-api.d.ts.map +1 -1
  132. package/dist/esm/lib/public-api.js +2 -0
  133. package/dist/esm/lib/public-api.js.map +1 -1
  134. package/dist/esm/lib/services/flow-store.service.d.ts +3 -0
  135. package/dist/esm/lib/services/flow-store.service.d.ts.map +1 -1
  136. package/dist/esm/lib/services/flow-store.service.js +3 -0
  137. package/dist/esm/lib/services/flow-store.service.js.map +1 -1
  138. package/dist/esm/lib/services/ng-flow.service.d.ts +82 -0
  139. package/dist/esm/lib/services/ng-flow.service.d.ts.map +1 -1
  140. package/dist/esm/lib/services/ng-flow.service.js +82 -0
  141. package/dist/esm/lib/services/ng-flow.service.js.map +1 -1
  142. package/dist/esm/lib/services/tokens.d.ts +23 -0
  143. package/dist/esm/lib/services/tokens.d.ts.map +1 -1
  144. package/dist/esm/lib/services/tokens.js +22 -0
  145. package/dist/esm/lib/services/tokens.js.map +1 -1
  146. package/dist/esm/lib/types/nodes.d.ts +36 -2
  147. package/dist/esm/lib/types/nodes.d.ts.map +1 -1
  148. package/dist/esm/lib/utils/changes.d.ts +20 -0
  149. package/dist/esm/lib/utils/changes.d.ts.map +1 -1
  150. package/dist/esm/lib/utils/changes.js +20 -0
  151. package/dist/esm/lib/utils/changes.js.map +1 -1
  152. package/dist/esm/lib/utils/index.d.ts +1 -0
  153. package/dist/esm/lib/utils/index.d.ts.map +1 -1
  154. package/dist/esm/lib/utils/index.js +1 -0
  155. package/dist/esm/lib/utils/index.js.map +1 -1
  156. package/dist/esm/lib/utils/inject-ng-flow-node.d.ts +20 -0
  157. package/dist/esm/lib/utils/inject-ng-flow-node.d.ts.map +1 -0
  158. package/dist/esm/lib/utils/inject-ng-flow-node.js +28 -0
  159. package/dist/esm/lib/utils/inject-ng-flow-node.js.map +1 -0
  160. package/dist/style.css +417 -411
  161. package/package.json +6 -6
package/dist/style.css CHANGED
@@ -422,6 +422,7 @@ svg.xy-flow__connectionline {
422
422
  height: 100%;
423
423
  left: 0;
424
424
  top: 0;
425
+ transform-origin: 0 0;
425
426
  user-select: none;
426
427
  }
427
428
  .xy-flow__minimap {
@@ -904,489 +905,494 @@ svg.xy-flow__connectionline {
904
905
  }
905
906
 
906
907
 
907
- /*
908
- * @angflow/angular — Complete stylesheet
909
- *
910
- * Import this once in your app's global styles:
911
- * @import '@angflow/angular/styles/ng-flow.css';
912
- *
913
- * Or in angular.json:
914
- * "styles": ["node_modules/@angflow/angular/styles/ng-flow.css"]
915
- */
916
-
917
- /* ── CSS Custom Properties (theme defaults) ─────────────────────── */
918
- .xy-flow {
919
- direction: ltr;
920
-
921
- /* Edges */
922
- --xy-edge-stroke-default: #999;
923
- --xy-edge-stroke-width-default: 1.5;
924
- --xy-edge-stroke-selected-default: #555;
925
-
926
- /* Connection line */
927
- --xy-connectionline-stroke-default: #555;
928
- --xy-connectionline-stroke-width-default: 2;
929
-
930
- /* Attribution */
931
- --xy-attribution-background-color-default: rgba(255, 255, 255, 0.5);
932
-
933
- /* Minimap */
934
- --xy-minimap-background-color-default: #fff;
935
- --xy-minimap-mask-background-color-default: rgba(240, 240, 240, 0.6);
936
- --xy-minimap-mask-stroke-color-default: transparent;
937
- --xy-minimap-mask-stroke-width-default: 1;
938
- --xy-minimap-node-background-color-default: #e2e2e2;
939
- --xy-minimap-node-stroke-color-default: transparent;
940
- --xy-minimap-node-stroke-width-default: 2;
941
-
942
- /* Background */
943
- --xy-background-color-default: #fafafa;
944
- --xy-background-pattern-dots-color-default: #91919a;
945
- --xy-background-pattern-lines-color-default: #eee;
946
- --xy-background-pattern-cross-color-default: #e2e2e2;
947
-
948
- /* Nodes */
949
- --xy-node-color-default: inherit;
950
- --xy-node-border-default: 1px solid #1a192b;
951
- --xy-node-background-color-default: #fff;
952
- --xy-node-group-background-color-default: rgba(240, 240, 240, 0.25);
953
- --xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(0, 0, 0, 0.08);
954
- --xy-node-boxshadow-selected-default: 0 0 0 0.5px #1a192b;
955
- --xy-node-border-radius-default: 3px;
956
-
957
- /* Handles */
958
- --xy-handle-background-color-default: #1a192b;
959
- --xy-handle-border-color-default: #fff;
960
-
961
- /* Selection */
962
- --xy-selection-background-color-default: rgba(0, 89, 220, 0.08);
963
- --xy-selection-border-default: 1px dotted rgba(0, 89, 220, 0.8);
964
-
965
- /* Controls */
966
- --xy-controls-button-background-color-default: #fefefe;
967
- --xy-controls-button-background-color-hover-default: #f4f4f4;
968
- --xy-controls-button-color-default: inherit;
969
- --xy-controls-button-border-color-default: #eee;
970
- --xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, 0.08);
971
-
972
- /* Edge labels */
973
- --xy-edge-label-background-color-default: #ffffff;
974
- --xy-edge-label-color-default: inherit;
975
-
976
- background-color: var(--xy-background-color, var(--xy-background-color-default));
908
+ /*
909
+ * @angflow/angular — Complete stylesheet
910
+ *
911
+ * Import this once in your app's global styles:
912
+ * @import '@angflow/angular/styles/ng-flow.css';
913
+ *
914
+ * Or in angular.json:
915
+ * "styles": ["node_modules/@angflow/angular/styles/ng-flow.css"]
916
+ */
917
+
918
+ /* ── CSS Custom Properties (theme defaults) ─────────────────────── */
919
+ .xy-flow {
920
+ direction: ltr;
921
+
922
+ /* Edges */
923
+ --xy-edge-stroke-default: #999;
924
+ --xy-edge-stroke-width-default: 1.5;
925
+ --xy-edge-stroke-selected-default: #555;
926
+
927
+ /* Connection line */
928
+ --xy-connectionline-stroke-default: #555;
929
+ --xy-connectionline-stroke-width-default: 2;
930
+
931
+ /* Attribution */
932
+ --xy-attribution-background-color-default: rgba(255, 255, 255, 0.5);
933
+
934
+ /* Minimap */
935
+ --xy-minimap-background-color-default: #fff;
936
+ --xy-minimap-mask-background-color-default: rgba(240, 240, 240, 0.6);
937
+ --xy-minimap-mask-stroke-color-default: transparent;
938
+ --xy-minimap-mask-stroke-width-default: 1;
939
+ --xy-minimap-node-background-color-default: #e2e2e2;
940
+ --xy-minimap-node-stroke-color-default: transparent;
941
+ --xy-minimap-node-stroke-width-default: 2;
942
+
943
+ /* Background */
944
+ --xy-background-color-default: #fafafa;
945
+ --xy-background-pattern-dots-color-default: #91919a;
946
+ --xy-background-pattern-lines-color-default: #eee;
947
+ --xy-background-pattern-cross-color-default: #e2e2e2;
948
+
949
+ /* Nodes */
950
+ --xy-node-color-default: inherit;
951
+ --xy-node-border-default: 1px solid #1a192b;
952
+ --xy-node-background-color-default: #fff;
953
+ --xy-node-group-background-color-default: rgba(240, 240, 240, 0.25);
954
+ --xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(0, 0, 0, 0.08);
955
+ --xy-node-boxshadow-selected-default: 0 0 0 0.5px #1a192b;
956
+ --xy-node-border-radius-default: 3px;
957
+
958
+ /* Handles */
959
+ --xy-handle-background-color-default: #1a192b;
960
+ --xy-handle-border-color-default: #fff;
961
+
962
+ /* Selection */
963
+ --xy-selection-background-color-default: rgba(0, 89, 220, 0.08);
964
+ --xy-selection-border-default: 1px dotted rgba(0, 89, 220, 0.8);
965
+
966
+ /* Controls */
967
+ --xy-controls-button-background-color-default: #fefefe;
968
+ --xy-controls-button-background-color-hover-default: #f4f4f4;
969
+ --xy-controls-button-color-default: inherit;
970
+ --xy-controls-button-border-color-default: #eee;
971
+ --xy-controls-box-shadow-default: 0 0 2px 1px rgba(0, 0, 0, 0.08);
972
+
973
+ /* Edge labels */
974
+ --xy-edge-label-background-color-default: #ffffff;
975
+ --xy-edge-label-color-default: inherit;
976
+
977
+ background-color: var(--xy-background-color, var(--xy-background-color-default));
977
978
  }
978
-
979
-
980
- /* Dark mode */
981
- .xy-flow.dark {
982
- --xy-edge-stroke-default: #3e3e3e;
983
- --xy-edge-stroke-selected-default: #727272;
984
- --xy-node-color-default: #f8f8f8;
985
- --xy-node-border-default: 1px solid #3c3c3c;
986
- --xy-node-background-color-default: #1e1e1e;
987
- --xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(255, 255, 255, 0.08);
988
- --xy-node-boxshadow-selected-default: 0 0 0 0.5px #999;
989
- --xy-handle-background-color-default: #bebebe;
990
- --xy-handle-border-color-default: #1e1e1e;
991
- --xy-background-color-default: #141414;
992
- --xy-background-pattern-dots-color-default: #777;
993
- --xy-background-pattern-lines-color-default: #777;
994
- --xy-background-pattern-cross-color-default: #777;
995
- --xy-minimap-background-color-default: #141414;
996
- --xy-minimap-mask-background-color-default: rgba(60, 60, 60, 0.6);
997
- --xy-minimap-node-background-color-default: #2b2b2b;
998
- --xy-controls-button-background-color-default: #2b2b2b;
999
- --xy-controls-button-background-color-hover-default: #3e3e3e;
1000
- --xy-controls-button-color-default: #f8f8f8;
1001
- --xy-controls-button-border-color-default: #5b5b5b;
1002
- --xy-edge-label-background-color-default: #141414;
1003
- --xy-edge-label-color-default: #f8f8f8;
979
+
980
+
981
+ /* Dark mode */
982
+ .xy-flow.dark {
983
+ --xy-edge-stroke-default: #3e3e3e;
984
+ --xy-edge-stroke-selected-default: #727272;
985
+ --xy-node-color-default: #f8f8f8;
986
+ --xy-node-border-default: 1px solid #3c3c3c;
987
+ --xy-node-background-color-default: #1e1e1e;
988
+ --xy-node-boxshadow-hover-default: 0 1px 4px 1px rgba(255, 255, 255, 0.08);
989
+ --xy-node-boxshadow-selected-default: 0 0 0 0.5px #999;
990
+ --xy-handle-background-color-default: #bebebe;
991
+ --xy-handle-border-color-default: #1e1e1e;
992
+ --xy-background-color-default: #141414;
993
+ --xy-background-pattern-dots-color-default: #777;
994
+ --xy-background-pattern-lines-color-default: #777;
995
+ --xy-background-pattern-cross-color-default: #777;
996
+ --xy-minimap-background-color-default: #141414;
997
+ --xy-minimap-mask-background-color-default: rgba(60, 60, 60, 0.6);
998
+ --xy-minimap-node-background-color-default: #2b2b2b;
999
+ --xy-controls-button-background-color-default: #2b2b2b;
1000
+ --xy-controls-button-background-color-hover-default: #3e3e3e;
1001
+ --xy-controls-button-color-default: #f8f8f8;
1002
+ --xy-controls-button-border-color-default: #5b5b5b;
1003
+ --xy-edge-label-background-color-default: #141414;
1004
+ --xy-edge-label-color-default: #f8f8f8;
1004
1005
  }
1005
-
1006
-
1007
- /* ── Layout ─────────────────────────────────────────────────────── */
1008
- .xy-flow__container {
1009
- position: absolute;
1010
- width: 100%;
1011
- height: 100%;
1012
- top: 0;
1013
- left: 0;
1006
+
1007
+
1008
+ /* ── Layout ─────────────────────────────────────────────────────── */
1009
+ .xy-flow__container {
1010
+ position: absolute;
1011
+ width: 100%;
1012
+ height: 100%;
1013
+ top: 0;
1014
+ left: 0;
1014
1015
  }
1015
-
1016
-
1017
- .xy-flow__pane {
1018
- z-index: 1;
1019
- cursor: default;
1016
+
1017
+
1018
+ .xy-flow__pane {
1019
+ z-index: 1;
1020
+ cursor: default;
1020
1021
  }
1021
-
1022
+
1022
1023
  .xy-flow__pane.selection { cursor: pointer; }
1023
-
1024
-
1025
- .xy-flow__viewport {
1026
- transform-origin: 0 0;
1027
- z-index: 2;
1028
- pointer-events: none;
1024
+
1025
+
1026
+ .xy-flow__viewport {
1027
+ transform-origin: 0 0;
1028
+ z-index: 2;
1029
+ pointer-events: none;
1029
1030
  }
1030
-
1031
-
1031
+
1032
+
1032
1033
  .xy-flow__renderer { z-index: 4; }
1033
-
1034
+
1034
1035
  .xy-flow__selection { z-index: 6; }
1035
-
1036
-
1037
- /* ── Edges ──────────────────────────────────────────────────────── */
1038
- .xy-flow__edge-path {
1039
- stroke: var(--xy-edge-stroke, var(--xy-edge-stroke-default));
1040
- stroke-width: var(--xy-edge-stroke-width, var(--xy-edge-stroke-width-default));
1041
- fill: none;
1036
+
1037
+
1038
+ /* ── Edges ──────────────────────────────────────────────────────── */
1039
+ .xy-flow__edge-path {
1040
+ stroke: var(--xy-edge-stroke, var(--xy-edge-stroke-default));
1041
+ stroke-width: var(--xy-edge-stroke-width, var(--xy-edge-stroke-width-default));
1042
+ fill: none;
1042
1043
  }
1043
-
1044
-
1045
- .xy-flow__connection-path {
1046
- stroke: var(--xy-connectionline-stroke, var(--xy-connectionline-stroke-default));
1047
- stroke-width: var(--xy-connectionline-stroke-width, var(--xy-connectionline-stroke-width-default));
1048
- fill: none;
1044
+
1045
+
1046
+ .xy-flow__connection-path {
1047
+ stroke: var(--xy-connectionline-stroke, var(--xy-connectionline-stroke-default));
1048
+ stroke-width: var(--xy-connectionline-stroke-width, var(--xy-connectionline-stroke-width-default));
1049
+ fill: none;
1049
1050
  }
1050
-
1051
-
1051
+
1052
+
1052
1053
  .xy-flow .xy-flow__edges { position: absolute; }
1053
-
1054
- .xy-flow .xy-flow__edges svg {
1055
- overflow: visible;
1056
- position: absolute;
1057
- pointer-events: none;
1054
+
1055
+ .xy-flow .xy-flow__edges svg {
1056
+ overflow: visible;
1057
+ position: absolute;
1058
+ pointer-events: none;
1058
1059
  }
1059
-
1060
-
1060
+
1061
+
1061
1062
  .xy-flow__edge { pointer-events: visibleStroke; }
1062
-
1063
+
1063
1064
  .xy-flow__edge.selectable { cursor: pointer; }
1064
-
1065
- .xy-flow__edge.animated path {
1066
- stroke-dasharray: 5;
1067
- animation: xy-flow-dashdraw 0.5s linear infinite;
1065
+
1066
+ .xy-flow__edge.animated path {
1067
+ stroke-dasharray: 5;
1068
+ animation: xy-flow-dashdraw 0.5s linear infinite;
1068
1069
  }
1069
-
1070
- .xy-flow__edge.animated path.xy-flow__edge-interaction {
1071
- stroke-dasharray: none;
1072
- animation: none;
1070
+
1071
+ .xy-flow__edge.animated path.xy-flow__edge-interaction {
1072
+ stroke-dasharray: none;
1073
+ animation: none;
1073
1074
  }
1074
-
1075
- .xy-flow__edge.selected .xy-flow__edge-path,
1076
- .xy-flow__edge.selectable:focus .xy-flow__edge-path,
1077
- .xy-flow__edge.selectable:focus-visible .xy-flow__edge-path {
1078
- stroke: var(--xy-edge-stroke-selected, var(--xy-edge-stroke-selected-default));
1075
+
1076
+ .xy-flow__edge.selected .xy-flow__edge-path,
1077
+ .xy-flow__edge.selectable:focus .xy-flow__edge-path,
1078
+ .xy-flow__edge.selectable:focus-visible .xy-flow__edge-path {
1079
+ stroke: var(--xy-edge-stroke-selected, var(--xy-edge-stroke-selected-default));
1079
1080
  }
1080
-
1081
-
1081
+
1082
+
1082
1083
  .xy-flow__edge-textwrapper { pointer-events: all; }
1083
-
1084
+
1084
1085
  .xy-flow__edge-text { pointer-events: none; user-select: none; }
1085
-
1086
-
1087
- .xy-flow__arrowhead polyline {
1088
- stroke: var(--xy-edge-stroke, var(--xy-edge-stroke-default));
1086
+
1087
+
1088
+ .xy-flow__arrowhead polyline {
1089
+ stroke: var(--xy-edge-stroke, var(--xy-edge-stroke-default));
1089
1090
  }
1090
-
1091
- .xy-flow__arrowhead polyline.arrowclosed {
1092
- fill: var(--xy-edge-stroke, var(--xy-edge-stroke-default));
1091
+
1092
+ .xy-flow__arrowhead polyline.arrowclosed {
1093
+ fill: var(--xy-edge-stroke, var(--xy-edge-stroke-default));
1093
1094
  }
1094
-
1095
-
1095
+
1096
+
1096
1097
  .xy-flow__connection { pointer-events: none; }
1097
-
1098
- svg.xy-flow__connectionline {
1099
- z-index: 1001;
1100
- overflow: visible;
1101
- position: absolute;
1098
+
1099
+ svg.xy-flow__connectionline {
1100
+ z-index: 1001;
1101
+ overflow: visible;
1102
+ position: absolute;
1102
1103
  }
1103
-
1104
-
1105
- @keyframes xy-flow-dashdraw {
1106
- from { stroke-dashoffset: 10; }
1104
+
1105
+
1106
+ @keyframes xy-flow-dashdraw {
1107
+ from { stroke-dashoffset: 10; }
1107
1108
  }
1108
-
1109
-
1110
- /* ── Nodes ──────────────────────────────────────────────────────── */
1111
- .xy-flow__nodes {
1112
- pointer-events: none;
1113
- transform-origin: 0 0;
1109
+
1110
+
1111
+ /* ── Nodes ──────────────────────────────────────────────────────── */
1112
+ .xy-flow__nodes {
1113
+ pointer-events: none;
1114
+ transform-origin: 0 0;
1114
1115
  }
1115
-
1116
-
1117
- .xy-flow__node {
1118
- position: absolute;
1119
- user-select: none;
1120
- pointer-events: all;
1121
- transform-origin: 0 0;
1122
- box-sizing: border-box;
1123
- cursor: default;
1116
+
1117
+
1118
+ .xy-flow__node {
1119
+ position: absolute;
1120
+ user-select: none;
1121
+ pointer-events: all;
1122
+ transform-origin: 0 0;
1123
+ box-sizing: border-box;
1124
+ cursor: default;
1124
1125
  }
1125
-
1126
+
1126
1127
  .xy-flow__node.selectable { cursor: pointer; }
1127
-
1128
- .xy-flow__node.selectable:hover {
1129
- box-shadow: var(--xy-node-boxshadow-hover, var(--xy-node-boxshadow-hover-default));
1128
+
1129
+ .xy-flow__node.connection-target {
1130
+ outline: 2px dashed var(--xy-connection-target-outline-color, #3b82f6);
1131
+ outline-offset: 4px;
1130
1132
  }
1131
-
1132
- .xy-flow__node.selectable.selected,
1133
- .xy-flow__node.selectable:focus,
1134
- .xy-flow__node.selectable:focus-visible {
1135
- box-shadow: var(--xy-node-boxshadow-selected, var(--xy-node-boxshadow-selected-default));
1136
- outline: none;
1133
+
1134
+ .xy-flow__node.selectable:hover {
1135
+ box-shadow: var(--xy-node-boxshadow-hover, var(--xy-node-boxshadow-hover-default));
1137
1136
  }
1138
-
1139
-
1140
- .xy-flow__node-input,
1141
- .xy-flow__node-default,
1142
- .xy-flow__node-output,
1143
- .xy-flow__node-group {
1144
- padding: 10px;
1145
- border-radius: var(--xy-node-border-radius, var(--xy-node-border-radius-default));
1146
- width: 150px;
1147
- font-size: 12px;
1148
- color: var(--xy-node-color, var(--xy-node-color-default));
1149
- text-align: center;
1150
- border: var(--xy-node-border, var(--xy-node-border-default));
1151
- background-color: var(--xy-node-background-color, var(--xy-node-background-color-default));
1137
+
1138
+ .xy-flow__node.selectable.selected,
1139
+ .xy-flow__node.selectable:focus,
1140
+ .xy-flow__node.selectable:focus-visible {
1141
+ box-shadow: var(--xy-node-boxshadow-selected, var(--xy-node-boxshadow-selected-default));
1142
+ outline: none;
1152
1143
  }
1153
-
1154
-
1155
- .xy-flow__node-group {
1156
- background-color: var(--xy-node-group-background-color, var(--xy-node-group-background-color-default));
1144
+
1145
+
1146
+ .xy-flow__node-input,
1147
+ .xy-flow__node-default,
1148
+ .xy-flow__node-output,
1149
+ .xy-flow__node-group {
1150
+ padding: 10px;
1151
+ border-radius: var(--xy-node-border-radius, var(--xy-node-border-radius-default));
1152
+ width: 150px;
1153
+ font-size: 12px;
1154
+ color: var(--xy-node-color, var(--xy-node-color-default));
1155
+ text-align: center;
1156
+ border: var(--xy-node-border, var(--xy-node-border-default));
1157
+ background-color: var(--xy-node-background-color, var(--xy-node-background-color-default));
1157
1158
  }
1158
-
1159
-
1160
- .xy-flow__nodesselection {
1161
- z-index: 3;
1162
- transform-origin: left top;
1163
- pointer-events: none;
1159
+
1160
+
1161
+ .xy-flow__node-group {
1162
+ background-color: var(--xy-node-group-background-color, var(--xy-node-group-background-color-default));
1164
1163
  }
1165
-
1166
- .xy-flow__nodesselection-rect {
1167
- position: absolute;
1168
- pointer-events: all;
1169
- cursor: grab;
1164
+
1165
+
1166
+ .xy-flow__nodesselection {
1167
+ z-index: 3;
1168
+ transform-origin: left top;
1169
+ pointer-events: none;
1170
1170
  }
1171
-
1172
-
1173
- /* ── Handles ────────────────────────────────────────────────────── */
1174
- .xy-flow__handle {
1175
- position: absolute;
1176
- pointer-events: none;
1177
- min-width: 5px;
1178
- min-height: 5px;
1179
- width: 8px;
1180
- height: 8px;
1181
- background-color: var(--xy-handle-background-color, var(--xy-handle-background-color-default));
1182
- border: 1px solid var(--xy-handle-border-color, var(--xy-handle-border-color-default));
1183
- border-radius: 100%;
1171
+
1172
+ .xy-flow__nodesselection-rect {
1173
+ position: absolute;
1174
+ pointer-events: all;
1175
+ cursor: grab;
1184
1176
  }
1185
-
1177
+
1178
+
1179
+ /* ── Handles ────────────────────────────────────────────────────── */
1180
+ .xy-flow__handle {
1181
+ position: absolute;
1182
+ pointer-events: none;
1183
+ min-width: 5px;
1184
+ min-height: 5px;
1185
+ width: 8px;
1186
+ height: 8px;
1187
+ background-color: var(--xy-handle-background-color, var(--xy-handle-background-color-default));
1188
+ border: 1px solid var(--xy-handle-border-color, var(--xy-handle-border-color-default));
1189
+ border-radius: 100%;
1190
+ }
1191
+
1186
1192
  .xy-flow__handle.connectingfrom { pointer-events: all; }
1187
-
1193
+
1188
1194
  .xy-flow__handle.connectionindicator { pointer-events: all; }
1189
-
1195
+
1190
1196
  .xy-flow__handle-bottom { top: auto; left: 50%; bottom: 0; transform: translate(-50%, 50%); }
1191
-
1197
+
1192
1198
  .xy-flow__handle-top { top: 0; left: 50%; transform: translate(-50%, -50%); }
1193
-
1199
+
1194
1200
  .xy-flow__handle-left { top: 50%; left: 0; transform: translate(-50%, -50%); }
1195
-
1201
+
1196
1202
  .xy-flow__handle-right { top: 50%; right: 0; transform: translate(50%, -50%); }
1197
-
1198
-
1199
- /* ── Selection box ──────────────────────────────────────────────── */
1200
- .xy-flow__selection,
1201
- .xy-flow__nodesselection-rect {
1202
- background: var(--xy-selection-background-color, var(--xy-selection-background-color-default));
1203
- border: var(--xy-selection-border, var(--xy-selection-border-default));
1203
+
1204
+
1205
+ /* ── Selection box ──────────────────────────────────────────────── */
1206
+ .xy-flow__selection,
1207
+ .xy-flow__nodesselection-rect {
1208
+ background: var(--xy-selection-background-color, var(--xy-selection-background-color-default));
1209
+ border: var(--xy-selection-border, var(--xy-selection-border-default));
1204
1210
  }
1205
-
1206
- .xy-flow__nodesselection-rect:focus,
1211
+
1212
+ .xy-flow__nodesselection-rect:focus,
1207
1213
  .xy-flow__nodesselection-rect:focus-visible { outline: none; }
1208
-
1209
-
1210
- /* ── Panels ─────────────────────────────────────────────────────── */
1211
- .xy-flow__panel {
1212
- position: absolute;
1213
- z-index: 5;
1214
- margin: 15px;
1214
+
1215
+
1216
+ /* ── Panels ─────────────────────────────────────────────────────── */
1217
+ .xy-flow__panel {
1218
+ position: absolute;
1219
+ z-index: 5;
1220
+ margin: 15px;
1215
1221
  }
1216
-
1222
+
1217
1223
  .xy-flow__panel.top { top: 0; }
1218
-
1224
+
1219
1225
  .xy-flow__panel.bottom { bottom: 0; }
1220
-
1226
+
1221
1227
  .xy-flow__panel.left { left: 0; }
1222
-
1228
+
1223
1229
  .xy-flow__panel.right { right: 0; }
1224
-
1225
- .xy-flow__panel.top.center, .xy-flow__panel.bottom.center {
1226
- left: 50%;
1227
- transform: translateX(-15px) translateX(-50%);
1230
+
1231
+ .xy-flow__panel.top.center, .xy-flow__panel.bottom.center {
1232
+ left: 50%;
1233
+ transform: translateX(-15px) translateX(-50%);
1228
1234
  }
1229
-
1230
- .xy-flow__panel.left.center, .xy-flow__panel.right.center {
1231
- top: 50%;
1232
- transform: translateY(-15px) translateY(-50%);
1235
+
1236
+ .xy-flow__panel.left.center, .xy-flow__panel.right.center {
1237
+ top: 50%;
1238
+ transform: translateY(-15px) translateY(-50%);
1233
1239
  }
1234
-
1235
-
1240
+
1241
+
1236
1242
  .xy-flow__pane.selection .xy-flow__panel { pointer-events: none; }
1237
-
1238
-
1239
- /* ── Controls ───────────────────────────────────────────────────── */
1240
- .xy-flow__controls {
1241
- display: flex;
1242
- flex-direction: column;
1243
- box-shadow: var(--xy-controls-box-shadow, var(--xy-controls-box-shadow-default));
1243
+
1244
+
1245
+ /* ── Controls ───────────────────────────────────────────────────── */
1246
+ .xy-flow__controls {
1247
+ display: flex;
1248
+ flex-direction: column;
1249
+ box-shadow: var(--xy-controls-box-shadow, var(--xy-controls-box-shadow-default));
1244
1250
  }
1245
-
1246
- .xy-flow__controls-button {
1247
- display: flex;
1248
- justify-content: center;
1249
- align-items: center;
1250
- height: 26px;
1251
- width: 26px;
1252
- padding: 4px;
1253
- border: none;
1254
- background: var(--xy-controls-button-background-color, var(--xy-controls-button-background-color-default));
1255
- border-bottom: 1px solid var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default));
1256
- color: var(--xy-controls-button-color, var(--xy-controls-button-color-default));
1257
- cursor: pointer;
1258
- user-select: none;
1251
+
1252
+ .xy-flow__controls-button {
1253
+ display: flex;
1254
+ justify-content: center;
1255
+ align-items: center;
1256
+ height: 26px;
1257
+ width: 26px;
1258
+ padding: 4px;
1259
+ border: none;
1260
+ background: var(--xy-controls-button-background-color, var(--xy-controls-button-background-color-default));
1261
+ border-bottom: 1px solid var(--xy-controls-button-border-color, var(--xy-controls-button-border-color-default));
1262
+ color: var(--xy-controls-button-color, var(--xy-controls-button-color-default));
1263
+ cursor: pointer;
1264
+ user-select: none;
1259
1265
  }
1260
-
1261
- .xy-flow__controls-button:hover {
1262
- background: var(--xy-controls-button-background-color-hover, var(--xy-controls-button-background-color-hover-default));
1266
+
1267
+ .xy-flow__controls-button:hover {
1268
+ background: var(--xy-controls-button-background-color-hover, var(--xy-controls-button-background-color-hover-default));
1263
1269
  }
1264
-
1270
+
1265
1271
  .xy-flow__controls-button:disabled { pointer-events: none; }
1266
-
1272
+
1267
1273
  .xy-flow__controls-button:disabled svg { fill-opacity: 0.4; }
1268
-
1269
- .xy-flow__controls-button svg {
1270
- width: 100%;
1271
- max-width: 12px;
1272
- max-height: 12px;
1273
- fill: currentColor;
1274
+
1275
+ .xy-flow__controls-button svg {
1276
+ width: 100%;
1277
+ max-width: 12px;
1278
+ max-height: 12px;
1279
+ fill: currentColor;
1274
1280
  }
1275
-
1281
+
1276
1282
  .xy-flow__controls-button:last-child { border-bottom: none; }
1277
-
1278
-
1279
- /* ── Minimap ────────────────────────────────────────────────────── */
1280
- .xy-flow__minimap {
1281
- background: var(--xy-minimap-background-color, var(--xy-minimap-background-color-default));
1283
+
1284
+
1285
+ /* ── Minimap ────────────────────────────────────────────────────── */
1286
+ .xy-flow__minimap {
1287
+ background: var(--xy-minimap-background-color, var(--xy-minimap-background-color-default));
1282
1288
  }
1283
-
1289
+
1284
1290
  .xy-flow__minimap-svg { display: block; }
1285
-
1286
- .xy-flow__minimap-mask {
1287
- fill: var(--xy-minimap-mask-background-color, var(--xy-minimap-mask-background-color-default));
1288
- stroke: var(--xy-minimap-mask-stroke-color, var(--xy-minimap-mask-stroke-color-default));
1289
- stroke-width: var(--xy-minimap-mask-stroke-width, var(--xy-minimap-mask-stroke-width-default));
1291
+
1292
+ .xy-flow__minimap-mask {
1293
+ fill: var(--xy-minimap-mask-background-color, var(--xy-minimap-mask-background-color-default));
1294
+ stroke: var(--xy-minimap-mask-stroke-color, var(--xy-minimap-mask-stroke-color-default));
1295
+ stroke-width: var(--xy-minimap-mask-stroke-width, var(--xy-minimap-mask-stroke-width-default));
1290
1296
  }
1291
-
1292
- .xy-flow__minimap-node {
1293
- fill: var(--xy-minimap-node-background-color, var(--xy-minimap-node-background-color-default));
1294
- stroke: var(--xy-minimap-node-stroke-color, var(--xy-minimap-node-stroke-color-default));
1295
- stroke-width: var(--xy-minimap-node-stroke-width, var(--xy-minimap-node-stroke-width-default));
1297
+
1298
+ .xy-flow__minimap-node {
1299
+ fill: var(--xy-minimap-node-background-color, var(--xy-minimap-node-background-color-default));
1300
+ stroke: var(--xy-minimap-node-stroke-color, var(--xy-minimap-node-stroke-color-default));
1301
+ stroke-width: var(--xy-minimap-node-stroke-width, var(--xy-minimap-node-stroke-width-default));
1296
1302
  }
1297
-
1298
-
1299
- /* ── Background ─────────────────────────────────────────────────── */
1303
+
1304
+
1305
+ /* ── Background ─────────────────────────────────────────────────── */
1300
1306
  .xy-flow__background { pointer-events: none; z-index: -1; }
1301
-
1302
- .xy-flow__background-pattern.dots {
1303
- fill: var(--xy-background-pattern-color, var(--xy-background-pattern-dots-color-default));
1307
+
1308
+ .xy-flow__background-pattern.dots {
1309
+ fill: var(--xy-background-pattern-color, var(--xy-background-pattern-dots-color-default));
1304
1310
  }
1305
-
1306
- .xy-flow__background-pattern.lines {
1307
- stroke: var(--xy-background-pattern-color, var(--xy-background-pattern-lines-color-default));
1311
+
1312
+ .xy-flow__background-pattern.lines {
1313
+ stroke: var(--xy-background-pattern-color, var(--xy-background-pattern-lines-color-default));
1308
1314
  }
1309
-
1310
- .xy-flow__background-pattern.cross {
1311
- stroke: var(--xy-background-pattern-color, var(--xy-background-pattern-cross-color-default));
1315
+
1316
+ .xy-flow__background-pattern.cross {
1317
+ stroke: var(--xy-background-pattern-color, var(--xy-background-pattern-cross-color-default));
1312
1318
  }
1313
-
1314
-
1315
- /* ── Edge labels / portals ──────────────────────────────────────── */
1316
- .ng-flow__edge-textbg {
1317
- fill: var(--xy-edge-label-background-color, var(--xy-edge-label-background-color-default));
1319
+
1320
+
1321
+ /* ── Edge labels / portals ──────────────────────────────────────── */
1322
+ .ng-flow__edge-textbg {
1323
+ fill: var(--xy-edge-label-background-color, var(--xy-edge-label-background-color-default));
1318
1324
  }
1319
-
1320
- .ng-flow__edge-text {
1321
- fill: var(--xy-edge-label-color, var(--xy-edge-label-color-default));
1325
+
1326
+ .ng-flow__edge-text {
1327
+ fill: var(--xy-edge-label-color, var(--xy-edge-label-color-default));
1322
1328
  }
1323
-
1324
-
1325
- .xy-flow__edgelabel-renderer {
1326
- position: absolute;
1327
- width: 100%;
1328
- height: 100%;
1329
- pointer-events: none;
1330
- user-select: none;
1331
- left: 0;
1332
- top: 0;
1329
+
1330
+
1331
+ .xy-flow__edgelabel-renderer {
1332
+ position: absolute;
1333
+ width: 100%;
1334
+ height: 100%;
1335
+ pointer-events: none;
1336
+ user-select: none;
1337
+ left: 0;
1338
+ top: 0;
1333
1339
  }
1334
-
1335
-
1336
- .xy-flow__viewport-portal {
1337
- position: absolute;
1338
- width: 100%;
1339
- height: 100%;
1340
- left: 0;
1341
- top: 0;
1342
- user-select: none;
1340
+
1341
+
1342
+ .xy-flow__viewport-portal {
1343
+ position: absolute;
1344
+ width: 100%;
1345
+ height: 100%;
1346
+ left: 0;
1347
+ top: 0;
1348
+ user-select: none;
1343
1349
  }
1344
-
1345
-
1346
- /* ── Edge reconnect anchors ─────────────────────────────────────── */
1347
- .xy-flow__edgeupdater {
1348
- cursor: move;
1349
- pointer-events: all;
1350
+
1351
+
1352
+ /* ── Edge reconnect anchors ─────────────────────────────────────── */
1353
+ .xy-flow__edgeupdater {
1354
+ cursor: move;
1355
+ pointer-events: all;
1350
1356
  }
1351
-
1352
-
1353
- /* ── Attribution ────────────────────────────────────────────────── */
1354
- .xy-flow__attribution {
1355
- font-size: 10px;
1356
- background: var(--xy-attribution-background-color, var(--xy-attribution-background-color-default));
1357
- padding: 2px 3px;
1358
- margin: 0;
1357
+
1358
+
1359
+ /* ── Attribution ────────────────────────────────────────────────── */
1360
+ .xy-flow__attribution {
1361
+ font-size: 10px;
1362
+ background: var(--xy-attribution-background-color, var(--xy-attribution-background-color-default));
1363
+ padding: 2px 3px;
1364
+ margin: 0;
1359
1365
  }
1360
-
1366
+
1361
1367
  .xy-flow__attribution a { text-decoration: none; color: #999; }
1362
-
1363
-
1364
- /*
1365
- * ── Cursor overrides ───────────────────────────────────────────────
1366
- *
1367
- * Native CSS cursors (grab, grabbing, crosshair) render as invisible white
1368
- * on some Windows setups with a white pointer scheme. We ship custom SVG
1369
- * cursors (white fill + black outline) that always work on any OS/theme,
1370
- * with native cursors as fallback.
1371
- */
1372
-
1373
- /* Open hand — pane & draggable nodes */
1374
- .xy-flow__pane.draggable,
1375
- .xy-flow__node.draggable {
1376
- cursor: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='22' height='22'%3E%3Cg fill='white' stroke='black' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6.5 10V5.5a1.25 1.25 0 0 1 2.5 0V9'/%3E%3Cpath d='M9 6V3.5a1.25 1.25 0 0 1 2.5 0V9'/%3E%3Cpath d='M11.5 5.5V4a1.25 1.25 0 0 1 2.5 0V9'/%3E%3Cpath d='M14 6.5V5.5a1.25 1.25 0 0 1 2.5 0v5a5 5 0 0 1-5 5h-1a5 5 0 0 1-4.2-2.3L4 9.8a1.25 1.25 0 0 1 1.8-1.5L6.5 10'/%3E%3C/g%3E%3C/svg%3E") 11 4, grab;
1377
- pointer-events: all;
1368
+
1369
+
1370
+ /*
1371
+ * ── Cursor overrides ───────────────────────────────────────────────
1372
+ *
1373
+ * Native CSS cursors (grab, grabbing, crosshair) render as invisible white
1374
+ * on some Windows setups with a white pointer scheme. We ship custom SVG
1375
+ * cursors (white fill + black outline) that always work on any OS/theme,
1376
+ * with native cursors as fallback.
1377
+ */
1378
+
1379
+ /* Open hand — pane & draggable nodes */
1380
+ .xy-flow__pane.draggable,
1381
+ .xy-flow__node.draggable {
1382
+ cursor: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='22' height='22'%3E%3Cg fill='white' stroke='black' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6.5 10V5.5a1.25 1.25 0 0 1 2.5 0V9'/%3E%3Cpath d='M9 6V3.5a1.25 1.25 0 0 1 2.5 0V9'/%3E%3Cpath d='M11.5 5.5V4a1.25 1.25 0 0 1 2.5 0V9'/%3E%3Cpath d='M14 6.5V5.5a1.25 1.25 0 0 1 2.5 0v5a5 5 0 0 1-5 5h-1a5 5 0 0 1-4.2-2.3L4 9.8a1.25 1.25 0 0 1 1.8-1.5L6.5 10'/%3E%3C/g%3E%3C/svg%3E") 11 4, grab;
1383
+ pointer-events: all;
1378
1384
  }
1379
-
1380
-
1381
- /* Closed hand — while dragging */
1382
- .xy-flow__pane.dragging,
1383
- .xy-flow__node.draggable.dragging {
1384
- cursor: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='22' height='22'%3E%3Cg fill='white' stroke='black' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6.5 11V10c0-.7.6-1.2 1.3-1.2s1.2.5 1.2 1.2'/%3E%3Cpath d='M9 9.5V9c0-.7.6-1.2 1.3-1.2S11.5 8.3 11.5 9'/%3E%3Cpath d='M11.5 9V8.5c0-.7.6-1.2 1.3-1.2s1.2.5 1.2 1.2'/%3E%3Cpath d='M14 9v-.5c0-.7.6-1.2 1.3-1.2s1.2.5 1.2 1.2v4a5 5 0 0 1-5 5h-1a5 5 0 0 1-4.2-2.3L4 11.8a1.25 1.25 0 0 1 1.8-1.5L6.5 11'/%3E%3C/g%3E%3C/svg%3E") 11 8, grabbing;
1385
+
1386
+
1387
+ /* Closed hand — while dragging */
1388
+ .xy-flow__pane.dragging,
1389
+ .xy-flow__node.draggable.dragging {
1390
+ cursor: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='22' height='22'%3E%3Cg fill='white' stroke='black' stroke-width='1.3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6.5 11V10c0-.7.6-1.2 1.3-1.2s1.2.5 1.2 1.2'/%3E%3Cpath d='M9 9.5V9c0-.7.6-1.2 1.3-1.2S11.5 8.3 11.5 9'/%3E%3Cpath d='M11.5 9V8.5c0-.7.6-1.2 1.3-1.2s1.2.5 1.2 1.2'/%3E%3Cpath d='M14 9v-.5c0-.7.6-1.2 1.3-1.2s1.2.5 1.2 1.2v4a5 5 0 0 1-5 5h-1a5 5 0 0 1-4.2-2.3L4 11.8a1.25 1.25 0 0 1 1.8-1.5L6.5 11'/%3E%3C/g%3E%3C/svg%3E") 11 8, grabbing;
1385
1391
  }
1386
-
1387
-
1388
- /* Crosshair — connection handles */
1389
- .xy-flow__handle.connectionindicator {
1390
- cursor: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='19' height='19'%3E%3Cg stroke='black' stroke-width='1.3'%3E%3Cline x1='9.5' y1='1' x2='9.5' y2='6' stroke='white' stroke-width='3'/%3E%3Cline x1='9.5' y1='13' x2='9.5' y2='18' stroke='white' stroke-width='3'/%3E%3Cline x1='1' y1='9.5' x2='6' y2='9.5' stroke='white' stroke-width='3'/%3E%3Cline x1='13' y1='9.5' x2='18' y2='9.5' stroke='white' stroke-width='3'/%3E%3Cline x1='9.5' y1='1' x2='9.5' y2='6'/%3E%3Cline x1='9.5' y1='13' x2='9.5' y2='18'/%3E%3Cline x1='1' y1='9.5' x2='6' y2='9.5'/%3E%3Cline x1='13' y1='9.5' x2='18' y2='9.5'/%3E%3C/g%3E%3C/svg%3E") 9 9, crosshair;
1392
+
1393
+
1394
+ /* Crosshair — connection handles */
1395
+ .xy-flow__handle.connectionindicator {
1396
+ cursor: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='19' height='19'%3E%3Cg stroke='black' stroke-width='1.3'%3E%3Cline x1='9.5' y1='1' x2='9.5' y2='6' stroke='white' stroke-width='3'/%3E%3Cline x1='9.5' y1='13' x2='9.5' y2='18' stroke='white' stroke-width='3'/%3E%3Cline x1='1' y1='9.5' x2='6' y2='9.5' stroke='white' stroke-width='3'/%3E%3Cline x1='13' y1='9.5' x2='18' y2='9.5' stroke='white' stroke-width='3'/%3E%3Cline x1='9.5' y1='1' x2='9.5' y2='6'/%3E%3Cline x1='9.5' y1='13' x2='9.5' y2='18'/%3E%3Cline x1='1' y1='9.5' x2='6' y2='9.5'/%3E%3Cline x1='13' y1='9.5' x2='18' y2='9.5'/%3E%3C/g%3E%3C/svg%3E") 9 9, crosshair;
1391
1397
  }
1392
-
1398
+