@multiplekex/shallot 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (196) hide show
  1. package/dist/core/builder.d.ts +25 -0
  2. package/dist/core/builder.d.ts.map +1 -0
  3. package/dist/core/builder.js +88 -0
  4. package/dist/core/builder.js.map +1 -0
  5. package/dist/core/component.d.ts +29 -0
  6. package/dist/core/component.d.ts.map +1 -0
  7. package/dist/core/component.js +36 -0
  8. package/dist/core/component.js.map +1 -0
  9. package/dist/core/index.d.ts +13 -0
  10. package/dist/core/index.d.ts.map +1 -0
  11. package/dist/core/math.d.ts +32 -0
  12. package/dist/core/math.d.ts.map +1 -0
  13. package/dist/core/math.js +39 -0
  14. package/dist/core/math.js.map +1 -0
  15. package/dist/core/relation.d.ts +16 -0
  16. package/dist/core/relation.d.ts.map +1 -0
  17. package/dist/core/relation.js +32 -0
  18. package/dist/core/relation.js.map +1 -0
  19. package/dist/core/resource.d.ts +9 -0
  20. package/dist/core/resource.d.ts.map +1 -0
  21. package/dist/core/resource.js +12 -0
  22. package/dist/core/resource.js.map +1 -0
  23. package/dist/core/runtime.d.ts +13 -0
  24. package/dist/core/runtime.d.ts.map +1 -0
  25. package/dist/core/runtime.js +118 -0
  26. package/dist/core/runtime.js.map +1 -0
  27. package/dist/core/scheduler.d.ts +47 -0
  28. package/dist/core/scheduler.d.ts.map +1 -0
  29. package/dist/core/scheduler.js +138 -0
  30. package/dist/core/scheduler.js.map +1 -0
  31. package/dist/core/state.d.ts +62 -0
  32. package/dist/core/state.d.ts.map +1 -0
  33. package/dist/core/state.js +185 -0
  34. package/dist/core/state.js.map +1 -0
  35. package/dist/core/strings.d.ts +3 -0
  36. package/dist/core/strings.d.ts.map +1 -0
  37. package/dist/core/strings.js +11 -0
  38. package/dist/core/strings.js.map +1 -0
  39. package/dist/core/types.d.ts +33 -0
  40. package/dist/core/types.d.ts.map +1 -0
  41. package/dist/core/xml.d.ts +42 -0
  42. package/dist/core/xml.d.ts.map +1 -0
  43. package/dist/core/xml.js +349 -0
  44. package/dist/core/xml.js.map +1 -0
  45. package/dist/extras/arrows/index.d.ts +33 -0
  46. package/dist/extras/arrows/index.d.ts.map +1 -0
  47. package/dist/extras/arrows/index.js +288 -0
  48. package/dist/extras/arrows/index.js.map +1 -0
  49. package/dist/extras/index.d.ts +5 -0
  50. package/dist/extras/index.d.ts.map +1 -0
  51. package/dist/extras/index.js +31 -0
  52. package/dist/extras/index.js.map +1 -0
  53. package/dist/extras/lines/index.d.ts +36 -0
  54. package/dist/extras/lines/index.d.ts.map +1 -0
  55. package/dist/extras/lines/index.js +288 -0
  56. package/dist/extras/lines/index.js.map +1 -0
  57. package/dist/extras/orbit/index.d.ts +20 -0
  58. package/dist/extras/orbit/index.d.ts.map +1 -0
  59. package/dist/extras/orbit/index.js +93 -0
  60. package/dist/extras/orbit/index.js.map +1 -0
  61. package/dist/extras/text/index.d.ts +64 -0
  62. package/dist/extras/text/index.d.ts.map +1 -0
  63. package/dist/extras/text/index.js +423 -0
  64. package/dist/extras/text/index.js.map +1 -0
  65. package/dist/index.d.ts +4 -0
  66. package/dist/index.d.ts.map +1 -0
  67. package/dist/index.js +187 -0
  68. package/dist/index.js.map +1 -0
  69. package/dist/rust/transforms/pkg/shallot_transforms.js +107 -0
  70. package/dist/rust/transforms/pkg/shallot_transforms.js.map +1 -0
  71. package/dist/standard/compute/graph.d.ts +37 -0
  72. package/dist/standard/compute/graph.d.ts.map +1 -0
  73. package/dist/standard/compute/graph.js +85 -0
  74. package/dist/standard/compute/graph.js.map +1 -0
  75. package/dist/standard/compute/index.d.ts +21 -0
  76. package/dist/standard/compute/index.d.ts.map +1 -0
  77. package/dist/standard/compute/index.js +81 -0
  78. package/dist/standard/compute/index.js.map +1 -0
  79. package/dist/standard/defaults.d.ts +3 -0
  80. package/dist/standard/defaults.d.ts.map +1 -0
  81. package/dist/standard/defaults.js +18 -0
  82. package/dist/standard/defaults.js.map +1 -0
  83. package/dist/standard/index.d.ts +8 -0
  84. package/dist/standard/index.d.ts.map +1 -0
  85. package/dist/standard/input/index.d.ts +5 -0
  86. package/dist/standard/input/index.d.ts.map +1 -0
  87. package/dist/standard/input/index.js +70 -0
  88. package/dist/standard/input/index.js.map +1 -0
  89. package/dist/standard/loading/index.d.ts +7 -0
  90. package/dist/standard/loading/index.d.ts.map +1 -0
  91. package/dist/standard/loading/index.js +91 -0
  92. package/dist/standard/loading/index.js.map +1 -0
  93. package/dist/standard/render/camera.d.ts +36 -0
  94. package/dist/standard/render/camera.d.ts.map +1 -0
  95. package/dist/standard/render/camera.js +71 -0
  96. package/dist/standard/render/camera.js.map +1 -0
  97. package/dist/standard/render/forward.d.ts +30 -0
  98. package/dist/standard/render/forward.d.ts.map +1 -0
  99. package/dist/standard/render/forward.js +158 -0
  100. package/dist/standard/render/forward.js.map +1 -0
  101. package/dist/standard/render/index.d.ts +22 -0
  102. package/dist/standard/render/index.d.ts.map +1 -0
  103. package/dist/standard/render/index.js +153 -0
  104. package/dist/standard/render/index.js.map +1 -0
  105. package/dist/standard/render/light.d.ts +25 -0
  106. package/dist/standard/render/light.d.ts.map +1 -0
  107. package/dist/standard/render/light.js +48 -0
  108. package/dist/standard/render/light.js.map +1 -0
  109. package/dist/standard/render/mesh/box.d.ts +3 -0
  110. package/dist/standard/render/mesh/box.d.ts.map +1 -0
  111. package/dist/standard/render/mesh/box.js +190 -0
  112. package/dist/standard/render/mesh/box.js.map +1 -0
  113. package/dist/standard/render/mesh/index.d.ts +52 -0
  114. package/dist/standard/render/mesh/index.d.ts.map +1 -0
  115. package/dist/standard/render/mesh/index.js +158 -0
  116. package/dist/standard/render/mesh/index.js.map +1 -0
  117. package/dist/standard/render/mesh/plane.d.ts +3 -0
  118. package/dist/standard/render/mesh/plane.d.ts.map +1 -0
  119. package/dist/standard/render/mesh/plane.js +33 -0
  120. package/dist/standard/render/mesh/plane.js.map +1 -0
  121. package/dist/standard/render/mesh/sphere.d.ts +3 -0
  122. package/dist/standard/render/mesh/sphere.d.ts.map +1 -0
  123. package/dist/standard/render/mesh/sphere.js +25 -0
  124. package/dist/standard/render/mesh/sphere.js.map +1 -0
  125. package/dist/standard/render/postprocess.d.ts +11 -0
  126. package/dist/standard/render/postprocess.d.ts.map +1 -0
  127. package/dist/standard/render/postprocess.js +190 -0
  128. package/dist/standard/render/postprocess.js.map +1 -0
  129. package/dist/standard/render/scene.d.ts +8 -0
  130. package/dist/standard/render/scene.d.ts.map +1 -0
  131. package/dist/standard/render/scene.js +67 -0
  132. package/dist/standard/render/scene.js.map +1 -0
  133. package/dist/standard/transforms/index.d.ts +27 -0
  134. package/dist/standard/transforms/index.d.ts.map +1 -0
  135. package/dist/standard/transforms/index.js +122 -0
  136. package/dist/standard/transforms/index.js.map +1 -0
  137. package/dist/standard/transforms/wasm.d.ts +17 -0
  138. package/dist/standard/transforms/wasm.d.ts.map +1 -0
  139. package/dist/standard/transforms/wasm.js +31 -0
  140. package/dist/standard/transforms/wasm.js.map +1 -0
  141. package/dist/standard/tween/easing.d.ts +5 -0
  142. package/dist/standard/tween/easing.d.ts.map +1 -0
  143. package/dist/standard/tween/easing.js +80 -0
  144. package/dist/standard/tween/easing.js.map +1 -0
  145. package/dist/standard/tween/index.d.ts +4 -0
  146. package/dist/standard/tween/index.d.ts.map +1 -0
  147. package/dist/standard/tween/sequence.d.ts +20 -0
  148. package/dist/standard/tween/sequence.d.ts.map +1 -0
  149. package/dist/standard/tween/sequence.js +95 -0
  150. package/dist/standard/tween/sequence.js.map +1 -0
  151. package/dist/standard/tween/tween.d.ts +28 -0
  152. package/dist/standard/tween/tween.d.ts.map +1 -0
  153. package/dist/standard/tween/tween.js +136 -0
  154. package/dist/standard/tween/tween.js.map +1 -0
  155. package/package.json +63 -0
  156. package/src/core/builder.ts +148 -0
  157. package/src/core/component.ts +71 -0
  158. package/src/core/index.ts +92 -0
  159. package/src/core/math.ts +128 -0
  160. package/src/core/relation.ts +46 -0
  161. package/src/core/resource.ts +18 -0
  162. package/src/core/runtime.ts +185 -0
  163. package/src/core/scheduler.ts +238 -0
  164. package/src/core/state.ts +295 -0
  165. package/src/core/strings.ts +10 -0
  166. package/src/core/types.ts +37 -0
  167. package/src/core/xml.ts +676 -0
  168. package/src/extras/arrows/index.ts +363 -0
  169. package/src/extras/index.ts +4 -0
  170. package/src/extras/lines/index.ts +368 -0
  171. package/src/extras/orbit/index.ts +133 -0
  172. package/src/extras/text/index.ts +641 -0
  173. package/src/index.ts +3 -0
  174. package/src/standard/compute/graph.ts +165 -0
  175. package/src/standard/compute/index.ts +116 -0
  176. package/src/standard/defaults.ts +17 -0
  177. package/src/standard/index.ts +7 -0
  178. package/src/standard/input/index.ts +142 -0
  179. package/src/standard/loading/index.ts +136 -0
  180. package/src/standard/render/camera.ts +87 -0
  181. package/src/standard/render/forward.ts +212 -0
  182. package/src/standard/render/index.ts +175 -0
  183. package/src/standard/render/light.ts +81 -0
  184. package/src/standard/render/mesh/box.ts +20 -0
  185. package/src/standard/render/mesh/index.ts +227 -0
  186. package/src/standard/render/mesh/plane.ts +11 -0
  187. package/src/standard/render/mesh/sphere.ts +40 -0
  188. package/src/standard/render/postprocess.ts +235 -0
  189. package/src/standard/render/scene.ts +116 -0
  190. package/src/standard/transforms/index.ts +184 -0
  191. package/src/standard/transforms/wasm.ts +61 -0
  192. package/src/standard/tween/easing.ts +169 -0
  193. package/src/standard/tween/index.ts +13 -0
  194. package/src/standard/tween/sequence.ts +142 -0
  195. package/src/standard/tween/tween.ts +265 -0
  196. package/src/vite-env.d.ts +6 -0
