@deck.gl-community/graph-layers 9.2.0-beta.6 → 9.2.5

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 (131) hide show
  1. package/dist/_deprecated/old-constants.d.ts.map +1 -1
  2. package/dist/_deprecated/old-constants.js.map +1 -1
  3. package/dist/core/graph-engine.d.ts +3 -2
  4. package/dist/core/graph-engine.d.ts.map +1 -1
  5. package/dist/core/graph-engine.js +1 -0
  6. package/dist/core/graph-engine.js.map +1 -1
  7. package/dist/core/graph-layout.d.ts.map +1 -1
  8. package/dist/core/graph-layout.js.map +1 -1
  9. package/dist/core/interaction-manager.d.ts.map +1 -1
  10. package/dist/core/interaction-manager.js.map +1 -1
  11. package/dist/graph/arrow-graph.d.ts.map +1 -1
  12. package/dist/graph/arrow-graph.js.map +1 -1
  13. package/dist/graph/classic-graph.d.ts.map +1 -1
  14. package/dist/graph/classic-graph.js +1 -3
  15. package/dist/graph/classic-graph.js.map +1 -1
  16. package/dist/graph/functions/arrow-utils.d.ts.map +1 -1
  17. package/dist/graph/functions/arrow-utils.js +5 -3
  18. package/dist/graph/functions/arrow-utils.js.map +1 -1
  19. package/dist/graph/functions/create-graph-from-data.d.ts.map +1 -1
  20. package/dist/graph/functions/create-graph-from-data.js.map +1 -1
  21. package/dist/graph/graph-normalization.d.ts.map +1 -1
  22. package/dist/graph/graph-normalization.js.map +1 -1
  23. package/dist/graph-data/arrow-graph-data-builder.d.ts.map +1 -1
  24. package/dist/graph-data/arrow-graph-data-builder.js.map +1 -1
  25. package/dist/graph-data/graph-data-builder.d.ts.map +1 -1
  26. package/dist/graph-data/plain-graph-data-builder.d.ts.map +1 -1
  27. package/dist/graph-style-schema.cdn.js +1 -1
  28. package/dist/graph-style-schema.json +1 -1
  29. package/dist/index.cjs +332 -224
  30. package/dist/index.cjs.map +4 -4
  31. package/dist/index.d.ts +3 -3
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +2 -2
  34. package/dist/index.js.map +1 -1
  35. package/dist/layers/common-layers/grid-layer/grid-layer.d.ts.map +1 -1
  36. package/dist/layers/common-layers/grid-layer/grid-layer.js +6 -16
  37. package/dist/layers/common-layers/grid-layer/grid-layer.js.map +1 -1
  38. package/dist/layers/edge-attachment-helper.d.ts.map +1 -1
  39. package/dist/layers/edge-attachment-helper.js +1 -3
  40. package/dist/layers/edge-attachment-helper.js.map +1 -1
  41. package/dist/layers/edge-layer.js +4 -4
  42. package/dist/layers/edge-layer.js.map +1 -1
  43. package/dist/layers/edge-layers/arrow-2d-geometry.js +1 -8
  44. package/dist/layers/edge-layers/arrow-2d-geometry.js.map +1 -1
  45. package/dist/layers/graph-layer.d.ts +4 -3
  46. package/dist/layers/graph-layer.d.ts.map +1 -1
  47. package/dist/layers/graph-layer.js +20 -17
  48. package/dist/layers/graph-layer.js.map +1 -1
  49. package/dist/layouts/d3-dag/collapsable-d3-dag-layout.d.ts.map +1 -1
  50. package/dist/layouts/d3-dag/collapsable-d3-dag-layout.js.map +1 -1
  51. package/dist/layouts/d3-dag/d3-dag-layout.d.ts.map +1 -1
  52. package/dist/layouts/d3-dag/d3-dag-layout.js +9 -2
  53. package/dist/layouts/d3-dag/d3-dag-layout.js.map +1 -1
  54. package/dist/layouts/experimental/radial-layout.d.ts.map +1 -1
  55. package/dist/layouts/experimental/radial-layout.js.map +1 -1
  56. package/dist/layouts/simple-layout.d.ts.map +1 -1
  57. package/dist/layouts/simple-layout.js +4 -1
  58. package/dist/layouts/simple-layout.js.map +1 -1
  59. package/dist/loaders/dot-graph-loader.d.ts.map +1 -1
  60. package/dist/loaders/dot-graph-loader.js +10 -3
  61. package/dist/loaders/dot-graph-loader.js.map +1 -1
  62. package/dist/loaders/json-graph-loader.d.ts.map +1 -1
  63. package/dist/loaders/json-graph-loader.js +2 -2
  64. package/dist/loaders/json-graph-loader.js.map +1 -1
  65. package/dist/loaders/parsers/parse-json-graph.js +2 -1
  66. package/dist/loaders/parsers/parse-json-graph.js.map +1 -1
  67. package/dist/style/graph-layer-stylesheet.d.ts +14 -5
  68. package/dist/style/graph-layer-stylesheet.d.ts.map +1 -1
  69. package/dist/style/graph-layer-stylesheet.js +14 -8
  70. package/dist/style/graph-layer-stylesheet.js.map +1 -1
  71. package/dist/style/graph-style-engine.d.ts +4 -4
  72. package/dist/style/graph-style-engine.d.ts.map +1 -1
  73. package/dist/style/graph-style-engine.js +7 -5
  74. package/dist/style/graph-style-engine.js.map +1 -1
  75. package/dist/style/graph-stylesheet-schema.d.ts +13211 -0
  76. package/dist/style/graph-stylesheet-schema.d.ts.map +1 -0
  77. package/dist/style/graph-stylesheet-schema.js +346 -0
  78. package/dist/style/graph-stylesheet-schema.js.map +1 -0
  79. package/dist/style/style-property.d.ts.map +1 -1
  80. package/dist/style/style-property.js +17 -5
  81. package/dist/style/style-property.js.map +1 -1
  82. package/dist/style/stylesheet-engine.d.ts.map +1 -1
  83. package/dist/style/stylesheet-engine.js +1 -1
  84. package/dist/style/stylesheet-engine.js.map +1 -1
  85. package/dist/utils/collapsed-chains.d.ts.map +1 -1
  86. package/dist/utils/collapsed-chains.js.map +1 -1
  87. package/dist/utils/node-boundary.d.ts.map +1 -1
  88. package/dist/utils/node-boundary.js +1 -1
  89. package/dist/utils/node-boundary.js.map +1 -1
  90. package/dist/utils/rank-grid.d.ts.map +1 -1
  91. package/dist/utils/rank-grid.js +5 -2
  92. package/dist/utils/rank-grid.js.map +1 -1
  93. package/package.json +8 -8
  94. package/src/_deprecated/old-constants.ts +12 -6
  95. package/src/core/graph-engine.ts +7 -2
  96. package/src/core/graph-layout.ts +2 -6
  97. package/src/core/interaction-manager.ts +2 -1
  98. package/src/graph/arrow-graph.ts +17 -10
  99. package/src/graph/classic-graph.ts +8 -5
  100. package/src/graph/functions/arrow-utils.ts +8 -4
  101. package/src/graph/functions/create-graph-from-data.ts +2 -2
  102. package/src/graph/graph-normalization.ts +8 -2
  103. package/src/graph-data/arrow-graph-data-builder.ts +6 -3
  104. package/src/graph-data/graph-data-builder.ts +1 -1
  105. package/src/graph-data/plain-graph-data-builder.ts +1 -1
  106. package/src/index.ts +35 -17
  107. package/src/layers/common-layers/grid-layer/grid-layer.ts +26 -19
  108. package/src/layers/edge-attachment-helper.ts +54 -45
  109. package/src/layers/edge-layer.ts +4 -4
  110. package/src/layers/edge-layers/arrow-2d-geometry.ts +1 -8
  111. package/src/layers/graph-layer.ts +109 -99
  112. package/src/layouts/d3-dag/collapsable-d3-dag-layout.ts +14 -7
  113. package/src/layouts/d3-dag/d3-dag-layout.ts +31 -19
  114. package/src/layouts/experimental/radial-layout.ts +4 -1
  115. package/src/layouts/simple-layout.ts +6 -4
  116. package/src/loaders/dot-graph-loader.ts +19 -7
  117. package/src/loaders/json-graph-loader.ts +3 -5
  118. package/src/loaders/parsers/parse-json-graph.ts +2 -1
  119. package/src/style/graph-layer-stylesheet.ts +26 -19
  120. package/src/style/graph-style-engine.ts +30 -17
  121. package/src/style/graph-stylesheet-schema.ts +490 -0
  122. package/src/style/style-property.ts +26 -11
  123. package/src/style/stylesheet-engine.ts +44 -29
  124. package/src/utils/collapsed-chains.ts +6 -2
  125. package/src/utils/node-boundary.ts +2 -3
  126. package/src/utils/rank-grid.ts +31 -17
  127. package/dist/style/graph-stylesheet.schema.d.ts +0 -311
  128. package/dist/style/graph-stylesheet.schema.d.ts.map +0 -1
  129. package/dist/style/graph-stylesheet.schema.js +0 -238
  130. package/dist/style/graph-stylesheet.schema.js.map +0 -1
  131. package/src/style/graph-stylesheet.schema.ts +0 -344
