wuic-framework-lib 1.5.0 → 1.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/{wuic-framework-lib-chart-list.component-0J1ghIrS.mjs → wuic-framework-lib-chart-list.component-Bl424n7x.mjs} +50 -38
- package/fesm2022/{wuic-framework-lib-code-editor.component-C21mvjyr.mjs → wuic-framework-lib-code-editor.component-N6HMl2mf.mjs} +174 -274
- package/fesm2022/{wuic-framework-lib-designer.component-x10ZzUEy.mjs → wuic-framework-lib-designer.component-Bd2fwl6H.mjs} +499 -581
- package/fesm2022/{wuic-framework-lib-first-run-wizard.component-BuSxs_CM.mjs → wuic-framework-lib-first-run-wizard.component-NN6cWVHL.mjs} +22 -24
- package/fesm2022/{wuic-framework-lib-framework-docs.component-xTGLbEnp.mjs → wuic-framework-lib-framework-docs.component-B867JAYe.mjs} +2912 -294
- package/fesm2022/{wuic-framework-lib-pivot-builder.component-BkFFjPm4.mjs → wuic-framework-lib-pivot-builder.component-DWukH0L-.mjs} +580 -68
- package/fesm2022/{wuic-framework-lib-prompt-dialog-fallback-host.component-Bi-TrJB6.mjs → wuic-framework-lib-prompt-dialog-fallback-host.component-DWO1Rcgv.mjs} +2 -2
- package/fesm2022/wuic-framework-lib-report-designer.component-QcrU81m6.mjs +380 -0
- package/fesm2022/wuic-framework-lib-report-scaffold-dialog.component-U-zdOoRV.mjs +431 -0
- package/fesm2022/{wuic-framework-lib-report-viewer.component-BR-BfI2r.mjs → wuic-framework-lib-report-viewer.component-B4LhA3SL.mjs} +8 -13
- package/fesm2022/{wuic-framework-lib-scene3d-designer.component-BQzFxSXP.mjs → wuic-framework-lib-scene3d-designer.component-DjOfzKLo.mjs} +323 -88
- package/fesm2022/{wuic-framework-lib-scene3d-light-baker-gpu-0LjqhSNn.mjs → wuic-framework-lib-scene3d-light-baker-gpu-C96T9uIW.mjs} +2 -2
- package/fesm2022/{wuic-framework-lib-scene3d-shader-effect-CQLWkuh1.mjs → wuic-framework-lib-scene3d-shader-effect-DjHyCAFK.mjs} +612 -32
- package/fesm2022/{wuic-framework-lib-scene3d-viewer.component-imoV3HOs.mjs → wuic-framework-lib-scene3d-viewer.component-Dboz1fjl.mjs} +149 -18
- package/fesm2022/{wuic-framework-lib-scheduler-list.component-xzlTEkoq.mjs → wuic-framework-lib-scheduler-list.component--wY21R3o.mjs} +169 -53
- package/fesm2022/{wuic-framework-lib-spreadsheet-list-sf.component-CrS6fOGj.mjs → wuic-framework-lib-spreadsheet-list-sf.component-Ek30J8v-.mjs} +149 -108
- package/fesm2022/{wuic-framework-lib-stimulsoft-license.service-BIyxB4pO.mjs → wuic-framework-lib-stimulsoft-license.service-CsNNSFYs.mjs} +3 -3
- package/fesm2022/wuic-framework-lib-timeline-list.component-aqCH4P0G.mjs +805 -0
- package/fesm2022/{wuic-framework-lib-workflow-designer.component-5xtQ7-6z.mjs → wuic-framework-lib-workflow-designer.component-DMM8BeXm.mjs} +180 -150
- package/fesm2022/{wuic-framework-lib-wuic-framework-lib-3TZ-j-yL.mjs → wuic-framework-lib-wuic-framework-lib-dfLTqam5.mjs} +6761 -2347
- package/fesm2022/wuic-framework-lib.mjs +1 -1
- package/package.json +4 -2
- package/styles/_wuic-tokens.scss +82 -0
- package/styles/styles.scss +160 -0
- package/types/wuic-framework-lib.d.ts +4264 -2691
- package/fesm2022/wuic-framework-lib-report-designer.component-ZvB46-LV.mjs +0 -194
|
@@ -3,11 +3,11 @@ import { ViewEncapsulation, Component, EventEmitter, HostListener, Output, Input
|
|
|
3
3
|
import { BehaviorSubject } from 'rxjs';
|
|
4
4
|
import * as i4 from 'primeng/button';
|
|
5
5
|
import { ButtonModule } from 'primeng/button';
|
|
6
|
-
import * as
|
|
6
|
+
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-dfLTqam5.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';
|
|
@@ -605,7 +605,7 @@ class SpreadsheetListSfComponent {
|
|
|
605
605
|
this.datasource = new BehaviorSubject(this.hardcodedDatasource);
|
|
606
606
|
this.subscribeToDS();
|
|
607
607
|
}
|
|
608
|
-
else if (this.datasource
|
|
608
|
+
else if (this.datasource?.value) {
|
|
609
609
|
this.subscribeToDS();
|
|
610
610
|
}
|
|
611
611
|
else if (this.datasource) {
|
|
@@ -692,11 +692,15 @@ class SpreadsheetListSfComponent {
|
|
|
692
692
|
const datasourcePageSize = Number(this.datasource?.value?.pageSize);
|
|
693
693
|
const metadataPageSize = Number(this.metaInfo?.tableMetadata?.md_pagesize);
|
|
694
694
|
const fallbackPageSize = Number(this.pageSize || 10);
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
695
|
+
if (Number.isFinite(datasourcePageSize) && datasourcePageSize > 0) {
|
|
696
|
+
this.pageSize = Math.trunc(datasourcePageSize);
|
|
697
|
+
}
|
|
698
|
+
else if (Number.isFinite(metadataPageSize) && metadataPageSize > 0) {
|
|
699
|
+
this.pageSize = Math.trunc(metadataPageSize);
|
|
700
|
+
}
|
|
701
|
+
else {
|
|
702
|
+
this.pageSize = Math.max(1, Math.trunc(fallbackPageSize || 10));
|
|
703
|
+
}
|
|
700
704
|
this.pageIndex = Number(this.datasource?.value?.currentPage || this.pageIndex || 1);
|
|
701
705
|
if (this.datasource?.value) {
|
|
702
706
|
this.datasource.value.pageSize = Math.max(0, Math.trunc(this.pageSize || 0));
|
|
@@ -723,15 +727,14 @@ class SpreadsheetListSfComponent {
|
|
|
723
727
|
parseData(raw, metaInfo) {
|
|
724
728
|
if (!Array.isArray(raw))
|
|
725
729
|
return [];
|
|
726
|
-
const ds = this.datasource?.value;
|
|
727
730
|
return raw.map(row => {
|
|
728
731
|
const plain = {};
|
|
729
732
|
for (const col of metaInfo.columnMetadata || []) {
|
|
730
733
|
const name = col.mc_nome_colonna;
|
|
731
734
|
const value = row?.[name];
|
|
732
|
-
if (value != null && typeof value === 'object' && 'value' in value && typeof value.subscribe === 'function') {
|
|
735
|
+
if (value != null && typeof value === 'object' && 'value' in value && typeof (value).subscribe === 'function') {
|
|
733
736
|
// BehaviorSubject — prendi il .value corrente
|
|
734
|
-
plain[name] = value.value;
|
|
737
|
+
plain[name] = (value).value;
|
|
735
738
|
}
|
|
736
739
|
else {
|
|
737
740
|
plain[name] = value ?? null;
|
|
@@ -742,7 +745,7 @@ class SpreadsheetListSfComponent {
|
|
|
742
745
|
const aliasValue = row?.[aliasField];
|
|
743
746
|
if (aliasValue != null) {
|
|
744
747
|
plain[aliasField] = typeof aliasValue === 'object' && 'value' in aliasValue
|
|
745
|
-
? aliasValue.value
|
|
748
|
+
? (aliasValue).value
|
|
746
749
|
: aliasValue;
|
|
747
750
|
}
|
|
748
751
|
}
|
|
@@ -799,24 +802,33 @@ class SpreadsheetListSfComponent {
|
|
|
799
802
|
if (typeof d === 'boolean')
|
|
800
803
|
return d;
|
|
801
804
|
if (typeof d === 'object' && 'value' in d)
|
|
802
|
-
return !!d.value;
|
|
805
|
+
return !!(d).value;
|
|
803
806
|
return !!d;
|
|
804
807
|
}
|
|
805
808
|
markRecordDeleted(record) {
|
|
806
809
|
if (!record)
|
|
807
810
|
return;
|
|
808
811
|
const cur = record.__deleted;
|
|
809
|
-
if (cur && typeof cur === 'object' && typeof cur.next === 'function') {
|
|
810
|
-
cur.next(true);
|
|
812
|
+
if (cur && typeof cur === 'object' && typeof (cur).next === 'function') {
|
|
813
|
+
(cur).next(true);
|
|
811
814
|
}
|
|
812
815
|
else {
|
|
813
816
|
record.__deleted = new BehaviorSubject(true);
|
|
814
817
|
}
|
|
815
818
|
}
|
|
819
|
+
/**
|
|
820
|
+
* Colonne metadata visibili nella lista: esclude le colonne con
|
|
821
|
+
* `mc_hide_in_list` (parità col vecchio spreadsheet-list). Tutti i
|
|
822
|
+
* mapping indice-sheet ↔ metadata devono usare questo predicato,
|
|
823
|
+
* altrimenti l'index math celle ↔ colonne diverge.
|
|
824
|
+
*/
|
|
825
|
+
getVisibleMetaCols() {
|
|
826
|
+
return (this.metaInfo?.columnMetadata || []).filter(c => !c.mc_hide_in_list);
|
|
827
|
+
}
|
|
816
828
|
rebuildSheetWithData() {
|
|
817
829
|
if (!this.metaInfo)
|
|
818
830
|
return;
|
|
819
|
-
const visibleMetaCols =
|
|
831
|
+
const visibleMetaCols = this.getVisibleMetaCols();
|
|
820
832
|
const sfColumns = visibleMetaCols.map((col) => this.mapColumnWidth(col));
|
|
821
833
|
// Page slicing su effectiveRecords (filtered se filter attivo)
|
|
822
834
|
const source = this.effectiveRecords;
|
|
@@ -902,8 +914,8 @@ class SpreadsheetListSfComponent {
|
|
|
902
914
|
if (value == null)
|
|
903
915
|
return '';
|
|
904
916
|
// Unwrap BehaviorSubject se residuo
|
|
905
|
-
if (typeof value === 'object' && 'value' in value && typeof value.subscribe === 'function') {
|
|
906
|
-
value = value.value;
|
|
917
|
+
if (typeof value === 'object' && 'value' in value && typeof (value).subscribe === 'function') {
|
|
918
|
+
value = (value).value;
|
|
907
919
|
}
|
|
908
920
|
const type = col.mc_ui_column_type;
|
|
909
921
|
const locale = this.resolveLocale();
|
|
@@ -1005,14 +1017,14 @@ class SpreadsheetListSfComponent {
|
|
|
1005
1017
|
if (!value)
|
|
1006
1018
|
return null;
|
|
1007
1019
|
if (value instanceof Date)
|
|
1008
|
-
return isNaN(value.getTime()) ? null : value;
|
|
1020
|
+
return Number.isNaN(Number(value.getTime())) ? null : value;
|
|
1009
1021
|
const str = String(value);
|
|
1010
1022
|
// ISO / anything Date() can parse
|
|
1011
1023
|
const d = new Date(str);
|
|
1012
|
-
if (!isNaN(d.getTime()))
|
|
1024
|
+
if (!Number.isNaN(Number(d.getTime())))
|
|
1013
1025
|
return d;
|
|
1014
1026
|
// Italian format dd/mm/yyyy
|
|
1015
|
-
const m =
|
|
1027
|
+
const m = /^(\d{1,2})\/(\d{1,2})\/(\d{4})(?:\s+(\d{1,2}):(\d{2})(?::(\d{2}))?)?$/.exec(str);
|
|
1016
1028
|
if (m) {
|
|
1017
1029
|
return new Date(Number(m[3]), Number(m[2]) - 1, Number(m[1]), Number(m[4] || 0), Number(m[5] || 0), Number(m[6] || 0));
|
|
1018
1030
|
}
|
|
@@ -1068,14 +1080,14 @@ class SpreadsheetListSfComponent {
|
|
|
1068
1080
|
if (raw == null)
|
|
1069
1081
|
return fallback;
|
|
1070
1082
|
const str = String(raw).trim();
|
|
1071
|
-
const pxMatch =
|
|
1083
|
+
const pxMatch = /^(\d+(?:\.\d+)?)px$/i.exec(str);
|
|
1072
1084
|
if (pxMatch)
|
|
1073
|
-
return Math.max(60, Math.round(parseFloat(pxMatch[1])));
|
|
1074
|
-
const percentMatch =
|
|
1085
|
+
return Math.max(60, Math.round(Number.parseFloat(pxMatch[1])));
|
|
1086
|
+
const percentMatch = /^(\d+(?:\.\d+)?)%$/.exec(str);
|
|
1075
1087
|
if (percentMatch) {
|
|
1076
1088
|
const hostWidth = this.spreadsheet?.nativeElement?.clientWidth || 0;
|
|
1077
1089
|
if (hostWidth > 0) {
|
|
1078
|
-
return Math.max(60, Math.round((parseFloat(percentMatch[1]) / 100) * hostWidth));
|
|
1090
|
+
return Math.max(60, Math.round((Number.parseFloat(percentMatch[1]) / 100) * hostWidth));
|
|
1079
1091
|
}
|
|
1080
1092
|
}
|
|
1081
1093
|
const numeric = Number(str);
|
|
@@ -1192,9 +1204,8 @@ class SpreadsheetListSfComponent {
|
|
|
1192
1204
|
plainRecord['__new'] = record['__new'] || new BehaviorSubject(true);
|
|
1193
1205
|
plainRecord['__guid'] = record['__guid'] || new BehaviorSubject(WtoolboxService.uuidv4());
|
|
1194
1206
|
const baseIndex = Number(targetRow);
|
|
1195
|
-
const
|
|
1196
|
-
|
|
1197
|
-
: this.records.length;
|
|
1207
|
+
const insertPosition = insertBefore ? Math.max(0, Math.trunc(baseIndex)) : Math.max(0, Math.trunc(baseIndex) + 1);
|
|
1208
|
+
const targetIndex = Number.isFinite(baseIndex) ? insertPosition : this.records.length;
|
|
1198
1209
|
const insertIndex = Math.min(Math.max(targetIndex, 0), this.records.length);
|
|
1199
1210
|
// Aggiungi ai records in memoria
|
|
1200
1211
|
this.records.splice(insertIndex, 0, plainRecord);
|
|
@@ -1248,7 +1259,7 @@ class SpreadsheetListSfComponent {
|
|
|
1248
1259
|
continue;
|
|
1249
1260
|
}
|
|
1250
1261
|
const isNew = record?.__new === true
|
|
1251
|
-
|| (record?.__new && typeof record.__new === 'object' && record.__new.value === true);
|
|
1262
|
+
|| (record?.__new && typeof record.__new === 'object' && (record.__new).value === true);
|
|
1252
1263
|
if (!record[this.metaInfo?.pKey?.mc_nome_colonna] || isNew) {
|
|
1253
1264
|
// Riga nuova non ancora salvata sul server → rimozione solo locale,
|
|
1254
1265
|
// niente payload batch.
|
|
@@ -1469,7 +1480,7 @@ class SpreadsheetListSfComponent {
|
|
|
1469
1480
|
return null;
|
|
1470
1481
|
const pKey = this.metaInfo?.pKey?.mc_nome_colonna;
|
|
1471
1482
|
const unwrap = (v) => (v != null && typeof v === 'object' && 'value' in v && typeof v.subscribe === 'function')
|
|
1472
|
-
? v.value
|
|
1483
|
+
? (v).value
|
|
1473
1484
|
: v;
|
|
1474
1485
|
// DELETE batch: payload minimale con solo la chiave primaria e flag
|
|
1475
1486
|
// `_destroy: true` riconosciuto da `MetaService.batchRecord`. Serializzare
|
|
@@ -1524,10 +1535,10 @@ class SpreadsheetListSfComponent {
|
|
|
1524
1535
|
// Esempio "A1:D5" → righe 1-5 in sheet index (1-based, nessun header
|
|
1525
1536
|
// intermedio — l'header è il column-letter row nativo Syncfusion).
|
|
1526
1537
|
// data index 0-based = sheetRow - 1.
|
|
1527
|
-
const match =
|
|
1538
|
+
const match = /^[A-Z]+(\d+):[A-Z]+(\d+)$/i.exec(selectedRange);
|
|
1528
1539
|
if (match) {
|
|
1529
|
-
const startSheetRow = parseInt(match[1], 10);
|
|
1530
|
-
const endSheetRow = parseInt(match[2], 10);
|
|
1540
|
+
const startSheetRow = Number.parseInt(match[1], 10);
|
|
1541
|
+
const endSheetRow = Number.parseInt(match[2], 10);
|
|
1531
1542
|
const startDataIdx = Math.max(0, startSheetRow - 1);
|
|
1532
1543
|
const endDataIdx = Math.max(0, endSheetRow - 1);
|
|
1533
1544
|
const pageOffset = this.isServerSide ? 0 : (this.pageIndex - 1) * this.pageSize;
|
|
@@ -1615,7 +1626,7 @@ class SpreadsheetListSfComponent {
|
|
|
1615
1626
|
if (!this.metaInfo || !this.spreadsheet?.nativeElement)
|
|
1616
1627
|
return;
|
|
1617
1628
|
try {
|
|
1618
|
-
const visibleMetaCols =
|
|
1629
|
+
const visibleMetaCols = this.getVisibleMetaCols();
|
|
1619
1630
|
const headerCells = this.spreadsheet.nativeElement.querySelectorAll('.e-column-header .e-header-cell:not(.e-select-all-cell)');
|
|
1620
1631
|
headerCells.forEach((cell, idx) => {
|
|
1621
1632
|
const col = visibleMetaCols[idx];
|
|
@@ -1648,7 +1659,9 @@ class SpreadsheetListSfComponent {
|
|
|
1648
1659
|
* (nascosto, che sta nella prima cella dati) così si apre il popup distinct.
|
|
1649
1660
|
*/
|
|
1650
1661
|
ensureHeaderFilterButton(headerCell, colIdx, col) {
|
|
1651
|
-
|
|
1662
|
+
// Parità col vecchio spreadsheet-list: funnel solo se mc_show_in_filters
|
|
1663
|
+
// è truthy (false/0/null/undefined → colonna esclusa dal pannello filtri).
|
|
1664
|
+
const allowed = col?.mc_allow_filter !== false && !!col?.mc_show_in_filters;
|
|
1652
1665
|
const existing = headerCell.querySelector('.wuic-sf-header-filter-btn');
|
|
1653
1666
|
if (!allowed) {
|
|
1654
1667
|
// Colonna senza filter → rimuovi eventuale button
|
|
@@ -1964,7 +1977,12 @@ class SpreadsheetListSfComponent {
|
|
|
1964
1977
|
let data = resp;
|
|
1965
1978
|
if (resp && typeof resp === 'object' && 'd' in resp) {
|
|
1966
1979
|
const d = resp.d;
|
|
1967
|
-
|
|
1980
|
+
if (typeof d === 'string') {
|
|
1981
|
+
data = d ? JSON.parse(d) : null;
|
|
1982
|
+
}
|
|
1983
|
+
else {
|
|
1984
|
+
data = d;
|
|
1985
|
+
}
|
|
1968
1986
|
}
|
|
1969
1987
|
const results = data?.results || data?.Results || [];
|
|
1970
1988
|
const distinctMap = new Map();
|
|
@@ -2002,7 +2020,7 @@ class SpreadsheetListSfComponent {
|
|
|
2002
2020
|
return Array.from(distinctMap.values()).sort((a, b) => {
|
|
2003
2021
|
const na = Number(a.display);
|
|
2004
2022
|
const nb = Number(b.display);
|
|
2005
|
-
if (!isNaN(na) && !isNaN(nb) && a.display !== '' && b.display !== '')
|
|
2023
|
+
if (!Number.isNaN(Number(na)) && !Number.isNaN(Number(nb)) && a.display !== '' && b.display !== '')
|
|
2006
2024
|
return na - nb;
|
|
2007
2025
|
return a.display.localeCompare(b.display, this.resolveLocale(), { numeric: true, sensitivity: 'base' });
|
|
2008
2026
|
});
|
|
@@ -2128,11 +2146,11 @@ class SpreadsheetListSfComponent {
|
|
|
2128
2146
|
if (s == null)
|
|
2129
2147
|
return '';
|
|
2130
2148
|
return String(s)
|
|
2131
|
-
.
|
|
2132
|
-
.
|
|
2133
|
-
.
|
|
2134
|
-
.
|
|
2135
|
-
.
|
|
2149
|
+
.replaceAll('&', '&')
|
|
2150
|
+
.replaceAll('<', '<')
|
|
2151
|
+
.replaceAll('>', '>')
|
|
2152
|
+
.replaceAll('"', '"')
|
|
2153
|
+
.replaceAll('\'', ''');
|
|
2136
2154
|
}
|
|
2137
2155
|
/** Observer per ri-sincronizzare i nomi colonna quando Syncfusion redraws l'header. */
|
|
2138
2156
|
colHeaderObserver;
|
|
@@ -2165,7 +2183,7 @@ class SpreadsheetListSfComponent {
|
|
|
2165
2183
|
let i = Math.max(0, Math.trunc(index));
|
|
2166
2184
|
let s = '';
|
|
2167
2185
|
while (true) {
|
|
2168
|
-
s = String.
|
|
2186
|
+
s = String.fromCodePoint(65 + (i % 26)) + s;
|
|
2169
2187
|
if (i < 26)
|
|
2170
2188
|
return s;
|
|
2171
2189
|
i = Math.floor(i / 26) - 1;
|
|
@@ -2192,11 +2210,11 @@ class SpreadsheetListSfComponent {
|
|
|
2192
2210
|
const newValue = args.value;
|
|
2193
2211
|
if (!addr)
|
|
2194
2212
|
return;
|
|
2195
|
-
const cellMatch =
|
|
2213
|
+
const cellMatch = /!([A-Z]+)(\d+)$/i.exec(addr) || /^([A-Z]+)(\d+)$/i.exec(addr);
|
|
2196
2214
|
if (!cellMatch)
|
|
2197
2215
|
return;
|
|
2198
2216
|
const colLetter = cellMatch[1].toUpperCase();
|
|
2199
|
-
const sheetRow = parseInt(cellMatch[2], 10);
|
|
2217
|
+
const sheetRow = Number.parseInt(cellMatch[2], 10);
|
|
2200
2218
|
const colIndex = this.columnLetterToIndex(colLetter);
|
|
2201
2219
|
// Syncfusion usa 1-based sheet rows; il column-letter header è row 0
|
|
2202
2220
|
// del modello ma non è editabile/indirizzabile come cella. La prima
|
|
@@ -2206,10 +2224,17 @@ class SpreadsheetListSfComponent {
|
|
|
2206
2224
|
return;
|
|
2207
2225
|
const pageOffset = this.isServerSide ? 0 : (this.pageIndex - 1) * this.pageSize;
|
|
2208
2226
|
const absoluteRowIndex = pageOffset + dataRowIndex;
|
|
2209
|
-
const visibleMetaCols =
|
|
2227
|
+
const visibleMetaCols = this.getVisibleMetaCols();
|
|
2210
2228
|
const col = visibleMetaCols[colIndex];
|
|
2211
2229
|
if (!col)
|
|
2212
2230
|
return;
|
|
2231
|
+
// mc_hide_in_edit: campo non modificabile. cellEdit è già bloccato, ma
|
|
2232
|
+
// paste/fill Syncfusion arrivano qui senza passare da cellEdit → scarta
|
|
2233
|
+
// il valore e ripristina la cella dal record.
|
|
2234
|
+
if (col.mc_hide_in_edit) {
|
|
2235
|
+
this.rebuildSheetWithData();
|
|
2236
|
+
return;
|
|
2237
|
+
}
|
|
2213
2238
|
const record = this.records[absoluteRowIndex];
|
|
2214
2239
|
if (!record)
|
|
2215
2240
|
return;
|
|
@@ -2311,7 +2336,7 @@ class SpreadsheetListSfComponent {
|
|
|
2311
2336
|
li.addEventListener('click', handler, true);
|
|
2312
2337
|
}
|
|
2313
2338
|
if (anchor) {
|
|
2314
|
-
|
|
2339
|
+
anchor.before(li);
|
|
2315
2340
|
}
|
|
2316
2341
|
else {
|
|
2317
2342
|
ul.appendChild(li);
|
|
@@ -2434,7 +2459,7 @@ class SpreadsheetListSfComponent {
|
|
|
2434
2459
|
const colIdx = args.colIndex;
|
|
2435
2460
|
// Allineamento per tipo colonna: number / date / datetime / time → right,
|
|
2436
2461
|
// altrimenti left. Applicato a tutte le celle dati.
|
|
2437
|
-
const visibleMetaCols =
|
|
2462
|
+
const visibleMetaCols = this.getVisibleMetaCols();
|
|
2438
2463
|
const col = visibleMetaCols[colIdx];
|
|
2439
2464
|
if (col) {
|
|
2440
2465
|
const t = col.mc_ui_column_type;
|
|
@@ -2607,15 +2632,21 @@ class SpreadsheetListSfComponent {
|
|
|
2607
2632
|
const addr = args.address;
|
|
2608
2633
|
if (!addr)
|
|
2609
2634
|
return;
|
|
2610
|
-
const match =
|
|
2635
|
+
const match = /!([A-Z]+)(\d+)$/i.exec(addr) || /^([A-Z]+)(\d+)$/i.exec(addr);
|
|
2611
2636
|
if (!match)
|
|
2612
2637
|
return;
|
|
2613
2638
|
const colIdx = this.columnLetterToIndex(match[1]);
|
|
2614
|
-
const sheetRow = parseInt(match[2], 10);
|
|
2615
|
-
const visibleMetaCols =
|
|
2639
|
+
const sheetRow = Number.parseInt(match[2], 10);
|
|
2640
|
+
const visibleMetaCols = this.getVisibleMetaCols();
|
|
2616
2641
|
const col = visibleMetaCols[colIdx];
|
|
2617
2642
|
if (!col)
|
|
2618
2643
|
return;
|
|
2644
|
+
// mc_hide_in_edit: colonna visibile in lista ma campo escluso dalla
|
|
2645
|
+
// modifica (parità col form di edit) → blocca l'apertura dell'editor.
|
|
2646
|
+
if (col.mc_hide_in_edit) {
|
|
2647
|
+
args.cancel = true;
|
|
2648
|
+
return;
|
|
2649
|
+
}
|
|
2619
2650
|
this.currentField = col;
|
|
2620
2651
|
// Editor custom per tipi non-testo:
|
|
2621
2652
|
// - date / datetime → input HTML5 date/datetime-local (picker nativo)
|
|
@@ -2641,7 +2672,6 @@ class SpreadsheetListSfComponent {
|
|
|
2641
2672
|
if (type === 'lookupByID' && col.mc_ui_lookup_entity_name && col.mc_ui_lookup_dataTextField) {
|
|
2642
2673
|
args.cancel = true;
|
|
2643
2674
|
setTimeout(() => this.openCustomLookupEditor(col, sheetRow, colIdx), 0);
|
|
2644
|
-
return;
|
|
2645
2675
|
}
|
|
2646
2676
|
}
|
|
2647
2677
|
// ============================================================
|
|
@@ -2730,15 +2760,26 @@ class SpreadsheetListSfComponent {
|
|
|
2730
2760
|
const select = document.createElement('select');
|
|
2731
2761
|
select.className = 'wuic-sf-cell-editor wuic-sf-cell-editor--boolean';
|
|
2732
2762
|
const locale = this.resolveLocale();
|
|
2733
|
-
|
|
2734
|
-
|
|
2735
|
-
|
|
2736
|
-
|
|
2737
|
-
|
|
2738
|
-
|
|
2739
|
-
|
|
2740
|
-
|
|
2741
|
-
|
|
2763
|
+
let yesLabel = 'Yes';
|
|
2764
|
+
if (locale.startsWith('it')) {
|
|
2765
|
+
yesLabel = 'Sì';
|
|
2766
|
+
}
|
|
2767
|
+
else if (locale.startsWith('es')) {
|
|
2768
|
+
yesLabel = 'Sí';
|
|
2769
|
+
}
|
|
2770
|
+
else if (locale.startsWith('fr')) {
|
|
2771
|
+
yesLabel = 'Oui';
|
|
2772
|
+
}
|
|
2773
|
+
else if (locale.startsWith('de')) {
|
|
2774
|
+
yesLabel = 'Ja';
|
|
2775
|
+
}
|
|
2776
|
+
let noLabel = 'No';
|
|
2777
|
+
if (locale.startsWith('fr')) {
|
|
2778
|
+
noLabel = 'Non';
|
|
2779
|
+
}
|
|
2780
|
+
else if (locale.startsWith('de')) {
|
|
2781
|
+
noLabel = 'Nein';
|
|
2782
|
+
}
|
|
2742
2783
|
// Blank option per permettere null (nullable boolean)
|
|
2743
2784
|
const blankOpt = document.createElement('option');
|
|
2744
2785
|
blankOpt.value = '';
|
|
@@ -2754,7 +2795,8 @@ class SpreadsheetListSfComponent {
|
|
|
2754
2795
|
select.appendChild(noOpt);
|
|
2755
2796
|
const truthy = rawValue === true || rawValue === 1 || rawValue === '1' || rawValue === 'true' || rawValue === 'True';
|
|
2756
2797
|
const falsy = rawValue === false || rawValue === 0 || rawValue === '0' || rawValue === 'false' || rawValue === 'False';
|
|
2757
|
-
|
|
2798
|
+
const uncheckedValue = falsy ? '0' : '';
|
|
2799
|
+
select.value = truthy ? '1' : uncheckedValue;
|
|
2758
2800
|
inputEl = select;
|
|
2759
2801
|
getValue = () => {
|
|
2760
2802
|
const v = select.value;
|
|
@@ -2941,7 +2983,7 @@ class SpreadsheetListSfComponent {
|
|
|
2941
2983
|
try {
|
|
2942
2984
|
const sf = this.sfSpreadsheet;
|
|
2943
2985
|
const editModule = sf?.editModule;
|
|
2944
|
-
if (editModule
|
|
2986
|
+
if (editModule?.isEdit) {
|
|
2945
2987
|
if (typeof editModule.syncEditModelFromEditor === 'function') {
|
|
2946
2988
|
editModule.syncEditModelFromEditor();
|
|
2947
2989
|
}
|
|
@@ -3210,9 +3252,11 @@ class SpreadsheetListSfComponent {
|
|
|
3210
3252
|
children.forEach((li, i) => {
|
|
3211
3253
|
const active = i === this.cellLookupSelectedIndex;
|
|
3212
3254
|
li.classList.toggle('selected', active);
|
|
3213
|
-
|
|
3214
|
-
|
|
3215
|
-
: '
|
|
3255
|
+
let background = 'transparent';
|
|
3256
|
+
if (active) {
|
|
3257
|
+
background = this.isDarkThemeActive() ? '#374151' : '#e0e7ff';
|
|
3258
|
+
}
|
|
3259
|
+
li.style.background = background;
|
|
3216
3260
|
});
|
|
3217
3261
|
const active = children[this.cellLookupSelectedIndex];
|
|
3218
3262
|
if (active) {
|
|
@@ -3284,16 +3328,16 @@ class SpreadsheetListSfComponent {
|
|
|
3284
3328
|
if (!record || !this.metaInfo?.columnMetadata)
|
|
3285
3329
|
return record;
|
|
3286
3330
|
const wrapped = {
|
|
3287
|
-
__new: new BehaviorSubject(record.__new === true || record.__new?.value === true),
|
|
3331
|
+
__new: new BehaviorSubject(record.__new === true || (record.__new)?.value === true),
|
|
3288
3332
|
__guid: new BehaviorSubject((record.__guid && typeof record.__guid === 'object' && 'value' in record.__guid)
|
|
3289
|
-
? record.__guid.value
|
|
3333
|
+
? (record.__guid).value
|
|
3290
3334
|
: (record.__guid ?? null))
|
|
3291
3335
|
};
|
|
3292
3336
|
for (const col of this.metaInfo.columnMetadata) {
|
|
3293
3337
|
const name = col.mc_nome_colonna;
|
|
3294
3338
|
const raw = record[name];
|
|
3295
|
-
const unwrapped = (raw && typeof raw === 'object' && 'value' in raw && typeof raw.subscribe === 'function')
|
|
3296
|
-
? raw.value
|
|
3339
|
+
const unwrapped = (raw && typeof raw === 'object' && 'value' in raw && typeof (raw).subscribe === 'function')
|
|
3340
|
+
? (raw).value
|
|
3297
3341
|
: raw;
|
|
3298
3342
|
wrapped[name] = new BehaviorSubject(unwrapped ?? null);
|
|
3299
3343
|
// Se è una colonna lookup a multiple_check, replica anche `__lookup_obj`
|
|
@@ -3301,7 +3345,7 @@ class SpreadsheetListSfComponent {
|
|
|
3301
3345
|
const lookupKey = name + '__lookup_obj';
|
|
3302
3346
|
const rawLookup = record[lookupKey];
|
|
3303
3347
|
const unwrappedLookup = (rawLookup && typeof rawLookup === 'object' && 'value' in rawLookup)
|
|
3304
|
-
? rawLookup.value
|
|
3348
|
+
? (rawLookup).value
|
|
3305
3349
|
: (rawLookup ?? []);
|
|
3306
3350
|
wrapped[lookupKey] = new BehaviorSubject(unwrappedLookup);
|
|
3307
3351
|
}
|
|
@@ -3416,10 +3460,10 @@ class SpreadsheetListSfComponent {
|
|
|
3416
3460
|
for (const key of Object.keys(source)) {
|
|
3417
3461
|
const newVal = source[key];
|
|
3418
3462
|
const target = dsRec[key];
|
|
3419
|
-
if (target && typeof target === 'object' && 'next' in target && typeof target.next === 'function') {
|
|
3463
|
+
if (target && typeof target === 'object' && 'next' in target && typeof (target).next === 'function') {
|
|
3420
3464
|
// BehaviorSubject → usa .next() (emette ai subscribers del form flow).
|
|
3421
3465
|
try {
|
|
3422
|
-
target.next(newVal);
|
|
3466
|
+
(target).next(newVal);
|
|
3423
3467
|
}
|
|
3424
3468
|
catch { /* ignore */ }
|
|
3425
3469
|
}
|
|
@@ -3463,8 +3507,8 @@ class SpreadsheetListSfComponent {
|
|
|
3463
3507
|
const out = {};
|
|
3464
3508
|
for (const key of Object.keys(entity)) {
|
|
3465
3509
|
const v = entity[key];
|
|
3466
|
-
if (v && typeof v === 'object' && 'value' in v && typeof v.subscribe === 'function') {
|
|
3467
|
-
out[key] = v.value;
|
|
3510
|
+
if (v && typeof v === 'object' && 'value' in v && typeof (v).subscribe === 'function') {
|
|
3511
|
+
out[key] = (v).value;
|
|
3468
3512
|
}
|
|
3469
3513
|
else {
|
|
3470
3514
|
out[key] = v;
|
|
@@ -3530,12 +3574,12 @@ class SpreadsheetListSfComponent {
|
|
|
3530
3574
|
const out = {};
|
|
3531
3575
|
for (const key of Object.keys(record)) {
|
|
3532
3576
|
const v = record[key];
|
|
3533
|
-
if (v && typeof v === 'object' && 'value' in v && typeof v.next === 'function') {
|
|
3577
|
+
if (v && typeof v === 'object' && 'value' in v && typeof (v).next === 'function') {
|
|
3534
3578
|
// BehaviorSubject-like: capture current value
|
|
3535
|
-
out[key] = v.value;
|
|
3579
|
+
out[key] = (v).value;
|
|
3536
3580
|
}
|
|
3537
3581
|
else if (v instanceof Date) {
|
|
3538
|
-
out[key] = new Date(v
|
|
3582
|
+
out[key] = new Date(v);
|
|
3539
3583
|
}
|
|
3540
3584
|
else if (Array.isArray(v)) {
|
|
3541
3585
|
out[key] = v.slice();
|
|
@@ -3586,7 +3630,7 @@ class SpreadsheetListSfComponent {
|
|
|
3586
3630
|
// parseFloat(280) = 280. Number("280px") invece ritorna NaN → bug
|
|
3587
3631
|
// storico che faceva finire "NaNpx" nei metadata e perdeva il resize
|
|
3588
3632
|
// al primo paging/refresh.
|
|
3589
|
-
const newWidth = parseFloat(String(args.eventArgs.width));
|
|
3633
|
+
const newWidth = Number.parseFloat(String(args.eventArgs.width));
|
|
3590
3634
|
if (Number.isFinite(newWidth) && newWidth > 0) {
|
|
3591
3635
|
this.persistColumnWidth(colIdx, newWidth);
|
|
3592
3636
|
}
|
|
@@ -3620,19 +3664,19 @@ class SpreadsheetListSfComponent {
|
|
|
3620
3664
|
const nested = args?.args?.eventArgs || args?.args || args?.eventArgs || {};
|
|
3621
3665
|
const sortOptions = nested?.sortOptions || args?.args?.sortOptions || {};
|
|
3622
3666
|
const sortDescriptor = sortOptions?.sortDescriptors || {};
|
|
3623
|
-
const field = sortDescriptor?.field;
|
|
3624
|
-
const order = sortDescriptor?.order || 'Ascending';
|
|
3667
|
+
const field = (sortDescriptor)?.field;
|
|
3668
|
+
const order = (sortDescriptor)?.order || 'Ascending';
|
|
3625
3669
|
const range = nested?.range || args?.args?.range;
|
|
3626
3670
|
let resolvedField = field;
|
|
3627
3671
|
if (!resolvedField && typeof range === 'string') {
|
|
3628
|
-
const m =
|
|
3672
|
+
const m = /^([A-Z]+)\d+/i.exec(range);
|
|
3629
3673
|
if (m)
|
|
3630
3674
|
resolvedField = m[1];
|
|
3631
3675
|
}
|
|
3632
3676
|
// Marca range come "contiene header" per sopprimere l'alert "expand range"
|
|
3633
3677
|
// di Syncfusion (che tenta di aprire un dialog che crasha).
|
|
3634
3678
|
if (sortOptions)
|
|
3635
|
-
sortOptions.containsHeader = true;
|
|
3679
|
+
(sortOptions).containsHeader = true;
|
|
3636
3680
|
// Memorizza la richiesta di sort — verrà ri-applicata sui records
|
|
3637
3681
|
// INTERI dopo che Syncfusion ha completato il suo sort (che tocca
|
|
3638
3682
|
// solo i 10 visibili, ma non è un problema perché noi riscriviamo
|
|
@@ -3710,14 +3754,13 @@ class SpreadsheetListSfComponent {
|
|
|
3710
3754
|
return;
|
|
3711
3755
|
// Mappa lettera colonna sheet → MetadatiColonna visibile
|
|
3712
3756
|
const sheetColIdx = this.columnLetterToIndex(sheetColLetter);
|
|
3713
|
-
const visibleMetaCols =
|
|
3757
|
+
const visibleMetaCols = this.getVisibleMetaCols();
|
|
3714
3758
|
const col = visibleMetaCols[sheetColIdx];
|
|
3715
3759
|
if (!col)
|
|
3716
3760
|
return;
|
|
3717
3761
|
const fieldName = col.mc_nome_colonna;
|
|
3718
|
-
const
|
|
3719
|
-
|
|
3720
|
-
: 'none';
|
|
3762
|
+
const descOrNone = order === 'Descending' ? 'desc' : 'none';
|
|
3763
|
+
const dir = order === 'Ascending' ? 'asc' : descOrNone;
|
|
3721
3764
|
if (this.isServerSide) {
|
|
3722
3765
|
// Delega al datasource: il WUIC backend legge `ds.sortInfo: SortInfo[]`
|
|
3723
3766
|
// e applica ORDER BY nel SELECT generato da BuildDynamicSelectQuery.
|
|
@@ -3747,8 +3790,8 @@ class SpreadsheetListSfComponent {
|
|
|
3747
3790
|
const av = a?.[fieldName];
|
|
3748
3791
|
const bv = b?.[fieldName];
|
|
3749
3792
|
// Unwrap BehaviorSubject
|
|
3750
|
-
const aUnwrapped = (av && typeof av === 'object' && 'value' in av) ? av.value : av;
|
|
3751
|
-
const bUnwrapped = (bv && typeof bv === 'object' && 'value' in bv) ? bv.value : bv;
|
|
3793
|
+
const aUnwrapped = (av && typeof av === 'object' && 'value' in av) ? (av).value : av;
|
|
3794
|
+
const bUnwrapped = (bv && typeof bv === 'object' && 'value' in bv) ? (bv).value : bv;
|
|
3752
3795
|
// null/undefined vanno in fondo
|
|
3753
3796
|
if (aUnwrapped == null && bUnwrapped == null)
|
|
3754
3797
|
return 0;
|
|
@@ -3760,7 +3803,7 @@ class SpreadsheetListSfComponent {
|
|
|
3760
3803
|
const aNum = Number(aUnwrapped);
|
|
3761
3804
|
const bNum = Number(bUnwrapped);
|
|
3762
3805
|
let cmp = 0;
|
|
3763
|
-
if (!isNaN(aNum) && !isNaN(bNum) && `${aUnwrapped}`.trim() !== '' && `${bUnwrapped}`.trim() !== '') {
|
|
3806
|
+
if (!Number.isNaN(Number(aNum)) && !Number.isNaN(Number(bNum)) && `${aUnwrapped}`.trim() !== '' && `${bUnwrapped}`.trim() !== '') {
|
|
3764
3807
|
cmp = aNum - bNum;
|
|
3765
3808
|
}
|
|
3766
3809
|
else {
|
|
@@ -3779,7 +3822,7 @@ class SpreadsheetListSfComponent {
|
|
|
3779
3822
|
persistColumnWidth(sfColIdx, newWidth) {
|
|
3780
3823
|
if (!this.metaInfo?.columnMetadata)
|
|
3781
3824
|
return;
|
|
3782
|
-
const visibleMetaCols = this.
|
|
3825
|
+
const visibleMetaCols = this.getVisibleMetaCols();
|
|
3783
3826
|
const col = visibleMetaCols[sfColIdx];
|
|
3784
3827
|
if (!col)
|
|
3785
3828
|
return;
|
|
@@ -3858,7 +3901,7 @@ class SpreadsheetListSfComponent {
|
|
|
3858
3901
|
const colIdx = args?.filterIndex?.colIndex ?? args?.colIndex;
|
|
3859
3902
|
if (colIdx == null)
|
|
3860
3903
|
return;
|
|
3861
|
-
const visibleMetaCols = this.
|
|
3904
|
+
const visibleMetaCols = this.getVisibleMetaCols();
|
|
3862
3905
|
const col = visibleMetaCols[colIdx];
|
|
3863
3906
|
if (!col || col.mc_ui_column_type !== 'lookupByID')
|
|
3864
3907
|
return;
|
|
@@ -3906,7 +3949,7 @@ class SpreadsheetListSfComponent {
|
|
|
3906
3949
|
let idx = 0;
|
|
3907
3950
|
const upper = letter.toUpperCase();
|
|
3908
3951
|
for (let i = 0; i < upper.length; i++) {
|
|
3909
|
-
idx = idx * 26 + (upper.
|
|
3952
|
+
idx = idx * 26 + (upper.codePointAt(i) - 64);
|
|
3910
3953
|
}
|
|
3911
3954
|
return idx - 1;
|
|
3912
3955
|
}
|
|
@@ -3957,7 +4000,7 @@ class SpreadsheetListSfComponent {
|
|
|
3957
4000
|
}
|
|
3958
4001
|
scheduleLayoutPass() {
|
|
3959
4002
|
this.clearPendingLayoutPassTimeouts();
|
|
3960
|
-
const handle =
|
|
4003
|
+
const handle = globalThis.setTimeout(() => {
|
|
3961
4004
|
try {
|
|
3962
4005
|
this.sfSpreadsheet?.resize?.();
|
|
3963
4006
|
}
|
|
@@ -3968,7 +4011,7 @@ class SpreadsheetListSfComponent {
|
|
|
3968
4011
|
this.pendingLayoutPassTimeouts.push(handle);
|
|
3969
4012
|
}
|
|
3970
4013
|
clearPendingLayoutPassTimeouts() {
|
|
3971
|
-
this.pendingLayoutPassTimeouts.forEach(id =>
|
|
4014
|
+
this.pendingLayoutPassTimeouts.forEach(id => globalThis.clearTimeout(id));
|
|
3972
4015
|
this.pendingLayoutPassTimeouts = [];
|
|
3973
4016
|
}
|
|
3974
4017
|
onWindowResize() {
|
|
@@ -3999,18 +4042,14 @@ class SpreadsheetListSfComponent {
|
|
|
3999
4042
|
* Indice 0-based; il caller mappa a column letter A/B/C tramite indexToColumnLetter().
|
|
4000
4043
|
*/
|
|
4001
4044
|
getVisibleColumnNames() {
|
|
4002
|
-
|
|
4003
|
-
return [];
|
|
4004
|
-
return this.metaInfo.columnMetadata
|
|
4005
|
-
.filter(c => !c.mc_hide_in_edit)
|
|
4006
|
-
.map(c => c.mc_nome_colonna || '');
|
|
4045
|
+
return this.getVisibleMetaCols().map(c => c.mc_nome_colonna || '');
|
|
4007
4046
|
}
|
|
4008
4047
|
/** Converte indice 0-based in letter A1-notation (0 → 'A', 25 → 'Z', 26 → 'AA'). */
|
|
4009
4048
|
indexToColumnLetter(idx) {
|
|
4010
4049
|
let s = '';
|
|
4011
4050
|
let n = idx;
|
|
4012
4051
|
while (n >= 0) {
|
|
4013
|
-
s = String.
|
|
4052
|
+
s = String.fromCodePoint(65 + (n % 26)) + s;
|
|
4014
4053
|
n = Math.floor(n / 26) - 1;
|
|
4015
4054
|
}
|
|
4016
4055
|
return s;
|
|
@@ -4058,7 +4097,7 @@ class SpreadsheetListSfComponent {
|
|
|
4058
4097
|
for (let r = 0; r < rowCount; r++) {
|
|
4059
4098
|
const sheetRow = rowOffset + r;
|
|
4060
4099
|
// Sostituisci tutti i token {colName} con <colLetter><rowNumber>
|
|
4061
|
-
const resolved = formulaTemplate.
|
|
4100
|
+
const resolved = (formulaTemplate).replaceAll(/\{([a-zA-Z_]\w*)\}/g, (_m, colName) => {
|
|
4062
4101
|
const letter = colIndex[colName];
|
|
4063
4102
|
if (!letter) {
|
|
4064
4103
|
console.warn(`[wuic-spreadsheet] formula token {${colName}} → column not visible, leaving as-is`);
|
|
@@ -4095,6 +4134,10 @@ class SpreadsheetListSfComponent {
|
|
|
4095
4134
|
|| this.metaInfo?.tableMetadata?.mdpropsbag
|
|
4096
4135
|
|| {};
|
|
4097
4136
|
const arch = pb?.archetypes?.spreadsheet?.lock || {};
|
|
4137
|
+
const fallbackScopeFields = arch.primaryScopeField ? [arch.primaryScopeField] : [];
|
|
4138
|
+
const archHeartbeatSec = typeof arch.heartbeatIntervalSec === 'number' && arch.heartbeatIntervalSec > 0
|
|
4139
|
+
? arch.heartbeatIntervalSec
|
|
4140
|
+
: 60;
|
|
4098
4141
|
return {
|
|
4099
4142
|
endpointBase: typeof arch.endpointBase === 'string' && arch.endpointBase.length > 0
|
|
4100
4143
|
? arch.endpointBase
|
|
@@ -4104,13 +4147,11 @@ class SpreadsheetListSfComponent {
|
|
|
4104
4147
|
: null,
|
|
4105
4148
|
requiredScopeFields: Array.isArray(arch.requiredScopeFields)
|
|
4106
4149
|
? arch.requiredScopeFields.filter((s) => typeof s === 'string')
|
|
4107
|
-
:
|
|
4150
|
+
: fallbackScopeFields,
|
|
4108
4151
|
autoEnableOnScope: arch.autoEnableOnScope === true,
|
|
4109
4152
|
heartbeatIntervalSec: typeof this.heartbeatIntervalSec === 'number' && this.heartbeatIntervalSec > 0
|
|
4110
4153
|
? this.heartbeatIntervalSec
|
|
4111
|
-
:
|
|
4112
|
-
? arch.heartbeatIntervalSec
|
|
4113
|
-
: 60),
|
|
4154
|
+
: archHeartbeatSec,
|
|
4114
4155
|
};
|
|
4115
4156
|
}
|
|
4116
4157
|
/**
|
|
@@ -4287,7 +4328,7 @@ class SpreadsheetListSfComponent {
|
|
|
4287
4328
|
}
|
|
4288
4329
|
}
|
|
4289
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 });
|
|
4290
|
-
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: i2.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: "<!--\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" }] });
|
|
4291
4332
|
}
|
|
4292
4333
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImport: i0, type: SpreadsheetListSfComponent, decorators: [{
|
|
4293
4334
|
type: Component,
|
|
@@ -4353,4 +4394,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.9", ngImpor
|
|
|
4353
4394
|
}] } });
|
|
4354
4395
|
|
|
4355
4396
|
export { SpreadsheetListSfComponent };
|
|
4356
|
-
//# sourceMappingURL=wuic-framework-lib-spreadsheet-list-sf.component-
|
|
4397
|
+
//# sourceMappingURL=wuic-framework-lib-spreadsheet-list-sf.component-Ek30J8v-.mjs.map
|