@omnedia/ngx-globe
Version:
A simple component library to create a container with an animated and interactive globe.
1 lines • 17 kB
Source Map (JSON)
{"version":3,"file":"omnedia-ngx-globe.mjs","sources":["../../../projects/ngx-globe/src/lib/ngx-globe.component.ts","../../../projects/ngx-globe/src/lib/ngx-globe.component.html","../../../projects/ngx-globe/src/public-api.ts","../../../projects/ngx-globe/src/omnedia-ngx-globe.ts"],"sourcesContent":["import {CommonModule, isPlatformBrowser} from \"@angular/common\";\r\nimport {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ElementRef,\r\n Inject,\r\n Input,\r\n OnDestroy,\r\n PLATFORM_ID,\r\n ViewChild,\r\n} from \"@angular/core\";\r\nimport createGlobe from \"cobe\";\r\nimport Phenomenon from \"phenomenon\";\r\nimport {COBEOptionsPart, GlobeOptions} from \"./ngx-globe.types\";\r\n\r\n@Component({\r\n selector: \"om-globe\",\r\n standalone: true,\r\n imports: [CommonModule],\r\n templateUrl: \"./ngx-globe.component.html\",\r\n styleUrl: \"./ngx-globe.component.scss\",\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class NgxGlobeComponent implements AfterViewInit, OnDestroy {\r\n @ViewChild(\"OmGlobeWrapper\")\r\n globeWrapperElement!: ElementRef<HTMLCanvasElement>;\r\n\r\n @ViewChild(\"globeCanvas\")\r\n globeCanvas!: ElementRef<HTMLCanvasElement>;\r\n\r\n @Input(\"styleClass\")\r\n styleClass?: string;\r\n\r\n @Input(\"rotationSpeed\")\r\n rotationSpeed = 0.005;\r\n\r\n @Input(\"globeOptions\")\r\n set globeOptions(options: GlobeOptions) {\r\n this.globeSize = options.width ?? this.globeSize;\r\n this.style[\"--globe-size\"] = this.globeSize + \"px\";\r\n\r\n this.setGlobeOptions(options);\r\n\r\n if (this.globeInitialized) {\r\n this.setCanvasSize();\r\n this.initGlobe();\r\n }\r\n }\r\n\r\n @Input(\"globeSize\")\r\n set globeCanvasSize(size: number) {\r\n this.globeSize = size;\r\n this.cobeOptions.width = this.globeSize;\r\n this.cobeOptions.height = this.globeSize;\r\n this.style[\"--globe-size\"] = size + \"px\";\r\n\r\n if (this.globeInitialized) {\r\n this.setCanvasSize();\r\n this.initGlobe();\r\n }\r\n }\r\n\r\n style: any = {};\r\n\r\n private globeSize?: number;\r\n\r\n private globeInitialized = false;\r\n\r\n private globe?: Phenomenon;\r\n\r\n cobeOptions: COBEOptionsPart = {\r\n devicePixelRatio: 2,\r\n width: this.globeSize ?? 600,\r\n height: this.globeSize ?? 600,\r\n phi: 0,\r\n theta: 0.3,\r\n dark: 0,\r\n diffuse: 0.4,\r\n scale: 1,\r\n mapSamples: 16000,\r\n mapBrightness: 1.2,\r\n baseColor: [1, 1, 1],\r\n markerColor: [251 / 255, 100 / 255, 21 / 255],\r\n glowColor: [1, 1, 1],\r\n offset: [0, 0],\r\n markers: [\r\n {location: [14.5995, 120.9842], size: 0.03},\r\n {location: [19.076, 72.8777], size: 0.1},\r\n {location: [23.8103, 90.4125], size: 0.05},\r\n {location: [30.0444, 31.2357], size: 0.07},\r\n {location: [39.9042, 116.4074], size: 0.08},\r\n {location: [-23.5505, -46.6333], size: 0.1},\r\n {location: [19.4326, -99.1332], size: 0.1},\r\n {location: [40.7128, -74.006], size: 0.1},\r\n {location: [34.6937, 135.5022], size: 0.05},\r\n {location: [41.0082, 28.9784], size: 0.06},\r\n ],\r\n };\r\n\r\n private pointerInteracting: any = null;\r\n pointerInteractionMovement = 0;\r\n private globeRotation = 0;\r\n\r\n private intersectionObserver?: IntersectionObserver;\r\n private isAnimating = false;\r\n\r\n constructor(\r\n private readonly cdr: ChangeDetectorRef,\r\n @Inject(PLATFORM_ID) private platformId: object\r\n ) {\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.initCanvas();\r\n\r\n if (isPlatformBrowser(this.platformId)) {\r\n this.intersectionObserver = new IntersectionObserver(([entry]) => {\r\n this.renderContents(entry.isIntersecting);\r\n });\r\n this.intersectionObserver.observe(this.globeCanvas.nativeElement);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.globe?.destroy();\r\n window.removeEventListener(\"resize\", () => this.setCanvasSize());\r\n }\r\n\r\n initCanvas(): void {\r\n if (!this.globeSize) {\r\n let width = 600;\r\n let height = 600;\r\n\r\n if (this.globeWrapperElement.nativeElement.parentElement?.parentElement) {\r\n const domRect = this.globeWrapperElement.nativeElement.parentElement!.parentElement!.getBoundingClientRect();\r\n width = domRect.width;\r\n height = domRect.height;\r\n }\r\n\r\n this.globeSize = width < height ? width : height;\r\n\r\n this.cobeOptions.width = this.globeSize;\r\n this.cobeOptions.height = this.globeSize;\r\n this.style[\"--globe-size\"] = this.globeSize + \"px\";\r\n }\r\n\r\n this.cobeOptions.width = this.globeSize;\r\n this.cobeOptions.height = this.globeSize;\r\n\r\n this.setCanvasSize();\r\n this.initGlobe();\r\n }\r\n\r\n setCanvasSize(): void {\r\n this.globeCanvas.nativeElement.width = this.globeSize ?? 600;\r\n this.globeCanvas.nativeElement.height = this.globeSize ?? 600;\r\n\r\n this.cdr.detectChanges();\r\n }\r\n\r\n renderContents(isIntersecting: boolean) {\r\n if (isIntersecting && !this.isAnimating) {\r\n this.isAnimating = true;\r\n\r\n this.globe?.toggle(true);\r\n } else if (!isIntersecting && this.isAnimating) {\r\n this.isAnimating = false;\r\n\r\n this.globe?.toggle(false);\r\n }\r\n }\r\n\r\n initGlobe(): void {\r\n let phi = this.cobeOptions.phi;\r\n let cobeOptions = {\r\n ...this.cobeOptions,\r\n onRender: (state: any) => {\r\n if (!this.pointerInteracting) {\r\n phi += this.rotationSpeed;\r\n }\r\n\r\n state.phi = phi + this.globeRotation;\r\n },\r\n };\r\n\r\n this.globe = createGlobe(this.globeCanvas.nativeElement, cobeOptions);\r\n\r\n this.globeInitialized = true;\r\n\r\n window.addEventListener(\"resize\", () => this.setCanvasSize());\r\n\r\n this.globeCanvas.nativeElement.width = this.globeSize ?? 600;\r\n this.globeCanvas.nativeElement.height = this.globeSize ?? 600;\r\n }\r\n\r\n updatePointerInteraction(value: any): void {\r\n this.pointerInteracting = value;\r\n this.globeCanvas.nativeElement.style.cursor = value ? \"grabbing\" : \"grab\";\r\n }\r\n\r\n updateMovement(clientX: any): void {\r\n if (this.pointerInteracting !== null) {\r\n const delta = clientX - this.pointerInteracting;\r\n this.pointerInteractionMovement = delta;\r\n this.globeRotation = delta / 200;\r\n }\r\n }\r\n\r\n setGlobeOptions(options: GlobeOptions): void {\r\n this.cobeOptions.width = options.width ?? this.cobeOptions.width;\r\n this.cobeOptions.height = options.height ?? this.cobeOptions.height;\r\n this.cobeOptions.phi = options.phi ?? this.cobeOptions.phi;\r\n this.cobeOptions.theta = options.theta ?? this.cobeOptions.theta;\r\n this.cobeOptions.mapSamples =\r\n options.mapSamples ?? this.cobeOptions.mapSamples;\r\n this.cobeOptions.mapBrightness =\r\n options.mapBrightness ?? this.cobeOptions.mapBrightness;\r\n this.cobeOptions.mapBaseBrightness =\r\n options.mapBaseBrightness ?? this.cobeOptions.mapBaseBrightness;\r\n this.cobeOptions.baseColor =\r\n options.baseColor ?? this.cobeOptions.baseColor;\r\n this.cobeOptions.markerColor =\r\n options.markerColor ?? this.cobeOptions.markerColor;\r\n this.cobeOptions.glowColor =\r\n options.glowColor ?? this.cobeOptions.glowColor;\r\n this.cobeOptions.markers = options.markers ?? this.cobeOptions.markers;\r\n this.cobeOptions.diffuse = options.diffuse ?? this.cobeOptions.diffuse;\r\n this.cobeOptions.devicePixelRatio =\r\n options.devicePixelRatio ?? this.cobeOptions.devicePixelRatio;\r\n this.cobeOptions.dark = options.dark ?? this.cobeOptions.dark;\r\n this.cobeOptions.opacity = options.opacity ?? this.cobeOptions.opacity;\r\n this.cobeOptions.offset = options.offset ?? this.cobeOptions.offset;\r\n this.cobeOptions.scale = options.scale ?? this.cobeOptions.scale;\r\n this.cobeOptions.context = options.context ?? this.cobeOptions.context;\r\n }\r\n}\r\n","<div class=\"om-globe\" [ngStyle]=\"style\" #OmGlobeWrapper>\r\n <div class=\"om-globe-background\">\r\n <canvas (pointerdown)=\"updatePointerInteraction($event.clientX - pointerInteractionMovement)\"\r\n (pointerup)=\"updatePointerInteraction(null)\" (pointerout)=\"updatePointerInteraction(null)\"\r\n (mousemove)=\"updateMovement($event.clientX)\" (touchmove)=\"updateMovement($event.touches[0].clientX)\"\r\n width=\"1000\" height=\"1000\" #globeCanvas></canvas>\r\n </div>\r\n</div>\r\n","/*\r\n * Public API Surface of ngx-globe\r\n */\r\n\r\nexport * from './lib/ngx-globe.component';\r\nexport * from './lib/ngx-globe.types';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}