@@ -6,7 +6,7 @@
6
6
  import * as arrow from 'apache-arrow';
7
7
 
8
8
  import type {EdgeState, NodeState} from '../core/constants';
9
- import type {GraphEdgeData, GraphNodeData,ArrowGraphData} from './graph-data';
9
+ import type {GraphEdgeData, GraphNodeData, ArrowGraphData} from './graph-data';
10
10
  import {
11
11
  cloneRecord,
12
12
  normalizeEdgeState,
@@ -130,7 +130,11 @@ export class ArrowGraphDataBuilder {
130
130
  builder.append(value);
131
131
  }
132
132
 
133
- private appendJson(builders: ColumnBuilderMap, columnName: string, value: Record<string, unknown>): void {
133
+ private appendJson(
134
+ builders: ColumnBuilderMap,
135
+ columnName: string,
136
+ value: Record<string, unknown>
137
+ ): void {
134
138
  const builder = this.getOrCreateBuilder(builders, columnName, () =>
135
139
  arrow.makeBuilder({type: new arrow.Utf8(), nullValues: [null, undefined]})
136
140
  );
@@ -162,4 +166,3 @@ function tableFromBuilders(builders: ColumnBuilderMap): arrow.Table {
162
166
 
163
167
  return arrow.tableFromArrays(columns);
164
168
  }
165
-
@@ -1,4 +1,4 @@
1
- import type { GraphData } from "./graph-data";
1
+ import type {GraphData} from './graph-data';
2
2
 
3
3
  export interface GraphDataBuilder {
4
4
  addNode(node: Record<string, unknown>): number;
@@ -3,7 +3,7 @@
3
3
  // Copyright (c) vis.gl contributors
4
4
 
5
5
  import type {PlainGraphData, GraphEdgeData, GraphNodeData} from './graph-data';
6
- import { GraphDataBuilder } from './graph-data-builder';
6
+ import {GraphDataBuilder} from './graph-data-builder';
7
7
  import {cloneRecord, normalizeVersion} from '../graph/graph-normalization';
8
8
 
9
9
  export type PlainGraphDataBuilderOptions = {
package/src/index.ts CHANGED
@@ -4,14 +4,19 @@
4
4
 
5
5
  // Graph Data - output from loaders, input to writers
6
6
 
7
- export type {GraphData, PlainGraphData, ArrowGraphData /* , GraphNodeData, GraphEdgeData */} from './graph-data/graph-data';
8
- export type {GraphDataBuilder /* , GraphDataBuilderOptions */} from './graph-data/graph-data-builder';
7
+ export type {
8
+ GraphData,
9
+ PlainGraphData,
10
+ ArrowGraphData /* , GraphNodeData, GraphEdgeData */
11
+ } from './graph-data/graph-data';
12
+ export type {
13
+ GraphDataBuilder /* , GraphDataBuilderOptions */
14
+ } from './graph-data/graph-data-builder';
9
15
  export {
10
16
  ArrowGraphDataBuilder,
11
17
  type ArrowGraphDataBuilderOptions
12
18
  } from './graph-data/arrow-graph-data-builder';
13
19
 
14
-
15
20
  // core - Graph representation and layout
16
21
  export type {Graph, NodeInterface, EdgeInterface} from './graph/graph';
17
22
  export {Node} from './graph/node';
@@ -36,11 +41,7 @@ export {ArrowGraph} from './graph/arrow-graph';
36
41
  export {GraphEngine} from './core/graph-engine';
37
42
 
38
43
  // graph-layers layouts
39
- export type {
40
- GraphLayoutProps,
41
- GraphLayoutState,
42
- GraphLayoutEventDetail
43
- } from './core/graph-layout';
44
+ export type {GraphLayoutProps, GraphLayoutState, GraphLayoutEventDetail} from './core/graph-layout';
44
45
  export {GraphLayout} from './core/graph-layout';
45
46
 
46
47
  export {SimpleLayout} from './layouts/simple-layout';
@@ -52,18 +53,30 @@ export {RadialLayout} from './layouts/experimental/radial-layout';
52
53
  export {ForceMultiGraphLayout} from './layouts/experimental/force-multi-graph-layout';
53
54
  export {HivePlotLayout} from './layouts/experimental/hive-plot-layout';
54
55
 
55
- export type {Marker, NodeState, NodeType, EdgeType, EdgeDecoratorType, LayoutState} from './core/constants';
56
+ export type {
57
+ Marker,
58
+ NodeState,
59
+ NodeType,
60
+ EdgeType,
61
+ EdgeDecoratorType,
62
+ LayoutState
63
+ } from './core/constants';
56
64
 
57
65
  // deck.gl components
58
66
  export {GraphLayer} from './layers/graph-layer';
59
67
  export type {RankGridConfig} from './layers/graph-layer';
60
68
  export {EdgeLayer} from './layers/edge-layer';
61
- export {GridLayer, type GridLayerProps, type GridLineDatum} from './layers/common-layers/grid-layer/grid-layer';
69
+ export {
70
+ GridLayer,
71
+ type GridLayerProps,
72
+ type GridLineDatum
73
+ } from './layers/common-layers/grid-layer/grid-layer';
62
74
  export {StylesheetEngine} from './style/stylesheet-engine';
63
75
  export {GraphStylesheetEngine, GraphStyleEngine} from './style/graph-style-engine';
64
76
  export type {
65
77
  GraphStylesheet,
66
- GraphStylesheetInput,
78
+ GraphStyleRule,
79
+ GraphStyleRuleParsed,
67
80
  GraphStylesheetParsed,
68
81
  GraphStyleAttributeReference,
69
82
  GraphStyleScale,
@@ -92,16 +105,21 @@ export {
92
105
  } from './utils/rank-grid';
93
106
 
94
107
  // graph format loaders
95
- export {
96
- JSONGraphLoader,
97
- type JSONGraphLoaderOptions,
98
- } from './loaders/json-graph-loader';
108
+ export {JSONGraphLoader, type JSONGraphLoaderOptions} from './loaders/json-graph-loader';
99
109
 
100
110
  export {
101
111
  DOTGraphLoader,
102
112
  type DOTGraphLoaderOptions,
103
- type DOTGraphLoaderMetadata,
113
+ type DOTGraphLoaderMetadata
104
114
  } from './loaders/dot-graph-loader';
105
115
 
106
116
  // Deprecated exports
107
- export {MARKER_TYPE, NODE_STATE,EDGE_STATE,NODE_TYPE,EDGE_TYPE,EDGE_DECORATOR_TYPE,LAYOUT_STATE} from './_deprecated/old-constants';
117
+ export {
118
+ MARKER_TYPE,
119
+ NODE_STATE,
120
+ EDGE_STATE,
121
+ NODE_TYPE,
122
+ EDGE_TYPE,
123
+ EDGE_DECORATOR_TYPE,
124
+ LAYOUT_STATE
125
+ } from './_deprecated/old-constants';
@@ -49,10 +49,25 @@ const DEFAULT_OFFSET: [number, number] = [8, 0];
49
49
  const DEFAULT_MIN = -1e6;
50
50
  const DEFAULT_MAX = 1e6;
51
51
 
52
- export class GridLayer<DatumT extends GridLineDatum = GridLineDatum> extends CompositeLayer<GridLayerProps<DatumT>> {
52
+ export class GridLayer<DatumT extends GridLineDatum = GridLineDatum> extends CompositeLayer<
53
+ GridLayerProps<DatumT>
54
+ > {
53
55
  static override layerName = 'GridLayer';
54
56
 
55
- static override defaultProps: Required<Pick<GridLayerProps<GridLineDatum>, 'direction' | 'width' | 'color' | 'xMin' | 'xMax' | 'yMin' | 'yMax' | 'showLabels' | 'labelOffset'>> = {
57
+ static override defaultProps: Required<
58
+ Pick<
59
+ GridLayerProps<GridLineDatum>,
60
+ | 'direction'
61
+ | 'width'
62
+ | 'color'
63
+ | 'xMin'
64
+ | 'xMax'
65
+ | 'yMin'
66
+ | 'yMax'
67
+ | 'showLabels'
68
+ | 'labelOffset'
69
+ >
70
+ > = {
56
71
  direction: 'horizontal',
57
72
  width: DEFAULT_WIDTH,
58
73
  color: DEFAULT_COLOR,
@@ -66,7 +81,9 @@ export class GridLayer<DatumT extends GridLineDatum = GridLineDatum> extends Com
66
81
 
67
82
  override shouldUpdateState(params: UpdateParameters<this>): boolean {
68
83
  const {changeFlags} = params;
69
- return Boolean(changeFlags.dataChanged || changeFlags.propsChanged || changeFlags.viewportChanged);
84
+ return Boolean(
85
+ changeFlags.dataChanged || changeFlags.propsChanged || changeFlags.viewportChanged
86
+ );
70
87
  }
71
88
 
72
89
  override renderLayers() {
@@ -151,21 +168,13 @@ export class GridLayer<DatumT extends GridLineDatum = GridLineDatum> extends Com
151
168
 
152
169
  const [bxMin, byMin, bxMax, byMax] = viewportBounds;
153
170
  const minX =
154
- Number.isFinite(bxMin) && Number.isFinite(bxMax)
155
- ? Math.min(bounds.xMin, bxMin)
156
- : bounds.xMin;
171
+ Number.isFinite(bxMin) && Number.isFinite(bxMax) ? Math.min(bounds.xMin, bxMin) : bounds.xMin;
157
172
  const maxX =
158
- Number.isFinite(bxMin) && Number.isFinite(bxMax)
159
- ? Math.max(bounds.xMax, bxMax)
160
- : bounds.xMax;
173
+ Number.isFinite(bxMin) && Number.isFinite(bxMax) ? Math.max(bounds.xMax, bxMax) : bounds.xMax;
161
174
  const minY =
162
- Number.isFinite(byMin) && Number.isFinite(byMax)
163
- ? Math.min(bounds.yMin, byMin)
164
- : bounds.yMin;
175
+ Number.isFinite(byMin) && Number.isFinite(byMax) ? Math.min(bounds.yMin, byMin) : bounds.yMin;
165
176
  const maxY =
166
- Number.isFinite(byMin) && Number.isFinite(byMax)
167
- ? Math.max(bounds.yMax, byMax)
168
- : bounds.yMax;
177
+ Number.isFinite(byMin) && Number.isFinite(byMax) ? Math.max(bounds.yMax, byMax) : bounds.yMax;
169
178
 
170
179
  return {minX, maxX, minY, maxY};
171
180
  }
@@ -222,12 +231,10 @@ export class GridLayer<DatumT extends GridLineDatum = GridLineDatum> extends Com
222
231
  const isHorizontal = direction === 'horizontal';
223
232
 
224
233
  for (const {datum, sourcePosition} of lines) {
225
- const rawLabel = getLabel ? getLabel(datum) : datum.label ?? null;
234
+ const rawLabel = getLabel ? getLabel(datum) : (datum.label ?? null);
226
235
  if (rawLabel !== null && rawLabel !== undefined && rawLabel !== '') {
227
236
  const [sx, sy] = sourcePosition;
228
- const position: [number, number] = isHorizontal
229
- ? [bounds.minX, sy]
230
- : [sx, bounds.minY];
237
+ const position: [number, number] = isHorizontal ? [bounds.minX, sy] : [sx, bounds.minY];
231
238
  labels.push({position, text: String(rawLabel), datum});
232
239
  }
233
240
  }
@@ -6,12 +6,13 @@ import type {InteractionManager} from '../core/interaction-manager';
6
6
  import type {GraphEngine} from '../core/graph-engine';
7
7
  import type {NodeInterface} from '../graph/graph';
8
8
 
9
- import {
10
- GraphStylesheetEngine,
11
- type GraphStylesheet
12
- } from '../style/graph-style-engine';
9
+ import {GraphStylesheetEngine, type GraphStyleRule} from '../style/graph-style-engine';
13
10
  import type {GraphLayerNodeStyle} from '../style/graph-layer-stylesheet';
14
- import {getNodeBoundaryIntersection, type GeometryNodeType, type NodeGeometry} from '../utils/node-boundary';
11
+ import {
12
+ getNodeBoundaryIntersection,
13
+ type GeometryNodeType,
14
+ type NodeGeometry
15
+ } from '../utils/node-boundary';
15
16
  import {warn} from '../utils/log';
16
17
 
17
18
  type NumericAccessor = ((node: NodeInterface) => number) | number | null | undefined;
@@ -39,7 +40,10 @@ const GEOMETRY_NODE_TYPES: GeometryNodeType[] = [
39
40
  'marker'
40
41
  ];
41
42
 
42
- function evaluateNumericAccessor(accessor: NumericAccessor, node: NodeInterface): number | undefined {
43
+ function evaluateNumericAccessor(
44
+ accessor: NumericAccessor,
45
+ node: NodeInterface
46
+ ): number | undefined {
43
47
  if (typeof accessor === 'function') {
44
48
  const value = accessor(node);
45
49
  return typeof value === 'number' && Number.isFinite(value) ? value : undefined;
@@ -130,12 +134,20 @@ const GEOMETRY_APPLIERS: Record<
130
134
  },
131
135
  'rounded-rectangle': (node, accessors, geometry) => {
132
136
  assignRectangleDimensions(node, accessors, geometry);
133
- assignDimension(geometry, 'cornerRadius', resolveAccessorValue(accessors.getCornerRadius, node));
137
+ assignDimension(
138
+ geometry,
139
+ 'cornerRadius',
140
+ resolveAccessorValue(accessors.getCornerRadius, node)
141
+ );
134
142
  assignDimension(geometry, 'radius', resolveAccessorValue(accessors.getRadius, node));
135
143
  },
136
144
  'path-rounded-rectangle': (node, accessors, geometry) => {
137
145
  assignRectangleDimensions(node, accessors, geometry);
138
- assignDimension(geometry, 'cornerRadius', resolveAccessorValue(accessors.getCornerRadius, node));
146
+ assignDimension(
147
+ geometry,
148
+ 'cornerRadius',
149
+ resolveAccessorValue(accessors.getCornerRadius, node)
150
+ );
139
151
  }
140
152
  };
141
153
 
@@ -166,8 +178,7 @@ export class EdgeAttachmentHelper {
166
178
  new Map<string | number, NodeInterface>()
167
179
  );
168
180
 
169
- return (edge: any) =>
170
- this._getAdjustedEdgeLayout(engine, nodeAccessorMap, nodeMap, edge);
181
+ return (edge: any) => this._getAdjustedEdgeLayout(engine, nodeAccessorMap, nodeMap, edge);
171
182
  }
172
183
 
173
184
  private _buildNodeStyleAccessorMap({
@@ -187,45 +198,43 @@ export class EdgeAttachmentHelper {
187
198
 
188
199
  const styles = Array.isArray(nodeStyle) ? nodeStyle : [nodeStyle];
189
200
 
190
- styles
191
- .filter(Boolean)
192
- .forEach((style) => {
193
- const {data = (nodes) => nodes, ...restStyle} = style;
194
- const type = restStyle.type;
195
-
196
- if (!type || !GEOMETRY_NODE_TYPES.includes(type as GeometryNodeType)) {
197
- return;
198
- }
199
-
200
- let stylesheet: GraphStylesheetEngine | null = null;
201
- try {
202
- stylesheet = engine.createStylesheetEngine(restStyle as GraphStylesheet, {
203
- stateUpdateTrigger: (interactionManager as any).getLastInteraction()
204
- });
205
- } catch (error) {
206
- warn(
207
- `GraphLayer: Failed to evaluate node stylesheet for edge attachment (${String(
208
- (error as Error).message ?? error
209
- )}).`
210
- );
211
- return;
212
- }
213
-
214
- const nodes = data(engine.getNodes());
215
- if (!Array.isArray(nodes)) {
216
- return;
217
- }
201
+ styles.filter(Boolean).forEach((style) => {
202
+ const {data = (nodes) => nodes, ...restStyle} = style;
203
+ const type = restStyle.type;
218
204
 
219
- const geometryType = type as GeometryNodeType;
220
- const accessors = this._createAccessorsForType(geometryType, stylesheet);
205
+ if (!type || !GEOMETRY_NODE_TYPES.includes(type as GeometryNodeType)) {
206
+ return;
207
+ }
221
208
 
222
- nodes.forEach((node: NodeInterface) => {
223
- const id = node.getId();
224
- if (!nodeAccessorMap.has(id)) {
225
- nodeAccessorMap.set(id, accessors);
226
- }
209
+ let stylesheet: GraphStylesheetEngine | null = null;
210
+ try {
211
+ stylesheet = engine.createStylesheetEngine(restStyle as GraphStyleRule, {
212
+ stateUpdateTrigger: (interactionManager as any).getLastInteraction()
227
213
  });
214
+ } catch (error) {
215
+ warn(
216
+ `GraphLayer: Failed to evaluate node stylesheet for edge attachment (${String(
217
+ (error as Error).message ?? error
218
+ )}).`
219
+ );
220
+ return;
221
+ }
222
+
223
+ const nodes = data(engine.getNodes());
224
+ if (!Array.isArray(nodes)) {
225
+ return;
226
+ }
227
+
228
+ const geometryType = type as GeometryNodeType;
229
+ const accessors = this._createAccessorsForType(geometryType, stylesheet);
230
+
231
+ nodes.forEach((node: NodeInterface) => {
232
+ const id = node.getId();
233
+ if (!nodeAccessorMap.has(id)) {
234
+ nodeAccessorMap.set(id, accessors);
235
+ }
228
236
  });
237
+ });
229
238
 
230
239
  return nodeAccessorMap;
231
240
  }
@@ -9,8 +9,8 @@ import {PathEdgeLayer} from './edge-layers/path-edge-layer';
9
9
  import {CurvedEdgeLayer} from './edge-layers/curved-edge-layer';
10
10
 
11
11
  const EDGE_LAYER_MAP = {
12
- 'line': StraightLineEdgeLayer,
13
- 'path': PathEdgeLayer,
12
+ line: StraightLineEdgeLayer,
13
+ path: PathEdgeLayer,
14
14
  'spline-curve': CurvedEdgeLayer
15
15
  };
16
16
 
@@ -46,8 +46,8 @@ export class EdgeLayer extends CompositeLayer {
46
46
  return res;
47
47
  },
48
48
  {
49
- 'line': [],
50
- 'path': [],
49
+ line: [],
50
+ path: [],
51
51
  'spline-curve': []
52
52
  }
53
53
  );
@@ -34,14 +34,7 @@ function getArrowAttributes({length = 1, headWidth = 1}) {
34
34
 
35
35
  const normals = new Float32Array([0, 0, 1, 0, 0, 1, 0, 0, 1]);
36
36
 
37
- const texCoords = new Float32Array([
38
- 0.5,
39
- 1,
40
- 0,
41
- 0,
42
- 1,
43
- 0
44
- ]);
37
+ const texCoords = new Float32Array([0.5, 1, 0, 0, 1, 0]);
45
38
 
46
39
  return {
47
40
  positions: {size: 3, value: positions},