import * as React from 'react'; import { Material, Object3D, Light, Scene, Camera, WebGLRenderer } from 'three'; import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'; import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer.js'; import { ConfigOptions, GlobeInstance } from 'globe.gl'; type Accessor = Out | string | ((obj: In) => Out); type ObjAccessor = Accessor; type HexBinAccessor = Accessor; interface HexBin { points: object[], sumWeight: number, center: { lat: number, lng: number } } interface GeoJsonGeometry { type: string; coordinates: number[]; } interface TypeFace {} type LabelOrientation = 'right' | 'top' | 'bottom'; interface GeoCoords { lat: number; lng: number; altitude: number; } interface CartesianCoords { x: number; y: number; z: number; } interface ScreenCoords { x: number; y: number; } interface GlobeProps extends ConfigOptions { // Container layout width?: number; height?: number; backgroundColor?: string; backgroundImageUrl?: string | null; // Globe layer globeImageUrl?: string | null; bumpImageUrl?: string | null; showGlobe?: boolean; showGraticules?: boolean; showAtmosphere?: boolean; atmosphereColor?: string; atmosphereAltitude?: number; globeMaterial?: Material; onGlobeReady?: () => void; onGlobeClick?: (coords: { lat: number, lng: number }, event: MouseEvent) => void; onGlobeRightClick?: (coords: { lat: number, lng: number }, event: MouseEvent) => void; // Points layer pointsData?: object[]; pointLat?: ObjAccessor; pointLng?: ObjAccessor; pointColor?: ObjAccessor; pointAltitude?: ObjAccessor; pointRadius?: ObjAccessor; pointResolution?: number; pointsMerge?: boolean; pointsTransitionDuration?: number; pointLabel?: ObjAccessor; onPointClick?: (point: object, event: MouseEvent, coords: { lat: number, lng: number, altitude: number }) => void; onPointRightClick?: (point: object, event: MouseEvent, coords: { lat: number, lng: number, altitude: number }) => void; onPointHover?: (point: object | null, prevPoint: object | null) => void; // Arcs layer arcsData?: object[]; arcStartLat?: ObjAccessor; arcStartLng?: ObjAccessor; arcEndLat?: ObjAccessor; arcEndLng?: ObjAccessor; arcColor?: ObjAccessor string)>; arcAltitude?: ObjAccessor; arcAltitudeAutoScale?: ObjAccessor; arcStroke?: ObjAccessor; arcCurveResolution?: number; arcCircularResolution?: number; arcDashLength?: ObjAccessor; arcDashGap?: ObjAccessor; arcDashInitialGap?: ObjAccessor; arcDashAnimateTime?: ObjAccessor; arcsTransitionDuration?: number; arcLabel?: ObjAccessor; onArcClick?: (arc: object, event: MouseEvent, coords: { lat: number, lng: number, altitude: number }) => void; onArcRightClick?: (arc: object, event: MouseEvent, coords: { lat: number, lng: number, altitude: number }) => void; onArcHover?: (arc: object | null, prevArc: object | null) => void; // Polygons layer polygonsData?: object[]; polygonGeoJsonGeometry?: ObjAccessor; polygonCapColor?: ObjAccessor; polygonCapMaterial?: ObjAccessor; polygonSideColor?: ObjAccessor; polygonSideMaterial?: ObjAccessor; polygonStrokeColor?: ObjAccessor; polygonAltitude?: ObjAccessor; polygonCapCurvatureResolution?: ObjAccessor; polygonsTransitionDuration?: number; polygonLabel?: ObjAccessor; onPolygonClick?: (polygon: object, event: MouseEvent, coords: { lat: number, lng: number, altitude: number }) => void; onPolygonRightClick?: (polygon: object, event: MouseEvent, coords: { lat: number, lng: number, altitude: number }) => void; onPolygonHover?: (polygon: object | null, prevPolygon: object | null) => void; // Paths layer pathsData?: object[]; pathPoints?: ObjAccessor; pathPointLat?: Accessor; pathPointLng?: Accessor; pathPointAlt?: Accessor; pathResolution?: number; pathColor?: ObjAccessor string)>; pathStroke?: ObjAccessor; pathDashLength?: ObjAccessor; pathDashGap?: ObjAccessor; pathDashInitialGap?: ObjAccessor; pathDashAnimateTime?: ObjAccessor; pathTransitionDuration?: number; pathLabel?: ObjAccessor; onPathClick?: (path: object, event: MouseEvent, coords: { lat: number, lng: number, altitude: number }) => void; onPathRightClick?: (path: object, event: MouseEvent, coords: { lat: number, lng: number, altitude: number }) => void; onPathHover?: (path: object | null, prevPath: object | null) => void; // Heatmaps layer heatmapsData?: object[]; heatmapPoints?: ObjAccessor; heatmapPointLat?: Accessor; heatmapPointLng?: Accessor; heatmapPointWeight?: Accessor; heatmapBandwidth?: ObjAccessor; heatmapColorFn?: ObjAccessor<(t: number) => string>; heatmapColorSaturation?: ObjAccessor; heatmapBaseAltitude?: ObjAccessor; heatmapTopAltitude?: ObjAccessor; heatmapsTransitionDuration?: number; onHeatmapClick?: (heatmap: object, event: MouseEvent, coords: { lat: number, lng: number, altitude: number }) => void; onHeatmapRightClick?: (heatmap: object, event: MouseEvent, coords: { lat: number, lng: number, altitude: number }) => void; onHeatmapHover?: (heatmap: object | null, prevHeatmap: object | null) => void; // Hex Bin layer hexBinPointsData?: object[]; hexBinPointLat?: ObjAccessor; hexBinPointLng?: ObjAccessor; hexBinPointWeight?: ObjAccessor; hexBinResolution?: number; hexMargin?: HexBinAccessor; hexAltitude?: HexBinAccessor; hexTopCurvatureResolution?: number; hexTopColor?: HexBinAccessor; hexSideColor?: HexBinAccessor; hexBinMerge?: boolean; hexTransitionDuration?: number; hexLabel?: HexBinAccessor; onHexClick?: (hex: HexBin, event: MouseEvent, coords: { lat: number, lng: number, altitude: number }) => void; onHexRightClick?: (hex: HexBin, event: MouseEvent, coords: { lat: number, lng: number, altitude: number }) => void; onHexHover?: (hex: HexBin | null, prevHex: HexBin | null) => void; // Hexed Polygons layer hexPolygonsData?: object[]; hexPolygonGeoJsonGeometry?: ObjAccessor; hexPolygonColor?: ObjAccessor; hexPolygonAltitude?: ObjAccessor; hexPolygonResolution?: ObjAccessor; hexPolygonMargin?: ObjAccessor; hexPolygonUseDots?: ObjAccessor; hexPolygonCurvatureResolution?: ObjAccessor; hexPolygonDotResolution?: ObjAccessor; hexPolygonsTransitionDuration?: number; hexPolygonLabel?: ObjAccessor; onHexPolygonClick?: (polygon: object, event: MouseEvent, coords: { lat: number, lng: number, altitude: number }) => void; onHexPolygonRightClick?: (polygon: object, event: MouseEvent, coords: { lat: number, lng: number, altitude: number }) => void; onHexPolygonHover?: (polygon: object | null, prevPolygon: object | null) => void; // Tiles layer tilesData?: object[]; tileLat?: ObjAccessor; tileLng?: ObjAccessor; tileAltitude?: ObjAccessor; tileWidth?: ObjAccessor; tileHeight?: ObjAccessor; tileUseGlobeProjection?: ObjAccessor; tileMaterial?: ObjAccessor; tileCurvatureResolution?: ObjAccessor; tilesTransitionDuration?: number; tileLabel?: ObjAccessor; onTileClick?: (tile: object, event: MouseEvent, coords: { lat: number, lng: number, altitude: number }) => void; onTileRightClick?: (tile: object, event: MouseEvent, coords: { lat: number, lng: number, altitude: number }) => void; onTileHover?: (tile: object | null, prevTile: object | null) => void; // Rings Layer ringsData?: object[]; ringLat?: ObjAccessor; ringLng?: ObjAccessor; ringAltitude?: ObjAccessor; ringColor?: ObjAccessor string)>; ringResolution?: number; ringMaxRadius?: ObjAccessor; ringPropagationSpeed?: ObjAccessor; ringRepeatPeriod?: ObjAccessor; // Labels layer labelsData?: object[]; labelLat?: ObjAccessor; labelLng?: ObjAccessor; labelText?: ObjAccessor; labelColor?: ObjAccessor; labelAltitude?: ObjAccessor; labelSize?: ObjAccessor; labelTypeFace?: TypeFace; labelRotation?: ObjAccessor; labelResolution?: number; labelIncludeDot?: ObjAccessor; labelDotRadius?: ObjAccessor; labelDotOrientation?: ObjAccessor; labelsTransitionDuration?: number; labelLabel?: ObjAccessor; onLabelClick?: (label: object, event: MouseEvent, coords: { lat: number, lng: number, altitude: number }) => void; onLabelRightClick?: (label: object, event: MouseEvent, coords: { lat: number, lng: number, altitude: number }) => void; onLabelHover?: (label: object | null, prevLabel: object | null) => void; // HTML Elements layer htmlElementsData?: object[]; htmlLat?: ObjAccessor; htmlLng?: ObjAccessor; htmlAltitude?: ObjAccessor; htmlElement?: string | ((d: object) => HTMLElement); htmlTransitionDuration?: number; // 3D Objects layer objectsData?: object[]; objectLat?: ObjAccessor; objectLng?: ObjAccessor; objectAltitude?: ObjAccessor; objectRotation?: ObjAccessor<{ x?: number, y?: number, z?: number } | null>; objectFacesSurfaces?: ObjAccessor; objectThreeObject?: Object3D | string | ((d: object) => Object3D); objectLabel?: ObjAccessor; onObjectClick?: (obj: object, event: MouseEvent, coords: { lat: number, lng: number, altitude: number }) => void; onObjectRightClick?: (obj: object, event: MouseEvent, coords: { lat: number, lng: number, altitude: number }) => void; onObjectHover?: (obj: object | null, prevObj: object | null) => void; // Custom layer customLayerData?: object[]; customThreeObject?: Object3D | string | ((d: object) => Object3D); customThreeObjectUpdate?: string | ((obj: Object3D, objData: object) => void); customLayerLabel?: ObjAccessor; onCustomLayerClick?: (obj: object, event: MouseEvent, coords: { lat: number, lng: number, altitude: number }) => void; onCustomLayerRightClick?: (obj: object, event: MouseEvent, coords: { lat: number, lng: number, altitude: number }) => void; onCustomLayerHover?: (obj: object | null, prevObj: object | null) => void; // Render control enablePointerInteraction?: boolean; pointerEventsFilter?: (object: Object3D, data?: object) => boolean; lineHoverPrecision?: number; onZoom?: (pov: GeoCoords) => void; } interface GlobeMethods { // Render control pointOfView(): GeoCoords; pointOfView(pov: { lat?: number, lng?: number, altitude?: number }, transitionMs?: number): GlobeInstance; pauseAnimation(): GlobeInstance; resumeAnimation(): GlobeInstance; lights(): Light[]; lights(lights: Light[]): GlobeInstance; scene(): Scene; camera(): Camera; renderer(): WebGLRenderer; postProcessingComposer(): EffectComposer; controls(): OrbitControls; // Utilities getGlobeRadius(): number; getCoords(lat: number, lng: number, altitude?: number): CartesianCoords; getScreenCoords(lat: number, lng: number, altitude?: number): ScreenCoords; toGeoCoords(coords: CartesianCoords): GeoCoords; toGlobeCoords(x: number, y: number): { lat: number, lng: number} | null; } type FCwithRef

= React.FunctionComponent

}>; declare const Globe: FCwithRef; export { type GlobeMethods, type GlobeProps, Globe as default };