@deck.gl-community/graph-layers 9.1.1 → 9.2.0-beta.2

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 (251) hide show
  1. package/dist/_deprecated/old-constants.d.ts +107 -0
  2. package/dist/_deprecated/old-constants.d.ts.map +1 -0
  3. package/dist/_deprecated/old-constants.js +111 -0
  4. package/dist/_deprecated/old-constants.js.map +1 -0
  5. package/dist/core/cache.d.ts +0 -1
  6. package/dist/core/cache.js +0 -1
  7. package/dist/core/constants.d.ts +12 -100
  8. package/dist/core/constants.d.ts.map +1 -1
  9. package/dist/core/constants.js +3 -44
  10. package/dist/core/constants.js.map +1 -1
  11. package/dist/core/graph-engine.d.ts +12 -11
  12. package/dist/core/graph-engine.d.ts.map +1 -1
  13. package/dist/core/graph-engine.js +22 -11
  14. package/dist/core/graph-engine.js.map +1 -1
  15. package/dist/core/graph-layout.d.ts +48 -21
  16. package/dist/core/graph-layout.d.ts.map +1 -1
  17. package/dist/core/graph-layout.js +91 -24
  18. package/dist/core/graph-layout.js.map +1 -1
  19. package/dist/core/interaction-manager.d.ts +6 -4
  20. package/dist/core/interaction-manager.d.ts.map +1 -1
  21. package/dist/core/interaction-manager.js +59 -17
  22. package/dist/core/interaction-manager.js.map +1 -1
  23. package/dist/graph/edge.d.ts +7 -7
  24. package/dist/graph/edge.d.ts.map +1 -1
  25. package/dist/graph/edge.js +3 -6
  26. package/dist/graph/edge.js.map +1 -1
  27. package/dist/graph/graph.d.ts +2 -3
  28. package/dist/graph/graph.js +8 -9
  29. package/dist/graph/graph.js.map +1 -1
  30. package/dist/graph/node.d.ts +7 -8
  31. package/dist/graph/node.d.ts.map +1 -1
  32. package/dist/graph/node.js +3 -5
  33. package/dist/graph/node.js.map +1 -1
  34. package/dist/graph-style-schema.cdn.d.ts +2 -0
  35. package/dist/graph-style-schema.cdn.js +2 -0
  36. package/dist/graph-style-schema.json +12 -0
  37. package/dist/index.cjs +2821 -549
  38. package/dist/index.cjs.map +4 -4
  39. package/dist/index.d.ts +28 -22
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +25 -21
  42. package/dist/index.js.map +1 -1
  43. package/dist/layers/common-layers/flow-path-layer/flow-path-layer-fragment.glsl.d.ts +0 -1
  44. package/dist/layers/common-layers/flow-path-layer/flow-path-layer-fragment.glsl.js +0 -1
  45. package/dist/layers/common-layers/flow-path-layer/flow-path-layer-vertex-tf.glsl.d.ts +0 -1
  46. package/dist/layers/common-layers/flow-path-layer/flow-path-layer-vertex-tf.glsl.js +0 -1
  47. package/dist/layers/common-layers/flow-path-layer/flow-path-layer-vertex.glsl.d.ts +0 -1
  48. package/dist/layers/common-layers/flow-path-layer/flow-path-layer-vertex.glsl.js +0 -1
  49. package/dist/layers/common-layers/flow-path-layer/flow-path-layer.d.ts +0 -1
  50. package/dist/layers/common-layers/flow-path-layer/flow-path-layer.js +0 -1
  51. package/dist/layers/common-layers/marker-layer/atlas-data-url.d.ts +0 -1
  52. package/dist/layers/common-layers/marker-layer/atlas-data-url.js +0 -1
  53. package/dist/layers/common-layers/marker-layer/marker-layer.d.ts +0 -1
  54. package/dist/layers/common-layers/marker-layer/marker-layer.js +2 -3
  55. package/dist/layers/common-layers/marker-layer/marker-list.d.ts +2 -63
  56. package/dist/layers/common-layers/marker-layer/marker-list.d.ts.map +1 -1
  57. package/dist/layers/common-layers/marker-layer/marker-list.js +1 -65
  58. package/dist/layers/common-layers/marker-layer/marker-list.js.map +1 -1
  59. package/dist/layers/common-layers/marker-layer/marker-mapping.d.ts +0 -1
  60. package/dist/layers/common-layers/marker-layer/marker-mapping.js +0 -1
  61. package/dist/layers/common-layers/spline-layer/spline-layer.d.ts +0 -1
  62. package/dist/layers/common-layers/spline-layer/spline-layer.js +0 -1
  63. package/dist/layers/common-layers/zoomable-text-layer/zoomable-text-layer.d.ts +0 -1
  64. package/dist/layers/common-layers/zoomable-text-layer/zoomable-text-layer.js +0 -1
  65. package/dist/layers/edge-attachment-helper.d.ts +15 -0
  66. package/dist/layers/edge-attachment-helper.d.ts.map +1 -0
  67. package/dist/layers/edge-attachment-helper.js +230 -0
  68. package/dist/layers/edge-attachment-helper.js.map +1 -0
  69. package/dist/layers/edge-layer.d.ts +1 -5
  70. package/dist/layers/edge-layer.d.ts.map +1 -1
  71. package/dist/layers/edge-layer.js +9 -11
  72. package/dist/layers/edge-layer.js.map +1 -1
  73. package/dist/layers/edge-layers/arrow-2d-geometry.d.ts +4 -0
  74. package/dist/layers/edge-layers/arrow-2d-geometry.d.ts.map +1 -0
  75. package/dist/layers/edge-layers/arrow-2d-geometry.js +42 -0
  76. package/dist/layers/edge-layers/arrow-2d-geometry.js.map +1 -0
  77. package/dist/layers/edge-layers/curved-edge-layer.d.ts +1 -2
  78. package/dist/layers/edge-layers/curved-edge-layer.js +1 -2
  79. package/dist/layers/edge-layers/edge-arrow-layer.d.ts +21 -0
  80. package/dist/layers/edge-layers/edge-arrow-layer.d.ts.map +1 -0
  81. package/dist/layers/edge-layers/edge-arrow-layer.js +131 -0
  82. package/dist/layers/edge-layers/edge-arrow-layer.js.map +1 -0
  83. package/dist/layers/edge-layers/edge-label-layer.d.ts +1 -2
  84. package/dist/layers/edge-layers/edge-label-layer.js +1 -2
  85. package/dist/layers/edge-layers/flow-layer.d.ts +1 -2
  86. package/dist/layers/edge-layers/flow-layer.js +1 -2
  87. package/dist/layers/edge-layers/path-edge-layer.d.ts +0 -1
  88. package/dist/layers/edge-layers/path-edge-layer.js +0 -1
  89. package/dist/layers/edge-layers/straight-line-edge-layer.d.ts +0 -1
  90. package/dist/layers/edge-layers/straight-line-edge-layer.js +0 -1
  91. package/dist/layers/graph-layer.d.ts +22 -23
  92. package/dist/layers/graph-layer.d.ts.map +1 -1
  93. package/dist/layers/graph-layer.js +218 -62
  94. package/dist/layers/graph-layer.js.map +1 -1
  95. package/dist/layers/node-layers/circle-layer.d.ts +0 -1
  96. package/dist/layers/node-layers/circle-layer.js +0 -1
  97. package/dist/layers/node-layers/image-layer.d.ts +0 -1
  98. package/dist/layers/node-layers/image-layer.js +0 -1
  99. package/dist/layers/node-layers/label-layer.d.ts +1 -2
  100. package/dist/layers/node-layers/label-layer.js +1 -2
  101. package/dist/layers/node-layers/path-rounded-rectangle-layer.d.ts +0 -1
  102. package/dist/layers/node-layers/path-rounded-rectangle-layer.js +1 -2
  103. package/dist/layers/node-layers/rectangle-layer.d.ts +0 -1
  104. package/dist/layers/node-layers/rectangle-layer.js +0 -1
  105. package/dist/layers/node-layers/rounded-rectangle-layer-fragment.d.ts +0 -1
  106. package/dist/layers/node-layers/rounded-rectangle-layer-fragment.js +0 -1
  107. package/dist/layers/node-layers/rounded-rectangle-layer.d.ts +1 -2
  108. package/dist/layers/node-layers/rounded-rectangle-layer.js +2 -3
  109. package/dist/layers/node-layers/zoomable-marker-layer.d.ts +1 -2
  110. package/dist/layers/node-layers/zoomable-marker-layer.js +1 -2
  111. package/dist/layouts/d3-dag/d3-dag-layout.d.ts +117 -0
  112. package/dist/layouts/d3-dag/d3-dag-layout.d.ts.map +1 -0
  113. package/dist/layouts/d3-dag/d3-dag-layout.js +716 -0
  114. package/dist/layouts/d3-dag/d3-dag-layout.js.map +1 -0
  115. package/dist/layouts/d3-force/d3-force-layout.d.ts +4 -4
  116. package/dist/layouts/d3-force/d3-force-layout.d.ts.map +1 -1
  117. package/dist/layouts/d3-force/d3-force-layout.js +25 -10
  118. package/dist/layouts/d3-force/d3-force-layout.js.map +1 -1
  119. package/dist/layouts/d3-force/worker.d.ts +0 -1
  120. package/dist/layouts/d3-force/worker.js +0 -1
  121. package/dist/layouts/experimental/force-multi-graph-layout.d.ts +9 -8
  122. package/dist/layouts/experimental/force-multi-graph-layout.d.ts.map +1 -1
  123. package/dist/layouts/experimental/force-multi-graph-layout.js +15 -11
  124. package/dist/layouts/experimental/force-multi-graph-layout.js.map +1 -1
  125. package/dist/layouts/experimental/hive-plot-layout.d.ts +11 -8
  126. package/dist/layouts/experimental/hive-plot-layout.d.ts.map +1 -1
  127. package/dist/layouts/experimental/hive-plot-layout.js +12 -7
  128. package/dist/layouts/experimental/hive-plot-layout.js.map +1 -1
  129. package/dist/layouts/experimental/radial-layout.d.ts +10 -7
  130. package/dist/layouts/experimental/radial-layout.d.ts.map +1 -1
  131. package/dist/layouts/experimental/radial-layout.js +11 -6
  132. package/dist/layouts/experimental/radial-layout.js.map +1 -1
  133. package/dist/layouts/gpu-force/gpu-force-layout.d.ts +4 -4
  134. package/dist/layouts/gpu-force/gpu-force-layout.d.ts.map +1 -1
  135. package/dist/layouts/gpu-force/gpu-force-layout.js +18 -9
  136. package/dist/layouts/gpu-force/gpu-force-layout.js.map +1 -1
  137. package/dist/layouts/gpu-force/worker.d.ts +0 -1
  138. package/dist/layouts/gpu-force/worker.js +0 -1
  139. package/dist/layouts/simple-layout.d.ts +19 -12
  140. package/dist/layouts/simple-layout.d.ts.map +1 -1
  141. package/dist/layouts/simple-layout.js +26 -15
  142. package/dist/layouts/simple-layout.js.map +1 -1
  143. package/dist/loaders/create-graph.d.ts +1 -2
  144. package/dist/loaders/create-graph.js +3 -4
  145. package/dist/loaders/edge-parsers.d.ts +1 -2
  146. package/dist/loaders/edge-parsers.js +2 -3
  147. package/dist/loaders/edge-parsers.js.map +1 -1
  148. package/dist/loaders/json-loader.d.ts +2 -3
  149. package/dist/loaders/json-loader.d.ts.map +1 -1
  150. package/dist/loaders/json-loader.js +5 -6
  151. package/dist/loaders/json-loader.js.map +1 -1
  152. package/dist/loaders/node-parsers.d.ts +1 -2
  153. package/dist/loaders/node-parsers.js +2 -3
  154. package/dist/loaders/node-parsers.js.map +1 -1
  155. package/dist/loaders/simple-json-graph-loader.d.ts +0 -1
  156. package/dist/loaders/simple-json-graph-loader.d.ts.map +1 -1
  157. package/dist/loaders/simple-json-graph-loader.js +5 -6
  158. package/dist/loaders/simple-json-graph-loader.js.map +1 -1
  159. package/dist/loaders/table-graph-loader.d.ts +3 -4
  160. package/dist/loaders/table-graph-loader.js +5 -6
  161. package/dist/loaders/table-graph-loader.js.map +1 -1
  162. package/dist/style/graph-layer-stylesheet.d.ts +34 -0
  163. package/dist/style/graph-layer-stylesheet.d.ts.map +1 -0
  164. package/dist/style/graph-layer-stylesheet.js +39 -0
  165. package/dist/style/graph-layer-stylesheet.js.map +1 -0
  166. package/dist/style/graph-style-accessor-map.d.ts +93 -0
  167. package/dist/style/graph-style-accessor-map.d.ts.map +1 -0
  168. package/dist/style/graph-style-accessor-map.js +93 -0
  169. package/dist/style/graph-style-accessor-map.js.map +1 -0
  170. package/dist/style/graph-style-engine.d.ts +10 -0
  171. package/dist/style/graph-style-engine.d.ts.map +1 -0
  172. package/dist/style/graph-style-engine.js +163 -0
  173. package/dist/style/graph-style-engine.js.map +1 -0
  174. package/dist/style/graph-stylesheet.schema.d.ts +310 -0
  175. package/dist/style/graph-stylesheet.schema.d.ts.map +1 -0
  176. package/dist/style/graph-stylesheet.schema.js +237 -0
  177. package/dist/style/graph-stylesheet.schema.js.map +1 -0
  178. package/dist/style/style-engine.d.ts +33 -0
  179. package/dist/style/style-engine.d.ts.map +1 -0
  180. package/dist/style/style-engine.js +121 -0
  181. package/dist/style/style-engine.js.map +1 -0
  182. package/dist/style/style-property.d.ts +2 -3
  183. package/dist/style/style-property.d.ts.map +1 -1
  184. package/dist/style/style-property.js +224 -48
  185. package/dist/style/style-property.js.map +1 -1
  186. package/dist/utils/collapsed-chains.d.ts +17 -0
  187. package/dist/utils/collapsed-chains.d.ts.map +1 -0
  188. package/dist/utils/collapsed-chains.js +197 -0
  189. package/dist/utils/collapsed-chains.js.map +1 -0
  190. package/dist/utils/layer-utils.d.ts +0 -1
  191. package/dist/utils/layer-utils.d.ts.map +1 -1
  192. package/dist/utils/layer-utils.js +0 -1
  193. package/dist/utils/log.d.ts +2 -1
  194. package/dist/utils/log.d.ts.map +1 -1
  195. package/dist/utils/log.js +12 -2
  196. package/dist/utils/log.js.map +1 -1
  197. package/dist/utils/node-boundary.d.ts +10 -0
  198. package/dist/utils/node-boundary.d.ts.map +1 -0
  199. package/dist/utils/node-boundary.js +130 -0
  200. package/dist/utils/node-boundary.js.map +1 -0
  201. package/dist/utils/polygon-calculations.d.ts +0 -1
  202. package/dist/utils/polygon-calculations.js +0 -1
  203. package/dist/widgets/long-press-button.d.ts +0 -1
  204. package/dist/widgets/long-press-button.js +0 -1
  205. package/dist/widgets/view-control-widget.d.ts +4 -5
  206. package/dist/widgets/view-control-widget.d.ts.map +1 -1
  207. package/dist/widgets/view-control-widget.js +10 -8
  208. package/dist/widgets/view-control-widget.js.map +1 -1
  209. package/package.json +23 -7
  210. package/src/_deprecated/old-constants.ts +122 -0
  211. package/src/core/constants.ts +21 -43
  212. package/src/core/graph-engine.ts +24 -9
  213. package/src/core/graph-layout.ts +133 -28
  214. package/src/core/interaction-manager.ts +80 -20
  215. package/src/graph/edge.ts +6 -6
  216. package/src/graph/graph.ts +7 -7
  217. package/src/graph/node.ts +6 -6
  218. package/src/index.ts +31 -6
  219. package/src/layers/common-layers/marker-layer/marker-list.ts +62 -64
  220. package/src/layers/edge-attachment-helper.ts +355 -0
  221. package/src/layers/edge-layer.ts +6 -7
  222. package/src/layers/edge-layers/arrow-2d-geometry.ts +51 -0
  223. package/src/layers/edge-layers/edge-arrow-layer.ts +171 -0
  224. package/src/layers/graph-layer.ts +304 -86
  225. package/src/layouts/d3-dag/d3-dag-layout.ts +969 -0
  226. package/src/layouts/d3-force/d3-force-layout.ts +33 -11
  227. package/src/layouts/experimental/force-multi-graph-layout.ts +22 -13
  228. package/src/layouts/experimental/hive-plot-layout.ts +22 -10
  229. package/src/layouts/experimental/radial-layout.ts +20 -8
  230. package/src/layouts/gpu-force/gpu-force-layout.ts +22 -10
  231. package/src/layouts/simple-layout.ts +48 -25
  232. package/src/loaders/edge-parsers.ts +2 -2
  233. package/src/loaders/json-loader.ts +2 -2
  234. package/src/loaders/node-parsers.ts +2 -2
  235. package/src/loaders/simple-json-graph-loader.ts +2 -2
  236. package/src/loaders/table-graph-loader.ts +2 -2
  237. package/src/style/graph-layer-stylesheet.ts +99 -0
  238. package/src/style/graph-style-accessor-map.ts +103 -0
  239. package/src/style/graph-style-engine.ts +229 -0
  240. package/src/style/graph-stylesheet.schema.ts +344 -0
  241. package/src/style/style-engine.ts +168 -0
  242. package/src/style/style-property.ts +314 -51
  243. package/src/utils/collapsed-chains.ts +261 -0
  244. package/src/utils/log.ts +15 -1
  245. package/src/utils/node-boundary.ts +238 -0
  246. package/src/widgets/view-control-widget.tsx +15 -13
  247. package/dist/style/style-sheet.d.ts +0 -11
  248. package/dist/style/style-sheet.d.ts.map +0 -1
  249. package/dist/style/style-sheet.js +0 -253
  250. package/dist/style/style-sheet.js.map +0 -1
  251. package/src/style/style-sheet.ts +0 -277
