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 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, entrance: w = "sprout", entranceDuration: T = 2.5, entranceStagger: E = 2, selectedId: D, onClick: O, onHover: k, labels: A, customLabels: j, bumpMap: M = !0, atmosphereAltitude: ee = .18, resolvedTheme: te } = e, ne = s(void 0), re = s(null), { camera: ie } = d(), [ae, oe] = c(x), se = r(() => oe(!1), []), [ce, le] = c();
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(te).then((e) => {
40915
- le(new p.MeshStandardMaterial({
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
- }, [te]);
40922
- let ue = o(() => {
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 A == "boolean" ? {
40934
- continents: A,
40935
- countries: A,
40936
- oceans: A
40937
- } : A ?? {}, j);
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
- A,
40947
- j
40948
- ]), de = s(/* @__PURE__ */ new Map()), fe = qZ(te), pe = s(performance.now()), me = o(() => new p.Vector3(), []), he = o(() => new p.Vector3(), []), ge = r((e, t) => (e.updateWorldMatrix(!0, !1), t.updateWorldMatrix(!0, !1), e.getWorldPosition(me), t.getWorldPosition(he), HZ(me, he)), [he, me]), _e = r((e) => {
40949
- let t = e, n = pe.current;
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(fe.ocean(t.label).clone());
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 = ge(e, a);
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(fe.continent(t.label).clone());
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 = ge(e, a);
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(fe.country(t.label).clone());
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 = ge(e, a);
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, de.current).clone()), o = v, s = 0, c = LZ(t.id ?? r), l = w === "none" ? 0 : .3 + c / (Math.PI * 2) * E, u = w === "none" ? 0 : .7;
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 = w === "sprout" ? RZ(f) : w === "fade" ? f : w === "scatter" ? RZ(f) : 1;
40981
- let m = ge(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);
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
- fe,
40989
- ge
40990
- ]), ve = r((e) => {
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
- }, [_]), ye = r((e, t, n) => {
40994
- if (!t || !O) return;
40993
+ }, [_]), xe = r((e, t, n) => {
40994
+ if (!t || !A) return;
40995
40995
  let r = t;
40996
- r.type === "item" && r.originalItem && O(r.originalItem, n);
40997
- }, [O]), be = r((e, t) => {
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" : "", k?.(r && n?.originalItem ? n.originalItem : null);
41000
- }, [k]), xe = s(null);
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 (!D) return;
41003
- let e = ue.find((e) => e.type === "item" && e.id === D);
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(ie.position.length(), 220), [n, r, i] = FZ(e.lat, e.lng, t);
41006
- xe.current = {
41007
- start: ie.position.clone(),
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
- D,
41014
- ue,
41015
- ie
41013
+ k,
41014
+ fe,
41015
+ oe
41016
41016
  ]), u(() => {
41017
- let e = xe.current;
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
- ie.position.lerpVectors(e.start, e.end, IZ(n)), ie.lookAt(0, 0, 0), re.current && (re.current.target.set(0, 0, 0), re.current.update()), n >= 1 && (xe.current = null);
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: ne,
41023
+ ref: ie,
41024
41024
  showGlobe: !0,
41025
- ...ce ? { globeMaterial: ce } : {},
41026
- bumpImageUrl: M ? "//unpkg.com/three-globe/example/img/earth-topology.png" : void 0,
41025
+ ...ue ? { globeMaterial: ue } : {},
41026
+ bumpImageUrl: te ? "//unpkg.com/three-globe/example/img/earth-topology.png" : void 0,
41027
41027
  showAtmosphere: !0,
41028
- atmosphereColor: te.atmosphere,
41029
- atmosphereAltitude: ee,
41028
+ atmosphereColor: re.atmosphere,
41029
+ atmosphereAltitude: ne,
41030
41030
  showGraticules: !1,
41031
- objectsData: ue,
41031
+ objectsData: fe,
41032
41032
  objectLat: "lat",
41033
41033
  objectLng: "lng",
41034
- objectAltitude: ve,
41035
- objectThreeObject: _e,
41036
- onClick: ye,
41037
- onHover: be
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: te.grid
41042
+ color: re.grid
41043
41043
  }),
41044
41044
  /* @__PURE__ */ Ie(f, {
41045
- ref: re,
41046
- autoRotate: ae,
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: se
41057
+ onStart: le
41056
41058
  }),
41057
41059
  /* @__PURE__ */ Ie("ambientLight", {
41058
41060
  intensity: 1.6,
41059
- color: te.text
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: te.text
41070
+ color: re.text
41069
41071
  })
41070
41072
  ] });
41071
41073
  }
@@ -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});
@@ -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.0",
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",