@dxos/solid-ui-geo 0.0.0 → 0.8.4-main.59c2e9b
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/chunk-KONL6N4F.mjs +9 -0
- package/dist/lib/browser/chunk-KONL6N4F.mjs.map +7 -0
- package/dist/lib/browser/countries-110m-6FO6R2F2.mjs +37859 -0
- package/dist/lib/browser/countries-110m-6FO6R2F2.mjs.map +7 -0
- package/dist/lib/browser/data.mjs +7 -0
- package/dist/lib/browser/data.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +1172 -0
- package/dist/lib/browser/index.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -0
- package/dist/lib/node-esm/chunk-KNEGK7HI.mjs +11 -0
- package/dist/lib/node-esm/chunk-KNEGK7HI.mjs.map +7 -0
- package/dist/lib/node-esm/countries-110m-UQ4O6NQR.mjs +37861 -0
- package/dist/lib/node-esm/countries-110m-UQ4O6NQR.mjs.map +7 -0
- package/dist/lib/node-esm/data.mjs +8 -0
- package/dist/lib/node-esm/data.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +1173 -0
- package/dist/lib/node-esm/index.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -0
- package/dist/types/data/airports.d.ts +18 -0
- package/dist/types/data/airports.d.ts.map +1 -0
- package/dist/types/data/countries-110m.d.ts +36 -0
- package/dist/types/data/countries-110m.d.ts.map +1 -0
- package/dist/types/data/countries-dots-3.d.ts +9 -0
- package/dist/types/data/countries-dots-3.d.ts.map +1 -0
- package/dist/types/src/components/Globe/Globe.d.ts +54 -0
- package/dist/types/src/components/Globe/Globe.d.ts.map +1 -0
- package/dist/types/src/components/Globe/Globe.solid-stories.d.ts +29 -0
- package/dist/types/src/components/Globe/Globe.solid-stories.d.ts.map +1 -0
- package/dist/types/src/components/Globe/index.d.ts +2 -0
- package/dist/types/src/components/Globe/index.d.ts.map +1 -0
- package/dist/types/src/components/Map/Map.d.ts +38 -0
- package/dist/types/src/components/Map/Map.d.ts.map +1 -0
- package/dist/types/src/components/Map/Map.solid-stories.d.ts +17 -0
- package/dist/types/src/components/Map/Map.solid-stories.d.ts.map +1 -0
- package/dist/types/src/components/Map/index.d.ts +2 -0
- package/dist/types/src/components/Map/index.d.ts.map +1 -0
- package/dist/types/src/components/Toolbar/Controls.d.ts +11 -0
- package/dist/types/src/components/Toolbar/Controls.d.ts.map +1 -0
- package/dist/types/src/components/Toolbar/index.d.ts +2 -0
- package/dist/types/src/components/Toolbar/index.d.ts.map +1 -0
- package/dist/types/src/components/index.d.ts +4 -0
- package/dist/types/src/components/index.d.ts.map +1 -0
- package/dist/types/src/data.d.ts +3 -0
- package/dist/types/src/data.d.ts.map +1 -0
- package/dist/types/src/hooks/context.d.ts +33 -0
- package/dist/types/src/hooks/context.d.ts.map +1 -0
- package/dist/types/src/hooks/index.d.ts +7 -0
- package/dist/types/src/hooks/index.d.ts.map +1 -0
- package/dist/types/src/hooks/useDrag.d.ts +16 -0
- package/dist/types/src/hooks/useDrag.d.ts.map +1 -0
- package/dist/types/src/hooks/useGlobeZoomHandler.d.ts +3 -0
- package/dist/types/src/hooks/useGlobeZoomHandler.d.ts.map +1 -0
- package/dist/types/src/hooks/useMapZoomHandler.d.ts +3 -0
- package/dist/types/src/hooks/useMapZoomHandler.d.ts.map +1 -0
- package/dist/types/src/hooks/useSpinner.d.ts +14 -0
- package/dist/types/src/hooks/useSpinner.d.ts.map +1 -0
- package/dist/types/src/hooks/useTour.d.ts +22 -0
- package/dist/types/src/hooks/useTour.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +7 -0
- package/dist/types/src/index.d.ts.map +1 -0
- package/dist/types/src/translations.d.ts +12 -0
- package/dist/types/src/translations.d.ts.map +1 -0
- package/dist/types/src/types.d.ts +8 -0
- package/dist/types/src/types.d.ts.map +1 -0
- package/dist/types/src/util/debug.d.ts +2 -0
- package/dist/types/src/util/debug.d.ts.map +1 -0
- package/dist/types/src/util/index.d.ts +5 -0
- package/dist/types/src/util/index.d.ts.map +1 -0
- package/dist/types/src/util/inertia.d.ts +15 -0
- package/dist/types/src/util/inertia.d.ts.map +1 -0
- package/dist/types/src/util/path.d.ts +12 -0
- package/dist/types/src/util/path.d.ts.map +1 -0
- package/dist/types/src/util/render.d.ts +26 -0
- package/dist/types/src/util/render.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -0
- package/package.json +12 -8
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
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/components/Map/Map.tsx", "../../../src/translations.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { createResizeObserver } from '@solid-primitives/resize-observer';\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 { type Accessor, type JSX, type Setter, Show, createEffect, createMemo, createSignal } from 'solid-js';\nimport { type Topology } from 'topojson-specification';\n\nimport { GlobeContextProvider, type GlobeContextProviderProps, 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<string, 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 zoom: number;\n translation: Accessor<{ x: number; y: number } | undefined>;\n rotation: Accessor<[number, number, number] | undefined>;\n setZoom: (zoom: number | ((prev: number) => number)) => void;\n setTranslation: Setter<{ x: number; y: number } | undefined>;\n setRotation: (rotation: [number, number, number]) => void;\n};\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 = {\n children: JSX.Element;\n class?: string;\n} & Partial<GlobeContextProviderProps> &\n JSX.HTMLAttributes<HTMLDivElement>;\n\nconst GlobeRoot = (props: GlobeRootProps) => {\n let containerRef: HTMLDivElement | undefined;\n const [size, setSize] = createSignal({ width: 0, height: 0 });\n\n // Use @solid-primitives/resize-observer\n createResizeObserver(\n () => containerRef,\n ({ width, height }) => {\n setSize({ width, height });\n },\n );\n\n return (\n <div ref={containerRef} class={`relative flex grow overflow-hidden ${props.class ?? ''}`} {...props}>\n <GlobeContextProvider size={size()} {...props}>\n {props.children}\n </GlobeContextProvider>\n </div>\n );\n};\n\n//\n// Canvas\n//\n\ntype GlobeCanvasProps = {\n ref?: (controller: GlobeController) => void;\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\nconst GlobeCanvas = (props: GlobeCanvasProps) => {\n const themeMode = 'dark'; // TODO: Get from theme context\n const styles = createMemo(() => props.styles ?? defaultStyles[themeMode]);\n\n // Canvas.\n const [canvas, setCanvas] = createSignal<HTMLCanvasElement | null>(null);\n\n // Projection.\n const projection = createMemo(() => getProjection(props.projection));\n\n // Layers.\n const layers = createMemo(() => {\n return timer(() => createLayers(props.topology as Topology, props.features, styles()));\n });\n\n // State.\n const { size, center, zoom, translation, rotation, setCenter, setZoom, setTranslation, setRotation } =\n useGlobeContext();\n\n let zoomValue = zoom();\n let zooming = false;\n\n createEffect(() => {});\n\n // Update rotation.\n createEffect(() => {\n const c = center();\n if (c) {\n setZoom(1);\n setRotation(positionToRotation(geoToPosition(c)));\n }\n });\n\n // External controller.\n createEffect(() => {\n const canvasEl = canvas();\n if (canvasEl && props.ref) {\n const controller: GlobeController = {\n canvas: canvasEl,\n projection: projection(),\n get zoom() {\n return zoomValue;\n },\n translation,\n rotation,\n setZoom: (s) => {\n if (typeof s === 'function') {\n const is = interpolateNumber(zoomValue, s(zoomValue));\n // Stop easing if already zooming.\n transition()\n .ease(zooming ? easeLinear : easeSinOut)\n .duration(200)\n .tween('scale', () => (t) => {\n const newZoom = is(t);\n zoomValue = newZoom;\n setZoom(newZoom);\n })\n .on('end', () => {\n zooming = false;\n });\n } else {\n zoomValue = s;\n setZoom(s);\n }\n },\n setTranslation,\n setRotation,\n };\n props.ref(controller);\n }\n });\n\n // https://d3js.org/d3-geo/path#geoPath\n // https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/getContext\n const generator = createMemo(() => {\n const canvasEl = canvas();\n const proj = projection();\n return canvasEl && proj && geoPath(proj, canvasEl.getContext('2d', { alpha: false }));\n });\n\n // Render on change.\n createEffect(() => {\n const canvasEl = canvas();\n const proj = projection();\n const gen = generator();\n const z = zoom();\n const t = translation();\n const r = rotation();\n const s = size();\n\n if (canvasEl && proj && gen) {\n timer(() => {\n // https://d3js.org/d3-geo/projection\n proj\n .scale((Math.min(s.width, s.height) / 2) * z)\n .translate([s.width / 2 + (t?.x ?? 0), s.height / 2 + (t?.y ?? 0)])\n .rotate(r ?? [0, 0, 0]);\n\n renderLayers(gen, layers(), z, styles());\n });\n }\n });\n\n return (\n <Show when={size().width > 0 && size().height > 0}>\n <canvas ref={setCanvas} width={size().width} height={size().height} />\n </Show>\n );\n};\n\n//\n// Debug\n//\n\nconst GlobeDebug = (props: { position?: ControlPosition }) => {\n const { size, zoom, translation, rotation } = useGlobeContext();\n return (\n <div\n class={`z-10 absolute w-96 p-2 overflow-hidden border border-green-700 rounded ${\n controlPositions[props.position ?? 'topleft']\n }`}\n >\n <pre class='font-mono text-xs text-green-700'>\n {JSON.stringify({ size, zoom: zoom(), translation: translation(), rotation: rotation() }, null, 2)}\n </pre>\n </div>\n );\n};\n\n//\n// Panel\n//\n\nconst GlobePanel = (props: { children: JSX.Element; position?: ControlPosition; class?: string }) => {\n return (\n <div class={`z-10 absolute overflow-hidden ${controlPositions[props.position ?? 'topleft']} ${props.class ?? ''}`}>\n {props.children}\n </div>\n );\n};\n\n//\n// Controls\n//\n\nconst CustomControl = (props: { children: JSX.Element; position: ControlPosition }) => {\n return <div class={`z-10 absolute overflow-hidden ${controlPositions[props.position]}`}>{props.children}</div>;\n};\n\ntype GlobeControlProps = { position?: ControlPosition } & Pick<ControlProps, 'onAction'>;\n\nconst GlobeZoom = (props: GlobeControlProps) => (\n <CustomControl position={props.position ?? 'bottomleft'}>\n <ZoomControls onAction={props.onAction} />\n </CustomControl>\n);\n\nconst GlobeAction = (props: GlobeControlProps) => (\n <CustomControl position={props.position ?? 'bottomright'}>\n <ActionControls onAction={props.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 2025 DXOS.org\n//\n\nimport { type Accessor, type JSX, type Setter, createContext, createEffect, createSignal, useContext } from 'solid-js';\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 };\nexport type Point = { x: number; y: number };\nexport type Vector = [number, number, number];\n\nexport type GlobeContextType = {\n size: Accessor<Size>;\n center: Accessor<LatLngLiteral | undefined>;\n zoom: Accessor<number>;\n translation: Accessor<Point | undefined>;\n rotation: Accessor<Vector | undefined>;\n setCenter: Setter<LatLngLiteral | undefined>;\n setZoom: Setter<number>;\n setTranslation: Setter<Point | undefined>;\n setRotation: Setter<Vector | undefined>;\n};\n\nconst defaults = {\n center: { lat: 51, lng: 0 } as LatLngLiteral,\n zoom: 4,\n} as const;\n\nconst GlobeContext = createContext<GlobeContextType>();\n\nexport type GlobeContextProviderProps = {\n children: JSX.Element;\n size?: Size;\n center?: LatLngLiteral;\n zoom?: number;\n translation?: Point;\n rotation?: Vector;\n};\n\nexport const GlobeContextProvider = (props: GlobeContextProviderProps) => {\n const [size, setSize] = createSignal<Size>(props.size ?? { width: 0, height: 0 });\n const [center, setCenter] = createSignal<LatLngLiteral | undefined>(props.center ?? defaults.center);\n const [zoom, setZoom] = createSignal(props.zoom ?? defaults.zoom);\n const [translation, setTranslation] = createSignal<Point | undefined>(props.translation);\n const [rotation, setRotation] = createSignal<Vector | undefined>(props.rotation);\n\n // Update size when prop changes\n createEffect(() => {\n if (props.size) {\n setSize(props.size);\n }\n });\n\n return (\n <GlobeContext.Provider\n value={{\n size,\n center,\n zoom,\n translation,\n rotation,\n setCenter,\n setZoom,\n setTranslation,\n setRotation,\n }}\n >\n {props.children}\n </GlobeContext.Provider>\n );\n};\n\nexport const useGlobeContext = () => {\n return useContext(GlobeContext) ?? raise(new Error('Missing GlobeContext'));\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { select } from 'd3';\nimport { createEffect, onCleanup } from 'solid-js';\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 createEffect(() => {\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 onCleanup(() => {\n cancelDrag(select(canvas));\n });\n });\n};\n\nconst cancelDrag = (node) => node.on('.drag', null);\n", "//\n// Copyright 2025 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 2025 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 2025 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 2025 DXOS.org\n//\n\nimport { type GeoPath, type GeoPermissibleObjects, geoGraticule } from 'd3';\nimport { feature, mesh } from 'topojson-client';\nimport { type Topology } from 'topojson-specification';\n\nimport { type LatLngLiteral } from '../types';\n\nimport { geoLine, geoPoint } from './path';\n\nexport type Styles = Record<string, any>;\n\nexport type Style =\n | 'background'\n | 'water'\n | 'graticule'\n | 'land'\n | 'border'\n | 'dots'\n | 'point'\n | 'line'\n | 'cursor'\n | 'arc';\n\nexport type StyleSet = Partial<Record<Style, Styles>>;\n\nexport type Features = {\n points?: LatLngLiteral[];\n lines?: { source: LatLngLiteral; target: LatLngLiteral }[];\n};\n\nexport type Layer = {\n styles: Styles;\n path: GeoPermissibleObjects;\n};\n\n/**\n * Create rendering layers.\n */\nexport const createLayers = (topology: Topology, features: Features, styles: StyleSet): Layer[] => {\n const layers: Layer[] = [];\n\n if (styles.water) {\n layers.push({\n styles: styles.water,\n path: {\n type: 'Sphere',\n },\n });\n }\n\n if (styles.graticule) {\n layers.push({\n styles: styles.graticule,\n path: geoGraticule().step([6, 6])(),\n });\n }\n\n //\n // Topology.\n //\n\n if (topology) {\n if (topology.objects.land && styles.land) {\n layers.push({\n styles: styles.land,\n path: feature(topology, topology.objects.land),\n });\n }\n\n if (topology.objects.countries && styles.border) {\n layers.push({\n styles: styles.border,\n path: mesh(topology, topology.objects.countries, (a: any, b: any) => a !== b),\n });\n }\n\n if (topology.objects.dots && styles.dots) {\n layers.push({\n styles: styles.dots,\n path: topology.objects.dots as any, // TODO(burdon): Type.\n });\n }\n }\n\n //\n // Features.\n //\n\n if (features) {\n const { points, lines } = features;\n\n if (points && styles.point) {\n layers.push({\n styles: styles.point,\n path: {\n type: 'GeometryCollection',\n geometries: points.map((point) => geoPoint(point)),\n },\n });\n }\n\n if (lines && styles.line) {\n layers.push({\n styles: styles.line,\n path: {\n type: 'GeometryCollection',\n geometries: lines.map(({ source, target }) => geoLine(source, target)),\n },\n });\n }\n }\n\n return layers;\n};\n\n/**\n * Render layers created above.\n */\nexport const renderLayers = (generator: GeoPath, layers: Layer[] = [], scale: number, styles: StyleSet) => {\n const context: CanvasRenderingContext2D = generator.context();\n const {\n canvas: { width, height },\n } = context;\n context.reset();\n\n // Clear background.\n if (styles.background) {\n context.fillStyle = styles.background.fillStyle;\n context.fillRect(0, 0, width, height);\n } else {\n context.clearRect(0, 0, width, height);\n }\n\n // Render features.\n // https://github.com/d3/d3-geo#_path\n layers.forEach(({ path, styles }) => {\n context.save();\n let fill = false;\n let stroke = false;\n if (styles) {\n Object.entries(styles).forEach(([key, value]) => {\n if (key === 'pointRadius') {\n generator.pointRadius(value * scale);\n } else {\n context[key] = value;\n fill ||= key === 'fillStyle';\n stroke ||= key === 'strokeStyle';\n }\n });\n }\n\n context.beginPath();\n\n generator(path);\n fill && context.fill();\n stroke && context.stroke();\n context.restore();\n });\n\n return context;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type ControlProps, type GlobeController } from '../components';\n\nconst ZOOM_FACTOR = 0.1;\n\nexport const useGlobeZoomHandler = (controller: GlobeController | null | undefined): ControlProps['onAction'] => {\n return (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};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type ControlProps, type MapController } from '../components';\n\nexport const useMapZoomHandler = (controller: MapController | null | undefined): ControlProps['onAction'] => {\n return (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};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { timer as d3Timer } from 'd3';\nimport { type Timer } from 'd3';\nimport { createEffect, createSignal, onCleanup } from 'solid-js';\n\nimport { type GlobeController } from '../components';\n\nimport { type Vector } from './context';\n\nexport type SpinnerOptions = {\n disabled?: boolean;\n delta?: Vector;\n};\n\n/**\n * Rotates globe.\n */\nexport const useSpinner = (controller?: GlobeController | null, options: SpinnerOptions = {}) => {\n const [running, setRunning] = createSignal(false);\n\n createEffect(() => {\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 onCleanup(() => stop());\n });\n\n return {\n start: () => {\n if (!options.disabled) {\n setRunning(true);\n }\n },\n stop: () => setRunning(false),\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { selection as d3Selection, geoDistance, geoInterpolate, geoPath } from 'd3';\nimport { type Accessor, type Setter, createEffect, createSignal, onCleanup } from 'solid-js';\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): { running: Accessor<boolean>; setRunning: Setter<boolean> } => {\n const selection = d3Selection();\n const [running, setRunning] = createSignal(options.running ?? false);\n\n createEffect(() => {\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 onCleanup(() => {\n clearTimeout(t);\n selection.interrupt(TRANSITION_NAME);\n });\n }\n });\n\n return { running, setRunning };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type ControlPosition } from 'leaflet';\nimport { type JSX } from 'solid-js';\n\nexport type ControlAction = 'toggle' | 'start' | 'zoom-in' | 'zoom-out';\n\nexport type ControlProps = {\n class?: string;\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 = (props: ControlProps): JSX.Element => {\n return (\n <div class={`flex flex-row gap-2 ${props.class ?? ''}`}>\n <button\n type='button'\n class='dx-button dx-focus-ring w-10 h-10 min-bs-[2.5rem] pli-3 rounded-sm flex items-center justify-center'\n onClick={() => props.onAction?.('zoom-in')}\n title='Zoom in'\n >\n <span class='text-xl'>+</span>\n </button>\n <button\n type='button'\n class='dx-button dx-focus-ring w-10 h-10 min-bs-[2.5rem] pli-3 rounded-sm flex items-center justify-center'\n onClick={() => props.onAction?.('zoom-out')}\n title='Zoom out'\n >\n <span class='text-xl'>−</span>\n </button>\n </div>\n );\n};\n\nexport const ActionControls = (props: ControlProps): JSX.Element => {\n return (\n <div class={`flex flex-row gap-2 ${props.class ?? ''}`}>\n <button\n type='button'\n class='dx-button dx-focus-ring w-10 h-10 min-bs-[2.5rem] pli-3 rounded-sm flex items-center justify-center'\n onClick={() => props.onAction?.('start')}\n title='Start'\n >\n <span class='text-xl'>▶</span>\n </button>\n <button\n type='button'\n class='dx-button dx-focus-ring w-10 h-10 min-bs-[2.5rem] pli-3 rounded-sm flex items-center justify-center'\n onClick={() => props.onAction?.('toggle')}\n title='Toggle'\n >\n <span class='text-xl'>🌍</span>\n </button>\n </div>\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport 'leaflet/dist/leaflet.css';\n\nimport L, { type ControlPosition, type LatLngLiteral, latLngBounds } from 'leaflet';\nimport {\n type Accessor,\n type JSX,\n type Setter,\n Show,\n createContext,\n createEffect,\n createSignal,\n onCleanup,\n onMount,\n useContext,\n} from 'solid-js';\n\nimport { type GeoMarker } from '../../types';\nimport { ActionControls, type ControlProps, ZoomControls, controlPositions } from '../Toolbar';\n\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\nexport type 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 map: Accessor<L.Map | null>;\n attention: Accessor<boolean>;\n setAttention: Setter<boolean>;\n onChange?: (ev: { center: LatLngLiteral; zoom: number }) => void;\n};\n\nconst MapContext = createContext<MapContextValue>();\n\nconst useMapContext = (displayName: string) => {\n const context = useContext(MapContext);\n if (!context) {\n throw new Error(`${displayName} must be used within Map.Root`);\n }\n return context;\n};\n\n//\n// Root\n//\n\ntype MapRootProps = {\n children: JSX.Element;\n ref?: (controller: MapController) => void;\n class?: string;\n scrollWheelZoom?: boolean;\n doubleClickZoom?: boolean;\n touchZoom?: boolean;\n center?: LatLngLiteral;\n zoom?: number;\n onChange?: (ev: { center: LatLngLiteral; zoom: number }) => void;\n};\n\n/**\n * https://leafletjs.com/reference.html#map\n */\n\nconst MapRoot = (props: MapRootProps) => {\n let mapContainer: HTMLDivElement | undefined;\n const [map, setMap] = createSignal<L.Map | null>(null);\n const [attention, setAttention] = createSignal(false);\n\n onMount(() => {\n if (!mapContainer) return;\n\n const leafletMap = L.map(mapContainer, {\n center: props.center ?? defaults.center,\n zoom: props.zoom ?? defaults.zoom,\n attributionControl: false,\n zoomControl: false,\n scrollWheelZoom: props.scrollWheelZoom ?? true,\n doubleClickZoom: props.doubleClickZoom ?? true,\n touchZoom: props.touchZoom ?? true,\n });\n\n setMap(leafletMap);\n\n // Set up controller\n if (props.ref) {\n props.ref({\n setCenter: (center: LatLngLiteral, zoom?: number) => {\n leafletMap.setView(center, zoom);\n },\n setZoom: (cb: (zoom: number) => number) => {\n leafletMap.setZoom(cb(leafletMap.getZoom()));\n },\n });\n }\n\n onCleanup(() => {\n leafletMap.remove();\n });\n });\n\n // Enable/disable scroll wheel zoom based on attention\n createEffect(() => {\n const leafletMap = map();\n if (!leafletMap) return;\n\n if (attention()) {\n leafletMap.scrollWheelZoom.enable();\n } else {\n leafletMap.scrollWheelZoom.disable();\n }\n });\n\n return (\n <MapContext.Provider value={{ map, attention, setAttention, onChange: props.onChange }}>\n <div\n ref={mapContainer}\n class={`group relative grid h-full w-full bg-gray-100 dark:bg-gray-900 ${props.class ?? ''}`}\n style={{ 'z-index': '0' }}\n />\n <Show when={map()}>{props.children}</Show>\n </MapContext.Provider>\n );\n};\n\n//\n// Tiles\n//\n\nconst MapTiles = () => {\n const { map, onChange, attention } = useMapContext(MapTiles.name);\n let tileLayer: L.TileLayer | null = null;\n\n createEffect(() => {\n const leafletMap = map();\n if (!leafletMap) return;\n\n const att = attention();\n tileLayer = L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {\n detectRetina: true,\n keepBuffer: 4,\n className: `dark:grayscale dark:invert ${att ? '' : 'opacity-80'}`,\n });\n\n tileLayer.addTo(leafletMap);\n\n // Set up event listeners\n leafletMap.on('zoomstart', (ev) => {\n onChange?.({\n center: ev.target.getCenter(),\n zoom: ev.target.getZoom(),\n });\n });\n\n onCleanup(() => {\n if (tileLayer) {\n tileLayer.remove();\n tileLayer = null;\n }\n });\n });\n\n // Update tile layer class when attention changes\n createEffect(() => {\n const att = attention();\n if (tileLayer) {\n const container = tileLayer.getContainer();\n if (container) {\n container.className = `dark:grayscale dark:invert ${att ? '' : 'opacity-80'}`;\n }\n }\n });\n\n return null;\n};\n\n//\n// Markers\n//\n\ntype MapMarkersProps = {\n markers?: Accessor<GeoMarker[]>;\n};\n\nconst MapMarkers = (props: MapMarkersProps) => {\n const { map } = useMapContext(MapMarkers.name);\n const leafletMarkers: L.Marker[] = [];\n let lastMarkerIds = new Set<string>();\n\n // Clean up all markers when component unmounts\n onCleanup(() => {\n leafletMarkers.forEach((marker) => marker.remove());\n leafletMarkers.length = 0;\n });\n\n createEffect(() => {\n const leafletMap = map();\n if (!leafletMap) return;\n\n const markerList = props.markers?.() ?? [];\n const currentIds = new Set(markerList.map((m) => m.id));\n\n // Skip if the markers haven't actually changed\n if (\n currentIds.size === lastMarkerIds.size &&\n [...currentIds].every((id) => lastMarkerIds.has(id)) &&\n leafletMarkers.length > 0\n ) {\n return;\n }\n\n // Clear existing markers\n leafletMarkers.forEach((marker) => marker.remove());\n leafletMarkers.length = 0;\n lastMarkerIds = currentIds;\n\n if (markerList.length > 0) {\n const bounds = latLngBounds(markerList.map((marker) => marker.location));\n leafletMap.fitBounds(bounds);\n\n // Add new markers\n markerList.forEach(({ title, location }) => {\n const marker = L.marker(location, {\n icon: 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 if (title) {\n marker.bindPopup(title);\n }\n\n marker.addTo(leafletMap);\n leafletMarkers.push(marker);\n });\n } else {\n leafletMap.setView(defaults.center, defaults.zoom);\n }\n });\n\n return null;\n};\n\n//\n// Controls\n//\n\nconst CustomControl = (props: { children: JSX.Element; position: ControlPosition }) => {\n const { map: mapAccessor } = useMapContext(CustomControl.name);\n let controlContainer: HTMLDivElement | undefined;\n\n createEffect(() => {\n const map = mapAccessor();\n if (!map || !controlContainer) return;\n\n const Control = L.Control.extend({\n onAdd: () => {\n const container = L.DomUtil.create('div', `${controlPositions[props.position]} !m-0`);\n L.DomEvent.disableClickPropagation(container);\n L.DomEvent.disableScrollPropagation(container);\n\n if (controlContainer) {\n container.appendChild(controlContainer);\n }\n\n return container;\n },\n });\n\n const control = new Control({ position: props.position });\n control.addTo(map);\n\n onCleanup(() => {\n control.remove();\n });\n });\n\n return (\n <div ref={controlContainer} style={{ display: 'contents' }}>\n {props.children}\n </div>\n );\n};\n\ntype MapControlProps = { position?: ControlPosition } & Pick<ControlProps, 'onAction'>;\n\nconst MapZoom = (props: MapControlProps) => (\n <CustomControl position={props.position ?? 'bottomleft'}>\n <ZoomControls onAction={props.onAction} />\n </CustomControl>\n);\n\nconst MapAction = (props: MapControlProps) => (\n <CustomControl position={props.position ?? 'bottomright'}>\n <ActionControls onAction={props.onAction} />\n </CustomControl>\n);\n\n//\n// Map\n//\n\nexport const Map = {\n Root: MapRoot,\n Tiles: MapTiles,\n Markers: MapMarkers,\n Zoom: MapZoom,\n Action: MapAction,\n};\n\nexport { type MapRootProps, type MapMarkersProps, type MapControlProps };\n", "//\n// Copyright 2025 DXOS.org\n//\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;\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["createResizeObserver", "easeLinear", "easeSinOut", "geoMercator", "geoOrthographic", "geoPath", "geoTransverseMercator", "interpolateNumber", "transition", "Show", "createEffect", "createMemo", "createSignal", "createContext", "createEffect", "createSignal", "useContext", "raise", "defaults", "center", "lat", "lng", "zoom", "GlobeContext", "createContext", "GlobeContextProvider", "props", "size", "setSize", "createSignal", "width", "height", "setCenter", "setZoom", "translation", "setTranslation", "rotation", "setRotation", "createEffect", "Provider", "value", "children", "useGlobeContext", "useContext", "raise", "Error", "select", "createEffect", "onCleanup", "debug", "timer", "cb", "start", "Date", "now", "data", "t", "console", "log", "drag", "select", "timer", "versor", "restrictAxis", "axis", "original", "current", "map", "d", "i", "geoInertiaDrag", "target", "render", "projection", "options", "node", "select", "inertia", "geoInertiaDragHelper", "rotation", "rotate", "xAxis", "start", "move", "end", "stop", "finish", "time", "hold", "call", "drag", "on", "opt", "v0", "r0", "q0", "v10", "v11", "q10", "inertiaHelper", "versor", "cartesian", "invert", "position", "inv", "isNaN", "v1", "q1", "multiply", "delta", "r1", "r2", "velocity", "t", "A", "limit", "B", "Math", "log", "timer", "ev", "x", "y", "classList", "remove", "add", "performance", "now", "deltaTime", "decay", "exp", "deltaPos", "v", "undefined", "self", "restart", "e", "geoCircle", "d3GeoCircle", "positionToRotation", "lng", "lat", "tilt", "geoToPosition", "geoPoint", "point", "type", "coordinates", "geoCircle", "radius", "d3GeoCircle", "center", "geoLine", "p1", "p2", "closestPoint", "points", "target", "length", "minDistance", "getDistance", "distance", "point1", "point2", "dx", "dy", "Math", "sqrt", "geoGraticule", "feature", "mesh", "createLayers", "topology", "features", "styles", "layers", "water", "push", "path", "type", "graticule", "geoGraticule", "step", "objects", "land", "feature", "countries", "border", "mesh", "a", "b", "dots", "points", "lines", "point", "geometries", "map", "geoPoint", "line", "source", "target", "geoLine", "renderLayers", "generator", "scale", "context", "canvas", "width", "height", "reset", "background", "fillStyle", "fillRect", "clearRect", "forEach", "save", "fill", "stroke", "Object", "entries", "key", "value", "pointRadius", "beginPath", "restore", "useDrag", "controller", "options", "createEffect", "canvas", "disabled", "geoInertiaDrag", "select", "setRotation", "projection", "rotate", "onUpdate", "type", "xAxis", "time", "start", "finish", "onCleanup", "cancelDrag", "node", "on", "ZOOM_FACTOR", "useGlobeZoomHandler", "controller", "event", "setZoom", "zoom", "useMapZoomHandler", "controller", "event", "setZoom", "scale", "timer", "d3Timer", "createEffect", "createSignal", "onCleanup", "useSpinner", "controller", "options", "running", "setRunning", "createSignal", "createEffect", "timer", "start", "delta", "t", "lastRotation", "projection", "rotate", "d3Timer", "elapsed", "dt", "rotation", "setRotation", "stop", "undefined", "onCleanup", "disabled", "selection", "d3Selection", "geoDistance", "geoInterpolate", "geoPath", "createEffect", "createSignal", "onCleanup", "versor", "TRANSITION_NAME", "defaultDuration", "useTour", "controller", "points", "options", "selection", "d3Selection", "running", "setRunning", "createSignal", "createEffect", "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", "onCleanup", "clearTimeout", "controlPositions", "topleft", "topright", "bottomleft", "bottomright", "ZoomControls", "props", "div", "class", "_jsx", "button", "type", "onClick", "onAction", "title", "span", "ActionControls", "defaultStyles", "light", "background", "fillStyle", "water", "land", "line", "strokeStyle", "point", "strokeWidth", "pointRadius", "dark", "projectionMap", "orthographic", "geoOrthographic", "mercator", "geoMercator", "geoTransverseMercator", "getProjection", "type", "constructor", "GlobeRoot", "props", "containerRef", "size", "setSize", "createSignal", "width", "height", "createResizeObserver", "_jsx", "div", "ref", "class", "GlobeContextProvider", "children", "GlobeCanvas", "themeMode", "styles", "createMemo", "canvas", "setCanvas", "projection", "layers", "timer", "createLayers", "topology", "features", "center", "zoom", "translation", "rotation", "setCenter", "setZoom", "setTranslation", "setRotation", "useGlobeContext", "zoomValue", "zooming", "createEffect", "c", "positionToRotation", "geoToPosition", "canvasEl", "controller", "s", "is", "interpolateNumber", "transition", "ease", "easeLinear", "easeSinOut", "duration", "tween", "t", "newZoom", "on", "generator", "proj", "geoPath", "getContext", "alpha", "gen", "z", "r", "scale", "Math", "min", "translate", "x", "y", "rotate", "renderLayers", "Show", "when", "GlobeDebug", "controlPositions", "position", "pre", "JSON", "stringify", "GlobePanel", "CustomControl", "GlobeZoom", "ZoomControls", "onAction", "GlobeAction", "ActionControls", "Globe", "Root", "Canvas", "Zoom", "Action", "Debug", "Panel", "L", "latLngBounds", "Show", "createContext", "createEffect", "createSignal", "onCleanup", "onMount", "useContext", "defaults", "center", "lat", "lng", "zoom", "MapContext", "createContext", "useMapContext", "displayName", "context", "useContext", "Error", "MapRoot", "props", "mapContainer", "map", "setMap", "createSignal", "attention", "setAttention", "onMount", "leafletMap", "L", "attributionControl", "zoomControl", "scrollWheelZoom", "doubleClickZoom", "touchZoom", "ref", "setCenter", "setView", "setZoom", "cb", "getZoom", "onCleanup", "remove", "createEffect", "enable", "disable", "_jsxs", "Provider", "value", "onChange", "_jsx", "div", "class", "style", "Show", "when", "children", "MapTiles", "name", "tileLayer", "att", "detectRetina", "keepBuffer", "className", "addTo", "on", "ev", "target", "getCenter", "container", "getContainer", "MapMarkers", "leafletMarkers", "lastMarkerIds", "Set", "forEach", "marker", "length", "markerList", "markers", "currentIds", "m", "id", "size", "every", "has", "bounds", "latLngBounds", "location", "fitBounds", "title", "icon", "Icon", "iconUrl", "iconRetinaUrl", "shadowUrl", "iconSize", "iconAnchor", "popupAnchor", "shadowSize", "bindPopup", "push", "CustomControl", "mapAccessor", "controlContainer", "Control", "extend", "onAdd", "DomUtil", "create", "controlPositions", "position", "DomEvent", "disableClickPropagation", "disableScrollPropagation", "appendChild", "control", "display", "MapZoom", "ZoomControls", "onAction", "MapAction", "ActionControls", "Map", "Root", "Tiles", "Markers", "Zoom", "Action", "translationKey", "translations"]
|
|
7
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"inputs":{"data/countries-110m.ts":{"bytes":1301786,"imports":[],"format":"esm"},"src/data.ts":{"bytes":862,"imports":[{"path":"data/countries-110m.ts","kind":"dynamic-import","original":"../data/countries-110m"}],"format":"esm"},"src/hooks/context.tsx":{"bytes":6203,"imports":[{"path":"solid-js/jsx-runtime","kind":"import-statement","external":true},{"path":"solid-js","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":12238,"imports":[{"path":"d3","kind":"import-statement","external":true},{"path":"topojson-client","kind":"import-statement","external":true},{"path":"src/util/path.ts","kind":"import-statement","original":"./path"}],"format":"esm"},"src/util/index.ts":{"bytes":698,"imports":[{"path":"src/util/debug.ts","kind":"import-statement","original":"./debug"},{"path":"src/util/inertia.ts","kind":"import-statement","original":"./inertia"},{"path":"src/util/path.ts","kind":"import-statement","original":"./path"},{"path":"src/util/render.ts","kind":"import-statement","original":"./render"}],"format":"esm"},"src/hooks/useDrag.ts":{"bytes":4346,"imports":[{"path":"d3","kind":"import-statement","external":true},{"path":"solid-js","kind":"import-statement","external":true},{"path":"src/util/index.ts","kind":"import-statement","original":"../util"}],"format":"esm"},"src/hooks/useGlobeZoomHandler.ts":{"bytes":2404,"imports":[],"format":"esm"},"src/hooks/useMapZoomHandler.ts":{"bytes":1943,"imports":[],"format":"esm"},"src/hooks/useSpinner.ts":{"bytes":5328,"imports":[{"path":"d3","kind":"import-statement","external":true},{"path":"solid-js","kind":"import-statement","external":true}],"format":"esm"},"src/hooks/useTour.ts":{"bytes":14694,"imports":[{"path":"d3","kind":"import-statement","external":true},{"path":"solid-js","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/components/Toolbar/Controls.tsx":{"bytes":6754,"imports":[{"path":"solid-js/jsx-runtime","kind":"import-statement","external":true}],"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":27451,"imports":[{"path":"solid-js/jsx-runtime","kind":"import-statement","external":true},{"path":"@solid-primitives/resize-observer","kind":"import-statement","external":true},{"path":"d3","kind":"import-statement","external":true},{"path":"solid-js","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":27458,"imports":[{"path":"solid-js/jsx-runtime","kind":"import-statement","external":true},{"path":"leaflet/dist/leaflet.css","kind":"import-statement","external":true},{"path":"leaflet","kind":"import-statement","external":true},{"path":"solid-js","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/translations.ts":{"bytes":1469,"imports":[],"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-KONL6N4F.mjs","kind":"import-statement"}],"exports":["loadTopology"],"entryPoint":"src/data.ts","inputs":{},"bytes":116},"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":71153},"dist/lib/browser/index.mjs":{"imports":[{"path":"dist/lib/browser/chunk-KONL6N4F.mjs","kind":"import-statement"},{"path":"solid-js/jsx-runtime","kind":"import-statement","external":true},{"path":"@solid-primitives/resize-observer","kind":"import-statement","external":true},{"path":"d3","kind":"import-statement","external":true},{"path":"solid-js","kind":"import-statement","external":true},{"path":"solid-js/jsx-runtime","kind":"import-statement","external":true},{"path":"solid-js","kind":"import-statement","external":true},{"path":"@dxos/debug","kind":"import-statement","external":true},{"path":"d3","kind":"import-statement","external":true},{"path":"solid-js","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":"d3","kind":"import-statement","external":true},{"path":"solid-js","kind":"import-statement","external":true},{"path":"d3","kind":"import-statement","external":true},{"path":"solid-js","kind":"import-statement","external":true},{"path":"versor","kind":"import-statement","external":true},{"path":"solid-js/jsx-runtime","kind":"import-statement","external":true},{"path":"solid-js/jsx-runtime","kind":"import-statement","external":true},{"path":"leaflet/dist/leaflet.css","kind":"import-statement","external":true},{"path":"leaflet","kind":"import-statement","external":true},{"path":"solid-js","kind":"import-statement","external":true}],"exports":["ActionControls","Globe","GlobeContextProvider","Map","ZoomControls","closestPoint","controlPositions","createLayers","geoCircle","geoInertiaDrag","geoLine","geoPoint","geoToPosition","getDistance","loadTopology","positionToRotation","renderLayers","restrictAxis","timer","translationKey","translations","useDrag","useGlobeContext","useGlobeZoomHandler","useMapZoomHandler","useSpinner","useTour"],"entryPoint":"src/index.ts","inputs":{"src/components/Globe/Globe.tsx":{"bytesInOutput":6048},"src/hooks/context.tsx":{"bytesInOutput":1144},"src/hooks/index.ts":{"bytesInOutput":0},"src/hooks/useDrag.ts":{"bytesInOutput":853},"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":450},"src/hooks/useMapZoomHandler.ts":{"bytesInOutput":337},"src/hooks/useSpinner.ts":{"bytesInOutput":1199},"src/hooks/useTour.ts":{"bytesInOutput":3280},"src/components/Toolbar/Controls.tsx":{"bytesInOutput":2081},"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":6516},"src/components/Map/index.ts":{"bytesInOutput":0},"src/index.ts":{"bytesInOutput":0},"src/translations.ts":{"bytesInOutput":293}},"bytes":31492},"dist/lib/browser/chunk-KONL6N4F.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":427},"dist/lib/browser/chunk-KONL6N4F.mjs":{"imports":[{"path":"dist/lib/browser/countries-110m-6FO6R2F2.mjs","kind":"dynamic-import"}],"exports":["loadTopology"],"inputs":{"src/data.ts":{"bytesInOutput":102}},"bytes":189},"dist/lib/browser/countries-110m-6FO6R2F2.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":352624},"dist/lib/browser/countries-110m-6FO6R2F2.mjs":{"imports":[],"exports":["default"],"entryPoint":"data/countries-110m.ts","inputs":{"data/countries-110m.ts":{"bytesInOutput":420420}},"bytes":420547}}}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
|
+
|
|
3
|
+
// src/data.ts
|
|
4
|
+
var loadTopology = async () => {
|
|
5
|
+
return (await import("./countries-110m-UQ4O6NQR.mjs")).default;
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export {
|
|
9
|
+
loadTopology
|
|
10
|
+
};
|
|
11
|
+
//# sourceMappingURL=chunk-KNEGK7HI.mjs.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/data.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Topology } from 'topojson-specification';\n\nexport const loadTopology = async (): Promise<Topology> => {\n return (await import('../data/countries-110m')).default;\n};\n"],
|
|
5
|
+
"mappings": ";;;AAMO,IAAMA,eAAe,YAAA;AAC1B,UAAQ,MAAM,OAAO,+BAAA,GAA2BC;AAClD;",
|
|
6
|
+
"names": ["loadTopology", "default"]
|
|
7
|
+
}
|