@@ -0,0 +1,238 @@
1
+ // deck.gl-community
2
+ // SPDX-License-Identifier: MIT
3
+ // Copyright (c) vis.gl contributors
4
+
5
+ export type GeometryNodeType =
6
+ | 'circle'
7
+ | 'rectangle'
8
+ | 'rounded-rectangle'
9
+ | 'path-rounded-rectangle'
10
+ | 'marker';
11
+
12
+ export type NodeGeometry = {
13
+ type?: GeometryNodeType;
14
+ center: [number, number];
15
+ radius?: number;
16
+ width?: number;
17
+ height?: number;
18
+ cornerRadius?: number;
19
+ };
20
+
21
+ const EPSILON = 1e-6;
22
+
23
+ function normalizeDirection(
24
+ center: [number, number],
25
+ target: [number, number]
26
+ ): {unit: [number, number]; distance: number} | null {
27
+ const dx = target[0] - center[0];
28
+ const dy = target[1] - center[1];
29
+ const length = Math.hypot(dx, dy);
30
+
31
+ if (length <= EPSILON) {
32
+ return null;
33
+ }
34
+
35
+ return {unit: [dx / length, dy / length], distance: length};
36
+ }
37
+
38
+ function projectFromCenter(
39
+ center: [number, number],
40
+ unit: [number, number],
41
+ distance: number
42
+ ): [number, number] {
43
+ return [center[0] + unit[0] * distance, center[1] + unit[1] * distance];
44
+ }
45
+
46
+ function projectToRectangle(
47
+ center: [number, number],
48
+ unit: [number, number],
49
+ halfWidth: number,
50
+ halfHeight: number
51
+ ): [number, number] {
52
+ const absUx = Math.abs(unit[0]);
53
+ const absUy = Math.abs(unit[1]);
54
+
55
+ let distance = Number.POSITIVE_INFINITY;
56
+ if (halfWidth > 0 && absUx > EPSILON) {
57
+ distance = Math.min(distance, halfWidth / absUx);
58
+ }
59
+ if (halfHeight > 0 && absUy > EPSILON) {
60
+ distance = Math.min(distance, halfHeight / absUy);
61
+ }
62
+
63
+ if (!Number.isFinite(distance)) {
64
+ return [...center] as [number, number];
65
+ }
66
+
67
+ return [center[0] + unit[0] * distance, center[1] + unit[1] * distance];
68
+ }
69
+
70
+ function resolveCornerRadius(
71
+ rawCornerRadius: number | undefined,
72
+ halfWidth: number,
73
+ halfHeight: number
74
+ ): number {
75
+ if (!Number.isFinite(rawCornerRadius) || rawCornerRadius <= 0) {
76
+ return 0;
77
+ }
78
+
79
+ let resolved = rawCornerRadius;
80
+ if (resolved <= 1) {
81
+ resolved *= Math.min(halfWidth, halfHeight);
82
+ }
83
+
84
+ return Math.min(resolved, halfWidth, halfHeight);
85
+ }
86
+
87
+ // eslint-disable-next-line max-params
88
+ function intersectsInnerFaces(
89
+ absX: number,
90
+ absY: number,
91
+ innerHalfWidth: number,
92
+ innerHalfHeight: number,
93
+ halfWidth: number,
94
+ halfHeight: number
95
+ ) {
96
+ const insideVerticalFace = absX <= innerHalfWidth + EPSILON && absY <= halfHeight + EPSILON;
97
+ const insideHorizontalFace = absY <= innerHalfHeight + EPSILON && absX <= halfWidth + EPSILON;
98
+ return insideVerticalFace || insideHorizontalFace;
99
+ }
100
+
101
+ // eslint-disable-next-line max-params
102
+ function projectToCornerArc(
103
+ geometry: NodeGeometry,
104
+ unit: [number, number],
105
+ innerHalfWidth: number,
106
+ innerHalfHeight: number,
107
+ cornerRadius: number,
108
+ rectanglePoint: [number, number]
109
+ ) {
110
+ const offsetX = rectanglePoint[0] - geometry.center[0];
111
+ const offsetY = rectanglePoint[1] - geometry.center[1];
112
+
113
+ const cornerCenter: [number, number] = [
114
+ geometry.center[0] + Math.sign(offsetX || unit[0]) * innerHalfWidth,
115
+ geometry.center[1] + Math.sign(offsetY || unit[1]) * innerHalfHeight
116
+ ];
117
+ const relativeCornerCenter: [number, number] = [
118
+ cornerCenter[0] - geometry.center[0],
119
+ cornerCenter[1] - geometry.center[1]
120
+ ];
121
+
122
+ const dot = unit[0] * relativeCornerCenter[0] + unit[1] * relativeCornerCenter[1];
123
+ const centerDistanceSq =
124
+ relativeCornerCenter[0] * relativeCornerCenter[0] +
125
+ relativeCornerCenter[1] * relativeCornerCenter[1];
126
+ const discriminant = dot * dot - (centerDistanceSq - cornerRadius * cornerRadius);
127
+
128
+ if (discriminant < 0) {
129
+ return rectanglePoint;
130
+ }
131
+
132
+ const distance = dot - Math.sqrt(Math.max(0, discriminant));
133
+ return projectFromCenter(geometry.center, unit, distance);
134
+ }
135
+
136
+ function computeRectangleIntersection(
137
+ geometry: NodeGeometry,
138
+ unit: [number, number]
139
+ ): [number, number] {
140
+ const halfWidth = (geometry.width ?? 0) / 2;
141
+ const halfHeight = (geometry.height ?? 0) / 2;
142
+ if (halfWidth <= EPSILON || halfHeight <= EPSILON) {
143
+ return [...geometry.center];
144
+ }
145
+ return projectToRectangle(geometry.center, unit, halfWidth, halfHeight);
146
+ }
147
+
148
+ // eslint-disable-next-line max-statements, complexity
149
+ function computeRoundedRectangleIntersection(
150
+ geometry: NodeGeometry,
151
+ unit: [number, number]
152
+ ): [number, number] {
153
+ const halfWidth = (geometry.width ?? 0) / 2;
154
+ const halfHeight = (geometry.height ?? 0) / 2;
155
+
156
+ if (halfWidth <= EPSILON || halfHeight <= EPSILON) {
157
+ const radius = geometry.radius ?? Math.min(halfWidth, halfHeight);
158
+ return projectFromCenter(geometry.center, unit, radius);
159
+ }
160
+
161
+ const cornerRadius = resolveCornerRadius(geometry.cornerRadius, halfWidth, halfHeight);
162
+
163
+ if (cornerRadius <= EPSILON) {
164
+ return projectToRectangle(geometry.center, unit, halfWidth, halfHeight);
165
+ }
166
+
167
+ const innerHalfWidth = Math.max(halfWidth - cornerRadius, 0);
168
+ const innerHalfHeight = Math.max(halfHeight - cornerRadius, 0);
169
+
170
+ if (innerHalfWidth <= EPSILON || innerHalfHeight <= EPSILON) {
171
+ const radius = Math.min(halfWidth, halfHeight);
172
+ return projectFromCenter(geometry.center, unit, radius);
173
+ }
174
+
175
+ const rectanglePoint = projectToRectangle(geometry.center, unit, halfWidth, halfHeight);
176
+ const absX = Math.abs(rectanglePoint[0] - geometry.center[0]);
177
+ const absY = Math.abs(rectanglePoint[1] - geometry.center[1]);
178
+
179
+ const touchesInnerFace =
180
+ absX <= innerHalfWidth + EPSILON || absY <= innerHalfHeight + EPSILON;
181
+
182
+ if (
183
+ touchesInnerFace &&
184
+ intersectsInnerFaces(absX, absY, innerHalfWidth, innerHalfHeight, halfWidth, halfHeight)
185
+ ) {
186
+ return rectanglePoint;
187
+ }
188
+
189
+ return projectToCornerArc(
190
+ geometry,
191
+ unit,
192
+ innerHalfWidth,
193
+ innerHalfHeight,
194
+ cornerRadius,
195
+ rectanglePoint
196
+ );
197
+ }
198
+
199
+ function computeCircleIntersection(
200
+ geometry: NodeGeometry,
201
+ unit: [number, number],
202
+ radius?: number
203
+ ) {
204
+ const effectiveRadius = radius ?? geometry.radius ?? 0;
205
+ return projectFromCenter(geometry.center, unit, Math.max(effectiveRadius, 0));
206
+ }
207
+
208
+ const BOUNDARY_COMPUTERS: Record<
209
+ GeometryNodeType,
210
+ (geometry: NodeGeometry, unit: [number, number]) => [number, number]
211
+ > = {
212
+ circle: (geometry, unit) => computeCircleIntersection(geometry, unit),
213
+ marker: (geometry, unit) => computeCircleIntersection(geometry, unit),
214
+ rectangle: (geometry, unit) => computeRectangleIntersection(geometry, unit),
215
+ 'rounded-rectangle': (geometry, unit) => computeRoundedRectangleIntersection(geometry, unit),
216
+ 'path-rounded-rectangle': (geometry, unit) => computeRoundedRectangleIntersection(geometry, unit)
217
+ };
218
+
219
+ export function getNodeBoundaryIntersection(
220
+ geometry: NodeGeometry,
221
+ targetCenter: [number, number]
222
+ ): [number, number] {
223
+ const direction = normalizeDirection(geometry.center, targetCenter);
224
+ if (!direction) {
225
+ return [...geometry.center];
226
+ }
227
+
228
+ const handler = geometry.type ? BOUNDARY_COMPUTERS[geometry.type] : undefined;
229
+ if (handler) {
230
+ return handler(geometry, direction.unit);
231
+ }
232
+
233
+ if (geometry.radius && geometry.radius > EPSILON) {
234
+ return projectFromCenter(geometry.center, direction.unit, geometry.radius);
235
+ }
236
+
237
+ return [...geometry.center];
238
+ }
@@ -5,7 +5,7 @@
5
5
  import {Component, render} from 'preact';
