globe-kit 0.1.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/globe-kit.js +61 -59
- package/dist/globe-kit.umd.cjs +1 -1
- package/dist/src/lib/types.d.ts +4 -0
- package/package.json +1 -1
package/dist/globe-kit.js
CHANGED
|
@@ -40909,17 +40909,17 @@ function JZ({ gridDeg: e, elevation: t = .08, color: n = "#585b70" }) {
|
|
|
40909
40909
|
//#endregion
|
|
40910
40910
|
//#region src/lib/components/GlobeScene.tsx
|
|
40911
40911
|
function YZ(e) {
|
|
40912
|
-
let { data: t, lat: n, lng: a, icon: l, id: m, gridSize: h = 5, gridElevation: g = .06, iconElevation: _ = .005, iconSize: v = 7, minDistance: y = 200, maxDistance: b = 500, autoRotate: x = !0, autoRotateSpeed: S = .3, rotateSpeed: C = .25,
|
|
40912
|
+
let { data: t, lat: n, lng: a, icon: l, id: m, gridSize: h = 5, gridElevation: g = .06, iconElevation: _ = .005, iconSize: v = 7, minDistance: y = 200, maxDistance: b = 500, autoRotate: x = !0, autoRotateSpeed: S = .3, rotateSpeed: C = .25, enableZoom: w = !0, enableRotate: T = !0, entrance: E = "sprout", entranceDuration: D = 2.5, entranceStagger: O = 2, selectedId: k, onClick: A, onHover: j, labels: M, customLabels: ee, bumpMap: te = !0, atmosphereAltitude: ne = .18, resolvedTheme: re } = e, ie = s(void 0), ae = s(null), { camera: oe } = d(), [se, ce] = c(x), le = r(() => ce(!1), []), [ue, de] = c();
|
|
40913
40913
|
i(() => {
|
|
40914
|
-
jZ(
|
|
40915
|
-
|
|
40914
|
+
jZ(re).then((e) => {
|
|
40915
|
+
de(new p.MeshStandardMaterial({
|
|
40916
40916
|
map: e,
|
|
40917
40917
|
roughness: 1,
|
|
40918
40918
|
metalness: 0
|
|
40919
40919
|
}));
|
|
40920
40920
|
});
|
|
40921
|
-
}, [
|
|
40922
|
-
let
|
|
40921
|
+
}, [re]);
|
|
40922
|
+
let fe = o(() => {
|
|
40923
40923
|
let e = (e) => AZ(n, e), r = (e) => AZ(a, e), i = h > 0 ? PZ(t, e, r, (e) => m ? AZ(m, e) : String(AZ(n, e)), h) : null, o = t.map((t) => {
|
|
40924
40924
|
let n = i?.get(t) ?? [e(t), r(t)];
|
|
40925
40925
|
return {
|
|
@@ -40930,11 +40930,11 @@ function YZ(e) {
|
|
|
40930
40930
|
icon: l ? AZ(l, t) : void 0,
|
|
40931
40931
|
id: m ? AZ(m, t) : void 0
|
|
40932
40932
|
};
|
|
40933
|
-
}), s = KZ(typeof
|
|
40934
|
-
continents:
|
|
40935
|
-
countries:
|
|
40936
|
-
oceans:
|
|
40937
|
-
} :
|
|
40933
|
+
}), s = KZ(typeof M == "boolean" ? {
|
|
40934
|
+
continents: M,
|
|
40935
|
+
countries: M,
|
|
40936
|
+
oceans: M
|
|
40937
|
+
} : M ?? {}, ee);
|
|
40938
40938
|
return [...o, ...s];
|
|
40939
40939
|
}, [
|
|
40940
40940
|
t,
|
|
@@ -40943,120 +40943,122 @@ function YZ(e) {
|
|
|
40943
40943
|
l,
|
|
40944
40944
|
m,
|
|
40945
40945
|
h,
|
|
40946
|
-
|
|
40947
|
-
|
|
40948
|
-
]),
|
|
40949
|
-
let t = e, n =
|
|
40946
|
+
M,
|
|
40947
|
+
ee
|
|
40948
|
+
]), pe = s(/* @__PURE__ */ new Map()), me = qZ(re), he = s(performance.now()), ge = o(() => new p.Vector3(), []), _e = o(() => new p.Vector3(), []), ve = r((e, t) => (e.updateWorldMatrix(!0, !1), t.updateWorldMatrix(!0, !1), e.getWorldPosition(ge), t.getWorldPosition(_e), HZ(ge, _e)), [_e, ge]), ye = r((e) => {
|
|
40949
|
+
let t = e, n = he.current;
|
|
40950
40950
|
if (t.type === "ocean") {
|
|
40951
|
-
let e = new p.Sprite(
|
|
40951
|
+
let e = new p.Sprite(me.ocean(t.label).clone());
|
|
40952
40952
|
e.scale.set(0, 0, 1);
|
|
40953
40953
|
let r = 1.8 + Math.random() * .6;
|
|
40954
40954
|
return e.onBeforeRender = (t, i, a) => {
|
|
40955
|
-
let o = zZ(n, r, .8), s = RZ(o), c =
|
|
40955
|
+
let o = zZ(n, r, .8), s = RZ(o), c = ve(e, a);
|
|
40956
40956
|
e.scale.set(18 * s, 2.2 * s, 1), e.material.opacity = o * c;
|
|
40957
40957
|
}, e;
|
|
40958
40958
|
}
|
|
40959
40959
|
if (t.type === "continent") {
|
|
40960
|
-
let e = new p.Sprite(
|
|
40960
|
+
let e = new p.Sprite(me.continent(t.label).clone());
|
|
40961
40961
|
e.scale.set(0, 0, 1);
|
|
40962
40962
|
let r = 2 + Math.random() * .5;
|
|
40963
40963
|
return e.onBeforeRender = (t, i, a) => {
|
|
40964
|
-
let o = zZ(n, r, 1), s =
|
|
40964
|
+
let o = zZ(n, r, 1), s = ve(e, a);
|
|
40965
40965
|
e.scale.set(35 * o, 4.5 * o, 1), e.material.opacity = o * .22 * s;
|
|
40966
40966
|
}, e;
|
|
40967
40967
|
}
|
|
40968
40968
|
if (t.type === "country") {
|
|
40969
|
-
let e = new p.Sprite(
|
|
40969
|
+
let e = new p.Sprite(me.country(t.label).clone());
|
|
40970
40970
|
e.scale.set(0, 0, 1);
|
|
40971
40971
|
let r = 2.2 + Math.random() * .8;
|
|
40972
40972
|
return e.onBeforeRender = (t, i, a) => {
|
|
40973
|
-
let o = zZ(n, r, .6), s =
|
|
40973
|
+
let o = zZ(n, r, .6), s = ve(e, a);
|
|
40974
40974
|
e.scale.set(10 * o, 1.5 * o, 1), e.material.opacity = o * .4 * s;
|
|
40975
40975
|
}, e;
|
|
40976
40976
|
}
|
|
40977
|
-
let r = (typeof t.icon == "string" ? t.icon : null) ?? "📍", i = new p.Group(), a = new p.Sprite(MZ(r,
|
|
40977
|
+
let r = (typeof t.icon == "string" ? t.icon : null) ?? "📍", i = new p.Group(), a = new p.Sprite(MZ(r, pe.current).clone()), o = v, s = 0, c = LZ(t.id ?? r), l = E === "none" ? 0 : .3 + c / (Math.PI * 2) * O, u = E === "none" ? 0 : .7;
|
|
40978
40978
|
return a.scale.set(0, 0, 1), i.renderOrder = 10, a.renderOrder = 10, a.onBeforeRender = (e, t, r) => {
|
|
40979
40979
|
let d = performance.now() * .001, f = u > 0 ? zZ(n, l, u) : 1, p;
|
|
40980
|
-
p =
|
|
40981
|
-
let m =
|
|
40980
|
+
p = E === "sprout" ? RZ(f) : E === "fade" ? f : E === "scatter" ? RZ(f) : 1;
|
|
40981
|
+
let m = ve(i, r), h = f >= 1 ? Math.sin(d * 1.2 + c) * .4 : 0, g = (f >= 1 ? o + Math.sin(d * 2 + c) * .3 : o) * p, _ = m * Math.min(f, 1);
|
|
40982
40982
|
s += (_ - s) * .18, a.scale.set(g, g, 1), a.material.opacity = s, a.position.y = (1 - p) * -3 + h;
|
|
40983
40983
|
}, i.add(a), i;
|
|
40984
40984
|
}, [
|
|
40985
|
-
w,
|
|
40986
40985
|
E,
|
|
40986
|
+
O,
|
|
40987
40987
|
v,
|
|
40988
|
-
|
|
40989
|
-
|
|
40990
|
-
]),
|
|
40988
|
+
me,
|
|
40989
|
+
ve
|
|
40990
|
+
]), be = r((e) => {
|
|
40991
40991
|
let t = e.type;
|
|
40992
40992
|
return t === "ocean" ? .008 : t === "continent" ? .003 : t === "country" ? .006 : _;
|
|
40993
|
-
}, [_]),
|
|
40994
|
-
if (!t || !
|
|
40993
|
+
}, [_]), xe = r((e, t, n) => {
|
|
40994
|
+
if (!t || !A) return;
|
|
40995
40995
|
let r = t;
|
|
40996
|
-
r.type === "item" && r.originalItem &&
|
|
40997
|
-
}, [
|
|
40996
|
+
r.type === "item" && r.originalItem && A(r.originalItem, n);
|
|
40997
|
+
}, [A]), Se = r((e, t) => {
|
|
40998
40998
|
let n = t, r = n?.type === "item";
|
|
40999
|
-
document.body.style.cursor = r ? "pointer" : "",
|
|
41000
|
-
}, [
|
|
40999
|
+
document.body.style.cursor = r ? "pointer" : "", j?.(r && n?.originalItem ? n.originalItem : null);
|
|
41000
|
+
}, [j]), Ce = s(null);
|
|
41001
41001
|
return i(() => {
|
|
41002
|
-
if (!
|
|
41003
|
-
let e =
|
|
41002
|
+
if (!k) return;
|
|
41003
|
+
let e = fe.find((e) => e.type === "item" && e.id === k);
|
|
41004
41004
|
if (!e) return;
|
|
41005
|
-
let t = Math.min(
|
|
41006
|
-
|
|
41007
|
-
start:
|
|
41005
|
+
let t = Math.min(oe.position.length(), 220), [n, r, i] = FZ(e.lat, e.lng, t);
|
|
41006
|
+
Ce.current = {
|
|
41007
|
+
start: oe.position.clone(),
|
|
41008
41008
|
end: new p.Vector3(n, r, i),
|
|
41009
41009
|
startTime: performance.now(),
|
|
41010
41010
|
duration: 1500
|
|
41011
41011
|
};
|
|
41012
41012
|
}, [
|
|
41013
|
-
|
|
41014
|
-
|
|
41015
|
-
|
|
41013
|
+
k,
|
|
41014
|
+
fe,
|
|
41015
|
+
oe
|
|
41016
41016
|
]), u(() => {
|
|
41017
|
-
let e =
|
|
41017
|
+
let e = Ce.current;
|
|
41018
41018
|
if (!e) return;
|
|
41019
41019
|
let t = performance.now() - e.startTime, n = Math.min(t / e.duration, 1);
|
|
41020
|
-
|
|
41020
|
+
oe.position.lerpVectors(e.start, e.end, IZ(n)), oe.lookAt(0, 0, 0), ae.current && (ae.current.target.set(0, 0, 0), ae.current.update()), n >= 1 && (Ce.current = null);
|
|
41021
41021
|
}), /* @__PURE__ */ Le(Fe, { children: [
|
|
41022
41022
|
/* @__PURE__ */ Ie(kZ, {
|
|
41023
|
-
ref:
|
|
41023
|
+
ref: ie,
|
|
41024
41024
|
showGlobe: !0,
|
|
41025
|
-
...
|
|
41026
|
-
bumpImageUrl:
|
|
41025
|
+
...ue ? { globeMaterial: ue } : {},
|
|
41026
|
+
bumpImageUrl: te ? "//unpkg.com/three-globe/example/img/earth-topology.png" : void 0,
|
|
41027
41027
|
showAtmosphere: !0,
|
|
41028
|
-
atmosphereColor:
|
|
41029
|
-
atmosphereAltitude:
|
|
41028
|
+
atmosphereColor: re.atmosphere,
|
|
41029
|
+
atmosphereAltitude: ne,
|
|
41030
41030
|
showGraticules: !1,
|
|
41031
|
-
objectsData:
|
|
41031
|
+
objectsData: fe,
|
|
41032
41032
|
objectLat: "lat",
|
|
41033
41033
|
objectLng: "lng",
|
|
41034
|
-
objectAltitude:
|
|
41035
|
-
objectThreeObject:
|
|
41036
|
-
onClick:
|
|
41037
|
-
onHover:
|
|
41034
|
+
objectAltitude: be,
|
|
41035
|
+
objectThreeObject: ye,
|
|
41036
|
+
onClick: xe,
|
|
41037
|
+
onHover: Se
|
|
41038
41038
|
}),
|
|
41039
41039
|
/* @__PURE__ */ Ie(JZ, {
|
|
41040
41040
|
gridDeg: h,
|
|
41041
41041
|
elevation: g,
|
|
41042
|
-
color:
|
|
41042
|
+
color: re.grid
|
|
41043
41043
|
}),
|
|
41044
41044
|
/* @__PURE__ */ Ie(f, {
|
|
41045
|
-
ref:
|
|
41046
|
-
autoRotate:
|
|
41045
|
+
ref: ae,
|
|
41046
|
+
autoRotate: se,
|
|
41047
41047
|
autoRotateSpeed: S,
|
|
41048
41048
|
enablePan: !1,
|
|
41049
|
+
enableZoom: w,
|
|
41050
|
+
enableRotate: T,
|
|
41049
41051
|
minDistance: y,
|
|
41050
41052
|
maxDistance: b,
|
|
41051
41053
|
rotateSpeed: C,
|
|
41052
41054
|
zoomSpeed: .6,
|
|
41053
41055
|
enableDamping: !0,
|
|
41054
41056
|
dampingFactor: .08,
|
|
41055
|
-
onStart:
|
|
41057
|
+
onStart: le
|
|
41056
41058
|
}),
|
|
41057
41059
|
/* @__PURE__ */ Ie("ambientLight", {
|
|
41058
41060
|
intensity: 1.6,
|
|
41059
|
-
color:
|
|
41061
|
+
color: re.text
|
|
41060
41062
|
}),
|
|
41061
41063
|
/* @__PURE__ */ Ie("directionalLight", {
|
|
41062
41064
|
position: [
|
|
@@ -41065,7 +41067,7 @@ function YZ(e) {
|
|
|
41065
41067
|
100
|
|
41066
41068
|
],
|
|
41067
41069
|
intensity: .5,
|
|
41068
|
-
color:
|
|
41070
|
+
color: re.text
|
|
41069
41071
|
})
|
|
41070
41072
|
] });
|
|
41071
41073
|
}
|
package/dist/globe-kit.umd.cjs
CHANGED
|
@@ -919,4 +919,4 @@ THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
919
919
|
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function KY(){throw TypeError(`Invalid attempt to destructure non-iterable instance.
|
|
920
920
|
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function qY(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t||`default`);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function JY(e){var t=qY(e,`string`);return typeof t==`symbol`?t:String(t)}var YY=function(e,t){var n=new Set(t);return Object.assign.apply(Object,[{}].concat(zY(Object.entries(e).filter(function(e){var t=RY(e,1)[0];return!n.has(t)}).map(function(e){var t=RY(e,2),n=t[0],r=t[1];return LY({},n,r)}))))};function XY(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function ZY(e){if(Array.isArray(e))return e}function QY(e){if(Array.isArray(e))return XY(e)}function $Y(e,t,n){return(t=dX(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function eX(e){if(typeof Symbol<`u`&&e[Symbol.iterator]!=null||e[`@@iterator`]!=null)return Array.from(e)}function tX(e,t){var n=e==null?null:typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(n!=null){var r,i,a,o,s=[],c=!0,l=!1;try{if(a=(n=n.call(e)).next,t===0){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){l=!0,i=e}finally{try{if(!c&&n.return!=null&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw i}}return s}}function nX(){throw TypeError(`Invalid attempt to destructure non-iterable instance.
|
|
921
921
|
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function rX(){throw TypeError(`Invalid attempt to spread non-iterable instance.
|
|
922
|
-
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function iX(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function aX(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?iX(Object(n),!0).forEach(function(t){$Y(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):iX(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function oX(e,t){if(e==null)return{};var n,r,i=sX(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)===-1&&{}.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function sX(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.indexOf(r)!==-1)continue;n[r]=e[r]}return n}function cX(e,t){return ZY(e)||tX(e,t)||fX(e,t)||nX()}function lX(e){return QY(e)||eX(e)||fX(e)||rX()}function uX(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function dX(e){var t=uX(e,`string`);return typeof t==`symbol`?t:t+``}function fX(e,t){if(e){if(typeof e==`string`)return XY(e,t);var n={}.toString.call(e).slice(8,-1);return n===`Object`&&e.constructor&&(n=e.constructor.name),n===`Map`||n===`Set`?Array.from(e):n===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?XY(e,t):void 0}}function pX(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=n.methodNames,i=r===void 0?[]:r,a=n.initPropNames,o=a===void 0?[]:a;return(0,t.forwardRef)(function(){var n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},r=arguments.length>1?arguments[1]:void 0,a=(0,t.useMemo)(function(){return new e(Object.fromEntries(o.filter(function(e){return n.hasOwnProperty(e)}).map(function(e){return[e,n[e]]})))},[]);(0,t.useEffect)(function(){return a._destructor instanceof Function?a._destructor:void 0},[a]);var s=(0,t.useCallback)(function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return a[e]instanceof Function?a[e].apply(a,n):void 0},[a]),c=Object.fromEntries(Object.entries(n).filter(function(e){var t=cX(e,1)[0];return!a[t]||!(a[t]instanceof Function)})),l=(0,t.useRef)({});return Object.keys(YY(n,[].concat(lX(i),lX(o),lX(Object.keys(c))))).filter(function(e){return l.current[e]!==n[e]}).forEach(function(e){return s(e,n[e])}),l.current=n,(0,t.useImperativeHandle)(r,function(){return Object.fromEntries(i.map(function(e){return[e,function(){for(var t=arguments.length,n=Array(t),r=0;r<t;r++)n[r]=arguments[r];return s.apply(void 0,[e].concat(n))}]}))}),(0,t.createElement)(`primitive`,aX(aX({},c),{},{object:a}))})}var mX=[`onHover`,`onClick`],hX=pX(FY,{initPropNames:[`waitForGlobeReady`,`animateIn`],methodNames:[`getGlobeRadius`,`getCoords`,`toGeoCoords`,`pauseAnimation`,`resumeAnimation`,`setPointOfView`,`globeTileEngineClearCache`]}),gX=function(e){var t=e.intersections,n=function(e){return e?e.hasOwnProperty(`__globeObjType`)?e:n(e.parent):null},r=t.find(function(e){var t=n(e.object);return t&&t.__globeObjType!==`atmosphere`});return[n(r?.object),r]},_X=function(e,t){return({polygon:function(e){return e.data},particles:function(e){return t&&t.hasOwnProperty(`index`)&&e.length>t.index?e[t.index]:e}}[e?.__globeObjType]||function(e){return e})(e?.__data)},vX=(0,t.forwardRef)(function(e,n){var r=e.onHover,i=e.onClick,a=oX(e,mX),o=(0,t.useRef)(null),s=(0,t.useCallback)(function(e){if(r){var t=cX(gX(e),2),n=t[0],i=t[1];n!==o.current&&(o.current=n,r(n?.__globeObjType,_X(n,i)))}},[r]),c=(0,t.useCallback)(function(e){var t=cX(gX(e),2),n=t[0],r=t[1];n&&i&&(i(n?.__globeObjType,_X(n,r),e),e.stopPropagation())},[i]);return(0,t.createElement)(hX,aX(aX({},a),{},{ref:n,onPointerMove:r?s:void 0,onClick:i?c:void 0}))});function yX(e,t){return typeof e==`function`?e(t):typeof e==`string`?t[e]:e}function bX(e){return new Promise(t=>{let n=new Image;n.crossOrigin=`anonymous`,n.onload=()=>{let r=document.createElement(`canvas`);r.width=n.width,r.height=n.height;let a=r.getContext(`2d`);a.drawImage(n,0,0);let o=a.getImageData(0,0,r.width,r.height),s=o.data;for(let t=0;t<s.length;t+=4){let n=s[t]*.299+s[t+1]*.587+s[t+2]*.114;s[t]=Math.min(255,n*e.globeTint.r),s[t+1]=Math.min(255,n*e.globeTint.g),s[t+2]=Math.min(255,n*e.globeTint.b)}a.putImageData(o,0,0);let c=new i.CanvasTexture(r);c.needsUpdate=!0,t(c)},n.src=`//unpkg.com/three-globe/example/img/earth-blue-marble.jpg`})}function xX(e,t){let n=t.get(e);if(n)return n;let r=document.createElement(`canvas`);r.width=256,r.height=256;let a=r.getContext(`2d`);a.font=`${256*.7}px serif`,a.textAlign=`center`,a.textBaseline=`middle`,a.fillText(e,256/2,256/2);let o=new i.CanvasTexture(r);o.minFilter=i.LinearFilter,o.magFilter=i.LinearFilter,o.needsUpdate=!0;let s=new i.SpriteMaterial({map:o,transparent:!0,depthWrite:!1,depthTest:!1,sizeAttenuation:!0});return t.set(e,s),s}function SX(e,t,n){let r=`${e}:${t.width}:${t.height}:${t.font}:${t.color}`,a=n.get(r);if(a)return a;let o=document.createElement(`canvas`);o.width=t.width,o.height=t.height;let s=o.getContext(`2d`);s.font=t.font,s.fillStyle=t.color,s.textAlign=`center`,s.textBaseline=`middle`,s.fillText(e,t.width/2,t.height/2);let c=new i.CanvasTexture(o);c.minFilter=i.LinearFilter,c.magFilter=i.LinearFilter,c.needsUpdate=!0;let l=new i.SpriteMaterial({map:c,transparent:!0,depthWrite:!1,depthTest:!1,sizeAttenuation:!0});return n.set(r,l),l}function CX(e,t,n,r,i){let a=new Set,o=new Map,s=(e,t)=>`${e},${t}`,c=[...e].sort((e,t)=>r(e).localeCompare(r(t)));for(let e of c){let r=t(e),c=n(e),l=Math.round(r/i),u=Math.round(c/i),d=s(l,u);if(!a.has(d))a.add(d),o.set(e,[l*i,u*i]);else{let t=!1;for(let n=-1;n<=1&&!t;n++)for(let r=-1;r<=1&&!t;r++){if(n===0&&r===0)continue;let c=l+n,d=u+r,f=s(c,d);a.has(f)||(a.add(f),o.set(e,[c*i,d*i]),t=!0)}t||o.set(e,[r,c])}}return o}function wX(e,t,n){let r=(90-e)*(Math.PI/180),i=(90-t)*(Math.PI/180);return[n*Math.sin(r)*Math.cos(i),n*Math.cos(r),n*Math.sin(r)*Math.sin(i)]}function TX(e){return e<.5?4*e*e*e:1-(-2*e+2)**3/2}function EX(e){let t=0;for(let n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n)|0;return(t&65535)/65535*Math.PI*2}function DX(e){return e<=0?0:e>=1?1:2**(-10*e)*Math.sin((e-.1)*5*Math.PI)+1}function OX(e,t,n){let r=(performance.now()-e)/1e3-t;return Math.min(Math.max(r/n,0),1)}var kX=new i.Vector3,AX=new i.Vector3;function jX(e,t){kX.copy(e).normalize(),AX.copy(t).normalize();let n=kX.dot(AX);return Math.min(Math.max((n-.05)/.25,0),1)}var MX=[{name:`PACIFIC OCEAN`,lat:0,lng:-160},{name:`ATLANTIC OCEAN`,lat:15,lng:-35},{name:`INDIAN OCEAN`,lat:-20,lng:75},{name:`SOUTHERN OCEAN`,lat:-62,lng:0},{name:`ARCTIC OCEAN`,lat:78,lng:0}],NX=[{name:`ASIA`,lat:45,lng:85},{name:`EUROPE`,lat:54,lng:15},{name:`AFRICA`,lat:5,lng:22},{name:`NORTH AMERICA`,lat:48,lng:-100},{name:`SOUTH AMERICA`,lat:-15,lng:-58},{name:`OCEANIA`,lat:-25,lng:135}],PX=[{name:`Russia`,lat:62,lng:95},{name:`China`,lat:35,lng:103},{name:`India`,lat:22,lng:78},{name:`Japan`,lat:36,lng:138},{name:`Korea`,lat:36,lng:128},{name:`Philippines`,lat:13,lng:122},{name:`Indonesia`,lat:-2,lng:118},{name:`Thailand`,lat:15,lng:101},{name:`Myanmar`,lat:20,lng:97},{name:`Malaysia`,lat:4,lng:109},{name:`Vietnam`,lat:16,lng:108},{name:`Pakistan`,lat:30,lng:70},{name:`Iran`,lat:33,lng:53},{name:`Iraq`,lat:33,lng:44},{name:`Turkey`,lat:39,lng:35},{name:`Saudi Arabia`,lat:24,lng:45},{name:`Egypt`,lat:27,lng:30},{name:`Kazakhstan`,lat:48,lng:68},{name:`Mongolia`,lat:47,lng:105},{name:`France`,lat:47,lng:2},{name:`Spain`,lat:40,lng:-4},{name:`Italy`,lat:43,lng:12},{name:`Germany`,lat:51,lng:10},{name:`Ukraine`,lat:49,lng:32},{name:`Norway`,lat:64,lng:12},{name:`Greece`,lat:39,lng:22},{name:`Morocco`,lat:32,lng:-6},{name:`Algeria`,lat:28,lng:3},{name:`United States`,lat:39,lng:-98},{name:`Canada`,lat:56,lng:-106},{name:`Mexico`,lat:23,lng:-102},{name:`Brazil`,lat:-10,lng:-52},{name:`Argentina`,lat:-35,lng:-65},{name:`Colombia`,lat:4,lng:-72},{name:`Nigeria`,lat:10,lng:8},{name:`Congo`,lat:-3,lng:23},{name:`Sudan`,lat:16,lng:30},{name:`South Africa`,lat:-30,lng:25},{name:`Kenya`,lat:0,lng:38},{name:`Ethiopia`,lat:9,lng:39},{name:`Madagascar`,lat:-19,lng:47},{name:`Australia`,lat:-25,lng:134},{name:`New Zealand`,lat:-42,lng:173},{name:`Sri Lanka`,lat:7.5,lng:80.5}];function FX(e,t){let n=[];if(e.oceans)for(let e of MX)n.push({lat:e.lat,lng:e.lng,type:`ocean`,label:e.name});if(e.continents)for(let e of NX)n.push({lat:e.lat,lng:e.lng,type:`continent`,label:e.name});if(e.countries)for(let e of PX)n.push({lat:e.lat,lng:e.lng,type:`country`,label:e.name});if(t)for(let e of t)n.push({lat:e.lat,lng:e.lng,type:`country`,label:e.text});return n}function IX(e){let n=(0,t.useRef)(new Map),r=(0,t.useRef)(new Map),i=(0,t.useRef)(new Map);return{ocean:(0,t.useCallback)(t=>SX(t,{width:512,height:64,font:`32px 'Inter', system-ui, sans-serif`,color:`${e.textSecondary}4d`},n.current),[e]),continent:(0,t.useCallback)(t=>SX(t.split(``).join(` `),{width:1024,height:128,font:`bold 72px 'Inter', system-ui, sans-serif`,color:`${e.textSecondary}33`},r.current),[e]),country:(0,t.useCallback)(t=>SX(t,{width:512,height:64,font:`36px 'Inter', system-ui, sans-serif`,color:`${e.textSecondary}59`},i.current),[e])}}function LX({gridDeg:e,elevation:n=.08,color:r=`#585b70`}){return(0,a.jsx)(`primitive`,{object:(0,t.useMemo)(()=>{let t=101*(1+n),a=new i.LineBasicMaterial({color:new i.Color(r),transparent:!0,opacity:.15,depthWrite:!1}),o=new i.Group;for(let n=-80;n<=80;n+=e){let e=(90-n)*(Math.PI/180),r=[];for(let n=0;n<=64;n++){let a=n/64*Math.PI*2;r.push(new i.Vector3(t*Math.sin(e)*Math.cos(a),t*Math.cos(e),t*Math.sin(e)*Math.sin(a)))}o.add(new i.Line(new i.BufferGeometry().setFromPoints(r),a))}for(let n=-180;n<180;n+=e){let e=Math.PI/180*n,r=[];for(let n=0;n<=64;n++){let a=n/64*Math.PI;r.push(new i.Vector3(t*Math.sin(a)*Math.cos(e),t*Math.cos(a),t*Math.sin(a)*Math.sin(e)))}o.add(new i.Line(new i.BufferGeometry().setFromPoints(r),a))}return o},[e,n,r])})}function RX(e){let{data:o,lat:s,lng:c,icon:l,id:u,gridSize:d=5,gridElevation:f=.06,iconElevation:p=.005,iconSize:m=7,minDistance:h=200,maxDistance:g=500,autoRotate:_=!0,autoRotateSpeed:v=.3,rotateSpeed:y=.25,entrance:b=`sprout`,entranceDuration:x=2.5,entranceStagger:S=2,selectedId:C,onClick:w,onHover:T,labels:E,customLabels:D,bumpMap:O=!0,atmosphereAltitude:k=.18,resolvedTheme:A}=e,ee=(0,t.useRef)(void 0),j=(0,t.useRef)(null),{camera:te}=(0,n.useThree)(),[ne,re]=(0,t.useState)(_),ie=(0,t.useCallback)(()=>re(!1),[]),[ae,oe]=(0,t.useState)();(0,t.useEffect)(()=>{bX(A).then(e=>{oe(new i.MeshStandardMaterial({map:e,roughness:1,metalness:0}))})},[A]);let se=(0,t.useMemo)(()=>{let e=e=>yX(s,e),t=e=>yX(c,e),n=d>0?CX(o,e,t,e=>u?yX(u,e):String(yX(s,e)),d):null,r=o.map(r=>{let i=n?.get(r)??[e(r),t(r)];return{lat:i[0],lng:i[1],type:`item`,originalItem:r,icon:l?yX(l,r):void 0,id:u?yX(u,r):void 0}}),i=FX(typeof E==`boolean`?{continents:E,countries:E,oceans:E}:E??{},D);return[...r,...i]},[o,s,c,l,u,d,E,D]),ce=(0,t.useRef)(new Map),le=IX(A),ue=(0,t.useRef)(performance.now()),de=(0,t.useMemo)(()=>new i.Vector3,[]),fe=(0,t.useMemo)(()=>new i.Vector3,[]),pe=(0,t.useCallback)((e,t)=>(e.updateWorldMatrix(!0,!1),t.updateWorldMatrix(!0,!1),e.getWorldPosition(de),t.getWorldPosition(fe),jX(de,fe)),[fe,de]),me=(0,t.useCallback)(e=>{let t=e,n=ue.current;if(t.type===`ocean`){let e=new i.Sprite(le.ocean(t.label).clone());e.scale.set(0,0,1);let r=1.8+Math.random()*.6;return e.onBeforeRender=(t,i,a)=>{let o=OX(n,r,.8),s=DX(o),c=pe(e,a);e.scale.set(18*s,2.2*s,1),e.material.opacity=o*c},e}if(t.type===`continent`){let e=new i.Sprite(le.continent(t.label).clone());e.scale.set(0,0,1);let r=2+Math.random()*.5;return e.onBeforeRender=(t,i,a)=>{let o=OX(n,r,1),s=pe(e,a);e.scale.set(35*o,4.5*o,1),e.material.opacity=o*.22*s},e}if(t.type===`country`){let e=new i.Sprite(le.country(t.label).clone());e.scale.set(0,0,1);let r=2.2+Math.random()*.8;return e.onBeforeRender=(t,i,a)=>{let o=OX(n,r,.6),s=pe(e,a);e.scale.set(10*o,1.5*o,1),e.material.opacity=o*.4*s},e}let r=(typeof t.icon==`string`?t.icon:null)??`📍`,a=new i.Group,o=new i.Sprite(xX(r,ce.current).clone()),s=m,c=0,l=EX(t.id??r),u=b===`none`?0:.3+l/(Math.PI*2)*S,d=b===`none`?0:.7;return o.scale.set(0,0,1),a.renderOrder=10,o.renderOrder=10,o.onBeforeRender=(e,t,r)=>{let i=performance.now()*.001,f=d>0?OX(n,u,d):1,p;p=b===`sprout`?DX(f):b===`fade`?f:b===`scatter`?DX(f):1;let m=pe(a,r),h=f>=1?Math.sin(i*1.2+l)*.4:0,g=(f>=1?s+Math.sin(i*2+l)*.3:s)*p,_=m*Math.min(f,1);c+=(_-c)*.18,o.scale.set(g,g,1),o.material.opacity=c,o.position.y=(1-p)*-3+h},a.add(o),a},[b,S,m,le,pe]),he=(0,t.useCallback)(e=>{let t=e.type;return t===`ocean`?.008:t===`continent`?.003:t===`country`?.006:p},[p]),ge=(0,t.useCallback)((e,t,n)=>{if(!t||!w)return;let r=t;r.type===`item`&&r.originalItem&&w(r.originalItem,n)},[w]),_e=(0,t.useCallback)((e,t)=>{let n=t,r=n?.type===`item`;document.body.style.cursor=r?`pointer`:``,T?.(r&&n?.originalItem?n.originalItem:null)},[T]),ve=(0,t.useRef)(null);return(0,t.useEffect)(()=>{if(!C)return;let e=se.find(e=>e.type===`item`&&e.id===C);if(!e)return;let t=Math.min(te.position.length(),220),[n,r,a]=wX(e.lat,e.lng,t);ve.current={start:te.position.clone(),end:new i.Vector3(n,r,a),startTime:performance.now(),duration:1500}},[C,se,te]),(0,n.useFrame)(()=>{let e=ve.current;if(!e)return;let t=performance.now()-e.startTime,n=Math.min(t/e.duration,1);te.position.lerpVectors(e.start,e.end,TX(n)),te.lookAt(0,0,0),j.current&&(j.current.target.set(0,0,0),j.current.update()),n>=1&&(ve.current=null)}),(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(vX,{ref:ee,showGlobe:!0,...ae?{globeMaterial:ae}:{},bumpImageUrl:O?`//unpkg.com/three-globe/example/img/earth-topology.png`:void 0,showAtmosphere:!0,atmosphereColor:A.atmosphere,atmosphereAltitude:k,showGraticules:!1,objectsData:se,objectLat:`lat`,objectLng:`lng`,objectAltitude:he,objectThreeObject:me,onClick:ge,onHover:_e}),(0,a.jsx)(LX,{gridDeg:d,elevation:f,color:A.grid}),(0,a.jsx)(r.OrbitControls,{ref:j,autoRotate:ne,autoRotateSpeed:v,enablePan:!1,minDistance:h,maxDistance:g,rotateSpeed:y,zoomSpeed:.6,enableDamping:!0,dampingFactor:.08,onStart:ie}),(0,a.jsx)(`ambientLight`,{intensity:1.6,color:A.text}),(0,a.jsx)(`directionalLight`,{position:[100,80,100],intensity:.5,color:A.text})]})}function zX({count:e=2e3,theme:n}){return(0,a.jsx)(`points`,{geometry:(0,t.useMemo)(()=>{let t=new Float32Array(e*3),n=new Float32Array(e);for(let r=0;r<e;r++){let e=800+Math.random()*700,i=Math.random()*Math.PI*2,a=Math.acos(2*Math.random()-1);t[r*3]=e*Math.sin(a)*Math.cos(i),t[r*3+1]=e*Math.sin(a)*Math.sin(i),t[r*3+2]=e*Math.cos(a),n[r]=.5+Math.random()*1.5}let r=new i.BufferGeometry;return r.setAttribute(`position`,new i.BufferAttribute(t,3)),r.setAttribute(`size`,new i.BufferAttribute(n,1)),r},[e]),children:(0,a.jsx)(`pointsMaterial`,{color:n.textSecondary,size:1.2,sizeAttenuation:!0,transparent:!0,opacity:.7,depthWrite:!1})})}function BX(e){let{initialDistance:t,resolvedTheme:r,starfield:i,starfieldCount:o,onItemClick:s,onItemHover:c,...l}=e;return(0,a.jsxs)(n.Canvas,{camera:{position:[0,0,t],fov:50,near:1,far:2e3},style:{width:`100%`,height:`100%`},children:[i!==!1&&(0,a.jsx)(zX,{count:o,theme:r}),(0,a.jsx)(RX,{...l,onClick:s,onHover:c,resolvedTheme:r})]})}var VX=(0,t.memo)(BX);function HX(e){let n=y(e.theme),{starfield:r=!0,starfieldCount:i=2e3,initialDistance:o=350,tooltip:s,detailPanel:c,onClick:l}=e,[u,d]=(0,t.useState)(null),f=(0,t.useRef)(null),p=(0,t.useRef)({x:0,y:0}),m=(0,t.useRef)(null),[h,g]=(0,t.useState)(null),_=(0,t.useCallback)(()=>{let e=m.current;e&&(e.style.left=`${p.current.x+16}px`,e.style.top=`${p.current.y-10}px`)},[]),v=(0,t.useCallback)(t=>{f.current!==t&&(f.current=t,d(t),e.onHover?.(t))},[e.onHover]),b=(0,t.useCallback)((e,t)=>{g(e),l?.(e,t)},[l]),x=(0,t.useCallback)(()=>{g(null)},[]),S=(0,t.useCallback)(e=>{p.current={x:e.clientX,y:e.clientY},_()},[_]);(0,t.useEffect)(()=>{_()},[u,_]);let C=h;return(0,a.jsxs)(`div`,{style:{width:`100%`,height:`100%`,background:n.background,position:`relative`},onMouseMove:S,children:[(0,a.jsx)(VX,{...e,initialDistance:o,resolvedTheme:n,starfield:r,starfieldCount:i,onItemClick:b,onItemHover:v}),e.header&&(0,a.jsx)(`div`,{style:{position:`fixed`,top:16,left:`50%`,transform:`translateX(-50%)`,zIndex:50,pointerEvents:`none`},children:(0,a.jsx)(`div`,{style:{pointerEvents:`auto`},children:e.header()})}),e.filterBar&&(0,a.jsx)(`div`,{style:{position:`fixed`,bottom:20,left:`50%`,transform:`translateX(-50%)`,zIndex:50},children:e.filterBar()}),s&&u&&(0,a.jsx)(`div`,{ref:m,style:{position:`fixed`,left:0,top:0,zIndex:300,display:`flex`,alignItems:`center`,gap:8,background:n.frostedBg,backdropFilter:`blur(8px)`,border:`1px solid ${n.frostedBorder}`,borderRadius:8,padding:`8px 12px`,pointerEvents:`none`,maxWidth:240},children:s(u)}),c&&C&&c(C,x)]})}e.Globe=HX,e.themes=v});
|
|
922
|
+
In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function iX(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function aX(e){for(var t=1;t<arguments.length;t++){var n=arguments[t]==null?{}:arguments[t];t%2?iX(Object(n),!0).forEach(function(t){$Y(e,t,n[t])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):iX(Object(n)).forEach(function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))})}return e}function oX(e,t){if(e==null)return{};var n,r,i=sX(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)===-1&&{}.propertyIsEnumerable.call(e,n)&&(i[n]=e[n])}return i}function sX(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.indexOf(r)!==-1)continue;n[r]=e[r]}return n}function cX(e,t){return ZY(e)||tX(e,t)||fX(e,t)||nX()}function lX(e){return QY(e)||eX(e)||fX(e)||rX()}function uX(e,t){if(typeof e!=`object`||!e)return e;var n=e[Symbol.toPrimitive];if(n!==void 0){var r=n.call(e,t);if(typeof r!=`object`)return r;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function dX(e){var t=uX(e,`string`);return typeof t==`symbol`?t:t+``}function fX(e,t){if(e){if(typeof e==`string`)return XY(e,t);var n={}.toString.call(e).slice(8,-1);return n===`Object`&&e.constructor&&(n=e.constructor.name),n===`Map`||n===`Set`?Array.from(e):n===`Arguments`||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?XY(e,t):void 0}}function pX(e){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=n.methodNames,i=r===void 0?[]:r,a=n.initPropNames,o=a===void 0?[]:a;return(0,t.forwardRef)(function(){var n=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},r=arguments.length>1?arguments[1]:void 0,a=(0,t.useMemo)(function(){return new e(Object.fromEntries(o.filter(function(e){return n.hasOwnProperty(e)}).map(function(e){return[e,n[e]]})))},[]);(0,t.useEffect)(function(){return a._destructor instanceof Function?a._destructor:void 0},[a]);var s=(0,t.useCallback)(function(e){for(var t=arguments.length,n=Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];return a[e]instanceof Function?a[e].apply(a,n):void 0},[a]),c=Object.fromEntries(Object.entries(n).filter(function(e){var t=cX(e,1)[0];return!a[t]||!(a[t]instanceof Function)})),l=(0,t.useRef)({});return Object.keys(YY(n,[].concat(lX(i),lX(o),lX(Object.keys(c))))).filter(function(e){return l.current[e]!==n[e]}).forEach(function(e){return s(e,n[e])}),l.current=n,(0,t.useImperativeHandle)(r,function(){return Object.fromEntries(i.map(function(e){return[e,function(){for(var t=arguments.length,n=Array(t),r=0;r<t;r++)n[r]=arguments[r];return s.apply(void 0,[e].concat(n))}]}))}),(0,t.createElement)(`primitive`,aX(aX({},c),{},{object:a}))})}var mX=[`onHover`,`onClick`],hX=pX(FY,{initPropNames:[`waitForGlobeReady`,`animateIn`],methodNames:[`getGlobeRadius`,`getCoords`,`toGeoCoords`,`pauseAnimation`,`resumeAnimation`,`setPointOfView`,`globeTileEngineClearCache`]}),gX=function(e){var t=e.intersections,n=function(e){return e?e.hasOwnProperty(`__globeObjType`)?e:n(e.parent):null},r=t.find(function(e){var t=n(e.object);return t&&t.__globeObjType!==`atmosphere`});return[n(r?.object),r]},_X=function(e,t){return({polygon:function(e){return e.data},particles:function(e){return t&&t.hasOwnProperty(`index`)&&e.length>t.index?e[t.index]:e}}[e?.__globeObjType]||function(e){return e})(e?.__data)},vX=(0,t.forwardRef)(function(e,n){var r=e.onHover,i=e.onClick,a=oX(e,mX),o=(0,t.useRef)(null),s=(0,t.useCallback)(function(e){if(r){var t=cX(gX(e),2),n=t[0],i=t[1];n!==o.current&&(o.current=n,r(n?.__globeObjType,_X(n,i)))}},[r]),c=(0,t.useCallback)(function(e){var t=cX(gX(e),2),n=t[0],r=t[1];n&&i&&(i(n?.__globeObjType,_X(n,r),e),e.stopPropagation())},[i]);return(0,t.createElement)(hX,aX(aX({},a),{},{ref:n,onPointerMove:r?s:void 0,onClick:i?c:void 0}))});function yX(e,t){return typeof e==`function`?e(t):typeof e==`string`?t[e]:e}function bX(e){return new Promise(t=>{let n=new Image;n.crossOrigin=`anonymous`,n.onload=()=>{let r=document.createElement(`canvas`);r.width=n.width,r.height=n.height;let a=r.getContext(`2d`);a.drawImage(n,0,0);let o=a.getImageData(0,0,r.width,r.height),s=o.data;for(let t=0;t<s.length;t+=4){let n=s[t]*.299+s[t+1]*.587+s[t+2]*.114;s[t]=Math.min(255,n*e.globeTint.r),s[t+1]=Math.min(255,n*e.globeTint.g),s[t+2]=Math.min(255,n*e.globeTint.b)}a.putImageData(o,0,0);let c=new i.CanvasTexture(r);c.needsUpdate=!0,t(c)},n.src=`//unpkg.com/three-globe/example/img/earth-blue-marble.jpg`})}function xX(e,t){let n=t.get(e);if(n)return n;let r=document.createElement(`canvas`);r.width=256,r.height=256;let a=r.getContext(`2d`);a.font=`${256*.7}px serif`,a.textAlign=`center`,a.textBaseline=`middle`,a.fillText(e,256/2,256/2);let o=new i.CanvasTexture(r);o.minFilter=i.LinearFilter,o.magFilter=i.LinearFilter,o.needsUpdate=!0;let s=new i.SpriteMaterial({map:o,transparent:!0,depthWrite:!1,depthTest:!1,sizeAttenuation:!0});return t.set(e,s),s}function SX(e,t,n){let r=`${e}:${t.width}:${t.height}:${t.font}:${t.color}`,a=n.get(r);if(a)return a;let o=document.createElement(`canvas`);o.width=t.width,o.height=t.height;let s=o.getContext(`2d`);s.font=t.font,s.fillStyle=t.color,s.textAlign=`center`,s.textBaseline=`middle`,s.fillText(e,t.width/2,t.height/2);let c=new i.CanvasTexture(o);c.minFilter=i.LinearFilter,c.magFilter=i.LinearFilter,c.needsUpdate=!0;let l=new i.SpriteMaterial({map:c,transparent:!0,depthWrite:!1,depthTest:!1,sizeAttenuation:!0});return n.set(r,l),l}function CX(e,t,n,r,i){let a=new Set,o=new Map,s=(e,t)=>`${e},${t}`,c=[...e].sort((e,t)=>r(e).localeCompare(r(t)));for(let e of c){let r=t(e),c=n(e),l=Math.round(r/i),u=Math.round(c/i),d=s(l,u);if(!a.has(d))a.add(d),o.set(e,[l*i,u*i]);else{let t=!1;for(let n=-1;n<=1&&!t;n++)for(let r=-1;r<=1&&!t;r++){if(n===0&&r===0)continue;let c=l+n,d=u+r,f=s(c,d);a.has(f)||(a.add(f),o.set(e,[c*i,d*i]),t=!0)}t||o.set(e,[r,c])}}return o}function wX(e,t,n){let r=(90-e)*(Math.PI/180),i=(90-t)*(Math.PI/180);return[n*Math.sin(r)*Math.cos(i),n*Math.cos(r),n*Math.sin(r)*Math.sin(i)]}function TX(e){return e<.5?4*e*e*e:1-(-2*e+2)**3/2}function EX(e){let t=0;for(let n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n)|0;return(t&65535)/65535*Math.PI*2}function DX(e){return e<=0?0:e>=1?1:2**(-10*e)*Math.sin((e-.1)*5*Math.PI)+1}function OX(e,t,n){let r=(performance.now()-e)/1e3-t;return Math.min(Math.max(r/n,0),1)}var kX=new i.Vector3,AX=new i.Vector3;function jX(e,t){kX.copy(e).normalize(),AX.copy(t).normalize();let n=kX.dot(AX);return Math.min(Math.max((n-.05)/.25,0),1)}var MX=[{name:`PACIFIC OCEAN`,lat:0,lng:-160},{name:`ATLANTIC OCEAN`,lat:15,lng:-35},{name:`INDIAN OCEAN`,lat:-20,lng:75},{name:`SOUTHERN OCEAN`,lat:-62,lng:0},{name:`ARCTIC OCEAN`,lat:78,lng:0}],NX=[{name:`ASIA`,lat:45,lng:85},{name:`EUROPE`,lat:54,lng:15},{name:`AFRICA`,lat:5,lng:22},{name:`NORTH AMERICA`,lat:48,lng:-100},{name:`SOUTH AMERICA`,lat:-15,lng:-58},{name:`OCEANIA`,lat:-25,lng:135}],PX=[{name:`Russia`,lat:62,lng:95},{name:`China`,lat:35,lng:103},{name:`India`,lat:22,lng:78},{name:`Japan`,lat:36,lng:138},{name:`Korea`,lat:36,lng:128},{name:`Philippines`,lat:13,lng:122},{name:`Indonesia`,lat:-2,lng:118},{name:`Thailand`,lat:15,lng:101},{name:`Myanmar`,lat:20,lng:97},{name:`Malaysia`,lat:4,lng:109},{name:`Vietnam`,lat:16,lng:108},{name:`Pakistan`,lat:30,lng:70},{name:`Iran`,lat:33,lng:53},{name:`Iraq`,lat:33,lng:44},{name:`Turkey`,lat:39,lng:35},{name:`Saudi Arabia`,lat:24,lng:45},{name:`Egypt`,lat:27,lng:30},{name:`Kazakhstan`,lat:48,lng:68},{name:`Mongolia`,lat:47,lng:105},{name:`France`,lat:47,lng:2},{name:`Spain`,lat:40,lng:-4},{name:`Italy`,lat:43,lng:12},{name:`Germany`,lat:51,lng:10},{name:`Ukraine`,lat:49,lng:32},{name:`Norway`,lat:64,lng:12},{name:`Greece`,lat:39,lng:22},{name:`Morocco`,lat:32,lng:-6},{name:`Algeria`,lat:28,lng:3},{name:`United States`,lat:39,lng:-98},{name:`Canada`,lat:56,lng:-106},{name:`Mexico`,lat:23,lng:-102},{name:`Brazil`,lat:-10,lng:-52},{name:`Argentina`,lat:-35,lng:-65},{name:`Colombia`,lat:4,lng:-72},{name:`Nigeria`,lat:10,lng:8},{name:`Congo`,lat:-3,lng:23},{name:`Sudan`,lat:16,lng:30},{name:`South Africa`,lat:-30,lng:25},{name:`Kenya`,lat:0,lng:38},{name:`Ethiopia`,lat:9,lng:39},{name:`Madagascar`,lat:-19,lng:47},{name:`Australia`,lat:-25,lng:134},{name:`New Zealand`,lat:-42,lng:173},{name:`Sri Lanka`,lat:7.5,lng:80.5}];function FX(e,t){let n=[];if(e.oceans)for(let e of MX)n.push({lat:e.lat,lng:e.lng,type:`ocean`,label:e.name});if(e.continents)for(let e of NX)n.push({lat:e.lat,lng:e.lng,type:`continent`,label:e.name});if(e.countries)for(let e of PX)n.push({lat:e.lat,lng:e.lng,type:`country`,label:e.name});if(t)for(let e of t)n.push({lat:e.lat,lng:e.lng,type:`country`,label:e.text});return n}function IX(e){let n=(0,t.useRef)(new Map),r=(0,t.useRef)(new Map),i=(0,t.useRef)(new Map);return{ocean:(0,t.useCallback)(t=>SX(t,{width:512,height:64,font:`32px 'Inter', system-ui, sans-serif`,color:`${e.textSecondary}4d`},n.current),[e]),continent:(0,t.useCallback)(t=>SX(t.split(``).join(` `),{width:1024,height:128,font:`bold 72px 'Inter', system-ui, sans-serif`,color:`${e.textSecondary}33`},r.current),[e]),country:(0,t.useCallback)(t=>SX(t,{width:512,height:64,font:`36px 'Inter', system-ui, sans-serif`,color:`${e.textSecondary}59`},i.current),[e])}}function LX({gridDeg:e,elevation:n=.08,color:r=`#585b70`}){return(0,a.jsx)(`primitive`,{object:(0,t.useMemo)(()=>{let t=101*(1+n),a=new i.LineBasicMaterial({color:new i.Color(r),transparent:!0,opacity:.15,depthWrite:!1}),o=new i.Group;for(let n=-80;n<=80;n+=e){let e=(90-n)*(Math.PI/180),r=[];for(let n=0;n<=64;n++){let a=n/64*Math.PI*2;r.push(new i.Vector3(t*Math.sin(e)*Math.cos(a),t*Math.cos(e),t*Math.sin(e)*Math.sin(a)))}o.add(new i.Line(new i.BufferGeometry().setFromPoints(r),a))}for(let n=-180;n<180;n+=e){let e=Math.PI/180*n,r=[];for(let n=0;n<=64;n++){let a=n/64*Math.PI;r.push(new i.Vector3(t*Math.sin(a)*Math.cos(e),t*Math.cos(a),t*Math.sin(a)*Math.sin(e)))}o.add(new i.Line(new i.BufferGeometry().setFromPoints(r),a))}return o},[e,n,r])})}function RX(e){let{data:o,lat:s,lng:c,icon:l,id:u,gridSize:d=5,gridElevation:f=.06,iconElevation:p=.005,iconSize:m=7,minDistance:h=200,maxDistance:g=500,autoRotate:_=!0,autoRotateSpeed:v=.3,rotateSpeed:y=.25,enableZoom:b=!0,enableRotate:x=!0,entrance:S=`sprout`,entranceDuration:C=2.5,entranceStagger:w=2,selectedId:T,onClick:E,onHover:D,labels:O,customLabels:k,bumpMap:A=!0,atmosphereAltitude:ee=.18,resolvedTheme:j}=e,te=(0,t.useRef)(void 0),ne=(0,t.useRef)(null),{camera:re}=(0,n.useThree)(),[ie,ae]=(0,t.useState)(_),oe=(0,t.useCallback)(()=>ae(!1),[]),[se,ce]=(0,t.useState)();(0,t.useEffect)(()=>{bX(j).then(e=>{ce(new i.MeshStandardMaterial({map:e,roughness:1,metalness:0}))})},[j]);let le=(0,t.useMemo)(()=>{let e=e=>yX(s,e),t=e=>yX(c,e),n=d>0?CX(o,e,t,e=>u?yX(u,e):String(yX(s,e)),d):null,r=o.map(r=>{let i=n?.get(r)??[e(r),t(r)];return{lat:i[0],lng:i[1],type:`item`,originalItem:r,icon:l?yX(l,r):void 0,id:u?yX(u,r):void 0}}),i=FX(typeof O==`boolean`?{continents:O,countries:O,oceans:O}:O??{},k);return[...r,...i]},[o,s,c,l,u,d,O,k]),ue=(0,t.useRef)(new Map),de=IX(j),fe=(0,t.useRef)(performance.now()),pe=(0,t.useMemo)(()=>new i.Vector3,[]),me=(0,t.useMemo)(()=>new i.Vector3,[]),he=(0,t.useCallback)((e,t)=>(e.updateWorldMatrix(!0,!1),t.updateWorldMatrix(!0,!1),e.getWorldPosition(pe),t.getWorldPosition(me),jX(pe,me)),[me,pe]),ge=(0,t.useCallback)(e=>{let t=e,n=fe.current;if(t.type===`ocean`){let e=new i.Sprite(de.ocean(t.label).clone());e.scale.set(0,0,1);let r=1.8+Math.random()*.6;return e.onBeforeRender=(t,i,a)=>{let o=OX(n,r,.8),s=DX(o),c=he(e,a);e.scale.set(18*s,2.2*s,1),e.material.opacity=o*c},e}if(t.type===`continent`){let e=new i.Sprite(de.continent(t.label).clone());e.scale.set(0,0,1);let r=2+Math.random()*.5;return e.onBeforeRender=(t,i,a)=>{let o=OX(n,r,1),s=he(e,a);e.scale.set(35*o,4.5*o,1),e.material.opacity=o*.22*s},e}if(t.type===`country`){let e=new i.Sprite(de.country(t.label).clone());e.scale.set(0,0,1);let r=2.2+Math.random()*.8;return e.onBeforeRender=(t,i,a)=>{let o=OX(n,r,.6),s=he(e,a);e.scale.set(10*o,1.5*o,1),e.material.opacity=o*.4*s},e}let r=(typeof t.icon==`string`?t.icon:null)??`📍`,a=new i.Group,o=new i.Sprite(xX(r,ue.current).clone()),s=m,c=0,l=EX(t.id??r),u=S===`none`?0:.3+l/(Math.PI*2)*w,d=S===`none`?0:.7;return o.scale.set(0,0,1),a.renderOrder=10,o.renderOrder=10,o.onBeforeRender=(e,t,r)=>{let i=performance.now()*.001,f=d>0?OX(n,u,d):1,p;p=S===`sprout`?DX(f):S===`fade`?f:S===`scatter`?DX(f):1;let m=he(a,r),h=f>=1?Math.sin(i*1.2+l)*.4:0,g=(f>=1?s+Math.sin(i*2+l)*.3:s)*p,_=m*Math.min(f,1);c+=(_-c)*.18,o.scale.set(g,g,1),o.material.opacity=c,o.position.y=(1-p)*-3+h},a.add(o),a},[S,w,m,de,he]),_e=(0,t.useCallback)(e=>{let t=e.type;return t===`ocean`?.008:t===`continent`?.003:t===`country`?.006:p},[p]),ve=(0,t.useCallback)((e,t,n)=>{if(!t||!E)return;let r=t;r.type===`item`&&r.originalItem&&E(r.originalItem,n)},[E]),ye=(0,t.useCallback)((e,t)=>{let n=t,r=n?.type===`item`;document.body.style.cursor=r?`pointer`:``,D?.(r&&n?.originalItem?n.originalItem:null)},[D]),be=(0,t.useRef)(null);return(0,t.useEffect)(()=>{if(!T)return;let e=le.find(e=>e.type===`item`&&e.id===T);if(!e)return;let t=Math.min(re.position.length(),220),[n,r,a]=wX(e.lat,e.lng,t);be.current={start:re.position.clone(),end:new i.Vector3(n,r,a),startTime:performance.now(),duration:1500}},[T,le,re]),(0,n.useFrame)(()=>{let e=be.current;if(!e)return;let t=performance.now()-e.startTime,n=Math.min(t/e.duration,1);re.position.lerpVectors(e.start,e.end,TX(n)),re.lookAt(0,0,0),ne.current&&(ne.current.target.set(0,0,0),ne.current.update()),n>=1&&(be.current=null)}),(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(vX,{ref:te,showGlobe:!0,...se?{globeMaterial:se}:{},bumpImageUrl:A?`//unpkg.com/three-globe/example/img/earth-topology.png`:void 0,showAtmosphere:!0,atmosphereColor:j.atmosphere,atmosphereAltitude:ee,showGraticules:!1,objectsData:le,objectLat:`lat`,objectLng:`lng`,objectAltitude:_e,objectThreeObject:ge,onClick:ve,onHover:ye}),(0,a.jsx)(LX,{gridDeg:d,elevation:f,color:j.grid}),(0,a.jsx)(r.OrbitControls,{ref:ne,autoRotate:ie,autoRotateSpeed:v,enablePan:!1,enableZoom:b,enableRotate:x,minDistance:h,maxDistance:g,rotateSpeed:y,zoomSpeed:.6,enableDamping:!0,dampingFactor:.08,onStart:oe}),(0,a.jsx)(`ambientLight`,{intensity:1.6,color:j.text}),(0,a.jsx)(`directionalLight`,{position:[100,80,100],intensity:.5,color:j.text})]})}function zX({count:e=2e3,theme:n}){return(0,a.jsx)(`points`,{geometry:(0,t.useMemo)(()=>{let t=new Float32Array(e*3),n=new Float32Array(e);for(let r=0;r<e;r++){let e=800+Math.random()*700,i=Math.random()*Math.PI*2,a=Math.acos(2*Math.random()-1);t[r*3]=e*Math.sin(a)*Math.cos(i),t[r*3+1]=e*Math.sin(a)*Math.sin(i),t[r*3+2]=e*Math.cos(a),n[r]=.5+Math.random()*1.5}let r=new i.BufferGeometry;return r.setAttribute(`position`,new i.BufferAttribute(t,3)),r.setAttribute(`size`,new i.BufferAttribute(n,1)),r},[e]),children:(0,a.jsx)(`pointsMaterial`,{color:n.textSecondary,size:1.2,sizeAttenuation:!0,transparent:!0,opacity:.7,depthWrite:!1})})}function BX(e){let{initialDistance:t,resolvedTheme:r,starfield:i,starfieldCount:o,onItemClick:s,onItemHover:c,...l}=e;return(0,a.jsxs)(n.Canvas,{camera:{position:[0,0,t],fov:50,near:1,far:2e3},style:{width:`100%`,height:`100%`},children:[i!==!1&&(0,a.jsx)(zX,{count:o,theme:r}),(0,a.jsx)(RX,{...l,onClick:s,onHover:c,resolvedTheme:r})]})}var VX=(0,t.memo)(BX);function HX(e){let n=y(e.theme),{starfield:r=!0,starfieldCount:i=2e3,initialDistance:o=350,tooltip:s,detailPanel:c,onClick:l}=e,[u,d]=(0,t.useState)(null),f=(0,t.useRef)(null),p=(0,t.useRef)({x:0,y:0}),m=(0,t.useRef)(null),[h,g]=(0,t.useState)(null),_=(0,t.useCallback)(()=>{let e=m.current;e&&(e.style.left=`${p.current.x+16}px`,e.style.top=`${p.current.y-10}px`)},[]),v=(0,t.useCallback)(t=>{f.current!==t&&(f.current=t,d(t),e.onHover?.(t))},[e.onHover]),b=(0,t.useCallback)((e,t)=>{g(e),l?.(e,t)},[l]),x=(0,t.useCallback)(()=>{g(null)},[]),S=(0,t.useCallback)(e=>{p.current={x:e.clientX,y:e.clientY},_()},[_]);(0,t.useEffect)(()=>{_()},[u,_]);let C=h;return(0,a.jsxs)(`div`,{style:{width:`100%`,height:`100%`,background:n.background,position:`relative`},onMouseMove:S,children:[(0,a.jsx)(VX,{...e,initialDistance:o,resolvedTheme:n,starfield:r,starfieldCount:i,onItemClick:b,onItemHover:v}),e.header&&(0,a.jsx)(`div`,{style:{position:`fixed`,top:16,left:`50%`,transform:`translateX(-50%)`,zIndex:50,pointerEvents:`none`},children:(0,a.jsx)(`div`,{style:{pointerEvents:`auto`},children:e.header()})}),e.filterBar&&(0,a.jsx)(`div`,{style:{position:`fixed`,bottom:20,left:`50%`,transform:`translateX(-50%)`,zIndex:50},children:e.filterBar()}),s&&u&&(0,a.jsx)(`div`,{ref:m,style:{position:`fixed`,left:0,top:0,zIndex:300,display:`flex`,alignItems:`center`,gap:8,background:n.frostedBg,backdropFilter:`blur(8px)`,border:`1px solid ${n.frostedBorder}`,borderRadius:8,padding:`8px 12px`,pointerEvents:`none`,maxWidth:240},children:s(u)}),c&&C&&c(C,x)]})}e.Globe=HX,e.themes=v});
|
package/dist/src/lib/types.d.ts
CHANGED
|
@@ -62,6 +62,10 @@ export interface GlobeProps<D = Record<string, unknown>> {
|
|
|
62
62
|
autoRotateSpeed?: number;
|
|
63
63
|
/** Rotate sensitivity. Default 0.25 */
|
|
64
64
|
rotateSpeed?: number;
|
|
65
|
+
/** Enable scroll-to-zoom. Default true */
|
|
66
|
+
enableZoom?: boolean;
|
|
67
|
+
/** Enable drag-to-rotate. Default true */
|
|
68
|
+
enableRotate?: boolean;
|
|
65
69
|
/** Built-in theme name or custom theme object */
|
|
66
70
|
theme?: string | GlobeTheme;
|
|
67
71
|
/** Show starfield particles. Default true */
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "globe-kit",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"description": "Drop any dataset onto a 3D globe — grid layout, entrance animations, themes, and full React customization. Built on r3f-globe.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/globe-kit.umd.cjs",
|