@openbraininstitute/morphoviewer 0.26.2 → 0.26.4
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.
- package/dist/components/button-reset-camera/button-reset-camera.js +2 -2
- package/dist/components/button-reset-camera/button-reset-camera.module.css +10 -0
- package/dist/components/controls-layout/controls-layout.js +1 -1
- package/dist/components/controls-layout/controls-layout.module.css +53 -0
- package/dist/components/morpho-viewer-octree/morpho-viewer-octree.js +1 -1
- package/dist/components/morpho-viewer-octree/morpho-viewer-octree.module.css +70 -0
- package/dist/components/morpho-viewer-octree/painter/manager.d.ts.map +1 -1
- package/dist/components/morpho-viewer-octree/painter/manager.js +9 -4
- package/dist/components/morpho-viewer-octree/types.d.ts +2 -1
- package/dist/components/morpho-viewer-octree/types.d.ts.map +1 -1
- package/dist/components/morpho-viewer-scalebar/morpho-viewer-scalebar.js +1 -1
- package/dist/components/morpho-viewer-scalebar/morpho-viewer-scalebar.module.css +13 -0
- package/dist/components/morpho-viewer-simul/components/ModeSelector/ModeSelector.js +1 -1
- package/dist/components/morpho-viewer-simul/components/ModeSelector/ModeSelector.module.css +25 -0
- package/dist/components/morpho-viewer-simul/components/add-recording-dialog/add-recording-dialog.js +2 -2
- package/dist/components/morpho-viewer-simul/components/add-recording-dialog/add-recording-dialog.module.css +115 -0
- package/dist/components/morpho-viewer-simul/components/hint/hint.js +1 -1
- package/dist/components/morpho-viewer-simul/components/hint/hint.module.css +23 -0
- package/dist/components/morpho-viewer-simul/components/legend-overlay/legend-overlay.js +1 -1
- package/dist/components/morpho-viewer-simul/components/legend-overlay/legend-overlay.module.css +5 -0
- package/dist/components/morpho-viewer-simul/components/spiking-controller/current-time/current-time.d.ts +1 -1
- package/dist/components/morpho-viewer-simul/components/spiking-controller/current-time/current-time.js +2 -2
- package/dist/components/morpho-viewer-simul/components/spiking-controller/current-time/current-time.module.css +20 -0
- package/dist/components/morpho-viewer-simul/components/spiking-controller/play-button/play-button.js +3 -3
- package/dist/components/morpho-viewer-simul/components/spiking-controller/play-button/play-button.module.css +21 -0
- package/dist/components/morpho-viewer-simul/components/spiking-controller/simul-combo/simul-combo.d.ts +1 -1
- package/dist/components/morpho-viewer-simul/components/spiking-controller/simul-combo/simul-combo.js +1 -1
- package/dist/components/morpho-viewer-simul/components/spiking-controller/simul-combo/simul-combo.module.css +52 -0
- package/dist/components/morpho-viewer-simul/components/spiking-controller/speed-combo/speed-combo.js +1 -1
- package/dist/components/morpho-viewer-simul/components/spiking-controller/speed-combo/speed-combo.module.css +69 -0
- package/dist/components/morpho-viewer-simul/components/spiking-controller/spiking-controller.js +1 -1
- package/dist/components/morpho-viewer-simul/components/zoom-slider/zoom-slider.js +3 -3
- package/dist/components/morpho-viewer-simul/components/zoom-slider/zoom-slider.module.css +60 -0
- package/dist/components/morpho-viewer-simul/morpho-viewer-simul.js +1 -1
- package/dist/components/morpho-viewer-simul/morpho-viewer-simul.module.css +94 -0
- package/dist/components/morpho-viewer-simul/painter/manager.js +1 -1
- package/dist/components/morpho-viewer-simul/painter/painters/overlay/cursor/cursor.js +1 -1
- package/dist/components/morpho-viewer-simul/painter/painters/overlay/cursor/fill.js +1 -1
- package/dist/components/morpho-viewer-simul/painter/painters/overlay/overlay.js +1 -1
- package/dist/components/morpho-viewer-simul/painter/painters/overlay/ticks.d.ts +1 -1
- package/dist/components/morpho-viewer-simul/painter/painters/spiking/spiking.js +1 -1
- package/dist/components/morpho-viewer-simul/painter/structure.d.ts.map +1 -1
- package/dist/components/morpho-viewer-simul/painter/structure.js +43 -20
- package/dist/components/morpho-viewer-simul/painter/tree.d.ts.map +1 -1
- package/dist/components/morpho-viewer-simul/painter/tree.js +17 -22
- package/dist/components/morpho-viewer-small-circuit/morpho-viewer-small-circuit.js +1 -1
- package/dist/components/morpho-viewer-small-circuit/morpho-viewer-small-circuit.module.css +63 -0
- package/dist/components/morpho-viewer-small-circuit/painter/manager.js +3 -3
- package/dist/components/morpho-viewer-small-circuit/painter/offscreen-painter/offscreen-painter.d.ts +1 -1
- package/dist/components/morpho-viewer-small-circuit/painter/offscreen-painter/offscreen-painter.js +1 -1
- package/dist/components/morpho-viewer-small-circuit/painter/painter-cell/factory/tree.d.ts +1 -1
- package/dist/components/morpho-viewer-small-circuit/painter/painter-cell/factory/tree.js +1 -1
- package/dist/components/morpho-viewer-small-circuit/painter/painter-cell/painter-cell.js +1 -1
- package/dist/components/morpho-viewer-somas-only/manager/ambient-occlusion/ambient-occlusion.d.ts.map +1 -1
- package/dist/components/morpho-viewer-somas-only/manager/ambient-occlusion/ambient-occlusion.js +11 -28
- package/dist/components/morpho-viewer-somas-only/manager/ambient-occlusion/proximity.d.ts +1 -1
- package/dist/components/morpho-viewer-somas-only/manager/ambient-occlusion/proximity.d.ts.map +1 -1
- package/dist/components/morpho-viewer-somas-only/manager/ambient-occlusion/proximity.js +3 -2
- package/dist/components/morpho-viewer-somas-only/manager/ambient-occlusion/rays.d.ts +3 -0
- package/dist/components/morpho-viewer-somas-only/manager/ambient-occlusion/rays.d.ts.map +1 -0
- package/dist/components/morpho-viewer-somas-only/manager/ambient-occlusion/rays.js +24 -0
- package/dist/components/morpho-viewer-somas-only/manager/manager.d.ts +5 -0
- package/dist/components/morpho-viewer-somas-only/manager/manager.d.ts.map +1 -1
- package/dist/components/morpho-viewer-somas-only/manager/manager.js +41 -4
- package/dist/components/morpho-viewer-somas-only/manager/painter-cell-infos.js +1 -1
- package/dist/components/morpho-viewer-somas-only/morpho-viewer-somas-only.js +1 -1
- package/dist/components/morpho-viewer-somas-only/morpho-viewer-somas-only.module.css +15 -0
- package/dist/components/morpho-viewer-spinner/morpho-viewer-spinner.js +2 -2
- package/dist/components/morpho-viewer-spinner/morpho-viewer-spinner.module.css +31 -0
- package/dist/components/tooltip/tooltip.js +1 -1
- package/dist/components/tooltip/tooltip.module.css +74 -0
- package/dist/icons/icon.module.css +19 -0
- package/dist/icons/spinner.js +1 -1
- package/dist/morphology/painter/factory.js +1 -1
- package/dist/morphology/painter/nodes.d.ts +1 -1
- package/dist/morphology/painter/nodes.js +1 -1
- package/dist/morphology/painter/painter.d.ts +1 -1
- package/dist/morphology/painter/segments.js +1 -1
- package/dist/morphology/painter/textures.d.ts +1 -1
- package/dist/package.json +9 -5
- package/dist/parser/swc.d.ts +1 -1
- package/dist/parser/swc.js +1 -1
- package/dist/tools/morphology-to-tree.d.ts +2 -2
- package/dist/tools/morphology-to-tree.js +1 -1
- package/dist/tools/swc-to-tree.d.ts +1 -1
- package/dist/tools/swc-to-tree.js +1 -1
- package/package.json +8 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ambient-occlusion.d.ts","sourceRoot":"","sources":["../../../../../src/components/morpho-viewer-somas-only/manager/ambient-occlusion/ambient-occlusion.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ambient-occlusion.d.ts","sourceRoot":"","sources":["../../../../../src/components/morpho-viewer-somas-only/manager/ambient-occlusion/ambient-occlusion.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEnD,wBAAgB,uBAAuB,CACrC,IAAI,EAAE;IAAE,GAAG,EAAE,YAAY,CAAC;IAAC,GAAG,EAAE,YAAY,CAAA;CAAE,EAC9C,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,YAAY,EACpB,GAAG,EAAE,YAAY,EACjB,SAAS,SAAM,GACd,YAAY,CAgDd"}
|
package/dist/components/morpho-viewer-somas-only/manager/ambient-occlusion/ambient-occlusion.js
CHANGED
|
@@ -1,39 +1,22 @@
|
|
|
1
1
|
import { Proximity } from "./proximity";
|
|
2
|
+
import { getUniformlyDistributedRays } from "./rays";
|
|
2
3
|
export function computeAmbientOcclusion(bbox, radius, points, uvs, intensity = 0.5) {
|
|
3
4
|
if (bbox.min[0] > bbox.max[0]) {
|
|
5
|
+
console.log("Skip computation for empty bounding boxes.");
|
|
4
6
|
return uvs;
|
|
5
7
|
}
|
|
8
|
+
const rays = getUniformlyDistributedRays();
|
|
9
|
+
console.log("🐞 [ambient-occlusion@19] rays =", rays);
|
|
6
10
|
const proximity = new Proximity(points, bbox, radius);
|
|
7
|
-
const
|
|
11
|
+
const radiusSquare = radius * radius;
|
|
12
|
+
const invRadiusSquare = 1 / radiusSquare;
|
|
8
13
|
let indexUV = 1;
|
|
9
14
|
let maxAO = 0;
|
|
10
15
|
for (let pointIndex = 0; pointIndex < points.length; pointIndex += 4) {
|
|
11
|
-
let
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
let vecZ = 0;
|
|
16
|
-
proximity.forEachNeighbor(pointIndex, (x, y, z, _r, distSquare) => {
|
|
17
|
-
count++;
|
|
18
|
-
const falloff = 1 - distSquare * invRadiusSquare;
|
|
19
|
-
const invDistQuare = 1 / distSquare;
|
|
20
|
-
vecX += x * invDistQuare * falloff;
|
|
21
|
-
vecY += y * invDistQuare * falloff;
|
|
22
|
-
vecZ += z * invDistQuare * falloff;
|
|
23
|
-
ao += falloff;
|
|
24
|
-
});
|
|
25
|
-
if (count > 0) {
|
|
26
|
-
const invCount = 1 / count;
|
|
27
|
-
vecX *= invCount;
|
|
28
|
-
vecY *= invCount;
|
|
29
|
-
vecZ *= invCount;
|
|
30
|
-
ao *= 1 - (vecX * vecX + vecY * vecY + vecZ * vecZ);
|
|
31
|
-
}
|
|
32
|
-
else {
|
|
33
|
-
ao = 0;
|
|
34
|
-
}
|
|
35
|
-
maxAO = Math.max(ao, maxAO);
|
|
36
|
-
uvs[indexUV] = ao;
|
|
16
|
+
let totalAO = 0;
|
|
17
|
+
proximity.forEachNeighbor(pointIndex, (_X, _Y, _Z, _R, distSquare) => (totalAO += radiusSquare - distSquare));
|
|
18
|
+
uvs[indexUV] = totalAO;
|
|
19
|
+
maxAO = Math.max(maxAO, totalAO);
|
|
37
20
|
indexUV += 2;
|
|
38
21
|
}
|
|
39
22
|
const invMaxAO = 1 / maxAO;
|
|
@@ -42,4 +25,4 @@ export function computeAmbientOcclusion(bbox, radius, points, uvs, intensity = 0
|
|
|
42
25
|
}
|
|
43
26
|
return uvs;
|
|
44
27
|
}
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
28
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW1iaWVudC1vY2NsdXNpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb3JwaG8tdmlld2VyLXNvbWFzLW9ubHkvbWFuYWdlci9hbWJpZW50LW9jY2x1c2lvbi9hbWJpZW50LW9jY2x1c2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUlyRCxNQUFNLFVBQVUsdUJBQXVCLENBQ3JDLElBQThDLEVBQzlDLE1BQWMsRUFDZCxNQUFvQixFQUNwQixHQUFpQixFQUNqQixTQUFTLEdBQUcsR0FBRztJQUVmLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFOUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0Q0FBNEMsQ0FBQyxDQUFDO1FBQzFELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLDJCQUEyQixFQUFFLENBQUM7SUFDM0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQ0FBa0MsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0RCxNQUFNLFNBQVMsR0FBRyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3RELE1BQU0sWUFBWSxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUM7SUFDckMsTUFBTSxlQUFlLEdBQUcsQ0FBQyxHQUFHLFlBQVksQ0FBQztJQUN6QyxJQUFJLE9BQU8sR0FBRyxDQUFDLENBQUM7SUFDaEIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsS0FBSyxJQUFJLFVBQVUsR0FBRyxDQUFDLEVBQUUsVUFBVSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBVSxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3JFLElBQUksT0FBTyxHQUFHLENBQUMsQ0FBQztRQUNoQixTQUFTLENBQUMsZUFBZSxDQUN2QixVQUFVLEVBQ1YsQ0FBQyxFQUFVLEVBQUUsRUFBVSxFQUFFLEVBQVUsRUFBRSxFQUFVLEVBQUUsVUFBa0IsRUFBRSxFQUFFLENBQ3JFLENBQUMsT0FBTyxJQUFJLFlBQVksR0FBRyxVQUFVLENBQUMsQ0FDekMsQ0FBQztRQW1CRixHQUFHLENBQUMsT0FBTyxDQUFDLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQztRQUNqQyxPQUFPLElBQUksQ0FBQyxDQUFDO0lBQ2YsQ0FBQztJQUNELE1BQU0sUUFBUSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7SUFDM0IsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3ZDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxRQUFRLENBQUM7SUFDckIsQ0FBQztJQUNELE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyJ9
|
|
@@ -16,7 +16,7 @@ export declare class Proximity {
|
|
|
16
16
|
min: ArrayNumber3;
|
|
17
17
|
max: ArrayNumber3;
|
|
18
18
|
}, radius: number);
|
|
19
|
-
forEachNeighbor(pointIndex: number, action: (x: number, y: number, z: number, radius: number, distSquare: number) =>
|
|
19
|
+
forEachNeighbor(pointIndex: number, action: (x: number, y: number, z: number, radius: number, distSquare: number) => unknown): void;
|
|
20
20
|
private index;
|
|
21
21
|
}
|
|
22
22
|
//# sourceMappingURL=proximity.d.ts.map
|
package/dist/components/morpho-viewer-somas-only/manager/ambient-occlusion/proximity.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proximity.d.ts","sourceRoot":"","sources":["../../../../../src/components/morpho-viewer-somas-only/manager/ambient-occlusion/proximity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAgB,MAAM,gBAAgB,CAAC;AAEjE,qBAAa,SAAS;IAYlB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAbzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAa;gBAGpB,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE;QAAE,GAAG,EAAE,YAAY,CAAC;QAAC,GAAG,EAAE,YAAY,CAAA;KAAE,EAC9C,MAAM,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"proximity.d.ts","sourceRoot":"","sources":["../../../../../src/components/morpho-viewer-somas-only/manager/ambient-occlusion/proximity.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAgB,MAAM,gBAAgB,CAAC;AAEjE,qBAAa,SAAS;IAYlB,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAbzB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAa;IAClC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAa;gBAGpB,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE;QAAE,GAAG,EAAE,YAAY,CAAC;QAAC,GAAG,EAAE,YAAY,CAAA;KAAE,EAC9C,MAAM,EAAE,MAAM;IA+BjC,eAAe,CACb,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,OAAO;IAqC1F,OAAO,CAAC,KAAK;CAMd"}
|
|
@@ -53,7 +53,8 @@ export class Proximity {
|
|
|
53
53
|
const distSquare = xx * xx + yy * yy + zz * zz;
|
|
54
54
|
if (distSquare < radiusSquare && distSquare > 0) {
|
|
55
55
|
const rr = points[neighborIndex + 3];
|
|
56
|
-
action(xx, yy, zz, rr, distSquare)
|
|
56
|
+
if (false === action(xx, yy, zz, rr, distSquare))
|
|
57
|
+
return;
|
|
57
58
|
}
|
|
58
59
|
neighborIndex = nextPoint[neighborIndex];
|
|
59
60
|
}
|
|
@@ -68,4 +69,4 @@ export class Proximity {
|
|
|
68
69
|
return indexX * this.stepsYZ + indexY * this.stepsZ + indexZ;
|
|
69
70
|
}
|
|
70
71
|
}
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJveGltaXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvbW9ycGhvLXZpZXdlci1zb21hcy1vbmx5L21hbmFnZXIvYW1iaWVudC1vY2NsdXNpb24vcHJveGltaXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sT0FBTyxTQUFTO0lBV3BCLFlBQ21CLE1BQW9CLEVBQ3BCLElBQThDLEVBQzlDLE1BQWM7UUFGZCxXQUFNLEdBQU4sTUFBTSxDQUFjO1FBQ3BCLFNBQUksR0FBSixJQUFJLENBQTBDO1FBQzlDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFFL0IsTUFBTSxhQUFhLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUNqQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxhQUFhLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3pDLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDekMsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hDLElBQUks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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rays.d.ts","sourceRoot":"","sources":["../../../../../src/components/morpho-viewer-somas-only/manager/ambient-occlusion/rays.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAIzC,wBAAgB,2BAA2B,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC,CAoBjE"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { TgdVec3 } from "@tolokoban/tgd";
|
|
2
|
+
const rays = [];
|
|
3
|
+
export function getUniformlyDistributedRays() {
|
|
4
|
+
const STEPS_PER_QUARTER = 3;
|
|
5
|
+
if (rays.length === 0) {
|
|
6
|
+
const sectors = (STEPS_PER_QUARTER - 1) * 4;
|
|
7
|
+
for (let step = 0; step < STEPS_PER_QUARTER; step++) {
|
|
8
|
+
const phi = ((Math.PI / 2) * step) / (STEPS_PER_QUARTER - 1);
|
|
9
|
+
const z = Math.sin(phi);
|
|
10
|
+
const r = Math.cos(phi);
|
|
11
|
+
for (let sector = 0; sector < sectors; sector++) {
|
|
12
|
+
const theta = (2 * Math.PI * sector) / (sectors - 1);
|
|
13
|
+
const x = r * Math.cos(theta);
|
|
14
|
+
const y = r * Math.sin(theta);
|
|
15
|
+
rays.push(new TgdVec3(x, y, z));
|
|
16
|
+
if (z > 0) {
|
|
17
|
+
rays.push(new TgdVec3(x, y, -z));
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return rays;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF5cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vcnBoby12aWV3ZXItc29tYXMtb25seS9tYW5hZ2VyL2FtYmllbnQtb2NjbHVzaW9uL3JheXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXpDLE1BQU0sSUFBSSxHQUFjLEVBQUUsQ0FBQztBQUUzQixNQUFNLFVBQVUsMkJBQTJCO0lBQ3pDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN0QixNQUFNLE9BQU8sR0FBRyxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM1QyxLQUFLLElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxJQUFJLEdBQUcsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQztZQUNwRCxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQzdELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDeEIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN4QixLQUFLLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRSxNQUFNLEdBQUcsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUM7Z0JBQ2hELE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JELE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM5QixNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO29CQUNWLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ25DLENBQUM7WUFDSCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLElBQUksQ0FBQztBQUNkLENBQUMifQ==
|
|
@@ -9,6 +9,7 @@ declare class PainterManager {
|
|
|
9
9
|
private bbox;
|
|
10
10
|
private scalebarCleanup;
|
|
11
11
|
private readonly painterGizmo;
|
|
12
|
+
private resolutionForMovement;
|
|
12
13
|
get gizmo(): TgdPainterGizmoOptions | boolean | null | undefined;
|
|
13
14
|
set gizmo(gizmo: TgdPainterGizmoOptions | boolean | null | undefined);
|
|
14
15
|
get canvas(): HTMLCanvasElement | null;
|
|
@@ -16,7 +17,11 @@ declare class PainterManager {
|
|
|
16
17
|
get cellInfos(): MorphoViewerCellInfo[];
|
|
17
18
|
set cellInfos(cellInfos: MorphoViewerCellInfo[]);
|
|
18
19
|
readonly cameraReset: () => void;
|
|
20
|
+
private readonly highRes;
|
|
21
|
+
private readonly lowRes;
|
|
19
22
|
private initialize;
|
|
23
|
+
private _cameraChangeTimeout;
|
|
24
|
+
private handleCameraChange;
|
|
20
25
|
private delete;
|
|
21
26
|
}
|
|
22
27
|
export type { PainterManager };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../../src/components/morpho-viewer-somas-only/manager/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,QAAQ,EAER,KAAK,sBAAsB,EAG5B,MAAM,gBAAgB,CAAC;AAQxB,OAAO,KAAK,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AAEjF,cAAM,cAAc;IAIlB,SAAgB,aAAa,mBAA0B;IAEvD,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,UAAU,CAA8B;IAChD,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,KAAK,CAAyC;IACtD,OAAO,CAAC,IAAI,CAAwB;IACpC,OAAO,CAAC,eAAe,CAA6B;IACpD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../../src/components/morpho-viewer-somas-only/manager/manager.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,QAAQ,EAER,KAAK,sBAAsB,EAG5B,MAAM,gBAAgB,CAAC;AAQxB,OAAO,KAAK,EAAE,oBAAoB,EAAE,0BAA0B,EAAE,MAAM,UAAU,CAAC;AAEjF,cAAM,cAAc;IAIlB,SAAgB,aAAa,mBAA0B;IAEvD,OAAO,CAAC,OAAO,CAAkC;IACjD,OAAO,CAAC,UAAU,CAA8B;IAChD,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,KAAK,CAAyC;IACtD,OAAO,CAAC,IAAI,CAAwB;IACpC,OAAO,CAAC,eAAe,CAA6B;IACpD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAsB;IACnD,OAAO,CAAC,qBAAqB,CAAK;IAElC,IAAI,KAAK,IAGQ,sBAAsB,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CADnE;IACD,IAAI,KAAK,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,EAEnE;IAED,IAAI,MAAM,IAAI,iBAAiB,GAAG,IAAI,CAErC;IACD,IAAI,MAAM,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,EAM1C;IAED,IAAI,SAAS,IAAI,oBAAoB,EAAE,CAEtC;IACD,IAAI,SAAS,CAAC,SAAS,EAAE,oBAAoB,EAAE,EAS9C;IAED,QAAQ,CAAC,WAAW,aA6BlB;IAEF,OAAO,CAAC,QAAQ,CAAC,OAAO,CAQtB;IAEF,OAAO,CAAC,QAAQ,CAAC,MAAM,CAQrB;IAEF,OAAO,CAAC,UAAU;IAmDlB,OAAO,CAAC,oBAAoB,CAAM;IAElC,OAAO,CAAC,kBAAkB,CAOxB;IAEF,OAAO,CAAC,MAAM;CAYf;AAED,YAAY,EAAE,cAAc,EAAE,CAAC;AAE/B,wBAAgB,UAAU,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,0BAA0B,GAAG,cAAc,CAW3F"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { TgdBoundingBox, TgdCameraOrthographic, TgdContext, TgdControllerCameraOrbit, TgdEvent, TgdPainterClear, TgdPainterState, tgdActionCreateCameraInterpolation, } from "@tolokoban/tgd";
|
|
2
2
|
import React from "react";
|
|
3
|
-
import { watchSpacePerPixel } from "
|
|
4
|
-
import { PainterGizmo } from "
|
|
3
|
+
import { watchSpacePerPixel } from "./../../../behaviors";
|
|
4
|
+
import { PainterGizmo } from "./../../../painters/gizmo";
|
|
5
5
|
import { PainterCellInfos } from "./painter-cell-infos";
|
|
6
6
|
class PainterManager {
|
|
7
7
|
constructor() {
|
|
@@ -13,6 +13,7 @@ class PainterManager {
|
|
|
13
13
|
this.bbox = new TgdBoundingBox();
|
|
14
14
|
this.scalebarCleanup = null;
|
|
15
15
|
this.painterGizmo = new PainterGizmo();
|
|
16
|
+
this.resolutionForMovement = 1;
|
|
16
17
|
this.cameraReset = () => {
|
|
17
18
|
const { context, bbox } = this;
|
|
18
19
|
if (!context)
|
|
@@ -35,7 +36,36 @@ class PainterManager {
|
|
|
35
36
|
context.animSchedule({
|
|
36
37
|
duration: 0.5,
|
|
37
38
|
action: tgdActionCreateCameraInterpolation(context.camera, state),
|
|
39
|
+
onEnd: this.highRes,
|
|
38
40
|
});
|
|
41
|
+
this.lowRes();
|
|
42
|
+
};
|
|
43
|
+
this.highRes = () => {
|
|
44
|
+
const { context } = this;
|
|
45
|
+
if (!context)
|
|
46
|
+
return;
|
|
47
|
+
if (context.resolution === 1)
|
|
48
|
+
return;
|
|
49
|
+
context.resolution = 1;
|
|
50
|
+
context.paint();
|
|
51
|
+
};
|
|
52
|
+
this.lowRes = () => {
|
|
53
|
+
const { context } = this;
|
|
54
|
+
if (!context)
|
|
55
|
+
return;
|
|
56
|
+
if (context.resolution !== 1)
|
|
57
|
+
return;
|
|
58
|
+
context.resolution = this.resolutionForMovement;
|
|
59
|
+
context.paint();
|
|
60
|
+
};
|
|
61
|
+
this._cameraChangeTimeout = -1;
|
|
62
|
+
this.handleCameraChange = () => {
|
|
63
|
+
const { context } = this;
|
|
64
|
+
if (!context)
|
|
65
|
+
return;
|
|
66
|
+
globalThis.clearTimeout(this._cameraChangeTimeout);
|
|
67
|
+
this._cameraChangeTimeout = globalThis.setTimeout(this.highRes, 50);
|
|
68
|
+
this.lowRes();
|
|
39
69
|
};
|
|
40
70
|
}
|
|
41
71
|
get gizmo() {
|
|
@@ -76,7 +106,13 @@ class PainterManager {
|
|
|
76
106
|
if (!canvas || !cellInfos) {
|
|
77
107
|
return;
|
|
78
108
|
}
|
|
79
|
-
|
|
109
|
+
this.resolutionForMovement = Math.sqrt(Math.min(1, 250000 / this._cellInfos.length));
|
|
110
|
+
const context = new TgdContext(canvas, {
|
|
111
|
+
alpha: false,
|
|
112
|
+
antialias: true,
|
|
113
|
+
depth: true,
|
|
114
|
+
resolution: 1,
|
|
115
|
+
});
|
|
80
116
|
this.context = context;
|
|
81
117
|
this.scalebarCleanup = watchSpacePerPixel(context, this.eventScalebar);
|
|
82
118
|
const clear = new TgdPainterClear(context, {
|
|
@@ -104,6 +140,7 @@ class PainterManager {
|
|
|
104
140
|
inertiaPanning: 1000,
|
|
105
141
|
inertiaZoom: 300,
|
|
106
142
|
});
|
|
143
|
+
this.orbit.eventChange.addListener(this.handleCameraChange);
|
|
107
144
|
context.paint();
|
|
108
145
|
context.execAfterNextPaint(this.cameraReset);
|
|
109
146
|
}
|
|
@@ -132,4 +169,4 @@ export function useManager({ cellInfos, gizmo }) {
|
|
|
132
169
|
}, [gizmo, manager]);
|
|
133
170
|
return refManager.current;
|
|
134
171
|
}
|
|
135
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
172
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vcnBoby12aWV3ZXItc29tYXMtb25seS9tYW5hZ2VyL21hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGNBQWMsRUFDZCxxQkFBcUIsRUFFckIsVUFBVSxFQUNWLHdCQUF3QixFQUN4QixRQUFRLEVBQ1IsZUFBZSxFQUVmLGVBQWUsRUFDZixrQ0FBa0MsR0FDbkMsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFMUIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2pELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVoRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUl4RCxNQUFNLGNBQWM7SUFBcEI7UUFJa0Isa0JBQWEsR0FBRyxJQUFJLFFBQVEsRUFBVSxDQUFDO1FBRS9DLFlBQU8sR0FBNkIsSUFBSSxDQUFDO1FBQ3pDLGVBQVUsR0FBMkIsRUFBRSxDQUFDO1FBQ3hDLFlBQU8sR0FBc0IsSUFBSSxDQUFDO1FBQ2xDLFVBQUssR0FBb0MsSUFBSSxDQUFDO1FBQzlDLFNBQUksR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQzVCLG9CQUFlLEdBQXdCLElBQUksQ0FBQztRQUNuQyxpQkFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDM0MsMEJBQXFCLEdBQUcsQ0FBQyxDQUFDO1FBa0N6QixnQkFBVyxHQUFHLEdBQUcsRUFBRTtZQUMxQixNQUFNLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQztZQUMvQixJQUFJLENBQUMsT0FBTztnQkFBRSxPQUFPO1lBRXJCLE9BQU8sQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDM0MsT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztZQUM3QyxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQzlDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNsQyxJQUNFLEtBQUssR0FBRyxDQUFDO2dCQUNULE1BQU0sR0FBRyxDQUFDO2dCQUNWLGNBQWMsQ0FBQyxXQUFXLEdBQUcsQ0FBQztnQkFDOUIsY0FBYyxDQUFDLFlBQVksR0FBRyxDQUFDLEVBQy9CLENBQUM7Z0JBQ0QsT0FBTztZQUNULENBQUM7WUFFRCxjQUFjLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7Z0JBRWxELE9BQU87WUFDVCxDQUFDO1lBQ0QsTUFBTSxLQUFLLEdBQUcsY0FBYyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQy9DLE9BQU8sQ0FBQyxZQUFZLENBQUM7Z0JBQ25CLFFBQVEsRUFBRSxHQUFHO2dCQUNiLE1BQU0sRUFBRSxrQ0FBa0MsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQztnQkFDakUsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPO2FBQ3BCLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNoQixDQUFDLENBQUM7UUFFZSxZQUFPLEdBQUcsR0FBRyxFQUFFO1lBQzlCLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7WUFDekIsSUFBSSxDQUFDLE9BQU87Z0JBQUUsT0FBTztZQUVyQixJQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUssQ0FBQztnQkFBRSxPQUFPO1lBRXJDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDO1lBQ3ZCLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNsQixDQUFDLENBQUM7UUFFZSxXQUFNLEdBQUcsR0FBRyxFQUFFO1lBQzdCLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7WUFDekIsSUFBSSxDQUFDLE9BQU87Z0JBQUUsT0FBTztZQUVyQixJQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUssQ0FBQztnQkFBRSxPQUFPO1lBRXJDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDO1lBQ2hELE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNsQixDQUFDLENBQUM7UUFxRE0seUJBQW9CLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFMUIsdUJBQWtCLEdBQUcsR0FBRyxFQUFFO1lBQ2hDLE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUM7WUFDekIsSUFBSSxDQUFDLE9BQU87Z0JBQUUsT0FBTztZQUVyQixVQUFVLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDcEUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2hCLENBQUMsQ0FBQztJQWNKLENBQUM7SUE3SkMsSUFBSSxLQUFLO1FBQ1AsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQztJQUNuQyxDQUFDO0lBQ0QsSUFBSSxLQUFLLENBQUMsS0FBMEQ7UUFDbEUsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEdBQUcsS0FBSyxhQUFMLEtBQUssY0FBTCxLQUFLLEdBQUksS0FBSyxDQUFDO0lBQzdDLENBQUM7SUFFRCxJQUFJLE1BQU07UUFDUixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUNELElBQUksTUFBTSxDQUFDLE1BQWdDO1FBQ3pDLElBQUksSUFBSSxDQUFDLE9BQU8sS0FBSyxNQUFNO1lBQUUsT0FBTztRQUVwQyxJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztRQUN0QixJQUFJLE1BQU07WUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7O1lBQ3pCLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRUQsSUFBSSxTQUFTO1FBQ1gsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDO0lBQ3pCLENBQUM7SUFDRCxJQUFJLFNBQVMsQ0FBQyxTQUFpQztRQUM3QyxJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssU0FBUztZQUFFLE9BQU87UUFFMUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUM7UUFDNUIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFFakIsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQXFETyxVQUFVO1FBQ2hCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBRWpCLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFDbkMsSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBRTFCLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLHFCQUFxQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNyRixNQUFNLE9BQU8sR0FBRyxJQUFJLFVBQVUsQ0FBQyxNQUFNLEVBQUU7WUFDckMsS0FBSyxFQUFFLEtBQUs7WUFDWixTQUFTLEVBQUUsSUFBSTtZQUNmLEtBQUssRUFBRSxJQUFJO1lBQ1gsVUFBVSxFQUFFLENBQUM7U0FDZCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsZUFBZSxHQUFHLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDdkUsTUFBTSxLQUFLLEdBQUcsSUFBSSxlQUFlLENBQUMsT0FBTyxFQUFFO1lBQ3pDLEtBQUssRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNuQixLQUFLLEVBQUUsQ0FBQztTQUNULENBQUMsQ0FBQztRQUNILE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sS0FBSyxHQUFHLElBQUksZUFBZSxDQUFDLE9BQU8sRUFBRTtZQUN6QyxLQUFLLEVBQUUsTUFBTTtZQUNiLFFBQVEsRUFBRSxDQUFDLGdCQUFnQixDQUFDO1NBQzdCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUNwQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQzdDLE1BQU0sTUFBTSxHQUFHLElBQUkscUJBQXFCLEVBQUUsQ0FBQztRQUMzQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsZ0JBQWdCLENBQUM7UUFDbEMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztRQUN0QyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDO1FBQ3pDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDdkMsTUFBTSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7UUFDaEIsTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNuRixPQUFPLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztRQUN4QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksd0JBQXdCLENBQUMsT0FBTyxFQUFFO1lBQ2pELFlBQVksRUFBRSxJQUFJO1lBQ2xCLGNBQWMsRUFBRSxJQUFJO1lBQ3BCLFdBQVcsRUFBRSxHQUFHO1NBQ2pCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsQ0FBQztRQUM1RCxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEIsT0FBTyxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBYU8sTUFBTTs7UUFDWixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBRWxCLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBQSxJQUFJLENBQUMsZUFBZSxvREFBSSxDQUFDO1FBQ3pCLE1BQUEsSUFBSSxDQUFDLEtBQUssMENBQUUsTUFBTSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztJQUN0QixDQUFDO0NBQ0Y7QUFJRCxNQUFNLFVBQVUsVUFBVSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBOEI7SUFDekUsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBd0IsSUFBSSxDQUFDLENBQUM7SUFDN0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPO1FBQUUsVUFBVSxDQUFDLE9BQU8sR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO0lBQ25FLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUM7SUFDbkMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDbkIsT0FBTyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDaEMsQ0FBQyxFQUFFLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDekIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDbkIsT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7SUFDeEIsQ0FBQyxFQUFFLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDckIsT0FBTyxVQUFVLENBQUMsT0FBTyxDQUFDO0FBQzVCLENBQUMifQ==
|
|
@@ -16,7 +16,7 @@ export class PainterCellInfos extends TgdPainterGroup {
|
|
|
16
16
|
const bbox = new TgdBoundingBox();
|
|
17
17
|
const painterPointsCloudOptions = parseCellInfos(options.cellInfos, bbox);
|
|
18
18
|
const uvs = (_a = middleLuminance(painterPointsCloudOptions.dataUV)) !== null && _a !== void 0 ? _a : new Float32Array(2 * options.cellInfos.length);
|
|
19
|
-
const painterPointsCloud = new TgdPainterPointsCloud(context, Object.assign(Object.assign({}, painterPointsCloudOptions), { dataUV: computeAmbientOcclusion(bbox,
|
|
19
|
+
const painterPointsCloud = new TgdPainterPointsCloud(context, Object.assign(Object.assign({}, painterPointsCloudOptions), { dataUV: computeAmbientOcclusion(bbox, 15 * RADIUS, painterPointsCloudOptions.dataPoint, uvs), texture: texturePalette, fragCode: TgdPainterPointsCloud.fragCodeSphere({
|
|
20
20
|
enableSpecular: true,
|
|
21
21
|
specularExponent: 50,
|
|
22
22
|
}) }));
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { tgdFullscreenToggle } from "@tolokoban/tgd";
|
|
3
3
|
import React from "react";
|
|
4
|
-
import { classNames } from "
|
|
4
|
+
import { classNames } from "./../../utils";
|
|
5
5
|
import { ControlsLayout } from "../controls-layout";
|
|
6
6
|
import MorphoViewerScalebar from "../morpho-viewer-scalebar";
|
|
7
7
|
import { useManager as usePainterManager } from "./manager";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { IconSpinner } from "
|
|
3
|
-
import { classNames } from "
|
|
2
|
+
import { IconSpinner } from "./../../icons/spinner";
|
|
3
|
+
import { classNames } from "./../../utils";
|
|
4
4
|
import styles from "./morpho-viewer-spinner.module.css";
|
|
5
5
|
export function MorphoViewerSpinner({ className, label = "Neuron" }) {
|
|
6
6
|
return (_jsxs("div", { className: classNames(className, styles.morphoViewerSpinner), children: [_jsx(IconSpinner, {}), _jsxs("div", { children: ["Loading", _jsx("br", {}), label] })] }));
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
div.morphoViewerSpinner {
|
|
2
|
+
position: absolute;
|
|
3
|
+
left: 0;
|
|
4
|
+
top: 0;
|
|
5
|
+
width: 100%;
|
|
6
|
+
height: 100%;
|
|
7
|
+
font: inherit;
|
|
8
|
+
font-size: 2em;
|
|
9
|
+
font-weight: normal;
|
|
10
|
+
display: grid;
|
|
11
|
+
place-items: center;
|
|
12
|
+
color: #fff;
|
|
13
|
+
background-color: #000;
|
|
14
|
+
|
|
15
|
+
>div {
|
|
16
|
+
margin: 0;
|
|
17
|
+
padding: 0;
|
|
18
|
+
position: absolute;
|
|
19
|
+
left: 0;
|
|
20
|
+
top: 0;
|
|
21
|
+
width: 100%;
|
|
22
|
+
height: 100%;
|
|
23
|
+
display: grid;
|
|
24
|
+
place-items: center;
|
|
25
|
+
text-align: center;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
>svg {
|
|
29
|
+
font-size: 600%;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { classNames } from "
|
|
2
|
+
import { classNames } from "./../../utils";
|
|
3
3
|
import styles from "./tooltip.module.css";
|
|
4
4
|
export default function Tooltip({ className, classNameTooltip, tooltip, arrow = "top", arrowWidth = 16, arrowHeight = 16, backColor = "#fff", foreColor = "#000", children, }) {
|
|
5
5
|
return (_jsxs("div", { className: classNames(className, styles.container), style: {
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
.container {
|
|
2
|
+
position: relative;
|
|
3
|
+
--custom-backColor: #fff;
|
|
4
|
+
--custom-foreColor: #000;
|
|
5
|
+
--arrowWidth: 16px;
|
|
6
|
+
--arrowHeight: 16px;
|
|
7
|
+
--borderColor: var(--custom-foreColor);
|
|
8
|
+
--borderColor: color-mix(in srgb, var(--custom-foreColor) 50%, transparent 50%);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.tooltip {
|
|
12
|
+
border-radius: 0.25em;
|
|
13
|
+
padding: 0.5em 1em;
|
|
14
|
+
color: var(--custom-foreColor, #000);
|
|
15
|
+
background-color: var(--custom-backColor, #fff);
|
|
16
|
+
position: absolute;
|
|
17
|
+
/* width: fit-content; */
|
|
18
|
+
z-index: 999999;
|
|
19
|
+
box-shadow: 0 0.25em 0.5em #0007;
|
|
20
|
+
pointer-events: none;
|
|
21
|
+
border: 1px solid var(--borderColor);
|
|
22
|
+
text-align: center;
|
|
23
|
+
min-width: 160px;
|
|
24
|
+
transition: opacity 0.2s;
|
|
25
|
+
opacity: 0;
|
|
26
|
+
|
|
27
|
+
&.top {
|
|
28
|
+
left: 50%;
|
|
29
|
+
bottom: 0;
|
|
30
|
+
transform: translate(-50%, calc(100% + var(--arrowHeight)));
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
&.topLeft {
|
|
34
|
+
left: 50%;
|
|
35
|
+
bottom: 0;
|
|
36
|
+
transform: translate(calc(-1 * var(--arrowWidth)), calc(100% + var(--arrowHeight)));
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
&.topRight {
|
|
40
|
+
left: 50%;
|
|
41
|
+
bottom: 0;
|
|
42
|
+
transform: translate(calc(-100% + var(--arrowWidth)), calc(100% + var(--arrowHeight)));
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
.arrow {
|
|
46
|
+
width: var(--arrowWidth);
|
|
47
|
+
height: var(--arrowHeight);
|
|
48
|
+
fill: var(--custom-backColor);
|
|
49
|
+
stroke: var(--borderColor);
|
|
50
|
+
position: absolute;
|
|
51
|
+
|
|
52
|
+
&.top {
|
|
53
|
+
top: 0;
|
|
54
|
+
left: 50%;
|
|
55
|
+
transform: translate(-50%, calc(-100% + 1px));
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
&.topLeft {
|
|
59
|
+
top: 0;
|
|
60
|
+
left: var(--arrowWidth);
|
|
61
|
+
transform: translate(-50%, calc(-100% + 1px));
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
&.topRight {
|
|
65
|
+
top: 0;
|
|
66
|
+
right: var(--arrowWidth);
|
|
67
|
+
transform: translate(50%, calc(-100% + 1px));
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.container:hover .tooltip {
|
|
73
|
+
opacity: 1;
|
|
74
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
svg.icon {
|
|
2
|
+
width: var(--custom-icon-size, 1.5em);
|
|
3
|
+
height: var(--custom-icon-size, 1.5em);
|
|
4
|
+
background-color: transparent;
|
|
5
|
+
fill: currentColor;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
svg.spin {
|
|
9
|
+
animation: spin 0.6s linear infinite;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
@keyframes spin {
|
|
13
|
+
from {
|
|
14
|
+
transform: rotate(0deg);
|
|
15
|
+
}
|
|
16
|
+
to {
|
|
17
|
+
transform: rotate(360deg);
|
|
18
|
+
}
|
|
19
|
+
}
|
package/dist/icons/spinner.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { classNames } from "
|
|
2
|
+
import { classNames } from "./../utils";
|
|
3
3
|
import styles from "./icon.module.css";
|
|
4
4
|
export function IconSpinner({ className, style, size }) {
|
|
5
5
|
return (_jsxs("svg", { className: classNames(className, styles.icon, styles.spin), style: Object.assign({ "--custom-icon-size": size !== null && size !== void 0 ? size : "1.5em" }, style), viewBox: "-12 -12 24 24", stroke: "currentColor", xmlns: "http://www.w3.org/2000/svg", children: [_jsx("title", { children: "spinner" }), _jsx("path", { d: "M0,-8A8,8 0 0,0 -8,0", strokeWidth: "1", strokeLinecap: "round", fill: "none" })] }));
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type TgdContext, TgdPainterGroup } from "@tolokoban/tgd";
|
|
2
|
-
import type { ColorsInterface } from "
|
|
2
|
+
import type { ColorsInterface } from "../../colors";
|
|
3
3
|
import type { CellNodes } from "./nodes";
|
|
4
4
|
export declare class SwcPainter extends TgdPainterGroup {
|
|
5
5
|
readonly context: TgdContext;
|
package/dist/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openbraininstitute/morphoviewer",
|
|
3
|
-
"version": "0.26.
|
|
3
|
+
"version": "0.26.4",
|
|
4
4
|
"description": "Class to display SWC files in 3D on a canvas",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
"doc:watch": "typedoc --watch",
|
|
16
16
|
"prebuild": "npm run clean",
|
|
17
17
|
"build": "build-typescript-library .",
|
|
18
|
+
"build:debug": "build-typescript-library . --verbose",
|
|
18
19
|
"prestart": "npm run clean",
|
|
19
20
|
"start": "build-typescript-library --watch .",
|
|
20
21
|
"format": "biome format --write src/",
|
|
@@ -41,17 +42,20 @@
|
|
|
41
42
|
"url": "https://github.com/openbraininstitute/morphoviewer/issues"
|
|
42
43
|
},
|
|
43
44
|
"dependencies": {
|
|
44
|
-
"@tolokoban/tgd": "^2.0.
|
|
45
|
-
"fflate": "^0.8.
|
|
45
|
+
"@tolokoban/tgd": "^2.0.142",
|
|
46
|
+
"fflate": "^0.8.3",
|
|
46
47
|
"tslib": "^2.8.1"
|
|
47
48
|
},
|
|
48
49
|
"devDependencies": {
|
|
50
|
+
"@rspack/cli": "^2.0.6",
|
|
49
51
|
"@types/jest": "^30.0.0",
|
|
50
52
|
"@types/react": "^19.2.15",
|
|
51
53
|
"babel-jest": "^30.4.1",
|
|
52
|
-
"build-typescript-library": "^0.
|
|
54
|
+
"build-typescript-library": "^0.12.0",
|
|
55
|
+
"css-loader": "^7.1.4",
|
|
53
56
|
"jest": "^30.4.2",
|
|
54
57
|
"jest-environment-jsdom": "^30.4.1",
|
|
58
|
+
"style-loader": "^4.0.0",
|
|
55
59
|
"ts-jest": "^29.4.11",
|
|
56
60
|
"ts-loader": "^9.5.7",
|
|
57
61
|
"ts-patch": "^3.3.0",
|
|
@@ -103,4 +107,4 @@
|
|
|
103
107
|
"peerDependencies": {
|
|
104
108
|
"react": "^19.2.5"
|
|
105
109
|
}
|
|
106
|
-
}
|
|
110
|
+
}
|
package/dist/parser/swc.d.ts
CHANGED
package/dist/parser/swc.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type MorphoViewerTree } from "
|
|
2
|
-
import type { Morphology } from "
|
|
1
|
+
import { type MorphoViewerTree } from "../components/morpho-viewer-simul/types/public";
|
|
2
|
+
import type { Morphology } from "../components/morpho-viewer-simul/types/private";
|
|
3
3
|
export declare function morphoViewerConvertMorphologyIntoTree(morphology: Morphology, cellId: string): MorphoViewerTree;
|
|
4
4
|
//# sourceMappingURL=morphology-to-tree.d.ts.map
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { MorphoViewerTreeItemType, } from "
|
|
1
|
+
import { MorphoViewerTreeItemType, } from "./../components/morpho-viewer-simul/types/public";
|
|
2
2
|
export function morphoViewerConvertMorphologyIntoTree(morphology, cellId) {
|
|
3
3
|
const tree = {
|
|
4
4
|
cellId,
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { type MorphoViewerTree } from "
|
|
1
|
+
import { type MorphoViewerTree } from "../components/morpho-viewer-simul/types/public";
|
|
2
2
|
export declare function morphoViewerConvertSwcIntoTree(swc: string, cellId: string): MorphoViewerTree;
|
|
3
3
|
//# sourceMappingURL=swc-to-tree.d.ts.map
|