6
6
 
7
7
  // import {FlyToInterpolator} from '@deck.gl/core';
8
- import type {Deck, Viewport, Widget, WidgetPlacement} from '@deck.gl/core';
8
+ import {Widget, type Deck, type Viewport, type WidgetPlacement} from '@deck.gl/core';
9
9
  import {LongPressButton} from './long-press-button';
10
10
 
11
11
  export const ViewControlWrapper = ({children}) => (
@@ -230,17 +230,17 @@ export class ViewControl extends Component<ViewControlProps> {
230
230
  }
231
231
  }
232
232
 
233
- export class ViewControlWidget implements Widget<ViewControlProps> {
233
+ export class ViewControlWidget extends Widget<ViewControlProps> {
234
234
  id = 'zoom';
235
- props: ViewControlProps;
236
235
  placement: WidgetPlacement = 'top-left';
237
236
  orientation: 'vertical' | 'horizontal' = 'vertical';
238
237
  viewId?: string | null = null;
239
238
  viewports: {[id: string]: Viewport} = {};
240
- deck?: Deck<any>;
241
239
  element?: HTMLDivElement;
240
+ className = 'deck-widget-view-control';
242
241
 
243
242
  constructor(props: ViewControlProps) {
243
+ super(props);
244
244
  this.props = {...ViewControl.defaultProps, ...props};
245
245
  this.id = props.id || 'zoom';
246
246
  this.viewId = props.viewId || null;
@@ -250,7 +250,6 @@ export class ViewControlWidget implements Widget<ViewControlProps> {
250
250
  // props.zoomInLabel = props.zoomInLabel || 'Zoom In';
251
251
  // props.zoomOutLabel = props.zoomOutLabel || 'Zoom Out';
252
252
  props.style = props.style || {};
253
- this.props = props;
254
253
  }
255
254
 
256
255
  onAdd({deck}: {deck: Deck<any>}): HTMLDivElement {
@@ -267,14 +266,6 @@ export class ViewControlWidget implements Widget<ViewControlProps> {
267
266
  this.element.style.setProperty(key, value as string)
268
267
  );
269
268
  }
270
- const ui = (
271
- <ViewControl
272
- {...this.props}
273
- zoomBy={this.handleDeltaZoom.bind(this)}
274
- panBy={this.handlePanBy.bind(this)}
275
- />
276
- );
277
- render(ui, this.element);
278
269
 
279
270
  return this.element;
280
271
  }
@@ -284,6 +275,17 @@ export class ViewControlWidget implements Widget<ViewControlProps> {
284
275
  this.element = undefined;
285
276
  }
286
277
 
278
+ onRenderHTML(rootElement: HTMLElement): void {
279
+ const ui = (
280
+ <ViewControl
281
+ {...this.props}
282
+ zoomBy={this.handleDeltaZoom.bind(this)}
283
+ panBy={this.handlePanBy.bind(this)}
284
+ />
285
+ );
286
+ render(ui, rootElement);
287
+ }
288
+
287
289
  setProps(props: Partial<ViewControlProps>) {
288
290
  Object.assign(this.props, props);
289
291
  }
@@ -1,11 +0,0 @@
1
- export declare class Stylesheet {
2
- type: any;
3
- properties: any;
4
- constructor(style: any, updateTriggers: any);
5
- _getProperty(deckglAccessor: any): any;
6
- getDeckGLAccessor(deckglAccessor: any): any;
7
- getDeckGLAccessorUpdateTrigger(deckglAccessor: any): any;
8
- getDeckGLAccessors(): {};
9
- getDeckGLUpdateTriggers(): {};
10
- }
11
- //# sourceMappingURL=style-sheet.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"style-sheet.d.ts","sourceRoot":"","sources":["../../src/style/style-sheet.ts"],"names":[],"mappings":"AAsIA,qBAAa,UAAU;IACrB,IAAI,EAAE,GAAG,CAAC;IACV,UAAU,EAAE,GAAG,CAAC;gBACJ,KAAK,KAAA,EAAE,cAAc,KAAA;IA4FjC,YAAY,CAAC,cAAc,KAAA;IAa3B,iBAAiB,CAAC,cAAc,KAAA;IAWhC,8BAA8B,CAAC,cAAc,KAAA;IAS7C,kBAAkB;IAQlB,uBAAuB;CAMxB"}
@@ -1,253 +0,0 @@
1
- // deck.gl-community
2
- // SPDX-License-Identifier: MIT
3
- // Copyright (c) vis.gl contributors
4
- import { StyleProperty } from "./style-property.js";
5
- import { NODE_TYPE, EDGE_DECORATOR_TYPE } from "../core/constants.js";
6
- import { log } from "../utils/log.js";
7
- const COMMON_DECKGL_PROPS = {
8
- getOffset: 'offset',
9
- opacity: 'opacity'
10
- };
11
- const DECKGL_ACCESSOR_MAP = {
12
- [NODE_TYPE.CIRCLE]: {
13
- ...COMMON_DECKGL_PROPS,
14
- getFillColor: 'fill',
15
- getLineColor: 'stroke',
16
- getLineWidth: 'strokeWidth',
17
- getRadius: 'radius'
18
- },
19
- [NODE_TYPE.RECTANGLE]: {
20
- ...COMMON_DECKGL_PROPS,
21
- getWidth: 'width',
22
- getHeight: 'height',
23
- getFillColor: 'fill',
24
- getLineColor: 'stroke',
25
- getLineWidth: 'strokeWidth'
26
- },
27
- [NODE_TYPE.ROUNDED_RECTANGLE]: {
28
- ...COMMON_DECKGL_PROPS,
29
- getCornerRadius: 'cornerRadius',
30
- getRadius: 'radius',
31
- getWidth: 'width',
32
- getHeight: 'height',
33
- getFillColor: 'fill',
34
- getLineColor: 'stroke',
35
- getLineWidth: 'strokeWidth'
36
- },
37
- [NODE_TYPE.PATH_ROUNDED_RECTANGLE]: {
38
- ...COMMON_DECKGL_PROPS,
39
- getWidth: 'width',
40
- getHeight: 'height',
41
- getFillColor: 'fill',
42
- getLineColor: 'stroke',
43
- getLineWidth: 'strokeWidth',
44
- getCornerRadius: 'cornerRadius'
45
- },
46
- [NODE_TYPE.LABEL]: {
47
- ...COMMON_DECKGL_PROPS,
48
- getColor: 'color',
49
- getText: 'text',
50
- getSize: 'fontSize',
51
- getTextAnchor: 'textAnchor',
52
- getAlignmentBaseline: 'alignmentBaseline',
53
- getAngle: 'angle',
54
- scaleWithZoom: 'scaleWithZoom',
55
- textMaxWidth: 'textMaxWidth',
56
- textWordBreak: 'textWordBreak',
57
- textSizeMinPixels: 'textSizeMinPixels'
58
- },
59
- [NODE_TYPE.MARKER]: {
60
- ...COMMON_DECKGL_PROPS,
61
- getColor: 'fill',
62
- getSize: 'size',
63
- getMarker: 'marker',
64
- scaleWithZoom: 'scaleWithZoom'
65
- },
66
- // --------- Edge related ---------
67
- Edge: {
68
- getColor: 'stroke',
69
- getWidth: 'strokeWidth'
70
- },
71
- [EDGE_DECORATOR_TYPE.LABEL]: {
72
- getColor: 'color',
73
- getText: 'text',
74
- getSize: 'fontSize',
75
- getTextAnchor: 'textAnchor',
76
- getAlignmentBaseline: 'alignmentBaseline',
77
- scaleWithZoom: 'scaleWithZoom',
78
- textMaxWidth: 'textMaxWidth',
79
- textWordBreak: 'textWordBreak',
80
- textSizeMinPixels: 'textSizeMinPixels'
81
- },
82
- [EDGE_DECORATOR_TYPE.FLOW]: {
83
- getColor: 'color',
84
- getWidth: 'width',
85
- getSpeed: 'speed',
86
- getTailLength: 'tailLength'
87
- }
88
- };
89
- const DECKGL_UPDATE_TRIGGERS = {
90
- [NODE_TYPE.CIRCLE]: ['getFillColor', 'getRadius', 'getLineColor', 'getLineWidth'],
91
- [NODE_TYPE.RECTANGLE]: ['getFillColor', 'getLineColor', 'getLineWidth'],
92
- [NODE_TYPE.ROUNDED_RECTANGLE]: [
93
- 'getFillColor',
94
- 'getLineColor',
95
- 'getLineWidth',
96
- 'getCornerRadius'
97
- ],
98
- [NODE_TYPE.PATH_ROUNDED_RECTANGLE]: [
99
- 'getFillColor',
100
- 'getLineColor',
101
- 'getLineWidth',
102
- 'getCornerRadius'
103
- ],
104
- [NODE_TYPE.LABEL]: [
105
- 'getColor',
106
- 'getText',
107
- 'getSize',
108
- 'getTextAnchor',
109
- 'getAlignmentBaseline',
110
- 'getAngle'
111
- ],
112
- [NODE_TYPE.MARKER]: ['getColor', 'getSize', 'getMarker'],
113
- Edge: ['getColor', 'getWidth'],
114
- [EDGE_DECORATOR_TYPE.LABEL]: [
115
- 'getColor',
116
- 'getText',
117
- 'getSize',
118
- 'getTextAnchor',
119
- 'getAlignmentBaseline'
120
- ],
121
- [EDGE_DECORATOR_TYPE.FLOW]: ['getColor', 'getWidth', 'getSpeed', 'getTailLength']
122
- };
123
- export class Stylesheet {
124
- type;
125
- properties;
126
- constructor(style, updateTriggers) {
127
- const { type: layerType, ...restStyle } = style;
128
- if (!layerType || !(layerType in DECKGL_ACCESSOR_MAP)) {
129
- throw new Error(`illegal type: ${layerType}`);
130
- }
131
- this.type = layerType;
132
- // style = {
133
- // type: 'circle',
134
- // fill: 'red'
135
- // radius: 5,
136
- //
137
- // ':hover': {
138
- // fill: 'blue',
139
- // stroke: 'red'
140
- // }
141
- // };
142
- // step 1: extract 'rules': default, hover
143
- // default: {fill: 'red', radius: 5};
144
- // hover: {fill: 'blue', stroke: 'red'};
145
- const rules = Object.keys(restStyle).reduce((res, key) => {
146
- const isSelector = key.startsWith(':');
147
- if (isSelector) {
148
- const state = key.substring(1);
149
- res[state] = restStyle[key];
150
- return res;
151
- }
152
- res.default[key] = restStyle[key];
153
- return res;
154
- }, {
155
- default: {}
156
- });
157
- // step 2: extract all unique attributes from rules
158
- // attributes: ['fill', 'radius', 'stroke']
159
- const attributes = Object.values(rules).reduce((res, rule) => {
160
- const attrs = Object.keys(rule);
161
- const set = new Set([...res, ...attrs]);
162
- return Array.from(set);
163
- }, []);
164
- // step 3: create a attribute map as:
165
- // attrMap = {
166
- // fill: {default: 'red', hover: 'blue'},
167
- // radius: {default: 5},
168
- // stroke: {hover: 'red'},
169
- // }
170
- const attrMap = attributes.reduce((res, attr) => {
171
- res[attr] = Object.entries(rules).reduce((acc, entry) => {
172
- const [state, rule] = entry;
173
- if (typeof rule[attr] !== 'undefined') {
174
- acc[state] = rule[attr];
175
- }
176
- return acc;
177
- }, {});
178
- return res;
179
- }, {});
180
- // step 4: simplify the attribute map if only default exists for the attribute
181
- // simplifiedStyleMap = {
182
- // fill: {default: 'red', hover: 'blue'},
183
- // radius: 5,
184
- // stroke: {hover: 'red'},
185
- // }
186
- const simplifiedStyleMap = Object.entries(attrMap).reduce((res, entry) => {
187
- const [attr, valueMap] = entry;
188
- const onlyDefault = Object.keys(valueMap).length === 1 && valueMap.default !== undefined;
189
- if (onlyDefault) {
190
- res[attr] = valueMap.default;
191
- return res;
192
- }
193
- res[attr] = valueMap;
194
- return res;
195
- }, {});
196
- // step 5: create style property
197
- // if the propety only maps to default state => return value only
198
- // if the property maps to other states => return accessor function
199
- // start to parse properties
200
- this.properties = {};
201
- for (const key in simplifiedStyleMap) {
202
- this.properties[key] = new StyleProperty({
203
- key,
204
- value: simplifiedStyleMap[key],
205
- updateTrigger: updateTriggers.stateUpdateTrigger
206
- });
207
- }
208
- }
209
- _getProperty(deckglAccessor) {
210
- const map = DECKGL_ACCESSOR_MAP[this.type];
211
- if (!map) {
212
- throw new Error(`illegal type: ${this.type}`);
213
- }
214
- const styleProp = map[deckglAccessor];
215
- if (!styleProp) {
216
- log.error(`Invalid DeckGL accessor: ${deckglAccessor}`)();
217
- throw new Error(`Invalid DeckGL accessor: ${deckglAccessor}`);
218
- }
219
- return this.properties[styleProp];
220
- }
221
- getDeckGLAccessor(deckglAccessor) {
222
- const property = this._getProperty(deckglAccessor);
223
- // get the value
224
- if (property) {
225
- return property.getValue();
226
- }
227
- // return default value
228
- const styleProp = DECKGL_ACCESSOR_MAP[this.type][deckglAccessor];
229
- return StyleProperty.getDefault(styleProp);
230
- }
231
- getDeckGLAccessorUpdateTrigger(deckglAccessor) {
232
- const property = this._getProperty(deckglAccessor);
233
- // get the value
234
- if (property) {
235
- return property.getUpdateTrigger();
236
- }
237
- return false;
238
- }
239
- getDeckGLAccessors() {
240
- const accessorMap = DECKGL_ACCESSOR_MAP[this.type];
241
- return Object.keys(accessorMap).reduce((res, accessor) => {
242
- res[accessor] = this.getDeckGLAccessor(accessor);
243
- return res;
244
- }, {});
245
- }
246
- getDeckGLUpdateTriggers() {
247
- return DECKGL_UPDATE_TRIGGERS[this.type].reduce((res, accessor) => {
248
- res[accessor] = this.getDeckGLAccessorUpdateTrigger(accessor);
249
- return res;
250
- }, {});
251
- }
252
- }
253
- //# sourceMappingURL=style-sheet.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"style-sheet.js","sourceRoot":"","sources":["../../src/style/style-sheet.ts"],"names":[],"mappings":"AAAA,oBAAoB;AACpB,+BAA+B;AAC/B,oCAAoC;AAEpC,OAAO,EAAC,aAAa,EAAC,4BAAyB;AAE/C,OAAO,EAAC,SAAS,EAAE,mBAAmB,EAAC,6BAA0B;AACjE,OAAO,EAAC,GAAG,EAAC,wBAAqB;AAEjC,MAAM,mBAAmB,GAAG;IAC1B,SAAS,EAAE,QAAQ;IACnB,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF,MAAM,mBAAmB,GAAG;IAC1B,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;QAClB,GAAG,mBAAmB;QACtB,YAAY,EAAE,MAAM;QACpB,YAAY,EAAE,QAAQ;QACtB,YAAY,EAAE,aAAa;QAC3B,SAAS,EAAE,QAAQ;KACpB;IAED,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE;QACrB,GAAG,mBAAmB;QACtB,QAAQ,EAAE,OAAO;QACjB,SAAS,EAAE,QAAQ;QACnB,YAAY,EAAE,MAAM;QACpB,YAAY,EAAE,QAAQ;QACtB,YAAY,EAAE,aAAa;KAC5B;IAED,CAAC,SAAS,CAAC,iBAAiB,CAAC,EAAE;QAC7B,GAAG,mBAAmB;QACtB,eAAe,EAAE,cAAc;QAC/B,SAAS,EAAE,QAAQ;QACnB,QAAQ,EAAE,OAAO;QACjB,SAAS,EAAE,QAAQ;QACnB,YAAY,EAAE,MAAM;QACpB,YAAY,EAAE,QAAQ;QACtB,YAAY,EAAE,aAAa;KAC5B;IAED,CAAC,SAAS,CAAC,sBAAsB,CAAC,EAAE;QAClC,GAAG,mBAAmB;QACtB,QAAQ,EAAE,OAAO;QACjB,SAAS,EAAE,QAAQ;QACnB,YAAY,EAAE,MAAM;QACpB,YAAY,EAAE,QAAQ;QACtB,YAAY,EAAE,aAAa;QAC3B,eAAe,EAAE,cAAc;KAChC;IAED,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;QACjB,GAAG,mBAAmB;QACtB,QAAQ,EAAE,OAAO;QACjB,OAAO,EAAE,MAAM;QACf,OAAO,EAAE,UAAU;QACnB,aAAa,EAAE,YAAY;QAC3B,oBAAoB,EAAE,mBAAmB;QACzC,QAAQ,EAAE,OAAO;QACjB,aAAa,EAAE,eAAe;QAC9B,YAAY,EAAE,cAAc;QAC5B,aAAa,EAAE,eAAe;QAC9B,iBAAiB,EAAE,mBAAmB;KACvC;IAED,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;QAClB,GAAG,mBAAmB;QACtB,QAAQ,EAAE,MAAM;QAChB,OAAO,EAAE,MAAM;QACf,SAAS,EAAE,QAAQ;QACnB,aAAa,EAAE,eAAe;KAC/B;IAED,mCAAmC;IACnC,IAAI,EAAE;QACJ,QAAQ,EAAE,QAAQ;QAClB,QAAQ,EAAE,aAAa;KACxB;IACD,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE;QAC3B,QAAQ,EAAE,OAAO;QACjB,OAAO,EAAE,MAAM;QACf,OAAO,EAAE,UAAU;QACnB,aAAa,EAAE,YAAY;QAC3B,oBAAoB,EAAE,mBAAmB;QACzC,aAAa,EAAE,eAAe;QAC9B,YAAY,EAAE,cAAc;QAC5B,aAAa,EAAE,eAAe;QAC9B,iBAAiB,EAAE,mBAAmB;KACvC;IACD,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE;QAC1B,QAAQ,EAAE,OAAO;QACjB,QAAQ,EAAE,OAAO;QACjB,QAAQ,EAAE,OAAO;QACjB,aAAa,EAAE,YAAY;KAC5B;CACF,CAAC;AAEF,MAAM,sBAAsB,GAAG;IAC7B,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,cAAc,CAAC;IACjF,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,CAAC,cAAc,EAAE,cAAc,EAAE,cAAc,CAAC;IACvE,CAAC,SAAS,CAAC,iBAAiB,CAAC,EAAE;QAC7B,cAAc;QACd,cAAc;QACd,cAAc;QACd,iBAAiB;KAClB;IACD,CAAC,SAAS,CAAC,sBAAsB,CAAC,EAAE;QAClC,cAAc;QACd,cAAc;QACd,cAAc;QACd,iBAAiB;KAClB;IACD,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;QACjB,UAAU;QACV,SAAS;QACT,SAAS;QACT,eAAe;QACf,sBAAsB;QACtB,UAAU;KACX;IACD,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,WAAW,CAAC;IACxD,IAAI,EAAE,CAAC,UAAU,EAAE,UAAU,CAAC;IAC9B,CAAC,mBAAmB,CAAC,KAAK,CAAC,EAAE;QAC3B,UAAU;QACV,SAAS;QACT,SAAS;QACT,eAAe;QACf,sBAAsB;KACvB;IACD,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,eAAe,CAAC;CAClF,CAAC;AAEF,MAAM,OAAO,UAAU;IACrB,IAAI,CAAM;IACV,UAAU,CAAM;IAChB,YAAY,KAAK,EAAE,cAAc;QAC/B,MAAM,EAAC,IAAI,EAAE,SAAS,EAAE,GAAG,SAAS,EAAC,GAAG,KAAK,CAAC;QAC9C,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,IAAI,mBAAmB,CAAC,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,iBAAiB,SAAS,EAAE,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;QAEtB,YAAY;QACZ,mBAAmB;QACnB,eAAe;QACf,cAAc;QACd,EAAE;QACF,eAAe;QACf,mBAAmB;QACnB,mBAAmB;QACnB,KAAK;QACL,KAAK;QACL,0CAA0C;QAC1C,qCAAqC;QACrC,wCAAwC;QACxC,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,MAAM,CACzC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACX,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACvC,IAAI,UAAU,EAAE,CAAC;gBACf,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;gBAC/B,GAAG,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;gBAC5B,OAAO,GAAG,CAAC;YACb,CAAC;YACD,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;YAClC,OAAO,GAAG,CAAC;QACb,CAAC,EACD;YACE,OAAO,EAAE,EAAE;SACZ,CACF,CAAC;QAEF,mDAAmD;QACnD,2CAA2C;QAC3C,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YAC3D,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,GAAI,GAAW,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;YACjD,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACzB,CAAC,EAAE,EAAE,CAAC,CAAC;QACP,qCAAqC;QACrC,cAAc;QACd,0CAA0C;QAC1C,yBAAyB;QACzB,2BAA2B;QAC3B,IAAI;QACJ,MAAM,OAAO,GAAI,UAAkB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YACvD,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;gBACtD,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC;gBAC5B,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,WAAW,EAAE,CAAC;oBACtC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC1B,CAAC;gBACD,OAAO,GAAG,CAAC;YACb,CAAC,EAAE,EAAE,CAAC,CAAC;YACP,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAE,CAAC,CAAC;QAEP,8EAA8E;QAC9E,yBAAyB;QACzB,0CAA0C;QAC1C,cAAc;QACd,2BAA2B;QAC3B,IAAI;QACJ,MAAM,kBAAkB,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;YACvE,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,KAAY,CAAC;YACtC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,OAAO,KAAK,SAAS,CAAC;YACzF,IAAI,WAAW,EAAE,CAAC;gBAChB,GAAG,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC;gBAC7B,OAAO,GAAG,CAAC;YACb,CAAC;YACD,GAAG,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC;YACrB,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAE,CAAC,CAAC;QAEP,gCAAgC;QAChC,iEAAiE;QACjE,mEAAmE;QAEnE,4BAA4B;QAC5B,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,KAAK,MAAM,GAAG,IAAI,kBAAkB,EAAE,CAAC;YACrC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,IAAI,aAAa,CAAC;gBACvC,GAAG;gBACH,KAAK,EAAE,kBAAkB,CAAC,GAAG,CAAC;gBAC9B,aAAa,EAAE,cAAc,CAAC,kBAAkB;aACjD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,YAAY,CAAC,cAAc;QACzB,MAAM,GAAG,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAChD,CAAC;QACD,MAAM,SAAS,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC;QACtC,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,GAAG,CAAC,KAAK,CAAC,4BAA4B,cAAc,EAAE,CAAC,EAAE,CAAC;YAC1D,MAAM,IAAI,KAAK,CAAC,4BAA4B,cAAc,EAAE,CAAC,CAAC;QAChE,CAAC;QACD,OAAO,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IAED,iBAAiB,CAAC,cAAc;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;QACnD,gBAAgB;QAChB,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAC7B,CAAC;QACD,uBAAuB;QACvB,MAAM,SAAS,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,cAAc,CAAC,CAAC;QACjE,OAAO,aAAa,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC7C,CAAC;IAED,8BAA8B,CAAC,cAAc;QAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;QACnD,gBAAgB;QAChB,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,QAAQ,CAAC,gBAAgB,EAAE,CAAC;QACrC,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,kBAAkB;QAChB,MAAM,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,OAAO,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE;YACvD,GAAG,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YACjD,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAE,CAAC,CAAC;IACT,CAAC;IAED,uBAAuB;QACrB,OAAO,sBAAsB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE;YAChE,GAAG,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,8BAA8B,CAAC,QAAQ,CAAC,CAAC;YAC9D,OAAO,GAAG,CAAC;QACb,CAAC,EAAE,EAAE,CAAC,CAAC;IACT,CAAC;CACF"}