@openbraininstitute/morphoviewer 0.30.1 → 0.31.1

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 (47) hide show
  1. package/dist/components/morpho-viewer-small-circuit/morpho-viewer-small-circuit.js +13 -8
  2. package/dist/components/morpho-viewer-small-circuit/morpho-viewer-small-circuit.module.css +10 -0
  3. package/dist/components/morpho-viewer-small-circuit/painter/camera.d.ts +2 -0
  4. package/dist/components/morpho-viewer-small-circuit/painter/camera.d.ts.map +1 -1
  5. package/dist/components/morpho-viewer-small-circuit/painter/camera.js +9 -1
  6. package/dist/components/morpho-viewer-small-circuit/painter/manager.d.ts +34 -5
  7. package/dist/components/morpho-viewer-small-circuit/painter/manager.d.ts.map +1 -1
  8. package/dist/components/morpho-viewer-small-circuit/painter/manager.js +267 -8
  9. package/dist/components/morpho-viewer-small-circuit/painter/painter-cell/material-diffuse-alpha.d.ts +26 -0
  10. package/dist/components/morpho-viewer-small-circuit/painter/painter-cell/material-diffuse-alpha.d.ts.map +1 -0
  11. package/dist/components/morpho-viewer-small-circuit/painter/painter-cell/material-diffuse-alpha.js +105 -0
  12. package/dist/components/morpho-viewer-small-circuit/painter/painter-cell/painter-cell.d.ts +3 -0
  13. package/dist/components/morpho-viewer-small-circuit/painter/painter-cell/painter-cell.d.ts.map +1 -1
  14. package/dist/components/morpho-viewer-small-circuit/painter/painter-cell/painter-cell.js +19 -4
  15. package/dist/components/morpho-viewer-small-circuit/painter/painter-synapses/painter-synapses.d.ts +6 -8
  16. package/dist/components/morpho-viewer-small-circuit/painter/painter-synapses/painter-synapses.d.ts.map +1 -1
  17. package/dist/components/morpho-viewer-small-circuit/painter/painter-synapses/painter-synapses.js +2 -1
  18. package/dist/components/morpho-viewer-small-circuit/types.d.ts +6 -2
  19. package/dist/components/morpho-viewer-small-circuit/types.d.ts.map +1 -1
  20. package/dist/components/morpho-viewer-somas-only/manager/adaptative-resolution.d.ts +6 -2
  21. package/dist/components/morpho-viewer-somas-only/manager/adaptative-resolution.d.ts.map +1 -1
  22. package/dist/components/morpho-viewer-somas-only/manager/adaptative-resolution.js +63 -31
  23. package/dist/components/morpho-viewer-somas-only/manager/manager.d.ts +30 -1
  24. package/dist/components/morpho-viewer-somas-only/manager/manager.d.ts.map +1 -1
  25. package/dist/components/morpho-viewer-somas-only/manager/manager.js +263 -13
  26. package/dist/components/morpho-viewer-somas-only/manager/painter-cell-infos.d.ts +5 -0
  27. package/dist/components/morpho-viewer-somas-only/manager/painter-cell-infos.d.ts.map +1 -1
  28. package/dist/components/morpho-viewer-somas-only/manager/painter-cell-infos.js +43 -6
  29. package/dist/components/morpho-viewer-somas-only/morpho-viewer-somas-only.js +13 -8
  30. package/dist/components/morpho-viewer-somas-only/morpho-viewer-somas-only.module.css +10 -0
  31. package/dist/components/morpho-viewer-somas-only/types.d.ts +6 -2
  32. package/dist/components/morpho-viewer-somas-only/types.d.ts.map +1 -1
  33. package/dist/components/types.d.ts +32 -0
  34. package/dist/components/types.d.ts.map +1 -1
  35. package/dist/index.d.ts +1 -1
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/package.json +2 -2
  38. package/dist/painters/overlay-interaction.d.ts +49 -0
  39. package/dist/painters/overlay-interaction.d.ts.map +1 -0
  40. package/dist/painters/overlay-interaction.js +432 -0
  41. package/dist/painters/overlay-surface.d.ts +18 -0
  42. package/dist/painters/overlay-surface.d.ts.map +1 -0
  43. package/dist/painters/overlay-surface.js +83 -0
  44. package/dist/painters/world-overlays.d.ts +25 -0
  45. package/dist/painters/world-overlays.d.ts.map +1 -0
  46. package/dist/painters/world-overlays.js +185 -0
  47. package/package.json +2 -2
