@dxos/react-ui-geo 0.8.4-main.69d29f4 → 0.8.4-main.6fa680abb7

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.
@@ -796,14 +796,14 @@ var GlobeCanvas = /* @__PURE__ */ forwardRef(({ projection: projectionProp, topo
796
796
  translation,
797
797
  rotation,
798
798
  setCenter,
799
- setZoom: (s) => {
800
- if (typeof s === "function") {
801
- const is = interpolateNumber(zoomRef.current, s(zoomRef.current));
799
+ setZoom: (state) => {
800
+ if (typeof state === "function") {
801
+ const is = interpolateNumber(zoomRef.current, state(zoomRef.current));
802
802
  transition().ease(zooming.current ? easeLinear : easeSinOut).duration(200).tween("scale", () => (t) => setZoom(is(t))).on("end", () => {
803
803
  zooming.current = false;
804
804
  });
805
805
  } else {
806
- setZoom(s);
806
+ setZoom(state);
807
807
  }
808
808
  },
809
809
  setTranslation,
@@ -852,7 +852,7 @@ var GlobeCanvas = /* @__PURE__ */ forwardRef(({ projection: projectionProp, topo
852
852
  var GlobeDebug = ({ position = "topleft" }) => {
853
853
  const { size, zoom, translation, rotation } = useGlobeContext();
854
854
  return /* @__PURE__ */ React3.createElement("div", {
855
- className: mx("z-10 absolute is-96 p-2 overflow-hidden border border-green-700 rounded", controlPositions[position])
855
+ className: mx("z-10 absolute w-96 p-2 overflow-hidden border border-green-700 rounded-sm", controlPositions[position])
856
856
  }, /* @__PURE__ */ React3.createElement("pre", {
857
857
  className: "font-mono text-xs text-green-700"
858
858
  }, JSON.stringify({
@@ -941,7 +941,7 @@ var MapRoot = /* @__PURE__ */ forwardRef2(({ classNames, scrollWheelZoom = true,
941
941
  }, /* @__PURE__ */ React4.createElement(MapContainer, {
942
942
  ...props,
943
943
  ref: mapRef,
944
- className: mx2("group relative grid bs-full is-full !bg-baseSurface dx-focus-ring-inset", classNames),
944
+ className: mx2("group relative grid h-full w-full !bg-base-surface dx-focus-ring-inset", classNames),
945
945
  attributionControl: false,
946
946
  zoomControl: false,
947
947
  scrollWheelZoom,
@@ -952,9 +952,10 @@ var MapRoot = /* @__PURE__ */ forwardRef2(({ classNames, scrollWheelZoom = true,
952
952
  }));
953
953
  });
954
954
  MapRoot.displayName = "Map.Root";
955
+ var MAP_TILES_NAME = "Map.Tiles";
955
956
  var MapTiles = (_props) => {
956
957
  const ref = useRef2(null);
957
- const { onChange } = useMapContext(MapTiles.displayName);
958
+ const { onChange } = useMapContext(MAP_TILES_NAME);
958
959
  useMapEvents({
959
960
  zoomstart: (ev) => {
960
961
  onChange?.({
@@ -963,7 +964,7 @@ var MapTiles = (_props) => {
963
964
  });
964
965
  }
965
966
  });
966
- const { attention } = useMapContext(MapTiles.displayName);
967
+ const { attention } = useMapContext(MAP_TILES_NAME);
967
968
  useEffect5(() => {
968
969
  if (ref.current) {
969
970
  ref.current.getContainer().dataset.attention = attention ? "1" : "0";
@@ -980,7 +981,7 @@ var MapTiles = (_props) => {
980
981
  keepBuffer: 4
981
982
  }));
982
983
  };
983
- MapTiles.displayName = "Map.Tiles";
984
+ MapTiles.displayName = MAP_TILES_NAME;
984
985
  var MapMarkers = ({ selected, markers }) => {
985
986
  const map = useMap();
986
987
  useEffect5(() => {
@@ -1036,7 +1037,7 @@ var CustomControl2 = ({ position, children }) => {
1036
1037
  position
1037
1038
  });
1038
1039
  control.onAdd = () => {
1039
- const container = DomUtil.create("div", mx2("!m-0", controlPositions[position]));
1040
+ const container = DomUtil.create("div", mx2("m-0!", controlPositions[position]));
1040
1041
  DomEvent.disableClickPropagation(container);
1041
1042
  DomEvent.disableScrollPropagation(container);
1042
1043
  const root = createRoot(container);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/components/Globe/Globe.tsx", "../../../src/hooks/context.tsx", "../../../src/hooks/useDrag.ts", "../../../src/util/debug.ts", "../../../src/util/inertia.ts", "../../../src/util/path.ts", "../../../src/util/render.ts", "../../../src/hooks/useGlobeZoomHandler.ts", "../../../src/hooks/useMapZoomHandler.ts", "../../../src/hooks/useSpinner.ts", "../../../src/hooks/useTour.ts", "../../../src/components/Toolbar/Controls.tsx", "../../../src/translations.ts", "../../../src/components/Map/Map.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2018 DXOS.org\n//\n\nimport {\n type GeoProjection,\n easeLinear,\n easeSinOut,\n geoMercator,\n geoOrthographic,\n geoPath,\n geoTransverseMercator,\n interpolateNumber,\n transition,\n} from 'd3';\nimport { type ControlPosition } from 'leaflet';\nimport React, {\n type PropsWithChildren,\n forwardRef,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useResizeDetector } from 'react-resize-detector';\nimport { type Topology } from 'topojson-specification';\n\nimport { type ThemeMode, type ThemedClassName, useDynamicRef, useThemeContext } from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\n\nimport {\n GlobeContextProvider,\n type GlobeContextProviderProps,\n type GlobeContextType,\n useGlobeContext,\n} from '../../hooks';\nimport {\n type Features,\n type StyleSet,\n createLayers,\n geoToPosition,\n positionToRotation,\n renderLayers,\n timer,\n} from '../../util';\nimport { ActionControls, type ControlProps, ZoomControls, controlPositions } from '../Toolbar';\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute\n */\nconst defaultStyles: Record<ThemeMode, StyleSet> = {\n light: {\n background: {\n fillStyle: '#EEE',\n },\n\n water: {\n fillStyle: '#555',\n },\n\n land: {\n fillStyle: '#999',\n },\n\n line: {\n strokeStyle: 'darkred',\n },\n\n point: {\n fillStyle: '#111111',\n strokeStyle: '#111111',\n strokeWidth: 1,\n pointRadius: 0.5,\n },\n },\n dark: {\n background: {\n fillStyle: '#111111',\n },\n\n water: {\n fillStyle: '#123E6A',\n },\n\n land: {\n fillStyle: '#032153',\n },\n\n line: {\n strokeStyle: '#111111',\n },\n\n point: {\n fillStyle: '#111111',\n strokeStyle: '#111111',\n strokeWidth: 1,\n pointRadius: 0.5,\n },\n },\n};\n\nexport type GlobeController = {\n canvas: HTMLCanvasElement;\n projection: GeoProjection;\n} & Pick<GlobeContextType, 'zoom' | 'translation' | 'rotation' | 'setZoom' | 'setTranslation' | 'setRotation'>;\n\nexport type ProjectionType = 'orthographic' | 'mercator' | 'transverse-mercator';\n\nconst projectionMap: Record<ProjectionType, () => GeoProjection> = {\n orthographic: geoOrthographic,\n mercator: geoMercator,\n 'transverse-mercator': geoTransverseMercator,\n};\n\nconst getProjection = (type: GlobeCanvasProps['projection'] = 'orthographic'): GeoProjection => {\n if (typeof type === 'string') {\n const constructor = projectionMap[type] ?? geoOrthographic;\n return constructor();\n }\n\n return type ?? geoOrthographic();\n};\n\n//\n// Root\n//\n\ntype GlobeRootProps = PropsWithChildren<ThemedClassName<GlobeContextProviderProps>>;\n\nconst GlobeRoot = ({ classNames, children, ...props }: GlobeRootProps) => {\n const { ref, width, height } = useResizeDetector<HTMLDivElement>();\n\n return (\n <div ref={ref} className={mx('relative flex grow overflow-hidden', classNames)}>\n <GlobeContextProvider size={{ width, height }} {...props}>\n {children}\n </GlobeContextProvider>\n </div>\n );\n};\n\n//\n// Canvas\n//\n\ntype GlobeCanvasProps = {\n projection?: ProjectionType | GeoProjection;\n topology?: Topology;\n features?: Features;\n styles?: StyleSet;\n};\n\n/**\n * Basic globe renderer.\n * https://github.com/topojson/world-atlas\n */\n// TODO(burdon): Move controller to root.\nconst GlobeCanvas = forwardRef<GlobeController, GlobeCanvasProps>(\n ({ projection: projectionProp, topology, features, styles: stylesProp }, forwardRef) => {\n const { themeMode } = useThemeContext();\n const styles = useMemo(() => stylesProp ?? defaultStyles[themeMode], [stylesProp, themeMode]);\n\n // Canvas.\n const [canvas, setCanvas] = useState<HTMLCanvasElement>(null);\n const canvasRef = (canvas: HTMLCanvasElement) => setCanvas(canvas);\n\n // Projection.\n const projection = useMemo(() => getProjection(projectionProp), [projectionProp]);\n\n // Layers.\n // TODO(burdon): Generate on the fly based on what is visible.\n const layers = useMemo(() => {\n return timer(() => createLayers(topology as Topology, features, styles));\n }, [topology, features, styles]);\n\n // State.\n const { size, center, zoom, translation, rotation, setCenter, setZoom, setTranslation, setRotation } =\n useGlobeContext();\n const zoomRef = useDynamicRef(zoom);\n\n // Update rotation.\n useEffect(() => {\n if (center) {\n setZoom(1);\n setRotation(positionToRotation(geoToPosition(center)));\n }\n }, [center]);\n\n // External controller.\n const zooming = useRef(false);\n useImperativeHandle<GlobeController, GlobeController>(forwardRef, () => {\n return {\n canvas,\n projection,\n center,\n get zoom() {\n return zoomRef.current;\n },\n translation,\n rotation,\n setCenter,\n setZoom: (s) => {\n if (typeof s === 'function') {\n const is = interpolateNumber(zoomRef.current, s(zoomRef.current));\n // Stop easing if already zooming.\n transition()\n .ease(zooming.current ? easeLinear : easeSinOut)\n .duration(200)\n .tween('scale', () => (t) => setZoom(is(t)))\n .on('end', () => {\n zooming.current = false;\n });\n } else {\n setZoom(s);\n }\n },\n setTranslation,\n setRotation,\n };\n }, [canvas]);\n\n // https://d3js.org/d3-geo/path#geoPath\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/getContext\n const generator = useMemo(\n () => canvas && projection && geoPath(projection, canvas.getContext('2d', { alpha: false })),\n [canvas, projection],\n );\n\n // Render on change.\n useEffect(() => {\n if (canvas && projection) {\n timer(() => {\n // https://d3js.org/d3-geo/projection\n projection\n .scale((Math.min(size.width, size.height) / 2) * zoom)\n .translate([size.width / 2 + (translation?.x ?? 0), size.height / 2 + (translation?.y ?? 0)])\n .rotate(rotation ?? [0, 0, 0]);\n\n renderLayers(generator, layers, zoom, styles);\n });\n }\n }, [generator, size, zoom, translation, rotation, layers]);\n\n if (!size.width || !size.height) {\n return null;\n }\n\n return <canvas ref={canvasRef} width={size.width} height={size.height} />;\n },\n);\n\n//\n// Debug\n//\n\nconst GlobeDebug = ({ position = 'topleft' }: { position?: ControlPosition }) => {\n const { size, zoom, translation, rotation } = useGlobeContext();\n return (\n <div\n className={mx(\n 'z-10 absolute is-96 p-2 overflow-hidden border border-green-700 rounded',\n controlPositions[position],\n )}\n >\n <pre className='font-mono text-xs text-green-700'>\n {JSON.stringify({ size, zoom, translation, rotation }, null, 2)}\n </pre>\n </div>\n );\n};\n\n//\n// Panel\n//\n\nconst GlobePanel = ({\n position,\n classNames,\n children,\n}: ThemedClassName<PropsWithChildren & { position?: ControlPosition }>) => {\n return <div className={mx('z-10 absolute overflow-hidden', controlPositions[position], classNames)}>{children}</div>;\n};\n\n//\n// Controls\n//\n\nconst CustomControl = ({ position, children }: PropsWithChildren<{ position: ControlPosition }>) => {\n return <div className={mx('z-10 absolute overflow-hidden', controlPositions[position])}>{children}</div>;\n};\n\ntype GlobeControlProps = { position?: ControlPosition } & Pick<ControlProps, 'onAction'>;\n\nconst GlobeZoom = ({ onAction, position = 'bottomleft', ...props }: GlobeControlProps) => (\n <CustomControl position={position} {...props}>\n <ZoomControls onAction={onAction} />\n </CustomControl>\n);\n\nconst GlobeAction = ({ onAction, position = 'bottomright', ...props }: GlobeControlProps) => (\n <CustomControl position={position} {...props}>\n <ActionControls onAction={onAction} />\n </CustomControl>\n);\n\n//\n// Globe\n//\n\nexport const Globe = {\n Root: GlobeRoot,\n Canvas: GlobeCanvas,\n Zoom: GlobeZoom,\n Action: GlobeAction,\n Debug: GlobeDebug,\n Panel: GlobePanel,\n};\n\nexport type { GlobeRootProps, GlobeCanvasProps };\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type Dispatch, type PropsWithChildren, type SetStateAction, createContext, useContext } from 'react';\n\nimport { raise } from '@dxos/debug';\nimport { useControlledState } from '@dxos/react-ui';\n\nimport { type LatLngLiteral } from '../types';\n\n// TODO(burdon): Factor out common geometry types.\nexport type Size = { width: number; height: number };\nexport type Point = { x: number; y: number };\nexport type Vector = [number, number, number];\n\nexport type GlobeContextType = {\n size: Size;\n center?: LatLngLiteral;\n zoom: number;\n translation: Point;\n rotation: Vector;\n setCenter: Dispatch<SetStateAction<LatLngLiteral>>;\n setZoom: Dispatch<SetStateAction<number>>;\n setTranslation: Dispatch<SetStateAction<Point>>;\n setRotation: Dispatch<SetStateAction<Vector>>;\n};\n\nconst defaults = {\n center: { lat: 51, lng: 0 } as LatLngLiteral,\n zoom: 4,\n} as const;\n\n// TODO(burdon): Replace with radix.\nconst GlobeContext = createContext<GlobeContextType>(undefined);\n\nexport type GlobeContextProviderProps = PropsWithChildren<\n Partial<Pick<GlobeContextType, 'size' | 'center' | 'zoom' | 'translation' | 'rotation'>>\n>;\n\nexport const GlobeContextProvider = ({\n children,\n size,\n center: centerProp = defaults.center,\n zoom: zoomProp = defaults.zoom,\n translation: translationProp,\n rotation: rotationProp,\n}: GlobeContextProviderProps) => {\n const [center, setCenter] = useControlledState(centerProp);\n const [zoom, setZoom] = useControlledState(zoomProp);\n const [translation, setTranslation] = useControlledState<Point>(translationProp);\n const [rotation, setRotation] = useControlledState<Vector>(rotationProp);\n\n return (\n <GlobeContext.Provider\n value={{ size, center, zoom, translation, rotation, setCenter, setZoom, setTranslation, setRotation }}\n >\n {children}\n </GlobeContext.Provider>\n );\n};\n\nexport const useGlobeContext = () => {\n return useContext(GlobeContext) ?? raise(new Error('Missing GlobeContext'));\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { select } from 'd3';\nimport { useEffect } from 'react';\n\nimport { type GlobeController } from '../components';\nimport { geoInertiaDrag } from '../util';\n\nexport type GlobeDragEvent = {\n type: 'start' | 'move' | 'end';\n controller: GlobeController;\n};\n\nexport type DragOptions = {\n disabled?: boolean;\n duration?: number;\n xAxis?: boolean; // TODO(burdon): Generalize.\n onUpdate?: (event: GlobeDragEvent) => void;\n};\n\n/**\n * Allows user to drag globe.\n */\nexport const useDrag = (controller?: GlobeController | null, options: DragOptions = {}) => {\n useEffect(() => {\n const canvas = controller?.canvas;\n if (!canvas || options.disabled) {\n return;\n }\n\n geoInertiaDrag(\n select(canvas),\n () => {\n controller.setRotation(controller.projection.rotate());\n options.onUpdate?.({ type: 'move', controller });\n },\n controller.projection,\n {\n xAxis: options.xAxis,\n time: 3_000,\n start: () => options.onUpdate?.({ type: 'start', controller }),\n finish: () => options.onUpdate?.({ type: 'end', controller }),\n },\n );\n\n // TODO(burdon): Cancel drag timer.\n return () => {\n cancelDrag(select(canvas));\n };\n }, [controller, JSON.stringify(options)]);\n};\n\nconst cancelDrag = (node) => node.on('.drag', null);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nconst debug = false;\n\nexport const timer = <T = void>(cb: () => T): T => {\n const start = Date.now();\n const data = cb();\n const t = Date.now() - start / 1_000;\n if (debug) {\n // eslint-disable-next-line no-console\n console.log({ t, data });\n }\n\n return data;\n};\n", "//\n// Copyright 2017 Philippe Rivière\n// Copyright 2024 DXOS.org\n// https://github.com/Fil/d3-inertia\n//\n\nimport { drag, select, timer } from 'd3';\nimport versor from 'versor';\n\nexport const restrictAxis =\n (axis: boolean[]) =>\n (original: number[], current: number[]): number[] =>\n current.map((d, i) => (axis[i] ? d : original[i]));\n\n/**\n * Applies a drag handler to the specified target element.\n */\n// TODO(burdon): Define type.\nexport const geoInertiaDrag = (target, render, projection, options) => {\n if (!options) {\n options = {};\n }\n\n // Target can be an element, a selector, a function, or a selection\n // but in case of a selection we make sure to reselect it with d3-selection.\n if (target.node) {\n target = target.node();\n }\n target = select(target);\n\n // Complete params: (projection, render, startDrag, dragging, endDrag).\n const inertia = geoInertiaDragHelper({\n projection,\n render: (rotation) => {\n projection.rotate(rotation);\n render && render();\n },\n axis: restrictAxis(options.xAxis ? [true, false, false] : [true, true, true]),\n start: options.start,\n move: options.move,\n end: options.end,\n stop: options.stop,\n finish: options.finish,\n time: options.time,\n hold: options.hold,\n });\n\n target.call(drag().on('start', inertia.start).on('drag', inertia.move).on('end', inertia.end));\n return inertia;\n};\n\n/**\n * A versor is a compact way to describe a rotation in 3D space.\n * It consists of four components [𝑤,x,y,z], where:\n * 𝑤 is a scalar representing the angle of rotation.\n * x, y, z are the vector components, representing the axis of rotation.\n */\nconst geoInertiaDragHelper = (opt) => {\n const projection = opt.projection;\n\n let v0; // Mouse position in Cartesian coordinates at start of drag gesture.\n let r0; // Projection rotation as Euler angles at start.\n let q0; // Projection rotation as versor at start.\n let v10; // Mouse position in Cartesian coordinates just before end of drag gesture.\n let v11; // Mouse position in Cartesian coordinates at end.\n let q10; // Projection rotation as versor at end.\n\n const inertia = inertiaHelper({\n axis: opt.axis,\n\n start: () => {\n v0 = versor.cartesian(projection.invert(inertia.position));\n r0 = projection.rotate();\n q0 = versor(r0);\n opt.start && opt.start();\n },\n\n move: () => {\n const inv = projection.rotate(r0).invert(inertia.position);\n if (isNaN(inv[0])) {\n return;\n }\n const v1 = versor.cartesian(inv);\n const q1 = versor.multiply(q0, versor.delta(v0, v1));\n const r1 = versor.rotation(q1);\n const r2 = opt.axis(r0, r1);\n opt.render(r2);\n opt.move && opt.move();\n },\n\n end: () => {\n // Velocity.\n v10 = versor.cartesian(projection.invert(inertia.position.map((d, i) => d - inertia.velocity[i] / 1_000)));\n q10 = versor(projection.rotate());\n v11 = versor.cartesian(projection.invert(inertia.position));\n opt.end && opt.end();\n },\n\n stop: opt.stop,\n\n finish: opt.finish,\n\n render: (t) => {\n const r1 = versor.rotation(versor.multiply(q10, versor.delta(v10, v11, t * 1_000)));\n const r2 = opt.axis(r0, r1);\n opt.render && opt.render(r2);\n },\n\n time: opt.time,\n });\n\n return inertia;\n};\n\nfunction inertiaHelper(opt) {\n const A = opt.time || 5_000; // Reference time in ms.\n const limit = 1.0001;\n const B = -Math.log(1 - 1 / limit);\n const inertia = {\n position: [0, 0],\n velocity: [0, 0], // Velocity in pixels/s.\n timer: timer(() => {}),\n time: 0,\n t: 0,\n\n start: function (ev) {\n const position = [ev.x, ev.y];\n inertia.position = position;\n inertia.velocity = [0, 0];\n inertia.timer.stop();\n this.classList.remove('inertia');\n this.classList.add('dragging');\n opt.start && opt.start.call(this, position);\n },\n\n move: function (ev) {\n const position = [ev.x, ev.y];\n const time = performance.now();\n const deltaTime = time - inertia.time;\n const decay = 1 - Math.exp(-deltaTime / 1_000);\n inertia.velocity = inertia.velocity.map((d, i) => {\n const deltaPos = position[i] - inertia.position[i];\n const deltaTime = time - inertia.time;\n return (1_000 * (1 - decay) * deltaPos) / deltaTime + d * decay;\n });\n\n // Clamp velocity axis.\n inertia.velocity = opt.axis([0, 0], inertia.velocity);\n\n inertia.time = time;\n inertia.position = position;\n opt.move && opt.move.call(this, position);\n },\n\n end: function (ev) {\n this.classList.remove('dragging', 'inertia');\n\n const v = inertia.velocity;\n if (v[0] * v[0] + v[1] * v[1] < 100) {\n inertia.timer.stop();\n return opt.stop && opt.stop();\n }\n\n const time = performance.now();\n const deltaTime = time - inertia.time;\n\n if (opt.hold === undefined) {\n opt.hold = 100;\n } // Default flick->drag threshold time (0 disables inertia).\n\n if (deltaTime >= opt.hold) {\n inertia.timer.stop();\n return opt.stop && opt.stop();\n }\n\n this.classList.add('inertia');\n opt.end && opt.end();\n\n const self = this;\n inertia.timer.restart((e) => {\n inertia.t = limit * (1 - Math.exp((-B * e) / A));\n opt.render && opt.render(inertia.t);\n if (inertia.t > 1) {\n inertia.timer.stop();\n self.classList.remove('inertia');\n inertia.velocity = [0, 0];\n inertia.t = 1;\n opt.finish && opt.finish();\n }\n });\n },\n };\n\n inertia.timer.stop();\n return inertia;\n}\n", "//\n// Copyright 2020 DXOS.org\n//\n\nimport { type GeoGeometryObjects, geoCircle as d3GeoCircle } from 'd3';\nimport { type Point, type Polygon, type Position } from 'geojson';\nimport { type LatLngLiteral } from 'leaflet';\n\nimport type { Vector } from '../hooks';\n\nexport const positionToRotation = ([lng, lat]: [number, number], tilt = 0): Vector => [-lng, tilt - lat, 0];\n\nexport const geoToPosition = ({ lat, lng }: LatLngLiteral): [number, number] => [lng, lat];\n\nexport const geoPoint = (point: LatLngLiteral): Point => ({ type: 'Point', coordinates: geoToPosition(point) });\n\n// https://github.com/d3/d3-geo#geoCircle\nexport const geoCircle = ({ lat, lng }: LatLngLiteral, radius: number): Polygon =>\n d3GeoCircle().radius(radius).center([lng, lat])();\n\nexport const geoLine = (p1: LatLngLiteral, p2: LatLngLiteral): GeoGeometryObjects => ({\n type: 'LineString',\n coordinates: [\n [p1.lng, p1.lat],\n [p2.lng, p2.lat],\n ],\n});\n\nexport const closestPoint = (points: Position[], target: Position): Position | null => {\n if (points.length === 0) {\n return target;\n }\n\n let closestPoint = points[0];\n let minDistance = getDistance(points[0], target);\n\n for (const point of points) {\n const distance = getDistance(point, target);\n if (distance < minDistance) {\n minDistance = distance;\n closestPoint = point;\n }\n }\n\n return closestPoint;\n};\n\nexport const getDistance = (point1: Position, point2: Position): number => {\n const dx = point1[0] - point2[0];\n const dy = point1[1] - point2[1];\n return Math.sqrt(dx * dx + dy * dy);\n};\n", "//\n// Copyright 2020 DXOS.org\n//\n\nimport { type GeoPath, type GeoPermissibleObjects, geoGraticule } from 'd3';\nimport { feature, mesh } from 'topojson-client';\nimport { type Topology } from 'topojson-specification';\n\nimport { type LatLngLiteral } from '../types';\n\nimport { geoLine, geoPoint } from './path';\n\nexport type Styles = Record<string, any>;\n\nexport type Style =\n | 'background'\n | 'water'\n | 'graticule'\n | 'land'\n | 'border'\n | 'dots'\n | 'point'\n | 'line'\n | 'cursor'\n | 'arc';\n\nexport type StyleSet = Partial<Record<Style, Styles>>;\n\nexport type Features = {\n points?: LatLngLiteral[];\n lines?: { source: LatLngLiteral; target: LatLngLiteral }[];\n};\n\nexport type Layer = {\n styles: Styles;\n path: GeoPermissibleObjects;\n};\n\n/**\n * Create rendering layers.\n */\nexport const createLayers = (topology: Topology, features: Features, styles: StyleSet): Layer[] => {\n const layers: Layer[] = [];\n\n if (styles.water) {\n layers.push({\n styles: styles.water,\n path: {\n type: 'Sphere',\n },\n });\n }\n\n if (styles.graticule) {\n layers.push({\n styles: styles.graticule,\n path: geoGraticule().step([6, 6])(),\n });\n }\n\n //\n // Topology.\n //\n\n if (topology) {\n if (topology.objects.land && styles.land) {\n layers.push({\n styles: styles.land,\n path: feature(topology, topology.objects.land),\n });\n }\n\n if (topology.objects.countries && styles.border) {\n layers.push({\n styles: styles.border,\n path: mesh(topology, topology.objects.countries, (a: any, b: any) => a !== b),\n });\n }\n\n if (topology.objects.dots && styles.dots) {\n layers.push({\n styles: styles.dots,\n path: topology.objects.dots as any, // TODO(burdon): Type.\n });\n }\n }\n\n //\n // Features.\n //\n\n if (features) {\n const { points, lines } = features;\n\n if (points && styles.point) {\n layers.push({\n styles: styles.point,\n path: {\n type: 'GeometryCollection',\n geometries: points.map((point) => geoPoint(point)),\n },\n });\n }\n\n if (lines && styles.line) {\n layers.push({\n styles: styles.line,\n path: {\n type: 'GeometryCollection',\n geometries: lines.map(({ source, target }) => geoLine(source, target)),\n },\n });\n }\n }\n\n return layers;\n};\n\n/**\n * Render layers created above.\n */\nexport const renderLayers = (generator: GeoPath, layers: Layer[] = [], scale: number, styles: StyleSet) => {\n const context: CanvasRenderingContext2D = generator.context();\n const {\n canvas: { width, height },\n } = context;\n context.reset();\n\n // Clear background.\n if (styles.background) {\n context.fillStyle = styles.background.fillStyle;\n context.fillRect(0, 0, width, height);\n } else {\n context.clearRect(0, 0, width, height);\n }\n\n // Render features.\n // https://github.com/d3/d3-geo#_path\n layers.forEach(({ path, styles }) => {\n context.save();\n let fill = false;\n let stroke = false;\n if (styles) {\n Object.entries(styles).forEach(([key, value]) => {\n if (key === 'pointRadius') {\n generator.pointRadius(value * scale);\n } else {\n context[key] = value;\n fill ||= key === 'fillStyle';\n stroke ||= key === 'strokeStyle';\n }\n });\n }\n\n context.beginPath();\n\n generator(path);\n fill && context.fill();\n stroke && context.stroke();\n context.restore();\n });\n\n return context;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useCallback } from 'react';\n\nimport { type ControlProps, type GlobeController } from '../components';\n\nconst ZOOM_FACTOR = 0.1;\n\nexport const useGlobeZoomHandler = (controller: GlobeController | null | undefined): ControlProps['onAction'] => {\n return useCallback<ControlProps['onAction']>(\n (event) => {\n if (!controller) {\n return;\n }\n\n switch (event) {\n case 'zoom-in': {\n controller.setZoom((zoom) => {\n return zoom * (1 + ZOOM_FACTOR);\n });\n break;\n }\n case 'zoom-out': {\n controller.setZoom((zoom) => {\n return zoom * (1 - ZOOM_FACTOR);\n });\n break;\n }\n }\n },\n [controller],\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useCallback } from 'react';\n\nimport { type ControlProps, type MapController } from '../components';\n\nexport const useMapZoomHandler = (controller: MapController | null | undefined): ControlProps['onAction'] => {\n return useCallback<ControlProps['onAction']>(\n (event) => {\n if (!controller) {\n return;\n }\n\n switch (event) {\n case 'zoom-in': {\n controller.setZoom((scale) => scale + 1);\n break;\n }\n case 'zoom-out': {\n controller.setZoom((scale) => scale - 1);\n break;\n }\n }\n },\n [controller],\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { timer as d3Timer } from 'd3';\nimport { type Timer } from 'd3';\nimport { useEffect, useState } from 'react';\n\nimport { type GlobeController } from '../components';\n\nimport { type Vector } from './context';\n\nexport type SpinnerOptions = {\n disabled?: boolean;\n delta?: Vector;\n};\n\n/**\n * Rotates globe.\n */\nexport const useSpinner = (controller?: GlobeController | null, options: SpinnerOptions = {}) => {\n const [running, setRunning] = useState(false);\n useEffect(() => {\n let timer: Timer | undefined;\n\n const start = () => {\n const delta: Vector = options.delta ?? [0.001, 0, 0];\n\n let t = 0;\n let lastRotation = controller.projection.rotate();\n timer = d3Timer((elapsed) => {\n const dt = elapsed - t;\n t = elapsed;\n\n const rotation: Vector = [\n lastRotation[0] + delta[0] * dt,\n lastRotation[1] + delta[1] * dt,\n lastRotation[2] + delta[2] * dt,\n ];\n\n lastRotation = rotation;\n controller.setRotation(rotation);\n });\n };\n\n const stop = () => {\n if (timer) {\n timer.stop();\n timer = undefined;\n }\n };\n\n if (controller && running) {\n start();\n } else {\n stop();\n }\n\n return () => stop();\n }, [controller, running]);\n\n return [\n () => {\n if (!options.disabled) {\n setRunning(true);\n }\n },\n () => setRunning(false),\n ];\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { selection as d3Selection, geoDistance, geoInterpolate, geoPath } from 'd3';\nimport { type Dispatch, type SetStateAction, useEffect, useMemo, useState } from 'react';\nimport versor from 'versor';\n\nimport type { GlobeController } from '../components';\nimport { type LatLngLiteral } from '../types';\nimport { type StyleSet, geoToPosition, positionToRotation } from '../util';\n\nconst TRANSITION_NAME = 'globe-tour';\n\nconst defaultDuration = 1_500;\n\nexport type TourOptions = {\n running?: boolean;\n disabled?: boolean;\n duration?: number;\n loop?: boolean;\n tilt?: number;\n autoRotate?: boolean;\n styles?: StyleSet;\n};\n\n/**\n * Iterates between points.\n * Inspired by: https://observablehq.com/@mbostock/top-100-cities\n */\nexport const useTour = (\n controller?: GlobeController | null,\n points?: LatLngLiteral[],\n options: TourOptions = {},\n): [boolean, Dispatch<SetStateAction<boolean>>] => {\n const selection = useMemo(() => d3Selection(), []);\n // TODO(burdon): Redo controlled state.\n const [running, setRunning] = useState(options.running ?? false);\n useEffect(() => {\n if (!running) {\n selection.interrupt(TRANSITION_NAME);\n return;\n }\n\n let t: ReturnType<typeof setTimeout>;\n if (controller && running) {\n t = setTimeout(async () => {\n const { canvas, projection, setRotation } = controller;\n const context = canvas.getContext('2d', { alpha: false });\n const path = geoPath(projection, context).pointRadius(2);\n\n const tilt = options.tilt ?? 0;\n let last: LatLngLiteral;\n try {\n const p = [...points];\n if (options.loop) {\n p.push(p[0]);\n }\n\n for (const next of p) {\n if (!running) {\n break;\n }\n\n // Points.\n const p1 = last ? geoToPosition(last) : undefined;\n const p2 = geoToPosition(next);\n const ip = geoInterpolate(p1 || p2, p2);\n const distance = geoDistance(p1 || p2, p2);\n\n // Rotation.\n const r1 = p1 ? positionToRotation(p1, tilt) : controller.projection.rotate();\n const r2 = positionToRotation(p2, tilt);\n const iv = versor.interpolate(r1, r2);\n\n const transition = selection\n .transition(TRANSITION_NAME)\n .duration(Math.max(options.duration ?? defaultDuration, distance * 2_000))\n .tween('render', () => (t) => {\n const t1 = Math.max(0, Math.min(1, t * 2 - 1));\n const t2 = Math.min(1, t * 2);\n\n context.save();\n {\n context.beginPath();\n context.strokeStyle = options?.styles?.arc?.strokeStyle ?? 'yellow';\n context.lineWidth = (options?.styles?.arc?.lineWidth ?? 1.5) * (controller?.zoom ?? 1);\n context.setLineDash(options?.styles?.arc?.lineDash ?? []);\n path({ type: 'LineString', coordinates: [ip(t1), ip(t2)] });\n context.stroke();\n\n context.beginPath();\n context.fillStyle = options?.styles?.cursor?.fillStyle ?? 'orange';\n path.pointRadius((options?.styles?.cursor?.pointRadius ?? 2) * (controller?.zoom ?? 1));\n path({ type: 'Point', coordinates: ip(t2) });\n context.fill();\n }\n context.restore();\n\n // TODO(burdon): This has to come after rendering above. Add to features to correct order?\n projection.rotate(iv(t));\n setRotation(projection.rotate());\n });\n\n // Throws if interrupted.\n await transition.end();\n last = next;\n }\n } catch {\n // Ignore.\n } finally {\n setRunning(false);\n }\n });\n\n return () => {\n clearTimeout(t);\n selection.interrupt(TRANSITION_NAME);\n };\n }\n }, [controller, running, JSON.stringify(options)]);\n\n return [running, setRunning];\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type ControlPosition } from 'leaflet';\nimport React from 'react';\n\nimport { IconButton, type ThemedClassName, Toolbar, useTranslation } from '@dxos/react-ui';\n\nimport { translationKey } from '../../translations';\n\nexport type ControlAction = 'toggle' | 'start' | 'zoom-in' | 'zoom-out';\n\nexport type ControlProps = ThemedClassName<{\n onAction?: (action: ControlAction) => void;\n}>;\n\nexport const controlPositions: Record<ControlPosition, string> = {\n topleft: 'top-2 left-2',\n topright: 'top-2 right-2',\n bottomleft: 'bottom-2 left-2',\n bottomright: 'bottom-2 right-2',\n};\n\nexport const ZoomControls = ({ classNames, onAction }: ControlProps) => {\n const { t } = useTranslation(translationKey);\n\n return (\n <Toolbar.Root classNames={['gap-2', classNames]}>\n <IconButton\n icon='ph--plus--regular'\n iconOnly\n label={t('zoom in icon button')}\n onClick={() => onAction?.('zoom-in')}\n />\n <IconButton\n icon='ph--minus--regular'\n iconOnly\n label={t('zoom out icon button')}\n onClick={() => onAction?.('zoom-out')}\n />\n </Toolbar.Root>\n );\n};\n\nexport const ActionControls = ({ classNames, onAction }: ControlProps) => {\n const { t } = useTranslation(translationKey);\n\n return (\n <Toolbar.Root classNames={['gap-2', classNames]}>\n <IconButton\n icon='ph--path--regular'\n iconOnly\n label={t('start icon button')}\n onClick={() => onAction?.('start')}\n />\n <IconButton\n icon='ph--globe-hemisphere-west--regular'\n iconOnly\n label={t('toggle icon button')}\n onClick={() => onAction?.('toggle')}\n />\n </Toolbar.Root>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Resource } from '@dxos/react-ui';\n\nexport const translationKey = '@dxos/react-ui-geo';\n\nexport const translations = [\n {\n 'en-US': {\n [translationKey]: {\n 'zoom in icon button': 'Zoom in',\n 'zoom out icon button': 'Zoom out',\n 'start icon button': 'Start',\n 'toggle icon button': 'Toggle',\n },\n },\n },\n] as const satisfies Resource[];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport 'leaflet/dist/leaflet.css';\n\nimport { createContext } from '@radix-ui/react-context';\nimport L, { Control, type ControlPosition, DomEvent, DomUtil, type LatLngLiteral, latLngBounds } from 'leaflet';\nimport React, { type PropsWithChildren, forwardRef, useEffect, useImperativeHandle, useRef, useState } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { MapContainer, type MapContainerProps, Marker, Popup, TileLayer, useMap, useMapEvents } from 'react-leaflet';\n\nimport { ThemeProvider, type ThemedClassName, Tooltip } from '@dxos/react-ui';\nimport { defaultTx, mx } from '@dxos/ui-theme';\n\nimport { type GeoMarker } from '../../types';\nimport { ActionControls, type ControlProps, ZoomControls, controlPositions } from '../Toolbar';\n\n// TODO(burdon): Explore plugins: https://www.npmjs.com/search?q=keywords%3Areact-leaflet-v4\n// TODO(burdon): react-leaflet v5 is not compatible with react 18.\n// TODO(burdon): Guess initial location.\n\nconst defaults = {\n center: { lat: 51, lng: 0 } as L.LatLngLiteral,\n zoom: 4,\n} as const;\n\n//\n// Controller\n//\n\ntype MapController = {\n setCenter: (center: LatLngLiteral, zoom?: number) => void;\n setZoom: (cb: (zoom: number) => number) => void;\n};\n\n//\n// Context\n//\n\ntype MapContextValue = {\n attention?: boolean;\n onChange?: (ev: { center: LatLngLiteral; zoom: number }) => void;\n};\n\nconst [MapContextProvier, useMapContext] = createContext<MapContextValue>('Map');\n\n//\n// Root\n//\n\ntype MapRootProps = ThemedClassName<MapContainerProps & Pick<MapContextValue, 'onChange'>>;\n\n/**\n * https://react-leaflet.js.org/docs/api-map\n */\nconst MapRoot = forwardRef<MapController, MapRootProps>(\n (\n { classNames, scrollWheelZoom = true, doubleClickZoom = true, touchZoom = true, center, zoom, onChange, ...props },\n forwardedRef,\n ) => {\n const [attention, setAttention] = useState(false);\n const mapRef = useRef<L.Map>(null);\n const map = mapRef.current;\n\n useImperativeHandle(\n forwardedRef,\n () => ({\n setCenter: (center: LatLngLiteral, zoom?: number) => {\n mapRef.current?.setView(center, zoom);\n },\n setZoom: (cb: (zoom: number) => number) => {\n mapRef.current?.setZoom(cb(mapRef.current?.getZoom() ?? 0));\n },\n }),\n [],\n );\n\n // Enable/disable scroll wheel zoom.\n // TODO(burdon): Use attention:\n // const {hasAttention} = useAttention(props.id);\n useEffect(() => {\n if (!map) {\n return;\n }\n\n if (attention) {\n map.scrollWheelZoom.enable();\n } else {\n map.scrollWheelZoom.disable();\n }\n }, [map, attention]);\n\n return (\n <MapContextProvier attention={attention} onChange={onChange}>\n <MapContainer\n {...props}\n ref={mapRef}\n className={mx('group relative grid bs-full is-full !bg-baseSurface dx-focus-ring-inset', classNames)}\n attributionControl={false}\n zoomControl={false}\n scrollWheelZoom={scrollWheelZoom}\n doubleClickZoom={doubleClickZoom}\n touchZoom={touchZoom}\n center={center ?? defaults.center}\n zoom={zoom ?? defaults.zoom}\n // whenReady={() => {}}\n />\n </MapContextProvier>\n );\n },\n);\n\nMapRoot.displayName = 'Map.Root';\n\n//\n// Tiles\n// https://react-leaflet.js.org/docs/api-components/#tilelayer\n//\n\ntype MapTilesProps = {};\n\nconst MapTiles = (_props: MapTilesProps) => {\n const ref = useRef<L.TileLayer>(null);\n const { onChange } = useMapContext(MapTiles.displayName);\n\n useMapEvents({\n zoomstart: (ev) => {\n onChange?.({\n center: ev.target.getCenter(),\n zoom: ev.target.getZoom(),\n });\n },\n });\n\n // NOTE: Need to dynamically update data attribute since TileLayer doesn't update, but\n // Tailwind requires setting the property for static analysis.\n const { attention } = useMapContext(MapTiles.displayName);\n useEffect(() => {\n if (ref.current) {\n ref.current.getContainer().dataset.attention = attention ? '1' : '0';\n }\n }, [attention]);\n\n // TODO(burdon): Option to add class 'invert'.\n return (\n <>\n <TileLayer\n ref={ref}\n data-attention={attention}\n detectRetina={true}\n className='dark:grayscale dark:invert data-[attention=\"0\"]:!opacity-80'\n url='https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'\n keepBuffer={4}\n // opacity={attention ? 1 : 0.7}\n />\n\n {/* Temperature map. */}\n {/* <WMSTileLayer\n url='https://gibs.earthdata.nasa.gov/wms/epsg4326/best/wms.cgi'\n layers='MODIS_Terra_Land_Surface_Temp_Day'\n format='image/png'\n transparent={true}\n version='1.3.0'\n attribution='NASA GIBS'\n /> */}\n\n {/* US Weather. */}\n {/* <WMSTileLayer\n url='https://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r.cgi'\n layers='nexrad-n0r' // layers='nexrad-n0r'\n format='image/png'\n transparent={true}\n /> */}\n </>\n );\n};\n\nMapTiles.displayName = 'Map.Tiles';\n\n//\n// Markers\n//\n\ntype MapMarkersProps = {\n markers?: GeoMarker[];\n selected?: string[];\n};\n\nconst MapMarkers = ({ selected, markers }: MapMarkersProps) => {\n const map = useMap();\n\n // Set the viewport around the markers, or show the whole world map if `markers` is empty.\n useEffect(() => {\n if (markers.length > 0) {\n const bounds = latLngBounds(markers.map((marker) => marker.location));\n map.fitBounds(bounds);\n } else {\n map.setView(defaults.center, defaults.zoom);\n }\n }, [markers]);\n\n return (\n <>\n {markers?.map(({ id, title, location: { lat, lng } }) => {\n return (\n <Marker\n key={id}\n position={{ lat, lng }}\n icon={\n // TODO(burdon): Create custom icon from bundled assets.\n // TODO(burdon): Selection state.\n new L.Icon({\n iconUrl: 'https://dxos.network/marker-icon.png',\n iconRetinaUrl: 'https://dxos.network/marker-icon-2x.png',\n shadowUrl: 'https://dxos.network/marker-shadow.png',\n iconSize: [25, 41],\n iconAnchor: [12, 41],\n popupAnchor: [1, -34],\n shadowSize: [41, 41],\n })\n }\n >\n {title && <Popup>{title}</Popup>}\n </Marker>\n );\n })}\n </>\n );\n};\n\nMapMarkers.displayName = 'Map.Markers';\n\n//\n// Controls\n// Integrates with Leaflet custom controls.\n//\n\nconst CustomControl = ({\n position,\n children,\n}: PropsWithChildren<{\n position: ControlPosition;\n}>) => {\n const map = useMap();\n\n useEffect(() => {\n const control = new Control({ position });\n control.onAdd = () => {\n const container = DomUtil.create('div', mx('!m-0', controlPositions[position]));\n DomEvent.disableClickPropagation(container);\n DomEvent.disableScrollPropagation(container);\n\n const root = createRoot(container);\n root.render(\n <ThemeProvider tx={defaultTx}>\n <Tooltip.Provider>{children}</Tooltip.Provider>\n </ThemeProvider>,\n );\n\n return container;\n };\n\n control.addTo(map);\n return () => {\n control.remove();\n };\n }, [map, position, children]);\n\n return null;\n};\n\ntype MapControlProps = { position?: ControlPosition } & Pick<ControlProps, 'onAction'>;\n\nconst MapZoom = ({ onAction, position = 'bottomleft', ...props }: MapControlProps) => (\n <CustomControl position={position} {...props}>\n <ZoomControls onAction={onAction} />\n </CustomControl>\n);\n\nconst MapAction = ({ onAction, position = 'bottomright', ...props }: MapControlProps) => (\n <CustomControl position={position} {...props}>\n <ActionControls onAction={onAction} />\n </CustomControl>\n);\n\n//\n// Map\n//\n\nexport const Map = {\n Root: MapRoot,\n Tiles: MapTiles,\n Markers: MapMarkers,\n Zoom: MapZoom,\n Action: MapAction,\n};\n\nexport { type MapController, type MapRootProps, type MapTilesProps, type MapMarkersProps, type MapControlProps };\n"],
5
- "mappings": "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",
6
- "names": ["easeLinear", "easeSinOut", "geoMercator", "geoOrthographic", "geoPath", "geoTransverseMercator", "interpolateNumber", "transition", "React", "forwardRef", "useEffect", "useImperativeHandle", "useMemo", "useRef", "useState", "useResizeDetector", "useDynamicRef", "useThemeContext", "mx", "React", "createContext", "useContext", "raise", "useControlledState", "defaults", "center", "lat", "lng", "zoom", "GlobeContext", "createContext", "undefined", "GlobeContextProvider", "children", "size", "centerProp", "zoomProp", "translation", "translationProp", "rotation", "rotationProp", "setCenter", "useControlledState", "setZoom", "setTranslation", "setRotation", "Provider", "value", "useGlobeContext", "useContext", "raise", "Error", "select", "useEffect", "debug", "timer", "cb", "start", "Date", "now", "data", "t", "console", "log", "drag", "select", "timer", "versor", "restrictAxis", "axis", "original", "current", "map", "d", "i", "geoInertiaDrag", "target", "render", "projection", "options", "node", "select", "inertia", "geoInertiaDragHelper", "rotation", "rotate", "xAxis", "start", "move", "end", "stop", "finish", "time", "hold", "call", "drag", "on", "opt", "v0", "r0", "q0", "v10", "v11", "q10", "inertiaHelper", "versor", "cartesian", "invert", "position", "inv", "isNaN", "v1", "q1", "multiply", "delta", "r1", "r2", "velocity", "t", "A", "limit", "B", "Math", "log", "timer", "ev", "x", "y", "classList", "remove", "add", "performance", "now", "deltaTime", "decay", "exp", "deltaPos", "v", "undefined", "self", "restart", "e", "geoCircle", "d3GeoCircle", "positionToRotation", "lng", "lat", "tilt", "geoToPosition", "geoPoint", "point", "type", "coordinates", "geoCircle", "radius", "d3GeoCircle", "center", "geoLine", "p1", "p2", "closestPoint", "points", "target", "length", "minDistance", "getDistance", "distance", "point1", "point2", "dx", "dy", "Math", "sqrt", "geoGraticule", "feature", "mesh", "createLayers", "topology", "features", "styles", "layers", "water", "push", "path", "type", "graticule", "geoGraticule", "step", "objects", "land", "feature", "countries", "border", "mesh", "a", "b", "dots", "points", "lines", "point", "geometries", "map", "geoPoint", "line", "source", "target", "geoLine", "renderLayers", "generator", "scale", "context", "canvas", "width", "height", "reset", "background", "fillStyle", "fillRect", "clearRect", "forEach", "save", "fill", "stroke", "Object", "entries", "key", "value", "pointRadius", "beginPath", "restore", "useDrag", "controller", "options", "useEffect", "canvas", "disabled", "geoInertiaDrag", "select", "setRotation", "projection", "rotate", "onUpdate", "type", "xAxis", "time", "start", "finish", "cancelDrag", "JSON", "stringify", "node", "on", "useCallback", "ZOOM_FACTOR", "useGlobeZoomHandler", "controller", "useCallback", "event", "setZoom", "zoom", "useCallback", "useMapZoomHandler", "controller", "useCallback", "event", "setZoom", "scale", "timer", "d3Timer", "useEffect", "useState", "useSpinner", "controller", "options", "running", "setRunning", "useState", "useEffect", "timer", "start", "delta", "t", "lastRotation", "projection", "rotate", "d3Timer", "elapsed", "dt", "rotation", "setRotation", "stop", "undefined", "disabled", "selection", "d3Selection", "geoDistance", "geoInterpolate", "geoPath", "useEffect", "useMemo", "useState", "versor", "TRANSITION_NAME", "defaultDuration", "useTour", "controller", "points", "options", "selection", "useMemo", "d3Selection", "running", "setRunning", "useState", "useEffect", "interrupt", "t", "setTimeout", "canvas", "projection", "setRotation", "context", "getContext", "alpha", "path", "geoPath", "pointRadius", "tilt", "last", "p", "loop", "push", "next", "p1", "geoToPosition", "undefined", "p2", "ip", "geoInterpolate", "distance", "geoDistance", "r1", "positionToRotation", "rotate", "r2", "iv", "versor", "interpolate", "transition", "duration", "Math", "max", "tween", "t1", "min", "t2", "save", "beginPath", "strokeStyle", "styles", "arc", "lineWidth", "zoom", "setLineDash", "lineDash", "type", "coordinates", "stroke", "fillStyle", "cursor", "fill", "restore", "end", "clearTimeout", "JSON", "stringify", "React", "IconButton", "Toolbar", "useTranslation", "translationKey", "translations", "controlPositions", "topleft", "topright", "bottomleft", "bottomright", "ZoomControls", "classNames", "onAction", "t", "useTranslation", "translationKey", "React", "Toolbar", "Root", "IconButton", "icon", "iconOnly", "label", "onClick", "ActionControls", "defaultStyles", "light", "background", "fillStyle", "water", "land", "line", "strokeStyle", "point", "strokeWidth", "pointRadius", "dark", "projectionMap", "orthographic", "geoOrthographic", "mercator", "geoMercator", "geoTransverseMercator", "getProjection", "type", "constructor", "GlobeRoot", "classNames", "children", "props", "ref", "width", "height", "useResizeDetector", "React", "div", "className", "mx", "GlobeContextProvider", "size", "GlobeCanvas", "forwardRef", "projection", "projectionProp", "topology", "features", "styles", "stylesProp", "themeMode", "useThemeContext", "useMemo", "canvas", "setCanvas", "useState", "canvasRef", "layers", "timer", "createLayers", "center", "zoom", "translation", "rotation", "setCenter", "setZoom", "setTranslation", "setRotation", "useGlobeContext", "zoomRef", "useDynamicRef", "useEffect", "positionToRotation", "geoToPosition", "zooming", "useRef", "useImperativeHandle", "current", "s", "is", "interpolateNumber", "transition", "ease", "easeLinear", "easeSinOut", "duration", "tween", "t", "on", "generator", "geoPath", "getContext", "alpha", "scale", "Math", "min", "translate", "x", "y", "rotate", "renderLayers", "GlobeDebug", "position", "controlPositions", "pre", "JSON", "stringify", "GlobePanel", "CustomControl", "GlobeZoom", "onAction", "ZoomControls", "GlobeAction", "ActionControls", "Globe", "Root", "Canvas", "Zoom", "Action", "Debug", "Panel", "createContext", "L", "Control", "DomEvent", "DomUtil", "latLngBounds", "React", "forwardRef", "useEffect", "useImperativeHandle", "useRef", "useState", "createRoot", "MapContainer", "Marker", "Popup", "TileLayer", "useMap", "useMapEvents", "ThemeProvider", "Tooltip", "defaultTx", "mx", "defaults", "center", "lat", "lng", "zoom", "MapContextProvier", "useMapContext", "createContext", "MapRoot", "forwardRef", "classNames", "scrollWheelZoom", "doubleClickZoom", "touchZoom", "onChange", "props", "forwardedRef", "attention", "setAttention", "useState", "mapRef", "useRef", "map", "current", "useImperativeHandle", "setCenter", "setView", "setZoom", "cb", "getZoom", "useEffect", "enable", "disable", "React", "MapContainer", "ref", "className", "mx", "attributionControl", "zoomControl", "displayName", "MapTiles", "_props", "useMapEvents", "zoomstart", "ev", "target", "getCenter", "getContainer", "dataset", "TileLayer", "data-attention", "detectRetina", "url", "keepBuffer", "MapMarkers", "selected", "markers", "useMap", "length", "bounds", "latLngBounds", "marker", "location", "fitBounds", "id", "title", "Marker", "key", "position", "icon", "L", "Icon", "iconUrl", "iconRetinaUrl", "shadowUrl", "iconSize", "iconAnchor", "popupAnchor", "shadowSize", "Popup", "CustomControl", "children", "control", "Control", "onAdd", "container", "DomUtil", "create", "controlPositions", "DomEvent", "disableClickPropagation", "disableScrollPropagation", "root", "createRoot", "render", "ThemeProvider", "tx", "defaultTx", "Tooltip", "Provider", "addTo", "remove", "MapZoom", "onAction", "ZoomControls", "MapAction", "ActionControls", "Map", "Root", "Tiles", "Markers", "Zoom", "Action"]
4
+ "sourcesContent": ["//\n// Copyright 2018 DXOS.org\n//\n\nimport {\n type GeoProjection,\n easeLinear,\n easeSinOut,\n geoMercator,\n geoOrthographic,\n geoPath,\n geoTransverseMercator,\n interpolateNumber,\n transition,\n} from 'd3';\nimport { type ControlPosition } from 'leaflet';\nimport React, {\n type PropsWithChildren,\n forwardRef,\n useEffect,\n useImperativeHandle,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useResizeDetector } from 'react-resize-detector';\nimport { type Topology } from 'topojson-specification';\n\nimport { type ThemeMode, type ThemedClassName, useDynamicRef, useThemeContext } from '@dxos/react-ui';\nimport { mx } from '@dxos/ui-theme';\n\nimport {\n GlobeContextProvider,\n type GlobeContextProviderProps,\n type GlobeContextType,\n useGlobeContext,\n} from '../../hooks';\nimport {\n type Features,\n type StyleSet,\n createLayers,\n geoToPosition,\n positionToRotation,\n renderLayers,\n timer,\n} from '../../util';\nimport { ActionControls, type ControlProps, ZoomControls, controlPositions } from '../Toolbar';\n\n/**\n * https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute\n */\nconst defaultStyles: Record<ThemeMode, StyleSet> = {\n light: {\n background: {\n fillStyle: '#EEE',\n },\n\n water: {\n fillStyle: '#555',\n },\n\n land: {\n fillStyle: '#999',\n },\n\n line: {\n strokeStyle: 'darkred',\n },\n\n point: {\n fillStyle: '#111111',\n strokeStyle: '#111111',\n strokeWidth: 1,\n pointRadius: 0.5,\n },\n },\n dark: {\n background: {\n fillStyle: '#111111',\n },\n\n water: {\n fillStyle: '#123E6A',\n },\n\n land: {\n fillStyle: '#032153',\n },\n\n line: {\n strokeStyle: '#111111',\n },\n\n point: {\n fillStyle: '#111111',\n strokeStyle: '#111111',\n strokeWidth: 1,\n pointRadius: 0.5,\n },\n },\n};\n\nexport type GlobeController = {\n canvas: HTMLCanvasElement;\n projection: GeoProjection;\n} & Pick<GlobeContextType, 'zoom' | 'translation' | 'rotation' | 'setZoom' | 'setTranslation' | 'setRotation'>;\n\nexport type ProjectionType = 'orthographic' | 'mercator' | 'transverse-mercator';\n\nconst projectionMap: Record<ProjectionType, () => GeoProjection> = {\n orthographic: geoOrthographic,\n mercator: geoMercator,\n 'transverse-mercator': geoTransverseMercator,\n};\n\nconst getProjection = (type: GlobeCanvasProps['projection'] = 'orthographic'): GeoProjection => {\n if (typeof type === 'string') {\n const constructor = projectionMap[type] ?? geoOrthographic;\n return constructor();\n }\n\n return type ?? geoOrthographic();\n};\n\n//\n// Root\n//\n\ntype GlobeRootProps = PropsWithChildren<ThemedClassName<GlobeContextProviderProps>>;\n\nconst GlobeRoot = ({ classNames, children, ...props }: GlobeRootProps) => {\n const { ref, width, height } = useResizeDetector<HTMLDivElement>();\n\n return (\n <div ref={ref} className={mx('relative flex grow overflow-hidden', classNames)}>\n <GlobeContextProvider size={{ width, height }} {...props}>\n {children}\n </GlobeContextProvider>\n </div>\n );\n};\n\n//\n// Canvas\n//\n\ntype GlobeCanvasProps = {\n projection?: ProjectionType | GeoProjection;\n topology?: Topology;\n features?: Features;\n styles?: StyleSet;\n};\n\n/**\n * Basic globe renderer.\n * https://github.com/topojson/world-atlas\n */\n// TODO(burdon): Move controller to root.\nconst GlobeCanvas = forwardRef<GlobeController, GlobeCanvasProps>(\n ({ projection: projectionProp, topology, features, styles: stylesProp }, forwardRef) => {\n const { themeMode } = useThemeContext();\n const styles = useMemo(() => stylesProp ?? defaultStyles[themeMode], [stylesProp, themeMode]);\n\n // Canvas.\n const [canvas, setCanvas] = useState<HTMLCanvasElement>(null);\n const canvasRef = (canvas: HTMLCanvasElement) => setCanvas(canvas);\n\n // Projection.\n const projection = useMemo(() => getProjection(projectionProp), [projectionProp]);\n\n // Layers.\n // TODO(burdon): Generate on the fly based on what is visible.\n const layers = useMemo(() => {\n return timer(() => createLayers(topology as Topology, features, styles));\n }, [topology, features, styles]);\n\n // State.\n const { size, center, zoom, translation, rotation, setCenter, setZoom, setTranslation, setRotation } =\n useGlobeContext();\n const zoomRef = useDynamicRef(zoom);\n\n // Update rotation.\n useEffect(() => {\n if (center) {\n setZoom(1);\n setRotation(positionToRotation(geoToPosition(center)));\n }\n }, [center]);\n\n // External controller.\n const zooming = useRef(false);\n useImperativeHandle<GlobeController, GlobeController>(forwardRef, () => {\n return {\n canvas,\n projection,\n center,\n get zoom() {\n return zoomRef.current;\n },\n translation,\n rotation,\n setCenter,\n setZoom: (state) => {\n if (typeof state === 'function') {\n const is = interpolateNumber(zoomRef.current, state(zoomRef.current));\n // Stop easing if already zooming.\n transition()\n .ease(zooming.current ? easeLinear : easeSinOut)\n .duration(200)\n .tween('scale', () => (t) => setZoom(is(t)))\n .on('end', () => {\n zooming.current = false;\n });\n } else {\n setZoom(state);\n }\n },\n setTranslation,\n setRotation,\n };\n }, [canvas]);\n\n // https://d3js.org/d3-geo/path#geoPath\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/getContext\n const generator = useMemo(\n () => canvas && projection && geoPath(projection, canvas.getContext('2d', { alpha: false })),\n [canvas, projection],\n );\n\n // Render on change.\n useEffect(() => {\n if (canvas && projection) {\n timer(() => {\n // https://d3js.org/d3-geo/projection\n projection\n .scale((Math.min(size.width, size.height) / 2) * zoom)\n .translate([size.width / 2 + (translation?.x ?? 0), size.height / 2 + (translation?.y ?? 0)])\n .rotate(rotation ?? [0, 0, 0]);\n\n renderLayers(generator, layers, zoom, styles);\n });\n }\n }, [generator, size, zoom, translation, rotation, layers]);\n\n if (!size.width || !size.height) {\n return null;\n }\n\n return <canvas ref={canvasRef} width={size.width} height={size.height} />;\n },\n);\n\n//\n// Debug\n//\n\nconst GlobeDebug = ({ position = 'topleft' }: { position?: ControlPosition }) => {\n const { size, zoom, translation, rotation } = useGlobeContext();\n return (\n <div\n className={mx(\n 'z-10 absolute w-96 p-2 overflow-hidden border border-green-700 rounded-sm',\n controlPositions[position],\n )}\n >\n <pre className='font-mono text-xs text-green-700'>\n {JSON.stringify({ size, zoom, translation, rotation }, null, 2)}\n </pre>\n </div>\n );\n};\n\n//\n// Panel\n//\n\nconst GlobePanel = ({\n position,\n classNames,\n children,\n}: ThemedClassName<PropsWithChildren & { position?: ControlPosition }>) => {\n return <div className={mx('z-10 absolute overflow-hidden', controlPositions[position], classNames)}>{children}</div>;\n};\n\n//\n// Controls\n//\n\nconst CustomControl = ({ position, children }: PropsWithChildren<{ position: ControlPosition }>) => {\n return <div className={mx('z-10 absolute overflow-hidden', controlPositions[position])}>{children}</div>;\n};\n\ntype GlobeControlProps = { position?: ControlPosition } & Pick<ControlProps, 'onAction'>;\n\nconst GlobeZoom = ({ onAction, position = 'bottomleft', ...props }: GlobeControlProps) => (\n <CustomControl position={position} {...props}>\n <ZoomControls onAction={onAction} />\n </CustomControl>\n);\n\nconst GlobeAction = ({ onAction, position = 'bottomright', ...props }: GlobeControlProps) => (\n <CustomControl position={position} {...props}>\n <ActionControls onAction={onAction} />\n </CustomControl>\n);\n\n//\n// Globe\n//\n\nexport const Globe = {\n Root: GlobeRoot,\n Canvas: GlobeCanvas,\n Zoom: GlobeZoom,\n Action: GlobeAction,\n Debug: GlobeDebug,\n Panel: GlobePanel,\n};\n\nexport type { GlobeRootProps, GlobeCanvasProps };\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport React, { type Dispatch, type PropsWithChildren, type SetStateAction, createContext, useContext } from 'react';\n\nimport { raise } from '@dxos/debug';\nimport { useControlledState } from '@dxos/react-ui';\n\nimport { type LatLngLiteral } from '../types';\n\n// TODO(burdon): Factor out common geometry types.\nexport type Size = { width: number; height: number };\nexport type Point = { x: number; y: number };\nexport type Vector = [number, number, number];\n\nexport type GlobeContextType = {\n size: Size;\n center?: LatLngLiteral;\n zoom: number;\n translation: Point;\n rotation: Vector;\n setCenter: Dispatch<SetStateAction<LatLngLiteral>>;\n setZoom: Dispatch<SetStateAction<number>>;\n setTranslation: Dispatch<SetStateAction<Point>>;\n setRotation: Dispatch<SetStateAction<Vector>>;\n};\n\nconst defaults = {\n center: { lat: 51, lng: 0 } as LatLngLiteral,\n zoom: 4,\n} as const;\n\n// TODO(burdon): Replace with radix.\nconst GlobeContext = createContext<GlobeContextType>(undefined);\n\nexport type GlobeContextProviderProps = PropsWithChildren<\n Partial<Pick<GlobeContextType, 'size' | 'center' | 'zoom' | 'translation' | 'rotation'>>\n>;\n\nexport const GlobeContextProvider = ({\n children,\n size,\n center: centerProp = defaults.center,\n zoom: zoomProp = defaults.zoom,\n translation: translationProp,\n rotation: rotationProp,\n}: GlobeContextProviderProps) => {\n const [center, setCenter] = useControlledState(centerProp);\n const [zoom, setZoom] = useControlledState(zoomProp);\n const [translation, setTranslation] = useControlledState<Point>(translationProp);\n const [rotation, setRotation] = useControlledState<Vector>(rotationProp);\n\n return (\n <GlobeContext.Provider\n value={{ size, center, zoom, translation, rotation, setCenter, setZoom, setTranslation, setRotation }}\n >\n {children}\n </GlobeContext.Provider>\n );\n};\n\nexport const useGlobeContext = () => {\n return useContext(GlobeContext) ?? raise(new Error('Missing GlobeContext'));\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { select } from 'd3';\nimport { useEffect } from 'react';\n\nimport { type GlobeController } from '../components';\nimport { geoInertiaDrag } from '../util';\n\nexport type GlobeDragEvent = {\n type: 'start' | 'move' | 'end';\n controller: GlobeController;\n};\n\nexport type DragOptions = {\n disabled?: boolean;\n duration?: number;\n xAxis?: boolean; // TODO(burdon): Generalize.\n onUpdate?: (event: GlobeDragEvent) => void;\n};\n\n/**\n * Allows user to drag globe.\n */\nexport const useDrag = (controller?: GlobeController | null, options: DragOptions = {}) => {\n useEffect(() => {\n const canvas = controller?.canvas;\n if (!canvas || options.disabled) {\n return;\n }\n\n geoInertiaDrag(\n select(canvas),\n () => {\n controller.setRotation(controller.projection.rotate());\n options.onUpdate?.({ type: 'move', controller });\n },\n controller.projection,\n {\n xAxis: options.xAxis,\n time: 3_000,\n start: () => options.onUpdate?.({ type: 'start', controller }),\n finish: () => options.onUpdate?.({ type: 'end', controller }),\n },\n );\n\n // TODO(burdon): Cancel drag timer.\n return () => {\n cancelDrag(select(canvas));\n };\n }, [controller, JSON.stringify(options)]);\n};\n\nconst cancelDrag = (node) => node.on('.drag', null);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nconst debug = false;\n\nexport const timer = <T = void>(cb: () => T): T => {\n const start = Date.now();\n const data = cb();\n const t = Date.now() - start / 1_000;\n if (debug) {\n // eslint-disable-next-line no-console\n console.log({ t, data });\n }\n\n return data;\n};\n", "//\n// Copyright 2017 Philippe Rivière\n// Copyright 2024 DXOS.org\n// https://github.com/Fil/d3-inertia\n//\n\nimport { drag, select, timer } from 'd3';\nimport versor from 'versor';\n\nexport const restrictAxis =\n (axis: boolean[]) =>\n (original: number[], current: number[]): number[] =>\n current.map((d, i) => (axis[i] ? d : original[i]));\n\n/**\n * Applies a drag handler to the specified target element.\n */\n// TODO(burdon): Define type.\nexport const geoInertiaDrag = (target, render, projection, options) => {\n if (!options) {\n options = {};\n }\n\n // Target can be an element, a selector, a function, or a selection\n // but in case of a selection we make sure to reselect it with d3-selection.\n if (target.node) {\n target = target.node();\n }\n target = select(target);\n\n // Complete params: (projection, render, startDrag, dragging, endDrag).\n const inertia = geoInertiaDragHelper({\n projection,\n render: (rotation) => {\n projection.rotate(rotation);\n render && render();\n },\n axis: restrictAxis(options.xAxis ? [true, false, false] : [true, true, true]),\n start: options.start,\n move: options.move,\n end: options.end,\n stop: options.stop,\n finish: options.finish,\n time: options.time,\n hold: options.hold,\n });\n\n target.call(drag().on('start', inertia.start).on('drag', inertia.move).on('end', inertia.end));\n return inertia;\n};\n\n/**\n * A versor is a compact way to describe a rotation in 3D space.\n * It consists of four components [𝑤,x,y,z], where:\n * 𝑤 is a scalar representing the angle of rotation.\n * x, y, z are the vector components, representing the axis of rotation.\n */\nconst geoInertiaDragHelper = (opt) => {\n const projection = opt.projection;\n\n let v0; // Mouse position in Cartesian coordinates at start of drag gesture.\n let r0; // Projection rotation as Euler angles at start.\n let q0; // Projection rotation as versor at start.\n let v10; // Mouse position in Cartesian coordinates just before end of drag gesture.\n let v11; // Mouse position in Cartesian coordinates at end.\n let q10; // Projection rotation as versor at end.\n\n const inertia = inertiaHelper({\n axis: opt.axis,\n\n start: () => {\n v0 = versor.cartesian(projection.invert(inertia.position));\n r0 = projection.rotate();\n q0 = versor(r0);\n opt.start && opt.start();\n },\n\n move: () => {\n const inv = projection.rotate(r0).invert(inertia.position);\n if (isNaN(inv[0])) {\n return;\n }\n const v1 = versor.cartesian(inv);\n const q1 = versor.multiply(q0, versor.delta(v0, v1));\n const r1 = versor.rotation(q1);\n const r2 = opt.axis(r0, r1);\n opt.render(r2);\n opt.move && opt.move();\n },\n\n end: () => {\n // Velocity.\n v10 = versor.cartesian(projection.invert(inertia.position.map((d, i) => d - inertia.velocity[i] / 1_000)));\n q10 = versor(projection.rotate());\n v11 = versor.cartesian(projection.invert(inertia.position));\n opt.end && opt.end();\n },\n\n stop: opt.stop,\n\n finish: opt.finish,\n\n render: (t) => {\n const r1 = versor.rotation(versor.multiply(q10, versor.delta(v10, v11, t * 1_000)));\n const r2 = opt.axis(r0, r1);\n opt.render && opt.render(r2);\n },\n\n time: opt.time,\n });\n\n return inertia;\n};\n\nfunction inertiaHelper(opt) {\n const A = opt.time || 5_000; // Reference time in ms.\n const limit = 1.0001;\n const B = -Math.log(1 - 1 / limit);\n const inertia = {\n position: [0, 0],\n velocity: [0, 0], // Velocity in pixels/s.\n timer: timer(() => {}),\n time: 0,\n t: 0,\n\n start: function (ev) {\n const position = [ev.x, ev.y];\n inertia.position = position;\n inertia.velocity = [0, 0];\n inertia.timer.stop();\n this.classList.remove('inertia');\n this.classList.add('dragging');\n opt.start && opt.start.call(this, position);\n },\n\n move: function (ev) {\n const position = [ev.x, ev.y];\n const time = performance.now();\n const deltaTime = time - inertia.time;\n const decay = 1 - Math.exp(-deltaTime / 1_000);\n inertia.velocity = inertia.velocity.map((d, i) => {\n const deltaPos = position[i] - inertia.position[i];\n const deltaTime = time - inertia.time;\n return (1_000 * (1 - decay) * deltaPos) / deltaTime + d * decay;\n });\n\n // Clamp velocity axis.\n inertia.velocity = opt.axis([0, 0], inertia.velocity);\n\n inertia.time = time;\n inertia.position = position;\n opt.move && opt.move.call(this, position);\n },\n\n end: function (ev) {\n this.classList.remove('dragging', 'inertia');\n\n const v = inertia.velocity;\n if (v[0] * v[0] + v[1] * v[1] < 100) {\n inertia.timer.stop();\n return opt.stop && opt.stop();\n }\n\n const time = performance.now();\n const deltaTime = time - inertia.time;\n\n if (opt.hold === undefined) {\n opt.hold = 100;\n } // Default flick->drag threshold time (0 disables inertia).\n\n if (deltaTime >= opt.hold) {\n inertia.timer.stop();\n return opt.stop && opt.stop();\n }\n\n this.classList.add('inertia');\n opt.end && opt.end();\n\n const self = this;\n inertia.timer.restart((e) => {\n inertia.t = limit * (1 - Math.exp((-B * e) / A));\n opt.render && opt.render(inertia.t);\n if (inertia.t > 1) {\n inertia.timer.stop();\n self.classList.remove('inertia');\n inertia.velocity = [0, 0];\n inertia.t = 1;\n opt.finish && opt.finish();\n }\n });\n },\n };\n\n inertia.timer.stop();\n return inertia;\n}\n", "//\n// Copyright 2020 DXOS.org\n//\n\nimport { type GeoGeometryObjects, geoCircle as d3GeoCircle } from 'd3';\nimport { type Point, type Polygon, type Position } from 'geojson';\nimport { type LatLngLiteral } from 'leaflet';\n\nimport type { Vector } from '../hooks';\n\nexport const positionToRotation = ([lng, lat]: [number, number], tilt = 0): Vector => [-lng, tilt - lat, 0];\n\nexport const geoToPosition = ({ lat, lng }: LatLngLiteral): [number, number] => [lng, lat];\n\nexport const geoPoint = (point: LatLngLiteral): Point => ({ type: 'Point', coordinates: geoToPosition(point) });\n\n// https://github.com/d3/d3-geo#geoCircle\nexport const geoCircle = ({ lat, lng }: LatLngLiteral, radius: number): Polygon =>\n d3GeoCircle().radius(radius).center([lng, lat])();\n\nexport const geoLine = (p1: LatLngLiteral, p2: LatLngLiteral): GeoGeometryObjects => ({\n type: 'LineString',\n coordinates: [\n [p1.lng, p1.lat],\n [p2.lng, p2.lat],\n ],\n});\n\nexport const closestPoint = (points: Position[], target: Position): Position | null => {\n if (points.length === 0) {\n return target;\n }\n\n let closestPoint = points[0];\n let minDistance = getDistance(points[0], target);\n\n for (const point of points) {\n const distance = getDistance(point, target);\n if (distance < minDistance) {\n minDistance = distance;\n closestPoint = point;\n }\n }\n\n return closestPoint;\n};\n\nexport const getDistance = (point1: Position, point2: Position): number => {\n const dx = point1[0] - point2[0];\n const dy = point1[1] - point2[1];\n return Math.sqrt(dx * dx + dy * dy);\n};\n", "//\n// Copyright 2020 DXOS.org\n//\n\nimport { type GeoPath, type GeoPermissibleObjects, geoGraticule } from 'd3';\nimport { feature, mesh } from 'topojson-client';\nimport { type Topology } from 'topojson-specification';\n\nimport { type LatLngLiteral } from '../types';\n\nimport { geoLine, geoPoint } from './path';\n\nexport type Styles = Record<string, any>;\n\nexport type Style =\n | 'background'\n | 'water'\n | 'graticule'\n | 'land'\n | 'border'\n | 'dots'\n | 'point'\n | 'line'\n | 'cursor'\n | 'arc';\n\nexport type StyleSet = Partial<Record<Style, Styles>>;\n\nexport type Features = {\n points?: LatLngLiteral[];\n lines?: { source: LatLngLiteral; target: LatLngLiteral }[];\n};\n\nexport type Layer = {\n styles: Styles;\n path: GeoPermissibleObjects;\n};\n\n/**\n * Create rendering layers.\n */\nexport const createLayers = (topology: Topology, features: Features, styles: StyleSet): Layer[] => {\n const layers: Layer[] = [];\n\n if (styles.water) {\n layers.push({\n styles: styles.water,\n path: {\n type: 'Sphere',\n },\n });\n }\n\n if (styles.graticule) {\n layers.push({\n styles: styles.graticule,\n path: geoGraticule().step([6, 6])(),\n });\n }\n\n //\n // Topology.\n //\n\n if (topology) {\n if (topology.objects.land && styles.land) {\n layers.push({\n styles: styles.land,\n path: feature(topology, topology.objects.land),\n });\n }\n\n if (topology.objects.countries && styles.border) {\n layers.push({\n styles: styles.border,\n path: mesh(topology, topology.objects.countries, (a: any, b: any) => a !== b),\n });\n }\n\n if (topology.objects.dots && styles.dots) {\n layers.push({\n styles: styles.dots,\n path: topology.objects.dots as any, // TODO(burdon): Type.\n });\n }\n }\n\n //\n // Features.\n //\n\n if (features) {\n const { points, lines } = features;\n\n if (points && styles.point) {\n layers.push({\n styles: styles.point,\n path: {\n type: 'GeometryCollection',\n geometries: points.map((point) => geoPoint(point)),\n },\n });\n }\n\n if (lines && styles.line) {\n layers.push({\n styles: styles.line,\n path: {\n type: 'GeometryCollection',\n geometries: lines.map(({ source, target }) => geoLine(source, target)),\n },\n });\n }\n }\n\n return layers;\n};\n\n/**\n * Render layers created above.\n */\nexport const renderLayers = (generator: GeoPath, layers: Layer[] = [], scale: number, styles: StyleSet) => {\n const context: CanvasRenderingContext2D = generator.context();\n const {\n canvas: { width, height },\n } = context;\n context.reset();\n\n // Clear background.\n if (styles.background) {\n context.fillStyle = styles.background.fillStyle;\n context.fillRect(0, 0, width, height);\n } else {\n context.clearRect(0, 0, width, height);\n }\n\n // Render features.\n // https://github.com/d3/d3-geo#_path\n layers.forEach(({ path, styles }) => {\n context.save();\n let fill = false;\n let stroke = false;\n if (styles) {\n Object.entries(styles).forEach(([key, value]) => {\n if (key === 'pointRadius') {\n generator.pointRadius(value * scale);\n } else {\n context[key] = value;\n fill ||= key === 'fillStyle';\n stroke ||= key === 'strokeStyle';\n }\n });\n }\n\n context.beginPath();\n\n generator(path);\n fill && context.fill();\n stroke && context.stroke();\n context.restore();\n });\n\n return context;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useCallback } from 'react';\n\nimport { type ControlProps, type GlobeController } from '../components';\n\nconst ZOOM_FACTOR = 0.1;\n\nexport const useGlobeZoomHandler = (controller: GlobeController | null | undefined): ControlProps['onAction'] => {\n return useCallback<ControlProps['onAction']>(\n (event) => {\n if (!controller) {\n return;\n }\n\n switch (event) {\n case 'zoom-in': {\n controller.setZoom((zoom) => {\n return zoom * (1 + ZOOM_FACTOR);\n });\n break;\n }\n case 'zoom-out': {\n controller.setZoom((zoom) => {\n return zoom * (1 - ZOOM_FACTOR);\n });\n break;\n }\n }\n },\n [controller],\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { useCallback } from 'react';\n\nimport { type ControlProps, type MapController } from '../components';\n\nexport const useMapZoomHandler = (controller: MapController | null | undefined): ControlProps['onAction'] => {\n return useCallback<ControlProps['onAction']>(\n (event) => {\n if (!controller) {\n return;\n }\n\n switch (event) {\n case 'zoom-in': {\n controller.setZoom((scale) => scale + 1);\n break;\n }\n case 'zoom-out': {\n controller.setZoom((scale) => scale - 1);\n break;\n }\n }\n },\n [controller],\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { timer as d3Timer } from 'd3';\nimport { type Timer } from 'd3';\nimport { useEffect, useState } from 'react';\n\nimport { type GlobeController } from '../components';\n\nimport { type Vector } from './context';\n\nexport type SpinnerOptions = {\n disabled?: boolean;\n delta?: Vector;\n};\n\n/**\n * Rotates globe.\n */\nexport const useSpinner = (controller?: GlobeController | null, options: SpinnerOptions = {}) => {\n const [running, setRunning] = useState(false);\n useEffect(() => {\n let timer: Timer | undefined;\n\n const start = () => {\n const delta: Vector = options.delta ?? [0.001, 0, 0];\n\n let t = 0;\n let lastRotation = controller.projection.rotate();\n timer = d3Timer((elapsed) => {\n const dt = elapsed - t;\n t = elapsed;\n\n const rotation: Vector = [\n lastRotation[0] + delta[0] * dt,\n lastRotation[1] + delta[1] * dt,\n lastRotation[2] + delta[2] * dt,\n ];\n\n lastRotation = rotation;\n controller.setRotation(rotation);\n });\n };\n\n const stop = () => {\n if (timer) {\n timer.stop();\n timer = undefined;\n }\n };\n\n if (controller && running) {\n start();\n } else {\n stop();\n }\n\n return () => stop();\n }, [controller, running]);\n\n return [\n () => {\n if (!options.disabled) {\n setRunning(true);\n }\n },\n () => setRunning(false),\n ];\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { selection as d3Selection, geoDistance, geoInterpolate, geoPath } from 'd3';\nimport { type Dispatch, type SetStateAction, useEffect, useMemo, useState } from 'react';\nimport versor from 'versor';\n\nimport type { GlobeController } from '../components';\nimport { type LatLngLiteral } from '../types';\nimport { type StyleSet, geoToPosition, positionToRotation } from '../util';\n\nconst TRANSITION_NAME = 'globe-tour';\n\nconst defaultDuration = 1_500;\n\nexport type TourOptions = {\n running?: boolean;\n disabled?: boolean;\n duration?: number;\n loop?: boolean;\n tilt?: number;\n autoRotate?: boolean;\n styles?: StyleSet;\n};\n\n/**\n * Iterates between points.\n * Inspired by: https://observablehq.com/@mbostock/top-100-cities\n */\nexport const useTour = (\n controller?: GlobeController | null,\n points?: LatLngLiteral[],\n options: TourOptions = {},\n): [boolean, Dispatch<SetStateAction<boolean>>] => {\n const selection = useMemo(() => d3Selection(), []);\n // TODO(burdon): Redo controlled state.\n const [running, setRunning] = useState(options.running ?? false);\n useEffect(() => {\n if (!running) {\n selection.interrupt(TRANSITION_NAME);\n return;\n }\n\n let t: ReturnType<typeof setTimeout>;\n if (controller && running) {\n t = setTimeout(async () => {\n const { canvas, projection, setRotation } = controller;\n const context = canvas.getContext('2d', { alpha: false });\n const path = geoPath(projection, context).pointRadius(2);\n\n const tilt = options.tilt ?? 0;\n let last: LatLngLiteral;\n try {\n const p = [...points];\n if (options.loop) {\n p.push(p[0]);\n }\n\n for (const next of p) {\n if (!running) {\n break;\n }\n\n // Points.\n const p1 = last ? geoToPosition(last) : undefined;\n const p2 = geoToPosition(next);\n const ip = geoInterpolate(p1 || p2, p2);\n const distance = geoDistance(p1 || p2, p2);\n\n // Rotation.\n const r1 = p1 ? positionToRotation(p1, tilt) : controller.projection.rotate();\n const r2 = positionToRotation(p2, tilt);\n const iv = versor.interpolate(r1, r2);\n\n const transition = selection\n .transition(TRANSITION_NAME)\n .duration(Math.max(options.duration ?? defaultDuration, distance * 2_000))\n .tween('render', () => (t) => {\n const t1 = Math.max(0, Math.min(1, t * 2 - 1));\n const t2 = Math.min(1, t * 2);\n\n context.save();\n {\n context.beginPath();\n context.strokeStyle = options?.styles?.arc?.strokeStyle ?? 'yellow';\n context.lineWidth = (options?.styles?.arc?.lineWidth ?? 1.5) * (controller?.zoom ?? 1);\n context.setLineDash(options?.styles?.arc?.lineDash ?? []);\n path({ type: 'LineString', coordinates: [ip(t1), ip(t2)] });\n context.stroke();\n\n context.beginPath();\n context.fillStyle = options?.styles?.cursor?.fillStyle ?? 'orange';\n path.pointRadius((options?.styles?.cursor?.pointRadius ?? 2) * (controller?.zoom ?? 1));\n path({ type: 'Point', coordinates: ip(t2) });\n context.fill();\n }\n context.restore();\n\n // TODO(burdon): This has to come after rendering above. Add to features to correct order?\n projection.rotate(iv(t));\n setRotation(projection.rotate());\n });\n\n // Throws if interrupted.\n await transition.end();\n last = next;\n }\n } catch {\n // Ignore.\n } finally {\n setRunning(false);\n }\n });\n\n return () => {\n clearTimeout(t);\n selection.interrupt(TRANSITION_NAME);\n };\n }\n }, [controller, running, JSON.stringify(options)]);\n\n return [running, setRunning];\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type ControlPosition } from 'leaflet';\nimport React from 'react';\n\nimport { IconButton, type ThemedClassName, Toolbar, useTranslation } from '@dxos/react-ui';\n\nimport { translationKey } from '../../translations';\n\nexport type ControlAction = 'toggle' | 'start' | 'zoom-in' | 'zoom-out';\n\nexport type ControlProps = ThemedClassName<{\n onAction?: (action: ControlAction) => void;\n}>;\n\nexport const controlPositions: Record<ControlPosition, string> = {\n topleft: 'top-2 left-2',\n topright: 'top-2 right-2',\n bottomleft: 'bottom-2 left-2',\n bottomright: 'bottom-2 right-2',\n};\n\nexport const ZoomControls = ({ classNames, onAction }: ControlProps) => {\n const { t } = useTranslation(translationKey);\n\n return (\n <Toolbar.Root classNames={['gap-2', classNames]}>\n <IconButton\n icon='ph--plus--regular'\n iconOnly\n label={t('zoom in icon button')}\n onClick={() => onAction?.('zoom-in')}\n />\n <IconButton\n icon='ph--minus--regular'\n iconOnly\n label={t('zoom out icon button')}\n onClick={() => onAction?.('zoom-out')}\n />\n </Toolbar.Root>\n );\n};\n\nexport const ActionControls = ({ classNames, onAction }: ControlProps) => {\n const { t } = useTranslation(translationKey);\n\n return (\n <Toolbar.Root classNames={['gap-2', classNames]}>\n <IconButton\n icon='ph--path--regular'\n iconOnly\n label={t('start icon button')}\n onClick={() => onAction?.('start')}\n />\n <IconButton\n icon='ph--globe-hemisphere-west--regular'\n iconOnly\n label={t('toggle icon button')}\n onClick={() => onAction?.('toggle')}\n />\n </Toolbar.Root>\n );\n};\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport { type Resource } from '@dxos/react-ui';\n\nexport const translationKey = '@dxos/react-ui-geo';\n\nexport const translations = [\n {\n 'en-US': {\n [translationKey]: {\n 'zoom in icon button': 'Zoom in',\n 'zoom out icon button': 'Zoom out',\n 'start icon button': 'Start',\n 'toggle icon button': 'Toggle',\n },\n },\n },\n] as const satisfies Resource[];\n", "//\n// Copyright 2023 DXOS.org\n//\n\nimport 'leaflet/dist/leaflet.css';\n\nimport { createContext } from '@radix-ui/react-context';\nimport L, { Control, type ControlPosition, DomEvent, DomUtil, type LatLngLiteral, latLngBounds } from 'leaflet';\nimport React, { type PropsWithChildren, forwardRef, useEffect, useImperativeHandle, useRef, useState } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { MapContainer, type MapContainerProps, Marker, Popup, TileLayer, useMap, useMapEvents } from 'react-leaflet';\n\nimport { ThemeProvider, type ThemedClassName, Tooltip } from '@dxos/react-ui';\nimport { defaultTx, mx } from '@dxos/ui-theme';\n\nimport { type GeoMarker } from '../../types';\nimport { ActionControls, type ControlProps, ZoomControls, controlPositions } from '../Toolbar';\n\n// TODO(burdon): Explore plugins: https://www.npmjs.com/search?q=keywords%3Areact-leaflet-v4\n// TODO(burdon): react-leaflet v5 is not compatible with react 18.\n// TODO(burdon): Guess initial location.\n\nconst defaults = {\n center: { lat: 51, lng: 0 } as L.LatLngLiteral,\n zoom: 4,\n} as const;\n\n//\n// Controller\n//\n\ntype MapController = {\n setCenter: (center: LatLngLiteral, zoom?: number) => void;\n setZoom: (cb: (zoom: number) => number) => void;\n};\n\n//\n// Context\n//\n\ntype MapContextValue = {\n attention?: boolean;\n onChange?: (ev: { center: LatLngLiteral; zoom: number }) => void;\n};\n\nconst [MapContextProvier, useMapContext] = createContext<MapContextValue>('Map');\n\n//\n// Root\n//\n\ntype MapRootProps = ThemedClassName<MapContainerProps & Pick<MapContextValue, 'onChange'>>;\n\n/**\n * https://react-leaflet.js.org/docs/api-map\n */\nconst MapRoot = forwardRef<MapController, MapRootProps>(\n (\n { classNames, scrollWheelZoom = true, doubleClickZoom = true, touchZoom = true, center, zoom, onChange, ...props },\n forwardedRef,\n ) => {\n const [attention, setAttention] = useState(false);\n const mapRef = useRef<L.Map>(null);\n const map = mapRef.current;\n\n useImperativeHandle(\n forwardedRef,\n () => ({\n setCenter: (center: LatLngLiteral, zoom?: number) => {\n mapRef.current?.setView(center, zoom);\n },\n setZoom: (cb: (zoom: number) => number) => {\n mapRef.current?.setZoom(cb(mapRef.current?.getZoom() ?? 0));\n },\n }),\n [],\n );\n\n // Enable/disable scroll wheel zoom.\n // TODO(burdon): Use attention:\n // const {hasAttention} = useAttention(props.id);\n useEffect(() => {\n if (!map) {\n return;\n }\n\n if (attention) {\n map.scrollWheelZoom.enable();\n } else {\n map.scrollWheelZoom.disable();\n }\n }, [map, attention]);\n\n return (\n <MapContextProvier attention={attention} onChange={onChange}>\n <MapContainer\n {...props}\n ref={mapRef}\n className={mx('group relative grid h-full w-full !bg-base-surface dx-focus-ring-inset', classNames)}\n attributionControl={false}\n zoomControl={false}\n scrollWheelZoom={scrollWheelZoom}\n doubleClickZoom={doubleClickZoom}\n touchZoom={touchZoom}\n center={center ?? defaults.center}\n zoom={zoom ?? defaults.zoom}\n // whenReady={() => {}}\n />\n </MapContextProvier>\n );\n },\n);\n\nMapRoot.displayName = 'Map.Root';\n\n//\n// Tiles\n// https://react-leaflet.js.org/docs/api-components/#tilelayer\n//\n\nconst MAP_TILES_NAME = 'Map.Tiles';\n\ntype MapTilesProps = {};\n\nconst MapTiles = (_props: MapTilesProps) => {\n const ref = useRef<L.TileLayer>(null);\n const { onChange } = useMapContext(MAP_TILES_NAME);\n\n useMapEvents({\n zoomstart: (ev) => {\n onChange?.({\n center: ev.target.getCenter(),\n zoom: ev.target.getZoom(),\n });\n },\n });\n\n // NOTE: Need to dynamically update data attribute since TileLayer doesn't update, but\n // Tailwind requires setting the property for static analysis.\n const { attention } = useMapContext(MAP_TILES_NAME);\n useEffect(() => {\n if (ref.current) {\n ref.current.getContainer().dataset.attention = attention ? '1' : '0';\n }\n }, [attention]);\n\n // TODO(burdon): Option to add class 'invert'.\n return (\n <>\n <TileLayer\n ref={ref}\n data-attention={attention}\n detectRetina={true}\n className='dark:grayscale dark:invert data-[attention=\"0\"]:!opacity-80'\n url='https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png'\n keepBuffer={4}\n // opacity={attention ? 1 : 0.7}\n />\n\n {/* Temperature map. */}\n {/* <WMSTileLayer\n url='https://gibs.earthdata.nasa.gov/wms/epsg4326/best/wms.cgi'\n layers='MODIS_Terra_Land_Surface_Temp_Day'\n format='image/png'\n transparent={true}\n version='1.3.0'\n attribution='NASA GIBS'\n /> */}\n\n {/* US Weather. */}\n {/* <WMSTileLayer\n url='https://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r.cgi'\n layers='nexrad-n0r' // layers='nexrad-n0r'\n format='image/png'\n transparent={true}\n /> */}\n </>\n );\n};\n\nMapTiles.displayName = MAP_TILES_NAME;\n\n//\n// Markers\n//\n\ntype MapMarkersProps = {\n markers?: GeoMarker[];\n selected?: string[];\n};\n\nconst MapMarkers = ({ selected, markers }: MapMarkersProps) => {\n const map = useMap();\n\n // Set the viewport around the markers, or show the whole world map if `markers` is empty.\n useEffect(() => {\n if (markers.length > 0) {\n const bounds = latLngBounds(markers.map((marker) => marker.location));\n map.fitBounds(bounds);\n } else {\n map.setView(defaults.center, defaults.zoom);\n }\n }, [markers]);\n\n return (\n <>\n {markers?.map(({ id, title, location: { lat, lng } }) => {\n return (\n <Marker\n key={id}\n position={{ lat, lng }}\n icon={\n // TODO(burdon): Create custom icon from bundled assets.\n // TODO(burdon): Selection state.\n new L.Icon({\n iconUrl: 'https://dxos.network/marker-icon.png',\n iconRetinaUrl: 'https://dxos.network/marker-icon-2x.png',\n shadowUrl: 'https://dxos.network/marker-shadow.png',\n iconSize: [25, 41],\n iconAnchor: [12, 41],\n popupAnchor: [1, -34],\n shadowSize: [41, 41],\n })\n }\n >\n {title && <Popup>{title}</Popup>}\n </Marker>\n );\n })}\n </>\n );\n};\n\nMapMarkers.displayName = 'Map.Markers';\n\n//\n// Controls\n// Integrates with Leaflet custom controls.\n//\n\nconst CustomControl = ({\n position,\n children,\n}: PropsWithChildren<{\n position: ControlPosition;\n}>) => {\n const map = useMap();\n\n useEffect(() => {\n const control = new Control({ position });\n control.onAdd = () => {\n const container = DomUtil.create('div', mx('m-0!', controlPositions[position]));\n DomEvent.disableClickPropagation(container);\n DomEvent.disableScrollPropagation(container);\n\n const root = createRoot(container);\n root.render(\n <ThemeProvider tx={defaultTx}>\n <Tooltip.Provider>{children}</Tooltip.Provider>\n </ThemeProvider>,\n );\n\n return container;\n };\n\n control.addTo(map);\n return () => {\n control.remove();\n };\n }, [map, position, children]);\n\n return null;\n};\n\ntype MapControlProps = { position?: ControlPosition } & Pick<ControlProps, 'onAction'>;\n\nconst MapZoom = ({ onAction, position = 'bottomleft', ...props }: MapControlProps) => (\n <CustomControl position={position} {...props}>\n <ZoomControls onAction={onAction} />\n </CustomControl>\n);\n\nconst MapAction = ({ onAction, position = 'bottomright', ...props }: MapControlProps) => (\n <CustomControl position={position} {...props}>\n <ActionControls onAction={onAction} />\n </CustomControl>\n);\n\n//\n// Map\n//\n\nexport const Map = {\n Root: MapRoot,\n Tiles: MapTiles,\n Markers: MapMarkers,\n Zoom: MapZoom,\n Action: MapAction,\n};\n\nexport { type MapController, type MapRootProps, type MapTilesProps, type MapMarkersProps, type MapControlProps };\n"],
5
+ "mappings": "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",
6
+ "names": ["easeLinear", "easeSinOut", "geoMercator", "geoOrthographic", "geoPath", "geoTransverseMercator", "interpolateNumber", "transition", "React", "forwardRef", "useEffect", "useImperativeHandle", "useMemo", "useRef", "useState", "useResizeDetector", "useDynamicRef", "useThemeContext", "mx", "React", "createContext", "useContext", "raise", "useControlledState", "defaults", "center", "lat", "lng", "zoom", "GlobeContext", "createContext", "undefined", "GlobeContextProvider", "children", "size", "centerProp", "zoomProp", "translation", "translationProp", "rotation", "rotationProp", "setCenter", "useControlledState", "setZoom", "setTranslation", "setRotation", "Provider", "value", "useGlobeContext", "useContext", "raise", "Error", "select", "useEffect", "debug", "timer", "cb", "start", "Date", "now", "data", "t", "console", "log", "drag", "select", "timer", "versor", "restrictAxis", "axis", "original", "current", "map", "d", "i", "geoInertiaDrag", "target", "render", "projection", "options", "node", "select", "inertia", "geoInertiaDragHelper", "rotation", "rotate", "xAxis", "start", "move", "end", "stop", "finish", "time", "hold", "call", "drag", "on", "opt", "v0", "r0", "q0", "v10", "v11", "q10", "inertiaHelper", "versor", "cartesian", "invert", "position", "inv", "isNaN", "v1", "q1", "multiply", "delta", "r1", "r2", "velocity", "t", "A", "limit", "B", "Math", "log", "timer", "ev", "x", "y", "classList", "remove", "add", "performance", "now", "deltaTime", "decay", "exp", "deltaPos", "v", "undefined", "self", "restart", "e", "geoCircle", "d3GeoCircle", "positionToRotation", "lng", "lat", "tilt", "geoToPosition", "geoPoint", "point", "type", "coordinates", "geoCircle", "radius", "d3GeoCircle", "center", "geoLine", "p1", "p2", "closestPoint", "points", "target", "length", "minDistance", "getDistance", "distance", "point1", "point2", "dx", "dy", "Math", "sqrt", "geoGraticule", "feature", "mesh", "createLayers", "topology", "features", "styles", "layers", "water", "push", "path", "type", "graticule", "geoGraticule", "step", "objects", "land", "feature", "countries", "border", "mesh", "a", "b", "dots", "points", "lines", "point", "geometries", "map", "geoPoint", "line", "source", "target", "geoLine", "renderLayers", "generator", "scale", "context", "canvas", "width", "height", "reset", "background", "fillStyle", "fillRect", "clearRect", "forEach", "save", "fill", "stroke", "Object", "entries", "key", "value", "pointRadius", "beginPath", "restore", "useDrag", "controller", "options", "useEffect", "canvas", "disabled", "geoInertiaDrag", "select", "setRotation", "projection", "rotate", "onUpdate", "type", "xAxis", "time", "start", "finish", "cancelDrag", "JSON", "stringify", "node", "on", "useCallback", "ZOOM_FACTOR", "useGlobeZoomHandler", "controller", "useCallback", "event", "setZoom", "zoom", "useCallback", "useMapZoomHandler", "controller", "useCallback", "event", "setZoom", "scale", "timer", "d3Timer", "useEffect", "useState", "useSpinner", "controller", "options", "running", "setRunning", "useState", "useEffect", "timer", "start", "delta", "t", "lastRotation", "projection", "rotate", "d3Timer", "elapsed", "dt", "rotation", "setRotation", "stop", "undefined", "disabled", "selection", "d3Selection", "geoDistance", "geoInterpolate", "geoPath", "useEffect", "useMemo", "useState", "versor", "TRANSITION_NAME", "defaultDuration", "useTour", "controller", "points", "options", "selection", "useMemo", "d3Selection", "running", "setRunning", "useState", "useEffect", "interrupt", "t", "setTimeout", "canvas", "projection", "setRotation", "context", "getContext", "alpha", "path", "geoPath", "pointRadius", "tilt", "last", "p", "loop", "push", "next", "p1", "geoToPosition", "undefined", "p2", "ip", "geoInterpolate", "distance", "geoDistance", "r1", "positionToRotation", "rotate", "r2", "iv", "versor", "interpolate", "transition", "duration", "Math", "max", "tween", "t1", "min", "t2", "save", "beginPath", "strokeStyle", "styles", "arc", "lineWidth", "zoom", "setLineDash", "lineDash", "type", "coordinates", "stroke", "fillStyle", "cursor", "fill", "restore", "end", "clearTimeout", "JSON", "stringify", "React", "IconButton", "Toolbar", "useTranslation", "translationKey", "translations", "controlPositions", "topleft", "topright", "bottomleft", "bottomright", "ZoomControls", "classNames", "onAction", "t", "useTranslation", "translationKey", "React", "Toolbar", "Root", "IconButton", "icon", "iconOnly", "label", "onClick", "ActionControls", "defaultStyles", "light", "background", "fillStyle", "water", "land", "line", "strokeStyle", "point", "strokeWidth", "pointRadius", "dark", "projectionMap", "orthographic", "geoOrthographic", "mercator", "geoMercator", "geoTransverseMercator", "getProjection", "type", "constructor", "GlobeRoot", "classNames", "children", "props", "ref", "width", "height", "useResizeDetector", "React", "div", "className", "mx", "GlobeContextProvider", "size", "GlobeCanvas", "forwardRef", "projection", "projectionProp", "topology", "features", "styles", "stylesProp", "themeMode", "useThemeContext", "useMemo", "canvas", "setCanvas", "useState", "canvasRef", "layers", "timer", "createLayers", "center", "zoom", "translation", "rotation", "setCenter", "setZoom", "setTranslation", "setRotation", "useGlobeContext", "zoomRef", "useDynamicRef", "useEffect", "positionToRotation", "geoToPosition", "zooming", "useRef", "useImperativeHandle", "current", "state", "is", "interpolateNumber", "transition", "ease", "easeLinear", "easeSinOut", "duration", "tween", "t", "on", "generator", "geoPath", "getContext", "alpha", "scale", "Math", "min", "translate", "x", "y", "rotate", "renderLayers", "GlobeDebug", "position", "controlPositions", "pre", "JSON", "stringify", "GlobePanel", "CustomControl", "GlobeZoom", "onAction", "ZoomControls", "GlobeAction", "ActionControls", "Globe", "Root", "Canvas", "Zoom", "Action", "Debug", "Panel", "createContext", "L", "Control", "DomEvent", "DomUtil", "latLngBounds", "React", "forwardRef", "useEffect", "useImperativeHandle", "useRef", "useState", "createRoot", "MapContainer", "Marker", "Popup", "TileLayer", "useMap", "useMapEvents", "ThemeProvider", "Tooltip", "defaultTx", "mx", "defaults", "center", "lat", "lng", "zoom", "MapContextProvier", "useMapContext", "createContext", "MapRoot", "forwardRef", "classNames", "scrollWheelZoom", "doubleClickZoom", "touchZoom", "onChange", "props", "forwardedRef", "attention", "setAttention", "useState", "mapRef", "useRef", "map", "current", "useImperativeHandle", "setCenter", "setView", "setZoom", "cb", "getZoom", "useEffect", "enable", "disable", "React", "MapContainer", "ref", "className", "mx", "attributionControl", "zoomControl", "displayName", "MAP_TILES_NAME", "MapTiles", "_props", "useMapEvents", "zoomstart", "ev", "target", "getCenter", "getContainer", "dataset", "TileLayer", "data-attention", "detectRetina", "url", "keepBuffer", "MapMarkers", "selected", "markers", "useMap", "length", "bounds", "latLngBounds", "marker", "location", "fitBounds", "id", "title", "Marker", "key", "position", "icon", "L", "Icon", "iconUrl", "iconRetinaUrl", "shadowUrl", "iconSize", "iconAnchor", "popupAnchor", "shadowSize", "Popup", "CustomControl", "children", "control", "Control", "onAdd", "container", "DomUtil", "create", "controlPositions", "DomEvent", "disableClickPropagation", "disableScrollPropagation", "root", "createRoot", "render", "ThemeProvider", "tx", "defaultTx", "Tooltip", "Provider", "addTo", "remove", "MapZoom", "onAction", "ZoomControls", "MapAction", "ActionControls", "Map", "Root", "Tiles", "Markers", "Zoom", "Action"]
7
7
  }
@@ -1 +1 @@
1
- {"inputs":{"data/countries-110m.ts":{"bytes":1301786,"imports":[],"format":"esm"},"src/data.ts":{"bytes":869,"imports":[{"path":"data/countries-110m.ts","kind":"dynamic-import","original":"../data/countries-110m.ts"}],"format":"esm"},"src/hooks/context.tsx":{"bytes":5766,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true}],"format":"esm"},"src/util/debug.ts":{"bytes":1445,"imports":[],"format":"esm"},"src/util/inertia.ts":{"bytes":21690,"imports":[{"path":"d3","kind":"import-statement","external":true},{"path":"versor","kind":"import-statement","external":true}],"format":"esm"},"src/util/path.ts":{"bytes":5718,"imports":[{"path":"d3","kind":"import-statement","external":true}],"format":"esm"},"src/util/render.ts":{"bytes":12238,"imports":[{"path":"d3","kind":"import-statement","external":true},{"path":"topojson-client","kind":"import-statement","external":true},{"path":"src/util/path.ts","kind":"import-statement","original":"./path"}],"format":"esm"},"src/util/index.ts":{"bytes":698,"imports":[{"path":"src/util/debug.ts","kind":"import-statement","original":"./debug"},{"path":"src/util/inertia.ts","kind":"import-statement","original":"./inertia"},{"path":"src/util/path.ts","kind":"import-statement","original":"./path"},{"path":"src/util/render.ts","kind":"import-statement","original":"./render"}],"format":"esm"},"src/hooks/useDrag.ts":{"bytes":4559,"imports":[{"path":"d3","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"src/util/index.ts","kind":"import-statement","original":"../util"}],"format":"esm"},"src/hooks/useGlobeZoomHandler.ts":{"bytes":2762,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/hooks/useMapZoomHandler.ts":{"bytes":2289,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/hooks/useSpinner.ts":{"bytes":5258,"imports":[{"path":"d3","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/hooks/useTour.ts":{"bytes":14990,"imports":[{"path":"d3","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"versor","kind":"import-statement","external":true},{"path":"src/util/index.ts","kind":"import-statement","original":"../util"}],"format":"esm"},"src/hooks/index.ts":{"bytes":948,"imports":[{"path":"src/hooks/context.tsx","kind":"import-statement","original":"./context"},{"path":"src/hooks/useDrag.ts","kind":"import-statement","original":"./useDrag"},{"path":"src/hooks/useGlobeZoomHandler.ts","kind":"import-statement","original":"./useGlobeZoomHandler"},{"path":"src/hooks/useMapZoomHandler.ts","kind":"import-statement","original":"./useMapZoomHandler"},{"path":"src/hooks/useSpinner.ts","kind":"import-statement","original":"./useSpinner"},{"path":"src/hooks/useTour.ts","kind":"import-statement","original":"./useTour"}],"format":"esm"},"src/translations.ts":{"bytes":1569,"imports":[],"format":"esm"},"src/components/Toolbar/Controls.tsx":{"bytes":5768,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"src/translations.ts","kind":"import-statement","original":"../../translations"}],"format":"esm"},"src/components/Toolbar/index.ts":{"bytes":470,"imports":[{"path":"src/components/Toolbar/Controls.tsx","kind":"import-statement","original":"./Controls"}],"format":"esm"},"src/components/Globe/Globe.tsx":{"bytes":26792,"imports":[{"path":"d3","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react-resize-detector","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"src/hooks/index.ts","kind":"import-statement","original":"../../hooks"},{"path":"src/util/index.ts","kind":"import-statement","original":"../../util"},{"path":"src/components/Toolbar/index.ts","kind":"import-statement","original":"../Toolbar"}],"format":"esm"},"src/components/Globe/index.ts":{"bytes":461,"imports":[{"path":"src/components/Globe/Globe.tsx","kind":"import-statement","original":"./Globe"}],"format":"esm"},"src/components/Map/Map.tsx":{"bytes":25267,"imports":[{"path":"leaflet/dist/leaflet.css","kind":"import-statement","external":true},{"path":"@radix-ui/react-context","kind":"import-statement","external":true},{"path":"leaflet","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react-dom/client","kind":"import-statement","external":true},{"path":"react-leaflet","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"src/components/Toolbar/index.ts","kind":"import-statement","original":"../Toolbar"}],"format":"esm"},"src/components/Map/index.ts":{"bytes":457,"imports":[{"path":"src/components/Map/Map.tsx","kind":"import-statement","original":"./Map"}],"format":"esm"},"src/components/index.ts":{"bytes":617,"imports":[{"path":"src/components/Globe/index.ts","kind":"import-statement","original":"./Globe"},{"path":"src/components/Map/index.ts","kind":"import-statement","original":"./Map"},{"path":"src/components/Toolbar/index.ts","kind":"import-statement","original":"./Toolbar"}],"format":"esm"},"src/index.ts":{"bytes":838,"imports":[{"path":"src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"src/data.ts","kind":"import-statement","original":"./data"},{"path":"src/hooks/index.ts","kind":"import-statement","original":"./hooks"},{"path":"src/translations.ts","kind":"import-statement","original":"./translations"},{"path":"src/util/index.ts","kind":"import-statement","original":"./util"}],"format":"esm"}},"outputs":{"dist/lib/browser/data.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/lib/browser/data.mjs":{"imports":[{"path":"dist/lib/browser/chunk-GMWLKTLN.mjs","kind":"import-statement"}],"exports":["loadTopology"],"entryPoint":"src/data.ts","inputs":{},"bytes":116},"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":70259},"dist/lib/browser/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-GMWLKTLN.mjs","kind":"import-statement"},{"path":"d3","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react-resize-detector","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"d3","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"d3","kind":"import-statement","external":true},{"path":"versor","kind":"import-statement","external":true},{"path":"d3","kind":"import-statement","external":true},{"path":"d3","kind":"import-statement","external":true},{"path":"topojson-client","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"d3","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"d3","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"versor","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"leaflet/dist/leaflet.css","kind":"import-statement","external":true},{"path":"@radix-ui/react-context","kind":"import-statement","external":true},{"path":"leaflet","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react-dom/client","kind":"import-statement","external":true},{"path":"react-leaflet","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true}],"exports":["ActionControls","Globe","GlobeContextProvider","Map","ZoomControls","closestPoint","controlPositions","createLayers","geoCircle","geoInertiaDrag","geoLine","geoPoint","geoToPosition","getDistance","loadTopology","positionToRotation","renderLayers","restrictAxis","timer","translationKey","translations","useDrag","useGlobeContext","useGlobeZoomHandler","useMapZoomHandler","useSpinner","useTour"],"entryPoint":"src/index.ts","inputs":{"src/components/Globe/Globe.tsx":{"bytesInOutput":5876},"src/hooks/context.tsx":{"bytesInOutput":1082},"src/hooks/index.ts":{"bytesInOutput":0},"src/hooks/useDrag.ts":{"bytesInOutput":862},"src/util/debug.ts":{"bytesInOutput":211},"src/util/index.ts":{"bytesInOutput":0},"src/util/inertia.ts":{"bytesInOutput":4562},"src/util/path.ts":{"bytesInOutput":1068},"src/util/render.ts":{"bytesInOutput":2469},"src/hooks/useGlobeZoomHandler.ts":{"bytesInOutput":522},"src/hooks/useMapZoomHandler.ts":{"bytesInOutput":426},"src/hooks/useSpinner.ts":{"bytesInOutput":1151},"src/hooks/useTour.ts":{"bytesInOutput":3306},"src/components/Toolbar/Controls.tsx":{"bytesInOutput":1461},"src/translations.ts":{"bytesInOutput":293},"src/components/Toolbar/index.ts":{"bytesInOutput":0},"src/components/Globe/index.ts":{"bytesInOutput":0},"src/components/index.ts":{"bytesInOutput":0},"src/components/Map/Map.tsx":{"bytesInOutput":5519},"src/components/Map/index.ts":{"bytesInOutput":0},"src/index.ts":{"bytesInOutput":0}},"bytes":29829},"dist/lib/browser/chunk-GMWLKTLN.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":430},"dist/lib/browser/chunk-GMWLKTLN.mjs":{"imports":[{"path":"dist/lib/browser/countries-110m-ZM3ZIEFS.mjs","kind":"dynamic-import"}],"exports":["loadTopology"],"inputs":{"src/data.ts":{"bytesInOutput":102}},"bytes":189},"dist/lib/browser/countries-110m-ZM3ZIEFS.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":352624},"dist/lib/browser/countries-110m-ZM3ZIEFS.mjs":{"imports":[],"exports":["default"],"entryPoint":"data/countries-110m.ts","inputs":{"data/countries-110m.ts":{"bytesInOutput":420420}},"bytes":420547}}}
1
+ {"inputs":{"data/countries-110m.ts":{"bytes":1301786,"imports":[],"format":"esm"},"src/data.ts":{"bytes":869,"imports":[{"path":"data/countries-110m.ts","kind":"dynamic-import","original":"../data/countries-110m.ts"}],"format":"esm"},"src/hooks/context.tsx":{"bytes":5766,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true}],"format":"esm"},"src/util/debug.ts":{"bytes":1445,"imports":[],"format":"esm"},"src/util/inertia.ts":{"bytes":21690,"imports":[{"path":"d3","kind":"import-statement","external":true},{"path":"versor","kind":"import-statement","external":true}],"format":"esm"},"src/util/path.ts":{"bytes":5718,"imports":[{"path":"d3","kind":"import-statement","external":true}],"format":"esm"},"src/util/render.ts":{"bytes":12238,"imports":[{"path":"d3","kind":"import-statement","external":true},{"path":"topojson-client","kind":"import-statement","external":true},{"path":"src/util/path.ts","kind":"import-statement","original":"./path"}],"format":"esm"},"src/util/index.ts":{"bytes":698,"imports":[{"path":"src/util/debug.ts","kind":"import-statement","original":"./debug"},{"path":"src/util/inertia.ts","kind":"import-statement","original":"./inertia"},{"path":"src/util/path.ts","kind":"import-statement","original":"./path"},{"path":"src/util/render.ts","kind":"import-statement","original":"./render"}],"format":"esm"},"src/hooks/useDrag.ts":{"bytes":4559,"imports":[{"path":"d3","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"src/util/index.ts","kind":"import-statement","original":"../util"}],"format":"esm"},"src/hooks/useGlobeZoomHandler.ts":{"bytes":2762,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/hooks/useMapZoomHandler.ts":{"bytes":2289,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/hooks/useSpinner.ts":{"bytes":5258,"imports":[{"path":"d3","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/hooks/useTour.ts":{"bytes":14990,"imports":[{"path":"d3","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"versor","kind":"import-statement","external":true},{"path":"src/util/index.ts","kind":"import-statement","original":"../util"}],"format":"esm"},"src/hooks/index.ts":{"bytes":948,"imports":[{"path":"src/hooks/context.tsx","kind":"import-statement","original":"./context"},{"path":"src/hooks/useDrag.ts","kind":"import-statement","original":"./useDrag"},{"path":"src/hooks/useGlobeZoomHandler.ts","kind":"import-statement","original":"./useGlobeZoomHandler"},{"path":"src/hooks/useMapZoomHandler.ts","kind":"import-statement","original":"./useMapZoomHandler"},{"path":"src/hooks/useSpinner.ts","kind":"import-statement","original":"./useSpinner"},{"path":"src/hooks/useTour.ts","kind":"import-statement","original":"./useTour"}],"format":"esm"},"src/translations.ts":{"bytes":1569,"imports":[],"format":"esm"},"src/components/Toolbar/Controls.tsx":{"bytes":5768,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"src/translations.ts","kind":"import-statement","original":"../../translations"}],"format":"esm"},"src/components/Toolbar/index.ts":{"bytes":470,"imports":[{"path":"src/components/Toolbar/Controls.tsx","kind":"import-statement","original":"./Controls"}],"format":"esm"},"src/components/Globe/Globe.tsx":{"bytes":26842,"imports":[{"path":"d3","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react-resize-detector","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"src/hooks/index.ts","kind":"import-statement","original":"../../hooks"},{"path":"src/util/index.ts","kind":"import-statement","original":"../../util"},{"path":"src/components/Toolbar/index.ts","kind":"import-statement","original":"../Toolbar"}],"format":"esm"},"src/components/Globe/index.ts":{"bytes":461,"imports":[{"path":"src/components/Globe/Globe.tsx","kind":"import-statement","original":"./Globe"}],"format":"esm"},"src/components/Map/Map.tsx":{"bytes":25487,"imports":[{"path":"leaflet/dist/leaflet.css","kind":"import-statement","external":true},{"path":"@radix-ui/react-context","kind":"import-statement","external":true},{"path":"leaflet","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react-dom/client","kind":"import-statement","external":true},{"path":"react-leaflet","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"src/components/Toolbar/index.ts","kind":"import-statement","original":"../Toolbar"}],"format":"esm"},"src/components/Map/index.ts":{"bytes":457,"imports":[{"path":"src/components/Map/Map.tsx","kind":"import-statement","original":"./Map"}],"format":"esm"},"src/components/index.ts":{"bytes":617,"imports":[{"path":"src/components/Globe/index.ts","kind":"import-statement","original":"./Globe"},{"path":"src/components/Map/index.ts","kind":"import-statement","original":"./Map"},{"path":"src/components/Toolbar/index.ts","kind":"import-statement","original":"./Toolbar"}],"format":"esm"},"src/index.ts":{"bytes":838,"imports":[{"path":"src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"src/data.ts","kind":"import-statement","original":"./data"},{"path":"src/hooks/index.ts","kind":"import-statement","original":"./hooks"},{"path":"src/translations.ts","kind":"import-statement","original":"./translations"},{"path":"src/util/index.ts","kind":"import-statement","original":"./util"}],"format":"esm"}},"outputs":{"dist/lib/browser/data.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":93},"dist/lib/browser/data.mjs":{"imports":[{"path":"dist/lib/browser/chunk-GMWLKTLN.mjs","kind":"import-statement"}],"exports":["loadTopology"],"entryPoint":"src/data.ts","inputs":{},"bytes":116},"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":70340},"dist/lib/browser/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-GMWLKTLN.mjs","kind":"import-statement"},{"path":"d3","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react-resize-detector","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"d3","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"d3","kind":"import-statement","external":true},{"path":"versor","kind":"import-statement","external":true},{"path":"d3","kind":"import-statement","external":true},{"path":"d3","kind":"import-statement","external":true},{"path":"topojson-client","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"d3","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"d3","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"versor","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"leaflet/dist/leaflet.css","kind":"import-statement","external":true},{"path":"@radix-ui/react-context","kind":"import-statement","external":true},{"path":"leaflet","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true},{"path":"react-dom/client","kind":"import-statement","external":true},{"path":"react-leaflet","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"@dxos/ui-theme","kind":"import-statement","external":true}],"exports":["ActionControls","Globe","GlobeContextProvider","Map","ZoomControls","closestPoint","controlPositions","createLayers","geoCircle","geoInertiaDrag","geoLine","geoPoint","geoToPosition","getDistance","loadTopology","positionToRotation","renderLayers","restrictAxis","timer","translationKey","translations","useDrag","useGlobeContext","useGlobeZoomHandler","useMapZoomHandler","useSpinner","useTour"],"entryPoint":"src/index.ts","inputs":{"src/components/Globe/Globe.tsx":{"bytesInOutput":5894},"src/hooks/context.tsx":{"bytesInOutput":1082},"src/hooks/index.ts":{"bytesInOutput":0},"src/hooks/useDrag.ts":{"bytesInOutput":862},"src/util/debug.ts":{"bytesInOutput":211},"src/util/index.ts":{"bytesInOutput":0},"src/util/inertia.ts":{"bytesInOutput":4562},"src/util/path.ts":{"bytesInOutput":1068},"src/util/render.ts":{"bytesInOutput":2469},"src/hooks/useGlobeZoomHandler.ts":{"bytesInOutput":522},"src/hooks/useMapZoomHandler.ts":{"bytesInOutput":426},"src/hooks/useSpinner.ts":{"bytesInOutput":1151},"src/hooks/useTour.ts":{"bytesInOutput":3306},"src/components/Toolbar/Controls.tsx":{"bytesInOutput":1461},"src/translations.ts":{"bytesInOutput":293},"src/components/Toolbar/index.ts":{"bytesInOutput":0},"src/components/Globe/index.ts":{"bytesInOutput":0},"src/components/index.ts":{"bytesInOutput":0},"src/components/Map/Map.tsx":{"bytesInOutput":5543},"src/components/Map/index.ts":{"bytesInOutput":0},"src/index.ts":{"bytesInOutput":0}},"bytes":29871},"dist/lib/browser/chunk-GMWLKTLN.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":430},"dist/lib/browser/chunk-GMWLKTLN.mjs":{"imports":[{"path":"dist/lib/browser/countries-110m-ZM3ZIEFS.mjs","kind":"dynamic-import"}],"exports":["loadTopology"],"inputs":{"src/data.ts":{"bytesInOutput":102}},"bytes":189},"dist/lib/browser/countries-110m-ZM3ZIEFS.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":352624},"dist/lib/browser/countries-110m-ZM3ZIEFS.mjs":{"imports":[],"exports":["default"],"entryPoint":"data/countries-110m.ts","inputs":{"data/countries-110m.ts":{"bytesInOutput":420420}},"bytes":420547}}}