@lumiscaphe/ng-viewer 14.0.0 → 14.2.0

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.
@@ -1,84 +1,12 @@
1
1
  import * as i0 from '@angular/core';
2
- import { EventEmitter, Component, Input, Output, ViewChild, HostListener, NgModule } from '@angular/core';
2
+ import { EventEmitter, Component, Input, Output, ContentChild, ViewChild, NgModule } from '@angular/core';
3
3
  import { Viewer } from '@lumiscaphe/viewer';
4
4
  import * as i1 from '@angular/common';
5
5
  import { CommonModule } from '@angular/common';
6
6
 
7
- class Viewport {
8
- static fit(resolution, viewportWidth, viewportHeight, fit) {
9
- const aspectRatio = resolution.width / resolution.height;
10
- const viewportRatio = viewportWidth / viewportHeight;
11
- let width = 0;
12
- let height = 0;
13
- switch (fit) {
14
- case 'contain':
15
- width = viewportRatio < aspectRatio ? viewportWidth : viewportHeight * aspectRatio;
16
- height = viewportRatio < aspectRatio ? viewportWidth / aspectRatio : viewportHeight;
17
- break;
18
- case 'cover':
19
- default:
20
- width = viewportRatio < aspectRatio ? viewportHeight * aspectRatio : viewportWidth;
21
- height = viewportRatio < aspectRatio ? viewportHeight : viewportWidth / aspectRatio;
22
- break;
23
- case 'fill':
24
- width = viewportWidth;
25
- height = viewportHeight;
26
- break;
27
- }
28
- return {
29
- width: Math.round(width),
30
- height: Math.round(height),
31
- top: Math.round((viewportHeight - height) / 2),
32
- left: Math.round((viewportWidth - width) / 2),
33
- };
34
- }
35
- static getStandardAspectRatio(width, height) {
36
- if (width === 0 || height === 0) {
37
- return 0;
38
- }
39
- const aspectRatio = width / height;
40
- if (width < height) {
41
- const distanceTo34 = Math.abs(3 / 4 - aspectRatio);
42
- const distanceTo916 = Math.abs(9 / 16 - aspectRatio);
43
- return distanceTo34 < distanceTo916 ? 3 / 4 : 9 / 16;
44
- }
45
- const distanceTo43 = Math.abs(4 / 3 - aspectRatio);
46
- const distanceTo169 = Math.abs(16 / 9 - aspectRatio);
47
- return distanceTo43 < distanceTo169 ? 4 / 3 : 16 / 9;
48
- }
49
- static getStandardQuality(height) {
50
- if (height <= 240) {
51
- return 240;
52
- }
53
- if (height <= 360) {
54
- return 360;
55
- }
56
- if (height <= 480) {
57
- return 480;
58
- }
59
- if (height <= 720) {
60
- return 720;
61
- }
62
- return 1080;
63
- }
64
- static getStandardResolution(width, height) {
65
- if (width === 0 || height === 0) {
66
- return { width: 0, height: 0 };
67
- }
68
- const aspectRatio = Viewport.getStandardAspectRatio(width, height);
69
- if (width < height) {
70
- const quality = Viewport.getStandardQuality(height * aspectRatio);
71
- return { width: Math.round(quality), height: Math.round(quality / aspectRatio) };
72
- }
73
- const quality = Viewport.getStandardQuality(width / aspectRatio);
74
- return { width: Math.round(quality * aspectRatio), height: Math.round(quality) };
75
- }
76
- }
77
-
78
7
  class NgViewerComponent {
79
8
  constructor() {
80
- this.hotspots = [];
81
- this.hotspotTemplateRef = null;
9
+ this.hotspots2D = [];
82
10
  this.onLoadStart = new EventEmitter();
83
11
  this.onLoadProgress = new EventEmitter();
84
12
  this.onLoadEnd = new EventEmitter();
@@ -86,9 +14,7 @@ class NgViewerComponent {
86
14
  this.onInteraction = new EventEmitter();
87
15
  this.onVrcubeInteraction = new EventEmitter();
88
16
  this.onVrobjectInteraction = new EventEmitter();
89
- this.fitPosition = { width: 1, height: 1, top: 1, left: 1 };
90
- this.scaleX = 1;
91
- this.scaleY = 1;
17
+ this.hotspotTemplateRef = null;
92
18
  }
93
19
  ngAfterViewInit() {
94
20
  this.viewer = new Viewer(this.container.nativeElement, {
@@ -96,22 +22,39 @@ class NgViewerComponent {
96
22
  api: this.api || 'v1',
97
23
  fit: this.fit || 'cover',
98
24
  events: {
99
- onLoadStart: (...args) => { this.onLoadStart.emit(...args); },
100
- onLoadProgress: (...args) => { this.onLoadProgress.emit(...args); },
101
- onLoadEnd: (...args) => { this.onLoadEnd.emit(...args); },
102
- onLoadError: (...args) => { this.onLoadError.emit(...args); },
103
- onInteraction: (...args) => { this.onInteraction.emit(...args); },
104
- onVrcubeInteraction: (...args) => { this.onVrcubeInteraction.emit(...args); },
105
- onVrobjectInteraction: (...args) => { this.onVrobjectInteraction.emit(...args); },
106
- onHotspotsChange: this.onHotspotsChange.bind(this)
107
- },
25
+ onLoadStart: (...args) => {
26
+ this.onLoadStart.emit(...args);
27
+ },
28
+ onLoadProgress: (...args) => {
29
+ this.onLoadProgress.emit(...args);
30
+ },
31
+ onLoadEnd: (...args) => {
32
+ this.onLoadEnd.emit(...args);
33
+ },
34
+ onLoadError: (...args) => {
35
+ this.onLoadError.emit(...args);
36
+ },
37
+ onHotspotsChange: this.onHotspotsChange.bind(this),
38
+ onInteraction: (...args) => {
39
+ this.onInteraction.emit(...args);
40
+ },
41
+ onVrcubeInteraction: (...args) => {
42
+ this.onVrcubeInteraction.emit(...args);
43
+ },
44
+ onVrobjectInteraction: (...args) => {
45
+ this.onVrobjectInteraction.emit(...args);
46
+ }
47
+ }
108
48
  });
109
- if (this['scene']) {
49
+ if (this.scene) {
110
50
  this.viewer.load(this.scene).catch(() => { });
111
51
  }
112
- if (this['encoder']) {
52
+ if (this.encoder) {
113
53
  this.viewer.setEncoder(this.encoder).catch(() => { });
114
54
  }
55
+ if (this.hotspots) {
56
+ this.viewer.setHotspots(this.hotspots);
57
+ }
115
58
  if (this.parameters) {
116
59
  this.viewer.setParameters(this.parameters).catch(() => { });
117
60
  }
@@ -124,10 +67,6 @@ class NgViewerComponent {
124
67
  if (this.vrobject) {
125
68
  this.viewer.setVrobject(this.vrobject);
126
69
  }
127
- if (this.tags) {
128
- this.viewer.setTags(this.tags);
129
- }
130
- this.onResize();
131
70
  }
132
71
  ngOnDestroy() {
133
72
  this.viewer?.destroy();
@@ -142,12 +81,12 @@ class NgViewerComponent {
142
81
  if (changes['encoder'] && changes['encoder'].currentValue) {
143
82
  this.viewer.setEncoder(changes['encoder'].currentValue).catch(() => { });
144
83
  }
84
+ if (changes['hotspots'] && changes['hotspots'].currentValue) {
85
+ this.viewer.setHotspots(changes['hotspots'].currentValue);
86
+ }
145
87
  if (changes['parameters'] && changes['parameters'].currentValue) {
146
88
  this.viewer.setParameters(changes['parameters'].currentValue).catch(() => { });
147
89
  }
148
- if (changes['tags'] && changes['tags'].currentValue) {
149
- this.viewer.setTags(changes['tags'].currentValue);
150
- }
151
90
  if (changes['view'] && changes['view'].currentValue) {
152
91
  this.viewer.setView(changes['view'].currentValue).catch(() => { });
153
92
  }
@@ -158,43 +97,24 @@ class NgViewerComponent {
158
97
  this.viewer.setVrobject(changes['vrobject'].currentValue);
159
98
  }
160
99
  }
161
- onHotspotsChange(hotspots) {
162
- this.hotspots = hotspots;
163
- if (this.hotspotsFilter !== undefined) {
164
- this.hotspots = this.hotspotsFilter(this.hotspots);
165
- }
100
+ async pick(position) {
101
+ return this.viewer?.pick(position);
166
102
  }
167
103
  snapshot(type, quality) {
168
104
  return this.viewer?.snapshot(type, quality);
169
105
  }
170
- onResize() {
171
- this.resolution = Viewport.getStandardResolution(window.innerWidth, window.innerHeight);
172
- this.fitPosition = Viewport.fit(this.resolution, window.innerWidth, window.innerHeight, 'cover');
173
- this.scaleX = this.fitPosition.width / this.resolution.width;
174
- this.scaleY = this.fitPosition.height / this.resolution.height;
175
- }
176
- hotspotStyle(hotspot) {
177
- if (this.view?.mode === 'vrcube') {
178
- return {
179
- position: 'absolute',
180
- top: hotspot.position2D.y + 'px',
181
- left: hotspot.position2D.x + 'px'
182
- };
183
- }
184
- else {
185
- return {
186
- position: 'absolute',
187
- top: (hotspot.position2D.y * this.scaleY + this.fitPosition.top) + 'px',
188
- left: (hotspot.position2D.x * this.scaleX + this.fitPosition.left) + 'px'
189
- };
106
+ onHotspotsChange(hotspots) {
107
+ this.hotspots2D = hotspots;
108
+ if (this.hotspotsFilter !== undefined) {
109
+ this.hotspots2D = this.hotspotsFilter(this.hotspots2D);
190
110
  }
191
111
  }
192
112
  }
193
- NgViewerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: NgViewerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
194
- NgViewerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.0", type: NgViewerComponent, selector: "NgViewer", inputs: { server: "server", api: "api", fit: "fit", scene: "scene", encoder: "encoder", parameters: "parameters", view: "view", vrcube: "vrcube", vrobject: "vrobject", tags: "tags", hotspotTemplateRef: "hotspotTemplateRef", hotspotsFilter: "hotspotsFilter" }, outputs: { onLoadStart: "onLoadStart", onLoadProgress: "onLoadProgress", onLoadEnd: "onLoadEnd", onLoadError: "onLoadError", onInteraction: "onInteraction", onVrcubeInteraction: "onVrcubeInteraction", onVrobjectInteraction: "onVrobjectInteraction" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div #container></div>\n\n<div class=\"position-absolute w-100 h-100\" style=\"pointer-events: none;\" *ngIf=\"hotspots.length\">\n <div [ngStyle]=\"hotspotStyle(hotspot)\" *ngFor=\"let hotspot of hotspots\">\n <ng-container *ngTemplateOutlet=\"hotspotTemplateRef; context:{hotspot: hotspot}\"></ng-container>\n </div>\n</div>", styles: [":host{display:flex;flex:1 0 auto}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
195
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: NgViewerComponent, decorators: [{
113
+ NgViewerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: NgViewerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
114
+ NgViewerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: NgViewerComponent, selector: "NgViewer", inputs: { server: "server", api: "api", fit: "fit", scene: "scene", encoder: "encoder", parameters: "parameters", view: "view", vrcube: "vrcube", vrobject: "vrobject", hotspots: "hotspots", hotspotsFilter: "hotspotsFilter" }, outputs: { onLoadStart: "onLoadStart", onLoadProgress: "onLoadProgress", onLoadEnd: "onLoadEnd", onLoadError: "onLoadError", onInteraction: "onInteraction", onVrcubeInteraction: "onVrcubeInteraction", onVrobjectInteraction: "onVrobjectInteraction" }, queries: [{ propertyName: "hotspotTemplateRef", first: true, predicate: ["hotspotTemplate"], descendants: true }], viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div #container></div>\n\n<div class=\"position-absolute w-100 h-100\" style=\"pointer-events: none\" *ngIf=\"hotspots2D.length\">\n <ng-container *ngFor=\"let hotspot of hotspots2D; index as i\">\n <div [ngStyle]=\"{ position: 'absolute', top: hotspot.position2D.y + 'px', left: hotspot.position2D.x + 'px' }\">\n <ng-container *ngTemplateOutlet=\"hotspotTemplateRef; context: { $implicit: hotspot, index: i }\"></ng-container>\n </div>\n </ng-container>\n</div>\n", styles: [":host{display:flex;flex:1 0 auto}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }] });
115
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: NgViewerComponent, decorators: [{
196
116
  type: Component,
197
- args: [{ selector: 'NgViewer', template: "<div #container></div>\n\n<div class=\"position-absolute w-100 h-100\" style=\"pointer-events: none;\" *ngIf=\"hotspots.length\">\n <div [ngStyle]=\"hotspotStyle(hotspot)\" *ngFor=\"let hotspot of hotspots\">\n <ng-container *ngTemplateOutlet=\"hotspotTemplateRef; context:{hotspot: hotspot}\"></ng-container>\n </div>\n</div>", styles: [":host{display:flex;flex:1 0 auto}\n"] }]
117
+ args: [{ selector: 'NgViewer', template: "<div #container></div>\n\n<div class=\"position-absolute w-100 h-100\" style=\"pointer-events: none\" *ngIf=\"hotspots2D.length\">\n <ng-container *ngFor=\"let hotspot of hotspots2D; index as i\">\n <div [ngStyle]=\"{ position: 'absolute', top: hotspot.position2D.y + 'px', left: hotspot.position2D.x + 'px' }\">\n <ng-container *ngTemplateOutlet=\"hotspotTemplateRef; context: { $implicit: hotspot, index: i }\"></ng-container>\n </div>\n </ng-container>\n</div>\n", styles: [":host{display:flex;flex:1 0 auto}\n"] }]
198
118
  }], propDecorators: { server: [{
199
119
  type: Input
200
120
  }], api: [{
@@ -213,9 +133,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImpor
213
133
  type: Input
214
134
  }], vrobject: [{
215
135
  type: Input
216
- }], tags: [{
217
- type: Input
218
- }], hotspotTemplateRef: [{
136
+ }], hotspots: [{
219
137
  type: Input
220
138
  }], hotspotsFilter: [{
221
139
  type: Input
@@ -233,20 +151,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImpor
233
151
  type: Output
234
152
  }], onVrobjectInteraction: [{
235
153
  type: Output
154
+ }], hotspotTemplateRef: [{
155
+ type: ContentChild,
156
+ args: ['hotspotTemplate']
236
157
  }], container: [{
237
158
  type: ViewChild,
238
159
  args: ['container']
239
- }], onResize: [{
240
- type: HostListener,
241
- args: ['window:resize', ['$event']]
242
160
  }] } });
243
161
 
244
162
  class NgViewerModule {
245
163
  }
246
- NgViewerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: NgViewerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
247
- NgViewerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.0", ngImport: i0, type: NgViewerModule, declarations: [NgViewerComponent], imports: [CommonModule], exports: [NgViewerComponent] });
248
- NgViewerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: NgViewerModule, imports: [CommonModule] });
249
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.0", ngImport: i0, type: NgViewerModule, decorators: [{
164
+ NgViewerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: NgViewerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
165
+ NgViewerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: NgViewerModule, declarations: [NgViewerComponent], imports: [CommonModule], exports: [NgViewerComponent] });
166
+ NgViewerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: NgViewerModule, imports: [CommonModule] });
167
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: NgViewerModule, decorators: [{
250
168
  type: NgModule,
251
169
  args: [{
252
170
  declarations: [
@@ -1 +1 @@
1
- {"version":3,"file":"lumiscaphe-ng-viewer.mjs","sources":["../../../projects/ng-viewer/src/lib/viewport.ts","../../../projects/ng-viewer/src/lib/ng-viewer.component.ts","../../../projects/ng-viewer/src/lib/ng-viewer.component.html","../../../projects/ng-viewer/src/lib/ng-viewer.module.ts","../../../projects/ng-viewer/src/public-api.ts","../../../projects/ng-viewer/src/lumiscaphe-ng-viewer.ts"],"sourcesContent":["export class Viewport {\n public static fit(resolution: any, viewportWidth: any, viewportHeight: any, fit: any): { width: number, height: number, top: number, left: number } {\n const aspectRatio = resolution.width / resolution.height;\n const viewportRatio = viewportWidth / viewportHeight;\n\n let width = 0;\n let height = 0;\n\n switch (fit) {\n case 'contain':\n width = viewportRatio < aspectRatio ? viewportWidth : viewportHeight * aspectRatio;\n height = viewportRatio < aspectRatio ? viewportWidth / aspectRatio : viewportHeight;\n break;\n case 'cover':\n default:\n width = viewportRatio < aspectRatio ? viewportHeight * aspectRatio : viewportWidth;\n height = viewportRatio < aspectRatio ? viewportHeight : viewportWidth / aspectRatio;\n break;\n case 'fill':\n width = viewportWidth;\n height = viewportHeight;\n break;\n }\n\n return {\n width: Math.round(width),\n height: Math.round(height),\n top: Math.round((viewportHeight - height) / 2),\n left: Math.round((viewportWidth - width) / 2),\n };\n }\n\n static getStandardAspectRatio(width: number, height: number): number {\n if (width === 0 || height === 0) {\n return 0;\n }\n\n const aspectRatio = width / height;\n\n if (width < height) {\n const distanceTo34 = Math.abs(3 / 4 - aspectRatio);\n const distanceTo916 = Math.abs(9 / 16 - aspectRatio);\n return distanceTo34 < distanceTo916 ? 3 / 4 : 9 / 16;\n }\n\n const distanceTo43 = Math.abs(4 / 3 - aspectRatio);\n const distanceTo169 = Math.abs(16 / 9 - aspectRatio);\n\n return distanceTo43 < distanceTo169 ? 4 / 3 : 16 / 9;\n }\n\n static getStandardQuality(height: number): number {\n if (height <= 240) {\n return 240;\n }\n\n if (height <= 360) {\n return 360;\n }\n\n if (height <= 480) {\n return 480;\n }\n\n if (height <= 720) {\n return 720;\n }\n\n return 1080;\n }\n\n public static getStandardResolution(width: number, height: number): { width: number, height: number } {\n if (width === 0 || height === 0) {\n return { width: 0, height: 0 };\n }\n\n const aspectRatio = Viewport.getStandardAspectRatio(width, height);\n\n if (width < height) {\n const quality = Viewport.getStandardQuality(height * aspectRatio);\n return { width: Math.round(quality), height: Math.round(quality / aspectRatio) };\n }\n\n const quality = Viewport.getStandardQuality(width / aspectRatio);\n return { width: Math.round(quality * aspectRatio), height: Math.round(quality) };\n }\n}\n\nexport default Viewport;\n","import { AfterViewInit, Component, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, SimpleChanges, ViewChild, Output, TemplateRef, HostListener } from '@angular/core';\n\nimport { Encoder, Hotspot, Parameters, Scene, View, Viewer, WidgetVRCube, WidgetVRObject } from '@lumiscaphe/viewer';\nimport Viewport from './viewport';\n\n@Component({\n selector: 'NgViewer',\n templateUrl: './ng-viewer.component.html',\n styleUrls: ['./ng-viewer.component.scss']\n})\n\nexport class NgViewerComponent implements AfterViewInit, OnChanges, OnDestroy {\n\n public viewer: Viewer | undefined;\n\n public hotspots: Hotspot[] = [];\n\n @Input() server: string | undefined;\n @Input() api: string | undefined;\n @Input() fit: 'contain' | 'cover' | 'fill' | undefined;\n @Input() scene: Scene | undefined;\n @Input() encoder: Encoder | undefined;\n @Input() parameters: Parameters | undefined;\n @Input() view: View | undefined;\n @Input() vrcube: Partial<WidgetVRCube> | undefined;\n @Input() vrobject: Partial<WidgetVRObject> | undefined;\n @Input() tags: string[] | undefined;\n @Input() hotspotTemplateRef: TemplateRef<any> | null = null;\n @Input() hotspotsFilter: ((hotspots: Hotspot[]) => Hotspot[]) | undefined;\n\n @Output() onLoadStart = new EventEmitter();\n @Output() onLoadProgress = new EventEmitter();\n @Output() onLoadEnd = new EventEmitter();\n @Output() onLoadError = new EventEmitter();\n @Output() onInteraction = new EventEmitter();\n @Output() onVrcubeInteraction = new EventEmitter();\n @Output() onVrobjectInteraction = new EventEmitter();\n\n @ViewChild('container') container!: ElementRef;\n\n ngAfterViewInit() {\n this.viewer = new Viewer(this.container.nativeElement, {\n server: this.server,\n api: this.api || 'v1',\n fit: this.fit || 'cover',\n events: {\n onLoadStart: (...args: any[]) => { this.onLoadStart.emit(...args); },\n onLoadProgress: (...args: any[]) => { this.onLoadProgress.emit(...args); },\n onLoadEnd: (...args: any[]) => { this.onLoadEnd.emit(...args); },\n onLoadError: (...args: any[]) => { this.onLoadError.emit(...args); },\n onInteraction: (...args: any[]) => { this.onInteraction.emit(...args); },\n onVrcubeInteraction: (...args: any[]) => { this.onVrcubeInteraction.emit(...args); },\n onVrobjectInteraction: (...args: any[]) => { this.onVrobjectInteraction.emit(...args); },\n onHotspotsChange: this.onHotspotsChange.bind(this)\n },\n });\n\n if (this['scene']) {\n this.viewer.load(this.scene).catch(() => { });\n }\n\n if (this['encoder']) {\n this.viewer.setEncoder(this.encoder).catch(() => { });\n }\n\n if (this.parameters) {\n this.viewer.setParameters(this.parameters).catch(() => { });\n }\n\n if (this.view) {\n this.viewer.setView(this.view).catch(() => { });\n }\n\n if (this.vrcube) {\n this.viewer.setVrcube(this.vrcube);\n }\n\n if (this.vrobject) {\n this.viewer.setVrobject(this.vrobject);\n }\n\n if (this.tags) {\n this.viewer.setTags(this.tags);\n }\n\n this.onResize();\n }\n\n ngOnDestroy(): void {\n this.viewer?.destroy();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (!this.viewer) {\n return;\n }\n\n if (changes['scene'] && changes['scene'].currentValue) {\n this.viewer.load(changes['scene'].currentValue).catch(() => { });\n }\n\n if (changes['encoder'] && changes['encoder'].currentValue) {\n this.viewer.setEncoder(changes['encoder'].currentValue).catch(() => { });\n }\n\n if (changes['parameters'] && changes['parameters'].currentValue) {\n this.viewer.setParameters(changes['parameters'].currentValue).catch(() => { });\n }\n\n if (changes['tags'] && changes['tags'].currentValue) {\n this.viewer.setTags(changes['tags'].currentValue);\n }\n\n if (changes['view'] && changes['view'].currentValue) {\n this.viewer.setView(changes['view'].currentValue).catch(() => { });\n }\n\n if (changes['vrcube'] && changes['vrcube'].currentValue) {\n this.viewer.setVrcube(changes['vrcube'].currentValue);\n }\n\n if (changes['vrobject'] && changes['vrobject'].currentValue) {\n this.viewer.setVrobject(changes['vrobject'].currentValue);\n }\n }\n\n onHotspotsChange(hotspots: Hotspot[]): void {\n this.hotspots = hotspots;\n\n if (this.hotspotsFilter !== undefined) {\n this.hotspots = this.hotspotsFilter(this.hotspots);\n }\n }\n\n snapshot(type: string, quality: number): string | undefined {\n return this.viewer?.snapshot(type, quality);\n }\n\n public fitPosition: { width: number, height: number, top: number, left: number } = { width: 1, height: 1, top: 1, left: 1 };\n public resolution: { width: number, height: number } | undefined;\n public scaleX: number = 1;\n public scaleY: number = 1;\n\n @HostListener('window:resize', ['$event'])\n public onResize(): void {\n this.resolution = Viewport.getStandardResolution(window.innerWidth, window.innerHeight);\n this.fitPosition = Viewport.fit(this.resolution, window.innerWidth, window.innerHeight, 'cover');\n this.scaleX = this.fitPosition.width / this.resolution.width;\n this.scaleY = this.fitPosition.height / this.resolution.height;\n }\n\n public hotspotStyle(hotspot: Hotspot): { left: string, top: string, position: string } {\n if (this.view?.mode === 'vrcube') {\n return {\n position: 'absolute',\n top: hotspot.position2D.y + 'px',\n left: hotspot.position2D.x + 'px'\n };\n } else {\n return {\n position: 'absolute',\n top: (hotspot.position2D.y * this.scaleY + this.fitPosition.top) + 'px',\n left: (hotspot.position2D.x * this.scaleX + this.fitPosition.left) + 'px'\n };\n }\n }\n}\n","<div #container></div>\n\n<div class=\"position-absolute w-100 h-100\" style=\"pointer-events: none;\" *ngIf=\"hotspots.length\">\n <div [ngStyle]=\"hotspotStyle(hotspot)\" *ngFor=\"let hotspot of hotspots\">\n <ng-container *ngTemplateOutlet=\"hotspotTemplateRef; context:{hotspot: hotspot}\"></ng-container>\n </div>\n</div>","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { NgViewerComponent } from './ng-viewer.component';\n\n@NgModule({\n declarations: [\n NgViewerComponent\n ],\n imports: [\n CommonModule\n ],\n exports: [\n NgViewerComponent\n ]\n})\n\nexport class NgViewerModule { }\n","/*\n * Public API Surface of ng-viewer\n */\n\nexport * from './lib/ng-viewer.component';\nexport * from './lib/ng-viewer.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lumiscaphe-ng-viewer.mjs","sources":["../../../projects/ng-viewer/src/lib/ng-viewer.component.ts","../../../projects/ng-viewer/src/lib/ng-viewer.component.html","../../../projects/ng-viewer/src/lib/ng-viewer.module.ts","../../../projects/ng-viewer/src/public-api.ts","../../../projects/ng-viewer/src/lumiscaphe-ng-viewer.ts"],"sourcesContent":["import { AfterViewInit, Component, ContentChild, ElementRef, EventEmitter, Input, OnChanges, OnDestroy, Output, SimpleChanges, TemplateRef, ViewChild } from '@angular/core';\nimport { Encoder, Hotspot, Parameters, Scene, View, Viewer, WRAPIv2, WidgetVRCube, WidgetVRObject } from '@lumiscaphe/viewer';\n\n@Component({\n selector: 'NgViewer',\n templateUrl: './ng-viewer.component.html',\n styleUrls: ['./ng-viewer.component.scss']\n})\nexport class NgViewerComponent implements AfterViewInit, OnChanges, OnDestroy {\n public viewer: Viewer | undefined;\n\n public hotspots2D: Hotspot[] = [];\n\n @Input() server: string | undefined;\n @Input() api: string | undefined;\n @Input() fit: 'contain' | 'cover' | 'fill' | undefined;\n @Input() scene: Scene | undefined;\n @Input() encoder: Encoder | undefined;\n @Input() parameters: Parameters | undefined;\n @Input() view: View | undefined;\n @Input() vrcube: Partial<WidgetVRCube> | undefined;\n @Input() vrobject: Partial<WidgetVRObject> | undefined;\n @Input() hotspots: Array<string | WRAPIv2.Vector3D> | undefined;\n @Input() hotspotsFilter: ((hotspots: Hotspot[]) => Hotspot[]) | undefined;\n\n @Output() onLoadStart = new EventEmitter();\n @Output() onLoadProgress = new EventEmitter();\n @Output() onLoadEnd = new EventEmitter();\n @Output() onLoadError = new EventEmitter();\n @Output() onInteraction = new EventEmitter();\n @Output() onVrcubeInteraction = new EventEmitter();\n @Output() onVrobjectInteraction = new EventEmitter();\n\n @ContentChild('hotspotTemplate') hotspotTemplateRef: TemplateRef<any> | null = null;\n\n @ViewChild('container') container!: ElementRef;\n\n ngAfterViewInit() {\n this.viewer = new Viewer(this.container.nativeElement, {\n server: this.server,\n api: this.api || 'v1',\n fit: this.fit || 'cover',\n events: {\n onLoadStart: (...args: any[]) => {\n this.onLoadStart.emit(...args);\n },\n onLoadProgress: (...args: any[]) => {\n this.onLoadProgress.emit(...args);\n },\n onLoadEnd: (...args: any[]) => {\n this.onLoadEnd.emit(...args);\n },\n onLoadError: (...args: any[]) => {\n this.onLoadError.emit(...args);\n },\n onHotspotsChange: this.onHotspotsChange.bind(this),\n onInteraction: (...args: any[]) => {\n this.onInteraction.emit(...args);\n },\n onVrcubeInteraction: (...args: any[]) => {\n this.onVrcubeInteraction.emit(...args);\n },\n onVrobjectInteraction: (...args: any[]) => {\n this.onVrobjectInteraction.emit(...args);\n }\n }\n });\n\n if (this.scene) {\n this.viewer.load(this.scene).catch(() => {});\n }\n\n if (this.encoder) {\n this.viewer.setEncoder(this.encoder).catch(() => {});\n }\n\n if (this.hotspots) {\n this.viewer.setHotspots(this.hotspots);\n }\n\n if (this.parameters) {\n this.viewer.setParameters(this.parameters).catch(() => {});\n }\n\n if (this.view) {\n this.viewer.setView(this.view).catch(() => {});\n }\n\n if (this.vrcube) {\n this.viewer.setVrcube(this.vrcube);\n }\n\n if (this.vrobject) {\n this.viewer.setVrobject(this.vrobject);\n }\n }\n\n ngOnDestroy(): void {\n this.viewer?.destroy();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (!this.viewer) {\n return;\n }\n\n if (changes['scene'] && changes['scene'].currentValue) {\n this.viewer.load(changes['scene'].currentValue).catch(() => {});\n }\n\n if (changes['encoder'] && changes['encoder'].currentValue) {\n this.viewer.setEncoder(changes['encoder'].currentValue).catch(() => {});\n }\n\n if (changes['hotspots'] && changes['hotspots'].currentValue) {\n this.viewer.setHotspots(changes['hotspots'].currentValue);\n }\n\n if (changes['parameters'] && changes['parameters'].currentValue) {\n this.viewer.setParameters(changes['parameters'].currentValue).catch(() => {});\n }\n\n if (changes['view'] && changes['view'].currentValue) {\n this.viewer.setView(changes['view'].currentValue).catch(() => {});\n }\n\n if (changes['vrcube'] && changes['vrcube'].currentValue) {\n this.viewer.setVrcube(changes['vrcube'].currentValue);\n }\n\n if (changes['vrobject'] && changes['vrobject'].currentValue) {\n this.viewer.setVrobject(changes['vrobject'].currentValue);\n }\n }\n\n async pick(position: WRAPIv2.Vector2D): Promise<WRAPIv2.PickResult | undefined> {\n return this.viewer?.pick(position);\n }\n\n snapshot(type: string, quality: number): string | undefined {\n return this.viewer?.snapshot(type, quality);\n }\n\n onHotspotsChange(hotspots: Hotspot[]): void {\n this.hotspots2D = hotspots;\n\n if (this.hotspotsFilter !== undefined) {\n this.hotspots2D = this.hotspotsFilter(this.hotspots2D);\n }\n }\n}\n","<div #container></div>\n\n<div class=\"position-absolute w-100 h-100\" style=\"pointer-events: none\" *ngIf=\"hotspots2D.length\">\n <ng-container *ngFor=\"let hotspot of hotspots2D; index as i\">\n <div [ngStyle]=\"{ position: 'absolute', top: hotspot.position2D.y + 'px', left: hotspot.position2D.x + 'px' }\">\n <ng-container *ngTemplateOutlet=\"hotspotTemplateRef; context: { $implicit: hotspot, index: i }\"></ng-container>\n </div>\n </ng-container>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { NgViewerComponent } from './ng-viewer.component';\n\n@NgModule({\n declarations: [\n NgViewerComponent\n ],\n imports: [\n CommonModule\n ],\n exports: [\n NgViewerComponent\n ]\n})\n\nexport class NgViewerModule { }\n","/*\n * Public API Surface of ng-viewer\n */\n\nexport * from './lib/ng-viewer.component';\nexport * from './lib/ng-viewer.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;MAQa,iBAAiB,CAAA;AAL9B,IAAA,WAAA,GAAA;QAQS,IAAU,CAAA,UAAA,GAAc,EAAE,CAAC;AAcxB,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAE,CAAC;AACjC,QAAA,IAAA,CAAA,cAAc,GAAG,IAAI,YAAY,EAAE,CAAC;AACpC,QAAA,IAAA,CAAA,SAAS,GAAG,IAAI,YAAY,EAAE,CAAC;AAC/B,QAAA,IAAA,CAAA,WAAW,GAAG,IAAI,YAAY,EAAE,CAAC;AACjC,QAAA,IAAA,CAAA,aAAa,GAAG,IAAI,YAAY,EAAE,CAAC;AACnC,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAI,YAAY,EAAE,CAAC;AACzC,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAI,YAAY,EAAE,CAAC;QAEpB,IAAkB,CAAA,kBAAA,GAA4B,IAAI,CAAC;AAqHrF,KAAA;IAjHC,eAAe,GAAA;QACb,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,EAAE;YACrD,MAAM,EAAE,IAAI,CAAC,MAAM;AACnB,YAAA,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,IAAI;AACrB,YAAA,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,OAAO;AACxB,YAAA,MAAM,EAAE;AACN,gBAAA,WAAW,EAAE,CAAC,GAAG,IAAW,KAAI;oBAC9B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;iBAChC;AACD,gBAAA,cAAc,EAAE,CAAC,GAAG,IAAW,KAAI;oBACjC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;iBACnC;AACD,gBAAA,SAAS,EAAE,CAAC,GAAG,IAAW,KAAI;oBAC5B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;iBAC9B;AACD,gBAAA,WAAW,EAAE,CAAC,GAAG,IAAW,KAAI;oBAC9B,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;iBAChC;gBACD,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;AAClD,gBAAA,aAAa,EAAE,CAAC,GAAG,IAAW,KAAI;oBAChC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;iBAClC;AACD,gBAAA,mBAAmB,EAAE,CAAC,GAAG,IAAW,KAAI;oBACtC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;iBACxC;AACD,gBAAA,qBAAqB,EAAE,CAAC,GAAG,IAAW,KAAI;oBACxC,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;iBAC1C;AACF,aAAA;AACF,SAAA,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,KAAK,EAAE;AACd,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAO,GAAC,CAAC,CAAC;AAC9C,SAAA;QAED,IAAI,IAAI,CAAC,OAAO,EAAE;AAChB,YAAA,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,MAAO,GAAC,CAAC,CAAC;AACtD,SAAA;QAED,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACxC,SAAA;QAED,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,MAAO,GAAC,CAAC,CAAC;AAC5D,SAAA;QAED,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,YAAA,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAO,GAAC,CAAC,CAAC;AAChD,SAAA;QAED,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACpC,SAAA;QAED,IAAI,IAAI,CAAC,QAAQ,EAAE;YACjB,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACxC,SAAA;KACF;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;KACxB;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;YAChB,OAAO;AACR,SAAA;QAED,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE;YACrD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,MAAO,GAAC,CAAC,CAAC;AACjE,SAAA;QAED,IAAI,OAAO,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,YAAY,EAAE;YACzD,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,MAAO,GAAC,CAAC,CAAC;AACzE,SAAA;QAED,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,YAAY,EAAE;AAC3D,YAAA,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC;AAC3D,SAAA;QAED,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC,YAAY,EAAE;YAC/D,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,MAAO,GAAC,CAAC,CAAC;AAC/E,SAAA;QAED,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC,YAAY,EAAE;YACnD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,MAAO,GAAC,CAAC,CAAC;AACnE,SAAA;QAED,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY,EAAE;AACvD,YAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC;AACvD,SAAA;QAED,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,YAAY,EAAE;AAC3D,YAAA,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC;AAC3D,SAAA;KACF;IAED,MAAM,IAAI,CAAC,QAA0B,EAAA;QACnC,OAAO,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;KACpC;IAED,QAAQ,CAAC,IAAY,EAAE,OAAe,EAAA;QACpC,OAAO,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;KAC7C;AAED,IAAA,gBAAgB,CAAC,QAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;AAE3B,QAAA,IAAI,IAAI,CAAC,cAAc,KAAK,SAAS,EAAE;YACrC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AACxD,SAAA;KACF;;+GA7IU,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAjB,iBAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,iBAAiB,6vBCR9B,geASA,EAAA,MAAA,EAAA,CAAA,qCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,QAAA,EAAA,oBAAA,EAAA,MAAA,EAAA,CAAA,yBAAA,EAAA,kBAAA,EAAA,0BAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA;4FDDa,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAL7B,SAAS;+BACE,UAAU,EAAA,QAAA,EAAA,geAAA,EAAA,MAAA,EAAA,CAAA,qCAAA,CAAA,EAAA,CAAA;8BASX,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,GAAG,EAAA,CAAA;sBAAX,KAAK;gBACG,GAAG,EAAA,CAAA;sBAAX,KAAK;gBACG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBACG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBACG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBACG,IAAI,EAAA,CAAA;sBAAZ,KAAK;gBACG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,QAAQ,EAAA,CAAA;sBAAhB,KAAK;gBACG,cAAc,EAAA,CAAA;sBAAtB,KAAK;gBAEI,WAAW,EAAA,CAAA;sBAApB,MAAM;gBACG,cAAc,EAAA,CAAA;sBAAvB,MAAM;gBACG,SAAS,EAAA,CAAA;sBAAlB,MAAM;gBACG,WAAW,EAAA,CAAA;sBAApB,MAAM;gBACG,aAAa,EAAA,CAAA;sBAAtB,MAAM;gBACG,mBAAmB,EAAA,CAAA;sBAA5B,MAAM;gBACG,qBAAqB,EAAA,CAAA;sBAA9B,MAAM;gBAE0B,kBAAkB,EAAA,CAAA;sBAAlD,YAAY;uBAAC,iBAAiB,CAAA;gBAEP,SAAS,EAAA,CAAA;sBAAhC,SAAS;uBAAC,WAAW,CAAA;;;MEnBX,cAAc,CAAA;;4GAAd,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAd,cAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,EAVvB,YAAA,EAAA,CAAA,iBAAiB,CAGjB,EAAA,OAAA,EAAA,CAAA,YAAY,aAGZ,iBAAiB,CAAA,EAAA,CAAA,CAAA;AAIR,cAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,cAAc,YAPvB,YAAY,CAAA,EAAA,CAAA,CAAA;4FAOH,cAAc,EAAA,UAAA,EAAA,CAAA;kBAZ1B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE;wBACZ,iBAAiB;AAClB,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,YAAY;AACb,qBAAA;AACD,oBAAA,OAAO,EAAE;wBACP,iBAAiB;AAClB,qBAAA;AACF,iBAAA,CAAA;;;ACdD;;AAEG;;ACFH;;AAEG;;;;"}
@@ -1,9 +1,9 @@
1
1
  import { AfterViewInit, ElementRef, EventEmitter, OnChanges, OnDestroy, SimpleChanges, TemplateRef } from '@angular/core';
2
- import { Encoder, Hotspot, Parameters, Scene, View, Viewer, WidgetVRCube, WidgetVRObject } from '@lumiscaphe/viewer';
2
+ import { Encoder, Hotspot, Parameters, Scene, View, Viewer, WRAPIv2, WidgetVRCube, WidgetVRObject } from '@lumiscaphe/viewer';
3
3
  import * as i0 from "@angular/core";
4
4
  export declare class NgViewerComponent implements AfterViewInit, OnChanges, OnDestroy {
5
5
  viewer: Viewer | undefined;
6
- hotspots: Hotspot[];
6
+ hotspots2D: Hotspot[];
7
7
  server: string | undefined;
8
8
  api: string | undefined;
9
9
  fit: 'contain' | 'cover' | 'fill' | undefined;
@@ -13,8 +13,7 @@ export declare class NgViewerComponent implements AfterViewInit, OnChanges, OnDe
13
13
  view: View | undefined;
14
14
  vrcube: Partial<WidgetVRCube> | undefined;
15
15
  vrobject: Partial<WidgetVRObject> | undefined;
16
- tags: string[] | undefined;
17
- hotspotTemplateRef: TemplateRef<any> | null;
16
+ hotspots: Array<string | WRAPIv2.Vector3D> | undefined;
18
17
  hotspotsFilter: ((hotspots: Hotspot[]) => Hotspot[]) | undefined;
19
18
  onLoadStart: EventEmitter<any>;
20
19
  onLoadProgress: EventEmitter<any>;
@@ -23,30 +22,14 @@ export declare class NgViewerComponent implements AfterViewInit, OnChanges, OnDe
23
22
  onInteraction: EventEmitter<any>;
24
23
  onVrcubeInteraction: EventEmitter<any>;
25
24
  onVrobjectInteraction: EventEmitter<any>;
25
+ hotspotTemplateRef: TemplateRef<any> | null;
26
26
  container: ElementRef;
27
27
  ngAfterViewInit(): void;
28
28
  ngOnDestroy(): void;
29
29
  ngOnChanges(changes: SimpleChanges): void;
30
- onHotspotsChange(hotspots: Hotspot[]): void;
30
+ pick(position: WRAPIv2.Vector2D): Promise<WRAPIv2.PickResult | undefined>;
31
31
  snapshot(type: string, quality: number): string | undefined;
32
- fitPosition: {
33
- width: number;
34
- height: number;
35
- top: number;
36
- left: number;
37
- };
38
- resolution: {
39
- width: number;
40
- height: number;
41
- } | undefined;
42
- scaleX: number;
43
- scaleY: number;
44
- onResize(): void;
45
- hotspotStyle(hotspot: Hotspot): {
46
- left: string;
47
- top: string;
48
- position: string;
49
- };
32
+ onHotspotsChange(hotspots: Hotspot[]): void;
50
33
  static ɵfac: i0.ɵɵFactoryDeclaration<NgViewerComponent, never>;
51
- static ɵcmp: i0.ɵɵComponentDeclaration<NgViewerComponent, "NgViewer", never, { "server": "server"; "api": "api"; "fit": "fit"; "scene": "scene"; "encoder": "encoder"; "parameters": "parameters"; "view": "view"; "vrcube": "vrcube"; "vrobject": "vrobject"; "tags": "tags"; "hotspotTemplateRef": "hotspotTemplateRef"; "hotspotsFilter": "hotspotsFilter"; }, { "onLoadStart": "onLoadStart"; "onLoadProgress": "onLoadProgress"; "onLoadEnd": "onLoadEnd"; "onLoadError": "onLoadError"; "onInteraction": "onInteraction"; "onVrcubeInteraction": "onVrcubeInteraction"; "onVrobjectInteraction": "onVrobjectInteraction"; }, never, never, false>;
34
+ static ɵcmp: i0.ɵɵComponentDeclaration<NgViewerComponent, "NgViewer", never, { "server": "server"; "api": "api"; "fit": "fit"; "scene": "scene"; "encoder": "encoder"; "parameters": "parameters"; "view": "view"; "vrcube": "vrcube"; "vrobject": "vrobject"; "hotspots": "hotspots"; "hotspotsFilter": "hotspotsFilter"; }, { "onLoadStart": "onLoadStart"; "onLoadProgress": "onLoadProgress"; "onLoadEnd": "onLoadEnd"; "onLoadError": "onLoadError"; "onInteraction": "onInteraction"; "onVrcubeInteraction": "onVrcubeInteraction"; "onVrobjectInteraction": "onVrobjectInteraction"; }, ["hotspotTemplateRef"], never, false>;
52
35
  }
package/package.json CHANGED
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "name": "@lumiscaphe/ng-viewer",
3
- "version": "14.0.0",
3
+ "version": "14.2.0",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^14.0.0",
6
6
  "@angular/core": "^14.0.0",
7
- "@lumiscaphe/viewer": "^4.0.0"
7
+ "@lumiscaphe/viewer": "^4.1.0"
8
8
  },
9
9
  "dependencies": {
10
10
  "tslib": "^2.3.0"
@@ -1,72 +0,0 @@
1
- export class Viewport {
2
- static fit(resolution, viewportWidth, viewportHeight, fit) {
3
- const aspectRatio = resolution.width / resolution.height;
4
- const viewportRatio = viewportWidth / viewportHeight;
5
- let width = 0;
6
- let height = 0;
7
- switch (fit) {
8
- case 'contain':
9
- width = viewportRatio < aspectRatio ? viewportWidth : viewportHeight * aspectRatio;
10
- height = viewportRatio < aspectRatio ? viewportWidth / aspectRatio : viewportHeight;
11
- break;
12
- case 'cover':
13
- default:
14
- width = viewportRatio < aspectRatio ? viewportHeight * aspectRatio : viewportWidth;
15
- height = viewportRatio < aspectRatio ? viewportHeight : viewportWidth / aspectRatio;
16
- break;
17
- case 'fill':
18
- width = viewportWidth;
19
- height = viewportHeight;
20
- break;
21
- }
22
- return {
23
- width: Math.round(width),
24
- height: Math.round(height),
25
- top: Math.round((viewportHeight - height) / 2),
26
- left: Math.round((viewportWidth - width) / 2),
27
- };
28
- }
29
- static getStandardAspectRatio(width, height) {
30
- if (width === 0 || height === 0) {
31
- return 0;
32
- }
33
- const aspectRatio = width / height;
34
- if (width < height) {
35
- const distanceTo34 = Math.abs(3 / 4 - aspectRatio);
36
- const distanceTo916 = Math.abs(9 / 16 - aspectRatio);
37
- return distanceTo34 < distanceTo916 ? 3 / 4 : 9 / 16;
38
- }
39
- const distanceTo43 = Math.abs(4 / 3 - aspectRatio);
40
- const distanceTo169 = Math.abs(16 / 9 - aspectRatio);
41
- return distanceTo43 < distanceTo169 ? 4 / 3 : 16 / 9;
42
- }
43
- static getStandardQuality(height) {
44
- if (height <= 240) {
45
- return 240;
46
- }
47
- if (height <= 360) {
48
- return 360;
49
- }
50
- if (height <= 480) {
51
- return 480;
52
- }
53
- if (height <= 720) {
54
- return 720;
55
- }
56
- return 1080;
57
- }
58
- static getStandardResolution(width, height) {
59
- if (width === 0 || height === 0) {
60
- return { width: 0, height: 0 };
61
- }
62
- const aspectRatio = Viewport.getStandardAspectRatio(width, height);
63
- if (width < height) {
64
- const quality = Viewport.getStandardQuality(height * aspectRatio);
65
- return { width: Math.round(quality), height: Math.round(quality / aspectRatio) };
66
- }
67
- const quality = Viewport.getStandardQuality(width / aspectRatio);
68
- return { width: Math.round(quality * aspectRatio), height: Math.round(quality) };
69
- }
70
- }
71
- export default Viewport;
72
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld3BvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy12aWV3ZXIvc3JjL2xpYi92aWV3cG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sUUFBUTtJQUNaLE1BQU0sQ0FBQyxHQUFHLENBQUMsVUFBZSxFQUFFLGFBQWtCLEVBQUUsY0FBbUIsRUFBRSxHQUFRO1FBQ2xGLE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxLQUFLLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQztRQUN6RCxNQUFNLGFBQWEsR0FBRyxhQUFhLEdBQUcsY0FBYyxDQUFDO1FBRXJELElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQztRQUNkLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztRQUVmLFFBQVEsR0FBRyxFQUFFO1lBQ1gsS0FBSyxTQUFTO2dCQUNaLEtBQUssR0FBRyxhQUFhLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLGNBQWMsR0FBRyxXQUFXLENBQUM7Z0JBQ25GLE1BQU0sR0FBRyxhQUFhLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxhQUFhLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUM7Z0JBQ3BGLE1BQU07WUFDUixLQUFLLE9BQU8sQ0FBQztZQUNiO2dCQUNFLEtBQUssR0FBRyxhQUFhLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxjQUFjLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUM7Z0JBQ25GLE1BQU0sR0FBRyxhQUFhLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLGFBQWEsR0FBRyxXQUFXLENBQUM7Z0JBQ3BGLE1BQU07WUFDUixLQUFLLE1BQU07Z0JBQ1QsS0FBSyxHQUFHLGFBQWEsQ0FBQztnQkFDdEIsTUFBTSxHQUFHLGNBQWMsQ0FBQztnQkFDeEIsTUFBTTtTQUNUO1FB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SSxDQUFDLEtBQUssQ0FBQyxPQUFPLEdBQUcsV0FBVyxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztJQUNuRixDQUFDO0NBQ0Y7QUFFRCxlQUFlLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBWaWV3cG9ydCB7XG4gIHB1YmxpYyBzdGF0aWMgZml0KHJlc29sdXRpb246IGFueSwgdmlld3BvcnRXaWR0aDogYW55LCB2aWV3cG9ydEhlaWdodDogYW55LCBmaXQ6IGFueSk6IHsgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIHRvcDogbnVtYmVyLCBsZWZ0OiBudW1iZXIgfSB7XG4gICAgY29uc3QgYXNwZWN0UmF0aW8gPSByZXNvbHV0aW9uLndpZHRoIC8gcmVzb2x1dGlvbi5oZWlnaHQ7XG4gICAgY29uc3Qgdmlld3BvcnRSYXRpbyA9IHZpZXdwb3J0V2lkdGggLyB2aWV3cG9ydEhlaWdodDtcblxuICAgIGxldCB3aWR0aCA9IDA7XG4gICAgbGV0IGhlaWdodCA9IDA7XG5cbiAgICBzd2l0Y2ggKGZpdCkge1xuICAgICAgY2FzZSAnY29udGFpbic6XG4gICAgICAgIHdpZHRoID0gdmlld3BvcnRSYXRpbyA8IGFzcGVjdFJhdGlvID8gdmlld3BvcnRXaWR0aCA6IHZpZXdwb3J0SGVpZ2h0ICogYXNwZWN0UmF0aW87XG4gICAgICAgIGhlaWdodCA9IHZpZXdwb3J0UmF0aW8gPCBhc3BlY3RSYXRpbyA/IHZpZXdwb3J0V2lkdGggLyBhc3BlY3RSYXRpbyA6IHZpZXdwb3J0SGVpZ2h0O1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NvdmVyJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHdpZHRoID0gdmlld3BvcnRSYXRpbyA8IGFzcGVjdFJhdGlvID8gdmlld3BvcnRIZWlnaHQgKiBhc3BlY3RSYXRpbyA6IHZpZXdwb3J0V2lkdGg7XG4gICAgICAgIGhlaWdodCA9IHZpZXdwb3J0UmF0aW8gPCBhc3BlY3RSYXRpbyA/IHZpZXdwb3J0SGVpZ2h0IDogdmlld3BvcnRXaWR0aCAvIGFzcGVjdFJhdGlvO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2ZpbGwnOlxuICAgICAgICB3aWR0aCA9IHZpZXdwb3J0V2lkdGg7XG4gICAgICAgIGhlaWdodCA9IHZpZXdwb3J0SGVpZ2h0O1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgd2lkdGg6IE1hdGgucm91bmQod2lkdGgpLFxuICAgICAgaGVpZ2h0OiBNYXRoLnJvdW5kKGhlaWdodCksXG4gICAgICB0b3A6IE1hdGgucm91bmQoKHZpZXdwb3J0SGVpZ2h0IC0gaGVpZ2h0KSAvIDIpLFxuICAgICAgbGVmdDogTWF0aC5yb3VuZCgodmlld3BvcnRXaWR0aCAtIHdpZHRoKSAvIDIpLFxuICAgIH07XG4gIH1cblxuICBzdGF0aWMgZ2V0U3RhbmRhcmRBc3BlY3RSYXRpbyh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IG51bWJlciB7XG4gICAgaWYgKHdpZHRoID09PSAwIHx8IGhlaWdodCA9PT0gMCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgY29uc3QgYXNwZWN0UmF0aW8gPSB3aWR0aCAvIGhlaWdodDtcblxuICAgIGlmICh3aWR0aCA8IGhlaWdodCkge1xuICAgICAgY29uc3QgZGlzdGFuY2VUbzM0ID0gTWF0aC5hYnMoMyAvIDQgLSBhc3BlY3RSYXRpbyk7XG4gICAgICBjb25zdCBkaXN0YW5jZVRvOTE2ID0gTWF0aC5hYnMoOSAvIDE2IC0gYXNwZWN0UmF0aW8pO1xuICAgICAgcmV0dXJuIGRpc3RhbmNlVG8zNCA8IGRpc3RhbmNlVG85MTYgPyAzIC8gNCA6IDkgLyAxNjtcbiAgICB9XG5cbiAgICBjb25zdCBkaXN0YW5jZVRvNDMgPSBNYXRoLmFicyg0IC8gMyAtIGFzcGVjdFJhdGlvKTtcbiAgICBjb25zdCBkaXN0YW5jZVRvMTY5ID0gTWF0aC5hYnMoMTYgLyA5IC0gYXNwZWN0UmF0aW8pO1xuXG4gICAgcmV0dXJuIGRpc3RhbmNlVG80MyA8IGRpc3RhbmNlVG8xNjkgPyA0IC8gMyA6IDE2IC8gOTtcbiAgfVxuXG4gIHN0YXRpYyBnZXRTdGFuZGFyZFF1YWxpdHkoaGVpZ2h0OiBudW1iZXIpOiBudW1iZXIge1xuICAgIGlmIChoZWlnaHQgPD0gMjQwKSB7XG4gICAgICByZXR1cm4gMjQwO1xuICAgIH1cblxuICAgIGlmIChoZWlnaHQgPD0gMzYwKSB7XG4gICAgICByZXR1cm4gMzYwO1xuICAgIH1cblxuICAgIGlmIChoZWlnaHQgPD0gNDgwKSB7XG4gICAgICByZXR1cm4gNDgwO1xuICAgIH1cblxuICAgIGlmIChoZWlnaHQgPD0gNzIwKSB7XG4gICAgICByZXR1cm4gNzIwO1xuICAgIH1cblxuICAgIHJldHVybiAxMDgwO1xuICB9XG5cbiAgcHVibGljIHN0YXRpYyBnZXRTdGFuZGFyZFJlc29sdXRpb24od2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiB7IHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyIH0ge1xuICAgIGlmICh3aWR0aCA9PT0gMCB8fCBoZWlnaHQgPT09IDApIHtcbiAgICAgIHJldHVybiB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBhc3BlY3RSYXRpbyA9IFZpZXdwb3J0LmdldFN0YW5kYXJkQXNwZWN0UmF0aW8od2lkdGgsIGhlaWdodCk7XG5cbiAgICBpZiAod2lkdGggPCBoZWlnaHQpIHtcbiAgICAgIGNvbnN0IHF1YWxpdHkgPSBWaWV3cG9ydC5nZXRTdGFuZGFyZFF1YWxpdHkoaGVpZ2h0ICogYXNwZWN0UmF0aW8pO1xuICAgICAgcmV0dXJuIHsgd2lkdGg6IE1hdGgucm91bmQocXVhbGl0eSksIGhlaWdodDogTWF0aC5yb3VuZChxdWFsaXR5IC8gYXNwZWN0UmF0aW8pIH07XG4gICAgfVxuXG4gICAgY29uc3QgcXVhbGl0eSA9IFZpZXdwb3J0LmdldFN0YW5kYXJkUXVhbGl0eSh3aWR0aCAvIGFzcGVjdFJhdGlvKTtcbiAgICByZXR1cm4geyB3aWR0aDogTWF0aC5yb3VuZChxdWFsaXR5ICogYXNwZWN0UmF0aW8pLCBoZWlnaHQ6IE1hdGgucm91bmQocXVhbGl0eSkgfTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBWaWV3cG9ydDtcbiJdfQ==
package/lib/viewport.d.ts DELETED
@@ -1,15 +0,0 @@
1
- export declare class Viewport {
2
- static fit(resolution: any, viewportWidth: any, viewportHeight: any, fit: any): {
3
- width: number;
4
- height: number;
5
- top: number;
6
- left: number;
7
- };
8
- static getStandardAspectRatio(width: number, height: number): number;
9
- static getStandardQuality(height: number): number;
10
- static getStandardResolution(width: number, height: number): {
11
- width: number;
12
- height: number;
13
- };
14
- }
15
- export default Viewport;