wuic-framework-lib 1.7.1 → 1.7.3
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-Dq9IEKsY.mjs → wuic-framework-lib-chart-list.component-B7d2AQ3G.mjs} +4 -4
- package/fesm2022/{wuic-framework-lib-code-editor.component-B6IpTSo8.mjs → wuic-framework-lib-code-editor.component-Bx_fV1X1.mjs} +6 -6
- package/fesm2022/{wuic-framework-lib-designer.component-D6cbqNFg.mjs → wuic-framework-lib-designer.component-CohHkalb.mjs} +12 -12
- package/fesm2022/{wuic-framework-lib-first-run-wizard.component-D1ZQUl-q.mjs → wuic-framework-lib-first-run-wizard.component-BoP77ip9.mjs} +2 -2
- package/fesm2022/{wuic-framework-lib-framework-docs.component-C_o5r7pg.mjs → wuic-framework-lib-framework-docs.component-CcyeNUzz.mjs} +10 -10
- package/fesm2022/{wuic-framework-lib-pivot-builder.component-DkWGzJpr.mjs → wuic-framework-lib-pivot-builder.component-BUkGGFaw.mjs} +164 -164
- package/fesm2022/{wuic-framework-lib-prompt-dialog-fallback-host.component-D29go5yA.mjs → wuic-framework-lib-prompt-dialog-fallback-host.component-DPapKCIE.mjs} +28 -28
- package/fesm2022/{wuic-framework-lib-report-designer.component-DcpCWghx.mjs → wuic-framework-lib-report-designer.component-A6_tmp6z.mjs} +2 -2
- package/fesm2022/{wuic-framework-lib-report-scaffold-dialog.component-CgUjG7Bi.mjs → wuic-framework-lib-report-scaffold-dialog.component-Dbrx9bSq.mjs} +246 -246
- package/fesm2022/{wuic-framework-lib-report-viewer.component-C4Opgl_M.mjs → wuic-framework-lib-report-viewer.component-CYl77DcU.mjs} +4 -4
- package/fesm2022/{wuic-framework-lib-scene3d-designer.component-8l3vsyEb.mjs → wuic-framework-lib-scene3d-designer.component-DyVwOmXa.mjs} +20 -20
- package/fesm2022/{wuic-framework-lib-scene3d-light-baker-gpu-C1w-8Aai.mjs → wuic-framework-lib-scene3d-light-baker-gpu-DEGIR8lh.mjs} +2 -2
- package/fesm2022/{wuic-framework-lib-scene3d-shader-effect-DjHyCAFK.mjs → wuic-framework-lib-scene3d-shader-effect-gBEFKNvi.mjs} +18 -18
- package/fesm2022/{wuic-framework-lib-scene3d-viewer.component-nMSl5jbe.mjs → wuic-framework-lib-scene3d-viewer.component-G_ykpDDF.mjs} +5 -5
- package/fesm2022/{wuic-framework-lib-scheduler-list.component-Cvk3Zg0Q.mjs → wuic-framework-lib-scheduler-list.component-C_1YjS3c.mjs} +4 -4
- package/fesm2022/{wuic-framework-lib-spreadsheet-list-sf.component-C1U7JPiq.mjs → wuic-framework-lib-spreadsheet-list-sf.component-BKtu4edX.mjs} +47 -47
- package/fesm2022/{wuic-framework-lib-timeline-list.component-cZbPgNh1.mjs → wuic-framework-lib-timeline-list.component-Dcosb8Zx.mjs} +6 -6
- package/fesm2022/{wuic-framework-lib-workflow-designer.component-C_4RQGa0.mjs → wuic-framework-lib-workflow-designer.component-BXnoS_ts.mjs} +6 -6
- package/fesm2022/{wuic-framework-lib-wuic-framework-lib-BZZwta8b.mjs → wuic-framework-lib-wuic-framework-lib-54sySY_p.mjs} +838 -823
- package/fesm2022/wuic-framework-lib.mjs +1 -1
- package/package.json +1 -1
- package/styles/_wuic-tokens.scss +82 -82
- package/types/wuic-framework-lib.d.ts +15 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as THREE from 'three';
|
|
2
|
-
import { i as isBakeableMesh, W as WUIC_BAKED_FLAG } from './wuic-framework-lib-scene3d-designer.component-
|
|
2
|
+
import { i as isBakeableMesh, W as WUIC_BAKED_FLAG } from './wuic-framework-lib-scene3d-designer.component-DyVwOmXa.mjs';
|
|
3
3
|
|
|
4
4
|
/**
|
|
5
5
|
* Lightmap baking su COMPUTE SHADER (WebGPU) — stessa semantica del baker CPU
|
|
@@ -300,4 +300,4 @@ function applyBakeResults(ranges, packedColors) {
|
|
|
300
300
|
}
|
|
301
301
|
|
|
302
302
|
export { bakeVertexLightingGpu };
|
|
303
|
-
//# sourceMappingURL=wuic-framework-lib-scene3d-light-baker-gpu-
|
|
303
|
+
//# sourceMappingURL=wuic-framework-lib-scene3d-light-baker-gpu-DEGIR8lh.mjs.map
|
|
@@ -2674,15 +2674,15 @@ function buildEffectShaderMaterial(effect) {
|
|
|
2674
2674
|
const displaceLine = effect.displacement && amp > 0
|
|
2675
2675
|
? `p += normal * (${fnum(amp)} * sin(position.y * ${fnum(freq)} + uTime * ${fnum(dspd)}));`
|
|
2676
2676
|
: '';
|
|
2677
|
-
const vertexShader = `varying vec2 vUv;
|
|
2678
|
-
varying vec3 vNormal;
|
|
2679
|
-
uniform float uTime;
|
|
2680
|
-
void main() {
|
|
2681
|
-
vUv = uv;
|
|
2682
|
-
vNormal = normalize(normalMatrix * normal);
|
|
2683
|
-
vec3 p = position;
|
|
2684
|
-
${displaceLine}
|
|
2685
|
-
gl_Position = projectionMatrix * modelViewMatrix * vec4(p, 1.0);
|
|
2677
|
+
const vertexShader = `varying vec2 vUv;
|
|
2678
|
+
varying vec3 vNormal;
|
|
2679
|
+
uniform float uTime;
|
|
2680
|
+
void main() {
|
|
2681
|
+
vUv = uv;
|
|
2682
|
+
vNormal = normalize(normalMatrix * normal);
|
|
2683
|
+
vec3 p = position;
|
|
2684
|
+
${displaceLine}
|
|
2685
|
+
gl_Position = projectionMatrix * modelViewMatrix * vec4(p, 1.0);
|
|
2686
2686
|
}`;
|
|
2687
2687
|
const pMin = Number(effect.pulse?.min ?? 0.5);
|
|
2688
2688
|
const pMax = Number(effect.pulse?.max ?? 1);
|
|
@@ -2711,14 +2711,14 @@ void main() {
|
|
|
2711
2711
|
? `float light = ${fnum(ambient)} + ${fnum(1 - ambient)} * max(dot(vNormal, normalize(vec3(${fnum(dir[0])}, ${fnum(dir[1])}, ${fnum(dir[2])}))), 0.0);`
|
|
2712
2712
|
: 'float light = 1.0;';
|
|
2713
2713
|
const opacity = Number(effect.opacity ?? 1);
|
|
2714
|
-
const fragmentShader = `uniform float uTime;
|
|
2715
|
-
varying vec2 vUv;
|
|
2716
|
-
varying vec3 vNormal;
|
|
2717
|
-
void main() {
|
|
2718
|
-
${factorLine}
|
|
2719
|
-
${baseLine}
|
|
2720
|
-
${lightLine}
|
|
2721
|
-
gl_FragColor = vec4(base * light, ${fnum(opacity)});
|
|
2714
|
+
const fragmentShader = `uniform float uTime;
|
|
2715
|
+
varying vec2 vUv;
|
|
2716
|
+
varying vec3 vNormal;
|
|
2717
|
+
void main() {
|
|
2718
|
+
${factorLine}
|
|
2719
|
+
${baseLine}
|
|
2720
|
+
${lightLine}
|
|
2721
|
+
gl_FragColor = vec4(base * light, ${fnum(opacity)});
|
|
2722
2722
|
}`;
|
|
2723
2723
|
const material = new THREE.ShaderMaterial({
|
|
2724
2724
|
uniforms: { uTime: { value: 0 } },
|
|
@@ -2804,4 +2804,4 @@ function swapNodeEffectMaterialsForSerialization(root) {
|
|
|
2804
2804
|
}
|
|
2805
2805
|
|
|
2806
2806
|
export { buildUploadTextureResolver as A, applyRepeaterTextureTo as B, CarouselController as C, defaultRepeaterTextureApply as D, regenerateRepeater as E, getPhysicsDef as F, createPhysicsWorld as G, WUIC_PHYSICS_KEY as H, WUIC_OBJECT_TYPE_KEY as I, carouselArrowDir as J, WUIC_REPEATER_RECORD as K, runRepeaterCallback as L, closeItemPopup as M, showItemPopup as N, WUIC_BINDING_KEY as O, swapNodeEffectMaterialsForSerialization as P, serializeScene as Q, deserializeScene as R, SCENE3D_SHADER_EFFECT_DEFAULT as S, WUIC_TRANSIENT_FLAG as W, defaultRepeaterAxisDir as a, defaultCarouselConfig as b, defaultChartConfig as c, defaultMeshRepeaterConfig as d, defaultSurfaceConfig as e, defaultGaugeConfig as f, defaultGraphConfig as g, defaultMapConfig as h, isWebGpuSupported as i, defaultWarehouseConfig as j, defaultKanbanConfig as k, defaultCalendarConfig as l, defaultStackedConfig as m, createScene3dRenderer as n, WUIC_SHADER_EFFECT_KEY as o, makeTextSpriteMesh as p, WUIC_MESH_REPEATER_KEY as q, addRepeaterPlaceholder as r, resolveAssetFormat as s, parseShaderEffect as t, SCENE3D_SHADER_EFFECT_SCHEMA as u, buildEffectNodeMaterial as v, buildEffectShaderMaterial as w, getMeshRepeaterConfig as x, WUIC_REPEATER_CHILD as y, normalizeAssetToUnit as z };
|
|
2807
|
-
//# sourceMappingURL=wuic-framework-lib-scene3d-shader-effect-
|
|
2807
|
+
//# sourceMappingURL=wuic-framework-lib-scene3d-shader-effect-gBEFKNvi.mjs.map
|
|
@@ -2,8 +2,8 @@ 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, h as DataProviderService, M as MetadataProviderService } from './wuic-framework-lib-wuic-framework-lib-
|
|
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-
|
|
5
|
+
import { W as WtoolboxService, h as DataProviderService, M as MetadataProviderService } from './wuic-framework-lib-wuic-framework-lib-54sySY_p.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-gBEFKNvi.mjs';
|
|
7
7
|
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';
|
|
8
8
|
import { OBJLoader } from 'three/examples/jsm/loaders/OBJLoader.js';
|
|
9
9
|
import { STLLoader } from 'three/examples/jsm/loaders/STLLoader.js';
|
|
@@ -1112,11 +1112,11 @@ class Scene3dViewerComponent {
|
|
|
1112
1112
|
return undefined;
|
|
1113
1113
|
}
|
|
1114
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 });
|
|
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 });
|
|
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,\r\n NO property panel: solo viewport + overlay stato (loading / errore). -->\r\n<div class=\"scene3d-viewer-shell\">\r\n\r\n <!-- Viewport (canvas three.js) -->\r\n <div #viewportContainer class=\"scene3d-viewer-viewport\"></div>\r\n\r\n <!-- Overlay stato: loading -->\r\n @if (loading) {\r\n <div class=\"scene3d-viewer-overlay\">\r\n <i class=\"pi pi-spin pi-spinner scene3d-viewer-spinner\"></i>\r\n <span>Caricamento scena...</span>\r\n </div>\r\n }\r\n\r\n <!-- Overlay stato: errore -->\r\n @if (!loading && errorMessage) {\r\n <div class=\"scene3d-viewer-overlay scene3d-viewer-error\">\r\n <i class=\"pi pi-exclamation-triangle\"></i>\r\n <span>{{ errorMessage }}</span>\r\n </div>\r\n }\r\n\r\n</div>\r\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 });
|
|
1116
1116
|
}
|
|
1117
1117
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: Scene3dViewerComponent, decorators: [{
|
|
1118
1118
|
type: Component,
|
|
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"] }]
|
|
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,\r\n NO property panel: solo viewport + overlay stato (loading / errore). -->\r\n<div class=\"scene3d-viewer-shell\">\r\n\r\n <!-- Viewport (canvas three.js) -->\r\n <div #viewportContainer class=\"scene3d-viewer-viewport\"></div>\r\n\r\n <!-- Overlay stato: loading -->\r\n @if (loading) {\r\n <div class=\"scene3d-viewer-overlay\">\r\n <i class=\"pi pi-spin pi-spinner scene3d-viewer-spinner\"></i>\r\n <span>Caricamento scena...</span>\r\n </div>\r\n }\r\n\r\n <!-- Overlay stato: errore -->\r\n @if (!loading && errorMessage) {\r\n <div class=\"scene3d-viewer-overlay scene3d-viewer-error\">\r\n <i class=\"pi pi-exclamation-triangle\"></i>\r\n <span>{{ errorMessage }}</span>\r\n </div>\r\n }\r\n\r\n</div>\r\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"] }]
|
|
1120
1120
|
}], ctorParameters: () => [{ type: DataProviderService }, { type: MetadataProviderService }, { type: i1.ActivatedRoute }, { type: i1.Router }, { type: i0.ChangeDetectorRef }, { type: i0.NgZone }], propDecorators: { viewportContainer: [{
|
|
1121
1121
|
type: ViewChild,
|
|
1122
1122
|
args: ['viewportContainer', { static: false }]
|
|
@@ -1127,4 +1127,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
1127
1127
|
}] } });
|
|
1128
1128
|
|
|
1129
1129
|
export { Scene3dViewerComponent };
|
|
1130
|
-
//# sourceMappingURL=wuic-framework-lib-scene3d-viewer.component-
|
|
1130
|
+
//# sourceMappingURL=wuic-framework-lib-scene3d-viewer.component-G_ykpDDF.mjs.map
|
|
@@ -12,7 +12,7 @@ import interactionPlugin from '@fullcalendar/interaction';
|
|
|
12
12
|
import timeGridPlugin from '@fullcalendar/timegrid';
|
|
13
13
|
import * as i1 from '@angular/platform-browser';
|
|
14
14
|
import { Title } from '@angular/platform-browser';
|
|
15
|
-
import { W as WtoolboxService, f as ParametricDialogComponent, q as FilterInfo, s as FilterItem, M as MetadataProviderService, D as DynamicGenericTemplateComponent, T as TranslationManagerService } from './wuic-framework-lib-wuic-framework-lib-
|
|
15
|
+
import { W as WtoolboxService, f as ParametricDialogComponent, q as FilterInfo, s as FilterItem, M as MetadataProviderService, D as DynamicGenericTemplateComponent, T as TranslationManagerService } from './wuic-framework-lib-wuic-framework-lib-54sySY_p.mjs';
|
|
16
16
|
import { BehaviorSubject } from 'rxjs';
|
|
17
17
|
|
|
18
18
|
// https://fullcalendar.io/docs/initialize-globals#premium-bundle -
|
|
@@ -713,11 +713,11 @@ class SchedulerListComponent {
|
|
|
713
713
|
this.langChangeSub = null;
|
|
714
714
|
}
|
|
715
715
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: SchedulerListComponent, deps: [{ token: i1.Title }, { token: i0.ChangeDetectorRef }, { token: TranslationManagerService }], target: i0.ɵɵFactoryTarget.Component });
|
|
716
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: SchedulerListComponent, isStandalone: true, selector: "wuic-scheduler-list", inputs: { hardcodedRoute: "hardcodedRoute", parentRecord: "parentRecord", parentMetaInfo: "parentMetaInfo", datasource: "datasource", hardcodedDatasource: "hardcodedDatasource", hideToolbar: "hideToolbar" }, outputs: { onSchedulerDateClick: "onSchedulerDateClick", onSchedulerEventClick: "onSchedulerEventClick", onSchedulerEventDrop: "onSchedulerEventDrop", onSchedulerEventResize: "onSchedulerEventResize", onSchedulerDatesSet: "onSchedulerDatesSet", onSchedulerDataBound: "onSchedulerDataBound", onSchedulerEventSync: "onSchedulerEventSync" }, host: { listeners: { "window:resize": "onWindowResize()" } }, providers: [Title], viewQueries: [{ propertyName: "eventContent", first: true, predicate: ["fcEventContent"], descendants: true }, { propertyName: "calendar", first: true, predicate: ["calendar"], descendants: true }], ngImport: i0, template: "@if (calendarOptions) {\n<full-calendar #calendar [options]=\"calendarOptions\" [events]=\"data\">\n <ng-template #eventContent let-arg>\n <ng-container\n *ngComponentOutlet=\"itemTemplate; inputs: { record: arg.event, rowData: arg.event, metaInfo: metaInfo, datasource: datasource }\"></ng-container>\n </ng-template>\n</full-calendar>\n}", styles: [":host ::ng-deep .fc{--fc-event-bg-color: var(--primary-color, var(--p-primary-color, #3b82f6));--fc-event-border-color: var(--primary-color, var(--p-primary-color, #3b82f6));--fc-event-text-color: var(--primary-color-text, var(--p-primary-contrast-color, #ffffff))}:host ::ng-deep .fc .fc-h-event,:host ::ng-deep .fc .fc-v-event,:host ::ng-deep .fc .fc-daygrid-event,:host ::ng-deep .fc .fc-timegrid-event{border-color:var(--fc-event-border-color)!important;background-color:var(--fc-event-bg-color)!important;color:var(--fc-event-text-color)!important}\n"], dependencies: [{ kind: "ngmodule", type: FullCalendarModule }, { kind: "component", type: i3.FullCalendarComponent, selector: "full-calendar", inputs: ["options", "deepChangeDetection", "events", "eventSources", "resources"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }] });
|
|
716
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: SchedulerListComponent, isStandalone: true, selector: "wuic-scheduler-list", inputs: { hardcodedRoute: "hardcodedRoute", parentRecord: "parentRecord", parentMetaInfo: "parentMetaInfo", datasource: "datasource", hardcodedDatasource: "hardcodedDatasource", hideToolbar: "hideToolbar" }, outputs: { onSchedulerDateClick: "onSchedulerDateClick", onSchedulerEventClick: "onSchedulerEventClick", onSchedulerEventDrop: "onSchedulerEventDrop", onSchedulerEventResize: "onSchedulerEventResize", onSchedulerDatesSet: "onSchedulerDatesSet", onSchedulerDataBound: "onSchedulerDataBound", onSchedulerEventSync: "onSchedulerEventSync" }, host: { listeners: { "window:resize": "onWindowResize()" } }, providers: [Title], viewQueries: [{ propertyName: "eventContent", first: true, predicate: ["fcEventContent"], descendants: true }, { propertyName: "calendar", first: true, predicate: ["calendar"], descendants: true }], ngImport: i0, template: "@if (calendarOptions) {\r\n<full-calendar #calendar [options]=\"calendarOptions\" [events]=\"data\">\r\n <ng-template #eventContent let-arg>\r\n <ng-container\r\n *ngComponentOutlet=\"itemTemplate; inputs: { record: arg.event, rowData: arg.event, metaInfo: metaInfo, datasource: datasource }\"></ng-container>\r\n </ng-template>\r\n</full-calendar>\r\n}", styles: [":host ::ng-deep .fc{--fc-event-bg-color: var(--primary-color, var(--p-primary-color, #3b82f6));--fc-event-border-color: var(--primary-color, var(--p-primary-color, #3b82f6));--fc-event-text-color: var(--primary-color-text, var(--p-primary-contrast-color, #ffffff))}:host ::ng-deep .fc .fc-h-event,:host ::ng-deep .fc .fc-v-event,:host ::ng-deep .fc .fc-daygrid-event,:host ::ng-deep .fc .fc-timegrid-event{border-color:var(--fc-event-border-color)!important;background-color:var(--fc-event-bg-color)!important;color:var(--fc-event-text-color)!important}\n"], dependencies: [{ kind: "ngmodule", type: FullCalendarModule }, { kind: "component", type: i3.FullCalendarComponent, selector: "full-calendar", inputs: ["options", "deepChangeDetection", "events", "eventSources", "resources"] }, { kind: "directive", type: NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletEnvironmentInjector", "ngComponentOutletContent", "ngComponentOutletNgModule"], exportAs: ["ngComponentOutlet"] }] });
|
|
717
717
|
}
|
|
718
718
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: SchedulerListComponent, decorators: [{
|
|
719
719
|
type: Component,
|
|
720
|
-
args: [{ selector: 'wuic-scheduler-list', imports: [FullCalendarModule, NgComponentOutlet], providers: [Title], template: "@if (calendarOptions) {\n<full-calendar #calendar [options]=\"calendarOptions\" [events]=\"data\">\n <ng-template #eventContent let-arg>\n <ng-container\n *ngComponentOutlet=\"itemTemplate; inputs: { record: arg.event, rowData: arg.event, metaInfo: metaInfo, datasource: datasource }\"></ng-container>\n </ng-template>\n</full-calendar>\n}", styles: [":host ::ng-deep .fc{--fc-event-bg-color: var(--primary-color, var(--p-primary-color, #3b82f6));--fc-event-border-color: var(--primary-color, var(--p-primary-color, #3b82f6));--fc-event-text-color: var(--primary-color-text, var(--p-primary-contrast-color, #ffffff))}:host ::ng-deep .fc .fc-h-event,:host ::ng-deep .fc .fc-v-event,:host ::ng-deep .fc .fc-daygrid-event,:host ::ng-deep .fc .fc-timegrid-event{border-color:var(--fc-event-border-color)!important;background-color:var(--fc-event-bg-color)!important;color:var(--fc-event-text-color)!important}\n"] }]
|
|
720
|
+
args: [{ selector: 'wuic-scheduler-list', imports: [FullCalendarModule, NgComponentOutlet], providers: [Title], template: "@if (calendarOptions) {\r\n<full-calendar #calendar [options]=\"calendarOptions\" [events]=\"data\">\r\n <ng-template #eventContent let-arg>\r\n <ng-container\r\n *ngComponentOutlet=\"itemTemplate; inputs: { record: arg.event, rowData: arg.event, metaInfo: metaInfo, datasource: datasource }\"></ng-container>\r\n </ng-template>\r\n</full-calendar>\r\n}", styles: [":host ::ng-deep .fc{--fc-event-bg-color: var(--primary-color, var(--p-primary-color, #3b82f6));--fc-event-border-color: var(--primary-color, var(--p-primary-color, #3b82f6));--fc-event-text-color: var(--primary-color-text, var(--p-primary-contrast-color, #ffffff))}:host ::ng-deep .fc .fc-h-event,:host ::ng-deep .fc .fc-v-event,:host ::ng-deep .fc .fc-daygrid-event,:host ::ng-deep .fc .fc-timegrid-event{border-color:var(--fc-event-border-color)!important;background-color:var(--fc-event-bg-color)!important;color:var(--fc-event-text-color)!important}\n"] }]
|
|
721
721
|
}], ctorParameters: () => [{ type: i1.Title }, { type: i0.ChangeDetectorRef }, { type: TranslationManagerService }], propDecorators: { eventContent: [{
|
|
722
722
|
type: ViewChild,
|
|
723
723
|
args: ["fcEventContent"]
|
|
@@ -756,4 +756,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
756
756
|
}] } });
|
|
757
757
|
|
|
758
758
|
export { SchedulerListComponent };
|
|
759
|
-
//# sourceMappingURL=wuic-framework-lib-scheduler-list.component-
|
|
759
|
+
//# sourceMappingURL=wuic-framework-lib-scheduler-list.component-C_1YjS3c.mjs.map
|
|
@@ -7,7 +7,7 @@ import * as i8 from '@ngx-translate/core';
|
|
|
7
7
|
import { TranslateModule } from '@ngx-translate/core';
|
|
8
8
|
import * as i7 from '@syncfusion/ej2-angular-spreadsheet';
|
|
9
9
|
import { SpreadsheetModule } from '@syncfusion/ej2-angular-spreadsheet';
|
|
10
|
-
import { W as WtoolboxService, M as MetadataProviderService, U as UserInfoService, b as DataSourceComponent, I as ImportExportButtonComponent } from './wuic-framework-lib-wuic-framework-lib-
|
|
10
|
+
import { W as WtoolboxService, M as MetadataProviderService, U as UserInfoService, b as DataSourceComponent, I as ImportExportButtonComponent } from './wuic-framework-lib-wuic-framework-lib-54sySY_p.mjs';
|
|
11
11
|
import { registerLicense } from '@syncfusion/ej2-base';
|
|
12
12
|
import * as i1 from '@angular/platform-browser';
|
|
13
13
|
import * as i1$1 from '@angular/router';
|
|
@@ -1748,42 +1748,42 @@ class SpreadsheetListSfComponent {
|
|
|
1748
1748
|
// Retro-compat: valore assente / null / false → sort abilitato.
|
|
1749
1749
|
const sortAllowed = col?.mc_disable_sorting !== true;
|
|
1750
1750
|
const sortSectionHtml = sortAllowed
|
|
1751
|
-
? `<div class="wuic-sf-filter-popup-sort">
|
|
1752
|
-
<button type="button" class="wuic-sf-filter-popup-sort-btn" data-sort="asc">
|
|
1753
|
-
<span class="wuic-sf-filter-popup-sort-icon">▲</span> Ordina crescente
|
|
1754
|
-
</button>
|
|
1755
|
-
<button type="button" class="wuic-sf-filter-popup-sort-btn" data-sort="desc">
|
|
1756
|
-
<span class="wuic-sf-filter-popup-sort-icon">▼</span> Ordina decrescente
|
|
1757
|
-
</button>
|
|
1751
|
+
? `<div class="wuic-sf-filter-popup-sort">
|
|
1752
|
+
<button type="button" class="wuic-sf-filter-popup-sort-btn" data-sort="asc">
|
|
1753
|
+
<span class="wuic-sf-filter-popup-sort-icon">▲</span> Ordina crescente
|
|
1754
|
+
</button>
|
|
1755
|
+
<button type="button" class="wuic-sf-filter-popup-sort-btn" data-sort="desc">
|
|
1756
|
+
<span class="wuic-sf-filter-popup-sort-icon">▼</span> Ordina decrescente
|
|
1757
|
+
</button>
|
|
1758
1758
|
</div>`
|
|
1759
1759
|
: '';
|
|
1760
|
-
popup.innerHTML = `
|
|
1761
|
-
<div class="wuic-sf-filter-popup-header">
|
|
1762
|
-
<span class="wuic-sf-filter-popup-title">Filtra: ${this.escapeHtml(colDisplayName)}</span>
|
|
1763
|
-
<button type="button" class="wuic-sf-filter-popup-close" title="Chiudi">×</button>
|
|
1764
|
-
</div>
|
|
1765
|
-
${sortSectionHtml}
|
|
1766
|
-
<div class="wuic-sf-filter-popup-clear">
|
|
1767
|
-
<button type="button" class="wuic-sf-filter-popup-clear-btn"
|
|
1768
|
-
${currentFilter ? '' : 'disabled'}>
|
|
1769
|
-
Rimuovi filtro su "${this.escapeHtml(colDisplayName)}"
|
|
1770
|
-
</button>
|
|
1771
|
-
</div>
|
|
1772
|
-
<div class="wuic-sf-filter-popup-search">
|
|
1773
|
-
<input type="text" class="wuic-sf-filter-popup-search-input"
|
|
1774
|
-
placeholder="Cerca..." />
|
|
1775
|
-
</div>
|
|
1776
|
-
<div class="wuic-sf-filter-popup-list-wrap">
|
|
1777
|
-
<label class="wuic-sf-filter-popup-item wuic-sf-filter-popup-selectall">
|
|
1778
|
-
<input type="checkbox" class="wuic-sf-filter-popup-selectall-cb" />
|
|
1779
|
-
<span>(Seleziona tutto)</span>
|
|
1780
|
-
</label>
|
|
1781
|
-
<div class="wuic-sf-filter-popup-list" role="listbox"></div>
|
|
1782
|
-
</div>
|
|
1783
|
-
<div class="wuic-sf-filter-popup-footer">
|
|
1784
|
-
<button type="button" class="wuic-sf-filter-popup-ok">OK</button>
|
|
1785
|
-
<button type="button" class="wuic-sf-filter-popup-cancel">Annulla</button>
|
|
1786
|
-
</div>
|
|
1760
|
+
popup.innerHTML = `
|
|
1761
|
+
<div class="wuic-sf-filter-popup-header">
|
|
1762
|
+
<span class="wuic-sf-filter-popup-title">Filtra: ${this.escapeHtml(colDisplayName)}</span>
|
|
1763
|
+
<button type="button" class="wuic-sf-filter-popup-close" title="Chiudi">×</button>
|
|
1764
|
+
</div>
|
|
1765
|
+
${sortSectionHtml}
|
|
1766
|
+
<div class="wuic-sf-filter-popup-clear">
|
|
1767
|
+
<button type="button" class="wuic-sf-filter-popup-clear-btn"
|
|
1768
|
+
${currentFilter ? '' : 'disabled'}>
|
|
1769
|
+
Rimuovi filtro su "${this.escapeHtml(colDisplayName)}"
|
|
1770
|
+
</button>
|
|
1771
|
+
</div>
|
|
1772
|
+
<div class="wuic-sf-filter-popup-search">
|
|
1773
|
+
<input type="text" class="wuic-sf-filter-popup-search-input"
|
|
1774
|
+
placeholder="Cerca..." />
|
|
1775
|
+
</div>
|
|
1776
|
+
<div class="wuic-sf-filter-popup-list-wrap">
|
|
1777
|
+
<label class="wuic-sf-filter-popup-item wuic-sf-filter-popup-selectall">
|
|
1778
|
+
<input type="checkbox" class="wuic-sf-filter-popup-selectall-cb" />
|
|
1779
|
+
<span>(Seleziona tutto)</span>
|
|
1780
|
+
</label>
|
|
1781
|
+
<div class="wuic-sf-filter-popup-list" role="listbox"></div>
|
|
1782
|
+
</div>
|
|
1783
|
+
<div class="wuic-sf-filter-popup-footer">
|
|
1784
|
+
<button type="button" class="wuic-sf-filter-popup-ok">OK</button>
|
|
1785
|
+
<button type="button" class="wuic-sf-filter-popup-cancel">Annulla</button>
|
|
1786
|
+
</div>
|
|
1787
1787
|
`;
|
|
1788
1788
|
// Render list items
|
|
1789
1789
|
const listEl = popup.querySelector('.wuic-sf-filter-popup-list');
|
|
@@ -2588,21 +2588,21 @@ class SpreadsheetListSfComponent {
|
|
|
2588
2588
|
* Pattern identico a DynamicRowTemplateComponent.buildTableStylePredicate.
|
|
2589
2589
|
*/
|
|
2590
2590
|
buildConditionalStylePredicate(conditionCode) {
|
|
2591
|
-
const expressionWrapper = `
|
|
2592
|
-
const dataItem = record;
|
|
2593
|
-
const rowData = record;
|
|
2594
|
-
return (${conditionCode});
|
|
2591
|
+
const expressionWrapper = `
|
|
2592
|
+
const dataItem = record;
|
|
2593
|
+
const rowData = record;
|
|
2594
|
+
return (${conditionCode});
|
|
2595
2595
|
`;
|
|
2596
2596
|
let compiled = null;
|
|
2597
2597
|
try {
|
|
2598
2598
|
compiled = new Function('metaInfo', 'record', 'wtoolbox', expressionWrapper);
|
|
2599
2599
|
}
|
|
2600
2600
|
catch {
|
|
2601
|
-
const blockWrapper = `
|
|
2602
|
-
const dataItem = record;
|
|
2603
|
-
const rowData = record;
|
|
2604
|
-
${conditionCode}
|
|
2605
|
-
return true;
|
|
2601
|
+
const blockWrapper = `
|
|
2602
|
+
const dataItem = record;
|
|
2603
|
+
const rowData = record;
|
|
2604
|
+
${conditionCode}
|
|
2605
|
+
return true;
|
|
2606
2606
|
`;
|
|
2607
2607
|
try {
|
|
2608
2608
|
compiled = new Function('metaInfo', 'record', 'wtoolbox', blockWrapper);
|
|
@@ -4328,7 +4328,7 @@ class SpreadsheetListSfComponent {
|
|
|
4328
4328
|
}
|
|
4329
4329
|
}
|
|
4330
4330
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: SpreadsheetListSfComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.Title }, { token: i1$1.ActivatedRoute }, { token: i1$2.HttpClient }, { token: WtoolboxService }, { token: MetadataProviderService }, { token: UserInfoService }], target: i0.ɵɵFactoryTarget.Component });
|
|
4331
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: SpreadsheetListSfComponent, isStandalone: true, selector: "wuic-spreadsheet-list-sf", inputs: { hardcodedRoute: "hardcodedRoute", parentRecord: "parentRecord", parentMetaInfo: "parentMetaInfo", datasource: "datasource", hardcodedDatasource: "hardcodedDatasource", hideToolbar: "hideToolbar", enableLockAwareness: "enableLockAwareness", lockScope: "lockScope", heartbeatIntervalSec: "heartbeatIntervalSec", showFormulaBar: "showFormulaBar", showRibbon: "showRibbon" }, outputs: { onSpreadsheetDataBound: "onSpreadsheetDataBound", onSpreadsheetBeforePageChange: "onSpreadsheetBeforePageChange", onSpreadsheetPageChange: "onSpreadsheetPageChange", onSpreadsheetRowInserted: "onSpreadsheetRowInserted", onSpreadsheetRowsDeleted: "onSpreadsheetRowsDeleted", onSpreadsheetBatchSaved: "onSpreadsheetBatchSaved", onLockAcquired: "onLockAcquired", onLockConflict: "onLockConflict", onLockReleased: "onLockReleased", onLockExpired: "onLockExpired" }, host: { listeners: { "window:resize": "onWindowResize()" } }, viewQueries: [{ propertyName: "sfSpreadsheet", first: true, predicate: ["sfSpreadsheet"], descendants: true }, { propertyName: "lookupSource", first: true, predicate: ["lookupSource"], descendants: true }], ngImport: i0, template: "<!--\n Layout root wrapper:\n 1. Toolbar WUIC custom (insert / save batch / export / refresh)\n 2. Syncfusion Spreadsheet host\n 3. Pagination custom (Syncfusion non ha pagination built-in, quindi la\n rendiamo sotto il foglio con nav + page-size dropdown)\n 4. Lookup datasource (invisibile, pattern identico al vecchio componente)\n-->\n\n<!-- Bootstrap CSS Syncfusion (~500 KiB): si monta solo quando questo\n componente lazy \u00E8 istanziato \u2192 CSS NON nel bundle iniziale globale,\n risparmia ~500 KiB su tutte le pagine che non aprono spreadsheet. -->\n<wuic-syncfusion-styles-bootstrap></wuic-syncfusion-styles-bootstrap>\n\n<div class=\"wuic-sf-spreadsheet-wrapper\">\n\n @if (!hideToolbar && metaInfo) {\n <!-- Stile allineato a <wuic-list-grid>: stessa caption-bar, stessi p-button\n PrimeNG con icona + label, stesso componente import/export. -->\n <div class=\"grid-caption-bar wuic-sf-caption-bar\" role=\"toolbar\" aria-label=\"Spreadsheet toolbar\">\n <div class=\"grid-caption-left\">\n @if (!metaInfo.tableMetadata.md_hide_refresh) {\n <p-button icon=\"pi pi-refresh\" label=\"{{'refresh_grid' | translate}}\"\n (onClick)=\"onToolbarRefresh()\" />\n }\n @if (canInsertRows()) {\n <p-button icon=\"pi pi-plus\" label=\"{{'add_grid' | translate}}\"\n (onClick)=\"onToolbarInsert()\" />\n }\n @if (!metaInfo.tableMetadata.md_hide_export_xls) {\n <!-- Include dialog con progress bar + bottoni \"Stoppa e salva\n parziale\" / \"Stoppa\" / \"Continua in background\". -->\n <wuic-import-export-button\n [routeName]=\"metaInfo.tableMetadata.md_route_name\"\n [tableMetadata]=\"metaInfo.tableMetadata\"\n [filterInfoProvider]=\"getCurrentFilterInfoForExport\"></wuic-import-export-button>\n }\n @if (isBatchSaveEnabled()) {\n <p-button icon=\"pi pi-save\" label=\"{{'list_grid.save_changes' | translate}}\"\n (onClick)=\"onToolbarSaveBatch()\" />\n }\n </div>\n </div>\n }\n\n <div class=\"wuic-sf-spreadsheet-host\">\n @if (metaInfo && sfSheets.length > 0) {\n <ejs-spreadsheet #sfSpreadsheet\n [sheets]=\"sfSheets\"\n [height]=\"sfHeight\"\n [width]=\"sfWidth\"\n [scrollSettings]=\"sfScrollSettings\"\n [showRibbon]=\"showRibbon\"\n [showFormulaBar]=\"showFormulaBar\"\n [showSheetTabs]=\"false\"\n [allowEditing]=\"true\"\n [allowSorting]=\"true\"\n [allowFiltering]=\"false\"\n [allowResizing]=\"true\"\n [allowInsert]=\"canInsertRows()\"\n [allowDelete]=\"canDeleteRows()\"\n [enableContextMenu]=\"true\"\n [enableKeyboardNavigation]=\"true\"\n [enableClipboard]=\"true\"\n (created)=\"onSyncfusionCreated()\"\n (dataBound)=\"onSyncfusionDataBound()\"\n (cellSave)=\"onSyncfusionCellSave($event)\"\n (beforeCellSave)=\"onSyncfusionBeforeCellSave($event)\"\n (beforeCellRender)=\"onSyncfusionBeforeCellRender($event)\"\n (cellEdit)=\"onSyncfusionCellEdit($event)\"\n (contextMenuBeforeOpen)=\"onSyncfusionContextMenuBeforeOpen($event)\"\n (contextMenuItemSelect)=\"onSyncfusionContextMenuItemSelect($event)\"\n (actionBegin)=\"onSyncfusionActionBegin($event)\"\n (actionComplete)=\"onSyncfusionActionComplete($event)\"\n (dialogBeforeOpen)=\"onSyncfusionDialogBeforeOpen($event)\">\n </ejs-spreadsheet>\n }\n </div>\n\n @if (totalPages > 1 || totalRecords > pageSize) {\n <div class=\"wuic-sf-pagination\" role=\"navigation\" aria-label=\"Paginazione\">\n <button type=\"button\" class=\"wuic-sf-page-btn\"\n [disabled]=\"pageIndex <= 1\"\n (click)=\"isServerSide ? handleServerPageChange(1, pageSize) : setClientPage(1)\"\n title=\"Prima pagina\">\n <i class=\"pi pi-angle-double-left\"></i>\n </button>\n <button type=\"button\" class=\"wuic-sf-page-btn\"\n [disabled]=\"pageIndex <= 1\"\n (click)=\"isServerSide ? handleServerPageChange(pageIndex - 1, pageSize) : setClientPage(pageIndex - 1)\"\n title=\"Pagina precedente\">\n <i class=\"pi pi-angle-left\"></i>\n </button>\n <span class=\"wuic-sf-page-info\">\n Pagina <strong>{{ pageIndex }}</strong> di <strong>{{ totalPages }}</strong>\n <span class=\"wuic-sf-page-total\">({{ totalRecords }} record)</span>\n </span>\n <button type=\"button\" class=\"wuic-sf-page-btn\"\n [disabled]=\"pageIndex >= totalPages\"\n (click)=\"isServerSide ? handleServerPageChange(pageIndex + 1, pageSize) : setClientPage(pageIndex + 1)\"\n title=\"Pagina successiva\">\n <i class=\"pi pi-angle-right\"></i>\n </button>\n <button type=\"button\" class=\"wuic-sf-page-btn\"\n [disabled]=\"pageIndex >= totalPages\"\n (click)=\"isServerSide ? handleServerPageChange(totalPages, pageSize) : setClientPage(totalPages)\"\n title=\"Ultima pagina\">\n <i class=\"pi pi-angle-double-right\"></i>\n </button>\n <select class=\"wuic-sf-page-size\" [value]=\"pageSize\"\n (change)=\"setPageSize($any($event.target).value)\"\n title=\"Record per pagina\">\n <option [value]=\"10\">10</option>\n <option [value]=\"25\">25</option>\n <option [value]=\"50\">50</option>\n <option [value]=\"100\">100</option>\n </select>\n </div>\n }\n\n</div>\n\n@if (!hardcodedRoute) {\n <wuic-data-source #lookupSource [autoload]=\"true\" [routeFromRouting]=\"false\"\n [route]=\"currentRoute\" [parentRecord]=\"currentRecord\"\n [parentMetaInfo]=\"metaInfo\"></wuic-data-source>\n}\n", styles: [":host{display:block;width:100%;height:100%;min-height:0}.wuic-sf-spreadsheet-wrapper{display:flex;flex-direction:column;width:100%;height:100%;min-height:0;overflow:hidden}.wuic-sf-caption-bar{flex:0 0 auto;padding:5px}.grid-caption-left{display:flex;align-items:stretch;gap:.5rem;flex-wrap:nowrap;min-height:2.25rem;height:2.25rem}.wuic-sf-spreadsheet-host{flex:1 1 auto;min-height:0;width:100%;position:relative;overflow:visible}::ng-deep .e-dialog.e-popup-open,::ng-deep .e-excelfilter,::ng-deep .e-filter-popup{z-index:10010!important;min-width:240px}::ng-deep .e-excelfilter .e-footer-content,::ng-deep .e-filter-popup .e-footer-content{display:flex!important;justify-content:flex-end;gap:6px;padding:8px 12px!important}.wuic-sf-spreadsheet-host ejs-spreadsheet{display:block;width:100%;height:100%}:host ::ng-deep .e-spreadsheet .e-column-header .e-header-cell.wuic-sf-colname-header .e-header-cell-div{font-weight:700!important;text-align:left!important;padding-left:6px!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.wuic-sf-pagination{display:flex;gap:6px;align-items:center;justify-content:flex-end;padding:6px 10px;background-color:var(--wuic-surface-a, #ffffff);border-top:1px solid var(--wuic-surface-border, #e5e7eb);flex:0 0 auto;font-size:13px}.wuic-sf-page-btn{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;padding:0;border:1px solid var(--wuic-surface-border, #e5e7eb);border-radius:4px;background:transparent;cursor:pointer;color:var(--wuic-text-color, #1f2937);transition:background-color .12s ease,border-color .12s ease}.wuic-sf-page-btn:hover:not(:disabled){background-color:var(--wuic-hover-bg, #f3f4f6);border-color:var(--wuic-primary-color, #6366f1)}.wuic-sf-page-btn:disabled{opacity:.35;cursor:not-allowed}.wuic-sf-page-info{margin:0 8px;white-space:nowrap;color:var(--wuic-text-muted, #6b7280)}.wuic-sf-page-info strong{color:var(--wuic-text-color, #1f2937)}.wuic-sf-page-total{margin-left:6px;font-size:12px;color:var(--wuic-text-muted, #6b7280)}.wuic-sf-page-size{margin-left:8px;height:30px;padding:0 8px;border:1px solid var(--wuic-surface-border, #e5e7eb);border-radius:4px;background:transparent;color:var(--wuic-text-color, #1f2937);cursor:pointer}:host-context(.theme-dark) .wuic-sf-pagination,:host-context([data-theme=\"dark\"]) .wuic-sf-pagination{background-color:var(--wuic-surface-a-dark, #1f2937);border-color:var(--wuic-surface-border-dark, #374151)}:host-context(.theme-dark) .wuic-sf-page-btn,:host-context([data-theme=\"dark\"]) .wuic-sf-page-btn,:host-context(.theme-dark) .wuic-sf-page-size,:host-context([data-theme=\"dark\"]) .wuic-sf-page-size{color:#f3f4f6;border-color:var(--wuic-surface-border-dark, #374151)}:host-context(.theme-dark) .wuic-sf-page-btn:hover:not(:disabled),:host-context([data-theme=\"dark\"]) .wuic-sf-page-btn:hover:not(:disabled){background-color:#374151}:host-context(.theme-dark) .wuic-sf-page-info,:host-context([data-theme=\"dark\"]) .wuic-sf-page-info{color:#9ca3af}:host-context(.theme-dark) .wuic-sf-page-info strong,:host-context([data-theme=\"dark\"]) .wuic-sf-page-info strong{color:#f3f4f6}:host-context(.theme-dark) .wuic-sf-page-total,:host-context([data-theme=\"dark\"]) .wuic-sf-page-total{color:#9ca3af}:host ::ng-deep .e-spreadsheet{font-family:var(--wuic-font-family, inherit)}:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-column-header .e-header-cell.wuic-sf-colname-header{background-color:#111827!important;color:#e5e7eb!important}:host ::ng-deep .e-spreadsheet .e-sheet-content .e-filter-btn{opacity:0!important;pointer-events:none!important;width:0!important;height:0!important;min-width:0!important;padding:0!important;margin:0!important;overflow:hidden!important;position:absolute!important;right:0;top:0}:host ::ng-deep .e-spreadsheet .e-column-header .e-header-cell.wuic-sf-colname-header{position:relative!important}:host ::ng-deep .e-spreadsheet .e-column-header .wuic-sf-header-filter-btn{position:absolute;right:2px;top:50%;transform:translateY(-50%);display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;padding:0;background:transparent;border:none;border-radius:3px;cursor:pointer;color:#475569;flex-shrink:0;transition:background-color .12s,color .12s;z-index:2}:host ::ng-deep .e-spreadsheet .e-column-header .wuic-sf-header-filter-btn:hover{background-color:#e2e8f0;color:#1f2937}:host ::ng-deep .e-spreadsheet .e-column-header .wuic-sf-header-filter-btn svg{display:block;pointer-events:none}:host ::ng-deep .e-spreadsheet .e-column-header .wuic-sf-header-filter-btn svg *{pointer-events:none!important}:host ::ng-deep .e-spreadsheet svg,:host ::ng-deep .e-spreadsheet svg *{pointer-events:none!important}:host ::ng-deep .e-spreadsheet .e-column-header .wuic-sf-header-filter-btn.wuic-filtered{color:#2563eb}:host ::ng-deep .e-spreadsheet .e-column-header .wuic-sf-colname-header .e-header-cell-div{padding-right:22px!important}:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-column-header .wuic-sf-header-filter-btn{color:#cbd5e1}:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-column-header .wuic-sf-header-filter-btn:hover{background-color:#334155;color:#f3f4f6}:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-column-header .wuic-sf-header-filter-btn.wuic-filtered{color:#60a5fa}:host ::ng-deep .e-spreadsheet .e-sheet-panel{background-color:var(--wuic-surface-a, #ffffff)}:host-context(.theme-dark) ::ng-deep .e-spreadsheet,:host-context([data-theme=\"dark\"]) ::ng-deep .e-spreadsheet,:host ::ng-deep ejs-spreadsheet.wuic-sf-dark{background-color:var(--wuic-surface-a-dark, #1f2937);color:#f3f4f6}:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-sheet-panel,:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-main-panel{background-color:var(--wuic-surface-a-dark, #1f2937);color:#f3f4f6}:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-cell,:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-header-cell{background-color:var(--wuic-surface-a-dark, #1f2937);border-color:var(--wuic-surface-border-dark, #374151);color:#f3f4f6}:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-header-row .e-header-cell,:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-row-header .e-header-cell{background-color:#111827!important;color:#e5e7eb!important}:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-cell.row-danger{background-color:#7f1d1d!important;color:#fecaca!important}:host ::ng-deep .e-cell.row-danger{background-color:#fee2e2!important}:host ::ng-deep .e-cell.row-warning{background-color:#fef3c7!important}:host ::ng-deep .e-cell.row-success{background-color:#d1fae5!important}::ng-deep .wuic-sf-filter-popup{position:fixed;z-index:99999;min-width:260px;max-width:340px;background:#fff;color:#111827;border:1px solid #d1d5db;border-radius:6px;box-shadow:0 8px 24px #0000002e;font-family:inherit;font-size:13px;display:flex;flex-direction:column;overflow:hidden;-webkit-user-select:none;user-select:none}::ng-deep .wuic-sf-filter-popup-header{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;background:#f3f4f6;border-bottom:1px solid #e5e7eb;font-weight:600}::ng-deep .wuic-sf-filter-popup-title{flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}::ng-deep .wuic-sf-filter-popup-close{background:transparent;border:none;cursor:pointer;font-size:18px;line-height:1;padding:0 4px;color:#6b7280}::ng-deep .wuic-sf-filter-popup-close:hover{color:#111827}::ng-deep .wuic-sf-filter-popup-sort{display:flex;flex-direction:column;border-bottom:1px solid #e5e7eb}::ng-deep .wuic-sf-filter-popup-sort-btn{background:transparent;border:none;text-align:left;padding:6px 12px;cursor:pointer;font-size:13px;color:#111827;display:flex;align-items:center;gap:6px}::ng-deep .wuic-sf-filter-popup-sort-btn:hover{background:#f3f4f6}::ng-deep .wuic-sf-filter-popup-sort-icon{font-size:10px;color:#6b7280}::ng-deep .wuic-sf-filter-popup-clear{border-bottom:1px solid #e5e7eb}::ng-deep .wuic-sf-filter-popup-clear-btn{width:100%;background:transparent;border:none;text-align:left;padding:6px 12px;cursor:pointer;font-size:13px;color:#2563eb}::ng-deep .wuic-sf-filter-popup-clear-btn:hover:not(:disabled){background:#eff6ff}::ng-deep .wuic-sf-filter-popup-clear-btn:disabled{color:#9ca3af;cursor:not-allowed}::ng-deep .wuic-sf-filter-popup-search{padding:8px 12px;border-bottom:1px solid #e5e7eb}::ng-deep .wuic-sf-filter-popup-search-input{width:100%;padding:4px 8px;border:1px solid #d1d5db;border-radius:4px;font-size:13px;outline:none;box-sizing:border-box}::ng-deep .wuic-sf-filter-popup-search-input:focus{border-color:#2563eb;box-shadow:0 0 0 2px #2563eb33}::ng-deep .wuic-sf-filter-popup-list-wrap{display:flex;flex-direction:column;max-height:260px;overflow:hidden}::ng-deep .wuic-sf-filter-popup-selectall{padding:4px 12px;border-bottom:1px solid #e5e7eb;background:#f9fafb;font-weight:500}::ng-deep .wuic-sf-filter-popup-list{flex:1 1 auto;overflow-y:auto;max-height:220px}::ng-deep .wuic-sf-filter-popup-item{display:flex;align-items:center;gap:6px;padding:4px 12px;cursor:pointer}::ng-deep .wuic-sf-filter-popup-item:hover{background:#f3f4f6}::ng-deep .wuic-sf-filter-popup-item input[type=checkbox]{margin:0;flex:0 0 auto}::ng-deep .wuic-sf-filter-popup-item span{flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}::ng-deep .wuic-sf-filter-popup-footer{display:flex;justify-content:flex-end;gap:8px;padding:8px 12px;border-top:1px solid #e5e7eb;background:#f9fafb}::ng-deep .wuic-sf-filter-popup-ok,::ng-deep .wuic-sf-filter-popup-cancel{padding:4px 14px;border:1px solid #d1d5db;border-radius:4px;background:#fff;cursor:pointer;font-size:13px}::ng-deep .wuic-sf-filter-popup-ok{background:#2563eb;color:#fff;border-color:#2563eb}::ng-deep .wuic-sf-filter-popup-ok:hover{background:#1d4ed8}::ng-deep .wuic-sf-filter-popup-cancel:hover{background:#f3f4f6}:host ::ng-deep .wuic-sf-header-filter-btn.wuic-sf-header-filter-btn--active{color:#2563eb}:host ::ng-deep .wuic-sf-header-filter-btn.wuic-sf-header-filter-btn--active svg{fill:#2563eb}::ng-deep .wuic-sf-filter-popup.wuic-sf-filter-popup--dark{background:#1f2937;color:#f3f4f6;border-color:#374151}::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-header,::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-footer,::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-selectall{background:#111827;border-color:#374151}::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-sort,::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-clear,::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-search{border-color:#374151}::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-sort-btn,::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-cancel{color:#f3f4f6;background:transparent;border-color:#374151}::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-cancel{background:#374151}::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-sort-btn:hover,::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-item:hover,::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-cancel:hover{background:#374151}::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-search-input{background:#111827;color:#f3f4f6;border-color:#374151}::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-close{color:#9ca3af}::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-close:hover{color:#f3f4f6}::ng-deep .wuic-sf-cell-editor{box-sizing:border-box;padding:2px 6px;border:2px solid #2563eb;background:#fff;color:#111827;font-family:inherit;font-size:13px;outline:none;box-shadow:0 2px 8px #00000026;border-radius:2px}::ng-deep .wuic-sf-cell-editor:focus{border-color:#1d4ed8;box-shadow:0 0 0 2px #2563eb40}::ng-deep select.wuic-sf-cell-editor{cursor:pointer}::ng-deep .wuic-sf-cell-editor.wuic-sf-cell-editor--dark{background:#1f2937;color:#f3f4f6;border-color:#2563eb}::ng-deep .wuic-sf-cell-editor.wuic-sf-cell-editor--dark option{background:#1f2937;color:#f3f4f6}\n"], dependencies: [{ kind: "component", type: DataSourceComponent, selector: "wuic-data-source", inputs: ["route", "routeFromRouting", "hardcodedRoute", "autoload", "loading", "changeTracking", "parentRecord", "parentMetaInfo", "parentDatasource", "useComboEndpoint", "comboFormulaLookup", "comboMcId", "comboField", "comboExtraFields", "comboCurrentRecord", "componentRef"] }, { kind: "ngmodule", type: SpreadsheetModule }, { kind: "component", type: i7.SpreadsheetComponent, selector: "ejs-spreadsheet", inputs: ["activeSheetIndex", "allowAutoFill", "allowCellFormatting", "allowChart", "allowConditionalFormat", "allowDataValidation", "allowDelete", "allowEditing", "allowFiltering", "allowFindAndReplace", "allowFreezePane", "allowHyperlink", "allowImage", "allowInsert", "allowMerge", "allowNumberFormatting", "allowOpen", "allowPrint", "allowResizing", "allowSave", "allowScrolling", "allowSorting", "allowUndoRedo", "allowWrap", "author", "autoFillSettings", "calculationMode", "cellStyle", "cssClass", "currencyCode", "definedNames", "enableClipboard", "enableContextMenu", "enableKeyboardNavigation", "enableKeyboardShortcut", "enableNotes", "enablePersistence", "enableRtl", "height", "isProtected", "listSeparator", "locale", "openSettings", "openUrl", "password", "saveUrl", "scrollSettings", "selectionSettings", "sheets", "showAggregate", "showCommentsPane", "showFormulaBar", "showRibbon", "showSheetTabs", "width"], outputs: ["actionBegin", "actionComplete", "afterHyperlinkClick", "afterHyperlinkCreate", "beforeCellFormat", "beforeCellRender", "beforeCellSave", "beforeCellUpdate", "beforeConditionalFormat", "beforeDataBound", "beforeHyperlinkClick", "beforeHyperlinkCreate", "beforeOpen", "beforeSave", "beforeSelect", "beforeSort", "cellEdit", "cellEdited", "cellEditing", "cellSave", "contextMenuBeforeClose", "contextMenuBeforeOpen", "contextMenuItemSelect", "created", "dataBound", "dataSourceChanged", "dialogBeforeOpen", "fileMenuBeforeClose", "fileMenuBeforeOpen", "fileMenuItemSelect", "openComplete", "openFailure", "queryCellInfo", "saveComplete", "select", "sortComplete"] }, { kind: "component", type: ImportExportButtonComponent, selector: "wuic-import-export-button", inputs: ["routeName", "tableMetadata", "filterInfoProvider"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i4.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "component", type: SyncfusionStylesBootstrapComponent, selector: "wuic-syncfusion-styles-bootstrap" }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] });
|
|
4331
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.2.9", type: SpreadsheetListSfComponent, isStandalone: true, selector: "wuic-spreadsheet-list-sf", inputs: { hardcodedRoute: "hardcodedRoute", parentRecord: "parentRecord", parentMetaInfo: "parentMetaInfo", datasource: "datasource", hardcodedDatasource: "hardcodedDatasource", hideToolbar: "hideToolbar", enableLockAwareness: "enableLockAwareness", lockScope: "lockScope", heartbeatIntervalSec: "heartbeatIntervalSec", showFormulaBar: "showFormulaBar", showRibbon: "showRibbon" }, outputs: { onSpreadsheetDataBound: "onSpreadsheetDataBound", onSpreadsheetBeforePageChange: "onSpreadsheetBeforePageChange", onSpreadsheetPageChange: "onSpreadsheetPageChange", onSpreadsheetRowInserted: "onSpreadsheetRowInserted", onSpreadsheetRowsDeleted: "onSpreadsheetRowsDeleted", onSpreadsheetBatchSaved: "onSpreadsheetBatchSaved", onLockAcquired: "onLockAcquired", onLockConflict: "onLockConflict", onLockReleased: "onLockReleased", onLockExpired: "onLockExpired" }, host: { listeners: { "window:resize": "onWindowResize()" } }, viewQueries: [{ propertyName: "sfSpreadsheet", first: true, predicate: ["sfSpreadsheet"], descendants: true }, { propertyName: "lookupSource", first: true, predicate: ["lookupSource"], descendants: true }], ngImport: i0, template: "<!--\r\n Layout root wrapper:\r\n 1. Toolbar WUIC custom (insert / save batch / export / refresh)\r\n 2. Syncfusion Spreadsheet host\r\n 3. Pagination custom (Syncfusion non ha pagination built-in, quindi la\r\n rendiamo sotto il foglio con nav + page-size dropdown)\r\n 4. Lookup datasource (invisibile, pattern identico al vecchio componente)\r\n-->\r\n\r\n<!-- Bootstrap CSS Syncfusion (~500 KiB): si monta solo quando questo\r\n componente lazy \u00E8 istanziato \u2192 CSS NON nel bundle iniziale globale,\r\n risparmia ~500 KiB su tutte le pagine che non aprono spreadsheet. -->\r\n<wuic-syncfusion-styles-bootstrap></wuic-syncfusion-styles-bootstrap>\r\n\r\n<div class=\"wuic-sf-spreadsheet-wrapper\">\r\n\r\n @if (!hideToolbar && metaInfo) {\r\n <!-- Stile allineato a <wuic-list-grid>: stessa caption-bar, stessi p-button\r\n PrimeNG con icona + label, stesso componente import/export. -->\r\n <div class=\"grid-caption-bar wuic-sf-caption-bar\" role=\"toolbar\" aria-label=\"Spreadsheet toolbar\">\r\n <div class=\"grid-caption-left\">\r\n @if (!metaInfo.tableMetadata.md_hide_refresh) {\r\n <p-button icon=\"pi pi-refresh\" label=\"{{'refresh_grid' | translate}}\"\r\n (onClick)=\"onToolbarRefresh()\" />\r\n }\r\n @if (canInsertRows()) {\r\n <p-button icon=\"pi pi-plus\" label=\"{{'add_grid' | translate}}\"\r\n (onClick)=\"onToolbarInsert()\" />\r\n }\r\n @if (!metaInfo.tableMetadata.md_hide_export_xls) {\r\n <!-- Include dialog con progress bar + bottoni \"Stoppa e salva\r\n parziale\" / \"Stoppa\" / \"Continua in background\". -->\r\n <wuic-import-export-button\r\n [routeName]=\"metaInfo.tableMetadata.md_route_name\"\r\n [tableMetadata]=\"metaInfo.tableMetadata\"\r\n [filterInfoProvider]=\"getCurrentFilterInfoForExport\"></wuic-import-export-button>\r\n }\r\n @if (isBatchSaveEnabled()) {\r\n <p-button icon=\"pi pi-save\" label=\"{{'list_grid.save_changes' | translate}}\"\r\n (onClick)=\"onToolbarSaveBatch()\" />\r\n }\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"wuic-sf-spreadsheet-host\">\r\n @if (metaInfo && sfSheets.length > 0) {\r\n <ejs-spreadsheet #sfSpreadsheet\r\n [sheets]=\"sfSheets\"\r\n [height]=\"sfHeight\"\r\n [width]=\"sfWidth\"\r\n [scrollSettings]=\"sfScrollSettings\"\r\n [showRibbon]=\"showRibbon\"\r\n [showFormulaBar]=\"showFormulaBar\"\r\n [showSheetTabs]=\"false\"\r\n [allowEditing]=\"true\"\r\n [allowSorting]=\"true\"\r\n [allowFiltering]=\"false\"\r\n [allowResizing]=\"true\"\r\n [allowInsert]=\"canInsertRows()\"\r\n [allowDelete]=\"canDeleteRows()\"\r\n [enableContextMenu]=\"true\"\r\n [enableKeyboardNavigation]=\"true\"\r\n [enableClipboard]=\"true\"\r\n (created)=\"onSyncfusionCreated()\"\r\n (dataBound)=\"onSyncfusionDataBound()\"\r\n (cellSave)=\"onSyncfusionCellSave($event)\"\r\n (beforeCellSave)=\"onSyncfusionBeforeCellSave($event)\"\r\n (beforeCellRender)=\"onSyncfusionBeforeCellRender($event)\"\r\n (cellEdit)=\"onSyncfusionCellEdit($event)\"\r\n (contextMenuBeforeOpen)=\"onSyncfusionContextMenuBeforeOpen($event)\"\r\n (contextMenuItemSelect)=\"onSyncfusionContextMenuItemSelect($event)\"\r\n (actionBegin)=\"onSyncfusionActionBegin($event)\"\r\n (actionComplete)=\"onSyncfusionActionComplete($event)\"\r\n (dialogBeforeOpen)=\"onSyncfusionDialogBeforeOpen($event)\">\r\n </ejs-spreadsheet>\r\n }\r\n </div>\r\n\r\n @if (totalPages > 1 || totalRecords > pageSize) {\r\n <div class=\"wuic-sf-pagination\" role=\"navigation\" aria-label=\"Paginazione\">\r\n <button type=\"button\" class=\"wuic-sf-page-btn\"\r\n [disabled]=\"pageIndex <= 1\"\r\n (click)=\"isServerSide ? handleServerPageChange(1, pageSize) : setClientPage(1)\"\r\n title=\"Prima pagina\">\r\n <i class=\"pi pi-angle-double-left\"></i>\r\n </button>\r\n <button type=\"button\" class=\"wuic-sf-page-btn\"\r\n [disabled]=\"pageIndex <= 1\"\r\n (click)=\"isServerSide ? handleServerPageChange(pageIndex - 1, pageSize) : setClientPage(pageIndex - 1)\"\r\n title=\"Pagina precedente\">\r\n <i class=\"pi pi-angle-left\"></i>\r\n </button>\r\n <span class=\"wuic-sf-page-info\">\r\n Pagina <strong>{{ pageIndex }}</strong> di <strong>{{ totalPages }}</strong>\r\n <span class=\"wuic-sf-page-total\">({{ totalRecords }} record)</span>\r\n </span>\r\n <button type=\"button\" class=\"wuic-sf-page-btn\"\r\n [disabled]=\"pageIndex >= totalPages\"\r\n (click)=\"isServerSide ? handleServerPageChange(pageIndex + 1, pageSize) : setClientPage(pageIndex + 1)\"\r\n title=\"Pagina successiva\">\r\n <i class=\"pi pi-angle-right\"></i>\r\n </button>\r\n <button type=\"button\" class=\"wuic-sf-page-btn\"\r\n [disabled]=\"pageIndex >= totalPages\"\r\n (click)=\"isServerSide ? handleServerPageChange(totalPages, pageSize) : setClientPage(totalPages)\"\r\n title=\"Ultima pagina\">\r\n <i class=\"pi pi-angle-double-right\"></i>\r\n </button>\r\n <select class=\"wuic-sf-page-size\" [value]=\"pageSize\"\r\n (change)=\"setPageSize($any($event.target).value)\"\r\n title=\"Record per pagina\">\r\n <option [value]=\"10\">10</option>\r\n <option [value]=\"25\">25</option>\r\n <option [value]=\"50\">50</option>\r\n <option [value]=\"100\">100</option>\r\n </select>\r\n </div>\r\n }\r\n\r\n</div>\r\n\r\n@if (!hardcodedRoute) {\r\n <wuic-data-source #lookupSource [autoload]=\"true\" [routeFromRouting]=\"false\"\r\n [route]=\"currentRoute\" [parentRecord]=\"currentRecord\"\r\n [parentMetaInfo]=\"metaInfo\"></wuic-data-source>\r\n}\r\n", styles: [":host{display:block;width:100%;height:100%;min-height:0}.wuic-sf-spreadsheet-wrapper{display:flex;flex-direction:column;width:100%;height:100%;min-height:0;overflow:hidden}.wuic-sf-caption-bar{flex:0 0 auto;padding:5px}.grid-caption-left{display:flex;align-items:stretch;gap:.5rem;flex-wrap:nowrap;min-height:2.25rem;height:2.25rem}.wuic-sf-spreadsheet-host{flex:1 1 auto;min-height:0;width:100%;position:relative;overflow:visible}::ng-deep .e-dialog.e-popup-open,::ng-deep .e-excelfilter,::ng-deep .e-filter-popup{z-index:10010!important;min-width:240px}::ng-deep .e-excelfilter .e-footer-content,::ng-deep .e-filter-popup .e-footer-content{display:flex!important;justify-content:flex-end;gap:6px;padding:8px 12px!important}.wuic-sf-spreadsheet-host ejs-spreadsheet{display:block;width:100%;height:100%}:host ::ng-deep .e-spreadsheet .e-column-header .e-header-cell.wuic-sf-colname-header .e-header-cell-div{font-weight:700!important;text-align:left!important;padding-left:6px!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.wuic-sf-pagination{display:flex;gap:6px;align-items:center;justify-content:flex-end;padding:6px 10px;background-color:var(--wuic-surface-a, #ffffff);border-top:1px solid var(--wuic-surface-border, #e5e7eb);flex:0 0 auto;font-size:13px}.wuic-sf-page-btn{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;padding:0;border:1px solid var(--wuic-surface-border, #e5e7eb);border-radius:4px;background:transparent;cursor:pointer;color:var(--wuic-text-color, #1f2937);transition:background-color .12s ease,border-color .12s ease}.wuic-sf-page-btn:hover:not(:disabled){background-color:var(--wuic-hover-bg, #f3f4f6);border-color:var(--wuic-primary-color, #6366f1)}.wuic-sf-page-btn:disabled{opacity:.35;cursor:not-allowed}.wuic-sf-page-info{margin:0 8px;white-space:nowrap;color:var(--wuic-text-muted, #6b7280)}.wuic-sf-page-info strong{color:var(--wuic-text-color, #1f2937)}.wuic-sf-page-total{margin-left:6px;font-size:12px;color:var(--wuic-text-muted, #6b7280)}.wuic-sf-page-size{margin-left:8px;height:30px;padding:0 8px;border:1px solid var(--wuic-surface-border, #e5e7eb);border-radius:4px;background:transparent;color:var(--wuic-text-color, #1f2937);cursor:pointer}:host-context(.theme-dark) .wuic-sf-pagination,:host-context([data-theme=\"dark\"]) .wuic-sf-pagination{background-color:var(--wuic-surface-a-dark, #1f2937);border-color:var(--wuic-surface-border-dark, #374151)}:host-context(.theme-dark) .wuic-sf-page-btn,:host-context([data-theme=\"dark\"]) .wuic-sf-page-btn,:host-context(.theme-dark) .wuic-sf-page-size,:host-context([data-theme=\"dark\"]) .wuic-sf-page-size{color:#f3f4f6;border-color:var(--wuic-surface-border-dark, #374151)}:host-context(.theme-dark) .wuic-sf-page-btn:hover:not(:disabled),:host-context([data-theme=\"dark\"]) .wuic-sf-page-btn:hover:not(:disabled){background-color:#374151}:host-context(.theme-dark) .wuic-sf-page-info,:host-context([data-theme=\"dark\"]) .wuic-sf-page-info{color:#9ca3af}:host-context(.theme-dark) .wuic-sf-page-info strong,:host-context([data-theme=\"dark\"]) .wuic-sf-page-info strong{color:#f3f4f6}:host-context(.theme-dark) .wuic-sf-page-total,:host-context([data-theme=\"dark\"]) .wuic-sf-page-total{color:#9ca3af}:host ::ng-deep .e-spreadsheet{font-family:var(--wuic-font-family, inherit)}:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-column-header .e-header-cell.wuic-sf-colname-header{background-color:#111827!important;color:#e5e7eb!important}:host ::ng-deep .e-spreadsheet .e-sheet-content .e-filter-btn{opacity:0!important;pointer-events:none!important;width:0!important;height:0!important;min-width:0!important;padding:0!important;margin:0!important;overflow:hidden!important;position:absolute!important;right:0;top:0}:host ::ng-deep .e-spreadsheet .e-column-header .e-header-cell.wuic-sf-colname-header{position:relative!important}:host ::ng-deep .e-spreadsheet .e-column-header .wuic-sf-header-filter-btn{position:absolute;right:2px;top:50%;transform:translateY(-50%);display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;padding:0;background:transparent;border:none;border-radius:3px;cursor:pointer;color:#475569;flex-shrink:0;transition:background-color .12s,color .12s;z-index:2}:host ::ng-deep .e-spreadsheet .e-column-header .wuic-sf-header-filter-btn:hover{background-color:#e2e8f0;color:#1f2937}:host ::ng-deep .e-spreadsheet .e-column-header .wuic-sf-header-filter-btn svg{display:block;pointer-events:none}:host ::ng-deep .e-spreadsheet .e-column-header .wuic-sf-header-filter-btn svg *{pointer-events:none!important}:host ::ng-deep .e-spreadsheet svg,:host ::ng-deep .e-spreadsheet svg *{pointer-events:none!important}:host ::ng-deep .e-spreadsheet .e-column-header .wuic-sf-header-filter-btn.wuic-filtered{color:#2563eb}:host ::ng-deep .e-spreadsheet .e-column-header .wuic-sf-colname-header .e-header-cell-div{padding-right:22px!important}:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-column-header .wuic-sf-header-filter-btn{color:#cbd5e1}:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-column-header .wuic-sf-header-filter-btn:hover{background-color:#334155;color:#f3f4f6}:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-column-header .wuic-sf-header-filter-btn.wuic-filtered{color:#60a5fa}:host ::ng-deep .e-spreadsheet .e-sheet-panel{background-color:var(--wuic-surface-a, #ffffff)}:host-context(.theme-dark) ::ng-deep .e-spreadsheet,:host-context([data-theme=\"dark\"]) ::ng-deep .e-spreadsheet,:host ::ng-deep ejs-spreadsheet.wuic-sf-dark{background-color:var(--wuic-surface-a-dark, #1f2937);color:#f3f4f6}:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-sheet-panel,:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-main-panel{background-color:var(--wuic-surface-a-dark, #1f2937);color:#f3f4f6}:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-cell,:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-header-cell{background-color:var(--wuic-surface-a-dark, #1f2937);border-color:var(--wuic-surface-border-dark, #374151);color:#f3f4f6}:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-header-row .e-header-cell,:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-row-header .e-header-cell{background-color:#111827!important;color:#e5e7eb!important}:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-cell.row-danger{background-color:#7f1d1d!important;color:#fecaca!important}:host ::ng-deep .e-cell.row-danger{background-color:#fee2e2!important}:host ::ng-deep .e-cell.row-warning{background-color:#fef3c7!important}:host ::ng-deep .e-cell.row-success{background-color:#d1fae5!important}::ng-deep .wuic-sf-filter-popup{position:fixed;z-index:99999;min-width:260px;max-width:340px;background:#fff;color:#111827;border:1px solid #d1d5db;border-radius:6px;box-shadow:0 8px 24px #0000002e;font-family:inherit;font-size:13px;display:flex;flex-direction:column;overflow:hidden;-webkit-user-select:none;user-select:none}::ng-deep .wuic-sf-filter-popup-header{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;background:#f3f4f6;border-bottom:1px solid #e5e7eb;font-weight:600}::ng-deep .wuic-sf-filter-popup-title{flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}::ng-deep .wuic-sf-filter-popup-close{background:transparent;border:none;cursor:pointer;font-size:18px;line-height:1;padding:0 4px;color:#6b7280}::ng-deep .wuic-sf-filter-popup-close:hover{color:#111827}::ng-deep .wuic-sf-filter-popup-sort{display:flex;flex-direction:column;border-bottom:1px solid #e5e7eb}::ng-deep .wuic-sf-filter-popup-sort-btn{background:transparent;border:none;text-align:left;padding:6px 12px;cursor:pointer;font-size:13px;color:#111827;display:flex;align-items:center;gap:6px}::ng-deep .wuic-sf-filter-popup-sort-btn:hover{background:#f3f4f6}::ng-deep .wuic-sf-filter-popup-sort-icon{font-size:10px;color:#6b7280}::ng-deep .wuic-sf-filter-popup-clear{border-bottom:1px solid #e5e7eb}::ng-deep .wuic-sf-filter-popup-clear-btn{width:100%;background:transparent;border:none;text-align:left;padding:6px 12px;cursor:pointer;font-size:13px;color:#2563eb}::ng-deep .wuic-sf-filter-popup-clear-btn:hover:not(:disabled){background:#eff6ff}::ng-deep .wuic-sf-filter-popup-clear-btn:disabled{color:#9ca3af;cursor:not-allowed}::ng-deep .wuic-sf-filter-popup-search{padding:8px 12px;border-bottom:1px solid #e5e7eb}::ng-deep .wuic-sf-filter-popup-search-input{width:100%;padding:4px 8px;border:1px solid #d1d5db;border-radius:4px;font-size:13px;outline:none;box-sizing:border-box}::ng-deep .wuic-sf-filter-popup-search-input:focus{border-color:#2563eb;box-shadow:0 0 0 2px #2563eb33}::ng-deep .wuic-sf-filter-popup-list-wrap{display:flex;flex-direction:column;max-height:260px;overflow:hidden}::ng-deep .wuic-sf-filter-popup-selectall{padding:4px 12px;border-bottom:1px solid #e5e7eb;background:#f9fafb;font-weight:500}::ng-deep .wuic-sf-filter-popup-list{flex:1 1 auto;overflow-y:auto;max-height:220px}::ng-deep .wuic-sf-filter-popup-item{display:flex;align-items:center;gap:6px;padding:4px 12px;cursor:pointer}::ng-deep .wuic-sf-filter-popup-item:hover{background:#f3f4f6}::ng-deep .wuic-sf-filter-popup-item input[type=checkbox]{margin:0;flex:0 0 auto}::ng-deep .wuic-sf-filter-popup-item span{flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}::ng-deep .wuic-sf-filter-popup-footer{display:flex;justify-content:flex-end;gap:8px;padding:8px 12px;border-top:1px solid #e5e7eb;background:#f9fafb}::ng-deep .wuic-sf-filter-popup-ok,::ng-deep .wuic-sf-filter-popup-cancel{padding:4px 14px;border:1px solid #d1d5db;border-radius:4px;background:#fff;cursor:pointer;font-size:13px}::ng-deep .wuic-sf-filter-popup-ok{background:#2563eb;color:#fff;border-color:#2563eb}::ng-deep .wuic-sf-filter-popup-ok:hover{background:#1d4ed8}::ng-deep .wuic-sf-filter-popup-cancel:hover{background:#f3f4f6}:host ::ng-deep .wuic-sf-header-filter-btn.wuic-sf-header-filter-btn--active{color:#2563eb}:host ::ng-deep .wuic-sf-header-filter-btn.wuic-sf-header-filter-btn--active svg{fill:#2563eb}::ng-deep .wuic-sf-filter-popup.wuic-sf-filter-popup--dark{background:#1f2937;color:#f3f4f6;border-color:#374151}::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-header,::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-footer,::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-selectall{background:#111827;border-color:#374151}::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-sort,::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-clear,::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-search{border-color:#374151}::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-sort-btn,::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-cancel{color:#f3f4f6;background:transparent;border-color:#374151}::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-cancel{background:#374151}::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-sort-btn:hover,::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-item:hover,::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-cancel:hover{background:#374151}::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-search-input{background:#111827;color:#f3f4f6;border-color:#374151}::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-close{color:#9ca3af}::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-close:hover{color:#f3f4f6}::ng-deep .wuic-sf-cell-editor{box-sizing:border-box;padding:2px 6px;border:2px solid #2563eb;background:#fff;color:#111827;font-family:inherit;font-size:13px;outline:none;box-shadow:0 2px 8px #00000026;border-radius:2px}::ng-deep .wuic-sf-cell-editor:focus{border-color:#1d4ed8;box-shadow:0 0 0 2px #2563eb40}::ng-deep select.wuic-sf-cell-editor{cursor:pointer}::ng-deep .wuic-sf-cell-editor.wuic-sf-cell-editor--dark{background:#1f2937;color:#f3f4f6;border-color:#2563eb}::ng-deep .wuic-sf-cell-editor.wuic-sf-cell-editor--dark option{background:#1f2937;color:#f3f4f6}\n"], dependencies: [{ kind: "component", type: DataSourceComponent, selector: "wuic-data-source", inputs: ["route", "routeFromRouting", "hardcodedRoute", "autoload", "loading", "changeTracking", "parentRecord", "parentMetaInfo", "parentDatasource", "useComboEndpoint", "comboFormulaLookup", "comboMcId", "comboField", "comboExtraFields", "comboCurrentRecord", "componentRef"] }, { kind: "ngmodule", type: SpreadsheetModule }, { kind: "component", type: i7.SpreadsheetComponent, selector: "ejs-spreadsheet", inputs: ["activeSheetIndex", "allowAutoFill", "allowCellFormatting", "allowChart", "allowConditionalFormat", "allowDataValidation", "allowDelete", "allowEditing", "allowFiltering", "allowFindAndReplace", "allowFreezePane", "allowHyperlink", "allowImage", "allowInsert", "allowMerge", "allowNumberFormatting", "allowOpen", "allowPrint", "allowResizing", "allowSave", "allowScrolling", "allowSorting", "allowUndoRedo", "allowWrap", "author", "autoFillSettings", "calculationMode", "cellStyle", "cssClass", "currencyCode", "definedNames", "enableClipboard", "enableContextMenu", "enableKeyboardNavigation", "enableKeyboardShortcut", "enableNotes", "enablePersistence", "enableRtl", "height", "isProtected", "listSeparator", "locale", "openSettings", "openUrl", "password", "saveUrl", "scrollSettings", "selectionSettings", "sheets", "showAggregate", "showCommentsPane", "showFormulaBar", "showRibbon", "showSheetTabs", "width"], outputs: ["actionBegin", "actionComplete", "afterHyperlinkClick", "afterHyperlinkCreate", "beforeCellFormat", "beforeCellRender", "beforeCellSave", "beforeCellUpdate", "beforeConditionalFormat", "beforeDataBound", "beforeHyperlinkClick", "beforeHyperlinkCreate", "beforeOpen", "beforeSave", "beforeSelect", "beforeSort", "cellEdit", "cellEdited", "cellEditing", "cellSave", "contextMenuBeforeClose", "contextMenuBeforeOpen", "contextMenuItemSelect", "created", "dataBound", "dataSourceChanged", "dialogBeforeOpen", "fileMenuBeforeClose", "fileMenuBeforeOpen", "fileMenuItemSelect", "openComplete", "openFailure", "queryCellInfo", "saveComplete", "select", "sortComplete"] }, { kind: "component", type: ImportExportButtonComponent, selector: "wuic-import-export-button", inputs: ["routeName", "tableMetadata", "filterInfoProvider"] }, { kind: "ngmodule", type: ButtonModule }, { kind: "component", type: i4.Button, selector: "p-button", inputs: ["hostName", "type", "badge", "disabled", "raised", "rounded", "text", "plain", "outlined", "link", "tabindex", "size", "variant", "style", "styleClass", "badgeClass", "badgeSeverity", "ariaLabel", "autofocus", "iconPos", "icon", "label", "loading", "loadingIcon", "severity", "buttonProps", "fluid"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "component", type: SyncfusionStylesBootstrapComponent, selector: "wuic-syncfusion-styles-bootstrap" }, { kind: "pipe", type: i8.TranslatePipe, name: "translate" }] });
|
|
4332
4332
|
}
|
|
4333
4333
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: SpreadsheetListSfComponent, decorators: [{
|
|
4334
4334
|
type: Component,
|
|
@@ -4339,7 +4339,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
4339
4339
|
ButtonModule,
|
|
4340
4340
|
TranslateModule,
|
|
4341
4341
|
SyncfusionStylesBootstrapComponent
|
|
4342
|
-
], template: "<!--\n Layout root wrapper:\n 1. Toolbar WUIC custom (insert / save batch / export / refresh)\n 2. Syncfusion Spreadsheet host\n 3. Pagination custom (Syncfusion non ha pagination built-in, quindi la\n rendiamo sotto il foglio con nav + page-size dropdown)\n 4. Lookup datasource (invisibile, pattern identico al vecchio componente)\n-->\n\n<!-- Bootstrap CSS Syncfusion (~500 KiB): si monta solo quando questo\n componente lazy \u00E8 istanziato \u2192 CSS NON nel bundle iniziale globale,\n risparmia ~500 KiB su tutte le pagine che non aprono spreadsheet. -->\n<wuic-syncfusion-styles-bootstrap></wuic-syncfusion-styles-bootstrap>\n\n<div class=\"wuic-sf-spreadsheet-wrapper\">\n\n @if (!hideToolbar && metaInfo) {\n <!-- Stile allineato a <wuic-list-grid>: stessa caption-bar, stessi p-button\n PrimeNG con icona + label, stesso componente import/export. -->\n <div class=\"grid-caption-bar wuic-sf-caption-bar\" role=\"toolbar\" aria-label=\"Spreadsheet toolbar\">\n <div class=\"grid-caption-left\">\n @if (!metaInfo.tableMetadata.md_hide_refresh) {\n <p-button icon=\"pi pi-refresh\" label=\"{{'refresh_grid' | translate}}\"\n (onClick)=\"onToolbarRefresh()\" />\n }\n @if (canInsertRows()) {\n <p-button icon=\"pi pi-plus\" label=\"{{'add_grid' | translate}}\"\n (onClick)=\"onToolbarInsert()\" />\n }\n @if (!metaInfo.tableMetadata.md_hide_export_xls) {\n <!-- Include dialog con progress bar + bottoni \"Stoppa e salva\n parziale\" / \"Stoppa\" / \"Continua in background\". -->\n <wuic-import-export-button\n [routeName]=\"metaInfo.tableMetadata.md_route_name\"\n [tableMetadata]=\"metaInfo.tableMetadata\"\n [filterInfoProvider]=\"getCurrentFilterInfoForExport\"></wuic-import-export-button>\n }\n @if (isBatchSaveEnabled()) {\n <p-button icon=\"pi pi-save\" label=\"{{'list_grid.save_changes' | translate}}\"\n (onClick)=\"onToolbarSaveBatch()\" />\n }\n </div>\n </div>\n }\n\n <div class=\"wuic-sf-spreadsheet-host\">\n @if (metaInfo && sfSheets.length > 0) {\n <ejs-spreadsheet #sfSpreadsheet\n [sheets]=\"sfSheets\"\n [height]=\"sfHeight\"\n [width]=\"sfWidth\"\n [scrollSettings]=\"sfScrollSettings\"\n [showRibbon]=\"showRibbon\"\n [showFormulaBar]=\"showFormulaBar\"\n [showSheetTabs]=\"false\"\n [allowEditing]=\"true\"\n [allowSorting]=\"true\"\n [allowFiltering]=\"false\"\n [allowResizing]=\"true\"\n [allowInsert]=\"canInsertRows()\"\n [allowDelete]=\"canDeleteRows()\"\n [enableContextMenu]=\"true\"\n [enableKeyboardNavigation]=\"true\"\n [enableClipboard]=\"true\"\n (created)=\"onSyncfusionCreated()\"\n (dataBound)=\"onSyncfusionDataBound()\"\n (cellSave)=\"onSyncfusionCellSave($event)\"\n (beforeCellSave)=\"onSyncfusionBeforeCellSave($event)\"\n (beforeCellRender)=\"onSyncfusionBeforeCellRender($event)\"\n (cellEdit)=\"onSyncfusionCellEdit($event)\"\n (contextMenuBeforeOpen)=\"onSyncfusionContextMenuBeforeOpen($event)\"\n (contextMenuItemSelect)=\"onSyncfusionContextMenuItemSelect($event)\"\n (actionBegin)=\"onSyncfusionActionBegin($event)\"\n (actionComplete)=\"onSyncfusionActionComplete($event)\"\n (dialogBeforeOpen)=\"onSyncfusionDialogBeforeOpen($event)\">\n </ejs-spreadsheet>\n }\n </div>\n\n @if (totalPages > 1 || totalRecords > pageSize) {\n <div class=\"wuic-sf-pagination\" role=\"navigation\" aria-label=\"Paginazione\">\n <button type=\"button\" class=\"wuic-sf-page-btn\"\n [disabled]=\"pageIndex <= 1\"\n (click)=\"isServerSide ? handleServerPageChange(1, pageSize) : setClientPage(1)\"\n title=\"Prima pagina\">\n <i class=\"pi pi-angle-double-left\"></i>\n </button>\n <button type=\"button\" class=\"wuic-sf-page-btn\"\n [disabled]=\"pageIndex <= 1\"\n (click)=\"isServerSide ? handleServerPageChange(pageIndex - 1, pageSize) : setClientPage(pageIndex - 1)\"\n title=\"Pagina precedente\">\n <i class=\"pi pi-angle-left\"></i>\n </button>\n <span class=\"wuic-sf-page-info\">\n Pagina <strong>{{ pageIndex }}</strong> di <strong>{{ totalPages }}</strong>\n <span class=\"wuic-sf-page-total\">({{ totalRecords }} record)</span>\n </span>\n <button type=\"button\" class=\"wuic-sf-page-btn\"\n [disabled]=\"pageIndex >= totalPages\"\n (click)=\"isServerSide ? handleServerPageChange(pageIndex + 1, pageSize) : setClientPage(pageIndex + 1)\"\n title=\"Pagina successiva\">\n <i class=\"pi pi-angle-right\"></i>\n </button>\n <button type=\"button\" class=\"wuic-sf-page-btn\"\n [disabled]=\"pageIndex >= totalPages\"\n (click)=\"isServerSide ? handleServerPageChange(totalPages, pageSize) : setClientPage(totalPages)\"\n title=\"Ultima pagina\">\n <i class=\"pi pi-angle-double-right\"></i>\n </button>\n <select class=\"wuic-sf-page-size\" [value]=\"pageSize\"\n (change)=\"setPageSize($any($event.target).value)\"\n title=\"Record per pagina\">\n <option [value]=\"10\">10</option>\n <option [value]=\"25\">25</option>\n <option [value]=\"50\">50</option>\n <option [value]=\"100\">100</option>\n </select>\n </div>\n }\n\n</div>\n\n@if (!hardcodedRoute) {\n <wuic-data-source #lookupSource [autoload]=\"true\" [routeFromRouting]=\"false\"\n [route]=\"currentRoute\" [parentRecord]=\"currentRecord\"\n [parentMetaInfo]=\"metaInfo\"></wuic-data-source>\n}\n", styles: [":host{display:block;width:100%;height:100%;min-height:0}.wuic-sf-spreadsheet-wrapper{display:flex;flex-direction:column;width:100%;height:100%;min-height:0;overflow:hidden}.wuic-sf-caption-bar{flex:0 0 auto;padding:5px}.grid-caption-left{display:flex;align-items:stretch;gap:.5rem;flex-wrap:nowrap;min-height:2.25rem;height:2.25rem}.wuic-sf-spreadsheet-host{flex:1 1 auto;min-height:0;width:100%;position:relative;overflow:visible}::ng-deep .e-dialog.e-popup-open,::ng-deep .e-excelfilter,::ng-deep .e-filter-popup{z-index:10010!important;min-width:240px}::ng-deep .e-excelfilter .e-footer-content,::ng-deep .e-filter-popup .e-footer-content{display:flex!important;justify-content:flex-end;gap:6px;padding:8px 12px!important}.wuic-sf-spreadsheet-host ejs-spreadsheet{display:block;width:100%;height:100%}:host ::ng-deep .e-spreadsheet .e-column-header .e-header-cell.wuic-sf-colname-header .e-header-cell-div{font-weight:700!important;text-align:left!important;padding-left:6px!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.wuic-sf-pagination{display:flex;gap:6px;align-items:center;justify-content:flex-end;padding:6px 10px;background-color:var(--wuic-surface-a, #ffffff);border-top:1px solid var(--wuic-surface-border, #e5e7eb);flex:0 0 auto;font-size:13px}.wuic-sf-page-btn{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;padding:0;border:1px solid var(--wuic-surface-border, #e5e7eb);border-radius:4px;background:transparent;cursor:pointer;color:var(--wuic-text-color, #1f2937);transition:background-color .12s ease,border-color .12s ease}.wuic-sf-page-btn:hover:not(:disabled){background-color:var(--wuic-hover-bg, #f3f4f6);border-color:var(--wuic-primary-color, #6366f1)}.wuic-sf-page-btn:disabled{opacity:.35;cursor:not-allowed}.wuic-sf-page-info{margin:0 8px;white-space:nowrap;color:var(--wuic-text-muted, #6b7280)}.wuic-sf-page-info strong{color:var(--wuic-text-color, #1f2937)}.wuic-sf-page-total{margin-left:6px;font-size:12px;color:var(--wuic-text-muted, #6b7280)}.wuic-sf-page-size{margin-left:8px;height:30px;padding:0 8px;border:1px solid var(--wuic-surface-border, #e5e7eb);border-radius:4px;background:transparent;color:var(--wuic-text-color, #1f2937);cursor:pointer}:host-context(.theme-dark) .wuic-sf-pagination,:host-context([data-theme=\"dark\"]) .wuic-sf-pagination{background-color:var(--wuic-surface-a-dark, #1f2937);border-color:var(--wuic-surface-border-dark, #374151)}:host-context(.theme-dark) .wuic-sf-page-btn,:host-context([data-theme=\"dark\"]) .wuic-sf-page-btn,:host-context(.theme-dark) .wuic-sf-page-size,:host-context([data-theme=\"dark\"]) .wuic-sf-page-size{color:#f3f4f6;border-color:var(--wuic-surface-border-dark, #374151)}:host-context(.theme-dark) .wuic-sf-page-btn:hover:not(:disabled),:host-context([data-theme=\"dark\"]) .wuic-sf-page-btn:hover:not(:disabled){background-color:#374151}:host-context(.theme-dark) .wuic-sf-page-info,:host-context([data-theme=\"dark\"]) .wuic-sf-page-info{color:#9ca3af}:host-context(.theme-dark) .wuic-sf-page-info strong,:host-context([data-theme=\"dark\"]) .wuic-sf-page-info strong{color:#f3f4f6}:host-context(.theme-dark) .wuic-sf-page-total,:host-context([data-theme=\"dark\"]) .wuic-sf-page-total{color:#9ca3af}:host ::ng-deep .e-spreadsheet{font-family:var(--wuic-font-family, inherit)}:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-column-header .e-header-cell.wuic-sf-colname-header{background-color:#111827!important;color:#e5e7eb!important}:host ::ng-deep .e-spreadsheet .e-sheet-content .e-filter-btn{opacity:0!important;pointer-events:none!important;width:0!important;height:0!important;min-width:0!important;padding:0!important;margin:0!important;overflow:hidden!important;position:absolute!important;right:0;top:0}:host ::ng-deep .e-spreadsheet .e-column-header .e-header-cell.wuic-sf-colname-header{position:relative!important}:host ::ng-deep .e-spreadsheet .e-column-header .wuic-sf-header-filter-btn{position:absolute;right:2px;top:50%;transform:translateY(-50%);display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;padding:0;background:transparent;border:none;border-radius:3px;cursor:pointer;color:#475569;flex-shrink:0;transition:background-color .12s,color .12s;z-index:2}:host ::ng-deep .e-spreadsheet .e-column-header .wuic-sf-header-filter-btn:hover{background-color:#e2e8f0;color:#1f2937}:host ::ng-deep .e-spreadsheet .e-column-header .wuic-sf-header-filter-btn svg{display:block;pointer-events:none}:host ::ng-deep .e-spreadsheet .e-column-header .wuic-sf-header-filter-btn svg *{pointer-events:none!important}:host ::ng-deep .e-spreadsheet svg,:host ::ng-deep .e-spreadsheet svg *{pointer-events:none!important}:host ::ng-deep .e-spreadsheet .e-column-header .wuic-sf-header-filter-btn.wuic-filtered{color:#2563eb}:host ::ng-deep .e-spreadsheet .e-column-header .wuic-sf-colname-header .e-header-cell-div{padding-right:22px!important}:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-column-header .wuic-sf-header-filter-btn{color:#cbd5e1}:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-column-header .wuic-sf-header-filter-btn:hover{background-color:#334155;color:#f3f4f6}:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-column-header .wuic-sf-header-filter-btn.wuic-filtered{color:#60a5fa}:host ::ng-deep .e-spreadsheet .e-sheet-panel{background-color:var(--wuic-surface-a, #ffffff)}:host-context(.theme-dark) ::ng-deep .e-spreadsheet,:host-context([data-theme=\"dark\"]) ::ng-deep .e-spreadsheet,:host ::ng-deep ejs-spreadsheet.wuic-sf-dark{background-color:var(--wuic-surface-a-dark, #1f2937);color:#f3f4f6}:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-sheet-panel,:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-main-panel{background-color:var(--wuic-surface-a-dark, #1f2937);color:#f3f4f6}:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-cell,:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-header-cell{background-color:var(--wuic-surface-a-dark, #1f2937);border-color:var(--wuic-surface-border-dark, #374151);color:#f3f4f6}:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-header-row .e-header-cell,:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-row-header .e-header-cell{background-color:#111827!important;color:#e5e7eb!important}:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-cell.row-danger{background-color:#7f1d1d!important;color:#fecaca!important}:host ::ng-deep .e-cell.row-danger{background-color:#fee2e2!important}:host ::ng-deep .e-cell.row-warning{background-color:#fef3c7!important}:host ::ng-deep .e-cell.row-success{background-color:#d1fae5!important}::ng-deep .wuic-sf-filter-popup{position:fixed;z-index:99999;min-width:260px;max-width:340px;background:#fff;color:#111827;border:1px solid #d1d5db;border-radius:6px;box-shadow:0 8px 24px #0000002e;font-family:inherit;font-size:13px;display:flex;flex-direction:column;overflow:hidden;-webkit-user-select:none;user-select:none}::ng-deep .wuic-sf-filter-popup-header{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;background:#f3f4f6;border-bottom:1px solid #e5e7eb;font-weight:600}::ng-deep .wuic-sf-filter-popup-title{flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}::ng-deep .wuic-sf-filter-popup-close{background:transparent;border:none;cursor:pointer;font-size:18px;line-height:1;padding:0 4px;color:#6b7280}::ng-deep .wuic-sf-filter-popup-close:hover{color:#111827}::ng-deep .wuic-sf-filter-popup-sort{display:flex;flex-direction:column;border-bottom:1px solid #e5e7eb}::ng-deep .wuic-sf-filter-popup-sort-btn{background:transparent;border:none;text-align:left;padding:6px 12px;cursor:pointer;font-size:13px;color:#111827;display:flex;align-items:center;gap:6px}::ng-deep .wuic-sf-filter-popup-sort-btn:hover{background:#f3f4f6}::ng-deep .wuic-sf-filter-popup-sort-icon{font-size:10px;color:#6b7280}::ng-deep .wuic-sf-filter-popup-clear{border-bottom:1px solid #e5e7eb}::ng-deep .wuic-sf-filter-popup-clear-btn{width:100%;background:transparent;border:none;text-align:left;padding:6px 12px;cursor:pointer;font-size:13px;color:#2563eb}::ng-deep .wuic-sf-filter-popup-clear-btn:hover:not(:disabled){background:#eff6ff}::ng-deep .wuic-sf-filter-popup-clear-btn:disabled{color:#9ca3af;cursor:not-allowed}::ng-deep .wuic-sf-filter-popup-search{padding:8px 12px;border-bottom:1px solid #e5e7eb}::ng-deep .wuic-sf-filter-popup-search-input{width:100%;padding:4px 8px;border:1px solid #d1d5db;border-radius:4px;font-size:13px;outline:none;box-sizing:border-box}::ng-deep .wuic-sf-filter-popup-search-input:focus{border-color:#2563eb;box-shadow:0 0 0 2px #2563eb33}::ng-deep .wuic-sf-filter-popup-list-wrap{display:flex;flex-direction:column;max-height:260px;overflow:hidden}::ng-deep .wuic-sf-filter-popup-selectall{padding:4px 12px;border-bottom:1px solid #e5e7eb;background:#f9fafb;font-weight:500}::ng-deep .wuic-sf-filter-popup-list{flex:1 1 auto;overflow-y:auto;max-height:220px}::ng-deep .wuic-sf-filter-popup-item{display:flex;align-items:center;gap:6px;padding:4px 12px;cursor:pointer}::ng-deep .wuic-sf-filter-popup-item:hover{background:#f3f4f6}::ng-deep .wuic-sf-filter-popup-item input[type=checkbox]{margin:0;flex:0 0 auto}::ng-deep .wuic-sf-filter-popup-item span{flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}::ng-deep .wuic-sf-filter-popup-footer{display:flex;justify-content:flex-end;gap:8px;padding:8px 12px;border-top:1px solid #e5e7eb;background:#f9fafb}::ng-deep .wuic-sf-filter-popup-ok,::ng-deep .wuic-sf-filter-popup-cancel{padding:4px 14px;border:1px solid #d1d5db;border-radius:4px;background:#fff;cursor:pointer;font-size:13px}::ng-deep .wuic-sf-filter-popup-ok{background:#2563eb;color:#fff;border-color:#2563eb}::ng-deep .wuic-sf-filter-popup-ok:hover{background:#1d4ed8}::ng-deep .wuic-sf-filter-popup-cancel:hover{background:#f3f4f6}:host ::ng-deep .wuic-sf-header-filter-btn.wuic-sf-header-filter-btn--active{color:#2563eb}:host ::ng-deep .wuic-sf-header-filter-btn.wuic-sf-header-filter-btn--active svg{fill:#2563eb}::ng-deep .wuic-sf-filter-popup.wuic-sf-filter-popup--dark{background:#1f2937;color:#f3f4f6;border-color:#374151}::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-header,::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-footer,::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-selectall{background:#111827;border-color:#374151}::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-sort,::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-clear,::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-search{border-color:#374151}::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-sort-btn,::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-cancel{color:#f3f4f6;background:transparent;border-color:#374151}::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-cancel{background:#374151}::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-sort-btn:hover,::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-item:hover,::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-cancel:hover{background:#374151}::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-search-input{background:#111827;color:#f3f4f6;border-color:#374151}::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-close{color:#9ca3af}::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-close:hover{color:#f3f4f6}::ng-deep .wuic-sf-cell-editor{box-sizing:border-box;padding:2px 6px;border:2px solid #2563eb;background:#fff;color:#111827;font-family:inherit;font-size:13px;outline:none;box-shadow:0 2px 8px #00000026;border-radius:2px}::ng-deep .wuic-sf-cell-editor:focus{border-color:#1d4ed8;box-shadow:0 0 0 2px #2563eb40}::ng-deep select.wuic-sf-cell-editor{cursor:pointer}::ng-deep .wuic-sf-cell-editor.wuic-sf-cell-editor--dark{background:#1f2937;color:#f3f4f6;border-color:#2563eb}::ng-deep .wuic-sf-cell-editor.wuic-sf-cell-editor--dark option{background:#1f2937;color:#f3f4f6}\n"] }]
|
|
4342
|
+
], template: "<!--\r\n Layout root wrapper:\r\n 1. Toolbar WUIC custom (insert / save batch / export / refresh)\r\n 2. Syncfusion Spreadsheet host\r\n 3. Pagination custom (Syncfusion non ha pagination built-in, quindi la\r\n rendiamo sotto il foglio con nav + page-size dropdown)\r\n 4. Lookup datasource (invisibile, pattern identico al vecchio componente)\r\n-->\r\n\r\n<!-- Bootstrap CSS Syncfusion (~500 KiB): si monta solo quando questo\r\n componente lazy \u00E8 istanziato \u2192 CSS NON nel bundle iniziale globale,\r\n risparmia ~500 KiB su tutte le pagine che non aprono spreadsheet. -->\r\n<wuic-syncfusion-styles-bootstrap></wuic-syncfusion-styles-bootstrap>\r\n\r\n<div class=\"wuic-sf-spreadsheet-wrapper\">\r\n\r\n @if (!hideToolbar && metaInfo) {\r\n <!-- Stile allineato a <wuic-list-grid>: stessa caption-bar, stessi p-button\r\n PrimeNG con icona + label, stesso componente import/export. -->\r\n <div class=\"grid-caption-bar wuic-sf-caption-bar\" role=\"toolbar\" aria-label=\"Spreadsheet toolbar\">\r\n <div class=\"grid-caption-left\">\r\n @if (!metaInfo.tableMetadata.md_hide_refresh) {\r\n <p-button icon=\"pi pi-refresh\" label=\"{{'refresh_grid' | translate}}\"\r\n (onClick)=\"onToolbarRefresh()\" />\r\n }\r\n @if (canInsertRows()) {\r\n <p-button icon=\"pi pi-plus\" label=\"{{'add_grid' | translate}}\"\r\n (onClick)=\"onToolbarInsert()\" />\r\n }\r\n @if (!metaInfo.tableMetadata.md_hide_export_xls) {\r\n <!-- Include dialog con progress bar + bottoni \"Stoppa e salva\r\n parziale\" / \"Stoppa\" / \"Continua in background\". -->\r\n <wuic-import-export-button\r\n [routeName]=\"metaInfo.tableMetadata.md_route_name\"\r\n [tableMetadata]=\"metaInfo.tableMetadata\"\r\n [filterInfoProvider]=\"getCurrentFilterInfoForExport\"></wuic-import-export-button>\r\n }\r\n @if (isBatchSaveEnabled()) {\r\n <p-button icon=\"pi pi-save\" label=\"{{'list_grid.save_changes' | translate}}\"\r\n (onClick)=\"onToolbarSaveBatch()\" />\r\n }\r\n </div>\r\n </div>\r\n }\r\n\r\n <div class=\"wuic-sf-spreadsheet-host\">\r\n @if (metaInfo && sfSheets.length > 0) {\r\n <ejs-spreadsheet #sfSpreadsheet\r\n [sheets]=\"sfSheets\"\r\n [height]=\"sfHeight\"\r\n [width]=\"sfWidth\"\r\n [scrollSettings]=\"sfScrollSettings\"\r\n [showRibbon]=\"showRibbon\"\r\n [showFormulaBar]=\"showFormulaBar\"\r\n [showSheetTabs]=\"false\"\r\n [allowEditing]=\"true\"\r\n [allowSorting]=\"true\"\r\n [allowFiltering]=\"false\"\r\n [allowResizing]=\"true\"\r\n [allowInsert]=\"canInsertRows()\"\r\n [allowDelete]=\"canDeleteRows()\"\r\n [enableContextMenu]=\"true\"\r\n [enableKeyboardNavigation]=\"true\"\r\n [enableClipboard]=\"true\"\r\n (created)=\"onSyncfusionCreated()\"\r\n (dataBound)=\"onSyncfusionDataBound()\"\r\n (cellSave)=\"onSyncfusionCellSave($event)\"\r\n (beforeCellSave)=\"onSyncfusionBeforeCellSave($event)\"\r\n (beforeCellRender)=\"onSyncfusionBeforeCellRender($event)\"\r\n (cellEdit)=\"onSyncfusionCellEdit($event)\"\r\n (contextMenuBeforeOpen)=\"onSyncfusionContextMenuBeforeOpen($event)\"\r\n (contextMenuItemSelect)=\"onSyncfusionContextMenuItemSelect($event)\"\r\n (actionBegin)=\"onSyncfusionActionBegin($event)\"\r\n (actionComplete)=\"onSyncfusionActionComplete($event)\"\r\n (dialogBeforeOpen)=\"onSyncfusionDialogBeforeOpen($event)\">\r\n </ejs-spreadsheet>\r\n }\r\n </div>\r\n\r\n @if (totalPages > 1 || totalRecords > pageSize) {\r\n <div class=\"wuic-sf-pagination\" role=\"navigation\" aria-label=\"Paginazione\">\r\n <button type=\"button\" class=\"wuic-sf-page-btn\"\r\n [disabled]=\"pageIndex <= 1\"\r\n (click)=\"isServerSide ? handleServerPageChange(1, pageSize) : setClientPage(1)\"\r\n title=\"Prima pagina\">\r\n <i class=\"pi pi-angle-double-left\"></i>\r\n </button>\r\n <button type=\"button\" class=\"wuic-sf-page-btn\"\r\n [disabled]=\"pageIndex <= 1\"\r\n (click)=\"isServerSide ? handleServerPageChange(pageIndex - 1, pageSize) : setClientPage(pageIndex - 1)\"\r\n title=\"Pagina precedente\">\r\n <i class=\"pi pi-angle-left\"></i>\r\n </button>\r\n <span class=\"wuic-sf-page-info\">\r\n Pagina <strong>{{ pageIndex }}</strong> di <strong>{{ totalPages }}</strong>\r\n <span class=\"wuic-sf-page-total\">({{ totalRecords }} record)</span>\r\n </span>\r\n <button type=\"button\" class=\"wuic-sf-page-btn\"\r\n [disabled]=\"pageIndex >= totalPages\"\r\n (click)=\"isServerSide ? handleServerPageChange(pageIndex + 1, pageSize) : setClientPage(pageIndex + 1)\"\r\n title=\"Pagina successiva\">\r\n <i class=\"pi pi-angle-right\"></i>\r\n </button>\r\n <button type=\"button\" class=\"wuic-sf-page-btn\"\r\n [disabled]=\"pageIndex >= totalPages\"\r\n (click)=\"isServerSide ? handleServerPageChange(totalPages, pageSize) : setClientPage(totalPages)\"\r\n title=\"Ultima pagina\">\r\n <i class=\"pi pi-angle-double-right\"></i>\r\n </button>\r\n <select class=\"wuic-sf-page-size\" [value]=\"pageSize\"\r\n (change)=\"setPageSize($any($event.target).value)\"\r\n title=\"Record per pagina\">\r\n <option [value]=\"10\">10</option>\r\n <option [value]=\"25\">25</option>\r\n <option [value]=\"50\">50</option>\r\n <option [value]=\"100\">100</option>\r\n </select>\r\n </div>\r\n }\r\n\r\n</div>\r\n\r\n@if (!hardcodedRoute) {\r\n <wuic-data-source #lookupSource [autoload]=\"true\" [routeFromRouting]=\"false\"\r\n [route]=\"currentRoute\" [parentRecord]=\"currentRecord\"\r\n [parentMetaInfo]=\"metaInfo\"></wuic-data-source>\r\n}\r\n", styles: [":host{display:block;width:100%;height:100%;min-height:0}.wuic-sf-spreadsheet-wrapper{display:flex;flex-direction:column;width:100%;height:100%;min-height:0;overflow:hidden}.wuic-sf-caption-bar{flex:0 0 auto;padding:5px}.grid-caption-left{display:flex;align-items:stretch;gap:.5rem;flex-wrap:nowrap;min-height:2.25rem;height:2.25rem}.wuic-sf-spreadsheet-host{flex:1 1 auto;min-height:0;width:100%;position:relative;overflow:visible}::ng-deep .e-dialog.e-popup-open,::ng-deep .e-excelfilter,::ng-deep .e-filter-popup{z-index:10010!important;min-width:240px}::ng-deep .e-excelfilter .e-footer-content,::ng-deep .e-filter-popup .e-footer-content{display:flex!important;justify-content:flex-end;gap:6px;padding:8px 12px!important}.wuic-sf-spreadsheet-host ejs-spreadsheet{display:block;width:100%;height:100%}:host ::ng-deep .e-spreadsheet .e-column-header .e-header-cell.wuic-sf-colname-header .e-header-cell-div{font-weight:700!important;text-align:left!important;padding-left:6px!important;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.wuic-sf-pagination{display:flex;gap:6px;align-items:center;justify-content:flex-end;padding:6px 10px;background-color:var(--wuic-surface-a, #ffffff);border-top:1px solid var(--wuic-surface-border, #e5e7eb);flex:0 0 auto;font-size:13px}.wuic-sf-page-btn{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;padding:0;border:1px solid var(--wuic-surface-border, #e5e7eb);border-radius:4px;background:transparent;cursor:pointer;color:var(--wuic-text-color, #1f2937);transition:background-color .12s ease,border-color .12s ease}.wuic-sf-page-btn:hover:not(:disabled){background-color:var(--wuic-hover-bg, #f3f4f6);border-color:var(--wuic-primary-color, #6366f1)}.wuic-sf-page-btn:disabled{opacity:.35;cursor:not-allowed}.wuic-sf-page-info{margin:0 8px;white-space:nowrap;color:var(--wuic-text-muted, #6b7280)}.wuic-sf-page-info strong{color:var(--wuic-text-color, #1f2937)}.wuic-sf-page-total{margin-left:6px;font-size:12px;color:var(--wuic-text-muted, #6b7280)}.wuic-sf-page-size{margin-left:8px;height:30px;padding:0 8px;border:1px solid var(--wuic-surface-border, #e5e7eb);border-radius:4px;background:transparent;color:var(--wuic-text-color, #1f2937);cursor:pointer}:host-context(.theme-dark) .wuic-sf-pagination,:host-context([data-theme=\"dark\"]) .wuic-sf-pagination{background-color:var(--wuic-surface-a-dark, #1f2937);border-color:var(--wuic-surface-border-dark, #374151)}:host-context(.theme-dark) .wuic-sf-page-btn,:host-context([data-theme=\"dark\"]) .wuic-sf-page-btn,:host-context(.theme-dark) .wuic-sf-page-size,:host-context([data-theme=\"dark\"]) .wuic-sf-page-size{color:#f3f4f6;border-color:var(--wuic-surface-border-dark, #374151)}:host-context(.theme-dark) .wuic-sf-page-btn:hover:not(:disabled),:host-context([data-theme=\"dark\"]) .wuic-sf-page-btn:hover:not(:disabled){background-color:#374151}:host-context(.theme-dark) .wuic-sf-page-info,:host-context([data-theme=\"dark\"]) .wuic-sf-page-info{color:#9ca3af}:host-context(.theme-dark) .wuic-sf-page-info strong,:host-context([data-theme=\"dark\"]) .wuic-sf-page-info strong{color:#f3f4f6}:host-context(.theme-dark) .wuic-sf-page-total,:host-context([data-theme=\"dark\"]) .wuic-sf-page-total{color:#9ca3af}:host ::ng-deep .e-spreadsheet{font-family:var(--wuic-font-family, inherit)}:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-column-header .e-header-cell.wuic-sf-colname-header{background-color:#111827!important;color:#e5e7eb!important}:host ::ng-deep .e-spreadsheet .e-sheet-content .e-filter-btn{opacity:0!important;pointer-events:none!important;width:0!important;height:0!important;min-width:0!important;padding:0!important;margin:0!important;overflow:hidden!important;position:absolute!important;right:0;top:0}:host ::ng-deep .e-spreadsheet .e-column-header .e-header-cell.wuic-sf-colname-header{position:relative!important}:host ::ng-deep .e-spreadsheet .e-column-header .wuic-sf-header-filter-btn{position:absolute;right:2px;top:50%;transform:translateY(-50%);display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;padding:0;background:transparent;border:none;border-radius:3px;cursor:pointer;color:#475569;flex-shrink:0;transition:background-color .12s,color .12s;z-index:2}:host ::ng-deep .e-spreadsheet .e-column-header .wuic-sf-header-filter-btn:hover{background-color:#e2e8f0;color:#1f2937}:host ::ng-deep .e-spreadsheet .e-column-header .wuic-sf-header-filter-btn svg{display:block;pointer-events:none}:host ::ng-deep .e-spreadsheet .e-column-header .wuic-sf-header-filter-btn svg *{pointer-events:none!important}:host ::ng-deep .e-spreadsheet svg,:host ::ng-deep .e-spreadsheet svg *{pointer-events:none!important}:host ::ng-deep .e-spreadsheet .e-column-header .wuic-sf-header-filter-btn.wuic-filtered{color:#2563eb}:host ::ng-deep .e-spreadsheet .e-column-header .wuic-sf-colname-header .e-header-cell-div{padding-right:22px!important}:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-column-header .wuic-sf-header-filter-btn{color:#cbd5e1}:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-column-header .wuic-sf-header-filter-btn:hover{background-color:#334155;color:#f3f4f6}:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-column-header .wuic-sf-header-filter-btn.wuic-filtered{color:#60a5fa}:host ::ng-deep .e-spreadsheet .e-sheet-panel{background-color:var(--wuic-surface-a, #ffffff)}:host-context(.theme-dark) ::ng-deep .e-spreadsheet,:host-context([data-theme=\"dark\"]) ::ng-deep .e-spreadsheet,:host ::ng-deep ejs-spreadsheet.wuic-sf-dark{background-color:var(--wuic-surface-a-dark, #1f2937);color:#f3f4f6}:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-sheet-panel,:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-main-panel{background-color:var(--wuic-surface-a-dark, #1f2937);color:#f3f4f6}:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-cell,:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-header-cell{background-color:var(--wuic-surface-a-dark, #1f2937);border-color:var(--wuic-surface-border-dark, #374151);color:#f3f4f6}:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-header-row .e-header-cell,:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-row-header .e-header-cell{background-color:#111827!important;color:#e5e7eb!important}:host ::ng-deep ejs-spreadsheet.wuic-sf-dark .e-cell.row-danger{background-color:#7f1d1d!important;color:#fecaca!important}:host ::ng-deep .e-cell.row-danger{background-color:#fee2e2!important}:host ::ng-deep .e-cell.row-warning{background-color:#fef3c7!important}:host ::ng-deep .e-cell.row-success{background-color:#d1fae5!important}::ng-deep .wuic-sf-filter-popup{position:fixed;z-index:99999;min-width:260px;max-width:340px;background:#fff;color:#111827;border:1px solid #d1d5db;border-radius:6px;box-shadow:0 8px 24px #0000002e;font-family:inherit;font-size:13px;display:flex;flex-direction:column;overflow:hidden;-webkit-user-select:none;user-select:none}::ng-deep .wuic-sf-filter-popup-header{display:flex;align-items:center;justify-content:space-between;padding:8px 12px;background:#f3f4f6;border-bottom:1px solid #e5e7eb;font-weight:600}::ng-deep .wuic-sf-filter-popup-title{flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}::ng-deep .wuic-sf-filter-popup-close{background:transparent;border:none;cursor:pointer;font-size:18px;line-height:1;padding:0 4px;color:#6b7280}::ng-deep .wuic-sf-filter-popup-close:hover{color:#111827}::ng-deep .wuic-sf-filter-popup-sort{display:flex;flex-direction:column;border-bottom:1px solid #e5e7eb}::ng-deep .wuic-sf-filter-popup-sort-btn{background:transparent;border:none;text-align:left;padding:6px 12px;cursor:pointer;font-size:13px;color:#111827;display:flex;align-items:center;gap:6px}::ng-deep .wuic-sf-filter-popup-sort-btn:hover{background:#f3f4f6}::ng-deep .wuic-sf-filter-popup-sort-icon{font-size:10px;color:#6b7280}::ng-deep .wuic-sf-filter-popup-clear{border-bottom:1px solid #e5e7eb}::ng-deep .wuic-sf-filter-popup-clear-btn{width:100%;background:transparent;border:none;text-align:left;padding:6px 12px;cursor:pointer;font-size:13px;color:#2563eb}::ng-deep .wuic-sf-filter-popup-clear-btn:hover:not(:disabled){background:#eff6ff}::ng-deep .wuic-sf-filter-popup-clear-btn:disabled{color:#9ca3af;cursor:not-allowed}::ng-deep .wuic-sf-filter-popup-search{padding:8px 12px;border-bottom:1px solid #e5e7eb}::ng-deep .wuic-sf-filter-popup-search-input{width:100%;padding:4px 8px;border:1px solid #d1d5db;border-radius:4px;font-size:13px;outline:none;box-sizing:border-box}::ng-deep .wuic-sf-filter-popup-search-input:focus{border-color:#2563eb;box-shadow:0 0 0 2px #2563eb33}::ng-deep .wuic-sf-filter-popup-list-wrap{display:flex;flex-direction:column;max-height:260px;overflow:hidden}::ng-deep .wuic-sf-filter-popup-selectall{padding:4px 12px;border-bottom:1px solid #e5e7eb;background:#f9fafb;font-weight:500}::ng-deep .wuic-sf-filter-popup-list{flex:1 1 auto;overflow-y:auto;max-height:220px}::ng-deep .wuic-sf-filter-popup-item{display:flex;align-items:center;gap:6px;padding:4px 12px;cursor:pointer}::ng-deep .wuic-sf-filter-popup-item:hover{background:#f3f4f6}::ng-deep .wuic-sf-filter-popup-item input[type=checkbox]{margin:0;flex:0 0 auto}::ng-deep .wuic-sf-filter-popup-item span{flex:1 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}::ng-deep .wuic-sf-filter-popup-footer{display:flex;justify-content:flex-end;gap:8px;padding:8px 12px;border-top:1px solid #e5e7eb;background:#f9fafb}::ng-deep .wuic-sf-filter-popup-ok,::ng-deep .wuic-sf-filter-popup-cancel{padding:4px 14px;border:1px solid #d1d5db;border-radius:4px;background:#fff;cursor:pointer;font-size:13px}::ng-deep .wuic-sf-filter-popup-ok{background:#2563eb;color:#fff;border-color:#2563eb}::ng-deep .wuic-sf-filter-popup-ok:hover{background:#1d4ed8}::ng-deep .wuic-sf-filter-popup-cancel:hover{background:#f3f4f6}:host ::ng-deep .wuic-sf-header-filter-btn.wuic-sf-header-filter-btn--active{color:#2563eb}:host ::ng-deep .wuic-sf-header-filter-btn.wuic-sf-header-filter-btn--active svg{fill:#2563eb}::ng-deep .wuic-sf-filter-popup.wuic-sf-filter-popup--dark{background:#1f2937;color:#f3f4f6;border-color:#374151}::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-header,::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-footer,::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-selectall{background:#111827;border-color:#374151}::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-sort,::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-clear,::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-search{border-color:#374151}::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-sort-btn,::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-cancel{color:#f3f4f6;background:transparent;border-color:#374151}::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-cancel{background:#374151}::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-sort-btn:hover,::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-item:hover,::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-cancel:hover{background:#374151}::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-search-input{background:#111827;color:#f3f4f6;border-color:#374151}::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-close{color:#9ca3af}::ng-deep .wuic-sf-filter-popup--dark .wuic-sf-filter-popup-close:hover{color:#f3f4f6}::ng-deep .wuic-sf-cell-editor{box-sizing:border-box;padding:2px 6px;border:2px solid #2563eb;background:#fff;color:#111827;font-family:inherit;font-size:13px;outline:none;box-shadow:0 2px 8px #00000026;border-radius:2px}::ng-deep .wuic-sf-cell-editor:focus{border-color:#1d4ed8;box-shadow:0 0 0 2px #2563eb40}::ng-deep select.wuic-sf-cell-editor{cursor:pointer}::ng-deep .wuic-sf-cell-editor.wuic-sf-cell-editor--dark{background:#1f2937;color:#f3f4f6;border-color:#2563eb}::ng-deep .wuic-sf-cell-editor.wuic-sf-cell-editor--dark option{background:#1f2937;color:#f3f4f6}\n"] }]
|
|
4343
4343
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.Title }, { type: i1$1.ActivatedRoute }, { type: i1$2.HttpClient }, { type: WtoolboxService }, { type: MetadataProviderService }, { type: UserInfoService }], propDecorators: { sfSpreadsheet: [{
|
|
4344
4344
|
type: ViewChild,
|
|
4345
4345
|
args: ['sfSpreadsheet']
|
|
@@ -4394,4 +4394,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
4394
4394
|
}] } });
|
|
4395
4395
|
|
|
4396
4396
|
export { SpreadsheetListSfComponent };
|
|
4397
|
-
//# sourceMappingURL=wuic-framework-lib-spreadsheet-list-sf.component-
|
|
4397
|
+
//# sourceMappingURL=wuic-framework-lib-spreadsheet-list-sf.component-BKtu4edX.mjs.map
|