@@ -0,0 +1,363 @@
1
+ import { MAX_ENTITIES, resource, type Plugin, type State, type System } from "../../core";
2
+ import { setTraits, type FieldAccessor } from "../../core/component";
3
+ import {
4
+ Compute,
5
+ ComputePlugin,
6
+ createEntityIdBuffer,
7
+ type ComputeNode,
8
+ type ExecutionContext,
9
+ } from "../../standard/compute";
10
+ import { Render, RenderPlugin } from "../../standard/render";
11
+ import { Transform } from "../../standard/transforms";
12
+ import { Line, Lines, LinesPlugin } from "../lines";
13
+
14
+ export const ArrowData = {
15
+ data: new Float32Array(MAX_ENTITIES * 4),
16
+ };
17
+
18
+ interface ArrowProxy extends Array<number>, FieldAccessor {}
19
+
20
+ function arrowProxy(offset: number): ArrowProxy {
21
+ const data = ArrowData.data;
22
+
23
+ function getValue(eid: number): number {
24
+ return data[eid * 4 + offset];
25
+ }
26
+
27
+ function setValue(eid: number, value: number): void {
28
+ data[eid * 4 + offset] = value;
29
+ }
30
+
31
+ return new Proxy([] as unknown as ArrowProxy, {
32
+ get(_, prop) {
33
+ if (prop === "get") return getValue;
34
+ if (prop === "set") return setValue;
35
+ const eid = Number(prop);
36
+ if (Number.isNaN(eid)) return undefined;
37
+ return getValue(eid);
38
+ },
39
+ set(_, prop, value) {
40
+ const eid = Number(prop);
41
+ if (Number.isNaN(eid)) return false;
42
+ setValue(eid, value);
43
+ return true;
44
+ },
45
+ });
46
+ }
47
+
48
+ export const Arrow: {
49
+ start: ArrowProxy;
50
+ end: ArrowProxy;
51
+ size: ArrowProxy;
52
+ } = {
53
+ start: arrowProxy(0),
54
+ end: arrowProxy(1),
55
+ size: arrowProxy(2),
56
+ };
57
+
58
+ setTraits(Arrow, {
59
+ defaults: () => ({
60
+ start: 0,
61
+ end: 1,
62
+ size: 1,
63
+ }),
64
+ accessors: {
65
+ start: Arrow.start,
66
+ end: Arrow.end,
67
+ size: Arrow.size,
68
+ },
69
+ });
70
+
71
+ export interface ArrowsConfig {
72
+ scene: GPUBuffer;
73
+ arrows: GPUBuffer;
74
+ lines: GPUBuffer;
75
+ matrices: GPUBuffer;
76
+ entityIds: GPUBuffer;
77
+ getCount: () => number;
78
+ }
79
+
80
+ const END_FLAG = 0x80000000;
81
+
82
+ export const arrowShader = /* wgsl */ `
83
+ struct VertexOutput {
84
+ @builtin(position) position: vec4<f32>,
85
+ @location(0) color: vec4<f32>,
86
+ }
87
+
88
+ struct Scene {
89
+ viewProj: mat4x4<f32>,
90
+ cameraWorld: mat4x4<f32>,
91
+ }
92
+
93
+ struct ArrowData {
94
+ start: f32,
95
+ end: f32,
96
+ size: f32,
97
+ _pad: f32,
98
+ }
99
+
100
+ struct LineData {
101
+ offset: vec3<f32>,
102
+ thickness: f32,
103
+ visible: f32,
104
+ _pad1: f32,
105
+ _pad2: f32,
106
+ opacity: f32,
107
+ color: vec4<f32>,
108
+ }
109
+
110
+ const END_FLAG: u32 = 0x80000000u;
111
+
112
+ @group(0) @binding(0) var<uniform> scene: Scene;
113
+ @group(0) @binding(1) var<storage, read> entityIds: array<u32>;
114
+ @group(0) @binding(2) var<storage, read> arrows: array<ArrowData>;
115
+ @group(0) @binding(3) var<storage, read> lines: array<LineData>;
116
+ @group(0) @binding(4) var<storage, read> matrices: array<mat4x4<f32>>;
117
+
118
+ @vertex
119
+ fn vs(@builtin(vertex_index) vid: u32, @builtin(instance_index) iid: u32) -> VertexOutput {
120
+ let packed = entityIds[iid];
121
+ let isEnd = (packed & END_FLAG) != 0u;
122
+ let eid = packed & ~END_FLAG;
123
+
124
+ let arrow = arrows[eid];
125
+ let line = lines[eid];
126
+ let transform = matrices[eid];
127
+
128
+ let start = transform[3].xyz;
129
+ let rotation = mat3x3<f32>(transform[0].xyz, transform[1].xyz, transform[2].xyz);
130
+ let end = start + rotation * line.offset;
131
+
132
+ // Project both points to clip space
133
+ let startClip = scene.viewProj * vec4(start, 1.0);
134
+ let endClip = scene.viewProj * vec4(end, 1.0);
135
+
136
+ // Convert to NDC
137
+ let startNDC = startClip.xy / startClip.w;
138
+ let endNDC = endClip.xy / endClip.w;
139
+
140
+ // Direction in screen space
141
+ let dir = endNDC - startNDC;
142
+ let len = length(dir);
143
+ let normDir = select(vec2(1.0, 0.0), dir / len, len > 0.0001);
144
+
145
+ // Perpendicular in screen space (this naturally faces camera)
146
+ let perp = vec2(-normDir.y, normDir.x);
147
+
148
+ // Arrow size scales with sqrt of line thickness and world-space distance to camera
149
+ let cameraPos = scene.cameraWorld[3].xyz;
150
+ let midpoint = (start + end) * 0.5;
151
+ let distToCamera = length(cameraPos - midpoint);
152
+ let refDist = 15.0;
153
+ let rawScale = distToCamera / refDist;
154
+ let maxScale = 3.0;
155
+ let zoomScale = max(1.0, rawScale / (1.0 + rawScale / maxScale));
156
+ let baseSize = sqrt(line.thickness) * 0.008 * zoomScale;
157
+ let arrowLength = arrow.size * baseSize * 3.0;
158
+ let arrowWidth = arrow.size * baseSize * 1.5;
159
+
160
+ // Pick anchor position and direction based on which end
161
+ var anchorNDC: vec2<f32>;
162
+ var anchorDepth: f32;
163
+ var arrowDir: vec2<f32>;
164
+
165
+ if isEnd {
166
+ anchorNDC = endNDC;
167
+ anchorDepth = endClip.z / endClip.w;
168
+ arrowDir = normDir;
169
+ } else {
170
+ anchorNDC = startNDC;
171
+ anchorDepth = startClip.z / startClip.w;
172
+ arrowDir = -normDir;
173
+ }
174
+
175
+ // Build triangle centered on anchor (tip extends forward, base extends back)
176
+ let halfLen = arrowLength * 0.5;
177
+ var pos: vec2<f32>;
178
+ switch vid {
179
+ case 0u: { pos = anchorNDC + arrowDir * halfLen; }
180
+ case 1u: { pos = anchorNDC - arrowDir * halfLen + perp * arrowWidth; }
181
+ case 2u: { pos = anchorNDC - arrowDir * halfLen - perp * arrowWidth; }
182
+ default: { pos = anchorNDC; }
183
+ }
184
+
185
+ var out: VertexOutput;
186
+ out.position = vec4(pos, anchorDepth, 1.0);
187
+ out.color = vec4(line.color.rgb, line.color.a * line.opacity);
188
+ return out;
189
+ }
190
+
191
+ @fragment
192
+ fn fs(input: VertexOutput) -> @location(0) vec4<f32> {
193
+ return input.color;
194
+ }
195
+ `;
196
+
197
+ export function createArrowsPipeline(
198
+ device: GPUDevice,
199
+ format: GPUTextureFormat
200
+ ): GPURenderPipeline {
201
+ const module = device.createShaderModule({ code: arrowShader });
202
+
203
+ return device.createRenderPipeline({
204
+ layout: "auto",
205
+ vertex: {
206
+ module,
207
+ entryPoint: "vs",
208
+ },
209
+ fragment: {
210
+ module,
211
+ entryPoint: "fs",
212
+ targets: [
213
+ {
214
+ format,
215
+ blend: {
216
+ color: {
217
+ srcFactor: "src-alpha",
218
+ dstFactor: "one-minus-src-alpha",
219
+ operation: "add",
220
+ },
221
+ alpha: {
222
+ srcFactor: "one",
223
+ dstFactor: "one-minus-src-alpha",
224
+ operation: "add",
225
+ },
226
+ },
227
+ },
228
+ ],
229
+ },
230
+ primitive: {
231
+ topology: "triangle-list",
232
+ },
233
+ });
234
+ }
235
+
236
+ export function createArrowsNode(config: ArrowsConfig): ComputeNode {
237
+ let pipeline: GPURenderPipeline | null = null;
238
+ let bindGroup: GPUBindGroup | null = null;
239
+
240
+ return {
241
+ id: "arrows",
242
+ phase: "overlay",
243
+ inputs: [],
244
+ outputs: [],
245
+
246
+ execute(ctx: ExecutionContext) {
247
+ const count = config.getCount();
248
+ if (count === 0) return;
249
+
250
+ const { device, encoder, format } = ctx;
251
+ const targetView = ctx.getTextureView("scene") ?? ctx.canvasView;
252
+
253
+ if (!pipeline) {
254
+ pipeline = createArrowsPipeline(device, format);
255
+ }
256
+
257
+ if (!bindGroup) {
258
+ bindGroup = device.createBindGroup({
259
+ layout: pipeline.getBindGroupLayout(0),
260
+ entries: [
261
+ { binding: 0, resource: { buffer: config.scene } },
262
+ { binding: 1, resource: { buffer: config.entityIds } },
263
+ { binding: 2, resource: { buffer: config.arrows } },
264
+ { binding: 3, resource: { buffer: config.lines } },
265
+ { binding: 4, resource: { buffer: config.matrices } },
266
+ ],
267
+ });
268
+ }
269
+
270
+ const pass = encoder.beginRenderPass({
271
+ colorAttachments: [
272
+ {
273
+ view: targetView,
274
+ loadOp: "load" as const,
275
+ storeOp: "store" as const,
276
+ },
277
+ ],
278
+ });
279
+
280
+ pass.setPipeline(pipeline);
281
+ pass.setBindGroup(0, bindGroup);
282
+ pass.draw(3, count);
283
+ pass.end();
284
+ },
285
+ };
286
+ }
287
+
288
+ export interface ArrowsState {
289
+ buffer: GPUBuffer;
290
+ entityIds: GPUBuffer;
291
+ count: number;
292
+ }
293
+
294
+ export const Arrows = resource<ArrowsState>("arrows");
295
+
296
+ const arrowEntityIdArray = new Uint32Array(MAX_ENTITIES * 2);
297
+
298
+ const ArrowsSystem: System = {
299
+ group: "draw",
300
+
301
+ update(state: State) {
302
+ const compute = Compute.from(state);
303
+ const arrows = Arrows.from(state);
304
+ const lines = Lines.from(state);
305
+ if (!compute || !arrows || !lines) return;
306
+
307
+ const { device } = compute;
308
+
309
+ let count = 0;
310
+ for (const eid of state.query([Arrow, Line, Transform])) {
311
+ if (!Line.visible[eid]) continue;
312
+
313
+ if (Arrow.start[eid]) {
314
+ arrowEntityIdArray[count++] = eid;
315
+ }
316
+ if (Arrow.end[eid]) {
317
+ arrowEntityIdArray[count++] = eid | END_FLAG;
318
+ }
319
+ }
320
+
321
+ device.queue.writeBuffer(arrows.buffer, 0, ArrowData.data);
322
+ device.queue.writeBuffer(arrows.entityIds, 0, arrowEntityIdArray, 0, count);
323
+ arrows.count = count;
324
+ },
325
+ };
326
+
327
+ export const ArrowsPlugin: Plugin = {
328
+ systems: [ArrowsSystem],
329
+ components: { Arrow },
330
+ dependencies: [ComputePlugin, RenderPlugin, LinesPlugin],
331
+
332
+ initialize(state: State) {
333
+ const compute = Compute.from(state);
334
+ const render = Render.from(state);
335
+ const lines = Lines.from(state);
336
+ if (!compute || !render || !lines) return;
337
+
338
+ const { device } = compute;
339
+
340
+ const arrowsState: ArrowsState = {
341
+ buffer: device.createBuffer({
342
+ label: "arrows",
343
+ size: MAX_ENTITIES * 4 * 4,
344
+ usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_DST,
345
+ }),
346
+ entityIds: createEntityIdBuffer(device, MAX_ENTITIES * 2),
347
+ count: 0,
348
+ };
349
+
350
+ state.setResource(Arrows, arrowsState);
351
+
352
+ compute.graph.add(
353
+ createArrowsNode({
354
+ scene: render.scene,
355
+ arrows: arrowsState.buffer,
356
+ lines: lines.buffer,
357
+ matrices: render.matrices,
358
+ entityIds: arrowsState.entityIds,
359
+ getCount: () => arrowsState.count,
360
+ })
361
+ );
362
+ },
363
+ };
@@ -0,0 +1,4 @@
1
+ export * from "./orbit";
2
+ export * from "./lines";
3
+ export * from "./arrows";
4
+ export * from "./text";