@openbraininstitute/morphoviewer 0.27.2 → 0.30.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.
- package/dist/components/morpho-viewer-octree/morpho-viewer-octree.d.ts.map +1 -1
- package/dist/components/morpho-viewer-octree/morpho-viewer-octree.js +3 -2
- package/dist/components/morpho-viewer-scalebar/morpho-viewer-scalebar.d.ts +4 -3
- package/dist/components/morpho-viewer-scalebar/morpho-viewer-scalebar.d.ts.map +1 -1
- package/dist/components/morpho-viewer-scalebar/morpho-viewer-scalebar.js +61 -10
- package/dist/components/morpho-viewer-scalebar/morpho-viewer-scalebar.module.css +19 -9
- package/dist/components/morpho-viewer-scalebar/painter.d.ts +2 -1
- package/dist/components/morpho-viewer-scalebar/painter.d.ts.map +1 -1
- package/dist/components/morpho-viewer-scalebar/painter.js +113 -10
- package/dist/components/morpho-viewer-scalebar/resolve.d.ts +36 -0
- package/dist/components/morpho-viewer-scalebar/resolve.d.ts.map +1 -0
- package/dist/components/morpho-viewer-scalebar/resolve.js +129 -0
- package/dist/components/morpho-viewer-simul/morpho-viewer-simul.d.ts.map +1 -1
- package/dist/components/morpho-viewer-simul/morpho-viewer-simul.js +3 -2
- package/dist/components/morpho-viewer-small-circuit/morpho-viewer-small-circuit.d.ts.map +1 -1
- package/dist/components/morpho-viewer-small-circuit/morpho-viewer-small-circuit.js +3 -2
- package/dist/components/morpho-viewer-small-circuit/painter/manager.d.ts +9 -1
- package/dist/components/morpho-viewer-small-circuit/painter/manager.d.ts.map +1 -1
- package/dist/components/morpho-viewer-small-circuit/painter/manager.js +54 -5
- package/dist/components/morpho-viewer-small-circuit/painter/painter-synapses/index.d.ts +2 -0
- package/dist/components/morpho-viewer-small-circuit/painter/painter-synapses/index.d.ts.map +1 -0
- package/dist/components/morpho-viewer-small-circuit/painter/painter-synapses/index.js +2 -0
- package/dist/components/morpho-viewer-small-circuit/painter/painter-synapses/painter-synapses.d.ts +23 -0
- package/dist/components/morpho-viewer-small-circuit/painter/painter-synapses/painter-synapses.d.ts.map +1 -0
- package/dist/components/morpho-viewer-small-circuit/painter/painter-synapses/painter-synapses.js +79 -0
- package/dist/components/morpho-viewer-small-circuit/types.d.ts +8 -0
- package/dist/components/morpho-viewer-small-circuit/types.d.ts.map +1 -1
- package/dist/components/morpho-viewer-somas-only/index.d.ts +1 -0
- package/dist/components/morpho-viewer-somas-only/index.d.ts.map +1 -1
- package/dist/components/morpho-viewer-somas-only/index.js +2 -1
- package/dist/components/morpho-viewer-somas-only/manager/adaptative-resolution.d.ts.map +1 -1
- package/dist/components/morpho-viewer-somas-only/manager/adaptative-resolution.js +7 -5
- package/dist/components/morpho-viewer-somas-only/manager/manager.d.ts +10 -1
- package/dist/components/morpho-viewer-somas-only/manager/manager.d.ts.map +1 -1
- package/dist/components/morpho-viewer-somas-only/manager/manager.js +103 -6
- package/dist/components/morpho-viewer-somas-only/manager/painter-cell-infos.d.ts.map +1 -1
- package/dist/components/morpho-viewer-somas-only/manager/painter-cell-infos.js +69 -7
- package/dist/components/morpho-viewer-somas-only/morpho-viewer-somas-only.d.ts.map +1 -1
- package/dist/components/morpho-viewer-somas-only/morpho-viewer-somas-only.js +3 -2
- package/dist/components/morpho-viewer-somas-only/types.d.ts +4 -0
- package/dist/components/morpho-viewer-somas-only/types.d.ts.map +1 -1
- package/dist/components/signals.d.ts +15 -0
- package/dist/components/signals.d.ts.map +1 -0
- package/dist/components/signals.js +27 -0
- package/dist/components/snapshot.d.ts +3 -0
- package/dist/components/snapshot.d.ts.map +1 -0
- package/dist/components/snapshot.js +32 -0
- package/dist/components/types.d.ts +57 -1
- package/dist/components/types.d.ts.map +1 -1
- package/dist/components/types.js +24 -2
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/package.json +2 -2
- package/dist/painters/gizmo.d.ts +1 -0
- package/dist/painters/gizmo.d.ts.map +1 -1
- package/dist/painters/gizmo.js +9 -2
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"morpho-viewer-octree.d.ts","sourceRoot":"","sources":["../../../src/components/morpho-viewer-octree/morpho-viewer-octree.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"morpho-viewer-octree.d.ts","sourceRoot":"","sources":["../../../src/components/morpho-viewer-octree/morpho-viewer-octree.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAU1B,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,SAAS,CAAC;AAIvD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,uBAAuB,qBAqChE"}
|
|
@@ -1,6 +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 { version } from "./../../package.json";
|
|
4
5
|
import { classNames } from "./../../utils";
|
|
5
6
|
import { MorphoViewerIconCenter } from "../icons/center";
|
|
6
7
|
import { MorphoViewerIconFullscreen } from "../icons/fullscreen";
|
|
@@ -19,7 +20,7 @@ export function MorphoViewerOctree(props) {
|
|
|
19
20
|
const handleResetCamera = () => {
|
|
20
21
|
manager.resetCamera();
|
|
21
22
|
};
|
|
22
|
-
return (_jsxs("div", { className: classNames(props.className, styles.morphoViewerOctree), ref: ref, children: [_jsx(Canvas, { painterManager: manager }), _jsxs("header", { children: [_jsx("button", { type: "button", onClick: handleResetCamera, children: _jsx(MorphoViewerIconCenter, {}) }), _jsx("button", { type: "button", onClick: handleFullscreen, children: _jsx(MorphoViewerIconFullscreen, {}) })] }), props.scalebar && (_jsx(MorphoViewerScalebar, { className: props.scalebar, spacePerPixelEvent: manager.eventScalebar }))] }));
|
|
23
|
+
return (_jsxs("div", { className: classNames(props.className, styles.morphoViewerOctree), ref: ref, "data-version": version, children: [_jsx(Canvas, { painterManager: manager }), _jsxs("header", { children: [_jsx("button", { type: "button", onClick: handleResetCamera, children: _jsx(MorphoViewerIconCenter, {}) }), _jsx("button", { type: "button", onClick: handleFullscreen, children: _jsx(MorphoViewerIconFullscreen, {}) })] }), props.scalebar && (_jsx(MorphoViewerScalebar, { className: props.scalebar, spacePerPixelEvent: manager.eventScalebar, unit: props.scalebar }))] }));
|
|
23
24
|
}
|
|
24
25
|
const Canvas = React.memo(({ painterManager }) => {
|
|
25
26
|
return (_jsx("canvas", { className: styles.webgl, ref: (canvas) => {
|
|
@@ -29,4 +30,4 @@ const Canvas = React.memo(({ painterManager }) => {
|
|
|
29
30
|
};
|
|
30
31
|
} }, "canvas"));
|
|
31
32
|
});
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ycGhvLXZpZXdlci1vY3RyZWUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9tb3JwaG8tdmlld2VyLW9jdHJlZS9tb3JwaG8tdmlld2VyLW9jdHJlZS50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JELE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUxQixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUVyQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRSxPQUFPLG9CQUFvQixNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBc0IsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUl6RSxPQUFPLE1BQU0sTUFBTSxtQ0FBbUMsQ0FBQztBQUV2RCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsS0FBOEI7SUFDL0QsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBd0IsSUFBSSxDQUFDLENBQUM7SUFDdEQsTUFBTSxPQUFPLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEMsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLEVBQUU7UUFDNUIsTUFBTSxHQUFHLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQztRQUN4QixJQUFJLENBQUMsR0FBRztZQUFFLE9BQU87UUFFakIsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDM0IsQ0FBQyxDQUFDO0lBQ0YsTUFBTSxpQkFBaUIsR0FBRyxHQUFHLEVBQUU7UUFDN0IsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3hCLENBQUMsQ0FBQztJQUVGLE9BQU8sQ0FDTCxlQUNFLFNBQVMsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsa0JBQWtCLENBQUMsRUFDakUsR0FBRyxFQUFFLEdBQUcsa0JBQ00sT0FBTyxhQUVyQixLQUFDLE1BQU0sSUFBQyxjQUFjLEVBQUUsT0FBTyxHQUFJLEVBQ25DLDZCQUNFLGlCQUFRLElBQUksRUFBQyxRQUFRLEVBQUMsT0FBTyxFQUFFLGlCQUFpQixZQUM5QyxLQUFDLHNCQUFzQixLQUFHLEdBQ25CLEVBQ1QsaUJBQVEsSUFBSSxFQUFDLFFBQVEsRUFBQyxPQUFPLEVBQUUsZ0JBQWdCLFlBQzdDLEtBQUMsMEJBQTBCLEtBQUcsR0FDdkIsSUFDRixFQUNSLEtBQUssQ0FBQyxRQUFRLElBQUksQ0FDakIsS0FBQyxvQkFBb0IsSUFDbkIsU0FBUyxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQ3pCLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxhQUFhLEVBQ3pDLElBQUksRUFBRSxLQUFLLENBQUMsUUFBUSxHQUNwQixDQUNILElBQ0csQ0FDUCxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLGNBQWMsRUFBcUMsRUFBRSxFQUFFO0lBQ2xGLE9BQU8sQ0FDTCxpQkFFRSxTQUFTLEVBQUUsTUFBTSxDQUFDLEtBQUssRUFDdkIsR0FBRyxFQUFFLENBQUMsTUFBZ0MsRUFBRSxFQUFFO1lBQ3hDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1lBQy9CLE9BQU8sR0FBRyxFQUFFO2dCQUNWLGNBQWMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDO1lBQy9CLENBQUMsQ0FBQztRQUNKLENBQUMsSUFQRyxRQUFRLENBUVosQ0FDSCxDQUFDO0FBQ0osQ0FBQyxDQUFDLENBQUMifQ==
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import React from "react";
|
|
2
|
+
import { type PropsForScalebar } from "../types";
|
|
2
3
|
import type { TgdEvent } from "@tolokoban/tgd";
|
|
3
4
|
export interface MorphoViewerScalebarProps {
|
|
4
|
-
className?:
|
|
5
|
+
className?: PropsForScalebar["scalebar"];
|
|
5
6
|
spacePerPixelEvent: TgdEvent<number>;
|
|
6
|
-
unit?: number;
|
|
7
|
+
unit?: number | PropsForScalebar["scalebar"];
|
|
7
8
|
}
|
|
8
|
-
export default function MorphoViewerScalebar({ className, spacePerPixelEvent, unit, }: MorphoViewerScalebarProps): React.JSX.Element;
|
|
9
|
+
export default function MorphoViewerScalebar({ className, spacePerPixelEvent, unit: unitProp, }: MorphoViewerScalebarProps): React.JSX.Element;
|
|
9
10
|
//# sourceMappingURL=morpho-viewer-scalebar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"morpho-viewer-scalebar.d.ts","sourceRoot":"","sources":["../../../src/components/morpho-viewer-scalebar/morpho-viewer-scalebar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"morpho-viewer-scalebar.d.ts","sourceRoot":"","sources":["../../../src/components/morpho-viewer-scalebar/morpho-viewer-scalebar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,EAAE,KAAK,gBAAgB,EAA4C,MAAM,UAAU,CAAC;AAU3F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI/C,MAAM,WAAW,yBAAyB;IACxC,SAAS,CAAC,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAC;IACzC,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAIrC,IAAI,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC,UAAU,CAAC,CAAC;CAC9C;AAED,MAAM,CAAC,OAAO,UAAU,oBAAoB,CAAC,EAC3C,SAAS,EACT,kBAAkB,EAClB,IAAI,EAAE,QAAQ,GACf,EAAE,yBAAyB,qBAW3B"}
|
|
@@ -1,30 +1,81 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
2
|
import React from "react";
|
|
3
3
|
import { classNames } from "./../../utils";
|
|
4
|
+
import { ScalebarOrientation } from "../types";
|
|
4
5
|
import { paint } from "./painter";
|
|
6
|
+
import { normalizeScalebarConfig, resolveHorizontalScalebar, resolvePixelRatio, resolveUnitFactor, resolveVerticalScalebar, } from "./resolve";
|
|
5
7
|
import styles from "./morpho-viewer-scalebar.module.css";
|
|
6
|
-
export default function MorphoViewerScalebar({ className, spacePerPixelEvent, unit
|
|
8
|
+
export default function MorphoViewerScalebar({ className, spacePerPixelEvent, unit: unitProp, }) {
|
|
9
|
+
const config = React.useMemo(() => normalizeScalebarConfig(className), [className]);
|
|
10
|
+
const unit = resolveUnitFactor(config, unitProp);
|
|
11
|
+
const pixelRatio = resolvePixelRatio(config);
|
|
7
12
|
const spacePerPixel = useSpacePerPixel(spacePerPixelEvent);
|
|
13
|
+
const sub = { config, unit, pixelRatio, spacePerPixel };
|
|
14
|
+
if (config.orientation === ScalebarOrientation.Vertical) {
|
|
15
|
+
return _jsx(VerticalScalebar, Object.assign({}, sub));
|
|
16
|
+
}
|
|
17
|
+
return _jsx(HorizontalScalebar, Object.assign({}, sub));
|
|
18
|
+
}
|
|
19
|
+
function VerticalScalebar({ config, unit, pixelRatio, spacePerPixel }) {
|
|
20
|
+
const resolved = React.useMemo(() => resolveVerticalScalebar(config), [config]);
|
|
8
21
|
const ref = React.useRef(null);
|
|
9
|
-
React.
|
|
22
|
+
const [hovered, setHovered] = React.useState(false);
|
|
23
|
+
const effectiveHover = resolved.needsHover && hovered;
|
|
24
|
+
const repaint = React.useCallback(() => {
|
|
10
25
|
const canvas = ref.current;
|
|
11
26
|
if (!canvas)
|
|
12
27
|
return;
|
|
13
|
-
paint(canvas, spacePerPixel, unit);
|
|
14
|
-
}, [spacePerPixel, unit]);
|
|
28
|
+
paint(canvas, spacePerPixel, unit, ScalebarOrientation.Vertical, resolved.paintParams(effectiveHover), pixelRatio);
|
|
29
|
+
}, [spacePerPixel, unit, resolved, effectiveHover, pixelRatio]);
|
|
30
|
+
useCanvasRepaint(ref, repaint, pixelRatio);
|
|
31
|
+
const enter = resolved.needsHover ? () => setHovered(true) : undefined;
|
|
32
|
+
const leave = resolved.needsHover ? () => setHovered(false) : undefined;
|
|
33
|
+
const canvasStyle = {
|
|
34
|
+
color: resolved.color,
|
|
35
|
+
fontSize: resolved.fontSize,
|
|
36
|
+
width: "100%",
|
|
37
|
+
height: "100%",
|
|
38
|
+
};
|
|
39
|
+
if (resolved.className) {
|
|
40
|
+
return (_jsx("canvas", { ref: ref, onMouseEnter: enter, onMouseLeave: leave, className: classNames(resolved.className, styles.morphoViewerScalebar), style: canvasStyle }));
|
|
41
|
+
}
|
|
42
|
+
let width = resolved.expandedWidth;
|
|
43
|
+
if (resolved.widthAnimates) {
|
|
44
|
+
width = effectiveHover ? resolved.expandedWidth : resolved.collapsedWidth;
|
|
45
|
+
}
|
|
46
|
+
return (_jsx("div", { className: styles.verticalContainer, style: Object.assign(Object.assign({}, resolved.containerStyle), { width, pointerEvents: resolved.needsHover ? "auto" : "none" }), onMouseEnter: enter, onMouseLeave: leave, children: _jsx("canvas", { ref: ref, className: styles.morphoViewerScalebar, style: canvasStyle }) }));
|
|
47
|
+
}
|
|
48
|
+
function HorizontalScalebar({ config, unit, pixelRatio, spacePerPixel }) {
|
|
49
|
+
var _a;
|
|
50
|
+
const resolved = React.useMemo(() => resolveHorizontalScalebar(config), [config]);
|
|
51
|
+
const ref = React.useRef(null);
|
|
52
|
+
const repaint = React.useCallback(() => {
|
|
53
|
+
const canvas = ref.current;
|
|
54
|
+
if (!canvas)
|
|
55
|
+
return;
|
|
56
|
+
paint(canvas, spacePerPixel, unit, ScalebarOrientation.Horizontal, undefined, pixelRatio);
|
|
57
|
+
}, [spacePerPixel, unit, pixelRatio]);
|
|
58
|
+
useCanvasRepaint(ref, repaint, pixelRatio);
|
|
59
|
+
const className = (_a = resolved.className) !== null && _a !== void 0 ? _a : (resolved.style ? undefined : styles.defaultLayout);
|
|
60
|
+
return (_jsx("canvas", { ref: ref, className: classNames(className, styles.morphoViewerScalebar), style: resolved.style }));
|
|
61
|
+
}
|
|
62
|
+
function useCanvasRepaint(ref, repaint, pixelRatio) {
|
|
63
|
+
React.useEffect(() => {
|
|
64
|
+
repaint();
|
|
65
|
+
}, [repaint]);
|
|
15
66
|
React.useEffect(() => {
|
|
16
67
|
const canvas = ref.current;
|
|
17
68
|
if (!canvas)
|
|
18
69
|
return;
|
|
70
|
+
const dpr = pixelRatio > 0 ? pixelRatio : 1;
|
|
19
71
|
const observer = new ResizeObserver(() => {
|
|
20
|
-
canvas.width = canvas.clientWidth;
|
|
21
|
-
canvas.height = canvas.clientHeight;
|
|
22
|
-
|
|
72
|
+
canvas.width = Math.max(1, Math.round(canvas.clientWidth * dpr));
|
|
73
|
+
canvas.height = Math.max(1, Math.round(canvas.clientHeight * dpr));
|
|
74
|
+
repaint();
|
|
23
75
|
});
|
|
24
76
|
observer.observe(canvas);
|
|
25
77
|
return () => observer.unobserve(canvas);
|
|
26
|
-
}, [
|
|
27
|
-
return (_jsx("canvas", { ref: ref, className: classNames(typeof className === "string" ? className : styles.defaultLayout, styles.morphoViewerScalebar) }));
|
|
78
|
+
}, [ref, repaint, pixelRatio]);
|
|
28
79
|
}
|
|
29
80
|
function useSpacePerPixel(spacePerPixelEvent) {
|
|
30
81
|
const [spacePerPixel, setSpacePerPixel] = React.useState(-1);
|
|
@@ -34,4 +85,4 @@ function useSpacePerPixel(spacePerPixelEvent) {
|
|
|
34
85
|
}, [spacePerPixelEvent]);
|
|
35
86
|
return spacePerPixel;
|
|
36
87
|
}
|
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9ycGhvLXZpZXdlci1zY2FsZWJhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vcnBoby12aWV3ZXItc2NhbGViYXIvbW9ycGhvLXZpZXdlci1zY2FsZWJhci50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUUxQixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRXJDLE9BQU8sRUFBOEMsbUJBQW1CLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDM0YsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLHlCQUF5QixFQUN6QixpQkFBaUIsRUFDakIsaUJBQWlCLEVBQ2pCLHVCQUF1QixHQUN4QixNQUFNLFdBQVcsQ0FBQztBQUluQixPQUFPLE1BQU0sTUFBTSxxQ0FBcUMsQ0FBQztBQVd6RCxNQUFNLENBQUMsT0FBTyxVQUFVLG9CQUFvQixDQUFDLEVBQzNDLFNBQVMsRUFDVCxrQkFBa0IsRUFDbEIsSUFBSSxFQUFFLFFBQVEsR0FDWTtJQUMxQixNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLHVCQUF1QixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUNwRixNQUFNLElBQUksR0FBRyxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDakQsTUFBTSxVQUFVLEdBQUcsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDN0MsTUFBTSxhQUFhLEdBQUcsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUUzRCxNQUFNLEdBQUcsR0FBRyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxDQUFDO0lBQ3hELElBQUksTUFBTSxD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
|
|
@@ -1,13 +1,23 @@
|
|
|
1
1
|
.morphoViewerScalebar {
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
background: transparent;
|
|
3
|
+
z-index: 1;
|
|
4
4
|
}
|
|
5
5
|
|
|
6
6
|
.defaultLayout {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
7
|
+
position: absolute;
|
|
8
|
+
left: 8px;
|
|
9
|
+
bottom: 8px;
|
|
10
|
+
width: calc(100% - 16px - 128px);
|
|
11
|
+
height: 1.4em;
|
|
12
|
+
pointer-events: none;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/* vertical ruler container. Position/size come from the resolved inline style;
|
|
16
|
+
* this class only carries stacking + the width transition used when the ruler
|
|
17
|
+
* expands on hover. */
|
|
18
|
+
.verticalContainer {
|
|
19
|
+
z-index: 3;
|
|
20
|
+
line-height: 1;
|
|
21
|
+
box-sizing: border-box;
|
|
22
|
+
transition: width 0.12s ease;
|
|
23
|
+
}
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
|
|
1
|
+
import type { VerticalPaintParams } from "./resolve";
|
|
2
|
+
export declare function paint(canvas: HTMLCanvasElement, spacePerPixel: number, unitFactor?: number, orientation?: "horizontal" | "vertical", vertical?: VerticalPaintParams, pixelRatio?: number): void;
|
|
2
3
|
//# sourceMappingURL=painter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"painter.d.ts","sourceRoot":"","sources":["../../../src/components/morpho-viewer-scalebar/painter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"painter.d.ts","sourceRoot":"","sources":["../../../src/components/morpho-viewer-scalebar/painter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AA+BrD,wBAAgB,KAAK,CACnB,MAAM,EAAE,iBAAiB,EACzB,aAAa,EAAE,MAAM,EACrB,UAAU,SAAO,EACjB,WAAW,GAAE,YAAY,GAAG,UAAyB,EACrD,QAAQ,CAAC,EAAE,mBAAmB,EAC9B,UAAU,SAAI,QAuBf"}
|
|
@@ -1,17 +1,40 @@
|
|
|
1
1
|
const UNITS = ["m", "mm", "μm", "nm", "pm", "fm"];
|
|
2
2
|
const VALUES = [1, 2, 5, 10, 20, 25, 50, 100, 200, 250, 300, 400, 500, 600, 700, 800, 900];
|
|
3
|
-
|
|
3
|
+
const LABEL_GAP = 4;
|
|
4
|
+
const HORIZONTAL_THICKNESS = 2;
|
|
5
|
+
function createSnapper(thickness, dpr) {
|
|
6
|
+
const widthDevice = Math.max(1, Math.round(thickness * dpr));
|
|
7
|
+
const halfOffset = widthDevice % 2 ? 0.5 : 0;
|
|
8
|
+
return {
|
|
9
|
+
lineWidth: widthDevice / dpr,
|
|
10
|
+
snap: (posCss) => (Math.round(posCss * dpr - halfOffset) + halfOffset) / dpr,
|
|
11
|
+
snapPoint: (posCss) => Math.round(posCss * dpr) / dpr,
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
export function paint(canvas, spacePerPixel, unitFactor = 1e-6, orientation = "horizontal", vertical, pixelRatio = 1) {
|
|
4
15
|
const ctx = canvas.getContext("2d");
|
|
5
16
|
if (!ctx)
|
|
6
17
|
return;
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
|
|
18
|
+
const dpr = pixelRatio > 0 ? pixelRatio : 1;
|
|
19
|
+
const w = canvas.width / dpr;
|
|
20
|
+
const h = canvas.height / dpr;
|
|
21
|
+
ctx.setTransform(dpr, 0, 0, dpr, 0, 0);
|
|
10
22
|
ctx.clearRect(0, 0, w, h);
|
|
11
23
|
const css = globalThis.getComputedStyle(canvas);
|
|
12
24
|
ctx.fillStyle = css.color;
|
|
13
25
|
ctx.strokeStyle = css.color;
|
|
14
26
|
ctx.font = `${css.fontSize} ${css.fontFamily}`;
|
|
27
|
+
if (orientation === "vertical" && vertical) {
|
|
28
|
+
ctx.fillStyle = vertical.color;
|
|
29
|
+
ctx.strokeStyle = vertical.color;
|
|
30
|
+
paintVertical(ctx, w, h, spacePerPixel, unitFactor, vertical, dpr);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
paintHorizontal(ctx, w, h, spacePerPixel, unitFactor, dpr);
|
|
34
|
+
}
|
|
35
|
+
function paintHorizontal(ctx, w, h, spacePerPixel, unitFactor, dpr) {
|
|
36
|
+
const { snap, snapPoint, lineWidth } = createSnapper(HORIZONTAL_THICKNESS, dpr);
|
|
37
|
+
ctx.lineWidth = lineWidth;
|
|
15
38
|
const minStepWidth = 3 * ctx.measureText("999 mm").width;
|
|
16
39
|
const { unitText, width, value } = computeBestFit(w, spacePerPixel, unitFactor, minStepWidth);
|
|
17
40
|
let step = 0;
|
|
@@ -20,12 +43,12 @@ export function paint(canvas, spacePerPixel, unitFactor = 1e-6) {
|
|
|
20
43
|
step++;
|
|
21
44
|
const text = `${value * step} ${unitText} `;
|
|
22
45
|
const measure = ctx.measureText(text);
|
|
23
|
-
const y =
|
|
24
|
-
const x =
|
|
46
|
+
const y = snapPoint(measure.actualBoundingBoxAscent + measure.actualBoundingBoxDescent);
|
|
47
|
+
const x = snapPoint(stepX1 - (width + measure.width) / 2);
|
|
25
48
|
ctx.fillText(text, x, y);
|
|
26
|
-
const x0 =
|
|
27
|
-
const x1 =
|
|
28
|
-
const yy = h - measure.actualBoundingBoxAscent;
|
|
49
|
+
const x0 = snap(stepX0);
|
|
50
|
+
const x1 = snap(stepX1);
|
|
51
|
+
const yy = snap(h - measure.actualBoundingBoxAscent);
|
|
29
52
|
ctx.beginPath();
|
|
30
53
|
ctx.moveTo(x0, yy);
|
|
31
54
|
ctx.lineTo(x0, h);
|
|
@@ -36,6 +59,86 @@ export function paint(canvas, spacePerPixel, unitFactor = 1e-6) {
|
|
|
36
59
|
break;
|
|
37
60
|
}
|
|
38
61
|
}
|
|
62
|
+
function buildMajorPositions(bottomY, topY, majorStep, snap) {
|
|
63
|
+
const span = bottomY - topY;
|
|
64
|
+
const majorCount = Math.max(1, Math.round(span / majorStep));
|
|
65
|
+
const majors = [];
|
|
66
|
+
for (let m = 0; m <= majorCount; m++) {
|
|
67
|
+
majors.push(snap(bottomY - (m / majorCount) * span));
|
|
68
|
+
}
|
|
69
|
+
return majors;
|
|
70
|
+
}
|
|
71
|
+
function paintVertical(ctx, w, h, spacePerPixel, unitFactor, params, dpr) {
|
|
72
|
+
const { anchor, outerReserve, majorLength, minorLength, minorPerMajor } = params;
|
|
73
|
+
const { snap, lineWidth } = createSnapper(params.thickness, dpr);
|
|
74
|
+
ctx.lineWidth = lineWidth;
|
|
75
|
+
const sample = ctx.measureText("999 mm");
|
|
76
|
+
const textHeight = sample.actualBoundingBoxAscent + sample.actualBoundingBoxDescent;
|
|
77
|
+
const minStepHeight = 3 * textHeight;
|
|
78
|
+
const xBase = snap(anchor === "left" ? outerReserve : Math.round(w) - outerReserve);
|
|
79
|
+
const labelPad = params.labels
|
|
80
|
+
? Math.ceil((sample.actualBoundingBoxAscent + sample.actualBoundingBoxDescent) / 2) + 1
|
|
81
|
+
: 0;
|
|
82
|
+
const topY = snap(labelPad);
|
|
83
|
+
const bottomY = snap(h - labelPad);
|
|
84
|
+
const rulerHeight = bottomY - topY;
|
|
85
|
+
if (rulerHeight <= 0)
|
|
86
|
+
return;
|
|
87
|
+
const { unitText: fitUnitText, width: fitMajorStep, value: fitValue, } = computeBestFit(rulerHeight, spacePerPixel, unitFactor, minStepHeight);
|
|
88
|
+
if (!Number.isFinite(fitMajorStep) || fitMajorStep <= 0)
|
|
89
|
+
return;
|
|
90
|
+
const majors = buildMajorPositions(bottomY, topY, fitMajorStep, snap);
|
|
91
|
+
ctx.beginPath();
|
|
92
|
+
ctx.moveTo(xBase, topY);
|
|
93
|
+
ctx.lineTo(xBase, bottomY);
|
|
94
|
+
ctx.stroke();
|
|
95
|
+
for (let m = 0; m < majors.length - 1; m++) {
|
|
96
|
+
const lower = majors[m];
|
|
97
|
+
const upper = majors[m + 1];
|
|
98
|
+
const segmentStep = (lower - upper) / minorPerMajor;
|
|
99
|
+
for (let k = 1; k < minorPerMajor; k++) {
|
|
100
|
+
drawPin(ctx, xBase, snap(lower - k * segmentStep), minorLength, params);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
for (let m = 0; m < majors.length; m++) {
|
|
104
|
+
const yy = majors[m];
|
|
105
|
+
drawPin(ctx, xBase, yy, majorLength, params);
|
|
106
|
+
if (params.labels) {
|
|
107
|
+
drawLabel(ctx, params, xBase, majorLength, yy, `${m * fitValue} ${fitUnitText}`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
ctx.textAlign = "start";
|
|
111
|
+
ctx.textBaseline = "alphabetic";
|
|
112
|
+
}
|
|
113
|
+
function drawPin(ctx, xBase, yy, len, params) {
|
|
114
|
+
if (params.leftPins) {
|
|
115
|
+
ctx.beginPath();
|
|
116
|
+
ctx.moveTo(xBase, yy);
|
|
117
|
+
ctx.lineTo(xBase - len, yy);
|
|
118
|
+
ctx.stroke();
|
|
119
|
+
}
|
|
120
|
+
if (params.rightPins) {
|
|
121
|
+
ctx.beginPath();
|
|
122
|
+
ctx.moveTo(xBase, yy);
|
|
123
|
+
ctx.lineTo(xBase + len, yy);
|
|
124
|
+
ctx.stroke();
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
function drawLabel(ctx, params, xBase, majorLength, yy, text) {
|
|
128
|
+
ctx.textBaseline = "middle";
|
|
129
|
+
const pinOnRight = params.rightPins;
|
|
130
|
+
const pinOnLeft = params.leftPins;
|
|
131
|
+
if (params.labelSide === "right") {
|
|
132
|
+
ctx.textAlign = "left";
|
|
133
|
+
const x = pinOnRight ? xBase + majorLength + LABEL_GAP : xBase + LABEL_GAP;
|
|
134
|
+
ctx.fillText(text, x, yy);
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
ctx.textAlign = "right";
|
|
138
|
+
const x = pinOnLeft ? xBase - majorLength - LABEL_GAP : xBase - LABEL_GAP;
|
|
139
|
+
ctx.fillText(text, x, yy);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
39
142
|
function computeBestFit(scalebarSize, spacePerPixel, unitFactor, minStepWidth) {
|
|
40
143
|
const steps = Math.max(1, Math.floor(scalebarSize / minStepWidth));
|
|
41
144
|
const stepSize = scalebarSize / steps;
|
|
@@ -58,4 +161,4 @@ function computeBestFit(scalebarSize, spacePerPixel, unitFactor, minStepWidth) {
|
|
|
58
161
|
const width = bestValue / (spacePerPixel * factor);
|
|
59
162
|
return { unitText, width, value: bestValue };
|
|
60
163
|
}
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFpbnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vcnBoby12aWV3ZXItc2NhbGViYXIvcGFpbnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLEtBQUssR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUE7QUFDakQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUE7QUFFMUYsTUFBTSxVQUFVLEtBQUssQ0FBQyxNQUF5QixFQUFFLGFBQXFCLEVBQUUsVUFBVSxHQUFHLElBQUk7SUFDckYsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtJQUNuQyxJQUFJLENBQUMsR0FBRztRQUFFLE9BQU07SUFFaEIsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQTtJQUN0QixNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFBO0lBQ3ZCLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFBO0lBQ2pCLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUE7SUFDekIsTUFBTSxHQUFHLEdBQUcsVUFBVSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFBO0lBQy9DLEdBQUcsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQTtJQUN6QixHQUFHLENBQUMsV0FBVyxH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
|
|
164
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFpbnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vcnBoby12aWV3ZXItc2NhbGViYXIvcGFpbnRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxNQUFNLEtBQUssR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDbEQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFFM0YsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDO0FBRXBCLE1BQU0sb0JBQW9CLEdBQUcsQ0FBQyxDQUFDO0FBYy9CLFNBQVMsYUFBYSxDQUFDLFNBQWlCLEVBQUUsR0FBVztJQUNuRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzdELE1BQU0sVUFBVSxHQUFHLFdBQVcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdDLE9BQU87UUFDTCxTQUFTLEVBQUUsV0FBVyxHQUFHLEdBQUc7UUFDNUIsSUFBSSxFQUFFLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLEdBQUcsR0FBRyxVQUFVLENBQUMsR0FBRyxVQUFVLENBQUMsR0FBRyxHQUFHO1FBQzVFLFNBQVMsRUFBRSxDQUFD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
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { type ScalebarConfig, type TScalebarSide } from "../types";
|
|
2
|
+
import type React from "react";
|
|
3
|
+
export interface VerticalPaintParams {
|
|
4
|
+
anchor: TScalebarSide;
|
|
5
|
+
outerReserve: number;
|
|
6
|
+
majorLength: number;
|
|
7
|
+
minorLength: number;
|
|
8
|
+
minorPerMajor: number;
|
|
9
|
+
leftPins: boolean;
|
|
10
|
+
rightPins: boolean;
|
|
11
|
+
labels: boolean;
|
|
12
|
+
labelSide: TScalebarSide;
|
|
13
|
+
color: string;
|
|
14
|
+
thickness: number;
|
|
15
|
+
}
|
|
16
|
+
export interface ResolvedVerticalScalebar {
|
|
17
|
+
className?: string;
|
|
18
|
+
containerStyle: React.CSSProperties;
|
|
19
|
+
collapsedWidth: number;
|
|
20
|
+
expandedWidth: number;
|
|
21
|
+
widthAnimates: boolean;
|
|
22
|
+
needsHover: boolean;
|
|
23
|
+
color: string;
|
|
24
|
+
fontSize: number;
|
|
25
|
+
paintParams(hovered: boolean): VerticalPaintParams;
|
|
26
|
+
}
|
|
27
|
+
export declare function normalizeScalebarConfig(value: boolean | string | ScalebarConfig | undefined): ScalebarConfig;
|
|
28
|
+
export declare function resolveUnitFactor(config: ScalebarConfig, unitProp?: unknown): number;
|
|
29
|
+
export declare function resolvePixelRatio(config: ScalebarConfig): number;
|
|
30
|
+
export declare function resolveVerticalScalebar(config: ScalebarConfig): ResolvedVerticalScalebar;
|
|
31
|
+
export interface ResolvedHorizontalScalebar {
|
|
32
|
+
className?: string;
|
|
33
|
+
style?: React.CSSProperties;
|
|
34
|
+
}
|
|
35
|
+
export declare function resolveHorizontalScalebar(config: ScalebarConfig): ResolvedHorizontalScalebar;
|
|
36
|
+
//# sourceMappingURL=resolve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../../src/components/morpho-viewer-scalebar/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,cAAc,EAGnB,KAAK,aAAa,EAEnB,MAAM,UAAU,CAAC;AAElB,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,MAAM,WAAW,mBAAmB;IAElC,MAAM,EAAE,aAAa,CAAC;IAEtB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IAEtB,QAAQ,EAAE,OAAO,CAAC;IAElB,SAAS,EAAE,OAAO,CAAC;IAEnB,MAAM,EAAE,OAAO,CAAC;IAChB,SAAS,EAAE,aAAa,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,wBAAwB;IAEvC,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,cAAc,EAAE,KAAK,CAAC,aAAa,CAAC;IACpC,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IAEtB,aAAa,EAAE,OAAO,CAAC;IAEvB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IAEjB,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,mBAAmB,CAAC;CACpD;AAgBD,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,cAAc,GAAG,SAAS,GACnD,cAAc,CAIhB;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,EAAE,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,CAEpF;AAGD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAGhE;AAuBD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,cAAc,GAAG,wBAAwB,CAuFxF;AAYD,MAAM,WAAW,0BAA0B;IAEzC,SAAS,CAAC,EAAE,MAAM,CAAC;IAEnB,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;CAC7B;AAOD,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,cAAc,GAAG,0BAA0B,CAgB5F"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { ScalebarSide, ScalebarWhen, } from "../types";
|
|
2
|
+
const DEFAULT_MAJOR_LENGTH = 10;
|
|
3
|
+
const DEFAULT_MINOR_LENGTH = 5;
|
|
4
|
+
const DEFAULT_MINOR_PER_MAJOR = 5;
|
|
5
|
+
const DEFAULT_COLOR = "#9ca3af";
|
|
6
|
+
const DEFAULT_THICKNESS = 1;
|
|
7
|
+
const DEFAULT_MARGIN_X = 2;
|
|
8
|
+
const DEFAULT_MARGIN_Y = 12;
|
|
9
|
+
const DEFAULT_HEIGHT = "min(180px, 42%)";
|
|
10
|
+
const FONT_SIZE = 10;
|
|
11
|
+
const LABEL_GAP = 4;
|
|
12
|
+
const LABEL_RESERVE = 40;
|
|
13
|
+
export function normalizeScalebarConfig(value) {
|
|
14
|
+
if (!value || value === true)
|
|
15
|
+
return {};
|
|
16
|
+
if (typeof value === "string")
|
|
17
|
+
return { className: value };
|
|
18
|
+
return value;
|
|
19
|
+
}
|
|
20
|
+
export function resolveUnitFactor(config, unitProp) {
|
|
21
|
+
var _a, _b;
|
|
22
|
+
return (_b = (_a = config.unit) !== null && _a !== void 0 ? _a : (typeof unitProp === "number" ? unitProp : undefined)) !== null && _b !== void 0 ? _b : 1e-6;
|
|
23
|
+
}
|
|
24
|
+
export function resolvePixelRatio(config) {
|
|
25
|
+
if (!config.hiDPI)
|
|
26
|
+
return 1;
|
|
27
|
+
return Math.max(1, globalThis.devicePixelRatio || 1);
|
|
28
|
+
}
|
|
29
|
+
function visible(when, hovered) {
|
|
30
|
+
if (when === ScalebarWhen.Always)
|
|
31
|
+
return true;
|
|
32
|
+
if (when === ScalebarWhen.Never)
|
|
33
|
+
return false;
|
|
34
|
+
return hovered;
|
|
35
|
+
}
|
|
36
|
+
function marginXY(config) {
|
|
37
|
+
var _a, _b;
|
|
38
|
+
const m = config.margin;
|
|
39
|
+
if (typeof m === "number")
|
|
40
|
+
return { x: m, y: m };
|
|
41
|
+
return { x: (_a = m === null || m === void 0 ? void 0 : m.x) !== null && _a !== void 0 ? _a : DEFAULT_MARGIN_X, y: (_b = m === null || m === void 0 ? void 0 : m.y) !== null && _b !== void 0 ? _b : DEFAULT_MARGIN_Y };
|
|
42
|
+
}
|
|
43
|
+
function sideExtent(pinsShown, labelsShown, majorLength) {
|
|
44
|
+
const pinExtent = pinsShown ? majorLength : 0;
|
|
45
|
+
if (!labelsShown)
|
|
46
|
+
return pinExtent;
|
|
47
|
+
const labelStart = (pinsShown ? majorLength : 0) + LABEL_GAP;
|
|
48
|
+
return Math.max(pinExtent, labelStart + LABEL_RESERVE);
|
|
49
|
+
}
|
|
50
|
+
export function resolveVerticalScalebar(config) {
|
|
51
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u;
|
|
52
|
+
const placement = (_a = config.placement) !== null && _a !== void 0 ? _a : "bottom-left";
|
|
53
|
+
const anchor = placement.includes("right")
|
|
54
|
+
? ScalebarSide.Right
|
|
55
|
+
: ScalebarSide.Left;
|
|
56
|
+
const innerSide = anchor === ScalebarSide.Left ? ScalebarSide.Right : ScalebarSide.Left;
|
|
57
|
+
const reveal = config.reveal;
|
|
58
|
+
const pinsLeftWhen = (_c = (_b = config.pins) === null || _b === void 0 ? void 0 : _b.left) !== null && _c !== void 0 ? _c : ScalebarWhen.Always;
|
|
59
|
+
const pinsRightWhen = (_f = (_e = (_d = config.pins) === null || _d === void 0 ? void 0 : _d.right) !== null && _e !== void 0 ? _e : reveal) !== null && _f !== void 0 ? _f : ScalebarWhen.Hover;
|
|
60
|
+
const labelsWhen = (_j = (_h = (_g = config.labels) === null || _g === void 0 ? void 0 : _g.show) !== null && _h !== void 0 ? _h : reveal) !== null && _j !== void 0 ? _j : ScalebarWhen.Hover;
|
|
61
|
+
const labelSide = (_l = (_k = config.labels) === null || _k === void 0 ? void 0 : _k.side) !== null && _l !== void 0 ? _l : innerSide;
|
|
62
|
+
const majorLength = (_o = (_m = config.pins) === null || _m === void 0 ? void 0 : _m.majorLength) !== null && _o !== void 0 ? _o : DEFAULT_MAJOR_LENGTH;
|
|
63
|
+
const minorLength = (_q = (_p = config.pins) === null || _p === void 0 ? void 0 : _p.minorLength) !== null && _q !== void 0 ? _q : DEFAULT_MINOR_LENGTH;
|
|
64
|
+
const minorPerMajor = (_s = (_r = config.pins) === null || _r === void 0 ? void 0 : _r.minorPerMajor) !== null && _s !== void 0 ? _s : DEFAULT_MINOR_PER_MAJOR;
|
|
65
|
+
const color = (_t = config.color) !== null && _t !== void 0 ? _t : DEFAULT_COLOR;
|
|
66
|
+
const thickness = (_u = config.thickness) !== null && _u !== void 0 ? _u : DEFAULT_THICKNESS;
|
|
67
|
+
const whenForSide = (side) => side === ScalebarSide.Left ? pinsLeftWhen : pinsRightWhen;
|
|
68
|
+
const outerWhen = whenForSide(anchor);
|
|
69
|
+
const innerWhen = whenForSide(innerSide);
|
|
70
|
+
const labelsOnOuter = labelSide === anchor;
|
|
71
|
+
const labelsOnInner = labelSide === innerSide;
|
|
72
|
+
const outerReserve = Math.max(majorLength, sideExtent(outerWhen !== ScalebarWhen.Never, labelsOnOuter, majorLength));
|
|
73
|
+
const innerExtent = (hovered) => sideExtent(visible(innerWhen, hovered), labelsOnInner && visible(labelsWhen, hovered), majorLength);
|
|
74
|
+
const needsHover = pinsLeftWhen === ScalebarWhen.Hover ||
|
|
75
|
+
pinsRightWhen === ScalebarWhen.Hover ||
|
|
76
|
+
labelsWhen === ScalebarWhen.Hover;
|
|
77
|
+
const width = (hovered) => outerReserve + innerExtent(needsHover ? hovered : true) + 1;
|
|
78
|
+
const collapsedWidth = Math.ceil(width(false));
|
|
79
|
+
const expandedWidth = Math.ceil(width(true));
|
|
80
|
+
const { x: mx, y: my } = marginXY(config);
|
|
81
|
+
const containerStyle = config.className
|
|
82
|
+
? {}
|
|
83
|
+
: Object.assign(Object.assign(Object.assign({ position: "absolute", height: DEFAULT_HEIGHT }, (anchor === ScalebarSide.Left ? { left: mx } : { right: mx })), verticalEdgeStyle(placement, my)), config.style);
|
|
84
|
+
return {
|
|
85
|
+
className: config.className,
|
|
86
|
+
containerStyle,
|
|
87
|
+
collapsedWidth,
|
|
88
|
+
expandedWidth,
|
|
89
|
+
widthAnimates: collapsedWidth !== expandedWidth,
|
|
90
|
+
needsHover,
|
|
91
|
+
color,
|
|
92
|
+
fontSize: FONT_SIZE,
|
|
93
|
+
paintParams(hovered) {
|
|
94
|
+
return {
|
|
95
|
+
anchor,
|
|
96
|
+
outerReserve,
|
|
97
|
+
majorLength,
|
|
98
|
+
minorLength,
|
|
99
|
+
minorPerMajor,
|
|
100
|
+
leftPins: visible(pinsLeftWhen, hovered),
|
|
101
|
+
rightPins: visible(pinsRightWhen, hovered),
|
|
102
|
+
labels: visible(labelsWhen, hovered),
|
|
103
|
+
labelSide,
|
|
104
|
+
color,
|
|
105
|
+
thickness,
|
|
106
|
+
};
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
function verticalEdgeStyle(placement, my) {
|
|
111
|
+
if (placement.startsWith("top"))
|
|
112
|
+
return { top: my };
|
|
113
|
+
if (placement.startsWith("bottom"))
|
|
114
|
+
return { bottom: my };
|
|
115
|
+
return { top: "50%", transform: "translateY(-50%)" };
|
|
116
|
+
}
|
|
117
|
+
const HORIZONTAL_FAR_RESERVE = 128;
|
|
118
|
+
export function resolveHorizontalScalebar(config) {
|
|
119
|
+
var _a;
|
|
120
|
+
if (config.className)
|
|
121
|
+
return { className: config.className };
|
|
122
|
+
if (!config.placement && !config.style && config.margin === undefined)
|
|
123
|
+
return {};
|
|
124
|
+
const { x: mx, y: my } = marginXY(config);
|
|
125
|
+
const placement = (_a = config.placement) !== null && _a !== void 0 ? _a : "bottom";
|
|
126
|
+
const style = Object.assign(Object.assign({ position: "absolute", height: "1.4em", left: mx, right: mx + HORIZONTAL_FAR_RESERVE, pointerEvents: "none" }, (placement.startsWith("top") ? { top: my } : { bottom: my })), config.style);
|
|
127
|
+
return { style };
|
|
128
|
+
}
|
|
129
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb2x2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21vcnBoby12aWV3ZXItc2NhbGViYXIvcmVzb2x2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsWUFBWSxFQUNaLFlBQVksR0FHYixNQUFNLFVBQVUsQ0FBQztBQXlDbEIsTUFBTSxvQkFBb0IsR0FBRyxFQUFFLENBQUM7QUFDaEMsTUFBTSxvQkFBb0IsR0FBRyxDQUFDLENBQUM7QUFDL0IsTUFBTSx1QkFBdUIsR0FBRyxDQUFDLENBQUM7QUFDbEMsTUFBTSxhQUFhLEdBQUcsU0FBUyxDQUFDO0FBQ2hDLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0FBQzVCLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO0FBQzVCLE1BQU0sY0FBYyxHQUFHLGlCQUFpQixDQUFDO0FBQ3pDLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztBQUNyQixNQUFNLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFFcEIsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO0FBR3pCLE1BQU0sVUFBVSx1QkFBdUIsQ0FDckMsS0FBb0Q7SUFFcEQsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLEtBQUssSUFBSTtRQUFFLE9BQU8sRUFBRSxDQUFDO0lBQ3hDLElBQUksT0FBTyxLQUFLLEtBQUssUUFBUTtRQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7SUFDM0QsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDO0FBRUQsTUFBTSxVQUFVLGlCQUFpQixDQUFDLE1BQXNCLEVBQUUsUUFBa0I7O0lBQzFFLE9BQU8sTUFBQSxNQUFBLE1BQU0sQ0FBQyxJQUFJLG1DQUFJLENBQUMsT0FBTyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLFNBQVMs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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"morpho-viewer-simul.d.ts","sourceRoot":"","sources":["../../../src/components/morpho-viewer-simul/morpho-viewer-simul.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"morpho-viewer-simul.d.ts","sourceRoot":"","sources":["../../../src/components/morpho-viewer-simul/morpho-viewer-simul.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAsB1B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAK7D,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,qBAkD9D"}
|