@rubin-epo/epo-widget-lib 2.0.10 → 2.0.13
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/charts/Readout/index.cjs +1 -1
- package/dist/charts/Readout/index.js +18 -25
- package/dist/charts/ScatterPlot/index.cjs +1 -1
- package/dist/charts/ScatterPlot/index.js +50 -53
- package/dist/localeStrings/en/epo-widget-lib.json +3 -2
- package/dist/localeStrings/es/epo-widget-lib.json +3 -2
- package/dist/localeStrings/fr/epo-widget-lib.json +1 -1
- package/dist/widgets/OrbitalSim/Controls/PlaybackSpeed.cjs +1 -1
- package/dist/widgets/OrbitalSim/Controls/PlaybackSpeed.js +5 -5
- package/dist/widgets/OrbitalSim/Controls/styles.cjs +7 -3
- package/dist/widgets/OrbitalSim/Controls/styles.d.ts +1 -1
- package/dist/widgets/OrbitalSim/Controls/styles.js +9 -5
- package/dist/widgets/OrbitalSim/Orbitals/Orbital.cjs +1 -1
- package/dist/widgets/OrbitalSim/Orbitals/Orbital.js +79 -79
- package/dist/widgets/OrbitalSim/Orbitals/styles.cjs +2 -2
- package/dist/widgets/OrbitalSim/Orbitals/styles.js +2 -2
- package/dist/widgets/OrbitalSim/Sun.cjs +1 -1
- package/dist/widgets/OrbitalSim/Sun.js +6 -6
- package/dist/widgets/OrbitalSim/orbitalUtilities.cjs +1 -1
- package/dist/widgets/OrbitalSim/orbitalUtilities.js +20 -21
- package/dist/widgets/OrbitalSim/styles.cjs +6 -3
- package/dist/widgets/OrbitalSim/styles.js +10 -7
- package/dist/widgets/SourceSelector/MovingSourceSelector.cjs +1 -1
- package/dist/widgets/SourceSelector/MovingSourceSelector.js +82 -85
- package/dist/widgets/SupernovaThreeVector/Skymap/index.cjs +1 -1
- package/dist/widgets/SupernovaThreeVector/Skymap/index.js +39 -45
- package/package.json +2 -3
|
@@ -1,129 +1,126 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsxs as
|
|
3
|
-
import { useState as
|
|
2
|
+
import { jsxs as S, jsx as i, Fragment as J } from "react/jsx-runtime";
|
|
3
|
+
import { useState as g } from "react";
|
|
4
4
|
import { useTranslation as K } from "react-i18next";
|
|
5
5
|
import Q from "../../layout/AspectRatio/index.js";
|
|
6
6
|
import U from "../../atomic/Loader/index.js";
|
|
7
7
|
import Z from "@rubin-epo/epo-react-lib/IconComposer";
|
|
8
8
|
import $ from "./MovingSourceMap/index.js";
|
|
9
|
-
import { getRadius as D, toDecimalPercent as
|
|
10
|
-
import { BackgroundBlinker as
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
const r = (o == null ? void 0 : o.date) - ((d = e[0]) == null ? void 0 : d.date);
|
|
9
|
+
import { getRadius as D, toDecimalPercent as x } from "./utils.js";
|
|
10
|
+
import { BackgroundBlinker as v } from "./styles.js";
|
|
11
|
+
import A from "./Message/Message.js";
|
|
12
|
+
import O from "../../atomic/ElapsedTime/ElapsedTime.js";
|
|
13
|
+
const ee = (e, s) => {
|
|
14
|
+
var u;
|
|
15
|
+
const o = { day: 0, hour: 0 }, t = e[s];
|
|
16
|
+
if (!t) return o;
|
|
17
|
+
const r = (t == null ? void 0 : t.date) - ((u = e[0]) == null ? void 0 : u.date);
|
|
19
18
|
return r ? {
|
|
20
19
|
day: Math.round(r) || 0,
|
|
21
20
|
hour: Math.round(24 / r % 24) || 0
|
|
22
|
-
} :
|
|
23
|
-
},
|
|
21
|
+
} : o;
|
|
22
|
+
}, oe = (e, s, o) => Math.pow(e.x - s.x, 2) + Math.pow(e.y - s.y, 2) <= Math.pow(o, 2), te = (e, s, o) => o ? e[s] ? [e[s].image] : [] : e.map(({ image: t }) => t), se = ({
|
|
24
23
|
width: e = 600,
|
|
25
|
-
height:
|
|
26
|
-
selectedSource:
|
|
27
|
-
alerts:
|
|
24
|
+
height: s = 600,
|
|
25
|
+
selectedSource: o = [],
|
|
26
|
+
alerts: t = [],
|
|
28
27
|
activeAlertIndex: r = 0,
|
|
29
|
-
alertChangeCallback:
|
|
30
|
-
selectionCallback:
|
|
31
|
-
blinkConfig:
|
|
32
|
-
isDisplayOnly:
|
|
33
|
-
isLoading:
|
|
34
|
-
className:
|
|
28
|
+
alertChangeCallback: u,
|
|
29
|
+
selectionCallback: C,
|
|
30
|
+
blinkConfig: L,
|
|
31
|
+
isDisplayOnly: a = !1,
|
|
32
|
+
isLoading: P,
|
|
33
|
+
className: w,
|
|
35
34
|
movingSources: l = []
|
|
36
35
|
}) => {
|
|
37
|
-
const [
|
|
36
|
+
const [F, I] = g(!0), [B, R] = g(!a), [V, k] = g(), [j, h] = g(!1), { t: b } = K(), y = !F && !P, N = (c, d, f) => {
|
|
38
37
|
if (l)
|
|
39
|
-
for (let
|
|
40
|
-
const
|
|
41
|
-
if (
|
|
42
|
-
|
|
38
|
+
for (let n of l) {
|
|
39
|
+
const m = n.sources[r];
|
|
40
|
+
if (oe(
|
|
41
|
+
c,
|
|
43
42
|
{
|
|
44
|
-
x:
|
|
45
|
-
y:
|
|
43
|
+
x: x(m.x) * d,
|
|
44
|
+
y: x(m.y) * f
|
|
46
45
|
},
|
|
47
|
-
D(
|
|
46
|
+
D(n.type, n.radius) * d
|
|
48
47
|
))
|
|
49
|
-
return
|
|
48
|
+
return n.id;
|
|
50
49
|
}
|
|
50
|
+
}, T = () => {
|
|
51
|
+
k(b("source_selector.messages.failure")), h(!0);
|
|
52
|
+
}, W = () => {
|
|
53
|
+
R((c) => !c);
|
|
51
54
|
}, _ = () => {
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
I(
|
|
57
|
-
/* @__PURE__ */ B(J, { children: [
|
|
58
|
-
/* @__PURE__ */ a(Z, { icon: "checkmark" }),
|
|
59
|
-
y("source_selector.messages.success")
|
|
55
|
+
k(
|
|
56
|
+
/* @__PURE__ */ S(J, { children: [
|
|
57
|
+
/* @__PURE__ */ i(Z, { icon: "checkmark" }),
|
|
58
|
+
b("source_selector.messages.success")
|
|
60
59
|
] })
|
|
61
|
-
),
|
|
62
|
-
},
|
|
63
|
-
clientX:
|
|
64
|
-
clientY:
|
|
65
|
-
target:
|
|
60
|
+
), h(!0);
|
|
61
|
+
}, z = ({
|
|
62
|
+
clientX: c,
|
|
63
|
+
clientY: d,
|
|
64
|
+
target: f
|
|
66
65
|
}) => {
|
|
67
|
-
if (!
|
|
66
|
+
if (!y || a) return;
|
|
68
67
|
const {
|
|
69
|
-
tagName:
|
|
70
|
-
clientWidth:
|
|
71
|
-
clientHeight:
|
|
72
|
-
} =
|
|
73
|
-
if (
|
|
74
|
-
const { left: q, top: G } =
|
|
75
|
-
{ x:
|
|
76
|
-
|
|
77
|
-
|
|
68
|
+
tagName: n,
|
|
69
|
+
clientWidth: m,
|
|
70
|
+
clientHeight: p
|
|
71
|
+
} = f;
|
|
72
|
+
if (n.toLowerCase() !== "img") return;
|
|
73
|
+
const { left: q, top: G } = f.getBoundingClientRect(), M = N(
|
|
74
|
+
{ x: c - q, y: p - d + G },
|
|
75
|
+
m,
|
|
76
|
+
p
|
|
78
77
|
);
|
|
79
|
-
if (
|
|
80
|
-
if (
|
|
81
|
-
|
|
78
|
+
if (M) {
|
|
79
|
+
if (o.includes(M)) return;
|
|
80
|
+
C && C(o.concat(M)), _();
|
|
82
81
|
} else
|
|
83
|
-
|
|
82
|
+
T();
|
|
84
83
|
}, E = () => {
|
|
85
|
-
|
|
86
|
-
}, { day: H, hour: X } =
|
|
87
|
-
return
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
!c && /* @__PURE__ */ a(
|
|
91
|
-
te,
|
|
84
|
+
h(!1);
|
|
85
|
+
}, { day: H, hour: X } = ee(t, r), Y = te(t, r, a);
|
|
86
|
+
return /* @__PURE__ */ S(Q, { ratio: 1, className: w, children: [
|
|
87
|
+
!a && /* @__PURE__ */ i(
|
|
88
|
+
A,
|
|
92
89
|
{
|
|
93
90
|
onMessageChangeCallback: E,
|
|
94
|
-
isVisible:
|
|
95
|
-
children:
|
|
91
|
+
isVisible: j,
|
|
92
|
+
children: V
|
|
96
93
|
}
|
|
97
94
|
),
|
|
98
|
-
l && /* @__PURE__ */
|
|
99
|
-
|
|
95
|
+
l && /* @__PURE__ */ i(
|
|
96
|
+
v,
|
|
100
97
|
{
|
|
101
98
|
images: Y,
|
|
102
|
-
activeIndex:
|
|
103
|
-
blinkCallback:
|
|
104
|
-
loadedCallback: () =>
|
|
105
|
-
onClickCallback:
|
|
106
|
-
extraControls:
|
|
99
|
+
activeIndex: r,
|
|
100
|
+
blinkCallback: u,
|
|
101
|
+
loadedCallback: () => I(!1),
|
|
102
|
+
onClickCallback: z,
|
|
103
|
+
extraControls: t.length > 0 && !a && /* @__PURE__ */ i(O, { day: H, hour: X }),
|
|
107
104
|
interval: 400,
|
|
108
|
-
pauseCallback:
|
|
109
|
-
...
|
|
110
|
-
children: /* @__PURE__ */
|
|
105
|
+
pauseCallback: W,
|
|
106
|
+
...L,
|
|
107
|
+
children: /* @__PURE__ */ i(
|
|
111
108
|
$,
|
|
112
109
|
{
|
|
113
110
|
width: e,
|
|
114
|
-
height:
|
|
115
|
-
isPlaying:
|
|
116
|
-
currentIndex:
|
|
111
|
+
height: s,
|
|
112
|
+
isPlaying: B,
|
|
113
|
+
currentIndex: r,
|
|
117
114
|
movingSources: l,
|
|
118
|
-
selectedSource:
|
|
115
|
+
selectedSource: o
|
|
119
116
|
}
|
|
120
117
|
)
|
|
121
118
|
}
|
|
122
119
|
),
|
|
123
|
-
!
|
|
120
|
+
!y && /* @__PURE__ */ i(U, {})
|
|
124
121
|
] });
|
|
125
122
|
};
|
|
126
|
-
|
|
123
|
+
se.displayName = "Widgets.MovingSourceSelector";
|
|
127
124
|
export {
|
|
128
|
-
|
|
125
|
+
se as default
|
|
129
126
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),
|
|
1
|
+
"use client";"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("react/jsx-runtime"),S=require("react"),_=require("d3-geo-projection"),M=require("d3-geo"),q=require("d3-array"),E=require("../../../atomic/ImageStack/index.cjs"),a=require("./styles.cjs"),N=require("../../../charts/Base/index.cjs"),U=require("../../../charts/Tooltip/index.cjs"),y=({className:L,objects:p=[],images:v=[],visibleImages:w=[],describedById:G})=>{const[O,P]=S.useState(!1),[x,f]=S.useState(),l=600,c=300,n={top:20,right:0,bottom:20,left:20},W=l+n.right+n.left,$=c+n.top+n.bottom,d=15,u=30,j=-90,m=90,g=-180,k=180,h=2,i=_.geoAitoff(),s=M.geoGraticule();s.step([u,d]),s.extent([[g,j],[k,m]]),i.fitExtent([[n.left,n.top],[n.left+l-h,n.top+c]],s.outline());const B=q.range(j+d,m,d),A=q.range(g+u,k,u),C=M.geoPath(i).pointRadius(6),r=t=>C(t)||void 0,o=typeof x<"u"?p[x]:void 0,b=(o?i([o==null?void 0:o.long,o==null?void 0:o.lat]):[0,0])||[0,0];return e.jsxs(N.default,{width:W,height:$,className:L,children:[e.jsx("mask",{id:"imageMask",children:e.jsx("path",{d:r(s.outline()),fill:"white"})}),e.jsx(a.Background,{d:r(s.outline())}),e.jsx(a.Graticule,{d:r(s())}),e.jsx(a.ImageStackerWrapper,{style:{"--image-stack-opacity":O&&1},x:n.left,y:n.top,width:l-h,height:c,mask:"url(#imageMask)",children:e.jsx(E.default,{images:v,describedById:G,visible:w,loadCallback:()=>P(!0),showBackdrop:!1,showLoader:!1})}),e.jsx("g",{children:p.map(({id:t,lat:H,long:R},T)=>e.jsx(a.UserObject,{d:r({type:"Point",coordinates:[R,H]}),onMouseOver:()=>f(T),onMouseOut:()=>f(void 0)},t))}),e.jsx("g",{"aria-hidden":"true",children:B.map(t=>t===0?null:e.jsxs(a.LatLabel,{style:{dominantBaseline:t>0?"text-after-edge":"text-before-edge"},transform:`translate(${i([g,t])})`,children:[t,"°"]},t))}),e.jsx("g",{"aria-hidden":"true",children:A.map(t=>e.jsxs(a.LongLabel,{transform:`translate(${i([t,0])})`,children:[t,"°"]},t))}),e.jsx(a.Outline,{strokeWidth:h,d:r(s.outline())}),e.jsx(U.default,{visible:!!o,x:b[0],y:b[1],children:o==null?void 0:o.id})]})};y.displayName="Widgets.SupernovaThreeVector.Skymap";exports.default=y;
|
|
@@ -1,19 +1,13 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { jsxs as h, jsx as
|
|
2
|
+
import { jsxs as h, jsx as e } from "react/jsx-runtime";
|
|
3
3
|
import { useState as L } from "react";
|
|
4
4
|
import { geoAitoff as E } from "d3-geo-projection";
|
|
5
5
|
import { geoGraticule as N, geoPath as R } from "d3-geo";
|
|
6
6
|
import { range as M } from "d3-array";
|
|
7
|
-
import U from "../../../
|
|
8
|
-
import "
|
|
9
|
-
import "../../../charts/
|
|
10
|
-
import "../../../charts/
|
|
11
|
-
import V from "../../../charts/Tooltip/index.js";
|
|
12
|
-
import "../../../charts/Bars/index.js";
|
|
13
|
-
import "../../../charts/Viewport/index.js";
|
|
14
|
-
import "../../../charts/ScatterPlot/index.js";
|
|
15
|
-
import q from "../../../atomic/ImageStack/index.js";
|
|
16
|
-
import { Background as z, Graticule as D, ImageStackerWrapper as F, UserObject as J, LatLabel as K, LongLabel as Q, Outline as X } from "./styles.js";
|
|
7
|
+
import U from "../../../atomic/ImageStack/index.js";
|
|
8
|
+
import { Background as V, Graticule as q, ImageStackerWrapper as z, UserObject as D, LatLabel as F, LongLabel as J, Outline as K } from "./styles.js";
|
|
9
|
+
import Q from "../../../charts/Base/index.js";
|
|
10
|
+
import X from "../../../charts/Tooltip/index.js";
|
|
17
11
|
const Y = ({
|
|
18
12
|
className: y,
|
|
19
13
|
objects: g = [],
|
|
@@ -21,38 +15,38 @@ const Y = ({
|
|
|
21
15
|
visibleImages: w = [],
|
|
22
16
|
describedById: B
|
|
23
17
|
}) => {
|
|
24
|
-
const [O, W] = L(!1), [f, u] = L(), s = 600, l = 300,
|
|
18
|
+
const [O, W] = L(!1), [f, u] = L(), s = 600, l = 300, a = {
|
|
25
19
|
top: 20,
|
|
26
20
|
right: 0,
|
|
27
21
|
bottom: 20,
|
|
28
22
|
left: 20
|
|
29
|
-
}, j = s +
|
|
30
|
-
|
|
23
|
+
}, j = s + a.right + a.left, C = l + a.top + a.bottom, c = 15, d = 30, k = -90, x = 90, p = -180, b = 180, m = 2, i = E(), n = N();
|
|
24
|
+
n.step([d, c]), n.extent([
|
|
31
25
|
[p, k],
|
|
32
26
|
[b, x]
|
|
33
|
-
]),
|
|
27
|
+
]), i.fitExtent(
|
|
34
28
|
[
|
|
35
|
-
[
|
|
36
|
-
[
|
|
29
|
+
[a.left, a.top],
|
|
30
|
+
[a.left + s - m, a.top + l]
|
|
37
31
|
],
|
|
38
|
-
|
|
32
|
+
n.outline()
|
|
39
33
|
);
|
|
40
|
-
const G = M(k + c, x, c), H = M(p + d, b, d), P = R(
|
|
41
|
-
return /* @__PURE__ */ h(
|
|
42
|
-
/* @__PURE__ */
|
|
43
|
-
/* @__PURE__ */
|
|
44
|
-
/* @__PURE__ */
|
|
45
|
-
/* @__PURE__ */
|
|
46
|
-
|
|
34
|
+
const G = M(k + c, x, c), H = M(p + d, b, d), P = R(i).pointRadius(6), r = (t) => P(t) || void 0, o = typeof f < "u" ? g[f] : void 0, S = (o ? i([o == null ? void 0 : o.long, o == null ? void 0 : o.lat]) : [0, 0]) || [0, 0];
|
|
35
|
+
return /* @__PURE__ */ h(Q, { width: j, height: C, className: y, children: [
|
|
36
|
+
/* @__PURE__ */ e("mask", { id: "imageMask", children: /* @__PURE__ */ e("path", { d: r(n.outline()), fill: "white" }) }),
|
|
37
|
+
/* @__PURE__ */ e(V, { d: r(n.outline()) }),
|
|
38
|
+
/* @__PURE__ */ e(q, { d: r(n()) }),
|
|
39
|
+
/* @__PURE__ */ e(
|
|
40
|
+
z,
|
|
47
41
|
{
|
|
48
42
|
style: { "--image-stack-opacity": O && 1 },
|
|
49
|
-
x:
|
|
50
|
-
y:
|
|
43
|
+
x: a.left,
|
|
44
|
+
y: a.top,
|
|
51
45
|
width: s - m,
|
|
52
46
|
height: l,
|
|
53
47
|
mask: "url(#imageMask)",
|
|
54
|
-
children: /* @__PURE__ */
|
|
55
|
-
|
|
48
|
+
children: /* @__PURE__ */ e(
|
|
49
|
+
U,
|
|
56
50
|
{
|
|
57
51
|
images: v,
|
|
58
52
|
describedById: B,
|
|
@@ -64,10 +58,10 @@ const Y = ({
|
|
|
64
58
|
)
|
|
65
59
|
}
|
|
66
60
|
),
|
|
67
|
-
/* @__PURE__ */
|
|
68
|
-
|
|
61
|
+
/* @__PURE__ */ e("g", { children: g.map(({ id: t, lat: T, long: $ }, A) => /* @__PURE__ */ e(
|
|
62
|
+
D,
|
|
69
63
|
{
|
|
70
|
-
d:
|
|
64
|
+
d: r({
|
|
71
65
|
type: "Point",
|
|
72
66
|
coordinates: [$, T]
|
|
73
67
|
}),
|
|
@@ -76,14 +70,14 @@ const Y = ({
|
|
|
76
70
|
},
|
|
77
71
|
t
|
|
78
72
|
)) }),
|
|
79
|
-
/* @__PURE__ */
|
|
73
|
+
/* @__PURE__ */ e("g", { "aria-hidden": "true", children: G.map(
|
|
80
74
|
(t) => t === 0 ? null : /* @__PURE__ */ h(
|
|
81
|
-
|
|
75
|
+
F,
|
|
82
76
|
{
|
|
83
77
|
style: {
|
|
84
78
|
dominantBaseline: t > 0 ? "text-after-edge" : "text-before-edge"
|
|
85
79
|
},
|
|
86
|
-
transform: `translate(${
|
|
80
|
+
transform: `translate(${i([p, t])})`,
|
|
87
81
|
children: [
|
|
88
82
|
t,
|
|
89
83
|
"°"
|
|
@@ -92,10 +86,10 @@ const Y = ({
|
|
|
92
86
|
t
|
|
93
87
|
)
|
|
94
88
|
) }),
|
|
95
|
-
/* @__PURE__ */
|
|
96
|
-
|
|
89
|
+
/* @__PURE__ */ e("g", { "aria-hidden": "true", children: H.map((t) => /* @__PURE__ */ h(
|
|
90
|
+
J,
|
|
97
91
|
{
|
|
98
|
-
transform: `translate(${
|
|
92
|
+
transform: `translate(${i([t, 0])})`,
|
|
99
93
|
children: [
|
|
100
94
|
t,
|
|
101
95
|
"°"
|
|
@@ -103,20 +97,20 @@ const Y = ({
|
|
|
103
97
|
},
|
|
104
98
|
t
|
|
105
99
|
)) }),
|
|
106
|
-
/* @__PURE__ */
|
|
107
|
-
|
|
100
|
+
/* @__PURE__ */ e(
|
|
101
|
+
K,
|
|
108
102
|
{
|
|
109
103
|
strokeWidth: m,
|
|
110
|
-
d: n
|
|
104
|
+
d: r(n.outline())
|
|
111
105
|
}
|
|
112
106
|
),
|
|
113
|
-
/* @__PURE__ */
|
|
114
|
-
|
|
107
|
+
/* @__PURE__ */ e(
|
|
108
|
+
X,
|
|
115
109
|
{
|
|
116
|
-
visible: !!
|
|
110
|
+
visible: !!o,
|
|
117
111
|
x: S[0],
|
|
118
112
|
y: S[1],
|
|
119
|
-
children:
|
|
113
|
+
children: o == null ? void 0 : o.id
|
|
120
114
|
}
|
|
121
115
|
)
|
|
122
116
|
] });
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rubin-epo/epo-widget-lib",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.13",
|
|
4
4
|
"description": "Rubin Observatory Education & Public Outreach team React scientific and educational widgets.",
|
|
5
5
|
"author": "Rubin EPO",
|
|
6
6
|
"license": "MIT",
|
|
@@ -102,8 +102,7 @@
|
|
|
102
102
|
"dependencies": {
|
|
103
103
|
"@react-three/drei": "^10.7.6",
|
|
104
104
|
"@react-three/fiber": "9",
|
|
105
|
-
"@rubin-epo/epo-react-lib": "3.0.
|
|
106
|
-
"@rubin-epo/epo-widget-lib": "2.0.2",
|
|
105
|
+
"@rubin-epo/epo-react-lib": "3.0.3",
|
|
107
106
|
"context-filter-polyfill": "^0.3.6",
|
|
108
107
|
"d3-array": "^3.2.4",
|
|
109
108
|
"d3-geo": "^3.1.1",
|