wuic-framework-lib 1.5.0 → 1.7.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.
- package/fesm2022/{wuic-framework-lib-chart-list.component-0J1ghIrS.mjs → wuic-framework-lib-chart-list.component-Bl424n7x.mjs} +50 -38
- package/fesm2022/{wuic-framework-lib-code-editor.component-C21mvjyr.mjs → wuic-framework-lib-code-editor.component-N6HMl2mf.mjs} +174 -274
- package/fesm2022/{wuic-framework-lib-designer.component-x10ZzUEy.mjs → wuic-framework-lib-designer.component-Bd2fwl6H.mjs} +499 -581
- package/fesm2022/{wuic-framework-lib-first-run-wizard.component-BuSxs_CM.mjs → wuic-framework-lib-first-run-wizard.component-NN6cWVHL.mjs} +22 -24
- package/fesm2022/{wuic-framework-lib-framework-docs.component-xTGLbEnp.mjs → wuic-framework-lib-framework-docs.component-B867JAYe.mjs} +2912 -294
- package/fesm2022/{wuic-framework-lib-pivot-builder.component-BkFFjPm4.mjs → wuic-framework-lib-pivot-builder.component-DWukH0L-.mjs} +580 -68
- package/fesm2022/{wuic-framework-lib-prompt-dialog-fallback-host.component-Bi-TrJB6.mjs → wuic-framework-lib-prompt-dialog-fallback-host.component-DWO1Rcgv.mjs} +2 -2
- package/fesm2022/wuic-framework-lib-report-designer.component-QcrU81m6.mjs +380 -0
- package/fesm2022/wuic-framework-lib-report-scaffold-dialog.component-U-zdOoRV.mjs +431 -0
- package/fesm2022/{wuic-framework-lib-report-viewer.component-BR-BfI2r.mjs → wuic-framework-lib-report-viewer.component-B4LhA3SL.mjs} +8 -13
- package/fesm2022/{wuic-framework-lib-scene3d-designer.component-BQzFxSXP.mjs → wuic-framework-lib-scene3d-designer.component-DjOfzKLo.mjs} +323 -88
- package/fesm2022/{wuic-framework-lib-scene3d-light-baker-gpu-0LjqhSNn.mjs → wuic-framework-lib-scene3d-light-baker-gpu-C96T9uIW.mjs} +2 -2
- package/fesm2022/{wuic-framework-lib-scene3d-shader-effect-CQLWkuh1.mjs → wuic-framework-lib-scene3d-shader-effect-DjHyCAFK.mjs} +612 -32
- package/fesm2022/{wuic-framework-lib-scene3d-viewer.component-imoV3HOs.mjs → wuic-framework-lib-scene3d-viewer.component-Dboz1fjl.mjs} +149 -18
- package/fesm2022/{wuic-framework-lib-scheduler-list.component-xzlTEkoq.mjs → wuic-framework-lib-scheduler-list.component--wY21R3o.mjs} +169 -53
- package/fesm2022/{wuic-framework-lib-spreadsheet-list-sf.component-CrS6fOGj.mjs → wuic-framework-lib-spreadsheet-list-sf.component-Ek30J8v-.mjs} +149 -108
- package/fesm2022/{wuic-framework-lib-stimulsoft-license.service-BIyxB4pO.mjs → wuic-framework-lib-stimulsoft-license.service-CsNNSFYs.mjs} +3 -3
- package/fesm2022/wuic-framework-lib-timeline-list.component-aqCH4P0G.mjs +805 -0
- package/fesm2022/{wuic-framework-lib-workflow-designer.component-5xtQ7-6z.mjs → wuic-framework-lib-workflow-designer.component-DMM8BeXm.mjs} +180 -150
- package/fesm2022/{wuic-framework-lib-wuic-framework-lib-3TZ-j-yL.mjs → wuic-framework-lib-wuic-framework-lib-dfLTqam5.mjs} +6761 -2347
- package/fesm2022/wuic-framework-lib.mjs +1 -1
- package/package.json +4 -2
- package/styles/_wuic-tokens.scss +82 -0
- package/styles/styles.scss +160 -0
- package/types/wuic-framework-lib.d.ts +4264 -2691
- package/fesm2022/wuic-framework-lib-report-designer.component-ZvB46-LV.mjs +0 -194
|
@@ -2,8 +2,11 @@ import * as i0 from '@angular/core';
|
|
|
2
2
|
import { Input, ViewChild, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
3
|
import * as THREE from 'three';
|
|
4
4
|
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';
|
|
5
|
-
import { W as WtoolboxService,
|
|
6
|
-
import {
|
|
5
|
+
import { W as WtoolboxService, h as DataProviderService, M as MetadataProviderService } from './wuic-framework-lib-wuic-framework-lib-dfLTqam5.mjs';
|
|
6
|
+
import { R as deserializeScene, i as isWebGpuSupported, n as createScene3dRenderer, o as WUIC_SHADER_EFFECT_KEY, t as parseShaderEffect, v as buildEffectNodeMaterial, w as buildEffectShaderMaterial, x as getMeshRepeaterConfig, E as regenerateRepeater, y as WUIC_REPEATER_CHILD, C as CarouselController, b as defaultCarouselConfig, A as buildUploadTextureResolver, p as makeTextSpriteMesh, s as resolveAssetFormat, z as normalizeAssetToUnit, B as applyRepeaterTextureTo, G as createPhysicsWorld, F as getPhysicsDef, O as WUIC_BINDING_KEY, J as carouselArrowDir, K as WUIC_REPEATER_RECORD, M as closeItemPopup, N as showItemPopup, L as runRepeaterCallback } from './wuic-framework-lib-scene3d-shader-effect-DjHyCAFK.mjs';
|
|
7
|
+
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
|
|
8
|
+
import { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader.js';
|
|
9
|
+
import { STLLoader } from 'three/examples/jsm/loaders/STLLoader.js';
|
|
7
10
|
import * as i1 from '@angular/router';
|
|
8
11
|
|
|
9
12
|
/**
|
|
@@ -78,6 +81,10 @@ class Scene3dViewerComponent {
|
|
|
78
81
|
pendingPayload;
|
|
79
82
|
// --- bound listener (per removeEventListener in ngOnDestroy) ---
|
|
80
83
|
onCanvasClick = (event) => this.handleClick(event);
|
|
84
|
+
onCanvasDblClick = (event) => this.handleViewerEvent(event, 'dblclick', false);
|
|
85
|
+
onCanvasContextMenu = (event) => this.handleViewerEvent(event, 'rightclick', true);
|
|
86
|
+
/** Hook per-frame del popup item (billboard del pannello 3D verso la camera). */
|
|
87
|
+
popupFrameHook = null;
|
|
81
88
|
constructor(dataSrv, metaSrv, route, router, cdr, zone) {
|
|
82
89
|
this.dataSrv = dataSrv;
|
|
83
90
|
this.metaSrv = metaSrv;
|
|
@@ -165,7 +172,8 @@ class Scene3dViewerComponent {
|
|
|
165
172
|
this.pendingPayload = parsed;
|
|
166
173
|
}
|
|
167
174
|
}
|
|
168
|
-
catch
|
|
175
|
+
catch {
|
|
176
|
+
// Load/parse failure: surfaced to the user via errorMessage, no rethrow needed.
|
|
169
177
|
this.loading = false;
|
|
170
178
|
this.errorMessage = 'Errore nel caricamento della scena';
|
|
171
179
|
this.cdr.markForCheck();
|
|
@@ -213,6 +221,8 @@ class Scene3dViewerComponent {
|
|
|
213
221
|
// Click -> apri CRUD della rotta bindata (F5 pattern), fuori da Angular.
|
|
214
222
|
this.zone.runOutsideAngular(() => {
|
|
215
223
|
renderer.domElement.addEventListener('click', this.onCanvasClick);
|
|
224
|
+
renderer.domElement.addEventListener('dblclick', this.onCanvasDblClick);
|
|
225
|
+
renderer.domElement.addEventListener('contextmenu', this.onCanvasContextMenu);
|
|
216
226
|
});
|
|
217
227
|
this.resizeObserver = new ResizeObserver(() => this.handleResize());
|
|
218
228
|
this.resizeObserver.observe(container);
|
|
@@ -243,6 +253,9 @@ class Scene3dViewerComponent {
|
|
|
243
253
|
} });
|
|
244
254
|
}
|
|
245
255
|
if (this.renderer && this.scene && this.camera) {
|
|
256
|
+
if (this.popupFrameHook) {
|
|
257
|
+
this.popupFrameHook();
|
|
258
|
+
} // billboard pannello popup 3D
|
|
246
259
|
this.renderer.render(this.scene, this.viewCamera || this.camera);
|
|
247
260
|
}
|
|
248
261
|
};
|
|
@@ -258,6 +271,8 @@ class Scene3dViewerComponent {
|
|
|
258
271
|
const canvas = this.renderer?.domElement;
|
|
259
272
|
if (canvas) {
|
|
260
273
|
canvas.removeEventListener('click', this.onCanvasClick);
|
|
274
|
+
canvas.removeEventListener('dblclick', this.onCanvasDblClick);
|
|
275
|
+
canvas.removeEventListener('contextmenu', this.onCanvasContextMenu);
|
|
261
276
|
}
|
|
262
277
|
this.orbit?.dispose();
|
|
263
278
|
this.orbit = undefined;
|
|
@@ -270,7 +285,7 @@ class Scene3dViewerComponent {
|
|
|
270
285
|
}
|
|
271
286
|
this.renderer?.dispose();
|
|
272
287
|
if (canvas?.parentElement) {
|
|
273
|
-
canvas.
|
|
288
|
+
canvas.remove();
|
|
274
289
|
}
|
|
275
290
|
this.renderer = undefined;
|
|
276
291
|
this.scene = undefined;
|
|
@@ -323,7 +338,8 @@ class Scene3dViewerComponent {
|
|
|
323
338
|
try {
|
|
324
339
|
root = deserializeScene(payload);
|
|
325
340
|
}
|
|
326
|
-
catch
|
|
341
|
+
catch {
|
|
342
|
+
// Malformed payload: surfaced to the user via errorMessage, no rethrow needed.
|
|
327
343
|
this.loading = false;
|
|
328
344
|
this.errorMessage = 'Scena non valida';
|
|
329
345
|
this.cdr.markForCheck();
|
|
@@ -404,11 +420,13 @@ class Scene3dViewerComponent {
|
|
|
404
420
|
this.replaceCustomShadersWithFallback();
|
|
405
421
|
const oldCanvas = old.domElement;
|
|
406
422
|
oldCanvas.removeEventListener('click', this.onCanvasClick);
|
|
423
|
+
oldCanvas.removeEventListener('dblclick', this.onCanvasDblClick);
|
|
424
|
+
oldCanvas.removeEventListener('contextmenu', this.onCanvasContextMenu);
|
|
407
425
|
this.orbit?.dispose();
|
|
408
426
|
this.orbit = undefined;
|
|
409
427
|
const shadowsEnabled = old.shadowMap.enabled;
|
|
410
428
|
old.dispose();
|
|
411
|
-
oldCanvas.
|
|
429
|
+
oldCanvas.remove();
|
|
412
430
|
this.renderer = undefined;
|
|
413
431
|
const { renderer } = await createScene3dRenderer('webgpu', {
|
|
414
432
|
width: container.clientWidth,
|
|
@@ -431,6 +449,8 @@ class Scene3dViewerComponent {
|
|
|
431
449
|
this.orbit = orbit;
|
|
432
450
|
this.zone.runOutsideAngular(() => {
|
|
433
451
|
renderer.domElement.addEventListener('click', this.onCanvasClick);
|
|
452
|
+
renderer.domElement.addEventListener('dblclick', this.onCanvasDblClick);
|
|
453
|
+
renderer.domElement.addEventListener('contextmenu', this.onCanvasContextMenu);
|
|
434
454
|
});
|
|
435
455
|
}
|
|
436
456
|
/** ShaderMaterial GLSL -> materiale standard neutro (WebGPU non li compila). */
|
|
@@ -547,11 +567,12 @@ class Scene3dViewerComponent {
|
|
|
547
567
|
continue;
|
|
548
568
|
}
|
|
549
569
|
try {
|
|
550
|
-
const [rows, resolver] = await Promise.all([
|
|
570
|
+
const [rows, resolver, assetResolver] = await Promise.all([
|
|
551
571
|
this.fetchRouteRows(cfg.route),
|
|
552
|
-
this.buildTextureResolver(cfg)
|
|
572
|
+
this.buildTextureResolver(cfg),
|
|
573
|
+
this.buildAssetResolver(cfg)
|
|
553
574
|
]);
|
|
554
|
-
regenerateRepeater(group, cfg, rows, this.buildRepeaterDeps(resolver));
|
|
575
|
+
await regenerateRepeater(group, cfg, rows, this.buildRepeaterDeps(resolver, assetResolver));
|
|
555
576
|
// Archetipo carousel: attacca il controller (scroll animato + click frecce).
|
|
556
577
|
if (cfg.layout?.mode === 'carousel') {
|
|
557
578
|
const items = group.children.filter((c) => c.name === WUIC_REPEATER_CHILD);
|
|
@@ -581,7 +602,7 @@ class Scene3dViewerComponent {
|
|
|
581
602
|
}
|
|
582
603
|
}
|
|
583
604
|
/** Factory read-only per le mesh figlie del repeater (primitive standard). */
|
|
584
|
-
buildRepeaterDeps(resolveTextureSrc) {
|
|
605
|
+
buildRepeaterDeps(resolveTextureSrc, resolveAssetSrc) {
|
|
585
606
|
const geom = (type) => {
|
|
586
607
|
switch (type) {
|
|
587
608
|
case 'sphere': return new THREE.SphereGeometry(0.75, 24, 12);
|
|
@@ -600,9 +621,64 @@ class Scene3dViewerComponent {
|
|
|
600
621
|
createTextMesh: (text) => makeTextSpriteMesh(text),
|
|
601
622
|
resolveRecordId: (record) => this.resolveRecordPk(record),
|
|
602
623
|
unwrap: (v) => this.unwrap(v),
|
|
603
|
-
resolveTextureSrc
|
|
624
|
+
resolveTextureSrc,
|
|
625
|
+
resolveAssetSrc,
|
|
626
|
+
loadAsset: (url) => this.loadRepeaterAsset(url)
|
|
604
627
|
};
|
|
605
628
|
}
|
|
629
|
+
/** Cache per-URL degli asset del repeater (template clonabili) — read-only viewer. */
|
|
630
|
+
repeaterAssetCache = new Map();
|
|
631
|
+
/** Carica (fetch + parser three, cache per-URL) un asset 3D per il repeater. Null se fallisce. */
|
|
632
|
+
async loadRepeaterAsset(url) {
|
|
633
|
+
if (this.repeaterAssetCache.has(url)) {
|
|
634
|
+
return this.repeaterAssetCache.get(url);
|
|
635
|
+
}
|
|
636
|
+
let obj = null;
|
|
637
|
+
try {
|
|
638
|
+
const format = resolveAssetFormat(url.split('?')[0]);
|
|
639
|
+
const resp = await fetch(url);
|
|
640
|
+
if (!resp.ok) {
|
|
641
|
+
throw new Error('HTTP ' + resp.status);
|
|
642
|
+
}
|
|
643
|
+
if (format === 'glb' || format === 'gltf') {
|
|
644
|
+
const buffer = await resp.arrayBuffer();
|
|
645
|
+
const gltf = await new Promise((res, rej) => new GLTFLoader().parse(buffer, '', res, rej));
|
|
646
|
+
obj = gltf?.scene || gltf?.scenes?.[0] || null;
|
|
647
|
+
}
|
|
648
|
+
else if (format === 'obj') {
|
|
649
|
+
obj = new OBJLoader().parse(await resp.text());
|
|
650
|
+
}
|
|
651
|
+
else if (format === 'stl') {
|
|
652
|
+
const geometry = new STLLoader().parse(await resp.arrayBuffer());
|
|
653
|
+
geometry.computeVertexNormals();
|
|
654
|
+
obj = new THREE.Mesh(geometry, new THREE.MeshStandardMaterial({ color: 0xb8bcc4, metalness: 0.15, roughness: 0.7 }));
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
catch (e) {
|
|
658
|
+
console.warn('[Scene3D viewer] repeater asset load fallito', url, e);
|
|
659
|
+
obj = null;
|
|
660
|
+
}
|
|
661
|
+
if (obj) {
|
|
662
|
+
obj = normalizeAssetToUnit(obj);
|
|
663
|
+
}
|
|
664
|
+
this.repeaterAssetCache.set(url, obj);
|
|
665
|
+
return obj;
|
|
666
|
+
}
|
|
667
|
+
/** Resolver dell'asset mesh (meshSource.mode='asset'): upload → URL, altrimenti as-is. */
|
|
668
|
+
async buildAssetResolver(cfg) {
|
|
669
|
+
const col = cfg.meshSource?.mode === 'asset' ? cfg.meshSource.column : '';
|
|
670
|
+
if (!cfg.route || !col) {
|
|
671
|
+
return undefined;
|
|
672
|
+
}
|
|
673
|
+
try {
|
|
674
|
+
const columns = await this.metaSrv.getMetadati(cfg.route);
|
|
675
|
+
const app = { uploadPath: WtoolboxService.appSettings?.upload_path || '', apiUrl: WtoolboxService.appSettings?.api_url || '' };
|
|
676
|
+
return buildUploadTextureResolver(columns || [], cfg.route, col, app, (v) => this.unwrap(v)) || ((_rec, raw) => raw);
|
|
677
|
+
}
|
|
678
|
+
catch {
|
|
679
|
+
return (_rec, raw) => raw;
|
|
680
|
+
}
|
|
681
|
+
}
|
|
606
682
|
applyRepeaterTexture(obj, value, opts) {
|
|
607
683
|
applyRepeaterTextureTo(obj, value, opts, this.repeaterTextureCache, (url) => {
|
|
608
684
|
const t = new THREE.TextureLoader().load(url, () => this.cdr.markForCheck(), undefined, () => { });
|
|
@@ -824,7 +900,7 @@ class Scene3dViewerComponent {
|
|
|
824
900
|
}
|
|
825
901
|
try {
|
|
826
902
|
if (/^0x[0-9a-fA-F]{6}$/.test(str)) {
|
|
827
|
-
color.setHex(parseInt(str.slice(2), 16));
|
|
903
|
+
color.setHex(Number.parseInt(str.slice(2), 16));
|
|
828
904
|
}
|
|
829
905
|
else if (/^#?[0-9a-fA-F]{6}$/.test(str) || /^#?[0-9a-fA-F]{3}$/.test(str)) {
|
|
830
906
|
color.set(str.startsWith('#') ? str : `#${str}`);
|
|
@@ -881,8 +957,8 @@ class Scene3dViewerComponent {
|
|
|
881
957
|
return value;
|
|
882
958
|
}
|
|
883
959
|
}
|
|
884
|
-
if (value && typeof value === 'object' && 'value' in value && typeof value.subscribe === 'function') {
|
|
885
|
-
return value.value;
|
|
960
|
+
if (value && typeof value === 'object' && 'value' in value && typeof (value).subscribe === 'function') {
|
|
961
|
+
return (value).value;
|
|
886
962
|
}
|
|
887
963
|
return value;
|
|
888
964
|
}
|
|
@@ -915,6 +991,10 @@ class Scene3dViewerComponent {
|
|
|
915
991
|
}
|
|
916
992
|
return;
|
|
917
993
|
}
|
|
994
|
+
// Callback "click" di un item del repeater: se presente sovrascrive la CRUD.
|
|
995
|
+
if (this.runViewerItemCallback(hits[0].object, event, 'click')) {
|
|
996
|
+
return;
|
|
997
|
+
}
|
|
918
998
|
const picked = this.resolveBoundAncestor(hits[0].object);
|
|
919
999
|
const binding = picked?.userData?.[WUIC_BINDING_KEY];
|
|
920
1000
|
if (!binding || !String(binding.route || '').trim()) {
|
|
@@ -922,6 +1002,57 @@ class Scene3dViewerComponent {
|
|
|
922
1002
|
}
|
|
923
1003
|
this.zone.run(() => this.openRecordForBinding(binding));
|
|
924
1004
|
}
|
|
1005
|
+
/** Raycast + esecuzione callback per dblclick/rightclick nel viewer. */
|
|
1006
|
+
handleViewerEvent(event, kind, preventDefault) {
|
|
1007
|
+
if (!this.renderer || !this.camera || !this.contentGroup) {
|
|
1008
|
+
return;
|
|
1009
|
+
}
|
|
1010
|
+
const rect = this.renderer.domElement.getBoundingClientRect();
|
|
1011
|
+
this.pointer.x = ((event.clientX - rect.left) / rect.width) * 2 - 1;
|
|
1012
|
+
this.pointer.y = -((event.clientY - rect.top) / rect.height) * 2 + 1;
|
|
1013
|
+
this.raycaster.setFromCamera(this.pointer, this.viewCamera || this.camera);
|
|
1014
|
+
const hits = this.raycaster.intersectObjects([this.contentGroup], true);
|
|
1015
|
+
if (hits.length > 0 && this.runViewerItemCallback(hits[0].object, event, kind) && preventDefault) {
|
|
1016
|
+
event.preventDefault();
|
|
1017
|
+
}
|
|
1018
|
+
}
|
|
1019
|
+
/** Trova l'item repeater + config e, se c'e' il callback per `kind`, lo esegue. */
|
|
1020
|
+
runViewerItemCallback(hit, event, kind) {
|
|
1021
|
+
let item = hit;
|
|
1022
|
+
while (item && item.name !== WUIC_REPEATER_CHILD) {
|
|
1023
|
+
item = item.parent;
|
|
1024
|
+
}
|
|
1025
|
+
if (!item) {
|
|
1026
|
+
return false;
|
|
1027
|
+
}
|
|
1028
|
+
let grp = item.parent;
|
|
1029
|
+
while (grp && !getMeshRepeaterConfig(grp)) {
|
|
1030
|
+
grp = grp.parent;
|
|
1031
|
+
}
|
|
1032
|
+
const cfg = grp ? getMeshRepeaterConfig(grp) : null;
|
|
1033
|
+
if (!cfg) {
|
|
1034
|
+
return false;
|
|
1035
|
+
}
|
|
1036
|
+
const dblOrRightJs = kind === 'dblclick' ? cfg.onDoubleClickJs : cfg.onRightClickJs;
|
|
1037
|
+
const js = kind === 'click' ? cfg.onClickJs : dblOrRightJs;
|
|
1038
|
+
if (!js || !js.trim()) {
|
|
1039
|
+
return false;
|
|
1040
|
+
}
|
|
1041
|
+
const record = (item.userData?.[WUIC_REPEATER_RECORD]) || {};
|
|
1042
|
+
const cam = this.viewCamera || this.camera;
|
|
1043
|
+
const ctx = {
|
|
1044
|
+
record, event, mesh: item, scene: this.scene, camera: cam, THREE,
|
|
1045
|
+
wuic: {
|
|
1046
|
+
showItemPopup: (opts = {}) => showItemPopup({ record, mesh: item, ...opts }, {
|
|
1047
|
+
scene: this.scene, camera: cam, canvas: this.renderer.domElement,
|
|
1048
|
+
onFrame: (cb) => { this.popupFrameHook = cb; }
|
|
1049
|
+
}),
|
|
1050
|
+
closePopup: () => { this.popupFrameHook = null; closeItemPopup(); }
|
|
1051
|
+
}
|
|
1052
|
+
};
|
|
1053
|
+
this.zone.run(() => runRepeaterCallback(js, ctx));
|
|
1054
|
+
return true;
|
|
1055
|
+
}
|
|
925
1056
|
/**
|
|
926
1057
|
* Dal mesh colpito risale al primo antenato (incluso se stesso) che porta un
|
|
927
1058
|
* binding, così il click su un sub-mesh apre comunque la CRUD dell'oggetto bindato.
|
|
@@ -929,7 +1060,7 @@ class Scene3dViewerComponent {
|
|
|
929
1060
|
resolveBoundAncestor(object) {
|
|
930
1061
|
let current = object;
|
|
931
1062
|
while (current && current !== this.contentGroup) {
|
|
932
|
-
if (current.userData
|
|
1063
|
+
if (current.userData?.[WUIC_BINDING_KEY]) {
|
|
933
1064
|
return current;
|
|
934
1065
|
}
|
|
935
1066
|
current = current.parent;
|
|
@@ -981,11 +1112,11 @@ class Scene3dViewerComponent {
|
|
|
981
1112
|
return undefined;
|
|
982
1113
|
}
|
|
983
1114
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: Scene3dViewerComponent, deps: [{ token: DataProviderService }, { token: MetadataProviderService }, { token: i1.ActivatedRoute }, { token: i1.Router }, { token: i0.ChangeDetectorRef }, { token: i0.NgZone }], target: i0.ɵɵFactoryTarget.Component });
|
|
984
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: Scene3dViewerComponent, isStandalone: true, selector: "wuic-scene3d-viewer", inputs: { sceneKey: "sceneKey", cameraId: "cameraId" }, viewQueries: [{ propertyName: "viewportContainer", first: true, predicate: ["viewportContainer"], descendants: true }], ngImport: i0, template: "<!-- F7: viewer WebGL read-only (canvas three.js). NO palette, NO gizmo,\n NO property panel: solo viewport + overlay stato (loading / errore). -->\n<div class=\"scene3d-viewer-shell\">\n\n <!-- Viewport (canvas three.js) -->\n <div #viewportContainer class=\"scene3d-viewer-viewport\"></div>\n\n <!-- Overlay stato: loading -->\n @if (loading) {\n <div class=\"scene3d-viewer-overlay\">\n <i class=\"pi pi-spin pi-spinner scene3d-viewer-spinner\"></i>\n <span>Caricamento scena...</span>\n </div>\n }\n\n <!-- Overlay stato: errore -->\n @if (!loading && errorMessage) {\n <div class=\"scene3d-viewer-overlay scene3d-viewer-error\">\n <i class=\"pi pi-exclamation-triangle\"></i>\n <span>{{ errorMessage }}</span>\n </div>\n }\n\n</div>\n", styles: [".scene3d-viewer-shell{position:relative;display:flex;flex-direction:column;width:100%;height:100%;min-height:480px}.scene3d-viewer-viewport{flex:1 1 auto;min-width:0;min-height:0;position:relative;overflow:hidden;background:#1e1e28}.scene3d-viewer-viewport canvas{display:block;width:100%;height:100%}.scene3d-viewer-overlay{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.6rem;font-size:.9rem;color:#e8e8f0;background:#1e1e288c;pointer-events:none}.scene3d-viewer-spinner{font-size:1.6rem}.scene3d-viewer-error{color:#ffb4b4}.scene3d-viewer-error i{font-size:1.6rem}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
1115
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: Scene3dViewerComponent, isStandalone: true, selector: "wuic-scene3d-viewer", inputs: { sceneKey: "sceneKey", cameraId: "cameraId" }, viewQueries: [{ propertyName: "viewportContainer", first: true, predicate: ["viewportContainer"], descendants: true }], ngImport: i0, template: "<!-- F7: viewer WebGL read-only (canvas three.js). NO palette, NO gizmo,\n NO property panel: solo viewport + overlay stato (loading / errore). -->\n<div class=\"scene3d-viewer-shell\">\n\n <!-- Viewport (canvas three.js) -->\n <div #viewportContainer class=\"scene3d-viewer-viewport\"></div>\n\n <!-- Overlay stato: loading -->\n @if (loading) {\n <div class=\"scene3d-viewer-overlay\">\n <i class=\"pi pi-spin pi-spinner scene3d-viewer-spinner\"></i>\n <span>Caricamento scena...</span>\n </div>\n }\n\n <!-- Overlay stato: errore -->\n @if (!loading && errorMessage) {\n <div class=\"scene3d-viewer-overlay scene3d-viewer-error\">\n <i class=\"pi pi-exclamation-triangle\"></i>\n <span>{{ errorMessage }}</span>\n </div>\n }\n\n</div>\n", styles: [":host{display:block;width:100%;height:100%;min-height:0}.scene3d-viewer-shell{position:relative;display:flex;flex-direction:column;width:100%;height:100%;min-height:480px}.scene3d-viewer-viewport{flex:1 1 auto;min-width:0;min-height:0;position:relative;overflow:hidden;background:#1e1e28}.scene3d-viewer-viewport canvas{display:block;width:100%;height:100%}.scene3d-viewer-overlay{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.6rem;font-size:.9rem;color:#e8e8f0;background:#1e1e288c;pointer-events:none}.scene3d-viewer-spinner{font-size:1.6rem}.scene3d-viewer-error{color:#ffb4b4}.scene3d-viewer-error i{font-size:1.6rem}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
985
1116
|
}
|
|
986
1117
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: Scene3dViewerComponent, decorators: [{
|
|
987
1118
|
type: Component,
|
|
988
|
-
args: [{ selector: 'wuic-scene3d-viewer', standalone: true, imports: [], changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- F7: viewer WebGL read-only (canvas three.js). NO palette, NO gizmo,\n NO property panel: solo viewport + overlay stato (loading / errore). -->\n<div class=\"scene3d-viewer-shell\">\n\n <!-- Viewport (canvas three.js) -->\n <div #viewportContainer class=\"scene3d-viewer-viewport\"></div>\n\n <!-- Overlay stato: loading -->\n @if (loading) {\n <div class=\"scene3d-viewer-overlay\">\n <i class=\"pi pi-spin pi-spinner scene3d-viewer-spinner\"></i>\n <span>Caricamento scena...</span>\n </div>\n }\n\n <!-- Overlay stato: errore -->\n @if (!loading && errorMessage) {\n <div class=\"scene3d-viewer-overlay scene3d-viewer-error\">\n <i class=\"pi pi-exclamation-triangle\"></i>\n <span>{{ errorMessage }}</span>\n </div>\n }\n\n</div>\n", styles: [".scene3d-viewer-shell{position:relative;display:flex;flex-direction:column;width:100%;height:100%;min-height:480px}.scene3d-viewer-viewport{flex:1 1 auto;min-width:0;min-height:0;position:relative;overflow:hidden;background:#1e1e28}.scene3d-viewer-viewport canvas{display:block;width:100%;height:100%}.scene3d-viewer-overlay{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.6rem;font-size:.9rem;color:#e8e8f0;background:#1e1e288c;pointer-events:none}.scene3d-viewer-spinner{font-size:1.6rem}.scene3d-viewer-error{color:#ffb4b4}.scene3d-viewer-error i{font-size:1.6rem}\n"] }]
|
|
1119
|
+
args: [{ selector: 'wuic-scene3d-viewer', standalone: true, imports: [], changeDetection: ChangeDetectionStrategy.OnPush, template: "<!-- F7: viewer WebGL read-only (canvas three.js). NO palette, NO gizmo,\n NO property panel: solo viewport + overlay stato (loading / errore). -->\n<div class=\"scene3d-viewer-shell\">\n\n <!-- Viewport (canvas three.js) -->\n <div #viewportContainer class=\"scene3d-viewer-viewport\"></div>\n\n <!-- Overlay stato: loading -->\n @if (loading) {\n <div class=\"scene3d-viewer-overlay\">\n <i class=\"pi pi-spin pi-spinner scene3d-viewer-spinner\"></i>\n <span>Caricamento scena...</span>\n </div>\n }\n\n <!-- Overlay stato: errore -->\n @if (!loading && errorMessage) {\n <div class=\"scene3d-viewer-overlay scene3d-viewer-error\">\n <i class=\"pi pi-exclamation-triangle\"></i>\n <span>{{ errorMessage }}</span>\n </div>\n }\n\n</div>\n", styles: [":host{display:block;width:100%;height:100%;min-height:0}.scene3d-viewer-shell{position:relative;display:flex;flex-direction:column;width:100%;height:100%;min-height:480px}.scene3d-viewer-viewport{flex:1 1 auto;min-width:0;min-height:0;position:relative;overflow:hidden;background:#1e1e28}.scene3d-viewer-viewport canvas{display:block;width:100%;height:100%}.scene3d-viewer-overlay{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.6rem;font-size:.9rem;color:#e8e8f0;background:#1e1e288c;pointer-events:none}.scene3d-viewer-spinner{font-size:1.6rem}.scene3d-viewer-error{color:#ffb4b4}.scene3d-viewer-error i{font-size:1.6rem}\n"] }]
|
|
989
1120
|
}], ctorParameters: () => [{ type: DataProviderService }, { type: MetadataProviderService }, { type: i1.ActivatedRoute }, { type: i1.Router }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }], propDecorators: { viewportContainer: [{
|
|
990
1121
|
type: ViewChild,
|
|
991
1122
|
args: ['viewportContainer', { static: false }]
|
|
@@ -996,4 +1127,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
996
1127
|
}] } });
|
|
997
1128
|
|
|
998
1129
|
export { Scene3dViewerComponent };
|
|
999
|
-
//# sourceMappingURL=wuic-framework-lib-scene3d-viewer.component-
|
|
1130
|
+
//# sourceMappingURL=wuic-framework-lib-scene3d-viewer.component-Dboz1fjl.mjs.map
|