@@ -0,0 +1,432 @@
1
+ import { TgdVec3, } from "@tolokoban/tgd";
2
+ const ROTATE_DEG_PER_PX = 0.35;
3
+ const PRIORITY = 10;
4
+ const MIN_HIT_PIXELS = 14;
5
+ function wantsRotate(evt) {
6
+ return Boolean(evt.shiftKey || evt.altKey || evt.buttonRight);
7
+ }
8
+ export class OverlayInteractionController {
9
+ constructor(options) {
10
+ this.options = options;
11
+ this.drag = null;
12
+ this.hoverId = null;
13
+ this.attached = false;
14
+ this.modifierRotate = false;
15
+ this.syncRaf = 0;
16
+ this.preventContextMenu = (evt) => {
17
+ evt.preventDefault();
18
+ };
19
+ this.handleKeyChange = (evt) => {
20
+ const next = evt.altKey || evt.shiftKey;
21
+ if (next === this.modifierRotate)
22
+ return;
23
+ this.modifierRotate = next;
24
+ if (!this.drag && this.hoverId) {
25
+ this.setCursor(next ? "move" : "grab");
26
+ }
27
+ };
28
+ this.handleHover = (evt) => {
29
+ var _a;
30
+ if (this.drag)
31
+ return true;
32
+ this.modifierRotate = wantsRotate(evt);
33
+ const hit = this.pickOverlay(evt.current.x, evt.current.y);
34
+ this.setHover((_a = hit === null || hit === void 0 ? void 0 : hit.id) !== null && _a !== void 0 ? _a : null);
35
+ if (hit)
36
+ this.setCursor(this.modifierRotate ? "move" : "grab");
37
+ return undefined;
38
+ };
39
+ this.handleMoveStart = (evt) => {
40
+ var _a, _b, _c;
41
+ if (evt.buttonMiddle)
42
+ return;
43
+ const rotate = wantsRotate(evt);
44
+ if (!rotate && !evt.buttonLeft && evt.buttons !== 0)
45
+ return;
46
+ const hit = this.pickOverlay(evt.current.x, evt.current.y);
47
+ if (!hit)
48
+ return;
49
+ const overlays = this.options.getOverlays();
50
+ const groupIndices = [];
51
+ for (let i = 0; i < overlays.length; i++) {
52
+ if (overlays[i].id === hit.id)
53
+ groupIndices.push(i);
54
+ }
55
+ if (groupIndices.length === 0)
56
+ return;
57
+ const origin = readOrigin(overlays, hit.id, hit.point);
58
+ const rotation = readRotation(overlays, hit.id);
59
+ const mode = rotate ? "rotate" : "translate";
60
+ const planeAnchor = hit.point.clone();
61
+ const startGrab = intersectViewPlane(this.options.context, evt.current.x, evt.current.y, planeAnchor);
62
+ const startCoords = groupIndices.map((index) => ensureMutableCoords(overlays[index].coordinates));
63
+ const liveCoords = startCoords.map((coords) => new Float32Array(coords));
64
+ const localCoords = mode === "rotate"
65
+ ? groupIndices.map((_, g) => toLocalCoords(startCoords[g], origin, rotation))
66
+ : [];
67
+ const next = overlays.slice();
68
+ for (let g = 0; g < groupIndices.length; g++) {
69
+ const index = groupIndices[g];
70
+ next[index] = Object.assign(Object.assign({}, overlays[index]), { coordinates: liveCoords[g], origin: [origin.x, origin.y, origin.z], rotation: Object.assign({}, rotation) });
71
+ }
72
+ this.options.setOverlays(next);
73
+ const orbit = this.options.getOrbit();
74
+ const orbitWasEnabled = (_a = orbit === null || orbit === void 0 ? void 0 : orbit.enabled) !== null && _a !== void 0 ? _a : true;
75
+ if (orbit)
76
+ orbit.enabled = false;
77
+ this.drag = {
78
+ id: hit.id,
79
+ mode,
80
+ startOrigin: origin.clone(),
81
+ origin: origin.clone(),
82
+ startRotation: Object.assign({}, rotation),
83
+ currentRotation: Object.assign({}, rotation),
84
+ startCoords,
85
+ liveCoords,
86
+ localCoords,
87
+ groupIndices,
88
+ startGrab,
89
+ planeAnchor,
90
+ startPointer: { x: evt.current.x, y: evt.current.y },
91
+ orbitWasEnabled,
92
+ };
93
+ this.setHover(hit.id);
94
+ this.setCursor(mode === "rotate" ? "move" : "grabbing");
95
+ (_c = (_b = this.options).onDragStart) === null || _c === void 0 ? void 0 : _c.call(_b);
96
+ return true;
97
+ };
98
+ this.handleMove = (evt) => {
99
+ const { drag } = this;
100
+ if (!drag)
101
+ return;
102
+ if (drag.mode === "translate") {
103
+ this.applyTranslate(evt.current.x, evt.current.y);
104
+ }
105
+ else {
106
+ this.applyRotate(evt.current.x, evt.current.y);
107
+ }
108
+ this.scheduleSync();
109
+ return true;
110
+ };
111
+ this.handleMoveEnd = () => {
112
+ if (!this.drag)
113
+ return;
114
+ this.flushSync();
115
+ this.emit("end");
116
+ this.finishDrag(false);
117
+ return true;
118
+ };
119
+ this.onTransform = options.onTransform;
120
+ }
121
+ get isDragging() {
122
+ return this.drag !== null;
123
+ }
124
+ setOnTransform(onTransform) {
125
+ this.onTransform = onTransform;
126
+ }
127
+ attach() {
128
+ var _a, _b;
129
+ if (this.attached)
130
+ return;
131
+ const { pointer } = this.options.context.inputs;
132
+ pointer.eventHover.addListener(this.handleHover, PRIORITY);
133
+ pointer.eventMoveStart.addListener(this.handleMoveStart, PRIORITY);
134
+ pointer.eventMove.addListener(this.handleMove, PRIORITY);
135
+ pointer.eventMoveEnd.addListener(this.handleMoveEnd, PRIORITY);
136
+ (_a = globalThis.addEventListener) === null || _a === void 0 ? void 0 : _a.call(globalThis, "keydown", this.handleKeyChange);
137
+ (_b = globalThis.addEventListener) === null || _b === void 0 ? void 0 : _b.call(globalThis, "keyup", this.handleKeyChange);
138
+ const { canvas } = this.options.context;
139
+ if (canvas instanceof HTMLCanvasElement) {
140
+ canvas.addEventListener("contextmenu", this.preventContextMenu);
141
+ }
142
+ this.attached = true;
143
+ }
144
+ detach() {
145
+ var _a, _b;
146
+ if (!this.attached)
147
+ return;
148
+ const { pointer } = this.options.context.inputs;
149
+ pointer.eventHover.removeListener(this.handleHover);
150
+ pointer.eventMoveStart.removeListener(this.handleMoveStart);
151
+ pointer.eventMove.removeListener(this.handleMove);
152
+ pointer.eventMoveEnd.removeListener(this.handleMoveEnd);
153
+ (_a = globalThis.removeEventListener) === null || _a === void 0 ? void 0 : _a.call(globalThis, "keydown", this.handleKeyChange);
154
+ (_b = globalThis.removeEventListener) === null || _b === void 0 ? void 0 : _b.call(globalThis, "keyup", this.handleKeyChange);
155
+ const { canvas } = this.options.context;
156
+ if (canvas instanceof HTMLCanvasElement) {
157
+ canvas.removeEventListener("contextmenu", this.preventContextMenu);
158
+ }
159
+ this.cancelScheduledSync();
160
+ this.finishDrag(false);
161
+ this.setHover(null);
162
+ this.attached = false;
163
+ }
164
+ applyTranslate(screenX, screenY) {
165
+ const { drag } = this;
166
+ if (!drag)
167
+ return;
168
+ const hit = intersectViewPlane(this.options.context, screenX, screenY, drag.planeAnchor);
169
+ const dx = hit.x - drag.startGrab.x;
170
+ const dy = hit.y - drag.startGrab.y;
171
+ const dz = hit.z - drag.startGrab.z;
172
+ const overlays = this.options.getOverlays();
173
+ for (let g = 0; g < drag.groupIndices.length; g++) {
174
+ const start = drag.startCoords[g];
175
+ const live = drag.liveCoords[g];
176
+ for (let i = 0; i < start.length; i += 3) {
177
+ live[i] = start[i] + dx;
178
+ live[i + 1] = start[i + 1] + dy;
179
+ live[i + 2] = start[i + 2] + dz;
180
+ }
181
+ const index = drag.groupIndices[g];
182
+ overlays[index] = Object.assign(Object.assign({}, overlays[index]), { coordinates: live, origin: [
183
+ drag.startOrigin.x + dx,
184
+ drag.startOrigin.y + dy,
185
+ drag.startOrigin.z + dz,
186
+ ] });
187
+ }
188
+ drag.origin.x = drag.startOrigin.x + dx;
189
+ drag.origin.y = drag.startOrigin.y + dy;
190
+ drag.origin.z = drag.startOrigin.z + dz;
191
+ }
192
+ applyRotate(screenX, screenY) {
193
+ const { drag } = this;
194
+ if (!drag)
195
+ return;
196
+ const { camera } = this.options.context;
197
+ const width = Math.max(1, camera.screenWidth);
198
+ const height = Math.max(1, camera.screenHeight);
199
+ const dPxX = ((screenX - drag.startPointer.x) * width) / 2;
200
+ const dPxY = ((screenY - drag.startPointer.y) * height) / 2;
201
+ const rotation = {
202
+ x: wrapDegrees(drag.startRotation.x + dPxY * ROTATE_DEG_PER_PX),
203
+ y: drag.startRotation.y,
204
+ z: wrapDegrees(drag.startRotation.z - dPxX * ROTATE_DEG_PER_PX),
205
+ };
206
+ const mat = rotationMatrixZXY(rotation.x, rotation.y, rotation.z);
207
+ const overlays = this.options.getOverlays();
208
+ for (let g = 0; g < drag.groupIndices.length; g++) {
209
+ fromLocalCoordsInto(drag.localCoords[g], drag.startOrigin, mat, drag.liveCoords[g]);
210
+ const index = drag.groupIndices[g];
211
+ overlays[index] = Object.assign(Object.assign({}, overlays[index]), { coordinates: drag.liveCoords[g], rotation: Object.assign({}, rotation) });
212
+ }
213
+ drag.origin.from(drag.startOrigin);
214
+ drag.currentRotation = rotation;
215
+ }
216
+ scheduleSync() {
217
+ if (this.syncRaf)
218
+ return;
219
+ this.syncRaf = globalThis.requestAnimationFrame(() => {
220
+ this.syncRaf = 0;
221
+ this.options.syncOverlayPositions();
222
+ });
223
+ }
224
+ flushSync() {
225
+ this.cancelScheduledSync();
226
+ this.options.syncOverlayPositions();
227
+ }
228
+ cancelScheduledSync() {
229
+ if (!this.syncRaf)
230
+ return;
231
+ globalThis.cancelAnimationFrame(this.syncRaf);
232
+ this.syncRaf = 0;
233
+ }
234
+ emit(phase) {
235
+ const { drag } = this;
236
+ if (!drag || !this.onTransform)
237
+ return;
238
+ this.onTransform({
239
+ id: drag.id,
240
+ origin: { x: drag.origin.x, y: drag.origin.y, z: drag.origin.z },
241
+ rotation: Object.assign({}, drag.currentRotation),
242
+ phase,
243
+ });
244
+ }
245
+ finishDrag(emit) {
246
+ var _a, _b;
247
+ if (!this.drag)
248
+ return;
249
+ const { id, orbitWasEnabled } = this.drag;
250
+ if (emit)
251
+ this.emit("end");
252
+ this.drag = null;
253
+ const orbit = this.options.getOrbit();
254
+ if (orbit)
255
+ orbit.enabled = orbitWasEnabled;
256
+ this.setCursor(this.hoverId ? (this.modifierRotate ? "move" : "grab") : "");
257
+ (_b = (_a = this.options).onDragEnd) === null || _b === void 0 ? void 0 : _b.call(_a, id);
258
+ }
259
+ setHover(id) {
260
+ if (this.hoverId === id)
261
+ return;
262
+ this.hoverId = id;
263
+ this.options.setHighlightedId(id);
264
+ if (!this.drag) {
265
+ this.setCursor(id ? (this.modifierRotate ? "move" : "grab") : "");
266
+ }
267
+ }
268
+ setCursor(cursor) {
269
+ const { canvas } = this.options.context;
270
+ if (canvas instanceof HTMLCanvasElement) {
271
+ canvas.style.cursor = cursor;
272
+ }
273
+ }
274
+ pickOverlay(screenX, screenY) {
275
+ const { context } = this.options;
276
+ const overlays = this.options.getOverlays();
277
+ const { camera } = context;
278
+ const width = Math.max(1, camera.screenWidth);
279
+ const height = Math.max(1, camera.screenHeight);
280
+ const hitPixels = Math.max(MIN_HIT_PIXELS, this.options.getHitRadiusPixels());
281
+ const hitPixelsSq = hitPixels * hitPixels;
282
+ let bestDist = hitPixelsSq;
283
+ let bestId = null;
284
+ let bestPoint = null;
285
+ for (const overlay of overlays) {
286
+ if (!overlay.id || overlay.interactive === false)
287
+ continue;
288
+ const coords = overlay.coordinates;
289
+ for (let i = 0; i < coords.length; i += 3) {
290
+ const x = coords[i];
291
+ const y = coords[i + 1];
292
+ const z = coords[i + 2];
293
+ const clip = camera.apply([x, y, z]);
294
+ if (clip.w === 0)
295
+ continue;
296
+ const ndcX = clip.x / clip.w;
297
+ const ndcY = clip.y / clip.w;
298
+ const dxPx = ((ndcX - screenX) * width) / 2;
299
+ const dyPx = ((ndcY - screenY) * height) / 2;
300
+ const distSq = dxPx * dxPx + dyPx * dyPx;
301
+ if (distSq < bestDist) {
302
+ bestDist = distSq;
303
+ bestId = overlay.id;
304
+ bestPoint = new TgdVec3(x, y, z);
305
+ }
306
+ }
307
+ }
308
+ if (!bestId || !bestPoint)
309
+ return null;
310
+ return { id: bestId, point: bestPoint };
311
+ }
312
+ }
313
+ function readOrigin(overlays, id, fallback) {
314
+ for (const overlay of overlays) {
315
+ if (overlay.id !== id)
316
+ continue;
317
+ if (overlay.origin && overlay.origin.length >= 3) {
318
+ return new TgdVec3(overlay.origin[0], overlay.origin[1], overlay.origin[2]);
319
+ }
320
+ if (overlay.kind === "origin" && overlay.coordinates.length >= 3) {
321
+ const c = overlay.coordinates;
322
+ return new TgdVec3(c[0], c[1], c[2]);
323
+ }
324
+ }
325
+ return fallback.clone();
326
+ }
327
+ function readRotation(overlays, id) {
328
+ var _a, _b, _c;
329
+ for (const overlay of overlays) {
330
+ if (overlay.id !== id || !overlay.rotation)
331
+ continue;
332
+ return {
333
+ x: (_a = overlay.rotation.x) !== null && _a !== void 0 ? _a : 0,
334
+ y: (_b = overlay.rotation.y) !== null && _b !== void 0 ? _b : 0,
335
+ z: (_c = overlay.rotation.z) !== null && _c !== void 0 ? _c : 0,
336
+ };
337
+ }
338
+ return { x: 0, y: 0, z: 0 };
339
+ }
340
+ function intersectViewPlane(context, screenX, screenY, planePoint) {
341
+ const { origin, direction } = context.camera.castRay(screenX, screenY);
342
+ const dir = new TgdVec3(direction);
343
+ const normal = new TgdVec3(context.camera.transfo.axisZ);
344
+ const denom = normal.dot(dir);
345
+ if (Math.abs(denom) < 1e-8) {
346
+ return new TgdVec3(origin);
347
+ }
348
+ const tmp = new TgdVec3(planePoint).subtract(origin);
349
+ const t = normal.dot(tmp) / denom;
350
+ return new TgdVec3(origin).addWithScale(dir, t);
351
+ }
352
+ function toLocalCoords(world, origin, rotation) {
353
+ const inv = invertRotationZXY(rotation.x, rotation.y, rotation.z);
354
+ const out = new Float32Array(world.length);
355
+ for (let i = 0; i < world.length; i += 3) {
356
+ const x = world[i] - origin.x;
357
+ const y = world[i + 1] - origin.y;
358
+ const z = world[i + 2] - origin.z;
359
+ const [lx, ly, lz] = applyMat3(inv, x, y, z);
360
+ out[i] = lx;
361
+ out[i + 1] = ly;
362
+ out[i + 2] = lz;
363
+ }
364
+ return out;
365
+ }
366
+ function fromLocalCoordsInto(local, origin, mat, out) {
367
+ const ox = origin.x;
368
+ const oy = origin.y;
369
+ const oz = origin.z;
370
+ const m0 = mat[0];
371
+ const m1 = mat[1];
372
+ const m2 = mat[2];
373
+ const m3 = mat[3];
374
+ const m4 = mat[4];
375
+ const m5 = mat[5];
376
+ const m6 = mat[6];
377
+ const m7 = mat[7];
378
+ const m8 = mat[8];
379
+ for (let i = 0; i < local.length; i += 3) {
380
+ const lx = local[i];
381
+ const ly = local[i + 1];
382
+ const lz = local[i + 2];
383
+ out[i] = m0 * lx + m1 * ly + m2 * lz + ox;
384
+ out[i + 1] = m3 * lx + m4 * ly + m5 * lz + oy;
385
+ out[i + 2] = m6 * lx + m7 * ly + m8 * lz + oz;
386
+ }
387
+ }
388
+ function rotationMatrixZXY(xDeg, yDeg, zDeg) {
389
+ const x = (xDeg * Math.PI) / 180;
390
+ const y = (yDeg * Math.PI) / 180;
391
+ const z = (zDeg * Math.PI) / 180;
392
+ const cx = Math.cos(x);
393
+ const sx = Math.sin(x);
394
+ const cy = Math.cos(y);
395
+ const sy = Math.sin(y);
396
+ const cz = Math.cos(z);
397
+ const sz = Math.sin(z);
398
+ const rx = [1, 0, 0, 0, cx, -sx, 0, sx, cx];
399
+ const ry = [cy, 0, sy, 0, 1, 0, -sy, 0, cy];
400
+ const rz = [cz, -sz, 0, sz, cz, 0, 0, 0, 1];
401
+ return mulMat3(mulMat3(new Float64Array(rz), new Float64Array(rx)), new Float64Array(ry));
402
+ }
403
+ function invertRotationZXY(xDeg, yDeg, zDeg) {
404
+ const m = rotationMatrixZXY(xDeg, yDeg, zDeg);
405
+ return new Float64Array([m[0], m[3], m[6], m[1], m[4], m[7], m[2], m[5], m[8]]);
406
+ }
407
+ function mulMat3(a, b) {
408
+ const out = new Float64Array(9);
409
+ for (let r = 0; r < 3; r++) {
410
+ for (let c = 0; c < 3; c++) {
411
+ out[r * 3 + c] = a[r * 3] * b[c] + a[r * 3 + 1] * b[3 + c] + a[r * 3 + 2] * b[6 + c];
412
+ }
413
+ }
414
+ return out;
415
+ }
416
+ function applyMat3(m, x, y, z) {
417
+ return [
418
+ m[0] * x + m[1] * y + m[2] * z,
419
+ m[3] * x + m[4] * y + m[5] * z,
420
+ m[6] * x + m[7] * y + m[8] * z,
421
+ ];
422
+ }
423
+ function wrapDegrees(value) {
424
+ const wrapped = value % 360;
425
+ return wrapped < 0 ? wrapped + 360 : wrapped;
426
+ }
427
+ function ensureMutableCoords(coords) {
428
+ if (coords instanceof Float32Array)
429
+ return new Float32Array(coords);
430
+ return Float32Array.from(coords);
431
+ }
432
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS1pbnRlcmFjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wYWludGVycy9vdmVybGF5LWludGVyYWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHTCxPQUFPLEdBQ1IsTUFBTSxnQkFBZ0IsQ0FBQztBQThEeEIsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUM7QUFFL0IsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBRXBCLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztBQUcxQixTQUFTLFdBQVcsQ0FBQyxHQUlwQjtJQUNDLE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLElBQUksR0FBRyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDaEUsQ0FBQztBQWNELE1BQU0sT0FBTyw0QkFBNEI7SUFRdkMsWUFBNkIsT0FBa0M7UUFBbEMsWUFBTyxHQUFQLE9BQU8sQ0FBMkI7UUFQdkQsU0FBSSxHQUFxQixJQUFJLENBQUM7UUFDOUIsWUFBTyxHQUFrQixJQUFJLENBQUM7UUFDOUIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUN2QixZQUFPLEdBQUcsQ0FBQyxDQUFDO1FBMkRILHVCQUFrQixHQUFHLENBQUMsR0FBVSxFQUFFLEVBQUU7WUFDbkQsR0FBRyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZCLENBQUMsQ0FBQztRQUVlLG9CQUFlLEdBQUcsQ0FBQyxHQUFrQixFQUFFLEVBQUU7WUFDeEQsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLE1BQU0sSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDO1lBQ3hDLElBQUksSUFBSSxLQUFLLElBQUksQ0FBQyxjQUFjO2dCQUFFLE9BQU87WUFDekMsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7WUFDM0IsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLElB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QUMsQ0FBQztJQUNwQixNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixNQUFNLEVBQUUsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLE1BQU0sRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDekMsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BCLE1BQU0sRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDeEIsTUFBTSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN4QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQzFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQzlDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ2hELENBQUM7QUFDSCxDQUFDO0FBR0QsU0FBUyxpQkFBaUIsQ0FBQyxJQUFZLEVBQUUsSUFBWSxFQUFFLElBQVk7SUFDakUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztJQUNqQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0lBQ2pDLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDakMsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkIsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN2QixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3ZCLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDNUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVB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
@@ -0,0 +1,18 @@
1
+ import { TgdContext } from "@tolokoban/tgd";
2
+ import { PainterWorldOverlays } from "./world-overlays";
3
+ export declare class OverlaySurface {
4
+ private context;
5
+ private painter;
6
+ private main;
7
+ private dragging;
8
+ private readonly onMainPaint;
9
+ get overlaysPainter(): PainterWorldOverlays | null;
10
+ get isDragging(): boolean;
11
+ setCanvas(canvas: HTMLCanvasElement | null, main: TgdContext | null): void;
12
+ beginDrag(): void;
13
+ endDrag(): void;
14
+ paint(): void;
15
+ delete(): void;
16
+ private teardown;
17
+ }
18
+ //# sourceMappingURL=overlay-surface.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overlay-surface.d.ts","sourceRoot":"","sources":["../../src/painters/overlay-surface.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EAGX,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAWxD,qBAAa,cAAc;IACzB,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,IAAI,CAA2B;IACvC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAC,WAAW,CAG1B;IAEF,IAAI,eAAe,IAAI,oBAAoB,GAAG,IAAI,CAEjD;IAED,IAAI,UAAU,IAAI,OAAO,CAExB;IAMD,SAAS,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI;IAuCnE,SAAS;IAKT,OAAO;IAMP,KAAK;IAQL,MAAM;IAIN,OAAO,CAAC,QAAQ;CAUjB"}
@@ -0,0 +1,83 @@
1
+ import { TgdContext, TgdPainterClear, TgdPainterState, } from "@tolokoban/tgd";
2
+ import { PainterWorldOverlays } from "./world-overlays";
3
+ export class OverlaySurface {
4
+ constructor() {
5
+ this.context = null;
6
+ this.painter = null;
7
+ this.main = null;
8
+ this.dragging = false;
9
+ this.onMainPaint = () => {
10
+ if (this.dragging)
11
+ return;
12
+ this.paint();
13
+ };
14
+ }
15
+ get overlaysPainter() {
16
+ return this.painter;
17
+ }
18
+ get isDragging() {
19
+ return this.dragging;
20
+ }
21
+ setCanvas(canvas, main) {
22
+ this.teardown();
23
+ this.main = main;
24
+ if (!canvas || !main)
25
+ return;
26
+ const context = new TgdContext(canvas, {
27
+ antialias: true,
28
+ alpha: true,
29
+ premultipliedAlpha: true,
30
+ name: "OverlaySurface",
31
+ });
32
+ context.camera = main.camera;
33
+ context.resolution = main.resolution;
34
+ const painter = new PainterWorldOverlays(context);
35
+ this.painter = painter;
36
+ this.context = context;
37
+ const clear = new TgdPainterClear(context, {
38
+ name: "Clear overlay surface",
39
+ color: [0, 0, 0, 0],
40
+ depth: 1,
41
+ });
42
+ context.add(clear, new TgdPainterState(context, {
43
+ depth: "off",
44
+ blend: "off",
45
+ cull: "back",
46
+ children: [painter],
47
+ }));
48
+ main.eventPaint.addListener(this.onMainPaint);
49
+ context.paint();
50
+ }
51
+ beginDrag() {
52
+ this.dragging = true;
53
+ }
54
+ endDrag() {
55
+ var _a;
56
+ this.dragging = false;
57
+ (_a = this.main) === null || _a === void 0 ? void 0 : _a.paint();
58
+ this.paint();
59
+ }
60
+ paint() {
61
+ const { context, main } = this;
62
+ if (!context || !main)
63
+ return;
64
+ context.camera = main.camera;
65
+ context.resolution = main.resolution;
66
+ context.paint();
67
+ }
68
+ delete() {
69
+ this.teardown();
70
+ }
71
+ teardown() {
72
+ var _a;
73
+ if (this.main) {
74
+ this.main.eventPaint.removeListener(this.onMainPaint);
75
+ }
76
+ (_a = this.context) === null || _a === void 0 ? void 0 : _a.delete();
77
+ this.context = null;
78
+ this.painter = null;
79
+ this.main = null;
80
+ this.dragging = false;
81
+ }
82
+ }
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3ZlcmxheS1zdXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3BhaW50ZXJzL292ZXJsYXktc3VyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxFQUNWLGVBQWUsRUFDZixlQUFlLEdBQ2hCLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFXeEQsTUFBTSxPQUFPLGNBQWM7SUFBM0I7UUFDVSxZQUFPLEdBQXNCLElBQUksQ0FBQztRQUNsQyxZQUFPLEdBQWdDLElBQUksQ0FBQztRQUM1QyxTQUFJLEdBQXNCLElBQUksQ0FBQztRQUMvQixhQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ1IsZ0JBQVcsR0FBRyxHQUFHLEVBQUU7WUFDbEMsSUFBSSxJQUFJLENBQUMsUUFBUTtnQkFBRSxPQUFPO1lBQzFCLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNmLENBQUMsQ0FBQztJQXNGSixDQUFDO0lBcEZDLElBQUksZUFBZTtRQUNqQixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBTUQsU0FBUyxDQUFDLE1BQWdDLEVBQUUsSUFBdUI7UUFDakUsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTztRQUU3QixNQUFNLE9BQU8sR0FBRyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUU7WUFDckMsU0FBUyxFQUFFLElBQUk7WUFDZixLQUFLLEVBQUUsSUFBSTtZQUVYLGtCQUFrQixFQUFFLElBQUk7WUFDeEIsSUFBSSxFQUFFLGdCQUFnQjtTQUN2QixDQUFDLENBQUM7UUFDSCxPQUFPLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDN0IsT0FBTyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDO1FBRXJDLE1BQU0sT0FBTyxHQUFHLElBQUksb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFFdkIsTUFBTSxLQUFLLEdBQUcsSUFBSSxlQUFlLENBQUMsT0FBTyxFQUFFO1lBQ3pDLElBQUksRUFBRSx1QkFBdUI7WUFDN0IsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25CLEtBQUssRUFBRSxDQUFDO1NBQ1QsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FDVCxLQUFLLEVBQ0wsSUFBSSxlQUFlLENBQUMsT0FBTyxFQUFFO1lBQzNCLEtBQUssRUFBRSxLQUFLO1lBQ1osS0FBSyxFQUFFLEtBQUs7WUFDWixJQUFJLEVBQUUsTUFBTTtZQUNaLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQztTQUNwQixDQUFDLENBQ0gsQ0FBQztRQUVGLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM5QyxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDbEIsQ0FBQztJQUdELFNBQVM7UUFDUCxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztJQUN2QixDQUFDO0lBR0QsT0FBTzs7UUFDTCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixNQUFBLElBQUksQ0FBQyxJQUFJLDBDQUFFLEtBQUssRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNmLENBQUM7SUFFRCxLQUFLO1FBQ0gsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDL0IsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUk7WUFBRSxPQUFPO1FBQzlCLE9BQU8sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUM3QixPQUFPLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUM7UUFDckMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxNQUFNO1FBQ0osSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ2xCLENBQUM7SUFFTyxRQUFROztRQUNkLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2QsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN4RCxDQUFDO1FBQ0QsTUFBQSxJQUFJLENBQUMsT0FBTywwQ0FBRSxNQUFNLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztRQUNwQixJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztRQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztJQUN4QixDQUFDO0NBQ0YifQ==
@@ -0,0 +1,25 @@
1
+ import { type TgdContext, TgdPainterGroup } from "@tolokoban/tgd";
2
+ import type { MorphoViewerWorldOverlay } from "../components/types";
3
+ export declare class PainterWorldOverlays extends TgdPainterGroup {
4
+ readonly context: TgdContext;
5
+ private readonly texture;
6
+ private _overlays;
7
+ private painter;
8
+ private dataPoint;
9
+ private _radius;
10
+ private _minRadiusInPixels;
11
+ private _highlightedId;
12
+ constructor(context: TgdContext);
13
+ get radius(): number;
14
+ set radius(radius: number);
15
+ get minRadiusInPixels(): number;
16
+ set minRadiusInPixels(minRadiusInPixels: number);
17
+ get highlightedId(): string | null;
18
+ set highlightedId(highlightedId: string | null);
19
+ get overlays(): MorphoViewerWorldOverlay[];
20
+ set overlays(overlays: MorphoViewerWorldOverlay[]);
21
+ syncPositions(): void;
22
+ private uploadPositions;
23
+ private rebuild;
24
+ }
25
+ //# sourceMappingURL=world-overlays.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"world-overlays.d.ts","sourceRoot":"","sources":["../../src/painters/world-overlays.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,UAAU,EAEf,eAAe,EAIhB,MAAM,gBAAgB,CAAC;AAExB,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAgCpE,qBAAa,oBAAqB,SAAQ,eAAe;aAS3B,OAAO,EAAE,UAAU;IAR/C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,SAAS,CAAkC;IACnD,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,kBAAkB,CAAK;IAC/B,OAAO,CAAC,cAAc,CAAuB;gBAEjB,OAAO,EAAE,UAAU;IAU/C,IAAI,MAAM,IAAI,MAAM,CAEnB;IACD,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,EASxB;IAED,IAAI,iBAAiB,IAAI,MAAM,CAE9B;IACD,IAAI,iBAAiB,CAAC,iBAAiB,EAAE,MAAM,EAS9C;IAED,IAAI,aAAa,IAAI,MAAM,GAAG,IAAI,CAEjC;IACD,IAAI,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,EAK7C;IAED,IAAI,QAAQ,IAAI,wBAAwB,EAAE,CAEzC;IACD,IAAI,QAAQ,CAAC,QAAQ,EAAE,wBAAwB,EAAE,EAShD;IAMD,aAAa;IAeb,OAAO,CAAC,eAAe;IA4CvB,OAAO,CAAC,OAAO;CA6ChB"}