@dxos/react-ui-geo 0.8.4-main.9be5663bfe → 0.8.4-main.abd8ff62ef
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/{countries-110m-ZM3ZIEFS.mjs → countries-110m-RE5RNRQG.mjs} +1 -1
- package/dist/lib/browser/data.mjs +4 -3
- package/dist/lib/browser/data.mjs.map +4 -4
- package/dist/lib/browser/index.mjs +1 -24
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/translations.mjs +19 -0
- package/dist/lib/browser/translations.mjs.map +7 -0
- package/dist/lib/node-esm/{countries-110m-3SFASWVD.mjs → countries-110m-4EDBXSFJ.mjs} +1 -1
- package/dist/lib/node-esm/data.mjs +5 -3
- package/dist/lib/node-esm/data.mjs.map +4 -4
- package/dist/lib/node-esm/index.mjs +1 -23
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/translations.mjs +21 -0
- package/dist/lib/node-esm/translations.mjs.map +7 -0
- package/dist/types/data/airports.d.ts +4 -4
- package/dist/types/data/airports.d.ts.map +1 -1
- package/dist/types/data/cities.d.ts.map +1 -1
- package/dist/types/data/countries-110m.d.ts.map +1 -1
- package/dist/types/data/countries-dots-3.d.ts.map +1 -1
- package/dist/types/data/countries-dots-4.d.ts.map +1 -1
- package/dist/types/src/components/Globe/Globe.d.ts +2 -2
- package/dist/types/src/components/Globe/Globe.d.ts.map +1 -1
- package/dist/types/src/components/Globe/Globe.stories.d.ts +2 -2
- package/dist/types/src/components/Globe/Globe.stories.d.ts.map +1 -1
- package/dist/types/src/components/Map/Map.d.ts +9 -1
- package/dist/types/src/components/Map/Map.d.ts.map +1 -1
- package/dist/types/src/components/Map/Map.stories.d.ts.map +1 -1
- package/dist/types/src/components/Toolbar/Controls.d.ts.map +1 -1
- package/dist/types/src/hooks/useDrag.d.ts.map +1 -1
- package/dist/types/src/hooks/useGlobeZoomHandler.d.ts +1 -1
- package/dist/types/src/hooks/useGlobeZoomHandler.d.ts.map +1 -1
- package/dist/types/src/hooks/useMapZoomHandler.d.ts +1 -1
- package/dist/types/src/hooks/useMapZoomHandler.d.ts.map +1 -1
- package/dist/types/src/hooks/useSpinner.d.ts.map +1 -1
- package/dist/types/src/hooks/useTour.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +0 -2
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +4 -4
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/util/debug.d.ts.map +1 -1
- package/dist/types/src/util/inertia.d.ts.map +1 -1
- package/dist/types/src/util/path.d.ts.map +1 -1
- package/dist/types/src/util/render.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +25 -23
- package/src/components/Toolbar/Controls.tsx +1 -1
- package/src/index.ts +0 -2
- package/dist/lib/browser/chunk-GMWLKTLN.mjs +0 -9
- package/dist/lib/browser/chunk-GMWLKTLN.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-JODBF4CC.mjs +0 -11
- package/dist/lib/node-esm/chunk-JODBF4CC.mjs.map +0 -7
- /package/dist/lib/browser/{countries-110m-ZM3ZIEFS.mjs.map → countries-110m-RE5RNRQG.mjs.map} +0 -0
- /package/dist/lib/node-esm/{countries-110m-3SFASWVD.mjs.map → countries-110m-4EDBXSFJ.mjs.map} +0 -0
|
@@ -37856,4 +37856,4 @@ var countries_110m_default = {
|
|
|
37856
37856
|
export {
|
|
37857
37857
|
countries_110m_default as default
|
|
37858
37858
|
};
|
|
37859
|
-
//# sourceMappingURL=countries-110m-
|
|
37859
|
+
//# sourceMappingURL=countries-110m-RE5RNRQG.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": [],
|
|
4
|
-
"sourcesContent": [],
|
|
5
|
-
"mappings": "",
|
|
6
|
-
"names": []
|
|
3
|
+
"sources": ["../../../src/data.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { type Topology } from 'topojson-specification';\n\nexport const loadTopology = async (): Promise<Topology> => {\n return (await import('../data/countries-110m.ts')).default;\n};\n"],
|
|
5
|
+
"mappings": ";AAMO,IAAMA,eAAe,YAAA;AAC1B,UAAQ,MAAM,OAAO,+BAAA,GAA8BC;AACrD;",
|
|
6
|
+
"names": ["loadTopology", "default"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
loadTopology
|
|
3
|
-
} from "./chunk-GMWLKTLN.mjs";
|
|
4
|
-
|
|
5
1
|
// src/components/Globe/Globe.tsx
|
|
6
2
|
import { easeLinear, easeSinOut, geoMercator, geoOrthographic, geoPath as geoPath2, geoTransverseMercator, interpolateNumber, transition } from "d3";
|
|
7
3
|
import React2, { forwardRef, useEffect as useEffect4, useImperativeHandle, useMemo as useMemo2, useRef, useState as useState3 } from "react";
|
|
@@ -599,23 +595,7 @@ var useTour = (controller, points, options = {}) => {
|
|
|
599
595
|
// src/components/Toolbar/Controls.tsx
|
|
600
596
|
import React from "react";
|
|
601
597
|
import { IconButton, Toolbar, useTranslation } from "@dxos/react-ui";
|
|
602
|
-
|
|
603
|
-
// src/translations.ts
|
|
604
|
-
var translationKey = "@dxos/react-ui-geo";
|
|
605
|
-
var translations = [
|
|
606
|
-
{
|
|
607
|
-
"en-US": {
|
|
608
|
-
[translationKey]: {
|
|
609
|
-
"zoom-in-icon.button": "Zoom in",
|
|
610
|
-
"zoom-out-icon.button": "Zoom out",
|
|
611
|
-
"start-icon.button": "Start",
|
|
612
|
-
"toggle-icon.button": "Toggle"
|
|
613
|
-
}
|
|
614
|
-
}
|
|
615
|
-
}
|
|
616
|
-
];
|
|
617
|
-
|
|
618
|
-
// src/components/Toolbar/Controls.tsx
|
|
598
|
+
import { translationKey } from "#translations";
|
|
619
599
|
var controlPositions = {
|
|
620
600
|
topleft: "top-2 left-2",
|
|
621
601
|
topright: "top-2 right-2",
|
|
@@ -1098,13 +1078,10 @@ export {
|
|
|
1098
1078
|
geoPoint,
|
|
1099
1079
|
geoToPosition,
|
|
1100
1080
|
getDistance,
|
|
1101
|
-
loadTopology,
|
|
1102
1081
|
positionToRotation,
|
|
1103
1082
|
renderLayers,
|
|
1104
1083
|
restrictAxis,
|
|
1105
1084
|
timer,
|
|
1106
|
-
translationKey,
|
|
1107
|
-
translations,
|
|
1108
1085
|
useDrag,
|
|
1109
1086
|
useGlobeContext,
|
|
1110
1087
|
useGlobeZoomHandler,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 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/
|
|
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 {\n type ThemeMode,\n type ThemedClassName,\n useComposedRefs,\n useControlledState,\n useDynamicRef,\n useThemeContext,\n} from '@dxos/react-ui';\nimport { composable, composableProps, mx } from '@dxos/ui-theme';\n\nimport { GlobeContext, type GlobeContextType, type Point, type Vector, useGlobeContext } 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 = Partial<Pick<GlobeContextType, 'center' | 'zoom' | 'translation' | 'rotation'>>;\n\nconst GlobeRoot = composable<HTMLDivElement, GlobeRootProps>(\n (\n { children, center: centerProp, zoom: zoomProp, translation: translationProp, rotation: rotationProp, ...props },\n forwardedRef,\n ) => {\n const localRef = useRef<HTMLDivElement>(null);\n const composedRef = useComposedRefs<HTMLDivElement>(localRef, forwardedRef);\n const { width, height } = useResizeDetector<HTMLDivElement>({ targetRef: localRef });\n\n const [center, setCenter] = useControlledState(centerProp);\n const [zoom, setZoom] = useControlledState(zoomProp ?? 4);\n const [translation, setTranslation] = useControlledState<Point>(translationProp);\n const [rotation, setRotation] = useControlledState<Vector>(rotationProp);\n\n return (\n <GlobeContext.Provider\n value={{\n size: { width, height },\n center,\n zoom,\n translation,\n rotation,\n setCenter,\n setZoom,\n setTranslation,\n setRotation,\n }}\n >\n <div {...composableProps(props, { classNames: 'relative dx-container' })} ref={composedRef}>\n {children}\n </div>\n </GlobeContext.Provider>\n );\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 { type Dispatch, type SetStateAction, createContext, useContext } from 'react';\n\nimport { raise } from '@dxos/debug';\n\nimport { type LatLngLiteral } from '../types';\n\n// TODO(burdon): Factor out common geometry types.\nexport type Size = { width: number; height: number };\n\nexport type Point = { x: number; y: number };\n\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\n/** @internal */\n// TODO(burdon): Replace with radix.\nexport const GlobeContext = createContext<GlobeContextType>(undefined);\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';\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';\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 } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { MapContainer, type MapContainerProps, Marker, Popup, TileLayer, useMap, useMapEvents } from 'react-leaflet';\n\nimport { type ThemedClassName, ThemeProvider, Tooltip } from '@dxos/react-ui';\nimport { composable, composableProps, 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 [MapContextProvider, useMapContext] = createContext<MapContextValue>('Map');\n\n//\n// Root\n//\n\ntype MapRootProps = Pick<MapContextValue, 'onChange'>;\n\n/**\n * Context provider for the map. Must wrap Map.Content.\n */\nconst MapRoot = composable<HTMLDivElement, MapRootProps>(({ children, onChange, ...props }, forwardedRef) => {\n // TODO(burdon): Use attention: const [attention, setAttention] = useState(false);\n const attention = false;\n return (\n <MapContextProvider attention={attention} onChange={onChange}>\n <div\n {...composableProps(props, {\n role: 'none',\n classNames: 'dx-container grid dx-focus-ring-inset',\n })}\n ref={forwardedRef}\n >\n {children}\n </div>\n </MapContextProvider>\n );\n});\n\nMapRoot.displayName = 'Map.Root';\n\n//\n// Content\n//\n\ntype MapContentProps = ThemedClassName<Omit<MapContainerProps, 'children'> & PropsWithChildren>;\n\n/**\n * https://react-leaflet.js.org/docs/api-map\n */\nconst MAP_CONTENT_NAME = 'Map.Content';\n\nconst MapContent = forwardRef<MapController, MapContentProps>(\n (\n { classNames, scrollWheelZoom = true, doubleClickZoom = true, touchZoom = true, center, zoom, children, ...props },\n forwardedRef,\n ) => {\n const { attention } = useMapContext(MAP_CONTENT_NAME);\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 <MapContainer\n {...props}\n className={mx('group relative grid bg-base-surface!', 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 ref={mapRef}\n >\n {children}\n </MapContainer>\n );\n },\n);\n\nMapContent.displayName = 'Map.Content';\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 Content: MapContent,\n Tiles: MapTiles,\n Markers: MapMarkers,\n Zoom: MapZoom,\n Action: MapAction,\n};\n\nexport {\n type MapController,\n type MapRootProps,\n type MapContentProps,\n type MapTilesProps,\n type MapMarkersProps,\n type MapControlProps,\n};\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", "useComposedRefs", "useControlledState", "useDynamicRef", "useThemeContext", "composable", "composableProps", "mx", "createContext", "useContext", "raise", "GlobeContext", "
|
|
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/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 {\n type ThemeMode,\n type ThemedClassName,\n useComposedRefs,\n useControlledState,\n useDynamicRef,\n useThemeContext,\n} from '@dxos/react-ui';\nimport { composable, composableProps, mx } from '@dxos/ui-theme';\n\nimport { GlobeContext, type GlobeContextType, type Point, type Vector, useGlobeContext } 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 = Partial<Pick<GlobeContextType, 'center' | 'zoom' | 'translation' | 'rotation'>>;\n\nconst GlobeRoot = composable<HTMLDivElement, GlobeRootProps>(\n (\n { children, center: centerProp, zoom: zoomProp, translation: translationProp, rotation: rotationProp, ...props },\n forwardedRef,\n ) => {\n const localRef = useRef<HTMLDivElement>(null);\n const composedRef = useComposedRefs<HTMLDivElement>(localRef, forwardedRef);\n const { width, height } = useResizeDetector<HTMLDivElement>({ targetRef: localRef });\n\n const [center, setCenter] = useControlledState(centerProp);\n const [zoom, setZoom] = useControlledState(zoomProp ?? 4);\n const [translation, setTranslation] = useControlledState<Point>(translationProp);\n const [rotation, setRotation] = useControlledState<Vector>(rotationProp);\n\n return (\n <GlobeContext.Provider\n value={{\n size: { width, height },\n center,\n zoom,\n translation,\n rotation,\n setCenter,\n setZoom,\n setTranslation,\n setRotation,\n }}\n >\n <div {...composableProps(props, { classNames: 'relative dx-container' })} ref={composedRef}>\n {children}\n </div>\n </GlobeContext.Provider>\n );\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 { type Dispatch, type SetStateAction, createContext, useContext } from 'react';\n\nimport { raise } from '@dxos/debug';\n\nimport { type LatLngLiteral } from '../types';\n\n// TODO(burdon): Factor out common geometry types.\nexport type Size = { width: number; height: number };\n\nexport type Point = { x: number; y: number };\n\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\n/** @internal */\n// TODO(burdon): Replace with radix.\nexport const GlobeContext = createContext<GlobeContextType>(undefined);\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';\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';\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 '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 } from 'react';\nimport { createRoot } from 'react-dom/client';\nimport { MapContainer, type MapContainerProps, Marker, Popup, TileLayer, useMap, useMapEvents } from 'react-leaflet';\n\nimport { type ThemedClassName, ThemeProvider, Tooltip } from '@dxos/react-ui';\nimport { composable, composableProps, 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 [MapContextProvider, useMapContext] = createContext<MapContextValue>('Map');\n\n//\n// Root\n//\n\ntype MapRootProps = Pick<MapContextValue, 'onChange'>;\n\n/**\n * Context provider for the map. Must wrap Map.Content.\n */\nconst MapRoot = composable<HTMLDivElement, MapRootProps>(({ children, onChange, ...props }, forwardedRef) => {\n // TODO(burdon): Use attention: const [attention, setAttention] = useState(false);\n const attention = false;\n return (\n <MapContextProvider attention={attention} onChange={onChange}>\n <div\n {...composableProps(props, {\n role: 'none',\n classNames: 'dx-container grid dx-focus-ring-inset',\n })}\n ref={forwardedRef}\n >\n {children}\n </div>\n </MapContextProvider>\n );\n});\n\nMapRoot.displayName = 'Map.Root';\n\n//\n// Content\n//\n\ntype MapContentProps = ThemedClassName<Omit<MapContainerProps, 'children'> & PropsWithChildren>;\n\n/**\n * https://react-leaflet.js.org/docs/api-map\n */\nconst MAP_CONTENT_NAME = 'Map.Content';\n\nconst MapContent = forwardRef<MapController, MapContentProps>(\n (\n { classNames, scrollWheelZoom = true, doubleClickZoom = true, touchZoom = true, center, zoom, children, ...props },\n forwardedRef,\n ) => {\n const { attention } = useMapContext(MAP_CONTENT_NAME);\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 <MapContainer\n {...props}\n className={mx('group relative grid bg-base-surface!', 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 ref={mapRef}\n >\n {children}\n </MapContainer>\n );\n },\n);\n\nMapContent.displayName = 'Map.Content';\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 Content: MapContent,\n Tiles: MapTiles,\n Markers: MapMarkers,\n Zoom: MapZoom,\n Action: MapAction,\n};\n\nexport {\n type MapController,\n type MapRootProps,\n type MapContentProps,\n type MapTilesProps,\n type MapMarkersProps,\n type MapControlProps,\n};\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", "useComposedRefs", "useControlledState", "useDynamicRef", "useThemeContext", "composable", "composableProps", "mx", "createContext", "useContext", "raise", "GlobeContext", "undefined", "useGlobeContext", "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", "inertia", "geoInertiaDragHelper", "rotation", "rotate", "xAxis", "start", "move", "end", "stop", "finish", "time", "hold", "call", "on", "opt", "v0", "r0", "q0", "v10", "v11", "q10", "inertiaHelper", "cartesian", "invert", "position", "inv", "isNaN", "v1", "q1", "multiply", "delta", "r1", "r2", "velocity", "t", "A", "limit", "B", "Math", "log", "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", "radius", "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", "event", "setZoom", "zoom", "useCallback", "useMapZoomHandler", "controller", "event", "setZoom", "scale", "timer", "d3Timer", "useEffect", "useState", "useSpinner", "controller", "options", "running", "setRunning", "start", "delta", "t", "lastRotation", "projection", "rotate", "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", "controlPositions", "topleft", "topright", "bottomleft", "bottomright", "ZoomControls", "classNames", "onAction", "t", "Root", "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", "composable", "children", "center", "centerProp", "zoom", "zoomProp", "translation", "translationProp", "rotation", "rotationProp", "props", "forwardedRef", "localRef", "useRef", "composedRef", "useComposedRefs", "width", "height", "useResizeDetector", "targetRef", "setCenter", "useControlledState", "setZoom", "setTranslation", "setRotation", "React", "GlobeContext", "Provider", "value", "size", "div", "composableProps", "classNames", "ref", "GlobeCanvas", "forwardRef", "projection", "projectionProp", "topology", "features", "styles", "stylesProp", "themeMode", "useThemeContext", "useMemo", "canvas", "setCanvas", "useState", "canvasRef", "layers", "timer", "createLayers", "useGlobeContext", "zoomRef", "useDynamicRef", "useEffect", "positionToRotation", "geoToPosition", "zooming", "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", "className", "mx", "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", "createRoot", "MapContainer", "Marker", "Popup", "TileLayer", "useMap", "useMapEvents", "ThemeProvider", "Tooltip", "composable", "composableProps", "defaultTx", "mx", "defaults", "center", "lat", "lng", "zoom", "MapContextProvider", "useMapContext", "createContext", "MapRoot", "composable", "children", "onChange", "props", "forwardedRef", "attention", "React", "div", "composableProps", "role", "classNames", "ref", "displayName", "MAP_CONTENT_NAME", "MapContent", "forwardRef", "scrollWheelZoom", "doubleClickZoom", "touchZoom", "mapRef", "useRef", "map", "current", "useImperativeHandle", "setCenter", "setView", "setZoom", "cb", "getZoom", "useEffect", "enable", "disable", "MapContainer", "className", "mx", "attributionControl", "zoomControl", "whenReady", "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", "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", "Content", "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":2415,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/debug","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":12234,"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":5254,"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":29745,"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":27690,"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":71270},"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":"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","GlobeContext","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":6626},"src/hooks/context.tsx":{"bytesInOutput":258},"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":1454},"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":6017},"src/components/Map/index.ts":{"bytesInOutput":0},"src/index.ts":{"bytesInOutput":0}},"bytes":30238},"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":1301697,"imports":[],"format":"esm"},"src/data.ts":{"bytes":791,"imports":[{"path":"data/countries-110m.ts","kind":"dynamic-import","original":"../data/countries-110m.ts"}],"format":"esm"},"src/hooks/context.tsx":{"bytes":2331,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true}],"format":"esm"},"src/util/debug.ts":{"bytes":1365,"imports":[],"format":"esm"},"src/util/inertia.ts":{"bytes":21608,"imports":[{"path":"d3","kind":"import-statement","external":true},{"path":"versor","kind":"import-statement","external":true}],"format":"esm"},"src/util/path.ts":{"bytes":5639,"imports":[{"path":"d3","kind":"import-statement","external":true}],"format":"esm"},"src/util/render.ts":{"bytes":12153,"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":618,"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":4476,"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":2663,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/hooks/useMapZoomHandler.ts":{"bytes":2196,"imports":[{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/hooks/useSpinner.ts":{"bytes":5168,"imports":[{"path":"d3","kind":"import-statement","external":true},{"path":"react","kind":"import-statement","external":true}],"format":"esm"},"src/hooks/useTour.ts":{"bytes":14903,"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":867,"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/components/Toolbar/Controls.tsx":{"bytes":5657,"imports":[{"path":"react","kind":"import-statement","external":true},{"path":"@dxos/react-ui","kind":"import-statement","external":true},{"path":"#translations","kind":"import-statement","external":true}],"format":"esm"},"src/components/Toolbar/index.ts":{"bytes":376,"imports":[{"path":"src/components/Toolbar/Controls.tsx","kind":"import-statement","original":"./Controls"}],"format":"esm"},"src/components/Globe/Globe.tsx":{"bytes":29652,"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":369,"imports":[{"path":"src/components/Globe/Globe.tsx","kind":"import-statement","original":"./Globe"}],"format":"esm"},"src/components/Map/Map.tsx":{"bytes":27597,"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":363,"imports":[{"path":"src/components/Map/Map.tsx","kind":"import-statement","original":"./Map"}],"format":"esm"},"src/components/index.ts":{"bytes":531,"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":583,"imports":[{"path":"src/components/index.ts","kind":"import-statement","original":"./components"},{"path":"src/hooks/index.ts","kind":"import-statement","original":"./hooks"},{"path":"src/util/index.ts","kind":"import-statement","original":"./util"}],"format":"esm"},"src/translations.ts":{"bytes":1483,"imports":[],"format":"esm"}},"outputs":{"dist/lib/browser/data.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":430},"dist/lib/browser/data.mjs":{"imports":[{"path":"dist/lib/browser/countries-110m-RE5RNRQG.mjs","kind":"dynamic-import"}],"exports":["loadTopology"],"entryPoint":"src/data.ts","inputs":{"src/data.ts":{"bytesInOutput":102}},"bytes":178},"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":70400},"dist/lib/browser/index.mjs":{"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":"react","kind":"import-statement","external":true},{"path":"@dxos/debug","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":"#translations","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","GlobeContext","Map","ZoomControls","closestPoint","controlPositions","createLayers","geoCircle","geoInertiaDrag","geoLine","geoPoint","geoToPosition","getDistance","positionToRotation","renderLayers","restrictAxis","timer","useDrag","useGlobeContext","useGlobeZoomHandler","useMapZoomHandler","useSpinner","useTour"],"entryPoint":"src/index.ts","inputs":{"src/components/Globe/Globe.tsx":{"bytesInOutput":6626},"src/hooks/context.tsx":{"bytesInOutput":258},"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":1502},"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":6017},"src/components/Map/index.ts":{"bytesInOutput":0},"src/index.ts":{"bytesInOutput":0}},"bytes":29823},"dist/lib/browser/translations.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":750},"dist/lib/browser/translations.mjs":{"imports":[],"exports":["translationKey","translations"],"entryPoint":"src/translations.ts","inputs":{"src/translations.ts":{"bytesInOutput":293}},"bytes":403},"dist/lib/browser/countries-110m-RE5RNRQG.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":352624},"dist/lib/browser/countries-110m-RE5RNRQG.mjs":{"imports":[],"exports":["default"],"entryPoint":"data/countries-110m.ts","inputs":{"data/countries-110m.ts":{"bytesInOutput":420420}},"bytes":420547}}}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// src/translations.ts
|
|
2
|
+
var translationKey = "@dxos/react-ui-geo";
|
|
3
|
+
var translations = [
|
|
4
|
+
{
|
|
5
|
+
"en-US": {
|
|
6
|
+
[translationKey]: {
|
|
7
|
+
"zoom-in-icon.button": "Zoom in",
|
|
8
|
+
"zoom-out-icon.button": "Zoom out",
|
|
9
|
+
"start-icon.button": "Start",
|
|
10
|
+
"toggle-icon.button": "Toggle"
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
];
|
|
15
|
+
export {
|
|
16
|
+
translationKey,
|
|
17
|
+
translations
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=translations.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/translations.ts"],
|
|
4
|
+
"sourcesContent": ["//\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"],
|
|
5
|
+
"mappings": ";AAMO,IAAMA,iBAAiB;AAEvB,IAAMC,eAAe;EAC1B;IACE,SAAS;MACP,CAACD,cAAAA,GAAiB;QAChB,uBAAuB;QACvB,wBAAwB;QACxB,qBAAqB;QACrB,sBAAsB;MACxB;IACF;EACF;;",
|
|
6
|
+
"names": ["translationKey", "translations"]
|
|
7
|
+
}
|
|
@@ -37858,4 +37858,4 @@ var countries_110m_default = {
|
|
|
37858
37858
|
export {
|
|
37859
37859
|
countries_110m_default as default
|
|
37860
37860
|
};
|
|
37861
|
-
//# sourceMappingURL=countries-110m-
|
|
37861
|
+
//# sourceMappingURL=countries-110m-4EDBXSFJ.mjs.map
|