ngx-dsxlibrary 2.21.29 → 2.21.30
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/ngx-dsxlibrary-src-lib-components.mjs +333 -32
- package/fesm2022/ngx-dsxlibrary-src-lib-components.mjs.map +1 -1
- package/fesm2022/ngx-dsxlibrary.mjs +413 -71
- package/fesm2022/ngx-dsxlibrary.mjs.map +1 -1
- package/ngx-dsxlibrary-2.21.30.tgz +0 -0
- package/package.json +1 -1
- package/types/ngx-dsxlibrary-src-lib-components.d.ts +43 -1
- package/types/ngx-dsxlibrary.d.ts +66 -2
- package/ngx-dsxlibrary-2.21.29.tgz +0 -0
|
@@ -1,14 +1,16 @@
|
|
|
1
|
-
import
|
|
1
|
+
import * as i1$1 from '@angular/common';
|
|
2
|
+
import { DecimalPipe, CommonModule } from '@angular/common';
|
|
2
3
|
import * as i0 from '@angular/core';
|
|
3
|
-
import { Input, Component, forwardRef, viewChild, input, signal,
|
|
4
|
+
import { Input, Component, forwardRef, viewChild, input, signal, EventEmitter, effect, Output, model } from '@angular/core';
|
|
4
5
|
import * as i1 from 'primeng/tag';
|
|
5
6
|
import { TagModule } from 'primeng/tag';
|
|
6
7
|
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
7
8
|
import { FileUpload } from 'primeng/fileupload';
|
|
8
|
-
import * as
|
|
9
|
+
import * as i2 from 'primeng/tree';
|
|
9
10
|
import { TreeModule } from 'primeng/tree';
|
|
11
|
+
import * as i3 from 'primeng/api';
|
|
10
12
|
import { CountUpDirective } from 'ngx-countup';
|
|
11
|
-
import * as i2 from 'primeng/avatar';
|
|
13
|
+
import * as i2$1 from 'primeng/avatar';
|
|
12
14
|
import { AvatarModule } from 'primeng/avatar';
|
|
13
15
|
import * as i1$2 from 'primeng/dialog';
|
|
14
16
|
import { DialogModule } from 'primeng/dialog';
|
|
@@ -198,28 +200,39 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.11", ngImpo
|
|
|
198
200
|
|
|
199
201
|
class JsonViewerComponent {
|
|
200
202
|
data = input(null, ...(ngDevMode ? [{ debugName: "data" }] : /* istanbul ignore next */ []));
|
|
203
|
+
mode = input('view', ...(ngDevMode ? [{ debugName: "mode" }] : /* istanbul ignore next */ []));
|
|
204
|
+
textKey = input('Texto', ...(ngDevMode ? [{ debugName: "textKey" }] : /* istanbul ignore next */ []));
|
|
205
|
+
activeKey = input('Activo', ...(ngDevMode ? [{ debugName: "activeKey" }] : /* istanbul ignore next */ []));
|
|
206
|
+
itemsKey = input('Items', ...(ngDevMode ? [{ debugName: "itemsKey" }] : /* istanbul ignore next */ []));
|
|
207
|
+
showStatusAsSymbol = input(true, ...(ngDevMode ? [{ debugName: "showStatusAsSymbol" }] : /* istanbul ignore next */ []));
|
|
208
|
+
valueChange = new EventEmitter();
|
|
201
209
|
nodes = [];
|
|
202
210
|
selectedNode = null;
|
|
211
|
+
disabled = false;
|
|
203
212
|
controlValue = null;
|
|
213
|
+
normalizedValue = {};
|
|
214
|
+
maxNormalizationDepth = 20;
|
|
215
|
+
onChange = () => undefined;
|
|
216
|
+
onTouched = () => undefined;
|
|
204
217
|
constructor() {
|
|
205
218
|
effect(() => {
|
|
206
219
|
if (this.controlValue === null || this.controlValue === undefined) {
|
|
207
|
-
this.updateNodes(this.data());
|
|
220
|
+
this.updateNodes(this.data(), false);
|
|
208
221
|
}
|
|
209
222
|
});
|
|
210
223
|
}
|
|
211
224
|
writeValue(value) {
|
|
212
225
|
this.controlValue = value;
|
|
213
|
-
this.updateNodes(value);
|
|
226
|
+
this.updateNodes(value, false);
|
|
214
227
|
}
|
|
215
228
|
registerOnChange(fn) {
|
|
216
|
-
|
|
229
|
+
this.onChange = fn;
|
|
217
230
|
}
|
|
218
231
|
registerOnTouched(fn) {
|
|
219
|
-
|
|
232
|
+
this.onTouched = fn;
|
|
220
233
|
}
|
|
221
234
|
setDisabledState(isDisabled) {
|
|
222
|
-
|
|
235
|
+
this.disabled = isDisabled;
|
|
223
236
|
}
|
|
224
237
|
onNodeSelect(event) {
|
|
225
238
|
const node = event?.node;
|
|
@@ -229,57 +242,225 @@ class JsonViewerComponent {
|
|
|
229
242
|
this.selectedNode = null;
|
|
230
243
|
this.nodes = [...this.nodes];
|
|
231
244
|
}
|
|
232
|
-
|
|
233
|
-
|
|
245
|
+
isEditMode() {
|
|
246
|
+
const modeValue = this.mode();
|
|
247
|
+
const editEnabled = typeof modeValue === 'boolean' ? modeValue : modeValue === 'edit';
|
|
248
|
+
return editEnabled && !this.disabled;
|
|
249
|
+
}
|
|
250
|
+
getNodeMeta(node) {
|
|
251
|
+
const nodeData = node.data;
|
|
252
|
+
if (!nodeData || typeof nodeData !== 'object')
|
|
253
|
+
return null;
|
|
254
|
+
const kind = nodeData.kind;
|
|
255
|
+
if (!kind)
|
|
256
|
+
return null;
|
|
257
|
+
return nodeData;
|
|
258
|
+
}
|
|
259
|
+
onTextEdit(path, value, nodeMeta) {
|
|
260
|
+
if (!this.isEditMode())
|
|
261
|
+
return;
|
|
262
|
+
this.setValueAtPath(path, value);
|
|
263
|
+
// Actualiza solo el meta del nodo para reflejar el cambio sin reconstruir el árbol.
|
|
264
|
+
if (nodeMeta.kind === 'compact-item') {
|
|
265
|
+
nodeMeta.text = value;
|
|
266
|
+
}
|
|
267
|
+
else if (nodeMeta.kind === 'text-primitive') {
|
|
268
|
+
nodeMeta.value = value;
|
|
269
|
+
}
|
|
270
|
+
this.emitCurrentValue();
|
|
271
|
+
}
|
|
272
|
+
onTextBlur() {
|
|
273
|
+
this.onTouched();
|
|
274
|
+
}
|
|
275
|
+
onActiveToggle(path, checked, nodeMeta) {
|
|
276
|
+
if (!this.isEditMode())
|
|
277
|
+
return;
|
|
278
|
+
this.setValueAtPath(path, checked);
|
|
279
|
+
// Actualiza el meta del nodo y recalcula el visual del símbolo.
|
|
280
|
+
nodeMeta.activeBoolean = checked;
|
|
281
|
+
nodeMeta.activeVisual = checked
|
|
282
|
+
? this.showStatusAsSymbol()
|
|
283
|
+
? '✓'
|
|
284
|
+
: 'true'
|
|
285
|
+
: this.showStatusAsSymbol()
|
|
286
|
+
? '✗'
|
|
287
|
+
: 'false';
|
|
288
|
+
// Fuerza detección de cambio en el array sin reconstruir el árbol.
|
|
289
|
+
this.nodes = [...this.nodes];
|
|
290
|
+
this.emitCurrentValue();
|
|
291
|
+
this.onTouched();
|
|
292
|
+
}
|
|
293
|
+
updateNodes(value, emit) {
|
|
294
|
+
this.normalizedValue = this.parseIfNeeded(value);
|
|
295
|
+
this.nodes = this.buildTree(this.normalizedValue);
|
|
296
|
+
if (emit) {
|
|
297
|
+
this.emitCurrentValue();
|
|
298
|
+
}
|
|
234
299
|
}
|
|
235
300
|
parseIfNeeded(data) {
|
|
236
|
-
if (
|
|
301
|
+
if (data === null || data === undefined || data === '')
|
|
237
302
|
return {};
|
|
303
|
+
return this.normalizeData(data, 0);
|
|
304
|
+
}
|
|
305
|
+
normalizeData(data, depth) {
|
|
306
|
+
if (depth > this.maxNormalizationDepth)
|
|
307
|
+
return data;
|
|
238
308
|
if (typeof data === 'string') {
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
catch {
|
|
243
|
-
return {};
|
|
309
|
+
const parsed = this.tryParseJsonString(data);
|
|
310
|
+
if (parsed.parsed) {
|
|
311
|
+
return this.normalizeData(parsed.value, depth + 1);
|
|
244
312
|
}
|
|
313
|
+
return data;
|
|
314
|
+
}
|
|
315
|
+
if (Array.isArray(data)) {
|
|
316
|
+
return data.map((item) => this.normalizeData(item, depth + 1));
|
|
317
|
+
}
|
|
318
|
+
if (typeof data === 'object' && data !== null) {
|
|
319
|
+
return Object.entries(data).reduce((acc, [key, value]) => {
|
|
320
|
+
acc[key] = this.normalizeData(value, depth + 1);
|
|
321
|
+
return acc;
|
|
322
|
+
}, {});
|
|
245
323
|
}
|
|
246
324
|
return data;
|
|
247
325
|
}
|
|
248
|
-
|
|
326
|
+
tryParseJsonString(value) {
|
|
327
|
+
const trimmed = value.trim();
|
|
328
|
+
// Solo intentamos parsear si parece JSON para evitar costo innecesario
|
|
329
|
+
// en strings de texto común.
|
|
330
|
+
const looksLikeJson = (trimmed.startsWith('{') && trimmed.endsWith('}')) ||
|
|
331
|
+
(trimmed.startsWith('[') && trimmed.endsWith(']'));
|
|
332
|
+
if (!looksLikeJson) {
|
|
333
|
+
return { parsed: false, value };
|
|
334
|
+
}
|
|
335
|
+
try {
|
|
336
|
+
return { parsed: true, value: JSON.parse(trimmed) };
|
|
337
|
+
}
|
|
338
|
+
catch {
|
|
339
|
+
return { parsed: false, value };
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
buildTree(data, parentKey = '0', path = []) {
|
|
249
343
|
if (Array.isArray(data)) {
|
|
250
344
|
return data.map((item, index) => {
|
|
251
345
|
const key = `${parentKey}-${index}`;
|
|
346
|
+
const itemPath = [...path, index];
|
|
347
|
+
const compactItem = this.toCompactTextAndActive(item, itemPath, `[${String(index).padStart(2, '0')}]`);
|
|
348
|
+
if (compactItem) {
|
|
349
|
+
return {
|
|
350
|
+
key,
|
|
351
|
+
label: `${compactItem.indexLabel} Texto: ${compactItem.text} | ${compactItem.activeVisual}`,
|
|
352
|
+
icon: 'pi pi-file',
|
|
353
|
+
data: compactItem,
|
|
354
|
+
};
|
|
355
|
+
}
|
|
252
356
|
if (this.isComplex(item)) {
|
|
253
357
|
return {
|
|
254
358
|
key,
|
|
255
359
|
label: `[${index}]`,
|
|
256
|
-
|
|
257
|
-
children: this.buildTree(item, key),
|
|
360
|
+
icon: this.getIcon(item),
|
|
361
|
+
children: this.buildTree(item, key, itemPath),
|
|
258
362
|
};
|
|
259
363
|
}
|
|
260
364
|
return {
|
|
261
365
|
key,
|
|
262
366
|
label: `[${index}]: ${this.formatPrimitive(item)}`,
|
|
263
|
-
|
|
367
|
+
icon: 'pi pi-file',
|
|
264
368
|
};
|
|
265
369
|
});
|
|
266
370
|
}
|
|
267
371
|
if (typeof data === 'object' && data !== null) {
|
|
268
|
-
|
|
269
|
-
|
|
372
|
+
const objectData = data;
|
|
373
|
+
return Object.keys(objectData).flatMap((key, index) => {
|
|
374
|
+
const value = objectData[key];
|
|
270
375
|
const nodeKey = `${parentKey}-${index}`;
|
|
376
|
+
const childPath = [...path, key];
|
|
377
|
+
const activeKeyName = this.activeKey();
|
|
378
|
+
const itemsKeyName = this.itemsKey();
|
|
379
|
+
const textKeyName = this.textKey();
|
|
380
|
+
if (key === itemsKeyName && Array.isArray(value)) {
|
|
381
|
+
return this.buildTree(value, nodeKey, childPath);
|
|
382
|
+
}
|
|
383
|
+
if (this.isItemsContainer(value)) {
|
|
384
|
+
const container = value;
|
|
385
|
+
const hasActive = Object.prototype.hasOwnProperty.call(container, activeKeyName);
|
|
386
|
+
const label = hasActive
|
|
387
|
+
? `${key} | ${this.formatActiveSymbol(container[activeKeyName])}`
|
|
388
|
+
: key;
|
|
389
|
+
const itemsChildren = this.buildTree(container[itemsKeyName], `${nodeKey}-0`, [...childPath, itemsKeyName]);
|
|
390
|
+
const additionalChildren = Object.keys(container)
|
|
391
|
+
.filter((childKey) => childKey !== itemsKeyName && childKey !== activeKeyName)
|
|
392
|
+
.flatMap((childKey, childIndex) => {
|
|
393
|
+
return this.buildTree({ [childKey]: container[childKey] }, `${nodeKey}-${childIndex + 1}`, childPath);
|
|
394
|
+
});
|
|
395
|
+
const nodeMeta = hasActive
|
|
396
|
+
? {
|
|
397
|
+
kind: 'group-active',
|
|
398
|
+
title: key,
|
|
399
|
+
activeVisual: this.formatActiveSymbol(container[activeKeyName]),
|
|
400
|
+
activeBoolean: this.toBooleanLike(container[activeKeyName]),
|
|
401
|
+
activePath: [...childPath, activeKeyName],
|
|
402
|
+
}
|
|
403
|
+
: undefined;
|
|
404
|
+
return {
|
|
405
|
+
key: nodeKey,
|
|
406
|
+
label,
|
|
407
|
+
icon: 'pi pi-folder',
|
|
408
|
+
children: [...itemsChildren, ...additionalChildren],
|
|
409
|
+
data: nodeMeta,
|
|
410
|
+
};
|
|
411
|
+
}
|
|
412
|
+
const compactValue = this.toCompactTextAndActive(value, childPath, key);
|
|
413
|
+
if (compactValue) {
|
|
414
|
+
return {
|
|
415
|
+
key: nodeKey,
|
|
416
|
+
label: `${key}: Texto: ${compactValue.text} | ${compactValue.activeVisual}`,
|
|
417
|
+
icon: 'pi pi-file',
|
|
418
|
+
data: compactValue,
|
|
419
|
+
};
|
|
420
|
+
}
|
|
421
|
+
const groupedValue = this.toGroupWithActive(value);
|
|
422
|
+
if (groupedValue) {
|
|
423
|
+
groupedValue.meta.title = key;
|
|
424
|
+
groupedValue.meta.activePath = [...childPath, activeKeyName];
|
|
425
|
+
return {
|
|
426
|
+
key: nodeKey,
|
|
427
|
+
label: `${key} | ${groupedValue.activeSymbol}`,
|
|
428
|
+
icon: 'pi pi-folder',
|
|
429
|
+
children: this.buildTree(groupedValue.children, nodeKey, childPath),
|
|
430
|
+
data: groupedValue.meta,
|
|
431
|
+
};
|
|
432
|
+
}
|
|
271
433
|
if (this.isComplex(value)) {
|
|
272
434
|
return {
|
|
273
435
|
key: nodeKey,
|
|
274
436
|
label: key,
|
|
275
|
-
|
|
276
|
-
children: this.buildTree(value, nodeKey),
|
|
437
|
+
icon: this.getIcon(value),
|
|
438
|
+
children: this.buildTree(value, nodeKey, childPath),
|
|
277
439
|
};
|
|
278
440
|
}
|
|
441
|
+
const primitiveMeta = key === textKeyName
|
|
442
|
+
? {
|
|
443
|
+
kind: 'text-primitive',
|
|
444
|
+
key,
|
|
445
|
+
value: this.formatPrimitive(value),
|
|
446
|
+
path: childPath,
|
|
447
|
+
}
|
|
448
|
+
: key === activeKeyName
|
|
449
|
+
? {
|
|
450
|
+
kind: 'active-primitive',
|
|
451
|
+
key,
|
|
452
|
+
activeVisual: this.formatActiveSymbol(value),
|
|
453
|
+
activeBoolean: this.toBooleanLike(value),
|
|
454
|
+
path: childPath,
|
|
455
|
+
}
|
|
456
|
+
: undefined;
|
|
279
457
|
return {
|
|
280
458
|
key: nodeKey,
|
|
281
|
-
label:
|
|
459
|
+
label: key === activeKeyName
|
|
460
|
+
? `${key}: ${this.formatActiveSymbol(value)}`
|
|
461
|
+
: `${key}: ${this.formatPrimitive(value)}`,
|
|
282
462
|
icon: 'pi pi-file',
|
|
463
|
+
data: primitiveMeta,
|
|
283
464
|
};
|
|
284
465
|
});
|
|
285
466
|
}
|
|
@@ -301,6 +482,87 @@ class JsonViewerComponent {
|
|
|
301
482
|
return value;
|
|
302
483
|
return String(value);
|
|
303
484
|
}
|
|
485
|
+
toCompactTextAndActive(value, basePath, indexLabel) {
|
|
486
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
|
487
|
+
return null;
|
|
488
|
+
}
|
|
489
|
+
const record = value;
|
|
490
|
+
const textKeyName = this.textKey();
|
|
491
|
+
const activeKeyName = this.activeKey();
|
|
492
|
+
const hasText = Object.prototype.hasOwnProperty.call(record, textKeyName);
|
|
493
|
+
const hasActive = Object.prototype.hasOwnProperty.call(record, activeKeyName);
|
|
494
|
+
if (!hasText || !hasActive)
|
|
495
|
+
return null;
|
|
496
|
+
const activeValue = record[activeKeyName];
|
|
497
|
+
return {
|
|
498
|
+
kind: 'compact-item',
|
|
499
|
+
indexLabel,
|
|
500
|
+
text: this.formatPrimitive(record[textKeyName]),
|
|
501
|
+
activeVisual: this.formatActiveSymbol(activeValue),
|
|
502
|
+
activeBoolean: this.toBooleanLike(activeValue),
|
|
503
|
+
textPath: [...basePath, textKeyName],
|
|
504
|
+
activePath: [...basePath, activeKeyName],
|
|
505
|
+
};
|
|
506
|
+
}
|
|
507
|
+
isItemsContainer(value) {
|
|
508
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
|
509
|
+
return false;
|
|
510
|
+
}
|
|
511
|
+
return Array.isArray(value[this.itemsKey()]);
|
|
512
|
+
}
|
|
513
|
+
toGroupWithActive(value) {
|
|
514
|
+
if (typeof value !== 'object' || value === null || Array.isArray(value)) {
|
|
515
|
+
return null;
|
|
516
|
+
}
|
|
517
|
+
const record = value;
|
|
518
|
+
const activeKeyName = this.activeKey();
|
|
519
|
+
const hasActive = Object.prototype.hasOwnProperty.call(record, activeKeyName);
|
|
520
|
+
if (!hasActive)
|
|
521
|
+
return null;
|
|
522
|
+
const childEntries = Object.entries(record).filter(([childKey]) => childKey !== activeKeyName);
|
|
523
|
+
if (childEntries.length === 0)
|
|
524
|
+
return null;
|
|
525
|
+
const hasComplexChildren = childEntries.some(([, childValue]) => this.isComplex(childValue));
|
|
526
|
+
if (!hasComplexChildren)
|
|
527
|
+
return null;
|
|
528
|
+
return {
|
|
529
|
+
activeSymbol: this.formatActiveSymbol(record[activeKeyName]),
|
|
530
|
+
children: Object.fromEntries(childEntries),
|
|
531
|
+
meta: {
|
|
532
|
+
kind: 'group-active',
|
|
533
|
+
title: '',
|
|
534
|
+
activeVisual: this.formatActiveSymbol(record[activeKeyName]),
|
|
535
|
+
activeBoolean: this.toBooleanLike(record[activeKeyName]),
|
|
536
|
+
},
|
|
537
|
+
};
|
|
538
|
+
}
|
|
539
|
+
formatActiveSymbol(value) {
|
|
540
|
+
const boolLike = this.toBooleanLike(value);
|
|
541
|
+
if (boolLike === true)
|
|
542
|
+
return this.showStatusAsSymbol() ? '✓' : 'true';
|
|
543
|
+
if (boolLike === false)
|
|
544
|
+
return this.showStatusAsSymbol() ? '✗' : 'false';
|
|
545
|
+
return this.formatPrimitive(value);
|
|
546
|
+
}
|
|
547
|
+
toBooleanLike(value) {
|
|
548
|
+
if (typeof value === 'boolean')
|
|
549
|
+
return value;
|
|
550
|
+
if (typeof value === 'number') {
|
|
551
|
+
if (value === 1)
|
|
552
|
+
return true;
|
|
553
|
+
if (value === 0)
|
|
554
|
+
return false;
|
|
555
|
+
return null;
|
|
556
|
+
}
|
|
557
|
+
if (typeof value === 'string') {
|
|
558
|
+
const normalized = value.trim().toLowerCase();
|
|
559
|
+
if (normalized === 'true' || normalized === '1')
|
|
560
|
+
return true;
|
|
561
|
+
if (normalized === 'false' || normalized === '0')
|
|
562
|
+
return false;
|
|
563
|
+
}
|
|
564
|
+
return null;
|
|
565
|
+
}
|
|
304
566
|
getIcon(value) {
|
|
305
567
|
if (Array.isArray(value))
|
|
306
568
|
return 'pi pi-list';
|
|
@@ -308,25 +570,64 @@ class JsonViewerComponent {
|
|
|
308
570
|
return 'pi pi-folder';
|
|
309
571
|
return 'pi pi-file';
|
|
310
572
|
}
|
|
573
|
+
setValueAtPath(path, value) {
|
|
574
|
+
if (!path.length ||
|
|
575
|
+
typeof this.normalizedValue !== 'object' ||
|
|
576
|
+
this.normalizedValue === null) {
|
|
577
|
+
return;
|
|
578
|
+
}
|
|
579
|
+
let target = this.normalizedValue;
|
|
580
|
+
for (let index = 0; index < path.length - 1; index += 1) {
|
|
581
|
+
const segment = path[index];
|
|
582
|
+
if (target === null || target === undefined)
|
|
583
|
+
return;
|
|
584
|
+
target = target[segment];
|
|
585
|
+
}
|
|
586
|
+
const lastSegment = path[path.length - 1];
|
|
587
|
+
if (target !== null && target !== undefined) {
|
|
588
|
+
target[lastSegment] = value;
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
emitUpdatedValue() {
|
|
592
|
+
this.nodes = this.buildTree(this.normalizedValue);
|
|
593
|
+
this.emitCurrentValue();
|
|
594
|
+
this.onTouched();
|
|
595
|
+
}
|
|
596
|
+
emitCurrentValue() {
|
|
597
|
+
const payload = this.cloneValue(this.normalizedValue);
|
|
598
|
+
this.controlValue = payload;
|
|
599
|
+
this.onChange(payload);
|
|
600
|
+
this.valueChange.emit(payload);
|
|
601
|
+
}
|
|
602
|
+
cloneValue(value) {
|
|
603
|
+
try {
|
|
604
|
+
return JSON.parse(JSON.stringify(value));
|
|
605
|
+
}
|
|
606
|
+
catch {
|
|
607
|
+
return value;
|
|
608
|
+
}
|
|
609
|
+
}
|
|
311
610
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: JsonViewerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
312
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.11", type: JsonViewerComponent, isStandalone: true, selector: "app-json-viewer", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null } }, providers: [
|
|
611
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "21.2.11", type: JsonViewerComponent, isStandalone: true, selector: "app-json-viewer", inputs: { data: { classPropertyName: "data", publicName: "data", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: false, transformFunction: null }, textKey: { classPropertyName: "textKey", publicName: "textKey", isSignal: true, isRequired: false, transformFunction: null }, activeKey: { classPropertyName: "activeKey", publicName: "activeKey", isSignal: true, isRequired: false, transformFunction: null }, itemsKey: { classPropertyName: "itemsKey", publicName: "itemsKey", isSignal: true, isRequired: false, transformFunction: null }, showStatusAsSymbol: { classPropertyName: "showStatusAsSymbol", publicName: "showStatusAsSymbol", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange" }, providers: [
|
|
313
612
|
{
|
|
314
613
|
provide: NG_VALUE_ACCESSOR,
|
|
315
614
|
useExisting: forwardRef(() => JsonViewerComponent),
|
|
316
615
|
multi: true,
|
|
317
616
|
},
|
|
318
|
-
], ngImport: i0, template: "<p-tree\r\n
|
|
617
|
+
], ngImport: i0, template: "<p-tree\r\n [value]=\"nodes\"\r\n class=\"json-tree w-full\"\r\n selectionMode=\"single\"\r\n [(selection)]=\"selectedNode\"\r\n [highlightOnSelect]=\"false\"\r\n (onNodeSelect)=\"onNodeSelect($event)\"\r\n>\r\n <ng-template let-node pTemplate=\"default\">\r\n <div class=\"json-node\">\r\n <ng-container *ngIf=\"getNodeMeta(node) as meta; else defaultLabel\">\r\n <ng-container [ngSwitch]=\"meta.kind\">\r\n <ng-container *ngSwitchCase=\"'compact-item'\">\r\n <span class=\"json-prefix\">{{ meta.indexLabel || \"\" }}</span>\r\n <span class=\"json-key\"> Texto: </span>\r\n <ng-container *ngIf=\"isEditMode(); else compactTextView\">\r\n <input\r\n type=\"text\"\r\n class=\"json-text-input\"\r\n [class.json-text-inactive]=\"meta.activeBoolean === false\"\r\n [value]=\"meta.text || ''\"\r\n (mousedown)=\"$event.stopPropagation()\"\r\n (click)=\"$event.stopPropagation()\"\r\n (keydown)=\"$event.stopPropagation()\"\r\n (input)=\"\r\n onTextEdit(\r\n $any(meta.textPath),\r\n $any($event.target).value,\r\n meta\r\n )\r\n \"\r\n (blur)=\"onTextBlur()\"\r\n />\r\n </ng-container>\r\n <ng-template #compactTextView>\r\n <span [class.json-text-inactive]=\"meta.activeBoolean === false\">{{\r\n meta.text || \"\"\r\n }}</span>\r\n </ng-template>\r\n <span class=\"json-separator\"> | </span>\r\n <span class=\"json-status\">{{ meta.activeVisual || \"\" }}</span>\r\n <input\r\n *ngIf=\"isEditMode()\"\r\n type=\"checkbox\"\r\n class=\"json-checkbox\"\r\n [checked]=\"meta.activeBoolean === true\"\r\n [disabled]=\"meta.activeBoolean === null\"\r\n (mousedown)=\"$event.stopPropagation()\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"\r\n onActiveToggle(\r\n $any(meta.activePath),\r\n $any($event.target).checked,\r\n meta\r\n )\r\n \"\r\n />\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'group-active'\">\r\n <span>{{ meta.title || \"\" }}</span>\r\n <span class=\"json-separator\"> | </span>\r\n <span class=\"json-status\">{{ meta.activeVisual || \"\" }}</span>\r\n <input\r\n *ngIf=\"isEditMode() && meta.activePath\"\r\n type=\"checkbox\"\r\n class=\"json-checkbox\"\r\n [checked]=\"meta.activeBoolean === true\"\r\n [disabled]=\"meta.activeBoolean === null\"\r\n (mousedown)=\"$event.stopPropagation()\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"\r\n onActiveToggle(\r\n $any(meta.activePath),\r\n $any($event.target).checked,\r\n meta\r\n )\r\n \"\r\n />\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'text-primitive'\">\r\n <span>{{ meta.key || \"\" }}:</span>\r\n <ng-container *ngIf=\"isEditMode(); else textPrimitiveView\">\r\n <input\r\n type=\"text\"\r\n class=\"json-text-input\"\r\n [value]=\"meta.value || ''\"\r\n (mousedown)=\"$event.stopPropagation()\"\r\n (click)=\"$event.stopPropagation()\"\r\n (keydown)=\"$event.stopPropagation()\"\r\n (input)=\"\r\n onTextEdit($any(meta.path), $any($event.target).value, meta)\r\n \"\r\n (blur)=\"onTextBlur()\"\r\n />\r\n </ng-container>\r\n <ng-template #textPrimitiveView>\r\n <span>{{ meta.value || \"\" }}</span>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'active-primitive'\">\r\n <span>{{ meta.key || \"\" }}:</span>\r\n <span class=\"json-status\">{{ meta.activeVisual || \"\" }}</span>\r\n <input\r\n *ngIf=\"isEditMode()\"\r\n type=\"checkbox\"\r\n class=\"json-checkbox\"\r\n [checked]=\"meta.activeBoolean === true\"\r\n [disabled]=\"meta.activeBoolean === null\"\r\n (mousedown)=\"$event.stopPropagation()\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"\r\n onActiveToggle(\r\n $any(meta.path),\r\n $any($event.target).checked,\r\n meta\r\n )\r\n \"\r\n />\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchDefault>\r\n {{ node.label }}\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template #defaultLabel>\r\n {{ node.label }}\r\n </ng-template>\r\n </div>\r\n </ng-template>\r\n</p-tree>\r\n", styles: [":host ::ng-deep .json-tree .p-tree-node-content,:host ::ng-deep .json-tree .p-treenode-content{padding:.02rem .15rem!important;display:flex;align-items:center;width:100%;min-width:0}:host ::ng-deep .json-tree .p-tree-node-label,:host ::ng-deep .json-tree .p-tree-node-label>span{flex:1 1 0;min-width:0;display:flex}:host ::ng-deep .json-tree .json-node{display:flex;align-items:center;gap:.25rem;width:100%;min-width:0}:host ::ng-deep .json-tree .json-prefix,:host ::ng-deep .json-tree .json-key,:host ::ng-deep .json-tree .json-separator,:host ::ng-deep .json-tree .json-status{white-space:nowrap;flex-shrink:0}:host ::ng-deep .json-tree .json-text-input{flex:1 1 0;min-width:0;border:1px solid #cbd5e1;border-radius:.25rem;padding:.15rem .5rem;font-size:.875rem}:host ::ng-deep .json-tree .json-text-inactive{color:#8b5e61}:host ::ng-deep .json-tree input.json-text-input.json-text-inactive{background-color:#f9f2f2;border-color:#e5c8cb}:host ::ng-deep .json-tree .json-checkbox{width:.9rem;height:.9rem;cursor:pointer;flex-shrink:0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1$1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "ngmodule", type: TreeModule }, { kind: "component", type: i2.Tree, selector: "p-tree", inputs: ["value", "selectionMode", "loadingMode", "selection", "styleClass", "contextMenu", "contextMenuSelectionMode", "contextMenuSelection", "draggableScope", "droppableScope", "draggableNodes", "droppableNodes", "metaKeySelection", "propagateSelectionUp", "propagateSelectionDown", "loading", "loadingIcon", "emptyMessage", "ariaLabel", "togglerAriaLabel", "ariaLabelledBy", "validateDrop", "filter", "filterInputAutoFocus", "filterBy", "filterMode", "filterOptions", "filterPlaceholder", "filteredNodes", "filterLocale", "scrollHeight", "lazy", "virtualScroll", "virtualScrollItemSize", "virtualScrollOptions", "indentation", "_templateMap", "trackBy", "highlightOnSelect"], outputs: ["selectionChange", "contextMenuSelectionChange", "onNodeSelect", "onNodeUnselect", "onNodeExpand", "onNodeCollapse", "onNodeContextMenuSelect", "onNodeDoubleClick", "onNodeDrop", "onLazyLoad", "onScroll", "onScrollIndexChange", "onFilter"] }, { kind: "directive", type: i3.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }] });
|
|
319
618
|
}
|
|
320
619
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: JsonViewerComponent, decorators: [{
|
|
321
620
|
type: Component,
|
|
322
|
-
args: [{ selector: 'app-json-viewer', standalone: true, imports: [TreeModule], providers: [
|
|
621
|
+
args: [{ selector: 'app-json-viewer', standalone: true, imports: [CommonModule, TreeModule], providers: [
|
|
323
622
|
{
|
|
324
623
|
provide: NG_VALUE_ACCESSOR,
|
|
325
624
|
useExisting: forwardRef(() => JsonViewerComponent),
|
|
326
625
|
multi: true,
|
|
327
626
|
},
|
|
328
|
-
], template: "<p-tree\r\n
|
|
329
|
-
}], ctorParameters: () => [], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }] } }
|
|
627
|
+
], template: "<p-tree\r\n [value]=\"nodes\"\r\n class=\"json-tree w-full\"\r\n selectionMode=\"single\"\r\n [(selection)]=\"selectedNode\"\r\n [highlightOnSelect]=\"false\"\r\n (onNodeSelect)=\"onNodeSelect($event)\"\r\n>\r\n <ng-template let-node pTemplate=\"default\">\r\n <div class=\"json-node\">\r\n <ng-container *ngIf=\"getNodeMeta(node) as meta; else defaultLabel\">\r\n <ng-container [ngSwitch]=\"meta.kind\">\r\n <ng-container *ngSwitchCase=\"'compact-item'\">\r\n <span class=\"json-prefix\">{{ meta.indexLabel || \"\" }}</span>\r\n <span class=\"json-key\"> Texto: </span>\r\n <ng-container *ngIf=\"isEditMode(); else compactTextView\">\r\n <input\r\n type=\"text\"\r\n class=\"json-text-input\"\r\n [class.json-text-inactive]=\"meta.activeBoolean === false\"\r\n [value]=\"meta.text || ''\"\r\n (mousedown)=\"$event.stopPropagation()\"\r\n (click)=\"$event.stopPropagation()\"\r\n (keydown)=\"$event.stopPropagation()\"\r\n (input)=\"\r\n onTextEdit(\r\n $any(meta.textPath),\r\n $any($event.target).value,\r\n meta\r\n )\r\n \"\r\n (blur)=\"onTextBlur()\"\r\n />\r\n </ng-container>\r\n <ng-template #compactTextView>\r\n <span [class.json-text-inactive]=\"meta.activeBoolean === false\">{{\r\n meta.text || \"\"\r\n }}</span>\r\n </ng-template>\r\n <span class=\"json-separator\"> | </span>\r\n <span class=\"json-status\">{{ meta.activeVisual || \"\" }}</span>\r\n <input\r\n *ngIf=\"isEditMode()\"\r\n type=\"checkbox\"\r\n class=\"json-checkbox\"\r\n [checked]=\"meta.activeBoolean === true\"\r\n [disabled]=\"meta.activeBoolean === null\"\r\n (mousedown)=\"$event.stopPropagation()\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"\r\n onActiveToggle(\r\n $any(meta.activePath),\r\n $any($event.target).checked,\r\n meta\r\n )\r\n \"\r\n />\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'group-active'\">\r\n <span>{{ meta.title || \"\" }}</span>\r\n <span class=\"json-separator\"> | </span>\r\n <span class=\"json-status\">{{ meta.activeVisual || \"\" }}</span>\r\n <input\r\n *ngIf=\"isEditMode() && meta.activePath\"\r\n type=\"checkbox\"\r\n class=\"json-checkbox\"\r\n [checked]=\"meta.activeBoolean === true\"\r\n [disabled]=\"meta.activeBoolean === null\"\r\n (mousedown)=\"$event.stopPropagation()\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"\r\n onActiveToggle(\r\n $any(meta.activePath),\r\n $any($event.target).checked,\r\n meta\r\n )\r\n \"\r\n />\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'text-primitive'\">\r\n <span>{{ meta.key || \"\" }}:</span>\r\n <ng-container *ngIf=\"isEditMode(); else textPrimitiveView\">\r\n <input\r\n type=\"text\"\r\n class=\"json-text-input\"\r\n [value]=\"meta.value || ''\"\r\n (mousedown)=\"$event.stopPropagation()\"\r\n (click)=\"$event.stopPropagation()\"\r\n (keydown)=\"$event.stopPropagation()\"\r\n (input)=\"\r\n onTextEdit($any(meta.path), $any($event.target).value, meta)\r\n \"\r\n (blur)=\"onTextBlur()\"\r\n />\r\n </ng-container>\r\n <ng-template #textPrimitiveView>\r\n <span>{{ meta.value || \"\" }}</span>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"'active-primitive'\">\r\n <span>{{ meta.key || \"\" }}:</span>\r\n <span class=\"json-status\">{{ meta.activeVisual || \"\" }}</span>\r\n <input\r\n *ngIf=\"isEditMode()\"\r\n type=\"checkbox\"\r\n class=\"json-checkbox\"\r\n [checked]=\"meta.activeBoolean === true\"\r\n [disabled]=\"meta.activeBoolean === null\"\r\n (mousedown)=\"$event.stopPropagation()\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"\r\n onActiveToggle(\r\n $any(meta.path),\r\n $any($event.target).checked,\r\n meta\r\n )\r\n \"\r\n />\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchDefault>\r\n {{ node.label }}\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n <ng-template #defaultLabel>\r\n {{ node.label }}\r\n </ng-template>\r\n </div>\r\n </ng-template>\r\n</p-tree>\r\n", styles: [":host ::ng-deep .json-tree .p-tree-node-content,:host ::ng-deep .json-tree .p-treenode-content{padding:.02rem .15rem!important;display:flex;align-items:center;width:100%;min-width:0}:host ::ng-deep .json-tree .p-tree-node-label,:host ::ng-deep .json-tree .p-tree-node-label>span{flex:1 1 0;min-width:0;display:flex}:host ::ng-deep .json-tree .json-node{display:flex;align-items:center;gap:.25rem;width:100%;min-width:0}:host ::ng-deep .json-tree .json-prefix,:host ::ng-deep .json-tree .json-key,:host ::ng-deep .json-tree .json-separator,:host ::ng-deep .json-tree .json-status{white-space:nowrap;flex-shrink:0}:host ::ng-deep .json-tree .json-text-input{flex:1 1 0;min-width:0;border:1px solid #cbd5e1;border-radius:.25rem;padding:.15rem .5rem;font-size:.875rem}:host ::ng-deep .json-tree .json-text-inactive{color:#8b5e61}:host ::ng-deep .json-tree input.json-text-input.json-text-inactive{background-color:#f9f2f2;border-color:#e5c8cb}:host ::ng-deep .json-tree .json-checkbox{width:.9rem;height:.9rem;cursor:pointer;flex-shrink:0}\n"] }]
|
|
628
|
+
}], ctorParameters: () => [], propDecorators: { data: [{ type: i0.Input, args: [{ isSignal: true, alias: "data", required: false }] }], mode: [{ type: i0.Input, args: [{ isSignal: true, alias: "mode", required: false }] }], textKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "textKey", required: false }] }], activeKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "activeKey", required: false }] }], itemsKey: [{ type: i0.Input, args: [{ isSignal: true, alias: "itemsKey", required: false }] }], showStatusAsSymbol: [{ type: i0.Input, args: [{ isSignal: true, alias: "showStatusAsSymbol", required: false }] }], valueChange: [{
|
|
629
|
+
type: Output
|
|
630
|
+
}] } });
|
|
330
631
|
|
|
331
632
|
class KpicardComponent {
|
|
332
633
|
//type = input.required<string>();
|
|
@@ -464,7 +765,7 @@ class DocxPreviewComponent {
|
|
|
464
765
|
this.visibleChange.emit(false);
|
|
465
766
|
}
|
|
466
767
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: DocxPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
467
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.11", type: DocxPreviewComponent, isStandalone: true, selector: "app-docx-preview", inputs: { visible: { classPropertyName: "visible", publicName: "visible", isSignal: false, isRequired: false, transformFunction: null }, blob: { classPropertyName: "blob", publicName: "blob", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { visibleChange: "visibleChange" }, viewQueries: [{ propertyName: "view", first: true, predicate: ["viewer"], descendants: true, isSignal: true }], ngImport: i0, template: "<p-dialog\r\n [visible]=\"visible\"\r\n (onHide)=\"onHide()\"\r\n [modal]=\"true\"\r\n [breakpoints]=\"{ '1199px': '75vw', '575px': '90vw' }\"\r\n [style]=\"{ width: '80vw' }\"\r\n [draggable]=\"false\"\r\n [resizable]=\"false\"\r\n [closable]=\"true\"\r\n [maximizable]=\"true\"\r\n>\r\n <ng-template #header>\r\n <div class=\"flex justify-content-center align-items-center gap-2 px-2\">\r\n <p-avatar image=\"icon2/word-2019.png\" />\r\n <span class=\"font-bold\">Vista preliminar del documento</span>\r\n </div>\r\n </ng-template>\r\n <div #viewer></div>\r\n</p-dialog>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: DialogModule }, { kind: "component", type: i1$2.Dialog, selector: "p-dialog", inputs: ["hostName", "header", "draggable", "resizable", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "maskMotionOptions", "motionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "closeButtonProps", "maximizeButtonProps", "visible", "style", "position", "role", "appendTo", "content", "contentTemplate", "footerTemplate", "closeIconTemplate", "maximizeIconTemplate", "minimizeIconTemplate", "headlessTemplate"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "ngmodule", type: AvatarModule }, { kind: "component", type: i2.Avatar, selector: "p-avatar", inputs: ["label", "icon", "image", "size", "shape", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }] });
|
|
768
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "21.2.11", type: DocxPreviewComponent, isStandalone: true, selector: "app-docx-preview", inputs: { visible: { classPropertyName: "visible", publicName: "visible", isSignal: false, isRequired: false, transformFunction: null }, blob: { classPropertyName: "blob", publicName: "blob", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { visibleChange: "visibleChange" }, viewQueries: [{ propertyName: "view", first: true, predicate: ["viewer"], descendants: true, isSignal: true }], ngImport: i0, template: "<p-dialog\r\n [visible]=\"visible\"\r\n (onHide)=\"onHide()\"\r\n [modal]=\"true\"\r\n [breakpoints]=\"{ '1199px': '75vw', '575px': '90vw' }\"\r\n [style]=\"{ width: '80vw' }\"\r\n [draggable]=\"false\"\r\n [resizable]=\"false\"\r\n [closable]=\"true\"\r\n [maximizable]=\"true\"\r\n>\r\n <ng-template #header>\r\n <div class=\"flex justify-content-center align-items-center gap-2 px-2\">\r\n <p-avatar image=\"icon2/word-2019.png\" />\r\n <span class=\"font-bold\">Vista preliminar del documento</span>\r\n </div>\r\n </ng-template>\r\n <div #viewer></div>\r\n</p-dialog>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: DialogModule }, { kind: "component", type: i1$2.Dialog, selector: "p-dialog", inputs: ["hostName", "header", "draggable", "resizable", "contentStyle", "contentStyleClass", "modal", "closeOnEscape", "dismissableMask", "rtl", "closable", "breakpoints", "styleClass", "maskStyleClass", "maskStyle", "showHeader", "blockScroll", "autoZIndex", "baseZIndex", "minX", "minY", "focusOnShow", "maximizable", "keepInViewport", "focusTrap", "transitionOptions", "maskMotionOptions", "motionOptions", "closeIcon", "closeAriaLabel", "closeTabindex", "minimizeIcon", "maximizeIcon", "closeButtonProps", "maximizeButtonProps", "visible", "style", "position", "role", "appendTo", "content", "contentTemplate", "footerTemplate", "closeIconTemplate", "maximizeIconTemplate", "minimizeIconTemplate", "headlessTemplate"], outputs: ["onShow", "onHide", "visibleChange", "onResizeInit", "onResizeEnd", "onDragEnd", "onMaximize"] }, { kind: "ngmodule", type: AvatarModule }, { kind: "component", type: i2$1.Avatar, selector: "p-avatar", inputs: ["label", "icon", "image", "size", "shape", "styleClass", "ariaLabel", "ariaLabelledBy"], outputs: ["onImageError"] }] });
|
|
468
769
|
}
|
|
469
770
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.2.11", ngImport: i0, type: DocxPreviewComponent, decorators: [{
|
|
470
771
|
type: Component,
|